======= */ const isEqual = (obj1, obj2) => { /** * More accurately check the type of a JavaScript object * @param {Object} obj The object * @return {String} The object type */ function getType(obj) { return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase(); } function areArraysEqual() { // Check length if (obj1.length !== obj2.length) return false; // Check each item in the array for (let i = 0; i < obj1.length; i++) { if (!isEqual(obj1[i], obj2[i])) return false; } // If no errors, return true return true; } function areObjectsEqual() { if (Object.keys(obj1).length !== Object.keys(obj2).length) return false; // Check each item in the object for (let key in obj1) { if (Object.prototype.hasOwnProperty.call(obj1, key)) { if (!isEqual(obj1[key], obj2[key])) return false; } } // If no errors, return true return true; } function areFunctionsEqual() { return obj1.toString() === obj2.toString(); } function arePrimativesEqual() { return obj1 === obj2; } // Get the object type let type = getType(obj1); // If the two items are not the same type, return false if (type !== getType(obj2)) return false; // Compare based on type if (type === "array") return areArraysEqual(); if (type === "object") return areObjectsEqual(); if (type === "function") return areFunctionsEqual(); return arePrimativesEqual(); }; /***/ }) /******/ }); <<<<<<< HEAD <<<<<<< HEAD //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2FuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYmV0d2Vlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYm9vbGVhblNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZlR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuU2VxdWVuY2VPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY29tcG9uZW50V2l0aE5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2Rpc2FsbG93ZWRJZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvZWxlbWVudFR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9leHBsaWNpdE51bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9yZW5kZXJhYmxlQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9oZWxwZXJzL3dyYXBWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9rZXlzT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlUHJvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9uQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL25vbk5lZ2F0aXZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvbm9uTmVnYXRpdmVOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL251bWVyaWNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ByZWRpY2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3JlZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVxdWlyZWRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVzdHJpY3RlZFByb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NlcXVlbmNlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NoYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9zdHJpbmdFbmRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvc3RyaW5nU3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvdW5pcXVlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3VuaXF1ZUFycmF5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ZhbHVlc09mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC93aXRoU2hhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5maW5kL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2Nocm9tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29uc29saWRhdGVkLWV2ZW50cy9saWIvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zdHlsZXMvdWkuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb2N1bWVudC5jb250YWlucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9jdW1lbnQuY29udGFpbnMvcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvSW50ZWdlck9ySW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9JbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Ficy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvNS9mbG9vci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tYXhTYWZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9yZWdleFRlc3Rlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXMyMDE1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb25zLWhhdmUtbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXIvbGliL0xhbmd1YWdlTGludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMtZXhhY3QvYnVpbGQvaGVscGVycy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzLWV4YWN0L2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWN0aXZpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9haXJwbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtb2N0YWdvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsZXJ0LXRyaWFuZ2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tY2VudGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tanVzdGlmeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsaWduLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hbGlnbi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FwZXJ0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJjaGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24tY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC1jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy11cC1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXQtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2F3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmFyLWNoYXJ0LTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXItY2hhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmF0dGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JlbGwtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmVsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JsdWV0b290aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JvbGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLW9wZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYm9va21hcmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9icmllZmNhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYWxlbmRhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NhbWVyYS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYW1lcmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbi11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NoZXZyb25zLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbnMtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nocm9tZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NsaXBib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQtZHJpenpsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLWxpZ2h0bmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLXJhaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jbG91ZC1zbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29kZXBlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvZGVzYW5kYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29mZmVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvbW1hbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb21wYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29weS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1sZWZ0LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItbGVmdC11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1yaWdodC1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcHUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcmVkaXQtY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcm9zc2hhaXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kYXRhYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Rpc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kaXZpZGUtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZGl2aWRlLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RvbGxhci1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZG93bmxvYWQtY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kb3dubG9hZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RyaWJiYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZHJvcGxldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9leHRlcm5hbC1saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZXllLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2V5ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZhY2Vib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmFzdC1mb3J3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmVhdGhlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpZ21hLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsZS1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtcGx1cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9maWxtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmxhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZm9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJhbWVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0LWJyYW5jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2dpdC1jb21taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0aHViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0bGFiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2xvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ncmlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGFyZC1kcml2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWFkcGhvbmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGVhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWxwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hleGFnb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ob21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbmJveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2luZm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbnN0YWdyYW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pdGFsaWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXllcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXlvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saWZlLWJ1b3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbGlua2VkaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9hZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYWlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWFwLXBpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21heGltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYXhpbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21laC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tZXNzYWdlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWljLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbmltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9taW5pbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW9uaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLWhvcml6b250YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLXZlcnRpY2FsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW91c2UtcG9pbnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tdXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24tMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhcGVyY2xpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGVuLXRvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wZXJjZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWZvcndhcmRlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWluY29taW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtbWlzc2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb3V0Z29pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9waG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BpZS1jaGFydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsYXktY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsdXMtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGx1cy1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG9ja2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG93ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wcmludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZWZyZXNoLWNjdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3JlZnJlc2gtY3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXdpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yb3RhdGUtY2N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcm90YXRlLWN3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcnNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2F2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NjaXNzb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NlcnZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hhcmUtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoYXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hpZWxkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoaWVsZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWJhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWNhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zaHVmZmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2lkZWJhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtYmFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtZm9yd2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NsYWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2xhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc21hcnRwaG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NtaWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc3BlYWtlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N0YXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdG9wLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bnJpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWJsZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YXJnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90ZXJtaW5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RoZXJtb21ldGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdGh1bWJzLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90aHVtYnMtdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90b2dnbGUtbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RvZ2dsZS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Rvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmFzaC0yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVsbG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVuZGluZy1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJlbmRpbmctdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmlhbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RydWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VtYnJlbGxhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5sb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLWNsb3VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlci1jaGVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VzZXItbWludXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXBsdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvaWNlbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdm9sdW1lLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92b2x1bWUteC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3dhdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2lmaS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy93aWZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2luZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3gtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveW91dHViZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3phcC1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96b29tLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvem9vbS1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvQnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvRGlzY2xvc3VyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSWNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L0xhYmVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHRhcmVhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9UaXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RpdGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3M/NTMwYiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvdHJhY2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9kYXJrLW1vZGUtdGh1bWJuYWlsLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1kYXJrLWRlc2lnbi1saW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGVzaWduLWxpbnRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1oZWxwLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLWJvb2xlYW4tb3BlcmF0aW9uLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLWVsbGlwc2Uuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItbGluZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci1wb2x5Z29uLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXJlY3RhbmdsZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci10ZXh0LnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLW1vcmUuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tdGFibGUtY3JlYXRvci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi10aGVtZS1zd2l0Y2hlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvbGlnaHQtbW9kZS10aHVtYm5haWwuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9BcHAudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvQ29sb3JMaW50ZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvQ29sb3JUaWxlLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvRGVzaWduTGludGVyL0Rlc2lnbkxpbnRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9MYW5ndWFnZUxpbnRlclBsdWdpbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0hvbWUudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9QbHVnaW5Db250ZXh0LnRzIiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9SZXNpemVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvVGFibGVDcmVhdG9yL0NvbHVtbkNvbmZpZ3VyYXRpb24udHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UYWJsZUNyZWF0b3IvRGltZW5zaW9uc1NlbGVjdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RhYmxlQ3JlYXRvci9UYWJsZUNyZWF0b3IudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UaGVtZVN3aXRjaGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2luZGV4LnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3N0eWxlcy91aS5jc3M/MzRjNyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL3V0aWxpdHktZnVuY3Rpb25zLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFD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QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLE9BQU87QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGtDQUFrQyxFQUFFLGFBQWEsRUFBRTtBQUNuRCxtQ0FBbUMsRUFBRSxhQUFhLEVBQUU7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7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OztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUMsZ0JBQWdCO0FBQ3JEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLE9BQU87QUFDOUI7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSx3Q0FBd0MsMkJBQTJCO0FBQ25FLHdDQUF3QyxxQ0FBcUM7O0FBRTdFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRSxFQUFFOztBQUVUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQsaUJBQWlCO0FBQ3BFOztBQUVBLG9DQUFvQyx3QkFBd0I7QUFDNUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQkFBMkIsOEJBQThCO0FBQ3pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDRCQUE0Qiw2QkFBNkI7QUFDekQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DLGFBQWE7QUFDakQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLGVBQWU7QUFDeEM7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsMEJBQTBCO0FBQ2xFLHdDQUF3QywwQkFBMEI7QUFDbEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQixZQUFZO0FBQ2xDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx5REFBeUQsWUFBWTtBQUNyRSxTQUFTO0FBQ1Q7QUFDQSx5REFBeUQsWUFBWTtBQUNyRSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSxnQ0FBZ0MsZ0NBQWdDO0FBQ2hFO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7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QUFVLElBQTRFO0FBQ3hGO0FBQ0EsRUFBRSxpQ0FBcUIsRUFBRSxtQ0FBRTtBQUMzQjtBQUNBLEdBQUc7QUFBQSxvR0FBQztBQUNKLEVBQUUsTUFBTSxFQUVOO0FBQ0YsQ0FBQzs7Ozs7Ozs7Ozs7OztBQ3pERDtBQUFBO0FBQUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7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O0FBQ2pELG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEdBQXNDO0FBQzlDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsa0ZBQTBCO0FBQ2xDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsc0ZBQTRCO0FBQ3BDLG1CQUFPLENBQUMsNEVBQXVCO0FBQy9CLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsb0VBQW1CO0FBQzNCLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsOEVBQXdCO0FBQ2hDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsNEZBQStCO0FBQ3ZDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsZ0hBQXlDO0FBQ2pELG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsa0dBQWtDO0FBQzFDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsb0dBQW1DO0FBQzNDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsNEdBQXVDO0FBQy9DLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsa0hBQTBDO0FBQ2xELG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsOEdBQXdDO0FBQ2hELG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsZ0ZBQXlCO0FBQ2pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsOEZBQWdDO0FBQ3hDLG1CQUFPLENBQUMsd0dBQXFDO0FBQzdDLG1CQUFPLENBQUMsZ0dBQWlDO0FBQ3pDLG1CQUFPLENBQUMsb0lBQW1EO0FBQzNELG1CQUFPLENBQUMsd0ZBQTZCO0FBQ3JDLG1CQUFPLENBQUMsMEZBQThCO0FBQ3RDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsc0dBQW9DO0FBQzVDLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsb0ZBQTJCO0FBQ25DLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsMEVBQXNCO0FBQzlCLG1CQUFPLENBQUMsb0ZBQTJC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QU0sWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sVUFBVSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxVQUFVLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxVQUFVLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsV0FBVyxRQUFRLEtBQUssVUFBVSxRQUFRLEtBQUssTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLEtBQUssWUFBWSxNQUFNLEtBQUssWUFBWSxNQUFNLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLGNBQWMsUUFBUSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLFNBQVMsS0FBSyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxNQUFNLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFB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QUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE1BQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLFdBQVcsWUFBWSxXQUFXLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sTUFBTSxVQUFVLE1BQU0sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsTUFBTSxNQUFNLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLGFBQWEsTUFBTSxZQUFZLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxVQUFVLFVBQVUsVUFBVSxNQUFNLFVBQVUsS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sYUFBYSxNQUFNLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLFdBQVcsS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sYUFBYSxNQUFNLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksT0FBTyxNQUFNLFVBQVUsWUFBWSxXQUFXLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sTUFBTSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLEtBQUssT0FBTyxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsTUFBTSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsV0FBVyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxTQUFTLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sTUFBTSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxjQUFjLGFBQWEsT0FBTyxLQUFLLEtBQUssWUFBWSxNQUFNLE1BQU0sWUFBWSxNQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGdDQUFnQyxpQkFBaUIsY0FBYyw0S0FBNEssR0FBRyxrQkFBa0Isd0JBQXdCLEdBQUcsaUJBQWlCLHVCQUF1QixHQUFHLFVBQVUsa0JBQWtCLDJCQUEyQixpQkFBaUIsNENBQTRDLEdBQUcsaUNBQWlDLHlFQUF5RSxHQUFHLHNCQUFzQixpRUFBaUUsR0FBRywwQkFBMEIsNERBQTRELEdBQUcscUJBQXFCLGlFQUFpRSxHQUFHLFFBQVEsbUNBQW1DLG9CQUFvQix1QkFBdUIsb0JBQW9CLHFCQUFxQixHQUFHLFFBQVEscUJBQXFCLDZDQUE2QyxxQkFBcUIsc0JBQXNCLEdBQUcsWUFBWSxrQkFBa0Isd0JBQXdCLGtDQUFrQyxpQkFBaUIsMEJBQTBCLDJCQUEyQix1QkFBdUIsZ0RBQWdELDRDQUE0QyxvQkFBb0IsbUNBQW1DLHFCQUFxQixHQUFHLE9BQU8seUNBQXlDLEdBQUcsa0JBQWtCLDhCQUE4QixrQ0FBa0Msa0JBQWtCLEdBQUcsUUFBUSxpQkFBaUIsZ0JBQWdCLGdEQUFnRCxHQUFHLGNBQWMsaUJBQWlCLGtCQUFrQixHQUFHLGNBQWMsbUJBQW1CLGdCQUFnQixpQkFBaUIsdUJBQXVCLHdCQUF3Qiw0QkFBNEIsR0FBRyxjQUFjLGdCQUFnQix3QkFBd0IsdUJBQXVCLGNBQWMsYUFBYSxpQkFBaUIsZ0JBQWdCLDhCQUE4QixpQkFBaUIsR0FBRyxxQkFBcUIsaUJBQWlCLGtCQUFrQixlQUFlLGNBQWMscUJBQXFCLGlCQUFpQixXQUFXLDRDQUE0QywwQkFBMEIsdURBQXVELG9CQUFvQiw0Q0FBNEMsYUFBYSxHQUFHLDhDQUE4QyxlQUFlLEdBQUcseUJBQXlCLGtCQUFrQix3QkFBd0Isa0JBQWtCLG9CQUFvQixzQ0FBc0MsR0FBRyxlQUFlLGtCQUFrQixHQUFHLDJCQUEyQixzQkFBc0IsR0FBRyxxQkFBcUIsZUFBZSxHQUFHLHNDQUFzQyxvQkFBb0IsR0FBRyxnQ0FBZ0MscUJBQXFCLG1DQUFtQyxHQUFHLGtFQUFrRSxrQkFBa0IsaUJBQWlCLEdBQUcseUJBQXlCLHVCQUF1QixlQUFlLG9CQUFvQixjQUFjLGFBQWEsR0FBRyx5Q0FBeUMsZ0JBQWdCLGlCQUFpQix1QkFBdUIsa0NBQWtDLHVCQUF1QixHQUFHLHFEQUFxRCxpREFBaUQsR0FBRywrQ0FBK0Msb0JBQW9CLEdBQUcseURBQXlELDBDQUEwQywrQ0FBK0MsR0FBRyxxRUFBcUUsOEJBQThCLGtDQUFrQyxHQUFHLGdEQUFnRCwyQkFBMkIsNkRBQTZELEdBQUcsNERBQTRELDRDQUE0QyxHQUFHLGdFQUFnRSw4QkFBOEIsNkRBQTZELEdBQUcsNEVBQTRFLDhCQUE4QixHQUFHLHNCQUFzQixrQkFBa0Isc0JBQXNCLHdCQUF3Qix1QkFBdUIsa0NBQWtDLGlCQUFpQixrQkFBa0IsMkJBQTJCLHVCQUF1QixHQUFHLGlEQUFpRCxxQkFBcUIsR0FBRywrQ0FBK0Msc0JBQXNCLDRCQUE0QixHQUFHLHFEQUFxRCxnREFBZ0QsR0FBRyw0RUFBNEUsa0JBQWtCLHdCQUF3QixpQkFBaUIsb0JBQW9CLDZDQUE2Qyx1QkFBdUIsR0FBRyxxREFBcUQsa0NBQWtDLG1DQUFtQyw2QkFBNkIsMkJBQTJCLEdBQUcscURBQXFELDhCQUE4QixHQUFHLDRCQUE0QixtQ0FBbUMsdUJBQXVCLG9CQUFvQiwyQkFBMkIsaUNBQWlDLGdEQUFnRCxvQkFBb0Isa0NBQWtDLGdCQUFnQix1QkFBdUIsc0JBQXNCLGlCQUFpQixpQ0FBaUMsaUJBQWlCLEdBQUcsa0NBQWtDLGtCQUFrQix5REFBeUQsNkRBQTZELEdBQUcsK0JBQStCLGVBQWUsR0FBRyw4QkFBOEIsa0JBQWtCLDRCQUE0Qix3QkFBd0IsdUJBQXVCLGVBQWUsYUFBYSxHQUFHLCtDQUErQyxpQkFBaUIsR0FBRywyREFBMkQsa0JBQWtCLGtDQUFrQyxxQkFBcUIsR0FBRyx1Q0FBdUMsaUJBQWlCLEdBQUcsbURBQW1ELGtCQUFrQixHQUFHLG9CQUFvQixlQUFlLGtCQUFrQixhQUFhLHVCQUF1QiwyQkFBMkIsZ0JBQWdCLGlCQUFpQiw4QkFBOEIsR0FBRywrQkFBK0Isd0JBQXdCLG1DQUFtQyxHQUFHLGtDQUFrQyxjQUFjLDRDQUE0QyxHQUFHLFVBQVUsa0JBQWtCLDRCQUE0Qix3QkFBd0IsbUNBQW1DLHFCQUFxQix1QkFBdUIsbUJBQW1CLGlCQUFpQixzQkFBc0IscUJBQXFCLG9CQUFvQixrQ0FBa0MsMkJBQTJCLHVCQUF1Qiw4Q0FBOEMsaUNBQWlDLG9CQUFvQixzQkFBc0IsNEJBQTRCLEdBQUcsa0JBQWtCLGtEQUFrRCw4QkFBOEIsMkNBQTJDLGdDQUFnQyxHQUFHLHNCQUFzQiw0REFBNEQsNENBQTRDLHdCQUF3QixrQ0FBa0MsR0FBRyxpQkFBaUIsa0JBQWtCLG1DQUFtQyx1QkFBdUIsc0JBQXNCLHVCQUF1QixzREFBc0QsR0FBRyxnQkFBZ0IsZ0JBQWdCLHVCQUF1QixxQkFBcUIsa0NBQWtDLGlCQUFpQix1QkFBdUIsR0FBRywwQkFBMEIsa0NBQWtDLEdBQUcsZ0NBQWdDLGtDQUFrQyx3QkFBd0IsR0FBRyw4REFBOEQsdURBQXVELEdBQUcsc0JBQXNCLGtEQUFrRCxvQkFBb0IsR0FBRyxzQkFBc0Isa0JBQWtCLGVBQWUsZ0JBQWdCLHdEQUF3RCw2QkFBNkIsdUJBQXVCLGdCQUFnQixjQUFjLEdBQUcsdUJBQXVCLGtCQUFrQixlQUFlLGdCQUFnQix3REFBd0QsOEJBQThCLHVCQUF1QixnQkFBZ0IsYUFBYSxHQUFHLHFCQUFxQiw4QkFBOEIsR0FBRyxnQ0FBZ0MsdUJBQXVCLEdBQUcseUJBQXlCLGtCQUFrQiwyQkFBMkIsYUFBYSxHQUFHLGtGQUFrRixnQkFBZ0IsbUJBQW1CLG1DQUFtQyxxQkFBcUIsR0FBRyw2QkFBNkIsdUJBQXVCLEdBQUcsbUNBQW1DLGtCQUFrQixlQUFlLGdCQUFnQix1REFBdUQsNkJBQTZCLHVCQUF1QiwyQkFBMkIsY0FBYyx5QkFBeUIsR0FBRyxvQ0FBb0Msa0JBQWtCLGVBQWUsZ0JBQWdCLHVEQUF1RCw4QkFBOEIsdUJBQXVCLDJCQUEyQixjQUFjLHlCQUF5QixHQUFHLDJDQUEyQyxxREFBcUQsdUJBQXVCLDRDQUE0QyxHQUFHLGlEQUFpRCx3QkFBd0IsR0FBRyx1RkFBdUYsdUJBQXVCLDBCQUEwQixnQkFBZ0IsaUJBQWlCLEdBQUcsaUNBQWlDLGtDQUFrQyxxREFBcUQsd0JBQXdCLEdBQUcsd0NBQXdDLHVEQUF1RCxHQUFHLHdEQUF3RCxlQUFlLGFBQWEsY0FBYyxHQUFHLCtCQUErQix1QkFBdUIsb0JBQW9CLFdBQVcsWUFBWSxhQUFhLGNBQWMsdURBQXVELHFCQUFxQixHQUFHLG9CQUFvQix1QkFBdUIsa0JBQWtCLGlCQUFpQixnQkFBZ0IsY0FBYyxnQkFBZ0Isc0RBQXNELHFCQUFxQixHQUFHLDZCQUE2QixrREFBa0QsR0FBRyxvQ0FBb0MsZ0NBQWdDLEdBQUcsMENBQTBDLHdCQUF3QixHQUFHLDBCQUEwQix1QkFBdUIsR0FBRyw2REFBNkQsa0JBQWtCLDJCQUEyQix1QkFBdUIsR0FBRyw0QkFBNEIseUJBQXlCLEdBQUcsaURBQWlELGlCQUFpQixHQUFHLHFCQUFxQixrQkFBa0IsaUJBQWlCLG1CQUFtQixtQ0FBbUMsdUJBQXVCLHNCQUFzQix1QkFBdUIsc0RBQXNELEdBQUcsd0JBQXdCLGVBQWUsdUNBQXVDLEdBQUcsK0JBQStCLGVBQWUsR0FBRyx1Q0FBdUMsa0JBQWtCLDJCQUEyQixpQkFBaUIsY0FBYyxrQkFBa0IsdUJBQXVCLEdBQUcsNEJBQTRCLGtCQUFrQixjQUFjLHdCQUF3Qix3QkFBd0IsdUJBQXVCLHNDQUFzQyw4QkFBOEIsMkJBQTJCLHVCQUF1QixvQ0FBb0MsR0FBRyx3Q0FBd0MsMENBQTBDLEdBQUcsa0NBQWtDLGdDQUFnQyxvQkFBb0Isb0NBQW9DLEdBQUcsOENBQThDLDBDQUEwQyxHQUFHLG1DQUFtQywrQkFBK0IsR0FBRyx1QkFBdUIsbUJBQW1CLGdCQUFnQixpQkFBaUIsR0FBRyxzQ0FBc0MsZ0VBQWdFLEdBQUcsa0RBQWtELHFFQUFxRSxHQUFHLHVDQUF1QyxpRUFBaUUsR0FBRyxtREFBbUQsc0VBQXNFLEdBQUcsc0NBQXNDLGdFQUFnRSxHQUFHLGtEQUFrRCxxRUFBcUUsR0FBRyx1QkFBdUIsa0JBQWtCLDJCQUEyQixhQUFhLEdBQUcsMEJBQTBCLGNBQWMsb0JBQW9CLHFCQUFxQixtQ0FBbUMsR0FBRyw4QkFBOEIsY0FBYyxvQkFBb0Isc0JBQXNCLDZDQUE2QyxHQUFHLG1CQUFtQix1QkFBdUIsaUJBQWlCLGNBQWMsb0JBQW9CLHNCQUFzQiw2Q0FBNkMsdUJBQXVCLDZCQUE2QixHQUFHLHFCQUFxQix5Q0FBeUMsR0FBRyx1REFBdUQsa0JBQWtCLDJCQUEyQixjQUFjLGlCQUFpQixrQkFBa0IsbUJBQW1CLG1DQUFtQyxHQUFHLDhDQUE4QyxrQkFBa0Isd0JBQXdCLGlCQUFpQixHQUFHLG9DQUFvQyxvQkFBb0Isb0JBQW9CLG1DQUFtQyxxQkFBcUIsR0FBRyx3Q0FBd0MsY0FBYyxzQkFBc0Isb0JBQW9CLDZDQUE2QyxHQUFHLDRCQUE0QixrQkFBa0IsMkJBQTJCLGNBQWMsY0FBYyxlQUFlLDBCQUEwQixHQUFHLDJCQUEyQiw2Q0FBNkMsdUJBQXVCLDRDQUE0QyxvQ0FBb0MsR0FBRyxvQ0FBb0MsK0RBQStELG9EQUFvRCxHQUFHLDBDQUEwQywrREFBK0Qsb0RBQW9ELEdBQUcsdUNBQXVDLDRDQUE0QywwREFBMEQsR0FBRyw2Q0FBNkMsMERBQTBELDZDQUE2QyxHQUFHLG1HQUFtRyw2Q0FBNkMsMERBQTBELEdBQUcsaUNBQWlDLHlDQUF5QyxnQ0FBZ0Msb0JBQW9CLHFHQUFxRyx1QkFBdUIsZ0JBQWdCLEdBQUcsaUVBQWlFLHlEQUF5RCwrQkFBK0Isb0JBQW9CLHFCQUFxQixHQUFHLGtDQUFrQywrQkFBK0Isd0NBQXdDLEdBQUcsd0JBQXdCLGtCQUFrQiwyQkFBMkIsNEJBQTRCLGFBQWEsR0FBRywrQkFBK0Isa0JBQWtCLHdCQUF3QixtQ0FBbUMsdUJBQXVCLEdBQUcsd0JBQXdCLG1CQUFtQixzQkFBc0IsaUJBQWlCLEdBQUcsMkdBQTJHLHNCQUFzQixHQUFHLHNCQUFzQixzQkFBc0IsZ0NBQWdDLGlCQUFpQixnQkFBZ0IsMkJBQTJCLHNCQUFzQixrQkFBa0IsR0FBRyx5QkFBeUIsa0JBQWtCLHdCQUF3QixhQUFhLGNBQWMscUJBQXFCLG9CQUFvQixtQ0FBbUMsR0FBRyxzQ0FBc0MsMkNBQTJDLEdBQUcsMkJBQTJCLGVBQWUsa0JBQWtCLHdCQUF3QixjQUFjLDBCQUEwQixHQUFHLGdDQUFnQyxvQkFBb0IsNkNBQTZDLEdBQUcsNkNBQTZDLHFEQUFxRCxHQUFHLHVEQUF1RCxtQkFBbUIsc0JBQXNCLHNCQUFzQixxQ0FBcUMsR0FBRyxvRUFBb0Usb0RBQW9ELEdBQUcsc0NBQXNDLGtCQUFrQix3QkFBd0IsR0FBRyxpQ0FBaUMsbUJBQW1CLEdBQUcsNEJBQTRCLGtCQUFrQix3QkFBd0Isd0JBQXdCLEdBQUcsOEJBQThCLDBCQUEwQixzQkFBc0IsK0NBQStDLGlCQUFpQixnQkFBZ0IsdURBQXVELHVCQUF1QixHQUFHLDBCQUEwQixtQkFBbUIsZ0JBQWdCLGlCQUFpQix1QkFBdUIsY0FBYyx1REFBdUQsa0NBQWtDLGdDQUFnQyxpQ0FBaUMsaUJBQWlCLHVCQUF1Qix3QkFBd0Isd0JBQXdCLHFCQUFxQixHQUFHLHVDQUF1QyxzREFBc0Qsb0JBQW9CLEdBQUcsZ0NBQWdDLHFEQUFxRCxvQkFBb0IsR0FBRyx1Q0FBdUMsa0JBQWtCLDJCQUEyQixjQUFjLDRDQUE0Qyx1QkFBdUIscUJBQXFCLCtCQUErQixxREFBcUQsR0FBRyw2Q0FBNkMsb0JBQW9CLEdBQUcsaURBQWlELGtCQUFrQixHQUFHLG1DQUFtQyxrQkFBa0Isd0JBQXdCLHdCQUF3QixhQUFhLEdBQUcsb0NBQW9DLGNBQWMsb0JBQW9CLHFCQUFxQixtQ0FBbUMsR0FBRyxxQ0FBcUMsZ0JBQWdCLGlCQUFpQix1REFBdUQsa0NBQWtDLGdDQUFnQyxpQ0FBaUMsaUJBQWlCLGlCQUFpQix3QkFBd0Isd0JBQXdCLHFCQUFxQixHQUFHLDJDQUEyQyxvQkFBb0IsZUFBZSxHQUFHLGlDQUFpQyxtQkFBbUIsZUFBZSwwQkFBMEIsNENBQTRDLGdEQUFnRCx1QkFBdUIsR0FBRyxzQ0FBc0Msa0JBQWtCLHdCQUF3QixhQUFhLHVCQUF1Qix3QkFBd0IsMkJBQTJCLG9CQUFvQiw2Q0FBNkMsdURBQXVELEdBQUcsNENBQTRDLGtEQUFrRCxvQkFBb0IsR0FBRyw0Q0FBNEMsa0JBQWtCLDJCQUEyQixnQkFBZ0IsYUFBYSxHQUFHLG9DQUFvQyxrQkFBa0Isd0JBQXdCLEdBQUcsb0NBQW9DLGtCQUFrQix3QkFBd0IsZ0JBQWdCLGFBQWEsd0JBQXdCLGNBQWMsb0JBQW9CLHFCQUFxQixtQ0FBbUMsR0FBRyx3Q0FBd0MsY0FBYyxHQUFHLG9DQUFvQyx1QkFBdUIsYUFBYSxXQUFXLGNBQWMsMkJBQTJCLG9CQUFvQixlQUFlLHlDQUF5QyxpQkFBaUIsa0NBQWtDLHNIQUFzSCx3Q0FBd0Msb0JBQW9CLEdBQUcsMkVBQTJFLGVBQWUsR0FBRyxpREFBaUQsaUJBQWlCLEdBQUcsbUNBQW1DLGdCQUFnQixpQkFBaUIsbUJBQW1CLHVCQUF1Qix1REFBdUQsR0FBRywyQkFBMkIsa0JBQWtCLHVCQUF1QixjQUFjLFlBQVksYUFBYSw0Q0FBNEMsd0JBQXdCLDhCQUE4QixvREFBb0QsdUJBQXVCLGFBQWEsR0FBRyxzQkFBc0Isa0JBQWtCLHFCQUFxQiwyQkFBMkIsdUJBQXVCLGNBQWMsZ0JBQWdCLGtCQUFrQixtQkFBbUIsOEJBQThCLGdCQUFnQixhQUFhLHVCQUF1QixHQUFHLG1DQUFtQyxrQkFBa0IsR0FBRyw0QkFBNEIsa0JBQWtCLDJCQUEyQixlQUFlLDBCQUEwQixHQUFHLDJCQUEyQixvQkFBb0Isc0JBQXNCLEdBQUcsNkJBQTZCLGdCQUFnQiwwQkFBMEIsR0FBRyxpQ0FBaUMsOEJBQThCLEdBQUcseUJBQXlCLDhCQUE4QixnQkFBZ0IsaUJBQWlCLGNBQWMsR0FBRyxrQ0FBa0Msa0JBQWtCLHdCQUF3Qix1QkFBdUIsbUJBQW1CLEdBQUcsZ0NBQWdDLHFCQUFxQixvQkFBb0IsbUNBQW1DLEdBQUcsb0NBQW9DLGNBQWMscUJBQXFCLG9CQUFvQixzQkFBc0IsNkNBQTZDLEdBQUcsdUNBQXVDLHFCQUFxQixHQUFHLDRDQUE0QyxnQkFBZ0IsaUJBQWlCLHVCQUF1QixzQkFBc0IsaURBQWlELDBEQUEwRCx1Q0FBdUMsMEJBQTBCLEdBQUcscUJBQXFCLFFBQVEsK0JBQStCLEtBQUssR0FBRyxnRUFBZ0UsY0FBYyxrQkFBa0IsR0FBRyw2QkFBNkIsb0JBQW9CLG9CQUFvQixtQ0FBbUMsR0FBRyxpQ0FBaUMsY0FBYyxvQkFBb0IsNkNBQTZDLEdBQUcsZ0NBQWdDLGtCQUFrQix3QkFBd0IsY0FBYyxxQkFBcUIsR0FBRyw2QkFBNkIsdUJBQXVCLHVCQUF1Qiw2Q0FBNkMsb0NBQW9DLEdBQUcsbUNBQW1DLDZDQUE2QyxvQkFBb0IsR0FBRyxvRUFBb0Usb0RBQW9ELG9CQUFvQixHQUFHLDRCQUE0QixnREFBZ0QsR0FBRyxrQ0FBa0Msa0JBQWtCLDJCQUEyQixtQ0FBbUMsR0FBRyx3Q0FBd0Msb0JBQW9CLEdBQUcsNEJBQTRCLHVCQUF1QixnQkFBZ0IsZUFBZSxHQUFHLHNDQUFzQyxvREFBb0QsR0FBRyxpQ0FBaUMsc0JBQXNCLG9CQUFvQixtQ0FBbUMscUJBQXFCLEdBQUcsK0JBQStCLGlCQUFpQixHQUFHLDRCQUE0QixnQkFBZ0IsaUJBQWlCLHVCQUF1QixpQkFBaUIsZ0JBQWdCLDRDQUE0Qyx5Q0FBeUMsR0FBRyxxQkFBcUI7QUFDeDYyRDtBQUNlLHNGQUF1QixFQUFDOzs7Ozs7Ozs7Ozs7O0FDeEIxQjs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQjs7QUFFaEI7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDLHFCQUFxQjtBQUNqRTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxJQUFJO0FBQ0o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxxQkFBcUIsaUJBQWlCO0FBQ3RDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IscUJBQXFCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRTs7Ozs7Ozs7Ozs7O0FDakVhOztBQUViLGlDQUFpQywySEFBMkg7O0FBRTVKLDZCQUE2QixrS0FBa0s7O0FBRS9MLGlEQUFpRCxnQkFBZ0IsZ0VBQWdFLHdEQUF3RCw2REFBNkQsc0RBQXNELGtIQUFrSDs7QUFFOVosc0NBQXNDLHVEQUF1RCx1Q0FBdUMsU0FBUyxPQUFPLGtCQUFrQixFQUFFLGFBQWE7O0FBRXJMLHdDQUF3Qyw4RkFBOEYsd0JBQXdCLGVBQWUsZUFBZSxnQkFBZ0IsWUFBWSxNQUFNLHdCQUF3QiwrQkFBK0IsYUFBYSxxQkFBcUIsbUNBQW1DLEVBQUUsRUFBRSxjQUFjLFdBQVcsVUFBVSxFQUFFLFVBQVUsTUFBTSxpREFBaUQsRUFBRSxVQUFVLGtCQUFrQixFQUFFLEVBQUUsYUFBYTs7QUFFbmYsK0JBQStCLG9DQUFvQzs7QUFFbkU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCxjQUFjO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0EsRTs7Ozs7Ozs7Ozs7O0FDbkNhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRTs7Ozs7Ozs7Ozs7O0FDakNhOztBQUViLFdBQVcsbUJBQU8sQ0FBQyx3REFBYTtBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxnQ0FBZ0M7QUFDaEU7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTtBQUNBO0FBQ0EsRUFBRSxZQUFZO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0JBQWtCO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ3pEYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOzs7Ozs7Ozs7Ozs7O0FDckJhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxvRUFBbUI7O0FBRXhDLHFCQUFxQixtQkFBTyxDQUFDLDRFQUFrQjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxnRUFBWTtBQUN0QztBQUNBLFdBQVcsbUJBQU8sQ0FBQyx3REFBUTs7QUFFM0I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7Ozs7Ozs7Ozs7OztBQ25CYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyw0RUFBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSSxZQUFZO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDbEJhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDeEMsa0JBQWtCLG1CQUFPLENBQUMsZ0VBQVk7O0FBRXRDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLHFCQUFxQjtBQUN6QixJQUFJLHdCQUF3Qix1Q0FBdUMsRUFBRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUsscUJBQXFCO0FBQzFCLEtBQUssd0JBQXdCLGdEQUFnRCxFQUFFO0FBQy9FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN0QmE7O0FBRWI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsd0RBQWE7Ozs7Ozs7Ozs7Ozs7QUNKekI7O0FBRWIsaUJBQWlCLG1CQUFPLENBQUMsdUZBQTJCOzs7Ozs7Ozs7Ozs7O0FDRnZDOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLGlFQUFnQjs7QUFFM0MsZUFBZSxtQkFBTyxDQUFDLCtEQUFZOztBQUVuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2RhOztBQUViLHVCQUF1QixtQkFBTyxDQUFDLHVGQUEyQjs7QUFFMUQsMEJBQTBCLG1CQUFPLENBQUMscUZBQXVCOztBQUV6RDtBQUNBO0FBQ0EsZ0JBQWdCLFVBQVUsRUFBRTtBQUM1Qiw4QkFBOEIseUJBQXlCO0FBQ3ZEO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNYYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQXFCO0FBQzdDLGtCQUFrQixtQkFBTyxDQUFDLGlGQUF3QjtBQUNsRCxrQkFBa0IsbUJBQU8sQ0FBQyxpRkFBd0I7O0FBRWxEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsbUJBQU8sQ0FBQyxxRUFBZTs7QUFFekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDN0RhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlOztBQUUxQzs7QUFFQSw2QkFBNkIsbUJBQU8sQ0FBQywyRkFBMEI7O0FBRS9EOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDYmE7O0FBRWIsa0JBQWtCLG1CQUFPLENBQUMsd0VBQXdCOztBQUVsRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNYYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTs7QUFFMUM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDYmE7O0FBRWIsVUFBVSxtQkFBTyxDQUFDLGtEQUFPO0FBQ3pCLFlBQVksbUJBQU8sQ0FBQyxzREFBUztBQUM3QixlQUFlLG1CQUFPLENBQUMsNERBQVk7O0FBRW5DLGFBQWEsbUJBQU8sQ0FBQyxxRUFBa0I7QUFDdkMsZ0JBQWdCLG1CQUFPLENBQUMsMkVBQXFCO0FBQzdDLFlBQVksbUJBQU8sQ0FBQyxtRUFBaUI7O0FBRXJDOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsVUFBVTtBQUNoQywwQ0FBMEMsZUFBZTtBQUN6RDtBQUNBOzs7Ozs7Ozs7Ozs7O0FDakJhOztBQUViLGtCQUFrQixtQkFBTyxDQUFDLGtFQUFlOztBQUV6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUI7QUFDakI7Ozs7Ozs7Ozs7Ozs7QUNuQmE7O0FBRWI7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsa0VBQXFCOzs7Ozs7Ozs7Ozs7O0FDSmpDOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlOztBQUUxQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNWYTs7QUFFYjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDVmE7O0FBRWIsMkNBQTJDLGdCQUFnQjs7QUFFM0Qsa0RBQWtELGlGQUFpRjs7Ozs7Ozs7Ozs7OztBQ0p0SDs7QUFFYjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNKYTs7QUFFYjtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNKYTs7QUFFYixtQkFBbUIsbUJBQU8sQ0FBQyw0REFBZTs7QUFFMUM7QUFDQTs7QUFFQTs7Ozs7Ozs7Ozs7OztBQ1BhOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlOztBQUUxQzs7QUFFQSxlQUFlLG1CQUFPLENBQUMsb0RBQVc7O0FBRWxDO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ1ZhOztBQUViO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ0phOztBQUViOztBQUVBLGtCQUFrQixtQkFBTyxDQUFDLG9GQUF1QjtBQUNqRCxpQkFBaUIsbUJBQU8sQ0FBQyx3REFBYTtBQUN0QyxhQUFhLG1CQUFPLENBQUMsOERBQWdCO0FBQ3JDLGVBQWUsbUJBQU8sQ0FBQyxvREFBVzs7QUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx3QkFBd0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUMxRWE7O0FBRWI7O0FBRUEsa0JBQWtCLG1CQUFPLENBQUMsb0ZBQXVCOztBQUVqRCxpQkFBaUIsbUJBQU8sQ0FBQyx3REFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsY0FBYyxvQkFBb0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDNUNhOztBQUViO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ0phOztBQUViOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUJBQW1CLGlCQUFpQjtBQUNwQztBQUNBOztBQUVBLDhFQUE4RSxxQ0FBcUMsRUFBRTs7QUFFckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNuRGE7O0FBRWIscUJBQXFCLG1CQUFPLENBQUMsd0VBQWtCOztBQUUvQzs7Ozs7Ozs7Ozs7OztBQ0phOztBQUViLGlCQUFpQixtQkFBTyxDQUFDLGtGQUE2QjtBQUN0RCx5QkFBeUIsbUJBQU8sQ0FBQywwRUFBc0I7QUFDdkQsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQXFCO0FBQzdDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUMxQ2E7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLG9FQUFtQjtBQUN4QyxlQUFlLG1CQUFPLENBQUMsb0RBQVc7O0FBRWxDLHFCQUFxQixtQkFBTyxDQUFDLGtGQUFrQjtBQUMvQyxrQkFBa0IsbUJBQU8sQ0FBQyxzRUFBWTtBQUN0QyxXQUFXLG1CQUFPLENBQUMsOERBQVE7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7Ozs7Ozs7Ozs7OztBQ2pCYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyxrRkFBa0I7O0FBRS9DO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ05hOztBQUViLDBCQUEwQixtQkFBTyxDQUFDLG9FQUFtQjtBQUNyRCx5QkFBeUIsbUJBQU8sQ0FBQywwRUFBc0I7QUFDdkQsa0JBQWtCLG1CQUFPLENBQUMsc0VBQVk7QUFDdEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7Ozs7Ozs7Ozs7O0FDbENhOztBQUViO0FBQ0EsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkRBQTZEO0FBQzdEOztBQUVBOztBQUVBO0FBQ0EsOEVBQThFO0FBQzlFOztBQUVBOzs7Ozs7Ozs7Ozs7O0FDMUJhOztBQUViOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsK0NBQStDO0FBQ2hGLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1YsRUFBRTtBQUNGLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsd0RBQWE7O0FBRXRDLHNEQUFzRCxvQkFBb0IsR0FBRzs7QUFFN0U7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDtBQUNyRCxFQUFFO0FBQ0YsZ0RBQWdEO0FBQ2hELEVBQUU7QUFDRixzREFBc0Q7QUFDdEQsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyw0REFBZTtBQUNsQyxhQUFhLG1CQUFPLENBQUMsNENBQUs7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4QixrQkFBa0I7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDelVhOztBQUViO0FBQ0Esb0JBQW9CLG1CQUFPLENBQUMsb0RBQVM7O0FBRXJDO0FBQ0Esd0NBQXdDLGNBQWM7QUFDdEQsb0NBQW9DLGNBQWM7QUFDbEQsNkNBQTZDLGNBQWM7QUFDM0QseUNBQXlDLGNBQWM7O0FBRXZEO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNaYTs7QUFFYjtBQUNBO0FBQ0EsMEZBQTBGLGNBQWM7QUFDeEcsMkNBQTJDLGFBQWE7O0FBRXhEO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixjQUFjOztBQUU3QyxpRUFBaUUsY0FBYztBQUMvRSxvRUFBb0UsY0FBYzs7QUFFbEY7QUFDQSxnQ0FBZ0MsY0FBYztBQUM5QztBQUNBLHNDQUFzQyxjQUFjOztBQUVwRCwwREFBMEQsY0FBYztBQUN4RSw4REFBOEQsY0FBYzs7QUFFNUU7QUFDQTtBQUNBLG1CQUFtQixjQUFjLEVBQUU7QUFDbkMsMEVBQTBFLGNBQWM7O0FBRXhGLHdHQUF3RyxjQUFjOztBQUV0SDtBQUNBLDRDQUE0QyxjQUFjOztBQUUxRCw2REFBNkQsY0FBYzs7QUFFM0U7QUFDQTtBQUNBLHNFQUFzRSxjQUFjO0FBQ3BGOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN6Q2E7O0FBRWIsaUJBQWlCLG1CQUFPLENBQUMsOERBQW1COztBQUU1QztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNOYTs7QUFFYixXQUFXLG1CQUFPLENBQUMsNERBQWU7O0FBRWxDOzs7Ozs7Ozs7Ozs7O0FDSmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsNEJBQTRCLFVBQVUsRUFBRTtBQUN4QyxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGLGVBQWU7QUFDZjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0QkFBNEIsY0FBYztBQUMxQztBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxpQ0FBaUMsYUFBYTtBQUM5QyxlQUFlLGNBQWM7QUFDN0IsaUVBQWlFLGNBQWM7QUFDL0Usd0RBQXdELGFBQWE7QUFDckU7QUFDQTtBQUNBLEdBQUc7QUFDSCxnQ0FBZ0MsY0FBYztBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxhQUFhO0FBQzlDLGVBQWUsY0FBYztBQUM3QixpRUFBaUUsY0FBYztBQUMvRSx3REFBd0QsYUFBYTtBQUNyRSx1QkFBdUIsaUNBQWlDO0FBQ3hELDRCQUE0QixjQUFjO0FBQzFDO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3pFYTs7QUFFYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLG1CQUFPLENBQUMsc0VBQXVCOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNyQmE7O0FBRWIsZ0JBQWdCLG1CQUFPLENBQUMsa0VBQXFCO0FBQzdDLHFCQUFxQixtQkFBTyxDQUFDLHNFQUF1QjtBQUNwRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN6RGE7O0FBRWI7QUFDQSxpQkFBaUIsbUJBQU8sQ0FBQyx3REFBYTs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQSxTQUFTLE1BQUssSUFBSSxLQUFLO0FBQ3ZCO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2xDQTtBQUNBLE1BQU0sT0FBTyxRQUFRLGFBQWEsMEJBQTBCLFdBQVcsZ0VBQWdFLHNGQUFzRix5RUFBeUUsS0FBSyxhQUFhLHFFQUFxRSxRQUFRLGdCQUFnQixlQUFlLGFBQWEsT0FBTyxRQUFRLEVBQUUsOENBQThDLGlCQUFpQiwyQkFBMkIsR0FBRyxPQUFPLG1CQUFtQixHQUFHLHdCQUF3QiwyQkFBMkIsR0FBRyx3QkFBd0Isa0JBQWtCLDJCQUEyQixjQUFjLHFCQUFxQixxQkFBcUIsR0FBRywyQkFBMkIsa0JBQWtCLGNBQWMsMkJBQTJCLHVCQUF1Qiw4QkFBOEIsd0JBQXdCLGdEQUFnRCx1QkFBdUIsb0NBQW9DLG9CQUFvQixLQUFLLHlEQUF5RCxpQ0FBaUMsMEZBQTBGLDBDQUEwQyxHQUFHLDBEQUEwRCxnQ0FBZ0MsZ0RBQWdELEdBQUcsNkNBQTZDLDRCQUE0QixxQkFBcUIsR0FBRyxvR0FBb0cscUJBQXFCLEdBQUcsdUZBQXVGLG1CQUFtQixHQUFHLHNEQUFzRCxrQkFBa0IsYUFBYSx3QkFBd0IsR0FBRyw2QkFBNkIscUJBQXFCLG1CQUFtQixlQUFlLHFCQUFxQixHQUFHLHdFQUF3RSxtQkFBbUIsR0FBRyx1REFBdUQsOEJBQThCLEdBQUcsOERBQThELGlCQUFpQix1QkFBdUIsOEJBQThCLEdBQUcsZ0RBQWdELGtCQUFrQixHQUFHLCtDQUErQyxrQkFBa0IsR0FBRyxnQ0FBZ0Msa0JBQWtCLGFBQWEsd0JBQXdCLEdBQUcsK0JBQStCLDBCQUEwQixlQUFlLGdCQUFnQiw4QkFBOEIsd0JBQXdCLEdBQUcsc0NBQXNDLDhCQUE4QixHQUFHLHdDQUF3Qyw4QkFBOEIsR0FBRyw0QkFBNEIsY0FBYyx3QkFBd0Isb0JBQW9CLHNCQUFzQiwyQkFBMkIsOEJBQThCLG1CQUFtQixHQUFHLG1DQUFtQyxrQkFBa0IsY0FBYyx3QkFBd0IsR0FBRyxvQkFBb0Isb0JBQW9CLG1CQUFtQixxQkFBcUIsYUFBYSxHQUFHLDRCQUE0QixxQkFBcUIsR0FBRyxpQ0FBaUMsa0NBQWtDLG1CQUFtQixxQkFBcUIsd0JBQXdCLEdBQUcsc0NBQXNDLG9CQUFvQixtQkFBbUIsR0FBRywrQkFBK0IsMEJBQTBCLEdBQUcsa0RBQWtELHlCQUF5QixnQkFBZ0IsOEJBQThCLHdDQUF3Qyx1QkFBdUIsb0NBQW9DLEdBQUcsd0RBQXdELG9CQUFvQixnQ0FBZ0MsOEJBQThCLEdBQUcseURBQXlELCtCQUErQixHQUFHLHVEQUF1RCxvQkFBb0IsZ0JBQWdCLEdBQUcscUNBQXFDLHlCQUF5QixvQkFBb0IsOEJBQThCLHVCQUF1QixnQkFBZ0Isb0NBQW9DLEdBQUcsMkNBQTJDLG9CQUFvQixnQ0FBZ0MsOEJBQThCLEdBQUcsNENBQTRDLCtCQUErQixHQUFHLHNDQUFzQyxrQkFBa0Isd0JBQXdCLGFBQWEsd0JBQXdCLDBCQUEwQixxQkFBcUIsd0JBQXdCLHVCQUF1QixnQkFBZ0IsR0FBRywyREFBMkQsNkJBQTZCLG1CQUFtQixHQUFHLHFEQUFxRCxzQkFBc0IsbUJBQW1CLEdBQUcsZ0RBQWdELGlCQUFpQixxQkFBcUIsd0JBQXdCLG1CQUFtQixHQUFHLHNEQUFzRCxlQUFlLHlCQUF5QixnQkFBZ0IsaUJBQWlCLGdCQUFnQiwrRUFBK0UsdUJBQXVCLGFBQWEsY0FBYyx1Q0FBdUMsaUJBQWlCLEdBQUcsa0VBQWtFLGdCQUFnQixHQUFHLHVEQUF1RCxlQUFlLHlCQUF5QixnQkFBZ0IsaUJBQWlCLGdCQUFnQiw4RUFBOEUsdUJBQXVCLFlBQVksY0FBYyxxQ0FBcUMsaUJBQWlCLEdBQUcsa0VBQWtFLGdCQUFnQixHQUFHLCtCQUErQixxQkFBcUIsa0JBQWtCLEdBQUcsd0VBQXdFLGVBQWUsR0FBRyxxREFBcUQsMEJBQTBCLHlCQUF5QixvQkFBb0Isa0RBQWtELHVCQUF1Qiw4QkFBOEIsR0FBRyxrQ0FBa0Msc0JBQXNCLG9CQUFvQixzQkFBc0IsbUJBQW1CLHFCQUFxQixHQUFHLHVCQUF1QixrQkFBa0IsbUNBQW1DLHdCQUF3QixHQUFHLCtCQUErQixrQkFBa0IsdUJBQXVCLHNCQUFzQixhQUFhLHdCQUF3QixpQkFBaUIsa0NBQWtDLG9CQUFvQixtQkFBbUIsdUJBQXVCLGtDQUFrQywwQkFBMEIsR0FBRyxxQ0FBcUMsMENBQTBDLG9CQUFvQixHQUFHLHdEQUF3RCx1QkFBdUIsMEJBQTBCLHVCQUF1QixlQUFlLGNBQWMsZ0NBQWdDLHFCQUFxQixnQkFBZ0IsdUJBQXVCLHdDQUF3QyxHQUFHLHVEQUF1RCxnQkFBZ0IsYUFBYSxjQUFjLHVCQUF1QixjQUFjLGNBQWMsZ0NBQWdDLDRDQUE0Qyx3Q0FBd0MsdUNBQXVDLEdBQUcsOEJBQThCLGtCQUFrQiwyQkFBMkIsNEJBQTRCLHdCQUF3QixxQkFBcUIsaUJBQWlCLGdCQUFnQiwrQkFBK0IsMENBQTBDLHVCQUF1Qix1QkFBdUIsR0FBRywwQkFBMEIsNkJBQTZCLG9CQUFvQixvQkFBb0Isb0JBQW9CLEdBQUcsOEJBQThCLDZCQUE2QixjQUFjLG9CQUFvQixvQkFBb0IsdUJBQXVCLEdBQUcsU0FBUyxVQUFVLFNBQVMsYUFBYSxzQkFBc0IsU0FBUyw2QkFBNkIsNkJBQTZCLHlCQUF5QiwrQ0FBK0MsdUNBQXVDLGdFQUFnRSxxQkFBcUIsZUFBZSxlQUFlLEtBQUssWUFBWSx5QkFBeUIsMENBQTBDLFNBQVMsaUJBQWlCLGNBQWMsS0FBSyxpQkFBaUIsbUJBQW1CLFlBQVksV0FBVyxLQUFLLHNCQUFzQixvR0FBb0csaUJBQWlCLG9EQUFvRCxpQkFBaUIsZ0VBQWdFLGlCQUFpQiwwQ0FBMEMsSUFBSSxRQUFRLGFBQWEsc0JBQXNCLGFBQWEsU0FBUyxhQUFhLDBJQUEwSSxxRkFBcUYsZUFBZSw4Q0FBOEMsMEhBQTBILGtDQUFrQyxZQUFZLCtCQUErQixpQkFBaUIsb0NBQW9DLDJEQUEyRCx1QkFBdUIsaUJBQWlCLG9CQUFvQix1QkFBdUIseUJBQXlCLGFBQWEsdUJBQXVCLDJEQUEyRCxnREFBZ0QsZ0VBQWdFLEVBQUUsSUFBSSxpSUFBaUksTUFBTSx5QkFBeUIsb0JBQW9CLGtCQUFrQixHQUFHLFVBQVUsU0FBUyxZQUFZLE1BQU0sY0FBYywwRkFBMEYsY0FBYyxjQUFjLGFBQWEsZ0JBQWdCLGtCQUFrQixvQ0FBb0MsSUFBSSxzR0FBc0csd0NBQXdDLE1BQU0sOEZBQThGLE1BQU0sNEJBQTRCLE1BQU0sMEVBQTBFLE1BQU0sK0JBQStCLE1BQU0sNENBQTRDLE1BQU0sZUFBZSxNQUFNLDhDQUE4QyxNQUFNLDREQUE0RCxNQUFNLGFBQWEsc0JBQXNCLFNBQVMsa0RBQWtELG1DQUFtQyxtRkFBbUYscUNBQXFDLEVBQUUsR0FBRyxTQUFTLHNCQUFzQiwyR0FBMkcsbUJBQW1CLFFBQVEsZ0VBQWdFLGdEQUFnRCwyQ0FBMkMsc0RBQXNELDhCQUE4QixzQkFBc0IsNkJBQTZCLDZCQUE2QixJQUFJLFlBQVksK0JBQStCLGVBQWUsYUFBYSxhQUFhLHdCQUF3QixXQUFXLHFDQUFxQyxTQUFTLGVBQWUsYUFBYSxZQUFZLHNCQUFzQiwyQkFBMkIsZUFBZSxhQUFhLGFBQWEsc0JBQXNCLHdCQUF3QixrQkFBa0IsMkJBQTJCLEVBQUUsbUNBQW1DLGFBQWEsNkZBQTZGLHFDQUFxQyxVQUFVLGVBQWUsYUFBYSxzQkFBc0IsWUFBWSxrQkFBa0IsZ0JBQWdCLFdBQVcsMENBQTBDLDZEQUE2RCxNQUFNLHVIQUF1SCx5T0FBeU8sYUFBYSxxQ0FBcUMsNElBQTRJLFNBQVMsYUFBYSxzQkFBc0IseURBQXlELHVGQUF1RixhQUFhLG1IQUFtSCxVQUFVLFNBQVMsYUFBYSxzQkFBc0IsaUNBQWlDLGVBQWUsYUFBYSxxQkFBcUIsc0JBQXNCLHVCQUF1QixPQUFPLCtIQUErSCxlQUFlLGFBQWEsdUNBQXVDLHNCQUFzQixpRUFBaUUsVUFBVSxNQUFNLDJEQUEyRCxnQkFBZ0IsOEJBQThCLCtDQUErQyxLQUFLLG9EQUFvRCxTQUFTLGFBQWEsK0VBQStFLE1BQU0sdUJBQXVCLG9EQUFvRCxhQUFhLFdBQVcsNkJBQTZCLDZDQUE2QyxzQ0FBc0MsYUFBYSxFQUFFLHNFQUFzRSxNQUFNLDhCQUE4QixvQkFBb0IscUpBQXFKLFFBQVEsMEJBQTBCLHlHQUF5RyxlQUFlLCtCQUErQiwwQkFBMEIscUJBQXFCLG9DQUFvQyxxQkFBcUIsa0JBQWtCLHVDQUF1QyxxQkFBcUIsMEJBQTBCLE1BQU0sa0JBQWtCLGFBQWEsb0ZBQW9GLFVBQVUsY0FBYyxvQkFBb0IseUVBQXlFLFVBQVUsYUFBYSxZQUFZLFNBQVMsYUFBYSx1RkFBdUYsY0FBYyxtSkFBbUosYUFBYSxzSEFBc0gsU0FBUyxnQkFBZ0IsbUJBQW1CLGlKQUFpSixjQUFjLGtCQUFrQix5RUFBeUUsZUFBZSxhQUFhLGFBQWEsNEJBQTRCLHVCQUF1Qiw0RUFBNEUsV0FBVywwREFBMEQsUUFBUSxLQUFLLGFBQWEsaUhBQWlILGFBQWEsZ0RBQWdELGFBQWEsc0ZBQXNGLGFBQWEsd0JBQXdCLG1CQUFtQixlQUFlLGFBQWEsYUFBYSxzQkFBc0Isc0dBQXNHLGFBQWEsc0RBQXNELGFBQWEsS0FBSywyQ0FBMkMsdUJBQXVCLGFBQWEsc0NBQXNDLDBCQUEwQixPQUFPLHFDQUFxQyxJQUFJLGtDQUFrQyxzREFBc0QsT0FBTyxxREFBcUQsSUFBSSw0QkFBNEIsMEJBQTBCLE9BQU8sdUNBQXVDLGFBQWEsbUJBQW1CLElBQUksOEJBQThCLDZCQUE2Qix5Q0FBeUMsV0FBVyxPQUFPLEVBQUUsbURBQW1ELGlEQUFpRCw2QkFBNkIsSUFBSSwrRUFBK0UsU0FBUyxPQUFPLHFCQUFxQixJQUFJLG1CQUFtQixxQkFBcUIsYUFBYSw4Q0FBOEMsU0FBUyxhQUFhLGlDQUFpQyxPQUFPLHNJQUFzSSw4SEFBOEgscUZBQXFGLGNBQWMsZ0RBQWdELHVOQUF1TixjQUFjLHlCQUF5QixjQUFjLDBCQUEwQixTQUFTLGFBQWEsOEJBQThCLHVCQUF1QixxQkFBcUIsd0tBQXdLLGFBQWEseUJBQXlCLFVBQVUsU0FBUyxhQUFhLGNBQWMsNERBQTRELHNCQUFzQixrQ0FBa0MscURBQXFELGVBQWUsYUFBYSxzQkFBc0IsMEJBQTBCLHFFQUFxRSxLQUFLLG9FQUFvRSxtQkFBbUIsWUFBWSxrQkFBa0IsbURBQW1ELDZCQUE2QixnREFBZ0QsZ01BQWdNLGVBQWUsYUFBYSxhQUFhLHdCQUF3QixTQUFTLDBEQUEwRCxzQ0FBc0MsMkJBQTJCLHdDQUF3QyxVQUFVLFNBQVMsYUFBYSwwQkFBMEIsc0NBQXNDLGNBQWMsYUFBYSwrQkFBK0Isa0JBQWtCLG9EQUFvRCwwQkFBMEIsaUJBQWlCLGtCQUFrQix1RkFBdUYsd0JBQXdCLDZFQUE2RSxtQkFBbUIsNEJBQTRCLHNDQUFzQyxtQkFBbUIsYUFBYSxTQUFTLGFBQWEsd0JBQXdCLGFBQWEsYUFBYSw4QkFBOEIsVUFBVSxTQUFTLGFBQWEsd0JBQXdCLFVBQVUsZUFBZSxvQkFBb0IsdUNBQXVDLFdBQVcsNEJBQTRCLFNBQVMsdUNBQXVDLFNBQVMsU0FBUyxhQUFhLHFCQUFxQixtQ0FBbUMsZUFBZSxZQUFZLGFBQWEsY0FBYyxxREFBcUQsY0FBYyx3REFBd0QsMkZBQTJGLGdKQUFnSix3TEFBd0wsY0FBYyw0RkFBNEYsZ0JBQWdCLFlBQVksa1VBQWtVLGdCQUFnQix1QkFBdUIsMEVBQTBFLGlHQUFpRyx1QkFBdUIsdUJBQXVCLG9kQUFvZCxhQUFhLE9BQU8sc0JBQXNCLHFCQUFxQiwwRUFBMEUsaUdBQWlHLHdFQUF3RSw4REFBOEQsc0NBQXNDLGlCQUFpQiw2Q0FBNkMsR0FBRyxTQUFTLGFBQWEsMEJBQTBCLGtCQUFrQiw4RUFBOEUsMkNBQTJDLGtGQUFrRixTQUFTLElBQUksZ0JBQWdCLGtCQUFrQixpQkFBaUIscUJBQXFCLGtCQUFrQixLQUFLLE1BQU0sY0FBYyxxREFBcUQsZ0JBQWdCLHFMQUFxTCxnQkFBZ0Isd0JBQXdCLElBQUksbUJBQW1CLGdCQUFnQixHQUFHLGdCQUFnQixxQ0FBcUMsd0JBQXdCLDRCQUE0QixHQUFHLGtCQUFrQiwyQ0FBMkMsbUJBQW1CLElBQUksRUFBRSxXQUFXLDhCQUE4QixTQUFTLGtCQUFrQixtQkFBbUIsc0JBQXNCLDBFQUEwRSxvQkFBb0IsbUJBQW1CLHNCQUFzQixpRUFBaUUsa0JBQWtCLHFEQUFxRCxxSEFBcUgsaUJBQWlCLGlDQUFpQyxpQkFBaUIsa0NBQWtDLDZGQUE2RixrQ0FBa0Msa0RBQWtELGs2QkFBazZCLHFDQUFxQyw0aENBQTRoQyxrQ0FBa0MsdW1DQUF1bUMsb0NBQW9DLHFnQ0FBcWdDLEdBQUcsZUFBZSxhQUFhLGFBQWEsY0FBYyxjQUFjLDJDQUEyQyx3QkFBd0IsVUFBVSxtTUFBbU0sc0NBQXNDLGFBQWEsU0FBUyxlQUFlLE9BQU8sb05BQW9OLHdCQUF3QixlQUFlLG1CQUFtQixTQUFTLGFBQWEseURBQXlELFNBQVMsYUFBYSxTQUFTLGNBQWMsaUJBQWlCLFdBQVcsNEJBQTRCLElBQUksTUFBTSxTQUFTLGdCQUFnQixZQUFZLFVBQVUsV0FBVyxLQUFLLDRFQUE0RSxTQUFTLGNBQWMsNkRBQTZELDRDQUE0QyxLQUFLLGFBQWEsMEJBQTBCLG9DQUFvQyxFQUFFLFVBQVUsU0FBUyxnQkFBZ0Isa0JBQWtCLCtCQUErQixNQUFNLGtIQUFrSCxjQUFjLGlCQUFpQix3QkFBd0IsdUJBQXVCLEVBQUUsbUJBQW1CLFFBQVEsWUFBWSxXQUFXLEtBQUssY0FBYyxrQkFBa0IscUJBQXFCLFdBQVcsS0FBSyxjQUFjLG9EQUFvRCxNQUFNLFNBQVMsYUFBYSxTQUFTLHdCQUF3QixrQkFBa0Isa0JBQWtCLGdDQUFnQyx1RUFBdUUseUJBQXlCLFNBQVMsT0FBTyxPQUFPLFlBQVksSUFBSSxpSUFBaUksa0JBQWtCLFNBQVMsYUFBYSxzQkFBc0Isc0NBQXNDLGdFQUFnRSxlQUFlLGFBQWEsc0JBQXNCLFdBQVcsOEJBQThCLFNBQVMsYUFBYSxzQkFBc0IsOEJBQThCLE9BQU8sbUJBQW1CLGlCQUFpQixTQUFTLG9EQUFvRCw2Q0FBNkMsSUFBSSx1QkFBdUIsa0VBQWtFLHNCQUFzQixrQkFBa0IscUJBQXFCLEdBQUcsa0JBQWtCLCtFQUErRSxpSEFBaUgsUUFBUSxtQkFBbUIsYUFBYSxnQ0FBZ0MsNEJBQTRCLE9BQU8sU0FBUyxhQUFhLHdCQUF3Qix1Q0FBdUMsS0FBSyxLQUFLLGFBQWEsNkJBQTZCLDRDQUE0QyxlQUFlLGFBQWEsYUFBYSxzQkFBc0IsbUJBQW1CLG1CQUFtQixvQkFBb0IscUVBQXFFLFVBQVUsYUFBYSxxQkFBcUIsb0JBQW9CLE1BQU0sUUFBUSxhQUFhLHNCQUFzQixtQkFBbUIseUJBQXlCLG9FQUFvRSxLQUFLLFNBQVMsZUFBZSxTQUFTLGFBQWEsdUJBQXVCLHVwTkFBdXBOLElBQUksTUFBTSxjQUFjLFdBQVcsK0JBQStCLFlBQVksaUJBQWlCLG9EQUFvRCxRQUFRLDBDQUEwQyxjQUFjLElBQUksSUFBSSxhQUFhLCtEQUErRCx1QkFBdUIsRUFBRSxnQkFBZ0IsaURBQWlELElBQUksMkNBQTJDLFNBQVMsMENBQTBDLGdFQUFnRSw0RkFBNEYsZUFBZSx3Q0FBd0MsU0FBUyxHQUFHLFNBQVMsTUFBTSxhQUFhLGNBQWMsaUNBQWlDLEVBQUUsUUFBUSxtQkFBTyxDQUFDLDRDQUFPLEVBQUUsZ0pBQWdKLGdCQUFnQixtQkFBbUIsNkJBQTZCLG1CQUFtQixtRkFBbUYsWUFBWSx1QkFBdUIsSUFBSSxnQkFBZ0IsMkRBQTJELE9BQU8sU0FBUyxTQUFTLFFBQVEsSUFBSSw4QkFBOEIsUUFBUSxjQUFjLFVBQVUscUJBQXFCLE1BQU0sb0NBQW9DLG9EQUFvRCxnTEFBZ0wsa0JBQWtCLGlLQUFpSyxHQUFHLGdCQUFnQixvQ0FBb0MsMkJBQTJCLElBQUksY0FBYyxTQUFTLHdKQUF3SixvQkFBb0IsMlhBQTJYLG9CQUFvQiwrV0FBK1csY0FBYyxlQUFlLHVXQUF1VyxjQUFjLG1CQUFtQixpQkFBaUIsZ0NBQWdDLE1BQU0seUVBQXlFLE1BQU0sK0NBQStDLE1BQU0sMEVBQTBFLE1BQU0sNENBQTRDLE1BQU0sK0NBQStDLE1BQU0sMERBQTBELE1BQU0sK0NBQStDLE1BQU0saUJBQWlCLFVBQVUsNkJBQTZCLDZEQUE2RCxrQkFBa0Isc0ZBQXNGLFlBQVksd0JBQXdCLHNDQUFzQyx5QkFBeUIsa0RBQWtELHdCQUF3QixtQ0FBbUMsbUZBQW1GLGtDQUFrQyw4QkFBOEIsc0NBQXNDLHlCQUF5QixrREFBa0Qsd0JBQXdCLGtDQUFrQyxxQkFBcUIsaUNBQWlDLGtCQUFrQiw2SEFBNkgsK0VBQStFLFlBQVksa0JBQWtCLEdBQUcsTUFBTSw4QkFBOEIsaURBQWlELHlCQUF5Qiw0Q0FBNEMsWUFBWSx3QkFBd0IsNkZBQTZGLDJGQUEyRix3QkFBd0IsK3hCQUEreEIsOENBQThDLHdMQUF3TCx3QkFBd0IsMEtBQTBLLGtCQUFrQixjQUFjLCtEQUErRCx3RkFBd0YsR0FBRyxPQUFPLCtHQUErRyxxRUFBcUUsY0FBYyw4Q0FBOEMsOENBQThDLEtBQUssYUFBYSxFQUFFLG9CQUFvQixzQ0FBc0MscUJBQXFCLDJDQUEyQyxPQUFPLGNBQWMsYUFBYSxFQUFFLGtDQUFrQyx3RUFBd0UsU0FBUyxhQUFhLG1DQUFtQyw4REFBOEQsMEhBQTBILFlBQVksT0FBTyxPQUFPLDJEQUEyRCxpQkFBaUIsOEdBQThHLGtDQUFrQyxzRkFBc0YsdURBQXVELDREQUE0RCwyQkFBMkIsUUFBUSw0QkFBNEIsbUNBQW1DLHNCQUFzQix3Q0FBd0MsWUFBWSxvQkFBb0Isb0VBQW9FLGlCQUFpQiwrTkFBK04sb1lBQW9ZLCtLQUErSyx1TEFBdUwsc0tBQXNLLGdQQUFnUCxtSUFBbUkseUZBQXlGLDZRQUE2USxvTUFBb00sd0tBQXdLLHlGQUF5Riw0RkFBNEYsa0tBQWtLLHVCQUF1Qiw0QkFBNEIsNkJBQTZCLFlBQVksU0FBUyxpQkFBaUIsc0VBQXNFLE1BQU0sb1JBQW9SLE1BQU0seUZBQXlGLE1BQU0sbUdBQW1HLE1BQU0sOEdBQThHLE1BQU0seUZBQXlGLE1BQU0seUpBQXlKLE1BQU0saUZBQWlGLE1BQU0sdUdBQXVHLE1BQU0sMEZBQTBGLE1BQU0sbUpBQW1KLE1BQU0sb0VBQW9FLDBEQUEwRCxxQ0FBcUMsd0JBQXdCLHdCQUF3QiwwVUFBMFUsMEJBQTBCLG9EQUFvRCwwQ0FBMEMsNENBQTRDLHNFQUFzRSx3QkFBd0Isd0JBQXdCLDhtQ0FBOG1DLDBCQUEwQixpQ0FBaUMsZ0JBQWdCLDZCQUE2Qix3SEFBd0gsZ0NBQWdDLE1BQU0sbUJBQW1CLHdCQUF3Qix5QkFBeUIsa0NBQWtDLG9CQUFvQixXQUFXLHdCQUF3Qix3QkFBd0IscWJBQXFiLE1BQU0sY0FBYyxhQUFhLHNCQUFzQixjQUFjLGtFQUFrRSxpQ0FBaUMsc0NBQXNDLFFBQVEsZ0JBQWdCLGNBQWMsMEtBQTBLLGNBQWMsdUNBQXVDLGNBQWMscUNBQXFDLGNBQWMsaUNBQWlDLHNCQUFzQixtQkFBbUIsdUJBQXVCLE9BQU8sc0JBQXNCLE1BQU0sd0JBQXdCLDZpQkFBNmlCLHlQQUF5UCxzQkFBc0IseUZBQXlGLEtBQUssMEJBQTBCLGdEQUFnRCxLQUFLLElBQUksMEJBQTBCLE1BQU0sTUFBTSxPQUFPLHVCQUF1QiwyQkFBMkIsa0JBQWtCLHNCQUFzQixLQUFLLElBQUksMEJBQTBCLE1BQU0sTUFBTSxPQUFPLHlGQUF5RixnREFBZ0QsZUFBZSwrQkFBK0Isc0JBQXNCLEtBQUssSUFBSSwwQkFBMEIsTUFBTSxJQUFJLE9BQU8sZUFBZSxzRkFBc0YsZUFBZSxLQUFLLG1DQUFtQyxLQUFLLElBQUksRUFBRSx3QkFBd0IscUVBQXFFLFdBQVcsTUFBTSxPQUFPLGdFQUFnRSxrQkFBa0IsV0FBVyxLQUFLLGFBQWEsOENBQThDLGtDQUFrQyxLQUFLLDZCQUE2QixvQkFBb0IsK0JBQStCLEtBQUssY0FBYyxFQUFFLGdDQUFnQyxLQUFLLGdCQUFnQixLQUFLLFdBQVcsbUJBQW1CLHdCQUF3QixrR0FBa0csd0NBQXdDLHdFQUF3RSxVQUFVLG9CQUFvQixpQkFBaUIsU0FBUyxtQ0FBbUMsK0RBQStELFFBQVEsMkJBQTJCLFNBQVMsT0FBTyw4RkFBOEYsSUFBSSxPQUFPLGNBQWMsZ0dBQWdHLG1CQUFtQixXQUFXLGNBQWMsc0RBQXNELGlFQUFpRSxRQUFRLGVBQWUsTUFBTSw4QkFBOEIsUUFBUSxPQUFPLE9BQU8sS0FBSyxhQUFhLDJGQUEyRixXQUFXLEtBQUssYUFBYSxFQUFFLGFBQWEsOERBQThELHlDQUF5QyxXQUFXLDJDQUEyQyxZQUFZLHFCQUFxQixtQ0FBbUMsZUFBZSw0R0FBNEcsc0NBQXNDLHlCQUF5Qix3REFBd0Qsd0NBQXdDLG1CQUFtQixvQkFBb0IsOEVBQThFLDJDQUEyQyxtQkFBbUIsU0FBUyxLQUFLLGFBQWEsa0RBQWtELDBCQUEwQixvQkFBb0IsNkVBQTZFLDRDQUE0Qyw2QkFBNkIsSUFBSSxxREFBcUQsY0FBYyxxREFBcUQsZUFBZSw0REFBNEQsZUFBZSxxREFBcUQsZ0JBQWdCLGdFQUFnRSxjQUFjLHFEQUFxRCxlQUFlLCtDQUErQyx5RUFBeUUsK0VBQStFLDRDQUE0QyxXQUFXLGtFQUFrRSxZQUFZLDJFQUEyRSxZQUFZLG1DQUFtQyxlQUFlLHFCQUFxQixvR0FBb0csWUFBWSw0QkFBNEIsc0JBQXNCLFlBQVksNEJBQTRCLG9CQUFvQixnQkFBZ0Isd0ZBQXdGLGdCQUFnQixpREFBaUQsZ0JBQWdCLHVFQUF1RSxxQkFBcUIsbUJBQW1CLGNBQWMsbUJBQW1CLFNBQVMsZ0JBQWdCLDBGQUEwRixvQkFBb0IsZUFBZSxTQUFTLFVBQVUsS0FBSyxLQUFLLGFBQWEseUNBQXlDLG9CQUFvQixNQUFNLHNCQUFzQiwwQkFBMEIsTUFBTSxhQUFhLElBQUksVUFBVSxTQUFTLFVBQVUsZ0JBQWdCLFlBQVksb0VBQW9FLG1CQUFtQixvQkFBb0IsY0FBYyxXQUFXLDBCQUEwQixZQUFZLGlCQUFpQiw4RkFBOEYscUJBQXFCLFNBQVMsUUFBUSxVQUFVLE1BQU0sNEJBQTRCLHFIQUFxSCx1REFBdUQsY0FBYyxLQUFLLGFBQWEsRUFBRSxtQkFBbUIsc0JBQXNCLHlCQUF5Qix1QkFBdUIsK0JBQStCLHlDQUF5QyxzQ0FBc0MsTUFBTSx1QkFBdUIsdUNBQXVDLEtBQUssZ0ZBQWdGLDJCQUEyQixrREFBa0QsT0FBTyxjQUFjLDZCQUE2QixLQUFLLGdGQUFnRixxQkFBcUIsZ0JBQWdCLFVBQVUsV0FBVyxjQUFjLCtDQUErQyxjQUFjLGNBQWMsU0FBUyxZQUFZLEtBQUssb0ZBQW9GLEtBQUssYUFBYSxVQUFVLGdCQUFnQixXQUFXLEtBQUssYUFBYSxpQkFBaUIsT0FBTyxNQUFNLG1FQUFtRSxxQkFBcUIsV0FBVyx3QkFBd0IsMkVBQTJFLDJCQUEyQixXQUFXLDBCQUEwQix3RUFBd0UsdUJBQXVCLG9GQUFvRixnQkFBZ0IsOEJBQThCLGlDQUFpQyxHQUFHLFVBQVUseUJBQXlCLFFBQVEsZ0NBQWdDLGNBQWMsMEJBQTBCLHlCQUF5QixxRkFBcUYsZ0JBQWdCLGFBQWEsZ0JBQWdCLDRCQUE0Qiw4QkFBOEIsYUFBYSx5QkFBeUIsbUVBQW1FLFVBQVUsTUFBTSxHQUFHLFVBQVUsMkJBQTJCLE1BQU0saUVBQWlFLGFBQWEsZ0NBQWdDLFVBQVUsa0NBQWtDLEdBQUcsYUFBYSxZQUFZLFNBQVMsS0FBSyxhQUFhLGdCQUFnQixxQkFBcUIsUUFBUSxnQkFBZ0IsZ0JBQWdCLGdCQUFnQixzREFBc0QsTUFBTSxtQ0FBbUMsU0FBUyxpQ0FBaUMsZ0JBQWdCLCtFQUErRSxnQkFBZ0IsaUZBQWlGLGdCQUFnQiwySkFBMkosY0FBYyxvRkFBb0Ysa0JBQWtCLHFFQUFxRSxjQUFjLG1CQUFtQixxRUFBcUUsZUFBZSxlQUFlLHlCQUF5QixlQUFlLE1BQU0sWUFBWSxhQUFhLHFFQUFxRSxLQUFLLFNBQVMsK0NBQStDLFFBQVEsaVFBQWlRLDBCQUEwQixVQUFVLCtQQUErUCwrZkFBK2Ysc0NBQXNDLEdBQUcsNDlNQUE0OU0sUUFBUSxteVdBQW15VyxrQkFBa0IsMkdBQTJHLG9CQUFvQixPQUFPLDZEQUE2RCxLQUFLLDRFQUE0RSxVQUFVLDBLQUEwSywwQkFBMEIsK0JBQStCLG9WQUFvViwwQkFBMEIsa0JBQWtCLCtHQUErRyxvQkFBb0IsT0FBTywyQkFBMkIscUJBQXFCLG1CQUFtQixpQkFBaUIsc0JBQXNCLE9BQU8sZ0dBQWdHLDBCQUEwQixtQkFBbUIsa0xBQWtMLG1DQUFtQyxpQkFBaUIsZ0xBQWdMLEdBQUcsZUFBZSwwQkFBMEIsRUFBRSwyQkFBMkIsOEJBQThCLE9BQU8sa0NBQWtDLDZJQUE2SSwwSUFBMEksMEJBQTBCLHVCQUF1QiwwUkFBMFIsMEJBQTBCLHlCQUF5QiwrQkFBK0IsT0FBTyxFQUFFLCtCQUErQiwwQkFBMEIsb0lBQW9JLDZEQUE2RCwwQkFBMEIsOENBQThDLDRKQUE0SiwwQkFBMEIsSUFBSSw2SEFBNkgsdUJBQXVCLDJWQUEyViwwQkFBMEIseUJBQXlCLG9DQUFvQyxPQUFPLEVBQUUscUNBQXFDLHNEQUFzRCxzQkFBc0IsYUFBYSwySUFBMkksc0JBQXNCLDZDQUE2QyxPQUFPLDhEQUE4RCx3QkFBd0IsNERBQTRELGtFQUFrRSw2RkFBNkYsK0hBQStILFVBQVUsZ0NBQWdDLDBCQUEwQixtQkFBbUIsc0pBQXNKLDBCQUEwQixtQkFBbUIsc0xBQXNMLDBCQUEwQixrQkFBa0IsZ0RBQWdELGVBQWUsdUZBQXVGLDBDQUEwQyxnSkFBZ0osNkJBQTZCLE1BQU0sMEJBQTBCLHlFQUF5RSxHQUFHLGVBQWUscUZBQXFGLCtEQUErRCxhQUFhLDZEQUE2RCwrQkFBK0Isc0NBQXNDLDBDQUEwQyxtQkFBbUIsU0FBUyxFQUFFLG1CQUFtQixpQkFBaUIsT0FBTywyQkFBMkIsU0FBUyxpQkFBaUIsV0FBVywwQkFBMEIsU0FBUyw2QkFBNkIsVUFBVSxPQUFPLFNBQVMsU0FBUyxTQUFTLHNDQUFzQyxZQUFZLDRDQUE0QywwRUFBMEUsNkNBQTZDLHdGQUF3RixlQUFlLGdDQUFnQywyQkFBMkIsNkJBQTZCLEVBQUUsbUJBQW1CLGNBQWMsZ0JBQWdCLGFBQWEsK0JBQStCLDZCQUE2QixtQkFBbUIsbUJBQW1CLFlBQVksU0FBUyxXQUFXLFdBQVcseUhBQXlILGFBQWEsYUFBYSwyRkFBMkYsZ0JBQWdCLHdDQUF3QyxjQUFjLDBCQUEwQixhQUFhLE9BQU8sNEJBQTRCLGVBQWUsaUNBQWlDLG1DQUFtQyx1QkFBdUIsS0FBSyxtQkFBbUIsOEJBQThCLG9DQUFvQyxlQUFlLHFCQUFxQixNQUFNLDBJQUEwSSw0RkFBNEYsaUJBQWlCLCtCQUErQixjQUFjLFVBQVUseVJBQXlSLG9CQUFvQiw2Q0FBNkMsb0JBQW9CLHVDQUF1QyxxQkFBcUIsNkJBQTZCLHFDQUFxQyxnQ0FBZ0MseUNBQXlDLGlDQUFpQywrRkFBK0YsNEJBQTRCLHFIQUFxSCwwTEFBMEwsb0JBQW9CLFNBQVMsZ0ZBQWdGLDJDQUEyQyw0Q0FBNEMsa0RBQWtELFdBQVcsS0FBSyxhQUFhLGlCQUFpQixpQkFBaUIsZUFBZSxhQUFhLG9CQUFvQixvQkFBb0IsWUFBWSxFQUFFLHdCQUF3QixvQkFBb0IsY0FBYyxFQUFFLG9CQUFvQixjQUFjLCtCQUErQixjQUFjLHNIQUFzSCx3RUFBd0Usd0VBQXdFLHdFQUF3RSxnQkFBZ0IscUJBQXFCLGlEQUFpRCxxQkFBcUIsR0FBRyxNQUFNLDBEQUEwRCxXQUFXLFNBQVMsS0FBSyxhQUFhLGVBQWUsMEJBQTBCLFNBQVMsS0FBSyxhQUFhLGtDQUFrQyxTQUFTLEdBQUcsZ0JBQWdCLHVCQUF1QixNQUFNLG1DQUFtQyxTQUFTLEdBQUcsSUFBSSxxQ0FBcUMsaUVBQWlFLGVBQWUsc0JBQXNCLG1DQUFtQyxjQUFjLFNBQVMscUNBQXFDLCtFQUErRSw2REFBNkQsdUJBQXVCLG1CQUFtQiwwQ0FBMEMsTUFBTSw2SUFBNkksMkNBQTJDLEtBQUssYUFBYSxlQUFlLG9EQUFvRCx3REFBd0QsNkJBQTZCLHdFQUF3RSwwQkFBMEIsRUFBRSwrQ0FBK0MsaUNBQWlDLFVBQVUsY0FBYyxvQkFBb0Isc0JBQXNCLDJDQUEyQyxNQUFNLGNBQWMscTFDQUFxMUMsY0FBYyxjQUFjLDJCQUEyQixvQ0FBb0MsMENBQTBDLHNCQUFzQixtQkFBbUIsZUFBZSx5SkFBeUosTUFBTSxhQUFhLDZCQUE2Qiw2QkFBNkIsbUJBQW1CLEtBQUssSUFBSSxvQ0FBb0MsU0FBUyxhQUFhLCtDQUErQyxrQkFBa0Isd0ZBQXdGLE1BQU0sNkdBQTZHLElBQUksME1BQTBNLHlGQUF5RixHQUFHLElBQUksZUFBZSxxQkFBcUIsU0FBUyxLQUFLLGFBQWEsRUFBRSxhQUFhLDZHQUE2RyxtQkFBbUIsd0JBQXdCLHlDQUF5QyxTQUFTLEtBQUssYUFBYSwwQkFBMEIsVUFBVSxnQ0FBZ0MsZUFBZSxtQkFBbUIsdUNBQXVDLE9BQU8sMkVBQTJFLDhHQUE4RyxjQUFjLGNBQWMseUJBQXlCLGFBQWEsS0FBSyxzQkFBc0IsRUFBRSxzQkFBc0Isd0JBQXdCLGNBQWMsR0FBRyx3QkFBd0IsaUhBQWlILDRCQUE0QixzREFBc0QscUhBQXFILEVBQUUsaUVBQWlFLFVBQVUsSUFBSSxlQUFlLG9DQUFvQyxvQkFBb0Isd0JBQXdCLDRDQUE0QyxtQkFBbUIsZ0NBQWdDLFNBQVMsZUFBZSx3R0FBd0csZUFBZSw0R0FBNEcsMDl2QkFBMDl2QixtSEFBbUgsZUFBZSxRQUFRLG1JQUFtSSxlQUFlLDJHQUEyRyxlQUFlLHlHQUF5RyxlQUFlLGdHQUFnRyxnN1BBQWc3UCxlQUFlLDBHQUEwRywwQkFBMEIsMGxCQUEwbEIsTUFBTSxzS0FBc0ssR0FBRyx3dUJBQXd1QixFQUFFLHE0QkFBcTRCLGVBQWUsa0JBQWtCLHlCQUF5Qix1QkFBdUIsOEJBQThCLHdDQUF3Qyx1R0FBdUcsYUFBYSxnQkFBZ0Isb0dBQW9HLGNBQWMsa0JBQWtCLGdCQUFnQixjQUFjLG1CQUFtQixnQkFBZ0IsV0FBVyxzRUFBc0UsZ0JBQWdCLEVBQUUseUdBQXlHLGNBQWMseUJBQXlCLFVBQVUsTUFBTSxnQ0FBZ0Msd0JBQXdCLDhDQUE4QyxnRkFBZ0YsYUFBYSxtQ0FBbUMsU0FBUyxJQUFJLGtLQUFrSyxTQUFTLFNBQVMsb0lBQW9JLGlKQUFpSixhQUFhLEtBQUssYUFBYSxhQUFhLG1CQUFtQixTQUFTLHVCQUF1Qix5R0FBeUcsb0hBQW9ILEdBQUcsVUFBVSxVQUFVLElBQUksZUFBZSxlQUFlLGVBQWUscUJBQXFCLGlGQUFpRixnQkFBZ0IsRUFBRSxrQkFBa0IsaU1BQWlNLHdJQUF3SSxjQUFjLDBCQUEwQixTQUFTLEtBQUssc0JBQXNCLEVBQUUsc0JBQXNCLCtEQUErRCxjQUFjLDRCQUE0QixpQkFBaUIsTUFBTSxvRkFBb0YsS0FBSyxrQkFBa0IsNEVBQTRFLDBGQUEwRiwrR0FBK0csR0FBRyxJQUFJLGlCQUFpQixtRUFBbUUsZ0dBQWdHLDRCQUE0QixPQUFPLDhMQUE4TCxLQUFLLHVCQUF1QixvQkFBb0IsaUJBQWlCLDREQUE0RCxnSUFBZ0kscUZBQXFGLG1HQUFtRyxzQkFBc0IsZ0NBQWdDLE9BQU8scUJBQXFCLFVBQVUsS0FBSywwQkFBMEIsRUFBRSxzQkFBc0IscURBQXFELCtEQUErRCxNQUFNLG1CQUFtQixLQUFLLE1BQU0sNkNBQTZDLFdBQVcsZ0JBQWdCLHFCQUFxQixTQUFTLFFBQVEsYUFBYSw0QkFBNEIsb0JBQW9CLEdBQUcsTUFBTSw4Q0FBOEMseUVBQXlFLHlCQUF5QixhQUFhLFNBQVMsbUNBQW1DLGtCQUFrQiwrQ0FBK0MsU0FBUyxRQUFRLGFBQWEsRUFBRSxLQUFLLHlDQUF5QyxLQUFLLDZFQUE2RSxJQUFJLG9CQUFvQixjQUFjLGdDQUFnQyxtQ0FBbUMsMkJBQTJCLFVBQVUsa0RBQWtELHNEQUFzRCxTQUFTLEtBQUssYUFBYSxFQUFFLG9CQUFvQixrQkFBa0IsR0FBRywyeURBQTJ5RCxnQkFBZ0IsRUFBRSxvRUFBb0UsY0FBYyxvQkFBb0Isd0JBQXdCLHFCQUFxQixvRUFBb0UsdUJBQXVCLGlHQUFpRyxvRkFBb0YsK0NBQStDLElBQUksOENBQThDLFlBQVksTUFBTSx1RkFBdUYscUNBQXFDLHNEQUFzRCxpRkFBaUYsRUFBRSxJQUFJLFVBQVUsaTZCQUFpNkIsK0JBQStCLDhCQUE4QixXQUFXLE1BQU0sOEJBQThCLGNBQWMsOElBQThJLFNBQVMsR0FBRyxnQkFBZ0IsRUFBRSxxQ0FBcUMsY0FBYywyQkFBMkIsMENBQTBDLGtCQUFrQixZQUFZLHFFQUFxRSwwT0FBME8sbUZBQW1GLEdBQUcsSUFBSSx5QkFBeUIsMkJBQTJCLFNBQVMscUJBQXFCLEtBQUssYUFBYSxlQUFlLFNBQVMsbUNBQW1DLDJEQUEyRCxNQUFNLG9HQUFvRyw2QkFBNkIsbUJBQW1CLFNBQVMsS0FBSyxhQUFhLEVBQUUsMENBQTBDLDRDQUE0QyxZQUFZLEtBQUssWUFBWSxFQUFFLGFBQWEscUVBQXFFLGdCQUFnQixJQUFJLFVBQVUsVUFBVSx1QkFBdUIsU0FBUyxLQUFLLGFBQWEsY0FBYyxLQUFLLGdCQUFnQixrQkFBa0IsU0FBUyxLQUFLLGFBQWEsRUFBRSxhQUFhLE1BQU0sOEdBQThHLFFBQVEsSUFBSSxrQ0FBa0MsU0FBUyxnQkFBZ0IsS0FBSyxhQUFhLEVBQUUsYUFBYSxtREFBbUQsY0FBYywwQkFBMEIsV0FBVyxNQUFNLG1EQUFtRCxhQUFhLDZDQUE2QyxVQUFVLG9CQUFvQixtQ0FBbUMsOERBQThELGtFQUFrRSxJQUFJLEtBQUssa0JBQWtCLG9CQUFvQixNQUFNLDBGQUEwRixTQUFTLEtBQUssYUFBYSxpREFBaUQsOExBQThMLHlGQUF5RixHQUFHLEdBQUcsa0VBQWtFLHdDQUF3QyxnQkFBZ0Isd0JBQXdCLGdFQUFnRSxFQUFFLHdEQUF3RCxzR0FBc0csZ0JBQWdCLHlCQUF5QixnRUFBZ0UsRUFBRSw2REFBNkQscUZBQXFGLGdCQUFnQixtQkFBbUIsc01BQXNNLEVBQUUsMEVBQTBFLHFGQUFxRixnQkFBZ0Isd0tBQXdLLHVIQUF1SCxFQUFFLCtFQUErRSw0Q0FBNEMsZ0JBQWdCLHFDQUFxQyx3R0FBd0csRUFBRSx3RUFBd0UsNkNBQTZDLGdCQUFnQixzU0FBc1MscUlBQXFJLEVBQUUscURBQXFELHlPQUF5TyxnQkFBZ0Isa09BQWtPLDJHQUEyRyxFQUFFLHlEQUF5RCxlQUFlLGdCQUFnQixhQUFhLG1FQUFtRSxFQUFFLHFEQUFxRCwwR0FBMEcsZ0JBQWdCLFNBQVMsOExBQThMLEVBQUUsNkRBQTZELHdEQUF3RCxnQkFBZ0IsbUJBQW1CLDROQUE0TixFQUFFLHdEQUF3RCxtREFBbUQsZ0JBQWdCLFlBQVkseUpBQXlKLEVBQUUsdURBQXVELGdDQUFnQyxnQkFBZ0IsNkJBQTZCLHlKQUF5SixFQUFFLHNEQUFzRCxnQ0FBZ0MsZ0JBQWdCLGlIQUFpSCwySEFBMkgsRUFBRSxvRUFBb0UseUJBQXlCLGdCQUFnQiwwQkFBMEIsOENBQThDLEVBQUUsNERBQTRELDRDQUE0QyxnQkFBZ0IsZ0JBQWdCLHdHQUF3RyxFQUFFLHdEQUF3RCxnQ0FBZ0MsZ0JBQWdCLFlBQVksdUdBQXVHLEVBQUUscURBQXFELHlCQUF5QixnQkFBZ0Isa0NBQWtDLDBDQUEwQyxFQUFFLDBEQUEwRCxnQ0FBZ0MsZ0JBQWdCLGVBQWUsRUFBRSw4REFBOEQsc0NBQXNDLGdCQUFnQiwyRUFBMkUsK0RBQStELEVBQUUsMEVBQTBFLHdDQUF3QyxnQkFBZ0IsMExBQTBMLEVBQUUsZ0VBQWdFLHdDQUF3QyxnQkFBZ0IsNEhBQTRILCtHQUErRyxFQUFFLDhEQUE4RCxnQ0FBZ0MsZ0JBQWdCLHFCQUFxQixFQUFFLHVEQUF1RCx3REFBd0QsZ0JBQWdCLFlBQVksRUFBRSx1REFBdUQscUNBQXFDLGdCQUFnQix5Q0FBeUMsRUFBRSwrREFBK0Qsb0JBQW9CLGdCQUFnQixxQkFBcUIsK0ZBQStGLEVBQUUsdURBQXVELDZIQUE2SCxnQkFBZ0IseUNBQXlDLEVBQUUsd0RBQXdELG9JQUFvSSxnQkFBZ0IsYUFBYSxFQUFFLDBEQUEwRCxvRUFBb0UsZ0JBQWdCLG1JQUFtSSxpSEFBaUgsRUFBRSxxREFBcUQsb0JBQW9CLGdCQUFnQixTQUFTLDhDQUE4QyxFQUFFLDREQUE0RCx1QkFBdUIsZ0JBQWdCLDJJQUEySSxFQUFFLGlFQUFpRSx3QkFBd0IsZ0JBQWdCLG9IQUFvSCxFQUFFLGtFQUFrRSw2Q0FBNkMsZ0JBQWdCLHVEQUF1RCxtSkFBbUosRUFBRSwyREFBMkQsbUJBQW1CLGdCQUFnQixlQUFlLG9LQUFvSyxFQUFFLHVEQUF1RCxpRkFBaUYsZ0JBQWdCLHNCQUFzQix3RkFBd0YsRUFBRSx3REFBd0QsaUZBQWlGLGdCQUFnQix3QkFBd0Isd0ZBQXdGLEVBQUUsMERBQTBELHNDQUFzQyxnQkFBZ0IsbUNBQW1DLHlGQUF5RixFQUFFLHlEQUF5RCxTQUFTLGdCQUFnQixpQ0FBaUMsOENBQThDLEVBQUUsdURBQXVELDJCQUEyQixnQkFBZ0Isd0JBQXdCLDhDQUE4QyxFQUFFLDBEQUEwRCwrSkFBK0osZ0JBQWdCLGNBQWMsOENBQThDLEVBQUUsc0RBQXNELHdHQUF3RyxnQkFBZ0Isb0VBQW9FLG9GQUFvRixFQUFFLHlEQUF5RCwyQkFBMkIsZ0JBQWdCLGFBQWEsOENBQThDLEVBQUUsMERBQTBELDJCQUEyQixnQkFBZ0IsY0FBYyw4Q0FBOEMsRUFBRSxpRUFBaUUsK0VBQStFLGdCQUFnQixnREFBZ0QsZ0dBQWdHLEVBQUUsZ0VBQWdFLHFDQUFxQyxnQkFBZ0IseUxBQXlMLDhDQUE4QyxFQUFFLG9FQUFvRSxnREFBZ0QsZ0JBQWdCLGlKQUFpSiw4Q0FBOEMsRUFBRSxtRUFBbUUsOENBQThDLGdCQUFnQiw0SUFBNEksOENBQThDLEVBQUUsMkRBQTJELDZCQUE2QixnQkFBZ0IsZUFBZSw4Q0FBOEMsRUFBRSw2REFBNkQsK0JBQStCLGdCQUFnQixpQkFBaUIsOENBQThDLEVBQUUscURBQXFELGtFQUFrRSxnQkFBZ0IsU0FBUyw4Q0FBOEMsRUFBRSx3REFBd0QsdURBQXVELGdCQUFnQixZQUFZLDhDQUE4QyxFQUFFLDJEQUEyRCwwQ0FBMEMsZ0JBQWdCLGVBQWUsOENBQThDLEVBQUUsMERBQTBELDBCQUEwQixnQkFBZ0IsY0FBYyw4Q0FBOEMsRUFBRSxtRUFBbUUsd0JBQXdCLGdCQUFnQixrREFBa0QsOENBQThDLEVBQUUsNkRBQTZELHVCQUF1QixnQkFBZ0Isc0NBQXNDLDhDQUE4QyxFQUFFLHNEQUFzRCxjQUFjLGdCQUFnQixvQkFBb0IsOENBQThDLEVBQUUsMERBQTBELG9GQUFvRixnQkFBZ0IsY0FBYyx5SkFBeUosRUFBRSwyREFBMkQsc0ZBQXNGLGdCQUFnQixlQUFlLHlKQUF5SixFQUFFLHFEQUFxRCxvREFBb0QsZ0JBQWdCLFNBQVMsNktBQTZLLEVBQUUsc0RBQXNELDRDQUE0QyxnQkFBZ0IsMkRBQTJELDJFQUEyRSxFQUFFLDZEQUE2RCw4QkFBOEIsZ0JBQWdCLG9CQUFvQixFQUFFLHFEQUFxRCxrQkFBa0IsZ0JBQWdCLHVCQUF1QixFQUFFLG9EQUFvRCw4RUFBOEUsZ0JBQWdCLDhDQUE4QywrS0FBK0ssRUFBRSx5REFBeUQsbUNBQW1DLGdCQUFnQixjQUFjLEVBQUUsMERBQTBELDhCQUE4QixnQkFBZ0IsZUFBZSxFQUFFLDJEQUEyRCwrQkFBK0IsZ0JBQWdCLGdCQUFnQixFQUFFLHVEQUF1RCxvQ0FBb0MsZ0JBQWdCLFdBQVcscUZBQXFGLEVBQUUsd0RBQXdELDJEQUEyRCxnQkFBZ0IscUdBQXFHLHFGQUFxRixFQUFFLHVEQUF1RCxtQkFBbUIsZ0JBQWdCLFdBQVcscUZBQXFGLEVBQUUscURBQXFELHVCQUF1QixnQkFBZ0IsU0FBUyxxRkFBcUYsRUFBRSxzREFBc0Qsb0NBQW9DLGdCQUFnQiw0REFBNEQscUZBQXFGLEVBQUUsMkRBQTJELHlDQUF5QyxnQkFBZ0IsK0JBQStCLDRKQUE0SixFQUFFLHdEQUF3RCwyQkFBMkIsZ0JBQWdCLDJCQUEyQixxRkFBcUYsRUFBRSx1REFBdUQsc0NBQXNDLGdCQUFnQixXQUFXLHFGQUFxRixFQUFFLDBEQUEwRCx3REFBd0QsZ0JBQWdCLCtCQUErQixFQUFFLHdEQUF3RCxxRkFBcUYsZ0JBQWdCLDhIQUE4SCxnUUFBZ1EsRUFBRSx3REFBd0QseUVBQXlFLGdCQUFnQixxQ0FBcUMscUZBQXFGLEVBQUUsb0RBQW9ELHFJQUFxSSxnQkFBZ0IsOENBQThDLEVBQUUsc0RBQXNELG9EQUFvRCxnQkFBZ0IsMkRBQTJELHNPQUFzTyxFQUFFLHNEQUFzRCwyQkFBMkIsZ0JBQWdCLFVBQVUsb0pBQW9KLEVBQUUsMERBQTBELDBCQUEwQiwrS0FBK0ssRUFBRSx1REFBdUQsU0FBUywwS0FBMEssRUFBRSw0REFBNEQsY0FBYyxnUEFBZ1AsRUFBRSx5REFBeUQsc0JBQXNCLHdLQUF3SyxFQUFFLHVEQUF1RCxvQkFBb0Isc0tBQXNLLEVBQUUsNERBQTRELGdCQUFnQixvS0FBb0ssRUFBRSwwREFBMEQsWUFBWSxvS0FBb0ssRUFBRSxpRUFBaUUscUJBQXFCLG9LQUFvSyxFQUFFLGtFQUFrRSwwRkFBMEYsZ0hBQWdILEVBQUUsaUVBQWlFLDhCQUE4QixnQkFBZ0IsaURBQWlELHdDQUF3QyxFQUFFLDhFQUE4RSxnQkFBZ0IsZ0JBQWdCLHVIQUF1SCxFQUFFLHlFQUF5RSxzQ0FBc0MsZ0JBQWdCLGlDQUFpQyxFQUFFLGtFQUFrRSw0QkFBNEIsZ0JBQWdCLHlCQUF5Qix3Q0FBd0MsRUFBRSxrRUFBa0UsaUNBQWlDLGdCQUFnQixzSkFBc0osRUFBRSxpRUFBaUUsc0RBQXNELGdCQUFnQixtS0FBbUssRUFBRSwrRUFBK0UsK0JBQStCLGdCQUFnQix1Q0FBdUMsRUFBRSxxRkFBcUYsMENBQTBDLGdCQUFnQixpREFBaUQsRUFBRSw2RUFBNkUsdUNBQXVDLGdCQUFnQixxQ0FBcUMsRUFBRSxpRkFBaUYsb0VBQW9FLGdCQUFnQix5Q0FBeUMsRUFBRSxpRkFBaUYsdUVBQXVFLGdCQUFnQix5Q0FBeUMsRUFBRSw2RUFBNkUsOEdBQThHLGdCQUFnQixxQ0FBcUMsRUFBRSx1RkFBdUYsdUJBQXVCLGdCQUFnQixtREFBbUQsRUFBRSx3RUFBd0UsWUFBWSxnQkFBZ0IsZ0NBQWdDLEVBQUUsMEVBQTBFLGFBQWEsZ0JBQWdCLGtDQUFrQyxFQUFFLCtFQUErRSxxQkFBcUIsZ0JBQWdCLHVDQUF1QyxFQUFFLCtFQUErRSxzQkFBc0IsZ0JBQWdCLHVDQUF1QyxFQUFFLDZFQUE2RSw2Q0FBNkMsZ0JBQWdCLHFDQUFxQyxFQUFFLDJFQUEyRSw0REFBNEQsZ0JBQWdCLHFFQUFxRSxFQUFFLDJFQUEyRSwrREFBK0QsZ0JBQWdCLHFFQUFxRSxFQUFFLDZFQUE2RSxpQ0FBaUMsZ0JBQWdCLDREQUE0RCxFQUFFLCtFQUErRSxtQ0FBbUMsZ0JBQWdCLHVDQUF1QyxFQUFFLDRFQUE0RSx1QkFBdUIsZ0JBQWdCLG9DQUFvQyxFQUFFLCtFQUErRSx3QkFBd0IsZ0JBQWdCLHVDQUF1QyxFQUFFLG1GQUFtRixpRkFBaUYsZ0JBQWdCLDJDQUEyQyxFQUFFLG1GQUFtRixxRkFBcUYsZ0JBQWdCLDJDQUEyQyxFQUFFLDJFQUEyRSxzQ0FBc0MsZ0JBQWdCLG1DQUFtQyxFQUFFLDJFQUEyRSxvQkFBb0IsZ0JBQWdCLG1DQUFtQyxFQUFFLCtFQUErRSx1REFBdUQsZ0JBQWdCLHVDQUF1QyxFQUFFLCtFQUErRSxZQUFZLGdCQUFnQix1Q0FBdUMsRUFBRSxnRkFBZ0YsMEJBQTBCLGdCQUFnQix3Q0FBd0MsRUFBRSxnRkFBZ0YseUNBQXlDLGdCQUFnQiw0Q0FBNEMsRUFBRSwrRUFBK0UsaUZBQWlGLGdCQUFnQixpRkFBaUYsRUFBRSwrRUFBK0UsNENBQTRDLGdCQUFnQixnSUFBZ0ksRUFBRSwyRUFBMkUsWUFBWSxnQkFBZ0IsMkpBQTJKLEVBQUUsOEVBQThFLDhCQUE4QixnQkFBZ0IsaUhBQWlILEVBQUUsb0ZBQW9GLDBCQUEwQixnQkFBZ0IsZ0RBQWdELEVBQUUsMkVBQTJFLGdDQUFnQyxnQkFBZ0IsbUNBQW1DLEVBQUUscUdBQXFHLGtDQUFrQyxnQkFBZ0IsaUVBQWlFLEVBQUUscUdBQXFHLGdCQUFnQixnQkFBZ0IsaUVBQWlFLEVBQUUsMkVBQTJFLG1DQUFtQyxnQkFBZ0IsbUNBQW1DLEVBQUUsdUZBQXVGLHNCQUFzQixnQkFBZ0IsbURBQW1ELEVBQUUsdUZBQXVGLHVCQUF1QixnQkFBZ0IsbURBQW1ELEVBQUUsMkVBQTJFLHNDQUFzQyxnQkFBZ0IsbUNBQW1DLEVBQUUsOEVBQThFLHdDQUF3QyxnQkFBZ0Isc0NBQXNDLEVBQUUsd0VBQXdFLGFBQWEsZ0JBQWdCLGdDQUFnQyxFQUFFLHdFQUF3RSxjQUFjLGdCQUFnQixnQ0FBZ0MsRUFBRSwyRUFBMkUsMEJBQTBCLGdCQUFnQixxSEFBcUgsRUFBRSwyRUFBMkUsNEJBQTRCLGdCQUFnQixxSEFBcUgsRUFBRSwrRUFBK0UsNEJBQTRCLGdCQUFnQix1Q0FBdUMsRUFBRSwrRUFBK0UsZ0JBQWdCLGdCQUFnQix1Q0FBdUMsRUFBRSw0RUFBNEUsMEhBQTBILGdCQUFnQixrR0FBa0csRUFBRSw2RUFBNkUsbUVBQW1FLGdCQUFnQixvR0FBb0csRUFBRSxpRkFBaUYseUNBQXlDLGdCQUFnQix5Q0FBeUMsRUFBRSxpRkFBaUYsMkNBQTJDLGdCQUFnQix5Q0FBeUMsRUFBRSx5RUFBeUUsV0FBVyxnQkFBZ0IsaUNBQWlDLEVBQUUsNEVBQTRFLFlBQVksZ0JBQWdCLG9DQUFvQyxFQUFFLDJFQUEyRSwwQ0FBMEMsZ0JBQWdCLGlGQUFpRixFQUFFLDJFQUEyRSxZQUFZLGdCQUFnQixtQ0FBbUMsRUFBRSx1RUFBdUUsa0RBQWtELGdCQUFnQiwrQkFBK0IsRUFBRSwwRUFBMEUsc0RBQXNELGdCQUFnQixrQ0FBa0MsRUFBRSw2RUFBNkUsbUNBQW1DLGdCQUFnQixnRkFBZ0YsRUFBRSw2RUFBNkUscUNBQXFDLGdCQUFnQixnRkFBZ0YsRUFBRSw2RUFBNkUscUJBQXFCLGdCQUFnQixxQ0FBcUMsRUFBRSw2RUFBNkUsa0RBQWtELGdCQUFnQixxQ0FBcUMsRUFBRSxtRkFBbUYsNENBQTRDLGdCQUFnQiwyQ0FBMkMsRUFBRSxvRUFBb0UsYUFBYSxnQkFBZ0IsOERBQThELEVBQUUsc0VBQXNFLGNBQWMsZ0JBQWdCLGdFQUFnRSxFQUFFLCtFQUErRSxrQkFBa0IsZ0JBQWdCLHVDQUF1QyxFQUFFLCtFQUErRSxrQkFBa0IsZ0JBQWdCLHVDQUF1QyxFQUFFLDZFQUE2RSxpQkFBaUIsZ0JBQWdCLHFDQUFxQyxFQUFFLDZFQUE2RSxpQkFBaUIsZ0JBQWdCLHFDQUFxQyxFQUFFLCtFQUErRSxtQkFBbUIsZ0JBQWdCLHVDQUF1QyxFQUFFLDZFQUE2RSxrQkFBa0IsZ0JBQWdCLHFDQUFxQyxFQUFFLDZFQUE2RSxXQUFXLGdCQUFnQixxQ0FBcUMsRUFBRSw2RUFBNkUsWUFBWSxnQkFBZ0IscUNBQXFDLEVBQUUsc0VBQXNFLCtDQUErQyxnQkFBZ0IsNkJBQTZCLG9IQUFvSCxFQUFFLHdFQUF3RSxrREFBa0QsZ0JBQWdCLCtCQUErQixvSEFBb0gsRUFBRSw4RUFBOEUsK0NBQStDLGdCQUFnQixxQ0FBcUMsb0hBQW9ILEVBQUUsZ0ZBQWdGLGtEQUFrRCxnQkFBZ0IsdUNBQXVDLG9IQUFvSCxFQUFFLDBFQUEwRSxjQUFjLGdCQUFnQixrQ0FBa0MsRUFBRSxzRUFBc0UsYUFBYSxnQkFBZ0IsK0NBQStDLEVBQUUsaUZBQWlGLGtCQUFrQixnQkFBZ0IseUNBQXlDLEVBQUUsaUZBQWlGLG1CQUFtQixnQkFBZ0IseUNBQXlDLEVBQUUsNkVBQTZFLG1DQUFtQyxnQkFBZ0Isd0RBQXdELEVBQUUsZ0ZBQWdGLGVBQWUsZ0JBQWdCLHdDQUF3QyxFQUFFLGtGQUFrRixrQkFBa0IsZ0JBQWdCLDBDQUEwQyxFQUFFLCtFQUErRSxhQUFhLGdCQUFnQix1Q0FBdUMsRUFBRSxpRkFBaUYsY0FBYyxnQkFBZ0IseUNBQXlDLEVBQUUsdUVBQXVFLDZCQUE2QixnQkFBZ0IsMklBQTJJLEVBQUUsbUZBQW1GLCtCQUErQixnQkFBZ0IsMkNBQTJDLEVBQUUscUVBQXFFLHdCQUF3QixnQkFBZ0IsNkJBQTZCLEVBQUUsd0VBQXdFLFlBQVksZ0JBQWdCLGdDQUFnQyxFQUFFLDBFQUEwRSxhQUFhLGdCQUFnQixrQ0FBa0MsRUFBRSwrRUFBK0UsMENBQTBDLGdCQUFnQix1Q0FBdUMsRUFBRSwrRUFBK0UsdUJBQXVCLGdCQUFnQix1Q0FBdUMsRUFBRSwyRUFBMkUsNkJBQTZCLGdCQUFnQixtQ0FBbUMsRUFBRSwyRUFBMkUsNERBQTRELGdCQUFnQixtQ0FBbUMsRUFBRSwrRUFBK0UsdUNBQXVDLGdCQUFnQix1Q0FBdUMsRUFBRSwrRUFBK0UseUJBQXlCLGdCQUFnQix1Q0FBdUMsRUFBRSxpRkFBaUYscUJBQXFCLGdCQUFnQix5Q0FBeUMsRUFBRSxpRkFBaUYsc0JBQXNCLGdCQUFnQix5Q0FBeUMsRUFBRSxpRkFBaUYscUJBQXFCLGdCQUFnQix5Q0FBeUMsRUFBRSxpRkFBaUYsbUJBQW1CLGdCQUFnQix5Q0FBeUMsRUFBRSw2RUFBNkUsa0RBQWtELGdCQUFnQiwyRUFBMkUsRUFBRSxzRUFBc0Usd0NBQXdDLGdCQUFnQiw4QkFBOEIsRUFBRSx5RUFBeUUsMkNBQTJDLGdCQUFnQixpQ0FBaUMsRUFBRSw2RUFBNkUscURBQXFELGdCQUFnQiwyRUFBMkUsRUFBRSwyRUFBMkUsZUFBZSxnQkFBZ0IsbUNBQW1DLEVBQUUsMkVBQTJFLGdCQUFnQixnQkFBZ0IsbUNBQW1DLEVBQUUsNkVBQTZFLGFBQWEsZ0JBQWdCLHFDQUFxQyxFQUFFLDZFQUE2RSxjQUFjLGdCQUFnQixxQ0FBcUMsRUFBRSxzRUFBc0UsNEJBQTRCLGdCQUFnQiw4QkFBOEIsRUFBRSx5RUFBeUUsNkJBQTZCLGdCQUFnQixpQ0FBaUMsRUFBRSwyRUFBMkUsbUNBQW1DLGdCQUFnQixvREFBb0QsRUFBRSw2RUFBNkUsYUFBYSxnQkFBZ0IscUNBQXFDLEVBQUUsbUVBQW1FLFlBQVksZ0JBQWdCLHFKQUFxSixFQUFFLGlFQUFpRSxXQUFXLGdCQUFnQixvSkFBb0osRUFBRSxzRUFBc0UsVUFBVSxnQkFBZ0IsOEJBQThCLEVBQUUsd0VBQXdFLGFBQWEsZ0JBQWdCLGdDQUFnQyxFQUFFLDJFQUEyRSxjQUFjLGdCQUFnQixtQ0FBbUMsRUFBRSwyRUFBMkUsZUFBZSxnQkFBZ0IsbUNBQW1DLEVBQUUsdUVBQXVFLHVCQUF1QixnQkFBZ0IsNkNBQTZDLEVBQUUsdUVBQXVFLFdBQVcsZ0JBQWdCLCtCQUErQixFQUFFLG9FQUFvRSxVQUFVLGdCQUFnQiw0REFBNEQsRUFBRSxzRUFBc0UsV0FBVyxnQkFBZ0IsaUVBQWlFLEVBQUUsNEVBQTRFLHVCQUF1QixnQkFBZ0Isb0NBQW9DLEVBQUUsOEVBQThFLDhCQUE4QixnQkFBZ0Isc0NBQXNDLEVBQUUseUVBQXlFLGFBQWEsZ0JBQWdCLGlDQUFpQyxFQUFFLHlFQUF5RSxjQUFjLGdCQUFnQixpQ0FBaUMsRUFBRSxtRUFBbUUsbUVBQW1FLGdCQUFnQiwyQkFBMkIsRUFBRSxxRUFBcUUsb0NBQW9DLGdCQUFnQiw2QkFBNkIsRUFBRSwyRUFBMkUsMENBQTBDLGdCQUFnQixzREFBc0QsRUFBRSw4RUFBOEUsYUFBYSxnQkFBZ0Isc0NBQXNDLEVBQUUsNkVBQTZFLFlBQVksZ0JBQWdCLHFDQUFxQyxFQUFFLDZFQUE2RSxhQUFhLGdCQUFnQixxQ0FBcUMsRUFBRSwrRUFBK0Usa0NBQWtDLGdCQUFnQix1Q0FBdUMsRUFBRSwrRUFBK0UscUNBQXFDLGdCQUFnQix1Q0FBdUMsRUFBRSwyRUFBMkUsa0JBQWtCLGdCQUFnQixtQ0FBbUMsRUFBRSwyRUFBMkUsa0JBQWtCLGdCQUFnQixtQ0FBbUMsRUFBRSxzRUFBc0Usa0NBQWtDLGdCQUFnQiw4QkFBOEIsRUFBRSx3RUFBd0Usc0NBQXNDLGdCQUFnQixnQ0FBZ0MsRUFBRSw2RUFBNkUsVUFBVSxnQkFBZ0IscUNBQXFDLEVBQUUsNkVBQTZFLFdBQVcsZ0JBQWdCLHFDQUFxQyxFQUFFLCtFQUErRSx1RkFBdUYsZ0JBQWdCLHVDQUF1QyxFQUFFLCtFQUErRSw4REFBOEQsZ0JBQWdCLHVDQUF1QyxFQUFFLHlFQUF5RSxTQUFTLGdCQUFnQixpQ0FBaUMsRUFBRSw0RUFBNEUsVUFBVSxnQkFBZ0Isb0NBQW9DLEVBQUUsMkVBQTJFLFVBQVUsZ0JBQWdCLG1DQUFtQyxFQUFFLDJFQUEyRSxZQUFZLGdCQUFnQixtQ0FBbUMsRUFBRSwyRUFBMkUsYUFBYSxnQkFBZ0IsbUNBQW1DLEVBQUUsMkVBQTJFLGNBQWMsZ0JBQWdCLHlEQUF5RCxFQUFFLDZFQUE2RSxjQUFjLGdCQUFnQixxQ0FBcUMsRUFBRSw2RUFBNkUsZUFBZSxnQkFBZ0IscUNBQXFDLEVBQUUsK0VBQStFLGdEQUFnRCxnQkFBZ0IsdUNBQXVDLEVBQUUsK0VBQStFLCtCQUErQixnQkFBZ0IsdUNBQXVDLEVBQUUsK0VBQStFLGdDQUFnQyxnQkFBZ0IsdUNBQXVDLEVBQUUsK0VBQStFLGtDQUFrQyxnQkFBZ0IsdUNBQXVDLEVBQUUsK0VBQStFLFlBQVksZ0JBQWdCLHVDQUF1QyxFQUFFLGdGQUFnRixtQkFBbUIsZ0JBQWdCLHdDQUF3QyxFQUFFLGtGQUFrRixvQkFBb0IsZ0JBQWdCLDBDQUEwQyxFQUFFLHlFQUF5RSxrQkFBa0IsZ0JBQWdCLHVFQUF1RSxFQUFFLGlGQUFpRixtQkFBbUIsZ0JBQWdCLHlDQUF5QyxFQUFFLDZFQUE2RSxVQUFVLGdCQUFnQixxQ0FBcUMsRUFBRSw2RUFBNkUsV0FBVyxnQkFBZ0IscUNBQXFDLEVBQUUsMkVBQTJFLGFBQWEsZ0JBQWdCLHFFQUFxRSxFQUFFLDZFQUE2RSxZQUFZLGdCQUFnQixxQ0FBcUMsRUFBRSw2RUFBNkUsYUFBYSxnQkFBZ0IscUNBQXFDLEVBQUUsaUZBQWlGLDJDQUEyQyxnQkFBZ0IseUNBQXlDLEVBQUUsaUZBQWlGLDZDQUE2QyxnQkFBZ0IseUNBQXlDLEVBQUUsdUVBQXVFLGFBQWEsZ0JBQWdCLCtEQUErRCxFQUFFLDJFQUEyRSxpQkFBaUIsZ0JBQWdCLHVDQUF1QyxFQUFFLDZEQUE2RCw0QkFBNEIsZ0JBQWdCLGtCQUFrQixFQUFFLDhEQUE4RCwyQkFBMkIsZ0JBQWdCLG1CQUFtQixFQUFFLDhEQUE4RCwyQkFBMkIsZ0JBQWdCLHFCQUFxQixFQUFFLGlFQUFpRSxpQkFBaUIsZ0JBQWdCLHdCQUF3QixFQUFFLG1FQUFtRSxtQkFBbUIsZ0JBQWdCLDBCQUEwQixFQUFFLG1FQUFtRSxtQkFBbUIsZ0JBQWdCLDBCQUEwQixFQUFFLDhEQUE4RCxvQkFBb0IsZ0JBQWdCLHFCQUFxQixFQUFFLGdFQUFnRSxrQ0FBa0MsZ0JBQWdCLHFCQUFxQixFQUFFLDBEQUEwRCxVQUFVLGdCQUFnQixrQ0FBa0MsRUFBRSwyREFBMkQsaUZBQWlGLGdCQUFnQixnQkFBZ0IsRUFBRSxpRUFBaUUsV0FBVyxnQkFBZ0Isd0JBQXdCLEVBQUUsa0VBQWtFLDZDQUE2QyxnQkFBZ0IseUJBQXlCLEVBQUUsb0VBQW9FLGlCQUFpQixnQkFBZ0IsMkJBQTJCLEVBQUUsOERBQThELCtDQUErQyxnQkFBZ0IsbUJBQW1CLEVBQUUsNERBQTRELHFDQUFxQyxnQkFBZ0IsbUNBQW1DLEVBQUUsK0RBQStELHlDQUF5QyxnQkFBZ0Isb0JBQW9CLEVBQUUsK0RBQStELDZCQUE2QixnQkFBZ0Isb0JBQW9CLEVBQUUsZ0VBQWdFLCtCQUErQixnQkFBZ0IscUJBQXFCLEVBQUUsOERBQThELGtDQUFrQyxnQkFBZ0IsbUJBQW1CLEVBQUUsNERBQTRELDRIQUE0SCxnQkFBZ0IsaUJBQWlCLEVBQUUsd0VBQXdFLHFDQUFxQyxnQkFBZ0IsK0JBQStCLEVBQUUsNkRBQTZELDZDQUE2QyxnQkFBZ0Isa0JBQWtCLEVBQUUsOERBQThELDJFQUEyRSxnQkFBZ0IsbUJBQW1CLEVBQUUsK0RBQStELHlDQUF5QyxnQkFBZ0Isb0JBQW9CLEVBQUUsOERBQThELG9DQUFvQyxnQkFBZ0IsbUJBQW1CLEVBQUUsZ0VBQWdFLHdDQUF3QyxnQkFBZ0IscUJBQXFCLEVBQUUsMERBQTBELHNDQUFzQyxnQkFBZ0IsZ0NBQWdDLEVBQUUsMERBQTBELHlDQUF5QyxnQkFBZ0IsZ0NBQWdDLEVBQUUsMkRBQTJELGNBQWMsZ0JBQWdCLGdCQUFnQixFQUFFLDJEQUEyRCxvQ0FBb0MsZ0JBQWdCLGtDQUFrQyxFQUFFLDREQUE0RCxxRUFBcUUsZ0JBQWdCLG9DQUFvQyxFQUFFLHVEQUF1RCxtQ0FBbUMsZ0JBQWdCLFdBQVcsNEZBQTRGLEVBQUUseURBQXlELDBCQUEwQixnQkFBZ0IsYUFBYSw0RkFBNEYsRUFBRSx3REFBd0QsdUNBQXVDLGdCQUFnQiwwQkFBMEIsRUFBRSxxREFBcUQsK0JBQStCLGdCQUFnQixvQkFBb0IsRUFBRSwyREFBMkQsMkNBQTJDLGdCQUFnQixrQ0FBa0MsRUFBRSw0REFBNEQsZ0RBQWdELGdCQUFnQixrQkFBa0IsMkhBQTJILEVBQUUsMERBQTBELHNCQUFzQixnQkFBZ0IsY0FBYywySEFBMkgsRUFBRSxrRUFBa0UsdUVBQXVFLGdCQUFnQix3QkFBd0IsMkhBQTJILEVBQUUsNERBQTRELHFCQUFxQixnQkFBZ0Isa0JBQWtCLDJIQUEySCxFQUFFLG9FQUFvRSxpREFBaUQsZ0JBQWdCLDBCQUEwQiwySEFBMkgsRUFBRSx5REFBeUQsWUFBWSxnQkFBZ0IsYUFBYSwySEFBMkgsRUFBRSxtRUFBbUUsdUJBQXVCLGdCQUFnQix5QkFBeUIsMkhBQTJILEVBQUUsOERBQThELFVBQVUsZ0JBQWdCLG9CQUFvQiwySEFBMkgsRUFBRSwwREFBMEQsMkNBQTJDLGdCQUFnQixnQkFBZ0IsMkhBQTJILEVBQUUsMERBQTBELGlFQUFpRSxnQkFBZ0IsY0FBYywySEFBMkgsRUFBRSwrREFBK0QsMERBQTBELGdCQUFnQixxQkFBcUIsMkhBQTJILEVBQUUsMkRBQTJELGtCQUFrQixnQkFBZ0IsZUFBZSwySEFBMkgsRUFBRSwwREFBMEQsYUFBYSxnQkFBZ0IsY0FBYywySEFBMkgsRUFBRSw0REFBNEQsaUJBQWlCLGdCQUFnQixrQkFBa0IsMkhBQTJILEVBQUUsZ0VBQWdFLHdEQUF3RCxnQkFBZ0Isc0JBQXNCLDJIQUEySCxFQUFFLDBEQUEwRCx1Q0FBdUMsZ0JBQWdCLGNBQWMsMkhBQTJILEVBQUUsK0RBQStELHNEQUFzRCxnQkFBZ0IscUJBQXFCLDJIQUEySCxFQUFFLDREQUE0RCxXQUFXLGdCQUFnQixrQkFBa0IsMkhBQTJILEVBQUUsNkRBQTZELFNBQVMsZ0JBQWdCLG1CQUFtQiwySEFBMkgsRUFBRSx1REFBdUQsV0FBVyxnQkFBZ0IsV0FBVywySEFBMkgsRUFBRSw0REFBNEQsaUJBQWlCLGdCQUFnQixrQkFBa0IsMkhBQTJILEVBQUUsOERBQThELG1CQUFtQixnQkFBZ0Isb0JBQW9CLDJIQUEySCxFQUFFLDJEQUEyRCxtQkFBbUIsZ0JBQWdCLGlCQUFpQiwySEFBMkgsRUFBRSxrRUFBa0UsaUVBQWlFLGdCQUFnQix3QkFBd0IsMkhBQTJILEVBQUUsZ0VBQWdFLHNIQUFzSCxnQkFBZ0Isc0JBQXNCLDJIQUEySCxFQUFFLGlFQUFpRSxxQkFBcUIsZ0JBQWdCLHVCQUF1QiwySEFBMkgsRUFBRSw4REFBOEQsc0JBQXNCLGdCQUFnQixvQkFBb0IsMkhBQTJILEVBQUUsK0RBQStELHdCQUF3QixnQkFBZ0IscUJBQXFCLDJIQUEySCxFQUFFLDhEQUE4RCx1Q0FBdUMsZ0JBQWdCLHlDQUF5QywySEFBMkgsRUFBRSwyREFBMkQsNEJBQTRCLGdCQUFnQixtQ0FBbUMsMkhBQTJILEVBQUUsNERBQTRELDRDQUE0QyxnQkFBZ0Isa0JBQWtCLDJIQUEySCxFQUFFLCtEQUErRCxxQkFBcUIsZ0JBQWdCLHFCQUFxQiwySEFBMkgsRUFBRSwrREFBK0QsZUFBZSxnQkFBZ0IscUJBQXFCLDJIQUEySCxFQUFFLHdEQUF3RCxxQkFBcUIsZ0JBQWdCLFlBQVksMkhBQTJILEVBQUUsMkRBQTJELDhDQUE4QyxnQkFBZ0IsaUJBQWlCLDJIQUEySCxFQUFFLDZEQUE2RCx1REFBdUQsZ0JBQWdCLG1CQUFtQiwySEFBMkgsRUFBRSw2REFBNkQsMkJBQTJCLGdCQUFnQixtQkFBbUIsMkhBQTJILEVBQUUsd0RBQXdELFNBQVMsZ0JBQWdCLFlBQVksMkhBQTJILEVBQUUsMkRBQTJELHFCQUFxQixnQkFBZ0IsZUFBZSwySEFBMkgsRUFBRSw4REFBOEQsc0JBQXNCLGdCQUFnQixrQkFBa0IsMkhBQTJILEVBQUUsOERBQThELHVEQUF1RCxnQkFBZ0Isa0JBQWtCLDJIQUEySCxFQUFFLDhEQUE4RCxlQUFlLGdCQUFnQix1Q0FBdUMsMkhBQTJILEVBQUUseURBQXlELDRDQUE0QyxnQkFBZ0IsYUFBYSwySEFBMkgsRUFBRSxvRUFBb0UsdUJBQXVCLGdCQUFnQiwwQkFBMEIsMkhBQTJILEVBQUUsd0RBQXdELDREQUE0RCxnQkFBZ0IsY0FBYywySEFBMkgsRUFBRSwwREFBMEQsVUFBVSxnQkFBZ0IsY0FBYywySEFBMkgsRUFBRSw2REFBNkQsV0FBVyxnQkFBZ0IsbUJBQW1CLDJIQUEySCxFQUFFLDhEQUE4RCxZQUFZLGdCQUFnQixvQkFBb0IsMkhBQTJILEVBQUUsNkRBQTZELDJEQUEyRCxnQkFBZ0Isd0NBQXdDLDJIQUEySCxFQUFFLDJEQUEyRCwwREFBMEQsZ0JBQWdCLGVBQWUsdUxBQXVMLEVBQUUscUVBQXFFLGlCQUFpQixnQkFBZ0IseURBQXlELCtJQUErSSxFQUFFLGtFQUFrRSxXQUFXLGdCQUFnQix3QkFBd0IsK0lBQStJLEVBQUUsa0VBQWtFLHlDQUF5QyxnQkFBZ0Isd0JBQXdCLGtHQUFrRyxFQUFFLDhEQUE4RCx3Q0FBd0MsZ0JBQWdCLCtDQUErQyxrR0FBa0csRUFBRSwyREFBMkQsaUJBQWlCLGdCQUFnQix5Q0FBeUMsNElBQTRJLEVBQUUsMkRBQTJELHFEQUFxRCxnQkFBZ0Isc0NBQXNDLHVGQUF1RixFQUFFLG9EQUFvRCxRQUFRLGdCQUFnQixrREFBa0QsNkdBQTZHLEVBQUUsbURBQW1ELGFBQWEsZ0JBQWdCLE9BQU8sb0ZBQW9GLEVBQUUsb0VBQW9FLDJDQUEyQyxnQkFBZ0IsMEJBQTBCLG9MQUFvTCxFQUFFLHVEQUF1RCxnQkFBZ0IsZ0JBQWdCLFdBQVcseUdBQXlHLEVBQUUsNkRBQTZELG9CQUFvQixnQkFBZ0IsaUJBQWlCLHFHQUFxRyxFQUFFLDBEQUEwRCxpREFBaUQsZ0JBQWdCLCtCQUErQiw2TEFBNkwsRUFBRSxxRUFBcUUsaUVBQWlFLGdCQUFnQiwyQkFBMkIsdUlBQXVJLEVBQUUsNkRBQTZELHlCQUF5QixnQkFBZ0IsaUJBQWlCLHdIQUF3SCxFQUFFLDhEQUE4RCxnQkFBZ0IsZ0JBQWdCLGtCQUFrQixrR0FBa0csRUFBRSwrREFBK0Qsb0VBQW9FLGdCQUFnQixtQkFBbUIsd0xBQXdMLEVBQUUsMkRBQTJELDREQUE0RCxnQkFBZ0IsZ0VBQWdFLDRDQUE0QywyRUFBMkUsRUFBRSw2REFBNkQsZ0VBQWdFLGdCQUFnQixzRUFBc0UsNENBQTRDLDJFQUEyRSxFQUFFLDhEQUE4RCxnRUFBZ0UsZ0JBQWdCLG9CQUFvQiwrS0FBK0ssRUFBRSwrREFBK0QsYUFBYSxnQkFBZ0Isd0VBQXdFLG9OQUFvTixFQUFFLDhEQUE4RCw4REFBOEQsZ0JBQWdCLHFFQUFxRSxvTkFBb04sRUFBRSxzREFBc0Qsb0NBQW9DLGdCQUFnQiwrQ0FBK0MsMEpBQTBKLEVBQUUsK0RBQStELHlCQUF5QixnQkFBZ0IsNEZBQTRGLGtKQUFrSixFQUFFLHlEQUF5RCw0SEFBNEgsZ0JBQWdCLGFBQWEsZ0pBQWdKLEVBQUUsMERBQTBELG1FQUFtRSxnQkFBZ0IsY0FBYyxnSkFBZ0osRUFBRSx1REFBdUQsMkNBQTJDLGdCQUFnQixXQUFXLHFDQUFxQyxxR0FBcUcsRUFBRSx3REFBd0Qsc0NBQXNDLGdCQUFnQixZQUFZLHFDQUFxQyxxR0FBcUcsRUFBRSxzREFBc0QsOENBQThDLGdCQUFnQixVQUFVLG9DQUFvQyxxR0FBcUcsRUFBRSx1REFBdUQsbURBQW1ELGdCQUFnQixXQUFXLG9DQUFvQyxxR0FBcUcsRUFBRSx5REFBeUQsNkNBQTZDLGdCQUFnQixjQUFjLEVBQUUseURBQXlELCtDQUErQyxnQkFBZ0IsY0FBYyxFQUFFLHVEQUF1RCxVQUFVLGdCQUFnQixZQUFZLEVBQUUsd0RBQXdELFdBQVcsZ0JBQWdCLGFBQWEsRUFBRSx5REFBeUQsbUJBQW1CLGdCQUFnQixjQUFjLEVBQUUsMERBQTBELG1CQUFtQixnQkFBZ0IsZUFBZSxFQUFFLHlEQUF5RCw0Q0FBNEMsZ0JBQWdCLDhCQUE4QixFQUFFLHVEQUF1RCx1QkFBdUIsZ0JBQWdCLFlBQVksRUFBRSx3REFBd0Qsc0JBQXNCLGdCQUFnQiw2Q0FBNkMsRUFBRSx5REFBeUQsNkJBQTZCLGdCQUFnQixnQ0FBZ0MsRUFBRSxzREFBc0QsNEVBQTRFLGdCQUFnQixzRUFBc0UseVFBQXlRLEVBQUUsaUVBQWlFLG9FQUFvRSxnQkFBZ0IsK0NBQStDLHFPQUFxTyxFQUFFLCtEQUErRCxzQkFBc0IsZ0JBQWdCLHFCQUFxQixxTkFBcU4sRUFBRSw0REFBNEQsNkRBQTZELGdCQUFnQix1RUFBdUUsK2NBQStjLEVBQUUsK0RBQStELFdBQVcsZ0JBQWdCLDZDQUE2QyxrTkFBa04sRUFBRSxnRUFBZ0UseUVBQXlFLGdCQUFnQixzQkFBc0IsZ0xBQWdMLEVBQUUscUVBQXFFLGdDQUFnQyxnQkFBZ0IscUlBQXFJLHdLQUF3SyxFQUFFLHVEQUF1RCx5Q0FBeUMsZ0JBQWdCLHlCQUF5QixrakJBQWtqQixFQUFFLDREQUE0RCw2QkFBNkIsZ0JBQWdCLHFDQUFxQywwRkFBMEYsRUFBRSx1REFBdUQsb0NBQW9DLGdCQUFnQix1QkFBdUIsRUFBRSw0REFBNEQsc0NBQXNDLGdCQUFnQixzQ0FBc0MsRUFBRSx1REFBdUQsV0FBVyxnQkFBZ0Isc0JBQXNCLHVEQUF1RCxFQUFFLHFEQUFxRCw0Q0FBNEMsZ0JBQWdCLFVBQVUsRUFBRSxzREFBc0Qsb0JBQW9CLGdCQUFnQixrQ0FBa0MsRUFBRSxvREFBb0Qsa0RBQWtELGdCQUFnQiw2QkFBNkIsRUFBRSxzREFBc0QscUJBQXFCLGdCQUFnQixXQUFXLEVBQUUsb0RBQW9ELDJDQUEyQyxnQkFBZ0Isc0NBQXNDLHVKQUF1SixFQUFFLDBEQUEwRCx3REFBd0QsZ0JBQWdCLCtCQUErQixpRkFBaUYsRUFBRSw0REFBNEQsZ0VBQWdFLGdCQUFnQixnQkFBZ0IsaUZBQWlGLEVBQUUsNkRBQTZELG9FQUFvRSxnQkFBZ0IsaUJBQWlCLGlGQUFpRixFQUFFLDBEQUEwRCwyREFBMkQsZ0JBQWdCLCtCQUErQixpRkFBaUYsRUFBRSw0REFBNEQsbUVBQW1FLGdCQUFnQixnQkFBZ0IsaUZBQWlGLEVBQUUsNkRBQTZELHVFQUF1RSxnQkFBZ0IsaUJBQWlCLGlGQUFpRixFQUFFLDJEQUEyRCxvQkFBb0IsZ0JBQWdCLGlDQUFpQyxpRkFBaUYsRUFBRSw0REFBNEQsb0JBQW9CLGdCQUFnQixtQ0FBbUMsaUZBQWlGLEVBQUUsdURBQXVELGdEQUFnRCxnQkFBZ0IseUNBQXlDLGtHQUFrRyxFQUFFLHNEQUFzRCwwQkFBMEIsZ0JBQWdCLFVBQVUsK0RBQStELEVBQUUsc0VBQXNFLHNCQUFzQixnQkFBZ0IsNEJBQTRCLDhIQUE4SCxFQUFFLHlFQUF5RSx5QkFBeUIsZ0JBQWdCLCtCQUErQiw4SEFBOEgsRUFBRSwwREFBMEQsOEJBQThCLGdCQUFnQixjQUFjLHVGQUF1RixFQUFFLG1FQUFtRSxpRUFBaUUsZ0JBQWdCLGtEQUFrRCxpSkFBaUosRUFBRSwrREFBK0QsY0FBYyxnQkFBZ0IsbUJBQW1CLGlKQUFpSixFQUFFLDhEQUE4RCwwQkFBMEIsZ0JBQWdCLGtCQUFrQixpSkFBaUosRUFBRSxtRUFBbUUsWUFBWSxnQkFBZ0Isa0pBQWtKLEVBQUUsa0VBQWtFLHNCQUFzQixnQkFBZ0IsZ0RBQWdELDRJQUE0SSxFQUFFLCtEQUErRCxxQkFBcUIsZ0JBQWdCLHFFQUFxRSw4TkFBOE4sRUFBRSw2REFBNkQsdUJBQXVCLGdCQUFnQixxRUFBcUUsc0pBQXNKLEVBQUUsK0RBQStELDhDQUE4QyxnQkFBZ0IsZ0VBQWdFLG1NQUFtTSxFQUFFLDZEQUE2RCwrQkFBK0IsZ0JBQWdCLG1CQUFtQixvRkFBb0YsRUFBRSxxREFBcUQsa0lBQWtJLGdCQUFnQixvQkFBb0IsbVFBQW1RLFNBQVMsY0FBYyxXQUFXLGtDQUFrQyxnQkFBZ0IsRUFBRSwwQkFBMEIsYUFBYSxFQUFFLE1BQU0sNkZBQTZGLFFBQVEsTUFBTSw4RUFBOEUsU0FBUyx3SEFBd0gsaUJBQWlCLGtCQUFrQixTQUFTLHNEQUFzRCxhQUFhLEVBQUUsd0JBQXdCLHVCQUF1QixXQUFXLGFBQWEsb0RBQW9ELG1CQUFtQixNQUFNLGlGQUFpRixHQUFHLGdCQUFnQixXQUFXLHlDQUF5QyxjQUFjLHlDQUF5QywyQkFBMkIsdUJBQXVCLG1DQUFtQyxZQUFZLDBDQUEwQyxtQkFBbUIsbUJBQW1CLFNBQVMsU0FBUyxhQUFhLEVBQUUsYUFBYSw2REFBNkQsT0FBTyxpQ0FBaUMsa0ZBQWtGLG1PQUFtTyx3QkFBd0IsR0FBRyxHQUFHLFdBQVcsdUNBQXVDLGlDQUFpQyxzQkFBc0IsRUFBRSx1Q0FBdUMsK0JBQStCLCtCQUErQixFQUFFLDBDQUEwQyxxQ0FBcUMseUJBQXlCLEVBQUUseUNBQXlDLHFDQUFxQyx3QkFBd0IsRUFBRSx1Q0FBdUMsaUNBQWlDLHNCQUFzQixFQUFFLHdDQUF3QyxtQ0FBbUMsdUJBQXVCLEVBQUUsc0NBQXNDLCtCQUErQixxQkFBcUIsRUFBRSw0Q0FBNEMsMkNBQTJDLDJCQUEyQixFQUFFLDJDQUEyQyx5Q0FBeUMsMEJBQTBCLEVBQUUsdUNBQXVDLGlDQUFpQyxzQkFBc0IsRUFBRSx1Q0FBdUMsaUNBQWlDLHNCQUFzQixFQUFFLHdDQUF3QyxtQ0FBbUMsdUJBQXVCLEVBQUUsNENBQTRDLDZCQUE2QixnQ0FBZ0MsRUFBRSx1Q0FBdUMsK0JBQStCLHNCQUFzQixFQUFFLHlDQUF5Qyw2QkFBNkIsNkJBQTZCLEVBQUUsdUNBQXVDLGlDQUFpQyxzQkFBc0IsRUFBRSwyQ0FBMkMsMkJBQTJCLDhCQUE4QixFQUFFLHNDQUFzQyw2QkFBNkIscUJBQXFCLEVBQUUsb0NBQW9DLDJCQUEyQixtQkFBbUIsRUFBRSxzQ0FBc0MsNkJBQTZCLHFCQUFxQixFQUFFLHNDQUFzQywrQkFBK0IscUJBQXFCLEVBQUUsdUNBQXVDLCtCQUErQixzQkFBc0IsRUFBRSx5Q0FBeUMsNkJBQTZCLDZCQUE2QixFQUFFLHNDQUFzQywrQkFBK0IscUJBQXFCLEVBQUUsMENBQTBDLHFDQUFxQyx5QkFBeUIsRUFBRSx5Q0FBeUMsbUNBQW1DLHdCQUF3QixFQUFFLDZDQUE2QywrQkFBK0Isa0NBQWtDLEVBQUUsd0NBQXdDLGlDQUFpQyx1QkFBdUIsRUFBRSwwQ0FBMEMsK0JBQStCLCtCQUErQixFQUFFLDJDQUEyQyx1Q0FBdUMsMEJBQTBCLEVBQUUsMENBQTBDLHVDQUF1Qyx5QkFBeUIsRUFBRSw0Q0FBNEMseUNBQXlDLHlDQUF5QyxFQUFFLDJDQUEyQyx1Q0FBdUMsdUNBQXVDLEVBQUUsNkNBQTZDLDJDQUEyQywyQ0FBMkMsRUFBRSx5Q0FBeUMsbUNBQW1DLHdCQUF3QixFQUFFLHVDQUF1QyxpQ0FBaUMsc0JBQXNCLEVBQUUsMENBQTBDLHFDQUFxQyx5QkFBeUIsRUFBRSx3Q0FBd0MsbUNBQW1DLHVCQUF1QixFQUFFLHlDQUF5QyxtQ0FBbUMsd0JBQXdCLEVBQUUsd0NBQXdDLG1DQUFtQyx1QkFBdUIsRUFBRSx1Q0FBdUMsaUNBQWlDLHNCQUFzQixFQUFFLGdEQUFnRCw2QkFBNkIseUNBQXlDLEVBQUUsdUNBQXVDLCtCQUErQixzQkFBc0IsRUFBRSxzQ0FBc0MsK0JBQStCLHFCQUFxQixFQUFFLHdDQUF3QyxtQ0FBbUMsdUJBQXVCLEVBQUUsNENBQTRDLGlDQUFpQyxrQ0FBa0MsRUFBRSx1Q0FBdUMsaUNBQWlDLHNCQUFzQixFQUFFLHdDQUF3QyxtQ0FBbUMsdUJBQXVCLEVBQUUsd0NBQXdDLGlDQUFpQyx1QkFBdUIsRUFBRSxzQ0FBc0MsK0JBQStCLHFCQUFxQixFQUFFLHVDQUF1QywrQkFBK0Isc0JBQXNCLEVBQUUsd0NBQXdDLCtCQUErQix1QkFBdUIsRUFBRSwwQ0FBMEMscUNBQXFDLHlCQUF5QixFQUFFLHlDQUF5QywrQkFBK0Isd0JBQXdCLEVBQUUsd0NBQXdDLGlDQUFpQyx1QkFBdUIsRUFBRSx1Q0FBdUMsaUNBQWlDLHNCQUFzQixFQUFFLGNBQWMsY0FBYywwQkFBMEIsK0NBQStDLG1CQUFtQixrREFBa0QsbUJBQW1CLHlFQUF5RSwwREFBMEQsY0FBYyxnQkFBZ0IsZ0VBQWdFLHdDQUF3QyxJQUFJLG9DQUFvQyw4REFBOEQsRUFBRSxTQUFTLEVBQUUsSUFBSSxnQ0FBZ0MsbUJBQW1CLHVHQUF1RyxNQUFNLEdBQUcsR0FBRyxJQUFJLHdDQUF3QyxVQUFVLGdIQUFnSCxPQUFPLDJyQ0FBMnJDLEtBQUsseWhHQUF5aEcsK0NBQStDLGNBQWMsY0FBYyxxQkFBcUIsY0FBYyxpQkFBaUIsK0NBQStDLDJDQUEyQyw4Q0FBOEMsNklBQTZJLHFCQUFxQixnQ0FBZ0MsYUFBYSxTQUFTLHVDQUF1QyxzQkFBc0IsZUFBZSxTQUFTLHFCQUFxQixtREFBbUQsa0ZBQWtGLGlFQUFpRSxxQ0FBcUMsc0RBQXNELDZJQUE2SSxHQUFHLElBQUksY0FBYyxjQUFjLDBCQUEwQiwrQ0FBK0MsbUJBQW1CLGtEQUFrRCxzQ0FBc0Msc0JBQXNCLGtCQUFrQixnQkFBZ0IseURBQXlELEVBQUUsSUFBSSxzQkFBc0IseUJBQXlCLGlHQUFpRyxLQUFLLEdBQUcsR0FBRyxJQUFJLGkwQkFBaTBCLGlCQUFpQixxQkFBcUIsaUNBQWlDLHNDQUFzQyw0QkFBNEIsdURBQXVELHNCQUFzQixTQUFTLG1CQUFtQix5Q0FBeUMsa0RBQWtELFdBQVcsMkJBQTJCLElBQUksd0JBQXdCLFNBQVMsaUJBQWlCLHlDQUF5QyxlQUFlLGtCQUFrQix1QkFBdUIsa0NBQWtDLG1CQUFtQixjQUFjLHVCQUF1QixjQUFjLHdCQUF3QixVQUFVLElBQUksaUJBQWlCLG1CQUFtQiw2QkFBNkIsbUJBQW1CLG1GQUFtRixZQUFZLHVCQUF1QixJQUFJLGdCQUFnQiwyREFBMkQsT0FBTyxTQUFTLFNBQVMsUUFBUSxJQUFJLDhCQUE4QixRQUFRLGNBQWMsVUFBVSwyQkFBMkIsaUtBQWlLLEdBQUcsZUFBZSxtQkFBbUIsaUNBQWlDLGlCQUFpQixvR0FBb0csdUJBQXVCLDRKQUE0SixHQUFHLGlCQUFpQixNQUFNLHFDQUFxQyxvREFBb0QsaUxBQWlMLGlCQUFpQixvQ0FBb0MsMkJBQTJCLElBQUksY0FBYyxTQUFTLGlCQUFpQixlQUFlLHNPQUFzTyxPQUFPLHVCQUF1QixRQUFRLHM5OGtCQUFzOThrQixFQUFFLDhCQUE4QixzREFBc0Qsb0RBQW9ELGtDQUFrQyxPQUFPLHVEQUF1RCxTQUFTLEdBQUcsZUFBZSw0QkFBNEIsOGFBQThhLDRCQUE0Qiw2REFBNkQsNENBQTRDLE1BQU0sdUJBQXVCLHNDQUFzQyxrQ0FBa0Msa0NBQWtDLEtBQUssbUJBQW1CLHdCQUF3QixtQ0FBbUMsbUVBQW1FLDRDQUE0QyxNQUFNLHVCQUF1QixhQUFhLGtDQUFrQyxLQUFLLHFCQUFxQix3QkFBd0IsT0FBTywwQkFBMEIsa0JBQWtCLFlBQVksbUJBQW1CLEtBQUsseUNBQXlDLDBDQUEwQyxhQUFhLHNJQUFzSSxnRUFBZ0UsR0FBRyxTQUFTLEdBQUcsSUFBSSwwQ0FBMEMsa0JBQWtCLFFBQVEsWUFBWSxlQUFlLGNBQWMsNEVBQTRFLDRDQUE0QyxvQkFBb0IsWUFBWSxHQUFHLEtBQUssaUJBQWlCLE1BQU0sdUZBQXVGLHFFQUFxRSwwRkFBMEYsdUZBQXVGLE1BQU0sZ0lBQWdJLDRCQUE0Qiw4RkFBOEYsMEJBQTBCLCtJQUErSSxtQkFBbUIsS0FBSyxJQUFJLDBDQUEwQyxFQUFFLGtGQUFrRixvQ0FBb0MsdUdBQXVHLG9EQUFvRCwwdkRBQTB2RCxzRUFBc0UsZ0NBQWdDLHlDQUF5QyxvQ0FBb0Msd0hBQXdILGlGQUFpRixtREFBbUQsZ0NBQWdDLE9BQU8sY0FBYywyS0FBMkssWUFBWSxxQkFBcUIsSTs7Ozs7Ozs7Ozs7O0FDRDE5NjBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdCQUFnQixzQkFBc0I7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLG9CQUFvQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3pGYTs7QUFFYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQ2pCYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsb0VBQW1CO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyxvREFBVzs7QUFFbEMscUJBQXFCLG1CQUFPLENBQUMsb0VBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLHdEQUFZO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQyxnREFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7Ozs7Ozs7Ozs7O0FDakJhOztBQUViLHFCQUFxQixtQkFBTyxDQUFDLG9FQUFrQjs7QUFFL0M7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDTmE7O0FBRWIsa0JBQWtCLG1CQUFPLENBQUMsd0RBQVk7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLG9FQUFtQjs7QUFFeEM7QUFDQTtBQUNBLGlCQUFpQixlQUFlO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOzs7Ozs7Ozs7Ozs7O0FDYmE7O0FBRWI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsbUJBQU8sQ0FBQyxnRUFBZSxFQUFFO0FBQ3ZDO0FBQ0EsMENBQTBDLGlCQUFpQjtBQUMzRCx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0MsY0FBYztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQkFBa0IsbUJBQW1CO0FBQ3JDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsa0JBQWtCLHNCQUFzQjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUN6SGE7O0FBRWI7QUFDQSxhQUFhLG1CQUFPLENBQUMsZ0VBQWU7O0FBRXBDO0FBQ0EsNENBQTRDLG9CQUFvQixFQUFFLEdBQUcsbUJBQU8sQ0FBQyxzRUFBa0I7O0FBRS9GOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUMvQmE7O0FBRWI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNoQmE7O0FBRWI7QUFDQSxXQUFXLG1CQUFPLENBQUMsd0RBQWE7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLG1CQUFPLENBQUMsOERBQW1CO0FBQzVDLGdCQUFnQixtQkFBTyxDQUFDLGtFQUFxQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNEJBQTRCLGlEQUFpRDtBQUM3RTtBQUNBO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsaUJBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsa0JBQWtCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3pDYTs7QUFFYix1QkFBdUIsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDbEQsZUFBZSxtQkFBTyxDQUFDLG9EQUFXOztBQUVsQyxxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsNERBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLG9EQUFROztBQUUzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7Ozs7Ozs7Ozs7OztBQ3JCYTs7QUFFYixxQkFBcUIsbUJBQU8sQ0FBQyx3RUFBa0I7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0JBQW9CO0FBQ3BDO0FBQ0E7QUFDQSwyQkFBMkI7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUMsT0FBTztBQUNoRDtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ3REYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsb0VBQW1CO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLDREQUFZOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsbUJBQW1CO0FBQ3RCLEdBQUcsc0JBQXNCLG1DQUFtQyxFQUFFO0FBQzlEO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2JhOztBQUViLDZCQUE2QixtQkFBTyxDQUFDLDBHQUF5QztBQUM5RSxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBcUI7QUFDN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDaEJhOztBQUViLGFBQWEsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDeEMsZUFBZSxtQkFBTyxDQUFDLG9EQUFXOztBQUVsQyxxQkFBcUIsbUJBQU8sQ0FBQyx5RUFBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsNkRBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLHFEQUFROztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7QUNqQmE7O0FBRWIscUJBQXFCLG1CQUFPLENBQUMseUVBQWtCOztBQUUvQztBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUNOYTs7QUFFYixrQkFBa0IsbUJBQU8sQ0FBQyw2REFBWTtBQUN0QyxhQUFhLG1CQUFPLENBQUMsb0VBQW1COztBQUV4QztBQUNBO0FBQ0EsaUJBQWlCLG9CQUFvQjtBQUNyQztBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2JhOztBQUViLDZCQUE2QixtQkFBTyxDQUFDLDBHQUF5QztBQUM5RSxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBcUI7O0FBRTdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7OztBQ2pCYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsb0VBQW1CO0FBQ3hDLGVBQWUsbUJBQU8sQ0FBQyxvREFBVzs7QUFFbEMscUJBQXFCLG1CQUFPLENBQUMsd0VBQWtCO0FBQy9DLGtCQUFrQixtQkFBTyxDQUFDLDREQUFZO0FBQ3RDLFdBQVcsbUJBQU8sQ0FBQyxvREFBUTs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7Ozs7Ozs7Ozs7O0FDakJhOztBQUViLHFCQUFxQixtQkFBTyxDQUFDLHdFQUFrQjs7QUFFL0M7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDTmE7O0FBRWIsa0JBQWtCLG1CQUFPLENBQUMsNERBQVk7QUFDdEMsYUFBYSxtQkFBTyxDQUFDLG9FQUFtQjs7QUFFeEM7QUFDQTtBQUNBLGlCQUFpQixtQkFBbUI7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7Ozs7Ozs7Ozs7OztBQ2JBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG9HQUFvRyxtQkFBbUIsRUFBRSxtQkFBbUIsOEhBQThIOztBQUUxUTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUM7Ozs7Ozs7Ozs7O0FDWEE7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxjQUFjLG1CQUFPLENBQUMsNERBQWU7O0FBRXJDOztBQUVBLFdBQVcsbUJBQU8sQ0FBQyw0Q0FBSzs7QUFFeEI7O0FBRUEscUJBQXFCLG1CQUFPLENBQUMsK0ZBQXlCOztBQUV0RDs7QUFFQSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsMkNBQTJDLGtCQUFrQixrQ0FBa0MscUVBQXFFLEVBQUUsRUFBRSxPQUFPLGtCQUFrQixFQUFFLFlBQVk7O0FBRS9NO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DLCtCQUErQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7O0FBRWI7O0FBRUEsSUFBSSxJQUFxQztBQUN6Qyw2QkFBNkIsbUJBQU8sQ0FBQyx5RkFBNEI7QUFDakU7QUFDQSxZQUFZLG1CQUFPLENBQUMsdURBQVc7O0FBRS9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxZQUFZO0FBQ2pCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRHQUE0RztBQUM1RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7Ozs7Ozs7Ozs7Ozs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLGNBQWMsbUJBQU8sQ0FBQyxrREFBVTtBQUNoQyxhQUFhLG1CQUFPLENBQUMsNERBQWU7O0FBRXBDLDJCQUEyQixtQkFBTyxDQUFDLHlGQUE0QjtBQUMvRCxVQUFVLG1CQUFPLENBQUMsdURBQVc7QUFDN0IscUJBQXFCLG1CQUFPLENBQUMscUVBQWtCOztBQUUvQzs7QUFFQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQzs7QUFFMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLDZCQUE2QjtBQUM3QixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQkFBK0IsS0FBSztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDRCQUE0QjtBQUM1QixPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsUUFBUSxJQUFxQztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLFVBQVUsS0FBcUM7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixzQkFBc0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxVQUFVLElBQXFDO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLDJCQUEyQjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE1BQU0sS0FBcUMsNEZBQTRGLFNBQU07QUFDN0k7QUFDQTs7QUFFQSxtQkFBbUIsZ0NBQWdDO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUJBQXFCLGdDQUFnQztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7Ozs7O0FDam1CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsSUFBSSxJ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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFD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QUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBaUU7QUFDakU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7O0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRkFBa0Y7QUFDbEY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFD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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHNDQUFzQzs7QUFFdEMsOEJBQThCO0FBQzlCOztBQUVBO0FBQ0E7QUFDQSx1QkFBdUI7O0FBRXZCO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYixXQUFXO0FBQ1g7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLHlFQUF5RTtBQUN6RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7O0FBRXpELG9CQUFvQjtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw4R0FBOEc7O0FBRTlHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHFCQUFxQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxlQUFlLGVBQWU7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQixPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUIsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsUUFBUTtBQUN4QjtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7O0FBR0EsK0VBQStFO0FBQy9FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZHQUE2RztBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJFQUEyRSxvR0FBb0csa0NBQWtDO0FBQ3ROO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUssb0dBQW9HO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFLDhGQUE4RjtBQUM5Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHdCQUF3QjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBLCtFQUErRTtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSwwdkJBQTB2Qjs7QUFFMXZCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEMsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSywrQ0FBK0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOzs7QUFHQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdELDBEQUEwRDs7QUFFMUQsb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQSwwSEFBMEg7QUFDMUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7O0FBRUE7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQThEO0FBQzlELHFEQUFxRDtBQUNyRCwyREFBMkQ7QUFDM0QsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbURBQW1ELHlEQUF5RDtBQUM1Ryw2QkFBNkI7O0FBRTdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUyx5QkFBeUI7OztBQUdsQztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTOzs7QUFHVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1QseUJBQXlCO0FBQ3pCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRDQUE0Qzs7QUFFNUM7O0FBRUE7QUFDQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTOzs7QUFHVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsa0dBQWtHO0FBQ2xHLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNklBQTZJOztBQUU3STtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULGtFQUFrRSw0Q0FBNEM7QUFDOUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtJQUFrSTtBQUNsSTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0lBQWtJO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SkFBOEoseUNBQXlDO0FBQ3ZNO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGtEQUFrRDtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDZCQUE2QjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMLHVFQUF1RTs7QUFFdkUsVUFBVSw2QkFBNkI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGlDQUFpQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTCx1RUFBdUU7O0FBRXZFLFVBQVUsWUFBWTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxNQUFNO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCLG9DQUFvQzs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJDQUEyQztBQUNoRDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQzs7QUFFM0MscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUcsb0NBQW9DOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyx1QkFBdUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLHlLQUF5SywwQ0FBMEM7QUFDbk47QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7OztBQUdUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBDQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0Q0FBNEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0EsR0FBRzs7O0FBR0gsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0wsd0NBQXdDOztBQUV4QztBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlOQUF5TixHQUFHOztBQUU1TjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOzs7QUFHWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsbUhBQW1IO0FBQ25IOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7O0FBR0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLG9DQUFvQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBLHFIQUFxSDs7QUFFckgsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckUsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVzs7QUFFWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGOztBQUV0RjtBQUNBO0FBQ0EsbUJBQW1COzs7QUFHbkI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUEsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEMsS0FBSyxNQUFNLEVBS047QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxSEFBcUg7O0FBRXJIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0Esc0VBQXNFOztBQUV0RTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBLEtBQUssa0NBQWtDO0FBQ3ZDOzs7QUFHQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHlFQUF5RTs7QUFFekU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYix5TkFBeU4scUNBQXFDLHdGQUF3RiwyQkFBMkIscUJBQXFCLFFBQVEsWUFBWTtBQUMxWixhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU8sNElBQTRJO0FBQ25KO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EscURBQXFEOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRywrQkFBK0I7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsK0JBQStCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUEsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87O0FBRVAsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsaUNBQWlDOztBQUVqQyw4QkFBOEI7O0FBRTlCLDBCQUEwQjs7QUFFMUIsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEOztBQUVyRCxrREFBa0Q7O0FBRWxELHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDOztBQUVBLDZDQUE2Qzs7QUFFN0MsNkNBQTZDOztBQUU3QztBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjs7QUFFQSxrREFBa0Q7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUEsK0NBQStDOztBQUUvQyw0R0FBNEc7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkY7O0FBRTNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtRUFBbUU7OztBQUduRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTCw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0VBQXdFOztBQUV4RTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOzs7QUFHNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCxnQ0FBZ0M7O0FBRWhDO0FBQ0EsR0FBRyxnQ0FBZ0M7OztBQUduQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsNENBQTRDO0FBQy9DOzs7QUFHQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssNkJBQTZCOzs7QUFHbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHNCQUFzQjtBQUN0Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDRCQUE0QjtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsMkNBQTJDOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Es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Q0wsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrQ0FBK0M7O0FBRS9DLHVDQUF1QztBQUN2Qzs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7O0FBRXJELHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJFQUEyRTs7QUFFM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5RUFBeUU7QUFDekU7QUFDQTs7QUFFQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0Esa0NBQWtDOztBQUVsQzs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wscUJBQXFCLHdCQUF3QjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0QsT0FBTzs7QUFFdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GOztBQUVuRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaU1BQWlNLGNBQWM7QUFDL007QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssRUFBRTtBQUNQOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsNkVBQTZFOztBQUU3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7OztBQ3JwekJhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1RDtBQUNGO0FBQ1M7QUFDRTtBQUNFO0FBQ0o7QUFDRTtBQUNOO0FBQ0U7QUFDVDtBQUNJO0FBQ0Y7QUFDa0I7QUFDSjtBQUNFO0FBQ1g7QUFDYTtBQUNiO0FBQ2U7QUFDYjtBQUNPO0FBQ0o7QUFDRTtBQUNYO0FBQ0Y7QUFDSDtBQUNVO0FBQ0g7QUFDYztBQUNqQjtBQUNDO0FBQ1A7QUFDVTtBQUNWO0FBQ1M7QUFDVDtBQUNRO0FBQ1Y7QUFDWTtBQUNGO0FBQ0c7QUFDUDtBQUNKO0FBQ2U7QUFDQTtBQUNiO0FBQ2E7QUFDQTtBQUNFO0FBQ047QUFDTTtBQUNBO0FBQ0U7QUFDTjtBQUNUO0FBQ0E7QUFDTTtBQUNSO0FBQ2U7QUFDSTtBQUNaO0FBQ0U7QUFDQTtBQUNUO0FBQ0Y7QUFDTTtBQUNRO0FBQ1Y7QUFD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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7QUFDYixXQUFXLGNBQWM7QUFDekIsV0FBVyxFQUFFO0FBQ2IsV0FBVyxFQUFFO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFD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QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7O0FBRWxCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSx5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QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsRUFBRTtBQUNiOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsVUFBVTtBQUNyQixXQUFXLEVBQUU7QUFDYjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxt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Q0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsaUJBQWlCO0FBQ3pDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7O0FBRUE7QUFDQSxZQUFZO0FBQ1o7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUEsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSw4Q0FBOEMsUUFBUTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBLDhDQUE4QyxRQUFRO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQy90QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUEsMEJBQTBCOztBQUUxQjtBQUNBLHdCQUF3QjtBQUN4QjtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDOztBQUVqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUMxVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FB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QSxZQUFZLEVBQUU7QUFDZCxZQUFZLEVBQUU7QUFDZCxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFbUIiLCJmaWxlIjoidWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hcHAvaW5kZXgudHN4XCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGFuZFZhbGlkYXRvcjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gYW5kVmFsaWRhdG9yKHZhbGlkYXRvcnMpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbmQnO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FuZDogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhbmQ6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGFuZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsO1xuICAgIHZhbGlkYXRvcnMuc29tZShmdW5jdGlvbiAodmFsaWRhdG9yRm4pIHtcbiAgICAgIGZpcnN0RXJyb3IgPSB2YWxpZGF0b3JGbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciA9PSBudWxsID8gbnVsbCA6IGZpcnN0RXJyb3I7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBhbmRJc1JlcXVpcmVkKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICB2YWxpZGF0b3JzLnNvbWUoZnVuY3Rpb24gKHZhbGlkYXRvckZuKSB7XG4gICAgICBmaXJzdEVycm9yID0gdmFsaWRhdG9yRm4uaXNSZXF1aXJlZC5hcHBseSh2YWxpZGF0b3JGbiwgYXJncyk7XG4gICAgICByZXR1cm4gZmlyc3RFcnJvciAhPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiBmaXJzdEVycm9yID09IG51bGwgPyBudWxsIDogZmlyc3RFcnJvcjtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBuYW1lLCB2YWxpZGF0b3JzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYmV0d2VlblZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuZW50cmllc1wiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF92YWx1ZXNPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsdWVzT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBudW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG5vbi1OYU4gbnVtYmVyLlwiKSk7XG59XG5cbmZ1bmN0aW9uIG51bWJlck9yUHJvcHNGdW5jKHByb3BzLCBwcm9wTmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiOiBhIGZ1bmN0aW9uLCBvciBhIG5vbi1OYU4gbnVtYmVyIGlzIHJlcXVpcmVkXCIpKTtcbn1cblxuZnVuY3Rpb24gbG93ZXJDb21wYXJlKHZhbHVlLCBfcmVmKSB7XG4gIHZhciBndCA9IF9yZWYuZ3QsXG4gICAgICBndGUgPSBfcmVmLmd0ZTtcblxuICBpZiAodHlwZW9mIGd0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZSA+IGd0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBndGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IGd0ZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cHBlckNvbXBhcmUodmFsdWUsIF9yZWYyKSB7XG4gIHZhciBsdCA9IF9yZWYyLmx0LFxuICAgICAgbHRlID0gX3JlZjIubHRlO1xuXG4gIGlmICh0eXBlb2YgbHQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlIDwgbHQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGx0ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWUgPD0gbHRlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdyZWF0ZXJUaGFuRXJyb3IoX3JlZjMpIHtcbiAgdmFyIGd0ID0gX3JlZjMuZ3QsXG4gICAgICBndGUgPSBfcmVmMy5ndGU7XG5cbiAgaWYgKHR5cGVvZiBndCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gXCJncmVhdGVyIHRoYW4gXCIuY29uY2F0KGd0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ3RlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIi5jb25jYXQoZ3RlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbGVzc1RoYW5FcnJvcihfcmVmNCkge1xuICB2YXIgbHQgPSBfcmVmNC5sdCxcbiAgICAgIGx0ZSA9IF9yZWY0Lmx0ZTtcblxuICBpZiAodHlwZW9mIGx0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImxlc3MgdGhhbiBcIi5jb25jYXQobHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBsdGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFwibGVzcyB0aGFuIG9yIGVxdWFsIHRvIFwiLmNvbmNhdChsdGUpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpIHtcbiAgdmFyIGVycm9ycyA9IFtncmVhdGVyVGhhbkVycm9yKG9wdHMpLCBsZXNzVGhhbkVycm9yKG9wdHMpXS5maWx0ZXIoQm9vbGVhbikuam9pbignIGFuZCAnKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIFwiKS5jb25jYXQoZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gcHJvcHNUaHVua2lmeShvcHRzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjZbMF0sXG4gICAgICAgIHZhbHVlID0gX3JlZjZbMV07XG5cbiAgICB2YXIgbnVtYmVyVGh1bmsgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gOiB2YWx1ZTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIG51bWJlclRodW5rKSk7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHNUaHVua3MpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjhbMF0sXG4gICAgICAgIHRodW5rID0gX3JlZjhbMV07XG5cbiAgICB2YXIgdmFsdWUgPSB0aHVuayhwcm9wcyk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCB2YWx1ZSkpO1xuICB9LCB7fSk7XG59XG5cbnZhciBhcmdWYWxpZGF0b3JzID0gWygwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3Q6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jLFxuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHRlOiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHQ6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWRdO1xuXG5mdW5jdGlvbiBhcmdWYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gIHJldHVybiBhcmdWYWxpZGF0b3JzLmV2ZXJ5KGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gISF2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKTtcbiAgfSk7XG59XG5cbnZhciB0aHVua1ZhbHVlVmFsaWRhdG9yID0gKDAsIF92YWx1ZXNPZltcImRlZmF1bHRcIl0pKG51bWJlcikuaXNSZXF1aXJlZDtcblxuZnVuY3Rpb24gYmV0d2VlblZhbGlkYXRvcihvcHRpb25zKSB7XG4gIHZhciBhcmdFcnJvciA9IGFyZ1ZhbGlkYXRvcih7XG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9LCAnb3B0aW9ucycpO1xuXG4gIGlmIChhcmdFcnJvcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2JldHdlZW46IG9ubHkgb25lIG9mIHRoZSBwYWlycyBvZiBgbHRgL2BsdGVgLCBhbmQgYGd0YC9gZ3RlYCwgbWF5IGJlIHN1cHBsaWVkLCBhbmQgYXQgbGVhc3Qgb25lIHBhaXIgbXVzdCBiZSBwcm92aWRlZC4nKTtcbiAgfVxuXG4gIHZhciBvcHRzVGh1bmtzID0gcHJvcHNUaHVua2lmeShvcHRpb25zKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gYmV0d2Vlbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG51bWJlciwgZ290IFxcXCJcIikuY29uY2F0KF90eXBlb2YocHJvcFZhbHVlKSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IGludm9rZVdpdGhQcm9wcyhvcHRzVGh1bmtzLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgdGh1bmtWYWx1ZXNFcnJvciA9IHRodW5rVmFsdWVWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZSwgb3B0cyksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHRodW5rVmFsdWVzRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aHVua1ZhbHVlc0Vycm9yO1xuICAgIH1cblxuICAgIGlmICghbG93ZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykgfHwgIXVwcGVyQ29tcGFyZShwcm9wVmFsdWUsIG9wdHMpKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKGNvbXBvbmVudE5hbWUsIHByb3BOYW1lLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBiZXR3ZWVuUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIGEgbnVtYmVyLCBnb3QgXFxcIlwiKS5jb25jYXQoX3R5cGVvZihwcm9wVmFsdWUpLCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBvcHRzID0gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciB0aHVua1ZhbHVlc0Vycm9yID0gdGh1bmtWYWx1ZVZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCBvcHRzKSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAodGh1bmtWYWx1ZXNFcnJvcikge1xuICAgICAgcmV0dXJuIHRodW5rVmFsdWVzRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFsb3dlckNvbXBhcmUocHJvcFZhbHVlLCBvcHRzKSB8fCAhdXBwZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnYmV0d2VlbicsIG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmV0d2Vlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYm9vbGVhblNvbWVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGJvb2xlYW5Tb21lVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbm90QWxsUHJvcHNGYWxzZSA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBub3RBbGxQcm9wc0ZhbHNlW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2F0IGxlYXN0IG9uZSBwcm9wIChvbmUgb2Ygd2hpY2ggbXVzdCBiZSBgdHJ1ZWApIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIW5vdEFsbFByb3BzRmFsc2UuZXZlcnkoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FsbCBib29sZWFuU29tZSBwcm9wcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgfVxuXG4gIHZhciBwcm9wc0xpc3QgPSBub3RBbGxQcm9wc0ZhbHNlLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudEZhbHNlID0gZnVuY3Rpb24gY291bnRGYWxzZShjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID09PSBmYWxzZSA/IDEgOiAwKTtcbiAgICB9O1xuXG4gICAgdmFyIGZhbHNlUHJvcENvdW50ID0gbm90QWxsUHJvcHNGYWxzZS5yZWR1Y2UoY291bnRGYWxzZSwgMCk7XG5cbiAgICBpZiAoZmFsc2VQcm9wQ291bnQgPT09IG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiQSBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBib29sZWFuIHByb3BzIGJlIGB0cnVlYDogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50RmFsc2UgPSBmdW5jdGlvbiBjb3VudEZhbHNlKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPT09IGZhbHNlID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZmFsc2VQcm9wQ291bnQgPSBub3RBbGxQcm9wc0ZhbHNlLnJlZHVjZShjb3VudEZhbHNlLCAwKTtcblxuICAgIGlmIChmYWxzZVByb3BDb3VudCA9PT0gbm90QWxsUHJvcHNGYWxzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgYHRydWVgOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJib29sZWFuU29tZTogXCIuY29uY2F0KHByb3BzTGlzdCksIG5vdEFsbFByb3BzRmFsc2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbGVhblNvbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4ocHJvcCkge1xuICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnICYmIF90eXBlb2YocHJvcCkgIT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwcm9wOiBtdXN0IGJlIHN0cmluZyBvciBzeW1ib2wnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW5XaXRoUHJvcChfcmVmLCBfLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgICB2YXIgdHJ1dGh5Q2hpbGRyZW5Db3VudCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgdmFyIGdyYW5kY2hpbGRyZW5Db3VudCA9IDA7XG5cbiAgICBfcmVhY3RbXCJkZWZhdWx0XCJdLkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRydXRoeUNoaWxkcmVuQ291bnQgKz0gMTtcblxuICAgICAgaWYgKGNoaWxkLnByb3BzW3Byb3BdKSB7XG4gICAgICAgIHByb3BDb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZC5wcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgICAgZ3JhbmRjaGlsZHJlbkNvdW50ICs9IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcENvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50ICYmIGdyYW5kY2hpbGRyZW5Db3VudCA9PT0gMCB8fCBwcm9wQ291bnQgPT09IDAgJiYgZ3JhbmRjaGlsZHJlbkNvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50IHx8IHByb3BDb3VudCA9PT0gMCAmJiBncmFuZGNoaWxkcmVuQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgY2hpbGRyZW4gdG8gYWxsIGhhdmUgcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wLCBcIlxcdTIwMUQsIGFsbCBoYXZlIGNoaWxkcmVuLCBvciBhbGwgaGF2ZSBuZWl0aGVyLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwiY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuV2l0aFByb3A6XCIuY29uY2F0KHByb3ApLCBwcm9wKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY2hpbGRyZW5PZjtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRyZW4ocHJvcFR5cGUsIGNoaWxkcmVuLCBwcm9wcykge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgZXJyb3I7XG4gIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgZXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZFxuICAgIH0pLCAnY2hpbGRyZW4nXS5jb25jYXQocmVzdCkpO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSk7XG4gIHJldHVybiBlcnJvciB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mKHByb3BUeXBlKSB7XG4gIGZ1bmN0aW9uIGNoaWxkcmVuT2ZQcm9wVHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcE5hbWUgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGlzIHVzaW5nIHRoZSBjaGlsZHJlbk9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaGlsZHJlbi5hcHBseSh2b2lkIDAsIFtwcm9wVHlwZSwgY2hpbGRyZW4sIHByb3BzLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgY2hpbGRyZW5PZlByb3BUeXBlLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5PZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbm9kZSBvZiB0eXBlIFwiKS5jb25jYXQocHJvcFR5cGUudHlwZU5hbWUgfHwgcHJvcFR5cGUubmFtZSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUNoaWxkcmVuLmFwcGx5KHZvaWQgMCwgW3Byb3BUeXBlLCBjaGlsZHJlbiwgcHJvcHMsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKGNoaWxkcmVuT2ZQcm9wVHlwZSwgJ2NoaWxkcmVuT2YnLCBwcm9wVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlbk9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb25seVR5cGVzKHR5cGVzLCBjaGlsZHJlbiwgY29tcG9uZW50TmFtZSkge1xuICBpZiAoIWNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZCAmJiAoMCwgX2FycmF5UHJvdG90eXBlW1wiZGVmYXVsdFwiXSkodHlwZXMsIGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgICByZXR1cm4gVHlwZSA9PT0gJyonIHx8IGNoaWxkLnR5cGUgPT09IFR5cGU7XG4gICAgfSk7XG4gIH0pKSB7XG4gICAgdmFyIHR5cGVOYW1lcyA9IHR5cGVzLm1hcChfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pLmpvaW4oJywgb3IgJyk7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCBvbmx5IGFjY2VwdHMgY2hpbGRyZW4gb2YgdHlwZSBcIikuY29uY2F0KHR5cGVOYW1lcykpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZWQodHlwZXMsIGNoaWxkcmVuLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB2YXIgdHlwZU5hbWVzID0gdHlwZXMubWFwKF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkuam9pbignLCBvciAnKTtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBub2RlIG9mIHR5cGUgXCIpLmNvbmNhdCh0eXBlTmFtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mVHlwZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHR5cGVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHR5cGVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjaGlsZHJlbk9mVHlwZTogYXQgbGVhc3QgMSB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgcmV0dXJuIG9ubHlUeXBlcyh0eXBlcywgKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pLCBjb21wb25lbnROYW1lKTtcbiAgfVxuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcHNbcHJvcE5hbWVdKTtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpIHx8IG9ubHlUeXBlcyh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdjaGlsZHJlbk9mVHlwZScsIHR5cGVzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gY2hpbGRyZW5PZlR5cGU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hpbGRyZW5PZlR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcjtcblxudmFyIF9zZXF1ZW5jZU9mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zZXF1ZW5jZU9mXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3BlY2lmaWVyc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzZXEgPSBfc2VxdWVuY2VPZltcImRlZmF1bHRcIl0uYXBwbHkodm9pZCAwLCBzcGVjaWZpZXJzKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIGNoaWxkcmVuU2VxdWVuY2VPZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxLmFwcGx5KHZvaWQgMCwgW19vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5TZXF1ZW5jZU9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiByZW5kZXJhYmxlIGNoaWxkcmVuIGFyZSByZXF1aXJlZC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuaXNSZXF1aXJlZC5hcHBseShzZXEsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnY2hpbGRyZW5TZXF1ZW5jZU9mJywgc3BlY2lmaWVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlblNlcXVlbmNlT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNvbXBvbmVudFdpdGhOYW1lO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX2lzUmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJpcy1yZWdleFwiKSk7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaXBIT0NzKGZ1bGxOYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXApIHtcbiAgdmFyIGlubmVyTmFtZSA9IGZ1bGxOYW1lO1xuXG4gIHdoaWxlICgvXFwoW14oKV0qXFwpL2cudGVzdChpbm5lck5hbWUpKSB7XG4gICAgdmFyIEhPQyA9IGlubmVyTmFtZTtcbiAgICB2YXIgcHJldmlvdXNIT0MgPSB2b2lkIDA7XG5cbiAgICBkbyB7XG4gICAgICBwcmV2aW91c0hPQyA9IEhPQztcbiAgICAgIEhPQyA9IHByZXZpb3VzSE9DLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJyk7XG4gICAgfSB3aGlsZSAocHJldmlvdXNIT0MgIT09IEhPQyk7XG5cbiAgICBpZiAobmFtZXNPZkhPQ3NUb1N0cmlwLmluZGV4T2YoSE9DKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbm5lck5hbWU7XG4gICAgfVxuXG4gICAgaW5uZXJOYW1lID0gaW5uZXJOYW1lLnJlcGxhY2UoUmVnRXhwKFwiXlwiLmNvbmNhdChIT0MsIFwiXFxcXCh8XFxcXCkkXCIpLCAnZycpLCAnJyk7XG4gIH1cblxuICByZXR1cm4gaW5uZXJOYW1lO1xufVxuXG5mdW5jdGlvbiBoYXNOYW1lKG5hbWUsIG5hbWVzT2ZIT0NzVG9TdHJpcCwgcHJvcFZhbHVlLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXlQcm90b3R5cGVbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIGl0ZW0sIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLCBCb29sZWFuKSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKCEgLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIG5vdCBhIHZhbGlkIFJlYWN0IGVsZW1lbnRcIikpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBwcm9wVmFsdWUudHlwZTtcbiAgdmFyIGNvbXBvbmVudE5hbWVGcm9tVHlwZSA9ICgwLCBfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pKHR5cGUpO1xuICB2YXIgaW5uZXJDb21wb25lbnROYW1lID0gbmFtZXNPZkhPQ3NUb1N0cmlwLmxlbmd0aCA+IDAgPyBzdHJpcEhPQ3MoY29tcG9uZW50TmFtZUZyb21UeXBlLCBuYW1lc09mSE9Dc1RvU3RyaXApIDogY29tcG9uZW50TmFtZUZyb21UeXBlO1xuXG4gIGlmICgoMCwgX2lzUmVnZXhbXCJkZWZhdWx0XCJdKShuYW1lKSAmJiAhbmFtZS50ZXN0KGlubmVyQ29tcG9uZW50TmFtZSkpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9ubHkgYWNjZXB0cyBjb21wb25lbnRzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gXCIpLmNvbmNhdChuYW1lKSk7XG4gIH1cblxuICBpZiAoISgwLCBfaXNSZWdleFtcImRlZmF1bHRcIl0pKG5hbWUpICYmIGlubmVyQ29tcG9uZW50TmFtZSAhPT0gbmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi5cIikuY29uY2F0KHByb3BOYW1lLCBcImAgb25seSBhY2NlcHRzIGNvbXBvbmVudHMgbmFtZWQgXCIpLmNvbmNhdChuYW1lLCBcIiwgZ290IFwiKS5jb25jYXQoaW5uZXJDb21wb25lbnROYW1lKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWUobmFtZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyAmJiAhKDAsIF9pc1JlZ2V4W1wiZGVmYXVsdFwiXSkobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCcpO1xuICB9XG5cbiAgdmFyIHBhc3NlZE9wdGlvbnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcblxuICBpZiAocGFzc2VkT3B0aW9ucy5sZW5ndGggPiAxIHx8IHBhc3NlZE9wdGlvbnMubGVuZ3RoID09PSAxICYmIHBhc3NlZE9wdGlvbnNbMF0gIT09ICdzdHJpcEhPQ3MnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBvbmx5IG9wdGlvbnMgc3VwcG9ydGVkIGFyZTogXFx1MjAxQ3N0cmlwSE9Dc1xcdTIwMUQsIGdvdDogXFx1MjAxQ1wiLmNvbmNhdChwYXNzZWRPcHRpb25zLmpvaW4oJ+KAnSwg4oCcJyksIFwiXFx1MjAxRFwiKSk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkc3RyaXBIT0NzID0gb3B0aW9ucy5zdHJpcEhPQ3MsXG4gICAgICBuYW1lc09mSE9Dc1RvU3RyaXAgPSBfb3B0aW9ucyRzdHJpcEhPQ3MgPT09IHZvaWQgMCA/IFtdIDogX29wdGlvbnMkc3RyaXBIT0NzO1xuICB2YXIgYWxsSE9DTmFtZXNBcmVWYWxpZCA9IG5hbWVzT2ZIT0NzVG9TdHJpcC5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ3N0cmluZycgfHwgL1soKV0vZy50ZXN0KHgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIC9eKD86W2Etel1bYS16QS1aMC05XSt8W0EtWl1bYS16XVthLXpBLVowLTldKykkLy50ZXN0KHgpO1xuICB9KTtcblxuICBpZiAoIWFsbEhPQ05hbWVzQXJlVmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdldmVyeSBwcm92aWRlZCBIT0MgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIHdpdGggbm8gcGFyZW5zLCBhbmQgaW4gY2FtZWxDYXNlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb21wb25lbnQgbmFtZWQgXCIpLmNvbmNhdChuYW1lKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMyA/IF9sZW4zIC0gMyA6IDApLCBfa2V5MyA9IDM7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc05hbWUuYXBwbHkodm9pZCAwLCBbbmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwLCBwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvciwgXCJjb21wb25lbnRXaXRoTmFtZTpcIi5jb25jYXQobmFtZSksIG5hbWUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9uZW50V2l0aE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRpc2FsbG93ZWRJZjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gZGlzYWxsb3dlZElmKHByb3BUeXBlLCBvdGhlclByb3BOYW1lLCBvdGhlclByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHByb3BUeXBlLmlzUmVxdWlyZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIHZhbGlkYXRvciBpcyByZXF1aXJlZDsgcHJvcFR5cGUgdmFsaWRhdG9ycyBtdXN0IGFsc28gcHJvdmlkZSBgLmlzUmVxdWlyZWRgJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG90aGVyUHJvcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3RoZXIgcHJvcCBuYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3RoZXJQcm9wVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ290aGVyIHByb3AgdHlwZSB2YWxpZGF0b3IgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FsbG93ZWRJZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHNbb3RoZXJQcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG90aGVyRXJyb3IgPSBvdGhlclByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBvdGhlclByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKG90aGVyRXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRXJyb3IoXCJwcm9wIFxcdTIwMUNcIi5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBpcyBkaXNhbGxvd2VkIHdoZW4gXFx1MjAxQ1wiKS5jb25jYXQob3RoZXJQcm9wTmFtZSwgXCJcXHUyMDFEIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHZhbGlkYXRvclwiKSk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gZGlzYWxsb3dlZElmUHJvcFR5cGUocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzYWxsb3dlZElmUmVxdWlyZWQuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZGlzYWxsb3dlZElmUmVxdWlyZWQ7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdkaXNhbGxvd2VkSWYnLCB7XG4gICAgcHJvcFR5cGU6IHByb3BUeXBlLFxuICAgIG90aGVyUHJvcE5hbWU6IG90aGVyUHJvcE5hbWUsXG4gICAgb3RoZXJQcm9wVHlwZTogb3RoZXJQcm9wVHlwZVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FsbG93ZWRJZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZWxlbWVudFR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcmVhY3RJcyA9IHJlcXVpcmUoXCJyZWFjdC1pc1wiKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBnZXRUeXBlTmFtZShUeXBlKSB7XG4gIGlmICh0eXBlb2YgVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVHlwZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gKDAsIF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkoVHlwZSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIC8vIGluIGVudmlyb25tZW50cyB3aGVyZSBmdW5jdGlvbnMgZG8gbm90IGhhdmUgbmFtZXNcblxuICByZXR1cm4gdHlwZSB8fCAnQW5vbnltb3VzIENvbXBvbmVudCc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudFR5cGUoVHlwZSwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB0eXBlID0gcHJvcHNbcHJvcE5hbWVdLnR5cGU7XG5cbiAgaWYgKHR5cGUgPT09IFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIG11c3QgYmUgYSBSZWFjdCBlbGVtZW50IG9mIHR5cGUgXCIpLmNvbmNhdChnZXRUeXBlTmFtZShUeXBlKSkpO1xufVxuXG5mdW5jdGlvbiBlbGVtZW50VHlwZVZhbGlkYXRvcihUeXBlKSB7XG4gIGlmIChUeXBlID09PSAnKicpIHtcbiAgICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoX3Byb3BUeXBlcy5lbGVtZW50LCAnZWxlbWVudFR5cGUoKiknLCBUeXBlKTtcbiAgfVxuXG4gIGlmICghKDAsIF9yZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZSkoVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVHlwZSBtdXN0IGJlIGEgUmVhY3QgQ29tcG9uZW50LCBhbiBIVE1MIGVsZW1lbnQgdGFnIG5hbWUsIG9yIFxcXCIqXFxcIi4gR290IGFuIFwiLmNvbmNhdChfdHlwZW9mKFR5cGUpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbGVtZW50VHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUVsZW1lbnRUeXBlLmFwcGx5KHZvaWQgMCwgW1R5cGUsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIGVsZW1lbnRUeXBlLmlzUmVxdWlyZWQgPSBlbGVtZW50VHlwZTsgLy8gY292ZXJlZCBieSBhbmQgKyBlbGVtZW50XG5cbiAgdmFyIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWUoVHlwZSk7XG4gIHZhciB2YWxpZGF0b3JOYW1lID0gXCJlbGVtZW50VHlwZShcIi5jb25jYXQodHlwZU5hbWUsIFwiKVwiKTtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKCgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19wcm9wVHlwZXMuZWxlbWVudCwgZWxlbWVudFR5cGVdLCB2YWxpZGF0b3JOYW1lKSwgdmFsaWRhdG9yTmFtZSwgVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50VHlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfZXhwbGljaXROdWxsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9leHBsaWNpdE51bGxcIikpO1xuXG52YXIgX3dpdGhTaGFwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd2l0aFNoYXBlXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGFycmF5T2ZWYWxpZGF0b3I7XG52YXIgdmFsaWRhdG9yID0gKDAsIF9vcltcImRlZmF1bHRcIl0pKFtfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSwgLy8gbnVsbC91bmRlZmluZWRcbigwLCBfcHJvcFR5cGVzLm9uZU9mKShbZmFsc2UsICcnLCBOYU5dKSwgKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKShfcHJvcFR5cGVzLmFycmF5LCB7XG4gIGxlbmd0aDogKDAsIF9wcm9wVHlwZXMub25lT2YpKFswXSkuaXNSZXF1aXJlZFxufSkuaXNSZXF1aXJlZCwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG59XSk7XG5hcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2VtcHR5Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW1wdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBleHBsaWNpdE51bGwocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFx1MjAxQ1wiKS5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBtdXN0IGJlIG51bGwgb3IgdW5kZWZpbmVkOyByZWNlaXZlZCBcIikuY29uY2F0KF90eXBlb2YocHJvcHNbcHJvcE5hbWVdKSkpO1xufVxuXG5leHBsaWNpdE51bGwuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGV4cGxpY2l0TnVsbFJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXHUyMDFEIG11c3QgYmUgbnVsbDsgcmVjZWl2ZWQgXCIpLmNvbmNhdChfdHlwZW9mKHByb3BzW3Byb3BOYW1lXSkpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoZXhwbGljaXROdWxsLCAnZXhwbGljaXROdWxsJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwbGljaXROdWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBnZXRDb21wb25lbnROYW1lO1xuXG52YXIgX2Z1bmN0aW9uUHJvdG90eXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZnVuY3Rpb24ucHJvdG90eXBlLm5hbWVcIikpO1xuXG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8ICgwLCBfZnVuY3Rpb25Qcm90b3R5cGVbXCJkZWZhdWx0XCJdKShDb21wb25lbnQpO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc0ZvcndhcmRSZWYpKHtcbiAgICB0eXBlOiBDb21wb25lbnQsXG4gICAgJCR0eXBlb2Y6IF9yZWFjdElzLkVsZW1lbnRcbiAgfSkpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc01lbW8pKENvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQudHlwZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldENvbXBvbmVudE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZmluaXRlID0gaXNGaW5pdGU7XG5cbnZhciBfZGVmYXVsdCA9IE51bWJlci5pc0ludGVnZXIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiAoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmIGZpbml0ZSh4KSAmJiBmbG9vcih4KSA9PT0geDtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVnZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlcy1leGFjdC9idWlsZC9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0gX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUGxhaW5PYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGlzUHJpbWl0aXZlO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHgpIHtcbiAgcmV0dXJuICF4IHx8IF90eXBlb2YoeCkgIT09ICdvYmplY3QnICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNQcmltaXRpdmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHJlbmRlcmFibGVDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmFibGVDaGlsZHJlbihjaGlsZHJlblByb3ApIHtcbiAgcmV0dXJuIF9yZWFjdFtcImRlZmF1bHRcIl0uQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlblByb3ApLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQgPT09IDAgfHwgY2hpbGQ7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyYWJsZUNoaWxkcmVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB0eXBlT2Y7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIHR5cGVPZihjaGlsZCkge1xuICBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cblxuICBpZiAoX3R5cGVvZihjaGlsZCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoY2hpbGQpO1xuICB9XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICByZXR1cm4gY2hpbGQudHlwZTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gd3JhcFZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuYXNzaWduXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdyYXBWYWxpZGF0b3IodmFsaWRhdG9yLCB0eXBlTmFtZSkge1xuICB2YXIgdHlwZUNoZWNrZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKHZhbGlkYXRvci5iaW5kKCksIHtcbiAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgdHlwZUNoZWNrZXI6IHR5cGVDaGVja2VyLFxuICAgIGlzUmVxdWlyZWQ6ICgwLCBfb2JqZWN0W1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLmlzUmVxdWlyZWQuYmluZCgpLCB7XG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgICB0eXBlQ2hlY2tlcjogdHlwZUNoZWNrZXIsXG4gICAgICB0eXBlUmVxdWlyZWQ6IHRydWVcbiAgICB9KVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBWYWxpZGF0b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfcHJvcFR5cGVzRXhhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzLWV4YWN0XCIpKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfYmV0d2VlbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYmV0d2VlblwiKSk7XG5cbnZhciBfYm9vbGVhblNvbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Jvb2xlYW5Tb21lXCIpKTtcblxudmFyIF9jaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlblwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2hpbGRyZW5PZlwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZlR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuT2ZUeXBlXCIpKTtcblxudmFyIF9jaGlsZHJlblNlcXVlbmNlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuU2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfY29tcG9uZW50V2l0aE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudFdpdGhOYW1lXCIpKTtcblxudmFyIF9kaXNhbGxvd2VkSWYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Rpc2FsbG93ZWRJZlwiKSk7XG5cbnZhciBfZWxlbWVudFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2VsZW1lbnRUeXBlXCIpKTtcblxudmFyIF9lbXB0eSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZW1wdHlcIikpO1xuXG52YXIgX2V4cGxpY2l0TnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXhwbGljaXROdWxsXCIpKTtcblxudmFyIF9pbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9pbnRlZ2VyXCIpKTtcblxudmFyIF9rZXlzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2tleXNPZlwiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1wiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzXCIpKTtcblxudmFyIF9uQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25DaGlsZHJlblwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVJbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZUludGVnZXJcIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlTnVtYmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZU51bWJlclwiKSk7XG5cbnZhciBfbnVtZXJpY1N0cmluZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbnVtZXJpY1N0cmluZ1wiKSk7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vYmplY3RcIikpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfcHJlZGljYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wcmVkaWNhdGVcIikpO1xuXG52YXIgX3JhbmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yYW5nZVwiKSk7XG5cbnZhciBfcmVmID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWZcIikpO1xuXG52YXIgX3JlcXVpcmVkQnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlcXVpcmVkQnlcIikpO1xuXG52YXIgX3Jlc3RyaWN0ZWRQcm9wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXN0cmljdGVkUHJvcFwiKSk7XG5cbnZhciBfc2VxdWVuY2VPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF9zdHJpbmdFbmRzV2l0aCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5nRW5kc1dpdGhcIikpO1xuXG52YXIgX3N0cmluZ1N0YXJ0c1dpdGggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ1N0YXJ0c1dpdGhcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbnZhciBfdW5pcXVlQXJyYXlPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdW5pcXVlQXJyYXlPZlwiKSk7XG5cbnZhciBfdmFsdWVzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbHVlc09mXCIpKTtcblxudmFyIF93aXRoU2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3dpdGhTaGFwZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYW5kOiBfYW5kW1wiZGVmYXVsdFwiXSxcbiAgYmV0d2VlbjogX2JldHdlZW5bXCJkZWZhdWx0XCJdLFxuICBib29sZWFuU29tZTogX2Jvb2xlYW5Tb21lW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuOiBfY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5PZjogX2NoaWxkcmVuT2ZbXCJkZWZhdWx0XCJdLFxuICBjaGlsZHJlbk9mVHlwZTogX2NoaWxkcmVuT2ZUeXBlW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5TZXF1ZW5jZU9mOiBfY2hpbGRyZW5TZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgY29tcG9uZW50V2l0aE5hbWU6IF9jb21wb25lbnRXaXRoTmFtZVtcImRlZmF1bHRcIl0sXG4gIGRpc2FsbG93ZWRJZjogX2Rpc2FsbG93ZWRJZltcImRlZmF1bHRcIl0sXG4gIGVsZW1lbnRUeXBlOiBfZWxlbWVudFR5cGVbXCJkZWZhdWx0XCJdLFxuICBlbXB0eTogX2VtcHR5W1wiZGVmYXVsdFwiXSxcbiAgZXhwbGljaXROdWxsOiBfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSxcbiAgZm9yYmlkRXh0cmFQcm9wczogX3Byb3BUeXBlc0V4YWN0W1wiZGVmYXVsdFwiXSxcbiAgaW50ZWdlcjogX2ludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBrZXlzT2Y6IF9rZXlzT2ZbXCJkZWZhdWx0XCJdLFxuICBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1tcImRlZmF1bHRcIl0sXG4gIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHNbXCJkZWZhdWx0XCJdLFxuICBuQ2hpbGRyZW46IF9uQ2hpbGRyZW5bXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZUludGVnZXI6IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZU51bWJlcjogX25vbk5lZ2F0aXZlTnVtYmVyW1wiZGVmYXVsdFwiXSxcbiAgbnVtZXJpY1N0cmluZzogX251bWVyaWNTdHJpbmdbXCJkZWZhdWx0XCJdLFxuICBvYmplY3Q6IF9vYmplY3RbXCJkZWZhdWx0XCJdLFxuICBvcjogX29yW1wiZGVmYXVsdFwiXSxcbiAgcHJlZGljYXRlOiBfcHJlZGljYXRlW1wiZGVmYXVsdFwiXSxcbiAgcmFuZ2U6IF9yYW5nZVtcImRlZmF1bHRcIl0sXG4gIHJlZjogX3JlZltcImRlZmF1bHRcIl0sXG4gIHJlcXVpcmVkQnk6IF9yZXF1aXJlZEJ5W1wiZGVmYXVsdFwiXSxcbiAgcmVzdHJpY3RlZFByb3A6IF9yZXN0cmljdGVkUHJvcFtcImRlZmF1bHRcIl0sXG4gIHNlcXVlbmNlT2Y6IF9zZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgc2hhcGU6IF9zaGFwZVtcImRlZmF1bHRcIl0sXG4gIHN0cmluZ0VuZHNXaXRoOiBfc3RyaW5nRW5kc1dpdGhbXCJkZWZhdWx0XCJdLFxuICBzdHJpbmdTdGFydHNXaXRoOiBfc3RyaW5nU3RhcnRzV2l0aFtcImRlZmF1bHRcIl0sXG4gIHVuaXF1ZUFycmF5OiBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdLFxuICB1bmlxdWVBcnJheU9mOiBfdW5pcXVlQXJyYXlPZltcImRlZmF1bHRcIl0sXG4gIHZhbHVlc09mOiBfdmFsdWVzT2ZbXCJkZWZhdWx0XCJdLFxuICB3aXRoU2hhcGU6IF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc0ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNJbnRlZ2VyXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcmVxdWlyZWRJbnRlZ2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAhKDAsIF9pc0ludGVnZXJbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYW4gaW50ZWdlclwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGludGVnZXIocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRJbnRlZ2VyLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gcmVxdWlyZWRJbnRlZ2VyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2ludGVnZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBrZXlzT2ZWYWxpZGF0b3I7XG5cbnZhciBfaXNQcmltaXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQcmltaXRpdmVcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBrZXlzT2ZWYWxpZGF0b3IocHJvcFR5cGUpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXlzT2YnO1xuXG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCB0byBrZXlzT2YgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24ga2V5c09mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiA1ID8gX2xlbiAtIDUgOiAwKSwgX2tleSA9IDU7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwgfHwgKDAsIF9pc1ByaW1pdGl2ZVtcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgZmlyc3RFcnJvciA9IHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW19kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBrZXkpLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBcIihcIi5jb25jYXQocHJvcEZ1bGxOYW1lLCBcIikuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciB8fCBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24ga2V5ZWRCeVJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyByZXF1aXJlZCwgYnV0IHZhbHVlIGlzIFwiKS5jb25jYXQocHJvcFZhbHVlKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgbmFtZSwgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5c09mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZU9mVHlwZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlT2ZUeXBlKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZXhjbHVzaXZlUHJvcHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChleGNsdXNpdmVQcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXQgbGVhc3Qgb25lIHByb3AgdGhhdCBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGlzIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgcHJvcExpc3QgPSBleGNsdXNpdmVQcm9wcy5qb2luKCcsIG9yICcpO1xuICB2YXIgbWFwID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3ApIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCB0cnVlKSk7XG4gIH0sIHt9KTtcblxuICB2YXIgY291bnRQcm9wcyA9IGZ1bmN0aW9uIGNvdW50UHJvcHMoY291bnQsIHByb3ApIHtcbiAgICByZXR1cm4gY291bnQgKyAobWFwW3Byb3BdID8gMSA6IDApO1xuICB9O1xuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcCA9PT0gcHJvcE5hbWUgfHwgcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibXV0dWFsbHlFeGNsdXNpdmVQcm9wczpcIi5jb25jYXQocHJvcExpc3QpLCBleGNsdXNpdmVQcm9wcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXR1YWxseUV4Y2x1c2l2ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZVRydWU7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4Y2x1c2l2ZVByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGV4Y2x1c2l2ZVByb3BzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhdCBsZWFzdCBvbmUgcHJvcCB0aGF0IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFleGNsdXNpdmVQcm9wcy5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZyc7XG4gIH0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWxsIGV4Y2x1c2l2ZSB0cnVlIHByb3BzIG11c3QgYmUgc3RyaW5ncycpO1xuICB9XG5cbiAgdmFyIHByb3BzTGlzdCA9IGV4Y2x1c2l2ZVByb3BzLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudFByb3BzID0gZnVuY3Rpb24gY291bnRQcm9wcyhjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgdHJ1ZTogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50UHJvcHMgPSBmdW5jdGlvbiBjb3VudFByb3BzKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPyAxIDogMCk7XG4gICAgfTtcblxuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBleGNsdXNpdmVQcm9wcy5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgYm9vbGVhbiBwcm9wcyBiZSB0cnVlOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wczogXCIuY29uY2F0KHByb3BzTGlzdCksIGV4Y2x1c2l2ZVByb3BzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBuQ2hpbGRyZW47XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG5DaGlsZHJlbihuKSB7XG4gIHZhciBwcm9wVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogX3Byb3BUeXBlcy5ub2RlO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgaXNOYU4obikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1uZWdhdGl2ZSBudW1iZXIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBuQ2hpbGRyZW5WYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgbkNoaWxkcmVuIHZhbGlkYXRvciBvbiBhIG5vbi1jaGlsZHJlbiBwcm9wXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgIHZhciBjaGlsZHJlbkNvdW50ID0gX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XG5cbiAgICBpZiAoY2hpbGRyZW5Db3VudCAhPT0gbikge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGV4cGVjdHMgdG8gcmVjZWl2ZSBcIikuY29uY2F0KG4sIFwiIGNoaWxkcmVuLCBidXQgcmVjZWl2ZWQgXCIpLmNvbmNhdChjaGlsZHJlbkNvdW50LCBcIiBjaGlsZHJlbi5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibkNoaWxkcmVuOlwiLmNvbmNhdChuKSwgbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uQ2hpbGRyZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfaW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaW50ZWdlclwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVOdW1iZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25vbk5lZ2F0aXZlTnVtYmVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoWygwLCBfaW50ZWdlcltcImRlZmF1bHRcIl0pKCksICgwLCBfbm9uTmVnYXRpdmVOdW1iZXJbXCJkZWZhdWx0XCJdKSgpXSwgJ25vbk5lZ2F0aXZlSW50ZWdlcicpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9uTmVnYXRpdmVJbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0SXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QtaXNcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBpc05vbk5lZ2F0aXZlKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh4KSAmJiB4ID49IDAgJiYgISgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKSh4LCAtMCk7XG59XG5cbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlTnVtYmVyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVkTm9uTmVnYXRpdmVOdW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbm5vbk5lZ2F0aXZlTnVtYmVyLmlzUmVxdWlyZWQgPSByZXF1aXJlZE5vbk5lZ2F0aXZlTnVtYmVyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKG5vbk5lZ2F0aXZlTnVtYmVyLCAnbm9uTmVnYXRpdmVOdW1iZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub25OZWdhdGl2ZU51bWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgdmFsaWROdW1lcmljQ2hhcnMgPSAvXlstK10/KD86WzEtOV1bMC05XSooPzpcXC5bMC05XSspP3wwfDBcXC5bMC05XSspJC87XG5cbnZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBudW1lcmljU3RyaW5nKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gIH1cblxuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciBwYXNzZXNSZWdleCA9IHZhbGlkTnVtZXJpY0NoYXJzLnRlc3QodmFsdWUpO1xuXG4gIGlmIChwYXNzZXNSZWdleCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIiAodmFsdWUgXFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIikgbXVzdCBiZSBhIG51bWVyaWMgc3RyaW5nOlxcbiAgICAtIHN0YXJ0aW5nIHdpdGggYW4gb3B0aW9uYWwgKyBvciAtXFxuICAgIC0gdGhhdCBkb2VzIG5vdCBoYXZlIGEgbGVhZGluZyB6ZXJvXFxuICAgIC0gd2l0aCBhbiBvcHRpb25hbCBkZWNpbWFsIHBhcnQgKHRoYXQgY29udGFpbnMgb25seSBvbmUgZGVjaW1hbCBwb2ludCwgaWYgcHJlc2VudClcXG4gICAgLSB0aGF0IG90aGVyd2lzZSBvbmx5IGNvbnRhaW5zIGRpZ2l0cyAoMC05KVxcbiAgICAtIG5vdCArLU5hTiwgb3IgKy1JbmZpbml0eVxcbiAgXCIpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbnVtZXJpY1N0cmluZ1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgaXMgcmVxdWlyZWRcIikpO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG59O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ251bWVyaWNTdHJpbmcnKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1lcmljU3RyaW5nLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF90eXBlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvdHlwZU9mXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLypcbiAgY29kZSBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wyMDItTDIwNlxuICBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgb3V0c2lkZSBvZiBSZWFjdCdzIG5vcm1hbCBQcm9wVHlwZSBmbG93XG4qL1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICBwcm9wOiAncHJvcCcsXG4gIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbn07XG5cbmZ1bmN0aW9uIG9iamVjdChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICgoMCwgX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dIHx8IGxvY2F0aW9uO1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIkludmFsaWQgXCIuY29uY2F0KGxvY2F0aW9uTmFtZSwgXCIgYFwiKS5jb25jYXQocHJvcEZ1bGxOYW1lLCBcImAgb2YgdHlwZSBgXCIpLmNvbmNhdCgoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSksIFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAsIGV4cGVjdGVkIGBvYmplY3RgLlwiKSk7XG59XG5cbm9iamVjdC5pc1JlcXVpcmVkID0gZnVuY3Rpb24gb2JqZWN0UmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSB8fCBsb2NhdGlvbjtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQobG9jYXRpb25OYW1lLCBcIiBgXCIpLmNvbmNhdChwcm9wRnVsbE5hbWUsIFwiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHByb3BWYWx1ZSwgXCJgLlwiKSk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gb2JqZWN0LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkob2JqZWN0LCAnb2JqZWN0Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBvcjtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykge1xuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gb25lT2ZUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBlcnJvcnMgPSB2YWxpZGF0b3JzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIHN1cHBsaWVkIHRvIFwiKS5jb25jYXQocHJvcE5hbWUsIFwiLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBvbmVPZlR5cGVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogbWlzc2luZyB2YWx1ZSBmb3IgcmVxdWlyZWQgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIuXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3JzID0gdmFsaWRhdG9ycy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIFwiKS5jb25jYXQoZXJyb3JzLCBcIiBzdXBwbGllZCB0byByZXF1aXJlZCBcIikuY29uY2F0KHByb3BOYW1lLCBcIi5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdvbmVPZlR5cGUnLCB2YWxpZGF0b3JzKTtcbn1cblxuZnVuY3Rpb24gb3IodmFsaWRhdG9ycykge1xuICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ29yJztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gb25lT2ZUeXBlVmFsaWRhdG9yKFsoMCwgX3Byb3BUeXBlcy5hcnJheU9mKShvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHZhbGlkYXRvcnMpKSk7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIG5hbWUsIHZhbGlkYXRvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHByZWRpY2F0ZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcHJlZGljYXRlKGZuKSB7XG4gIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGZuYCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWVzc2FnZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXF1aXJlZFZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZm4ocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgdGhhdCBgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHBhc3MgYSBwcmVkaWNhdGUgZnVuY3Rpb25cIikuY29uY2F0KG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJycsIFwiLlwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWlyZWRWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSByZXF1aXJlZFZhbGlkYXRvcjtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ByZWRpY2F0ZScsIGZuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWRpY2F0ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcmFuZ2U7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX2ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2ludGVnZXJcIikpO1xuXG52YXIgX2lzSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc0ludGVnZXJcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuZnVuY3Rpb24gaXNWYWxpZExlbmd0aCh4KSB7XG4gIHJldHVybiAoMCwgX2lzSW50ZWdlcltcImRlZmF1bHRcIl0pKHgpICYmIE1hdGguYWJzKHgpIDwgTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZnVuY3Rpb24gcmFuZ2UobWluLCBtYXgpIHtcbiAgaWYgKCFpc1ZhbGlkTGVuZ3RoKG1pbikgfHwgIWlzVmFsaWRMZW5ndGgobWF4KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiXFxcInJhbmdlXFxcIiByZXF1aXJlcyB0d28gaW50ZWdlcnM6IFwiLmNvbmNhdChtaW4sIFwiIGFuZCBcIikuY29uY2F0KG1heCwgXCIgZ2l2ZW5cIikpO1xuICB9XG5cbiAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBhbmQgbWF4IG11c3Qgbm90IGJlIHRoZSBzYW1lJyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbKDAsIF9pbnRlZ2VyW1wiZGVmYXVsdFwiXSkoKSwgKDAsIF9iZXR3ZWVuW1wiZGVmYXVsdFwiXSkoe1xuICAgIGd0ZTogbWluLFxuICAgIGx0OiBtYXhcbiAgfSldLCAncmFuZ2UnKSwgJ3JhbmdlJywge1xuICAgIG1pbjogbWluLFxuICAgIG1heDogbWF4XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFuZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgaXNQcm90b3R5cGVPZiA9IE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZjtcblxuZnVuY3Rpb24gaXNOZXdSZWYocHJvcCkge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHByb3ApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG93blByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wKTtcbiAgcmV0dXJuIG93blByb3BlcnRpZXMubGVuZ3RoID09PSAxICYmIG93blByb3BlcnRpZXNbMF0gPT09ICdjdXJyZW50Jztcbn1cblxuZnVuY3Rpb24gaXNDYWxsYmFja1JlZihwcm9wKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGVPZi5jYWxsKF9yZWFjdC5Db21wb25lbnQsIHByb3ApICYmICghX3JlYWN0LlB1cmVDb21wb25lbnQgfHwgIWlzUHJvdG90eXBlT2YuY2FsbChfcmVhY3QuUHVyZUNvbXBvbmVudCwgcHJvcCkpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZFJlZihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNDYWxsYmFja1JlZihwcm9wVmFsdWUpIHx8IGlzTmV3UmVmKHByb3BWYWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYSByZWZcIikpO1xufVxuXG5mdW5jdGlvbiByZWYocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRSZWYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xufVxuXG5yZWYuaXNSZXF1aXJlZCA9IHJlcXVpcmVkUmVmO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlZiwgJ3JlZicpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZ2V0UmVxdWlyZWRCeTtcblxudmFyIF9vYmplY3RJcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm9iamVjdC1pc1wiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkQnkocmVxdWlyZWRCeVByb3BOYW1lLCBwcm9wVHlwZSkge1xuICB2YXIgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGZ1bmN0aW9uIHJlcXVpcmVkQnkocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BzW3JlcXVpcmVkQnlQcm9wTmFtZV0pIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICAgIGlmICgoMCwgX29iamVjdElzW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUpIHx8IHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB3aGVuIFwiKS5jb25jYXQocmVxdWlyZWRCeVByb3BOYW1lLCBcIiBpcyB0cnVlLCBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIHJlcXVpcmVkQnkuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkQnlSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlcXVpcmVkQnksIFwicmVxdWlyZWRCeSBcXHUyMDFDXCIuY29uY2F0KHJlcXVpcmVkQnlQcm9wTmFtZSwgXCJcXHUyMDFEXCIpLCBbcmVxdWlyZWRCeVByb3BOYW1lLCBkZWZhdWx0VmFsdWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmVkQnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gY3VzdG9tTWVzc2FnZVdyYXBwZXIobWVzc3NhZ2VGdW5jdGlvbikge1xuICBmdW5jdGlvbiByZXN0cmljdGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWVzc3NhZ2VGdW5jdGlvbiAmJiB0eXBlb2YgbWVzc3NhZ2VGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IobWVzc3NhZ2VGdW5jdGlvbi5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQocHJvcE5hbWUsIFwiIFwiKS5jb25jYXQobG9jYXRpb24sIFwiIG9uIFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgbm90IGFsbG93ZWQuXCIpKTtcbiAgfVxuXG4gIHJlc3RyaWN0ZWRQcm9wLmlzUmVxdWlyZWQgPSByZXN0cmljdGVkUHJvcDtcbiAgcmV0dXJuIHJlc3RyaWN0ZWRQcm9wO1xufVxuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgdmFyIG1lc3NzYWdlRnVuY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjdXN0b21NZXNzYWdlV3JhcHBlcihtZXNzc2FnZUZ1bmN0aW9uKSwgJ3Jlc3RyaWN0ZWRQcm9wJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdHJpY3RlZFByb3AuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHNlcXVlbmNlT2ZWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9uTmVnYXRpdmVJbnRlZ2VyXCIpKTtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL29iamVjdFwiKSk7XG5cbnZhciBfd2l0aFNoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi93aXRoU2hhcGVcIikpO1xuXG52YXIgX3R5cGVPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy90eXBlT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIG1pblZhbGlkYXRvciA9IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdO1xudmFyIG1heFZhbGlkYXRvciA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLCAoMCwgX2JldHdlZW5bXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogMVxufSldKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVSYW5nZShtaW4sIG1heCkge1xuICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1pbiAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gbm8gYWRkaXRpb25hbCBjaGVja2luZyBuZWVkZWQgdW5sZXNzIGJvdGggYXJlIHByZXNlbnRcbiAgfVxuXG4gIGlmIChtaW4gPD0gbWF4KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXgnKTtcbn1cblxudmFyIHNwZWNpZmllclNoYXBlID0ge1xuICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdcInZhbGlkYXRvclwiIG11c3QgYmUgYSBwcm9wVHlwZSB2YWxpZGF0b3IgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgbWluOiBmdW5jdGlvbiBtaW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIG1pblZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHx8IHZhbGlkYXRlUmFuZ2UocHJvcHMubWluLCBwcm9wcy5tYXgpO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gbWF4VmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSkgfHwgdmFsaWRhdGVSYW5nZShwcm9wcy5taW4sIHByb3BzLm1heCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldE1pbk1heChfcmVmKSB7XG4gIHZhciBtaW4gPSBfcmVmLm1pbixcbiAgICAgIG1heCA9IF9yZWYubWF4O1xuICB2YXIgbWluaW11bTtcbiAgdmFyIG1heGltdW07XG5cbiAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInICYmIHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgLy8gbmVpdGhlciBwcm92aWRlZCwgZGVmYXVsdCB0byBcIjFcIlxuICAgIG1pbmltdW0gPSAxO1xuICAgIG1heGltdW0gPSAxO1xuICB9IGVsc2Uge1xuICAgIG1pbmltdW0gPSB0eXBlb2YgbWluID09PSAnbnVtYmVyJyA/IG1pbiA6IDE7XG4gICAgbWF4aW11bSA9IHR5cGVvZiBtYXggPT09ICdudW1iZXInID8gbWF4IDogSW5maW5pdHk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1pbmltdW06IG1pbmltdW0sXG4gICAgbWF4aW11bTogbWF4aW11bVxuICB9O1xufVxuXG5mdW5jdGlvbiBjaHVua0J5VHlwZShpdGVtcykge1xuICB2YXIgY2h1bmsgPSBbXTtcbiAgdmFyIGxhc3RUeXBlO1xuICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChjaHVua3MsIGl0ZW0pIHtcbiAgICB2YXIgaXRlbVR5cGUgPSAoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKGl0ZW0pO1xuXG4gICAgaWYgKCFsYXN0VHlwZSB8fCBpdGVtVHlwZSA9PT0gbGFzdFR5cGUpIHtcbiAgICAgIGNodW5rLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIGNodW5rID0gW2l0ZW1dO1xuICAgIH1cblxuICAgIGxhc3RUeXBlID0gaXRlbVR5cGU7XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfSwgW10pLmNvbmNhdChjaHVuay5sZW5ndGggPiAwID8gW2NodW5rXSA6IFtdKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaHVua3Moc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBpdGVtcyA9IHByb3BzW3Byb3BOYW1lXTtcbiAgdmFyIGNodW5rcyA9IGNodW5rQnlUeXBlKGl0ZW1zKTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNpZmllcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgX3NwZWNpZmllcnMkaSA9IHNwZWNpZmllcnNbaV0sXG4gICAgICAgIHZhbGlkYXRvciA9IF9zcGVjaWZpZXJzJGkudmFsaWRhdG9yLFxuICAgICAgICBtaW4gPSBfc3BlY2lmaWVycyRpLm1pbixcbiAgICAgICAgbWF4ID0gX3NwZWNpZmllcnMkaS5tYXg7XG5cbiAgICB2YXIgX2dldE1pbk1heCA9IGdldE1pbk1heCh7XG4gICAgICBtaW46IG1pbixcbiAgICAgIG1heDogbWF4XG4gICAgfSksXG4gICAgICAgIG1pbmltdW0gPSBfZ2V0TWluTWF4Lm1pbmltdW0sXG4gICAgICAgIG1heGltdW0gPSBfZ2V0TWluTWF4Lm1heGltdW07XG5cbiAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCAmJiBtaW5pbXVtID09PSAwKSB7XG4gICAgICAvLyBubyBjaHVua3MgbGVmdCwgYnV0IHRoaXMgc3BlY2lmaWVyIGRvZXMgbm90IHJlcXVpcmUgYW55IGl0ZW1zXG4gICAgICBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250aW51ZVxuICAgIH1cblxuICAgIHZhciBhcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuICAgIHZhciBjaHVuayA9IGNodW5rcy5zaGlmdCgpOyAvLyBleHRyYWN0IHRoZSBuZXh0IGNodW5rIHRvIHRlc3RcblxuICAgIHZhciBjaHVua0Vycm9yID0gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcE5hbWUsIGNodW5rKSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGNodW5rRXJyb3IpIHtcbiAgICAgIC8vIHRoaXMgY2h1bmsgaXMgaW52YWxpZFxuICAgICAgaWYgKG1pbmltdW0gPT09IDApIHtcbiAgICAgICAgLy8gYnV0LCBzcGVjaWZpZXIgaGFzIGEgbWluIG9mIDAgYW5kIGNhbiBiZSBza2lwcGVkXG4gICAgICAgIGNodW5rcy51bnNoaWZ0KGNodW5rKTsgLy8gcHV0IHRoZSBjaHVuayBiYWNrLCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uXG5cbiAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNodW5rRXJyb3I7XG4gICAgfSAvLyBjaHVuayBpcyB2YWxpZCFcblxuXG4gICAgaWYgKGNodW5rLmxlbmd0aCA8IG1pbmltdW0pIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogc3BlY2lmaWVyIGluZGV4IFwiKS5jb25jYXQoaSwgXCIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIFwiKS5jb25jYXQobWluLCBcIiBpdGVtcywgYnV0IG9ubHkgaGFzIFwiKS5jb25jYXQoY2h1bmsubGVuZ3RoLCBcIi5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaHVuay5sZW5ndGggPiBtYXhpbXVtKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHNwZWNpZmllciBpbmRleCBcIikuY29uY2F0KGksIFwiIHJlcXVpcmVzIGEgbWF4aW11bSBvZiBcIikuY29uY2F0KG1heCwgXCIgaXRlbXMsIGJ1dCBoYXMgXCIpLmNvbmNhdChjaHVuay5sZW5ndGgsIFwiLlwiKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IGFmdGVyIGFsbCBcIikuY29uY2F0KHNwZWNpZmllcnMubGVuZ3RoLCBcIiBzcGVjaWZpZXJzIG1hdGNoZWQsIFwiKS5jb25jYXQoY2h1bmtzLmxlbmd0aCwgXCIgdHlwZXMgb2YgaXRlbXMgd2VyZSByZW1haW5pbmcuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgc3BlY2lmaWVyVmFsaWRhdG9yID0gKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKSgoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKCksIHNwZWNpZmllclNoYXBlKS5pc1JlcXVpcmVkO1xuXG5mdW5jdGlvbiBzZXF1ZW5jZU9mVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzcGVjaWZpZXJzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBpZiAoc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2VxdWVuY2VPZjogYXQgbGVhc3Qgb25lIHNwZWNpZmllciBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIGVycm9ycyA9IHNwZWNpZmllcnMubWFwKGZ1bmN0aW9uIChzcGVjaWZpZXIsIGkpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyVmFsaWRhdG9yKHtcbiAgICAgIHNwZWNpZmllcjogc3BlY2lmaWVyXG4gICAgfSwgJ3NwZWNpZmllcicsICdzZXF1ZW5jZU9mIHNwZWNpZmllcicsIFwic3VlcXVlbmNlT2Ygc3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSksIFwic3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSkpO1xuICB9KTtcblxuICBpZiAoZXJyb3JzLnNvbWUoQm9vbGVhbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXFxuICAgICAgc2VxdWVuY2VPZjogYWxsIHNwZWNpZmllcnMgbXVzdCBtYXRjaCB0aGUgYXBwcm9wcmlhdGUgc2hhcGUuXFxuXFxuICAgICAgRXJyb3JzOlxcbiAgICAgICAgXCIuY29uY2F0KGVycm9ycy5tYXAoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgIHJldHVybiBcIiAtIEFyZ3VtZW50IGluZGV4IFwiLmNvbmNhdChpLCBcIjogXCIpLmNvbmNhdChlLm1lc3NhZ2UpO1xuICAgIH0pLmpvaW4oJyxcXG4gICAgICAgICcpLCBcIlxcbiAgICBcIikpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHNlcXVlbmNlT2YocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gX3Byb3BUeXBlcy5hcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaHVua3MuYXBwbHkodm9pZCAwLCBbc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gc2VxdWVuY2VPZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNCA+IDMgPyBfbGVuNCAtIDMgOiAwKSwgX2tleTQgPSAzOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICByZXN0W19rZXk0IC0gM10gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IF9wcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmFycmF5LCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ2h1bmtzLmFwcGx5KHZvaWQgMCwgW3NwZWNpZmllcnMsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnc2VxdWVuY2VPZicsIHNwZWNpZmllcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gc2hhcGVWYWxpZGF0b3I7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc2hhcGVWYWxpZGF0b3Ioc2hhcGVUeXBlcykge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHNoYXBlVHlwZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2hhcGUgbXVzdCBiZSBhIG5vcm1hbCBvYmplY3QnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoYXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGNvZGUgYWRhcHRlZCBmcm9tIFByb3BUeXBlcy5zaGFwZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wzODFcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG5cbiAgICAgIGlmIChjaGVja2VyKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIuYXBwbHkodm9pZCAwLCBbcHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2hhcGUuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHNoYXBlUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoc2hhcGUsICdzaGFwZScsIHNoYXBlVHlwZXMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHN0cmluZ0VuZHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdFbmRzV2l0aFZhbGlkYXRvcihlbmQpIHtcbiAgaWYgKHR5cGVvZiBlbmQgIT09ICdzdHJpbmcnIHx8IGVuZC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBzdHJpbmdFbmRzV2l0aChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nRXJyb3IgPSBfcHJvcFR5cGVzLnN0cmluZy5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BWYWx1ZS5lbmRzV2l0aChlbmQpIHx8IHByb3BWYWx1ZS5sZW5ndGggPD0gZW5kLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGRvZXMgbm90IGVuZCB3aXRoIFxcXCJcIikuY29uY2F0KGVuZCwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nRW5kc1dpdGgoKSB7XG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLnN0cmluZywgYXJndW1lbnRzKTtcblxuICAgIGlmIChzdHJpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmluZ0Vycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwic3RyaW5nRW5kc1dpdGg6IFwiLmNvbmNhdChlbmQpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZ0VuZHNXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yKHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdzdHJpbmcnIHx8IHN0YXJ0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Egbm9uLWVtcHR5IHN0cmluZyBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHN0cmluZ1N0YXJ0c1dpdGgocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wVmFsdWUuc3RhcnRzV2l0aChzdGFydCkgfHwgcHJvcFZhbHVlLmxlbmd0aCA8PSBzdGFydC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBkb2VzIG5vdCBzdGFydCB3aXRoIFxcXCJcIikuY29uY2F0KHN0YXJ0LCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmdTdGFydHNXaXRoKCkge1xuICAgIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5zdHJpbmcsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcInN0cmluZ1N0YXJ0c1dpdGg6IFwiLmNvbmNhdChzdGFydCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nU3RhcnRzV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB1bmlxdWVDb3VudFdpdGhTZXQoYXJyKSB7XG4gIHJldHVybiBuZXcgU2V0KGFycikuc2l6ZTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuZnVuY3Rpb24gdW5pcXVlQ291bnRMZWdhY3koYXJyKSB7XG4gIHZhciBzZWVuID0gW107XG4gIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKHNlZW4uaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIHNlZW4ucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2Vlbi5sZW5ndGg7XG59XG5cbnZhciBnZXRVbmlxdWVDb3VudCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgPyB1bmlxdWVDb3VudFdpdGhTZXQgOlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnVuaXF1ZUNvdW50TGVnYWN5O1xuXG5mdW5jdGlvbiByZXF1aXJlZFVuaXF1ZUFycmF5KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gX3Byb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLmFwcGx5KF9wcm9wVHlwZXMuYXJyYXksIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciB1bmlxdWVDb3VudCA9IGdldFVuaXF1ZUNvdW50KHByb3BWYWx1ZSk7XG5cbiAgaWYgKHVuaXF1ZUNvdW50ICE9PSBwcm9wVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUuIFwiKS5jb25jYXQocHJvcFZhbHVlLmxlbmd0aCAtIHVuaXF1ZUNvdW50LCBcIiBkdXBsaWNhdGUgdmFsdWVzIGZvdW5kLlwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHJlc3RbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRVbmlxdWVBcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG59XG5cbnVuaXF1ZUFycmF5LmlzUmVxdWlyZWQgPSByZXF1aXJlZFVuaXF1ZUFycmF5O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHVuaXF1ZUFycmF5LCAndW5pcXVlQXJyYXknKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdW5pcXVlQXJyYXlPZlR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIHVuaXF1ZSA9ICgwLCBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheU9mVHlwZVZhbGlkYXRvcih0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkYXRvciBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIG1hcHBlciA9IG51bGw7XG4gIHZhciBuYW1lID0gJ3VuaXF1ZUFycmF5T2ZUeXBlJztcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIHJlc3RbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1hcHBlciA9IHJlc3RbMF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdFswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSByZXN0WzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaW5nbGUgaW5wdXQgbXVzdCBlaXRoZXIgYmUgc3RyaW5nIG9yIGZ1bmN0aW9uJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiByZXN0WzBdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiByZXN0WzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbWFwcGVyID0gcmVzdFswXTtcbiAgICAgIG5hbWUgPSByZXN0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdWx0aXBsZSBpbnB1dHMgbXVzdCBiZSBpbiBbZnVuY3Rpb24sIHN0cmluZ10gb3JkZXInKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb25seSBbXSwgW25hbWVdLCBbbWFwcGVyXSwgYW5kIFttYXBwZXIsIG5hbWVdIGFyZSB2YWxpZCBpbnB1dHMnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaXF1ZUFycmF5T2ZNYXBwZWQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IHByb3BWYWx1ZS5tYXAobWFwcGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWUuYXBwbHkodm9pZCAwLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCB2YWx1ZXMpKSwgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH1cblxuICB1bmlxdWVBcnJheU9mTWFwcGVkLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBfcHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5hcnJheSwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlQXJyYXlPZk1hcHBlZC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGFycmF5VmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodHlwZSk7XG4gIHZhciB1bmlxdWVWYWxpZGF0b3IgPSBtYXBwZXIgPyB1bmlxdWVBcnJheU9mTWFwcGVkIDogdW5pcXVlO1xuICB2YXIgdmFsaWRhdG9yID0gKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbYXJyYXlWYWxpZGF0b3IsIHVuaXF1ZVZhbGlkYXRvcl0sIG5hbWUpO1xuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW3VuaXF1ZVZhbGlkYXRvci5pc1JlcXVpcmVkLCBhcnJheVZhbGlkYXRvci5pc1JlcXVpcmVkXSwgXCJcIi5jb25jYXQobmFtZSwgXCIuaXNSZXF1aXJlZFwiKSk7XG4gIHJldHVybiB2YWxpZGF0b3I7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheU9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2YWx1ZXNPZlZhbGlkYXRvcjtcblxudmFyIF9pc1ByaW1pdGl2ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1ByaW1pdGl2ZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIGNvZGUgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzE0MTU2ZTU2YjljZjE4YWM4Njk2MzE4NWM1YWY0YWJkZGYzZmY4MTEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy90eXBlcy9SZWFjdFByb3BUeXBlcy5qcyNMMzA3LUwzNDBcbmZ1bmN0aW9uIHZhbHVlc09mVmFsaWRhdG9yKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmplY3RPZjogcHJvcFR5cGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gdmFsdWVzT2YocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAoMCwgX2lzUHJpbWl0aXZlW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3I7XG4gICAgT2JqZWN0LmtleXMocHJvcFZhbHVlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZpcnN0RXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIFwiXCIuY29uY2F0KHByb3BGdWxsTmFtZSwgXCIuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0RXJyb3IgfHwgbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHZhbHVlc09mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ZhbHVlc09mJywgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsdWVzT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHdpdGhTaGFwZTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdpdGhTaGFwZSh0eXBlLCBzaGFwZVR5cGVzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlJyk7XG4gIH1cblxuICB2YXIgc2hhcGVWYWxpZGF0b3IgPSAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoc2hhcGVUeXBlcyk7XG4gIHJldHVybiAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFt0eXBlLCBzaGFwZVZhbGlkYXRvcl0sICd3aXRoU2hhcGUnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhTaGFwZS5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyByZXF1aXJlKCcuL2J1aWxkL21vY2tzJykgOiByZXF1aXJlKCcuL2J1aWxkJyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSkge1xuXHR2YXIgbGlzdCA9IFRvT2JqZWN0KHRoaXMpO1xuXHR2YXIgbGVuZ3RoID0gVG9MZW5ndGgobGlzdC5sZW5ndGgpO1xuXHRpZiAoIUlzQ2FsbGFibGUocHJlZGljYXRlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5I2ZpbmQ6IHByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAobGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHZvaWQgMDtcblx0fVxuXHR2YXIgdGhpc0FyZztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0dGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAwLCB2YWx1ZTsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0dmFsdWUgPSBsaXN0W2ldO1xuXHRcdC8vIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlOiBpZiAoQ2FsbChwcmVkaWNhdGUsIHRoaXNBcmcsIFt2YWx1ZSwgaSwgbGlzdF0pKSB7XG5cdFx0aWYgKHByZWRpY2F0ZS5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGksIGxpc3RdKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdm9pZCAwO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyICRzbGljZSA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnNsaWNlJyk7XG5cbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cbnZhciBib3VuZEZpbmRTaGltID0gZnVuY3Rpb24gZmluZChhcnJheSwgcHJlZGljYXRlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZShhcnJheSk7XG5cdHZhciBhcmdzID0gJHNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShhcnJheSwgYXJncyk7XG59O1xuXG5kZWZpbmUoYm91bmRGaW5kU2hpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRGaW5kU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0Ly8gRGV0ZWN0IGlmIGFuIGltcGxlbWVudGF0aW9uIGV4aXN0c1xuXHQvLyBEZXRlY3QgZWFybHkgaW1wbGVtZW50YXRpb25zIHdoaWNoIHNraXBwZWQgaG9sZXMgaW4gc3BhcnNlIGFycmF5c1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc3BhcnNlLWFycmF5c1xuXHR2YXIgaW1wbGVtZW50ZWQgPSBBcnJheS5wcm90b3R5cGUuZmluZCAmJiBbLCAxXS5maW5kKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkgIT09IDE7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG5cdHJldHVybiBpbXBsZW1lbnRlZCA/IEFycmF5LnByb3RvdHlwZS5maW5kIDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFycmF5UHJvdG90eXBlRmluZCgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblxuXHRkZWZpbmUoQXJyYXkucHJvdG90eXBlLCB7IGZpbmQ6IHBvbHlmaWxsIH0sIHtcblx0XHRmaW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCcuLycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIiwiLyoqXG4gKiBjaHJvbWEuanMgLSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGNvbG9yIGNvbnZlcnNpb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTksIEdyZWdvciBBaXNjaFxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gVGhlIG5hbWUgR3JlZ29yIEFpc2NoIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdSRUdPUiBBSVNDSCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIGNocm9tYS5qcyBpbmNsdWRlcyBjb2xvcnMgZnJvbSBjb2xvcmJyZXdlcjIub3JnLCB3aGljaCBhcmUgcmVsZWFzZWQgdW5kZXJcbiAqIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsXG4gKiBhbmQgVGhlIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogTmFtZWQgY29sb3JzIGFyZSB0YWtlbiBmcm9tIFgxMSBDb2xvciBOYW1lcy5cbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICpcbiAqIEBwcmVzZXJ2ZVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLmNocm9tYSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgbGltaXQkMiA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoIG1pbiA9PT0gdm9pZCAwICkgbWluPTA7XG4gICAgICAgIGlmICggbWF4ID09PSB2b2lkIDAgKSBtYXg9MTtcblxuICAgICAgICByZXR1cm4geCA8IG1pbiA/IG1pbiA6IHggPiBtYXggPyBtYXggOiB4O1xuICAgIH07XG5cbiAgICB2YXIgbGltaXQkMSA9IGxpbWl0JDI7XG5cbiAgICB2YXIgY2xpcF9yZ2IkMyA9IGZ1bmN0aW9uIChyZ2IpIHtcbiAgICAgICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgICAgIHJnYi5fdW5jbGlwcGVkID0gcmdiLnNsaWNlKDApO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8PTM7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCAzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSB7IHJnYi5fY2xpcHBlZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICByZ2JbaV0gPSBsaW1pdCQxKHJnYltpXSwgMCwgMjU1KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0JDEocmdiW2ldLCAwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH07XG5cbiAgICAvLyBwb3J0ZWQgZnJvbSBqUXVlcnkncyAkLnR5cGVcbiAgICB2YXIgY2xhc3NUb1R5cGUgPSB7fTtcbiAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBbJ0Jvb2xlYW4nLCAnTnVtYmVyJywgJ1N0cmluZycsICdGdW5jdGlvbicsICdBcnJheScsICdEYXRlJywgJ1JlZ0V4cCcsICdVbmRlZmluZWQnLCAnTnVsbCddOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICB2YXIgbmFtZSA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICAgIGNsYXNzVG9UeXBlWyhcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgdmFyIHR5cGUkcCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8IFwib2JqZWN0XCI7XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG8gPSB0eXBlJHA7XG5cbiAgICB2YXIgdW5wYWNrJEIgPSBmdW5jdGlvbiAoYXJncywga2V5T3JkZXIpIHtcbiAgICAgICAgaWYgKCBrZXlPcmRlciA9PT0gdm9pZCAwICkga2V5T3JkZXI9bnVsbDtcblxuICAgIFx0Ly8gaWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMgYXJndW1lbnRzLCB3ZSByZXR1cm4gdGhlIGFyZ3VtZW50c1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMykgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7IH1cbiAgICAgICAgLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAgICAgLy8gYW5kIHVzZSB0aGUga2V5T3JkZXIgc3RyaW5nIHRvIGV4dHJhY3QgYW5kIHNvcnQgcHJvcGVydGllc1xuICAgIFx0aWYgKHR5cGUkbyhhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgIFx0XHRyZXR1cm4ga2V5T3JkZXIuc3BsaXQoJycpXG4gICAgXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoaykgeyByZXR1cm4gYXJnc1swXVtrXSAhPT0gdW5kZWZpbmVkOyB9KVxuICAgIFx0XHRcdC5tYXAoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGFyZ3NbMF1ba107IH0pO1xuICAgIFx0fVxuICAgIFx0Ly8gb3RoZXJ3aXNlIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgIFx0Ly8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG4gPSB0eXBlJHA7XG5cbiAgICB2YXIgbGFzdCQ0ID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICB2YXIgbCA9IGFyZ3MubGVuZ3RoLTE7XG4gICAgICAgIGlmICh0eXBlJG4oYXJnc1tsXSkgPT0gJ3N0cmluZycpIHsgcmV0dXJuIGFyZ3NbbF0udG9Mb3dlckNhc2UoKTsgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIFBJJDIgPSBNYXRoLlBJO1xuXG4gICAgdmFyIHV0aWxzID0ge1xuICAgIFx0Y2xpcF9yZ2I6IGNsaXBfcmdiJDMsXG4gICAgXHRsaW1pdDogbGltaXQkMixcbiAgICBcdHR5cGU6IHR5cGUkcCxcbiAgICBcdHVucGFjazogdW5wYWNrJEIsXG4gICAgXHRsYXN0OiBsYXN0JDQsXG4gICAgXHRQSTogUEkkMixcbiAgICBcdFRXT1BJOiBQSSQyKjIsXG4gICAgXHRQSVRISVJEOiBQSSQyLzMsXG4gICAgXHRERUcyUkFEOiBQSSQyIC8gMTgwLFxuICAgIFx0UkFEMkRFRzogMTgwIC8gUEkkMlxuICAgIH07XG5cbiAgICB2YXIgaW5wdXQkaCA9IHtcbiAgICBcdGZvcm1hdDoge30sXG4gICAgXHRhdXRvZGV0ZWN0OiBbXVxuICAgIH07XG5cbiAgICB2YXIgbGFzdCQzID0gdXRpbHMubGFzdDtcbiAgICB2YXIgY2xpcF9yZ2IkMiA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciB0eXBlJG0gPSB1dGlscy50eXBlO1xuICAgIHZhciBfaW5wdXQgPSBpbnB1dCRoO1xuXG4gICAgdmFyIENvbG9yJEQgPSBmdW5jdGlvbiBDb2xvcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZSRtKGFyZ3NbMF0pID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBDb2xvciBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQzKGFyZ3MpO1xuICAgICAgICB2YXIgYXV0b2RldGVjdCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgICAgYXV0b2RldGVjdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIV9pbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBfaW5wdXQuYXV0b2RldGVjdCA9IF9pbnB1dC5hdXRvZGV0ZWN0LnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYi5wIC0gYS5wOyB9KTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBfaW5wdXQuYXV0b2RldGVjdDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hrID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgIG1vZGUgPSBjaGsudGVzdC5hcHBseShjaGssIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IF9pbnB1dC5mb3JtYXRbbW9kZV0uYXBwbHkobnVsbCwgYXV0b2RldGVjdCA/IGFyZ3MgOiBhcmdzLnNsaWNlKDAsLTEpKTtcbiAgICAgICAgICAgIG1lLl9yZ2IgPSBjbGlwX3JnYiQyKHJnYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0OiAnK2FyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGFscGhhIGNoYW5uZWxcbiAgICAgICAgaWYgKG1lLl9yZ2IubGVuZ3RoID09PSAzKSB7IG1lLl9yZ2IucHVzaCgxKTsgfVxuICAgIH07XG5cbiAgICBDb2xvciRELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICAgICAgaWYgKHR5cGUkbSh0aGlzLmhleCkgPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gdGhpcy5oZXgoKTsgfVxuICAgICAgICByZXR1cm4gKFwiW1wiICsgKHRoaXMuX3JnYi5qb2luKCcsJykpICsgXCJdXCIpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3JfMSA9IENvbG9yJEQ7XG5cbiAgICB2YXIgY2hyb21hJGsgPSBmdW5jdGlvbiAoKSB7XG4gICAgXHR2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIFx0d2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIFx0cmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIGNocm9tYSRrLkNvbG9yLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MpICkpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkay5Db2xvciA9IENvbG9yXzE7XG4gICAgY2hyb21hJGsudmVyc2lvbiA9ICcyLjQuMic7XG5cbiAgICB2YXIgY2hyb21hXzEgPSBjaHJvbWEkaztcblxuICAgIHZhciB1bnBhY2skQSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbWF4JDIgPSBNYXRoLm1heDtcblxuICAgIHZhciByZ2IyY215ayQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skQShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgPSByIC8gMjU1O1xuICAgICAgICBnID0gZyAvIDI1NTtcbiAgICAgICAgYiA9IGIgLyAyNTU7XG4gICAgICAgIHZhciBrID0gMSAtIG1heCQyKHIsbWF4JDIoZyxiKSk7XG4gICAgICAgIHZhciBmID0gayA8IDEgPyAxIC8gKDEtaykgOiAwO1xuICAgICAgICB2YXIgYyA9ICgxLXItaykgKiBmO1xuICAgICAgICB2YXIgbSA9ICgxLWctaykgKiBmO1xuICAgICAgICB2YXIgeSA9ICgxLWItaykgKiBmO1xuICAgICAgICByZXR1cm4gW2MsbSx5LGtdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmNteWtfMSA9IHJnYjJjbXlrJDE7XG5cbiAgICB2YXIgdW5wYWNrJHogPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgY215azJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayR6KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIHZhciBjID0gYXJnc1swXTtcbiAgICAgICAgdmFyIG0gPSBhcmdzWzFdO1xuICAgICAgICB2YXIgeSA9IGFyZ3NbMl07XG4gICAgICAgIHZhciBrID0gYXJnc1szXTtcbiAgICAgICAgdmFyIGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG4gICAgICAgIGlmIChrID09PSAxKSB7IHJldHVybiBbMCwwLDAsYWxwaGFdOyB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBjID49IDEgPyAwIDogMjU1ICogKDEtYykgKiAoMS1rKSwgLy8gclxuICAgICAgICAgICAgbSA+PSAxID8gMCA6IDI1NSAqICgxLW0pICogKDEtayksIC8vIGdcbiAgICAgICAgICAgIHkgPj0gMSA/IDAgOiAyNTUgKiAoMS15KSAqICgxLWspLCAvLyBiXG4gICAgICAgICAgICBhbHBoYVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgY215azJyZ2JfMSA9IGNteWsycmdiO1xuXG4gICAgdmFyIGNocm9tYSRqID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJEMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRnID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJHkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkbCA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNteWsgPSByZ2IyY215a18xO1xuXG4gICAgQ29sb3IkQy5wcm90b3R5cGUuY215ayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmNteWsodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGouY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkQywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2NteWsnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGcuZm9ybWF0LmNteWsgPSBjbXlrMnJnYl8xO1xuXG4gICAgaW5wdXQkZy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayR5KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRsKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjbXlrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayR4ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDIgPSB1dGlscy5sYXN0O1xuICAgIHZhciBybmQgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gTWF0aC5yb3VuZChhKjEwMCkvMTAwOyB9O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gaHNsMmNzcyhoLHMsbClcbiAgICAgKiAtIGhzbDJjc3MoaCxzLGwsYSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICAgICAqIC0gaHNsMmNzcyh7aCxzLGwsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIGhzbDJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgaHNsYSA9IHVucGFjayR4KGFyZ3MsICdoc2xhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQyKGFyZ3MpIHx8ICdsc2EnO1xuICAgICAgICBoc2xhWzBdID0gcm5kKGhzbGFbMF0gfHwgMCk7XG4gICAgICAgIGhzbGFbMV0gPSBybmQoaHNsYVsxXSoxMDApICsgJyUnO1xuICAgICAgICBoc2xhWzJdID0gcm5kKGhzbGFbMl0qMTAwKSArICclJztcbiAgICAgICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM108MSkpIHtcbiAgICAgICAgICAgIGhzbGFbM10gPSBoc2xhLmxlbmd0aCA+IDMgPyBoc2xhWzNdIDogMTtcbiAgICAgICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoc2xhLmxlbmd0aCA9IDM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChtb2RlICsgXCIoXCIgKyAoaHNsYS5qb2luKCcsJykpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICB2YXIgaHNsMmNzc18xID0gaHNsMmNzcyQxO1xuXG4gICAgdmFyIHVucGFjayR3ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzbChyLGcsYilcbiAgICAgKiAtIHJnYjJoc2wocixnLGIsYSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiLGFdKVxuICAgICAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gICAgICovXG4gICAgdmFyIHJnYjJoc2wkMyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJHcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgZyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcblxuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXG4gICAgICAgIHZhciBsID0gKG1heCArIG1pbikgLyAyO1xuICAgICAgICB2YXIgcywgaDtcblxuICAgICAgICBpZiAobWF4ID09PSBtaW4pe1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBsIDwgMC41ID8gKG1heCAtIG1pbikgLyAobWF4ICsgbWluKSA6IChtYXggLSBtaW4pIC8gKDIgLSBtYXggLSBtaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIgPT0gbWF4KSB7IGggPSAoZyAtIGIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoZyA9PSBtYXgpIHsgaCA9IDIgKyAoYiAtIHIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoYiA9PSBtYXgpIHsgaCA9IDQgKyAociAtIGcpIC8gKG1heCAtIG1pbik7IH1cblxuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoPjMgJiYgYXJnc1szXSE9PXVuZGVmaW5lZCkgeyByZXR1cm4gW2gscyxsLGFyZ3NbM11dOyB9XG4gICAgICAgIHJldHVybiBbaCxzLGxdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzbF8xID0gcmdiMmhzbCQzO1xuXG4gICAgdmFyIHVucGFjayR2ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDEgPSB1dGlscy5sYXN0O1xuICAgIHZhciBoc2wyY3NzID0gaHNsMmNzc18xO1xuICAgIHZhciByZ2IyaHNsJDIgPSByZ2IyaHNsXzE7XG4gICAgdmFyIHJvdW5kJDYgPSBNYXRoLnJvdW5kO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmNzcyhyLGcsYilcbiAgICAgKiAtIHJnYjJjc3MocixnLGIsYSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiLGFdLCBtb2RlKVxuICAgICAqIC0gcmdiMmNzcyh7cixnLGIsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIHJnYjJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiYSA9IHVucGFjayR2KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQxKGFyZ3MpIHx8ICdyZ2InO1xuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwzKSA9PSAnaHNsJykge1xuICAgICAgICAgICAgcmV0dXJuIGhzbDJjc3MocmdiMmhzbCQyKHJnYmEpLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZ2JhWzBdID0gcm91bmQkNihyZ2JhWzBdKTtcbiAgICAgICAgcmdiYVsxXSA9IHJvdW5kJDYocmdiYVsxXSk7XG4gICAgICAgIHJnYmFbMl0gPSByb3VuZCQ2KHJnYmFbMl0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ3JnYmEnIHx8IChyZ2JhLmxlbmd0aCA+IDMgJiYgcmdiYVszXTwxKSkge1xuICAgICAgICAgICAgcmdiYVszXSA9IHJnYmEubGVuZ3RoID4gMyA/IHJnYmFbM10gOiAxO1xuICAgICAgICAgICAgbW9kZSA9ICdyZ2JhJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG1vZGUgKyBcIihcIiArIChyZ2JhLnNsaWNlKDAsbW9kZT09PSdyZ2InPzM6NCkuam9pbignLCcpKSArIFwiKVwiKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJjc3NfMSA9IHJnYjJjc3MkMTtcblxuICAgIHZhciB1bnBhY2skdSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcm91bmQkNSA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgaHNsMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduO1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skdShhcmdzLCAnaHNsJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IGwqMjU1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHQzID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciBjID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciB0MiA9IGwgPCAwLjUgPyBsICogKDErcykgOiBsK3MtbCpzO1xuICAgICAgICAgICAgdmFyIHQxID0gMiAqIGwgLSB0MjtcbiAgICAgICAgICAgIHZhciBoXyA9IGggLyAzNjA7XG4gICAgICAgICAgICB0M1swXSA9IGhfICsgMS8zO1xuICAgICAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgICAgIHQzWzJdID0gaF8gLSAxLzM7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgeyB0M1tpXSArPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldID4gMSkgeyB0M1tpXSAtPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKDYgKiB0M1tpXSA8IDEpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldOyB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDI7IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgzICogdDNbaV0gPCAyKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgoMiAvIDMpIC0gdDNbaV0pICogNjsgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDE7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChhc3NpZ24gPSBbcm91bmQkNShjWzBdKjI1NSkscm91bmQkNShjWzFdKjI1NSkscm91bmQkNShjWzJdKjI1NSldLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsYXJnc1szXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzbDJyZ2JfMSA9IGhzbDJyZ2IkMTtcblxuICAgIHZhciBoc2wycmdiID0gaHNsMnJnYl8xO1xuICAgIHZhciBpbnB1dCRmID0gaW5wdXQkaDtcblxuICAgIHZhciBSRV9SR0IgPSAvXnJnYlxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccypcXCkkLztcbiAgICB2YXIgUkVfUkdCQSA9IC9ecmdiYVxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfUkdCX1BDVCA9IC9ecmdiXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuICAgIHZhciBSRV9SR0JBX1BDVCA9IC9ecmdiYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfSFNMID0gL15oc2xcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgICB2YXIgUkVfSFNMQSA9IC9eaHNsYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuXG4gICAgdmFyIHJvdW5kJDQgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGNzczJyZ2IkMSA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgY3NzID0gY3NzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICB2YXIgbTtcblxuICAgICAgICBpZiAoaW5wdXQkZi5mb3JtYXQubmFtZWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0JGYuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0IpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiWzNdID0gMTsgIC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiByZ2I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkEpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQxID0gbS5zbGljZSgxLDUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTw0OyBpJDErKykge1xuICAgICAgICAgICAgICAgIHJnYiQxW2kkMV0gPSArcmdiJDFbaSQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZ2IkMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYigxMDAlLDAlLDAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCX1BDVCkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDIgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDI9MDsgaSQyPDM7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDJbaSQyXSA9IHJvdW5kJDQocmdiJDJbaSQyXSAqIDIuNTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiJDJbM10gPSAxOyAgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiYSgxMDAlLDAlLDAlLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMyA9IG0uc2xpY2UoMSw1KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0wOyBpJDM8MzsgaSQzKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkM1tpJDNdID0gcm91bmQkNChyZ2IkM1tpJDNdICogMi41NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2IkM1szXSA9ICtyZ2IkM1szXTtcbiAgICAgICAgICAgIHJldHVybiByZ2IkMztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhzbCgwLDEwMCUsNTAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfSFNMKSkpIHtcbiAgICAgICAgICAgIHZhciBoc2wgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgICAgICAgdmFyIHJnYiQ0ID0gaHNsMnJnYihoc2wpO1xuICAgICAgICAgICAgcmdiJDRbM10gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIHJnYiQ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHNsYSgwLDEwMCUsNTAlLDAuNSlcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICAgICAgdmFyIGhzbCQxID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgaHNsJDFbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbCQxWzJdICo9IDAuMDE7XG4gICAgICAgICAgICB2YXIgcmdiJDUgPSBoc2wycmdiKGhzbCQxKTtcbiAgICAgICAgICAgIHJnYiQ1WzNdID0gK21bNF07ICAvLyBkZWZhdWx0IGFscGhhID0gMVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQ1O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNzczJyZ2IkMS50ZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIFJFX1JHQi50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQl9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCQV9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX0hTTEEudGVzdChzKTtcbiAgICB9O1xuXG4gICAgdmFyIGNzczJyZ2JfMSA9IGNzczJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkaSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRCID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkZSA9IGlucHV0JGg7XG4gICAgdmFyIHR5cGUkayA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNzcyA9IHJnYjJjc3NfMTtcbiAgICB2YXIgY3NzMnJnYiA9IGNzczJyZ2JfMTtcblxuICAgIENvbG9yJEIucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGkuY3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRCLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnY3NzJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRlLmZvcm1hdC5jc3MgPSBjc3MycmdiO1xuXG4gICAgaW5wdXQkZS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRrKGgpID09PSAnc3RyaW5nJyAmJiBjc3MycmdiLnRlc3QoaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Nzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRBID0gQ29sb3JfMTtcbiAgICB2YXIgY2hyb21hJGggPSBjaHJvbWFfMTtcbiAgICB2YXIgaW5wdXQkZCA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayR0ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgaW5wdXQkZC5mb3JtYXQuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYiA9IHVucGFjayR0KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHJnYlswXSAqPSAyNTU7XG4gICAgICAgIHJnYlsxXSAqPSAyNTU7XG4gICAgICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfTtcblxuICAgIGNocm9tYSRoLmdsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRBLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnZ2wnXSkgKSk7XG4gICAgfTtcblxuICAgIENvbG9yJEEucHJvdG90eXBlLmdsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgICAgIHJldHVybiBbcmdiWzBdLzI1NSwgcmdiWzFdLzI1NSwgcmdiWzJdLzI1NSwgcmdiWzNdXTtcbiAgICB9O1xuXG4gICAgdmFyIHVucGFjayRzID0gdXRpbHMudW5wYWNrO1xuXG4gICAgdmFyIHJnYjJoY2ckMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJHMoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICAgICAgdmFyIGRlbHRhID0gbWF4IC0gbWluO1xuICAgICAgICB2YXIgYyA9IGRlbHRhICogMTAwIC8gMjU1O1xuICAgICAgICB2YXIgX2cgPSBtaW4gLyAoMjU1IC0gZGVsdGEpICogMTAwO1xuICAgICAgICB2YXIgaDtcbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyID09PSBtYXgpIHsgaCA9IChnIC0gYikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGcgPT09IG1heCkgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXgpIHsgaCA9IDQrKHIgLSBnKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBoICo9IDYwO1xuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoLCBjLCBfZ107XG4gICAgfTtcblxuICAgIHZhciByZ2IyaGNnXzEgPSByZ2IyaGNnJDE7XG5cbiAgICB2YXIgdW5wYWNrJHIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDMgPSBNYXRoLmZsb29yO1xuXG4gICAgLypcbiAgICAgKiB0aGlzIGlzIGJhc2ljYWxseSBqdXN0IEhTViB3aXRoIHNvbWUgbWlub3IgdHdlYWtzXG4gICAgICpcbiAgICAgKiBodWUuLiBbMC4uMzYwXVxuICAgICAqIGNocm9tYSAuLiBbMC4uMV1cbiAgICAgKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAgICAgKi9cblxuICAgIHZhciBoY2cycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDIsIGFzc2lnbiQzLCBhc3NpZ24kNCwgYXNzaWduJDU7XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayRyKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBfZyA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgX2cgPSBfZyAqIDI1NTtcbiAgICAgICAgdmFyIF9jID0gYyAqIDI1NTtcbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPT09IDM2MCkgeyBoID0gMDsgfVxuICAgICAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMyhoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IF9nICogKDEgLSBjKTtcbiAgICAgICAgICAgIHZhciBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgICAgICAgIHZhciB0ID0gcCArIF9jICogZjtcbiAgICAgICAgICAgIHZhciB2ID0gcCArIF9jO1xuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaGNnMnJnYl8xID0gaGNnMnJnYjtcblxuICAgIHZhciB1bnBhY2skcSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRqID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGcgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGMgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoY2cgPSByZ2IyaGNnXzE7XG5cbiAgICBDb2xvciR6LnByb3RvdHlwZS5oY2cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoY2codGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGcuaGNnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR6LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNnJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRjLmZvcm1hdC5oY2cgPSBoY2cycmdiXzE7XG5cbiAgICBpbnB1dCRjLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDEsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJHEoYXJncywgJ2hjZycpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGNnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRwID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0ID0gdXRpbHMubGFzdDtcbiAgICB2YXIgcm91bmQkMyA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgcmdiMmhleCQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skcChhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgYSA9IHJlZlszXTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdhdXRvJztcbiAgICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgeyBhID0gMTsgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICAgICAgfVxuICAgICAgICByID0gcm91bmQkMyhyKTtcbiAgICAgICAgZyA9IHJvdW5kJDMoZyk7XG4gICAgICAgIGIgPSByb3VuZCQzKGIpO1xuICAgICAgICB2YXIgdSA9IHIgPDwgMTYgfCBnIDw8IDggfCBiO1xuICAgICAgICB2YXIgc3RyID0gXCIwMDAwMDBcIiArIHUudG9TdHJpbmcoMTYpOyAvLyMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgICAgIHZhciBoeGEgPSAnMCcgKyByb3VuZCQzKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaHhhID0gaHhhLnN1YnN0cihoeGEubGVuZ3RoIC0gMik7XG4gICAgICAgIHN3aXRjaCAobW9kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdyZ2JhJzogcmV0dXJuIChcIiNcIiArIHN0ciArIGh4YSk7XG4gICAgICAgICAgICBjYXNlICdhcmdiJzogcmV0dXJuIChcIiNcIiArIGh4YSArIHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gKFwiI1wiICsgc3RyKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmdiMmhleF8xID0gcmdiMmhleCQyO1xuXG4gICAgdmFyIFJFX0hFWCA9IC9eIz8oW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XG4gICAgdmFyIFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG4gICAgdmFyIGhleDJyZ2IkMSA9IGZ1bmN0aW9uIChoZXgpIHtcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVgpKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIHNpeC1kaWdpdFxuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgICAgIHZhciByID0gdSA+PiAxNjtcbiAgICAgICAgICAgIHZhciBnID0gdSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gdSAmIDB4RkY7XG4gICAgICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF0Y2ggcmdiYSBoZXggZm9ybWF0LCBlZyAjRkYwMDAwNzdcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVhBKSkge1xuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXStoZXhbM10raGV4WzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUkMSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdmFyIHIkMSA9IHUkMSA+PiAyNCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgZyQxID0gdSQxID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiJDEgPSB1JDEgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYSA9IE1hdGgucm91bmQoKHUkMSAmIDB4RkYpIC8gMHhGRiAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gW3IkMSxnJDEsYiQxLGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgdXNlZCB0byBjaGVjayBmb3IgY3NzIGNvbG9ycyBoZXJlXG4gICAgICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgICAgICAvLyAgICAgcmV0dXJuIHJnYlxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGhleCBjb2xvcjogXCIgKyBoZXgpKTtcbiAgICB9O1xuXG4gICAgdmFyIGhleDJyZ2JfMSA9IGhleDJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkZiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR5ID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSRpID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW5wdXQkYiA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhleCQxID0gcmdiMmhleF8xO1xuXG4gICAgQ29sb3IkeS5wcm90b3R5cGUuaGV4ID0gZnVuY3Rpb24obW9kZSkge1xuICAgICAgICByZXR1cm4gcmdiMmhleCQxKHRoaXMuX3JnYiwgbW9kZSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRmLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkeSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hleCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkYi5mb3JtYXQuaGV4ID0gaGV4MnJnYl8xO1xuICAgIGlucHV0JGIuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNCxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkaShoKSA9PT0gJ3N0cmluZycgJiYgWzMsNCw1LDYsNyw4LDldLmluZGV4T2YoaC5sZW5ndGgpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skbyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgVFdPUEkkMiA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBtaW4kMiA9IE1hdGgubWluO1xuICAgIHZhciBzcXJ0JDQgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGFjb3MgPSBNYXRoLmFjb3M7XG5cbiAgICB2YXIgcmdiMmhzaSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICAgICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL3JnYjJoc2kuY3BwXG4gICAgICAgICovXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skbyhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG4gICAgICAgIHZhciBoO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQyKHIsZyxiKTtcbiAgICAgICAgdmFyIGkgPSAocitnK2IpIC8gMztcbiAgICAgICAgdmFyIHMgPSBpID4gMCA/IDEgLSBtaW5fL2kgOiAwO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGggPSAoKHItZykrKHItYikpIC8gMjtcbiAgICAgICAgICAgIGggLz0gc3FydCQ0KChyLWcpKihyLWcpICsgKHItYikqKGctYikpO1xuICAgICAgICAgICAgaCA9IGFjb3MoaCk7XG4gICAgICAgICAgICBpZiAoYiA+IGcpIHtcbiAgICAgICAgICAgICAgICBoID0gVFdPUEkkMiAtIGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoIC89IFRXT1BJJDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoKjM2MCxzLGldO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzaV8xID0gcmdiMmhzaSQxO1xuXG4gICAgdmFyIHVucGFjayRuID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsaW1pdCA9IHV0aWxzLmxpbWl0O1xuICAgIHZhciBUV09QSSQxID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIFBJVEhJUkQgPSB1dGlscy5QSVRISVJEO1xuICAgIHZhciBjb3MkNCA9IE1hdGguY29zO1xuXG4gICAgLypcbiAgICAgKiBodWUgWzAuLjM2MF1cbiAgICAgKiBzYXR1cmF0aW9uIFswLi4xXVxuICAgICAqIGludGVuc2l0eSBbMC4uMV1cbiAgICAgKi9cbiAgICB2YXIgaHNpMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvKlxuICAgICAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9oc2kycmdiLmNwcFxuICAgICAgICAqL1xuICAgICAgICBhcmdzID0gdW5wYWNrJG4oYXJncywgJ2hzaScpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGkgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG5cbiAgICAgICAgaWYgKGlzTmFOKGgpKSB7IGggPSAwOyB9XG4gICAgICAgIGlmIChpc05hTihzKSkgeyBzID0gMDsgfVxuICAgICAgICAvLyBub3JtYWxpemUgaHVlXG4gICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICBoIC89IDM2MDtcbiAgICAgICAgaWYgKGggPCAxLzMpIHtcbiAgICAgICAgICAgIGIgPSAoMS1zKS8zO1xuICAgICAgICAgICAgciA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICBnID0gMSAtIChiK3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAyLzMpIHtcbiAgICAgICAgICAgIGggLT0gMS8zO1xuICAgICAgICAgICAgciA9ICgxLXMpLzM7XG4gICAgICAgICAgICBnID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIGIgPSAxIC0gKHIrZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoIC09IDIvMztcbiAgICAgICAgICAgIGcgPSAoMS1zKS8zO1xuICAgICAgICAgICAgYiA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICByID0gMSAtIChnK2IpO1xuICAgICAgICB9XG4gICAgICAgIHIgPSBsaW1pdChpKnIqMyk7XG4gICAgICAgIGcgPSBsaW1pdChpKmcqMyk7XG4gICAgICAgIGIgPSBsaW1pdChpKmIqMyk7XG4gICAgICAgIHJldHVybiBbcioyNTUsIGcqMjU1LCBiKjI1NSwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaHNpMnJnYl8xID0gaHNpMnJnYjtcblxuICAgIHZhciB1bnBhY2skbSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRoID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGEgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoc2kgPSByZ2IyaHNpXzE7XG5cbiAgICBDb2xvciR4LnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGUuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR4LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNpJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRhLmZvcm1hdC5oc2kgPSBoc2kycmdiXzE7XG5cbiAgICBpbnB1dCRhLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJG0oYXJncywgJ2hzaScpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRsID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGcgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR3ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzbCQxID0gcmdiMmhzbF8xO1xuXG4gICAgQ29sb3Ikdy5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHNsJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGQuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR3LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ5LmZvcm1hdC5oc2wgPSBoc2wycmdiXzE7XG5cbiAgICBpbnB1dCQ5LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJGwoYXJncywgJ2hzbCcpO1xuICAgICAgICAgICAgaWYgKHR5cGUkZyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRrID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBtaW4kMSA9IE1hdGgubWluO1xuICAgIHZhciBtYXgkMSA9IE1hdGgubWF4O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzdihyLGcsYilcbiAgICAgKiAtIHJnYjJoc3YoW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc3Yoe3IsZyxifSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmhzbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGsoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4XyA9IG1heCQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgZGVsdGEgPSBtYXhfIC0gbWluXztcbiAgICAgICAgdmFyIGgscyx2O1xuICAgICAgICB2ID0gbWF4XyAvIDI1NS4wO1xuICAgICAgICBpZiAobWF4XyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgICAgICBpZiAociA9PT0gbWF4XykgeyBoID0gKGcgLSBiKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoZyA9PT0gbWF4XykgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXhfKSB7IGggPSA0KyhyIC0gZykgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCwgcywgdl1cbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoc3YkMSA9IHJnYjJoc2w7XG5cbiAgICB2YXIgdW5wYWNrJGogPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDIgPSBNYXRoLmZsb29yO1xuXG4gICAgdmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJGooYXJncywgJ2hzdicpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIHYgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIHYgKj0gMjU1O1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gdjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoID09PSAzNjApIHsgaCA9IDA7IH1cbiAgICAgICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMihoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICAgICAgdmFyIHEgPSB2ICogKDEgLSBzICogZik7XG4gICAgICAgICAgICB2YXIgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTtcblxuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsYXJncy5sZW5ndGggPiAzP2FyZ3NbM106MV07XG4gICAgfTtcblxuICAgIHZhciBoc3YycmdiXzEgPSBoc3YycmdiO1xuXG4gICAgdmFyIHVucGFjayRpID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGYgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkYyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR2ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOCA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzdiA9IHJnYjJoc3YkMTtcblxuICAgIENvbG9yJHYucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYy5oc3YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHYsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc3YnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDguZm9ybWF0LmhzdiA9IGhzdjJyZ2JfMTtcblxuICAgIGlucHV0JDguYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skaShhcmdzLCAnaHN2Jyk7XG4gICAgICAgICAgICBpZiAodHlwZSRmKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbGFiQ29uc3RhbnRzID0ge1xuICAgICAgICAvLyBDb3JyZXNwb25kcyByb3VnaGx5IHRvIFJHQiBicmlnaHRlci9kYXJrZXJcbiAgICAgICAgS246IDE4LFxuXG4gICAgICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgICAgICBYbjogMC45NTA0NzAsXG4gICAgICAgIFluOiAxLFxuICAgICAgICBabjogMS4wODg4MzAsXG5cbiAgICAgICAgdDA6IDAuMTM3OTMxMDM0LCAgLy8gNCAvIDI5XG4gICAgICAgIHQxOiAwLjIwNjg5NjU1MiwgIC8vIDYgLyAyOVxuICAgICAgICB0MjogMC4xMjg0MTg1NSwgICAvLyAzICogdDEgKiB0MVxuICAgICAgICB0MzogMC4wMDg4NTY0NTIsICAvLyB0MSAqIHQxICogdDFcbiAgICB9O1xuXG4gICAgdmFyIExBQl9DT05TVEFOVFMkMyA9IGxhYkNvbnN0YW50cztcbiAgICB2YXIgdW5wYWNrJGggPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHBvdyRhID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgcmdiMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skaChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJ4eXoocixnLGIpO1xuICAgICAgICB2YXIgeCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgeSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgeiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgbCA9IDExNiAqIHkgLSAxNjtcbiAgICAgICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYl94eXogPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSB7IHJldHVybiByIC8gMTIuOTI7IH1cbiAgICAgICAgcmV0dXJuIHBvdyRhKChyICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgfTtcblxuICAgIHZhciB4eXpfbGFiID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTJDMudDMpIHsgcmV0dXJuIHBvdyRhKHQsIDEgLyAzKTsgfVxuICAgICAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMkMy50MiArIExBQl9DT05TVEFOVFMkMy50MDtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJ4eXogPSBmdW5jdGlvbiAocixnLGIpIHtcbiAgICAgICAgciA9IHJnYl94eXoocik7XG4gICAgICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgICAgICBiID0gcmdiX3h5eihiKTtcbiAgICAgICAgdmFyIHggPSB4eXpfbGFiKCgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlhuKTtcbiAgICAgICAgdmFyIHkgPSB4eXpfbGFiKCgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1MCAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlluKTtcbiAgICAgICAgdmFyIHogPSB4eXpfbGFiKCgwLjAxOTMzMzkgKiByICsgMC4xMTkxOTIwICogZyArIDAuOTUwMzA0MSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlpuKTtcbiAgICAgICAgcmV0dXJuIFt4LHksel07XG4gICAgfTtcblxuICAgIHZhciByZ2IybGFiXzEgPSByZ2IybGFiJDI7XG5cbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQyID0gbGFiQ29uc3RhbnRzO1xuICAgIHZhciB1bnBhY2skZyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDkgPSBNYXRoLnBvdztcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBsYWIycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRnKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHgseSx6LCByLGcsYl87XG5cbiAgICAgICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgICAgICB4ID0gaXNOYU4oYSkgPyB5IDogeSArIGEgLyA1MDA7XG4gICAgICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgICAgICB5ID0gTEFCX0NPTlNUQU5UUyQyLlluICogbGFiX3h5eih5KTtcbiAgICAgICAgeCA9IExBQl9DT05TVEFOVFMkMi5YbiAqIGxhYl94eXooeCk7XG4gICAgICAgIHogPSBMQUJfQ09OU1RBTlRTJDIuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgICAgIHIgPSB4eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeik7ICAvLyBENjUgLT4gc1JHQlxuICAgICAgICBnID0geHl6X3JnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KTtcbiAgICAgICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICAgICAgcmV0dXJuIFtyLGcsYl8sYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgeHl6X3JnYiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHJldHVybiAyNTUgKiAociA8PSAwLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBwb3ckOShyLCAxIC8gMi40KSAtIDAuMDU1KVxuICAgIH07XG5cbiAgICB2YXIgbGFiX3h5eiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ID4gTEFCX0NPTlNUQU5UUyQyLnQxID8gdCAqIHQgKiB0IDogTEFCX0NPTlNUQU5UUyQyLnQyICogKHQgLSBMQUJfQ09OU1RBTlRTJDIudDApXG4gICAgfTtcblxuICAgIHZhciBsYWIycmdiXzEgPSBsYWIycmdiJDE7XG5cbiAgICB2YXIgdW5wYWNrJGYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRiID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHUgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ3ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGFiJDEgPSByZ2IybGFiXzE7XG5cbiAgICBDb2xvciR1LnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJsYWIkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYi5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHUsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydsYWInXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDcuZm9ybWF0LmxhYiA9IGxhYjJyZ2JfMTtcblxuICAgIGlucHV0JDcuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skZihhcmdzLCAnbGFiJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsYWInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIFJBRDJERUcgPSB1dGlscy5SQUQyREVHO1xuICAgIHZhciBzcXJ0JDMgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGF0YW4yJDIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciByb3VuZCQyID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBsYWIybGNoJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRlKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGMgPSBzcXJ0JDMoYSAqIGEgKyBiICogYik7XG4gICAgICAgIHZhciBoID0gKGF0YW4yJDIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcbiAgICAgICAgaWYgKHJvdW5kJDIoYyoxMDAwMCkgPT09IDApIHsgaCA9IE51bWJlci5OYU47IH1cbiAgICAgICAgcmV0dXJuIFtsLCBjLCBoXTtcbiAgICB9O1xuXG4gICAgdmFyIGxhYjJsY2hfMSA9IGxhYjJsY2gkMjtcblxuICAgIHZhciB1bnBhY2skZCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcmdiMmxhYiA9IHJnYjJsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCQxID0gbGFiMmxjaF8xO1xuXG4gICAgdmFyIHJnYjJsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGQoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2IybGFiKHIsZyxiKTtcbiAgICAgICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBsYWIybGNoJDEobCxhLGJfKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJsY2hfMSA9IHJnYjJsY2gkMTtcblxuICAgIHZhciB1bnBhY2skYyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgREVHMlJBRCA9IHV0aWxzLkRFRzJSQUQ7XG4gICAgdmFyIHNpbiQzID0gTWF0aC5zaW47XG4gICAgdmFyIGNvcyQzID0gTWF0aC5jb3M7XG5cbiAgICB2YXIgbGNoMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIENvbnZlcnQgZnJvbSBhIHF1YWxpdGF0aXZlIHBhcmFtZXRlciBoIGFuZCBhIHF1YW50aXRhdGl2ZSBwYXJhbWV0ZXIgbCB0byBhIDI0LWJpdCBwaXhlbC5cbiAgICAgICAgVGhlc2UgZm9ybXVsYXMgd2VyZSBpbnZlbnRlZCBieSBEYXZpZCBEYWxyeW1wbGUgdG8gb2J0YWluIG1heGltdW0gY29udHJhc3Qgd2l0aG91dCBnb2luZ1xuICAgICAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICAgICAgQSBzYXR1cmF0aW9uIG11bHRpcGxpZXIgd2FzIGFkZGVkIGJ5IEdyZWdvciBBaXNjaFxuICAgICAgICAqL1xuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGMoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGMgPSByZWZbMV07XG4gICAgICAgIHZhciBoID0gcmVmWzJdO1xuICAgICAgICBpZiAoaXNOYU4oaCkpIHsgaCA9IDA7IH1cbiAgICAgICAgaCA9IGggKiBERUcyUkFEO1xuICAgICAgICByZXR1cm4gW2wsIGNvcyQzKGgpICogYywgc2luJDMoaCkgKiBjXVxuICAgIH07XG5cbiAgICB2YXIgbGNoMmxhYl8xID0gbGNoMmxhYiQyO1xuXG4gICAgdmFyIHVucGFjayRiID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiJDEgPSBsY2gybGFiXzE7XG4gICAgdmFyIGxhYjJyZ2IgPSBsYWIycmdiXzE7XG5cbiAgICB2YXIgbGNoMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skYihhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByZWYgPSBsY2gybGFiJDEgKGwsYyxoKTtcbiAgICAgICAgdmFyIEwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGxhYjJyZ2IgKEwsYSxiXyk7XG4gICAgICAgIHZhciByID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgbGNoMnJnYl8xID0gbGNoMnJnYiQxO1xuXG4gICAgdmFyIHVucGFjayRhID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gycmdiID0gbGNoMnJnYl8xO1xuXG4gICAgdmFyIGhjbDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIGhjbCA9IHVucGFjayRhKGFyZ3MsICdoY2wnKS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiBsY2gycmdiLmFwcGx5KHZvaWQgMCwgaGNsKTtcbiAgICB9O1xuXG4gICAgdmFyIGhjbDJyZ2JfMSA9IGhjbDJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJDkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRhID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHQgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ2ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGNoID0gcmdiMmxjaF8xO1xuXG4gICAgQ29sb3IkdC5wcm90b3R5cGUubGNoID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYik7IH07XG4gICAgQ29sb3IkdC5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpOyB9O1xuXG4gICAgY2hyb21hJGEubGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbGNoJ10pICkpO1xuICAgIH07XG4gICAgY2hyb21hJGEuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ2LmZvcm1hdC5sY2ggPSBsY2gycmdiXzE7XG4gICAgaW5wdXQkNi5mb3JtYXQuaGNsID0gaGNsMnJnYl8xO1xuXG4gICAgWydsY2gnLCdoY2wnXS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldHVybiBpbnB1dCQ2LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDkoYXJncywgbSk7XG4gICAgICAgICAgICBpZiAodHlwZSRkKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTsgfSk7XG5cbiAgICAvKipcbiAgICBcdFgxMSBjb2xvciBuYW1lc1xuXG4gICAgXHRodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAgICAqL1xuXG4gICAgdmFyIHczY3gxMSQxID0ge1xuICAgICAgICBhbGljZWJsdWU6ICcjZjBmOGZmJyxcbiAgICAgICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgICAgIGFxdWE6ICcjMDBmZmZmJyxcbiAgICAgICAgYXF1YW1hcmluZTogJyM3ZmZmZDQnLFxuICAgICAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgICAgICBiZWlnZTogJyNmNWY1ZGMnLFxuICAgICAgICBiaXNxdWU6ICcjZmZlNGM0JyxcbiAgICAgICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICAgICAgYmxhbmNoZWRhbG1vbmQ6ICcjZmZlYmNkJyxcbiAgICAgICAgYmx1ZTogJyMwMDAwZmYnLFxuICAgICAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgICAgIGJyb3duOiAnI2E1MmEyYScsXG4gICAgICAgIGJ1cmx5d29vZDogJyNkZWI4ODcnLFxuICAgICAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICAgICAgY2hhcnRyZXVzZTogJyM3ZmZmMDAnLFxuICAgICAgICBjaG9jb2xhdGU6ICcjZDI2OTFlJyxcbiAgICAgICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICAgICAgY29ybmZsb3dlcjogJyM2NDk1ZWQnLFxuICAgICAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgICAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgICAgICBjcmltc29uOiAnI2RjMTQzYycsXG4gICAgICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICAgICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcjMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgICAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcjMDA2NDAwJyxcbiAgICAgICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgICAgIGRhcmttYWdlbnRhOiAnIzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICAgICAgZGFya29yY2hpZDogJyM5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICAgICAgZGFya3NlYWdyZWVuOiAnIzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrc2xhdGVncmV5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICAgICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJyNmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgICAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgICAgIGRpbWdyZXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgICAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICAgICAgZmxvcmFsd2hpdGU6ICcjZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgICAgICBnYWluc2Jvcm86ICcjZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgICAgIGdvbGRlbnJvZDogJyNkYWE1MjAnLFxuICAgICAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgICAgIGdyZWVueWVsbG93OiAnI2FkZmYyZicsXG4gICAgICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICAgICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJyNmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnI2ZmZmZmMCcsXG4gICAgICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICAgICAgbGF2ZW5kZXI6ICcjZTZlNmZhJyxcbiAgICAgICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgICAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICAgICAgbGVtb25jaGlmZm9uOiAnI2ZmZmFjZCcsXG4gICAgICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgICAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgICAgIGxpZ2h0Y3lhbjogJyNlMGZmZmYnLFxuICAgICAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdyYXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgICAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRwaW5rOiAnI2ZmYjZjMScsXG4gICAgICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICAgICAgbGlnaHRza3libHVlOiAnIzg3Y2VmYScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c3RlZWxibHVlOiAnI2IwYzRkZScsXG4gICAgICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICAgICAgbGltZWdyZWVuOiAnIzMyY2QzMicsXG4gICAgICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICAgICAgbWFyb29uOiAnIzgwMDAwMCcsXG4gICAgICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICAgICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnIzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICAgICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJyM5MzcwZGInLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgICAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcjMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcjMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJyNmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgICAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICcjZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICAgICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJyNmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICAgICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICcjZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJyNkYjcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnI2NkODUzZicsXG4gICAgICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICAgICAgcGx1bTogJyNkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnI2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgICAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgICAgIHB1cnBsZTM6ICcjYTAyMGYwJyxcbiAgICAgICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgICAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICAgICAgcm9zeWJyb3duOiAnI2JjOGY4ZicsXG4gICAgICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgICAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgICAgICBzYWxtb246ICcjZmE4MDcyJyxcbiAgICAgICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgICAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgICAgICBzZWFzaGVsbDogJyNmZmY1ZWUnLFxuICAgICAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICAgICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgICAgIHNreWJsdWU6ICcjODdjZWViJyxcbiAgICAgICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgICAgICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgICAgICAgc25vdzogJyNmZmZhZmEnLFxuICAgICAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgICAgICBzdGVlbGJsdWU6ICcjNDY4MmI0JyxcbiAgICAgICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICAgICAgdGhpc3RsZTogJyNkOGJmZDgnLFxuICAgICAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICAgICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgICAgIHZpb2xldDogJyNlZTgyZWUnLFxuICAgICAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgICAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgICAgICB3aGl0ZXNtb2tlOiAnI2Y1ZjVmNScsXG4gICAgICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgICAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gICAgfTtcblxuICAgIHZhciB3M2N4MTFfMSA9IHczY3gxMSQxO1xuXG4gICAgdmFyIENvbG9yJHMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ1ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRjID0gdXRpbHMudHlwZTtcblxuICAgIHZhciB3M2N4MTEgPSB3M2N4MTFfMTtcbiAgICB2YXIgaGV4MnJnYiA9IGhleDJyZ2JfMTtcbiAgICB2YXIgcmdiMmhleCA9IHJnYjJoZXhfMTtcblxuICAgIENvbG9yJHMucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXModzNjeDExKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBuID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKHczY3gxMVtuXSA9PT0gaGV4KSB7IHJldHVybiBuLnRvTG93ZXJDYXNlKCk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGV4O1xuICAgIH07XG5cbiAgICBpbnB1dCQ1LmZvcm1hdC5uYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh3M2N4MTFbbmFtZV0pIHsgcmV0dXJuIGhleDJyZ2IodzNjeDExW25hbWVdKTsgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29sb3IgbmFtZTogJytuYW1lKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRjKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJDggPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgcmdiMm51bSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skOChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHJldHVybiAociA8PCAxNikgKyAoZyA8PCA4KSArIGI7XG4gICAgfTtcblxuICAgIHZhciByZ2IybnVtXzEgPSByZ2IybnVtJDE7XG5cbiAgICB2YXIgdHlwZSRiID0gdXRpbHMudHlwZTtcblxuICAgIHZhciBudW0ycmdiID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAodHlwZSRiKG51bSkgPT0gXCJudW1iZXJcIiAmJiBudW0gPj0gMCAmJiBudW0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgIHZhciByID0gbnVtID4+IDE2O1xuICAgICAgICAgICAgdmFyIGcgPSAobnVtID4+IDgpICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gbnVtICYgMHhGRjtcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBudW0gY29sb3I6IFwiK251bSk7XG4gICAgfTtcblxuICAgIHZhciBudW0ycmdiXzEgPSBudW0ycmdiO1xuXG4gICAgdmFyIGNocm9tYSQ5ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHIgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ0ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRhID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IybnVtID0gcmdiMm51bV8xO1xuXG4gICAgQ29sb3Ikci5wcm90b3R5cGUubnVtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IybnVtKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ5Lm51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkciwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ251bSddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNC5mb3JtYXQubnVtID0gbnVtMnJnYl8xO1xuXG4gICAgaW5wdXQkNC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGUkYShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiYgYXJnc1swXSA+PSAwICYmIGFyZ3NbMF0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBjaHJvbWEkOCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRxID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMyA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayQ3ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDkgPSB1dGlscy50eXBlO1xuICAgIHZhciByb3VuZCQxID0gTWF0aC5yb3VuZDtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uKHJuZCkge1xuICAgICAgICBpZiAoIHJuZCA9PT0gdm9pZCAwICkgcm5kPXRydWU7XG5cbiAgICAgICAgaWYgKHJuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDMpOyB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwzKS5tYXAocm91bmQkMSk7XG4gICAgfTtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbihybmQpIHtcbiAgICAgICAgaWYgKCBybmQgPT09IHZvaWQgMCApIHJuZD10cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCw0KS5tYXAoZnVuY3Rpb24gKHYsaSkge1xuICAgICAgICAgICAgcmV0dXJuIGk8MyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kJDEodikpIDogdjtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNocm9tYSQ4LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkcSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ3JnYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5mb3JtYXQucmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2JhID0gdW5wYWNrJDcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgaWYgKHJnYmFbM10gPT09IHVuZGVmaW5lZCkgeyByZ2JhWzNdID0gMTsgfVxuICAgICAgICByZXR1cm4gcmdiYTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQ3KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ5KGFyZ3MpID09PSAnYXJyYXknICYmIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoID09PSA0ICYmIHR5cGUkOShhcmdzWzNdKSA9PSAnbnVtYmVyJyAmJiBhcmdzWzNdID49IDAgJiYgYXJnc1szXSA8PSAxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqL1xuXG4gICAgdmFyIGxvZyQxID0gTWF0aC5sb2c7XG5cbiAgICB2YXIgdGVtcGVyYXR1cmUycmdiJDEgPSBmdW5jdGlvbiAoa2VsdmluKSB7XG4gICAgICAgIHZhciB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgICAgIHIgPSAyNTU7XG4gICAgICAgICAgICBnID0gdGVtcCA8IDYgPyAwIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtIDAuNDQ1OTY5NTA0Njk1NzkxMzMgKiAoZyA9IHRlbXAtMikgKyAxMDQuNDkyMTYxOTkzOTM4ODggKiBsb2ckMShnKTtcbiAgICAgICAgICAgIGIgPSB0ZW1wIDwgMjAgPyAwIDogLTI1NC43NjkzNTE4NDEyMDkwMiArIDAuODI3NDA5NjA2NDAwNzM5NSAqIChiID0gdGVtcC0xMCkgKyAxMTUuNjc5OTQ0MDEwNjYxNDcgKiBsb2ckMShiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIgPSAzNTEuOTc2OTA1NjY4MDU2OTMgKyAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcC01NSkgLSA0MC4yNTM2NjMwOTMzMjEyNyAqIGxvZyQxKHIpO1xuICAgICAgICAgICAgZyA9IDMyNS40NDk0MTI1NzExOTc0ICsgMC4wNzk0MzQ1NjUzNjY2MjM0MiAqIChnID0gdGVtcC01MCkgLSAyOC4wODUyOTYzNTA3OTU3ICogbG9nJDEoZyk7XG4gICAgICAgICAgICBiID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgfTtcblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2JfMSA9IHRlbXBlcmF0dXJlMnJnYiQxO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqKi9cblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2IgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcbiAgICB2YXIgdW5wYWNrJDYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiID0gdW5wYWNrJDYoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJnYlswXSwgYiA9IHJnYlsyXTtcbiAgICAgICAgdmFyIG1pblRlbXAgPSAxMDAwO1xuICAgICAgICB2YXIgbWF4VGVtcCA9IDQwMDAwO1xuICAgICAgICB2YXIgZXBzID0gMC40O1xuICAgICAgICB2YXIgdGVtcDtcbiAgICAgICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICAgICAgICB0ZW1wID0gKG1heFRlbXAgKyBtaW5UZW1wKSAqIDAuNTtcbiAgICAgICAgICAgIHZhciByZ2IkMSA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgICAgIGlmICgocmdiJDFbMl0gLyByZ2IkMVswXSkgPj0gKGIgLyByKSkge1xuICAgICAgICAgICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm91bmQodGVtcCk7XG4gICAgfTtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmVfMSA9IHJnYjJ0ZW1wZXJhdHVyZSQxO1xuXG4gICAgdmFyIGNocm9tYSQ3ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHAgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQyID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUgPSByZ2IydGVtcGVyYXR1cmVfMTtcblxuICAgIENvbG9yJHAucHJvdG90eXBlLnRlbXAgPVxuICAgIENvbG9yJHAucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IkcC5wcm90b3R5cGUudGVtcGVyYXR1cmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNy50ZW1wID1cbiAgICBjaHJvbWEkNy5rZWx2aW4gPVxuICAgIGNocm9tYSQ3LnRlbXBlcmF0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRwLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsndGVtcCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMi5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQkMi5mb3JtYXQua2VsdmluID1cbiAgICBpbnB1dCQyLmZvcm1hdC50ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlMnJnYl8xO1xuXG4gICAgdmFyIHVucGFjayQ1ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBjYnJ0ID0gTWF0aC5jYnJ0O1xuICAgIHZhciBwb3ckOCA9IE1hdGgucG93O1xuICAgIHZhciBzaWduJDEgPSBNYXRoLnNpZ247XG5cbiAgICB2YXIgcmdiMm9rbGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLy8gT0tMYWIgY29sb3Igc3BhY2UgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbVxuICAgICAgICAvLyBodHRwczovL2JvdHRvc3Nvbi5naXRodWIuaW8vcG9zdHMvb2tsYWIvXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skNShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IFtyZ2IybHJnYihyIC8gMjU1KSwgcmdiMmxyZ2IoZyAvIDI1NSksIHJnYjJscmdiKGIgLyAyNTUpXTtcbiAgICAgICAgdmFyIGxyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBsZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgbGIgPSByZWYkMVsyXTtcbiAgICAgICAgdmFyIGwgPSBjYnJ0KDAuNDEyMjIxNDcwOCAqIGxyICsgMC41MzYzMzI1MzYzICogbGcgKyAwLjA1MTQ0NTk5MjkgKiBsYik7XG4gICAgICAgIHZhciBtID0gY2JydCgwLjIxMTkwMzQ5ODIgKiBsciArIDAuNjgwNjk5NTQ1MSAqIGxnICsgMC4xMDczOTY5NTY2ICogbGIpO1xuICAgICAgICB2YXIgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMC4yMTA0NTQyNTUzICogbCArIDAuNzkzNjE3Nzg1ICogbSAtIDAuMDA0MDcyMDQ2OCAqIHMsXG4gICAgICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgICAgIDAuMDI1OTA0MDM3MSAqIGwgKyAwLjc4Mjc3MTc2NjIgKiBtIC0gMC44MDg2NzU3NjYgKiBzXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsYWJfMSA9IHJnYjJva2xhYiQyO1xuXG4gICAgZnVuY3Rpb24gcmdiMmxyZ2IoYykge1xuICAgICAgICB2YXIgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgICAgIGlmIChhYnMgPCAwLjA0MDQ1KSB7XG4gICAgICAgICAgICByZXR1cm4gYyAvIDEyLjkyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2lnbiQxKGMpIHx8IDEpICogcG93JDgoKGFicyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH1cblxuICAgIHZhciB1bnBhY2skNCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDcgPSBNYXRoLnBvdztcbiAgICB2YXIgc2lnbiA9IE1hdGguc2lnbjtcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBva2xhYjJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJDQoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgTCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBhID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuXG4gICAgICAgIHZhciBsID0gcG93JDcoTCArIDAuMzk2MzM3Nzc3NCAqIGEgKyAwLjIxNTgwMzc1NzMgKiBiLCAzKTtcbiAgICAgICAgdmFyIG0gPSBwb3ckNyhMIC0gMC4xMDU1NjEzNDU4ICogYSAtIDAuMDYzODU0MTcyOCAqIGIsIDMpO1xuICAgICAgICB2YXIgcyA9IHBvdyQ3KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoKzQuMDc2NzQxNjYyMSAqIGwgLSAzLjMwNzcxMTU5MTMgKiBtICsgMC4yMzA5Njk5MjkyICogcyksXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKC0wLjAwNDE5NjA4NjMgKiBsIC0gMC43MDM0MTg2MTQ3ICogbSArIDEuNzA3NjE0NzAxICogcyksXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgb2tsYWIycmdiXzEgPSBva2xhYjJyZ2IkMTtcblxuICAgIGZ1bmN0aW9uIGxyZ2IycmdiKGMpIHtcbiAgICAgICAgdmFyIGFicyA9IE1hdGguYWJzKGMpO1xuICAgICAgICBpZiAoYWJzID4gMC4wMDMxMzA4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3ckNyhhYnMsIDEgLyAyLjQpIC0gMC4wNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjICogMTIuOTI7XG4gICAgfVxuXG4gICAgdmFyIHVucGFjayQzID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDggPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkNiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRvID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMm9rbGFiJDEgPSByZ2Iyb2tsYWJfMTtcblxuICAgIENvbG9yJG8ucHJvdG90eXBlLm9rbGFiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGFiJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDYub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJG8sIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydva2xhYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMS5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2JfMTtcblxuICAgIGlucHV0JDEuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skMyhhcmdzLCAnb2tsYWInKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rbGFiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayQyID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByZ2Iyb2tsYWIgPSByZ2Iyb2tsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCA9IGxhYjJsY2hfMTtcblxuICAgIHZhciByZ2Iyb2tsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJDIoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgICAgIHZhciBsID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBhID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbGFiMmxjaChsLCBhLCBiXyk7XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsY2hfMSA9IHJnYjJva2xjaCQxO1xuXG4gICAgdmFyIHVucGFjayQxID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiID0gbGNoMmxhYl8xO1xuICAgIHZhciBva2xhYjJyZ2IgPSBva2xhYjJyZ2JfMTtcblxuICAgIHZhciBva2xjaDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayQxKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBoID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHJlZiA9IGxjaDJsYWIobCwgYywgaCk7XG4gICAgICAgIHZhciBMID0gcmVmWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgICAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIG9rbGNoMnJnYl8xID0gb2tsY2gycmdiO1xuXG4gICAgdmFyIHVucGFjayA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSQ3ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJDUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkbiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2Iyb2tsY2ggPSByZ2Iyb2tsY2hfMTtcblxuICAgIENvbG9yJG4ucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGNoKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ1Lm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRuLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnb2tsY2gnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYl8xO1xuXG4gICAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ3KGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdva2xjaCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRtID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ2ID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJG0ucHJvdG90eXBlLmFscGhhID0gZnVuY3Rpb24oYSwgbXV0YXRlKSB7XG4gICAgICAgIGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGU9ZmFsc2U7XG5cbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiB0eXBlJDYoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiWzNdID0gYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkbShbdGhpcy5fcmdiWzBdLCB0aGlzLl9yZ2JbMV0sIHRoaXMuX3JnYlsyXSwgYV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkbCA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRsLnByb3RvdHlwZS5jbGlwcGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2IuX2NsaXBwZWQgfHwgZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRrID0gQ29sb3JfMTtcbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQxID0gbGFiQ29uc3RhbnRzO1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHZhciBtZSA9IHRoaXM7XG4gICAgXHR2YXIgbGFiID0gbWUubGFiKCk7XG4gICAgXHRsYWJbMF0gLT0gTEFCX0NPTlNUQU5UUyQxLktuICogYW1vdW50O1xuICAgIFx0cmV0dXJuIG5ldyBDb2xvciRrKGxhYiwgJ2xhYicpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xuICAgIH07XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHRyZXR1cm4gdGhpcy5kYXJrZW4oLWFtb3VudCk7XG4gICAgfTtcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmRhcmtlciA9IENvbG9yJGsucHJvdG90eXBlLmRhcmtlbjtcbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlciA9IENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVuO1xuXG4gICAgdmFyIENvbG9yJGogPSBDb2xvcl8xO1xuXG4gICAgQ29sb3Ikai5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG1jKSB7XG4gICAgICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbW9kZSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHsgcmV0dXJuIHNyY1tpXTsgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gY2hhbm5lbCBcIiArIGNoYW5uZWwgKyBcIiBpbiBtb2RlIFwiICsgbW9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkaSA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkNSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIHBvdyQ2ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgRVBTID0gMWUtNztcbiAgICB2YXIgTUFYX0lURVIgPSAyMDtcblxuICAgIENvbG9yJGkucHJvdG90eXBlLmx1bWluYW5jZSA9IGZ1bmN0aW9uKGx1bSkge1xuICAgICAgICBpZiAobHVtICE9PSB1bmRlZmluZWQgJiYgdHlwZSQ1KGx1bSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobHVtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkoWzAsMCwwLHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTUsdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29tcHV0ZSBuZXcgY29sb3IgdXNpbmcuLi5cbiAgICAgICAgICAgIHZhciBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgIHZhciBtb2RlID0gJ3JnYic7XG4gICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSBNQVhfSVRFUjtcblxuICAgICAgICAgICAgdmFyIHRlc3QgPSBmdW5jdGlvbiAobG93LCBoaWdoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgICAgIHZhciBsbSA9IG1pZC5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciByZ2IgPSAoY3VyX2x1bSA+IGx1bSA/IHRlc3QobmV3IENvbG9yJGkoWzAsMCwwXSksIHRoaXMpIDogdGVzdCh0aGlzLCBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTVdKSkpLnJnYigpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKHJnYi5jb25jYXQoIFt0aGlzLl9yZ2JbM11dKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UuYXBwbHkodm9pZCAwLCAodGhpcy5fcmdiKS5zbGljZSgwLDMpKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgcmdiMmx1bWluYW5jZSA9IGZ1bmN0aW9uIChyLGcsYikge1xuICAgICAgICAvLyByZWxhdGl2ZSBsdW1pbmFuY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICAgICAgciA9IGx1bWluYW5jZV94KHIpO1xuICAgICAgICBnID0gbHVtaW5hbmNlX3goZyk7XG4gICAgICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICAgICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbiAgICB9O1xuXG4gICAgdmFyIGx1bWluYW5jZV94ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCAvPSAyNTU7XG4gICAgICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4LzEyLjkyIDogcG93JDYoKHgrMC4wNTUpLzEuMDU1LCAyLjQpO1xuICAgIH07XG5cbiAgICB2YXIgaW50ZXJwb2xhdG9yJDEgPSB7fTtcblxuICAgIHZhciBDb2xvciRoID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ0ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yJDE7XG5cbiAgICB2YXIgbWl4JDEgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICBpZiAoIGYgPT09IHZvaWQgMCApIGY9MC41O1xuICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMztcbiAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMyBdO1xuXG4gICAgICAgIHZhciBtb2RlID0gcmVzdFswXSB8fCAnbHJnYic7XG4gICAgICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdICYmICFyZXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJpbnRlcnBvbGF0aW9uIG1vZGUgXCIgKyBtb2RlICsgXCIgaXMgbm90IGRlZmluZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlJDQoY29sMSkgIT09ICdvYmplY3QnKSB7IGNvbDEgPSBuZXcgQ29sb3IkaChjb2wxKTsgfVxuICAgICAgICBpZiAodHlwZSQ0KGNvbDIpICE9PSAnb2JqZWN0JykgeyBjb2wyID0gbmV3IENvbG9yJGgoY29sMik7IH1cbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRvclttb2RlXShjb2wxLCBjb2wyLCBmKVxuICAgICAgICAgICAgLmFscGhhKGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRnID0gQ29sb3JfMTtcbiAgICB2YXIgbWl4ID0gbWl4JDE7XG5cbiAgICBDb2xvciRnLnByb3RvdHlwZS5taXggPVxuICAgIENvbG9yJGcucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24oY29sMiwgZikge1xuICAgIFx0aWYgKCBmID09PSB2b2lkIDAgKSBmPTAuNTtcbiAgICBcdHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgIFx0d2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gICAgXHRyZXR1cm4gbWl4LmFwcGx5KHZvaWQgMCwgWyB0aGlzLCBjb2wyLCBmIF0uY29uY2F0KCByZXN0ICkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZiA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRmLnByb3RvdHlwZS5wcmVtdWx0aXBseSA9IGZ1bmN0aW9uKG11dGF0ZSkge1xuICAgIFx0aWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZT1mYWxzZTtcblxuICAgIFx0dmFyIHJnYiA9IHRoaXMuX3JnYjtcbiAgICBcdHZhciBhID0gcmdiWzNdO1xuICAgIFx0aWYgKG11dGF0ZSkge1xuICAgIFx0XHR0aGlzLl9yZ2IgPSBbcmdiWzBdKmEsIHJnYlsxXSphLCByZ2JbMl0qYSwgYV07XG4gICAgXHRcdHJldHVybiB0aGlzO1xuICAgIFx0fSBlbHNlIHtcbiAgICBcdFx0cmV0dXJuIG5ldyBDb2xvciRmKFtyZ2JbMF0qYSwgcmdiWzFdKmEsIHJnYlsyXSphLCBhXSwgJ3JnYicpO1xuICAgIFx0fVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZSA9IENvbG9yXzE7XG4gICAgdmFyIExBQl9DT05TVEFOVFMgPSBsYWJDb25zdGFudHM7XG5cbiAgICBDb2xvciRlLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHR2YXIgbWUgPSB0aGlzO1xuICAgIFx0dmFyIGxjaCA9IG1lLmxjaCgpO1xuICAgIFx0bGNoWzFdICs9IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgXHRpZiAobGNoWzFdIDwgMCkgeyBsY2hbMV0gPSAwOyB9XG4gICAgXHRyZXR1cm4gbmV3IENvbG9yJGUobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIENvbG9yJGUucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0cmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRkID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQzID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJGQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtYywgdmFsdWUsIG11dGF0ZSkge1xuICAgICAgICBpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgICAgICB2YXIgY2hhbm5lbCA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIHZhciBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDModmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAqPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldIC89ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQzKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBDb2xvciRkKHNyYywgbW9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZ2IgPSBvdXQuX3JnYjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRjID0gQ29sb3JfMTtcblxuICAgIHZhciByZ2IgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEuX3JnYjtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkYyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0teHl6MFswXSksXG4gICAgICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdLXh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXS14eXowWzJdKSxcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgIClcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEucmdiID0gcmdiO1xuXG4gICAgdmFyIENvbG9yJGIgPSBDb2xvcl8xO1xuICAgIHZhciBzcXJ0JDIgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIHBvdyQ1ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgbHJnYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciByZWYgPSBjb2wxLl9yZ2I7XG4gICAgICAgIHZhciB4MSA9IHJlZlswXTtcbiAgICAgICAgdmFyIHkxID0gcmVmWzFdO1xuICAgICAgICB2YXIgejEgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGNvbDIuX3JnYjtcbiAgICAgICAgdmFyIHgyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciB5MiA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgejIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRiKFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHgxLDIpICogKDEtZikgKyBwb3ckNSh4MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHkxLDIpICogKDEtZikgKyBwb3ckNSh5MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHoxLDIpICogKDEtZikgKyBwb3ckNSh6MiwyKSAqIGYpLFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5scmdiID0gbHJnYjtcblxuICAgIHZhciBDb2xvciRhID0gQ29sb3JfMTtcblxuICAgIHZhciBsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEubGFiKCk7XG4gICAgICAgIHZhciB4eXoxID0gY29sMi5sYWIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRhKFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXS14eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0teHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdLXh5ejBbMl0pLFxuICAgICAgICAgICAgJ2xhYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5sYWIgPSBsYWI7XG5cbiAgICB2YXIgQ29sb3IkOSA9IENvbG9yXzE7XG5cbiAgICB2YXIgX2hzeCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmLCBtKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxO1xuXG4gICAgICAgIHZhciB4eXowLCB4eXoxO1xuICAgICAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzdigpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHN2KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjZygpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNnKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgICAgIG0gPSAnaGNsJztcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ29rbGNoJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBodWUwLCBodWUxLCBzYXQwLCBzYXQxLCBsYnYwLCBsYnYxO1xuICAgICAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgICAgICAoYXNzaWduID0geHl6MCwgaHVlMCA9IGFzc2lnblswXSwgc2F0MCA9IGFzc2lnblsxXSwgbGJ2MCA9IGFzc2lnblsyXSk7XG4gICAgICAgICAgICAoYXNzaWduJDEgPSB4eXoxLCBodWUxID0gYXNzaWduJDFbMF0sIHNhdDEgPSBhc3NpZ24kMVsxXSwgbGJ2MSA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgICAgICBpZiAoIWlzTmFOKGh1ZTApICYmICFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgICAgIGlmIChodWUxID4gaHVlMCAmJiBodWUxIC0gaHVlMCA+IDE4MCkge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSAtIChodWUwICsgMzYwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgKyAzNjAgLSBodWUwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHVlID0gaHVlMCArIGYgKiBkaDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgICAgIGh1ZSA9IGh1ZTA7XG4gICAgICAgICAgICBpZiAoKGxidjEgPT0gMSB8fCBsYnYxID09IDApICYmIG0gIT0gJ2hzdicpIHsgc2F0ID0gc2F0MDsgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgaHVlID0gaHVlMTtcbiAgICAgICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2JykgeyBzYXQgPSBzYXQxOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNhdCA9PT0gdW5kZWZpbmVkKSB7IHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTsgfVxuICAgICAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgICAgIHJldHVybiBtID09PSAnb2tsY2gnID8gbmV3IENvbG9yJDkoW2xidiwgc2F0LCBodWVdLCBtKSA6IG5ldyBDb2xvciQ5KFtodWUsIHNhdCwgbGJ2XSwgbSk7XG4gICAgfTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkNSA9IF9oc3g7XG5cbiAgICB2YXIgbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkNShjb2wxLCBjb2wyLCBmLCAnbGNoJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxjaCA9IGxjaDtcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2wgPSBsY2g7XG5cbiAgICB2YXIgQ29sb3IkOCA9IENvbG9yXzE7XG5cbiAgICB2YXIgbnVtID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIGMxID0gY29sMS5udW0oKTtcbiAgICAgICAgdmFyIGMyID0gY29sMi5udW0oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ4KGMxICsgZiAqIChjMi1jMSksICdudW0nKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5udW0gPSBudW07XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDQgPSBfaHN4O1xuXG4gICAgdmFyIGhjZyA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDQoY29sMSwgY29sMiwgZiwgJ2hjZycpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2cgPSBoY2c7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDMgPSBfaHN4O1xuXG4gICAgdmFyIGhzaSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDMoY29sMSwgY29sMiwgZiwgJ2hzaScpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2kgPSBoc2k7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDIgPSBfaHN4O1xuXG4gICAgdmFyIGhzbCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDIoY29sMSwgY29sMiwgZiwgJ2hzbCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2wgPSBoc2w7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDEgPSBfaHN4O1xuXG4gICAgdmFyIGhzdiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDEoY29sMSwgY29sMiwgZiwgJ2hzdicpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc3YgPSBoc3Y7XG5cbiAgICB2YXIgQ29sb3IkNyA9IENvbG9yXzE7XG5cbiAgICB2YXIgb2tsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEub2tsYWIoKTtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgICAgICdva2xhYidcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsYWIgPSBva2xhYjtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3ggPSBfaHN4O1xuXG4gICAgdmFyIG9rbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnb2tsY2gnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsY2ggPSBva2xjaDtcblxuICAgIHZhciBDb2xvciQ2ID0gQ29sb3JfMTtcbiAgICB2YXIgY2xpcF9yZ2IkMSA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciBwb3ckNCA9IE1hdGgucG93O1xuICAgIHZhciBzcXJ0JDEgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIFBJJDEgPSBNYXRoLlBJO1xuICAgIHZhciBjb3MkMiA9IE1hdGguY29zO1xuICAgIHZhciBzaW4kMiA9IE1hdGguc2luO1xuICAgIHZhciBhdGFuMiQxID0gTWF0aC5hdGFuMjtcblxuICAgIHZhciBhdmVyYWdlID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgd2VpZ2h0cykge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2xyZ2InO1xuICAgICAgICBpZiAoIHdlaWdodHMgPT09IHZvaWQgMCApIHdlaWdodHM9bnVsbDtcblxuICAgICAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIGlmICghd2VpZ2h0cykgeyB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9KTsgfVxuICAgICAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgICAgICB2YXIgayA9IGwgLyB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhICsgYjsgfSk7XG4gICAgICAgIHdlaWdodHMuZm9yRWFjaChmdW5jdGlvbiAodyxpKSB7IHdlaWdodHNbaV0gKj0gazsgfSk7XG4gICAgICAgIC8vIGNvbnZlcnQgY29sb3JzIHRvIENvbG9yIG9iamVjdHNcbiAgICAgICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gbmV3IENvbG9yJDYoYyk7IH0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgICAgICByZXR1cm4gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgICAgIHZhciB4eXogPSBmaXJzdC5nZXQobW9kZSk7XG4gICAgICAgIHZhciBjbnQgPSBbXTtcbiAgICAgICAgdmFyIGR4ID0gMDtcbiAgICAgICAgdmFyIGR5ID0gMDtcbiAgICAgICAgLy8gaW5pdGlhbCBjb2xvclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8eHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4eXpbaV0gPSAoeHl6W2ldIHx8IDApICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJyAmJiAhaXNOYU4oeHl6W2ldKSkge1xuICAgICAgICAgICAgICAgIHZhciBBID0geHl6W2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICBkeCArPSBjb3MkMihBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICAgICAgZHkgKz0gc2luJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNvbG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChjLGNpKSB7XG4gICAgICAgICAgICB2YXIgeHl6MiA9IGMuZ2V0KG1vZGUpO1xuICAgICAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHh5ejJbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEEgPSB4eXoyW2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICs9IGNvcyQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbiQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHh5eltpXSArPSB4eXoyW2ldICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTx4eXoubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkkMSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgIHZhciBBJDEgPSBhdGFuMiQxKGR5IC8gY250W2kkMV0sIGR4IC8gY250W2kkMV0pIC8gUEkkMSAqIDE4MDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoQSQxIDwgMCkgeyBBJDEgKz0gMzYwOyB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKEEkMSA+PSAzNjApIHsgQSQxIC09IDM2MDsgfVxuICAgICAgICAgICAgICAgIHh5eltpJDFdID0gQSQxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4eXpbaSQxXSA9IHh5eltpJDFdL2NudFtpJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFscGhhIC89IGw7XG4gICAgICAgIHJldHVybiAobmV3IENvbG9yJDYoeHl6LCBtb2RlKSkuYWxwaGEoYWxwaGEgPiAwLjk5OTk5ID8gMSA6IGFscGhhLCB0cnVlKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgX2F2ZXJhZ2VfbHJnYiA9IGZ1bmN0aW9uIChjb2xvcnMsIHdlaWdodHMpIHtcbiAgICAgICAgdmFyIGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICB2YXIgeHl6ID0gWzAsMCwwLDBdO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgICAgICB2YXIgZiA9IHdlaWdodHNbaV0gLyBsO1xuICAgICAgICAgICAgdmFyIHJnYiA9IGNvbC5fcmdiO1xuICAgICAgICAgICAgeHl6WzBdICs9IHBvdyQ0KHJnYlswXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbMV0gKz0gcG93JDQocmdiWzFdLDIpICogZjtcbiAgICAgICAgICAgIHh5elsyXSArPSBwb3ckNChyZ2JbMl0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzNdICs9IHJnYlszXSAqIGY7XG4gICAgICAgIH1cbiAgICAgICAgeHl6WzBdID0gc3FydCQxKHh5elswXSk7XG4gICAgICAgIHh5elsxXSA9IHNxcnQkMSh4eXpbMV0pO1xuICAgICAgICB4eXpbMl0gPSBzcXJ0JDEoeHl6WzJdKTtcbiAgICAgICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkgeyB4eXpbM10gPSAxOyB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNihjbGlwX3JnYiQxKHh5eikpO1xuICAgIH07XG5cbiAgICAvLyBtaW5pbWFsIG11bHRpLXB1cnBvc2UgaW50ZXJmYWNlXG5cbiAgICAvLyBAcmVxdWlyZXMgdXRpbHMgY29sb3IgYW5hbHl6ZVxuXG4gICAgdmFyIGNocm9tYSQ0ID0gY2hyb21hXzE7XG4gICAgdmFyIHR5cGUkMiA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcG93JDMgPSBNYXRoLnBvdztcblxuICAgIHZhciBzY2FsZSQyID0gZnVuY3Rpb24oY29sb3JzKSB7XG5cbiAgICAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgdmFyIF9tb2RlID0gJ3JnYic7XG4gICAgICAgIHZhciBfbmFjb2wgPSBjaHJvbWEkNCgnI2NjYycpO1xuICAgICAgICB2YXIgX3NwcmVhZCA9IDA7XG4gICAgICAgIC8vIGNvbnN0IF9maXhlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgX2RvbWFpbiA9IFswLCAxXTtcbiAgICAgICAgdmFyIF9wb3MgPSBbXTtcbiAgICAgICAgdmFyIF9wYWRkaW5nID0gWzAsMF07XG4gICAgICAgIHZhciBfY2xhc3NlcyA9IGZhbHNlO1xuICAgICAgICB2YXIgX2NvbG9ycyA9IFtdO1xuICAgICAgICB2YXIgX291dCA9IGZhbHNlO1xuICAgICAgICB2YXIgX21pbiA9IDA7XG4gICAgICAgIHZhciBfbWF4ID0gMTtcbiAgICAgICAgdmFyIF9jb3JyZWN0TGlnaHRuZXNzID0gZmFsc2U7XG4gICAgICAgIHZhciBfY29sb3JDYWNoZSA9IHt9O1xuICAgICAgICB2YXIgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9nYW1tYSA9IDE7XG5cbiAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzXG5cbiAgICAgICAgdmFyIHNldENvbG9ycyA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG4gICAgICAgICAgICBpZiAoY29sb3JzICYmIHR5cGUkMihjb2xvcnMpID09PSAnc3RyaW5nJyAmJiBjaHJvbWEkNC5icmV3ZXIgJiZcbiAgICAgICAgICAgICAgICBjaHJvbWEkNC5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gY2hyb21hJDQuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlJDIoY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBbY29sb3JzWzBdLCBjb2xvcnNbMF1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG4gICAgICAgICAgICAgICAgY29sb3JzID0gY29sb3JzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTA7IGM8Y29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYSQ0KGNvbG9yc1tjXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGF1dG8tZmlsbCBjb2xvciBwb3NpdGlvblxuICAgICAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjJDE9MDsgYyQxPGNvbG9ycy5sZW5ndGg7IGMkMSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9wb3MucHVzaChjJDEvKGNvbG9ycy5sZW5ndGgtMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBfY29sb3JzID0gY29sb3JzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBnZXRDbGFzcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuICAgICAgICB2YXIgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuXG4gICAgICAgIC8vIGNvbnN0IGNsYXNzaWZ5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyAgICAgbGV0IHZhbCA9IHZhbHVlO1xuICAgICAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgaSA9IGdldENsYXNzKHZhbHVlKTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbWF4YyA9IF9jbGFzc2VzW24tMV0gKyAoKF9jbGFzc2VzW25dLV9jbGFzc2VzW24tMV0pICogKDEgLSAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiBsYXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgdmFsID0gX21pbiArICgoKChfY2xhc3Nlc1tpXSArICgoX2NsYXNzZXNbaSsxXSAtIF9jbGFzc2VzW2ldKSAqIDAuNSkpIC0gbWluYykgLyAobWF4Yy1taW5jKSkgKiAoX21heCAtIF9taW4pKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiB2YWw7XG4gICAgICAgIC8vIH07XG5cbiAgICAgICAgdmFyIGdldENvbG9yID0gZnVuY3Rpb24odmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHZhciBjb2wsIHQ7XG4gICAgICAgICAgICBpZiAoYnlwYXNzTWFwID09IG51bGwpIHsgYnlwYXNzTWFwID0gZmFsc2U7IH1cbiAgICAgICAgICAgIGlmIChpc05hTih2YWwpIHx8ICh2YWwgPT09IG51bGwpKSB7IHJldHVybiBfbmFjb2w7IH1cbiAgICAgICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBjbGFzc1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGdldENsYXNzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBjIC8gKF9jbGFzc2VzLmxlbmd0aC0yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIG1pbi9tYXhcbiAgICAgICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ID0gdmFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkb21haW4gbWFwXG4gICAgICAgICAgICB0ID0gdE1hcERvbWFpbih0KTtcblxuICAgICAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgICAgICB0ID0gdE1hcExpZ2h0bmVzcyh0KTsgIC8vIGxpZ2h0bmVzcyBjb3JyZWN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfZ2FtbWEgIT09IDEpIHsgdCA9IHBvdyQzKHQsIF9nYW1tYSk7IH1cblxuICAgICAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgKHQgKiAoMSAtIF9wYWRkaW5nWzBdIC0gX3BhZGRpbmdbMV0pKTtcblxuICAgICAgICAgICAgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHQpKTtcblxuICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUgJiYgX2NvbG9yQ2FjaGVba10pIHtcbiAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JDYWNoZVtrXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8X3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgPj0gcCkgJiYgKGkgPT09IChfcG9zLmxlbmd0aC0xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2krMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQtcCkvKF9wb3NbaSsxXS1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBjaHJvbWEkNC5pbnRlcnBvbGF0ZShfY29sb3JzW2ldLCBfY29sb3JzW2krMV0sIHQsIF9tb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQyKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnModCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHsgX2NvbG9yQ2FjaGVba10gPSBjb2w7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfY29sb3JDYWNoZSA9IHt9OyB9O1xuXG4gICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgICAgIC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHZhciBjID0gY2hyb21hJDQoZ2V0Q29sb3IodikpO1xuICAgICAgICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkgeyByZXR1cm4gY1tfb3V0XSgpOyB9IGVsc2UgeyByZXR1cm4gYzsgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIGlmIChjbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKGNsYXNzZXMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gY2xhc3NlcztcbiAgICAgICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoLTFdXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGNocm9tYSQ0LmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IFtkLm1pbiwgZC5tYXhdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjaHJvbWEkNC5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY2xhc3NlcztcbiAgICAgICAgfTtcblxuXG4gICAgICAgIGYuZG9tYWluID0gZnVuY3Rpb24oZG9tYWluKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2RvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgICAgICBfbWF4ID0gZG9tYWluW2RvbWFpbi5sZW5ndGgtMV07XG4gICAgICAgICAgICBfcG9zID0gW107XG4gICAgICAgICAgICB2YXIgayA9IF9jb2xvcnMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKChkb21haW4ubGVuZ3RoID09PSBrKSAmJiAoX21pbiAhPT0gX21heCkpIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb25zXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBBcnJheS5mcm9tKGRvbWFpbik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKChkLV9taW4pIC8gKF9tYXgtX21pbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYz0wOyBjPGs7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICBfcG9zLnB1c2goYy8oay0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgZG9tYWluIG1hcFxuICAgICAgICAgICAgICAgICAgICB2YXIgdE91dCA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQsaSkgeyByZXR1cm4gaS8oZG9tYWluLmxlbmd0aC0xKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0QnJlYWtzID0gZG9tYWluLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbik7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRCcmVha3MuZXZlcnkoZnVuY3Rpb24gKHZhbCwgaSkgeyByZXR1cm4gdE91dFtpXSA9PT0gdmFsOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHsgcmV0dXJuIHQ7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpKzFdKSB7IGkrKzsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2krMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpKzFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLm1vZGUgPSBmdW5jdGlvbihfbSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9tb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucmFuZ2UgPSBmdW5jdGlvbihjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5vdXQgPSBmdW5jdGlvbihfbykge1xuICAgICAgICAgICAgX291dCA9IF9vO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5zcHJlYWQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3ByZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY29ycmVjdExpZ2h0bmVzcyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHsgdiA9IHRydWU7IH1cbiAgICAgICAgICAgIF9jb3JyZWN0TGlnaHRuZXNzID0gdjtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMMCA9IGdldENvbG9yKDAsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTDEgPSBnZXRDb2xvcigxLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9pZGVhbCA9IEwwICsgKChMMSAtIEwwKSAqIHQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDAgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChNYXRoLmFicyhMX2RpZmYpID4gMWUtMikgJiYgKG1heF9pdGVyLS0gPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHsgTF9kaWZmICo9IC0xOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTF9hY3R1YWwgPSBnZXRDb2xvcih0LCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnBhZGRpbmcgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICBpZiAocCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihwKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IFtwLHBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfcGFkZGluZyA9IHA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmNvbG9ycyA9IGZ1bmN0aW9uKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbG9ycyB0aGF0IHdlcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgeyBvdXQgPSAnaGV4JzsgfVxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW2YoMC41KV07XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID4gMSkge1xuICAgICAgICAgICAgICAgIHZhciBkbSA9IF9kb21haW5bMF07XG4gICAgICAgICAgICAgICAgdmFyIGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGYoIGRtICsgKChpLyhudW1Db2xvcnMtMSkpICogZGQpICk7IH0pO1xuXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyByZXR1cm5zIGFsbCBjb2xvcnMgYmFzZWQgb24gdGhlIGRlZmluZWQgY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBzYW1wbGVzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDsgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzYyA/IGkrKyA6IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5wdXNoKChfY2xhc3Nlc1tpLTFdK19jbGFzc2VzW2ldKSowLjUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IF9kb21haW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmKHYpOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNocm9tYSQ0W291dF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjW291dF0oKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2FjaGUgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3VzZUNhY2hlID0gYztcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF91c2VDYWNoZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmdhbW1hID0gZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5ub2RhdGEgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX25hY29sID0gY2hyb21hJDQoZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBbXTtcbiAgICAgIHZhciBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgICB2YXIgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgICAgZm9yICh2YXIgaSA9IGxlZnQ7IGFzY2VuZGluZyA/IGkgPCBlbmQgOiBpID4gZW5kOyBhc2NlbmRpbmcgPyBpKysgOiBpLS0pIHtcbiAgICAgICAgcmFuZ2UucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAvL1xuXG4gICAgLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuICAgIHZhciBDb2xvciQ1ID0gQ29sb3JfMTtcblxuICAgIHZhciBzY2FsZSQxID0gc2NhbGUkMjtcblxuICAgIC8vIG50aCByb3cgb2YgdGhlIHBhc2NhbCB0cmlhbmdsZVxuICAgIHZhciBiaW5vbV9yb3cgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciByb3cgPSBbMSwgMV07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmV3cm93ID0gWzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3cm93W2pdID0gKHJvd1tqXSB8fCAwKSArIHJvd1tqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuXG4gICAgdmFyIGJlemllciA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDI7XG5cbiAgICAgICAgdmFyIEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5ldyBDb2xvciQ1KGMpOyB9KTtcbiAgICAgICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICAoYXNzaWduID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ25bMF0sIGxhYjEgPSBhc3NpZ25bMV0pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGxhYjBbaV0gKyAodCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAvLyBxdWFkcmF0aWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIChhc3NpZ24kMSA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pLCBsYWIwID0gYXNzaWduJDFbMF0sIGxhYjEgPSBhc3NpZ24kMVsxXSwgbGFiMiA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKDEtdCkqKDEtdCkgKiBsYWIwW2ldKSArICgyICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAodCAqIHQgKiBsYWIyW2ldKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIHZhciBsYWIzO1xuICAgICAgICAgICAgKGFzc2lnbiQyID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ24kMlswXSwgbGFiMSA9IGFzc2lnbiQyWzFdLCBsYWIyID0gYXNzaWduJDJbMl0sIGxhYjMgPSBhc3NpZ24kMlszXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gKCgxLXQpKigxLXQpKigxLXQpICogbGFiMFtpXSkgKyAoMyAqICgxLXQpICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAoMyAqICgxLXQpICogdCAqIHQgKiBsYWIyW2ldKSArICh0KnQqdCAqIGxhYjNbaV0pOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID49IDUpIHtcbiAgICAgICAgICAgIC8vIGdlbmVyYWwgY2FzZSAoZGVncmVlIG4gYmV6aWVyKVxuICAgICAgICAgICAgdmFyIGxhYnMsIHJvdywgbjtcbiAgICAgICAgICAgIGxhYnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KTtcbiAgICAgICAgICAgIG4gPSBjb2xvcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHZhciB1ID0gMSAtIHQ7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBsYWJzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBlbCwgaikgeyByZXR1cm4gKHN1bSArIHJvd1tqXSAqIE1hdGgucG93KCB1LCAobiAtIGopICkgKiBNYXRoLnBvdyggdCwgaiApICogZWxbaV0pOyB9LCAwKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuXCIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEk7XG4gICAgfTtcblxuICAgIHZhciBiZXppZXJfMSA9IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAgICAgdmFyIGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICAgICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjYWxlJDEoZik7IH07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAgKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cDovL3d3dy52ZW50dXJlLXdhcmUuY29tL2tldmluL2NvZGluZy9sZXRzLWxlYXJuLW1hdGgtcGhvdG9zaG9wLWJsZW5kLW1vZGVzL1xuICAgICAqL1xuXG4gICAgdmFyIGNocm9tYSQzID0gY2hyb21hXzE7XG5cbiAgICB2YXIgYmxlbmQgPSBmdW5jdGlvbiAoYm90dG9tLCB0b3AsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG4gICAgfTtcblxuICAgIHZhciBibGVuZF9mID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChib3R0b20sdG9wKSB7XG4gICAgICAgICAgICB2YXIgYzAgPSBjaHJvbWEkMyh0b3ApLnJnYigpO1xuICAgICAgICAgICAgdmFyIGMxID0gY2hyb21hJDMoYm90dG9tKS5yZ2IoKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMy5yZ2IoZihjMCwgYzEpKTtcbiAgICAgICAgfTsgfTtcblxuICAgIHZhciBlYWNoID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChjMCwgYzEpIHtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICAgICAgICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICAgICAgICAgIG91dFsyXSA9IGYoYzBbMl0sIGMxWzJdKTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07IH07XG5cbiAgICB2YXIgbm9ybWFsID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGE7IH07XG4gICAgdmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSAqIGIgLyAyNTU7IH07XG4gICAgdmFyIGRhcmtlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgPiBiID8gYiA6IGE7IH07XG4gICAgdmFyIGxpZ2h0ZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhID4gYiA/IGEgOiBiOyB9O1xuICAgIHZhciBzY3JlZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiAyNTUgKiAoMSAtICgxLWEvMjU1KSAqICgxLWIvMjU1KSk7IH07XG4gICAgdmFyIG92ZXJsYXkgPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBiIDwgMTI4ID8gMiAqIGEgKiBiIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1ICkgKiAoIDEgLSBiIC8gMjU1ICkpOyB9O1xuICAgIHZhciBidXJuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gMjU1ICogKDEgLSAoMSAtIGIgLyAyNTUpIC8gKGEvMjU1KSk7IH07XG4gICAgdmFyIGRvZGdlID0gZnVuY3Rpb24gKGEsYikge1xuICAgICAgICBpZiAoYSA9PT0gMjU1KSB7IHJldHVybiAyNTU7IH1cbiAgICAgICAgYSA9IDI1NSAqIChiIC8gMjU1KSAvICgxIC0gYSAvIDI1NSk7XG4gICAgICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYVxuICAgIH07XG5cbiAgICAvLyAjIGFkZCA9IChhLGIpIC0+XG4gICAgLy8gIyAgICAgaWYgKGEgKyBiID4gMjU1KSB0aGVuIDI1NSBlbHNlIGEgKyBiXG5cbiAgICBibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG4gICAgYmxlbmQubXVsdGlwbHkgPSBibGVuZF9mKGVhY2gobXVsdGlwbHkpKTtcbiAgICBibGVuZC5zY3JlZW4gPSBibGVuZF9mKGVhY2goc2NyZWVuKSk7XG4gICAgYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG4gICAgYmxlbmQuZGFya2VuID0gYmxlbmRfZihlYWNoKGRhcmtlbikpO1xuICAgIGJsZW5kLmxpZ2h0ZW4gPSBibGVuZF9mKGVhY2gobGlnaHRlbikpO1xuICAgIGJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG4gICAgYmxlbmQuYnVybiA9IGJsZW5kX2YoZWFjaChidXJuKSk7XG4gICAgLy8gYmxlbmQuYWRkID0gYmxlbmRfZihlYWNoKGFkZCkpO1xuXG4gICAgdmFyIGJsZW5kXzEgPSBibGVuZDtcblxuICAgIC8vIGN1YmVoZWxpeCBpbnRlcnBvbGF0aW9uXG4gICAgLy8gYmFzZWQgb24gRC5BLiBHcmVlbiBcIkEgY29sb3VyIHNjaGVtZSBmb3IgdGhlIGRpc3BsYXkgb2YgYXN0cm9ub21pY2FsIGludGVuc2l0eSBpbWFnZXNcIlxuICAgIC8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5cbiAgICB2YXIgdHlwZSQxID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2xpcF9yZ2IgPSB1dGlscy5jbGlwX3JnYjtcbiAgICB2YXIgVFdPUEkgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgcG93JDIgPSBNYXRoLnBvdztcbiAgICB2YXIgc2luJDEgPSBNYXRoLnNpbjtcbiAgICB2YXIgY29zJDEgPSBNYXRoLmNvcztcbiAgICB2YXIgY2hyb21hJDIgPSBjaHJvbWFfMTtcblxuICAgIHZhciBjdWJlaGVsaXggPSBmdW5jdGlvbihzdGFydCwgcm90YXRpb25zLCBodWUsIGdhbW1hLCBsaWdodG5lc3MpIHtcbiAgICAgICAgaWYgKCBzdGFydCA9PT0gdm9pZCAwICkgc3RhcnQ9MzAwO1xuICAgICAgICBpZiAoIHJvdGF0aW9ucyA9PT0gdm9pZCAwICkgcm90YXRpb25zPS0xLjU7XG4gICAgICAgIGlmICggaHVlID09PSB2b2lkIDAgKSBodWU9MTtcbiAgICAgICAgaWYgKCBnYW1tYSA9PT0gdm9pZCAwICkgZ2FtbWE9MTtcbiAgICAgICAgaWYgKCBsaWdodG5lc3MgPT09IHZvaWQgMCApIGxpZ2h0bmVzcz1bMCwxXTtcblxuICAgICAgICB2YXIgZGggPSAwLCBkbDtcbiAgICAgICAgaWYgKHR5cGUkMShsaWdodG5lc3MpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRsID0gMDtcbiAgICAgICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKGZyYWN0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IFRXT1BJICogKCgoc3RhcnQrMTIwKS8zNjApICsgKHJvdGF0aW9ucyAqIGZyYWN0KSk7XG4gICAgICAgICAgICB2YXIgbCA9IHBvdyQyKGxpZ2h0bmVzc1swXSArIChkbCAqIGZyYWN0KSwgZ2FtbWEpO1xuICAgICAgICAgICAgdmFyIGggPSBkaCAhPT0gMCA/IGh1ZVswXSArIChmcmFjdCAqIGRoKSA6IGh1ZTtcbiAgICAgICAgICAgIHZhciBhbXAgPSAoaCAqIGwgKiAoMS1sKSkgLyAyO1xuICAgICAgICAgICAgdmFyIGNvc19hID0gY29zJDEoYSk7XG4gICAgICAgICAgICB2YXIgc2luX2EgPSBzaW4kMShhKTtcbiAgICAgICAgICAgIHZhciByID0gbCArIChhbXAgKiAoKC0wLjE0ODYxICogY29zX2EpICsgKDEuNzgyNzcqIHNpbl9hKSkpO1xuICAgICAgICAgICAgdmFyIGcgPSBsICsgKGFtcCAqICgoLTAuMjkyMjcgKiBjb3NfYSkgLSAoMC45MDY0OSogc2luX2EpKSk7XG4gICAgICAgICAgICB2YXIgYiA9IGwgKyAoYW1wICogKCsxLjk3Mjk0ICogY29zX2EpKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMihjbGlwX3JnYihbcioyNTUsZyoyNTUsYioyNTUsMV0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnN0YXJ0ID0gZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgaWYgKChzID09IG51bGwpKSB7IHJldHVybiBzdGFydDsgfVxuICAgICAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5yb3RhdGlvbnMgPSBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICBpZiAoKHIgPT0gbnVsbCkpIHsgcmV0dXJuIHJvdGF0aW9uczsgfVxuICAgICAgICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuZ2FtbWEgPSBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICBpZiAoKGcgPT0gbnVsbCkpIHsgcmV0dXJuIGdhbW1hOyB9XG4gICAgICAgICAgICBnYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmh1ZSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gaHVlOyB9XG4gICAgICAgICAgICBodWUgPSBoO1xuICAgICAgICAgICAgaWYgKHR5cGUkMShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG4gICAgICAgICAgICAgICAgaWYgKGRoID09PSAwKSB7IGh1ZSA9IGh1ZVsxXTsgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gbGlnaHRuZXNzOyB9XG4gICAgICAgICAgICBpZiAodHlwZSQxKGgpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgICAgICBkbCA9IGhbMV0gLSBoWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaWdodG5lc3MgPSBbaCxoXTtcbiAgICAgICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hyb21hJDIuc2NhbGUoZik7IH07XG5cbiAgICAgICAgZi5odWUoaHVlKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDQgPSBDb2xvcl8xO1xuICAgIHZhciBkaWdpdHMgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgICB2YXIgZmxvb3IkMSA9IE1hdGguZmxvb3I7XG4gICAgdmFyIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuXG4gICAgdmFyIHJhbmRvbV8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29kZSA9ICcjJztcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yJDEocmFuZG9tKCkgKiAxNikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNChjb2RlLCAnaGV4Jyk7XG4gICAgfTtcblxuICAgIHZhciB0eXBlID0gdHlwZSRwO1xuICAgIHZhciBsb2cgPSBNYXRoLmxvZztcbiAgICB2YXIgcG93JDEgPSBNYXRoLnBvdztcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG5cbiAgICB2YXIgYW5hbHl6ZSA9IGZ1bmN0aW9uIChkYXRhLCBrZXkpIHtcbiAgICAgICAgaWYgKCBrZXkgPT09IHZvaWQgMCApIGtleT1udWxsO1xuXG4gICAgICAgIHZhciByID0ge1xuICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTUFYX1ZBTFVFKi0xLFxuICAgICAgICAgICAgc3VtOiAwLFxuICAgICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICAgIGNvdW50OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlKGRhdGEpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgeyB2YWwgPSB2YWxba2V5XTsgfVxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiAhaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICByLnN1bSArPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IHIubWluKSB7IHIubWluID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA+IHIubWF4KSB7IHIubWF4ID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgICAgIHIubGltaXRzID0gZnVuY3Rpb24gKG1vZGUsIG51bSkgeyByZXR1cm4gbGltaXRzKHIsIG1vZGUsIG51bSk7IH07XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuXG4gICAgdmFyIGxpbWl0cyA9IGZ1bmN0aW9uIChkYXRhLCBtb2RlLCBudW0pIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdlcXVhbCc7XG4gICAgICAgIGlmICggbnVtID09PSB2b2lkIDAgKSBudW09NztcblxuICAgICAgICBpZiAodHlwZShkYXRhKSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gZGF0YS5taW47XG4gICAgICAgIHZhciBtYXggPSBkYXRhLm1heDtcbiAgICAgICAgdmFyIHZhbHVlcyA9IGRhdGEudmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYS1iOyB9KTtcblxuICAgICAgICBpZiAobnVtID09PSAxKSB7IHJldHVybiBbbWluLG1heF07IH1cblxuICAgICAgICB2YXIgbGltaXRzID0gW107XG5cbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdjJykgeyAvLyBjb250aW51b3VzXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnZScpIHsgLy8gZXF1YWwgaW50ZXJ2YWxcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTE7IGk8bnVtOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChtaW4rKChpL251bSkqKG1heC1taW4pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2wnKSB7IC8vIGxvZyBzY2FsZVxuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW5fbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWluKTtcbiAgICAgICAgICAgIHZhciBtYXhfbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWF4KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDE9MTsgaSQxPG51bTsgaSQxKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChwb3ckMSgxMCwgbWluX2xvZyArICgoaSQxL251bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdxJykgeyAvLyBxdWFudGlsZSBzY2FsZVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMj0xOyBpJDI8bnVtOyBpJDIrKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gKCh2YWx1ZXMubGVuZ3RoLTEpICogaSQyKS9udW07XG4gICAgICAgICAgICAgICAgdmFyIHBiID0gZmxvb3IocCk7XG4gICAgICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgICAgICB2YXIgcHIgPSBwIC0gcGI7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKCh2YWx1ZXNbcGJdKigxLXByKSkgKyAodmFsdWVzW3BiKzFdKnByKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2snKSB7IC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gICAgICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgY2x1c3RlcjtcbiAgICAgICAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgICAgIHZhciBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG5iX2l0ZXJzID0gMDtcbiAgICAgICAgICAgIHZhciBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBnZXQgc2VlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNlbnRyb2lkcyA9IFtdO1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0xOyBpJDM8bnVtOyBpJDMrKykge1xuICAgICAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArICgoaSQzL251bSkgKiAobWF4LW1pbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXBlYXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IHN0ZXBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8bnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ0PTA7IGkkNDxuOyBpJDQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaSQ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmVzdCA9ICh2b2lkIDApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDE9MDsgaiQxPG51bTsgaiQxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gYWJzJDEoY2VudHJvaWRzW2okMV0tdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBtaW5kaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGokMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tiZXN0XSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaSQ0XSA9IGJlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2VudHJvaWRzIHN0ZXBcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q2VudHJvaWRzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQyPTA7IGokMjxudW07IGokMisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDJdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ1PTA7IGkkNTxuOyBpJDUrKykge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gKz0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQzPTA7IGokMzxudW07IGokMysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDNdICo9IDEvY2x1c3RlclNpemVzW2okM107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY29udmVyZ2VuY2VcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDQ9MDsgaiQ0PG51bTsgaiQ0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqJDRdICE9PSBjZW50cm9pZHNbaiQ0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2VudHJvaWRzID0gbmV3Q2VudHJvaWRzO1xuICAgICAgICAgICAgICAgIG5iX2l0ZXJzKys7XG5cbiAgICAgICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgICAgIC8vIHRoZSBuZXh0IHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBnYWJyaWVsZmxvci5pdFxuICAgICAgICAgICAgdmFyIGtDbHVzdGVycyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaiQ1PTA7IGokNTxudW07IGokNSsrKSB7XG4gICAgICAgICAgICAgICAga0NsdXN0ZXJzW2okNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkkNj0wOyBpJDY8bjsgaSQ2KyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ2XTtcbiAgICAgICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaSQ2XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdG1wS01lYW5zQnJlYWtzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqJDY9MDsgaiQ2PG51bTsgaiQ2KyspIHtcbiAgICAgICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVswXSk7XG4gICAgICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1ba0NsdXN0ZXJzW2okNl0ubGVuZ3RoLTFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KGZ1bmN0aW9uIChhLGIpeyByZXR1cm4gYS1iOyB9KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDc9MTsgaSQ3IDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSQ3Kz0gMikge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdG1wS01lYW5zQnJlYWtzW2kkN107XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiAobGltaXRzLmluZGV4T2YodikgPT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9O1xuXG4gICAgdmFyIGFuYWx5emVfMSA9IHthbmFseXplOiBhbmFseXplLCBsaW1pdHM6IGxpbWl0c307XG5cbiAgICB2YXIgQ29sb3IkMyA9IENvbG9yXzE7XG5cblxuICAgIHZhciBjb250cmFzdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWZcbiAgICAgICAgYSA9IG5ldyBDb2xvciQzKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDMoYik7XG4gICAgICAgIHZhciBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgICAgIHZhciBsMiA9IGIubHVtaW5hbmNlKCk7XG4gICAgICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciQyID0gQ29sb3JfMTtcbiAgICB2YXIgc3FydCA9IE1hdGguc3FydDtcbiAgICB2YXIgcG93ID0gTWF0aC5wb3c7XG4gICAgdmFyIG1pbiA9IE1hdGgubWluO1xuICAgIHZhciBtYXggPSBNYXRoLm1heDtcbiAgICB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciBhYnMgPSBNYXRoLmFicztcbiAgICB2YXIgY29zID0gTWF0aC5jb3M7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luO1xuICAgIHZhciBleHAgPSBNYXRoLmV4cDtcbiAgICB2YXIgUEkgPSBNYXRoLlBJO1xuXG4gICAgdmFyIGRlbHRhRSA9IGZ1bmN0aW9uKGEsIGIsIEtsLCBLYywgS2gpIHtcbiAgICAgICAgaWYgKCBLbCA9PT0gdm9pZCAwICkgS2w9MTtcbiAgICAgICAgaWYgKCBLYyA9PT0gdm9pZCAwICkgS2M9MTtcbiAgICAgICAgaWYgKCBLaCA9PT0gdm9pZCAwICkgS2g9MTtcblxuICAgICAgICAvLyBEZWx0YSBFIChDSUUgMjAwMClcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0RlbHRhRV9DSUUyMDAwLmh0bWxcbiAgICAgICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgICAgIHJldHVybiAzNjAgKiByYWQgLyAoMiAqIFBJKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbihkZWcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICAgICAgfTtcbiAgICAgICAgYSA9IG5ldyBDb2xvciQyKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDIoYik7XG4gICAgICAgIHZhciByZWYgPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgICAgICB2YXIgTDEgPSByZWZbMF07XG4gICAgICAgIHZhciBhMSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIxID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgICAgICB2YXIgTDIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEyID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiMiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgYXZnTCA9IChMMSArIEwyKS8yO1xuICAgICAgICB2YXIgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMyID0gc3FydChwb3coYTIsIDIpICsgcG93KGIyLCAyKSk7XG4gICAgICAgIHZhciBhdmdDID0gKEMxICsgQzIpLzI7XG4gICAgICAgIHZhciBHID0gMC41KigxLXNxcnQocG93KGF2Z0MsIDcpLyhwb3coYXZnQywgNykgKyBwb3coMjUsIDcpKSkpO1xuICAgICAgICB2YXIgYTFwID0gYTEqKDErRyk7XG4gICAgICAgIHZhciBhMnAgPSBhMiooMStHKTtcbiAgICAgICAgdmFyIEMxcCA9IHNxcnQocG93KGExcCwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMycCA9IHNxcnQocG93KGEycCwgMikgKyBwb3coYjIsIDIpKTtcbiAgICAgICAgdmFyIGF2Z0NwID0gKEMxcCArIEMycCkvMjtcbiAgICAgICAgdmFyIGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICAgICAgdmFyIGFyY3RhbjIgPSByYWQyZGVnKGF0YW4yKGIyLCBhMnApKTtcbiAgICAgICAgdmFyIGgxcCA9IGFyY3RhbjEgPj0gMCA/IGFyY3RhbjEgOiBhcmN0YW4xICsgMzYwO1xuICAgICAgICB2YXIgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgICAgIHZhciBhdmdIcCA9IGFicyhoMXAgLSBoMnApID4gMTgwID8gKGgxcCArIGgycCArIDM2MCkvMiA6IChoMXAgKyBoMnApLzI7XG4gICAgICAgIHZhciBUID0gMSAtIDAuMTcqY29zKGRlZzJyYWQoYXZnSHAgLSAzMCkpICsgMC4yNCpjb3MoZGVnMnJhZCgyKmF2Z0hwKSkgKyAwLjMyKmNvcyhkZWcycmFkKDMqYXZnSHAgKyA2KSkgLSAwLjIqY29zKGRlZzJyYWQoNCphdmdIcCAtIDYzKSk7XG4gICAgICAgIHZhciBkZWx0YUhwID0gaDJwIC0gaDFwO1xuICAgICAgICBkZWx0YUhwID0gYWJzKGRlbHRhSHApIDw9IDE4MCA/IGRlbHRhSHAgOiBoMnAgPD0gaDFwID8gZGVsdGFIcCArIDM2MCA6IGRlbHRhSHAgLSAzNjA7XG4gICAgICAgIGRlbHRhSHAgPSAyKnNxcnQoQzFwKkMycCkqc2luKGRlZzJyYWQoZGVsdGFIcCkvMik7XG4gICAgICAgIHZhciBkZWx0YUwgPSBMMiAtIEwxO1xuICAgICAgICB2YXIgZGVsdGFDcCA9IEMycCAtIEMxcDsgICAgXG4gICAgICAgIHZhciBzbCA9IDEgKyAoMC4wMTUqcG93KGF2Z0wgLSA1MCwgMikpL3NxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgICAgIHZhciBzYyA9IDEgKyAwLjA0NSphdmdDcDtcbiAgICAgICAgdmFyIHNoID0gMSArIDAuMDE1KmF2Z0NwKlQ7XG4gICAgICAgIHZhciBkZWx0YVRoZXRhID0gMzAqZXhwKC1wb3coKGF2Z0hwIC0gMjc1KS8yNSwgMikpO1xuICAgICAgICB2YXIgUmMgPSAyKnNxcnQocG93KGF2Z0NwLCA3KS8ocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICAgICAgdmFyIFJ0ID0gLVJjKnNpbigyKmRlZzJyYWQoZGVsdGFUaGV0YSkpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gc3FydChwb3coZGVsdGFMLyhLbCpzbCksIDIpICsgcG93KGRlbHRhQ3AvKEtjKnNjKSwgMikgKyBwb3coZGVsdGFIcC8oS2gqc2gpLCAyKSArIFJ0KihkZWx0YUNwLyhLYypzYykpKihkZWx0YUhwLyhLaCpzaCkpKTtcbiAgICAgICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDEgPSBDb2xvcl8xO1xuXG4gICAgLy8gc2ltcGxlIEV1Y2xpZGVhbiBkaXN0YW5jZVxuICAgIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIsIG1vZGUpIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdsYWInO1xuXG4gICAgICAgIC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcXVhdGlvbnMuaHRtbFxuICAgICAgICBhID0gbmV3IENvbG9yJDEoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMShiKTtcbiAgICAgICAgdmFyIGwxID0gYS5nZXQobW9kZSk7XG4gICAgICAgIHZhciBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgICAgICB2YXIgc3VtX3NxID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBsMSkge1xuICAgICAgICAgICAgdmFyIGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICAgICAgICBzdW1fc3EgKz0gZCpkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtX3NxKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yID0gQ29sb3JfMTtcblxuICAgIHZhciB2YWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IsIFsgbnVsbCBdLmNvbmNhdCggYXJncykgKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuICAgIHZhciBjaHJvbWEkMSA9IGNocm9tYV8xO1xuXG4gICAgdmFyIHNjYWxlID0gc2NhbGUkMjtcblxuICAgIHZhciBzY2FsZXMgPSB7XG4gICAgXHRjb29sOiBmdW5jdGlvbiBjb29sKCkgeyByZXR1cm4gc2NhbGUoW2Nocm9tYSQxLmhzbCgxODAsMSwuOSksIGNocm9tYSQxLmhzbCgyNTAsLjcsLjQpXSkgfSxcbiAgICBcdGhvdDogZnVuY3Rpb24gaG90KCkgeyByZXR1cm4gc2NhbGUoWycjMDAwJywnI2YwMCcsJyNmZjAnLCcjZmZmJ10pLm1vZGUoJ3JnYicpIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLCBhbmQgVGhlXG4gICAgICAgIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuXG4gICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWRcbiAgICAgICAgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1JcbiAgICAgICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICAgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAqL1xuXG4gICAgdmFyIGNvbG9yYnJld2VyID0ge1xuICAgICAgICAvLyBzZXF1ZW50aWFsXG4gICAgICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICAgICAgUHVCdTogWycjZmZmN2ZiJywgJyNlY2U3ZjInLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM3NGE5Y2YnLCAnIzM2OTBjMCcsICcjMDU3MGIwJywgJyMwNDVhOGQnLCAnIzAyMzg1OCddLFxuICAgICAgICBCdVB1OiBbJyNmN2ZjZmQnLCAnI2UwZWNmNCcsICcjYmZkM2U2JywgJyM5ZWJjZGEnLCAnIzhjOTZjNicsICcjOGM2YmIxJywgJyM4ODQxOWQnLCAnIzgxMGY3YycsICcjNGQwMDRiJ10sXG4gICAgICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICAgICAgQnVHbjogWycjZjdmY2ZkJywgJyNlNWY1ZjknLCAnI2NjZWNlNicsICcjOTlkOGM5JywgJyM2NmMyYTQnLCAnIzQxYWU3NicsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgICAgICBZbE9yQnI6IFsnI2ZmZmZlNScsICcjZmZmN2JjJywgJyNmZWUzOTEnLCAnI2ZlYzQ0ZicsICcjZmU5OTI5JywgJyNlYzcwMTQnLCAnI2NjNGMwMicsICcjOTkzNDA0JywgJyM2NjI1MDYnXSxcbiAgICAgICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgICAgICBSZWRzOiBbJyNmZmY1ZjAnLCAnI2ZlZTBkMicsICcjZmNiYmExJywgJyNmYzkyNzInLCAnI2ZiNmE0YScsICcjZWYzYjJjJywgJyNjYjE4MWQnLCAnI2E1MGYxNScsICcjNjcwMDBkJ10sXG4gICAgICAgIFJkUHU6IFsnI2ZmZjdmMycsICcjZmRlMGRkJywgJyNmY2M1YzAnLCAnI2ZhOWZiNScsICcjZjc2OGExJywgJyNkZDM0OTcnLCAnI2FlMDE3ZScsICcjN2EwMTc3JywgJyM0OTAwNmEnXSxcbiAgICAgICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgICAgIFlsR25CdTogWycjZmZmZmQ5JywgJyNlZGY4YjEnLCAnI2M3ZTliNCcsICcjN2ZjZGJiJywgJyM0MWI2YzQnLCAnIzFkOTFjMCcsICcjMjI1ZWE4JywgJyMyNTM0OTQnLCAnIzA4MWQ1OCddLFxuICAgICAgICBQdXJwbGVzOiBbJyNmY2ZiZmQnLCAnI2VmZWRmNScsICcjZGFkYWViJywgJyNiY2JkZGMnLCAnIzllOWFjOCcsICcjODA3ZGJhJywgJyM2YTUxYTMnLCAnIzU0Mjc4ZicsICcjM2YwMDdkJ10sXG4gICAgICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICAgICAgR3JleXM6IFsnI2ZmZmZmZicsICcjZjBmMGYwJywgJyNkOWQ5ZDknLCAnI2JkYmRiZCcsICcjOTY5Njk2JywgJyM3MzczNzMnLCAnIzUyNTI1MicsICcjMjUyNTI1JywgJyMwMDAwMDAnXSxcbiAgICAgICAgWWxPclJkOiBbJyNmZmZmY2MnLCAnI2ZmZWRhMCcsICcjZmVkOTc2JywgJyNmZWIyNGMnLCAnI2ZkOGQzYycsICcjZmM0ZTJhJywgJyNlMzFhMWMnLCAnI2JkMDAyNicsICcjODAwMDI2J10sXG4gICAgICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICAgICAgQmx1ZXM6IFsnI2Y3ZmJmZicsICcjZGVlYmY3JywgJyNjNmRiZWYnLCAnIzllY2FlMScsICcjNmJhZWQ2JywgJyM0MjkyYzYnLCAnIzIxNzFiNScsICcjMDg1MTljJywgJyMwODMwNmInXSxcbiAgICAgICAgUHVCdUduOiBbJyNmZmY3ZmInLCAnI2VjZTJmMCcsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzY3YTljZicsICcjMzY5MGMwJywgJyMwMjgxOGEnLCAnIzAxNmM1OScsICcjMDE0NjM2J10sXG4gICAgICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgICAgICAvLyBkaXZlcmdpbmdcblxuICAgICAgICBTcGVjdHJhbDogWycjOWUwMTQyJywgJyNkNTNlNGYnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZTZmNTk4JywgJyNhYmRkYTQnLCAnIzY2YzJhNScsICcjMzI4OGJkJywgJyM1ZTRmYTInXSxcbiAgICAgICAgUmRZbEduOiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNkOWVmOGInLCAnI2E2ZDk2YScsICcjNjZiZDYzJywgJyMxYTk4NTAnLCAnIzAwNjgzNyddLFxuICAgICAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgICAgICBQaVlHOiBbJyM4ZTAxNTInLCAnI2M1MWI3ZCcsICcjZGU3N2FlJywgJyNmMWI2ZGEnLCAnI2ZkZTBlZicsICcjZjdmN2Y3JywgJyNlNmY1ZDAnLCAnI2I4ZTE4NicsICcjN2ZiYzQxJywgJyM0ZDkyMjEnLCAnIzI3NjQxOSddLFxuICAgICAgICBQUkduOiBbJyM0MDAwNGInLCAnIzc2MmE4MycsICcjOTk3MGFiJywgJyNjMmE1Y2YnLCAnI2U3ZDRlOCcsICcjZjdmN2Y3JywgJyNkOWYwZDMnLCAnI2E2ZGJhMCcsICcjNWFhZTYxJywgJyMxYjc4MzcnLCAnIzAwNDQxYiddLFxuICAgICAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgICAgIEJyQkc6IFsnIzU0MzAwNScsICcjOGM1MTBhJywgJyNiZjgxMmQnLCAnI2RmYzI3ZCcsICcjZjZlOGMzJywgJyNmNWY1ZjUnLCAnI2M3ZWFlNScsICcjODBjZGMxJywgJyMzNTk3OGYnLCAnIzAxNjY1ZScsICcjMDAzYzMwJ10sXG4gICAgICAgIFJkR3k6IFsnIzY3MDAxZicsICcjYjIxODJiJywgJyNkNjYwNGQnLCAnI2Y0YTU4MicsICcjZmRkYmM3JywgJyNmZmZmZmYnLCAnI2UwZTBlMCcsICcjYmFiYWJhJywgJyM4Nzg3ODcnLCAnIzRkNGQ0ZCcsICcjMWExYTFhJ10sXG4gICAgICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAgICAgLy8gcXVhbGl0YXRpdmVcblxuICAgICAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgICAgICBBY2NlbnQ6IFsnIzdmYzk3ZicsICcjYmVhZWQ0JywgJyNmZGMwODYnLCAnI2ZmZmY5OScsICcjMzg2Y2IwJywgJyNmMDAyN2YnLCAnI2JmNWIxNycsICcjNjY2NjY2J10sXG4gICAgICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICAgICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgICAgICBEYXJrMjogWycjMWI5ZTc3JywgJyNkOTVmMDInLCAnIzc1NzBiMycsICcjZTcyOThhJywgJyM2NmE2MWUnLCAnI2U2YWIwMicsICcjYTY3NjFkJywgJyM2NjY2NjYnXSxcbiAgICAgICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgICAgIFBhc3RlbDE6IFsnI2ZiYjRhZScsICcjYjNjZGUzJywgJyNjY2ViYzUnLCAnI2RlY2JlNCcsICcjZmVkOWE2JywgJyNmZmZmY2MnLCAnI2U1ZDhiZCcsICcjZmRkYWVjJywgJyNmMmYyZjInXSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIGxvd2VyY2FzZSBhbGlhc2VzIGZvciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IE9iamVjdC5rZXlzKGNvbG9yYnJld2VyKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGtleSA9IGxpc3RbaV07XG5cbiAgICAgICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3JicmV3ZXJfMSA9IGNvbG9yYnJld2VyO1xuXG4gICAgdmFyIGNocm9tYSA9IGNocm9tYV8xO1xuXG4gICAgLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuICAgIC8vIGEgc21hbGxlciBjaHJvbWEuanMgYnVpbHRcblxuICAgIC8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBvcGVyYXRvcnMgLS0+IG1vZGlmeSBleGlzdGluZyBDb2xvcnNcblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIGludGVycG9sYXRvcnNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbiAgICBjaHJvbWEuYXZlcmFnZSA9IGF2ZXJhZ2U7XG4gICAgY2hyb21hLmJlemllciA9IGJlemllcl8xO1xuICAgIGNocm9tYS5ibGVuZCA9IGJsZW5kXzE7XG4gICAgY2hyb21hLmN1YmVoZWxpeCA9IGN1YmVoZWxpeDtcbiAgICBjaHJvbWEubWl4ID0gY2hyb21hLmludGVycG9sYXRlID0gbWl4JDE7XG4gICAgY2hyb21hLnJhbmRvbSA9IHJhbmRvbV8xO1xuICAgIGNocm9tYS5zY2FsZSA9IHNjYWxlJDI7XG5cbiAgICAvLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbiAgICBjaHJvbWEuYW5hbHl6ZSA9IGFuYWx5emVfMS5hbmFseXplO1xuICAgIGNocm9tYS5jb250cmFzdCA9IGNvbnRyYXN0O1xuICAgIGNocm9tYS5kZWx0YUUgPSBkZWx0YUU7XG4gICAgY2hyb21hLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgY2hyb21hLmxpbWl0cyA9IGFuYWx5emVfMS5saW1pdHM7XG4gICAgY2hyb21hLnZhbGlkID0gdmFsaWQ7XG5cbiAgICAvLyBzY2FsZVxuICAgIGNocm9tYS5zY2FsZXMgPSBzY2FsZXM7XG5cbiAgICAvLyBjb2xvcnNcbiAgICBjaHJvbWEuY29sb3JzID0gdzNjeDExXzE7XG4gICAgY2hyb21hLmJyZXdlciA9IGNvbG9yYnJld2VyXzE7XG5cbiAgICB2YXIgY2hyb21hX2pzID0gY2hyb21hO1xuXG4gICAgcmV0dXJuIGNocm9tYV9qcztcblxufSkpO1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJ2YXIgQ0FOX1VTRV9ET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vLyBBZGFwdGVkIGZyb20gTW9kZXJuaXpyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL2FjYjNmMGQ5L2ZlYXR1cmUtZGV0ZWN0cy9kb20vcGFzc2l2ZWV2ZW50bGlzdGVuZXJzLmpzI0wyNi1MMzdcbmZ1bmN0aW9uIHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghQ0FOX1VTRV9ET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8ICF3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciB8fCAhT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnZXR0ZXItcmV0dXJuXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0O1xuICAgICAgfSgpXG4gICAgfSk7XG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlT3B0aW9uO1xufVxuXG52YXIgbWVtb2l6ZWQgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIGNhblVzZVBhc3NpdmVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKG1lbW9pemVkID09PSB1bmRlZmluZWQpIHtcbiAgICBtZW1vaXplZCA9IHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50T3B0aW9ucyhldmVudE9wdGlvbnMpIHtcbiAgaWYgKCFldmVudE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFjYW5Vc2VQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSkge1xuICAgIC8vIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHBhc3NpdmUgb3B0aW9uLCB0aGVuIGl0IGlzIGV4cGVjdGluZ1xuICAgIC8vIGEgYm9vbGVhbiBmb3IgdGhlIG9wdGlvbnMgYXJndW1lbnQgdG8gc3BlY2lmeSB3aGV0aGVyIGl0IHNob3VsZCB1c2VcbiAgICAvLyBjYXB0dXJlIG9yIG5vdC4gSW4gbW9yZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgaXMgcGFzc2VkIHZpYSB0aGUgYGNhcHR1cmVgXG4gICAgLy8gb3B0aW9uLCBzbyBsZXQncyBqdXN0IGhvaXN0IHRoYXQgdmFsdWUgdXAuXG4gICAgcmV0dXJuICEhZXZlbnRPcHRpb25zLmNhcHR1cmU7XG4gIH1cblxuICByZXR1cm4gZXZlbnRPcHRpb25zO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciBhbnkgc2V0IG9mIGV2ZW50IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXZlbnRPcHRpb25zS2V5KG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpIHtcbiAgaWYgKCFub3JtYWxpemVkRXZlbnRPcHRpb25zKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLCB0aGUgbm9ybWFsaXplZFxuICAvLyBldmVudCBvcHRpb25zIHdpbGwgYmUgYSBib29sZWFuLlxuICBpZiAobm9ybWFsaXplZEV2ZW50T3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAxMDA7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgYnJvd3NlciBzdXBwb3J0cyBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgc28gd2UgZXhwZWN0XG4gIC8vIHRoZSBldmVudCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCB3aXRoIHBvc3NpYmxlIHByb3BlcnRpZXMgb2YgY2FwdHVyZSxcbiAgLy8gcGFzc2l2ZSwgYW5kIG9uY2UuXG4gIC8vXG4gIC8vIFdlIHdhbnQgdG8gY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2ZcbiAgLy8gdGhlc2UgcHJvcGVydGllcywgc28gbGV0J3MgdXNlIGJpbmFyeSBtYXRocyB0byBhc3NpZ24gZWFjaCBwcm9wZXJ0eSB0byBhXG4gIC8vIGJpdCwgYW5kIHRoZW4gYWRkIHRob3NlIHRvZ2V0aGVyICh3aXRoIGFuIG9mZnNldCB0byBhY2NvdW50IGZvciB0aGVcbiAgLy8gYm9vbGVhbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uKS5cbiAgdmFyIGNhcHR1cmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLmNhcHR1cmUgPDwgMDtcbiAgdmFyIHBhc3NpdmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLnBhc3NpdmUgPDwgMTtcbiAgdmFyIG9uY2UgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLm9uY2UgPDwgMjtcbiAgcmV0dXJuIGNhcHR1cmUgKyBwYXNzaXZlICsgb25jZTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycykge1xuICBpZiAoZXZlbnRIYW5kbGVycy5oYW5kbGVycyA9PT0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMuaGFuZGxlcnMuc2xpY2UoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUYXJnZXRFdmVudEhhbmRsZXJzKHRhcmdldCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy5ldmVudHMgPSB7fTtcbn1cblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuZ2V0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZ2V0RXZlbnRIYW5kbGVycyhldmVudE5hbWUsIG9wdGlvbnMpIHtcbiAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50TmFtZSkgKyAnICcgKyBTdHJpbmcoZXZlbnRPcHRpb25zS2V5KG9wdGlvbnMpKTtcblxuICAgIGlmICghdGhpcy5ldmVudHNba2V5XSkge1xuICAgICAgdGhpcy5ldmVudHNba2V5XSA9IHtcbiAgICAgICAgaGFuZGxlcnM6IFtdLFxuICAgICAgICBoYW5kbGVFdmVudDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy5ldmVudHNba2V5XS5uZXh0SGFuZGxlcnMgPSB0aGlzLmV2ZW50c1trZXldLmhhbmRsZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV2ZW50c1trZXldO1xuICB9XG5cbiAgcmV0dXJuIGdldEV2ZW50SGFuZGxlcnM7XG59KCk7XG5cblRhcmdldEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudE5hbWUsIG9wdGlvbnMsIGV2ZW50KSB7XG4gICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB0aGlzLmdldEV2ZW50SGFuZGxlcnMoZXZlbnROYW1lLCBvcHRpb25zKTtcbiAgICBldmVudEhhbmRsZXJzLmhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnM7XG4gICAgZXZlbnRIYW5kbGVycy5oYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBwcmVzZW5jZSBoZXJlIGJlY2F1c2UgYSBoYW5kbGVyIGZ1bmN0aW9uIG1heVxuICAgICAgICAvLyBjYXVzZSBsYXRlciBoYW5kbGVycyB0byBnZXQgcmVtb3ZlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBmb3JcbiAgICAgICAgLy8gaW5zdGFuY2UgaGF2ZSBhIHdheXBvaW50IHRoYXQgdW5tb3VudHMgYW5vdGhlciB3YXlwb2ludCBhcyBwYXJ0IG9mIGFuXG4gICAgICAgIC8vIG9uRW50ZXIvb25MZWF2ZSBoYW5kbGVyLlxuICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVFdmVudDtcbn0oKTtcblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBvcHRpb25zIGhhcyBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50LlxuICAgIHZhciBldmVudEhhbmRsZXJzID0gdGhpcy5nZXRFdmVudEhhbmRsZXJzKGV2ZW50TmFtZSwgb3B0aW9ucyk7XG5cbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0RXZlbnRIYW5kbGVycyhldmVudEhhbmRsZXJzKTtcblxuICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcywgZXZlbnROYW1lLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgdmFyIGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgdmFyIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycyk7XG4gICAgICAgIHZhciBpbmRleCA9IGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBBbGwgZXZlbnQgaGFuZGxlcnMgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBldmVudFxuICAgICAgICAgIC8vIGxpc3RlbmVyIGZyb20gdGhlIHRhcmdldCBub2RlLlxuXG4gICAgICAgICAgaWYgKF90aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHRhcmdldCBtYXkgbm8gbG9uZ2VyIGV4aXN0XG4gICAgICAgICAgICAvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBlLmcuIHdoZW4gYSBSZWFjdCBjb21wb25lbnQgaXNcbiAgICAgICAgICAgIC8vIHVubW91bnRpbmcuIEd1YXJkaW5nIGFnYWluc3QgdGhpcyBwcmV2ZW50cyB0aGUgZm9sbG93aW5nIGVycm9yOlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlbW92ZUV2ZW50TGlzdGVuZXInIG9mIHVuZGVmaW5lZFxuICAgICAgICAgICAgX3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50LCBvcHRpb25zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KCk7XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgcmV0dXJuIGFkZDtcbn0oKTtcblxudmFyIEVWRU5UX0hBTkRMRVJTX0tFWSA9ICdfX2NvbnNvbGlkYXRlZF9ldmVudHNfaGFuZGxlcnNfXyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAoIXRhcmdldFtFVkVOVF9IQU5ETEVSU19LRVldKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0gPSBuZXcgVGFyZ2V0RXZlbnRIYW5kbGVycyh0YXJnZXQpO1xuICB9XG4gIHZhciBub3JtYWxpemVkRXZlbnRPcHRpb25zID0gbm9ybWFsaXplRXZlbnRPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0uYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBhZGRFdmVudExpc3RlbmVyIH07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLyogVmFycyAqL1xcbjpyb290IHtcXG4gIC8qIENPTE9SUyAqL1xcbiAgLyogQWNjZW50ICovXFxuICAtLWJsdWU6ICMxOGEwZmI7XFxuICAtLXB1cnBsZTogIzdiNjFmZjtcXG4gIC0taG90LXBpbms6ICNmZjAwZmY7XFxuICAtLWdyZWVuOiAjMWJjNDdkO1xcbiAgLS1yZWQ6ICNmMjQ4MjI7XFxuICAtLXllbGxvdzogI2ZmZWIwMDtcXG4gIC8qIEJhc2ljIGZvcmVncm91bmQgKi9cXG4gIC0tYmxhY2s6ICMwMDAwMDA7XFxuICAtLWJsYWNrODogcmdiYSgwLCAwLCAwLCAuOCk7XFxuICAtLWJsYWNrOC1vcGFxdWU6ICMzMzMzMzM7XFxuICAtLWJsYWNrMzogcmdiYSgwLCAwLCAwLCAuMyk7XFxuICAtLWJsYWNrMy1vcGFxdWU6ICNCM0IzQjM7XFxuICAtLXdoaXRlOiAjZmZmZmZmO1xcbiAgLS13aGl0ZTg6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjgpO1xcbiAgLS13aGl0ZTQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjQpO1xcbiAgLyogQmFzaWMgYmFja2dyb3VuZCAqL1xcbiAgLS1ncmV5OiAjZjBmMGYwO1xcbiAgLS1zaWx2ZXI6ICNlNWU1ZTU7XFxuICAtLWh1ZDogIzIyMjIyMjtcXG4gIC0tdG9vbGJhcjogIzJjMmMyYztcXG4gIC8qIFNwZWNpYWwgKi9cXG4gIC0tYmxhY2sxOiByZ2JhKDAsIDAsIDAsIC4xKTtcXG4gIC0tYmx1ZTM6IHJnYmEoMjQsIDE0NSwgMjUxLCAuMyk7XFxuICAtLXB1cnBsZTQ6IHJnYmEoMTIzLCA5NywgMjU1LCAuNCk7XFxuICAtLWhvdmVyLWZpbGw6IHJnYmEoMCwgMCwgMCwgLjA2KTtcXG4gIC0tc2VsZWN0aW9uLWE6ICNkYWViZjc7XFxuICAtLXNlbGVjdGlvbi1iOiAjZWRmNWZhO1xcbiAgLS13aGl0ZTI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjIpO1xcbiAgLyogVFlQT0dSQVBIWSAqL1xcbiAgLyogUG9zID0gcG9zaXRpdmUgYXBwbGljYXRpb25zIChibGFjayBvbiB3aGl0ZSkgKi9cXG4gIC8qIE5lZyA9IG5lZ2F0aXZlIGFwcGxpY2F0aW9ucyAod2hpdGUgb24gYmxhY2spICovXFxuICAvKiBGb250IHN0YWNrICovXFxuICAtLWZvbnQtc3RhY2s6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICAvKiBGb250IHNpemVzICovXFxuICAtLWZvbnQtc2l6ZS14c21hbGw6IDExcHg7XFxuICAtLWZvbnQtc2l6ZS1zbWFsbDogMTJweDtcXG4gIC0tZm9udC1zaXplLWxhcmdlOiAxM3B4O1xcbiAgLS1mb250LXNpemUteGxhcmdlOiAxNHB4O1xcbiAgLyogRm9udCB3ZWlnaHRzICovXFxuICAtLWZvbnQtd2VpZ2h0LW5vcm1hbDogNDAwO1xcbiAgLS1mb250LXdlaWdodC1tZWRpdW06IDUwMDtcXG4gIC0tZm9udC13ZWlnaHQtYm9sZDogNjAwO1xcbiAgLyogTGluZWhlaWdodCAqL1xcbiAgLS1mb250LWxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgLyogVXNlIEZvciB4c21hbGwsIHNtYWxsIGZvbnQgc2l6ZXMgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodC1sYXJnZTogMjRweDtcXG4gIC8qIFVzZSBGb3IgbGFyZ2UsIHhsYXJnZSBmb250IHNpemVzICovXFxuICAvKiBMZXR0ZXJzcGFjaW5nICovXFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbDogLjAwNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGw6IC4wMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbDogMDtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2U6IC0uMDAyNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZTogLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlOiAtLjAwMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2U6IC0uMDAxZW07XFxuICAvKiBCT1JERVIgUkFESVVTICovXFxuICAtLWJvcmRlci1yYWRpdXMtc21hbGw6IDJweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1tZWQ6IDVweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1sYXJnZTogNnB4O1xcbiAgLyogU0hBRE9XUyAqL1xcbiAgLS1zaGFkb3ctaHVkOiAwIDVweCAxN3B4IHJnYmEoMCwgMCwgMCwgLjIpLCAwIDJweCA3cHggcmdiYSgwLCAwLCAwLCAuMTUpO1xcbiAgLS1zaGFkb3ctZmxvYXRpbmctd2luZG93OiAwIDJweCAxNHB4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC8qIFNQQUNJTkcgKyBTSVpJTkcgKi9cXG4gIC0tc2l6ZS14eHhzbWFsbDogNHB4O1xcbiAgLS1zaXplLXh4c21hbGw6IDhweDtcXG4gIC0tc2l6ZS14c21hbGw6IDE2cHg7XFxuICAtLXNpemUtc21hbGw6IDI0cHg7XFxuICAtLXNpemUtbWVkaXVtOiAzMnB4O1xcbiAgLS1zaXplLWxhcmdlOiA0MHB4O1xcbiAgLS1zaXplLXhsYXJnZTogNDhweDtcXG4gIC0tc2l6ZS14eGxhcmdlOiA2NHB4O1xcbiAgLS1zaXplLXh4eGxhcmdlOiA4MHB4O1xcbn1cXG5cXG4vKiBHbG9iYWwgc3R5bGVzICovXFxuKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5ib2R5IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBmb250LWZhbWlseTogJ0ludGVyJywgc2Fucy1zZXJpZjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi8qICBGT05UUyAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItUmVndWxhci53b2ZmP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLU1lZGl1bS53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ0ludGVyJztcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBzcmM6IHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuLyogVVRJTElUSUVTICovXFxuLyogcGFkZGluZyAqL1xcbi5wLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucC14eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wLXhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wLXNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucC1tZWRpdW0ge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucC1sYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnAteGxhcmdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnAteHhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucC1odWdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHRvcCAqL1xcbi5wdC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wdC14eHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wdC1zbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wdC1tZWRpdW0ge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnB0LWxhcmdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnB0LXhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucHQteHhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnB0LWh1Z2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHJpZ2h0ICovXFxuLnByLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnByLXNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHItbWVkaXVtIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnByLWxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucHIteGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnByLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnByLWh1Z2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgYm90dG9tICovXFxuLnBiLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBiLXh4c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wYi14c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnBiLXNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBiLW1lZGl1bSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGItbGFyZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucGIteGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wYi14eGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGItaHVnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgbGVmdCAqL1xcbi5wbC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wbC14c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wbC1zbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucGwtbWVkaXVtIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGwtbGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBsLXhsYXJnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnBsLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGwtaHVnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gKi9cXG4ubS14eHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubS14eHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm0teHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubS1zbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubS1tZWRpdW0ge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tLWxhcmdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tLXhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm0teHhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tLWh1Z2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHRvcCAqL1xcbi5tdC14eHhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm10LXh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm10LXhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tdC1zbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm10LW1lZGl1bSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tdC1sYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm10LXhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tdC14eGxhcmdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tdC1odWdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gcmlnaHQgKi9cXG4ubXIteHh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1yLXh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubXIteHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXItc21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1yLW1lZGl1bSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1yLWxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tci14bGFyZ2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tci14eGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1yLWh1Z2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGJvdHRvbSAqL1xcbi5tYi14eHhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1iLXh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1iLXhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tYi1zbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1iLW1lZGl1bSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tYi1sYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1iLXhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tYi14eGxhcmdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tYi1odWdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gbGVmdCAqL1xcbi5tbC14eHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tbC14eHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tbC1zbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tbC1tZWRpdW0ge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1sLWxhcmdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1sLXhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWwteHhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1sLWh1Z2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBsYXlvdXQgdXRpbGl0aWVzICovXFxuLmhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uaW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZTtcXG59XFxuXFxuLmJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmZsZXgge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmlubGluZS1mbGV4IHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG4uY29sdW1uIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5jb2x1bW4tcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcblxcbi5yb3cge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnJvdy1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcblxcbi5mbGV4LXdyYXAtcmV2ZXJzZSB7XFxuICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtbm8td3JhcCB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLmZsZXgtc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAxO1xcbn1cXG5cXG4uZmxleC1uby1zaHJpbmsge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5mbGV4LWdyb3cge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4uZmxleC1uby1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWFyb3VuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtZW5kIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtZW5kIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1jZW50ZXIge1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0YXJ0IHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWNlbnRlciB7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0cmV0Y2gge1xcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCkgMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeTpkaXNhYmxlZCwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tcmVkKTtcXG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnksIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZW5hYmxlZDpmb2N1cywgLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4uY2hlY2tib3gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qIHVuY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbiAgLyogY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Y2hlY2tlZDpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuXFx0XFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0td2hpdGUpO1xcblxcdCAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuXFx0fSovXFxufVxcblxcbi5jaGVja2JveF9fYm94IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWwge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogLTFweCAxMHB4IDAgLThweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fYm94OmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyNyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDglMjA3JTIyJTIwd2lkdGglM0QlMjI4JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMS4xNzY0NyUyMDEuODgyMzYlMjAxLjg4MjM1JTIwMS44ODIzNiUyMDMuNzY0NzEtMy43NjQ3MiUyMDEuMTc2NDclMjAxLjE3NjQ4LTQuOTQxMTglMjA0Ljk0MTItMy4wNTg4Mi0zLjA1ODg0eiUyMiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IDJweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkOmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpbHZlcik7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCA4cHggMCAyNHB4O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogOHB4O1xcbiAgbGVmdDogNHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIG9wYWNpdHk6IDAuMztcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm0xMSUyMDgtNC0zdjZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpob3ZlcjpiZWZvcmUge1xcbiAgb3BhY2l0eTogMC44O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fY29udGVudCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUtc21hbGwpO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLXNlY3Rpb24ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1leHBhbmRlZCAuZGlzY2xvc3VyZV9fbGFiZWw6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm05JTIwMTAlMjAzLTRoLTZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMnB4IC0xcHg7XFxufVxcblxcbi5pY29uLS1zcGluIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW5nIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5pY29uLS1ibHVlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg1NCUpIHNlcGlhKDE2JSkgc2F0dXJhdGUoNzQ5OSUpIGh1ZS1yb3RhdGUoMTc5ZGVnKSBicmlnaHRuZXNzKDk4JSkgY29udHJhc3QoMTAxJSk7XFxufVxcblxcbi5pY29uLS1wdXJwbGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzIlKSBzZXBpYSg0MCUpIHNhdHVyYXRlKDY2MCUpIGh1ZS1yb3RhdGUoMjAyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMyUpO1xcbn1cXG5cXG4uaWNvbi0taG90LXBpbmsge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbn1cXG5cXG4uaWNvbi0tZ3JlZW4ge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDY2JSkgc2VwaWEoMzklKSBzYXR1cmF0ZSg1MzgyJSkgaHVlLXJvdGF0ZSgxMTRkZWcpIGJyaWdodG5lc3MoMTAyJSkgY29udHJhc3QoNzklKTtcXG59XFxuXFxuLmljb24tLXJlZCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDQzJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSg1NjMyJSkgaHVlLXJvdGF0ZSgzNDlkZWcpIGJyaWdodG5lc3MoOTclKSBjb250cmFzdCg5NSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG59XFxuXFxuLmljb24tLXllbGxvdyB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDc4JSkgc2VwaWEoODYlKSBzYXR1cmF0ZSgxNjA4JSkgaHVlLXJvdGF0ZSgxZGVnKSBicmlnaHRuZXNzKDEwNyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2s4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSgyNSUpIGh1ZS1yb3RhdGUoMTM3ZGVnKSBicmlnaHRuZXNzKDEwNSUpIGNvbnRyYXN0KDYwJSk7XFxufVxcblxcbi5pY29uLS1ibGFjazMge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNjk4JSkgaHVlLXJvdGF0ZSgyMTlkZWcpIGJyaWdodG5lc3MoNjYlKSBjb250cmFzdCgxMjclKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGU4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG59XFxuXFxuLmljb24tLXdoaXRlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxufVxcblxcbi5pY29uLS1hZGp1c3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTIgMTYuMDVWOWgxdjcuMDVhMi41IDIuNSAwIDAxMCA0LjlWMjNoLTF2LTIuMDVhMi41IDIuNSAwIDAxMC00Ljl6bTIgMi40NWExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHpNMTkgMjNoMXYtNy4wNWEyLjUgMi41IDAgMDAwLTQuOVY5aC0xdjIuMDVhMi41IDIuNSAwIDAwMCA0Ljl6bTItOS41YTEuNSAxLjUgMCAxMC0zIDAgMS41IDEuNSAwIDAwMyAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGVydCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuMjUgMTcuMzkzYTEuNzUgMS43NSAwIDAwMS43NSAxLjc1VjIwSDl2LS44NTdhMS43NSAxLjc1IDAgMDAxLjc1LTEuNzVWMTRjMC0zLjMxNCAyLjM1LTYgNS4yNS02czUuMjUgMi42ODYgNS4yNSA2em0tMS0zLjM5M3YzLjM5M2MwIC42LjE5MiAxLjE1NS41MTggMS42MDdoLTkuNTM2YTIuNzM4IDIuNzM4IDAgMDAuNTE4LTEuNjA3VjE0YzAtMi44OTEgMi4wMjQtNSA0LjI1LTVzNC4yNSAyLjEwOSA0LjI1IDV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTE2IDIzYTIgMiAwIDAxLTItMmgtMWEzIDMgMCAxMDYgMGgtMWEyIDIgMCAwMS0yIDJ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFuZ2xlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMiAxMnY4aDh2LTFoLTNhNCA0IDAgMDAtNC00di0zem0xIDR2M2gzYTMgMyAwIDAwLTMtM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hcnJvdy1sZWZ0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuMjA3IDE2LjVsMS42NDcgMS42NDYtLjcwNy43MDhMMTAuMjkzIDE2bDIuODU0LTIuODU0LjcwNy43MDgtMS42NDcgMS42NDZoNy41ODZsLTEuNjQ2LTEuNjQ2LjcwNy0uNzA4TDIxLjcwNyAxNmwtMi44NTMgMi44NTQtLjcwNy0uNzA4IDEuNjQ2LTEuNjQ2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS11cC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTAuMjkybDIuODU0IDIuODU0LS43MDcuNzA3LTEuNjQ2LTEuNjQ2djcuNTg1bDEuNjQ2LTEuNjQ2LjcwNy43MDctMi44NTMgMi44NTQtMi44NTQtMi44NTQuNzA3LS43MDcgMS42NDcgMS42NDZ2LTcuNTg1bC0xLjY0NyAxLjY0Ni0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDV2MTJoLTV6bTEgMWgzdjEwaC0zem02LTFoNXYxMmgtNXptMSAxaDN2MTBoLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXV0by1sYXlvdXQtdmVydGljYWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDEydjVIMTB6bTEgMWgxMHYzSDExem0tMSA2aDEydjVIMTB6bTEgMWgxMHYzSDExeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJhY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjcwNyAxNmw0LjY0Ni00LjY0Ni0uNzA3LS43MDdMMTIuMjkzIDE2bDUuMzUzIDUuMzU0LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kLWVtcHR5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi42OTUgMTEuNzJsLS42OTMtLjcxOEwxNiAxMWwtLjAwMS4wMDItLjY5NC43MThDMTMuMTAyIDE0LjAxMiAxMiAxNS4yOTQgMTIgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDAxLjE3MiAyLjkzNiAzLjkwNiAzLjkwNiAwIDAwNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAwMjAgMTYuODUyYzAtMS41NTgtMS4xMDItMi44NC0zLjMwNS01LjEzMnptLS42OTUuNzJjLS45NzcgMS4wMTctMS42OTMgMS43OS0yLjE5NSAyLjQ3MS0uNi44MTQtLjgwNSAxLjM4LS44MDUgMS45NHYuMDAzYTMuMiAzLjIgMCAwMC44OSAyLjIzOSAyLjkwNiAyLjkwNiAwIDAwNC4yMiAwIDMuMiAzLjIgMCAwMC44OS0yLjIzOXYtLjAwMmMwLS41Ni0uMjA1LTEuMTI3LS44MDUtMS45NC0uNTAyLS42ODEtMS4yMTktMS40NTUtMi4xOTUtMi40NzJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYmxlbmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2LjAwMiAxMS4wMDJsLjY5My43MThDMTguODk4IDE0LjAxMiAyMCAxNS4yOTQgMjAgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDEtMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMS01LjY1NiAwQTQuMTk5IDQuMTk5IDAgMDExMiAxNi44NTJjMC0xLjU1OCAxLjEwMi0yLjg0IDMuMzA1LTUuMTMybC42OTQtLjcxOXptLTIuMTk3IDMuOTFjLjUwMi0uNjgxIDEuMjE5LTEuNDU1IDIuMTk1LTIuNDcyLjk3NiAxLjAxNyAxLjY5MyAxLjc5IDIuMTk1IDIuNDcxLjYuODE0LjgwNSAxLjM4LjgwNSAxLjk0di4wMDNjMCAuMDQ5IDAgLjA5OC0uMDAzLjE0NmgtNS45OTRhMy4zNyAzLjM3IDAgMDEtLjAwMy0uMTQ2di0uMDAyYzAtLjU2LjIwNS0xLjEyNy44MDUtMS45NHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1icmVhayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBvcGFjaXR5PScuOSclM0UlM0NwYXRoIGQ9J00xMyA5djNoMVY5ek0yMi4xMDMgOS44OTZhMi45NzUgMi45NzUgMCAwMC00LjIwNyAwbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMS45NzUgMS45NzUgMCAwMTIuNzkzIDIuNzkzbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMi45NzUgMi45NzUgMCAwMDAtNC4yMDd6TTkuODk2IDIyLjEwNGEyLjk3NSAyLjk3NSAwIDAxMC00LjIwOGwyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMS45NzUgMS45NzUgMCAwMDIuNzkzIDIuNzkzbDIuNzUtMi43NS43MDcuNzA3LTIuNzUgMi43NWEyLjk3NSAyLjk3NSAwIDAxLTQuMjA3IDB6TTIzIDE5aC0zdi0xaDN6TTE5IDIwdjNoLTF2LTN6TTEyIDEzSDl2MWgzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMThsMy00aC02eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1sZWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTMgMTZsNC0zdjZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTkgMTZsLTQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC11cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE0bDMgNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2hlY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjIwNyAxMy43MDdMMTUgMTkuOTE0bC0zLjcwNy0zLjcwNyAxLjQxNC0xLjQxNEwxNSAxNy4wODZsNC43OTMtNC43OTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2xvc2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNS4yOTNsNC42NDYtNC42NDYuNzA4LjcwN0wxNi43MDcgMTZsNC42NDcgNC42NDctLjcwNy43MDdMMTYgMTYuNzA3bC00LjY0NiA0LjY0Ny0uNzA3LS43MDdMMTUuMjkzIDE2bC00LjY0Ni00LjY0Ni43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29tcG9uZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMi4wNjMgMTAuOTM4TDE2IDE0Ljg3NGwzLjkzOC0zLjkzOEwxNiA3em02LjQ2IDBMMTYgMTMuNDZsLTIuNTIzLTIuNTI0TDE2IDguNDE1em0tNi40NiAxMC4xMjRMMTYgMjVsMy45MzgtMy45MzhMMTYgMTcuMTI1em02LjQ2IDBMMTYgMjMuNTg3bC0yLjUyMy0yLjUyM0wxNiAxOC41Mzh6TTcgMTZsMy45MzctMy45MzhMMTQuODc1IDE2bC0zLjkzOCAzLjkzOHptMy45MzcgMi41MjNMMTMuNDYxIDE2bC0yLjUyNC0yLjUyM0w4LjQxNSAxNnpNMTcuMTI1IDE2bDMuOTM4IDMuOTM4TDI1IDE2bC0zLjkzOC0zLjkzOHptNi40NiAwbC0yLjUyMyAyLjUyM0wxOC41NCAxNmwyLjUyMy0yLjUyM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXItcmFkaXVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMSAxM2gtNGE0IDQgMCAwMC00IDR2NGgtMXYtNGE1IDUgMCAwMTUtNWg0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvcm5lcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDExaDN2MWgtMnYyaC0xem03IDBoM3YzaC0xdi0yaC0yem0tNiA5di0yaC0xdjNoM3YtMXptOS0ydjNoLTN2LTFoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLWhvcml6b250YWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExIDIyLjV2LTEzaC0xdjEzek0yMiA5LjV2MTNoLTF2LTEzek0xNyAxMi41djdoLTJ2LTd6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRpc3RyaWJ1dGUtdmVydGljYWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YxaC0xM3pNMTIuNSAxNWg3djJoLTd6TTIyLjUgMjFoLTEzdjFoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRyYWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCA4LjVoNy43MDdMMjIgMTIuNzkzVjIzLjVIMTB6bTEgMXYxM2gxMHYtOWgtNHYtNHptNyAuNzA3bDIuMjkzIDIuMjkzSDE4eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVmZmVjdHMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNi41IDguNWgtMXYzaDF6TTExLjA1IDEwLjM0M2wtLjcwNy43MDcgMi4xMjEgMi4xMjIuNzA4LS43MDh6TTIxLjY1NyAxMS4wNWwtLjcwNy0uNzA3LTIuMTIxIDIuMTIxLjcwNy43MDh6TTguNSAxNS41djFoM3YtMXpNMjAuNSAxNS41djFoM3YtMXpNMTMuMTcyIDE5LjUzNWwtLjcwOC0uNzA3LTIuMTIgMi4xMjIuNzA2LjcwN3pNMTkuNTM1IDE4LjgyOGwtLjcwNy43MDcgMi4xMjIgMi4xMjIuNzA3LS43MDd6TTE2LjUgMjAuNWgtMXYzaDF6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjQ5OCAxNS45OThhMi41IDIuNSAwIDExLTUgMCAyLjUgMi41IDAgMDE1IDB6bS0xIDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZWxsaXBzZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjUgMTZhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTYgMGExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHptNC41IDEuNWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWV5ZWRyb3BwZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMi40NDcgOS42Yy0uOC0uOC0yLS44LTIuOCAwbC0yLjggMi44LS44LS43Yy0uNC0uNC0xLS40LTEuNCAwcy0uNCAxIDAgMS40bC43LjctNS44IDUuOGMtLjQuNC0xIDEuOSAwIDIuOXMyLjUuNCAyLjkgMGw1LjgtNS44LjcuN2MuNC40IDEgLjQgMS40IDBzLjQtMSAwLTEuNGwtLjctLjcgMi44LTIuOGMuOC0uOS44LTIuMSAwLTIuOXptLTEwLjkgMTEuOWgtMXYtMWw1LjgtNS44IDEgMWMtLjEgMC01LjggNS44LTUuOCA1Ljh6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZvcndhcmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3Ljk0IDE2bC00LjY0Ny00LjY0Ni43MDctLjcwN0wxOS4zNTQgMTYgMTQgMjEuMzU0bC0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZnJhbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDI0di0zSDh2LTFoM3YtOEg4di0xaDNWOGgxdjNoOFY4aDF2M2gzdjFoLTN2OGgzdjFoLTN2M2gtMXYtM2gtOHYzem05LTR2LThoLTh2OHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ncm91cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE3LjQgOWgtMi44djFoMi44ek0yMC45IDIySDIydi0xLjFoMVYyM2gtMi4xek0xMCAxNC42djIuOEg5di0yLjh6TTIyIDExLjFWMTBoLTEuMVY5SDIzdjIuMXpNMjIgMTQuNnYyLjhoMXYtMi44ek0xMCAxMS4xVjEwaDEuMVY5SDl2Mi4xek05IDIwLjloMVYyMmgxLjF2MUg5ek0xNy40IDIyaC0yLjh2MWgyLjh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhpZGRlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuNTA5IDE1LjgwMUE4LjAzMyA4LjAzMyAwIDAwMjIuOTI4IDE0aC0xLjE4NEE2Ljk5MiA2Ljk5MiAwIDAxMTYgMTdhNi45OTIgNi45OTIgMCAwMS01Ljc0NS0zSDkuMDdhOC4wMzMgOC4wMzMgMCAwMDEuNDIxIDEuODAxbC0xLjU5NSAxLjU5NS43MDguNzA3IDEuNjU3LTEuNjU3Yy43MS41MjMgMS41MTEuOTMyIDIuMzc0IDEuMTk5bC0uNjE3IDIuMjIxLjk2NC4yNjguNjI2LTIuMjU1YTguMDUxIDguMDUxIDAgMDAyLjc4NCAwbC42MjYgMi4yNTUuOTY0LS4yNjgtLjYxNy0yLjIyMWE3Ljk3MSA3Ljk3MSAwIDAwMi4zNzQtMS4ybDEuNjU4IDEuNjU4LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhvcml6b250YWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOXYxNGgxVjl6bTEzIDB2MTRoMVY5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxOXYtNmg2djZ6bS0xLTdoOHY4aC04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWh5cGVybGluayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIwLjgyNCAxNC40OTJsLTEuNjU3IDEuNjU3LjgyOC44MjkgMS42NTgtMS42NTdhMy41MTcgMy41MTcgMCAwMC00Ljk3My00Ljk3M2wtMS42NTcgMS42NTguODI5LjgyOCAxLjY1Ny0xLjY1N2EyLjM0NSAyLjM0NSAwIDAxMy4zMTUgMy4zMTV6bS00Ljk3NCA0Ljk3MmwuODI5LjgyOS0xLjY1OCAxLjY1N2EzLjUxNiAzLjUxNiAwIDExLTQuOTcyLTQuOTcybDEuNjU5LTEuNjU4LjgyOC44MjktMS42NTYgMS42NTdhMi4zNDMgMi4zNDMgMCAxMDMuMzE1IDMuMzE1bDEuNjU3LTEuNjU3em0yLjA3Mi02LjIxNmwtNC45NzIgNC45NzMuODI4LjgyOSA0Ljk3My00Ljk3M3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW1hZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyIDEwSDEwdjcuNzkzbDMuMDgzLTMuMDgzIDcuMjkgNy4yOUgyMnpNMTAgMjJ2LTIuNzkzbDMuMDgzLTMuMDgzTDE4Ljk2IDIyem0wLTEzYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVYxMGExIDEgMCAwMC0xLTF6bTkuNjY3IDQuNjY3YTEuMzMzIDEuMzMzIDAgMTEtMi42NjcgMCAxLjMzMyAxLjMzMyAwIDAxMi42NjcgMHptMSAwYTIuMzMzIDIuMzMzIDAgMTEtNC42NjcgMCAyLjMzMyAyLjMzMyAwIDAxNC42NjcgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1pbnN0YW5jZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgN2w5IDktOSA5LTktOXptLTcuNTg2IDlMMTYgMjMuNTg2IDIzLjU4NiAxNiAxNiA4LjQxNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1rZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE0IDIwLjE0YTMuMDE0IDMuMDE0IDAgMDAuMzMxLTMuODY4bDIuMDQ3LTIuMDQ3IDEuNzY3IDEuNzY3YS41LjUgMCAxMC43MDctLjcwN2wtMS43NjctMS43NjcgMS4yOTMtMS4yOTMgMS43ODQgMS43ODRhLjUuNSAwIDEwLjcwNy0uNzA3bC0xLjc4NC0xLjc4NC43NjItLjc2MWEuNS41IDAgMDAtLjcwNy0uNzA4bC01LjUxMyA1LjUxM2EzLjAxNCAzLjAxNCAwIDEwLjM3MyA0LjU3OHptLS43MTItLjcxMmEyLjAwNiAyLjAwNiAwIDEwLTIuODM3LTIuODM3IDIuMDA2IDIuMDA2IDAgMDAyLjgzNyAyLjgzN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtYWxpZ24tYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNC41IDEwdjEwaC0yVjEwem04IDEydjFoLTEzdi0xem0tMy0ydi02aC0ydjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24taG9yaXpvbnRhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYuNSA5LjVoLTF2M2gtNXYyaDV2M2gtM3YyaDN2M2gxdi0zaDN2LTJoLTN2LTNoNXYtMmgtNXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjVIOXYtMTNoMXpNMjIgMTQuNUgxMnYtMmgxMHpNMTIgMTkuNWg2di0yaC02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIyIDIyLjVoMXYtMTNoLTF6TTEwIDE0LjVoMTB2LTJIMTB6TTIwIDE5LjVoLTZ2LTJoNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tdG9wIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTQuNSAyMlYxMmgtMnYxMHpNMjIuNSAxMFY5aC0xM3Yxek0xOS41IDEydjZoLTJ2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXZlcnRpY2FsLWNlbnRlcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMi41IDE1LjV2LTVoMnY1aDN2LTNoMnYzaDN2MWgtM3YzaC0ydi0zaC0zdjVoLTJ2LTVoLTN2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLWNvbHVtbnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YxNEg5ek0xNC41IDloM3YxNGgtM3pNMjAgOWgzdjE0aC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1yb3dzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDE0djNIOXpNOSAxNC41aDE0djNIOXpNOSAyMGgxNHYzSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLXVuaWZvcm0ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YzSDl6TTIwIDloM3YzaC0zek0xNC41IDloM3YzaC0zek05IDE0LjVoM3YzSDl6TTIwIDE0LjVoM3YzaC0zek0xNC41IDE0LjVoM3YzaC0zek05IDIwaDN2M0g5ek0yMCAyMGgzdjNoLTN6TTE0LjUgMjBoM3YzaC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saWJyYXJ5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4zNzMgMjJoMS4yNThjLjI4LS4zMi42MTYtLjU5Ny45OTUtLjgxOSAxLjQ3OC0uODYyIDQuMDA1LS45MDkgNS4zODYuMTA5SDI0LjV2LTkuMnMtLjc5Ny0yLjI1LTQuNDItMi4yNWMtMS44NzUgMC0yLjkwMi42MDItMy40NTYgMS4xODRhMi41NjggMi41NjggMCAwMC0uNi45NzZoLS4wNDhhMi41NjkgMi41NjkgMCAwMC0uNi0uOTc2Yy0uNTU0LS41ODItMS41ODEtMS4xODQtMy40NTYtMS4xODQtMy42MjMgMC00LjQyIDIuMjUtNC40MiAyLjI1djkuMTloMS40ODhjMS4zODItMS4wMTkgMy45MS0uOTcgNS4zODgtLjEwNS4zOC4yMjMuNzE3LjUwMy45OTcuODI1em0xLjEyNy05LjcxMXY4LjQ1N2MuMTk1LS4xNTcuNDAzLS4zLjYyMi0uNDI4LjkyNy0uNTQxIDIuMTE1LS43OTYgMy4yNDEtLjc4NyAxLjAwNi4wMDggMi4wODEuMjI3IDIuOTUyLjc1OWguMTg1di03Ljk3M2EyLjQxNCAyLjQxNCAwIDAwLS41MDUtLjU5NWMtLjQ2LS4zOTctMS4zMy0uODgyLTIuOTE1LS44ODItMS41ODYgMC0yLjM0LjQ4My0yLjY5NS44MzVhMS43NDkgMS43NDkgMCAwMC0uMzUzLjQ5IDEuMDc2IDEuMDc2IDAgMDAtLjA1Mi4xMzFsLS4wMDUuMDE3LjAwMS0uMDA2LjAwMi0uMDA4di0uMDA1bC4wMDEtLjAwMnYtLjAwMmwtLjAwNS0uMDAxem0tMSAwaC0uNDc0bC0uMDA2LjAwMXYuMDAybC4wMDEuMDAyLjAwMS4wMDUuMDAyLjAwOC4wMDEuMDA2LS4wMDUtLjAxN2ExLjA3NiAxLjA3NiAwIDAwLS4wNTMtLjEzMSAxLjc0OSAxLjc0OSAwIDAwLS4zNTMtLjQ5Yy0uMzU0LS4zNTEtMS4xMDgtLjgzNS0yLjY5NC0uODM1LTEuNTg1IDAtMi40NTUuNDg1LTIuOTE2Ljg4MmEyLjQxMSAyLjQxMSAwIDAwLS41MDQuNTk1djcuOTYzaC4xODVjLjg3Mi0uNTMyIDEuOTQ4LS43NTIgMi45NTQtLjc1OSAxLjEyOC0uMDA4IDIuMzE2LjI0OSAzLjI0My43OTIuMjE3LjEyNy40MjQuMjcuNjE4LjQyNnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWJyb2tlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE4IDE0di0yYTIgMiAwIDEwLTQgMHYyaC0xdi0yYTMgMyAwIDExNiAwdjJ6TTE5IDE4aC0xdjJhMiAyIDAgMTEtNCAwdi0yaC0xdjJhMyAzIDAgMTA2IDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpbmstY29ubmVjdGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMTBhMiAyIDAgMDEyIDJ2Mmgxdi0yYTMgMyAwIDEwLTYgMHYyaDF2LTJhMiAyIDAgMDEyLTJ6TTE4IDE4aDF2MmEzIDMgMCAxMS02IDB2LTJoMXYyYTIgMiAwIDEwNCAweicvJTNFJTNDcGF0aCBkPSdNMTUuNSAxM3Y2aDF2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3QtZGV0YWlsZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMiAxMGgtMnYxaDJ6TTEyIDIwaC0ydjFoMnpNMTAgMTVoMnYxaC0yek0yMiAxMGgtOHYxaDh6TTE0IDIwaDh2MWgtOHpNMjIgMTVoLTh2MWg4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LXRpbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0IDExaC0zdjNoM3ptLTQtMXY1aDV2LTV6bTExIDFoLTN2M2gzem0tNC0xdjVoNXYtNXptLTMgOGgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBmaWxsLW9wYWNpdHk9Jy44JyUzRSUzQ3BhdGggZD0nTTIzIDEwSDl2MWgxNHpNOSAxNS41aDE0djFIOXpNOSAyMWgxNHYxSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb2ZmIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTggMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNUgxN3YtMi41YTIuNSAyLjUgMCAwMTUgMFYxNGgtMXYtMS41YTEuNSAxLjUgMCAwMC0zIDB6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjUgMTV2LTEuNWEyLjUgMi41IDAgMDE1IDBWMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNXptNC0xLjVWMTVoLTN2LTEuNWExLjUgMS41IDAgMDEzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbWludXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMS41IDE2LjVoLTExdi0xaDExeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1wbGF5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMC4wOThMMjIuNDQzIDE2IDEzIDIxLjkwMnptMSAxLjgwNHY4LjE5NkwyMC41NTcgMTZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGx1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE1LjUgMTUuNXYtNWgxdjVoNXYxaC01djVoLTF2LTVoLTV2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJhbmRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMTE4IDExYTIuNSAyLjUgMCAwMC0xLjMzNS4zODZMMTEuMjI4IDEzSDE4LjV2MWgtOC40OTdhLjUxMi41MTIgMCAwMC0uMDAzLjA1MVYyMC41YzAgLjI3OC4yMjMuNS40OTcuNWg3LjYyOGEuNDk4LjQ5OCAwIDAwLjMyOC0uMTIzbDMuMjA2LTIuODA1YTEgMSAwIDAwLjM0MS0uNzUzVjExLjVhLjUuNSAwIDAwLS41LS41em0tMS44NjktLjQ2YTMuNSAzLjUgMCAwMTEuODctLjU0SDIxLjVhMS41IDEuNSAwIDAxMS41IDEuNXY1LjgyYTIgMiAwIDAxLS42ODMgMS41MDRsLTMuMjA1IDIuODA1Yy0uMjc0LjI0LS42MjQuMzcxLS45ODcuMzcxaC03LjYyN0M5LjY2OCAyMiA5IDIxLjMyNyA5IDIwLjV2LTYuNDQ5YTEuNSAxLjUgMCAwMS42OTktMS4yNjh6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTEzIDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTZhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xNyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTEzIDE5YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHonLyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMjIuNDA3IDEwLjcxYS41LjUgMCAwMS0uMTE2LjY5N2wtMy41IDIuNWEuNS41IDAgMDEtLjU4Mi0uODE0bDMuNS0yLjVhLjUuNSAwIDAxLjY5OC4xMTZ6Jy8lM0UlM0NwYXRoIGQ9J00xOCAyMXYtOGgxdjh6Jy8lM0UlM0MvZyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVjZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTUgMTJ2NWg1di0xaC00di00eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNpemUtdG8tZml0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOC42NDYgOS4zNTRMMTIuMjkzIDEzSDEwdjFoNHYtNGgtMXYyLjI5M0w5LjM1NCA4LjY0NnpNMTkuNzA3IDEzbDMuNjQ3LTMuNjQ2LS43MDctLjcwOEwxOSAxMi4yOTNWMTBoLTF2NGg0di0xek0xOS43MDcgMTlsMy42NDcgMy42NDYtLjcwNy43MDhMMTkgMTkuNzA3VjIyaC0xdi00aDR2MXpNMTIuMjkzIDE5bC0zLjY0NyAzLjY0Ni43MDguNzA4TDEzIDE5LjcwN1YyMmgxdi00aC00djF6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUtZmlsbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiAyNGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjkxMS05LjYzNWwtLjgyMi0uNzMtMy42MTMgNC4wNjQtMi41ODctMi41ODgtLjc3OC43NzggMy40MTMgMy40MTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzb2x2ZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5LjkxMSAxNC4zNjVsLS44MjItLjczLTMuNjEzIDQuMDYzLTIuNTg3LTIuNTg3LS43NzguNzc4IDMuNDEzIDMuNDEyeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXZlcnNlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS44NTQgOC42NDZMMTguMjA3IDExbC0yLjM1MyAyLjM1NC0uNzA4LS43MDggMS4xNDctMS4xNDZIMTRjLS41MDMgMC0xLjI3LjE1NS0xLjg5NS42MDYtLjYuNDMyLTEuMTA1IDEuMTU3LTEuMTA1IDIuMzk0djcuMjVoLTFWMTQuNWMwLTEuNTYzLjY2Mi0yLjU4OCAxLjUyLTMuMjA2LjgzMy0uNiAxLjgxNy0uNzk0IDIuNDgtLjc5NGgyLjI5M2wtMS4xNDctMS4xNDZ6TTIyIDEwdjcuMjVjMCAxLjU2My0uNjYyIDIuNTg4LTEuNTIgMy4yMDYtLjgzMy42LTEuODE3Ljc5NC0yLjQ4Ljc5NGgtMi4yOTNsMS4xNDcgMS4xNDYtLjcwOC43MDgtMi4zNTMtMi4zNTQgMi4zNTMtMi4zNTQuNzA4LjcwOC0xLjE0NyAxLjE0NkgxOGMuNTAzIDAgMS4yNy0uMTU1IDEuODk1LS42MDYuNi0uNDMyIDEuMTA1LTEuMTU3IDEuMTA1LTIuMzk0VjEweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaC1sYXJnZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguODc0IDE5LjU4MWE2IDYgMCAxMS43MDctLjcwN2w0LjI3MyA0LjI3Mi0uNzA4LjcwOHpNMjAgMTVhNSA1IDAgMTEtMTAgMCA1IDUgMCAwMTEwIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2VhcmNoIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC4zOTcgMTguNjA1YTQuNTUyIDQuNTUyIDAgMTEuNzA3LS43MDdsMy4yNSAzLjI0OS0uNzA4LjcwN3ptLjcwNi0zLjU1M2EzLjU1MiAzLjU1MiAwIDExLTcuMTAzIDAgMy41NTIgMy41NTIgMCAwMTcuMTAzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2V0dGluZ3Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTYuOTU0IDkuOTI4bC0uMTM5LS4zMzFDMTYuNjM1IDkuMTY1IDE2LjMwMSA5IDE2IDlzLS42MzUuMTY1LS44MTUuNTk3bC0uMTM5LjMzMWMtLjU2IDEuMzQzLTEuOTkyIDIuMTMtMy40MjUgMS43MmwtLjUtLjE0NGMtLjMwOS0uMDg4LS42MDYuMDI1LS44MTUuMzI3YTEuMDUgMS4wNSAwIDAwLS4wNDkgMS4xMjNjLjc0MyAxLjMyMy40MDIgMy4wNjgtLjg2IDMuOTUtLjMxOC4yMjItLjQ1Ni42MTQtLjM3NSAxLjAyNC4wODEuNDA5LjM0Mi42NjguNjczLjcyM2wuMTk1LjAzM2MxLjUyNS4yNTMgMi41MSAxLjY4NyAyLjQyMyAzLjE4LS4wMy41MDMuMjIuODYxLjUyIDEuMDI4LjI4OC4xNjEuNjIzLjE1NS45MjEtLjEwOGwuMzczLS4zM2EyLjggMi44IDAgMDEzLjc0NiAwbC4zNzMuMzNjLjI5OC4yNjQuNjMzLjI3LjkyMi4xMDguMy0uMTY3LjU0OS0uNTI1LjUyLTEuMDI4LS4wODgtMS40OTMuODk3LTIuOTI3IDIuNDIzLTMuMThsLjE5NC0uMDMzYy4zMy0uMDU1LjU5Mi0uMzE0LjY3My0uNzIzLjA4MS0uNDEtLjA1Ny0uODAyLS4zNzUtMS4wMjQtMS4yNjItLjg4Mi0xLjYwMy0yLjYyNy0uODYtMy45NWExLjA1IDEuMDUgMCAwMC0uMDUtMS4xMjNjLS4yMDgtLjMwMi0uNTA1LS40MTUtLjgxNS0uMzI3bC0uNDk5LjE0M2MtMS40MzMuNDEtMi44NjUtLjM3Ni0zLjQyNS0xLjcxOXptLjc4NC0uNzE3Yy0uNjc0LTEuNjE1LTIuODAyLTEuNjE1LTMuNDc2IDBsLS4xMzguMzMyYy0uMzgzLjkxNy0xLjMyNiAxLjQwMS0yLjIyOCAxLjE0M2wtLjQ5OS0uMTQzYy0xLjU3NS0uNDUtMi44NTUgMS4zOTgtMi4wMTIgMi45LjUwNS45LjI1NyAyLjA3LS41NiAyLjY0LTEuMzkyLjk3My0uOTMzIDMuMjgyLjcwNiAzLjU1NWwuMTk1LjAzMmMuOTYuMTYgMS42NSAxLjA5IDEuNTg4IDIuMTM1LS4xMDQgMS43ODggMS44MiAyLjg2NCAzLjEwMyAxLjcyN2wuMzczLS4zM2ExLjggMS44IDAgMDEyLjQyIDBsLjM3My4zM2MxLjI4NCAxLjEzNyAzLjIwNy4wNjEgMy4xMDMtMS43MjctLjA2MS0xLjA0Ni42MjgtMS45NzUgMS41ODktMi4xMzVsLjE5NC0uMDMyYzEuNjM5LS4yNzMgMi4wOTgtMi41ODIuNzA3LTMuNTU0LS44MTgtLjU3Mi0xLjA2Ni0xLjc0Mi0uNTYxLTIuNjQuODQzLTEuNTAzLS40MzctMy4zNTItMi4wMTItMi45MDFsLS41LjE0M2MtLjkuMjU4LTEuODQ0LS4yMjYtMi4yMjYtMS4xNDN6Jy8lM0UlM0NwYXRoIGQ9J00xNiAxOC41YTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0wIDFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNoYXJlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMCA5LjVhMy41IDMuNSAwIDAwLTEuMzgzIDYuNzE2QTQuNTEzIDQuNTEzIDAgMDAxNiAxOC40MzZhNC41MTMgNC41MTMgMCAwMC0yLjYxOC0yLjIyIDMuNTAxIDMuNTAxIDAgMTAtMi43NjQgMEE0LjUwMiA0LjUwMiAwIDAwNy41IDIwLjVWMjJoMTd2LTEuNWMwLTIuMDAzLTEuMzA5LTMuNy0zLjExOC00LjI4NEEzLjUwMSAzLjUwMSAwIDAwMjAgOS41ek0xNy41IDEzYTIuNSAyLjUgMCAxMTUgMCAyLjUgMi41IDAgMDEtNSAwem0tMSA4di0uNWEzLjUgMy41IDAgMTE3IDB2LjV6bS0xLS41di41aC03di0uNWEzLjUgMy41IDAgMTE3IDB6bS02LTcuNWEyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zbWlsZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAyMGE0LjAwMiA0LjAwMiAwIDAxLTMuODc0LTNoMS4wNDVhMy4wMDEgMy4wMDEgMCAwMDUuNjU4IDBoMS4wNDVBNC4wMDIgNC4wMDIgMCAwMTE2IDIwek0xOS41IDE0LjEyNWEuODc1Ljg3NSAwIDExLTEuNzUgMCAuODc1Ljg3NSAwIDAxMS43NSAwek0xMy4xMjUgMTVhLjg3NS44NzUgMCAxMDAtMS43NS44NzUuODc1IDAgMDAwIDEuNzV6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTI0IDE2YTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tMSAwYTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtYXNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMC41IDguMjkzbDMuMzU0IDMuMzUzLS43MDguNzA4TDIxIDEwLjIwN1YyM2gtMVYxMC4yMDdsLTIuMTQ2IDIuMTQ3LS43MDgtLjcwOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc29ydC1hbHBoYS1kc2Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTAuODk3IDlMOSAxNGgxLjA3bC4zNzktMWgyLjEzM2wuMzM4IDFoMS4wNTZsLTEuNjktNXptMS4zNDcgM2wtLjY2Ny0xLjk3M0wxMC44MjggMTJ6TTEyLjU1MyAxOUg5LjV2LTFIMTR2Ljk3OUwxMC45MzIgMjJIMTR2MUg5LjV2LS45OTN6TTIwIDIxLjc5M1Y5aDF2MTIuNzkzbDIuMTQ2LTIuMTQ3LjcwOC43MDgtMy4zNTQgMy4zNTMtMy4zNTQtMy4zNTMuNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtdG9wLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAuNDUgMTJIMTB2LTFoMTAuNDVjLjk3IDAgMS4zNzIgMS4yNDQuNTg0IDEuODEyTDExLjA1IDIwaDkuMjQzbC0xLjY0Ny0xLjY0Ni43MDgtLjcwOCAyLjg1MyAyLjg1NC0yLjg1MyAyLjg1NC0uNzA4LS43MDhMMjAuMjkzIDIxSDExLjA1Yy0uOTcgMC0xLjM3Mi0xLjI0NC0uNTg0LTEuODEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMiAxMWgtMnYxMGgydjFoLTNWMTBoM3ptLTEwLTF2MTJIOXYtMWgyVjExSDl2LTF6bTQgM2gtMXY2aDF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwaW5uZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE2NSA4LjUzYS41LjUgMCAwMS0uNDA0LjU4QTcgNyAwIDEwMjMgMTZhLjUuNSAwIDAxMSAwIDggOCAwIDExLTkuNDE2LTcuODc0LjUuNSAwIDAxLjU4LjQwNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdGFyLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTggMTQuMDA0TDE2IDhsLTIgNi4wMDRIOEwxMi45NiAxOGwtMS45MDQgNkwxNiAyMGw0Ljk0NCA0LTEuOTA0LTZMMjQgMTR6bTMuMTY1Ljk5OGwtMy44ODYuMDAyTDE2IDExLjE2NGwtMS4yOCAzLjg0aC0zLjg4NWwzLjI4NSAyLjY0Ni0xLjEwMyAzLjQ3N0wxNiAxOC43MTRsMi45ODMgMi40MTMtMS4xMDMtMy40NzZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDhsMiA2LjAwNEwyNCAxNGwtNC45NiA0IDEuOTA0IDZMMTYgMjBsLTQuOTQ0IDQgMS45MDQtNkw4IDE0LjAwNGg2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHJva2Utd2VpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnYxSDEwem0wIDRoMTJ2MkgxMHptMTIgNUgxMHYzaDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0eWxlcyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExLjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE3LjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE5IDIwLjVhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3pNMTEuNSAxOWExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3dhcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIzIDEzLjE4OGwtMS4xNzUgMS40NjhhNS41IDUuNSAwIDAwLTEwLjAwMy0yLjIxOWwuODMuNTU3YTQuNSA0LjUgMCAwMTguMjE2IDIuMDU3bC0yLjItMS40NjctLjU1NS44MzIgMy4zODEgMi4yNTQgMi4yODctMi44NTh6TTkgMTcuMTg4bC43OC42MjQgMS4xNzYtMS40NjguMDI2LjE1NmE1LjUgNS41IDAgMDA5Ljk3NiAyLjA2NXYtLjAwMmwtLjgzLS41NTctLjAwMS4wMDFhNC41IDQuNSAwIDAxLTguMjE0LTIuMDU4bDIuMiAxLjQ2Ny41NTUtLjgzMi0zLjM4Mi0yLjI1NHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGhlbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzIDEwaC0zdjEyaDN6bS0zLTFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDNhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMC43NSAyMC41YS43NS43NSAwIDExMS41IDAgLjc1Ljc1IDAgMDEtMS41IDB6TTIyIDE4YTEgMSAwIDAxMSAxdjNhMSAxIDAgMDEtMSAxaC03di0xaDd2LTNoLTd2LTF6TTE4LjM4NSAxN2wyLjc1Ny0yLjc1N2ExIDEgMCAwMDAtMS40MTVsLTIuMTIxLTIuMTJhMSAxIDAgMDAtMS40MTQgMEwxNSAxMy4zMTN2MS40MTRsMy4zMTQtMy4zMTQgMi4xMjEgMi4xMjJMMTYuOTcxIDE3eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWdyaWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAxMGgydjJoLTJ6TTIwIDEwaDJ2MmgtMnpNMTIgMTVoLTJ2Mmgyek0yMCAxNWgydjJoLTJ6TTEyIDIwaC0ydjJoMnpNMjAgMjBoMnYyaC0yek0xNyAxMGgtMnYyaDJ6TTE1IDE1aDJ2MmgtMnpNMTcgMjBoLTJ2MmgyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWxpc3QtaG9yaXpvbnRhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjV2LTEzaDJ2MTN6TTE1IDIyLjV2LTEzaDJ2MTN6TTIwIDkuNXYxM2gydi0xM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOS41IDEwaDEzdjJoLTEzek05LjUgMTVoMTN2MmgtMTN6TTIyLjUgMjBoLTEzdjJoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpbWVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTkgOGgtNlY3aDZ6TTE2LjUgMTd2LTVoLTF2NWEuNS41IDAgMDAxIDB6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyLjcxNSAxMi42NWwxLjUyNy0xLjUyOUwyMi4xMjIgOWwtMS40ODMgMS40ODJhOCA4IDAgMTAyLjA3NSAyLjE2N3pNMjMgMTdhNyA3IDAgMTEtMi4zODQtNS4yNjNsLjY0Ny42NDdBNi45NzQgNi45NzQgMCAwMTIzIDE3em0tMS4wMDgtNS4zbC4xMy4xMjguNzA2LS43MDctLjcwNy0uNzA3LS43MDEuNzAxYy4yLjE4NS4zOTEuMzguNTcyLjU4NXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10cmFzaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0IDE4LjV2LTRoMXY0ek0xNyAxOC41di00aDF2NHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTAuNWEyIDIgMCAwMC0yLTJoLTJhMiAyIDAgMDAtMiAyaC0zdjFoMXYxMGEyIDIgMCAwMDIgMmg2YTIgMiAwIDAwMi0ydi0xMGgxdi0xem0tNC0xYTEgMSAwIDAwLTEgMWg0YTEgMSAwIDAwLTEtMXptNSAyaC04djEwYTEgMSAwIDAwMSAxaDZhMSAxIDAgMDAxLTF6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdmVydGljYWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYxSDl6bTAgMTNoMTR2MUg5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOSAxM2gtNnY2aDZ6bS03LTF2OGg4di04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZpc2libGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAxOGEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMTJhNy40OTkgNy40OTkgMCAwMTYuNjM1IDRBNy40OTkgNy40OTkgMCAwMTE2IDIwYTcuNDk5IDcuNDk5IDAgMDEtNi42MzUtNEE3LjQ5OSA3LjQ5OSAwIDAxMTYgMTJ6bTAgN2E2LjQ5NSA2LjQ5NSAwIDAxLTUuNDc4LTNBNi40OTUgNi40OTUgMCAwMTE2IDEzYzIuMyAwIDQuMzIyIDEuMTk0IDUuNDc4IDNBNi40OTUgNi40OTUgMCAwMTE2IDE5eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmctbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDZsMTAgMThINnptLTEgMTF2LTRoMnY0em0wIDJ2Mmgydi0yeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDlsOCAxNEg4em0tMSA4LjVWMTRoMnYzLjV6bTAgMS41djJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmljb24tYnV0dG9uICoge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1ob3Zlci1maWxsKTtcXG59XFxuXFxuLmljb24tYnV0dG9uOmFjdGl2ZSwgLmljb24tYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDphY3RpdmUsIC5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5pbnB1dF9fZmllbGQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpob3ZlciwgLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93bjpob3ZlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDphY3RpdmUsIC5pbnB1dF9fZmllbGQ6Zm9jdXMge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uaW5wdXQtLXdpdGgtaWNvbiAuaW5wdXRfX2ZpZWxkIHtcXG4gIHBhZGRpbmctbGVmdDogMzJweDtcXG59XFxuXFxuLmlucHV0IC5pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMHB4O1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogdG9wO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCAwO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXAgLmljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXBfX21zZyB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5yYWRpbyB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHZpZXdCb3g9XFxcIjAgMCA2IDZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIlM0UlM0NyZWN0IHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHJ4PVxcXCIzXFxcIiBmaWxsPVxcXCJibGFja1xcXCIgZmlsbC1vcGFjaXR5PVxcXCIwLjhcXFwiLyUzRSUzQy9zdmclM0UlMEEnKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggMnB4O1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWwge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkOmRpc2FibGVkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDJweCAxMHB4IDAgLThweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLnNlY3Rpb24tdGl0bGUge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXh4c21hbGwpIC8gMikgMCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG5zZWxlY3Quc2VsZWN0LW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMzBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXh4c21hbGwpIDBweCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYmxhY2sxKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24gKiB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZDpob3ZlciAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCwgLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAxLjA7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkIC5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2NhcmV0IHtcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjMwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzAlMjAzMCUyMiUyMHdpZHRoJTNEJTIyMzAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xNSUyMDE2LjcwNzEtMy0zJTIwLjcwNzEtLjcwNzElMjAyLjY0NjUlMjAyLjY0NjQlMjAyLjY0NjQtMi42NDY0LjcwNzEuNzA3MS0zJTIwMy0uMzUzNS4zNTM2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51IC5pY29uIHtcXG4gIG1hcmdpbi1sZWZ0OiAtOHB4O1xcbiAgbWFyZ2luLXRvcDogLTJweDtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1odWQpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWh1ZCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBtYXJnaW46IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgb3ZlcmZsb3cteDogb3ZlcmxheTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudS0tYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9KTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICBib3JkZXI6IHNvbGlkIDNweCB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IDEwcHggdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMHB4IHZhcigtLXNpemUteHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0tLXNlbGVjdGVkIC5zZWxlY3QtbWVudV9faXRlbS1pY29uIHtcXG4gIG9wYWNpdHk6IDEuMDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWxhYmVsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEzLjIwNjklMjA1LjIwNzI0LTUuNTAwMDIlMjA1LjQ5OTk2LS43MDcxMS43MDcyLS43MDcxMS0uNzA3Mi0zLTIuOTk5OTYlMjAxLjQxNDIyLTEuNDE0MjElMjAyLjI5Mjg5JTIwMi4yOTI4OSUyMDQuNzkyOTMtNC43OTI4OXolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5zZWxlY3QtbWVudS0taGlnaGxpZ2h0LCAuc2VsZWN0LW1lbnVfX2l0ZW06aG92ZXIsIC5zZWxlY3QtbWVudV9faXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19kaXZpZGVyLWxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHhzbWFsbCkgMCB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBjb2xvcjogdmFyKC0td2hpdGU0KTtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZTIpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG1hcmdpbjogOHB4IDAgN3B4IDA7XFxufVxcblxcbi5zd2l0Y2gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qXFxuICAgICZfX3RvZ2dsZTpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuICAgIH1cXG4gICAgKi9cXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4LW9wYXF1ZSk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEycHgpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZDpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjayk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgY2FsYyh2YXIoLS1zaXplLXhsYXJnZSkgLSAycHgpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMCAwLjJzO1xcbiAgd2lkdGg6IDIycHg7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xcbiAgd2lkdGg6IDEwcHg7XFxufVxcblxcbi50ZXh0YXJlYSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiA2MnB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgcmVzaXplOiBub25lO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXFxuLnRleHRhcmVhOmhvdmVyLCAudGV4dGFyZWE6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmFjdGl2ZSwgLnRleHRhcmVhOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQsIC50ZXh0YXJlYTpkaXNhYmxlZDpob3ZlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQ6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi50eXBlIHtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgLyogc2l6ZXMgKi9cXG4gIC8qIHdlaWdodHMgKi9cXG4gIC8qIGxldHRlciBzcGFjaW5nIGFkanVzdG1lbnRzIGJhc2VkIHBvcy9uZWcgYXBwbGljYXRpb24gKi9cXG59XFxuXFxuLnR5cGUtLXNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1sYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0teGxhcmdlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLW1lZGl1bSB7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG59XFxuXFxuLnR5cGUtLWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tc21hbGwge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tbGFyZ2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0teGxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0taW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9maWdtYS1wbHVnaW4tZHMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLFNBQVM7QUFDVDtFQUNFLFdBQVc7RUFDWCxXQUFXO0VBQ1gsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQiwyQkFBMkI7RUFDM0Isd0JBQXdCO0VBQ3hCLDJCQUEyQjtFQUMzQix3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osMkJBQTJCO0VBQzNCLCtCQUErQjtFQUMvQixpQ0FBaUM7RUFDakMsZ0NBQWdDO0VBQ2hDLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsaUNBQWlDO0VBQ2pDLGVBQWU7RUFDZixpREFBaUQ7RUFDakQsaURBQWlEO0VBQ2pELGVBQWU7RUFDZixpQ0FBaUM7RUFDakMsZUFBZTtFQUNmLHdCQUF3QjtFQUN4Qix1QkFBdUI7RUFDdkIsdUJBQXVCO0VBQ3ZCLHdCQUF3QjtFQUN4QixpQkFBaUI7RUFDakIseUJBQXlCO0VBQ3pCLHlCQUF5QjtFQUN6Qix1QkFBdUI7RUFDdkIsZUFBZTtFQUNmLHdCQUF3QjtFQUN4QixxQ0FBcUM7RUFDckMsOEJBQThCO0VBQzlCLHFDQUFxQztFQUNyQyxrQkFBa0I7RUFDbEIsd0NBQXdDO0VBQ3hDLHVDQUF1QztFQUN2QyxrQ0FBa0M7RUFDbEMsdUNBQXVDO0VBQ3ZDLHlDQUF5QztFQUN6Qyx3Q0FBd0M7RUFDeEMseUNBQXlDO0VBQ3pDLHlDQUF5QztFQUN6QyxrQkFBa0I7RUFDbEIsMEJB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Q0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCLGtDQUFrQztFQUNsQyxzQ0FBc0M7RUFDdEMsb0NBQW9DO0VBQ3BDLHFEQUFxRDtFQUNyRCxVQUFVO0VBQ1YsWUFBWTtFQUNaLHlEQUF5RDtBQUMzRDs7QUFFQTtFQUNFLGlDQUFpQztFQUNqQyxvREFBb0Q7QUFDdEQ7O0FBRUE7RUFDRSxpQ0FBaUM7RUFDakMsMENBQTBDO0VBQzFDLG9EQUFvRDtBQUN0RDs7QUFFQTtFQUNFLGtDQUFrQztFQUNsQywwQ0FBMEM7RUFDMUMscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usc0NBQXNDO0FBQ3hDOztBQUVBO0VBQ0Usb0NBQW9DO0FBQ3RDOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIFZhcnMgKi9cXG46cm9vdCB7XFxuICAvKiBDT0xPUlMgKi9cXG4gIC8qIEFjY2VudCAqL1xcbiAgLS1ibHVlOiAjMThhMGZiO1xcbiAgLS1wdXJwbGU6ICM3YjYxZmY7XFxuICAtLWhvdC1waW5rOiAjZmYwMGZmO1xcbiAgLS1ncmVlbjogIzFiYzQ3ZDtcXG4gIC0tcmVkOiAjZjI0ODIyO1xcbiAgLS15ZWxsb3c6ICNmZmViMDA7XFxuICAvKiBCYXNpYyBmb3JlZ3JvdW5kICovXFxuICAtLWJsYWNrOiAjMDAwMDAwO1xcbiAgLS1ibGFjazg6IHJnYmEoMCwgMCwgMCwgLjgpO1xcbiAgLS1ibGFjazgtb3BhcXVlOiAjMzMzMzMzO1xcbiAgLS1ibGFjazM6IHJnYmEoMCwgMCwgMCwgLjMpO1xcbiAgLS1ibGFjazMtb3BhcXVlOiAjQjNCM0IzO1xcbiAgLS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0td2hpdGU4OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44KTtcXG4gIC0td2hpdGU0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC40KTtcXG4gIC8qIEJhc2ljIGJhY2tncm91bmQgKi9cXG4gIC0tZ3JleTogI2YwZjBmMDtcXG4gIC0tc2lsdmVyOiAjZTVlNWU1O1xcbiAgLS1odWQ6ICMyMjIyMjI7XFxuICAtLXRvb2xiYXI6ICMyYzJjMmM7XFxuICAvKiBTcGVjaWFsICovXFxuICAtLWJsYWNrMTogcmdiYSgwLCAwLCAwLCAuMSk7XFxuICAtLWJsdWUzOiByZ2JhKDI0LCAxNDUsIDI1MSwgLjMpO1xcbiAgLS1wdXJwbGU0OiByZ2JhKDEyMywgOTcsIDI1NSwgLjQpO1xcbiAgLS1ob3Zlci1maWxsOiByZ2JhKDAsIDAsIDAsIC4wNik7XFxuICAtLXNlbGVjdGlvbi1hOiAjZGFlYmY3O1xcbiAgLS1zZWxlY3Rpb24tYjogI2VkZjVmYTtcXG4gIC0td2hpdGUyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4yKTtcXG4gIC8qIFRZUE9HUkFQSFkgKi9cXG4gIC8qIFBvcyA9IHBvc2l0aXZlIGFwcGxpY2F0aW9ucyAoYmxhY2sgb24gd2hpdGUpICovXFxuICAvKiBOZWcgPSBuZWdhdGl2ZSBhcHBsaWNhdGlvbnMgKHdoaXRlIG9uIGJsYWNrKSAqL1xcbiAgLyogRm9udCBzdGFjayAqL1xcbiAgLS1mb250LXN0YWNrOiAnSW50ZXInLCBzYW5zLXNlcmlmO1xcbiAgLyogRm9udCBzaXplcyAqL1xcbiAgLS1mb250LXNpemUteHNtYWxsOiAxMXB4O1xcbiAgLS1mb250LXNpemUtc21hbGw6IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1sYXJnZTogMTNweDtcXG4gIC0tZm9udC1zaXplLXhsYXJnZTogMTRweDtcXG4gIC8qIEZvbnQgd2VpZ2h0cyAqL1xcbiAgLS1mb250LXdlaWdodC1ub3JtYWw6IDQwMDtcXG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWJvbGQ6IDYwMDtcXG4gIC8qIExpbmVoZWlnaHQgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodDogMTZweDtcXG4gIC8qIFVzZSBGb3IgeHNtYWxsLCBzbWFsbCBmb250IHNpemVzICovXFxuICAtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2U6IDI0cHg7XFxuICAvKiBVc2UgRm9yIGxhcmdlLCB4bGFyZ2UgZm9udCBzaXplcyAqL1xcbiAgLyogTGV0dGVyc3BhY2luZyAqL1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsOiAuMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGw6IDA7XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsOiAuMDA1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlOiAtLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctbGFyZ2U6IC4wMDI1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZTogLS4wMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlOiAtLjAwMWVtO1xcbiAgLyogQk9SREVSIFJBRElVUyAqL1xcbiAgLS1ib3JkZXItcmFkaXVzLXNtYWxsOiAycHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbWVkOiA1cHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbGFyZ2U6IDZweDtcXG4gIC8qIFNIQURPV1MgKi9cXG4gIC0tc2hhZG93LWh1ZDogMCA1cHggMTdweCByZ2JhKDAsIDAsIDAsIC4yKSwgMCAycHggN3B4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC0tc2hhZG93LWZsb2F0aW5nLXdpbmRvdzogMCAycHggMTRweCByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuICAvKiBTUEFDSU5HICsgU0laSU5HICovXFxuICAtLXNpemUteHh4c21hbGw6IDRweDtcXG4gIC0tc2l6ZS14eHNtYWxsOiA4cHg7XFxuICAtLXNpemUteHNtYWxsOiAxNnB4O1xcbiAgLS1zaXplLXNtYWxsOiAyNHB4O1xcbiAgLS1zaXplLW1lZGl1bTogMzJweDtcXG4gIC0tc2l6ZS1sYXJnZTogNDBweDtcXG4gIC0tc2l6ZS14bGFyZ2U6IDQ4cHg7XFxuICAtLXNpemUteHhsYXJnZTogNjRweDtcXG4gIC0tc2l6ZS14eHhsYXJnZTogODBweDtcXG59XFxuXFxuLyogR2xvYmFsIHN0eWxlcyAqL1xcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4vKiAgRk9OVFMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1SZWd1bGFyLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItTWVkaXVtLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbi8qIFVUSUxJVElFUyAqL1xcbi8qIHBhZGRpbmcgKi9cXG4ucC14eHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnAteHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucC14c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucC1zbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnAtbWVkaXVtIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnAtbGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wLXhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wLXh4bGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnAtaHVnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyB0b3AgKi9cXG4ucHQteHh4c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnB0LXhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucHQtc21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHQtbWVkaXVtIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wdC1sYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wdC14bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnB0LXh4bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wdC1odWdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyByaWdodCAqL1xcbi5wci14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnByLXh4c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnByLXhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wci1zbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnByLW1lZGl1bSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wci1sYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnByLXhsYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wci14eGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wci1odWdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGJvdHRvbSAqL1xcbi5wYi14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wYi14eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGIteHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wYi1zbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wYi1tZWRpdW0ge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBiLWxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBiLXhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucGIteHhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBiLWh1Z2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGxlZnQgKi9cXG4ucGwteHh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBsLXh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucGwtc21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBsLW1lZGl1bSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBsLWxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wbC14bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wbC14eGxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBsLWh1Z2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luICovXFxuLm0teHh4c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm0teHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tLXhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm0tc21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm0tbWVkaXVtIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubS1sYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubS14bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tLXh4bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubS1odWdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiB0b3AgKi9cXG4ubXQteHh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tdC14eHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tdC14c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXQtc21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tdC1tZWRpdW0ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubXQtbGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tdC14bGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXQteHhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubXQtaHVnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHJpZ2h0ICovXFxuLm1yLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tci14eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1yLXhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1yLXNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tci1tZWRpdW0ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tci1sYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubXIteGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXIteHhsYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tci1odWdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiBib3R0b20gKi9cXG4ubWIteHh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tYi14eHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tYi14c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWItc21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tYi1tZWRpdW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubWItbGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tYi14bGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWIteHhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubWItaHVnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGxlZnQgKi9cXG4ubWwteHh4c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1sLXhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWwtc21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubWwtbWVkaXVtIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tbC1sYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tbC14bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1sLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tbC1odWdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbGF5b3V0IHV0aWxpdGllcyAqL1xcbi5oaWRkZW4ge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmU7XFxufVxcblxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY29sdW1uLXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG5cXG4ucm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5yb3ctcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5mbGV4LXdyYXAge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG5cXG4uZmxleC13cmFwLXJldmVyc2Uge1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcblxcbi5mbGV4LW5vLXdyYXAge1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcblxcbi5mbGV4LXNocmluayB7XFxuICBmbGV4LXNocmluazogMTtcXG59XFxuXFxuLmZsZXgtbm8tc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uZmxleC1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZsZXgtbm8tZ3JvdyB7XFxuICBmbGV4LWdyb3c6IDA7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtc3RhcnQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWVuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1iZXR3ZWVuIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1jZW50ZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LXN0YXJ0IHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWVuZCB7XFxuICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtY2VudGVyIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RyZXRjaCB7XFxuICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdGFydCB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1lbmQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1jZW50ZXIge1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcblxcbi5idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxhcmdlKTtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpIDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeTplbmFibGVkOmZvY3VzLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLXJlZCk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmRpc2FibGVkLCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmUge1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmNoZWNrYm94IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiB1bmNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG5cXHRcXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aGl0ZSk7XFxuXFx0ICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG5cXHR9Ki9cXG4gIC8qIGNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmNoZWNrZWQ6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IC0xcHggMTBweCAwIC04cHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA4JTIwNyUyMiUyMHdpZHRoJTNEJTIyOCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEuMTc2NDclMjAxLjg4MjM2JTIwMS44ODIzNSUyMDEuODgyMzYlMjAzLjc2NDcxLTMuNzY0NzIlMjAxLjE3NjQ3JTIwMS4xNzY0OC00Ljk0MTE4JTIwNC45NDEyLTMuMDU4ODItMy4wNTg4NHolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDFweCAycHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zaWx2ZXIpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgOHB4IDAgMjRweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDhweDtcXG4gIGxlZnQ6IDRweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtMTElMjA4LTQtM3Y2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWw6aG92ZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1zZWN0aW9uIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLWV4cGFuZGVkIC5kaXNjbG9zdXJlX19jb250ZW50IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtOSUyMDEwJTIwMy00aC02eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTJweCAtMXB4O1xcbn1cXG5cXG4uaWNvbi0tc3BpbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcm90YXRpbmcge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG4uaWNvbi0tYmx1ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDU0JSkgc2VwaWEoMTYlKSBzYXR1cmF0ZSg3NDk5JSkgaHVlLXJvdGF0ZSgxNzlkZWcpIGJyaWdodG5lc3MoOTglKSBjb250cmFzdCgxMDElKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG59XFxuXFxuLmljb24tLXB1cnBsZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3MiUpIHNlcGlhKDQwJSkgc2F0dXJhdGUoNjYwJSkgaHVlLXJvdGF0ZSgyMDJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG59XFxuXFxuLmljb24tLWhvdC1waW5rIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG59XFxuXFxuLmljb24tLWdyZWVuIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNjYlKSBzZXBpYSgzOSUpIHNhdHVyYXRlKDUzODIlKSBodWUtcm90YXRlKDExNGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCg3OSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxufVxcblxcbi5pY29uLS1yZWQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDMlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDU2MzIlKSBodWUtcm90YXRlKDM0OWRlZykgYnJpZ2h0bmVzcyg5NyUpIGNvbnRyYXN0KDk1JSk7XFxufVxcblxcbi5pY29uLS15ZWxsb3cge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzglKSBzZXBpYSg4NiUpIHNhdHVyYXRlKDE2MDglKSBodWUtcm90YXRlKDFkZWcpIGJyaWdodG5lc3MoMTA3JSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pY29uLS1ibGFjayB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDI1JSkgaHVlLXJvdGF0ZSgxMzdkZWcpIGJyaWdodG5lc3MoMTA1JSkgY29udHJhc3QoNjAlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2szIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg2OTglKSBodWUtcm90YXRlKDIxOWRlZykgYnJpZ2h0bmVzcyg2NiUpIGNvbnRyYXN0KDEyNyUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLXdoaXRlOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbn1cXG5cXG4uaWNvbi0tYWRqdXN0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEyIDE2LjA1VjloMXY3LjA1YTIuNSAyLjUgMCAwMTAgNC45VjIzaC0xdi0yLjA1YTIuNSAyLjUgMCAwMTAtNC45em0yIDIuNDVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTE5IDIzaDF2LTcuMDVhMi41IDIuNSAwIDAwMC00LjlWOWgtMXYyLjA1YTIuNSAyLjUgMCAwMDAgNC45em0yLTkuNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxlcnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjI1IDE3LjM5M2ExLjc1IDEuNzUgMCAwMDEuNzUgMS43NVYyMEg5di0uODU3YTEuNzUgMS43NSAwIDAwMS43NS0xLjc1VjE0YzAtMy4zMTQgMi4zNS02IDUuMjUtNnM1LjI1IDIuNjg2IDUuMjUgNnptLTEtMy4zOTN2My4zOTNjMCAuNi4xOTIgMS4xNTUuNTE4IDEuNjA3aC05LjUzNmEyLjczOCAyLjczOCAwIDAwLjUxOC0xLjYwN1YxNGMwLTIuODkxIDIuMDI0LTUgNC4yNS01czQuMjUgMi4xMDkgNC4yNSA1eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xNiAyM2EyIDIgMCAwMS0yLTJoLTFhMyAzIDAgMTA2IDBoLTFhMiAyIDAgMDEtMiAyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbmdsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIgMTJ2OGg4di0xaC0zYTQgNCAwIDAwLTQtNHYtM3ptMSA0djNoM2EzIDMgMCAwMC0zLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXJyb3ctbGVmdC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyLjIwNyAxNi41bDEuNjQ3IDEuNjQ2LS43MDcuNzA4TDEwLjI5MyAxNmwyLjg1NC0yLjg1NC43MDcuNzA4LTEuNjQ3IDEuNjQ2aDcuNTg2bC0xLjY0Ni0xLjY0Ni43MDctLjcwOEwyMS43MDcgMTZsLTIuODUzIDIuODU0LS43MDctLjcwOCAxLjY0Ni0xLjY0NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdXAtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDEwLjI5MmwyLjg1NCAyLjg1NC0uNzA3LjcwNy0xLjY0Ni0xLjY0NnY3LjU4NWwxLjY0Ni0xLjY0Ni43MDcuNzA3LTIuODUzIDIuODU0LTIuODU0LTIuODU0LjcwNy0uNzA3IDEuNjQ3IDEuNjQ2di03LjU4NWwtMS42NDcgMS42NDYtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hdXRvLWxheW91dC1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGg1djEyaC01em0xIDFoM3YxMGgtM3ptNi0xaDV2MTJoLTV6bTEgMWgzdjEwaC0zeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnY1SDEwem0xIDFoMTB2M0gxMXptLTEgNmgxMnY1SDEwem0xIDFoMTB2M0gxMXonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1iYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy43MDcgMTZsNC42NDYtNC42NDYtLjcwNy0uNzA3TDEyLjI5MyAxNmw1LjM1MyA1LjM1NC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ibGVuZC1lbXB0eSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYuNjk1IDExLjcybC0uNjkzLS43MThMMTYgMTFsLS4wMDEuMDAyLS42OTQuNzE4QzEzLjEwMiAxNC4wMTIgMTIgMTUuMjk0IDEyIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAwMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMDUuNjU2IDBBNC4xOTkgNC4xOTkgMCAwMDIwIDE2Ljg1MmMwLTEuNTU4LTEuMTAyLTIuODQtMy4zMDUtNS4xMzJ6bS0uNjk1LjcyYy0uOTc3IDEuMDE3LTEuNjkzIDEuNzktMi4xOTUgMi40NzEtLjYuODE0LS44MDUgMS4zOC0uODA1IDEuOTR2LjAwM2EzLjIgMy4yIDAgMDAuODkgMi4yMzkgMi45MDYgMi45MDYgMCAwMDQuMjIgMCAzLjIgMy4yIDAgMDAuODktMi4yMzl2LS4wMDJjMC0uNTYtLjIwNS0xLjEyNy0uODA1LTEuOTQtLjUwMi0uNjgxLTEuMjE5LTEuNDU1LTIuMTk1LTIuNDcyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi4wMDIgMTEuMDAybC42OTMuNzE4QzE4Ljg5OCAxNC4wMTIgMjAgMTUuMjk0IDIwIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAxLTEuMTcyIDIuOTM2IDMuOTA2IDMuOTA2IDAgMDEtNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAxMTIgMTYuODUyYzAtMS41NTggMS4xMDItMi44NCAzLjMwNS01LjEzMmwuNjk0LS43MTl6bS0yLjE5NyAzLjkxYy41MDItLjY4MSAxLjIxOS0xLjQ1NSAyLjE5NS0yLjQ3Mi45NzYgMS4wMTcgMS42OTMgMS43OSAyLjE5NSAyLjQ3MS42LjgxNC44MDUgMS4zOC44MDUgMS45NHYuMDAzYzAgLjA0OSAwIC4wOTgtLjAwMy4xNDZoLTUuOTk0YTMuMzcgMy4zNyAwIDAxLS4wMDMtLjE0NnYtLjAwMmMwLS41Ni4yMDUtMS4xMjcuODA1LTEuOTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYnJlYWsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgb3BhY2l0eT0nLjknJTNFJTNDcGF0aCBkPSdNMTMgOXYzaDFWOXpNMjIuMTAzIDkuODk2YTIuOTc1IDIuOTc1IDAgMDAtNC4yMDcgMGwtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTEuOTc1IDEuOTc1IDAgMDEyLjc5MyAyLjc5M2wtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTIuOTc1IDIuOTc1IDAgMDAwLTQuMjA3ek05Ljg5NiAyMi4xMDRhMi45NzUgMi45NzUgMCAwMTAtNC4yMDhsMi43NS0yLjc1LjcwNy43MDctMi43NSAyLjc1YTEuOTc1IDEuOTc1IDAgMDAyLjc5MyAyLjc5M2wyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMi45NzUgMi45NzUgMCAwMS00LjIwNyAwek0yMyAxOWgtM3YtMWgzek0xOSAyMHYzaC0xdi0zek0xMiAxM0g5djFoM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE4bDMtNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzIDE2bDQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE5IDE2bC00LTN2NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNGwzIDRoLTZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNoZWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS4yMDcgMTMuNzA3TDE1IDE5LjkxNGwtMy43MDctMy43MDcgMS40MTQtMS40MTRMMTUgMTcuMDg2bDQuNzkzLTQuNzkzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNsb3NlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTUuMjkzbDQuNjQ2LTQuNjQ2LjcwOC43MDdMMTYuNzA3IDE2bDQuNjQ3IDQuNjQ3LS43MDcuNzA3TDE2IDE2LjcwN2wtNC42NDYgNC42NDctLjcwNy0uNzA3TDE1LjI5MyAxNmwtNC42NDYtNC42NDYuNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvbXBvbmVudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIuMDYzIDEwLjkzOEwxNiAxNC44NzRsMy45MzgtMy45MzhMMTYgN3ptNi40NiAwTDE2IDEzLjQ2bC0yLjUyMy0yLjUyNEwxNiA4LjQxNXptLTYuNDYgMTAuMTI0TDE2IDI1bDMuOTM4LTMuOTM4TDE2IDE3LjEyNXptNi40NiAwTDE2IDIzLjU4N2wtMi41MjMtMi41MjNMMTYgMTguNTM4ek03IDE2bDMuOTM3LTMuOTM4TDE0Ljg3NSAxNmwtMy45MzggMy45Mzh6bTMuOTM3IDIuNTIzTDEzLjQ2MSAxNmwtMi41MjQtMi41MjNMOC40MTUgMTZ6TTE3LjEyNSAxNmwzLjkzOCAzLjkzOEwyNSAxNmwtMy45MzgtMy45Mzh6bTYuNDYgMGwtMi41MjMgMi41MjNMMTguNTQgMTZsMi41MjMtMi41MjN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29ybmVyLXJhZGl1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEgMTNoLTRhNCA0IDAgMDAtNCA0djRoLTF2LTRhNSA1IDAgMDE1LTVoNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAxMWgzdjFoLTJ2MmgtMXptNyAwaDN2M2gtMXYtMmgtMnptLTYgOXYtMmgtMXYzaDN2LTF6bTktMnYzaC0zdi0xaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZGlzdHJpYnV0ZS1ob3Jpem9udGFsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMSAyMi41di0xM2gtMXYxM3pNMjIgOS41djEzaC0xdi0xM3pNMTcgMTIuNXY3aC0ydi03eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLXZlcnRpY2FsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005LjUgMTBoMTN2MWgtMTN6TTEyLjUgMTVoN3YyaC03ek0yMi41IDIxaC0xM3YxaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kcmFmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgOC41aDcuNzA3TDIyIDEyLjc5M1YyMy41SDEwem0xIDF2MTNoMTB2LTloLTR2LTR6bTcgLjcwN2wyLjI5MyAyLjI5M0gxOHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1lZmZlY3RzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYuNSA4LjVoLTF2M2gxek0xMS4wNSAxMC4zNDNsLS43MDcuNzA3IDIuMTIxIDIuMTIyLjcwOC0uNzA4ek0yMS42NTcgMTEuMDVsLS43MDctLjcwNy0yLjEyMSAyLjEyMS43MDcuNzA4ek04LjUgMTUuNXYxaDN2LTF6TTIwLjUgMTUuNXYxaDN2LTF6TTEzLjE3MiAxOS41MzVsLS43MDgtLjcwNy0yLjEyIDIuMTIyLjcwNi43MDd6TTE5LjUzNSAxOC44MjhsLS43MDcuNzA3IDIuMTIyIDIuMTIyLjcwNy0uNzA3ek0xNi41IDIwLjVoLTF2M2gxeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC40OTggMTUuOTk4YTIuNSAyLjUgMCAxMS01IDAgMi41IDIuNSAwIDAxNSAwem0tMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVsbGlwc2VzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS41IDE2YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwem02IDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTQuNSAxLjVhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1leWVkcm9wcGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIuNDQ3IDkuNmMtLjgtLjgtMi0uOC0yLjggMGwtMi44IDIuOC0uOC0uN2MtLjQtLjQtMS0uNC0xLjQgMHMtLjQgMSAwIDEuNGwuNy43LTUuOCA1LjhjLS40LjQtMSAxLjkgMCAyLjlzMi41LjQgMi45IDBsNS44LTUuOC43LjdjLjQuNCAxIC40IDEuNCAwcy40LTEgMC0xLjRsLS43LS43IDIuOC0yLjhjLjgtLjkuOC0yLjEgMC0yLjl6bS0xMC45IDExLjloLTF2LTFsNS44LTUuOCAxIDFjLS4xIDAtNS44IDUuOC01LjggNS44eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1mb3J3YXJkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNy45NCAxNmwtNC42NDctNC42NDYuNzA3LS43MDdMMTkuMzU0IDE2IDE0IDIxLjM1NGwtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZyYW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAyNHYtM0g4di0xaDN2LThIOHYtMWgzVjhoMXYzaDhWOGgxdjNoM3YxaC0zdjhoM3YxaC0zdjNoLTF2LTNoLTh2M3ptOS00di04aC04djh6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZ3JvdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNy40IDloLTIuOHYxaDIuOHpNMjAuOSAyMkgyMnYtMS4xaDFWMjNoLTIuMXpNMTAgMTQuNnYyLjhIOXYtMi44ek0yMiAxMS4xVjEwaC0xLjFWOUgyM3YyLjF6TTIyIDE0LjZ2Mi44aDF2LTIuOHpNMTAgMTEuMVYxMGgxLjFWOUg5djIuMXpNOSAyMC45aDFWMjJoMS4xdjFIOXpNMTcuNCAyMmgtMi44djFoMi44eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oaWRkZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjUwOSAxNS44MDFBOC4wMzMgOC4wMzMgMCAwMDIyLjkyOCAxNGgtMS4xODRBNi45OTIgNi45OTIgMCAwMTE2IDE3YTYuOTkyIDYuOTkyIDAgMDEtNS43NDUtM0g5LjA3YTguMDMzIDguMDMzIDAgMDAxLjQyMSAxLjgwMWwtMS41OTUgMS41OTUuNzA4LjcwNyAxLjY1Ny0xLjY1N2MuNzEuNTIzIDEuNTExLjkzMiAyLjM3NCAxLjE5OWwtLjYxNyAyLjIyMS45NjQuMjY4LjYyNi0yLjI1NWE4LjA1MSA4LjA1MSAwIDAwMi43ODQgMGwuNjI2IDIuMjU1Ljk2NC0uMjY4LS42MTctMi4yMjFhNy45NzEgNy45NzEgMCAwMDIuMzc0LTEuMmwxLjY1OCAxLjY1OC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ob3Jpem9udGFsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDl2MTRoMVY5em0xMyAwdjE0aDFWOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTl2LTZoNnY2em0tMS03aDh2OGgtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oeXBlcmxpbmsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMC44MjQgMTQuNDkybC0xLjY1NyAxLjY1Ny44MjguODI5IDEuNjU4LTEuNjU3YTMuNTE3IDMuNTE3IDAgMDAtNC45NzMtNC45NzNsLTEuNjU3IDEuNjU4LjgyOS44MjggMS42NTctMS42NTdhMi4zNDUgMi4zNDUgMCAwMTMuMzE1IDMuMzE1em0tNC45NzQgNC45NzJsLjgyOS44MjktMS42NTggMS42NTdhMy41MTYgMy41MTYgMCAxMS00Ljk3Mi00Ljk3MmwxLjY1OS0xLjY1OC44MjguODI5LTEuNjU2IDEuNjU3YTIuMzQzIDIuMzQzIDAgMTAzLjMxNSAzLjMxNWwxLjY1Ny0xLjY1N3ptMi4wNzItNi4yMTZsLTQuOTcyIDQuOTczLjgyOC44MjkgNC45NzMtNC45NzN6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWltYWdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMiAxMEgxMHY3Ljc5M2wzLjA4My0zLjA4MyA3LjI5IDcuMjlIMjJ6TTEwIDIydi0yLjc5M2wzLjA4My0zLjA4M0wxOC45NiAyMnptMC0xM2ExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xem05LjY2NyA0LjY2N2ExLjMzMyAxLjMzMyAwIDExLTIuNjY3IDAgMS4zMzMgMS4zMzMgMCAwMTIuNjY3IDB6bTEgMGEyLjMzMyAyLjMzMyAwIDExLTQuNjY3IDAgMi4zMzMgMi4zMzMgMCAwMTQuNjY3IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW5zdGFuY2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDdsOSA5LTkgOS05LTl6bS03LjU4NiA5TDE2IDIzLjU4NiAyMy41ODYgMTYgMTYgOC40MTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0ta2V5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNCAyMC4xNGEzLjAxNCAzLjAxNCAwIDAwLjMzMS0zLjg2OGwyLjA0Ny0yLjA0NyAxLjc2NyAxLjc2N2EuNS41IDAgMTAuNzA3LS43MDdsLTEuNzY3LTEuNzY3IDEuMjkzLTEuMjkzIDEuNzg0IDEuNzg0YS41LjUgMCAxMC43MDctLjcwN2wtMS43ODQtMS43ODQuNzYyLS43NjFhLjUuNSAwIDAwLS43MDctLjcwOGwtNS41MTMgNS41MTNhMy4wMTQgMy4wMTQgMCAxMC4zNzMgNC41Nzh6bS0uNzEyLS43MTJhMi4wMDYgMi4wMDYgMCAxMC0yLjgzNy0yLjgzNyAyLjAwNiAyLjAwNiAwIDAwMi44MzcgMi44Mzd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWFsaWduLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNSAxMHYxMGgtMlYxMHptOCAxMnYxaC0xM3YtMXptLTMtMnYtNmgtMnY2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWhvcml6b250YWwtY2VudGVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2LjUgOS41aC0xdjNoLTV2Mmg1djNoLTN2MmgzdjNoMXYtM2gzdi0yaC0zdi0zaDV2LTJoLTV6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41SDl2LTEzaDF6TTIyIDE0LjVIMTJ2LTJoMTB6TTEyIDE5LjVoNnYtMmgtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMiAyMi41aDF2LTEzaC0xek0xMCAxNC41aDEwdi0ySDEwek0yMCAxOS41aC02di0yaDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXRvcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0LjUgMjJWMTJoLTJ2MTB6TTIyLjUgMTBWOWgtMTN2MXpNMTkuNSAxMnY2aC0ydi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi12ZXJ0aWNhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuNSAxNS41di01aDJ2NWgzdi0zaDJ2M2gzdjFoLTN2M2gtMnYtM2gtM3Y1aC0ydi01aC0zdi0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1jb2x1bW5zIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2MTRIOXpNMTQuNSA5aDN2MTRoLTN6TTIwIDloM3YxNGgtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtcm93cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYzSDl6TTkgMTQuNWgxNHYzSDl6TTkgMjBoMTR2M0g5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC11bmlmb3JtIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2M0g5ek0yMCA5aDN2M2gtM3pNMTQuNSA5aDN2M2gtM3pNOSAxNC41aDN2M0g5ek0yMCAxNC41aDN2M2gtM3pNMTQuNSAxNC41aDN2M2gtM3pNOSAyMGgzdjNIOXpNMjAgMjBoM3YzaC0zek0xNC41IDIwaDN2M2gtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlicmFyeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMzczIDIyaDEuMjU4Yy4yOC0uMzIuNjE2LS41OTcuOTk1LS44MTkgMS40NzgtLjg2MiA0LjAwNS0uOTA5IDUuMzg2LjEwOUgyNC41di05LjJzLS43OTctMi4yNS00LjQyLTIuMjVjLTEuODc1IDAtMi45MDIuNjAyLTMuNDU2IDEuMTg0YTIuNTY4IDIuNTY4IDAgMDAtLjYuOTc2aC0uMDQ4YTIuNTY5IDIuNTY5IDAgMDAtLjYtLjk3NmMtLjU1NC0uNTgyLTEuNTgxLTEuMTg0LTMuNDU2LTEuMTg0LTMuNjIzIDAtNC40MiAyLjI1LTQuNDIgMi4yNXY5LjE5aDEuNDg4YzEuMzgyLTEuMDE5IDMuOTEtLjk3IDUuMzg4LS4xMDUuMzguMjIzLjcxNy41MDMuOTk3LjgyNXptMS4xMjctOS43MTF2OC40NTdjLjE5NS0uMTU3LjQwMy0uMy42MjItLjQyOC45MjctLjU0MSAyLjExNS0uNzk2IDMuMjQxLS43ODcgMS4wMDYuMDA4IDIuMDgxLjIyNyAyLjk1Mi43NTloLjE4NXYtNy45NzNhMi40MTQgMi40MTQgMCAwMC0uNTA1LS41OTVjLS40Ni0uMzk3LTEuMzMtLjg4Mi0yLjkxNS0uODgyLTEuNTg2IDAtMi4zNC40ODMtMi42OTUuODM1YTEuNzQ5IDEuNzQ5IDAgMDAtLjM1My40OSAxLjA3NiAxLjA3NiAwIDAwLS4wNTIuMTMxbC0uMDA1LjAxNy4wMDEtLjAwNi4wMDItLjAwOHYtLjAwNWwuMDAxLS4wMDJ2LS4wMDJsLS4wMDUtLjAwMXptLTEgMGgtLjQ3NGwtLjAwNi4wMDF2LjAwMmwuMDAxLjAwMi4wMDEuMDA1LjAwMi4wMDguMDAxLjAwNi0uMDA1LS4wMTdhMS4wNzYgMS4wNzYgMCAwMC0uMDUzLS4xMzEgMS43NDkgMS43NDkgMCAwMC0uMzUzLS40OWMtLjM1NC0uMzUxLTEuMTA4LS44MzUtMi42OTQtLjgzNS0xLjU4NSAwLTIuNDU1LjQ4NS0yLjkxNi44ODJhMi40MTEgMi40MTEgMCAwMC0uNTA0LjU5NXY3Ljk2M2guMTg1Yy44NzItLjUzMiAxLjk0OC0uNzUyIDIuOTU0LS43NTkgMS4xMjgtLjAwOCAyLjMxNi4yNDkgMy4yNDMuNzkyLjIxNy4xMjcuNDI0LjI3LjYxOC40MjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGluay1icm9rZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOCAxNHYtMmEyIDIgMCAxMC00IDB2MmgtMXYtMmEzIDMgMCAxMTYgMHYyek0xOSAxOGgtMXYyYTIgMiAwIDExLTQgMHYtMmgtMXYyYTMgMyAwIDEwNiAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWNvbm5lY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDEwYTIgMiAwIDAxMiAydjJoMXYtMmEzIDMgMCAxMC02IDB2Mmgxdi0yYTIgMiAwIDAxMi0yek0xOCAxOGgxdjJhMyAzIDAgMTEtNiAwdi0yaDF2MmEyIDIgMCAxMDQgMHonLyUzRSUzQ3BhdGggZD0nTTE1LjUgMTN2Nmgxdi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LWRldGFpbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTIgMTBoLTJ2MWgyek0xMiAyMGgtMnYxaDJ6TTEwIDE1aDJ2MWgtMnpNMjIgMTBoLTh2MWg4ek0xNCAyMGg4djFoLTh6TTIyIDE1aC04djFoOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdC10aWxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNCAxMWgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6bS0zIDhoLTN2M2gzem0tNC0xdjVoNXYtNXptMTEgMWgtM3YzaDN6bS00LTF2NWg1di01eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgZmlsbC1vcGFjaXR5PScuOCclM0UlM0NwYXRoIGQ9J00yMyAxMEg5djFoMTR6TTkgMTUuNWgxNHYxSDl6TTkgMjFoMTR2MUg5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE4IDE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjVIMTd2LTIuNWEyLjUgMi41IDAgMDE1IDBWMTRoLTF2LTEuNWExLjUgMS41IDAgMDAtMyAweicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy41IDE1di0xLjVhMi41IDIuNSAwIDAxNSAwVjE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjV6bTQtMS41VjE1aC0zdi0xLjVhMS41IDEuNSAwIDAxMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLW1pbnVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjEuNSAxNi41aC0xMXYtMWgxMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGxheSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTAuMDk4TDIyLjQ0MyAxNiAxMyAyMS45MDJ6bTEgMS44MDR2OC4xOTZMMjAuNTU3IDE2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXBsdXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNS41IDE1LjV2LTVoMXY1aDV2MWgtNXY1aC0xdi01aC01di0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yYW5kb20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjExOCAxMWEyLjUgMi41IDAgMDAtMS4zMzUuMzg2TDExLjIyOCAxM0gxOC41djFoLTguNDk3YS41MTIuNTEyIDAgMDAtLjAwMy4wNTFWMjAuNWMwIC4yNzguMjIzLjUuNDk3LjVoNy42MjhhLjQ5OC40OTggMCAwMC4zMjgtLjEyM2wzLjIwNi0yLjgwNWExIDEgMCAwMC4zNDEtLjc1M1YxMS41YS41LjUgMCAwMC0uNS0uNXptLTEuODY5LS40NmEzLjUgMy41IDAgMDExLjg3LS41NEgyMS41YTEuNSAxLjUgMCAwMTEuNSAxLjV2NS44MmEyIDIgMCAwMS0uNjgzIDEuNTA0bC0zLjIwNSAyLjgwNWMtLjI3NC4yNC0uNjI0LjM3MS0uOTg3LjM3MWgtNy42MjdDOS42NjggMjIgOSAyMS4zMjcgOSAyMC41di02LjQ0OWExLjUgMS41IDAgMDEuNjk5LTEuMjY4eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMyAxNmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTE3IDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTlhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xMyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6Jy8lM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTIyLjQwNyAxMC43MWEuNS41IDAgMDEtLjExNi42OTdsLTMuNSAyLjVhLjUuNSAwIDAxLS41ODItLjgxNGwzLjUtMi41YS41LjUgMCAwMS42OTguMTE2eicvJTNFJTNDcGF0aCBkPSdNMTggMjF2LThoMXY4eicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlY2VudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE1IDEydjVoNXYtMWgtNHYtNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzaXplLXRvLWZpdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTguNjQ2IDkuMzU0TDEyLjI5MyAxM0gxMHYxaDR2LTRoLTF2Mi4yOTNMOS4zNTQgOC42NDZ6TTE5LjcwNyAxM2wzLjY0Ny0zLjY0Ni0uNzA3LS43MDhMMTkgMTIuMjkzVjEwaC0xdjRoNHYtMXpNMTkuNzA3IDE5bDMuNjQ3IDMuNjQ2LS43MDcuNzA4TDE5IDE5LjcwN1YyMmgtMXYtNGg0djF6TTEyLjI5MyAxOWwtMy42NDcgMy42NDYuNzA4LjcwOEwxMyAxOS43MDdWMjJoMXYtNGgtNHYxeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNvbHZlLWZpbGxlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMjRhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy45MTEtOS42MzVsLS44MjItLjczLTMuNjEzIDQuMDY0LTIuNTg3LTIuNTg4LS43NzguNzc4IDMuNDEzIDMuNDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOS45MTEgMTQuMzY1bC0uODIyLS43My0zLjYxMyA0LjA2My0yLjU4Ny0yLjU4Ny0uNzc4Ljc3OCAzLjQxMyAzLjQxMnonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmV2ZXJzZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuODU0IDguNjQ2TDE4LjIwNyAxMWwtMi4zNTMgMi4zNTQtLjcwOC0uNzA4IDEuMTQ3LTEuMTQ2SDE0Yy0uNTAzIDAtMS4yNy4xNTUtMS44OTUuNjA2LS42LjQzMi0xLjEwNSAxLjE1Ny0xLjEwNSAyLjM5NHY3LjI1aC0xVjE0LjVjMC0xLjU2My42NjItMi41ODggMS41Mi0zLjIwNi44MzMtLjYgMS44MTctLjc5NCAyLjQ4LS43OTRoMi4yOTNsLTEuMTQ3LTEuMTQ2ek0yMiAxMHY3LjI1YzAgMS41NjMtLjY2MiAyLjU4OC0xLjUyIDMuMjA2LS44MzMuNi0xLjgxNy43OTQtMi40OC43OTRoLTIuMjkzbDEuMTQ3IDEuMTQ2LS43MDguNzA4LTIuMzUzLTIuMzU0IDIuMzUzLTIuMzU0LjcwOC43MDgtMS4xNDcgMS4xNDZIMThjLjUwMyAwIDEuMjctLjE1NSAxLjg5NS0uNjA2LjYtLjQzMiAxLjEwNS0xLjE1NyAxLjEwNS0yLjM5NFYxMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZWFyY2gtbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4Ljg3NCAxOS41ODFhNiA2IDAgMTEuNzA3LS43MDdsNC4yNzMgNC4yNzItLjcwOC43MDh6TTIwIDE1YTUgNSAwIDExLTEwIDAgNSA1IDAgMDExMCAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguMzk3IDE4LjYwNWE0LjU1MiA0LjU1MiAwIDExLjcwNy0uNzA3bDMuMjUgMy4yNDktLjcwOC43MDd6bS43MDYtMy41NTNhMy41NTIgMy41NTIgMCAxMS03LjEwMyAwIDMuNTUyIDMuNTUyIDAgMDE3LjEwMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNldHRpbmdzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTE2Ljk1NCA5LjkyOGwtLjEzOS0uMzMxQzE2LjYzNSA5LjE2NSAxNi4zMDEgOSAxNiA5cy0uNjM1LjE2NS0uODE1LjU5N2wtLjEzOS4zMzFjLS41NiAxLjM0My0xLjk5MiAyLjEzLTMuNDI1IDEuNzJsLS41LS4xNDRjLS4zMDktLjA4OC0uNjA2LjAyNS0uODE1LjMyN2ExLjA1IDEuMDUgMCAwMC0uMDQ5IDEuMTIzYy43NDMgMS4zMjMuNDAyIDMuMDY4LS44NiAzLjk1LS4zMTguMjIyLS40NTYuNjE0LS4zNzUgMS4wMjQuMDgxLjQwOS4zNDIuNjY4LjY3My43MjNsLjE5NS4wMzNjMS41MjUuMjUzIDIuNTEgMS42ODcgMi40MjMgMy4xOC0uMDMuNTAzLjIyLjg2MS41MiAxLjAyOC4yODguMTYxLjYyMy4xNTUuOTIxLS4xMDhsLjM3My0uMzNhMi44IDIuOCAwIDAxMy43NDYgMGwuMzczLjMzYy4yOTguMjY0LjYzMy4yNy45MjIuMTA4LjMtLjE2Ny41NDktLjUyNS41Mi0xLjAyOC0uMDg4LTEuNDkzLjg5Ny0yLjkyNyAyLjQyMy0zLjE4bC4xOTQtLjAzM2MuMzMtLjA1NS41OTItLjMxNC42NzMtLjcyMy4wODEtLjQxLS4wNTctLjgwMi0uMzc1LTEuMDI0LTEuMjYyLS44ODItMS42MDMtMi42MjctLjg2LTMuOTVhMS4wNSAxLjA1IDAgMDAtLjA1LTEuMTIzYy0uMjA4LS4zMDItLjUwNS0uNDE1LS44MTUtLjMyN2wtLjQ5OS4xNDNjLTEuNDMzLjQxLTIuODY1LS4zNzYtMy40MjUtMS43MTl6bS43ODQtLjcxN2MtLjY3NC0xLjYxNS0yLjgwMi0xLjYxNS0zLjQ3NiAwbC0uMTM4LjMzMmMtLjM4My45MTctMS4zMjYgMS40MDEtMi4yMjggMS4xNDNsLS40OTktLjE0M2MtMS41NzUtLjQ1LTIuODU1IDEuMzk4LTIuMDEyIDIuOS41MDUuOS4yNTcgMi4wNy0uNTYgMi42NC0xLjM5Mi45NzMtLjkzMyAzLjI4Mi43MDYgMy41NTVsLjE5NS4wMzJjLjk2LjE2IDEuNjUgMS4wOSAxLjU4OCAyLjEzNS0uMTA0IDEuNzg4IDEuODIgMi44NjQgMy4xMDMgMS43MjdsLjM3My0uMzNhMS44IDEuOCAwIDAxMi40MiAwbC4zNzMuMzNjMS4yODQgMS4xMzcgMy4yMDcuMDYxIDMuMTAzLTEuNzI3LS4wNjEtMS4wNDYuNjI4LTEuOTc1IDEuNTg5LTIuMTM1bC4xOTQtLjAzMmMxLjYzOS0uMjczIDIuMDk4LTIuNTgyLjcwNy0zLjU1NC0uODE4LS41NzItMS4wNjYtMS43NDItLjU2MS0yLjY0Ljg0My0xLjUwMy0uNDM3LTMuMzUyLTIuMDEyLTIuOTAxbC0uNS4xNDNjLS45LjI1OC0xLjg0NC0uMjI2LTIuMjI2LTEuMTQzeicvJTNFJTNDcGF0aCBkPSdNMTYgMTguNWEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHptMCAxYTMgMyAwIDEwMC02IDMgMyAwIDAwMCA2eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zaGFyZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAgOS41YTMuNSAzLjUgMCAwMC0xLjM4MyA2LjcxNkE0LjUxMyA0LjUxMyAwIDAwMTYgMTguNDM2YTQuNTEzIDQuNTEzIDAgMDAtMi42MTgtMi4yMiAzLjUwMSAzLjUwMSAwIDEwLTIuNzY0IDBBNC41MDIgNC41MDIgMCAwMDcuNSAyMC41VjIyaDE3di0xLjVjMC0yLjAwMy0xLjMwOS0zLjctMy4xMTgtNC4yODRBMy41MDEgMy41MDEgMCAwMDIwIDkuNXpNMTcuNSAxM2EyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHptLTEgOHYtLjVhMy41IDMuNSAwIDExNyAwdi41em0tMS0uNXYuNWgtN3YtLjVhMy41IDMuNSAwIDExNyAwem0tNi03LjVhMi41IDIuNSAwIDExNSAwIDIuNSAyLjUgMCAwMS01IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc21pbGV5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMjBhNC4wMDIgNC4wMDIgMCAwMS0zLjg3NC0zaDEuMDQ1YTMuMDAxIDMuMDAxIDAgMDA1LjY1OCAwaDEuMDQ1QTQuMDAyIDQuMDAyIDAgMDExNiAyMHpNMTkuNSAxNC4xMjVhLjg3NS44NzUgMCAxMS0xLjc1IDAgLjg3NS44NzUgMCAwMTEuNzUgMHpNMTMuMTI1IDE1YS44NzUuODc1IDAgMTAwLTEuNzUuODc1Ljg3NSAwIDAwMCAxLjc1eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LWFscGhhLWFzYyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMC44OTcgOUw5IDE0aDEuMDdsLjM3OS0xaDIuMTMzbC4zMzggMWgxLjA1NmwtMS42OS01em0xLjM0NyAzbC0uNjY3LTEuOTczTDEwLjgyOCAxMnpNMTIuNTUzIDE5SDkuNXYtMUgxNHYuOTc5TDEwLjkzMiAyMkgxNHYxSDkuNXYtLjk5M3pNMjAuNSA4LjI5M2wzLjM1NCAzLjM1My0uNzA4LjcwOEwyMSAxMC4yMDdWMjNoLTFWMTAuMjA3bC0yLjE0NiAyLjE0Ny0uNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtZHNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMCAyMS43OTNWOWgxdjEyLjc5M2wyLjE0Ni0yLjE0Ny43MDguNzA4LTMuMzU0IDMuMzUzLTMuMzU0LTMuMzUzLjcwOC0uNzA4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LXRvcC1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIwLjQ1IDEySDEwdi0xaDEwLjQ1Yy45NyAwIDEuMzcyIDEuMjQ0LjU4NCAxLjgxMkwxMS4wNSAyMGg5LjI0M2wtMS42NDctMS42NDYuNzA4LS43MDggMi44NTMgMi44NTQtMi44NTMgMi44NTQtLjcwOC0uNzA4TDIwLjI5MyAyMUgxMS4wNWMtLjk3IDAtMS4zNzItMS4yNDQtLjU4NC0xLjgxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIgMTFoLTJ2MTBoMnYxaC0zVjEwaDN6bS0xMC0xdjEySDl2LTFoMlYxMUg5di0xem00IDNoLTF2NmgxeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNjUgOC41M2EuNS41IDAgMDEtLjQwNC41OEE3IDcgMCAxMDIzIDE2YS41LjUgMCAwMTEgMCA4IDggMCAxMS05LjQxNi03Ljg3NC41LjUgMCAwMS41OC40MDR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vZmYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4IDE0LjAwNEwxNiA4bC0yIDYuMDA0SDhMMTIuOTYgMThsLTEuOTA0IDZMMTYgMjBsNC45NDQgNC0xLjkwNC02TDI0IDE0em0zLjE2NS45OThsLTMuODg2LjAwMkwxNiAxMS4xNjRsLTEuMjggMy44NGgtMy44ODVsMy4yODUgMi42NDYtMS4xMDMgMy40NzdMMTYgMTguNzE0bDIuOTgzIDIuNDEzLTEuMTAzLTMuNDc2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0YXItb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiA4bDIgNi4wMDRMMjQgMTRsLTQuOTYgNCAxLjkwNCA2TDE2IDIwbC00Ljk0NCA0IDEuOTA0LTZMOCAxNC4wMDRoNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Ryb2tlLXdlaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoMTJ2MUgxMHptMCA0aDEydjJIMTB6bTEyIDVIMTB2M2gxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHlsZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMS41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xNy41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xOSAyMC41YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6TTExLjUgMTlhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN3YXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMyAxMy4xODhsLTEuMTc1IDEuNDY4YTUuNSA1LjUgMCAwMC0xMC4wMDMtMi4yMTlsLjgzLjU1N2E0LjUgNC41IDAgMDE4LjIxNiAyLjA1N2wtMi4yLTEuNDY3LS41NTUuODMyIDMuMzgxIDIuMjU0IDIuMjg3LTIuODU4ek05IDE3LjE4OGwuNzguNjI0IDEuMTc2LTEuNDY4LjAyNi4xNTZhNS41IDUuNSAwIDAwOS45NzYgMi4wNjV2LS4wMDJsLS44My0uNTU3LS4wMDEuMDAxYTQuNSA0LjUgMCAwMS04LjIxNC0yLjA1OGwyLjIgMS40NjcuNTU1LS44MzItMy4zODItMi4yNTR6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRoZW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMGgtM3YxMmgzem0tMy0xYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xVjEwYTEgMSAwIDAwLTEtMXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTAuNzUgMjAuNWEuNzUuNzUgMCAxMTEuNSAwIC43NS43NSAwIDAxLTEuNSAwek0yMiAxOGExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMWgtN3YtMWg3di0zaC03di0xek0xOC4zODUgMTdsMi43NTctMi43NTdhMSAxIDAgMDAwLTEuNDE1bC0yLjEyMS0yLjEyYTEgMSAwIDAwLTEuNDE0IDBMMTUgMTMuMzEzdjEuNDE0bDMuMzE0LTMuMzE0IDIuMTIxIDIuMTIyTDE2Ljk3MSAxN3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1ncmlkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMTBoMnYyaC0yek0yMCAxMGgydjJoLTJ6TTEyIDE1aC0ydjJoMnpNMjAgMTVoMnYyaC0yek0xMiAyMGgtMnYyaDJ6TTIwIDIwaDJ2MmgtMnpNMTcgMTBoLTJ2Mmgyek0xNSAxNWgydjJoLTJ6TTE3IDIwaC0ydjJoMnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41di0xM2gydjEzek0xNSAyMi41di0xM2gydjEzek0yMCA5LjV2MTNoMnYtMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtbGlzdC12ZXJ0aWNhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YyaC0xM3pNOS41IDE1aDEzdjJoLTEzek0yMi41IDIwaC0xM3YyaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aW1lciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5IDhoLTZWN2g2ek0xNi41IDE3di01aC0xdjVhLjUuNSAwIDAwMSAweicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMi43MTUgMTIuNjVsMS41MjctMS41MjlMMjIuMTIyIDlsLTEuNDgzIDEuNDgyYTggOCAwIDEwMi4wNzUgMi4xNjd6TTIzIDE3YTcgNyAwIDExLTIuMzg0LTUuMjYzbC42NDcuNjQ3QTYuOTc0IDYuOTc0IDAgMDEyMyAxN3ptLTEuMDA4LTUuM2wuMTMuMTI4LjcwNi0uNzA3LS43MDctLjcwNy0uNzAxLjcwMWMuMi4xODUuMzkxLjM4LjU3Mi41ODV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdHJhc2gge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNCAxOC41di00aDF2NHpNMTcgMTguNXYtNGgxdjR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE5IDEwLjVhMiAyIDAgMDAtMi0yaC0yYTIgMiAwIDAwLTIgMmgtM3YxaDF2MTBhMiAyIDAgMDAyIDJoNmEyIDIgMCAwMDItMnYtMTBoMXYtMXptLTQtMWExIDEgMCAwMC0xIDFoNGExIDEgMCAwMC0xLTF6bTUgMmgtOHYxMGExIDEgMCAwMDEgMWg2YTEgMSAwIDAwMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZlcnRpY2FsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloMTR2MUg5em0wIDEzaDE0djFIOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTNoLTZ2Nmg2em0tNy0xdjhoOHYtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS12aXNpYmxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMThhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDEyYTcuNDk5IDcuNDk5IDAgMDE2LjYzNSA0QTcuNDk5IDcuNDk5IDAgMDExNiAyMGE3LjQ5OSA3LjQ5OSAwIDAxLTYuNjM1LTRBNy40OTkgNy40OTkgMCAwMTE2IDEyem0wIDdhNi40OTUgNi40OTUgMCAwMS01LjQ3OC0zQTYuNDk1IDYuNDk1IDAgMDExNiAxM2MyLjMgMCA0LjMyMiAxLjE5NCA1LjQ3OCAzQTYuNDk1IDYuNDk1IDAgMDExNiAxOXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nLWxhcmdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA2bDEwIDE4SDZ6bS0xIDExdi00aDJ2NHptMCAydjJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA5bDggMTRIOHptLTEgOC41VjE0aDJ2My41em0wIDEuNXYyaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pY29uLWJ1dHRvbiAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b246aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0taG92ZXItZmlsbCk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjphY3RpdmUsIC5pY29uLWJ1dHRvbjpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6YWN0aXZlLCAuaWNvbi1idXR0b24tLXNlbGVjdGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQgKiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaW5wdXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMzBweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6aG92ZXIsIC5pbnB1dF9fZmllbGQ6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6c2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6YWN0aXZlLCAuaW5wdXRfX2ZpZWxkOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmlucHV0LS13aXRoLWljb24gLmlucHV0X19maWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcblxcbi5pbnB1dCAuaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDBweDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB6LWluZGV4OiAxO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ubGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IHRvcDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgMDtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIC5pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwX19tc2cge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4ucmFkaW8ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJhZGlvX19idXR0b24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiB2aWV3Qm94PVxcXCIwIDAgNiA2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiJTNFJTNDcmVjdCB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiByeD1cXFwiM1xcXCIgZmlsbD1cXFwiYmxhY2tcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC44XFxcIi8lM0UlM0Mvc3ZnJTNFJTBBJyk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IDJweDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246ZGlzYWJsZWQgKyAucmFkaW9fX2xhYmVsIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZDpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrKTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUtc21hbGwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAycHggMTBweCAwIC04cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5zZWN0aW9uLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIGNhbGModmFyKC0tc2l6ZS14eHNtYWxsKSAvIDIpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuc2VsZWN0LnNlbGVjdC1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uICoge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQsIC5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMS4wO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZCAuc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMzBweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLXRvcDogLTFweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIzMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDMwJTIwMzAlMjIlMjB3aWR0aCUzRCUyMjMwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMTUlMjAxNi43MDcxLTMtMyUyMC43MDcxLS43MDcxJTIwMi42NDY1JTIwMi42NDY0JTIwMi42NDY0LTIuNjQ2NC43MDcxLjcwNzEtMyUyMDMtLjM1MzUuMzUzNnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudSAuaWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taHVkKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1odWQpO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgbWFyZ2luOiAwO1xcbiAgei1pbmRleDogMTAwMDtcXG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XFxuICB3aWR0aDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gIGJvcmRlcjogc29saWQgM3B4IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXhzbWFsbCkgMHB4IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZCAuc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICBvcGFjaXR5OiAxLjA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS1sYWJlbCB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWljb24ge1xcbiAgd2lkdGg6IHZhcigtLXNpemUteHNtYWxsKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xMy4yMDY5JTIwNS4yMDcyNC01LjUwMDAyJTIwNS40OTk5Ni0uNzA3MTEuNzA3Mi0uNzA3MTEtLjcwNzItMy0yLjk5OTk2JTIwMS40MTQyMi0xLjQxNDIxJTIwMi4yOTI4OSUyMDIuMjkyODklMjA0Ljc5MjkzLTQuNzkyODl6JTIyJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUtLWhpZ2hsaWdodCwgLnNlbGVjdC1tZW51X19pdGVtOmhvdmVyLCAuc2VsZWN0LW1lbnVfX2l0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlci1sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlNCk7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2RpdmlkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUyKTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW46IDhweCAwIDdweCAwO1xcbn1cXG5cXG4uc3dpdGNoIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKlxcbiAgICAmX190b2dnbGU6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcbiAgICB9XFxuICAgICovXFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQ6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIGNhbGModmFyKC0tc2l6ZS14bGFyZ2UpIC0gMnB4KTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAgMC4ycztcXG4gIHdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbDphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG5cXG4udGV4dGFyZWEge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogNjJweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi50ZXh0YXJlYTpob3ZlciwgLnRleHRhcmVhOnBsYWNlaG9sZGVyLXNob3duOmhvdmVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi50ZXh0YXJlYTphY3RpdmUsIC50ZXh0YXJlYTpmb2N1cyB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkLCAudGV4dGFyZWE6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4udHlwZSB7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIC8qIHNpemVzICovXFxuICAvKiB3ZWlnaHRzICovXFxuICAvKiBsZXR0ZXIgc3BhY2luZyBhZGp1c3RtZW50cyBiYXNlZCBwb3MvbmVnIGFwcGxpY2F0aW9uICovXFxufVxcblxcbi50eXBlLS1zbWFsbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4udHlwZS0tbGFyZ2Uge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLXhsYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZSk7XFxufVxcblxcbi50eXBlLS1tZWRpdW0ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxufVxcblxcbi50eXBlLS1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXNtYWxsIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLWxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZSk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXhsYXJnZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLXRhYmxlLWNyZWF0b3Iuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGFibGUtY3JlYXRvci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRlc2lnbi1saW50ZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzVfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstZGVzaWduLWxpbnRlci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tbW9yZS5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfN19fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24taGVscC5zdmdcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF81X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiYm9keSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSxcXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiO1xcbn1cXG5cXG4uZmlnbWEtbGlnaHQge1xcbiAgY29sb3Itc2NoZW1lOiBsaWdodDtcXG59XFxuXFxuLmZpZ21hLWRhcmsge1xcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xcbn1cXG5cXG4uYXBwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogQ2hyb21lL09wZXJhL1NhZmFyaSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOSsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBJRSAxMCsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOC0gKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuaDQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuaDYge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBtYXJnaW46IDAgMCAxMHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XFxufVxcblxcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgcGFkZGluZzogMCAzMnB4IDAgOHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOGEwZmI7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzE4YTBmYjtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmhyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxudGFibGUgdHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxudGFibGUgdGQge1xcbiAgcGFkZGluZzogdW5zZXQ7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDZweDtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuLnJlc2l6ZXIge1xcbiAgei1pbmRleDogOTk7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2U7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbiB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB6LWluZGV4OiAxMDA7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGdhcDogMHB4O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb246aG92ZXIgLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAzNXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjc1IGVhc2Utb3V0O1xcbn1cXG5cXG4uYmFjay10YWIge1xcbiAgb3BhY2l0eTogMC41NTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmJhY2stdGFiIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uYmFjay10YWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYjpub3QoLmFjdGl2ZSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiLmFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1zZWxlY3Rpb24tY29udGFpbmVyLFxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDIzcHg7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5pbnB1dF9fcmFkaW8gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2NkZDNkNTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjMxNSk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0MDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjN2I4MzhhO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWVkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEwMzE1NjtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtYXJnaW46IDFweCAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uaW5wdXQtY29udGFpbmVyIC5sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgZm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMCAwIDAgN3B4O1xcbiAgcGFkZGluZy1sZWZ0OiA3cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaDUubGFiZWwge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogY2FsYygxMDAlICsgOHB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICByaWdodDogOHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzLFxcbi5udW1iZXItb2Ytcm93cyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29sczpmb2N1cyxcXG4ubnVtYmVyLW9mLXJvd3M6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmN0YS1jb250YWluZXIge1xcbiAgd2lkdGg6IDg0JTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciBoNiB7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiA4MHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg1cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiBjYWxjKDhweCArIDhweCk7XFxuICB0b3A6IDEycHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF06aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLyotLSBUb2dnbGUgc3R5bGVzIC0tKi9cXG4vKiBUaGUgc3dpdGNoIC0gdGhlIGJveCBhcm91bmQgdGhlIHNsaWRlciAqL1xcbi51aS1zd2l0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDEycHg7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2QxZDRkNDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlcjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1kaXNhYmxlZCk7XFxufVxcblxcbi8qIEhpZGUgZGVmYXVsdCBIVE1MIGNoZWNrYm94ICovXFxuLnVpLXN3aXRjaCBpbnB1dCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcblxcbi8qIFRoZSBzbGlkZXIgKi9cXG4uc2xpZGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tdGVydGlhcnkpO1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuXFxuLnNsaWRlcjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGxlZnQ6IDFweDtcXG4gIGJvdHRvbTogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kKTtcXG59XFxuXFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXI6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLyogUm91bmRlZCBzbGlkZXJzICovXFxuLnNsaWRlci5yb3VuZCB7XFxuICBib3JkZXItcmFkaXVzOiAzNHB4O1xcbn1cXG5cXG4uc2xpZGVyLnJvdW5kOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi8qLS0gTGFuZ3VhZ2UgbGludGVyIC0tKi9cXG5cXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLnNlbGVjdGlvbi1oYXMtY2hhbmdlZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNzBweDtcXG59XFxuXFxuLnN1Z2dlc3Rpb25zLWVtcHR5LXN0YXRlLFxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGV4dC1sYXllci1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDdweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZzogMTBweCA2cHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLW9uYnJhbmQpO1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMDVzIG9wYWNpdHkgZWFzZS1vdXQ7XFxufVxcblxcbi5sYW5ndWFnZS1iZXRhLXRhYi5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLyotLSBIb21lIC0tKi9cXG5cXG4uaG9tZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDE0cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ0ZDQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDc1cyBlYXNlLW91dDtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyAyNSUpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwIDAgMCAvIDMwJSk7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gNDUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgd2lkdGg6IDM0cHg7XFxuICBoZWlnaHQ6IDM0cHg7XFxufVxcblxcbi50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gKyBcIik7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAudGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyArIFwiKTtcXG59XFxuXFxuLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyArIFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNV9fXyArIFwiKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvcHkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDNweDtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNDhweCk7XFxufVxcblxcbi5ob21lLXN1cHBvcnQgYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi8qLS0gQ29sb3IgbGludGVyIC0tKi9cXG5cXG4uY29sb3ItbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMjRweDtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEwNXB4KTtcXG59XFxuXFxuLnN1bW1hcnktaXMtbG9hZGluZyxcXG4ubm8tc2VsZWN0aW9uLW1hZGUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCA4cHg7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDUlO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTUwIDE1MCAxNTAgLyA0NSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDk1cyBlYXNlLW91dDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiKDAgMTI1IDUwIC8gOCUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQsXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiKDE1MCAxNTAgMTUwIC8gNjAlKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDAgcmdiKDAgMCAwIC8gMyUpLCAwIDFweCAzcHggcmdiYSgwIDAgMCAvIDElKSxcXG4gICAgMCA4cHggN3B4IHJnYmEoMCAwIDAgLyAyJSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWQuY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiKDAgMCAwIC8gNSUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxMHB4IDE2cHggMTJweDtcXG4gIGdhcDogN3B4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS10aXRsZS1zZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY3VzdG9tLWxheWVyLWljb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tcmlnaHQ6IDdweDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gaW1nLFxcbi5maWdtYS1kYXJrIC5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIC5pY29uIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uaWNvbi5sYXllci1pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgaGVpZ2h0OiAxN3B4O1xcbiAgd2lkdGg6IDE3cHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XFxuICBvcGFjaXR5OiAwLjY1O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtaGVhZGluZyB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0IHtcXG4gIHBhZGRpbmc6IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTRweDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3Mtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxuICBtYXJnaW4tbGVmdDogMTRweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MtdGVydGlhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWNvbG9yIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29sb3Itc2FtcGxlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDEwMCUpO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMjNweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzZfX18gKyBcIik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuXFxuICB0ZXh0LWluZGVudDogMjAwJTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubWVudS1hY3RpdmUgLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnU6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctdGVydGlhcnkpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXIge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDEycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBwYWRkaW5nOiAxMnB4IDE2cHg7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7XFxuICBib3JkZXItdG9wOiAxcHggZG90dGVkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lcjpob3ZlciB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcblxcbi5leHBhbmRlZCAuc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA0cHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWxwIHtcXG4gIHdpZHRoOiAxOHB4O1xcbiAgaGVpZ2h0OiAxOHB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyArIFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG9wYWNpdHk6IDAuOTtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHA6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA5cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweCAxMnB4IDhweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctaG92ZXIpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXByaW1hcnktY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiAycHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcGFkZGluZzogMCAxNnB4IDAgMjRweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcXG4gICAgdG8gcmlnaHQsXFxuICAgIHRyYW5zcGFyZW50LFxcbiAgICB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpIDIwJVxcbiAgKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNzVzIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpob3ZlciAuYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGEge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgcGFkZGluZzogMTZweCAyNHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIG1pbi13aWR0aDogMTI1cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IC03cHg7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyMzIzO1xcbiAgY29sb3I6ICNmZmY7XFxuICBnYXA6IDhweDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nOiA1cHggMTRweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtIGEge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThhMGZiO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IGhyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQ2NDY7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogOTAlO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZyB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciAuYnRuIHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcblxcbi5jb2xvci1sb2FkZXIsXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tc2Vjb25kYXJ5KTtcXG4gIGFuaW1hdGlvbjogc3BpbiAxcyBpbmZpbml0ZSBsaW5lYXI7XFxuXFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxdHVybik7XFxuICB9XFxufVxcblxcbi8qLS0gVGhlbWUgc3dpdGNoZXIgc3R5bGVzIC0tKi9cXG4udGhlbWUtc3dpdGNoZXItY29udGFpbmVyIHtcXG4gIGdhcDogMTJweDtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDNweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gMzUlKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIC50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIGFjY2VudC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogOXB4O1xcbiAgcmlnaHQ6IDhweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2Uge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tbGFiZWwtdGV4dCB7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcblxcbltjbGFzcyo9XFxcIm1vZGFsLS1mcmFtZVxcXCJdIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogLTJweDtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYW5pbWF0aW9uOiBzcGluIDAuNXMgaW5maW5pdGUgbGluZWFyO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9zcmMvYXBwL3N0eWxlcy91aS5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxZQUFZO0VBQ1osU0FBUztFQUNUOytFQUM2RTtBQUMvRTs7QUFFQTtFQUNFLG1CQUFtQjtBQUNyQjs7QUFFQTtFQUNFLGtCQUFrQjtBQUNwQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixzQkFBc0I7RUFDdEIsWUFBWTtFQUNaLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLHdCQUF3QjtFQUN4Qix1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLGdCQUFnQjtFQUNoQix1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLFdBQVc7RUFDWCx1Q0FBdUM7QUFDekM7QUFDQTtFQUNFLGdCQUFnQjtFQUNoQix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSw4QkFBOEI7RUFDOUIsZUFBZTtFQUNmLGtCQUFrQjtFQUNsQixlQUFlO0VBQ2YsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsZ0JBQWdCO0VBQ2hCLHdDQUF3QztFQUN4QyxnQkFBZ0I7RUFDaEIsaUJBQWlCO0FBQ25COztBQUVBO0VBQ0UsYUFBYTtFQUNiLG1CQUFtQjtFQUNuQiw2QkFBNkI7RUFDN0IsWUFBWTtFQUNaLHFCQUFxQjtFQUNyQixzQkFBc0I7RUFDdEIs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Zjs7QUFFQTtFQUNFLGVBQWU7RUFDZixlQUFlO0VBQ2YsOEJBQThCO0FBQ2hDOztBQUVBO0VBQ0UsU0FBUztFQUNULGVBQWU7RUFDZix3Q0FBd0M7QUFDMUM7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLFNBQVM7RUFDVCxnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsa0JBQWtCO0VBQ2xCLHdDQUF3QztFQUN4QywrQkFBK0I7QUFDakM7O0FBRUE7RUFDRSx3Q0FBd0M7RUFDeEMsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLCtDQUErQztFQUMvQyxlQUFlO0FBQ2pCOztBQUVBO0VBQ0UsMkNBQTJDO0FBQzdDOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0Qiw4QkFBOEI7QUFDaEM7O0FBRUE7RUFDRSxlQUFlO0FBQ2pCOztBQUVBO0VBQ0Usa0JBQWtCO0VBQ2xCLFdBQVc7RUFDWCxVQUFVO0FBQ1o7O0FBRUE7RUFDRSwrQ0FBK0M7QUFDakQ7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsZUFBZTtFQUNmLDhCQUE4QjtFQUM5QixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxZQUFZO0FBQ2Q7O0FBRUE7RUFDRSxXQUFXO0VBQ1gsWUFBWTtFQUNaLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osV0FBVztFQUNYLHVDQUF1QztFQUN2QyxvQ0FBb0M7QUFDdENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSxcXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiO1xcbn1cXG5cXG4uZmlnbWEtbGlnaHQge1xcbiAgY29sb3Itc2NoZW1lOiBsaWdodDtcXG59XFxuXFxuLmZpZ21hLWRhcmsge1xcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xcbn1cXG5cXG4uYXBwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogQ2hyb21lL09wZXJhL1NhZmFyaSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOSsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBJRSAxMCsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOC0gKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuaDQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuaDYge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBtYXJnaW46IDAgMCAxMHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XFxufVxcblxcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgcGFkZGluZzogMCAzMnB4IDAgOHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOGEwZmI7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzE4YTBmYjtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmhyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxudGFibGUgdHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxudGFibGUgdGQge1xcbiAgcGFkZGluZzogdW5zZXQ7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDZweDtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuLnJlc2l6ZXIge1xcbiAgei1pbmRleDogOTk7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2U7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbiB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB6LWluZGV4OiAxMDA7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGdhcDogMHB4O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb246aG92ZXIgLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAzNXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjc1IGVhc2Utb3V0O1xcbn1cXG5cXG4uYmFjay10YWIge1xcbiAgb3BhY2l0eTogMC41NTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmJhY2stdGFiIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uYmFjay10YWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYjpub3QoLmFjdGl2ZSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiLmFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1zZWxlY3Rpb24tY29udGFpbmVyLFxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDIzcHg7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5pbnB1dF9fcmFkaW8gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2NkZDNkNTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjMxNSk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0MDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjN2I4MzhhO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWVkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEwMzE1NjtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtYXJnaW46IDFweCAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uaW5wdXQtY29udGFpbmVyIC5sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgZm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMCAwIDAgN3B4O1xcbiAgcGFkZGluZy1sZWZ0OiA3cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaDUubGFiZWwge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogY2FsYygxMDAlICsgOHB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICByaWdodDogOHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzLFxcbi5udW1iZXItb2Ytcm93cyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29sczpmb2N1cyxcXG4ubnVtYmVyLW9mLXJvd3M6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmN0YS1jb250YWluZXIge1xcbiAgd2lkdGg6IDg0JTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciBoNiB7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiA4MHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg1cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyOmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiBjYWxjKDhweCArIDhweCk7XFxuICB0b3A6IDEycHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0W2Rpc2FibGVkXSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF06aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLyotLSBUb2dnbGUgc3R5bGVzIC0tKi9cXG4vKiBUaGUgc3dpdGNoIC0gdGhlIGJveCBhcm91bmQgdGhlIHNsaWRlciAqL1xcbi51aS1zd2l0Y2gge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgd2lkdGg6IDI0cHg7XFxuICBoZWlnaHQ6IDEycHg7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2QxZDRkNDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi51aS1zd2l0Y2guZGlzYWJsZWQgLnNsaWRlcjpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1kaXNhYmxlZCk7XFxufVxcblxcbi8qIEhpZGUgZGVmYXVsdCBIVE1MIGNoZWNrYm94ICovXFxuLnVpLXN3aXRjaCBpbnB1dCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxufVxcblxcbi8qIFRoZSBzbGlkZXIgKi9cXG4uc2xpZGVyIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tdGVydGlhcnkpO1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuXFxuLnNsaWRlcjpiZWZvcmUge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGxlZnQ6IDFweDtcXG4gIGJvdHRvbTogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kKTtcXG59XFxuXFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXI6YmVmb3JlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLyogUm91bmRlZCBzbGlkZXJzICovXFxuLnNsaWRlci5yb3VuZCB7XFxuICBib3JkZXItcmFkaXVzOiAzNHB4O1xcbn1cXG5cXG4uc2xpZGVyLnJvdW5kOmJlZm9yZSB7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi8qLS0gTGFuZ3VhZ2UgbGludGVyIC0tKi9cXG5cXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIG92ZXJmbG93LXk6IHNjcm9sbDtcXG59XFxuXFxuLnNlbGVjdGlvbi1oYXMtY2hhbmdlZCB7XFxuICBwYWRkaW5nLWJvdHRvbTogNzBweDtcXG59XFxuXFxuLnN1Z2dlc3Rpb25zLWVtcHR5LXN0YXRlLFxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGV4dC1sYXllci1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogNDdweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luLWJvdHRvbTogOHB4O1xcbiAgcGFkZGluZzogMTBweCA2cHg7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLW9uYnJhbmQpO1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIge1xcbiAgb3BhY2l0eTogMDtcXG4gIHRyYW5zaXRpb246IDAuMDVzIG9wYWNpdHkgZWFzZS1vdXQ7XFxufVxcblxcbi5sYW5ndWFnZS1iZXRhLXRhYi5hY3RpdmUge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLyotLSBIb21lIC0tKi9cXG5cXG4uaG9tZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDE0cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDE0cHggMTZweDtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICNkMWQ0ZDQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDc1cyBlYXNlLW91dDtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyAyNSUpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgwIDAgMCAvIDMwJSk7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gNDUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgd2lkdGg6IDM0cHg7XFxuICBoZWlnaHQ6IDM0cHg7XFxufVxcblxcbi50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tdGFibGUtY3JlYXRvci5zdmdcXFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRhYmxlLWNyZWF0b3IgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRhYmxlLWNyZWF0b3Iuc3ZnXFxcIik7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLXRoZW1lLXN3aXRjaGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAudGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRoZW1lLXN3aXRjaGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWRlc2lnbi1saW50ZXIuc3ZnXFxcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC5kZXNpZ24tbGludGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay1kZXNpZ24tbGludGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29weSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogM3B4O1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaGVhZGluZyB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaG9tZS1zdXBwb3J0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMjRweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0OHB4KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCBhIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuLyotLSBDb2xvciBsaW50ZXIgLS0qL1xcblxcbi5jb2xvci1saW50ZXItY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAyNHB4O1xcbiAgZmxleC1ncm93OiAxO1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gMTA1cHgpO1xcbn1cXG5cXG4uc3VtbWFyeS1pcy1sb2FkaW5nLFxcbi5uby1zZWxlY3Rpb24tbWFkZSB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctc3VtbWFyeS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDhweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDE0NSU7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNTAgMTUwIDE1MCAvIDQ1JSk7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wOTVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZC5leHBhbmRlZCxcXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYigwIDEyNSA1MCAvIDglKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMTUwIDE1MCAxNTAgLyA2MCUpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogMCAycHggMCByZ2IoMCAwIDAgLyAzJSksIDAgMXB4IDNweCByZ2JhKDAgMCAwIC8gMSUpLFxcbiAgICAwIDhweCA3cHggcmdiYSgwIDAgMCAvIDIlKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1ob3Zlci1zdGF0ZS1kaXNhYmxlZC5jb2xvci10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCByZ2IoMCAwIDAgLyA1JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDEwcHggMTZweCAxMnB4O1xcbiAgZ2FwOiA3cHg7XFxufVxcblxcbi5jb2xvci10aWxlLXRpdGxlLXNlY3Rpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5jdXN0b20tbGF5ZXItaWNvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSBpbWcsXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gLmljb24ge1xcbiAgZmlsdGVyOiBpbnZlcnQoMSk7XFxufVxcblxcbi5pY29uLmxheWVyLWljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiA3cHg7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDE3cHg7XFxuICB3aWR0aDogMTdweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC43NSk7XFxuICBtYXJnaW4tbGVmdDogLTJweDtcXG4gIG9wYWNpdHk6IDAuNjU7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDZweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3Qge1xcbiAgcGFkZGluZzogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNHB4O1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIvXFxcIjtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy10ZXJ0aWFyeSk7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtY29sb3Ige1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb2xvci1zYW1wbGUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMTAwJSk7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2IoMTUwIDE1MCAxNTAgLyAyNSUpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAyM3B4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGVmdDogNnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1tb3JlLnN2Z1xcXCIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcblxcbiAgdGV4dC1pbmRlbnQ6IDIwMCU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5idG4tY29sb3ItdGlsZS1tZW51IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXNlY29uZGFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idG4tY29sb3ItdGlsZS1tZW51OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXRlcnRpYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgcGFkZGluZzogMTJweCAxNnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4O1xcbiAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXI6aG92ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4uZXhwYW5kZWQgLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogNHB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVscCB7XFxuICB3aWR0aDogMThweDtcXG4gIGhlaWdodDogMThweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24taGVscC5zdmdcXFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG9wYWNpdHk6IDAuOTtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHA6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA5cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweCAxMnB4IDhweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctaG92ZXIpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXByaW1hcnktY29udGVudCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiAycHg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgcGFkZGluZzogMCAxNnB4IDAgMjRweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIG9wYWNpdHk6IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudChcXG4gICAgdG8gcmlnaHQsXFxuICAgIHRyYW5zcGFyZW50LFxcbiAgICB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpIDIwJVxcbiAgKTtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4wNzVzIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpob3ZlciAuYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGEge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlIHtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctZm9vdGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgcGFkZGluZzogMTZweCAyNHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIG1pbi13aWR0aDogMTI1cHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAyMHB4O1xcbiAgcmlnaHQ6IC03cHg7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgcGFkZGluZzogOHB4IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjQyMzIzO1xcbiAgY29sb3I6ICNmZmY7XFxuICBnYXA6IDhweDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBwYWRkaW5nOiA1cHggMTRweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtIGEge1xcbiAgY29sb3I6ICNmZmY7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMThhMGZiO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IGhyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MTQ2NDY7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1heC13aWR0aDogOTAlO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZyB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lciAuYnRuIHtcXG4gIG1hcmdpbi10b3A6IDEwcHg7XFxufVxcblxcbi5jb2xvci1sb2FkZXIsXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMjBweDtcXG4gIGhlaWdodDogMjBweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tc2Vjb25kYXJ5KTtcXG4gIGFuaW1hdGlvbjogc3BpbiAxcyBpbmZpbml0ZSBsaW5lYXI7XFxuXFxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xcbn1cXG5cXG5Aa2V5ZnJhbWVzIHNwaW4ge1xcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxdHVybik7XFxuICB9XFxufVxcblxcbi8qLS0gVGhlbWUgc3dpdGNoZXIgc3R5bGVzIC0tKi9cXG4udGhlbWUtc3dpdGNoZXItY29udGFpbmVyIHtcXG4gIGdhcDogMTJweDtcXG4gIHBhZGRpbmc6IDI0cHg7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDNweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNnB4O1xcbiAgbWFyZ2luLXRvcDogMTZweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb24ge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gMzUlKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uOmhvdmVyIC50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIGFjY2VudC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogOXB4O1xcbiAgcmlnaHQ6IDhweDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2Uge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tbGFiZWwtdGV4dCB7XFxuICBwYWRkaW5nOiA4cHggMTBweDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxufVxcblxcbltjbGFzcyo9XFxcIm1vZGFsLS1mcmFtZVxcXCJdIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWxvYWRlciB7XFxuICB3aWR0aDogMTVweDtcXG4gIGhlaWdodDogMTVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogLTJweDtcXG4gIHJpZ2h0OiAxMHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYW5pbWF0aW9uOiBzcGluIDAuNXMgaW5maW5pdGUgbGluZWFyO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgdmFyIF9pID0gYXJyICYmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGFycltTeW1ib2wuaXRlcmF0b3JdIHx8IGFycltcIkBAaXRlcmF0b3JcIl0pOyBpZiAoX2kgPT0gbnVsbCkgcmV0dXJuOyB2YXIgX2FyciA9IFtdOyB2YXIgX24gPSB0cnVlOyB2YXIgX2QgPSBmYWxzZTsgdmFyIF9zLCBfZTsgdHJ5IHsgZm9yIChfaSA9IF9pLmNhbGwoYXJyKTsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSkge1xuICB2YXIgX2l0ZW0gPSBfc2xpY2VkVG9BcnJheShpdGVtLCA0KSxcbiAgICAgIGNvbnRlbnQgPSBfaXRlbVsxXSxcbiAgICAgIGNzc01hcHBpbmcgPSBfaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfSAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfSAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cblxuICBpZiAoL1tcIicoKSBcXHRcXG5dLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzID0gcmVxdWlyZSgnb2JqZWN0LWtleXMnKTtcbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sKCdmb28nKSA9PT0gJ3N5bWJvbCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciBvcmlnRGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKGZuKSB7XG5cdHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdG9TdHIuY2FsbChmbikgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59O1xuXG52YXIgYXJlUHJvcGVydHlEZXNjcmlwdG9yc1N1cHBvcnRlZCA9IGZ1bmN0aW9uICgpIHtcblx0dmFyIG9iaiA9IHt9O1xuXHR0cnkge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmosICd4JywgeyBlbnVtZXJhYmxlOiBmYWxzZSwgdmFsdWU6IG9iaiB9KTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG5cdFx0Zm9yICh2YXIgXyBpbiBvYmopIHsgLy8ganNjczppZ25vcmUgZGlzYWxsb3dVbnVzZWRWYXJpYWJsZXNcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIG9iai54ID09PSBvYmo7XG5cdH0gY2F0Y2ggKGUpIHsgLyogdGhpcyBpcyBJRSA4LiAqL1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gb3JpZ0RlZmluZVByb3BlcnR5ICYmIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQoKTtcblxudmFyIGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZSwgdmFsdWUsIHByZWRpY2F0ZSkge1xuXHRpZiAobmFtZSBpbiBvYmplY3QgJiYgKCFpc0Z1bmN0aW9uKHByZWRpY2F0ZSkgfHwgIXByZWRpY2F0ZSgpKSkge1xuXHRcdHJldHVybjtcblx0fVxuXHRpZiAoc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdG9yaWdEZWZpbmVQcm9wZXJ0eShvYmplY3QsIG5hbWUsIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0d3JpdGFibGU6IHRydWVcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvYmplY3RbbmFtZV0gPSB2YWx1ZTtcblx0fVxufTtcblxudmFyIGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiAob2JqZWN0LCBtYXApIHtcblx0dmFyIHByZWRpY2F0ZXMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHt9O1xuXHR2YXIgcHJvcHMgPSBrZXlzKG1hcCk7XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0cHJvcHMgPSBjb25jYXQuY2FsbChwcm9wcywgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhtYXApKTtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0ZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wc1tpXSwgbWFwW3Byb3BzW2ldXSwgcHJlZGljYXRlc1twcm9wc1tpXV0pO1xuXHR9XG59O1xuXG5kZWZpbmVQcm9wZXJ0aWVzLnN1cHBvcnRzRGVzY3JpcHRvcnMgPSAhIXN1cHBvcnRzRGVzY3JpcHRvcnM7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmaW5lUHJvcGVydGllcztcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjb250YWlucyhvdGhlcikge1xuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCcxIGFyZ3VtZW50IGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0aWYgKHR5cGVvZiBvdGhlciAhPT0gJ29iamVjdCcpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCAxICjigJ1vdGhlcuKAnCkgdG8gTm9kZS5jb250YWlucyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIE5vZGUnKTtcblx0fVxuXG5cdHZhciBub2RlID0gb3RoZXI7XG5cdGRvIHtcblx0XHRpZiAodGhpcyA9PT0gbm9kZSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGlmIChub2RlKSB7XG5cdFx0XHRub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuXHRcdH1cblx0fSB3aGlsZSAobm9kZSk7XG5cblx0cmV0dXJuIGZhbHNlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgYm91bmRDb250YWlucyA9IGZ1bmN0aW9uIGNvbnRhaW5zKG5vZGUsIG90aGVyKSB7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShub2RlLCBbb3RoZXJdKTtcbn07XG5cbmRlZmluZShib3VuZENvbnRhaW5zLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBib3VuZENvbnRhaW5zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0aWYgKGRvY3VtZW50LmNvbnRhaW5zKSB7XG5cdFx0XHRyZXR1cm4gZG9jdW1lbnQuY29udGFpbnM7XG5cdFx0fVxuXHRcdGlmIChkb2N1bWVudC5ib2R5ICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQuYm9keS5jb250YWlucy5jYWxsKGRvY3VtZW50LCAnJykgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdHJldHVybiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlKSB7IC8qKi8gfVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltQ29udGFpbnMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0ZGVmaW5lKFxuXHRcdFx0ZG9jdW1lbnQsXG5cdFx0XHR7IGNvbnRhaW5zOiBwb2x5ZmlsbCB9LFxuXHRcdFx0eyBjb250YWluczogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQuY29udGFpbnMgIT09IHBvbHlmaWxsOyB9IH1cblx0XHQpO1xuXHRcdGlmICh0eXBlb2YgRWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdGRlZmluZShcblx0XHRcdFx0RWxlbWVudC5wcm90b3R5cGUsXG5cdFx0XHRcdHsgY29udGFpbnM6IHBvbHlmaWxsIH0sXG5cdFx0XHRcdHsgY29udGFpbnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLmNvbnRhaW5zICE9PSBwb2x5ZmlsbDsgfSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xMVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vNS9DaGVja09iamVjdENvZXJjaWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgRVM1VG9JbnRlZ2VyID0gcmVxdWlyZSgnLi4vNS9Ub0ludGVnZXInKTtcblxudmFyIFRvTnVtYmVyID0gcmVxdWlyZSgnLi9Ub051bWJlcicpO1xuXG4vLyBodHRwczovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzExLjAvI3NlYy10b2ludGVnZXJcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKG51bWJlciAhPT0gMCkge1xuXHRcdG51bWJlciA9IEVTNVRvSW50ZWdlcihudW1iZXIpO1xuXHR9XG5cdHJldHVybiBudW1iZXIgPT09IDAgPyAwIDogbnVtYmVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL21heFNhZmVJbnRlZ2VyJyk7XG5cbnZhciBUb0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi9Ub0ludGVnZXJPckluZmluaXR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9MZW5ndGgoYXJndW1lbnQpIHtcblx0dmFyIGxlbiA9IFRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpO1xuXHRpZiAobGVuIDw9IDApIHsgcmV0dXJuIDA7IH0gLy8gaW5jbHVkZXMgY29udmVydGluZyAtMCB0byArMFxuXHRpZiAobGVuID4gTUFYX1NBRkVfSU5URUdFUikgeyByZXR1cm4gTUFYX1NBRkVfSU5URUdFUjsgfVxuXHRyZXR1cm4gbGVuO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcbnZhciAkUmVnRXhwID0gR2V0SW50cmluc2ljKCclUmVnRXhwJScpO1xudmFyICRwYXJzZUludGVnZXIgPSBHZXRJbnRyaW5zaWMoJyVwYXJzZUludCUnKTtcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciByZWdleFRlc3RlciA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcmVnZXhUZXN0ZXInKTtcbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNQcmltaXRpdmUnKTtcblxudmFyICRzdHJTbGljZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5zbGljZScpO1xudmFyIGlzQmluYXJ5ID0gcmVnZXhUZXN0ZXIoL14wYlswMV0rJC9pKTtcbnZhciBpc09jdGFsID0gcmVnZXhUZXN0ZXIoL14wb1swLTddKyQvaSk7XG52YXIgaXNJbnZhbGlkSGV4TGl0ZXJhbCA9IHJlZ2V4VGVzdGVyKC9eWy0rXTB4WzAtOWEtZl0rJC9pKTtcbnZhciBub25XUyA9IFsnXFx1MDA4NScsICdcXHUyMDBiJywgJ1xcdWZmZmUnXS5qb2luKCcnKTtcbnZhciBub25XU3JlZ2V4ID0gbmV3ICRSZWdFeHAoJ1snICsgbm9uV1MgKyAnXScsICdnJyk7XG52YXIgaGFzTm9uV1MgPSByZWdleFRlc3Rlcihub25XU3JlZ2V4KTtcblxuLy8gd2hpdGVzcGFjZSBmcm9tOiBodHRwczovL2VzNS5naXRodWIuaW8vI3gxNS41LjQuMjBcbi8vIGltcGxlbWVudGF0aW9uIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNS1zaGltL2Jsb2IvdjMuNC4wL2VzNS1zaGltLmpzI0wxMzA0LUwxMzI0XG52YXIgd3MgPSBbXG5cdCdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycsXG5cdCdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOCcsXG5cdCdcXHUyMDI5XFx1RkVGRidcbl0uam9pbignJyk7XG52YXIgdHJpbVJlZ2V4ID0gbmV3IFJlZ0V4cCgnKF5bJyArIHdzICsgJ10rKXwoWycgKyB3cyArICddKyQpJywgJ2cnKTtcbnZhciAkcmVwbGFjZSA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlJyk7XG52YXIgJHRyaW0gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuICRyZXBsYWNlKHZhbHVlLCB0cmltUmVnZXgsICcnKTtcbn07XG5cbnZhciBUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vVG9QcmltaXRpdmUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvbnVtYmVyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIoYXJndW1lbnQpIHtcblx0dmFyIHZhbHVlID0gaXNQcmltaXRpdmUoYXJndW1lbnQpID8gYXJndW1lbnQgOiBUb1ByaW1pdGl2ZShhcmd1bWVudCwgJE51bWJlcik7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgbnVtYmVyJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2JpZ2ludCcpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignQ29udmVyc2lvbiBmcm9tIFxcJ0JpZ0ludFxcJyB0byBcXCdudW1iZXJcXCcgaXMgbm90IGFsbG93ZWQuJyk7XG5cdH1cblx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcblx0XHRpZiAoaXNCaW5hcnkodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIoJHBhcnNlSW50ZWdlcigkc3RyU2xpY2UodmFsdWUsIDIpLCAyKSk7XG5cdFx0fSBlbHNlIGlmIChpc09jdGFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgOCkpO1xuXHRcdH0gZWxzZSBpZiAoaGFzTm9uV1ModmFsdWUpIHx8IGlzSW52YWxpZEhleExpdGVyYWwodmFsdWUpKSB7XG5cdFx0XHRyZXR1cm4gTmFOO1xuXHRcdH1cblx0XHR2YXIgdHJpbW1lZCA9ICR0cmltKHZhbHVlKTtcblx0XHRpZiAodHJpbW1lZCAhPT0gdmFsdWUpIHtcblx0XHRcdHJldHVybiBUb051bWJlcih0cmltbWVkKTtcblx0XHR9XG5cblx0fVxuXHRyZXR1cm4gJE51bWJlcih2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJE9iamVjdCA9IEdldEludHJpbnNpYygnJU9iamVjdCUnKTtcblxudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvb2JqZWN0XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9PYmplY3QodmFsdWUpIHtcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZSh2YWx1ZSk7XG5cdHJldHVybiAkT2JqZWN0KHZhbHVlKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczIwMTUnKTtcblxuLy8gaHR0cHM6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvcHJpbWl0aXZlXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIHRvUHJpbWl0aXZlKGlucHV0LCBhcmd1bWVudHNbMV0pO1xuXHR9XG5cdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJFR5cGVFcnJvciA9IEdldEludHJpbnNpYygnJVR5cGVFcnJvciUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTBcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDaGVja09iamVjdENvZXJjaWJsZSh2YWx1ZSwgb3B0TWVzc2FnZSkge1xuXHRpZiAodmFsdWUgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKG9wdE1lc3NhZ2UgfHwgKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIHZhbHVlKSk7XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFicyA9IHJlcXVpcmUoJy4vYWJzJyk7XG52YXIgZmxvb3IgPSByZXF1aXJlKCcuL2Zsb29yJyk7XG52YXIgVG9OdW1iZXIgPSByZXF1aXJlKCcuL1RvTnVtYmVyJyk7XG5cbnZhciAkaXNOYU4gPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzTmFOJyk7XG52YXIgJGlzRmluaXRlID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc0Zpbml0ZScpO1xudmFyICRzaWduID0gcmVxdWlyZSgnLi4vaGVscGVycy9zaWduJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjRcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb0ludGVnZXIodmFsdWUpIHtcblx0dmFyIG51bWJlciA9IFRvTnVtYmVyKHZhbHVlKTtcblx0aWYgKCRpc05hTihudW1iZXIpKSB7IHJldHVybiAwOyB9XG5cdGlmIChudW1iZXIgPT09IDAgfHwgISRpc0Zpbml0ZShudW1iZXIpKSB7IHJldHVybiBudW1iZXI7IH1cblx0cmV0dXJuICRzaWduKG51bWJlcikgKiBmbG9vcihhYnMobnVtYmVyKSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL1RvUHJpbWl0aXZlJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjNcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb051bWJlcih2YWx1ZSkge1xuXHR2YXIgcHJpbSA9IFRvUHJpbWl0aXZlKHZhbHVlLCBOdW1iZXIpO1xuXHRpZiAodHlwZW9mIHByaW0gIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuICtwcmltOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG5cdH1cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuXHR2YXIgdHJpbW1lZCA9IHByaW0ucmVwbGFjZSgvXlsgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUwMDg1XSt8WyBcXHRcXHgwYlxcZlxceGEwXFx1ZmVmZlxcblxcclxcdTIwMjhcXHUyMDI5XFx1MTY4MFxcdTE4MGVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwYVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdTAwODVdKyQvZywgJycpO1xuXHRpZiAoKC9eMFtvYl18XlsrLV0weC8pLnRlc3QodHJpbW1lZCkpIHtcblx0XHRyZXR1cm4gTmFOO1xuXHR9XG5cblx0cmV0dXJuICt0cmltbWVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4xXG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnZXMtdG8tcHJpbWl0aXZlL2VzNScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgJGFicyA9IEdldEludHJpbnNpYygnJU1hdGguYWJzJScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYWJzKHgpIHtcblx0cmV0dXJuICRhYnMoeCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyB2YXIgbW9kdWxvID0gcmVxdWlyZSgnLi9tb2R1bG8nKTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtNS4yXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmxvb3IoeCkge1xuXHQvLyByZXR1cm4geCAtIG1vZHVsbyh4LCAxKTtcblx0cmV0dXJuICRmbG9vcih4KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkaXNOYU4gPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGEgIT09IGE7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgISRpc05hTih4KSAmJiB4ICE9PSBJbmZpbml0eSAmJiB4ICE9PSAtSW5maW5pdHk7IH07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIGlzTmFOKGEpIHtcblx0cmV0dXJuIGEgIT09IGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRNYXRoID0gR2V0SW50cmluc2ljKCclTWF0aCUnKTtcbnZhciAkTnVtYmVyID0gR2V0SW50cmluc2ljKCclTnVtYmVyJScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICROdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fCAkTWF0aC5wb3coMiwgNTMpIC0gMTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICR0ZXN0ID0gR2V0SW50cmluc2ljKCdSZWdFeHAucHJvdG90eXBlLnRlc3QnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcmVnZXhUZXN0ZXIocmVnZXgpIHtcblx0cmV0dXJuIGNhbGxCaW5kKCR0ZXN0LCByZWdleCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNpZ24obnVtYmVyKSB7XG5cdHJldHVybiBudW1iZXIgPj0gMCA/IDEgOiAtMTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG52YXIgaXNEYXRlID0gcmVxdWlyZSgnaXMtZGF0ZS1vYmplY3QnKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJ2lzLXN5bWJvbCcpO1xuXG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IGZ1bmN0aW9uIE9yZGluYXJ5VG9QcmltaXRpdmUoTywgaGludCkge1xuXHRpZiAodHlwZW9mIE8gPT09ICd1bmRlZmluZWQnIHx8IE8gPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2FsbCBtZXRob2Qgb24gJyArIE8pO1xuXHR9XG5cdGlmICh0eXBlb2YgaGludCAhPT0gJ3N0cmluZycgfHwgKGhpbnQgIT09ICdudW1iZXInICYmIGhpbnQgIT09ICdzdHJpbmcnKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2hpbnQgbXVzdCBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCInKTtcblx0fVxuXHR2YXIgbWV0aG9kTmFtZXMgPSBoaW50ID09PSAnc3RyaW5nJyA/IFsndG9TdHJpbmcnLCAndmFsdWVPZiddIDogWyd2YWx1ZU9mJywgJ3RvU3RyaW5nJ107XG5cdHZhciBtZXRob2QsIHJlc3VsdCwgaTtcblx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWV0aG9kID0gT1ttZXRob2ROYW1lc1tpXV07XG5cdFx0aWYgKGlzQ2FsbGFibGUobWV0aG9kKSkge1xuXHRcdFx0cmVzdWx0ID0gbWV0aG9kLmNhbGwoTyk7XG5cdFx0XHRpZiAoaXNQcmltaXRpdmUocmVzdWx0KSkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG59O1xuXG52YXIgR2V0TWV0aG9kID0gZnVuY3Rpb24gR2V0TWV0aG9kKE8sIFApIHtcblx0dmFyIGZ1bmMgPSBPW1BdO1xuXHRpZiAoZnVuYyAhPT0gbnVsbCAmJiB0eXBlb2YgZnVuYyAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRpZiAoIWlzQ2FsbGFibGUoZnVuYykpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoZnVuYyArICcgcmV0dXJuZWQgZm9yIHByb3BlcnR5ICcgKyBQICsgJyBvZiBvYmplY3QgJyArIE8gKyAnIGlzIG5vdCBhIGZ1bmN0aW9uJyk7XG5cdFx0fVxuXHRcdHJldHVybiBmdW5jO1xuXHR9XG5cdHJldHVybiB2b2lkIDA7XG59O1xuXG4vLyBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNi4wLyNzZWMtdG9wcmltaXRpdmVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHR2YXIgaGludCA9ICdkZWZhdWx0Jztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG5cdFx0aWYgKGFyZ3VtZW50c1sxXSA9PT0gU3RyaW5nKSB7XG5cdFx0XHRoaW50ID0gJ3N0cmluZyc7XG5cdFx0fSBlbHNlIGlmIChhcmd1bWVudHNbMV0gPT09IE51bWJlcikge1xuXHRcdFx0aGludCA9ICdudW1iZXInO1xuXHRcdH1cblx0fVxuXG5cdHZhciBleG90aWNUb1ByaW07XG5cdGlmIChoYXNTeW1ib2xzKSB7XG5cdFx0aWYgKFN5bWJvbC50b1ByaW1pdGl2ZSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gR2V0TWV0aG9kKGlucHV0LCBTeW1ib2wudG9QcmltaXRpdmUpO1xuXHRcdH0gZWxzZSBpZiAoaXNTeW1ib2woaW5wdXQpKSB7XG5cdFx0XHRleG90aWNUb1ByaW0gPSBTeW1ib2wucHJvdG90eXBlLnZhbHVlT2Y7XG5cdFx0fVxuXHR9XG5cdGlmICh0eXBlb2YgZXhvdGljVG9QcmltICE9PSAndW5kZWZpbmVkJykge1xuXHRcdHZhciByZXN1bHQgPSBleG90aWNUb1ByaW0uY2FsbChpbnB1dCwgaGludCk7XG5cdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuYWJsZSB0byBjb252ZXJ0IGV4b3RpYyBvYmplY3QgdG8gcHJpbWl0aXZlJyk7XG5cdH1cblx0aWYgKGhpbnQgPT09ICdkZWZhdWx0JyAmJiAoaXNEYXRlKGlucHV0KSB8fCBpc1N5bWJvbChpbnB1dCkpKSB7XG5cdFx0aGludCA9ICdzdHJpbmcnO1xuXHR9XG5cdHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBoaW50ID09PSAnZGVmYXVsdCcgPyAnbnVtYmVyJyA6IGhpbnQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxudmFyIGlzUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnaXMtY2FsbGFibGUnKTtcblxuLy8gaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNS4xLyNzZWMtOC4xMi44XG52YXIgRVM1aW50ZXJuYWxTbG90cyA9IHtcblx0J1tbRGVmYXVsdFZhbHVlXV0nOiBmdW5jdGlvbiAoTykge1xuXHRcdHZhciBhY3R1YWxIaW50O1xuXHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YWN0dWFsSGludCA9IGFyZ3VtZW50c1sxXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YWN0dWFsSGludCA9IHRvU3RyLmNhbGwoTykgPT09ICdbb2JqZWN0IERhdGVdJyA/IFN0cmluZyA6IE51bWJlcjtcblx0XHR9XG5cblx0XHRpZiAoYWN0dWFsSGludCA9PT0gU3RyaW5nIHx8IGFjdHVhbEhpbnQgPT09IE51bWJlcikge1xuXHRcdFx0dmFyIG1ldGhvZHMgPSBhY3R1YWxIaW50ID09PSBTdHJpbmcgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHRcdFx0dmFyIHZhbHVlLCBpO1xuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1ldGhvZHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0aWYgKGlzQ2FsbGFibGUoT1ttZXRob2RzW2ldXSkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE9bbWV0aG9kc1tpXV0oKTtcblx0XHRcdFx0XHRpZiAoaXNQcmltaXRpdmUodmFsdWUpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBkZWZhdWx0IHZhbHVlJyk7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgW1tEZWZhdWx0VmFsdWVdXSBoaW50IHN1cHBsaWVkJyk7XG5cdH1cbn07XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTkuMVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBUb1ByaW1pdGl2ZShpbnB1dCkge1xuXHRpZiAoaXNQcmltaXRpdmUoaW5wdXQpKSB7XG5cdFx0cmV0dXJuIGlucHV0O1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQsIGFyZ3VtZW50c1sxXSk7XG5cdH1cblx0cmV0dXJuIEVTNWludGVybmFsU2xvdHNbJ1tbRGVmYXVsdFZhbHVlXV0nXShpbnB1dCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5jYWxsKHRhcmdldCkgIT09IGZ1bmNUeXBlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRVJST1JfTUVTU0FHRSArIHRhcmdldCk7XG4gICAgfVxuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBhcmdzLmNvbmNhdChzbGljZS5jYWxsKGFyZ3VtZW50cykpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBNYXRoLm1heCgwLCB0YXJnZXQubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHZhciBib3VuZEFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvdW5kTGVuZ3RoOyBpKyspIHtcbiAgICAgICAgYm91bmRBcmdzLnB1c2goJyQnICsgaSk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGJvdW5kQXJncy5qb2luKCcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kIHx8IGltcGxlbWVudGF0aW9uO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgSXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZScpO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IHJlcXVpcmUoJ2Z1bmN0aW9ucy1oYXZlLW5hbWVzJykoKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgJGZ1bmN0aW9uVG9TdHJpbmcgPSBjYWxsQm91bmQoJ0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZycpO1xudmFyICRzdHJpbmdNYXRjaCA9IGNhbGxCb3VuZCgnU3RyaW5nLnByb3RvdHlwZS5tYXRjaCcpO1xuXG52YXIgY2xhc3NSZWdleCA9IC9eY2xhc3MgLztcblxudmFyIGlzQ2xhc3MgPSBmdW5jdGlvbiBpc0NsYXNzQ29uc3RydWN0b3IoZm4pIHtcblx0aWYgKElzQ2FsbGFibGUoZm4pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0dHJ5IHtcblx0XHR2YXIgbWF0Y2ggPSAkc3RyaW5nTWF0Y2goJGZ1bmN0aW9uVG9TdHJpbmcoZm4pLCBjbGFzc1JlZ2V4KTtcblx0XHRyZXR1cm4gISFtYXRjaDtcblx0fSBjYXRjaCAoZSkge31cblx0cmV0dXJuIGZhbHNlO1xufTtcblxudmFyIHJlZ2V4ID0gL1xccypmdW5jdGlvblxccysoW14oXFxzXSopXFxzKi87XG5cbnZhciBmdW5jdGlvblByb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldE5hbWUoKSB7XG5cdGlmICghaXNDbGFzcyh0aGlzKSAmJiAhSXNDYWxsYWJsZSh0aGlzKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lIHNoYW0gZ2V0dGVyIGNhbGxlZCBvbiBub24tZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG5cdFx0cmV0dXJuIHRoaXMubmFtZTtcblx0fVxuXHRpZiAodGhpcyA9PT0gZnVuY3Rpb25Qcm90bykge1xuXHRcdHJldHVybiAnJztcblx0fVxuXHR2YXIgc3RyID0gJGZ1bmN0aW9uVG9TdHJpbmcodGhpcyk7XG5cdHZhciBtYXRjaCA9ICRzdHJpbmdNYXRjaChzdHIsIHJlZ2V4KTtcblx0dmFyIG5hbWUgPSBtYXRjaCAmJiBtYXRjaFsxXTtcblx0cmV0dXJuIG5hbWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgYm91bmQgPSBjYWxsQmluZChpbXBsZW1lbnRhdGlvbik7XG5cbmRlZmluZShib3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHN1cHBvcnRzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpLnN1cHBvcnRzRGVzY3JpcHRvcnM7XG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gcmVxdWlyZSgnZnVuY3Rpb25zLWhhdmUtbmFtZXMnKSgpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIFR5cGVFcnIgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU5hbWUoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGlmIChmdW5jdGlvbnNIYXZlTmFtZXMpIHtcblx0XHRyZXR1cm4gcG9seWZpbGw7XG5cdH1cblx0aWYgKCFzdXBwb3J0c0Rlc2NyaXB0b3JzKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnIoJ1NoaW1taW5nIEZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lIHN1cHBvcnQgcmVxdWlyZXMgRVM1IHByb3BlcnR5IGRlc2NyaXB0b3Igc3VwcG9ydC4nKTtcblx0fVxuXHR2YXIgZnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblx0ZGVmaW5lUHJvcGVydHkoZnVuY3Rpb25Qcm90bywgJ25hbWUnLCB7XG5cdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIG5hbWUgPSBwb2x5ZmlsbC5jYWxsKHRoaXMpO1xuXHRcdFx0aWYgKHRoaXMgIT09IGZ1bmN0aW9uUHJvdG8pIHtcblx0XHRcdFx0ZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdFx0XHRcdHZhbHVlOiBuYW1lLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiBmYWxzZVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSBmdW5jdGlvbiBmdW5jdGlvbnNIYXZlTmFtZXMoKSB7XG5cdHJldHVybiB0eXBlb2YgZnVuY3Rpb24gZigpIHt9Lm5hbWUgPT09ICdzdHJpbmcnO1xufTtcblxudmFyIGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKGdPUEQpIHtcblx0dHJ5IHtcblx0XHRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0Z09QRCA9IG51bGw7XG5cdH1cbn1cblxuZnVuY3Rpb25zSGF2ZU5hbWVzLmZ1bmN0aW9uc0hhdmVDb25maWd1cmFibGVOYW1lcyA9IGZ1bmN0aW9uIGZ1bmN0aW9uc0hhdmVDb25maWd1cmFibGVOYW1lcygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uc0hhdmVOYW1lcygpICYmIGdPUEQgJiYgISFnT1BEKGZ1bmN0aW9uICgpIHt9LCAnbmFtZScpLmNvbmZpZ3VyYWJsZTtcbn07XG5cbnZhciAkYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuXG5mdW5jdGlvbnNIYXZlTmFtZXMuYm91bmRGdW5jdGlvbnNIYXZlTmFtZXMgPSBmdW5jdGlvbiBib3VuZEZ1bmN0aW9uc0hhdmVOYW1lcygpIHtcblx0cmV0dXJuIGZ1bmN0aW9uc0hhdmVOYW1lcygpICYmIHR5cGVvZiAkYmluZCA9PT0gJ2Z1bmN0aW9uJyAmJiBmdW5jdGlvbiBmKCkge30uYmluZCgpLm5hbWUgIT09ICcnO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbnNIYXZlTmFtZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1bmRlZmluZWQ7XG5cbnZhciAkU3ludGF4RXJyb3IgPSBTeW50YXhFcnJvcjtcbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHguX19wcm90b19fOyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cbnZhciBuZWVkc0V2YWwgPSB7fTtcblxudmFyIFR5cGVkQXJyYXkgPSB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdCclQWdncmVnYXRlRXJyb3IlJzogdHlwZW9mIEFnZ3JlZ2F0ZUVycm9yID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFnZ3JlZ2F0ZUVycm9yLFxuXHQnJUFycmF5JSc6IEFycmF5LFxuXHQnJUFycmF5QnVmZmVyJSc6IHR5cGVvZiBBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBcnJheUJ1ZmZlcixcblx0JyVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnJvbVN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3IlJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogbmVlZHNFdmFsLFxuXHQnJUF0b21pY3MlJzogdHlwZW9mIEF0b21pY3MgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXRvbWljcyxcblx0JyVCaWdJbnQlJzogdHlwZW9mIEJpZ0ludCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBCaWdJbnQsXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiBFcnJvcixcblx0JyVldmFsJSc6IGV2YWwsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZXZhbFxuXHQnJUV2YWxFcnJvciUnOiBFdmFsRXJyb3IsXG5cdCclRmxvYXQzMkFycmF5JSc6IHR5cGVvZiBGbG9hdDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQzMkFycmF5LFxuXHQnJUZsb2F0NjRBcnJheSUnOiB0eXBlb2YgRmxvYXQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0NjRBcnJheSxcblx0JyVGaW5hbGl6YXRpb25SZWdpc3RyeSUnOiB0eXBlb2YgRmluYWxpemF0aW9uUmVnaXN0cnkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmluYWxpemF0aW9uUmVnaXN0cnksXG5cdCclRnVuY3Rpb24lJzogJEZ1bmN0aW9uLFxuXHQnJUdlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVJbnQ4QXJyYXklJzogdHlwZW9mIEludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQ4QXJyYXksXG5cdCclSW50MTZBcnJheSUnOiB0eXBlb2YgSW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQxNkFycmF5LFxuXHQnJUludDMyQXJyYXklJzogdHlwZW9mIEludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MzJBcnJheSxcblx0JyVpc0Zpbml0ZSUnOiBpc0Zpbml0ZSxcblx0JyVpc05hTiUnOiBpc05hTixcblx0JyVJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSkgOiB1bmRlZmluZWQsXG5cdCclSlNPTiUnOiB0eXBlb2YgSlNPTiA9PT0gJ29iamVjdCcgPyBKU09OIDogdW5kZWZpbmVkLFxuXHQnJU1hcCUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IE1hcCxcblx0JyVNYXBJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgTWFwID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiBSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6IFJlZmVyZW5jZUVycm9yLFxuXHQnJVJlZmxlY3QlJzogdHlwZW9mIFJlZmxlY3QgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUmVmbGVjdCxcblx0JyVSZWdFeHAlJzogUmVnRXhwLFxuXHQnJVNldCUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNldCxcblx0JyVTZXRJdGVyYXRvclByb3RvdHlwZSUnOiB0eXBlb2YgU2V0ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzU3ltYm9scyA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6IFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0XG59O1xuXG52YXIgZG9FdmFsID0gZnVuY3Rpb24gZG9FdmFsKG5hbWUpIHtcblx0dmFyIHZhbHVlO1xuXHRpZiAobmFtZSA9PT0gJyVBc3luY0Z1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24gKCkge30nKTtcblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUdlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJScpIHtcblx0XHR2YWx1ZSA9IGdldEV2YWxsZWRDb25zdHJ1Y3RvcignYXN5bmMgZnVuY3Rpb24qICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0dlbmVyYXRvciUnKSB7XG5cdFx0dmFyIGZuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKTtcblx0XHRpZiAoZm4pIHtcblx0XHRcdHZhbHVlID0gZm4ucHJvdG90eXBlO1xuXHRcdH1cblx0fSBlbHNlIGlmIChuYW1lID09PSAnJUFzeW5jSXRlcmF0b3JQcm90b3R5cGUlJykge1xuXHRcdHZhciBnZW4gPSBkb0V2YWwoJyVBc3luY0dlbmVyYXRvciUnKTtcblx0XHRpZiAoZ2VuKSB7XG5cdFx0XHR2YWx1ZSA9IGdldFByb3RvKGdlbi5wcm90b3R5cGUpO1xuXHRcdH1cblx0fVxuXG5cdElOVFJJTlNJQ1NbbmFtZV0gPSB2YWx1ZTtcblxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgTEVHQUNZX0FMSUFTRVMgPSB7XG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xuXG4vKiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2xvZGFzaC9sb2Rhc2gvYmxvYi80LjE3LjE1L2Rpc3QvbG9kYXNoLmpzI0w2NzM1LUw2NzQ0ICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXiUuW1xcXV0rfFxcWyg/OigtP1xcZCsoPzpcXC5cXGQrKT8pfChbXCInXSkoKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKj8pXFwyKVxcXXwoPz0oPzpcXC58XFxbXFxdKSg/OlxcLnxcXFtcXF18JSQpKS9nO1xudmFyIHJlRXNjYXBlQ2hhciA9IC9cXFxcKFxcXFwpPy9nOyAvKiogVXNlZCB0byBtYXRjaCBiYWNrc2xhc2hlcyBpbiBwcm9wZXJ0eSBwYXRocy4gKi9cbnZhciBzdHJpbmdUb1BhdGggPSBmdW5jdGlvbiBzdHJpbmdUb1BhdGgoc3RyaW5nKSB7XG5cdHZhciBmaXJzdCA9ICRzdHJTbGljZShzdHJpbmcsIDAsIDEpO1xuXHR2YXIgbGFzdCA9ICRzdHJTbGljZShzdHJpbmcsIC0xKTtcblx0aWYgKGZpcnN0ID09PSAnJScgJiYgbGFzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBjbG9zaW5nIGAlYCcpO1xuXHR9IGVsc2UgaWYgKGxhc3QgPT09ICclJyAmJiBmaXJzdCAhPT0gJyUnKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW52YWxpZCBpbnRyaW5zaWMgc3ludGF4LCBleHBlY3RlZCBvcGVuaW5nIGAlYCcpO1xuXHR9XG5cdHZhciByZXN1bHQgPSBbXTtcblx0JHJlcGxhY2Uoc3RyaW5nLCByZVByb3BOYW1lLCBmdW5jdGlvbiAobWF0Y2gsIG51bWJlciwgcXVvdGUsIHN1YlN0cmluZykge1xuXHRcdHJlc3VsdFtyZXN1bHQubGVuZ3RoXSA9IHF1b3RlID8gJHJlcGxhY2Uoc3ViU3RyaW5nLCByZUVzY2FwZUNoYXIsICckMScpIDogbnVtYmVyIHx8IG1hdGNoO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG4vKiBlbmQgYWRhcHRhdGlvbiAqL1xuXG52YXIgZ2V0QmFzZUludHJpbnNpYyA9IGZ1bmN0aW9uIGdldEJhc2VJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWNOYW1lID0gbmFtZTtcblx0dmFyIGFsaWFzO1xuXHRpZiAoaGFzT3duKExFR0FDWV9BTElBU0VTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdGFsaWFzID0gTEVHQUNZX0FMSUFTRVNbaW50cmluc2ljTmFtZV07XG5cdFx0aW50cmluc2ljTmFtZSA9ICclJyArIGFsaWFzWzBdICsgJyUnO1xuXHR9XG5cblx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNOYW1lKSkge1xuXHRcdHZhciB2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljTmFtZV07XG5cdFx0aWYgKHZhbHVlID09PSBuZWVkc0V2YWwpIHtcblx0XHRcdHZhbHVlID0gZG9FdmFsKGludHJpbnNpY05hbWUpO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyAmJiAhYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZSEnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YWxpYXM6IGFsaWFzLFxuXHRcdFx0bmFtZTogaW50cmluc2ljTmFtZSxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH07XG5cdH1cblxuXHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0IScpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBHZXRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZS5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaW50cmluc2ljIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgdHlwZW9mIGFsbG93TWlzc2luZyAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1wiYWxsb3dNaXNzaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBhIGJvb2xlYW4nKTtcblx0fVxuXG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgb3JpZ1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbDtcbnZhciBoYXNTeW1ib2xTaGFtID0gcmVxdWlyZSgnLi9zaGFtcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgY29tcGxleGl0eTogWzIsIDE4XSwgbWF4LXN0YXRlbWVudHM6IFsyLCAzM10gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzU3ltYm9scygpIHtcblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSAnc3ltYm9sJykgeyByZXR1cm4gdHJ1ZTsgfVxuXG5cdHZhciBvYmogPSB7fTtcblx0dmFyIHN5bSA9IFN5bWJvbCgndGVzdCcpO1xuXHR2YXIgc3ltT2JqID0gT2JqZWN0KHN5bSk7XG5cdGlmICh0eXBlb2Ygc3ltID09PSAnc3RyaW5nJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bU9iaikgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvb2JqZWN0LmFzc2lnbi9pc3N1ZXMvMTdcblx0Ly8gaWYgKHN5bSBpbnN0YW5jZW9mIFN5bWJvbCkgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL1dlYlJlZmxlY3Rpb24vZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzL2lzc3Vlcy80XG5cdC8vIGlmICghKHN5bU9iaiBpbnN0YW5jZW9mIFN5bWJvbCkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gaWYgKHR5cGVvZiBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyBpZiAoU3RyaW5nKHN5bSkgIT09IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1WYWwgPSA0Mjtcblx0b2JqW3N5bV0gPSBzeW1WYWw7XG5cdGZvciAoc3ltIGluIG9iaikgeyByZXR1cm4gZmFsc2U7IH0gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tdW5yZWFjaGFibGUtbG9vcFxuXHRpZiAodHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iaik7XG5cdGlmIChzeW1zLmxlbmd0aCAhPT0gMSB8fCBzeW1zWzBdICE9PSBzeW0pIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqLCBzeW0pKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICh0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIHN5bSk7XG5cdFx0aWYgKGRlc2NyaXB0b3IudmFsdWUgIT09IHN5bVZhbCB8fCBkZXNjcmlwdG9yLmVudW1lcmFibGUgIT09IHRydWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNUb1N0cmluZ1RhZ1NoYW1zKCkge1xuXHRyZXR1cm4gaGFzU3ltYm9scygpICYmICEhU3ltYm9sLnRvU3RyaW5nVGFnO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZm5Ub1N0ciA9IEZ1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZztcbnZhciByZWZsZWN0QXBwbHkgPSB0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdCAhPT0gbnVsbCAmJiBSZWZsZWN0LmFwcGx5O1xudmFyIGJhZEFycmF5TGlrZTtcbnZhciBpc0NhbGxhYmxlTWFya2VyO1xuaWYgKHR5cGVvZiByZWZsZWN0QXBwbHkgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuXHR0cnkge1xuXHRcdGJhZEFycmF5TGlrZSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ2xlbmd0aCcsIHtcblx0XHRcdGdldDogZnVuY3Rpb24gKCkge1xuXHRcdFx0XHR0aHJvdyBpc0NhbGxhYmxlTWFya2VyO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlzQ2FsbGFibGVNYXJrZXIgPSB7fTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdGhyb3ctbGl0ZXJhbFxuXHRcdHJlZmxlY3RBcHBseShmdW5jdGlvbiAoKSB7IHRocm93IDQyOyB9LCBudWxsLCBiYWRBcnJheUxpa2UpO1xuXHR9IGNhdGNoIChfKSB7XG5cdFx0aWYgKF8gIT09IGlzQ2FsbGFibGVNYXJrZXIpIHtcblx0XHRcdHJlZmxlY3RBcHBseSA9IG51bGw7XG5cdFx0fVxuXHR9XG59IGVsc2Uge1xuXHRyZWZsZWN0QXBwbHkgPSBudWxsO1xufVxuXG52YXIgY29uc3RydWN0b3JSZWdleCA9IC9eXFxzKmNsYXNzXFxiLztcbnZhciBpc0VTNkNsYXNzRm4gPSBmdW5jdGlvbiBpc0VTNkNsYXNzRnVuY3Rpb24odmFsdWUpIHtcblx0dHJ5IHtcblx0XHR2YXIgZm5TdHIgPSBmblRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBjb25zdHJ1Y3RvclJlZ2V4LnRlc3QoZm5TdHIpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBub3QgYSBmdW5jdGlvblxuXHR9XG59O1xuXG52YXIgdHJ5RnVuY3Rpb25PYmplY3QgPSBmdW5jdGlvbiB0cnlGdW5jdGlvblRvU3RyKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0Zm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZm5DbGFzcyA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG52YXIgZ2VuQ2xhc3MgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZzsgLy8gYmV0dGVyOiB1c2UgYGhhcy10b3N0cmluZ3RhZ2Bcbi8qIGdsb2JhbHMgZG9jdW1lbnQ6IGZhbHNlICovXG52YXIgZG9jdW1lbnREb3RBbGwgPSB0eXBlb2YgZG9jdW1lbnQgPT09ICdvYmplY3QnICYmIHR5cGVvZiBkb2N1bWVudC5hbGwgPT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmFsbCAhPT0gdW5kZWZpbmVkID8gZG9jdW1lbnQuYWxsIDoge307XG5cbm1vZHVsZS5leHBvcnRzID0gcmVmbGVjdEFwcGx5XG5cdD8gZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHR0cnkge1xuXHRcdFx0cmVmbGVjdEFwcGx5KHZhbHVlLCBudWxsLCBiYWRBcnJheUxpa2UpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdGlmIChlICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdH1cblx0XHRyZXR1cm4gIWlzRVM2Q2xhc3NGbih2YWx1ZSk7XG5cdH1cblx0OiBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlKSB7XG5cdFx0aWYgKHZhbHVlID09PSBkb2N1bWVudERvdEFsbCkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdGlmICghdmFsdWUpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicgJiYgIXZhbHVlLnByb3RvdHlwZSkgeyByZXR1cm4gdHJ1ZTsgfVxuXHRcdGlmIChoYXNUb1N0cmluZ1RhZykgeyByZXR1cm4gdHJ5RnVuY3Rpb25PYmplY3QodmFsdWUpOyB9XG5cdFx0aWYgKGlzRVM2Q2xhc3NGbih2YWx1ZSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0dmFyIHN0ckNsYXNzID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHN0ckNsYXNzID09PSBmbkNsYXNzIHx8IHN0ckNsYXNzID09PSBnZW5DbGFzcztcblx0fTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldERheSA9IERhdGUucHJvdG90eXBlLmdldERheTtcbnZhciB0cnlEYXRlT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RGF0ZUdldERheUNhbGwodmFsdWUpIHtcblx0dHJ5IHtcblx0XHRnZXREYXkuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgZGF0ZUNsYXNzID0gJ1tvYmplY3QgRGF0ZV0nO1xudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0RhdGVPYmplY3QodmFsdWUpIHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0cmV0dXJuIGhhc1RvU3RyaW5nVGFnID8gdHJ5RGF0ZU9iamVjdCh2YWx1ZSkgOiB0b1N0ci5jYWxsKHZhbHVlKSA9PT0gZGF0ZUNsYXNzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG52YXIgaGFzO1xudmFyICRleGVjO1xudmFyIGlzUmVnZXhNYXJrZXI7XG52YXIgYmFkU3RyaW5naWZpZXI7XG5cbmlmIChoYXNUb1N0cmluZ1RhZykge1xuXHRoYXMgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHknKTtcblx0JGV4ZWMgPSBjYWxsQm91bmQoJ1JlZ0V4cC5wcm90b3R5cGUuZXhlYycpO1xuXHRpc1JlZ2V4TWFya2VyID0ge307XG5cblx0dmFyIHRocm93UmVnZXhNYXJrZXIgPSBmdW5jdGlvbiAoKSB7XG5cdFx0dGhyb3cgaXNSZWdleE1hcmtlcjtcblx0fTtcblx0YmFkU3RyaW5naWZpZXIgPSB7XG5cdFx0dG9TdHJpbmc6IHRocm93UmVnZXhNYXJrZXIsXG5cdFx0dmFsdWVPZjogdGhyb3dSZWdleE1hcmtlclxuXHR9O1xuXG5cdGlmICh0eXBlb2YgU3ltYm9sLnRvUHJpbWl0aXZlID09PSAnc3ltYm9sJykge1xuXHRcdGJhZFN0cmluZ2lmaWVyW1N5bWJvbC50b1ByaW1pdGl2ZV0gPSB0aHJvd1JlZ2V4TWFya2VyO1xuXHR9XG59XG5cbnZhciAkdG9TdHJpbmcgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbnZhciByZWdleENsYXNzID0gJ1tvYmplY3QgUmVnRXhwXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzVG9TdHJpbmdUYWdcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG5cdD8gZnVuY3Rpb24gaXNSZWdleCh2YWx1ZSkge1xuXHRcdGlmICghdmFsdWUgfHwgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHZhciBkZXNjcmlwdG9yID0gZ09QRCh2YWx1ZSwgJ2xhc3RJbmRleCcpO1xuXHRcdHZhciBoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkgPSBkZXNjcmlwdG9yICYmIGhhcyhkZXNjcmlwdG9yLCAndmFsdWUnKTtcblx0XHRpZiAoIWhhc0xhc3RJbmRleERhdGFQcm9wZXJ0eSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHQkZXhlYyh2YWx1ZSwgYmFkU3RyaW5naWZpZXIpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBlID09PSBpc1JlZ2V4TWFya2VyO1xuXHRcdH1cblx0fVxuXHQ6IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHQvLyBJbiBvbGRlciBicm93c2VycywgdHlwZW9mIHJlZ2V4IGluY29ycmVjdGx5IHJldHVybnMgJ2Z1bmN0aW9uJ1xuXHRcdGlmICghdmFsdWUgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiAkdG9TdHJpbmcodmFsdWUpID09PSByZWdleENsYXNzO1xuXHR9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scycpKCk7XG5cbmlmIChoYXNTeW1ib2xzKSB7XG5cdHZhciBzeW1Ub1N0ciA9IFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBzeW1TdHJpbmdSZWdleCA9IC9eU3ltYm9sXFwoLipcXCkkLztcblx0dmFyIGlzU3ltYm9sT2JqZWN0ID0gZnVuY3Rpb24gaXNSZWFsU3ltYm9sT2JqZWN0KHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZS52YWx1ZU9mKCkgIT09ICdzeW1ib2wnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBzeW1TdHJpbmdSZWdleC50ZXN0KHN5bVRvU3RyLmNhbGwodmFsdWUpKTtcblx0fTtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAodG9TdHIuY2FsbCh2YWx1ZSkgIT09ICdbb2JqZWN0IFN5bWJvbF0nKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gaXNTeW1ib2xPYmplY3QodmFsdWUpO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH07XG59IGVsc2Uge1xuXG5cdG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcblx0XHQvLyB0aGlzIGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgU3ltYm9scy5cblx0XHRyZXR1cm4gZmFsc2UgJiYgdmFsdWU7XG5cdH07XG59XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBMYW5ndWFnZUxpbnRlci5qcy5MSUNFTlNFLnR4dCAqL1xuKCgpPT57dmFyIG49ezExNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSxpKXt2YXIgcix0PS0xO2lmKCFuKXRocm93IG5ldyBFcnJvcihcIkl0ZXJhdGUgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIFwiK24pO2lmKCFlLmNhbGwobixcImxlbmd0aFwiKSl0aHJvdyBuZXcgRXJyb3IoXCJJdGVyYXRlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IGhhcyBhIGBsZW5ndGhgXCIpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IEVycm9yKFwiYGNhbGxiYWNrYCBtdXN0IGJlIGEgZnVuY3Rpb25cIik7Zm9yKDsrK3Q8bi5sZW5ndGg7KXQgaW4gbiYmXCJudW1iZXJcIj09dHlwZW9mKHI9YS5jYWxsKGksblt0XSx0LG4pKSYmKHI8MCYmKHQ9MCksdD1yLTEpfTt2YXIgZT17fS5oYXNPd25Qcm9wZXJ0eX0sNzgwOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjthLmQoZSx7WjooKT0+TX0pO3ZhciBpPWEoODEpLHI9YS5uKGkpLHQ9YSg2NDUpLG89YS5uKHQpKCkocigpKTtvLnB1c2goW24uaWQsJyoge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogIzAwNjRjOTtcXG59XFxuXFxuLyoubG9hZGluZy1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGJsdWU7XFxufSovXFxuXFxuLnN1Z2dlc3Rpb24tbGlzdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBwYWRkaW5nLWxlZnQ6ICAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogMTBweDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZTBlMGUwO1xcbiAgYmFja2dyb3VuZDogI2ZmZmZmZjtcXG4gIGJveC1zaGFkb3c6IDBweCAycHggMHB4IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICB0cmFuc2l0aW9uOiAwLjA4NXMgYWxsIGVhc2Utb3V0O1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcblxcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbik6aG92ZXIge1xcbiAgdHJhbnNmb3JtOiAgdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJveC1zaGFkb3c6IFxcbiAgICAwcHggMi41cHggMnB4IHJnYmEoMCAwIDAgLyAuMDMpLFxcbiAgICAwcHggNnB4IDhweCByZ2JhKDAgMCAwIC8gLjAyKTtcXG5cXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCAwIDAgLyAyMCUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbik6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogIHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDBweCAycHggMXB4IHJnYmEoMCwgMCwgMCwgMC4wMyk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5hY3RpdmUtc3VnZ2VzdGlvbiB7XFxuICBwYWRkaW5nOiAxNnB4IDE2cHggMTBweDtcXG4gIGN1cnNvcjogIGRlZmF1bHQ7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5hY3RpdmUtc3VnZ2VzdGlvbjpob3ZlcixcXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb246YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogIG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lcjpub3QoLmFjdGl2ZS1zdWdnZXN0aW9uKSA+ICo6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5KSB7XFxuICBkaXNwbGF5OiAgbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyIC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5zdWdnZXN0aW9uLXJ1bGUtYWN0dWFsIHtcXG4gIGZvbnQtc2l6ZTogIDEzcHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIG1hcmdpbjogIDA7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb24gLmFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnkge1xcbiAgZGlzcGxheTogIG5vbmU7XFxufVxcblxcbi5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IC5zdWdnZXN0aW9uLXJ1bGUtbGFiZWwge1xcbiAgY29sb3I6ICByZ2JhKDAgMCAwIC8gNTAlKTtcXG59XFxuXFxuLmFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnkgLnN1Z2dlc3Rpb24tcnVsZS1sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogXCLigKJcIjtcXG4gIG1hcmdpbi1yaWdodDogIDhweDtcXG4gIGNvbG9yOiAgcmdiYSgwIDAgMCAvIDQwJSk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lci5zdWdnZXN0aW9uLWRpc21pc3NlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuc3VnZ2VzdGlvbi1hY2NlcHRlZCB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiA4cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiA2cHg7XFxuICBoZWlnaHQ6IDZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM5MTk3OTc7XFxuICBib3JkZXItcmFkaXVzOiAxMDAlO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5LnNldmVyZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYyZDI0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5Lm1vZGVyYXRlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMwYzc0ZGY7XFxufVxcblxcbi5zdWdnZXN0aW9uLXJ1bGUtbGFiZWwge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcXG4gIGZvbnQtc2l6ZTogMTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuNzVweDtcXG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XFxuICBjb2xvcjogIzZlNzU3NTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogMTJweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5zdW1tYXJ5LWJhc2ljIHtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGNvbG9yOiAjMjgzNjM2O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGdhcDogNnB4O1xcbn1cXG5cXG4uYmFzaWMtc3VtbWFyeS1leGFtcGxlIHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudCB7XFxuICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcXG4gIGNvbG9yOiAjZGYyZDI0O1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudC10ZXh0IHtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGNvbG9yOiAjMjgzNjM2O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWFycm93IHtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC45KTtcXG59XFxuXFxuLnN1bW1hcnktcmVtb3ZhbCAuc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQge1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNkZjJkMjQ7XFxuICB0ZXh0LXNoYWRvdzogMCAxcHggcmdiKDAgMCAwIC8gMTAlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA2NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50OmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlYzUxNDg7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50OmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG59XFxuXFxuLnN1bW1hcnktcmVtb3ZhbCAuc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dCB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogI2ZmZjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudCB7XFxuICBwYWRkaW5nOiA1cHggN3B4IDZweDtcXG4gIGZvbnQtc2l6ZTogMTVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMzMzg3ZGQ7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA2NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQ6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzRjOWJlYjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudDphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiA2cHg7XFxuICBwYWRkaW5nOiAxcHggMCAxOHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogIC0xOXB4O1xcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3R0b206IDFweDtcXG59XFxuXFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHM6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gIGRpc3BsYXk6ICBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy5uby1yZXBsYWNlbWVudCB7XFxuICBtYXJnaW4tYm90dG9tOiAgMDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy1jb250YWluZXIge1xcbiAgd2lkdGg6ICAxMDAlO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHBvc2l0aW9uOiAgcmVsYXRpdmU7XFxuICBwYWRkaW5nOiAxcHggMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyOmFmdGVyIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbnRlbnQ6IFwiXCI7XFxuICBoZWlnaHQ6IDExMCU7XFxuICB3aWR0aDogMzBweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgcmdiYSgyNTUgMjU1IDI1NSAvIDApLCAgI2ZmZiApO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IC0xcHg7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4wNzVzIGVhc2Utb3V0O1xcbiAgei1pbmRleDogIDEwO1xcbn1cXG5cXG4uc2Nyb2xsLXBvc2l0aW9uLXN0YXJ0OmFmdGVyLFxcbi5zY3JvbGwtcG9zaXRpb24tbWlkZGxlOmFmdGVyIHtcXG4gIG9wYWNpdHk6ICAxO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cy1jb250YWluZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGNvbnRlbnQ6IFwiXCI7XFxuICBoZWlnaHQ6IDExMCU7XFxuICB3aWR0aDogMzBweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCByZ2JhKDI1NSAyNTUgMjU1IC8gMCksICAjZmZmICk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBsZWZ0OiAwO1xcbiAgdG9wOiAtMXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMXMgZWFzZS1vdXQ7XFxuICB6LWluZGV4OiAgMTA7XFxufVxcblxcbi5zY3JvbGwtcG9zaXRpb24tZW5kOmJlZm9yZSxcXG4uc2Nyb2xsLXBvc2l0aW9uLW1pZGRsZTpiZWZvcmUge1xcbiAgb3BhY2l0eTogIDE7XFxufVxcblxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXIge1xcbiAgbWFyZ2luLWJvdHRvbTogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXI6YmVmb3JlLFxcbi5uby1yZXBsYWNlbWVudC1jb250YWluZXI6YWZ0ZXIge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMubm8tcmVwbGFjZW1lbnQge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgwIDAgMCAvIDE1JSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1kZXNjcmlwdGlvbi10ZXh0IHtcXG4gIG1hcmdpbjogMnB4IDAgNHB4O1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1jdGFzIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBtYXJnaW46IC00cHggLThweCAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBwYWRkaW5nOiA2cHggMTBweDtcXG4gIGdhcDogNnB4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6ICM2ZTc1NzU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlLW91dDtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5LmRlbGV0ZS1pcy1ob3ZlcmVkOmJlZm9yZSB7XFxuICBjb250ZW50OiBcIkRpc21pc3NcIjtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogLTMwcHg7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICBwYWRkaW5nOiA0cHggOHB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAgMCAwIC8gODAlKTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeS5kZWxldGUtaXMtaG92ZXJlZDphZnRlciB7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC04cHg7XFxuICBsZWZ0OiA1MCU7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XFxuICBib3JkZXItdG9wOiAzcHggc29saWQgcmdiYSgwIDAgMCAvIDgwJSk7XFxuICBib3JkZXItcmlnaHQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0OiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1hcmdpbi10b3A6IDIwcHg7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuNzYpO1xcbiAgYm9yZGVyOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGJvcmRlci1yYWRpdXM6IDhweDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLmVtcHR5LXN0YXRlLWhlYWRpbmcge1xcbiAgY29sb3I6IHJnYmEoMCAwIDAgLyA3MCUpO1xcbiAgbWFyZ2luOiAwIDAgNnB4O1xcbiAgbWF4LXdpZHRoOiAgODAlO1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbn1cXG5cXG4uZW1wdHktc3RhdGUtZGVzY3JpcHRpb24ge1xcbiAgY29sb3I6IHJnYmEoMCAwIDAgLyA2MCUpO1xcbiAgbWFyZ2luOiAwO1xcbiAgbWF4LXdpZHRoOiAgODAlO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6ICAxNDAlO1xcbn1cXG4nLFwiXCJdKTtjb25zdCBNPW99LDY0NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPVtdO3JldHVybiBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWFwKChmdW5jdGlvbihlKXt2YXIgYT1cIlwiLGk9dm9pZCAwIT09ZVs1XTtyZXR1cm4gZVs0XSYmKGErPVwiQHN1cHBvcnRzIChcIi5jb25jYXQoZVs0XSxcIikge1wiKSksZVsyXSYmKGErPVwiQG1lZGlhIFwiLmNvbmNhdChlWzJdLFwiIHtcIikpLGkmJihhKz1cIkBsYXllclwiLmNvbmNhdChlWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChlWzVdKTpcIlwiLFwiIHtcIikpLGErPW4oZSksaSYmKGErPVwifVwiKSxlWzJdJiYoYSs9XCJ9XCIpLGVbNF0mJihhKz1cIn1cIiksYX0pKS5qb2luKFwiXCIpfSxlLmk9ZnVuY3Rpb24obixhLGkscix0KXtcInN0cmluZ1wiPT10eXBlb2YgbiYmKG49W1tudWxsLG4sdm9pZCAwXV0pO3ZhciBvPXt9O2lmKGkpZm9yKHZhciBNPTA7TTx0aGlzLmxlbmd0aDtNKyspe3ZhciBzPXRoaXNbTV1bMF07bnVsbCE9cyYmKG9bc109ITApfWZvcih2YXIgbD0wO2w8bi5sZW5ndGg7bCsrKXt2YXIgYz1bXS5jb25jYXQobltsXSk7aSYmb1tjWzBdXXx8KHZvaWQgMCE9PXQmJih2b2lkIDA9PT1jWzVdfHwoY1sxXT1cIkBsYXllclwiLmNvbmNhdChjWzVdLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChjWzVdKTpcIlwiLFwiIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpKSxjWzVdPXQpLGEmJihjWzJdPyhjWzFdPVwiQG1lZGlhIFwiLmNvbmNhdChjWzJdLFwiIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpLGNbMl09YSk6Y1syXT1hKSxyJiYoY1s0XT8oY1sxXT1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGNbNF0sXCIpIHtcIikuY29uY2F0KGNbMV0sXCJ9XCIpLGNbNF09cik6Y1s0XT1cIlwiLmNvbmNhdChyKSksZS5wdXNoKGMpKX19LGV9fSw4MTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBuWzFdfX0sNDcwOm49PntcInVzZSBzdHJpY3RcIjt2YXIgZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsdD1mdW5jdGlvbihuKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkobik6XCJbb2JqZWN0IEFycmF5XVwiPT09YS5jYWxsKG4pfSxvPWZ1bmN0aW9uKG4pe2lmKCFufHxcIltvYmplY3QgT2JqZWN0XVwiIT09YS5jYWxsKG4pKXJldHVybiExO3ZhciBpLHI9ZS5jYWxsKG4sXCJjb25zdHJ1Y3RvclwiKSx0PW4uY29uc3RydWN0b3ImJm4uY29uc3RydWN0b3IucHJvdG90eXBlJiZlLmNhbGwobi5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsXCJpc1Byb3RvdHlwZU9mXCIpO2lmKG4uY29uc3RydWN0b3ImJiFyJiYhdClyZXR1cm4hMTtmb3IoaSBpbiBuKTtyZXR1cm4gdm9pZCAwPT09aXx8ZS5jYWxsKG4saSl9LE09ZnVuY3Rpb24obixlKXtpJiZcIl9fcHJvdG9fX1wiPT09ZS5uYW1lP2kobixlLm5hbWUse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOmUubmV3VmFsdWUsd3JpdGFibGU6ITB9KTpuW2UubmFtZV09ZS5uZXdWYWx1ZX0scz1mdW5jdGlvbihuLGEpe2lmKFwiX19wcm90b19fXCI9PT1hKXtpZighZS5jYWxsKG4sYSkpcmV0dXJuO2lmKHIpcmV0dXJuIHIobixhKS52YWx1ZX1yZXR1cm4gblthXX07bi5leHBvcnRzPWZ1bmN0aW9uIG4oKXt2YXIgZSxhLGkscixsLGMsUz1hcmd1bWVudHNbMF0sdT0xLGQ9YXJndW1lbnRzLmxlbmd0aCxtPSExO2ZvcihcImJvb2xlYW5cIj09dHlwZW9mIFMmJihtPVMsUz1hcmd1bWVudHNbMV18fHt9LHU9MiksKG51bGw9PVN8fFwib2JqZWN0XCIhPXR5cGVvZiBTJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBTKSYmKFM9e30pO3U8ZDsrK3UpaWYobnVsbCE9KGU9YXJndW1lbnRzW3VdKSlmb3IoYSBpbiBlKWk9cyhTLGEpLFMhPT0ocj1zKGUsYSkpJiYobSYmciYmKG8ocil8fChsPXQocikpKT8obD8obD0hMSxjPWkmJnQoaSk/aTpbXSk6Yz1pJiZvKGkpP2k6e30sTShTLHtuYW1lOmEsbmV3VmFsdWU6bihtLGMscil9KSk6dm9pZCAwIT09ciYmTShTLHtuYW1lOmEsbmV3VmFsdWU6cn0pKTtyZXR1cm4gU319LDI5MTpuPT57IWZ1bmN0aW9uKCl7dmFyIGU7ZnVuY3Rpb24gYShuKXtmb3IodmFyIGUsYSxpLHIsdD0xLG89W10uc2xpY2UuY2FsbChhcmd1bWVudHMpLE09MCxzPW4ubGVuZ3RoLGw9XCJcIixjPSExLFM9ITEsdT1mdW5jdGlvbigpe3JldHVybiBvW3QrK119LGQ9ZnVuY3Rpb24oKXtmb3IodmFyIGE9XCJcIjsvXFxkLy50ZXN0KG5bTV0pOylhKz1uW00rK10sZT1uW01dO3JldHVybiBhLmxlbmd0aD4wP3BhcnNlSW50KGEpOm51bGx9O008czsrK00paWYoZT1uW01dLGMpc3dpdGNoKGM9ITEsXCIuXCI9PWU/KFM9ITEsZT1uWysrTV0pOlwiMFwiPT1lJiZcIi5cIj09bltNKzFdPyhTPSEwLGU9bltNKz0yXSk6Uz0hMCxyPWQoKSxlKXtjYXNlXCJiXCI6bCs9cGFyc2VJbnQodSgpLDEwKS50b1N0cmluZygyKTticmVhaztjYXNlXCJjXCI6bCs9XCJzdHJpbmdcIj09dHlwZW9mKGE9dSgpKXx8YSBpbnN0YW5jZW9mIFN0cmluZz9hOlN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYSwxMCkpO2JyZWFrO2Nhc2VcImRcIjpsKz1wYXJzZUludCh1KCksMTApO2JyZWFrO2Nhc2VcImZcIjppPVN0cmluZyhwYXJzZUZsb2F0KHUoKSkudG9GaXhlZChyfHw2KSksbCs9Uz9pOmkucmVwbGFjZSgvXjAvLFwiXCIpO2JyZWFrO2Nhc2VcImpcIjpsKz1KU09OLnN0cmluZ2lmeSh1KCkpO2JyZWFrO2Nhc2VcIm9cIjpsKz1cIjBcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDgpO2JyZWFrO2Nhc2VcInNcIjpsKz11KCk7YnJlYWs7Y2FzZVwieFwiOmwrPVwiMHhcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDE2KTticmVhaztjYXNlXCJYXCI6bCs9XCIweFwiK3BhcnNlSW50KHUoKSwxMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7YnJlYWs7ZGVmYXVsdDpsKz1lfWVsc2VcIiVcIj09PWU/Yz0hMDpsKz1lO3JldHVybiBsfShlPW4uZXhwb3J0cz1hKS5mb3JtYXQ9YSxlLnZzcHJpbnRmPWZ1bmN0aW9uKG4sZSl7cmV0dXJuIGEuYXBwbHkobnVsbCxbbl0uY29uY2F0KGUpKX0sXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGNvbnNvbGUmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUubG9nJiYoZS5wcmludGY9ZnVuY3Rpb24oKXtjb25zb2xlLmxvZyhhLmFwcGx5KG51bGwsYXJndW1lbnRzKSl9KX0oKX0sNzM4Om49PntuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIG51bGwhPW4mJm51bGwhPW4uY29uc3RydWN0b3ImJlwiZnVuY3Rpb25cIj09dHlwZW9mIG4uY29uc3RydWN0b3IuaXNCdWZmZXImJm4uY29uc3RydWN0b3IuaXNCdWZmZXIobil9fSw1OmZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyO3I9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyx2b2lkIDA9PT0oaT1mdW5jdGlvbigpe3JldHVybiByLmRvY3VtZW50LGk9YSg3NjEpLHQ9bnVsbCxmdW5jdGlvbihhLHIpe3JldHVybiBlPW4sbj1yfHxpLHQ9dCYmZT09PW4/dDpmdW5jdGlvbihuKXtyZXR1cm4gbmV3IFJlZ0V4cChcIltcIitPYmplY3Qua2V5cyhuKS5tYXAoKGZ1bmN0aW9uKG4pe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG4pfSkpLmpvaW4oXCIgXCIpK1wiXVwiLFwiZ1wiKX0obiksYS5yZXBsYWNlKHQsKGZ1bmN0aW9uKGUpe3JldHVybiBuW2UuY2hhckNvZGVBdCgwKV18fGV9KSl9O3ZhciBuLGUsaSx0fS5jYWxsKGUsYSxlLG4pKXx8KG4uZXhwb3J0cz1pKX0sNDk1OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDUzNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7dmFyIGE9dGhpcztyZXR1cm4gaShhLmRhdGEsbixhLmRhdGFbZV18fHIsYSksYX07dmFyIHI9W119LDU5NjoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSgxMCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKGkodGhpcyxuKSl9fSw3Njk6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTEwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxyLHQsbz10aGlzLE09LTE7Zm9yKGkobixvLG8uZGF0YSk7KytNPG8uY29tcG91bmRSdWxlcy5sZW5ndGg7KXtmb3IoZT1vLmNvbXBvdW5kUnVsZXNbTV0sYT1cIlwiLHQ9LTE7Kyt0PGUubGVuZ3RoOylyPWUuY2hhckF0KHQpLGErPW8uY29tcG91bmRSdWxlQ29kZXNbcl0ubGVuZ3RoP1wiKD86XCIrby5jb21wb3VuZFJ1bGVDb2Rlc1tyXS5qb2luKFwifFwiKStcIilcIjpyO28uY29tcG91bmRSdWxlc1tNXT1uZXcgUmVnRXhwKGEsXCJpXCIpfXJldHVybiBvfX0sNDI3OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDczOCkscj1hKDkxNik7bi5leHBvcnRzPW87dmFyIHQ9by5wcm90b3R5cGU7ZnVuY3Rpb24gbyhuLGUpe3ZhciBhLHQ9LTE7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKG4sZSk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG58fGkobik/KFwic3RyaW5nXCI9PXR5cGVvZiBlfHxpKGUpKSYmKGE9W3tkaWM6ZX1dKTpuJiYoXCJsZW5ndGhcImluIG4/KGE9bixuPW5bMF0mJm5bMF0uYWZmKToobi5kaWMmJihhPVtuXSksbj1uLmFmZikpLCFuKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgYGFmZmAgaW4gZGljdGlvbmFyeVwiKTtpZihuPXIobiksdGhpcy5kYXRhPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21wb3VuZFJ1bGVDb2Rlcz1uLmNvbXBvdW5kUnVsZUNvZGVzLHRoaXMucmVwbGFjZW1lbnRUYWJsZT1uLnJlcGxhY2VtZW50VGFibGUsdGhpcy5jb252ZXJzaW9uPW4uY29udmVyc2lvbix0aGlzLmNvbXBvdW5kUnVsZXM9bi5jb21wb3VuZFJ1bGVzLHRoaXMucnVsZXM9bi5ydWxlcyx0aGlzLmZsYWdzPW4uZmxhZ3MsYSlmb3IoOysrdDxhLmxlbmd0aDspYVt0XS5kaWMmJnRoaXMuZGljdGlvbmFyeShhW3RdLmRpYyl9dC5jb3JyZWN0PWEoNTk2KSx0LnN1Z2dlc3Q9YSgxMzIpLHQuc3BlbGw9YSg1MDEpLHQuYWRkPWEoNDk1KSx0LnJlbW92ZT1hKDQ3NSksdC53b3JkQ2hhcmFjdGVycz1hKDQ5MiksdC5kaWN0aW9uYXJ5PWEoNzY5KSx0LnBlcnNvbmFsPWEoMjE5KX0sMjE5Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxpLHIsdD10aGlzLG89bi50b1N0cmluZyhcInV0ZjhcIikuc3BsaXQoXCJcXG5cIiksTT0tMTtmb3Iodm9pZCAwPT09dC5mbGFncy5GT1JCSURERU5XT1JEJiYodC5mbGFncy5GT1JCSURERU5XT1JEPSExKSxyPXQuZmxhZ3MuRk9SQklEREVOV09SRDsrK008by5sZW5ndGg7KShlPW9bTV0udHJpbSgpKSYmKChhPVwiKlwiPT09KGk9KGU9ZS5zcGxpdChcIi9cIikpWzBdKS5jaGFyQXQoMCkpJiYoaT1pLnNsaWNlKDEpKSx0LmFkZChpLGVbMV0pLGEmJnQuZGF0YVtpXS5wdXNoKHIpKTtyZXR1cm4gdH19LDQ3NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBkZWxldGUgdGhpcy5kYXRhW25dLHRoaXN9fSw1MDE6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTApLHI9YSgzNjApO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT10aGlzLGE9aShlLG4sITApO3JldHVybntjb3JyZWN0OmUuY29ycmVjdChuKSxmb3JiaWRkZW46Qm9vbGVhbihhJiZyKGUuZmxhZ3MsXCJGT1JCSURERU5XT1JEXCIsZS5kYXRhW2FdKSksd2FybjpCb29sZWFuKGEmJnIoZS5mbGFncyxcIldBUk5cIixlLmRhdGFbYV0pKX19fSwxMzI6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoODMyKSxyPWEoNTc3KSx0PWEoMzYwKSxvPWEoMTApO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZSxhLHQsbyxsLGMsUyx1LGQsbSxwLGgsZyx5LGIsRCxmLEcsdyx2LGssUixZLEEsUCxDPXRoaXMsVD17fSx4PVtdLHo9e30sRT1bXTtpZighKG49cihuLnRyaW0oKSxDLmNvbnZlcnNpb24uaW4pKXx8Qy5jb3JyZWN0KG4pKXJldHVybltdO2ZvcihQPWkobiksbz0tMTsrK288Qy5yZXBsYWNlbWVudFRhYmxlLmxlbmd0aDspZm9yKGE9Qy5yZXBsYWNlbWVudFRhYmxlW29dLGw9bi5pbmRleE9mKGFbMF0pO2w+LTE7KUUucHVzaChuLnJlcGxhY2UoYVswXSxhWzFdKSksbD1uLmluZGV4T2YoYVswXSxsKzEpO2ZvcihvPS0xOysrbzxuLmxlbmd0aDspZm9yKG09bi5jaGFyQXQobyksaD1uLnNsaWNlKDAsbyksZz1uLnNsaWNlKG8rMSkseT0oYj1tLnRvTG93ZXJDYXNlKCkpIT09bSxUPXt9LGw9LTE7KytsPEMuZmxhZ3MuS0VZLmxlbmd0aDspaWYoISgoYz0ocD1DLmZsYWdzLktFWVtsXSkuaW5kZXhPZihiKSk8MCkpZm9yKHU9LTE7Kyt1PHAubGVuZ3RoOylpZih1IT09Yyl7aWYoVFtkPXAuY2hhckF0KHUpXSljb250aW51ZTtUW2RdPSEwLHkmJihkPWQudG9VcHBlckNhc2UoKSksRS5wdXNoKGgrZCtnKX1mb3Iobz0tMSx3PW4uY2hhckF0KDApLHQ9W1wiXCJdLHY9MSxrPTA7KytvPG4ubGVuZ3RoOyl7Zm9yKG09dyx3PW4uY2hhckF0KG8rMSksaD1uLnNsaWNlKDAsbyksYT1tPT09dz9cIlwiOm0rbSxsPS0xLFM9dC5sZW5ndGg7KytsPFM7KWw8PXYmJnQucHVzaCh0W2xdK2EpLHRbbF0rPW07KytrPDMmJih2PXQubGVuZ3RoKX1mb3IoTS5hcHBseShFLHQpLHQ9W25dLGE9bi50b0xvd2VyQ2FzZSgpLChuPT09YXx8bnVsbD09PVApJiZ0LnB1c2gobi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnNsaWNlKDEpKSxhPW4udG9VcHBlckNhc2UoKSxuIT09YSYmdC5wdXNoKGEpLEQ9cyhDLGU9e3N0YXRlOnt9LHdlaWdodGVkOnosc3VnZ2VzdGlvbnM6eH0sdCxFKSxmPTAsdj1NYXRoLm1pbihELmxlbmd0aCxNYXRoLnBvdyhNYXRoLm1heCgxNS1uLmxlbmd0aCwzKSwzKSksUj1NYXRoLm1heChNYXRoLnBvdygxMC1uLmxlbmd0aCwzKSwxKTsheC5sZW5ndGgmJmY8djspRz1mK1IscyhDLGUsRC5zbGljZShmLEcpKSxmPUc7Zm9yKHguc29ydCgoZnVuY3Rpb24obixlKXtyZXR1cm4gZnVuY3Rpb24obixlKXtyZXR1cm4geltuXT09PXpbZV0/MDp6W25dPnpbZV0/LTE6MX0obixlKXx8ZnVuY3Rpb24obixlKXt2YXIgYT1pKG4pLHI9aShlKTtyZXR1cm4gYT09PXI/MDphPT09UD8tMTpyPT09UD8xOnZvaWQgMH0obixlKXx8ZnVuY3Rpb24obixlKXtyZXR1cm4gbi5sb2NhbGVDb21wYXJlKGUpfShuLGUpfSkpLHQ9W10sWT1bXSxvPS0xOysrbzx4Lmxlbmd0aDspYT0oQT1yKHhbb10sQy5jb252ZXJzaW9uLm91dCkpLnRvTG93ZXJDYXNlKCksWS5pbmRleE9mKGEpPDAmJih0LnB1c2goQSksWS5wdXNoKGEpKTtyZXR1cm4gdH07dmFyIE09W10ucHVzaDtmdW5jdGlvbiBzKG4sZSxhLHIpe3ZhciBNLHMsbCxjLFMsdSxkLG0scCxoLGcseSxiLEQ9bi5mbGFncy5UUlksZj1uLmRhdGEsRz1uLmZsYWdzLHc9W10sdj0tMTtpZihyKWZvcig7Kyt2PHIubGVuZ3RoOylrKHJbdl0sITApO2Zvcih2PS0xOysrdjxhLmxlbmd0aDspZm9yKHM9XCJcIixsPVwiXCIsYz0oTT1hW3ZdKS5jaGFyQXQoMCksUz1NLHU9TS5zbGljZSgxKSxkPWMudG9Mb3dlckNhc2UoKSE9PWMsbT1pKE0pLHA9LTE7KytwPD1NLmxlbmd0aDspZm9yKHMrPWwsaD1TLHU9KFM9dSkuc2xpY2UoMSksbD1jLGc9ZCwoYz1NLmNoYXJBdChwKzEpKSYmKGQ9Yy50b0xvd2VyQ2FzZSgpIT09YyksUyYmZyE9PWQmJihrKHMrUihTKSksayhzK1IoYykrUihsKSt1KSksayhzK1MpLFMmJmsocytjK2wrdSksYj0tMTsrK2I8RC5sZW5ndGg7KXk9RFtiXSxnJiZ5IT09eS50b1VwcGVyQ2FzZSgpPyhcInNcIiE9PW0mJihrKHMreStoKSxrKHMreStTKSksayhzKyh5PXkudG9VcHBlckNhc2UoKSkraCksayhzK3krUykpOihrKHMreStoKSxrKHMreStTKSk7cmV0dXJuIHc7ZnVuY3Rpb24gayhhLGkpe3ZhciByLE09ZS5zdGF0ZVthXTtNIT09Qm9vbGVhbihNKSYmKHcucHVzaChhKSxNPShyPW8obixhKSkmJiF0KEcsXCJOT1NVR0dFU1RcIixmW3JdKSxlLnN0YXRlW2FdPU0sTSYmKGUud2VpZ2h0ZWRbYV09aT8xMDowLGUuc3VnZ2VzdGlvbnMucHVzaChhKSkpLE0mJmUud2VpZ2h0ZWRbYV0rK31mdW5jdGlvbiBSKG4pe3ZhciBlPW4uY2hhckF0KDApO3JldHVybihlLnRvTG93ZXJDYXNlKCk9PT1lP2UudG9VcHBlckNhc2UoKTplLnRvTG93ZXJDYXNlKCkpK24uc2xpY2UoMSl9fX0sNTM0OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDkxNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhLG8pe3ZhciBNLHMsbCxjLFMsdSxkLG09LTE7KCEoXCJORUVEQUZGSVhcImluIG8uZmxhZ3MpfHxhLmluZGV4T2Yoby5mbGFncy5ORUVEQUZGSVgpPDApJiZmdW5jdGlvbihuLGUsYSl7dmFyIGk9bltlXTtlIGluIG4/aT09PXQ/bltlXT1hLmNvbmNhdCgpOnIuYXBwbHkoaSxhKTpuW2VdPWEuY29uY2F0KCl9KG4sZSxhKTtmb3IoOysrbTxhLmxlbmd0aDspaWYoTT1vLnJ1bGVzW2FbbV1dLGFbbV1pbiBvLmNvbXBvdW5kUnVsZUNvZGVzJiZvLmNvbXBvdW5kUnVsZUNvZGVzW2FbbV1dLnB1c2goZSksTSlmb3IodT1pKGUsTSxvLnJ1bGVzLFtdKSxzPS0xOysrczx1Lmxlbmd0aDspaWYodVtzXWluIG58fChuW3Vbc11dPXQpLE0uY29tYmluZWFibGUpZm9yKGw9bTsrK2w8YS5sZW5ndGg7KWlmKChTPW8ucnVsZXNbYVtsXV0pJiZTLmNvbWJpbmVhYmxlJiZNLnR5cGUhPT1TLnR5cGUpZm9yKGQ9aSh1W3NdLFMsby5ydWxlcyxbXSksYz0tMTsrK2M8ZC5sZW5ndGg7KWRbY11pbiBufHwobltkW2NdXT10KX07dmFyIHI9W10ucHVzaCx0PVtdfSw5MTY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTI5KTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSxjLFMsdSxkLG0scCxoLGcseSxiLEQ9T2JqZWN0LmNyZWF0ZShudWxsKSxmPU9iamVjdC5jcmVhdGUobnVsbCksRz1PYmplY3QuY3JlYXRlKG51bGwpLHc9W10sdj17aW46W10sb3V0OltdfSxrPVtdLFI9bi50b1N0cmluZyhcInV0ZjhcIiksWT1bXSxBPTAsUD1SLmluZGV4T2YoXCJcXG5cIik7Zm9yKEcuS0VZPVtdO1A+LTE7KUMoUi5zbGljZShBLFApKSxBPVArMSxQPVIuaW5kZXhPZihcIlxcblwiLEEpO2ZvcihDKFIuc2xpY2UoQSkpLFA9LTE7KytQPFkubGVuZ3RoOylpZihcIlJFUFwiPT09KGE9KGU9WVtQXS5zcGxpdChvKSlbMF0pKXtmb3IoYz1QK3BhcnNlSW50KGVbMV0sMTApOysrUDw9YzspZT1ZW1BdLnNwbGl0KG8pLHcucHVzaChbZVsxXSxlWzJdXSk7UC0tfWVsc2UgaWYoXCJJQ09OVlwiPT09YXx8XCJPQ09OVlwiPT09YSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKSxtPXZbXCJJQ09OVlwiPT09YT9cImluXCI6XCJvdXRcIl07KytQPD1jOyllPVlbUF0uc3BsaXQobyksbS5wdXNoKFtuZXcgUmVnRXhwKGVbMV0sXCJnXCIpLGVbMl1dKTtQLS19ZWxzZSBpZihcIkNPTVBPVU5EUlVMRVwiPT09YSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKTsrK1A8PWM7KWZvcihoPVlbUF0uc3BsaXQobylbMV0scD0tMSxrLnB1c2goaCk7KytwPGgubGVuZ3RoOylmW2guY2hhckF0KHApXT1bXTtQLS19ZWxzZSBpZihcIlBGWFwiPT09YXx8XCJTRlhcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVszXSwxMCksaD17dHlwZTphLGNvbWJpbmVhYmxlOlwiWVwiPT09ZVsyXSxlbnRyaWVzOltdfSxEW2VbMV1dPWg7KytQPD1jOyl7Uz0oZT1ZW1BdLnNwbGl0KG8pKVsyXSx1PWVbM10uc3BsaXQoXCIvXCIpLGQ9ZVs0XSxtPXthZGQ6XCJcIixyZW1vdmU6XCJcIixtYXRjaDpcIlwiLGNvbnRpbnVhdGlvbjppKEcsdVsxXSl9LHUmJlwiMFwiIT09dVswXSYmKG0uYWRkPXVbMF0pO3RyeXtcIjBcIiE9PVMmJihtLnJlbW92ZT1cIlNGWFwiPT09YT9zKFMpOlMpLGQmJlwiLlwiIT09ZCYmKG0ubWF0Y2g9XCJTRlhcIj09PWE/cyhkKTpsKGQpKX1jYXRjaChuKXttPW51bGx9bSYmaC5lbnRyaWVzLnB1c2gobSl9UC0tfWVsc2UgaWYoXCJUUllcIj09PWEpe2ZvcihkPWVbMV0seT0tMSxnPVtdOysreTxkLmxlbmd0aDspKGI9ZC5jaGFyQXQoeSkpLnRvTG93ZXJDYXNlKCk9PT1iJiZnLnB1c2goYik7Zm9yKHk9LTE7Kyt5PHQubGVuZ3RoOylkLmluZGV4T2YodFt5XSk8MCYmZy5wdXNoKHRbeV0pO0dbYV09Z31lbHNlXCJLRVlcIj09PWE/ci5hcHBseShHW2FdLGVbMV0uc3BsaXQoXCJ8XCIpKTpcIkNPTVBPVU5ETUlOXCI9PT1hP0dbYV09TnVtYmVyKGVbMV0pOlwiT05MWUlOQ09NUE9VTkRcIj09PWE/KEdbYV09ZVsxXSxmW2VbMV1dPVtdKTpHW2FdPWVbMV07cmV0dXJuIGlzTmFOKEcuQ09NUE9VTkRNSU4pJiYoRy5DT01QT1VORE1JTj0zKSxHLktFWS5sZW5ndGh8fChHLktFWT1NKSxHLlRSWXx8KEcuVFJZPXQuY29uY2F0KCkpLEcuS0VFUENBU0V8fChHLktFRVBDQVNFPSExKSx7Y29tcG91bmRSdWxlQ29kZXM6ZixyZXBsYWNlbWVudFRhYmxlOncsY29udmVyc2lvbjp2LGNvbXBvdW5kUnVsZXM6ayxydWxlczpELGZsYWdzOkd9O2Z1bmN0aW9uIEMobil7KG49bi50cmltKCkpJiYzNSE9PW4uY2hhckNvZGVBdCgwKSYmWS5wdXNoKG4pfX07dmFyIHI9W10ucHVzaCx0PVwiZXRhb2luc2hyZGxjdW13Zmd5cGJ2a2p4cXpcIi5zcGxpdChcIlwiKSxvPS9cXHMrLyxNPVtcInF3ZXJ0enVvcFwiLFwieXhjdmJubVwiLFwicWF3XCIsXCJzYXlcIixcIndzZVwiLFwiZHN4XCIsXCJzeVwiLFwiZWRyXCIsXCJmZGNcIixcImR4XCIsXCJyZnRcIixcImdmdlwiLFwiZmNcIixcInRnelwiLFwiaGdiXCIsXCJndlwiLFwiemh1XCIsXCJqaG5cIixcImhiXCIsXCJ1amlcIixcImtqbVwiLFwiam5cIixcImlrb1wiLFwibGttXCJdO2Z1bmN0aW9uIHMobil7cmV0dXJuIG5ldyBSZWdFeHAobitcIiRcIil9ZnVuY3Rpb24gbChuKXtyZXR1cm4gbmV3IFJlZ0V4cChcIl5cIituKX19LDkxNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uIG4oZSxhLGkscil7Zm9yKHZhciB0LG8sTSxzLGwsYz0tMTsrK2M8YS5lbnRyaWVzLmxlbmd0aDspaWYocz0odD1hLmVudHJpZXNbY10pLmNvbnRpbnVhdGlvbixsPS0xLCghdC5tYXRjaHx8dC5tYXRjaC50ZXN0KGUpKSYmKG89dC5yZW1vdmU/ZS5yZXBsYWNlKHQucmVtb3ZlLFwiXCIpOmUsbz1cIlNGWFwiPT09YS50eXBlP28rdC5hZGQ6dC5hZGQrbyxyLnB1c2gobykscyYmcy5sZW5ndGgpKWZvcig7KytsPHMubGVuZ3RoOykoTT1pW3NbbF1dKSYmbihvLE0saSxyKTtyZXR1cm4gcn19LDgzMjpuPT57XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZShuKXtyZXR1cm4gbj09PW4udG9Mb3dlckNhc2UoKT9cImxcIjpuPT09bi50b1VwcGVyQ2FzZSgpP1widVwiOm51bGx9bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBhPWUobi5jaGFyQXQoMCkpLGk9bi5zbGljZSgxKTtyZXR1cm4gaT9hPT09KGk9ZShpKSk/YTpcInVcIj09PWEmJlwibFwiPT09aT9cInNcIjpudWxsOmF9fSwxMTA6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTI5KSxyPWEoNTM0KTtuLmV4cG9ydHM9ZnVuY3Rpb24obixlLGEpe2Zvcih2YXIgaT1uLnRvU3RyaW5nKFwidXRmOFwiKSxyPWkuaW5kZXhPZihcIlxcblwiKSsxLHQ9aS5pbmRleE9mKFwiXFxuXCIscik7dD4tMTspOSE9PWkuY2hhckNvZGVBdChyKSYmbyhpLnNsaWNlKHIsdCksZSxhKSxyPXQrMSx0PWkuaW5kZXhPZihcIlxcblwiLHIpO28oaS5zbGljZShyKSxlLGEpfTt2YXIgdD0vXFxzL2c7ZnVuY3Rpb24gbyhuLGUsYSl7Zm9yKHZhciBvLE0scz1uLmluZGV4T2YoXCIvXCIpLGw9bi5pbmRleE9mKFwiI1wiKSxjPVwiXCI7cz4tMSYmOTI9PT1uLmNoYXJDb2RlQXQocy0xKTspcz0obj1uLnNsaWNlKDAscy0xKStuLnNsaWNlKHMpKS5pbmRleE9mKFwiL1wiLHMpO2w+LTE/cz4tMSYmczxsPyhvPW4uc2xpY2UoMCxzKSx0Lmxhc3RJbmRleD1zKzEsTT10LmV4ZWMobiksYz1uLnNsaWNlKHMrMSxNP00uaW5kZXg6dm9pZCAwKSk6bz1uLnNsaWNlKDAsbCk6cz4tMT8obz1uLnNsaWNlKDAscyksYz1uLnNsaWNlKHMrMSkpOm89biwobz1vLnRyaW0oKSkmJnIoYSxvLGkoZS5mbGFncyxjLnRyaW0oKSksZSl9fSwyMzY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMzYwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obixlKXt2YXIgYT0tMTtpZihuLmRhdGFbZV0pcmV0dXJuIWkobi5mbGFncyxcIk9OTFlJTkNPTVBPVU5EXCIsbi5kYXRhW2VdKTtpZihlLmxlbmd0aD49bi5mbGFncy5DT01QT1VORE1JTilmb3IoOysrYTxuLmNvbXBvdW5kUnVsZXMubGVuZ3RoOylpZihuLmNvbXBvdW5kUnVsZXNbYV0udGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX19LDM2MDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXtyZXR1cm4gYSYmZSBpbiBuJiZhLmluZGV4T2YobltlXSk+LTF9fSwxMDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg1NzcpLHI9YSgyMzYpLHQ9YSgzNjApO2Z1bmN0aW9uIG8obixlLGEpe3JldHVybiB0KG4sXCJLRUVQQ0FTRVwiLGUpfHxhfHx0KG4sXCJGT1JCSURERU5XT1JEXCIsZSl9bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXt2YXIgTSxzPWUudHJpbSgpO2lmKCFzKXJldHVybiBudWxsO2lmKHM9aShzLG4uY29udmVyc2lvbi5pbikscihuLHMpKXJldHVybiFhJiZ0KG4uZmxhZ3MsXCJGT1JCSURERU5XT1JEXCIsbi5kYXRhW3NdKT9udWxsOnM7aWYocy50b1VwcGVyQ2FzZSgpPT09cyl7aWYoTT1zLmNoYXJBdCgwKStzLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCksbyhuLmZsYWdzLG4uZGF0YVtNXSxhKSlyZXR1cm4gbnVsbDtpZihyKG4sTSkpcmV0dXJuIE19aWYoKE09cy50b0xvd2VyQ2FzZSgpKSE9PXMpe2lmKG8obi5mbGFncyxuLmRhdGFbTV0sYSkpcmV0dXJuIG51bGw7aWYocihuLE0pKXJldHVybiBNfXJldHVybiBudWxsfX0sNTc3Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obixlKXtmb3IodmFyIGE9LTE7KythPGUubGVuZ3RoOyluPW4ucmVwbGFjZShlW2FdWzBdLGVbYV1bMV0pO3JldHVybiBufX0sMTI5Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obixhKXt2YXIgaSxyPTA7aWYoIWEpcmV0dXJuIGU7aWYoXCJsb25nXCI9PT1uLkZMQUcpe2ZvcihpPW5ldyBBcnJheShNYXRoLmNlaWwoYS5sZW5ndGgvMikpO3I8YS5sZW5ndGg7KWlbci8yXT1hLnNsaWNlKHIscisyKSxyKz0yO3JldHVybiBpfXJldHVybiBhLnNwbGl0KFwibnVtXCI9PT1uLkZMQUc/XCIsXCI6XCJcIil9O3ZhciBlPVtdfSw0OTI6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZsYWdzLldPUkRDSEFSU3x8bnVsbH19LDQzMjoobixlLGEpPT57IWZ1bmN0aW9uKCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gaShuKXtyZXR1cm4hKFwibnVtYmVyXCIhPXR5cGVvZiBufHxuIT1ufHxuPT09MS8wfHxuPT09LTEvMCl9ZnVuY3Rpb24gcihuKXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgbiYmTWF0aC5hYnMobik8PTkwMDcxOTkyNTQ3NDA5OTF9XCJvYmplY3RcIj09dHlwZW9mIHNlbGYmJnNlbGYuc2VsZj09PXNlbGYmJnNlbGZ8fFwib2JqZWN0XCI9PXR5cGVvZiBhLmcmJmEuZy5nbG9iYWw9PT1hLmcmJmEuZzt2YXIgdD0vKGh1bmRyZWR8dGhvdXNhbmR8KG18Ynx0cnxxdWFkcilpbGxpb24pJC8sbz0vdGVlbiQvLE09L3kkLyxzPS8oemVyb3xvbmV8dHdvfHRocmVlfGZvdXJ8Zml2ZXxzaXh8c2V2ZW58ZWlnaHR8bmluZXx0ZW58ZWxldmVufHR3ZWx2ZSkkLyxsPXt6ZXJvOlwiemVyb3RoXCIsb25lOlwiZmlyc3RcIix0d286XCJzZWNvbmRcIix0aHJlZTpcInRoaXJkXCIsZm91cjpcImZvdXJ0aFwiLGZpdmU6XCJmaWZ0aFwiLHNpeDpcInNpeHRoXCIsc2V2ZW46XCJzZXZlbnRoXCIsZWlnaHQ6XCJlaWdodGhcIixuaW5lOlwibmludGhcIix0ZW46XCJ0ZW50aFwiLGVsZXZlbjpcImVsZXZlbnRoXCIsdHdlbHZlOlwidHdlbGZ0aFwifTtmdW5jdGlvbiBjKG4pe3JldHVybiB0LnRlc3Qobil8fG8udGVzdChuKT9uK1widGhcIjpNLnRlc3Qobik/bi5yZXBsYWNlKE0sXCJpZXRoXCIpOnMudGVzdChuKT9uLnJlcGxhY2UocyxTKTpufWZ1bmN0aW9uIFMobixlKXtyZXR1cm4gbFtlXX12YXIgdT0xMDAsZD0xZTMsbT0xZTYscD0xZTksaD0xZTEyLGc9MWUxNSx5PTkwMDcxOTkyNTQ3NDA5OTIsYj1bXCJ6ZXJvXCIsXCJvbmVcIixcInR3b1wiLFwidGhyZWVcIixcImZvdXJcIixcImZpdmVcIixcInNpeFwiLFwic2V2ZW5cIixcImVpZ2h0XCIsXCJuaW5lXCIsXCJ0ZW5cIixcImVsZXZlblwiLFwidHdlbHZlXCIsXCJ0aGlydGVlblwiLFwiZm91cnRlZW5cIixcImZpZnRlZW5cIixcInNpeHRlZW5cIixcInNldmVudGVlblwiLFwiZWlnaHRlZW5cIixcIm5pbmV0ZWVuXCJdLEQ9W1wiemVyb1wiLFwidGVuXCIsXCJ0d2VudHlcIixcInRoaXJ0eVwiLFwiZm9ydHlcIixcImZpZnR5XCIsXCJzaXh0eVwiLFwic2V2ZW50eVwiLFwiZWlnaHR5XCIsXCJuaW5ldHlcIl07ZnVuY3Rpb24gZihuLGUpe3ZhciBhLHQ9cGFyc2VJbnQobiwxMCk7aWYoIWkodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBhIGZpbml0ZSBudW1iZXI6IFwiK24rXCIgKFwiK3R5cGVvZiBuK1wiKVwiKTtpZighcih0KSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklucHV0IGlzIG5vdCBhIHNhZmUgbnVtYmVyLCBpdOKAmXMgZWl0aGVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwuXCIpO3JldHVybiBhPWZ1bmN0aW9uIG4oZSl7dmFyIGEsaSxyPWFyZ3VtZW50c1sxXTtyZXR1cm4gMD09PWU/cj9yLmpvaW4oXCIgXCIpLnJlcGxhY2UoLywkLyxcIlwiKTpcInplcm9cIjoocnx8KHI9W10pLGU8MCYmKHIucHVzaChcIm1pbnVzXCIpLGU9TWF0aC5hYnMoZSkpLGU8MjA/KGE9MCxpPWJbZV0pOmU8dT8oYT1lJTEwLGk9RFtNYXRoLmZsb29yKGUvMTApXSxhJiYoaSs9XCItXCIrYlthXSxhPTApKTplPGQ/KGE9ZSV1LGk9bihNYXRoLmZsb29yKGUvdSkpK1wiIGh1bmRyZWRcIik6ZTxtPyhhPWUlZCxpPW4oTWF0aC5mbG9vcihlL2QpKStcIiB0aG91c2FuZCxcIik6ZTxwPyhhPWUlbSxpPW4oTWF0aC5mbG9vcihlL20pKStcIiBtaWxsaW9uLFwiKTplPGg/KGE9ZSVwLGk9bihNYXRoLmZsb29yKGUvcCkpK1wiIGJpbGxpb24sXCIpOmU8Zz8oYT1lJWgsaT1uKE1hdGguZmxvb3IoZS9oKSkrXCIgdHJpbGxpb24sXCIpOmU8PXkmJihhPWUlZyxpPW4oTWF0aC5mbG9vcihlL2cpKStcIiBxdWFkcmlsbGlvbixcIiksci5wdXNoKGkpLG4oYSxyKSl9KHQpLGU/YyhhKTphfXZhciBHPXt0b09yZGluYWw6ZnVuY3Rpb24obil7dmFyIGU9cGFyc2VJbnQobiwxMCk7aWYoIWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vdCBhIGZpbml0ZSBudW1iZXI6IFwiK24rXCIgKFwiK3R5cGVvZiBuK1wiKVwiKTtpZighcihlKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIklucHV0IGlzIG5vdCBhIHNhZmUgbnVtYmVyLCBpdOKAmXMgZWl0aGVyIHRvbyBsYXJnZSBvciB0b28gc21hbGwuXCIpO3ZhciBhPVN0cmluZyhlKSx0PU1hdGguYWJzKGUlMTAwKSxvPTExPD10JiZ0PD0xMyxNPWEuY2hhckF0KGEubGVuZ3RoLTEpO3JldHVybiBhKyhvP1widGhcIjpcIjFcIj09PU0/XCJzdFwiOlwiMlwiPT09TT9cIm5kXCI6XCIzXCI9PT1NP1wicmRcIjpcInRoXCIpfSx0b1dvcmRzOmYsdG9Xb3Jkc09yZGluYWw6ZnVuY3Rpb24obil7cmV0dXJuIGMoZihuKSl9fTtuLmV4cG9ydHMmJihlPW4uZXhwb3J0cz1HKSxlLm51bWJlclRvV29yZHM9R30oKX0sODAyOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24gbihlLGEpe3ZhciBpLHIsdCxvPWF8fFwiXCI7aWYoIWV8fCEoXCJsZW5ndGhcImluIGUpJiYhZS50eXBlKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGUsIG5vdCBgXCIrZStcImBcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUudmFsdWUpcmV0dXJuIGUudmFsdWU7aWYoMT09PShyPSh0PVwibGVuZ3RoXCJpbiBlP2U6ZS5jaGlsZHJlbikubGVuZ3RoKSYmXCJ2YWx1ZVwiaW4gdFswXSlyZXR1cm4gdFswXS52YWx1ZTtmb3IoaT1bXTtyLS07KWlbcl09bih0W3JdLG8pO3JldHVybiBpLmpvaW4obyl9fSw0NTA6ZnVuY3Rpb24obil7bi5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIG49W10sZT1bXSxhPXt9LGk9e30scj17fTtmdW5jdGlvbiB0KG4pe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuP25ldyBSZWdFeHAoXCJeXCIrbitcIiRcIixcImlcIik6bn1mdW5jdGlvbiBvKG4sZSl7cmV0dXJuIG49PT1lP2U6bj09PW4udG9Mb3dlckNhc2UoKT9lLnRvTG93ZXJDYXNlKCk6bj09PW4udG9VcHBlckNhc2UoKT9lLnRvVXBwZXJDYXNlKCk6blswXT09PW5bMF0udG9VcHBlckNhc2UoKT9lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyKDEpLnRvTG93ZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIE0obixlKXtyZXR1cm4gbi5yZXBsYWNlKC9cXCQoXFxkezEsMn0pL2csKGZ1bmN0aW9uKG4sYSl7cmV0dXJuIGVbYV18fFwiXCJ9KSl9ZnVuY3Rpb24gcyhuLGUpe3JldHVybiBuLnJlcGxhY2UoZVswXSwoZnVuY3Rpb24oYSxpKXt2YXIgcj1NKGVbMV0sYXJndW1lbnRzKTtyZXR1cm4gbyhcIlwiPT09YT9uW2ktMV06YSxyKX0pKX1mdW5jdGlvbiBsKG4sZSxpKXtpZighbi5sZW5ndGh8fGEuaGFzT3duUHJvcGVydHkobikpcmV0dXJuIGU7Zm9yKHZhciByPWkubGVuZ3RoO3ItLTspe3ZhciB0PWlbcl07aWYodFswXS50ZXN0KGUpKXJldHVybiBzKGUsdCl9cmV0dXJuIGV9ZnVuY3Rpb24gYyhuLGUsYSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPWkudG9Mb3dlckNhc2UoKTtyZXR1cm4gZS5oYXNPd25Qcm9wZXJ0eShyKT9vKGkscik6bi5oYXNPd25Qcm9wZXJ0eShyKT9vKGksbltyXSk6bChyLGksYSl9fWZ1bmN0aW9uIFMobixlLGEsaSl7cmV0dXJuIGZ1bmN0aW9uKGkpe3ZhciByPWkudG9Mb3dlckNhc2UoKTtyZXR1cm4hIWUuaGFzT3duUHJvcGVydHkocil8fCFuLmhhc093blByb3BlcnR5KHIpJiZsKHIscixhKT09PXJ9fWZ1bmN0aW9uIHUobixlLGEpe3JldHVybihhP2UrXCIgXCI6XCJcIikrKDE9PT1lP3Uuc2luZ3VsYXIobik6dS5wbHVyYWwobikpfXJldHVybiB1LnBsdXJhbD1jKHIsaSxuKSx1LmlzUGx1cmFsPVMocixpLG4pLHUuc2luZ3VsYXI9YyhpLHIsZSksdS5pc1Npbmd1bGFyPVMoaSxyLGUpLHUuYWRkUGx1cmFsUnVsZT1mdW5jdGlvbihlLGEpe24ucHVzaChbdChlKSxhXSl9LHUuYWRkU2luZ3VsYXJSdWxlPWZ1bmN0aW9uKG4sYSl7ZS5wdXNoKFt0KG4pLGFdKX0sdS5hZGRVbmNvdW50YWJsZVJ1bGU9ZnVuY3Rpb24obil7XCJzdHJpbmdcIiE9dHlwZW9mIG4/KHUuYWRkUGx1cmFsUnVsZShuLFwiJDBcIiksdS5hZGRTaW5ndWxhclJ1bGUobixcIiQwXCIpKTphW24udG9Mb3dlckNhc2UoKV09ITB9LHUuYWRkSXJyZWd1bGFyUnVsZT1mdW5jdGlvbihuLGUpe2U9ZS50b0xvd2VyQ2FzZSgpLG49bi50b0xvd2VyQ2FzZSgpLHJbbl09ZSxpW2VdPW59LFtbXCJJXCIsXCJ3ZVwiXSxbXCJtZVwiLFwidXNcIl0sW1wiaGVcIixcInRoZXlcIl0sW1wic2hlXCIsXCJ0aGV5XCJdLFtcInRoZW1cIixcInRoZW1cIl0sW1wibXlzZWxmXCIsXCJvdXJzZWx2ZXNcIl0sW1wieW91cnNlbGZcIixcInlvdXJzZWx2ZXNcIl0sW1wiaXRzZWxmXCIsXCJ0aGVtc2VsdmVzXCJdLFtcImhlcnNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1wiaGltc2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJ0aGVtc2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJpc1wiLFwiYXJlXCJdLFtcIndhc1wiLFwid2VyZVwiXSxbXCJoYXNcIixcImhhdmVcIl0sW1widGhpc1wiLFwidGhlc2VcIl0sW1widGhhdFwiLFwidGhvc2VcIl0sW1wiZWNob1wiLFwiZWNob2VzXCJdLFtcImRpbmdvXCIsXCJkaW5nb2VzXCJdLFtcInZvbGNhbm9cIixcInZvbGNhbm9lc1wiXSxbXCJ0b3JuYWRvXCIsXCJ0b3JuYWRvZXNcIl0sW1widG9ycGVkb1wiLFwidG9ycGVkb2VzXCJdLFtcImdlbnVzXCIsXCJnZW5lcmFcIl0sW1widmlzY3VzXCIsXCJ2aXNjZXJhXCJdLFtcInN0aWdtYVwiLFwic3RpZ21hdGFcIl0sW1wic3RvbWFcIixcInN0b21hdGFcIl0sW1wiZG9nbWFcIixcImRvZ21hdGFcIl0sW1wibGVtbWFcIixcImxlbW1hdGFcIl0sW1wic2NoZW1hXCIsXCJzY2hlbWF0YVwiXSxbXCJhbmF0aGVtYVwiLFwiYW5hdGhlbWF0YVwiXSxbXCJveFwiLFwib3hlblwiXSxbXCJheGVcIixcImF4ZXNcIl0sW1wiZGllXCIsXCJkaWNlXCJdLFtcInllc1wiLFwieWVzZXNcIl0sW1wiZm9vdFwiLFwiZmVldFwiXSxbXCJlYXZlXCIsXCJlYXZlc1wiXSxbXCJnb29zZVwiLFwiZ2Vlc2VcIl0sW1widG9vdGhcIixcInRlZXRoXCJdLFtcInF1aXpcIixcInF1aXp6ZXNcIl0sW1wiaHVtYW5cIixcImh1bWFuc1wiXSxbXCJwcm9vZlwiLFwicHJvb2ZzXCJdLFtcImNhcnZlXCIsXCJjYXJ2ZXNcIl0sW1widmFsdmVcIixcInZhbHZlc1wiXSxbXCJsb29leVwiLFwibG9vaWVzXCJdLFtcInRoaWVmXCIsXCJ0aGlldmVzXCJdLFtcImdyb292ZVwiLFwiZ3Jvb3Zlc1wiXSxbXCJwaWNrYXhlXCIsXCJwaWNrYXhlc1wiXSxbXCJwYXNzZXJieVwiLFwicGFzc2Vyc2J5XCJdXS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdS5hZGRJcnJlZ3VsYXJSdWxlKG5bMF0sblsxXSl9KSksW1svcz8kL2ksXCJzXCJdLFsvW15cXHUwMDAwLVxcdTAwN0ZdJC9pLFwiJDBcIl0sWy8oW15hZWlvdV1lc2UpJC9pLFwiJDFcIl0sWy8oYXh8dGVzdClpcyQvaSxcIiQxZXNcIl0sWy8oYWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8cmlzKSQvaSxcIiQxZXNcIl0sWy8oZVttbl11KXM/JC9pLFwiJDFzXCJdLFsvKFtebF1pYXN8W2FlaW91XWxhc3xbZWp6cl1hc3xbaXVdYW0pJC9pLFwiJDFcIl0sWy8oYWx1bW58c3lsbGFifHZpcnxyYWRpfG51Y2xlfGZ1bmd8Y2FjdHxzdGltdWx8dGVybWlufGJhY2lsbHxmb2N8dXRlcnxsb2N8c3RyYXQpKD86dXN8aSkkL2ksXCIkMWlcIl0sWy8oYWx1bW58YWxnfHZlcnRlYnIpKD86YXxhZSkkL2ksXCIkMWFlXCJdLFsvKHNlcmFwaHxjaGVydWIpKD86aW0pPyQvaSxcIiQxaW1cIl0sWy8oaGVyfGF0fGdyKW8kL2ksXCIkMW9lc1wiXSxbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxhdXRvbWF0fHF1b3IpKD86YXx1bSkkL2ksXCIkMWFcIl0sWy8oYXBoZWxpfGh5cGVyYmF0fHBlcmloZWxpfGFzeW5kZXR8bm91bWVufHBoZW5vbWVufGNyaXRlcml8b3JnYW58cHJvbGVnb21lbnxoZWRyfGF1dG9tYXQpKD86YXxvbikkL2ksXCIkMWFcIl0sWy9zaXMkL2ksXCJzZXNcIl0sWy8oPzooa25pfHdpfGxpKWZlfChhcnxsfGVhfGVvfG9hfGhvbylmKSQvaSxcIiQxJDJ2ZXNcIl0sWy8oW15hZWlvdXldfHF1KXkkL2ksXCIkMWllc1wiXSxbLyhbXmNoXVtpZW9dW2xuXSlleSQvaSxcIiQxaWVzXCJdLFsvKHh8Y2h8c3N8c2h8enopJC9pLFwiJDFlc1wiXSxbLyhtYXRyfGNvZHxtdXJ8c2lsfHZlcnR8aW5kfGFwcGVuZCkoPzppeHxleCkkL2ksXCIkMWljZXNcIl0sWy9cXGIoKD86dGl0KT9tfGwpKD86aWNlfG91c2UpJC9pLFwiJDFpY2VcIl0sWy8ocGUpKD86cnNvbnxvcGxlKSQvaSxcIiQxb3BsZVwiXSxbLyhjaGlsZCkoPzpyZW4pPyQvaSxcIiQxcmVuXCJdLFsvZWF1eCQvaSxcIiQwXCJdLFsvbVthZV1uJC9pLFwibWVuXCJdLFtcInRob3VcIixcInlvdVwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkUGx1cmFsUnVsZShuWzBdLG5bMV0pfSkpLFtbL3MkL2ksXCJcIl0sWy8oc3MpJC9pLFwiJDFcIl0sWy8od2l8a25pfCg/OmFmdGVyfGhhbGZ8aGlnaHxsb3d8bWlkfG5vbnxuaWdodHxbXlxcd118XilsaSl2ZXMkL2ksXCIkMWZlXCJdLFsvKGFyfCg/OndvfFthZV0pbHxbZW9dW2FvXSl2ZXMkL2ksXCIkMWZcIl0sWy9pZXMkL2ksXCJ5XCJdLFsvXFxiKFtwbF18em9tYnwoPzpuZWNrfGNyb3NzKT90fGNvbGx8ZmFlcnxmb29kfGdlbnxnb29ufGdyb3VwfGxhc3N8dGFsa3xnb2FsfGN1dClpZXMkL2ksXCIkMWllXCJdLFsvXFxiKG1vbnxzbWlsKWllcyQvaSxcIiQxZXlcIl0sWy9cXGIoKD86dGl0KT9tfGwpaWNlJC9pLFwiJDFvdXNlXCJdLFsvKHNlcmFwaHxjaGVydWIpaW0kL2ksXCIkMVwiXSxbLyh4fGNofHNzfHNofHp6fHR0b3xnb3xjaG98YWxpYXN8W15hb3VddXN8dFtsbV1hc3xnYXN8KD86aGVyfGF0fGdyKW98W2FlaW91XXJpcykoPzplcyk/JC9pLFwiJDFcIl0sWy8oYW5hbHl8ZGlhZ25vfHBhcmVudGhlfHByb2dub3xzeW5vcHx0aGV8ZW1waGF8Y3JpfG5lKSg/OnNpc3xzZXMpJC9pLFwiJDFzaXNcIl0sWy8obW92aWV8dHdlbHZlfGFidXNlfGVbbW5ddSlzJC9pLFwiJDFcIl0sWy8odGVzdCkoPzppc3xlcykkL2ksXCIkMWlzXCJdLFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLFwiJDF1c1wiXSxbLyhhZ2VuZHxhZGRlbmR8bWlsbGVubml8ZGF0fGV4dHJlbXxiYWN0ZXJpfGRlc2lkZXJhdHxzdHJhdHxjYW5kZWxhYnJ8ZXJyYXR8b3Z8c3ltcG9zaXxjdXJyaWN1bHxxdW9yKWEkL2ksXCIkMXVtXCJdLFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KWEkL2ksXCIkMW9uXCJdLFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKWFlJC9pLFwiJDFhXCJdLFsvKGNvZHxtdXJ8c2lsfHZlcnR8aW5kKWljZXMkL2ksXCIkMWV4XCJdLFsvKG1hdHJ8YXBwZW5kKWljZXMkL2ksXCIkMWl4XCJdLFsvKHBlKShyc29ufG9wbGUpJC9pLFwiJDFyc29uXCJdLFsvKGNoaWxkKXJlbiQvaSxcIiQxXCJdLFsvKGVhdSl4PyQvaSxcIiQxXCJdLFsvbWVuJC9pLFwibWFuXCJdXS5mb3JFYWNoKChmdW5jdGlvbihuKXtyZXR1cm4gdS5hZGRTaW5ndWxhclJ1bGUoblswXSxuWzFdKX0pKSxbXCJhZHVsdGhvb2RcIixcImFkdmljZVwiLFwiYWdlbmRhXCIsXCJhaWRcIixcImFpcmNyYWZ0XCIsXCJhbGNvaG9sXCIsXCJhbW1vXCIsXCJhbmFseXRpY3NcIixcImFuaW1lXCIsXCJhdGhsZXRpY3NcIixcImF1ZGlvXCIsXCJiaXNvblwiLFwiYmxvb2RcIixcImJyZWFtXCIsXCJidWZmYWxvXCIsXCJidXR0ZXJcIixcImNhcnBcIixcImNhc2hcIixcImNoYXNzaXNcIixcImNoZXNzXCIsXCJjbG90aGluZ1wiLFwiY29kXCIsXCJjb21tZXJjZVwiLFwiY29vcGVyYXRpb25cIixcImNvcnBzXCIsXCJkZWJyaXNcIixcImRpYWJldGVzXCIsXCJkaWdlc3Rpb25cIixcImVsa1wiLFwiZW5lcmd5XCIsXCJlcXVpcG1lbnRcIixcImV4Y3JldGlvblwiLFwiZXhwZXJ0aXNlXCIsXCJmaXJtd2FyZVwiLFwiZmxvdW5kZXJcIixcImZ1blwiLFwiZ2FsbG93c1wiLFwiZ2FyYmFnZVwiLFwiZ3JhZmZpdGlcIixcImhhcmR3YXJlXCIsXCJoZWFkcXVhcnRlcnNcIixcImhlYWx0aFwiLFwiaGVycGVzXCIsXCJoaWdoamlua3NcIixcImhvbWV3b3JrXCIsXCJob3VzZXdvcmtcIixcImluZm9ybWF0aW9uXCIsXCJqZWFuc1wiLFwianVzdGljZVwiLFwia3Vkb3NcIixcImxhYm91clwiLFwibGl0ZXJhdHVyZVwiLFwibWFjaGluZXJ5XCIsXCJtYWNrZXJlbFwiLFwibWFpbFwiLFwibWVkaWFcIixcIm1ld3NcIixcIm1vb3NlXCIsXCJtdXNpY1wiLFwibXVkXCIsXCJtYW5nYVwiLFwibmV3c1wiLFwib25seVwiLFwicGVyc29ubmVsXCIsXCJwaWtlXCIsXCJwbGFua3RvblwiLFwicGxpZXJzXCIsXCJwb2xpY2VcIixcInBvbGx1dGlvblwiLFwicHJlbWlzZXNcIixcInJhaW5cIixcInJlc2VhcmNoXCIsXCJyaWNlXCIsXCJzYWxtb25cIixcInNjaXNzb3JzXCIsXCJzZXJpZXNcIixcInNld2FnZVwiLFwic2hhbWJsZXNcIixcInNocmltcFwiLFwic29mdHdhcmVcIixcInNwZWNpZXNcIixcInN0YWZmXCIsXCJzd2luZVwiLFwidGVubmlzXCIsXCJ0cmFmZmljXCIsXCJ0cmFuc3BvcnRhdGlvblwiLFwidHJvdXRcIixcInR1bmFcIixcIndlYWx0aFwiLFwid2VsZmFyZVwiLFwid2hpdGluZ1wiLFwid2lsZGViZWVzdFwiLFwid2lsZGxpZmVcIixcInlvdVwiLC9wb2tbZcOpXW1vbiQvaSwvW15hZWlvdV1lc2UkL2ksL2RlZXIkL2ksL2Zpc2gkL2ksL21lYXNsZXMkL2ksL29baXVdcyQvaSwvcG94JC9pLC9zaGVlcCQvaV0uZm9yRWFjaCh1LmFkZFVuY291bnRhYmxlUnVsZSksdX0oKX0sNzAzOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDQxNCk7ZnVuY3Rpb24gcigpe31mdW5jdGlvbiB0KCl7fXQucmVzZXRXYXJuaW5nQ2FjaGU9cixuLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sZSxhLHIsdCxvKXtpZihvIT09aSl7dmFyIE09bmV3IEVycm9yKFwiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlc1wiKTt0aHJvdyBNLm5hbWU9XCJJbnZhcmlhbnQgVmlvbGF0aW9uXCIsTX19ZnVuY3Rpb24gZSgpe3JldHVybiBufW4uaXNSZXF1aXJlZD1uO3ZhciBhPXthcnJheTpuLGJpZ2ludDpuLGJvb2w6bixmdW5jOm4sbnVtYmVyOm4sb2JqZWN0Om4sc3RyaW5nOm4sc3ltYm9sOm4sYW55Om4sYXJyYXlPZjplLGVsZW1lbnQ6bixlbGVtZW50VHlwZTpuLGluc3RhbmNlT2Y6ZSxub2RlOm4sb2JqZWN0T2Y6ZSxvbmVPZjplLG9uZU9mVHlwZTplLHNoYXBlOmUsZXhhY3Q6ZSxjaGVja1Byb3BUeXBlczp0LHJlc2V0V2FybmluZ0NhY2hlOnJ9O3JldHVybiBhLlByb3BUeXBlcz1hLGF9fSw2OTc6KG4sZSxhKT0+e24uZXhwb3J0cz1hKDcwMykoKX0sNDE0Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9XCJTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRFwifSwzNzk6bj0+e1widXNlIHN0cmljdFwiO3ZhciBlPVtdO2Z1bmN0aW9uIGEobil7Zm9yKHZhciBhPS0xLGk9MDtpPGUubGVuZ3RoO2krKylpZihlW2ldLmlkZW50aWZpZXI9PT1uKXthPWk7YnJlYWt9cmV0dXJuIGF9ZnVuY3Rpb24gaShuLGkpe2Zvcih2YXIgdD17fSxvPVtdLE09MDtNPG4ubGVuZ3RoO00rKyl7dmFyIHM9bltNXSxsPWkuYmFzZT9zWzBdK2kuYmFzZTpzWzBdLGM9dFtsXXx8MCxTPVwiXCIuY29uY2F0KGwsXCIgXCIpLmNvbmNhdChjKTt0W2xdPWMrMTt2YXIgdT1hKFMpLGQ9e2NzczpzWzFdLG1lZGlhOnNbMl0sc291cmNlTWFwOnNbM10sc3VwcG9ydHM6c1s0XSxsYXllcjpzWzVdfTtpZigtMSE9PXUpZVt1XS5yZWZlcmVuY2VzKyssZVt1XS51cGRhdGVyKGQpO2Vsc2V7dmFyIG09cihkLGkpO2kuYnlJbmRleD1NLGUuc3BsaWNlKE0sMCx7aWRlbnRpZmllcjpTLHVwZGF0ZXI6bSxyZWZlcmVuY2VzOjF9KX1vLnB1c2goUyl9cmV0dXJuIG99ZnVuY3Rpb24gcihuLGUpe3ZhciBhPWUuZG9tQVBJKGUpO3JldHVybiBhLnVwZGF0ZShuKSxmdW5jdGlvbihlKXtpZihlKXtpZihlLmNzcz09PW4uY3NzJiZlLm1lZGlhPT09bi5tZWRpYSYmZS5zb3VyY2VNYXA9PT1uLnNvdXJjZU1hcCYmZS5zdXBwb3J0cz09PW4uc3VwcG9ydHMmJmUubGF5ZXI9PT1uLmxheWVyKXJldHVybjthLnVwZGF0ZShuPWUpfWVsc2UgYS5yZW1vdmUoKX19bi5leHBvcnRzPWZ1bmN0aW9uKG4scil7dmFyIHQ9aShuPW58fFtdLHI9cnx8e30pO3JldHVybiBmdW5jdGlvbihuKXtuPW58fFtdO2Zvcih2YXIgbz0wO288dC5sZW5ndGg7bysrKXt2YXIgTT1hKHRbb10pO2VbTV0ucmVmZXJlbmNlcy0tfWZvcih2YXIgcz1pKG4sciksbD0wO2w8dC5sZW5ndGg7bCsrKXt2YXIgYz1hKHRbbF0pOzA9PT1lW2NdLnJlZmVyZW5jZXMmJihlW2NdLnVwZGF0ZXIoKSxlLnNwbGljZShjLDEpKX10PXN9fX0sNTY5Om49PntcInVzZSBzdHJpY3RcIjt2YXIgZT17fTtuLmV4cG9ydHM9ZnVuY3Rpb24obixhKXt2YXIgaT1mdW5jdGlvbihuKXtpZih2b2lkIDA9PT1lW25dKXt2YXIgYT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pO2lmKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCYmYSBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCl0cnl7YT1hLmNvbnRlbnREb2N1bWVudC5oZWFkfWNhdGNoKG4pe2E9bnVsbH1lW25dPWF9cmV0dXJuIGVbbl19KG4pO2lmKCFpKXRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7aS5hcHBlbmRDaGlsZChhKX19LDIxNjpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtyZXR1cm4gbi5zZXRBdHRyaWJ1dGVzKGUsbi5hdHRyaWJ1dGVzKSxuLmluc2VydChlLG4ub3B0aW9ucyksZX19LDU2NToobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPWEubmM7ZSYmbi5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLGUpfX0sNzk1Om49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGU9bi5pbnNlcnRTdHlsZUVsZW1lbnQobik7cmV0dXJue3VwZGF0ZTpmdW5jdGlvbihhKXshZnVuY3Rpb24obixlLGEpe3ZhciBpPVwiXCI7YS5zdXBwb3J0cyYmKGkrPVwiQHN1cHBvcnRzIChcIi5jb25jYXQoYS5zdXBwb3J0cyxcIikge1wiKSksYS5tZWRpYSYmKGkrPVwiQG1lZGlhIFwiLmNvbmNhdChhLm1lZGlhLFwiIHtcIikpO3ZhciByPXZvaWQgMCE9PWEubGF5ZXI7ciYmKGkrPVwiQGxheWVyXCIuY29uY2F0KGEubGF5ZXIubGVuZ3RoPjA/XCIgXCIuY29uY2F0KGEubGF5ZXIpOlwiXCIsXCIge1wiKSksaSs9YS5jc3MsciYmKGkrPVwifVwiKSxhLm1lZGlhJiYoaSs9XCJ9XCIpLGEuc3VwcG9ydHMmJihpKz1cIn1cIik7dmFyIHQ9YS5zb3VyY2VNYXA7dCYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIGJ0b2EmJihpKz1cIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHQpKSkpLFwiICovXCIpKSxlLnN0eWxlVGFnVHJhbnNmb3JtKGksbixlLm9wdGlvbnMpfShlLG4sYSl9LHJlbW92ZTpmdW5jdGlvbigpeyFmdW5jdGlvbihuKXtpZihudWxsPT09bi5wYXJlbnROb2RlKXJldHVybiExO24ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChuKX0oZSl9fX19LDU4OTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PW47ZWxzZXtmb3IoO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2UuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobikpfX19LDc2NjoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSgxMTQpO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPWUmJmUuY2hpbGRyZW47aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBjaGlsZHJlbiBpbiBgcGFyZW50YCBmb3IgYG1vZGlmaWVyYFwiKTtpKGEsbixlKX19KGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlLGEpe3JldHVybiBuKGUsYSx0aGlzKX19KG4pKX19LDIwOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPS0xLGk9ZSYmZS5jaGlsZHJlbjtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNoaWxkcmVuIGluIGBwYXJlbnRgIGZvciBgdmlzaXRvcmBcIik7Zm9yKDsrK2EgaW4gaTspbihpW2FdLGEsZSl9fX0sNzYxOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9SlNPTi5wYXJzZSgne1wiMTA1XCI6XCJpXCIsXCIxOTJcIjpcIkFcIixcIjE5M1wiOlwiQVwiLFwiMTk0XCI6XCJBXCIsXCIxOTVcIjpcIkFcIixcIjE5NlwiOlwiQVwiLFwiMTk3XCI6XCJBXCIsXCIxOTlcIjpcIkNcIixcIjIwMFwiOlwiRVwiLFwiMjAxXCI6XCJFXCIsXCIyMDJcIjpcIkVcIixcIjIwM1wiOlwiRVwiLFwiMjA0XCI6XCJJXCIsXCIyMDVcIjpcIklcIixcIjIwNlwiOlwiSVwiLFwiMjA3XCI6XCJJXCIsXCIyMDlcIjpcIk5cIixcIjIxMFwiOlwiT1wiLFwiMjExXCI6XCJPXCIsXCIyMTJcIjpcIk9cIixcIjIxM1wiOlwiT1wiLFwiMjE0XCI6XCJPXCIsXCIyMTZcIjpcIk9cIixcIjIxN1wiOlwiVVwiLFwiMjE4XCI6XCJVXCIsXCIyMTlcIjpcIlVcIixcIjIyMFwiOlwiVVwiLFwiMjIxXCI6XCJZXCIsXCIyMjRcIjpcImFcIixcIjIyNVwiOlwiYVwiLFwiMjI2XCI6XCJhXCIsXCIyMjdcIjpcImFcIixcIjIyOFwiOlwiYVwiLFwiMjI5XCI6XCJhXCIsXCIyMzFcIjpcImNcIixcIjIzMlwiOlwiZVwiLFwiMjMzXCI6XCJlXCIsXCIyMzRcIjpcImVcIixcIjIzNVwiOlwiZVwiLFwiMjM2XCI6XCJpXCIsXCIyMzdcIjpcImlcIixcIjIzOFwiOlwiaVwiLFwiMjM5XCI6XCJpXCIsXCIyNDFcIjpcIm5cIixcIjI0MlwiOlwib1wiLFwiMjQzXCI6XCJvXCIsXCIyNDRcIjpcIm9cIixcIjI0NVwiOlwib1wiLFwiMjQ2XCI6XCJvXCIsXCIyNDhcIjpcIm9cIixcIjI0OVwiOlwidVwiLFwiMjUwXCI6XCJ1XCIsXCIyNTFcIjpcInVcIixcIjI1MlwiOlwidVwiLFwiMjUzXCI6XCJ5XCIsXCIyNTVcIjpcInlcIixcIjI1NlwiOlwiQVwiLFwiMjU3XCI6XCJhXCIsXCIyNThcIjpcIkFcIixcIjI1OVwiOlwiYVwiLFwiMjYwXCI6XCJBXCIsXCIyNjFcIjpcImFcIixcIjI2MlwiOlwiQ1wiLFwiMjYzXCI6XCJjXCIsXCIyNjRcIjpcIkNcIixcIjI2NVwiOlwiY1wiLFwiMjY2XCI6XCJDXCIsXCIyNjdcIjpcImNcIixcIjI2OFwiOlwiQ1wiLFwiMjY5XCI6XCJjXCIsXCIyNzBcIjpcIkRcIixcIjI3MVwiOlwiZFwiLFwiMjcyXCI6XCJEXCIsXCIyNzNcIjpcImRcIixcIjI3NFwiOlwiRVwiLFwiMjc1XCI6XCJlXCIsXCIyNzZcIjpcIkVcIixcIjI3N1wiOlwiZVwiLFwiMjc4XCI6XCJFXCIsXCIyNzlcIjpcImVcIixcIjI4MFwiOlwiRVwiLFwiMjgxXCI6XCJlXCIsXCIyODJcIjpcIkVcIixcIjI4M1wiOlwiZVwiLFwiMjg0XCI6XCJHXCIsXCIyODVcIjpcImdcIixcIjI4NlwiOlwiR1wiLFwiMjg3XCI6XCJnXCIsXCIyODhcIjpcIkdcIixcIjI4OVwiOlwiZ1wiLFwiMjkwXCI6XCJHXCIsXCIyOTFcIjpcImdcIixcIjI5MlwiOlwiSFwiLFwiMjkzXCI6XCJoXCIsXCIyOTRcIjpcIkhcIixcIjI5NVwiOlwiaFwiLFwiMjk2XCI6XCJJXCIsXCIyOTdcIjpcImlcIixcIjI5OFwiOlwiSVwiLFwiMjk5XCI6XCJpXCIsXCIzMDBcIjpcIklcIixcIjMwMVwiOlwiaVwiLFwiMzAyXCI6XCJJXCIsXCIzMDNcIjpcImlcIixcIjMwNFwiOlwiSVwiLFwiMzA4XCI6XCJKXCIsXCIzMDlcIjpcImpcIixcIjMxMFwiOlwiS1wiLFwiMzExXCI6XCJrXCIsXCIzMTNcIjpcIkxcIixcIjMxNFwiOlwibFwiLFwiMzE1XCI6XCJMXCIsXCIzMTZcIjpcImxcIixcIjMxN1wiOlwiTFwiLFwiMzE4XCI6XCJsXCIsXCIzMTlcIjpcIkxcIixcIjMyMFwiOlwibFwiLFwiMzIxXCI6XCJMXCIsXCIzMjJcIjpcImxcIixcIjMyM1wiOlwiTlwiLFwiMzI0XCI6XCJuXCIsXCIzMjVcIjpcIk5cIixcIjMyNlwiOlwiblwiLFwiMzI3XCI6XCJOXCIsXCIzMjhcIjpcIm5cIixcIjMzMlwiOlwiT1wiLFwiMzMzXCI6XCJvXCIsXCIzMzRcIjpcIk9cIixcIjMzNVwiOlwib1wiLFwiMzM2XCI6XCJPXCIsXCIzMzdcIjpcIm9cIixcIjMzOFwiOlwiT1wiLFwiMzM5XCI6XCJvXCIsXCIzNDBcIjpcIlJcIixcIjM0MVwiOlwiclwiLFwiMzQyXCI6XCJSXCIsXCIzNDNcIjpcInJcIixcIjM0NFwiOlwiUlwiLFwiMzQ1XCI6XCJyXCIsXCIzNDZcIjpcIlNcIixcIjM0N1wiOlwic1wiLFwiMzQ4XCI6XCJTXCIsXCIzNDlcIjpcInNcIixcIjM1MFwiOlwiU1wiLFwiMzUxXCI6XCJzXCIsXCIzNTJcIjpcIlNcIixcIjM1M1wiOlwic1wiLFwiMzU0XCI6XCJUXCIsXCIzNTVcIjpcInRcIixcIjM1NlwiOlwiVFwiLFwiMzU3XCI6XCJ0XCIsXCIzNThcIjpcIlRcIixcIjM1OVwiOlwidFwiLFwiMzYwXCI6XCJVXCIsXCIzNjFcIjpcInVcIixcIjM2MlwiOlwiVVwiLFwiMzYzXCI6XCJ1XCIsXCIzNjRcIjpcIlVcIixcIjM2NVwiOlwidVwiLFwiMzY2XCI6XCJVXCIsXCIzNjdcIjpcInVcIixcIjM2OFwiOlwiVVwiLFwiMzY5XCI6XCJ1XCIsXCIzNzBcIjpcIlVcIixcIjM3MVwiOlwidVwiLFwiMzcyXCI6XCJXXCIsXCIzNzNcIjpcIndcIixcIjM3NFwiOlwiWVwiLFwiMzc1XCI6XCJ5XCIsXCIzNzZcIjpcIllcIixcIjM3N1wiOlwiWlwiLFwiMzc4XCI6XCJ6XCIsXCIzNzlcIjpcIlpcIixcIjM4MFwiOlwielwiLFwiMzgxXCI6XCJaXCIsXCIzODJcIjpcInpcIixcIjM4NFwiOlwiYlwiLFwiMzg1XCI6XCJCXCIsXCIzODZcIjpcIkJcIixcIjM4N1wiOlwiYlwiLFwiMzkwXCI6XCJPXCIsXCIzOTFcIjpcIkNcIixcIjM5MlwiOlwiY1wiLFwiMzkzXCI6XCJEXCIsXCIzOTRcIjpcIkRcIixcIjM5NVwiOlwiRFwiLFwiMzk2XCI6XCJkXCIsXCIzOThcIjpcIkVcIixcIjQwMFwiOlwiRVwiLFwiNDAxXCI6XCJGXCIsXCI0MDJcIjpcImZcIixcIjQwM1wiOlwiR1wiLFwiNDA3XCI6XCJJXCIsXCI0MDhcIjpcIktcIixcIjQwOVwiOlwia1wiLFwiNDEwXCI6XCJsXCIsXCI0MTJcIjpcIk1cIixcIjQxM1wiOlwiTlwiLFwiNDE0XCI6XCJuXCIsXCI0MTVcIjpcIk9cIixcIjQxNlwiOlwiT1wiLFwiNDE3XCI6XCJvXCIsXCI0MjBcIjpcIlBcIixcIjQyMVwiOlwicFwiLFwiNDIyXCI6XCJSXCIsXCI0MjdcIjpcInRcIixcIjQyOFwiOlwiVFwiLFwiNDI5XCI6XCJ0XCIsXCI0MzBcIjpcIlRcIixcIjQzMVwiOlwiVVwiLFwiNDMyXCI6XCJ1XCIsXCI0MzRcIjpcIlZcIixcIjQzNVwiOlwiWVwiLFwiNDM2XCI6XCJ5XCIsXCI0MzdcIjpcIlpcIixcIjQzOFwiOlwielwiLFwiNDYxXCI6XCJBXCIsXCI0NjJcIjpcImFcIixcIjQ2M1wiOlwiSVwiLFwiNDY0XCI6XCJpXCIsXCI0NjVcIjpcIk9cIixcIjQ2NlwiOlwib1wiLFwiNDY3XCI6XCJVXCIsXCI0NjhcIjpcInVcIixcIjQ3N1wiOlwiZVwiLFwiNDg0XCI6XCJHXCIsXCI0ODVcIjpcImdcIixcIjQ4NlwiOlwiR1wiLFwiNDg3XCI6XCJnXCIsXCI0ODhcIjpcIktcIixcIjQ4OVwiOlwia1wiLFwiNDkwXCI6XCJPXCIsXCI0OTFcIjpcIm9cIixcIjUwMFwiOlwiR1wiLFwiNTAxXCI6XCJnXCIsXCI1MDRcIjpcIk5cIixcIjUwNVwiOlwiblwiLFwiNTEyXCI6XCJBXCIsXCI1MTNcIjpcImFcIixcIjUxNFwiOlwiQVwiLFwiNTE1XCI6XCJhXCIsXCI1MTZcIjpcIkVcIixcIjUxN1wiOlwiZVwiLFwiNTE4XCI6XCJFXCIsXCI1MTlcIjpcImVcIixcIjUyMFwiOlwiSVwiLFwiNTIxXCI6XCJpXCIsXCI1MjJcIjpcIklcIixcIjUyM1wiOlwiaVwiLFwiNTI0XCI6XCJPXCIsXCI1MjVcIjpcIm9cIixcIjUyNlwiOlwiT1wiLFwiNTI3XCI6XCJvXCIsXCI1MjhcIjpcIlJcIixcIjUyOVwiOlwiclwiLFwiNTMwXCI6XCJSXCIsXCI1MzFcIjpcInJcIixcIjUzMlwiOlwiVVwiLFwiNTMzXCI6XCJ1XCIsXCI1MzRcIjpcIlVcIixcIjUzNVwiOlwidVwiLFwiNTM2XCI6XCJTXCIsXCI1MzdcIjpcInNcIixcIjUzOFwiOlwiVFwiLFwiNTM5XCI6XCJ0XCIsXCI1NDJcIjpcIkhcIixcIjU0M1wiOlwiaFwiLFwiNTQ0XCI6XCJOXCIsXCI1NDVcIjpcImRcIixcIjU0OFwiOlwiWlwiLFwiNTQ5XCI6XCJ6XCIsXCI1NTBcIjpcIkFcIixcIjU1MVwiOlwiYVwiLFwiNTUyXCI6XCJFXCIsXCI1NTNcIjpcImVcIixcIjU1OFwiOlwiT1wiLFwiNTU5XCI6XCJvXCIsXCI1NjJcIjpcIllcIixcIjU2M1wiOlwieVwiLFwiNTY0XCI6XCJsXCIsXCI1NjVcIjpcIm5cIixcIjU2NlwiOlwidFwiLFwiNTY3XCI6XCJqXCIsXCI1NzBcIjpcIkFcIixcIjU3MVwiOlwiQ1wiLFwiNTcyXCI6XCJjXCIsXCI1NzNcIjpcIkxcIixcIjU3NFwiOlwiVFwiLFwiNTc1XCI6XCJzXCIsXCI1NzZcIjpcInpcIixcIjU3OVwiOlwiQlwiLFwiNTgwXCI6XCJVXCIsXCI1ODFcIjpcIlZcIixcIjU4MlwiOlwiRVwiLFwiNTgzXCI6XCJlXCIsXCI1ODRcIjpcIkpcIixcIjU4NVwiOlwialwiLFwiNTg2XCI6XCJRXCIsXCI1ODdcIjpcInFcIixcIjU4OFwiOlwiUlwiLFwiNTg5XCI6XCJyXCIsXCI1OTBcIjpcIllcIixcIjU5MVwiOlwieVwiLFwiNTkyXCI6XCJhXCIsXCI1OTNcIjpcImFcIixcIjU5NVwiOlwiYlwiLFwiNTk2XCI6XCJvXCIsXCI1OTdcIjpcImNcIixcIjU5OFwiOlwiZFwiLFwiNTk5XCI6XCJkXCIsXCI2MDBcIjpcImVcIixcIjYwM1wiOlwiZVwiLFwiNjA0XCI6XCJlXCIsXCI2MDVcIjpcImVcIixcIjYwNlwiOlwiZVwiLFwiNjA3XCI6XCJqXCIsXCI2MDhcIjpcImdcIixcIjYwOVwiOlwiZ1wiLFwiNjEwXCI6XCJnXCIsXCI2MTNcIjpcImhcIixcIjYxNFwiOlwiaFwiLFwiNjE2XCI6XCJpXCIsXCI2MThcIjpcImlcIixcIjYxOVwiOlwibFwiLFwiNjIwXCI6XCJsXCIsXCI2MjFcIjpcImxcIixcIjYyM1wiOlwibVwiLFwiNjI0XCI6XCJtXCIsXCI2MjVcIjpcIm1cIixcIjYyNlwiOlwiblwiLFwiNjI3XCI6XCJuXCIsXCI2MjhcIjpcIm5cIixcIjYyOVwiOlwib1wiLFwiNjMzXCI6XCJyXCIsXCI2MzRcIjpcInJcIixcIjYzNVwiOlwiclwiLFwiNjM2XCI6XCJyXCIsXCI2MzdcIjpcInJcIixcIjYzOFwiOlwiclwiLFwiNjM5XCI6XCJyXCIsXCI2NDBcIjpcInJcIixcIjY0MVwiOlwiclwiLFwiNjQyXCI6XCJzXCIsXCI2NDdcIjpcInRcIixcIjY0OFwiOlwidFwiLFwiNjQ5XCI6XCJ1XCIsXCI2NTFcIjpcInZcIixcIjY1MlwiOlwidlwiLFwiNjUzXCI6XCJ3XCIsXCI2NTRcIjpcInlcIixcIjY1NVwiOlwieVwiLFwiNjU2XCI6XCJ6XCIsXCI2NTdcIjpcInpcIixcIjY2M1wiOlwiY1wiLFwiNjY1XCI6XCJiXCIsXCI2NjZcIjpcImVcIixcIjY2N1wiOlwiZ1wiLFwiNjY4XCI6XCJoXCIsXCI2NjlcIjpcImpcIixcIjY3MFwiOlwia1wiLFwiNjcxXCI6XCJsXCIsXCI2NzJcIjpcInFcIixcIjY4NlwiOlwiaFwiLFwiNjg4XCI6XCJoXCIsXCI2OTBcIjpcImpcIixcIjY5MVwiOlwiclwiLFwiNjkyXCI6XCJyXCIsXCI2OTRcIjpcInJcIixcIjY5NVwiOlwid1wiLFwiNjk2XCI6XCJ5XCIsXCI3MzdcIjpcImxcIixcIjczOFwiOlwic1wiLFwiNzM5XCI6XCJ4XCIsXCI3ODBcIjpcInZcIixcIjgyOVwiOlwieFwiLFwiODUxXCI6XCJ4XCIsXCI4NjdcIjpcImFcIixcIjg2OFwiOlwiZVwiLFwiODY5XCI6XCJpXCIsXCI4NzBcIjpcIm9cIixcIjg3MVwiOlwidVwiLFwiODcyXCI6XCJjXCIsXCI4NzNcIjpcImRcIixcIjg3NFwiOlwiaFwiLFwiODc1XCI6XCJtXCIsXCI4NzZcIjpcInJcIixcIjg3N1wiOlwidFwiLFwiODc4XCI6XCJ2XCIsXCI4NzlcIjpcInhcIixcIjc0MjRcIjpcImFcIixcIjc0MjdcIjpcImJcIixcIjc0MjhcIjpcImNcIixcIjc0MjlcIjpcImRcIixcIjc0MzFcIjpcImVcIixcIjc0MzJcIjpcImVcIixcIjc0MzNcIjpcImlcIixcIjc0MzRcIjpcImpcIixcIjc0MzVcIjpcImtcIixcIjc0MzZcIjpcImxcIixcIjc0MzdcIjpcIm1cIixcIjc0MzhcIjpcIm5cIixcIjc0MzlcIjpcIm9cIixcIjc0NDBcIjpcIm9cIixcIjc0NDFcIjpcIm9cIixcIjc0NDJcIjpcIm9cIixcIjc0NDNcIjpcIm9cIixcIjc0NDZcIjpcIm9cIixcIjc0NDdcIjpcIm9cIixcIjc0NDhcIjpcInBcIixcIjc0NDlcIjpcInJcIixcIjc0NTBcIjpcInJcIixcIjc0NTFcIjpcInRcIixcIjc0NTJcIjpcInVcIixcIjc0NTNcIjpcInVcIixcIjc0NTRcIjpcInVcIixcIjc0NTVcIjpcIm1cIixcIjc0NTZcIjpcInZcIixcIjc0NTdcIjpcIndcIixcIjc0NThcIjpcInpcIixcIjc1MjJcIjpcImlcIixcIjc1MjNcIjpcInJcIixcIjc1MjRcIjpcInVcIixcIjc1MjVcIjpcInZcIixcIjc2ODBcIjpcIkFcIixcIjc2ODFcIjpcImFcIixcIjc2ODJcIjpcIkJcIixcIjc2ODNcIjpcImJcIixcIjc2ODRcIjpcIkJcIixcIjc2ODVcIjpcImJcIixcIjc2ODZcIjpcIkJcIixcIjc2ODdcIjpcImJcIixcIjc2OTBcIjpcIkRcIixcIjc2OTFcIjpcImRcIixcIjc2OTJcIjpcIkRcIixcIjc2OTNcIjpcImRcIixcIjc2OTRcIjpcIkRcIixcIjc2OTVcIjpcImRcIixcIjc2OTZcIjpcIkRcIixcIjc2OTdcIjpcImRcIixcIjc2OThcIjpcIkRcIixcIjc2OTlcIjpcImRcIixcIjc3MDRcIjpcIkVcIixcIjc3MDVcIjpcImVcIixcIjc3MDZcIjpcIkVcIixcIjc3MDdcIjpcImVcIixcIjc3MTBcIjpcIkZcIixcIjc3MTFcIjpcImZcIixcIjc3MTJcIjpcIkdcIixcIjc3MTNcIjpcImdcIixcIjc3MTRcIjpcIkhcIixcIjc3MTVcIjpcImhcIixcIjc3MTZcIjpcIkhcIixcIjc3MTdcIjpcImhcIixcIjc3MThcIjpcIkhcIixcIjc3MTlcIjpcImhcIixcIjc3MjBcIjpcIkhcIixcIjc3MjFcIjpcImhcIixcIjc3MjJcIjpcIkhcIixcIjc3MjNcIjpcImhcIixcIjc3MjRcIjpcIklcIixcIjc3MjVcIjpcImlcIixcIjc3MjhcIjpcIktcIixcIjc3MjlcIjpcImtcIixcIjc3MzBcIjpcIktcIixcIjc3MzFcIjpcImtcIixcIjc3MzJcIjpcIktcIixcIjc3MzNcIjpcImtcIixcIjc3MzRcIjpcIkxcIixcIjc3MzVcIjpcImxcIixcIjc3MzhcIjpcIkxcIixcIjc3MzlcIjpcImxcIixcIjc3NDBcIjpcIkxcIixcIjc3NDFcIjpcImxcIixcIjc3NDJcIjpcIk1cIixcIjc3NDNcIjpcIm1cIixcIjc3NDRcIjpcIk1cIixcIjc3NDVcIjpcIm1cIixcIjc3NDZcIjpcIk1cIixcIjc3NDdcIjpcIm1cIixcIjc3NDhcIjpcIk5cIixcIjc3NDlcIjpcIm5cIixcIjc3NTBcIjpcIk5cIixcIjc3NTFcIjpcIm5cIixcIjc3NTJcIjpcIk5cIixcIjc3NTNcIjpcIm5cIixcIjc3NTRcIjpcIk5cIixcIjc3NTVcIjpcIm5cIixcIjc3NjRcIjpcIlBcIixcIjc3NjVcIjpcInBcIixcIjc3NjZcIjpcIlBcIixcIjc3NjdcIjpcInBcIixcIjc3NjhcIjpcIlJcIixcIjc3NjlcIjpcInJcIixcIjc3NzBcIjpcIlJcIixcIjc3NzFcIjpcInJcIixcIjc3NzRcIjpcIlJcIixcIjc3NzVcIjpcInJcIixcIjc3NzZcIjpcIlNcIixcIjc3NzdcIjpcInNcIixcIjc3NzhcIjpcIlNcIixcIjc3NzlcIjpcInNcIixcIjc3ODZcIjpcIlRcIixcIjc3ODdcIjpcInRcIixcIjc3ODhcIjpcIlRcIixcIjc3ODlcIjpcInRcIixcIjc3OTBcIjpcIlRcIixcIjc3OTFcIjpcInRcIixcIjc3OTJcIjpcIlRcIixcIjc3OTNcIjpcInRcIixcIjc3OTRcIjpcIlVcIixcIjc3OTVcIjpcInVcIixcIjc3OTZcIjpcIlVcIixcIjc3OTdcIjpcInVcIixcIjc3OThcIjpcIlVcIixcIjc3OTlcIjpcInVcIixcIjc4MDRcIjpcIlZcIixcIjc4MDVcIjpcInZcIixcIjc4MDZcIjpcIlZcIixcIjc4MDdcIjpcInZcIixcIjc4MDhcIjpcIldcIixcIjc4MDlcIjpcIndcIixcIjc4MTBcIjpcIldcIixcIjc4MTFcIjpcIndcIixcIjc4MTJcIjpcIldcIixcIjc4MTNcIjpcIndcIixcIjc4MTRcIjpcIldcIixcIjc4MTVcIjpcIndcIixcIjc4MTZcIjpcIldcIixcIjc4MTdcIjpcIndcIixcIjc4MThcIjpcIlhcIixcIjc4MTlcIjpcInhcIixcIjc4MjBcIjpcIlhcIixcIjc4MjFcIjpcInhcIixcIjc4MjJcIjpcIllcIixcIjc4MjNcIjpcInlcIixcIjc4MjRcIjpcIlpcIixcIjc4MjVcIjpcInpcIixcIjc4MjZcIjpcIlpcIixcIjc4MjdcIjpcInpcIixcIjc4MjhcIjpcIlpcIixcIjc4MjlcIjpcInpcIixcIjc4MzVcIjpcInNcIixcIjc4NDBcIjpcIkFcIixcIjc4NDFcIjpcImFcIixcIjc4NDJcIjpcIkFcIixcIjc4NDNcIjpcImFcIixcIjc4NjRcIjpcIkVcIixcIjc4NjVcIjpcImVcIixcIjc4NjZcIjpcIkVcIixcIjc4NjdcIjpcImVcIixcIjc4NjhcIjpcIkVcIixcIjc4NjlcIjpcImVcIixcIjc4ODBcIjpcIklcIixcIjc4ODFcIjpcImlcIixcIjc4ODJcIjpcIklcIixcIjc4ODNcIjpcImlcIixcIjc4ODRcIjpcIk9cIixcIjc4ODVcIjpcIm9cIixcIjc4ODZcIjpcIk9cIixcIjc4ODdcIjpcIm9cIixcIjc5MDhcIjpcIlVcIixcIjc5MDlcIjpcInVcIixcIjc5MTBcIjpcIlVcIixcIjc5MTFcIjpcInVcIixcIjc5MjJcIjpcIllcIixcIjc5MjNcIjpcInlcIixcIjc5MjRcIjpcIllcIixcIjc5MjVcIjpcInlcIixcIjc5MjZcIjpcIllcIixcIjc5MjdcIjpcInlcIixcIjc5MjhcIjpcIllcIixcIjc5MjlcIjpcInlcIixcIjgzMDVcIjpcImlcIixcIjgzNDFcIjpcImhcIixcIjgzNDJcIjpcImtcIixcIjgzNDNcIjpcImxcIixcIjgzNDRcIjpcIm1cIixcIjgzNDVcIjpcIm5cIixcIjgzNDZcIjpcInBcIixcIjgzNDdcIjpcInNcIixcIjgzNDhcIjpcInRcIixcIjg0NTBcIjpcImNcIixcIjg0NThcIjpcImdcIixcIjg0NTlcIjpcImhcIixcIjg0NjBcIjpcImhcIixcIjg0NjFcIjpcImhcIixcIjg0NjRcIjpcImlcIixcIjg0NjVcIjpcImlcIixcIjg0NjZcIjpcImxcIixcIjg0NjdcIjpcImxcIixcIjg0NjhcIjpcImxcIixcIjg0NjlcIjpcIm5cIixcIjg0NzJcIjpcInBcIixcIjg0NzNcIjpcInBcIixcIjg0NzRcIjpcInFcIixcIjg0NzVcIjpcInJcIixcIjg0NzZcIjpcInJcIixcIjg0NzdcIjpcInJcIixcIjg0ODRcIjpcInpcIixcIjg0ODhcIjpcInpcIixcIjg0OTJcIjpcImJcIixcIjg0OTNcIjpcImNcIixcIjg0OTVcIjpcImVcIixcIjg0OTZcIjpcImVcIixcIjg0OTdcIjpcImZcIixcIjg0OThcIjpcIkZcIixcIjg0OTlcIjpcIm1cIixcIjg1MDBcIjpcIm9cIixcIjg1MDZcIjpcInFcIixcIjg1MTNcIjpcImdcIixcIjg1MTRcIjpcImxcIixcIjg1MTVcIjpcImxcIixcIjg1MTZcIjpcInlcIixcIjg1MTdcIjpcImRcIixcIjg1MThcIjpcImRcIixcIjg1MTlcIjpcImVcIixcIjg1MjBcIjpcImlcIixcIjg1MjFcIjpcImpcIixcIjg1MjZcIjpcImZcIixcIjg1NzlcIjpcIkNcIixcIjg1ODBcIjpcImNcIixcIjg3NjVcIjpcInNcIixcIjg3NjZcIjpcInNcIixcIjg5NTlcIjpcInpcIixcIjg5OTlcIjpcInhcIixcIjk3NDZcIjpcInhcIixcIjk3NzZcIjpcImlcIixcIjk4NjZcIjpcImlcIixcIjEwMDA1XCI6XCJ4XCIsXCIxMDAwNlwiOlwieFwiLFwiMTAwMDdcIjpcInhcIixcIjEwMDA4XCI6XCJ4XCIsXCIxMDYyNVwiOlwielwiLFwiMTA2MjZcIjpcInpcIixcIjExMzYyXCI6XCJMXCIsXCIxMTM2NFwiOlwiUlwiLFwiMTEzNjVcIjpcImFcIixcIjExMzY2XCI6XCJ0XCIsXCIxMTM3M1wiOlwiQVwiLFwiMTEzNzRcIjpcIk1cIixcIjExMzc1XCI6XCJBXCIsXCIxMTM5MFwiOlwiU1wiLFwiMTEzOTFcIjpcIlpcIixcIjE5OTA0XCI6XCJpXCIsXCI0Mjg5M1wiOlwiSFwiLFwiNDI5MjJcIjpcIkhcIixcIjQyOTIzXCI6XCJFXCIsXCI0MjkyNFwiOlwiR1wiLFwiNDI5MjVcIjpcIkxcIixcIjQyOTI4XCI6XCJLXCIsXCI0MjkyOVwiOlwiVFwiLFwiNjI5MzdcIjpcInhcIn0nKX19LGU9e307ZnVuY3Rpb24gYShpKXt2YXIgcj1lW2ldO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdD1lW2ldPXtpZDppLGV4cG9ydHM6e319O3JldHVybiBuW2ldLmNhbGwodC5leHBvcnRzLHQsdC5leHBvcnRzLGEpLHQuZXhwb3J0c31hLm49bj0+e3ZhciBlPW4mJm4uX19lc01vZHVsZT8oKT0+bi5kZWZhdWx0OigpPT5uO3JldHVybiBhLmQoZSx7YTplfSksZX0sYS5kPShuLGUpPT57Zm9yKHZhciBpIGluIGUpYS5vKGUsaSkmJiFhLm8obixpKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4saSx7ZW51bWVyYWJsZTohMCxnZXQ6ZVtpXX0pfSxhLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2gobil7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxhLm89KG4sZSk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLGUpLGEucj1uPT57XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobixTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOlwiTW9kdWxlXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobixcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KX07dmFyIGk9e307KCgpPT57XCJ1c2Ugc3RyaWN0XCI7YS5yKGkpLGEuZChpLHtkZWZhdWx0OigpPT5xYSxsaW50TXlUZXh0OigpPT5qYX0pO2NvbnN0IG49cmVxdWlyZShcInJlYWN0XCIpO3ZhciBlPWEoNjk3KSxyPWEubihlKSx0PWEoMzc5KSxvPWEubih0KSxNPWEoNzk1KSxzPWEubihNKSxsPWEoNTY5KSxjPWEubihsKSxTPWEoNTY1KSx1PWEubihTKSxkPWEoMjE2KSxtPWEubihkKSxwPWEoNTg5KSxoPWEubihwKSxnPWEoNzgwKSx5PXt9O2Z1bmN0aW9uIGIobixlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbn0obil8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9bnVsbD09bj9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXXx8bltcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9YSl7dmFyIGkscix0PVtdLG89ITAsTT0hMTt0cnl7Zm9yKGE9YS5jYWxsKG4pOyEobz0oaT1hLm5leHQoKSkuZG9uZSkmJih0LnB1c2goaS52YWx1ZSksIWV8fHQubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKG4pe009ITAscj1ufWZpbmFsbHl7dHJ5e298fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoTSl0aHJvdyByfX1yZXR1cm4gdH19KG4sZSl8fGZ1bmN0aW9uKG4sZSl7aWYobil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIEQobixlKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PWEmJm4uY29uc3RydWN0b3ImJihhPW4uY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PWF8fFwiU2V0XCI9PT1hP0FycmF5LmZyb20obik6XCJBcmd1bWVudHNcIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP0QobixlKTp2b2lkIDB9fShuLGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gRChuLGUpeyhudWxsPT1lfHxlPm4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgpO2Zvcih2YXIgYT0wLGk9bmV3IEFycmF5KGUpO2E8ZTthKyspaVthXT1uW2FdO3JldHVybiBpfXkuc3R5bGVUYWdUcmFuc2Zvcm09aCgpLHkuc2V0QXR0cmlidXRlcz11KCkseS5pbnNlcnQ9YygpLmJpbmQobnVsbCxcImhlYWRcIikseS5kb21BUEk9cygpLHkuaW5zZXJ0U3R5bGVFbGVtZW50PW0oKSxvKCkoZy5aLHkpLGcuWiYmZy5aLmxvY2FscyYmZy5aLmxvY2Fscztjb25zdCBmPWZ1bmN0aW9uKGUpe3ZhciBhLGkscj1lLnN1Z2dlc3Rpb24sdD1lLnNvdXJjZVRleHQsbz1lLnNhbXBsZVRleHQsTT1lLnNldFNhbXBsZVRleHQscz1lLnJlbW92ZVN1Z2dlc3Rpb24sbD1lLmRpc21pc3NlZFN1Z2dlc3Rpb25zLGM9ZS5vbkNsaWNrLFM9ZS5pc0FjdGl2ZSx1PWUuYWRkVG9EaWN0aW9uYXJ5LGQ9ZS5vcGVuTGlua3NJbk5ld1RhYixtPWIoKDAsbi51c2VTdGF0ZSkoITEpLDIpLHA9bVswXSxoPW1bMV0sZz1iKCgwLG4udXNlU3RhdGUpKCksMikseT1nWzBdLEQ9Z1sxXSxmPWIoKDAsbi51c2VTdGF0ZSkoXCJzY3JvbGwtcG9zaXRpb24tc3RhcnRcIiksMiksRz1mWzBdLHc9ZlsxXSx2PSgwLG4udXNlUmVmKSgpLGs9IShudWxsPT1yfHwhci5leHBlY3RlZCksUj1mdW5jdGlvbigpe3ZhciBuPVwicmVwbGFjZW1lbnRcIjtyZXR1cm5cInJldGV4dC1zcGVsbFwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiPT09ci5zb3VyY2V8fFwicmV0ZXh0LWVxdWFsaXR5XCI9PT1yLnNvdXJjZSYmaz9uOlwicmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmdcIj09PXIuc291cmNlfHxcInJldGV4dC1wYXNzaXZlXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVhZGFiaWxpdHlcIj09PXIuc291cmNlP1wiYmFzaWNcIjooKFwicmV0ZXh0LWVxdWFsaXR5XCI9PT1yLnNvdXJjZSYmIWt8fFwicmV0ZXh0LW5vLWVtb2ppc1wiPT09ci5zb3VyY2UpJiYobj1cInJlbW92YWxcIiksbil9LFk9ZnVuY3Rpb24oKXt2YXIgbj1cInNldmVyZVwiO3JldHVyblwicmV0ZXh0LXNwZWxsXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIj09PXIuc291cmNlfHxcInJldGV4dC1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC1pbmRlZmluaXRlLWFydGljbGVcIj09PXIuc291cmNlfHxcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtZXF1YWxpdHlcIiE9PXIuc291cmNlJiZcInJldGV4dC1yZWFkYWJpbGl0eVwiIT09ci5zb3VyY2UmJlwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIiE9PXIuc291cmNlJiZcInJldGV4dC1uby1lbW9qaXNcIiE9PXIuc291cmNlJiZcInJldGV4dC1wYXNzaXZlXCIhPT1yLnNvdXJjZXx8KG49XCJtb2RlcmF0ZVwiKSxufSxBPWZ1bmN0aW9uKCl7dmFyIG49XCJTdWdnZXN0aW9uXCI7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjpuPVwiU3BlbGxpbmdcIjticmVhaztjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6Y2FzZVwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIjpuPVwiQ29udHJhY3Rpb25zXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCI6bj1cIlJlcGVhdGVkIHdvcmRzXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmdcIjpjYXNlXCJyZXRleHQtbm8tZW1vamlzXCI6bj1cIkNvbnNpc3RlbnQgc3R5bGVcIjticmVhaztjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6bj1cIkdyYW1tYXJcIjticmVhaztjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjpuPVwiSW5zZW5zaXRpdmUgbGFuZ3VhZ2VcIjticmVhaztjYXNlXCJyZXRleHQtcmVhZGFiaWxpdHlcIjpjYXNlXCJyZXRleHQtcGFzc2l2ZVwiOm49XCJDbGFyaXR5XCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI6bj1cIkNhcGl0YWxpemF0aW9uXCI7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbn1yZXR1cm4gbn07cmV0dXJuIG4uY3JlYXRlRWxlbWVudChcImxpXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY29udGFpbmVyIFwiLmNvbmNhdChsLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiBuPT09ci5uYW1lfSkpP1wic3VnZ2VzdGlvbi1kaXNtaXNzZWRcIjpcIlwiLFwiIFwiKS5jb25jYXQoUz9cImFjdGl2ZS1zdWdnZXN0aW9uXCI6XCJcIiksb25DbGljazpmdW5jdGlvbigpe3JldHVybiBjKCl9fSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeVwifSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eSBcIi5jb25jYXQoWSgpKX0pLG4uY3JlYXRlRWxlbWVudChcImg1XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1hY3R1YWxcIn0sci5hY3R1YWwubGVuZ3RoPjMwP3IuYWN0dWFsLnN1YnN0cmluZygwLDMwKStcIi4uLlwiOnIuYWN0dWFsKSxuLmNyZWF0ZUVsZW1lbnQoXCJoNlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtbGFiZWxcIn0sQSgpKSksbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tcnVsZS1jb250YWluZXJcIn0sbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtc2V2ZXJpdHkgXCIuY29uY2F0KFkoKSl9KSxuLmNyZWF0ZUVsZW1lbnQoXCJoNlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtbGFiZWxcIn0sQSgpKSksKGk9ZnVuY3Rpb24oKXt2YXIgZT1cInJlbW92YWxcIj09PVIoKT9mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3ZhciBuPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LGU9ci5wb3NpdGlvbi5lbmQub2Zmc2V0LGE9by5zdWJzdHJpbmcoMCxuKSxpPW8uc3Vic3RyaW5nKGUpLHQ9YS5zdWJzdHJpbmcoYS5sZW5ndGgtMSxhLmxlbmd0aCk7XCIgXCI9PT1pLnN1YnN0cmluZygwLDEpP2k9aS5zdWJzdHJpbmcoMSk6XCIgXCI9PT10JiYoYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLTEpKTt2YXIgcz1bYSxpXTtzPXMuam9pbihcIlwiKSxNKHMpfSgpfTpudWxsO3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnRcIixvbkNsaWNrOmV9LG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dFwifSxyLmFjdHVhbCkpfSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXFxuICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktY29udGFpbmVyIFxcbiAgICAgICAgc3VtbWFyeS1cIi5jb25jYXQoUigpLFwiXFxuICAgICAgXCIpfSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJmkoKSxcInJlbW92YWxcIj09PVIoKSYmaSgpLFwicmVwbGFjZW1lbnRcIj09PVIoKSYmbi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse3NyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UVWlJR2hsYVdkb2REMGlNVE1pSUhacFpYZENiM2c5SWpBZ01DQXhOU0F4TXlJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1pEMGlUVEVnTlM0M05VTXdMalU0TlRjNE5pQTFMamMxSURBdU1qVWdOaTR3T0RVM09TQXdMakkxSURZdU5VTXdMakkxSURZdU9URTBNakVnTUM0MU9EVTNPRFlnTnk0eU5TQXhJRGN1TWpWV05TNDNOVnBOTVRRdU5UTXdNeUEzTGpBek1ETXpRekUwTGpneU16SWdOaTQzTXpjME5DQXhOQzQ0TWpNeUlEWXVNall5TlRZZ01UUXVOVE13TXlBMUxqazJPVFkzVERrdU56VTNNellnTVM0eE9UWTNRemt1TkRZME5EY2dNQzQ1TURNNE1EWWdPQzQ1T0RrMU9TQXdMamt3TXpnd05pQTRMalk1TmpjZ01TNHhPVFkzUXpndU5EQXpPREVnTVM0ME9EazFPU0E0TGpRd016Z3hJREV1T1RZME5EY2dPQzQyT1RZM0lESXVNalUzTXpaTU1USXVPVE01TXlBMkxqVk1PQzQyT1RZM0lERXdMamMwTWpaRE9DNDBNRE00TVNBeE1TNHdNelUxSURndU5EQXpPREVnTVRFdU5URXdOQ0E0TGpZNU5qY2dNVEV1T0RBek0wTTRMams0T1RVNUlERXlMakE1TmpJZ09TNDBOalEwTnlBeE1pNHdPVFl5SURrdU56VTNNellnTVRFdU9EQXpNMHd4TkM0MU16QXpJRGN1TURNd016TmFUVEVnTnk0eU5VZ3hORlkxTGpjMVNERldOeTR5TlZvaUlHWnBiR3c5SWlNNVJrRTFRVFVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcImFycm93IGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktYXJyb3dcIn0pLFwicmVwbGFjZW1lbnRcIj09PVIoKSYmbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyXFxuICAgICAgICAgICAgXCIuY29uY2F0KEcsXCJcXG4gICAgICAgICAgICBcIikuY29uY2F0KDA9PT1yLmV4cGVjdGVkLmxlbmd0aD9cIm5vLXJlcGxhY2VtZW50LWNvbnRhaW5lclwiOlwiXCIsXCJcXG4gICAgICAgICAgXCIpfSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwiXFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMgXFxuICAgICAgICAgICAgICAgIFwiLmNvbmNhdCgwPT09ci5leHBlY3RlZC5sZW5ndGg/XCJuby1yZXBsYWNlbWVudFwiOlwiXCIsXCJcXG4gICAgICAgICAgICAgIFwiKSxvblNjcm9sbDpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe2lmKHYuY3VycmVudCl7dmFyIG49di5jdXJyZW50LGU9bi5zY3JvbGxMZWZ0LGE9bi5zY3JvbGxXaWR0aCxpPW4uY2xpZW50V2lkdGg7dygwPT09ZT9cInNjcm9sbC1wb3NpdGlvbi1zdGFydFwiOmUraT49YT9cInNjcm9sbC1wb3NpdGlvbi1lbmRcIjpcInNjcm9sbC1wb3NpdGlvbi1taWRkbGVcIil9fSgpfSxyZWY6dn0sKHIuYWN0dWFsLnN1YnN0cmluZygwLDEpLnRvVXBwZXJDYXNlKCksbnVsbD09cnx8bnVsbD09PShhPXIuZXhwZWN0ZWQpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLm1hcCgoZnVuY3Rpb24oZSxhKXt2YXIgaT1cInJldGV4dC1jYXBpdGFsaXphdGlvblwiPT09ci5zb3VyY2U/ci5leHBlY3RlZFthXTpmdW5jdGlvbihuLGUpe2xldCBhPS0xLGk9ITE7aWYoZS50b1VwcGVyQ2FzZSgpPT09ZSlyZXR1cm4gbi50b1VwcGVyQ2FzZSgpO2lmKGUudG9Mb3dlckNhc2UoKT09PWUpcmV0dXJuIG4udG9Mb3dlckNhc2UoKTtmb3IoOysrYTxlLmxlbmd0aDspe2NvbnN0IG49ZS5jaGFyQXQoYSk7aWYobi50b1VwcGVyQ2FzZSgpIT09bi50b0xvd2VyQ2FzZSgpKXtjb25zdCByPWUuc2xpY2UoYSsxKTtpPW49PT1uLnRvVXBwZXJDYXNlKCkmJnI9PT1yLnRvTG93ZXJDYXNlKCk7YnJlYWt9fWlmKGkpZm9yKGE9LTE7KythPG4ubGVuZ3RoOyl7Y29uc3QgZT1uLmNoYXJBdChhKS50b1VwcGVyQ2FzZSgpO2lmKGUhPT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG4uc2xpY2UoMCxhKStlK24uc2xpY2UoYSsxKS50b0xvd2VyQ2FzZSgpfXJldHVybiBufShlLHIuYWN0dWFsKTtyZXR1cm4gYTw1P24uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50XCIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBuPWUsYT1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxpPXIucG9zaXRpb24uZW5kLm9mZnNldCx0PSh0PVtvLnN1YnN0cmluZygwLGEpLG4sby5zdWJzdHJpbmcoaSldKS5qb2luKFwiXCIpLHZvaWQgTSh0KTt2YXIgbixhLGksdH0sa2V5OmF9LGkpOlwiXCJ9KSkpLDA9PT1yLmV4cGVjdGVkLmxlbmd0aCYmXCI/XCIpKSxcImJhc2ljXCI9PT1SKCkmJmZ1bmN0aW9uKCl7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtcGFzc2l2ZVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIHBhc3NpdmUgdm9pY2U6IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwiYmFzaWMtc3VtbWFyeS1leGFtcGxlXCJ9LCdcIi4uLicsKGU9ci5wb3NpdGlvbi5zdGFydC5vZmZzZXQsYT1yLnBvc2l0aW9uLmVuZC5vZmZzZXQsdC5zdWJzdHJpbmcoZS0xMCxhKSksJ1wiJykpO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6cmV0dXJuXCJTZW50ZW5jZSBzcGFjaW5nXCI7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6cmV0dXJuXCJEaWZmaWN1bHQgc2VudGVuY2UgdG8gcmVhZFwiO2RlZmF1bHQ6cmV0dXJuXCJTdWdnZXN0aW9uXCJ9dmFyIGUsYX0oKSkpLG4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWRlc2NyaXB0aW9uXCJ9LG4uY3JlYXRlRWxlbWVudChcInBcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1kZXNjcmlwdGlvbi10ZXh0XCJ9LGZ1bmN0aW9uKCl7dmFyIGUsYT1mdW5jdGlvbihlKXtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsbnVsbCxuLmNyZWF0ZUVsZW1lbnQoXCJlbVwiLG51bGwsZSkpfTtzd2l0Y2goci5zb3VyY2Upe2Nhc2VcInJldGV4dC1zcGVsbFwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIHdvcmQgXCIsYShyLmFjdHVhbCksXCIgaXMgbm90IGluIG91ciBkaWN0aW9uYXJ5LiBJZiB5b3XigJlyZSBzdXJlIHRoaXMgc3BlbGxpbmcgaXMgY29ycmVjdCwgeW91IGNhbiBzdWdnZXN0IHdlIGFkZCBpdCB0byB0aGUgZGljaXRvbmFyeSB0byBwcmV2ZW50IGZ1dHVyZSBhbGVydHMuXCIpO2Nhc2VcInJldGV4dC1jb250cmFjdGlvbnNcIjpyZXR1cm5cIm1pc3Npbmctc21hcnQtYXBvc3Ryb3BoZVwiPT09ci5ydWxlSWQ/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkl0IGFwcGVhcnMgeW91ciBtaXNzaW5nIGFuIGFwb3N0cm9waGUgaW5cIixcIiBcIixhKHIuYWN0dWFsKSxcIi5cIik6XCJzbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJZD9uLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgYXBwZWFycyB5b3VyIHVzaW5nIHRoZSB3cm9uZyBraW5kIG9mIGFwb3N0cm9waGUgaW4gXCIsXCIgXCIsYShyLmFjdHVhbCksXCIuIENvbnNpZGVyIGNoYW5naW5nIGl0IHRvIGEgc21hcnQgYXBvc3Ryb3BoZSBsaWtlIHRoaXM6IFwiLGEoci5leHBlY3RlZCksXCIuXCIpOnIucmVhc29uO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiT29wcyEgSXQgYXBwZWFycyB0aGF0IHlvdSB0eXBlZCBcIixcIiBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIHR3aWNlIGluIGEgcm93LiBDb25zaWRlciBkZWxldGVpbmcgb25lIG9mIHRoZW0uXCIpO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBhcHBlYXJzIHRoYXQgeW91IHVzZWQgXCIsYShyLmFjdHVhbC5sZW5ndGgpLFwiIFwiLFwiIHNwYWNlcyBiZWZvcmUgeW91ciBzZW50ZW5jZS4gQXQgTmV3IFJlbGljLCB3ZSB1c2UgMSBzcGFjZS5cIik7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoaXMgc2VudGVuY2UgYXBwZWFycyB0byBiZSB3cml0dGVuIGluIHRoZSBwYXNzaXZlIHZvaWNlLiBDb25zaWRlciByZXdyaXRpbmcgdGhpcyBpbiB0aGUgYWN0aXZlIHZvaWNlLlwiKTtjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJUaGUgYXJ0aWNsZSBcIixhKHIuYWN0dWFsKSxcIiBcIixcIiBcIixcIiBtYXkgYmUgaW5jb3JyZWN0LiBDb25zaWRlciBjaGFuZ2luZyBpdCB0byBcIixcIiBcIixhKHIuZXhwZWN0ZWQpLFwiIHNvIHRoYXQgaXQgYWdyZWVzIHdpdGggdGhlIGJlZ2lubmluZyBzb3VuZCBvZiB0aGUgZm9sbG93aW5nIHdvcmQuXCIpO2Nhc2VcInJldGV4dC1lcXVhbGl0eVwiOnZhciBpPWs/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkNvbnNpZGVyIHVzaW5nIFwiLGEoci5leHBlY3RlZFswXSksXCIgaW5zdGVhZC5cIik6XCJUcnkgbm90IHRvIHVzZSBpdC5cIjtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxhKHIuYWN0dWFsKSxcIiBcIixcIiBcIixcIiBtYXkgYmUgaW5zZW5zaXRpdmUuXCIsXCIgXCIsaSk7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJXZSdyZSBcIixNYXRoLnJvdW5kKDEwMCpyLmNvbmZpZGVuY2UpLFwiJSBzdXJlIHRoZSBzZW50ZW5jZSBiZWdpbm5pbmcgd2l0aCBcIixhKChlPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LHQuc3Vic3RyaW5nKGUsZSsyMCkpKSxcIi4uLiBpcyBkaWZmaWN1bHQgdG8gcmVhZC4gQ29uc2lkZXIgcmV3cml0aW5nIGl0IHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlYWQuXCIpO2Nhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJDb25zaWRlciBjaGFuZ2luZyBcIixhKHIuYWN0dWFsKSxcIiB0byBcIixcIiBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIHRvIGdpdmUgeW91ciB3cml0aW5nIGEgbW9yZSBjb252ZXJzYXRpb25hbCBhbmQgcGVyc29uYWwgZmVlbC5cIik7Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiQXZvaWQgdXNpbmcgZW1vamlzIGluIFVJIHRleHQuIElmIHlvdSBoYXZlIHRoZSB1cmdlIHRvIHVzZSBhbiBlbW9qaSAsIGNvbnN1bHQgXCIsXCIgXCIsbi5jcmVhdGVFbGVtZW50KFwiYVwiLHtocmVmOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL1wiLHRhcmdldDpkP1wiX2JsYW5rXCI6XCJfc2VsZlwifSxcIm91ciBkb2NzIGZvciB2b2ljZSBhbmQgdG9uZVwiKSxcIiBcIixcInRvIHJld3JpdGUgeW91ciBtZXNzYWdlIHVudGlsIGl0IGFjaGlldmVzIHlvdXIgZ29hbC5cIik7Y2FzZVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBsb29rcyBsaWtlIFwiLGEoci5hY3R1YWwpLFwiIGlzbid0IHByb3Blcmx5IGNhcGl0YWxpemVkLiBUcnkgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiBpbnN0ZWFkLlwiKTtkZWZhdWx0OnJldHVyblwiVWggb2hcIn19KCkpKSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbnMtY3Rhc1wifSxmdW5jdGlvbigpe3ZhciBlPVwiXCI7c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjplPVwiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQW1lcmljYW5fRW5nbGlzaFwiO2JyZWFrO2Nhc2VcInJldGV4dC1jb250cmFjdGlvbnNcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1jb250cmFjdGlvbnMjdXNlXCIsXCJtaXNzaW5nLXNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlEP2U9XCJodHRwczovL3d3dy5ncmFtbWFyYm9vay5jb20vcHVuY3R1YXRpb24vYXBvc3Ryby5hc3BcIjpcInNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlEJiYoZT1cImh0dHBzOi8vcHJhY3RpY2FsdHlwb2dyYXBoeS5jb20vc3RyYWlnaHQtYW5kLWN1cmx5LXF1b3Rlcy5odG1sXCIpO2JyZWFrO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOmU9XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXJlcGVhdGVkLXdvcmRzI3JlYWRtZVwiO2JyZWFrO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6ZT1cImh0dHBzOi8vcHJhY3RpY2FsdHlwb2dyYXBoeS5jb20vb25lLXNwYWNlLWJldHdlZW4tc2VudGVuY2VzLmh0bWxcIjticmVhaztjYXNlXCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI6ZT1cImh0dHBzOi8vd3d3LmVmLmVkdS9lbmdsaXNoLXJlc291cmNlcy9lbmdsaXNoLWdyYW1tYXIvaW5kZWZpbml0ZS1hcnRpY2xlcy9cIjticmVhaztjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1lcXVhbGl0eS9ibG9iL21haW4vcnVsZXMubWRcIjticmVhaztjYXNlXCJyZXRleHQtcmVhZGFiaWxpdHlcIjplPVwiaHR0cHM6Ly93d3cuZG9yaXNhbmRiZXJ0aWUuY29tL2dvb2Rjb3B5YmFkY29weS8yMDE3LzAyLzE0L3NlbnRlbmNlLXN0cnVjdHVyZS1ob3ctdG8tbWFrZS15b3VyLXNlbnRlbmNlcy1tdWNoLWVhc2llci10by1yZWFkXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjplPVwiaHR0cHM6Ly93d3cuZ3JhbW1hcmx5LmNvbS9ibG9nL2FjdGl2ZS12cy1wYXNzaXZlLXZvaWNlL1wiO2JyZWFrO2Nhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6ZT1cImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vd3JpdGluZy9jb250cmFjdGlvbnMvXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvZW1vamlzL1wiO2JyZWFrO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOmU9XCJodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3Mvc3R5bGUtZ3VpZGUvY2FwaXRhbGl6YXRpb24vcHJvZHVjdC1jYXBhYmlsaXR5LWZlYXR1cmUtdXNhZ2UvI3doZW4tdG8tdXNlLXRpdGxlLWNhc2VcIjticmVhaztkZWZhdWx0OmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL25yMS1wcm9kdWN0L2Rlc2lnbi93cml0aW5nXCJ9cmV0dXJuXCJyZXRleHQtc3BlbGxcIj09PXIuc291cmNlP24uY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnlcIn0sbi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse3NyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU9TSWdhR1ZwWjJoMFBTSTVJaUIyYVdWM1FtOTRQU0l3SURBZ09TQTVJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOGNHRjBhQ0JtYVd4c0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdOc2FYQXRjblZzWlQwaVpYWmxibTlrWkNJZ1pEMGlUVGtnTkVnMVZqQklORlkwU0RCV05VZzBWamxJTlZZMVNEbFdORm9pSUdacGJHdzlJaU0yUlRjMU56VWlMejRLUEM5emRtYytDZz09XCIsYWx0OlwicGx1cyBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXBsdXMtaWNvblwifSksbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1sYWJlbFwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gdShyLmFjdHVhbCxyLm5hbWUpLHZvaWQgcyhyLm5hbWUpfX0sXCJBZGQgdG8gZGljdGlvbmFyeVwiKSk6bi5jcmVhdGVFbGVtZW50KFwiYVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnlcIixocmVmOmUsdGFyZ2V0OmQ/XCJfYmxhbmtcIjpcIl9zZWxmXCJ9LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFVpSUdobGFXZG9kRDBpTVRVaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TlNBeE5TSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2diM0JoWTJsMGVUMGlNQzQ0SWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRBZ055NDFRekFnTXk0MElETXVOQ0F3SURjdU5TQXdRekV4TGpZZ01DQXhOU0F6TGpRZ01UVWdOeTQxUXpFMUlERXhMallnTVRFdU5pQXhOU0EzTGpVZ01UVkRNeTQwSURFMUlEQWdNVEV1TmlBd0lEY3VOVnBOTVNBM0xqVkRNU0F4TVM0eElETXVPU0F4TkNBM0xqVWdNVFJETVRFdU1TQXhOQ0F4TkNBeE1TNHhJREUwSURjdU5VTXhOQ0F6TGprZ01URXVNU0F4SURjdU5TQXhRek11T1NBeElERWdNeTQ1SURFZ055NDFXazA0SURFeFZqRXlTRGRXTVRGSU9GcE5OU0ExTGpWRE5TQTBMakVnTmk0eElETWdOeTQxSURORE9DNDVJRE1nTVRBZ05DNHhJREV3SURVdU5VTXhNQ0EyTGpjeU9EQXlJRGt1TXpnME5EZ2dOeTR4T0RZMk15QTRMamc1TlRneElEY3VOVFV3TnpORE9DNDRNamN6TnlBM0xqWXdNVGN5SURndU56WXhORElnTnk0Mk5UQTROaUE0TGpjZ055NDNRemd1TmpjMk5qTWdOeTQzTVRRd01pQTRMalkxTXpreElEY3VOekkzTmpFZ09DNDJNekU0TkNBM0xqYzBNRGd4UXpndU1UZ3hOelFnT0M0d01TQTRJRGd1TVRFNE55QTRJRGd1TlZZNVZqRXdTRGRXT1ZZNExqVkROeUEzTGpVNU5UUTBJRGN1TlRjeU56VWdOeTR4T0RFNE1pQTNMamszT0RFMElEWXVPRGc1TURkRE9DNHdNakE1TVNBMkxqZzFPREU0SURndU1EWXhPRElnTmk0NE1qZzJNeUE0TGpFZ05pNDRRemd1TVRJeU9UY2dOaTQzT0RZeU1pQTRMakUwTlRjeUlEWXVOemN5TmpVZ09DNHhOamd5TkNBMkxqYzFPVEl5UXpndU5qTTFPU0EyTGpRNE1ETTJJRGtnTmk0eU5qTXlOU0E1SURVdU5VTTVJRFF1TnlBNExqTWdOQ0EzTGpVZ05FTTJMamNnTkNBMklEUXVOeUEySURVdU5WWTJTRFZXTlM0MVdpSWdabWxzYkQwaUl6WkZOelUzTlNJdlBnbzhMM04yWno0S1wiLGFsdDpcIkhlbHAgaWNvblwiLGNsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1oZWxwLWljb25cIn0pLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtbGFiZWxcIn0sXCJMZWFybiBtb3JlXCIpKX0oKSxuLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5IHN1Z2dlc3Rpb24tY3RhLWljb24tb25seSBcIi5jb25jYXQocD9cImRlbGV0ZS1pcy1ob3ZlcmVkXCI6XCJcIiksb25Nb3VzZUVudGVyOmZ1bmN0aW9uKCl7cmV0dXJuIEQoc2V0VGltZW91dCgoZnVuY3Rpb24oKXtoKCEwKX0pLDUwMCkpLGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dCh5KX19LG9uTW91c2VMZWF2ZTpmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoeSksdm9pZCBoKCExKX0sb25DbGljazpmdW5jdGlvbigpe3Moci5uYW1lKX19LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVElpSUdobGFXZG9kRDBpTVRVaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TWlBeE5TSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2diM0JoWTJsMGVUMGlNQzQ0SWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRrZ01FZ3pWakpJTUZZelNERldNVFZJTVRGV00wZ3hNbFl5U0RsV01GcE5OQ0F4U0RoV01rZzBWakZhVFRJZ01UUklNVEJXTTBneVZqRTBXazAwSURWSU5WWXhNa2cwVmpWYVRUZ2dOVWczVmpFeVNEaFdOVm9pSUdacGJHdzlJaU0yUlRjMU56VWlMejRLUEM5emRtYytDZz09XCIsYWx0OlwiRGVsZXRlIGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktdHJhc2gtaWNvblwifSkpKSl9O2Z1bmN0aW9uIEcobil7aWYobil0aHJvdyBufXZhciB3PWEoNzM4KSx2PWEoNDcwKTtmdW5jdGlvbiBrKG4pe2lmKFwiW29iamVjdCBPYmplY3RdXCIhPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikpcmV0dXJuITE7Y29uc3QgZT1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobik7cmV0dXJuIG51bGw9PT1lfHxlPT09T2JqZWN0LnByb3RvdHlwZX12YXIgUj17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBZKG4pe3JldHVybiBuJiZcIm9iamVjdFwiPT10eXBlb2Ygbj9SLmNhbGwobixcInBvc2l0aW9uXCIpfHxSLmNhbGwobixcInR5cGVcIik/UChuLnBvc2l0aW9uKTpSLmNhbGwobixcInN0YXJ0XCIpfHxSLmNhbGwobixcImVuZFwiKT9QKG4pOlIuY2FsbChuLFwibGluZVwiKXx8Ui5jYWxsKG4sXCJjb2x1bW5cIik/QShuKTpcIlwiOlwiXCJ9ZnVuY3Rpb24gQShuKXtyZXR1cm4gQyhuJiZuLmxpbmUpK1wiOlwiK0MobiYmbi5jb2x1bW4pfWZ1bmN0aW9uIFAobil7cmV0dXJuIEEobiYmbi5zdGFydCkrXCItXCIrQShuJiZuLmVuZCl9ZnVuY3Rpb24gQyhuKXtyZXR1cm4gbiYmXCJudW1iZXJcIj09dHlwZW9mIG4/bjoxfWNsYXNzIFQgZXh0ZW5kcyBFcnJvcntjb25zdHJ1Y3RvcihuLGUsYSl7dmFyIGkscj1bbnVsbCxudWxsXSx0PXtzdGFydDp7bGluZTpudWxsLGNvbHVtbjpudWxsfSxlbmQ6e2xpbmU6bnVsbCxjb2x1bW46bnVsbH19O3N1cGVyKCksXCJzdHJpbmdcIj09dHlwZW9mIGUmJihhPWUsZT1udWxsKSxcInN0cmluZ1wiPT10eXBlb2YgYSYmKC0xPT09KGk9YS5pbmRleE9mKFwiOlwiKSk/clsxXT1hOihyWzBdPWEuc2xpY2UoMCxpKSxyWzFdPWEuc2xpY2UoaSsxKSkpLGUmJihcInR5cGVcImluIGV8fFwicG9zaXRpb25cImluIGU/ZS5wb3NpdGlvbiYmKHQ9ZS5wb3NpdGlvbik6XCJzdGFydFwiaW4gZXx8XCJlbmRcImluIGU/dD1lOihcImxpbmVcImluIGV8fFwiY29sdW1uXCJpbiBlKSYmKHQuc3RhcnQ9ZSkpLHRoaXMubmFtZT1ZKGUpfHxcIjE6MVwiLHRoaXMubWVzc2FnZT1cIm9iamVjdFwiPT10eXBlb2Ygbj9uLm1lc3NhZ2U6bix0aGlzLnN0YWNrPVwib2JqZWN0XCI9PXR5cGVvZiBuP24uc3RhY2s6XCJcIix0aGlzLnJlYXNvbj10aGlzLm1lc3NhZ2UsdGhpcy5mYXRhbCx0aGlzLmxpbmU9dC5zdGFydC5saW5lLHRoaXMuY29sdW1uPXQuc3RhcnQuY29sdW1uLHRoaXMuc291cmNlPXJbMF0sdGhpcy5ydWxlSWQ9clsxXSx0aGlzLnBvc2l0aW9uPXQsdGhpcy5hY3R1YWwsdGhpcy5leHBlY3RlZCx0aGlzLmZpbGUsdGhpcy51cmwsdGhpcy5ub3RlfX1ULnByb3RvdHlwZS5maWxlPVwiXCIsVC5wcm90b3R5cGUubmFtZT1cIlwiLFQucHJvdG90eXBlLnJlYXNvbj1cIlwiLFQucHJvdG90eXBlLm1lc3NhZ2U9XCJcIixULnByb3RvdHlwZS5zdGFjaz1cIlwiLFQucHJvdG90eXBlLmZhdGFsPW51bGwsVC5wcm90b3R5cGUuY29sdW1uPW51bGwsVC5wcm90b3R5cGUubGluZT1udWxsLFQucHJvdG90eXBlLnNvdXJjZT1udWxsLFQucHJvdG90eXBlLnJ1bGVJZD1udWxsLFQucHJvdG90eXBlLnBvc2l0aW9uPW51bGw7Y29uc3QgeD1mdW5jdGlvbihuLGUpe2lmKHZvaWQgMCE9PWUmJlwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiZXh0XCIgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZycpO1oobik7bGV0IGEsaT0wLHI9LTEsdD1uLmxlbmd0aDtpZih2b2lkIDA9PT1lfHwwPT09ZS5sZW5ndGh8fGUubGVuZ3RoPm4ubGVuZ3RoKXtmb3IoO3QtLTspaWYoNDc9PT1uLmNoYXJDb2RlQXQodCkpe2lmKGEpe2k9dCsxO2JyZWFrfX1lbHNlIHI8MCYmKGE9ITAscj10KzEpO3JldHVybiByPDA/XCJcIjpuLnNsaWNlKGkscil9aWYoZT09PW4pcmV0dXJuXCJcIjtsZXQgbz0tMSxNPWUubGVuZ3RoLTE7Zm9yKDt0LS07KWlmKDQ3PT09bi5jaGFyQ29kZUF0KHQpKXtpZihhKXtpPXQrMTticmVha319ZWxzZSBvPDAmJihhPSEwLG89dCsxKSxNPi0xJiYobi5jaGFyQ29kZUF0KHQpPT09ZS5jaGFyQ29kZUF0KE0tLSk/TTwwJiYocj10KTooTT0tMSxyPW8pKTtyZXR1cm4gaT09PXI/cj1vOnI8MCYmKHI9bi5sZW5ndGgpLG4uc2xpY2UoaSxyKX0sej1mdW5jdGlvbihuKXtpZihaKG4pLDA9PT1uLmxlbmd0aClyZXR1cm5cIi5cIjtsZXQgZSxhPS0xLGk9bi5sZW5ndGg7Zm9yKDstLWk7KWlmKDQ3PT09bi5jaGFyQ29kZUF0KGkpKXtpZihlKXthPWk7YnJlYWt9fWVsc2UgZXx8KGU9ITApO3JldHVybiBhPDA/NDc9PT1uLmNoYXJDb2RlQXQoMCk/XCIvXCI6XCIuXCI6MT09PWEmJjQ3PT09bi5jaGFyQ29kZUF0KDApP1wiLy9cIjpuLnNsaWNlKDAsYSl9LEU9ZnVuY3Rpb24obil7WihuKTtsZXQgZSxhPW4ubGVuZ3RoLGk9LTEscj0wLHQ9LTEsbz0wO2Zvcig7YS0tOyl7Y29uc3QgTT1uLmNoYXJDb2RlQXQoYSk7aWYoNDchPT1NKWk8MCYmKGU9ITAsaT1hKzEpLDQ2PT09TT90PDA/dD1hOjEhPT1vJiYobz0xKTp0Pi0xJiYobz0tMSk7ZWxzZSBpZihlKXtyPWErMTticmVha319cmV0dXJuIHQ8MHx8aTwwfHwwPT09b3x8MT09PW8mJnQ9PT1pLTEmJnQ9PT1yKzE/XCJcIjpuLnNsaWNlKHQsaSl9LEI9ZnVuY3Rpb24oLi4ubil7bGV0IGUsYT0tMTtmb3IoOysrYTxuLmxlbmd0aDspWihuW2FdKSxuW2FdJiYoZT12b2lkIDA9PT1lP25bYV06ZStcIi9cIituW2FdKTtyZXR1cm4gdm9pZCAwPT09ZT9cIi5cIjpmdW5jdGlvbihuKXtaKG4pO2NvbnN0IGU9NDc9PT1uLmNoYXJDb2RlQXQoMCk7bGV0IGE9ZnVuY3Rpb24obixlKXtsZXQgYSxpLHI9XCJcIix0PTAsbz0tMSxNPTAscz0tMTtmb3IoOysrczw9bi5sZW5ndGg7KXtpZihzPG4ubGVuZ3RoKWE9bi5jaGFyQ29kZUF0KHMpO2Vsc2V7aWYoNDc9PT1hKWJyZWFrO2E9NDd9aWYoNDc9PT1hKXtpZihvPT09cy0xfHwxPT09TSk7ZWxzZSBpZihvIT09cy0xJiYyPT09TSl7aWYoci5sZW5ndGg8Mnx8MiE9PXR8fDQ2IT09ci5jaGFyQ29kZUF0KHIubGVuZ3RoLTEpfHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0yKSlpZihyLmxlbmd0aD4yKXtpZihpPXIubGFzdEluZGV4T2YoXCIvXCIpLGkhPT1yLmxlbmd0aC0xKXtpPDA/KHI9XCJcIix0PTApOihyPXIuc2xpY2UoMCxpKSx0PXIubGVuZ3RoLTEtci5sYXN0SW5kZXhPZihcIi9cIikpLG89cyxNPTA7Y29udGludWV9fWVsc2UgaWYoci5sZW5ndGg+MCl7cj1cIlwiLHQ9MCxvPXMsTT0wO2NvbnRpbnVlfWUmJihyPXIubGVuZ3RoPjA/citcIi8uLlwiOlwiLi5cIix0PTIpfWVsc2Ugci5sZW5ndGg+MD9yKz1cIi9cIituLnNsaWNlKG8rMSxzKTpyPW4uc2xpY2UobysxLHMpLHQ9cy1vLTE7bz1zLE09MH1lbHNlIDQ2PT09YSYmTT4tMT9NKys6TT0tMX1yZXR1cm4gcn0obiwhZSk7cmV0dXJuIDAhPT1hLmxlbmd0aHx8ZXx8KGE9XCIuXCIpLGEubGVuZ3RoPjAmJjQ3PT09bi5jaGFyQ29kZUF0KG4ubGVuZ3RoLTEpJiYoYSs9XCIvXCIpLGU/XCIvXCIrYTphfShlKX0sTj1cIi9cIjtmdW5jdGlvbiBaKG4pe2lmKFwic3RyaW5nXCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQYXRoIG11c3QgYmUgYSBzdHJpbmcuIFJlY2VpdmVkIFwiK0pTT04uc3RyaW5naWZ5KG4pKX1jb25zdCBGPWZ1bmN0aW9uKCl7cmV0dXJuXCIvXCJ9O2Z1bmN0aW9uIEkobil7cmV0dXJuIG51bGwhPT1uJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmbi5ocmVmJiZuLm9yaWdpbn1jb25zdCBVPVtcImhpc3RvcnlcIixcInBhdGhcIixcImJhc2VuYW1lXCIsXCJzdGVtXCIsXCJleHRuYW1lXCIsXCJkaXJuYW1lXCJdO2NsYXNzIGp7Y29uc3RydWN0b3Iobil7bGV0IGU7ZT1uP1wic3RyaW5nXCI9PXR5cGVvZiBufHx3KG4pP3t2YWx1ZTpufTpJKG4pP3twYXRoOm59Om46e30sdGhpcy5kYXRhPXt9LHRoaXMubWVzc2FnZXM9W10sdGhpcy5oaXN0b3J5PVtdLHRoaXMuY3dkPUYoKSx0aGlzLnZhbHVlLHRoaXMuc3RvcmVkLHRoaXMucmVzdWx0LHRoaXMubWFwO2xldCBhLGk9LTE7Zm9yKDsrK2k8VS5sZW5ndGg7KXtjb25zdCBuPVVbaV07biBpbiBlJiZ2b2lkIDAhPT1lW25dJiYodGhpc1tuXT1cImhpc3RvcnlcIj09PW4/Wy4uLmVbbl1dOmVbbl0pfWZvcihhIGluIGUpVS5pbmNsdWRlcyhhKXx8KHRoaXNbYV09ZVthXSl9Z2V0IHBhdGgoKXtyZXR1cm4gdGhpcy5oaXN0b3J5W3RoaXMuaGlzdG9yeS5sZW5ndGgtMV19c2V0IHBhdGgobil7SShuKSYmKG49ZnVuY3Rpb24obil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pbj1uZXcgVVJMKG4pO2Vsc2UgaWYoIUkobikpe2NvbnN0IGU9bmV3IFR5cGVFcnJvcignVGhlIFwicGF0aFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcgb3IgYW4gaW5zdGFuY2Ugb2YgVVJMLiBSZWNlaXZlZCBgJytuK1wiYFwiKTt0aHJvdyBlLmNvZGU9XCJFUlJfSU5WQUxJRF9BUkdfVFlQRVwiLGV9aWYoXCJmaWxlOlwiIT09bi5wcm90b2NvbCl7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKFwiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlXCIpO3Rocm93IG4uY29kZT1cIkVSUl9JTlZBTElEX1VSTF9TQ0hFTUVcIixufXJldHVybiBmdW5jdGlvbihuKXtpZihcIlwiIT09bi5ob3N0bmFtZSl7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKCdGaWxlIFVSTCBob3N0IG11c3QgYmUgXCJsb2NhbGhvc3RcIiBvciBlbXB0eSBvbiBkYXJ3aW4nKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9IT1NUXCIsbn1jb25zdCBlPW4ucGF0aG5hbWU7bGV0IGE9LTE7Zm9yKDsrK2E8ZS5sZW5ndGg7KWlmKDM3PT09ZS5jaGFyQ29kZUF0KGEpJiY1MD09PWUuY2hhckNvZGVBdChhKzEpKXtjb25zdCBuPWUuY2hhckNvZGVBdChhKzIpO2lmKDcwPT09bnx8MTAyPT09bil7Y29uc3Qgbj1uZXcgVHlwZUVycm9yKFwiRmlsZSBVUkwgcGF0aCBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzXCIpO3Rocm93IG4uY29kZT1cIkVSUl9JTlZBTElEX0ZJTEVfVVJMX1BBVEhcIixufX1yZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGUpfShuKX0obikpLHEobixcInBhdGhcIiksdGhpcy5wYXRoIT09biYmdGhpcy5oaXN0b3J5LnB1c2gobil9Z2V0IGRpcm5hbWUoKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5wYXRoP3oodGhpcy5wYXRoKTp2b2lkIDB9c2V0IGRpcm5hbWUobil7SCh0aGlzLmJhc2VuYW1lLFwiZGlybmFtZVwiKSx0aGlzLnBhdGg9QihufHxcIlwiLHRoaXMuYmFzZW5hbWUpfWdldCBiYXNlbmFtZSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/eCh0aGlzLnBhdGgpOnZvaWQgMH1zZXQgYmFzZW5hbWUobil7cShuLFwiYmFzZW5hbWVcIiksTChuLFwiYmFzZW5hbWVcIiksdGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lfHxcIlwiLG4pfWdldCBleHRuYW1lKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD9FKHRoaXMucGF0aCk6dm9pZCAwfXNldCBleHRuYW1lKG4pe2lmKEwobixcImV4dG5hbWVcIiksSCh0aGlzLmRpcm5hbWUsXCJleHRuYW1lXCIpLG4pe2lmKDQ2IT09bi5jaGFyQ29kZUF0KDApKXRocm93IG5ldyBFcnJvcihcImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gXCIpO2lmKG4uaW5jbHVkZXMoXCIuXCIsMSkpdGhyb3cgbmV3IEVycm9yKFwiYGV4dG5hbWVgIGNhbm5vdCBjb250YWluIG11bHRpcGxlIGRvdHNcIil9dGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lLHRoaXMuc3RlbSsobnx8XCJcIikpfWdldCBzdGVtKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD94KHRoaXMucGF0aCx0aGlzLmV4dG5hbWUpOnZvaWQgMH1zZXQgc3RlbShuKXtxKG4sXCJzdGVtXCIpLEwobixcInN0ZW1cIiksdGhpcy5wYXRoPUIodGhpcy5kaXJuYW1lfHxcIlwiLG4rKHRoaXMuZXh0bmFtZXx8XCJcIikpfXRvU3RyaW5nKG4pe3JldHVybih0aGlzLnZhbHVlfHxcIlwiKS50b1N0cmluZyhuKX1tZXNzYWdlKG4sZSxhKXtjb25zdCBpPW5ldyBUKG4sZSxhKTtyZXR1cm4gdGhpcy5wYXRoJiYoaS5uYW1lPXRoaXMucGF0aCtcIjpcIitpLm5hbWUsaS5maWxlPXRoaXMucGF0aCksaS5mYXRhbD0hMSx0aGlzLm1lc3NhZ2VzLnB1c2goaSksaX1pbmZvKG4sZSxhKXtjb25zdCBpPXRoaXMubWVzc2FnZShuLGUsYSk7cmV0dXJuIGkuZmF0YWw9bnVsbCxpfWZhaWwobixlLGEpe2NvbnN0IGk9dGhpcy5tZXNzYWdlKG4sZSxhKTt0aHJvdyBpLmZhdGFsPSEwLGl9fWZ1bmN0aW9uIEwobixlKXtpZihuJiZuLmluY2x1ZGVzKE4pKXRocm93IG5ldyBFcnJvcihcImBcIitlK1wiYCBjYW5ub3QgYmUgYSBwYXRoOiBkaWQgbm90IGV4cGVjdCBgXCIrTitcImBcIil9ZnVuY3Rpb24gcShuLGUpe2lmKCFuKXRocm93IG5ldyBFcnJvcihcImBcIitlK1wiYCBjYW5ub3QgYmUgZW1wdHlcIil9ZnVuY3Rpb24gSChuLGUpe2lmKCFuKXRocm93IG5ldyBFcnJvcihcIlNldHRpbmcgYFwiK2UrXCJgIHJlcXVpcmVzIGBwYXRoYCB0byBiZSBzZXQgdG9vXCIpfWNvbnN0IEo9ZnVuY3Rpb24gbigpe2NvbnN0IGU9ZnVuY3Rpb24oKXtjb25zdCBuPVtdLGU9e3J1bjpmdW5jdGlvbiguLi5lKXtsZXQgYT0tMTtjb25zdCBpPWUucG9wKCk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgZnVuY3Rpb24gYXMgbGFzdCBhcmd1bWVudCwgbm90IFwiK2kpOyFmdW5jdGlvbiByKHQsLi4ubyl7Y29uc3QgTT1uWysrYV07bGV0IHM9LTE7aWYodClpKHQpO2Vsc2V7Zm9yKDsrK3M8ZS5sZW5ndGg7KW51bGwhPT1vW3NdJiZ2b2lkIDAhPT1vW3NdfHwob1tzXT1lW3NdKTtlPW8sTT9mdW5jdGlvbihuLGUpe2xldCBhO3JldHVybiBmdW5jdGlvbiguLi5lKXtjb25zdCB0PW4ubGVuZ3RoPmUubGVuZ3RoO2xldCBvO3QmJmUucHVzaChpKTt0cnl7bz1uKC4uLmUpfWNhdGNoKG4pe2NvbnN0IGU9bjtpZih0JiZhKXRocm93IGU7cmV0dXJuIGkoZSl9dHx8KG8gaW5zdGFuY2VvZiBQcm9taXNlP28udGhlbihyLGkpOm8gaW5zdGFuY2VvZiBFcnJvcj9pKG8pOnIobykpfTtmdW5jdGlvbiBpKG4sLi4uaSl7YXx8KGE9ITAsZShuLC4uLmkpKX1mdW5jdGlvbiByKG4pe2kobnVsbCxuKX19KE0scikoLi4ubyk6aShudWxsLC4uLm8pfX0obnVsbCwuLi5lKX0sdXNlOmZ1bmN0aW9uKGEpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBtaWRkZWx3YXJlYCB0byBiZSBhIGZ1bmN0aW9uLCBub3QgXCIrYSk7cmV0dXJuIG4ucHVzaChhKSxlfX07cmV0dXJuIGV9KCksYT1bXTtsZXQgaSxyPXt9LHQ9LTE7cmV0dXJuIG8uZGF0YT1mdW5jdGlvbihuLGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiBuPzI9PT1hcmd1bWVudHMubGVuZ3RoPyhLKFwiZGF0YVwiLGkpLHJbbl09ZSxvKTpPLmNhbGwocixuKSYmcltuXXx8bnVsbDpuPyhLKFwiZGF0YVwiLGkpLHI9bixvKTpyfSxvLlBhcnNlcj12b2lkIDAsby5Db21waWxlcj12b2lkIDAsby5mcmVlemU9ZnVuY3Rpb24oKXtpZihpKXJldHVybiBvO2Zvcig7Kyt0PGEubGVuZ3RoOyl7Y29uc3RbbiwuLi5pXT1hW3RdO2lmKCExPT09aVswXSljb250aW51ZTshMD09PWlbMF0mJihpWzFdPXZvaWQgMCk7Y29uc3Qgcj1uLmNhbGwobywuLi5pKTtcImZ1bmN0aW9uXCI9PXR5cGVvZiByJiZlLnVzZShyKX1yZXR1cm4gaT0hMCx0PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSxvfSxvLmF0dGFjaGVycz1hLG8udXNlPWZ1bmN0aW9uKG4sLi4uZSl7bGV0IHQ7aWYoSyhcInVzZVwiLGkpLG51bGw9PW4pO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbiljKG4sLi4uZSk7ZWxzZXtpZihcIm9iamVjdFwiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgdXNhYmxlIHZhbHVlLCBub3QgYFwiK24rXCJgXCIpO0FycmF5LmlzQXJyYXkobik/bChuKTpzKG4pfXJldHVybiB0JiYoci5zZXR0aW5ncz1PYmplY3QuYXNzaWduKHIuc2V0dGluZ3N8fHt9LHQpKSxvO2Z1bmN0aW9uIE0obil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbiljKG4pO2Vsc2V7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGBcIituK1wiYFwiKTtpZihBcnJheS5pc0FycmF5KG4pKXtjb25zdFtlLC4uLmFdPW47YyhlLC4uLmEpfWVsc2UgcyhuKX19ZnVuY3Rpb24gcyhuKXtsKG4ucGx1Z2lucyksbi5zZXR0aW5ncyYmKHQ9T2JqZWN0LmFzc2lnbih0fHx7fSxuLnNldHRpbmdzKSl9ZnVuY3Rpb24gbChuKXtsZXQgZT0tMTtpZihudWxsPT1uKTtlbHNle2lmKCFBcnJheS5pc0FycmF5KG4pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGBcIituK1wiYFwiKTtmb3IoOysrZTxuLmxlbmd0aDspTShuW2VdKX19ZnVuY3Rpb24gYyhuLGUpe2xldCBpLHI9LTE7Zm9yKDsrK3I8YS5sZW5ndGg7KWlmKGFbcl1bMF09PT1uKXtpPWFbcl07YnJlYWt9aT8oayhpWzFdKSYmayhlKSYmKGU9dighMCxpWzFdLGUpKSxpWzFdPWUpOmEucHVzaChbLi4uYXJndW1lbnRzXSl9fSxvLnBhcnNlPWZ1bmN0aW9uKG4pe28uZnJlZXplKCk7Y29uc3QgZT1fKG4pLGE9by5QYXJzZXI7cmV0dXJuIFYoXCJwYXJzZVwiLGEpLFgoYSxcInBhcnNlXCIpP25ldyBhKFN0cmluZyhlKSxlKS5wYXJzZSgpOmEoU3RyaW5nKGUpLGUpfSxvLnN0cmluZ2lmeT1mdW5jdGlvbihuLGUpe28uZnJlZXplKCk7Y29uc3QgYT1fKGUpLGk9by5Db21waWxlcjtyZXR1cm4gVyhcInN0cmluZ2lmeVwiLGkpLCQobiksWChpLFwiY29tcGlsZVwiKT9uZXcgaShuLGEpLmNvbXBpbGUoKTppKG4sYSl9LG8ucnVuPWZ1bmN0aW9uKG4sYSxpKXtpZigkKG4pLG8uZnJlZXplKCksaXx8XCJmdW5jdGlvblwiIT10eXBlb2YgYXx8KGk9YSxhPXZvaWQgMCksIWkpcmV0dXJuIG5ldyBQcm9taXNlKHIpO2Z1bmN0aW9uIHIocix0KXtlLnJ1bihuLF8oYSksKGZ1bmN0aW9uKGUsYSxvKXthPWF8fG4sZT90KGUpOnI/cihhKTppKG51bGwsYSxvKX0pKX1yKG51bGwsaSl9LG8ucnVuU3luYz1mdW5jdGlvbihuLGUpe2xldCBhLGk7cmV0dXJuIG8ucnVuKG4sZSwoZnVuY3Rpb24obixlKXtHKG4pLGE9ZSxpPSEwfSkpLFEoXCJydW5TeW5jXCIsXCJydW5cIixpKSxhfSxvLnByb2Nlc3M9ZnVuY3Rpb24obixlKXtpZihvLmZyZWV6ZSgpLFYoXCJwcm9jZXNzXCIsby5QYXJzZXIpLFcoXCJwcm9jZXNzXCIsby5Db21waWxlciksIWUpcmV0dXJuIG5ldyBQcm9taXNlKGEpO2Z1bmN0aW9uIGEoYSxpKXtjb25zdCByPV8obik7ZnVuY3Rpb24gdChuLHIpe258fCFyP2kobik6YT9hKHIpOmUobnVsbCxyKX1vLnJ1bihvLnBhcnNlKHIpLHIsKChuLGUsYSk9PntpZighbiYmZSYmYSl7Y29uc3Qgcj1vLnN0cmluZ2lmeShlLGEpO251bGw9PXJ8fChcInN0cmluZ1wiPT10eXBlb2YoaT1yKXx8dyhpKT9hLnZhbHVlPXI6YS5yZXN1bHQ9ciksdChuLGEpfWVsc2UgdChuKTt2YXIgaX0pKX1hKG51bGwsZSl9LG8ucHJvY2Vzc1N5bmM9ZnVuY3Rpb24obil7bGV0IGU7by5mcmVlemUoKSxWKFwicHJvY2Vzc1N5bmNcIixvLlBhcnNlciksVyhcInByb2Nlc3NTeW5jXCIsby5Db21waWxlcik7Y29uc3QgYT1fKG4pO3JldHVybiBvLnByb2Nlc3MoYSwoZnVuY3Rpb24obil7ZT0hMCxHKG4pfSkpLFEoXCJwcm9jZXNzU3luY1wiLFwicHJvY2Vzc1wiLGUpLGF9LG87ZnVuY3Rpb24gbygpe2NvbnN0IGU9bigpO2xldCBpPS0xO2Zvcig7KytpPGEubGVuZ3RoOyllLnVzZSguLi5hW2ldKTtyZXR1cm4gZS5kYXRhKHYoITAse30scikpLGV9fSgpLmZyZWV6ZSgpLE89e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWChuLGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIG4mJm4ucHJvdG90eXBlJiYoZnVuY3Rpb24obil7bGV0IGU7Zm9yKGUgaW4gbilpZihPLmNhbGwobixlKSlyZXR1cm4hMDtyZXR1cm4hMX0obi5wcm90b3R5cGUpfHxlIGluIG4ucHJvdG90eXBlKX1mdW5jdGlvbiBWKG4sZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGBcIituK1wiYCB3aXRob3V0IGBQYXJzZXJgXCIpfWZ1bmN0aW9uIFcobixlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYFwiK24rXCJgIHdpdGhvdXQgYENvbXBpbGVyYFwiKX1mdW5jdGlvbiBLKG4sZSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY2FsbCBgXCIrbitcImAgb24gYSBmcm96ZW4gcHJvY2Vzc29yLlxcbkNyZWF0ZSBhIG5ldyBwcm9jZXNzb3IgZmlyc3QsIGJ5IGNhbGxpbmcgaXQ6IHVzZSBgcHJvY2Vzc29yKClgIGluc3RlYWQgb2YgYHByb2Nlc3NvcmAuXCIpfWZ1bmN0aW9uICQobil7aWYoIWsobil8fFwic3RyaW5nXCIhPXR5cGVvZiBuLnR5cGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG5vZGUsIGdvdCBgXCIrbitcImBcIil9ZnVuY3Rpb24gUShuLGUsYSl7aWYoIWEpdGhyb3cgbmV3IEVycm9yKFwiYFwiK24rXCJgIGZpbmlzaGVkIGFzeW5jLiBVc2UgYFwiK2UrXCJgIGluc3RlYWRcIil9ZnVuY3Rpb24gXyhuKXtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIEJvb2xlYW4obiYmXCJvYmplY3RcIj09dHlwZW9mIG4mJlwibWVzc2FnZVwiaW4gbiYmXCJtZXNzYWdlc1wiaW4gbil9KG4pP246bmV3IGoobil9ZnVuY3Rpb24gbm4obil7Y29uc3QgZT1jbGFzcyBleHRlbmRzIG57fSxhPWUucHJvdG90eXBlO2xldCBpO2ZvcihpIGluIGEpe2NvbnN0IG49YVtpXTtuJiZcIm9iamVjdFwiPT10eXBlb2YgbiYmKGFbaV09XCJjb25jYXRcImluIG4/bi5jb25jYXQoKTpPYmplY3QuYXNzaWduKHt9LG4pKX1yZXR1cm4gZX12YXIgZW49YSg4MDIpLGFuPWEoNzY2KSxybj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI7aWYoKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCImXCI9PT1lbihuKSYmKHI9KGk9YS5jaGlsZHJlbilbZSsxXSwhKGU+MCYmXCJXb3JkTm9kZVwiPT09aVtlLTFdLnR5cGUpJiZyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUpKXJldHVybiBpLnNwbGljZShlLDEpLHIuY2hpbGRyZW4udW5zaGlmdChuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxlLTF9KSksdG49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQ7aWYoZT4wJiYoXCJTeW1ib2xOb2RlXCI9PT1uLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1uLnR5cGUpJiZcIi1cIj09PWVuKG4pJiYocj0oaT1hLmNoaWxkcmVuKVtlLTFdLCghKHQ9aVtlKzFdKXx8XCJXb3JkTm9kZVwiIT09dC50eXBlKSYmciYmXCJXb3JkTm9kZVwiPT09ci50eXBlKSlyZXR1cm4gaS5zcGxpY2UoZSwxKSxyLmNoaWxkcmVuLnB1c2gobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfSkpLG9uPS9eKFshXCInKS4/XFx1MDBCQlxcdTBGM0JcXHUwRjNEXFx1MTY5Q1xcdTIwMTlcXHUyMDFEXFx1MjAyNlxcdTIwM0FcXHUyMDNEXFx1MjA0NlxcdTIwN0VcXHUyMDhFXFx1MjMwOVxcdTIzMEJcXHUyMzJBXFx1Mjc2OVxcdTI3NkJcXHUyNzZEXFx1Mjc2RlxcdTI3NzFcXHUyNzczXFx1Mjc3NVxcdTI3QzZcXHUyN0U3XFx1MjdFOVxcdTI3RUJcXHUyN0VEXFx1MjdFRlxcdTI5ODRcXHUyOTg2XFx1Mjk4OFxcdTI5OEFcXHUyOThDXFx1Mjk4RVxcdTI5OTBcXHUyOTkyXFx1Mjk5NFxcdTI5OTZcXHUyOTk4XFx1MjlEOVxcdTI5REJcXHUyOUZEXFx1MkUwM1xcdTJFMDVcXHUyRTBBXFx1MkUwRFxcdTJFMURcXHUyRTIxXFx1MkUyM1xcdTJFMjVcXHUyRTI3XFx1MkUyOVxcdTMwMDlcXHUzMDBCXFx1MzAwRFxcdTMwMEZcXHUzMDExXFx1MzAxNVxcdTMwMTdcXHUzMDE5XFx1MzAxQlxcdTMwMUVcXHUzMDFGXFx1RkQzRVxcdUZFMThcXHVGRTM2XFx1RkUzOFxcdUZFM0FcXHVGRTNDXFx1RkUzRVxcdUZFNDBcXHVGRTQyXFx1RkU0NFxcdUZFNDhcXHVGRTVBXFx1RkU1Q1xcdUZFNUVcXHVGRjA5XFx1RkYzRFxcdUZGNURcXHVGRjYwXFx1RkY2M1xcXX1dKVxcMSokLyxNbj0vXlsgXFx0XSooKFxccj9cXG58XFxyKVtcXHQgXSopezIsfSQvLHNuPS9eKFshLj9cXHUyMDI2XFx1MjAzRF0rKSQvLGxuPS9eKFsmJ1xcLS46PT9AXFx1MDBBRFxcdTAwQjdcXHUyMDEwXFx1MjAxMVxcdTIwMTlcXHUyMDI3XXxfKykkLyxjbj0vXig/OltcXGRcXHUwMEIyXFx1MDBCM1xcdTAwQjlcXHUwMEJDLVxcdTAwQkVcXHUwNjYwLVxcdTA2NjlcXHUwNkYwLVxcdTA2RjlcXHUwN0MwLVxcdTA3QzlcXHUwOTY2LVxcdTA5NkZcXHUwOUU2LVxcdTA5RUZcXHUwOUY0LVxcdTA5RjlcXHUwQTY2LVxcdTBBNkZcXHUwQUU2LVxcdTBBRUZcXHUwQjY2LVxcdTBCNkZcXHUwQjcyLVxcdTBCNzdcXHUwQkU2LVxcdTBCRjJcXHUwQzY2LVxcdTBDNkZcXHUwQzc4LVxcdTBDN0VcXHUwQ0U2LVxcdTBDRUZcXHUwRDU4LVxcdTBENUVcXHUwRDY2LVxcdTBENzhcXHUwREU2LVxcdTBERUZcXHUwRTUwLVxcdTBFNTlcXHUwRUQwLVxcdTBFRDlcXHUwRjIwLVxcdTBGMzNcXHUxMDQwLVxcdTEwNDlcXHUxMDkwLVxcdTEwOTlcXHUxMzY5LVxcdTEzN0NcXHUxNkVFLVxcdTE2RjBcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODEwLVxcdTE4MTlcXHUxOTQ2LVxcdTE5NEZcXHUxOUQwLVxcdTE5REFcXHUxQTgwLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQjUwLVxcdTFCNTlcXHUxQkIwLVxcdTFCQjlcXHUxQzQwLVxcdTFDNDlcXHUxQzUwLVxcdTFDNTlcXHUyMDcwXFx1MjA3NC1cXHUyMDc5XFx1MjA4MC1cXHUyMDg5XFx1MjE1MC1cXHUyMTgyXFx1MjE4NS1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkNGRFxcdTMwMDdcXHUzMDIxLVxcdTMwMjlcXHUzMDM4LVxcdTMwM0FcXHUzMTkyLVxcdTMxOTVcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHVBNjIwLVxcdUE2MjlcXHVBNkU2LVxcdUE2RUZcXHVBODMwLVxcdUE4MzVcXHVBOEQwLVxcdUE4RDlcXHVBOTAwLVxcdUE5MDlcXHVBOUQwLVxcdUE5RDlcXHVBOUYwLVxcdUE5RjlcXHVBQTUwLVxcdUFBNTlcXHVBQkYwLVxcdUFCRjlcXHVGRjEwLVxcdUZGMTldfFxcdUQ4MDBbXFx1REQwNy1cXHVERDMzXFx1REQ0MC1cXHVERDc4XFx1REQ4QVxcdUREOEJcXHVERUUxLVxcdURFRkJcXHVERjIwLVxcdURGMjNcXHVERjQxXFx1REY0QVxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQ0EwLVxcdURDQTldfFxcdUQ4MDJbXFx1REM1OC1cXHVEQzVGXFx1REM3OS1cXHVEQzdGXFx1RENBNy1cXHVEQ0FGXFx1RENGQi1cXHVEQ0ZGXFx1REQxNi1cXHVERDFCXFx1RERCQ1xcdUREQkRcXHVEREMwLVxcdUREQ0ZcXHVEREQyLVxcdURERkZcXHVERTQwLVxcdURFNDhcXHVERTdEXFx1REU3RVxcdURFOUQtXFx1REU5RlxcdURFRUItXFx1REVFRlxcdURGNTgtXFx1REY1RlxcdURGNzgtXFx1REY3RlxcdURGQTktXFx1REZBRl18XFx1RDgwM1tcXHVEQ0ZBLVxcdURDRkZcXHVERDMwLVxcdUREMzlcXHVERTYwLVxcdURFN0VcXHVERjFELVxcdURGMjZcXHVERjUxLVxcdURGNTRcXHVERkM1LVxcdURGQ0JdfFxcdUQ4MDRbXFx1REM1Mi1cXHVEQzZGXFx1RENGMC1cXHVEQ0Y5XFx1REQzNi1cXHVERDNGXFx1REREMC1cXHVEREQ5XFx1RERFMS1cXHVEREY0XFx1REVGMC1cXHVERUY5XXxcXHVEODA1W1xcdURDNTAtXFx1REM1OVxcdURDRDAtXFx1RENEOVxcdURFNTAtXFx1REU1OVxcdURFQzAtXFx1REVDOVxcdURGMzAtXFx1REYzQl18XFx1RDgwNltcXHVEQ0UwLVxcdURDRjJcXHVERDUwLVxcdURENTldfFxcdUQ4MDdbXFx1REM1MC1cXHVEQzZDXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE5XFx1REZDMC1cXHVERkQ0XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RV18XFx1RDgxQVtcXHVERTYwLVxcdURFNjlcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFdfFxcdUQ4MUJbXFx1REU4MC1cXHVERTk2XXxcXHVEODM0W1xcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVERkNFLVxcdURGRkZdfFxcdUQ4MzhbXFx1REQ0MC1cXHVERDQ5XFx1REVGMC1cXHVERUY5XXxcXHVEODNBW1xcdURDQzctXFx1RENDRlxcdURENTAtXFx1REQ1OV18XFx1RDgzQltcXHVEQzcxLVxcdURDQUJcXHVEQ0FELVxcdURDQUZcXHVEQ0IxLVxcdURDQjRcXHVERDAxLVxcdUREMkRcXHVERDJGLVxcdUREM0RdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV0pKyQvLFNuPS9eXFxkLyx1bj0vXig/OlthLXpcXHUwMEI1XFx1MDBERi1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGXFx1MDEwMVxcdTAxMDNcXHUwMTA1XFx1MDEwN1xcdTAxMDlcXHUwMTBCXFx1MDEwRFxcdTAxMEZcXHUwMTExXFx1MDExM1xcdTAxMTVcXHUwMTE3XFx1MDExOVxcdTAxMUJcXHUwMTFEXFx1MDExRlxcdTAxMjFcXHUwMTIzXFx1MDEyNVxcdTAxMjdcXHUwMTI5XFx1MDEyQlxcdTAxMkRcXHUwMTJGXFx1MDEzMVxcdTAxMzNcXHUwMTM1XFx1MDEzN1xcdTAxMzhcXHUwMTNBXFx1MDEzQ1xcdTAxM0VcXHUwMTQwXFx1MDE0MlxcdTAxNDRcXHUwMTQ2XFx1MDE0OFxcdTAxNDlcXHUwMTRCXFx1MDE0RFxcdTAxNEZcXHUwMTUxXFx1MDE1M1xcdTAxNTVcXHUwMTU3XFx1MDE1OVxcdTAxNUJcXHUwMTVEXFx1MDE1RlxcdTAxNjFcXHUwMTYzXFx1MDE2NVxcdTAxNjdcXHUwMTY5XFx1MDE2QlxcdTAxNkRcXHUwMTZGXFx1MDE3MVxcdTAxNzNcXHUwMTc1XFx1MDE3N1xcdTAxN0FcXHUwMTdDXFx1MDE3RS1cXHUwMTgwXFx1MDE4M1xcdTAxODVcXHUwMTg4XFx1MDE4Q1xcdTAxOERcXHUwMTkyXFx1MDE5NVxcdTAxOTktXFx1MDE5QlxcdTAxOUVcXHUwMUExXFx1MDFBM1xcdTAxQTVcXHUwMUE4XFx1MDFBQVxcdTAxQUJcXHUwMUFEXFx1MDFCMFxcdTAxQjRcXHUwMUI2XFx1MDFCOVxcdTAxQkFcXHUwMUJELVxcdTAxQkZcXHUwMUM2XFx1MDFDOVxcdTAxQ0NcXHUwMUNFXFx1MDFEMFxcdTAxRDJcXHUwMUQ0XFx1MDFENlxcdTAxRDhcXHUwMURBXFx1MDFEQ1xcdTAxRERcXHUwMURGXFx1MDFFMVxcdTAxRTNcXHUwMUU1XFx1MDFFN1xcdTAxRTlcXHUwMUVCXFx1MDFFRFxcdTAxRUZcXHUwMUYwXFx1MDFGM1xcdTAxRjVcXHUwMUY5XFx1MDFGQlxcdTAxRkRcXHUwMUZGXFx1MDIwMVxcdTAyMDNcXHUwMjA1XFx1MDIwN1xcdTAyMDlcXHUwMjBCXFx1MDIwRFxcdTAyMEZcXHUwMjExXFx1MDIxM1xcdTAyMTVcXHUwMjE3XFx1MDIxOVxcdTAyMUJcXHUwMjFEXFx1MDIxRlxcdTAyMjFcXHUwMjIzXFx1MDIyNVxcdTAyMjdcXHUwMjI5XFx1MDIyQlxcdTAyMkRcXHUwMjJGXFx1MDIzMVxcdTAyMzMtXFx1MDIzOVxcdTAyM0NcXHUwMjNGXFx1MDI0MFxcdTAyNDJcXHUwMjQ3XFx1MDI0OVxcdTAyNEJcXHUwMjREXFx1MDI0Ri1cXHUwMjkzXFx1MDI5NS1cXHUwMkFGXFx1MDM3MVxcdTAzNzNcXHUwMzc3XFx1MDM3Qi1cXHUwMzdEXFx1MDM5MFxcdTAzQUMtXFx1MDNDRVxcdTAzRDBcXHUwM0QxXFx1MDNENS1cXHUwM0Q3XFx1MDNEOVxcdTAzREJcXHUwM0REXFx1MDNERlxcdTAzRTFcXHUwM0UzXFx1MDNFNVxcdTAzRTdcXHUwM0U5XFx1MDNFQlxcdTAzRURcXHUwM0VGLVxcdTAzRjNcXHUwM0Y1XFx1MDNGOFxcdTAzRkJcXHUwM0ZDXFx1MDQzMC1cXHUwNDVGXFx1MDQ2MVxcdTA0NjNcXHUwNDY1XFx1MDQ2N1xcdTA0NjlcXHUwNDZCXFx1MDQ2RFxcdTA0NkZcXHUwNDcxXFx1MDQ3M1xcdTA0NzVcXHUwNDc3XFx1MDQ3OVxcdTA0N0JcXHUwNDdEXFx1MDQ3RlxcdTA0ODFcXHUwNDhCXFx1MDQ4RFxcdTA0OEZcXHUwNDkxXFx1MDQ5M1xcdTA0OTVcXHUwNDk3XFx1MDQ5OVxcdTA0OUJcXHUwNDlEXFx1MDQ5RlxcdTA0QTFcXHUwNEEzXFx1MDRBNVxcdTA0QTdcXHUwNEE5XFx1MDRBQlxcdTA0QURcXHUwNEFGXFx1MDRCMVxcdTA0QjNcXHUwNEI1XFx1MDRCN1xcdTA0QjlcXHUwNEJCXFx1MDRCRFxcdTA0QkZcXHUwNEMyXFx1MDRDNFxcdTA0QzZcXHUwNEM4XFx1MDRDQVxcdTA0Q0NcXHUwNENFXFx1MDRDRlxcdTA0RDFcXHUwNEQzXFx1MDRENVxcdTA0RDdcXHUwNEQ5XFx1MDREQlxcdTA0RERcXHUwNERGXFx1MDRFMVxcdTA0RTNcXHUwNEU1XFx1MDRFN1xcdTA0RTlcXHUwNEVCXFx1MDRFRFxcdTA0RUZcXHUwNEYxXFx1MDRGM1xcdTA0RjVcXHUwNEY3XFx1MDRGOVxcdTA0RkJcXHUwNEZEXFx1MDRGRlxcdTA1MDFcXHUwNTAzXFx1MDUwNVxcdTA1MDdcXHUwNTA5XFx1MDUwQlxcdTA1MERcXHUwNTBGXFx1MDUxMVxcdTA1MTNcXHUwNTE1XFx1MDUxN1xcdTA1MTlcXHUwNTFCXFx1MDUxRFxcdTA1MUZcXHUwNTIxXFx1MDUyM1xcdTA1MjVcXHUwNTI3XFx1MDUyOVxcdTA1MkJcXHUwNTJEXFx1MDUyRlxcdTA1NjAtXFx1MDU4OFxcdTEwRDAtXFx1MTBGQVxcdTEwRkQtXFx1MTBGRlxcdTEzRjgtXFx1MTNGRFxcdTFDODAtXFx1MUM4OFxcdTFEMDAtXFx1MUQyQlxcdTFENkItXFx1MUQ3N1xcdTFENzktXFx1MUQ5QVxcdTFFMDFcXHUxRTAzXFx1MUUwNVxcdTFFMDdcXHUxRTA5XFx1MUUwQlxcdTFFMERcXHUxRTBGXFx1MUUxMVxcdTFFMTNcXHUxRTE1XFx1MUUxN1xcdTFFMTlcXHUxRTFCXFx1MUUxRFxcdTFFMUZcXHUxRTIxXFx1MUUyM1xcdTFFMjVcXHUxRTI3XFx1MUUyOVxcdTFFMkJcXHUxRTJEXFx1MUUyRlxcdTFFMzFcXHUxRTMzXFx1MUUzNVxcdTFFMzdcXHUxRTM5XFx1MUUzQlxcdTFFM0RcXHUxRTNGXFx1MUU0MVxcdTFFNDNcXHUxRTQ1XFx1MUU0N1xcdTFFNDlcXHUxRTRCXFx1MUU0RFxcdTFFNEZcXHUxRTUxXFx1MUU1M1xcdTFFNTVcXHUxRTU3XFx1MUU1OVxcdTFFNUJcXHUxRTVEXFx1MUU1RlxcdTFFNjFcXHUxRTYzXFx1MUU2NVxcdTFFNjdcXHUxRTY5XFx1MUU2QlxcdTFFNkRcXHUxRTZGXFx1MUU3MVxcdTFFNzNcXHUxRTc1XFx1MUU3N1xcdTFFNzlcXHUxRTdCXFx1MUU3RFxcdTFFN0ZcXHUxRTgxXFx1MUU4M1xcdTFFODVcXHUxRTg3XFx1MUU4OVxcdTFFOEJcXHUxRThEXFx1MUU4RlxcdTFFOTFcXHUxRTkzXFx1MUU5NS1cXHUxRTlEXFx1MUU5RlxcdTFFQTFcXHUxRUEzXFx1MUVBNVxcdTFFQTdcXHUxRUE5XFx1MUVBQlxcdTFFQURcXHUxRUFGXFx1MUVCMVxcdTFFQjNcXHUxRUI1XFx1MUVCN1xcdTFFQjlcXHUxRUJCXFx1MUVCRFxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVDOVxcdTFFQ0JcXHUxRUNEXFx1MUVDRlxcdTFFRDFcXHUxRUQzXFx1MUVENVxcdTFFRDdcXHUxRUQ5XFx1MUVEQlxcdTFFRERcXHUxRURGXFx1MUVFMVxcdTFFRTNcXHUxRUU1XFx1MUVFN1xcdTFFRTlcXHUxRUVCXFx1MUVFRFxcdTFFRUZcXHUxRUYxXFx1MUVGM1xcdTFFRjVcXHUxRUY3XFx1MUVGOVxcdTFFRkJcXHUxRUZEXFx1MUVGRi1cXHUxRjA3XFx1MUYxMC1cXHUxRjE1XFx1MUYyMC1cXHUxRjI3XFx1MUYzMC1cXHUxRjM3XFx1MUY0MC1cXHUxRjQ1XFx1MUY1MC1cXHUxRjU3XFx1MUY2MC1cXHUxRjY3XFx1MUY3MC1cXHUxRjdEXFx1MUY4MC1cXHUxRjg3XFx1MUY5MC1cXHUxRjk3XFx1MUZBMC1cXHUxRkE3XFx1MUZCMC1cXHUxRkI0XFx1MUZCNlxcdTFGQjdcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNlxcdTFGQzdcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2XFx1MUZEN1xcdTFGRTAtXFx1MUZFN1xcdTFGRjItXFx1MUZGNFxcdTFGRjZcXHUxRkY3XFx1MjEwQVxcdTIxMEVcXHUyMTBGXFx1MjExM1xcdTIxMkZcXHUyMTM0XFx1MjEzOVxcdTIxM0NcXHUyMTNEXFx1MjE0Ni1cXHUyMTQ5XFx1MjE0RVxcdTIxODRcXHUyQzMwLVxcdTJDNUVcXHUyQzYxXFx1MkM2NVxcdTJDNjZcXHUyQzY4XFx1MkM2QVxcdTJDNkNcXHUyQzcxXFx1MkM3M1xcdTJDNzRcXHUyQzc2LVxcdTJDN0JcXHUyQzgxXFx1MkM4M1xcdTJDODVcXHUyQzg3XFx1MkM4OVxcdTJDOEJcXHUyQzhEXFx1MkM4RlxcdTJDOTFcXHUyQzkzXFx1MkM5NVxcdTJDOTdcXHUyQzk5XFx1MkM5QlxcdTJDOURcXHUyQzlGXFx1MkNBMVxcdTJDQTNcXHUyQ0E1XFx1MkNBN1xcdTJDQTlcXHUyQ0FCXFx1MkNBRFxcdTJDQUZcXHUyQ0IxXFx1MkNCM1xcdTJDQjVcXHUyQ0I3XFx1MkNCOVxcdTJDQkJcXHUyQ0JEXFx1MkNCRlxcdTJDQzFcXHUyQ0MzXFx1MkNDNVxcdTJDQzdcXHUyQ0M5XFx1MkNDQlxcdTJDQ0RcXHUyQ0NGXFx1MkNEMVxcdTJDRDNcXHUyQ0Q1XFx1MkNEN1xcdTJDRDlcXHUyQ0RCXFx1MkNERFxcdTJDREZcXHUyQ0UxXFx1MkNFM1xcdTJDRTRcXHUyQ0VDXFx1MkNFRVxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdUE2NDFcXHVBNjQzXFx1QTY0NVxcdUE2NDdcXHVBNjQ5XFx1QTY0QlxcdUE2NERcXHVBNjRGXFx1QTY1MVxcdUE2NTNcXHVBNjU1XFx1QTY1N1xcdUE2NTlcXHVBNjVCXFx1QTY1RFxcdUE2NUZcXHVBNjYxXFx1QTY2M1xcdUE2NjVcXHVBNjY3XFx1QTY2OVxcdUE2NkJcXHVBNjZEXFx1QTY4MVxcdUE2ODNcXHVBNjg1XFx1QTY4N1xcdUE2ODlcXHVBNjhCXFx1QTY4RFxcdUE2OEZcXHVBNjkxXFx1QTY5M1xcdUE2OTVcXHVBNjk3XFx1QTY5OVxcdUE2OUJcXHVBNzIzXFx1QTcyNVxcdUE3MjdcXHVBNzI5XFx1QTcyQlxcdUE3MkRcXHVBNzJGLVxcdUE3MzFcXHVBNzMzXFx1QTczNVxcdUE3MzdcXHVBNzM5XFx1QTczQlxcdUE3M0RcXHVBNzNGXFx1QTc0MVxcdUE3NDNcXHVBNzQ1XFx1QTc0N1xcdUE3NDlcXHVBNzRCXFx1QTc0RFxcdUE3NEZcXHVBNzUxXFx1QTc1M1xcdUE3NTVcXHVBNzU3XFx1QTc1OVxcdUE3NUJcXHVBNzVEXFx1QTc1RlxcdUE3NjFcXHVBNzYzXFx1QTc2NVxcdUE3NjdcXHVBNzY5XFx1QTc2QlxcdUE3NkRcXHVBNzZGXFx1QTc3MS1cXHVBNzc4XFx1QTc3QVxcdUE3N0NcXHVBNzdGXFx1QTc4MVxcdUE3ODNcXHVBNzg1XFx1QTc4N1xcdUE3OENcXHVBNzhFXFx1QTc5MVxcdUE3OTMtXFx1QTc5NVxcdUE3OTdcXHVBNzk5XFx1QTc5QlxcdUE3OURcXHVBNzlGXFx1QTdBMVxcdUE3QTNcXHVBN0E1XFx1QTdBN1xcdUE3QTlcXHVBN0FGXFx1QTdCNVxcdUE3QjdcXHVBN0I5XFx1QTdCQlxcdUE3QkRcXHVBN0JGXFx1QTdDM1xcdUE3QzhcXHVBN0NBXFx1QTdGNlxcdUE3RkFcXHVBQjMwLVxcdUFCNUFcXHVBQjYwLVxcdUFCNjhcXHVBQjcwLVxcdUFCQkZcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGRjQxLVxcdUZGNUFdfFxcdUQ4MDFbXFx1REMyOC1cXHVEQzRGXFx1RENEOC1cXHVEQ0ZCXXxcXHVEODAzW1xcdURDQzAtXFx1RENGMl18XFx1RDgwNltcXHVEQ0MwLVxcdURDREZdfFxcdUQ4MUJbXFx1REU2MC1cXHVERTdGXXxcXHVEODM1W1xcdURDMUEtXFx1REMzM1xcdURDNEUtXFx1REM1NFxcdURDNTYtXFx1REM2N1xcdURDODItXFx1REM5QlxcdURDQjYtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdURDQ0ZcXHVEQ0VBLVxcdUREMDNcXHVERDFFLVxcdUREMzdcXHVERDUyLVxcdURENkJcXHVERDg2LVxcdUREOUZcXHVEREJBLVxcdURERDNcXHVEREVFLVxcdURFMDdcXHVERTIyLVxcdURFM0JcXHVERTU2LVxcdURFNkZcXHVERThBLVxcdURFQTVcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRTFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMUJcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNTVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGOEZcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQzlcXHVERkNCXXxcXHVEODNBW1xcdUREMjItXFx1REQ0M10pLyxkbj0vW1xcdUQ4MDAtXFx1REZGRl0vLG1uPS9bIVwiJy0pLC0vOjs/Wy1cXF1fe31cXHUwMEExXFx1MDBBN1xcdTAwQUJcXHUwMEI2XFx1MDBCN1xcdTAwQkJcXHUwMEJGXFx1MDM3RVxcdTAzODdcXHUwNTVBLVxcdTA1NUZcXHUwNTg5XFx1MDU4QVxcdTA1QkVcXHUwNUMwXFx1MDVDM1xcdTA1QzZcXHUwNUYzXFx1MDVGNFxcdTA2MDlcXHUwNjBBXFx1MDYwQ1xcdTA2MERcXHUwNjFCXFx1MDYxRVxcdTA2MUZcXHUwNjZBLVxcdTA2NkRcXHUwNkQ0XFx1MDcwMC1cXHUwNzBEXFx1MDdGNy1cXHUwN0Y5XFx1MDgzMC1cXHUwODNFXFx1MDg1RVxcdTA5NjRcXHUwOTY1XFx1MDk3MFxcdTA5RkRcXHUwQTc2XFx1MEFGMFxcdTBDNzdcXHUwQzg0XFx1MERGNFxcdTBFNEZcXHUwRTVBXFx1MEU1QlxcdTBGMDQtXFx1MEYxMlxcdTBGMTRcXHUwRjNBLVxcdTBGM0RcXHUwRjg1XFx1MEZEMC1cXHUwRkQ0XFx1MEZEOVxcdTBGREFcXHUxMDRBLVxcdTEwNEZcXHUxMEZCXFx1MTM2MC1cXHUxMzY4XFx1MTQwMFxcdTE2NkVcXHUxNjlCXFx1MTY5Q1xcdTE2RUItXFx1MTZFRFxcdTE3MzVcXHUxNzM2XFx1MTdENC1cXHUxN0Q2XFx1MTdEOC1cXHUxN0RBXFx1MTgwMC1cXHUxODBBXFx1MTk0NFxcdTE5NDVcXHUxQTFFXFx1MUExRlxcdTFBQTAtXFx1MUFBNlxcdTFBQTgtXFx1MUFBRFxcdTFCNUEtXFx1MUI2MFxcdTFCRkMtXFx1MUJGRlxcdTFDM0ItXFx1MUMzRlxcdTFDN0VcXHUxQzdGXFx1MUNDMC1cXHUxQ0M3XFx1MUNEM1xcdTIwMTAtXFx1MjAxRlxcdTIwMjItXFx1MjAyN1xcdTIwMzItXFx1MjAzQVxcdTIwM0MtXFx1MjA0M1xcdTIwNDUtXFx1MjA1MVxcdTIwNTMtXFx1MjA1RVxcdTIwN0RcXHUyMDdFXFx1MjA4RFxcdTIwOEVcXHUyMzA4LVxcdTIzMEJcXHUyMzI5XFx1MjMyQVxcdTI3NjgtXFx1Mjc3NVxcdTI3QzVcXHUyN0M2XFx1MjdFNi1cXHUyN0VGXFx1Mjk4My1cXHUyOTk4XFx1MjlEOC1cXHUyOURCXFx1MjlGQ1xcdTI5RkRcXHUyQ0Y5LVxcdTJDRkNcXHUyQ0ZFXFx1MkNGRlxcdTJENzBcXHUyRTAwLVxcdTJFMkVcXHUyRTMwLVxcdTJFNEZcXHUyRTUyXFx1MzAwMS1cXHUzMDAzXFx1MzAwOC1cXHUzMDExXFx1MzAxNC1cXHUzMDFGXFx1MzAzMFxcdTMwM0RcXHUzMEEwXFx1MzBGQlxcdUE0RkVcXHVBNEZGXFx1QTYwRC1cXHVBNjBGXFx1QTY3M1xcdUE2N0VcXHVBNkYyLVxcdUE2RjdcXHVBODc0LVxcdUE4NzdcXHVBOENFXFx1QThDRlxcdUE4RjgtXFx1QThGQVxcdUE4RkNcXHVBOTJFXFx1QTkyRlxcdUE5NUZcXHVBOUMxLVxcdUE5Q0RcXHVBOURFXFx1QTlERlxcdUFBNUMtXFx1QUE1RlxcdUFBREVcXHVBQURGXFx1QUFGMFxcdUFBRjFcXHVBQkVCXFx1RkQzRVxcdUZEM0ZcXHVGRTEwLVxcdUZFMTlcXHVGRTMwLVxcdUZFNTJcXHVGRTU0LVxcdUZFNjFcXHVGRTYzXFx1RkU2OFxcdUZFNkFcXHVGRTZCXFx1RkYwMS1cXHVGRjAzXFx1RkYwNS1cXHVGRjBBXFx1RkYwQy1cXHVGRjBGXFx1RkYxQVxcdUZGMUJcXHVGRjFGXFx1RkYyMFxcdUZGM0ItXFx1RkYzRFxcdUZGM0ZcXHVGRjVCXFx1RkY1RFxcdUZGNUYtXFx1RkY2NV18XFx1RDgwMFtcXHVERDAwLVxcdUREMDJcXHVERjlGXFx1REZEMF18XFx1RDgwMVxcdURENkZ8XFx1RDgwMltcXHVEQzU3XFx1REQxRlxcdUREM0ZcXHVERTUwLVxcdURFNThcXHVERTdGXFx1REVGMC1cXHVERUY2XFx1REYzOS1cXHVERjNGXFx1REY5OS1cXHVERjlDXXxcXHVEODAzW1xcdURFQURcXHVERjU1LVxcdURGNTldfFxcdUQ4MDRbXFx1REM0Ny1cXHVEQzREXFx1RENCQlxcdURDQkNcXHVEQ0JFLVxcdURDQzFcXHVERDQwLVxcdURENDNcXHVERDc0XFx1REQ3NVxcdUREQzUtXFx1RERDOFxcdUREQ0RcXHVERERCXFx1RERERC1cXHVERERGXFx1REUzOC1cXHVERTNEXFx1REVBOV18XFx1RDgwNVtcXHVEQzRCLVxcdURDNEZcXHVEQzVBXFx1REM1QlxcdURDNURcXHVEQ0M2XFx1RERDMS1cXHVEREQ3XFx1REU0MS1cXHVERTQzXFx1REU2MC1cXHVERTZDXFx1REYzQy1cXHVERjNFXXxcXHVEODA2W1xcdURDM0JcXHVERDQ0LVxcdURENDZcXHVEREUyXFx1REUzRi1cXHVERTQ2XFx1REU5QS1cXHVERTlDXFx1REU5RS1cXHVERUEyXXxcXHVEODA3W1xcdURDNDEtXFx1REM0NVxcdURDNzBcXHVEQzcxXFx1REVGN1xcdURFRjhcXHVERkZGXXxcXHVEODA5W1xcdURDNzAtXFx1REM3NF18XFx1RDgxQVtcXHVERTZFXFx1REU2RlxcdURFRjVcXHVERjM3LVxcdURGM0JcXHVERjQ0XXxcXHVEODFCW1xcdURFOTctXFx1REU5QVxcdURGRTJdfFxcdUQ4MkZcXHVEQzlGfFxcdUQ4MzZbXFx1REU4Ny1cXHVERThCXXxcXHVEODNBW1xcdURENUVcXHVERDVGXS8scG49L1tcXGRBLVphLXpcXHUwMEFBXFx1MDBCMlxcdTAwQjNcXHUwMEI1XFx1MDBCOVxcdTAwQkFcXHUwMEJDLVxcdTAwQkVcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzMDAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4My1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjAtXFx1MDU4OFxcdTA1OTEtXFx1MDVCRFxcdTA1QkZcXHUwNUMxXFx1MDVDMlxcdTA1QzRcXHUwNUM1XFx1MDVDN1xcdTA1RDAtXFx1MDVFQVxcdTA1RUYtXFx1MDVGMlxcdTA2MTAtXFx1MDYxQVxcdTA2MjAtXFx1MDY2OVxcdTA2NkUtXFx1MDZEM1xcdTA2RDUtXFx1MDZEQ1xcdTA2REYtXFx1MDZFOFxcdTA2RUEtXFx1MDZGQ1xcdTA2RkZcXHUwNzEwLVxcdTA3NEFcXHUwNzRELVxcdTA3QjFcXHUwN0MwLVxcdTA3RjVcXHUwN0ZBXFx1MDdGRFxcdTA4MDAtXFx1MDgyRFxcdTA4NDAtXFx1MDg1QlxcdTA4NjAtXFx1MDg2QVxcdTA4QTAtXFx1MDhCNFxcdTA4QjYtXFx1MDhDN1xcdTA4RDMtXFx1MDhFMVxcdTA4RTMtXFx1MDk2M1xcdTA5NjYtXFx1MDk2RlxcdTA5NzEtXFx1MDk4M1xcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkMtXFx1MDlDNFxcdTA5QzdcXHUwOUM4XFx1MDlDQi1cXHUwOUNFXFx1MDlEN1xcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUzXFx1MDlFNi1cXHUwOUYxXFx1MDlGNC1cXHUwOUY5XFx1MDlGQ1xcdTA5RkVcXHUwQTAxLVxcdTBBMDNcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBM0NcXHUwQTNFLVxcdTBBNDJcXHUwQTQ3XFx1MEE0OFxcdTBBNEItXFx1MEE0RFxcdTBBNTFcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE2Ni1cXHUwQTc1XFx1MEE4MS1cXHUwQTgzXFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJDLVxcdTBBQzVcXHUwQUM3LVxcdTBBQzlcXHUwQUNCLVxcdTBBQ0RcXHUwQUQwXFx1MEFFMC1cXHUwQUUzXFx1MEFFNi1cXHUwQUVGXFx1MEFGOS1cXHUwQUZGXFx1MEIwMS1cXHUwQjAzXFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0MtXFx1MEI0NFxcdTBCNDdcXHUwQjQ4XFx1MEI0Qi1cXHUwQjREXFx1MEI1NS1cXHUwQjU3XFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjNcXHUwQjY2LVxcdTBCNkZcXHUwQjcxLVxcdTBCNzdcXHUwQjgyXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkJFLVxcdTBCQzJcXHUwQkM2LVxcdTBCQzhcXHUwQkNBLVxcdTBCQ0RcXHUwQkQwXFx1MEJEN1xcdTBCRTYtXFx1MEJGMlxcdTBDMDAtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0QtXFx1MEM0NFxcdTBDNDYtXFx1MEM0OFxcdTBDNEEtXFx1MEM0RFxcdTBDNTVcXHUwQzU2XFx1MEM1OC1cXHUwQzVBXFx1MEM2MC1cXHUwQzYzXFx1MEM2Ni1cXHUwQzZGXFx1MEM3OC1cXHUwQzdFXFx1MEM4MC1cXHUwQzgzXFx1MEM4NS1cXHUwQzhDXFx1MEM4RS1cXHUwQzkwXFx1MEM5Mi1cXHUwQ0E4XFx1MENBQS1cXHUwQ0IzXFx1MENCNS1cXHUwQ0I5XFx1MENCQy1cXHUwQ0M0XFx1MENDNi1cXHUwQ0M4XFx1MENDQS1cXHUwQ0NEXFx1MENENVxcdTBDRDZcXHUwQ0RFXFx1MENFMC1cXHUwQ0UzXFx1MENFNi1cXHUwQ0VGXFx1MENGMVxcdTBDRjJcXHUwRDAwLVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBENDRcXHUwRDQ2LVxcdTBENDhcXHUwRDRBLVxcdTBENEVcXHUwRDU0LVxcdTBENjNcXHUwRDY2LVxcdTBENzhcXHUwRDdBLVxcdTBEN0ZcXHUwRDgxLVxcdTBEODNcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MERDQVxcdTBEQ0YtXFx1MERENFxcdTBERDZcXHUwREQ4LVxcdTBEREZcXHUwREU2LVxcdTBERUZcXHUwREYyXFx1MERGM1xcdTBFMDEtXFx1MEUzQVxcdTBFNDAtXFx1MEU0RVxcdTBFNTAtXFx1MEU1OVxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODYtXFx1MEU4QVxcdTBFOEMtXFx1MEVBM1xcdTBFQTVcXHUwRUE3LVxcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVDOC1cXHUwRUNEXFx1MEVEMC1cXHUwRUQ5XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGMThcXHUwRjE5XFx1MEYyMC1cXHUwRjMzXFx1MEYzNVxcdTBGMzdcXHUwRjM5XFx1MEYzRS1cXHUwRjQ3XFx1MEY0OS1cXHUwRjZDXFx1MEY3MS1cXHUwRjg0XFx1MEY4Ni1cXHUwRjk3XFx1MEY5OS1cXHUwRkJDXFx1MEZDNlxcdTEwMDAtXFx1MTA0OVxcdTEwNTAtXFx1MTA5RFxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzVELVxcdTEzNUZcXHUxMzY5LVxcdTEzN0NcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkVFLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTRcXHUxNzIwLVxcdTE3MzRcXHUxNzQwLVxcdTE3NTNcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzcyXFx1MTc3M1xcdTE3ODAtXFx1MTdEM1xcdTE3RDdcXHUxN0RDXFx1MTdERFxcdTE3RTAtXFx1MTdFOVxcdTE3RjAtXFx1MTdGOVxcdTE4MEItXFx1MTgwRFxcdTE4MTAtXFx1MTgxOVxcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5MjAtXFx1MTkyQlxcdTE5MzAtXFx1MTkzQlxcdTE5NDYtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTE5RDAtXFx1MTlEQVxcdTFBMDAtXFx1MUExQlxcdTFBMjAtXFx1MUE1RVxcdTFBNjAtXFx1MUE3Q1xcdTFBN0YtXFx1MUE4OVxcdTFBOTAtXFx1MUE5OVxcdTFBQTdcXHUxQUIwLVxcdTFBQzBcXHUxQjAwLVxcdTFCNEJcXHUxQjUwLVxcdTFCNTlcXHUxQjZCLVxcdTFCNzNcXHUxQjgwLVxcdTFCRjNcXHUxQzAwLVxcdTFDMzdcXHUxQzQwLVxcdTFDNDlcXHUxQzRELVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0QwLVxcdTFDRDJcXHUxQ0Q0LVxcdTFDRkFcXHUxRDAwLVxcdTFERjlcXHUxREZCLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MFxcdTIwNzFcXHUyMDc0LVxcdTIwNzlcXHUyMDdGLVxcdTIwODlcXHUyMDkwLVxcdTIwOUNcXHUyMEQwLVxcdTIwRjBcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE1MC1cXHUyMTg5XFx1MjQ2MC1cXHUyNDlCXFx1MjRFQS1cXHUyNEZGXFx1Mjc3Ni1cXHUyNzkzXFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0YzXFx1MkNGRFxcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEN0YtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJERTAtXFx1MkRGRlxcdTJFMkZcXHUzMDA1LVxcdTMwMDdcXHUzMDIxLVxcdTMwMkZcXHUzMDMxLVxcdTMwMzVcXHUzMDM4LVxcdTMwM0NcXHUzMDQxLVxcdTMwOTZcXHUzMDk5XFx1MzA5QVxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTMxMDUtXFx1MzEyRlxcdTMxMzEtXFx1MzE4RVxcdTMxOTItXFx1MzE5NVxcdTMxQTAtXFx1MzFCRlxcdTMxRjAtXFx1MzFGRlxcdTMyMjAtXFx1MzIyOVxcdTMyNDgtXFx1MzI0RlxcdTMyNTEtXFx1MzI1RlxcdTMyODAtXFx1MzI4OVxcdTMyQjEtXFx1MzJCRlxcdTM0MDAtXFx1NERCRlxcdTRFMDAtXFx1OUZGQ1xcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYyQlxcdUE2NDAtXFx1QTY3MlxcdUE2NzQtXFx1QTY3RFxcdUE2N0YtXFx1QTZGMVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdCRlxcdUE3QzItXFx1QTdDQVxcdUE3RjUtXFx1QTgyN1xcdUE4MkNcXHVBODMwLVxcdUE4MzVcXHVBODQwLVxcdUE4NzNcXHVBODgwLVxcdUE4QzVcXHVBOEQwLVxcdUE4RDlcXHVBOEUwLVxcdUE4RjdcXHVBOEZCXFx1QThGRC1cXHVBOTJEXFx1QTkzMC1cXHVBOTUzXFx1QTk2MC1cXHVBOTdDXFx1QTk4MC1cXHVBOUMwXFx1QTlDRi1cXHVBOUQ5XFx1QTlFMC1cXHVBOUZFXFx1QUEwMC1cXHVBQTM2XFx1QUE0MC1cXHVBQTREXFx1QUE1MC1cXHVBQTU5XFx1QUE2MC1cXHVBQTc2XFx1QUE3QS1cXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVGXFx1QUFGMi1cXHVBQUY2XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY5XFx1QUI3MC1cXHVBQkVBXFx1QUJFQ1xcdUFCRURcXHVBQkYwLVxcdUFCRjlcXHVBQzAwLVxcdUQ3QTNcXHVEN0IwLVxcdUQ3QzZcXHVEN0NCLVxcdUQ3RkJcXHVGOTAwLVxcdUZBNkRcXHVGQTcwLVxcdUZBRDlcXHVGQjAwLVxcdUZCMDZcXHVGQjEzLVxcdUZCMTdcXHVGQjFELVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFMDAtXFx1RkUwRlxcdUZFMjAtXFx1RkUyRlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMTAtXFx1RkYxOVxcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQ118XFx1RDgwMFtcXHVEQzAwLVxcdURDMEJcXHVEQzBELVxcdURDMjZcXHVEQzI4LVxcdURDM0FcXHVEQzNDXFx1REMzRFxcdURDM0YtXFx1REM0RFxcdURDNTAtXFx1REM1RFxcdURDODAtXFx1RENGQVxcdUREMDctXFx1REQzM1xcdURENDAtXFx1REQ3OFxcdUREOEFcXHVERDhCXFx1RERGRFxcdURFODAtXFx1REU5Q1xcdURFQTAtXFx1REVEMFxcdURFRTAtXFx1REVGQlxcdURGMDAtXFx1REYyM1xcdURGMkQtXFx1REY0QVxcdURGNTAtXFx1REY3QVxcdURGODAtXFx1REY5RFxcdURGQTAtXFx1REZDM1xcdURGQzgtXFx1REZDRlxcdURGRDEtXFx1REZENV18XFx1RDgwMVtcXHVEQzAwLVxcdURDOURcXHVEQ0EwLVxcdURDQTlcXHVEQ0IwLVxcdURDRDNcXHVEQ0Q4LVxcdURDRkJcXHVERDAwLVxcdUREMjdcXHVERDMwLVxcdURENjNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjddfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNTgtXFx1REM3NlxcdURDNzktXFx1REM5RVxcdURDQTctXFx1RENBRlxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1RENGQi1cXHVERDFCXFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCQy1cXHVERENGXFx1REREMi1cXHVERTAzXFx1REUwNVxcdURFMDZcXHVERTBDLVxcdURFMTNcXHVERTE1LVxcdURFMTdcXHVERTE5LVxcdURFMzVcXHVERTM4LVxcdURFM0FcXHVERTNGLVxcdURFNDhcXHVERTYwLVxcdURFN0VcXHVERTgwLVxcdURFOUZcXHVERUMwLVxcdURFQzdcXHVERUM5LVxcdURFRTZcXHVERUVCLVxcdURFRUZcXHVERjAwLVxcdURGMzVcXHVERjQwLVxcdURGNTVcXHVERjU4LVxcdURGNzJcXHVERjc4LVxcdURGOTFcXHVERkE5LVxcdURGQUZdfFxcdUQ4MDNbXFx1REMwMC1cXHVEQzQ4XFx1REM4MC1cXHVEQ0IyXFx1RENDMC1cXHVEQ0YyXFx1RENGQS1cXHVERDI3XFx1REQzMC1cXHVERDM5XFx1REU2MC1cXHVERTdFXFx1REU4MC1cXHVERUE5XFx1REVBQlxcdURFQUNcXHVERUIwXFx1REVCMVxcdURGMDAtXFx1REYyN1xcdURGMzAtXFx1REY1NFxcdURGQjAtXFx1REZDQlxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAwLVxcdURDNDZcXHVEQzUyLVxcdURDNkZcXHVEQzdGLVxcdURDQkFcXHVEQ0QwLVxcdURDRThcXHVEQ0YwLVxcdURDRjlcXHVERDAwLVxcdUREMzRcXHVERDM2LVxcdUREM0ZcXHVERDQ0LVxcdURENDdcXHVERDUwLVxcdURENzNcXHVERDc2XFx1REQ4MC1cXHVEREM0XFx1RERDOS1cXHVERENDXFx1RERDRS1cXHVERERBXFx1REREQ1xcdURERTEtXFx1RERGNFxcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUzN1xcdURFM0VcXHVERTgwLVxcdURFODZcXHVERTg4XFx1REU4QS1cXHVERThEXFx1REU4Ri1cXHVERTlEXFx1REU5Ri1cXHVERUE4XFx1REVCMC1cXHVERUVBXFx1REVGMC1cXHVERUY5XFx1REYwMC1cXHVERjAzXFx1REYwNS1cXHVERjBDXFx1REYwRlxcdURGMTBcXHVERjEzLVxcdURGMjhcXHVERjJBLVxcdURGMzBcXHVERjMyXFx1REYzM1xcdURGMzUtXFx1REYzOVxcdURGM0ItXFx1REY0NFxcdURGNDdcXHVERjQ4XFx1REY0Qi1cXHVERjREXFx1REY1MFxcdURGNTdcXHVERjVELVxcdURGNjNcXHVERjY2LVxcdURGNkNcXHVERjcwLVxcdURGNzRdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzRBXFx1REM1MC1cXHVEQzU5XFx1REM1RS1cXHVEQzYxXFx1REM4MC1cXHVEQ0M1XFx1RENDN1xcdURDRDAtXFx1RENEOVxcdUREODAtXFx1RERCNVxcdUREQjgtXFx1RERDMFxcdURERDgtXFx1RERERFxcdURFMDAtXFx1REU0MFxcdURFNDRcXHVERTUwLVxcdURFNTlcXHVERTgwLVxcdURFQjhcXHVERUMwLVxcdURFQzlcXHVERjAwLVxcdURGMUFcXHVERjFELVxcdURGMkJcXHVERjMwLVxcdURGM0JdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzNBXFx1RENBMC1cXHVEQ0YyXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDM1XFx1REQzN1xcdUREMzhcXHVERDNCLVxcdURENDNcXHVERDUwLVxcdURENTlcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDdcXHVERERBLVxcdURERTFcXHVEREUzXFx1RERFNFxcdURFMDAtXFx1REUzRVxcdURFNDdcXHVERTUwLVxcdURFOTlcXHVERTlEXFx1REVDMC1cXHVERUY4XXxcXHVEODA3W1xcdURDMDAtXFx1REMwOFxcdURDMEEtXFx1REMzNlxcdURDMzgtXFx1REM0MFxcdURDNTAtXFx1REM2Q1xcdURDNzItXFx1REM4RlxcdURDOTItXFx1RENBN1xcdURDQTktXFx1RENCNlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDM2XFx1REQzQVxcdUREM0NcXHVERDNEXFx1REQzRi1cXHVERDQ3XFx1REQ1MC1cXHVERDU5XFx1REQ2MC1cXHVERDY1XFx1REQ2N1xcdURENjhcXHVERDZBLVxcdUREOEVcXHVERDkwXFx1REQ5MVxcdUREOTMtXFx1REQ5OFxcdUREQTAtXFx1RERBOVxcdURFRTAtXFx1REVGNlxcdURGQjBcXHVERkMwLVxcdURGRDRdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDMDAtXFx1REM2RVxcdURDODAtXFx1REQ0M118W1xcdUQ4MENcXHVEODFDLVxcdUQ4MjBcXHVEODIyXFx1RDg0MC1cXHVEODY4XFx1RDg2QS1cXHVEODZDXFx1RDg2Ri1cXHVEODcyXFx1RDg3NC1cXHVEODc5XFx1RDg4MC1cXHVEODgzXVtcXHVEQzAwLVxcdURGRkZdfFxcdUQ4MERbXFx1REMwMC1cXHVEQzJFXXxcXHVEODExW1xcdURDMDAtXFx1REU0Nl18XFx1RDgxQVtcXHVEQzAwLVxcdURFMzhcXHVERTQwLVxcdURFNUVcXHVERTYwLVxcdURFNjlcXHVERUQwLVxcdURFRURcXHVERUYwLVxcdURFRjRcXHVERjAwLVxcdURGMzZcXHVERjQwLVxcdURGNDNcXHVERjUwLVxcdURGNTlcXHVERjVCLVxcdURGNjFcXHVERjYzLVxcdURGNzdcXHVERjdELVxcdURGOEZdfFxcdUQ4MUJbXFx1REU0MC1cXHVERTk2XFx1REYwMC1cXHVERjRBXFx1REY0Ri1cXHVERjg3XFx1REY4Ri1cXHVERjlGXFx1REZFMFxcdURGRTFcXHVERkUzXFx1REZFNFxcdURGRjBcXHVERkYxXXxcXHVEODIxW1xcdURDMDAtXFx1REZGN118XFx1RDgyM1tcXHVEQzAwLVxcdURDRDVcXHVERDAwLVxcdUREMDhdfFxcdUQ4MkNbXFx1REMwMC1cXHVERDFFXFx1REQ1MC1cXHVERDUyXFx1REQ2NC1cXHVERDY3XFx1REQ3MC1cXHVERUZCXXxcXHVEODJGW1xcdURDMDAtXFx1REM2QVxcdURDNzAtXFx1REM3Q1xcdURDODAtXFx1REM4OFxcdURDOTAtXFx1REM5OVxcdURDOURcXHVEQzlFXXxcXHVEODM0W1xcdURENjUtXFx1REQ2OVxcdURENkQtXFx1REQ3MlxcdUREN0ItXFx1REQ4MlxcdUREODUtXFx1REQ4QlxcdUREQUEtXFx1RERBRFxcdURFNDItXFx1REU0NFxcdURFRTAtXFx1REVGM1xcdURGNjAtXFx1REY3OF18XFx1RDgzNVtcXHVEQzAwLVxcdURDNTRcXHVEQzU2LVxcdURDOUNcXHVEQzlFXFx1REM5RlxcdURDQTJcXHVEQ0E1XFx1RENBNlxcdURDQTktXFx1RENBQ1xcdURDQUUtXFx1RENCOVxcdURDQkJcXHVEQ0JELVxcdURDQzNcXHVEQ0M1LVxcdUREMDVcXHVERDA3LVxcdUREMEFcXHVERDBELVxcdUREMTRcXHVERDE2LVxcdUREMUNcXHVERDFFLVxcdUREMzlcXHVERDNCLVxcdUREM0VcXHVERDQwLVxcdURENDRcXHVERDQ2XFx1REQ0QS1cXHVERDUwXFx1REQ1Mi1cXHVERUE1XFx1REVBOC1cXHVERUMwXFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUZBXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjM0XFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjZFXFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERkE4XFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkNCXFx1REZDRS1cXHVERkZGXXxcXHVEODM2W1xcdURFMDAtXFx1REUzNlxcdURFM0ItXFx1REU2Q1xcdURFNzVcXHVERTg0XFx1REU5Qi1cXHVERTlGXFx1REVBMS1cXHVERUFGXXxcXHVEODM4W1xcdURDMDAtXFx1REMwNlxcdURDMDgtXFx1REMxOFxcdURDMUItXFx1REMyMVxcdURDMjNcXHVEQzI0XFx1REMyNi1cXHVEQzJBXFx1REQwMC1cXHVERDJDXFx1REQzMC1cXHVERDNEXFx1REQ0MC1cXHVERDQ5XFx1REQ0RVxcdURFQzAtXFx1REVGOV18XFx1RDgzQVtcXHVEQzAwLVxcdURDQzRcXHVEQ0M3LVxcdURDRDZcXHVERDAwLVxcdURENEJcXHVERDUwLVxcdURENTldfFxcdUQ4M0JbXFx1REM3MS1cXHVEQ0FCXFx1RENBRC1cXHVEQ0FGXFx1RENCMS1cXHVEQ0I0XFx1REQwMS1cXHVERDJEXFx1REQyRi1cXHVERDNEXFx1REUwMC1cXHVERTAzXFx1REUwNS1cXHVERTFGXFx1REUyMVxcdURFMjJcXHVERTI0XFx1REUyN1xcdURFMjktXFx1REUzMlxcdURFMzQtXFx1REUzN1xcdURFMzlcXHVERTNCXFx1REU0MlxcdURFNDdcXHVERTQ5XFx1REU0QlxcdURFNEQtXFx1REU0RlxcdURFNTFcXHVERTUyXFx1REU1NFxcdURFNTdcXHVERTU5XFx1REU1QlxcdURFNURcXHVERTVGXFx1REU2MVxcdURFNjJcXHVERTY0XFx1REU2Ny1cXHVERTZBXFx1REU2Qy1cXHVERTcyXFx1REU3NC1cXHVERTc3XFx1REU3OS1cXHVERTdDXFx1REU3RVxcdURFODAtXFx1REU4OVxcdURFOEItXFx1REU5QlxcdURFQTEtXFx1REVBM1xcdURFQTUtXFx1REVBOVxcdURFQUItXFx1REVCQl18XFx1RDgzQ1tcXHVERDAwLVxcdUREMENdfFxcdUQ4M0VbXFx1REZGMC1cXHVERkY5XXxcXHVEODY5W1xcdURDMDAtXFx1REVERFxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzRcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV18XFx1REI0MFtcXHVERDAwLVxcdURERUZdLyxobj0vW1xcdC1cXHIgXFx1MDA4NVxcdTAwQTBcXHUxNjgwXFx1MjAwMC1cXHUyMDBBXFx1MjAyOFxcdTIwMjlcXHUyMDJGXFx1MjA1RlxcdTMwMDBdLyxnbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsO2lmKGU+MCYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmKHQ9KGk9YS5jaGlsZHJlbilbZS0xXSkmJlwiV29yZE5vZGVcIj09PXQudHlwZSl7Zm9yKE09ZS0xLHM9W10sbD1bXTtpWysrTV07KWlmKFwiV29yZE5vZGVcIj09PShyPWlbTV0pLnR5cGUpcz1zLmNvbmNhdChsLHIuY2hpbGRyZW4pLGw9W107ZWxzZXtpZihcIlN5bWJvbE5vZGVcIiE9PXIudHlwZSYmXCJQdW5jdHVhdGlvbk5vZGVcIiE9PXIudHlwZXx8IWxuLnRlc3QoZW4ocikpKWJyZWFrO2wucHVzaChyKX1pZihzLmxlbmd0aD4wKXJldHVybiBsLmxlbmd0aD4wJiYoTS09bC5sZW5ndGgpLGkuc3BsaWNlKGUsTS1lKSx0LmNoaWxkcmVuPXQuY2hpbGRyZW4uY29uY2F0KHMpLG89c1tzLmxlbmd0aC0xXSx0LnBvc2l0aW9uJiZvLnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9by5wb3NpdGlvbi5lbmQpLGV9fSkpLHluPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGwsYz1hLmNoaWxkcmVuO2lmKGk9Y1tlLTFdLHI9Y1tlKzFdLGkmJlwiV29yZE5vZGVcIj09PWkudHlwZSYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCIvXCI9PT1lbihuKSYmKHQ9ZW4oaSkscz1uLE09W25dLGw9MSxyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJihvPWVuKHIpLHM9cixNPU0uY29uY2F0KHIuY2hpbGRyZW4pLGwrKyksdC5sZW5ndGg8MyYmKCFvfHxvLmxlbmd0aDwzKSkpcmV0dXJuIGkuY2hpbGRyZW49aS5jaGlsZHJlbi5jb25jYXQoTSksYy5zcGxpY2UoZSxsKSxpLnBvc2l0aW9uJiZzLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5lbmQ9cy5wb3NpdGlvbi5lbmQpLGV9KSksYm49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNLHMsbDtpZihlPjAmJlwiLlwiPT09ZW4obikmJih0PShyPShpPWEuY2hpbGRyZW4pW2UtMV0pLmNoaWxkcmVuLFwiV29yZE5vZGVcIj09PXIudHlwZSYmdCYmMSE9PXQubGVuZ3RoJiZ0Lmxlbmd0aCUyIT0wKSl7Zm9yKG89dC5sZW5ndGgscz0hMDt0Wy0tb107KWlmKE09dFtvXSxsPWVuKE0pLG8lMj09MCl7aWYobC5sZW5ndGg+MSlyZXR1cm47Y24udGVzdChsKXx8KHM9ITEpfWVsc2UgaWYoXCIuXCIhPT1sKXtpZihvPHQubGVuZ3RoLTIpYnJlYWs7cmV0dXJufWlmKCFzKXJldHVybiBpLnNwbGljZShlLDEpLHQucHVzaChuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGV9fSkpLERuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1hLmNoaWxkcmVuO2lmKFwiV29yZE5vZGVcIj09PW4udHlwZSYmKGk9cltlKzFdKSYmXCJXb3JkTm9kZVwiPT09aS50eXBlKXJldHVybiByLnNwbGljZShlKzEsMSksbi5jaGlsZHJlbj1uLmNoaWxkcmVuLmNvbmNhdChpLmNoaWxkcmVuKSxpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLGV9KSksZm49YSgyMCksR249Zm4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1hLmNoaWxkcmVuO24ucG9zaXRpb24mJighKGU8MSl8fGEucG9zaXRpb24mJmEucG9zaXRpb24uc3RhcnR8fCh3bihhKSxhLnBvc2l0aW9uLnN0YXJ0PW4ucG9zaXRpb24uc3RhcnQpLGUhPT1pLmxlbmd0aC0xfHxhLnBvc2l0aW9uJiZhLnBvc2l0aW9uLmVuZHx8KHduKGEpLGEucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSl9KSk7ZnVuY3Rpb24gd24obil7bi5wb3NpdGlvbnx8KG4ucG9zaXRpb249e30pfXZhciB2bj1hbigoZnVuY3Rpb24obixlLGEpe2Zvcih2YXIgaSxyLHQ9bi5jaGlsZHJlbixvPS0xO3RbKytvXTspaWYoXCJXb3JkTm9kZVwiPT09dFtvXS50eXBlKXJldHVybjtpZihpPWEuY2hpbGRyZW5bZS0xXSlyZXR1cm4gaS5jaGlsZHJlbj1pLmNoaWxkcmVuLmNvbmNhdCh0KSxhLmNoaWxkcmVuLnNwbGljZShlLDEpLGkucG9zaXRpb24mJm4ucG9zaXRpb24mJihpLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZTsocj1hLmNoaWxkcmVuW2UrMV0pJiYoci5jaGlsZHJlbj10LmNvbmNhdChyLmNoaWxkcmVuKSxyLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxhLmNoaWxkcmVuLnNwbGljZShlLDEpKX0pKSxrbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvPW4uY2hpbGRyZW47aWYobyYmby5sZW5ndGg+MCYmZT4wJiYoaT1vWzBdLHI9b1sxXSx0PWEuY2hpbGRyZW5bZS0xXSwoXCJTeW1ib2xOb2RlXCI9PT1pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1pLnR5cGUpJiZvbi50ZXN0KGVuKGkpKSkpcmV0dXJuIHQuY2hpbGRyZW4ucHVzaChvLnNoaWZ0KCkpLGkucG9zaXRpb24mJnQucG9zaXRpb24mJih0LnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksciYmci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uc3RhcnQ9ci5wb3NpdGlvbi5zdGFydCksZS0xfSkpLFJuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTT1uLmNoaWxkcmVuO2lmKE0mJk0ubGVuZ3RoPjAmJmU+MClmb3IoaT0tMTtNWysraV07KXtpZihcIldvcmROb2RlXCI9PT0ocj1NW2ldKS50eXBlKXtpZighdW4udGVzdChlbihyKSkpcmV0dXJuO3JldHVybihvPSh0PWEuY2hpbGRyZW4pW2UtMV0pLmNoaWxkcmVuPW8uY2hpbGRyZW4uY29uY2F0KE0pLHQuc3BsaWNlKGUsMSksby5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG8ucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfWlmKFwiU3ltYm9sTm9kZVwiPT09ci50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09ci50eXBlKXJldHVybn19KSksWW49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1uLmNoaWxkcmVuLHI9YS5jaGlsZHJlbix0PXJbZS0xXSxvPWlbMF07aWYodCYmbyYmXCJXb3JkTm9kZVwiPT09by50eXBlJiZTbi50ZXN0KGVuKG8pKSlyZXR1cm4gdC5jaGlsZHJlbj10LmNoaWxkcmVuLmNvbmNhdChpKSxyLnNwbGljZShlLDEpLHQucG9zaXRpb24mJm4ucG9zaXRpb24mJih0LnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX0pKSxBbj1uZXcgUmVnRXhwKFwiXihbMC05XXsxLDN9fFthLXpdfGFsfGNhfGNhcHxjY2F8Y2VudHxjZnxjaXR8Y29ufGNwfGN3dHxlYWR8ZXRjfGZmfGZsfGliaWR8aWR8bmVtfG9wfHByb3xzZXF8c2ljfHN0YXR8dGVtfHZpeikkXCIpLFBuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG89bi5jaGlsZHJlbjtpZihvJiZvLmxlbmd0aD4xJiYoaT1vW28ubGVuZ3RoLTFdKSYmXCIuXCI9PT1lbihpKSYmKHI9b1tvLmxlbmd0aC0yXSkmJlwiV29yZE5vZGVcIj09PXIudHlwZSYmQW4udGVzdChlbihyKS50b0xvd2VyQ2FzZSgpKSYmKHIuY2hpbGRyZW4ucHVzaChpKSxvLnBvcCgpLGkucG9zaXRpb24mJnIucG9zaXRpb24mJihyLnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksdD1hLmNoaWxkcmVuW2UrMV0pKXJldHVybiBuLmNoaWxkcmVuPW8uY29uY2F0KHQuY2hpbGRyZW4pLGEuY2hpbGRyZW4uc3BsaWNlKGUrMSwxKSx0LnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5lbmQ9dC5wb3NpdGlvbi5lbmQpLGUtMX0pKSxDbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE09bi5jaGlsZHJlbjtpZihNJiYwIT09TS5sZW5ndGgmJiEoZTwxKSlmb3Iocj0tMTtNWysrcl07KXtpZihcIldvcmROb2RlXCI9PT0oaT1NW3JdKS50eXBlKXJldHVybjtpZihcIlN5bWJvbE5vZGVcIj09PWkudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PWkudHlwZSl7aWYoXCIsXCIhPT0odD1lbihpKSkmJlwiO1wiIT09dClyZXR1cm47cmV0dXJuKG89YS5jaGlsZHJlbltlLTFdKS5jaGlsZHJlbj1vLmNoaWxkcmVuLmNvbmNhdChNKSxvLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoby5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGEuY2hpbGRyZW4uc3BsaWNlKGUsMSksZX19fSkpLFRuPWZuKChmdW5jdGlvbihuKXtmb3IodmFyIGUsYSxpLHIsdD1uLmNoaWxkcmVuLG89dC5sZW5ndGgsTT0hMTt0Wy0tb107KWlmKFwiU3ltYm9sTm9kZVwiPT09KGU9dFtvXSkudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PWUudHlwZSl7aWYoc24udGVzdChlbihlKSkpaWYoTSl7aWYoXCIuXCI9PT1lbihlKSlpZihhPXRbby0xXSxpPXRbbysxXSxhJiZcIldvcmROb2RlXCI9PT1hLnR5cGUpe2lmKHI9dFtvKzJdLGkmJnImJlwiV2hpdGVTcGFjZU5vZGVcIj09PWkudHlwZSYmXCIuXCI9PT1lbihyKSljb250aW51ZTt0LnNwbGljZShvLDEpLGEuY2hpbGRyZW4ucHVzaChlKSxlLnBvc2l0aW9uJiZhLnBvc2l0aW9uJiYoYS5wb3NpdGlvbi5lbmQ9ZS5wb3NpdGlvbi5lbmQpLG8tLX1lbHNlIGkmJlwiV29yZE5vZGVcIj09PWkudHlwZSYmKHQuc3BsaWNlKG8sMSksaS5jaGlsZHJlbi51bnNoaWZ0KGUpLGUucG9zaXRpb24mJmkucG9zaXRpb24mJihpLnBvc2l0aW9uLnN0YXJ0PWUucG9zaXRpb24uc3RhcnQpKX1lbHNlIE09ITB9ZWxzZVwiV29yZE5vZGVcIj09PWUudHlwZSYmKE09ITApfSkpLHhuPWZuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1uLmNoaWxkcmVuO3ImJnIubGVuZ3RoPjAmJlwiV2hpdGVTcGFjZU5vZGVcIj09PXJbMF0udHlwZSYmKGEuY2hpbGRyZW4uc3BsaWNlKGUsMCxyLnNoaWZ0KCkpLChpPXJbMF0pJiZpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYobi5wb3NpdGlvbi5zdGFydD1pLnBvc2l0aW9uLnN0YXJ0KSl9KSksem49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyPW4uY2hpbGRyZW47aWYociYmci5sZW5ndGg+MCYmXCJXaGl0ZVNwYWNlTm9kZVwiPT09cltyLmxlbmd0aC0xXS50eXBlKXJldHVybiBhLmNoaWxkcmVuLnNwbGljZShlKzEsMCxuLmNoaWxkcmVuLnBvcCgpKSwoaT1yW3IubGVuZ3RoLTFdKSYmaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPWkucG9zaXRpb24uZW5kKSxlfSkpLEVuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGw7aWYoXCJTZW50ZW5jZU5vZGVcIj09PW4udHlwZSlmb3IoaT1uLmNoaWxkcmVuLHI9MDsrK3I8aS5sZW5ndGgtMTspaWYoXCJXaGl0ZVNwYWNlTm9kZVwiPT09KGw9aVtyXSkudHlwZSYmTW4udGVzdChlbihsKSkpcmV0dXJuIG4uY2hpbGRyZW49aS5zbGljZSgwLHIpLHM9e3R5cGU6XCJTZW50ZW5jZU5vZGVcIixjaGlsZHJlbjppLnNsaWNlKHIrMSl9LHQ9aVtyLTFdLG89aVtyKzFdLGEuY2hpbGRyZW4uc3BsaWNlKGUrMSwwLGwscyksbi5wb3NpdGlvbiYmdC5wb3NpdGlvbiYmby5wb3NpdGlvbiYmKE09bi5wb3NpdGlvbi5lbmQsbi5wb3NpdGlvbi5lbmQ9dC5wb3NpdGlvbi5lbmQscy5wb3NpdGlvbj17c3RhcnQ6by5wb3NpdGlvbi5zdGFydCxlbmQ6TX0pLGUrMX0pKSxCbj1hbigoZnVuY3Rpb24obixlLGEpe2lmKFwiY2hpbGRyZW5cImluIG4mJjA9PT1uLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSxlfSkpO2Z1bmN0aW9uIE5uKG4pe3ZhciBlLGEsaT1uLnR5cGUscj1uLnRva2VuaXplcix0PW4uZGVsaW1pdGVyLG89dCYmKGU9bi5kZWxpbWl0ZXJUeXBlLGE9dCxmdW5jdGlvbihuKXtmb3IodmFyIGkscix0LG89W10sTT1uLmNoaWxkcmVuLHM9bi50eXBlLGw9LTEsYz1NLmxlbmd0aC0xLFM9MDsrK2w8TS5sZW5ndGg7KShsPT09Y3x8TVtsXS50eXBlPT09ZSYmYS50ZXN0KGVuKE1bbF0pKSkmJihpPU1bU10scj1NW2xdLHQ9e3R5cGU6cyxjaGlsZHJlbjpNLnNsaWNlKFMsbCsxKX0saS5wb3NpdGlvbiYmci5wb3NpdGlvbiYmKHQucG9zaXRpb249e3N0YXJ0OmkucG9zaXRpb24uc3RhcnQsZW5kOnIucG9zaXRpb24uZW5kfSksby5wdXNoKHQpLFM9bCsxKTtyZXR1cm4gb30pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT10aGlzW3JdKG4pO3JldHVybnt0eXBlOmksY2hpbGRyZW46bz9vKGUpOmV9fX1jbGFzcyBabntjb25zdHJ1Y3RvcihuLGUpe3ZhciBhPWV8fG47dGhpcy5kb2M9YT9TdHJpbmcoYSk6bnVsbH1ydW4obixlKXt2YXIgYT10aGlzW24rXCJQbHVnaW5zXCJdLGk9LTE7aWYoYSlmb3IoO2FbKytpXTspYVtpXShlKTtyZXR1cm4gZX1wYXJzZShuKXtyZXR1cm4gdGhpcy50b2tlbml6ZVJvb3Qobnx8dGhpcy5kb2MpfXRva2VuaXplKG4pe3ZhciBlLGEsaSxyLHQsbyxNPXRoaXMscz1bXSxsPTAsYz0wLFM9MSx1PTE7aWYobnVsbD09bj9uPVwiXCI6biBpbnN0YW5jZW9mIFN0cmluZyYmKG49bi50b1N0cmluZygpKSxcInN0cmluZ1wiIT10eXBlb2Ygbil7aWYoXCJsZW5ndGhcImluIG4mJighblswXXx8blswXS50eXBlKSlyZXR1cm4gbjt0aHJvdyBuZXcgRXJyb3IoXCJJbGxlZ2FsIGludm9jYXRpb246ICdcIituK1wiJyBpcyBub3QgYSB2YWxpZCBhcmd1bWVudCBmb3IgJ1BhcnNlTGF0aW4nXCIpfWlmKCFuKXJldHVybiBzO2ZvcihvPXRoaXMucG9zaXRpb24/ZnVuY3Rpb24obil7dmFyIGUsYT0oZT1oKCksZnVuY3Rpb24obil7cmV0dXJuIG4ucG9zaXRpb249bmV3IHAoZSksbn0pO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT0tMSxhPS0xO2ZvcihjKz1uLmxlbmd0aDsrK2U8bi5sZW5ndGg7KVwiXFxuXCI9PT1uLmNoYXJBdChlKSYmKGE9ZSxTKyspO2E8MD91Kz1uLmxlbmd0aDp1PW4ubGVuZ3RoLWF9KG4pLGZ1bmN0aW9uKC4uLm4pe3JldHVybiBhKG0oLi4ubikpfX06ZnVuY3Rpb24oKXtyZXR1cm4gbX0saT1cIlwiLGE9XCJcIjtsPG4ubGVuZ3RoOyllPW4uY2hhckF0KGwpLHQ9aG4udGVzdChlKT9cIldoaXRlU3BhY2VcIjptbi50ZXN0KGUpP1wiUHVuY3R1YXRpb25cIjpwbi50ZXN0KGUpP1wiV29yZFwiOlwiU3ltYm9sXCIsZCgpLGk9ZSxlPVwiXCIscj10LHQ9bnVsbCxsKys7cmV0dXJuIGQoKSxzO2Z1bmN0aW9uIGQoKXtyIT09dHx8XCJXb3JkXCIhPT1yJiZcIldoaXRlU3BhY2VcIiE9PXImJmUhPT1pJiYhZG4udGVzdChlKT8oYSYmTVtcInRva2VuaXplXCIrcl0oYSxvKSxhPWUpOmErPWV9ZnVuY3Rpb24gbShuLGUpe3JldHVybiBlP2UuY2hpbGRyZW4ucHVzaChuKTpzLnB1c2gobiksbn1mdW5jdGlvbiBwKG4pe3RoaXMuc3RhcnQ9bix0aGlzLmVuZD1oKCl9ZnVuY3Rpb24gaCgpe3JldHVybntsaW5lOlMsY29sdW1uOnUsb2Zmc2V0OmN9fX19ZnVuY3Rpb24gRm4obil7cmV0dXJuIG4rPVwiTm9kZVwiLGZ1bmN0aW9uKGUsYSxpKXtyZXR1cm4gbnVsbD09ZSYmKGU9XCJcIiksKGF8fExuKShlKSh7dHlwZTpuLHZhbHVlOlN0cmluZyhlKX0saSl9fWZ1bmN0aW9uIEluKG4sZSxhKXtuLnByb3RvdHlwZVtlXT1mdW5jdGlvbiguLi5uKXtyZXR1cm4gdGhpcy5ydW4oZSxhLmFwcGx5KHRoaXMsbikpfX1mdW5jdGlvbiBVbihuKXtyZXR1cm4gZnVuY3Rpb24oZSxhKXt2YXIgaTtpZighKGUgaW4gdGhpcykpdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBJbnZvY2F0aW9uOiBVbnN1cHBvcnRlZCBga2V5YCBmb3IgYHVzZShrZXksIHBsdWdpbnMpYC4gTWFrZSBzdXJlIGBrZXlgIGlzIGEgc3VwcG9ydGVkIGZ1bmN0aW9uXCIpO2EmJihpPWUrXCJQbHVnaW5zXCIsYT1cImZ1bmN0aW9uXCI9PXR5cGVvZiBhP1thXTphLmNvbmNhdCgpLHRoaXNbaV18fCh0aGlzW2ldPVtdKSxuKHRoaXMsaSxhKSl9fWZ1bmN0aW9uIGpuKG4sZSl7cmV0dXJuIGUmJmUuY2hpbGRyZW4ucHVzaChuKSxufWZ1bmN0aW9uIExuKCl7cmV0dXJuIGpufVpuLnByb3RvdHlwZS5wb3NpdGlvbj0hMCxabi5wcm90b3R5cGUudG9rZW5pemVTeW1ib2w9Rm4oXCJTeW1ib2xcIiksWm4ucHJvdG90eXBlLnRva2VuaXplV2hpdGVTcGFjZT1GbihcIldoaXRlU3BhY2VcIiksWm4ucHJvdG90eXBlLnRva2VuaXplUHVuY3R1YXRpb249Rm4oXCJQdW5jdHVhdGlvblwiKSxabi5wcm90b3R5cGUudG9rZW5pemVTb3VyY2U9Rm4oXCJTb3VyY2VcIiksWm4ucHJvdG90eXBlLnRva2VuaXplVGV4dD1GbihcIlRleHRcIiksWm4ucHJvdG90eXBlLnVzZT1VbigoZnVuY3Rpb24obixlLGEpe25bZV09bltlXS5jb25jYXQoYSl9KSksWm4ucHJvdG90eXBlLnVzZUZpcnN0PVVuKChmdW5jdGlvbihuLGUsYSl7bltlXT1hLmNvbmNhdChuW2VdKX0pKSxJbihabixcInRva2VuaXplV29yZFwiLChmdW5jdGlvbihuLGUpe3ZhciBhPShlfHxMbikoXCJcIiksaT17dHlwZTpcIldvcmROb2RlXCIsY2hpbGRyZW46W119O3JldHVybiB0aGlzLnRva2VuaXplVGV4dChuLGUsaSksYShpKX0pKSxJbihabixcInRva2VuaXplU2VudGVuY2VcIixObih7dHlwZTpcIlNlbnRlbmNlTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplXCJ9KSksSW4oWm4sXCJ0b2tlbml6ZVBhcmFncmFwaFwiLE5uKHt0eXBlOlwiUGFyYWdyYXBoTm9kZVwiLGRlbGltaXRlcjpzbixkZWxpbWl0ZXJUeXBlOlwiUHVuY3R1YXRpb25Ob2RlXCIsdG9rZW5pemVyOlwidG9rZW5pemVTZW50ZW5jZVwifSkpLEluKFpuLFwidG9rZW5pemVSb290XCIsTm4oe3R5cGU6XCJSb290Tm9kZVwiLGRlbGltaXRlcjovXlsgXFx0XSooKFxccj9cXG58XFxyKVtcXHQgXSopKyQvLGRlbGltaXRlclR5cGU6XCJXaGl0ZVNwYWNlTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplUGFyYWdyYXBoXCJ9KSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplU2VudGVuY2VcIixbcm4sdG4sZ24seW4sYm4sRG4sR25dKSxabi5wcm90b3R5cGUudXNlKFwidG9rZW5pemVQYXJhZ3JhcGhcIixbdm4sa24sUm4sWW4sUG4sQ24sVG4seG4sem4sRW4sQm4sR25dKSxabi5wcm90b3R5cGUudXNlKFwidG9rZW5pemVSb290XCIsW3huLHpuLEJuLEduXSk7ZnVuY3Rpb24gcW4obixlPVwiXCIpe2xldCBhPS0xO2lmKCFufHwhQXJyYXkuaXNBcnJheShuKSYmIW4udHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBub3QgYFwiK24rXCJgXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuLnZhbHVlKXJldHVybiBuLnZhbHVlO2NvbnN0IGk9KEFycmF5LmlzQXJyYXkobik/bjpuLmNoaWxkcmVuKXx8W107aWYoMT09PWkubGVuZ3RoJiZcInZhbHVlXCJpbiBpWzBdKXJldHVybiBpWzBdLnZhbHVlO2NvbnN0IHI9W107Zm9yKDsrK2E8aS5sZW5ndGg7KXJbYV09cW4oaVthXSxlKTtyZXR1cm4gci5qb2luKGUpfWZ1bmN0aW9uIEhuKG4pe3JldHVybiBxbihuKX1jb25zdCBKbj1mdW5jdGlvbigpe09iamVjdC5hc3NpZ24odGhpcyx7Q29tcGlsZXI6SG59KX0sT249SigpLnVzZSgoZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduKHRoaXMse1BhcnNlcjpubihabil9KX0pKS51c2UoSm4pLmZyZWV6ZSgpO3ZhciBYbj1hKDI5MSk7Y29uc3QgVm49ZnVuY3Rpb24gbihlLGEsaSxyLHQpe2NvbnN0IG89V24oYSk7aWYobnVsbCE9aSYmKFwibnVtYmVyXCIhPXR5cGVvZiBpfHxpPDB8fGk9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleFwiKTtpZighKG51bGw9PXJ8fG4ocikmJnIuY2hpbGRyZW4pKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBhcmVudCBub2RlXCIpO2lmKG51bGw9PXIhPShudWxsPT1pKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBib3RoIHBhcmVudCBhbmQgaW5kZXhcIik7cmV0dXJuISghZXx8IWUudHlwZXx8XCJzdHJpbmdcIiE9dHlwZW9mIGUudHlwZSkmJkJvb2xlYW4oby5jYWxsKHQsZSxpLHIpKX0sV249ZnVuY3Rpb24obil7aWYobnVsbD09bilyZXR1cm4gJG47aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIGU9bixLbigoZnVuY3Rpb24obil7cmV0dXJuIG4mJm4udHlwZT09PWV9KSk7dmFyIGU7aWYoXCJvYmplY3RcIj09dHlwZW9mIG4pcmV0dXJuIEFycmF5LmlzQXJyYXkobik/ZnVuY3Rpb24obil7Y29uc3QgZT1bXTtsZXQgYT0tMTtmb3IoOysrYTxuLmxlbmd0aDspZVthXT1XbihuW2FdKTtyZXR1cm4gS24oKGZ1bmN0aW9uKC4uLm4pe2xldCBhPS0xO2Zvcig7KythPGUubGVuZ3RoOylpZihlW2FdLmNhbGwodGhpcywuLi5uKSlyZXR1cm4hMDtyZXR1cm4hMX0pKX0obik6ZnVuY3Rpb24obil7cmV0dXJuIEtuKChmdW5jdGlvbihlKXtsZXQgYTtmb3IoYSBpbiBuKWlmKGVbYV0hPT1uW2FdKXJldHVybiExO3JldHVybiEwfSkpfShuKTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBuKXJldHVybiBLbihuKTt0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBmdW5jdGlvbiwgc3RyaW5nLCBvciBvYmplY3QgYXMgdGVzdFwiKX07ZnVuY3Rpb24gS24obil7cmV0dXJuIGZ1bmN0aW9uKC4uLmUpe3JldHVybiBCb29sZWFuKG4uY2FsbCh0aGlzLC4uLmUpKX19ZnVuY3Rpb24gJG4oKXtyZXR1cm4hMH1jb25zdCBRbj1cInNraXBcIixfbj1mdW5jdGlvbihuLGUsYSxpKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoaT1hLGE9ZSxlPW51bGwpLGZ1bmN0aW9uKG4sZSxhLGkpe1wiZnVuY3Rpb25cIj09dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGEmJihpPWEsYT1lLGU9bnVsbCk7Y29uc3Qgcj1XbihlKSx0PWk/LTE6MTshZnVuY3Rpb24gbihvLE0scyl7Y29uc3QgbD1cIm9iamVjdFwiPT10eXBlb2YgbyYmbnVsbCE9PW8/bzp7fTtsZXQgYztyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgbC50eXBlJiYoYz1cInN0cmluZ1wiPT10eXBlb2YgbC50YWdOYW1lP2wudGFnTmFtZTpcInN0cmluZ1wiPT10eXBlb2YgbC5uYW1lP2wubmFtZTp2b2lkIDAsT2JqZWN0LmRlZmluZVByb3BlcnR5KFMsXCJuYW1lXCIse3ZhbHVlOlwibm9kZSAoXCIrbC50eXBlKyhjP1wiPFwiK2MrXCI+XCI6XCJcIikrXCIpXCJ9KSksUztmdW5jdGlvbiBTKCl7bGV0IGwsYyxTLHU9W107aWYoKCFlfHxyKG8sTSxzW3MubGVuZ3RoLTFdfHxudWxsKSkmJih1PWZ1bmN0aW9uKG4pe3JldHVybiBBcnJheS5pc0FycmF5KG4pP246XCJudW1iZXJcIj09dHlwZW9mIG4/WyEwLG5dOltuXX0oYShvLHMpKSwhMT09PXVbMF0pKXJldHVybiB1O2lmKG8uY2hpbGRyZW4mJnVbMF0hPT1Rbilmb3IoYz0oaT9vLmNoaWxkcmVuLmxlbmd0aDotMSkrdCxTPXMuY29uY2F0KG8pO2M+LTEmJmM8by5jaGlsZHJlbi5sZW5ndGg7KXtpZihsPW4oby5jaGlsZHJlbltjXSxjLFMpKCksITE9PT1sWzBdKXJldHVybiBsO2M9XCJudW1iZXJcIj09dHlwZW9mIGxbMV0/bFsxXTpjK3R9cmV0dXJuIHV9fShuLG51bGwsW10pKCl9KG4sZSwoZnVuY3Rpb24obixlKXtjb25zdCBpPWVbZS5sZW5ndGgtMV07cmV0dXJuIGEobixpP2kuY2hpbGRyZW4uaW5kZXhPZihuKTpudWxsLGkpfSksaSl9O3ZhciBuZT1hKDQzMik7Y29uc3QgZWU9cmUoW1widW5pc3RcIixcIlVcIixcIlVFRkFcIixcIlVLXCIsXCJVTlwiLFwiVU5IQ1JcIixcIlVTXCIsXCJVU0JcIixcImV1Y2FseXB0KlwiLFwiZXVjaGEqXCIsXCJldWNocipcIixcImV1Y2xpZCpcIixcImV1Y3JpdGVcIixcImV1Y3J5cGhpYVwiLFwiZXVnZW4qXCIsXCJldWthcipcIixcImV1bG9nKlwiLFwiZXVuaWNlXCIsXCJldW51Y2hcIixcImV1cGgqXCIsXCJldXJhKlwiLFwiZXVyZSpcIixcImV1cm8qXCIsXCJldXJ5KlwiLFwiZXV0aGEqXCIsXCJld2VcIixcImV3ZXJcIixcImhhYml0dWFsXCIsXCJoYWxsdWNpbipcIixcImhlcmIqXCIsXCJoZXJlZGl0KlwiLFwiaGlzdG9yKlwiLFwiaGlsYXJpb3VzKlwiLFwiaG9ycmVuZCpcIixcImhvcnJpZipcIixcImhvdGVsKlwiLFwibXNcIixcIm9uY2VcIixcIm9uZVwiLFwib25lL1wiLFwib25lLSpcIixcIm9uZWFub3RoZXJcIixcIm9uZWJlcnJ5XCIsXCJvbmVmb2xkKlwiLFwib25laGVhcnQqXCIsXCJvbmVuZXNzKlwiLFwib25lc2VsZipcIixcIm9uZXRpbWUqXCIsXCJvbmV3YXlcIixcIm9uZXdoZXJlKlwiLFwib25leWVhclwiLFwidWJpcSpcIixcInVnYW5kYW5cIixcInVrYXNlXCIsXCJ1a3JhaW4qXCIsXCJ1a3VsZWxlXCIsXCJ1bHVsYXRlZFwiLFwidWx1bGF0aW9uXCIsXCJ1bmFuaW0qXCIsXCJ1bmFyeVwiLFwidW5lc2NvXCIsXCJ1bmlhbSpcIixcInVuaWFydCpcIixcInVuaWF0KlwiLFwidW5pYXVyKlwiLFwidW5pYXgqXCIsXCJ1bmliYXMqXCIsXCJ1bmlibGVcIixcInVuaWN5Y2wqXCIsXCJ1bmlkaXJlY3QqXCIsXCJ1bmlvbipcIixcInVuaXQqXCIsXCJ1bml2KlwiLFwidW5pZipcIixcInVuaXEqXCIsXCJ1cmFuKlwiLFwidXJhdGVcIixcInVyaSpcIixcInVyb2xvZ2lzdFwiLFwidXJ1Z3VheVwiLFwidXJ1Z3VheWFuXCIsXCJ1cnVndWF5YW5zXCIsXCJ1c2FiKlwiLFwidXNhZ2VcIixcInVzZSpcIixcInVzaW5nXCIsXCJ1c3UqXCIsXCJ1dGFoXCIsXCJ1dGVuKlwiLFwidXRlcipcIixcInV0aWwqXCIsXCJ1dG9wKlwiLFwidXRyZWNodFwiLFwidXR0b3hldGVyXCIsXCJ1dnVsYVwiLFwidXZ1bGFyXCIsXCJ1eWdodXJcIl0pLGFlPXJlKFtcIm1kYXN0XCIsXCLOsVwiLFwiZlwiLFwiZmJpXCIsXCJmbVwiLFwiZmRhXCIsXCJsXCIsXCJtXCIsXCJuXCIsXCJuZmxcIixcIm5iYVwiLFwibmJjXCIsXCJuaGxcIixcIm5nb1wiLFwibnBtXCIsXCJudmlkaWFcIixcInNcIixcInJcIixcImhcIixcImhhYml0dWFsXCIsXCJoYWxsdWNpbipcIixcImhhdXRldXJcIixcImhlaXIqXCIsXCJoZXJiKlwiLFwiaGVyZWRpdCpcIixcImhpbGFyaW91cypcIixcImhpc3RvcipcIixcImhvbWFnZVwiLFwiaG9uZXN0KlwiLFwiaG9ub3IqXCIsXCJob25vdXIqXCIsXCJob3JyZW5kKlwiLFwiaG9ycmlmKlwiLFwiaG90ZWwqXCIsXCJob3VyKlwiLFwiaDFcIixcImgyXCIsXCJoM1wiLFwiaDRcIixcImg1XCIsXCJoNlwiLFwiaGl2XCIsXCJsYndcIixcImxjZFwiLFwibXBnXCIsXCJtcGhcIixcIk1CQVwiLFwiTUFcIixcIk1SSVwiLFwibXNjXCIsXCJNU1wiLFwiTVRWXCIsXCJodG1sXCIsXCJyJmRcIixcIlNHTUxcIixcIlNPU1wiLFwiU01TXCIsXCJ4XCIsXCJYTUxcIixcInhtYXNcIixcIngtcmF5XCIsXCJ4LXJheXNcIixcInhib3hcIixcIlNVVlwiLFwiU1REXCIsXCJTUEZcIixcIkhCXCIsXCJSQUZcIixcIklPVVwiXSk7ZnVuY3Rpb24gaWUoKXtyZXR1cm4obixlKT0+e19uKG4sXCJXb3JkTm9kZVwiLCgobixhLGkpPT57Y29uc3Qgcj1pLHQ9cW4obiksbz10LnRvTG93ZXJDYXNlKCk7aWYoXCJhXCIhPT1vJiZcImFuXCIhPT1vfHwhcnx8bnVsbD09PWEpcmV0dXJuO2NvbnN0IE09ZnVuY3Rpb24obixlKXtjb25zdCBhPW4uY2hpbGRyZW47bGV0IGkscj1hWysrZV07cmV0dXJuIHImJlwiV2hpdGVTcGFjZU5vZGVcIj09PXIudHlwZSYmKHI9YVsrK2VdLHImJlwiUHVuY3R1YXRpb25Ob2RlXCI9PT1yLnR5cGUmJi9eW+KAnOKAneKAmOKAmSdcIigpW1xcXV0kLy50ZXN0KHFuKHIpKSYmKHI9YVsrK2VdKSxyJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJihpPXIpKSxpfShyLGEpO2lmKCFNKXJldHVybjtjb25zdCBzPTEhPT10Lmxlbmd0aCxsPXFuKE0pO2lmKG8hPT10JiYhcyYmIWZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1uLmNoaWxkcmVuO2Zvcig7ZS0tOylpZihcIldvcmROb2RlXCI9PT1hW2VdLnR5cGUpcmV0dXJuITE7cmV0dXJuITB9KHIsYSkpcmV0dXJuO2lmKG89PT10JiYhcyYmL14oYW5kfG9yfG5vcikkL2kudGVzdChsKSlyZXR1cm47bGV0IGM9ZnVuY3Rpb24obil7Y29uc3QgZT1uLnJlcGxhY2UoL15cXGQrLywobj0+bmUudG9Xb3JkcyhuKStcIiBcIikpLnNwbGl0KC9bJ+KAmSAtXS8sMSlbMF0sYT1lLnRvTG93ZXJDYXNlKCk7bGV0IGk7cmV0dXJuIGVlKGUpJiYoaT1cImFcIiksYWUoZSkmJihpPVwiYVwiPT09aT9cImEtb3ItYW5cIjpcImFuXCIpLGl8fGEhPT1lfHwoaT0vW2FlaW91XS8udGVzdChhLmNoYXJBdCgwKSk/XCJhblwiOlwiYVwiKSxpfShsKTsoXCJhblwiPT09YyYmIXN8fFwiYVwiPT09YyYmcykmJihvIT09dCYmKGM9Yy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStjLnNsaWNlKDEpKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShYbihcIlVzZSBgJXNgIGJlZm9yZSBgJXNgLCBub3QgYCVzYFwiLGMsbCx0KSxuLFwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZTpyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCIpLHthY3R1YWw6dCxleHBlY3RlZDpbY10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1pbmRlZmluaXRlLWFydGljbGUjcmVhZG1lXCJ9KSl9KSl9fWZ1bmN0aW9uIHJlKG4pe2NvbnN0IGU9W10sYT1bXSxpPVtdO2xldCByPS0xO2Zvcig7KytyPG4ubGVuZ3RoOyl7Y29uc3QgdD1uW3JdO1wiKlwiPT09dC5jaGFyQXQodC5sZW5ndGgtMSk/ZS5wdXNoKG5ldyBSZWdFeHAoXCJeXCIrdC5zbGljZSgwLC0xKSxcImlcIikpOnQ9PT10LnRvTG93ZXJDYXNlKCk/aS5wdXNoKHQpOmEucHVzaCh0KX1yZXR1cm4gZnVuY3Rpb24obil7Y29uc3Qgcj1uLnRvTG93ZXJDYXNlKCk7aWYoYS5pbmNsdWRlcyhuKXx8aS5pbmNsdWRlcyhyKSlyZXR1cm4hMDtsZXQgdD0tMTtmb3IoOysrdDxlLmxlbmd0aDspaWYoZVt0XS50ZXN0KG4pKXJldHVybiEwO3JldHVybiExfX12YXIgdGU9TWUoXCJzdGFydFwiKSxvZT1NZShcImVuZFwiKTtmdW5jdGlvbiBNZShuKXtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGE9ZSYmZS5wb3NpdGlvbiYmZS5wb3NpdGlvbltuXXx8e307cmV0dXJue2xpbmU6YS5saW5lfHxudWxsLGNvbHVtbjphLmNvbHVtbnx8bnVsbCxvZmZzZXQ6YS5vZmZzZXQ+LTE/YS5vZmZzZXQ6bnVsbH19fWNvbnN0IHNlPVwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCIsbGU9bmV3IFNldChbXCJoYWRcIixcInRoYXRcIixcImNhblwiLFwiYmxhaFwiLFwiYmVlcFwiLFwieWFkZGFcIixcInNhcGllbnNcIixcInRzZVwiLFwibWF1XCJdKTtmdW5jdGlvbiBjZSgpe3JldHVybihuLGUpPT57X24obixcIlNlbnRlbmNlTm9kZVwiLChuPT57bGV0IGEsaSxyPS0xO2Zvcig7KytyPG4uY2hpbGRyZW4ubGVuZ3RoOyl7Y29uc3QgdD1uLmNoaWxkcmVuW3JdO2lmKFwiV29yZE5vZGVcIj09PXQudHlwZSl7Y29uc3Qgbz1xbih0KTtpPXtjaGlsZDp0LGluZGV4OnIsdmFsdWU6b30sYSYmYS52YWx1ZS50b0xvd2VyQ2FzZSgpPT09by50b0xvd2VyQ2FzZSgpJiYhU2UobykmJk9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKFwiRXhwZWN0ZWQgYFwiK28rXCJgIG9uY2UsIG5vdCB0d2ljZVwiLHtzdGFydDp0ZShhLmNoaWxkKSxlbmQ6b2UodCl9LFtzZSxvLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxXKy9nLFwiLVwiKV0uam9pbihcIjpcIikpLHthY3R1YWw6cW4obi5jaGlsZHJlbi5zbGljZShhLmluZGV4LHIrMSkpLGV4cGVjdGVkOltvXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXJlcGVhdGVkLXdvcmRzI3JlYWRtZVwifSl9ZWxzZVwiV2hpdGVTcGFjZU5vZGVcIj09PXQudHlwZT8oYT1pLGk9dm9pZCAwKTooYT12b2lkIDAsaT12b2lkIDApfXJldHVybiBRbn0pKX19ZnVuY3Rpb24gU2Uobil7aWYobGUuaGFzKG4udG9Mb3dlckNhc2UoKSkpcmV0dXJuITA7Y29uc3QgZT1uLmNoYXJBdCgwKTtpZihlPT09ZS50b1VwcGVyQ2FzZSgpKXtpZigyPT09bi5sZW5ndGgmJlwiLlwiPT09bi5jaGFyQXQoMSkpcmV0dXJuITA7Y29uc3QgZT1uLnNsaWNlKDEpO2lmKGU9PT1lLnRvTG93ZXJDYXNlKCkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gdWUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5jaGFyYWN0ZXI/bi5jaGFyYWN0ZXIvbi53b3JkKjQuNzErbi53b3JkL24uc2VudGVuY2UqLjUtMjEuNDM6TnVtYmVyLk5hTn1mdW5jdGlvbiBkZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkJiZuLmxldHRlcj9uLmxldHRlci9uLndvcmQqMTAwKi4wNTg4LW4uc2VudGVuY2Uvbi53b3JkKjEwMCouMjk2LTE1Ljg6TnVtYmVyLk5hTn12YXIgbWU9W1wiYVwiLFwiYWJsZVwiLFwiYWJvYXJkXCIsXCJhYm91dFwiLFwiYWJvdmVcIixcImFic2VudFwiLFwiYWNjZXB0XCIsXCJhY2NpZGVudFwiLFwiYWNjb3VudFwiLFwiYWNoZVwiLFwiYWNoaW5nXCIsXCJhY29yblwiLFwiYWNyZVwiLFwiYWNyb3NzXCIsXCJhY3RcIixcImFjdHNcIixcImFkZFwiLFwiYWRkcmVzc1wiLFwiYWRtaXJlXCIsXCJhZHZlbnR1cmVcIixcImFmYXJcIixcImFmcmFpZFwiLFwiYWZ0ZXJcIixcImFmdGVybm9vblwiLFwiYWZ0ZXJ3YXJkXCIsXCJhZnRlcndhcmRzXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWdlXCIsXCJhZ2VkXCIsXCJhZ29cIixcImFncmVlXCIsXCJhaFwiLFwiYWhlYWRcIixcImFpZFwiLFwiYWltXCIsXCJhaXJcIixcImFpcmZpZWxkXCIsXCJhaXJwbGFuZVwiLFwiYWlycG9ydFwiLFwiYWlyc2hpcFwiLFwiYWlyeVwiLFwiYWxhcm1cIixcImFsaWtlXCIsXCJhbGl2ZVwiLFwiYWxsXCIsXCJhbGxleVwiLFwiYWxsaWdhdG9yXCIsXCJhbGxvd1wiLFwiYWxtb3N0XCIsXCJhbG9uZVwiLFwiYWxvbmdcIixcImFsb3VkXCIsXCJhbHJlYWR5XCIsXCJhbHNvXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbWVyaWNhXCIsXCJhbWVyaWNhblwiLFwiYW1vbmdcIixcImFtb3VudFwiLFwiYW5cIixcImFuZFwiLFwiYW5nZWxcIixcImFuZ2VyXCIsXCJhbmdyeVwiLFwiYW5pbWFsXCIsXCJhbm90aGVyXCIsXCJhbnN3ZXJcIixcImFudFwiLFwiYW55XCIsXCJhbnlib2R5XCIsXCJhbnlob3dcIixcImFueW9uZVwiLFwiYW55dGhpbmdcIixcImFueXdheVwiLFwiYW55d2hlcmVcIixcImFwYXJ0XCIsXCJhcGFydG1lbnRcIixcImFwZVwiLFwiYXBpZWNlXCIsXCJhcHBlYXJcIixcImFwcGxlXCIsXCJhcHJpbFwiLFwiYXByb25cIixcImFyZVwiLFwiYXJlbid0XCIsXCJhcmlzZVwiLFwiYXJpdGhtZXRpY1wiLFwiYXJtXCIsXCJhcm1mdWxcIixcImFybXlcIixcImFyb3NlXCIsXCJhcm91bmRcIixcImFycmFuZ2VcIixcImFycml2ZVwiLFwiYXJyaXZlZFwiLFwiYXJyb3dcIixcImFydFwiLFwiYXJ0aXN0XCIsXCJhc1wiLFwiYXNoXCIsXCJhc2hlc1wiLFwiYXNpZGVcIixcImFza1wiLFwiYXNsZWVwXCIsXCJhdFwiLFwiYXRlXCIsXCJhdHRhY2tcIixcImF0dGVuZFwiLFwiYXR0ZW50aW9uXCIsXCJhdWd1c3RcIixcImF1bnRcIixcImF1dGhvclwiLFwiYXV0b1wiLFwiYXV0b21vYmlsZVwiLFwiYXV0dW1uXCIsXCJhdmVudWVcIixcImF3YWtlXCIsXCJhd2FrZW5cIixcImF3YXlcIixcImF3ZnVsXCIsXCJhd2Z1bGx5XCIsXCJhd2hpbGVcIixcImF4XCIsXCJheGVcIixcImJhYVwiLFwiYmFiZVwiLFwiYmFiaWVzXCIsXCJiYWNrXCIsXCJiYWNrZ3JvdW5kXCIsXCJiYWNrd2FyZFwiLFwiYmFja3dhcmRzXCIsXCJiYWNvblwiLFwiYmFkXCIsXCJiYWRnZVwiLFwiYmFkbHlcIixcImJhZ1wiLFwiYmFrZVwiLFwiYmFrZXJcIixcImJha2VyeVwiLFwiYmFraW5nXCIsXCJiYWxsXCIsXCJiYWxsb29uXCIsXCJiYW5hbmFcIixcImJhbmRcIixcImJhbmRhZ2VcIixcImJhbmdcIixcImJhbmpvXCIsXCJiYW5rXCIsXCJiYW5rZXJcIixcImJhclwiLFwiYmFyYmVyXCIsXCJiYXJlXCIsXCJiYXJlZm9vdFwiLFwiYmFyZWx5XCIsXCJiYXJrXCIsXCJiYXJuXCIsXCJiYXJyZWxcIixcImJhc2VcIixcImJhc2ViYWxsXCIsXCJiYXNlbWVudFwiLFwiYmFza2V0XCIsXCJiYXRcIixcImJhdGNoXCIsXCJiYXRoXCIsXCJiYXRoZVwiLFwiYmF0aGluZ1wiLFwiYmF0aHJvb21cIixcImJhdGh0dWJcIixcImJhdHRsZVwiLFwiYmF0dGxlc2hpcFwiLFwiYmF5XCIsXCJiZVwiLFwiYmVhY2hcIixcImJlYWRcIixcImJlYW1cIixcImJlYW5cIixcImJlYXJcIixcImJlYXJkXCIsXCJiZWFzdFwiLFwiYmVhdFwiLFwiYmVhdGluZ1wiLFwiYmVhdXRpZnVsXCIsXCJiZWF1dGlmeVwiLFwiYmVhdXR5XCIsXCJiZWNhbWVcIixcImJlY2F1c2VcIixcImJlY29tZVwiLFwiYmVjb21pbmdcIixcImJlZFwiLFwiYmVkYnVnXCIsXCJiZWRyb29tXCIsXCJiZWRzcHJlYWRcIixcImJlZHRpbWVcIixcImJlZVwiLFwiYmVlY2hcIixcImJlZWZcIixcImJlZWZzdGVha1wiLFwiYmVlaGl2ZVwiLFwiYmVlblwiLFwiYmVlclwiLFwiYmVldFwiLFwiYmVmb3JlXCIsXCJiZWdcIixcImJlZ2FuXCIsXCJiZWdnYXJcIixcImJlZ2dlZFwiLFwiYmVnaW5cIixcImJlZ2lubmluZ1wiLFwiYmVndW5cIixcImJlaGF2ZVwiLFwiYmVoaW5kXCIsXCJiZWluZ1wiLFwiYmVsaWV2ZVwiLFwiYmVsbFwiLFwiYmVsb25nXCIsXCJiZWxvd1wiLFwiYmVsdFwiLFwiYmVuY2hcIixcImJlbmRcIixcImJlbmVhdGhcIixcImJlbnRcIixcImJlcnJpZXNcIixcImJlcnJ5XCIsXCJiZXNpZGVcIixcImJlc2lkZXNcIixcImJlc3RcIixcImJldFwiLFwiYmV0dGVyXCIsXCJiZXR3ZWVuXCIsXCJiaWJcIixcImJpYmxlXCIsXCJiaWN5Y2xlXCIsXCJiaWRcIixcImJpZ1wiLFwiYmlnZ2VyXCIsXCJiaWxsXCIsXCJiaWxsYm9hcmRcIixcImJpblwiLFwiYmluZFwiLFwiYmlyZFwiLFwiYmlydGhcIixcImJpcnRoZGF5XCIsXCJiaXNjdWl0XCIsXCJiaXRcIixcImJpdGVcIixcImJpdGluZ1wiLFwiYml0dGVyXCIsXCJibGFja1wiLFwiYmxhY2tiZXJyeVwiLFwiYmxhY2tiaXJkXCIsXCJibGFja2JvYXJkXCIsXCJibGFja25lc3NcIixcImJsYWNrc21pdGhcIixcImJsYW1lXCIsXCJibGFua1wiLFwiYmxhbmtldFwiLFwiYmxhc3RcIixcImJsYXplXCIsXCJibGVlZFwiLFwiYmxlc3NcIixcImJsZXNzaW5nXCIsXCJibGV3XCIsXCJibGluZFwiLFwiYmxpbmRmb2xkXCIsXCJibGluZHNcIixcImJsb2NrXCIsXCJibG9vZFwiLFwiYmxvb21cIixcImJsb3Nzb21cIixcImJsb3RcIixcImJsb3dcIixcImJsdWVcIixcImJsdWViZXJyeVwiLFwiYmx1ZWJpcmRcIixcImJsdXNoXCIsXCJib2FyZFwiLFwiYm9hc3RcIixcImJvYXRcIixcImJvYlwiLFwiYm9id2hpdGVcIixcImJvZGllc1wiLFwiYm9keVwiLFwiYm9pbFwiLFwiYm9pbGVyXCIsXCJib2xkXCIsXCJib25lXCIsXCJib25uZXRcIixcImJvb1wiLFwiYm9va1wiLFwiYm9va2Nhc2VcIixcImJvb2trZWVwZXJcIixcImJvb21cIixcImJvb3RcIixcImJvcm5cIixcImJvcnJvd1wiLFwiYm9zc1wiLFwiYm90aFwiLFwiYm90aGVyXCIsXCJib3R0bGVcIixcImJvdHRvbVwiLFwiYm91Z2h0XCIsXCJib3VuY2VcIixcImJvd1wiLFwiYm93LXdvd1wiLFwiYm93bFwiLFwiYm94XCIsXCJib3hjYXJcIixcImJveGVyXCIsXCJib3hlc1wiLFwiYm95XCIsXCJib3lob29kXCIsXCJicmFjZWxldFwiLFwiYnJhaW5cIixcImJyYWtlXCIsXCJicmFuXCIsXCJicmFuY2hcIixcImJyYXNzXCIsXCJicmF2ZVwiLFwiYnJlYWRcIixcImJyZWFrXCIsXCJicmVha2Zhc3RcIixcImJyZWFzdFwiLFwiYnJlYXRoXCIsXCJicmVhdGhlXCIsXCJicmVlemVcIixcImJyaWNrXCIsXCJicmlkZVwiLFwiYnJpZGdlXCIsXCJicmlnaHRcIixcImJyaWdodG5lc3NcIixcImJyaW5nXCIsXCJicm9hZFwiLFwiYnJvYWRjYXN0XCIsXCJicm9rZVwiLFwiYnJva2VuXCIsXCJicm9va1wiLFwiYnJvb21cIixcImJyb3RoZXJcIixcImJyb3VnaHRcIixcImJyb3duXCIsXCJicnVzaFwiLFwiYnViYmxlXCIsXCJidWNrZXRcIixcImJ1Y2tsZVwiLFwiYnVkXCIsXCJidWZmYWxvXCIsXCJidWdcIixcImJ1Z2d5XCIsXCJidWlsZFwiLFwiYnVpbGRpbmdcIixcImJ1aWx0XCIsXCJidWxiXCIsXCJidWxsXCIsXCJidWxsZXRcIixcImJ1bVwiLFwiYnVtYmxlYmVlXCIsXCJidW1wXCIsXCJidW5cIixcImJ1bmNoXCIsXCJidW5kbGVcIixcImJ1bm55XCIsXCJidXJuXCIsXCJidXJzdFwiLFwiYnVyeVwiLFwiYnVzXCIsXCJidXNoXCIsXCJidXNoZWxcIixcImJ1c2luZXNzXCIsXCJidXN5XCIsXCJidXRcIixcImJ1dGNoZXJcIixcImJ1dHRcIixcImJ1dHRlclwiLFwiYnV0dGVyY3VwXCIsXCJidXR0ZXJmbHlcIixcImJ1dHRlcm1pbGtcIixcImJ1dHRlcnNjb3RjaFwiLFwiYnV0dG9uXCIsXCJidXR0b25ob2xlXCIsXCJidXlcIixcImJ1enpcIixcImJ5XCIsXCJieWVcIixcImNhYlwiLFwiY2FiYmFnZVwiLFwiY2FiaW5cIixcImNhYmluZXRcIixcImNhY2tsZVwiLFwiY2FnZVwiLFwiY2FrZVwiLFwiY2FsZW5kYXJcIixcImNhbGZcIixcImNhbGxcIixcImNhbGxlclwiLFwiY2FsbGluZ1wiLFwiY2FtZVwiLFwiY2FtZWxcIixcImNhbXBcIixcImNhbXBmaXJlXCIsXCJjYW5cIixcImNhbid0XCIsXCJjYW5hbFwiLFwiY2FuYXJ5XCIsXCJjYW5kbGVcIixcImNhbmRsZXN0aWNrXCIsXCJjYW5keVwiLFwiY2FuZVwiLFwiY2Fubm9uXCIsXCJjYW5ub3RcIixcImNhbm9lXCIsXCJjYW55b25cIixcImNhcFwiLFwiY2FwZVwiLFwiY2FwaXRhbFwiLFwiY2FwdGFpblwiLFwiY2FyXCIsXCJjYXJkXCIsXCJjYXJkYm9hcmRcIixcImNhcmVcIixcImNhcmVmdWxcIixcImNhcmVsZXNzXCIsXCJjYXJlbGVzc25lc3NcIixcImNhcmxvYWRcIixcImNhcnBlbnRlclwiLFwiY2FycGV0XCIsXCJjYXJyaWFnZVwiLFwiY2Fycm90XCIsXCJjYXJyeVwiLFwiY2FydFwiLFwiY2FydmVcIixcImNhc2VcIixcImNhc2hcIixcImNhc2hpZXJcIixcImNhc3RsZVwiLFwiY2F0XCIsXCJjYXRiaXJkXCIsXCJjYXRjaFwiLFwiY2F0Y2hlclwiLFwiY2F0ZXJwaWxsYXJcIixcImNhdGZpc2hcIixcImNhdHN1cFwiLFwiY2F0dGxlXCIsXCJjYXVnaHRcIixcImNhdXNlXCIsXCJjYXZlXCIsXCJjZWlsaW5nXCIsXCJjZWxsXCIsXCJjZWxsYXJcIixcImNlbnRcIixcImNlbnRlclwiLFwiY2VyZWFsXCIsXCJjZXJ0YWluXCIsXCJjZXJ0YWlubHlcIixcImNoYWluXCIsXCJjaGFpclwiLFwiY2hhbGtcIixcImNoYW1waW9uXCIsXCJjaGFuY2VcIixcImNoYW5nZVwiLFwiY2hhcFwiLFwiY2hhcmdlXCIsXCJjaGFybVwiLFwiY2hhcnRcIixcImNoYXNlXCIsXCJjaGF0dGVyXCIsXCJjaGVhcFwiLFwiY2hlYXRcIixcImNoZWNrXCIsXCJjaGVja2Vyc1wiLFwiY2hlZWtcIixcImNoZWVyXCIsXCJjaGVlc2VcIixcImNoZXJyeVwiLFwiY2hlc3RcIixcImNoZXdcIixcImNoaWNrXCIsXCJjaGlja2VuXCIsXCJjaGllZlwiLFwiY2hpbGRcIixcImNoaWxkaG9vZFwiLFwiY2hpbGRyZW5cIixcImNoaWxsXCIsXCJjaGlsbHlcIixcImNoaW1uZXlcIixcImNoaW5cIixcImNoaW5hXCIsXCJjaGlwXCIsXCJjaGlwbXVua1wiLFwiY2hvY29sYXRlXCIsXCJjaG9pY2VcIixcImNob29zZVwiLFwiY2hvcFwiLFwiY2hvcnVzXCIsXCJjaG9zZVwiLFwiY2hvc2VuXCIsXCJjaHJpc3RlblwiLFwiY2hyaXN0bWFzXCIsXCJjaHVyY2hcIixcImNodXJuXCIsXCJjaWdhcmV0dGVcIixcImNpcmNsZVwiLFwiY2lyY3VzXCIsXCJjaXRpemVuXCIsXCJjaXR5XCIsXCJjbGFuZ1wiLFwiY2xhcFwiLFwiY2xhc3NcIixcImNsYXNzbWF0ZVwiLFwiY2xhc3Nyb29tXCIsXCJjbGF3XCIsXCJjbGF5XCIsXCJjbGVhblwiLFwiY2xlYW5lclwiLFwiY2xlYXJcIixcImNsZXJrXCIsXCJjbGV2ZXJcIixcImNsaWNrXCIsXCJjbGlmZlwiLFwiY2xpbWJcIixcImNsaXBcIixcImNsb2FrXCIsXCJjbG9ja1wiLFwiY2xvc2VcIixcImNsb3NldFwiLFwiY2xvdGhcIixcImNsb3RoZXNcIixcImNsb3RoaW5nXCIsXCJjbG91ZFwiLFwiY2xvdWR5XCIsXCJjbG92ZXJcIixcImNsb3duXCIsXCJjbHViXCIsXCJjbHVja1wiLFwiY2x1bXBcIixcImNvYWNoXCIsXCJjb2FsXCIsXCJjb2FzdFwiLFwiY29hdFwiLFwiY29iXCIsXCJjb2JibGVyXCIsXCJjb2NvYVwiLFwiY29jb251dFwiLFwiY29jb29uXCIsXCJjb2RcIixcImNvZGZpc2hcIixcImNvZmZlZVwiLFwiY29mZmVlcG90XCIsXCJjb2luXCIsXCJjb2xkXCIsXCJjb2xsYXJcIixcImNvbGxlZ2VcIixcImNvbG9yXCIsXCJjb2xvcmVkXCIsXCJjb2x0XCIsXCJjb2x1bW5cIixcImNvbWJcIixcImNvbWVcIixcImNvbWZvcnRcIixcImNvbWljXCIsXCJjb21pbmdcIixcImNvbXBhbnlcIixcImNvbXBhcmVcIixcImNvbmR1Y3RvclwiLFwiY29uZVwiLFwiY29ubmVjdFwiLFwiY29vXCIsXCJjb29rXCIsXCJjb29rZWRcIixcImNvb2tpZVwiLFwiY29va2llc1wiLFwiY29va2luZ1wiLFwiY29vbFwiLFwiY29vbGVyXCIsXCJjb29wXCIsXCJjb3BwZXJcIixcImNvcHlcIixcImNvcmRcIixcImNvcmtcIixcImNvcm5cIixcImNvcm5lclwiLFwiY29ycmVjdFwiLFwiY29zdFwiLFwiY290XCIsXCJjb3R0YWdlXCIsXCJjb3R0b25cIixcImNvdWNoXCIsXCJjb3VnaFwiLFwiY291bGRcIixcImNvdWxkbid0XCIsXCJjb3VudFwiLFwiY291bnRlclwiLFwiY291bnRyeVwiLFwiY291bnR5XCIsXCJjb3Vyc2VcIixcImNvdXJ0XCIsXCJjb3VzaW5cIixcImNvdmVyXCIsXCJjb3dcIixcImNvd2FyZFwiLFwiY293YXJkbHlcIixcImNvd2JveVwiLFwiY296eVwiLFwiY3JhYlwiLFwiY3JhY2tcIixcImNyYWNrZXJcIixcImNyYWRsZVwiLFwiY3JhbXBzXCIsXCJjcmFuYmVycnlcIixcImNyYW5rXCIsXCJjcmFua3lcIixcImNyYXNoXCIsXCJjcmF3bFwiLFwiY3JhenlcIixcImNyZWFtXCIsXCJjcmVhbXlcIixcImNyZWVrXCIsXCJjcmVlcFwiLFwiY3JlcHRcIixcImNyaWVkXCIsXCJjcmllc1wiLFwiY3JvYWtcIixcImNyb29rXCIsXCJjcm9va2VkXCIsXCJjcm9wXCIsXCJjcm9zc1wiLFwiY3Jvc3MtZXllZFwiLFwiY3Jvc3NpbmdcIixcImNyb3dcIixcImNyb3dkXCIsXCJjcm93ZGVkXCIsXCJjcm93blwiLFwiY3J1ZWxcIixcImNydW1iXCIsXCJjcnVtYmxlXCIsXCJjcnVzaFwiLFwiY3J1c3RcIixcImNyeVwiLFwiY3ViXCIsXCJjdWZmXCIsXCJjdXBcIixcImN1cGJvYXJkXCIsXCJjdXBmdWxcIixcImN1cmVcIixcImN1cmxcIixcImN1cmx5XCIsXCJjdXJ0YWluXCIsXCJjdXJ2ZVwiLFwiY3VzaGlvblwiLFwiY3VzdGFyZFwiLFwiY3VzdG9tZXJcIixcImN1dFwiLFwiY3V0ZVwiLFwiY3V0dGluZ1wiLFwiZGFiXCIsXCJkYWRcIixcImRhZGR5XCIsXCJkYWlseVwiLFwiZGFpcnlcIixcImRhaXN5XCIsXCJkYW1cIixcImRhbWFnZVwiLFwiZGFtZVwiLFwiZGFtcFwiLFwiZGFuY2VcIixcImRhbmNlclwiLFwiZGFuY2luZ1wiLFwiZGFuZHlcIixcImRhbmdlclwiLFwiZGFuZ2Vyb3VzXCIsXCJkYXJlXCIsXCJkYXJrXCIsXCJkYXJrbmVzc1wiLFwiZGFybGluZ1wiLFwiZGFyblwiLFwiZGFydFwiLFwiZGFzaFwiLFwiZGF0ZVwiLFwiZGF1Z2h0ZXJcIixcImRhd25cIixcImRheVwiLFwiZGF5YnJlYWtcIixcImRheXRpbWVcIixcImRlYWRcIixcImRlYWZcIixcImRlYWxcIixcImRlYXJcIixcImRlYXRoXCIsXCJkZWNlbWJlclwiLFwiZGVjaWRlXCIsXCJkZWNrXCIsXCJkZWVkXCIsXCJkZWVwXCIsXCJkZWVyXCIsXCJkZWZlYXRcIixcImRlZmVuZFwiLFwiZGVmZW5zZVwiLFwiZGVsaWdodFwiLFwiZGVuXCIsXCJkZW50aXN0XCIsXCJkZXBlbmRcIixcImRlcG9zaXRcIixcImRlc2NyaWJlXCIsXCJkZXNlcnRcIixcImRlc2VydmVcIixcImRlc2lyZVwiLFwiZGVza1wiLFwiZGVzdHJveVwiLFwiZGV2aWxcIixcImRld1wiLFwiZGlhbW9uZFwiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZVwiLFwiZGllZFwiLFwiZGllc1wiLFwiZGlmZmVyZW5jZVwiLFwiZGlmZmVyZW50XCIsXCJkaWdcIixcImRpbVwiLFwiZGltZVwiLFwiZGluZVwiLFwiZGluZy1kb25nXCIsXCJkaW5uZXJcIixcImRpcFwiLFwiZGlyZWN0XCIsXCJkaXJlY3Rpb25cIixcImRpcnRcIixcImRpcnR5XCIsXCJkaXNjb3ZlclwiLFwiZGlzaFwiLFwiZGlzbGlrZVwiLFwiZGlzbWlzc1wiLFwiZGl0Y2hcIixcImRpdmVcIixcImRpdmVyXCIsXCJkaXZpZGVcIixcImRvXCIsXCJkb2NrXCIsXCJkb2N0b3JcIixcImRvZXNcIixcImRvZXNuJ3RcIixcImRvZ1wiLFwiZG9sbFwiLFwiZG9sbGFyXCIsXCJkb2xseVwiLFwiZG9uJ3RcIixcImRvbmVcIixcImRvbmtleVwiLFwiZG9vclwiLFwiZG9vcmJlbGxcIixcImRvb3Jrbm9iXCIsXCJkb29yc3RlcFwiLFwiZG9wZVwiLFwiZG90XCIsXCJkb3VibGVcIixcImRvdWdoXCIsXCJkb3ZlXCIsXCJkb3duXCIsXCJkb3duc3RhaXJzXCIsXCJkb3dudG93blwiLFwiZG96ZW5cIixcImRyYWdcIixcImRyYWluXCIsXCJkcmFua1wiLFwiZHJhd1wiLFwiZHJhd2VyXCIsXCJkcmF3aW5nXCIsXCJkcmVhbVwiLFwiZHJlc3NcIixcImRyZXNzZXJcIixcImRyZXNzbWFrZXJcIixcImRyZXdcIixcImRyaWVkXCIsXCJkcmlmdFwiLFwiZHJpbGxcIixcImRyaW5rXCIsXCJkcmlwXCIsXCJkcml2ZVwiLFwiZHJpdmVuXCIsXCJkcml2ZXJcIixcImRyb3BcIixcImRyb3ZlXCIsXCJkcm93blwiLFwiZHJvd3N5XCIsXCJkcnViXCIsXCJkcnVtXCIsXCJkcnVua1wiLFwiZHJ5XCIsXCJkdWNrXCIsXCJkdWVcIixcImR1Z1wiLFwiZHVsbFwiLFwiZHVtYlwiLFwiZHVtcFwiLFwiZHVyaW5nXCIsXCJkdXN0XCIsXCJkdXN0eVwiLFwiZHV0eVwiLFwiZHdhcmZcIixcImR3ZWxsXCIsXCJkd2VsdFwiLFwiZHlpbmdcIixcImVhY2hcIixcImVhZ2VyXCIsXCJlYWdsZVwiLFwiZWFyXCIsXCJlYXJseVwiLFwiZWFyblwiLFwiZWFydGhcIixcImVhc3RcIixcImVhc3Rlcm5cIixcImVhc3lcIixcImVhdFwiLFwiZWF0ZW5cIixcImVkZ2VcIixcImVnZ1wiLFwiZWhcIixcImVpZ2h0XCIsXCJlaWdodGVlblwiLFwiZWlnaHRoXCIsXCJlaWdodHlcIixcImVpdGhlclwiLFwiZWxib3dcIixcImVsZGVyXCIsXCJlbGRlc3RcIixcImVsZWN0cmljXCIsXCJlbGVjdHJpY2l0eVwiLFwiZWxlcGhhbnRcIixcImVsZXZlblwiLFwiZWxmXCIsXCJlbG1cIixcImVsc2VcIixcImVsc2V3aGVyZVwiLFwiZW1wdHlcIixcImVuZFwiLFwiZW5kaW5nXCIsXCJlbmVteVwiLFwiZW5naW5lXCIsXCJlbmdpbmVlclwiLFwiZW5nbGlzaFwiLFwiZW5qb3lcIixcImVub3VnaFwiLFwiZW50ZXJcIixcImVudmVsb3BlXCIsXCJlcXVhbFwiLFwiZXJhc2VcIixcImVyYXNlclwiLFwiZXJyYW5kXCIsXCJlc2NhcGVcIixcImV2ZVwiLFwiZXZlblwiLFwiZXZlbmluZ1wiLFwiZXZlclwiLFwiZXZlcnlcIixcImV2ZXJ5Ym9keVwiLFwiZXZlcnlkYXlcIixcImV2ZXJ5b25lXCIsXCJldmVyeXRoaW5nXCIsXCJldmVyeXdoZXJlXCIsXCJldmlsXCIsXCJleGFjdFwiLFwiZXhjZXB0XCIsXCJleGNoYW5nZVwiLFwiZXhjaXRlZFwiLFwiZXhjaXRpbmdcIixcImV4Y3VzZVwiLFwiZXhpdFwiLFwiZXhwZWN0XCIsXCJleHBsYWluXCIsXCJleHRyYVwiLFwiZXllXCIsXCJleWVicm93XCIsXCJmYWJsZVwiLFwiZmFjZVwiLFwiZmFjaW5nXCIsXCJmYWN0XCIsXCJmYWN0b3J5XCIsXCJmYWlsXCIsXCJmYWludFwiLFwiZmFpclwiLFwiZmFpcnlcIixcImZhaXRoXCIsXCJmYWtlXCIsXCJmYWxsXCIsXCJmYWxzZVwiLFwiZmFtaWx5XCIsXCJmYW5cIixcImZhbmN5XCIsXCJmYXJcIixcImZhci1vZmZcIixcImZhcmF3YXlcIixcImZhcmVcIixcImZhcm1cIixcImZhcm1lclwiLFwiZmFybWluZ1wiLFwiZmFydGhlclwiLFwiZmFzaGlvblwiLFwiZmFzdFwiLFwiZmFzdGVuXCIsXCJmYXRcIixcImZhdGhlclwiLFwiZmF1bHRcIixcImZhdm9yXCIsXCJmYXZvcml0ZVwiLFwiZmVhclwiLFwiZmVhc3RcIixcImZlYXRoZXJcIixcImZlYnJ1YXJ5XCIsXCJmZWRcIixcImZlZWRcIixcImZlZWxcIixcImZlZXRcIixcImZlbGxcIixcImZlbGxvd1wiLFwiZmVsdFwiLFwiZmVuY2VcIixcImZldmVyXCIsXCJmZXdcIixcImZpYlwiLFwiZmlkZGxlXCIsXCJmaWVsZFwiLFwiZmlmZVwiLFwiZmlmdGVlblwiLFwiZmlmdGhcIixcImZpZnR5XCIsXCJmaWdcIixcImZpZ2h0XCIsXCJmaWd1cmVcIixcImZpbGVcIixcImZpbGxcIixcImZpbG1cIixcImZpbmFsbHlcIixcImZpbmRcIixcImZpbmVcIixcImZpbmdlclwiLFwiZmluaXNoXCIsXCJmaXJlXCIsXCJmaXJlYXJtXCIsXCJmaXJlY3JhY2tlclwiLFwiZmlyZXBsYWNlXCIsXCJmaXJld29ya3NcIixcImZpcmluZ1wiLFwiZmlyc3RcIixcImZpc2hcIixcImZpc2hlcm1hblwiLFwiZmlzdFwiLFwiZml0XCIsXCJmaXRzXCIsXCJmaXZlXCIsXCJmaXhcIixcImZsYWdcIixcImZsYWtlXCIsXCJmbGFtZVwiLFwiZmxhcFwiLFwiZmxhc2hcIixcImZsYXNobGlnaHRcIixcImZsYXRcIixcImZsZWFcIixcImZsZXNoXCIsXCJmbGV3XCIsXCJmbGllc1wiLFwiZmxpZ2h0XCIsXCJmbGlwXCIsXCJmbGlwLWZsb3BcIixcImZsb2F0XCIsXCJmbG9ja1wiLFwiZmxvb2RcIixcImZsb29yXCIsXCJmbG9wXCIsXCJmbG91clwiLFwiZmxvd1wiLFwiZmxvd2VyXCIsXCJmbG93ZXJ5XCIsXCJmbHV0dGVyXCIsXCJmbHlcIixcImZvYW1cIixcImZvZ1wiLFwiZm9nZ3lcIixcImZvbGRcIixcImZvbGtzXCIsXCJmb2xsb3dcIixcImZvbGxvd2luZ1wiLFwiZm9uZFwiLFwiZm9vZFwiLFwiZm9vbFwiLFwiZm9vbGlzaFwiLFwiZm9vdFwiLFwiZm9vdGJhbGxcIixcImZvb3RwcmludFwiLFwiZm9yXCIsXCJmb3JlaGVhZFwiLFwiZm9yZXN0XCIsXCJmb3JnZXRcIixcImZvcmdpdmVcIixcImZvcmdvdFwiLFwiZm9yZ290dGVuXCIsXCJmb3JrXCIsXCJmb3JtXCIsXCJmb3J0XCIsXCJmb3J0aFwiLFwiZm9ydHVuZVwiLFwiZm9ydHlcIixcImZvcndhcmRcIixcImZvdWdodFwiLFwiZm91bmRcIixcImZvdW50YWluXCIsXCJmb3VyXCIsXCJmb3VydGVlblwiLFwiZm91cnRoXCIsXCJmb3hcIixcImZyYW1lXCIsXCJmcmVlXCIsXCJmcmVlZG9tXCIsXCJmcmVlemVcIixcImZyZWlnaHRcIixcImZyZW5jaFwiLFwiZnJlc2hcIixcImZyZXRcIixcImZyaWRheVwiLFwiZnJpZWRcIixcImZyaWVuZFwiLFwiZnJpZW5kbHlcIixcImZyaWVuZHNoaXBcIixcImZyaWdodGVuXCIsXCJmcm9nXCIsXCJmcm9tXCIsXCJmcm9udFwiLFwiZnJvc3RcIixcImZyb3duXCIsXCJmcm96ZVwiLFwiZnJ1aXRcIixcImZyeVwiLFwiZnVkZ2VcIixcImZ1ZWxcIixcImZ1bGxcIixcImZ1bGx5XCIsXCJmdW5cIixcImZ1bm55XCIsXCJmdXJcIixcImZ1cm5pdHVyZVwiLFwiZnVydGhlclwiLFwiZnV6enlcIixcImdhaW5cIixcImdhbGxvblwiLFwiZ2FsbG9wXCIsXCJnYW1lXCIsXCJnYW5nXCIsXCJnYXJhZ2VcIixcImdhcmJhZ2VcIixcImdhcmRlblwiLFwiZ2FzXCIsXCJnYXNvbGluZVwiLFwiZ2F0ZVwiLFwiZ2F0aGVyXCIsXCJnYXZlXCIsXCJnYXlcIixcImdlYXJcIixcImdlZXNlXCIsXCJnZW5lcmFsXCIsXCJnZW50bGVcIixcImdlbnRsZW1hblwiLFwiZ2VudGxlbWVuXCIsXCJnZW9ncmFwaHlcIixcImdldFwiLFwiZ2V0dGluZ1wiLFwiZ2lhbnRcIixcImdpZnRcIixcImdpbmdlcmJyZWFkXCIsXCJnaXJsXCIsXCJnaXZlXCIsXCJnaXZlblwiLFwiZ2l2aW5nXCIsXCJnbGFkXCIsXCJnbGFkbHlcIixcImdsYW5jZVwiLFwiZ2xhc3NcIixcImdsYXNzZXNcIixcImdsZWFtXCIsXCJnbGlkZVwiLFwiZ2xvcnlcIixcImdsb3ZlXCIsXCJnbG93XCIsXCJnbHVlXCIsXCJnb1wiLFwiZ29hbFwiLFwiZ29hdFwiLFwiZ29iYmxlXCIsXCJnb2RcIixcImdvZG1vdGhlclwiLFwiZ29lc1wiLFwiZ29pbmdcIixcImdvbGRcIixcImdvbGRlblwiLFwiZ29sZGZpc2hcIixcImdvbGZcIixcImdvbmVcIixcImdvb2RcIixcImdvb2QtYnlcIixcImdvb2QtYnllXCIsXCJnb29kLWxvb2tpbmdcIixcImdvb2RieWVcIixcImdvb2RuZXNzXCIsXCJnb29kc1wiLFwiZ29vZHlcIixcImdvb3NlXCIsXCJnb29zZWJlcnJ5XCIsXCJnb3RcIixcImdvdmVyblwiLFwiZ292ZXJubWVudFwiLFwiZ293blwiLFwiZ3JhYlwiLFwiZ3JhY2lvdXNcIixcImdyYWRlXCIsXCJncmFpblwiLFwiZ3JhbmRcIixcImdyYW5kY2hpbGRcIixcImdyYW5kY2hpbGRyZW5cIixcImdyYW5kZGF1Z2h0ZXJcIixcImdyYW5kZmF0aGVyXCIsXCJncmFuZG1hXCIsXCJncmFuZG1vdGhlclwiLFwiZ3JhbmRwYVwiLFwiZ3JhbmRzb25cIixcImdyYW5kc3RhbmRcIixcImdyYXBlXCIsXCJncmFwZWZydWl0XCIsXCJncmFwZXNcIixcImdyYXNzXCIsXCJncmFzc2hvcHBlclwiLFwiZ3JhdGVmdWxcIixcImdyYXZlXCIsXCJncmF2ZWxcIixcImdyYXZleWFyZFwiLFwiZ3JhdnlcIixcImdyYXlcIixcImdyYXplXCIsXCJncmVhc2VcIixcImdyZWF0XCIsXCJncmVlblwiLFwiZ3JlZXRcIixcImdyZXdcIixcImdyaW5kXCIsXCJncm9hblwiLFwiZ3JvY2VyeVwiLFwiZ3JvdW5kXCIsXCJncm91cFwiLFwiZ3JvdmVcIixcImdyb3dcIixcImd1YXJkXCIsXCJndWVzc1wiLFwiZ3Vlc3RcIixcImd1aWRlXCIsXCJndWxmXCIsXCJndW1cIixcImd1blwiLFwiZ3VucG93ZGVyXCIsXCJndXlcIixcImhhXCIsXCJoYWJpdFwiLFwiaGFkXCIsXCJoYWRuJ3RcIixcImhhaWxcIixcImhhaXJcIixcImhhaXJjdXRcIixcImhhaXJwaW5cIixcImhhbGZcIixcImhhbGxcIixcImhhbHRcIixcImhhbVwiLFwiaGFtbWVyXCIsXCJoYW5kXCIsXCJoYW5kZnVsXCIsXCJoYW5ka2VyY2hpZWZcIixcImhhbmRsZVwiLFwiaGFuZHdyaXRpbmdcIixcImhhbmdcIixcImhhcHBlblwiLFwiaGFwcGlseVwiLFwiaGFwcGluZXNzXCIsXCJoYXBweVwiLFwiaGFyYm9yXCIsXCJoYXJkXCIsXCJoYXJkbHlcIixcImhhcmRzaGlwXCIsXCJoYXJkd2FyZVwiLFwiaGFyZVwiLFwiaGFya1wiLFwiaGFybVwiLFwiaGFybmVzc1wiLFwiaGFycFwiLFwiaGFydmVzdFwiLFwiaGFzXCIsXCJoYXNuJ3RcIixcImhhc3RlXCIsXCJoYXN0ZW5cIixcImhhc3R5XCIsXCJoYXRcIixcImhhdGNoXCIsXCJoYXRjaGV0XCIsXCJoYXRlXCIsXCJoYXVsXCIsXCJoYXZlXCIsXCJoYXZlbid0XCIsXCJoYXZpbmdcIixcImhhd2tcIixcImhheVwiLFwiaGF5ZmllbGRcIixcImhheXN0YWNrXCIsXCJoZVwiLFwiaGUnZFwiLFwiaGUnbGxcIixcImhlJ3NcIixcImhlYWRcIixcImhlYWRhY2hlXCIsXCJoZWFsXCIsXCJoZWFsdGhcIixcImhlYWx0aHlcIixcImhlYXBcIixcImhlYXJcIixcImhlYXJkXCIsXCJoZWFyaW5nXCIsXCJoZWFydFwiLFwiaGVhdFwiLFwiaGVhdGVyXCIsXCJoZWF2ZW5cIixcImhlYXZ5XCIsXCJoZWVsXCIsXCJoZWlnaHRcIixcImhlbGRcIixcImhlbGxcIixcImhlbGxvXCIsXCJoZWxtZXRcIixcImhlbHBcIixcImhlbHBlclwiLFwiaGVscGZ1bFwiLFwiaGVtXCIsXCJoZW5cIixcImhlbmhvdXNlXCIsXCJoZXJcIixcImhlcmRcIixcImhlcmVcIixcImhlcmUnc1wiLFwiaGVyb1wiLFwiaGVyc1wiLFwiaGVyc2VsZlwiLFwiaGV5XCIsXCJoaWNrb3J5XCIsXCJoaWRcIixcImhpZGRlblwiLFwiaGlkZVwiLFwiaGlnaFwiLFwiaGlnaHdheVwiLFwiaGlsbFwiLFwiaGlsbHNpZGVcIixcImhpbGx0b3BcIixcImhpbGx5XCIsXCJoaW1cIixcImhpbXNlbGZcIixcImhpbmRcIixcImhpbnRcIixcImhpcFwiLFwiaGlyZVwiLFwiaGlzXCIsXCJoaXNzXCIsXCJoaXN0b3J5XCIsXCJoaXRcIixcImhpdGNoXCIsXCJoaXZlXCIsXCJob1wiLFwiaG9lXCIsXCJob2dcIixcImhvbGRcIixcImhvbGRlclwiLFwiaG9sZVwiLFwiaG9saWRheVwiLFwiaG9sbG93XCIsXCJob2x5XCIsXCJob21lXCIsXCJob21lbHlcIixcImhvbWVzaWNrXCIsXCJob25lc3RcIixcImhvbmV5XCIsXCJob25leWJlZVwiLFwiaG9uZXltb29uXCIsXCJob25rXCIsXCJob25vclwiLFwiaG9vZFwiLFwiaG9vZlwiLFwiaG9va1wiLFwiaG9vcFwiLFwiaG9wXCIsXCJob3BlXCIsXCJob3BlZnVsXCIsXCJob3BlbGVzc1wiLFwiaG9yblwiLFwiaG9yc2VcIixcImhvcnNlYmFja1wiLFwiaG9yc2VzaG9lXCIsXCJob3NlXCIsXCJob3NwaXRhbFwiLFwiaG9zdFwiLFwiaG90XCIsXCJob3RlbFwiLFwiaG91bmRcIixcImhvdXJcIixcImhvdXNlXCIsXCJob3VzZXRvcFwiLFwiaG91c2V3aWZlXCIsXCJob3VzZXdvcmtcIixcImhvd1wiLFwiaG93ZXZlclwiLFwiaG93bFwiLFwiaHVnXCIsXCJodWdlXCIsXCJodW1cIixcImh1bWJsZVwiLFwiaHVtcFwiLFwiaHVuZHJlZFwiLFwiaHVuZ1wiLFwiaHVuZ2VyXCIsXCJodW5ncnlcIixcImh1bmtcIixcImh1bnRcIixcImh1bnRlclwiLFwiaHVycmFoXCIsXCJodXJyaWVkXCIsXCJodXJyeVwiLFwiaHVydFwiLFwiaHVzYmFuZFwiLFwiaHVzaFwiLFwiaHV0XCIsXCJoeW1uXCIsXCJpXCIsXCJpJ2RcIixcImknbGxcIixcImknbVwiLFwiaSd2ZVwiLFwiaWNlXCIsXCJpY3lcIixcImlkZWFcIixcImlkZWFsXCIsXCJpZlwiLFwiaWxsXCIsXCJpbXBvcnRhbnRcIixcImltcG9zc2libGVcIixcImltcHJvdmVcIixcImluXCIsXCJpbmNoXCIsXCJpbmNoZXNcIixcImluY29tZVwiLFwiaW5kZWVkXCIsXCJpbmRpYW5cIixcImluZG9vcnNcIixcImlua1wiLFwiaW5uXCIsXCJpbnNlY3RcIixcImluc2lkZVwiLFwiaW5zdGFudFwiLFwiaW5zdGVhZFwiLFwiaW5zdWx0XCIsXCJpbnRlbmRcIixcImludGVyZXN0ZWRcIixcImludGVyZXN0aW5nXCIsXCJpbnRvXCIsXCJpbnZpdGVcIixcImlyb25cIixcImlzXCIsXCJpc2xhbmRcIixcImlzbid0XCIsXCJpdFwiLFwiaXQnc1wiLFwiaXRzXCIsXCJpdHNlbGZcIixcIml2b3J5XCIsXCJpdnlcIixcImphY2tldFwiLFwiamFja3NcIixcImphaWxcIixcImphbVwiLFwiamFudWFyeVwiLFwiamFyXCIsXCJqYXdcIixcImpheVwiLFwiamVsbHlcIixcImplbGx5ZmlzaFwiLFwiamVya1wiLFwiamlnXCIsXCJqb2JcIixcImpvY2tleVwiLFwiam9pblwiLFwiam9rZVwiLFwiam9raW5nXCIsXCJqb2xseVwiLFwiam91cm5leVwiLFwiam95XCIsXCJqb3lmdWxcIixcImpveW91c1wiLFwianVkZ2VcIixcImp1Z1wiLFwianVpY2VcIixcImp1aWN5XCIsXCJqdWx5XCIsXCJqdW1wXCIsXCJqdW5lXCIsXCJqdW5pb3JcIixcImp1bmtcIixcImp1c3RcIixcImtlZW5cIixcImtlZXBcIixcImtlcHRcIixcImtldHRsZVwiLFwia2V5XCIsXCJraWNrXCIsXCJraWRcIixcImtpbGxcIixcImtpbGxlZFwiLFwia2luZFwiLFwia2luZGx5XCIsXCJraW5kbmVzc1wiLFwia2luZ1wiLFwia2luZ2RvbVwiLFwia2lzc1wiLFwia2l0Y2hlblwiLFwia2l0ZVwiLFwia2l0dGVuXCIsXCJraXR0eVwiLFwia25lZVwiLFwia25lZWxcIixcImtuZXdcIixcImtuaWZlXCIsXCJrbml0XCIsXCJrbml2ZXNcIixcImtub2JcIixcImtub2NrXCIsXCJrbm90XCIsXCJrbm93XCIsXCJrbm93blwiLFwibGFjZVwiLFwibGFkXCIsXCJsYWRkZXJcIixcImxhZGllc1wiLFwibGFkeVwiLFwibGFpZFwiLFwibGFrZVwiLFwibGFtYlwiLFwibGFtZVwiLFwibGFtcFwiLFwibGFuZFwiLFwibGFuZVwiLFwibGFuZ3VhZ2VcIixcImxhbnRlcm5cIixcImxhcFwiLFwibGFyZFwiLFwibGFyZ2VcIixcImxhc2hcIixcImxhc3NcIixcImxhc3RcIixcImxhdGVcIixcImxhdWdoXCIsXCJsYXVuZHJ5XCIsXCJsYXdcIixcImxhd25cIixcImxhd3llclwiLFwibGF5XCIsXCJsYXp5XCIsXCJsZWFkXCIsXCJsZWFkZXJcIixcImxlYWZcIixcImxlYWtcIixcImxlYW5cIixcImxlYXBcIixcImxlYXJuXCIsXCJsZWFybmVkXCIsXCJsZWFzdFwiLFwibGVhdGhlclwiLFwibGVhdmVcIixcImxlYXZpbmdcIixcImxlZFwiLFwibGVmdFwiLFwibGVnXCIsXCJsZW1vblwiLFwibGVtb25hZGVcIixcImxlbmRcIixcImxlbmd0aFwiLFwibGVzc1wiLFwibGVzc29uXCIsXCJsZXRcIixcImxldCdzXCIsXCJsZXR0ZXJcIixcImxldHRpbmdcIixcImxldHR1Y2VcIixcImxldmVsXCIsXCJsaWJlcnR5XCIsXCJsaWJyYXJ5XCIsXCJsaWNlXCIsXCJsaWNrXCIsXCJsaWRcIixcImxpZVwiLFwibGlmZVwiLFwibGlmdFwiLFwibGlnaHRcIixcImxpZ2h0bmVzc1wiLFwibGlnaHRuaW5nXCIsXCJsaWtlXCIsXCJsaWtlbHlcIixcImxpa2luZ1wiLFwibGlseVwiLFwibGltYlwiLFwibGltZVwiLFwibGltcFwiLFwibGluZVwiLFwibGluZW5cIixcImxpb25cIixcImxpcFwiLFwibGlzdFwiLFwibGlzdGVuXCIsXCJsaXRcIixcImxpdHRsZVwiLFwibGl2ZVwiLFwibGl2ZWx5XCIsXCJsaXZlclwiLFwibGl2ZXNcIixcImxpdmluZ1wiLFwibGl6YXJkXCIsXCJsb2FkXCIsXCJsb2FmXCIsXCJsb2FuXCIsXCJsb2F2ZXNcIixcImxvY2tcIixcImxvY29tb3RpdmVcIixcImxvZ1wiLFwibG9uZVwiLFwibG9uZWx5XCIsXCJsb25lc29tZVwiLFwibG9uZ1wiLFwibG9va1wiLFwibG9va291dFwiLFwibG9vcFwiLFwibG9vc2VcIixcImxvcmRcIixcImxvc2VcIixcImxvc2VyXCIsXCJsb3NzXCIsXCJsb3N0XCIsXCJsb3RcIixcImxvdWRcIixcImxvdmVcIixcImxvdmVseVwiLFwibG92ZXJcIixcImxvd1wiLFwibHVja1wiLFwibHVja3lcIixcImx1bWJlclwiLFwibHVtcFwiLFwibHVuY2hcIixcImx5aW5nXCIsXCJtYVwiLFwibWFjaGluZVwiLFwibWFjaGluZXJ5XCIsXCJtYWRcIixcIm1hZGVcIixcIm1hZ2F6aW5lXCIsXCJtYWdpY1wiLFwibWFpZFwiLFwibWFpbFwiLFwibWFpbGJveFwiLFwibWFpbG1hblwiLFwibWFqb3JcIixcIm1ha2VcIixcIm1ha2luZ1wiLFwibWFsZVwiLFwibWFtYVwiLFwibWFtbWFcIixcIm1hblwiLFwibWFuYWdlclwiLFwibWFuZVwiLFwibWFuZ2VyXCIsXCJtYW55XCIsXCJtYXBcIixcIm1hcGxlXCIsXCJtYXJibGVcIixcIm1hcmNoXCIsXCJtYXJlXCIsXCJtYXJrXCIsXCJtYXJrZXRcIixcIm1hcnJpYWdlXCIsXCJtYXJyaWVkXCIsXCJtYXJyeVwiLFwibWFza1wiLFwibWFzdFwiLFwibWFzdGVyXCIsXCJtYXRcIixcIm1hdGNoXCIsXCJtYXR0ZXJcIixcIm1hdHRyZXNzXCIsXCJtYXlcIixcIm1heWJlXCIsXCJtYXlvclwiLFwibWF5cG9sZVwiLFwibWVcIixcIm1lYWRvd1wiLFwibWVhbFwiLFwibWVhblwiLFwibWVhbnNcIixcIm1lYW50XCIsXCJtZWFzdXJlXCIsXCJtZWF0XCIsXCJtZWRpY2luZVwiLFwibWVldFwiLFwibWVldGluZ1wiLFwibWVsdFwiLFwibWVtYmVyXCIsXCJtZW5cIixcIm1lbmRcIixcIm1lb3dcIixcIm1lcnJ5XCIsXCJtZXNzXCIsXCJtZXNzYWdlXCIsXCJtZXRcIixcIm1ldGFsXCIsXCJtZXdcIixcIm1pY2VcIixcIm1pZGRsZVwiLFwibWlkbmlnaHRcIixcIm1pZ2h0XCIsXCJtaWdodHlcIixcIm1pbGVcIixcIm1pbGVyXCIsXCJtaWxrXCIsXCJtaWxrbWFuXCIsXCJtaWxsXCIsXCJtaWxsaW9uXCIsXCJtaW5kXCIsXCJtaW5lXCIsXCJtaW5lclwiLFwibWludFwiLFwibWludXRlXCIsXCJtaXJyb3JcIixcIm1pc2NoaWVmXCIsXCJtaXNzXCIsXCJtaXNzcGVsbFwiLFwibWlzdGFrZVwiLFwibWlzdHlcIixcIm1pdHRcIixcIm1pdHRlblwiLFwibWl4XCIsXCJtb21lbnRcIixcIm1vbmRheVwiLFwibW9uZXlcIixcIm1vbmtleVwiLFwibW9udGhcIixcIm1vb1wiLFwibW9vblwiLFwibW9vbmxpZ2h0XCIsXCJtb29zZVwiLFwibW9wXCIsXCJtb3JlXCIsXCJtb3JuaW5nXCIsXCJtb3Jyb3dcIixcIm1vc3NcIixcIm1vc3RcIixcIm1vc3RseVwiLFwibW90aGVyXCIsXCJtb3RvclwiLFwibW91bnRcIixcIm1vdW50YWluXCIsXCJtb3VzZVwiLFwibW91dGhcIixcIm1vdmVcIixcIm1vdmllXCIsXCJtb3ZpZXNcIixcIm1vdmluZ1wiLFwibW93XCIsXCJtci5cIixcIm1ycy5cIixcIm11Y2hcIixcIm11ZFwiLFwibXVkZHlcIixcIm11Z1wiLFwibXVsZVwiLFwibXVsdGlwbHlcIixcIm11cmRlclwiLFwibXVzaWNcIixcIm11c3RcIixcIm15XCIsXCJteXNlbGZcIixcIm5haWxcIixcIm5hbWVcIixcIm5hcFwiLFwibmFwa2luXCIsXCJuYXJyb3dcIixcIm5hc3R5XCIsXCJuYXVnaHR5XCIsXCJuYXZ5XCIsXCJuZWFyXCIsXCJuZWFyYnlcIixcIm5lYXJseVwiLFwibmVhdFwiLFwibmVja1wiLFwibmVja3RpZVwiLFwibmVlZFwiLFwibmVlZGxlXCIsXCJuZWVkbid0XCIsXCJuZWdyb1wiLFwibmVpZ2hib3JcIixcIm5laWdoYm9yaG9vZFwiLFwibmVpdGhlclwiLFwibmVydmVcIixcIm5lc3RcIixcIm5ldFwiLFwibmV2ZXJcIixcIm5ldmVybW9yZVwiLFwibmV3XCIsXCJuZXdzXCIsXCJuZXdzcGFwZXJcIixcIm5leHRcIixcIm5pYmJsZVwiLFwibmljZVwiLFwibmlja2VsXCIsXCJuaWdodFwiLFwibmlnaHRnb3duXCIsXCJuaW5lXCIsXCJuaW5ldGVlblwiLFwibmluZXR5XCIsXCJub1wiLFwibm9ib2R5XCIsXCJub2RcIixcIm5vaXNlXCIsXCJub2lzeVwiLFwibm9uZVwiLFwibm9vblwiLFwibm9yXCIsXCJub3J0aFwiLFwibm9ydGhlcm5cIixcIm5vc2VcIixcIm5vdFwiLFwibm90ZVwiLFwibm90aGluZ1wiLFwibm90aWNlXCIsXCJub3ZlbWJlclwiLFwibm93XCIsXCJub3doZXJlXCIsXCJudW1iZXJcIixcIm51cnNlXCIsXCJudXRcIixcIm8nY2xvY2tcIixcIm9ha1wiLFwib2FyXCIsXCJvYXRtZWFsXCIsXCJvYXRzXCIsXCJvYmV5XCIsXCJvY2VhblwiLFwib2N0b2JlclwiLFwib2RkXCIsXCJvZlwiLFwib2ZmXCIsXCJvZmZlclwiLFwib2ZmaWNlXCIsXCJvZmZpY2VyXCIsXCJvZnRlblwiLFwib2hcIixcIm9pbFwiLFwib2xkXCIsXCJvbGQtZmFzaGlvbmVkXCIsXCJvblwiLFwib25jZVwiLFwib25lXCIsXCJvbmlvblwiLFwib25seVwiLFwib253YXJkXCIsXCJvcGVuXCIsXCJvclwiLFwib3JhbmdlXCIsXCJvcmNoYXJkXCIsXCJvcmRlclwiLFwib3JlXCIsXCJvcmdhblwiLFwib3RoZXJcIixcIm90aGVyd2lzZVwiLFwib3VjaFwiLFwib3VnaHRcIixcIm91clwiLFwib3Vyc1wiLFwib3Vyc2VsdmVzXCIsXCJvdXRcIixcIm91dGRvb3JzXCIsXCJvdXRmaXRcIixcIm91dGxhd1wiLFwib3V0bGluZVwiLFwib3V0c2lkZVwiLFwib3V0d2FyZFwiLFwib3ZlblwiLFwib3ZlclwiLFwib3ZlcmFsbHNcIixcIm92ZXJjb2F0XCIsXCJvdmVyZWF0XCIsXCJvdmVyaGVhZFwiLFwib3ZlcmhlYXJcIixcIm92ZXJuaWdodFwiLFwib3ZlcnR1cm5cIixcIm93ZVwiLFwib3dpbmdcIixcIm93bFwiLFwib3duXCIsXCJvd25lclwiLFwib3hcIixcInBhXCIsXCJwYWNlXCIsXCJwYWNrXCIsXCJwYWNrYWdlXCIsXCJwYWRcIixcInBhZ2VcIixcInBhaWRcIixcInBhaWxcIixcInBhaW5cIixcInBhaW5mdWxcIixcInBhaW50XCIsXCJwYWludGVyXCIsXCJwYWludGluZ1wiLFwicGFpclwiLFwicGFsXCIsXCJwYWxhY2VcIixcInBhbGVcIixcInBhblwiLFwicGFuY2FrZVwiLFwicGFuZVwiLFwicGFuc3lcIixcInBhbnRzXCIsXCJwYXBhXCIsXCJwYXBlclwiLFwicGFyYWRlXCIsXCJwYXJkb25cIixcInBhcmVudFwiLFwicGFya1wiLFwicGFydFwiLFwicGFydGx5XCIsXCJwYXJ0bmVyXCIsXCJwYXJ0eVwiLFwicGFzc1wiLFwicGFzc2VuZ2VyXCIsXCJwYXN0XCIsXCJwYXN0ZVwiLFwicGFzdHVyZVwiLFwicGF0XCIsXCJwYXRjaFwiLFwicGF0aFwiLFwicGF0dGVyXCIsXCJwYXZlXCIsXCJwYXZlbWVudFwiLFwicGF3XCIsXCJwYXlcIixcInBheW1lbnRcIixcInBlYVwiLFwicGVhY2VcIixcInBlYWNlZnVsXCIsXCJwZWFjaFwiLFwicGVhY2hlc1wiLFwicGVha1wiLFwicGVhbnV0XCIsXCJwZWFyXCIsXCJwZWFybFwiLFwicGVhc1wiLFwicGVja1wiLFwicGVla1wiLFwicGVlbFwiLFwicGVlcFwiLFwicGVnXCIsXCJwZW5cIixcInBlbmNpbFwiLFwicGVubnlcIixcInBlb3BsZVwiLFwicGVwcGVyXCIsXCJwZXBwZXJtaW50XCIsXCJwZXJmdW1lXCIsXCJwZXJoYXBzXCIsXCJwZXJzb25cIixcInBldFwiLFwicGhvbmVcIixcInBpYW5vXCIsXCJwaWNrXCIsXCJwaWNrbGVcIixcInBpY25pY1wiLFwicGljdHVyZVwiLFwicGllXCIsXCJwaWVjZVwiLFwicGlnXCIsXCJwaWdlb25cIixcInBpZ2d5XCIsXCJwaWxlXCIsXCJwaWxsXCIsXCJwaWxsb3dcIixcInBpblwiLFwicGluZVwiLFwicGluZWFwcGxlXCIsXCJwaW5rXCIsXCJwaW50XCIsXCJwaXBlXCIsXCJwaXN0b2xcIixcInBpdFwiLFwicGl0Y2hcIixcInBpdGNoZXJcIixcInBpdHlcIixcInBsYWNlXCIsXCJwbGFpblwiLFwicGxhblwiLFwicGxhbmVcIixcInBsYW50XCIsXCJwbGF0ZVwiLFwicGxhdGZvcm1cIixcInBsYXR0ZXJcIixcInBsYXlcIixcInBsYXllclwiLFwicGxheWdyb3VuZFwiLFwicGxheWhvdXNlXCIsXCJwbGF5bWF0ZVwiLFwicGxheXRoaW5nXCIsXCJwbGVhc2FudFwiLFwicGxlYXNlXCIsXCJwbGVhc3VyZVwiLFwicGxlbnR5XCIsXCJwbG93XCIsXCJwbHVnXCIsXCJwbHVtXCIsXCJwb2NrZXRcIixcInBvY2tldGJvb2tcIixcInBvZW1cIixcInBvaW50XCIsXCJwb2lzb25cIixcInBva2VcIixcInBvbGVcIixcInBvbGljZVwiLFwicG9saWNlbWFuXCIsXCJwb2xpc2hcIixcInBvbGl0ZVwiLFwicG9uZFwiLFwicG9uaWVzXCIsXCJwb255XCIsXCJwb29sXCIsXCJwb29yXCIsXCJwb3BcIixcInBvcGNvcm5cIixcInBvcHBlZFwiLFwicG9yY2hcIixcInBvcmtcIixcInBvc3NpYmxlXCIsXCJwb3N0XCIsXCJwb3N0YWdlXCIsXCJwb3N0bWFuXCIsXCJwb3RcIixcInBvdGF0b1wiLFwicG90YXRvZXNcIixcInBvdW5kXCIsXCJwb3VyXCIsXCJwb3dkZXJcIixcInBvd2VyXCIsXCJwb3dlcmZ1bFwiLFwicHJhaXNlXCIsXCJwcmF5XCIsXCJwcmF5ZXJcIixcInByZXBhcmVcIixcInByZXNlbnRcIixcInByZXR0eVwiLFwicHJpY2VcIixcInByaWNrXCIsXCJwcmluY2VcIixcInByaW5jZXNzXCIsXCJwcmludFwiLFwicHJpc29uXCIsXCJwcml6ZVwiLFwicHJvbWlzZVwiLFwicHJvcGVyXCIsXCJwcm90ZWN0XCIsXCJwcm91ZFwiLFwicHJvdmVcIixcInBydW5lXCIsXCJwdWJsaWNcIixcInB1ZGRsZVwiLFwicHVmZlwiLFwicHVsbFwiLFwicHVtcFwiLFwicHVtcGtpblwiLFwicHVuY2hcIixcInB1bmlzaFwiLFwicHVwXCIsXCJwdXBpbFwiLFwicHVwcHlcIixcInB1cmVcIixcInB1cnBsZVwiLFwicHVyc2VcIixcInB1c2hcIixcInB1c3NcIixcInB1c3N5XCIsXCJwdXNzeWNhdFwiLFwicHV0XCIsXCJwdXR0aW5nXCIsXCJwdXp6bGVcIixcInF1YWNrXCIsXCJxdWFydFwiLFwicXVhcnRlclwiLFwicXVlZW5cIixcInF1ZWVyXCIsXCJxdWVzdGlvblwiLFwicXVpY2tcIixcInF1aWNrbHlcIixcInF1aWV0XCIsXCJxdWlsdFwiLFwicXVpdFwiLFwicXVpdGVcIixcInJhYmJpdFwiLFwicmFjZVwiLFwicmFja1wiLFwicmFkaW9cIixcInJhZGlzaFwiLFwicmFnXCIsXCJyYWlsXCIsXCJyYWlscm9hZFwiLFwicmFpbHdheVwiLFwicmFpblwiLFwicmFpbmJvd1wiLFwicmFpbnlcIixcInJhaXNlXCIsXCJyYWlzaW5cIixcInJha2VcIixcInJhbVwiLFwicmFuXCIsXCJyYW5jaFwiLFwicmFuZ1wiLFwicmFwXCIsXCJyYXBpZGx5XCIsXCJyYXRcIixcInJhdGVcIixcInJhdGhlclwiLFwicmF0dGxlXCIsXCJyYXdcIixcInJheVwiLFwicmVhY2hcIixcInJlYWRcIixcInJlYWRlclwiLFwicmVhZGluZ1wiLFwicmVhZHlcIixcInJlYWxcIixcInJlYWxseVwiLFwicmVhcFwiLFwicmVhclwiLFwicmVhc29uXCIsXCJyZWJ1aWxkXCIsXCJyZWNlaXZlXCIsXCJyZWNlc3NcIixcInJlY29yZFwiLFwicmVkXCIsXCJyZWRiaXJkXCIsXCJyZWRicmVhc3RcIixcInJlZnVzZVwiLFwicmVpbmRlZXJcIixcInJlam9pY2VcIixcInJlbWFpblwiLFwicmVtZW1iZXJcIixcInJlbWluZFwiLFwicmVtb3ZlXCIsXCJyZW50XCIsXCJyZXBhaXJcIixcInJlcGF5XCIsXCJyZXBlYXRcIixcInJlcG9ydFwiLFwicmVzdFwiLFwicmV0dXJuXCIsXCJyZXZpZXdcIixcInJld2FyZFwiLFwicmliXCIsXCJyaWJib25cIixcInJpY2VcIixcInJpY2hcIixcInJpZFwiLFwicmlkZGxlXCIsXCJyaWRlXCIsXCJyaWRlclwiLFwicmlkaW5nXCIsXCJyaWdodFwiLFwicmltXCIsXCJyaW5nXCIsXCJyaXBcIixcInJpcGVcIixcInJpc2VcIixcInJpc2luZ1wiLFwicml2ZXJcIixcInJvYWRcIixcInJvYWRzaWRlXCIsXCJyb2FyXCIsXCJyb2FzdFwiLFwicm9iXCIsXCJyb2JiZXJcIixcInJvYmVcIixcInJvYmluXCIsXCJyb2NrXCIsXCJyb2NrZXRcIixcInJvY2t5XCIsXCJyb2RlXCIsXCJyb2xsXCIsXCJyb2xsZXJcIixcInJvb2ZcIixcInJvb21cIixcInJvb3N0ZXJcIixcInJvb3RcIixcInJvcGVcIixcInJvc2VcIixcInJvc2VidWRcIixcInJvdFwiLFwicm90dGVuXCIsXCJyb3VnaFwiLFwicm91bmRcIixcInJvdXRlXCIsXCJyb3dcIixcInJvd2JvYXRcIixcInJveWFsXCIsXCJydWJcIixcInJ1YmJlZFwiLFwicnViYmVyXCIsXCJydWJiaXNoXCIsXCJydWdcIixcInJ1bGVcIixcInJ1bGVyXCIsXCJydW1ibGVcIixcInJ1blwiLFwicnVuZ1wiLFwicnVubmVyXCIsXCJydW5uaW5nXCIsXCJydXNoXCIsXCJydXN0XCIsXCJydXN0eVwiLFwicnllXCIsXCJzYWNrXCIsXCJzYWRcIixcInNhZGRsZVwiLFwic2FkbmVzc1wiLFwic2FmZVwiLFwic2FmZXR5XCIsXCJzYWlkXCIsXCJzYWlsXCIsXCJzYWlsYm9hdFwiLFwic2FpbG9yXCIsXCJzYWludFwiLFwic2FsYWRcIixcInNhbGVcIixcInNhbHRcIixcInNhbWVcIixcInNhbmRcIixcInNhbmR3aWNoXCIsXCJzYW5keVwiLFwic2FuZ1wiLFwic2Fua1wiLFwic2FwXCIsXCJzYXNoXCIsXCJzYXRcIixcInNhdGluXCIsXCJzYXRpc2ZhY3RvcnlcIixcInNhdHVyZGF5XCIsXCJzYXVzYWdlXCIsXCJzYXZhZ2VcIixcInNhdmVcIixcInNhdmluZ3NcIixcInNhd1wiLFwic2F5XCIsXCJzY2FiXCIsXCJzY2FsZXNcIixcInNjYXJlXCIsXCJzY2FyZlwiLFwic2Nob29sXCIsXCJzY2hvb2xib3lcIixcInNjaG9vbGhvdXNlXCIsXCJzY2hvb2xtYXN0ZXJcIixcInNjaG9vbHJvb21cIixcInNjb3JjaFwiLFwic2NvcmVcIixcInNjcmFwXCIsXCJzY3JhcGVcIixcInNjcmF0Y2hcIixcInNjcmVhbVwiLFwic2NyZWVuXCIsXCJzY3Jld1wiLFwic2NydWJcIixcInNlYVwiLFwic2VhbFwiLFwic2VhbVwiLFwic2VhcmNoXCIsXCJzZWFzb25cIixcInNlYXRcIixcInNlY29uZFwiLFwic2VjcmV0XCIsXCJzZWVcIixcInNlZWRcIixcInNlZWluZ1wiLFwic2Vla1wiLFwic2VlbVwiLFwic2VlblwiLFwic2Vlc2F3XCIsXCJzZWxlY3RcIixcInNlbGZcIixcInNlbGZpc2hcIixcInNlbGxcIixcInNlbmRcIixcInNlbnNlXCIsXCJzZW50XCIsXCJzZW50ZW5jZVwiLFwic2VwYXJhdGVcIixcInNlcHRlbWJlclwiLFwic2VydmFudFwiLFwic2VydmVcIixcInNlcnZpY2VcIixcInNldFwiLFwic2V0dGluZ1wiLFwic2V0dGxlXCIsXCJzZXR0bGVtZW50XCIsXCJzZXZlblwiLFwic2V2ZW50ZWVuXCIsXCJzZXZlbnRoXCIsXCJzZXZlbnR5XCIsXCJzZXZlcmFsXCIsXCJzZXdcIixcInNoYWRlXCIsXCJzaGFkb3dcIixcInNoYWR5XCIsXCJzaGFrZVwiLFwic2hha2VyXCIsXCJzaGFraW5nXCIsXCJzaGFsbFwiLFwic2hhbWVcIixcInNoYW4ndFwiLFwic2hhcGVcIixcInNoYXJlXCIsXCJzaGFycFwiLFwic2hhdmVcIixcInNoZVwiLFwic2hlJ2RcIixcInNoZSdsbFwiLFwic2hlJ3NcIixcInNoZWFyXCIsXCJzaGVhcnNcIixcInNoZWRcIixcInNoZWVwXCIsXCJzaGVldFwiLFwic2hlbGZcIixcInNoZWxsXCIsXCJzaGVwaGVyZFwiLFwic2hpbmVcIixcInNoaW5pbmdcIixcInNoaW55XCIsXCJzaGlwXCIsXCJzaGlydFwiLFwic2hvY2tcIixcInNob2VcIixcInNob2VtYWtlclwiLFwic2hvbmVcIixcInNob29rXCIsXCJzaG9vdFwiLFwic2hvcFwiLFwic2hvcHBpbmdcIixcInNob3JlXCIsXCJzaG9ydFwiLFwic2hvdFwiLFwic2hvdWxkXCIsXCJzaG91bGRlclwiLFwic2hvdWxkbid0XCIsXCJzaG91dFwiLFwic2hvdmVsXCIsXCJzaG93XCIsXCJzaG93ZXJcIixcInNodXRcIixcInNoeVwiLFwic2lja1wiLFwic2lja25lc3NcIixcInNpZGVcIixcInNpZGV3YWxrXCIsXCJzaWRld2F5c1wiLFwic2lnaFwiLFwic2lnaHRcIixcInNpZ25cIixcInNpbGVuY2VcIixcInNpbGVudFwiLFwic2lsa1wiLFwic2lsbFwiLFwic2lsbHlcIixcInNpbHZlclwiLFwic2ltcGxlXCIsXCJzaW5cIixcInNpbmNlXCIsXCJzaW5nXCIsXCJzaW5nZXJcIixcInNpbmdsZVwiLFwic2lua1wiLFwic2lwXCIsXCJzaXJcIixcInNpc1wiLFwic2lzc3lcIixcInNpc3RlclwiLFwic2l0XCIsXCJzaXR0aW5nXCIsXCJzaXhcIixcInNpeHRlZW5cIixcInNpeHRoXCIsXCJzaXh0eVwiLFwic2l6ZVwiLFwic2thdGVcIixcInNrYXRlclwiLFwic2tpXCIsXCJza2luXCIsXCJza2lwXCIsXCJza2lydFwiLFwic2t5XCIsXCJzbGFtXCIsXCJzbGFwXCIsXCJzbGF0ZVwiLFwic2xhdmVcIixcInNsZWRcIixcInNsZWVwXCIsXCJzbGVlcHlcIixcInNsZWV2ZVwiLFwic2xlaWdoXCIsXCJzbGVwdFwiLFwic2xpY2VcIixcInNsaWRcIixcInNsaWRlXCIsXCJzbGluZ1wiLFwic2xpcFwiLFwic2xpcHBlZFwiLFwic2xpcHBlclwiLFwic2xpcHBlcnlcIixcInNsaXRcIixcInNsb3dcIixcInNsb3dseVwiLFwic2x5XCIsXCJzbWFja1wiLFwic21hbGxcIixcInNtYXJ0XCIsXCJzbWVsbFwiLFwic21pbGVcIixcInNtb2tlXCIsXCJzbW9vdGhcIixcInNuYWlsXCIsXCJzbmFrZVwiLFwic25hcFwiLFwic25hcHBpbmdcIixcInNuZWV6ZVwiLFwic25vd1wiLFwic25vd2JhbGxcIixcInNub3dmbGFrZVwiLFwic25vd3lcIixcInNudWZmXCIsXCJzbnVnXCIsXCJzb1wiLFwic29ha1wiLFwic29hcFwiLFwic29iXCIsXCJzb2Nrc1wiLFwic29kXCIsXCJzb2RhXCIsXCJzb2ZhXCIsXCJzb2Z0XCIsXCJzb2lsXCIsXCJzb2xkXCIsXCJzb2xkaWVyXCIsXCJzb2xlXCIsXCJzb21lXCIsXCJzb21lYm9keVwiLFwic29tZWhvd1wiLFwic29tZW9uZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZVwiLFwic29tZXRpbWVzXCIsXCJzb21ld2hlcmVcIixcInNvblwiLFwic29uZ1wiLFwic29vblwiLFwic29yZVwiLFwic29ycm93XCIsXCJzb3JyeVwiLFwic29ydFwiLFwic291bFwiLFwic291bmRcIixcInNvdXBcIixcInNvdXJcIixcInNvdXRoXCIsXCJzb3V0aGVyblwiLFwic3BhY2VcIixcInNwYWRlXCIsXCJzcGFua1wiLFwic3BhcnJvd1wiLFwic3BlYWtcIixcInNwZWFrZXJcIixcInNwZWFyXCIsXCJzcGVlY2hcIixcInNwZWVkXCIsXCJzcGVsbFwiLFwic3BlbGxpbmdcIixcInNwZW5kXCIsXCJzcGVudFwiLFwic3BpZGVyXCIsXCJzcGlrZVwiLFwic3BpbGxcIixcInNwaW5cIixcInNwaW5hY2hcIixcInNwaXJpdFwiLFwic3BpdFwiLFwic3BsYXNoXCIsXCJzcG9pbFwiLFwic3Bva2VcIixcInNwb29rXCIsXCJzcG9vblwiLFwic3BvcnRcIixcInNwb3RcIixcInNwcmVhZFwiLFwic3ByaW5nXCIsXCJzcHJpbmd0aW1lXCIsXCJzcHJpbmtsZVwiLFwic3F1YXJlXCIsXCJzcXVhc2hcIixcInNxdWVha1wiLFwic3F1ZWV6ZVwiLFwic3F1aXJyZWxcIixcInN0YWJsZVwiLFwic3RhY2tcIixcInN0YWdlXCIsXCJzdGFpclwiLFwic3RhbGxcIixcInN0YW1wXCIsXCJzdGFuZFwiLFwic3RhclwiLFwic3RhcmVcIixcInN0YXJ0XCIsXCJzdGFydmVcIixcInN0YXRlXCIsXCJzdGF0ZXNcIixcInN0YXRpb25cIixcInN0YXlcIixcInN0ZWFrXCIsXCJzdGVhbFwiLFwic3RlYW1cIixcInN0ZWFtYm9hdFwiLFwic3RlYW1lclwiLFwic3RlZWxcIixcInN0ZWVwXCIsXCJzdGVlcGxlXCIsXCJzdGVlclwiLFwic3RlbVwiLFwic3RlcFwiLFwic3RlcHBpbmdcIixcInN0aWNrXCIsXCJzdGlja3lcIixcInN0aWZmXCIsXCJzdGlsbFwiLFwic3RpbGxuZXNzXCIsXCJzdGluZ1wiLFwic3RpclwiLFwic3RpdGNoXCIsXCJzdG9ja1wiLFwic3RvY2tpbmdcIixcInN0b2xlXCIsXCJzdG9uZVwiLFwic3Rvb2RcIixcInN0b29sXCIsXCJzdG9vcFwiLFwic3RvcFwiLFwic3RvcHBlZFwiLFwic3RvcHBpbmdcIixcInN0b3JlXCIsXCJzdG9yaWVzXCIsXCJzdG9ya1wiLFwic3Rvcm1cIixcInN0b3JteVwiLFwic3RvcnlcIixcInN0b3ZlXCIsXCJzdHJhaWdodFwiLFwic3RyYW5nZVwiLFwic3RyYW5nZXJcIixcInN0cmFwXCIsXCJzdHJhd1wiLFwic3RyYXdiZXJyeVwiLFwic3RyZWFtXCIsXCJzdHJlZXRcIixcInN0cmV0Y2hcIixcInN0cmluZ1wiLFwic3RyaXBcIixcInN0cmlwZXNcIixcInN0cm9uZ1wiLFwic3R1Y2tcIixcInN0dWR5XCIsXCJzdHVmZlwiLFwic3R1bXBcIixcInN0dW5nXCIsXCJzdWJqZWN0XCIsXCJzdWNoXCIsXCJzdWNrXCIsXCJzdWRkZW5cIixcInN1ZmZlclwiLFwic3VnYXJcIixcInN1aXRcIixcInN1bVwiLFwic3VtbWVyXCIsXCJzdW5cIixcInN1bmRheVwiLFwic3VuZmxvd2VyXCIsXCJzdW5nXCIsXCJzdW5rXCIsXCJzdW5saWdodFwiLFwic3VubnlcIixcInN1bnJpc2VcIixcInN1bnNldFwiLFwic3Vuc2hpbmVcIixcInN1cHBlclwiLFwic3VwcG9zZVwiLFwic3VyZVwiLFwic3VyZWx5XCIsXCJzdXJmYWNlXCIsXCJzdXJwcmlzZVwiLFwic3dhbGxvd1wiLFwic3dhbVwiLFwic3dhbXBcIixcInN3YW5cIixcInN3YXRcIixcInN3ZWFyXCIsXCJzd2VhdFwiLFwic3dlYXRlclwiLFwic3dlZXBcIixcInN3ZWV0XCIsXCJzd2VldGhlYXJ0XCIsXCJzd2VldG5lc3NcIixcInN3ZWxsXCIsXCJzd2VwdFwiLFwic3dpZnRcIixcInN3aW1cIixcInN3aW1taW5nXCIsXCJzd2luZ1wiLFwic3dpdGNoXCIsXCJzd29yZFwiLFwic3dvcmVcIixcInRhYmxlXCIsXCJ0YWJsZWNsb3RoXCIsXCJ0YWJsZXNwb29uXCIsXCJ0YWJsZXRcIixcInRhY2tcIixcInRhZ1wiLFwidGFpbFwiLFwidGFpbG9yXCIsXCJ0YWtlXCIsXCJ0YWtlblwiLFwidGFraW5nXCIsXCJ0YWxlXCIsXCJ0YWxrXCIsXCJ0YWxrZXJcIixcInRhbGxcIixcInRhbWVcIixcInRhblwiLFwidGFua1wiLFwidGFwXCIsXCJ0YXBlXCIsXCJ0YXJcIixcInRhcmR5XCIsXCJ0YXNrXCIsXCJ0YXN0ZVwiLFwidGF1Z2h0XCIsXCJ0YXhcIixcInRlYVwiLFwidGVhY2hcIixcInRlYWNoZXJcIixcInRlYW1cIixcInRlYXJcIixcInRlYXNlXCIsXCJ0ZWFzcG9vblwiLFwidGVldGhcIixcInRlbGVwaG9uZVwiLFwidGVsbFwiLFwidGVtcGVyXCIsXCJ0ZW5cIixcInRlbm5pc1wiLFwidGVudFwiLFwidGVybVwiLFwidGVycmlibGVcIixcInRlc3RcIixcInRoYW5cIixcInRoYW5rXCIsXCJ0aGFua2Z1bFwiLFwidGhhbmtzXCIsXCJ0aGFua3NnaXZpbmdcIixcInRoYXRcIixcInRoYXQnc1wiLFwidGhlXCIsXCJ0aGVhdGVyXCIsXCJ0aGVlXCIsXCJ0aGVpclwiLFwidGhlbVwiLFwidGhlblwiLFwidGhlcmVcIixcInRoZXNlXCIsXCJ0aGV5XCIsXCJ0aGV5J2RcIixcInRoZXknbGxcIixcInRoZXkncmVcIixcInRoZXkndmVcIixcInRoaWNrXCIsXCJ0aGllZlwiLFwidGhpbWJsZVwiLFwidGhpblwiLFwidGhpbmdcIixcInRoaW5rXCIsXCJ0aGlyZFwiLFwidGhpcnN0eVwiLFwidGhpcnRlZW5cIixcInRoaXJ0eVwiLFwidGhpc1wiLFwidGhvcm5cIixcInRob3NlXCIsXCJ0aG91Z2hcIixcInRob3VnaHRcIixcInRob3VzYW5kXCIsXCJ0aHJlYWRcIixcInRocmVlXCIsXCJ0aHJld1wiLFwidGhyb2F0XCIsXCJ0aHJvbmVcIixcInRocm91Z2hcIixcInRocm93XCIsXCJ0aHJvd25cIixcInRodW1iXCIsXCJ0aHVuZGVyXCIsXCJ0aHVyc2RheVwiLFwidGh5XCIsXCJ0aWNrXCIsXCJ0aWNrZXRcIixcInRpY2tsZVwiLFwidGllXCIsXCJ0aWdlclwiLFwidGlnaHRcIixcInRpbGxcIixcInRpbWVcIixcInRpblwiLFwidGlua2xlXCIsXCJ0aW55XCIsXCJ0aXBcIixcInRpcHRvZVwiLFwidGlyZVwiLFwidGlyZWRcIixcInRpdGxlXCIsXCJ0b1wiLFwidG9hZFwiLFwidG9hZHN0b29sXCIsXCJ0b2FzdFwiLFwidG9iYWNjb1wiLFwidG9kYXlcIixcInRvZVwiLFwidG9nZXRoZXJcIixcInRvaWxldFwiLFwidG9sZFwiLFwidG9tYXRvXCIsXCJ0b21vcnJvd1wiLFwidG9uXCIsXCJ0b25lXCIsXCJ0b25ndWVcIixcInRvbmlnaHRcIixcInRvb1wiLFwidG9va1wiLFwidG9vbFwiLFwidG9vdFwiLFwidG9vdGhcIixcInRvb3RoYnJ1c2hcIixcInRvb3RocGlja1wiLFwidG9wXCIsXCJ0b3JlXCIsXCJ0b3JuXCIsXCJ0b3NzXCIsXCJ0b3VjaFwiLFwidG93XCIsXCJ0b3dhcmRcIixcInRvd2FyZHNcIixcInRvd2VsXCIsXCJ0b3dlclwiLFwidG93blwiLFwidG95XCIsXCJ0cmFjZVwiLFwidHJhY2tcIixcInRyYWRlXCIsXCJ0cmFpblwiLFwidHJhbXBcIixcInRyYXBcIixcInRyYXlcIixcInRyZWFzdXJlXCIsXCJ0cmVhdFwiLFwidHJlZVwiLFwidHJpY2tcIixcInRyaWN5Y2xlXCIsXCJ0cmllZFwiLFwidHJpbVwiLFwidHJpcFwiLFwidHJvbGxleVwiLFwidHJvdWJsZVwiLFwidHJ1Y2tcIixcInRydWVcIixcInRydWx5XCIsXCJ0cnVua1wiLFwidHJ1c3RcIixcInRydXRoXCIsXCJ0cnlcIixcInR1YlwiLFwidHVlc2RheVwiLFwidHVnXCIsXCJ0dWxpcFwiLFwidHVtYmxlXCIsXCJ0dW5lXCIsXCJ0dW5uZWxcIixcInR1cmtleVwiLFwidHVyblwiLFwidHVydGxlXCIsXCJ0d2VsdmVcIixcInR3ZW50eVwiLFwidHdpY2VcIixcInR3aWdcIixcInR3aW5cIixcInR3b1wiLFwidWdseVwiLFwidW1icmVsbGFcIixcInVuY2xlXCIsXCJ1bmRlclwiLFwidW5kZXJzdGFuZFwiLFwidW5kZXJ3ZWFyXCIsXCJ1bmRyZXNzXCIsXCJ1bmZhaXJcIixcInVuZmluaXNoZWRcIixcInVuZm9sZFwiLFwidW5mcmllbmRseVwiLFwidW5oYXBweVwiLFwidW5odXJ0XCIsXCJ1bmlmb3JtXCIsXCJ1bml0ZWRcIixcInVua2luZFwiLFwidW5rbm93blwiLFwidW5sZXNzXCIsXCJ1bnBsZWFzYW50XCIsXCJ1bnRpbFwiLFwidW53aWxsaW5nXCIsXCJ1cFwiLFwidXBvblwiLFwidXBwZXJcIixcInVwc2V0XCIsXCJ1cHNpZGVcIixcInVwc3RhaXJzXCIsXCJ1cHRvd25cIixcInVwd2FyZFwiLFwidXNcIixcInVzZVwiLFwidXNlZFwiLFwidXNlZnVsXCIsXCJ2YWxlbnRpbmVcIixcInZhbGxleVwiLFwidmFsdWFibGVcIixcInZhbHVlXCIsXCJ2YXNlXCIsXCJ2ZWdldGFibGVcIixcInZlbHZldFwiLFwidmVyeVwiLFwidmVzc2VsXCIsXCJ2aWN0b3J5XCIsXCJ2aWV3XCIsXCJ2aWxsYWdlXCIsXCJ2aW5lXCIsXCJ2aW9sZXRcIixcInZpc2l0XCIsXCJ2aXNpdG9yXCIsXCJ2b2ljZVwiLFwidm90ZVwiLFwid2FnXCIsXCJ3YWdvblwiLFwid2Fpc3RcIixcIndhaXRcIixcIndha2VcIixcIndha2VuXCIsXCJ3YWxrXCIsXCJ3YWxsXCIsXCJ3YWxudXRcIixcIndhbnRcIixcIndhclwiLFwid2FybVwiLFwid2FyblwiLFwid2FzXCIsXCJ3YXNoXCIsXCJ3YXNoZXJcIixcIndhc2h0dWJcIixcIndhc24ndFwiLFwid2FzdGVcIixcIndhdGNoXCIsXCJ3YXRjaG1hblwiLFwid2F0ZXJcIixcIndhdGVybWVsb25cIixcIndhdGVycHJvb2ZcIixcIndhdmVcIixcIndheFwiLFwid2F5XCIsXCJ3YXlzaWRlXCIsXCJ3ZVwiLFwid2UnZFwiLFwid2UnbGxcIixcIndlJ3JlXCIsXCJ3ZSd2ZVwiLFwid2Vha1wiLFwid2Vha2VuXCIsXCJ3ZWFrbmVzc1wiLFwid2VhbHRoXCIsXCJ3ZWFwb25cIixcIndlYXJcIixcIndlYXJ5XCIsXCJ3ZWF0aGVyXCIsXCJ3ZWF2ZVwiLFwid2ViXCIsXCJ3ZWRkaW5nXCIsXCJ3ZWRuZXNkYXlcIixcIndlZVwiLFwid2VlZFwiLFwid2Vla1wiLFwid2VlcFwiLFwid2VpZ2hcIixcIndlbGNvbWVcIixcIndlbGxcIixcIndlbnRcIixcIndlcmVcIixcIndlc3RcIixcIndlc3Rlcm5cIixcIndldFwiLFwid2hhbGVcIixcIndoYXRcIixcIndoYXQnc1wiLFwid2hlYXRcIixcIndoZWVsXCIsXCJ3aGVuXCIsXCJ3aGVuZXZlclwiLFwid2hlcmVcIixcIndoaWNoXCIsXCJ3aGlsZVwiLFwid2hpcFwiLFwid2hpcHBlZFwiLFwid2hpcmxcIixcIndoaXNrZXlcIixcIndoaXNreVwiLFwid2hpc3BlclwiLFwid2hpc3RsZVwiLFwid2hpdGVcIixcIndob1wiLFwid2hvJ2RcIixcIndobydsbFwiLFwid2hvJ3NcIixcIndob2xlXCIsXCJ3aG9tXCIsXCJ3aG9zZVwiLFwid2h5XCIsXCJ3aWNrZWRcIixcIndpZGVcIixcIndpZmVcIixcIndpZ2dsZVwiLFwid2lsZFwiLFwid2lsZGNhdFwiLFwid2lsbFwiLFwid2lsbGluZ1wiLFwid2lsbG93XCIsXCJ3aW5cIixcIndpbmRcIixcIndpbmRtaWxsXCIsXCJ3aW5kb3dcIixcIndpbmR5XCIsXCJ3aW5lXCIsXCJ3aW5nXCIsXCJ3aW5rXCIsXCJ3aW5uZXJcIixcIndpbnRlclwiLFwid2lwZVwiLFwid2lyZVwiLFwid2lzZVwiLFwid2lzaFwiLFwid2l0XCIsXCJ3aXRjaFwiLFwid2l0aFwiLFwid2l0aG91dFwiLFwid29rZVwiLFwid29sZlwiLFwid29tYW5cIixcIndvbWVuXCIsXCJ3b25cIixcIndvbid0XCIsXCJ3b25kZXJcIixcIndvbmRlcmZ1bFwiLFwid29vZFwiLFwid29vZGVuXCIsXCJ3b29kcGVja2VyXCIsXCJ3b29kc1wiLFwid29vbFwiLFwid29vbGVuXCIsXCJ3b3JkXCIsXCJ3b3JlXCIsXCJ3b3JrXCIsXCJ3b3JrZXJcIixcIndvcmttYW5cIixcIndvcmxkXCIsXCJ3b3JtXCIsXCJ3b3JuXCIsXCJ3b3JyeVwiLFwid29yc2VcIixcIndvcnN0XCIsXCJ3b3J0aFwiLFwid291bGRcIixcIndvdWxkbid0XCIsXCJ3b3VuZFwiLFwid292ZVwiLFwid3JhcFwiLFwid3JhcHBlZFwiLFwid3JlY2tcIixcIndyZW5cIixcIndyaW5nXCIsXCJ3cml0ZVwiLFwid3JpdGluZ1wiLFwid3JpdHRlblwiLFwid3JvbmdcIixcIndyb3RlXCIsXCJ3cnVuZ1wiLFwieWFyZFwiLFwieWFyblwiLFwieWVhclwiLFwieWVsbFwiLFwieWVsbG93XCIsXCJ5ZXNcIixcInllc3RlcmRheVwiLFwieWV0XCIsXCJ5b2xrXCIsXCJ5b25kZXJcIixcInlvdVwiLFwieW91J2RcIixcInlvdSdsbFwiLFwieW91J3JlXCIsXCJ5b3UndmVcIixcInlvdW5nXCIsXCJ5b3VuZ3N0ZXJcIixcInlvdXJcIixcInlvdXJzXCIsXCJ5b3Vyc2VsZlwiLFwieW91cnNlbHZlc1wiLFwieW91dGhcIl0scGU9ezQ6WzAsNF0sNTpbNSw2XSw2Ols3LDhdLDc6WzksMTBdLDg6WzExLDEyXSw5OlsxMywxNV0sMTA6WzE2LE51bWJlci5QT1NJVElWRV9JTkZJTklUWV0sTmFOOltOdW1iZXIuTmFOLE51bWJlci5OYU5dfTtmdW5jdGlvbiBoZShuKXt2YXIgZSxhO3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQ/KGE9LjE1NzkqKGU9KG4uZGlmZmljdWx0V29yZHx8MCkvbi53b3JkKSoxMDArLjA0OTYqbi53b3JkL24uc2VudGVuY2UsZT4uMDUmJihhKz0zLjYzNjUpLGEpOk51bWJlci5OYU59ZnVuY3Rpb24gZ2Uobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5zeWxsYWJsZT8yMDYuODM1LW4ud29yZC9uLnNlbnRlbmNlKjEuMDE1LW4uc3lsbGFibGUvbi53b3JkKjg0LjY6TnVtYmVyLk5hTn1mdW5jdGlvbiB5ZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPy40KihuLndvcmQvbi5zZW50ZW5jZSsobi5jb21wbGV4UG9seXNpbGxhYmljV29yZHx8MCkvbi53b3JkKjEwMCk6TnVtYmVyLk5hTn1mdW5jdGlvbiBiZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZT8zLjEyOTErMS4wNDMqTWF0aC5zcXJ0KChuLnBvbHlzaWxsYWJpY1dvcmR8fDApKigzMC9uLnNlbnRlbmNlKSk6TnVtYmVyLk5hTn12YXIgRGU9W1wiYVwiLFwiYWJsZVwiLFwiYWJvdXRcIixcImFib3ZlXCIsXCJhY3Jvc3NcIixcImFjdFwiLFwiYWRkXCIsXCJhZnJhaWRcIixcImFmdGVyXCIsXCJhZnRlcm5vb25cIixcImFnYWluXCIsXCJhZ2FpbnN0XCIsXCJhZ29cIixcImFpclwiLFwiYWlycGxhbmVcIixcImFsYXJtXCIsXCJhbGxcIixcImFsbW9zdFwiLFwiYWxvbmVcIixcImFsb25nXCIsXCJhbHJlYWR5XCIsXCJhbHNvXCIsXCJhbHdheXNcIixcImFtXCIsXCJhbW9uZ1wiLFwiYW5cIixcImFuZFwiLFwiYW5ncnlcIixcImFuaW1hbFwiLFwiYW5vdGhlclwiLFwiYW5zd2VyXCIsXCJhbnlcIixcImFueW9uZVwiLFwiYXBwZWFyXCIsXCJhcHBsZVwiLFwiYXJlXCIsXCJhcm1cIixcImFyb3VuZFwiLFwiYXJyb3dcIixcImFzXCIsXCJhc2tcIixcImFzbGVlcFwiLFwiYXRcIixcImF0ZVwiLFwiYXR0ZW50aW9uXCIsXCJhdW50XCIsXCJhd2FrZVwiLFwiYXdheVwiLFwiYlwiLFwiYmFieVwiLFwiYmFja1wiLFwiYmFkXCIsXCJiYWdcIixcImJhbGxcIixcImJhbGxvb25cIixcImJhbmdcIixcImJhbmtcIixcImJhcmtcIixcImJhcm5cIixcImJhc2tldFwiLFwiYmVcIixcImJlYW5cIixcImJlYXJcIixcImJlYXRcIixcImJlYXV0aWZ1bFwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlZFwiLFwiYmVlXCIsXCJiZWVuXCIsXCJiZWZvcmVcIixcImJlZ2FuXCIsXCJiZWdpblwiLFwiYmVoaW5kXCIsXCJiZWxpZXZlXCIsXCJiZWxsXCIsXCJiZWxvbmdcIixcImJlbmRcIixcImJlbnRcIixcImJlc2lkZVwiLFwiYmVzdFwiLFwiYmV0dGVyXCIsXCJiZXR3ZWVuXCIsXCJiaWdcIixcImJpcmRcIixcImJpcnRoZGF5XCIsXCJiaXRcIixcImJpdGVcIixcImJsYWNrXCIsXCJibGFua2V0XCIsXCJibGV3XCIsXCJibG9ja1wiLFwiYmxvd1wiLFwiYmx1ZVwiLFwiYm9hcmRcIixcImJvYXRcIixcImJvb2tcIixcImJvb3RcIixcImJvcm5cIixcImJvcnJvd1wiLFwiYm90aFwiLFwiYm90aGVyXCIsXCJib3R0bGVcIixcImJvdHRvbVwiLFwiYm91Z2h0XCIsXCJib3dcIixcImJveFwiLFwiYm95XCIsXCJicmFuY2hcIixcImJyYXZlXCIsXCJicmVhZFwiLFwiYnJlYWtcIixcImJyZWFrZmFzdFwiLFwiYnJlYXRoXCIsXCJicmlja1wiLFwiYnJpZGdlXCIsXCJicmlnaHRcIixcImJyaW5nXCIsXCJicm9rZVwiLFwiYnJva2VuXCIsXCJicm90aGVyXCIsXCJicm91Z2h0XCIsXCJicm93blwiLFwiYnJ1c2hcIixcImJ1aWxkXCIsXCJidW1wXCIsXCJidXJuXCIsXCJidXNcIixcImJ1c3lcIixcImJ1dFwiLFwiYnV0dGVyXCIsXCJidXR0b25cIixcImJ1eVwiLFwiYnlcIixcImNcIixcImNhYmluXCIsXCJjYWdlXCIsXCJjYWtlXCIsXCJjYWxsXCIsXCJjYW1lXCIsXCJjYW1wXCIsXCJjYW5cIixcImNhbid0XCIsXCJjYW5kbGVcIixcImNhbmR5XCIsXCJjYXBcIixcImNhcHRhaW5cIixcImNhclwiLFwiY2FyZFwiLFwiY2FyZVwiLFwiY2FyZWZ1bFwiLFwiY2Fycm90XCIsXCJjYXJyeVwiLFwiY2FzZVwiLFwiY2FzdGxlXCIsXCJjYXRcIixcImNhdGNoXCIsXCJjYXR0bGVcIixcImNhdWdodFwiLFwiY2F1c2VcIixcImNlbnRcIixcImNlcnRhaW5cIixcImNoYWlyXCIsXCJjaGFuY2VcIixcImNoYW5nZVwiLFwiY2hhc2VcIixcImNoaWNrZW5cIixcImNoaWVmXCIsXCJjaGlsZFwiLFwiY2hpbGRyZW5cIixcImNodXJjaFwiLFwiY2lyY2xlXCIsXCJjaXJjdXNcIixcImNpdHlcIixcImNsYXBcIixcImNsZWFuXCIsXCJjbGV2ZXJcIixcImNsaWZmXCIsXCJjbGltYlwiLFwiY2xvY2tcIixcImNsb3NlXCIsXCJjbG90aFwiLFwiY2xvdGhlc1wiLFwiY2xvd25cIixcImNvYXRcIixcImNvbGRcIixcImNvbG9yXCIsXCJjb21lXCIsXCJjb21mb3J0YWJsZVwiLFwiY29tcGFueVwiLFwiY29udGVzdFwiLFwiY29udGludWVcIixcImNvb2tcIixcImNvb2xcIixcImNvcm5lclwiLFwiY291bGRcIixcImNvdW50XCIsXCJjb3VudHJ5XCIsXCJjb3Vyc2VcIixcImNvdmVyXCIsXCJjb3dcIixcImNyYXdsXCIsXCJjcmVhbVwiLFwiY3J5XCIsXCJjdXBcIixcImN1cnRhaW5cIixcImN1dFwiLFwiZFwiLFwiZGFkXCIsXCJkYW5jZVwiLFwiZGFuZ2VyXCIsXCJkYW5nZXJvdXNcIixcImRhcmtcIixcImRhc2hcIixcImRhdWdodGVyXCIsXCJkYXlcIixcImRlYXJcIixcImRlY2lkZVwiLFwiZGVlcFwiLFwiZGVza1wiLFwiZGlkXCIsXCJkaWRuJ3RcIixcImRpZVwiLFwiZGlmZmVyZW50XCIsXCJkaWdcIixcImRpbm5lclwiLFwiZGlyZWN0aW9uXCIsXCJkaXNhcHBlYXJcIixcImRpc2FwcG9pbnRcIixcImRpc2NvdmVyXCIsXCJkaXN0YW5jZVwiLFwiZG9cIixcImRvY3RvclwiLFwiZG9lc1wiLFwiZG9nXCIsXCJkb2xsYXJcIixcImRvbid0XCIsXCJkb25lXCIsXCJkb29yXCIsXCJkb3duXCIsXCJkcmFnb25cIixcImRyZWFtXCIsXCJkcmVzc1wiLFwiZHJpbmtcIixcImRyaXZlXCIsXCJkcm9wXCIsXCJkcm92ZVwiLFwiZHJ5XCIsXCJkdWNrXCIsXCJkdXJpbmdcIixcImR1c3RcIixcImVcIixcImVhY2hcIixcImVhZ2VyXCIsXCJlYXJcIixcImVhcmx5XCIsXCJlYXJuXCIsXCJlYXJ0aFwiLFwiZWFzeVwiLFwiZWF0XCIsXCJlZGdlXCIsXCJlZ2dcIixcImVpZ2h0XCIsXCJlaWdodGVlblwiLFwiZWl0aGVyXCIsXCJlbGVwaGFudFwiLFwiZWxzZVwiLFwiZW1wdHlcIixcImVuZFwiLFwiZW5lbXlcIixcImVub3VnaFwiLFwiZW50ZXJcIixcImV2ZW5cIixcImV2ZXJcIixcImV2ZXJ5XCIsXCJldmVyeXRoaW5nXCIsXCJleGFjdFwiLFwiZXhjZXB0XCIsXCJleGNpdGVcIixcImV4Y2xhaW1cIixcImV4cGxhaW5cIixcImV5ZVwiLFwiZmFjZVwiLFwiZmFjdFwiLFwiZmFpclwiLFwiZmFsbFwiLFwiZmFtaWx5XCIsXCJmYXJcIixcImZhcm1cIixcImZhcm1lclwiLFwiZmFydGhlclwiLFwiZmFzdFwiLFwiZmF0XCIsXCJmYXRoZXJcIixcImZlYXRoZXJcIixcImZlZWRcIixcImZlZWxcIixcImZlZXRcIixcImZlbGxcIixcImZlbGxvd1wiLFwiZmVsdFwiLFwiZmVuY2VcIixcImZld1wiLFwiZmllbGRcIixcImZpZXJjZVwiLFwiZmlnaHRcIixcImZpZ3VyZVwiLFwiZmlsbFwiLFwiZmluYWxcIixcImZpbmRcIixcImZpbmVcIixcImZpbmdlclwiLFwiZmluaXNoXCIsXCJmaXJlXCIsXCJmaXJzdFwiLFwiZmlzaFwiLFwiZml2ZVwiLFwiZmxhZ1wiLFwiZmxhc2hcIixcImZsYXRcIixcImZsZXdcIixcImZsb29yXCIsXCJmbG93ZXJcIixcImZseVwiLFwiZm9sbG93XCIsXCJmb29kXCIsXCJmb3JcIixcImZvcmVzdFwiLFwiZm9yZ2V0XCIsXCJmb3J0aFwiLFwiZm91bmRcIixcImZvdXJcIixcImZvdXJ0aFwiLFwiZm94XCIsXCJmcmVzaFwiLFwiZnJpZW5kXCIsXCJmcmlnaHRlblwiLFwiZnJvZ1wiLFwiZnJvbVwiLFwiZnJvbnRcIixcImZydWl0XCIsXCJmdWxsXCIsXCJmdW5cIixcImZ1bm55XCIsXCJmdXJcIixcImdcIixcImdhbWVcIixcImdhcmRlblwiLFwiZ2FzcFwiLFwiZ2F0ZVwiLFwiZ2F2ZVwiLFwiZ2V0XCIsXCJnaWFudFwiLFwiZ2lmdFwiLFwiZ2lybFwiLFwiZ2l2ZVwiLFwiZ2xhZFwiLFwiZ2xhc3NcIixcImdvXCIsXCJnb2F0XCIsXCJnb25lXCIsXCJnb29kXCIsXCJnb3RcIixcImdyYW5kZmF0aGVyXCIsXCJncmFuZG1vdGhlclwiLFwiZ3Jhc3NcIixcImdyYXlcIixcImdyZWF0XCIsXCJncmVlblwiLFwiZ3Jld1wiLFwiZ3JpblwiLFwiZ3JvdW5kXCIsXCJncm91cFwiLFwiZ3Jvd1wiLFwiZ3Jvd2xcIixcImd1ZXNzXCIsXCJndW5cIixcImhcIixcImhhZFwiLFwiaGFpclwiLFwiaGFsZlwiLFwiaGFsbFwiLFwiaGFuZFwiLFwiaGFuZGxlXCIsXCJoYW5nXCIsXCJoYXBwZW5cIixcImhhcHBpbmVzc1wiLFwiaGFwcHlcIixcImhhcmRcIixcImhhcm1cIixcImhhc1wiLFwiaGF0XCIsXCJoYXRlXCIsXCJoYXZlXCIsXCJoZVwiLFwiaGUnc1wiLFwiaGVhZFwiLFwiaGVhclwiLFwiaGVhcmRcIixcImhlYXZ5XCIsXCJoZWxkXCIsXCJoZWxsb1wiLFwiaGVscFwiLFwiaGVuXCIsXCJoZXJcIixcImhlcmVcIixcImhlcnNlbGZcIixcImhpZFwiLFwiaGlkZVwiLFwiaGlnaFwiLFwiaGlsbFwiLFwiaGltXCIsXCJoaW1zZWxmXCIsXCJoaXNcIixcImhpdFwiLFwiaG9sZFwiLFwiaG9sZVwiLFwiaG9saWRheVwiLFwiaG9tZVwiLFwiaG9uZXlcIixcImhvcFwiLFwiaG9yblwiLFwiaG9yc2VcIixcImhvdFwiLFwiaG91clwiLFwiaG91c2VcIixcImhvd1wiLFwiaG93bFwiLFwiaHVtXCIsXCJodW5kcmVkXCIsXCJodW5nXCIsXCJodW5ncnlcIixcImh1bnRcIixcImh1cnJ5XCIsXCJodXJ0XCIsXCJodXNiYW5kXCIsXCJpXCIsXCJpJ2xsXCIsXCJpJ21cIixcImljZVwiLFwiaWRlYVwiLFwiaWZcIixcImltYWdpbmVcIixcImltcG9ydGFudFwiLFwiaW5cIixcImluY2hcIixcImluZGVlZFwiLFwiaW5zaWRlXCIsXCJpbnN0ZWFkXCIsXCJpbnRvXCIsXCJpbnZpdGVcIixcImlzXCIsXCJpdFwiLFwiaXQnc1wiLFwiaXRzXCIsXCJqXCIsXCJqYWNrZXRcIixcImphclwiLFwiamV0XCIsXCJqb2JcIixcImpvaW5cIixcImpva2VcIixcImpveVwiLFwianVtcFwiLFwianVzdFwiLFwia1wiLFwia2VlcFwiLFwia2VwdFwiLFwia2V5XCIsXCJraWNrXCIsXCJraWxsXCIsXCJraW5kXCIsXCJraW5nXCIsXCJraXRjaGVuXCIsXCJraXR0ZW5cIixcImtuZWVcIixcImtuZXdcIixcImtub2NrXCIsXCJrbm93XCIsXCJsXCIsXCJsYWRkZXJcIixcImxhZHlcIixcImxhaWRcIixcImxha2VcIixcImxhbmRcIixcImxhcmdlXCIsXCJsYXN0XCIsXCJsYXRlXCIsXCJsYXVnaFwiLFwibGF5XCIsXCJsYXp5XCIsXCJsZWFkXCIsXCJsZWFwXCIsXCJsZWFyblwiLFwibGVhc3RcIixcImxlYXZlXCIsXCJsZWZ0XCIsXCJsZWdcIixcImxlc3NcIixcImxldFwiLFwibGV0J3NcIixcImxldHRlclwiLFwibGlja1wiLFwibGlmdFwiLFwibGlnaHRcIixcImxpa2VcIixcImxpbmVcIixcImxpb25cIixcImxpc3RcIixcImxpc3RlblwiLFwibGl0dGxlXCIsXCJsaXZlXCIsXCJsb2FkXCIsXCJsb25nXCIsXCJsb29rXCIsXCJsb3N0XCIsXCJsb3RcIixcImxvdWRcIixcImxvdmVcIixcImxvd1wiLFwibHVja1wiLFwibHVtcFwiLFwibHVuY2hcIixcIm1cIixcIm1hY2hpbmVcIixcIm1hZGVcIixcIm1hZ2ljXCIsXCJtYWlsXCIsXCJtYWtlXCIsXCJtYW5cIixcIm1hbnlcIixcIm1hcmNoXCIsXCJtYXJrXCIsXCJtYXJrZXRcIixcIm1hc3RlclwiLFwibWF0dGVyXCIsXCJtYXlcIixcIm1heWJlXCIsXCJtZVwiLFwibWVhblwiLFwibWVhbnRcIixcIm1lYXRcIixcIm1lZXRcIixcIm1lbHRcIixcIm1lblwiLFwibWVycnlcIixcIm1ldFwiLFwibWlkZGxlXCIsXCJtaWdodFwiLFwibWlsZVwiLFwibWlsa1wiLFwibWlsa21hblwiLFwibWluZFwiLFwibWluZVwiLFwibWludXRlXCIsXCJtaXNzXCIsXCJtaXN0YWtlXCIsXCJtb21lbnRcIixcIm1vbmV5XCIsXCJtb25rZXlcIixcIm1vbnRoXCIsXCJtb3JlXCIsXCJtb3JuaW5nXCIsXCJtb3N0XCIsXCJtb3RoZXJcIixcIm1vdW50YWluXCIsXCJtb3VzZVwiLFwibW91dGhcIixcIm1vdmVcIixcIm11Y2hcIixcIm11ZFwiLFwibXVzaWNcIixcIm11c3RcIixcIm15XCIsXCJuXCIsXCJuYW1lXCIsXCJuZWFyXCIsXCJuZWNrXCIsXCJuZWVkXCIsXCJuZWVkbGVcIixcIm5laWdoYm9yXCIsXCJuZWlnaGJvcmhvb2RcIixcIm5lc3RcIixcIm5ldmVyXCIsXCJuZXdcIixcIm5leHRcIixcIm5pYmJsZVwiLFwibmljZVwiLFwibmlnaHRcIixcIm5pbmVcIixcIm5vXCIsXCJub2RcIixcIm5vaXNlXCIsXCJub25lXCIsXCJub3J0aFwiLFwibm9zZVwiLFwibm90XCIsXCJub3RlXCIsXCJub3RoaW5nXCIsXCJub3RpY2VcIixcIm5vd1wiLFwibnVtYmVyXCIsXCJvXCIsXCJvY2VhblwiLFwib2ZcIixcIm9mZlwiLFwib2ZmZXJcIixcIm9mdGVuXCIsXCJvaFwiLFwib2xkXCIsXCJvblwiLFwib25jZVwiLFwib25lXCIsXCJvbmx5XCIsXCJvcGVuXCIsXCJvclwiLFwib3JhbmdlXCIsXCJvcmRlclwiLFwib3RoZXJcIixcIm91clwiLFwib3V0XCIsXCJvdXRzaWRlXCIsXCJvdmVyXCIsXCJvd2xcIixcIm93blwiLFwicFwiLFwicGFja1wiLFwicGFpZFwiLFwicGFpbFwiLFwicGFpbnRcIixcInBhaXJcIixcInBhbGFjZVwiLFwicGFuXCIsXCJwYXBlclwiLFwicGFyYWRlXCIsXCJwYXJlbnRcIixcInBhcmtcIixcInBhcnRcIixcInBhcnR5XCIsXCJwYXNzXCIsXCJwYXN0XCIsXCJwYXN0dXJlXCIsXCJwYXRoXCIsXCJwYXdcIixcInBheVwiLFwicGVhbnV0XCIsXCJwZWVrXCIsXCJwZW5cIixcInBlbm55XCIsXCJwZW9wbGVcIixcInBlcmZlY3RcIixcInBlcmhhcHNcIixcInBlcnNvblwiLFwicGV0XCIsXCJwaWNrXCIsXCJwaWNrZXRcIixcInBpY25pY1wiLFwicGljdHVyZVwiLFwicGllXCIsXCJwaWVjZVwiLFwicGlnXCIsXCJwaWxlXCIsXCJwaW5cIixcInBsYWNlXCIsXCJwbGFuXCIsXCJwbGFudFwiLFwicGxheVwiLFwicGxlYXNhbnRcIixcInBsZWFzZVwiLFwicGxlbnR5XCIsXCJwbG93XCIsXCJwb2ludFwiLFwicG9rZVwiLFwicG9sZVwiLFwicG9saWNlbWFuXCIsXCJwb25kXCIsXCJwb29yXCIsXCJwb3BcIixcInBvc3RtYW5cIixcInBvdFwiLFwicG90YXRvXCIsXCJwb3VuZFwiLFwicG91clwiLFwicHJhY3RpY2VcIixcInByZXBhcmVcIixcInByZXNlbnRcIixcInByZXRlbmRcIixcInByZXR0eVwiLFwicHJpbmNlc3NcIixcInByaXplXCIsXCJwcm9iYWJseVwiLFwicHJvYmxlbVwiLFwicHJvbWlzZVwiLFwicHJvdGVjdFwiLFwicHJvdWRcIixcInB1ZmZcIixcInB1bGxcIixcInB1cHB5XCIsXCJwdXNoXCIsXCJwdXRcIixcInFcIixcInF1ZWVuXCIsXCJxdWVlclwiLFwicXVpY2tcIixcInF1aWV0XCIsXCJxdWl0ZVwiLFwiclwiLFwicmFiYml0XCIsXCJyYWNjb29uXCIsXCJyYWNlXCIsXCJyYWRpb1wiLFwicmFnXCIsXCJyYWluXCIsXCJyYWlzZVwiLFwicmFuXCIsXCJyYW5jaFwiLFwicmFuZ1wiLFwicmVhY2hcIixcInJlYWRcIixcInJlYWR5XCIsXCJyZWFsXCIsXCJyZWRcIixcInJlZnVzZVwiLFwicmVtZW1iZXJcIixcInJlcGx5XCIsXCJyZXN0XCIsXCJyZXR1cm5cIixcInJld2FyZFwiLFwicmljaFwiLFwicmlkZVwiLFwicmlnaHRcIixcInJpbmdcIixcInJpdmVyXCIsXCJyb2FkXCIsXCJyb2FyXCIsXCJyb2NrXCIsXCJyb2RlXCIsXCJyb2xsXCIsXCJyb29mXCIsXCJyb29tXCIsXCJyb3BlXCIsXCJyb3VuZFwiLFwicm93XCIsXCJydWJcIixcInJ1bGVcIixcInJ1blwiLFwicnVzaFwiLFwic1wiLFwic2FkXCIsXCJzYWZlXCIsXCJzYWlkXCIsXCJzYWlsXCIsXCJzYWxlXCIsXCJzYWx0XCIsXCJzYW1lXCIsXCJzYW5kXCIsXCJzYW5nXCIsXCJzYXRcIixcInNhdmVcIixcInNhd1wiLFwic2F5XCIsXCJzY2FyZVwiLFwic2Nob29sXCIsXCJzY29sZFwiLFwic2NyYXRjaFwiLFwic2NyZWFtXCIsXCJzZWFcIixcInNlYXRcIixcInNlY29uZFwiLFwic2VjcmV0XCIsXCJzZWVcIixcInNlZWRcIixcInNlZW1cIixcInNlZW5cIixcInNlbGxcIixcInNlbmRcIixcInNlbnRcIixcInNldmVuXCIsXCJzZXZlcmFsXCIsXCJzZXdcIixcInNoYWRvd1wiLFwic2hha2VcIixcInNoYWxsXCIsXCJzaGFwZVwiLFwic2hlXCIsXCJzaGVlcFwiLFwic2hlbGxcIixcInNoaW5lXCIsXCJzaGlwXCIsXCJzaG9lXCIsXCJzaG9uZVwiLFwic2hvb2tcIixcInNob290XCIsXCJzaG9wXCIsXCJzaG9yZVwiLFwic2hvcnRcIixcInNob3RcIixcInNob3VsZFwiLFwic2hvd1wiLFwic2lja1wiLFwic2lkZVwiLFwic2lnaHRcIixcInNpZ25cIixcInNpZ25hbFwiLFwic2lsZW50XCIsXCJzaWxseVwiLFwic2lsdmVyXCIsXCJzaW5jZVwiLFwic2luZ1wiLFwic2lzdGVyXCIsXCJzaXRcIixcInNpeFwiLFwic2l6ZVwiLFwic2tpcFwiLFwic2t5XCIsXCJzbGVkXCIsXCJzbGVlcFwiLFwic2xpZFwiLFwic2xpZGVcIixcInNsb3dcIixcInNtYWxsXCIsXCJzbWFydFwiLFwic21lbGxcIixcInNtaWxlXCIsXCJzbW9rZVwiLFwic25hcFwiLFwic25pZmZcIixcInNub3dcIixcInNvXCIsXCJzb2Z0XCIsXCJzb2xkXCIsXCJzb21lXCIsXCJzb21ldGhpbmdcIixcInNvbWV0aW1lc1wiLFwic29uXCIsXCJzb25nXCIsXCJzb29uXCIsXCJzb3JyeVwiLFwic291bmRcIixcInNwZWFrXCIsXCJzcGVjaWFsXCIsXCJzcGVuZFwiLFwic3BpbGxcIixcInNwbGFzaFwiLFwic3Bva2VcIixcInNwb3RcIixcInNwcmVhZFwiLFwic3ByaW5nXCIsXCJzcXVpcnJlbFwiLFwic3RhbmRcIixcInN0YXJcIixcInN0YXJ0XCIsXCJzdGF0aW9uXCIsXCJzdGF5XCIsXCJzdGVwXCIsXCJzdGlja1wiLFwic3RpbGxcIixcInN0b25lXCIsXCJzdG9vZFwiLFwic3RvcFwiLFwic3RvcmVcIixcInN0b3J5XCIsXCJzdHJhaWdodFwiLFwic3RyYW5nZVwiLFwic3RyZWV0XCIsXCJzdHJldGNoXCIsXCJzdHJpa2VcIixcInN0cm9uZ1wiLFwic3VjaFwiLFwic3VkZGVuXCIsXCJzdWdhclwiLFwic3VpdFwiLFwic3VtbWVyXCIsXCJzdW5cIixcInN1cHBlclwiLFwic3VwcG9zZVwiLFwic3VyZVwiLFwic3VycHJpc2VcIixcInN3YWxsb3dcIixcInN3ZWV0XCIsXCJzd2ltXCIsXCJzd2luZ1wiLFwidFwiLFwidGFibGVcIixcInRhaWxcIixcInRha2VcIixcInRhbGtcIixcInRhbGxcIixcInRhcFwiLFwidGFzdGVcIixcInRlYWNoXCIsXCJ0ZWFjaGVyXCIsXCJ0ZWFtXCIsXCJ0ZWFyXCIsXCJ0ZWV0aFwiLFwidGVsZXBob25lXCIsXCJ0ZWxsXCIsXCJ0ZW5cIixcInRlbnRcIixcInRoYW5cIixcInRoYW5rXCIsXCJ0aGF0XCIsXCJ0aGF0J3NcIixcInRoZVwiLFwidGhlaXJcIixcInRoZW1cIixcInRoZW5cIixcInRoZXJlXCIsXCJ0aGVzZVwiLFwidGhleVwiLFwidGhpY2tcIixcInRoaW5cIixcInRoaW5nXCIsXCJ0aGlua1wiLFwidGhpcmRcIixcInRoaXNcIixcInRob3NlXCIsXCJ0aG91Z2hcIixcInRob3VnaHRcIixcInRocmVlXCIsXCJ0aHJld1wiLFwidGhyb3VnaFwiLFwidGhyb3dcIixcInRpZVwiLFwidGlnZXJcIixcInRpZ2h0XCIsXCJ0aW1lXCIsXCJ0aW55XCIsXCJ0aXBcIixcInRpcmVcIixcInRvXCIsXCJ0b2RheVwiLFwidG9lXCIsXCJ0b2dldGhlclwiLFwidG9sZFwiLFwidG9tb3Jyb3dcIixcInRvb1wiLFwidG9va1wiLFwidG9vdGhcIixcInRvcFwiLFwidG91Y2hcIixcInRvd2FyZFwiLFwidG93ZXJcIixcInRvd25cIixcInRveVwiLFwidHJhY2tcIixcInRyYWZmaWNcIixcInRyYWluXCIsXCJ0cmFwXCIsXCJ0cmVlXCIsXCJ0cmlja1wiLFwidHJpcFwiLFwidHJvdFwiLFwidHJ1Y2tcIixcInRydWVcIixcInRydW5rXCIsXCJ0cnlcIixcInR1cmtleVwiLFwidHVyblwiLFwidHVydGxlXCIsXCJ0d2VsdmVcIixcInR3aW5cIixcInR3b1wiLFwidVwiLFwidWdseVwiLFwidW5jbGVcIixcInVuZGVyXCIsXCJ1bmhhcHB5XCIsXCJ1bnRpbFwiLFwidXBcIixcInVwb25cIixcInVwc3RhaXJzXCIsXCJ1c1wiLFwidXNlXCIsXCJ1c3VhbFwiLFwidlwiLFwidmFsbGV5XCIsXCJ2ZWdldGFibGVcIixcInZlcnlcIixcInZpbGxhZ2VcIixcInZpc2l0XCIsXCJ2b2ljZVwiLFwid1wiLFwid2FnXCIsXCJ3YWdvblwiLFwid2FpdFwiLFwid2FrZVwiLFwid2Fsa1wiLFwid2FudFwiLFwid2FyXCIsXCJ3YXJtXCIsXCJ3YXNcIixcIndhc2hcIixcIndhc3RlXCIsXCJ3YXRjaFwiLFwid2F0ZXJcIixcIndhdmVcIixcIndheVwiLFwid2VcIixcIndlYXJcIixcIndlYXRoZXJcIixcIndlZWtcIixcIndlbGxcIixcIndlbnRcIixcIndlcmVcIixcIndldFwiLFwid2hhdFwiLFwid2hlZWxcIixcIndoZW5cIixcIndoZXJlXCIsXCJ3aGljaFwiLFwid2hpbGVcIixcIndoaXNwZXJcIixcIndoaXN0bGVcIixcIndoaXRlXCIsXCJ3aG9cIixcIndob2xlXCIsXCJ3aG9zZVwiLFwid2h5XCIsXCJ3aWRlXCIsXCJ3aWZlXCIsXCJ3aWxsXCIsXCJ3aW5cIixcIndpbmRcIixcIndpbmRvd1wiLFwid2luZ1wiLFwid2lua1wiLFwid2ludGVyXCIsXCJ3aXJlXCIsXCJ3aXNlXCIsXCJ3aXNoXCIsXCJ3aXRoXCIsXCJ3aXRob3V0XCIsXCJ3b2tlXCIsXCJ3b2xmXCIsXCJ3b21hblwiLFwid29tZW5cIixcIndvbid0XCIsXCJ3b25kZXJcIixcIndvb2RcIixcIndvcmRcIixcIndvcmVcIixcIndvcmtcIixcIndvcmxkXCIsXCJ3b3JtXCIsXCJ3b3JyeVwiLFwid29ydGhcIixcIndvdWxkXCIsXCJ3cm9uZ1wiLFwieFwiLFwieVwiLFwieWFyZFwiLFwieWVhclwiLFwieWVsbFwiLFwieWVsbG93XCIsXCJ5ZXNcIixcInlldFwiLFwieW91XCIsXCJ5b3VuZ1wiLFwieW91clwiLFwielwiLFwiem9vXCJdO2Z1bmN0aW9uIGZlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQ/LjY1OSsuMTIxKm4ud29yZC9uLnNlbnRlbmNlKy4wODIqKG4udW5mYW1pbGlhcldvcmR8fDApL24ud29yZCoxMDA6TnVtYmVyLk5hTn12YXIgR2U9YSg0NTApLHdlPWEoNSksdmU9e2FiYWxvbmU6NCxhYmFyZTozLGFiYnJ1enplc2U6NCxhYmVkOjIsYWJvcmlnaW5lOjUsYWJydXp6ZXNlOjQsYWNyZWFnZTozLGFkYW1lOjMsYWRpZXU6MixhZG9iZTozLGFuZW1vbmU6NCxhbnlvbmU6MyxhcGFjaGU6MyxhcGhyb2RpdGU6NCxhcG9zdHJvcGhlOjQsYXJpYWRuZTo0LGNhZmU6MixjYWxsaW9wZTo0LGNhdGFzdHJvcGhlOjQsY2hpbGU6MixjaGxvZToyLGNpcmNlOjIsY295b3RlOjMsZGFwaG5lOjIsZXBpdG9tZTo0LGV1cnlkaWNlOjQsZXV0ZXJwZTozLGV2ZXJ5OjIsZXZlcnl3aGVyZTozLGZvcmV2ZXI6MyxnZXRoc2VtYW5lOjQsZ3VhY2Ftb2xlOjQsaGVybWlvbmU6NCxoeXBlcmJvbGU6NCxqZXNzZToyLGp1a2Vib3g6MixrYXJhdGU6MyxtYWNoZXRlOjMsbWF5YmU6MixuYWl2ZToyLG5ld2x5d2VkOjMscGVuZWxvcGU6NCxwZW9wbGU6MixwZXJzZXBob25lOjQscGhvZWJlOjIscHVsc2U6MSxxdWV1ZToxLHJlY2lwZTozLHJpdmVyYmVkOjMsc2VzYW1lOjMsc2hvcmVsaW5lOjIsc2ltaWxlOjMsc251ZmZsZXVwYWd1czo1LHNvbWV0aW1lczoyLHN5bmNvcGU6Myx0YW1hbGU6Myx3YXRlcmJlZDozLHdlZG5lc2RheToyLHlvc2VtaXRlOjQsem9lOjJ9LGtlPXt9Lmhhc093blByb3BlcnR5LFJlPW5ldyBSZWdFeHAoW1wiYXdlKCR8ZHxzbylcIixcImNpYSg/Omx8JClcIixcInRpYVwiLFwiY2l1c1wiLFwiY2lvdXNcIixcIlteYWVpb3VdZ2l1XCIsXCJbYWVpb3V5XVteYWVpb3V5XWlvblwiLFwiaW91XCIsXCJzaWEkXCIsXCJlb3VzJFwiLFwiW29hXWd1ZSRcIixcIi5bXmFlaXVveWNnbHRkYl17Mix9ZWQkXCIsXCIuZWx5JFwiLFwiXmp1YVwiLFwidWFpXCIsXCJlYXVcIixcIl5idXNpJFwiLFwiKD86W2FlaW91eV0oPzpcIitbXCJbYmNmZ2tsbW5wcnN2d3h5el1cIixcImNoXCIsXCJkZ1wiLFwiZ1tobl1cIixcImxjaFwiLFwibFtsdl1cIixcIm1tXCIsXCJuY2hcIixcIm5bY2duXVwiLFwicltiY25zdl1cIixcInNxdVwiLFwic1tjaGtsc11cIixcInRoXCJdLmpvaW4oXCJ8XCIpK1wiKWVkJClcIixcIig/OlthZWlvdXldKD86XCIrW1wiW2JkZmtsbW5wcnN0dnldXCIsXCJjaFwiLFwiZ1tobl1cIixcImxjaFwiLFwibFtsdl1cIixcIm1tXCIsXCJuY2hcIixcIm5uXCIsXCJyW25zdl1cIixcInNxdVwiLFwic1tja2xzdF1cIixcInRoXCJdLmpvaW4oXCJ8XCIpK1wiKWVzJClcIl0uam9pbihcInxcIiksXCJnXCIpLFllPW5ldyBSZWdFeHAoXCJbYWVpb3V5XSg/OlwiK1tcIltiY2RmZ2tsbW5wcnN0dnl6XVwiLFwiY2hcIixcImRnXCIsXCJnW2huXVwiLFwibFtsdl1cIixcIm1tXCIsXCJuW2NnbnNdXCIsXCJyW2Nuc3ZdXCIsXCJzcXVcIixcInNbY2tsc3RdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillJFwiLFwiZ1wiKSxBZT1uZXcgUmVnRXhwKFwiKD86XCIrW1wiKFteYWVpb3V5XSlcXFxcMWxcIixcIlteYWVpb3V5XWllKD86cnxzP3QpXCIsXCJbYWVpb3V5bV1ibFwiLFwiZW9cIixcImlzbVwiLFwiYXNtXCIsXCJ0aG1cIixcImRudFwiLFwic250XCIsXCJ1aXR5XCIsXCJkZWFcIixcImdlYW5cIixcIm9hXCIsXCJ1YVwiLFwicmVhY3Q/XCIsXCJvcmJlZFwiLFwic2hyZWRcIixcImVpbmdzP1wiLFwiW2FlaW91eV1zaD9lW3JzXVwiXS5qb2luKFwifFwiKStcIikkXCIsXCJnXCIpLFBlPW5ldyBSZWdFeHAoW1wiY3JlYXQoPyF1KVwiLFwiW15ncV11YVteYXVpZW9dXCIsXCJbYWVpb3VdezN9XCIsXCJeKD86aWF8bWN8Y29hW2RnbHhdLilcIixcIl5yZShhcHB8ZXN8aW18dXMpXCIsXCIodGh8ZCllaXN0XCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxDZT1uZXcgUmVnRXhwKFtcIlteYWVpb3VdeVthZV1cIixcIltebF1saWVuXCIsXCJyaWV0XCIsXCJkaWVuXCIsXCJpdVwiLFwiaW9cIixcImlpXCIsXCJ1ZW5cIixcIlthZWlsb3R1XXJlYWxcIixcInJlYWxbYWVpbG90dV1cIixcImllbGxcIixcImVvW15hZWlvdV1cIixcIlthZWlvdV15W2FlaW91XVwiXS5qb2luKFwifFwiKSxcImdcIiksVGU9L1tec11pYS8seGU9bmV3IFJlZ0V4cChbXCJeKD86XCIrW1widW5cIixcImZvcmVcIixcIndhcmVcIixcIm5vbmU/XCIsXCJvdXRcIixcInBvc3RcIixcInN1YlwiLFwicHJlXCIsXCJwcm9cIixcImRpc1wiLFwic2lkZVwiLFwic29tZVwiXS5qb2luKFwifFwiKStcIilcIixcIig/OlwiK1tcImx5XCIsXCJsZXNzXCIsXCJzb21lXCIsXCJmdWxcIixcImVycz9cIixcIm5lc3NcIixcImNpYW5zP1wiLFwibWVudHM/XCIsXCJldHRlcz9cIixcInZpbGxlcz9cIixcInNoaXBzP1wiLFwic2lkZXM/XCIsXCJwb3J0cz9cIixcInNoaXJlcz9cIixcIltnbnN0XWlvbig/OmVkfHMpP1wiXS5qb2luKFwifFwiKStcIikkXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSx6ZT1uZXcgUmVnRXhwKFtcIl4oPzpcIitbXCJhYm92ZVwiLFwiYW50aVwiLFwiYW50ZVwiLFwiY291bnRlclwiLFwiaHlwZXJcIixcImFmb3JlXCIsXCJhZ3JpXCIsXCJpbmZyYVwiLFwiaW50cmFcIixcImludGVyXCIsXCJvdmVyXCIsXCJzZW1pXCIsXCJ1bHRyYVwiLFwidW5kZXJcIixcImV4dHJhXCIsXCJkaWFcIixcIm1pY3JvXCIsXCJtZWdhXCIsXCJraWxvXCIsXCJwaWNvXCIsXCJuYW5vXCIsXCJtYWNyb1wiLFwic29tZXJcIl0uam9pbihcInxcIikrXCIpXCIsXCIoPzpmdWxseXxiZXJyeXx3b21hbnx3b21lbnxlZGx5fHVuaW9ufCgoPzpbYmNkZmdoamtsbW5wcXJzdHZ3eHpdKXxbYWVpb3VdKXllP2luZykkXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxFZT0vKGNyZWF0aW9ucz98b2xvZ3l8b2xvZ2lzdHxvbm9teXxvbm9taXN0KSQvZztmdW5jdGlvbiBCZShuKXt2YXIgZSxhLGkscix0LG89MDtpZigwPT09bi5sZW5ndGgpcmV0dXJuIG87aWYobi5sZW5ndGg8MylyZXR1cm4gMTtpZihrZS5jYWxsKHZlLG4pKXJldHVybiB2ZVtuXTtpZihhPUdlKG4sMSksa2UuY2FsbCh2ZSxhKSlyZXR1cm4gdmVbYV07Zm9yKHI9cygxKSx0PXMoLTEpLGk9KG49bi5yZXBsYWNlKEVlLE0oMykpLnJlcGxhY2UoemUsTSgyKSkucmVwbGFjZSh4ZSxNKDEpKSkuc3BsaXQoL1teYWVpb3V5XSsvKSxlPS0xOysrZTxpLmxlbmd0aDspXCJcIiE9PWlbZV0mJm8rKztyZXR1cm4gbi5yZXBsYWNlKFJlLHQpLnJlcGxhY2UoWWUsdCksbi5yZXBsYWNlKEFlLHIpLnJlcGxhY2UoUGUscikucmVwbGFjZShDZSxyKS5yZXBsYWNlKFRlLHIpLG98fDE7ZnVuY3Rpb24gTShuKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbys9bixcIlwifX1mdW5jdGlvbiBzKG4pe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gbys9bixlfX19Y29uc3QgTmU9e30uaGFzT3duUHJvcGVydHksWmU9TWF0aC5mbG9vcixGZT1NYXRoLnJvdW5kLEllPU1hdGguY2VpbCxVZT1NYXRoLnNxcnQ7ZnVuY3Rpb24gamUobj17fSl7Y29uc3QgZT1uLmFnZXx8MTYsYT1uLnRocmVzaG9sZHx8LjU3MTQyODU3MTQyODU3MTQsaT1udWxsPT09bi5taW5Xb3Jkc3x8dm9pZCAwPT09bi5taW5Xb3Jkcz81Om4ubWluV29yZHM7cmV0dXJuKG4scik9PntfbihuLFwiU2VudGVuY2VOb2RlXCIsKG49Pntjb25zdCB0PXt9LG89e307bGV0IE09MCxzPTAsbD0wLGM9MCxTPTAsdT0wLGQ9MDtpZihfbihuLFwiV29yZE5vZGVcIiwobj0+e2NvbnN0IGU9cW4obiksYT1lLnRvTG93ZXJDYXNlKCksaT1mdW5jdGlvbihuKXtmb3IodmFyIGU9d2UoU3RyaW5nKG4pKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1sn4oCZXS9nLFwiXCIpLnNwbGl0KC9cXGIvZyksYT0tMSxpPTA7KythPGUubGVuZ3RoOylpKz1CZShlW2FdLnJlcGxhY2UoL1teYS16XS9nLFwiXCIpKTtyZXR1cm4gaX0oZSk7dSsrLGMrPWksZCs9ZS5sZW5ndGgsaT49MyYmKGwrKyxlLmNoYXJDb2RlQXQoMCk9PT1hLmNoYXJDb2RlQXQoMCkmJk0rKyksRGUuaW5jbHVkZXMoYSkmJiFOZS5jYWxsKHQsYSkmJih0W2FdPSEwLHMrKyksbWUuaW5jbHVkZXMoYSkmJiFOZS5jYWxsKG8sYSkmJihvW2FdPSEwLFMrKyl9KSksdT49aSl7Y29uc3QgaT17Y29tcGxleFBvbHlzaWxsYWJpY1dvcmQ6TSxwb2x5c2lsbGFiaWNXb3JkOmwsdW5mYW1pbGlhcldvcmQ6dS1zLGRpZmZpY3VsdFdvcmQ6dS1TLHN5bGxhYmxlOmMsc2VudGVuY2U6MSx3b3JkOnUsY2hhcmFjdGVyOmQsbGV0dGVyOmR9LHQ9W0xlKChwPWhlKGkpLGg9TWF0aC5mbG9vcihwKSxoPDU/aD00Omg+OSYmKGg9MTApLHBlW2hdLmNvbmNhdCgpKVsxXSksTGUodWUoaSkpLExlKGRlKGkpKSwobT1nZShpKSwyMC1aZShtLzEwKSkscWUoYmUoaSkpLExlKHllKGkpKSxMZShmZShpKSldO2xldCBvPS0xLGc9MDtmb3IoOysrbzx0Lmxlbmd0aDspdFtvXT5lJiZnKys7Y29uc3QgeT1nL3QubGVuZ3RoO2lmKHk+PWEpe2NvbnN0IGU9ZytcIi9cIit0Lmxlbmd0aDtPYmplY3QuYXNzaWduKHIubWVzc2FnZShcIkhhcmQgdG8gcmVhZCBzZW50ZW5jZSAoY29uZmlkZW5jZTogXCIrZStcIilcIixuLFwicmV0ZXh0LXJlYWRhYmlsaXR5OnJlYWRhYmlsaXR5XCIpLHthY3R1YWw6cW4obiksZXhwZWN0ZWQ6W10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZWFkYWJpbGl0eSNyZWFkbWVcIixjb25maWRlbmNlOnksY29uZmlkZW5jZUxhYmVsOmV9KX19dmFyIG0scCxoO3JldHVybiBRbn0pKX19ZnVuY3Rpb24gTGUobil7cmV0dXJuIEZlKG4rNSl9ZnVuY3Rpb24gcWUobil7cmV0dXJuIEllKFVlKG4pKzIuNSl9Y29uc3QgSGU9V24oXCJTZW50ZW5jZU5vZGVcIiksSmU9V24oXCJXaGl0ZVNwYWNlTm9kZVwiKSxPZT1cInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI7ZnVuY3Rpb24gWGUobj17fSl7bGV0IGU9bi5wcmVmZXJyZWQ7aWYoXCJuZXdsaW5lXCI9PT1lJiYoZT0wKSxudWxsIT1lJiZcInNwYWNlXCIhPT1lfHwoZT0xKSxcImRvdWJsZS1zcGFjZVwiPT09ZSYmKGU9MiksXCJudW1iZXJcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBvcHRpb25zLnByZWZlcnJlZGAgdG8gYmUgYCdzcGFjZSdgLCBgJ25ld2xpbmUnYCwgb3IgYSBgbnVtYmVyYFwiKTtpZihlPDB8fGU+Mil0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBgb3B0aW9ucy5wcmVmZXJyZWRgIHRvIGJlIGAnc3BhY2UnYCwgYCduZXdsaW5lJ2AsIG9yIGEgYG51bWJlcmAgYmV0d2VlbiAoaW5jbHVkaW5nKSBgMGAgYW5kIGAyYFwiKTtyZXR1cm4obixhKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49PntsZXQgaT0tMTtmb3IoOysraTxuLmNoaWxkcmVuLmxlbmd0aDspe2NvbnN0IHI9bi5jaGlsZHJlbltpXTtpZighSGUobi5jaGlsZHJlbltpLTFdKXx8IUplKHIpfHwhSGUobi5jaGlsZHJlbltpKzFdKSljb250aW51ZTtjb25zdCB0PXFuKHIpO2lmKCEvXiArJC8udGVzdCh0KSljb250aW51ZTtjb25zdCBvPXQubGVuZ3RoO2xldCBNO2lmKDA9PT1lKU09XCJFeHBlY3RlZCBhIG5ld2xpbmUgYmV0d2VlbiBzZW50ZW5jZXMsIG5vdCBgXCIrbytcImAgc3BhY2VcIisoMT09PW8/XCJcIjpcInNcIik7ZWxzZXtpZihvPT09ZSljb250aW51ZTtNPVwiRXhwZWN0ZWQgYFwiK2UrXCJgIHNwYWNlXCIrKDE9PT1lP1wiXCI6XCJzXCIpK1wiIGJldHdlZW4gc2VudGVuY2VzLCBub3QgYFwiK28rXCJgXCJ9T2JqZWN0LmFzc2lnbihhLm1lc3NhZ2UoTSxyLFtPZSwwPT09ZT9cIm5ld2xpbmVcIjoxPT09ZT9cInNwYWNlXCI6XCJkb3VibGUtc3BhY2VcIl0uam9pbihcIjpcIikpLHthY3R1YWw6dCxleHBlY3RlZDpbMD09PWU/XCJcXG5cIjoxPT09ZT9cIiBcIjpcIiAgXCJdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtc2VudGVuY2Utc3BhY2luZyNyZWFkbWVcIn0pfX0pKX19ZnVuY3Rpb24gVmUobixlKXtsZXQgYT0oXCJzdHJpbmdcIj09dHlwZW9mIG4/bjpxbihuKSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC/igJkvZyxcIidcIik7cmV0dXJuIGUmJmUuYWxsb3dEYXNoZXN8fChhPWEucmVwbGFjZSgvLS9nLFwiXCIpKSxlJiZlLmFsbG93QXBvc3Ryb3BoZXN8fChhPWEucmVwbGFjZSgvJy9nLFwiXCIpKSxhfWNvbnN0IFdlPVtcIi1cIixcIuKAk1wiLFwi4oCUXCIsXCI6XCIsXCI7XCJdLEtlPXtcIixcIjpbXCIsXCJdLFwiLVwiOltcIi1cIl0sXCLigJNcIjpbXCLigJNcIl0sXCLigJRcIjpbXCLigJRcIl0sJ1wiJzpbJ1wiJ10sXCInXCI6W1wiJ1wiXSxcIuKAmFwiOltcIuKAmVwiXSxcIuKAmlwiOltcIuKAmVwiXSxcIuKAmVwiOltcIuKAmVwiLFwi4oCaXCJdLFwi4oCcXCI6W1wi4oCdXCJdLFwi4oCdXCI6W1wi4oCdXCJdLFwi4oCeXCI6W1wi4oCdXCIsXCLigJxcIl0sXCLCq1wiOltcIsK7XCJdLFwiwrtcIjpbXCLCq1wiXSxcIuKAuVwiOltcIuKAulwiXSxcIuKAulwiOltcIuKAuVwiXSxcIihcIjpbXCIpXCJdLFwiW1wiOltcIl1cIl0sXCJ7XCI6W1wifVwiXSxcIuKfqFwiOltcIuKfqVwiXSxcIuOAjFwiOltcIuOAjVwiXX0sJGU9T2JqZWN0LmtleXMoS2UpO2Z1bmN0aW9uIFFlKG4sZSl7aWYoIW58fCFuLmNoaWxkcmVuKXRocm93IG5ldyBFcnJvcihcIlBhcmVudCBtdXN0IGJlIGEgbm9kZVwiKTtpZihudWxsIT09ZSYmXCJvYmplY3RcIj09dHlwZW9mIGUmJlwidHlwZVwiaW4gZSYmLTE9PT0oZT1uLmNoaWxkcmVuLmluZGV4T2YoZSkpKXRocm93IG5ldyBFcnJvcihcIk5vZGUgbXVzdCBiZSBhIGNoaWxkIG9mIGBwYXJlbnRgXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlfHxOdW1iZXIuaXNOYU4oZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkluZGV4IG11c3QgYmUgYSBudW1iZXJcIik7cmV0dXJuIEJvb2xlYW4oIW5hKG4sLTEsZSkmJl9lKG4sZSwxLFdlKXx8IW5hKG4sZSxuLmNoaWxkcmVuLmxlbmd0aCkmJl9lKG4sZSwtMSxXZSl8fGZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1fZShuLGUsLTEsJGUpO2lmKGEpcmV0dXJuIF9lKG4sZSwxLEtlW3FuKGEpXSl9KG4sZSkpfWZ1bmN0aW9uIF9lKG4sZSxhLGkpe2xldCByPWUrYTtmb3IoO3I+LTEmJnI8bi5jaGlsZHJlbi5sZW5ndGg7KXtjb25zdCBlPW4uY2hpbGRyZW5bcl07aWYoXCJXb3JkTm9kZVwiPT09ZS50eXBlfHxcIlNvdXJjZU5vZGVcIj09PWUudHlwZSlyZXR1cm47aWYoXCJXaGl0ZVNwYWNlTm9kZVwiIT09ZS50eXBlKXJldHVybiBpLmluY2x1ZGVzKHFuKGUpKT9lOnZvaWQgMDtyKz1hfX1mdW5jdGlvbiBuYShuLGUsYSl7Zm9yKDsrK2U8YTspaWYoXCJXb3JkTm9kZVwiPT09bi5jaGlsZHJlbltlXS50eXBlKXJldHVybiEwfWNvbnN0IGVhPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIGFhKG4sZSxhLGkpe2NvbnN0IHI9e1wiKlwiOltdfTtsZXQgdCxvLE09LTE7aWYobz1cImJvb2xlYW5cIj09dHlwZW9mIGk/aT97YWxsb3dBcG9zdHJvcGhlczohMH06e306aXx8e30sIW58fCFuLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZVwiKTtpZihcIm9iamVjdFwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgb2JqZWN0IGZvciBwaHJhc2VzXCIpO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKDsrK008ZS5sZW5ndGg7KWwoZVtNXSk7ZWxzZSBmb3IodCBpbiBlKWVhLmNhbGwoZSx0KSYmbCh0KTtmdW5jdGlvbiBzKG4sZSxhKXtjb25zdCBpPWEuY2hpbGRyZW4scj1lLHQ9bi5zcGxpdChcIiBcIikuc2xpY2UoMSk7bGV0IE09LTE7Zm9yKGUrKzsrK008dC5sZW5ndGg7KXtmb3IoO2U8aS5sZW5ndGgmJlwiV2hpdGVTcGFjZU5vZGVcIj09PWlbZV0udHlwZTspZSsrO2lmKCFpW2VdfHxcIldvcmROb2RlXCIhPT1pW2VdLnR5cGV8fFwiKlwiIT09dFtNXSYmVmUodFtNXSxvKSE9PVZlKGlbZV0sbykpcmV0dXJuO2UrK31yZXR1cm4gaS5zbGljZShyLGUpfWZ1bmN0aW9uIGwobil7Y29uc3QgZT1WZShuLnNwbGl0KFwiIFwiLDEpWzBdLG8pO2VhLmNhbGwocixlKT9yW2VdLnB1c2gobik6cltlXT1bbl19X24obixcIldvcmROb2RlXCIsKChuLGUsaSk9Pntjb25zdCB0PWk7aWYoIXR8fG51bGw9PT1lfHwhby5hbGxvd0xpdGVyYWxzJiZRZSh0LGUpKXJldHVybjtjb25zdCBNPVZlKG4sbyksbD1yW1wiKlwiXS5jb25jYXQoZWEuY2FsbChyLE0pP3JbTV06W10pO2xldCBjPS0xO2Zvcig7KytjPGwubGVuZ3RoOyl7Y29uc3Qgbj1zKGxbY10sZSx0KTtuJiZhKG4sZSx0LGxbY10pfX0pKX1jb25zdCBpYT1bXCJhd29rZW5cIixcImF3b2tlXCIsXCJiZWF0ZW5cIixcImJlYXRcIixcImJlZ3VuXCIsXCJiZWdhblwiLFwiYmVudFwiLFwiYml0dGVuXCIsXCJiaXRcIixcImJsZWRcIixcImJsb3duXCIsXCJibGV3XCIsXCJicm9rZW5cIixcImJyb2tlXCIsXCJicm91Z2h0XCIsXCJidWlsdFwiLFwiYm91Z2h0XCIsXCJjYXVnaHRcIixcImNob3NlblwiLFwiY2hvc2VcIixcImRlYWx0XCIsXCJkb25lXCIsXCJkaWRcIixcImRyYXduXCIsXCJkcmV3XCIsXCJkcml2ZW5cIixcImRyb3ZlXCIsXCJlYXRlblwiLFwiYXRlXCIsXCJmZWRcIixcImZlbHRcIixcImZvdWdodFwiLFwiZm91bmRcIixcImZvcmJpZGRlblwiLFwiZm9yYmFkZVwiLFwiZm9yZ290dGVuXCIsXCJmb3Jnb3RcIixcImZvcmdpdmVuXCIsXCJmb3JnYXZlXCIsXCJmcm96ZW5cIixcImZyb3plXCIsXCJnb3R0ZW5cIixcImdvdFwiLFwiZ2l2ZW5cIixcImdhdmVcIixcImdyb3VuZFwiLFwiZ3JpbmRlZFwiLFwiaHVuZ1wiLFwiaGVhcmRcIixcImhpZGRlblwiLFwiaGlkXCIsXCJoaXRcIixcImhlbGRcIixcImh1cnRcIixcImtlcHRcIixcImtub3duXCIsXCJrbmV3XCIsXCJsYWlkXCIsXCJsZWRcIixcImxldFwiLFwibG9zdFwiLFwibWFkZVwiLFwibWVhbnRcIixcIm1ldFwiLFwicGFpZFwiLFwicHJvdmVuXCIsXCJwcm92ZWRcIixcInB1dFwiLFwicmVhZFwiLFwicmlkZGVuXCIsXCJyb2RlXCIsXCJydW5nXCIsXCJyYW5nXCIsXCJydW5cIixcInJhblwiLFwic2FpZFwiLFwic2VlblwiLFwic2F3XCIsXCJzb2xkXCIsXCJzZW50XCIsXCJzaGFrZW5cIixcInNob29rXCIsXCJzaGF2ZWRcIixcInNob3RcIixcInNob3duXCIsXCJzaHV0XCIsXCJzdW5nXCIsXCJzdW5rXCIsXCJzbGFpblwiLFwic2xld1wiLFwic2xpZFwiLFwic3Bva2VuXCIsXCJzcG9rZVwiLFwic3BlbnRcIixcInNwdW5cIixcInNwbGl0XCIsXCJzcHJlYWRcIixcInN0b2xlblwiLFwic3RvbGVcIixcInN0cnVja1wiLFwic3dlcHRcIixcInN3dW5nXCIsXCJ0YWtlblwiLFwidG9va1wiLFwidGF1Z2h0XCIsXCJ0b3JuXCIsXCJ0b3JlXCIsXCJ0b2xkXCIsXCJ0aG91Z2h0XCIsXCJ0aHJvd25cIixcInRocmV3XCIsXCJ1bmRlcmdvbmVcIixcInVuZGVyd2VudFwiLFwidW5kZXJzdG9vZFwiLFwidXBzZXRcIixcIndva2VuXCIsXCJ3b2tlXCIsXCJ3b3JuXCIsXCJ3b3JlXCIsXCJ3b25cIixcIndpdGhkcmF3blwiLFwid2l0aGRyZXdcIixcIndyaXR0ZW5cIixcIndyb3RlXCIsXCJiZWVuXCIsXCJib3JuXCIsXCJiZWNvbWVcIixcImJlc2V0XCIsXCJiZXRcIixcImJpZFwiLFwiYmlkZGVuXCIsXCJib3VuZFwiLFwiYnJlZFwiLFwiYnJvYWRjYXN0XCIsXCJidXJudFwiLFwiYnVyc3RcIixcImNhc3RcIixcImNsdW5nXCIsXCJjb21lXCIsXCJjb3N0XCIsXCJjcmVwdFwiLFwiY3V0XCIsXCJkdWdcIixcImRpdmVkXCIsXCJkcmVhbXRcIixcImRydW5rXCIsXCJmYWxsZW5cIixcImZpdFwiLFwiZmxlZFwiLFwiZmx1bmdcIixcImZsb3duXCIsXCJmb3JlZ29uZVwiLFwiZm9yc2FrZW5cIixcImdvbmVcIixcImdyb3duXCIsXCJrbmVsdFwiLFwia25pdFwiLFwibGVhcHRcIixcImxlYXJudFwiLFwibGVmdFwiLFwibGVudFwiLFwibGFpblwiLFwibGlnaHRlZFwiLFwibWlzc3BlbHRcIixcIm1pc3Rha2VuXCIsXCJtb3duXCIsXCJvdmVyY29tZVwiLFwib3ZlcmRvbmVcIixcIm92ZXJ0YWtlblwiLFwib3ZlcnRocm93blwiLFwicGxlZFwiLFwicXVpdFwiLFwicmlkXCIsXCJyaXNlblwiLFwic2F3blwiLFwic291Z2h0XCIsXCJzZXRcIixcInNld25cIixcInNoYXZlblwiLFwic2hvcm5cIixcInNoZWRcIixcInNob25lXCIsXCJzaG9kXCIsXCJzaHJ1bmtcIixcInNhdFwiLFwic2xlcHRcIixcInNsdW5nXCIsXCJzbGl0XCIsXCJzbWl0dGVuXCIsXCJzb3duXCIsXCJzcGVkXCIsXCJzcGlsdFwiLFwic3BpdFwiLFwic3BydW5nXCIsXCJzdG9vZFwiLFwic3R1Y2tcIixcInN0dW5nXCIsXCJzdHVua1wiLFwic3RyaWRkZW5cIixcInN0cnVuZ1wiLFwic3RyaXZlblwiLFwic3dvcm5cIixcInN3b2xsZW5cIixcInN3dW1cIixcInRocml2ZWRcIixcInRocnVzdFwiLFwidHJvZGRlblwiLFwidXBoZWxkXCIsXCJ3b3ZlblwiLFwid2VkXCIsXCJ3ZXB0XCIsXCJ3b3VuZFwiLFwid2l0aGhlbGRcIixcIndpdGhzdG9vZFwiLFwid3J1bmdcIl0scmE9XCJyZXRleHQtcGFzc2l2ZVwiLHRhPW5ldyBTZXQoW1wiYW1cIixcImFyZVwiLFwid2VyZVwiLFwiYmVpbmdcIixcImlzXCIsXCJiZWVuXCIsXCJ3YXNcIixcImJlXCJdKTtmdW5jdGlvbiBvYShuPXt9KXtjb25zdCBlPW4uaWdub3JlfHxbXSxhPWUubGVuZ3RoPjA/aWEuZmlsdGVyKChuPT4hZS5pbmNsdWRlcyhuKSkpOmlhO3JldHVybihuLGUpPT57YWEobixhLCgobixhLGkscik9Pntjb25zdCB0PWZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1XbihcIldvcmROb2RlXCIpO2lmKCFufHwhbi50eXBlfHwhbi5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgbm9kZVwiKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoZTwwfHxlPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBudW1iZXIgYXMgaW5kZXhcIil9ZWxzZSBpZigoZT1uLmNoaWxkcmVuLmluZGV4T2YoZSkpPDApdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgY2hpbGQgbm9kZSBvciBpbmRleFwiKTtmb3IoZT5uLmNoaWxkcmVuLmxlbmd0aCYmKGU9bi5jaGlsZHJlbi5sZW5ndGgpO2UtLTspaWYoaShuLmNoaWxkcmVuW2VdLGUsbikpcmV0dXJuIG4uY2hpbGRyZW5bZV07cmV0dXJuIG51bGx9KGksYSk7dCYmdGEuaGFzKHFuKHQpLnRvTG93ZXJDYXNlKCkpJiZPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIkRvbuKAmXQgdXNlIHRoZSBwYXNzaXZlIHZvaWNlXCIse3N0YXJ0OnRlKG5bMF0pLGVuZDpvZShuW24ubGVuZ3RoLTFdKX0sW3JhLHIucmVwbGFjZSgvXFxzKy9nLFwiLVwiKS50b0xvd2VyQ2FzZSgpXS5qb2luKFwiOlwiKSkse2FjdHVhbDpxbihuKSxleHBlY3RlZDpbXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXBhc3NpdmUjcmVhZG1lXCJ9KX0pKX19Y29uc3QgTWE9e2FpbnQ6XCJhaW4ndFwiLGFyZW50OlwiYXJlbid0XCIsY291bGRudDpcImNvdWxkbid0XCIsZGlkbnQ6XCJkaWRuJ3RcIixkb2VzbnQ6XCJkb2Vzbid0XCIsZG9udDpcImRvbid0XCIsaGFkbnQ6XCJoYWRuJ3RcIixoYXNudDpcImhhc24ndFwiLGhhdmVudDpcImhhdmVuJ3RcIixoZWQ6XCJoZSdkXCIsaGVzOlwiaGUnc1wiLGhvd2Q6XCJob3cnZFwiLGhvd3M6XCJob3cnc1wiLGhvd2xsOlwiaG93J2xsXCIsSWQ6XCJJJ2RcIixJbTpcIkknbVwiLEl2ZTpcIkkndmVcIixpc250OlwiaXNuJ3RcIixtaWdodG50OlwibWlnaHRuJ3RcIixtdXN0dmU6XCJtdXN0J3ZlXCIsbXVzdG50OlwibXVzdG4ndFwiLG5lZWRudDpcIm5lZWRuJ3RcIixvY2xvY2s6XCJvJ2Nsb2NrXCIsc2hhbnQ6XCJzaGFuJ3RcIixzaGVzOlwic2hlJ3NcIixzaG91bGR2ZTpcInNob3VsZCd2ZVwiLHNob3VsZG50Olwic2hvdWxkbid0XCIsdGhhdGQ6XCJ0aGF0J2RcIix0aGF0czpcInRoYXQnc1wiLHRoZXJlZDpcInRoZXJlJ2RcIix0aGVyZXM6XCJ0aGVyZSdzXCIsdGhlcmVyZTpcInRoZXJlJ3JlXCIsdGhleWQ6XCJ0aGV5J2RcIix0aGV5bGw6XCJ0aGV5J2xsXCIsdGhleXJlOlwidGhleSdyZVwiLHRoZXl2ZTpcInRoZXkndmVcIix0aXM6XCIndGlzXCIsdHdhczpcIid0d2FzXCIsdHdlcmU6XCIndHdlcmVcIix3YXNudDpcIndhc24ndFwiLHdldmU6XCJ3ZSd2ZVwiLHdlcmVudDpcIndlcmVuJ3RcIix3aGF0bGw6XCJ3aGF0J2xsXCIsd2hhdHJlOlwid2hhdCdyZVwiLHdoYXRzOlwid2hhdCdzXCIsd2hhdHZlOlwid2hhdCd2ZVwiLHdoZW5zOlwid2hlbidzXCIsd2hlcmVzOlwid2hlcmUnc1wiLHdoZXJldmU6XCJ3aGVyZSd2ZVwiLHdob2Q6XCJ3aG8nZFwiLHdob2xsOlwid2hvJ2xsXCIsd2hvczpcIndobydzXCIsd2hvdmU6XCJ3aG8ndmVcIix3aHlzOlwid2h5J3NcIix3b3VsZHZlOlwid291bGQndmVcIix3b3VsZG50Olwid291bGRuJ3RcIix5YWxsOlwieSdhbGxcIix5b3VkOlwieW91J2RcIix5b3VsbDpcInlvdSdsbFwiLHlvdXJlOlwieW91J3JlXCIseW91dmU6XCJ5b3UndmVcIn0sc2E9XCJyZXRleHQtY29udHJhY3Rpb25zXCIsbGE9e30uaGFzT3duUHJvcGVydHksY2E9ZnVuY3Rpb24oKXtjb25zdCBuPXt9O2xldCBlO2ZvcihlIGluIE1hKWlmKGxhLmNhbGwoTWEsZSkpe2NvbnN0IGE9TWFbZV07bltlXT1hLGU9PT1lLnRvTG93ZXJDYXNlKCkmJihuW2UudG9VcHBlckNhc2UoKV09YS50b1VwcGVyQ2FzZSgpLG5bZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnNsaWNlKDEpXT1hLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Euc2xpY2UoMSkpfXJldHVybiBufSgpO2Z1bmN0aW9uIFNhKG49e30pe2NvbnN0IGU9bi5hbGxvd0xpdGVyYWxzLGE9bi5zdHJhaWdodDtyZXR1cm4obixpKT0+e19uKG4sXCJXb3JkTm9kZVwiLCgobixyLHQpPT57Y29uc3Qgbz10LE09cW4obikscz1NLnJlcGxhY2UoL1sn4oCZXS9nLFwiXCIpO2lmKGxhLmNhbGwoY2Escykpe2xldCB0PWNhW3NdO2lmKGF8fCh0PXQucmVwbGFjZSgvJy9nLFwi4oCZXCIpKSxNPT09dHx8byYmbnVsbCE9PXImJiFlJiZRZShvLHIpKXJldHVybjtPYmplY3QuYXNzaWduKGkubWVzc2FnZShzPT09TT9cIkV4cGVjdGVkIGFuIGFwb3N0cm9waGUgaW4gYFwiK00rXCJgLCBsaWtlIHRoaXM6IGBcIit0K1wiYFwiOlwiRXhwZWN0ZWQgdGhlIGFwb3N0cm9waGUgaW4gYFwiK00rXCJgIHRvIGJlIGxpa2UgdGhpczogYFwiK3QrXCJgXCIsbixbc2EsKHM9PT1NP1wibWlzc2luZy1cIjpcIlwiKSsoYT9cInN0cmFpZ2h0LWFwb3N0cm9waGVcIjpcInNtYXJ0LWFwb3N0cm9waGVcIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOk0sZXhwZWN0ZWQ6W3RdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtY29udHJhY3Rpb25zI3JlYWRtZVwifSl9fSkpfX1jb25zdCB1YT1mdW5jdGlvbihuLGUsYSl7Y29uc3QgaT1lfHwnXCInLHI9YXx8aSx0PVtdO2xldCBvPS0xO2lmKEFycmF5LmlzQXJyYXkobikpe2Zvcig7KytvPG4ubGVuZ3RoOyl0W29dPWkrbltvXStyO3JldHVybiB0fWlmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBpK24rcjt0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3NcIil9LGRhPXt9Lmhhc093blByb3BlcnR5LG1hPVduKFwiV29yZE5vZGVcIikscGE9V24oXCJXaGl0ZVNwYWNlTm9kZVwiKSxoYT1XbihcIlB1bmN0dWF0aW9uTm9kZVwiKSxnYT1mdW5jdGlvbihuLGUpe2NvbnN0IGE9XCJyZXRleHQtZXF1YWxpdHlcIixpPXtvcjpmdW5jdGlvbihuLGUsYSl7bGV0IGk9LTE7Zm9yKDsrK2k8bi5sZW5ndGg7KXtjb25zdCByPW5baV0sdD1yLnBhcmVudC5jaGlsZHJlbixvPW5baSsxXTtpZihvJiZvLnBhcmVudD09PXIucGFyZW50JiZvLnR5cGUhPT1yLnR5cGUpe2xldCBuPXIuZW5kO2Zvcig7KytuPG8uc3RhcnQ7KXtjb25zdCBlPXRbbl07aWYoIShwYShlKXx8bWEoZSkmJi8oYW5kfG9yKS8udGVzdChWZShlKSl8fGhhKGUpJiZcIi9cIj09PVZlKGUpKSlicmVha31pZihuPT09by5zdGFydCl7aSsrO2NvbnRpbnVlfX1zKGEscixlKX19LGJhc2ljOmZ1bmN0aW9uKG4sZSxhKXtsZXQgaT0tMTtmb3IoOysraTxuLmxlbmd0aDspcyhhLG5baV0sZSl9fSxyPXt9LHQ9W10sbz1bXSxNPVtdO3JldHVybiBmdW5jdGlvbigpe2xldCBlPS0xO2Zvcig7KytlPG4ubGVuZ3RoOyl7Y29uc3QgYT1uW2VdO2xldCBpO2ZvcihpIGluIHJbYS5pZF09YSxhLmluY29uc2lkZXJhdGUpZGEuY2FsbChhLmluY29uc2lkZXJhdGUsaSkmJihNLnB1c2goaSksdC5wdXNoKGEpLGEuYXBvc3Ryb3BoZSYmby5wdXNoKGkpKX19KCksKG49e30pPT57Y29uc3QgZT1uLmlnbm9yZXx8W10sYT1uLm5vQmluYXJ5O2xldCBzPS0xO2NvbnN0IGw9W10sYz1bXTtmb3IoOysrczxNLmxlbmd0aDspe2NvbnN0IG49TVtzXTtlLmluY2x1ZGVzKG4pfHwoby5pbmNsdWRlcyhuKT9sLnB1c2gobik6Yy5wdXNoKG4pKX1yZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBvPXt9O2xldCBzO2ZvcihzIGluIGFhKG4sYyxTKSxhYShuLGwsUywhMCksbylpZihkYS5jYWxsKG8scykpe2NvbnN0IG49cltzXTtpW1wib3JcIj09PW4udHlwZSYmYT9cImJhc2ljXCI6bi50eXBlXShvW3NdLG4sZSl9cmV0dXJuIFFuO2Z1bmN0aW9uIFMobixlLGEsaSl7Y29uc3Qgcj1NLmluZGV4T2YoaSkscz10W3JdLGw9cy5pZDtpIT09aS50b0xvd2VyQ2FzZSgpJiZxbihuKSE9PWl8fChsIGluIG98fChvW2xdPVtdKSxvW2xdLnB1c2goe3R5cGU6cy5pbmNvbnNpZGVyYXRlW2ldLHBhcmVudDphLG5vZGVzOm4sc3RhcnQ6ZSxlbmQ6ZStuLmxlbmd0aC0xfSkpfX0pKX19O2Z1bmN0aW9uIHMobixlLGkpe2NvbnN0IHI9cW4oZS5ub2Rlcyk7bGV0IHQ7aWYoaS5jb25zaWRlcmF0ZSYmKHQ9T2JqZWN0LmtleXMoaS5jb25zaWRlcmF0ZSksci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKT09PXIuY2hhckF0KDApKSl7bGV0IG49LTE7Zm9yKDsrK248dC5sZW5ndGg7KXRbbl09dFtuXS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSt0W25dLnNsaWNlKDEpfU9iamVjdC5hc3NpZ24obi5tZXNzYWdlKHVhKHIsXCJgXCIpK1wiIG1heSBiZSBpbnNlbnNpdGl2ZVwiKyhpLmNvbmRpdGlvbj9cIiwgXCIraS5jb25kaXRpb246XCJcIikrXCIsIFwiKyh0P1widXNlIFwiK3VhKHQsXCJgXCIpLmpvaW4oXCIsIFwiKStcIiBpbnN0ZWFkXCI6XCJ0cnkgbm90IHRvIHVzZSBpdFwiKSxlLm5vZGVzWzBdLFthLGkuaWRdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnIsZXhwZWN0ZWQ6dCxub3RlOmkubm90ZSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWVxdWFsaXR5I3JlYWRtZVwifSl9fShbe2lkOlwibGVhcm5pbmctZGlzYWJsZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggbGVhcm5pbmcgZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibGVhcm5pbmcgZGlzYWJsZWRcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC5cIn0se2lkOlwiaW52YWxpZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0dXJuZWQgb2ZmXCI6XCJhXCIsXCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkaXNhYmxlZDpcImFcIixpbnZhbGlkOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGRpc2FiaWxpdHksIGZpcnN0LlwifSx7aWQ6XCJiaXJ0aC1kZWZlY3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaXJ0aCBkZWZlY3RcIjpcImFcIn0sbm90ZTpcIkFzc3VtZXMvaW1wbGllcyB0aGF0IGEgcGVyc29uIHdpdGggYSBkaXNhYmlsaXR5IGlzIGRlZmljaWVudCBvciBpbmZlcmlvciB0byBvdGhlcnMuIFdoZW4gcG9zc2libGUsIHNwZWNpZnkgdGhlIGZ1bmN0aW9uYWwgYWJpbGl0eSBvciBpdHMgcmVzdHJpY3Rpb24uIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJzdWZmZXJzLWZyb20tZGlzYWJpbGl0aWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcyBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhIGRpc2FiaWxpdHlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzIHRoYXQgYSBwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHkgaGFzIGEgcmVkdWNlZCBxdWFsaXR5IG9mIGxpZmUuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJpbnRlbGxlY3R1YWxseS1kaXNhYmxlZC1wZW9wbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImludGVsbGVjdHVhbGx5IGRpc2FibGVkIHBlb3BsZVwiOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGRpc2FiaWxpdHksIGZpcnN0LiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaW50ZWxsZWN0dWFsbHktZGlzYWJsZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnRlbGxlY3R1YWxseSBkaXNhYmxlZFwiOlwiYVwiLFwiaGFzIGludGVsbGVjdHVhbCBpc3N1ZXNcIjpcImFcIixcInN1ZmZlcnMgZnJvbSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhbiBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBpbnRlbGxlY3R1YWwgZGlzYWJpbGl0eVwiOlwiYVwifSxub3RlOlwiQXNzdW1lcyB0aGF0IGEgcGVyc29uIHdpdGggYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHkgaGFzIGEgcmVkdWNlZCBxdWFsaXR5IG9mIGxpZmUuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJudXRzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntydWRlOlwiYVwiLG1hbGljaW91czpcImFcIixtZWFuOlwiYVwiLGRpc2d1c3Rpbmc6XCJhXCIsaW5jcmVkaWJsZTpcImFcIix2aWxlOlwiYVwiLFwicGVyc29uIHdpdGggc3ltcHRvbXMgb2YgbWVudGFsIGlsbG5lc3NcIjpcImFcIixcInBlcnNvbiB3aXRoIG1lbnRhbCBpbGxuZXNzXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBzeW1wdG9tcyBvZiBhIG1lbnRhbCBkaXNvcmRlclwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBtZW50YWwgZGlzb3JkZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmF0c2hpdDpcImFcIixwc3ljaG86XCJhXCIsY3Jhenk6XCJhXCIsZGVsaXJpb3VzOlwiYVwiLGluc2FuZTpcImFcIixpbnNhbml0eTpcImFcIixsb29ueTpcImFcIixsdW5hY3k6XCJhXCIsbHVuYXRpYzpcImFcIixcIm1lbnRhbGx5IGlsbFwiOlwiYVwiLHBzeWNob3BhdGhvbG9neTpcImFcIixcIm1lbnRhbCBkZWZlY3RpdmVcIjpcImFcIixtb3JvbjpcImFcIixtb3JvbmljOlwiYVwiLG51dHM6XCJhXCIsXCJtZW50YWwgY2FzZVwiOlwiYVwiLG1lbnRhbDpcImFcIn0sbm90ZTpcIkRlc2NyaWJlIHRoZSBiZWhhdmlvciBvciBpbGxuZXNzIHdpdGhvdXQgZGVyb2dhdG9yeSB3b3Jkcy4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImluc2FuZWx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbmNyZWRpYmx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNhbmVseTpcImFcIn0sbm90ZTpcIkRlc2NyaWJlIHRoZSBiZWhhdmlvciBvciBpbGxuZXNzIHdpdGhvdXQgZGVyb2dhdG9yeSB3b3Jkcy5cIn0se2lkOlwic2FuZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y29ycmVjdDpcImFcIixhZGVxdWF0ZTpcImFcIixzdWZmaWNpZW50OlwiYVwiLGNvbnNpc3RlbnQ6XCJhXCIsdmFsaWQ6XCJhXCIsY29oZXJlbnQ6XCJhXCIsc2Vuc2libGU6XCJhXCIscmVhc29uYWJsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FuZTpcImFcIn0sbm90ZTpcIldoZW4gZGVzY3JpYmluZyBhIG1hdGhlbWF0aWNhbCBvciBwcm9ncmFtbWF0aWMgdmFsdWUsIHVzaW5nIHRoZSB3b3JkIOKAnHNhbmXigJ0gbmVlZGxlc3NseSBpbnZva2VzIHRoZSB0b3BpYyBvZiBtZW50YWwgaGVhbHRoLiAgQ29uc2lkZXIgdXNpbmcgYSBkb21haW4tc3BlY2lmaWMgb3IgbmV1dHJhbCB0ZXJtIGluc3RlYWQuXCJ9LHtpZDpcInNhbml0eS1jaGVja1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2hlY2s6XCJhXCIsYXNzZXJ0aW9uOlwiYVwiLHZhbGlkYXRpb246XCJhXCIsXCJzbW9rZSB0ZXN0XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2FuaXR5IGNoZWNrXCI6XCJhXCJ9LG5vdGU6XCJXaGVuIGRlc2NyaWJpbmcgYSBtYXRoZW1hdGljYWwgb3IgcHJvZ3JhbW1hdGljIHZhbHVlLCB1c2luZyB0aGUgcGhyYXNlIOKAnHNhbml0eSBjaGVja+KAnSBuZWVkbGVzc2x5IGludm9rZXMgdGhlIHRvcGljIG9mIG1lbnRhbCBoZWFsdGguICBDb25zaWRlciB1c2luZyBzaW1wbHkg4oCcY2hlY2vigJ0sIG9yIGEgZG9tYWluLXNwZWNpZmljIG9yIG5ldXRyYWwgdGVybSwgaW5zdGVhZC5cIn0se2lkOlwiYmlwb2xhclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Zmx1Y3R1YXRpbmc6XCJhXCIsXCJwZXJzb24gd2l0aCBiaXBvbGFyIGRpc29yZGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpcG9sYXI6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic2NoaXpvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2NoaXpvcGhyZW5pYzpcImFcIixzY2hpem86XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwibWFuaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggc2NoaXpvcGhyZW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBzY2hpem9waHJlbmlhXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBzY2hpem9waHJlbmlhXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBzY2hpem9waHJlbmlhXCI6XCJhXCIsbWFuaWM6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzIGEgcGVyc29uIHdpdGggc2NoaXpvcGhyZW5pYSBleHBlcmllbmNlcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaGFuZGljYXBwZWQtcGFya2luZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhY2Nlc3NpYmxlIHBhcmtpbmdcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJoYW5kaWNhcHBlZCBwYXJraW5nXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImhhbmRpY2FwcGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgaGFuZGljYXBcIjpcImFcIixhY2Nlc3NpYmxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5kaWNhcHBlZDpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFtcHV0ZWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYW4gYW1wdXRhdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbXB1dGVlOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGNvbmRpdGlvbiwgZmlyc3QuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJnaW1wXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgbGltcFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjcmlwcGxlOlwiYVwiLGNyaXBwbGVkOlwiYVwiLGdpbXA6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgc3BlY2lmaWMgZGlzYWJpbGl0eS5cIn0se2lkOlwibW9uZ29sb2lkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIERvd24gU3luZHJvbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW9uZ29sb2lkOlwiYVwifX0se2lkOlwic3Ryb2tlLXZpY3RpbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJpbmRpdmlkdWFsIHdobyBoYXMgaGFkIGEgc3Ryb2tlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3Ryb2tlIHZpY3RpbVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBzdHJva2VcIjpcImFcIixcInZpY3RpbSBvZiBhIHN0cm9rZVwiOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHBlcnNvbiwgcmF0aGVyIHRoYW4gdGhlIGNvbmRpdGlvbiwgZmlyc3QuXCJ9LHtpZDpcIm11bHRpcGxlLXNjbGVyb3Npcy12aWN0aW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCIsXCJ2aWN0aW0gb2YgbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCIsXCJtdWx0aXBsZSBzY2xlcm9zaXMgdmljdGltXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBtdWx0aXBsZSBzY2xlcm9zaXNcIjpcImFcIn19LHtpZDpcInN1ZmZlcnMtZnJvbS1tZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIGhhcyBtdXNjdWxhciBkeXN0cm9waHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJzIGZyb20gbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBtdXNjdWxhciBkeXN0cm9waHlcIjpcImFcIixcInN1ZmZlcnMgZnJvbSBNRFwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggTURcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIGEgcGVyc29uJ3MgY29uZGl0aW9uIGFzIGEgc3RhdGUsIG5vdCBhcyBhbiBhZmZsaWN0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlKVwifSx7aWQ6XCJmYW1pbHktYnVyZGVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIndpdGggZmFtaWx5IHN1cHBvcnQgbmVlZHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYW1pbHkgYnVyZGVuXCI6XCJhXCJ9fSx7aWQ6XCJhc3lsdW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicHN5Y2hpYXRyaWMgaG9zcGl0YWxcIjpcImFcIixcIm1lbnRhbCBoZWFsdGggaG9zcGl0YWxcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXN5bHVtOlwiYVwifX0se2lkOlwiYmVkbGFtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjaGFvczpcImFcIixoZWN0aWM6XCJhXCIscGFuZGVtb25pdW06XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JlZGxhbTpcImFcIixtYWRob3VzZTpcImFcIixcImxvb255IGJpblwiOlwiYVwifX0se2lkOlwiZG93bnMtc3luZHJvbWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiRG93biBTeW5kcm9tZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRvd25zIHN5bmRyb21lXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbWVkaWEuc3BlY2lhbG9seW1waWNzLm9yZy9zb2kvZmlsZXMvcHJlc3Mta2l0LzIwMTRfRmFjdFNoZWV0X0ZpbmFsLnBkZlwifSx7aWQ6XCJyZXRhcmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbGx5OlwiYVwiLGR1bGxhcmQ6XCJhXCIsXCJwZXJzb24gd2l0aCBEb3duIFN5bmRyb21lXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBkZXZlbG9wbWVudGFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLGRlbGF5OlwiYVwiLFwiaG9sZCBiYWNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JldGFyZDpcImFcIixyZXRhcmRlZDpcImFcIixcInNob3J0IGJ1c1wiOlwiYVwifX0se2lkOlwicmV0YXJkc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2lsbGllczpcImFcIixkdWxsYXJkczpcImFcIixcInBlb3BsZSB3aXRoIGRldmVsb3BtZW50YWwgZGlzYWJpbGl0aWVzXCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBEb3du4oCZcyBTeW5kcm9tZVwiOlwiYVwiLGRlbGF5czpcImFcIixcImhvbGRzIGJhY2tcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmV0YXJkczpcImFcIn19LHtpZDpcInBzeWNob3RpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIHBzeWNob3RpYyBjb25kaXRpb25cIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3Npc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwc3ljaG90aWM6XCJhXCIsXCJzdWZmZXJzIGZyb20gcHN5Y2hvc2lzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBwc3ljaG9zaXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIHBzeWNob3Npc1wiOlwiYVwiLFwidmljdGltIG9mIHBzeWNob3Npc1wiOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi5cIn0se2lkOlwibGFtZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Ym9yaW5nOlwiYVwiLGR1bGw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbWU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImFpZHMtdmljdGltXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIEFJRFNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJpbmcgZnJvbSBhaWRzXCI6XCJhXCIsXCJzdWZmZXIgZnJvbSBhaWRzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gYWlkc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYWlkc1wiOlwiYVwiLFwidmljdGltIG9mIGFpZHNcIjpcImFcIixcImFpZHMgdmljdGltXCI6XCJhXCJ9fSx7aWQ6XCJ3aGVlbGNoYWlyLWJvdW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInVzZXMgYSB3aGVlbGNoYWlyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29uZmluZWQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJib3VuZCB0byBhIHdoZWVsY2hhaXJcIjpcImFcIixcInJlc3RyaWN0ZWQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJ3aGVlbGNoYWlyIGJvdW5kXCI6XCJhXCJ9fSx7aWQ6XCJzcGVjaWFsLW9seW1waWFuc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZXM6XCJhXCIsXCJTcGVjaWFsIE9seW1waWNzIGF0aGxldGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3BlY2lhbCBvbHltcGlhbnNcIjpcImFcIixcInNwZWNpYWwgb2x5bXBpYyBhdGhsZXRlc1wiOlwiYVwifSxub3RlOlwiV2hlbiBwb3NzaWJsZSwgdXNlIHRoZSBleGFjdCBkaXNjaXBsaW5lIG9mIHNwb3J0LiAoc291cmNlOiBodHRwczovL21lZGlhLnNwZWNpYWxvbHltcGljcy5vcmcvc29pL2ZpbGVzL3ByZXNzLWtpdC8yMDE0X0ZhY3RTaGVldF9GaW5hbC5wZGYpXCJ9LHtpZDpcImFibGVib2RpZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wibm9uLWRpc2FibGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FibGVib2RpZWQ6XCJhXCJ9LG5vdGU6XCJDYW4gaW1wbHkgdGhhdCBwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXMgbGFjayB0aGUgYWJpbGl0eSB0byB1c2UgdGhlaXIgYm9kaWVzIHdlbGwuIFNvbWV0aW1lcyBgdHlwaWNhbGAgY2FuIGJlIHVzZWQuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhZGRpY3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBkcnVnIGFkZGljdGlvblwiOlwiYVwiLFwicGVyc29uIHJlY292ZXJpbmcgZnJvbSBhIGRydWcgYWRkaWN0aW9uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FkZGljdDpcImFcIixqdW5raWU6XCJhXCJ9LG5vdGU6XCJBZGRpY3Rpb24gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFkZGljdHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggYSBkcnVnIGFkZGljdGlvblwiOlwiYVwiLFwicGVvcGxlIHJlY292ZXJpbmcgZnJvbSBhIGRydWcgYWRkaWN0aW9uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FkZGljdHM6XCJhXCIsanVua2llczpcImFcIn0sbm90ZTpcIkFkZGljdGlvbiBpcyBhIG5ldXJvYmlvbG9naWNhbCBkaXNlYXNlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiYWxjb2hvbGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNvbWVvbmUgd2l0aCBhbiBhbGNvaG9sIHByb2JsZW1cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWxjb2hvbGljOlwiYVwiLFwiYWxjb2hvbCBhYnVzZXJcIjpcImFcIn0sbm90ZTpcIkFsY29ob2xpc20gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImRlYWZtdXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkZWFmOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRlYWYgYW5kIGR1bWJcIjpcImFcIixkZWFmbXV0ZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic2VuaWxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGRlbWVudGlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RlbWVudGVkOlwiYVwiLHNlbmlsZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiZGVwcmVzc2VkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzYWQ6XCJhXCIsYmx1ZTpcImFcIixcImJ1bW1lZCBvdXRcIjpcImFcIixcInBlcnNvbiB3aXRoIHNlYXNvbmFsIGFmZmVjdGl2ZSBkaXNvcmRlclwiOlwiYVwiLFwicGVyc29uIHdpdGggcHN5Y2hvdGljIGRlcHJlc3Npb25cIjpcImFcIixcInBlcnNvbiB3aXRoIHBvc3RwYXJ0dW0gZGVwcmVzc2lvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkZXByZXNzZWQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImR3YXJmXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGR3YXJmaXNtXCI6XCJhXCIsXCJsaXR0bGUgcGVyc29uXCI6XCJhXCIsXCJsaXR0bGUgcGVvcGxlXCI6XCJhXCIsTFA6XCJhXCIsXCJwZXJzb24gb2Ygc2hvcnQgc3RhdHVyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInZlcnRpY2FsbHkgY2hhbGxlbmdlZFwiOlwiYVwiLG1pZGdldDpcImFcIixcInNtYWxsIHBlcnNvblwiOlwiYVwiLGR3YXJmOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLyxodHRwczovL3d3dy5scGFvbmxpbmUub3JnL2ZhcS0jTWlkZ2V0XCJ9LHtpZDpcImR5c2xleGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGR5c2xleGlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2R5c2xleGljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJlcGlsZXB0aWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggZXBpbGVwc3lcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXBpbGVwdGljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJoZWFyaW5nLWltcGFpcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcmQgb2YgaGVhcmluZ1wiOlwiYVwiLFwicGFydGlhbGx5IGRlYWZcIjpcImFcIixcInBhcnRpYWwgaGVhcmluZyBsb3NzXCI6XCJhXCIsZGVhZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJoZWFyaW5nIGltcGFpcmVkXCI6XCJhXCIsXCJoZWFyaW5nIGltcGFpcm1lbnRcIjpcImFcIn0sbm90ZTpcIldoZW4gcG9zc2libGUsIGFzayB0aGUgcGVyc29uIHdoYXQgdGhleSBwcmVmZXIuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJ2aWN0aW0tb2YtcG9saW9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BvbGlvOlwiYVwiLFwicGVyc29uIHdobyBoYWQgcG9saW9cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbmZhbnRpbGUgcGFyYWx5c2lzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gcG9saW9cIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIHBvbGlvXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhIHBvbGlvXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBwb2xpb1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggYSBwb2xpb1wiOlwiYVwiLFwidmljdGltIG9mIHBvbGlvXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInZpY3RpbS1vZi1hbi1pbmp1cnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VzdGFpbiBhbiBpbmp1cnlcIjpcImFcIixcInJlY2VpdmUgYW4gaW5qdXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVyIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBhbiBpbmp1cnlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGFuIGluanVyeVwiOlwiYVwiLFwidmljdGltIG9mIGFuIGluanVyeVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJ2aWN0aW0tb2YtaW5qdXJpZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VzdGFpbiBpbmp1cmllc1wiOlwiYVwiLFwicmVjZWl2ZSBpbmp1cmllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlciBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gaW5qdXJpZXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBpbmp1cmllc1wiOlwiYVwiLFwidmljdGltIG9mIGluanVyaWVzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInBhcmFwbGVnaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcGFyYXBsZWdpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwYXJhcGxlZ2ljOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJxdWFkcmlwbGVnaWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcXVhZHJpcGxlZ2lhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1YWRyaXBsZWdpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3BhelwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBjZXJlYnJhbCBwYWxzeVwiOlwiYVwiLHR3aXRjaDpcImFcIixmbGluY2g6XCJhXCIsaGVjdGljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGF6OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJzcGFzdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGNlcmVicmFsIHBhbHN5XCI6XCJhXCIsdHdpdGNoOlwiYVwiLGZsaW5jaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bhc3RpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3RhbW1lcmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c3R1dHRlcmluZzpcImFcIixcImRpc2ZsdWVuY3kgb2Ygc3BlZWNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0YW1tZXJpbmc6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInN0dXR0ZXJlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIHN0dXR0ZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0dXR0ZXJlcjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwidG91cmV0dGVzLXN5bmRyb21lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIlRvdXJldHRlIHN5bmRyb21lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widG91cmV0dGVzIHN5bmRyb21lXCI6XCJhXCIsXCJ0b3VyZXR0ZXMgZGlzb3JkZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicmVoYWItY2VudGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyZWF0bWVudCBjZW50ZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJyZWhhYiBjZW50ZXJcIjpcImFcIixcImRldG94IGNlbnRlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJyZWhhYlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJlYXRtZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZWhhYjpcImFcIixkZXRveDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic29jaW9wYXRoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgcGVyc29uYWxpdHkgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3BhdGhpYyBwZXJzb25hbGl0eVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzb2Npb3BhdGg6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic29jaW9wYXRoc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZW9wbGUgd2l0aCBwc3ljaG9wYXRoaWMgcGVyc29uYWxpdGllc1wiOlwiYVwiLFwicGVvcGxlIHdpdGggYSBwZXJzb25hbGl0eSBkaXNvcmRlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzb2Npb3BhdGhzOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImR1bWJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHNwZWVjaGxlc3M6XCJhXCIsc2lsZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntkdW1iOlwiYVwifSxub3RlOlwiRHVtYiBoZXJlIGlzIHVzZWQgaW4gMiBkaWZmZXJlbnQgY29udGV4dHMgLCB0aGUgaW5hYmlsaXR5IHRvIHRhbGsgb3IgYXMgYSBjdXJzZSB3b3JkLiAoc291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbClcIn0se2lkOlwid2Fja29cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHVuaW50ZWxsaWdlbnQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NpbXBsZXRvbjpcImFcIixzdHVwaWQ6XCJhXCIsd2Fja286XCJhXCIsd2hhY2tvOlwiYVwiLFwibG93IGlxXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHA6Ly93d3cubW1vbmplanIuY29tLzIwMTQvMDIvZGVjb25zdHJ1Y3Rpbmctc3R1cGlkLmh0bWxcIn0se2lkOlwicGFuaWMtYXR0YWNrXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZpdCBvZiB0ZXJyb3JcIjpcImFcIixzY2FyZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJwYW5pYyBhdHRhY2tcIjpcImFcIn19LHtpZDpcImJvbnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RoaW46XCJhXCIsc2xpbTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YW5vcmV4aWM6XCJhXCIsYm9ueTpcImFcIn19LHtpZDpcIm9jZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYW4gYW54aWV0eSBkaXNvcmRlclwiOlwiYVwiLG9ic2Vzc2l2ZTpcImFcIixwZWRhbnRpYzpcImFcIixuaWdnbHk6XCJhXCIscGlja3k6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25ldXJvdGljOlwiYVwiLG9jZDpcImFcIixcIm8uYy5kXCI6XCJhXCIsXCJvLmMuZC5cIjpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uIChzb3VyY2U6IGh0dHBzOi8vZW5nbGlzaC5zdGFja2V4Y2hhbmdlLmNvbS9xdWVzdGlvbnMvMjQ3NTUwLylcIn0se2lkOlwiaW5zb21uaWFcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Jlc3RsZXNzbmVzczpcImFcIixzbGVlcGxlc3NuZXNzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYTpcImFcIn19LHtpZDpcImluc29tbmlhY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2hvIGhhcyBpbnNvbW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYWM6XCJhXCJ9fSx7aWQ6XCJpbnNvbW5pYWNzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aG8gaGF2ZSBpbnNvbW5pYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpbnNvbW5pYWNzOlwiYVwifX0se2lkOlwiYmFycmVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntlbXB0eTpcImFcIixzdGVyaWxlOlwiYVwiLGluZmVydGlsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmFycmVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJkZWFmLXRvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjYXJlbGVzczpcImFcIixoZWFydGxlc3M6XCJhXCIsaW5kaWZmZXJlbnQ6XCJhXCIsaW5zZW5zaXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmxpbmQgdG9cIjpcImFcIixcImJsaW5kIGV5ZSB0b1wiOlwiYVwiLFwiYmxpbmRlZCBieVwiOlwiYVwiLFwiZGVhZiB0b1wiOlwiYVwiLFwiZGVhZiBlYXIgdG9cIjpcImFcIixcImRlYWZlbmVkIGJ5XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImNyZXRpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y3JlZXA6XCJhXCIsZm9vbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y3JldGluOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJkYWZ0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthYnN1cmQ6XCJhXCIsZm9vbGlzaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFmdDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiaWRpb3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zvb2xpc2g6XCJhXCIsbHVkaWNyb3VzOlwiYVwiLHNpbGx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZWVibGVtaW5kZWQ6XCJhXCIsXCJmZWVibGUgbWluZGVkXCI6XCJhXCIsaWRpb3Q6XCJhXCIsaW1iZWNpbGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImhhcmVsaXBwZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBjbGVmdC1saXAgYW5kIHBhbGF0ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYXJlbGlwcGVkOlwiYVwiLGNsZWZ0bGlwcGVkOlwiYVwifSxub3RlOlwiU29tZXRpbWVzIGl0J3MgY2xlZnQgbGlwIG9yIHBhbGF0ZSwgbm90IGJvdGguIFNwZWNpZnkgd2hlbiBwb3NzaWJsZS4gKHNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWwpXCJ9LHtpZDpcImhhcmVsaXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY2xlZnQtbGlwIGFuZCBwYWxhdGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFyZWxpcDpcImFcIixcImhhcmUgbGlwXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcIm1hbmlhY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsZW50aHVzaWFzdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFuaWFjOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJidWNrdGVldGhcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggcHJvbWluZW50IHRlZXRoXCI6XCJhXCIsXCJwcm9taW5lbnQgdGVldGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVja3Rvb3RoZWQ6XCJhXCIsYnVja3RlZXRoOlwiYVwifX0se2lkOlwic3BlY2lhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaGFsbGVuZ2VkOlwiYVwiLGRpZmZhYmlsaXR5OlwiYVwiLFwiZGlmZmVyZW50bHkgYWJsZWRcIjpcImFcIixoYW5kaWNhcGFibGU6XCJhXCIsc3BlY2lhbDpcImFcIixcInNwZWNpYWwgbmVlZHNcIjpcImFcIixcInNwZWNpYWxseSBhYmxlZFwiOlwiYVwifSxub3RlOlwiRXVwaGVtaXNtcyBmb3IgZGlzYWJpbGl0aWVzIGNhbiBiZSBpbmZhbnRpbGl6aW5nLiAoc291cmNlOiBodHRwOi8vY2RybnlzLm9yZy9ibG9nL2Rpc2FiaWxpdHktZGlhbG9ndWUvdGhlLWRpc2FiaWxpdHktZGlhbG9ndWUtNC1kaXNhYmlsaXR5LWV1cGhlbWlzbXMtdGhhdC1uZWVkLXRvLWJpdGUtdGhlLWR1c3QvLGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sKVwifSx7aWQ6XCJsaWJ0YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXNhZ3JlZWFibGU6XCJhXCIsdW5lZHVjYXRlZDpcImFcIixpZ25vcmFudDpcImFcIixuYWl2ZTpcImFcIixpbmNvbnNpZGVyYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmdWNrdGFyZDpcImFcIixsaWJ0YXJkOlwiYVwiLGNvbnRhcmQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImFkZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzb3JnYW5pemVkOlwiYVwiLGRpc3RyYWN0ZWQ6XCJhXCIsZW5lcmdldGljOlwiYVwiLGh5cGVyYWN0aXZlOlwiYVwiLGltcGV0dW91czpcImFcIixpbXB1bHNpdmU6XCJhXCIsaW5hdHRlbnRpdmU6XCJhXCIscmVzdGxlc3M6XCJhXCIsdW5mb2N1c2VkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntBREQ6XCJhXCIsYWRoZDpcImFcIixcImEuZC5kLlwiOlwiYVwiLFwiYS5kLmguZC5cIjpcImFcIn19LHtpZDpcImR1bW15XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRlc3QgZG91YmxlXCI6XCJhXCIscGxhY2Vob2xkZXI6XCJhXCIsZmFrZTpcImFcIixzdHViOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkdW1teXZhcmlhYmxlOlwiYVwiLGR1bW15dmFsdWU6XCJhXCIsZHVtbXlvYmplY3Q6XCJhXCIsZHVtbXk6XCJhXCJ9LG5vdGU6XCJEdW1teSBjYW4gcmVmZXIgdG8gdGhlIGluYWJpbGl0eSB0byB0YWxrIG9yIGJlIHVzZWQgYXMgYSBkZXJvZ2F0b3J5IHdvcmQgbWVhbmluZyBzdHVwaWQuIEluIGNvbXB1dGVyIHByb2dyYW1taW5nIGl0IGlzIHVzZWQgd2hlcmUgYSB2YWx1ZSBvciBiZWhhdmlvciBpcyB1bmltcG9ydGFudC4gVGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIHVzZSBjYXNlcyBhbHNvLlwifSx7aWQ6XCJiaW5nZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZW50aHVzaWFzdGljOlwiYVwiLHNwcmVlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaW5nZTpcImFcIn0sbm90ZTpcIkJpbmdlIG1pZ2h0IGJlIGluc2Vuc2l0aXZlIHRvd2FyZHMgZm9sa3Mgd2l0aCBlYXRpbmcgb3IgZHJpbmtpbmcgZGlzb3JkZXJzIChzb3VyY2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtZXF1YWxpdHkvaXNzdWVzLzExMClcIn0se2lkOlwib2J2aW91c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntvYnZpb3VzOlwiYVwiLG9idmlvdXNseTpcImFcIn0sbm90ZTpcIk5vdCBldmVyeXRoaW5nIGlzIGFzIG9idmlvdXMgYXMgeW91IG1pZ2h0IHRoaW5rLiBBbmQgaWYgaXQgaXNu4oCZdCBvYnZpb3VzIHRvIHRoZSByZWFkZXIsIGl0IGNhbiBodXJ0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJqdXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2p1c3Q6XCJhXCJ9LG5vdGU6XCJOb3QgZXZlcnl0aGluZyBpcyBhcyBlYXN5IGFzIHlvdSBtaWdodCB0aGluay4gQW5kIGlmIGl0IGlzbuKAmXQgZWFzeSBmb3IgdGhlIHJlYWRlciwgaXQgY2FuIGh1cnQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImJhc2ljYWxseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntiYXNpY2FsbHk6XCJhXCJ9LG5vdGU6XCJJdOKAmXMgcHJvYmFibHkgbm90IHRoYXQgYmFzaWMuIElmIHlvdeKAmXJlIGdvaW5nIHRvIGV4cGxhaW4gYSBjb25mdXNpbmcgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBhIGNsZWFyZXIgbmV4dCBzZW50ZW5jZSwgd2h5IG5vdCBkcm9wIHRoZSBmb3JtZXIgYW5kIG9ubHkgdXNlIHRoZSBsYXR0ZXI/IChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcInNpbXBsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntzaW1wbGU6XCJhXCIsc2ltcGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IHNpbXBsZS4gRXZlbiBpZiBpdCBpcywgeW91IHByb2JhYmx5IGRvbuKAmXQgbmVlZCB0byBzcGVjaWZpY2FsbHkgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJlYXN5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2Vhc3k6XCJhXCIsZWFzaWx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IGVhc3kuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwib2YtY291cnNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wib2YgY291cnNlXCI6XCJhXCJ9LG5vdGU6XCJJZiBpdOKAmXMgc2VsZi1ldmlkZW50IHRoZW4gbWF5YmUgeW91IGRvbuKAmXQgbmVlZCB0byBkZXNjcmliZSBpdC4gSWYgaXQgaXNu4oCZdCwgZG9u4oCZdCBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImNsZWFybHlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7Y2xlYXJseTpcImFcIn0sbm90ZTpcIklmIGl04oCZcyBzZWxmLWV2aWRlbnQgdGhlbiBtYXliZSB5b3UgZG9u4oCZdCBuZWVkIHRvIGRlc2NyaWJlIGl0LiBJZiBpdCBpc27igJl0LCBkb27igJl0IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwiZXZlcnlvbmUta25vd3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7XCJldmVyeW9uZSBrbm93c1wiOlwiYVwifSxub3RlOlwiSWYgaXTigJlzIHNlbGYtZXZpZGVudCB0aGVuIG1heWJlIHlvdSBkb27igJl0IG5lZWQgdG8gZGVzY3JpYmUgaXQuIElmIGl0IGlzbuKAmXQsIGRvbuKAmXQgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJzdHJhaWdodGZvcndhcmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7XCJzdHJhaWdodCBmb3J3YXJkXCI6XCJhXCIsc3RyYWlnaHRmb3J3YXJkOlwiYVwiLFwic3RyYWlnaHQgZm9yd2FyZGx5XCI6XCJhXCIsc3RyYWlnaHRmb3J3YXJkbHk6XCJhXCJ9LG5vdGU6XCJJdOKAmXMgcHJvYmFibHkgbm90IHRoYXQgc3RyYWlnaHQgZm9yd2FyZC4gRXZlbiBpZiBpdCBpcywgeW91IHByb2JhYmx5IGRvbuKAmXQgbmVlZCB0byBzcGVjaWZpY2FsbHkgc2F5IGl0LlwifSx7aWQ6XCJoZXItaGltXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RoZWlyOlwiYVwiLHRoZWlyczpcImFcIix0aGVtOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXI6XCJmZW1hbGVcIixoZXJzOlwiZmVtYWxlXCIsaGltOlwibWFsZVwiLGhpczpcIm1hbGVcIn0sY29uZGl0aW9uOlwid2hlbiByZWZlcnJpbmcgdG8gYSBwZXJzb25cIn0se2lkOlwiaGUtc2hlXCIsdHlwZTpcIm9yXCIsYXBvc3Ryb3BoZTohMCxjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGhleTpcImFcIixpdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hlOlwiZmVtYWxlXCIsaGU6XCJtYWxlXCIsXCJzaGUnZFwiOlwiZmVtYWxlXCIsXCJoZSdkXCI6XCJtYWxlXCIsXCJzaGUnbGxcIjpcImZlbWFsZVwiLFwiaGUnbGxcIjpcIm1hbGVcIixcInNoZSdzXCI6XCJmZW1hbGVcIixcImhlJ3NcIjpcIm1hbGVcIn19LHtpZDpcImhlcnNlbGYtaGltc2VsZlwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0aGVtc2VsdmVzOlwiYVwiLHRoZWlyc2VsZjpcImFcIixzZWxmOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXJzZWxmOlwiZmVtYWxlXCIsaGltc2VsZjpcIm1hbGVcIn19LHtpZDpcImJveS1naXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2tpZDpcImFcIixjaGlsZDpcImFcIix5b3V0aDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybDpcImZlbWFsZVwiLGJveTpcIm1hbGVcIn0sY29uZGl0aW9uOlwid2hlbiByZWZlcnJpbmcgdG8gYSBwZXJzb25cIn0se2lkOlwiZ2Fscy1tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVvcGxlOlwiYVwiLHBlcnNvbnM6XCJhXCIsZm9sa3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWVuOlwiZmVtYWxlXCIsZ2lybHM6XCJmZW1hbGVcIixnYWxzOlwiZmVtYWxlXCIsbGFkaWVzOlwiZmVtYWxlXCIsbWFuOlwibWFsZVwiLGJveXM6XCJtYWxlXCIsbWVuOlwibWFsZVwiLGd1eXM6XCJtYWxlXCIsZHVkZXM6XCJtYWxlXCIsZ2VudHM6XCJtYWxlXCIsZ2VudGxlbWVuOlwibWFsZVwifX0se2lkOlwiZ2FsLWd1eVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwZXJzb246XCJhXCIsZnJpZW5kOlwiYVwiLHBhbDpcImFcIixmb2xrOlwiYVwiLGluZGl2aWR1YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWFuOlwiZmVtYWxlXCIsZ2FsOlwiZmVtYWxlXCIsbGFkeTpcImZlbWFsZVwiLGJhYmU6XCJmZW1hbGVcIixiaW1ibzpcImZlbWFsZVwiLGNoaWNrOlwiZmVtYWxlXCIsZ3V5OlwibWFsZVwiLGxhZDpcIm1hbGVcIixmZWxsb3c6XCJtYWxlXCIsZHVkZTpcIm1hbGVcIixicm86XCJtYWxlXCIsZ2VudGxlbWFuOlwibWFsZVwifX0se2lkOlwiZmF0aGVybGFuZC1tb3RoZXJsYW5kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibmF0aXZlIGxhbmRcIjpcImFcIixob21lbGFuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW90aGVybGFuZDpcImZlbWFsZVwiLGZhdGhlcmxhbmQ6XCJtYWxlXCJ9fSx7aWQ6XCJmYXRoZXItdG9uZ3VlLW1vdGhlci10b25ndWVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJuYXRpdmUgdG9uZ3VlXCI6XCJhXCIsXCJuYXRpdmUgbGFuZ3VhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtb3RoZXIgdG9uZ3VlXCI6XCJmZW1hbGVcIixcImZhdGhlciB0b25ndWVcIjpcIm1hbGVcIn19LHtpZDpcImZyZXNobWVuLWZyZXNod29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdC15ZWFyIHN0dWRlbnRzXCI6XCJhXCIsZnJlc2hlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZXNod29tZW46XCJmZW1hbGVcIixmcmVzaG1lbjpcIm1hbGVcIn19LHtpZDpcImdhcmJhZ2VtYW4tZ2FyYmFnZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZ2FyYmFnZSBjb2xsZWN0b3JcIjpcImFcIixcIndhc3RlIGNvbGxlY3RvclwiOlwiYVwiLFwidHJhc2ggY29sbGVjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dhcmJhZ2V3b21hbjpcImZlbWFsZVwiLGdhcmJhZ2VtYW46XCJtYWxlXCJ9fSx7aWQ6XCJnYXJiYWdlbWVuLWdhcmJhZ2V3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImdhcmJhZ2UgY29sbGVjdG9yc1wiOlwiYVwiLFwid2FzdGUgY29sbGVjdG9yc1wiOlwiYVwiLFwidHJhc2ggY29sbGVjdG9yc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnYXJiYWdld29tZW46XCJmZW1hbGVcIixnYXJiYWdlbWVuOlwibWFsZVwifX0se2lkOlwiY2hhaXJtYW4tY2hhaXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGFpcjpcImFcIixoZWFkOlwiYVwiLGNoYWlycGVyc29uOlwiYVwiLGNvb3JkaW5hdG9yOlwiYVwiLFwiY29tbWl0dGVlIGhlYWRcIjpcImFcIixtb2RlcmF0b3I6XCJhXCIsXCJwcmVzaWRpbmcgb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaGFpcndvbWFuOlwiZmVtYWxlXCIsY2hhaXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb21taXR0ZWUtbWFuLWNvbW1pdHRlZS13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvbW1pdHRlZSBtZW1iZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXR0ZWUgd29tYW5cIjpcImZlbWFsZVwiLFwiY29tbWl0dGVlIG1hblwiOlwibWFsZVwifX0se2lkOlwiY293Ym95LWNvd2dpcmxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y293aGFuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y293Z2lybDpcImZlbWFsZVwiLGNvd2JveTpcIm1hbGVcIn19LHtpZDpcImNvd2JveXMtY293Z2lybHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y293aGFuZHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Nvd2dpcmxzOlwiZmVtYWxlXCIsY293Ym95czpcIm1hbGVcIn19LHtpZDpcImNhdHRsZW1hbi1jYXR0bGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSByYW5jaGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdHRsZXdvbWFuOlwiZmVtYWxlXCIsY2F0dGxlbWFuOlwibWFsZVwifX0se2lkOlwiY2F0dGxlbWVuLWNhdHRsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY2F0dGxlIHJhbmNoZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdHRsZXdvbWVuOlwiZmVtYWxlXCIsY2F0dGxlbWVuOlwibWFsZVwifX0se2lkOlwiY2hhaXJtZW4tY2hhaXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGFpcnM6XCJhXCIsY2hhaXJwZXJzb25zOlwiYVwiLGNvb3JkaW5hdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhaXJ3b21lbjpcImZlbWFsZVwiLGNoYWlybWVuOlwibWFsZVwifX0se2lkOlwicG9zdG1hbi1wb3N0d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJtYWlsIGNhcnJpZXJcIjpcImFcIixcImxldHRlciBjYXJyaWVyXCI6XCJhXCIsXCJwb3N0YWwgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Bvc3R3b21hbjpcImZlbWFsZVwiLG1haWx3b21hbjpcImZlbWFsZVwiLHBvc3RtYW46XCJtYWxlXCIsbWFpbG1hbjpcIm1hbGVcIn19LHtpZDpcInBvc3RtZW4tcG9zdHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWFpbCBjYXJyaWVyc1wiOlwiYVwiLFwibGV0dGVyIGNhcnJpZXJzXCI6XCJhXCIsXCJwb3N0YWwgd29ya2Vyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb3N0d29tZW46XCJmZW1hbGVcIixtYWlsd29tZW46XCJmZW1hbGVcIixwb3N0bWVuOlwibWFsZVwiLG1haWxtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjaGljay1jb3AtcG9saWNlbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljZXI6XCJhXCIsXCJwb2xpY2Ugb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb2xpY2V3b21hbjpcImZlbWFsZVwiLHBvbGljZW1hbjpcIm1hbGVcIixcImNoaWNrIGNvcFwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJwb2xpY2VtZW4tcG9saWNld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7b2ZmaWNlcnM6XCJhXCIsXCJwb2xpY2Ugb2ZmaWNlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9saWNld29tZW46XCJmZW1hbGVcIixwb2xpY2VtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGV3YXJkLXN0ZXdhcmRlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmbGlnaHQgYXR0ZW5kYW50XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXdhcmRlc3M6XCJmZW1hbGVcIixzdGV3YXJkOlwibWFsZVwifX0se2lkOlwic3Rld2FyZGVzc2VzLXN0ZXdhcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmxpZ2h0IGF0dGVuZGFudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Rld2FyZGVzc2VzOlwiZmVtYWxlXCIsc3Rld2FyZHM6XCJtYWxlXCJ9fSx7aWQ6XCJjb25ncmVzc21hbi1jb25ncmVzc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWVtYmVyIG9mIGNvbmdyZXNzXCI6XCJhXCIsXCJjb25ncmVzcyBwZXJzb25cIjpcImFcIixsZWdpc2xhdG9yOlwiYVwiLHJlcHJlc2VudGF0aXZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb25ncmVzc3dvbWFuOlwiZmVtYWxlXCIsY29uZ3Jlc3NtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb25ncmVzc21lbi1jb25ncmVzc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWVtYmVycyBvZiBjb25ncmVzc1wiOlwiYVwiLFwiY29uZ3Jlc3MgcGVyc29uc1wiOlwiYVwiLGxlZ2lzbGF0b3JzOlwiYVwiLHJlcHJlc2VudGF0aXZlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y29uZ3Jlc3N3b21lbjpcImZlbWFsZVwiLGNvbmdyZXNzbWVuOlwibWFsZVwifX0se2lkOlwiZmlyZW1hbi1maXJld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJlIGZpZ2h0ZXJcIjpcImFcIixcImZpcmUgb2ZmaWNlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmaXJld29tYW46XCJmZW1hbGVcIixmaXJlbWFuOlwibWFsZVwifX0se2lkOlwiZmlyZW1lbi1maXJld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJlIGZpZ2h0ZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZpcmV3b21lbjpcImZlbWFsZVwiLGZpcmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJmaXNoZXJtYW4tZmlzaGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmlzaGVyOlwiYVwiLFwiY3JldyBtZW1iZXJcIjpcImFcIixmaXNoZXJmb2xrOlwiYVwiLGFuZ2xlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlzaGVyd29tYW46XCJmZW1hbGVcIixmaXNoZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJmaXNoZXJtZW4tZmlzaGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmlzaGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlzaGVyd29tZW46XCJmZW1hbGVcIixmaXNoZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJicm90aGVyaG9vZC1zaXN0ZXJob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2tpbnNoaXA6XCJhXCIsY29tbXVuaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaXN0ZXJob29kOlwiZmVtYWxlXCIsYnJvdGhlcmhvb2Q6XCJtYWxlXCJ9fSx7aWQ6XCJjb21tb24tZ2lybC1jb21tb24tbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY29tbW9uIHBlcnNvblwiOlwiYVwiLFwiYXZlcmFnZSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21tb24gZ2lybFwiOlwiZmVtYWxlXCIsXCJjb21tb24gbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzYWxhcnltYW4tc2FsYXJ5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJidXNpbmVzcyBleGVjdXRpdmVcIjpcImFcIixlbnRyZXByZW5ldXI6XCJhXCIsXCJidXNpbmVzcyBwZXJzb25cIjpcImFcIixwcm9mZXNzaW9uYWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2J1c2luZXNzd29tYW46XCJmZW1hbGVcIixzYWxhcnl3b21hbjpcImZlbWFsZVwiLGJ1c2luZXNzbWFuOlwibWFsZVwiLHNhbGFyeW1hbjpcIm1hbGVcIn19LHtpZDpcInNhbGFyeW1lbi1zYWxhcnl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImJ1c2luZXNzIGV4ZWN1dGl2ZXNcIjpcImFcIixlbnRyZXByZW5ldXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntidXNpbmVzc3dvbWVuOlwiZmVtYWxlXCIsc2FsYXJ5d29tZW46XCJmZW1hbGVcIixcImNhcmVlciBnaXJsXCI6XCJmZW1hbGVcIixcImNhcmVlciB3b21hblwiOlwiZmVtYWxlXCIsYnVzaW5lc3NtZW46XCJtYWxlXCIsc2FsYXJ5bWVuOlwibWFsZVwifX0se2lkOlwiamFuaXRvci1qYW5pdHJlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlYW5lcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjbGVhbmluZyBsYWR5XCI6XCJmZW1hbGVcIixcImNsZWFuaW5nIGdpcmxcIjpcImZlbWFsZVwiLFwiY2xlYW5pbmcgd29tYW5cIjpcImZlbWFsZVwiLGphbml0cmVzczpcImZlbWFsZVwiLFwiY2xlYW5pbmcgbWFuXCI6XCJtYWxlXCIsXCJjbGVhbmluZyBib3lcIjpcIm1hbGVcIixqYW5pdG9yOlwibWFsZVwifX0se2lkOlwiamFuaXRvcnMtamFuaXRyZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlYW5lcnM6XCJhXCIsaG91c2VrZWVwaW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNsZWFuaW5nIGxhZGllc1wiOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBnaXJsc1wiOlwiZmVtYWxlXCIsamFuaXRyZXNzZXM6XCJmZW1hbGVcIixcImNsZWFuaW5nIG1lblwiOlwibWFsZVwiLGphbml0b3JzOlwibWFsZVwifX0se2lkOlwiZGVsaXZlcnktYm95LWRlbGl2ZXJ5LWdpcmxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y291cmllcjpcImFcIixtZXNzZW5nZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZGVsaXZlcnkgZ2lybFwiOlwiZmVtYWxlXCIsXCJkZWxpdmVyeSBib3lcIjpcIm1hbGVcIn19LHtpZDpcImZvcmVtYW4tZm9yZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3N1cGVydmlzb3I6XCJhXCIsXCJzaGlmdCBib3NzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmV3b21hbjpcImZlbWFsZVwiLGZvcmVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJmcm9udG1hbiwtZnJvbnQtbWFuLWZyb250d29tYW4sLWZyb250LXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2xlYWQ6XCJhXCIsZnJvbnQ6XCJhXCIsZmlndXJlaGVhZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmcm9udHdvbWFuLCBmcm9udCB3b21hblwiOlwiZmVtYWxlXCIsXCJmcm9udG1hbiwgZnJvbnQgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcm9udC1tZW4sLWZyb250bWVuLWZyb250LXdvbWVuLC1mcm9udHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZpZ3VyZWhlYWRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZyb250IHdvbWVuLCBmcm9udHdvbWVuXCI6XCJmZW1hbGVcIixcImZyb250IG1lbiwgZnJvbnRtZW5cIjpcIm1hbGVcIn19LHtpZDpcImZvcmVtZW4tZm9yZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3N1cGVydmlzb3JzOlwiYVwiLFwic2hpZnQgYm9zc2VzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmV3b21lbjpcImZlbWFsZVwiLGZvcmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJpbnN1cmFuY2UtbWFuLWluc3VyYW5jZS13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImluc3VyYW5jZSBhZ2VudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluc3VyYW5jZSB3b21hblwiOlwiZmVtYWxlXCIsXCJpbnN1cmFuY2UgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJpbnN1cmFuY2UtbWVuLWluc3VyYW5jZS13b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImluc3VyYW5jZSBhZ2VudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2Ugd29tZW5cIjpcImZlbWFsZVwiLFwiaW5zdXJhbmNlIG1lblwiOlwibWFsZVwifX0se2lkOlwibGFuZGxhZHktbGFuZGxvcmRcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvcHJpZXRvcjpcImFcIixcImJ1aWxkaW5nIG1hbmFnZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFuZGxhZHk6XCJmZW1hbGVcIixsYW5kbG9yZDpcIm1hbGVcIn19LHtpZDpcImxhbmRsYWRpZXMtbGFuZGxvcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb3ByaWV0b3JzOlwiYVwiLFwiYnVpbGRpbmcgbWFuYWdlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFuZGxhZGllczpcImZlbWFsZVwiLGxhbmRsb3JkczpcIm1hbGVcIn19LHtpZDpcImFsdW1uYS1hbHVtbnVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYWR1YXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbHVtbmE6XCJmZW1hbGVcIixhbHVtbnVzOlwibWFsZVwifX0se2lkOlwiYWx1bW5hZS1hbHVtbmlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhZHVhdGVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbHVtbmFlOlwiZmVtYWxlXCIsYWx1bW5pOlwibWFsZVwifX0se2lkOlwibmV3c21hbi1uZXdzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YW5jaG9yOlwiYVwiLGpvdXJuYWxpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25ld3N3b21hbjpcImZlbWFsZVwiLG5ld3NwYXBlcndvbWFuOlwiZmVtYWxlXCIsYW5jaG9yd29tYW46XCJmZW1hbGVcIixuZXdzbWFuOlwibWFsZVwiLG5ld3NwYXBlcm1hbjpcIm1hbGVcIixhbmNob3JtYW46XCJtYWxlXCJ9fSx7aWQ6XCJuZXdzbWVuLW5ld3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNob3JzOlwiYVwiLGpvdXJuYWxpc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXdzd29tZW46XCJmZW1hbGVcIixuZXdzcGFwZXJ3b21lbjpcImZlbWFsZVwiLGFuY2hvcndvbWVuOlwiZmVtYWxlXCIsbmV3c21lbjpcIm1hbGVcIixuZXdzcGFwZXJtZW46XCJtYWxlXCIsYW5jaG9ybWVuOlwibWFsZVwifX0se2lkOlwicmVwYWlybWFuLXJlcGFpcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3JlcGFpcmVyOlwiYVwiLHRlY2huaWNpYW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JlcGFpcndvbWFuOlwiZmVtYWxlXCIscmVwYWlybWFuOlwibWFsZVwifX0se2lkOlwicmVwYWlybWVuLXJlcGFpcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RlY2huaWNpYW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXBhaXJ3b21lbjpcImZlbWFsZVwiLHJlcGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcInNhbGVzbGFkeS1zYWxlc21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzYWxlc3BlcnNvbjpcImFcIixcInNhbGVzIGNsZXJrXCI6XCJhXCIsXCJzYWxlcyByZXBcIjpcImFcIixcInNhbGVzIGFnZW50XCI6XCJhXCIsXCJzYWxlcyBhdHRlbmRhbnRcIjpcImFcIixzZWxsZXI6XCJhXCIsXCJzaG9wIGFzc2lzdGFudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYWxlc3dvbWFuOlwiZmVtYWxlXCIsXCJzYWxlcyB3b21hblwiOlwiZmVtYWxlXCIsc2FsZXNsYWR5OlwiZmVtYWxlXCIsc2FsZXNtYW46XCJtYWxlXCIsXCJzYWxlcyBtYW5cIjpcIm1hbGVcIn19LHtpZDpcInNhbGVzbWVuLXNhbGVzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzYWxlcyBjbGVya3NcIjpcImFcIixcInNhbGVzIHJlcHNcIjpcImFcIixcInNhbGVzIGFnZW50c1wiOlwiYVwiLHNlbGxlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbGVzd29tZW46XCJmZW1hbGVcIixcInNhbGVzIHdvbWVuXCI6XCJmZW1hbGVcIixzYWxlc2xhZGllczpcImZlbWFsZVwiLHNhbGVzbWVuOlwibWFsZVwiLFwic2FsZXMgbWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzZXJ2aWNlbWFuLXNlcnZpY2V3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzb2xkaWVyOlwiYVwiLFwic2VydmljZSByZXByZXNlbnRhdGl2ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXJ2aWNld29tYW46XCJmZW1hbGVcIixzZXJ2aWNlbWFuOlwibWFsZVwifX0se2lkOlwic2VydmljZW1lbi1zZXJ2aWNld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c29sZGllcnM6XCJhXCIsXCJzZXJ2aWNlIHJlcHJlc2VudGF0aXZlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXJ2aWNld29tZW46XCJmZW1hbGVcIixzZXJ2aWNlbWVuOlwibWFsZVwifX0se2lkOlwid2FpdGVyLXdhaXRyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NlcnZlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2FpdHJlc3M6XCJmZW1hbGVcIix3YWl0ZXI6XCJtYWxlXCJ9fSx7aWQ6XCJ3YWl0ZXJzLXdhaXRyZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2VydmVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2FpdHJlc3NlczpcImZlbWFsZVwiLHdhaXRlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJ3b3JrbWFuLXdvcmt3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3b3JrZXI6XCJhXCIsXCJ3YWdlIGVhcm5lclwiOlwiYVwiLHRheHBheWVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b3Jrd29tYW46XCJmZW1hbGVcIixcIndvcmtpbmcgd29tYW5cIjpcImZlbWFsZVwiLHdvcmttYW46XCJtYWxlXCIsXCJ3b3JraW5nIG1hblwiOlwibWFsZVwifX0se2lkOlwid29ya21lbi13b3Jrd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d29ya2VyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya3dvbWVuOlwiZmVtYWxlXCIsd29ya21lbjpcIm1hbGVcIn19LHtpZDpcImFjdG9yLWFjdHJlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVyZm9ybWVyOlwiYVwiLHN0YXI6XCJhXCIsYXJ0aXN0OlwiYVwiLGVudGVydGFpbmVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthY3RyZXNzOlwiZmVtYWxlXCIsYWN0b3I6XCJtYWxlXCJ9fSx7aWQ6XCJhY3RvcnMtYWN0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BlcmZvcm1lcnM6XCJhXCIsc3RhcnM6XCJhXCIsYXJ0aXN0czpcImFcIixlbnRlcnRhaW5lcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FjdHJlc3NlczpcImZlbWFsZVwiLGFjdG9yczpcIm1hbGVcIn19LHtpZDpcImFpcmNyZXd3b21hbi1haXJtYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGlsb3Q6XCJhXCIsYXZpYXRvcjpcImFcIixhaXJzdGFmZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWlyY3Jld3dvbWFuOlwiZmVtYWxlXCIsXCJhaXJjcmV3IHdvbWFuXCI6XCJmZW1hbGVcIixhaXJjcmV3bWFuOlwibWFsZVwiLGFpcm1hbjpcIm1hbGVcIn19LHtpZDpcImFpcmNyZXd3b21lbi1haXJtZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGlsb3RzOlwiYVwiLGF2aWF0b3JzOlwiYVwiLGFpcnN0YWZmOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthaXJjcmV3d29tZW46XCJmZW1hbGVcIixcImFpcmNyZXcgd29tZW5cIjpcImZlbWFsZVwiLGFpcmNyZXdtZW46XCJtYWxlXCIsYWlybWVuOlwibWFsZVwifX0se2lkOlwiYWxkZXJtYW4tYWxkZXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhYmluZXQgbWVtYmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FsZGVyd29tYW46XCJmZW1hbGVcIixhbGRlcm1hbjpcIm1hbGVcIn19LHtpZDpcImFsZGVybWVuLWFsZGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2FiaW5ldDpcImFcIixcImNhYmluZXQgbWVtYmVyc1wiOlwiYVwiLGFsZGVycGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbGRlcndvbWVuOlwiZmVtYWxlXCIsYWxkZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJhc3NlbWJseW1hbi1hc3NlbWJseXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYXNzZW1ibHkgcGVyc29uXCI6XCJhXCIsXCJhc3NlbWJseSB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXNzZW1ibHl3b21hbjpcImZlbWFsZVwiLGFzc2VtYmx5bWFuOlwibWFsZVwifX0se2lkOlwiYXVudC11bmNsZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntyZWxhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7a2luc3dvbWFuOlwiZmVtYWxlXCIsYXVudDpcImZlbWFsZVwiLGtpbnNtYW46XCJtYWxlXCIsdW5jbGU6XCJtYWxlXCJ9fSx7aWQ6XCJhdW50cy11bmNsZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVsYXRpdmVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntraW5zd29tZW46XCJmZW1hbGVcIixhdW50czpcImZlbWFsZVwiLGtpbnNtZW46XCJtYWxlXCIsdW5jbGVzOlwibWFsZVwifX0se2lkOlwiYm9vZ2V5bWFuLWJvb2dleXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dleXdvbWFuOlwiZmVtYWxlXCIsYm9vZ2V5bWFuOlwibWFsZVwifX0se2lkOlwiYm9vZ2llbWFuLWJvb2dpZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dpZXdvbWFuOlwiZmVtYWxlXCIsYm9vZ2llbWFuOlwibWFsZVwifX0se2lkOlwiYm9nZXltYW4tYm9nZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib2dleW1vbnN0ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JvZ2V5d29tYW46XCJmZW1hbGVcIixib2dleW1hbjpcIm1hbGVcIn19LHtpZDpcImJvZ2llbWFuLWJvZ2lld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dpZXdvbWFuOlwiZmVtYWxlXCIsYm9naWVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJib29naWVtZW4tYm9vZ2lld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9vZ2V5bW9uc3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Jvb2dpZXdvbWVuOlwiZmVtYWxlXCIsYm9vZ2llbWVuOlwibWFsZVwifX0se2lkOlwiYm9naWVtZW4tYm9naWV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib2dleW1vbnN0ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dpZXdvbWVuOlwiZmVtYWxlXCIsYm9naWVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJib25kc21hbi1ib25kc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JvbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9uZHN3b21hbjpcImZlbWFsZVwiLGJvbmRzbWFuOlwibWFsZVwifX0se2lkOlwiYm9uZHNtZW4tYm9uZHN3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib25kZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib25kc3dvbWVuOlwiZmVtYWxlXCIsYm9uZHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJodXNiYW5kLXdpZmVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFydG5lcjpcImFcIixcInNpZ25pZmljYW50IG90aGVyXCI6XCJhXCIsc3BvdXNlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aWZlOlwiZmVtYWxlXCIsaHVzYmFuZDpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImh1c2JhbmRzLXdpdmVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXJzOlwiYVwiLFwic2lnbmlmaWNhbnQgb3RoZXJzXCI6XCJhXCIsc3BvdXNlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2l2ZXM6XCJmZW1hbGVcIixodXNiYW5kczpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImJveWZyaWVuZC1naXJsZnJpZW5kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXI6XCJhXCIsZnJpZW5kOlwiYVwiLFwic2lnbmlmaWNhbnQgb3RoZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGZyaWVuZDpcImZlbWFsZVwiLGJveWZyaWVuZDpcIm1hbGVcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYnVzdGxlLmNvbS9hcnRpY2xlcy8xMDgzMjEtNi1yZWFzb25zLXRvLXJlZmVyLXRvLXlvdXItc2lnbmlmaWNhbnQtb3RoZXItYXMteW91ci1wYXJ0bmVyXCJ9LHtpZDpcImJveWZyaWVuZHMtZ2lybGZyaWVuZHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFydG5lcnM6XCJhXCIsZnJpZW5kczpcImFcIixcInNpZ25pZmljYW50IG90aGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaXJsZnJpZW5kczpcImZlbWFsZVwiLGJveWZyaWVuZHM6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lob29kLWdpcmxob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkaG9vZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGhvb2Q6XCJmZW1hbGVcIixib3lob29kOlwibWFsZVwifX0se2lkOlwiYm95aXNoLWdpcmx5XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkaXNoOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaXJseTpcImZlbWFsZVwiLGdpcmxpc2g6XCJmZW1hbGVcIixib3lpc2g6XCJtYWxlXCJ9fSx7aWQ6XCJqb3VybmV5bWFuLWpvdXJuZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntqb3VybmV5cGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqb3VybmV5d29tYW46XCJmZW1hbGVcIixqb3VybmV5bWFuOlwibWFsZVwifX0se2lkOlwiam91cm5leW1lbi1qb3VybmV5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7am91cm5leXBlcnNvbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2pvdXJuZXl3b21lbjpcImZlbWFsZVwiLGpvdXJuZXltZW46XCJtYWxlXCJ9fSx7aWQ6XCJnb2RmYXRoZXItZ29kbW90aGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dvZHBhcmVudDpcImFcIixlbGRlcjpcImFcIixwYXRyb246XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dvZG1vdGhlcjpcImZlbWFsZVwiLHBhdHJvbmVzczpcImZlbWFsZVwiLGdvZGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZGF1Z2h0ZXItZ3JhbmRzb25cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRjaGlsZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRkYXVnaHRlcjpcImZlbWFsZVwiLGdyYW5kc29uOlwibWFsZVwifX0se2lkOlwiZ3JhbmRkYXVnaHRlcnMtZ3JhbmRzb25zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kY2hpbGRyZW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kZGF1Z2h0ZXJzOlwiZmVtYWxlXCIsZ3JhbmRzb25zOlwibWFsZVwifX0se2lkOlwiZm9yZWZhdGhlci1mb3JlbW90aGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2VzdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3JlbW90aGVyOlwiZmVtYWxlXCIsZm9yZWZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImZvcmVmYXRoZXJzLWZvcmVtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2VzdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Zm9yZW1vdGhlcnM6XCJmZW1hbGVcIixmb3JlZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcImdyYW1wcy1ncmFubnlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRwYXJlbnQ6XCJhXCIsYW5jZXN0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5ueTpcImZlbWFsZVwiLGdyYW5kbWE6XCJmZW1hbGVcIixncmFuZG1vdGhlcjpcImZlbWFsZVwiLGdyYW5kcGFwcHk6XCJtYWxlXCIsZ3JhbmRkYWRkeTpcIm1hbGVcIixncmFtcHM6XCJtYWxlXCIsZ3JhbmRwYTpcIm1hbGVcIixncmFuZGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZmF0aGVycy1ncmFuZG1vdGhlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3JhbmRwYXJlbnRzOlwiYVwiLGFuY2VzdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRtb3RoZXJzOlwiZmVtYWxlXCIsZ3JhbmRmYXRoZXJzOlwibWFsZVwifX0se2lkOlwiYnJpZGUtZ3Jvb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BvdXNlOlwiYVwiLG5ld2x5d2VkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnticmlkZTpcImZlbWFsZVwiLGdyb29tOlwibWFsZVwifX0se2lkOlwiYnJvdGhlci1zaXN0ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2libGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2lzdGVyOlwiZmVtYWxlXCIsYnJvdGhlcjpcIm1hbGVcIn19LHtpZDpcImJyb3RoZXJzLXNpc3RlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2libGluZ3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Npc3RlcnM6XCJmZW1hbGVcIixicm90aGVyczpcIm1hbGVcIn19LHtpZDpcImNhbWVyYW1hbi1jYW1lcmF3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhbWVyYSBvcGVyYXRvclwiOlwiYVwiLFwiY2FtZXJhIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYW1lcmF3b21hbjpcImZlbWFsZVwiLGNhbWVyYW1hbjpcIm1hbGVcIn19LHtpZDpcImNhbWVyYW1lbi1jYW1lcmF3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhbWVyYSBvcGVyYXRvcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2FtZXJhd29tZW46XCJmZW1hbGVcIixjYW1lcmFtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjYXZlbWFuLWNhdmV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0cm9nbG9keXRlOlwiYVwiLGhvbWluaWRhZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2F2ZXdvbWFuOlwiZmVtYWxlXCIsY2F2ZW1hbjpcIm1hbGVcIn19LHtpZDpcImNhdmVtZW4tY2F2ZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Ryb2dsb2R5dGFlOlwiYVwiLHRyb2dsb2R5dGk6XCJhXCIsdHJvZ2xvZHl0ZXM6XCJhXCIsaG9taW5pZHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdmV3b21lbjpcImZlbWFsZVwiLGNhdmVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjbGVyZ3ltYW4tY2xlcmd5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2xlcmd5cGVyc29uOlwiYVwiLGNsZXJneTpcImFcIixjbGVyaWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NsZXJneXdvbWFuOlwiZmVtYWxlXCIsY2xlcmd5bWFuOlwibWFsZVwifX0se2lkOlwiY2xlcmd5bWVuLWNsZXJneXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZXJnaWVzOlwiYVwiLGNsZXJpY3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NsZXJneXdvbWVuOlwiZmVtYWxlXCIsY2xlcmd5bWVuOlwibWFsZVwifX0se2lkOlwiY291bmNpbG1hbi1jb3VuY2lsd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb3VuY2lsIG1lbWJlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3VuY2lsd29tYW46XCJmZW1hbGVcIixjb3VuY2lsbWFuOlwibWFsZVwifX0se2lkOlwiY291bmNpbG1lbi1jb3VuY2lsd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb3VuY2lsIG1lbWJlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bmNpbHdvbWVuOlwiZmVtYWxlXCIsY291bmNpbG1lbjpcIm1hbGVcIn19LHtpZDpcImNvdW50cnltYW4tY291bnRyeXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bnRyeSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bnRyeXdvbWFuOlwiZmVtYWxlXCIsY291bnRyeW1hbjpcIm1hbGVcIn19LHtpZDpcImNvdW50cnltZW4tY291bnRyeXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bnRyeSBmb2xrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW50cnl3b21lbjpcImZlbWFsZVwiLGNvdW50cnltZW46XCJtYWxlXCJ9fSx7aWQ6XCJoYW5keW1hbi1oYW5keXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FydGlzYW46XCJhXCIsY3JhZnRzcGVyc29uOlwiYVwiLFwic2tpbGxlZCB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZHl3b21hbjpcImZlbWFsZVwiLGNyYWZ0c3dvbWFuOlwiZmVtYWxlXCIsaGFuZHltYW46XCJtYWxlXCIsY3JhZnRzbWFuOlwibWFsZVwifX0se2lkOlwiaG9zdC1ob3N0ZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3ByZXNlbnRlcjpcImFcIixlbnRlcnRhaW5lcjpcImFcIixlbWNlZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG9zdGVzczpcImZlbWFsZVwiLGhvc3Q6XCJtYWxlXCJ9fSx7aWQ6XCJob3N0ZXNzZXMtaG9zdHNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJlc2VudGVyczpcImFcIixlbnRlcnRhaW5lcnM6XCJhXCIsZW1jZWVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3N0ZXNzZXM6XCJmZW1hbGVcIixob3N0czpcIm1hbGVcIn19LHtpZDpcImhhbmR5bWVuLWhhbmR5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXJ0aXNhbnM6XCJhXCIsY3JhZnRzcGVyc29uczpcImFcIixcInNraWxsZWQgd29ya2Vyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5keXdvbWVuOlwiZmVtYWxlXCIsY3JhZnRzd29tZW46XCJmZW1hbGVcIixoYW5keW1lbjpcIm1hbGVcIixjcmFmdHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJoYW5nbWFuLWhhbmd3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntndWlsbG90aW5lOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nd29tYW46XCJmZW1hbGVcIixoYW5nbWFuOlwibWFsZVwifX0se2lkOlwiaGFuZ21lbi1oYW5nd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3VpbGxvdGluZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmd3b21lbjpcImZlbWFsZVwiLGhhbmdtZW46XCJtYWxlXCJ9fSx7aWQ6XCJoZW5jaG1hbi1oZW5jaHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpZGVraWNrOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZW5jaHdvbWFuOlwiZmVtYWxlXCIsaGVuY2htYW46XCJtYWxlXCJ9fSx7aWQ6XCJoZW5jaG1lbi1oZW5jaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpZGVraWNrczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVuY2h3b21lbjpcImZlbWFsZVwiLGhlbmNobWVuOlwibWFsZVwifX0se2lkOlwiaGVyby1oZXJvaW5lXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wicm9sZS1tb2RlbFwiOlwiYVwiLG1lbnRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyb2luZTpcImZlbWFsZVwiLGhlcm86XCJtYWxlXCJ9fSx7aWQ6XCJoZXJvZXMtaGVyb2luZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJyb2xlLW1vZGVsc1wiOlwiYVwiLG1lbnRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyb2luZXM6XCJmZW1hbGVcIixoZXJvZXM6XCJtYWxlXCJ9fSx7aWQ6XCJtYXRlcm5hbC1wYXRlcm5hbFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJlbnRhbDpcImFcIix3YXJtOlwiYVwiLGludGltYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXRlcm5hbDpcImZlbWFsZVwiLHBhdGVybmFsOlwibWFsZVwiLGZyYXRlcm5hbDpcIm1hbGVcIn19LHtpZDpcIm1hdGVybml0eS1wYXRlcm5pdHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hdGVybml0eTpcImZlbWFsZVwiLHBhdGVybml0eTpcIm1hbGVcIn19LHtpZDpcImRhZHMtbW9tc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJlbnRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW1hczpcImZlbWFsZVwiLG1vdGhlcnM6XCJmZW1hbGVcIixtb21zOlwiZmVtYWxlXCIsbXVtczpcImZlbWFsZVwiLG1vbW1hczpcImZlbWFsZVwiLG1vbW1pZXM6XCJmZW1hbGVcIixwYXBhczpcIm1hbGVcIixmYXRoZXJzOlwibWFsZVwiLGRhZHM6XCJtYWxlXCIsZGFkZGllczpcIm1hbGVcIn19LHtpZDpcImRhZC1tb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW1hOlwiZmVtYWxlXCIsbW90aGVyOlwiZmVtYWxlXCIsbW9tOlwiZmVtYWxlXCIsbXVtOlwiZmVtYWxlXCIsbW9tbWE6XCJmZW1hbGVcIixtb21teTpcImZlbWFsZVwiLHBhcGE6XCJtYWxlXCIsZmF0aGVyOlwibWFsZVwiLGRhZDpcIm1hbGVcIixwb3A6XCJtYWxlXCIsZGFkZHk6XCJtYWxlXCJ9fSx7aWQ6XCJkYXVnaHRlci1zb25cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hpbGQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhdWdodGVyOlwiZmVtYWxlXCIsc29uOlwibWFsZVwifX0se2lkOlwiZGF1Z2h0ZXJzLXNvbnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hpbGRyZW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhdWdodGVyczpcImZlbWFsZVwiLHNvbnM6XCJtYWxlXCJ9fSx7aWQ6XCJkb29ybWFuLWRvb3J3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjb25jaWVyZ2U6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Rvb3J3b21hbjpcImZlbWFsZVwiLGRvb3JtYW46XCJtYWxlXCJ9fSx7aWQ6XCJkb29ybWVuLWRvb3J3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjb25jaWVyZ2VzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkb29yd29tZW46XCJmZW1hbGVcIixkb29ybWVuOlwibWFsZVwifX0se2lkOlwiZmVtaW5pbi1tYW5seVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbmx5OlwiYVwiLG1hdHVyZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtaW5pbjpcImZlbWFsZVwiLGR1ZGVseTpcIm1hbGVcIixtYW5seTpcIm1hbGVcIn19LHtpZDpcImZlbWFsZXMtbWFsZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZW1hbGVzOlwiZmVtYWxlXCIsbWFsZXM6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nLXF1ZWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3J1bGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbXByZXNzOlwiZmVtYWxlXCIscXVlZW46XCJmZW1hbGVcIixlbXBlcm9yOlwibWFsZVwiLGtpbmc6XCJtYWxlXCJ9fSx7aWQ6XCJraW5ncy1xdWVlbnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cnVsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbXByZXNzZXM6XCJmZW1hbGVcIixxdWVlbnM6XCJmZW1hbGVcIixlbXBlcm9yczpcIm1hbGVcIixraW5nczpcIm1hbGVcIn19LHtpZDpcImtpbmdzaXplLXF1ZWVuc2l6ZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntqdW1ibzpcImFcIixnaWdhbnRpYzpcImFcIn0saW5jb25zaWRlcmF0ZTp7cXVlZW5zaXplOlwiZmVtYWxlXCIsa2luZ3NpemU6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nbWFrZXItcXVlZW5tYWtlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInBvd2VyIGJlaGluZCB0aGUgdGhyb25lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1ZWVubWFrZXI6XCJmZW1hbGVcIixraW5nbWFrZXI6XCJtYWxlXCJ9fSx7aWQ6XCJsYXltYW4tbGF5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2l2aWxpYW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xheXdvbWFuOlwiZmVtYWxlXCIsbGF5bWFuOlwibWFsZVwifX0se2lkOlwibGF5bWVuLWxheXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NpdmlsaWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGF5d29tZW46XCJmZW1hbGVcIixsYXltZW46XCJtYWxlXCJ9fSx7aWQ6XCJkYW1lLWxvcmRcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7b2ZmaWNpYWw6XCJhXCIsb3duZXI6XCJhXCIsZXhwZXJ0OlwiYVwiLHN1cGVyaW9yOlwiYVwiLGNoaWVmOlwiYVwiLHJ1bGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYW1lOlwiZmVtYWxlXCIsbG9yZDpcIm1hbGVcIn19LHtpZDpcImRhbWVzLWxvcmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljaWFsczpcImFcIixjaGllZnM6XCJhXCIscnVsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYW1lczpcImZlbWFsZVwiLGxvcmRzOlwibWFsZVwifX0se2lkOlwibWFuaG9vZC13b21hbmhvb2RcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YWR1bHRob29kOlwiYVwiLHBlcnNvbmhvb2Q6XCJhXCIsbWF0dXJpdHk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvbWFuaG9vZDpcImZlbWFsZVwiLG1hc2N1bGluaXR5OlwibWFsZVwiLG1hbmhvb2Q6XCJtYWxlXCJ9fSx7aWQ6XCJmZW1pbmluaXR5LW1hbmxpbmVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtaW5pbml0eTpcImZlbWFsZVwiLG1hbmxpbmVzczpcIm1hbGVcIn19LHtpZDpcIm1hcmtzbWFuLW1hcmtzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2hvb3RlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFya3N3b21hbjpcImZlbWFsZVwiLG1hcmtzbWFuOlwibWFsZVwifX0se2lkOlwibWFya3NtZW4tbWFya3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaG9vdGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFya3N3b21lbjpcImZlbWFsZVwiLG1hcmtzbWVuOlwibWFsZVwifX0se2lkOlwibWlkZGxlbWFuLW1pZGRsZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ludGVybWVkaWFyeTpcImFcIixcImdvLWJldHdlZW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlkZGxld29tYW46XCJmZW1hbGVcIixtaWRkbGVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWRkbGVtZW4tbWlkZGxld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aW50ZXJtZWRpYXJpZXM6XCJhXCIsXCJnby1iZXR3ZWVuc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttaWRkbGV3b21lbjpcImZlbWFsZVwiLG1pZGRsZW1lbjpcIm1hbGVcIn19LHtpZDpcIm1pbGttYW4tbWlsa3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWlsayBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlsa3dvbWFuOlwiZmVtYWxlXCIsbWlsa21hbjpcIm1hbGVcIn19LHtpZDpcIm1pbGttZW4tbWlsa3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWlsayBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlsa3dvbWVuOlwiZmVtYWxlXCIsbWlsa21lbjpcIm1hbGVcIn19LHtpZDpcIm5lcGhldy1uaWVjZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntuaWJsaW5nOlwiYVwiLFwic2libGluZ+KAmXMgY2hpbGRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bmllY2U6XCJmZW1hbGVcIixuZXBoZXc6XCJtYWxlXCJ9fSx7aWQ6XCJuZXBoZXdzLW5pZWNlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntuaWJsaW5nczpcImFcIixcInNpYmxpbmfigJlzIGNoaWxkcmVuXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25pZWNlczpcImZlbWFsZVwiLG5lcGhld3M6XCJtYWxlXCJ9fSx7aWQ6XCJub2JsZW1hbi1ub2JsZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vYmxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntub2JsZXdvbWFuOlwiZmVtYWxlXCIsbm9ibGVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJub2JsZW1lbi1ub2JsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vYmxlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7bm9ibGV3b21lbjpcImZlbWFsZVwiLG5vYmxlbWVuOlwibWFsZVwifX0se2lkOlwib21idWRzbWFuLW9tYnVkc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vdGFyeTpcImFcIixcImNvbnN1bWVyIGFkdm9jYXRlXCI6XCJhXCIsXCJ0cm91YmxlIHNob290ZXJcIjpcImFcIixvbXNidWRwZXJzb246XCJhXCIsbWVkaWF0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29tYnVkc3dvbWFuOlwiZmVtYWxlXCIsb21idWRzbWFuOlwibWFsZVwifX0se2lkOlwib21idWRzbWVuLW9tYnVkc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e25vdGFyaWVzOlwiYVwiLG9tc2J1ZHBlcnNvbnM6XCJhXCIsb21zYnVkcGVvcGxlOlwiYVwiLG1lZGlhdG9yczpcImFcIn0saW5jb25zaWRlcmF0ZTp7b21idWRzd29tZW46XCJmZW1hbGVcIixvbWJ1ZHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJwcmluY2UtcHJpbmNlc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aGVpcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHJpbmNlc3M6XCJmZW1hbGVcIixwcmluY2U6XCJtYWxlXCJ9fSx7aWQ6XCJwcmluY2VzLXByaW5jZXNzZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aGVpcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW5jZXNzZXM6XCJmZW1hbGVcIixwcmluY2VzOlwibWFsZVwifX0se2lkOlwic2FuZG1hbi1zYW5kd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFpcnk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbmR3b21hbjpcImZlbWFsZVwiLHNhbmRtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzYW5kbWVuLXNhbmR3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYWlyaWVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYW5kd29tZW46XCJmZW1hbGVcIixzYW5kbWVuOlwibWFsZVwifX0se2lkOlwic2hvd21hbi1zaG93d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvbW90ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nob3d3b21hbjpcImZlbWFsZVwiLHNob3dtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzaG93bWVuLXNob3d3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcm9tb3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nob3d3b21lbjpcImZlbWFsZVwiLFwic2hvdyB3b21lblwiOlwiZmVtYWxlXCIsc2hvd21lbjpcIm1hbGVcIn19LHtpZDpcInNwYWNlbWFuLXNwYWNld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXN0cm9uYXV0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFjZXdvbWFuOlwiZmVtYWxlXCIsc3BhY2VtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcGFjZW1lbi1zcGFjZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FzdHJvbmF1dHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NwYWNld29tZW46XCJmZW1hbGVcIixzcGFjZW1lbjpcIm1hbGVcIn19LHtpZDpcInNwb2tlc21hbi1zcG9rZXN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzcGVha2VyOlwiYVwiLHNwb2tlc3BlcnNvbjpcImFcIixyZXByZXNlbnRhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bva2Vzd29tYW46XCJmZW1hbGVcIixzcG9rZXNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9rZXNtZW4tc3Bva2Vzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BlYWtlcnM6XCJhXCIsc3Bva2VzcGVyc29uczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3Bva2Vzd29tZW46XCJmZW1hbGVcIixzcG9rZXNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9ydHNtYW4tc3BvcnRzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZTpcImFcIixcInNwb3J0cyBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzd29tYW46XCJmZW1hbGVcIixzcG9ydHNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9ydHNtZW4tc3BvcnRzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YXRobGV0ZXM6XCJhXCIsXCJzcG9ydHMgcGVyc29uc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcG9ydHN3b21lbjpcImZlbWFsZVwiLHNwb3J0c21lbjpcIm1hbGVcIn19LHtpZDpcInN0YXRlc21hbi1zdGF0ZXN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzZW5hdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGF0ZXN3b21hbjpcImZlbWFsZVwiLHN0YXRlc21hbjpcIm1hbGVcIn19LHtpZDpcInN0ZXBicm90aGVyLXN0ZXBzaXN0ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXNpYmxpbmdcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcHNpc3RlcjpcImZlbWFsZVwiLHN0ZXBicm90aGVyOlwibWFsZVwifX0se2lkOlwic3RlcGJyb3RoZXJzLXN0ZXBzaXN0ZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1zaWJsaW5nc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGVwc2lzdGVyczpcImZlbWFsZVwiLHN0ZXBicm90aGVyczpcIm1hbGVcIn19LHtpZDpcInN0ZXBkYWQtc3RlcG1vbVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0ZXAtcGFyZW50XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBtb206XCJmZW1hbGVcIixzdGVwbW90aGVyOlwiZmVtYWxlXCIsc3RlcGRhZDpcIm1hbGVcIixzdGVwZmF0aGVyOlwibWFsZVwifX0se2lkOlwic3RlcGZhdGhlcnMtc3RlcG1vdGhlcnNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXBhcmVudHNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcG1vdGhlcnM6XCJmZW1hbGVcIixzdGVwZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcInN1cGVybWFuLXN1cGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGl0YW46XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N1cGVyd29tYW46XCJmZW1hbGVcIixzdXBlcm1hbjpcIm1hbGVcIn19LHtpZDpcInN1cGVybWVuLXN1cGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGl0YW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdXBlcndvbWVuOlwiZmVtYWxlXCIsc3VwZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJ1bm1hbmx5LXVud29tYW5seVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntpbmh1bWFuZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7dW53b21hbmx5OlwiZmVtYWxlXCIsdW53b21lbmx5OlwiZmVtYWxlXCIsdW5tYW5seTpcIm1hbGVcIix1bm1lbmx5OlwibWFsZVwifX0se2lkOlwid2F0Y2htYW4td2F0Y2h3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3YXRjaGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3YXRjaHdvbWFuOlwiZmVtYWxlXCIsd2F0Y2htYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3YXRjaG1lbi13YXRjaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3dhdGNoZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3YXRjaHdvbWVuOlwiZmVtYWxlXCIsd2F0Y2htZW46XCJtYWxlXCJ9fSx7aWQ6XCJ3ZWF0aGVybWFuLXdlYXRoZXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndlYXRoZXIgZm9yZWNhc3RlclwiOlwiYVwiLG1ldGVvcm9sb2dpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dlYXRoZXJ3b21hbjpcImZlbWFsZVwiLHdlYXRoZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3ZWF0aGVybWVuLXdlYXRoZXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndlYXRoZXIgZm9yZWNhc3RlcnNcIjpcImFcIixtZXRlb3JvbG9naXN0czpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2VhdGhlcndvbWVuOlwiZmVtYWxlXCIsd2VhdGhlcm1lbjpcIm1hbGVcIn19LHtpZDpcIndpZG93LXdpZG93ZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YmVyZWF2ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dpZG93OlwiZmVtYWxlXCIsd2lkb3dzOlwiZmVtYWxlXCIsd2lkb3dlcjpcIm1hbGVcIix3aWRvd2VyczpcIm1hbGVcIn19LHtpZDpcIm93bi1tYW4tb3duLXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wib3duIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm93biB3b21hblwiOlwiZmVtYWxlXCIsXCJvd24gbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcmVuY2htZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZyZW5jaDpcImFcIixcInRoZSBmcmVuY2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnJlbmNobWVuOlwibWFsZVwifX0se2lkOlwibGFkeWxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7Y291cnRlb3VzOlwiYVwiLGN1bHR1cmVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYWR5bGlrZTpcImZlbWFsZVwifX0se2lkOlwibGlrZS1hLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVzb2x1dGVseTpcImFcIixicmF2ZWx5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxpa2UgYSBtYW5cIjpcIm1hbGVcIn19LHtpZDpcIm1haWRlbi1uYW1lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYmlydGggbmFtZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1haWRlbiBuYW1lXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1haWRlbi12b3lhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCB2b3lhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gdm95YWdlXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1haWRlbi1mbGlnaHRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCBmbGlnaHRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gZmxpZ2h0XCI6XCJmZW1hbGVcIn19LHtpZDpcIm1hbi1lbm91Z2hcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3Ryb25nIGVub3VnaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBlbm91Z2hcIjpcIm1hbGVcIn19LHtpZDpcIm9uZXVwbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7dXBzdGFnaW5nOlwiYVwiLGNvbXBldGl0aXZlbmVzczpcImFcIn0saW5jb25zaWRlcmF0ZTp7b25ldXBtYW5zaGlwOlwibWFsZVwifX0se2lkOlwibXJzLVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1zLlwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1pc3MuXCI6XCJmZW1hbGVcIixcIm1ycy5cIjpcImZlbWFsZVwifX0se2lkOlwibWFubWFkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7bWFudWZhY3R1cmVkOlwiYVwiLGFydGlmaWNpYWw6XCJhXCIsc3ludGhldGljOlwiYVwiLFwibWFjaGluZS1tYWRlXCI6XCJhXCIsY29uc3RydWN0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbm1hZGU6XCJtYWxlXCJ9fSx7aWQ6XCJtYW4tb2YtYWN0aW9uXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntkeW5hbW86XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIGFjdGlvblwiOlwibWFsZVwifX0se2lkOlwibWFuLW9mLWxldHRlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NjaG9sYXI6XCJhXCIsd3JpdGVyOlwiYVwiLFwibGl0ZXJhcnkgZmlndXJlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIGxldHRlcnNcIjpcIm1hbGVcIn19LHtpZDpcIm1hbi1vZi10aGUtd29ybGRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NvcGhpc3RpY2F0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gb2YgdGhlIHdvcmxkXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmZWxsb3dzaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjYW1hcmFkZXJpZTpcImFcIixjb21tdW5pdHk6XCJhXCIsb3JnYW5pemF0aW9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmZWxsb3dzaGlwOlwibWFsZVwifX0se2lkOlwiZnJlc2htYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QteWVhciBzdHVkZW50XCI6XCJhXCIsZnJlc2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnJlc2htYW46XCJtYWxlXCIsZnJlc2h3b21hbjpcIm1hbGVcIn19LHtpZDpcIndvcmttYW5zaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInF1YWxpdHkgY29uc3RydWN0aW9uXCI6XCJhXCIsZXhwZXJ0aXNlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b3JrbWFuc2hpcDpcIm1hbGVcIn19LHtpZDpcImhvdXNld2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntob21lbWFrZXI6XCJhXCIsaG9tZXdvcmtlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG91c2V3aWZlOlwiZmVtYWxlXCJ9fSx7aWQ6XCJob3VzZXdpdmVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2hvbWVtYWtlcnM6XCJhXCIsaG9tZXdvcmtlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvdXNld2l2ZXM6XCJmZW1hbGVcIn19LHtpZDpcIm1vdGhlcmx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2xvdmluZzpcImFcIix3YXJtOlwiYVwiLG51cnR1cmluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7bW90aGVybHk6XCJmZW1hbGVcIn19LHtpZDpcIm1hbnBvd2VyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImh1bWFuIHJlc291cmNlc1wiOlwiYVwiLHdvcmtmb3JjZTpcImFcIixwZXJzb25uZWw6XCJhXCIsc3RhZmY6XCJhXCIsbGFib3I6XCJhXCIsXCJsYWJvciBmb3JjZVwiOlwiYVwiLHN0YWZmaW5nOlwiYVwiLFwiY29tYmF0IHBlcnNvbm5lbFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5wb3dlcjpcIm1hbGVcIn19LHtpZDpcIm1hc3Rlci1vZi1jZXJlbW9uaWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntlbWNlZTpcImFcIixtb2RlcmF0b3I6XCJhXCIsY29udmVub3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIG9mIGNlcmVtb25pZXNcIjpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcmZ1bFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2tpbGxlZDpcImFcIixhdXRob3JpdGF0aXZlOlwiYVwiLGNvbW1hbmRpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcmZ1bDpcIm1hbGVcIn19LHtpZDpcIm1hc3Rlcm1pbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dlbml1czpcImFcIixjcmVhdG9yOlwiYVwiLGluc3RpZ2F0b3I6XCJhXCIsb3ZlcnNlZTpcImFcIixsYXVuY2g6XCJhXCIsb3JpZ2luYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJtaW5kOlwibWFsZVwifX0se2lkOlwibWFzdGVycGllY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wid29yayBvZiBnZW5pdXNcIjpcImFcIixcImNoZWYgZOKAmW9ldXZyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJwaWVjZTpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnBsYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Zpc2lvbjpcImFcIixcImNvbXByZWhlbnNpdmUgcGxhblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJwbGFuOlwibWFsZVwifX0se2lkOlwibWFzdGVyc3Ryb2tlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInRydW1wIGNhcmRcIjpcImFcIixcInN0cm9rZSBvZiBnZW5pdXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVyc3Ryb2tlOlwibWFsZVwifX0se2lkOlwibWFkbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYW5hdGljOlwiYVwiLHplYWxvdDpcImFcIixlbnRodXNpYXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWRtYW46XCJtYWxlXCIsXCJtYWQgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYWRtZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZhbmF0aWNzOlwiYVwiLHplYWxvdHM6XCJhXCIsZW50aHVzaWFzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hZG1lbjpcIm1hbGVcIixcIm1hZCBtZW5cIjpcIm1hbGVcIn19LHtpZDpcIm1hbmtpbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2h1bWFua2luZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFua2luZDpcIm1hbGVcIn19LHtpZDpcIm1hbmhvdXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgaG91clwiOlwiYVwiLFwiaG91ciBvZiB3b3JrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmhvdXI6XCJtYWxlXCIsXCJtYW4gaG91clwiOlwibWFsZVwifX0se2lkOlwibWFuaG91cnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgaG91cnNcIjpcImFcIixcImhvdXJzIG9mIHdvcmtcIjpcImFcIixcImhvdXJzIG9mIGxhYm9yXCI6XCJhXCIsaG91cnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmhvdXJzOlwibWFsZVwiLFwibWFuIGhvdXJzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5uZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3N0YWZmZWQ6XCJhXCIsY3Jld2VkOlwiYVwiLHBpbG90ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbm5lZDpcImFcIn0sbm90ZTpcIlVzaW5nIGdlbmRlciBuZXV0cmFsIGxhbmd1YWdlIG1lYW5zIHVzZXJzIHdpbGwgaGVscCB0byBicmVhayB1cCBnZW5kZXIgc3RlcmVvdHlwZXMuXCJ9LHtpZDpcInVubWFubmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyb2JvdGljOlwiYVwiLGF1dG9tYXRlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7dW5tYW5uZWQ6XCJhXCJ9LG5vdGU6XCJVc2luZyBnZW5kZXIgbmV1dHJhbCBsYW5ndWFnZSBtZWFucyB1c2VycyB3aWxsIGhlbHAgdG8gYnJlYWsgdXAgZ2VuZGVyIHN0ZXJlb3R5cGVzLlwifSx7aWQ6XCJtb2FuaW5nXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt3aGluaW5nOlwiYVwiLGNvbXBsYWluaW5nOlwiYVwiLGNyeWluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7Yml0Y2hpbmc6XCJhXCIsbW9hbmluZzpcImFcIn19LHtpZDpcIm1vYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3doaW5lOlwiYVwiLGNvbXBsYWluOlwiYVwiLGNyeTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Yml0Y2g6XCJhXCIsbW9hbjpcImFcIn19LHtpZDpcIndpZmViZWF0ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGFuayB0b3BcIjpcImFcIixcInNsZWV2ZWxlc3MgdW5kZXJzaGlydFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndpZmUgYmVhdGVyXCI6XCJhXCIsd2lmZWJlYXRlcjpcImFcIn19LHtpZDpcImFuY2llbnQtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFuY2llbnQgY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJhbmNpZW50IHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImFuY2llbnQgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXV0aG9yZXNzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthdXRob3I6XCJhXCIsd3JpdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthdXRob3Jlc3M6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS1ob3VzZXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBjb25zdW1lclwiOlwiYVwiLFwiYXZlcmFnZSBob3VzZWhvbGRcIjpcImFcIixcImF2ZXJhZ2UgaG9tZW1ha2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBob3VzZXdpZmVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJhdmVyYWdlLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhdmVyYWdlIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS13b3JraW5nLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhdmVyYWdlIHdhZ2UgZWFybmVyXCI6XCJhXCIsXCJhdmVyYWdlIHRheHBheWVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYXZlcmFnZSB3b3JraW5nIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2aWF0cml4XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnthdmlhdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthdmlhdHJpeDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJicm90aGVyaG9vZC1vZi1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGh1bWFuIGZhbWlseVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJyb3RoZXJob29kIG9mIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImNhbGVuZGFyLWdpcmxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e21vZGVsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNhbGVuZGFyIGdpcmxcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjYWxsLWdpcmxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2VzY29ydDpcImFcIixwcm9zdGl0dXRlOlwiYVwiLFwic2V4IHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNhbGwgZ2lybFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImNodXJjaG1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2xlcmljOlwiYVwiLFwicHJhY3RpY2luZyBDaHJpc3RpYW5cIjpcImFcIixcInBpbGxhciBvZiB0aGUgQ2h1cmNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NodXJjaG1hbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJlbmdsaXNoLW1hc3RlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlbmdsaXNoIGNvb3JkaW5hdG9yXCI6XCJhXCIsXCJzZW5pb3IgdGVhY2hlciBvZiBlbmdsaXNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZW5nbGlzaCBtYXN0ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJlbmdsaXNobWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBlbmdsaXNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2VuZ2xpc2htZW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZXhlY3V0cml4XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntleGVjdXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXhlY3V0cml4OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImZhdGhlci1vZi0qXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZvdW5kZXIgb2ZcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYXRoZXIgb2YgKlwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImZvdW5kaW5nLWZhdGhlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0aGUgZm91bmRlcnNcIjpcImFcIixcImZvdW5kaW5nIGxlYWRlcnNcIjpcImFcIixmb3JlYmVhcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZm91bmRpbmcgZmF0aGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaG91c2VtYWlkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhvdXNlIHdvcmtlclwiOlwiYVwiLFwiZG9tZXN0aWMgaGVscFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3VzZW1haWQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaW5kdXN0cmlhbC1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaW5kdXN0cmlhbCBjaXZpbGl6YXRpb25cIjpcImFcIixcImluZHVzdHJpYWwgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5kdXN0cmlhbCBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJsYWR5LWRvY3RvclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZG9jdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxhZHkgZG9jdG9yXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibGVhZGluZy1sYWR5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntsZWFkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxlYWRpbmcgbGFkeVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dmlyZ2luOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWlkZW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFpZGVuLXJhY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QgcmFjZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1haWRlbiByYWNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFpZGVuLXNwZWVjaFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmaXJzdCBzcGVlY2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gc3BlZWNoXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLWEtZGVza1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzdGFmZiBhIGRlc2tcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gYSBkZXNrXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLWluLXRoZS1zdHJlZXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wib3JkaW5hcnkgY2l0aXplblwiOlwiYVwiLFwidHlwaWNhbCBwZXJzb25cIjpcImFcIixcImF2ZXJhZ2UgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIGluIHRoZSBzdHJlZXRcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tb2YtdGhlLWxhbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Zhcm1lcjpcImFcIixcInJ1cmFsIHdvcmtlclwiOlwiYVwiLGdyYXppZXI6XCJhXCIsbGFuZG93bmVyOlwiYVwiLFwicnVyYWwgY29tbXVuaXR5XCI6XCJhXCIsXCJjb3VudHJ5IHBlb3BsZVwiOlwiYVwiLFwiY291bnRyeSBmb2xrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIHRoZSBsYW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFucy1iZXN0LWZyaWVuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIGZhaXRoZnVsIGRvZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbnMgYmVzdCBmcmllbmRcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tdGhlLWJvb3RoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIHRoZSBib290aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiB0aGUgYm9vdGhcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYW4tdGhlLXBob25lc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhbnN3ZXIgdGhlIHBob25lc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiB0aGUgcGhvbmVzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuc2l6ZWQtdGFza1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIGRlbWFuZGluZyB0YXNrXCI6XCJhXCIsXCJhIGJpZyBqb2JcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW5zaXplZCB0YXNrXCI6XCJhXCIsXCJtYW4gc2l6ZWQgdGFza1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hc3Rlci1rZXlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGFzcyBrZXlcIjpcImFcIixvcmlnaW5hbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYXN0ZXIga2V5XCI6XCJhXCIsXCJtYXN0ZXIgY29weVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hc3Rlci1wbGFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdyYW5kIHNjaGVtZVwiOlwiYVwiLFwiZ3VpZGluZyBwcmluY2lwbGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIHBsYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXItdGhlLWFydFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiZWNvbWUgc2tpbGxlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciB0aGUgYXJ0XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWVuLW9mLXNjaWVuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NjaWVudGlzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWVuIG9mIHNjaWVuY2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtaWR3aWZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJpcnRoaW5nIG51cnNlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pZHdpZmU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibW9kZXJuLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJtb2Rlcm4gY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJtb2Rlcm4gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibW9kZXJuIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm5vLW1hbnMtbGFuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ1bm9jY3VwaWVkIHRlcnJpdG9yeVwiOlwiYVwiLHdhc3RlbGFuZDpcImFcIixkZWF0aHRyYXA6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibm8gbWFucyBsYW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwib2ZmaWNlLWdpcmxzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFkbWluaXN0cmF0aXZlIHN0YWZmXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wib2ZmaWNlIGdpcmxzXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwicG9ldGVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cG9ldDpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9ldGVzczpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJyYWlsd2F5bWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInJhaWx3YXkgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JhaWx3YXltYW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwic3BvcnRzbWFubGlrZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFpcjpcImFcIixzcG9ydGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzbWFubGlrZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzcG9ydHNtYW5zaGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYWlybmVzczpcImFcIixcImdvb2QgaHVtb3JcIjpcImFcIixcInNlbnNlIG9mIGZhaXIgcGxheVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcG9ydHNtYW5zaGlwOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInN0YXRlc21hbmxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RpcGxvbWF0aWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0YXRlc21hbmxpa2U6XCJhXCIsXCJzdGF0ZXNtYW4gbGlrZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInN0b2NrbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSB3b3JrZXJcIjpcImFcIixmYXJtaGFuZDpcImFcIixkcm92ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0b2NrbWFuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInRyYWRlc21hbnMtZW50cmFuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic2VydmljZSBlbnRyYW5jZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRyYWRlc21hbnMgZW50cmFuY2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ0YXgtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRheCBjb21taXNzaW9uZXJcIjpcImFcIixcInRheCBvZmZpY2VcIjpcImFcIixcInRheCBjb2xsZWN0b3JcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ0YXggbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwidXNoZXJldHRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt1c2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dXNoZXJldHRlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvbWFuLWxhd3llclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bGF3eWVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvbWFuIGxhd3llclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvbWFuLXBhaW50ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BhaW50ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wid29tYW4gcGFpbnRlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIndvcmtpbmctd2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ3YWdlIG9yIHNhbGFyeSBlYXJuaW5nIHdvbWFuXCI6XCJhXCIsXCJ0d28taW5jb21lIGZhbWlseVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvcmtpbmcgbW90aGVyXCI6XCJhXCIsXCJ3b3JraW5nIHdpZmVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJob21vc2V4dWFsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntnYXk6XCJhXCIsXCJnYXkgbWFuXCI6XCJhXCIsbGVzYmlhbjpcImFcIixcImdheSBwZXJzb24vcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvbW9zZXh1YWw6XCJhXCJ9LG5vdGU6XCJUaGlzIHRlcm0gaGFzIGEgY2xpbmljYWwgaGlzdG9yeSBhbmQgaXMgdXNlZCB0byBpbXBseSBMR0JUUSsgcGVvcGxlIGFyZSBkaXNlYXNlZCBvciBwc3ljaG9sb2dpY2FsbHkvZW1vdGlvbmFsbHkgZGlzb3JkZXJlZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiaG9tb3NleHVhbC1yZWxhdGlvbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3JlbGF0aW9uc2hpcDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIHJlbGF0aW9uc1wiOlwiYVwiLFwiaG9tb3NleHVhbCByZWxhdGlvbnNoaXBcIjpcImFcIn0sbm90ZTpcIkF2b2lkIGxhYmVsaW5nIHNvbWV0aGluZyBhcyBMR0JUUSsgdW5sZXNzIHlvdSB3b3VsZCBjYWxsIHRoZSBzYW1lIHRoaW5nIOKAnHN0cmFpZ2h04oCdIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJob21vc2V4dWFsLWNvdXBsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y291cGxlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImhvbW9zZXh1YWwgY291cGxlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBsYWJlbGluZyBzb21ldGhpbmcgYXMgTEdCVFErIHVubGVzcyB5b3Ugd291bGQgY2FsbCB0aGUgc2FtZSB0aGluZyDigJxzdHJhaWdodOKAnSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwic2V4dWFsLXByZWZlcmVuY2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic2V4dWFsIG9yaWVudGF0aW9uXCI6XCJhXCIsb3JpZW50YXRpb246XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2V4dWFsIHByZWZlcmVuY2VcIjpcImFcIn0sbm90ZTpcIkltcGxpZXMgdGhhdCBiZWluZyBMR0JUUSsgaXMgYSBjaG9pY2UgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImdheS1saWZlc3R5bGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ2F5IGxpdmVzXCI6XCJhXCIsXCJnYXkvbGVzYmlhbiBsaXZlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImdheSBsaWZlc3R5bGVcIjpcImFcIixcImhvbW9zZXh1YWwgbGlmZXN0eWxlXCI6XCJhXCJ9LG5vdGU6XCJJbXBsaWVzIHRoYXQgYmVpbmcgTEdCVFErIGlzIGEgY2hvaWNlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJnYXktYWdlbmRhXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBpc3N1ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJnYXkgYWdlbmRhXCI6XCJhXCIsXCJob21vc2V4dWFsIGFnZW5kYVwiOlwiYVwifSxub3RlOlwiVXNlZCBieSBhbnRpLUxHQlRRKyBleHRyZW1pc3RzIHRvIGNyZWF0ZSBhIGNsaW1hdGUgb2YgZmVhciBhcm91bmQgTEdCVFErIGlzc3VlcyAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiZ2F5LXJpZ2h0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlcXVhbCByaWdodHNcIjpcImFcIixcImNpdmlsIHJpZ2h0cyBmb3IgZ2F5IHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNwZWNpYWwgcmlnaHRzXCI6XCJhXCIsXCJnYXkgcmlnaHRzXCI6XCJhXCJ9LG5vdGU6XCJMR0JUUSsgcmlnaHRzIGFyZSBodW1hbiByaWdodHMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwiZmFnXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntnYXk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZhZzpcImFcIixmYWdnb3Q6XCJhXCIsZHlrZTpcImFcIixob21vOlwiYVwiLHNvZG9taXRlOlwiYVwifSxub3RlOlwiRGVyb2dhdG9yeSB0ZXJtcyBmb3IgTEdCVFErIHBlb3BsZSBhcmUgb2ZmZW5zaXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJiaVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YmlzZXh1YWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgc2xhbmcgc2hvcnRoYW5kIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcImhvbW9zZXh1YWwtbWFycmlhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ2F5IG1hcnJpYWdlXCI6XCJhXCIsXCJzYW1lLXNleCBtYXJyaWFnZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImhvbW9zZXh1YWwgbWFycmlhZ2VcIjpcImFcIn0sbm90ZTpcIkhvbW9zZXh1YWwgaGFzIGEgY2xpbmljYWwgaGlzdG9yeSBhbmQgaXMgdXNlZCB0byBpbXBseSBMR0JUUSsgcGVvcGxlIGFyZSBkaXNlYXNlZCBvciBwc3ljaG9sb2dpY2FsbHkvZW1vdGlvbmFsbHkgZGlzb3JkZXJlZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3N0eWxlKVwifSx7aWQ6XCJ0cmFubnlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFubnk6XCJhXCJ9LG5vdGU6XCJEZXJvZ2F0b3J5IHRlcm1zIGZvciBMR0JUUSsgcGVvcGxlIGFyZSBvZmZlbnNpdmUgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwidHJhbnN2ZXN0aXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNyb3NzLWRyZXNzZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbnN2ZXN0aXRlOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgb3V0ZGF0ZWQgLyBvZmZlbnNpdmUgdGVybXMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwic2V4Y2hhbmdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2l0aW9uOlwiYVwiLFwiZ2VuZGVyIGNvbmZpcm1hdGlvbiBzdXJnZXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NleGNoYW5nZTpcImFcIixcInNleCBjaGFuZ2VcIjpcImFcIn0sbm90ZTpcIkF2b2lkIG92ZXJlbXBoYXNpemluZyBzdXJnZXJ5IHdoZW4gZGlzY3Vzc2luZyB0cmFuc2dlbmRlciBwZW9wbGUgb3IgdGhlIHByb2Nlc3Mgb2YgdHJhbnNpdGlvbiAtIGl04oCZcyBub3QgYSBuZWNlc3NhcnkgY29tcG9uZW50IChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInNleC1jaGFuZ2Utb3BlcmF0aW9uXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNleCByZWFzc2lnbm1lbnQgc3VyZ2VyeVwiOlwiYVwiLFwiZ2VuZGVyIGNvbmZpcm1hdGlvbiBzdXJnZXJ5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2V4IGNoYW5nZSBvcGVyYXRpb25cIjpcImFcIn0sbm90ZTpcIlNoaWZ0IGZvY3VzIGF3YXkgZnJvbSB0aGUgYXNzaWduZWQgc2V4IGFuZCB0b3dhcmRzIHRoZSBpZGVudGlmaWVkIGdlbmRlciAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHJhbnNnZW5kZXIgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyczpcImFcIn0sbm90ZTpcIlRyYW5zZ2VuZGVyIHNob3VsZCBiZSB1c2VkIGFzIGFuIGFkamVjdGl2ZSwgbm90IGFzIGEgbm91biAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbnNnZW5kZXJlZDpcImFcIn0sbm90ZTpcIlRyYW5zZ2VuZGVyIGlzIGFscmVhZHkgYW4gYWRqZWN0aXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInRyYW5zZ2VuZGVyaXNtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJlaW5nIHRyYW5zZ2VuZGVyXCI6XCJhXCIsXCJ0aGUgbW92ZW1lbnQgZm9yIHRyYW5zZ2VuZGVyIGVxdWFsaXR5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyaXNtOlwiYVwifSxub3RlOlwiVGhpcyBpcyBhIHRlcm0gdXNlZCBieSBhbnRpLXRyYW5zZ2VuZGVyIGFjdGl2aXN0cyB0byBkZWh1bWFuaXplIHRyYW5zZ2VuZGVyIHBlb3BsZSBhbmQgcmVkdWNlIHdobyB0aGV5IGFyZSB0byBhIGNvbmRpdGlvbiAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJib3JuLWEtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFzc2lnbmVkIG1hbGUgYXQgYmlydGhcIjpcImFcIixcImRlc2lnbmF0ZWQgbWFsZSBhdCBiaXJ0aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJpb2xvZ2ljYWxseSBtYWxlXCI6XCJhXCIsXCJib3JuIGEgbWFuXCI6XCJhXCIsXCJnZW5ldGljYWxseSBtYWxlXCI6XCJhXCJ9LG5vdGU6XCJBc3NpZ25lZCBiaXJ0aCBnZW5kZXIgaXMgY29tcGxpY2F0ZWQ7IGdlbmRlciBpZGVudGl0eSBpcyBtb3JlIHRoYW4gd2hhdCB5b3VyIHBhcmVudHMgZGVjaWRlZCB5b3Ugd2VyZSBhdCBiaXJ0aFwifSx7aWQ6XCJib3JuLWEtd29tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXNzaWduZWQgZmVtYWxlIGF0IGJpcnRoXCI6XCJhXCIsXCJkZXNpZ25hdGVkIGZlbWFsZSBhdCBiaXJ0aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJpb2xvZ2ljYWxseSBmZW1hbGVcIjpcImFcIixcImJvcm4gYSB3b21hblwiOlwiYVwiLFwiZ2VuZXRpY2FsbHkgZmVtYWxlXCI6XCJhXCJ9LG5vdGU6XCJBc3NpZ25lZCBiaXJ0aCBnZW5kZXIgaXMgY29tcGxpY2F0ZWQ7IGdlbmRlciBpZGVudGl0eSBpcyBtb3JlIHRoYW4gd2hhdCB5b3VyIHBhcmVudHMgZGVjaWRlZCB5b3Ugd2VyZSBhdCBiaXJ0aFwifSx7aWQ6XCJiYXRocm9vbS1iaWxsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm5vbi1kaXNjcmltaW5hdGlvbiBsYXdcIjpcImFcIixcIm5vbi1kaXNjcmltaW5hdGlvbiBvcmRpbmFuY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiYXRocm9vbSBiaWxsXCI6XCJhXCJ9LG5vdGU6XCJBIHRlcm0gY3JlYXRlZCBhbmQgdXNlZCBieSBmYXItcmlnaHQgZXh0cmVtaXN0cyB0byBvcHBvc2Ugbm9uZGlzY3JpbWluYXRpb24gbGF3cyB0aGF0IHByb3RlY3QgdHJhbnNnZW5kZXIgcGVvcGxlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcImhlcm1hcGhyb2RpdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbnRlcnNleDpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVybWFwaHJvZGl0aWM6XCJhXCIscHNldWRvaGVybWFwaHJvZGl0aWM6XCJhXCIsXCJwc2V1ZG8gaGVybWFwaHJvZGl0aWNcIjpcImFcIn0sbm90ZTpcIlRoZXNlIHRlcm1zIGFyZSBzdGlnbWF0aXppbmcgdG8gcGF0aWVudHMgYW5kIHRoZWlyIGZhbWlsaWVzIGJlY2F1c2UgaW50ZXJzZXggc3RhdHVzIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgbWVyZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGNlcnRhaW4gZ29uYWRhbCB0aXNzdWVzIChzb3VyY2U6IGh0dHA6Ly93d3cuaXNuYS5vcmcvbm9kZS85NzkpXCJ9LHtpZDpcImhlcm1hcGhyb2RpdGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBpcyBpbnRlcnNleFwiOlwiYVwiLHBlcnNvbjpcImFcIixcImludGVyc2V4IHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoZXJtYXBocm9kaXRlOlwiYVwiLHBzZXVkb2hlcm1hcGhyb2RpdGU6XCJhXCIsXCJwc2V1ZG8gaGVybWFwaHJvZGl0ZVwiOlwiYVwifSxub3RlOlwiVGhlc2UgdGVybXMgYXJlIHN0aWdtYXRpemluZyB0byBwYXRpZW50cyBhbmQgdGhlaXIgZmFtaWxpZXMgYmVjYXVzZSBpbnRlcnNleCBzdGF0dXMgaXMgbW9yZSBjb21wbGljYXRlZCB0aGFuIHRoZSBtZXJlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgY2VydGFpbiBnb25hZGFsIHRpc3N1ZXMgKHNvdXJjZTogaHR0cDovL3d3dy5pc25hLm9yZy9ub2RlLzk3OSlcIn0se2lkOlwiaGVzaGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHJhbnNnZW5kZXIgcGVyc29uXCI6XCJhXCIscGVyc29uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaGVtYWxlOlwiYVwiLFwic2hlIG1hbGVcIjpcImFcIixoZXNoZTpcImFcIixzaGVoZTpcImFcIn0sbm90ZTpcIlRoaXMgd29yZCBkZWh1bWFuaXplcyB0cmFuc2dlbmRlciBwZW9wbGUgKHNvdXJjZTogaHR0cHM6Ly93d3cucmVkZGl0LmNvbS9yL2Fza3RyYW5zZ2VuZGVyL2NvbW1lbnRzLzIzd2JxMS9pc190aGVfdGVybV9zaGVtYWxlX3NlZW5fYXNfb2ZmZW5zaXZlLylcIn0se2lkOlwiZ2VuZGVyLXByb25vdW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Byb25vdW46XCJhXCIscHJvbm91bnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicHJlZmVycmVkIHByb25vdW5cIjpcImFcIixcInByZWZlcnJlZCBwcm9ub3Vuc1wiOlwiYVwiLFwiZ2VuZGVyIHByb25vdW5cIjpcImFcIixcImdlbmRlciBwcm9ub3Vuc1wiOlwiYVwifSxub3RlOlwiUHJlZmVycmVkIHByb25vdW4gc291bmRzIGxpa2UgaXQgaXMgb3B0aW9uYWwgdG8gdXNlIHNvbWVvbmUncyBjb3JyZWN0IHByb25vdW4gKHNvdXJjZTogaHR0cHM6Ly93d3cuc2VsZmRlZmluZWQuYXBwL2RlZmluaXRpb25zL3Byb25vdW5zLylcIn0se2lkOlwiaXNsYW1pc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e211c2xpbTpcImFcIixcInBlcnNvbiBvZiBJc2xhbWljIGZhaXRoXCI6XCJhXCIsZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsXCJmb2xsb3dlciBvZiBpc2xhbVwiOlwiYVwiLFwiZm9sbG93ZXIgb2YgdGhlIGlzbGFtaWMgZmFpdGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aXNsYW1pc3Q6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LnVzbmV3cy5jb20vbmV3cy9uZXdzZ3JhbS9hcnRpY2xlcy8yMDEzLzA0LzA0L3RoZS1hc3NvY2lhdGVkLXByZXNzLXJldmlzZXMtaXNsYW1pc3QtYW5vdGhlci1wb2xpdGljYWxseS1jaGFyZ2VkLXRlcm1cIn0se2lkOlwiaXNsYW1pc3RzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttdXNsaW1zOlwiYVwiLFwicGVvcGxlIG9mIElzbGFtaWMgZmFpdGhcIjpcImFcIixmYW5hdGljczpcImFcIix6ZWFsb3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntpc2xhbWlzdHM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LnVzbmV3cy5jb20vbmV3cy9uZXdzZ3JhbS9hcnRpY2xlcy8yMDEzLzA0LzA0L3RoZS1hc3NvY2lhdGVkLXByZXNzLXJldmlzZXMtaXNsYW1pc3QtYW5vdGhlci1wb2xpdGljYWxseS1jaGFyZ2VkLXRlcm1cIn0se2lkOlwibWFzdGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcmltYXJ5OlwiYVwiLGxlYWQ6XCJhXCIsaHViOlwiYVwiLHJlZmVyZW5jZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVyOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYG1hc3RlcmA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcIm1hc3RlcnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3ByaW1hcmllczpcImFcIixodWJzOlwiYVwiLHJlZmVyZW5jZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcnM6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0aGUgdGVybSBgbWFzdGVyYDsgdGhlc2Ugc3VnZ2VzdGlvbnMgYXJlIGZvciB0aGUgY29tcHV0ZXIgdGVybSwgYnV0IHRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciBjYXNlcyB0b29cIn0se2lkOlwic2xhdmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NlY29uZGFyeTpcImFcIix3b3JrZXI6XCJhXCIscmVwbGljYTpcImFcIixub2RlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzbGF2ZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBzbGF2ZWA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcInNsYXZlc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2Vjb25kYXJpZXM6XCJhXCIsd29ya2VyczpcImFcIixyZXBsaWNhczpcImFcIixub2RlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2xhdmVzOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYHNsYXZlYDsgdGhlc2Ugc3VnZ2VzdGlvbnMgYXJlIGZvciB0aGUgY29tcHV0ZXIgdGVybSwgYnV0IHRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciBjYXNlcyB0b29cIn0se2lkOlwiYmxhY2toYXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widW5ldGhpY2FsIGhhY2tlclwiOlwiYVwiLFwibWFsaWNpb3VzIGFjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNraGF0OlwiYVwifX0se2lkOlwid2hpdGVoYXRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZXRoaWNhbCBoYWNrZXJcIjpcImFcIixcInNlY3VyaXR5IHJlc2VhcmNoZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVoYXQ6XCJhXCJ9fSx7aWQ6XCJlc2tpbW9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0ludWl0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntlc2tpbW86XCJhXCJ9fSx7aWQ6XCJlc2tpbW9zXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntJbnVpdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Vza2ltb3M6XCJhXCJ9fSx7aWQ6XCJvcmllbnRhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJBc2lhbiBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7b3JpZW50YWw6XCJhXCJ9fSx7aWQ6XCJvcmllbnRhbHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiQXNpYW4gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29yaWVudGFsczpcImFcIn19LHtpZDpcIm5vbndoaXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiBvZiBjb2xvclwiOlwiYVwiLFwicGVvcGxlIG9mIGNvbG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25vbndoaXRlOlwiYVwiLFwibm9uIHdoaXRlXCI6XCJhXCJ9fSx7aWQ6XCJnaGV0dG9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Byb2plY3RzOlwiYVwiLHVyYmFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnaGV0dG86XCJhXCJ9fSx7aWQ6XCJyZWRza2luXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIk5hdGl2ZSBBbWVyaWNhblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInJlZCBpbmRpYW5cIjpcImFcIixwb2NhaG9udGFzOlwiYVwiLHJlZHNraW46XCJhXCJ9fSx7aWQ6XCJyZWRza2luc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJOYXRpdmUgQW1lcmljYW4gUGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicmVkIGluZGlhbnNcIjpcImFcIixyZWRza2luczpcImFcIn19LHtpZDpcInRvdGVtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYXZvcml0ZTpcImFcIixpbnNwaXJhdGlvbjpcImFcIixcInBlcnNvbmFsIGludGVyZXN0XCI6XCJhXCIsXCJwZXJzb25hbGl0eSB0eXBlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYW5pbWFsIHNwaXJpdFwiOlwiYVwiLFwiZHJlYW0gY2F0Y2hlclwiOlwiYVwiLFwic3Bpcml0IGFuaW1hbFwiOlwiYVwiLHRvdGVtOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBvdmVyc2ltcGxpZnkgdGhlIGNvbXBsZXggYW5kIHZhcmllZCBiZWxpZWZzIG9mIGluZGlnZW5vdXMgcmVsaWdpb25zLiAoc291cmNlOiBodHRwczovL3d3dy53b3JsZHJlbGlnaW9ubmV3cy5jb20vb3Bpbmlvbi9zcGlyaXQtYW5pbWFsLW5vdC1qb2tlLW9wcHJlc3Npb24saHR0cHM6Ly93d3cuc3BpcmFsbmF0dXJlLmNvbS9zcGlyaXR1YWxpdHkvc3Bpcml0LWFuaW1hbC1jdWx0dXJhbC1hcHByb3ByaWF0aW9uKVwifSx7aWQ6XCJsb25nLXRpbWUtbm8tc2VlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkkgaGF2ZW7igJl0IHNlZW4geW91IGluIGEgbG9uZyB0aW1lXCI6XCJhXCIsXCJpdOKAmXMgYmVlbiBhIGxvbmcgdGltZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxvbmcgdGltZSBubyBoZWFyXCI6XCJhXCIsXCJsb25nIHRpbWUgbm8gc2VlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHRoYXQgaW1wbGljaXRseSBtb2NrIHBlb3BsZSB3aXRoIGxpbWl0ZWQga25vd2xlZGdlIG9mIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiAoc291cmNlOiBodHRwczovL3d3dy5ucHIub3JnL3NlY3Rpb25zL2NvZGVzd2l0Y2gvMjAxNC8wMy8wOS8yODgzMDAzMDMvd2hvLWZpcnN0LXNhaWQtbG9uZy10aW1lLW5vLXNlZS1hbmQtaW4td2hpY2gtbGFuZ3VhZ2UpXCJ9LHtpZDpcImluZGlhbi1jb3VudHJ5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImVuZW15IHRlcnJpdG9yeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIkluZGlhbiBjb3VudHJ5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byB0aGUgZ2Vub2NpZGFsIFVuaXRlZCBTdGF0ZXMg4oCcSW5kaWFuIFJlbW92YWzigJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9uZXdzbWF2ZW4uaW8vaW5kaWFuY291bnRyeXRvZGF5L2FyY2hpdmUvb2ZmLXRoZS1yZXNlcnZhdGlvbi1hLXRlYWNoYWJsZS1tb21lbnQtblcxZDdVMEpSa09zemh0ZzhOMVYxQS8pXCJ9LHtpZDpcIm9mZi1yZXNlcnZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXNvYmV5OlwiYVwiLGVuZHVyZTpcImFcIixcIm9iamVjdCB0b1wiOlwiYVwiLG9wcG9zZTpcImFcIixyZXNpc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wianVtcCB0aGUgcmVzZXJ2YXRpb25cIjpcImFcIixcIm9mZiByZXNlcnZlXCI6XCJhXCIsXCJvZmYgdGhlIHJlc2VydmF0aW9uXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byB0aGUgZ2Vub2NpZGFsIFVuaXRlZCBTdGF0ZXMg4oCcSW5kaWFuIFJlbW92YWzigJ0gbGF3cy4gKHNvdXJjZTogaHR0cDovL2Jsb2cubmF0aXZlcGFydG5lcnNoaXAub3JnL29mZi10aGUtcmVzZXJ2YXRpb24vLGh0dHBzOi8vd3d3Lndzai5jb20vYXJ0aWNsZXMvb2ZmLXRoZS1yZXNlcnZhdGlvbi1pcy1hLXBocmFzZS13aXRoLWEtZGFyay1wYXN0LTE0NjI1NTI4MzcsaHR0cHM6Ly93d3cubnByLm9yZy9zZWN0aW9ucy9jb2Rlc3dpdGNoLzIwMTQvMDYvMjkvMzI2NjkwOTQ3L3Nob3VsZC1zYXlpbmctc29tZW9uZS1pcy1vZmYtdGhlLXJlc2VydmF0aW9uLWJlLW9mZi1saW1pdHMsaHR0cHM6Ly9ub3d0b3JvbnRvLmNvbS9uZXdzL25hdGl2ZS1yZWZlcmVuY2VzLWFuZC10ZXJtcy10aGF0LWFyZS1vZmZlbnNpdmUtdG8taW5kaWdlbm91cy1wZW9wbGUvKVwifSx7aWQ6XCJvbi10aGUtd2FycGF0aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVmZW5kOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNpcmNsZSB0aGUgd2Fnb25zXCI6XCJhXCIsXCJvbiB0aGUgd2FycGF0aFwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuIChzb3VyY2U6IGh0dHBzOi8vaWRpb21zLnRoZWZyZWVkaWN0aW9uYXJ5LmNvbS9jaXJjbGUrdGhlK3dhZ29ucyxodHRwczovL2lkaW9tcy50aGVmcmVlZGljdGlvbmFyeS5jb20vZ28rb24rdGhlK3dhcnBhdGgpXCJ9LHtpZDpcInRvby1tYW55LWNoaWVmc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0b28gbWFueSBjaGVmcyBpbiB0aGUga2l0Y2hlblwiOlwiYVwiLFwidG9vIG1hbnkgY29va3Mgc3BvaWwgdGhlIGJyb3RoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widG9vIG1hbnkgY2hpZWZzXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byBjb2xvbmlhbCBzdGVyZW90eXBlcyByZWdhcmRpbmcgTmF0aXZlIEFtZXJpY2Fucy4gKHNvdXJjZTogaHR0cHM6Ly9pZGlvbXMudGhlZnJlZWRpY3Rpb25hcnkuY29tL3RvbyttYW55K2NoaWVmcythbmQrbm90K2Vub3VnaCtJbmRpYW5zKVwifSx7aWQ6XCJuYXRpdmVzLWFyZS1yZXN0bGVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzc2F0aXNmaWVkOlwiYVwiLGZydXN0cmF0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibmF0aXZlcyBhcmUgcmVzdGxlc3NcIjpcImFcIixcIm5hdGl2ZXMgYXJlIGJlY29taW5nIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBnZXR0aW5nIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBncm93aW5nIHJlc3RsZXNzXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byBjb2xvbmlhbCBzdGVyZW90eXBlcyByZWdhcmRpbmcgaW5kaWdlbm91cyBwZW9wbGVzLiAoc291cmNlOiBodHRwczovL3R2dHJvcGVzLm9yZy9wbXdpa2kvcG13aWtpLnBocC9NYWluL1RoZU5hdGl2ZXNBcmVSZXN0bGVzcylcIn0se2lkOlwicG93d293XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntjb25mZXJlbmNlOlwiYVwiLGdhdGhlcmluZzpcImFcIixtZWV0aW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInBvdyB3b3dcIjpcImFcIixwb3d3b3c6XCJhXCJ9LG5vdGU6XCJBdm9pZCBjYXN1YWxseSB1c2luZyB0aGlzIHRlcm0sIHdoaWNoIHJlZmVycyB0byB0cmFkaXRpb25hbCBpbmRpZ2Vub3VzIGNlbGVicmF0aW9uIGNlcmVtb25pZXMgdGhhdCB3ZXJlIGJhbm5lZCBieSBnZW5vY2lkYWwgbGF3cyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgQ2FuYWRhIOKAlCBOYXRpdmUgcGVvcGxlIGRpZWQgZmlnaHRpbmcgZm9yIHRoaXMgcmlnaHQuIChzb3VyY2U6IGh0dHBzOi8vdHdpdHRlci5jb20vY2hhZGxvZGVyL3N0YXR1cy8xMjAzNTA3MDcwNzcyNzkzMzQ1LGh0dHA6Ly9uYXRpdmVhcHByb3ByaWF0aW9ucy5jb20vMjAxMi8wOS9wYXVsLWZyYW5rLW9mZmVuZHMtZXZlcnktbmF0aXZlLXBlcnNvbi1vbi10aGUtcGxhbmV0LXdpdGgtZmFzaGlvbi1uaWdodC1vdXQtZHJlYW0tY2F0Y2hpbi1wb3ctd293Lmh0bWwsaHR0cHM6Ly93d3cuYnJpdGFubmljYS5jb20vdG9waWMvcG93d293LGh0dHBzOi8vbm93dG9yb250by5jb20vbmV3cy9uYXRpdmUtcmVmZXJlbmNlcy1hbmQtdGVybXMtdGhhdC1hcmUtb2ZmZW5zaXZlLXRvLWluZGlnZW5vdXMtcGVvcGxlLylcIn0se2lkOlwiaW5kaWFuLWdpdmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZ28gYmFjayBvbiBvbmXigJlzIG9mZmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5kaWFuIGdpdmVcIjpcImFcIixcImluZGlhbiBnaXZlclwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuXCJ9LHtpZDpcInBpbm95c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7RmlsaXBpbm9zOlwiYVwiLFwiRmlsaXBpbm8gcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Bpbm95czpcImFcIixwaW5heXM6XCJhXCJ9fSx7aWQ6XCJ0b3dlbC1oZWFkc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7QXJhYnM6XCJhXCIsXCJNaWRkbGUgRWFzdGVybiBQZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzYW5kIG5pZ2dlcnNcIjpcImFcIixcInRvd2VsIGhlYWRzXCI6XCJhXCJ9fSx7aWQ6XCJsYXRpbm9cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0xhdGlueDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGF0aW5vOlwiYVwiLGxhdGluYTpcImFcIn0sbm90ZTpcIldoZW5ldmVyIHBvc3NpYmxlLCB0cnkgdG8gYmUgZ2VuZGVyIGluY2x1c2l2ZS5cIn0se2lkOlwiamFwc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJKYXBhbmVzZSBwZXJzb25cIjpcImFcIixcIkphcGFuZXNlIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqYXBzOlwiYVwifX0se2lkOlwiaHltaWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiSmV3aXNoIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaGxvbW86XCJhXCIsc2h5c3RlcjpcImFcIixoeW1pZTpcImFcIn19LHtpZDpcImdveVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIHBlcnNvbiB3aG8gaXMgbm90IEpld2lzaFwiOlwiYVwiLFwibm90IEpld2lzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnb3lpbTpcImFcIixnb3l1bTpcImFcIixnb3k6XCJhXCJ9fSx7aWQ6XCJzcGFkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIEJsYWNrIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFkZTpcImFcIn19LHtpZDpcImd5cFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Tm9tYWQ6XCJhXCIsVHJhdmVsZXI6XCJhXCIsUm9tYTpcImFcIixSb21hbmk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2d5cHBvOlwiYVwiLGd5cHN5OlwiYVwiLEdpcHN5OlwiYVwiLGd5cDpcImFcIn0sbm90ZTpcIkd5cHN5IGlzIGluc2Vuc2l0aXZlLCB1c2UgUm9tYSBvciBSb21hbmkuIFRoZXnigJlyZSBub3QgRWd5cHRpYW4gYXMgdGhlIG5hbWUgc3VnZ2VzdHMuIChzb3VyY2U6IGVuLndpa2lwZWRpYS5vcmcvd2lraS9Sb21hbmlfcGVvcGxlI2NpdGVfcmVmLTgwKVwifSx7aWQ6XCJibGFja2xpc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdDpcImFcIix3cm9uZ2xpc3Q6XCJhXCIsYmFubGlzdDpcImFcIixcImRlbnkgbGlzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3Q6XCJhXCIsXCJibGFjayBsaXN0XCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwiYmxhY2tsaXN0ZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdGVkOlwiYVwiLHdyb25nbGlzdGVkOlwiYVwiLGJhbmxpc3RlZDpcImFcIixcImRlbnktbGlzdGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNrbGlzdGVkOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcImJsYWNrbGlzdGluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YmxvY2tsaXN0aW5nOlwiYVwiLHdyb25nbGlzdGluZzpcImFcIixiYW5saXN0aW5nOlwiYVwiLFwiZGVueS1saXN0aW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JsYWNrbGlzdGluZzpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZWxpc3RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0OlwiYVwiLGFscmlnaHRsaXN0OlwiYVwiLHNhZmVsaXN0OlwiYVwiLFwiYWxsb3cgbGlzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3Q6XCJhXCIsXCJ3aGl0ZSBsaXN0XCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVsaXN0ZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0ZWQ6XCJhXCIsYWxyaWdodGxpc3RlZDpcImFcIixzYWZlbGlzdGVkOlwiYVwiLFwiYWxsb3ctbGlzdGVkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlbGlzdGVkOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlbGlzdGluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cGFzc2xpc3Rpbmc6XCJhXCIsYWxyaWdodGxpc3Rpbmc6XCJhXCIsc2FmZWxpc3Rpbmc6XCJhXCIsXCJhbGxvdy1saXN0aW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlbGlzdGluZzpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZXNwYWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzcGFjZTpcImFcIixibGFuazpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVzcGFjZTpcImFcIixcIndoaXRlIHNwYWNlXCI6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVzcGFjZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NwYWNlOlwiYVwiLGJsYW5rOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZXNwYWNlczpcImFcIixcIndoaXRlIHNwYWNlc1wiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcInNhdmFnZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2ltcGxlOlwiYVwiLGluZGlnZW5vdXM6XCJhXCIsXCJodW50ZXItZ2F0aGVyZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHJpbWl0aXZlOlwiYVwiLHNhdmFnZTpcImFcIixcInN0b25lIGFnZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBpbXBseSBhIGdyb3VwIGhhcyBub3QgY2hhbmdlZCBvdmVyIHRpbWUgYW5kIHRoYXQgdGhleSBhcmUgaW5mZXJpb3JcIn0se2lkOlwidHJpYmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NvY2lldHk6XCJhXCIsY29tbXVuaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmliZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgbWFrZSBzb21lIGdyb3VwcyBzb3VuZCBpbmZlcmlvclwifSx7aWQ6XCJzb3BoaXN0aWNhdGVkLWN1bHR1cmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY29tcGxleCBjdWx0dXJlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic29waGlzdGljYXRlZCBjdWx0dXJlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3IuIFJlcGxhY2Ug4oCcc29waGlzdGljYXRlZOKAnSB3aXRoIGEgbmV1dHJhbCB0ZXJtIHN1Y2ggYXMg4oCcY29tcGxleOKAnVwifSx7aWQ6XCJzb3BoaXN0aWNhdGVkLXRlY2hub2xvZ3lcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiY29tcGxleCB0ZWNobm9sb2d5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic29waGlzdGljYXRlZCB0ZWNobm9sb2d5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3IuIFJlcGxhY2Ug4oCcc29waGlzdGljYXRlZOKAnSB3aXRoIGEgbmV1dHJhbCB0ZXJtIHN1Y2ggYXMg4oCcY29tcGxleOKAnVwifSx7aWQ6XCJidWdyZXBvcnRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYnVnIHJlcG9ydFwiOlwiYVwiLHNuYXBzaG90OlwiYVwifSxpbmNvbnNpZGVyYXRlOntidWdyZXBvcnQ6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBgYnVncmVwb3J0YCwgYXMgdGhlIHdvcmQgYGJ1Z3JlYCBpcyBhIHNsdXIgaW4gQnJhemlsaWFuIFBvcnR1Z3Vlc2VcIn0se2lkOlwiZ3JhbmRmYXRoZXItY2xhdXNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImxlZ2FjeSBwb2xpY3lcIjpcImFcIixcImxlZ2FjeSBjbGF1c2VcIjpcImFcIixcImRlcHJlY2F0aW9uIHBvbGljeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImdyYW5kZmF0aGVyIGNsYXVzZVwiOlwiYVwiLFwiZ3JhbmRmYXRoZXIgcG9saWN5XCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byByYWNpc3QgVW5pdGVkIFN0YXRlcyDigJxKaW0gQ3Jvd+KAnSBsYXdzLiAoc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFuZGZhdGhlcl9jbGF1c2UjT3JpZ2luKVwifSx7aWQ6XCJncmFuZGZhdGhlcmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVwcmVjYXRlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGZhdGhlcmluZzpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIHJhY2lzdCBVbml0ZWQgU3RhdGVzIOKAnEppbSBDcm934oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW5kZmF0aGVyX2NsYXVzZSNPcmlnaW4pXCJ9LHtpZDpcImdyYW5kZmF0aGVyZWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlcHJlY2F0ZWQ6XCJhXCIsbGVnYWN5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGZhdGhlcmVkOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gcmFjaXN0IFVuaXRlZCBTdGF0ZXMg4oCcSmltIENyb3figJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbmRmYXRoZXJfY2xhdXNlI09yaWdpbilcIn0se2lkOlwibWFrZS0qLWdyZWF0LWFnYWluXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntpbXByb3ZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1ha2UgKiBncmVhdCBhZ2FpblwiOlwiYVwiLFwibWFrZSAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogKiBncmVhdCBhZ2FpblwiOlwiYVwiLFwibWFrZSAqICogKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIn19LHtpZDpcImNvbW1pdHRlZC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImRpZWQgYnkgc3VpY2lkZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNvbW1pdHRlZCBzdWljaWRlXCI6XCJhXCIsXCJjb21wbGV0ZWQgc3VpY2lkZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlLCBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZS9cIn0se2lkOlwiY29tbWl0LXN1aWNpZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZGllIGJ5IHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXQgc3VpY2lkZVwiOlwiYVwiLFwiY29tcGxldGUgc3VpY2lkZVwiOlwiYVwiLFwic3VjY2Vzc2Z1bCBzdWljaWRlXCI6XCJhXCJ9LG5vdGU6XCJDb21taXR0aW5nIHN1aWNpZGUgaXMgbm90IHN1Y2Nlc3NmdWwvdW5zdWNjZXNzZnVsLCB0aGF0IHNlbmRzIHRoZSB3cm9uZyBtZXNzYWdlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUsIGh0dHBzOi8vd3d3LnNwZWFraW5nb2ZzdWljaWRlLmNvbS8yMDEzLzA0LzEzL2xhbmd1YWdlLylcIn0se2lkOlwic3VpY2lkZS1wYWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInJpc2UgaW4gc3VpY2lkZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWljaWRlIGVwaWRlbWljXCI6XCJhXCIsXCJlcGlkZW1pYyBvZiBzdWljaWRlc1wiOlwiYVwiLFwic3VpY2lkZSBwYWN0XCI6XCJhXCJ9LG5vdGU6XCJVc2luZyBzZW5zYXRpb25hbCB3b3JkcyBjYW4gY2F1c2UgY29weWNhdCBzdWljaWRlcyBvciBjb250YWdpb24gKHNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSlcIn0se2lkOlwiZmFpbGVkLXN1aWNpZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3VpY2lkZSBhdHRlbXB0XCI6XCJhXCIsXCJhdHRlbXB0ZWQgc3VpY2lkZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZhaWxlZCBzdWljaWRlXCI6XCJhXCIsXCJmYWlsZWQgYXR0ZW1wdFwiOlwiYVwiLFwic3VpY2lkZSBmYWlsdXJlXCI6XCJhXCJ9LG5vdGU6XCJBdHRlbXB0ZWQgc3VpY2lkZSBzaG91bGQgbm90IGJlIGRlcGljdGVkIGFzIGEgZmFpbHVyZSAoc291cmNlOiBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZSwgaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSlcIn0se2lkOlwic3VpY2lkZS1ub3RlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImEgbm90ZSBmcm9tIHRoZSBkZWNlYXNlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1aWNpZGUgbm90ZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlXCJ9LHtpZDpcImhhbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGFwcCBmcm96ZVwiOlwiYVwiLFwidGhlIGFwcCBzdG9wcGVkIHJlc3BvbmRpbmdcIjpcImFcIixcInRoZSBhcHAgc3RvcHBlZCByZXNwb25kaW5nIHRvIGV2ZW50c1wiOlwiYVwiLFwidGhlIGFwcCBiZWNhbWUgdW5yZXNwb25zaXZlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmc6XCJhXCIsaGFuZ2VkOlwiYVwifSxub3RlOlwiV2hlbiBkZXNjcmliaW5nIHRoZSBiZWhhdmlvciBvZiBjb21wdXRlciBzb2Z0d2FyZSwgdXNpbmcgdGhlIHdvcmQg4oCcaGFuZ2Vk4oCdIG5lZWRsZXNzbHkgaW52b2tlcyB0aGUgdG9waWMgb2YgZGVhdGggYnkgc2VsZi1oYXJtIG9yIGx5bmNoaW5nLiAgQ29uc2lkZXIgdXNpbmcgdGhlIHdvcmQg4oCcZnJvemXigJ0gb3IgdGhlIHBocmFzZSDigJxzdG9wcGVkIHJlc3BvbmRpbmcgdG8gZXZlbnRz4oCdIG9yIOKAnGJlY2FtZSB1bnJlc3BvbnNpdmXigJ0gaW5zdGVhZC5cIn1dKSx5YT1nYTt2YXIgYmE9YSg0MjcpO2NvbnN0IERhPXt9Lmhhc093blByb3BlcnR5LGZhPVwicmV0ZXh0LXNwZWxsXCI7ZnVuY3Rpb24gR2Eobj17fSl7XCJmdW5jdGlvblwiPT10eXBlb2YgbiYmKG49e2RpY3Rpb25hcnk6bn0pO2NvbnN0e2RpY3Rpb25hcnk6ZSxpZ25vcmU6YSxtYXg6aSxpZ25vcmVMaXRlcmFsOnIsaWdub3JlRGlnaXRzOnQsbm9ybWFsaXplQXBvc3Ryb3BoZXM6byxwZXJzb25hbDpNfT1uLHM9W107bGV0IGw7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYE9iamVjdGAsIGdvdCBgXCIrZStcImBcIik7Y29uc3QgYz17aWdub3JlTGl0ZXJhbDpudWxsPT1yfHxyLGlnbm9yZURpZ2l0czpudWxsPT10fHx0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm51bGw9PW98fG8saWdub3JlOmF8fFtdLG1heDppfHwzMCxjb3VudDowLGNhY2hlOnt9LGNoZWNrZXI6dm9pZCAwfTtyZXR1cm4gZSgoKG4sZSk9PntsZXQgYT0tMTtmb3IobD1uLGUmJihjLmNoZWNrZXI9YmEoZSksTSYmYy5jaGVja2VyLnBlcnNvbmFsKE0pKTsrK2E8cy5sZW5ndGg7KXtjb25zdCBlPXNbYV0uc2xpY2UoMCwzKTtufHx3YSguLi5lKSxzW2FdWzNdKG4pfXMubGVuZ3RoPTB9KSksKG4sZSxhKT0+e2w/YShsKTpjLmNoZWNrZXI/KHdhKG4sZSxjKSxhKCkpOnMucHVzaChbbixlLGMsYV0pfX1mdW5jdGlvbiB3YShuLGUsYSl7Y29uc3R7aWdub3JlOmksaWdub3JlTGl0ZXJhbDpyLGlnbm9yZURpZ2l0czp0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm8sY2hlY2tlcjpNLGNhY2hlOnN9PWE7ZnVuY3Rpb24gbChuLGUpe3JldHVybiBuK1wiOyBkaWQgeW91IG1lYW4gXCIrdWEoZSxcImBcIikuam9pbihcIiwgXCIpK1wiP1wifWZ1bmN0aW9uIGMobil7cmV0dXJuIGkuaW5jbHVkZXMobil8fHQmJi9eXFxkKyQvLnRlc3Qobil9X24obixcIldvcmROb2RlXCIsKChuLGksdCk9Pntjb25zdCBTPXQsdT1uLmNoaWxkcmVuO2lmKCFTfHxudWxsPT09aXx8ciYmUWUoUyxpKSlyZXR1cm47bGV0IGQ9cW4obik7aWYobyYmKGQ9ZC5yZXBsYWNlKC/igJkvZyxcIidcIikpLGMoZCkpcmV0dXJuO2xldCBtPU0uY29ycmVjdChkKTtpZighbSYmdS5sZW5ndGg+MSl7bGV0IG49LTE7Zm9yKG09ITA7KytuPHUubGVuZ3RoOyl7Y29uc3QgZT11W25dO1wiVGV4dE5vZGVcIiE9PWUudHlwZXx8YyhlLnZhbHVlKXx8TS5jb3JyZWN0KGUudmFsdWUpfHwobT0hMSl9fWlmKCFtKXtsZXQgaSxyPXVhKGQsXCJgXCIpK1wiIGlzIG1pc3NwZWx0XCI7RGEuY2FsbChzLGQpPyhpPXNbZF0scj1sKHIsaSkpOihhLmNvdW50PT09YS5tYXgmJmUubWVzc2FnZShcIlRvbyBtYW55IG1pc3NwZWxsaW5nczsgbm8gZnVydGhlciBzcGVsbCBzdWdnZXN0aW9ucyBhcmUgZ2l2ZW5cIixuLFtmYSxcIm92ZXJmbG93XCJdLmpvaW4oXCI6XCIpKSxhLmNvdW50KyssYS5jb3VudDxhLm1heCYmKGk9TS5zdWdnZXN0KGQpLGkubGVuZ3RoPjAmJihyPWwocixpKSkpLHNbZF09aXx8W10pLE9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKHIsbixbZmEsZC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcVysvLFwiLVwiKV0uam9pbihcIjpcIikpLHthY3R1YWw6ZCxleHBlY3RlZDppfHxbXX0pfX0pKX1jb25zdCB2YT1be2lkOlwiYXJlLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImFyZW4ndFwiLGN1cmx5OlwiYXJlbuKAmXRcIn0sZXhwYW5kZWQ6W1wiYXJlIG5vdFwiXX0se2lkOlwiY2FuLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNhbid0XCIsY3VybHk6XCJjYW7igJl0XCJ9LGV4cGFuZGVkOltcImNhbiBub3RcIixcImNhbm5vdFwiXX0se2lkOlwiY291bGQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNvdWxkJ3ZlXCIsY3VybHk6XCJjb3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcImNvdWxkIGhhdmVcIl19LHtpZDpcImNvdWxkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImNvdWxkbid0XCIsY3VybHk6XCJjb3VsZG7igJl0XCJ9LGV4cGFuZGVkOltcImNvdWxkIG5vdFwiXX0se2lkOlwiZGlkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImRpZG4ndFwiLGN1cmx5OlwiZGlkbuKAmXRcIn0sZXhwYW5kZWQ6W1wiZGlkIG5vdFwiXX0se2lkOlwiZG9lcy1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkb2Vzbid0XCIsY3VybHk6XCJkb2VzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiZG9lcyBub3RcIl19LHtpZDpcImRvLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImRvbid0XCIsY3VybHk6XCJkb27igJl0XCJ9LGV4cGFuZGVkOltcImRvIG5vdFwiXX0se2lkOlwiZXZlcnlib2R5LWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiZXZlcnlib2R5J3NcIixjdXJseTpcImV2ZXJ5Ym9keeKAmXNcIn0sZXhwYW5kZWQ6W1wiZXZlcnlib2R5IGlzXCJdfSx7aWQ6XCJldmVyeW9uZS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImV2ZXJ5b25lJ3NcIixjdXJseTpcImV2ZXJ5b25l4oCZc1wifSxleHBhbmRlZDpbXCJldmVyeW9uZSBpc1wiXX0se2lkOlwiaGFkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhhZG4ndFwiLGN1cmx5OlwiaGFkbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGFkIG5vdFwiXX0se2lkOlwiaGFzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhhc24ndFwiLGN1cmx5OlwiaGFzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGFzIG5vdFwiXX0se2lkOlwiaGF2ZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYXZlbid0XCIsY3VybHk6XCJoYXZlbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaGF2ZSBub3RcIl19LHtpZDpcImhlLWhhZC13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ2RcIixjdXJseTpcImhl4oCZZFwifSxleHBhbmRlZDpbXCJoZSBoYWRcIixcImhlIHdvdWxkXCJdfSx7aWQ6XCJoZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGUnbGxcIixjdXJseTpcImhl4oCZbGxcIn0sZXhwYW5kZWQ6W1wiaGUgd2lsbFwiXX0se2lkOlwiaGUtaGFzLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGUnc1wiLGN1cmx5OlwiaGXigJlzXCJ9LGV4cGFuZGVkOltcImhlIGhhc1wiLFwiaGUgaXNcIl19LHtpZDpcImhlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoZXJlJ3NcIixjdXJseTpcImhlcmXigJlzXCJ9LGV4cGFuZGVkOltcImhlcmUgaXNcIl19LHtpZDpcImktaGFkLXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSdkXCIsY3VybHk6XCJJ4oCZZFwifSxleHBhbmRlZDpbXCJJIGhhZFwiLFwiSSB3b3VsZFwiXX0se2lkOlwiaS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSdsbFwiLGN1cmx5OlwiSeKAmWxsXCJ9LGV4cGFuZGVkOltcIkkgd2lsbFwiXX0se2lkOlwiaS1hbVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknbVwiLGN1cmx5OlwiSeKAmW1cIn0sZXhwYW5kZWQ6W1wiSSBhbVwiXX0se2lkOlwiaS1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiSSd2ZVwiLGN1cmx5OlwiSeKAmXZlXCJ9LGV4cGFuZGVkOltcIkkgaGF2ZVwiXX0se2lkOlwiaXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXNuJ3RcIixjdXJseTpcImlzbuKAmXRcIn0sZXhwYW5kZWQ6W1wiaXMgbm90XCJdfSx7aWQ6XCJpdC13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXQnbGxcIixjdXJseTpcIml04oCZbGxcIn0sZXhwYW5kZWQ6W1wiaXQgd2lsbFwiXX0se2lkOlwiaXQtaGFzLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaXQnc1wiLGN1cmx5OlwiaXTigJlzXCJ9LGV4cGFuZGVkOltcIml0IGhhc1wiLFwiaXQgaXNcIl19LHtpZDpcImxldC11c1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImxldCdzXCIsY3VybHk6XCJsZXTigJlzXCJ9LGV4cGFuZGVkOltcImxldCB1c1wiXX0se2lkOlwibWlnaHQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIm1pZ2h0J3ZlXCIsY3VybHk6XCJtaWdodOKAmXZlXCJ9LGV4cGFuZGVkOltcIm1pZ2h0IGhhdmVcIl19LHtpZDpcIm11c3QtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIm11c3QndmVcIixjdXJseTpcIm11c3TigJl2ZVwifSxleHBhbmRlZDpbXCJtdXN0IGhhdmVcIl19LHtpZDpcInNoZS1oYWQtd291bGRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaGUnZFwiLGN1cmx5Olwic2hl4oCZZFwifSxleHBhbmRlZDpbXCJzaGUgaGFkXCIsXCJzaGUgd291bGRcIl19LHtpZDpcInNoZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hlJ2xsXCIsY3VybHk6XCJzaGXigJlsbFwifSxleHBhbmRlZDpbXCJzaGUgd2lsbFwiXX0se2lkOlwic2hlLWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNoZSdzXCIsY3VybHk6XCJzaGXigJlzXCJ9LGV4cGFuZGVkOltcInNoZSBoYXNcIixcInNoZSBpc1wiXX0se2lkOlwic2hvdWxkLWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaG91bGQndmVcIixjdXJseTpcInNob3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcInNob3VsZCBoYXZlXCJdfSx7aWQ6XCJzaG91bGQtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hvdWxkbid0XCIsY3VybHk6XCJzaG91bGRu4oCZdFwifSxleHBhbmRlZDpbXCJzaG91bGQgbm90XCJdfSx7aWQ6XCJzb21lYm9keS1oYXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzb21lYm9keSdzXCIsY3VybHk6XCJzb21lYm9keeKAmXNcIn0sZXhwYW5kZWQ6W1wic29tZWJvZHkgaGFzXCIsXCJzb21lYm9keSBpc1wiXX0se2lkOlwic29tZW9uZS1oYXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzb21lb25lJ3NcIixjdXJseTpcInNvbWVvbmXigJlzXCJ9LGV4cGFuZGVkOltcInNvbWVvbmUgaGFzXCIsXCJzb21lb25lIGlzXCJdfSx7aWQ6XCJzb21ldGhpbmctaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZXRoaW5nJ3NcIixjdXJseTpcInNvbWV0aGluZ+KAmXNcIn0sZXhwYW5kZWQ6W1wic29tZXRoaW5nIGhhc1wiLFwic29tZXRoaW5nIGlzXCJdfSx7aWQ6XCJ0aGF0LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGF0J2xsXCIsY3VybHk6XCJ0aGF04oCZbGxcIn0sZXhwYW5kZWQ6W1widGhhdCB3aWxsXCJdfSx7aWQ6XCJ0aGF0LWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhhdCdzXCIsY3VybHk6XCJ0aGF04oCZc1wifSxleHBhbmRlZDpbXCJ0aGF0IGlzXCJdfSx7aWQ6XCJ0aGVyZS13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhlcmUnbGxcIixjdXJseTpcInRoZXJl4oCZbGxcIn0sZXhwYW5kZWQ6W1widGhlcmUgd2lsbFwiXX0se2lkOlwidGhlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGVyZSdzXCIsY3VybHk6XCJ0aGVyZeKAmXNcIn0sZXhwYW5kZWQ6W1widGhlcmUgaXNcIl19LHtpZDpcInRoZXktd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXknbGxcIixjdXJseTpcInRoZXnigJlsbFwifSxleHBhbmRlZDpbXCJ0aGV5IHdpbGxcIl19LHtpZDpcInRoZXktYXJlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhleSdyZVwiLGN1cmx5OlwidGhleeKAmXJlXCJ9LGV4cGFuZGVkOltcInRoZXkgYXJlXCJdfSx7aWQ6XCJ3YXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2Fzbid0XCIsY3VybHk6XCJ3YXNu4oCZdFwifSxleHBhbmRlZDpbXCJ3YXMgbm90XCJdfSx7aWQ6XCJ3ZS1oYWQtd291bGQtZGlkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2UnZFwiLGN1cmx5Olwid2XigJlkXCJ9LGV4cGFuZGVkOltcIndlIGhhZFwiLFwid2Ugd291bGRcIixcIndlIGRpZFwiXX0se2lkOlwid2Utd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ2xsXCIsY3VybHk6XCJ3ZeKAmWxsXCJ9LGV4cGFuZGVkOltcIndlIHdpbGxcIl19LHtpZDpcIndlLWFyZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ3JlXCIsY3VybHk6XCJ3ZeKAmXJlXCJ9LGV4cGFuZGVkOltcIndlIGFyZVwiXX0se2lkOlwid2VyZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZXJlbid0XCIsY3VybHk6XCJ3ZXJlbuKAmXRcIn0sZXhwYW5kZWQ6W1wid2VyZSBub3RcIl19LHtpZDpcIndoYXQtaXMtZG9lc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoYXQnc1wiLGN1cmx5Olwid2hhdOKAmXNcIn0sZXhwYW5kZWQ6W1wid2hhdCBpc1wiLFwid2hhdCBkb2VzXCJdfSx7aWQ6XCJ3aGVuLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hlbidzXCIsY3VybHk6XCJ3aGVu4oCZc1wifSxleHBhbmRlZDpbXCJ3aGVuIGlzXCJdfSx7aWQ6XCJ3aGVyZS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoZXJlJ3NcIixjdXJseTpcIndoZXJl4oCZc1wifSxleHBhbmRlZDpbXCJ3aGVyZSBpc1wiXX0se2lkOlwid2hvLXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aG8nbGxcIixjdXJseTpcIndob+KAmWxsXCJ9LGV4cGFuZGVkOltcIndobyB3aWxsXCJdfSx7aWQ6XCJ3aG8taXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aG8nc1wiLGN1cmx5Olwid2hv4oCZc1wifSxleHBhbmRlZDpbXCJ3aG8gaXNcIl19LHtpZDpcIndoeS1kaWRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aHknZFwiLGN1cmx5Olwid2h54oCZZFwifSxleHBhbmRlZDpbXCJ3aHkgZGlkXCJdfSx7aWQ6XCJ3aWxsLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndvbid0XCIsY3VybHk6XCJ3b27igJl0XCJ9LGV4cGFuZGVkOltcIndpbGwgbm90XCJdfSx7aWQ6XCJ3b3VsZC1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid291bGQndmVcIixjdXJseTpcIndvdWxk4oCZdmVcIn0sZXhwYW5kZWQ6W1wid291bGQgaGF2ZVwiXX0se2lkOlwieW91LXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwieW91J2RcIixjdXJseTpcInlvdeKAmWRcIn0sZXhwYW5kZWQ6W1wieW91IHdvdWxkXCJdfSx7aWQ6XCJ5b3Utd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInlvdSdsbFwiLGN1cmx5OlwieW914oCZbGxcIn0sZXhwYW5kZWQ6W1wieW91IHdpbGxcIl19LHtpZDpcInlvdS1hcmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ5b3UncmVcIixjdXJseTpcInlvdeKAmXJlXCJ9LGV4cGFuZGVkOltcInlvdSBhcmVcIl19XTtmdW5jdGlvbiBrYSgpe3JldHVybihuLGUpPT57X24obixcIlBhcmFncmFwaE5vZGVcIiwobj0+e2NvbnN0IGE9bi5jaGlsZHJlbixpPVwicmV0ZXh0LXVzZS1jb250cmFjdGlvbnNcIjthLmZvckVhY2goKChuLGEpPT57Vm4obixcIlNlbnRlbmNlTm9kZVwiKSYmbi5jaGlsZHJlbi5mb3JFYWNoKCgoYSxyKT0+e2NvbnN0IHQ9bi5jaGlsZHJlbjtpZihWbih0W3ItMV0sXCJXb3JkTm9kZVwiKSYmVm4oYSxcIldoaXRlU3BhY2VOb2RlXCIpJiZWbih0W3IrMV0sXCJXb3JkTm9kZVwiKSl7Y29uc3Qgbj1xbih0W3ItMV0uY2hpbGRyZW5bMF0pK1wiIFwiK3FuKHRbcisxXS5jaGlsZHJlblswXSk7bGV0IG89XCJcIixNPVwiXCI7aWYodmEuc29tZSgoZT0+e2NvbnN0IGE9ZS5leHBhbmRlZC5zb21lKChlPT5lLnRvTG93ZXJDYXNlKCk9PT1uLnRvTG93ZXJDYXNlKCkpKTtyZXR1cm4gbz1bZS5jb250cmFjdGlvbi5jdXJseV0sTT1lLmlkLGF9KSkpe2NvbnN0IG49cW4odFtyLTFdKStxbihhKStxbih0W3IrMV0pO3JldHVybiBjb25zb2xlLmxvZyh0W3JdKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShgRXhwZWN0ZWQgXCIke299XCIgbm90IFwiJHtufVwiYCx7c3RhcnQ6dGUodFtyLTFdKSxlbmQ6b2UodFtyKzFdKX0sW2ksTV0uam9pbihcIjpcIikpLHthY3R1YWw6bixleHBlY3RlZDpvLG5vdGU6XCJcIix1cmw6XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvY29udHJhY3Rpb25zL1wifSksZX19fSkpfSkpfSkpfX1XbihcIlNlbnRlbmNlTm9kZVwiKSxXbihcIldoaXRlU3BhY2VOb2RlXCIpO2NvbnN0IFJhPXtuZXdSZWxpYzpbXCJOZXcgUmVsaWNcIixcIndlXCJdLG5ld1JlbGljT25lOltcIk5ldyBSZWxpYyBPbmVcIixcIk5ldyBSZWxpYyBPbmUgcGxhdGZvcm1cIl0sZnV0dXJlU3RhY2s6W1wiRnV0dXJlU3RhY2tcIixcIntGdXR1cmV9U3RhY2tcIl0sY29kZVN0cmVhbTpbXCJDb2RlU3RyZWFtXCIsXCJOZXcgUmVsaWMgQ29kZVN0cmVhbVwiXSxleHBsb3JlcjpbXCJFeHBsb3JlclwiLFwiTmV3IFJlbGljIEV4cGxvcmVyXCJdLGluc3RhbnRPYnNlcnZhYmlsaXR5OltcIkluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiLFwiTmV3IFJlbGljIEkvT1wiLFwiTmV3IFJlbGljIEluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiLFwiTmV3IFJlbGljIEluc3RhbnQgT2JzZXJ2YWJpbGl0eSAoSS9PKVwiXSxsb29rb3V0OltcIk5ldyBSZWxpYyBMb29rb3V0XCIsXCJMb29rb3V0XCJdLGxvb2tvdXQ6W1wiTmV3IFJlbGljIE5hdmlnYXRvclwiLFwiTmF2aWdhdG9yXCJdLGFwbTpbXCJhcHBsaWNhdGlvbiBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJhcHBsaWNhdGlvbiBtb25pdG9yaW5nXCIsXCJBUE1cIl0scGl4aWU6W1wiYXV0by10ZWxlbWV0cnkgd2l0aCBQaXhpZVwiLFwidGhlIFBpeGllIGludGVncmF0aW9uIHdpdGggTmV3IFJlbGljIE9uZVwiLFwib3VyIFBpeGllIGludGVncmF0aW9uXCIsXCJ0aGUgaW50ZWdyYXRpb24gd2l0aCBQaXhpZVwiLFwiUGl4aWVcIl0sZGlnaXRhbEV4cGVyaWVuY2VNb25pdG9yaW5nOltcImRpZ2l0YWwgZXhwZXJpZW5jZSBtb25pdG9yaW5nIChERU0pXCIsXCJkaWdpdGFsIGV4cGVyaWVuY2UgbW9uaXRvcmluZ1wiLFwiREVNXCJdLGluZnJhc3RydWN0dXJlTW9uaXRvcmluZzpbXCJpbmZyYXN0cnVjdHVyZSBtb25pdG9yaW5nXCIsXCJpbmZyYSBtb25pdG9yaW5nXCIsXCJpbmZyYVwiXSxsb2dNYW5hZ2VtZW50OltcImxvZyBtYW5hZ2VtZW50XCIsXCJsb2dzXCJdLG1lbHQ6W1wibWV0cmljcywgZXZlbnRzLCBsb2dzLCBhbmQgdHJhY2VzIChNRUxUKVwiLFwibWV0cmljcywgZXZlbnRzLCBsb2dzLCBhbmQgdHJhY2VzXCIsXCJNRUxUXCJdLG5ldHdvcmtQZXJmb3JtYW5jZU1vbml0b3Jpbmc6W1wibmV0d29yayBwZXJmb3JtYW5jZSBtb25pdG9yaW5nIChOUE0pXCIsXCJuZXR3b3JrIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk5QTVwiLFwibmV0d29yayBtb25pdG9yaW5nXCJdLG9ic2VydmFiaWxpdHk6W1wib2JzZXJ2YWJpbGl0eSAobzExeSlcIixcIm9ic2VydmFiaWxpdHlcIixcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLFwiZW5kLXRvLWVuZCBvYnNlcnZhYmlsaXR5XCJdLHF1ZXJ5OltcInF1ZXJ5XCIsXCJxdWVyaWVzXCIsXCJxdWVyeWluZ1wiXSxzeW50aGV0aWNNb25pdG9yaW5nOltcInN5bnRoZXRpYyBtb25pdG9yaW5nXCIsXCJzeW50aGV0aWNzXCIsXCJzeW50aGV0aWMgbW9uaXRvcnNcIl19LFlhPXtcIk5ldyBSZWxpYydzXCI6UmEubmV3UmVsaWMsXCJuZXcgcmVsaWNcIjpSYS5uZXdSZWxpYyxOUjpSYS5uZXdSZWxpYyxcIk5ldyBSZWxpYyBPbmUnc1wiOlJhLm5ld1JlbGljT25lLFwiTmV3IFJlbGljIG9uZVwiOlJhLm5ld1JlbGljT25lLE5SMTpSYS5uZXdSZWxpY09uZSxcIkZ1dHVyZSBTdGFja1wiOlJhLmZ1dHVyZVN0YWNrLEZ1dHVyZXN0YWNrOlJhLmZ1dHVyZVN0YWNrLFwiTmVyZCBHcmFwaFwiOlwiTmVyZEdyYXBoXCIsTmVyZGdyYXBoOlwiTmVyZEdyYXBoXCIsXCJOZXJkIEdyYXBoXCI6XCJOZXJkR3JhcGhcIixuZXJkbGV0OlwiTmVyZGxldFwiLG5lcmRwYWNrOlwiTmVyZHBhY2tcIixcIk5lcmQgUGFja1wiOlwiTmVyZHBhY2tcIixOZXJkc3RvcmFnZTpcIk5lcmRTdG9yYWdlXCIsXCJOZXJkIFN0b3JhZ2VcIjpcIk5lcmRTdG9yYWdlXCIsXCJOZXcgUmVsaWMgQ29kZVN0cmVhbSdzXCI6UmEuY29kZVN0cmVhbSxcIk5ldyBSZWxpYyBDb2RlIFN0cmVhbVwiOlJhLmNvZGVTdHJlYW0sXCJDb2RlIFN0cmVhbVwiOlJhLmNvZGVTdHJlYW0sY29kZXN0cmVhbTpSYS5jb2RlU3RyZWFtLFwiTmV3IFJlbGljIEV4cGxvcmVyJ3NcIjpSYS5leHBsb3JlcixleHBsb3JlcjpSYS5leHBsb3JlcixcIkluZmluaXRlIHRyYWNpbmdcIjpcIkluZmluaXRlIFRyYWNpbmdcIixcIk5ldyBSZWxpYyBpbnN0YW50IG9ic2VydmFiaWxpdHlcIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxcImluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LE5SSU86UmEuaW5zdGFudE9ic2VydmFiaWxpdHksSU86UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJJL09cIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxcIk5ldyBSZWxpYyBMb29rb3V0J3NcIjpSYS5sb29rb3V0LGxvb2tvdXQ6UmEubG9va291dCxcIk5ldyBSZWxpYyBOYXZpZ2F0b3Inc1wiOlJhLm5hdmlnYXRvcixuYXZpZ2F0b3I6UmEubmF2aWdhdG9yLEFsZXJ0czpcImFsZXJ0c1wiLFwiQW5vbWFseSBEZXRlY3Rpb25cIjpcImFub21hbHkgZGV0ZWN0aW9uXCIsXCJBcHBsaWNhdGlvbiBQZXJmb3JtYW5jZSBNYW5hZ2VtZW50XCI6UmEuYXBtLFwiQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlJhLmFwbSxcIkFwcGxpY2F0aW9uIE1vbml0b3JpbmdcIjpSYS5hcG0sXCJBcHBsaWVkIEludGVsbGlnZW5jZVwiOlwiYXBwbGllZCBpbnRlbGxpZ2VuY2VcIixBSTpcImFwcGxpZWQgaW50ZWxsaWdlbmNlXCIsQUlPcHM6XCJhcHBsaWVkIGludGVsbGlnZW5jZVwiLFwiQXV0byBtYXBcIjpcImF1dG9tYXBcIixcIlBpeGllJ3NcIjpSYS5waXhpZSxwaXhpZTpSYS5waXhpZSxcIkF1dG8tdGVsZW1ldHJ5IHdpdGggUGl4aWVcIjpSYS5waXhpZSxcIkJyb3dzZXIgTW9uaXRvcmluZ1wiOlwiYnJvd3NlciBtb25pdG9yaW5nXCIsQ29udGFpbmVyczpcImNvbnRhaW5lcnNcIixEYXNoYm9hcmQ6XCJkYXNoYm9hcmRcIixEYXNoYm9hcmRzOlwiZGFzaGJvYXJkc1wiLFwiRGF0YSBFeHBsb3JlclwiOlwiZGF0YSBleHBsb3JlclwiLFwiRGF0YSBpbmdlc3RcIjpcImRhdGEgaW5nZXN0XCIsXCJEaWdpdGFsIEV4cGVyaWVuY2UgTW9uaXRvcmluZ1wiOlJhLmRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZyxcImRpZ2l0YWwgbW9uaXRvcmluZ1wiOlJhLmRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZyxcIkRpc3RyaWJ1dGVkIFRyYWNpbmdcIjpcImRpc3RyaWJ1dGVkIHRyYWNpbmdcIixcIkVycm9ycyBpbmJveFwiOlwiZXJyb3JzIGluYm94XCIsXCJFdmVudCBDb3JyZWxhdGlvblwiOlwiZXZlbnQgY29ycmVsYXRpb25cIixcIkluY2lkZW50IEludGVsbGlnZW5jZVwiOlwiaW5jaWRlbnQgaW50ZWxsaWdlbmNlXCIsXCJJbmZyYXN0cnVjdHVyZSBNb25pdG9yaW5nXCI6UmEuaW5mcmFzdHJ1Y3R1cmVNb25pdG9yaW5nLFwiS3ViZXJuZXRlcyBDbHVzdGVyIEV4cGxvcmVyXCI6XCJLdWJlcm5ldGVzIGNsdXN0ZXIgZXhwbG9yZXJcIixcIkt1YmVybmV0ZXMgTW9uaXRvcmluZ1wiOlwiS3ViZXJuZXRlcyBtb25pdG9yaW5nXCIsXCJtaWNybyBzZXJ2aWNlc1wiOlwibWljcm9zZXJ2aWNlc1wiLE1pY3Jvc2VydmljZXM6XCJtaWNyb3NlcnZpY2VzXCIsSW50ZWdyYXRpb25zOlwiaW50ZWdyYXRpb25zXCIsXCJMb2cgTWFuYWdlbWVudFwiOlJhLmxvZ01hbmFnZW1lbnQsTG9nczpSYS5sb2dNYW5hZ2VtZW50LFwiTWV0cmljcywgRXZlbnRzLCBMb2dzLCBhbmQgVHJhY2VzXCI6UmEubWVsdCxcIk1vYmlsZSBNb25pdG9yaW5nXCI6XCJtb2JpbGUgbW9uaXRvcmluZ1wiLFwiTW9kZWwgUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiTUwgbW9kZWwgbW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiTUwgbW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiOlwibW9kZWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLE1QTTpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk5ldHdvcmsgUGVyZm9ybWFuY2UgTW9uaXRvcmluZ1wiOlJhLm5ldHdvcmtQZXJmb3JtYW5jZU1vbml0b3JpbmcsXCJOZXR3b3JrIE1vbml0b3JpbmdcIjpSYS5uZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nLE9ic2VydmFiaWxpdHk6UmEub2JzZXJ2YWJpbGl0eSxPMTF5OlJhLm9ic2VydmFiaWxpdHksXCJGdWxsLVN0YWNrIE9ic2VydmFiaWxpdHlcIjpSYS5vYnNlcnZhYmlsaXR5LFF1ZXJ5OlJhLnF1ZXJ5LFF1ZXJpZXM6UmEucXVlcnksUXVlcnlpbmc6UmEucXVlcnksXCJRdWVyeSBCdWlsZGVyXCI6XCJxdWVyeSBidWlsZGVyXCIsXCJxdWljayBzdGFydHNcIjpcInF1aWNrc3RhcnRzXCIsUXVpY2tTdGFydHM6XCJxdWlja3N0YXJ0c1wiLFwiU2VydmVybGVzcyBtb25pdG9yaW5nXCI6XCJzZXJ2ZXJsZXNzIG1vbml0b3JpbmdcIixcInN5bnRoZXRpY3MgbW9uaXRvcmluZ1wiOlJhLnN5bnRoZXRpY01vbml0b3JpbmcsXCJTeW50aGV0aWMgbW9uaXRvcmluZ1wiOlJhLnN5bnRoZXRpY01vbml0b3JpbmcsU3ludGhldGljczpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFwiRnVsbC1zdGFjayBPYnNlcnZhYmlsaXR5XCI6XCJmdWxsLXN0YWNrIG9ic2VydmFiaWxpdHlcIixcImZ1bGwgc3RhY2sgb2JzZXJ2YWJpbGl0eVwiOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsRlNPOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsXCJUZWxlbWV0cnkgZGF0YSBwbGF0Zm9ybVwiOlwidGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIixURFA6XCJ0ZWxlbWV0cnkgZGF0YSBwbGF0Zm9ybVwifSxBYT1PYmplY3Qua2V5cyhZYSksUGE9XCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIjtmdW5jdGlvbiBDYSgpe3JldHVybihuLGUpPT57YWEobixBYSwoKG4sYSxpLHIpPT57Y29uc3QgdD1xbihuKTtsZXQgbz1ZYVtyXSxNPVwiXCI7aWYoIShBcnJheS5pc0FycmF5KG8pP286W29dKS5zb21lKChuPT5uPT09dCkpKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbyYmKG89W29dKSxNPShlLGEscik9Pntjb25zdCBvPVwic3RyaW5nXCI9PXR5cGVvZiByLE09QXJyYXkuaXNBcnJheShyKTtpZighbyYmIU0pcmV0dXJuIGNvbnNvbGUuZXJyb3IoJ1wiY2hlY2tDb250ZXh0XCIgZXhwZWN0cyB0aGUgYXJndW1lbnQgXCJtYXRjaGVzVG9DaGVja1wiIHRvIGJlIGFuIGFycmF5IG9yIHN0cmluZ1xcJycpLGNvbnNvbGUubG9nKHR5cGVvZiByKSxudWxsO2lmKGUhPT10KXJldHVybiBudWxsO2xldCBzPWkuY2hpbGRyZW4ubWFwKCgoZSxpLHIpPT57aWYoZT09PW5bMF0pe2xldCBuPVtdO3JldHVyblsuLi5BcnJheSgyKmEpXS5mb3JFYWNoKCgoZSxhKT0+e24udW5zaGlmdChyW2ktKGErMSldKX0pKSxuLnB1c2goZSksbn1yZXR1cm4hMX0pKS5maWx0ZXIoKG49Pm4pKVswXTtyZXR1cm4gbz9yPT09cW4ocyk6TT9yLnNvbWUoKG49Pm49PT1xbihzKSkpOnZvaWQgMH0sTShcIk9ic2VydmFiaWxpdHlcIiwxLFwiSW5zdGFudCBPYnNlcnZhYmlsaXR5XCIpfHxNKFwiSS9PXCIsMSxcIlJlbGljIEkvT1wiKSlyZXR1cm4gbnVsbDtPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIlJlcGxhY2UgXCIrdWEodCxcImBcIikrXCIgd2l0aCBcIit1YShvLFwiYFwiKSx7c3RhcnQ6dGUoblswXSksZW5kOm9lKG5bbi5sZW5ndGgtMV0pfSxbUGEsci5yZXBsYWNlKC9cXHMrL2csXCItXCIpLnRvTG93ZXJDYXNlKCldLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6byx1cmw6XCJodHRwczovL2RvY3MubmV3cmVsaWMuY29tL2RvY3Mvc3R5bGUtZ3VpZGUvY2FwaXRhbGl6YXRpb24vcHJvZHVjdC1jYXBhYmlsaXR5LWZlYXR1cmUtdXNhZ2UvI3doZW4tdG8tdXNlLXRpdGxlLWNhc2VcIn0pfX0pKX19ZnVuY3Rpb24gVGEoKXtyZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBhPW4uY2hpbGRyZW4saT1cInJldGV4dC1uby1lbW9qaXNcIixyPVtcIlwiXTthLmZvckVhY2goKChuLGEpPT57Vm4obixcIlNlbnRlbmNlTm9kZVwiKSYmbi5jaGlsZHJlbi5mb3JFYWNoKCgoYSx0KT0+e2lmKG4uY2hpbGRyZW4sVm4oYSxcIlN5bWJvbE5vZGVcIikmJi9cXHB7RXh0ZW5kZWRfUGljdG9ncmFwaGljfS91LnRlc3QoYS52YWx1ZSkpe2NvbnN0IG49YS52YWx1ZTtyZXR1cm4gT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoYEV4cGVjdGVkIG5vdGhpbmcsIG5vdCBcIiR7bn1cImAse3N0YXJ0OnRlKGEpLGVuZDpvZShhKX0sW2ksYS52YWx1ZV0uam9pbihcIjpcIikpLHthY3R1YWw6bixleHBlY3RlZDpyLG5vdGU6XCJcIix1cmw6XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvZW1vamlzL1wifSksZX19KSl9KSl9KSl9fXZhciB4YT1bXCJOZXcgUmVsaWNcIixcIk5ldyBSZWxpYyBPbmVcIixcIm5lcmRncmFwaFwiLFwiZ3JhcGhxbC1mb3JtYXRcIixcImdyYXBocWxcIixcImdyYXBoaXFsXCIsXCJGaWdtYVwiLFwiVUlcIixcIk5vZGUuanNcIixcIkFQTVwiLFwic2VydmVybGVzc1wiLFwia3ViZXJuZXRlc1wiLFwiQVdTXCIsXCJsYW1iZGFcIixcIkFJXCIsXCJvYnNlcnZhYmlsaXR5XCIsXCJuZXJkcGFja1wiLFwibmVyZGxldFwiLFwiQ0xJXCIsXCJsaW51eFwiLFwidWJ1bnR1XCIsXCJPU1wiLFwiU0xPXCIsXCJTTEFcIixcIlNMSVwiLFwiU0xNXCIsXCJOUjFcIixcImRldm9wc1wiLFwibnJxbC9QSFBcIixcInBpLWhvbGVcIixcIkROU1wiLFwicmVkaXNcIixcIlNES1wiLFwiQVBJXCIsXCJrYWZrYVwiLFwiUzNcIixcInZwbi9waHBcIixcInBvc3RyZ3Jlc3FsXCIsXCJteXNxbFwiLFwicHJvbXFsXCIsXCJWTVwiLFwiZmlyZWJhc2VcIixcImtlbnRpa1wiLFwidnBjXCIsXCJlbmRwb2ludFwiLFwicGVybWFsaW5rXCIsXCJhenVyZVwiLFwib3BzXCIsXCJjb2Rlc3RyZWFtXCIsXCJmYXN0bHlcIixcImdhdHNieVwiLFwibGFjZXdvcmtcIixcIm1vbmdvZGJcIixcImNyaWJsXCIsXCJkZXZcIixcImdpZ2Ftb25cIixcInN5c2xvZ1wiLFwiYWtrYVwiLFwiYWxnb3JpdGhtYVwiLFwiYW5zaWJsZVwiLFwibWFjb3NcIixcImNlbnRvc1wiLFwiYXBpZ2VlXCIsXCJqaXJhXCIsXCJDKytcIixcIkNcIixcImNvdWNoYmFzZVwiLFwiY29uc3VsXCIsXCJjb3Jkb3ZhXCIsXCJkamFuZ29cIixcImY1XCIsXCJmbHVlbnRkXCIsXCJHQ1BcIixcIlRDUFwiLFwid3d3XCIsXCJ5bWxcIixcIndnZXRcIixcIm1keFwiLFwibWFya2Rvd25cIixcIkdyYWZhbmFcIixcIkhlcm9rdVwiLFwiaGFwcm94eVwiLFwiSFRUUFNcIixcInF1aWNrc3RhcnQvY293XCIsXCJmcm9udGVuZFwiLFwiYmFja2VuZFwiLFwiYml0YnVja2V0XCIsXCJnaXRsYWJcIixcImdpdGh1YlwiLFwidHJlbGxvXCIsXCJhc2FuYVwiLFwiaW50ZWdyYXRpb25zXCJdO2Z1bmN0aW9uIHphKG4sZSl7dmFyIGE9T2JqZWN0LmtleXMobik7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhuKTtlJiYoaT1pLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobixlKS5lbnVtZXJhYmxlfSkpKSxhLnB1c2guYXBwbHkoYSxpKX1yZXR1cm4gYX1mdW5jdGlvbiBFYShuLGUsYSl7cmV0dXJuIGUgaW4gbj9PYmplY3QuZGVmaW5lUHJvcGVydHkobixlLHt2YWx1ZTphLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6bltlXT1hLG59ZnVuY3Rpb24gQmEobixlLGEsaSxyLHQsbyl7dHJ5e3ZhciBNPW5bdF0obykscz1NLnZhbHVlfWNhdGNoKG4pe3JldHVybiB2b2lkIGEobil9TS5kb25lP2Uocyk6UHJvbWlzZS5yZXNvbHZlKHMpLnRoZW4oaSxyKX1mdW5jdGlvbiBOYShuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10aGlzLGE9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oaSxyKXt2YXIgdD1uLmFwcGx5KGUsYSk7ZnVuY3Rpb24gbyhuKXtCYSh0LGkscixvLE0sXCJuZXh0XCIsbil9ZnVuY3Rpb24gTShuKXtCYSh0LGkscixvLE0sXCJ0aHJvd1wiLG4pfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gWmEobixlKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gbn0obil8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9bnVsbD09bj9udWxsOlwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJm5bU3ltYm9sLml0ZXJhdG9yXXx8bltcIkBAaXRlcmF0b3JcIl07aWYobnVsbCE9YSl7dmFyIGkscix0PVtdLG89ITAsTT0hMTt0cnl7Zm9yKGE9YS5jYWxsKG4pOyEobz0oaT1hLm5leHQoKSkuZG9uZSkmJih0LnB1c2goaS52YWx1ZSksIWV8fHQubGVuZ3RoIT09ZSk7bz0hMCk7fWNhdGNoKG4pe009ITAscj1ufWZpbmFsbHl7dHJ5e298fG51bGw9PWEucmV0dXJufHxhLnJldHVybigpfWZpbmFsbHl7aWYoTSl0aHJvdyByfX1yZXR1cm4gdH19KG4sZSl8fElhKG4sZSl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKX0oKX1mdW5jdGlvbiBGYShuKXtyZXR1cm4gZnVuY3Rpb24obil7aWYoQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gVWEobil9KG4pfHxmdW5jdGlvbihuKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZudWxsIT1uW1N5bWJvbC5pdGVyYXRvcl18fG51bGwhPW5bXCJAQGl0ZXJhdG9yXCJdKXJldHVybiBBcnJheS5mcm9tKG4pfShuKXx8SWEobil8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gSWEobixlKXtpZihuKXtpZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gVWEobixlKTt2YXIgYT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobikuc2xpY2UoOCwtMSk7cmV0dXJuXCJPYmplY3RcIj09PWEmJm4uY29uc3RydWN0b3ImJihhPW4uY29uc3RydWN0b3IubmFtZSksXCJNYXBcIj09PWF8fFwiU2V0XCI9PT1hP0FycmF5LmZyb20obik6XCJBcmd1bWVudHNcIj09PWF8fC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KGEpP1VhKG4sZSk6dm9pZCAwfX1mdW5jdGlvbiBVYShuLGUpeyhudWxsPT1lfHxlPm4ubGVuZ3RoKSYmKGU9bi5sZW5ndGgpO2Zvcih2YXIgYT0wLGk9bmV3IEFycmF5KGUpO2E8ZTthKyspaVthXT1uW2FdO3JldHVybiBpfWZ1bmN0aW9uIGphKG4sZSl7dmFyIGEsaSxyLHQ9eGE7ZXx8KGU9bnVsbCE9PShhPXdpbmRvdykmJnZvaWQgMCE9PWEmJm51bGwhPT0oaT1hLmxvY2FsU3RvcmFnZSkmJnZvaWQgMCE9PWkmJmkubGFuZ3VhZ2VMaW50ZXJDdXN0b21EaWN0aW9uYXJ5P0pTT04ucGFyc2UobnVsbD09PShyPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSk6W10pLHQucHVzaC5hcHBseSh0LEZhKGUpKTt2YXIgbz17ZGljdGlvbmFyeTpmdW5jdGlvbihuKXtuKG51bGwse2FmZjpcIlNFVCBVVEYtOFxcblRSWSBlc2lhbnJ0b2xjZHVnbXBoYnlmdmt3ekVTSUFOUlRPTENEVUdNUEhCWUZWS1daJ1xcbklDT05WIDFcXG5JQ09OViDigJkgJ1xcbk5PU1VHR0VTVCAhXFxuXFxuIyBvcmRpbmFsIG51bWJlcnNcXG5DT01QT1VORE1JTiAxXFxuIyBvbmx5IGluIGNvbXBvdW5kczogMXRoLCAydGgsIDN0aFxcbk9OTFlJTkNPTVBPVU5EIGNcXG4jIGNvbXBvdW5kIHJ1bGVzOlxcbiMgMS4gWzAtOV0qMVswLTlddGggKDEwdGgsIDExdGgsIDEydGgsIDU2NzE0dGgsIGV0Yy4pXFxuIyAyLiBbMC05XSpbMDItOV0oMXN0fDJuZHwzcmR8WzQtOV10aCkgKDIxc3QsIDIybmQsIDEyM3JkLCAxMjM0dGgsIGV0Yy4pXFxuQ09NUE9VTkRSVUxFIDJcXG5DT01QT1VORFJVTEUgbioxdFxcbkNPTVBPVU5EUlVMRSBuKm1wXFxuV09SRENIQVJTIDAxMjM0NTY3ODlcXG5cXG5QRlggQSBZIDFcXG5QRlggQSAgIDAgICAgIHJlICAgICAgICAgLlxcblxcblBGWCBJIFkgMVxcblBGWCBJICAgMCAgICAgaW4gICAgICAgICAuXFxuXFxuUEZYIFUgWSAxXFxuUEZYIFUgICAwICAgICB1biAgICAgICAgIC5cXG5cXG5QRlggQyBZIDFcXG5QRlggQyAgIDAgICAgIGRlICAgICAgICAgIC5cXG5cXG5QRlggRSBZIDFcXG5QRlggRSAgIDAgICAgIGRpcyAgICAgICAgIC5cXG5cXG5QRlggRiBZIDFcXG5QRlggRiAgIDAgICAgIGNvbiAgICAgICAgIC5cXG5cXG5QRlggSyBZIDFcXG5QRlggSyAgIDAgICAgIHBybyAgICAgICAgIC5cXG5cXG5TRlggViBOIDJcXG5TRlggViAgIGUgICAgIGl2ZSAgICAgICAgZVxcblNGWCBWICAgMCAgICAgaXZlICAgICAgICBbXmVdXFxuXFxuU0ZYIE4gWSAzXFxuU0ZYIE4gICBlICAgICBpb24gICAgICAgIGVcXG5TRlggTiAgIHkgICAgIGljYXRpb24gICAgeVxcblNGWCBOICAgMCAgICAgZW4gICAgICAgICBbXmV5XVxcblxcblNGWCBYIFkgM1xcblNGWCBYICAgZSAgICAgaW9ucyAgICAgICBlXFxuU0ZYIFggICB5ICAgICBpY2F0aW9ucyAgIHlcXG5TRlggWCAgIDAgICAgIGVucyAgICAgICAgW15leV1cXG5cXG5TRlggSCBOIDJcXG5TRlggSCAgIHkgICAgIGlldGggICAgICAgeVxcblNGWCBIICAgMCAgICAgdGggICAgICAgICBbXnldXFxuXFxuU0ZYIFkgWSAxXFxuU0ZYIFkgICAwICAgICBseSAgICAgICAgIC5cXG5cXG5TRlggRyBZIDJcXG5TRlggRyAgIGUgICAgIGluZyAgICAgICAgZVxcblNGWCBHICAgMCAgICAgaW5nICAgICAgICBbXmVdXFxuXFxuU0ZYIEogWSAyXFxuU0ZYIEogICBlICAgICBpbmdzICAgICAgIGVcXG5TRlggSiAgIDAgICAgIGluZ3MgICAgICAgW15lXVxcblxcblNGWCBEIFkgNFxcblNGWCBEICAgMCAgICAgZCAgICAgICAgICBlXFxuU0ZYIEQgICB5ICAgICBpZWQgICAgICAgIFteYWVpb3VdeVxcblNGWCBEICAgMCAgICAgZWQgICAgICAgICBbXmV5XVxcblNGWCBEICAgMCAgICAgZWQgICAgICAgICBbYWVpb3VdeVxcblxcblNGWCBUIE4gNFxcblNGWCBUICAgMCAgICAgc3QgICAgICAgICBlXFxuU0ZYIFQgICB5ICAgICBpZXN0ICAgICAgIFteYWVpb3VdeVxcblNGWCBUICAgMCAgICAgZXN0ICAgICAgICBbYWVpb3VdeVxcblNGWCBUICAgMCAgICAgZXN0ICAgICAgICBbXmV5XVxcblxcblNGWCBSIFkgNFxcblNGWCBSICAgMCAgICAgciAgICAgICAgICBlXFxuU0ZYIFIgICB5ICAgICBpZXIgICAgICAgIFteYWVpb3VdeVxcblNGWCBSICAgMCAgICAgZXIgICAgICAgICBbYWVpb3VdeVxcblNGWCBSICAgMCAgICAgZXIgICAgICAgICBbXmV5XVxcblxcblNGWCBaIFkgNFxcblNGWCBaICAgMCAgICAgcnMgICAgICAgICBlXFxuU0ZYIFogICB5ICAgICBpZXJzICAgICAgIFteYWVpb3VdeVxcblNGWCBaICAgMCAgICAgZXJzICAgICAgICBbYWVpb3VdeVxcblNGWCBaICAgMCAgICAgZXJzICAgICAgICBbXmV5XVxcblxcblNGWCBTIFkgNFxcblNGWCBTICAgeSAgICAgaWVzICAgICAgICBbXmFlaW91XXlcXG5TRlggUyAgIDAgICAgIHMgICAgICAgICAgW2FlaW91XXlcXG5TRlggUyAgIDAgICAgIGVzICAgICAgICAgW3N4emhdXFxuU0ZYIFMgICAwICAgICBzICAgICAgICAgIFtec3h6aHldXFxuXFxuU0ZYIFAgWSAzXFxuU0ZYIFAgICB5ICAgICBpbmVzcyAgICAgIFteYWVpb3VdeVxcblNGWCBQICAgMCAgICAgbmVzcyAgICAgICBbYWVpb3VdeVxcblNGWCBQICAgMCAgICAgbmVzcyAgICAgICBbXnldXFxuXFxuU0ZYIE0gWSAxXFxuU0ZYIE0gICAwICAgICAncyAgICAgICAgIC5cXG5cXG5TRlggQiBZIDNcXG5TRlggQiAgIDAgICAgIGFibGUgICAgICAgW15hZWlvdV1cXG5TRlggQiAgIDAgICAgIGFibGUgICAgICAgZWVcXG5TRlggQiAgIGUgICAgIGFibGUgICAgICAgW15hZWlvdV1lXFxuXFxuU0ZYIEwgWSAxXFxuU0ZYIEwgICAwICAgICBtZW50ICAgICAgIC5cXG5cXG5SRVAgOTBcXG5SRVAgYSBlaVxcblJFUCBlaSBhXFxuUkVQIGEgZXlcXG5SRVAgZXkgYVxcblJFUCBhaSBpZVxcblJFUCBpZSBhaVxcblJFUCBhbG90IGFfbG90XFxuUkVQIGFyZSBhaXJcXG5SRVAgYXJlIGVhclxcblJFUCBhcmUgZWlyXFxuUkVQIGFpciBhcmVcXG5SRVAgYWlyIGVyZVxcblJFUCBlcmUgYWlyXFxuUkVQIGVyZSBlYXJcXG5SRVAgZXJlIGVpclxcblJFUCBlYXIgYXJlXFxuUkVQIGVhciBhaXJcXG5SRVAgZWFyIGVyZVxcblJFUCBlaXIgYXJlXFxuUkVQIGVpciBlcmVcXG5SRVAgY2ggdGVcXG5SRVAgdGUgY2hcXG5SRVAgY2ggdGlcXG5SRVAgdGkgY2hcXG5SRVAgY2ggdHVcXG5SRVAgdHUgY2hcXG5SRVAgY2ggc1xcblJFUCBzIGNoXFxuUkVQIGNoIGtcXG5SRVAgayBjaFxcblJFUCBmIHBoXFxuUkVQIHBoIGZcXG5SRVAgZ2ggZlxcblJFUCBmIGdoXFxuUkVQIGkgaWdoXFxuUkVQIGlnaCBpXFxuUkVQIGkgdXlcXG5SRVAgdXkgaVxcblJFUCBpIGVlXFxuUkVQIGVlIGlcXG5SRVAgaiBkaVxcblJFUCBkaSBqXFxuUkVQIGogZ2dcXG5SRVAgZ2cgalxcblJFUCBqIGdlXFxuUkVQIGdlIGpcXG5SRVAgcyB0aVxcblJFUCB0aSBzXFxuUkVQIHMgY2lcXG5SRVAgY2kgc1xcblJFUCBrIGNjXFxuUkVQIGNjIGtcXG5SRVAgayBxdVxcblJFUCBxdSBrXFxuUkVQIGt3IHF1XFxuUkVQIG8gZWF1XFxuUkVQIGVhdSBvXFxuUkVQIG8gZXdcXG5SRVAgZXcgb1xcblJFUCBvbyBld1xcblJFUCBldyBvb1xcblJFUCBldyB1aVxcblJFUCB1aSBld1xcblJFUCBvbyB1aVxcblJFUCB1aSBvb1xcblJFUCBldyB1XFxuUkVQIHUgZXdcXG5SRVAgb28gdVxcblJFUCB1IG9vXFxuUkVQIHUgb2VcXG5SRVAgb2UgdVxcblJFUCB1IGlldVxcblJFUCBpZXUgdVxcblJFUCB1ZSBld1xcblJFUCBldyB1ZVxcblJFUCB1ZmYgb3VnaFxcblJFUCBvbyBpZXVcXG5SRVAgaWV1IG9vXFxuUkVQIGllciBlYXJcXG5SRVAgZWFyIGllclxcblJFUCBlYXIgYWlyXFxuUkVQIGFpciBlYXJcXG5SRVAgdyBxdVxcblJFUCBxdSB3XFxuUkVQIHogc3NcXG5SRVAgc3MgelxcblJFUCBzaHVuIHRpb25cXG5SRVAgc2h1biBzaW9uXFxuUkVQIHNodW4gY2lvblxcblJFUCBzaXplIGNpc2VcIixkaWM6XCI0OTU2OFxcbjAvbm1cXG4wdGgvcHRcXG4xL24xXFxuMXN0L3BcXG4xdGgvdGNcXG4yL25tXFxuMm5kL3BcXG4ydGgvdGNcXG4zL25tXFxuM3JkL3BcXG4zdGgvdGNcXG40L25tXFxuNHRoL3B0XFxuNS9ubVxcbjV0aC9wdFxcbjYvbm1cXG42dGgvcHRcXG43L25tXFxuN3RoL3B0XFxuOC9ubVxcbjh0aC9wdFxcbjkvbm1cXG45dGgvcHRcXG5BL1NNXFxuQUEvTVxcbkFBQVxcbkFCL01cXG5BQkFcXG5BQkMvU01cXG5BQk0vU01cXG5BQlNcXG5BQy9NXFxuQUNMVS9NXFxuQUNUXFxuQUNUSC9NXFxuQUQvTVxcbkFEQ1xcbkFERFxcbkFETVxcbkFEUC9NXFxuQUZcXG5BRkFJS1xcbkFGQlxcbkFGQy9NXFxuQUZEQ1xcbkFGTlxcbkFGVFxcbkFJL1NNXFxuQUlEUy9NXFxuQUtcXG5BTFxcbkFNL01cXG5BTUFcXG5BTUQvTVxcbkFOU0kvU1xcbkFOWlVTL01cXG5BT0wvTVxcbkFQL01cXG5BUEJcXG5BUENcXG5BUElcXG5BUE9cXG5BUFJcXG5BUlxcbkFSQ1xcbkFTQVBcXG5BU0NJSS9TTVxcbkFTTC9NXFxuQVNQQ0FcXG5BVE0vTVxcbkFUUC9NXFxuQVRWXFxuQVZcXG5BVklcXG5BV0FDUy9NXFxuQVdPTC9NXFxuQVdTL01cXG5BWi9NXFxuQVpUL01cXG5BYWNoZW4vTVxcbkFhbGl5YWgvTVxcbkFhcm9uL01cXG5BYmJhcy9NXFxuQWJiYXNpZC9NXFxuQWJib3R0L01cXG5BYmJ5L01cXG5BYmR1bC9NXFxuQWJlL01cXG5BYmVsL01cXG5BYmVsYXJkL01cXG5BYmVsc29uL01cXG5BYmVyZGVlbi9NXFxuQWJlcm5hdGh5L01cXG5BYmlkamFuL01cXG5BYmlnYWlsL01cXG5BYmlsZW5lL01cXG5BYm5lci9NXFxuQWJvcmlnaW5lL01TXFxuQWJyYWhhbS9NXFxuQWJyYW0vTVNcXG5BYnJhbXMvTVxcbkFic2Fsb20vTVxcbkFidWphL01cXG5BYnlzc2luaWEvTVxcbkFieXNzaW5pYW4vTVxcbkFjL01cXG5BY2FkaWEvTVxcbkFjYXB1bGNvL01cXG5BY2NlbnR1cmUvTVxcbkFjY3JhL01cXG5BY2V2ZWRvL01cXG5BY2hhZWFuL01cXG5BY2hlYmUvTVxcbkFjaGVybmFyL01cXG5BY2hlc29uL01cXG5BY2hpbGxlcy9NXFxuQWNvbmNhZ3VhL01cXG5BY29zdGEvTVxcbkFjcm9wb2xpc1xcbkFjcnV4L01cXG5BY3RhZW9uL01cXG5BY3Rvbi9NXFxuQWN0cy9NXFxuQWN1ZmYvTVxcbkFkYS9TTVxcbkFkYW0vU01cXG5BZGFtcy9NXFxuQWRhbi9NXFxuQWRhbmEvTVxcbkFkYXIvTVxcbkFkZGFtcy9NXFxuQWRkZXJsZXkvTVxcbkFkZGllL01cXG5BZGRpc29uL01cXG5BZGVsYS9NXFxuQWRlbGFpZGUvTVxcbkFkZWxlL01cXG5BZGVsaW5lL01cXG5BZGVuL01cXG5BZGVuYXVlci9NXFxuQWRoYXJhL01cXG5BZGlkYXMvTVxcbkFkaXJvbmRhY2svU01cXG5BZGlyb25kYWNrcy9NXFxuQWRraW5zL01cXG5BZGxlci9NXFxuQWRtXFxuQWRtaXJhbHR5XFxuQWRvbGYvTVxcbkFkb2xmby9NXFxuQWRvbHBoL01cXG5BZG9uaXMvTVNcXG5BZHJlbmFsaW4vTVNcXG5BZHJpYW4vTVxcbkFkcmlhbmEvTVxcbkFkcmlhdGljL01cXG5BZHJpZW5uZS9NXFxuQWR2ZW50L01TXFxuQWR2ZW50aXN0L01TXFxuQWR2aWwvTVxcbkFlZ2Vhbi9NXFxuQWVsZnJpYy9NXFxuQWVuZWFzL01cXG5BZW5laWQvTVxcbkFlb2x1cy9NXFxuQWVyb2Zsb3QvTVxcbkFlc2NoeWx1cy9NXFxuQWVzY3VsYXBpdXMvTVxcbkFlc29wL01cXG5BZmdoYW4vU01cXG5BZmdoYW5pL01cXG5BZmdoYW5pc3Rhbi9NXFxuQWZyXFxuQWZyaWNhL01cXG5BZnJpY2FuL1NNXFxuQWZyaWthYW5zL01cXG5BZnJpa2FuZXIvU01cXG5BZnJvL1NNXFxuQWZyb2NlbnRyaWNcXG5BZnJvY2VudHJpc20vTVxcbkFnL01cXG5BZ2FtZW1ub24vTVxcbkFnYW5hXFxuQWdhc3NpL01cXG5BZ2Fzc2l6L01cXG5BZ2F0aGEvTVxcbkFnZ2llL01cXG5BZ2xhaWEvTVxcbkFnbmVzL01cXG5BZ25ldy9NXFxuQWduaS9NXFxuQWdyYS9NXFxuQWdyaWNvbGEvTVxcbkFncmlwcGEvTVxcbkFncmlwcGluYS9NXFxuQWd1YWRpbGxhL01cXG5BZ3Vhc2NhbGllbnRlc1xcbkFndWlsYXIvTVxcbkFndWluYWxkby9NXFxuQWd1aXJyZS9NXFxuQWd1c3Rpbi9NXFxuQWhhYi9NXFxuQWhtYWQvTVxcbkFobWFkYWJhZC9NXFxuQWhtYWRpbmVqYWQvTVxcbkFobWVkL01cXG5BaHJpbWFuL01cXG5BaWRhL01cXG5BaWtlbi9NXFxuQWlsZWVuL01cXG5BaW1lZS9NXFxuQWludS9NXFxuQWlyZWRhbGUvTVNcXG5BaXJlcy9NXFxuQWlzaGEvTVxcbkFqYXgvTVxcbkFrYmFyL01cXG5Ba2htYXRvdmEvTVxcbkFraWhpdG8vTVxcbkFraXRhL01cXG5Ba2l2YS9NXFxuQWtrYWQvTVxcbkFrcm9uL01cXG5BbC9NXFxuQWxhL1NcXG5BbGFiYW1hL01cXG5BbGFiYW1hbi9NU1xcbkFsYWJhbWlhbi9TTVxcbkFsYWRkaW4vTVxcbkFsYW1vL01cXG5BbGFtb2dvcmRvL01cXG5BbGFuL01cXG5BbGFuYS9NXFxuQWxhci9NXFxuQWxhcmljL01cXG5BbGFza2EvTVxcbkFsYXNrYW4vTVNcXG5BbGJhL01cXG5BbGJhbmlhL01cXG5BbGJhbmlhbi9NU1xcbkFsYmFueS9NXFxuQWxiZWUvTVxcbkFsYmVyaW8vTVxcbkFsYmVydC9NXFxuQWxiZXJ0YS9NXFxuQWxiZXJ0YW5cXG5BbGJlcnRvL01cXG5BbGJpZ2Vuc2lhbi9NXFxuQWxiaW9uL01cXG5BbGJpcmVvL01cXG5BbGJ1cXVlcnF1ZS9NXFxuQWxjYXRyYXovTVxcbkFsY2VzdGlzL01cXG5BbGNpYmlhZGVzL01cXG5BbGNpbmRvci9NXFxuQWxjbWVuYS9NXFxuQWxjb2EvTVxcbkFsY290dC9NXFxuQWxjdWluL01cXG5BbGN5b25lL01cXG5BbGRhbi9NXFxuQWxkZWJhcmFuL01cXG5BbGRlbi9NXFxuQWxkZXJhbWluL01cXG5BbGRvL01cXG5BbGRyaW4vTVxcbkFsZWMvTVxcbkFsZWljaGVtL01cXG5BbGVqYW5kcmEvTVxcbkFsZWphbmRyby9NXFxuQWxlbWJlcnQvTVxcbkFsZXBwby9NXFxuQWxldXQvTVNcXG5BbGV1dGlhbi9TTVxcbkFsZXgvTVxcbkFsZXhhbmRlci9NU1xcbkFsZXhhbmRyYS9NXFxuQWxleGFuZHJpYS9NXFxuQWxleGFuZHJpYW5cXG5BbGV4ZWkvTVxcbkFsZXhpcy9NXFxuQWxmb25zby9NXFxuQWxmb256by9NXFxuQWxmb3JkL01cXG5BbGZyZWQvTVxcbkFsZnJlZGEvTVxcbkFsZnJlZG8vTVxcbkFsZ2VuaWIvTVxcbkFsZ2VyL01cXG5BbGdlcmlhL01cXG5BbGdlcmlhbi9TTVxcbkFsZ2llYmEvTVxcbkFsZ2llcnMvTVxcbkFsZ29sL01cXG5BbGdvbnF1aWFuL1NNXFxuQWxnb25xdWluL01TXFxuQWxoYW1icmEvTVxcbkFsaGVuYS9NXFxuQWxpL01cXG5BbGljZS9NXFxuQWxpY2lhL01cXG5BbGlnaGllcmkvTVxcbkFsaW5lL01cXG5BbGlvdGgvTVxcbkFsaXNhL01cXG5BbGlzaGEvTVxcbkFsaXNvbi9NXFxuQWxpc3NhL01cXG5BbGlzdGFpci9NXFxuQWxrYWlkL01cXG5BbGxhaC9NXFxuQWxsYWhhYmFkL01cXG5BbGxhbi9NXFxuQWxsZWdoZW5pZXMvTVxcbkFsbGVnaGVueS9TTVxcbkFsbGVncmEvTVxcbkFsbGVuL01cXG5BbGxlbmRlL01cXG5BbGxlbnRvd24vTVxcbkFsbGhhbGxvd3MvTVxcbkFsbGllL01TXFxuQWxsaXNvbi9NXFxuQWxsc3RhdGUvTVxcbkFsbHlzb24vTVxcbkFsbWEvTVxcbkFsbWFjaC9NXFxuQWxtYXR5L01cXG5BbG1pZ2h0eS9NXFxuQWxtb2hhZC9NXFxuQWxtb3JhdmlkL01cXG5BbG5pbGFtL01cXG5BbG5pdGFrL01cXG5BbG9uem8vTVxcbkFscGVydC9NXFxuQWxwaGFyZC9NXFxuQWxwaGVjY2EvTVxcbkFscGhlcmF0ei9NXFxuQWxwaG9uc2UvTVxcbkFscGhvbnNvL01cXG5BbHBpbmUvTVxcbkFscG8vTVxcbkFscHMvTVxcbkFsc2FjZS9NXFxuQWxzYXRpYW4vU01cXG5BbHNvcC9NXFxuQWxzdG9uL01cXG5BbHRhL01cXG5BbHRhYmEvTVxcbkFsdGFpL01cXG5BbHRhaWMvTVxcbkFsdGFpci9NXFxuQWx0YW1pcmEvTVxcbkFsdGhlYS9NXFxuQWx0aXBsYW5vL01cXG5BbHRtYW4vTVxcbkFsdG9pZHMvTVxcbkFsdG9uL01cXG5BbHRvb25hL01cXG5BbHVkcmEvTVxcbkFsdmEvTVxcbkFsdmFyYWRvL01cXG5BbHZhcmV6L01cXG5BbHZhcm8vTVxcbkFsdmluL01cXG5BbHljZS9NXFxuQWx5c29uL01cXG5BbHlzc2EvTVxcbkFsemhlaW1lci9NXFxuQW0vTU5SXFxuQW1hZGV1cy9NXFxuQW1hZG8vTVxcbkFtYWxpYS9NXFxuQW1hbmRhL01cXG5BbWFyaWxsby9NXFxuQW1hcnUvTVxcbkFtYXRlcmFzdS9NXFxuQW1hdGkvTVxcbkFtYXpvbi9TTVxcbkFtYXpvbmlhblxcbkFtYmVyL01cXG5BbWVsaWEvTVxcbkFtZW4vTVxcbkFtZW5ob3RlcC9NXFxuQW1lcmFzaWFuL01cXG5BbWVyaWNhL1NNXFxuQW1lcmljYW4vTVNcXG5BbWVyaWNhbmEvTVxcbkFtZXJpY2FuaXNtL01TXFxuQW1lcmljYW5pemF0aW9uL01TXFxuQW1lcmljYW5pemUvR0RTXFxuQW1lcmluZC9TTVxcbkFtZXJpbmRpYW4vTVNcXG5BbWVzL01cXG5BbWVzbGFuL01cXG5BbWdlbi9NXFxuQW1oYXJpYy9NXFxuQW1oZXJzdC9NXFxuQW1pZS9NXFxuQW1pZ2EvTVxcbkFtaXNoL01cXG5BbW1hbi9NXFxuQW1vY28vTVxcbkFtb3MvTVxcbkFtcGFyby9NXFxuQW1wZXJlL01cXG5BbXJpdHNhci9NXFxuQW1zdGVyZGFtL01cXG5BbXRyYWsvTVxcbkFtdW5kc2VuL01cXG5BbXVyL01cXG5BbXdheS9NXFxuQW15L01cXG5BbmEvTVxcbkFuYWJhcHRpc3QvTVxcbkFuYWJlbC9NXFxuQW5hY2luL01cXG5BbmFjcmVvbi9NXFxuQW5haGVpbS9NXFxuQW5hbGVjdHMvTVxcbkFuYW5pYXMvTVxcbkFuYXNhemkvTVxcbkFuYXN0YXNpYS9NXFxuQW5hdG9sZS9NXFxuQW5hdG9saWEvTVxcbkFuYXRvbGlhbi9NXFxuQW5heGFnb3Jhcy9NXFxuQW5jaG9yYWdlL01cXG5BbmRhbHVzaWEvTVxcbkFuZGFsdXNpYW4vTVxcbkFuZGFtYW4vTVxcbkFuZGVhbi9NXFxuQW5kZXJzZW4vTVxcbkFuZGVyc29uL01cXG5BbmRlcy9NXFxuQW5kb3JyYS9NXFxuQW5kb3JyYW4vU01cXG5BbmRyZS9NU1xcbkFuZHJlYS9NXFxuQW5kcmVpL01cXG5BbmRyZXMvTVxcbkFuZHJldHRpL01cXG5BbmRyZXcvU01cXG5BbmRyZXdzL01cXG5BbmRyaWFuYW1wb2luaW1lcmluYS9NXFxuQW5kcm9pZC9NXFxuQW5kcm9tYWNoZS9NXFxuQW5kcm9tZWRhL01cXG5BbmRyb3Bvdi9NXFxuQW5keS9NXFxuQW5nYXJhL01cXG5BbmdlbC9NXFxuQW5nZWxhL01cXG5BbmdlbGVzL01cXG5BbmdlbGlhL01cXG5BbmdlbGljYS9NXFxuQW5nZWxpY28vTVxcbkFuZ2VsaW5hL01cXG5BbmdlbGluZS9NXFxuQW5nZWxpcXVlL01cXG5BbmdlbGl0YS9NXFxuQW5nZWxvL01cXG5BbmdlbG91L01cXG5BbmdldmluL01cXG5BbmdpZS9NXFxuQW5na29yL01cXG5BbmdsZS9NU1xcbkFuZ2xldG9uL01cXG5BbmdsaWEvTVxcbkFuZ2xpY2FuL1NNXFxuQW5nbGljYW5pc20vTVNcXG5BbmdsaWNpc20vTVNcXG5BbmdsaWNpemF0aW9uXFxuQW5nbGljaXplXFxuQW5nbG8vTVxcbkFuZ2xvcGhpbGUvTVxcbkFuZ2xvcGhvYmVcXG5BbmdvbGEvTVxcbkFuZ29sYW4vTVNcXG5BbmdvcmEvU01cXG5BbmdzdHJvbS9NXFxuQW5ndWlsbGEvTVxcbkFuZ3VzL01cXG5Bbmh1aS9NXFxuQW5pYWtjaGFrL01cXG5BbmliYWwvTVxcbkFuaXRhL01cXG5BbmthcmEvTVxcbkFubi9NXFxuQW5uYS9NXFxuQW5uYWJlbC9NXFxuQW5uYWJlbGxlL01cXG5Bbm5hbS9NXFxuQW5uYXBvbGlzL01cXG5Bbm5hcHVybmEvTVxcbkFubmUvTVxcbkFubmV0dGUvTVxcbkFubmllL01cXG5Bbm5pc3Rvbi9NXFxuQW5ubWFyaWUvTVxcbkFubnVuY2lhdGlvbi9TTVxcbkFub3VpbGgvTVxcbkFuc2VsbS9NXFxuQW5zZWxtby9NXFxuQW5zaGFuL01cXG5BbnRhZXVzL01cXG5BbnRhbmFuYXJpdm8vTVxcbkFudGFyY3RpYy9NXFxuQW50YXJjdGljYS9NXFxuQW50YXJlcy9NXFxuQW50aG9ueS9NXFxuQW50aHJvcG9jZW5lXFxuQW50aWNocmlzdC9TTVxcbkFudGlldGFtL01cXG5BbnRpZmEvTVxcbkFudGlnb25lL01cXG5BbnRpZ3VhL01cXG5BbnRpbGxlYW5cXG5BbnRpbGxlcy9NXFxuQW50aW9jaC9NXFxuQW50aXBhcy9NXFxuQW50aXBvZGVzXFxuQW50b2ZhZ2FzdGEvTVxcbkFudG9pbmUvTVxcbkFudG9pbmV0dGUvTVxcbkFudG9uL01cXG5BbnRvbmUvTVxcbkFudG9uaWEvTVxcbkFudG9uaW51cy9NXFxuQW50b25pby9NXFxuQW50b25pdXMvTVxcbkFudG9ueS9NXFxuQW50d2FuL01cXG5BbnR3ZXJwL01cXG5BbnViaXMvTVxcbkFuemFjL01cXG5BcGFjaGUvU01cXG5BcGFsYWNoaWNvbGEvTVxcbkFwYXRvc2F1cnVzXFxuQXBlbm5pbmVzL01cXG5BcGhyb2RpdGUvTVxcbkFwaWEvTVxcbkFwb2NhbHlwc2UvTVxcbkFwb2NyeXBoYS9NXFxuQXBvbGxpbmFpcmUvTVxcbkFwb2xsby9TTVxcbkFwb2xsb25pYW4vTVxcbkFwb3N0bGUvTVxcbkFwcGFsYWNoaWEvTVxcbkFwcGFsYWNoaWFuL1NNXFxuQXBwYWxhY2hpYW5zL01cXG5BcHBhbG9vc2EvU01cXG5BcHBsZS9NXFxuQXBwbGVzZWVkL01cXG5BcHBsZXRvbi9NXFxuQXBwb21hdHRveC9NXFxuQXByL01cXG5BcHJpbC9NU1xcbkFwdWxlaXVzL01cXG5BcXVhZnJlc2gvTVxcbkFxdWFyaWFuXFxuQXF1YXJpdXMvTVNcXG5BcXVpbGEvTVxcbkFxdWluYXMvTVxcbkFxdWluby9NXFxuQXF1aXRhaW5lL01cXG5Bci9NXFxuQXJhL01cXG5BcmFiL1NNXFxuQXJhYmlhL01cXG5BcmFiaWFuL01TXFxuQXJhYmljL01cXG5BcmFiaXN0L01TXFxuQXJhYnkvTVxcbkFyYWNlbGkvTVxcbkFyYWZhdC9NXFxuQXJhZ29uXFxuQXJhZ3VheWEvTVxcbkFyYWwvTVxcbkFyYW1haWMvTVxcbkFyYW1jby9NXFxuQXJhcGFoby9NU1xcbkFyYXBhaG9lc1xcbkFyYXJhdC9NXFxuQXJhdWNhbmlhbi9NXFxuQXJhd2FrL01cXG5BcmF3YWthbi9NXFxuQXJiaXRyb24vTVxcbkFyY2FkaWEvTVxcbkFyY2FkaWFuL01cXG5BcmNoZWFuL01cXG5BcmNoaWJhbGQvTVxcbkFyY2hpZS9NXFxuQXJjaGltZWRlcy9NXFxuQXJjdGljL01cXG5BcmN0dXJ1cy9NXFxuQXJkYWJpbFxcbkFyZGVuL01cXG5BcmR1aW5vL01cXG5BcmVjaWJvL01cXG5BcmVxdWlwYS9NXFxuQXJlcy9NXFxuQXJnZW50aW5hL01cXG5BcmdlbnRpbmUvTVxcbkFyZ2VudGluZWFuXFxuQXJnZW50aW5pYW4vTVNcXG5BcmdvL1NNXFxuQXJnb25hdXQvTVNcXG5Bcmdvbm5lL01cXG5Bcmdvcy9NXFxuQXJndXMvTVxcbkFyaWFkbmUvTVxcbkFyaWFuaXNtL01cXG5BcmllbC9NXFxuQXJpZXMvTVNcXG5Bcmlvc3RvL01cXG5BcmlzdGFyY2h1cy9NXFxuQXJpc3RpZGVzL01cXG5BcmlzdG9waGFuZXMvTVxcbkFyaXN0b3RlbGlhbi9NXFxuQXJpc3RvdGxlL01cXG5Bcml1cy9NXFxuQXJpelxcbkFyaXpvbmEvTVxcbkFyaXpvbmFuL1NNXFxuQXJpem9uaWFuL01TXFxuQXJqdW5hL01cXG5BcmsvTVxcbkFya2Fuc2FuL01TXFxuQXJrYW5zYXMvTVxcbkFya2hhbmdlbHNrL01cXG5Bcmt3cmlnaHQvTVxcbkFybGVuZS9NXFxuQXJsaW5lL01cXG5Bcmxpbmd0b24vTVxcbkFybWFnZWRkb24vU01cXG5Bcm1hZ25hYy9NXFxuQXJtYW5kL01cXG5Bcm1hbmRvL01cXG5Bcm1hbmkvTVxcbkFybWVuaWEvTVxcbkFybWVuaWFuL1NNXFxuQXJtaW5pdXMvTVxcbkFybW9uay9NXFxuQXJtb3VyL01cXG5Bcm1zdHJvbmcvTVxcbkFybmViL01cXG5Bcm5oZW0vTVxcbkFybm8vTVxcbkFybm9sZC9NXFxuQXJudWxmby9NXFxuQXJvbi9NXFxuQXJyaGVuaXVzL01cXG5BcnJvbi9NXFxuQXJ0L01cXG5BcnRheGVyeGVzL01cXG5BcnRlbWlzL01cXG5BcnRodXIvTVxcbkFydGh1cmlhbi9NXFxuQXJ0aWUvTVxcbkFydHVyby9NXFxuQXJ1YmEvTVxcbkFyeWFuL01TXFxuQXMvTVxcbkFzYW1hL01cXG5Bc2NlbGxhL01cXG5Bc2NlbnNpb24vTVxcbkFzZ2FyZC9NXFxuQXNoYW50aS9NXFxuQXNoY3JvZnQvTVxcbkFzaGUvTVxcbkFzaGV2aWxsZS9NXFxuQXNoZ2FiYXRcXG5Bc2hpa2FnYS9NXFxuQXNoa2VuYXppbS9NXFxuQXNoa2hhYmFkL01cXG5Bc2hsZWUvTVxcbkFzaGxleS9NXFxuQXNobW9sZWFuL01cXG5Bc2h1cmJhbmlwYWwvTVxcbkFzaWEvTVxcbkFzaWFnb1xcbkFzaWFuL01TXFxuQXNpYXRpYy9TTVxcbkFzaW1vdi9NXFxuQXNtYXJhL01cXG5Bc29rYS9NXFxuQXNwZWxsL01cXG5Bc3Blbi9NXFxuQXNwZXJnZXIvTVxcbkFzcGlkaXNrZS9NXFxuQXNxdWl0aC9NXFxuQXNzYWQvTVxcbkFzc2FtL01cXG5Bc3NhbWVzZS9NXFxuQXNzZW1ibHlcXG5Bc3Npc2kvTVxcbkFzc3lyaWEvTVxcbkFzc3lyaWFuL1NNXFxuQXN0YWlyZS9NXFxuQXN0YW5hL01cXG5Bc3RhcnRlL01cXG5Bc3Rvbi9NXFxuQXN0b3IvTVxcbkFzdG9yaWEvTVxcbkFzdHJha2hhbi9NXFxuQXN0cm9UdXJmL01cXG5Bc3R1cmlhcy9NXFxuQXN1bmNpb24vTVxcbkFzd2FuL01cXG5BdC9TTVxcbkF0YWNhbWEvTVxcbkF0YWh1YWxwYS9NXFxuQXRhbGFudGEvTVxcbkF0YXJpL01cXG5BdGFzY2FkZXJvL01cXG5BdGF0dXJrL01cXG5BdGhhYmFzY2EvTVxcbkF0aGFiYXNrYW4vU01cXG5BdGhhbmFzaXVzXFxuQXRoZW5hL01cXG5BdGhlbmUvTVxcbkF0aGVuaWFuL1NNXFxuQXRoZW5zL01cXG5BdGtpbnMvTVxcbkF0a2luc29uL01cXG5BdGxhbnRhL01cXG5BdGxhbnRlc1xcbkF0bGFudGljL01cXG5BdGxhbnRpcy9NXFxuQXRsYXMvTVNcXG5BdG1hbi9NXFxuQXRvbmVtZW50XFxuQXRyZXVzL01cXG5BdHJpYS9NXFxuQXRyb3Bvcy9NXFxuQXR0aWMvTVxcbkF0dGljYS9NXFxuQXR0aWxhL01cXG5BdHRsZWUvTVxcbkF0dG5cXG5BdHR1Y2tzL01cXG5BdHdvb2QvTVxcbkF1L01cXG5BdWJyZXkvTVxcbkF1YnVybi9NXFxuQXVja2xhbmQvTVxcbkF1ZGVuL01cXG5BdWRpL01cXG5BdWRpb24vTVxcbkF1ZHJhL01cXG5BdWRyZXkvTVxcbkF1ZHVib24vTVxcbkF1Zy9NXFxuQXVnZWFuL01cXG5BdWdzYnVyZy9NXFxuQXVndXN0L01TXFxuQXVndXN0YS9NXFxuQXVndXN0YW4vTVxcbkF1Z3VzdGluZS9NXFxuQXVndXN0aW5pYW4vTVNcXG5BdWd1c3R1cy9NXFxuQXVyYW5nemViL01cXG5BdXJlbGlhL01cXG5BdXJlbGlvL01cXG5BdXJlbGl1cy9NXFxuQXVyZW9teWNpbi9NXFxuQXVyaWdhL01cXG5BdXJvcmEvTVxcbkF1c2Nod2l0ei9NXFxuQXVzc2llL01TXFxuQXVzdGVuL01cXG5BdXN0ZXJsaXR6L01cXG5BdXN0aW4vTVNcXG5BdXN0cmFsYXNpYS9NXFxuQXVzdHJhbGFzaWFuXFxuQXVzdHJhbGlhL01cXG5BdXN0cmFsaWFuL1NNXFxuQXVzdHJhbG9pZC9NXFxuQXVzdHJhbG9waXRoZWN1cy9NXFxuQXVzdHJpYS9NXFxuQXVzdHJpYW4vU01cXG5BdXN0cm9uZXNpYW4vTVxcbkF1dHVtbi9NXFxuQXYvTVxcbkF2YS9NXFxuQXZhbG9uL01cXG5BdmUvTVxcbkF2ZW50aW5lL01cXG5BdmVybnVzL01cXG5BdmVycm9lcy9NXFxuQXZlcnkvTVxcbkF2ZXN0YS9NXFxuQXZpY2VubmEvTVxcbkF2aWdub24vTVxcbkF2aWxhL01cXG5Bdmlvci9NXFxuQXZpcy9NXFxuQXZvZ2Fkcm8vTVxcbkF2b24vTVxcbkF2b25kYWxlL01cXG5BeGlzXFxuQXh1bS9NXFxuQXlhbGEvTVxcbkF5ZXJzL01cXG5BeW1hcmEvTVxcbkF5cnNoaXJlL01cXG5BeXVydmVkYS9NXFxuQXl5dWJpZC9NXFxuQXphbmEvTVxcbkF6YW5pYS9NXFxuQXphemVsL01cXG5BemVyYmFpamFuL01cXG5BemVyYmFpamFuaS9NU1xcbkF6b3Jlcy9NXFxuQXpvdi9NXFxuQXp0ZWMvU01cXG5BenRlY2FuL01cXG5BenRsYW4vTVxcbkIvTU5UXFxuQkEvTVxcbkJBU0lDL1NNXFxuQkIvTVxcbkJCQi9NXFxuQkJDL01cXG5CQlFcXG5CQlNcXG5CQlNlc1xcbkJDL01cXG5CRkZcXG5CSUFcXG5CSU9TXFxuQklUTkVUXFxuQkxUL1NNXFxuQk0vTVxcbkJNVy9NXFxuQk9cXG5CUC9NXFxuQlBPRVxcbkJSXFxuQlMvTVxcbkJTQVxcbkJTRC9TTVxcbkJUVVxcbkJUV1xcbkJZT0JcXG5CYS9NXFxuQmFhbC9TTVxcbkJhYXRoL01cXG5CYWF0aGlzdC9NXFxuQmFiYmFnZS9NXFxuQmFiYml0dC9NXFxuQmFiZWwvTVNcXG5CYWJ5bG9uL01TXFxuQmFieWxvbmlhL01cXG5CYWJ5bG9uaWFuL1NNXFxuQmFjYWxsL01cXG5CYWNhcmRpL01cXG5CYWNjaGFuYWxpYS9NXFxuQmFjY2hpY1xcbkJhY2NodXMvTVxcbkJhY2gvTVxcbkJhY2t1cy9NXFxuQmFjb24vTVxcbkJhY3RyaWEvTVxcbkJhZGVuL01cXG5CYWRsYW5kcy9NXFxuQmFlZGVrZXIvTVNcXG5CYWV6L01cXG5CYWZmaW4vTVxcbkJhZ2dpZXMvTVxcbkJhZ2hkYWQvTVxcbkJhZ3Vpby9NXFxuQmFoYSdpL01cXG5CYWhhJ3VsbGFoL01cXG5CYWhhbWEvU01cXG5CYWhhbWFuaWFuXFxuQmFoYW1hcy9NXFxuQmFoYW1pYW4vTVNcXG5CYWhpYS9NXFxuQmFocmFpbi9NXFxuQmFpZHUvTVxcbkJhaWthbC9NXFxuQmFpbGV5L01cXG5CYWlyZC9NXFxuQmFrZWxpdGUvTVxcbkJha2VyL01cXG5CYWtlcnNmaWVsZC9NXFxuQmFrdS9NXFxuQmFrdW5pbi9NXFxuQmFsYW5jaGluZS9NXFxuQmFsYXRvbi9NXFxuQmFsYm9hL01cXG5CYWxkZXIvTVxcbkJhbGR3aW4vU01cXG5CYWxlYXJpYy9NXFxuQmFsZm91ci9NXFxuQmFsaS9NXFxuQmFsaW5lc2UvTVxcbkJhbGthbi9NU1xcbkJhbGthbnMvTVxcbkJhbGtoYXNoL01cXG5CYWxsL01cXG5CYWxsYXJkL01cXG5CYWx0aGF6YXIvTVxcbkJhbHRpYy9NXFxuQmFsdGltb3JlL01cXG5CYWx1Y2hpc3Rhbi9NXFxuQmFsemFjL01cXG5CYW1ha28vTVxcbkJhbWJpL01cXG5CYW5hY2gvTVxcbkJhbmNyb2Z0L01cXG5CYW5kdW5nL01cXG5CYW5nYWxvcmUvTVxcbkJhbmdrb2svTVxcbkJhbmdsYWRlc2gvTVxcbkJhbmdsYWRlc2hpL1NNXFxuQmFuZ29yL01cXG5CYW5ndWkvTVxcbkJhbmphcm1hc2luL01cXG5CYW5qdWwvTVxcbkJhbmtzL01cXG5CYW5uZWtlci9NXFxuQmFubmlzdGVyL01cXG5CYW50aW5nL01cXG5CYW50dS9NU1xcbkJhb3RvdS9NXFxuQmFwdGlzdC9TTVxcbkJhcHRpc3RlL01cXG5CYXJhYmJhcy9NXFxuQmFyYWNrL01cXG5CYXJiYWRpYW4vU01cXG5CYXJiYWRvcy9NXFxuQmFyYmFyYS9NXFxuQmFyYmFyZWxsYS9NXFxuQmFyYmFyb3NzYS9NXFxuQmFyYmFyeS9NXFxuQmFyYmVyL01cXG5CYXJiaWUvTVxcbkJhcmJvdXIvTVxcbkJhcmJyYS9NXFxuQmFyYnVkYS9NXFxuQmFyY2Vsb25hL01cXG5CYXJjZWxvbmV0YS9NXFxuQmFyY2xheS9TTVxcbkJhcmNsYXlzL01cXG5CYXJkZWVuL01cXG5CYXJlbnRzL01cXG5CYXJrZXIvTVxcbkJhcmtsZXkvTVxcbkJhcmxvdy9NXFxuQmFybmFiYXMvTVxcbkJhcm5hYnkvTVxcbkJhcm5hcmQvTVxcbkJhcm5hdWwvTVxcbkJhcm5lcy9NXFxuQmFybmV0dC9NXFxuQmFybmV5L01cXG5CYXJudW0vTVxcbkJhcm9kYS9NXFxuQmFycXVpc2ltZXRvL01cXG5CYXJyL01cXG5CYXJyYW5xdWlsbGEvTVxcbkJhcnJlcmEvTVxcbkJhcnJldHQvTVxcbkJhcnJpZS9NXFxuQmFycm9uL01cXG5CYXJyeS9NXFxuQmFycnltb3JlL01cXG5CYXJ0L01cXG5CYXJ0aC9NU1xcbkJhcnRob2xkaS9NXFxuQmFydGhvbG9tZXcvTVxcbkJhcnRsZXR0L01cXG5CYXJ0b2svTVxcbkJhcnRvbi9NXFxuQmFydWNoL01cXG5CYXJ5c2huaWtvdi9NXFxuQmFzZWwvTVxcbkJhc2hvL01cXG5CYXNpZS9NXFxuQmFzaWwvTVxcbkJhc3F1ZS9NU1xcbkJhc3JhL01cXG5CYXNzL01cXG5CYXNzZXRlcnJlL01cXG5CYXN0aWxsZS9NXFxuQmFzdXRvbGFuZC9NXFxuQmF0YWFuL01cXG5CYXRlcy9NXFxuQmF0aHNoZWJhL01cXG5CYXRpc3RhL01cXG5CYXRtYW4vTVxcbkJhdHRsZS9NXFxuQmF0dS9NXFxuQmF1ZGVsYWlyZS9NXFxuQmF1ZG91aW4vTVxcbkJhdWRyaWxsYXJkL01cXG5CYXVlci9NXFxuQmF1aGF1cy9NXFxuQmF1bS9NXFxuQmF2YXJpYS9NXFxuQmF2YXJpYW4vTVxcbkJheHRlci9NXFxuQmF5YW1vblxcbkJheWVyL01cXG5CYXllcy9NXFxuQmF5ZXNpYW4vTVxcbkJheWV1eC9NXFxuQmF5bG9yL01cXG5CYXlvbm5lL01cXG5CYXlyZXV0aC9NXFxuQmF5d2F0Y2gvTVxcbkJlL01IXFxuQmVhY2gvTVxcbkJlYWRsZS9NXFxuQmVhbi9NXFxuQmVhcmQvTVxcbkJlYXJkbW9yZS9NXFxuQmVhcmRzbGV5L01cXG5CZWFybmFpc2UvTVxcbkJlYXNsZXkvTVxcbkJlYXRsZW1hbmlhL01cXG5CZWF0bGVzL01cXG5CZWF0cmljZS9NXFxuQmVhdHJpeC9NXFxuQmVhdHJpei9NXFxuQmVhdHR5L01cXG5CZWF1L01cXG5CZWF1Zm9ydC9NXFxuQmVhdWpvbGFpcy9NXFxuQmVhdW1hcmNoYWlzL01cXG5CZWF1bW9udC9NXFxuQmVhdXJlZ2FyZC9NXFxuQmVhdXZvaXIvTVxcbkJlY2h0ZWwvTVxcbkJlY2svTVJcXG5CZWNrZXIvTVxcbkJlY2tldC9NXFxuQmVja2V0dC9NXFxuQmVja2xleS9NXFxuQmVja21hblxcbkJlY2t5L01cXG5CZWNxdWVyZWwvTVxcbkJlZGUvTVxcbkJlZG91aW4vU01cXG5CZWViZS9NXFxuQmVlY2hlci9NXFxuQmVlZmFyb25pL01cXG5CZWVsemVidWIvTVxcbkJlZXJib2htL01cXG5CZWV0aG92ZW4vTVxcbkJlZXRvbi9NXFxuQmVnaW4vTVxcbkJlaGFuL01cXG5CZWhyaW5nL01cXG5CZWlkZXJiZWNrZS9NXFxuQmVpamluZy9NXFxuQmVpcnV0L01cXG5CZWtlc3kvTVxcbkJlbGEvTVxcbkJlbGFydXMvTVxcbkJlbGFydXNpYW5cXG5CZWxhdS9NXFxuQmVsZW0vTVxcbkJlbGZhc3QvTVxcbkJlbGdcXG5CZWxnaWFuL1NNXFxuQmVsZ2l1bS9NXFxuQmVsZ3JhZGUvTVxcbkJlbGluZGEvTVxcbkJlbGl6ZS9NXFxuQmVsbC9NXFxuQmVsbGEvTVxcbkJlbGxhbXkvTVxcbkJlbGxhdHJpeC9NXFxuQmVsbGVlay9NXFxuQmVsbGluZ2hhbS9NXFxuQmVsbGluaS9NXFxuQmVsbG93L01cXG5CZWxtb250L01cXG5CZWxtb3Bhbi9NXFxuQmVsb2l0L01cXG5CZWxvcnVzc2lhbi9NU1xcbkJlbHNoYXp6YXIvTVxcbkJlbHRhbmUvTVxcbkJlbHVzaGkvTVxcbkJlbi9NXFxuQmVuYWNlcnJhZi9NXFxuQmVuY2hsZXkvTVxcbkJlbmQvTVJcXG5CZW5kZXIvTVxcbkJlbmRpY3R1c1xcbkJlbmRpeC9NXFxuQmVuZWRpY3QvTVxcbkJlbmVkaWN0aW5lL01TXFxuQmVuZWx1eC9NXFxuQmVuZXQvTVxcbkJlbmV0dG9uL01cXG5CZW5nYWwvU01cXG5CZW5nYWxpL01cXG5CZW5naGF6aS9NXFxuQmVuaW4vTVxcbkJlbmluZXNlL01cXG5CZW5pdGEvTVxcbkJlbml0by9NXFxuQmVuamFtaW4vTVxcbkJlbm5ldHQvTVxcbkJlbm5pZS9NXFxuQmVubnkvTVxcbkJlbnNvbi9NXFxuQmVudGhhbS9NXFxuQmVudGxleS9NXFxuQmVudG9uL01cXG5CZW56L01cXG5CZW56ZWRyaW5lL01cXG5CZW93dWxmL01cXG5CZXJiZXIvU01cXG5CZXJlbmljZS9NXFxuQmVyZXR0YS9NXFxuQmVyZy9NTlJcXG5CZXJnZW4vTVxcbkJlcmdlci9NXFxuQmVyZ2VyYWMvTVxcbkJlcmdtYW4vTVxcbkJlcmdzb24vTVxcbkJlcmlhL01cXG5CZXJpbmcvTVxcbkJlcmtlbGV5L01cXG5CZXJrc2hpcmUvU01cXG5CZXJrc2hpcmVzL01cXG5CZXJsZS9NXFxuQmVybGluL1NaTVJcXG5CZXJsaW5lci9NXFxuQmVybGlvei9NXFxuQmVybGl0ei9NXFxuQmVybXVkYS9TTVxcbkJlcm11ZGFuL1NNXFxuQmVybXVkaWFuL1NNXFxuQmVybi9NXFxuQmVybmFkZXR0ZS9NXFxuQmVybmFkaW5lL01cXG5CZXJuYW5rZS9NXFxuQmVybmFyZC9NXFxuQmVybmFyZG8vTVxcbkJlcm5heXMvTVxcbkJlcm5iYWNoL01cXG5CZXJuZXNlXFxuQmVybmhhcmR0L01cXG5CZXJuaWNlL01cXG5CZXJuaWUvTVxcbkJlcm5pbmkvTVxcbkJlcm5vdWxsaS9NXFxuQmVybnN0ZWluL01cXG5CZXJyYS9NXFxuQmVycnkvTVxcbkJlcnQvTVxcbkJlcnRhL01cXG5CZXJ0ZWxzbWFubi9NXFxuQmVydGhhL01cXG5CZXJ0aWUvTVxcbkJlcnRpbGxvbi9NXFxuQmVydHJhbS9NXFxuQmVydHJhbmQvTVxcbkJlcndpY2svTVxcbkJlcnlsL01cXG5CZXJ6ZWxpdXMvTVxcbkJlc3MvTVxcbkJlc3NlbC9NXFxuQmVzc2VtZXIvTVxcbkJlc3NpZS9NXFxuQmVzdC9NXFxuQmV0ZWxnZXVzZS9NXFxuQmV0aC9NXFxuQmV0aGFueS9NXFxuQmV0aGUvTVxcbkJldGhlc2RhL01cXG5CZXRobGVoZW0vTVxcbkJldGh1bmUvTVxcbkJldHN5L01cXG5CZXR0ZS9NXFxuQmV0dGllL01cXG5CZXR0eS9NXFxuQmV0dHllL01cXG5CZXVsYWgvTVxcbkJldmVyaWRnZVxcbkJldmVybGV5L01cXG5CZXZlcmx5L01cXG5CZXllci9NXFxuQmhhcmF0L01cXG5CaG9wYWwvTVxcbkJodXRhbi9NXFxuQmh1dGFuZXNlL01cXG5CaHV0dG8vTVxcbkJpL01cXG5CaWFseXN0b2svTVxcbkJpYW5jYS9NXFxuQmliXFxuQmlibGUvTVNcXG5CaWMvTVxcbkJpZGRsZS9NXFxuQmlkZW4vTVxcbkJpZXJjZS9NXFxuQmlnUXVlcnkvTVxcbkJpZ2Zvb3QvTVxcbkJpZ2dsZXMvTVxcbkJpa28vTVxcbkJpbGJhby9NXFxuQmlsYm8vTVxcbkJpbGwvTUpcXG5CaWxsaWUvTVxcbkJpbGxpbmdzL01cXG5CaWxseS9NXFxuQmltaW5pL01cXG5CaW5naGFtdG9uL01cXG5CaW9nZW4vTVxcbkJpb2tvL01cXG5CaXJkL01cXG5CaXJkc2V5ZS9NXFxuQmlya2Vuc3RvY2svTVxcbkJpcm1pbmdoYW0vTVxcbkJpcm8vTVxcbkJpc2NheS9NXFxuQmlzY2F5bmUvTVxcbkJpc2hrZWsvTVxcbkJpc2hvcC9NXFxuQmlzbWFyY2svTVxcbkJpc21hcmsvTVxcbkJpc3F1aWNrL01cXG5CaXNzYXUvTVxcbkJpdFRvcnJlbnQvTVxcbkJpemV0L01cXG5CamVya25lcy9NXFxuQmpvcmsvTVxcbkJrL01cXG5CbGFja0JlcnJ5L01cXG5CbGFja2JlYXJkL01cXG5CbGFja2J1cm4vTVxcbkJsYWNrZmVldC9NXFxuQmxhY2tmb290L01cXG5CbGFja3Bvb2wvTVxcbkJsYWNrc2J1cmcvTVxcbkJsYWNrc2hpcnQvTVxcbkJsYWNrc3RvbmUvTVxcbkJsYWNrd2VsbC9NXFxuQmxhaW5lL01cXG5CbGFpci9NXFxuQmxha2UvTVxcbkJsYW5jYS9NXFxuQmxhbmNoYXJkL01cXG5CbGFuY2hlL01cXG5CbGFua2Vuc2hpcC9NXFxuQmxhbnR5cmUvTVxcbkJsYXR6L01cXG5CbGF2YXRza3kvTVxcbkJsZW5oZWltL01cXG5CbGV2aW5zL01cXG5CbGlnaC9NXFxuQmxvY2gvTVxcbkJsb2NrYnVzdGVyL01cXG5CbG9lbWZvbnRlaW4vTVxcbkJsb25kZWwvTVxcbkJsb25kaWUvTVxcbkJsb29tL01SXFxuQmxvb21lci9NXFxuQmxvb21maWVsZC9NXFxuQmxvb21pbmdkYWxlL01cXG5CbG9vbWluZ3Rvbi9NXFxuQmxvb21zYnVyZy9NXFxuQmxvb21zYnVyeS9NXFxuQmx1XFxuQmx1Y2hlci9NXFxuQmx1ZWJlYXJkL01cXG5CbHVldG9vdGgvTVxcbkJsdmRcXG5CbHl0aGUvTVxcbkJvYWRpY2VhXFxuQm9hcy9NXFxuQm9iL01cXG5Cb2JiaS9NXFxuQm9iYmllL01cXG5Cb2JiaXR0L01cXG5Cb2JieS9NXFxuQm9jY2FjY2lvL01cXG5Cb2RoaWRoYXJtYS9NXFxuQm9kaGlzYXR0dmEvTVxcbkJvZGxlaWFuXFxuQm9laW5nL01cXG5Cb2VvdGlhL01cXG5Cb2VvdGlhbi9NXFxuQm9lci9TTVxcbkJvZXRoaXVzL01cXG5Cb2dhcnQvTVxcbkJvZ290YS9NXFxuQm9oZW1pYS9NXFxuQm9oZW1pYW4vU01cXG5Cb2hyL01cXG5Cb2lzZS9NXFxuQm9qYW5nbGVzL01cXG5Cb2xleW4vTVxcbkJvbGl2YXIvTVxcbkJvbGl2aWEvTVxcbkJvbGl2aWFuL01TXFxuQm9sbHl3b29kL01cXG5Cb2xvZ25hL01cXG5Cb2xzaGV2aWsvU01cXG5Cb2xzaGV2aWtpXFxuQm9sc2hldmlzbS9NXFxuQm9sc2hldmlzdC9NXFxuQm9sc2hvaS9NXFxuQm9sdG9uL01cXG5Cb2x0em1hbm4vTVxcbkJvbWJheS9NXFxuQm9uYXBhcnRlL01cXG5Cb25hdmVudHVyZS9NXFxuQm9uZC9NXFxuQm9uaG9lZmZlci9NXFxuQm9uaWZhY2UvTVxcbkJvbml0YS9NXFxuQm9ubi9NUlxcbkJvbm5lci9NXFxuQm9ubmV2aWxsZS9NXFxuQm9ubmllL01cXG5Cb25vL01cXG5Cb29rZXIvTVxcbkJvb2xlL01cXG5Cb29sZWFuL01cXG5Cb29uZS9NXFxuQm9vdGVzL01cXG5Cb290aC9NXFxuQm9yZGVhdXgvTVxcbkJvcmRlbi9NXFxuQm9yZG9uL01cXG5Cb3JlYXMvTVxcbkJvcmcvU01cXG5Cb3JnZXMvTVxcbkJvcmdpYS9NXFxuQm9yZ2x1bS9NXFxuQm9yaXMvTVxcbkJvcmsvTVxcbkJvcmxhdWcvTVxcbkJvcm4vTVxcbkJvcm5lby9NXFxuQm9yb2J1ZHVyL01cXG5Cb3JvZGluL01cXG5Cb3J1L01cXG5Cb3NjaC9NXFxuQm9zZS9NXFxuQm9zbmlhL01cXG5Cb3NuaWFuXFxuQm9zcG9ydXMvTVxcbkJvc3Rvbi9NU1xcbkJvc3Rvbmlhbi9NXFxuQm9zd2VsbC9NXFxuQm90aGFcXG5Cb3RveFxcbkJvdHN3YW5hL01cXG5Cb3R0aWNlbGxpL01cXG5Cb3VsZGVyL01cXG5Cb3VsZXovTVxcbkJvdXJiYWtpL01cXG5Cb3VyYm9uL1NNXFxuQm91cm5lbW91dGgvTVxcbkJvdmFyeS9NXFxuQm93ZGl0Y2gvTVxcbkJvd2VsbC9NXFxuQm93ZW4vTVxcbkJvd2Vycy9NXFxuQm93ZXJ5L01cXG5Cb3dpZS9NXFxuQm93bWFuL01cXG5Cb3lkL01cXG5Cb3llci9NXFxuQm95bGUvTVxcbkJyL01UXFxuQnJhZC9NWVxcbkJyYWRidXJ5L01cXG5CcmFkZG9jay9NXFxuQnJhZGVudG9uL01cXG5CcmFkZm9yZC9NXFxuQnJhZGxleS9NXFxuQnJhZGx5L01cXG5CcmFkc2hhdy9NXFxuQnJhZHN0cmVldC9NXFxuQnJhZHkvTVxcbkJyYWdnL01cXG5CcmFoZS9NXFxuQnJhaG1hL01TXFxuQnJhaG1hZ3VwdGEvTVxcbkJyYWhtYW4vTVNcXG5CcmFobWFuaVxcbkJyYWhtYW5pc20vU01cXG5CcmFobWFwdXRyYS9NXFxuQnJhaG1zL01cXG5CcmFpbGxlL01TXFxuQnJhaW4vTVxcbkJyYW1wdG9uL01cXG5CcmFuL01cXG5CcmFuY2gvTVxcbkJyYW5kZWlzL01cXG5CcmFuZGVuL01cXG5CcmFuZGVuYnVyZy9NXFxuQnJhbmRpL01cXG5CcmFuZGllL01cXG5CcmFuZG8vTVxcbkJyYW5kb24vTVxcbkJyYW5kdC9NXFxuQnJhbmR5L01cXG5CcmFudC9NXFxuQnJhcXVlL01cXG5CcmFzaWxpYS9NXFxuQnJhdGlzbGF2YS9NXFxuQnJhdHRhaW4vTVxcbkJyYXkvTVxcbkJyYXppbC9NXFxuQnJhemlsaWFuL01TXFxuQnJhem9zL01cXG5CcmF6emF2aWxsZS9NXFxuQnJlYWtzcGVhci9NXFxuQnJlYXRoYWx5emVyXFxuQnJlY2h0L01cXG5CcmVja2VucmlkZ2UvTVxcbkJyZW1lbi9NXFxuQnJlbWVydG9uL01cXG5CcmVuZGEvTVxcbkJyZW5kYW4vTVxcbkJyZW5uYW4vTVxcbkJyZW5uZXIvTVxcbkJyZW50L01cXG5CcmVudG9uL01cXG5CcmVzdC9NXFxuQnJldC9NXFxuQnJldG9uL01cXG5CcmV0dC9NXFxuQnJld2VyL01cXG5CcmV3c3Rlci9NXFxuQnJleGl0XFxuQnJlemhuZXYvTVxcbkJyaWFuL01cXG5CcmlhbmEvTVxcbkJyaWFubmEvTVxcbkJyaWNlL01cXG5CcmlkYWx2ZWlsL01cXG5CcmlkZ2Vwb3J0L01cXG5CcmlkZ2VyL01cXG5CcmlkZ2VzL01cXG5CcmlkZ2V0L01cXG5CcmlkZ2V0b3duL01cXG5CcmlkZ2V0dC9NXFxuQnJpZGdldHRlL01cXG5CcmlkZ21hbi9NXFxuQnJpZS9TTVxcbkJyaWdhZG9vbi9NXFxuQnJpZ2dzL01cXG5CcmlnaGFtL01cXG5CcmlnaHQvTVxcbkJyaWdodG9uL01cXG5CcmlnaWQvTVxcbkJyaWdpdHRlL01cXG5CcmlsbG8vTVxcbkJyaWxsb3VpblxcbkJyaW5rbGV5L01cXG5CcmlzYmFuZS9NXFxuQnJpc3RvbC9NXFxuQnJpdC9TTVxcbkJyaXRhaW4vTVxcbkJyaXRhbm5pYS9NXFxuQnJpdGFubmljL01cXG5Ccml0YW5uaWNhL01cXG5Ccml0aWNpc20vU01cXG5Ccml0aXNoL01SWlxcbkJyaXRpc2hlci9NXFxuQnJpdG5leS9NXFxuQnJpdG9uL01TXFxuQnJpdHQvTU5cXG5Ccml0dGFueS9TTVxcbkJyaXR0ZW4vTVxcbkJyaXR0bmV5L01cXG5Ccm5vL01cXG5Ccm9hZHdheS9TTVxcbkJyb2JkaW5nbmFnL01cXG5Ccm9iZGluZ25hZ2lhbi9NXFxuQnJvY2svTVxcbkJyb2thdy9NXFxuQnJvbnNvbi9NXFxuQnJvbnRlL01cXG5Ccm9udG9zYXVydXNcXG5Ccm9ueC9NXFxuQnJvb2tlL01TXFxuQnJvb2tseW4vTVxcbkJyb29rcy9NXFxuQnJvc1xcbkJyb3duL01HXFxuQnJvd25lL01cXG5Ccm93bmlhbi9NXFxuQnJvd25pZS9TXFxuQnJvd25pbmcvTVxcbkJyb3duc2hpcnQvTVxcbkJyb3duc3ZpbGxlL01cXG5CcnViZWNrL01cXG5CcnVjZS9NXFxuQnJ1Y2tuZXIvTVxcbkJydWVnZWxcXG5CcnVtbWVsL01cXG5CcnVuZWkvTVxcbkJydW5laWFuL01TXFxuQnJ1bmVsbGVzY2hpL01cXG5CcnVuaGlsZGUvTVxcbkJydW5vL01cXG5CcnVuc3dpY2svTVxcbkJydXNzZWxzL01cXG5CcnV0L01cXG5CcnV0dXMvTVxcbkJyeWFuL01cXG5CcnlhbnQvTVxcbkJyeWNlL01cXG5CcnlubmVyL01cXG5Ccnlvbi9NXFxuQnJ6ZXppbnNraS9NXFxuQnR1L01cXG5CdWJlci9NXFxuQnVjaGFuYW4vTVxcbkJ1Y2hhcmVzdC9NXFxuQnVjaGVud2FsZC9NXFxuQnVjaHdhbGQvTVxcbkJ1Y2svTVxcbkJ1Y2tpbmdoYW0vTVxcbkJ1Y2tsZXkvTVxcbkJ1Y2tuZXIvTVxcbkJ1ZC9NXFxuQnVkYXBlc3QvTVxcbkJ1ZGRoYS9TTVxcbkJ1ZGRoaXNtL1NNXFxuQnVkZGhpc3QvU01cXG5CdWRkeS9NXFxuQnVkd2Vpc2VyL01cXG5CdWZmYWxvL01cXG5CdWZmeS9NXFxuQnVmb3JkL01cXG5CdWdhdHRpL01cXG5CdWd6aWxsYS9NXFxuQnVpY2svTVxcbkJ1anVtYnVyYS9NXFxuQnVraGFyYS9NXFxuQnVraGFyaW4vTVxcbkJ1bGF3YXlvL01cXG5CdWxmaW5jaC9NXFxuQnVsZ2FuaW4vTVxcbkJ1bGdhci9NXFxuQnVsZ2FyaS9NXFxuQnVsZ2FyaWEvTVxcbkJ1bGdhcmlhbi9TTVxcbkJ1bGxvY2svTVxcbkJ1bGx3aW5rbGUvTVxcbkJ1bHRtYW5uL01cXG5CdW1wcG8vTVxcbkJ1bmNoZS9NXFxuQnVuZGVzYmFuay9NXFxuQnVuZGVzdGFnL01cXG5CdW5pbi9NXFxuQnVua2VyL01cXG5CdW5zZW4vTVxcbkJ1bnVlbC9NXFxuQnVueWFuL01cXG5CdXJiYW5rL01cXG5CdXJiZXJyeS9NXFxuQnVyY2gvTVxcbkJ1cmdlci9NXFxuQnVyZ2Vzcy9NXFxuQnVyZ295bmUvTVxcbkJ1cmd1bmRpYW4vTVxcbkJ1cmd1bmR5L1NNXFxuQnVya2UvTVxcbkJ1cmtzL01cXG5CdXJsL01cXG5CdXJsaW5ndG9uL01cXG5CdXJtYS9NXFxuQnVybWVzZS9NXFxuQnVybmV0dC9NXFxuQnVybnMvTVxcbkJ1cm5zaWRlL01cXG5CdXJyL01cXG5CdXJyaXMvTVxcbkJ1cnJvdWdocy9NXFxuQnVyc2EvTVxcbkJ1cnQvTVxcbkJ1cnRvbi9NXFxuQnVydW5kaS9NXFxuQnVydW5kaWFuL01TXFxuQnVzY2gvTVxcbkJ1c2gvTVxcbkJ1c2hpZG8vTVxcbkJ1c2huZWxsL01cXG5CdXRsZXIvTVxcbkJ1dHRlcmZpbmdlcnMvTVxcbkJ1eHRlaHVkZS9NXFxuQnlibG9zL01cXG5CeWVycy9NXFxuQnlyZC9NXFxuQnlyb24vTVxcbkJ5cm9uaWMvTVxcbkJ5emFudGluZS9NU1xcbkJ5emFudGl1bS9NXFxuQy9TTVxcbkNBXFxuQ0FEL01cXG5DQUlcXG5DQU1cXG5DQVBcXG5DQVJFXFxuQ0FUVlxcbkNCXFxuQ0JDL01cXG5DQlMvTVxcbkNDVFZcXG5DQ1VcXG5DRC9TTVxcbkNEQ1xcbkNEVFxcbkNFTy9NXFxuQ0ZcXG5DRkMvTVxcbkNGT1xcbkNHSVxcbkNJQS9NXFxuQ0lEXFxuQ05OL01cXG5DTlMvTVxcbkNPL01cXG5DT0JPTC9TTVxcbkNPRFxcbkNPTFxcbkNPTEFcXG5DT1ZJRFxcbkNQQS9NXFxuQ1BJL01cXG5DUE9cXG5DUFIvTVxcbkNQVS9NXFxuQ1JUL1NNXFxuQ1NTL01cXG5DU1QvTVxcbkNUL01cXG5DVlxcbkNWUy9NXFxuQ1pcXG5DYS9NXFxuQ2FiZXJuZXQvTVxcbkNhYm90L01cXG5DYWJyYWwvTVxcbkNhYnJlcmEvTVxcbkNhYnJpbmkvTVxcbkNhZGV0dGVcXG5DYWRpbGxhYy9NXFxuQ2FkaXovTVxcbkNhZWRtb24vTVxcbkNhZXJwaGlsbHkvTVxcbkNhZXNhci9TTVxcbkNhZ2UvTVxcbkNhZ25leS9NXFxuQ2Fob2tpYS9NXFxuQ2FpYXBoYXMvTVxcbkNhaW4vU01cXG5DYWlyby9NXFxuQ2FpdGxpbi9NXFxuQ2FqdW4vTVNcXG5DYWwvTVxcbkNhbGFpcy9NXFxuQ2FsY3V0dGEvTVxcbkNhbGRlci9NXFxuQ2FsZGVyb24vTVxcbkNhbGR3ZWxsL01cXG5DYWxlYi9NXFxuQ2FsZWRvbmlhL01cXG5DYWxleGljby9NXFxuQ2FsZ2FyeS9NXFxuQ2FsaG91bi9NXFxuQ2FsaS9NXFxuQ2FsaWJhbi9NXFxuQ2FsaWZcXG5DYWxpZm9ybmlhL01cXG5DYWxpZm9ybmlhbi9TTVxcbkNhbGlndWxhL01cXG5DYWxsYWdoYW4vTVxcbkNhbGxhaGFuL01cXG5DYWxsYW8vTVxcbkNhbGxhcy9NXFxuQ2FsbGllL01cXG5DYWxsaW9wZS9NXFxuQ2FsbGlzdG8vTVxcbkNhbG9vY2FuL01cXG5DYWx2YXJ5L01cXG5DYWx2ZXJ0L01cXG5DYWx2aW4vTVxcbkNhbHZpbmlzbS9NU1xcbkNhbHZpbmlzdC9NU1xcbkNhbHZpbmlzdGljXFxuQ2FtYWNoby9NXFxuQ2FtYXJpbGxvL01cXG5DYW1ib2RpYS9NXFxuQ2FtYm9kaWFuL1NNXFxuQ2FtYnJpYW4vU01cXG5DYW1icmlkZ2UvTVxcbkNhbWRlbi9NXFxuQ2FtZWwvTVxcbkNhbWVsb3BhcmRhbGlzL01cXG5DYW1lbG90L01TXFxuQ2FtZW1iZXJ0L01TXFxuQ2FtZXJvbi9NXFxuQ2FtZXJvb24vU01cXG5DYW1lcm9vbmlhbi9NU1xcbkNhbWlsbGEvTVxcbkNhbWlsbGUvTVxcbkNhbW9lbnMvTVxcbkNhbXBhbmVsbGEvTVxcbkNhbXBiZWxsL01cXG5DYW1waW5hcy9NXFxuQ2FtcG9zL01cXG5DYW1yeS9NXFxuQ2FtdXMvTVxcbkNhbi9NXFxuQ2FuYWFuL01cXG5DYW5hYW5pdGUvTVNcXG5DYW5hZFxcbkNhbmFkYS9NXFxuQ2FuYWRpYW4vU01cXG5DYW5hZGlhbmlzbVxcbkNhbmFsZXR0by9NXFxuQ2FuYXJpZXMvTVxcbkNhbmF2ZXJhbC9NXFxuQ2FuYmVycmEvTVxcbkNhbmNlci9TTVxcbkNhbmN1bi9NXFxuQ2FuZGFjZS9NXFxuQ2FuZGljZS9NXFxuQ2FuZGlkZS9NXFxuQ2FuZHkvTVxcbkNhbm5lcy9NXFxuQ2Fubm9uL01cXG5DYW5vbi9NXFxuQ2Fub3B1cy9NXFxuQ2FudGFicmlnaWFuL01cXG5DYW50ZXJidXJ5L01cXG5DYW50b24vTVxcbkNhbnRvbmVzZS9NXFxuQ2FudG9yL01cXG5DYW50cmVsbC9NXFxuQ2FudHUvTVxcbkNhbnV0ZS9NXFxuQ2FwYWJsYW5jYS9NXFxuQ2FwZWsvTVxcbkNhcGVsbGEvTVxcbkNhcGV0L01cXG5DYXBldGlhbi9NXFxuQ2FwZXRvd24vTVxcbkNhcGgvTVxcbkNhcGlzdHJhbm8vTVxcbkNhcGl0b2wvU01cXG5DYXBpdG9saW5lL01cXG5DYXBvbmUvTVxcbkNhcG90ZS9NXFxuQ2FwcmEvTVxcbkNhcHJpL01cXG5DYXByaWNvcm4vTVNcXG5DYXB0XFxuQ2FwdWNoaW4vTVxcbkNhcHVsZXQvTVxcbkNhcmEvTVxcbkNhcmFjYWxsYS9NXFxuQ2FyYWNhcy9NXFxuQ2FyYXZhZ2dpby9NXFxuQ2FyYm9sb3kvTVxcbkNhcmJvbmRhbGUvTVxcbkNhcmJvbmlmZXJvdXMvTVxcbkNhcmJvcnVuZHVtL01cXG5DYXJkZW5hcy9NXFxuQ2FyZGlmZi9NXFxuQ2FyZGluL01cXG5DYXJkb3pvL01cXG5DYXJleS9NXFxuQ2FyaWIvTVNcXG5DYXJpYmJlYW4vTVNcXG5DYXJpbmEvTVxcbkNhcmlzc2EvTVxcbkNhcmwvTVxcbkNhcmxhL01cXG5DYXJsZW5lL01cXG5DYXJsaW4vTVxcbkNhcmxvL01TXFxuQ2FybG9zL01cXG5DYXJsc2JhZC9NXFxuQ2FybHNvbi9NXFxuQ2FybHRvbi9NXFxuQ2FybHkvTVxcbkNhcmx5bGUvTVxcbkNhcm1lbGEvTVxcbkNhcm1lbGxhL01cXG5DYXJtZWxvL01cXG5DYXJtZW4vTVxcbkNhcm1pY2hhZWwvTVxcbkNhcm1pbmUvTVxcbkNhcm5hcC9NXFxuQ2FybmF0aW9uL01cXG5DYXJuZWdpZS9NXFxuQ2FybmV5L01cXG5DYXJub3QvTVxcbkNhcm9sL01cXG5DYXJvbGUvTVxcbkNhcm9saW5hL01cXG5DYXJvbGluZS9NXFxuQ2Fyb2xpbmdpYW4vTVxcbkNhcm9saW5pYW4vTVxcbkNhcm9seW4vTVxcbkNhcnBhdGhpYW4vU01cXG5DYXJwYXRoaWFucy9NXFxuQ2FycGVudGVyL01cXG5DYXJyL01cXG5DYXJyYW56YS9NXFxuQ2FycmllL1JNXFxuQ2Fycmllci9NXFxuQ2FycmlsbG8vTVxcbkNhcnJvbGwvTVxcbkNhcnNvbi9NXFxuQ2FydGVyL01cXG5DYXJ0ZXJzdmlsbGUvTVxcbkNhcnRlc2lhbi9NXFxuQ2FydGhhZ2UvTVxcbkNhcnRoYWdpbmlhbi9NU1xcbkNhcnRpZXIvTVxcbkNhcnR3cmlnaHQvTVxcbkNhcnVzby9NXFxuQ2FydmVyL01cXG5DYXJ5L01cXG5DYXNhYmxhbmNhL01cXG5DYXNhbHMvTVxcbkNhc2FuZHJhL01cXG5DYXNhbm92YS9TTVxcbkNhc2NhZGVzL01cXG5DYXNlL01cXG5DYXNleS9NXFxuQ2FzaC9NXFxuQ2FzaW8vTVxcbkNhc3Bhci9NXFxuQ2FzcGVyL01cXG5DYXNwaWFuL01cXG5DYXNzYW5kcmEvU01cXG5DYXNzYXR0L01cXG5DYXNzaWR5L01cXG5DYXNzaWUvTVxcbkNhc3Npb3BlaWEvTVxcbkNhc3NpdXMvTVxcbkNhc3RhbmVkYS9NXFxuQ2FzdGlsaWFuXFxuQ2FzdGlsbG8vTVxcbkNhc3RsZXJlYWdoL01cXG5DYXN0b3IvTVxcbkNhc3RyaWVzL01cXG5DYXN0cm8vTVxcbkNhdGFsYW4vU01cXG5DYXRhbGluYS9NXFxuQ2F0YWxvbmlhL01cXG5DYXRhd2JhL01cXG5DYXRlcnBpbGxhci9NXFxuQ2F0aGF5L01cXG5DYXRoZXIvTVxcbkNhdGhlcmluZS9NXFxuQ2F0aGxlZW4vTVxcbkNhdGhvbGljL01TXFxuQ2F0aG9saWNpc20vTVNcXG5DYXRocnluL01cXG5DYXRoeS9NXFxuQ2F0aWxpbmUvTVxcbkNhdG8vTVxcbkNhdHNraWxsL1NNXFxuQ2F0c2tpbGxzL01cXG5DYXR0L01cXG5DYXR1bGx1cy9NXFxuQ2F1Y2FzaWFuL01TXFxuQ2F1Y2Fzb2lkXFxuQ2F1Y2FzdXMvTVxcbkNhdWNoeS9NXFxuQ2F2ZW5kaXNoL01cXG5DYXZvdXIvTVxcbkNheHRvbi9NXFxuQ2F5ZW5uZS9NXFxuQ2F5bWFuL01cXG5DYXl1Z2EvU01cXG5DYXl1c2VcXG5DYlxcbkNkL01cXG5DZS9NXFxuQ2VhdXNlc2N1L01cXG5DZWJ1L01cXG5DZWJ1YW5vL01cXG5DZWNlbGlhL01cXG5DZWNpbC9NXFxuQ2VjaWxlL01cXG5DZWNpbGlhL01cXG5DZWNpbHkvTVxcbkNlZHJpYy9NXFxuQ2VsZXN0ZS9NXFxuQ2VsZ2VuZS9NXFxuQ2VsaWEvTVxcbkNlbGluYS9NXFxuQ2VsbGluaS9NXFxuQ2Vsc2l1cy9NXFxuQ2VsdC9TTVxcbkNlbHRpYy9TTVxcbkNlbm96b2ljL01cXG5DZW50YXVydXMvTVxcbkNlbnRpZ3JhZGVcXG5DZW50cmFsXFxuQ2VwaGVpZC9NXFxuQ2VwaGV1cy9NXFxuQ2VyYmVydXMvTVxcbkNlcmVua292L01cXG5DZXJlcy9NXFxuQ2VyZi9NXFxuQ2VydmFudGVzL01cXG5DZXNhci9NXFxuQ2VzYXJlYW4vTVxcbkNlc3NuYS9NXFxuQ2V0dXMvTVxcbkNleWxvbi9NXFxuQ2V5bG9uZXNlXFxuQ2V6YW5uZS9NXFxuQ2YvTVxcbkNoJ2luL01cXG5DaC9OXFxuQ2hhYmxpcy9NXFxuQ2hhZC9NXFxuQ2hhZGlhbi9NU1xcbkNoYWR3aWNrL01cXG5DaGFnYWxsL01cXG5DaGFpdGFueWEvTVxcbkNoYWl0aW4vTVxcbkNoYWxkZWFcXG5DaGFsZGVhbi9NXFxuQ2hhbGxlbmdlci9NXFxuQ2hhbG1lcnNcXG5DaGFtYmVybGFpbi9NXFxuQ2hhbWJlcnMvTVxcbkNoYW1iZXJzYnVyZy9NXFxuQ2hhbXBhaWduL01cXG5DaGFtcGxhaW4vTVxcbkNoYW1wb2xsaW9uL01cXG5DaGFuL01cXG5DaGFuY2UvTVxcbkNoYW5jZWxsb3JzdmlsbGUvTVxcbkNoYW5kaWdhcmgvTVxcbkNoYW5kbGVyL01cXG5DaGFuZG9uL01cXG5DaGFuZHJhL01cXG5DaGFuZHJhZ3VwdGEvTVxcbkNoYW5kcmFzZWtoYXIvTVxcbkNoYW5lbC9NXFxuQ2hhbmV5L01cXG5DaGFuZy9NXFxuQ2hhbmdjaHVuL01cXG5DaGFuZ3NoYS9NXFxuQ2hhbnRpbGx5L01cXG5DaGFwbGluL01cXG5DaGFwbGluZXNxdWVcXG5DaGFwbWFuL01cXG5DaGFwcGFxdWlkZGljay9NXFxuQ2hhcHVsdGVwZWMvTVxcbkNoYXJicmF5L01cXG5DaGFyZG9ubmF5L01cXG5DaGFyaXR5L01cXG5DaGFybGVtYWduZS9NXFxuQ2hhcmxlbmUvTVxcbkNoYXJsZXMvTVxcbkNoYXJsZXN0b24vTVNcXG5DaGFybGV5L01cXG5DaGFybGllL01cXG5DaGFybG90dGUvTVxcbkNoYXJsb3R0ZXN2aWxsZS9NXFxuQ2hhcmxvdHRldG93bi9NXFxuQ2hhcm1haW5lL01cXG5DaGFybWluL01cXG5DaGFyb2xhaXMvTVxcbkNoYXJvbi9NXFxuQ2hhcnRpc20vTVxcbkNoYXJ0cmVzL01cXG5DaGFyeWJkaXMvTVxcbkNoYXNlL01cXG5DaGFzaXR5L01cXG5DaGF0ZWF1YnJpYW5kL01cXG5DaGF0dGFob29jaGVlL01cXG5DaGF0dGFub29nYS9NXFxuQ2hhdHRlcmxleS9NXFxuQ2hhdHRlcnRvbi9NXFxuQ2hhdWNlci9NXFxuQ2hhdW5jZXkvTVxcbkNoYXV0YXVxdWEvTVxcbkNoYXZlei9NXFxuQ2hheWVmc2t5L01cXG5DaGUvTVxcbkNoZWNoZW4vTVxcbkNoZWNobnlhL01cXG5DaGVkZGFyL01cXG5DaGVlci9NXFxuQ2hlZXJpb3MvTVxcbkNoZWV0b3MvTVxcbkNoZWV2ZXIvTVxcbkNoZWtob3YvTVxcbkNoZWtob3ZpYW5cXG5DaGVsc2VhL01cXG5DaGVseWFiaW5zay9NXFxuQ2hlbi9NXFxuQ2hlbmV5L01cXG5DaGVuZ2R1L01cXG5DaGVubmFpL01cXG5DaGVvcHMvTVxcbkNoZXJpL01cXG5DaGVyaWUvTVxcbkNoZXJuZW5rby9NXFxuQ2hlcm5vYnlsL01cXG5DaGVybm9teXJkaW4vTVxcbkNoZXJva2VlL01TXFxuQ2hlcnJ5L01cXG5DaGVyeWwvTVxcbkNoZXNhcGVha2UvTVxcbkNoZXNoaXJlL01cXG5DaGVzdGVyL01cXG5DaGVzdGVyZmllbGQvTVxcbkNoZXN0ZXJ0b24vTVxcbkNoZXZhbGllci9NXFxuQ2hldmlvdC9NXFxuQ2hldnJvbGV0L01cXG5DaGV2cm9uL01cXG5DaGV2eS9NXFxuQ2hleWVubmUvU01cXG5DaGkvTVxcbkNoaWFudGkvTVNcXG5DaGliYS9NXFxuQ2hpYmNoYS9NXFxuQ2hpY2Fnby9NXFxuQ2hpY2Fnb2FuL01cXG5DaGljYW5hL01cXG5DaGljYW5vL01cXG5DaGlja2FzYXcvTVNcXG5DaGljbGV0cy9NXFxuQ2hpY28vTVxcbkNoaWh1YWh1YS9NU1xcbkNoaWxlL01cXG5DaGlsZWFuL01TXFxuQ2hpbWJvcmF6by9NXFxuQ2hpbWVyYS9NU1xcbkNoaW11L01cXG5DaGluL01cXG5DaGluYS9NXFxuQ2hpbmF0b3duL01cXG5DaGluZXNlL01cXG5DaGlub29rL01TXFxuQ2hpcGV3eWFuL01cXG5DaGlwcGVuZGFsZS9NXFxuQ2hpcHBld2EvU01cXG5DaGlxdWl0YS9NXFxuQ2hpcmljby9NXFxuQ2hpc2hvbG0vTVxcbkNoaXNpbmF1L01cXG5DaGl0dGFnb25nL01cXG5DaGl2YXMvTVxcbkNobG9lL01cXG5DaG9jdGF3L1NNXFxuQ2hvbXNreS9NXFxuQ2hvbmdxaW5nL01cXG5DaG9waW4vTVxcbkNob3ByYS9NXFxuQ2hvdS9NXFxuQ2hyZXRpZW4vTVxcbkNocmlzL01cXG5DaHJpc3QvTVNcXG5DaHJpc3RhL01cXG5DaHJpc3RjaHVyY2gvTVxcbkNocmlzdGVuZG9tL01TXFxuQ2hyaXN0ZW5zZW4vTVxcbkNocmlzdGkvTVxcbkNocmlzdGlhbi9TTVxcbkNocmlzdGlhbml0eS9TTVxcbkNocmlzdGlhbml6ZVxcbkNocmlzdGllL01cXG5DaHJpc3RpbmEvTVxcbkNocmlzdGluZS9NXFxuQ2hyaXN0bGlrZVxcbkNocmlzdG1hcy9NU1xcbkNocmlzdG1hc3RpZGUvTVNcXG5DaHJpc3RtYXN0aW1lL01TXFxuQ2hyaXN0b3Blci9NXFxuQ2hyaXN0b3BoZXIvTVxcbkNocm9tZWJvb2svTVNcXG5DaHJvbmljbGVzXFxuQ2hyeXNsZXIvTVxcbkNocnlzb3N0b20vTVxcbkNocnlzdGFsL01cXG5DaHVjay9NXFxuQ2h1a2NoaS9NXFxuQ2h1bWFzaC9NXFxuQ2h1bmcvTVxcbkNodXJjaC9NXFxuQ2h1cmNoaWxsL01cXG5DaHVycmlndWVyYS9NXFxuQ2h1dmFzaC9NXFxuQ2kvTVxcbkNpY2Vyby9NXFxuQ2lkL01cXG5DaW1hYnVlL01cXG5DaW5jaW5uYXRpL01cXG5DaW5kZXJlbGxhL01TXFxuQ2luZHkvTVxcbkNpbmVtYVNjb3BlL01cXG5DaW5lcmFtYS9NXFxuQ2lwcm8vTVxcbkNpcmNlL01cXG5DaXNjby9NXFxuQ2l0aWJhbmsvTVxcbkNpdGlncm91cC9NXFxuQ2l0cm9lbi9NXFxuQ2wvTVZcXG5DbGFpYm9ybmUvTVxcbkNsYWlyL01cXG5DbGFpcmUvTVxcbkNsYWlyb2wvTVxcbkNsYW5jeS9NXFxuQ2xhcGV5cm9uL01cXG5DbGFwdG9uL01cXG5DbGFyYS9NXFxuQ2xhcmUvTVxcbkNsYXJlbmNlL01cXG5DbGFyZW5kb24vTVxcbkNsYXJpY2UvTVxcbkNsYXJpc3NhL01cXG5DbGFyay9NXFxuQ2xhcmtlL01cXG5DbGFya3N2aWxsZS9NXFxuQ2xhdWRlL01cXG5DbGF1ZGV0dGUvTVxcbkNsYXVkaWEvTVxcbkNsYXVkaW5lL01cXG5DbGF1ZGlvL01cXG5DbGF1ZGl1cy9NXFxuQ2xhdXMvTVxcbkNsYXVzZXdpdHovTVxcbkNsYXVzaXVzL01cXG5DbGF5L01cXG5DbGF5dG9uL01cXG5DbGVhcmFzaWwvTVxcbkNsZW0vWE1cXG5DbGVtZW5jZWF1L01cXG5DbGVtZW5zL01cXG5DbGVtZW50L01TXFxuQ2xlbWVudGluZS9NXFxuQ2xlbWVudHMvTVxcbkNsZW1vbnMvTVxcbkNsZW1zb24vTVxcbkNsZW8vTVxcbkNsZW9wYXRyYS9NXFxuQ2xldmVsYW5kL01cXG5DbGlidXJuL01cXG5DbGlmZi9NXFxuQ2xpZmZvcmQvTVxcbkNsaWZ0b24vTVxcbkNsaW5lL01cXG5DbGludC9NXFxuQ2xpbnRvbi9NXFxuQ2xpby9NXFxuQ2xpdmUvTVxcbkNsb2p1cmUvTVxcbkNsb3JldHMvTVxcbkNsb3JveC9NXFxuQ2xvc3VyZS9NXFxuQ2xvdGhvL01cXG5DbG91c2VhdS9NXFxuQ2xvdmlzL01cXG5DbHlkZS9NXFxuQ2x5ZGVzZGFsZS9NXFxuQ2x5dGVtbmVzdHJhL01cXG5DbS9NXFxuQ21kclxcbkNvL01cXG5Db2JhaW4vTVxcbkNvYmIvTVxcbkNvY2hhYmFtYmEvTVxcbkNvY2hpbi9NXFxuQ29jaGlzZS9NXFxuQ29jaHJhbi9NXFxuQ29ja25leS9NXFxuQ29jdGVhdS9NXFxuQ29kXFxuQ29keS9NXFxuQ29mZmV5L01cXG5Db2duYWMvTVxcbkNvaGFuL01cXG5Db2hlbi9NXFxuQ29pbWJhdG9yZS9NXFxuQ29pbnRyZWF1L01cXG5Db2tlL1NNXFxuQ29sL01cXG5Db2xiZXJ0L01cXG5Db2xieS9NXFxuQ29sZS9NXFxuQ29sZWVuL01cXG5Db2xlbWFuL01cXG5Db2xlcmlkZ2UvTVxcbkNvbGV0dGUvTVxcbkNvbGZheC9NXFxuQ29sZ2F0ZS9NXFxuQ29saW4vTVxcbkNvbGxlZW4vTVxcbkNvbGxpZXIvTVxcbkNvbGxpbi9TTVxcbkNvbGxpbnMvTVxcbkNvbG9cXG5Db2xvZ25lL01cXG5Db2xvbWJpYS9NXFxuQ29sb21iaWFuL01TXFxuQ29sb21iby9NXFxuQ29sb24vTVxcbkNvbG9yYWRhbi9TTVxcbkNvbG9yYWRvL01cXG5Db2xvcmFkb2FuXFxuQ29sb3NzZXVtL01cXG5Db2x0L01cXG5Db2x0cmFuZS9NXFxuQ29sdW1iaWEvTVxcbkNvbHVtYmluZS9NXFxuQ29sdW1idXMvTVxcbkNvbVxcbkNvbWFuY2hlL01TXFxuQ29tYnMvTVxcbkNvbWRyXFxuQ29taW50ZXJuL01cXG5Db21tYW5kbWVudFxcbkNvbW1vbnMvTVxcbkNvbW1vbndlYWx0aFxcbkNvbW11bmlvbi9TTVxcbkNvbW11bmlzbVxcbkNvbW11bmlzdC9TTVxcbkNvbW8vTVxcbkNvbW9yYW5cXG5Db21vcm9zL01cXG5Db21wYXEvTVxcbkNvbXB0b24vTVxcbkNvbXB1U2VydmUvTVxcbkNvbXRlL01cXG5Db25ha3J5L01cXG5Db25hbi9NXFxuQ29uY2VwY2lvbi9NXFxuQ29uY2V0dGEvTVxcbkNvbmNvcmQvU01cXG5Db25jb3JkZS9NXFxuQ29uZGlsbGFjL01cXG5Db25kb3JjZXQvTVxcbkNvbmVzdG9nYS9NXFxuQ29uZmVkZXJhY3kvTVxcbkNvbmZlZGVyYXRlL01TXFxuQ29uZnVjaWFuL1NNXFxuQ29uZnVjaWFuaXNtL01TXFxuQ29uZnVjaXVzL01cXG5Db25nL01cXG5Db25nby9NXFxuQ29uZ29sZXNlL01cXG5Db25ncmVnYXRpb25hbFxcbkNvbmdyZWdhdGlvbmFsaXN0L01TXFxuQ29uZ3Jlc3MvTVNcXG5Db25ncmVzc2lvbmFsXFxuQ29uZ3JldmUvTVxcbkNvbmxleS9NXFxuQ29ubi9NUlxcbkNvbm5lY3RpY3V0L01cXG5Db25uZWxsc3ZpbGxlL01cXG5Db25uZW1hcmEvTVxcbkNvbm5lci9NXFxuQ29ubmVyeS9NXFxuQ29ubmllL01cXG5Db25ub2xseS9NXFxuQ29ubm9ycy9NXFxuQ29ucmFkL01cXG5Db25yYWlsL01cXG5Db25yb2UvTVxcbkNvbnNlcnZhdGl2ZVxcbkNvbnN0YWJsZS9NXFxuQ29uc3RhbmNlL01cXG5Db25zdGFudGluZS9NXFxuQ29uc3RhbnRpbm9wbGUvTVxcbkNvbnN0aXR1dGlvblxcbkNvbnN1ZWxvL01cXG5Db250aW5lbnQvTVxcbkNvbnRpbmVudGFsL01cXG5Db250cmVyYXMvTVxcbkNvbndheS9NXFxuQ29vay9NXFxuQ29va2UvTVxcbkNvb2xleS9NXFxuQ29vbGlkZ2UvTVxcbkNvb3Blci9NXFxuQ29vcGVyc3Rvd24vTVxcbkNvb3JzL01cXG5Db3BhY2FiYW5hL01cXG5Db3BlbGFuZC9NXFxuQ29wZW5oYWdlbi9NXFxuQ29wZXJuaWNhbi9NXFxuQ29wZXJuaWN1cy9NXFxuQ29wbGFuZC9NXFxuQ29wbGV5L01cXG5Db3BwZXJmaWVsZC9NXFxuQ29wcGVydG9uZS9NXFxuQ29wcG9sYS9NXFxuQ29wdGljL01cXG5Db3JhL01cXG5Db3JkZWxpYS9NXFxuQ29yZGlsbGVyYXMvTVxcbkNvcmRvYmEvTVxcbkNvcmV5L01cXG5Db3JmdS9NXFxuQ29yaW5hL01cXG5Db3JpbmUvTVxcbkNvcmlubmUvTVxcbkNvcmludGgvTVxcbkNvcmludGhpYW4vTVNcXG5Db3JpbnRoaWFucy9NXFxuQ29yaW9sYW51cy9NXFxuQ29yaW9saXMvTVxcbkNvcmtcXG5Db3JsZW9uZS9NXFxuQ29ybWFjay9NXFxuQ29ybmVpbGxlL01cXG5Db3JuZWxpYS9NXFxuQ29ybmVsaXVzL01cXG5Db3JuZWxsL01cXG5Db3JuaW5nL01cXG5Db3JuaXNoL01TXFxuQ29ybndhbGwvTVxcbkNvcm53YWxsaXMvTVxcbkNvcm9uYWRvL01cXG5Db3JvdC9NXFxuQ29ycFxcbkNvcnJlZ2dpby9NXFxuQ29ycmluZS9NXFxuQ29yc2ljYS9NXFxuQ29yc2ljYW4vTVxcbkNvcnRlcy9NU1xcbkNvcnRsYW5kL01cXG5Db3J2YWxsaXMvTVxcbkNvcnZldHRlL01cXG5Db3J2dXMvTVxcbkNvcnkvTVxcbkNvc2J5L01cXG5Db3Ntb3NEQi9NXFxuQ29zc2Fjay9NXFxuQ29zdGNvL01cXG5Db3N0ZWxsby9NXFxuQ29zdG5lci9NXFxuQ290ZS9NXFxuQ290b25vdS9NXFxuQ290b3BheGkvTVxcbkNvdHN3b2xkL01cXG5Db3R0b24vTVxcbkNvdWxvbWIvTVxcbkNvdWx0ZXIvTVxcbkNvdXBlcmluL01cXG5Db3VyYmV0L01cXG5Db3VydG5leS9NXFxuQ291c3RlYXUvTVxcbkNvdmVudHJ5L1NNXFxuQ292aW5ndG9uL01cXG5Db3dhcmQvTVxcbkNvd2VsbC9NXFxuQ293bGV5L01cXG5Db3dwZXIvTVxcbkNveC9NXFxuQ295L01cXG5Db3lsZS9NXFxuQ296dW1lbC9NXFxuQ3BsXFxuQ3IvTVRcXG5DcmFiYmUvTVxcbkNyYWZ0L01cXG5DcmFpZy9NXFxuQ3JhbmFjaC9NXFxuQ3JhbmUvTVxcbkNyYW5tZXIvTVxcbkNyYXRlci9NXFxuQ3Jhd2ZvcmQvTVxcbkNyYXkvTVxcbkNyYXlvbGEvTVxcbkNyZWF0aW9uL01cXG5DcmVhdG9yL01cXG5DcmVjeS9NXFxuQ3JlZS9EU01cXG5DcmVlay9TTVxcbkNyZWlnaHRvbi9NXFxuQ3Jlb2xlL1NNXFxuQ3Jlb24vTVxcbkNyZXNzaWRhL01cXG5DcmVzdC9NXFxuQ3JldGFjZW91cy9NXFxuQ3JldGFuL1NNXFxuQ3JldGUvTVxcbkNyaWNodG9uL01cXG5Dcmljay9NXFxuQ3JpbWVhL01cXG5DcmltZWFuL01cXG5DcmlvbGxvL01cXG5DcmlzY28vTVxcbkNyaXN0aW5hL01cXG5Dcm9hdC9TTVxcbkNyb2F0aWEvTVxcbkNyb2F0aWFuL01TXFxuQ3JvY2UvTVxcbkNyb2NrZXR0L01cXG5Dcm9lc3VzL01cXG5Dcm9td2VsbC9NXFxuQ3JvbXdlbGxpYW4vTVxcbkNyb25pbi9NXFxuQ3JvbmtpdGUvTVxcbkNyb251cy9NXFxuQ3Jvb2tlcy9NXFxuQ3Jvc2J5L01cXG5Dcm9zcy9NXFxuQ3Jvdy9TTVxcbkNyb3dsZXkvTVxcbkNydWNpZml4aW9uL01TXFxuQ3J1aWtzaGFuay9NXFxuQ3J1aXNlL01cXG5DcnVzYWRlcydzXFxuQ3J1c29lL01cXG5DcnV4L01cXG5DcnV6L01cXG5DcnlwdG96b2ljL01cXG5DcnlzdGFsL01cXG5Dc29ua2EvTVxcbkN0XFxuQ3Rlc2lwaG9uL01cXG5DdGh1bGh1L01cXG5DdS9NXFxuQ3ViYS9NXFxuQ3ViYW4vU01cXG5DdWNodWxhaW4vTVxcbkN1aXNpbmFydC9NXFxuQ3VsYmVydHNvbi9NXFxuQ3VsbGVuL01cXG5DdW1iZXJsYW5kL01cXG5DdW1taW5ncy9NXFxuQ3VuYXJkL01cXG5DdW5uaW5naGFtL01cXG5DdXBpZC9NXFxuQ3VyYWNhby9NXFxuQ3VyaWUvTVxcbkN1cml0aWJhL01cXG5DdXJyaWVyL01cXG5DdXJyeS9STVxcbkN1cnQvTVxcbkN1cnRpcy9NXFxuQ3VzdGVyL01cXG5DdXZpZXIvTVxcbkN1emNvL01cXG5DeWJlbGUvTVxcbkN5Y2xhZGVzL01cXG5DeWNsb3Blcy9NXFxuQ3ljbG9wcy9NXFxuQ3lnbnVzL01cXG5DeW1iZWxpbmUvTVxcbkN5bnRoaWEvTVxcbkN5cHJpYW4vTVxcbkN5cHJpb3QvTVNcXG5DeXBydXMvTVxcbkN5cmFuby9NXFxuQ3lyaWwvTVxcbkN5cmlsbGljL01cXG5DeXJ1cy9NXFxuQ3plY2gvTVxcbkN6ZWNoaWEvTVxcbkN6ZWNob3Nsb3Zha1xcbkN6ZWNob3Nsb3Zha2lhL01cXG5DemVjaG9zbG92YWtpYW4vU01cXG5DemVjaHNcXG5DemVybnkvTVxcbkQvTVxcbkRBL01cXG5EQVJcXG5EQVQvTVxcbkRCTVMvTVxcbkRDL01cXG5ERC9NXFxuRERTL01cXG5ERFQvU1xcbkRFXFxuREVBXFxuREVDL1NEXFxuREhcXG5ESFNcXG5ESVxcbkRKXFxuRE1DQVxcbkRNRC9NXFxuRE1aXFxuRE5BL01cXG5ET0FcXG5ET0JcXG5ET0RcXG5ET0VcXG5ET1MvTVxcbkRPVFxcbkRQL1NNXFxuRFBUXFxuRFNUXFxuRFRQXFxuRFVJXFxuRFZEL1NcXG5EVlIvU01cXG5EV0lcXG5EYWNoYXUvTVxcbkRhY3Jvbi9TTVxcbkRhZGEvTVxcbkRhZGFpc20vTVxcbkRhZWRhbHVzL01cXG5EYWd1ZXJyZS9NXFxuRGFnd29vZC9NXFxuRGFob21leS9NXFxuRGFpbWxlci9NXFxuRGFpc3kvTVxcbkRha2FyL01cXG5EYWtvdGEvU01cXG5EYWtvdGFuL01cXG5EYWxhaVxcbkRhbGUvTVxcbkRhbGV5L01cXG5EYWxpL01cXG5EYWxpYW4vTVxcbkRhbGxhcy9NXFxuRGFsbWF0aWEvTVxcbkRhbG1hdGlhbi9TTVxcbkRhbHRvbi9NXFxuRGFtYXNjdXMvTVxcbkRhbWUvTU5cXG5EYW1pYW4vTVxcbkRhbWllbi9NXFxuRGFtaW9uL01cXG5EYW1vY2xlcy9NXFxuRGFtb24vTVxcbkRhbi9NXFxuRGFuYS9NXFxuRGFuYWUvTVxcbkRhbmJ1cnkvTVxcbkRhbmUvU01cXG5EYW5lbGF3L01cXG5EYW5nZXJmaWVsZC9NXFxuRGFuaWFsL01cXG5EYW5pZWwvU01cXG5EYW5pZWxsZS9NXFxuRGFuaWVscy9NXFxuRGFuaXNoL01cXG5EYW5uaWUvTVxcbkRhbm55L01cXG5EYW5vbmUvTVxcbkRhbnRlL01cXG5EYW50b24vTVxcbkRhbnViZS9NXFxuRGFudWJpYW4vTVxcbkRhbnZpbGxlL01cXG5EYXBobmUvTVxcbkRhcmJ5L01cXG5EYXJjeS9NXFxuRGFyZGFuZWxsZXMvTVxcbkRhcmUvTVxcbkRhcmVuL01cXG5EYXJmdXIvTVxcbkRhcmluL01cXG5EYXJpby9NXFxuRGFyaXVzL01cXG5EYXJqZWVsaW5nL01cXG5EYXJsYS9NXFxuRGFybGVuZS9NXFxuRGFybGluZy9NXFxuRGFybmVsbC9NXFxuRGFycmVsL01cXG5EYXJyZWxsL01cXG5EYXJyZW4vTVxcbkRhcnJpbi9NXFxuRGFycm93L01cXG5EYXJyeWwvTVxcbkRhcnRoL01cXG5EYXJ0bW9vci9NXFxuRGFydG1vdXRoL01cXG5EYXJ2b24vTVxcbkRhcndpbi9NXFxuRGFyd2luaWFuL01cXG5EYXJ3aW5pc20vU01cXG5EYXJ3aW5pc3RcXG5EYXJ5bC9NXFxuRGF0YW1hdGlvblxcbkRhdWdoZXJ0eS9NXFxuRGF1bWllci9NXFxuRGF2YW8vTVxcbkRhdmUvTVxcbkRhdmVucG9ydC9NXFxuRGF2aWQvTVNcXG5EYXZpZHNvbi9NXFxuRGF2aWVzL01cXG5EYXZpcy9NXFxuRGF2eS9TTVxcbkRhd2VzL01cXG5EYXdraW5zXFxuRGF3bi9NXFxuRGF3c29uL01cXG5EYXkvTVxcbkRheWFuXFxuRGF5dG9uL01cXG5EZUdlbmVyZXMvTVxcbkRlS2FsYi9NXFxuRGVhZGhlYWQvTVxcbkRlYW4vTVxcbkRlYW5hL01cXG5EZWFuZHJlL01cXG5EZWFubi9NXFxuRGVhbm5hL01cXG5EZWFubmUvTVxcbkRlYXRoL01cXG5EZWJiaWUvTVxcbkRlYmJ5L01cXG5EZWJpYW4vTVxcbkRlYm9yYS9NXFxuRGVib3JhaC9NXFxuRGVib3VpbGxldC9NXFxuRGVicmEvTVxcbkRlYnMvTVxcbkRlYnVzc3kvTVxcbkRlYy9NXFxuRGVjYWxvZ3VlL01cXG5EZWNhdHVyL01cXG5EZWNjYS9NXFxuRGVjY2FuL01cXG5EZWNlbWJlci9TTVxcbkRlY2tlci9NXFxuRGVkZWtpbmQvTVxcbkRlZS9NXFxuRGVlbmEvTVxcbkRlZXJlL01cXG5EZWZvZS9NXFxuRGVnYXMvTVxcbkRlaWRyZS9NXFxuRGVpbW9zL01cXG5EZWlyZHJlL01cXG5EZWl0eVxcbkRlamVzdXMvTVxcbkRlbC9NXFxuRGVsYWNyb2l4L01cXG5EZWxhY3J1ei9NXFxuRGVsYW5leS9NXFxuRGVsYW5vL01cXG5EZWxhd2FyZS9NU1xcbkRlbGF3YXJlYW4vU01cXG5EZWxiZXJ0L01cXG5EZWxlb24vTVxcbkRlbGdhZG8vTVxcbkRlbGhpL01cXG5EZWxpYS9NXFxuRGVsaWJlcy9NXFxuRGVsaWNpb3VzL01cXG5EZWxpbGFoL01cXG5EZWxpbGFoc1xcbkRlbGl1cy9NXFxuRGVsbC9NXFxuRGVsbGEvTVxcbkRlbG1hci9NXFxuRGVsbWFydmEvTVxcbkRlbG1lci9NXFxuRGVsbW9uaWNvL01cXG5EZWxvcmVzL01cXG5EZWxvcmlzL01cXG5EZWxwaGkvTVxcbkRlbHBoaWMvTVxcbkRlbHBoaW51cy9NXFxuRGVsdGEvTVxcbkRlbHRvbmEvTVxcbkRlbS9HXFxuRGVtYXZlbmQvTVxcbkRlbWVyb2wvTVxcbkRlbWV0ZXIvTVxcbkRlbWV0cml1cy9NXFxuRGVtaW5nL01cXG5EZW1vY3JhdC9TTVxcbkRlbW9jcmF0aWNcXG5EZW1vY3JpdHVzL01cXG5EZW1vc3RoZW5lcy9NXFxuRGVtcHNleS9NXFxuRGVuYS9NXFxuRGVuYWxpXFxuRGVuZWIvTVxcbkRlbmVib2xhL01cXG5EZW5nL01cXG5EZW5pcy9NXFxuRGVuaXNlL01cXG5EZW5tYXJrL01cXG5EZW5uaXMvTVxcbkRlbm55L01cXG5EZW50b24vTVxcbkRlbnZlci9NXFxuRGVvbi9NXFxuRGVwcC9NXFxuRGVyYnkvTVxcbkRlcmVrL01cXG5EZXJpY2svTVxcbkRlcm1vdC9NXFxuRGVycmljay9NXFxuRGVycmlkYS9NXFxuRGVzY2FydGVzL01cXG5EZXNkZW1vbmEvTVxcbkRlc2lyZWUvTVxcbkRlc21vbmQvTVxcbkRldHJvaXQvTVxcbkRldXRlcm9ub215L01cXG5EZXZhbmFnYXJpL01cXG5EZXZpL01cXG5EZXZpbi9NXFxuRGV2b24vTVxcbkRldm9uaWFuL01cXG5EZXdhci9NXFxuRGV3YXluZS9NXFxuRGV3ZXkvTVxcbkRld2l0dC9NXFxuRGV4ZWRyaW5lL01cXG5EZXh0ZXIvTVxcbkRoYWthL01cXG5EaGF1bGFnaXJpL01cXG5EaS9TTVxcbkRpQ2FwcmlvL01cXG5EaU1hZ2dpby9NXFxuRGlhZ2hpbGV2L01cXG5EaWFsL01cXG5EaWFuYS9NXFxuRGlhbmUvTVxcbkRpYW5uL01cXG5EaWFubmEvTVxcbkRpYW5uZS9NXFxuRGlhc1xcbkRpYXNwb3JhL01TXFxuRGljay9YTVxcbkRpY2tlbnMvTVxcbkRpY2tlbnNpYW5cXG5EaWNrZXJzb24vTVxcbkRpY2tpbnNvbi9NXFxuRGlja3Nvbi9NXFxuRGljdGFwaG9uZS9TTVxcbkRpZGVyb3QvTVxcbkRpZG8vTVxcbkRpZHJpa3Nvbi9NXFxuRGllZmVuYmFrZXIvTVxcbkRpZWdvL01cXG5EaWVtL01cXG5EaWV0cmljaC9NXFxuRGlqa3N0cmEvTVxcbkRpam9uL01cXG5EaWxiZXJ0L01TXFxuRGlsbGFyZC9NXFxuRGlsbGluZ2VyL01cXG5EaWxsb24vTVxcbkRpbmEvTVxcbkRpbmFoL01cXG5EaW5vL01cXG5EaW9jbGV0aWFuL01cXG5EaW9nZW5lcy9NXFxuRGlvbi9NXFxuRGlvbm5lL01cXG5EaW9ueXNpYW4vTVxcbkRpb255c3VzL01cXG5EaW9waGFudGluZS9NXFxuRGlvci9NXFxuRGlwcGVyL01cXG5EaXJcXG5EaXJhYy9NXFxuRGlyaWNobGV0L01cXG5EaXJrL01cXG5EaXMvTVxcbkRpc25leS9NXFxuRGlzbmV5bGFuZC9NXFxuRGlzcmFlbGkvTVxcbkRpdmluZS9NXFxuRGl3YWxpL01cXG5EaXgvTVxcbkRpeGllL01cXG5EaXhpZWNyYXQvTVxcbkRpeGllbGFuZC9TTVxcbkRpeG9uL01cXG5EamFuZ28vTVxcbkRqaWJvdXRpL01cXG5EbWl0cmkvTVxcbkRuZXByb3BldHJvdnNrL01cXG5Ebmllc3Rlci9NXFxuRG9iYmluL01cXG5Eb2Jlcm1hbi9NXFxuRG9icm8vTVxcbkRvY3RvclxcbkRvY3Rvcm93L01cXG5Eb2RnZS9NXFxuRG9kZ3Nvbi9NXFxuRG9kb21hL01cXG5Eb2Rzb24vTVxcbkRvZS9NXFxuRG9oYS9NXFxuRG9sYnkvTVxcbkRvbGUvTVxcbkRvbGxpZS9NXFxuRG9sbHkvTVxcbkRvbG9yZXMvTVxcbkRvbWVzZGF5L01cXG5Eb21pbmdvL01cXG5Eb21pbmd1ZXovTVxcbkRvbWluaWMvTVxcbkRvbWluaWNhL01cXG5Eb21pbmljYW4vTVNcXG5Eb21pbmljay9NXFxuRG9taW5pb25cXG5Eb21pbmlxdWUvTVxcbkRvbWl0aWFuL01cXG5Eb24vU01cXG5Eb25hL01cXG5Eb25haHVlL01cXG5Eb25hbGQvTVxcbkRvbmFsZHNvbi9NXFxuRG9uYXRlbGxvL01cXG5Eb25ldHNrL01cXG5Eb25pemV0dGkvTVxcbkRvbm4vTVJcXG5Eb25uYS9NXFxuRG9ubmUvTVxcbkRvbm5lbGwvTVxcbkRvbm5lci9NXFxuRG9ubmllL01cXG5Eb25ueS9NXFxuRG9ub3Zhbi9NXFxuRG9vbGV5L01cXG5Eb29saXR0bGUvTVxcbkRvb25lc2J1cnkvTVxcbkRvcHBsZXIvTVxcbkRvcmEvTVxcbkRvcmNhcy9NXFxuRG9yZWVuL01cXG5Eb3JpYW4vTVxcbkRvcmljL01cXG5Eb3Jpcy9NXFxuRG9yaXRvcy9NXFxuRG9yb3RoZWEvTVxcbkRvcm90aHkvTVxcbkRvcnNldC9NXFxuRG9yc2V5L01cXG5Eb3J0aHkvTVxcbkRvcnRtdW5kL01cXG5Eb3N0b2V2c2t5L01cXG5Eb3QvTVxcbkRvdGhhbi9NXFxuRG90c29uL01cXG5Eb3VhbGEvTVxcbkRvdWF5L01cXG5Eb3VibGVkYXkvTVxcbkRvdWcvTVxcbkRvdWdsYXMvTVxcbkRvdWdsYXNzL01cXG5Eb3Vyby9NXFxuRG92ZXIvTVxcbkRvdy9NXFxuRG93bnMvTVxcbkRvd255L01cXG5Eb3lsZS9NXFxuRHJcXG5EcmFjby9NXFxuRHJhY29uaWFuL01cXG5EcmFjdWxhL01cXG5EcmFrZS9NXFxuRHJhbWFtaW5lL1NNXFxuRHJhbWJ1aWUvTVxcbkRyYW5vL01cXG5EcmF2aWRpYW4vTVxcbkRyZWlzZXIvTVxcbkRyZXNkZW4vTVxcbkRyZXcvTVxcbkRyZXlmdXMvTVxcbkRyaXN0YW4vTVxcbkRyb3Bib3gvTVxcbkRydWRnZS9NXFxuRHJ1cGFsL01cXG5EcnlkZW4vTVxcbkRzY2h1YmJhL01cXG5EdVxcbkR1UG9udC9NXFxuRHVhbmUvTVxcbkR1YmFpL01cXG5EdWJjZWsvTVxcbkR1YmhlL01cXG5EdWJsaW4vTVxcbkR1YnJvdm5pay9NXFxuRHVidXF1ZS9NXFxuRHVjaGFtcC9NXFxuRHVkbGV5L01cXG5EdWZmeS9NXFxuRHVpc2J1cmcvTVxcbkR1a2UvTVxcbkR1bGxlcy9NXFxuRHVsdXRoL01cXG5EdW1hcy9NXFxuRHVtYmxlZG9yZS9NXFxuRHVtYm8vTVxcbkR1bmFudC9NXFxuRHVuYmFyL01cXG5EdW5jYW4vTVxcbkR1bmRlZVxcbkR1bmVkaW4vTVxcbkR1bmtpcmsvTVxcbkR1bmxhcC9NXFxuRHVubi9NXFxuRHVubmUvTVxcbkR1cmFjZWxsL01cXG5EdXJhbi9NXFxuRHVyYW50L01cXG5EdXJhbnRlL01cXG5EdXJiYW4vTVxcbkR1cmVyL01cXG5EdXJleC9NXFxuRHVyaGFtL01TXFxuRHVya2hlaW0vTVxcbkR1cm9jL01cXG5EdXJvY2hlci9NXFxuRHVzZS9NXFxuRHVzaGFuYmUvTVxcbkR1c3NlbGRvcmYvTVxcbkR1c3RidXN0ZXIvTVxcbkR1c3Rpbi9NXFxuRHVzdHkvTVxcbkR1dGNoL01cXG5EdXRjaG1hbi9NXFxuRHV0Y2htZW4vTVxcbkR1dGNod29tYW5cXG5EdXZhbGllci9NXFxuRHZpbmEvTVxcbkR2b3Jhay9NXFxuRHdheW5lL01cXG5Ed2lnaHQvTVxcbkR5L01cXG5EeWVyL01cXG5EeWxhbi9NXFxuRHluYW1vREIvTVxcbkR5c29uL01cXG5EemVyemhpbnNreS9NXFxuRHp1bmdhcmlhL01cXG5FL1NNXFxuRUNcXG5FQ0cvTVxcbkVDTUFTY3JpcHQvTVxcbkVEUC9NXFxuRURUXFxuRUVDL01cXG5FRUcvTVxcbkVFT1xcbkVFT0NcXG5FRkxcXG5FRlRcXG5FS0cvTVxcbkVMRi9NXFxuRU1cXG5FTVRcXG5FTkUvTVxcbkVPRVxcbkVQQS9NXFxuRVJcXG5FUkFcXG5FU0UvTVxcbkVTTFxcbkVTUC9NXFxuRVNQTi9NXFxuRVNSXFxuRVNUL01cXG5FVFxcbkVUQVxcbkVURFxcbkVVXFxuRVVMQS9TXFxuRWFraW5zL01cXG5FYXJoYXJ0L01cXG5FYXJsL01cXG5FYXJsZS9NXFxuRWFybGVuZS9NXFxuRWFybGluZS9NXFxuRWFybmVzdC9NXFxuRWFybmVzdGluZS9NXFxuRWFybmhhcmR0L01cXG5FYXJwL01cXG5FYXN0L1NaTVJcXG5FYXN0ZXIvTVxcbkVhc3Rlcm4vUlxcbkVhc3RtYW4vTVxcbkVhc3R3b29kL01cXG5FYXRvbi9NXFxuRWJlbi9NXFxuRWJlbmVlemVyL01cXG5FYmVydC9NXFxuRWJvbGEvTVxcbkVib25pY3MvTVxcbkVib255L01cXG5FYnJvL01cXG5FY2NsZXNpYXN0ZXMvTVxcbkVjby9NXFxuRWNzdGFzeVxcbkVjdWFkb3IvTVxcbkVjdWFkb3Jhbi9TTVxcbkVjdWFkb3JlYW5cXG5FY3VhZG9yaWFuL1NNXFxuRWQvTU5YXFxuRWRhbS9TTVxcbkVkZGEvTVxcbkVkZGllL01cXG5FZGRpbmd0b24vTVxcbkVkZHkvTVxcbkVkZW4vTVxcbkVkZ2FyL01cXG5FZGdhcmRvL01cXG5FZGluYnVyZ2gvTVxcbkVkaXNvbi9NXFxuRWRpdGgvTVxcbkVkbW9uZC9NXFxuRWRtb250b24vTVxcbkVkbXVuZC9NXFxuRWRuYS9NXFxuRWRzZWwvTVxcbkVkdWFyZG8vTVxcbkVkd2FyZC9TTVxcbkVkd2FyZGlhbi9NXFxuRWR3YXJkby9NXFxuRWR3YXJkcy9NXFxuRWR3aW4vTVxcbkVkd2luYS9NXFxuRWV5b3JlL01cXG5FZmZpZS9NXFxuRWZyYWluL01cXG5FZnJlbi9NXFxuRWdnby9NXFxuRWd5cHQvTVxcbkVneXB0aWFuL01TXFxuRWd5cHRvbG9neS9NXFxuRWhyZW5iZXJnL01cXG5FaHJsaWNoL01cXG5FaWNobWFubi9NXFxuRWlmZmVsL01cXG5FaWxlZW4vTVxcbkVpbnN0ZWluL01TXFxuRWlyZS9NXFxuRWlzZW5ob3dlci9NXFxuRWlzZW5zdGVpbi9NXFxuRWlzbmVyL01cXG5FbGFpbmUvTVxcbkVsYW0vTVxcbkVsYW5vci9NXFxuRWxhc3RpY3NlYXJjaC9NXFxuRWxhc3RvcGxhc3QvTVxcbkVsYmEvTVxcbkVsYmUvTVxcbkVsYmVydC9NXFxuRWxicnVzL01cXG5FbGRlcnNidXJnL01cXG5FbGRvbi9NXFxuRWxlYW5vci9NXFxuRWxlYXphci9NXFxuRWxlY3RyYS9NXFxuRWxlbmEvTVxcbkVsZ2FyL01cXG5FbGkvTVxcbkVsaWFzL01cXG5FbGlqYWgvTVxcbkVsaW5vci9NXFxuRWxpb3QvTVxcbkVsaXNhL01cXG5FbGlzYWJldGgvTVxcbkVsaXNlL01cXG5FbGlzZW8vTVxcbkVsaXNoYS9NXFxuRWxpemEvTVxcbkVsaXphYmV0aC9NXFxuRWxpemFiZXRoYW4vU01cXG5FbGl6YWJldGh0b3duL01cXG5FbGtoYXJ0L01cXG5FbGxhL01cXG5FbGxlbi9NXFxuRWxsZXNtZXJlL01cXG5FbGxpZS9NXFxuRWxsaW5ndG9uL01cXG5FbGxpb3QvTVxcbkVsbGlvdHQvTVxcbkVsbGlzL01cXG5FbGxpc29uL01cXG5FbG1hL01cXG5FbG1lci9NXFxuRWxtaXJhL01cXG5FbG1vL01cXG5FbG5hdGgvTVxcbkVsbm9yYS9NXFxuRWxvaGltL01cXG5FbG9pc2UvTVxcbkVsb3kvTVxcbkVscm95L01cXG5FbHNhL01cXG5FbHNpZS9NXFxuRWxzaW5vcmUvTVxcbkVsdGFuaW4vTVxcbkVsdG9uL01cXG5FbHVsL01cXG5FbHZhL01cXG5FbHZpYS9NXFxuRWx2aW4vTVxcbkVsdmlyYS9NXFxuRWx2aXMvTVxcbkVsd2F5L01cXG5FbHdvb2QvTVxcbkVseXJpYS9NXFxuRWx5c2VlL01cXG5FbHlzaWFuL01cXG5FbHlzaXVtL1NNXFxuRW1hY3MvTVxcbkVtYW51ZWwvTVxcbkVtZXJzb24vTVxcbkVtZXJ5L01cXG5FbWlsL01cXG5FbWlsZS9NXFxuRW1pbGlhL01cXG5FbWlsaW8vTVxcbkVtaWx5L01cXG5FbWluZW0vTVxcbkVtaW5lbmNlXFxuRW1tYS9NXFxuRW1tYW51ZWwvTVxcbkVtbWV0dC9NXFxuRW1teS9NXFxuRW1vcnkvTVxcbkVuY2FydGEvTVxcbkVuZHltaW9uL01cXG5FbmcvTVxcbkVuZ2Vscy9NXFxuRW5nbGFuZC9NXFxuRW5nbGlzaC9NUlNcXG5FbmdsaXNobWFuL01cXG5FbmdsaXNobWVuL01cXG5FbmdsaXNod29tYW4vTVxcbkVuZ2xpc2h3b21lbi9NXFxuRW5pZC9NXFxuRW5pZi9NXFxuRW5pd2V0b2svTVxcbkVua2lkdS9NXFxuRW5vY2gvTVxcbkVub3MvTVxcbkVucmljby9NXFxuRW5yaXF1ZS9NXFxuRW5yb24vTVxcbkVudGVycHJpc2UvTVxcbkVvY2VuZS9NXFxuRXBjb3QvTVxcbkVwaGVzaWFuL01TXFxuRXBoZXN1cy9NXFxuRXBocmFpbS9NXFxuRXBpY3RldHVzL01cXG5FcGljdXJlYW4vTVxcbkVwaWN1cnVzL01cXG5FcGltZXRoaXVzL01cXG5FcGlwaGFueS9TTVxcbkVwaXNjb3BhbFxcbkVwaXNjb3BhbGlhbi9NU1xcbkVwaXN0bGVcXG5FcHNvbS9NXFxuRXBzb24vTVxcbkVwc3RlaW4vTVxcbkVxdXVsZXVzL01cXG5Fci9NXFxuRXJhc211cy9NXFxuRXJhdG8vTVxcbkVyYXRvc3RoZW5lcy9NXFxuRXJlYnVzL01cXG5FcmVjdG9yL01cXG5FcmV3aG9uL01cXG5FcmhhcmQvTVxcbkVyaWMvTVxcbkVyaWNhL01cXG5FcmljaC9NXFxuRXJpY2svTVxcbkVyaWNrYS9NXFxuRXJpY2tzb24vTVxcbkVyaWRhbnVzL01cXG5FcmllL01cXG5FcmlrL01cXG5FcmlrYS9NXFxuRXJpbi9NXFxuRXJpcy9NU1xcbkVyaXRyZWEvTVxcbkVyaXRyZWFuL1NNXFxuRXJsYW5nL01cXG5Fcmxlbm1leWVyL01cXG5Fcm1hL01cXG5Fcm5hL01cXG5Fcm5lc3QvTVxcbkVybmVzdGluZS9NXFxuRXJuZXN0by9NXFxuRXJuaWUvTVxcbkVybnN0L01cXG5Fcm9zL01TXFxuRXJyb2wvTVxcbkVyc2UvTVxcbkVydkluL01cXG5Fcndpbi9NXFxuRXNhdS9NXFxuRXNjaGVyL01cXG5Fc2NoZXJpY2hpYS9NXFxuRXNjb25kaWRvXFxuRXNraW1vL01TXFxuRXNtZXJhbGRhL01cXG5Fc3BlcmFudG8vTVxcbkVzcGVyYW56YS9NXFxuRXNwaW5vemEvTVxcbkVzcS9NXFxuRXNxdWlyZS9NU1xcbkVzc2VuL01cXG5Fc3NlbmUvTVxcbkVzc2VxdWliby9NXFxuRXNzZXgvTVxcbkVzc2llL01cXG5Fc3RhYmxpc2htZW50XFxuRXN0ZWJhbi9NXFxuRXN0ZWxhL01cXG5Fc3RlbGxhL01cXG5Fc3RlbGxlL01cXG5Fc3Rlci9NXFxuRXN0ZXJoYXp5L01cXG5Fc3Rlcy9NXFxuRXN0aGVyL01cXG5Fc3RvbmlhL01cXG5Fc3Rvbmlhbi9TTVxcbkVzdHJhZGEvTVxcbkV0aGFuL01cXG5FdGhlbC9NXFxuRXRoZWxyZWQvTVxcbkV0aGVybmV0L01cXG5FdGhpb3BpYS9NXFxuRXRoaW9waWFuL1NNXFxuRXRuYS9NXFxuRXRvbi9NXFxuRXRydXJpYS9NXFxuRXRydXNjYW4vTVxcbkV0dGEvTVxcbkV1L01cXG5FdWNoYXJpc3QvTVNcXG5FdWNoYXJpc3RpY1xcbkV1Y2xpZC9NXFxuRXVnZW5lL01cXG5FdWdlbmlhL01cXG5FdWdlbmllL01cXG5FdWdlbmlvL01cXG5FdWxhL01cXG5FdWxlci9NXFxuRXVtZW5pZGVzL01cXG5FdW5pY2UvTVxcbkV1cGhyYXRlcy9NXFxuRXVyXFxuRXVyYXNpYS9NXFxuRXVyYXNpYW4vTVNcXG5FdXJpcGlkZXMvTVxcbkV1cm9kb2xsYXIvU01cXG5FdXJvcGEvTVxcbkV1cm9wZS9NXFxuRXVyb3BlYW4vTVNcXG5FdXJ5ZGljZS9NXFxuRXVzdGFjaGlhbi9NXFxuRXVzdGlzL01cXG5FdXRlcnBlL01cXG5FdmEvTVxcbkV2YW4vU01cXG5FdmFuZ2VsaWNhbFxcbkV2YW5nZWxpbmEvTVxcbkV2YW5nZWxpbmUvTVxcbkV2YW5nZWxpc3QvTVxcbkV2YW5zL01cXG5FdmFuc3ZpbGxlL01cXG5FdmUvTVxcbkV2ZWx5bi9NXFxuRXZlbmtpL01cXG5FdmVyUmVhZHkvTVxcbkV2ZXJlc3QvTVxcbkV2ZXJldHQvTVxcbkV2ZXJldHRlL01cXG5FdmVyZ2xhZGVzL01cXG5FdmVydC9NXFxuRXZpYW4vTVxcbkV2aXRhL01cXG5Fd2luZy9NXFxuRXhjYWxpYnVyL01cXG5FeGNlZHJpbi9NXFxuRXhjZWxsZW5jeS9TTVxcbkV4Y2hlcXVlclxcbkV4ZXJjeWNsZS9NXFxuRXhvY2V0L01cXG5FeG9kdXMvTVxcbkV4eG9uL01cXG5FeWNrL01cXG5FeXJlL01cXG5FeXNlbmNrL01cXG5FemVraWVsL01cXG5FenJhL01cXG5GL01EXFxuRkFBXFxuRkFRL1NNXFxuRkJJL01cXG5GQ0NcXG5GRFxcbkZEQVxcbkZESUMvTVxcbkZEUi9NXFxuRkhBL01cXG5GSUNBL01cXG5GSUZPXFxuRkxcXG5GTS9TTVxcbkZOTUEvTVxcbkZPRkxcXG5GT1JUUkFOL01cXG5GUE9cXG5GU0YvTVxcbkZTTElDXFxuRlRDXFxuRlVEL1NcXG5GV0RcXG5GV0lXXFxuRllcXG5GWUlcXG5GYWJlcmdlL01cXG5GYWJpYW4vTVNcXG5GYWNlYm9vay9NXFxuRmFlcm9lL01cXG5GYWZuaXIvTVxcbkZhZ2luL01cXG5GYWhkL01cXG5GYWhyZW5oZWl0L01cXG5GYWlyYmFua3MvTVxcbkZhaXJmaWVsZC9NXFxuRmFpcmhvcGUvTVxcbkZhaXNhbC9NXFxuRmFpc2FsYWJhZC9NXFxuRmFpdGgvTVxcbkZhamFyZG8vTVxcbkZhbGFzaGEvTVxcbkZhbGtsYW5kL1NNXFxuRmFsa2xhbmRzL01cXG5GYWxsb3BpYW4vTVxcbkZhbHN0YWZmL01cXG5GYWx3ZWxsL01cXG5GYW5uaWUvTVxcbkZhbm55L01cXG5GYXJhZGF5L01cXG5GYXJnby9NXFxuRmFybGV5L01cXG5GYXJtZXIvTVxcbkZhcm1pbmd0b24vTVxcbkZhcnJhZ3V0L01cXG5GYXJyYWtoYW4vTVxcbkZhcnJlbGwvTVxcbkZhcnJvdy9NXFxuRmFyc2kvTVxcbkZhc3NiaW5kZXIvTVxcbkZhdGFoL01cXG5GYXRlcy9NXFxuRmF0aGVyL1NNXFxuRmF0aW1hL01cXG5GYXRpbWlkL01cXG5GYXVsa25lci9NXFxuRmF1bGtuZXJpYW4vTVxcbkZhdW50bGVyb3kvTVxcbkZhdXN0L01cXG5GYXVzdGlhbi9NXFxuRmF1c3Rpbm8vTVxcbkZhdXN0dXMvTVxcbkZhd2tlcy9NXFxuRmF5L01cXG5GYXllL01cXG5GYXlldHRldmlsbGUvTVxcbkZlL01cXG5GZWIvTVxcbkZlYnJ1YXJ5L1NNXFxuRmVkL1NNXFxuRmVkRXgvTVxcbkZlZGVyYWwvTVNcXG5GZWRlcmFsaXN0L01cXG5GZWRlcmljby9NXFxuRmVkcy9NXFxuRmVsZWNpYS9NXFxuRmVsaWNlL01cXG5GZWxpY2lhL01cXG5GZWxpY2l0eS9NXFxuRmVsaXBlL01cXG5GZWxpeC9NXFxuRmVsbGluaS9NXFxuRmVuaWFuL01cXG5GZXJiZXIvTVxcbkZlcmRpbmFuZC9NXFxuRmVyZ3VzL01cXG5GZXJndXNvbi9NXFxuRmVybGluZ2hldHRpL01cXG5GZXJtYXQvTVxcbkZlcm1pL01cXG5GZXJuL01cXG5GZXJuYW5kZXovTVxcbkZlcm5hbmRvL01cXG5GZXJyYXJpL01cXG5GZXJyYXJvL01cXG5GZXJyZWxsL01cXG5GZXJyaXMvTVxcbkZleW5tYW4vTVxcbkZlei9NXFxuRmlhdC9NXFxuRmliZXJnbGFzL01cXG5GaWJvbmFjY2kvTVxcbkZpY2h0ZS9NXFxuRmlkZWwvTVxcbkZpZG8vTVxcbkZpZWxkaW5nL01cXG5GaWVsZHMvTVxcbkZpZ2Fyby9NXFxuRmlndWVyb2EvTVxcbkZpamkvTVxcbkZpamlhbi9NU1xcbkZpbGlwaW5vL01TXFxuRmlsbG1vcmUvTVxcbkZpbG9mYXgvTVxcbkZpbmNoL01cXG5GaW5sYW5kL01cXG5GaW5sYXkvTVxcbkZpbmxleS9NXFxuRmlubi9TTVxcbkZpbm5ib2dhZG90dGlyL01cXG5GaW5uZWdhbi9NXFxuRmlubmlzaC9NXFxuRmlvbmEvTVxcbkZpcmViYXNlL01cXG5GaXJlZm94L01cXG5GaXJlc3RvbmUvTVxcbkZpc2NoZXIvTVxcbkZpc2hlci9NXFxuRmlzay9NXFxuRml0Y2gvTVxcbkZpdGNoYnVyZy9NXFxuRml0emdlcmFsZC9NXFxuRml0enBhdHJpY2svTVxcbkZpdHpyb3kvTVxcbkZpemVhdS9NXFxuRmxhXFxuRmxhZ3N0YWZmL01cXG5GbGFuYWdhbi9NXFxuRmxhbmRlcnMvTVxcbkZsYXRoZWFkXFxuRmxhdHQvTVxcbkZsYXViZXJ0L01cXG5GbGVpc2NoZXIvTVxcbkZsZW1pbmcvTVxcbkZsZW1pc2gvTVxcbkZsZXRjaGVyL01cXG5GbGludC9NXFxuRmxpbnRzdG9uZXMvTVxcbkZsby9NXFxuRmxvcmEvTVxcbkZsb3JlbmNlL01cXG5GbG9yZW50aW5lL01cXG5GbG9yZXMvTVxcbkZsb3JpZGEvTVxcbkZsb3JpZGFuL01cXG5GbG9yaWRpYW4vU01cXG5GbG9yaW5lL01cXG5GbG9yc2hlaW0vTVxcbkZsb3J5L01cXG5GbG9zc2llL01cXG5GbG93ZXJzL01cXG5GbG95ZC9NXFxuRmx5bm4vTVxcbkZtL01cXG5Gb2NoL01cXG5Gb2trZXIvTVxcbkZvbGV5L01cXG5Gb2xnZXJzL01cXG5Gb2xzb20vTVxcbkZvbWFsaGF1dC9NXFxuRm9uZGEvTVxcbkZvb3NiYWxsL01cXG5Gb3JiZXMvTVxcbkZvcmQvTVxcbkZvcmVtYW4vTVxcbkZvcmVzdC9NUlxcbkZvcmVzdGVyL01cXG5Gb3JtaWNhL01TXFxuRm9ybW9zYS9NXFxuRm9ybW9zYW4vTVxcbkZvcnJlc3QvTVxcbkZvcnN0ZXIvTVxcbkZvcnRhbGV6YS9NXFxuRm9zc2UvTVxcbkZvc3Rlci9NXFxuRm90b21hdC9NXFxuRm91Y2F1bHQvTVxcbkZvdXJpZXIvTVxcbkZvdXJuZXlyb24vTVxcbkZvdXJ0aFxcbkZvd2xlci9NXFxuRm94L01TXFxuRnIvTURcXG5GcmFnb25hcmQvTVxcbkZyYW4vTVxcbkZyYW5jZS9TTVxcbkZyYW5jZXMvTVxcbkZyYW5jZXNjYS9NXFxuRnJhbmNpbmUvTVxcbkZyYW5jaXMvTVxcbkZyYW5jaXNjYS9NXFxuRnJhbmNpc2Nhbi9NU1xcbkZyYW5jaXNjby9NXFxuRnJhbmNrL01cXG5GcmFuY28vTVxcbkZyYW5jb2lzL01cXG5GcmFuY29pc2UvTVxcbkZyYW5jb3BoaWxlXFxuRnJhbmdsYWlzL01cXG5GcmFuay9TTVxcbkZyYW5rZWwvTVxcbkZyYW5rZW5zdGVpbi9NXFxuRnJhbmtmb3J0L01cXG5GcmFua2Z1cnQvTVJcXG5GcmFua2Z1cnRlci9NXFxuRnJhbmtpZS9NXFxuRnJhbmtpc2hcXG5GcmFua2xpbi9NXFxuRnJhbmtzL01cXG5GcmFubnkvTVxcbkZyYW56L01cXG5GcmFzZXIvTVxcbkZyYXUvTU5cXG5GcmF1bGVpblxcbkZyYXppZXIvTVxcbkZyZWQvTVxcbkZyZWRhL01cXG5GcmVkZGllL01cXG5GcmVkZHkvTVxcbkZyZWRlcmljL01cXG5GcmVkZXJpY2svTVxcbkZyZWRlcmlja3NidXJnL01cXG5GcmVkZXJpY3Rvbi9NXFxuRnJlZHJpYy9NXFxuRnJlZHJpY2svTVxcbkZyZWVtYW4vTVxcbkZyZWVtYXNvbi9TTVxcbkZyZWVtYXNvbnJ5L1NNXFxuRnJlZXRvd24vTVxcbkZyZWlkYS9NXFxuRnJlbW9udC9NXFxuRnJlbmNoL01TXFxuRnJlbmNobWFuL01cXG5GcmVuY2htZW4vTVxcbkZyZW5jaHdvbWFuL01cXG5GcmVuY2h3b21lbi9NXFxuRnJlb24vTVxcbkZyZXNuZWwvTVxcbkZyZXNuby9NXFxuRnJldWQvTVxcbkZyZXVkaWFuL01cXG5GcmV5L01cXG5GcmV5YS9NXFxuRnJpL01cXG5GcmlkYXkvU01cXG5GcmllZGEvTVxcbkZyaWVkYW4vTVxcbkZyaWVkbWFuL01cXG5GcmllZG1hbm4vTVxcbkZyaWVuZC9TTVxcbkZyaWdnYS9NXFxuRnJpZ2lkYWlyZS9NXFxuRnJpc2JlZS9NXFxuRnJpc2NvL01cXG5GcmlzaWFuL01TXFxuRnJpdG8vTVxcbkZyaXR6L01cXG5Gcm9iaXNoZXIvTVxcbkZyb2RvL01cXG5Gcm9pc3NhcnQvTVxcbkZyb21tL01cXG5Gcm9uZGUvTVxcbkZyb250ZW5hYy9NXFxuRnJvc3QvTVxcbkZyb3N0YmVsdC9NXFxuRnJ1bnplL01cXG5GcnkvTVxcbkZyeWUvTVxcbkZ1Y2hzL01cXG5GdWVudGVzL01cXG5GdWdnZXIvTVxcbkZ1amkvTVxcbkZ1amlhbi9NXFxuRnVqaXRzdS9NXFxuRnVqaXdhcmEvTVxcbkZ1aml5YW1hL01cXG5GdWt1b2thL01cXG5GdWt1eWFtYS9NXFxuRnVsYW5pL01cXG5GdWxicmlnaHQvTVxcbkZ1bGxlci9NXFxuRnVsbGVydG9uL01cXG5GdWx0b24vTVxcbkZ1bmFmdXRpL01cXG5GdW5keS9NXFxuRnVyaWVzL01cXG5GdXJtYW4vTVxcbkZ1cnR3YW5nbGVyL01cXG5GdXNodW4vTVxcbkZ1emhvdS9NXFxuRnV6emJ1c3Rlci9NXFxuRy9NTlJCXFxuR0FcXG5HQU9cXG5HQVRUL01cXG5HQi9NXFxuR0NDL01cXG5HRFAvTVxcbkdFL01cXG5HRURcXG5HSFEvTVxcbkdIelxcbkdJXFxuR0lGXFxuR0lHT1xcbkdNL01cXG5HTUFUXFxuR01PXFxuR01UL01cXG5HTlAvTVxcbkdOVS9NXFxuR09QL01cXG5HUC9NXFxuR1BBXFxuR1BPXFxuR1BTXFxuR1BVXFxuR1NBXFxuR1RFL01cXG5HVVxcbkdVSS9NXFxuR2EvTVxcbkdhYmxlL01cXG5HYWJvbi9NXFxuR2Fib25lc2UvTVxcbkdhYm9yb25lL01cXG5HYWJyaWVsL01cXG5HYWJyaWVsYS9NXFxuR2FicmllbGxlL01cXG5HYWNydXgvTVxcbkdhZHNkZW4vTVxcbkdhZWEvTVxcbkdhZWwvU01cXG5HYWVsaWMvTVxcbkdhZ2FyaW4vTVxcbkdhZ2UvTVxcbkdhaWEvTVxcbkdhaWwvTVxcbkdhaW1hbi9NXFxuR2FpbmVzL01cXG5HYWluZXN2aWxsZS9NXFxuR2FpbnNib3JvdWdoL01cXG5HYWxhaGFkL1NNXFxuR2FsYXBhZ29zL01cXG5HYWxhdGVhL01cXG5HYWxhdGlhL01cXG5HYWxhdGlhbnMvTVxcbkdhbGF4eVxcbkdhbGJyYWl0aC9NXFxuR2FsZS9NXFxuR2FsZW4vTVxcbkdhbGliaS9NXFxuR2FsaWxlYW4vU01cXG5HYWxpbGVlL01cXG5HYWxpbGVvL01cXG5HYWxsL01cXG5HYWxsYWdoZXIvTVxcbkdhbGxlZ29zL01cXG5HYWxsaWMvTVxcbkdhbGxpY2lzbS9TTVxcbkdhbGxvL01cXG5HYWxsb3dheS9NXFxuR2FsbHVwL01cXG5HYWxvaXMvTVxcbkdhbHN3b3J0aHkvTVxcbkdhbHZhbmkvTVxcbkdhbHZlc3Rvbi9NXFxuR2FtYVxcbkdhbWF5L01cXG5HYW1iaWEvTVxcbkdhbWJpYW4vU01cXG5HYW1ibGUvTVxcbkdhbW93L01cXG5HYW5kYWxmL01cXG5HYW5kaGkvTVxcbkdhbmRoaWFuL01cXG5HYW5lc2hhL01cXG5HYW5nZXMvTVxcbkdhbmd0b2svTVxcbkdhbnN1L01cXG5HYW50cnkvTVxcbkdhbnltZWRlL01cXG5HYXAvTVxcbkdhcmJvL01cXG5HYXJjaWEvTVxcbkdhcmRuZXIvTVxcbkdhcmV0aC9NXFxuR2FyZmllbGQvTVxcbkdhcmZ1bmtlbC9NXFxuR2FyZ2FudHVhL01cXG5HYXJpYmFsZGkvTVxcbkdhcmxhbmQvTVxcbkdhcm5lci9NXFxuR2FycmV0dC9NXFxuR2Fycmljay9NXFxuR2Fycmlzb24vTVxcbkdhcnJ5L01cXG5HYXJ0aC9NXFxuR2FydmV5L01cXG5HYXJ5L01cXG5HYXJ6YS9NXFxuR2FzY29ueS9NXFxuR2Fzc2VyL01cXG5HYXN0b25pYS9NXFxuR2FzdHJvZW50ZXJvbG9neVxcbkdhdGVzL01cXG5HYXRsaW5nL01cXG5HYXRvcmFkZS9NXFxuR2F0c2J5L01cXG5HYXR1bi9NXFxuR2F1Z3Vpbi9NXFxuR2F1bC9TTVxcbkdhdWxpc2hcXG5HYXVzcy9NXFxuR2F1c3NpYW4vTVxcbkdhdXRhbWEvTVxcbkdhdXRpZXIvTVxcbkdhdmluL01cXG5HYXdhaW4vTVxcbkdheS9NXFxuR2F5bGUvTVxcbkdhemEvTVxcbkdhemlhbnRlcC9NXFxuR2QvTVxcbkdkYW5zay9NXFxuR2UvTVxcbkdlZmZlbi9NXFxuR2VoZW5uYS9NXFxuR2VocmlnL01cXG5HZWlnZXIvTVxcbkdlbGJ2aWVoL01cXG5HZWxsZXIvTVxcbkdlbWluaS9NU1xcbkdlbi9NXFxuR2VuYS9NXFxuR2VuYXJvL01cXG5HZW5lL01cXG5HZW5lc2lzL01cXG5HZW5ldC9NXFxuR2VuZXZhL01cXG5HZW5ldmlldmUvTVxcbkdlbmdoaXMvTVxcbkdlbm9hL1NNXFxuR2VudG9vL01cXG5HZW50cnkvTVxcbkdlby9NXFxuR2VvZmZyZXkvTVxcbkdlb3JnZS9NU1xcbkdlb3JnZXRvd24vTVxcbkdlb3JnZXR0ZS9NXFxuR2VvcmdpYS9NXFxuR2VvcmdpYW4vTVNcXG5HZW9yZ2luYS9NXFxuR2VyL01cXG5HZXJhbGQvTVxcbkdlcmFsZGluZS9NXFxuR2VyYXJkL01cXG5HZXJhcmRvL01cXG5HZXJiZXIvTVxcbkdlcmUvTVxcbkdlcml0b2wvTVxcbkdlcm1hbi9NU1xcbkdlcm1hbmljL01cXG5HZXJtYW55L01cXG5HZXJvbmltby9NXFxuR2VycnkvTVxcbkdlcnNod2luL01cXG5HZXJ0cnVkZS9NXFxuR2VzdGFwby9TTVxcbkdldGhzZW1hbmUvTVxcbkdldHR5L01cXG5HZXR0eXNidXJnL01cXG5HZXd1cnp0cmFtaW5lci9NXFxuR2hhbmEvTVxcbkdoYW5haWFuXFxuR2hhdHMvTVxcbkdoYXp2YW5pZC9NXFxuR2hlbnQvTVxcbkdoaWJlbGxpbmUvTVxcbkdpYWNvbWV0dGkvTVxcbkdpYW5uaW5pL01cXG5HaWF1cXVlL01cXG5HaWJib24vTVxcbkdpYmJzL01cXG5HaWJyYWx0YXIvTVNcXG5HaWJzb24vTVxcbkdpZGUvTVxcbkdpZGVvbi9NXFxuR2llbGd1ZC9NXFxuR2llbmFoL01cXG5HaWwvTVxcbkdpbGEvTVxcbkdpbGJlcnQvTVxcbkdpbGJlcnRvL01cXG5HaWxjaHJpc3QvTVxcbkdpbGRhL01cXG5HaWxlYWQvTVxcbkdpbGVzL01cXG5HaWxnYW1lc2gvTVxcbkdpbGwvTVxcbkdpbGxlc3BpZS9NXFxuR2lsbGV0dGUvTVxcbkdpbGxpYW0vTVxcbkdpbGxpYW4vTVxcbkdpbGxpZ2FuL01cXG5HaWxtYW5cXG5HaWxtb3JlL01cXG5HaWxyb3kvTVxcbkdpbmEvTVxcbkdpbmdlci9NXFxuR2luZ3JpY2gvTVxcbkdpbm55L01cXG5HaW5vL01cXG5HaW5zYmVyZy9NXFxuR2luc2J1cmcvTVxcbkdpbnN1L01cXG5HaW9yZ2lvbmUvTVxcbkdpb3R0by9NXFxuR2lvdmFubmkvTVxcbkdpcmF1ZG91eC9NXFxuR2lzZWxsZS9NXFxuR2lzaC9NXFxuR2l0SHViL01cXG5HaXVsaWFuaS9NXFxuR2l1c2VwcGUvTVxcbkdpemEvTVxcbkdrXFxuR2xhZHN0b25lL01TXFxuR2xhZHlzL01cXG5HbGFzZXIvTVxcbkdsYXNnb3cvTVxcbkdsYXNzL01cXG5HbGFzdG9uYnVyeS9NXFxuR2xhc3dlZ2lhbi9TTVxcbkdsYXhvL01cXG5HbGVhc29uL01cXG5HbGVuL01cXG5HbGVuZGEvTVxcbkdsZW5kYWxlXFxuR2xlbmxpdmV0L01cXG5HbGVubi9NXFxuR2xlbm5hL01cXG5HbG9yaWEvTVxcbkdsb3VjZXN0ZXIvTVxcbkdsb3Zlci9NXFxuR25vc3RpYy9NXFxuR25vc3RpY2lzbS9NXFxuR251UEdcXG5Hb2EvTVxcbkdvYmkvTVxcbkdvZC9NXFxuR29kYXJkL01cXG5Hb2RkYXJkL01cXG5Hb2RlbC9NXFxuR29kaGVhZC9NXFxuR29kaXZhL01cXG5Hb2RvdC9NXFxuR29kc3BlZWQvU01cXG5Hb2R0aGFhYi9NXFxuR29kdW5vdi9NXFxuR29kemlsbGEvTVxcbkdvZWJiZWxzL01cXG5Hb2VyaW5nL01cXG5Hb2V0aGFscy9NXFxuR29ldGhlL01cXG5Hb2ZmL01cXG5Hb2cvTVxcbkdvZ29sL01cXG5Hb2lhbmlhL01cXG5Hb2xhbi9NXFxuR29sY29uZGEvTVxcbkdvbGRhL01cXG5Hb2xkYmVyZy9NXFxuR29sZGVuL01cXG5Hb2xkaWUvTVxcbkdvbGRpbG9ja3MvTVxcbkdvbGRpbmcvTVxcbkdvbGRtYW4vTVxcbkdvbGRzYm9yby9NXFxuR29sZHNtaXRoL01cXG5Hb2xkd2F0ZXIvTVxcbkdvbGR3eW4vTVxcbkdvbGdpL01cXG5Hb2xnb3RoYS9NXFxuR29saWF0aC9NXFxuR29tZXovTVxcbkdvbW9ycmFoL01cXG5Hb21wZXJzL01cXG5Hb211bGthL01cXG5Hb25kd2FuYWxhbmQvTVxcbkdvbnphbGVzL01cXG5Hb256YWxlei9NXFxuR29uemFsby9NXFxuR29vZC9NXFxuR29vZGFsbC9NXFxuR29vZGUvTVxcbkdvb2RtYW4vTVxcbkdvb2RyaWNoL01cXG5Hb29kd2lsbC9NXFxuR29vZHdpbi9NXFxuR29vZHllYXIvTVxcbkdvb2dsZS9NXFxuR29vbGFnb25nL01cXG5Hb3BoZXJcXG5Hb3JiYWNoZXYvTVxcbkdvcmRpYW4vTVxcbkdvcmRpbWVyL01cXG5Hb3Jkb24vTVxcbkdvcmUvTVxcbkdvcmVuL01cXG5Hb3JleS9NXFxuR29yZ2FzL01cXG5Hb3Jnb24vTVxcbkdvcmdvbnpvbGEvTVxcbkdvcmt5L01cXG5Hb3NwZWwvTVNcXG5Hb3RlYm9yZy9NXFxuR290aC9NXFxuR290aGFtL01cXG5Hb3RoaWMvTVNcXG5Hb3Roc1xcbkdvdWRhL1NNXFxuR291bGQvTVxcbkdvdW5vZC9NXFxuR292ZXJub3JcXG5Hb3lhL01cXG5Hci9CXFxuR3JhYmxlL01cXG5HcmFjY2h1cy9NXFxuR3JhY2UvTVxcbkdyYWNlbGFuZC9NXFxuR3JhY2llL01cXG5HcmFjaWVsYS9NXFxuR3JhZHkvTVxcbkdyYWZmaWFzL01cXG5HcmFmdG9uL01cXG5HcmFoYW0vTVxcbkdyYWhhbWUvTVxcbkdyYWlsL01cXG5HcmFtbXkvTVxcbkdyYW1waWFucy9NXFxuR3JhbmFkYS9NXFxuR3JhbnQvTVxcbkdyYXNzL01cXG5HcmF2ZXMvTVxcbkdyYXkvTVxcbkdyYXlzbGFrZS9NXFxuR3JlY2lhbi9NXFxuR3JlZWNlL01cXG5HcmVlay9TTVxcbkdyZWVsZXkvTVxcbkdyZWVuL1NNXFxuR3JlZW5lL01cXG5HcmVlbmxhbmQvTVxcbkdyZWVubGFuZGljXFxuR3JlZW5wZWFjZS9NXFxuR3JlZW5zYm9yby9NXFxuR3JlZW5zbGVldmVzL01cXG5HcmVlbnNwYW4vTVxcbkdyZWVudmlsbGUvTVxcbkdyZWVud2ljaC9NXFxuR3JlZXIvTVxcbkdyZWcvTVxcbkdyZWdnL01cXG5HcmVnb3JpYW4vTVxcbkdyZWdvcmlvL01cXG5HcmVnb3J5L01cXG5HcmVuYWRhL01cXG5HcmVuYWRpYW4vTVNcXG5HcmVuYWRpbmVzL01cXG5HcmVuZGVsL01cXG5HcmVub2JsZS9NXFxuR3Jlc2hhbS9NXFxuR3JldGEvTVxcbkdyZXRjaGVuL01cXG5HcmV0ZWwvTVxcbkdyZXR6a3kvTVxcbkdyZXkvTVxcbkdyaWVnL01cXG5HcmlmZmluL01cXG5HcmlmZml0aC9NXFxuR3JpbWVzL01cXG5HcmltbS9NXFxuR3JpbmNoL01cXG5HcmlzL01cXG5Hcm9teWtvL01cXG5Hcm9waXVzL01cXG5Hcm9zcy9NXFxuR3Jvc3ovTVxcbkdyb3RpdXMvTVxcbkdyb3Zlci9NXFxuR3Jvem55XFxuR3J1bW1hbi9NXFxuR3J1bmR5L01cXG5HcnVuZXdhbGQvTVxcbkdydXMvTVxcbkdydXllcmUvU01cXG5HdWFkYWxhamFyYS9NXFxuR3VhZGFsY2FuYWwvTVxcbkd1YWRhbHF1aXZpci9NXFxuR3VhZGFsdXBlL01cXG5HdWFkZWxvdXBlL01cXG5HdWFsbGF0aXJpL01cXG5HdWFtL01cXG5HdWFtYW5pYW5cXG5HdWFuZ2RvbmcvTVxcbkd1YW5nemhvdS9NXFxuR3VhbnRhbmFtby9NXFxuR3VhcmFuaS9NXFxuR3Vhcm5pZXJpL01cXG5HdWF0ZW1hbGEvTVxcbkd1YXRlbWFsYW4vTVNcXG5HdWF5YW1hL01cXG5HdWF5YXF1aWwvTVxcbkd1Y2NpL01cXG5HdWVscGgvTVxcbkd1ZXJuc2V5L01TXFxuR3VlcnJhL01cXG5HdWVycmVyby9NXFxuR3VldmFyYS9NXFxuR3VnZ2VuaGVpbS9NXFxuR3VpYW5hL01cXG5HdWlkb1xcbkd1aWxsZXJtby9NXFxuR3VpbmVhL01cXG5HdWluZWFuL01TXFxuR3VpbmV2ZXJlL01cXG5HdWlubmVzcy9NXFxuR3VpeWFuZy9NXFxuR3VpemhvdS9NXFxuR3Vpem90L01cXG5HdWphcmF0L01cXG5HdWphcmF0aS9NXFxuR3VqcmFud2FsYS9NXFxuR3VsZnBvcnQvTVxcbkd1bGxhaC9NXFxuR3VsbGl2ZXIvTVxcbkd1bWJlbC9NXFxuR3VudGhlci9NXFxuR3VvZmVuZy9NXFxuR3VwdGEvTVxcbkd1cmtoYS9NXFxuR3VzL01cXG5HdXN0YXYvTVxcbkd1c3Rhdm8vTVxcbkd1c3RhdnVzL01cXG5HdXRlbmJlcmcvTVxcbkd1dGhyaWUvTVxcbkd1dGllcnJlei9NXFxuR3V5L01cXG5HdXlhbmEvTVxcbkd1eWFuZXNlL01cXG5HdXptYW4vTVxcbkd3YWxpb3IvTVxcbkd3ZW4vTVxcbkd3ZW5kb2xpbmUvTVxcbkd3ZW5kb2x5bi9NXFxuR3d5bi9NXFxuR3lwc3kvU01cXG5IL01cXG5IQk8vTVxcbkhCYXNlL01cXG5IRERcXG5IRE1JXFxuSERUVlxcbkhGL01cXG5ISFNcXG5ISVxcbkhJVi9NXFxuSE1cXG5ITU8vTVxcbkhNU1xcbkhPVlxcbkhQL01cXG5IUFZcXG5IUS9NXFxuSFJcXG5IUkhcXG5IU1xcbkhTQkMvTVxcbkhTVFxcbkhUXFxuSFRNTC9NXFxuSFRUUFxcbkhVRC9NXFxuSGEvTVxcbkhhYXMvTVxcbkhhYmFra3VrL01cXG5IYWJlci9NXFxuSGFkYXIvTVxcbkhhZGVzL01cXG5IYWRvb3AvTVxcbkhhZHJpYW4vTVxcbkhhZml6L01cXG5IYWdhci9NXFxuSGFnZXJzdG93bi9NXFxuSGFnZ2FpL01cXG5IYWdpb2dyYXBoYS9NXFxuSGFndWUvTVxcbkhhaG4vTVxcbkhhaWRhL1NNXFxuSGFpZmEvTVxcbkhhaW5hbi9NXFxuSGFpcGhvbmcvTVxcbkhhaXRpL01cXG5IYWl0aWFuL01TXFxuSGFra2EvTVxcbkhha2x1eXQvTVxcbkhhbC9TTVxcbkhhbGRhbmUvTVxcbkhhbGUvTVxcbkhhbGVha2FsYS9NXFxuSGFsZXkvTVxcbkhhbGlmYXgvTVxcbkhhbGwvTVxcbkhhbGxleS9NXFxuSGFsbGlidXJ0b24vTVxcbkhhbGxpZS9NXFxuSGFsbG1hcmsvTVxcbkhhbGxvd2Vlbi9NU1xcbkhhbGxzdGF0dC9NXFxuSGFsb24vTVxcbkhhbHMvTVxcbkhhbHNleS9NXFxuSGFtL01cXG5IYW1hbi9NXFxuSGFtYnVyZy9NU1xcbkhhbWh1bmcvTVxcbkhhbWlsY2FyL01cXG5IYW1pbGwvTVxcbkhhbWlsdG9uL01cXG5IYW1pbHRvbmlhbi9NXFxuSGFtaXRpYy9NXFxuSGFtbGV0L01cXG5IYW1saW4vTVxcbkhhbW1hcnNram9sZC9NXFxuSGFtbWVyc3RlaW4vTVxcbkhhbW1ldHQvTVxcbkhhbW1vbmQvTVxcbkhhbW11cmFiaS9NXFxuSGFtcHNoaXJlL01cXG5IYW1wdG9uL01cXG5IYW1zdW4vTVxcbkhhbi9TTVxcbkhhbmNvY2svTVxcbkhhbmRlbC9NXFxuSGFuZHkvTVxcbkhhbmV5L01cXG5IYW5mb3JkL01cXG5IYW5ndWwvTVxcbkhhbmd6aG91L01cXG5IYW5rL01cXG5IYW5uYS9NXFxuSGFubmFoL01cXG5IYW5uaWJhbC9NXFxuSGFub2kvTVxcbkhhbm92ZXIvTVxcbkhhbm92ZXJpYW4vTVxcbkhhbnMvTU5cXG5IYW5zZWwvTVxcbkhhbnNlbi9NXFxuSGFuc29uL01cXG5IYW51a2FcXG5IYW51a2thaC9NXFxuSGFudWtrYWhzXFxuSGFwc2J1cmcvTVxcbkhhcmFyZS9NXFxuSGFyYmluL01cXG5IYXJkaW4vTVxcbkhhcmRpbmcvTVxcbkhhcmR5L01cXG5IYXJncmVhdmVzL01cXG5IYXJsYW4vTVxcbkhhcmxlbS9NXFxuSGFybGVxdWluL01cXG5IYXJsZXkvTVxcbkhhcmxpbmdlbi9NXFxuSGFybG93L01cXG5IYXJtb24vTVxcbkhhcm9sZC9NXFxuSGFycGVyL01cXG5IYXJweS9TTVxcbkhhcnJlbGwvTVxcbkhhcnJpZXQvTVxcbkhhcnJpZXR0L01cXG5IYXJyaW5ndG9uL01cXG5IYXJyaXMvTVxcbkhhcnJpc2J1cmcvTVxcbkhhcnJpc29uL01cXG5IYXJyaXNvbmJ1cmcvTVxcbkhhcnJvZHMvTVxcbkhhcnJ5L01cXG5IYXJ0L01cXG5IYXJ0ZS9NXFxuSGFydGZvcmQvTVxcbkhhcnRsaW5lL01cXG5IYXJ0bWFuL01cXG5IYXJ2YXJkL01cXG5IYXJ2ZXkvTVxcbkhhc2Jyby9NXFxuSGFzaWRpbS9NXFxuSGFza2VsbC9NXFxuSGFzdGluZ3MvTVxcbkhhdGZpZWxkL01cXG5IYXRoYXdheS9NXFxuSGF0c2hlcHV0L01cXG5IYXR0ZXJhcy9NXFxuSGF0dGllL01cXG5IYXR0aWVzYnVyZy9NXFxuSGF1cHRtYW5uL01cXG5IYXVzYS9NXFxuSGF1c2RvcmZmL01cXG5IYXZhbmEvTVNcXG5IYXZhcnRpL01cXG5IYXZlbC9NXFxuSGF2b2xpbmUvTVxcbkhhd1xcbkhhd2FpaS9NXFxuSGF3YWlpYW4vU01cXG5IYXdraW5nL01cXG5IYXdraW5zL01cXG5IYXdrc1xcbkhhd3Rob3JuZS9NXFxuSGF5L1NNXFxuSGF5ZGVuL01cXG5IYXlkbi9NXFxuSGF5ZWsvTVxcbkhheWVzL01cXG5IYXluZXMvTVxcbkhheXMvTVxcbkhheXdhcmQvTVxcbkhheXdvb2QvTVxcbkhheXdvcnRoL01cXG5IYXplbC9NXFxuSGF6bGV0b24vTVxcbkhhemxpdHQvTVxcbkhlL01cXG5IZWFkL01cXG5IZWFyc3QvTVxcbkhlYXRoL01SXFxuSGVhdGhlci9NXFxuSGVhdmlzaWRlL01cXG5IZWJcXG5IZWJlL01cXG5IZWJlaS9NXFxuSGViZXJ0L01cXG5IZWJyYWljL01cXG5IZWJyYWlzbS9TTVxcbkhlYnJldy9NU1xcbkhlYnJld3MvTVxcbkhlYnJpZGVzL01cXG5IZWNhdGUvTVxcbkhlY3Rvci9NXFxuSGVjdWJhL01cXG5IZWVwL01cXG5IZWZuZXIvTVxcbkhlZ2VsL01cXG5IZWdlbGlhbi9NXFxuSGVnaXJhL01cXG5IZWlkZWdnZXIvTVxcbkhlaWRlbGJlcmcvTVxcbkhlaWRpL01cXG5IZWlmZXR6L01cXG5IZWlsb25namlhbmcvTVxcbkhlaW1saWNoL01cXG5IZWluZS9NXFxuSGVpbmVrZW4vTVxcbkhlaW5sZWluL01cXG5IZWlucmljaC9NXFxuSGVpbnovTVxcbkhlaXNlbmJlcmcvTVxcbkhlaXNtYW4vTVxcbkhlbGVuL01cXG5IZWxlbmEvTVxcbkhlbGVuZS9NXFxuSGVsZ2EvTVxcbkhlbGljb2JhY3RlclxcbkhlbGljb24vTVxcbkhlbGlvcG9saXMvTVxcbkhlbGlvcy9NXFxuSGVsbGVuZS9TTVxcbkhlbGxlbmljL01cXG5IZWxsZW5pc20vTVNcXG5IZWxsZW5pc3RcXG5IZWxsZW5pc3RpYy9NXFxuSGVsbGVuaXphdGlvbi9NXFxuSGVsbGVuaXplL01cXG5IZWxsZXIvTVxcbkhlbGxlc3BvbnQvTVxcbkhlbGxtYW4vTVxcbkhlbG1ob2x0ei9NXFxuSGVsb2lzZS9NXFxuSGVsc2lua2kvTVxcbkhlbHZldGlhblxcbkhlbHZldGl1cy9NXFxuSGVtZXQvTVxcbkhlbWluZ3dheS9NXFxuSGVuYW4vTVxcbkhlbmNoL01cXG5IZW5kZXJzb24vTVxcbkhlbmRyaWNrL01TXFxuSGVuZHJpY2tzL01cXG5IZW5kcml4L01cXG5IZW5sZXkvTVxcbkhlbm5lc3N5L01cXG5IZW5yaS9NXFxuSGVucmlldHRhL01cXG5IZW5yaWsvTVxcbkhlbnJ5L01cXG5IZW5zbGV5L01cXG5IZW5zb24vTVxcbkhlcGJ1cm4vTVxcbkhlcGhhZXN0dXMvTVxcbkhlcHBsZXdoaXRlL01cXG5IZXJhL01cXG5IZXJhY2xlcy9NXFxuSGVyYWNsaXR1cy9NXFxuSGVyYWtsZXMvTVxcbkhlcmJhcnQvTVxcbkhlcmJlcnQvTVxcbkhlcmN1bGFuZXVtL01cXG5IZXJjdWxlYW5cXG5IZXJjdWxlcy9NXFxuSGVyZGVyL01cXG5IZXJlZm9yZC9TTVxcbkhlcmVyby9NXFxuSGVyaWJlcnRvL01cXG5IZXJtYW4vTVxcbkhlcm1hcGhyb2RpdHVzL01cXG5IZXJtZXMvTVxcbkhlcm1pbmlhL01cXG5IZXJtaXRhZ2UvTVxcbkhlcm1pdGUvTVxcbkhlcm1vc2lsbG8vTVxcbkhlcm5hbmRlei9NXFxuSGVyb2QvTVxcbkhlcm9kb3R1cy9NXFxuSGVyb2t1L01cXG5IZXJyL01HXFxuSGVycmVyYS9NXFxuSGVycmljay9NXFxuSGVycmluZy9NXFxuSGVyc2NoZWwvTVxcbkhlcnNleS9NXFxuSGVyc2hlbC9NXFxuSGVyc2hleS9NXFxuSGVydHovTVxcbkhlcnR6c3BydW5nL01cXG5IZXJ6ZWdvdmluYS9NXFxuSGVyemwvTVxcbkhlc2h2YW4vTVxcbkhlc2lvZC9NXFxuSGVzcGVyaWEvTVxcbkhlc3BlcnVzL01cXG5IZXNzL01cXG5IZXNzZS9NXFxuSGVzc2lhbi9NXFxuSGVzdGVyL01cXG5IZXN0b24vTVxcbkhldHRpZS9NXFxuSGV3aXR0L01cXG5IZXdsZXR0L01cXG5IZXllcmRhaGwvTVxcbkhleXdvb2QvTVxcbkhlemJvbGxhaC9NXFxuSGV6ZWtpYWgvTVxcbkhmL01cXG5IZy9NXFxuSGlhbGVhaC9NXFxuSGlhd2F0aGEvTVxcbkhpYmVybmlhL01cXG5IaWJlcm5pYW5cXG5IaWNrbWFuL01cXG5IaWNrb2svTVxcbkhpY2tvcnkvTVxcbkhpY2tzL01cXG5IaWVyb255bXVzL01cXG5IaWdhc2hpb3Nha2FcXG5IaWdnaW5zL01cXG5IaWdobGFuZGVyL1NNXFxuSGlnaGxhbmRzXFxuSGlnaG5lc3MvTVxcbkhpZ2h0c3Rvd24vTVxcbkhpbGFyaW8vTVxcbkhpbGFyeS9NXFxuSGlsYmVydC9NXFxuSGlsZGEvTVxcbkhpbGRlYnJhbmQvTVxcbkhpbGZpZ2VyL01cXG5IaWxsL01cXG5IaWxsYXJ5L01cXG5IaWxsZWwvTVxcbkhpbHRvbi9NXFxuSGltYWxheWEvU01cXG5IaW1hbGF5YW5cXG5IaW1hbGF5YXMvTVxcbkhpbW1sZXIvTVxcbkhpbmF5YW5hL01cXG5IaW5kZW1pdGgvTVxcbkhpbmRlbmJ1cmcvTVxcbkhpbmRpL01cXG5IaW5kdS9TTVxcbkhpbmR1aXNtL1NNXFxuSGluZHVzdGFuL01cXG5IaW5kdXN0YW5pL1NNXFxuSGluZXMvTVxcbkhpbmVzdmlsbGUvTVxcbkhpbnRvbi9NXFxuSGlwcGFyY2h1cy9NXFxuSGlwcG9jcmF0ZXMvTVxcbkhpcHBvY3JhdGljL01cXG5IaXJhbS9NXFxuSGlyb2J1bWkvTVxcbkhpcm9oaXRvL01cXG5IaXJvc2hpbWEvTVxcbkhpc3BhbmljL1NNXFxuSGlzcGFuaW9sYS9NXFxuSGlzcy9NXFxuSGl0YWNoaS9NXFxuSGl0Y2hjb2NrL01cXG5IaXRsZXIvTVNcXG5IaXR0aXRlL1NNXFxuSG1vbmcvTVxcbkhvL01cXG5Ib2JhcnQvTVxcbkhvYmJlcy9NXFxuSG9iYnMvTVxcbkhvY2tuZXkvTVxcbkhvZGdlL1NNXFxuSG9kZ2VzL01cXG5Ib2Rna2luL01cXG5Ib2ZmL01cXG5Ib2ZmYS9NXFxuSG9mZm1hbi9NXFxuSG9mc3RhZHRlci9NXFxuSG9nYW4vTVxcbkhvZ2FydGgvTVxcbkhvZ3dhcnRzL01cXG5Ib2hlbmxvaGUvTVxcbkhvaGVuc3RhdWZlbi9NXFxuSG9oZW56b2xsZXJuL01cXG5Ib2hob3QvTVxcbkhvaG9rYW0vTVxcbkhva2thaWRvL01cXG5Ib2t1c2FpL01cXG5Ib2xiZWluL01cXG5Ib2xjb21iL01cXG5Ib2xkZW4vTVxcbkhvbGRlci9NXFxuSG9saWRheS9NXFxuSG9saW5lc3NcXG5Ib2xsYW5kL1pTTVJcXG5Ib2xsYW5kZXIvTVxcbkhvbGxlcml0aC9NXFxuSG9sbGV5L01cXG5Ib2xsaWUvTVxcbkhvbGxpcy9NXFxuSG9sbG93YXkvTVxcbkhvbGx5L01cXG5Ib2xseXdvb2QvTVxcbkhvbG1hbi9NXFxuSG9sbWVzL01cXG5Ib2xvY2F1c3QvTVxcbkhvbG9jZW5lL01cXG5Ib2xzdC9NXFxuSG9sc3RlaW4vU01cXG5Ib2x0L01cXG5Ib21lci9NXFxuSG9tZXJpYy9NXFxuSG9uXFxuSG9uZGEvTVxcbkhvbmR1cmFuL01TXFxuSG9uZHVyYXMvTVxcbkhvbmVja2VyL01cXG5Ib25leXdlbGwvTVxcbkhvbmdcXG5Ib25pYXJhL01cXG5Ib25vbHVsdS9NXFxuSG9ub3JhYmxlXFxuSG9uc2h1L01cXG5Ib29kL01cXG5Ib29rZS9STVxcbkhvb2tlci9NXFxuSG9vcGVyL01cXG5Ib29zaWVyL01TXFxuSG9vdGVycy9NXFxuSG9vdmVyL01TXFxuSG9wZS9NXFxuSG9wZXdlbGwvTVxcbkhvcGkvU01cXG5Ib3BraW5zL01cXG5Ib3BwZXIvTVxcbkhvcmFjZS9NXFxuSG9yYWNpby9NXFxuSG9yYXRpby9NXFxuSG9ybWVsL01cXG5Ib3JtdXovTVxcbkhvcm4vTVxcbkhvcm5ibG93ZXIvTVxcbkhvcm5lL01cXG5Ib3Jvd2l0ei9NXFxuSG9ydGh5L01cXG5Ib3J0b24vTVxcbkhvcnVzL01cXG5Ib3NlYS9NXFxuSG9zdC9TTVxcbkhvdHBvaW50L01cXG5Ib3R0ZW50b3QvU01cXG5Ib3VkaW5pL01cXG5Ib3VtYS9NXFxuSG91c2UvTVxcbkhvdXNtYW4vTVxcbkhvdXN0b24vTVxcbkhvdXlobmhubS9NXFxuSG92aGFuZXNzL01cXG5Ib3dhcmQvTVxcbkhvd2UvTVxcbkhvd2VsbC9NU1xcbkhvd2VsbHMvTVxcbkhvd3JhaFxcbkhveWxlL01cXG5Icm90aGdhci9NXFxuSHRzXFxuSHVhbmcvTVxcbkh1YmJhcmQvTVxcbkh1YmJsZS9NXFxuSHViZWkvTVxcbkh1YmVyL01cXG5IdWJlcnQvTVxcbkh1Y2svTVxcbkh1ZGRlcnNmaWVsZFxcbkh1ZHNvbi9NXFxuSHVlcnRhL01cXG5IdWV5L01cXG5IdWZmL01cXG5IdWZmbWFuL01cXG5IdWdnaW5zL01cXG5IdWdoL01TXFxuSHVnaGVzL01cXG5IdWdvL01cXG5IdWd1ZW5vdC9NU1xcbkh1aS9NXFxuSHVpdHppbG9wb3RjaGxpL01cXG5IdWxsL01cXG5IdW1iZXJ0by9NXFxuSHVtYm9sZHQvTVxcbkh1bWUvTVxcbkh1bW1lbC9NXFxuSHVtbWVyL01cXG5IdW1waHJleS9TTVxcbkh1bXZlZS9NXFxuSHVuL1NNXFxuSHVuYW4vTVxcbkh1bmcvTVxcbkh1bmdhcmlhbi9TTVxcbkh1bmdhcnkvTVxcbkh1bnNwZWxsL01cXG5IdW50L01SXFxuSHVudGVyL01cXG5IdW50aW5ndG9uL01cXG5IdW50bGV5L01cXG5IdW50c3ZpbGxlL01cXG5IdXJkL01cXG5IdXJsZXkvTVxcbkh1cm9uL01cXG5IdXJzdC9NXFxuSHVzL01cXG5IdXNzZWluL01cXG5IdXNzZXJsL01cXG5IdXNzaXRlL01cXG5IdXN0b24vTVxcbkh1dGNoaW5zb24vTVxcbkh1dHRvbi9NXFxuSHV0dS9NXFxuSHV4bGV5L01cXG5IdXlnZW5zL01cXG5IeWFkZXMvTVxcbkh5ZGUvTVxcbkh5ZGVyYWJhZC9NXFxuSHlkcmEvTVxcbkh5bWVuL01cXG5IeXBlcmlvbi9NXFxuSHl1bmRhaS9NXFxuSHovTVxcbkknZFxcbkknbGxcXG5JJ21cXG5JJ3ZlXFxuSS9NXFxuSUFcXG5JQk0vTVxcbklDQk0vU01cXG5JQ0NcXG5JQ1VcXG5JRC9TTVxcbklERVxcbklFXFxuSUVEXFxuSUVFRVxcbklLRUEvTVxcbklMXFxuSU1GL01cXG5JTUhPXFxuSU1OU0hPXFxuSU1PXFxuSU5cXG5JTkcvTVxcbklOUklcXG5JTlNcXG5JT1UvTVxcbklQXFxuSVBBXFxuSVBPXFxuSVEvTVxcbklSQS9TTVxcbklSQ1xcbklSUy9NXFxuSVNCTlxcbklTSVNcXG5JU08vTVxcbklTUFxcbklTU1xcbklUXFxuSVVEXFxuSVYvU01cXG5JVkZcXG5JYVxcbklhY2NvY2EvTVxcbklhZ28vTVxcbklhbi9NXFxuSWFwZXR1cy9NXFxuSWJhZGFuL01cXG5JYmVyaWEvTVxcbkliZXJpYW4vTVxcbkliaXphL01cXG5JYmxpcy9NXFxuSWJvL01cXG5JYnNlbi9NXFxuSWNhaG4vTVxcbkljYXJ1cy9NXFxuSWNlXFxuSWNlbGFuZC9NUlpcXG5JY2VsYW5kZXIvTVxcbkljZWxhbmRpYy9NXFxuSWRhL01cXG5JZGFoby9TTVxcbklkYWhvYW4vTVNcXG5JZGFob2VzXFxuSWV5YXN1L01cXG5JZ25hY2lvL01cXG5JZ25hdGl1cy9NXFxuSWdvci9NXFxuSWd1YXNzdS9NXFxuSWpzc2VsbWVlci9NXFxuSWtlL01cXG5Ja2huYXRvbi9NXFxuSWxhL01cXG5JbGVuZS9NXFxuSWxpYWQvU01cXG5JbGxcXG5JbGxpbm9pcy9NXFxuSWxsaW5vaXNhbi9NU1xcbklsbHVtaW5hdGkvTVxcbklseXVzaGluL01cXG5JbWVsZGEvTVxcbkltaG90ZXAvTVxcbkltb2RpdW0vTVxcbkltb2dlbmUvTVxcbkltdXMvTVxcbkluL01cXG5JbmEvTVxcbkluY1xcbkluY2EvU01cXG5JbmNob24vTVxcbkluY29ycG9yYXRlZFxcbkluZFxcbkluZGVwZW5kZW5jZS9NXFxuSW5kaWEvTVxcbkluZGlhbi9NU1xcbkluZGlhbmEvTVxcbkluZGlhbmFuL1NNXFxuSW5kaWFuYXBvbGlzL01cXG5JbmRpYW5pYW5cXG5JbmRpZXMvTVxcbkluZGlvL01cXG5JbmRpcmEvTVxcbkluZG9jaGluYS9NXFxuSW5kb2NoaW5lc2UvTVxcbkluZG9uZXNpYS9NXFxuSW5kb25lc2lhbi9TTVxcbkluZG9yZS9NXFxuSW5kcmEvTVxcbkluZHVzL01cXG5JbmR5L1NNXFxuSW5lcy9NXFxuSW5lei9NXFxuSW5nZS9NXFxuSW5nbGV3b29kXFxuSW5ncmFtL01cXG5JbmdyZXMvTVxcbkluZ3JpZC9NXFxuSW5ub2NlbnQvTVxcbklubnNicnVja1xcbklub251L01cXG5JbnF1aXNpdGlvbi9NXFxuSW5zdFxcbkluc3RhZ3JhbS9NXFxuSW5zdGFtYXRpYy9NXFxuSW50ZWwvTVxcbkludGVsc2F0L01cXG5JbnRlcm5hdGlvbmFsZS9NXFxuSW50ZXJuZXQvU01cXG5JbnRlcnBvbC9NXFxuSW51aXQvTVNcXG5JbnVrdGl0dXQvTVxcbkludmFyL01cXG5Jby9NXFxuSW9uZXNjby9NXFxuSW9uaWFuL01TXFxuSW9uaWMvU01cXG5Jb3dhL1NNXFxuSW93YW4vTVNcXG5JcGhpZ2VuaWEvTVxcbklwc3dpY2hcXG5JcWFsdWl0L01cXG5JcWJhbC9NXFxuSXF1aXRvcy9NXFxuSXIvTVxcbklyYS9NXFxuSXJhbi9NXFxuSXJhbmlhbi9TTVxcbklyYXEvTVxcbklyYXFpL01TXFxuSXJlbGFuZC9NXFxuSXJlbmUvTVxcbklyaXMvTVxcbklyaXNoL01SXFxuSXJpc2htYW4vTVxcbklyaXNobWVuL01cXG5JcmlzaHdvbWFuL01cXG5JcmlzaHdvbWVuL01cXG5Jcmt1dHNrL01cXG5Jcm1hL01cXG5Jcm9xdW9pYW4vU01cXG5Jcm9xdW9pcy9NXFxuSXJyYXdhZGR5L01cXG5JcnRpc2gvTVxcbklydmluL01cXG5JcnZpbmUvTVxcbklydmluZy9NXFxuSXJ3aW4vTVxcbklzYWFjL01cXG5Jc2FiZWwvTVxcbklzYWJlbGEvTVxcbklzYWJlbGxhL01cXG5Jc2FiZWxsZS9NXFxuSXNhaWFoL01cXG5Jc2NhcmlvdC9NXFxuSXNmYWhhbi9NXFxuSXNoZXJ3b29kL01cXG5Jc2hpbS9NXFxuSXNobWFlbC9NXFxuSXNodGFyL01cXG5Jc2lhaC9NXFxuSXNpZHJvL01cXG5Jc2lzL01cXG5Jc2xhbS9NU1xcbklzbGFtYWJhZC9NXFxuSXNsYW1pYy9NXFxuSXNsYW1pc20vTVxcbklzbGFtaXN0L01cXG5Jc2xhbW9waG9iaWFcXG5Jc2xhbW9waG9iaWNcXG5Jc21hZWwvTVxcbklzbWFpbC9NXFxuSXNvbGRlL01cXG5Jc3BlbGwvTVxcbklzcmFlbC9TTVxcbklzcmFlbGkvU01cXG5Jc3JhZWxpdGUvTVxcbklzc2FjL01cXG5Jc3NhY2hhci9NXFxuSXN0YW5idWwvTVxcbklzdXp1L01cXG5JdFxcbkl0YWlwdS9NXFxuSXRhbFxcbkl0YWxpYW4vU01cXG5JdGFsaWFuYXRlXFxuSXRhbHkvTVxcbkl0YXNjYS9NXFxuSXRoYWNhL01cXG5JdGhhY2FuL01cXG5JdG8vTVxcbkl2YS9NXFxuSXZhbi9NXFxuSXZhbmhvZS9NXFxuSXZlcy9NXFxuSXZvcmlhblxcbkl2b3J5L01cXG5JdnkvTVxcbkl5YXIvTVxcbkl6YWFrL01cXG5JemFuYWdpL01cXG5JemFuYW1pL01cXG5JemhldnNrL01cXG5Jem1pci9NXFxuSXpvZC9NXFxuSXp2ZXN0aWEvTVxcbkovTURcXG5KQ1NcXG5KRFxcbkpGSy9NXFxuSlBcXG5KUEVHXFxuSlZcXG5KYWNrL01cXG5KYWNraWUvTVxcbkphY2tseW4vTVxcbkphY2tzb24vTVxcbkphY2tzb25pYW4vTVxcbkphY2tzb252aWxsZS9NXFxuSmFja3kvTVxcbkphY2x5bi9NXFxuSmFjb2IvU01cXG5KYWNvYmVhbi9NXFxuSmFjb2JpL01cXG5KYWNvYmluL01cXG5KYWNvYml0ZS9NXFxuSmFjb2JzL01cXG5KYWNvYnNvbi9NXFxuSmFjcXVhcmQvTVxcbkphY3F1ZWxpbmUvTVxcbkphY3F1ZWx5bi9NXFxuSmFjcXVlcy9NXFxuSmFjdXp6aS9NXFxuSmFnZ2VyL01cXG5KYWdpZWxsb24vTVxcbkphZ3Vhci9NXFxuSmFoYW5naXIvTVxcbkphaW1lL01cXG5KYWluL01cXG5KYWluaXNtL01cXG5KYWlwdXIvTVxcbkpha2FydGEvTVxcbkpha2UvTVxcbkphbWFhbC9NXFxuSmFtYWljYS9NXFxuSmFtYWljYW4vU01cXG5KYW1hbC9NXFxuSmFtYXIvTVxcbkphbWUvU01cXG5KYW1lbC9NXFxuSmFtZXMvTVxcbkphbWVzdG93bi9NXFxuSmFtaS9NXFxuSmFtaWUvTVxcbkphbi9NXFxuSmFuYS9NXFxuSmFuYWNlay9NXFxuSmFuZS9NXFxuSmFuZWxsL01cXG5KYW5lbGxlL01cXG5KYW5lc3ZpbGxlL01cXG5KYW5ldC9NXFxuSmFuZXR0ZS9NXFxuSmFuaWNlL01cXG5KYW5pZS9NXFxuSmFuaW5lL01cXG5KYW5pcy9NXFxuSmFuaXNzYXJ5L01cXG5KYW5qYXdlZWQvTVxcbkphbm5hL01cXG5KYW5uaWUvTVxcbkphbnNlbi9NXFxuSmFuc2VuaXN0L01cXG5KYW51YXJ5L1NNXFxuSmFudXMvTVxcbkphcC9TTVxcbkphcGFuL01cXG5KYXBhbmVzZS9NU1xcbkphcHVyYS9NXFxuSmFyZWQvTVxcbkphcmxzYmVyZy9NXFxuSmFycmVkL01cXG5KYXJyZXR0L01cXG5KYXJyb2QvTVxcbkphcnZpcy9NXFxuSmFzbWluZS9NXFxuSmFzb24vTVxcbkphc3Blci9NXFxuSmF0YWthL01cXG5KYXZhL1NNXFxuSmF2YVNjcmlwdC9NXFxuSmF2YW5lc2UvTVxcbkphdmllci9NXFxuSmF4YXJ0ZXMvTVxcbkpheS9NXFxuSmF5YXB1cmEvTVxcbkpheWF3YXJkZW5lL01cXG5KYXljZWUvTVNcXG5KYXljZWVzL01cXG5KYXluZS9NXFxuSmF5c29uL01cXG5KZWFuL01cXG5KZWFuZXR0ZS9NXFxuSmVhbmllL01cXG5KZWFuaW5lL01cXG5KZWFubmUvTVxcbkplYW5uZXR0ZS9NXFxuSmVhbm5pZS9NXFxuSmVhbm5pbmUvTVxcbkplZC9NXFxuSmVkaS9NXFxuSmVlcC9NXFxuSmVldmVzL01cXG5KZWZmL01cXG5KZWZmZXJleS9NXFxuSmVmZmVyc29uL01cXG5KZWZmZXJzb25pYW4vTVxcbkplZmZlcnkvTVxcbkplZmZyZXkvTVxcbkplZmZyeS9NXFxuSmVob3NoYXBoYXQvTVxcbkplaG92YWgvTVxcbkpla3lsbC9NXFxuSmVuaWZlci9NXFxuSmVua2lucy9NXFxuSmVubmEvTVxcbkplbm5lci9NXFxuSmVubmllL01cXG5KZW5uaWZlci9NXFxuSmVubmluZ3MvTVxcbkplbm55L01cXG5KZW5zZW4vTVxcbkplcGh0aGFoL01cXG5KZXJhbGQvTVxcbkplcmVtaWFoL01cXG5KZXJlbWlhaHNcXG5KZXJlbXkvTVxcbkplcmkvTVxcbkplcmljaG8vTVxcbkplcm1haW5lL01cXG5KZXJvYm9hbS9NXFxuSmVyb2xkL01cXG5KZXJvbWUvTVxcbkplcnJpL01cXG5KZXJyb2QvTVxcbkplcnJvbGQvTVxcbkplcnJ5L01cXG5KZXJzZXkvTVNcXG5KZXJ1c2FsZW0vTVxcbkplc3MvTVxcbkplc3NlL01cXG5KZXNzaWNhL01cXG5KZXNzaWUvTVxcbkplc3VpdC9NU1xcbkplc3VzL01cXG5KZXR3YXkvTVxcbkpldy9TTVxcbkpld2VsL01cXG5KZXdlbGwvTVxcbkpld2Vzcy9NU1xcbkpld2lzaC9QTVxcbkpld3J5L01cXG5KZXplYmVsL1NNXFxuSmlhbmdzdS9NXFxuSmlhbmd4aS9NXFxuSmlkZGEvTVxcbkppbGluL01cXG5KaWxsL01cXG5KaWxsaWFuL01cXG5KaW0vTVxcbkppbWVuZXovTVxcbkppbW1pZS9NXFxuSmltbXkvTVxcbkppbmFuL01cXG5KaW5uYWgvTVxcbkppbm55L01cXG5KaXZhcm8vTVxcbkpvL01cXG5Kb2FuL01cXG5Kb2Fubi9NXFxuSm9hbm5hL01cXG5Kb2FubmUvTVxcbkpvYXF1aW4vTVxcbkpvYi9TTVxcbkpvYnMvTVxcbkpvY2FzdGEvTVxcbkpvY2VseW4vTVxcbkpvY2svTVxcbkpvY2tleS9NXFxuSm9kaS9NXFxuSm9kaWUvTVxcbkpvZHkvTVxcbkpvZS9NXFxuSm9lbC9NXFxuSm9leS9NXFxuSm9namFrYXJ0YS9NXFxuSm9oYW5uL01cXG5Kb2hhbm5hL01cXG5Kb2hhbm5lcy9NXFxuSm9oYW5uZXNidXJnL01cXG5Kb2huL1NNXFxuSm9obmF0aGFuL01cXG5Kb2huYXRob24vTVxcbkpvaG5pZS9NXFxuSm9obm5pZS9NXFxuSm9obm55L01cXG5Kb2hucy9NXFxuSm9obnNvbi9NXFxuSm9obnN0b24vTVxcbkpvaG5zdG93bi9NXFxuSm9sZW5lL01cXG5Kb2xzb24vTVxcbkpvbi9NXFxuSm9uYWgvTVxcbkpvbmFoc1xcbkpvbmFzL01cXG5Kb25hdGhhbi9NXFxuSm9uYXRob24vTVxcbkpvbmVzL01cXG5Kb25lc2Jvcm8vTVxcbkpvbmkvTVxcbkpvbnNvbi9NXFxuSm9wbGluL01cXG5Kb3JkYW4vTVxcbkpvcmRhbmlhbi9NU1xcbkpvcmdlL01cXG5Kb3NlL01cXG5Kb3NlZi9NXFxuSm9zZWZhL01cXG5Kb3NlZmluYS9NXFxuSm9zZXBoL01cXG5Kb3NlcGhpbmUvTVxcbkpvc2VwaHNcXG5Kb3NlcGhzb24vTVxcbkpvc2VwaHVzL01cXG5Kb3NoL01cXG5Kb3NodWEvTVxcbkpvc2lhaC9NXFxuSm9zaWUvTVxcbkpvc3VlL01cXG5Kb3VsZS9NXFxuSm92ZS9NXFxuSm92aWFuL01cXG5Kb3kvTVxcbkpveWNlL01cXG5Kb3ljZWFuL01cXG5Kb3luZXIvTVxcbkpwblxcbkpyL01cXG5KdWFuL01cXG5KdWFuYS9NXFxuSnVhbml0YS9NXFxuSnVhcmV6L01cXG5KdWJhbC9NXFxuSnVkYWVvXFxuSnVkYWgvTVxcbkp1ZGFpY1xcbkp1ZGFpY2FsXFxuSnVkYWlzbS9NU1xcbkp1ZGFzL01TXFxuSnVkZC9NXFxuSnVkZS9NXFxuSnVkZWEvTVxcbkp1ZGdlc1xcbkp1ZGl0aC9NXFxuSnVkc29uL01cXG5KdWR5L01cXG5KdWdnZXJuYXV0L01cXG5KdWxcXG5KdWxlcy9NXFxuSnVsaWEvTVxcbkp1bGlhbi9NXFxuSnVsaWFuYS9NXFxuSnVsaWFubmUvTVxcbkp1bGllL01cXG5KdWxpZXQvTVxcbkp1bGlldHRlL01cXG5KdWxpby9NXFxuSnVsaXVzL01cXG5KdWxsaWFyZC9NXFxuSnVseS9TTVxcbkp1bi9NXFxuSnVuZS9TTVxcbkp1bmVhdS9NXFxuSnVuZy9NXFxuSnVuZ2ZyYXUvTVxcbkp1bmdpYW4vTVxcbkp1bmlvci9TTVxcbkp1bmtlci9TTVxcbkp1bm8vTVxcbkp1cGl0ZXIvTVxcbkp1cmFzc2ljL01cXG5KdXJ1YS9NXFxuSnVzdGljZS9NXFxuSnVzdGluL01cXG5KdXN0aW5lL01cXG5KdXN0aW5pYW4vTVxcbkp1dGxhbmQvTVxcbkp1dmVuYWwvTVxcbksvU01OR0pcXG5LQi9NXFxuS0NcXG5LRkMvTVxcbktHQi9NXFxuS0lBXFxuS0tLL01cXG5LTy9NXFxuS1BcXG5LU1xcbktZXFxuS2FhYmEvTVxcbkthYnVsL01cXG5LYWZrYS9NXFxuS2Fma2Flc3F1ZS9NXFxuS2Fnb3NoaW1hL01cXG5LYWhsdWEvTVxcbkthaHVsdWkvTVxcbkthaWZlbmcvTVxcbkthaWx1YS9NXFxuS2Fpc2VyL01TXFxuS2FpdGxpbi9NXFxuS2FsYWhhcmkvTVxcbkthbGFtYXpvby9NXFxuS2FsYXNobmlrb3YvTVxcbkthbGIvTVxcbkthbGV2YWxhL01cXG5LYWxnb29ybGllL01cXG5LYWxpL01cXG5LYWxteWsvTVxcbkthbWEvTVxcbkthbWNoYXRrYS9NXFxuS2FtZWhhbWVoYS9NXFxuS2FtcGFsYS9NXFxuS2FtcHVjaGVhL01cXG5LYW4vU01cXG5LYW5jaGVuanVuZ2EvTVxcbkthbmRhaGFyL01cXG5LYW5kaW5za3kvTVxcbkthbmUvTVxcbkthbmVvaGUvTVxcbkthbmtha2VlL01cXG5LYW5uYWRhL01cXG5LYW5vL01cXG5LYW5wdXIvTVxcbkthbnNhbi9NU1xcbkthbnNhcy9NXFxuS2FudC9NXFxuS2FudGlhbi9NXFxuS2FvaHNpdW5nL01cXG5LYXBvc2kvTVxcbkthcmEvTVxcbkthcmFjaGkvTVxcbkthcmFnYW5kYS9NXFxuS2FyYWtvcnVtL01cXG5LYXJhbWF6b3YvTVxcbkthcmVlbS9NXFxuS2FyZW4vTVxcbkthcmVuaW5hL01cXG5LYXJpL01cXG5LYXJpbi9NXFxuS2FyaW5hL01cXG5LYXJsL01cXG5LYXJsYS9NXFxuS2FybG9mZi9NXFxuS2Fyby9NXFxuS2Fyb2wvTVxcbkthcnJvby9NXFxuS2FyeW4vTVxcbkthc2FpL01cXG5LYXNleS9NXFxuS2FzaG1pci9TTVxcbkthc3Bhcm92L01cXG5LYXRlL01cXG5LYXRlbHluL01cXG5LYXRoYXJpbmUvTVxcbkthdGhlcmluZS9NXFxuS2F0aGVyeW4vTVxcbkthdGhpYXdhci9NXFxuS2F0aGllL01cXG5LYXRobGVlbi9NXFxuS2F0aG1hbmR1L01cXG5LYXRocmluZS9NXFxuS2F0aHJ5bi9NXFxuS2F0aHkvTVxcbkthdGllL01cXG5LYXRpbmEvTVxcbkthdG1haS9NXFxuS2F0b3dpY2UvTVxcbkthdHJpbmEvTVxcbkthdHkvTVxcbkthdWFpL01cXG5LYXVmbWFuL01cXG5LYXVuYXMvTVxcbkthdW5kYS9NXFxuS2F3YWJhdGEvTVxcbkthd2FzYWtpL01cXG5LYXkvTVxcbktheWUvTVxcbktheWxhL01cXG5LYXpha2gvTVxcbkthemFraHNcXG5LYXpha2hzdGFuL01cXG5LYXphbi9NXFxuS2F6YW50emFraXMvTVxcbktiL01cXG5LZWF0b24vTVxcbktlYXRzL01cXG5LZWNrL01cXG5LZWVuYW4vTVxcbktlZXdhdGluL01cXG5LZWlsbG9yL01cXG5LZWlzaGEvTVxcbktlaXRoL01cXG5LZWxsZXIvTVxcbktlbGxleS9NXFxuS2VsbGkvTVxcbktlbGxpZS9NXFxuS2VsbG9nZy9NXFxuS2VsbHkvTVxcbktlbHNleS9NXFxuS2VsdmluL01cXG5LZW1lcm92by9NXFxuS2VtcC9NXFxuS2VtcGlzL01cXG5LZW4vTVxcbktlbmRhbGwvTVxcbktlbmRyYS9NXFxuS2VuZHJpY2svTVxcbktlbm1vcmUvTVxcbktlbm5hbi9NXFxuS2VubmVkeS9NXFxuS2VubmV0aC9NXFxuS2VubmV3aWNrL01cXG5LZW5uaXRoL01cXG5LZW5ueS9NXFxuS2Vub3NoYS9NXFxuS2VudC9NXFxuS2VudG9uL01cXG5LZW50dWNraWFuL01TXFxuS2VudHVja3kvTVxcbktlbnlhL01cXG5LZW55YW4vU01cXG5LZW55YXR0YS9NXFxuS2VueW9uL01cXG5LZW9naC9NXFxuS2Vva3VrL01cXG5LZXBsZXIvTVxcbktlcmVuc2t5L01cXG5LZXJpL01cXG5LZXJtaXQvTVxcbktlcm4vTVxcbktlcm91YWMvTVxcbktlcnIvTVxcbktlcnJpL01cXG5LZXJyeS9NXFxuS2V0dGVyaW5nL01cXG5LZXZlbi9NXFxuS2V2aW4vTVxcbktldmxhci9NXFxuS2V2b3JraWFuL01cXG5LZXdwaWUvTVxcbktleS9NXFxuS2V5bmVzL01cXG5LZXluZXNpYW4vTVxcbktoYWJhcm92c2svTVxcbktoYWNoYXR1cmlhbi9NXFxuS2hhbGlkL01cXG5LaGFuL01cXG5LaGFya292L01cXG5LaGFydG91bS9NXFxuS2hheXlhbS9NXFxuS2hhemFyL01cXG5LaG1lci9NXFxuS2hvaWtob2kvTVxcbktob2lzYW4vTVxcbktob21laW5pL01cXG5LaG9yYW5hL01cXG5LaHJ1c2hjaGV2L01cXG5LaHVmdS9NXFxuS2h1bG5hL01cXG5LaHdhcml6bWkvTVxcbktoeWJlci9NXFxuS2lja2Fwb28vTVxcbktpZGQvTVxcbktpZWwvTVxcbktpZXJrZWdhYXJkL01cXG5LaWV0aC9NXFxuS2lldi9NXFxuS2lnYWxpL01cXG5LaWt1eXUvTVxcbktpbGF1ZWEvTVxcbktpbGltYW5qYXJvL01cXG5LaWxsZWVuL01cXG5LaWxyb3kvTVxcbktpbS9NXFxuS2ltYmVybGV5L01cXG5LaW1iZXJseS9NXFxuS2luZy9NXFxuS2luZ3Nwb3J0L01cXG5LaW5nc3Rvbi9NXFxuS2luZ3N0b3duL01cXG5LaW5rbydzXFxuS2lubmV5L01cXG5LaW5zZXkvTVxcbktpbnNoYXNhL01cXG5LaW93YS9NU1xcbktpcC9NXFxuS2lwbGluZy9NXFxuS2lyYnkvTVxcbktpcmNoaG9mZi9NXFxuS2lyY2huZXIvTVxcbktpcmdoaXN0YW4vTVxcbktpcmdoaXovTVxcbktpcmdoaXppYS9NXFxuS2lyaWJhdGkvTVxcbktpcmlueWFnYS9NXFxuS2lyay9NXFxuS2lya2xhbmQvTVxcbktpcmtwYXRyaWNrL01cXG5LaXJvdi9NXFxuS2lyc3Rlbi9NXFxuS2lzYW5nYW5pL01cXG5LaXNoaW5ldi9NXFxuS2lzbGV2L01cXG5LaXNzaW1tZWUvTVxcbktpc3Npbmdlci9NXFxuS2l0L01cXG5LaXRha3l1c2h1L01cXG5LaXRjaGVuZXIvTVxcbktpdHR5L01cXG5LaXdhbmlzL01cXG5LbGFuL01cXG5LbGFuc21hbi9NXFxuS2xhdXMvTVxcbktsZWUvTVxcbktsZWVuZXgvTVNcXG5LbGVpbi9NXFxuS2xpbXQvTVxcbktsaW5lL01cXG5LbGluZ29uL01cXG5LbG9uZGlrZS9NU1xcbkttYXJ0L01cXG5LbmFwcC9NXFxuS25lc3NldC9NXFxuS25nd2FycmV5ZS9NXFxuS25pY2tlcmJvY2tlci9NXFxuS25pZXZlbC9NXFxuS25pZ2h0L01cXG5Lbm9wZi9NXFxuS25vc3Nvcy9NXFxuS25vd2xlcy9NXFxuS25veC9NXFxuS25veHZpbGxlL01cXG5LbnVkc2VuL01cXG5LbnV0aC9NXFxuS251dGhzXFxuS29iZS9NXFxuS29jaC9NXFxuS29jaGFiL01cXG5Lb2RhY2hyb21lL01cXG5Lb2Rhay9NXFxuS29kYWx5L01cXG5Lb2RpYWsvTVxcbktvZXN0bGVyL01cXG5Lb2hpbm9vci9NXFxuS29obC9NXFxuS29penVtaS9NXFxuS29qYWsvTVxcbktva29tby9NXFxuS29seW1hL01cXG5Lb21tdW5pem1hL01cXG5Lb25nL01cXG5Lb25nby9NXFxuS29ucmFkL01cXG5Lb29udHovTVxcbktvcHBlbC9NXFxuS29yZWEvTVxcbktvcmVhbi9TTVxcbktvcm5iZXJnL01cXG5Lb3J5L01cXG5Lb3J6eWJza2kvTVxcbktvc2NpdXNrby9NXFxuS29zc3V0aC9NXFxuS29zeWdpbi9NXFxuS290bGluL01cXG5Lb3VmYXgvTVxcbktvd2xvb24vTVxcbktyL01cXG5LcmFmdC9NXFxuS3Jha2F0b2EvTVxcbktyYWtvdy9NXFxuS3JhbWVyL01cXG5LcmFzbm9kYXIvTVxcbktyYXNub3lhcnNrL01cXG5LcmVicy9NXFxuS3JlbWxpbi9NXFxuS3JlbWxpbm9sb2dpc3RcXG5LcmVtbGlub2xvZ3lcXG5LcmVzZ2UvTVxcbktyaW5nbGUvTVxcbktyaXMvTVxcbktyaXNobmEvTVxcbktyaXNobmFtdXJ0aS9NXFxuS3Jpc3RhL01cXG5LcmlzdGVuL01cXG5LcmlzdGkvTVxcbktyaXN0aWUvTVxcbktyaXN0aW4vTVxcbktyaXN0aW5hL01cXG5LcmlzdGluZS9NXFxuS3Jpc3RvcGhlci9NXFxuS3Jpc3R5L01cXG5Lcm9jL01cXG5Lcm9nZXIvTVxcbktyb25lY2tlci9NXFxuS3JvcG90a2luL01cXG5LcnVnZXIvTVxcbktydWdlcnJhbmQvTVxcbktydXBwL01cXG5LcnlzdGFsL01cXG5Lc2hhdHJpeWEvTVxcbkt1YmxhaS9NXFxuS3Vicmljay9NXFxuS3Vobi9NXFxuS3VpYnlzaGV2L01cXG5LdWx0aHVtbS9NXFxuS3VubWluZy9NXFxuS3VvbWludGFuZy9NXFxuS3VyZC9NXFxuS3VyZGlzaC9NXFxuS3VyZGlzdGFuL01cXG5LdXJvc2F3YS9NXFxuS3VydC9NXFxuS3VydGlzL01cXG5LdXNjaC9NXFxuS3V0dXpvdi9NXFxuS3V3YWl0L01cXG5LdXdhaXRpL1NNXFxuS3V6bmV0cy9NXFxuS3V6bmV0c2svTVxcbkt3YWtpdXRsL01cXG5Ld2FuL01cXG5Ld2FuZ2p1L01cXG5Ld2FuemFhL01TXFxuS3kvTUhcXG5LeWxlL01cXG5LeW90by9NXFxuS3lyZ3l6c3Rhbi9NXFxuS3l1c2h1L01cXG5MJ0Ftb3VyL01cXG5MJ0VuZmFudFxcbkwnT3JlYWwvTVxcbkwnT3V2ZXJ0dXJlL01cXG5ML01OXFxuTEFcXG5MQU4vTVxcbkxCSi9NXFxuTENcXG5MQ0QvTVxcbkxDTVxcbkxEQ1xcbkxFRC9NXFxuTEcvTVxcbkxHQlRcXG5MSUZPXFxuTExcXG5MTEIvTVxcbkxMRC9NXFxuTE5HXFxuTE9HT1xcbkxQL01cXG5MUEdcXG5MUE4vU01cXG5MU0FUXFxuTFNEL01cXG5MVk5cXG5MYS9TTVxcbkxhYlxcbkxhYmFuL01cXG5MYWJyYWRvci9TTVxcbkxhYnJhZG9yZWFuXFxuTGFjZXkvTVxcbkxhY2hlc2lzL01cXG5MYWN0b2JhY2lsbHVzXFxuTGFjeS9NXFxuTGFkb2dhL01cXG5MYWRvbm5hL01cXG5MYWR5L01cXG5MYWR5c2hpcC9NU1xcbkxhZmF5ZXR0ZS9NXFxuTGFmaXR0ZS9NXFxuTGFnb3MvTVxcbkxhZ3JhbmdlL01cXG5MYWdyYW5naWFuL01cXG5MYWhvcmUvTVxcbkxhaXVzL01cXG5MYWpvcy9NXFxuTGFrZWlzaGEvTVxcbkxha2VsYW5kL01cXG5MYWtld29vZFxcbkxha2lzaGEvTVxcbkxha290YS9NXFxuTGFrc2htaS9NXFxuTGFtYWlzbS9TTVxcbkxhbWFyL01cXG5MYW1hcmNrL01cXG5MYW1hemUvTVxcbkxhbWIvTVxcbkxhbWJlcnQvTVxcbkxhbWJvcmdoaW5pL01cXG5MYW1icnVzY28vTVxcbkxhbWVudGF0aW9uc1xcbkxhbW9udC9NXFxuTGFuYS9NXFxuTGFuYWkvTVxcbkxhbmNhc2hpcmUvTVxcbkxhbmNhc3Rlci9NXFxuTGFuY2UvTVxcbkxhbmNlbG90L01cXG5MYW5kL01cXG5MYW5kb24vTVxcbkxhbmRyeS9NXFxuTGFuZHNhdC9NXFxuTGFuZHN0ZWluZXIvTVxcbkxhbmUvTVxcbkxhbmcvTVxcbkxhbmdlcmhhbnMvTVxcbkxhbmdsYW5kL01cXG5MYW5nbGV5L01cXG5MYW5nbXVpci9NXFxuTGFua2EvTVxcbkxhbmthbi9NXFxuTGFubnkvTVxcbkxhbnNpbmcvTVxcbkxhbnpob3UvTVxcbkxhby9TTVxcbkxhb2Nvb24vTVxcbkxhb3MvTVxcbkxhb3RpYW4vU01cXG5MYXBsYWNlL01cXG5MYXBsYWNpYW5cXG5MYXBsYW5kL01SXFxuTGFwcC9TTVxcbkxhcmEvTVxcbkxhcmFtaWUvTVxcbkxhcmRuZXIvTVxcbkxhcmVkby9NXFxuTGFyb3Vzc2UvTVxcbkxhcnJ5L01cXG5MYXJzL01OXFxuTGFyc2VuL01cXG5MYXJzb24vTVxcbkxhc2NhdXgvTVxcbkxhc3NhL01cXG5MYXNzZW4vTVxcbkxhc3NpZS9NXFxuTGF0L01cXG5MYXRhc2hhL01cXG5MYXRlcmFuL01cXG5MYXRoYW0vTVxcbkxhdGluL01SU1xcbkxhdGluYVxcbkxhdGluby9TTVxcbkxhdGlueFxcbkxhdGlzaGEvTVxcbkxhdG9ueWEvTVxcbkxhdG95YS9NXFxuTGF0cm9iZS9NXFxuTGF0dmlhL01cXG5MYXR2aWFuL01TXFxuTGF1ZC9NUlxcbkxhdWRlci9NXFxuTGF1ZS9NXFxuTGF1bmRyb21hdC9NXFxuTGF1cmEvTVxcbkxhdXJhc2lhL01cXG5MYXVyZWwvTVxcbkxhdXJlbi9NXFxuTGF1cmVuY2UvTVxcbkxhdXJlbnQvTVxcbkxhdXJpL01cXG5MYXVyaWUvTVxcbkxhdmFsL01cXG5MYXZlcm4vTVxcbkxhdmVybmUvTVxcbkxhdm9pc2llci9NXFxuTGF2b25uZS9NXFxuTGF3YW5kYS9NXFxuTGF3cmVuY2UvTVxcbkxhd3Nvbi9NXFxuTGF3dG9uL01cXG5MYXlhbW9uL01cXG5MYXlsYS9NXFxuTGF5dG9uL01cXG5MYXphcm8vTVxcbkxhemFydXMvTVxcbkxlL1NNXFxuTGVhL01cXG5MZWFjaC9NXFxuTGVhZGJlbGx5L01cXG5MZWFoL01cXG5MZWFrZXkvTVxcbkxlYW4vTVxcbkxlYW5kZXIvTVxcbkxlYW5uL01cXG5MZWFubmEvTVxcbkxlYW5uZS9NXFxuTGVhci9NXFxuTGVhcmpldC9NXFxuTGVhcnkvTVxcbkxlYXZlbndvcnRoL01cXG5MZWJhbmVzZS9NXFxuTGViYW5vbi9NXFxuTGViZXNndWUvTVxcbkxlYmxhbmMvTVxcbkxlZGEvTVxcbkxlZGVyYmVyZy9NXFxuTGVlL01cXG5MZWVkcy9NXFxuTGVlc2J1cmcvTVxcbkxlZXV3ZW5ob2VrL01cXG5MZWV3YXJkL01cXG5MZWZ0XFxuTGVnZW5kcmUvTVxcbkxlZ2VyL01cXG5MZWdob3JuL01cXG5MZWdvL01cXG5MZWdyZWUvTVxcbkxlaG1hbi9NXFxuTGVpYm5pei9NXFxuTGVpY2VzdGVyL1NNXFxuTGVpZGVuL01cXG5MZWlmL01cXG5MZWlnaC9NXFxuTGVpbGEvTVxcbkxlaXB6aWcvTVxcbkxlbGEvTVxcbkxlbGFuZC9NXFxuTGVsaWEvTVxcbkxlbWFpdHJlL01cXG5MZW11ZWwvTVxcbkxlbXVyaWEvTVxcbkxlbi9NXFxuTGVuYS9NXFxuTGVuYXJkL01cXG5MZW5pbi9NXFxuTGVuaW5ncmFkL01cXG5MZW5pbmlzbS9NXFxuTGVuaW5pc3QvTVxcbkxlbm5vbi9NXFxuTGVubnkvTVxcbkxlbm8vTVxcbkxlbm9pci9NXFxuTGVub3JhL01cXG5MZW5vcmUvTVxcbkxlbnQvU01OXFxuTGVudGVuL01cXG5MZW8vU01cXG5MZW9sYS9NXFxuTGVvbWluc3Rlci9NXFxuTGVvbi9NXFxuTGVvbmEvTVxcbkxlb25hcmQvTVxcbkxlb25hcmRvL01cXG5MZW9uY2F2YWxsby9NXFxuTGVvbmVsL01cXG5MZW9uaWQvTVxcbkxlb25pZGFzL01cXG5MZW9ub3IvTVxcbkxlb3BvbGQvTVxcbkxlb3BvbGRvL01cXG5MZXBpZHVzL01cXG5MZXBrZS9NXFxuTGVwdXMvTVxcbkxlcm5lci9NXFxuTGVyb3kvTVxcbkxlcy9NXFxuTGVzYS9NXFxuTGVzbGV5L01cXG5MZXNsaWUvTVxcbkxlc290aG8vTVxcbkxlc3NlcHMvTVxcbkxlc3NpZS9NXFxuTGVzdGVyL01cXG5MZXN0cmFkZS9NXFxuTGV0YS9NXFxuTGV0aGEvTVxcbkxldGhlL01cXG5MZXRpY2lhL01cXG5MZXRpdGlhL01cXG5MZXR0ZXJtYW4vTVxcbkxldmFudC9NXFxuTGV2ZXNxdWUvTVxcbkxldmkvU01cXG5MZXZpYXRoYW4vTVxcbkxldmluZS9NXFxuTGV2aXRpY3VzL01cXG5MZXZpdHQvTVxcbkxldnkvTVxcbkxldy9NXFxuTGV3aW5za3kvTVxcbkxld2lzL01cXG5MZXdpc3Rvbi9NXFxuTGV3aXN2aWxsZS9NXFxuTGV4aW5ndG9uL01cXG5MZXh1cy9NXFxuTGhhc2EvTVNcXG5MaG90c2UvTVxcbkxpL01ZXFxuTGlhb25pbmcvTVxcbkxpYmJ5L01cXG5MaWJlcmFjZS9NXFxuTGliZXJhbFxcbkxpYmVyaWEvTVxcbkxpYmVyaWFuL1NNXFxuTGlicmEvTVNcXG5MaWJyZU9mZmljZS9NXFxuTGlicmV2aWxsZS9NXFxuTGlicml1bS9NXFxuTGlieWEvTVxcbkxpYnlhbi9TTVxcbkxpY2h0ZW5zdGVpbi9NXFxuTGlkaWEvTVxcbkxpZS9NXFxuTGllYmVybWFuL01cXG5MaWViZnJhdW1pbGNoL01cXG5MaWVjaHRlbnN0ZWluL1pNUlxcbkxpZWNodGVuc3RlaW5lci9NXFxuTGllZ2UvTVxcbkxpZXV0XFxuTGlsYS9NXFxuTGlsaWEvTVxcbkxpbGlhbi9NXFxuTGlsaWFuYS9NXFxuTGlsaXRoL01cXG5MaWxpdW9rYWxhbmkvTVxcbkxpbGxlL01cXG5MaWxsaWFuL01cXG5MaWxsaWUvTVxcbkxpbGxpcHV0L01cXG5MaWxsaXB1dGlhbi9NU1xcbkxpbGx5L01cXG5MaWxvbmd3ZS9NXFxuTGlseS9NXFxuTGltYS9NXFxuTGltYmF1Z2gvTVxcbkxpbWJvXFxuTGltYnVyZ2VyL01cXG5MaW1vZ2VzL01cXG5MaW1vdXNpbi9NXFxuTGltcG9wby9NXFxuTGluL01cXG5MaW5hL01cXG5MaW5jb2xuL01TXFxuTGluZC9NXFxuTGluZGEvTVxcbkxpbmRiZXJnaC9NXFxuTGluZHNheS9NXFxuTGluZHNleS9NXFxuTGluZHkvTVxcbkxpbm5hZXVzL01cXG5MaW5vdHlwZS9NXFxuTGludG9uL01cXG5MaW51cy9NXFxuTGludXgvTVNcXG5MaW53b29kL01cXG5MaW9uZWwvTVxcbkxpcGl6emFuZXIvTVxcbkxpcHBpL01cXG5MaXBwbWFubi9NXFxuTGlwc2NvbWIvTVxcbkxpcHRvbi9NXFxuTGlzYS9NXFxuTGlzYm9uL01cXG5MaXNzYWpvdXMvTVxcbkxpc3Rlci9NXFxuTGlzdGVyaW5lL01cXG5MaXN0b24vTVxcbkxpc3p0L01cXG5MaXRodWFuaWEvTVxcbkxpdGh1YW5pYW4vTVNcXG5MaXR0bGUvTVxcbkxpdHRvbi9NXFxuTGl2ZXJtb3JlL01cXG5MaXZlcnBvb2wvTVxcbkxpdmVycHVkbGlhbi9TTVxcbkxpdmlhL01cXG5MaXZpbmdzdG9uL01cXG5MaXZpbmdzdG9uZS9NXFxuTGl2b25pYS9NXFxuTGl2eS9NXFxuTGl6L01cXG5MaXphL01cXG5MaXp6aWUvTVxcbkxpenp5L01cXG5ManVibGphbmEvTVxcbkxsZXdlbGx5bi9NXFxuTGxveWQvTVxcbkxuXFxuTG9hZmVyL1NNXFxuTG9iYWNoZXZza3kvTVxcbkxvY2hpbnZhci9NXFxuTG9ja2UvTVxcbkxvY2tlYW4vTVxcbkxvY2toZWVkL01cXG5Mb2Nrd29vZC9NXFxuTG9kZ2UvTVxcbkxvZGkvTVxcbkxvZHovTVxcbkxvZXdlL01cXG5Mb2V3aS9NXFxuTG9ld3MvTVxcbkxvZ2FuL01cXG5Mb2hlbmdyaW4vTVxcbkxvaXJlL01cXG5Mb2lzL01cXG5Mb2tpL01cXG5Mb2xhL01cXG5Mb2xpdGEvTVxcbkxvbGxhcmQvTVxcbkxvbGxvYnJpZ2lkYS9NXFxuTG9tYmFyZC9NXFxuTG9tYmFyZGkvTVxcbkxvbWJhcmR5L01cXG5Mb21lL01cXG5Mb21wb2MvTVxcbkxvbi9NXFxuTG9uZG9uL01SWlxcbkxvbmRvbmVyL01cXG5Mb25nL01cXG5Mb25nZmVsbG93L01cXG5Mb25nbW9udC9NXFxuTG9uZ3N0cmVldC9NXFxuTG9uZ3VldWlsXFxuTG9uZ3ZpZXcvTVxcbkxvbm5pZS9NXFxuTG9wZXovTVxcbkxvcmEvTVxcbkxvcmFpbi9NXFxuTG9yYWluZS9NXFxuTG9yZC9TTVxcbkxvcmRzaGlwL1NNXFxuTG9yZWxlaS9NXFxuTG9yZW4vTVxcbkxvcmVuYS9NXFxuTG9yZW5lL01cXG5Mb3JlbnR6L01cXG5Mb3JlbnR6aWFuXFxuTG9yZW56L01cXG5Mb3JlbnpvL01cXG5Mb3JldHRhL01cXG5Mb3JpL01cXG5Mb3JpZS9NXFxuTG9ybmEvTVxcbkxvcnJhaW5lL01cXG5Mb3JyZS9NXFxuTG9ycmllL01cXG5Mb3NcXG5Mb3QvTVxcbkxvdGhhcmlvL1NNXFxuTG90dC9NXFxuTG90dGllL01cXG5Mb3UvTVxcbkxvdWVsbGEvTVxcbkxvdWllL01cXG5Mb3Vpcy9NXFxuTG91aXNhL01cXG5Mb3Vpc2UvTVxcbkxvdWlzaWFuYS9NXFxuTG91aXNpYW5hbi9NU1xcbkxvdWlzaWFuaWFuL01TXFxuTG91aXN2aWxsZS9NXFxuTG91cmRlcy9NXFxuTG91dnJlL01cXG5Mb3ZlL01cXG5Mb3ZlY3JhZnQvTVxcbkxvdmVsYWNlL01cXG5Mb3dlL01cXG5Mb3dlbGwvTVxcbkxvd2VuYnJhdS9NXFxuTG93ZXJ5L01cXG5Mb3dsYW5kc1xcbkxveWFuZy9NXFxuTG95ZC9NXFxuTG95b2xhL01cXG5Mclxcbkx0XFxuTHRkXFxuTHUvTVxcbkx1YW5kYS9NXFxuTHVhbm4vTVxcbkx1YmF2aXRjaGVyL01cXG5MdWJib2NrL01cXG5MdWJ1bWJhc2hpL01cXG5MdWNhcy9NXFxuTHVjZS9NXFxuTHVjaWEvTVxcbkx1Y2lhbi9NXFxuTHVjaWFuby9NXFxuTHVjaWVuL01cXG5MdWNpZmVyL01cXG5MdWNpbGUvTVxcbkx1Y2lsbGUvTVxcbkx1Y2luZGEvTVxcbkx1Y2lvL01cXG5MdWNpdGUvU01cXG5MdWNpdXMvTVxcbkx1Y2tub3cvTVxcbkx1Y3JldGlhL01cXG5MdWNyZXRpdXMvTVxcbkx1Y3kvTVxcbkx1ZGRpdGUvTVNcXG5MdWRoaWFuYS9NXFxuTHVkd2lnL01cXG5MdWVsbGEvTVxcbkx1ZnRoYW5zYS9NXFxuTHVmdHdhZmZlL01cXG5MdWdlci9NXFxuTHVnb3NpL01cXG5MdWlnaS9NXFxuTHVpcy9NXFxuTHVpc2EvTVxcbkx1a2UvTVxcbkx1bGEvTVxcbkx1bGx5L01cXG5MdWx1L01cXG5MdW1pZXJlL01cXG5MdW5hL01cXG5MdXBlL01cXG5MdXBlcmNhbGlhL01cXG5MdXB1cy9NXFxuTHVyaWEvTVxcbkx1c2FrYS9NXFxuTHVzaXRhbmlhL01cXG5MdXRoZXIvTVxcbkx1dGhlcmFuL1NNXFxuTHV0aGVyYW5pc20vTVNcXG5MdXZzL01cXG5MdXhlbWJvdXJnL1pNUlxcbkx1eGVtYm91cmdlci9NXFxuTHV4ZW1ib3VyZ2lhblxcbkx1ei9NXFxuTHV6b24vTVxcbkx2b3YvTVxcbkx5WC9NXFxuTHlhbGxwdXJcXG5MeWNyYS9NXFxuTHljdXJndXMvTVxcbkx5ZGlhL01cXG5MeWRpYW4vU01cXG5MeWVsbC9NXFxuTHlsZS9NXFxuTHlseS9NXFxuTHltYW4vTVxcbkx5bWUvTVxcbkx5bmNoL01cXG5MeW5jaGJ1cmcvTVxcbkx5bmRhL01cXG5MeW5kb24vTVxcbkx5bmV0dGUvTVxcbkx5bm4vTVxcbkx5bm5lL01cXG5MeW5uZXR0ZS9NXFxuTHlvbi9TTVxcbkx5b25zL01cXG5MeXJhL01cXG5MeXNlbmtvL01cXG5MeXNpc3RyYXRhL01cXG5MeXNvbC9NXFxuTS9TTUdCXFxuTUEvTVxcbk1BU0hcXG5NQi9NXFxuTUJBL01cXG5NQ1xcbk1DSS9NXFxuTUQvTVxcbk1EVFxcbk1FXFxuTUVHTy9TXFxuTUZBL01cXG5NR00vTVxcbk1Ielxcbk1JL01cXG5NSUFcXG5NSURJL01cXG5NSVBTXFxuTUlSVlxcbk1JVC9NXFxuTU1cXG5NTlxcbk1PXFxuTU9PQ1xcbk1QL01cXG5NUEVHXFxuTVJJL01cXG5NUy9NXFxuTVNHL01cXG5NU1QvTVxcbk1TV1xcbk1UL01cXG5NVFYvTVxcbk1WUC9NXFxuTVdcXG5NYWFsb3gvTVxcbk1hYmVsL01cXG5NYWJsZS9NXFxuTWFjL01cXG5NYWNBcnRodXIvTVxcbk1hY0JyaWRlL01cXG5NYWNEb25hbGQvTVxcbk1hY0xlaXNoL01cXG5NYWNhby9NXFxuTWFjYXVsYXkvTVxcbk1hY2JldGgvTVxcbk1hY2NhYmVlc1xcbk1hY2NhYmV1cy9NXFxuTWFjZS9NXFxuTWFjZWRvbi9NXFxuTWFjZWRvbmlhL01cXG5NYWNlZG9uaWFuL1NNXFxuTWFjaC9NXFxuTWFjaGlhdmVsbGkvTVxcbk1hY2hpYXZlbGxpYW4vTVxcbk1hY2lhcy9NXFxuTWFjaW50b3NoL01cXG5NYWNrL01cXG5NYWNrZW56aWUvTVxcbk1hY2tpbmFjL01cXG5NYWNraW5hdy9NXFxuTWFjbWlsbGFuL01cXG5NYWNvbi9NXFxuTWFjdW1iYS9NXFxuTWFjeS9NXFxuTWFkYWdhc2Nhbi9TTVxcbk1hZGFnYXNjYXIvTVxcbk1hZGFtXFxuTWFkZGVuL01cXG5NYWRkb3gvTVxcbk1hZGVpcmEvU01cXG5NYWRlbGVpbmUvTVxcbk1hZGVsaW5lL01cXG5NYWRlbHluL01cXG5NYWRlcmEvTVxcbk1hZGdlL01cXG5NYWRpc29uL01cXG5NYWRvbm5hL1NNXFxuTWFkcmFzL01cXG5NYWRyaWQvTVxcbk1hZHVyYWkvTVxcbk1hZS9NXFxuTWFldGVybGluY2svTVxcbk1hZmlhL01TXFxuTWFmaW9zby9NXFxuTWFnZGFsZW5hL01cXG5NYWdkYWxlbmUvTVxcbk1hZ2VsbGFuL01cXG5NYWdlbGxhbmljL01cXG5NYWdnaWUvTVxcbk1hZ2hyZWIvTVxcbk1hZ2lcXG5NYWdpbm90L01cXG5NYWduaWZpY2F0XFxuTWFnbml0b2dvcnNrL01cXG5NYWdvZy9NXFxuTWFnb28vTVxcbk1hZ3JpdHRlL01cXG5NYWdzYXlzYXkvTVxcbk1hZ3VzXFxuTWFneWFyL1NNXFxuTWFoYWJoYXJhdGEvTVxcbk1haGFyYXNodHJhL01cXG5NYWhhdmlyYS9NXFxuTWFoYXlhbmEvTVxcbk1haGF5YW5pc3QvTVxcbk1haGRpL01cXG5NYWhmb3V6L01cXG5NYWhpY2FuL1NNXFxuTWFobGVyL01cXG5NYWkvTVxcbk1haWRlbmZvcm0vTVxcbk1haWdyZXQvTVxcbk1haWxlci9NXFxuTWFpbGxvbC9NXFxuTWFpbWFuL01cXG5NYWltb25pZGVzL01cXG5NYWluZS9NWlJcXG5NYWluZXIvTVxcbk1haXNpZS9NXFxuTWFpdHJleWEvTVxcbk1halxcbk1hamVzdHlcXG5NYWpvci9NXFxuTWFqb3JjYS9NXFxuTWFqdXJvL01cXG5NYWthcmlvcy9NXFxuTWFrZXIvTVxcbk1hbGFiYXIvTVxcbk1hbGFiby9NXFxuTWFsYWNjYS9NXFxuTWFsYWNoaS9NXFxuTWFsYWdhc3kvTVxcbk1hbGFtdWQvTVxcbk1hbGFwcm9wL01cXG5NYWxhd2kvTVxcbk1hbGF3aWFuL1NNXFxuTWFsYXkvTVNcXG5NYWxheWEvTVxcbk1hbGF5YWxhbS9NXFxuTWFsYXlhbi9NU1xcbk1hbGF5c2lhL01cXG5NYWxheXNpYW4vTVNcXG5NYWxjb2xtL01cXG5NYWxkaXZlL01TXFxuTWFsZGl2ZXMvTVxcbk1hbGRpdmlhbi9NU1xcbk1hbGRvbmFkby9NXFxuTWFsZS9NXFxuTWFsaS9NXFxuTWFsaWFuL1NNXFxuTWFsaWJ1L01cXG5NYWxpbmRhL01cXG5NYWxpbm93c2tpL01cXG5NYWxsYXJtZS9NXFxuTWFsbG9tYXJzL01cXG5NYWxsb3J5L01cXG5NYWxvbmUvTVxcbk1hbG9yeS9NXFxuTWFscGxhcXVldC9NXFxuTWFscmF1eC9NXFxuTWFsdGEvTVxcbk1hbHRlc2UvTVxcbk1hbHRodXMvTVxcbk1hbHRodXNpYW4vU01cXG5NYW1lbHVrZS9NXFxuTWFtZXQvTVxcbk1hbWllL01cXG5NYW1vcmUvTVxcbk1hbi9NXFxuTWFuYWd1YS9NXFxuTWFuYW1hL01cXG5NYW5hc3NlaC9NXFxuTWFuY2hlc3Rlci9NXFxuTWFuY2h1L1NNXFxuTWFuY2h1cmlhL01cXG5NYW5jaHVyaWFuL01cXG5NYW5jaW5pL01cXG5NYW5jdW5pYW4vTVNcXG5NYW5kYWxheS9NXFxuTWFuZGFyaW4vTVxcbk1hbmRlbGEvTVxcbk1hbmRlbGJyb3QvTVxcbk1hbmRldmlsbGUvTVxcbk1hbmRpbmdvL01cXG5NYW5kcmVsbC9NXFxuTWFuZHkvTVxcbk1hbmV0L01cXG5NYW5mcmVkL01cXG5NYW5oYXR0YW4vU01cXG5NYW5pL01cXG5NYW5pY2hlYW4vTVxcbk1hbmlsYS9TTVxcbk1hbml0b2JhL01cXG5NYW5pdG91bGluL01cXG5NYW5rYXRvL01cXG5NYW5sZXkvTVxcbk1hbm4vR01cXG5NYW5uaGVpbS9NXFxuTWFubmluZy9NXFxuTWFuc2ZpZWxkL01cXG5NYW5zb24vTVxcbk1hbnRlY2EvTVxcbk1hbnRlZ25hL01cXG5NYW50bGUvTVxcbk1hbnVlbC9NXFxuTWFudWVsYS9NXFxuTWFueC9NXFxuTWFvL01cXG5NYW9pc20vU01cXG5NYW9pc3QvU01cXG5NYW9yaS9NU1xcbk1hcHBsZXRob3JwZS9NXFxuTWFwdXRvL01cXG5NYXIvU01cXG5NYXJhL01cXG5NYXJhY2FpYm8vTVxcbk1hcmF0L01cXG5NYXJhdGhhL01cXG5NYXJhdGhpL01cXG5NYXJhdGhvbi9NXFxuTWFyYy9NXFxuTWFyY2VhdS9NXFxuTWFyY2VsL01cXG5NYXJjZWxpbm8vTVxcbk1hcmNlbGxhL01cXG5NYXJjZWxvL01cXG5NYXJjaC9NU1xcbk1hcmNpL01cXG5NYXJjaWEvTVxcbk1hcmNpYW5vL01cXG5NYXJjaWUvTVxcbk1hcmNvL01TXFxuTWFyY29uaS9NXFxuTWFyY29zL01cXG5NYXJjdXMvTVxcbk1hcmN1c2VcXG5NYXJjeS9NXFxuTWFyZHVrL01cXG5NYXJnYXJldC9NXFxuTWFyZ2FyaXRhL01cXG5NYXJnYXJpdG8vTVxcbk1hcmdlL01cXG5NYXJnZXJ5L01cXG5NYXJnaWUvTVxcbk1hcmdvL01cXG5NYXJnb3RcXG5NYXJncmV0L01cXG5NYXJncmV0aGUvTVxcbk1hcmd1ZXJpdGUvTVxcbk1hcmkvU01cXG5NYXJpYS9NXFxuTWFyaWFEQi9NXFxuTWFyaWFuL01cXG5NYXJpYW5hL1NNXFxuTWFyaWFuYXMvTVxcbk1hcmlhbm5lL01cXG5NYXJpYW5vL01cXG5NYXJpYmVsL01cXG5NYXJpY2VsYS9NXFxuTWFyaWUvTVxcbk1hcmlldHRhL01cXG5NYXJpbHluL01cXG5NYXJpbi9NXFxuTWFyaW5hL01cXG5NYXJpbmUvU01cXG5NYXJpby9NXFxuTWFyaW9uL01cXG5NYXJpcy9NXFxuTWFyaXNhL01cXG5NYXJpc29sL01cXG5NYXJpc3NhL01cXG5NYXJpdGFpbi9NXFxuTWFyaXR6YS9NXFxuTWFyaXVwb2xcXG5NYXJpdXMvTVxcbk1hcmpvcmllL01cXG5NYXJqb3J5L01cXG5NYXJrL1NNXFxuTWFya2FiL01cXG5NYXJraGFtL01cXG5NYXJrb3YvTVxcbk1hcmtzL01cXG5NYXJsYS9NXFxuTWFybGJvcm8vTVxcbk1hcmxib3JvdWdoL01cXG5NYXJsZW5lL01cXG5NYXJsZXkvTVxcbk1hcmxpbi9NXFxuTWFybG9uL01cXG5NYXJsb3dlL01cXG5NYXJtYXJhL01cXG5NYXJuZS9NXFxuTWFyb25pdGUvTVxcbk1hcnBsZS9NXFxuTWFycXVlc2FzL01cXG5NYXJxdWV0dGUvTVxcbk1hcnF1ZXovTVxcbk1hcnF1aXMvTVxcbk1hcnF1aXRhL01cXG5NYXJyYWtlc2gvTVxcbk1hcnJpb3R0L01cXG5NYXJzL01TXFxuTWFyc2FsYS9NXFxuTWFyc2VpbGxhaXNlL01TXFxuTWFyc2VpbGxlcy9NXFxuTWFyc2gvTVxcbk1hcnNoYS9NXFxuTWFyc2hhbGwvTVxcbk1hcnRhL01cXG5NYXJ0ZWwvTVxcbk1hcnRoYS9NXFxuTWFydGlhbC9NXFxuTWFydGlhbi9TTVxcbk1hcnRpbi9NXFxuTWFydGluYS9NXFxuTWFydGluZXovTVxcbk1hcnRpbmlxdWUvTVxcbk1hcnR5L01cXG5NYXJ2YS9NXFxuTWFydmVsbC9NXFxuTWFydmluL01cXG5NYXJ4L01cXG5NYXJ4aWFuXFxuTWFyeGlzbS9TTVxcbk1hcnhpc3QvU01cXG5NYXJ5L01cXG5NYXJ5YW5uL01cXG5NYXJ5YW5uZS9NXFxuTWFyeWVsbGVuL01cXG5NYXJ5bGFuZC9NUlxcbk1hcnlsYW5kZXIvTVxcbk1hcnlsb3UvTVxcbk1hcnlzdmlsbGUvTVxcbk1hc2FkYS9NXFxuTWFzYWkvTVxcbk1hc2FyeWsvTVxcbk1hc2NhZ25pL01cXG5NYXNlZmllbGQvTVxcbk1hc2VyYXRpL01cXG5NYXNlcnUvTVxcbk1hc2hoYWQvTVxcbk1hc29uL01TXFxuTWFzb25pYy9NXFxuTWFzb25pdGUvTVxcbk1hc3MvTVNcXG5NYXNzYWNodXNldHRzL01cXG5NYXNzYXNvaXQvTVxcbk1hc3NlbmV0L01cXG5NYXNzZXkvTVxcbk1hc3Rlci9TXFxuTWFzdGVyQ2FyZC9NXFxuTWFzdGVycy9NXFxuTWF0aGVyL01cXG5NYXRoZXNvbi9NXFxuTWF0aGV3L1NNXFxuTWF0aGV3cy9NXFxuTWF0aGV3c29uL01cXG5NYXRoaWFzL01cXG5NYXRoaXMvTVxcbk1hdGlsZGEvTVxcbk1hdGlzc2UvTVxcbk1hdGxhYi9NXFxuTWF0dC9NXFxuTWF0dGVsL01cXG5NYXR0ZXJob3JuL01cXG5NYXR0aGV3L1NNXFxuTWF0dGhld3MvTVxcbk1hdHRoaWFzL01cXG5NYXR0aWUvTVxcbk1hdWQvTVxcbk1hdWRlL01cXG5NYXVnaGFtL01cXG5NYXVpL01cXG5NYXVsZGluL01cXG5NYXVwYXNzYW50L01cXG5NYXVyYS9NXFxuTWF1cmVlbi9NXFxuTWF1cmlhYy9NXFxuTWF1cmljZS9NXFxuTWF1cmljaW8vTVxcbk1hdXJpbmUvTVxcbk1hdXJpdGFuaWEvTVxcbk1hdXJpdGFuaWFuL1NNXFxuTWF1cml0aWFuL1NNXFxuTWF1cml0aXVzL01cXG5NYXVyby9NXFxuTWF1cm9pcy9NXFxuTWF1cnlhbi9NXFxuTWF1c2VyL01cXG5NYXZpcy9NXFxuTWF4L01cXG5NYXhpbWlsaWFuL01cXG5NYXhpbmUvTVxcbk1heHdlbGwvTVxcbk1heS9TTVJcXG5NYXlhL1NNXFxuTWF5YW4vTVNcXG5NYXllci9NXFxuTWF5ZmFpci9NXFxuTWF5Zmxvd2VyL01cXG5NYXluYXJkL01cXG5NYXlvL01cXG5NYXlwb2xlXFxuTWF5cmEvTVxcbk1heXMvTVxcbk1heXRhZy9NXFxuTWF6YW1hL01cXG5NYXphcmluL01cXG5NYXphdGxhbi9NXFxuTWF6ZGEvTVxcbk1hem9sYS9NXFxuTWF6emluaS9NXFxuTWIvTVxcbk1iYWJhbmUvTVxcbk1iaW5pL01cXG5NY0FkYW0vTVxcbk1jQWxsZW4vTVxcbk1jQnJpZGUvTVxcbk1jQ2Fpbi9NXFxuTWNDYWxsL01cXG5NY0NhcnRoeS9NXFxuTWNDYXJ0aHlpc20vTVxcbk1jQ2FydG5leS9NXFxuTWNDYXJ0eS9NXFxuTWNDbGFpbi9NXFxuTWNDbGVsbGFuL01cXG5NY0NsdXJlL01cXG5NY0Nvbm5lbGwvTVxcbk1jQ29ybWljay9NXFxuTWNDb3kvTVxcbk1jQ3JheS9NXFxuTWNDdWxsb3VnaC9NXFxuTWNEYW5pZWwvTVxcbk1jRG9uYWxkL01cXG5NY0Rvbm5lbGwvTVxcbk1jRG93ZWxsL01cXG5NY0Vucm9lL01cXG5NY0ZhZGRlbi9NXFxuTWNGYXJsYW5kL01cXG5NY0dlZS9NXFxuTWNHb3Zlcm4vTVxcbk1jR293YW4vTVxcbk1jR3VmZmV5L01cXG5NY0d1aXJlL01cXG5NY0hlbnJ5L01cXG5NY0ludG9zaC9NXFxuTWNJbnR5cmUvTVxcbk1jSm9iXFxuTWNLYXkvTVxcbk1jS2VlL01cXG5NY0tlbnppZS9NXFxuTWNLaW5sZXkvTVxcbk1jS2lubmV5L01cXG5NY0tuaWdodC9NXFxuTWNMYXVnaGxpbi9NXFxuTWNMZWFuL01cXG5NY0xlb2QvTVxcbk1jTHVoYW4vTVxcbk1jTWFob24vTVxcbk1jTWlsbGFuL01cXG5NY05hbWFyYS9NXFxuTWNOYXVnaHRvbi9NXFxuTWNOZWlsL01cXG5NY1BoZXJzb24vTVxcbk1jUXVlZW4vTVxcbk1jVmVpZ2gvTVxcbk1kL01cXG5NZVxcbk1lYWQvTVxcbk1lYWRlL01cXG5NZWFkb3dzL01cXG5NZWFnYW4vTVxcbk1lYW55L01cXG5NZWNjYS9NU1xcbk1lZGFuL01cXG5NZWRlYS9NXFxuTWVkZWxsaW4vTVxcbk1lZGZvcmQvTVxcbk1lZGlhL01cXG5NZWRpY2FpZC9TTVxcbk1lZGljYXJlL1NNXFxuTWVkaWNpL01cXG5NZWRpbmEvTVxcbk1lZGl0ZXJyYW5lYW4vTVNcXG5NZWR1c2EvTVxcbk1lZy9NXFxuTWVnYW4vTVxcbk1lZ2hhbi9NXFxuTWVpZXIvTVxcbk1laWdoZW4vTVxcbk1laWppL01cXG5NZWlyL01cXG5NZWppYS9NXFxuTWVrb25nL01cXG5NZWwvTVxcbk1lbGFuZXNpYS9NXFxuTWVsYW5lc2lhbi9NXFxuTWVsYW5pZS9NXFxuTWVsYmEvTVxcbk1lbGJvdXJuZS9NXFxuTWVsY2hpb3IvTVxcbk1lbGNoaXplZGVrL01cXG5NZWxlbmRlei9NXFxuTWVsaW5kYS9NXFxuTWVsaXNhL01cXG5NZWxpc2FuZGUvTVxcbk1lbGlzc2EvTVxcbk1lbGxvbi9NXFxuTWVsb2R5L01cXG5NZWxwb21lbmUvTVxcbk1lbHRvbi9NXFxuTWVsdmEvTVxcbk1lbHZpbGxlL01cXG5NZWx2aW4vTVxcbk1lbWNhY2hlZC9NXFxuTWVtbGluZy9NXFxuTWVtcGhpcy9NXFxuTWVuYW5kZXIvTVxcbk1lbmNpdXMvTVxcbk1lbmNrZW4vTVxcbk1lbmRlbC9NXFxuTWVuZGVsZWV2L01cXG5NZW5kZWxpYW4vTVxcbk1lbmRlbHNzb2huL01cXG5NZW5kZXovTVxcbk1lbmRvY2luby9NXFxuTWVuZG96YS9NXFxuTWVuZWxhdXMvTVxcbk1lbmVsaWsvTVxcbk1lbmVzL01cXG5NZW5nemlcXG5NZW5pZmVlL01cXG5NZW5rYWxpbmFuL01cXG5NZW5rYXIvTVxcbk1lbmtlbnQvTVxcbk1lbm5lbi9NXFxuTWVubm9uaXRlL01TXFxuTWVub21pbmVlL01cXG5NZW5vdHRpL01cXG5NZW5zYS9NXFxuTWVudGhvbGF0dW0vTVxcbk1lbnVoaW4vTVxcbk1lbnppZXMvTVxcbk1lcGhpc3RvXFxuTWVwaGlzdG9waGVsZXMvTVxcbk1lcmFrL01cXG5NZXJjYWRvL01cXG5NZXJjYXRvci9NXFxuTWVyY2VkL01cXG5NZXJjZWRlcy9NXFxuTWVyY2VyL01cXG5NZXJjaWEvTVxcbk1lcmNrL01cXG5NZXJjdXJvY2hyb21lL01cXG5NZXJjdXJ5L1NNXFxuTWVyZWRpdGgvTVxcbk1lcmluby9NXFxuTWVybGUvTVxcbk1lcmxpbi9NXFxuTWVybG90L01cXG5NZXJvdmluZ2lhbi9NXFxuTWVycmlhbS9NXFxuTWVycmljay9NXFxuTWVycmlsbC9NXFxuTWVycmltYWNrL01cXG5NZXJyaXR0L01cXG5NZXJ0aGlvbGF0ZS9NXFxuTWVydG9uL01cXG5NZXJ2aW4vTVxcbk1lc2EvTVxcbk1lc2FiaS9NXFxuTWVzbWVyL01cXG5NZXNvbGl0aGljL01cXG5NZXNvcG90YW1pYS9NXFxuTWVzb3BvdGFtaWFuXFxuTWVzb3pvaWMvTVxcbk1lc3NlcnNjaG1pZHQvTVxcbk1lc3NpYWVuL01cXG5NZXNzaWFoL01cXG5NZXNzaWFoc1xcbk1lc3NpYW5pY1xcbk1lc3NpZXVyc1xcbk1ldGFsbGljYS9NXFxuTWV0YW11Y2lsL01cXG5NZXRob2Rpc20vU01cXG5NZXRob2Rpc3QvU01cXG5NZXRodXNlbGFoL01cXG5NZXR0ZXJuaWNoL01cXG5NZXVzZS9NXFxuTWV4XFxuTWV4aWNhbGkvTVxcbk1leGljYW4vTVNcXG5NZXhpY28vTVxcbk1leWVyL01TXFxuTWV5ZXJiZWVyL01cXG5NZXllcnMvTVxcbk1mdW1lL01cXG5NZy9NXFxuTWdyXFxuTWlHL01cXG5NaWEvTVxcbk1pYW1pL01TXFxuTWlhcGxhY2lkdXMvTVxcbk1pY2FoL01cXG5NaWNhd2Jlci9NXFxuTWljaC9NXFxuTWljaGFlbC9NXFxuTWljaGFlbG1hcy9NU1xcbk1pY2hlYWwvTVxcbk1pY2hlbC9NXFxuTWljaGVsYW5nZWxvL01cXG5NaWNoZWxlL01cXG5NaWNoZWxpbi9NXFxuTWljaGVsbGUvTVxcbk1pY2hlbG9iL01cXG5NaWNoZWxzb24vTVxcbk1pY2hpZ2FuL01cXG5NaWNoaWdhbmRlci9NU1xcbk1pY2hpZ2FuaXRlXFxuTWljay9NXFxuTWlja2V5L01cXG5NaWNraWUvTVxcbk1pY2t5L01cXG5NaWNtYWMvU01cXG5NaWNyb25lc2lhL01cXG5NaWNyb25lc2lhbi9NXFxuTWljcm9zb2Z0L01cXG5NaWRhcy9NXFxuTWlkZGxldG9uL01cXG5NaWRkbGV0b3duL01cXG5NaWRlYXN0XFxuTWlkZWFzdGVyblxcbk1pZGxhbmQvTVNcXG5NaWR3YXkvTVxcbk1pZHdlc3QvTVxcbk1pZHdlc3Rlcm4vTVJcXG5NaWd1ZWwvTVxcbk1pa2UvTVxcbk1pa2hhaWwvTVxcbk1pa295YW4vTVxcbk1pbGFncm9zL01cXG5NaWxhbi9NXFxuTWlsYW5lc2VcXG5NaWxkcmVkL01cXG5NaWxlcy9NXFxuTWlsZm9yZC9NXFxuTWlsa2VuL01cXG5NaWxsL1NNUlxcbk1pbGxhcmQvTVxcbk1pbGxheS9NXFxuTWlsbGVyL01cXG5NaWxsZXQvTVxcbk1pbGxpY2VudC9NXFxuTWlsbGllL01cXG5NaWxsaWthbi9NXFxuTWlsbHMvTVxcbk1pbG5lL01cXG5NaWxvL01cXG5NaWxvc2V2aWMvTVxcbk1pbHF1ZXRvYXN0L01cXG5NaWx0aWFkZXMvTVxcbk1pbHRvbi9NXFxuTWlsdG9uaWFuXFxuTWlsdG9uaWMvTVxcbk1pbHRvd24vTVxcbk1pbHdhdWtlZS9NXFxuTWltaS9NXFxuTWltb3NhL01cXG5NaW4vTVxcbk1pbmFtb3RvL01cXG5NaW5kYW5hby9NXFxuTWluZG9yby9NXFxuTWluZHkvTVxcbk1pbmVydmEvTVxcbk1pbmcvTVxcbk1pbmd1cy9NXFxuTWlublxcbk1pbm5lYXBvbGlzL01cXG5NaW5uZWxsaS9NXFxuTWlubmVzb3RhL01cXG5NaW5uZXNvdGFuL1NNXFxuTWlubmllL01cXG5NaW5vYW4vTVNcXG5NaW5vbHRhL01cXG5NaW5vcy9NXFxuTWlub3QvTVxcbk1pbm90YXVyL01cXG5NaW5zay9NXFxuTWluc2t5L01cXG5NaW50YWthL01cXG5NaW51aXQvTVxcbk1pbnV0ZW1hbi9NXFxuTWlvY2VuZS9NXFxuTWlyL01cXG5NaXJhL01cXG5NaXJhYmVhdS9NXFxuTWlyYWNoL01cXG5NaXJhbmRhL01cXG5NaXJmYWsvTVxcbk1pcmlhbS9NXFxuTWlyby9NXFxuTWlyemFtL01cXG5NaXNraXRvL01cXG5NaXNzXFxuTWlzc2lzc2F1Z2EvTVxcbk1pc3Npc3NpcHBpL01cXG5NaXNzaXNzaXBwaWFuL1NNXFxuTWlzc291bGEvTVxcbk1pc3NvdXJpL01cXG5NaXNzb3VyaWFuL01TXFxuTWlzc3kvTVxcbk1pc3Rhc3NpbmkvTVxcbk1pc3Rlclxcbk1pc3RyZXNzXFxuTWlzdHkvTVxcbk1pdGNoL01cXG5NaXRjaGVsL01cXG5NaXRjaGVsbC9NXFxuTWl0Zm9yZC9NXFxuTWl0aHJhL01cXG5NaXRocmlkYXRlcy9NXFxuTWl0c3ViaXNoaS9NXFxuTWl0dGVycmFuZC9NXFxuTWl0dHkvTVxcbk1pdHppL01cXG5NaXh0ZWMvTVxcbk1pemFyL01cXG5Na1xcbk1sbGVcXG5NbWUvU1xcbk1uL01cXG5NbmVtb3N5bmUvTVxcbk1vL01cXG5Nb2JpbC9NXFxuTW9iaWxlL01cXG5Nb2J1dHUvTVxcbk1vZGVzdG8vTVxcbk1vZGlnbGlhbmkvTVxcbk1vZS9NXFxuTW9ldC9NXFxuTW9nYWRpc2h1L01cXG5Nb2d1bC9NU1xcbk1vaGFjcy9NXFxuTW9oYW1lZC9NXFxuTW9oYW1tYWQvTVxcbk1vaGFtbWVkYW4vU01cXG5Nb2hhbW1lZGFuaXNtL1NNXFxuTW9oYXZlL1NNXFxuTW9oYXdrL1NNXFxuTW9oZWdhblxcbk1vaG8vTVxcbk1vaG9yb3ZpY2ljL01cXG5Nb2lyYS9NXFxuTW9pc2VzL01cXG5Nb2lzZXlldi9NXFxuTW9qYXZlL1NNXFxuTW9sZGF2aWEvTVxcbk1vbGRhdmlhblxcbk1vbGRvdmEvTVxcbk1vbGRvdmFuXFxuTW9saWVyZS9NXFxuTW9saW5hL01cXG5Nb2xsL01cXG5Nb2xsaWUvTVxcbk1vbGx5L01cXG5Nb2xuYXIvTVxcbk1vbG9jaC9NXFxuTW9sb2thaS9NXFxuTW9sb3Rvdi9NXFxuTW9sdWNjYXMvTVxcbk1vbWJhc2EvTVxcbk1vbi9TTVxcbk1vbmEvTVxcbk1vbmFjYW5cXG5Nb25hY28vTVxcbk1vbmRhbGUvTVxcbk1vbmRheS9TTVxcbk1vbmRyaWFuL01cXG5Nb25lZ2FzcXVlL1NNXFxuTW9uZXJhL01cXG5Nb25lc3Nlbi9NXFxuTW9uZXQvTVxcbk1vbmdvREIvTVxcbk1vbmdvbC9TTVxcbk1vbmdvbGlhL01cXG5Nb25nb2xpYW4vU01cXG5Nb25nb2xpYy9NXFxuTW9uZ29sb2lkXFxuTW9uaWNhL01cXG5Nb25pcXVlL01cXG5Nb25rL01cXG5Nb25tb3V0aC9NXFxuTW9ub25nYWhlbGEvTVxcbk1vbnJvZS9NXFxuTW9ucm92aWEvTVxcbk1vbnNhbnRvL01cXG5Nb25zaWV1ci9NXFxuTW9uc2lnbm9yL1NNXFxuTW9udC9NXFxuTW9udGFndWUvTVxcbk1vbnRhaWduZS9NXFxuTW9udGFuYS9NXFxuTW9udGFuYW4vU01cXG5Nb250Y2FsbS9NXFxuTW9udGUvTVxcbk1vbnRlbmVncmluL01cXG5Nb250ZW5lZ3JvL01cXG5Nb250ZXJleS9NXFxuTW9udGVycmV5L01cXG5Nb250ZXNxdWlldS9NXFxuTW9udGVzc29yaS9NXFxuTW9udGV2ZXJkaS9NXFxuTW9udGV2aWRlby9NXFxuTW9udGV6dW1hL01cXG5Nb250Z29sZmllci9NXFxuTW9udGdvbWVyeS9NXFxuTW9udGljZWxsby9NXFxuTW9udG95YS9NXFxuTW9udHBlbGllci9NXFxuTW9udHJhY2hldC9NXFxuTW9udHJlYWwvTVxcbk1vbnRzZXJyYXQvTVxcbk1vbnR5L01cXG5Nb29keS9NXFxuTW9vZy9NXFxuTW9vbi9NXFxuTW9vbmV5L01cXG5Nb29yL1NNXFxuTW9vcmUvTVxcbk1vb3Jpc2gvTVxcbk1vcmFsZXMvTVxcbk1vcmFuL01cXG5Nb3JhdmlhL01cXG5Nb3Jhdmlhbi9NXFxuTW9yZHJlZC9NXFxuTW9yZS9NXFxuTW9yZW5vL01cXG5Nb3JnYW4vU01cXG5Nb3JnYW50b3duL01cXG5Nb3JpYXJ0eS9NXFxuTW9yaW4vTVxcbk1vcmlzb24vTVxcbk1vcml0YS9NXFxuTW9ybGV5L01cXG5Nb3Jtb24vU01cXG5Nb3Jtb25pc20vU01cXG5Nb3JvL01cXG5Nb3JvY2Nhbi9TTVxcbk1vcm9jY28vTVxcbk1vcm9uaS9NXFxuTW9ycGhldXMvTVxcbk1vcnBoeS9NXFxuTW9ycmlzL01cXG5Nb3JyaXNvbi9NXFxuTW9ycmlzdG93bi9NXFxuTW9ycm93L01cXG5Nb3JzZS9NXFxuTW9ydC9NXFxuTW9ydGltZXIvTVxcbk1vcnRvbi9NXFxuTW9zYWljL01cXG5Nb3Njb3cvTVxcbk1vc2VsZXkvTVxcbk1vc2VsbGUvTVxcbk1vc2VzL01cXG5Nb3NsZXkvTVxcbk1vc3MvTVxcbk1vc3VsL01cXG5Nb3Rvcm9sYS9NXFxuTW90b3duL01cXG5Nb3RyaW4vTVxcbk1vdHQvTVxcbk1vdWx0b24vTVxcbk1vdW50L01cXG5Nb3VudGJhdHRlbi9NXFxuTW91bnRpZS9NU1xcbk1vdXNzb3Jnc2t5L01cXG5Nb3V0aGUvTVxcbk1vdXRvbi9NXFxuTW93Z2xpL01cXG5Nb3phbWJpY2FuL1NNXFxuTW96YW1iaXF1ZS9NXFxuTW96YXJ0L01cXG5Nb3ppbGxhL01cXG5Nci9TTVxcbk1zL1NcXG5Nc2dyXFxuTXRcXG5NdWF3aXlhL01cXG5NdWJhcmFrL01cXG5NdWVsbGVyL01cXG5NdWVuc3Rlci9NU1xcbk11Z2FiZS9NXFxuTXVoYW1tYWQvTVxcbk11aGFtbWFkYW4vTVNcXG5NdWhhbW1hZGFuaXNtL1NNXFxuTXVpci9NXFxuTXVqaWIvTVxcbk11bGRlci9NXFxuTXVsbGVuL01cXG5NdWxsZXIvTVxcbk11bGxpZ2FuL01cXG5NdWxsaWthbi9NXFxuTXVsbGlucy9NXFxuTXVscm9uZXkvTVxcbk11bHRhbi9NXFxuTXVsdGljc1xcbk11bWJhaS9NXFxuTXVtZm9yZC9NXFxuTXVuY2gvTVxcbk11bmNoaGF1c2VuL01cXG5NdW5jaWUvTVxcbk11bmljaC9NXFxuTXVub3ovTVxcbk11bnJvL01cXG5NdW5zdGVyL01cXG5NdXBwZXQvTVxcbk11cmFzYWtpL01cXG5NdXJhdC9NXFxuTXVyY2hpc29uL01cXG5NdXJjaWFcXG5NdXJkb2NoL01cXG5NdXJmcmVlc2Jvcm8vTVxcbk11cmllbC9NXFxuTXVyaWxsby9NXFxuTXVyaW5lL01cXG5NdXJtYW5zay9NXFxuTXVycGh5L01cXG5NdXJyYXkvTVxcbk11cnJpZXRhL01cXG5NdXJyb3cvTVxcbk11cnJ1bWJpZGdlZS9NXFxuTXVzY2F0L01cXG5NdXNjb3ZpdGUvTVxcbk11c2NvdnkvTVxcbk11c2UvTVxcbk11c2hhcnJhZi9NXFxuTXVzaWFsL01cXG5NdXNrZWdvbi9NXFxuTXVza29nZWUvTVxcbk11c2xpbS9NU1xcbk11c3NvbGluaS9NXFxuTXVzc29yZ3NreS9NXFxuTXV0c3VoaXRvL01cXG5NdXphay9NXFxuTXlTUUwvTVxcbk15U3BhY2UvTVxcbk15YW5tYXIvTVxcbk15Y2VuYWUvTVxcbk15Y2VuYWVhbi9NXFxuTXllcnMvTVxcbk15bGFyL01TXFxuTXlsZXMvTVxcbk15cmEvTVxcbk15cmRhbC9NXFxuTXlybmEvTVxcbk15cm9uL01cXG5NeXJ0bGUvTVxcbk15c29yZS9NXFxuTXlzdC9NXFxuTidEamFtZW5hXFxuTi9NRFxcbk5BQUNQL01cXG5OQUZUQS9NXFxuTkFTQS9NXFxuTkFTQ0FSL01cXG5OQVNEQVEvTVxcbk5BVE8vTVxcbk5CXFxuTkJBL01cXG5OQkMvTVxcbk5CU1xcbk5DXFxuTkNBQS9NXFxuTkNPXFxuTkRcXG5ORS9NXFxuTkVIXFxuTkZcXG5ORkNcXG5ORkwvTVxcbk5IXFxuTkhML01cXG5OSUhcXG5OSU1CWVxcbk5KXFxuTkxSQlxcbk5NXFxuTk9SQUQvTVxcbk5PV1xcbk5QXFxuTlBSL01cXG5OUlxcbk5SQVxcbk5SQ1xcbk5TXFxuTlNBL01cXG5OU0NcXG5OU0ZcXG5OU0ZXXFxuTlRcXG5OVlxcbk5WSURJQS9NXFxuTlcvTVxcbk5XVFxcbk5ZXFxuTllDXFxuTllTRVxcbk5aXFxuTmEvTVxcbk5hYmlzY28vTVxcbk5hYm9rb3YvTVxcbk5hZGVyL01cXG5OYWRpYS9NXFxuTmFkaW5lL01cXG5OYWdhc2FraS9NXFxuTmFnb3lhL01cXG5OYWdwdXIvTVxcbk5hZ3kvTVxcbk5haHVhdGwvTVNcXG5OYWh1bS9NXFxuTmFpcGF1bC9NXFxuTmFpci9NXFxuTmFpcm9iaS9NXFxuTmFpc21pdGgvTVxcbk5hbS9NXFxuTmFtYXRoL01cXG5OYW1pYmlhL01cXG5OYW1pYmlhbi9NU1xcbk5hbXBhL01cXG5OYW4vTVxcbk5hbmFrL01cXG5OYW5jaGFuZy9NXFxuTmFuY3kvTVxcbk5hbmV0dGUvTVxcbk5hbmppbmcvTVxcbk5hbm5pZS9NXFxuTmFub29rL01cXG5OYW5zZW4vTVxcbk5hbnRlcy9NXFxuTmFudHVja2V0L01cXG5OYW9taS9NXFxuTmFwYS9NXFxuTmFwaHRhbGkvTVxcbk5hcGllci9NXFxuTmFwbGVzL01cXG5OYXBvbGVvbi9NU1xcbk5hcG9sZW9uaWMvTVxcbk5hcHN0ZXIvTVxcbk5hcmNpc3N1cy9NXFxuTmFybWFkYS9NXFxuTmFybmlhL01cXG5OYXJyYWdhbnNldFxcbk5hcnJhZ2Fuc2V0dC9NXFxuTmFzaC9NXFxuTmFzaHVhL01cXG5OYXNodmlsbGUvTVxcbk5hc3NhdS9NXFxuTmFzc2VyL01cXG5OYXQvTVxcbk5hdGFsaWEvTVxcbk5hdGFsaWUvTVxcbk5hdGFzaGEvTVxcbk5hdGNoZXovTVxcbk5hdGUvTU5cXG5OYXRoYW4vU01cXG5OYXRoYW5pZWwvTVxcbk5hdGhhbnMvTVxcbk5hdGlvbi9NXFxuTmF0aW9ud2lkZS9NXFxuTmF0aXZpdHkvTVxcbk5hdWdhaHlkZS9NXFxuTmF1cnUvTVxcbk5hdXRpbHVzL01cXG5OYXZham8vU01cXG5OYXZham9lc1xcbk5hdmFycmUvTVxcbk5hdmFycm8vTVxcbk5hdnJhdGlsb3ZhL01cXG5OYXZ5XFxuTmF6YXJlbmUvTVxcbk5hemFyZXRoL01cXG5OYXpjYS9NXFxuTmF6aS9TTVxcbk5hemlzbS9NU1xcbk5iL01cXG5OZC9NXFxuTmRqYW1lbmEvTVxcbk5lL01cXG5OZVdTXFxuTmVXU2VzXFxuTmVhbC9NXFxuTmVhbmRlcnRoYWwvU01cXG5OZWFwb2xpdGFuL01cXG5OZWJcXG5OZWJyXFxuTmVicmFza2EvTVxcbk5lYnJhc2thbi9NU1xcbk5lYnVjaGFkbmV6emFyL01cXG5OZWQvTVxcbk5lZmVydGl0aS9NXFxuTmVnZXYvTVxcbk5lZ3Jlc3MvTVNcXG5OZWdyaXR1ZGVcXG5OZWdyby9NU1xcbk5lZ3JvZXNcXG5OZWdyb2lkL1NNXFxuTmVncm9zL01cXG5OZWhlbWlhaC9NXFxuTmVocnUvTVxcbk5laWwvTVxcbk5lbGRhL01cXG5OZWxsL01cXG5OZWxsaWUvTVxcbk5lbGx5L01cXG5OZWxzZW4vTVxcbk5lbHNvbi9NXFxuTmVtYnV0YWwvTVxcbk5lbWVzaXMvTVxcbk5lby9NXFxuTmVvZ2VuZS9NXFxuTmVvbGl0aGljXFxuTmVwYWwvTVxcbk5lcGFsZXNlL01cXG5OZXBhbGkvTVNcXG5OZXB0dW5lL01cXG5OZXJlaWQvTVxcbk5lcmYvTVxcbk5lcm8vTVxcbk5lcnVkYS9NXFxuTmVzY2FmZS9NXFxuTmVzc2Vscm9kZS9NXFxuTmVzdGxlL01cXG5OZXN0b3IvTVxcbk5lc3Rvcml1cy9NXFxuTmV0ZmxpeC9NXFxuTmV0aGVybGFuZGVyL1NNXFxuTmV0aGVybGFuZHMvTVxcbk5ldHNjYXBlL01cXG5OZXR0aWUvTVxcbk5ldHphaHVhbGNveW90bC9NXFxuTmV2L01cXG5OZXZhL01cXG5OZXZhZGEvTVxcbk5ldmFkYW4vU01cXG5OZXZhZGlhblxcbk5ldmlzL01cXG5OZXZza3kvTVxcbk5ld2Fyay9NXFxuTmV3YnVyZ2gvTVxcbk5ld2Nhc3RsZS9NXFxuTmV3Zm91bmRsYW5kL01SU1xcbk5ld21hbi9NXFxuTmV3cG9ydC9NXFxuTmV3c3dlZWsvTVxcbk5ld3Rvbi9NXFxuTmV3dG9uaWFuL01cXG5OZXhpcy9NXFxuTmdhbGllbWEvTVxcbk5ndXllbi9NXFxuTmkvTVxcbk5pYWdhcmEvTVxcbk5pYW1leS9NXFxuTmliZWx1bmcvTVxcbk5pY2FlYS9NXFxuTmljYXJhZ3VhL01cXG5OaWNhcmFndWFuL1NNXFxuTmljY29sby9NXFxuTmljZS9NXFxuTmljZW5lL01cXG5OaWNoaXJlbi9NXFxuTmljaG9sYXMvTVxcbk5pY2hvbGUvTVxcbk5pY2hvbHMvTVxcbk5pY2hvbHNvbi9NXFxuTmljay9NXFxuTmlja2Vsb2Rlb24vTVxcbk5pY2tsYXVzL01cXG5OaWNrb2xhcy9NXFxuTmljb2Jhci9NXFxuTmljb2RlbXVzL01cXG5OaWNvbGEvU01cXG5OaWNvbGFzL01cXG5OaWNvbGUvTVxcbk5pY29zaWEvTVxcbk5pZWJ1aHIvTVxcbk5pZWxzZW4vTVxcbk5pZXR6c2NoZS9NXFxuTmlldmVzL01cXG5OaWdlbC9NXFxuTmlnZXIvTVxcbk5pZ2VyaWEvTVxcbk5pZ2VyaWFuL01TXFxuTmlnZXJpZW4vTVxcbk5pZ2h0aW5nYWxlL01cXG5OaWppbnNreS9NXFxuTmlrZS9NXFxuTmlraXRhL01cXG5OaWtrZWkvTVxcbk5pa2tpL01cXG5OaWtvbGFpL01cXG5OaWtvbi9NXFxuTmlsZS9NXFxuTmltaXR6L01cXG5OaW1yb2QvTVxcbk5pbmEvTVxcbk5pbmV2ZWgvTVxcbk5pbnRlbmRvL01cXG5OaW9iZS9NXFxuTmlwcG9uL01cXG5OaXBwb25lc2UvTVxcbk5pcmVuYmVyZy9NXFxuTmlydmFuYS9NXFxuTmlzYW4vTVxcbk5pc2VpL01cXG5OaXNzYW4vTVxcbk5pdGEvTVxcbk5pdmVhL01cXG5OaXhvbi9NXFxuTmtydW1haC9NXFxuTm8vU01cXG5Ob0Rvei9NXFxuTm9haC9NXFxuTm9iZWwvTVxcbk5vYmVsaXN0L01TXFxuTm9ibGUvTVxcbk5vZS9NXFxuTm9lbC9TTVxcbk5vZWxsZS9NXFxuTm9lbWkvTVxcbk5va2lhL01cXG5Ob2xhL01cXG5Ob2xhbi9NXFxuTm9tZS9NXFxuTm9uYS9NXFxuTm9vdGthL01cXG5Ob3JhL01cXG5Ob3JiZXJ0L01cXG5Ob3JiZXJ0by9NXFxuTm9yZGljL01TXFxuTm9yZWVuL01cXG5Ob3Jmb2xrL01cXG5Ob3JpZWdhL01cXG5Ob3JtYS9NXFxuTm9ybWFsL01cXG5Ob3JtYW4vTVNcXG5Ob3JtYW5kL01cXG5Ob3JtYW5keS9NXFxuTm9ycGxhbnQvTVxcbk5vcnJpcy9NXFxuTm9yc2UvTVxcbk5vcnNlbWFuL01cXG5Ob3JzZW1lbi9NXFxuTm9ydGgvTVxcbk5vcnRoYW1wdG9uL01cXG5Ob3J0aGVhc3QvTVNcXG5Ob3J0aGVybmVyL01cXG5Ob3J0aHJvcC9NXFxuTm9ydGhydXAvTVxcbk5vcnRoc1xcbk5vcnRod2VzdC9TTVxcbk5vcnRvbi9NXFxuTm9yd1xcbk5vcndheS9NXFxuTm9yd2VnaWFuL1NNXFxuTm9yd2ljaC9NXFxuTm9zZmVyYXR1L01cXG5Ob3N0cmFkYW11cy9NXFxuTm90dGluZ2hhbS9NXFxuTm91YWtjaG90dC9NXFxuTm91bWVhL01cXG5Ob3YvTVxcbk5vdmEvTVxcbk5vdmFydGlzL01cXG5Ob3ZlbWJlci9NU1xcbk5vdmdvcm9kL01cXG5Ob3ZvY2Fpbi9NU1xcbk5vdm9jYWluZVxcbk5vdm9rdXpuZXRzay9NXFxuTm92b3NpYmlyc2svTVxcbk5veHplbWEvTVxcbk5veWNlL01cXG5Ob3llcy9NXFxuTnAvTVxcbk51YmlhL01cXG5OdWJpYW4vTVxcbk51a3VhbG9mYS9NXFxuTnVtYmVycy9NXFxuTnVuYXZ1dC9NXFxuTnVuZXovTVxcbk51bmtpL01cXG5OdXJlbWJlcmcvTVxcbk51cmV5ZXYvTVxcbk51dHJhU3dlZXQvTVxcbk55UXVpbC9NXFxuTnlhc2EvTVxcbk55ZXJlcmUvTVxcbk8nQnJpZW4vTVxcbk8nQ2FzZXkvTVxcbk8nQ29ubmVsbC9NXFxuTydDb25ub3IvTVxcbk8nRG9ubmVsbC9NXFxuTydIYXJhL01cXG5PJ0hpZ2dpbnMvTVxcbk8nS2VlZmZlL01cXG5PJ05laWwvTVxcbk8nTmVpbGwvTVxcbk8nUm91cmtlL01cXG5PJ1Rvb2xlL01cXG5PL1NNXFxuT0FTL01cXG5PQlxcbk9DUlxcbk9EL1NNXFxuT0VcXG5PRURcXG5PSFxcbk9IU0EvTVxcbk9KXFxuT0svU01ER1xcbk9NQi9NXFxuT05cXG5PUEVDL01cXG5PUlxcbk9TL01cXG5PU0hBL01cXG5PU2VzXFxuT1RcXG5PVEJcXG5PVENcXG5PVE9IXFxuT2FodS9NXFxuT2FrbGFuZC9NXFxuT2FrbGV5L01cXG5PYXRlcy9NXFxuT2F4YWNhL01cXG5PYi9NXFxuT2JhZGlhaC9NXFxuT2JhbWEvTVxcbk9iYW1hY2FyZVxcbk9iZXJsaW4vTVxcbk9iZXJvbi9NXFxuT2NhbGEvTVxcbk9jYW1sL01cXG5PY2NhbS9NXFxuT2NjaWRlbnRcXG5PY2NpZGVudGFsL01TXFxuT2NlYW5pYS9NXFxuT2NlYW5zaWRlXFxuT2NlYW51cy9NXFxuT2Nob2EvTVxcbk9jdC9NXFxuT2N0YXZpYS9NXFxuT2N0YXZpYW4vTVxcbk9jdGF2aW8vTVxcbk9jdG9iZXIvU01cXG5PZGVsbC9NXFxuT2Rlci9NXFxuT2Rlc3NhL01cXG5PZGV0cy9NXFxuT2Rpbi9NXFxuT2Rpcy9NXFxuT2RvbS9NXFxuT2R5c3NldXMvTVxcbk9keXNzZXkvTVxcbk9lZGlwYWwvTVxcbk9lZGlwdXMvTVxcbk9lcnN0ZWQvTVxcbk9mZWxpYS9NXFxuT2ZmZW5iYWNoL01cXG5PZmZpY2VNYXgvTVxcbk9nYm9tb3Noby9NXFxuT2dkZW4vTVxcbk9naWx2eS9NXFxuT2dsZXRob3JwZS9NXFxuT2hpby9NXFxuT2hpb2FuL1NNXFxuT2lzZS9NXFxuT2ppYndhL1NNXFxuT2theWFtYVxcbk9rZWVjaG9iZWUvTVxcbk9rZWZlbm9rZWUvTVxcbk9raG90c2svTVxcbk9raW5hd2EvTVxcbk9raW5hd2FuXFxuT2tsYVxcbk9rbGFob21hL01cXG5Pa2xhaG9tYW4vTVxcbk9rdG9iZXJmZXN0L01cXG5PbGEvTVxcbk9sYWYvTVxcbk9sYWp1d29uL01cXG5PbGF2L01cXG5PbGRlbmJ1cmcvTVxcbk9sZGZpZWxkL01cXG5PbGRzbW9iaWxlL01cXG5PbGR1dmFpL01cXG5PbGVuL01cXG5PbGVuZWsvTVxcbk9sZ2EvTVxcbk9saWdvY2VuZS9NXFxuT2xpbi9NXFxuT2xpdmUvTVJcXG5PbGl2ZXIvTVxcbk9saXZldHRpL01cXG5PbGl2aWEvTVxcbk9saXZpZXIvTVxcbk9sbGllL01cXG5PbG1lYy9NXFxuT2xtc3RlZC9NXFxuT2xzZW4vTVxcbk9sc29uL01cXG5PbHltcGlhL1NNXFxuT2x5bXBpYWQvTVNcXG5PbHltcGlhbi9NU1xcbk9seW1waWMvU01cXG5PbHltcGljcy9NXFxuT2x5bXB1cy9NXFxuT21haGEvTVNcXG5PbWFuL01cXG5PbWFuaS9NU1xcbk9tYXIvTVxcbk9tYXl5YWQvTVxcbk9tZHVybWFuL01cXG5PbW5pcG90ZW50XFxuT21zay9NXFxuT25hc3Npcy9NXFxuT25lYWwvTVxcbk9uZWdhL01cXG5PbmVnaW4vTVxcbk9uZWlkYS9NU1xcbk9uaW9uL01cXG5Pbm8vTVxcbk9ub25kYWdhL01TXFxuT25zYWdlci9NXFxuT250XFxuT250YXJpYW5cXG5PbnRhcmlvL01cXG5Pb3J0L01cXG5PcGFsL01cXG5PcGVsL01cXG5PcGVuT2ZmaWNlL01cXG5PcGhlbGlhL01cXG5PcGhpdWNodXMvTVxcbk9wcGVuaGVpbWVyL01cXG5PcHBvc2l0aW9uXFxuT3ByYWgvTVxcbk9yYS9NXFxuT3JhY2xlL01cXG5PcmFuL01cXG5PcmFuZ2UvTVxcbk9yYW5qZXN0YWQvTVxcbk9yYmlzb24vTVxcbk9yZG92aWNpYW4vTVxcbk9yZS9OXFxuT3JlZ1xcbk9yZWdvbi9NXFxuT3JlZ29uaWFuL1NNXFxuT3JlbS9NXFxuT3Jlby9NXFxuT3Jlc3Rlcy9NXFxuT3JpZW50L01cXG5PcmllbnRhbC9NU1xcbk9yaWVudGFsaXNtXFxuT3Jpbi9NXFxuT3Jpbm9jby9NXFxuT3Jpb24vTVxcbk9yaXlhL01cXG5Pcml6YWJhL01cXG5PcmtuZXkvTVxcbk9ybGFuZG8vTVxcbk9ybGVhbnMvTVxcbk9ybG9uL01TXFxuT3JseS9NXFxuT3JwaGV1cy9NXFxuT3JwaGljL01cXG5PcnIvTVxcbk9ydGVnYS9NXFxuT3J0aG9kb3hcXG5PcnRpei9NXFxuT3J2YWwvTVxcbk9ydmlsbGUvTVxcbk9yd2VsbC9NXFxuT3J3ZWxsaWFuL01cXG5Pcy9NXFxuT3NhZ2UvTVNcXG5Pc2FrYS9NXFxuT3NiZXJ0L01cXG5Pc2Jvcm4vTVxcbk9zYm9ybmUvTVxcbk9zY2FyL01TXFxuT3NjZW9sYS9NXFxuT3Nnb29kL01cXG5Pc2hhd2EvTVxcbk9zaGtvc2gvTVxcbk9zaXJpcy9NXFxuT3Nsby9NXFxuT3NtYW4vTVxcbk9zdHJvZ290aC9NXFxuT3N0d2FsZC9NXFxuT3N2YWxkby9NXFxuT3N3YWxkL01cXG5PdGhlbGxvL01cXG5PdGlzL01cXG5PdHRhd2EvU01cXG5PdHRvL01cXG5PdHRvbWFuL01cXG5PdWFnYWRvdWdvdS9NXFxuT3VpamEvTVNcXG5PdmlkL01cXG5Pd2VuL1NNXFxuT3dlbnMvTVxcbk93ZW5zYm9yby9NXFxuT3hmb3JkL1NNXFxuT3huYXJkL01cXG5PeG9uaWFuL01cXG5PeHVzL01cXG5PeHljb250aW4vTVxcbk96L01cXG5PemFyay9NU1xcbk96YXJrcy9NXFxuT3p5bWFuZGlhcy9NXFxuT3p6aWUvTVxcblAvTU5cXG5QQS9NXFxuUEFDL01cXG5QQVJDL1NcXG5QQVNDQUxcXG5QQlMvTVxcblBCWFxcblBDL1NNXFxuUENCXFxuUENNQ0lBXFxuUENQL01cXG5QRFxcblBERlxcblBEUVxcblBEVFxcblBFXFxuUEVUL01cXG5QRkNcXG5QR1xcblBHUFxcblBIUC9NXFxuUElOXFxuUEonc1xcblBMTy9NXFxuUE0vU01ER1xcblBNUy9NXFxuUE9cXG5QT1cvTVxcblBQXFxuUFBTXFxuUFJcXG5QUkMvTVxcblBST1xcblBTL01cXG5QU1QvTVxcblBUXFxuUFRBL01cXG5QVE9cXG5QVkMvTVxcblBXXFxuUFhcXG5QYS9NXFxuUGFhci9NXFxuUGFibG8vTVxcblBhYmx1bS9NXFxuUGFic3QvTVxcblBhY2UvTVxcblBhY2hlY28vTVxcblBhY2lmaWMvTVxcblBhY2luby9NXFxuUGFja2FyZC9NXFxuUGFkYW5nXFxuUGFkZXJld3NraS9NXFxuUGFkaWxsYS9NXFxuUGFnYW5pbmkvTVxcblBhZ2UvTVxcblBhZ2xpYS9NXFxuUGFobGF2aS9NXFxuUGFpZ2UvTVxcblBhaW5lL01cXG5QYWl1dGUvU01cXG5QYWtpc3Rhbi9NXFxuUGFraXN0YW5pL1NNXFxuUGFsZW1iYW5nL01cXG5QYWxlb2NlbmUvTVxcblBhbGVvZ2VuZS9NXFxuUGFsZW9saXRoaWMvTVxcblBhbGVvem9pYy9NXFxuUGFsZXJtby9NXFxuUGFsZXN0aW5lL01cXG5QYWxlc3Rpbmlhbi9TTVxcblBhbGVzdHJpbmEvTVxcblBhbGV5L01cXG5QYWxpa2lyL01cXG5QYWxpc2FkZXMvTVxcblBhbGxhZGlvL01cXG5QYWxtZGFsZS9NXFxuUGFsbWVyL01cXG5QYWxtZXJzdG9uL01cXG5QYWxtb2xpdmUvTVxcblBhbG15cmEvTVxcblBhbG9tYXIvTVxcblBhbS9NXFxuUGFtZWxhL01cXG5QYW1pcnMvTVxcblBhbXBlcnMvTVxcblBhbi9NXFxuUGFuYW1hL1NNXFxuUGFuYW1hbmlhbi9NU1xcblBhbmFzb25pYy9NXFxuUGFuZG9yYS9NXFxuUGFuZ2FlYS9NXFxuUGFua2h1cnN0L01cXG5QYW5tdW5qb20vTVxcblBhbnN5L01cXG5QYW50YWdydWVsL01cXG5QYW50YWxvb24vTVxcblBhbnRoZW9uL01cXG5QYW56YS9NXFxuUGFyYWNlbHN1cy9NXFxuUGFyYWNsZXRlL01cXG5QYXJhZGlzZVxcblBhcmFndWF5L01cXG5QYXJhZ3VheWFuL01TXFxuUGFyYWx5bXBpYy9TXFxuUGFyYW1hcmliby9NXFxuUGFyYW1vdW50L01cXG5QYXJhbmEvTVxcblBhcmNoZWVzaS9NXFxuUGFyZXRvL01cXG5QYXJpcy9NXFxuUGFyaXNpYW4vTVNcXG5QYXJrL1NNUlxcblBhcmtlci9NXFxuUGFya2Vyc2J1cmcvTVxcblBhcmtpbnNvbi9NXFxuUGFya2luc29uaXNtXFxuUGFya21hbi9NXFxuUGFya3MvTVxcblBhcmxpYW1lbnQvTVxcblBhcm1lbmlkZXNcXG5QYXJtZXNhbi9NU1xcblBhcm5hc3N1cy9NU1xcblBhcm5lbGwvTVxcblBhcnIvTVxcblBhcnJpc2gvTVxcblBhcnNpZmFsL01cXG5QYXJzb25zL01cXG5QYXJ0aGVub24vTVxcblBhcnRoaWEvTVxcblBhc2FkZW5hL01cXG5QYXNjYWdvdWxhL01cXG5QYXNjYWwvU01cXG5QYXNjby9NXFxuUGFzcXVhbGUvTVxcblBhc3Npb24vU01cXG5QYXNzb3Zlci9NU1xcblBhc3Rlcm5hay9NXFxuUGFzdGV1ci9NXFxuUGF0L01cXG5QYXRhZ29uaWEvTVxcblBhdGFnb25pYW4vTVxcblBhdGUvTVxcblBhdGVsL01cXG5QYXRlcnNvbi9NXFxuUGF0bmEvTVxcblBhdHJpY2EvTVxcblBhdHJpY2UvTVxcblBhdHJpY2lhL01cXG5QYXRyaWNrL01cXG5QYXRzeS9NXFxuUGF0dGVyc29uL01cXG5QYXR0aS9NXFxuUGF0dG9uL01cXG5QYXR0eS9NXFxuUGF1bC9HTVxcblBhdWxhL01cXG5QYXVsZXR0ZS9NXFxuUGF1bGkvTVxcblBhdWxpbmUvTVxcblBhdWxpbmcvTVxcblBhdmFyb3R0aS9NXFxuUGF2bG92L01cXG5QYXZsb3ZhL01cXG5QYXZsb3ZpYW4vTVxcblBhd25lZS9TTVxcblBheVBhbC9NXFxuUGF5bmUvTVxcblBiL01cXG5QZC9NXFxuUGVhYm9keS9NXFxuUGVhY2UvTVxcblBlYWxlL01cXG5QZWFybC9NXFxuUGVhcmxpZS9NXFxuUGVhcnNvbi9NXFxuUGVhcnkvTVxcblBlY2hvcmEvTVxcblBlY2svTVxcblBlY2tpbnBhaC9NXFxuUGVjb3MvTVxcblBlZHJvL01cXG5QZWVsL01cXG5QZWcvTVxcblBlZ2FzdXMvTVNcXG5QZWdneS9NXFxuUGVpL01cXG5QZWlwaW5nL01cXG5QZWtpbmcvU01cXG5QZWtpbmdlc2UvU01cXG5QZWxlL01cXG5QZWxlZS9NXFxuUGVsb3Bvbm5lc2UvTVxcblBlbWJyb2tlL01cXG5QZW4vTVxcblBlbmEvTVxcblBlbmRlcmVja2kvTVxcblBlbmVsb3BlL01cXG5QZW5uL01cXG5QZW5uYVxcblBlbm5leS9NXFxuUGVubmluZ3Rvbi9NXFxuUGVubnN5bHZhbmlhL01cXG5QZW5uc3lsdmFuaWFuL01TXFxuUGVubnkvTVxcblBlbm56b2lsL01cXG5QZW5zYWNvbGEvTVxcblBlbnRhZ29uL01cXG5QZW50YXRldWNoL01cXG5QZW50YXgvTVxcblBlbnRlY29zdC9TTVxcblBlbnRlY29zdGFsL01TXFxuUGVudGVjb3N0YWxpc21cXG5QZW50aXVtL1NNXFxuUGVvcmlhL01cXG5QZXBpbi9NXFxuUGVwc2kvTVxcblBlcHlzL01cXG5QZXF1b3QvTVxcblBlcmNoZXJvbi9NXFxuUGVyY2l2YWwvTVxcblBlcmN5L01cXG5QZXJlbG1hbi9NXFxuUGVyZXovTVxcblBlcmljbGVhbi9NXFxuUGVyaWNsZXMvTVxcblBlcmtpbnMvTVxcblBlcmwvU01cXG5QZXJtL01cXG5QZXJtYWxsb3kvTVxcblBlcm1pYW4vTVxcblBlcm5vZC9NXFxuUGVyb24vTVxcblBlcm90L01cXG5QZXJyaWVyL01cXG5QZXJyeS9STVxcblBlcnNlaWQvTVxcblBlcnNlcGhvbmUvTVxcblBlcnNlcG9saXMvTVxcblBlcnNldXMvTVxcblBlcnNoaW5nL01cXG5QZXJzaWEvTVxcblBlcnNpYW4vU01cXG5QZXJ0aC9NXFxuUGVydS9NXFxuUGVydXZpYW4vTVNcXG5QZXNoYXdhci9NXFxuUGV0YWluL01cXG5QZXRhbHVtYS9NXFxuUGV0ZS9STVpcXG5QZXRlci9NXFxuUGV0ZXJzL01OXFxuUGV0ZXJzZW4vTVxcblBldGVyc29uL01cXG5QZXRyYS9NXFxuUGV0cmFyY2gvTVxcblBldHR5L01cXG5QZXVnZW90L01cXG5QZmNcXG5QZml6ZXIvTVxcblBoRC9NXFxuUGhhZWRyYS9NXFxuUGhhZXRob24vTVxcblBoYW5lcm96b2ljL01cXG5QaGFyYW9oL01cXG5QaGFyYW9oc1xcblBoYXJpc2FpY1xcblBoYXJpc2FpY2FsXFxuUGhhcmlzZWUvTVNcXG5QaGVrZGEvTVxcblBoZWxwcy9NXFxuUGhpZGlhcy9NXFxuUGhpbC9NWVxcblBoaWxhZGVscGhpYS9NXFxuUGhpbGJ5L01cXG5QaGlsZW1vbi9NXFxuUGhpbGlwL01TXFxuUGhpbGlwcGUvTVxcblBoaWxpcHBpYW5zL01cXG5QaGlsaXBwaW5lL1NNXFxuUGhpbGlwcGluZXMvTVxcblBoaWxpcHMvTVxcblBoaWxpc3RpbmUvTVxcblBoaWxsaXAvU01cXG5QaGlsbGlwYS9NXFxuUGhpbGxpcHMvTVxcblBoaWxseS9NXFxuUGhpcHBzL01cXG5QaG9ib3MvTVxcblBob2ViZS9NXFxuUGhvZW5pY2lhL01cXG5QaG9lbmljaWFuL1NNXFxuUGhvZW5peC9NXFxuUGhvdG9zdGF0L01TXFxuUGhvdG9zdGF0dGVkXFxuUGhvdG9zdGF0dGluZ1xcblBocnlnaWEvTVxcblBoeWxsaXMvTVxcblBpYWYvTVxcblBpYWdldC9NXFxuUGlhbm9sYS9NXFxuUGljYXNzby9NXFxuUGljY2FkaWxseS9NXFxuUGlja2VyaW5nL01cXG5QaWNrZXR0L01cXG5QaWNrZm9yZC9NXFxuUGlja3dpY2svTVxcblBpY3QvTVxcblBpZWRtb250L01cXG5QaWVyY2UvTVxcblBpZXJyZS9NXFxuUGllcnJvdC9NXFxuUGlrZS9NXFxuUGlsYXRlL01TXFxuUGlsYXRlcy9NXFxuUGlsY29tYXlvL01cXG5QaWxncmltL1NNXFxuUGlsbHNidXJ5L01cXG5QaW5hdHViby9NXFxuUGluY3VzL01cXG5QaW5kYXIvTVxcblBpbmtlcnRvbi9NXFxuUGlub2NjaGlvL01cXG5QaW5vY2hldC9NXFxuUGludGVyL01cXG5QaW55aW5cXG5QaXBwaW4vTVxcblBpcmFldXMvTVxcblBpcmFuZGVsbG8vTVxcblBpc2EvTVxcblBpc2Nlcy9NXFxuUGlzaXN0cmF0dXMvTVxcblBpc3Nhcm8vTVxcblBpdGNhaXJuL01cXG5QaXR0L1NNXFxuUGl0dG1hbi9NXFxuUGl0dHMvTVxcblBpdHRzYnVyZ2gvTVxcblBpdHRzZmllbGQvTVxcblBpdXMvTVxcblBpemFycm8vTVxcblBrd3lcXG5QbFxcblBsYW5jay9NXFxuUGxhbm9cXG5QbGFudGFnZW5ldC9NXFxuUGxhc3RpY2luZS9NXFxuUGxhdGFlYS9NXFxuUGxhdGgvTVxcblBsYXRvL01cXG5QbGF0b25pY1xcblBsYXRvbmlzbS9NXFxuUGxhdG9uaXN0L01cXG5QbGF0dGUvTVxcblBsYXV0dXMvTVxcblBsYXlTdGF0aW9uL01cXG5QbGF5Ym95L01cXG5QbGF5dGV4L01cXG5QbGVpYWRlcy9NXFxuUGxlaXN0b2NlbmUvTVxcblBsZXhpZ2xhcy9NU1xcblBsaW55L01cXG5QbGlvY2VuZS9TTVxcblBsdXRhcmNoL01cXG5QbHV0by9NXFxuUGx5bW91dGgvTVxcblBtL01cXG5Qby9NXFxuUG9jYWhvbnRhcy9NXFxuUG9jYXRlbGxvL01cXG5Qb2Nvbm8vU01cXG5Qb2Nvbm9zL01cXG5Qb2Rnb3JpY2EvTVxcblBvZGhvcmV0ei9NXFxuUG9kdW5rL01cXG5Qb2UvTVxcblBvZ28vTVxcblBvaW5jYXJlL01cXG5Qb2lyZXQvTVxcblBvaXJvdC9NXFxuUG9pc3Nvbi9NXFxuUG9pdGllci9NXFxuUG9rZW1vbi9NXFxuUG9sL01ZXFxuUG9sYW5kL01cXG5Qb2xhbnNraS9NXFxuUG9sYXJpcy9NXFxuUG9sYXJvaWQvTVNcXG5Qb2xlL1NNXFxuUG9saXNoL01cXG5Qb2xpdGJ1cm8vTVxcblBvbGsvTVxcblBvbGxhcmQvTVxcblBvbGxvY2svTVxcblBvbGx1eC9NXFxuUG9sbHkvTVxcblBvbGx5YW5uYS9NXFxuUG9sby9NXFxuUG9sdGF2YS9NXFxuUG9seWh5bW5pYS9NXFxuUG9seW5lc2lhL01cXG5Qb2x5bmVzaWFuL01TXFxuUG9seXBoZW11cy9NXFxuUG9tZXJhbmlhL01cXG5Qb21lcmFuaWFuL01cXG5Qb21vbmEvTVxcblBvbXBhZG91ci9NXFxuUG9tcGVpYW5cXG5Qb21wZWlpL01cXG5Qb21wZXkvTVxcblBvbmNlL01cXG5Qb250Y2hhcnRyYWluL01cXG5Qb250aWFjL01cXG5Qb250aWFuYWsvTVxcblBvb2gvTVxcblBvb2xlL01cXG5Qb29uYS9NXFxuUG9wZS9NXFxuUG9wZXllL01cXG5Qb3BvY2F0ZXBldGwvTVxcblBvcHBlci9NXFxuUG9wcGlucy9NXFxuUG9wc2ljbGUvTVxcblBvcmZpcmlvL01cXG5Qb3JyaW1hL01cXG5Qb3JzY2hlL01cXG5Qb3J0L01SXFxuUG9ydGVyL01cXG5Qb3J0ZXJ2aWxsZS9NXFxuUG9ydGlhL01cXG5Qb3J0bGFuZC9NXFxuUG9ydG8vTVxcblBvcnRzbW91dGgvTVxcblBvcnR1Z2FsL01cXG5Qb3J0dWd1ZXNlL01cXG5Qb3NlaWRvbi9NXFxuUG9zdC9NXFxuUG9zdGdyZVNRTC9NXFxuUG90ZW1raW4vTVxcblBvdG9tYWMvTVxcblBvdHNkYW0vTVxcblBvdHRhd2F0b21pZS9NXFxuUG90dGVyL01cXG5Qb3R0cy9NXFxuUG90dHN0b3duL01cXG5Qb3VnaGtlZXBzaWUvTVxcblBvdW5kL01cXG5Qb3Vzc2luL01cXG5Qb3dlbGwvTVxcblBvd2VyUEMvTVxcblBvd2VyUG9pbnQvTVxcblBvd2Vycy9NXFxuUG93aGF0YW4vTVxcblBvem5hbi9NXFxuUHIvTVxcblByYWRhL01cXG5QcmFkby9NXFxuUHJhZXRvcmlhbi9NXFxuUHJhZ3VlL01cXG5QcmFpYS9NXFxuUHJha3JpdC9NXFxuUHJhdGNoZXR0L01cXG5QcmF0dC9NXFxuUHJhdmRhL01cXG5QcmF4aXRlbGVzL01cXG5QcmVha25lc3MvTVxcblByZWNhbWJyaWFuL01cXG5QcmVtaW5nZXIvTVxcblByZW15c2xpZC9NXFxuUHJlbnNhL01cXG5QcmVudGljZS9NXFxuUHJlc1xcblByZXNieXRlcmlhbi9TTVxcblByZXNieXRlcmlhbmlzbS9NU1xcblByZXNjb3R0L01cXG5QcmVzbGV5L01cXG5QcmVzdG9uL01cXG5QcmV0b3JpYS9NXFxuUHJpYW0vTVxcblByaWJpbG9mL01cXG5QcmljZS9NXFxuUHJpY2VsaW5lL01cXG5Qcmllc3RsZXkvTVxcblByaW5jZS9NXFxuUHJpbmNldG9uL01cXG5QcmluY2lwZS9NXFxuUHJpc2NpbGxhL01cXG5Qcml1cy9NXFxuUHJpdmF0ZVxcblByb2NydXN0ZWFuL01cXG5Qcm9jcnVzdGVzL01cXG5Qcm9jdGVyL01cXG5Qcm9jeW9uL01cXG5Qcm9mXFxuUHJvaGliaXRpb25cXG5Qcm9rb2ZpZXYvTVxcblByb21ldGhlYW4vTVxcblByb21ldGhldXMvTVxcblByb3BoZXRzXFxuUHJvc2VycGluYS9NXFxuUHJvc2VycGluZS9NXFxuUHJvdGFnb3Jhcy9NXFxuUHJvdGVyb3pvaWMvTVxcblByb3Rlc3RhbnQvTVNcXG5Qcm90ZXN0YW50aXNtL1NNXFxuUHJvdGV1cy9NXFxuUHJvdWRob24vTVxcblByb3VzdC9NXFxuUHJvdmVuY2FsL01TXFxuUHJvdmVuY2UvTVxcblByb3ZlcmJzXFxuUHJvdmlkZW5jZS9TTVxcblByb3ZvL01cXG5Qcm96YWMvTVNcXG5QcnVkZW5jZS9NXFxuUHJ1ZGVudGlhbC9NXFxuUHJ1aXR0L01cXG5QcnVzc2lhL01cXG5QcnVzc2lhbi9NU1xcblBydXQvTVxcblByeW9yL01cXG5Qc2FsbXMvTVxcblBzYWx0ZXIvTVNcXG5Qc3ljaGUvTVxcblB0L01cXG5QdGFoL01cXG5QdG9sZW1haWMvTVxcblB0b2xlbXkvU01cXG5QdS9NXFxuUHVjY2luaS9NXFxuUHVjay9NXFxuUHVja2V0dC9NXFxuUHVlYmxhL01cXG5QdWVibG8vTVxcblB1ZXJ0b1xcblB1Z2V0L01cXG5QdWdoL01cXG5QdWxhc2tpL01cXG5QdWxpdHplci9NXFxuUHVsbG1hbi9NU1xcblB1bmNoL01cXG5QdW5pYy9NXFxuUHVuamFiL01cXG5QdW5qYWJpL01cXG5QdXJhbmEvTVxcblB1cmNlbGwvTVxcblB1cmR1ZS9NXFxuUHVyaW0vTVNcXG5QdXJpbmEvTVxcblB1cml0YW4vTVxcblB1cml0YW5pc20vTVNcXG5QdXJ1cy9NXFxuUHVzYW4vTVxcblB1c2V5L01cXG5QdXNoa2luL01cXG5QdXNodHUvTVxcblB1dGluL01cXG5QdXRuYW0vTVxcblB1em8vTVxcblB2dFxcblB5VG9yY2gvTVxcblB5Z21hbGlvbi9NXFxuUHlnbXkvU01cXG5QeWxlL01cXG5QeW0vTVxcblB5bmNob24vTVxcblB5b25neWFuZy9NXFxuUHlvdHIvTVxcblB5cmVuZWVzL01cXG5QeXJleC9NU1xcblB5cnJoaWMvTVxcblB5dGhhZ29yYXMvTVxcblB5dGhhZ29yZWFuL01cXG5QeXRoaWFzL01cXG5QeXRob24vTVxcblFcXG5RQVxcblFCXFxuUUNcXG5RRURcXG5RTVxcblFXRVJUWVxcblFhZGRhZmkvTVxcblFhbnRhcy9NXFxuUWF0YXIvTVxcblFhdGFyaS9NU1xcblFpbmdkYW8vTVxcblFpbmdoYWkvTVxcblFpcWloYXIvTVxcblFvbS9NXFxuUXVhYWx1ZGUvTVxcblF1YWtlci9NU1xcblF1YWtlcmlzbS9TTVxcblF1YWxjb21tL01cXG5RdWFvYXIvTVxcblF1YXNpbW9kby9NXFxuUXVhdGVybmFyeS9NXFxuUXVheWxlL01cXG5RdWVcXG5RdWViZWMvTVxcblF1ZWJlY29pcy9NXFxuUXVlY2h1YS9NXFxuUXVlZW4vTVNcXG5RdWVlbnMvTVxcblF1ZWVuc2xhbmQvTVxcblF1ZW50aW4vTVxcblF1ZXR6YWxjb2F0bC9NXFxuUXVlem9uL01cXG5RdWluY3kvTVxcblF1aW5uL01cXG5RdWludGlsaWFuL01cXG5RdWludG9uL01cXG5RdWlyaW5hbC9NXFxuUXVpc2xpbmcvTVxcblF1aXRvL01cXG5RdWl4b3RlL01cXG5RdWl4b3Rpc20vTVxcblF1bXJhbi9NXFxuUXVvbnNldC9NXFxuUXVyYW5cXG5RdXJhbmljXFxuUi9NXFxuUkFGL01cXG5SQU0vU01cXG5SQklcXG5SQ1xcblJDQS9NXFxuUkNNUFxcblJEXFxuUkRBXFxuUkRTL01cXG5SRUlUXFxuUkVNL1NNXFxuUkZcXG5SRkMvU1xcblJGRFxcblJJXFxuUklGXFxuUklQXFxuUklTQ1xcblJOL01cXG5STkEvTVxcblJPRkxcXG5ST00vTVxcblJPVEMvTVxcblJQXFxuUlJcXG5SU0ZTUlxcblJTSVxcblJTVlxcblJTVlBcXG5SVEZNXFxuUlYvU01cXG5SYS9NXFxuUmFiYXQvTVxcblJhYmVsYWlzL01cXG5SYWJlbGFpc2lhbi9NXFxuUmFiaW4vTVxcblJhY2hhZWwvTVxcblJhY2hlbC9NXFxuUmFjaGVsbGUvTVxcblJhY2htYW5pbm9mZi9NXFxuUmFjaW5lL01cXG5SYWRjbGlmZi9NXFxuUmFkY2xpZmZlL01cXG5SYWUvTVxcblJhZmFlbC9NXFxuUmFmZmxlcy9NXFxuUmFnbmFyb2svTVxcblJhaW5pZXIvTVxcblJhbGVpZ2gvTVxcblJhbHBoL01cXG5SYW1hL01cXG5SYW1hZGEvTVxcblJhbWFkYW4vTVNcXG5SYW1ha3Jpc2huYS9NXFxuUmFtYW51amFuL01cXG5SYW1heWFuYS9NXFxuUmFtYm8vTVxcblJhbWlyZXovTVxcblJhbWlyby9NXFxuUmFtb24vTVxcblJhbW9uYS9NXFxuUmFtb3MvTVxcblJhbXNheS9NXFxuUmFtc2VzL01cXG5SYW1zZXkvTVxcblJhbmQvTVxcblJhbmRhbC9NXFxuUmFuZGFsbC9NXFxuUmFuZGVsbC9NXFxuUmFuZGkvTVxcblJhbmRvbHBoL01cXG5SYW5keS9NXFxuUmFuZ29vbi9NXFxuUmFua2luL01cXG5SYW5raW5lL01cXG5SYW91bC9NXFxuUmFwaGFlbC9NXFxuUmFwcGFwb3J0L01cXG5SYXB1bnplbC9NXFxuUmFxdWVsL01cXG5SYXNhbGdldGhpL01cXG5SYXNhbGhhZ3VlL01cXG5SYXNtdXNzZW4vTVxcblJhc3B1dGluL01cXG5SYXN0YVxcblJhc3RhYmFuL01cXG5SYXN0YWZhcmlhbi9NU1xcblJhc3RhZmFyaWFuaXNtXFxuUmF0aGVyL01cXG5SYXRsaWZmL01cXG5SYXVsL01cXG5SYXZlbC9NXFxuUmF3YWxwaW5kaS9NXFxuUmF5L01cXG5SYXlCYW4vTVxcblJheWJ1cm4vTVxcblJheWxlaWdoL01cXG5SYXltb25kL01cXG5SYXltdW5kby9NXFxuUmIvTVxcblJkXFxuUmUvTVxcblJlYWRpbmcvTVxcblJlYWdhbi9NXFxuUmVhZ2Fub21pY3MvTVxcblJlYWx0b3IvTVxcblJlYXNvbmVyL01cXG5SZWJhL01cXG5SZWJla2FoL01cXG5SZWNpZmUvTVxcblJlY29uc3RydWN0aW9uL01cXG5SZWRkaW5nL01cXG5SZWRlZW1lci9NXFxuUmVkZm9yZC9NXFxuUmVkZ3JhdmUvTVxcblJlZGlzL01cXG5SZWRtb25kL01cXG5SZWRzaGlmdC9NXFxuUmVlYm9rL01cXG5SZWVkL01cXG5SZWVzZS9NXFxuUmVldmVzL01cXG5SZWZvcm1hdGlvbi9NU1xcblJlZnVnaW8vTVxcblJlZ2dpZS9NXFxuUmVnaW5hL01cXG5SZWdpbmFlL01cXG5SZWdpbmFsZC9NXFxuUmVnb3IvTVxcblJlZ3VsdXMvTVxcblJlaG5xdWlzdC9NXFxuUmVpY2gvTVxcblJlaWNoc3RhZydzXFxuUmVpZC9NXFxuUmVpbGx5L01cXG5SZWluYWxkby9NXFxuUmVpbmhhcmR0L01cXG5SZWluaG9sZC9NXFxuUmVtYXJxdWUvTVxcblJlbWJyYW5kdC9NXFxuUmVtaW5ndG9uL01cXG5SZW11cy9NXFxuUmVuYS9NXFxuUmVuYWlzc2FuY2UvU01cXG5SZW5hc2NlbmNlXFxuUmVuYXVsdC9NXFxuUmVuZS9NXFxuUmVuZWUvTVxcblJlbm8vTVxcblJlbm9pci9NXFxuUmVwXFxuUmVwcmVzZW50YXRpdmVcXG5SZXB1YmxpY2FuL1NNXFxuUmVwdWJsaWNhbmlzbVxcblJlcXVpZW0vTVNcXG5SZXNpc3RhbmNlXFxuUmVzdG9yYXRpb24vTVxcblJlc3VycmVjdGlvblxcblJldWJlbi9NXFxuUmV1bmlvbi9NXFxuUmV1dGVycy9NXFxuUmV1dGhlci9NXFxuUmV2XFxuUmV2YS9NXFxuUmV2ZWxhdGlvbi9TTVxcblJldmVsYXRpb25zL01cXG5SZXZlcmUvTVxcblJldmVyZW5kL01cXG5SZXZsb24vTVxcblJleC9NXFxuUmV5ZXMvTVxcblJleWtqYXZpay9NXFxuUmV5bmEvTVxcblJleW5hbGRvL01cXG5SZXlub2xkcy9NXFxuUmYvTVxcblJoL01cXG5SaGVhL01cXG5SaGVlL01cXG5SaGVpbmdhdS9NXFxuUmhlbmlzaC9NXFxuUmhpYW5ub24vTVxcblJoaW5lL01cXG5SaGluZWxhbmQvTVxcblJob2RhL01cXG5SaG9kZS9TXFxuUmhvZGVzL01cXG5SaG9kZXNpYS9NXFxuUmhvZGVzaWFuXFxuUmhvbmRhL01cXG5SaG9uZS9NXFxuUmliYmVudHJvcC9NXFxuUmljYXJkby9NXFxuUmljZS9NXFxuUmljaC9NXFxuUmljaGFyZC9NU1xcblJpY2hhcmRzL01cXG5SaWNoYXJkc29uL01cXG5SaWNoZWxpZXUvTVxcblJpY2hpZS9NXFxuUmljaG1vbmQvTVxcblJpY2h0ZXIvTVxcblJpY2h0aG9mZW4vTVxcblJpY2svTVxcblJpY2tlbmJhY2tlci9NXFxuUmlja2V5L01cXG5SaWNraWUvTVxcblJpY2tvdmVyL01cXG5SaWNreS9NXFxuUmljby9NXFxuUmlkZGxlL01cXG5SaWRlL01cXG5SaWVmZW5zdGFobC9NXFxuUmllbC9NXFxuUmllbWFubi9NXFxuUmllc2xpbmcvTVNcXG5SaWdhL01cXG5SaWdlbC9NXFxuUmlnZ3MvTVxcblJpZ2h0XFxuUmlnb2JlcnRvL01cXG5SaWdvbGV0dG8vTVxcblJpbGV5L01cXG5SaWxrZS9NXFxuUmltYmF1ZC9NXFxuUmluZ2xpbmcvTVxcblJpbmdvL01cXG5SaW8vU01cXG5SaW9zL01cXG5SaXBsZXkvTVxcblJpc29yZ2ltZW50by9NXFxuUml0YS9NXFxuUml0YWxpbi9NXFxuUml0ei9NXFxuUml2YXMvTVxcblJpdmVyYS9NXFxuUml2ZXJzL01cXG5SaXZlcnNpZGUvTVxcblJpdmllcmEvTVNcXG5SaXlhZGgvTVxcblJpemFsL01cXG5Sbi9NXFxuUm9hY2gvTVxcblJvYW5va2UvTVxcblJvYi9NXFxuUm9iYmllL01cXG5Sb2JiaW4vTVNcXG5Sb2JiaW5zL01cXG5Sb2JieS9NXFxuUm9iZXJzb24vTVxcblJvYmVydC9NU1xcblJvYmVydGEvTVxcblJvYmVydG8vTVxcblJvYmVydHMvTVxcblJvYmVydHNvbi9NXFxuUm9iZXNvbi9NXFxuUm9iZXNwaWVycmUvTVxcblJvYmluL01cXG5Sb2JpbnNvbi9NXFxuUm9iaXR1c3Npbi9NXFxuUm9ibGVzL01cXG5Sb2Jzb24vTVxcblJvYnQvTVxcblJvYnluL01cXG5Sb2Njby9NXFxuUm9jaGEvTVxcblJvY2hhbWJlYXUvTVxcblJvY2hlL01cXG5Sb2NoZWxsZS9NXFxuUm9jaGVzdGVyL01cXG5Sb2NrL01cXG5Sb2NrZWZlbGxlci9NXFxuUm9ja2ZvcmQvTVxcblJvY2tpZXMvTVxcblJvY2tuZS9NXFxuUm9ja3dlbGwvTVxcblJvY2t5L1NNXFxuUm9kL01cXG5Sb2RkZW5iZXJyeS9NXFxuUm9kZXJpY2svTVxcblJvZGdlci9NU1xcblJvZGdlcnMvTVxcblJvZGluL01cXG5Sb2RuZXkvTVxcblJvZG9sZm8vTVxcblJvZHJpY2svTVxcblJvZHJpZ28vTVxcblJvZHJpZ3Vlei9NXFxuUm9kcmlxdWV6L01cXG5Sb2VnL01cXG5Sb2VudGdlblxcblJvZ2VsaW8vTVxcblJvZ2VyL01TXFxuUm9nZXJzL01cXG5Sb2dldC9NXFxuUm9qYXMvTVxcblJva3UvTVxcblJvbGFpZHMvTVxcblJvbGFuZC9NXFxuUm9sYW5kby9NXFxuUm9sZXgvTVxcblJvbGxhbmQvTVxcblJvbGxlcmJsYWRlL01cXG5Sb2xsaW5zL01cXG5Sb2xvZGV4L01cXG5Sb2x2YWFnL01cXG5Sb21cXG5Sb21hbi9NU1xcblJvbWFuZXNxdWUvTVNcXG5Sb21hbmlhL01cXG5Sb21hbmlhbi9NU1xcblJvbWFuby9NXFxuUm9tYW5vdi9NXFxuUm9tYW5zL01cXG5Sb21hbnNoL01cXG5Sb21hbnRpY2lzbVxcblJvbWFueS9TTVxcblJvbWUvU01cXG5Sb21lby9NXFxuUm9tZXJvL01cXG5Sb21tZWwvTVxcblJvbW5leS9NXFxuUm9tdWx1cy9NXFxuUm9uL01cXG5Sb25hbGQvTVxcblJvbmRhL01cXG5Sb25uaWUvTVxcblJvbm55L01cXG5Sb25zdGFkdC9NXFxuUm9udGdlblxcblJvb25leS9NXFxuUm9vc2V2ZWx0L01cXG5Sb290L01cXG5Sb3F1ZWZvcnQvU01cXG5Sb3JzY2hhY2gvTVxcblJvcnkvTVxcblJvc2EvTVxcblJvc2FsZXMvTVxcblJvc2FsaWUvTVxcblJvc2FsaW5kL01cXG5Sb3NhbGluZGEvTVxcblJvc2FseW4vTVxcblJvc2FubmEvTVxcblJvc2FubmUvTVxcblJvc2FyaW8vTVxcblJvc2NvZS9NXFxuUm9zZS9NXFxuUm9zZWFubi9NXFxuUm9zZWF1L01cXG5Sb3NlY3JhbnMvTVxcblJvc2VsbGEvTVxcblJvc2VtYXJpZS9NXFxuUm9zZW1hcnkvTVxcblJvc2VuYmVyZy9NXFxuUm9zZW5kby9NXFxuUm9zZW56d2VpZy9NXFxuUm9zZXR0YS9NXFxuUm9zaWNydWNpYW4vTVxcblJvc2llL01cXG5Sb3NseW4vTVxcblJvc3MvTVxcblJvc3NldHRpL01cXG5Sb3NzaW5pL01cXG5Sb3N0YW5kL01cXG5Sb3N0b3YvTVxcblJvc3Ryb3BvdmljaC9NXFxuUm9zd2VsbC9NXFxuUm90YXJpYW4vTVxcblJvdGgvTVxcblJvdGhrby9NXFxuUm90aHNjaGlsZC9NXFxuUm90dGVyZGFtL01cXG5Sb3R0d2VpbGVyL01cXG5Sb3VhdWx0L01cXG5Sb3Vya2UvTVxcblJvdXNzZWF1L01cXG5Sb3ZlL1JNXFxuUm92ZXIvTVxcblJvd2UvTVxcblJvd2VuYS9NXFxuUm93bGFuZC9NXFxuUm93bGluZy9NXFxuUm94YW5uZS9NXFxuUm94aWUvTVxcblJveHkvTVxcblJveS9NXFxuUm95YWwvTVxcblJveWNlL01cXG5Sb3plbGxlL01cXG5SdGVcXG5SdS9NSFxcblJ1YmFpeWF0L01cXG5SdWJiZXJtYWlkL01cXG5SdWJlbi9TTVxcblJ1YmVucy9NXFxuUnViaWNvbi9NU1xcblJ1YmlrL01cXG5SdWJpbi9NXFxuUnViaW5zdGVpbi9NXFxuUnVieS9NXFxuUnVjaGJhaC9NXFxuUnVkb2xmL01cXG5SdWRvbHBoL01cXG5SdWR5L01cXG5SdWR5YXJkL01cXG5SdWZ1cy9NXFxuUnVoci9NXFxuUnVpei9NXFxuUnVrZXlzZXIvTVxcblJ1bXBlbHN0aWx0c2tpbi9NXFxuUnVtc2ZlbGQvTVxcblJ1bm55bWVkZS9NXFxuUnVueW9uL01cXG5SdXBlcnQvTVxcblJ1c2gvTVxcblJ1c2hkaWUvTVxcblJ1c2htb3JlL01cXG5SdXNraW4vTVxcblJ1c3MvTVxcblJ1c3NlbC9NXFxuUnVzc2VsbC9NXFxuUnVzc2lhL01cXG5SdXNzaWFuL1NNXFxuUnVzc28vTVxcblJ1c3RiZWx0L01cXG5SdXN0eS9NXFxuUnV0YW4vTVxcblJ1dGdlcnMvTVxcblJ1dGgvTVxcblJ1dGhlcmZvcmQvTVxcblJ1dGhpZS9NXFxuUnV0bGVkZ2UvTVxcblJ3YW5kYS9NU1xcblJ3YW5kYW4vU01cXG5Sd3lcXG5SeFxcblJ5XFxuUnlhbi9NXFxuUnlkYmVyZy9NXFxuUnlkZXIvTVxcblJ5dWt5dS9NXFxuUy9NTlxcblNBXFxuU0FDXFxuU0FMVC9NXFxuU0FNL01cXG5TQVAvTVxcblNBUlMvTVxcblNBU0VcXG5TQVRcXG5TQkFcXG5TQy9NXFxuU0NTSS9NXFxuU0RcXG5TRElcXG5TRS9NXFxuU0VBVE9cXG5TRUMvTVxcblNGXFxuU0dNTC9NXFxuU0lEUy9NXFxuU0pcXG5TSldcXG5TS1xcblNMUlxcblNPL1NcXG5TT0IvTVxcblNPUC9NXFxuU09TL01cXG5TT1Nlc1xcblNQQ0FcXG5TUEZcXG5TUUxcXG5TUUxpdGUvTVxcblNST1xcblNTXFxuU1NBXFxuU1NFL01cXG5TU1NcXG5TU1RcXG5TU1cvTVxcblNUXFxuU1REXFxuU1RPTFxcblNVU0UvTVxcblNVVlxcblNWTi9NXFxuU1cvTVxcblNXQUtcXG5TV0FUXFxuU2FhYi9NXFxuU2Fhci9NXFxuU2FhcmluZW4vTVxcblNhYXRjaGkvTVxcblNhYmJhdGgvTVxcblNhYmJhdGhzXFxuU2FiaWsvTVxcblNhYmluL01cXG5TYWJpbmEvTVxcblNhYmluZS9NXFxuU2FicmUvTVxcblNhYnJpbmEvTVxcblNhY2FqYXdlYS9NXFxuU2FjY28vTVxcblNhY2hzL01cXG5TYWNyYW1lbnRvL01cXG5TYWRhdC9NXFxuU2FkZGFtL01cXG5TYWRkdWNlZS9NXFxuU2FkZS9NXFxuU2FkaWUvTVxcblNhZHIvTVxcblNhZmF2aWQvTVxcblNhZmV3YXkvTVxcblNhZ2FuL01cXG5TYWdpbmF3L01cXG5TYWdpdHRhcml1cy9NU1xcblNhaGFyYS9NXFxuU2FoYXJhbi9NXFxuU2FoZWwvTVxcblNhaWdvbi9NXFxuU2FpcGgvTVxcblNha2FpL01cXG5TYWtoYS9NXFxuU2FraGFsaW4vTVxcblNha2hhcm92L01cXG5TYWtpL01cXG5TYWtzL01cXG5TYWwvTVlcXG5TYWxhZGluL01cXG5TYWxhZG8vTVxcblNhbGFtaXMvTVxcblNhbGFzL01cXG5TYWxhemFyL01cXG5TYWxlbS9NXFxuU2FsZXJuby9NXFxuU2FsZXNmb3JjZS9NXFxuU2FsaW5hcy9NXFxuU2FsaW5nZXIvTVxcblNhbGlzYnVyeS9NXFxuU2FsaXNoL01cXG5TYWxrL01cXG5TYWxsaWUvTVxcblNhbGx1c3QvTVxcblNhbGx5L01cXG5TYWxvbWUvTVxcblNhbG9uaWthL01cXG5TYWx0b24vTVxcblNhbHZhZG9yL01cXG5TYWx2YWRvcmFuL1NNXFxuU2FsdmFkb3JlYW4vTVNcXG5TYWx2YWRvcmlhbi9NU1xcblNhbHZhdG9yZS9NXFxuU2Fsd2Vlbi9NXFxuU2FseXV0L01cXG5TYW0vTVxcblNhbWFudGhhL01cXG5TYW1hci9NXFxuU2FtYXJhL01cXG5TYW1hcml0YW4vTVNcXG5TYW1hcmthbmQvTVxcblNhbW1pZS9NXFxuU2FtbXkvTVxcblNhbW9hL01cXG5TYW1vYW4vU01cXG5TYW1vc2V0L01cXG5TYW1veWVkL01cXG5TYW1wc29uL01cXG5TYW1zb24vTVxcblNhbXNvbml0ZS9NXFxuU2Ftc3VuZy9NXFxuU2FtdWVsL01cXG5TYW11ZWxzb24vTVxcblNhbidhXFxuU2FuL01cXG5TYW5hL01cXG5TYW5jaGV6L01cXG5TYW5jaG8vTVxcblNhbmQvWk1cXG5TYW5kYnVyZy9NXFxuU2FuZGVycy9NXFxuU2FuZGluaXN0YS9NXFxuU2FuZG92YWwvTVxcblNhbmRyYS9NXFxuU2FuZHkvTVxcblNhbmZvcmQvTVxcblNhbmZvcml6ZWQvTVxcblNhbmcvTVJcXG5TYW5nZXIvTVxcblNhbmhlZHJpbi9NXFxuU2Fua2EvTVxcblNhbmthcmEvTVxcblNhbnNrcml0L01cXG5TYW50YS9NXFxuU2FudGFuYS9NXFxuU2FudGF5YW5hL01cXG5TYW50ZXJpYS9NXFxuU2FudGlhZ28vTVxcblNhbnRvcy9NXFxuU2FwcGhvL01cXG5TYXBwb3JvL01cXG5TYXJhL01cXG5TYXJhY2VuL01TXFxuU2FyYWdvc3NhL01cXG5TYXJhaC9NXFxuU2FyYWpldm8vTVxcblNhcmFuL01cXG5TYXJhc290YS9NXFxuU2FyYXRvdi9NXFxuU2FyYXdhay9NXFxuU2FyZGluaWEvTVxcblNhcmdhc3NvL01cXG5TYXJnZW50L01cXG5TYXJnb24vTVxcblNhcm5vZmYvTVxcblNhcm95YW4vTVxcblNhcnRvL01cXG5TYXJ0cmUvTVxcblNhc2hhL01cXG5TYXNrXFxuU2Fza2F0Y2hld2FuL01cXG5TYXNrYXRvb24vTVxcblNhc3F1YXRjaC9NU1xcblNhc3Nhbmlhbi9NXFxuU2Fzc29vbi9NXFxuU2F0L01cXG5TYXRhbi9NXFxuU2F0YW5pc20vTVxcblNhdGFuaXN0L01cXG5TYXR1cmRheS9NU1xcblNhdHVybi9NXFxuU2F0dXJuYWxpYS9NXFxuU2F1ZGkvTVNcXG5TYXVsL01cXG5TYXVuZGVycy9NXFxuU2F1bmRyYS9NXFxuU2F1c3N1cmUvTVxcblNhdXRlcm5lc1xcblNhdmFnZS9NXFxuU2F2YW5uYWgvTVxcblNhdmlvci9NXFxuU2F2b25hcm9sYS9NXFxuU2F2b3kvTVxcblNhdm95YXJkL01cXG5TYXd5ZXIvTVxcblNheG9uL01TXFxuU2F4b255L01cXG5TYXllcnMvTVxcblNiL01cXG5TYy9NXFxuU2NhbGEvTVxcblNjYW5cXG5TY2FuZGluYXZpYS9NXFxuU2NhbmRpbmF2aWFuL01TXFxuU2NhcmFtb3VjaC9NXFxuU2NhcmJvcm91Z2gvTVxcblNjYXJsYXR0aS9NXFxuU2NoZWF0L01cXG5TY2hlZGFyL01cXG5TY2hlaGVyYXphZGUvTVxcblNjaGVsbGluZy9NXFxuU2NoZW5lY3RhZHkvTVxcblNjaGlhcGFyZWxsaS9NXFxuU2NoaWNrL01cXG5TY2hpbGxlci9NXFxuU2NoaW5kbGVyL01cXG5TY2hsZXNpbmdlci9NXFxuU2NobGllbWFubi9NXFxuU2NobGl0ei9NXFxuU2NobG9zcy9NXFxuU2NobWlkdC9NXFxuU2NobmFiZWwvTVxcblNjaG5hdXplci9NXFxuU2NobmVpZGVyL01cXG5TY2hvZW5iZXJnL01cXG5TY2hvcGVuaGF1ZXIvTVxcblNjaHJpZWZmZXIvTVxcblNjaHJvZGluZ2VyL01cXG5TY2hyb2VkZXIvTVxcblNjaHViZXJ0L01cXG5TY2h1bHR6L01cXG5TY2h1bHovTVxcblNjaHVtYW5uL01cXG5TY2h1bXBldGVyL01cXG5TY2h1eWxlci9NXFxuU2NodXlsa2lsbC9NXFxuU2Nod2FydHovTVxcblNjaHdhcnplbmVnZ2VyL01cXG5TY2h3YXJ6a29wZi9NXFxuU2Nod2VpdHplci9NXFxuU2Nod2VwcGVzL01cXG5TY2h3aW5nZXIvTVxcblNjaHdpbm4vTVxcblNjaWVudG9sb2dpc3QvU01cXG5TY2llbnRvbG9neS9NXFxuU2NpcGlvL01cXG5TY29wZXMvTVxcblNjb3JwaW8vU01cXG5TY29ycGl1cy9NXFxuU2NvcnNlc2UvTVxcblNjb3QvU01cXG5TY290Y2gvTVNcXG5TY290Y2htYW4vTVxcblNjb3RjaG1lbi9NXFxuU2NvdGNod29tYW4vTVxcblNjb3RjaHdvbWVuL01cXG5TY290aWEvTVxcblNjb3RsYW5kL01cXG5TY290c21hbi9NXFxuU2NvdHNtZW4vTVxcblNjb3Rzd29tYW4vTVxcblNjb3Rzd29tZW4vTVxcblNjb3R0L01cXG5TY290dGllL1NNXFxuU2NvdHRpc2gvTVxcblNjb3R0c2RhbGUvTVxcblNjcmFiYmxlL01TXFxuU2NyYW50b24vTVxcblNjcmlhYmluL01cXG5TY3JpYm5lci9NXFxuU2NyaXB0dXJlL1NNXFxuU2Nyb29nZS9NXFxuU2NydWdncy9NXFxuU2N1ZC9NXFxuU2N1bGxleS9NXFxuU2N5bGxhL01cXG5TY3l0aGlhL01cXG5TY3l0aGlhbi9NXFxuU2UvTUhcXG5TZWFib3JnL01cXG5TZWFncmFtL01cXG5TZWFuL01cXG5TZWFycy9NXFxuU2Vhc2lkZS9NXFxuU2VhdHRsZS9NXFxuU2ViYXN0aWFuL01cXG5TZWJyaW5nL01cXG5TZWNcXG5TZWNvbmFsL01cXG5TZWNyZXRhcmlhdC9NXFxuU2VjcmV0YXJ5XFxuU2VkZXIvTVNcXG5TZWRuYS9NXFxuU2VlYmVjay9NXFxuU2VlZ2VyL01cXG5TZWdhL01cXG5TZWdvdmlhL01cXG5TZWdyZS9NXFxuU2VndW5kby9NXFxuU2Vnd2F5L1NcXG5TZWlrby9NXFxuU2VpbmUvTVxcblNlaW5mZWxkL01cXG5TZWpvbmcvTVxcblNlbGFzc2llL01cXG5TZWxlY3RyaWMvTVxcblNlbGVuYS9NXFxuU2VsZXVjaWQvTVxcblNlbGV1Y3VzL01cXG5TZWxpbS9NXFxuU2VsanVrL01cXG5TZWxraXJrL01cXG5TZWxsZXJzL01cXG5TZWxtYS9NXFxuU2Vsem5pY2svTVxcblNlbWFyYW5nL01cXG5TZW1pbm9sZS9NU1xcblNlbWlyYW1pcy9NXFxuU2VtaXRlL01TXFxuU2VtaXRpYy9TTVxcblNlbXRleC9NXFxuU2VuYXRlL01TXFxuU2VuZGFpL01cXG5TZW5lY2EvTVNcXG5TZW5lZ2FsL01cXG5TZW5lZ2FsZXNlL01cXG5TZW5naG9yL01cXG5TZW5pb3IvTVxcblNlbm5hY2hlcmliL01cXG5TZW5uZXR0L01cXG5TZW5zdXJyb3VuZC9NXFxuU2VvdWwvTVxcblNlcFxcblNlcGhhcmRpL01cXG5TZXBveS9NXFxuU2VwdC9NXFxuU2VwdGVtYmVyL01TXFxuU2VwdHVhZ2ludC9NU1xcblNlcXVveWEvTVxcblNlcmIvU01cXG5TZXJiaWEvTVxcblNlcmJpYW4vTVNcXG5TZXJlbmEvTVxcblNlcmVuZ2V0aS9NXFxuU2VyZ2VpL01cXG5TZXJnaW8vTVxcblNlcnBlbnMvTVxcblNlcnJhL01cXG5TZXJyYW5vL01cXG5TZXQvTVxcblNldGgvTVxcblNldG9uL01cXG5TZXVyYXQvTVxcblNldXNzL01cXG5TZXZhc3RvcG9sL01cXG5TZXZlcm4vTVxcblNldmVydXMvTVxcblNldmlsbGUvTVxcblNldnJlcy9NXFxuU2V3YXJkL01cXG5TZXh0YW5zL01cXG5TZXh0b24vTVxcblNleWNoZWxsZXMvTVxcblNleWZlcnQvTVxcblNleW1vdXIvTVxcblNndFxcblNoYWFueGkvTVxcblNoYWNrbGV0b24vTVxcblNoYWZmZXIvTVxcblNoYWgvTVxcblNoYWthL01cXG5TaGFrZXJcXG5TaGFrZXNwZWFyZS9NXFxuU2hha2VzcGVhcmVhbi9NXFxuU2hhbmEvTVxcblNoYW5kb25nL01cXG5TaGFuZS9NXFxuU2hhbmdoYWkvTVxcblNoYW5rYXJhL01cXG5TaGFubmEvTVxcblNoYW5ub24vTVxcblNoYW50dW5nL01cXG5TaGFueGkvTVxcblNoYXBpcm8vTVxcblNoYXJlUG9pbnQvTVxcblNoYXJpJ2EvTVxcblNoYXJpL01cXG5TaGFyaWYvTVxcblNoYXJsZW5lL01cXG5TaGFyb24vTVxcblNoYXJwL01cXG5TaGFycGUvTVxcblNoYXJyb24vTVxcblNoYXN0YS9NXFxuU2hhdWxhL01cXG5TaGF1bi9NXFxuU2hhdW5hL01cXG5TaGF2aWFuL01cXG5TaGF2dW90L01cXG5TaGF3L01cXG5TaGF3bi9NXFxuU2hhd25hL01cXG5TaGF3bmVlL1NNXFxuU2hjaGFyYW5za3kvTVxcblNoZWEvTVxcblNoZWJhL01cXG5TaGViZWxpL01cXG5TaGVib3lnYW4vTVxcblNoZWVuYS9NXFxuU2hlZXRyb2NrL01cXG5TaGVmZmllbGQvTVxcblNoZWlsYS9NXFxuU2hlbGJ5L01cXG5TaGVsZG9uL01cXG5TaGVsaWEvTVxcblNoZWxsL01cXG5TaGVsbGV5L01cXG5TaGVsbHkvTVxcblNoZWx0b24vTVxcblNoZW5hbmRvYWgvTVxcblNoZW55YW5nL01cXG5TaGVvbC9NXFxuU2hlcGFyZC9NXFxuU2hlcGhlcmQvTVxcblNoZXBwYXJkL01cXG5TaGVyYXRhbi9NXFxuU2hlcmF0b24vTVxcblNoZXJlZS9NXFxuU2hlcmkvTVxcblNoZXJpZGFuL01cXG5TaGVybG9jay9NXFxuU2hlcm1hbi9NXFxuU2hlcnBhL01cXG5TaGVycmkvTVxcblNoZXJyaWUvTVxcblNoZXJyeS9NXFxuU2hlcndvb2QvTVxcblNoZXJ5bC9NXFxuU2hldGxhbmQvU01cXG5TaGV0bGFuZHMvTVxcblNoZXZhcmRuYWR6ZS9NXFxuU2hldmF0L01cXG5TaGknaXRlL01cXG5TaGllbGRzL01cXG5TaGlpdGUvTVNcXG5TaGlqaWF6aHVhbmcvTVxcblNoaWtva3UvTVxcblNoaWxsb25nL01cXG5TaGlsb2gvTVxcblNoaW50by9NU1xcblNoaW50b2lzbS9NU1xcblNoaW50b2lzdC9NU1xcblNoaXJhei9NXFxuU2hpcmxleS9NXFxuU2hpdmEvTVxcblNob2NrbGV5L01cXG5TaG9ydC9NXFxuU2hvcnRob3JuL01cXG5TaG9zaG9uZS9TTVxcblNob3N0YWtvdml0Y2gvTVxcblNocmVrL01cXG5TaHJldmVwb3J0L01cXG5TaHJpbmVyL01cXG5TaHJvcHNoaXJlL01cXG5TaHVsYS9NXFxuU2h5bG9jay9NXFxuU2h5bG9ja2lhbi9NXFxuU2kvTVxcblNpYW0vTVxcblNpYW1lc2UvTVxcblNpYmVsaXVzL01cXG5TaWJlcmlhL01cXG5TaWJlcmlhbi9NU1xcblNpYnlsL01cXG5TaWNodWFuL01cXG5TaWNpbGlhbi9TTVxcblNpY2lseS9NXFxuU2lkL01cXG5TaWRkaGFydGhhL01cXG5TaWRuZXkvTVxcblNpZWdmcmllZC9NXFxuU2llbWVucy9NXFxuU2llcnBpbnNraS9NXFxuU2llcnJhc1xcblNpZ2lzbXVuZC9NXFxuU2lnbXVuZC9NXFxuU2lndXJkL01cXG5TaWhhbm91ay9NXFxuU2lraC9NXFxuU2lraGlzbVxcblNpa2hzXFxuU2lra2ltL01cXG5TaWtraW1lc2UvTVxcblNpa29yc2t5L01cXG5TaWxhcy9NXFxuU2lsZXNpYS9NXFxuU2lsdXJpYW4vU01cXG5TaWx2YS9NXFxuU2lsdmlhL01cXG5TaW1lbm9uL01cXG5TaW1tZW50YWwvTVxcblNpbW1vbnMvTVxcblNpbW9uL01cXG5TaW1vbmUvTVxcblNpbXBzb24vU01cXG5TaW1wc29ucy9NXFxuU2ltcHNvbnZpbGxlL01cXG5TaW1zL01cXG5TaW5haS9NXFxuU2luYXRyYS9NXFxuU2luYmFkL01cXG5TaW5jbGFpci9NXFxuU2luZGJhZC9NXFxuU2luZGhpL01cXG5TaW5nYXBvcmUvTVxcblNpbmdhcG9yZWFuL1NNXFxuU2luZ2VyL01cXG5TaW5naC9NXFxuU2luZ2xldG9uL01cXG5TaW5oYWxlc2UvTVxcblNpbmtpYW5nL01cXG5TaW91eC9NXFxuU2lyL1NNXFxuU2lyaXVzL01cXG5TaXN0aW5lL01cXG5TaXN5cGhlYW4vTVxcblNpc3lwaHVzL01cXG5TaXZhL01cXG5TaXZhbi9NXFxuU2phZWxsYW5kL01cXG5Ta2lubmVyL01cXG5Ta2lwcHkvTVxcblNrb3BqZS9NXFxuU2t5ZS9NXFxuU2t5bGFiL01cXG5Ta3lwZS9NXFxuU2xhY2t3YXJlL01cXG5TbGFzaGRvdC9NXFxuU2xhdGVyL01cXG5TbGF2L1NNXFxuU2xhdmljL01cXG5TbGF2b25pYy9NXFxuU2xpZGVsbC9NXFxuU2xpbmt5L01cXG5TbG9hbi9NXFxuU2xvYW5lL01cXG5TbG9jdW0vTVxcblNsb3Zhay9TTVxcblNsb3Zha2lhL01cXG5TbG92YWtpYW5cXG5TbG92ZW5lL1NNXFxuU2xvdmVuaWEvTVxcblNsb3Zlbmlhbi9NU1xcblNsdXJwZWUvTVxcblNtL01cXG5TbWFsbC9NXFxuU21ldGFuYS9NXFxuU21pcm5vZmYvTVxcblNtaXRoL01cXG5TbWl0aHNvbi9NXFxuU21pdGhzb25pYW4vTVxcblNtb2tleS9NXFxuU21vbGVuc2svTVxcblNtb2xsZXR0L01cXG5TbXV0cy9NXFxuU215cm5hXFxuU24vTVxcblNuYWtlL01cXG5TbmFwcGxlL01cXG5TbmVhZC9NXFxuU25lbGwvTVxcblNuaWNrZXJzL01cXG5TbmlkZXIvTVxcblNub29weS9NXFxuU25vdy9NXFxuU25vd2JlbHQvTVxcblNueWRlci9NXFxuU29hdmUvTVxcblNvY1xcblNvY2FzdGVlL01cXG5Tb2NvcnJvL01cXG5Tb2NyYXRlcy9NXFxuU29jcmF0aWMvTVxcblNvZGR5L01cXG5Tb2RvbS9NXFxuU29maWEvTVxcblNvaG8vTVxcblNvbC9NXFxuU29saXMvTVxcblNvbG9tb24vTVxcblNvbG9uL01cXG5Tb2x6aGVuaXRzeW4vTVxcblNvbWFsaS9TTVxcblNvbWFsaWEvTVxcblNvbWFsaWFuL01TXFxuU29tbWUvTVxcblNvbW96YS9NXFxuU29uL01cXG5Tb25kaGVpbS9NXFxuU29uZHJhL01cXG5Tb25naGFpL01cXG5Tb25naHVhL01cXG5Tb25pYS9NXFxuU29uamEvTVxcblNvbm55L01cXG5Tb25vcmEvTVxcblNvbnRhZy9NXFxuU29ueS9NXFxuU29ueWEvTVxcblNvcGhpYS9NXFxuU29waGllL01cXG5Tb3Bob2NsZWFuL01cXG5Tb3Bob2NsZXMvTVxcblNvcHdpdGgvTVxcblNvcmJvbm5lL01cXG5Tb3NhL01cXG5Tb3RvL01cXG5Tb3VwaGFub3V2b25nL01cXG5Tb3VyY2Vmb3JnZS9NXFxuU291c2EvTVxcblNvdXRoL01cXG5Tb3V0aGFtcHRvbi9NXFxuU291dGhlYXN0L01TXFxuU291dGhlcm5lci9TTVxcblNvdXRoZXkvTVxcblNvdXRoc1xcblNvdXRod2VzdC9NU1xcblNvdmlldC9NXFxuU293ZXRvL01cXG5Tb3lpbmthL01cXG5Tb3l1ei9NXFxuU3BcXG5TcGFhdHovTVxcblNwYWNrbGUvTVxcblNwYWhuL01cXG5TcGFpbi9NXFxuU3BhbS9NXFxuU3BhblxcblNwYW5nbGlzaFxcblNwYW5pYXJkL1NNXFxuU3BhbmlzaC9NXFxuU3BhcmtzL01cXG5TcGFydGEvTVxcblNwYXJ0YWN1cy9NXFxuU3BhcnRhbi9NU1xcblNwYXJ0YW5idXJnL01cXG5TcGVhcnMvTVxcblNwZWVyL01cXG5TcGVuY2UvUk1cXG5TcGVuY2VyL01cXG5TcGVuY2VyaWFuL01cXG5TcGVuZ2xlci9NXFxuU3BlbmdsZXJpYW4vTVxcblNwZW5zZXIvTVxcblNwZW5zZXJpYW4vTVxcblNwZXJyeS9NXFxuU3BoaW54L01cXG5TcGljYS9NXFxuU3BpZWxiZXJnL01cXG5TcGlsbGFuZS9NXFxuU3Bpbm96YS9NXFxuU3BpbngvTVxcblNwaXJvL01cXG5TcGlyb2dyYXBoL01cXG5TcGl0c2Jlcmdlbi9NXFxuU3BpdHovTVxcblNwb2NrL01cXG5TcG9rYW5lL01cXG5TcHJpbmdkYWxlL01cXG5TcHJpbmdmaWVsZC9NXFxuU3ByaW5nc3RlZW4vTVxcblNwcmludC9NXFxuU3ByaXRlL01cXG5TcHV0bmlrL01cXG5TcVxcblNxdWFudG8vTVxcblNxdWliYi9NXFxuU3IvTVxcblNyaW5hZ2FyL01cXG5Tcml2aWpheWEvTVxcblN0XFxuU3RhXFxuU3RhY2V5L01cXG5TdGFjaS9NXFxuU3RhY2llL01cXG5TdGFjeS9NXFxuU3RhZWwvTVxcblN0YWZmb3JkL01cXG5TdGFpck1hc3Rlci9NXFxuU3RhbGluL01cXG5TdGFsaW5ncmFkL01cXG5TdGFsaW5pc3QvTVxcblN0YWxsb25lL01cXG5TdGFtZm9yZC9NXFxuU3Rhbi9NXFxuU3RhbmRpc2gvTVxcblN0YW5mb3JkL01cXG5TdGFuaXNsYXZza3kvTVxcblN0YW5sZXkvTVxcblN0YW50b24vTVxcblN0YXBsZXMvTVxcblN0YXJidWNrcy9NXFxuU3RhcmsvTVxcblN0YXJrZXkvTVxcblN0YXJyL01cXG5TdGF0ZW4vTVxcblN0YXRlc1xcblN0YXViYWNoL01cXG5TdGF1bnRvbi9NXFxuU3RlXFxuU3RlYWRpY2FtL01cXG5TdGVlbGUvTVxcblN0ZWZhbi9NXFxuU3RlZmFuaWUvTVxcblN0ZWluL01SXFxuU3RlaW5iZWNrL01cXG5TdGVpbmVtL01cXG5TdGVpbmVyL01cXG5TdGVpbm1ldHovTVxcblN0ZWlud2F5L01cXG5TdGVsbGEvTVxcblN0ZW5kaGFsL01cXG5TdGVuZ2VsL01cXG5TdGVwaGFuL01cXG5TdGVwaGFuaWUvTVxcblN0ZXBoZW4vTVNcXG5TdGVwaGVucy9NXFxuU3RlcGhlbnNvbi9NXFxuU3RlcmxpbmcvTVxcblN0ZXJuL01cXG5TdGVybmUvTVxcblN0ZXJuby9NXFxuU3RldHNvbi9NXFxuU3RldWJlbi9NXFxuU3RldWJlbnZpbGxlL01cXG5TdGV2ZS9NXFxuU3RldmVuL01TXFxuU3RldmVucy9NXFxuU3RldmVuc29uL01cXG5TdGV2aWUvTVxcblN0ZXdhcnQvTVxcblN0aWVnbGl0ei9NXFxuU3RpbHRvbi9TTVxcblN0aW1zb24vTVxcblN0aW5lL01cXG5TdGlybGluZy9NXFxuU3RvY2toYXVzZW4vTVxcblN0b2NraG9sbS9NXFxuU3RvY2t0b24vTVxcblN0b2ljL1NNXFxuU3RvaWNpc20vTVNcXG5TdG9rZXMvTVxcblN0b2xpY2huYXlhL01cXG5TdG9seXBpbi9NXFxuU3RvbmUvTVxcblN0b25laGVuZ2UvTVxcblN0b3BwYXJkL01cXG5TdG91dC9NXFxuU3Rvd2UvTVxcblN0cmFiby9NXFxuU3RyYWRpdmFyaVxcblN0cmFkaXZhcml1cy9NXFxuU3RyYXNib3VyZy9NXFxuU3RyYXVzcy9NXFxuU3RyYXZpbnNreS9NXFxuU3RyZWlzYW5kL01cXG5TdHJpY2tsYW5kL01cXG5TdHJpbmRiZXJnL01cXG5TdHJvbWJvbGkvTVxcblN0cm9uZy9NXFxuU3R1L01cXG5TdHVhcnQvTVNcXG5TdHVkZWJha2VyL01cXG5TdHV0dGdhcnQvTVxcblN0dXl2ZXNhbnQvTVxcblN0eWdpYW4vTVxcblN0eXJvZm9hbS9TTVxcblN0eXJvbi9NXFxuU3R5eC9NXFxuU3VhcmV6L01cXG5TdWJhcnUvTVxcblN1Y3JlL01cXG5TdWNyZXRzL01cXG5TdWRhbi9NXFxuU3VkYW5lc2UvTVxcblN1ZGV0ZW5sYW5kL01cXG5TdWRva3UvTVxcblN1ZHJhL01cXG5TdWUvTVxcblN1ZXRvbml1cy9NXFxuU3Vlei9NXFxuU3VmZm9say9NXFxuU3VmaS9NXFxuU3VmaXNtL01cXG5TdWhhcnRvL01cXG5TdWkvTVxcblN1a2Fybm8vTVxcblN1a2tvdFxcblN1bGF3ZXNpL01cXG5TdWxlaW1hbi9NXFxuU3VsbGEvTVxcblN1bGxpdmFuL01cXG5TdW1hdHJhL01cXG5TdW1hdHJhbi9TTVxcblN1bWVyaWEvTVxcblN1bWVyaWFuL1NNXFxuU3VtbWVyL01TXFxuU3VtbWVycy9NXFxuU3VtbmVyL01cXG5TdW10ZXIvTVxcblN1bi9TTVxcblN1bmJlYW0vTVxcblN1bmJlbHQvTVxcblN1bmRhbmVzZS9NXFxuU3VuZGFzL01cXG5TdW5kYXkvTVNcXG5TdW5nL01cXG5TdW5raXN0L01cXG5TdW5uaS9TTVxcblN1bm5pdGUvTVNcXG5TdW5ueXZhbGUvTVxcblN1cGVyYm93bC9NXFxuU3VwZXJmdW5kL01cXG5TdXBlcmdsdWUvTVxcblN1cGVyaW9yL01cXG5TdXBlcm1hbi9NXFxuU3VwdFxcblN1cmFiYXlhL01cXG5TdXJhdC9NXFxuU3VyaW5hbWUvTVxcblN1cmluYW1lc2VcXG5TdXJ5YS9NXFxuU3VzYW4vTVxcblN1c2FuYS9NXFxuU3VzYW5uYS9NXFxuU3VzYW5uZS9NXFxuU3VzaWUvTVxcblN1c3F1ZWhhbm5hL01cXG5TdXNzZXgvTVxcblN1dGhlcmxhbmQvTVxcblN1dHRvbi9NXFxuU3V2YS9NXFxuU3V3YW5lZS9NXFxuU3V6YW5uZS9NXFxuU3V6ZXR0ZS9NXFxuU3V6aG91L01cXG5TdXp1a2kvTVxcblN1enkvTVxcblN2YWxiYXJkL01cXG5TdmVuL01cXG5TdmVuZ2FsaS9NXFxuU3ZlcmRsb3Zza1xcblN3YWhpbGkvU01cXG5Td2FtbWVyZGFtL01cXG5Td2FuZWUvTVxcblN3YW5zZWEvTVxcblN3YW5zb24vTVxcblN3YXppL1NNXFxuU3dhemlsYW5kL01cXG5Td2VkL05cXG5Td2VkZS9TTVxcblN3ZWRlbi9NXFxuU3dlZGVuYm9yZy9NXFxuU3dlZGlzaC9NXFxuU3dlZW5leS9NXFxuU3dlZXQvTVxcblN3aWZ0L01cXG5Td2luYnVybmUvTVxcblN3aXNzL01TXFxuU3dpc3NhaXIvTVxcblN3aXR6XFxuU3dpdHplcmxhbmQvTVxcblN5YmlsL01cXG5TeWRuZXkvTVxcblN5a2VzL01cXG5TeWx2ZXN0ZXIvTVxcblN5bHZpYS9NXFxuU3lsdmllL01cXG5TeW5nZS9NXFxuU3lyYWN1c2UvTVxcblN5cmlhL01cXG5TeXJpYWMvTVxcblN5cmlhbi9NU1xcblN6aWxhcmQvTVxcblN6eW1ib3Jza2EvTVxcblQnYW5nL01cXG5UL01ER1xcblRBXFxuVEFSUFxcblRCL01cXG5UQkFcXG5URFxcblRERFxcblRFRkxcXG5URUxORVQvU1xcblRFTE5FVFRlZFxcblRFTE5FVFRpbmdcXG5URVNMXFxuVEVTT0xcXG5UR0lGXFxuVEhDXFxuVEtPL01cXG5UTEMvTVxcblRNXFxuVE5cXG5UTlQvTVxcblRPRUZMXFxuVFFNXFxuVFYvU01cXG5UVkFcXG5UV0EvTVxcblRXWFxcblRYXFxuVGEvTVxcblRhYmFzY28vU01cXG5UYWJhdGhhL01cXG5UYWJlcm5hY2xlL01TXFxuVGFiaXRoYS9NXFxuVGFicml6L01TXFxuVGFjaXR1cy9NXFxuVGFjb21hL01cXG5UYWQvTVxcblRhZHpoaWsvTVxcblRhZWd1L01cXG5UYWVqb24vTVxcblRhZnQvTVxcblRhZ2Fsb2cvU01cXG5UYWdvcmUvTVxcblRhZ3VzL01cXG5UYWhpdGkvTVxcblRhaGl0aWFuL01TXFxuVGFob2UvTVxcblRhaWNodW5nL01cXG5UYWluYW5cXG5UYWluZS9NXFxuVGFpcGVpL01cXG5UYWlwaW5nL01cXG5UYWl3YW4vTVxcblRhaXdhbmVzZS9NXFxuVGFpeXVhbi9NXFxuVGFqaWtpc3Rhbi9NXFxuVGFrbGFtYWthbi9NXFxuVGFsYm90L01cXG5UYWxpYmFuL01cXG5UYWxpZXNpbi9NXFxuVGFsbGFoYXNzZWUvTVxcblRhbGxjaGllZi9NXFxuVGFsbGV5L01cXG5UYWxsZXlyYW5kL01cXG5UYWxsaW5uL01cXG5UYWxtdWQvTVNcXG5UYWxtdWRpY1xcblRhbG11ZGlzdFxcblRhbWFyYS9NXFxuVGFtZWthL01cXG5UYW1lcmEvTVxcblRhbWVybGFuZS9NXFxuVGFtaS9NXFxuVGFtaWthL01cXG5UYW1pbC9NU1xcblRhbW1hbnkvTVxcblRhbW1pL01cXG5UYW1taWUvTVxcblRhbW11ei9NXFxuVGFtbXkvTVxcblRhbXBhL01cXG5UYW1wYXgvTVxcblRhbXJhL01cXG5UYW13b3J0aC9NXFxuVGFuY3JlZC9NXFxuVGFuZXkvTVxcblRhbmdhbnlpa2EvTVxcblRhbmdpZXIvTVNcXG5UYW5nc2hhbi9NXFxuVGFuaWEvTVxcblRhbmlzaGEvTVxcblRhbm5lci9NXFxuVGFubmhhdXNlci9NXFxuVGFudGFsdXMvTVxcblRhbnlhL01cXG5UYW56YW5pYS9NXFxuVGFuemFuaWFuL1NNXFxuVGFvL01cXG5UYW9pc20vTVNcXG5UYW9pc3QvTVNcXG5UYXJhL01cXG5UYXJhbnRpbm8vTVxcblRhcmF3YS9NXFxuVGFyYXplZC9NXFxuVGFyYmVsbC9NXFxuVGFyZ2V0L01cXG5UYXJpbS9NXFxuVGFya2VudG9uL01cXG5UYXJraW5ndG9uL01cXG5UYXJ0YXJ5L01cXG5UYXJ0dWZmZS9NXFxuVGFyemFuL01cXG5UYXNoYS9NXFxuVGFzaGtlbnQvTVxcblRhc21hbi9NXFxuVGFzbWFuaWEvTVxcblRhc21hbmlhbi9NXFxuVGFzcy9NXFxuVGF0YXIvTVNcXG5UYXRlL01cXG5UYXR1bS9NXFxuVGF1cnVzL01TXFxuVGF2YXJlcy9NXFxuVGF3bmV5L01cXG5UYXlsb3IvTVxcblRiL01cXG5UYmlsaXNpL01cXG5UYy9NXFxuVGNoYWlrb3Zza3kvTVxcblRlL01cXG5UZVhcXG5UZVhlc1xcblRlYXNkYWxlL01cXG5UZWNobmljb2xvci9NXFxuVGVjdW1zZWgvTVxcblRlZC9NXFxuVGVkZHkvTVxcblRlZmxvbi9NU1xcblRlZ3VjaWdhbHBhL01cXG5UZWhyYW5cXG5UZWxlUHJvbXBUZXJcXG5UZWxlUHJvbXB0ZXIvTVxcblRlbGVtYWNodXMvTVxcblRlbGVtYW5uL01cXG5UZWxldHlwZVxcblRlbGwvTVJcXG5UZWxsZXIvTVxcblRlbHVndS9NXFxuVGVtZWN1bGEvTVxcblRlbXBlXFxuVGVtcGxhci9NXFxuVGVtcGxlL01cXG5UZW5uL01cXG5UZW5uZXNzZWFuL1NNXFxuVGVubmVzc2VlL01cXG5UZW5ueXNvbi9NXFxuVGVubnlzb25pYW5cXG5UZW5vY2h0aXRsYW4vTVxcblRlbnNvckZsb3cvTVxcblRlb3RpaHVhY2FuL01cXG5UZXJlbmNlL01cXG5UZXJlc2EvTVxcblRlcmVzaGtvdmEvTVxcblRlcmkvTVxcblRlcmtlbC9NXFxuVGVycHNpY2hvcmUvTVxcblRlcnIvTVxcblRlcnJhL01cXG5UZXJyYW4vTVxcblRlcnJhbmNlL01cXG5UZXJyZWxsL01cXG5UZXJyZW5jZS9NXFxuVGVycmkvTVxcblRlcnJpZS9NXFxuVGVycnkvTVxcblRlcnRpYXJ5L01cXG5UZXNsYS9NXFxuVGVzcy9NXFxuVGVzc2EvTVxcblRlc3NpZS9NXFxuVGV0L01cXG5UZXRoeXMvTVxcblRldG9ucy9NXFxuVGV1dG9uL01TXFxuVGV1dG9uaWMvTVxcblRldmV0L01cXG5UZXgvTVxcblRleGFjby9NXFxuVGV4YW4vTVNcXG5UZXhhcmthbmEvTVxcblRleGFzL01cXG5UaC9NXFxuVGhhY2tlcmF5L01cXG5UaGFkL01cXG5UaGFkZGV1cy9NXFxuVGhhaS9TTVxcblRoYWlsYW5kL01cXG5UaGFsZXMvTVxcblRoYWxpYS9NXFxuVGhhbWVzL01cXG5UaGFuaC9NXFxuVGhhbmtzZ2l2aW5nL01TXFxuVGhhbnQvTVxcblRoYXIvTVxcblRoYXJwL01cXG5UaGF0Y2hlci9NXFxuVGhlYS9NXFxuVGhlYmVzL01cXG5UaGVpbGVyL01cXG5UaGVsbWEvTVxcblRoZW1pc3RvY2xlcy9NXFxuVGhlb2NyaXR1cy9NXFxuVGhlb2RvcmEvTVxcblRoZW9kb3JlL01cXG5UaGVvZG9yaWMvTVxcblRoZW9kb3NpdXMvTVxcblRoZW9zb3BoeS9NXFxuVGhlcmF2YWRhL01cXG5UaGVyZXNhL01cXG5UaGVyZXNlL01cXG5UaGVybW9weWxhZS9NXFxuVGhlcm1vc1xcblRoZXJvbi9NXFxuVGhlc2V1cy9NXFxuVGhlc3BpYW4vTVxcblRoZXNwaXMvTVxcblRoZXNzYWxvbmlhbi9TTVxcblRoZXNzYWxvbmlraS9NXFxuVGhlc3NhbHkvTVxcblRoaWV1L01cXG5UaGltYnUvTVxcblRoaW1waHVcXG5UaG9tYXMvTVxcblRob21pc20vTVxcblRob21pc3RpYy9NXFxuVGhvbXBzb24vTVxcblRob21zb24vTVxcblRob3IvTVxcblRob3JhemluZS9NXFxuVGhvcmVhdS9NXFxuVGhvcm50b24vTVxcblRob3JvdWdoYnJlZC9NXFxuVGhvcnBlL01cXG5UaG90aC9NXFxuVGhyYWNlL01cXG5UaHJhY2lhbi9NXFxuVGh1XFxuVGh1Y3lkaWRlcy9NXFxuVGh1bGUvTVxcblRodW5kZXJiaXJkL01cXG5UaHVyL1NcXG5UaHVyYmVyL01cXG5UaHVybWFuL01cXG5UaHVybW9uZC9NXFxuVGh1cnNkYXkvU01cXG5UaHV0bW9zZS9NXFxuVGkvTVxcblRpYS9NXFxuVGlhbmppbi9NXFxuVGliZXIvTVxcblRpYmVyaXVzL01cXG5UaWJldC9NXFxuVGliZXRhbi9NU1xcblRpY2tldG1hc3Rlci9NXFxuVGljb25kZXJvZ2EvTVxcblRpZGUvTVxcblRpZW5hbm1lbi9NXFxuVGlmZmFueS9NXFxuVGlncmlzL01cXG5UaWp1YW5hL01cXG5UaWxsaWNoL01cXG5UaWxsbWFuL01cXG5UaWxzaXQvTVxcblRpbS9NXFxuVGltYnVrdHUvTVxcblRpbWV4L01cXG5UaW1teS9NXFxuVGltb24vTVxcblRpbW9yL01cXG5UaW1vdGh5L01cXG5UaW11ci9NXFxuVGltdXJpZC9NXFxuVGluYS9NXFxuVGluZy9NXFxuVGlua2VyYmVsbC9NXFxuVGlua2VydG95L01cXG5UaW5zZWx0b3duL01cXG5UaW50b3JldHRvL01cXG5UaXBwZWNhbm9lL01cXG5UaXBwZXJhcnkvTVxcblRpcmFuZVxcblRpcmVzaWFzL01cXG5UaXJvbC9NXFxuVGlyb2xlYW5cXG5UaXNoYS9NXFxuVGlzaHJpL01cXG5UaXRhbi9TTVxcblRpdGFuaWEvTVxcblRpdGFuaWMvTVxcblRpdGlhbi9NXFxuVGl0aWNhY2EvTVxcblRpdG8vTVxcblRpdHVzL01cXG5UaXR1c3ZpbGxlL01cXG5UbC9NXFxuVGxhbG9jL01cXG5UbGluZ2l0L01cXG5UbS9NXFxuVG9iYWdvL01cXG5Ub2JpdC9NXFxuVG9ieS9NXFxuVG9jYW50aW5zL01cXG5Ub2NxdWV2aWxsZS9NXFxuVG9kL01cXG5Ub2RkL01cXG5Ub2dvL01cXG5Ub2dvbGVzZS9NXFxuVG9qby9NXFxuVG9rYXkvTVxcblRva3VnYXdhL01cXG5Ub2t5by9NXFxuVG9reW9pdGVcXG5Ub2xlZG8vTVNcXG5Ub2xraWVuL01cXG5Ub2xzdG95L01cXG5Ub2x0ZWMvTVxcblRvbHlhdHRpL01cXG5Ub20vTVxcblRvbWFzL01cXG5Ub21iYXVnaC9NXFxuVG9tbGluL01cXG5Ub21taWUvTVxcblRvbW15L01cXG5Ub21wa2lucy9NXFxuVG9tc2svTVxcblRvbmdhL01cXG5Ub25nYW4vTVNcXG5Ub25pL01cXG5Ub25pYS9NXFxuVG9udG8vTVxcblRvbnkvTVxcblRvbnlhL01cXG5Ub3Bla2EvTVxcblRvcHN5L01cXG5Ub3JhaC9NXFxuVG9yYWhzXFxuVG9yb250by9NXFxuVG9ycXVlbWFkYS9NXFxuVG9ycmFuY2UvTVxcblRvcnJlbnMvTVxcblRvcnJlcy9NXFxuVG9ycmljZWxsaS9NXFxuVG9ydG9sYS9NXFxuVG9ydHVnYS9NXFxuVG9ydmFsZHMvTVxcblRvcnkvU01cXG5Ub3NjYS9NXFxuVG9zY2FuaW5pL01cXG5Ub3NoaWJhL01cXG5Ub3RvL01cXG5Ub3Vsb3VzZS9NXFxuVG93bmVzL01cXG5Ub3duc2VuZC9NXFxuVG95bmJlZS9NXFxuVG95b2RhL01cXG5Ub3lvdGEvTVxcblRyYWNleS9NXFxuVHJhY2kvTVxcblRyYWNpZS9NXFxuVHJhY3kvTVxcblRyYWZhbGdhci9NXFxuVHJhaWx3YXlzL01cXG5UcmFqYW4vTVxcblRyYW4vTVxcblRyYW5zY2F1Y2FzaWEvTVxcblRyYW5zdmFhbC9NXFxuVHJhbnN5bHZhbmlhL01cXG5UcmFuc3lsdmFuaWFuL01cXG5UcmFwcGlzdC9TTVxcblRyYXZpcy9NXFxuVHJhdm9sdGEvTVxcblRyZWFzdXJ5L1NNXFxuVHJlYmxpbmthL01cXG5UcmVra2llL01cXG5UcmVudC9NXFxuVHJlbnRvbi9NXFxuVHJldmVseWFuL01cXG5UcmV2aW5vL01cXG5UcmV2b3IvTVxcblRyZXkvTVxcblRyaWFuZ3VsdW0vTVxcblRyaWFzc2ljL01cXG5UcmljaWEvTVxcblRyaWRlbnQvTVxcblRyaWVzdGUvTVxcblRyaW11cnRpL01cXG5UcmluYS9NXFxuVHJpbmlkYWQvTVxcblRyaW5pZGFkaWFuL01TXFxuVHJpbml0eS9TTVxcblRyaXBpdGFrYS9NXFxuVHJpcG9saS9NXFxuVHJpcHBlL01cXG5UcmlzaGEvTVxcblRyaXN0YW4vTVxcblRyaXRvbi9NXFxuVHJvYnJpYW5kL01cXG5Ucm9pbHVzL01cXG5Ucm9qYW4vTVNcXG5Ucm9sbG9wZS9NXFxuVHJvbmRoZWltL01cXG5Ucm9waWNhbmEvTVxcblRyb3Rza3kvTVxcblRyb3kvTVxcblRyb3llc1xcblRydWNrZWUvTVxcblRydWRlYXUvTVxcblRydWR5L01cXG5UcnVmZmF1dC9NXFxuVHJ1amlsbG8vTVxcblRydW1hbi9NXFxuVHJ1bWJ1bGwvTVxcblRydW1wL01cXG5UcnV0aC9NXFxuVHNpbXNoaWFuL01cXG5Uc2lvbGtvdnNreS9NXFxuVHNpdHNpaGFyL01cXG5Uc29uZ2toYXBhL01cXG5Uc3dhbmEvTVxcblR1L01cXG5UdWFtb3R1L01cXG5UdWFyZWcvTVxcblR1Ym1hbi9NXFxuVHVja2VyL01cXG5UdWNzb24vTVxcblR1Y3VtYW4vTVxcblR1ZG9yL1NNXFxuVHVlL1NcXG5UdWVzL01cXG5UdWVzZGF5L01TXFxuVHVsYW5lL01cXG5UdWxsL01cXG5UdWxzYS9NXFxuVHVsc2lkYXMvTVxcblR1bXMvTVxcblR1bmd1cy9NXFxuVHVuZ3Vza2EvTVxcblR1bmlzL01cXG5UdW5pc2lhL01cXG5UdW5pc2lhbi9NU1xcblR1bm5leS9NXFxuVHVwaS9NXFxuVHVwcGVyd2FyZS9NXFxuVHVwdW5nYXRvL01cXG5UdXJnZW5ldi9NXFxuVHVyaW4vTVxcblR1cmluZy9NXFxuVHVyay9TTVxcblR1cmtlc3Rhbi9NXFxuVHVya2V5L01cXG5UdXJraWMvTVNcXG5UdXJraXNoL01cXG5UdXJrbWVuaXN0YW4vTVxcblR1cmxvY2svTVxcblR1cm5lci9NXFxuVHVycGluL01cXG5UdXNjYWxvb3NhL01cXG5UdXNjYW4vTVxcblR1c2NhbnkvTVxcblR1c2Nhcm9yYS9NU1xcblR1c2Nvbi9NXFxuVHVza2VnZWUvTVxcblR1c3NhdWQvTVxcblR1dC9NXFxuVHV0YW5raGFtZW4vTVxcblR1dHNpL01cXG5UdXR1L01cXG5UdXZhbHUvTVxcblR1dmFsdWFuXFxuVHdhaW4vTVxcblR3ZWVkL01cXG5Ud2VlZGxlZGVlL01cXG5Ud2VlZGxlZHVtL01cXG5Ud2lsYS9NXFxuVHdpbmtpZXMvTVxcblR3aXR0ZXIvTVxcblR3aXp6bGVycy9NXFxuVHdwXFxuVHkvTVxcblR5Y2hvL01cXG5UeWxlbm9sL01cXG5UeWxlci9NXFxuVHluZGFsZS9NXFxuVHluZGFsbC9NXFxuVHlyZS9NXFxuVHlyZWUvTVxcblR5cm9sZWFuXFxuVHlyb25lL01cXG5UeXNvbi9NXFxuVS9NXFxuVUFSXFxuVUFXXFxuVUJTL01cXG5VQ0xBL01cXG5VRk8vU01cXG5VSEYvTVxcblVLL01cXG5VTFxcblVOL01cXG5VTkVTQ08vTVxcblVOSUNFRi9NXFxuVU5JWC9NXFxuVVBDXFxuVVBJL01cXG5VUFMvTVxcblVSTC9TXFxuVVMvTVxcblVTQS9NXFxuVVNBRlxcblVTQlxcblVTQ0dcXG5VU0RBL01cXG5VU0lBXFxuVVNNQ1xcblVTTlxcblVTT1xcblVTUFxcblVTUFNcXG5VU1NcXG5VU1NSL01cXG5VVC9NXFxuVVRDXFxuVVYvTVxcblViYW5naS9NXFxuVWJ1bnR1L01cXG5VY2F5YWxpL01cXG5VY2NlbGxvL01cXG5VZGFsbC9NXFxuVWZhL01cXG5VZ2FuZGEvTVxcblVnYW5kYW4vTVNcXG5VaWdodXIvTVxcblVqdW5ncGFuZGFuZy9NXFxuVWtyYWluZS9NXFxuVWtyYWluaWFuL1NNXFxuVWxzdGVyL01cXG5VbHRyYXN1ZWRlL01cXG5VbHlhbm92c2svTVxcblVseXNzZXMvTVxcblVtYnJpZWwvTVxcblVuZGVyd29vZC9NXFxuVW5nYXZhL01cXG5Vbmljb2RlL01cXG5VbmlsZXZlci9NXFxuVW5pb24vU01cXG5VbmlvbmlzdFxcblVuaW9udG93bi9NXFxuVW5pcm95YWwvTVxcblVuaXRhcmlhbi9NU1xcblVuaXRhcmlhbmlzbS9NU1xcblVuaXRhcy9NXFxuVW5peC9TXFxuVW51a2FsaGFpL01cXG5VcGFuaXNoYWRzL01cXG5VcGRpa2UvTVxcblVwam9obi9NXFxuVXB0b24vTVxcblVyL01cXG5VcmFsL1NNXFxuVXJhbHMvTVxcblVyYW5pYS9NXFxuVXJhbnVzL01cXG5VcmJhbi9NXFxuVXJkdS9NXFxuVXJleS9NXFxuVXJpYWgvTVxcblVyaWVsL01cXG5VcmlzL01cXG5VcnF1aGFydC9NXFxuVXJzYS9NXFxuVXJzdWxhL01cXG5VcnN1bGluZS9NXFxuVXJ1Z3VheS9NXFxuVXJ1Z3VheWFuL01TXFxuVXJ1bXFpL01cXG5Vc2VuZXQvTVNcXG5Vc3Rpbm92L01cXG5VdFxcblV0YWgvTVxcblV0YWhhbi9NU1xcblV0ZS9TTVxcblV0aWNhL01cXG5VdG9waWEvU01cXG5VdG9waWFuL1NNXFxuVXRyZWNodC9NXFxuVXRyaWxsby9NXFxuVXpiZWsvTVxcblV6YmVraXN0YW4vTVxcblV6aS9TTVxcblYvTVxcblZBXFxuVkFUL01cXG5WQVhcXG5WQVhlc1xcblZCQS9NXFxuVkNSL01cXG5WRC9NXFxuVkRUXFxuVkRVXFxuVkZcXG5WRlcvTVxcblZHXFxuVkdBXFxuVkhGL01cXG5WSFNcXG5WSS9NXFxuVklQL1NNXFxuVklTVEFcXG5WSlxcblZMRi9NXFxuVk9BXFxuVlBcXG5WVFxcblZUT0xcXG5WYS9NXFxuVmFjYXZpbGxlL01cXG5WYWRlci9NXFxuVmFkdXovTVxcblZhbC9NXFxuVmFsYXJpZS9NXFxuVmFsZGV6L01cXG5WYWxkb3N0YS9NXFxuVmFsZW5jaWEvU01cXG5WYWxlbnRpL01cXG5WYWxlbnRpbi9NXFxuVmFsZW50aW5lL01cXG5WYWxlbnRpbm8vTVxcblZhbGVuenVlbGEvTVxcblZhbGVyaWEvTVxcblZhbGVyaWFuL01cXG5WYWxlcmllL01cXG5WYWxlcnkvTVxcblZhbGhhbGxhL01cXG5WYWxpdW0vTVNcXG5WYWxreXJpZS9TTVxcblZhbGxlam8vTVxcblZhbGxldHRhL01cXG5WYWxvaXMvTVxcblZhbHBhcmFpc28vTVxcblZhbHZvbGluZS9NXFxuVmFuL01cXG5WYW5jZS9NXFxuVmFuY291dmVyL01cXG5WYW5kYWwvTVNcXG5WYW5kZXJiaWx0L01cXG5WYW5keWtlL01cXG5WYW5lc3NhL01cXG5WYW5nL01cXG5WYW51YXR1L01cXG5WYW56ZXR0aS9NXFxuVmFyYW5hc2kvTVxcblZhcmVzZS9NXFxuVmFyZ2FzL01cXG5WYXNlbGluZS9TTVxcblZhc3F1ZXovTVxcblZhc3Nhci9NXFxuVmF0aWNhbi9NXFxuVmF1YmFuL01cXG5WYXVnaGFuL01cXG5WYXVnaG4vTVxcblZhenF1ZXovTVxcblZlYmxlbi9NXFxuVmVkYS9TTVxcblZlZGFudGEvTVxcblZlZ2EvU01cXG5WZWdhcy9NXFxuVmVnZW1pdGUvTVxcblZlbGEvTVxcblZlbGFzcXVlei9NXFxuVmVsYXpxdWV6L01cXG5WZWxjcm8vTVNcXG5WZWxlei9NXFxuVmVsbWEvTVxcblZlbHZlZXRhL01cXG5WZW5ldGlhbi9TTVxcblZlbmV6dWVsYS9NXFxuVmVuZXp1ZWxhbi9TTVxcblZlbmljZS9NXFxuVmVubi9NXFxuVmVudG9saW4vTVxcblZlbnVzL01TXFxuVmVudXNpYW4vTVxcblZlcmEvTVxcblZlcmFjcnV6L01cXG5WZXJkZS9NXFxuVmVyZGkvTVxcblZlcmR1bi9NXFxuVmVyaXpvbi9NXFxuVmVybGFpbmUvTVxcblZlcm1lZXIvTVxcblZlcm1vbnQvWk1SXFxuVmVybW9udGVyL01cXG5WZXJuL01cXG5WZXJuYS9NXFxuVmVybmUvTVxcblZlcm5vbi9NXFxuVmVyb25hL01cXG5WZXJvbmVzZS9NXFxuVmVyb25pY2EvTVxcblZlcnNhaWxsZXMvTVxcblZlc2FsaXVzL01cXG5WZXNwYXNpYW4vTVxcblZlc3B1Y2NpL01cXG5WZXN0YS9NXFxuVmVzdXZpdXMvTVxcblZpYWNvbS9NXFxuVmlhZ3JhL01cXG5WaWMvTVxcblZpY2VudGUvTVxcblZpY2h5L01cXG5WaWNraS9NXFxuVmlja2llL01cXG5WaWNrc2J1cmcvTVxcblZpY2t5L01cXG5WaWN0b3IvTVxcblZpY3RvcmlhL01cXG5WaWN0b3JpYW4vTVNcXG5WaWN0b3JpYW5pc21cXG5WaWN0b3J2aWxsZS9NXFxuVmljdHJvbGEvTVxcblZpZGFsL01cXG5WaWVubmEvTVxcblZpZW5uZXNlL01cXG5WaWVudGlhbmUvTVxcblZpZXRjb25nL01cXG5WaWV0bWluaC9NXFxuVmlldG5hbS9NXFxuVmlldG5hbWVzZS9NXFxuVmlqYXlhbmFnYXIvTVxcblZpamF5YXdhZGEvTVxcblZpa2luZy9NU1xcblZpbGEvTVxcblZpbGxhL1NNXFxuVmlsbGFycmVhbC9NXFxuVmlsbGFzL01cXG5WaWxsb24vTVxcblZpbG1hL01cXG5WaWxuaXVzL01cXG5WaWx5dWkvTVxcblZpbmNlL01cXG5WaW5jZW50L01cXG5WaW5kZW1pYXRyaXgvTVxcblZpbmVsYW5kL01cXG5WaW5zb24vTVxcblZpb2xhL01cXG5WaW9sZXQvTVxcblZpcmdpZS9NXFxuVmlyZ2lsL01cXG5WaXJnaW5pYS9NXFxuVmlyZ2luaWFuL1NNXFxuVmlyZ28vU01cXG5WaXNhL01cXG5WaXNhbGlhL01cXG5WaXNheWFucy9NXFxuVmlzaG51L01cXG5WaXNpZ290aC9NXFxuVmlzaWdvdGhzXFxuVmlzdHVsYS9NXFxuVml0aW0vTVxcblZpdG8vTVxcblZpdHVzL01cXG5WaXZhbGRpL01cXG5WaXZla2FuYW5kYS9NXFxuVml2aWFuL01cXG5WaXZpZW5uZS9NXFxuVmxhZC9NXFxuVmxhZGltaXIvTVxcblZsYWRpdm9zdG9rL01cXG5WbGFtaW5jay9NXFxuVmxhc2ljL01cXG5Wb0lQXFxuVm9ndWUvTVxcblZvbGNrZXIvTVxcblZvbGRlbW9ydC9NXFxuVm9sZ2EvTVxcblZvbGdvZ3JhZC9NXFxuVm9sa3N3YWdlbi9NXFxuVm9sc3RlYWQvTVxcblZvbHRhL01cXG5Wb2x0YWlyZS9NXFxuVm9sdm8vTVxcblZvbmRhL01cXG5Wb25uZWd1dC9NXFxuVm9yb25lemgvTVxcblZvcnN0ZXIvTVxcblZveWFnZXIvTVxcblZ0XFxuVnVpdHRvbi9NXFxuVnVsY2FuL01cXG5WdWxnXFxuVnVsZ2F0ZS9TTVxcblcvTURUXFxuV0FcXG5XQUNcXG5XQVNQL01cXG5XQVRTL01cXG5XQ1xcbldITy9NXFxuV0lcXG5XTURcXG5XTlcvTVxcbldQXFxuV1NXL01cXG5XVE9cXG5XVlxcbldXXFxuV1dJXFxuV1dJSVxcbldXVy9NXFxuV1lcXG5XWVNJV1lHXFxuV2FiYXNoL01cXG5XYWNcXG5XYWNvL01cXG5XYWRlL01cXG5XYWduZXIvTVxcbldhZ25lcmlhbi9NXFxuV2FoaGFiaS9NXFxuV2Fpa2lraS9NXFxuV2FpdGUvTVxcbldha2UvTVxcbldha3NtYW4vTVxcbldhbGQvTU5cXG5XYWxkZW1hci9NXFxuV2FsZGVuL01cXG5XYWxkZW5zaWFuL01cXG5XYWxkaGVpbS9NXFxuV2FsZG8vTVxcbldhbGRvcmYvTVxcbldhbGVzL01cXG5XYWxlc2EvTVxcbldhbGdyZWVuL1NNXFxuV2FsZ3JlZW5zL01cXG5XYWxrZXIvTVxcbldhbGttYW4vTVxcbldhbGwvU01SXFxuV2FsbGFjZS9NXFxuV2FsbGVuc3RlaW4vTVxcbldhbGxlci9NXFxuV2FsbGlzL01cXG5XYWxsb29uL01cXG5XYWxscy9NXFxuV2FsbWFydC9NXFxuV2FscG9sZS9NXFxuV2FscHVyZ2lzbmFjaHQvTVxcbldhbHNoL01cXG5XYWx0L01SWlxcbldhbHRlci9NXFxuV2FsdGVycy9NXFxuV2FsdG9uL01cXG5XYW5hbWFrZXIvTVxcbldhbmRhL01cXG5XYW5nL01cXG5XYW5rZWwvTVxcbldhcmQvTVxcbldhcmUvTUdcXG5XYXJob2wvTVxcbldhcmluZy9NXFxuV2FybmVyL01cXG5XYXJyZW4vTVxcbldhcnNhdy9NXFxuV2Fyd2ljay9NXFxuV2FzYXRjaC9NXFxuV2FzaC9NXFxuV2FzaGluZ3Rvbi9NXFxuV2FzaGluZ3Rvbmlhbi9NU1xcbldhc3Nlcm1hbm4vTVxcbldhdGVyYnVyeS9NXFxuV2F0ZXJmb3JkL01cXG5XYXRlcmdhdGUvTVxcbldhdGVybG9vL01TXFxuV2F0ZXJzL01cXG5XYXRlcnRvd24vTVxcbldhdGtpbnMvTVxcbldhdHNvbi9NXFxuV2F0c29udmlsbGUvTVxcbldhdHQvU01cXG5XYXR0ZWF1L01cXG5XYXR0cy9NXFxuV2F0dXNpL01cXG5XYXVnaC9NXFxuV2F1c2F1L01cXG5XYXZlXFxuV2F5bmUvTVxcbldheW5lc2Jvcm8vTVxcbldlYXZlci9NXFxuV2ViL01SXFxuV2ViYi9NXFxuV2ViZXIvTVxcbldlYmVybi9NXFxuV2Vic3Rlci9NU1xcbldlZC9NXFxuV2VkZGVsbC9NXFxuV2VkZ3dvb2QvTVxcbldlZG5lc2RheS9NU1xcbldlZWtzL01cXG5XZWhybWFjaHQvTVxcbldlaS9NXFxuV2VpZXJzdHJhc3MvTVxcbldlaWxsL01cXG5XZWluYmVyZy9NXFxuV2VpcnRvbi9NXFxuV2Vpc3MvTVxcbldlaXNzbXVsbGVyL01cXG5XZWl6bWFubi9NXFxuV2VsZG9uL01cXG5XZWxsYW5kL01cXG5XZWxsZXIvTVxcbldlbGxlcy9NXFxuV2VsbGluZ3Rvbi9TTVxcbldlbGxzL01cXG5XZWxzaC9NXFxuV2Vsc2htYW4vTVxcbldlbHNobWVuL01cXG5XZWxzaHdvbWFuXFxuV2VuYXRjaGVlL01cXG5XZW5kZWxsL01cXG5XZW5kaS9NXFxuV2VuZHkvTVxcbldlc2FrL01cXG5XZXNsZXkvTVxcbldlc2xleWFuL01cXG5XZXNzZXgvTVxcbldlc3Nvbi9NXFxuV2VzdC9TTVxcbldlc3Rlcm4vTVJTXFxuV2VzdGluZ2hvdXNlL01cXG5XZXN0bWluc3Rlci9NXFxuV2VzdG9uL01cXG5XZXN0cGhhbGlhL01cXG5XZXlkZW4vTVxcbldlemVuL01cXG5XaGFydG9uL01cXG5XaGVhdGllcy9NXFxuV2hlYXRzdG9uZS9NXFxuV2hlZWxlci9NXFxuV2hlZWxpbmcvTVxcbldoaWcvU01cXG5XaGlwcGxlL01cXG5XaGlybHBvb2wvTVxcbldoaXN0bGVyL01cXG5XaGl0YWtlci9NXFxuV2hpdGUvU01cXG5XaGl0ZWZpZWxkL01cXG5XaGl0ZWhhbGwvTVxcbldoaXRlaGVhZC9NXFxuV2hpdGVob3JzZS9NXFxuV2hpdGVsZXkvTVxcbldoaXRmaWVsZC9NXFxuV2hpdGxleS9NXFxuV2hpdG1hbi9NXFxuV2hpdG5leS9NXFxuV2hpdHN1bmRheS9NU1xcbldoaXR0aWVyL01cXG5XaUZpXFxuV2ljY2EvTVxcbldpY2hpdGEvTVxcbldpZW1hci9NXFxuV2llc2VsL01cXG5XaWVzZW50aGFsL01cXG5XaWdnaW5zL01cXG5XaWduZXIvTVxcbldpaS9NXFxuV2lraWxlYWtzXFxuV2lraXBlZGlhL01cXG5XaWxiZXJmb3JjZS9NXFxuV2lsYmVydC9NXFxuV2lsYnVyL01cXG5XaWxidXJuL01cXG5XaWxjb3gvTVxcbldpbGRhL01cXG5XaWxkZS9NUlxcbldpbGRlci9NXFxuV2lsZXMvTVxcbldpbGV5L01cXG5XaWxmb3JkL01cXG5XaWxmcmVkL01cXG5XaWxmcmVkby9NXFxuV2lsaGVsbS9NXFxuV2lsaGVsbWluYS9NXFxuV2lsa2Vyc29uL01cXG5XaWxrZXMvTVxcbldpbGtpbnMvTVxcbldpbGtpbnNvbi9NXFxuV2lsbC9NXFxuV2lsbGEvTVxcbldpbGxhbWV0dGUvTVxcbldpbGxhcmQvTVxcbldpbGxlbXN0YWQvTVxcbldpbGxpYW0vU01cXG5XaWxsaWFtcy9NXFxuV2lsbGlhbXNidXJnL01cXG5XaWxsaWFtc29uL01cXG5XaWxsaWFtc3BvcnQvTVxcbldpbGxpZS9NXFxuV2lsbGlzL01cXG5XaWxseS9NXFxuV2lsbWEvTVxcbldpbG1lci9NXFxuV2lsbWluZ3Rvbi9NXFxuV2lsc29uL01cXG5XaWxzb25pYW4vTVxcbldpbHRvbi9NXFxuV2ltYmxlZG9uL01cXG5XaW1zZXkvTVxcbldpbmNoZWxsL01cXG5XaW5jaGVzdGVyL01TXFxuV2luZGJyZWFrZXIvTVxcbldpbmRleC9NXFxuV2luZGhvZWsvTVxcbldpbmRvd3MvTVxcbldpbmRzb3IvU01cXG5XaW5kd2FyZC9NXFxuV2luZXNhcC9NXFxuV2luZnJlZC9NXFxuV2luZnJleS9NXFxuV2luaWZyZWQvTVxcbldpbmtsZS9NXFxuV2lubmViYWdvL01cXG5XaW5uaWUvTVxcbldpbm5pcGVnL01cXG5XaW5zdG9uL01cXG5XaW50ZXJzL01cXG5XaW50aHJvcC9NXFxuV2lzXFxuV2lzY1xcbldpc2NvbnNpbi9NXFxuV2lzY29uc2luaXRlL01TXFxuV2lzZS9NXFxuV2l0dC9NXFxuV2l0dGdlbnN0ZWluL01cXG5XaXR3YXRlcnNyYW5kL01cXG5XbS9NXFxuV29iZWdvbi9NXFxuV29kZWhvdXNlL01cXG5Xb2xmL01cXG5Xb2xmZS9NXFxuV29sZmYvTVxcbldvbGZnYW5nL01cXG5Xb2xsb25nb25nL01cXG5Xb2xsc3RvbmVjcmFmdC9NXFxuV29sc2V5L01cXG5Xb2x2ZXJoYW1wdG9uXFxuV29uZGVyL01cXG5Xb25kZXJicmEvTVxcbldvbmcvTVxcbldvb2QvU01cXG5Xb29kYXJkL01cXG5Xb29kaHVsbC9NXFxuV29vZGxhbmQvTVxcbldvb2Ryb3cvTVxcbldvb2RzL01cXG5Xb29kc3RvY2svTVxcbldvb2R3YXJkL01cXG5Xb29sZi9NXFxuV29vbGl0ZS9NXFxuV29vbG9uZ29uZy9NXFxuV29vbHdvcnRoL01cXG5Xb29zdGVyL01cXG5Xb290ZW4vTVxcbldvcmNlc3Rlci9TTVxcbldvcmNlc3RlcnNoaXJlL01cXG5Xb3JkUHJlc3MvTVxcbldvcmRzd29ydGgvTVxcbldvcmttYW4vTVxcbldvcm1zL01cXG5Xb3Rhbi9NXFxuV292b2thL01cXG5Xb3puaWFrL01cXG5Xb3p6ZWNrL01cXG5XcmFuZ2VsbC9NXFxuV3Jlbi9NXFxuV3JpZ2h0L01cXG5XcmlnbGV5L01cXG5Xcm9jbGF3L01cXG5XdS9NXFxuV3VoYW4vTVxcbld1cmxpdHplci9NXFxuV3lhdHQvTVxcbld5Y2hlcmxleS9NXFxuV3ljbGlmZmUvTVxcbld5ZXRoL01cXG5XeWxpZS9NXFxuV3lubi9NXFxuV3lvXFxuV3lvbWluZy9NXFxuV3lvbWluZ2l0ZS9TTVxcblgvTVxcblhFbWFjcy9NXFxuWEwvTVxcblhNTFxcblhTXFxuWFhMXFxuWGFtYXJpbi9NXFxuWGFuYWR1L01cXG5YYW50aGlwcGUvTVxcblhhdmllci9NXFxuWGUvU01cXG5YZW5ha2lzL01cXG5YZW5pYS9NXFxuWGVub3Bob24vTVxcblhlcm94L01TXFxuWGVyeGVzL01cXG5YaG9zYS9NXFxuWGknYW4vTVxcblhpYW4vU01cXG5YaWFvcGluZy9NXFxuWGltZW5lcy9NXFxuWGluZ3UvTVxcblhpbmppYW5nL01cXG5YaW9uZ251L01cXG5YaXphbmcvTVxcblhtYXMvTVNcXG5Yb2NoaXBpbGxpL01cXG5YdXpob3UvTVxcblkvTVxcbllNQ0EvTVxcbllNSEFcXG5ZTU1WXFxuWVRcXG5ZV0NBL01cXG5ZV0hBXFxuWWFjYy9NXFxuWWFob28vTVxcbllhaHR6ZWUvTVxcbllhaHdlaC9NXFxuWWFraW1hL01cXG5ZYWt1dC9NXFxuWWFrdXRzay9NXFxuWWFsZS9NXFxuWWFsb3cvTVxcbllhbHRhL01cXG5ZYWx1L01cXG5ZYW1hZ2F0YS9NXFxuWWFtYWhhL01cXG5ZYW1vdXNzb3Vrcm8vTVxcbllhbmcvTVxcbllhbmdvbi9NXFxuWWFuZ3R6ZS9NXFxuWWFuay9TTVxcbllhbmtlZS9TTVxcbllhb2JhbmcvTVxcbllhb3VuZGUvTVxcbllhcXVpL01cXG5ZYXJlblxcbllhcm9zbGF2bC9NXFxuWWF0YXJvL01cXG5ZYXRlcy9NXFxuWWF1Y28vTVxcblliL01cXG5ZZWFnZXIvTVxcblllYXRzL01cXG5ZZWthdGVyaW5idXJnL01cXG5ZZWxsb3drbmlmZS9NXFxuWWVsbG93c3RvbmUvTVxcblllbHRzaW4vTVxcblllbWVuL01cXG5ZZW1lbmkvU01cXG5ZZW1lbml0ZVxcblllbmlzZWkvTVxcblllcmV2YW4vTVxcblllcmtlcy9NXFxuWWVzZW5pYS9NXFxuWWV2dHVzaGVua28vTVxcbllnZ2RyYXNpbC9NXFxuWWlkZGlzaC9NXFxuWW1pci9NXFxuWW9kYS9NXFxuWW9rbmFwYXRhd3BoYS9NXFxuWW9rby9NXFxuWW9rb2hhbWEvTVxcbllvbGFuZGEvTVxcbllvbmcvTVxcbllvbmtlcnMvTVxcbllvcmsvTVxcbllvcmtpZS9NXFxuWW9ya3NoaXJlL01TXFxuWW9ya3Rvd24vTVxcbllvcnViYS9NXFxuWW9zZW1pdGUvTVxcbllvc3Nhcmlhbi9NXFxuWW91VHViZS9NXFxuWW91bmcvTVxcbllvdW5nc3Rvd24vTVxcbllwcmVzL01cXG5ZcHNpbGFudGkvTVxcbll1YW4vTVxcbll1Y2F0YW4vTVxcbll1Z28vTVxcbll1Z29zbGF2L01TXFxuWXVnb3NsYXZpYS9NXFxuWXVnb3NsYXZpYW4vU01cXG5ZdWtvbi9NXFxuWXVsZS9TTVxcbll1bGV0aWRlL01TXFxuWXVtYS9TTVxcbll1bm5hbi9NXFxuWXVyaS9NXFxuWXZlcy9NXFxuWXZldHRlL01cXG5Zdm9ubmUvTVxcblovU01OWFRcXG5aYWNoYXJpYWgvTVxcblphY2hhcnkvTVxcblphY2hlcnkvTVxcblphZ3JlYi9NXFxuWmFpcmUvTVxcblphaXJpYW5cXG5aYW1iZXppL01cXG5aYW1iaWEvTVxcblphbWJpYW4vU01cXG5aYW1ib25pL01cXG5aYW1lbmhvZi9NXFxuWmFtb3JhL01cXG5aYW5lL01cXG5aYW51Y2svTVxcblphbnppYmFyL01cXG5aYXBhdGEvTVxcblphcG9yb3poeWUvTVxcblphcG90ZWMvTVxcblphcHBhL01cXG5aYXJhL01cXG5aYXJhdGh1c3RyYS9NXFxuWmVhbGFuZC9NXFxuWmViZWRlZS9NXFxuWmVjaGFyaWFoL01cXG5aZWRla2lhaC9NXFxuWmVkb25nL01cXG5aZWZmaXJlbGxpL01cXG5aZWtlL01cXG5aZWxpZy9NXFxuWmVsbWEvTVxcblplbi9NXFxuWmVuZ2VyL01cXG5aZW5vL01cXG5aZXBoYW5pYWgvTVxcblplcGh5cmhpbGxzL01cXG5aZXBoeXJ1cy9NXFxuWmVzdC9NXFxuWmV1cy9NXFxuWmhkYW5vdlxcblpoZWppYW5nL01cXG5aaGVuZ3pob3UvTVxcblpoaXZhZ28vTVxcblpodWtvdi9NXFxuWmliby9NXFxuWmllZ2ZlbGQvTVxcblppZWdsZXIvTVxcblppZ2d5L01cXG5aaWthXFxuWmltYmFid2UvTVxcblppbWJhYndlYW4vU01cXG5aaW1tZXJtYW4vTVxcblppbmZhbmRlbC9NXFxuWmlvbi9TTVxcblppb25pc20vU01cXG5aaW9uaXN0L1NNXFxuWmlwbG9jL01cXG5abi9NXFxuWm9lL01cXG5ab2xhL01cXG5ab2xsdmVyZWluL01cXG5ab2xvZnQvTVxcblpvbWJhL01cXG5ab3JuL01cXG5ab3JvYXN0ZXIvTVxcblpvcm9hc3RyaWFuL01TXFxuWm9yb2FzdHJpYW5pc20vU01cXG5ab3Jyby9NXFxuWm9zbWEvTVxcblpyL01cXG5ac2lnbW9uZHkvTVxcblp1YmVuZWxnZW51YmkvTVxcblp1YmVuZXNjaGFtYWxpL01cXG5adWtvci9NXFxuWnVsdS9TTVxcblp1bHVsYW5kXFxuWnVuaS9NXFxuWnVyaWNoL01cXG5ad2luZ2xpL01cXG5ad29yeWtpbi9NXFxuWnlydGVjL01cXG5aeXVnYW5vdi9NXFxuWnp6XFxuYS9TXFxuYWFoXFxuYWFyZHZhcmsvU01cXG5hYi9TRFlcXG5hYmFja1xcbmFiYWN1cy9NU1xcbmFiYWZ0XFxuYWJhbG9uZS9TTVxcbmFiYW5kb24vTFNER1xcbmFiYW5kb25tZW50L01cXG5hYmFzZS9MR0RTXFxuYWJhc2VtZW50L01cXG5hYmFzaC9HTERTXFxuYWJhc2hlZC9VWVxcbmFiYXNobWVudC9NXFxuYWJhdGUvTEdEU1xcbmFiYXRlZC9VXFxuYWJhdGVtZW50L01cXG5hYmF0dG9pci9NU1xcbmFiYmUvU01cXG5hYmJlc3MvTVNcXG5hYmJleS9NU1xcbmFiYm90L01TXFxuYWJiclxcbmFiYnJldi9TXFxuYWJicmV2aWF0ZS9EU0dOWFxcbmFiYnJldmlhdGlvbi9NXFxuYWJkaWNhdGUvR05EU1hcXG5hYmRpY2F0aW9uL01cXG5hYmRvbWVuL1NNXFxuYWJkb21pbmFsXFxuYWJkdWN0L0RTR1xcbmFiZHVjdGVlL01TXFxuYWJkdWN0aW9uL1NNXFxuYWJkdWN0b3IvTVNcXG5hYmVhbVxcbmFiZXJyYW50XFxuYWJlcnJhdGlvbi9NU1xcbmFiZXJyYXRpb25hbFxcbmFiZXQvU1xcbmFiZXR0ZWRcXG5hYmV0dGluZ1xcbmFiZXR0b3IvU01cXG5hYmV5YW5jZS9NXFxuYWJob3IvU1xcbmFiaG9ycmVkXFxuYWJob3JyZW5jZS9NXFxuYWJob3JyZW50L1lcXG5hYmhvcnJpbmdcXG5hYmlkYW5jZS9NXFxuYWJpZGUvR1NcXG5hYmlkaW5nL1lcXG5hYmlsaXR5L0lFTVNcXG5hYmplY3QvWVBcXG5hYmplY3Rpb24vTVxcbmFiamVjdG5lc3MvTVxcbmFianVyYXRpb24vU01cXG5hYmp1cmF0b3J5XFxuYWJqdXJlL1pHRFJTXFxuYWJqdXJlci9NXFxuYWJsYXRlL1hHTlZEU1xcbmFibGF0aW9uL01cXG5hYmxhdGl2ZS9NU1xcbmFibGF6ZVxcbmFibGUvVVRcXG5hYmxlclxcbmFibG9vbVxcbmFibHV0aW9uL1NNXFxuYWJuZWdhdGUvR05EU1xcbmFibmVnYXRpb24vTVxcbmFibm9ybWFsL1lcXG5hYm5vcm1hbGl0eS9TTVxcbmFib2FyZFxcbmFib2RlL01TXFxuYWJvbGlzaC9HRFNcXG5hYm9saXRpb24vTVxcbmFib2xpdGlvbmlzbS9NXFxuYWJvbGl0aW9uaXN0L1NNXFxuYWJvbWluYWJsZVxcbmFib21pbmFibHlcXG5hYm9taW5hdGUvRFNHTlhcXG5hYm9taW5hdGlvbi9NXFxuYWJvcmlnaW5hbC9NU1xcbmFib3JpZ2luZS9TTVxcbmFib3JuaW5nXFxuYWJvcnQvR1ZEU1xcbmFib3J0aW9uL01TXFxuYWJvcnRpb25pc3QvTVNcXG5hYm9ydGl2ZS9ZXFxuYWJvdW5kL0RTR1xcbmFib3V0XFxuYWJvdmUvTVxcbmFib3ZlYm9hcmRcXG5hYnJhY2FkYWJyYS9NXFxuYWJyYWRlL0dEU1xcbmFicmFzaW9uL01TXFxuYWJyYXNpdmUvTVlQU1xcbmFicmFzaXZlbmVzcy9NXFxuYWJyZWFzdFxcbmFicmlkZ2UvRFNHXFxuYWJyaWRnbWVudC9NU1xcbmFicm9hZFxcbmFicm9nYXRlL1hHTkRTXFxuYWJyb2dhdGlvbi9NXFxuYWJyb2dhdG9yL01TXFxuYWJydXB0L1RQUllcXG5hYnJ1cHRuZXNzL01cXG5hYnMvTVxcbmFic2Nlc3MvTURTR1xcbmFic2Npc3NhL1NNXFxuYWJzY2lzc2lvbi9NXFxuYWJzY29uZC9aR1NEUlxcbmFic2NvbmRlci9NXFxuYWJzZWlsL01EU0dcXG5hYnNlbmNlL1NNXFxuYWJzZW50L0RZU0dcXG5hYnNlbnRlZS9NU1xcbmFic2VudGVlaXNtL01cXG5hYnNlbnRtaW5kZWQvWVBcXG5hYnNlbnRtaW5kZWRuZXNzL01cXG5hYnNpbnRoZS9NXFxuYWJzb2x1dGUvUE1ZVE5TXFxuYWJzb2x1dGVuZXNzL01cXG5hYnNvbHV0aW9uL01cXG5hYnNvbHV0aXNtL01cXG5hYnNvbHV0aXN0L01TXFxuYWJzb2x2ZS9EU0dcXG5hYnNvcmIvQUdEU1xcbmFic29yYmFuY2VcXG5hYnNvcmJlbmN5L01cXG5hYnNvcmJlbnQvU01cXG5hYnNvcmJpbmcvWVxcbmFic29ycHRpb24vTVxcbmFic29ycHRpdmVcXG5hYnN0YWluL0RSWkdTXFxuYWJzdGFpbmVyL01cXG5hYnN0ZW1pb3VzL1BZXFxuYWJzdGVtaW91c25lc3MvTVxcbmFic3RlbnRpb24vTVNcXG5hYnN0aW5lbmNlL01cXG5hYnN0aW5lbnRcXG5hYnN0cmFjdC9HU1BNRFlcXG5hYnN0cmFjdGVkL1lQXFxuYWJzdHJhY3RlZG5lc3MvTVxcbmFic3RyYWN0aW9uL1NNXFxuYWJzdHJhY3RuZXNzL01TXFxuYWJzdHJ1c2UvWVBcXG5hYnN0cnVzZW5lc3MvTVxcbmFic3VyZC9UUFJZXFxuYWJzdXJkaXN0L01TXFxuYWJzdXJkaXR5L1NNXFxuYWJzdXJkbmVzcy9NXFxuYWJ1bmRhbmNlL1NNXFxuYWJ1bmRhbnQvWVxcbmFidXNlJ3NcXG5hYnVzZS9FR1ZEU1xcbmFidXNlci9NU1xcbmFidXNpdmUvWVBcXG5hYnVzaXZlbmVzcy9NXFxuYWJ1dC9TTFxcbmFidXRtZW50L01TXFxuYWJ1dHRlZFxcbmFidXR0aW5nXFxuYWJ1enpcXG5hYnlzbWFsL1lcXG5hYnlzcy9NU1xcbmFieXNzYWxcXG5hY1xcbmFjYWNpYS9NU1xcbmFjYWRlbWUvTVxcbmFjYWRlbWlhL01cXG5hY2FkZW1pYy9TTVxcbmFjYWRlbWljYWwvWVxcbmFjYWRlbWljaWFuL01TXFxuYWNhZGVteS9TTVxcbmFjYW50aHVzL01TXFxuYWNjZWRlL0dEU1xcbmFjY2VsZXJhdGUvR05YRFNcXG5hY2NlbGVyYXRpb24vTVxcbmFjY2VsZXJhdG9yL1NNXFxuYWNjZW50L01EU0dcXG5hY2NlbnRlZC9VXFxuYWNjZW50dWFsXFxuYWNjZW50dWF0ZS9HTkRTXFxuYWNjZW50dWF0aW9uL01cXG5hY2NlcHQvRFNCR1xcbmFjY2VwdGFiaWxpdHkvTVxcbmFjY2VwdGFibGVuZXNzL01cXG5hY2NlcHRhYmx5L1VcXG5hY2NlcHRhbmNlL1NNXFxuYWNjZXB0YXRpb24vTVNcXG5hY2NlcHRlZC9VXFxuYWNjZXNzL01EU0dcXG5hY2Nlc3NpYmlsaXR5L0lNXFxuYWNjZXNzaWJsZS9JXFxuYWNjZXNzaWJseS9JXFxuYWNjZXNzaW9uL01ER1NcXG5hY2Nlc3Nvcml6ZS9EU0dcXG5hY2Nlc3NvcnkvU01cXG5hY2NpZGVudC9NU1xcbmFjY2lkZW50YWwvU01ZXFxuYWNjbGFpbS9NREdTXFxuYWNjbGFtYXRpb24vTVxcbmFjY2xpbWF0ZS9EU0dOXFxuYWNjbGltYXRpb24vTVxcbmFjY2xpbWF0aXphdGlvbi9NXFxuYWNjbGltYXRpemUvRFNHXFxuYWNjbGl2aXR5L1NNXFxuYWNjb2xhZGUvU01cXG5hY2NvbW1vZGF0ZS9YR05EU1xcbmFjY29tbW9kYXRpbmcvWVxcbmFjY29tbW9kYXRpb24vTVxcbmFjY29tcGFuaWVkL1VcXG5hY2NvbXBhbmltZW50L01TXFxuYWNjb21wYW5pc3QvU01cXG5hY2NvbXBhbnkvRFNHXFxuYWNjb21wbGljZS9TTVxcbmFjY29tcGxpc2gvRFNMR1xcbmFjY29tcGxpc2hlZC9VXFxuYWNjb21wbGlzaG1lbnQvTVNcXG5hY2NvcmQvR01EU1xcbmFjY29yZGFuY2UvTVxcbmFjY29yZGFudFxcbmFjY29yZGluZy9ZXFxuYWNjb3JkaW9uL01TXFxuYWNjb3JkaW9uaXN0L01TXFxuYWNjb3N0L0dNRFNcXG5hY2NvdW50L01EU0JHXFxuYWNjb3VudGFiaWxpdHkvTVxcbmFjY291bnRhYmxlL1VcXG5hY2NvdW50YW5jeS9NXFxuYWNjb3VudGFudC9NU1xcbmFjY291bnRlZC9VXFxuYWNjb3VudGluZy9NXFxuYWNjb3V0ZXIvU0dEXFxuYWNjb3V0ZXJtZW50cy9NXFxuYWNjcmVkaXQvU0dEXFxuYWNjcmVkaXRhdGlvbi9NXFxuYWNjcmVkaXRlZC9VXFxuYWNjcmV0aW9uL01TXFxuYWNjcnVhbC9NU1xcbmFjY3J1ZS9HRFNcXG5hY2N0XFxuYWNjdWx0dXJhdGUvRFNHTlxcbmFjY3VsdHVyYXRpb24vTVxcbmFjY3VtdWxhdGUvWEdOVkRTXFxuYWNjdW11bGF0aW9uL01cXG5hY2N1bXVsYXRvci9NU1xcbmFjY3VyYWN5L0lNXFxuYWNjdXJhdGUvSVlcXG5hY2N1cmF0ZW5lc3MvTVxcbmFjY3Vyc2VkL1BcXG5hY2N1cnNlZG5lc3MvTVxcbmFjY3VzYXRpb24vTVNcXG5hY2N1c2F0aXZlL01TXFxuYWNjdXNhdG9yeVxcbmFjY3VzZS9aR0RSU1xcbmFjY3VzZXIvTVxcbmFjY3VzaW5nL1lcXG5hY2N1c3RvbS9EU0dcXG5hY2N1c3RvbWVkL1VcXG5hY2UvRFNNR1xcbmFjZXJiYXRlL0RTR1xcbmFjZXJiaWNcXG5hY2VyYmljYWxseVxcbmFjZXJiaXR5L01cXG5hY2V0YW1pbm9waGVuL01cXG5hY2V0YXRlL01TXFxuYWNldGljXFxuYWNldG9uZS9NXFxuYWNldG9uaWNcXG5hY2V0eWxcXG5hY2V0eWxlbmUvTVxcbmFjaGUvRFNNR1xcbmFjaGVuZS9NU1xcbmFjaGlldmFibGUvVVxcbmFjaGlldmUvQkxaR0RSU1xcbmFjaGlldmVtZW50L1NNXFxuYWNoaWV2ZXIvTVxcbmFjaGluZy9ZXFxuYWNob28vTVxcbmFjaHJvbWF0aWNcXG5hY2h5L1RSXFxuYWNpZC9TTVlcXG5hY2lkaWNcXG5hY2lkaWZ5L0dEU1xcbmFjaWRpdHkvTVxcbmFjaWRvc2lzL01cXG5hY2lkdWxvdXNcXG5hY2tub3dsZWRnZS9EU0dcXG5hY2tub3dsZWRnZWQvVVxcbmFja25vd2xlZGdtZW50L1NNXFxuYWNtZS9TTVxcbmFjbmUvTVxcbmFjb2x5dGUvTVNcXG5hY29uaXRlL01TXFxuYWNvcm4vTVNcXG5hY291c3RpYy9TXFxuYWNvdXN0aWNhbC9ZXFxuYWNvdXN0aWNzL01cXG5hY3F1YWludC9BR1NEXFxuYWNxdWFpbnRhbmNlL1NNXFxuYWNxdWFpbnRhbmNlc2hpcC9NXFxuYWNxdWFpbnRlZC9VXFxuYWNxdWllc2NlL0RTR1xcbmFjcXVpZXNjZW5jZS9NXFxuYWNxdWllc2NlbnQvWVxcbmFjcXVpcmUvWkdCRFJTTFxcbmFjcXVpcmVtZW50L01cXG5hY3F1aXNpdGlvbi9NU1xcbmFjcXVpc2l0aXZlL1lQXFxuYWNxdWlzaXRpdmVuZXNzL01cXG5hY3F1aXQvU1xcbmFjcXVpdHRhbC9NU1xcbmFjcXVpdHRlZFxcbmFjcXVpdHRpbmdcXG5hY3JlL1NNXFxuYWNyZWFnZS9NU1xcbmFjcmlkL1BUUllcXG5hY3JpZGl0eS9NXFxuYWNyaWRuZXNzL01cXG5hY3JpbW9uaW91cy9ZUFxcbmFjcmltb25pb3VzbmVzcy9NXFxuYWNyaW1vbnkvTVxcbmFjcm9iYXQvTVNcXG5hY3JvYmF0aWMvU1xcbmFjcm9iYXRpY2FsbHlcXG5hY3JvYmF0aWNzL01cXG5hY3JvbnltL01TXFxuYWNyb3Bob2JpYS9NXFxuYWNyb3BvbGlzL01TXFxuYWNyb3NzXFxuYWNyb3N0aWMvU01cXG5hY3J5bGFtaWRlXFxuYWNyeWxpYy9NU1xcbmFjdCdzXFxuYWN0L0FTREdWXFxuYWN0aW5nL01cXG5hY3Rpbml1bS9NXFxuYWN0aW9uL0FTTVxcbmFjdGlvbmFibGVcXG5hY3RpdmF0ZS9JQ0FOR1NEXFxuYWN0aXZhdGlvbi9JQ0FNXFxuYWN0aXZhdG9yL01TXFxuYWN0aXZlJ3NcXG5hY3RpdmUvSUtZXFxuYWN0aXZlbmVzcy9NXFxuYWN0aXZlc1xcbmFjdGl2aXNtL01cXG5hY3RpdmlzdC9NU1xcbmFjdGl2aXRpZXNcXG5hY3Rpdml0eS9JTVxcbmFjdG9yL0FNU1xcbmFjdHJlc3MvTVNcXG5hY3R1YWwvWVxcbmFjdHVhbGl0eS9TTVxcbmFjdHVhbGl6YXRpb24vTVxcbmFjdHVhbGl6ZS9HRFNcXG5hY3R1YXJpYWxcXG5hY3R1YXJ5L1NNXFxuYWN0dWF0ZS9HTkRTXFxuYWN0dWF0aW9uL01cXG5hY3R1YXRvci9TTVxcbmFjdWl0eS9NXFxuYWN1bWVuL01cXG5hY3VwcmVzc3VyZS9NXFxuYWN1cHVuY3R1cmUvTVxcbmFjdXB1bmN0dXJpc3QvU01cXG5hY3V0ZS9QTVlUUlNcXG5hY3V0ZW5lc3MvTVxcbmFjeWNsb3Zpci9NXFxuYWN5bFxcbmFkL1NNXFxuYWRhZ2UvTVNcXG5hZGFnaW8vTVNcXG5hZGFtYW50L01ZXFxuYWRhcHQvQlpHVkRSU1xcbmFkYXB0YWJpbGl0eS9NXFxuYWRhcHRhdGlvbi9NU1xcbmFkYXB0ZXIvTVxcbmFkYXB0aW9uL1NcXG5hZGQvU0RSQlpHXFxuYWRkZW5kL01TXFxuYWRkZW5kYVxcbmFkZGVuZHVtL01cXG5hZGRlci9NXFxuYWRkaWN0L0dWTURTXFxuYWRkaWN0aW9uL1NNXFxuYWRkaXRpb24vU01cXG5hZGRpdGlvbmFsL1lcXG5hZGRpdGl2ZS9TTVxcbmFkZGxlL0dEU1xcbmFkZHJlc3Mnc1xcbmFkZHJlc3MvQUdEU1xcbmFkZHJlc3NhYmxlXFxuYWRkcmVzc2VkL1VcXG5hZGRyZXNzZWUvU01cXG5hZGR1Y2UvR0RTXFxuYWRlbmluZS9NXFxuYWRlbm9jYXJjaW5vbWFcXG5hZGVub2lkL1NNXFxuYWRlbm9pZGFsXFxuYWRlcHQvTVlQU1xcbmFkZXB0bmVzcy9NXFxuYWRlcXVhY3kvSU1cXG5hZGVxdWF0ZS9JWVxcbmFkZXF1YXRlbmVzcy9NXFxuYWRoZXJlL0dEU1xcbmFkaGVyZW5jZS9NXFxuYWRoZXJlbnQvU01cXG5hZGhlc2lvbi9NXFxuYWRoZXNpdmUvUFNNXFxuYWRoZXNpdmVuZXNzL01cXG5hZGlhYmF0aWNcXG5hZGlldS9NU1xcbmFkaW9zXFxuYWRpcG9zZVxcbmFkalxcbmFkamFjZW5jeS9NXFxuYWRqYWNlbnQvWVxcbmFkamVjdGl2YWwvWVxcbmFkamVjdGl2ZS9NU1xcbmFkam9pbi9HRFNcXG5hZGpvdXJuL0RHTFNcXG5hZGpvdXJubWVudC9TTVxcbmFkanVkZ2UvR0RTXFxuYWRqdWRpY2F0ZS9HTlZYRFNcXG5hZGp1ZGljYXRpb24vTVxcbmFkanVkaWNhdG9yL1NNXFxuYWRqdWRpY2F0b3J5XFxuYWRqdW5jdC9NU1xcbmFkanVyYXRpb24vTVNcXG5hZGp1cmUvR0RTXFxuYWRqdXN0L0FHRFNMXFxuYWRqdXN0YWJsZVxcbmFkanVzdGVyL1NNXFxuYWRqdXN0bWVudC9BTVNcXG5hZGp1dGFudC9TTVxcbmFkbWFuL01cXG5hZG1lblxcbmFkbWluL1NcXG5hZG1pbmlzdGVyL0RHU1xcbmFkbWluaXN0cmF0ZS9YRFNHTlZcXG5hZG1pbmlzdHJhdGlvbi9NXFxuYWRtaW5pc3RyYXRpdmUvWVxcbmFkbWluaXN0cmF0b3IvTVNcXG5hZG1pcmFibHlcXG5hZG1pcmFsL01TXFxuYWRtaXJhbHR5L01cXG5hZG1pcmF0aW9uL01cXG5hZG1pcmUvQlpHRFJTXFxuYWRtaXJlci9NXFxuYWRtaXJpbmcvWVxcbmFkbWlzc2liaWxpdHkvSU1cXG5hZG1pc3NpYmxlL0lcXG5hZG1pc3NpYmx5XFxuYWRtaXNzaW9uL0FNXFxuYWRtaXNzaW9uc1xcbmFkbWl0L0FTXFxuYWRtaXR0YW5jZS9NXFxuYWRtaXR0ZWQvWVxcbmFkbWl0dGluZy9BXFxuYWRtaXgvR0RTXFxuYWRtaXh0dXJlL1NNXFxuYWRtb25pc2gvTERTR1xcbmFkbW9uaXNobWVudC9NU1xcbmFkbW9uaXRpb24vTVNcXG5hZG1vbml0b3J5XFxuYWRvL01cXG5hZG9iZS9NU1xcbmFkb2xlc2NlbmNlL1NNXFxuYWRvbGVzY2VudC9TTVxcbmFkb3B0L0FHVkRTXFxuYWRvcHRhYmxlXFxuYWRvcHRlci9NU1xcbmFkb3B0aW9uL1NNXFxuYWRvcmFibGVuZXNzL01cXG5hZG9yYWJseVxcbmFkb3JhdGlvbi9NXFxuYWRvcmUvQlpHRFJTXFxuYWRvcmVyL01cXG5hZG9yaW5nL1lcXG5hZG9ybi9MR0RTXFxuYWRvcm5lZC9VXFxuYWRvcm5tZW50L01TXFxuYWRyZW5hbC9NU1xcbmFkcmVuYWxpbidzXFxuYWRyZW5hbGluZS9NXFxuYWRyZW5lcmdpY1xcbmFkcmlmdFxcbmFkcm9pdC9QWVxcbmFkcm9pdG5lc3MvTVxcbmFkc29yYi9TREdcXG5hZHNvcmJlbnQvTVNcXG5hZHNvcnB0aW9uL1NNXFxuYWR1bGF0ZS9EU0dOXFxuYWR1bGF0aW9uL01cXG5hZHVsYXRvci9NU1xcbmFkdWxhdG9yeVxcbmFkdWx0L01TXFxuYWR1bHRlcmFudC9NU1xcbmFkdWx0ZXJhdGUvR05EU1xcbmFkdWx0ZXJhdGVkL1VcXG5hZHVsdGVyYXRpb24vTVxcbmFkdWx0ZXJlci9TTVxcbmFkdWx0ZXJlc3MvTVNcXG5hZHVsdGVyb3VzXFxuYWR1bHRlcnkvU01cXG5hZHVsdGhvb2QvTVxcbmFkdW1icmF0ZS9HTkRTXFxuYWR1bWJyYXRpb24vTVxcbmFkdlxcbmFkdmFuY2UvTERTTUdcXG5hZHZhbmNlbWVudC9TTVxcbmFkdmFudGFnZS9FRFNNR1xcbmFkdmFudGFnZW91cy9FWVxcbmFkdmVudC9TTVxcbmFkdmVudGl0aW91cy9ZXFxuYWR2ZW50dXJlL0RSU01aR1xcbmFkdmVudHVyZXIvTVxcbmFkdmVudHVyZXNvbWVcXG5hZHZlbnR1cmVzcy9NU1xcbmFkdmVudHVyaXNtXFxuYWR2ZW50dXJpc3QvU1xcbmFkdmVudHVyb3VzL1lQXFxuYWR2ZW50dXJvdXNuZXNzL01cXG5hZHZlcmIvU01cXG5hZHZlcmJpYWwvU01ZXFxuYWR2ZXJzYXJpYWxcXG5hZHZlcnNhcnkvU01cXG5hZHZlcnNlL1BSWVRcXG5hZHZlcnNlbmVzcy9NXFxuYWR2ZXJzaXR5L1NNXFxuYWR2ZXJ0L1NNREdcXG5hZHZlcnRpc2UvTFpHRFJTXFxuYWR2ZXJ0aXNlZC9VXFxuYWR2ZXJ0aXNlbWVudC9NU1xcbmFkdmVydGlzZXIvTVxcbmFkdmVydGlzaW5nL01cXG5hZHZlcnRvcmlhbC9TTVxcbmFkdmljZS9NXFxuYWR2aXNhYmlsaXR5L0lNXFxuYWR2aXNhYmxlL0lcXG5hZHZpc2FibHlcXG5hZHZpc2UvTERSU1pHQlxcbmFkdmlzZWQvVVlcXG5hZHZpc2VtZW50L01cXG5hZHZpc2VyL01cXG5hZHZpc29yL1NNXFxuYWR2aXNvcnkvU01cXG5hZHZvY2FjeS9NXFxuYWR2b2NhdGUvTUdEU1xcbmFkdnRcXG5hZHdhcmVcXG5hZHplL1NNXFxuYWVnaXMvTVxcbmFlcmF0ZS9EU0dOXFxuYWVyYXRpb24vTVxcbmFlcmF0b3IvU01cXG5hZXJpYWwvU01ZXFxuYWVyaWFsaXN0L01TXFxuYWVyaWUvTVNcXG5hZXJvYmF0aWMvU1xcbmFlcm9iYXRpY3MvTVxcbmFlcm9iaWMvU1xcbmFlcm9iaWNhbGx5XFxuYWVyb2JpY3MvTVxcbmFlcm9kcm9tZS9NU1xcbmFlcm9keW5hbWljL1NcXG5hZXJvZHluYW1pY2FsbHlcXG5hZXJvZHluYW1pY3MvTVxcbmFlcm9ncmFtL1NcXG5hZXJvbmF1dGljL1NcXG5hZXJvbmF1dGljYWxcXG5hZXJvbmF1dGljcy9NXFxuYWVyb3NvbC9NU1xcbmFlcm9zcGFjZS9NXFxuYWVyeVxcbmFlc3RoZXRlL01TXFxuYWVzdGhldGljL1NcXG5hZXN0aGV0aWNhbGx5XFxuYWVzdGhldGljaXNtL01cXG5hZXN0aGV0aWNzL01cXG5hZmFyXFxuYWZmYWJpbGl0eS9NXFxuYWZmYWJsZVxcbmFmZmFibHlcXG5hZmZhaXIvTVNcXG5hZmZlY3Qnc1xcbmFmZmVjdC9FR0RTXFxuYWZmZWN0YXRpb24vU01cXG5hZmZlY3RlZC9VWVxcbmFmZmVjdGluZy9ZXFxuYWZmZWN0aW9uL0VNXFxuYWZmZWN0aW9uYXRlL1lcXG5hZmZlY3Rpb25zXFxuYWZmZXJlbnRcXG5hZmZpYW5jZS9HRFNcXG5hZmZpZGF2aXQvU01cXG5hZmZpbGlhdGUnc1xcbmFmZmlsaWF0ZS9FR05EU1xcbmFmZmlsaWF0ZWQvVVxcbmFmZmlsaWF0aW9uL0VNXFxuYWZmaWxpYXRpb25zXFxuYWZmaW5lXFxuYWZmaW5pdHkvU01cXG5hZmZpcm0vQUdEU1xcbmFmZmlybWF0aW9uL0FNU1xcbmFmZmlybWF0aXZlL01ZU1xcbmFmZml4L0dNRFNcXG5hZmZsYXR1cy9NXFxuYWZmbGljdC9HRFNcXG5hZmZsaWN0aW9uL1NNXFxuYWZmbHVlbmNlL01cXG5hZmZsdWVudC9ZXFxuYWZmb3JkL0dEU0JcXG5hZmZvcmRhYmlsaXR5XFxuYWZmb3JkYWJseVxcbmFmZm9yZXN0L0VHU0RcXG5hZmZvcmVzdGF0aW9uL01cXG5hZmZyYXkvTVNcXG5hZmZyb250L0dNRFNcXG5hZmdoYW4vTVNcXG5hZmljaW9uYWRvL01TXFxuYWZpZWxkXFxuYWZpcmVcXG5hZmxhbWVcXG5hZmxvYXRcXG5hZmx1dHRlclxcbmFmb290XFxuYWZvcmVtZW50aW9uZWRcXG5hZm9yZXNhaWRcXG5hZm9yZXRob3VnaHRcXG5hZm91bFxcbmFmcmFpZC9VXFxuYWZyZXNoXFxuYWZ0L1JaXFxuYWZ0ZXJiaXJ0aC9NXFxuYWZ0ZXJiaXJ0aHNcXG5hZnRlcmJ1cm5lci9NU1xcbmFmdGVyY2FyZS9NXFxuYWZ0ZXJlZmZlY3QvTVNcXG5hZnRlcmdsb3cvU01cXG5hZnRlcmltYWdlL01TXFxuYWZ0ZXJsaWZlL01cXG5hZnRlcmxpdmVzXFxuYWZ0ZXJtYXJrZXQvTVNcXG5hZnRlcm1hdGgvTVxcbmFmdGVybWF0aHNcXG5hZnRlcm5vb24vTVNcXG5hZnRlcnNoYXZlL1NNXFxuYWZ0ZXJzaG9jay9TTVxcbmFmdGVydGFzdGUvU01cXG5hZnRlcnRob3VnaHQvU01cXG5hZnRlcndhcmQvU1xcbmFmdGVyd29yZC9NU1xcbmFnYWluXFxuYWdhaW5zdFxcbmFnYXBlL01cXG5hZ2FyL01cXG5hZ2F0ZS9NU1xcbmFnYXZlL01cXG5hZ2UvRFNNR0pcXG5hZ2Vpc20vTVxcbmFnZWlzdC9TTVxcbmFnZWxlc3MvWVBcXG5hZ2VsZXNzbmVzcy9NXFxuYWdlbmN5L1NNXFxuYWdlbmRhL1NNXFxuYWdlbmVzaXNcXG5hZ2VudC9BTVNcXG5hZ2VyYXR1bS9NXFxuYWdnbG9tZXJhdGUvRFNNR05YXFxuYWdnbG9tZXJhdGlvbi9NXFxuYWdnbHV0aW5hdGUvRFNYR05cXG5hZ2dsdXRpbmF0aW9uL01cXG5hZ2dyYW5kaXplL0dMRFNcXG5hZ2dyYW5kaXplbWVudC9NXFxuYWdncmF2YXRlL0dOWERTXFxuYWdncmF2YXRpbmcvWVxcbmFnZ3JhdmF0aW9uL01cXG5hZ2dyZWdhdGUvTUdORFNYXFxuYWdncmVnYXRpb24vTVxcbmFnZ3JlZ2F0b3IvU01cXG5hZ2dyZXNzaW9uL01cXG5hZ2dyZXNzaXZlL1BZXFxuYWdncmVzc2l2ZW5lc3MvTVxcbmFnZ3Jlc3Nvci9TTVxcbmFnZ3JpZXZlL0RTR1xcbmFnZ3JvXFxuYWdoYXN0XFxuYWdpbGUvWVxcbmFnaWxpdHkvTVxcbmFnaW5nL01cXG5hZ2l0YXRlL1hHTkRTXFxuYWdpdGF0aW9uL01cXG5hZ2l0YXRvci9NU1xcbmFnaXRwcm9wL01cXG5hZ2xlYW1cXG5hZ2xpdHRlclxcbmFnbG93XFxuYWdub3N0aWMvTVNcXG5hZ25vc3RpY2lzbS9NXFxuYWdvXFxuYWdvZ1xcbmFnb25pc3QvU1xcbmFnb25pemUvR0RTXFxuYWdvbml6aW5nL1lcXG5hZ29ueS9TTVxcbmFnb3JhcGhvYmlhL01cXG5hZ29yYXBob2JpYy9NU1xcbmFncmFyaWFuL01TXFxuYWdyYXJpYW5pc20vTVxcbmFncmVlL0VCTERTXFxuYWdyZWVhYmxlbmVzcy9FTVxcbmFncmVlYWJseS9FXFxuYWdyZWVpbmcvRVxcbmFncmVlbWVudC9FU01cXG5hZ3JpYnVzaW5lc3MvTVNcXG5hZ3JpY3VsdHVyYWwvWVxcbmFncmljdWx0dXJhbGlzdC9NU1xcbmFncmljdWx0dXJlL01cXG5hZ3JpY3VsdHVyaXN0L01TXFxuYWdyb25vbWljXFxuYWdyb25vbWlzdC9NU1xcbmFncm9ub215L01cXG5hZ3JvdW5kXFxuYWd1ZS9NXFxuYWhcXG5haGFcXG5haGNob29cXG5haGVhZFxcbmFoZW1cXG5haG95XFxuYWlkL1NNREdcXG5haWRlL1NNXFxuYWlkZWQvVVxcbmFpZ3JldHRlL01TXFxuYWlsL1NETEdcXG5haWxlcm9uL1NNXFxuYWlsbWVudC9TTVxcbmFpbS9TTURHXFxuYWltbGVzcy9ZUFxcbmFpbWxlc3NuZXNzL01cXG5haW4ndFxcbmFpci9TTURKR1xcbmFpcmJhZy9NU1xcbmFpcmJhc2UvU01cXG5haXJiZWQvU1xcbmFpcmJvcm5lXFxuYWlyYnJ1c2gvTURTR1xcbmFpcmJ1cy9NU1xcbmFpcmNyYWZ0L01cXG5haXJjcmFmdG1hblxcbmFpcmNyYWZ0bWVuXFxuYWlyY3Jldy9TXFxuYWlyZHJvbWUvU1xcbmFpcmRyb3AvU01cXG5haXJkcm9wcGVkXFxuYWlyZHJvcHBpbmdcXG5haXJmYXJlL1NNXFxuYWlyZmllbGQvU01cXG5haXJmbG93L01cXG5haXJmb2lsL1NNXFxuYWlyZnJlaWdodC9NXFxuYWlyZ3Vuc1xcbmFpcmhlYWQvU01cXG5haXJpbHlcXG5haXJpbmVzcy9NXFxuYWlyaW5nL01cXG5haXJsZXNzL1BcXG5haXJsZXNzbmVzcy9NXFxuYWlybGV0dGVyc1xcbmFpcmxpZnQvU0dNRFxcbmFpcmxpbmUvUlNNWlxcbmFpcmxpbmVyL01cXG5haXJsb2NrL1NNXFxuYWlybWFpbC9HU01EXFxuYWlybWFuL01cXG5haXJtZW5cXG5haXJwbGFuZS9NU1xcbmFpcnBsYXkvTVxcbmFpcnBvcnQvU01cXG5haXJzaGlwL1NNXFxuYWlyc2hvdy9TXFxuYWlyc2ljay9QXFxuYWlyc2lja25lc3MvTVxcbmFpcnNwYWNlL01cXG5haXJzcGVlZFxcbmFpcnN0cmlrZS9NU1xcbmFpcnN0cmlwL1NNXFxuYWlydGlnaHRcXG5haXJ0aW1lL01cXG5haXJ3YXZlcy9NXFxuYWlyd2F5L01TXFxuYWlyd29tYW5cXG5haXJ3b21lblxcbmFpcndvcnRoaW5lc3MvTVxcbmFpcndvcnRoeS9QXFxuYWlyeS9QVFJcXG5haXNsZS9NU1xcbmFpdGNoL01TXFxuYWphclxcbmFrYVxcbmFraW1ib1xcbmFraW5cXG5hbGFiYXN0ZXIvTVxcbmFsYWNrXFxuYWxhY3JpdHkvTVxcbmFsYXJtL0dNRFNcXG5hbGFybWluZy9ZXFxuYWxhcm1pc3QvU01cXG5hbGFzXFxuYWxiL1NNXFxuYWxiYWNvcmUvU01cXG5hbGJhdHJvc3MvTVNcXG5hbGJlaXRcXG5hbGJpbmlzbS9NXFxuYWxiaW5vL01TXFxuYWxidW0vTU5TXFxuYWxidW1lbi9NXFxuYWxidW1pbi9NXFxuYWxidW1pbm91c1xcbmFsY2hlbWlzdC9TTVxcbmFsY2hlbXkvTVxcbmFsY29ob2wvU01cXG5hbGNvaG9saWMvTVNcXG5hbGNvaG9saWNhbGx5XFxuYWxjb2hvbGlzbS9NXFxuYWxjb3ZlL01TXFxuYWxkZXIvTVNcXG5hbGRlcm1hbi9NXFxuYWxkZXJtZW5cXG5hbGRlcndvbWFuL01cXG5hbGRlcndvbWVuXFxuYWxlL1NNVlxcbmFsZWF0b3J5XFxuYWxlaG91c2UvU01cXG5hbGVtYmljL1NNXFxuYWxlcnQvR01EWVBTXFxuYWxlcnRuZXNzL01cXG5hbGV3aWZlL01cXG5hbGV3aXZlc1xcbmFsZmFsZmEvTVxcbmFsZnJlc2NvXFxuYWxnYS9NXFxuYWxnYWVcXG5hbGdhbFxcbmFsZ2VicmEvU01cXG5hbGdlYnJhaWNcXG5hbGdlYnJhaWNhbGx5XFxuYWxnb3JpdGhtL1NNXFxuYWxnb3JpdGhtaWNcXG5hbGlhcy9HTURTXFxuYWxpYmkvR01EU1xcbmFsaWVuL0JHTURTXFxuYWxpZW5hYmxlL0lVXFxuYWxpZW5hdGUvRFNHTlxcbmFsaWVuYXRpb24vTVxcbmFsaWVuaXN0L1NNXFxuYWxpZ2h0L0dEU1xcbmFsaWduL0FMR0RTXFxuYWxpZ25lZC9VXFxuYWxpZ25lci9NU1xcbmFsaWdubWVudC9BTVNcXG5hbGlrZS9VXFxuYWxpbWVudC9NRFNHXFxuYWxpbWVudGFyeVxcbmFsaW1vbnkvTVxcbmFsaXZlbmVzcy9NXFxuYWxpeWFoL01cXG5hbGl5YWhzXFxuYWxrYWxpL01cXG5hbGthbGllc1xcbmFsa2FsaW5lXFxuYWxrYWxpbml0eS9NXFxuYWxrYWxpemUvRFNHXFxuYWxrYWxvaWQvU01cXG5hbGt5ZC9NU1xcbmFsbC9NXFxuYWxsYXkvR0RTXFxuYWxsZWdhdGlvbi9NU1xcbmFsbGVnZS9HRFNcXG5hbGxlZ2VkL1lcXG5hbGxlZ2lhbmNlL01TXFxuYWxsZWdvcmljXFxuYWxsZWdvcmljYWwvWVxcbmFsbGVnb3Jpc3QvTVNcXG5hbGxlZ29yeS9TTVxcbmFsbGVncmV0dG8vTVNcXG5hbGxlZ3JvL01TXFxuYWxsZWxlL01TXFxuYWxsZWx1aWEvU01cXG5hbGxlcmdlbi9TTVxcbmFsbGVyZ2VuaWNcXG5hbGxlcmdpY1xcbmFsbGVyZ2ljYWxseVxcbmFsbGVyZ2lzdC9TTVxcbmFsbGVyZ3kvU01cXG5hbGxldmlhdGUvRFNHTlxcbmFsbGV2aWF0aW9uL01cXG5hbGxleS9NU1xcbmFsbGV5d2F5L1NNXFxuYWxsaWFuY2UvU01cXG5hbGxpZ2F0b3IvTVNcXG5hbGxpdGVyYXRlL0RTWEdOVlxcbmFsbGl0ZXJhdGlvbi9NXFxuYWxsaXRlcmF0aXZlL1lcXG5hbGxvY2F0ZS9BRFNHTlxcbmFsbG9jYXRpb24vQU1cXG5hbGxvY2F0aW9uc1xcbmFsbG90L0xTXFxuYWxsb3RtZW50L1NNXFxuYWxsb3R0ZWRcXG5hbGxvdHRpbmdcXG5hbGxvdmVyXFxuYWxsb3cvRUdEU1xcbmFsbG93YWJsZS9VXFxuYWxsb3dhYmx5XFxuYWxsb3dhbmNlL1NNXFxuYWxsb3kvR01EU1xcbmFsbG95ZWQvVVxcbmFsbHNwaWNlL01cXG5hbGx1ZGUvR0RTXFxuYWxsdXJlL01HTERTXFxuYWxsdXJlbWVudC9NU1xcbmFsbHVyaW5nL1lcXG5hbGx1c2lvbi9TTVxcbmFsbHVzaXZlL1BZXFxuYWxsdXNpdmVuZXNzL01cXG5hbGx1dmlhbC9NXFxuYWxsdXZpdW0vU01cXG5hbGx5L0dEU01cXG5hbG1hbmFjL1NNXFxuYWxtaWdodHlcXG5hbG1vbmQvTVNcXG5hbG1vbmVyL1NNXFxuYWxtb3N0XFxuYWxtcy9NXFxuYWxtc2hvdXNlL01TXFxuYWxvZS9TTVxcbmFsb2Z0XFxuYWxvaGEvTVNcXG5hbG9uZVxcbmFsb25nXFxuYWxvbmdzaG9yZVxcbmFsb25nc2lkZVxcbmFsb29mL1BZXFxuYWxvb2ZuZXNzL01cXG5hbG91ZFxcbmFscC9TTVxcbmFscGFjYS9NU1xcbmFscGhhL01TXFxuYWxwaGFiZXQvU01cXG5hbHBoYWJldGljXFxuYWxwaGFiZXRpY2FsL1lcXG5hbHBoYWJldGl6YXRpb24vU01cXG5hbHBoYWJldGl6ZS9aR0RSU1xcbmFscGhhYmV0aXplci9NXFxuYWxwaGFudW1lcmljXFxuYWxwaGFudW1lcmljYWwvWVxcbmFscGluZS9TXFxuYWxyZWFkeVxcbmFscmlnaHRcXG5hbHNvXFxuYWx0L1NcXG5hbHRhci9NU1xcbmFsdGFycGllY2UvU01cXG5hbHRlci9HREJTXFxuYWx0ZXJhYmxlL1VcXG5hbHRlcmF0aW9uL01TXFxuYWx0ZXJjYXRpb24vU01cXG5hbHRlcmVkL1VcXG5hbHRlcm5hdGUvRFNNWUdOVlhcXG5hbHRlcm5hdGlvbi9NXFxuYWx0ZXJuYXRpdmUvTVlTXFxuYWx0ZXJuYXRvci9TTVxcbmFsdGhvdWdoXFxuYWx0aW1ldGVyL01TXFxuYWx0aXR1ZGUvTVNcXG5hbHRvL1NNXFxuYWx0b2dldGhlclxcbmFsdHJ1aXNtL01cXG5hbHRydWlzdC9TTVxcbmFsdHJ1aXN0aWNcXG5hbHRydWlzdGljYWxseVxcbmFsdW0vU01cXG5hbHVtaW5hL01cXG5hbHVtaW51bS9NXFxuYWx1bW5hL01cXG5hbHVtbmFlXFxuYWx1bW5pXFxuYWx1bW51cy9NXFxuYWx2ZW9sYXIvU1xcbmFsd2F5c1xcbmFtL05cXG5hbWFsZ2FtL1NNXFxuYW1hbGdhbWF0ZS9YR05EU1xcbmFtYWxnYW1hdGlvbi9NXFxuYW1hbnVlbnNlc1xcbmFtYW51ZW5zaXMvTVxcbmFtYXJhbnRoL01cXG5hbWFyYW50aHNcXG5hbWFyZXR0by9NXFxuYW1hcnlsbGlzL01TXFxuYW1hc3MvR0RTXFxuYW1hdGV1ci9TTVxcbmFtYXRldXJpc2gvWVBcXG5hbWF0ZXVyaXNobmVzcy9NXFxuYW1hdGV1cmlzbS9NXFxuYW1hdG9yeVxcbmFtYXplL0xNR0RTXFxuYW1hemVtZW50L01cXG5hbWF6aW5nL1lcXG5hbWF6b24vTVNcXG5hbWF6b25pYW5cXG5hbWJhc3NhZG9yL1NNXFxuYW1iYXNzYWRvcmlhbFxcbmFtYmFzc2Fkb3JzaGlwL01TXFxuYW1iYXNzYWRyZXNzL01TXFxuYW1iZXIvTVxcbmFtYmVyZ3Jpcy9NXFxuYW1iaWFuY2UvTVNcXG5hbWJpZGV4dGVyaXR5L01cXG5hbWJpZGV4dHJvdXMvWVxcbmFtYmllbnRcXG5hbWJpZ3VpdHkvU01cXG5hbWJpZ3VvdXMvVVlcXG5hbWJpdFxcbmFtYml0aW9uL01TXFxuYW1iaXRpb3VzL1lQXFxuYW1iaXRpb3VzbmVzcy9NXFxuYW1iaXZhbGVuY2UvTVxcbmFtYml2YWxlbnQvWVxcbmFtYmxlL01aR0RSU1xcbmFtYmxlci9NXFxuYW1icm9zaWEvTVxcbmFtYnJvc2lhbFxcbmFtYnVsYW5jZS9NU1xcbmFtYnVsYW5jZW1hblxcbmFtYnVsYW5jZW1lblxcbmFtYnVsYW5jZXdvbWFuXFxuYW1idWxhbmNld29tZW5cXG5hbWJ1bGFudFxcbmFtYnVsYXRlL0RTWEdOXFxuYW1idWxhdGlvbi9NXFxuYW1idWxhdG9yeS9TTVxcbmFtYnVzY2FkZS9NR0RTXFxuYW1idXNoL0dNRFNcXG5hbWVsaW9yYXRlL0dOVkRTXFxuYW1lbGlvcmF0aW9uL01cXG5hbWVuL0JcXG5hbWVuYWJpbGl0eS9NXFxuYW1lbmFibHlcXG5hbWVuZC9CTEdEU1xcbmFtZW5kbWVudC9TTVxcbmFtZW5pdHkvU01cXG5hbWVyY2UvR0xEU1xcbmFtZXJjZW1lbnQvU01cXG5hbWVyaWNpdW0vTVxcbmFtZXRoeXN0L1NNXFxuYW1pYWJpbGl0eS9NXFxuYW1pYWJsZVxcbmFtaWFibHlcXG5hbWljYWJpbGl0eS9NXFxuYW1pY2FibGVcXG5hbWljYWJseVxcbmFtaWRcXG5hbWlkZS9NU1xcbmFtaWRzaGlwL1NcXG5hbWlnby9NU1xcbmFtaW5lL1NcXG5hbWlub1xcbmFtaXNzXFxuYW1pdHJpcHR5bGluZVxcbmFtaXR5L01cXG5hbW1ldGVyL1NNXFxuYW1tby9NXFxuYW1tb25pYS9NXFxuYW1tb25pdW1cXG5hbW11bml0aW9uL01cXG5hbW5lc2lhL01cXG5hbW5lc2lhYy9NU1xcbmFtbmVzaWMvU01cXG5hbW5lc3R5L0dEU01cXG5hbW5pb2NlbnRlc2VzXFxuYW1uaW9jZW50ZXNpcy9NXFxuYW1uaW9uL01TXFxuYW1uaW90aWNcXG5hbW9lYmEvTVNcXG5hbW9lYmFlXFxuYW1vZWJpY1xcbmFtb2tcXG5hbW9uZ1xcbmFtb250aWxsYWRvL1NNXFxuYW1vcmFsL1lcXG5hbW9yYWxpdHkvTVxcbmFtb3JvdXMvWVBcXG5hbW9yb3VzbmVzcy9NXFxuYW1vcnBob3VzL1BZXFxuYW1vcnBob3VzbmVzcy9NXFxuYW1vcnRpemF0aW9uL1NNXFxuYW1vcnRpemUvRFNHQlxcbmFtb3VudC9HTURTXFxuYW1vdXIvTVNcXG5hbW94aWNpbGxpblxcbmFtcC9TTVlcXG5hbXBlcmFnZS9NXFxuYW1wZXJlL01TXFxuYW1wZXJzYW5kL01TXFxuYW1waGV0YW1pbmUvU01cXG5hbXBoaWJpYW4vTVNcXG5hbXBoaWJpb3VzL1lcXG5hbXBoaXRoZWF0ZXIvU01cXG5hbXBob3JhL01cXG5hbXBob3JhZVxcbmFtcGljaWxsaW5cXG5hbXBsZS9UUlxcbmFtcGxpZmljYXRpb24vTVxcbmFtcGxpZmllci9NXFxuYW1wbGlmeS9ORFJTWFpHXFxuYW1wbGl0dWRlL1NNXFxuYW1wdWxlL01TXFxuYW1wdXRhdGUvR05EU1hcXG5hbXB1dGF0aW9uL01cXG5hbXB1dGVlL01TXFxuYW10XFxuYW11bGV0L01TXFxuYW11c2UvTEdEU1xcbmFtdXNlbWVudC9NU1xcbmFtdXNpbmcvWVxcbmFteWdkYWxhXFxuYW15bGFzZS9NXFxuYW15bG9pZFxcbmFuL0NTXFxuYW5hYm9saXNtL01cXG5hbmFjaHJvbmlzbS9TTVxcbmFuYWNocm9uaXN0aWNcXG5hbmFjaHJvbmlzdGljYWxseVxcbmFuYWNvbmRhL1NNXFxuYW5hZXJvYmUvU01cXG5hbmFlcm9iaWNcXG5hbmFlcm9iaWNhbGx5XFxuYW5hZ3JhbS9NU1xcbmFuYWwvWVxcbmFuYWxnZXNpYS9NXFxuYW5hbGdlc2ljL1NNXFxuYW5hbG9nL01TXFxuYW5hbG9naWNhbC9ZXFxuYW5hbG9naXplL0dEU1xcbmFuYWxvZ291cy9ZUFxcbmFuYWxvZ291c25lc3MvTVxcbmFuYWxvZ3VlL1NNXFxuYW5hbG9neS9TTVxcbmFuYWx5c2FuZC9NU1xcbmFuYWx5c2VzL0FcXG5hbmFseXNpcy9BTVxcbmFuYWx5c3QvU01cXG5hbmFseXRpYy9TXFxuYW5hbHl0aWNhbC9ZXFxuYW5hbHl6YWJsZVxcbmFuYWx5emUvQURTR1xcbmFuYWx5emVyL1NNXFxuYW5hcGVzdC9TTVxcbmFuYXBlc3RpYy9NU1xcbmFuYXJjaGljXFxuYW5hcmNoaWNhbGx5XFxuYW5hcmNoaXNtL01cXG5hbmFyY2hpc3QvTVNcXG5hbmFyY2hpc3RpY1xcbmFuYXJjaHkvTVxcbmFuYXRoZW1hL1NNXFxuYW5hdGhlbWF0aXplL0RTR1xcbmFuYXRvbWljXFxuYW5hdG9taWNhbC9ZXFxuYW5hdG9taXN0L1NNXFxuYW5hdG9taXplL0RTR1xcbmFuYXRvbXkvU01cXG5hbmNlc3Rvci9TTVxcbmFuY2VzdHJhbC9ZXFxuYW5jZXN0cmVzcy9NU1xcbmFuY2VzdHJ5L1NNXFxuYW5jaG9yL01ER1NcXG5hbmNob3JhZ2UvTVNcXG5hbmNob3JpdGUvTVNcXG5hbmNob3JtYW4vTVxcbmFuY2hvcm1lblxcbmFuY2hvcnBlb3BsZVxcbmFuY2hvcnBlcnNvbi9TTVxcbmFuY2hvcndvbWFuL01cXG5hbmNob3J3b21lblxcbmFuY2hvdnkvU01cXG5hbmNpZW50L1NQTVJZVFxcbmFuY2llbnRuZXNzL01cXG5hbmNpbGxhcnkvU01cXG5hbmRcXG5hbmRhbnRlL1NNXFxuYW5kaXJvbi9TTVxcbmFuZHJvZ2VuL01cXG5hbmRyb2dlbmljXFxuYW5kcm9neW5vdXNcXG5hbmRyb2d5bnkvTVxcbmFuZHJvaWQvU01cXG5hbmVjZG90YWwvWVxcbmFuZWNkb3RlL01TXFxuYW5lbWlhL01cXG5hbmVtaWNcXG5hbmVtaWNhbGx5XFxuYW5lbW9tZXRlci9TTVxcbmFuZW1vbmUvU01cXG5hbmVudFxcbmFuZXN0aGVzaWEvTVxcbmFuZXN0aGVzaW9sb2dpc3QvU01cXG5hbmVzdGhlc2lvbG9neS9NXFxuYW5lc3RoZXRpYy9TTVxcbmFuZXN0aGV0aXN0L01TXFxuYW5lc3RoZXRpemF0aW9uL01cXG5hbmVzdGhldGl6ZS9HRFNcXG5hbmV1cnlzbS9TTVxcbmFuZXdcXG5hbmdlbC9NU1xcbmFuZ2VsZmlzaC9NU1xcbmFuZ2VsaWNcXG5hbmdlbGljYS9NXFxuYW5nZWxpY2FsL1lcXG5hbmdlci9HTURTXFxuYW5naW5hL01cXG5hbmdpb3BsYXN0eS9TTVxcbmFuZ2lvc3Blcm0vU01cXG5hbmdsZS9NWkdEUlNcXG5hbmdsZXIvTVxcbmFuZ2xld29ybS9NU1xcbmFuZ2xpY2lzbS9TXFxuYW5nbGljaXplL0dEU1xcbmFuZ2xpbmcvTVxcbmFuZ2xvcGhpbGUvU1xcbmFuZ2xvcGhvbmUvU1xcbmFuZ29yYS9NU1xcbmFuZ29zdHVyYVxcbmFuZ3JpbHlcXG5hbmdyeS9UUlxcbmFuZ3N0L01cXG5hbmdzdHJvbS9NU1xcbmFuZ3Vpc2gvR01EU1xcbmFuZ3VsYXJcXG5hbmd1bGFyaXR5L1NNXFxuYW5ndWxhdGlvblxcbmFuaHlkcm91c1xcbmFuaWxpbmUvTVxcbmFuaWxpbmd1c1xcbmFuaW1hZHZlcnNpb24vTVNcXG5hbmltYWR2ZXJ0L0dTRFxcbmFuaW1hbC9NU1xcbmFuaW1hbGN1bGUvU01cXG5hbmltYXRlL0FEU0dOXFxuYW5pbWF0ZWQvWVxcbmFuaW1hdGlvbi9BTVxcbmFuaW1hdGlvbnNcXG5hbmltYXRvci9NU1xcbmFuaW1lL01cXG5hbmltaXNtL01cXG5hbmltaXN0L1NNXFxuYW5pbWlzdGljXFxuYW5pbW9zaXR5L1NNXFxuYW5pbXVzL01cXG5hbmlvbi9NU1xcbmFuaW9uaWNcXG5hbmlzZS9NXFxuYW5pc2VlZC9NXFxuYW5pc2V0dGUvTVxcbmFua2gvTVxcbmFua2hzXFxuYW5rbGUvTVNcXG5hbmtsZWJvbmUvTVNcXG5hbmtsZXQvTVNcXG5hbm5hbGlzdC9TTVxcbmFubmFscy9NXFxuYW5uZWFsL0dEU1xcbmFubmVsaWQvTVNcXG5hbm5leC9HTURTXFxuYW5uZXhhdGlvbi9NU1xcbmFubmloaWxhdGUvRFNHTlxcbmFubmloaWxhdGlvbi9NXFxuYW5uaWhpbGF0b3IvU01cXG5hbm5pdmVyc2FyeS9TTVxcbmFubm90YXRlL0RTWEdOVlxcbmFubm90YXRpb24vTVxcbmFubm90YXRvci9NU1xcbmFubm91bmNlL0RSU0xaR1xcbmFubm91bmNlZC9VXFxuYW5ub3VuY2VtZW50L01TXFxuYW5ub3VuY2VyL01cXG5hbm5veS9HRFNcXG5hbm5veWFuY2UvTVNcXG5hbm5veWluZy9ZXFxuYW5udWFsL01ZU1xcbmFubnVhbGl6ZWRcXG5hbm51aXRhbnQvU01cXG5hbm51aXR5L1NNXFxuYW5udWwvTFNcXG5hbm51bGFyXFxuYW5udWxsZWRcXG5hbm51bGxpbmdcXG5hbm51bG1lbnQvU01cXG5hbm51bHVzXFxuYW5udW5jaWF0aW9uL1NNXFxuYW5vZGUvTVNcXG5hbm9kaXplL0dEU1xcbmFub2R5bmUvTVNcXG5hbm9pbnQvR0RMU1xcbmFub2ludG1lbnQvTVxcbmFub21hbG91cy9ZXFxuYW5vbWFseS9TTVxcbmFub24vU1xcbmFub255bWl0eS9NXFxuYW5vbnltb3VzL1lcXG5hbm9waGVsZXMvTVxcbmFub3Jhay9NU1xcbmFub3JlY3RpYy9TTVxcbmFub3JleGlhL01cXG5hbm9yZXhpYy9NU1xcbmFub3RoZXJcXG5hbnN3ZXIvQk1ER1NcXG5hbnN3ZXJhYmxlL1VcXG5hbnN3ZXJlZC9VXFxuYW5zd2VycGhvbmUvU1xcbmFudC9TTURcXG5hbnRhY2lkL1NNXFxuYW50YWdvbmlzbS9TTVxcbmFudGFnb25pc3QvU01cXG5hbnRhZ29uaXN0aWNcXG5hbnRhZ29uaXN0aWNhbGx5XFxuYW50YWdvbml6ZS9EU0dcXG5hbnRhcmN0aWNcXG5hbnRlL1NNXFxuYW50ZWF0ZXIvTVNcXG5hbnRlYmVsbHVtXFxuYW50ZWNlZGVuY2UvTVxcbmFudGVjZWRlbnQvU01cXG5hbnRlY2hhbWJlci9TTVxcbmFudGVkYXRlL0dEU1xcbmFudGVkaWx1dmlhblxcbmFudGVpbmdcXG5hbnRlbG9wZS9NU1xcbmFudGVuYXRhbFxcbmFudGVubmEvU01cXG5hbnRlbm5hZVxcbmFudGVyaW9yXFxuYW50ZXJvb20vTVNcXG5hbnRoZW0vTVNcXG5hbnRoZXIvTVNcXG5hbnRoaWxsL1NNXFxuYW50aG9sb2dpc3QvU01cXG5hbnRob2xvZ2l6ZS9EU0dcXG5hbnRob2xvZ3kvU01cXG5hbnRocmFjaXRlL01cXG5hbnRocmF4L01cXG5hbnRocm9wb2NlbnRyaWNcXG5hbnRocm9wb2lkL01TXFxuYW50aHJvcG9sb2dpY2FsL1lcXG5hbnRocm9wb2xvZ2lzdC9TTVxcbmFudGhyb3BvbG9neS9NXFxuYW50aHJvcG9tb3JwaGljXFxuYW50aHJvcG9tb3JwaGljYWxseVxcbmFudGhyb3BvbW9ycGhpc20vTVxcbmFudGhyb3BvbW9ycGhpemVcXG5hbnRocm9wb21vcnBob3VzXFxuYW50aS9TTVxcbmFudGlhYm9ydGlvblxcbmFudGlhYm9ydGlvbmlzdC9NU1xcbmFudGlhaXJjcmFmdFxcbmFudGliYWN0ZXJpYWwvTVNcXG5hbnRpYmlvdGljL01TXFxuYW50aWJvZHkvU01cXG5hbnRpYy9NU1xcbmFudGljYW5jZXJcXG5hbnRpY2lwYXRlL0dOWERTXFxuYW50aWNpcGF0ZWQvVVxcbmFudGljaXBhdGlvbi9NXFxuYW50aWNpcGF0b3J5XFxuYW50aWNrZWRcXG5hbnRpY2tpbmdcXG5hbnRpY2xlcmljYWxcXG5hbnRpY2xpbWFjdGljXFxuYW50aWNsaW1hY3RpY2FsbHlcXG5hbnRpY2xpbWF4L01TXFxuYW50aWNsaW5lL1NNXFxuYW50aWNsb2Nrd2lzZVxcbmFudGljb2FndWxhbnQvTVNcXG5hbnRpY29tbXVuaXNtL01cXG5hbnRpY29tbXVuaXN0L1NNXFxuYW50aWN5Y2xvbmUvU01cXG5hbnRpY3ljbG9uaWNcXG5hbnRpZGVtb2NyYXRpY1xcbmFudGlkZXByZXNzYW50L01TXFxuYW50aWRvdGUvTVNcXG5hbnRpZmFzY2lzdC9NU1xcbmFudGlmZXJyb21hZ25ldGljXFxuYW50aWZyZWV6ZS9NXFxuYW50aWdlbi9TTVxcbmFudGlnZW5pY1xcbmFudGlnZW5pY2l0eS9NXFxuYW50aWhlcm8vTVxcbmFudGloZXJvZXNcXG5hbnRpaGlzdGFtaW5lL1NNXFxuYW50aWtub2NrL01cXG5hbnRpbGFib3JcXG5hbnRpbG9nYXJpdGhtL1NNXFxuYW50aW1hY2Fzc2FyL01TXFxuYW50aW1hbGFyaWFsXFxuYW50aW1hdHRlci9NXFxuYW50aW1pY3JvYmlhbFxcbmFudGltaXNzaWxlXFxuYW50aW1vbnkvTVxcbmFudGluZXV0cmluby9TTVxcbmFudGluZXV0cm9uL01TXFxuYW50aW51Y2xlYXJcXG5hbnRpb3hpZGFudC9NU1xcbmFudGlwYXJ0aWNsZS9TTVxcbmFudGlwYXN0aVxcbmFudGlwYXN0by9NU1xcbmFudGlwYXRoZXRpY1xcbmFudGlwYXRoeS9TTVxcbmFudGlwZXJzb25uZWxcXG5hbnRpcGVyc3BpcmFudC9TTVxcbmFudGlwaG9uL1NNXFxuYW50aXBob25hbC9NWVNcXG5hbnRpcG9kYWwvU1xcbmFudGlwb2RlYW4vTVNcXG5hbnRpcG9kZXMvTVxcbmFudGlwb2xsdXRpb25cXG5hbnRpcG92ZXJ0eVxcbmFudGlwcm90b24vTVNcXG5hbnRpcXVhcmlhbi9TTVxcbmFudGlxdWFyaWFuaXNtL01cXG5hbnRpcXVhcnkvU01cXG5hbnRpcXVhdGUvR0RTXFxuYW50aXF1ZS9EU01HXFxuYW50aXF1aXR5L1NNXFxuYW50aXJyaGludW0vU1xcbmFudGlzY2llbmNlXFxuYW50aXNlbWl0aWNcXG5hbnRpc2VtaXRpc20vTVxcbmFudGlzZXBzaXMvTVxcbmFudGlzZXB0aWMvU01cXG5hbnRpc2VwdGljYWxseVxcbmFudGlzZXJ1bS9NU1xcbmFudGlzbGF2ZXJ5XFxuYW50aXNvY2lhbC9ZXFxuYW50aXNwYXNtb2RpYy9NU1xcbmFudGlzdWJtYXJpbmVcXG5hbnRpdGFua1xcbmFudGl0aGVzZXNcXG5hbnRpdGhlc2lzL01cXG5hbnRpdGhldGljXFxuYW50aXRoZXRpY2FsL1lcXG5hbnRpdG94aW4vTVNcXG5hbnRpdHJ1c3RcXG5hbnRpdmVuaW4vTVNcXG5hbnRpdmVub21cXG5hbnRpdmlyYWwvTVNcXG5hbnRpdmlydXNcXG5hbnRpdml2aXNlY3Rpb25pc3QvTVNcXG5hbnRpd2FyXFxuYW50bGVyL01EU1xcbmFudG9ueW0vU01cXG5hbnRvbnltb3VzXFxuYW50cnVtXFxuYW50c3kvVFJcXG5hbnVzL01TXFxuYW52aWwvTVNcXG5hbnhpZXR5L1NNXFxuYW54aW91cy9ZUFxcbmFueGlvdXNuZXNzL01cXG5hbnlcXG5hbnlib2R5L1NNXFxuYW55aG93XFxuYW55bW9yZVxcbmFueW9uZS9NXFxuYW55cGxhY2VcXG5hbnl0aGluZy9TTVxcbmFueXRpbWVcXG5hbnl3YXkvU1xcbmFueXdoZXJlXFxuYW55d2lzZVxcbmFvcnRhL01TXFxuYW9ydGljXFxuYXBhY2VcXG5hcGFydFxcbmFwYXJ0aGVpZC9NXFxuYXBhcnRtZW50L01TXFxuYXBhdGhldGljXFxuYXBhdGhldGljYWxseVxcbmFwYXRoeS9NXFxuYXBhdGl0ZS9NXFxuYXBlL0RTTUdcXG5hcGVsaWtlXFxuYXBlcml0aWYvTVNcXG5hcGVydHVyZS9TTVxcbmFwZXgvTVNcXG5hcGhhc2lhL01cXG5hcGhhc2ljL01TXFxuYXBoZWxpYVxcbmFwaGVsaW9uL1NNXFxuYXBoaWQvTVNcXG5hcGhvcmlzbS9NU1xcbmFwaG9yaXN0aWNcXG5hcGhvcmlzdGljYWxseVxcbmFwaHJvZGlzaWFjL1NNXFxuYXBpYXJpc3QvU01cXG5hcGlhcnkvU01cXG5hcGljYWwvWVxcbmFwaWVjZVxcbmFwaXNoL1lcXG5hcGxlbnR5XFxuYXBsb21iL01cXG5hcG9jYWx5cHNlL1NNXFxuYXBvY2FseXB0aWNcXG5hcG9jcnlwaGEvTVxcbmFwb2NyeXBoYWwvWVxcbmFwb2dlZS9NU1xcbmFwb2xpdGljYWwvWVxcbmFwb2xvZ2V0aWMvVVxcbmFwb2xvZ2V0aWNhbGx5XFxuYXBvbG9naWEvU01cXG5hcG9sb2dpc3QvTVNcXG5hcG9sb2dpemUvR0RTXFxuYXBvbG9neS9TTVxcbmFwb3BsZWN0aWNcXG5hcG9wbGV4eS9TTVxcbmFwb3B0b3Npc1xcbmFwb3B0b3RpY1xcbmFwb3N0YXN5L1NNXFxuYXBvc3RhdGUvU01cXG5hcG9zdGF0aXplL0dEU1xcbmFwb3N0bGUvTVNcXG5hcG9zdGxlc2hpcC9NXFxuYXBvc3RvbGljXFxuYXBvc3Ryb3BoZS9NU1xcbmFwb3RoZWNhcnkvU01cXG5hcG90aGVnbS9TTVxcbmFwb3RoZW9zZXNcXG5hcG90aGVvc2lzL01cXG5hcHAvU01cXG5hcHBhbGwvR0RTXFxuYXBwYWxsaW5nL1lcXG5hcHBhbG9vc2EvTVNcXG5hcHBhcmF0Y2hpay9TXFxuYXBwYXJhdHVzL01TXFxuYXBwYXJlbC9NREdTXFxuYXBwYXJlbnQvWVxcbmFwcGFyaXRpb24vU01cXG5hcHBlYWwvR01EU1xcbmFwcGVhbGluZy9VWVxcbmFwcGVhci9BRVNER1xcbmFwcGVhcmFuY2UvRUFNU1xcbmFwcGVhc2UvTFpHRFJTXFxuYXBwZWFzZW1lbnQvU01cXG5hcHBlYXNlci9NXFxuYXBwZWxsYW50L1NNXFxuYXBwZWxsYXRlL1hOXFxuYXBwZWxsYXRpb24vTVxcbmFwcGVuZC9HRFNcXG5hcHBlbmRhZ2UvU01cXG5hcHBlbmRlY3RvbXkvU01cXG5hcHBlbmRpY2VzXFxuYXBwZW5kaWNpdGlzL01cXG5hcHBlbmRpeC9NU1xcbmFwcGVydGFpbi9HRFNcXG5hcHBldGl0ZS9TTVxcbmFwcGV0aXplci9NU1xcbmFwcGV0aXppbmcvWVxcbmFwcGxhdWQvWkdEUlNcXG5hcHBsYXVkZXIvTVxcbmFwcGxhdXNlL01cXG5hcHBsZS9NU1xcbmFwcGxlamFjay9NXFxuYXBwbGVzYXVjZS9NXFxuYXBwbGV0L01TXFxuYXBwbGlhbmNlL1NNXFxuYXBwbGljYWJpbGl0eS9NXFxuYXBwbGljYWJsZS9JXFxuYXBwbGljYWJseVxcbmFwcGxpY2FudC9TTVxcbmFwcGxpY2F0aW9uL0FNXFxuYXBwbGljYXRvci9TTVxcbmFwcGxpZXIvTVNcXG5hcHBsaXF1ZS9EU01cXG5hcHBsaXF1ZWluZ1xcbmFwcGx5L0FOWEdEU1xcbmFwcG9pbnQvQUVMU1ZHRFxcbmFwcG9pbnRlZS9TTVxcbmFwcG9pbnRtZW50J3MvQVxcbmFwcG9pbnRtZW50L0VTTVxcbmFwcG9ydGlvbi9BR0RMU1xcbmFwcG9ydGlvbm1lbnQvQU1cXG5hcHBvc2UvR0RTXFxuYXBwb3NpdGUvWU5WUFxcbmFwcG9zaXRlbmVzcy9NXFxuYXBwb3NpdGlvbi9NXFxuYXBwb3NpdGl2ZS9TTVxcbmFwcHJhaXNhbC9BTVNcXG5hcHByYWlzZS9BRFNHXFxuYXBwcmFpc2VyL01TXFxuYXBwcmVjaWFibGUvSVxcbmFwcHJlY2lhYmx5L0lcXG5hcHByZWNpYXRlL0RTWEdOVlxcbmFwcHJlY2lhdGVkL1VcXG5hcHByZWNpYXRpb24vTVxcbmFwcHJlY2lhdGl2ZS9ZXFxuYXBwcmVjaWF0b3IvTVNcXG5hcHByZWNpYXRvcnlcXG5hcHByZWhlbmQvR0RTXFxuYXBwcmVoZW5zaW9uL01TXFxuYXBwcmVoZW5zaXZlL1lQXFxuYXBwcmVoZW5zaXZlbmVzcy9NXFxuYXBwcmVudGljZS9EU01HXFxuYXBwcmVudGljZXNoaXAvTVNcXG5hcHByaXNlL0dEU1xcbmFwcHJpemUvR0RTXFxuYXBwcm9hY2gvR0JNRFNcXG5hcHByb2FjaGFibGUvVUlcXG5hcHByb2JhdGlvbi9FTVxcbmFwcHJvYmF0aW9uc1xcbmFwcHJvcHJpYXRlL1BZR05YRFNcXG5hcHByb3ByaWF0ZWQvVVxcbmFwcHJvcHJpYXRlbmVzcy9JTVxcbmFwcHJvcHJpYXRpb24vTVxcbmFwcHJvcHJpYXRvci9TTVxcbmFwcHJvdmFsL0VNXFxuYXBwcm92YWxzXFxuYXBwcm92ZS9FR0RTXFxuYXBwcm92ZWQvVVxcbmFwcHJvdmluZy9FWVxcbmFwcHJveFxcbmFwcHJveGltYXRlL0RTWFlHTlxcbmFwcHJveGltYXRpb24vTVxcbmFwcHVydGVuYW5jZS9TTVxcbmFwcHVydGVuYW50XFxuYXByaWNvdC9NU1xcbmFwcm9uL01TXFxuYXByb3Bvc1xcbmFwc2UvU01cXG5hcHQvSVlQVFxcbmFwdGVyXFxuYXB0aXR1ZGUvU01cXG5hcHRuZXNzL0lNXFxuYXF1YS9TTVxcbmFxdWFjdWx0dXJlL01cXG5hcXVhbHVuZy9NU1xcbmFxdWFtYXJpbmUvU01cXG5hcXVhbmF1dC9NU1xcbmFxdWFwbGFuZS9NR0RTXFxuYXF1YXJpdW0vTVNcXG5hcXVhdGljL1NNXFxuYXF1YXRpY2FsbHlcXG5hcXVhdGljcy9NXFxuYXF1YXRpbnQvU1xcbmFxdWF2aXQvTVxcbmFxdWVkdWN0L01TXFxuYXF1ZW91c1xcbmFxdWlmZXIvU01cXG5hcXVpbGluZVxcbmFyYWJlc3F1ZS9NU1xcbmFyYWJpbGl0eS9NXFxuYXJhY2huaWQvTVNcXG5hcmFjaG5vcGhvYmlhXFxuYXJiaXRlci9TTVxcbmFyYml0cmFnZS9NWkdEUlNcXG5hcmJpdHJhZ2VyL01cXG5hcmJpdHJhZ2V1ci9TTVxcbmFyYml0cmFtZW50L1NNXFxuYXJiaXRyYXJpbHlcXG5hcmJpdHJhcmluZXNzL01cXG5hcmJpdHJhcnkvUFxcbmFyYml0cmF0ZS9HTkRTXFxuYXJiaXRyYXRpb24vTVxcbmFyYml0cmF0b3IvTVNcXG5hcmJvci9NU1xcbmFyYm9yZWFsXFxuYXJib3JldHVtL1NNXFxuYXJib3J2aXRhZS9TTVxcbmFyYnV0dXMvTVNcXG5hcmMvU01ER1xcbmFyY2FkZS9NU1xcbmFyY2FuZVxcbmFyY2gvUFpUR1ZNRFJTWVxcbmFyY2hhZW9sb2dpY2FsL1lcXG5hcmNoYWVvbG9naXN0L1NNXFxuYXJjaGFlb2xvZ3kvTVxcbmFyY2hhaWNcXG5hcmNoYWljYWxseVxcbmFyY2hhaXNtL01TXFxuYXJjaGFpc3QvTVNcXG5hcmNoYW5nZWwvTVNcXG5hcmNoYmlzaG9wL1NNXFxuYXJjaGJpc2hvcHJpYy9TTVxcbmFyY2hkZWFjb24vU01cXG5hcmNoZGlvY2VzYW5cXG5hcmNoZGlvY2VzZS9NU1xcbmFyY2hkdWNoZXNzL01TXFxuYXJjaGR1a2UvTVNcXG5hcmNoZW5lbXkvU01cXG5hcmNoZXIvTVxcbmFyY2hlcnkvTVxcbmFyY2hldHlwYWxcXG5hcmNoZXR5cGUvTVNcXG5hcmNoZmllbmQvTVNcXG5hcmNoaWVwaXNjb3BhbFxcbmFyY2hpcGVsYWdvL01TXFxuYXJjaGl0ZWN0L1NNXFxuYXJjaGl0ZWN0b25pYy9TXFxuYXJjaGl0ZWN0b25pY3MvTVxcbmFyY2hpdGVjdHVyYWwvWVxcbmFyY2hpdGVjdHVyZS9NU1xcbmFyY2hpdHJhdmUvU01cXG5hcmNoaXZhbFxcbmFyY2hpdmUvRFNNR1xcbmFyY2hpdmlzdC9NU1xcbmFyY2huZXNzL01cXG5hcmNod2F5L1NNXFxuYXJjdGljL01TXFxuYXJkZW50L1lcXG5hcmRvci9NU1xcbmFyZHVvdXMvWVBcXG5hcmR1b3VzbmVzcy9NXFxuYXJlL1NNQlxcbmFyZWEvU01cXG5hcmVhbFxcbmFyZW4ndFxcbmFyZW5hL01TXFxuYXJnZW50L01cXG5hcmdpbmluZVxcbmFyZ29uL01cXG5hcmdvc3kvU01cXG5hcmdvdC9NU1xcbmFyZ3VhYmxlL0lVXFxuYXJndWFibHkvVVxcbmFyZ3VlL1pHRFJTXFxuYXJndWVyL01cXG5hcmd1bWVudC9NU1xcbmFyZ3VtZW50YXRpb24vTVxcbmFyZ3VtZW50YXRpdmUvUFlcXG5hcmd1bWVudGF0aXZlbmVzcy9NXFxuYXJneWxlL01TXFxuYXJpYS9TTVxcbmFyaWQvWVxcbmFyaWRpdHkvTVxcbmFyaWdodFxcbmFyaXNlL0dTXFxuYXJpc2VuXFxuYXJpc3RvY3JhY3kvU01cXG5hcmlzdG9jcmF0L1NNXFxuYXJpc3RvY3JhdGljXFxuYXJpc3RvY3JhdGljYWxseVxcbmFyaXRobWV0aWMvTVxcbmFyaXRobWV0aWNhbC9ZXFxuYXJpdGhtZXRpY2lhbi9NU1xcbmFyay9TTVxcbmFybSdzXFxuYXJtL0VBR0RTXFxuYXJtYWRhL01TXFxuYXJtYWRpbGxvL1NNXFxuYXJtYW1lbnQvQUVNXFxuYXJtYW1lbnRzXFxuYXJtYXR1cmUvTVNcXG5hcm1iYW5kL01TXFxuYXJtY2hhaXIvTVNcXG5hcm1lZC9VXFxuYXJtZnVsL01TXFxuYXJtaG9sZS9TTVxcbmFybWlzdGljZS9TTVxcbmFybWxldC9NU1xcbmFybWxvYWQvU1xcbmFybW9yL1pHTURSU1xcbmFybW9yZWQvVVxcbmFybW9yZXIvTVxcbmFybW9yaWFsXFxuYXJtb3J5L1NNXFxuYXJtcGl0L01TXFxuYXJtcmVzdC9TTVxcbmFybXkvU01cXG5hcm9tYS9NU1xcbmFyb21hdGhlcmFwaXN0L01TXFxuYXJvbWF0aGVyYXB5L01cXG5hcm9tYXRpYy9NU1xcbmFyb21hdGljYWxseVxcbmFyb3NlXFxuYXJvdW5kXFxuYXJvdXNhbC9NXFxuYXJvdXNlL0dEU1xcbmFycGVnZ2lvL01TXFxuYXJyXFxuYXJyYWlnbi9ER1NMXFxuYXJyYWlnbm1lbnQvU01cXG5hcnJhbmdlL0FFU0RMR1xcbmFycmFuZ2VtZW50J3MvRVxcbmFycmFuZ2VtZW50L0FTTVxcbmFycmFuZ2VyL1NNXFxuYXJyYW50XFxuYXJyYXMvTVNcXG5hcnJheS9FR01EU1xcbmFycmVhcnMvTVxcbmFycmVzdC9BR01EU1xcbmFycmh5dGhtaWEvTVxcbmFycmh5dGhtaWNcXG5hcnJoeXRobWljYWxcXG5hcnJpdmFsL01TXFxuYXJyaXZlL0dEU1xcbmFycm9nYW5jZS9NXFxuYXJyb2dhbnQvWVxcbmFycm9nYXRlL0dORFNcXG5hcnJvZ2F0aW9uL01cXG5hcnJvdy9NU1xcbmFycm93aGVhZC9NU1xcbmFycm93cm9vdC9NXFxuYXJyb3lvL01TXFxuYXJzZWRcXG5hcnNlbmFsL01TXFxuYXJzZW5pYy9NXFxuYXJzaW5nXFxuYXJzb24vTVxcbmFyc29uaXN0L1NNXFxuYXJ0L1NNXFxuYXJ0ZXJpYWxcXG5hcnRlcmlvbGUvTVNcXG5hcnRlcmlvc2NsZXJvc2lzL01cXG5hcnRlcnkvU01cXG5hcnRmdWwvUFlcXG5hcnRmdWxuZXNzL01cXG5hcnRocml0aWMvTVNcXG5hcnRocml0aXMvTVxcbmFydGhyb3BvZC9NU1xcbmFydGhyb3Njb3BlL1NNXFxuYXJ0aHJvc2NvcGljXFxuYXJ0aHJvc2NvcHlcXG5hcnRpY2hva2UvU01cXG5hcnRpY2xlL01EU1xcbmFydGljdWxhY3kvSVxcbmFydGljdWxhclxcbmFydGljdWxhdGUvWUdOUERTWFxcbmFydGljdWxhdGVuZXNzL0lNXFxuYXJ0aWN1bGF0aW9uL01cXG5hcnRpZmFjdC9TTVxcbmFydGlmaWNlL1JTTVpcXG5hcnRpZmljZXIvTVxcbmFydGlmaWNpYWwvWVxcbmFydGlmaWNpYWxpdHkvTVxcbmFydGlsbGVyeS9NXFxuYXJ0aWxsZXJ5bWFuL01cXG5hcnRpbGxlcnltZW5cXG5hcnRpbmVzcy9NXFxuYXJ0aXNhbi9NU1xcbmFydGlzdC9NU1xcbmFydGlzdGUvTVNcXG5hcnRpc3RpYy9JXFxuYXJ0aXN0aWNhbGx5XFxuYXJ0aXN0cnkvTVxcbmFydGxlc3MvUFlcXG5hcnRsZXNzbmVzcy9NXFxuYXJ0c3kvVFJcXG5hcnR3b3JrL01TXFxuYXJ0eS9QVFJcXG5hcnVndWxhXFxuYXJ1bS9TTVxcbmFzYXBcXG5hc2Jlc3Rvcy9NXFxuYXNjZW5kL0FHRFNcXG5hc2NlbmRhbmNlL01cXG5hc2NlbmRhbmN5L01cXG5hc2NlbmRhbnQvU01cXG5hc2NlbnNpb24vTVNcXG5hc2NlbnQvTVNcXG5hc2NlcnRhaW4vR0RTQkxcXG5hc2NlcnRhaW5tZW50L01cXG5hc2NldGljL01TXFxuYXNjZXRpY2FsbHlcXG5hc2NldGljaXNtL01cXG5hc2NvdC9NU1xcbmFzY3JpYmUvR0JEU1xcbmFzY3JpcHRpb24vTVxcbmFzZXB0aWNcXG5hc2VwdGljYWxseVxcbmFzZXh1YWwvWVxcbmFzZXh1YWxpdHkvTVxcbmFzaC9NRE5TR1xcbmFzaGFtZWQvVVlcXG5hc2hjYW4vTVNcXG5hc2hsYXIvTVNcXG5hc2hvcmVcXG5hc2hyYW0vTVNcXG5hc2h0cmF5L1NNXFxuYXNoeS9UUlxcbmFzaWRlL01TXFxuYXNpbmluZS9ZXFxuYXNpbmluaXR5L1NNXFxuYXNrL1NER1xcbmFza2FuY2VcXG5hc2tlZC9VXFxuYXNrZXdcXG5hc2xhbnRcXG5hc2xlZXBcXG5hc29jaWFsXFxuYXNwL1NNTlhcXG5hc3BhcmFndXMvTVxcbmFzcGFydGFtZS9NXFxuYXNwZWN0L01TXFxuYXNwZW4vTVxcbmFzcGVyaXR5L1NNXFxuYXNwZXJzaW9uL01TXFxuYXNwaGFsdC9NREdTXFxuYXNwaG9kZWwvU01cXG5hc3BoeXhpYS9NXFxuYXNwaHl4aWF0ZS9EU1hHTlxcbmFzcGh5eGlhdGlvbi9NXFxuYXNwaWMvTVNcXG5hc3BpZGlzdHJhL01TXFxuYXNwaXJhbnQvTVNcXG5hc3BpcmF0ZS9NR05EU1hcXG5hc3BpcmF0aW9uL01cXG5hc3BpcmF0b3IvU01cXG5hc3BpcmUvR0RTXFxuYXNwaXJpbi9NU1xcbmFzcy9NU1xcbmFzc2FpbC9HQkRTXFxuYXNzYWlsYWJsZS9VXFxuYXNzYWlsYW50L1NNXFxuYXNzYXNzaW4vU01cXG5hc3Nhc3NpbmF0ZS9HTlhEU1xcbmFzc2Fzc2luYXRpb24vTVxcbmFzc2F1bHQvTURSR1NcXG5hc3NheS9aR01EUlNcXG5hc3NheWVyL01cXG5hc3NlbWJsYWdlL1NNXFxuYXNzZW1ibGUvQUVHU0RcXG5hc3NlbWJsZXIvTVNcXG5hc3NlbWJsaWVzXFxuYXNzZW1ibHkvQU1cXG5hc3NlbWJseW1hbi9NXFxuYXNzZW1ibHltZW5cXG5hc3NlbWJseXdvbWFuL01cXG5hc3NlbWJseXdvbWVuXFxuYXNzZW50L0dNRFNcXG5hc3NlcnQvQUdWRFNcXG5hc3NlcnRpb24vQU1cXG5hc3NlcnRpb25zXFxuYXNzZXJ0aXZlL1lQXFxuYXNzZXJ0aXZlbmVzcy9NXFxuYXNzZXNzL0FMR0RTXFxuYXNzZXNzbWVudC9BU01cXG5hc3Nlc3Nvci9NU1xcbmFzc2V0L01TXFxuYXNzZXZlcmF0ZS9EU0dOXFxuYXNzZXZlcmF0aW9uL01cXG5hc3Nob2xlL01TIVxcbmFzc2lkdWl0eS9NXFxuYXNzaWR1b3VzL1BZXFxuYXNzaWR1b3VzbmVzcy9NXFxuYXNzaWduJ3NcXG5hc3NpZ24vQUxHRFNcXG5hc3NpZ25hYmxlXFxuYXNzaWduYXRpb24vTVNcXG5hc3NpZ25lZC9VXFxuYXNzaWduZWUvTVxcbmFzc2lnbmVyL01TXFxuYXNzaWdubWVudC9BTVNcXG5hc3NpZ25vci9NU1xcbmFzc2ltaWxhdGUvRFNHTlxcbmFzc2ltaWxhdGVkL1VcXG5hc3NpbWlsYXRpb24vTVxcbmFzc2lzdC9HVk1EU1xcbmFzc2lzdGFuY2UvTVxcbmFzc2lzdGFudC9TTVxcbmFzc2lzdGVkL1VcXG5hc3NpemUvTVNcXG5hc3NuXFxuYXNzb2NcXG5hc3NvY2lhdGUnc1xcbmFzc29jaWF0ZS9FRFNHTlZcXG5hc3NvY2lhdGlvbi9FTVxcbmFzc29jaWF0aW9uc1xcbmFzc29jaWF0aXZpdHlcXG5hc3NvbmFuY2UvTVxcbmFzc29uYW50L01TXFxuYXNzb3J0L0dMRFNcXG5hc3NvcnRhdGl2ZVxcbmFzc29ydG1lbnQvTVNcXG5hc3N0XFxuYXNzdWFnZS9HRFNcXG5hc3N1bWUvQkdEU1xcbmFzc3VtcHRpb24vU01cXG5hc3N1bXB0aXZlXFxuYXNzdXJhbmNlL0FTTVxcbmFzc3VyZS9BR0RTXFxuYXNzdXJlZC9NWVNcXG5hc3RhdGluZS9NXFxuYXN0ZXIvRU1TXFxuYXN0ZXJpc2svR01EU1xcbmFzdGVyblxcbmFzdGVyb2lkL01TXFxuYXN0aG1hL01cXG5hc3RobWF0aWMvU01cXG5hc3RobWF0aWNhbGx5XFxuYXN0aWdtYXRpY1xcbmFzdGlnbWF0aXNtL1NNXFxuYXN0aXJcXG5hc3RvbmlzaC9EU0xHXFxuYXN0b25pc2hpbmcvWVxcbmFzdG9uaXNobWVudC9NXFxuYXN0b3VuZC9HRFNcXG5hc3RvdW5kaW5nL1lcXG5hc3RyYWRkbGVcXG5hc3RyYWtoYW4vTVxcbmFzdHJhbFxcbmFzdHJheVxcbmFzdHJpZGVcXG5hc3RyaW5nZW5jeS9NXFxuYXN0cmluZ2VudC9TTVlcXG5hc3Ryb2xhYmUvU01cXG5hc3Ryb2xvZ2VyL1NNXFxuYXN0cm9sb2dpY2FsL1lcXG5hc3Ryb2xvZ2lzdC9NU1xcbmFzdHJvbG9neS9NXFxuYXN0cm9uYXV0L01TXFxuYXN0cm9uYXV0aWMvU1xcbmFzdHJvbmF1dGljYWxcXG5hc3Ryb25hdXRpY3MvTVxcbmFzdHJvbm9tZXIvU01cXG5hc3Ryb25vbWljXFxuYXN0cm9ub21pY2FsL1lcXG5hc3Ryb25vbXkvTVxcbmFzdHJvcGh5c2ljYWxcXG5hc3Ryb3BoeXNpY2lzdC9NU1xcbmFzdHJvcGh5c2ljcy9NXFxuYXN0dXRlL1BZVFJcXG5hc3R1dGVuZXNzL01cXG5hc3VuZGVyXFxuYXN5bHVtL1NNXFxuYXN5bW1ldHJpY1xcbmFzeW1tZXRyaWNhbC9ZXFxuYXN5bW1ldHJ5L1NNXFxuYXN5bXB0b21hdGljXFxuYXN5bXB0b3RpY1xcbmFzeW1wdG90aWNhbGx5XFxuYXN5bmNocm9ub3VzL1lcXG5hdFxcbmF0YXZpc20vTVxcbmF0YXZpc3QvU01cXG5hdGF2aXN0aWNcXG5hdGF4aWEvTVxcbmF0YXhpYy9NU1xcbmF0ZVxcbmF0ZWxpZXIvU01cXG5hdGhlaXNtL01cXG5hdGhlaXN0L01TXFxuYXRoZWlzdGljXFxuYXRoZXJvc2NsZXJvc2lzL01cXG5hdGhlcm9zY2xlcm90aWNcXG5hdGhpcnN0XFxuYXRobGV0ZS9NU1xcbmF0aGxldGljL1NcXG5hdGhsZXRpY2FsbHlcXG5hdGhsZXRpY2lzbVxcbmF0aGxldGljcy9NXFxuYXRod2FydFxcbmF0aWx0XFxuYXRpc2hvb1xcbmF0bGFzL01TXFxuYXRtb3NwaGVyZS9NU1xcbmF0bW9zcGhlcmljL1NcXG5hdG1vc3BoZXJpY2FsbHlcXG5hdG1vc3BoZXJpY3MvTVxcbmF0b2xsL01TXFxuYXRvbS9TTVxcbmF0b21pY1xcbmF0b21pY2FsbHlcXG5hdG9taXplL1pHRFJTXFxuYXRvbWl6ZXIvTVxcbmF0b25hbC9ZXFxuYXRvbmFsaXR5L01cXG5hdG9uZS9MR0RTXFxuYXRvbmVtZW50L01cXG5hdG9wXFxuYXRyaWFcXG5hdHJpYWxcXG5hdHJpb3ZlbnRyaWN1bGFyXFxuYXRyaXVtL01cXG5hdHJvY2lvdXMvUFlcXG5hdHJvY2lvdXNuZXNzL01cXG5hdHJvY2l0eS9TTVxcbmF0cm9waHkvRFNNR1xcbmF0cm9waW5lL01cXG5hdHRhY2gvQUxHRFNcXG5hdHRhY2hlL0JNXFxuYXR0YWNoZWQvVVxcbmF0dGFjaG1lbnQvQU1cXG5hdHRhY2htZW50c1xcbmF0dGFjay9aR01EUlNcXG5hdHRhY2tlci9NXFxuYXR0YWluL0FHRFNcXG5hdHRhaW5hYmlsaXR5L01cXG5hdHRhaW5hYmxlL1VcXG5hdHRhaW5kZXIvTVxcbmF0dGFpbm1lbnQvU01cXG5hdHRhci9NXFxuYXR0ZW1wdCdzXFxuYXR0ZW1wdC9BU0RHXFxuYXR0ZW5kL1NEUlpHXFxuYXR0ZW5kYW5jZS9TTVxcbmF0dGVuZGFudC9TTVxcbmF0dGVuZGVkL1VcXG5hdHRlbmRlZS9TTVxcbmF0dGVudGlvbi9JTVxcbmF0dGVudGlvbnNcXG5hdHRlbnRpdmUvSVBZXFxuYXR0ZW50aXZlbmVzcy9JTVxcbmF0dGVudWF0ZS9EU0dOXFxuYXR0ZW51YXRpb24vTVxcbmF0dGVzdC9TREdcXG5hdHRlc3RhdGlvbi9TTVxcbmF0dGVzdGVkL1VcXG5hdHRpYy9TTVxcbmF0dGlyZS9EU01HXFxuYXR0aXR1ZGUvU01cXG5hdHRpdHVkaW5hbFxcbmF0dGl0dWRpbml6ZS9HRFNcXG5hdHRuXFxuYXR0b3JuZXkvTVNcXG5hdHRyYWN0L1NHVkRCXFxuYXR0cmFjdGFudC9NU1xcbmF0dHJhY3Rpb24vTVNcXG5hdHRyYWN0aXZlL1VZXFxuYXR0cmFjdGl2ZW5lc3MvTVxcbmF0dHJpYnV0ZS9EU01HTlZCWFxcbmF0dHJpYnV0ZWQvVVxcbmF0dHJpYnV0aW9uL01cXG5hdHRyaWJ1dGl2ZS9NWVNcXG5hdHRyaXRpb24vTVxcbmF0dHVuZS9EU0dcXG5hdHR5XFxuYXR3aXR0ZXJcXG5hdHlwaWNhbC9ZXFxuYXViZXJnaW5lL1NcXG5hdWJ1cm4vTVxcbmF1Y3Rpb24vTURHU1xcbmF1Y3Rpb25lZXIvU01cXG5hdWRhY2lvdXMvWVBcXG5hdWRhY2lvdXNuZXNzL01cXG5hdWRhY2l0eS9NXFxuYXVkaWJpbGl0eS9JTVxcbmF1ZGlibGUvTVNcXG5hdWRpYmx5L0lcXG5hdWRpZW5jZS9NU1xcbmF1ZGlvL01TXFxuYXVkaW9sb2dpY2FsXFxuYXVkaW9sb2dpc3QvU01cXG5hdWRpb2xvZ3kvTVxcbmF1ZGlvbWV0ZXIvU01cXG5hdWRpb3BoaWxlL1NNXFxuYXVkaW90YXBlL1NNXFxuYXVkaW92aXN1YWwvU1xcbmF1ZGlvdmlzdWFscy9NXFxuYXVkaXQvR01EU1xcbmF1ZGl0aW9uL1NNREdcXG5hdWRpdG9yL01TXFxuYXVkaXRvcml1bS9TTVxcbmF1ZGl0b3J5XFxuYXVnZXIvTVNcXG5hdWdodC9NU1xcbmF1Z21lbnQvRFJaR1NcXG5hdWdtZW50YXRpb24vTVNcXG5hdWdtZW50YXRpdmVcXG5hdWdtZW50ZXIvTVxcbmF1Z3VyL0dNRFNcXG5hdWd1cnkvU01cXG5hdWd1c3QvUFRSWVxcbmF1Z3VzdG5lc3MvTVxcbmF1ay9TTVxcbmF1bnQvU01cXG5hdW50aWUvU01cXG5hdXJhL01TXFxuYXVyYWwvWVxcbmF1cmVvbGUvU01cXG5hdXJldXNcXG5hdXJpY2xlL1NNXFxuYXVyaWN1bGFyXFxuYXVyb3JhL1NNXFxuYXVzY3VsdGF0ZS9HTkRTWFxcbmF1c2N1bHRhdGlvbi9NXFxuYXVzcGljZS9TTVxcbmF1c3BpY2lvdXMvSVlcXG5hdXNwaWNpb3VzbmVzcy9NXFxuYXVzdGVyZS9SWVRcXG5hdXN0ZXJpdHkvU01cXG5hdXN0cmFsXFxuYXV0aGVudGljL0lVXFxuYXV0aGVudGljYWxseVxcbmF1dGhlbnRpY2F0ZS9YR05EU1xcbmF1dGhlbnRpY2F0ZWQvVVxcbmF1dGhlbnRpY2F0aW9uL01cXG5hdXRoZW50aWNpdHkvTVxcbmF1dGhvci9TTURHXFxuYXV0aG9yZXNzL01TXFxuYXV0aG9yaWFsXFxuYXV0aG9yaXRhcmlhbi9NU1xcbmF1dGhvcml0YXJpYW5pc20vTVxcbmF1dGhvcml0YXRpdmUvWVBcXG5hdXRob3JpdGF0aXZlbmVzcy9NXFxuYXV0aG9yaXR5L1NNXFxuYXV0aG9yaXphdGlvbi9NU1xcbmF1dGhvcml6ZS9BR0RTXFxuYXV0aG9yaXplZC9VXFxuYXV0aG9yc2hpcC9NXFxuYXV0aXNtL01cXG5hdXRpc3RpY1xcbmF1dG8vTVNcXG5hdXRvYmFobi9TTVxcbmF1dG9iaW9ncmFwaGVyL1NNXFxuYXV0b2Jpb2dyYXBoaWNcXG5hdXRvYmlvZ3JhcGhpY2FsL1lcXG5hdXRvYmlvZ3JhcGh5L1NNXFxuYXV0b2NsYXZlL01TXFxuYXV0b2NyYWN5L1NNXFxuYXV0b2NyYXQvU01cXG5hdXRvY3JhdGljXFxuYXV0b2NyYXRpY2FsbHlcXG5hdXRvY3Jvc3NcXG5hdXRvZGlkYWN0L1NNXFxuYXV0b2dyYXBoL01ER1xcbmF1dG9ncmFwaHNcXG5hdXRvaW1tdW5lXFxuYXV0b2ltbXVuaXR5L01cXG5hdXRvbWFrZXIvU01cXG5hdXRvbWF0ZS9HTkRTXFxuYXV0b21hdGljL1NNXFxuYXV0b21hdGljYWxseVxcbmF1dG9tYXRpb24vTVxcbmF1dG9tYXRpc20vTVxcbmF1dG9tYXRpemUvR0RTXFxuYXV0b21hdG9uL1NNXFxuYXV0b21vYmlsZS9EU01HXFxuYXV0b21vdGl2ZVxcbmF1dG9ub21pY1xcbmF1dG9ub21vdXMvWVxcbmF1dG9ub215L01cXG5hdXRvcGlsb3QvU01cXG5hdXRvcHN5L0dEU01cXG5hdXRvc3VnZ2VzdGlvblxcbmF1dG93b3JrZXIvTVNcXG5hdXR1bW4vU01cXG5hdXR1bW5hbFxcbmF1eFxcbmF1eGlsaWFyeS9TTVxcbmF1eGluL01cXG5hdi9SWlxcbmF2YWlsL0JHTURTXFxuYXZhaWxhYmlsaXR5L1VNXFxuYXZhaWxhYmxlL1VcXG5hdmFsYW5jaGUvU01cXG5hdmFyaWNlL01cXG5hdmFyaWNpb3VzL1lcXG5hdmFzdFxcbmF2YXRhci9NU1xcbmF2YXVudFxcbmF2ZHBcXG5hdmVcXG5hdmVuZ2UvWkdEUlNcXG5hdmVuZ2VyL01cXG5hdmVudWUvTVNcXG5hdmVyYWdlL01ZR0RTXFxuYXZlcnJlZFxcbmF2ZXJyaW5nXFxuYXZlcnNlL1hOXFxuYXZlcnNpb24vTVxcbmF2ZXJ0L0dEU1xcbmF2Z1xcbmF2aWFuXFxuYXZpYXJ5L1NNXFxuYXZpYXRpb24vTVxcbmF2aWF0b3IvTVNcXG5hdmlhdHJpY2VzXFxuYXZpYXRyaXgvTVNcXG5hdmlkL1lcXG5hdmlkaXR5L01cXG5hdmlvbmljL1NcXG5hdmlvbmljcy9NXFxuYXZpdGFtaW5vc2lzL01cXG5hdm9jYWRvL1NNXFxuYXZvY2F0aW9uL01TXFxuYXZvY2F0aW9uYWxcXG5hdm9pZC9TREdCXFxuYXZvaWRhYmxlL1VcXG5hdm9pZGFibHkvVVxcbmF2b2lkYW5jZS9NXFxuYXZvaWRhbnRcXG5hdm9pcmR1cG9pcy9NXFxuYXZvdWNoL0RTR1xcbmF2b3cvRURHU1xcbmF2b3dhbC9FU01cXG5hdm93ZWQvWVxcbmF2dW5jdWxhci9ZXFxuYXdcXG5hd2FpdC9HRFNcXG5hd2FrZS9HU1xcbmF3YWtlbi9BR0RTXFxuYXdha2VuaW5nL1NNXFxuYXdhcmQvR01EU1xcbmF3YXJkZWUvU1xcbmF3YXJlL1VQXFxuYXdhcmVuZXNzL1VNXFxuYXdhc2hcXG5hd2F5XFxuYXdlL0RTTUdcXG5hd2VpZ2hcXG5hd2Vzb21lL1lQXFxuYXdlc29tZW5lc3MvTVxcbmF3ZXN0cnVja1xcbmF3ZnVsL1lQXFxuYXdmdWxsZXJcXG5hd2Z1bGxlc3RcXG5hd2Z1bG5lc3MvTVxcbmF3aGlsZVxcbmF3a3dhcmQvUllQVFxcbmF3a3dhcmRuZXNzL01cXG5hd2wvU01cXG5hd24vR0pTTVxcbmF3bmluZy9NXFxuYXdva2VcXG5hd29rZW5cXG5hd3J5XFxuYXgvTURTR1xcbmF4aWFsL1lcXG5heGlvbS9TTVxcbmF4aW9tYXRpY1xcbmF4aW9tYXRpY2FsbHlcXG5heGlzL01cXG5heGxlL01TXFxuYXhsZXRyZWUvU01cXG5heG9sb3RsL1NNXFxuYXhvbi9NU1xcbmF5YWgvTVxcbmF5YWhzXFxuYXlhdG9sbGFoL01cXG5heWF0b2xsYWhzXFxuYXllL1NNXFxuYXphbGVhL1NNXFxuYXppbXV0aC9NXFxuYXppbXV0aHNcXG5henVyZS9TTVxcbmIvS0RUXFxuYmFhL1NNREdcXG5iYWJibGUvTVpHRFJTXFxuYmFiYmxlci9NXFxuYmFiZS9TTVxcbmJhYmVsL01TXFxuYmFib29uL01TXFxuYmFidXNoa2EvU01cXG5iYWJ5L1RHRFJTTVxcbmJhYnlob29kL01cXG5iYWJ5aXNoXFxuYmFieXNhdFxcbmJhYnlzaXQvU1xcbmJhYnlzaXR0ZXIvTVNcXG5iYWJ5c2l0dGluZy9NXFxuYmFjY2FsYXVyZWF0ZS9TTVxcbmJhY2NhcmF0L01cXG5iYWNjaGFuYWwvTVNcXG5iYWNjaGFuYWxpYS9NXFxuYmFjY2hhbmFsaWFuL01TXFxuYmFjY3lcXG5iYWNoZWxvci9TTVxcbmJhY2hlbG9yaG9vZC9NXFxuYmFjaWxsYXJ5XFxuYmFjaWxsaVxcbmJhY2lsbHVzL01cXG5iYWNrL1NKWkdNRFJcXG5iYWNrYWNoZS9NU1xcbmJhY2tiZW5jaC9TXFxuYmFja2JpdFxcbmJhY2tiaXRlL1pHUlNcXG5iYWNrYml0ZXIvTVxcbmJhY2tiaXR0ZW5cXG5iYWNrYm9hcmQvU01cXG5iYWNrYm9uZS9NU1xcbmJhY2ticmVha2luZ1xcbmJhY2tjaGF0XFxuYmFja2Nsb3RoXFxuYmFja2Nsb3Roc1xcbmJhY2tjb21iL0RTR1xcbmJhY2tkYXRlL0dEU1xcbmJhY2tkb29yXFxuYmFja2Ryb3AvTVNcXG5iYWNrZXIvTVxcbmJhY2tmaWVsZC9TTVxcbmJhY2tmaXJlL01HRFNcXG5iYWNrZ2FtbW9uL01cXG5iYWNrZ3JvdW5kL01SWlNcXG5iYWNrZ3JvdW5kZXIvTVxcbmJhY2toYW5kL01EUlNaR1xcbmJhY2toYW5kZWQvWVxcbmJhY2toYW5kZXIvTVxcbmJhY2tob2UvTVNcXG5iYWNraW5nL01cXG5iYWNrbGFzaC9NU1xcbmJhY2tsZXNzXFxuYmFja2xvZy9NU1xcbmJhY2tsb2dnZWRcXG5iYWNrbG9nZ2luZ1xcbmJhY2twYWNrL1pHTURSU1xcbmJhY2twYWNrZXIvTVxcbmJhY2twYWNraW5nL01cXG5iYWNrcGVkYWwvU0RHXFxuYmFja3Jlc3QvU01cXG5iYWNrcm9vbS9TXFxuYmFja3NjcmF0Y2hpbmcvTVxcbmJhY2tzZWF0L1NNXFxuYmFja3NpZGUvU01cXG5iYWNrc2xhcHBlci9TTVxcbmJhY2tzbGFwcGluZy9NXFxuYmFja3NsYXNoL01TXFxuYmFja3NsaWRcXG5iYWNrc2xpZGUvUlNaR1xcbmJhY2tzbGlkZXIvTVxcbmJhY2tzcGFjZS9EU01HXFxuYmFja3NwaW4vTVxcbmJhY2tzdGFiYmVyL01TXFxuYmFja3N0YWJiaW5nXFxuYmFja3N0YWdlL01cXG5iYWNrc3RhaXIvU1xcbmJhY2tzdG9wL1NNXFxuYmFja3N0b3BwZWRcXG5iYWNrc3RvcHBpbmdcXG5iYWNrc3RvcnkvU1xcbmJhY2tzdHJlZXQvU1xcbmJhY2tzdHJldGNoL01TXFxuYmFja3N0cm9rZS9NR0RTXFxuYmFja3RhbGsvTVxcbmJhY2t0cmFjay9TREdcXG5iYWNrdXAvTVNcXG5iYWNrd2FyZC9QU1lcXG5iYWNrd2FyZG5lc3MvTVxcbmJhY2t3YXNoL01cXG5iYWNrd2F0ZXIvU01cXG5iYWNrd29vZHMvTVxcbmJhY2t3b29kc21hbi9NXFxuYmFja3dvb2RzbWVuXFxuYmFja3lhcmQvU01cXG5iYWNvbi9NXFxuYmFjdGVyaWEvTVxcbmJhY3RlcmlhbFxcbmJhY3RlcmljaWRhbFxcbmJhY3RlcmljaWRlL1NNXFxuYmFjdGVyaW9sb2dpY1xcbmJhY3RlcmlvbG9naWNhbFxcbmJhY3RlcmlvbG9naXN0L1NNXFxuYmFjdGVyaW9sb2d5L01cXG5iYWN0ZXJpdW0vTVxcbmJhZC9NWVBcXG5iYWRkZXJcXG5iYWRkZXN0XFxuYmFkZGllL01TXFxuYmFkZVxcbmJhZGdlL01aUlNcXG5iYWRnZXIvR01EXFxuYmFkaW5hZ2UvTVxcbmJhZGxhbmRzL01cXG5iYWRtYW4vTVxcbmJhZG1lblxcbmJhZG1pbnRvbi9NXFxuYmFkbW91dGgvR0RcXG5iYWRtb3V0aHNcXG5iYWRuZXNzL01cXG5iYWZmbGUvTVpHRFJTTFxcbmJhZmZsZW1lbnQvTVxcbmJhZmZsZXIvTVxcbmJhZy9TTVxcbmJhZ2F0ZWxsZS9TTVxcbmJhZ2VsL01TXFxuYmFnZnVsL01TXFxuYmFnZ2FnZS9NXFxuYmFnZ2VkXFxuYmFnZ2llL01cXG5iYWdnaWx5XFxuYmFnZ2luZXNzL01cXG5iYWdnaW5nXFxuYmFnZ3kvUFRSU1xcbmJhZ3BpcGUvTVpSU1xcbmJhZ3BpcGVyL01cXG5iYWd1ZXR0ZS9NU1xcbmJhaFxcbmJhaHQvU01cXG5iYWlsL1NCR01EXFxuYmFpbGV5L1NcXG5iYWlsaWZmL1NcXG5iYWlsaXdpY2svTVNcXG5iYWlsb3V0L1NNXFxuYmFpbHNtYW4vTVxcbmJhaWxzbWVuXFxuYmFpcm4vTVNcXG5iYWl0L1NHTURcXG5iYWl6ZS9NXFxuYmFrZS9EUlNNWkdcXG5iYWtlZC9VXFxuYmFrZXIvTVxcbmJha2VyeS9TTVxcbmJha2VzaG9wL01TXFxuYmFrbGF2YS9NXFxuYmFrc2hlZXNoL01cXG5iYWxhY2xhdmEvTVNcXG5iYWxhbGFpa2EvTVNcXG5iYWxhbmNlJ3NcXG5iYWxhbmNlL1VEU0dcXG5iYWxib2EvU01cXG5iYWxjb255L1NNXFxuYmFsZC9TVEdQRFJZXFxuYmFsZGVyZGFzaC9NXFxuYmFsZGZhY2VkXFxuYmFsZG5lc3MvTVxcbmJhbGRyaWMvU01cXG5iYWxkeS9TXFxuYmFsZS9EUlNNWkdcXG5iYWxlZW4vTVxcbmJhbGVmdWwvUFlcXG5iYWxlZnVsbmVzcy9NXFxuYmFsZXIvTVxcbmJhbGsvU0dNRFxcbmJhbGt5L1JUXFxuYmFsbC9TR01EXFxuYmFsbGFkL1NNXFxuYmFsbGFkZWVyL01TXFxuYmFsbGFkcnkvTVxcbmJhbGxhc3QvR1NNRFxcbmJhbGxjb2NrL01TXFxuYmFsbGVyaW5hL1NNXFxuYmFsbGV0L1NNXFxuYmFsbGV0aWNcXG5iYWxsZ2FtZS9NU1xcbmJhbGxnaXJsL1NcXG5iYWxsZ293bi9TXFxuYmFsbGlzdGljL1NcXG5iYWxsaXN0aWNzL01cXG5iYWxsb29uL1NHTURcXG5iYWxsb29uaXN0L01TXFxuYmFsbG90L1NNREdcXG5iYWxscGFyay9NU1xcbmJhbGxwbGF5ZXIvTVNcXG5iYWxscG9pbnQvTVNcXG5iYWxscm9vbS9NU1xcbmJhbGxzL0RTR1xcbmJhbGxzeS9SVFxcbmJhbGx5XFxuYmFsbHlob28vU01ER1xcbmJhbG0vU01cXG5iYWxtaW5lc3MvTVxcbmJhbG15L1JUUFxcbmJhbG9uZXkvTVxcbmJhbHNhL01TXFxuYmFsc2FtL1NNXFxuYmFsc2FtaWNcXG5iYWx1c3Rlci9TTVxcbmJhbHVzdHJhZGUvTVNcXG5iYW1ib28vU01cXG5iYW1ib296bGUvRFNHXFxuYmFuL1NNXFxuYmFuYWwvWVxcbmJhbmFsaXR5L1NNXFxuYmFuYW5hL1NNXFxuYmFuZCdzXFxuYmFuZC9FU0dEXFxuYmFuZGFnZS9EU01HXFxuYmFuZGFubmEvTVNcXG5iYW5kYm94L01TXFxuYmFuZGVhdS9NXFxuYmFuZGVhdXhcXG5iYW5kaXQvU01cXG5iYW5kaXRyeS9NXFxuYmFuZGxlYWRlci9TXFxuYmFuZG1hc3Rlci9TTVxcbmJhbmRvbGVlci9TTVxcbmJhbmRzbWFuL01cXG5iYW5kc21lblxcbmJhbmRzdGFuZC9TTVxcbmJhbmR3YWdvbi9TTVxcbmJhbmR3aWR0aFxcbmJhbmR3aWR0aHNcXG5iYW5keS9EUlNUR1xcbmJhbmUvU01cXG5iYW5lZnVsXFxuYmFuZy9TR01EUlxcbmJhbmdsZS9TTVxcbmJhbmlcXG5iYW5pc2gvR0xEU1xcbmJhbmlzaG1lbnQvTVxcbmJhbmlzdGVyL1NNXFxuYmFuam8vTVNcXG5iYW5qb2lzdC9TTVxcbmJhbmsvU1pHQk1EUlxcbmJhbmtib29rL1NNXFxuYmFua2NhcmQvU01cXG5iYW5rZXIvTVxcbmJhbmtpbmcvTVxcbmJhbmtub3RlL1NNXFxuYmFua3JvbGwvU0dNRFxcbmJhbmtydXB0L1NHTURcXG5iYW5rcnVwdGN5L1NNXFxuYmFubmVkXFxuYmFubmVyL1NNXFxuYmFubmluZ1xcbmJhbm5vY2svTVNcXG5iYW5ucy9NXFxuYmFucXVldC9aR01EUlNcXG5iYW5xdWV0ZXIvTVxcbmJhbnF1ZXR0ZS9TTVxcbmJhbnNoZWUvTVNcXG5iYW50YW0vU01cXG5iYW50YW13ZWlnaHQvU01cXG5iYW50ZXIvR1NNRFxcbmJhbnRlcmluZy9ZXFxuYmFueWFuL1NNXFxuYmFuemFpL1NNXFxuYmFvYmFiL1NNXFxuYmFwL1NcXG5iYXB0aXNtL01TXFxuYmFwdGlzbWFsXFxuYmFwdGlzdC9TXFxuYmFwdGlzdGVyeS9TTVxcbmJhcHRpemUvWkdEUlNcXG5iYXB0aXplZC9VXFxuYmFwdGl6ZXIvTVxcbmJhcidzXFxuYmFyL0VDVVRTXFxuYmFyYi9TWkdNRFJcXG5iYXJiYWNvYVxcbmJhcmJhcmlhbi9TTVxcbmJhcmJhcmlhbmlzbS9NU1xcbmJhcmJhcmljXFxuYmFyYmFyaWNhbGx5XFxuYmFyYmFyaXNtL1NNXFxuYmFyYmFyaXR5L1NNXFxuYmFyYmFyaXplL0RTR1xcbmJhcmJhcm91cy9ZXFxuYmFyYmVjdWUvRFNNR1xcbmJhcmJlbC9TTVxcbmJhcmJlbGwvTVNcXG5iYXJiZXIvR01EXFxuYmFyYmVycnkvU01cXG5iYXJiZXJzaG9wL01TXFxuYmFyYmllL1NcXG5iYXJiaXR1cmF0ZS9TTVxcbmJhcmJ3aXJlL01cXG5iYXJjYXJvbGUvU01cXG5iYXJkL1NNXFxuYmFyZGljXFxuYmFyZS9EUlNQWUdcXG5iYXJlYmFjay9EXFxuYmFyZWZhY2VkL1lcXG5iYXJlZm9vdC9EXFxuYmFyZWhhbmRlZFxcbmJhcmVoZWFkZWRcXG5iYXJlbGVnZ2VkXFxuYmFyZW5lc3MvTVxcbmJhcmYvU0dNRFlcXG5iYXJmbHkvU01cXG5iYXJnYWluL01EUlpHU1xcbmJhcmdhaW5lci9NXFxuYmFyZ2UvTUdEU1xcbmJhcmdlbWFuL01cXG5iYXJnZW1lblxcbmJhcmhvcC9TXFxuYmFyaG9wcGVkXFxuYmFyaG9wcGluZ1xcbmJhcmlzdGEvTVNcXG5iYXJpdG9uZS9NU1xcbmJhcml1bS9NXFxuYmFyaydzXFxuYmFyay9DU0dEXFxuYmFya2VlcC9aTVJTXFxuYmFya2VlcGVyL01cXG5iYXJrZXIvU01cXG5iYXJsZXkvTVxcbmJhcm1haWQvTVNcXG5iYXJtYW4vTVxcbmJhcm1lblxcbmJhcm15L1JUXFxuYmFybi9TTVxcbmJhcm5hY2xlL01EU1xcbmJhcm5leS9TXFxuYmFybnN0b3JtL1NEUlpHXFxuYmFybnN0b3JtZXIvTVxcbmJhcm55YXJkL1NNXFxuYmFyb21ldGVyL01TXFxuYmFyb21ldHJpY1xcbmJhcm9tZXRyaWNhbGx5XFxuYmFyb24vTVNcXG5iYXJvbmFnZS9NU1xcbmJhcm9uZXNzL01TXFxuYmFyb25ldC9NU1xcbmJhcm9uZXRjeS9TTVxcbmJhcm9uaWFsXFxuYmFyb255L1NNXFxuYmFyb3F1ZS9NXFxuYmFycmFjay9NREdTXFxuYmFycmFjdWRhL1NNXFxuYmFycmFnZS9NR0RTXFxuYmFycmUvTUdKRFNcXG5iYXJyZWQvVUVDXFxuYmFycmVsL0dTTURcXG5iYXJyZW4vVFBTTVJcXG5iYXJyZW5uZXNzL01cXG5iYXJyZXR0ZS9TTVxcbmJhcnJpY2FkZS9NR0RTXFxuYmFycmllci9NU1xcbmJhcnJpbmcvRUNVXFxuYmFycmlvL1NNXFxuYmFycmlzdGVyL01TXFxuYmFycm9vbS9NU1xcbmJhcnJvdy9TTVxcbmJhcnRlbmRlci9TTVxcbmJhcnRlci9aR1NNRFJcXG5iYXJ0ZXJlci9NXFxuYmFyeW9uL1NNXFxuYmFzYWwvWVxcbmJhc2FsdC9NXFxuYmFzYWx0aWNcXG5iYXNlJ3NcXG5iYXNlL0NEU0xUR1xcbmJhc2ViYWxsL1NNXFxuYmFzZWJvYXJkL01TXFxuYmFzZWxlc3NcXG5iYXNlbGluZS9NU1xcbmJhc2VseVxcbmJhc2VtYW4vTVxcbmJhc2VtZW5cXG5iYXNlbWVudC9DTVNcXG5iYXNlbmVzcy9NXFxuYmFzZXJcXG5iYXNoL0dNRFNcXG5iYXNoZnVsL1BZXFxuYmFzaGZ1bG5lc3MvTVxcbmJhc2hpbmcvTVxcbmJhc2ljL01TXFxuYmFzaWNhbGx5XFxuYmFzaWwvTVxcbmJhc2lsaWNhL01TXFxuYmFzaWxpc2svTVNcXG5iYXNpbi9NU1xcbmJhc2luZnVsL01TXFxuYmFzaXMvTVxcbmJhc2svU0dEXFxuYmFza2V0L1NNXFxuYmFza2V0YmFsbC9NU1xcbmJhc2tldHJ5L01cXG5iYXNrZXR3b3JrL01cXG5iYXNxdWUvU1xcbmJhc3MvTVNcXG5iYXNzZXQvU01cXG5iYXNzaW5ldC9NU1xcbmJhc3Npc3QvTVNcXG5iYXNzby9NU1xcbmJhc3Nvb24vTVNcXG5iYXNzb29uaXN0L1NNXFxuYmFzc3dvb2QvTVNcXG5iYXN0L01cXG5iYXN0YXJkL01TXFxuYmFzdGFyZGl6YXRpb24vTVNcXG5iYXN0YXJkaXplL0dEU1xcbmJhc3RhcmR5L01cXG5iYXN0ZS9aR05YRFJTXFxuYmFzdGVyL01cXG5iYXN0aW9uL01cXG5iYXQvU01cXG5iYXRjaC9NRFNHXFxuYmF0ZS9LQUNHU0RcXG5iYXRoL1pHTURSU1xcbmJhdGhlL01cXG5iYXRoZXIvTVxcbmJhdGhldGljXFxuYmF0aGhvdXNlL01TXFxuYmF0aGluZy9NXFxuYmF0aG1hdC9NU1xcbmJhdGhvcy9NXFxuYmF0aHJvYmUvU01cXG5iYXRocm9vbS9TTVxcbmJhdGhzXFxuYmF0aHR1Yi9NU1xcbmJhdGh3YXRlclxcbmJhdGh5c2NhcGhlL1NNXFxuYmF0aHlzcGhlcmUvTVNcXG5iYXRpay9NU1xcbmJhdGlzdGUvTVxcbmJhdG1hbi9NXFxuYmF0bWVuXFxuYmF0b24vTVNcXG5iYXRzbWFuL01cXG5iYXRzbWVuXFxuYmF0dGFsaW9uL1NNXFxuYmF0dGVkXFxuYmF0dGVuL0dTTURcXG5iYXR0ZXIvSlpHU01EUlxcbmJhdHRlcmVyL01cXG5iYXR0ZXJ5L1NNXFxuYmF0dGluZy9NXFxuYmF0dGxlL0xEUlNNWkdcXG5iYXR0bGVheGUvTVNcXG5iYXR0bGVkb3JlL1NNXFxuYmF0dGxlZHJlc3NcXG5iYXR0bGVmaWVsZC9NU1xcbmJhdHRsZWZyb250L01TXFxuYmF0dGxlZ3JvdW5kL01TXFxuYmF0dGxlbWVudC9TTVxcbmJhdHRsZXIvTVxcbmJhdHRsZXNoaXAvU01cXG5iYXR0eS9SVFxcbmJhdWJsZS9TTVxcbmJhdWQvU01cXG5iYXV4aXRlL01cXG5iYXdkL1NNXFxuYmF3ZGlseVxcbmJhd2RpbmVzcy9NXFxuYmF3ZHkvUFJUXFxuYmF3bC9TR01EXFxuYmF5L1NNREdcXG5iYXliZXJyeS9TTVxcbmJheW9uZXQvU01ER1xcbmJheW91L01TXFxuYmF6YWFyL1NNXFxuYmF6aWxsaW9uL1NcXG5iYXpvb2thL1NNXFxuYmJsXFxuYmRybVxcbmJlXFxuYmVhY2gvTURTR1xcbmJlYWNoY29tYmVyL1NNXFxuYmVhY2hmcm9udFxcbmJlYWNoaGVhZC9NU1xcbmJlYWNod2Vhci9NXFxuYmVhY29uL1NNXFxuYmVhZC9TR01EXFxuYmVhZGluZy9NXFxuYmVhZGxlL1NNXFxuYmVhZHkvUlRcXG5iZWFnbGUvU01cXG5iZWFrL1NaTURSXFxuYmVha2VyL01cXG5iZWFtL1NHTURcXG5iZWFuL1NHTURcXG5iZWFuYmFnL01TXFxuYmVhbmZlYXN0L1NcXG5iZWFuaWUvU01cXG5iZWFucG9sZS9NU1xcbmJlYW5zcHJvdXQvU1xcbmJlYW5zdGFsay9NU1xcbmJlYXIvU1pHQkpNUlxcbmJlYXJhYmxlL1VcXG5iZWFyYWJseS9VXFxuYmVhcmQvTURHU1xcbmJlYXJkbGVzc1xcbmJlYXJlci9NXFxuYmVhcmluZy9NXFxuYmVhcmlzaC9QWVxcbmJlYXJpc2huZXNzL01cXG5iZWFybGlrZVxcbmJlYXJza2luL01TXFxuYmVhc3QvTVNcXG5iZWFzdGxpbmVzcy9NXFxuYmVhc3RseS9UUFJNXFxuYmVhdC9TWkdCTU5SSlxcbmJlYXRhYmxlL1VcXG5iZWF0ZW4vVVxcbmJlYXRlci9NXFxuYmVhdGlmaWNcXG5iZWF0aWZpY2FsbHlcXG5iZWF0aWZpY2F0aW9uL01cXG5iZWF0aWZ5L0dYTkRTXFxuYmVhdGluZy9NXFxuYmVhdGl0dWRlL1NNXFxuYmVhdG5pay9NU1xcbmJlYXUvU01cXG5iZWF1dC9NU1xcbmJlYXV0ZW91cy9ZXFxuYmVhdXRpY2lhbi9TTVxcbmJlYXV0aWZpY2F0aW9uL01cXG5iZWF1dGlmaWVyL01cXG5iZWF1dGlmdWwvWVxcbmJlYXV0aWZ5L05EUlNaR1xcbmJlYXV0eS9TTVxcbmJlYXZlci9TR01EXFxuYmVib3AvTVNcXG5iZWNhbG0vR1NEXFxuYmVjYW1lXFxuYmVjYXVzZVxcbmJlY2svU01cXG5iZWNrb24vU0dEXFxuYmVjbG91ZC9HRFNcXG5iZWNvbWUvU1xcbmJlY29taW5nL1VZXFxuYmVjcXVlcmVsL1NcXG5iZWQvU01cXG5iZWRhdWIvR1NEXFxuYmVkYXp6bGUvR0RTTFxcbmJlZGF6emxlbWVudC9NXFxuYmVkYnVnL1NNXFxuYmVkY2hhbWJlci9TXFxuYmVkY2xvdGhlcy9NXFxuYmVkZGVkXFxuYmVkZGVyXFxuYmVkZGluZy9NXFxuYmVkZWNrL0dTRFxcbmJlZGV2aWwvTEdEU1xcbmJlZGV2aWxtZW50L01cXG5iZWRmZWxsb3cvU01cXG5iZWRoZWFkL1NcXG5iZWRpbS9TXFxuYmVkaW1tZWRcXG5iZWRpbW1pbmdcXG5iZWRpemVuL0dEU1xcbmJlZGxhbS9TTVxcbmJlZHBhbi9TTVxcbmJlZHBvc3QvU01cXG5iZWRyYWdnbGUvR0RTXFxuYmVkcmlkZGVuXFxuYmVkcm9jay9TTVxcbmJlZHJvbGwvU01cXG5iZWRyb29tL1NNXFxuYmVkc2lkZS9TTVxcbmJlZHNpdC9TXFxuYmVkc2l0dGVyL1NcXG5iZWRzb3JlL1NNXFxuYmVkc3ByZWFkL1NNXFxuYmVkc3RlYWQvU01cXG5iZWR0aW1lL1NNXFxuYmVlL1JTTVpHSlxcbmJlZWJyZWFkL01cXG5iZWVjaC9NU1xcbmJlZWNobnV0L01TXFxuYmVlZi9TR01EXFxuYmVlZmJ1cmdlci9TTVxcbmJlZWZjYWtlL01TXFxuYmVlZmluZXNzL01cXG5iZWVmc3RlYWsvTVNcXG5iZWVmeS9SUFRcXG5iZWVoaXZlL01TXFxuYmVla2VlcGVyL01TXFxuYmVla2VlcGluZy9NXFxuYmVlbGluZS9NU1xcbmJlZW5cXG5iZWVwL1NaR01EUlxcbmJlZXBlci9NXFxuYmVlci9NXFxuYmVlcnkvVFJcXG5iZWVzd2F4L01cXG5iZWV0L1NNXFxuYmVldGxlL01HRFNcXG5iZWV0cm9vdC9TXFxuYmVldmVzXFxuYmVmYWxsL1NHTlxcbmJlZmVsbFxcbmJlZml0L1NcXG5iZWZpdHRlZFxcbmJlZml0dGluZy9ZXFxuYmVmb2cvU1xcbmJlZm9nZ2VkXFxuYmVmb2dnaW5nXFxuYmVmb3JlXFxuYmVmb3JlaGFuZFxcbmJlZm91bC9ER1NcXG5iZWZyaWVuZC9TR0RcXG5iZWZ1ZGRsZS9HTERTXFxuYmVmdWRkbGVtZW50L01cXG5iZWcvU1xcbmJlZ2FuXFxuYmVnYXRcXG5iZWdldC9TXFxuYmVnZXR0ZXIvU1xcbmJlZ2V0dGluZ1xcbmJlZ2dhci9NRFlHU1xcbmJlZ2dhcnkvTVxcbmJlZ2dlZFxcbmJlZ2dpbmdcXG5iZWdpbi9TXFxuYmVnaW5uZXIvU01cXG5iZWdpbm5pbmcvTVNcXG5iZWdvbmVcXG5iZWdvbmlhL1NNXFxuYmVnb3RcXG5iZWdvdHRlblxcbmJlZ3JpbWUvRFNHXFxuYmVncnVkZ2UvRFNHXFxuYmVncnVkZ2luZy9ZXFxuYmVndWlsZS9EUlNaR0xcXG5iZWd1aWxlbWVudC9NXFxuYmVndWlsZXIvTVxcbmJlZ3VpbGluZy9ZXFxuYmVndWluZS9TTVxcbmJlZ3VtL01TXFxuYmVndW5cXG5iZWhhbGYvTVxcbmJlaGFsdmVzXFxuYmVoYXZlL0dEU1xcbmJlaGF2aW9yL1NNXFxuYmVoYXZpb3JhbC9ZXFxuYmVoYXZpb3Jpc20vTVxcbmJlaGF2aW9yaXN0L01TXFxuYmVoZWFkL0RHU1xcbmJlaGVsZFxcbmJlaGVtb3RoL01cXG5iZWhlbW90aHNcXG5iZWhlc3QvTVNcXG5iZWhpbmQvTVNcXG5iZWhpbmRoYW5kXFxuYmVob2xkL05SWkdTXFxuYmVob2xkZXIvTVxcbmJlaG9vdmUvRFNHXFxuYmVpZ2UvTVxcbmJlaW5nL01cXG5iZWpld2VsL1NER1xcbmJlbGFib3IvU0RHXFxuYmVsYXRlZC9ZXFxuYmVsYXkvR0RTXFxuYmVsY2gvR01EU1xcbmJlbGVhZ3Vlci9HU0RcXG5iZWxmcnkvU01cXG5iZWxpZS9EU1xcbmJlbGllZi9FVU1cXG5iZWxpZWZzXFxuYmVsaWV2YWJsZS9VXFxuYmVsaWV2YWJseS9VXFxuYmVsaWV2ZS9FRFJTWkdcXG5iZWxpZXZlci9FVU1TXFxuYmVsaWV2aW5nL1VcXG5iZWxpdHRsZS9MRFNHXFxuYmVsaXR0bGVtZW50L01cXG5iZWxsL1NHTURcXG5iZWxsYWRvbm5hL01cXG5iZWxsYm95L1NNXFxuYmVsbGUvTVNcXG5iZWxsZWQvQVxcbmJlbGxldHJpc3QvTVNcXG5iZWxsZXRyaXN0aWNcXG5iZWxsaG9wL1NNXFxuYmVsbGljb3NlXFxuYmVsbGljb3NpdHkvTVxcbmJlbGxpZ2VyZW5jZS9NXFxuYmVsbGlnZXJlbmN5L01cXG5iZWxsaWdlcmVudC9NWVNcXG5iZWxsaW5nL0FcXG5iZWxsbWFuL01cXG5iZWxsbWVuXFxuYmVsbG93L01ER1NcXG5iZWxsd2V0aGVyL01TXFxuYmVsbHkvR0RTTVxcbmJlbGx5YWNoZS9NR0RTXFxuYmVsbHlidXR0b24vU01cXG5iZWxseWZ1bC9NU1xcbmJlbG9uZy9KREdTXFxuYmVsb25naW5nL01cXG5iZWxvdmVkL1NNXFxuYmVsb3dcXG5iZWx0L1NHTURcXG5iZWx0d2F5L1NNXFxuYmVsdWdhL01TXFxuYmVseWluZ1xcbmJlbWlyZS9HRFNcXG5iZW1vYW4vREdTXFxuYmVtdXNlL0xHRFNcXG5iZW11c2VkL1lcXG5iZW11c2VtZW50L01cXG5iZW5jaC9HTURTXFxuYmVuY2htYXJrL01TXFxuYmVuZC9CU1pHTVJcXG5iZW5kZXIvTVxcbmJlbmR5L1RSXFxuYmVuZWF0aFxcbmJlbmVkaWN0aW5lXFxuYmVuZWRpY3Rpb24vU01cXG5iZW5lZGljdG9yeVxcbmJlbmVmYWN0aW9uL1NNXFxuYmVuZWZhY3Rvci9NU1xcbmJlbmVmYWN0cmVzcy9NU1xcbmJlbmVmaWNlL1NNXFxuYmVuZWZpY2VuY2UvTVxcbmJlbmVmaWNlbnQvWVxcbmJlbmVmaWNpYWwvWVxcbmJlbmVmaWNpYXJ5L1NNXFxuYmVuZWZpdC9TTURHXFxuYmVuZXZvbGVuY2UvU01cXG5iZW5ldm9sZW50L1lcXG5iZW5pZ2h0ZWQvWVxcbmJlbmlnbi9ZXFxuYmVuaWduYW50XFxuYmVuaWduaXR5L01cXG5iZW50L1NNXFxuYmVudG9uaXRlXFxuYmVudHdvb2QvTVxcbmJlbnVtYi9EU0dcXG5iZW56ZW5lL01cXG5iZW56aW5lL01cXG5iZW56eWxcXG5iZXF1ZWF0aC9ER1xcbmJlcXVlYXRoc1xcbmJlcXVlc3QvTVNcXG5iZXJhdGUvR0RTXFxuYmVyZWF2ZS9EU0xHXFxuYmVyZWF2ZW1lbnQvTVNcXG5iZXJlZnRcXG5iZXJldC9NU1xcbmJlcmcvU01cXG5iZXJpYmVyaS9NXFxuYmVyay9TXFxuYmVya2VsaXVtL01cXG5iZXJtL1NNXFxuYmVycnkvR0RTTVxcbmJlcnJ5bGlrZVxcbmJlcnNlcmtcXG5iZXJ0aC9HTURcXG5iZXJ0aHNcXG5iZXJ5bC9NU1xcbmJlcnlsbGl1bS9NXFxuYmVzZWVjaC9aR1JTXFxuYmVzZWVjaGVyL01cXG5iZXNlZWNoaW5nL1lcXG5iZXNlZW0vRFNHXFxuYmVzZXQvU1xcbmJlc2V0dGluZ1xcbmJlc2lkZS9TXFxuYmVzaWVnZS9aR0RSU1xcbmJlc2llZ2VyL01cXG5iZXNtZWFyL0RTR1xcbmJlc21pcmNoL0dEU1xcbmJlc29tL01TXFxuYmVzb3QvU1xcbmJlc290dGVkXFxuYmVzb3R0aW5nXFxuYmVzb3VnaHRcXG5iZXNwYW5nbGUvRFNHXFxuYmVzcGF0dGVyL0dTRFxcbmJlc3BlYWsvU0dcXG5iZXNwZWN0YWNsZWRcXG5iZXNwb2tlXFxuYmVzcG9rZW5cXG5iZXN0L1NHTURcXG5iZXN0aWFsL1lcXG5iZXN0aWFsaXR5L01cXG5iZXN0aWFyeS9TTVxcbmJlc3Rpci9TXFxuYmVzdGlycmVkXFxuYmVzdGlycmluZ1xcbmJlc3Rvdy9ER1NcXG5iZXN0b3dhbC9TTVxcbmJlc3RyZXcvU0RHXFxuYmVzdHJld25cXG5iZXN0cmlkZGVuXFxuYmVzdHJpZGUvU0dcXG5iZXN0cm9kZVxcbmJlc3RzZWxsZXIvTVNcXG5iZXN0c2VsbGluZ1xcbmJldC9TTVxcbmJldGEvU01cXG5iZXRha2UvR1NcXG5iZXRha2VuXFxuYmV0Y2hhXFxuYmV0ZWwvTVxcbmJldGhpbmsvU0dcXG5iZXRob3VnaHRcXG5iZXRpZGUvR0RTXFxuYmV0aW1lc1xcbmJldG9rZW4vR0RTXFxuYmV0b29rXFxuYmV0cmF5L0RSWkdTXFxuYmV0cmF5YWwvU01cXG5iZXRyYXllci9NXFxuYmV0cm90aC9ER1xcbmJldHJvdGhhbC9TTVxcbmJldHJvdGhlZC9NXFxuYmV0cm90aHNcXG5iZXR0ZXIvTURHTFNcXG5iZXR0ZXJtZW50L01cXG5iZXR0aW5nXFxuYmV0dG9yL01TXFxuYmV0d2VlblxcbmJldHdpeHRcXG5iZXZlbC9HTURTXFxuYmV2ZXJhZ2UvU01cXG5iZXZ2eS9TXFxuYmV2eS9TTVxcbmJld2FpbC9ER1NcXG5iZXdhcmUvR0RTXFxuYmV3aGlza2VyZWRcXG5iZXdpZ2dlZFxcbmJld2lsZGVyL0xTR0RcXG5iZXdpbGRlcmluZy9ZXFxuYmV3aWxkZXJtZW50L01cXG5iZXdpdGNoL0dMRFNcXG5iZXdpdGNoaW5nL1lcXG5iZXdpdGNobWVudC9NXFxuYmV5L1NNXFxuYmV5b25kXFxuYmV6ZWwvTVNcXG5iZlxcbmJoYWppXFxuYmkvU01SWlxcbmJpYW5udWFsL1lcXG5iaWFzL0dNRFNcXG5iaWFzZWQvVVxcbmJpYXRobG9uL1NNXFxuYmliL1NNXFxuYmlibGUvTVNcXG5iaWJsaWNhbFxcbmJpYmxpb2dyYXBoZXIvTVNcXG5iaWJsaW9ncmFwaGljXFxuYmlibGlvZ3JhcGhpY2FsL1lcXG5iaWJsaW9ncmFwaHkvU01cXG5iaWJsaW9waGlsZS9TTVxcbmJpYnVsb3VzXFxuYmljYW1lcmFsXFxuYmljYW1lcmFsaXNtL01cXG5iaWNhcmIvTVNcXG5iaWNhcmJvbmF0ZS9NU1xcbmJpY2VudGVuYXJ5L1NNXFxuYmljZW50ZW5uaWFsL1NNXFxuYmljZXAvTVNcXG5iaWNlcHMvTVxcbmJpY2tlci9NRFJaR1NcXG5iaWNrZXJlci9NXFxuYmljb25jYXZlXFxuYmljb252ZXhcXG5iaWN1c3BpZC9NU1xcbmJpY3ljbGUvRFJTTVpHXFxuYmljeWNsZXIvTVxcbmJpY3ljbGlzdC9TTVxcbmJpZC9TTUdcXG5iaWRkYWJsZVxcbmJpZGRlbi9VXFxuYmlkZGVyL01TXFxuYmlkZGluZy9NXFxuYmlkZHkvU01cXG5iaWRlL1NcXG5iaWRldC9NU1xcbmJpZGlyZWN0aW9uYWwvWVxcbmJpZW5uaWFsL01ZU1xcbmJpZW5uaXVtL01TXFxuYmllci9NXFxuYmlmZi9TR0RcXG5iaWZvY2FsL1NcXG5iaWZvY2Fscy9NXFxuYmlmdXJjYXRlL1hEU0dOXFxuYmlmdXJjYXRpb24vTVxcbmJpZy9QXFxuYmlnYW1pc3QvU01cXG5iaWdhbW91c1xcbmJpZ2FteS9NXFxuYmlnZ2VyXFxuYmlnZ2VzdFxcbmJpZ2dpZS9NU1xcbmJpZ2dpc2hcXG5iaWdoZWFkL1NNXFxuYmlnaGVhcnRlZC9QXFxuYmlnaGVhcnRlZG5lc3MvTVxcbmJpZ2hvcm4vU01cXG5iaWdodC9NU1xcbmJpZ21vdXRoL01cXG5iaWdtb3V0aHNcXG5iaWduZXNzL01cXG5iaWdvdC9NRFNcXG5iaWdvdHJ5L1NNXFxuYmlnd2lnL01TXFxuYmlqb3UvTVxcbmJpam91eFxcbmJpa2UvRFJTTVpHXFxuYmlrZXIvTVxcbmJpa2luaS9NU1xcbmJpbGFiaWFsL01TXFxuYmlsYXRlcmFsL1lcXG5iaWxiZXJyeS9TXFxuYmlsZS9NXFxuYmlsZ2UvTVNcXG5iaWxpbmd1YWwvU01ZXFxuYmlsaW5ndWFsaXNtL01cXG5iaWxpb3VzL1BcXG5iaWxpb3VzbmVzcy9NXFxuYmlsaXJ1YmluXFxuYmlsay9TWkdEUlxcbmJpbGtlci9NXFxuYmlsbC9TQkpHTURcXG5iaWxsYm9hcmQvTVNcXG5iaWxsZXQvR01EU1xcbmJpbGxmb2xkL1NNXFxuYmlsbGhvb2svU1xcbmJpbGxpYXJkL1NcXG5iaWxsaWFyZHMvTVxcbmJpbGxpbmcvTVxcbmJpbGxpbmdzZ2F0ZS9NXFxuYmlsbGlvbi9NSFNcXG5iaWxsaW9uYWlyZS9TTVxcbmJpbGxpb250aC9NXFxuYmlsbGlvbnRoc1xcbmJpbGxvdy9HTURTXFxuYmlsbG93eVxcbmJpbGx5L1NNXFxuYmlsbHljYW4vU1xcbmJpbWJvL01TXFxuYmltZXRhbGxpYy9TTVxcbmJpbWV0YWxsaXNtL01cXG5iaW1vZGFsXFxuYmltb250aGx5L1NNXFxuYmluL1NNXFxuYmluYXJ5L1NNXFxuYmluYXVyYWxcXG5iaW5kJ3NcXG5iaW5kL0FVR1NcXG5iaW5kZXIvTVNcXG5iaW5kZXJ5L1NNXFxuYmluZGluZy9NU1xcbmJpbmR3ZWVkL01cXG5iaW5nZS9NRFNcXG5iaW5nby9NXFxuYmlubWFuXFxuYmlubWVuXFxuYmlubmFjbGUvU01cXG5iaW5uZWRcXG5iaW5uaW5nXFxuYmlub2N1bGFyL01TXFxuYmlub21pYWwvU01cXG5iaW8vU01cXG5iaW9jaGVtaWNhbC9TTVlcXG5iaW9jaGVtaXN0L01TXFxuYmlvY2hlbWlzdHJ5L01cXG5iaW9kZWdyYWRhYmlsaXR5L01cXG5iaW9kZWdyYWRlL0RTR0JcXG5iaW9kaXZlcnNpdHkvTVxcbmJpb2V0aGljcy9NXFxuYmlvZmVlZGJhY2svTVxcbmJpb2ZpbG0vTVNcXG5iaW9nXFxuYmlvZ3JhcGhlci9TTVxcbmJpb2dyYXBoaWNcXG5iaW9ncmFwaGljYWwvWVxcbmJpb2dyYXBoeS9TTVxcbmJpb2xcXG5iaW9sb2dpY1xcbmJpb2xvZ2ljYWwvWVxcbmJpb2xvZ2lzdC9NU1xcbmJpb2xvZ3kvTVxcbmJpb21hcmtlci9NU1xcbmJpb21hc3MvTVxcbmJpb21lZGljYWxcXG5iaW9uaWMvU1xcbmJpb25pY2FsbHlcXG5iaW9uaWNzL01cXG5iaW9waHlzaWNhbFxcbmJpb3BoeXNpY2lzdC9NU1xcbmJpb3BoeXNpY3MvTVxcbmJpb3BpYy9NU1xcbmJpb3BzeS9HRFNNXFxuYmlvcmVhY3Rvci9TXFxuYmlvcmh5dGhtL01TXFxuYmlvc2Vuc29yL1NcXG5iaW9zcGhlcmUvU01cXG5iaW9zeW50aGVzaXNcXG5iaW90ZWNoXFxuYmlvdGVjaG5vbG9naWNhbFxcbmJpb3RlY2hub2xvZ3kvTVxcbmJpb3Rpbi9NXFxuYmlwYXJ0aXNhblxcbmJpcGFydGlzYW5zaGlwL01cXG5iaXBhcnRpdGVcXG5iaXBlZC9NU1xcbmJpcGVkYWxcXG5iaXBsYW5lL01TXFxuYmlwb2xhclxcbmJpcG9sYXJpdHkvTVxcbmJpcmFjaWFsXFxuYmlyY2gvR01EU1xcbmJpcmQvU1pHTURSXFxuYmlyZGJhdGgvTVxcbmJpcmRiYXRoc1xcbmJpcmRicmFpbi9TTURcXG5iaXJkY2FnZS9TXFxuYmlyZGVyL01cXG5iaXJkaG91c2UvTVNcXG5iaXJkaWUvTURTXFxuYmlyZGllaW5nXFxuYmlyZGxpa2VcXG5iaXJkbGltZS9NXFxuYmlyZHNlZWQvTVxcbmJpcmRzb25nXFxuYmlyZHdhdGNoZXIvU01cXG5iaXJkeWluZ1xcbmJpcmV0dGEvU01cXG5iaXJ0aC9aR01EUlxcbmJpcnRoZGF5L01TXFxuYmlydGhlci9NXFxuYmlydGhtYXJrL01TXFxuYmlydGhwbGFjZS9NU1xcbmJpcnRocmF0ZS9NU1xcbmJpcnRocmlnaHQvTVNcXG5iaXJ0aHMvQVxcbmJpcnRoc3RvbmUvU01cXG5iaXNjdWl0L1NNXFxuYmlzZWN0L0RHU1xcbmJpc2VjdGlvbi9NU1xcbmJpc2VjdG9yL1NNXFxuYmlzZXh1YWwvTVlTXFxuYmlzZXh1YWxpdHkvTVxcbmJpc2hvcC9NU1xcbmJpc2hvcHJpYy9TTVxcbmJpc211dGgvTVxcbmJpc29uL01cXG5iaXNxdWUvTVxcbmJpc3Ryby9NU1xcbmJpdC9DU01HXFxuYml0Y2gvR01EU1xcbmJpdGNoaWx5XFxuYml0Y2hpbmVzcy9NXFxuYml0Y2h5L1BSVFxcbmJpdGNvaW4vU01cXG5iaXRlL1JTTVpcXG5iaXRlci9NXFxuYml0aW5nL1lcXG5iaXRtYXAvU1xcbmJpdHRlblxcbmJpdHRlci9QTVJZVFNcXG5iaXR0ZXJuL1NNXFxuYml0dGVybmVzcy9NXFxuYml0dGVycy9NXFxuYml0dGVyc3dlZXQvTVNcXG5iaXR0eS9UUlxcbmJpdHVtZW4vTVxcbmJpdHVtaW5vdXNcXG5iaXZhbGVudFxcbmJpdmFsdmUvU01cXG5iaXZvdWFjL01TXFxuYml2b3VhY2tlZFxcbmJpdm91YWNraW5nXFxuYml3ZWVrbHkvU01cXG5iaXllYXJseVxcbmJpei9NXFxuYml6YXJyZS9ZXFxuYmtcXG5ibC9ER1xcbmJsYWIvU01cXG5ibGFiYmVkXFxuYmxhYmJlci9ER1NcXG5ibGFiYmVybW91dGgvTVxcbmJsYWJiZXJtb3V0aHNcXG5ibGFiYmluZ1xcbmJsYWNrL1BYVEdNRE5SWVNcXG5ibGFja2Ftb29yL01TXFxuYmxhY2tiYWxsL1NHTURcXG5ibGFja2JlcnJ5L0dTTVxcbmJsYWNrYmlyZC9TTVxcbmJsYWNrYm9hcmQvTVNcXG5ibGFja2N1cnJhbnQvU1xcbmJsYWNrZW4vREdcXG5ibGFja2ZhY2VcXG5ibGFja2d1YXJkL1NNXFxuYmxhY2toZWFkL01TXFxuYmxhY2tpbmcvTVxcbmJsYWNraXNoXFxuYmxhY2tqYWNrL01ER1NcXG5ibGFja2xlZy9TXFxuYmxhY2tsaXN0L01EU0dcXG5ibGFja21haWwvTURSU1pHXFxuYmxhY2ttYWlsZXIvTVxcbmJsYWNrbmVzcy9NXFxuYmxhY2tvdXQvU01cXG5ibGFja3NtaXRoL01cXG5ibGFja3NtaXRoc1xcbmJsYWNrc25ha2UvU01cXG5ibGFja3Rob3JuL1NNXFxuYmxhY2t0b3AvU01cXG5ibGFja3RvcHBlZFxcbmJsYWNrdG9wcGluZ1xcbmJsYWRkZXIvTVNcXG5ibGFkZS9NRFNcXG5ibGFnL1NcXG5ibGFnZ2VkXFxuYmxhZ2dpbmdcXG5ibGFoL01cXG5ibGFocy9NXFxuYmxhbWUvQk1HRFJTXFxuYmxhbWVsZXNzL1lQXFxuYmxhbWVsZXNzbmVzcy9NXFxuYmxhbWV3b3J0aGluZXNzL01cXG5ibGFtZXdvcnRoeS9QXFxuYmxhbW1vXFxuYmxhbmNoL0dEU1xcbmJsYW5jbWFuZ2UvTVNcXG5ibGFuZC9QVFJZXFxuYmxhbmRpc2gvRFNMR1xcbmJsYW5kaXNobWVudC9TTVxcbmJsYW5kbmVzcy9NXFxuYmxhbmsvVEdQTURSWVNcXG5ibGFua2V0L0dNRFNcXG5ibGFua25lc3MvTVxcbmJsYXJlL01HRFNcXG5ibGFybmV5L1NNREdcXG5ibGFzZVxcbmJsYXNwaGVtZS9aR0RSU1xcbmJsYXNwaGVtZXIvTVxcbmJsYXNwaGVtb3VzL1lcXG5ibGFzcGhlbXkvU01cXG5ibGFzdC9aR01EUlNcXG5ibGFzdGVyL01cXG5ibGFzdG9mZi9NU1xcbmJsYXQvU1xcbmJsYXRhbmN5L1NNXFxuYmxhdGFudC9ZXFxuYmxhdGhlci9TTURHXFxuYmxhemUvTVpHRFJTXFxuYmxhemVyL01cXG5ibGF6b24vTURHU1xcbmJsZGdcXG5ibGVhY2gvTURSU1pHXFxuYmxlYWNoZWQvVVxcbmJsZWFjaGVyL01cXG5ibGVhay9UUFJZXFxuYmxlYWtuZXNzL01cXG5ibGVhclxcbmJsZWFyaWx5XFxuYmxlYXJpbmVzcy9NXFxuYmxlYXJ5L1BSVFxcbmJsZWF0L0dNRFNcXG5ibGVlZC9aR1JTXFxuYmxlZWRlci9NXFxuYmxlZWRpbmcvTVxcbmJsZWVwL1pHTURSU1xcbmJsZWVwZXIvTVxcbmJsZW1pc2gvR01EU1xcbmJsZW1pc2hlZC9VXFxuYmxlbmNoL0RTR1xcbmJsZW5kL1pHTURSU1xcbmJsZW5kZXIvTVxcbmJsZXNzL0dEU0pcXG5ibGVzc2VkL1lQXFxuYmxlc3NlZG5lc3MvTVxcbmJsZXNzaW5nL01cXG5ibGV0Y2hcXG5ibGV3XFxuYmxpZ2h0L1pHTURSU1xcbmJsaW1leVxcbmJsaW1wL01TXFxuYmxpbXBpc2hcXG5ibGluZC9QWlRHTURSWVNcXG5ibGluZGVyL01cXG5ibGluZGZvbGQvU01ER1xcbmJsaW5kaW5nL1lcXG5ibGluZG5lc3MvTVxcbmJsaW5kc2lkZS9EU0dcXG5ibGluaS9NU1xcbmJsaW5rL1pHTURSU1xcbmJsaW5rZXIvTURHXFxuYmxpbnR6L01TXFxuYmxpbnR6ZS9NXFxuYmxpcC9TTVxcbmJsaXNzL01cXG5ibGlzc2Z1bC9ZUFxcbmJsaXNzZnVsbmVzcy9NXFxuYmxpc3Rlci9HTURTXFxuYmxpc3RlcmluZy9ZXFxuYmxpc3RlcnlcXG5ibGl0aGUvUFlUUlxcbmJsaXRoZW5lc3MvTVxcbmJsaXRoZXIvR1xcbmJsaXRoZXNvbWVcXG5ibGl0ei9HTURTXFxuYmxpdHprcmllZy9NU1xcbmJsaXZldC9TXFxuYmxpenphcmQvU01cXG5ibG9hdC9aR0RSU1xcbmJsb2F0d2FyZVxcbmJsb2IvU01cXG5ibG9iYmVkXFxuYmxvYmJpbmdcXG5ibG9jL1NNXFxuYmxvY2snc1xcbmJsb2NrL1VHRFNcXG5ibG9ja2FkZS9NWkdEUlNcXG5ibG9ja2FkZXIvTVxcbmJsb2NrYWdlL01TXFxuYmxvY2tidXN0ZXIvU01cXG5ibG9ja2J1c3RpbmcvTVxcbmJsb2NrY2hhaW4vTVNcXG5ibG9ja2VyL01TXFxuYmxvY2toZWFkL1NNXFxuYmxvY2tob3VzZS9NU1xcbmJsb2cvU01cXG5ibG9nZ2VkXFxuYmxvZ2dlci9NU1xcbmJsb2dnaW5nXFxuYmxva2UvTVNcXG5ibG9raXNoXFxuYmxvbmQvUFRNUlNcXG5ibG9uZGUvTVNcXG5ibG9uZGlzaFxcbmJsb25kbmVzcy9NXFxuYmxvb2QvR01EU1xcbmJsb29kYmF0aC9NXFxuYmxvb2RiYXRoc1xcbmJsb29kY3VyZGxpbmdcXG5ibG9vZGhvdW5kL1NNXFxuYmxvb2RpbHlcXG5ibG9vZGluZXNzL01cXG5ibG9vZGxlc3MvWVBcXG5ibG9vZGxlc3NuZXNzL01cXG5ibG9vZGxldHRpbmcvTVxcbmJsb29kbGluZS9TTVxcbmJsb29kbW9iaWxlL01TXFxuYmxvb2RzaGVkL01cXG5ibG9vZHNob3RcXG5ibG9vZHN0YWluL1NNRFxcbmJsb29kc3RvY2svTVxcbmJsb29kc3RyZWFtL1NNXFxuYmxvb2RzdWNrZXIvU01cXG5ibG9vZHN1Y2tpbmdcXG5ibG9vZHRoaXJzdGlseVxcbmJsb29kdGhpcnN0aW5lc3MvTVxcbmJsb29kdGhpcnN0eS9SUFRcXG5ibG9vZHkvUFRHRFJTXFxuYmxvb20vWkdNRFJTXFxuYmxvb21lci9NXFxuYmxvb3AvWkdNRFJTXFxuYmxvb3Blci9NXFxuYmxvc3NvbS9HTURTXFxuYmxvc3NvbXlcXG5ibG90L1NNXFxuYmxvdGNoL0dNRFNcXG5ibG90Y2h5L1RSXFxuYmxvdHRlZFxcbmJsb3R0ZXIvTVNcXG5ibG90dGluZ1xcbmJsb3R0b1xcbmJsb3VzZS9NR0RTXFxuYmxvdy9TWkdNUlxcbmJsb3dlci9NXFxuYmxvd2ZseS9TTVxcbmJsb3dndW4vTVNcXG5ibG93aGFyZC9NU1xcbmJsb3dob2xlL1NcXG5ibG93am9iL1NNXFxuYmxvd2xhbXAvU1xcbmJsb3duXFxuYmxvd291dC9TTVxcbmJsb3dwaXBlL1NNXFxuYmxvd3RvcmNoL01TXFxuYmxvd3VwL01TXFxuYmxvd3kvVFJcXG5ibG93enkvUlRcXG5ibHViYmVyL0dTTURcXG5ibHViYmVyeVxcbmJsdWRnZW9uL01ER1NcXG5ibHVlL0RSU1BNVEdcXG5ibHVlYmVsbC9NU1xcbmJsdWViZXJyeS9TTVxcbmJsdWViaXJkL01TXFxuYmx1ZWJvbm5ldC9TTVxcbmJsdWVib3R0bGUvU01cXG5ibHVlZmlzaC9NU1xcbmJsdWVnaWxsL01TXFxuYmx1ZWdyYXNzL01cXG5ibHVlaXNoXFxuYmx1ZWphY2tldC9TTVxcbmJsdWVqZWFucy9NXFxuYmx1ZW5lc3MvTVxcbmJsdWVub3NlL01TXFxuYmx1ZXBvaW50L01TXFxuYmx1ZXByaW50L01ER1NcXG5ibHVlc3RvY2tpbmcvU01cXG5ibHVlc3kvUlRcXG5ibHVldC9NU1xcbmJsdWZmL1pUR1BNRFJZU1xcbmJsdWZmZXIvTVxcbmJsdWZmbmVzcy9NXFxuYmx1aW5nL01cXG5ibHVpc2hcXG5ibHVuZGVyL01EUlpHU1xcbmJsdW5kZXJidXNzL01TXFxuYmx1bmRlcmVyL01cXG5ibHVudC9QVEdEUllTXFxuYmx1bnRuZXNzL01cXG5ibHVyL1NNXFxuYmx1cmIvTVNcXG5ibHVycmVkXFxuYmx1cnJpbmVzcy9NXFxuYmx1cnJpbmdcXG5ibHVycnkvVFJQXFxuYmx1cnQvR0RTXFxuYmx1c2gvWkdNRFJTXFxuYmx1c2hlci9NXFxuYmx1c3Rlci9NRFJTWkdcXG5ibHVzdGVyZXIvTVxcbmJsdXN0ZXJvdXNcXG5ibHVzdGVyeVxcbmJsdmRcXG5ib2EvU01cXG5ib2FyL1NNXFxuYm9hcmQvWkdNRFJTXFxuYm9hcmRlci9NXFxuYm9hcmRpbmcvTVxcbmJvYXJkaW5naG91c2UvTVNcXG5ib2FyZHJvb20vTVNcXG5ib2FyZHdhbGsvTVNcXG5ib2FzdC9aR01EUlNcXG5ib2FzdGVyL01cXG5ib2FzdGZ1bC9QWVxcbmJvYXN0ZnVsbmVzcy9NXFxuYm9hdC9TWkdNRFJcXG5ib2F0ZXIvTVxcbmJvYXRob3VzZS9NU1xcbmJvYXRpbmcvTVxcbmJvYXRsb2FkL1NcXG5ib2F0bWFuL01cXG5ib2F0bWVuXFxuYm9hdHN3YWluL1NNXFxuYm9hdHlhcmQvU1xcbmJvYi9TTVxcbmJvYmJlZFxcbmJvYmJpbi9NU1xcbmJvYmJpbmdcXG5ib2JibGUvTUdEU1xcbmJvYmJ5L1NNXFxuYm9iYnlzb3hlci9TTVxcbmJvYmNhdC9NU1xcbmJvYm9saW5rL1NNXFxuYm9ic2xlZC9TTVxcbmJvYnNsZWRkZWRcXG5ib2JzbGVkZGVyL01TXFxuYm9ic2xlZGRpbmdcXG5ib2JzbGVpZ2gvTVxcbmJvYnNsZWlnaHNcXG5ib2J0YWlsL1NNXFxuYm9id2hpdGUvTVNcXG5ib2NjaWUvTVxcbmJvY2svTVxcbmJvZC9TTURHXFxuYm9kYWNpb3VzXFxuYm9kZS9TXFxuYm9kZWdhL01TXFxuYm9kZ2UvR0RTXFxuYm9kaWNlL01TXFxuYm9kaWx5XFxuYm9ka2luL01TXFxuYm9keS9EU01cXG5ib2R5YnVpbGRlci9TTVxcbmJvZHlidWlsZGluZy9NXFxuYm9keWd1YXJkL01TXFxuYm9keXN1aXQvU01cXG5ib2R5d29yay9NXFxuYm9mZmluL1NcXG5ib2Zmb1xcbmJvZy9TTVxcbmJvZ2FcXG5ib2dleS9HTURTXFxuYm9nZXltYW4vTVxcbmJvZ2V5bWVuXFxuYm9nZ2VkXFxuYm9nZ2luZ1xcbmJvZ2dsZS9HRFNcXG5ib2dneS9UUlxcbmJvZ2llL01TXFxuYm9nb25cXG5ib2dvc2l0eVxcbmJvZ3VzXFxuYm9neW1hbi9NXFxuYm9neW1lblxcbmJvaGVtaWFuL1NNXFxuYm9oZW1pYW5pc20vTVxcbmJvaWwvU0paR01EUlxcbmJvaWxlci9NXFxuYm9pbGVybWFrZXIvU01cXG5ib2lsZXJwbGF0ZS9NXFxuYm9pbmsvR0RTXFxuYm9pc3Rlcm91cy9ZUFxcbmJvaXN0ZXJvdXNuZXNzL01cXG5ib2xhL1NNXFxuYm9sZC9QVFJZXFxuYm9sZGZhY2UvRE1cXG5ib2xkbmVzcy9NXFxuYm9sZS9TTVxcbmJvbGVyby9NU1xcbmJvbGl2YXIvTVNcXG5ib2xpdmFyZXNcXG5ib2xsL1NNXFxuYm9sbGFyZC9TXFxuYm9sbGl4L0dNRFNcXG5ib2xsb2NraW5nL1NcXG5ib2xsb2Nrc1xcbmJvbG9nbmEvTVxcbmJvbHNoaWVcXG5ib2xzdGVyL0dNRFNcXG5ib2x0J3NcXG5ib2x0L1VTR0RcXG5ib2x0aG9sZS9TXFxuYm9sdXMvTVNcXG5ib21iL1NKWkdNRFJcXG5ib21iYXJkL0dETFNcXG5ib21iYXJkaWVyL01TXFxuYm9tYmFyZG1lbnQvU01cXG5ib21iYXN0L01cXG5ib21iYXN0aWNcXG5ib21iYXN0aWNhbGx5XFxuYm9tYmVyL01cXG5ib21icHJvb2ZcXG5ib21ic2hlbGwvU01cXG5ib21ic2l0ZS9TXFxuYm9uYW56YS9NU1xcbmJvbmJvbi9NU1xcbmJvbmNlL1NcXG5ib25kL1NHTURcXG5ib25kYWdlL01cXG5ib25kaG9sZGVyL01TXFxuYm9uZGluZy9NXFxuYm9uZG1hbi9NXFxuYm9uZG1lblxcbmJvbmRzbWFuL01cXG5ib25kc21lblxcbmJvbmR3b21hbi9NXFxuYm9uZHdvbWVuXFxuYm9uZS9EUlNNWkdcXG5ib25laGVhZC9TTURcXG5ib25lbGVzc1xcbmJvbmVyL01cXG5ib25lc2hha2VyL1NcXG5ib25leWFyZFxcbmJvbmZpcmUvTVNcXG5ib25nL1NHTURcXG5ib25nby9NU1xcbmJvbmhvbWllL01cXG5ib25pbmVzcy9NXFxuYm9uaXRvL01TXFxuYm9uay9TWkdEXFxuYm9ubmV0L01TXFxuYm9ubnkvVFJcXG5ib25vYm8vTVNcXG5ib25zYWkvTVxcbmJvbnVzL01TXFxuYm9ueS9QVFJcXG5ib28vU01ESEdcXG5ib29iL1NHTURcXG5ib29ieS9TTVxcbmJvb2RsZS9NU1xcbmJvb2dlci9TXFxuYm9vZ2V5bWFuL01cXG5ib29nZXltZW5cXG5ib29naWUvTURTXFxuYm9vZ2llaW5nXFxuYm9vZ2llbWFuL01cXG5ib29ob28vR01EU1xcbmJvb2svU0JKR01EXFxuYm9va2JpbmRlci9TTVxcbmJvb2tiaW5kZXJ5L1NNXFxuYm9va2JpbmRpbmcvTVxcbmJvb2tjYXNlL01TXFxuYm9va2VuZC9NU1xcbmJvb2tpZS9NU1xcbmJvb2tpbmcvTVxcbmJvb2tpc2hcXG5ib29ra2VlcGVyL01TXFxuYm9va2tlZXBpbmcvTVxcbmJvb2tsZXQvTVNcXG5ib29rbWFrZXIvU01cXG5ib29rbWFraW5nL01cXG5ib29rbWFyay9TTURHXFxuYm9va21vYmlsZS9TTVxcbmJvb2twbGF0ZS9NU1xcbmJvb2tzZWxsZXIvTVNcXG5ib29rc2hlbGYvTVxcbmJvb2tzaGVsdmVzXFxuYm9va3Nob3AvU01cXG5ib29rc3RhbGwvU1xcbmJvb2tzdG9yZS9NU1xcbmJvb2t3b3JtL1NNXFxuYm9vbGVhblxcbmJvb20vU1pHTURSXFxuYm9vbWJveC9NU1xcbmJvb21lcmFuZy9NREdTXFxuYm9vbi9TTVxcbmJvb25kb2Nrcy9NXFxuYm9vbmRvZ2dsZS9NWkdEUlNcXG5ib29uZG9nZ2xlci9NXFxuYm9vbmllcy9NXFxuYm9vci9TTVxcbmJvb3Jpc2gvUFlcXG5ib29yaXNobmVzcy9NU1xcbmJvb3N0L1pHTURSU1xcbmJvb3N0ZXIvTVxcbmJvb3Qnc1xcbmJvb3QvQVNHRFxcbmJvb3RibGFjay9TTVxcbmJvb3RlZS9NU1xcbmJvb3RoL01cXG5ib290aHNcXG5ib290bGFjZS9TXFxuYm9vdGxlZy9NU1xcbmJvb3RsZWdnZWRcXG5ib290bGVnZ2VyL01TXFxuYm9vdGxlZ2dpbmcvTVxcbmJvb3RsZXNzXFxuYm9vdHN0cmFwL01TXFxuYm9vdHN0cmFwcGVkXFxuYm9vdHN0cmFwcGluZ1xcbmJvb3R5L1NNXFxuYm9vemUvTVpHRFJTXFxuYm9vemVyL01cXG5ib296eS9UUlxcbmJvcC9TTVxcbmJvcHBlZFxcbmJvcHBpbmdcXG5ib3JheC9NXFxuYm9yZGVsbG8vTVNcXG5ib3JkZXIvR01EU1xcbmJvcmRlcmxhbmQvTVNcXG5ib3JkZXJsaW5lL01TXFxuYm9yZS9EUlNNWkdcXG5ib3JlZG9tL01cXG5ib3JlaG9sZS9TXFxuYm9yZXIvTVxcbmJvcmluZy9ZXFxuYm9ybi9JQVVcXG5ib3JuZVxcbmJvcm9uL01cXG5ib3JvdWdoL01cXG5ib3JvdWdoc1xcbmJvcnJvdy9TRFJaR0pcXG5ib3Jyb3dlci9NXFxuYm9ycm93aW5nL01cXG5ib3JzY2h0L01cXG5ib3JzdGFsL1NcXG5ib3J6b2kvU01cXG5ib3NoL01cXG5ib3NvbSdzXFxuYm9zb20vVVNcXG5ib3NvbXlcXG5ib3NzL0RTR01cXG5ib3NzaWx5XFxuYm9zc2luZXNzL01cXG5ib3NzaXNtL01cXG5ib3NzeS9SVFBcXG5ib3QvU1xcbmJvdGFuaWNcXG5ib3RhbmljYWwvWVxcbmJvdGFuaXN0L1NNXFxuYm90YW55L01cXG5ib3RjaC9EUlNaR01cXG5ib3RjaGVyL01cXG5ib3RoXFxuYm90aGVyL1NNREdcXG5ib3RoZXJhdGlvblxcbmJvdGhlcmVkL1VcXG5ib3RoZXJzb21lXFxuYm90bmV0L1NNXFxuYm90dGxlL0RSU01aR1xcbmJvdHRsZW5lY2svTVNcXG5ib3R0bGVyL01cXG5ib3R0b20vU01ER1xcbmJvdHRvbWxlc3NcXG5ib3R1bGludW1cXG5ib3R1bGlzbS9NXFxuYm91ZG9pci9TTVxcbmJvdWZmYW50L1NNXFxuYm91Z2FpbnZpbGxlYS9NU1xcbmJvdWdoL01cXG5ib3VnaHNcXG5ib3VnaHRcXG5ib3VpbGxhYmFpc3NlL1NNXFxuYm91aWxsb24vTVNcXG5ib3VsZGVyL1NNXFxuYm91bGVzXFxuYm91bGV2YXJkL1NNXFxuYm91bmNlL0RSU01aR1xcbmJvdW5jZXIvTVxcbmJvdW5jaWx5XFxuYm91bmNpbmVzcy9NXFxuYm91bmN5L1JUUFxcbmJvdW5kL0FTTUdEXFxuYm91bmRhcnkvU01cXG5ib3VuZGVuXFxuYm91bmRlci9TTVxcbmJvdW5kbGVzcy9QWVxcbmJvdW5kbGVzc25lc3MvTVxcbmJvdW50ZW91cy9ZUFxcbmJvdW50ZW91c25lc3MvTVxcbmJvdW50aWZ1bC9ZUFxcbmJvdW50aWZ1bG5lc3MvTVxcbmJvdW50eS9TTVxcbmJvdXF1ZXQvU01cXG5ib3VyYm9uL1NNXFxuYm91cmdlb2lzL01cXG5ib3VyZ2VvaXNpZS9NXFxuYm91c3Ryb3BoZWRvblxcbmJvdXQvTVNcXG5ib3V0aXF1ZS9TTVxcbmJvdXRvbm5pZXJlL01TXFxuYm91em91a2kvTVNcXG5ib3ZpbmUvU01cXG5ib3Z2ZXJcXG5ib3cvWkdTTURSXFxuYm93ZGxlcml6YXRpb24vTVNcXG5ib3dkbGVyaXplL0RTR1xcbmJvd2VkL1VcXG5ib3dlbC9TTVxcbmJvd2VyL01cXG5ib3dsL01EUlpHU1xcbmJvd2xlZy9TTVxcbmJvd2xlZ2dlZFxcbmJvd2xlci9NXFxuYm93bGZ1bC9TTVxcbmJvd2xpbmUvU01cXG5ib3dsaW5nL01cXG5ib3dtYW4vTVxcbmJvd21lblxcbmJvd3Nwcml0L1NNXFxuYm93c3RyaW5nL1NNXFxuYm93d293L1NNXFxuYm94L1pHTUROUlNcXG5ib3hjYXIvU01cXG5ib3hlci9NXFxuYm94aW5nL01cXG5ib3hsaWtlXFxuYm94cm9vbS9TXFxuYm94d29vZC9NXFxuYm94eS9SVFxcbmJveS9TTVxcbmJveWNvdHQvU0dNRFxcbmJveWZyaWVuZC9NU1xcbmJveWhvb2QvU01cXG5ib3lpc2gvWVBcXG5ib3lpc2huZXNzL01cXG5ib3lzZW5iZXJyeS9TTVxcbmJvem8vTVNcXG5icG1cXG5icHNcXG5icmEvU01cXG5icmFjZS9NWkdEUlNcXG5icmFjZWxldC9NU1xcbmJyYWNlci9NXFxuYnJhY2Vyby9NU1xcbmJyYWNrZW4vTVxcbmJyYWNrZXQvR01EU1xcbmJyYWNraXNoL1BcXG5icmFja2lzaG5lc3MvTVxcbmJyYWN0L01TXFxuYnJhZC9TTVxcbmJyYWRhd2wvU1xcbmJyYWR5Y2FyZGlhXFxuYnJhZS9TTVxcbmJyYWcvU01cXG5icmFnZ2Fkb2Npby9TTVxcbmJyYWdnYXJ0L1NNXFxuYnJhZ2dlZFxcbmJyYWdnZXIvTVNcXG5icmFnZ2luZ1xcbmJyYWlkL0dNRFNcXG5icmFpZGluZy9NXFxuYnJhaWxsZS9NXFxuYnJhaW4vR01EU1xcbmJyYWluY2hpbGQvTVxcbmJyYWluY2hpbGRyZW4vTVxcbmJyYWluaW5lc3MvTVxcbmJyYWlubGVzcy9ZXFxuYnJhaW5wb3dlclxcbmJyYWluc3Rvcm0vU01ER1xcbmJyYWluc3Rvcm1pbmcvTVxcbmJyYWludGVhc2VyL1NNXFxuYnJhaW53YXNoL0RTR1xcbmJyYWlud2FzaGluZy9NXFxuYnJhaW53YXZlL1NcXG5icmFpbnkvUFRSXFxuYnJhaXNlL0dEU1xcbmJyYWtlL01HRFNcXG5icmFrZW1hbi9NXFxuYnJha2VtZW5cXG5icmFtYmxlL01TXFxuYnJhbWJseVxcbmJyYW4vTVxcbmJyYW5jaC9HTURTXFxuYnJhbmNobGlrZVxcbmJyYW5kL1pHTURSU1xcbmJyYW5kZWQvVVxcbmJyYW5kZXIvTVxcbmJyYW5kaXNoL0RTR1xcbmJyYW5keS9HRFNNXFxuYnJhc2gvUFRSWVxcbmJyYXNobmVzcy9NXFxuYnJhc3MvTVNcXG5icmFzc2VyaWUvTVNcXG5icmFzc2llcmUvTVNcXG5icmFzc2lseVxcbmJyYXNzaW5lc3MvTVxcbmJyYXNzeS9QVFJcXG5icmF0L1NNXFxuYnJhdHR5L1JUXFxuYnJhdHd1cnN0L1NNXFxuYnJhdmFkby9NXFxuYnJhdmUvR1BNWURUUlNcXG5icmF2ZW5lc3MvTVxcbmJyYXZlcnkvTVxcbmJyYXZvL1NNXFxuYnJhdnVyYS9TTVxcbmJyYXdsL1NEUlpHTVxcbmJyYXdsZXIvTVxcbmJyYXduL01cXG5icmF3bmluZXNzL01cXG5icmF3bnkvUlRQXFxuYnJheS9ER1NNXFxuYnJhemUvRFJTWkdcXG5icmF6ZW4vU0RZR1BcXG5icmF6ZW5uZXNzL01cXG5icmF6ZXIvTVxcbmJyYXppZXIvU01cXG5icmVhY2gvR01EU1xcbmJyZWFkL0dNREhTXFxuYnJlYWRiYXNrZXQvU01cXG5icmVhZGJvYXJkL1NNXFxuYnJlYWRib3gvTVNcXG5icmVhZGNydW1iL01TXFxuYnJlYWRmcnVpdC9TTVxcbmJyZWFkbGluZS9NU1xcbmJyZWFkdGgvTVxcbmJyZWFkdGhzXFxuYnJlYWR3aW5uZXIvU01cXG5icmVhay9CTVpHUlNcXG5icmVha2FibGUvTVNcXG5icmVha2FnZS9NU1xcbmJyZWFrYXdheS9NU1xcbmJyZWFrZG93bi9NU1xcbmJyZWFrZXIvTVxcbmJyZWFrZmFzdC9NREdTXFxuYnJlYWtmcm9udC9NU1xcbmJyZWFrbmVja1xcbmJyZWFrb3V0L01TXFxuYnJlYWtwb2ludHNcXG5icmVha3Rocm91Z2gvTVxcbmJyZWFrdGhyb3VnaHNcXG5icmVha3VwL1NNXFxuYnJlYWt3YXRlci9TTVxcbmJyZWFtL01TXFxuYnJlYXN0L1NNREdcXG5icmVhc3Rib25lL01TXFxuYnJlYXN0ZmVkXFxuYnJlYXN0ZmVlZC9HU1xcbmJyZWFzdHBsYXRlL1NNXFxuYnJlYXN0c3Ryb2tlL1NNXFxuYnJlYXN0d29yay9NU1xcbmJyZWF0aC9NRFJTWkdCXFxuYnJlYXRoYWx5emUvWkdEUlNcXG5icmVhdGhlXFxuYnJlYXRoZXIvTVxcbmJyZWF0aGluZy9NXFxuYnJlYXRobGVzcy9QWVxcbmJyZWF0aGxlc3NuZXNzL01cXG5icmVhdGhzXFxuYnJlYXRodGFraW5nL1lcXG5icmVhdGh5L1JUXFxuYnJlZC9JXFxuYnJlZWNoL01TXFxuYnJlZWQvU1JaR01cXG5icmVlZGVyL01cXG5icmVlZGluZy9JTVxcbmJyZWV6ZS9EU01HXFxuYnJlZXpld2F5L1NNXFxuYnJlZXppbHlcXG5icmVlemluZXNzL01cXG5icmVlenkvUlRQXFxuYnJldGhyZW5cXG5icmV2ZS9TTVxcbmJyZXZldC9TTVxcbmJyZXZldHRlZFxcbmJyZXZldHRpbmdcXG5icmV2aWFyeS9TTVxcbmJyZXZpdHkvTVxcbmJyZXcvTURSWkdTXFxuYnJld2VyL01cXG5icmV3ZXJ5L1NNXFxuYnJld3B1Yi9TTVxcbmJyaWJlL0RSU01aR1xcbmJyaWJlci9NXFxuYnJpYmVyeS9NXFxuYnJpY2svU01ER1xcbmJyaWNrYmF0L1NNXFxuYnJpY2tpZS9TXFxuYnJpY2tsYXllci9NU1xcbmJyaWNrbGF5aW5nL01cXG5icmlja3dvcmsvTVxcbmJyaWNreWFyZC9TXFxuYnJpZGFsL1NNXFxuYnJpZGUvU01cXG5icmlkZWdyb29tL1NNXFxuYnJpZGVzbWFpZC9NU1xcbmJyaWRnZS9EU01HXFxuYnJpZGdlYWJsZS9VXFxuYnJpZGdlaGVhZC9TTVxcbmJyaWRnZXdvcmsvTVxcbmJyaWRsZS9EU01HXFxuYnJpZGxlZC9VXFxuYnJpZGxld2F5L1NcXG5icmllL01aUlxcbmJyaWVmJ3NcXG5icmllZi9DU0RUR0pcXG5icmllZmNhc2UvU01cXG5icmllZmVyXFxuYnJpZWZpbmcvQ01cXG5icmllZmx5XFxuYnJpZWZuZXNzL01cXG5icmllci9NXFxuYnJpZy9NU1xcbmJyaWdhZGUvU01cXG5icmlnYWRpZXIvTVNcXG5icmlnYW5kL1NNXFxuYnJpZ2FuZGFnZS9NXFxuYnJpZ2FudGluZS9NU1xcbmJyaWdodC9TUE5SWVhUXFxuYnJpZ2h0ZW4vRFJaR1xcbmJyaWdodGVuZXIvTVxcbmJyaWdodG5lc3MvTVxcbmJyaWdodHMvTVxcbmJyaWxsXFxuYnJpbGxpYW5jZS9NXFxuYnJpbGxpYW5jeS9NXFxuYnJpbGxpYW50L01ZU1xcbmJyaWxsaWFudGluZS9NXFxuYnJpbS9NU1xcbmJyaW1mdWxcXG5icmltbGVzc1xcbmJyaW1tZWRcXG5icmltbWluZ1xcbmJyaW1zdG9uZS9NXFxuYnJpbmRsZS9ETVxcbmJyaW5lL01cXG5icmluZy9TUlpHXFxuYnJpbmdlci9NXFxuYnJpbmluZXNzL01cXG5icmluay9TTVxcbmJyaW5rbWFuc2hpcC9NXFxuYnJpbnkvUlRQXFxuYnJpb2NoZS9TTVxcbmJyaXF1ZXR0ZS9NU1xcbmJyaXNrL1NEUllUR1BcXG5icmlza2V0L1NNXFxuYnJpc2tuZXNzL01cXG5icmlzdGxlL0RTTUdcXG5icmlzdGx5L1RSXFxuYnJpdGNoZXMvTVxcbmJyaXR0bGUvUFJNVFxcbmJyaXR0bGVuZXNzL01cXG5icm8vU01IXFxuYnJvYWNoL01EU0dcXG5icm9hZC9TTU5SWVhUUFxcbmJyb2FkYmFuZC9NXFxuYnJvYWRjYXN0L0FNR1NcXG5icm9hZGNhc3Rlci9NU1xcbmJyb2FkY2FzdGluZy9NXFxuYnJvYWRjbG90aC9NXFxuYnJvYWRlbi9ER1xcbmJyb2FkbG9vbS9NXFxuYnJvYWRtaW5kZWRcXG5icm9hZG5lc3MvTVxcbmJyb2Fkc2hlZXQvU01cXG5icm9hZHNpZGUvTUdEU1xcbmJyb2Fkc3dvcmQvU01cXG5icm9jYWRlL0RTTUdcXG5icm9jY29saS9NXFxuYnJvY2hldHRlL1NNXFxuYnJvY2h1cmUvTVNcXG5icm9nYW4vU01cXG5icm9ndWUvU01cXG5icm9pbC9TTURSWkdcXG5icm9pbGVyL01cXG5icm9rZVxcbmJyb2tlbi9ZUFxcbmJyb2tlbmhlYXJ0ZWQvWVxcbmJyb2tlbm5lc3MvTVxcbmJyb2tlci9TTURHXFxuYnJva2VyYWdlL01TXFxuYnJvbGx5L1NcXG5icm9taWRlL1NNXFxuYnJvbWlkaWNcXG5icm9taW5lL01cXG5icm9uYy9TTVxcbmJyb25jaGlcXG5icm9uY2hpYWxcXG5icm9uY2hpdGljXFxuYnJvbmNoaXRpcy9NXFxuYnJvbmNodXMvTVxcbmJyb25jby9TTVxcbmJyb25jb2J1c3Rlci9TTVxcbmJyb250b3NhdXIvTVNcXG5icm9udG9zYXVydXMvTVNcXG5icm9uemUvRFNNR1xcbmJyb29jaC9NU1xcbmJyb29kL1NNRFJaR1xcbmJyb29kZXIvTVxcbmJyb29kaWx5XFxuYnJvb2RpbmcvTVlcXG5icm9vZG1hcmUvTVNcXG5icm9vZHkvUk1QVFxcbmJyb29rL1NNREdcXG5icm9va2xldC9TTVxcbmJyb29tL1NNXFxuYnJvb21zdGljay9NU1xcbmJyb3RoL01SWlxcbmJyb3RoZWwvTVNcXG5icm90aGVyL01ZXFxuYnJvdGhlcmhvb2QvTVNcXG5icm90aGVybGluZXNzL01cXG5icm90aHNcXG5icm91Z2hhbS9TTVxcbmJyb3VnaHRcXG5icm91aGFoYS9TTVxcbmJyb3cvTVNcXG5icm93YmVhdC9TTkdcXG5icm93bi9TTURSUFRHXFxuYnJvd25maWVsZFxcbmJyb3duaWUvTVNcXG5icm93bmlzaFxcbmJyb3dubmVzcy9NXFxuYnJvd25vdXQvU01cXG5icm93bnN0b25lL01TXFxuYnJvd3NlL0RSU01aR1xcbmJyb3dzZXIvTVxcbmJyclxcbmJydWluL1NNXFxuYnJ1aXNlL0RSU01aR1xcbmJydWlzZXIvTVxcbmJydWlzaW5nL01cXG5icnVpdC9TREdcXG5icnVuY2gvTURTR1xcbmJydW5ldC9TTVxcbmJydW5ldHRlL01TXFxuYnJ1bnQvTVxcbmJydXNoL01EU0dcXG5icnVzaG9mZi9TTVxcbmJydXNoc3Ryb2tlL1NcXG5icnVzaHdvb2QvTVxcbmJydXNod29yay9NXFxuYnJ1c3F1ZS9SUFlUXFxuYnJ1c3F1ZW5lc3MvTVxcbmJydXRhbC9ZXFxuYnJ1dGFsaXR5L1NNXFxuYnJ1dGFsaXphdGlvbi9NXFxuYnJ1dGFsaXplL0dEU1xcbmJydXRlL1NNXFxuYnJ1dGlzaC9QWVxcbmJydXRpc2huZXNzL01cXG5idVxcbmJ1Yi9TTVxcbmJ1YmJsZS9EU01HXFxuYnViYmxlZ3VtL01cXG5idWJibHkvUk1UXFxuYnViby9NXFxuYnVib2VzXFxuYnVjY2FuZWVyL1NHTURcXG5idWNrL01ER1NcXG5idWNrYXJvby9TTVxcbmJ1Y2tib2FyZC9NU1xcbmJ1Y2tldC9TR01EXFxuYnVja2V0ZnVsL01TXFxuYnVja2V5ZS9NU1xcbmJ1Y2tsZSdzXFxuYnVja2xlL1VEU0dcXG5idWNrbGVyL01TXFxuYnVja3JhbS9NXFxuYnVja3Nhdy9NU1xcbmJ1Y2tzaG90L01cXG5idWNrc2tpbi9NU1xcbmJ1Y2t0ZWV0aFxcbmJ1Y2t0b290aC9NRFxcbmJ1Y2t3aGVhdC9NXFxuYnVja3liYWxsL1NNXFxuYnVjb2xpYy9NU1xcbmJ1Y29saWNhbGx5XFxuYnVkL1NNXFxuYnVkZGVkXFxuYnVkZGluZy9TXFxuYnVkZHkvU01cXG5idWRnZS9EU0dcXG5idWRnZXJpZ2FyL01TXFxuYnVkZ2V0L1NHTURcXG5idWRnZXRhcnlcXG5idWRnaWUvU01cXG5idWZmL0FNREdTXFxuYnVmZmFsby9NREdcXG5idWZmYWxvZXNcXG5idWZmZXIvU01ER1xcbmJ1ZmZldC9TTURHSlxcbmJ1ZmZvb24vU01cXG5idWZmb29uZXJ5L01cXG5idWZmb29uaXNoXFxuYnVnJ3NcXG5idWcvQ1NcXG5idWdhYm9vL1NNXFxuYnVnYmVhci9TTVxcbmJ1Z2dlZC9DXFxuYnVnZ2VyL1NNREdcXG5idWdnZXJ5XFxuYnVnZ2luZy9DXFxuYnVnZ3kvUlNNVFxcbmJ1Z2xlL0RSU01aR1xcbmJ1Z2xlci9NXFxuYnVpbGQvU01SWkdKXFxuYnVpbGRlci9NXFxuYnVpbGRpbmcvTVxcbmJ1aWxkdXAvU01cXG5idWlsdC9BSVxcbmJ1aWx0aW5cXG5idWxiL01TXFxuYnVsYm91c1xcbmJ1bGdlL0RTTUdcXG5idWxneS9SVFxcbmJ1bGltYXJleGlhL01cXG5idWxpbWlhL01cXG5idWxpbWljL1NNXFxuYnVsay9NREdTXFxuYnVsa2hlYWQvTVNcXG5idWxraW5lc3MvTVxcbmJ1bGt5L1JUUFxcbmJ1bGwvTURHU1xcbmJ1bGxkb2cvU01cXG5idWxsZG9nZ2VkXFxuYnVsbGRvZ2dpbmdcXG5idWxsZG96ZS9aR0RSU1xcbmJ1bGxkb3plci9NXFxuYnVsbGV0L1NNRFxcbmJ1bGxldGluL01ER1NcXG5idWxsZXRwcm9vZi9TREdcXG5idWxsZmlnaHQvU01SWkdcXG5idWxsZmlnaHRlci9NXFxuYnVsbGZpZ2h0aW5nL01cXG5idWxsZmluY2gvTVNcXG5idWxsZnJvZy9NU1xcbmJ1bGxoZWFkL01EU1xcbmJ1bGxoZWFkZWQvUFlcXG5idWxsaGVhZGVkbmVzcy9NXFxuYnVsbGhvcm4vTVNcXG5idWxsaW9uL01cXG5idWxsaXNoL1lQXFxuYnVsbGlzaG5lc3MvTVxcbmJ1bGxvY2svU01cXG5idWxscGVuL1NNXFxuYnVsbHJpbmcvTVNcXG5idWxsc2V5ZVxcbmJ1bGxzaGl0L01TIVxcbmJ1bGxzaGl0dGVkLyFcXG5idWxsc2hpdHRlci9TTSFcXG5idWxsc2hpdHRpbmcvIVxcbmJ1bGx3aGlwL1NcXG5idWxseS9EU01HXFxuYnVscnVzaC9NU1xcbmJ1bHdhcmsvTVNcXG5idW0vU01cXG5idW1iYWcvU1xcbmJ1bWJsZS9EUlNaR1xcbmJ1bWJsZWJlZS9TTVxcbmJ1bWJsZXIvTVxcbmJ1bWZcXG5idW1tZWRcXG5idW1tZXIvU01cXG5idW1tZXN0XFxuYnVtbWluZ1xcbmJ1bXAvTURSWkdTXFxuYnVtcGVyL01cXG5idW1waFxcbmJ1bXBpbmVzcy9NXFxuYnVtcGtpbi9NU1xcbmJ1bXB0aW91cy9QWVxcbmJ1bXB0aW91c25lc3MvTVxcbmJ1bXB5L1BSVFxcbmJ1bi9TTVxcbmJ1bmNoL01EU0dcXG5idW5jaHkvUlRcXG5idW5jby9TTURHXFxuYnVuZGxlL0RTTUdcXG5idW5nL01ER1NcXG5idW5nYWxvdy9NU1xcbmJ1bmdlZS9TTVxcbmJ1bmdob2xlL01TXFxuYnVuZ2xlL0RSU01aR1xcbmJ1bmdsZXIvTVxcbmJ1bmlvbi9TTVxcbmJ1bmsnc1xcbmJ1bmsvQ0RHU1xcbmJ1bmtlci9TTVxcbmJ1bmtob3VzZS9TTVxcbmJ1bmt1bS9NXFxuYnVubnkvU01cXG5idW50L01ER1NKXFxuYnVudGluZy9NXFxuYnVveS9NREdTXFxuYnVveWFuY3kvTVxcbmJ1b3lhbnQvWVxcbmJ1ci9TTVlcXG5idXJibGUvRFNNR1xcbmJ1cmJzL01cXG5idXJkZW4nc1xcbmJ1cmRlbi9VU0dEXFxuYnVyZGVuc29tZVxcbmJ1cmRvY2svTVxcbmJ1cmVhdS9TTVxcbmJ1cmVhdWNyYWN5L1NNXFxuYnVyZWF1Y3JhdC9NU1xcbmJ1cmVhdWNyYXRpY1xcbmJ1cmVhdWNyYXRpY2FsbHlcXG5idXJlYXVjcmF0aXphdGlvbi9NXFxuYnVyZWF1Y3JhdGl6ZS9HRFNcXG5idXJnL01SWlNcXG5idXJnZW9uL0RTR1xcbmJ1cmdlci9NXFxuYnVyZ2gvTVJaXFxuYnVyZ2hlci9NXFxuYnVyZ2hzXFxuYnVyZ2xhci9NU1xcbmJ1cmdsYXJpemUvR0RTXFxuYnVyZ2xhcnByb29mXFxuYnVyZ2xhcnkvU01cXG5idXJnbGUvRFNHXFxuYnVyZ29tYXN0ZXIvU01cXG5idXJndW5keS9TTVxcbmJ1cmlhbC9BU01cXG5idXJrYS9TTVxcbmJ1cmwvTURTXFxuYnVybGFwL01cXG5idXJsZXNxdWUvTUdEU1xcbmJ1cmxpbmVzcy9NXFxuYnVybHkvUlBUXFxuYnVybi9NRFJaR1NCXFxuYnVybmFibGUvU01cXG5idXJuZXIvTVxcbmJ1cm5pc2gvWkdNRFJTXFxuYnVybmlzaGVyL01cXG5idXJub29zZS9NU1xcbmJ1cm5vdXQvTVNcXG5idXJudFxcbmJ1cnAvTURHU1xcbmJ1cnIvTURHU1xcbmJ1cnJpdG8vTVNcXG5idXJyby9TTVxcbmJ1cnJvdy9TTURSWkdcXG5idXJyb3dlci9NXFxuYnVyc2EvTVxcbmJ1cnNhZVxcbmJ1cnNhci9TTVxcbmJ1cnNhcnkvU01cXG5idXJzaXRpcy9NXFxuYnVyc3QvU01HXFxuYnVyeS9BRFNHXFxuYnVzL0FNU1xcbmJ1c2JveS9TTVxcbmJ1c2J5L1NNXFxuYnVzZWRcXG5idXNnaXJsL01TXFxuYnVzaC9NRFNHSlxcbmJ1c2hlbC9TR01EXFxuYnVzaGluZXNzL01cXG5idXNoaW5nL01cXG5idXNobWFuL01cXG5idXNobWFzdGVyL1NNXFxuYnVzaG1lblxcbmJ1c2h3aGFjay9EUlNaR1xcbmJ1c2h3aGFja2VyL01cXG5idXNoeS9SUFRcXG5idXNpbHlcXG5idXNpbmVzcy9NU1xcbmJ1c2luZXNzbGlrZVxcbmJ1c2luZXNzbWFuL01cXG5idXNpbmVzc21lblxcbmJ1c2luZXNzcGVyc29uL1NNXFxuYnVzaW5lc3N3b21hbi9NXFxuYnVzaW5lc3N3b21lblxcbmJ1c2luZy9NXFxuYnVzay9EUlpHU1xcbmJ1c2tpbi9TTVxcbmJ1c2xvYWQvU1xcbmJ1c3MvTURTR1xcbmJ1c3QvTURSWkdTXFxuYnVzdGVyL01cXG5idXN0bGUvRFNNR1xcbmJ1c3R5L1JaVFxcbmJ1c3kvRFJTVEdQXFxuYnVzeWJvZHkvU01cXG5idXN5bmVzcy9NXFxuYnVzeXdvcmsvTVxcbmJ1dC9BQ1NcXG5idXRhbmUvTVxcbmJ1dGNoL01SU1pcXG5idXRjaGVyL01ER1xcbmJ1dGNoZXJ5L1NNXFxuYnV0bGVyL1NNXFxuYnV0dC9NRFJaR1NcXG5idXR0ZS9TTVxcbmJ1dHRlZC9BXFxuYnV0dGVyL01ER1xcbmJ1dHRlcmJhbGwvTVNcXG5idXR0ZXJjcmVhbVxcbmJ1dHRlcmN1cC9TTVxcbmJ1dHRlcmZhdC9NXFxuYnV0dGVyZmluZ2VyZWRcXG5idXR0ZXJmaW5nZXJzL01cXG5idXR0ZXJmbHkvR0RTTVxcbmJ1dHRlcm1pbGsvTVxcbmJ1dHRlcm51dC9TTVxcbmJ1dHRlcnNjb3RjaC9NXFxuYnV0dGVyeS9UUlNNXFxuYnV0dGluZy9BXFxuYnV0dG9jay9TTVxcbmJ1dHRvbidzXFxuYnV0dG9uL1VTREdcXG5idXR0b25ob2xlL0RTTUdcXG5idXR0b253b29kL01TXFxuYnV0dHJlc3MvTURTR1xcbmJ1dHR5L1NcXG5idXhvbVxcbmJ1eS9aR1NNUlxcbmJ1eWJhY2svU01cXG5idXllci9NXFxuYnV5b3V0L1NNXFxuYnV6ei9NRFJTWkdcXG5idXp6YXJkL01TXFxuYnV6emVyL01cXG5idXp6a2lsbC9TTVxcbmJ1enp3b3JkL1NNXFxuYnhcXG5ieHNcXG5ieS9NXFxuYnllL1NNXFxuYnlnb25lL1NNXFxuYnlsYXcvU01cXG5ieWxpbmUvU01cXG5ieXBhc3MvR01EU1xcbmJ5cGF0aC9NXFxuYnlwYXRoc1xcbmJ5cGxheS9NXFxuYnlwcm9kdWN0L01TXFxuYnlyZS9TXFxuYnlyb2FkL1NNXFxuYnlzdGFuZGVyL01TXFxuYnl0ZS9NU1xcbmJ5d2F5L1NNXFxuYnl3b3JkL1NNXFxuYnl6YW50aW5lXFxuYy9JRVNcXG5jYVxcbmNhYi9TTVJaXFxuY2FiYWwvTVNcXG5jYWJhbGEnc1xcbmNhYmFsbGVyby9NU1xcbmNhYmFuYS9TTVxcbmNhYmFyZXQvU01cXG5jYWJiYWdlL01TXFxuY2FiYmVkXFxuY2FiYmluZ1xcbmNhYmJ5L1NNXFxuY2FiZHJpdmVyL1NNXFxuY2FiaW4vTVNcXG5jYWJpbmV0L1NNXFxuY2FiaW5ldG1ha2VyL01TXFxuY2FiaW5ldG1ha2luZy9NXFxuY2FiaW5ldHJ5L01cXG5jYWJpbmV0d29yay9NXFxuY2FibGUvTUdEU1xcbmNhYmxlY2FzdC9HTVNcXG5jYWJsZWdyYW0vTVNcXG5jYWJvY2hvbi9TTVxcbmNhYm9vZGxlL01cXG5jYWJvb3NlL1NNXFxuY2FicmlvbGV0L1NNXFxuY2Fic3RhbmQvU01cXG5jYWNhby9NU1xcbmNhY2hlL01HRFNcXG5jYWNoZXBvdC9TTVxcbmNhY2hldC9NU1xcbmNhY2tsZS9NWkdEUlNcXG5jYWNrbGVyL01cXG5jYWNvcGhvbm91c1xcbmNhY29waG9ueS9TTVxcbmNhY3RpXFxuY2FjdHVzL01cXG5jYWQvU01cXG5jYWRhdmVyL1NNXFxuY2FkYXZlcm91c1xcbmNhZGRpZS9NRFNcXG5jYWRkaXNoL1lQXFxuY2FkZGlzaG5lc3MvTVxcbmNhZGR5aW5nXFxuY2FkZW5jZS9EU01cXG5jYWRlbnphL1NNXFxuY2FkZXQvTVNcXG5jYWRnZS9aR0RSU1xcbmNhZGdlci9NXFxuY2FkbWl1bS9NXFxuY2FkcmUvTVNcXG5jYWR1Y2VpXFxuY2FkdWNldXMvTVxcbmNhZXN1cmEvU01cXG5jYWZlL1NNXFxuY2FmZXRlcmlhL01TXFxuY2FmZXRpZXJlL1NcXG5jYWZmL0NTXFxuY2FmZmVpbmF0ZWRcXG5jYWZmZWluZS9NXFxuY2FmdGFuL01TXFxuY2FnZS9EU01HXFxuY2FnZXlcXG5jYWdpZXJcXG5jYWdpZXN0XFxuY2FnaWx5XFxuY2FnaW5lc3MvTVxcbmNhZ291bGUvU1xcbmNhaG9vdC9NU1xcbmNhaW1hbi9NU1xcbmNhaXJuL01TXFxuY2Fpc3Nvbi9TTVxcbmNhaXRpZmYvU01cXG5jYWpvbGUvWkdMRFJTXFxuY2Fqb2xlbWVudC9NXFxuY2Fqb2xlci9NXFxuY2Fqb2xlcnkvTVxcbmNha2UvRFNNR1xcbmNha2V3YWxrL1NNXFxuY2FsXFxuY2FsYWJhc2gvTVNcXG5jYWxhYm9vc2UvU01cXG5jYWxhbWFyaS9TTVxcbmNhbGFtaW5lL01cXG5jYWxhbWl0b3VzL1lcXG5jYWxhbWl0eS9TTVxcbmNhbGNhcmVvdXNcXG5jYWxjaWZlcm91c1xcbmNhbGNpZmljYXRpb24vTVxcbmNhbGNpZnkvR05EU1xcbmNhbGNpbWluZS9EU01HXFxuY2FsY2luZS9EU0dcXG5jYWxjaXRlL01cXG5jYWxjaXVtL01cXG5jYWxjdWxhYmxlL0lcXG5jYWxjdWxhdGUvQUdOVkRTWFxcbmNhbGN1bGF0ZWQvWVxcbmNhbGN1bGF0aW5nL1lcXG5jYWxjdWxhdGlvbi9BTVxcbmNhbGN1bGF0b3IvU01cXG5jYWxjdWxpXFxuY2FsY3VsdXMvTVxcbmNhbGRlcmEvU01cXG5jYWxlbmRhci9NREdTXFxuY2FsZi9NXFxuY2FsZnNraW4vTVxcbmNhbGliZXIvU01cXG5jYWxpYnJhdGUvR05EU1hcXG5jYWxpYnJhdGlvbi9NXFxuY2FsaWJyYXRvci9TTVxcbmNhbGljby9NXFxuY2FsaWNvZXNcXG5jYWxpZm9ybml1bS9NXFxuY2FsaXBlci9TR01EXFxuY2FsaXBoL01cXG5jYWxpcGhhdGUvTVNcXG5jYWxpcGhzXFxuY2FsaXN0aGVuaWMvU1xcbmNhbGlzdGhlbmljcy9NXFxuY2Fsay9TR01EXFxuY2FsbC9BU0dNRFxcbmNhbGxhL01TXFxuY2FsbGFibGVcXG5jYWxsYmFjay9NU1xcbmNhbGxlZC9VXFxuY2FsbGVyL01TXFxuY2FsbGlncmFwaGVyL1NNXFxuY2FsbGlncmFwaGljXFxuY2FsbGlncmFwaGlzdC9NU1xcbmNhbGxpZ3JhcGh5L01cXG5jYWxsaW5nL1NNXFxuY2FsbGlvcGUvTVNcXG5jYWxsb3NpdHkvU01cXG5jYWxsb3VzL1BHRFNZXFxuY2FsbG91c25lc3MvTVxcbmNhbGxvdy9SUFRcXG5jYWxsb3duZXNzL01cXG5jYWxsdXMvTURTR1xcbmNhbG0vUFNUR01EUllcXG5jYWxtbmVzcy9NXFxuY2Fsb3JpY1xcbmNhbG9yaWUvTVNcXG5jYWxvcmlmaWNcXG5jYWx1bWV0L01TXFxuY2FsdW1uaWF0ZS9HTkRTXFxuY2FsdW1uaWF0aW9uL01cXG5jYWx1bW5pYXRvci9NU1xcbmNhbHVtbmlvdXNcXG5jYWx1bW55L1NNXFxuY2FsdmUvR0RTXFxuY2FseXBzby9NU1xcbmNhbHl4L01TXFxuY2FtL1NNXFxuY2FtYXJhZGVyaWUvTVxcbmNhbWJlci9NRFNHXFxuY2FtYmlhbFxcbmNhbWJpdW0vU01cXG5jYW1icmljL01cXG5jYW1jb3JkZXIvU01cXG5jYW1lXFxuY2FtZWwvTVNcXG5jYW1lbGhhaXJcXG5jYW1lbGxpYS9NU1xcbmNhbWVvL01TXFxuY2FtZXJhL01TXFxuY2FtZXJhbWFuL01cXG5jYW1lcmFtZW5cXG5jYW1lcmFwZW9wbGVcXG5jYW1lcmFwZXJzb25cXG5jYW1lcmF3b21hbi9NXFxuY2FtZXJhd29tZW5cXG5jYW1lcmF3b3JrXFxuY2FtaWtuaWNrZXJzXFxuY2FtaXNvbGUvU01cXG5jYW1vdWZsYWdlL01aR0RSU1xcbmNhbW91ZmxhZ2VyL01cXG5jYW1wJ3NcXG5jYW1wL0NTR0RcXG5jYW1wYWlnbi9TTURSWkdcXG5jYW1wYWlnbmVyL01cXG5jYW1wYW5pbGUvU01cXG5jYW1wYW5vbG9naXN0L01TXFxuY2FtcGFub2xvZ3kvTVxcbmNhbXBlci9NU1xcbmNhbXBmaXJlL1NNXFxuY2FtcGdyb3VuZC9TTVxcbmNhbXBob3IvTVxcbmNhbXBpbmcvTVxcbmNhbXBzaXRlL1NNXFxuY2FtcHVzL01TXFxuY2FtcHkvVFJcXG5jYW1zaGFmdC9TTVxcbmNhbid0XFxuY2FuL1NNRFJaR1xcbmNhbmFsL01TXFxuY2FuYWxpemF0aW9uL01cXG5jYW5hbGl6ZS9HRFNcXG5jYW5hcGUvTVNcXG5jYW5hcmQvTVNcXG5jYW5hcnkvU01cXG5jYW5hc3RhL01cXG5jYW5jYW4vTVNcXG5jYW5jZWwvRFJTWkdcXG5jYW5jZWxlci9NXFxuY2FuY2VsbGF0aW9uL1NNXFxuY2FuY2Vsb3VzXFxuY2FuY2VyL01TXFxuY2FuY2Vyb3VzXFxuY2FuZGVsYWJyYS9TTVxcbmNhbmRlbGFicnVtL01cXG5jYW5kaWQvWVBcXG5jYW5kaWRhXFxuY2FuZGlkYWN5L1NNXFxuY2FuZGlkYXRlL01TXFxuY2FuZGlkYXR1cmUvU01cXG5jYW5kaWRuZXNzL01cXG5jYW5kbGUvTVpHRFJTXFxuY2FuZGxlbGlnaHQvTVxcbmNhbmRsZWxpdFxcbmNhbmRsZXBvd2VyL01cXG5jYW5kbGVyL01cXG5jYW5kbGVzdGljay9NU1xcbmNhbmRsZXdpY2svU01cXG5jYW5kb3IvTVxcbmNhbmR5L0dEU01cXG5jYW5keWZsb3NzXFxuY2FuZS9TTVxcbmNhbmVicmFrZS9NU1xcbmNhbmVyL01cXG5jYW5pbmUvTVNcXG5jYW5pc3Rlci9TTVxcbmNhbmtlci9HTURTXFxuY2Fua2Vyb3VzXFxuY2FubmFiaXMvTVNcXG5jYW5uZWRcXG5jYW5uZWxsb25pL01cXG5jYW5uZXJ5L1NNXFxuY2FubmliYWwvU01cXG5jYW5uaWJhbGlzbS9NXFxuY2FubmliYWxpc3RpY1xcbmNhbm5pYmFsaXphdGlvbi9NXFxuY2FubmliYWxpemUvR0RTXFxuY2FubmlseS9VXFxuY2FubmluZXNzL01cXG5jYW5uaW5nXFxuY2Fubm9uL0dNRFNcXG5jYW5ub25hZGUvTUdEU1xcbmNhbm5vbmJhbGwvU01cXG5jYW5ub3RcXG5jYW5ueS9VVFJcXG5jYW5vZS9NRFNcXG5jYW5vZWluZ1xcbmNhbm9laXN0L1NNXFxuY2Fub2xhL01cXG5jYW5vbi9NU1xcbmNhbm9uaWNhbC9ZXFxuY2Fub25pemF0aW9uL1NNXFxuY2Fub25pemUvRFNHXFxuY2Fub29kbGUvRFNHXFxuY2Fub3B5L0dEU01cXG5jYW5zdFxcbmNhbnQnc1xcbmNhbnQvQ1pSREdTXFxuY2FudGFiaWxlXFxuY2FudGFsb3VwZS9TTVxcbmNhbnRhbmtlcm91cy9QWVxcbmNhbnRhbmtlcm91c25lc3MvTVxcbmNhbnRhdGEvTVNcXG5jYW50ZWVuL01TXFxuY2FudGVyL0NNXFxuY2FudGVyZWRcXG5jYW50ZXJpbmdcXG5jYW50aWNsZS9NU1xcbmNhbnRpbGV2ZXIvTURHU1xcbmNhbnRvL01TXFxuY2FudG9uL01MU1xcbmNhbnRvbmFsXFxuY2FudG9ubWVudC9NU1xcbmNhbnRvci9NU1xcbmNhbnZhcy9NR0RTXFxuY2FudmFzYmFjay9TTVxcbmNhbnZhc3MvTURSU1pHXFxuY2FudmFzc2VyL01cXG5jYW55b24vTUdTXFxuY2FwL1NNRFJCWlxcbmNhcGFiaWxpdGllc1xcbmNhcGFiaWxpdHkvSU1cXG5jYXBhYmxlL0lcXG5jYXBhYmx5L0lcXG5jYXBhY2lvdXMvUFlcXG5jYXBhY2lvdXNuZXNzL01cXG5jYXBhY2l0YW5jZS9NXFxuY2FwYWNpdGllc1xcbmNhcGFjaXRvci9TTVxcbmNhcGFjaXR5L0lNXFxuY2FwYXJpc29uL01ER1NcXG5jYXBlL1NNXFxuY2FwZXIvR01EXFxuY2FwZXNraW4vTVxcbmNhcGlsbGFyaXR5L01cXG5jYXBpbGxhcnkvU01cXG5jYXBpdGFsL01TWVxcbmNhcGl0YWxpc20vTVxcbmNhcGl0YWxpc3QvU01cXG5jYXBpdGFsaXN0aWNcXG5jYXBpdGFsaXN0aWNhbGx5XFxuY2FwaXRhbGl6YXRpb24vTVxcbmNhcGl0YWxpemUvQURTR1xcbmNhcGl0YXRpb24vQ1NNXFxuY2FwaXRvbC9TTVxcbmNhcGl0dWxhdGUvQURTWEdOXFxuY2FwaXR1bGF0aW9uL0FNXFxuY2FwbGV0L01TXFxuY2Fwby9TTVxcbmNhcG9uL01TXFxuY2FwcGVkL1VBXFxuY2FwcGluZy9VQVxcbmNhcHB1Y2Npbm8vU01cXG5jYXByaWNlL1NNXFxuY2FwcmljaW91cy9QWVxcbmNhcHJpY2lvdXNuZXNzL01cXG5jYXBzaWN1bS9TTVxcbmNhcHNpemUvRFNHXFxuY2Fwc3Rhbi9TTVxcbmNhcHN0b25lL01TXFxuY2Fwc3VsYXJcXG5jYXBzdWxlL0RTTUdcXG5jYXBzdWxpemUvRFNHXFxuY2FwdFxcbmNhcHRhaW4vU01ER1xcbmNhcHRhaW5jeS9TTVxcbmNhcHRpb24vU01ER1xcbmNhcHRpb3VzL1lQXFxuY2FwdGlvdXNuZXNzL01cXG5jYXB0aXZhdGUvRFNHTlxcbmNhcHRpdmF0aW9uL01cXG5jYXB0aXZhdG9yL1NNXFxuY2FwdGl2ZS9TTVxcbmNhcHRpdml0eS9TTVxcbmNhcHRvci9NU1xcbmNhcHR1cmUvQURTTUdcXG5jYXIvU01EUlpHXFxuY2FyYWZlL01TXFxuY2FyYW1lbC9TTVxcbmNhcmFtZWxpemUvRFNHXFxuY2FyYXBhY2UvU01cXG5jYXJhdC9NU1xcbmNhcmF2YW4vU01cXG5jYXJhdmFuc2FyeS9TTVxcbmNhcmF2ZWwvU01cXG5jYXJhd2F5L1NNXFxuY2FyYmlkZS9TTVxcbmNhcmJpbmUvU01cXG5jYXJib2h5ZHJhdGUvU01cXG5jYXJib2xpY1xcbmNhcmJvbi9NU1xcbmNhcmJvbmFjZW91c1xcbmNhcmJvbmF0ZS9NR05EU1xcbmNhcmJvbmF0aW9uL01cXG5jYXJib25pZmVyb3VzXFxuY2FyYm9uaXplL0dEU1xcbmNhcmJvcnVuZHVtL01cXG5jYXJib3kvTVNcXG5jYXJic1xcbmNhcmJ1bmNsZS9TTVxcbmNhcmJ1bmN1bGFyXFxuY2FyYnVyZXRvci9TTVxcbmNhcmNhc3MvTVNcXG5jYXJjaW5vZ2VuL1NNXFxuY2FyY2lub2dlbmljL01TXFxuY2FyY2lub2dlbmljaXR5L01cXG5jYXJjaW5vbWEvTVNcXG5jYXJkL0VTR01EXFxuY2FyZGFtb20vU01cXG5jYXJkYW1vbi9TXFxuY2FyZGJvYXJkL01cXG5jYXJkZXIvTVNcXG5jYXJkaG9sZGVyL1NcXG5jYXJkaWFjXFxuY2FyZGllL1NcXG5jYXJkaWdhbi9TTVxcbmNhcmRpbmFsL1NNWVxcbmNhcmRpb1xcbmNhcmRpb2dyYW0vU01cXG5jYXJkaW9ncmFwaC9NXFxuY2FyZGlvZ3JhcGhzXFxuY2FyZGlvbG9naXN0L01TXFxuY2FyZGlvbG9neS9NXFxuY2FyZGlvbXlvcGF0aHlcXG5jYXJkaW9wdWxtb25hcnlcXG5jYXJkaW92YXNjdWxhclxcbmNhcmRzaGFycC9NUlpTXFxuY2FyZHNoYXJwZXIvTVxcbmNhcmUvU01cXG5jYXJlZW4vREdTXFxuY2FyZWVyL01ER1NcXG5jYXJlZXJpc21cXG5jYXJlZXJpc3QvU01cXG5jYXJlZnJlZVxcbmNhcmVmdWwvWVBcXG5jYXJlZnVsbGVyXFxuY2FyZWZ1bGxlc3RcXG5jYXJlZnVsbmVzcy9NXFxuY2FyZWdpdmVyL1NNXFxuY2FyZWxlc3MvUFlcXG5jYXJlbGVzc25lc3MvTVxcbmNhcmVyL01cXG5jYXJlc3MvTURTR1xcbmNhcmV0L01TXFxuY2FyZXRha2VyL01TXFxuY2FyZXdvcm5cXG5jYXJmYXJlL01cXG5jYXJnby9NXFxuY2FyZ29lc1xcbmNhcmhvcC9NU1xcbmNhcmlib3UvU01cXG5jYXJpY2F0dXJlL01HRFNcXG5jYXJpY2F0dXJpc3QvU01cXG5jYXJpZXMvTVxcbmNhcmlsbG9uL1NNXFxuY2FyaW5nL01cXG5jYXJpb3VzXFxuY2FyamFjay9KU0RSWkdcXG5jYXJqYWNrZXIvTVxcbmNhcmphY2tpbmcvTVxcbmNhcmxvYWQvU01cXG5jYXJtYWtlci9TXFxuY2FybWluZS9TTVxcbmNhcm5hZ2UvTVxcbmNhcm5hbC9ZXFxuY2FybmFsaXR5L01cXG5jYXJuYXRpb24vSU1TXFxuY2FybmVsaWFuL01TXFxuY2Fybml2YWwvTVNcXG5jYXJuaXZvcmFcXG5jYXJuaXZvcmUvU01cXG5jYXJuaXZvcm91cy9QWVxcbmNhcm5pdm9yb3VzbmVzcy9NXFxuY2FybnkvU01cXG5jYXJvYi9NU1xcbmNhcm9sL1pHTURSU1xcbmNhcm9sZXIvTVxcbmNhcm9tL0dNRFNcXG5jYXJvdGVuZS9NXFxuY2Fyb3RpZC9TTVxcbmNhcm91c2FsL1NNXFxuY2Fyb3VzZS9EUlNNWkdcXG5jYXJvdXNlbC9TTVxcbmNhcm91c2VyL01cXG5jYXJwL1NaR01EUlxcbmNhcnBhbC9NU1xcbmNhcnBlbC9NU1xcbmNhcnBlbnRlci9NREdTXFxuY2FycGVudHJ5L01cXG5jYXJwZXIvTVxcbmNhcnBldC9NREdTXFxuY2FycGV0YmFnL01TXFxuY2FycGV0YmFnZ2VkXFxuY2FycGV0YmFnZ2VyL01TXFxuY2FycGV0YmFnZ2luZ1xcbmNhcnBldGluZy9NXFxuY2FycGlcXG5jYXJwb29sL1NNREdcXG5jYXJwb3J0L1NNXFxuY2FycHVzL01cXG5jYXJyZWwvTVNcXG5jYXJyaWFnZS9TTVxcbmNhcnJpYWdld2F5L1NcXG5jYXJyaWVyL01cXG5jYXJyaW9uL01cXG5jYXJyb3QvTVNcXG5jYXJyb3R5XFxuY2FycnkvWkdEUlNNXFxuY2FycnlhbGwvU01cXG5jYXJyeWNvdC9TXFxuY2FycnlvdXRcXG5jYXJyeW92ZXIvTVNcXG5jYXJzaWNrL1BcXG5jYXJzaWNrbmVzcy9NXFxuY2FydC9TWkdNRFJcXG5jYXJ0YWdlL01cXG5jYXJ0ZWwvTVNcXG5jYXJ0ZXIvTVxcbmNhcnRob3JzZS9TTVxcbmNhcnRpbGFnZS9TTVxcbmNhcnRpbGFnaW5vdXNcXG5jYXJ0bG9hZC9TTVxcbmNhcnRvZ3JhcGhlci9TTVxcbmNhcnRvZ3JhcGhpY1xcbmNhcnRvZ3JhcGh5L01cXG5jYXJ0b24vTVNcXG5jYXJ0b29uL1NNREdcXG5jYXJ0b29uaXN0L01TXFxuY2FydHJpZGdlL01TXFxuY2FydHdoZWVsL0dNRFNcXG5jYXJ2ZS9KWkdEUlNcXG5jYXJ2ZXIvTVxcbmNhcnZlcnkvU1xcbmNhcnZpbmcvTVxcbmNhcnlhdGlkL01TXFxuY2FzYWJhL01TXFxuY2FzY2FkZS9EU01HXFxuY2FzY2FyYS9TTVxcbmNhc2UvTERTSk1HXFxuY2FzZWJvb2svU1xcbmNhc2VkL1VcXG5jYXNlaGFyZGVuL0RHU1xcbmNhc2Vpbi9NXFxuY2FzZWxvYWQvTVNcXG5jYXNlbWVudC9NU1xcbmNhc2V3b3JrL1pNUlxcbmNhc2V3b3JrZXIvTVxcbmNhc2gvR01EU1xcbmNhc2hiYWNrL01cXG5jYXNoYm9vay9NU1xcbmNhc2hldy9NU1xcbmNhc2hpZXIvR1NNRFxcbmNhc2hsZXNzXFxuY2FzaG1lcmUvTVxcbmNhc2luZy9NXFxuY2FzaW5vL01TXFxuY2Fzay9TTVxcbmNhc2tldC9NU1xcbmNhc3NhdmEvU01cXG5jYXNzZXJvbGUvRFNNR1xcbmNhc3NldHRlL01TXFxuY2Fzc2lhL01TXFxuY2Fzc29jay9TTVxcbmNhc3Nvd2FyeS9TTVxcbmNhc3QvQVNHTVxcbmNhc3RhbmV0L01TXFxuY2FzdGF3YXkvTVNcXG5jYXN0ZS9KTVpSU1xcbmNhc3RlbGxhdGVkXFxuY2FzdGVyL01cXG5jYXN0aWdhdGUvRFNHTlxcbmNhc3RpZ2F0aW9uL01cXG5jYXN0aWdhdG9yL1NNXFxuY2FzdGluZy9BTVxcbmNhc3RsZS9NR0RTXFxuY2FzdG9mZi9TTVxcbmNhc3Rvci9NU1xcbmNhc3RyYXRlL0dOWERTXFxuY2FzdHJhdGlvbi9NXFxuY2FzdWFsL1BNWVNcXG5jYXN1YWxuZXNzL01cXG5jYXN1YWx0eS9TTVxcbmNhc3Vpc3QvU01cXG5jYXN1aXN0aWNcXG5jYXN1aXN0cnkvTVxcbmNhdC9TTVxcbmNhdGFjbHlzbS9NU1xcbmNhdGFjbHlzbWFsXFxuY2F0YWNseXNtaWNcXG5jYXRhY29tYi9TTVxcbmNhdGFmYWxxdWUvTVNcXG5jYXRhbGVwc3kvTVxcbmNhdGFsZXB0aWMvTVNcXG5jYXRhbG9nL1pHU01EUlxcbmNhdGFsb2dlci9NXFxuY2F0YWxwYS9TTVxcbmNhdGFseXNlc1xcbmNhdGFseXNpcy9NXFxuY2F0YWx5c3QvTVNcXG5jYXRhbHl0aWMvTVxcbmNhdGFseXplL0dEU1xcbmNhdGFtYXJhbi9TTVxcbmNhdGFwdWx0L0dNRFNcXG5jYXRhcmFjdC9NU1xcbmNhdGFycmgvTVxcbmNhdGFzdHJvcGhlL01TXFxuY2F0YXN0cm9waGljXFxuY2F0YXN0cm9waGljYWxseVxcbmNhdGF0b25pYS9NXFxuY2F0YXRvbmljL1NNXFxuY2F0YmlyZC9TTVxcbmNhdGJvYXQvU01cXG5jYXRjYWxsL0dTTURcXG5jYXRjaC9aR0pMTVJTXFxuY2F0Y2hhbGwvTVNcXG5jYXRjaGVyL01cXG5jYXRjaG1lbnQvTVNcXG5jYXRjaHBlbm55XFxuY2F0Y2hwaHJhc2UvU01cXG5jYXRjaHdvcmQvTVNcXG5jYXRjaHkvUlRcXG5jYXRlY2hpc20vU01cXG5jYXRlY2hpc3QvU01cXG5jYXRlY2hpemUvRFNHXFxuY2F0ZWdvcmljYWwvWVxcbmNhdGVnb3JpemF0aW9uL01TXFxuY2F0ZWdvcml6ZS9HRFNcXG5jYXRlZ29yeS9TTVxcbmNhdGVyL1pHSkRSU1xcbmNhdGVyY29ybmVyXFxuY2F0ZXJlci9NXFxuY2F0ZXJwaWxsYXIvTVNcXG5jYXRlcndhdWwvU01ER1xcbmNhdGZpc2gvTVNcXG5jYXRndXQvTVxcbmNhdGhhcnNlc1xcbmNhdGhhcnNpcy9NXFxuY2F0aGFydGljL1NNXFxuY2F0aGVkcmFsL1NNXFxuY2F0aGV0ZXIvU01cXG5jYXRoZXRlcml6ZS9EU0dcXG5jYXRob2RlL1NNXFxuY2F0aG9kaWNcXG5jYXRob2xpY1xcbmNhdGhvbGljaXR5L01cXG5jYXRpb24vTVNcXG5jYXRraW4vTVNcXG5jYXRsaWtlXFxuY2F0bmFwL01TXFxuY2F0bmFwcGVkXFxuY2F0bmFwcGluZ1xcbmNhdG5pcC9NXFxuY2F0c3VpdC9TXFxuY2F0dGFpbC9TTVxcbmNhdHRlZFxcbmNhdHRlcnkvU1xcbmNhdHRpbHlcXG5jYXR0aW5lc3MvTVxcbmNhdHRpbmdcXG5jYXR0bGUvTVxcbmNhdHRsZW1hbi9NXFxuY2F0dGxlbWVuXFxuY2F0dHkvVFBSXFxuY2F0d2Fsay9TTVxcbmNhdWN1cy9NRFNHXFxuY2F1ZGFsL1lcXG5jYXVnaHQvVVxcbmNhdWxkcm9uL01TXFxuY2F1bGlmbG93ZXIvU01cXG5jYXVsay9aR01EUlNcXG5jYXVsa2VyL01cXG5jYXVzYWwvWVxcbmNhdXNhbGl0eS9TTVxcbmNhdXNhdGlvbi9NXFxuY2F1c2F0aXZlXFxuY2F1c2UvTVpHRFJTXFxuY2F1c2VsZXNzXFxuY2F1c2VyL01cXG5jYXVzZXJpZS9TTVxcbmNhdXNld2F5L1NNXFxuY2F1c3RpYy9TTVxcbmNhdXN0aWNhbGx5XFxuY2F1c3RpY2l0eS9NXFxuY2F1dGVyaXphdGlvbi9NXFxuY2F1dGVyaXplL0dEU1xcbmNhdXRpb24vU01ER1xcbmNhdXRpb25hcnlcXG5jYXV0aW91cy9JWVxcbmNhdXRpb3VzbmVzcy9NXFxuY2F2YWxjYWRlL01TXFxuY2F2YWxpZXIvU01ZXFxuY2F2YWxyeS9TTVxcbmNhdmFscnltYW4vTVxcbmNhdmFscnltZW5cXG5jYXZlL0RSU01aR1xcbmNhdmVhdC9NU1xcbmNhdmVtYW4vTVxcbmNhdmVtZW5cXG5jYXZlcm4vTVNcXG5jYXZlcm5vdXMvWVxcbmNhdmlhci9NXFxuY2F2aWwvWkdKTURSU1xcbmNhdmlsZXIvTVxcbmNhdmluZy9NXFxuY2F2aXRhdGlvblxcbmNhdml0eS9GU01cXG5jYXZvcnQvREdTXFxuY2F3L1NNREdcXG5jYXkvQ1NNXFxuY2F5ZW5uZS9NXFxuY2F5dXNlL01TXFxuY2NcXG5jZWFzZS9DTUdEU1xcbmNlYXNlZmlyZS9NU1xcbmNlYXNlbGVzcy9ZUFxcbmNlYXNlbGVzc25lc3MvTVxcbmNlY2FcXG5jZWNhbFxcbmNlY3VtL01cXG5jZWRhci9NU1xcbmNlZGUvRkFHU0RcXG5jZWRlci9NU1xcbmNlZGlsbGEvU01cXG5jZWlsaWRoXFxuY2VpbGlkaHNcXG5jZWlsaW5nL01TXFxuY2VsYW5kaW5lL01cXG5jZWxlYi9TXFxuY2VsZWJyYW50L1NNXFxuY2VsZWJyYXRlL0RTR05YXFxuY2VsZWJyYXRpb24vTVxcbmNlbGVicmF0b3IvU01cXG5jZWxlYnJhdG9yeVxcbmNlbGVicml0eS9TTVxcbmNlbGVyaWFjXFxuY2VsZXJpdHkvTVxcbmNlbGVyeS9NXFxuY2VsZXN0YS9NU1xcbmNlbGVzdGlhbC9ZXFxuY2VsaWJhY3kvTVxcbmNlbGliYXRlL01TXFxuY2VsbC9TTURcXG5jZWxsYXIvTVNcXG5jZWxsaXN0L1NNXFxuY2VsbG1hdGUvU01cXG5jZWxsby9NU1xcbmNlbGxvcGhhbmUvTVxcbmNlbGxwaG9uZS9NU1xcbmNlbGx1bGFyL1NNXFxuY2VsbHVsaXRlL01cXG5jZWxsdWxpdGlzXFxuY2VsbHVsb2lkL01cXG5jZWxsdWxvc2UvTVxcbmNlbWVudC9NRFJaR1NcXG5jZW1lbnRlci9NXFxuY2VtZW50dW0vTVxcbmNlbWV0ZXJ5L1NNXFxuY2Vub2JpdGUvTVNcXG5jZW5vYml0aWNcXG5jZW5vdGFwaC9NXFxuY2Vub3RhcGhzXFxuY2Vuc2VyL01TXFxuY2Vuc29yL01ER1NcXG5jZW5zb3JlZC9VXFxuY2Vuc29yaWFsXFxuY2Vuc29yaW91cy9QWVxcbmNlbnNvcmlvdXNuZXNzL01cXG5jZW5zb3JzaGlwL01cXG5jZW5zdXJlL0JEUlNNWkdcXG5jZW5zdXJlci9NXFxuY2Vuc3VzL01EU0dcXG5jZW50L1NaTVJcXG5jZW50YXVyL1NNXFxuY2VudGF2by9TTVxcbmNlbnRlbmFyaWFuL01TXFxuY2VudGVuYXJ5L1NNXFxuY2VudGVubmlhbC9NWVNcXG5jZW50ZXIvTURHXFxuY2VudGVyYm9hcmQvU01cXG5jZW50ZXJmb2xkL01TXFxuY2VudGVycGllY2UvTVNcXG5jZW50aWdyYWRlXFxuY2VudGlncmFtL1NNXFxuY2VudGlsaXRlci9NU1xcbmNlbnRpbWUvU01cXG5jZW50aW1ldGVyL01TXFxuY2VudGlwZWRlL1NNXFxuY2VudHJhbC9TTVlcXG5jZW50cmFsaXNtXFxuY2VudHJhbGlzdFxcbmNlbnRyYWxpdHkvTVxcbmNlbnRyYWxpemF0aW9uL0NNXFxuY2VudHJhbGl6ZS9DR0RTXFxuY2VudHJhbGl6ZXIvTVNcXG5jZW50cmlmdWdhbC9ZXFxuY2VudHJpZnVnZS9EU01HXFxuY2VudHJpcGV0YWwvWVxcbmNlbnRyaXNtL01cXG5jZW50cmlzdC9NU1xcbmNlbnR1cmlvbi9TTVxcbmNlbnR1cnkvU01cXG5jZXBoYWxpY1xcbmNlcmFtaWMvU01cXG5jZXJhbWljaXN0L1NNXFxuY2VyYW1pY3MvTVxcbmNlcmFtaXN0L01TXFxuY2VyZWFsL01TXFxuY2VyZWJlbGxhclxcbmNlcmViZWxsdW0vU01cXG5jZXJlYnJhXFxuY2VyZWJyYWxcXG5jZXJlYnJhdGUvR05EU1xcbmNlcmVicmF0aW9uL01cXG5jZXJlYnJvdmFzY3VsYXJcXG5jZXJlYnJ1bS9NU1xcbmNlcmVtZW50L01TXFxuY2VyZW1vbmlhbC9TTVlcXG5jZXJlbW9uaW91cy9VWVxcbmNlcmVtb25pb3VzbmVzcy9NXFxuY2VyZW1vbnkvU01cXG5jZXJpc2UvTVxcbmNlcml1bS9NXFxuY2VybWV0L01cXG5jZXJ0L1NcXG5jZXJ0YWluL1VZXFxuY2VydGFpbnR5L1VTTVxcbmNlcnRpZmlhYmxlXFxuY2VydGlmaWFibHlcXG5jZXJ0aWZpY2F0ZS9NR05YRFNcXG5jZXJ0aWZpY2F0aW9uL01cXG5jZXJ0aWZ5L0RTR1xcbmNlcnRpdHVkZS9JTVxcbmNlcnRpdHVkZXNcXG5jZXJ1bGVhbi9NXFxuY2VydmljYWxcXG5jZXJ2aWNlc1xcbmNlcnZpeC9NXFxuY2VzYXJlYW4vTVNcXG5jZXNpdW0vTVxcbmNlc3NhdGlvbi9NU1xcbmNlc3Npb24vS0FGU01cXG5jZXNzcGl0L1NcXG5jZXNzcG9vbC9NU1xcbmNldGFjZWFuL01TXFxuY2V0ZXJpc1xcbmNmXFxuY2dcXG5jaC9JRlZUXFxuY2hhZC9TXFxuY2hhZmUvR0RTXFxuY2hhZmYvR01EU1xcbmNoYWZmaW5jaC9NU1xcbmNoYWdyaW4vR1NNRFxcbmNoYWluJ3NcXG5jaGFpbi9VR0RTXFxuY2hhaW5zYXcvTURHU1xcbmNoYWlyL0dNRFNcXG5jaGFpcmxpZnQvTVNcXG5jaGFpcm1hbi9NXFxuY2hhaXJtYW5zaGlwL1NNXFxuY2hhaXJtZW5cXG5jaGFpcnBlcnNvbi9TTVxcbmNoYWlyd29tYW4vTVxcbmNoYWlyd29tZW5cXG5jaGFpc2UvTVNcXG5jaGFsY2Vkb255L01cXG5jaGFsZXQvTVNcXG5jaGFsaWNlL1NNXFxuY2hhbGsvR01EU1xcbmNoYWxrYm9hcmQvU01cXG5jaGFsa2luZXNzL01cXG5jaGFsa3kvUFJUXFxuY2hhbGxlbmdlL0RSU01aR1xcbmNoYWxsZW5nZWQvVVxcbmNoYWxsZW5nZXIvTVxcbmNoYWxsaXMvTVxcbmNoYW1iZXIvU01EXFxuY2hhbWJlcmxhaW4vTVNcXG5jaGFtYmVybWFpZC9NU1xcbmNoYW1icmF5L01cXG5jaGFtZWxlb24vU01cXG5jaGFtb2lzL01cXG5jaGFtb21pbGUvTVNcXG5jaGFtcC9aR01EU1xcbmNoYW1wYWduZS9NU1xcbmNoYW1waW9uL0dNRFNcXG5jaGFtcGlvbnNoaXAvTVNcXG5jaGFuY2UvTUdEU1xcbmNoYW5jZWwvU01cXG5jaGFuY2VsbGVyeS9TTVxcbmNoYW5jZWxsb3IvTVNcXG5jaGFuY2VsbG9yc2hpcC9NXFxuY2hhbmNlcnkvU01cXG5jaGFuY2luZXNzL01cXG5jaGFuY3JlL1NNXFxuY2hhbmN5L1BSVFxcbmNoYW5kZWxpZXIvU01cXG5jaGFuZGxlci9NU1xcbmNoYW5nZS9NWkdEUlNcXG5jaGFuZ2VhYmlsaXR5L01cXG5jaGFuZ2VhYmxlL1BcXG5jaGFuZ2VhYmxlbmVzcy9NXFxuY2hhbmdlYWJseVxcbmNoYW5nZWQvVVxcbmNoYW5nZWxlc3MvWVxcbmNoYW5nZWxpbmcvU01cXG5jaGFuZ2VvdmVyL1NNXFxuY2hhbmdlci9NXFxuY2hhbmdpbmcvVVxcbmNoYW5uZWwvR1NNRFxcbmNoYW5uZWxpemF0aW9uL01cXG5jaGFubmVsaXplL0RTR1xcbmNoYW5zb24vU01cXG5jaGFudC9aR01EUlNcXG5jaGFudGVyL01cXG5jaGFudGV1c2UvTVNcXG5jaGFudGV5L1NNXFxuY2hhbnRpY2xlZXIvTVNcXG5jaGFvcy9NXFxuY2hhb3RpY1xcbmNoYW90aWNhbGx5XFxuY2hhcC9TTVxcbmNoYXBhcnJhbC9TTVxcbmNoYXBhdGkvU1xcbmNoYXBhdHRpL1NcXG5jaGFwYm9vay9NU1xcbmNoYXBlYXUvU01cXG5jaGFwZWwvTVNcXG5jaGFwZXJvbi9NREdTXFxuY2hhcGVyb25hZ2UvTVxcbmNoYXBlcm9uZWQvVVxcbmNoYXBsYWluL01TXFxuY2hhcGxhaW5jeS9TTVxcbmNoYXBsZXQvU01cXG5jaGFwcGVkXFxuY2hhcHBpbmdcXG5jaGFwcHkvU1xcbmNoYXB0ZXIvU01cXG5jaGFyL1NNXFxuY2hhcmFiYW5jL01TXFxuY2hhcmFjdGVyL01TXFxuY2hhcmFjdGVyZnVsXFxuY2hhcmFjdGVyaXN0aWMvU01cXG5jaGFyYWN0ZXJpc3RpY2FsbHkvVVxcbmNoYXJhY3Rlcml6YXRpb24vTVNcXG5jaGFyYWN0ZXJpemUvRFNHXFxuY2hhcmFjdGVybGVzc1xcbmNoYXJhZGUvU01cXG5jaGFyYnJvaWwvR0RTXFxuY2hhcmNvYWwvTVNcXG5jaGFyZC9NXFxuY2hhcmRvbm5heS9TTVxcbmNoYXJnZS9BRVNER01cXG5jaGFyZ2VhYmxlL0FcXG5jaGFyZ2VkL1VcXG5jaGFyZ2VyL1NNXFxuY2hhcmlseVxcbmNoYXJpbmVzcy9NXFxuY2hhcmlvdC9TTVxcbmNoYXJpb3RlZXIvTVNcXG5jaGFyaXNtYS9NXFxuY2hhcmlzbWF0aWMvTVNcXG5jaGFyaXRhYmxlL1BcXG5jaGFyaXRhYmxlbmVzcy9NXFxuY2hhcml0YWJseS9VXFxuY2hhcml0eS9TTVxcbmNoYXJsYWR5L1NcXG5jaGFybGF0YW4vU01cXG5jaGFybGF0YW5pc20vTVxcbmNoYXJsYXRhbnJ5L01cXG5jaGFybGllL1NcXG5jaGFybS9aR01EUlNcXG5jaGFybWVyL01cXG5jaGFybWluZy9ZXFxuY2hhcm1sZXNzXFxuY2hhcnJlZFxcbmNoYXJyaW5nXFxuY2hhcnQvR01EU1xcbmNoYXJ0ZWQvVVxcbmNoYXJ0ZXInc1xcbmNoYXJ0ZXIvQVNHRFxcbmNoYXJ0ZXJlci9NU1xcbmNoYXJ0cmV1c2UvTVxcbmNoYXJ3b21hbi9NXFxuY2hhcndvbWVuXFxuY2hhcnkvVFJQXFxuY2hhc2UvTVpHRFJTXFxuY2hhc2VyL01cXG5jaGFzbS9NU1xcbmNoYXNzaXMvTVxcbmNoYXN0ZS9QWVRSXFxuY2hhc3Rlbi9ER1NcXG5jaGFzdGVuZXNzL01cXG5jaGFzdGlzZS9EUlNaR0xcXG5jaGFzdGlzZW1lbnQvU01cXG5jaGFzdGlzZXIvTVxcbmNoYXN0aXR5L01cXG5jaGFzdWJsZS9TTVxcbmNoYXQvU01cXG5jaGF0ZWF1L1NNXFxuY2hhdGVhdXhcXG5jaGF0ZWxhaW5lL1NNXFxuY2hhdGxpbmUvU1xcbmNoYXRyb29tL01cXG5jaGF0dGVkXFxuY2hhdHRlbC9NU1xcbmNoYXR0ZXIvTURSWkdTXFxuY2hhdHRlcmJveC9NU1xcbmNoYXR0ZXJlci9NXFxuY2hhdHRpbHlcXG5jaGF0dGluZXNzL01cXG5jaGF0dGluZ1xcbmNoYXR0eS9UUFJcXG5jaGF1ZmZldXIvR01EU1xcbmNoYXV2aW5pc20vTVxcbmNoYXV2aW5pc3QvU01cXG5jaGF1dmluaXN0aWNcXG5jaGF1dmluaXN0aWNhbGx5XFxuY2hlYXAvUFhUTlJZXFxuY2hlYXBlbi9ER1xcbmNoZWFwbmVzcy9NXFxuY2hlYXBvXFxuY2hlYXBza2F0ZS9NU1xcbmNoZWF0L1pHTURSU1xcbmNoZWF0ZXIvTVxcbmNoZWNrL0FHTURTXFxuY2hlY2tib29rL1NNXFxuY2hlY2tib3hcXG5jaGVja2VkL1VcXG5jaGVja2VyL01ER1NcXG5jaGVja2VyYm9hcmQvU01cXG5jaGVja2Vycy9NXFxuY2hlY2tsaXN0L01TXFxuY2hlY2ttYXRlL01HRFNcXG5jaGVja29mZi9TTVxcbmNoZWNrb3V0L1NNXFxuY2hlY2twb2ludC9TTVxcbmNoZWNrcm9vbS9NU1xcbmNoZWNrc3VtXFxuY2hlY2t1cC9NU1xcbmNoZWRkYXIvTVxcbmNoZWVrL0dNRFNcXG5jaGVla2JvbmUvU01cXG5jaGVla2lseVxcbmNoZWVraW5lc3MvTVxcbmNoZWVreS9UUFJcXG5jaGVlcC9HTURTXFxuY2hlZXIvWkdNRFJTXFxuY2hlZXJlci9NXFxuY2hlZXJmdWwvWVBcXG5jaGVlcmZ1bGxlclxcbmNoZWVyZnVsbGVzdFxcbmNoZWVyZnVsbmVzcy9NXFxuY2hlZXJpbHlcXG5jaGVlcmluZXNzL01cXG5jaGVlcmlvL01TXFxuY2hlZXJsZWFkZXIvU01cXG5jaGVlcmxlc3MvUFlcXG5jaGVlcmxlc3NuZXNzL01cXG5jaGVlcnkvVFBSXFxuY2hlZXNlL01HRFNcXG5jaGVlc2Vib2FyZC9TXFxuY2hlZXNlYnVyZ2VyL1NNXFxuY2hlZXNlY2FrZS9TTVxcbmNoZWVzZWNsb3RoL01cXG5jaGVlc2VwYXJpbmcvTVxcbmNoZWVzaW5lc3MvTVxcbmNoZWVzeS9UUFJcXG5jaGVldGFoL01cXG5jaGVldGFoc1xcbmNoZWYvU01cXG5jaGVtXFxuY2hlbWljYWwvU01ZXFxuY2hlbWlzZS9NU1xcbmNoZW1pc3QvTVNcXG5jaGVtaXN0cnkvTVxcbmNoZW1vL01cXG5jaGVtb3RoZXJhcGV1dGljXFxuY2hlbW90aGVyYXB5L01cXG5jaGVtdXJneS9NXFxuY2hlbmlsbGUvTVxcbmNoZXJpc2gvRFNHXFxuY2hlcm9vdC9NU1xcbmNoZXJyeS9TTVxcbmNoZXJ0L01cXG5jaGVydWIvTVNcXG5jaGVydWJpY1xcbmNoZXJ1YmltXFxuY2hlcnZpbC9NXFxuY2hlc3MvTVxcbmNoZXNzYm9hcmQvTVNcXG5jaGVzc21hbi9NXFxuY2hlc3NtZW5cXG5jaGVzdC9NRFNcXG5jaGVzdGVyZmllbGQvU01cXG5jaGVzdGZ1bC9TTVxcbmNoZXN0bnV0L1NNXFxuY2hlc3R5L1RSXFxuY2hldmFsaWVyL1NNXFxuY2hldmlvdC9NXFxuY2hldnJvbi9NU1xcbmNoZXcvU1pHTURSXFxuY2hld2VyL01cXG5jaGV3aW5lc3MvTVxcbmNoZXd5L1BUUlxcbmNoZ1xcbmNoZ2VcXG5jaGkvU01cXG5jaGlhcm9zY3Vyby9NXFxuY2hpYy9QVE1SXFxuY2hpY2FuZS9NU1xcbmNoaWNhbmVyeS9TTVxcbmNoaWNoaS9NU1xcbmNoaWNrL1hNTlNcXG5jaGlja2FkZWUvU01cXG5jaGlja2VuL01ER1xcbmNoaWNrZW5mZWVkL01cXG5jaGlja2VuaGVhcnRlZFxcbmNoaWNrZW5wb3gvTVxcbmNoaWNrZW5zaGl0L1MhXFxuY2hpY2twZWEvU01cXG5jaGlja3dlZWQvTVxcbmNoaWNsZS9NXFxuY2hpY25lc3MvTVxcbmNoaWNvcnkvU01cXG5jaGlkZS9HRFNcXG5jaGlkaW5nL1lcXG5jaGllZi9UTVJZU1xcbmNoaWVmZG9tL01cXG5jaGllZnRhaW4vTVNcXG5jaGllZnRhaW5zaGlwL1NNXFxuY2hpZmZvbi9NXFxuY2hpZmZvbmllci9NU1xcbmNoaWdnZXIvTVNcXG5jaGlnbm9uL01TXFxuY2hpaHVhaHVhL1NNXFxuY2hpbGJsYWluL1NNXFxuY2hpbGQvTVxcbmNoaWxkYmVhcmluZy9NXFxuY2hpbGRiaXJ0aC9NXFxuY2hpbGRiaXJ0aHNcXG5jaGlsZGNhcmUvTVxcbmNoaWxkaG9vZC9TTVxcbmNoaWxkaXNoL1lQXFxuY2hpbGRpc2huZXNzL01cXG5jaGlsZGxlc3MvUFxcbmNoaWxkbGVzc25lc3MvTVxcbmNoaWxkbGlrZVxcbmNoaWxkbWluZGVyL1NcXG5jaGlsZG1pbmRpbmdcXG5jaGlsZHByb29mL0dTRFxcbmNoaWxkcmVuL01cXG5jaGlsaS9NXFxuY2hpbGllc1xcbmNoaWxsL0pQWlRHTURSU1xcbmNoaWxsZXIvTVxcbmNoaWxsaW5lc3MvTVxcbmNoaWxsaW5nL1lcXG5jaGlsbG5lc3MvTVxcbmNoaWxseS9UUFJcXG5jaGltZS9NWkdEUlNcXG5jaGltZXIvTVxcbmNoaW1lcmEvTVNcXG5jaGltZXJpY1xcbmNoaW1lcmljYWxcXG5jaGltbmV5L01TXFxuY2hpbXAvTVNcXG5jaGltcGFuemVlL1NNXFxuY2hpbi9TTVxcbmNoaW5hL01cXG5jaGluYXdhcmUvTVxcbmNoaW5jaGlsbGEvTVNcXG5jaGluZS9NU1xcbmNoaW5rL0dNRFNcXG5jaGlubGVzc1xcbmNoaW5uZWRcXG5jaGlubmluZ1xcbmNoaW5vL01TXFxuY2hpbnN0cmFwL01TXFxuY2hpbnR6L01cXG5jaGludHp5L1JUXFxuY2hpbndhZy9TXFxuY2hpcC9TTVxcbmNoaXBib2FyZFxcbmNoaXBtdW5rL1NNXFxuY2hpcG9sYXRhL1NcXG5jaGlwcGVkXFxuY2hpcHBlci9NU1xcbmNoaXBwaWVcXG5jaGlwcGluZy9TXFxuY2hpcHB5L1NcXG5jaGlyb2dyYXBoeS9NXFxuY2hpcm9wb2Rpc3QvTVNcXG5jaGlyb3BvZHkvTVxcbmNoaXJvcHJhY3RpYy9TTVxcbmNoaXJvcHJhY3Rvci9TTVxcbmNoaXJwL0dNRFNcXG5jaGlycGlseVxcbmNoaXJweS9QVFJcXG5jaGlycnVwL0dNRFNcXG5jaGlzZWwvWkdNRFJTXFxuY2hpc2VsZXIvTVxcbmNoaXQvU01cXG5jaGl0Y2hhdC9TTVxcbmNoaXRjaGF0dGVkXFxuY2hpdGNoYXR0aW5nXFxuY2hpdGluL01cXG5jaGl0aW5vdXNcXG5jaGl0b3NhblxcbmNoaXR0ZXJsaW5ncy9NXFxuY2hpdmFscm91cy9QWVxcbmNoaXZhbHJvdXNuZXNzL01cXG5jaGl2YWxyeS9NXFxuY2hpdmUvTVNcXG5jaGl2eS9HRFNcXG5jaGxhbXlkaWEvTVNcXG5jaGxhbXlkaWFlXFxuY2hsb3JhbC9NXFxuY2hsb3JkYW5lL01cXG5jaGxvcmlkZS9NU1xcbmNobG9yaW5hdGUvR05EU1xcbmNobG9yaW5hdGlvbi9NXFxuY2hsb3JpbmUvTVxcbmNobG9yb2ZsdW9yb2NhcmJvbi9TTVxcbmNobG9yb2Zvcm0vU0dNRFxcbmNobG9yb3BoeWxsL01cXG5jaGxvcm9wbGFzdC9NU1xcbmNobVxcbmNob2MvU1xcbmNob2NrL0dNRFNcXG5jaG9ja2FibG9ja1xcbmNob2NvaG9saWMvU01cXG5jaG9jb2xhdGUvTVNcXG5jaG9jb2xhdHlcXG5jaG9pY2UvTVRSU1xcbmNob2lyL01TXFxuY2hvaXJib3kvTVNcXG5jaG9pcm1hc3Rlci9TTVxcbmNob2tlL01aR0RSU1xcbmNob2tlY2hlcnJ5L1NNXFxuY2hva2VyL01cXG5jaG9sZWN5c3RlY3RvbXlcXG5jaG9sZWN5c3RpdGlzXFxuY2hvbGVyL01cXG5jaG9sZXJhL01cXG5jaG9sZXJpY1xcbmNob2xlc3Rlcm9sL01cXG5jaG9tcC9aR01EUlNcXG5jaG9vc2UvWkdSU1xcbmNob29zZXIvTVxcbmNob29zaW5lc3MvTVxcbmNob29zeS9UUFJcXG5jaG9wL1NNXFxuY2hvcGhvdXNlL1NNXFxuY2hvcHBlZFxcbmNob3BwZXIvTURHU1xcbmNob3BwaWx5XFxuY2hvcHBpbmVzcy9NXFxuY2hvcHBpbmdcXG5jaG9wcHkvVFBSXFxuY2hvcHN0aWNrL1NNXFxuY2hvcmFsL01ZU1xcbmNob3JhbGUvTVNcXG5jaG9yZC9NU1xcbmNob3JkYWxcXG5jaG9yZGF0ZS9TTVxcbmNob3JlL01TXFxuY2hvcmVhL01cXG5jaG9yZW9ncmFwaC9EUlpHXFxuY2hvcmVvZ3JhcGhlci9NXFxuY2hvcmVvZ3JhcGhpY1xcbmNob3Jlb2dyYXBoaWNhbGx5XFxuY2hvcmVvZ3JhcGhzXFxuY2hvcmVvZ3JhcGh5L01cXG5jaG9yaXN0ZXIvU01cXG5jaG9yb2lkL01TXFxuY2hvcnRsZS9NWkdEUlNcXG5jaG9ydGxlci9NXFxuY2hvcnVzL0dNRFNcXG5jaG9zZVxcbmNob3NlblxcbmNob3cvU0dNRFxcbmNob3dkZXIvTVNcXG5jaHJpc20vTVxcbmNocmlzdGVuL0FTR0RcXG5jaHJpc3RlbmluZy9NU1xcbmNocmlzdGlhbi9VXFxuY2hyaXN0b2xvZ3lcXG5jaHJvbWF0aWNcXG5jaHJvbWF0aWNhbGx5XFxuY2hyb21hdGluL01cXG5jaHJvbWF0b2dyYXBoeVxcbmNocm9tZS9NR0RTXFxuY2hyb21pdW0vTVxcbmNocm9tb3NvbWFsXFxuY2hyb21vc29tZS9NU1xcbmNocm9uaWNcXG5jaHJvbmljYWxseVxcbmNocm9uaWNsZS9EUlNNWkdcXG5jaHJvbmljbGVyL01cXG5jaHJvbm9ncmFwaC9NXFxuY2hyb25vZ3JhcGhzXFxuY2hyb25vbG9naWNhbC9ZXFxuY2hyb25vbG9naXN0L01TXFxuY2hyb25vbG9neS9TTVxcbmNocm9ub21ldGVyL1NNXFxuY2hyeXNhbGlzL01TXFxuY2hyeXNhbnRoZW11bS9NU1xcbmNodWIvU01cXG5jaHViYmluZXNzL01cXG5jaHViYnkvVFBSXFxuY2h1Y2svR01EU1xcbmNodWNraG9sZS9TTVxcbmNodWNrbGUvTUdEU1xcbmNodWZmZWRcXG5jaHVnL1NNXFxuY2h1Z2dlZFxcbmNodWdnaW5nXFxuY2h1a2thL01TXFxuY2h1bS9TTVxcbmNodW1tZWRcXG5jaHVtbWlseVxcbmNodW1taW5lc3MvTVxcbmNodW1taW5nXFxuY2h1bW15L1BUUlxcbmNodW1wL01TXFxuY2h1bmRlci9HRFNcXG5jaHVuay9HTURTXFxuY2h1bmtpbmVzcy9NXFxuY2h1bmt5L1BUUlxcbmNodW50ZXIvREdTXFxuY2h1cmNoL01TXFxuY2h1cmNoZ29lci9TTVxcbmNodXJjaGdvaW5nL01cXG5jaHVyY2htYW4vTVxcbmNodXJjaG1lblxcbmNodXJjaHdhcmRlbi9NU1xcbmNodXJjaHdvbWFuXFxuY2h1cmNod29tZW5cXG5jaHVyY2h5YXJkL1NNXFxuY2h1cmwvTVNcXG5jaHVybGlzaC9QWVxcbmNodXJsaXNobmVzcy9NXFxuY2h1cm4vWkdNRFJTXFxuY2h1cm5lci9NXFxuY2h1dGUvTVNcXG5jaHV0bmV5L01TXFxuY2h1dHpwYWgvTVxcbmNoeW1lL01cXG5jaHlyb24vTVNcXG5jaWFiYXR0YS9TTVxcbmNpYW8vU1xcbmNpY2FkYS9NU1xcbmNpY2F0cmljZXNcXG5jaWNhdHJpeC9NXFxuY2ljZXJvbmUvU01cXG5jaWNlcm9uaVxcbmNpZGVyJ3NcXG5jaWRlci9TXFxuY2lnYXIvTVNcXG5jaWdhcmV0dGUvTVNcXG5jaWdhcmlsbG8vTVNcXG5jaWxhbnRyby9NXFxuY2lsaWFcXG5jaWxpdW0vTVxcbmNpbmNoL0dNRFNcXG5jaW5jaG9uYS9TTVxcbmNpbmN0dXJlL1NNXFxuY2luZGVyL0dNRFNcXG5jaW5lXFxuY2luZW1hL01TXFxuY2luZW1hdGljXFxuY2luZW1hdG9ncmFwaGVyL01TXFxuY2luZW1hdG9ncmFwaGljXFxuY2luZW1hdG9ncmFwaHkvTVxcbmNpbm5hYmFyL01cXG5jaW5uYW1vbi9NXFxuY2lwaGVyJ3NcXG5jaXBoZXIvQ0dEU1xcbmNpclxcbmNpcmNhXFxuY2lyY2FkaWFuXFxuY2lyY2xlL01HRFNcXG5jaXJjbGV0L01TXFxuY2lyY3VpdC9NREdTXFxuY2lyY3VpdGFsXFxuY2lyY3VpdG91cy9ZUFxcbmNpcmN1aXRvdXNuZXNzL01cXG5jaXJjdWl0cnkvTVxcbmNpcmN1aXR5L01cXG5jaXJjdWxhci9TTVlcXG5jaXJjdWxhcml0eS9NXFxuY2lyY3VsYXJpemUvRFNHXFxuY2lyY3VsYXRlL0FEU0dcXG5jaXJjdWxhdGlvbi9TTVxcbmNpcmN1bGF0b3J5XFxuY2lyY3VtY2lzZS9YRFNHTlxcbmNpcmN1bWNpc2VkL1VcXG5jaXJjdW1jaXNpb24vTVxcbmNpcmN1bWZlcmVuY2UvTVNcXG5jaXJjdW1mZXJlbnRpYWxcXG5jaXJjdW1mbGV4L01TXFxuY2lyY3VtbG9jdXRpb24vTVNcXG5jaXJjdW1sb2N1dG9yeVxcbmNpcmN1bW5hdmlnYXRlL1hHTkRTXFxuY2lyY3VtbmF2aWdhdGlvbi9NXFxuY2lyY3VtcG9sYXJcXG5jaXJjdW1zY3JpYmUvR0RTXFxuY2lyY3Vtc2NyaXB0aW9uL01TXFxuY2lyY3Vtc3BlY3QvWVxcbmNpcmN1bXNwZWN0aW9uL01cXG5jaXJjdW1zdGFuY2UvTUdEU1xcbmNpcmN1bXN0YW50aWFsL1lcXG5jaXJjdW12ZW50L0RTR1xcbmNpcmN1bXZlbnRpb24vTVxcbmNpcmN1cy9NU1xcbmNpcnF1ZS9NU1xcbmNpcnJob3Npcy9NXFxuY2lycmhvdGljL1NNXFxuY2lycmlcXG5jaXJydXMvTVxcbmNpc1xcbmNpc2dlbmRlclxcbmNpc3Rlcm4vTVNcXG5jaXRcXG5jaXRhZGVsL01TXFxuY2l0YXRpb24vQU1TXFxuY2l0ZSdzXFxuY2l0ZS9JQUdTRFxcbmNpdGlmaWVkXFxuY2l0aXplbi9NU1xcbmNpdGl6ZW5yeS9NXFxuY2l0aXplbnNoaXAvTVxcbmNpdHJpY1xcbmNpdHJvbi9NU1xcbmNpdHJvbmVsbGEvTVxcbmNpdHJ1cy9NU1xcbmNpdHkvU01cXG5jaXR5d2lkZVxcbmNpdmV0L01TXFxuY2l2aWMvU1xcbmNpdmljYWxseVxcbmNpdmljcy9NXFxuY2l2aWwvVVlcXG5jaXZpbGlhbi9NU1xcbmNpdmlsaXR5L0lTTVxcbmNpdmlsaXphdGlvbi9NU1xcbmNpdmlsaXplL0dEU1xcbmNpdmlsaXplZC9VXFxuY2l2dmllcy9NXFxuY2tcXG5jbFxcbmNsYWNrL0dNRFNcXG5jbGFkL1VcXG5jbGFkZGluZy9NXFxuY2xhZGVcXG5jbGFpbSdzXFxuY2xhaW0vQ0tFQUdEU1xcbmNsYWltYWJsZS9BXFxuY2xhaW1hbnQvTVNcXG5jbGFpbWVkL1VcXG5jbGFpbWVyL0VDU01cXG5jbGFpcnZveWFuY2UvTVxcbmNsYWlydm95YW50L01TXFxuY2xhbS9TTVxcbmNsYW1iYWtlL01TXFxuY2xhbWJlci9aR01EUlNcXG5jbGFtYmVyZXIvTVxcbmNsYW1tZWRcXG5jbGFtbWlseVxcbmNsYW1taW5lc3MvTVxcbmNsYW1taW5nXFxuY2xhbW15L1BUUlxcbmNsYW1vci9HTURTXFxuY2xhbW9yb3VzXFxuY2xhbXAvR01EU1xcbmNsYW1wZG93bi9NU1xcbmNsYW4vU01cXG5jbGFuZGVzdGluZS9ZXFxuY2xhbmcvWkdNRFJTXFxuY2xhbmdvci9NXFxuY2xhbmdvcm91cy9ZXFxuY2xhbmsvR01EU1xcbmNsYW5uaXNoL1BcXG5jbGFubmlzaG5lc3MvTVxcbmNsYW5zbWFuL01cXG5jbGFuc21lblxcbmNsYW5zd29tYW5cXG5jbGFuc3dvbWVuXFxuY2xhcC9TTVxcbmNsYXBib2FyZC9NREdTXFxuY2xhcHBlZFxcbmNsYXBwZXIvTVNcXG5jbGFwcGVyYm9hcmQvU1xcbmNsYXBwaW5nL01cXG5jbGFwdHJhcC9NXFxuY2xhcXVlL01TXFxuY2xhcmV0L01TXFxuY2xhcmlmaWNhdGlvbi9NXFxuY2xhcmlmeS9YRFNOR1xcbmNsYXJpbmV0L1NNXFxuY2xhcmluZXRpc3QvU01cXG5jbGFyaW9uL01ER1NcXG5jbGFyaXR5L01cXG5jbGFzaC9HTURTXFxuY2xhc3Anc1xcbmNsYXNwL1VHRFNcXG5jbGFzcy9HTURTXFxuY2xhc3NpYy9NU1xcbmNsYXNzaWNhbC9NWVxcbmNsYXNzaWNpc20vTVxcbmNsYXNzaWNpc3QvTVNcXG5jbGFzc2lmaWFibGVcXG5jbGFzc2lmaWNhdGlvbi9DQU1cXG5jbGFzc2lmaWNhdGlvbnNcXG5jbGFzc2lmaWVkJ3NcXG5jbGFzc2lmaWVkL1VcXG5jbGFzc2lmaWVkc1xcbmNsYXNzaWZpZXIvTVNcXG5jbGFzc2lmeS9BQ1NER05cXG5jbGFzc2luZXNzL01cXG5jbGFzc2lzbVxcbmNsYXNzbGVzcy9QXFxuY2xhc3NtYXRlL01TXFxuY2xhc3Nyb29tL01TXFxuY2xhc3N3b3JrL01cXG5jbGFzc3kvVFJQXFxuY2xhdHRlci9HTURTXFxuY2xhdXNhbFxcbmNsYXVzZS9NU1xcbmNsYXVzdHJvcGhvYmlhL01cXG5jbGF1c3Ryb3Bob2JpY1xcbmNsYXZpY2hvcmQvU01cXG5jbGF2aWNsZS9NU1xcbmNsYXZpZXIvTVNcXG5jbGF3J3NcXG5jbGF3L0NTR0RcXG5jbGF5L01cXG5jbGF5ZXlcXG5jbGF5aWVyXFxuY2xheWllc3RcXG5jbGVhbi9CSlBaVEdEUllTXFxuY2xlYW5lci9NXFxuY2xlYW5pbmcvTVxcbmNsZWFubGluZXNzL1VNXFxuY2xlYW5seS9VVFBSXFxuY2xlYW5uZXNzL1VNXFxuY2xlYW5zZS9aR0RSU1xcbmNsZWFuc2VyL01cXG5jbGVhbnVwL01TXFxuY2xlYXIvSlBUR01EUllTXFxuY2xlYXJhbmNlL1NNXFxuY2xlYXJoZWFkZWRcXG5jbGVhcmluZy9NXFxuY2xlYXJpbmdob3VzZS9TTVxcbmNsZWFybmVzcy9NXFxuY2xlYXJ3YXkvU1xcbmNsZWF0L01TXFxuY2xlYXZhZ2UvTVNcXG5jbGVhdmUvWkdEUlNcXG5jbGVhdmVyL01cXG5jbGVmL1NNXFxuY2xlZnQvTVNcXG5jbGVtYXRpcy9NU1xcbmNsZW1lbmN5L0lNXFxuY2xlbWVudC9ZXFxuY2xlbWVudGluZS9TXFxuY2xlbmNoL0dNRFNcXG5jbGVyZXN0b3J5L1NNXFxuY2xlcmd5L1NNXFxuY2xlcmd5bWFuL01cXG5jbGVyZ3ltZW5cXG5jbGVyZ3l3b21hbi9NXFxuY2xlcmd5d29tZW5cXG5jbGVyaWMvTVNcXG5jbGVyaWNhbC9ZXFxuY2xlcmljYWxpc20vTVxcbmNsZXJrL0dNRFNcXG5jbGVya3NoaXAvTVxcbmNsZXZlci9QVFJZXFxuY2xldmVybmVzcy9NXFxuY2xldmlzL01TXFxuY2xldy9TR01EXFxuY2xpY2hlL01EU1xcbmNsaWNrL0JaR01EUlNcXG5jbGlja2JhaXRcXG5jbGlja2VyL01cXG5jbGllbnQvTVNcXG5jbGllbnRlbGUvTVNcXG5jbGlmZi9NU1xcbmNsaWZmaGFuZ2VyL1NNXFxuY2xpZmZoYW5naW5nXFxuY2xpZmZ0b3AvU1xcbmNsaWlcXG5jbGltYWN0ZXJpYy9NXFxuY2xpbWFjdGljXFxuY2xpbWF0ZS9TTVxcbmNsaW1hdGljXFxuY2xpbWF0aWNhbGx5XFxuY2xpbWF0b2xvZ2lzdC9TTVxcbmNsaW1hdG9sb2d5L01cXG5jbGltYXgvTURTR1xcbmNsaW1iL1NNRFJaR0JcXG5jbGltYmVyL01cXG5jbGltYmluZy9NXFxuY2xpbWUvU01cXG5jbGluY2gvTURSU1pHXFxuY2xpbmNoZXIvTVxcbmNsaW5nL1NNUlpHXFxuY2xpbmdlci9NXFxuY2xpbmdmaWxtXFxuY2xpbmd5L1JUXFxuY2xpbmljL1NNXFxuY2xpbmljYWwvWVxcbmNsaW5pY2lhbi9TTVxcbmNsaW5rL1NNRFJaR1xcbmNsaW5rZXIvTVxcbmNsaW9tZXRyaWMvU1xcbmNsaW9tZXRyaWNpYW4vTVNcXG5jbGlvbWV0cmljcy9NXFxuY2xpcC9TTVxcbmNsaXBib2FyZC9NU1xcbmNsaXBwZWRcXG5jbGlwcGVyL1NNXFxuY2xpcHBpbmcvU01cXG5jbGlxdWUvU01cXG5jbGlxdWV5XFxuY2xpcXVpc2gvWVBcXG5jbGlxdWlzaG5lc3MvTVxcbmNsaXQvU01cXG5jbGl0b3JhbFxcbmNsaXRvcmlkZXNcXG5jbGl0b3Jpcy9NU1xcbmNsaXhcXG5jbG9hY2EvTVxcbmNsb2FjYWVcXG5jbG9haydzXFxuY2xvYWsvVVNER1xcbmNsb2Frcm9vbS9NU1xcbmNsb2JiZXIvU01ER1xcbmNsb2NoZS9TTVxcbmNsb2NrL1NNREdcXG5jbG9ja3dpc2VcXG5jbG9ja3dvcmsvU01cXG5jbG9kL01TXFxuY2xvZGRpc2hcXG5jbG9kaG9wcGVyL01TXFxuY2xvZydzXFxuY2xvZy9VU1xcbmNsb2dnZWQvVVxcbmNsb2dnaW5nL1VcXG5jbG9pc29ubmUvTVxcbmNsb2lzdGVyL1NNREdcXG5jbG9pc3RyYWxcXG5jbG9tcC9TREdcXG5jbG9uYWxcXG5jbG9uZS9EU01HXFxuY2xvbmlkaW5lXFxuY2xvbmsvU01ER1xcbmNsb3AvTVNcXG5jbG9wcGVkXFxuY2xvcHBpbmdcXG5jbG9zZS9EUlNNWVRHSlBcXG5jbG9zZWZpc3RlZFxcbmNsb3NlbW91dGhlZFxcbmNsb3NlbmVzcy9NXFxuY2xvc2VvdXQvTVNcXG5jbG9zZXQvU01ER1xcbmNsb3NldXAvU01cXG5jbG9zaW5nL01cXG5jbG9zdXJlL0VTTVxcbmNsb3QvTVNcXG5jbG90aC9NXFxuY2xvdGhlL1VEU0dcXG5jbG90aGVzaG9yc2UvTVNcXG5jbG90aGVzbGluZS9TTVxcbmNsb3RoZXNwaW4vU01cXG5jbG90aGllci9NU1xcbmNsb3RoaW5nL01cXG5jbG90aHNcXG5jbG90dGVkXFxuY2xvdHRpbmdcXG5jbG90dXJlL1NNXFxuY2xvdWQvU01ER1xcbmNsb3VkYnVyc3QvU01cXG5jbG91ZGVkL1VcXG5jbG91ZGluZXNzL01cXG5jbG91ZGxlc3NcXG5jbG91ZHkvUlBUXFxuY2xvdXQvU01ER1xcbmNsb3ZlL1JTTVpcXG5jbG92ZW5cXG5jbG92ZXIvTVxcbmNsb3ZlcmxlYWYvU01cXG5jbG92ZXJsZWF2ZXNcXG5jbG93bi9TTURHXFxuY2xvd25pc2gvWVBcXG5jbG93bmlzaG5lc3MvTVxcbmNsb3kvREdTXFxuY2xveWluZy9ZXFxuY2x1Yi9NU1xcbmNsdWJiYWJsZVxcbmNsdWJiZWRcXG5jbHViYmVyL1NcXG5jbHViYmluZ1xcbmNsdWJmZWV0XFxuY2x1YmZvb3QvTURcXG5jbHViaG91c2UvU01cXG5jbHVibGFuZFxcbmNsdWNrL1NNREdcXG5jbHVlL01HRFNcXG5jbHVlbGVzc1xcbmNsdW1wL1NNREdcXG5jbHVtcHkvVFJcXG5jbHVtc2lseVxcbmNsdW1zaW5lc3MvTVxcbmNsdW1zeS9UUlBcXG5jbHVuZ1xcbmNsdW5rL1NNRFJaR1xcbmNsdW5rZXIvTVxcbmNsdW5reS9UUlxcbmNsdXN0ZXIvTURTR1xcbmNsdXRjaC9HTURTXFxuY2x1dHRlcidzXFxuY2x1dHRlci9VRFNHXFxuY2x2aVxcbmNsdmlpXFxuY2x4aVxcbmNseGlpXFxuY2x4aXZcXG5jbHhpeFxcbmNseHZpXFxuY2x4dmlpXFxuY21cXG5jbmlkYXJpYW4vTVNcXG5jby9FU0RcXG5jb2FjaC9NRFNHXFxuY29hY2hsb2FkL1NcXG5jb2FjaG1hbi9NXFxuY29hY2htZW5cXG5jb2FjaHdvcmtcXG5jb2FkanV0b3IvTVNcXG5jb2FndWxhbnQvTVNcXG5jb2FndWxhdGUvR05EU1xcbmNvYWd1bGF0aW9uL01cXG5jb2FndWxhdG9yL01TXFxuY29hbC9NREdTXFxuY29hbGVzY2UvR0RTXFxuY29hbGVzY2VuY2UvTVxcbmNvYWxlc2NlbnRcXG5jb2FsZmFjZS9NU1xcbmNvYWxmaWVsZC9TXFxuY29hbGl0aW9uL01TXFxuY29hbGl0aW9uaXN0L01TXFxuY29hbG1pbmUvU1xcbmNvYXJzZS9SWVRQXFxuY29hcnNlbi9TREdcXG5jb2Fyc2VuZXNzL01cXG5jb2FzdC9TTURSWkdcXG5jb2FzdGFsXFxuY29hc3Rlci9NXFxuY29hc3RndWFyZC9TXFxuY29hc3RsaW5lL01TXFxuY29hdC9NREdKU1xcbmNvYXRpbmcvTVxcbmNvYXRyb29tL1NcXG5jb2F0dGFpbC9TTVxcbmNvYXV0aG9yL01ER1NcXG5jb2F4L0RSU1pHXFxuY29heGVyL01cXG5jb2F4aWFsXFxuY29heGluZy9ZXFxuY29iL1NNXFxuY29iYWx0L01cXG5jb2JiZXIvU1xcbmNvYmJsZS9EUlNNWkdcXG5jb2JibGVyL01cXG5jb2JibGVzdG9uZS9TTVxcbmNvYm51dC9TXFxuY29icmEvU01cXG5jb2J3ZWIvU01cXG5jb2J3ZWJiZWRcXG5jb2J3ZWJieS9SVFxcbmNvY2EvTVxcbmNvY2FpbmUvTVxcbmNvY2NpL1NcXG5jb2NjdXMvTVxcbmNvY2N5Z2VzXFxuY29jY3l4L01cXG5jb2NoaW5lYWwvTVxcbmNvY2hsZWEvU01cXG5jb2NobGVhZVxcbmNvY2hsZWFyXFxuY29jay9NREdTXFxuY29ja2FkZS9TTVxcbmNvY2thbWFtaWVcXG5jb2NrYXRpZWwvTVNcXG5jb2NrYXRvby9TTVxcbmNvY2thdHJpY2UvU01cXG5jb2NrY2hhZmVyL1NcXG5jb2NrY3Jvdy9TTVxcbmNvY2tlcmVsL1NNXFxuY29ja2V5ZWRcXG5jb2NrZmlnaHQvTUdTXFxuY29ja2ZpZ2h0aW5nL01cXG5jb2NraWx5XFxuY29ja2luZXNzL01cXG5jb2NrbGUvU01cXG5jb2NrbGVzaGVsbC9TTVxcbmNvY2tuZXkvU01cXG5jb2NrcGl0L1NNXFxuY29ja3JvYWNoL01TXFxuY29ja3Njb21iL1NNXFxuY29ja3N1Y2tlci9NUyFcXG5jb2Nrc3VyZVxcbmNvY2t0YWlsL01TXFxuY29ja3kvUlRQXFxuY29jby9NU1xcbmNvY29hL1NNXFxuY29jb251dC9TTVxcbmNvY29vbi9TTURHXFxuY29kL1NNXFxuY29kYS9NU1xcbmNvZGRlZFxcbmNvZGRpbmdcXG5jb2RkbGUvRFNHXFxuY29kZSdzXFxuY29kZS9DWkdEUlNcXG5jb2RlaW5lL01cXG5jb2RlcGVuZGVuY3kvTVxcbmNvZGVwZW5kZW50L1NNXFxuY29kZXIvQ01cXG5jb2RleC9NXFxuY29kZmlzaC9NU1xcbmNvZGdlci9TTVxcbmNvZGljZXNcXG5jb2RpY2lsL1NNXFxuY29kaWZpY2F0aW9uL01cXG5jb2RpZmllci9NXFxuY29kaWZ5L1hEUlNOWkdcXG5jb2Rvbi9TXFxuY29kcGllY2UvTVNcXG5jb2Rzd2FsbG9wXFxuY29lZC9NU1xcbmNvZWR1Y2F0aW9uL01cXG5jb2VkdWNhdGlvbmFsXFxuY29lZmZpY2llbnQvTVNcXG5jb2VsZW50ZXJhdGUvTVNcXG5jb2VuenltZVxcbmNvZXF1YWwvTVlTXFxuY29lcmNlL0RSU1pHTlZcXG5jb2VyY2VyL01cXG5jb2VyY2lvbi9NXFxuY29ldmFsL1NNWVxcbmNvZXhpc3QvRFNHXFxuY29leGlzdGVuY2UvTVxcbmNvZXhpc3RlbnRcXG5jb2V4dGVuc2l2ZVxcbmNvZmZlZS9TTVxcbmNvZmZlZWNha2UvU01cXG5jb2ZmZWVob3VzZS9NU1xcbmNvZmZlZW1ha2VyL1NNXFxuY29mZmVlcG90L01TXFxuY29mZmVyL1NNXFxuY29mZmVyZGFtL01TXFxuY29mZmluL1NNREdcXG5jb2cvU01cXG5jb2dlbmN5L01cXG5jb2dlbnQvWVxcbmNvZ2l0YXRlL0RTWEdOVlxcbmNvZ2l0YXRpb24vTVxcbmNvZ2l0YXRvci9NU1xcbmNvZ25hYy9TTVxcbmNvZ25hdGUvTVNcXG5jb2duaXRpb24vQU1cXG5jb2duaXRpb25hbFxcbmNvZ25pdGl2ZS9ZXFxuY29nbml6YWJsZVxcbmNvZ25pemFuY2UvQU1cXG5jb2duaXphbnRcXG5jb2dub21lbi9TTVxcbmNvZ25vc2NlbnRlL01cXG5jb2dub3NjZW50aVxcbmNvZ3doZWVsL1NNXFxuY29oYWJpdC9TR0RcXG5jb2hhYml0YW50L01TXFxuY29oYWJpdGF0aW9uL01cXG5jb2hlaXIvU01cXG5jb2hlcmUvRFNHXFxuY29oZXJlbmNlL0lNXFxuY29oZXJlbmN5L01cXG5jb2hlcmVudC9JWVxcbmNvaGVzaW9uL01cXG5jb2hlc2l2ZS9ZUFxcbmNvaGVzaXZlbmVzcy9NXFxuY29oby9NU1xcbmNvaG9ydC9TTVxcbmNvaWYvTVNcXG5jb2lmZmVkXFxuY29pZmZpbmdcXG5jb2lmZnVyZS9EU01HXFxuY29pbCdzL0FcXG5jb2lsL1VBREdTXFxuY29pbi9NRFJaR1NcXG5jb2luYWdlL1NNXFxuY29pbmNpZGUvRFNHXFxuY29pbmNpZGVuY2UvTVNcXG5jb2luY2lkZW50XFxuY29pbmNpZGVudGFsL1lcXG5jb2luZXIvTVxcbmNvaW5zdXJhbmNlL01cXG5jb2lyXFxuY29pdGFsXFxuY29pdHVzL01cXG5jb2tlL01HRFNcXG5jb2wvU1xcbmNvbGEvTVNcXG5jb2xhbmRlci9TTVxcbmNvbGQvTVJZVFBTXFxuY29sZGJsb29kZWRcXG5jb2xkbmVzcy9NXFxuY29sZXNsYXcvTVxcbmNvbGV1cy9NU1xcbmNvbGV5L1NcXG5jb2xpYy9NXFxuY29saWNreVxcbmNvbGlzZXVtL01TXFxuY29saXRpcy9NXFxuY29sbFxcbmNvbGxhYm9yYXRlL0RTWEdOVlxcbmNvbGxhYm9yYXRpb24vTVxcbmNvbGxhYm9yYXRpb25pc3RcXG5jb2xsYWJvcmF0aXZlL1lcXG5jb2xsYWJvcmF0b3IvTVNcXG5jb2xsYWdlL1NNXFxuY29sbGFnZW5cXG5jb2xsYXBzZS9NR0RTXFxuY29sbGFwc2libGVcXG5jb2xsYXIvU01ER1xcbmNvbGxhcmJvbmUvU01cXG5jb2xsYXJkL1NNXFxuY29sbGFybGVzc1xcbmNvbGxhdGUvRFNYR05cXG5jb2xsYXRlcmFsL01ZXFxuY29sbGF0ZXJhbGl6ZVxcbmNvbGxhdGlvbi9NXFxuY29sbGF0b3IvTVNcXG5jb2xsZWFndWUvTVNcXG5jb2xsZWN0J3NcXG5jb2xsZWN0L0FTR1ZEXFxuY29sbGVjdGVkL1VcXG5jb2xsZWN0ZWRseVxcbmNvbGxlY3RpYmxlL1NNXFxuY29sbGVjdGlvbi9BTVNcXG5jb2xsZWN0aXZlL01ZU1xcbmNvbGxlY3RpdmlzbS9NXFxuY29sbGVjdGl2aXN0L1NNXFxuY29sbGVjdGl2aXphdGlvbi9NXFxuY29sbGVjdGl2aXplL0RTR1xcbmNvbGxlY3Rvci9NU1xcbmNvbGxlZW4vU01cXG5jb2xsZWdlL1NNXFxuY29sbGVnaWFsaXR5L01cXG5jb2xsZWdpYW4vTVNcXG5jb2xsZWdpYXRlXFxuY29sbGlkZS9EUlNaR1xcbmNvbGxpZS9SU01aXFxuY29sbGllci9NXFxuY29sbGllcnkvU01cXG5jb2xsaXNpb24vU01cXG5jb2xsb2NhdGUvTUdORFNYXFxuY29sbG9jYXRpb24vTVxcbmNvbGxvaWQvU01cXG5jb2xsb2lkYWxcXG5jb2xsb3FcXG5jb2xsb3F1aWFsL1lcXG5jb2xsb3F1aWFsaXNtL1NNXFxuY29sbG9xdWllc1xcbmNvbGxvcXVpdW0vTVNcXG5jb2xsb3F1eS9NXFxuY29sbHVkZS9EU0dcXG5jb2xsdXNpb24vTVxcbmNvbGx1c2l2ZVxcbmNvbG9nbmUvU01cXG5jb2xvbi9TTVxcbmNvbG9uZWwvU01cXG5jb2xvbmVsY3kvTVxcbmNvbG9uZXNcXG5jb2xvbmlhbC9TTVlcXG5jb2xvbmlhbGlzbS9NXFxuY29sb25pYWxpc3QvTVNcXG5jb2xvbmlzdC9TTVxcbmNvbG9uaXphdGlvbi9BQ01cXG5jb2xvbml6ZS9DQUdTRFxcbmNvbG9uaXplci9NU1xcbmNvbG9ubmFkZS9NRFNcXG5jb2xvbm9zY29weS9TTVxcbmNvbG9ueS9TTVxcbmNvbG9waG9uL1NNXFxuY29sb3Inc1xcbmNvbG9yL0FFR0RTXFxuY29sb3JhbnQvU01cXG5jb2xvcmF0aW9uL0VNXFxuY29sb3JhdHVyYS9NU1xcbmNvbG9yYmxpbmQvUFxcbmNvbG9yYmxpbmRuZXNzL01cXG5jb2xvcmVkJ3NcXG5jb2xvcmVkL1VcXG5jb2xvcmVkc1xcbmNvbG9yZmFzdC9QXFxuY29sb3JmYXN0bmVzcy9NXFxuY29sb3JmdWwvUFlcXG5jb2xvcmZ1bG5lc3MvTVxcbmNvbG9yaW5nJ3NcXG5jb2xvcmlzdC9TXFxuY29sb3JpemF0aW9uL01cXG5jb2xvcml6ZS9EU0dcXG5jb2xvcmxlc3MvUFlcXG5jb2xvcmxlc3NuZXNzL01cXG5jb2xvcndheS9TXFxuY29sb3NzYWwvWVxcbmNvbG9zc2lcXG5jb2xvc3N1cy9NXFxuY29sb3N0b215L1NNXFxuY29sb3N0cnVtL01cXG5jb2x0L01TXFxuY29sdGlzaFxcbmNvbHVtYmluZS9TTVxcbmNvbHVtbi9TTURcXG5jb2x1bW5hclxcbmNvbHVtbmlzdC9TTVxcbmNvbS9KTFxcbmNvbWEvTVNcXG5jb21ha2VyL1NNXFxuY29tYXRvc2VcXG5jb21iL01EUlpHSlNcXG5jb21iYXQvU01ER1ZcXG5jb21iYXRhbnQvU01cXG5jb21iYXRpdmVuZXNzL01cXG5jb21iZWQvVVxcbmNvbWJlci9NXFxuY29tYmluYXRpb24vU01cXG5jb21iaW5lJ3NcXG5jb21iaW5lL0FEU0dcXG5jb21iaW5lZC9VXFxuY29tYmluZXIvTVNcXG5jb21iaW5ncy9NXFxuY29tYm8vU01cXG5jb21idXN0L1NHVkRcXG5jb21idXN0aWJpbGl0eS9NXFxuY29tYnVzdGlibGUvTVNcXG5jb21idXN0aW9uL01cXG5jb21lL0lNWkdSU1xcbmNvbWViYWNrL01TXFxuY29tZWRpYW4vTVNcXG5jb21lZGljXFxuY29tZWRpZW5uZS9NU1xcbmNvbWVkb3duL01TXFxuY29tZWR5L1NNXFxuY29tZWxpbmVzcy9NXFxuY29tZWx5L1JQVFxcbmNvbWVyJ3NcXG5jb21lc3RpYmxlL1NNXFxuY29tZXQvU01cXG5jb21ldXBwYW5jZS9TTVxcbmNvbWZpdCdzXFxuY29tZml0L0VTXFxuY29tZm9ydC9FU01ER1xcbmNvbWZvcnRhYmxlL1BcXG5jb21mb3J0YWJsZW5lc3MvTVxcbmNvbWZvcnRhYmx5L1VcXG5jb21mb3J0ZXIvTVNcXG5jb21mb3J0aW5nL1lcXG5jb21mb3J0bGVzc1xcbmNvbWZ5L1JUXFxuY29taWMvU01cXG5jb21pY2FsL1lcXG5jb21pY2FsaXR5L01cXG5jb21pbmcvTVxcbmNvbWl0eS9NXFxuY29tbVxcbmNvbW1hL1NNXFxuY29tbWFuZC9TTURSTFpHXFxuY29tbWFuZGFudC9NU1xcbmNvbW1hbmRlZXIvR0RTXFxuY29tbWFuZGVyL01cXG5jb21tYW5kbWVudC9NU1xcbmNvbW1hbmRvL1NNXFxuY29tbWVtb3JhdGUvWEdOVkRTXFxuY29tbWVtb3JhdGlvbi9NXFxuY29tbWVtb3JhdG9yL01TXFxuY29tbWVuY2UvQURTTEdcXG5jb21tZW5jZW1lbnQvQU1cXG5jb21tZW5jZW1lbnRzXFxuY29tbWVuZC9BU0RCR1xcbmNvbW1lbmRhYmx5XFxuY29tbWVuZGF0aW9uL0FNU1xcbmNvbW1lbmRhdG9yeVxcbmNvbW1lbnN1cmFibGVcXG5jb21tZW5zdXJhdGUvSVlcXG5jb21tZW50L0dTTURcXG5jb21tZW50YXJ5L1NNXFxuY29tbWVudGF0ZS9EU0dcXG5jb21tZW50YXRvci9TTVxcbmNvbW1lcmNlL01cXG5jb21tZXJjaWFsL1NNWVxcbmNvbW1lcmNpYWxpc20vTVxcbmNvbW1lcmNpYWxpemF0aW9uL01cXG5jb21tZXJjaWFsaXplL0dEU1xcbmNvbW1pZS9TTVxcbmNvbW1pbmdsZS9EU0dcXG5jb21taXNlcmF0ZS9HTlZEU1hcXG5jb21taXNlcmF0aW9uL01cXG5jb21taXNzYXIvU01cXG5jb21taXNzYXJpYXQvU01cXG5jb21taXNzYXJ5L1NNXFxuY29tbWlzc2lvbidzXFxuY29tbWlzc2lvbi9BQ1NHRFxcbmNvbW1pc3Npb25haXJlL1NcXG5jb21taXNzaW9uZXIvU01cXG5jb21taXQvQVNcXG5jb21taXRtZW50L01TXFxuY29tbWl0dGFsL1NNXFxuY29tbWl0dGVkL0FVXFxuY29tbWl0dGVlL1NNXFxuY29tbWl0dGVlbWFuL01cXG5jb21taXR0ZWVtZW5cXG5jb21taXR0ZWV3b21hbi9NXFxuY29tbWl0dGVld29tZW5cXG5jb21taXR0ZXIvU1xcbmNvbW1pdHRpbmcvQVxcbmNvbW1vZGUnc1xcbmNvbW1vZGUvRUlTXFxuY29tbW9kaWZpY2F0aW9uXFxuY29tbW9kaW91cy9ZXFxuY29tbW9kaXR5L1NNXFxuY29tbW9kb3JlL1NNXFxuY29tbW9uJ3NcXG5jb21tb24vVVBSWVRcXG5jb21tb25hbGl0eS9TXFxuY29tbW9uYWx0eS9NXFxuY29tbW9uZXIvTVNcXG5jb21tb25uZXNzL1VNXFxuY29tbW9ucGxhY2UvTVNcXG5jb21tb25zXFxuY29tbW9uc2Vuc2VcXG5jb21tb253ZWFsL01IXFxuY29tbW9ud2VhbHRoL01cXG5jb21tb253ZWFsdGhzXFxuY29tbW90aW9uL1NNXFxuY29tbXVuYWwvWVxcbmNvbW11bmUvWERTTUdOXFxuY29tbXVuaWNhYmlsaXR5L01cXG5jb21tdW5pY2FibGUvSVxcbmNvbW11bmljYWJseVxcbmNvbW11bmljYW50L01TXFxuY29tbXVuaWNhdGUvR05WRFNYXFxuY29tbXVuaWNhdGlvbi9NXFxuY29tbXVuaWNhdGl2ZS9VXFxuY29tbXVuaWNhdG9yL1NNXFxuY29tbXVuaW9uL01cXG5jb21tdW5pcXVlL1NNXFxuY29tbXVuaXNtL01cXG5jb21tdW5pc3QvU01cXG5jb21tdW5pc3RpY1xcbmNvbW11bml0eS9TTVxcbmNvbW11dGF0aW9uL01TXFxuY29tbXV0YXRpdmVcXG5jb21tdXRhdGl2aXR5XFxuY29tbXV0YXRvci9TTVxcbmNvbW11dGUvQkRSU01aR1xcbmNvbW11dGVyL01cXG5jb21vcmJpZGl0eVxcbmNvbXAvTURZR1NcXG5jb21wYWN0L1RHU01EUllQXFxuY29tcGFjdGlvblxcbmNvbXBhY3RuZXNzL01cXG5jb21wYWN0b3IvU01cXG5jb21wYW5pb24vU0JNXFxuY29tcGFuaW9uYWJseVxcbmNvbXBhbmlvbnNoaXAvTVxcbmNvbXBhbmlvbndheS9NU1xcbmNvbXBhbnkvU01cXG5jb21wYXJhYmlsaXR5L01cXG5jb21wYXJhYmxlL0lcXG5jb21wYXJhYmx5L0lcXG5jb21wYXJhdGl2ZS9NWVNcXG5jb21wYXJlL0JEU0dcXG5jb21wYXJpc29uL01TXFxuY29tcGFydG1lbnQvU01cXG5jb21wYXJ0bWVudGFsXFxuY29tcGFydG1lbnRhbGl6YXRpb24vTVxcbmNvbXBhcnRtZW50YWxpemUvRFNHXFxuY29tcGFzcy9HTURTXFxuY29tcGFzc2lvbi9NXFxuY29tcGFzc2lvbmF0ZS9ZXFxuY29tcGF0aWJpbGl0eS9JTVxcbmNvbXBhdGlibGUvSU1TXFxuY29tcGF0aWJseS9JXFxuY29tcGF0cmlvdC9NU1xcbmNvbXBlZXIvU01cXG5jb21wZWwvU1xcbmNvbXBlbGxlZFxcbmNvbXBlbGxpbmcvWVxcbmNvbXBlbmRpb3VzXFxuY29tcGVuZGl1bS9TTVxcbmNvbXBlbnNhdGUvRFNYR05cXG5jb21wZW5zYXRlZC9VXFxuY29tcGVuc2F0aW9uL01cXG5jb21wZW5zYXRvcnlcXG5jb21wZXJlL0RTR1xcbmNvbXBldGUvRFNHXFxuY29tcGV0ZW5jZS9JTVxcbmNvbXBldGVuY2VzXFxuY29tcGV0ZW5jaWVzXFxuY29tcGV0ZW5jeS9JTVxcbmNvbXBldGVudC9JWVxcbmNvbXBldGl0aW9uL1NNXFxuY29tcGV0aXRpdmUvUFlcXG5jb21wZXRpdGl2ZW5lc3MvTVxcbmNvbXBldGl0b3IvU01cXG5jb21waWxhdGlvbi9TTVxcbmNvbXBpbGUvRFJTWkdcXG5jb21waWxlci9NXFxuY29tcGxhY2VuY2UvTVxcbmNvbXBsYWNlbmN5L01cXG5jb21wbGFjZW50L1lcXG5jb21wbGFpbi9EUlpHU1xcbmNvbXBsYWluYW50L01TXFxuY29tcGxhaW5lci9NXFxuY29tcGxhaW50L1NNXFxuY29tcGxhaXNhbmNlL01cXG5jb21wbGFpc2FudC9ZXFxuY29tcGxlY3RlZFxcbmNvbXBsZW1lbnQvU0dNRFxcbmNvbXBsZW1lbnRhcnlcXG5jb21wbGV0ZS9QWVRHTlhEUlNcXG5jb21wbGV0ZWQvVVxcbmNvbXBsZXRlbmVzcy9JTVxcbmNvbXBsZXRpb24vTVxcbmNvbXBsZXgvTVNZXFxuY29tcGxleGlvbi9NRFNcXG5jb21wbGV4aW9uYWxcXG5jb21wbGV4aXR5L1NNXFxuY29tcGxpYW5jZS9NXFxuY29tcGxpYW50L1lcXG5jb21wbGljYXRlL0dEU1xcbmNvbXBsaWNhdGVkL1lcXG5jb21wbGljYXRpb24vTVxcbmNvbXBsaWNpdFxcbmNvbXBsaWNpdHkvTVxcbmNvbXBsaW1lbnQvTURHU1xcbmNvbXBsaW1lbnRhcnkvVVxcbmNvbXBseS9ORFNYR1xcbmNvbXBvL1NcXG5jb21wb25lbnQvU01cXG5jb21wb3J0L0xTR0RcXG5jb21wb3J0bWVudC9NXFxuY29tcG9zZS9BRUNHU0RcXG5jb21wb3NlZGx5XFxuY29tcG9zZXIvTVNcXG5jb21wb3NpdGUvTVlHTlhEU1xcbmNvbXBvc2l0aW9uL0NNXFxuY29tcG9zaXRpb25hbFxcbmNvbXBvc2l0b3IvU01cXG5jb21wb3N0L1NHTURcXG5jb21wb3N1cmUvRU1cXG5jb21wb3RlL1NNXFxuY29tcG91bmQvR01EQlNcXG5jb21wb3VuZGVkL1VcXG5jb21wcmVoZW5kL1NER1xcbmNvbXByZWhlbnNpYmlsaXR5L0lNXFxuY29tcHJlaGVuc2libGUvSVxcbmNvbXByZWhlbnNpYmx5L0lcXG5jb21wcmVoZW5zaW9uL0lNXFxuY29tcHJlaGVuc2lvbnNcXG5jb21wcmVoZW5zaXZlL1BNWVNcXG5jb21wcmVoZW5zaXZlbmVzcy9NXFxuY29tcHJlc3Mnc1xcbmNvbXByZXNzL0NHVkRTXFxuY29tcHJlc3NlZC9VXFxuY29tcHJlc3NpYmxlXFxuY29tcHJlc3Npb24vQ01cXG5jb21wcmVzc29yL1NNXFxuY29tcHJpc2UvR0RTXFxuY29tcHJvbWlzZS9NR0RTXFxuY29tcHRyb2xsZXIvTVNcXG5jb21wdWxzaW9uL01TXFxuY29tcHVsc2l2ZS9ZUFxcbmNvbXB1bHNpdmVuZXNzL01cXG5jb21wdWxzb3JpbHlcXG5jb21wdWxzb3J5L1NNXFxuY29tcHVuY3Rpb24vU01cXG5jb21wdXRhdGlvbi9TTVxcbmNvbXB1dGF0aW9uYWwvWVxcbmNvbXB1dGUvQURTR1xcbmNvbXB1dGVyL01TXFxuY29tcHV0ZXJhdGVcXG5jb21wdXRlcml6YXRpb24vTVxcbmNvbXB1dGVyaXplL0dEU1xcbmNvbXB1dGluZy9NXFxuY29tcmFkZS9TTVlcXG5jb21yYWRlc2hpcC9NXFxuY29uL0dTTVxcbmNvbmNhdGVuYXRlL1hEU0dOXFxuY29uY2F0ZW5hdGlvbi9NXFxuY29uY2F2ZS9ZUFxcbmNvbmNhdmVuZXNzL01cXG5jb25jZWFsL1NEUlpHQkxcXG5jb25jZWFsZWQvVVxcbmNvbmNlYWxlci9NXFxuY29uY2VhbG1lbnQvTVxcbmNvbmNlaXQvU01EXFxuY29uY2VpdGVkL1BZXFxuY29uY2VpdGVkbmVzcy9NXFxuY29uY2VpdmFibGUvSVxcbmNvbmNlaXZhYmx5L0lcXG5jb25jZWl2ZS9EU0dCXFxuY29uY2VudHJhdGUvRFNNR05YXFxuY29uY2VudHJhdGlvbi9NXFxuY29uY2VudHJpY1xcbmNvbmNlbnRyaWNhbGx5XFxuY29uY2VwdC9TTVxcbmNvbmNlcHRpb24vU01cXG5jb25jZXB0aW9uYWxcXG5jb25jZXB0dWFsL1lcXG5jb25jZXB0dWFsaXphdGlvbi9NU1xcbmNvbmNlcHR1YWxpemUvRFNHXFxuY29uY2Vybi9VTURcXG5jb25jZXJuZWQvVVlcXG5jb25jZXJuaW5nXFxuY29uY2VybnNcXG5jb25jZXJ0J3NcXG5jb25jZXJ0L0VTREdcXG5jb25jZXJ0ZWQvWVxcbmNvbmNlcnRnb2VyL1NcXG5jb25jZXJ0aW5hL1NHTURcXG5jb25jZXJ0aXplL0RTR1xcbmNvbmNlcnRtYXN0ZXIvTVNcXG5jb25jZXJ0by9TTVxcbmNvbmNlc3Npb25haXJlL01TXFxuY29uY2Vzc2lvbmFsXFxuY29uY2Vzc2lvbmFyeVxcbmNvbmNoL01cXG5jb25jaGllL1NcXG5jb25jaHNcXG5jb25jaWVyZ2UvTVNcXG5jb25jaWxpYXRlL0RTR05cXG5jb25jaWxpYXRpb24vQU1cXG5jb25jaWxpYXRvci9TTVxcbmNvbmNpbGlhdG9yeVxcbmNvbmNpc2UvUlBZVE5cXG5jb25jaXNlbmVzcy9NXFxuY29uY2lzaW9uL01cXG5jb25jbGF2ZS9TTVxcbmNvbmNsdWRlL0RTR1xcbmNvbmNsdXNpb24vTVNcXG5jb25jbHVzaXZlL0lZUFxcbmNvbmNsdXNpdmVuZXNzL0lNXFxuY29uY29jdC9TREdcXG5jb25jb2N0aW9uL01TXFxuY29uY29taXRhbnQvTVlTXFxuY29uY29yZC9NXFxuY29uY29yZGFuY2UvU01cXG5jb25jb3JkYW50XFxuY29uY29yZGF0L1NNXFxuY29uY291cnNlL1NNXFxuY29uY3JldGUvRFNQTVlHTlhcXG5jb25jcmV0ZW5lc3MvTVxcbmNvbmNyZXRpb24vTVxcbmNvbmN1YmluYWdlL01cXG5jb25jdWJpbmUvTVNcXG5jb25jdXBpc2NlbmNlL01cXG5jb25jdXBpc2NlbnRcXG5jb25jdXIvU1xcbmNvbmN1cnJlZFxcbmNvbmN1cnJlbmNlL1NNXFxuY29uY3VycmVuY3lcXG5jb25jdXJyaW5nXFxuY29uY3Vzcy9WXFxuY29uY3Vzc2lvbi9TTVxcbmNvbmRlbW4vU0RSWkdcXG5jb25kZW1uYXRpb24vTVNcXG5jb25kZW1uYXRvcnlcXG5jb25kZW1uZXIvTVxcbmNvbmRlbnNhdGUvTU5YU1xcbmNvbmRlbnNhdGlvbi9NXFxuY29uZGVuc2UvRFJTWkdcXG5jb25kZW5zZXIvTVxcbmNvbmRlc2NlbmRpbmcvWVxcbmNvbmRlc2NlbnNpb24vTVxcbmNvbmRpZ25cXG5jb25kaW1lbnQvTVNcXG5jb25kaXRpb24nc1xcbmNvbmRpdGlvbi9BR1NEXFxuY29uZGl0aW9uYWwvU01ZXFxuY29uZGl0aW9uYWxpdHlcXG5jb25kaXRpb25lZC9VXFxuY29uZGl0aW9uZXIvU01cXG5jb25kaXRpb25pbmcvTVxcbmNvbmRvL1NNXFxuY29uZG9sZW5jZS9TTVxcbmNvbmRvbS9TTVxcbmNvbmRvbWluaXVtL01TXFxuY29uZG9uZS9EU0dcXG5jb25kb3IvU01cXG5jb25kdWNlL0RTR1ZcXG5jb25kdWN0L01ER1ZcXG5jb25kdWN0YW5jZS9NXFxuY29uZHVjdGliaWxpdHkvTVxcbmNvbmR1Y3RpYmxlXFxuY29uZHVjdGlvbi9NXFxuY29uZHVjdGl2aXR5L01cXG5jb25kdWN0b3IvTVNcXG5jb25kdWN0cmVzcy9NU1xcbmNvbmR1aXQvU01cXG5jb25lL01cXG5jb25leXNcXG5jb25mYWIvU01cXG5jb25mYWJiZWRcXG5jb25mYWJiaW5nXFxuY29uZmFidWxhdGUvWERTR05cXG5jb25mYWJ1bGF0aW9uL01cXG5jb25mZWN0aW9uL1NaTVJcXG5jb25mZWN0aW9uZXIvTVxcbmNvbmZlY3Rpb25lcnkvU01cXG5jb25mZWRlcmFjeS9TTVxcbmNvbmZlZGVyYXRlL01cXG5jb25mZXIvU1xcbmNvbmZlcmVlL1NNXFxuY29uZmVyZW5jZS9NR1NcXG5jb25mZXJyYWJsZVxcbmNvbmZlcnJhbC9NXFxuY29uZmVycmVkXFxuY29uZmVycmVyL01TXFxuY29uZmVycmluZ1xcbmNvbmZlc3NlZC9ZXFxuY29uZmVzc2lvbi9TTVxcbmNvbmZlc3Npb25hbC9TTVxcbmNvbmZlc3Nvci9NU1xcbmNvbmZldHRpL01cXG5jb25maWRhbnQvTVNcXG5jb25maWRhbnRlL1NNXFxuY29uZmlkZS9EUlNaR1xcbmNvbmZpZGVuY2UvU01cXG5jb25maWRlbnQvWVxcbmNvbmZpZGVudGlhbC9ZXFxuY29uZmlkZW50aWFsaXR5L01cXG5jb25maWRlci9NXFxuY29uZmlkaW5nL1lcXG5jb25maWd1cmF0aW9uL1NcXG5jb25maWd1cmUvQlxcbmNvbmZpbmVkL1VcXG5jb25maW5lbWVudC9NU1xcbmNvbmZpcm0vQVNER1xcbmNvbmZpcm1hdGlvbi9BU01cXG5jb25maXJtYXRvcnlcXG5jb25maXJtZWQvVVxcbmNvbmZpc2NhdGUvRFNHTlhcXG5jb25maXNjYXRpb24vTVxcbmNvbmZpc2NhdG9yL1NNXFxuY29uZmlzY2F0b3J5XFxuY29uZmxhZ3JhdGlvbi9NU1xcbmNvbmZsYXRlL1hEU0dOXFxuY29uZmxhdGlvbi9NXFxuY29uZmxpY3QvU0dNRFxcbmNvbmZsdWVuY2UvTVNcXG5jb25mbHVlbnRcXG5jb25mb3JtL1pCXFxuY29uZm9ybWFibGUvVVxcbmNvbmZvcm1hbFxcbmNvbmZvcm1hbmNlL01cXG5jb25mb3JtaXNtL01cXG5jb25mb3JtaXN0L1NNXFxuY29uZm9ybWl0eS9NXFxuY29uZnJlcmUvTVNcXG5jb25mcm9udGF0aW9uL1NNXFxuY29uZnJvbnRhdGlvbmFsXFxuY29uZnVzZS9SWlxcbmNvbmZ1c2VkL1lcXG5jb25mdXNpbmcvWVxcbmNvbmZ1dGF0aW9uL01cXG5jb25mdXRlL0RTR1xcbmNvbmdhL1NNREdcXG5jb25nZWFsL1NMREdcXG5jb25nZWFsbWVudC9NXFxuY29uZ2VyL1NNXFxuY29uZ2VyaWVzL01cXG5jb25nZXN0L1NER1ZcXG5jb25nZXN0aW9uL01cXG5jb25nbG9tZXJhdGUvRFNYTUdOXFxuY29uZ2xvbWVyYXRpb24vTVxcbmNvbmdyYXRzL01cXG5jb25ncmF0dWxhdGUvWEdORFNcXG5jb25ncmF0dWxhdGlvbi9NXFxuY29uZ3JhdHVsYXRvcnlcXG5jb25ncmVnYW50L01TXFxuY29uZ3JlZ2F0ZS9HTkRTWFxcbmNvbmdyZWdhdGlvbi9NXFxuY29uZ3JlZ2F0aW9uYWxcXG5jb25ncmVnYXRpb25hbGlzbS9NXFxuY29uZ3JlZ2F0aW9uYWxpc3QvTVNcXG5jb25ncmVzcy9NU1xcbmNvbmdyZXNzaW9uYWxcXG5jb25ncmVzc21hbi9NXFxuY29uZ3Jlc3NtZW5cXG5jb25ncmVzc3Blb3BsZVxcbmNvbmdyZXNzcGVyc29uL01TXFxuY29uZ3Jlc3N3b21hbi9NXFxuY29uZ3Jlc3N3b21lblxcbmNvbmdydWVuY2UvTVxcbmNvbmdydWVudC9ZXFxuY29uZ3J1aXR5L0lTTVxcbmNvbmdydW91c1xcbmNvbmljL1NNXFxuY29uaWNhbC9ZXFxuY29uaWZlci9TTVxcbmNvbmlmZXJvdXNcXG5jb25qZWN0dXJhbFxcbmNvbmplY3R1cmUvTUdEU1xcbmNvbmpvaW50XFxuY29uanVnYWwvWVxcbmNvbmp1Z2F0ZS9EU1hHTlxcbmNvbmp1Z2F0aW9uL01cXG5jb25qdW5jdC9WTVNcXG5jb25qdW5jdGl2YS9TTVxcbmNvbmp1bmN0aXZlL1NNXFxuY29uanVuY3Rpdml0aXMvTVxcbmNvbmp1cmF0aW9uL01TXFxuY29uanVyZS9EUlNaR1xcbmNvbmp1cmVyL01cXG5jb25rL01EUlpcXG5jb25tYW5cXG5jb25uZWN0L0FFRFZHU1xcbmNvbm5lY3RhYmxlXFxuY29ubmVjdGVkL1VcXG5jb25uZWN0aW9uL0VNU1xcbmNvbm5lY3RpdmUvTVNcXG5jb25uZWN0aXZpdHkvTVxcbmNvbm5lY3Rvci9NU1xcbmNvbm5lZFxcbmNvbm5pbmdcXG5jb25uaXB0aW9uL01TXFxuY29ubml2YW5jZS9NXFxuY29ubml2ZS9EUlNaR1xcbmNvbm5pdmVyL01cXG5jb25ub2lzc2V1ci9TTVxcbmNvbm5vdGF0aXZlXFxuY29ubnViaWFsXFxuY29ucXVlci9BU0RHXFxuY29ucXVlcmFibGUvVVxcbmNvbnF1ZXJlZC9VXFxuY29ucXVlcm9yL01TXFxuY29ucXVlc3QvQU1cXG5jb25xdWlzdGFkb3IvU01cXG5jb25zL0RTR1xcbmNvbnNhbmd1aW5lb3VzXFxuY29uc2FuZ3Vpbml0eS9NXFxuY29uc2NpZW5jZWxlc3NcXG5jb25zY2llbnRpb3VzL1BZXFxuY29uc2NpZW50aW91c25lc3MvTVxcbmNvbnNjaW91cy9VWVBcXG5jb25zY2lvdXNuZXNzL1VNXFxuY29uc2Npb3VzbmVzc2VzXFxuY29uc2NyaXB0aW9uL01cXG5jb25zZWNyYXRlL0FEU0dOXFxuY29uc2VjcmF0ZWQvVVxcbmNvbnNlY3JhdGlvbi9BTVxcbmNvbnNlY3JhdGlvbnNcXG5jb25zZWN1dGl2ZS9ZXFxuY29uc2Vuc3VhbFxcbmNvbnNlbnN1cy9NU1xcbmNvbnNlbnQvU01ER1xcbmNvbnNlcXVlbmNlL1NNXFxuY29uc2VxdWVudC9ZXFxuY29uc2VxdWVudGlhbC9JWVxcbmNvbnNlcnZhbmN5L1NNXFxuY29uc2VydmF0aW9uL01cXG5jb25zZXJ2YXRpb25pc20vTVxcbmNvbnNlcnZhdGlvbmlzdC9TTVxcbmNvbnNlcnZhdGlzbS9NXFxuY29uc2VydmF0aXZlL01ZU1xcbmNvbnNlcnZhdG9pcmUvU1xcbmNvbnNlcnZhdG9yL1NNXFxuY29uc2VydmF0b3J5L1NNXFxuY29uc2lkZXIvQUdTRFxcbmNvbnNpZGVyYWJsZS9JXFxuY29uc2lkZXJhYmx5XFxuY29uc2lkZXJhdGUvSVBZTlxcbmNvbnNpZGVyYXRlbmVzcy9JTVxcbmNvbnNpZGVyYXRpb24vQUlNXFxuY29uc2lkZXJhdGlvbnNcXG5jb25zaWRlcmVkL1VcXG5jb25zaWduL0FTREdcXG5jb25zaWduZWUvTVNcXG5jb25zaWdubWVudC9NU1xcbmNvbnNpc3QvU0RHXFxuY29uc2lzdGVuY2UvTVNcXG5jb25zaXN0ZW5jeS9JU01cXG5jb25zaXN0ZW50L0lZXFxuY29uc2lzdG9yeS9TTVxcbmNvbnNvbGFibGUvSVxcbmNvbnNvbGF0aW9uL01TXFxuY29uc29sYXRvcnlcXG5jb25zb2xpZGF0ZS9YRFNHTlxcbmNvbnNvbGlkYXRlZC9VXFxuY29uc29saWRhdGlvbi9NXFxuY29uc29saWRhdG9yL01TXFxuY29uc29saW5nL1lcXG5jb25zb21tZS9NXFxuY29uc29uYW5jZS9TTVxcbmNvbnNvbmFudC9TTVlcXG5jb25zb3J0aWFcXG5jb25zb3J0aXVtL01cXG5jb25zcGVjdHVzL01TXFxuY29uc3BpY3VvdXMvSVBZXFxuY29uc3BpY3VvdXNuZXNzL0lNXFxuY29uc3BpcmFjeS9TTVxcbmNvbnNwaXJhdG9yL01TXFxuY29uc3BpcmF0b3JpYWwvWVxcbmNvbnNwaXJlL0dEXFxuY29uc3RhYmxlL1NNXFxuY29uc3RhYnVsYXJ5L1NNXFxuY29uc3RhbmN5L0lNXFxuY29uc3RhbnQvTVlTXFxuY29uc3RlbGxhdGlvbi9TTVxcbmNvbnN0ZXJuYXRpb24vTVxcbmNvbnN0aXBhdGUvR05EU1xcbmNvbnN0aXBhdGlvbi9NXFxuY29uc3RpdHVlbmN5L1NNXFxuY29uc3RpdHVlbnQvU01cXG5jb25zdGl0dXRlL0FEU0dOVlxcbmNvbnN0aXR1dGlvbi9BTVxcbmNvbnN0aXR1dGlvbmFsL01ZU1xcbmNvbnN0aXR1dGlvbmFsaXNtXFxuY29uc3RpdHV0aW9uYWxpdHkvVU1cXG5jb25zdGl0dXRpb25zXFxuY29uc3RyYWluZWQvVVxcbmNvbnN0cmFpbnQvU01cXG5jb25zdHJpY3QvR1ZTRFxcbmNvbnN0cmljdGlvbi9TTVxcbmNvbnN0cmljdG9yL1NNXFxuY29uc3RydWFibGVcXG5jb25zdHJ1Y3Qnc1xcbmNvbnN0cnVjdC9DQURWR1NcXG5jb25zdHJ1Y3Rpb24vQ0FNU1xcbmNvbnN0cnVjdGlvbmFsXFxuY29uc3RydWN0aW9uaXN0J3NcXG5jb25zdHJ1Y3Rpb25pc3QvQ1NcXG5jb25zdHJ1Y3RpdmUvWVBcXG5jb25zdHJ1Y3RpdmVuZXNzL01cXG5jb25zdHJ1Y3Rvci9NU1xcbmNvbnN0cnVlL0dEU1xcbmNvbnN1bC9LU01cXG5jb25zdWxhci9LXFxuY29uc3VsYXRlL1NNXFxuY29uc3Vsc2hpcC9NXFxuY29uc3VsdC9HU0RcXG5jb25zdWx0YW5jeS9TTVxcbmNvbnN1bHRhbnQvTVNcXG5jb25zdWx0YXRpb24vTVNcXG5jb25zdWx0YXRpdmVcXG5jb25zdW1hYmxlL1NNXFxuY29uc3VtZS9CRFJTWkdcXG5jb25zdW1lZC9VXFxuY29uc3VtZXIvTVxcbmNvbnN1bWVyaXNtL01cXG5jb25zdW1lcmlzdC9NU1xcbmNvbnN1bW1hdGUvWUdOWERTXFxuY29uc3VtbWF0ZWQvVVxcbmNvbnN1bXB0aW9uL01cXG5jb25zdW1wdGl2ZS9TTVxcbmNvbnRcXG5jb250YWN0L0FTREdcXG5jb250YWN0YWJsZVxcbmNvbnRhY3RsZXNzXFxuY29udGFnaW9uL01TXFxuY29udGFnaW91cy9QWVxcbmNvbnRhZ2lvdXNuZXNzL01cXG5jb250YWluL1NCTERSWkdcXG5jb250YWluZXIvTVxcbmNvbnRhaW5lcml6YXRpb24vTVxcbmNvbnRhaW5lcml6ZS9EU0dcXG5jb250YWlubWVudC9NXFxuY29udGFtaW5hbnQvU01cXG5jb250YW1pbmF0ZS9BQ0RTR1xcbmNvbnRhbWluYXRlZC9VXFxuY29udGFtaW5hdGlvbi9DTVxcbmNvbnRhbWluYXRvci9TTVxcbmNvbnRkXFxuY29udGVtbi9TREdcXG5jb250ZW1wbGF0ZS9EU0dOVlxcbmNvbnRlbXBsYXRpb24vTVxcbmNvbnRlbXBsYXRpdmUvU01ZXFxuY29udGVtcG9yYW5laXR5L01cXG5jb250ZW1wb3JhbmVvdXMvWVxcbmNvbnRlbXB0L01cXG5jb250ZW1wdGlibGVcXG5jb250ZW1wdGlibHlcXG5jb250ZW1wdHVvdXMvWVBcXG5jb250ZW1wdHVvdXNuZXNzL01cXG5jb250ZW5kZXIvTVNcXG5jb250ZW50L0VTTE1ER1xcbmNvbnRlbnRlZC9FWVxcbmNvbnRlbnRlZG5lc3MvTVxcbmNvbnRlbnRpb24vU01cXG5jb250ZW50aW91cy9ZUFxcbmNvbnRlbnRpb3VzbmVzcy9NXFxuY29udGVudGx5XFxuY29udGVudG1lbnQvRU1cXG5jb250ZXJtaW5vdXMvWVxcbmNvbnRlc3RhYmxlL0lcXG5jb250ZXN0YW50L01TXFxuY29udGVzdGVkL1VcXG5jb250ZXh0dWFsaXphdGlvblxcbmNvbnRleHR1YWxpemUvRFNHXFxuY29udGlndWl0eS9NXFxuY29udGlndW91cy9ZXFxuY29udGluZW5jZS9JTVxcbmNvbnRpbmVudC9TTVxcbmNvbnRpbmVudGFsL1NNXFxuY29udGluZ2VuY3kvU01cXG5jb250aW5nZW50L1NNWVxcbmNvbnRpbnVhXFxuY29udGludWFsL1lcXG5jb250aW51YW5jZS9FTVNcXG5jb250aW51YXRpb24vRU1TXFxuY29udGludWUvRUdEU1xcbmNvbnRpbnVpdHkvRVNNXFxuY29udGludW91cy9FWVxcbmNvbnRpbnV1bS9NXFxuY29udG9ydC9HRFxcbmNvbnRvcnRpb24vTVNcXG5jb250b3J0aW9uaXN0L1NNXFxuY29udHJhXFxuY29udHJhYmFuZC9NXFxuY29udHJhYmFzc29vbi9TXFxuY29udHJhY2VwdGlvbi9NXFxuY29udHJhY2VwdGl2ZS9TTVxcbmNvbnRyYWN0L01ER1xcbmNvbnRyYWN0aWJsZVxcbmNvbnRyYWN0aWxlXFxuY29udHJhY3RpbGl0eVxcbmNvbnRyYWN0aW9uL1NcXG5jb250cmFjdHVhbC9ZXFxuY29udHJhZGljdC9TREdcXG5jb250cmFkaWN0aW9uL1NNXFxuY29udHJhZGljdG9yeVxcbmNvbnRyYWRpc3RpbmN0aW9uL01TXFxuY29udHJhZmxvdy9TXFxuY29udHJhaWwvTVNcXG5jb250cmFpbmRpY2F0ZS9HTlhEU1xcbmNvbnRyYWluZGljYXRpb24vTVxcbmNvbnRyYWx0by9TTVxcbmNvbnRyYXB0aW9uL1NNXFxuY29udHJhcHVudGFsL1lcXG5jb250cmFyaWFuL1NNXFxuY29udHJhcmlhbmlzbVxcbmNvbnRyYXJpZXR5L01cXG5jb250cmFyaWx5XFxuY29udHJhcmluZXNzL01cXG5jb250cmFyaXdpc2VcXG5jb250cmFyeS9QU01cXG5jb250cmFzdC9NREdTXFxuY29udHJhdmVuZS9HRFNcXG5jb250cmF2ZW50aW9uL1NNXFxuY29udHJldGVtcHMvTVxcbmNvbnRyaWJ1dGUvWEdORFxcbmNvbnRyaWJ1dGlvbi9NXFxuY29udHJpYnV0b3IvTVNcXG5jb250cmlidXRvcnlcXG5jb250cml0aW9uL01cXG5jb250cml2YW5jZS9NU1xcbmNvbnRyaXZlL1pHRFJTXFxuY29udHJpdmVyL01cXG5jb250cm9sJ3NcXG5jb250cm9sL0NTXFxuY29udHJvbGxhYmxlL1VcXG5jb250cm9sbGVkL1VDXFxuY29udHJvbGxlci9NU1xcbmNvbnRyb2xsaW5nL0NcXG5jb250cm92ZXJzaWFsL1lcXG5jb250cm92ZXJzeS9TTVxcbmNvbnRyb3ZlcnQvRFNHXFxuY29udHJvdmVydGlibGUvSVxcbmNvbnR1bWFjaW91cy9ZXFxuY29udHVtYWN5L01cXG5jb250dW1lbGlvdXNcXG5jb250dW1lbHkvU01cXG5jb250dXNlL1hEU0dOXFxuY29udHVzaW9uL01cXG5jb251bmRydW0vU01cXG5jb251cmJhdGlvbi9NU1xcbmNvbnZhbGVzY2UvRFNHXFxuY29udmFsZXNjZW5jZS9NU1xcbmNvbnZhbGVzY2VudC9TTVxcbmNvbnZlY3Rpb24vTVxcbmNvbnZlY3Rpb25hbFxcbmNvbnZlY3RpdmVcXG5jb252ZWN0b3IvU1xcbmNvbnZlbmUvQURTR1xcbmNvbnZlbmVyL01TXFxuY29udmVuaWVuY2UvSU1TXFxuY29udmVuaWVudC9JWVxcbmNvbnZlbnQvU01cXG5jb252ZW50aWNsZS9NU1xcbmNvbnZlbnRpb24vU01cXG5jb252ZW50aW9uYWwvVVlcXG5jb252ZW50aW9uYWxpdHkvVU1cXG5jb252ZW50aW9uYWxpemUvR0RTXFxuY29udmVudGlvbmVlci9TXFxuY29udmVyZ2VuY2UvTVNcXG5jb252ZXJnZW50XFxuY29udmVyc2FudFxcbmNvbnZlcnNhdGlvbi9NU1xcbmNvbnZlcnNhdGlvbmFsL1lcXG5jb252ZXJzYXRpb25hbGlzdC9TTVxcbmNvbnZlcnNlL1lcXG5jb252ZXJ0J3NcXG5jb252ZXJ0L0FHU0RcXG5jb252ZXJ0ZWQvVVxcbmNvbnZlcnRlci9TTVxcbmNvbnZlcnRpYmlsaXR5L01cXG5jb252ZXJ0aWJsZS9TTVxcbmNvbnZleC9ZXFxuY29udmV4aXR5L01cXG5jb252ZXkvU0JER1xcbmNvbnZleWFuY2UvTUdTXFxuY29udmV5b3IvTVNcXG5jb252aWN0L0dTTURcXG5jb252aWN0aW9uL01TXFxuY29udmluY2UvR0RTXFxuY29udmluY2VkL1VcXG5jb252aW5jaW5nL1VZXFxuY29udml2aWFsL1lcXG5jb252aXZpYWxpdHkvTVxcbmNvbnZva2UvRFNHXFxuY29udm9sdXRlZFxcbmNvbnZvbHV0aW9uL01TXFxuY29udm95L1NNREdcXG5jb252dWxzZS9HTlZYRFNcXG5jb252dWxzaW9uL01cXG5jb252dWxzaXZlL1lcXG5jb255L01cXG5jb28vR1NNRFxcbmNvb2snc1xcbmNvb2svQURHU1xcbmNvb2tib29rL01TXFxuY29va2VkL1VcXG5jb29rZXIvU01cXG5jb29rZXJ5L1NNXFxuY29va2hvdXNlL1NcXG5jb29raWUvU01cXG5jb29raW5nL01cXG5jb29rb3V0L1NNXFxuY29va3dhcmUvU01cXG5jb29sL01EUllaVEdQU1xcbmNvb2xhbnQvU01cXG5jb29sZXIvTVxcbmNvb2xpZS9TTVxcbmNvb2xuZXNzL01cXG5jb29uL01TIVxcbmNvb25za2luL01TXFxuY29vcC9NRFJaR1NcXG5jb29wZXIvTURHXFxuY29vcGVyYWdlL01cXG5jb29wZXJhdGUvRFNHTlZcXG5jb29wZXJhdGlvbi9NXFxuY29vcGVyYXRpdmUvUE1ZU1xcbmNvb3BlcmF0aXZlbmVzcy9NXFxuY29vcGVyYXRvci9TTVxcbmNvb3JkaW5hdGUvRFNNWUdOXFxuY29vcmRpbmF0ZWQvVVxcbmNvb3JkaW5hdGlvbi9NXFxuY29vcmRpbmF0b3IvTVNcXG5jb290L01TXFxuY29vdGllL1NNXFxuY29wL0dKU01EXFxuY29wYWNldGljXFxuY29wYXkvTVxcbmNvcGUvTVNcXG5jb3BpZXIvU01cXG5jb3BpbG90L1NNXFxuY29waW5nL01cXG5jb3Bpb3VzL1BZXFxuY29waW91c25lc3MvTVxcbmNvcHBlZFxcbmNvcHBlci9TTVxcbmNvcHBlcmhlYWQvU01cXG5jb3BwZXJwbGF0ZS9NXFxuY29wcGVyeVxcbmNvcHBpbmdcXG5jb3ByYS9NXFxuY29wc2UvU01cXG5jb3B0ZXIvU01cXG5jb3B1bGEvU01cXG5jb3B1bGF0ZS9HTlZEU1xcbmNvcHVsYXRpb24vTVxcbmNvcHVsYXRpdmUvU01cXG5jb3B5J3NcXG5jb3B5L0FEU0dcXG5jb3B5Ym9vay9TTVxcbmNvcHljYXQvTVNcXG5jb3B5Y2F0dGVkXFxuY29weWNhdHRpbmdcXG5jb3B5aXN0L01TXFxuY29weWxlZnRcXG5jb3B5cmlnaHQvR1NNRFxcbmNvcHl3cml0ZXIvTVNcXG5jb3F1ZXRyeS9TTVxcbmNvcXVldHRlL0RTTUdcXG5jb3F1ZXR0aXNoL1lcXG5jb3JcXG5jb3JhY2xlL1NNXFxuY29yYWwvU01cXG5jb3JiZWwvU01cXG5jb3JkL0VBU0dETVxcbmNvcmRhZ2UvTVxcbmNvcmRpYWwvU01ZXFxuY29yZGlhbGl0eS9NXFxuY29yZGlsbGVyYS9NU1xcbmNvcmRpdGUvTVxcbmNvcmRsZXNzXFxuY29yZG9uL1NNREdcXG5jb3Jkb3Zhbi9NXFxuY29yZHVyb3kvTVNcXG5jb3JkdXJveXMvTVxcbmNvcmUvTVpHRFJTXFxuY29yZWxpZ2lvbmlzdC9TXFxuY29yZXIvTVxcbmNvcmVzcG9uZGVudC9NU1xcbmNvcmdpL1NNXFxuY29yaWFuZGVyL01cXG5jb3JrJ3NcXG5jb3JrL1VER1NcXG5jb3JrYWdlXFxuY29ya2VyL1NNXFxuY29ya3NjcmV3L1NNREdcXG5jb3JtL01TXFxuY29ybW9yYW50L1NNXFxuY29ybi9NRFJaR1NcXG5jb3JuYmFsbC9NU1xcbmNvcm5icmVhZC9NXFxuY29ybmNvYi9NU1xcbmNvcm5jcmFrZS9TXFxuY29ybmVhL1NNXFxuY29ybmVhbFxcbmNvcm5lci9HTURcXG5jb3JuZXJzdG9uZS9TTVxcbmNvcm5ldC9TTVxcbmNvcm5maWVsZC9TXFxuY29ybmZsYWtlcy9NXFxuY29ybmZsb3VyXFxuY29ybmZsb3dlci9TTVxcbmNvcm5pY2UvTVNcXG5jb3JuaWx5XFxuY29ybmluZXNzL01cXG5jb3JubWVhbC9NXFxuY29ybnJvdy9NREdTXFxuY29ybnN0YWxrL1NNXFxuY29ybnN0YXJjaC9NXFxuY29ybnVjb3BpYS9NU1xcbmNvcm55L1BSVFxcbmNvcm9sbGEvTVNcXG5jb3JvbGxhcnkvU01cXG5jb3JvbmEvU01cXG5jb3JvbmFsL01TXFxuY29yb25hcnkvU01cXG5jb3JvbmF0aW9uL1NNXFxuY29yb25hdmlydXMvTVNcXG5jb3JvbmVyL01TXFxuY29yb25ldC9NU1xcbmNvcnBcXG5jb3Jwb3JhXFxuY29ycG9yYWwvU01cXG5jb3Jwb3JhdGUvWFlOXFxuY29ycG9yYXRpb24vSU1cXG5jb3Jwb3JhdGlzbVxcbmNvcnBvcmVhbC9ZXFxuY29ycG9yZWFsaXR5L01cXG5jb3Jwcy9NU1xcbmNvcnBzZS9NXFxuY29ycHNtYW4vTVxcbmNvcnBzbWVuXFxuY29ycHVsZW5jZS9NXFxuY29ycHVsZW50XFxuY29ycHVzL01cXG5jb3JwdXNjbGUvTVNcXG5jb3JwdXNjdWxhclxcbmNvcnJcXG5jb3JyYWwvU01cXG5jb3JyYWxsZWRcXG5jb3JyYWxsaW5nXFxuY29ycmVjdC9EUllUR1ZTQlBcXG5jb3JyZWN0ZWQvVVxcbmNvcnJlY3Rpb24vU01cXG5jb3JyZWN0aW9uYWxcXG5jb3JyZWN0aXZlL1NNXFxuY29ycmVjdG5lc3MvSU1cXG5jb3JyZWN0b3JcXG5jb3JyZWxhdGUvWERTTUdOVlxcbmNvcnJlbGF0ZWQvVVxcbmNvcnJlbGF0aW9uL01cXG5jb3JyZWxhdGlvbmFsXFxuY29ycmVsYXRpdmUvTVNcXG5jb3JyZXNwb25kL1NER1xcbmNvcnJlc3BvbmRlbmNlL1NNXFxuY29ycmVzcG9uZGVudC9TTVxcbmNvcnJlc3BvbmRpbmcvWVxcbmNvcnJpZG9yL1NNXFxuY29ycmllL1NcXG5jb3Jyb2JvcmF0ZS9HTlZEU1hcXG5jb3Jyb2JvcmF0ZWQvVVxcbmNvcnJvYm9yYXRpb24vTVxcbmNvcnJvYm9yYXRvci9TTVxcbmNvcnJvYm9yYXRvcnlcXG5jb3Jyb2RlL0dEU1xcbmNvcnJvc2lvbi9NXFxuY29ycm9zaXZlL1NNWVxcbmNvcnJ1Z2F0ZS9HTlhEU1xcbmNvcnJ1Z2F0aW9uL01cXG5jb3JydXB0L0RSWVBTVEdcXG5jb3JydXB0aWJpbGl0eS9JTVxcbmNvcnJ1cHRpYmxlL0lcXG5jb3JydXB0aW9uL01TXFxuY29ycnVwdG5lc3MvTVxcbmNvcnNhZ2UvTVNcXG5jb3JzYWlyL01TXFxuY29yc2V0L1NHTURcXG5jb3J0ZWdlL01TXFxuY29ydGV4L01cXG5jb3J0aWNhbFxcbmNvcnRpY2VzXFxuY29ydGlzb2xcXG5jb3J0aXNvbmUvTVxcbmNvcnVuZHVtL01cXG5jb3J1c2NhdGUvR05EU1xcbmNvcnVzY2F0aW9uL01cXG5jb3J2ZXR0ZS9TTVxcbmNvcy9NXFxuY29zaC9EU0dcXG5jb3NpZ24vWkdTRFJcXG5jb3NpZ25hdG9yeS9TTVxcbmNvc2lnbmVyL01cXG5jb3NpbmUvU01cXG5jb3NtZXRpYy9TTVxcbmNvc21ldGljYWxseVxcbmNvc21ldGljaWFuL01TXFxuY29zbWV0b2xvZ2lzdC9NU1xcbmNvc21ldG9sb2d5L01cXG5jb3NtaWNcXG5jb3NtaWNhbGx5XFxuY29zbW9nb25pc3QvU01cXG5jb3Ntb2dvbnkvU01cXG5jb3Ntb2xvZ2ljYWxcXG5jb3Ntb2xvZ2lzdC9TTVxcbmNvc21vbG9neS9TTVxcbmNvc21vbmF1dC9TTVxcbmNvc21vcG9saXRhbi9NU1xcbmNvc21vcG9saXRhbmlzbS9NXFxuY29zbW9zL01TXFxuY29zcGxheVxcbmNvc3BvbnNvci9HU01EXFxuY29zc2V0L1NHRFxcbmNvc3NldHRlZFxcbmNvc3NldHRpbmdcXG5jb3N0L01EWUdTSlxcbmNvc3Rhci9TTVxcbmNvc3RhcnJlZFxcbmNvc3RhcnJpbmdcXG5jb3N0bGluZXNzL01cXG5jb3N0bHkvUFRSXFxuY29zdHVtZS9NWkdEUlNcXG5jb3N0dW1lci9NXFxuY29zdHVtaWVyL1NcXG5jb3QvU01cXG5jb3RhbmdlbnQvTVNcXG5jb3RlL01TXFxuY290ZXJpZS9NU1xcbmNvdGVybWlub3VzXFxuY290aWxsaW9uL1NNXFxuY290dGFnZS9NWkdSU1xcbmNvdHRhZ2VyL01cXG5jb3R0YXIvU01cXG5jb3R0ZXIvU01cXG5jb3R0b24vU0dNRFxcbmNvdHRvbm1vdXRoL01cXG5jb3R0b25tb3V0aHNcXG5jb3R0b25zZWVkL01TXFxuY290dG9udGFpbC9NU1xcbmNvdHRvbndvb2QvU01cXG5jb3R0b255XFxuY290eWxlZG9uL01TXFxuY291Y2gvTURTR1xcbmNvdWNoZXR0ZS9TXFxuY291Z2FyL1NNXFxuY291Z2gvTURHXFxuY291Z2hzXFxuY291bGRcXG5jb3VsZCd2ZVxcbmNvdWxkbid0XFxuY291bGVlL1NNXFxuY291bGlzXFxuY291bG9tYi9NU1xcbmNvdW5jaWwvTVNcXG5jb3VuY2lsbWFuL01cXG5jb3VuY2lsbWVuXFxuY291bmNpbG9yL01TXFxuY291bmNpbHBlcnNvbi9TTVxcbmNvdW5jaWx3b21hbi9NXFxuY291bmNpbHdvbWVuXFxuY291bnNlbC9KTURHU1xcbmNvdW5zZWxvci9NU1xcbmNvdW50L0VBU01ER1xcbmNvdW50YWJsZS9VXFxuY291bnRhYmx5XFxuY291bnRkb3duL01TXFxuY291bnRlZC9VXFxuY291bnRlbmFuY2Unc1xcbmNvdW50ZW5hbmNlL0VHRFNcXG5jb3VudGVyL0VNU1xcbmNvdW50ZXJhY3QvU0dWRFxcbmNvdW50ZXJhY3Rpb24vTVNcXG5jb3VudGVyYXJndW1lbnQvU1xcbmNvdW50ZXJhdHRhY2svR01EU1xcbmNvdW50ZXJiYWxhbmNlL01HRFNcXG5jb3VudGVyYmxhc3QvU1xcbmNvdW50ZXJjbGFpbS9HU01EXFxuY291bnRlcmNsb2Nrd2lzZVxcbmNvdW50ZXJjdWx0dXJlL1NNXFxuY291bnRlcmVkXFxuY291bnRlcmVzcGlvbmFnZS9NXFxuY291bnRlcmV4YW1wbGUvU1xcbmNvdW50ZXJmYWN0dWFsXFxuY291bnRlcmZlaXQvWkdNRFJTXFxuY291bnRlcmZlaXRlci9NXFxuY291bnRlcmZvaWwvTVNcXG5jb3VudGVyaW5nXFxuY291bnRlcmluc3VyZ2VuY3kvU01cXG5jb3VudGVyaW50ZWxsaWdlbmNlL01cXG5jb3VudGVybWFuL01cXG5jb3VudGVybWFuZC9HTURTXFxuY291bnRlcm1lYXN1cmUvU01cXG5jb3VudGVybWVsb2R5L1NcXG5jb3VudGVybWVuXFxuY291bnRlcm1vdmUvU1xcbmNvdW50ZXJvZmZlbnNpdmUvU01cXG5jb3VudGVyb2ZmZXIvU01cXG5jb3VudGVycGFuZS9TTVxcbmNvdW50ZXJwYXJ0L1NNXFxuY291bnRlcnBldGl0aW9uXFxuY291bnRlcnBvaW50L01ER1NcXG5jb3VudGVycG9pc2UvTUdEU1xcbmNvdW50ZXJwcm9kdWN0aXZlXFxuY291bnRlcnJldm9sdXRpb24vU01cXG5jb3VudGVycmV2b2x1dGlvbmFyeS9TTVxcbmNvdW50ZXJzaWduL0dTTURcXG5jb3VudGVyc2lnbmF0dXJlL01TXFxuY291bnRlcnNpbmsvR1NNXFxuY291bnRlcnNweS9TTVxcbmNvdW50ZXJzdHJva2UvU01cXG5jb3VudGVyc3Vua1xcbmNvdW50ZXJ0ZW5vci9NU1xcbmNvdW50ZXJ2YWlsL0dTRFxcbmNvdW50ZXJ3ZWlnaHQvTVNcXG5jb3VudGVzcy9NU1xcbmNvdW50bGVzc1xcbmNvdW50cmlmaWVkXFxuY291bnRyeS9TTVxcbmNvdW50cnltYW4vTVxcbmNvdW50cnltZW5cXG5jb3VudHJ5c2lkZS9NU1xcbmNvdW50cnl3aWRlXFxuY291bnRyeXdvbWFuL01cXG5jb3VudHJ5d29tZW5cXG5jb3VudHkvU01cXG5jb3VudHl3aWRlXFxuY291cCdzXFxuY291cC9BU1xcbmNvdXBlL1NNXFxuY291cGxlJ3NcXG5jb3VwbGUvVUNHU0RcXG5jb3VwbGV0L01TXFxuY291cGxpbmcvU01cXG5jb3Vwb24vU01cXG5jb3VyYWdlL01cXG5jb3VyYWdlb3VzL1lQXFxuY291cmFnZW91c25lc3MvTVxcbmNvdXJnZXR0ZS9TXFxuY291cmllci9NRFNHXFxuY291cnNlL0VER01TXFxuY291cnNlYm9vay9TXFxuY291cnNlci9NU1xcbmNvdXJzZXdvcmtcXG5jb3VydC9TTURZR1xcbmNvdXJ0ZW91cy9FWVxcbmNvdXJ0ZW91c25lc3MvTVxcbmNvdXJ0ZXNhbi9TTVxcbmNvdXJ0ZXN5L0VTTVxcbmNvdXJ0aG91c2UvTVNcXG5jb3VydGllci9TTVxcbmNvdXJ0bGluZXNzL01cXG5jb3VydGx5L1BSVFxcbmNvdXJ0cm9vbS9NU1xcbmNvdXJ0c2hpcC9NU1xcbmNvdXJ0eWFyZC9NU1xcbmNvdXNjb3VzL01cXG5jb3VzaW4vU01cXG5jb3V0dXJlL01cXG5jb3V0dXJpZXIvTVNcXG5jb3ZhbGVudFxcbmNvdmFyaWFuY2VcXG5jb3ZhcmlhbnRcXG5jb3ZlL01TXFxuY292ZW4vU01cXG5jb3ZlbmFudC9NRFNHXFxuY292ZXInc1xcbmNvdmVyL0FFVUdEU1xcbmNvdmVyYWdlL01cXG5jb3ZlcmFsbC9NU1xcbmNvdmVyaW5nJ3NcXG5jb3ZlcmluZ3NcXG5jb3ZlcmxldC9NU1xcbmNvdmVydC9TUE1ZXFxuY292ZXJ0bmVzcy9NXFxuY292ZXQvU0RHXFxuY292ZXRvdXMvWVBcXG5jb3ZldG91c25lc3MvTVxcbmNvdmV5L1NNXFxuY293L1pHU01EUlxcbmNvd2FyZC9TTVlcXG5jb3dhcmRpY2UvTVxcbmNvd2FyZGxpbmVzcy9NXFxuY293YmVsbC9NU1xcbmNvd2JpcmQvTVNcXG5jb3dib3kvU01cXG5jb3djYXRjaGVyL01TXFxuY293ZXIvREdcXG5jb3dnaXJsL01TXFxuY293aGFuZC9NU1xcbmNvd2hlcmQvTVNcXG5jb3doaWRlL01TXFxuY293bC9NR1NKXFxuY293bGljay9NU1xcbmNvd2xpbmcvTVxcbmNvd21hbi9NXFxuY293bWVuXFxuY293b3JrZXIvTVNcXG5jb3dwYXQvU1xcbmNvd3Bva2UvTVNcXG5jb3dwb3gvTVxcbmNvd3B1bmNoZXIvU01cXG5jb3dyaWUvU01cXG5jb3dzaGVkL1NcXG5jb3dzbGlwL1NNXFxuY294L0dEU1xcbmNveGNvbWIvTVNcXG5jb3hzd2Fpbi9NU1xcbmNveS9UUFJZXFxuY295bmVzcy9NXFxuY295b3RlL1NNXFxuY295cHUvU01cXG5jb3plbi9TREdcXG5jb3plbmFnZS9NXFxuY296aWx5XFxuY296aW5lc3MvTVxcbmNvenkvUlNNVFBcXG5jcGRcXG5jcGxcXG5jcHNcXG5jcmFiL01TXFxuY3JhYmJlZFxcbmNyYWJiZXIvU01cXG5jcmFiYmlseVxcbmNyYWJiaW5lc3MvTVxcbmNyYWJiaW5nXFxuY3JhYmJ5L1BSVFxcbmNyYWJncmFzcy9NXFxuY3JhYmxpa2VcXG5jcmFid2lzZVxcbmNyYWNrL1NNRFJZWkdKXFxuY3JhY2tkb3duL01TXFxuY3JhY2tlci9NXFxuY3JhY2tlcmphY2svTVNcXG5jcmFja2hlYWQvTVNcXG5jcmFja2xlL0RTSk1HXFxuY3JhY2tsaW5nL01cXG5jcmFja3BvdC9NU1xcbmNyYWNrdXAvU01cXG5jcmFkbGUvRFNNR1xcbmNyYWZ0L1NNREdcXG5jcmFmdGlseVxcbmNyYWZ0aW5lc3MvTVxcbmNyYWZ0c21hbi9NXFxuY3JhZnRzbWFuc2hpcC9NXFxuY3JhZnRzbWVuXFxuY3JhZnRzcGVvcGxlXFxuY3JhZnRzd29tYW4vTVxcbmNyYWZ0c3dvbWVuXFxuY3JhZnR5L1JUUFxcbmNyYWcvTVNcXG5jcmFnZ2luZXNzL01cXG5jcmFnZ3kvUlBUXFxuY3JhbS9TXFxuY3JhbW1lZFxcbmNyYW1tZXIvU1xcbmNyYW1taW5nXFxuY3JhbXAvU01ER1xcbmNyYW1waW5nL01cXG5jcmFtcG9uL1NNXFxuY3JhbmJlcnJ5L1NNXFxuY3JhbmUvRFNNR1xcbmNyYW5pYWxcXG5jcmFuaXVtL1NNXFxuY3JhbmsvU01ER1xcbmNyYW5rY2FzZS9TTVxcbmNyYW5raWx5XFxuY3JhbmtpbmVzcy9NXFxuY3JhbmtzaGFmdC9NU1xcbmNyYW5reS9QUlRcXG5jcmFubnkvRFNNXFxuY3JhcC9NU1xcbmNyYXBlL1NNXFxuY3JhcHBlZFxcbmNyYXBwZXIvU1xcbmNyYXBwaWUvUlNNVFxcbmNyYXBwaW5nXFxuY3JhcHB5XFxuY3JhcHMvTVxcbmNyYXBzaG9vdGVyL01TXFxuY3Jhc2gvTURTR1xcbmNyYXNzL1JZVFBcXG5jcmFzc25lc3MvTVxcbmNyYXRlL0RSU01aR1xcbmNyYXRlci9NREdcXG5jcmF2YXQvU01cXG5jcmF2ZS9EU0dKXFxuY3JhdmVuL1NNWVBcXG5jcmF2ZW5uZXNzL01cXG5jcmF2aW5nL01cXG5jcmF3L01TXFxuY3Jhd2RhZC9TTVxcbmNyYXdsL1NNRFJaR1xcbmNyYXdsZXIvTVxcbmNyYXdsc3BhY2UvU01cXG5jcmF3bHkvVFJTTVxcbmNyYXkvU1xcbmNyYXlmaXNoL01TXFxuY3JheW9sYS9TXFxuY3JheW9uL0dTTURcXG5jcmF6ZS9EU01HXFxuY3JhemlseVxcbmNyYXppbmVzcy9NXFxuY3JhenkvUFJTTVRcXG5jcmVhay9TTURHXFxuY3JlYWtpbHlcXG5jcmVha2luZXNzL01cXG5jcmVha3kvUlBUXFxuY3JlYW0vU01EUlpHXFxuY3JlYW1lci9NXFxuY3JlYW1lcnkvU01cXG5jcmVhbWlseVxcbmNyZWFtaW5lc3MvTVxcbmNyZWFteS9SUFRcXG5jcmVhc2UvSUNHTVNEXFxuY3JlYXRlL0tBRFNHTlZcXG5jcmVhdGlvbidzL0tcXG5jcmVhdGlvbi9BU01cXG5jcmVhdGlvbmlzbS9TTVxcbmNyZWF0aW9uaXN0L1NNXFxuY3JlYXRpdmUvU01ZUFxcbmNyZWF0aXZlbmVzcy9NXFxuY3JlYXRpdml0eS9NXFxuY3JlYXRvci9NU1xcbmNyZWF0dXJlL1NNXFxuY3JlY2hlL1NNXFxuY3JlZFxcbmNyZWRlbmNlL01cXG5jcmVkZW50aWFsL1NHTURcXG5jcmVkZW56YS9TTVxcbmNyZWRpYmlsaXR5L0lNXFxuY3JlZGlibGUvSVxcbmNyZWRpYmx5L0lcXG5jcmVkaXQvRUdTQk1EXFxuY3JlZGl0YWJseS9FXFxuY3JlZGl0b3IvU01cXG5jcmVkaXR3b3J0aHkvUFxcbmNyZWRvL1NNXFxuY3JlZHVsaXR5L0lNXFxuY3JlZHVsb3VzL0lZXFxuY3JlZHVsb3VzbmVzcy9NXFxuY3JlZWQvU01cXG5jcmVlay9TTVxcbmNyZWVsL1NNXFxuY3JlZXAvU01SWkdcXG5jcmVlcGVyL01cXG5jcmVlcGlseVxcbmNyZWVwaW5lc3MvTVxcbmNyZWVweS9UUFJcXG5jcmVtYWlucy9NXFxuY3JlbWF0ZS9HTkRTWFxcbmNyZW1hdGlvbi9NXFxuY3JlbWF0b3JpYVxcbmNyZW1hdG9yaXVtL01TXFxuY3JlbWF0b3J5L1NNXFxuY3JlbWUvU01cXG5jcmVuZWxhdGUvWEdORFNcXG5jcmVuZWxhdGlvbi9NXFxuY3Jlb2xlL1NNXFxuY3Jlb3NvdGUvTUdEU1xcbmNyZXBlL1NNXFxuY3JlcHRcXG5jcmVwdXNjdWxhclxcbmNyZXNjZW5kby9DU01cXG5jcmVzY2VudC9NU1xcbmNyZXNzL01cXG5jcmVzdC9TTURHXFxuY3Jlc3RmYWxsZW5cXG5jcmVzdGxlc3NcXG5jcmV0YWNlb3VzXFxuY3JldGluL1NNXFxuY3JldGluaXNtL01cXG5jcmV0aW5vdXNcXG5jcmV0b25uZS9NXFxuY3JldmFzc2UvU01cXG5jcmV2aWNlL01TXFxuY3Jldy9NREdTXFxuY3Jld2VsL01cXG5jcmV3ZWx3b3JrL01cXG5jcmV3bWFuL01cXG5jcmV3bWVuXFxuY3JpYi9NU1xcbmNyaWJiYWdlL01cXG5jcmliYmVkXFxuY3JpYmJlci9NU1xcbmNyaWJiaW5nXFxuY3JpY2svU01ER1xcbmNyaWNrZXQvTVJTWkdcXG5jcmlja2V0ZXIvTVxcbmNyaWVyL01cXG5jcmlrZXlcXG5jcmltZS9TTVxcbmNyaW1pbmFsL01ZU1xcbmNyaW1pbmFsaXR5L01cXG5jcmltaW5hbGl6ZS9DR0RTXFxuY3JpbWlub2xvZ2lzdC9NU1xcbmNyaW1pbm9sb2d5L01cXG5jcmltcC9TTURHXFxuY3JpbXNvbi9TTURHXFxuY3JpbmdlL0RTTUdcXG5jcmlua2xlL0RTTUdcXG5jcmlua2x5L1JUXFxuY3Jpbm9saW5lL1NNXFxuY3JpcGVzXFxuY3JpcHBsZS9EUlNNWkdcXG5jcmlwcGxlci9NXFxuY3JpcHBsZXdhcmVcXG5jcmlwcGxpbmcvWVxcbmNyaXNlc1xcbmNyaXNpcy9NXFxuY3Jpc3AvU01EUllUR1BcXG5jcmlzcGJyZWFkL1NcXG5jcmlzcGluZXNzL01cXG5jcmlzcG5lc3MvTVxcbmNyaXNweS9QUlRcXG5jcmlzc2Nyb3NzL0dNRFNcXG5jcml0ZXJpYVxcbmNyaXRlcmlvbi9NXFxuY3JpdGljL1NNXFxuY3JpdGljYWwvVVlcXG5jcml0aWNhbGl0eVxcbmNyaXRpY2lzbS9NU1xcbmNyaXRpY2l6ZS9aR0RSU1xcbmNyaXRpY2l6ZXIvTVxcbmNyaXRpcXVlL01HRFNcXG5jcml0dGVyL1NNXFxuY3JvYWsvU01ER1xcbmNyb2FreS9SVFxcbmNyb2NoZXQvU01EUlpHXFxuY3JvY2hldGVyL01cXG5jcm9jaGV0aW5nL01cXG5jcm9jay9TTURcXG5jcm9ja2VyeS9NXFxuY3JvY29kaWxlL1NNXFxuY3JvY3VzL01TXFxuY3JvZnQvU1JaR1xcbmNyb2lzc2FudC9NU1xcbmNyb25lL1NNXFxuY3JvbnkvU01cXG5jcm9ueWlzbS9NXFxuY3Jvb2svU01ER1xcbmNyb29rZWQvUFRSWVxcbmNyb29rZWRuZXNzL01cXG5jcm9va25lY2svU01cXG5jcm9vbi9TTURSWkdcXG5jcm9vbmVyL01cXG5jcm9wL01TXFxuY3JvcGxhbmQvU01cXG5jcm9wcGVkXFxuY3JvcHBlci9NU1xcbmNyb3BwaW5nXFxuY3JvcXVldC9NXFxuY3JvcXVldHRlL1NNXFxuY3Jvc2llci9NU1xcbmNyb3NzJ3NcXG5jcm9zcy9BVUdUU0RcXG5jcm9zc2Jhci9TTVxcbmNyb3NzYmVhbS9NU1xcbmNyb3NzYm9uZXMvTVxcbmNyb3NzYm93L1NNXFxuY3Jvc3Nib3dtYW4vTVxcbmNyb3NzYm93bWVuXFxuY3Jvc3NicmVkXFxuY3Jvc3NicmVlZC9TR01cXG5jcm9zc2NoZWNrL1NNREdcXG5jcm9zc2N1cnJlbnQvTVNcXG5jcm9zc2N1dC9TTVxcbmNyb3NzY3V0dGluZ1xcbmNyb3NzZXJcXG5jcm9zc2ZpcmUvTVNcXG5jcm9zc2hhdGNoL0dEU1xcbmNyb3NzaW5nL1NNXFxuY3Jvc3NseVxcbmNyb3NzbmVzcy9NXFxuY3Jvc3NvdmVyL01TXFxuY3Jvc3NwYXRjaC9NU1xcbmNyb3NzcGllY2UvU01cXG5jcm9zc3JvYWQvTVNcXG5jcm9zc3JvYWRzL01cXG5jcm9zc3Rvd25cXG5jcm9zc3dhbGsvTVNcXG5jcm9zc3dpbmQvTVNcXG5jcm9zc3dpc2VcXG5jcm9zc3dvcmQvTVNcXG5jcm90Y2gvTVNcXG5jcm90Y2hldC9TTVxcbmNyb3RjaGV0eVxcbmNyb3VjaC9HTURTXFxuY3JvdXAvTVxcbmNyb3VwaWVyL01cXG5jcm91cHkvWlRSXFxuY3JvdXRvbi9NU1xcbmNyb3cvTURHU1xcbmNyb3diYXIvTVNcXG5jcm93ZC9TTURHXFxuY3Jvd2RlZC9VXFxuY3Jvd2RmdW5kL1NER1xcbmNyb3dmZWV0XFxuY3Jvd2Zvb3QvU01cXG5jcm93bi9TTURHXFxuY3Jvd25lZC9VXFxuY3J1Y2lhbC9ZXFxuY3J1Y2libGUvU01cXG5jcnVjaWZpeC9NU1xcbmNydWNpZml4aW9uL1NNXFxuY3J1Y2lmb3JtL1NNXFxuY3J1Y2lmeS9EU0dcXG5jcnVkL01cXG5jcnVkZHkvVFJcXG5jcnVkZS9STVlUUFxcbmNydWRlbmVzcy9NXFxuY3J1ZGl0ZXMvTVxcbmNydWRpdHkvU01cXG5jcnVlbC9SWVBUXFxuY3J1ZWxuZXNzL01cXG5jcnVlbHR5L1NNXFxuY3J1ZXQvU01cXG5jcnVmdC9TRFxcbmNydWZ0eVxcbmNydWlzZS9EUlNNWkdcXG5jcnVpc2VyL01cXG5jcnVsbGVyL01TXFxuY3J1bWIvU01EWUdcXG5jcnVtYmxlL01HRFNcXG5jcnVtYmxpbmVzcy9NXFxuY3J1bWJseS9UUFJcXG5jcnVtYnkvVFJcXG5jcnVtbWluZXNzL01cXG5jcnVtbXkvUFRSXFxuY3J1bXBldC9NU1xcbmNydW1wbGUvTUdEU1xcbmNydW5jaC9HTURSU1xcbmNydW5jaGluZXNzL01cXG5jcnVuY2h5L1RSUFxcbmNydXBwZXIvTVNcXG5jcnVzYWRlL01aR0RSU1xcbmNydXNhZGVyL01cXG5jcnVzZS9TTVxcbmNydXNoL01EUlNaR1xcbmNydXNoZXIvTVxcbmNydXNoaW5nL1lcXG5jcnVzdC9TTURHXFxuY3J1c3RhY2Vhbi9TTVxcbmNydXN0YWxcXG5jcnVzdGlseVxcbmNydXN0aW5lc3MvTVxcbmNydXN0eS9UUlBcXG5jcnV0Y2gvTVNcXG5jcnV4L01TXFxuY3J5L1pHSkRSU01cXG5jcnliYWJ5L1NNXFxuY3J5b2dlbmljL1NcXG5jcnlvZ2VuaWNzL01cXG5jcnlvbmljc1xcbmNyeW9zdXJnZXJ5L01cXG5jcnlwdC9TTVxcbmNyeXB0YW5hbHlzaXNcXG5jcnlwdGljXFxuY3J5cHRpY2FsbHlcXG5jcnlwdG9jdXJyZW5jeS9TTVxcbmNyeXB0b2dyYW0vU01cXG5jcnlwdG9ncmFwaGVyL1NNXFxuY3J5cHRvZ3JhcGh5L01cXG5jcnlzdGFsL1NNXFxuY3J5c3RhbGxpbmVcXG5jcnlzdGFsbGl6YXRpb24vTVxcbmNyeXN0YWxsaXplL0FEU0dcXG5jcnlzdGFsbG9ncmFwaGljXFxuY3J5c3RhbGxvZ3JhcGh5XFxuY3RcXG5jdG5cXG5jdHJcXG5jdVxcbmN1Yi9aR1NNRFJcXG5jdWJieWhvbGUvTVNcXG5jdWJlL01TXFxuY3ViZXIvTVxcbmN1YmljXFxuY3ViaWNhbFxcbmN1YmljbGUvTVNcXG5jdWJpc20vTVxcbmN1YmlzdC9TTVxcbmN1Yml0L1NNXFxuY3Vib2lkL1NcXG5jdWNrb2xkL01EU0dcXG5jdWNrb2xkcnkvTVxcbmN1Y2tvby9TTVxcbmN1Y3VtYmVyL1NNXFxuY3VkL1NNXFxuY3VkZGxlL0RTTUdcXG5jdWRkbHkvVFJcXG5jdWRnZWwvU0dNREpcXG5jdWUvRFNNR1xcbmN1ZmYvTURHU1xcbmN1aXNpbmUvU01cXG5jdWxpbmFyeVxcbmN1bGwvTURHU1xcbmN1bG1pbmF0ZS9YRFNHTlxcbmN1bG1pbmF0aW9uL01cXG5jdWxvdHRlL1NNXFxuY3VscGFiaWxpdHkvTVxcbmN1bHBhYmxlL0lcXG5jdWxwYWJseVxcbmN1bHByaXQvU01cXG5jdWx0L01TXFxuY3VsdGlzbS9NXFxuY3VsdGlzdC9NU1xcbmN1bHRpdmFibGVcXG5jdWx0aXZhci9TTVxcbmN1bHRpdmF0ZS9CRFNHTlxcbmN1bHRpdmF0ZWQvVVxcbmN1bHRpdmF0aW9uL01cXG5jdWx0aXZhdG9yL01TXFxuY3VsdHVyYWwvWVxcbmN1bHR1cmUvTUdEU1xcbmN1bHR1cmVkL1VcXG5jdWx2ZXJ0L01TXFxuY3VtL1NNXFxuY3VtYmVyL1NER1xcbmN1bWJlcnNvbWUvUFxcbmN1bWJlcnNvbWVuZXNzL01cXG5jdW1icm91c1xcbmN1bWluL01cXG5jdW1tZXJidW5kL01TXFxuY3VtbWluZ1xcbmN1bXVsYXRpdmUvWVxcbmN1bXVsaVxcbmN1bXVsb25pbWJpXFxuY3VtdWxvbmltYnVzL01cXG5jdW11bHVzL01cXG5jdW5laWZvcm0vTVxcbmN1bm5pbGluZ3VzL01cXG5jdW5uaW5nL01SWVRcXG5jdW50L01TIVxcbmN1cC9TTVxcbmN1cGJvYXJkL1NNXFxuY3VwY2FrZS9NU1xcbmN1cGZ1bC9TTVxcbmN1cGlkL1NNXFxuY3VwaWRpdHkvTVxcbmN1cG9sYS9TTURcXG5jdXBwYS9TXFxuY3VwcGVkXFxuY3VwcGluZ1xcbmN1cHJpY1xcbmN1ci9TTVlcXG5jdXJhYmlsaXR5L01cXG5jdXJhY2FvXFxuY3VyYWN5L1NNXFxuY3VyYXJlL01cXG5jdXJhdGUvRFNNR1ZcXG5jdXJhdGl2ZS9NU1xcbmN1cmF0b3IvS01TXFxuY3VyYXRvcmlhbFxcbmN1cmIvTURHU1xcbmN1cmJpbmcvTVxcbmN1cmJzaWRlXFxuY3VyYnN0b25lL1NNXFxuY3VyZC9NU1xcbmN1cmRsZS9EU0dcXG5jdXJlJ3NcXG5jdXJlL0taR0JEUlNcXG5jdXJlZC9VXFxuY3VyZXIvS01cXG5jdXJldHRhZ2UvTVxcbmN1cmZldy9TTVxcbmN1cmlhL01cXG5jdXJpYWVcXG5jdXJpZS9TTVxcbmN1cmlvL1NNXFxuY3VyaW9zaXR5L1NNXFxuY3VyaW91cy9ZUFxcbmN1cmlvdXNuZXNzL01cXG5jdXJpdW0vTVxcbmN1cmwnc1xcbmN1cmwvVURHU1xcbmN1cmxlci9TTVxcbmN1cmxldy9TTVxcbmN1cmxpY3VlL0RTTUdcXG5jdXJsaW5lc3MvTVxcbmN1cmxpbmcvTVxcbmN1cmx5L1JQVFxcbmN1cm11ZGdlb24vTVlTXFxuY3VycmFudC9NU1xcbmN1cnJlbmN5L1NNXFxuY3VycmVudCdzXFxuY3VycmVudC9GQVlcXG5jdXJyZW50c1xcbmN1cnJpY3VsYVxcbmN1cnJpY3VsYXJcXG5jdXJyaWN1bHVtL01cXG5jdXJyeS9EU01HXFxuY3Vycnljb21iL1NHTURcXG5jdXJzZS9EU01HVlxcbmN1cnNlZC9ZXFxuY3Vyc2l2ZSdzXFxuY3Vyc2l2ZS9FQVlcXG5jdXJzb3IvU01cXG5jdXJzb3JpbHlcXG5jdXJzb3JpbmVzcy9NXFxuY3Vyc29yeS9QXFxuY3VydC9SWVRQXFxuY3VydGFpbC9HRFNMXFxuY3VydGFpbG1lbnQvU01cXG5jdXJ0YWluL0dNRFNcXG5jdXJ0bmVzcy9NXFxuY3VydHN5L0dEU01cXG5jdXJ2YWNlb3VzL1BcXG5jdXJ2YWNlb3VzbmVzcy9NXFxuY3VydmF0dXJlL1NNXFxuY3VydmUvRFNNR1xcbmN1cnZ5L1JUXFxuY3VzaGlvbi9NRFNHXFxuY3VzaHkvUlRcXG5jdXNwL01TXFxuY3VzcGlkL1NNXFxuY3VzcGlkb3IvU01cXG5jdXNzJ3NcXG5jdXNzL0ZFR1NEXFxuY3Vzc2VkL1BZXFxuY3VzdGFyZC9NU1xcbmN1c3RvZGlhbFxcbmN1c3RvZGlhbi9NU1xcbmN1c3RvZGlhbnNoaXAvTVxcbmN1c3RvZHkvTVxcbmN1c3RvbS9TWk1SXFxuY3VzdG9tYXJpbHlcXG5jdXN0b21hcnkvVVxcbmN1c3RvbWVyL01cXG5jdXN0b21ob3VzZS9TTVxcbmN1c3RvbWl6YXRpb24vTVxcbmN1c3RvbWl6ZS9EU0dcXG5jdXQvVFNNUlxcbmN1dGFuZW91c1xcbmN1dGF3YXkvTVNcXG5jdXRiYWNrL01TXFxuY3V0ZS9ZUFxcbmN1dGVuZXNzL01cXG5jdXRlc3kvVFJcXG5jdXRleS9TXFxuY3V0aWNsZS9NU1xcbmN1dGllL1NNXFxuY3V0bGFzcy9NU1xcbmN1dGxlci9TTVxcbmN1dGxlcnkvTVxcbmN1dGxldC9TTVxcbmN1dG9mZi9TTVxcbmN1dG91dC9TTVxcbmN1dHRlci9TTVxcbmN1dHRocm9hdC9TTVxcbmN1dHRpbmcvTVlTXFxuY3V0dGxlZmlzaC9NU1xcbmN1dHVwL1NNXFxuY3V0d29ybS9NU1xcbmN3XFxuY3d0XFxuY3lhbi9NXFxuY3lhbmlkZS9NXFxuY3lhbm9iYWN0ZXJpYVxcbmN5YmVyYnVsbHkvU01cXG5jeWJlcmNhZmUvU1xcbmN5YmVybmV0aWMvU1xcbmN5YmVybmV0aWNzL01cXG5jeWJlcnB1bmsvU01cXG5jeWJlcnNleFxcbmN5YmVyc3BhY2UvTVNcXG5jeWJvcmcvU01cXG5jeWNsYW1lbi9NU1xcbmN5Y2xlL0FEU01HXFxuY3ljbGljXFxuY3ljbGljYWwvWVxcbmN5Y2xpc3QvTVNcXG5jeWNsb21ldGVyL01TXFxuY3ljbG9uZS9NU1xcbmN5Y2xvbmljXFxuY3ljbG9wZWRpYS9NU1xcbmN5Y2xvcGVzXFxuY3ljbG9wcy9NXFxuY3ljbG90cm9uL01TXFxuY3lnbmV0L01TXFxuY3lsaW5kZXIvTVNcXG5jeWxpbmRyaWNhbFxcbmN5bWJhbC9NU1xcbmN5bWJhbGlzdC9NU1xcbmN5bmljL1NNXFxuY3luaWNhbC9ZXFxuY3luaWNpc20vTVxcbmN5bm9zdXJlL01TXFxuY3lwcmVzcy9NU1xcbmN5c3QvTVNcXG5jeXN0aWNcXG5jeXN0aXRpc1xcbmN5dG9raW5lc1xcbmN5dG9sb2dpc3QvU01cXG5jeXRvbG9neS9NXFxuY3l0b3BsYXNtL01cXG5jeXRvcGxhc21pY1xcbmN5dG9zaW5lL01cXG5jemFyL01TXFxuY3phcmluYS9TTVxcbmN6YXJpc21cXG5jemFyaXN0L1NNXFxuZCdBcmV6em8vTVxcbmQnRXN0YWluZy9NXFxuZC9OWEdKXFxuZEJcXG5kYWIvU01cXG5kYWJiZWRcXG5kYWJiZXIvTVNcXG5kYWJiaW5nXFxuZGFiYmxlL1pHRFJTXFxuZGFiYmxlci9NXFxuZGFjZS9TTVxcbmRhY2hhL01TXFxuZGFjaHNodW5kL01TXFxuZGFjdHlsL01TXFxuZGFjdHlsaWMvTVNcXG5kYWQvU01cXG5kYWRhaXNtL01cXG5kYWRhaXN0L01TXFxuZGFkZHkvU01cXG5kYWRvL01cXG5kYWRvZXNcXG5kYWVtb24vTVNcXG5kYWVtb25pY1xcbmRhZmZpbmVzcy9NXFxuZGFmZm9kaWwvU01cXG5kYWZmeS9QVFJcXG5kYWZ0L1BUUllcXG5kYWZ0bmVzcy9NXFxuZGFnL1NcXG5kYWdnZXIvTVNcXG5kYWdvL1NcXG5kYWdvZXNcXG5kYWd1ZXJyZW90eXBlL0RTTUdcXG5kYWhsaWEvTVNcXG5kYWlsaW5lc3MvTVxcbmRhaWx5L1BTTVxcbmRhaW50aWx5XFxuZGFpbnRpbmVzcy9NXFxuZGFpbnR5L1JTTVRQXFxuZGFpcXVpcmkvTVNcXG5kYWlyeS9HU01cXG5kYWlyeWluZy9NXFxuZGFpcnltYWlkL01TXFxuZGFpcnltYW4vTVxcbmRhaXJ5bWVuXFxuZGFpcnl3b21hbi9NXFxuZGFpcnl3b21lblxcbmRhaXMvTVNcXG5kYWlzeS9TTVxcbmRhbGUvU01cXG5kYWxsaWFuY2UvTVNcXG5kYWxsaWVyL01cXG5kYWxseS9aR0RSU1xcbmRhbG1hdGlhbi9NU1xcbmRhbS9TTVxcbmRhbWFnZS9NR0RTXFxuZGFtYWdlYWJsZVxcbmRhbWFnZWQvVVxcbmRhbWFnZXMvTVxcbmRhbWFzay9NREdTXFxuZGFtZS9TTVxcbmRhbW1lZFxcbmRhbW1pbmdcXG5kYW1taXRcXG5kYW1uL1NCR01EXFxuZGFtbmFibHlcXG5kYW1uYXRpb24vTVxcbmRhbW5lZC9UXFxuZGFtcC9TUFhaVEdNRE5SWVxcbmRhbXBlbi9aR0RSXFxuZGFtcGVuZXIvTVxcbmRhbXBlci9NXFxuZGFtcG5lc3MvTVxcbmRhbXNlbC9NU1xcbmRhbXNlbGZseS9TTVxcbmRhbXNvbi9NU1xcbmRhbmNlL01aR0RSU1xcbmRhbmNlci9NXFxuZGFuY2luZy9NXFxuZGFuZGVsaW9uL1NNXFxuZGFuZGVyL01cXG5kYW5kaWZ5L0dEU1xcbmRhbmRsZS9HRFNcXG5kYW5kcnVmZi9NXFxuZGFuZHkvVFJTTVxcbmRhbmcvU1pHRFJcXG5kYW5nZXIvTVxcbmRhbmdlcm91cy9ZXFxuZGFuZ2xlL1pHRFJTXFxuZGFuZ2xlci9NXFxuZGFuaXNoL01TXFxuZGFuay9QVFJZXFxuZGFua25lc3MvTVxcbmRhbnNldXNlL01TXFxuZGFwcGVyL1RSXFxuZGFwcGxlL01HRFNcXG5kYXJlL0RSU01aR1xcbmRhcmVkZXZpbC9NU1xcbmRhcmVkZXZpbHJ5L01cXG5kYXJlci9NXFxuZGFyZXNheVxcbmRhcmluZy9NWVxcbmRhcmsvUFhUTU5SWVxcbmRhcmtlbi9aR0RSXFxuZGFya2VuZXIvTVxcbmRhcmtpZS9TXFxuZGFya25lc3MvTVxcbmRhcmtyb29tL01TXFxuZGFybGluZy9NU1xcbmRhcm4vU1pHTURSXFxuZGFybmVkL1RSXFxuZGFybmVyL01cXG5kYXJ0L1NaR01EUlxcbmRhcnRib2FyZC9NU1xcbmRhcnRlci9NXFxuZGFzaC9aR01EUlNcXG5kYXNoYm9hcmQvU01cXG5kYXNoZXIvTVxcbmRhc2hpa2kvTVNcXG5kYXNoaW5nL1lcXG5kYXN0YXJkL01ZU1xcbmRhc3RhcmRsaW5lc3MvTVxcbmRhdGFcXG5kYXRhYmFzZS9TTVxcbmRhdGFzZXQvTVNcXG5kYXRhdHlwZVxcbmRhdGUvRFJTTVpHVlxcbmRhdGVib29rL1NcXG5kYXRlZC9VXFxuZGF0ZWxlc3NcXG5kYXRlbGluZS9NR0RTXFxuZGF0ZXIvTVxcbmRhdGVzZXRcXG5kYXRpdmUvTVNcXG5kYXR1bS9NXFxuZGF1Yi9TWkdNRFJcXG5kYXViZXIvTVxcbmRhdWdodGVyL1NNWVxcbmRhdW50L0dEU1xcbmRhdW50aW5nL1lcXG5kYXVudGxlc3MvWVBcXG5kYXVudGxlc3NuZXNzL01cXG5kYXVwaGluL01TXFxuZGF2ZW5wb3J0L01TXFxuZGF2aXQvTVNcXG5kYXdkbGUvWkdEUlNcXG5kYXdkbGVyL01cXG5kYXduL1NHTURcXG5kYXkvU01cXG5kYXliZWQvTVNcXG5kYXlicmVhay9NXFxuZGF5Y2FyZS9NXFxuZGF5ZHJlYW0vTURSWkdTXFxuZGF5ZHJlYW1lci9NXFxuZGF5bGlnaHQvTVNcXG5kYXlsaWdodHMvTVxcbmRheWxvbmdcXG5kYXl0aW1lL01cXG5kYXplL0RTTUdcXG5kYXplZC9ZXFxuZGF6emxlL01aR0RSU1xcbmRhenpsZXIvTVxcbmRhenpsaW5nL1lcXG5kYlxcbmRibFxcbmRjXFxuZGQvU0RHXFxuZGRlZC9LXFxuZGRpbmcvS1xcbmRlYWNvbi9NU1xcbmRlYWNvbmVzcy9NU1xcbmRlYWQvWFRNTlJZXFxuZGVhZGJlYXQvTVNcXG5kZWFkYm9sdC9TTVxcbmRlYWRlbi9HRFxcbmRlYWRoZWFkL1NER1xcbmRlYWRsaW5lL1NNXFxuZGVhZGxpbmVzcy9NXFxuZGVhZGxvY2svR1NNRFxcbmRlYWRseS9UUFJcXG5kZWFkcGFuL01TXFxuZGVhZHBhbm5lZFxcbmRlYWRwYW5uaW5nXFxuZGVhZHdvb2QvTVxcbmRlYWYvUFhUTlJcXG5kZWFmZW4vR0RcXG5kZWFmZW5pbmcvWVxcbmRlYWZuZXNzL01cXG5kZWFsL1NKWkdNUlxcbmRlYWxlci9NXFxuZGVhbGVyc2hpcC9TTVxcbmRlYWxpbmcvTVxcbmRlYWx0XFxuZGVhbi9NXFxuZGVhbmVyeS9TTVxcbmRlYW5zaGlwL01cXG5kZWFyL1NQVE1SWUhcXG5kZWFyZXN0L1NcXG5kZWFybmVzcy9NXFxuZGVhcnRoL01cXG5kZWFydGhzXFxuZGVhcnkvU01cXG5kZWF0aC9NWVxcbmRlYXRoYmVkL1NNXFxuZGVhdGhibG93L01TXFxuZGVhdGhsZXNzL1lcXG5kZWF0aGxpa2VcXG5kZWF0aHNcXG5kZWF0aHRyYXAvTVNcXG5kZWF0aHdhdGNoL01TXFxuZGVhdmVzXFxuZGViL1NNXFxuZGViYWNsZS9NU1xcbmRlYmFya2F0aW9uL01cXG5kZWJhcm1lbnQvTVxcbmRlYmF0ZS9CTVpSXFxuZGViYXRlci9NXFxuZGViYXRpbmcvTVxcbmRlYmF1Y2gvTURTR1xcbmRlYmF1Y2hlZS9NU1xcbmRlYmF1Y2hlcnkvU01cXG5kZWJlbnR1cmUvTVNcXG5kZWJpbGl0YXRlL0RTR05cXG5kZWJpbGl0YXRpb24vTVxcbmRlYmlsaXR5L1NNXFxuZGViaXQvRFxcbmRlYm9uYWlyL1BZXFxuZGVib25haXJuZXNzL01cXG5kZWJvdWNoL0dEU1xcbmRlYnJpZGVtZW50XFxuZGVicmlzL01cXG5kZWJ0L1NNXFxuZGVidG9yL01TXFxuZGVidWdnZXIvU1xcbmRlYnV0L0dNRFxcbmRlYnV0YW50ZS9TTVxcbmRlY2FkZS9NU1xcbmRlY2FkZW5jZS9NXFxuZGVjYWRlbmN5L01cXG5kZWNhZGVudC9NWVNcXG5kZWNhZi9NU1xcbmRlY2FmZmVpbmF0ZS9EU0dcXG5kZWNhZ29uL01TXFxuZGVjYWwvTVNcXG5kZWNhbXBtZW50L01cXG5kZWNhcGl0YXRlL1hHTkRTXFxuZGVjYXBpdGF0b3IvTVNcXG5kZWNhdGhsZXRlL1NcXG5kZWNhdGhsb24vU01cXG5kZWNheS9HRFxcbmRlY2Vhc2VkL01cXG5kZWNlZGVudC9NU1xcbmRlY2VpdC9NU1xcbmRlY2VpdGZ1bC9ZUFxcbmRlY2VpdGZ1bG5lc3MvTVxcbmRlY2VpdmUvVUdEU1xcbmRlY2VpdmVyL01TXFxuZGVjZWl2aW5nL1lcXG5kZWNlbGVyYXRlL0dORFNcXG5kZWNlbGVyYXRpb24vTVxcbmRlY2VsZXJhdG9yL1NNXFxuZGVjZW5jeS9JU01cXG5kZWNlbm5pYWwvU01cXG5kZWNlbnQvSVlcXG5kZWNlcHRpb24vTVNcXG5kZWNlcHRpdmUvWVBcXG5kZWNlcHRpdmVuZXNzL01cXG5kZWNpYmVsL01TXFxuZGVjaWRhYmxlL1VcXG5kZWNpZGUvQlpHRFJTXFxuZGVjaWRlZC9ZXFxuZGVjaWR1b3VzXFxuZGVjaWxpdGVyL01TXFxuZGVjaW1hbC9TTVxcbmRlY2ltYWxpemF0aW9uXFxuZGVjaW1hdGUvRFNHTlxcbmRlY2ltYXRpb24vTVxcbmRlY2ltZXRlci9NU1xcbmRlY2lwaGVyYWJsZS9VSVxcbmRlY2lzaW9uL0lNXFxuZGVjaXNpb25zXFxuZGVjaXNpdmUvSVBZXFxuZGVjaXNpdmVuZXNzL0lNXFxuZGVjay9TR01EXFxuZGVja2NoYWlyL1NcXG5kZWNraGFuZC9TTVxcbmRlY2tsZS9TXFxuZGVjbGFtYXRpb24vTVNcXG5kZWNsYW1hdG9yeVxcbmRlY2xhcmF0aW9uL01TXFxuZGVjbGFyYXRpdmVcXG5kZWNsYXJhdG9yeVxcbmRlY2xhcmUvRFJTWkdCXFxuZGVjbGFyZWQvVVxcbmRlY2xhcmVyL01cXG5kZWNsZW5zaW9uL1NNXFxuZGVjbGluYXRpb24vTVxcbmRlY2xpbmUvRFJTTVpHXFxuZGVjbGluZXIvTVxcbmRlY2xpdml0eS9TTVxcbmRlY29oZXJlbmNlXFxuZGVjb2xsZXRhZ2UvU01cXG5kZWNvbGxldGVcXG5kZWNvbmdlc3RhbnQvTVNcXG5kZWNvbnN0cnVjdGlvbmlzbVxcbmRlY29yL01TXFxuZGVjb3JhdGUvQUdOVkRTXFxuZGVjb3JhdGluZy9NXFxuZGVjb3JhdGlvbi9BTVxcbmRlY29yYXRpb25zXFxuZGVjb3JhdGl2ZS9ZXFxuZGVjb3JhdG9yL01TXFxuZGVjb3JvdXMvSVlcXG5kZWNvcm91c25lc3MvTVxcbmRlY29ydW0vTVxcbmRlY291cGFnZS9EU01HXFxuZGVjb3kvR01EU1xcbmRlY3JlYXNpbmcvWVxcbmRlY3JlZS9NRFNcXG5kZWNyZWVpbmdcXG5kZWNyZW1lbnQvR0RTXFxuZGVjcmVwaXRcXG5kZWNyZXBpdHVkZS9NXFxuZGVjcmltaW5hbGl6YXRpb24vTVxcbmRlY3J5L0dEU1xcbmRlY3J5cHRpb25cXG5kZWRpY2F0ZS9BR0RTXFxuZGVkaWNhdGlvbi9TTVxcbmRlZGljYXRvci9TTVxcbmRlZGljYXRvcnlcXG5kZWR1Y2UvR0RTXFxuZGVkdWNpYmxlXFxuZGVkdWN0L0dWRFxcbmRlZHVjdGlibGUvU01cXG5kZWR1Y3Rpb24vU01cXG5kZWR1Y3RpdmUvWVxcbmRlZWQvR0RcXG5kZWVqYXkvTVNcXG5kZWVtL0FTR0RcXG5kZWVwL1NQWFRNTlJZXFxuZGVlcGVuL0dEXFxuZGVlcGZha2UvU01cXG5kZWVwbmVzcy9NXFxuZGVlci9NXFxuZGVlcnNraW4vTVxcbmRlZXJzdGFsa2VyL1NcXG5kZWYvWlxcbmRlZmFjZW1lbnQvTVxcbmRlZmFjZXIvU01cXG5kZWZhbGNhdGUvRFNYR05cXG5kZWZhbGNhdGlvbi9NXFxuZGVmYW1hdGlvbi9NXFxuZGVmYW1hdG9yeVxcbmRlZmFtZS9aR0RSU1xcbmRlZmFtZXIvTVxcbmRlZmF1bHRlci9TTVxcbmRlZmVhdC9NRFJaR1NcXG5kZWZlYXRlZC9VXFxuZGVmZWF0ZXIvTVxcbmRlZmVhdGlzbS9NXFxuZGVmZWF0aXN0L01TXFxuZGVmZWNhdGUvR05EU1xcbmRlZmVjYXRpb24vTVxcbmRlZmVjdC9NREdWU1xcbmRlZmVjdGlvbi9NU1xcbmRlZmVjdGl2ZS9NUFlTXFxuZGVmZWN0aXZlbmVzcy9NXFxuZGVmZWN0b3IvTVNcXG5kZWZlbmRhbnQvU01cXG5kZWZlbmRlZC9VXFxuZGVmZW5lc3RyYXRpb24vU1xcbmRlZmVuc2UvRFNNR1ZcXG5kZWZlbnNlbGVzcy9ZUFxcbmRlZmVuc2VsZXNzbmVzcy9NXFxuZGVmZW5zaWJsZS9JXFxuZGVmZW5zaWJseS9JXFxuZGVmZW5zaXZlL01ZUFxcbmRlZmVuc2l2ZW5lc3MvTVxcbmRlZmVyZW5jZS9NXFxuZGVmZXJlbnRpYWwvWVxcbmRlZmVycmFsL01TXFxuZGVmZXJyZWRcXG5kZWZlcnJpbmdcXG5kZWZmZXJcXG5kZWZmZXN0XFxuZGVmaWFudC9ZXFxuZGVmaWJyaWxsYXRpb25cXG5kZWZpYnJpbGxhdG9yL1NcXG5kZWZpY2llbmN5L1NNXFxuZGVmaWNpZW50XFxuZGVmaWNpdC9TTVxcbmRlZmlsZW1lbnQvTVxcbmRlZmluYWJsZS9JVVxcbmRlZmluZS9BR0RTXFxuZGVmaW5lZC9VXFxuZGVmaW5lci9NU1xcbmRlZmluaXRlL0lZVlBcXG5kZWZpbml0ZW5lc3MvSU1cXG5kZWZpbml0aW9uL0FNXFxuZGVmaW5pdGlvbnNcXG5kZWZpbml0aXZlL1lcXG5kZWZsYXRlL0dORFNcXG5kZWZsYXRpb24vTVxcbmRlZmxhdGlvbmFyeVxcbmRlZmxlY3QvREdWU1xcbmRlZmxlY3Rpb24vTVNcXG5kZWZsZWN0b3IvU01cXG5kZWZvZ2dlci9TTVxcbmRlZm9saWFudC9TTVxcbmRlZm9saWF0ZS9EU0dOXFxuZGVmb2xpYXRpb24vTVxcbmRlZm9saWF0b3IvTVNcXG5kZWZvcm1pdHkvU01cXG5kZWZyYXVkL0RSWkdTXFxuZGVmcmF1ZGVyL01cXG5kZWZyYXlhbC9NXFxuZGVmcm9jay9ER1xcbmRlZnJvc3Rlci9NU1xcbmRlZnQvUFRSWVxcbmRlZnRuZXNzL01cXG5kZWZ1bmN0XFxuZGVmeS9HRFNcXG5kZWdcXG5kZWdlbmVyYWN5L01cXG5kZWdlbmVyYXRlL01WXFxuZGVncmFkZS9CXFxuZGVncmVlL01TXFxuZGVoeWRyYXRvci9TTVxcbmRlaHlkcm9nZW5hc2VcXG5kZWljZXIvTVNcXG5kZWlmaWNhdGlvbi9NXFxuZGVpZnkvTkdEU1xcbmRlaWduL0dEU1xcbmRlaXN0L01TXFxuZGVpc3RpY1xcbmRlaXR5L1NNXFxuZGVqZWN0L0dEU1xcbmRlamVjdGVkL1lcXG5kZWplY3Rpb24vTVxcbmRlbGF5L1pEUlxcbmRlbGVjdGFibGVcXG5kZWxlY3RhYmx5XFxuZGVsZWN0YXRpb24vTVxcbmRlbGVnYXRlL0dEXFxuZGVsZXRlL1hHTkRTXFxuZGVsZXRlcmlvdXNcXG5kZWxldGlvbi9NXFxuZGVsZnQvTVxcbmRlbGZ0d2FyZS9NXFxuZGVsaS9TTVxcbmRlbGliZXJhdGUvWFlWUFxcbmRlbGliZXJhdGVuZXNzL01cXG5kZWxpY2FjeS9JU01cXG5kZWxpY2F0ZS9JWVxcbmRlbGljYXRlbmVzcy9NXFxuZGVsaWNhdGVzc2VuL1NNXFxuZGVsaWNpb3VzL1BZXFxuZGVsaWNpb3VzbmVzcy9NXFxuZGVsaWdodGVkL1lcXG5kZWxpZ2h0ZnVsL1lcXG5kZWxpbWluYXRvclxcbmRlbGluZWF0ZS9HTlhEU1xcbmRlbGluZWF0aW9uL01cXG5kZWxpbnF1ZW5jeS9TTVxcbmRlbGlucXVlbnQvU01ZXFxuZGVsaXF1ZXNjZS9EU0dcXG5kZWxpcXVlc2NlbnRcXG5kZWxpcmlvdXMvWVBcXG5kZWxpcmlvdXNuZXNzL01cXG5kZWxpcml1bS9TTVxcbmRlbGl2ZXIvQURHU1xcbmRlbGl2ZXJhYmxlL1NcXG5kZWxpdmVyYW5jZS9NXFxuZGVsaXZlcmVkL1VcXG5kZWxpdmVyZXIvU01cXG5kZWxsL1NNXFxuZGVscGhpbml1bS9NU1xcbmRlbHRhL01TXFxuZGVsdWRlL0dEU1xcbmRlbHVnZS9NR0RTXFxuZGVsdXNpb24vTVNcXG5kZWx1c2lvbmFsXFxuZGVsdXNpdmUvWVxcbmRlbHV4ZVxcbmRlbHZlL1pHRFJTXFxuZGVsdmVyL01cXG5kZW1hZ29naWNcXG5kZW1hZ29naWNhbGx5XFxuZGVtYWdvZ3VlL1NNXFxuZGVtYWdvZ3VlcnkvTVxcbmRlbWFnb2d5L01cXG5kZW1hbmQvR01EU1xcbmRlbWFuZGluZy9VXFxuZGVtYXJjYXRlL0RTR05YXFxuZGVtYXJjYXRpb24vTVxcbmRlbWVhbi9HRFNcXG5kZW1lYW5vci9NXFxuZGVtZW50ZWQvWVxcbmRlbWVudGlhL01cXG5kZW1lc25lL01TXFxuZGVtaWdvZC9NU1xcbmRlbWlnb2RkZXNzL01TXFxuZGVtaWpvaG4vU01cXG5kZW1pbW9uZGFpbmUvU01cXG5kZW1pbW9uZGUvTVxcbmRlbWlzZS9NR0RTXFxuZGVtaXRhc3NlL01TXFxuZGVtby9HTURcXG5kZW1vY3JhY3kvU01cXG5kZW1vY3JhdC9NU1xcbmRlbW9jcmF0aWMvVVxcbmRlbW9jcmF0aWNhbGx5XFxuZGVtb2NyYXRpemF0aW9uL01cXG5kZW1vY3JhdGl6ZS9HRFNcXG5kZW1vZGVcXG5kZW1vZ3JhcGhlci9TTVxcbmRlbW9ncmFwaGljL1NNXFxuZGVtb2dyYXBoaWNhbGx5XFxuZGVtb2dyYXBoaWNzL01cXG5kZW1vZ3JhcGh5L01cXG5kZW1vbGlzaC9EU0dcXG5kZW1vbGl0aW9uL01TXFxuZGVtb24vTVNcXG5kZW1vbmV0aXphdGlvbi9NXFxuZGVtb25pYWNcXG5kZW1vbmlhY2FsL1lcXG5kZW1vbmljXFxuZGVtb25pY2FsbHlcXG5kZW1vbml6ZS9HRFNcXG5kZW1vbm9sb2d5L1NNXFxuZGVtb25zdHJhYmlsaXR5XFxuZGVtb25zdHJhYmxlL0lcXG5kZW1vbnN0cmFibHlcXG5kZW1vbnN0cmF0ZS9YR05WRFNcXG5kZW1vbnN0cmF0aW9uL01cXG5kZW1vbnN0cmF0aXZlL01ZU1BcXG5kZW1vbnN0cmF0aXZlbmVzcy9NXFxuZGVtb25zdHJhdG9yL01TXFxuZGVtb3RlL0dEXFxuZGVtb3RpY1xcbmRlbW91bnRcXG5kZW11bGNlbnQvU01cXG5kZW11ci9UTVJTXFxuZGVtdXJlL1BZXFxuZGVtdXJlbmVzcy9NXFxuZGVtdXJyYWwvU01cXG5kZW11cnJlZFxcbmRlbXVycmVyL1NNXFxuZGVtdXJyaW5nXFxuZGVuL01cXG5kZW5hdGlvbmFsaXphdGlvblxcbmRlbmF0dXJhdGlvblxcbmRlbmF0dXJlL0RHXFxuZGVuZHJpdGUvU01cXG5kZW5ndWUvTVxcbmRlbmlhYmlsaXR5XFxuZGVuaWFibGUvVVxcbmRlbmlhbC9NU1xcbmRlbmllci9NXFxuZGVuaWdyYXRlL0RTR05cXG5kZW5pZ3JhdGlvbi9NXFxuZGVuaW0vTVNcXG5kZW5pdHJpZmljYXRpb25cXG5kZW5pemVuL01TXFxuZGVub21pbmF0aW9uYWxcXG5kZW5vdGF0aXZlXFxuZGVub3VlbWVudC9NU1xcbmRlbm91bmNlL0xEU0dcXG5kZW5vdW5jZW1lbnQvU01cXG5kZW5zZS9QWVRSXFxuZGVuc2VuZXNzL01cXG5kZW5zaXR5L1NNXFxuZGVudC9JU0dNRFxcbmRlbnRhbC9ZXFxuZGVudGlmcmljZS9TTVxcbmRlbnRpbi9NXFxuZGVudGlzdC9NU1xcbmRlbnRpc3RyeS9NXFxuZGVudGl0aW9uL01cXG5kZW50dXJlL0lNU1xcbmRlbnVjbGVhcml6ZS9HRFNcXG5kZW51ZGF0aW9uL01cXG5kZW51ZGUvR0RTXFxuZGVudW5jaWF0aW9uL1NNXFxuZGVueS9aR0RSU1xcbmRlb2RvcmFudC9TTVxcbmRlb2Rvcml6YXRpb24vTVxcbmRlb2Rvcml6ZS9EUlNaR1xcbmRlb2Rvcml6ZXIvTVxcbmRlcGFydGVkL01cXG5kZXBhcnRtZW50L01TXFxuZGVwYXJ0bWVudGFsL1lcXG5kZXBhcnRtZW50YWxpemF0aW9uL01cXG5kZXBhcnRtZW50YWxpemUvR0RTXFxuZGVwYXJ0dXJlL1NNXFxuZGVwZW5kYWJpbGl0eS9NXFxuZGVwZW5kYWJsZS9VXFxuZGVwZW5kYWJseVxcbmRlcGVuZGVuY2UvSU1cXG5kZXBlbmRlbmN5L1NNXFxuZGVwZW5kZW50L0lNWVNcXG5kZXBpY3QvR0RTXFxuZGVwaWN0aW9uL01TXFxuZGVwaWxhdG9yeS9TTVxcbmRlcGxldGUvR05EU1xcbmRlcGxldGlvbi9NXFxuZGVwbG9yYWJseVxcbmRlcGxvcmUvQkdEU1xcbmRlcGxveS9BTEdEU1xcbmRlcGxveW1lbnQvQU1cXG5kZXBsb3ltZW50c1xcbmRlcG9uZW50L01TXFxuZGVwb3J0YXRpb24vTVNcXG5kZXBvcnRlZS9NU1xcbmRlcG9ydG1lbnQvTVxcbmRlcG9zaXQvQUdNRFNcXG5kZXBvc2l0b3IvTVNcXG5kZXBvc2l0b3J5L1NNXFxuZGVwcmF2ZS9HRFNcXG5kZXByYXZpdHkvU01cXG5kZXByZWNhdGUvR05EU1xcbmRlcHJlY2F0aW5nL1lcXG5kZXByZWNhdGlvbi9NXFxuZGVwcmVjYXRvcnlcXG5kZXByZWNpYXRlL0RTR05cXG5kZXByZWNpYXRpb24vTVxcbmRlcHJlZGF0aW9uL1NNXFxuZGVwcmVzc2FudC9TTVxcbmRlcHJlc3NpbmcvWVxcbmRlcHJlc3Npb24vU01cXG5kZXByZXNzaXZlL1NNXFxuZGVwcmVzc29yL01TXFxuZGVwcmVzc3VyaXphdGlvblxcbmRlcHJpdmUvR0RTXFxuZGVwcm9ncmFtbWluZ1xcbmRlcHRoL01cXG5kZXB0aHNcXG5kZXB1dGF0aW9uL01TXFxuZGVwdXRlL0RTR1xcbmRlcHV0aXplL0RTR1xcbmRlcHV0eS9TTVxcbmRlcmFpbGxldXIvU01cXG5kZXJhaWxtZW50L1NNXFxuZGVyYW5nZW1lbnQvTVxcbmRlcmJ5L1NNXFxuZGVyZWxpY3QvTVNcXG5kZXJlbGljdGlvbi9NXFxuZGVyaWRlL0dEU1xcbmRlcmlzaW9uL01cXG5kZXJpc2l2ZS9QWVxcbmRlcmlzaXZlbmVzcy9NXFxuZGVyaXNvcnlcXG5kZXJpdmF0aW9uL01TXFxuZGVyaXZhdGl2ZS9NU1xcbmRlcml2ZS9CXFxuZGVybWFsXFxuZGVybWF0aXRpcy9NXFxuZGVybWF0b2xvZ2ljYWxcXG5kZXJtYXRvbG9naXN0L1NNXFxuZGVybWF0b2xvZ3kvTVxcbmRlcm1pcy9NXFxuZGVyb2dhdGUvRFNHTlxcbmRlcm9nYXRpb24vTVxcbmRlcm9nYXRvcmlseVxcbmRlcm9nYXRvcnlcXG5kZXJyaWNrL1NNXFxuZGVycmllcmUvU01cXG5kZXJyaW5nZXIvU01cXG5kZXJ2XFxuZGVydmlzaC9NU1xcbmRlc2FsaW5hdGUvR05EU1xcbmRlc2FsaW5hdGlvbi9NXFxuZGVzYWxpbml6YXRpb24vTVxcbmRlc2FsaW5pemUvR0RTXFxuZGVzY2FudC9NXFxuZGVzY2VuZC9GR0RTXFxuZGVzY2VuZGFudC9NU1xcbmRlc2NlbmRlclxcbmRlc2NyaWJhYmxlL0lcXG5kZXNjcmliZS9CWkdEUlxcbmRlc2NyaWJlci9NXFxuZGVzY3JpcHRpb24vU01cXG5kZXNjcmlwdGl2ZS9QWVxcbmRlc2NyaXB0aXZlbmVzcy9NXFxuZGVzY3JpcHRvci9TXFxuZGVzY3J5L0dEU1xcbmRlc2VjcmF0ZS9EU0dOXFxuZGVzZWNyYXRpb24vTVxcbmRlc2VsZWN0aW9uXFxuZGVzZXJ0L1NEUlpHTVxcbmRlc2VydGVyL01cXG5kZXNlcnRpZmljYXRpb25cXG5kZXNlcnRpb24vU01cXG5kZXNlcnZlZC9VWVxcbmRlc2VydmluZy9VXFxuZGVzaWNjYW50L1NNXFxuZGVzaWNjYXRlL0RTR05cXG5kZXNpY2NhdGlvbi9NXFxuZGVzaWNjYXRvci9TTVxcbmRlc2lkZXJhdGFcXG5kZXNpZGVyYXR1bS9NXFxuZGVzaWduL0FTREdcXG5kZXNpZ25hdGUvRFNHTlhcXG5kZXNpZ25hdGlvbi9NXFxuZGVzaXJhYmlsaXR5L1VNXFxuZGVzaXJhYmxlbmVzcy9NXFxuZGVzaXJhYmx5L1VcXG5kZXNpcmUvQlxcbmRlc2lyZWQvVVxcbmRlc2lyb3VzXFxuZGVzaXN0L1NER1xcbmRlc2svU01cXG5kZXNraWxsL0dcXG5kZXNrdG9wL1NNXFxuZGVzb2xhdGUvUERTWUdOXFxuZGVzb2xhdGVuZXNzL01cXG5kZXNvbGF0aW9uL01cXG5kZXNwYWlyL1NNREdcXG5kZXNwYWlyaW5nL1lcXG5kZXNwZXJhZG8vTVxcbmRlc3BlcmFkb2VzXFxuZGVzcGVyYXRlL1lOUFxcbmRlc3BlcmF0ZW5lc3MvTVxcbmRlc3BlcmF0aW9uL01cXG5kZXNwaWNhYmxlXFxuZGVzcGljYWJseVxcbmRlc3Bpc2UvRFNHXFxuZGVzcGl0ZVxcbmRlc3BvaWxtZW50L01cXG5kZXNwb25kZW5jZS9NXFxuZGVzcG9uZGVuY3kvTVxcbmRlc3BvbmRlbnQvWVxcbmRlc3BvdGljXFxuZGVzcG90aWNhbGx5XFxuZGVzcG90aXNtL01cXG5kZXNzZXJ0L1NNXFxuZGVzc2VydHNwb29uL1NcXG5kZXNzZXJ0c3Bvb25mdWwvU1xcbmRlc3RpbmF0aW9uL1NNXFxuZGVzdGluZS9EU0dcXG5kZXN0aW55L1NNXFxuZGVzdGl0dXRlL05cXG5kZXN0aXR1dGlvbi9NXFxuZGVzdHJveS9TWkdEUlxcbmRlc3Ryb3llci9NXFxuZGVzdHJ1Y3QvR1ZNRFNcXG5kZXN0cnVjdGliaWxpdHkvSU1cXG5kZXN0cnVjdGlibGUvSVxcbmRlc3RydWN0aW9uL01cXG5kZXN0cnVjdGl2ZS9QWVxcbmRlc3RydWN0aXZlbmVzcy9NXFxuZGVzdWV0dWRlL01cXG5kZXN1bHRvcmlseVxcbmRlc3VsdG9yeVxcbmRldGFjaC9CTEdEU1xcbmRldGFjaG1lbnQvTVNcXG5kZXRhaW4vTEdEU1xcbmRldGFpbmVlL01TXFxuZGV0YWlubWVudC9NXFxuZGV0ZWN0L1NER1ZCXFxuZGV0ZWN0YWJsZS9VXFxuZGV0ZWN0ZWQvVVxcbmRldGVjdGlvbi9NXFxuZGV0ZWN0aXZlL1NNXFxuZGV0ZWN0b3IvU01cXG5kZXRlbnRlL1NNTlhcXG5kZXRlbnRpb24vTVxcbmRldGVyL1NMXFxuZGV0ZXJnZW50L1NNXFxuZGV0ZXJpb3JhdGUvRFNHTlxcbmRldGVyaW9yYXRpb24vTVxcbmRldGVybWVudC9NXFxuZGV0ZXJtaW5hYmxlL0lcXG5kZXRlcm1pbmFudC9TTVxcbmRldGVybWluYXRlXFxuZGV0ZXJtaW5lL0FHRFNcXG5kZXRlcm1pbmVkL1VcXG5kZXRlcm1pbmVkbHlcXG5kZXRlcm1pbmVyL1NNXFxuZGV0ZXJtaW5pc20vTVxcbmRldGVybWluaXN0aWNcXG5kZXRlcm1pbmlzdGljYWxseVxcbmRldGVycmVkL1VcXG5kZXRlcnJlbmNlL01cXG5kZXRlcnJlbnQvTVNcXG5kZXRlcnJpbmdcXG5kZXRlc3RhYmx5XFxuZGV0ZXN0YXRpb24vTVxcbmRldGhyb25lL0RTTEdcXG5kZXRocm9uZW1lbnQvTVxcbmRldG9uYXRlL0dORFNYXFxuZGV0b25hdGlvbi9NXFxuZGV0b25hdG9yL1NNXFxuZGV0b3gvTURTR1xcbmRldG94aWZpY2F0aW9uL01cXG5kZXRveGlmeS9EU0dOXFxuZGV0cmFjdC9HRFxcbmRldHJpbWVudC9TTVxcbmRldHJpbWVudGFsL1lcXG5kZXRyaXR1cy9NXFxuZGV1Y2UvU01cXG5kZXV0ZXJpdW0vTVxcbmRldmFzdGF0ZS9HTkRTXFxuZGV2YXN0YXRpbmcvWVxcbmRldmFzdGF0aW9uL01cXG5kZXZhc3RhdG9yL01TXFxuZGV2ZWxvcC9BU0dETFxcbmRldmVsb3BlZC9VXFxuZGV2ZWxvcGVyL1NNXFxuZGV2ZWxvcG1lbnQvQVNNXFxuZGV2ZWxvcG1lbnRhbC9ZXFxuZGV2aWFuY2UvTVxcbmRldmlhbmN5L01cXG5kZXZpYW50L1NNXFxuZGV2aWF0ZS9EU01HTlhcXG5kZXZpYXRpbmcvVVxcbmRldmlhdGlvbi9NXFxuZGV2aWwvU01ER0xcXG5kZXZpbGlzaC9ZUFxcbmRldmlsaXNobmVzcy9NXFxuZGV2aWxtZW50L01cXG5kZXZpbHJ5L1NNXFxuZGV2aWx0cnkvU01cXG5kZXZpb3VzL1lQXFxuZGV2aW91c25lc3MvTVxcbmRldm9pZFxcbmRldm9sdXRpb24vTVxcbmRldm9sdmUvRFNHXFxuZGV2b3RlZC9ZXFxuZGV2b3RlZS9TTVxcbmRldm90aW9uL01TXFxuZGV2b3Rpb25hbC9TTVxcbmRldm91ci9TREdcXG5kZXZvdXQvUFJZVFxcbmRldm91dG5lc3MvTVxcbmRldy9NXFxuZGV3YmVycnkvU01cXG5kZXdjbGF3L1NNXFxuZGV3ZHJvcC9TTVxcbmRld2luZXNzL01cXG5kZXdsYXAvU01cXG5kZXd5L1JUUFxcbmRleHRlcml0eS9NXFxuZGV4dGVyb3VzL1lQXFxuZGV4dGVyb3VzbmVzcy9NXFxuZGV4dHJvc2UvTVxcbmRoYXJtYVxcbmRob3RpL1NNXFxuZGhvdy9NU1xcbmRpYWJldGVzL01cXG5kaWFiZXRpYy9TTVxcbmRpYWJvbGljXFxuZGlhYm9saWNhbC9ZXFxuZGlhY3JpdGljL01TXFxuZGlhY3JpdGljYWxcXG5kaWFkZW0vU01cXG5kaWFlcmVzZXNcXG5kaWFlcmVzaXMvTVxcbmRpYWdub3NlL0RTR1xcbmRpYWdub3Npcy9NXFxuZGlhZ25vc3RpYy9TXFxuZGlhZ25vc3RpY2FsbHlcXG5kaWFnbm9zdGljaWFuL1NNXFxuZGlhZ25vc3RpY3MvTVxcbmRpYWdvbmFsL1NNWVxcbmRpYWdyYW0vU01cXG5kaWFncmFtbWF0aWNcXG5kaWFncmFtbWF0aWNhbGx5XFxuZGlhZ3JhbW1lZFxcbmRpYWdyYW1taW5nXFxuZGlhbC9BTURHU1xcbmRpYWxlY3QvU01cXG5kaWFsZWN0YWxcXG5kaWFsZWN0aWMvU01cXG5kaWFsZWN0aWNhbFxcbmRpYWxlY3RpY3MvTVxcbmRpYWxpbmcvU1xcbmRpYWxvZ1xcbmRpYWxvZ3VlL1NNXFxuZGlhbHlzZXNcXG5kaWFseXNpcy9NXFxuZGlhbHl6ZXNcXG5kaWFtXFxuZGlhbWFnbmV0aWNcXG5kaWFtYWduZXRpc21cXG5kaWFtYW50ZVxcbmRpYW1ldGVyL1NNXFxuZGlhbWV0cmljXFxuZGlhbWV0cmljYWwvWVxcbmRpYW1vbmQvU01cXG5kaWFtb25kYmFjay9NU1xcbmRpYXBhc29uL1NNXFxuZGlhcGVyL1NNREdcXG5kaWFwaGFub3VzXFxuZGlhcGhyYWdtL1NNXFxuZGlhcGhyYWdtYXRpY1xcbmRpYXJpc3QvU01cXG5kaWFycmhlYS9NXFxuZGlhcnkvU01cXG5kaWFzcG9yYS9TTVxcbmRpYXN0YXNlL01cXG5kaWFzdG9sZS9NXFxuZGlhc3RvbGljXFxuZGlhdGhlcm15L01cXG5kaWF0b20vU01cXG5kaWF0b21pY1xcbmRpYXRvbmljXFxuZGlhdHJpYmUvU01cXG5kaWF6ZXBhbVxcbmRpYmJsZS9EU01HXFxuZGlicy9NXFxuZGljZS9HRFNcXG5kaWNlcy9JXFxuZGljZXlcXG5kaWNob3RvbW91c1xcbmRpY2hvdG9teS9TTVxcbmRpY2llclxcbmRpY2llc3RcXG5kaWNrL01SWFpTXFxuZGlja2VyL0RHXFxuZGlja2V5L1NNXFxuZGlja2hlYWQvU1xcbmRpY2t5YmlyZC9TXFxuZGljb3R5bGVkb24vTVNcXG5kaWNvdHlsZWRvbm91c1xcbmRpY3RcXG5kaWN0YVxcbmRpY3RhdGUvRFNNR05YXFxuZGljdGF0aW9uL01cXG5kaWN0YXRvci9TTVxcbmRpY3RhdG9yaWFsL1lcXG5kaWN0YXRvcnNoaXAvU01cXG5kaWN0aW9uL01cXG5kaWN0aW9uYXJ5L1NNXFxuZGljdHVtL01cXG5kaWQvQVVcXG5kaWRhY3RpY1xcbmRpZGFjdGljYWxseVxcbmRpZGRsZS9EUlNaR1xcbmRpZGRsZXIvTVxcbmRpZGRseVxcbmRpZGRseXNxdWF0XFxuZGlkZHVtc1xcbmRpZGdlcmlkb28vU1xcbmRpZG4ndFxcbmRpZG8vTVxcbmRpZG9lc1xcbmRpZHN0XFxuZGllL0RTTVxcbmRpZWxlY3RyaWMvTVNcXG5kaWVyZXNlc1xcbmRpZXJlc2lzL01cXG5kaWVzZWwvU01ER1xcbmRpZXQvTURSWkdTXFxuZGlldGFyeS9TTVxcbmRpZXRlci9NXFxuZGlldGV0aWMvU1xcbmRpZXRldGljcy9NXFxuZGlldGl0aWFuL01TXFxuZGlmZi9EUlpHU1xcbmRpZmZlci9ER1xcbmRpZmZlcmVuY2UvSU1cXG5kaWZmZXJlbmNlc1xcbmRpZmZlcmVudC9JWVxcbmRpZmZlcmVudGlhYmxlXFxuZGlmZmVyZW50aWFsL1NNXFxuZGlmZmVyZW50aWF0ZS9EU0dOXFxuZGlmZmVyZW50aWF0ZWQvVVxcbmRpZmZlcmVudGlhdGlvbi9NXFxuZGlmZmljdWx0L1lcXG5kaWZmaWN1bHR5L1NNXFxuZGlmZmlkZW5jZS9NXFxuZGlmZmlkZW50L1lcXG5kaWZmcmFjdC9HU0RcXG5kaWZmcmFjdGlvbi9NXFxuZGlmZnVzZS9EU1lHTlZQXFxuZGlmZnVzZW5lc3MvTVxcbmRpZmZ1c2lvbi9NXFxuZGlmZnVzaXZpdHlcXG5kaWcvU01cXG5kaWdlcmF0aS9NXFxuZGlnZXN0L1NNREdWXFxuZGlnZXN0ZWQvVVxcbmRpZ2VzdGliaWxpdHkvTVxcbmRpZ2VzdGlibGUvSVxcbmRpZ2VzdGlvbi9JTVxcbmRpZ2VzdGlvbnNcXG5kaWdlc3RpdmUvU1xcbmRpZ2dlci9TTVxcbmRpZ2dpbmcvU1xcbmRpZ2dpbmdzL01cXG5kaWdpY2FtL1NcXG5kaWdpdC9TTVxcbmRpZ2l0YWwvWVxcbmRpZ2l0YWxpcy9NXFxuZGlnaXRpemF0aW9uXFxuZGlnaXRpemUvR0RTXFxuZGlnbmlmaWVkL1VcXG5kaWduaWZ5L0RTR1xcbmRpZ25pdGFyeS9TTVxcbmRpZ25pdHkvSVNNXFxuZGlncmFwaC9NXFxuZGlncmFwaHNcXG5kaWdyZXNzL0dWRFNcXG5kaWdyZXNzaW9uL01TXFxuZGlrZS9NR0RTXFxuZGlrdGF0L1NcXG5kaWxhcGlkYXRlZFxcbmRpbGFwaWRhdGlvbi9NXFxuZGlsYXRhdGlvbi9NXFxuZGlsYXRlL0RTR05cXG5kaWxhdGlvbi9NXFxuZGlsYXRvci9TTVxcbmRpbGF0b3J5XFxuZGlsZG8vU1xcbmRpbGVtbWEvTVNcXG5kaWxldHRhbnRlL1NNXFxuZGlsZXR0YW50aXNoXFxuZGlsZXR0YW50aXNtL01cXG5kaWxpZ2VuY2UvTVxcbmRpbGlnZW50L1lcXG5kaWxsL01TXFxuZGlsbHkvU01cXG5kaWxseWRhbGx5L0RTR1xcbmRpbHVlbnRcXG5kaWx1dGUvRFNHTlhcXG5kaWx1dGVkL1VcXG5kaWx1dGlvbi9NXFxuZGltL1BTUllcXG5kaW1lL01TXFxuZGltZW5zaW9uL1NNXFxuZGltZW5zaW9uYWxcXG5kaW1lbnNpb25sZXNzXFxuZGltaW5pc2gvR0RTXFxuZGltaW5pc2hlZC9VXFxuZGltaW51ZW5kby9TTVxcbmRpbWludXRpb24vU01cXG5kaW1pbnV0aXZlL1NNXFxuZGltaXR5L01cXG5kaW1tZWQvVVxcbmRpbW1lci9TTVxcbmRpbW1lc3RcXG5kaW1taW5nXFxuZGltbmVzcy9NXFxuZGltcGxlL0RTTUdcXG5kaW1wbHlcXG5kaW13aXQvU01cXG5kaW13aXR0ZWRcXG5kaW4vWkdTTURSXFxuZGluYXIvU01cXG5kaW5lL1NcXG5kaW5lci9NXFxuZGluZXR0ZS9NU1xcbmRpbmcvTURHXFxuZGluZ2JhdC9NU1xcbmRpbmdoeS9TTVxcbmRpbmdpbHlcXG5kaW5naW5lc3MvTVxcbmRpbmdsZS9TTVxcbmRpbmdvL01cXG5kaW5nb2VzXFxuZGluZ3VzL01TXFxuZGluZ3kvUlBUXFxuZGluay9SXFxuZGlua3kvUlNNVFxcbmRpbm5lZFxcbmRpbm5lci9TTURHXFxuZGlubmVydGltZS9NXFxuZGlubmVyd2FyZS9NXFxuZGlubmluZ1xcbmRpbm9zYXVyL1NNXFxuZGludC9NXFxuZGlvY2VzYW4vTVNcXG5kaW9jZXNlL01TXFxuZGlvZGUvU01cXG5kaW9yYW1hL1NNXFxuZGlveGlkZS9TTVxcbmRpb3hpbi9TTVxcbmRpcC9TTVxcbmRpcGh0aGVyaWEvTVxcbmRpcGh0aG9uZy9TTVxcbmRpcGxvaWQvU01cXG5kaXBsb21hL1NNXFxuZGlwbG9tYWN5L01cXG5kaXBsb21hdC9NU1xcbmRpcGxvbWF0YVxcbmRpcGxvbWF0aWMvVVxcbmRpcGxvbWF0aWNhbGx5XFxuZGlwbG9tYXRpc3QvTVNcXG5kaXBsb3BpYVxcbmRpcG9sZS9TTVxcbmRpcHBlZFxcbmRpcHBlci9TTVxcbmRpcHBpbmdcXG5kaXBweS9SVFxcbmRpcHNvL1NcXG5kaXBzb21hbmlhL01cXG5kaXBzb21hbmlhYy9NU1xcbmRpcHN0aWNrL1NNXFxuZGlwdGVyb3VzXFxuZGlwdHljaC9NXFxuZGlwdHljaHNcXG5kaXJlL1lUUlxcbmRpcmVjdC9BU0RHVlRcXG5kaXJlY3RlclxcbmRpcmVjdGlvbi9JTVxcbmRpcmVjdGlvbmFsXFxuZGlyZWN0aW9ubGVzc1xcbmRpcmVjdGlvbnNcXG5kaXJlY3RpdmUvU01cXG5kaXJlY3RseVxcbmRpcmVjdG5lc3MvSU1cXG5kaXJlY3Rvci9NU1xcbmRpcmVjdG9yYXRlL1NNXFxuZGlyZWN0b3JpYWxcXG5kaXJlY3RvcnNoaXAvU01cXG5kaXJlY3RvcnkvU01cXG5kaXJlZnVsXFxuZGlyZ2UvU01cXG5kaXJpZ2libGUvTVNcXG5kaXJrL01TXFxuZGlybmRsL1NNXFxuZGlydC9NXFxuZGlydGJhbGwvU1xcbmRpcnRpbHlcXG5kaXJ0aW5lc3MvTVxcbmRpcnR5L0RSU1RHUFxcbmRpcy9NXFxuZGlzYWJsZS9EU0dMXFxuZGlzYWJsZW1lbnQvTVxcbmRpc2FtYmlndWF0ZS9OXFxuZGlzYXBwb2ludGluZy9ZXFxuZGlzYXJtaW5nL1lcXG5kaXNhc3NlbWJseVxcbmRpc2FzdHJvdXMvWVxcbmRpc2JhbmRtZW50L01cXG5kaXNiYXJtZW50L01cXG5kaXNiZWxpZXZpbmcvWVxcbmRpc2J1cnNhbC9NXFxuZGlzYnVyc2UvRFNHTFxcbmRpc2J1cnNlbWVudC9NU1xcbmRpc2MvTVxcbmRpc2Nlcm4vTFNER1xcbmRpc2Nlcm5pYmxlL0lcXG5kaXNjZXJuaWJseVxcbmRpc2Nlcm5pbmcvWVxcbmRpc2Nlcm5tZW50L01cXG5kaXNjaGFyZ2VkL1VcXG5kaXNjaXBsZS9TTVxcbmRpc2NpcGxlc2hpcC9NXFxuZGlzY2lwbGluYXJpYW4vU01cXG5kaXNjaXBsaW5hcnlcXG5kaXNjaXBsaW5lL0RTTUdcXG5kaXNjaXBsaW5lZC9VXFxuZGlzY2xvc2UvRFNHXFxuZGlzY2xvc2VkL1VcXG5kaXNjby9NR1xcbmRpc2NvZ3JhcGh5L1NNXFxuZGlzY29sb3JhdGlvbi9TXFxuZGlzY29tYm9idWxhdGUvRFNHTlxcbmRpc2NvbWJvYnVsYXRpb24vTVxcbmRpc2NvbWZpdC9ER1xcbmRpc2NvbWZpdHVyZS9NXFxuZGlzY29tbW9kZS9ER1xcbmRpc2NvbmNlcnRpbmcvWVxcbmRpc2Nvbm5lY3RlZC9QWVxcbmRpc2Nvbm5lY3RlZG5lc3MvTVxcbmRpc2NvbnNvbGF0ZS9ZXFxuZGlzY29yZGFuY2UvTVxcbmRpc2NvcmRhbnQvWVxcbmRpc2NvdGhlcXVlL1NNXFxuZGlzY291cmFnZS9MR0RTXFxuZGlzY291cmFnZW1lbnQvU01cXG5kaXNjb3VyYWdpbmcvWVxcbmRpc2NvdmVyL0FTREdcXG5kaXNjb3ZlcmVkL1VcXG5kaXNjb3ZlcmVyL01TXFxuZGlzY292ZXJ5L0FTTVxcbmRpc2NyZWV0L1BSWVRcXG5kaXNjcmVldG5lc3MvTVxcbmRpc2NyZXBhbmN5L1NNXFxuZGlzY3JlcGFudFxcbmRpc2NyZXRlL1BZTlxcbmRpc2NyZXRlbmVzcy9NXFxuZGlzY3JldGlvbi9JTVxcbmRpc2NyZXRpb25hcnlcXG5kaXNjcmltaW5hbnRcXG5kaXNjcmltaW5hdGUvR05EU1xcbmRpc2NyaW1pbmF0aW5nL1VcXG5kaXNjcmltaW5hdGlvbi9NXFxuZGlzY3JpbWluYXRvci9NU1xcbmRpc2NyaW1pbmF0b3J5XFxuZGlzY3Vyc2l2ZW5lc3MvTVxcbmRpc2N1cy9NU1xcbmRpc2N1c3NhbnQvU01cXG5kaXNjdXNzaW9uL1NNXFxuZGlzZGFpbi9TTURHXFxuZGlzZGFpbmZ1bC9ZXFxuZGlzZW1ib3dlbC9TRExHXFxuZGlzZW1ib3dlbG1lbnQvTVxcbmRpc2ZpZ3VyZW1lbnQvU01cXG5kaXNmcmFuY2hpc2VtZW50L01cXG5kaXNnb3JnZW1lbnQvTVxcbmRpc2dydW50bGUvTEdEU1xcbmRpc2dydW50bGVtZW50L01cXG5kaXNndWlzZS9HRFxcbmRpc2d1aXNlZC9VXFxuZGlzZ3VzdGVkL1lcXG5kaXNndXN0aW5nL1lcXG5kaXNoL01EU0dcXG5kaXNoYWJpbGxlL01cXG5kaXNoYXJtb25pb3VzXFxuZGlzaGNsb3RoL01cXG5kaXNoY2xvdGhzXFxuZGlzaGVhcnRlbmluZy9ZXFxuZGlzaGV2ZWwvREdMU1xcbmRpc2hldmVsbWVudC9NXFxuZGlzaHBhbi9TTVxcbmRpc2hyYWcvU01cXG5kaXNodG93ZWwvTVNcXG5kaXNod2FyZS9NXFxuZGlzaHdhc2hlci9NU1xcbmRpc2h3YXRlci9NXFxuZGlzaHlcXG5kaXNpbGx1c2lvbi9HTERcXG5kaXNpbGx1c2lvbm1lbnQvTVxcbmRpc2luZmVjdGFudC9NU1xcbmRpc2luZmVjdGlvbi9NXFxuZGlzaW50ZXJlc3RlZC9QWVxcbmRpc2ludGVyZXN0ZWRuZXNzL01cXG5kaXNqb2ludGVkL1lQXFxuZGlzam9pbnRlZG5lc3MvTVxcbmRpc2p1bmN0aXZlXFxuZGlzanVuY3R1cmVcXG5kaXNrL01TXFxuZGlza2V0dGUvTVNcXG5kaXNsb2RnZS9HRFNcXG5kaXNtYWwvWVxcbmRpc21hbnRsZW1lbnQvTVxcbmRpc21heS9TTURHXFxuZGlzbWF5ZWQvVVxcbmRpc21lbWJlci9MR0RcXG5kaXNtZW1iZXJtZW50L01cXG5kaXNtaXNzaXZlL1lcXG5kaXNvcmRlci9ZXFxuZGlzb3JnYW5pemF0aW9uL01cXG5kaXNwYXJhZ2UvRFNHTFxcbmRpc3BhcmFnZW1lbnQvTVxcbmRpc3BhcmFnaW5nL1lcXG5kaXNwYXJhdGUvWVxcbmRpc3BhdGNoZXIvTVNcXG5kaXNwZWwvU1xcbmRpc3BlbGxlZFxcbmRpc3BlbGxpbmdcXG5kaXNwZW5zYXJ5L1NNXFxuZGlzcGVuc2F0aW9uL01TXFxuZGlzcGVuc2UvQlpHRFJTXFxuZGlzcGVuc2VyL01cXG5kaXNwZXJzYWwvTVxcbmRpc3BlcnNlL0dORFNcXG5kaXNwZXJzaW9uL01cXG5kaXNwaXJpdC9HRFNcXG5kaXNwbGVhc3VyZS9NXFxuZGlzcG9zYWJsZS9TTVxcbmRpc3Bvc2FsL1NNXFxuZGlzcG9zZWQvSVxcbmRpc3Bvc2l0aW9uL0lTTVxcbmRpc3Bvc3Nlc3Npb24vTVxcbmRpc3Byb29mL1NNXFxuZGlzcHJvcG9ydGlvbmFsXFxuZGlzcHJvdmUvQlxcbmRpc3B1dGFibGUvSVxcbmRpc3B1dGFibHkvSVxcbmRpc3B1dGFudC9NU1xcbmRpc3B1dGF0aW9uL1NNXFxuZGlzcHV0YXRpb3VzL1lcXG5kaXNwdXRlL0RSU01aR0JcXG5kaXNwdXRlZC9VXFxuZGlzcHV0ZXIvTVxcbmRpc3F1aWV0L0dTTURcXG5kaXNxdWlzaXRpb24vTVNcXG5kaXNyZWdhcmRmdWxcXG5kaXNyZXBhaXIvTVxcbmRpc3JlcHV0ZS9NQlxcbmRpc3J1cHQvR1ZTRFxcbmRpc3J1cHRpb24vU01cXG5kaXNydXB0aXZlL1lcXG5kaXNzZWN0L1NER1xcbmRpc3NlZFxcbmRpc3NlbWJsYW5jZS9NXFxuZGlzc2VtYmxlL1pHRFJTXFxuZGlzc2VtYmxlci9NXFxuZGlzc2VtaW5hdGUvR05EU1xcbmRpc3NlbWluYXRpb24vTVxcbmRpc3NlbnNpb24vU01cXG5kaXNzZW50L1NNRFJaR1xcbmRpc3NlbnRlci9NXFxuZGlzc2VydGF0aW9uL1NNXFxuZGlzc2VzXFxuZGlzc2lkZW5jZS9NXFxuZGlzc2lkZW50L01TXFxuZGlzc2ltaWxhclxcbmRpc3NpbWlsaXR1ZGUvU1xcbmRpc3NpbmdcXG5kaXNzaXBhdGUvR05EU1xcbmRpc3NpcGF0aW9uL01cXG5kaXNzb2NpYXRlL0dOVkRTXFxuZGlzc29jaWF0aW9uL01cXG5kaXNzb2x1YmxlL0lcXG5kaXNzb2x1dGUvWU5QXFxuZGlzc29sdXRlbmVzcy9NXFxuZGlzc29sdmUvQUdEU1xcbmRpc3NvbHZlZC9VXFxuZGlzc29uYW5jZS9TTVxcbmRpc3NvbmFudFxcbmRpc3N1YWRlL0dEU1xcbmRpc3N1YXNpdmVcXG5kaXN0XFxuZGlzdGFmZi9TTVxcbmRpc3RhbC9ZXFxuZGlzdGFuY2UvRFNNR1xcbmRpc3RhbnQvWVxcbmRpc3Rhc3RlL1NNXFxuZGlzdGVtcGVyL01cXG5kaXN0ZW50aW9uL1NNXFxuZGlzdGlsbGF0ZS9TTU5YXFxuZGlzdGlsbGF0aW9uL01cXG5kaXN0aWxsZXJ5L1NNXFxuZGlzdGluY3QvSVlUVlBcXG5kaXN0aW5jdGVyXFxuZGlzdGluY3Rpb24vU01cXG5kaXN0aW5jdGl2ZS9ZUFxcbmRpc3RpbmN0aXZlbmVzcy9NXFxuZGlzdGluY3RuZXNzL0lNXFxuZGlzdGluZ3Vpc2gvR0RTQlxcbmRpc3Rpbmd1aXNoYWJsZS9JXFxuZGlzdGluZ3Vpc2hlZC9VXFxuZGlzdG9ydC9HRFJcXG5kaXN0b3J0aW9uL01TXFxuZGlzdHJhY3QvREdcXG5kaXN0cmFjdGVkL1lcXG5kaXN0cmFjdGlvbi9TXFxuZGlzdHJhaXRcXG5kaXN0cmF1Z2h0XFxuZGlzdHJlc3MvREdcXG5kaXN0cmVzc2Z1bFxcbmRpc3RyZXNzaW5nL1lcXG5kaXN0cmlidXRlL0FHTlZEU1xcbmRpc3RyaWJ1dGVkL1VcXG5kaXN0cmlidXRpb24vQU1cXG5kaXN0cmlidXRpb25hbFxcbmRpc3RyaWJ1dGlvbnNcXG5kaXN0cmlidXRpdmUvWVxcbmRpc3RyaWJ1dG9yJ3NcXG5kaXN0cmlidXRvci9BU1xcbmRpc3RyaWJ1dG9yc2hpcC9TXFxuZGlzdHJpY3Qnc1xcbmRpc3RyaWN0L0FTXFxuZGlzdHVyYi9aR1NEUlxcbmRpc3R1cmJhbmNlL1NNXFxuZGlzdHVyYmVkL1VcXG5kaXN0dXJiZXIvTVxcbmRpc3R1cmJpbmcvWVxcbmRpc3VuaW9uL01cXG5kaXN5bGxhYmljXFxuZGl0Y2gvTURTR1xcbmRpdGhlci9TTURSWkdcXG5kaXRoZXJlci9NXFxuZGl0cmFuc2l0aXZlXFxuZGl0c3lcXG5kaXR0by9TTURHXFxuZGl0dHkvU01cXG5kaXR6L01TXFxuZGl1cmV0aWMvTVNcXG5kaXVybmFsL1lcXG5kaXZcXG5kaXZhL01TXFxuZGl2YWxlbnRcXG5kaXZhbi9TTVxcbmRpdmUvTVpUR0RSU1xcbmRpdmVyL01cXG5kaXZlcmdlL0RTR1xcbmRpdmVyZ2VuY2UvTVNcXG5kaXZlcmdlbnRcXG5kaXZlcnNlL1hZTlBcXG5kaXZlcnNlbmVzcy9NXFxuZGl2ZXJzaWZpY2F0aW9uL01cXG5kaXZlcnNpZnkvR05EU1xcbmRpdmVyc2lvbi9NXFxuZGl2ZXJzaW9uYXJ5XFxuZGl2ZXJzaXR5L1NNXFxuZGl2ZXJ0L1NER1xcbmRpdmVydGljdWxpdGlzL01cXG5kaXZlc3QvU0xER1xcbmRpdmVzdGl0dXJlL01TXFxuZGl2ZXN0bWVudC9NXFxuZGl2aWRlL0RSU01aR0JcXG5kaXZpZGVkL1VcXG5kaXZpZGVuZC9NU1xcbmRpdmlkZXIvTVxcbmRpdmluYXRpb24vTVxcbmRpdmluZS9EUlNNWVpUR1xcbmRpdmluZXIvTVxcbmRpdmluZy9NXFxuZGl2aW5pdHkvU01cXG5kaXZpc2liaWxpdHkvSU1cXG5kaXZpc2libGUvSVxcbmRpdmlzaW9uL01TXFxuZGl2aXNpb25hbFxcbmRpdmlzaXZlL1BZXFxuZGl2aXNpdmVuZXNzL01cXG5kaXZpc29yL1NNXFxuZGl2b3JjZS9EU0xNR1xcbmRpdm9yY2VlL01TXFxuZGl2b3JjZW1lbnQvTVNcXG5kaXZvdC9TTVxcbmRpdnVsZ2UvR0RTXFxuZGl2dnkvRFNNR1xcbmRpeGllbGFuZC9NXFxuZGl6emlseVxcbmRpenppbmVzcy9NXFxuZGl6enkvRFJTUFRHXFxuZGplbGxhYmEvTVNcXG5kby9TSk1SSFpHXFxuZG9hYmxlXFxuZG9iL1NcXG5kb2JiZWRcXG5kb2JiaW4vU01cXG5kb2JiaW5nXFxuZG9iZXJtYW4vTVNcXG5kb2Jyb1xcbmRvYy9TTVxcbmRvY2VudC9TTVxcbmRvY2lsZS9ZXFxuZG9jaWxpdHkvTVxcbmRvY2svTURSWkdTXFxuZG9ja2V0L1NNREdcXG5kb2NrbGFuZC9TXFxuZG9ja3NpZGVcXG5kb2Nrd29ya2VyL01TXFxuZG9ja3lhcmQvTVNcXG5kb2N0b3IvU01ER1xcbmRvY3RvcmFsXFxuZG9jdG9yYXRlL01TXFxuZG9jdHJpbmFpcmUvTVNcXG5kb2N0cmluYWxcXG5kb2N0cmluZS9NU1xcbmRvY3VkcmFtYS9TTVxcbmRvY3VtZW50L0dNRFNcXG5kb2N1bWVudGFyeS9TTVxcbmRvY3VtZW50YXRpb24vU01cXG5kb2N1bWVudGVkL1VcXG5kb2RkZXIvU01ER1xcbmRvZGRlcnlcXG5kb2RkbGVcXG5kb2RnZS9EUlNNWkdcXG5kb2RnZW0vU1xcbmRvZGdlci9NXFxuZG9kZ3kvUlRcXG5kb2RvL01TXFxuZG9lL1NNXFxuZG9lci9NXFxuZG9lcy9BVVxcbmRvZXNraW4vTVNcXG5kb2Vzbid0XFxuZG9mZi9ER1NcXG5kb2cvU01cXG5kb2djYXJ0L1NNXFxuZG9nY2F0Y2hlci9TTVxcbmRvZ2UvTVNcXG5kb2dlYXJlZFxcbmRvZ2ZpZ2h0L1NNXFxuZG9nZmlzaC9NU1xcbmRvZ2dlZC9QWVxcbmRvZ2dlZG5lc3MvTVxcbmRvZ2dlcmVsL01cXG5kb2dnaW5nXFxuZG9nZ29uZS9UR1JTXFxuZG9nZ3kvUlNNVFxcbmRvZ2hvdXNlL1NNXFxuZG9naWUvU01cXG5kb2dsZWcvU01cXG5kb2dsZWdnZWRcXG5kb2dsZWdnaW5nXFxuZG9nbGlrZVxcbmRvZ21hL1NNXFxuZG9nbWF0aWNcXG5kb2dtYXRpY2FsbHlcXG5kb2dtYXRpc20vTVxcbmRvZ21hdGlzdC9TTVxcbmRvZ25hcHBlclxcbmRvZ3Nib2R5L1NcXG5kb2dzbGVkL1NcXG5kb2d0cm90L01TXFxuZG9ndHJvdHRlZFxcbmRvZ3Ryb3R0aW5nXFxuZG9nd29vZC9NU1xcbmRvaWx5L1NNXFxuZG9pbmcvVVNNXFxuZG9sZHJ1bXMvTVxcbmRvbGUnc1xcbmRvbGUvRkdEU1xcbmRvbGVmdWwvWVBcXG5kb2xlZnVsbmVzcy9NXFxuZG9sbC9NREdTXFxuZG9sbGFyL1NNXFxuZG9sbGhvdXNlL1NNXFxuZG9sbG9wL1NHTURcXG5kb2xseS9TTVxcbmRvbG1lbi9TTVxcbmRvbG9taXRlL01cXG5kb2xvci9NXFxuZG9sb3JvdXMvWVxcbmRvbHBoaW4vTVNcXG5kb2x0L01TXFxuZG9sdGlzaC9ZUFxcbmRvbHRpc2huZXNzL01cXG5kb21haW4vU01cXG5kb21lL01HRFNcXG5kb21lc3RpYy9TTVxcbmRvbWVzdGljYWxseVxcbmRvbWVzdGljYXRlL0RTR05cXG5kb21lc3RpY2F0ZWQvVVxcbmRvbWVzdGljYXRpb24vTVxcbmRvbWVzdGljaXR5L01cXG5kb21pY2lsZS9EU01HXFxuZG9taWNpbGlhcnlcXG5kb21pbmFuY2UvTVxcbmRvbWluYW50L1NNWVxcbmRvbWluYXRlL0RTR05cXG5kb21pbmF0aW9uL01cXG5kb21pbmF0cmljZXNcXG5kb21pbmF0cml4L01cXG5kb21pbmVlci9TR0RcXG5kb21pbmVlcmluZy9ZXFxuZG9taW5pb24vU01cXG5kb21pbm8vTVxcbmRvbWlub2VzXFxuZG9uJ3RcXG5kb24vU01cXG5kb25hL01TXFxuZG9uYXRlL0RTWEdOXFxuZG9uYXRpb24vTVxcbmRvbmUvRkFVXFxuZG9uZy9NREdTXFxuZG9uZ2xlL1NNXFxuZG9ua2V5L1NNXFxuZG9ubmVkXFxuZG9ubmluZ1xcbmRvbm5pc2hcXG5kb25ueWJyb29rL01TXFxuZG9ub3IvU01cXG5kb251dHNcXG5kb29kYWQvU01cXG5kb29kYWhcXG5kb29kYWhzXFxuZG9vZGxlL0RSU01aR1xcbmRvb2RsZWJ1Zy9TTVxcbmRvb2RsZXIvTVxcbmRvb2hpY2tleS9TTVxcbmRvb2xhbGx5XFxuZG9vbS9NREdTXFxuZG9vbXNheWVyL01TXFxuZG9vbXNkYXkvTVxcbmRvb21zdGVyL1NcXG5kb29yJ3NcXG5kb29yL0lTXFxuZG9vcmJlbGwvTVNcXG5kb29yamFtYi9TXFxuZG9vcmtlZXBlci9NU1xcbmRvb3Jrbm9iL01TXFxuZG9vcmtub2NrZXIvU1xcbmRvb3JtYW4vTVxcbmRvb3JtYXQvU01cXG5kb29ybWVuXFxuZG9vcnBsYXRlL1NNXFxuZG9vcnBvc3QvU1xcbmRvb3JzdGVwL01TXFxuZG9vcnN0ZXBwZWRcXG5kb29yc3RlcHBpbmdcXG5kb29yc3RvcC9NU1xcbmRvb3J3YXkvU01cXG5kb29yeWFyZC9NU1xcbmRvcGEvTVxcbmRvcGFtaW5lXFxuZG9wZS9NWkdEUlNcXG5kb3Blci9NXFxuZG9wZXlcXG5kb3BpZXJcXG5kb3BpZXN0XFxuZG9waW5lc3MvTVxcbmRvcGluZy9NXFxuZG9wcGVsZ2FuZ2VyL1NcXG5kb3JrL01TXFxuZG9ya3kvUlRcXG5kb3JtL01SWlNcXG5kb3JtYW5jeS9NXFxuZG9ybWFudFxcbmRvcm1lci9NXFxuZG9ybWljZVxcbmRvcm1pdG9yeS9TTVxcbmRvcm1vdXNlL01cXG5kb3JzYWwvWVxcbmRvcnkvU01cXG5kb3NhZ2UvU01cXG5kb3NlL01HRFNcXG5kb3NoXFxuZG9zaW1ldGVyL1NNXFxuZG9zcy9EUlNaR1xcbmRvc3Nob3VzZS9TXFxuZG9zc2llci9NU1xcbmRvc3RcXG5kb3QvWkdTTURSXFxuZG90YWdlL01cXG5kb3RhcmQvU01cXG5kb3Rjb20vU01cXG5kb3RlL1NcXG5kb3Rlci9NXFxuZG90aW5nL1lcXG5kb3R0ZWRcXG5kb3R0aW5nXFxuZG90dHkvUlRcXG5kb3VibGUnc1xcbmRvdWJsZS9BRFNHXFxuZG91YmxlaGVhZGVyL01TXFxuZG91Ymxlc3BlYWsvTVxcbmRvdWJsZXQvTVNcXG5kb3VibG9vbi9TTVxcbmRvdWJseVxcbmRvdWJ0L1NNRFJaR1xcbmRvdWJ0ZXIvTVxcbmRvdWJ0ZnVsL1BZXFxuZG91YnRmdWxuZXNzL01cXG5kb3VidGluZy9ZXFxuZG91YnRsZXNzL1lcXG5kb3VjaGUvRFNNR1xcbmRvdWdoL01cXG5kb3VnaG51dC9TTVxcbmRvdWdodHkvUlRcXG5kb3VnaHkvVFJcXG5kb3VyL1JZVFBcXG5kb3VybmVzcy9NXFxuZG91c2UvRFNHXFxuZG92ZS9NU1xcbmRvdmVjb3QvU1xcbmRvdmVjb3RlL1NNXFxuZG92ZXRhaWwvTURTR1xcbmRvdmlzaFxcbmRvd2FnZXIvTVNcXG5kb3dkaWx5XFxuZG93ZGluZXNzL01cXG5kb3dkeS9SU1BUXFxuZG93ZWwvU01ER1xcbmRvd2VyL1NNREdcXG5kb3duL01EUlpHU1xcbmRvd25iZWF0L1NNXFxuZG93bmNhc3RcXG5kb3duZHJhZnQvTVNcXG5kb3duZXIvTVxcbmRvd25mYWxsL1NNTlxcbmRvd25maWVsZFxcbmRvd25ncmFkZS9EU01HXFxuZG93bmhlYXJ0ZWQvUFlcXG5kb3duaGVhcnRlZG5lc3MvTVxcbmRvd25oaWxsL01TXFxuZG93bmxvYWQvTURCU0dcXG5kb3dubWFya2V0XFxuZG93bnBsYXkvRFNHXFxuZG93bnBvdXIvTVNcXG5kb3ducmFuZ2VcXG5kb3ducmlnaHRcXG5kb3ducml2ZXJcXG5kb3duc2NhbGVcXG5kb3duc2hpZnQvU0dEXFxuZG93bnNpZGUvTVNcXG5kb3duc2l6ZS9HRFNcXG5kb3duc2l6aW5nL01cXG5kb3duc3BvdXQvTVNcXG5kb3duc3RhZ2VcXG5kb3duc3RhaXJzL01cXG5kb3duc3RhdGUvTVxcbmRvd25zdHJlYW1cXG5kb3duc3dpbmcvTVNcXG5kb3dudGVtcG9cXG5kb3dudGltZS9NXFxuZG93bnRvd24vTVxcbmRvd250cmVuZC9NU1xcbmRvd250cm9kZGVuXFxuZG93bnR1cm4vTVNcXG5kb3dud2FyZC9TXFxuZG93bndpbmRcXG5kb3dueS9SVFxcbmRvd3J5L1NNXFxuZG93c2UvRFJTWkdcXG5kb3dzZXIvTVxcbmRveG9sb2d5L1NNXFxuZG95ZW4vU01cXG5kb3llbm5lL01TXFxuZG96L1hHRE5TXFxuZG96ZS9NXFxuZG96ZW4vTUhcXG5kb3ppbHlcXG5kb3p5L1JUUFxcbmRwaVxcbmRwdFxcbmRyYWIvTVlTUFxcbmRyYWJiZXJcXG5kcmFiYmVzdFxcbmRyYWJuZXNzL01cXG5kcmFjaG1hL01TXFxuZHJhY29uaWFuXFxuZHJhZnQnc1xcbmRyYWZ0L0FTREdcXG5kcmFmdGVlL1NNXFxuZHJhZnRlci9TTVxcbmRyYWZ0aWx5XFxuZHJhZnRpbmVzcy9NXFxuZHJhZnRpbmcvTVxcbmRyYWZ0c21hbi9NXFxuZHJhZnRzbWFuc2hpcC9NXFxuZHJhZnRzbWVuXFxuZHJhZnRzd29tYW4vTVxcbmRyYWZ0c3dvbWVuXFxuZHJhZnR5L1JUUFxcbmRyYWcvTVNcXG5kcmFnZ2VkXFxuZHJhZ2dpbmdcXG5kcmFnZ3kvVFJcXG5kcmFnbmV0L1NNXFxuZHJhZ29uL1NNXFxuZHJhZ29uZmx5L1NNXFxuZHJhZ29vbi9TTURHXFxuZHJhZ3N0ZXIvU1xcbmRyYWluL1NNRFJaR1xcbmRyYWluYWdlL01cXG5kcmFpbmJvYXJkL1NNXFxuZHJhaW5lci9NXFxuZHJhaW5waXBlL01TXFxuZHJha2UvU01cXG5kcmFtL01TXFxuZHJhbWEvU01cXG5kcmFtYXRpYy9TXFxuZHJhbWF0aWNhbGx5XFxuZHJhbWF0aWNzL01cXG5kcmFtYXRpc3QvU01cXG5kcmFtYXRpemF0aW9uL1NNXFxuZHJhbWF0aXplL0RTR1xcbmRyYW5rXFxuZHJhcGUvRFJTTVpHXFxuZHJhcGVyL01cXG5kcmFwZXJ5L1NNXFxuZHJhc3RpY1xcbmRyYXN0aWNhbGx5XFxuZHJhdFxcbmRyYXR0ZWRcXG5kcmF1Z2h0Ym9hcmQvU1xcbmRyYXcvTVJaR1NKXFxuZHJhd2JhY2svTVNcXG5kcmF3YnJpZGdlL01TXFxuZHJhd2VyL01cXG5kcmF3aW5nL01cXG5kcmF3bC9TTURHXFxuZHJhd24vQVxcbmRyYXdzdHJpbmcvTVNcXG5kcmF5L01TXFxuZHJlYWQvU01ER1xcbmRyZWFkZnVsL1BZXFxuZHJlYWRmdWxuZXNzL01cXG5kcmVhZGxvY2tzL01cXG5kcmVhZG5vdWdodC9NU1xcbmRyZWFtL1NNRFJaR1xcbmRyZWFtYm9hdC9NU1xcbmRyZWFtZWQvVVxcbmRyZWFtZXIvTVxcbmRyZWFtaWx5XFxuZHJlYW1pbmVzcy9NXFxuZHJlYW1sYW5kL01cXG5kcmVhbWxlc3NcXG5kcmVhbWxpa2VcXG5kcmVhbXdvcmxkL1NNXFxuZHJlYW15L1JQVFxcbmRyZWFyXFxuZHJlYXJpbHlcXG5kcmVhcmluZXNzL01cXG5kcmVhcnkvUlBUXFxuZHJlZGdlL0RSU01aR1xcbmRyZWRnZXIvTVxcbmRyZWdzL01cXG5kcmVuY2gvR0RTXFxuZHJlc3MvQVVHU0RNXFxuZHJlc3NhZ2UvTVxcbmRyZXNzZXIvTVNcXG5kcmVzc2luZXNzL01cXG5kcmVzc2luZy9TTVxcbmRyZXNzbWFrZXIvU01cXG5kcmVzc21ha2luZy9NXFxuZHJlc3N5L1RQUlxcbmRyZXcvQVxcbmRyaWJibGUvTVpHRFJTXFxuZHJpYmJsZXIvTVxcbmRyaWJsZXQvTVNcXG5kcmllci9NXFxuZHJpZnQvU01EUlpHXFxuZHJpZnRlci9NXFxuZHJpZnRuZXQvU1xcbmRyaWZ0d29vZC9NXFxuZHJpbGwvU01EUlpHXFxuZHJpbGxlci9NXFxuZHJpbGxtYXN0ZXIvU01cXG5kcmluay9TTVJCSlpHXFxuZHJpbmthYmxlL1VcXG5kcmlua2VyL01cXG5kcmlwL01TXFxuZHJpcHBlZFxcbmRyaXBwaW5nL1NNXFxuZHJpcHB5L1RSXFxuZHJpdmUvUlNNWkdKXFxuZHJpdmVsL1NaR01EUlxcbmRyaXZlbGVyL01cXG5kcml2ZW5cXG5kcml2ZXIvTVxcbmRyaXZlc2hhZnQvU01cXG5kcml2ZXdheS9NU1xcbmRyaXp6bGUvTUdEU1xcbmRyaXp6bHlcXG5kcm9ndWUvU01cXG5kcm9pZC9TXFxuZHJvbGwvUlBUXFxuZHJvbGxlcnkvU01cXG5kcm9sbG5lc3MvTVxcbmRyb2xseVxcbmRyb21lZGFyeS9TTVxcbmRyb25lL0RTTUdcXG5kcm9vbC9TTURHXFxuZHJvb3AvR1NNRFxcbmRyb29waW5lc3MvTVxcbmRyb29weS9UUFJcXG5kcm9wL01TXFxuZHJvcGtpY2svTVNcXG5kcm9wbGV0L1NNXFxuZHJvcG91dC9TTVxcbmRyb3BwZWRcXG5kcm9wcGVyL1NNXFxuZHJvcHBpbmcvU1xcbmRyb3BwaW5ncy9NXFxuZHJvcHNpY2FsXFxuZHJvcHN5L01cXG5kcm9zcy9NXFxuZHJvdWdodC9TTVxcbmRyb3ZlL1JTTVpcXG5kcm92ZXIvTVxcbmRyb3duL0dTSkRcXG5kcm93bmluZy9NXFxuZHJvd3NlL01HRFNcXG5kcm93c2lseVxcbmRyb3dzaW5lc3MvTVxcbmRyb3dzeS9SVFBcXG5kcnViL1NcXG5kcnViYmVkXFxuZHJ1YmJlci9TTVxcbmRydWJiaW5nL01TXFxuZHJ1ZGdlL01HRFNcXG5kcnVkZ2VyeS9NXFxuZHJ1Zy9NU1xcbmRydWdnZWRcXG5kcnVnZ2llL1NNXFxuZHJ1Z2dpbmdcXG5kcnVnZ2lzdC9TTVxcbmRydWdneVxcbmRydWdzdG9yZS9NU1xcbmRydWlkL1NNXFxuZHJ1aWRpc20vTVxcbmRydW0vTVNcXG5kcnVtYmVhdC9TTVxcbmRydW1saW4vU01cXG5kcnVtbWVkXFxuZHJ1bW1lci9TTVxcbmRydW1taW5nXFxuZHJ1bXN0aWNrL1NNXFxuZHJ1bmsvU1RNTlJcXG5kcnVua2FyZC9NU1xcbmRydW5rZW4vUFlcXG5kcnVua2VubmVzcy9NXFxuZHJ1cGUvU01cXG5kcnV0aGVycy9NXFxuZHJ5L1pUR0RSU01ZXFxuZHJ5YWQvU01cXG5kcnllci9TTVxcbmRyeW5lc3MvTVxcbmRyeXNcXG5kcnl3YWxsL01cXG5kdWFsXFxuZHVhbGlzbS9NXFxuZHVhbGl0eS9NXFxuZHViL1NNXFxuZHViYmVkXFxuZHViYmVyL1NNXFxuZHViYmluL01cXG5kdWJiaW5nXFxuZHViaWV0eS9NXFxuZHViaW91cy9ZUFxcbmR1YmlvdXNuZXNzL01cXG5kdWNhbFxcbmR1Y2F0L1NNXFxuZHVjaGVzcy9NU1xcbmR1Y2h5L1NNXFxuZHVjay9NREdTXFxuZHVja2JpbGwvU01cXG5kdWNrYm9hcmRzXFxuZHVja2xpbmcvU01cXG5kdWNrcGlucy9NXFxuZHVja3dlZWQvTVxcbmR1Y2t5L1RSU01cXG5kdWN0J3MvS1xcbmR1Y3QvQ0tJRlNcXG5kdWN0aWxlXFxuZHVjdGlsaXR5L01cXG5kdWN0aW5nXFxuZHVjdGxlc3NcXG5kdWQvR1NNRFxcbmR1ZGUvTVNcXG5kdWRnZW9uL01cXG5kdWUvU01cXG5kdWVsL01EUkpaR1NcXG5kdWVsZXIvTVxcbmR1ZWxpc3QvU01cXG5kdWVubmEvTVNcXG5kdWV0L01TXFxuZHVmZi9NRFJaR1NcXG5kdWZmZXIvTVxcbmR1Z1xcbmR1Z291dC9NU1xcbmR1aFxcbmR1a2UvTVNcXG5kdWtlZG9tL1NNXFxuZHVsY2V0XFxuZHVsY2ltZXIvTVNcXG5kdWxsL0RSUFRHU1xcbmR1bGxhcmQvU01cXG5kdWxsbmVzcy9NXFxuZHVsbHlcXG5kdWx5L1VcXG5kdW1iL1JZUFRcXG5kdW1iYmVsbC9TTVxcbmR1bWJmb3VuZC9TREdcXG5kdW1ibmVzcy9NXFxuZHVtYm8vU1xcbmR1bWJzdHJ1Y2tcXG5kdW1id2FpdGVyL1NNXFxuZHVtZHVtL01TXFxuZHVtbXkvU01cXG5kdW1wL01EUlpHU1xcbmR1bXBpbmVzcy9NXFxuZHVtcGxpbmcvU01cXG5kdW1wc2l0ZS9TXFxuZHVtcHN0ZXIvU01cXG5kdW1weS9QVFJcXG5kdW4vU01cXG5kdW5jZS9TTVxcbmR1bmRlcmhlYWQvTVNcXG5kdW5lL01TXFxuZHVuZy9NREdTXFxuZHVuZ2FyZWUvTVNcXG5kdW5nZW9uL1NNXFxuZHVuZ2hpbGwvTVNcXG5kdW5rL01ER1NcXG5kdW5uZWRcXG5kdW5uZXJcXG5kdW5uZXN0XFxuZHVubmluZ1xcbmR1bm5vXFxuZHVvL1NNXFxuZHVvZGVjaW1hbFxcbmR1b2RlbmFcXG5kdW9kZW5hbFxcbmR1b2RlbnVtL01cXG5kdW9wb2x5L1NcXG5kdXBlL01aR0RSU1xcbmR1cGVyL01cXG5kdXBsZVxcbmR1cGxleC9NU1xcbmR1cGxpY2F0ZSdzXFxuZHVwbGljYXRlL0FHTkRTXFxuZHVwbGljYXRpb24vQU1cXG5kdXBsaWNhdG9yL01TXFxuZHVwbGljaXRvdXNcXG5kdXBsaWNpdHkvTVxcbmR1cmFiaWxpdHkvTVxcbmR1cmFibGVcXG5kdXJhYmx5XFxuZHVyYW5jZS9NXFxuZHVyYXRpb24vTVxcbmR1cmVzcy9NXFxuZHVyaW5nXFxuZHVyc3RcXG5kdXJ1bS9NXFxuZHVzay9NXFxuZHVza2luZXNzL01cXG5kdXNreS9SVFBcXG5kdXN0L01EUlpHU1xcbmR1c3RiaW4vU01cXG5kdXN0Y2FydC9TXFxuZHVzdGVyL01cXG5kdXN0aW5lc3MvTVxcbmR1c3RsZXNzXFxuZHVzdG1hblxcbmR1c3RtZW5cXG5kdXN0cGFuL1NNXFxuZHVzdHNoZWV0L1NcXG5kdXN0eS9SVFBcXG5kdXRjaFxcbmR1dGVvdXMvWVxcbmR1dGlhYmxlXFxuZHV0aWZ1bC9ZUFxcbmR1dGlmdWxuZXNzL01cXG5kdXR5L1NNXFxuZHV2ZXQvU01cXG5kd2FyZi9TR01EXFxuZHdhcmZpc2hcXG5kd2FyZmlzbS9NXFxuZHdlZWIvU01cXG5kd2VsbC9TSlpHUlxcbmR3ZWxsZXIvTVxcbmR3ZWxsaW5nL01cXG5kd2VsdC9JXFxuZHdpbmRsZS9EU0dcXG5keWFkaWNcXG5keWJidWsvU01cXG5keWJidWtpbVxcbmR5ZS9EUlNNWkdcXG5keWVpbmcvQVxcbmR5ZXIvTVxcbmR5ZXN0dWZmL01cXG5keWluZy9NXFxuZHlrZS9NU1xcbmR5bmFtaWMvTVNcXG5keW5hbWljYWwvWVxcbmR5bmFtaWNzL01cXG5keW5hbWlzbS9NXFxuZHluYW1pdGUvTVpHRFJTXFxuZHluYW1pdGVyL01cXG5keW5hbW8vU01cXG5keW5hc3RpY1xcbmR5bmFzdHkvU01cXG5keXNlbnRlcnkvTVxcbmR5c2Z1bmN0aW9uL01TXFxuZHlzZnVuY3Rpb25hbFxcbmR5c2xlY3RpYy9TTVxcbmR5c2xleGlhL01cXG5keXNsZXhpYy9TTVxcbmR5c3BlcHNpYS9NXFxuZHlzcGVwdGljL01TXFxuZHlzcGhhZ2lhXFxuZHlzcGhvcmlhXFxuZHlzcGhvcmljXFxuZHlzcHJvc2l1bS9NXFxuZHlzdG9uaWFcXG5keXN0b3BpXFxuZHlzdG9waWFcXG5keXN0b3BpYW5cXG5kelxcbmUnZW5cXG5lJ2VyXFxuZS9GRFNUXFxuZUJheS9NXFxuZU11c2ljL01cXG5lYVxcbmVhY2hcXG5lYWdlci9QVFJZXFxuZWFnZXJuZXNzL01cXG5lYWdsZS9NU1xcbmVhZ2xldC9NU1xcbmVhci9TTURZXFxuZWFyYWNoZS9TTVxcbmVhcmJ1ZC9TTVxcbmVhcmRydW0vU01cXG5lYXJmdWwvU01cXG5lYXJsL01TXFxuZWFybGRvbS9TTVxcbmVhcmxpbmVzcy9NXFxuZWFybG9iZS9TTVxcbmVhcmx5L1JUUFxcbmVhcm1hcmsvU01ER1xcbmVhcm11ZmYvU01cXG5lYXJuL0RSWlRHSlNcXG5lYXJuZWQvVVxcbmVhcm5lci9NXFxuZWFybmVzdC9TTVlQXFxuZWFybmVzdG5lc3MvTVxcbmVhcm5pbmdzL01cXG5lYXJwaG9uZS9NU1xcbmVhcnBpZWNlL1NcXG5lYXJwbHVnL1NNXFxuZWFycmluZy9TTVxcbmVhcnNob3QvTVxcbmVhcnNwbGl0dGluZ1xcbmVhcnRoJ3NcXG5lYXJ0aC9VRFlHXFxuZWFydGhib3VuZFxcbmVhcnRoZW5cXG5lYXJ0aGVud2FyZS9NXFxuZWFydGhpbmVzcy9NXFxuZWFydGhsaW5nL01TXFxuZWFydGhseS9SVFxcbmVhcnRocXVha2UvU01cXG5lYXJ0aHMvVVxcbmVhcnRoc2hha2luZ1xcbmVhcnRod2FyZC9TXFxuZWFydGh3b3JrL01TXFxuZWFydGh3b3JtL01TXFxuZWFydGh5L1JUUFxcbmVhcndheC9NXFxuZWFyd2lnL1NNXFxuZWFzZS9FRFNNXFxuZWFzZWwvU01cXG5lYXNlbWVudC9TTVxcbmVhc2lseS9VXFxuZWFzaW5lc3MvVU1cXG5lYXNpbmdcXG5lYXN0L01cXG5lYXN0Ym91bmRcXG5lYXN0ZXJseS9TTVxcbmVhc3Rlcm4vWlJcXG5lYXN0ZXJuZXIvTVxcbmVhc3Rlcm5tb3N0XFxuZWFzdHdhcmQvU1xcbmVhc3kvVVJUUFxcbmVhc3lnb2luZ1xcbmVhdC9aR0JTTlJcXG5lYXRhYmxlL1NNXFxuZWF0ZW4vVVxcbmVhdGVyL01cXG5lYXRlcnkvU01cXG5lYXZlL01TXFxuZWF2ZXNkcm9wL1NcXG5lYXZlc2Ryb3BwZWRcXG5lYXZlc2Ryb3BwZXIvU01cXG5lYXZlc2Ryb3BwaW5nXFxuZWJiL1NNREdcXG5lYm9ueS9TTVxcbmVidWxsaWVuY2UvTVxcbmVidWxsaWVudC9ZXFxuZWJ1bGxpdGlvbi9NXFxuZWNjZW50cmljL1NNXFxuZWNjZW50cmljYWxseVxcbmVjY2VudHJpY2l0eS9TTVxcbmVjY2xcXG5lY2NsZXNpYWxcXG5lY2NsZXNpYXN0aWMvU01cXG5lY2NsZXNpYXN0aWNhbC9ZXFxuZWNoZWxvbi9TTVxcbmVjaGlkbmFcXG5lY2hpbm9kZXJtL1NNXFxuZWNobydzXFxuZWNoby9BREdcXG5lY2hvZXMvQVxcbmVjaG9pY1xcbmVjaG9sb2NhdGlvbi9NXFxuZWNob3NcXG5lY2xhaXIvU01cXG5lY2xhdC9NXFxuZWNsZWN0aWMvU01cXG5lY2xlY3RpY2FsbHlcXG5lY2xlY3RpY2lzbS9NXFxuZWNsaXBzZS9EU01HXFxuZWNsaXB0aWMvTVxcbmVjbG9ndWUvU01cXG5lY29jaWRlL01cXG5lY29sXFxuZWNvbG9naWNcXG5lY29sb2dpY2FsL1lcXG5lY29sb2dpc3QvTVNcXG5lY29sb2d5L01cXG5lY29uXFxuZWNvbm9tZXRyaWMvU1xcbmVjb25vbWljL1NcXG5lY29ub21pY2FsL1VZXFxuZWNvbm9taWNzL01cXG5lY29ub21pc3QvU01cXG5lY29ub21pemUvRFJTWkdcXG5lY29ub21pemVyL01cXG5lY29ub215L1NNXFxuZWNvc3lzdGVtL01TXFxuZWNvdG91cmlzbS9NXFxuZWNvdG91cmlzdC9NU1xcbmVjcnUvTVxcbmVjc3Rhc3kvU01cXG5lY3N0YXRpY1xcbmVjc3RhdGljYWxseVxcbmVjdS9TXFxuZWN1bWVuaWNhbC9ZXFxuZWN1bWVuaWNpc20vTVxcbmVjdW1lbmlzbS9NXFxuZWN6ZW1hL01cXG5lZC9BQ1NNXFxuZWRhbWFtZVxcbmVkZHkvRFNNR1xcbmVkZWx3ZWlzcy9NXFxuZWRlbWEvU01cXG5lZGdlL01aR0pEUlNcXG5lZGdlci9NXFxuZWRnZXdpc2VcXG5lZGdpbHlcXG5lZGdpbmVzcy9NXFxuZWRnaW5nL01cXG5lZGd5L1JUUFxcbmVkaWJpbGl0eS9NXFxuZWRpYmxlL1NNUFxcbmVkaWJsZW5lc3MvTVxcbmVkaWN0L1NNXFxuZWRpZmljYXRpb24vTVxcbmVkaWZpY2UvU01cXG5lZGlmaWVyL01cXG5lZGlmeS9EUlNaR05cXG5lZGlmeWluZy9VXFxuZWRpdCdzXFxuZWRpdC9BREdTXFxuZWRpdGFibGVcXG5lZGl0ZWQvVVxcbmVkaXRpb24vTVNcXG5lZGl0b3IvU01cXG5lZGl0b3JpYWwvU01ZXFxuZWRpdG9yaWFsaXplL0RTR1xcbmVkaXRvcnNoaXAvTVxcbmVkdWNcXG5lZHVjYWJpbGl0eS9NXFxuZWR1Y2FibGUvSVxcbmVkdWNhdGUvQURTR05WXFxuZWR1Y2F0ZWQvVVxcbmVkdWNhdGlvbi9BTVxcbmVkdWNhdGlvbmFsL1lcXG5lZHVjYXRpb25hbGlzdC9TXFxuZWR1Y2F0aW9uaXN0L1NcXG5lZHVjYXRpb25zXFxuZWR1Y2F0b3IvTVNcXG5lZHVjZS9EU0dCXFxuZWR1dGFpbm1lbnQvTVxcbmVla1xcbmVlbC9TTVxcbmVlcmllL1JUXFxuZWVyaWx5XFxuZWVyaW5lc3MvTVxcbmVmZi9HU0RcXG5lZmZhY2UvRFNMR1xcbmVmZmFjZW1lbnQvTVxcbmVmZmVjdC9TTURHVlxcbmVmZmVjdGl2ZS9JUFlcXG5lZmZlY3RpdmVuZXNzL0lNXFxuZWZmZWN0dWFsL0lZXFxuZWZmZWN0dWF0ZS9EU0dcXG5lZmZlbWluYWN5L01cXG5lZmZlbWluYXRlL1lcXG5lZmZlbmRpL1NNXFxuZWZmZXJlbnRcXG5lZmZlcnZlc2NlL0dEU1xcbmVmZmVydmVzY2VuY2UvTVxcbmVmZmVydmVzY2VudC9ZXFxuZWZmZXRlL1lQXFxuZWZmZXRlbmVzcy9NXFxuZWZmaWNhY2lvdXMvWVxcbmVmZmljYWN5L0lNXFxuZWZmaWNpZW5jeS9JU01cXG5lZmZpY2llbnQvSVlcXG5lZmZpZ3kvU01cXG5lZmZsb3Jlc2NlbmNlL01cXG5lZmZsb3Jlc2NlbnRcXG5lZmZsdWVuY2UvTVxcbmVmZmx1ZW50L01TXFxuZWZmbHV2aWFcXG5lZmZsdXZpdW0vTVxcbmVmZmx1eFxcbmVmZm9ydC9TTVxcbmVmZm9ydGZ1bFxcbmVmZm9ydGxlc3MvWVBcXG5lZmZvcnRsZXNzbmVzcy9NXFxuZWZmcm9udGVyeS9NXFxuZWZmdWxnZW5jZS9NXFxuZWZmdWxnZW50XFxuZWZmdXNlL0RTR05WWFxcbmVmZnVzaW9uL01cXG5lZmZ1c2l2ZS9ZUFxcbmVmZnVzaXZlbmVzcy9NXFxuZWdhZFxcbmVnYWxpdGFyaWFuL1NNXFxuZWdhbGl0YXJpYW5pc20vTVxcbmVnZy9HU01EXFxuZWdnYmVhdGVyL01TXFxuZWdnY3VwL1NNXFxuZWdnaGVhZC9TTVxcbmVnZ25vZy9NXFxuZWdncGxhbnQvTVNcXG5lZ2dzaGVsbC9TTVxcbmVnbGFudGluZS9TTVxcbmVnby9TTVxcbmVnb2NlbnRyaWMvTVNcXG5lZ29jZW50cmljYWxseVxcbmVnb2NlbnRyaWNpdHkvTVxcbmVnb2lzbS9NXFxuZWdvaXN0L1NNXFxuZWdvaXN0aWNcXG5lZ29pc3RpY2FsL1lcXG5lZ29tYW5pYS9NXFxuZWdvbWFuaWFjL01TXFxuZWdvdGlzbS9NXFxuZWdvdGlzdC9TTVxcbmVnb3Rpc3RpY1xcbmVnb3Rpc3RpY2FsL1lcXG5lZ3JlZ2lvdXMvUFlcXG5lZ3JlZ2lvdXNuZXNzL01cXG5lZ3Jlc3MvTVNcXG5lZ3JldC9TTVxcbmVoXFxuZWlkZXIvU01cXG5laWRlcmRvd24vTVNcXG5laWdlbnZhbHVlL1NcXG5laWdlbnZlY3Rvci9TXFxuZWlnaHQvU01cXG5laWdodGVlbi9NSFNcXG5laWdodGVlbnRoL01cXG5laWdodGVlbnRoc1xcbmVpZ2h0aC9NXFxuZWlnaHRoc1xcbmVpZ2h0aWV0aC9NXFxuZWlnaHRpZXRoc1xcbmVpZ2h0eS9TTUhcXG5laW5zdGVpbml1bS9NXFxuZWlzdGVkZGZvZC9TXFxuZWl0aGVyXFxuZWphY3VsYXRlL0dOWERTXFxuZWphY3VsYXRpb24vTVxcbmVqYWN1bGF0b3J5XFxuZWplY3QvU0RHXFxuZWplY3Rpb24vTVNcXG5lamVjdG9yL1NNXFxuZWtlL0RTR1xcbmVsYWJvcmF0ZS9ZR05EU1BYXFxuZWxhYm9yYXRlbmVzcy9NXFxuZWxhYm9yYXRpb24vTVxcbmVsYW4vTVxcbmVsYW5kL1NNXFxuZWxhcHNlL0RTR1xcbmVsYXN0aWMvTVNcXG5lbGFzdGljYWxseVxcbmVsYXN0aWNhdGVkXFxuZWxhc3RpY2l0eS9NXFxuZWxhc3RpY2l6ZS9EU0dcXG5lbGF0ZS9EU0dOXFxuZWxhdGVkL1lcXG5lbGF0aW9uL01cXG5lbGJvdy9TTURHXFxuZWxib3dyb29tL01cXG5lbGRlci9TTVlcXG5lbGRlcmJlcnJ5L1NNXFxuZWxkZXJjYXJlL01cXG5lbGRlc3RcXG5lbGRyaXRjaFxcbmVsZWN0J3NcXG5lbGVjdC9BU0RHVlxcbmVsZWN0YWJsZVxcbmVsZWN0aW9uL0FNU1xcbmVsZWN0aW9uZWVyL0RHU1xcbmVsZWN0aXZlL01TXFxuZWxlY3Rvci9NU1xcbmVsZWN0b3JhbC9ZXFxuZWxlY3RvcmF0ZS9NU1xcbmVsZWN0cmljL1NcXG5lbGVjdHJpY2FsL1lcXG5lbGVjdHJpY2lhbi9NU1xcbmVsZWN0cmljaXR5L01cXG5lbGVjdHJpZmljYXRpb24vTVxcbmVsZWN0cmlmaWVyL01cXG5lbGVjdHJpZnkvWkdORFJTXFxuZWxlY3Ryb2NhcmRpb2dyYW0vTVNcXG5lbGVjdHJvY2FyZGlvZ3JhcGgvTVxcbmVsZWN0cm9jYXJkaW9ncmFwaHNcXG5lbGVjdHJvY2FyZGlvZ3JhcGh5L01cXG5lbGVjdHJvY3V0ZS9EU1hHTlxcbmVsZWN0cm9jdXRpb24vTVxcbmVsZWN0cm9kZS9TTVxcbmVsZWN0cm9keW5hbWljc1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFtL01TXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoL01cXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGhpY1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFwaHNcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGh5L01cXG5lbGVjdHJvbG9naXN0L1NNXFxuZWxlY3Ryb2x5c2lzL01cXG5lbGVjdHJvbHl0ZS9NU1xcbmVsZWN0cm9seXRpY1xcbmVsZWN0cm9tYWduZXQvTVNcXG5lbGVjdHJvbWFnbmV0aWNcXG5lbGVjdHJvbWFnbmV0aWNhbGx5XFxuZWxlY3Ryb21hZ25ldGlzbS9NXFxuZWxlY3Ryb21vdGl2ZVxcbmVsZWN0cm9uL01TXFxuZWxlY3Ryb25pYy9TXFxuZWxlY3Ryb25pY2EvTVxcbmVsZWN0cm9uaWNhbGx5XFxuZWxlY3Ryb25pY3MvTVxcbmVsZWN0cm9wbGF0ZS9EU0dcXG5lbGVjdHJvc2NvcGUvU01cXG5lbGVjdHJvc2NvcGljXFxuZWxlY3Ryb3Nob2NrL01cXG5lbGVjdHJvc3RhdGljL1NcXG5lbGVjdHJvc3RhdGljcy9NXFxuZWxlY3Ryb3R5cGUvTVNcXG5lbGVjdHJvd2Vha1xcbmVsZWVtb3N5bmFyeVxcbmVsZWdhbmNlL0lNXFxuZWxlZ2FudC9JWVxcbmVsZWdpYWMvTVNcXG5lbGVnaWFjYWxcXG5lbGVneS9TTVxcbmVsZW1cXG5lbGVtZW50L01TXFxuZWxlbWVudGFsL1lcXG5lbGVtZW50YXJ5XFxuZWxlcGhhbnQvU01cXG5lbGVwaGFudGlhc2lzL01cXG5lbGVwaGFudGluZVxcbmVsZXZcXG5lbGV2YXRlL1hEU0dOXFxuZWxldmF0aW9uL01cXG5lbGV2YXRvci9NU1xcbmVsZXZlbi9TTUhcXG5lbGV2ZW5zL1NcXG5lbGV2ZW50aC9NXFxuZWxldmVudGhzXFxuZWxmL01cXG5lbGZpblxcbmVsZmlzaFxcbmVsaWNpdC9TREdcXG5lbGljaXRhdGlvbi9NXFxuZWxpZGUvRFNHXFxuZWxpZ2liaWxpdHkvSU1cXG5lbGlnaWJsZVxcbmVsaW1pbmF0ZS9YRFNHTlxcbmVsaW1pbmF0aW9uL01cXG5lbGltaW5hdG9yL1NcXG5lbGlzaW9uL01TXFxuZWxpdGUvU01cXG5lbGl0aXNtL01cXG5lbGl0aXN0L01TXFxuZWxpeGlyL1NNXFxuZWxrL1NNXFxuZWxsL1NNXFxuZWxsaXBzZS9NU1xcbmVsbGlwc2lzL01cXG5lbGxpcHNvaWQvU01cXG5lbGxpcHNvaWRhbFxcbmVsbGlwdGljXFxuZWxsaXB0aWNhbC9ZXFxuZWxtL1NNXFxuZWxvY3V0aW9uL01cXG5lbG9jdXRpb25hcnlcXG5lbG9jdXRpb25pc3QvU01cXG5lbG9kZWEvU01cXG5lbG9uZ2F0ZS9EU0dOWFxcbmVsb25nYXRpb24vTVxcbmVsb3BlL0RTR0xcXG5lbG9wZW1lbnQvTVNcXG5lbG9xdWVuY2UvTVxcbmVsb3F1ZW50L1lcXG5lbHNlXFxuZWxzZXdoZXJlXFxuZWx1Y2lkYXRlL0RTR05YXFxuZWx1Y2lkYXRpb24vTVxcbmVsdWRlL0RTR1xcbmVsdXNpdmUvWVBcXG5lbHVzaXZlbmVzcy9NXFxuZWx2ZXIvU01cXG5lbHZlc1xcbmVsdmlzaFxcbmVtJ3NcXG5lbS9TXFxuZW1hY2lhdGUvR05EU1xcbmVtYWNpYXRpb24vTVxcbmVtYWlsL1NNREdcXG5lbWFuYXRlL1hEU0dOXFxuZW1hbmF0aW9uL01cXG5lbWFuY2lwYXRlL0RTR05cXG5lbWFuY2lwYXRpb24vTVxcbmVtYW5jaXBhdG9yL01TXFxuZW1hc2N1bGF0ZS9HTkRTXFxuZW1hc2N1bGF0aW9uL01cXG5lbWJhbG0vU1pHRFJcXG5lbWJhbG1lci9NXFxuZW1iYW5rL1NMR0RcXG5lbWJhbmttZW50L1NNXFxuZW1iYXJnby9NREdcXG5lbWJhcmdvZXNcXG5lbWJhcmsvQUVHRFNcXG5lbWJhcmthdGlvbi9FTVxcbmVtYmFya2F0aW9uc1xcbmVtYmFycmFzcy9HTERTXFxuZW1iYXJyYXNzZWQvVVxcbmVtYmFycmFzc2luZy9ZXFxuZW1iYXJyYXNzbWVudC9TTVxcbmVtYmFzc3kvU01cXG5lbWJhdHRsZWRcXG5lbWJlZC9TXFxuZW1iZWRkZWRcXG5lbWJlZGRpbmdcXG5lbWJlbGxpc2gvTEdEU1xcbmVtYmVsbGlzaG1lbnQvU01cXG5lbWJlci9TTVxcbmVtYmV6emxlL1pHTERSU1xcbmVtYmV6emxlbWVudC9NXFxuZW1iZXp6bGVyL01cXG5lbWJpdHRlci9HTERTXFxuZW1iaXR0ZXJtZW50L01cXG5lbWJsYXpvbi9HRExTXFxuZW1ibGF6b25tZW50L01cXG5lbWJsZW0vU01cXG5lbWJsZW1hdGljXFxuZW1ibGVtYXRpY2FsbHlcXG5lbWJvZGltZW50L0VNXFxuZW1ib2R5L0FFR1NEXFxuZW1ib2xkZW4vREdTXFxuZW1ib2xpc20vTVNcXG5lbWJvbGl6YXRpb25cXG5lbWJvc3MvRFJTWkdcXG5lbWJvc3Nlci9NXFxuZW1ib3VjaHVyZS9NXFxuZW1ib3dlci9TR0RcXG5lbWJyYWNlL0RTTUdcXG5lbWJyYWNlYWJsZVxcbmVtYnJhc3VyZS9NU1xcbmVtYnJvY2F0aW9uL01TXFxuZW1icm9pZGVyL1NEUlpHXFxuZW1icm9pZGVyZXIvTVxcbmVtYnJvaWRlcnkvU01cXG5lbWJyb2lsL0RHTFNcXG5lbWJyb2lsbWVudC9NXFxuZW1icnlvL1NNXFxuZW1icnlvbG9naWNhbFxcbmVtYnJ5b2xvZ2lzdC9NU1xcbmVtYnJ5b2xvZ3kvTVxcbmVtYnJ5b25pY1xcbmVtY2VlL0RTTVxcbmVtY2VlaW5nXFxuZW1lbmQvU0RHXFxuZW1lbmRhdGlvbi9NU1xcbmVtZXJhbGQvTVNcXG5lbWVyZ2UvQURTR1xcbmVtZXJnZW5jZS9BTVxcbmVtZXJnZW5jeS9TTVxcbmVtZXJnZW50XFxuZW1lcml0YVxcbmVtZXJpdHVzXFxuZW1lcnkvTVxcbmVtZXRpYy9TTVxcbmVtZi9TXFxuZW1pZ3JhbnQvU01cXG5lbWlncmF0ZS9EU1hHTlxcbmVtaWdyYXRpb24vTVxcbmVtaWdyZS9TTVxcbmVtaW5lbmNlL01TXFxuZW1pbmVudC9ZXFxuZW1pci9NU1xcbmVtaXJhdGUvTVNcXG5lbWlzc2FyeS9TTVxcbmVtaXNzaW9uL1NNXFxuZW1pdC9TXFxuZW1pdHRlZFxcbmVtaXR0ZXIvTVNcXG5lbWl0dGluZ1xcbmVtby9TTVxcbmVtb2ppL1NNXFxuZW1vbGxpZW50L01TXFxuZW1vbHVtZW50L01TXFxuZW1vdGUvWERTR05WXFxuZW1vdGljb24vU01cXG5lbW90aW9uL01cXG5lbW90aW9uYWwvVVlcXG5lbW90aW9uYWxpc20vTVxcbmVtb3Rpb25hbGl6ZS9HRFNcXG5lbW90aW9ubGVzc1xcbmVtb3RpdmUvWVxcbmVtcGF0aGV0aWNcXG5lbXBhdGhpY2FsbHlcXG5lbXBhdGhpemUvRFNHXFxuZW1wYXRoeS9NXFxuZW1wZXJvci9NU1xcbmVtcGhhc2VzXFxuZW1waGFzaXMvTVxcbmVtcGhhc2l6ZS9BR0RTXFxuZW1waGF0aWMvVVxcbmVtcGhhdGljYWxseVxcbmVtcGh5c2VtYS9NXFxuZW1waXJlL1NNXFxuZW1waXJpY1xcbmVtcGlyaWNhbC9ZXFxuZW1waXJpY2lzbS9NXFxuZW1waXJpY2lzdC9TTVxcbmVtcGxhY2VtZW50L1NNXFxuZW1wbG95J3NcXG5lbXBsb3kvQURHTFNcXG5lbXBsb3lhYmxlL1VcXG5lbXBsb3llZS9TTVxcbmVtcGxveWVyL1NNXFxuZW1wbG95bWVudC9VQU1cXG5lbXBsb3ltZW50c1xcbmVtcG9yaXVtL1NNXFxuZW1wb3dlci9TREdMXFxuZW1wb3dlcm1lbnQvTVxcbmVtcHJlc3MvTVNcXG5lbXB0aWx5XFxuZW1wdGluZXNzL01cXG5lbXB0eS9UR1BEUlNNXFxuZW1weXJlYW4vTVxcbmVtdS9TTVxcbmVtdWxhdGUvRFNHTlZYXFxuZW11bGF0aW9uL01cXG5lbXVsYXRvci9TTVxcbmVtdWxzaWZpY2F0aW9uL01cXG5lbXVsc2lmaWVyL01cXG5lbXVsc2lmeS9ORFJTWkdcXG5lbXVsc2lvbi9NU1xcbmVuL1NNXFxuZW5hYmxlL0RSU1pHXFxuZW5hYmxlci9NXFxuZW5hY3QvQVNMREdcXG5lbmFjdG1lbnQvQVNNXFxuZW5hbWVsL0pTWkdNRFJcXG5lbmFtZWxlci9NXFxuZW5hbWVsd2FyZS9NXFxuZW5hbW9yL1NHRFxcbmVuY1xcbmVuY2FtcC9MU0dEXFxuZW5jYW1wbWVudC9NU1xcbmVuY2Fwc3VsYXRlL1hHTkRTXFxuZW5jYXBzdWxhdGlvbi9NXFxuZW5jYXNlL0xEU0dcXG5lbmNhc2VtZW50L01cXG5lbmNlcGhhbGl0aWNcXG5lbmNlcGhhbGl0aXMvTVxcbmVuY2hhaW4vREdTXFxuZW5jaGFudC9FTERHU1xcbmVuY2hhbnRlci9NU1xcbmVuY2hhbnRpbmcvWVxcbmVuY2hhbnRtZW50L0VNXFxuZW5jaGFudG1lbnRzXFxuZW5jaGFudHJlc3MvTVNcXG5lbmNoaWxhZGEvU01cXG5lbmNpcGhlci9TR0RcXG5lbmNpcmNsZS9EU0dMXFxuZW5jaXJjbGVtZW50L01cXG5lbmNsXFxuZW5jbGF2ZS9NU1xcbmVuY2xvc2UvR0RTXFxuZW5jbG9zZWQvVVxcbmVuY2xvc3VyZS9TTVxcbmVuY29kZS9EUlNaR1xcbmVuY29kZXIvTVxcbmVuY29taXVtL01TXFxuZW5jb21wYXNzL0dEU1xcbmVuY29yZS9EU01HXFxuZW5jb3VudGVyL0dTTURcXG5lbmNvdXJhZ2UvRFNMR1xcbmVuY291cmFnZW1lbnQvU01cXG5lbmNvdXJhZ2luZy9ZXFxuZW5jcm9hY2gvR0xEU1xcbmVuY3JvYWNobWVudC9TTVxcbmVuY3J1c3QvREdTXFxuZW5jcnVzdGF0aW9uL1NNXFxuZW5jcnlwdC9ER1NcXG5lbmNyeXB0aW9uXFxuZW5jdW1iZXIvRUdTRFxcbmVuY3VtYmVyZWQvVVxcbmVuY3VtYnJhbmNlL01TXFxuZW5jeVxcbmVuY3ljbGljYWwvU01cXG5lbmN5Y2xvcGVkaWEvTVNcXG5lbmN5Y2xvcGVkaWNcXG5lbmN5c3QvTFNHRFxcbmVuY3lzdG1lbnQvTVxcbmVuZC9HVlNKTURcXG5lbmRhbmdlci9TR0RMXFxuZW5kYW5nZXJtZW50L01cXG5lbmRlYXIvU0dMRFxcbmVuZGVhcmluZy9ZXFxuZW5kZWFybWVudC9TTVxcbmVuZGVhdm9yL0dTTURcXG5lbmRlbWljL01TXFxuZW5kZW1pY2FsbHlcXG5lbmRnYW1lL1NcXG5lbmRpbmcvTVxcbmVuZGl2ZS9TTVxcbmVuZGxlc3MvUFlcXG5lbmRsZXNzbmVzcy9NXFxuZW5kbW9zdFxcbmVuZG9jYXJkaXRpc1xcbmVuZG9jcmluZS9NU1xcbmVuZG9jcmlub2xvZ2lzdC9NU1xcbmVuZG9jcmlub2xvZ3kvTVxcbmVuZG9nZW5vdXMvWVxcbmVuZG9tZXRyaWFsXFxuZW5kb21ldHJpb3Npc1xcbmVuZG9tZXRyaXVtXFxuZW5kb3JwaGluL01TXFxuZW5kb3JzZS9MWkdEUlNcXG5lbmRvcnNlbWVudC9NU1xcbmVuZG9yc2VyL01cXG5lbmRvc2NvcGUvTVNcXG5lbmRvc2NvcGljXFxuZW5kb3Njb3B5L01cXG5lbmRvdGhlbGlhbFxcbmVuZG90aGVybWljXFxuZW5kb3RyYWNoZWFsXFxuZW5kb3cvU0RMR1xcbmVuZG93bWVudC9NU1xcbmVuZHBvaW50L1NNXFxuZW5kdWUvRFNHXFxuZW5kdXJhYmxlL1VcXG5lbmR1cmFuY2UvTVxcbmVuZHVyZS9EU0JHXFxuZW5kd2F5c1xcbmVuZW1hL1NNXFxuZW5lbXkvU01cXG5lbmVyZ2V0aWNcXG5lbmVyZ2V0aWNhbGx5XFxuZW5lcmdpemUvWkdEUlNcXG5lbmVyZ2l6ZXIvTVxcbmVuZXJneS9TTVxcbmVuZXJ2YXRlL0dORFNcXG5lbmVydmF0aW9uL01cXG5lbmZlZWJsZS9HRFNMXFxuZW5mZWVibGVtZW50L01cXG5lbmZpbGFkZS9EU01HXFxuZW5mb2xkL1NHRFxcbmVuZm9yY2UvTFpHRFJTXFxuZW5mb3JjZWFibGUvVVxcbmVuZm9yY2VkL1VcXG5lbmZvcmNlbWVudC9NXFxuZW5mb3JjZXIvTVxcbmVuZnJhbmNoaXNlL0VHRFNMXFxuZW5mcmFuY2hpc2VtZW50L0VNXFxuZW5nYWdlL0VBRFNHXFxuZW5nYWdlbWVudC9FTVNcXG5lbmdhZ2luZ2x5XFxuZW5nZW5kZXIvU0dEXFxuZW5naW5lL1NNXFxuZW5naW5lZXIvTURHU1xcbmVuZ2luZWVyaW5nL01cXG5lbmdvcmdlL0xHRFNcXG5lbmdvcmdlbWVudC9NXFxuZW5ncmFtL1NNXFxuZW5ncmF2ZS9aR0pEUlNcXG5lbmdyYXZlci9NXFxuZW5ncmF2aW5nL01cXG5lbmdyb3NzL0dMRFNcXG5lbmdyb3NzbWVudC9NXFxuZW5ndWxmL1NMR0RcXG5lbmd1bGZtZW50L01cXG5lbmhhbmNlL0xaR0RSU1xcbmVuaGFuY2VtZW50L1NNXFxuZW5pZ21hL1NNXFxuZW5pZ21hdGljXFxuZW5pZ21hdGljYWxseVxcbmVuamFtYm1lbnQvU01cXG5lbmpvaW4vU0dEXFxuZW5qb3kvR0JMU0RcXG5lbmpveWFibHlcXG5lbmpveW1lbnQvU01cXG5lbmxhcmdlL0xaR0RSU1xcbmVubGFyZ2VhYmxlXFxuZW5sYXJnZW1lbnQvTVNcXG5lbmxhcmdlci9NXFxuZW5saWdodGVuL1NHTERcXG5lbmxpZ2h0ZW5lZC9VXFxuZW5saWdodGVubWVudC9NXFxuZW5saXN0L0FER1NMXFxuZW5saXN0ZWUvU01cXG5lbmxpc3RtZW50L0FNXFxuZW5saXN0bWVudHNcXG5lbmxpdmVuL1NMREdcXG5lbmxpdmVubWVudC9NXFxuZW5tZXNoL0RTR0xcXG5lbm1lc2htZW50L01cXG5lbm1pdHkvU01cXG5lbm5vYmxlL0RTR0xcXG5lbm5vYmxlbWVudC9NXFxuZW5udWkvTVxcbmVub3JtaXR5L1NNXFxuZW5vcm1vdXMvUFlcXG5lbm9ybW91c25lc3MvTVxcbmVub3VnaC9NXFxuZW5wbGFuZS9EU0dcXG5lbnF1ZXVlL0RTXFxuZW5xdWlyZXIvU1xcbmVucXVpcmluZ2x5XFxuZW5yYWdlL0dEU1xcbmVucmFwdHVyZS9EU0dcXG5lbnJpY2gvRFNMR1xcbmVucmljaG1lbnQvTVxcbmVucm9sbC9ETFNHXFxuZW5yb2xsbWVudC9NU1xcbmVuc2NvbmNlL0RTR1xcbmVuc2VtYmxlL1NNXFxuZW5zaHJpbmUvR0xEU1xcbmVuc2hyaW5lbWVudC9NXFxuZW5zaHJvdWQvREdTXFxuZW5zaWduL01TXFxuZW5zaWxhZ2UvTVxcbmVuc2xhdmUvRFNHTFxcbmVuc2xhdmVtZW50L01cXG5lbnNuYXJlL0RTTEdcXG5lbnNuYXJlbWVudC9NXFxuZW5zdWUvRFNHXFxuZW5zdXJlL1pHRFJTXFxuZW5zdXJlci9NXFxuZW50YWlsL0RTR0xcXG5lbnRhaWxtZW50L01cXG5lbnRhbmdsZS9FRFNMR1xcbmVudGFuZ2xlbWVudC9FTVxcbmVudGFuZ2xlbWVudHNcXG5lbnRlbnRlL1NNXFxuZW50ZXIvQVNHRFxcbmVudGVyYWxcXG5lbnRlcmljXFxuZW50ZXJpdGlzL01cXG5lbnRlcnByaXNlL01HU1xcbmVudGVycHJpc2luZy9ZXFxuZW50ZXJ0YWluL1pHRFJTTFxcbmVudGVydGFpbmVyL01cXG5lbnRlcnRhaW5pbmcvTVlcXG5lbnRlcnRhaW5tZW50L01TXFxuZW50aHJhbGwvR0RTTFxcbmVudGhyYWxsbWVudC9NXFxuZW50aHJvbmUvR0RTTFxcbmVudGhyb25lbWVudC9TTVxcbmVudGh1c2UvRFNHXFxuZW50aHVzaWFzbS9NU1xcbmVudGh1c2lhc3QvTVNcXG5lbnRodXNpYXN0aWMvVVxcbmVudGh1c2lhc3RpY2FsbHlcXG5lbnRpY2UvR0RTTFxcbmVudGljZW1lbnQvTVNcXG5lbnRpY2luZy9ZXFxuZW50aXJlL1lcXG5lbnRpcmV0eS9NXFxuZW50aXRsZS9EU0dMXFxuZW50aXRsZW1lbnQvU01cXG5lbnRpdHkvU01cXG5lbnRvbWIvRFNHTFxcbmVudG9tYm1lbnQvTVxcbmVudG9tb2xvZ2ljYWxcXG5lbnRvbW9sb2dpc3QvTVNcXG5lbnRvbW9sb2d5L01cXG5lbnRvdXJhZ2UvU01cXG5lbnRyJ2FjdGVcXG5lbnRyYWlscy9NXFxuZW50cmFpbmVkXFxuZW50cmFuY2UvTERTTUdcXG5lbnRyYW5jZW1lbnQvTVxcbmVudHJhbmNpbmcvWVxcbmVudHJhbnQvU01cXG5lbnRyYXAvTFNcXG5lbnRyYXBtZW50L01cXG5lbnRyYXBwZWRcXG5lbnRyYXBwaW5nXFxuZW50cmVhdC9HU0RcXG5lbnRyZWF0aW5nL1lcXG5lbnRyZWF0eS9TTVxcbmVudHJlZS9NU1xcbmVudHJlbmNoL0RTR0xcXG5lbnRyZW5jaG1lbnQvTVNcXG5lbnRyZXByZW5ldXIvU01cXG5lbnRyZXByZW5ldXJpYWxcXG5lbnRyZXByZW5ldXJzaGlwXFxuZW50cm9weS9NXFxuZW50cnVzdC9TR0RcXG5lbnRyeS9BU01cXG5lbnRyeXBob25lL1NcXG5lbnRyeXdheS9NU1xcbmVudHdpbmUvRFNHXFxuZW51bWVyYWJsZVxcbmVudW1lcmF0ZS9EU0dOWFxcbmVudW1lcmF0aW9uL01cXG5lbnVtZXJhdG9yL1NNXFxuZW51bmNpYXRlL0RTR05cXG5lbnVuY2lhdGlvbi9NXFxuZW51cmVzaXMvTVxcbmVudmVsb3AvU0xEUlpHXFxuZW52ZWxvcGUvU01cXG5lbnZlbG9wZXIvTVxcbmVudmVsb3BtZW50L01cXG5lbnZlbm9tL1NER1xcbmVudmlhYmxlL1VcXG5lbnZpYWJseVxcbmVudmlvdXMvUFlcXG5lbnZpb3VzbmVzcy9NXFxuZW52aXJvbm1lbnQvTVNcXG5lbnZpcm9ubWVudGFsL1lcXG5lbnZpcm9ubWVudGFsaXNtL01cXG5lbnZpcm9ubWVudGFsaXN0L1NNXFxuZW52aXJvbnMvTVxcbmVudmlzYWdlL0dEU1xcbmVudmlzaW9uL0RHU1xcbmVudm95L1NNXFxuZW52eS9EU01HXFxuZW52eWluZy9ZXFxuZW56eW1hdGljXFxuZW56eW1lL1NNXFxuZW9saWFuXFxuZW9uL1NNXFxuZW9zaW5vcGhpbC9TXFxuZW9zaW5vcGhpbGljXFxuZXBhdWxldC9TTVxcbmVwZWUvTVNcXG5lcGhlZHJpbmUvTVxcbmVwaGVtZXJhL01cXG5lcGhlbWVyYWwvWVxcbmVwaWMvTVNcXG5lcGljZW50ZXIvTVNcXG5lcGljdXJlL1NNXFxuZXBpY3VyZWFuL01TXFxuZXBpZGVtaWMvU01cXG5lcGlkZW1pY2FsbHlcXG5lcGlkZW1pb2xvZ2ljYWxcXG5lcGlkZW1pb2xvZ2lzdC9TTVxcbmVwaWRlbWlvbG9neS9NXFxuZXBpZGVybWFsXFxuZXBpZGVybWljXFxuZXBpZGVybWlzL01TXFxuZXBpZHVyYWwvU1xcbmVwaWdsb3R0aXMvTVNcXG5lcGlncmFtL1NNXFxuZXBpZ3JhbW1hdGljXFxuZXBpZ3JhcGgvTVxcbmVwaWdyYXBoc1xcbmVwaWdyYXBoeS9NXFxuZXBpbGVwc3kvTVxcbmVwaWxlcHRpYy9TTVxcbmVwaWxvZ3VlL01TXFxuZXBpbmVwaHJpbmUvTVxcbmVwaXBoYW55L1NNXFxuZXBpc2NvcGFjeS9NXFxuZXBpc2NvcGFsXFxuZXBpc2NvcGF0ZS9NXFxuZXBpc29kZS9TTVxcbmVwaXNvZGljXFxuZXBpc29kaWNhbGx5XFxuZXBpc3RlbWljXFxuZXBpc3RlbW9sb2dpY2FsXFxuZXBpc3RlbW9sb2d5XFxuZXBpc3RsZS9TTVxcbmVwaXN0b2xhcnlcXG5lcGl0YXBoL01cXG5lcGl0YXBoc1xcbmVwaXRoZWxpYWxcXG5lcGl0aGVsaXVtL01cXG5lcGl0aGV0L1NNXFxuZXBpdG9tZS9TTVxcbmVwaXRvbWl6ZS9HRFNcXG5lcG9jaC9NXFxuZXBvY2hhbFxcbmVwb2Noc1xcbmVwb255bW91c1xcbmVwb3h5L0RTTUdcXG5lcHNpbG9uL1NNXFxuZXF1YWJpbGl0eS9NXFxuZXF1YWJsZVxcbmVxdWFibHlcXG5lcXVhbC9TTURZR1xcbmVxdWFsaXR5L0lNXFxuZXF1YWxpemF0aW9uL01cXG5lcXVhbGl6ZS9aR0RSU1xcbmVxdWFsaXplci9NXFxuZXF1YW5pbWl0eS9NXFxuZXF1YXRlL0RTR05CWFxcbmVxdWF0aW9uL01cXG5lcXVhdG9yL1NNXFxuZXF1YXRvcmlhbFxcbmVxdWVycnkvU01cXG5lcXVlc3RyaWFuL1NNXFxuZXF1ZXN0cmlhbmlzbS9NXFxuZXF1ZXN0cmllbm5lL1NNXFxuZXF1aWRpc3RhbnQvWVxcbmVxdWlsYXRlcmFsL1NNXFxuZXF1aWxpYnJpdW0vRU1cXG5lcXVpbmUvU01cXG5lcXVpbm9jdGlhbFxcbmVxdWlub3gvTVNcXG5lcXVpcC9BU1xcbmVxdWlwYWdlL01TXFxuZXF1aXBtZW50L01cXG5lcXVpcG9pc2UvTVxcbmVxdWlwcGVkL1VBXFxuZXF1aXBwaW5nL0FcXG5lcXVpdGFibGUvSVxcbmVxdWl0YWJseS9JXFxuZXF1aXRhdGlvbi9NXFxuZXF1aXR5L0lTTVxcbmVxdWl2XFxuZXF1aXZhbGVuY2UvTVNcXG5lcXVpdmFsZW5jeS9TTVxcbmVxdWl2YWxlbnQvTVlTXFxuZXF1aXZvY2FsL1VZXFxuZXF1aXZvY2FsbmVzcy9NXFxuZXF1aXZvY2F0ZS9HTlhEU1xcbmVxdWl2b2NhdGlvbi9NXFxuZXF1aXZvY2F0b3IvU01cXG5lci9DXFxuZXJhL1NNXFxuZXJhZGljYWJsZS9JXFxuZXJhZGljYXRlL0RTR05cXG5lcmFkaWNhdGlvbi9NXFxuZXJhZGljYXRvci9NU1xcbmVyYXNlL0RSU0JaR1xcbmVyYXNlci9NXFxuZXJhc3VyZS9TTVxcbmVyYml1bS9NXFxuZXJlXFxuZXJlY3QvUFNHRFlcXG5lcmVjdGlsZVxcbmVyZWN0aW9uL1NNXFxuZXJlY3RuZXNzL01cXG5lcmVjdG9yL01TXFxuZXJlbG9uZ1xcbmVyZW1pdGUvTVNcXG5lcmcvU01cXG5lcmdvXFxuZXJnb25vbWljL1NcXG5lcmdvbm9taWNhbGx5XFxuZXJnb25vbWljcy9NXFxuZXJnb3N0ZXJvbC9NXFxuZXJnb3QvTVxcbmVybWluZS9TTVxcbmVyb2RlL0RTR1xcbmVyb2RpYmxlXFxuZXJvZ2Vub3VzXFxuZXJvc2lvbi9NXFxuZXJvc2l2ZVxcbmVyb3RpYy9TXFxuZXJvdGljYS9NXFxuZXJvdGljYWxseVxcbmVyb3RpY2lzbS9NXFxuZXJyL0dTRFxcbmVycmFuZC9TTVxcbmVycmFudC9JXFxuZXJyYXRhL1NNXFxuZXJyYXRpY1xcbmVycmF0aWNhbGx5XFxuZXJyYXR1bS9NXFxuZXJyb25lb3VzL1lcXG5lcnJvci9TTVxcbmVyc2F0ei9NU1xcbmVyc3RcXG5lcnN0d2hpbGVcXG5lcnVjdC9TREdcXG5lcnVjdGF0aW9uL1NNXFxuZXJ1ZGl0ZS9ZTlxcbmVydWRpdGlvbi9NXFxuZXJ1cHQvU0RHVlxcbmVydXB0aW9uL01TXFxuZXJ5c2lwZWxhcy9NXFxuZXJ5dGhyb2N5dGUvU01cXG5lcnl0aHJvbXljaW5cXG5lc2NhbGF0ZS9DRFNHTlxcbmVzY2FsYXRpb24vQ01cXG5lc2NhbGF0aW9uc1xcbmVzY2FsYXRvci9NU1xcbmVzY2FsbG9wL1NHTURcXG5lc2NhbG9wZS9TXFxuZXNjYXBhZGUvTVNcXG5lc2NhcGUvTE1HRFNcXG5lc2NhcGVlL01TXFxuZXNjYXBlbWVudC9TTVxcbmVzY2FwaXNtL01cXG5lc2NhcGlzdC9NU1xcbmVzY2Fwb2xvZ2lzdC9TXFxuZXNjYXBvbG9neVxcbmVzY2FyZ290L01TXFxuZXNjYXJvbGUvTVNcXG5lc2NhcnBtZW50L01TXFxuZXNjaGF0b2xvZ2ljYWxcXG5lc2NoYXRvbG9neVxcbmVzY2hldy9TREdcXG5lc2NvcnQvU01ER1xcbmVzY3JpdG9pcmUvTVNcXG5lc2Nyb3cvU01cXG5lc2N1ZG8vU01cXG5lc2N1dGNoZW9uL1NNXFxuZXNvcGhhZ2VhbFxcbmVzb3BoYWdpXFxuZXNvcGhhZ3VzL01cXG5lc290ZXJpY1xcbmVzb3RlcmljYWxseVxcbmVzcFxcbmVzcGFkcmlsbGUvTVNcXG5lc3BhbGllci9NRFNHXFxuZXNwZWNpYWwvWVxcbmVzcGlvbmFnZS9NXFxuZXNwbGFuYWRlL01TXFxuZXNwb3VzYWwvTVxcbmVzcG91c2UvR0RTXFxuZXNwcmVzc28vTVNcXG5lc3ByaXQvTVxcbmVzcHkvRFNHXFxuZXNxdWlyZS9TTVxcbmVzc2F5L1NNRFJaR1xcbmVzc2F5ZXIvTVxcbmVzc2F5aXN0L1NNXFxuZXNzZW5jZS9TTVxcbmVzc2VudGlhbC9JTVNcXG5lc3NlbnRpYWxseVxcbmVzdGFibGlzaC9BRVNER0xcXG5lc3RhYmxpc2htZW50L0FFTVxcbmVzdGFibGlzaG1lbnRzXFxuZXN0YXRlL1NNXFxuZXN0ZWVtL0VTTURHXFxuZXN0ZXIvU01cXG5lc3RpbWFibGUvSVxcbmVzdGltYXRlL01HTkRTWFxcbmVzdGltYXRpb24vTVxcbmVzdGltYXRvci9TTVxcbmVzdG9wcGVsXFxuZXN0cmFkaW9sXFxuZXN0cmFuZ2UvTERTR1xcbmVzdHJhbmdlbWVudC9NU1xcbmVzdHJvZ2VuL01TXFxuZXN0cm91c1xcbmVzdHJ1cy9NU1xcbmVzdHVhcnkvU01cXG5ldGEvU01cXG5ldGNcXG5ldGNoL0RSU1pHSlxcbmV0Y2hlci9NXFxuZXRjaGluZy9NXFxuZXRlcm5hbC9ZUFxcbmV0ZXJuYWxuZXNzL01cXG5ldGVybml0eS9TTVxcbmV0aGFuZS9NXFxuZXRoYW5vbC9NXFxuZXRoZXIvTVxcbmV0aGVyZWFsL1lcXG5ldGhpYy9TTVxcbmV0aGljYWwvVVlcXG5ldGhpY3MvTVxcbmV0aG1vaWRcXG5ldGhuaWMvU01cXG5ldGhuaWNhbGx5XFxuZXRobmljaXR5L01cXG5ldGhub2NlbnRyaWNcXG5ldGhub2NlbnRyaXNtL01cXG5ldGhub2dyYXBoZXIvU1xcbmV0aG5vZ3JhcGhpY1xcbmV0aG5vZ3JhcGhpY2FsbHlcXG5ldGhub2dyYXBoeVxcbmV0aG5vbG9naWNhbC9ZXFxuZXRobm9sb2dpc3QvU01cXG5ldGhub2xvZ3kvTVxcbmV0aG9sb2dpY2FsXFxuZXRob2xvZ2lzdC9NU1xcbmV0aG9sb2d5L01cXG5ldGhvcy9NXFxuZXRoeWwvTVxcbmV0aHlsZW5lL01cXG5ldGlvbGF0ZWRcXG5ldGlvbG9naWNcXG5ldGlvbG9naWNhbFxcbmV0aW9sb2d5L1NNXFxuZXRpcXVldHRlL01cXG5ldHVkZS9TTVxcbmV0eW1vbG9naWNhbC9ZXFxuZXR5bW9sb2dpc3QvU01cXG5ldHltb2xvZ3kvU01cXG5ldWNhbHlwdGlcXG5ldWNhbHlwdHVzL01TXFxuZXVjaHJlL0RTTUdcXG5ldWNsaWRlYW5cXG5ldWdlbmljL1NcXG5ldWdlbmljYWxseVxcbmV1Z2VuaWNpc3QvTVNcXG5ldWdlbmljcy9NXFxuZXVrYXJ5b3RlL1NNXFxuZXVrYXJ5b3RpY1xcbmV1bG9naXN0L01TXFxuZXVsb2dpc3RpY1xcbmV1bG9naXplL1pHRFJTXFxuZXVsb2dpemVyL01cXG5ldWxvZ3kvU01cXG5ldW51Y2gvTVxcbmV1bnVjaHNcXG5ldXBoZW1pc20vU01cXG5ldXBoZW1pc3RpY1xcbmV1cGhlbWlzdGljYWxseVxcbmV1cGhvbmlvdXMvWVxcbmV1cGhvbnkvTVxcbmV1cGhvcmlhL01cXG5ldXBob3JpY1xcbmV1cGhvcmljYWxseVxcbmV1cmVrYVxcbmV1cm8vTVNcXG5ldXJvcGl1bS9NXFxuZXV0ZWN0aWNcXG5ldXRoYW5hc2lhL01cXG5ldXRoYW5pemUvRFNHXFxuZXV0aGVuaWNzL01cXG5ldXRyb3BoaWNhdGlvblxcbmV2YWN1YXRlL1hEU0dOXFxuZXZhY3VhdGlvbi9NXFxuZXZhY3VlZS9NU1xcbmV2YWRlL0RSU1pHXFxuZXZhZGVyL01cXG5ldmFsdWF0ZS9BR05WRFNYXFxuZXZhbHVhdGlvbi9BTVxcbmV2YWx1YXRvci9TXFxuZXZhbmVzY2VuY2UvTVxcbmV2YW5lc2NlbnRcXG5ldmFuZ2VsaWNcXG5ldmFuZ2VsaWNhbC9TTVlcXG5ldmFuZ2VsaWNhbGlzbS9NXFxuZXZhbmdlbGlzbS9NXFxuZXZhbmdlbGlzdC9NU1xcbmV2YW5nZWxpc3RpY1xcbmV2YW5nZWxpemUvR0RTXFxuZXZhcG9yYXRlL0dORFNcXG5ldmFwb3JhdGlvbi9NXFxuZXZhcG9yYXRvci9TTVxcbmV2YXNpb24vU01cXG5ldmFzaXZlL1lQXFxuZXZhc2l2ZW5lc3MvTVxcbmV2ZS9BU01cXG5ldmVuL01EUllUR1NKUFxcbmV2ZW5oYW5kZWQvWVxcbmV2ZW5pbmcvTVxcbmV2ZW5uZXNzL1VNXFxuZXZlbnNvbmcvTVxcbmV2ZW50L1NNXFxuZXZlbnRmdWwvVVlcXG5ldmVudGZ1bG5lc3MvTVxcbmV2ZW50aWRlL01cXG5ldmVudHVhbC9ZXFxuZXZlbnR1YWxpdHkvU01cXG5ldmVudHVhdGUvR0RTXFxuZXZlclxcbmV2ZXJnbGFkZS9TTVxcbmV2ZXJncmVlbi9TTVxcbmV2ZXJsYXN0aW5nL01ZU1xcbmV2ZXJtb3JlXFxuZXZlcnlcXG5ldmVyeWJvZHkvTVxcbmV2ZXJ5ZGF5XFxuZXZlcnlvbmUvTVxcbmV2ZXJ5cGxhY2VcXG5ldmVyeXRoaW5nL01cXG5ldmVyeXdoZXJlXFxuZXZpY3QvU0RHXFxuZXZpY3Rpb24vTVNcXG5ldmlkZW5jZS9NR0RTXFxuZXZpZGVudC9ZXFxuZXZpbC9NUllUU1BcXG5ldmlsZG9lci9TTVxcbmV2aWxkb2luZy9NXFxuZXZpbGxlclxcbmV2aWxsZXN0XFxuZXZpbG5lc3MvTVxcbmV2aW5jZS9EU0dcXG5ldmlzY2VyYXRlL0RTR05cXG5ldmlzY2VyYXRpb24vTVxcbmV2b2NhdGlvbi9NU1xcbmV2b2NhdGl2ZS9ZXFxuZXZva2UvRFNHXFxuZXZvbHV0aW9uL01cXG5ldm9sdXRpb25hcnlcXG5ldm9sdXRpb25pc3QvU01cXG5ldm9sdmUvRFNHXFxuZXdlL1JTTVpcXG5ld2VyL01cXG5leC9NU1xcbmV4YWJ5dGUvTVNcXG5leGFjZXJiYXRlL0dORFNcXG5leGFjZXJiYXRpb24vTVxcbmV4YWN0L1NQRFJZVEdcXG5leGFjdGluZy9ZXFxuZXhhY3Rpb24vTVxcbmV4YWN0aXR1ZGUvTVxcbmV4YWN0bmVzcy9JTVxcbmV4YWdnZXJhdGUvWERTR05cXG5leGFnZ2VyYXRlZC9ZXFxuZXhhZ2dlcmF0aW9uL01cXG5leGFnZ2VyYXRvci9NU1xcbmV4YWpvdWxlL1NcXG5leGFsdC9TREdcXG5leGFsdGF0aW9uL01cXG5leGFtL01TXFxuZXhhbWluYXRpb24vQU1TXFxuZXhhbWluZS9BR0RTXFxuZXhhbWluZXIvTVNcXG5leGFtcGxlL01HRFNcXG5leGFtcGxlZC9VXFxuZXhhc3BlcmF0ZS9EU0dOXFxuZXhhc3BlcmF0ZWQvWVxcbmV4YXNwZXJhdGluZy9ZXFxuZXhhc3BlcmF0aW9uL01cXG5leGNhdmF0ZS9HTkRTWFxcbmV4Y2F2YXRpb24vTVxcbmV4Y2F2YXRvci9TTVxcbmV4Y2VlZC9HU0RcXG5leGNlZWRpbmcvWVxcbmV4Y2VsL1NcXG5leGNlbGxlZFxcbmV4Y2VsbGVuY2UvTVxcbmV4Y2VsbGVuY3kvU01cXG5leGNlbGxlbnQvWVxcbmV4Y2VsbGluZ1xcbmV4Y2Vsc2lvci9NXFxuZXhjZXB0L0dTRFxcbmV4Y2VwdGlvbi9CU01cXG5leGNlcHRpb25hYmxlL1VcXG5leGNlcHRpb25hbC9VWVxcbmV4Y2VwdGlvbmFsaXNtXFxuZXhjZXJwdC9NREdTXFxuZXhjZXNzL1ZNU1xcbmV4Y2Vzc2l2ZS9ZXFxuZXhjaGFuZ2UvRFNNR1xcbmV4Y2hhbmdlYWJsZVxcbmV4Y2hlcXVlci9TTVxcbmV4Y2lzZS9YRFNNR05cXG5leGNpc2lvbi9NXFxuZXhjaXRhYmlsaXR5L01cXG5leGNpdGFibHlcXG5leGNpdGF0aW9uL01cXG5leGNpdGUvQkRSU0xaR1xcbmV4Y2l0ZWQvWVxcbmV4Y2l0ZW1lbnQvU01cXG5leGNpdGVyL01cXG5leGNpdGluZy9ZXFxuZXhjaXRvblxcbmV4Y2xcXG5leGNsYWltL0RHU1xcbmV4Y2xhbWF0aW9uL1NNXFxuZXhjbGFtYXRvcnlcXG5leGNsdWRlL0dEU1xcbmV4Y2x1c2lvbi9NU1xcbmV4Y2x1c2lvbmFyeVxcbmV4Y2x1c2l2ZS9QTVlTXFxuZXhjbHVzaXZlbmVzcy9NXFxuZXhjbHVzaXZpdHkvTVxcbmV4Y29tbXVuaWNhdGUvR05EU1hcXG5leGNvbW11bmljYXRpb24vTVxcbmV4Y29yaWF0ZS9EU0dOWFxcbmV4Y29yaWF0aW9uL01cXG5leGNyZW1lbnQvTVxcbmV4Y3JlbWVudGFsXFxuZXhjcmVzY2VuY2UvTVNcXG5leGNyZXNjZW50XFxuZXhjcmV0YS9NXFxuZXhjcmV0ZS9YR05EU1xcbmV4Y3JldGlvbi9NXFxuZXhjcmV0b3J5XFxuZXhjcnVjaWF0aW5nL1lcXG5leGN1bHBhdGUvRFNHTlxcbmV4Y3VscGF0aW9uL01cXG5leGN1bHBhdG9yeVxcbmV4Y3Vyc2lvbi9NU1xcbmV4Y3Vyc2lvbmlzdC9NU1xcbmV4Y3Vyc2l2ZS9ZUFxcbmV4Y3Vyc2l2ZW5lc3MvTVxcbmV4Y3VzYWJsZS9JXFxuZXhjdXNhYmx5L0lcXG5leGN1c2UvRFNCTUdcXG5leGN1c2VkL1VcXG5leGVjL01TXFxuZXhlY3JhYmxlXFxuZXhlY3JhYmx5XFxuZXhlY3JhdGUvRFNHTlxcbmV4ZWNyYXRpb24vTVxcbmV4ZWN1dGUvQlhHTlZEU1xcbmV4ZWN1dGlvbi9aTVJcXG5leGVjdXRpb25lci9NXFxuZXhlY3V0aXZlL1NNXFxuZXhlY3V0b3IvTVNcXG5leGVjdXRyaWNlc1xcbmV4ZWN1dHJpeC9NXFxuZXhlZ2VzZXNcXG5leGVnZXNpcy9NXFxuZXhlZ2V0aWNcXG5leGVnZXRpY2FsXFxuZXhlbXBsYXIvU01cXG5leGVtcGxhcnlcXG5leGVtcGxpZmljYXRpb24vTVxcbmV4ZW1wbGlmeS9HRFNYTlxcbmV4ZW1wdC9TR0RcXG5leGVtcHRpb24vU01cXG5leGVyY2lzZS9EUlNNWkdcXG5leGVyY2lzZXIvTVxcbmV4ZXJ0L1NER1xcbmV4ZXJ0aW9uL01TXFxuZXhldW50XFxuZXhmb2xpYXRlL0dORFNcXG5leGhhbGF0aW9uL01TXFxuZXhoYWxlL0RTR1xcbmV4aGF1c3QvR1ZNRFNcXG5leGhhdXN0aWJsZS9JXFxuZXhoYXVzdGlvbi9NXFxuZXhoYXVzdGl2ZS9ZUFxcbmV4aGF1c3RpdmVuZXNzL01cXG5leGhpYml0L0dNRFNcXG5leGhpYml0aW9uL01TXFxuZXhoaWJpdGlvbmlzbS9NXFxuZXhoaWJpdGlvbmlzdC9NU1xcbmV4aGliaXRvci9TTVxcbmV4aGlsYXJhdGUvRFNHTlxcbmV4aGlsYXJhdGlvbi9NXFxuZXhob3J0L1NER1xcbmV4aG9ydGF0aW9uL01TXFxuZXhodW1hdGlvbi9NU1xcbmV4aHVtZS9EU0dcXG5leGlnZW5jZS9NU1xcbmV4aWdlbmN5L1NNXFxuZXhpZ2VudFxcbmV4aWd1aXR5L01cXG5leGlndW91c1xcbmV4aWxlL0RTTUdcXG5leGlsaWNcXG5leGlzdC9TREdcXG5leGlzdGVuY2UvTVNcXG5leGlzdGVudFxcbmV4aXN0ZW50aWFsL1lcXG5leGlzdGVudGlhbGlzbS9NXFxuZXhpc3RlbnRpYWxpc3QvTVNcXG5leGl0L01ER1NcXG5leG9iaW9sb2d5L01cXG5leG9kdXMvTVNcXG5leG9nZW5vdXNcXG5leG9uL01TXFxuZXhvbmVyYXRlL0dORFNcXG5leG9uZXJhdGlvbi9NXFxuZXhvcGxhbmV0L01TXFxuZXhvcmJpdGFuY2UvTVxcbmV4b3JiaXRhbnQvWVxcbmV4b3JjaXNlL0RTR1xcbmV4b3JjaXNtL1NNXFxuZXhvcmNpc3QvU01cXG5leG9za2VsZXRvbi9TTVxcbmV4b3NwaGVyZS9TTVxcbmV4b3RoZXJtaWNcXG5leG90aWMvU01cXG5leG90aWNhXFxuZXhvdGljYWxseVxcbmV4b3RpY2lzbS9NXFxuZXhwXFxuZXhwYW5kL0JHU0RcXG5leHBhbnNlL1hNTlZTXFxuZXhwYW5zaWJsZVxcbmV4cGFuc2lvbi9NXFxuZXhwYW5zaW9uYXJ5XFxuZXhwYW5zaW9uaXNtL01cXG5leHBhbnNpb25pc3QvTVNcXG5leHBhbnNpdmUvWVBcXG5leHBhbnNpdmVuZXNzL01cXG5leHBhdC9TXFxuZXhwYXRpYXRlL0dORFNcXG5leHBhdGlhdGlvbi9NXFxuZXhwYXRyaWF0ZS9EU01HTlxcbmV4cGF0cmlhdGlvbi9NXFxuZXhwZWN0L0dTRFxcbmV4cGVjdGFuY3kvTVxcbmV4cGVjdGFudC9ZXFxuZXhwZWN0YXRpb24vU01cXG5leHBlY3RvcmFudC9TTVxcbmV4cGVjdG9yYXRlL0RTR05cXG5leHBlY3RvcmF0aW9uL01cXG5leHBlZGllbmNlL0lNXFxuZXhwZWRpZW5jZXNcXG5leHBlZGllbmNpZXNcXG5leHBlZGllbmN5L0lNXFxuZXhwZWRpZW50L1NNWVxcbmV4cGVkaXRlL0RSU1pHTlhcXG5leHBlZGl0ZXIvTVxcbmV4cGVkaXRpb24vTVxcbmV4cGVkaXRpb25hcnlcXG5leHBlZGl0aW91cy9QWVxcbmV4cGVkaXRpb3VzbmVzcy9NXFxuZXhwZWwvU1xcbmV4cGVsbGVkXFxuZXhwZWxsaW5nXFxuZXhwZW5kL0dTQkRcXG5leHBlbmRhYmxlL1NNXFxuZXhwZW5kaXR1cmUvU01cXG5leHBlbnNlL01TXFxuZXhwZW5zaXZlL0lZUFxcbmV4cGVuc2l2ZW5lc3MvSU1cXG5leHBlcmllbmNlL0lNRFxcbmV4cGVyaWVuY2VzXFxuZXhwZXJpZW5jaW5nXFxuZXhwZXJpZW50aWFsXFxuZXhwZXJpbWVudC9NRFJTWkdcXG5leHBlcmltZW50YWwvWVxcbmV4cGVyaW1lbnRhdGlvbi9NXFxuZXhwZXJpbWVudGVyL01cXG5leHBlcnQvU1BNWVxcbmV4cGVydGlzZS9NXFxuZXhwZXJ0bmVzcy9NXFxuZXhwaWF0ZS9HTkRTXFxuZXhwaWF0aW9uL01cXG5leHBpYXRvcnlcXG5leHBpcmF0aW9uL01cXG5leHBpcmUvRFNHXFxuZXhwaXJlZC9VXFxuZXhwaXJ5L01cXG5leHBsYWluL0FER1NcXG5leHBsYWluYWJsZVxcbmV4cGxhaW5lZC9VXFxuZXhwbGFuYXRpb24vTVNcXG5leHBsYW5hdG9yeVxcbmV4cGxldGl2ZS9NU1xcbmV4cGxpY2FibGUvSVxcbmV4cGxpY2F0ZS9YR05EU1xcbmV4cGxpY2F0aW9uL01cXG5leHBsaWNpdC9QWVxcbmV4cGxpY2l0bmVzcy9NXFxuZXhwbG9kZS9HRFNcXG5leHBsb2l0L1pHQk1EUlNcXG5leHBsb2l0YXRpb24vTVxcbmV4cGxvaXRhdGl2ZVxcbmV4cGxvaXRlZC9VXFxuZXhwbG9pdGVyL01cXG5leHBsb3JhdGlvbi9NU1xcbmV4cGxvcmF0b3J5XFxuZXhwbG9yZS9aR0RSU1xcbmV4cGxvcmVkL1VcXG5leHBsb3Jlci9NXFxuZXhwbG9zaW9uL1NNXFxuZXhwbG9zaXZlL1NQTVlcXG5leHBsb3NpdmVuZXNzL01cXG5leHBvL01TXFxuZXhwb25lbnQvTVNcXG5leHBvbmVudGlhbC9ZXFxuZXhwb25lbnRpYXRpb25cXG5leHBvcnQvQlNaR01EUlxcbmV4cG9ydGF0aW9uL01cXG5leHBvcnRlci9NXFxuZXhwb3NlL0RTTUdcXG5leHBvc2VkL1VcXG5leHBvc2l0aW9uL1NNXFxuZXhwb3NpdG9yL1NNXFxuZXhwb3NpdG9yeVxcbmV4cG9zdHVsYXRlL0dOWERTXFxuZXhwb3N0dWxhdGlvbi9NXFxuZXhwb3N1cmUvTVNcXG5leHBvdW5kL1pHRFJTXFxuZXhwb3VuZGVyL01cXG5leHByZXNzL0dWTURTWVxcbmV4cHJlc3NlZC9VXFxuZXhwcmVzc2libGUvSVxcbmV4cHJlc3Npb24vU01cXG5leHByZXNzaW9uaXNtL01cXG5leHByZXNzaW9uaXN0L1NNXFxuZXhwcmVzc2lvbmlzdGljXFxuZXhwcmVzc2lvbmxlc3MvWVxcbmV4cHJlc3NpdmUvUFlcXG5leHByZXNzaXZlbmVzcy9NXFxuZXhwcmVzc3dheS9TTVxcbmV4cHJvcHJpYXRlL0dOWERTXFxuZXhwcm9wcmlhdGlvbi9NXFxuZXhwcm9wcmlhdG9yL1NNXFxuZXhwdWxzaW9uL01TXFxuZXhwdW5nZS9HRFNcXG5leHB1cmdhdGUvRFNHTlhcXG5leHB1cmdhdGVkL1VcXG5leHB1cmdhdGlvbi9NXFxuZXhxdWlzaXRlL1lQXFxuZXhxdWlzaXRlbmVzcy9NXFxuZXh0XFxuZXh0YW50XFxuZXh0ZW1wb3JhbmVvdXMvUFlcXG5leHRlbXBvcmFuZW91c25lc3MvTVxcbmV4dGVtcG9yZVxcbmV4dGVtcG9yaXphdGlvbi9NXFxuZXh0ZW1wb3JpemUvR0RTXFxuZXh0ZW5kL1NaR0RSQlxcbmV4dGVuZGVyL01cXG5leHRlbnNpYmlsaXR5XFxuZXh0ZW5zaWJsZVxcbmV4dGVuc2lvbi9TTVxcbmV4dGVuc2lvbmFsXFxuZXh0ZW5zaXZlL1lQXFxuZXh0ZW5zaXZlbmVzcy9NXFxuZXh0ZW50L1NNXFxuZXh0ZW51YXRlL0RTR05cXG5leHRlbnVhdGlvbi9NXFxuZXh0ZXJpb3IvTVNcXG5leHRlcm1pbmF0ZS9EU1hHTlxcbmV4dGVybWluYXRpb24vTVxcbmV4dGVybWluYXRvci9NU1xcbmV4dGVybmFsL01ZU1xcbmV4dGVybmFsaXphdGlvbi9TTVxcbmV4dGVybmFsaXplL0RTR1xcbmV4dGluY3QvR0RTXFxuZXh0aW5jdGlvbi9NU1xcbmV4dGluZ3Vpc2gvWkdCRFJTXFxuZXh0aW5ndWlzaGFibGUvSVxcbmV4dGluZ3Vpc2hlci9NXFxuZXh0aXJwYXRlL0dORFNcXG5leHRpcnBhdGlvbi9NXFxuZXh0b2wvU1xcbmV4dG9sbGVkXFxuZXh0b2xsaW5nXFxuZXh0b3J0L1NHRFxcbmV4dG9ydGlvbi9NUlpcXG5leHRvcnRpb25hdGUvWVxcbmV4dG9ydGlvbmVyL01cXG5leHRvcnRpb25pc3QvTVNcXG5leHRyYS9TTVxcbmV4dHJhY2VsbHVsYXJcXG5leHRyYWN0L01ER1ZTXFxuZXh0cmFjdGlvbi9TTVxcbmV4dHJhY3Rvci9NU1xcbmV4dHJhY3VycmljdWxhclxcbmV4dHJhZGl0ZS9HTkJYRFNcXG5leHRyYWRpdGlvbi9NXFxuZXh0cmFqdWRpY2lhbFxcbmV4dHJhbGVnYWxcXG5leHRyYW1hcml0YWxcXG5leHRyYW11cmFsXFxuZXh0cmFuZW91cy9ZXFxuZXh0cmFvcmRpbmFpcmVcXG5leHRyYW9yZGluYXJpbHlcXG5leHRyYW9yZGluYXJ5XFxuZXh0cmFwb2xhdGUvWEdORFNcXG5leHRyYXBvbGF0aW9uL01cXG5leHRyYXNlbnNvcnlcXG5leHRyYXRlcnJlc3RyaWFsL01TXFxuZXh0cmF0ZXJyaXRvcmlhbFxcbmV4dHJhdGVycml0b3JpYWxpdHkvTVxcbmV4dHJhdmFnYW5jZS9NU1xcbmV4dHJhdmFnYW50L1lcXG5leHRyYXZhZ2FuemEvTVNcXG5leHRyYXZlaGljdWxhclxcbmV4dHJlbWUvUE1ZVFJTXFxuZXh0cmVtZW5lc3MvTVxcbmV4dHJlbWlzbS9NXFxuZXh0cmVtaXN0L01TXFxuZXh0cmVtaXR5L1NNXFxuZXh0cmljYWJsZS9JXFxuZXh0cmljYXRlL0dORFNcXG5leHRyaWNhdGlvbi9NXFxuZXh0cmluc2ljXFxuZXh0cmluc2ljYWxseVxcbmV4dHJvdmVyc2lvbi9NXFxuZXh0cm92ZXJ0L1NNRFxcbmV4dHJ1ZGUvR0RTXFxuZXh0cnVzaW9uL1NNXFxuZXh0cnVzaXZlXFxuZXh1YmVyYW5jZS9NXFxuZXh1YmVyYW50L1lcXG5leHVkYXRpb24vTVxcbmV4dWRlL0RTR1xcbmV4dWx0L1NER1xcbmV4dWx0YW50L1lcXG5leHVsdGF0aW9uL01cXG5leHVyYi9TTVxcbmV4dXJiYW5cXG5leHVyYmFuaXRlL1NNXFxuZXh1cmJpYS9NXFxuZXllL0RTTVxcbmV5ZWJhbGwvR01EU1xcbmV5ZWJyb3cvU01cXG5leWVkcm9wcGVyL1NNXFxuZXllZnVsL1NNXFxuZXllZ2xhc3MvTVNcXG5leWVpbmdcXG5leWVsYXNoL01TXFxuZXllbGVzc1xcbmV5ZWxldC9TTVxcbmV5ZWxpZC9TTVxcbmV5ZWxpbmVyL01TXFxuZXllb3BlbmVyL01TXFxuZXllb3BlbmluZ1xcbmV5ZXBpZWNlL01TXFxuZXllc2lnaHQvTVxcbmV5ZXNvcmUvTVNcXG5leWVzdHJhaW4vTVxcbmV5ZXRlZXRoXFxuZXlldG9vdGgvTVxcbmV5ZXdhc2gvTVxcbmV5ZXdpdG5lc3MvTVNcXG5mL0NJQVZUUlxcbmZNUklcXG5mYS9NXFxuZmFiXFxuZmFibGUvRFNNXFxuZmFicmljL1NNXFxuZmFicmljYXRlL0RTR05YXFxuZmFicmljYXRpb24vTVxcbmZhYnJpY2F0b3IvU01cXG5mYWJ1bG91cy9ZXFxuZmFjYWRlL1NNXFxuZmFjZSdzXFxuZmFjZS9BQ1NER1xcbmZhY2VjbG90aC9NXFxuZmFjZWNsb3Roc1xcbmZhY2VsZXNzXFxuZmFjZXBhbG0vU0RHXFxuZmFjZXQvU01ER1xcbmZhY2V0aW91cy9ZUFxcbmZhY2V0aW91c25lc3MvTVxcbmZhY2lhbC9TTVlcXG5mYWNpbGUvWVxcbmZhY2lsaXRhdGUvR05EU1xcbmZhY2lsaXRhdGlvbi9NXFxuZmFjaWxpdGF0b3IvTVNcXG5mYWNpbGl0eS9TTVxcbmZhY2luZy9TTVxcbmZhY3NpbWlsZS9EU01cXG5mYWNzaW1pbGVpbmdcXG5mYWN0L01TXFxuZmFjdGlvbi9TTVxcbmZhY3Rpb25hbFxcbmZhY3Rpb25hbGlzbS9NXFxuZmFjdGlvdXNcXG5mYWN0aXRpb3VzXFxuZmFjdG9pZC9TTVxcbmZhY3RvcidzXFxuZmFjdG9yL0FTREdcXG5mYWN0b3JpYWwvTVNcXG5mYWN0b3JpemF0aW9uXFxuZmFjdG9yaXplL0dEU1xcbmZhY3RvcnkvU01cXG5mYWN0b3R1bS9TTVxcbmZhY3R1YWwvWVxcbmZhY3VsdHkvU01cXG5mYWQvR1NNRFxcbmZhZGRpc2gvUFxcbmZhZGRpc3QvTVNcXG5mYWRkeS9QXFxuZmFkZS9NU1xcbmZhZGluZy9VXFxuZmFlcmllL1NNXFxuZmFmZi9ER1NcXG5mYWcvU01cXG5mYWdnZWRcXG5mYWdnaW5nXFxuZmFnZ290L1NNXFxuZmFnb3QvU01HXFxuZmFpZW5jZS9NXFxuZmFpbC9ER0pTXFxuZmFpbGluZy9NXFxuZmFpbGxlL01cXG5mYWlsdXJlL1NNXFxuZmFpbi9SVFxcbmZhaW50L1NNRFJZVEdQXFxuZmFpbnRoZWFydGVkXFxuZmFpbnRuZXNzL01cXG5mYWlyL01SWVRHSlBTXFxuZmFpcmdyb3VuZC9NU1xcbmZhaXJpbmcvTVxcbmZhaXJuZXNzL1VNXFxuZmFpcndheS9TTVxcbmZhaXJ5L1NNXFxuZmFpcnlsYW5kL1NNXFxuZmFpdGgvTVxcbmZhaXRoZnVsJ3NcXG5mYWl0aGZ1bC9VUFlcXG5mYWl0aGZ1bG5lc3MvVU1cXG5mYWl0aGZ1bHNcXG5mYWl0aGxlc3MvUFlcXG5mYWl0aGxlc3NuZXNzL01cXG5mYWl0aHNcXG5mYWppdGEvU01cXG5mYWppdGFzL01cXG5mYWtlL01aR0RSU1xcbmZha2VyL01cXG5mYWtpci9TTVxcbmZhbGNvbi9TTVJaXFxuZmFsY29uZXIvTVxcbmZhbGNvbnJ5L01cXG5mYWxsL01OR1NcXG5mYWxsYWNpb3VzL1lcXG5mYWxsYWN5L1NNXFxuZmFsbGJhY2tcXG5mYWxsaWJpbGl0eS9JTVxcbmZhbGxpYmxlL1BcXG5mYWxsaWJsZW5lc3MvTVxcbmZhbGxpYmx5L0lcXG5mYWxsb2ZmL1NNXFxuZmFsbG91dC9NXFxuZmFsbG93L1NNREdcXG5mYWxzZS9QUllUXFxuZmFsc2Vob29kL1NNXFxuZmFsc2VuZXNzL01cXG5mYWxzZXR0by9TTVxcbmZhbHNpZS9TTVxcbmZhbHNpZmlhYmxlXFxuZmFsc2lmaWNhdGlvbi9NXFxuZmFsc2lmaWVyL01cXG5mYWxzaWZ5L0RSU1pHTlhcXG5mYWxzaXR5L1NNXFxuZmFsdGVyL0dTSk1EXFxuZmFsdGVyaW5nL1lcXG5mYW1lJ3NcXG5mYW1lL0RcXG5mYW1pbGlhbFxcbmZhbWlsaWFyL01ZU1xcbmZhbWlsaWFyaXR5L1VNXFxuZmFtaWxpYXJpemF0aW9uL01cXG5mYW1pbGlhcml6ZS9HRFNcXG5mYW1pbHkvU01cXG5mYW1pbmUvU01cXG5mYW1pc2gvRFNHXFxuZmFtb3VzL0lZXFxuZmFuL1NNXFxuZmFuYXRpYy9TTVxcbmZhbmF0aWNhbC9ZXFxuZmFuYXRpY2lzbS9NXFxuZmFuYm95L1NNXFxuZmFuY2lhYmxlXFxuZmFuY2llci9NXFxuZmFuY2lmdWwvWVBcXG5mYW5jaWZ1bG5lc3MvTVxcbmZhbmNpbHlcXG5mYW5jaW5lc3MvTVxcbmZhbmN5L0RSU01aVEdQXFxuZmFuY3l3b3JrL01cXG5mYW5kYW5nby9NU1xcbmZhbmRvbVxcbmZhbmZhcmUvU01cXG5mYW5nL01EU1xcbmZhbmxpZ2h0L1NNXFxuZmFubmVkXFxuZmFubmluZ1xcbmZhbm55L1NNXFxuZmFudGFpbC9NU1xcbmZhbnRhc2lhL1NNXFxuZmFudGFzaXN0L1NcXG5mYW50YXNpemUvR0RTXFxuZmFudGFzdGljXFxuZmFudGFzdGljYWwvWVxcbmZhbnRhc3kvRFNNR1xcbmZhbnppbmUvTVNcXG5mYXJcXG5mYXJhZC9TTVxcbmZhcmFkaXplL0RHXFxuZmFyYXdheVxcbmZhcmNlL1NNXFxuZmFyY2ljYWwvWVxcbmZhcmUvTUdEU1xcbmZhcmV3ZWxsL1NNXFxuZmFyaW5hL01cXG5mYXJpbmFjZW91c1xcbmZhcm0vTURSWkdTSlxcbmZhcm1lci9NXFxuZmFybWhhbmQvU01cXG5mYXJtaG91c2UvU01cXG5mYXJtaW5nL01cXG5mYXJtbGFuZC9NU1xcbmZhcm1zdGVhZC9NU1xcbmZhcm15YXJkL01TXFxuZmFyby9NXFxuZmFycmFnby9NXFxuZmFycmFnb2VzXFxuZmFycmllci9NU1xcbmZhcnJvdy9TTURHXFxuZmFyc2VlaW5nXFxuZmFyc2lnaHRlZC9QXFxuZmFyc2lnaHRlZG5lc3MvTVxcbmZhcnQvTURHU1xcbmZhcnRoZXJcXG5mYXJ0aGVybW9zdFxcbmZhcnRoZXN0XFxuZmFydGhpbmcvU01cXG5mYXNjaWEvU01cXG5mYXNjaWNsZS9TTVxcbmZhc2NpbmF0ZS9HTkRTWFxcbmZhc2NpbmF0aW5nL1lcXG5mYXNjaW5hdGlvbi9NXFxuZmFzY2lzbS9NXFxuZmFzY2lzdC9NU1xcbmZhc2Npc3RpY1xcbmZhc2hpb24vWkdCTURSU1xcbmZhc2hpb25hYmxlL1VcXG5mYXNoaW9uYWJseS9VXFxuZmFzaGlvbmVyL01cXG5mYXNoaW9uaXN0YS9NU1xcbmZhc3QvTURSVEdTUFxcbmZhc3RiYWNrL1NNXFxuZmFzdGJhbGwvU01cXG5mYXN0ZW4vVUFHRFNcXG5mYXN0ZW5lci9TTVxcbmZhc3RlbmluZy9NU1xcbmZhc3RpZGlvdXMvUFlcXG5mYXN0aWRpb3VzbmVzcy9NXFxuZmFzdG5lc3MvTVNcXG5mYXQvR1NQTURcXG5mYXRhbC9ZXFxuZmF0YWxpc20vTVxcbmZhdGFsaXN0L1NNXFxuZmF0YWxpc3RpY1xcbmZhdGFsaXN0aWNhbGx5XFxuZmF0YWxpdHkvU01cXG5mYXRiYWNrL01cXG5mYXRlL01TXFxuZmF0ZWZ1bC9ZUFxcbmZhdGVmdWxuZXNzL01cXG5mYXRoZWFkL01EU1xcbmZhdGhlci9TR01EWVxcbmZhdGhlcmhvb2QvTVxcbmZhdGhlcmxhbmQvTVNcXG5mYXRoZXJsZXNzXFxuZmF0aG9tL1NNREdCXFxuZmF0aG9tYWJsZS9VXFxuZmF0aG9tbGVzc1xcbmZhdGlndWUvTURTR1xcbmZhdGlndWVzL01cXG5mYXRuZXNzL01cXG5mYXRzby9TXFxuZmF0dGVuL1NER1xcbmZhdHRlclxcbmZhdHRlc3RcXG5mYXR0aW5lc3MvTVxcbmZhdHR5L1JTTVRQXFxuZmF0dWl0eS9NXFxuZmF0dW91cy9ZUFxcbmZhdHVvdXNuZXNzL01cXG5mYXR3YS9TTVxcbmZhdWNldC9TTVxcbmZhdWx0L0NTTURHXFxuZmF1bHRmaW5kZXIvU01cXG5mYXVsdGZpbmRpbmcvTVxcbmZhdWx0aWx5XFxuZmF1bHRpbmVzcy9NXFxuZmF1bHRsZXNzL1BZXFxuZmF1bHRsZXNzbmVzcy9NXFxuZmF1bHR5L1BSVFxcbmZhdW4vTVNcXG5mYXVuYS9TTVxcbmZhdXZpc20vTVxcbmZhdXZpc3QvU01cXG5mYXV4XFxuZmF2ZS9TXFxuZmF2b3IvRVNNREdcXG5mYXZvcmFibGUvVVxcbmZhdm9yYWJseS9VXFxuZmF2b3JpdGUvU01cXG5mYXZvcml0aXNtL01cXG5mYXduL01EUlpHU1xcbmZhd25lci9NXFxuZmF4L0dNRFNcXG5mYXkvVFNNUlxcbmZhemUvR0RTXFxuZmF6ZWQvVVxcbmZlYWx0eS9NXFxuZmVhci9NREdTXFxuZmVhcmZ1bC9ZUFxcbmZlYXJmdWxuZXNzL01cXG5mZWFybGVzcy9QWVxcbmZlYXJsZXNzbmVzcy9NXFxuZmVhcnNvbWVcXG5mZWFzaWJpbGl0eS9NXFxuZmVhc2libGUvSVVcXG5mZWFzaWJseVxcbmZlYXN0L1NNRFJaR1xcbmZlYXN0ZXIvTVxcbmZlYXQvTVNcXG5mZWF0aGVyL1NHTURcXG5mZWF0aGVyYmVkZGluZy9NXFxuZmVhdGhlcmJyYWluZWRcXG5mZWF0aGVybGVzc1xcbmZlYXRoZXJ3ZWlnaHQvTVNcXG5mZWF0aGVyeS9UUlxcbmZlYXR1cmUvRFNNR1xcbmZlYXR1cmVsZXNzXFxuZmVicmlsZVxcbmZlY2FsXFxuZmVjZXMvTVxcbmZlY2tsZXNzL1BZXFxuZmVjdW5kXFxuZmVjdW5kYXRlL0dORFNcXG5mZWN1bmRhdGlvbi9NXFxuZmVjdW5kaXR5L01cXG5mZWQvU01cXG5mZWRlcmFsL1NNWVxcbmZlZGVyYWxpc20vTVxcbmZlZGVyYWxpc3QvTVNcXG5mZWRlcmFsaXphdGlvbi9NXFxuZmVkZXJhbGl6ZS9HRFNcXG5mZWRlcmF0ZS9GWERTR05cXG5mZWRlcmF0aW9uL0ZNXFxuZmVkb3JhL1NNXFxuZmVlL1NNXFxuZmVlYmxlL1JUUFxcbmZlZWJsZW5lc3MvTVxcbmZlZWJseVxcbmZlZWQvTVJaR1NKXFxuZmVlZGJhY2svTVxcbmZlZWRiYWcvU01cXG5mZWVkZXIvTVxcbmZlZWRpbmcvTVxcbmZlZWRsb3QvU01cXG5mZWVsL01SWkdTSlxcbmZlZWxlci9NXFxuZmVlbGdvb2RcXG5mZWVsaW5nL01ZXFxuZmVldFxcbmZlaWduL1NER1xcbmZlaWduZWQvVVxcbmZlaW50L1NNREdcXG5mZWlzdHkvVFJcXG5mZWxkc3Bhci9NXFxuZmVsaWNpdGF0ZS9HTlhEU1xcbmZlbGljaXRhdGlvbi9NXFxuZmVsaWNpdG91cy9ZXFxuZmVsaWNpdHkvSVNNXFxuZmVsaW5lL1NNXFxuZmVsbC9NRFJaVEdTXFxuZmVsbGEvU1xcbmZlbGxhdGlvL01cXG5mZWxsb3cvU01cXG5mZWxsb3dtYW4vTVxcbmZlbGxvd21lblxcbmZlbGxvd3NoaXAvTVNcXG5mZWxvbi9TTVxcbmZlbG9uaW91c1xcbmZlbG9ueS9TTVxcbmZlbHQvTURHU1xcbmZlbVxcbmZlbWFsZS9QU01cXG5mZW1hbGVuZXNzL01cXG5mZW1pbmluZS9TTVlcXG5mZW1pbmluaXR5L01cXG5mZW1pbmlzbS9NXFxuZmVtaW5pc3QvU01cXG5mZW1pbml6ZS9EU0dcXG5mZW1vcmFsXFxuZmVtdXIvU01cXG5mZW4vU01cXG5mZW5jZS9EUlNNWkdcXG5mZW5jZXIvTVxcbmZlbmNpbmcvTVxcbmZlbmQvQ0RSWkdTXFxuZmVuZGVyL0NNXFxuZmVuZXN0cmF0aW9uL01cXG5mZW5uZWwvTVxcbmZlbnRhbnlsL01cXG5mZXJhbFxcbmZlcm1lbnQvRkNNU1xcbmZlcm1lbnRhdGlvbi9NXFxuZmVybWVudGVkXFxuZmVybWVudGluZ1xcbmZlcm1pdW0vTVxcbmZlcm4vTVNcXG5mZXJueS9SVFxcbmZlcm9jaW91cy9QWVxcbmZlcm9jaW91c25lc3MvTVxcbmZlcm9jaXR5L01cXG5mZXJyZXQvR1NNRFxcbmZlcnJpY1xcbmZlcnJvbWFnbmV0aWNcXG5mZXJyb21hZ25ldGlzbVxcbmZlcnJvdXNcXG5mZXJydWxlL01TXFxuZmVycnkvRFNNR1xcbmZlcnJ5Ym9hdC9TTVxcbmZlcnJ5bWFuL01cXG5mZXJyeW1lblxcbmZlcnRpbGUvSVxcbmZlcnRpbGl0eS9JTVxcbmZlcnRpbGl6YXRpb24vTVxcbmZlcnRpbGl6ZS9EUlNaR1xcbmZlcnRpbGl6ZWQvVVxcbmZlcnRpbGl6ZXIvTVxcbmZlcnVsZS9TTVxcbmZlcnZlbmN5L01cXG5mZXJ2ZW50L1lcXG5mZXJ2aWQvWVxcbmZlcnZvci9NXFxuZmVzcy9GS0dTRFxcbmZlc3QvTVJaVlNcXG5mZXN0YWxcXG5mZXN0ZXIvR01EXFxuZmVzdGl2YWwvU01cXG5mZXN0aXZlL1lQXFxuZmVzdGl2ZW5lc3MvTVxcbmZlc3Rpdml0eS9TTVxcbmZlc3Rvb24vR01EU1xcbmZldGEvTVxcbmZldGFsXFxuZmV0Y2gvRFJTWkdcXG5mZXRjaGVyL01cXG5mZXRjaGluZy9ZXFxuZmV0ZS9NR0RTXFxuZmV0aWQvUFxcbmZldGlkbmVzcy9NXFxuZmV0aXNoL01TXFxuZmV0aXNoaXNtL01cXG5mZXRpc2hpc3QvU01cXG5mZXRpc2hpc3RpY1xcbmZldGxvY2svTVNcXG5mZXR0ZXInc1xcbmZldHRlci9VU0dEXFxuZmV0dGxlL01cXG5mZXR0dWNjaW5lL01cXG5mZXR1cy9NU1xcbmZldWQvTURHU1xcbmZldWRhbFxcbmZldWRhbGlzbS9NXFxuZmV1ZGFsaXN0aWNcXG5mZXZlci9TTURcXG5mZXZlcmlzaC9ZUFxcbmZldmVyaXNobmVzcy9NXFxuZmV3L1RQTVJcXG5mZXduZXNzL01cXG5mZXlcXG5mZXovTVxcbmZlenplc1xcbmZmXFxuZmlhbmNlL0NNXFxuZmlhbmNlZS9NU1xcbmZpYW5jZXNcXG5maWFzY28vTVxcbmZpYXNjb2VzXFxuZmlhdC9NU1xcbmZpYi9aU01SXFxuZmliYmVkXFxuZmliYmVyL1NNXFxuZmliYmluZ1xcbmZpYmVyL01cXG5maWJlcmJvYXJkL01cXG5maWJlcmZpbGwvTVxcbmZpYmVyZ2xhc3MvTVxcbmZpYnJpbC9TTVxcbmZpYnJpbGxhdGUvR05EU1xcbmZpYnJpbGxhdGlvbi9NXFxuZmlicmluL01cXG5maWJyb2lkXFxuZmlicm9zaXMvTVxcbmZpYnJvdXNcXG5maWJ1bGEvTVxcbmZpYnVsYWVcXG5maWJ1bGFyXFxuZmljaGUvU01cXG5maWNodS9TTVxcbmZpY2tsZS9SUFRcXG5maWNrbGVuZXNzL01cXG5maWN0aW9uL01TXFxuZmljdGlvbmFsL1lcXG5maWN0aW9uYWxpemF0aW9uL1NNXFxuZmljdGlvbmFsaXplL0RTR1xcbmZpY3RpdGlvdXMvWVxcbmZpY3RpdmVcXG5maWN1cy9NXFxuZmlkZGxlL0RSU01aR1xcbmZpZGRsZXIvTVxcbmZpZGRsZXN0aWNrc1xcbmZpZGRseS9UUlxcbmZpZGVsaXR5L0lNXFxuZmlkZ2V0L1NHTURcXG5maWRnZXR5XFxuZmlkdWNpYXJ5L1NNXFxuZmllXFxuZmllZi9NU1xcbmZpZWZkb20vTVNcXG5maWVsZC9JU01SWlxcbmZpZWxkZWRcXG5maWVsZGVyL0lNXFxuZmllbGRpbmdcXG5maWVsZHNtYW5cXG5maWVsZHNtZW5cXG5maWVsZHdvcmsvTVJaXFxuZmllbGR3b3JrZXIvTVxcbmZpZW5kL1NNXFxuZmllbmRpc2gvWVxcbmZpZXJjZS9QUllUXFxuZmllcmNlbmVzcy9NXFxuZmllcmluZXNzL01cXG5maWVyeS9SUFRcXG5maWVzdGEvU01cXG5maWZlL01aUlNcXG5maWZlci9NXFxuZmlmdGVlbi9NSFNcXG5maWZ0ZWVudGgvTVxcbmZpZnRlZW50aHNcXG5maWZ0aC9NWVxcbmZpZnRoc1xcbmZpZnRpZXRoL01cXG5maWZ0aWV0aHNcXG5maWZ0eS9TTUhcXG5maWcvU0xNXFxuZmlnaHQvU01SWkdcXG5maWdodGJhY2tcXG5maWdodGVyL0lNU1xcbmZpZ2h0aW5nL0lNXFxuZmlnbWVudC9NU1xcbmZpZ3VyYXRpb24vRk1cXG5maWd1cmF0aXZlL1lcXG5maWd1cmUnc1xcbmZpZ3VyZS9GRUdTRFxcbmZpZ3VyZWhlYWQvU01cXG5maWd1cmluZS9NU1xcbmZpbGFtZW50L01TXFxuZmlsYW1lbnRvdXNcXG5maWxiZXJ0L01TXFxuZmlsY2gvRFNHXFxuZmlsZSdzL0tDXFxuZmlsZS9DQUtHRFNcXG5maWxlbmFtZS9TXFxuZmlsZXIvQ1NNXFxuZmlsZXRcXG5maWxpYWxcXG5maWxpYnVzdGVyL01EUlNaR1xcbmZpbGlidXN0ZXJlci9NXFxuZmlsaWdyZWUvRFNNXFxuZmlsaWdyZWVpbmdcXG5maWxpbmcnc1xcbmZpbGluZ3NcXG5maWxsJ3NcXG5maWxsL0FJREdTXFxuZmlsbGVkL1VcXG5maWxsZXIvTVNcXG5maWxsZXQvTURHU1xcbmZpbGxpbmcvU01cXG5maWxsaXAvTURHU1xcbmZpbGx5L1NNXFxuZmlsbS9NREdTXFxuZmlsbWluZXNzL01cXG5maWxtbWFrZXIvU01cXG5maWxtc3RyaXAvTVNcXG5maWxteS9UUFJcXG5maWxvXFxuZmlsdGVyL01EUkJTWkdcXG5maWx0ZXJlZC9VXFxuZmlsdGVyZXIvTVxcbmZpbHRoL01cXG5maWx0aGlseVxcbmZpbHRoaW5lc3MvTVxcbmZpbHRoeS9SUFRcXG5maWx0cmF0ZSdzXFxuZmlsdHJhdGUvSUdORFNcXG5maWx0cmF0aW9uL0lNXFxuZmluL1NNUlxcbmZpbmFnbGUvRFJTWkdcXG5maW5hZ2xlci9NXFxuZmluYWwvU01ZXFxuZmluYWxlL01TXFxuZmluYWxpc3QvU01cXG5maW5hbGl0eS9NXFxuZmluYWxpemF0aW9uL01cXG5maW5hbGl6ZS9EU0dcXG5maW5hbmNlJ3NcXG5maW5hbmNlL0FEU0dcXG5maW5hbmNpYWwvWVxcbmZpbmFuY2llci9NU1xcbmZpbmFuY2luZy9NXFxuZmluY2gvTVNcXG5maW5kL0pNUlpHU1xcbmZpbmRlci9NXFxuZmluZGluZy9NXFxuZmluZGluZ3MvTVxcbmZpbmUncy9GXFxuZmluZS9DQUZUR0RTXFxuZmluZWx5XFxuZmluZW5lc3MvTVxcbmZpbmVyeS9BTVxcbmZpbmVzcHVuXFxuZmluZXNzZS9EU01HXFxuZmluZ2VyL01ER1NKXFxuZmluZ2VyYm9hcmQvU01cXG5maW5nZXJpbmcvTVxcbmZpbmdlcmxpbmcvU01cXG5maW5nZXJtYXJrL1NcXG5maW5nZXJuYWlsL1NNXFxuZmluZ2VycHJpbnQvU0dNRFxcbmZpbmdlcnRpcC9NU1xcbmZpbmlhbC9NU1xcbmZpbmljYWxcXG5maW5pY2tpbmVzcy9NXFxuZmluaWNreS9SUFRcXG5maW5pcy9NU1xcbmZpbmlzaCdzXFxuZmluaXNoL0FEU0dcXG5maW5pc2hlZC9VXFxuZmluaXNoZXIvTVNcXG5maW5pdGUvSVlcXG5maW5rL01ER1NcXG5maW5uZWRcXG5maW5ueVxcbmZpci9aR1NKTURSSFxcbmZpcmUvTVNcXG5maXJlYXJtL1NNXFxuZmlyZWJhbGwvTVNcXG5maXJlYm9tYi9NRFNKR1xcbmZpcmVib3gvTVNcXG5maXJlYnJhbmQvU01cXG5maXJlYnJlYWsvU01cXG5maXJlYnJpY2svU01cXG5maXJlYnVnL1NNXFxuZmlyZWNyYWNrZXIvU01cXG5maXJlZGFtcC9NXFxuZmlyZWZpZ2h0L01SU1pHXFxuZmlyZWZpZ2h0ZXIvTVxcbmZpcmVmaWdodGluZy9NXFxuZmlyZWZseS9TTVxcbmZpcmVndWFyZC9TXFxuZmlyZWhvdXNlL1NNXFxuZmlyZWxpZ2h0L1pNUlxcbmZpcmVtYW4vTVxcbmZpcmVtZW5cXG5maXJlcGxhY2UvU01cXG5maXJlcGx1Zy9NU1xcbmZpcmVwb3dlci9NXFxuZmlyZXByb29mL0RTR1xcbmZpcmVyL01cXG5maXJlc2NyZWVuL1NcXG5maXJlc2lkZS9NU1xcbmZpcmVzdG9ybS9NU1xcbmZpcmV0cmFwL01TXFxuZmlyZXRydWNrL01TXFxuZmlyZXdhbGwvTVNcXG5maXJld2F0ZXIvTVxcbmZpcmV3b29kL01cXG5maXJld29yay9TTVxcbmZpcm0vTURSWVBUR1NcXG5maXJtYW1lbnQvU01cXG5maXJtbmVzcy9NXFxuZmlybXdhcmUvTVxcbmZpcnN0L1NNWVxcbmZpcnN0Ym9ybi9TTVxcbmZpcnN0aGFuZFxcbmZpcnRoL01cXG5maXJ0aHNcXG5maXNjYWwvTVlTXFxuZmlzaC9NRFJTWkdcXG5maXNoYm93bC9TTVxcbmZpc2hjYWtlL1NNXFxuZmlzaGVyL01cXG5maXNoZXJtYW4vTVxcbmZpc2hlcm1lblxcbmZpc2hlcnkvU01cXG5maXNoaG9vay9TTVxcbmZpc2hpbHlcXG5maXNoaW5lc3MvTVxcbmZpc2hpbmcvTVxcbmZpc2htb25nZXIvTVNcXG5maXNobmV0L1NNXFxuZmlzaHBvbmQvTVNcXG5maXNodGFpbC9ER1NcXG5maXNod2lmZS9NXFxuZmlzaHdpdmVzXFxuZmlzaHkvVFJQXFxuZmlzc2lsZVxcbmZpc3Npb24vQk1cXG5maXNzdXJlL1NNXFxuZmlzdC9NU1xcbmZpc3RmaWdodC9NU1xcbmZpc3RmdWwvU01cXG5maXN0aWN1ZmZzL01cXG5maXN0dWxhL1NNXFxuZmlzdHVsb3VzL01cXG5maXQvS0FNU1xcbmZpdGZ1bC9ZUFxcbmZpdGZ1bG5lc3MvTVxcbmZpdGx5XFxuZml0bWVudC9TXFxuZml0bmVzcy9VTVxcbmZpdHRlZC9VQVxcbmZpdHRlci9NU1xcbmZpdHRlc3RcXG5maXR0aW5nL1NNWVxcbmZpdmUvTVpSU1xcbmZpeC9aR0JKTURSU1xcbmZpeGF0ZS9HTlZEU1hcXG5maXhhdGlvbi9NXFxuZml4YXRpdmUvTVNcXG5maXhlZC9ZXFxuZml4ZXIvTVxcbmZpeGluZ3MvTVxcbmZpeGl0eS9NXFxuZml4dHVyZS9NU1xcbmZpenovTURTR1xcbmZpenpsZS9EU01HXFxuZml6enkvUlRcXG5mam9yZC9TTVxcbmZsL0pER1xcbmZsYWIvTVxcbmZsYWJiZXJnYXN0L1NHRFxcbmZsYWJiaWx5XFxuZmxhYmJpbmVzcy9NXFxuZmxhYmJ5L1JQVFxcbmZsYWNjaWQvWVxcbmZsYWNjaWRpdHkvTVxcbmZsYWNrL1NNXFxuZmxhZy9NU1xcbmZsYWdlbGxhXFxuZmxhZ2VsbGFudC9TXFxuZmxhZ2VsbGF0ZS9HTkRTXFxuZmxhZ2VsbGF0aW9uL01cXG5mbGFnZWxsdW0vTVxcbmZsYWdnZWRcXG5mbGFnZ2luZy9VXFxuZmxhZ21hbi9NXFxuZmxhZ21lblxcbmZsYWdvbi9NU1xcbmZsYWdwb2xlL1NNXFxuZmxhZ3JhbmNlL01cXG5mbGFncmFuY3kvTVxcbmZsYWdyYW50L1lcXG5mbGFnc2hpcC9TTVxcbmZsYWdzdGFmZi9NU1xcbmZsYWdzdG9uZS9NU1xcbmZsYWlsL1NHTURcXG5mbGFpci9TTVxcbmZsYWsvTVxcbmZsYWtlL0RTTUdcXG5mbGFraW5lc3MvTVxcbmZsYWt5L1RSUFxcbmZsYW1hZ2VcXG5mbGFtYmUvTVNcXG5mbGFtYmVlZFxcbmZsYW1iZWluZ1xcbmZsYW1ib3lhbmNlL01cXG5mbGFtYm95YW5jeS9NXFxuZmxhbWJveWFudC9ZXFxuZmxhbWUvRFJTSk1aR1xcbmZsYW1lbmNvL01TXFxuZmxhbWVwcm9vZi9ER1NcXG5mbGFtZXRocm93ZXIvU01cXG5mbGFtaW5nby9NU1xcbmZsYW1tYWJpbGl0eS9JTVxcbmZsYW1tYWJsZS9TTVxcbmZsYW4vTVNcXG5mbGFuZ2UvTVNcXG5mbGFuay9TWkdNRFJcXG5mbGFua2VyL01cXG5mbGFubmVsL1NHTURcXG5mbGFubmVsZXR0ZS9NXFxuZmxhcC9NU1xcbmZsYXBqYWNrL01TXFxuZmxhcHBlZFxcbmZsYXBwZXIvU01cXG5mbGFwcGluZ1xcbmZsYXJlL0RTTUdcXG5mbGFyZXVwL1NNXFxuZmxhc2gvWlRHTURSU1xcbmZsYXNoYmFjay9TTVxcbmZsYXNoYnVsYi9TTVxcbmZsYXNoY2FyZC9TTVxcbmZsYXNoY3ViZS9TTVxcbmZsYXNoZXIvTVxcbmZsYXNoZ3VuL1NNXFxuZmxhc2hpbHlcXG5mbGFzaGluZXNzL01cXG5mbGFzaGluZy9NXFxuZmxhc2hsaWdodC9NU1xcbmZsYXNoeS9SVFBcXG5mbGFzay9TTVxcbmZsYXQvTVlQU1xcbmZsYXRiZWQvU01cXG5mbGF0Ym9hdC9TTVxcbmZsYXRicmVhZFxcbmZsYXRjYXIvU01cXG5mbGF0ZmVldFxcbmZsYXRmaXNoL01TXFxuZmxhdGZvb3QvU01EXFxuZmxhdGlyb24vU01cXG5mbGF0bGFuZC9NXFxuZmxhdGxldC9TXFxuZmxhdG1hdGUvU1xcbmZsYXRuZXNzL01cXG5mbGF0dGVkXFxuZmxhdHRlbi9TREdcXG5mbGF0dGVyL1NEUlpHXFxuZmxhdHRlcmVyL01cXG5mbGF0dGVyaW5nL1lcXG5mbGF0dGVyeS9NXFxuZmxhdHRlc3RcXG5mbGF0dGluZ1xcbmZsYXR0aXNoXFxuZmxhdHRvcC9TTVxcbmZsYXR1bGVuY2UvTVxcbmZsYXR1bGVudFxcbmZsYXR1cy9NXFxuZmxhdHdhcmUvTVxcbmZsYXR3b3JtL1NNXFxuZmxhdW50L01EU0dcXG5mbGF1bnRpbmcvWVxcbmZsYXZvci9NRFNHSlxcbmZsYXZvcmVkL1VcXG5mbGF2b3JmdWxcXG5mbGF2b3JpbmcvTVxcbmZsYXZvcmxlc3NcXG5mbGF2b3Jzb21lXFxuZmxhdy9NREdTXFxuZmxhd2xlc3MvUFlcXG5mbGF3bGVzc25lc3MvTVxcbmZsYXgvTU5cXG5mbGF5L0RHU1xcbmZsZWEvTVNcXG5mbGVhYmFnL1NNXFxuZmxlYWJpdGUvU1xcbmZsZWFwaXQvU1xcbmZsZWNrL1NHTURcXG5mbGVkZ2VkL1VcXG5mbGVkZ2xpbmcvTVNcXG5mbGVlL1NcXG5mbGVlY2UvTVpHRFJTXFxuZmxlZWNlci9NXFxuZmxlZWNpbmVzcy9NXFxuZmxlZWN5L1JUUFxcbmZsZWVpbmdcXG5mbGVldC9TVEdNRFJZUFxcbmZsZWV0aW5nbHkvTVxcbmZsZWV0aW5nbmVzcy9NXFxuZmxlZXRuZXNzL01cXG5mbGVzaC9HTURTWVxcbmZsZXNobHkvVFJcXG5mbGVzaHBvdC9NU1xcbmZsZXNoeS9SVFxcbmZsZXdcXG5mbGV4L0FNU1xcbmZsZXhlZFxcbmZsZXhpYmlsaXR5L0lNXFxuZmxleGlibGUvSVxcbmZsZXhpYmx5L0lcXG5mbGV4aW5nXFxuZmxleGlvblxcbmZsZXh0aW1lL01cXG5mbGliYmVydGlnaWJiZXQvU01cXG5mbGljay9TWkdNRFJcXG5mbGlja2VyL0dNRFxcbmZsaWVyL01cXG5mbGlnaHQvTVNcXG5mbGlnaHRpbmVzcy9NXFxuZmxpZ2h0bGVzc1xcbmZsaWdodHkvUFRSXFxuZmxpbWZsYW0vU01cXG5mbGltZmxhbW1lZFxcbmZsaW1mbGFtbWluZ1xcbmZsaW1zaWx5XFxuZmxpbXNpbmVzcy9NXFxuZmxpbXN5L1RSUFxcbmZsaW5jaC9HTURTXFxuZmxpbmcvR01cXG5mbGludC9TTVxcbmZsaW50bG9jay9TTVxcbmZsaW50eS9UUlxcbmZsaXAvTVNcXG5mbGlwcGFuY3kvTVxcbmZsaXBwYW50L1lcXG5mbGlwcGVkXFxuZmxpcHBlci9NU1xcbmZsaXBwZXN0XFxuZmxpcHBpbmdcXG5mbGlwcHkvU1xcbmZsaXJ0L1NHTURcXG5mbGlydGF0aW9uL01TXFxuZmxpcnRhdGlvdXMvWVBcXG5mbGlydGF0aW91c25lc3MvTVxcbmZsaXJ0eVxcbmZsaXQvTVNcXG5mbGl0dGVkXFxuZmxpdHRpbmdcXG5mbG9hdC9TTURSWkdcXG5mbG9hdGVyL01cXG5mbG9jay9TTURHXFxuZmxvY2tpbmcvTVxcbmZsb2UvTVNcXG5mbG9nL1NcXG5mbG9nZ2VkXFxuZmxvZ2dlci9TTVxcbmZsb2dnaW5nL01TXFxuZmxvb2QvU01EUkdcXG5mbG9vZGdhdGUvTVNcXG5mbG9vZGxpZ2h0L01EU0dcXG5mbG9vZGxpdFxcbmZsb29kcGxhaW4vTVNcXG5mbG9vZHdhdGVyL01TXFxuZmxvb3IvU01ER1xcbmZsb29yYm9hcmQvTVNcXG5mbG9vcmluZy9NXFxuZmxvb3J3YWxrZXIvU01cXG5mbG9venkvU01cXG5mbG9wL01TXFxuZmxvcGhvdXNlL01TXFxuZmxvcHBlZFxcbmZsb3BwaWx5XFxuZmxvcHBpbmVzcy9NXFxuZmxvcHBpbmdcXG5mbG9wcHkvUFJTTVRcXG5mbG9yYS9TTVxcbmZsb3JhbFxcbmZsb3Jlc2NlbmNlL0lNXFxuZmxvcmVzY2VudC9JXFxuZmxvcmV0L1NNXFxuZmxvcmlkL1BZXFxuZmxvcmlkbmVzcy9NXFxuZmxvcmluL1NNXFxuZmxvcmlzdC9TTVxcbmZsb3NzL01EU0dcXG5mbG9zc3kvUlRcXG5mbG90YXRpb24vU01cXG5mbG90aWxsYS9NU1xcbmZsb3RzYW0vTVxcbmZsb3VuY2UvRFNNR1xcbmZsb3VuY3lcXG5mbG91bmRlci9NRFNHXFxuZmxvdXIvU01ER1xcbmZsb3VyaXNoL0dNRFNcXG5mbG91cnlcXG5mbG91dC9TTURSWkdcXG5mbG91dGVyL01cXG5mbG93L01ER1NcXG5mbG93Y2hhcnQvU01cXG5mbG93ZXInc1xcbmZsb3dlci9DU0RHXFxuZmxvd2VyYmVkL01TXFxuZmxvd2VyaW5lc3MvTVxcbmZsb3dlcmluZy9TXFxuZmxvd2VybGVzc1xcbmZsb3dlcnBvdC9NU1xcbmZsb3dlcnkvUFRSXFxuZmxvd25cXG5mbHRcXG5mbHUvTVxcbmZsdWIvTVNcXG5mbHViYmVkXFxuZmx1YmJpbmdcXG5mbHVjdHVhdGUvR05EU1hcXG5mbHVjdHVhdGlvbi9NXFxuZmx1ZS9NU1xcbmZsdWVuY3kvTVxcbmZsdWVudC9ZXFxuZmx1ZmYvU01ER1xcbmZsdWZmaW5lc3MvTVxcbmZsdWZmeS9SUFRcXG5mbHVpZC9TTVlcXG5mbHVpZGl0eS9NXFxuZmx1a2UvU01cXG5mbHVreS9SVFxcbmZsdW1lL1NNXFxuZmx1bW1veC9EU0dcXG5mbHVuZ1xcbmZsdW5rL1NNREdcXG5mbHVua3kvU01cXG5mbHVvcmVzY2UvRFNHXFxuZmx1b3Jlc2NlbmNlL01cXG5mbHVvcmVzY2VudFxcbmZsdW9yaWRhdGUvR05EU1xcbmZsdW9yaWRhdGlvbi9NXFxuZmx1b3JpZGUvU01cXG5mbHVvcmluZS9NXFxuZmx1b3JpdGUvTVxcbmZsdW9yb2NhcmJvbi9NU1xcbmZsdW9yb3Njb3BlL1NNXFxuZmx1b3Jvc2NvcGljXFxuZmx1b3hldGluZVxcbmZsdXJyeS9HRFNNXFxuZmx1c2gvTURSU1RHXFxuZmx1c3Rlci9NRFNHXFxuZmx1dGUvRFNNR1xcbmZsdXRpbmcvTVxcbmZsdXRpc3QvTVNcXG5mbHV0dGVyL01EU0dcXG5mbHV0dGVyeVxcbmZsdXZpYWxcXG5mbHV4L0lNU1xcbmZsdXhlZFxcbmZsdXhpbmdcXG5mbHkvWlRHQkRSU01cXG5mbHlhd2F5XFxuZmx5Ymxvd25cXG5mbHlieS9NXFxuZmx5YnlzXFxuZmx5Y2F0Y2hlci9NU1xcbmZseWluZy9NXFxuZmx5bGVhZi9NXFxuZmx5bGVhdmVzXFxuZmx5b3Zlci9NU1xcbmZseXBhcGVyL1NNXFxuZmx5cGFzdC9TXFxuZmx5c2hlZXQvU1xcbmZseXNwZWNrL0dNRFNcXG5mbHlzd2F0dGVyL01TXFxuZmx5dHJhcC9TXFxuZmx5d2F5L1NNXFxuZmx5d2VpZ2h0L1NNXFxuZmx5d2hlZWwvTVNcXG5mb2FsL01ER1NcXG5mb2FtL01ER1NcXG5mb2FtaW5lc3MvTVxcbmZvYW15L1JUUFxcbmZvYi9TTVxcbmZvYmJlZFxcbmZvYmJpbmdcXG5mb2NhbC9ZXFxuZm9jdXMnc1xcbmZvY3VzL0FEU0dcXG5mb2N1c2VkL1VcXG5mb2RkZXIvU01cXG5mb2UvU01cXG5mb2cnc1xcbmZvZy9DU1xcbmZvZ2JvdW5kXFxuZm9nZ2VkL0NcXG5mb2dnaWx5XFxuZm9nZ2luZXNzL01cXG5mb2dnaW5nL0NcXG5mb2dneS9SVFBcXG5mb2dob3JuL01TXFxuZm9neS9TTVxcbmZvZ3lpc2hcXG5mb2libGUvU01cXG5mb2lsL01ER1NcXG5mb2lzdC9TREdcXG5mb2xcXG5mb2xkJ3NcXG5mb2xkL0FVU0dEXFxuZm9sZGF3YXlcXG5mb2xkZXIvU01cXG5mb2xkb3V0L01TXFxuZm9saWFnZS9NXFxuZm9saWNcXG5mb2xpby9TTVxcbmZvbGsvTVNcXG5mb2xrbG9yZS9NXFxuZm9sa2xvcmljXFxuZm9sa2xvcmlzdC9NU1xcbmZvbGtzaW5lc3MvTVxcbmZvbGtzaW5nZXIvU01cXG5mb2xrc2luZ2luZy9NXFxuZm9sa3N5L1BUUlxcbmZvbGt0YWxlL01TXFxuZm9sa3dheS9NU1xcbmZvbGxcXG5mb2xsaWNsZS9NU1xcbmZvbGxvdy9TRFJaR0pcXG5mb2xsb3dlci9NXFxuZm9sbG93aW5nL01cXG5mb2xsb3d1cC9TXFxuZm9sbHkvU01cXG5mb21lbnQvU0dEXFxuZm9tZW50YXRpb24vTVxcbmZvbmQvUllUUFxcbmZvbmRhbnQvTVNcXG5mb25kbGUvRFNHXFxuZm9uZG5lc3MvTVxcbmZvbmR1ZS9TTVxcbmZvbnQvTVNcXG5mb250YW5lbC9NU1xcbmZvb1xcbmZvb2JhclxcbmZvb2QvTVNcXG5mb29kaWUvU01cXG5mb29kc3R1ZmYvU01cXG5mb29sL01ER1NcXG5mb29sZXJ5L1NNXFxuZm9vbGhhcmRpbHlcXG5mb29saGFyZGluZXNzL01cXG5mb29saGFyZHkvVFBSXFxuZm9vbGlzaC9ZUFxcbmZvb2xpc2huZXNzL01cXG5mb29scHJvb2ZcXG5mb29sc2NhcC9NXFxuZm9vdC9NRFJaR1NKXFxuZm9vdGFnZS9NXFxuZm9vdGJhbGwvTVJaR1NcXG5mb290YmFsbGVyL01cXG5mb290YnJpZGdlL1NNXFxuZm9vdGZhbGwvTVNcXG5mb290aGlsbC9NU1xcbmZvb3Rob2xkL01TXFxuZm9vdGllXFxuZm9vdGluZy9NXFxuZm9vdGxlc3NcXG5mb290bGlnaHRzL01cXG5mb290bGluZy9NU1xcbmZvb3Rsb2NrZXIvU01cXG5mb290bG9vc2VcXG5mb290bWFuL01cXG5mb290bWVuXFxuZm9vdG5vdGUvTUdEU1xcbmZvb3RwYXRoL01cXG5mb290cGF0aHNcXG5mb290cGxhdGUvU1xcbmZvb3RwcmludC9TTVxcbmZvb3RyYWNlL01TXFxuZm9vdHJlc3QvTVNcXG5mb290c2llL1NNXFxuZm9vdHNsb2dnaW5nXFxuZm9vdHNvcmVcXG5mb290c3RlcC9NU1xcbmZvb3RzdG9vbC9TTVxcbmZvb3R3ZWFyL01cXG5mb290d29yay9NXFxuZm9vdHlcXG5mb3AvU01cXG5mb3BwZXJ5L01cXG5mb3BwaXNoL1BcXG5mb3BwaXNobmVzcy9NXFxuZm9yL0hcXG5mb3JhXFxuZm9yYWdlL0RSU01aR1xcbmZvcmFnZXIvTVxcbmZvcmF5L1NNREdcXG5mb3JiYWRlXFxuZm9yYmVhci9TTUdcXG5mb3JiZWFyYW5jZS9NXFxuZm9yYmlkL1NcXG5mb3JiaWRkZW5cXG5mb3JiaWRkaW5nL1lTXFxuZm9yYm9yZVxcbmZvcmJvcm5lXFxuZm9yY2UvRFNNR1xcbmZvcmNlZC9VXFxuZm9yY2VmdWwvUFlcXG5mb3JjZWZ1bG5lc3MvTVxcbmZvcmNlcHMvTVxcbmZvcmNpYmxlXFxuZm9yY2libHlcXG5mb3JkL01ER1NCXFxuZm9yZS9NU1xcbmZvcmVhcm0vR1NNRFxcbmZvcmViZWFyL01TXFxuZm9yZWJvZGUvR0pEU1xcbmZvcmVib2RpbmcvTVxcbmZvcmVjYXN0L01SWkdTXFxuZm9yZWNhc3Rlci9NXFxuZm9yZWNhc3RsZS9NU1xcbmZvcmVjbG9zZS9EU0dcXG5mb3JlY2xvc3VyZS9NU1xcbmZvcmVjb3VydC9TTVxcbmZvcmVkb29tL0RHU1xcbmZvcmVmYXRoZXIvTVNcXG5mb3JlZmVldFxcbmZvcmVmaW5nZXIvU01cXG5mb3JlZm9vdC9NXFxuZm9yZWZyb250L1NNXFxuZm9yZWdvL0dcXG5mb3JlZ29lc1xcbmZvcmVnb25lXFxuZm9yZWdyb3VuZC9HTURTXFxuZm9yZWhhbmQvTVNcXG5mb3JlaGVhZC9NU1xcbmZvcmVpZ24vWlJQXFxuZm9yZWlnbmVyL01cXG5mb3JlaWdubmVzcy9NXFxuZm9yZWtuZXdcXG5mb3Jla25vdy9HU1xcbmZvcmVrbm93bGVkZ2UvTVxcbmZvcmVrbm93blxcbmZvcmVsZWcvU01cXG5mb3JlbGltYi9NU1xcbmZvcmVsb2NrL01TXFxuZm9yZW1hbi9NXFxuZm9yZW1hc3QvTVNcXG5mb3JlbWVuXFxuZm9yZW1vc3RcXG5mb3JlbmFtZS9NRFNcXG5mb3Jlbm9vbi9NU1xcbmZvcmVuc2ljL01TXFxuZm9yZW5zaWNhbGx5XFxuZm9yZW5zaWNzL01cXG5mb3Jlb3JkYWluL0dTRFxcbmZvcmVwYXJ0L01TXFxuZm9yZXBlcnNvbi9TTVxcbmZvcmVwbGF5L01cXG5mb3JlcXVhcnRlci9NU1xcbmZvcmVydW5uZXIvTVNcXG5mb3Jlc2FpbC9NU1xcbmZvcmVzYXdcXG5mb3Jlc2VlL1JTQlpcXG5mb3Jlc2VlYWJsZS9VXFxuZm9yZXNlZWluZ1xcbmZvcmVzZWVuL1VcXG5mb3Jlc2Vlci9NXFxuZm9yZXNoYWRvdy9HRFNcXG5mb3Jlc2hvcmUvU1xcbmZvcmVzaG9ydGVuL0RTR1xcbmZvcmVzaWdodC9NRFxcbmZvcmVzaWdodGVkbmVzcy9NXFxuZm9yZXNraW4vTVNcXG5mb3Jlc3Qnc1xcbmZvcmVzdC9BQ0dEU1xcbmZvcmVzdGFsbC9TR0RcXG5mb3Jlc3RhdGlvbi9BQ01cXG5mb3Jlc3Rlci9NU1xcbmZvcmVzdGxhbmQvTVxcbmZvcmVzdHJ5L01cXG5mb3JldGFzdGUvRFNNR1xcbmZvcmV0ZWxsL0dTXFxuZm9yZXRob3VnaHQvTVxcbmZvcmV0b2xkXFxuZm9yZXZlci9NXFxuZm9yZXZlcm1vcmVcXG5mb3Jld2Fybi9EU0dcXG5mb3Jld2VudFxcbmZvcmV3b21hbi9NXFxuZm9yZXdvbWVuXFxuZm9yZXdvcmQvTVNcXG5mb3JmZWl0L0dTTURcXG5mb3JmZWl0dXJlL1NNXFxuZm9yZ2F0aGVyL1NER1xcbmZvcmdhdmVcXG5mb3JnZS9EUlNNWkdWSlxcbmZvcmdlci9NXFxuZm9yZ2VyeS9TTVxcbmZvcmdldC9TXFxuZm9yZ2V0ZnVsL1lQXFxuZm9yZ2V0ZnVsbmVzcy9NXFxuZm9yZ2V0dGFibGUvVVxcbmZvcmdldHRpbmdcXG5mb3JnaW5nL01cXG5mb3JnaXZhYmxlL1VcXG5mb3JnaXZlL0JSU1pHUFxcbmZvcmdpdmVuXFxuZm9yZ2l2ZW5lc3MvTVxcbmZvcmdpdmVyL01cXG5mb3JnaXZpbmcvVVxcbmZvcmdvL1JaR1xcbmZvcmdvZXIvTVxcbmZvcmdvZXNcXG5mb3Jnb25lXFxuZm9yZ290XFxuZm9yZ290dGVuL1VcXG5mb3JrL01ER1NcXG5mb3JrZnVsL1NNXFxuZm9ya2xpZnQvTVNcXG5mb3Jsb3JuL1lcXG5mb3JtJ3NcXG5mb3JtL0NBSUZER1NcXG5mb3JtYWwvU01ZXFxuZm9ybWFsZGVoeWRlL01cXG5mb3JtYWxpblxcbmZvcm1hbGlzbS9NXFxuZm9ybWFsaXN0L01TXFxuZm9ybWFsaXRpZXNcXG5mb3JtYWxpdHkvSU1cXG5mb3JtYWxpemF0aW9uL01cXG5mb3JtYWxpemUvR0RTXFxuZm9ybWF0L1NNVlxcbmZvcm1hdGlvbi9DRkFTTVxcbmZvcm1hdHRlZC9BXFxuZm9ybWF0dGluZy9NXFxuZm9ybWVkL1VcXG5mb3JtZXIvRklBTVxcbmZvcm1lcmx5XFxuZm9ybWZpdHRpbmdcXG5mb3JtaWNcXG5mb3JtaWRhYmxlXFxuZm9ybWlkYWJseVxcbmZvcm1sZXNzL1BZXFxuZm9ybWxlc3NuZXNzL01cXG5mb3JtdWxhL01TXFxuZm9ybXVsYWVcXG5mb3JtdWxhaWNcXG5mb3JtdWxhdGUvQURTR05YXFxuZm9ybXVsYXRlZC9VXFxuZm9ybXVsYXRpb24vQU1cXG5mb3JtdWxhdG9yL1NNXFxuZm9ybmljYXRlL0dORFNcXG5mb3JuaWNhdGlvbi9NXFxuZm9ybmljYXRvci9NU1xcbmZvcnNha2UvR1NcXG5mb3JzYWtlblxcbmZvcnNvb2tcXG5mb3Jzb290aFxcbmZvcnN3ZWFyL1NHXFxuZm9yc3dvcmVcXG5mb3Jzd29yblxcbmZvcnN5dGhpYS9TTVxcbmZvcnQvTVNcXG5mb3J0ZS9TTVxcbmZvcnRoY29taW5nL01cXG5mb3J0aHJpZ2h0L1lQXFxuZm9ydGhyaWdodG5lc3MvTVxcbmZvcnRod2l0aFxcbmZvcnRpZXRoL01cXG5mb3J0aWV0aHNcXG5mb3J0aWZpY2F0aW9uL01cXG5mb3J0aWZpZWQvVVxcbmZvcnRpZmllci9NXFxuZm9ydGlmeS9EUlNOWkdYXFxuZm9ydGlzc2ltb1xcbmZvcnRpdHVkZS9NXFxuZm9ydG5pZ2h0L01ZU1xcbmZvcnRyZXNzL01TXFxuZm9ydHVpdG91cy9ZUFxcbmZvcnR1aXRvdXNuZXNzL01cXG5mb3J0dWl0eS9NXFxuZm9ydHVuYXRlL1VZXFxuZm9ydHVuZS9NU1xcbmZvcnR1bmV0ZWxsZXIvU01cXG5mb3J0dW5ldGVsbGluZy9NXFxuZm9ydHkvU01IXFxuZm9ydW0vU01cXG5mb3J3YXJkL01EUllaVEdTUFxcbmZvcndhcmRlci9NXFxuZm9yd2FyZG5lc3MvTVxcbmZvcndlbnRcXG5mb3NzYVxcbmZvc3NpbC9TTVxcbmZvc3NpbGl6YXRpb24vTVxcbmZvc3NpbGl6ZS9HRFNcXG5mb3N0ZXIvR1NEXFxuZm91Z2h0XFxuZm91bC9NRFJZVEdTUFxcbmZvdWxhcmQvTVxcbmZvdWxtb3V0aGVkXFxuZm91bG5lc3MvTVxcbmZvdW5kL0ZTREdcXG5mb3VuZGF0aW9uL1NNXFxuZm91bmRhdGlvbmFsXFxuZm91bmRlZC9VXFxuZm91bmRlci9HTURTXFxuZm91bmRsaW5nL1NNXFxuZm91bmRyeS9TTVxcbmZvdW50L1NNXFxuZm91bnRhaW4vU01cXG5mb3VudGFpbmhlYWQvTVNcXG5mb3VyL01IU1xcbmZvdXJmb2xkXFxuZm91cnBvc3Rlci9TTVxcbmZvdXJzY29yZS9NXFxuZm91cnNvbWUvU01cXG5mb3Vyc3F1YXJlXFxuZm91cnRlZW4vU01IXFxuZm91cnRlZW50aC9NXFxuZm91cnRlZW50aHNcXG5mb3VydGgvTVlcXG5mb3VydGhzXFxuZm93bC9NREdTXFxuZm94L0dNRFNcXG5mb3hmaXJlL01cXG5mb3hnbG92ZS9TTVxcbmZveGhvbGUvTVNcXG5mb3hob3VuZC9TTVxcbmZveGh1bnQvR1NcXG5mb3hpbHlcXG5mb3hpbmVzcy9NXFxuZm94dHJvdC9NU1xcbmZveHRyb3R0ZWRcXG5mb3h0cm90dGluZ1xcbmZveHkvUlRQXFxuZm95ZXIvU01cXG5mcHNcXG5mclxcbmZyYWNhcy9NU1xcbmZyYWNrL1NER1xcbmZyYWN0YWwvU01cXG5mcmFjdGlvbi9JU01cXG5mcmFjdGlvbmFsL1lcXG5mcmFjdGlvdXMvWVBcXG5mcmFjdGlvdXNuZXNzL01cXG5mcmFjdHVyZS9NR0RTXFxuZnJhZy9TXFxuZnJhZ2lsZS9SVFxcbmZyYWdpbGl0eS9NXFxuZnJhZ21lbnQvR01EU1xcbmZyYWdtZW50YXJ5L01cXG5mcmFnbWVudGF0aW9uL01cXG5mcmFncmFuY2UvTVNcXG5mcmFncmFudC9ZXFxuZnJhaWwvUllUUFxcbmZyYWlsbmVzcy9NXFxuZnJhaWx0eS9TTVxcbmZyYW1lL0RSU01aR1xcbmZyYW1lZC9VXFxuZnJhbWVyL01cXG5mcmFtZXdvcmsvU01cXG5mcmFuYy9TTVxcbmZyYW5jaGlzZSdzXFxuZnJhbmNoaXNlL0VEU0dcXG5mcmFuY2hpc2VlL1NNXFxuZnJhbmNoaXNlci9TTVxcbmZyYW5jaXVtL01cXG5mcmFuY29waG9uZVxcbmZyYW5naWJpbGl0eS9NXFxuZnJhbmdpYmxlXFxuZnJhbmsvU01EUllUR1BcXG5mcmFua2Z1cnRlci9NU1xcbmZyYW5raW5jZW5zZS9NXFxuZnJhbmtuZXNzL01cXG5mcmFudGljXFxuZnJhbnRpY2FsbHlcXG5mcmFwcGUvU01cXG5mcmF0L01TXFxuZnJhdGVybmFsL1lcXG5mcmF0ZXJuaXR5L0ZTTVxcbmZyYXRlcm5pemF0aW9uL01cXG5mcmF0ZXJuaXplL1pHRFJTXFxuZnJhdGVybml6ZXIvTVxcbmZyYXRyaWNpZGFsXFxuZnJhdHJpY2lkZS9NU1xcbmZyYXVkJ3NcXG5mcmF1ZC9TXFxuZnJhdWRzdGVyL1NcXG5mcmF1ZHVsZW5jZS9NXFxuZnJhdWR1bGVudC9ZXFxuZnJhdWdodFxcbmZyYXknc1xcbmZyYXkvQ0RHU1xcbmZyYXp6bGUvTUdEU1xcbmZyZWFrL1NNREdcXG5mcmVha2lzaC9ZUFxcbmZyZWFraXNobmVzcy9NXFxuZnJlYWt5L1JUXFxuZnJlY2tsZS9EU01HXFxuZnJlY2tseVxcbmZyZWUvWVREUlNcXG5mcmVlYmFzZS9NR0RTXFxuZnJlZWJpZS9TTVxcbmZyZWVib290ZXIvU01cXG5mcmVlYm9yblxcbmZyZWVkbWFuL01cXG5mcmVlZG1lblxcbmZyZWVkb20vU01cXG5mcmVlaGFuZFxcbmZyZWVob2xkL1pNUlNcXG5mcmVlaG9sZGVyL01cXG5mcmVlaW5nXFxuZnJlZWxhbmNlL0RSU01aR1xcbmZyZWVsYW5jZXIvTVxcbmZyZWVsb2FkL1NEUlpHXFxuZnJlZWxvYWRlci9NXFxuZnJlZW1hbi9NXFxuZnJlZW1hc29ucnlcXG5mcmVlbWVuXFxuZnJlZXBob25lXFxuZnJlZXNpYS9TXFxuZnJlZXN0YW5kaW5nXFxuZnJlZXN0b25lL1NNXFxuZnJlZXN0eWxlL1NNXFxuZnJlZXRoaW5rZXIvU01cXG5mcmVldGhpbmtpbmcvTVxcbmZyZWV3YXJlL01cXG5mcmVld2F5L01TXFxuZnJlZXdoZWVsL0RHU1xcbmZyZWV3aWxsXFxuZnJlZXphYmxlXFxuZnJlZXplJ3NcXG5mcmVlemUvVUFHU1xcbmZyZWV6ZXIvTVNcXG5mcmVlemluZydzXFxuZnJlaWdodC9NRFJaR1NcXG5mcmVpZ2h0ZXIvTVxcbmZyZW5jaFxcbmZyZW5lbXkvU1xcbmZyZW5ldGljXFxuZnJlbmV0aWNhbGx5XFxuZnJlbnppZWQvWVxcbmZyZW56eS9EU01cXG5mcmVxXFxuZnJlcXVlbmNpZXNcXG5mcmVxdWVuY3kvSU1cXG5mcmVxdWVudC9EUllTWlRHXFxuZnJlcXVlbnRlZC9VXFxuZnJlcXVlbnRlci9NXFxuZnJlc2NvL01cXG5mcmVzY29lc1xcbmZyZXNoL1BOUllYWlRcXG5mcmVzaGVuL1pHRFJcXG5mcmVzaGVuZXIvTVxcbmZyZXNoZXQvTVNcXG5mcmVzaG1hbi9NXFxuZnJlc2htZW5cXG5mcmVzaG5lc3MvTVxcbmZyZXNod2F0ZXIvTVxcbmZyZXQvTVNcXG5mcmV0ZnVsL1lQXFxuZnJldGZ1bG5lc3MvTVxcbmZyZXRzYXcvTVNcXG5mcmV0dGVkXFxuZnJldHRpbmdcXG5mcmV0d29yay9NXFxuZnJpYWJsZVxcbmZyaWFyL1NNXFxuZnJpYXJ5L1NNXFxuZnJpY2Fzc2VlL0RTTVxcbmZyaWNhc3NlZWluZ1xcbmZyaWNhdGl2ZS9TTVxcbmZyaWN0aW9uL1NNXFxuZnJpY3Rpb25hbFxcbmZyaWRnZS9TTVxcbmZyaWVkY2FrZS9NU1xcbmZyaWVuZCdzXFxuZnJpZW5kL1VHU0RZXFxuZnJpZW5kbGVzc1xcbmZyaWVuZGxpZXNcXG5mcmllbmRsaW5lc3MvVU1cXG5mcmllbmRseSdzXFxuZnJpZW5kbHkvVVBUUlxcbmZyaWVuZHNoaXAvTVNcXG5mcmllemUvU01cXG5mcmlnL1NcXG5mcmlnYXRlL01TXFxuZnJpZ2dlZFxcbmZyaWdnaW5nXFxuZnJpZ2h0L1NYR01ETlxcbmZyaWdodGVuL0RHXFxuZnJpZ2h0ZW5pbmcvWVxcbmZyaWdodGZ1bC9QWVxcbmZyaWdodGZ1bG5lc3MvTVxcbmZyaWdpZC9ZUFxcbmZyaWdpZGl0eS9NXFxuZnJpZ2lkbmVzcy9NXFxuZnJpbGwvU01EXFxuZnJpbGx5L1RSXFxuZnJpbmdlJ3NcXG5mcmluZ2UvSURTR1xcbmZyaXBwZXJ5L1NNXFxuZnJpc2svU0RHXFxuZnJpc2tpbHlcXG5mcmlza2luZXNzL01cXG5mcmlza3kvVFJQXFxuZnJpc3Nvbi9TXFxuZnJpdHRlci9NRFNHXFxuZnJpdHovTVxcbmZyaXZvbGl0eS9TTVxcbmZyaXZvbG91cy9QWVxcbmZyaXZvbG91c25lc3MvTVxcbmZyaXp6L01EU1lHXFxuZnJpenpsZS9NR0RTXFxuZnJpenp5L1RSXFxuZnJvXFxuZnJvY2snc1xcbmZyb2NrL0NVU1xcbmZyb2cvTVNcXG5mcm9nZ2luZy9TXFxuZnJvZ21hbi9NXFxuZnJvZ21hcmNoL0dEU1xcbmZyb2dtZW5cXG5mcm9nc3Bhd25cXG5mcm9saWMvU01cXG5mcm9saWNrZWRcXG5mcm9saWNrZXIvU01cXG5mcm9saWNraW5nXFxuZnJvbGljc29tZVxcbmZyb21cXG5mcm9uZC9TTVxcbmZyb250J3NcXG5mcm9udC9GU0RHXFxuZnJvbnRhZ2UvTVNcXG5mcm9udGFsL1lcXG5mcm9udGJlbmNoL1pSU1xcbmZyb250aWVyL01TXFxuZnJvbnRpZXJzbWFuL01cXG5mcm9udGllcnNtZW5cXG5mcm9udGllcnN3b21hblxcbmZyb250aWVyc3dvbWVuXFxuZnJvbnRpc3BpZWNlL01TXFxuZnJvbnR3YXJkL1NcXG5mcm9zaC9NXFxuZnJvc3Qnc1xcbmZyb3N0L0NTREdcXG5mcm9zdGJpdFxcbmZyb3N0Yml0ZS9NR1NcXG5mcm9zdGJpdHRlblxcbmZyb3N0aWx5XFxuZnJvc3RpbmVzcy9NXFxuZnJvc3RpbmcvU01cXG5mcm9zdHkvVFBSXFxuZnJvdGgvTURHXFxuZnJvdGhpbmVzcy9NXFxuZnJvdGhzXFxuZnJvdGh5L1RQUlxcbmZyb3Vmcm91L01cXG5mcm93bi9TTURHXFxuZnJvd3ppbHlcXG5mcm93emluZXNzL01cXG5mcm93enkvVFBSXFxuZnJvemUvQVVcXG5mcm96ZW4vVUFcXG5mcnVjdGlmeS9EU0dcXG5mcnVjdG9zZS9NXFxuZnJ1Z2FsL1lcXG5mcnVnYWxpdHkvTVxcbmZydWl0L1NNREdcXG5mcnVpdGNha2UvTVNcXG5mcnVpdGVyZXIvU1xcbmZydWl0ZnVsL1lQXFxuZnJ1aXRmdWxuZXNzL01cXG5mcnVpdGluZXNzL01cXG5mcnVpdGlvbi9NXFxuZnJ1aXRsZXNzL1BZXFxuZnJ1aXRsZXNzbmVzcy9NXFxuZnJ1aXR5L1RQUlxcbmZydW1wL1NNXFxuZnJ1bXBpc2hcXG5mcnVtcHkvVFJcXG5mcnVzdHJhdGUvR05YRFNcXG5mcnVzdHJhdGluZy9ZXFxuZnJ1c3RyYXRpb24vTVxcbmZydXN0dW0vTVNcXG5mcnkvR0RTTVxcbmZyeWVyL1NNXFxuZnRcXG5mdHAvWkdTXFxuZnVjaHNpYS9NU1xcbmZ1Y2svU01HRFJaIVxcbmZ1Y2tlci9NIVxcbmZ1Y2toZWFkL1MhXFxuZnVkZGxlL0RTTUdcXG5mdWRnZS9EU01HXFxuZnVlaHJlci9NU1xcbmZ1ZWwnc1xcbmZ1ZWwvQURHU1xcbmZ1Z1xcbmZ1Z2FsXFxuZnVnZ3lcXG5mdWdpdGl2ZS9NU1xcbmZ1Z3VlL1NNXFxuZnVocmVyL1NNXFxuZnVsY3J1bS9NU1xcbmZ1bGZpbGwvTERHU1xcbmZ1bGZpbGxlZC9VXFxuZnVsZmlsbGluZy9VXFxuZnVsZmlsbG1lbnQvTVxcbmZ1bGwvTURSWlRHU1BcXG5mdWxsYmFjay9NU1xcbmZ1bGxlci9NXFxuZnVsbG5lc3MvTVxcbmZ1bGx5XFxuZnVsbWluYXRlL0RTWEdOXFxuZnVsbWluYXRpb24vTVxcbmZ1bHNvbWUvUFlcXG5mdWxzb21lbmVzcy9NXFxuZnVtL1NcXG5mdW1ibGUvRFJTTVpHXFxuZnVtYmxlci9NXFxuZnVtYmxpbmcvWVxcbmZ1bWUvTUdEU1xcbmZ1bWlnYW50L01TXFxuZnVtaWdhdGUvR05EU1xcbmZ1bWlnYXRpb24vTVxcbmZ1bWlnYXRvci9TTVxcbmZ1bXkvUlRcXG5mdW4vTVxcbmZ1bmN0aW9uL01ER1NcXG5mdW5jdGlvbmFsL1lcXG5mdW5jdGlvbmFsaXNtXFxuZnVuY3Rpb25hbGlzdC9TXFxuZnVuY3Rpb25hbGl0eS9TXFxuZnVuY3Rpb25hcnkvU01cXG5mdW5jdG9yXFxuZnVuZC9BTURHU1xcbmZ1bmRhbWVudGFsL1NNWVxcbmZ1bmRhbWVudGFsaXNtL01cXG5mdW5kYW1lbnRhbGlzdC9TTVxcbmZ1bmRlZC9VXFxuZnVuZGluZy9NXFxuZnVuZHJhaXNlci9NU1xcbmZ1bmRyYWlzaW5nXFxuZnVuZXJhbC9NU1xcbmZ1bmVyYXJ5XFxuZnVuZXJlYWwvWVxcbmZ1bmZhaXIvU1xcbmZ1bmdhbFxcbmZ1bmdpXFxuZnVuZ2libGUvTVNcXG5mdW5naWNpZGFsXFxuZnVuZ2ljaWRlL01TXFxuZnVuZ29pZFxcbmZ1bmdvdXNcXG5mdW5ndXMvTVxcbmZ1bmljdWxhci9TTVxcbmZ1bmsvTURHU1xcbmZ1bmtpbmVzcy9NXFxuZnVua3kvUFJUXFxuZnVubmVsL01ER1NcXG5mdW5uZXJcXG5mdW5uZXN0XFxuZnVubmlseVxcbmZ1bm5pbmVzcy9NXFxuZnVubnkvVFBSU01cXG5mdW5ueW1hbi9NXFxuZnVubnltZW5cXG5mdXIvU01cXG5mdXJiZWxvdy9NXFxuZnVyYmlzaC9BRFNHXFxuZnVyaW91cy9ZXFxuZnVybCdzXFxuZnVybC9VREdTXFxuZnVybG9uZy9TTVxcbmZ1cmxvdWdoL0dNRFxcbmZ1cmxvdWdoc1xcbmZ1cm5cXG5mdXJuYWNlL1NNXFxuZnVybmlzaC9BRFNHXFxuZnVybmlzaGVkL1VcXG5mdXJuaXNoaW5ncy9NXFxuZnVybml0dXJlL01cXG5mdXJvci9TTVxcbmZ1cm9zZW1pZGVcXG5mdXJyZWRcXG5mdXJyaWVyL01cXG5mdXJyaW5lc3MvTVxcbmZ1cnJpbmcvTVxcbmZ1cnJvdy9NRFNHXFxuZnVycnkvWlRSUFxcbmZ1cnRoZXIvU0dEXFxuZnVydGhlcmFuY2UvTVxcbmZ1cnRoZXJtb3JlXFxuZnVydGhlcm1vc3RcXG5mdXJ0aGVzdFxcbmZ1cnRpdmUvWVBcXG5mdXJ0aXZlbmVzcy9NXFxuZnVyeS9TTVxcbmZ1cnplL01cXG5mdXNlJ3MvQVxcbmZ1c2UvQ0FJRkdEU1xcbmZ1c2VlL1NNXFxuZnVzZWxhZ2UvU01cXG5mdXNpYmlsaXR5L01cXG5mdXNpYmxlXFxuZnVzaWxpZXIvU01cXG5mdXNpbGxhZGUvTVNcXG5mdXNpb24vSUZLU01cXG5mdXNzL01EU0dcXG5mdXNzYnVkZ2V0L01TXFxuZnVzc2lseVxcbmZ1c3NpbmVzcy9NXFxuZnVzc3BvdC9TTVxcbmZ1c3N5L1RSUFxcbmZ1c3RpYW4vTVxcbmZ1c3RpbmVzcy9NXFxuZnVzdHkvVFJQXFxuZnV0XFxuZnV0aWxlL1lcXG5mdXRpbGl0eS9NXFxuZnV0b24vU01cXG5mdXR1cmUvTVNcXG5mdXR1cmlzbS9NXFxuZnV0dXJpc3QvTVNcXG5mdXR1cmlzdGljXFxuZnV0dXJpdHkvU01cXG5mdXR1cm9sb2dpc3QvTVNcXG5mdXR1cm9sb2d5L01cXG5mdXR6L0RTR1xcbmZ1enovTURTR1xcbmZ1enpiYWxsL1NcXG5mdXp6aWx5XFxuZnV6emluZXNzL01cXG5mdXp6eS9QVFJcXG5md2RcXG5md3lcXG5nL1NOWFZCXFxuZ2FiL1NNXFxuZ2FiYXJkaW5lL1NNXFxuZ2FiYmVkXFxuZ2FiYmluZXNzL01cXG5nYWJiaW5nXFxuZ2FiYmxlL0RTTUdcXG5nYWJieS9SVFBcXG5nYWJlcmRpbmUvU01cXG5nYWJmZXN0L01TXFxuZ2FibGUvRFNNXFxuZ2FkL1NcXG5nYWRhYm91dC9TTVxcbmdhZGRlZFxcbmdhZGRlci9TTVxcbmdhZGRpbmdcXG5nYWRmbHkvU01cXG5nYWRnZXQvU01cXG5nYWRnZXRyeS9NXFxuZ2Fkb2xpbml1bS9NXFxuZ2FmZi9NRFJaR1NcXG5nYWZmZS9TTVxcbmdhZmZlci9NXFxuZ2FnL1NNXFxuZ2FnYVxcbmdhZ2dlZFxcbmdhZ2dpbmdcXG5nYWdnbGUvU01cXG5nYWlldHkvTVxcbmdhaWx5XFxuZ2FpbidzXFxuZ2Fpbi9BREdTXFxuZ2FpbmVyL1NNXFxuZ2FpbmZ1bC9ZXFxuZ2FpbnNhaWRcXG5nYWluc2F5L1pHUlNcXG5nYWluc2F5ZXIvTVxcbmdhaXQvTVJaU1xcbmdhaXRlci9NXFxuZ2FsL1NNXFxuZ2FsYS9NU1xcbmdhbGFjdGljXFxuZ2FsYXh5L1NNXFxuZ2FsZSdzXFxuZ2FsZS9BU1xcbmdhbGVuYS9NXFxuZ2FsbC9NREdTXFxuZ2FsbGFudC9TTVlcXG5nYWxsYW50cnkvTVxcbmdhbGxibGFkZGVyL01TXFxuZ2FsbGVvbi9TTVxcbmdhbGxlcmlhL01TXFxuZ2FsbGVyeS9TTVxcbmdhbGxleS9TTVxcbmdhbGxpbWF1ZnJ5L1NNXFxuZ2FsbGl1bS9NXFxuZ2FsbGl2YW50L0dTRFxcbmdhbGxvbi9TTVxcbmdhbGxvcC9TTURHXFxuZ2FsbG93cy9NXFxuZ2FsbHN0b25lL01TXFxuZ2Fsb290L1NNXFxuZ2Fsb3JlXFxuZ2Fsb3NoL01TXFxuZ2FsdW1waC9ER1xcbmdhbHVtcGhzXFxuZ2FsdmFuaWNcXG5nYWx2YW5pc20vTVxcbmdhbHZhbml6YXRpb24vTVxcbmdhbHZhbml6ZS9EU0dcXG5nYWx2YW5vbWV0ZXIvTVNcXG5nYW1iaXQvU01cXG5nYW1ibGUvRFJTTVpHXFxuZ2FtYmxlci9NXFxuZ2FtYmxpbmcvTVxcbmdhbWJvbC9TTURHXFxuZ2FtZS9NWVRHRFJTUFxcbmdhbWVjb2NrL01TXFxuZ2FtZWtlZXBlci9NU1xcbmdhbWVuZXNzL01cXG5nYW1lc21hbnNoaXAvTVxcbmdhbWVzdGVyL01TXFxuZ2FtZXRlL1NNXFxuZ2FtZXRpY1xcbmdhbWluL1NNXFxuZ2FtaW5lL1NNXFxuZ2FtaW5lc3MvTVxcbmdhbWluZy9NXFxuZ2FtbWEvU01cXG5nYW1tb24vTVxcbmdhbW15XFxuZ2FtdXQvU01cXG5nYW15L1JUUFxcbmdhbmRlci9TTVxcbmdhbmcvTURHU1xcbmdhbmdidXN0ZXJzL01cXG5nYW5nbGFuZC9NXFxuZ2FuZ2xpYVxcbmdhbmdsaW5nXFxuZ2FuZ2xpb24vTVxcbmdhbmdsaW9uaWNcXG5nYW5ncGxhbmsvU01cXG5nYW5ncmVuZS9EU01HXFxuZ2FuZ3Jlbm91c1xcbmdhbmdzdGEvU1xcbmdhbmdzdGVyL1NNXFxuZ2FuZ3dheS9NU1xcbmdhbmphXFxuZ2FubmV0L1NNXFxuZ2FudGxldC9NU1xcbmdhbnRyeS9TTVxcbmdhcC9HU01EXFxuZ2FwZS9NU1xcbmdhci9TTE1cXG5nYXJhZ2UvRFNNR1xcbmdhcmIvTURHU1xcbmdhcmJhZ2UvTVxcbmdhcmJhZ2VtYW5cXG5nYXJiYW56by9TTVxcbmdhcmJsZS9EU0dcXG5nYXJjb24vU01cXG5nYXJkZW4vU1pHTURSXFxuZ2FyZGVuZXIvTVxcbmdhcmRlbmlhL01TXFxuZ2FyZGVuaW5nL01cXG5nYXJmaXNoL01TXFxuZ2FyZ2FudHVhblxcbmdhcmdsZS9EU01HXFxuZ2FyZ295bGUvU01cXG5nYXJpc2gvUFlcXG5nYXJpc2huZXNzL01cXG5nYXJsYW5kL01ER1NcXG5nYXJsaWMvTVxcbmdhcmxpY2t5XFxuZ2FybWVudC9NU1xcbmdhcm5lci9TR0RcXG5nYXJuZXQvU01cXG5nYXJuaXNoL0dMTURTXFxuZ2FybmlzaGVlL0RTTVxcbmdhcm5pc2hlZWluZ1xcbmdhcm5pc2htZW50L1NNXFxuZ2FycmV0L1NNXFxuZ2Fycmlzb24vTURTR1xcbmdhcnJvdGUvTVpHRFJTXFxuZ2Fycm90ZXIvTVxcbmdhcnJ1bGl0eS9NXFxuZ2FycnVsb3VzL1BZXFxuZ2FycnVsb3VzbmVzcy9NXFxuZ2FydGVyL1NNXFxuZ2FzJ3NcXG5nYXMvQ1NcXG5nYXNiYWcvU01cXG5nYXNlb3VzXFxuZ2FzaC9NRFNHXFxuZ2FzaG9sZGVyL1NcXG5nYXNrZXQvU01cXG5nYXNsaWdodC9NU1xcbmdhc21hblxcbmdhc21lblxcbmdhc29ob2wvTVxcbmdhc29saW5lL01cXG5nYXNvbWV0ZXIvU1xcbmdhc3AvTURHU1xcbmdhc3NlZC9DXFxuZ2Fzc2VzXFxuZ2Fzc2luZy9DXFxuZ2Fzc3kvUlRcXG5nYXN0cmljXFxuZ2FzdHJpdGlzL01cXG5nYXN0cm9lbnRlcml0aXMvTVxcbmdhc3Ryb2ludGVzdGluYWxcXG5nYXN0cm9ub21lL1NcXG5nYXN0cm9ub21pY1xcbmdhc3Ryb25vbWljYWwvWVxcbmdhc3Ryb25vbXkvTVxcbmdhc3Ryb3BvZC9TTVxcbmdhc3dvcmtzL01cXG5nYXRlL01HRFNcXG5nYXRlYXVcXG5nYXRlYXV4XFxuZ2F0ZWNyYXNoL0RSU1pHXFxuZ2F0ZWNyYXNoZXIvTVxcbmdhdGVob3VzZS9TTVxcbmdhdGVrZWVwZXIvTVNcXG5nYXRlcG9zdC9NU1xcbmdhdGV3YXkvTVNcXG5nYXRoZXIvU0paR01EUlxcbmdhdGhlcmVyL01cXG5nYXRoZXJpbmcvTVxcbmdhdG9yL1NNXFxuZ2F1Y2hlL1JQWVRcXG5nYXVjaGVuZXNzL01cXG5nYXVjaGVyaWUvTVxcbmdhdWNoby9TTVxcbmdhdWRpbHlcXG5nYXVkaW5lc3MvTVxcbmdhdWR5L1JQVFxcbmdhdWdlL0RTTUdcXG5nYXVudC9SUFRcXG5nYXVudGxldC9NU1xcbmdhdW50bmVzcy9NXFxuZ2F1emUvTVxcbmdhdXppbmVzcy9NXFxuZ2F1enkvUlBUXFxuZ2F2ZVxcbmdhdmVsL1NNXFxuZ2F2b3R0ZS9NU1xcbmdhd2RcXG5nYXdrL0RHU1xcbmdhd2tpbHlcXG5nYXdraW5lc3MvTVxcbmdhd2t5L1JQVFxcbmdhd3AvREdTXFxuZ2F5L1RTUE1SXFxuZ2F5bmVzcy9NXFxuZ2F6ZS9NWkdEUlNcXG5nYXplYm8vU01cXG5nYXplbGxlL01TXFxuZ2F6ZXIvTVxcbmdhemV0dGUvTUdEU1xcbmdhemV0dGVlci9NU1xcbmdhemlsbGlvbi9TXFxuZ2F6cGFjaG8vTVxcbmdhenVtcC9ER1NcXG5nZWFyL01ER1NcXG5nZWFyYm94L01TXFxuZ2VhcmluZy9NXFxuZ2VhcnNoaWZ0L01TXFxuZ2VhcndoZWVsL1NNXFxuZ2Vja28vU01cXG5nZWRkaXRcXG5nZWUvRFNcXG5nZWVpbmdcXG5nZWVrL01TXFxuZ2Vla3kvUlRcXG5nZWVzZVxcbmdlZXplci9NU1xcbmdlaXNoYS9NXFxuZ2VsL1NNXFxuZ2VsYXRpbi9NXFxuZ2VsYXRpbm91c1xcbmdlbGNhcC9NXFxuZ2VsZC9ESkdTXFxuZ2VsZGluZy9NXFxuZ2VsaWRcXG5nZWxpZ25pdGUvTVxcbmdlbGxlZFxcbmdlbGxpbmdcXG5nZW0vU01cXG5nZW1vbG9naWNhbFxcbmdlbW9sb2dpc3QvTVNcXG5nZW1vbG9neS9NXFxuZ2Vtc3RvbmUvTVNcXG5nZW5kYXJtZS9NU1xcbmdlbmRlci9NRFNcXG5nZW5lL01TXFxuZ2VuZWFsb2dpY2FsL1lcXG5nZW5lYWxvZ2lzdC9NU1xcbmdlbmVhbG9neS9TTVxcbmdlbmVyYVxcbmdlbmVyYWwvU01ZXFxuZ2VuZXJhbGlzc2ltby9NU1xcbmdlbmVyYWxpc3QvTVNcXG5nZW5lcmFsaXR5L1NNXFxuZ2VuZXJhbGl6YXRpb24vTVNcXG5nZW5lcmFsaXplL0dEU1xcbmdlbmVyYWxzaGlwL01cXG5nZW5lcmF0ZS9DQVZOR1NEXFxuZ2VuZXJhdGlvbi9BQ01cXG5nZW5lcmF0aW9uYWxcXG5nZW5lcmF0aW9uc1xcbmdlbmVyYXRvci9TTVxcbmdlbmVyaWMvU01cXG5nZW5lcmljYWxseVxcbmdlbmVyb3NpdHkvU01cXG5nZW5lcm91cy9QWVxcbmdlbmVyb3VzbmVzcy9NXFxuZ2VuZXMvU1xcbmdlbmVzaXMvTVxcbmdlbmV0aWMvU1xcbmdlbmV0aWNhbGx5XFxuZ2VuZXRpY2lzdC9NU1xcbmdlbmV0aWNzL01cXG5nZW5pYWwvRllcXG5nZW5pYWxpdHkvRk1cXG5nZW5pY3VsYXRlXFxuZ2VuaWUvU01cXG5nZW5paVxcbmdlbml0YWwvRllcXG5nZW5pdGFsaWEvTVxcbmdlbml0YWxzL01cXG5nZW5pdGl2ZS9NU1xcbmdlbml0b3VyaW5hcnlcXG5nZW5pdXMvTVNcXG5nZW5uZWRcXG5nZW5uaW5nXFxuZ2Vub2NpZGFsXFxuZ2Vub2NpZGUvTVNcXG5nZW5vbWUvTVNcXG5nZW5vbWljc1xcbmdlbnJlL1NNXFxuZ2VudC9BTVNcXG5nZW50ZWVsL1lQXFxuZ2VudGVlbG5lc3MvTVxcbmdlbnRpYW4vU01cXG5nZW50aWxlL1NNXFxuZ2VudGlsaXR5L01cXG5nZW50bGUvVEdEUlNQXFxuZ2VudGxlZm9say9NU1xcbmdlbnRsZWZvbGtzL01cXG5nZW50bGVtYW4vTVlcXG5nZW50bGVtYW5seS9VXFxuZ2VudGxlbWVuXFxuZ2VudGxlbmVzcy9NXFxuZ2VudGxld29tYW4vTVxcbmdlbnRsZXdvbWVuXFxuZ2VudGx5XFxuZ2VudHJpZmljYXRpb24vTVxcbmdlbnRyaWZ5L0RTR05cXG5nZW50cnkvU01cXG5nZW51ZmxlY3QvREdTXFxuZ2VudWZsZWN0aW9uL01TXFxuZ2VudWluZS9QWVxcbmdlbnVpbmVuZXNzL01cXG5nZW51cy9NXFxuZ2VvY2FjaGUvRFNHXFxuZ2VvY2VudHJpY1xcbmdlb2NlbnRyaWNhbGx5XFxuZ2VvY2hlbWlzdHJ5L01cXG5nZW9kZS9TTVxcbmdlb2Rlc2ljL1NNXFxuZ2VvZGVzeS9NXFxuZ2VvZGV0aWNcXG5nZW9lbmdpbmVlcmluZ1xcbmdlb2dcXG5nZW9ncmFwaGVyL1NNXFxuZ2VvZ3JhcGhpY1xcbmdlb2dyYXBoaWNhbC9ZXFxuZ2VvZ3JhcGh5L1NNXFxuZ2VvbG9naWNcXG5nZW9sb2dpY2FsL1lcXG5nZW9sb2dpc3QvTVNcXG5nZW9sb2d5L1NNXFxuZ2VvbVxcbmdlb21hZ25ldGljXFxuZ2VvbWFnbmV0aXNtL01cXG5nZW9tZXRlclxcbmdlb21ldHJpY1xcbmdlb21ldHJpY2FsL1lcXG5nZW9tZXRyeS9TTVxcbmdlb3BoeXNpY2FsXFxuZ2VvcGh5c2ljaXN0L1NNXFxuZ2VvcGh5c2ljcy9NXFxuZ2VvcG9saXRpY2FsXFxuZ2VvcG9saXRpY3MvTVxcbmdlb3N0YXRpb25hcnlcXG5nZW9zeW5jaHJvbm91c1xcbmdlb3N5bmNsaW5lL01TXFxuZ2VvdGhlcm1hbFxcbmdlb3RoZXJtaWNcXG5nZXJhbml1bS9NU1xcbmdlcmJpbC9NU1xcbmdlcmlhdHJpYy9TXFxuZ2VyaWF0cmljaWFuL1NcXG5nZXJpYXRyaWNzL01cXG5nZXJtL01TXFxuZ2VybWFuZVxcbmdlcm1hbml1bS9NXFxuZ2VybWljaWRhbFxcbmdlcm1pY2lkZS9NU1xcbmdlcm1pbmFsL01cXG5nZXJtaW5hdGUvR05EU1xcbmdlcm1pbmF0aW9uL01cXG5nZXJvbnRvbG9naWNhbFxcbmdlcm9udG9sb2dpc3QvTVNcXG5nZXJvbnRvbG9neS9NXFxuZ2VycnltYW5kZXIvR01EU1xcbmdlcnJ5bWFuZGVyaW5nL01cXG5nZXJ1bmQvTVNcXG5nZXN0YWx0L1NcXG5nZXN0YXBvL01TXFxuZ2VzdGF0ZS9HTkRTXFxuZ2VzdGF0aW9uL01cXG5nZXN0YXRpb25hbFxcbmdlc3RpY3VsYXRlL0RTR05YXFxuZ2VzdGljdWxhdGlvbi9NXFxuZ2VzdHVyYWxcXG5nZXN0dXJlL01HRFNcXG5nZXN1bmRoZWl0XFxuZ2V0L1NcXG5nZXRhd2F5L1NNXFxuZ2V0dGluZ1xcbmdldHVwL01cXG5nZXdnYXcvU01cXG5nZXlzZXIvU01cXG5naGFzdGxpbmVzcy9NXFxuZ2hhc3RseS9UUFJcXG5naGF0L01TXFxuZ2hlZVxcbmdoZXJraW4vTVNcXG5naGV0dG8vU01cXG5naGV0dG9pemUvR0RTXFxuZ2hvc3QvU01EWUdcXG5naG9zdGxpbmVzcy9NXFxuZ2hvc3RseS9SVFBcXG5naG9zdHdyaXRlL1pHUlNcXG5naG9zdHdyaXRlci9NXFxuZ2hvc3R3cml0dGVuXFxuZ2hvc3R3cm90ZVxcbmdob3VsL1NNXFxuZ2hvdWxpc2gvWVBcXG5naG91bGlzaG5lc3MvTVxcbmdpYW50L1NNXFxuZ2lhbnRlc3MvTVNcXG5naWJiZXIvR0RTXFxuZ2liYmVyaXNoL01cXG5naWJiZXQvR01EU1xcbmdpYmJvbi9NU1xcbmdpYmJvdXNcXG5naWJlL01HRFNcXG5naWJsZXQvU01cXG5naWRkaWx5XFxuZ2lkZGluZXNzL01cXG5naWRkeS9SVFBcXG5naWZ0L01ER1NcXG5naWcvU01cXG5naWdhYml0L1NNXFxuZ2lnYWJ5dGUvTVNcXG5naWdhZ3JhbS9TXFxuZ2lnYWhlcnR6L01cXG5naWdham91bGUvU1xcbmdpZ2FtZXRlci9TXFxuZ2lnYW50aWNcXG5naWdhbnRpY2FsbHlcXG5naWdhcGFzY2FsL1NcXG5naWdhcGl4ZWwvTVNcXG5naWdhd2F0dC9TTVxcbmdpZ2dlZFxcbmdpZ2dpbmdcXG5naWdnbGUvRFJTTVpHXFxuZ2lnZ2xlci9NXFxuZ2lnZ2x5L1JUXFxuZ2lnb2xvL1NNXFxuZ2lsZC9NRFJaR1NcXG5naWxkZXIvTVxcbmdpbGRpbmcvTVxcbmdpbGwvTVNcXG5naWxsaWUvU1xcbmdpbGxpb24vU1xcbmdpbHQvTVNcXG5naW1iYWxzL01cXG5naW1jcmFjay9TTVxcbmdpbWNyYWNrZXJ5L01cXG5naW1sZXQvR1NNRFxcbmdpbW1lL1NNXFxuZ2ltbWljay9NU1xcbmdpbW1pY2tyeS9NXFxuZ2ltbWlja3lcXG5naW1wL01ER1NcXG5naW1weVxcbmdpbi9TTVxcbmdpbmdlci9HU01EWVxcbmdpbmdlcmJyZWFkL01cXG5naW5nZXJzbmFwL1NNXFxuZ2luZ2VyeVxcbmdpbmdoYW0vTVxcbmdpbmdpdml0aXMvTVxcbmdpbmtnby9NXFxuZ2lua2dvZXNcXG5naW5uZWRcXG5naW5uaW5nXFxuZ2lub3Jtb3VzXFxuZ2luc2VuZy9NXFxuZ2lyYWZmZS9NU1xcbmdpcmQvRFJaR1NcXG5naXJkZXIvTVxcbmdpcmRsZS9EU01HXFxuZ2lybC9NU1xcbmdpcmxmcmllbmQvTVNcXG5naXJsaG9vZC9TTVxcbmdpcmxpc2gvWVBcXG5naXJsaXNobmVzcy9NXFxuZ2lybHlcXG5naXJvL1NcXG5naXJ0L01ER1NcXG5naXJ0aC9NXFxuZ2lydGhzXFxuZ2lzdC9NXFxuZ2l0L1NcXG5naXRlL1NcXG5naXZlL1pHSlJTXFxuZ2l2ZWF3YXkvTVNcXG5naXZlYmFjay9NU1xcbmdpdmVuL1NNXFxuZ2l2ZXIvTVxcbmdpem1vL1NNXFxuZ2l6emFyZC9NU1xcbmdsYWNlL1NcXG5nbGFjZWVkXFxuZ2xhY2VpbmdcXG5nbGFjaWFsL1lcXG5nbGFjaWF0ZS9YR05EU1xcbmdsYWNpYXRpb24vTVxcbmdsYWNpZXIvTVNcXG5nbGFkL01ZU1BcXG5nbGFkZGVuL0dEU1xcbmdsYWRkZXJcXG5nbGFkZGVzdFxcbmdsYWRlL1NNXFxuZ2xhZGlhdG9yL1NNXFxuZ2xhZGlhdG9yaWFsXFxuZ2xhZGlvbGEvU01cXG5nbGFkaW9saVxcbmdsYWRpb2x1cy9NXFxuZ2xhZG5lc3MvTVxcbmdsYWRzb21lXFxuZ2xhbVxcbmdsYW1vcml6YXRpb24vTVxcbmdsYW1vcml6ZS9EU0dcXG5nbGFtb3JvdXMvWVxcbmdsYW1vdXIvR01EU1xcbmdsYW5jZS9EU01HXFxuZ2xhbmQvU01cXG5nbGFuZGVzXFxuZ2xhbmR1bGFyXFxuZ2xhbnMvTVxcbmdsYXJlL0RTTUdcXG5nbGFyaW5nL1lcXG5nbGFzbm9zdC9NXFxuZ2xhc3MvTURTR1xcbmdsYXNzYmxvd2VyL01TXFxuZ2xhc3NibG93aW5nL01cXG5nbGFzc2Z1bC9TTVxcbmdsYXNzaG91c2UvU1xcbmdsYXNzaWx5XFxuZ2xhc3NpbmVzcy9NXFxuZ2xhc3N3YXJlL01cXG5nbGFzc3kvUlRQXFxuZ2xhdWNvbWEvTVxcbmdsYXplL0RTTUdcXG5nbGF6aWVyL1NNXFxuZ2xhemluZy9NXFxuZ2xlYW0vU01ER0pcXG5nbGVhbi9TRFJaR0pcXG5nbGVhbmVyL01cXG5nbGVhbmluZ3MvTVxcbmdsZWUvTVxcbmdsZWVmdWwvWVBcXG5nbGVlZnVsbmVzcy9NXFxuZ2xlbi9NU1xcbmdsZW5vaHVtZXJhbFxcbmdsZW5vaWRcXG5nbGliL1lQXFxuZ2xpYmJlclxcbmdsaWJiZXN0XFxuZ2xpYm5lc3MvTVxcbmdsaWRlL0RSU01aR1xcbmdsaWRlci9NXFxuZ2xpZGluZy9NXFxuZ2xpbW1lci9NREdKU1xcbmdsaW1tZXJpbmcvTVxcbmdsaW1wc2UvTUdEU1xcbmdsaW50L1NNREdcXG5nbGlzc2FuZGlcXG5nbGlzc2FuZG8vTVxcbmdsaXN0ZW4vTURTR1xcbmdsaXN0ZXIvRFNHXFxuZ2xpdGNoL0dNRFNcXG5nbGl0dGVyL01EU0dcXG5nbGl0dGVyYXRpXFxuZ2xpdHRlcnlcXG5nbGl0ei9NXFxuZ2xpdHp5L1RSXFxuZ2xvYW1pbmcvU01cXG5nbG9hdC9TTURHXFxuZ2xvYXRpbmcvWVxcbmdsb2IvTURHU1xcbmdsb2JhbC9ZXFxuZ2xvYmFsaXNtL01cXG5nbG9iYWxpc3QvTVNcXG5nbG9iYWxpemF0aW9uL01cXG5nbG9iYWxpemUvR0RTXFxuZ2xvYmUvU01cXG5nbG9iZXRyb3R0ZXIvTVNcXG5nbG9iZXRyb3R0aW5nXFxuZ2xvYnVsYXJcXG5nbG9idWxlL01TXFxuZ2xvYnVsaW4vTVxcbmdsb2NrZW5zcGllbC9TTVxcbmdsb29tL01cXG5nbG9vbWlseVxcbmdsb29taW5lc3MvTVxcbmdsb29teS9UUlBcXG5nbG9wL01cXG5nbG9wcHlcXG5nbG9yaWZpY2F0aW9uL01cXG5nbG9yaWZ5L0dEU05cXG5nbG9yaW91cy9JWVxcbmdsb3J5L0RTTUdcXG5nbG9zcy9NRFNHXFxuZ2xvc3NhcnkvU01cXG5nbG9zc2lseVxcbmdsb3NzaW5lc3MvTVxcbmdsb3Nzb2xhbGlhL01cXG5nbG9zc3kvUFRSU01cXG5nbG90dGFsXFxuZ2xvdHRpcy9NU1xcbmdsb3ZlL0RTTUdcXG5nbG93L01EUlpHU1xcbmdsb3dlci9HTURcXG5nbG93aW5nL1lcXG5nbG93d29ybS9NU1xcbmdsdWNhZ29uXFxuZ2x1Y29zZS9NXFxuZ2x1ZS9NR0RTXFxuZ2x1ZWQvVVxcbmdsdWV5XFxuZ2x1aWVyXFxuZ2x1aWVzdFxcbmdsdW0vWVBcXG5nbHVtbWVyXFxuZ2x1bW1lc3RcXG5nbHVtbmVzcy9NXFxuZ2x1b24vU1xcbmdsdXQvTU5TXFxuZ2x1dGVuL01cXG5nbHV0ZW5vdXNcXG5nbHV0aW5vdXMvWVxcbmdsdXR0ZWRcXG5nbHV0dGluZ1xcbmdsdXR0b24vTVNcXG5nbHV0dG9ub3VzL1lcXG5nbHV0dG9ueS9NXFxuZ2x5Y2VyaW4vTVxcbmdseWNlcm9sL01cXG5nbHljb2dlbi9NXFxuZ2x5Y29sXFxuZ2x5cGhcXG5nbVxcbmduYXJsL1NNREdcXG5nbmFybHkvVFJcXG5nbmFzaC9NRFNHXFxuZ25hdC9NU1xcbmduYXcvREdTXFxuZ25laXNzL01cXG5nbm9jY2hpXFxuZ25vbWUvU01cXG5nbm9taWNcXG5nbm9taXNoXFxuZ251L1NNXFxuZ28vSk1SSFpHXFxuZ29hZC9NREdTXFxuZ29hbC9NU1xcbmdvYWxpZS9TTVxcbmdvYWxrZWVwZXIvTVNcXG5nb2Fsa2VlcGluZy9NXFxuZ29hbGxlc3NcXG5nb2FsbW91dGhcXG5nb2FsbW91dGhzXFxuZ29hbHBvc3QvTVNcXG5nb2Fsc2NvcmVyL1NcXG5nb2FsdGVuZGVyL01TXFxuZ29hdC9NU1xcbmdvYXRlZS9TTVxcbmdvYXRoZXJkL01TXFxuZ29hdHNraW4vTVNcXG5nb2IvU01cXG5nb2JiZWRcXG5nb2JiZXQvU01cXG5nb2JiaW5nXFxuZ29iYmxlL0RSU01aR1xcbmdvYmJsZWR5Z29vay9NXFxuZ29iYmxlci9NXFxuZ29ibGV0L1NNXFxuZ29ibGluL1NNXFxuZ29ic21hY2tlZFxcbmdvYnN0b3BwZXIvU1xcbmdvZC9TTVxcbmdvZGF3ZnVsXFxuZ29kY2hpbGQvTVxcbmdvZGNoaWxkcmVuL01cXG5nb2RkYW1taXRcXG5nb2RkYW1uL0RcXG5nb2RkYXVnaHRlci9NU1xcbmdvZGRlc3MvTVNcXG5nb2RmYXRoZXIvU01cXG5nb2Rmb3JzYWtlblxcbmdvZGhlYWQvTVxcbmdvZGhvb2QvTVxcbmdvZGxlc3MvUFlcXG5nb2RsZXNzbmVzcy9NXFxuZ29kbGlrZVxcbmdvZGxpbmVzcy9VTVxcbmdvZGx5L1VSVFBcXG5nb2Rtb3RoZXIvU01cXG5nb2RwYXJlbnQvU01cXG5nb2RzZW5kL1NNXFxuZ29kc29uL1NNXFxuZ29kc3BlZWRcXG5nb2VyL01cXG5nb2VzXFxuZ29mZXIvU01cXG5nb2dnbGUvRFNNR1xcbmdvZ2dsZXMvTVxcbmdvaW5nL01cXG5nb2l0ZXIvU01cXG5nb2xkL01OU1xcbmdvbGRicmljay9aR1NNRFJcXG5nb2xkYnJpY2tlci9NXFxuZ29sZGVuL1RSXFxuZ29sZGVucm9kL01cXG5nb2xkZmllbGQvU1xcbmdvbGRmaW5jaC9NU1xcbmdvbGRmaXNoL01TXFxuZ29sZG1pbmUvU01cXG5nb2xkc21pdGgvTVxcbmdvbGRzbWl0aHNcXG5nb2xmL01EUlpHU1xcbmdvbGZlci9NXFxuZ29sbGl3b2cvU1xcbmdvbGx5L1NNXFxuZ29uYWQvU01cXG5nb25hZGFsXFxuZ29uZG9sYS9NU1xcbmdvbmRvbGllci9TTVxcbmdvbmUvWlJcXG5nb25lci9NXFxuZ29uZy9NREdTXFxuZ29uay9TXFxuZ29ubmFcXG5nb25vcnJoZWEvTVxcbmdvbm9ycmhlYWxcXG5nb256b1xcbmdvby9NXFxuZ29vYmVyL1NNXFxuZ29vZC9NWVNQXFxuZ29vZGJ5ZS9NU1xcbmdvb2RoZWFydGVkXFxuZ29vZGlzaFxcbmdvb2RseS9UUlxcbmdvb2RuZXNzL01cXG5nb29kbmlnaHRcXG5nb29kcy9NXFxuZ29vZHdpbGwvTVxcbmdvb2R5L1NNXFxuZ29vZXlcXG5nb29mL01ER1NcXG5nb29mYmFsbC9TTVxcbmdvb2ZpbmVzcy9NXFxuZ29vZnkvUlBUXFxuZ29vZ2xlL0RTTUdcXG5nb29nbHkvU1xcbmdvb2llclxcbmdvb2llc3RcXG5nb29rL01TXFxuZ29vbi9NU1xcbmdvb3AvTVxcbmdvb3NlL0RTTUdcXG5nb29zZWJlcnJ5L1NNXFxuZ29vc2VidW1wcy9NXFxuZ29vc2VzdGVwL1NcXG5nb29zZXN0ZXBwZWRcXG5nb29zZXN0ZXBwaW5nXFxuZ29waGVyL1NNXFxuZ29yZS9NR0RTXFxuZ29yZ2Unc1xcbmdvcmdlL0VEU0dcXG5nb3JnZW91cy9ZUFxcbmdvcmdlb3VzbmVzcy9NXFxuZ29yZ29uL1NNXFxuZ29yaWxsYS9NU1xcbmdvcmlseVxcbmdvcmluZXNzL01cXG5nb3JtYW5kaXplL0RSU1pHXFxuZ29ybWFuZGl6ZXIvTVxcbmdvcm1sZXNzXFxuZ29ycC9NU1xcbmdvcnNlL01cXG5nb3J5L1JUUFxcbmdvc2hcXG5nb3NoYXdrL01TXFxuZ29zbGluZy9TTVxcbmdvc3BlbC9NU1xcbmdvc3NhbWVyL01cXG5nb3NzaXAvTURSWkdTXFxuZ29zc2lwZXIvTVxcbmdvc3NpcHlcXG5nb3RcXG5nb3RjaGEvU1xcbmdvdGhzXFxuZ290dGFcXG5nb3R0ZW5cXG5nb3VhY2hlL1NcXG5nb3VnZS9EUlNNWkdcXG5nb3VnZXIvTVxcbmdvdWxhc2gvTVNcXG5nb3VyZC9TTVxcbmdvdXJkZS9NU1xcbmdvdXJtYW5kL1NNXFxuZ291cm1ldC9TTVxcbmdvdXQvTVxcbmdvdXR5L1RSXFxuZ292XFxuZ292ZXJuL0RHU0JMXFxuZ292ZXJuYWJsZS9VXFxuZ292ZXJuYW5jZS9NXFxuZ292ZXJuZWQvVVxcbmdvdmVybmVzcy9NU1xcbmdvdmVybm1lbnQvTVNcXG5nb3Zlcm5tZW50YWxcXG5nb3Zlcm5vci9TTVxcbmdvdmVybm9yc2hpcC9NXFxuZ292dFxcbmdvd24vTURHU1xcbmdyXFxuZ3JhYi9NU1xcbmdyYWJiZWRcXG5ncmFiYmVyL01TXFxuZ3JhYmJpbmdcXG5ncmFiYnkvVFJcXG5ncmFjZS9FRFNNR1xcbmdyYWNlZnVsL0VQWVxcbmdyYWNlZnVsbmVzcy9FTVxcbmdyYWNlbGVzcy9QWVxcbmdyYWNlbGVzc25lc3MvTVxcbmdyYWNpb3VzL1VZXFxuZ3JhY2lvdXNuZXNzL01cXG5ncmFja2xlL01TXFxuZ3JhZC9NUlpTQlxcbmdyYWRhdGUvWEdORFNcXG5ncmFkYXRpb24vQ01cXG5ncmFkZSdzXFxuZ3JhZGUvQ0FEU0dcXG5ncmFkZWQvVVxcbmdyYWRlci9NXFxuZ3JhZGllbnQvTVNcXG5ncmFkdWFsL1BZXFxuZ3JhZHVhbGlzbS9NXFxuZ3JhZHVhbG5lc3MvTVxcbmdyYWR1YXRlL1hNR05EU1xcbmdyYWR1YXRpb24vTVxcbmdyYWZmaXRpXFxuZ3JhZmZpdG8vTVxcbmdyYWZ0L1NNRFJaR1xcbmdyYWZ0ZXIvTVxcbmdyYWhhbS9TXFxuZ3JhaWxcXG5ncmFpbi9JU01EXFxuZ3JhaW5pbmVzcy9NXFxuZ3JhaW55L1BUUlxcbmdyYW0vS01TXFxuZ3JhbW1hci9NU1xcbmdyYW1tYXJpYW4vU01cXG5ncmFtbWF0aWNhbC9VWVxcbmdyYW1vcGhvbmUvTVNcXG5ncmFtcHVzL01TXFxuZ3Jhbi9TXFxuZ3JhbmFyeS9TTVxcbmdyYW5kL1NNUllQVFxcbmdyYW5kYW0vTVNcXG5ncmFuZGF1bnQvTVNcXG5ncmFuZGNoaWxkL01cXG5ncmFuZGNoaWxkcmVuL01cXG5ncmFuZGRhZC9TTVxcbmdyYW5kZGFkZHkvU01cXG5ncmFuZGRhdWdodGVyL1NNXFxuZ3JhbmRlZS9NU1xcbmdyYW5kZXVyL01cXG5ncmFuZGZhdGhlci9HTURZU1xcbmdyYW5kaWxvcXVlbmNlL01cXG5ncmFuZGlsb3F1ZW50XFxuZ3JhbmRpb3NlL1lcXG5ncmFuZGlvc2l0eS9NXFxuZ3JhbmRtYS9NU1xcbmdyYW5kbW90aGVyL01ZU1xcbmdyYW5kbmVwaGV3L01TXFxuZ3JhbmRuZXNzL01cXG5ncmFuZG5pZWNlL01TXFxuZ3JhbmRwYS9NU1xcbmdyYW5kcGFyZW50L01TXFxuZ3JhbmRzb24vTVNcXG5ncmFuZHN0YW5kL1NHTURcXG5ncmFuZHVuY2xlL1NNXFxuZ3JhbmdlL1NNXFxuZ3Jhbml0ZS9NXFxuZ3Jhbml0aWNcXG5ncmFubnkvU01cXG5ncmFub2xhL01cXG5ncmFudC9TTURSWkdcXG5ncmFudGVlL01TXFxuZ3JhbnRlci9NXFxuZ3JhbnRzbWFuc2hpcC9NXFxuZ3JhbnVsYXJcXG5ncmFudWxhcml0eS9NXFxuZ3JhbnVsYXRlL0dORFNcXG5ncmFudWxhdGlvbi9NXFxuZ3JhbnVsZS9NU1xcbmdyYXBlL1NNXFxuZ3JhcGVmcnVpdC9NU1xcbmdyYXBlc2hvdC9NXFxuZ3JhcGV2aW5lL1NNXFxuZ3JhcGgvTURHXFxuZ3JhcGhpYy9NU1xcbmdyYXBoaWNhbC9ZXFxuZ3JhcGhpdGUvTVxcbmdyYXBob2xvZ2lzdC9NU1xcbmdyYXBob2xvZ3kvTVxcbmdyYXBoc1xcbmdyYXBuZWwvTVNcXG5ncmFwcGxlL01HRFNcXG5ncmFzcC9TTURCR1xcbmdyYXNzL01EU0dcXG5ncmFzc2hvcHBlci9NU1xcbmdyYXNzbGFuZC9NU1xcbmdyYXNzcm9vdHNcXG5ncmFzc3kvVFJcXG5ncmF0ZS9EUlNNWkdKXFxuZ3JhdGVmdWwvVVlQXFxuZ3JhdGVmdWxuZXNzL1VNXFxuZ3JhdGVyL01cXG5ncmF0aWZpY2F0aW9uL01cXG5ncmF0aWZ5L0dOWERTXFxuZ3JhdGlmeWluZy9ZXFxuZ3JhdGluL1NcXG5ncmF0aW5nL01ZXFxuZ3JhdGlzXFxuZ3JhdGl0dWRlL0lNXFxuZ3JhdHVpdG91cy9ZUFxcbmdyYXR1aXRvdXNuZXNzL01cXG5ncmF0dWl0eS9TTVxcbmdyYXZhbWVuL01TXFxuZ3JhdmUvRFJTTVlUR1BcXG5ncmF2ZWRpZ2dlci9TTVxcbmdyYXZlbC9TR01EWVxcbmdyYXZlblxcbmdyYXZlbmVzcy9NXFxuZ3JhdmVzaWRlL01TXFxuZ3JhdmVzdG9uZS9TTVxcbmdyYXZleWFyZC9NU1xcbmdyYXZpZFxcbmdyYXZpbWV0ZXIvTVNcXG5ncmF2aXRhc1xcbmdyYXZpdGF0ZS9HTkRTXFxuZ3Jhdml0YXRpb24vTVxcbmdyYXZpdGF0aW9uYWxcXG5ncmF2aXR5L01cXG5ncmF2eS9TTVxcbmdyYXkvTURSVEdTUFxcbmdyYXliZWFyZC9TTVxcbmdyYXlpc2hcXG5ncmF5bmVzcy9NXFxuZ3JhemUvRFJTTVpHXFxuZ3JhemVyL01cXG5ncmVhc2UvRFJTTVpHXFxuZ3JlYXNlcGFpbnQvTVxcbmdyZWFzaWx5XFxuZ3JlYXNpbmVzcy9NXFxuZ3JlYXN5L1BUUlxcbmdyZWF0L1NNUllQVFxcbmdyZWF0Y29hdC9TTVxcbmdyZWF0aGVhcnRlZFxcbmdyZWF0bmVzcy9NXFxuZ3JlYmUvU01cXG5ncmVlZC9NXFxuZ3JlZWRpbHlcXG5ncmVlZGluZXNzL01cXG5ncmVlZHkvUFRSXFxuZ3JlZW4vR1BTTURSWVRcXG5ncmVlbmJhY2svTVNcXG5ncmVlbmJlbHQvTVNcXG5ncmVlbmVyeS9NXFxuZ3JlZW5maWVsZFxcbmdyZWVuZmx5L1NcXG5ncmVlbmdhZ2UvTVNcXG5ncmVlbmdyb2Nlci9TTVxcbmdyZWVuaG9ybi9TTVxcbmdyZWVuaG91c2UvU01cXG5ncmVlbmlzaFxcbmdyZWVubWFpbC9NXFxuZ3JlZW5uZXNzL01cXG5ncmVlbnJvb20vU01cXG5ncmVlbnN0b25lXFxuZ3JlZW5zd2FyZC9NXFxuZ3JlZW53b29kL01cXG5ncmVldC9aR0pTRFJcXG5ncmVldGVyL01cXG5ncmVldGluZy9NXFxuZ3JlZ2FyaW91cy9QWVxcbmdyZWdhcmlvdXNuZXNzL01cXG5ncmVtbGluL1NNXFxuZ3JlbmFkZS9TTVxcbmdyZW5hZGllci9NU1xcbmdyZW5hZGluZS9NXFxuZ3JlcC9TXFxuZ3JlcHBlZFxcbmdyZXBwaW5nXFxuZ3Jldy9BXFxuZ3JleWhvdW5kL1NNXFxuZ3JpYmJsZS9TXFxuZ3JpZC9NU1xcbmdyaWRkbGUvU01cXG5ncmlkZGxlY2FrZS9TTVxcbmdyaWRpcm9uL1NNXFxuZ3JpZGxvY2svU01EXFxuZ3JpZWYvU01cXG5ncmlldmFuY2UvTVNcXG5ncmlldmUvWkdEUlNcXG5ncmlldmVyL01cXG5ncmlldm91cy9QWVxcbmdyaWV2b3VzbmVzcy9NXFxuZ3JpZmZpbi9TTVxcbmdyaWZmb24vU01cXG5ncmlsbC9TR01ESlxcbmdyaWxsZS9NU1xcbmdyaW0vRFlQR1xcbmdyaW1hY2UvRFNNR1xcbmdyaW1lL1NNXFxuZ3JpbWluZXNzL01cXG5ncmltbWVyXFxuZ3JpbW1lc3RcXG5ncmltbmVzcy9NXFxuZ3JpbXkvVFJQXFxuZ3Jpbi9NU1xcbmdyaW5kL1NaR01SSlxcbmdyaW5kZXIvTVxcbmdyaW5kc3RvbmUvTVNcXG5ncmluZ28vTVNcXG5ncmlubmVkXFxuZ3Jpbm5pbmdcXG5ncmlwL01EUlNaR1xcbmdyaXBlL1NNXFxuZ3JpcGVyL01cXG5ncmlwcGUvTVpHRFJcXG5ncmlwcGVyL01cXG5ncmlzbGluZXNzL01cXG5ncmlzbHkvUlRQXFxuZ3Jpc3QvTVlcXG5ncmlzdGxlL01cXG5ncmlzdG1pbGwvTVNcXG5ncml0L01TXFxuZ3JpdHMvTVxcbmdyaXR0ZWRcXG5ncml0dGVyL1NNXFxuZ3JpdHRpbmVzcy9NXFxuZ3JpdHRpbmdcXG5ncml0dHkvUlRQXFxuZ3JpenpsZS9EU0dcXG5ncml6emx5L1RSU01cXG5ncm9hbi9TR01EXFxuZ3JvYXQvU01cXG5ncm9jZXIvTVNcXG5ncm9jZXJ5L1NNXFxuZ3JvZy9NXFxuZ3JvZ2dpbHlcXG5ncm9nZ2luZXNzL01cXG5ncm9nZ3kvUFJUXFxuZ3JvaW4vU01cXG5ncm9rL1NcXG5ncm9ra2VkXFxuZ3Jva2tpbmdcXG5ncm9tbWV0L1NNXFxuZ3Jvb20vU1pHTURSXFxuZ3Jvb21lci9NXFxuZ3Jvb21pbmcvTVxcbmdyb29tc21hbi9NXFxuZ3Jvb21zbWVuXFxuZ3Jvb3ZlL01HRFNcXG5ncm9vdnkvUlRcXG5ncm9wZS9EUlNNWkdcXG5ncm9wZXIvTVxcbmdyb3NiZWFrL01TXFxuZ3Jvc2dyYWluL01cXG5ncm9zcy9QVEdNRFJTWVxcbmdyb3NzbmVzcy9NXFxuZ3JvdGVzcXVlL1NQTVlcXG5ncm90ZXNxdWVuZXNzL01cXG5ncm90dG8vTVxcbmdyb3R0b2VzXFxuZ3JvdHR5L1RSXFxuZ3JvdWNoL0dNRFNcXG5ncm91Y2hpbHlcXG5ncm91Y2hpbmVzcy9NXFxuZ3JvdWNoeS9SVFBcXG5ncm91bmQvWkdNRFJKU1xcbmdyb3VuZGJyZWFraW5nL01TXFxuZ3JvdW5kY2xvdGhcXG5ncm91bmRjbG90aHNcXG5ncm91bmRlci9NXFxuZ3JvdW5kaG9nL01TXFxuZ3JvdW5kaW5nL01cXG5ncm91bmRsZXNzL1lcXG5ncm91bmRudXQvTVNcXG5ncm91bmRzaGVldC9TXFxuZ3JvdW5kc2tlZXBlci9TXFxuZ3JvdW5kc21hblxcbmdyb3VuZHNtZW5cXG5ncm91bmRzd2VsbC9TTVxcbmdyb3VuZHdhdGVyL01cXG5ncm91bmR3b3JrL01cXG5ncm91cC9KU1pHTURSXFxuZ3JvdXBlci9NXFxuZ3JvdXBpZS9NU1xcbmdyb3VwaW5nL01cXG5ncm91cHdhcmUvTVxcbmdyb3VzZS9NWkdEUlNcXG5ncm91c2VyL01cXG5ncm91dC9TR01EXFxuZ3JvdmUvU01cXG5ncm92ZWwvWkdEUlNcXG5ncm92ZWxlci9NXFxuZ3JvdmVsbGVkXFxuZ3JvdmVsbGluZ1xcbmdyb3cvQUhTR1xcbmdyb3dlci9NU1xcbmdyb3dpbmcvSVxcbmdyb3dsL1NaR01EUlxcbmdyb3dsZXIvTVxcbmdyb3duL0FJXFxuZ3Jvd251cC9NU1xcbmdyb3d0aC9BTVxcbmdyb3d0aHNcXG5ncnViL01TXFxuZ3J1YmJlZFxcbmdydWJiZXIvTVNcXG5ncnViYmlseVxcbmdydWJiaW5lc3MvTVxcbmdydWJiaW5nXFxuZ3J1YmJ5L1RSUFxcbmdydWJzdGFrZS9NXFxuZ3J1ZGdlL01HRFNcXG5ncnVkZ2luZy9ZXFxuZ3J1ZS9TXFxuZ3J1ZWwvR0pNXFxuZ3J1ZWxpbmcvWVxcbmdydWVzb21lL1JZVFBcXG5ncnVlc29tZW5lc3MvTVxcbmdydWZmL1RQUllcXG5ncnVmZm5lc3MvTVxcbmdydW1ibGUvRFJTTVpHSlxcbmdydW1ibGVyL01cXG5ncnVtcC9TTVxcbmdydW1waWx5XFxuZ3J1bXBpbmVzcy9NXFxuZ3J1bXB5L1BSVFxcbmdydW5nZS9NU1xcbmdydW5neS9SVFxcbmdydW5pb24vU01cXG5ncnVudC9TR01EXFxuZ3RcXG5ndWFjYW1vbGUvTVxcbmd1YW5pbmUvTVxcbmd1YW5vL01cXG5ndWFyYW5pL01TXFxuZ3VhcmFudGVlL01EU1xcbmd1YXJhbnRlZWluZ1xcbmd1YXJhbnRvci9NU1xcbmd1YXJhbnR5L0dEU01cXG5ndWFyZC9TWkdNRFJcXG5ndWFyZGVkL1lcXG5ndWFyZGVyL01cXG5ndWFyZGhvdXNlL1NNXFxuZ3VhcmRpYW4vU01cXG5ndWFyZGlhbnNoaXAvTVxcbmd1YXJkcmFpbC9TTVxcbmd1YXJkcm9vbS9TTVxcbmd1YXJkc21hbi9NXFxuZ3VhcmRzbWVuXFxuZ3VhdmEvU01cXG5ndWJlcm5hdG9yaWFsXFxuZ3VlcnJpbGxhL1NNXFxuZ3Vlc3MvWkdCTURSU1xcbmd1ZXNzZXIvTVxcbmd1ZXNzdGltYXRlL0RTTUdcXG5ndWVzc3dvcmsvTVxcbmd1ZXN0L1NHTURcXG5ndWVzdGJvb2svU01cXG5ndWVzdGhvdXNlL1NcXG5ndWVzdHJvb20vU1xcbmd1ZmYvTVxcbmd1ZmZhdy9NREdTXFxuZ3VpZGFuY2UvTVxcbmd1aWRlL0RSU01aR1xcbmd1aWRlYm9vay9TTVxcbmd1aWRlZC9VXFxuZ3VpZGVsaW5lL1NNXFxuZ3VpZGVwb3N0L1NNXFxuZ3VpZGVyL01cXG5ndWlsZC9TWk1SXFxuZ3VpbGRlci9NXFxuZ3VpbGRoYWxsL01TXFxuZ3VpbGUvTVxcbmd1aWxlZnVsXFxuZ3VpbGVsZXNzL1lQXFxuZ3VpbGVsZXNzbmVzcy9NXFxuZ3VpbGxlbW90L1NcXG5ndWlsbG90aW5lL0RTTUdcXG5ndWlsdC9NXFxuZ3VpbHRpbHlcXG5ndWlsdGluZXNzL01cXG5ndWlsdGxlc3NcXG5ndWlsdHkvUFJUXFxuZ3VpbmVhL01TXFxuZ3Vpc2UvRVNNXFxuZ3VpdGFyL01TXFxuZ3VpdGFyaXN0L1NNXFxuZ3VsYWcvU01cXG5ndWxjaC9NU1xcbmd1bGRlbi9NU1xcbmd1bGYvTVNcXG5ndWxsL01EU0dcXG5ndWxsZXQvTVNcXG5ndWxsaWJpbGl0eS9NXFxuZ3VsbGlibGVcXG5ndWxseS9TTVxcbmd1bHAvTURSU1pHXFxuZ3VscGVyL01cXG5ndW0vU01cXG5ndW1iYWxsL1NcXG5ndW1iby9TTVxcbmd1bWJvaWwvU01cXG5ndW1ib290L1NcXG5ndW1kcm9wL1NNXFxuZ3VtbWVkXFxuZ3VtbWluZ1xcbmd1bW15L1RSXFxuZ3VtcHRpb24vTVxcbmd1bXNob2UvTURTXFxuZ3Vtc2hvZWluZ1xcbmd1bi9TTVxcbmd1bmJvYXQvU01cXG5ndW5maWdodC9NUlpTXFxuZ3VuZmlnaHRlci9NXFxuZ3VuZmlyZS9NXFxuZ3VuZ2VcXG5ndW5neVxcbmd1bmsvTVxcbmd1bmt5XFxuZ3VubWFuL01cXG5ndW5tZW5cXG5ndW5tZXRhbC9NXFxuZ3VubmVkXFxuZ3VubmVsL01TXFxuZ3VubmVyL01TXFxuZ3VubmVyeS9NXFxuZ3VubmluZ1xcbmd1bm55L01cXG5ndW5ueXNhY2svTVNcXG5ndW5wb2ludC9NXFxuZ3VucG93ZGVyL01cXG5ndW5ydW5uZXIvTVNcXG5ndW5ydW5uaW5nL01cXG5ndW5zaGlwL01TXFxuZ3Vuc2hvdC9NU1xcbmd1bnNsaW5nZXIvU01cXG5ndW5zbWl0aC9NXFxuZ3Vuc21pdGhzXFxuZ3Vud2FsZS9NU1xcbmd1cHB5L1NNXFxuZ3VyZ2xlL01HRFNcXG5ndXJuZXkvTVNcXG5ndXJ1L01TXFxuZ3VzaC9NRFJTWkdcXG5ndXNoZXIvTVxcbmd1c2hpbmcvWVxcbmd1c2h5L1RSXFxuZ3Vzc2V0L01TREdcXG5ndXNzeS9EU0dcXG5ndXN0L0VNRFNHXFxuZ3VzdGF0b3J5XFxuZ3VzdGlseVxcbmd1c3RvL01cXG5ndXN0eS9SVFxcbmd1dC9TTVxcbmd1dGxlc3MvUFxcbmd1dGxlc3NuZXNzL01cXG5ndXRzeS9SVFxcbmd1dHRlZFxcbmd1dHRlci9TTURHXFxuZ3V0dGVyc25pcGUvTVNcXG5ndXR0aW5nXFxuZ3V0dHVyYWwvTVNcXG5ndXR0eS9SVFxcbmd1di9TXFxuZ3V2bm9yL1NcXG5ndXkvU0dNRFxcbmd1enpsZS9EUlNaR1xcbmd1enpsZXIvTVxcbmd5bS9TTVxcbmd5bWtoYW5hL01TXFxuZ3ltbmFzaXVtL01TXFxuZ3ltbmFzdC9NU1xcbmd5bW5hc3RpYy9TXFxuZ3ltbmFzdGljYWxseVxcbmd5bW5hc3RpY3MvTVxcbmd5bW5vc3Blcm0vU01cXG5neW1zbGlwL1NcXG5neW5lY29sb2dpY1xcbmd5bmVjb2xvZ2ljYWxcXG5neW5lY29sb2dpc3QvU01cXG5neW5lY29sb2d5L01cXG5neXAvU01cXG5neXBwZWRcXG5neXBwZXIvU01cXG5neXBwaW5nXFxuZ3lwc3Rlci9TTVxcbmd5cHN1bS9NXFxuZ3lwc3kvU01cXG5neXJhdGUvRFNHTlhcXG5neXJhdGlvbi9NXFxuZ3lyYXRvci9TTVxcbmd5cmZhbGNvbi9NU1xcbmd5cm8vTVNcXG5neXJvc2NvcGUvTVNcXG5neXJvc2NvcGljXFxuZ3l2ZS9NR0RTXFxuaCdtXFxuaC9OUlNYWkdWSlxcbmhhL1NIXFxuaGFiZXJkYXNoZXIvU01cXG5oYWJlcmRhc2hlcnkvU01cXG5oYWJpbGltZW50L1NNXFxuaGFiaXQnc1xcbmhhYml0L0lTQlxcbmhhYml0YWJpbGl0eS9NXFxuaGFiaXRhdC9TTVxcbmhhYml0YXRpb24vTVNcXG5oYWJpdHVhbC9ZUFxcbmhhYml0dWFsbmVzcy9NXFxuaGFiaXR1YXRlL0dORFNcXG5oYWJpdHVhdGlvbi9NXFxuaGFiaXR1ZS9TTVxcbmhhY2llbmRhL1NNXFxuaGFjay9NRFJaR1NcXG5oYWNrZXIvTVxcbmhhY2tpbmcvTVxcbmhhY2tpc2hcXG5oYWNrbGUvTVNcXG5oYWNrbmV5L1NNREdcXG5oYWNrc2F3L1NNXFxuaGFja3RpdmlzdC9NU1xcbmhhY2t3b3JrL01cXG5oYWRcXG5oYWRkb2NrL1NNXFxuaGFkaXRoXFxuaGFkbid0XFxuaGFkc3RcXG5oYWZuaXVtL01cXG5oYWZ0L01TXFxuaGFnL1NNXFxuaGFnZ2FyZC9ZUFxcbmhhZ2dhcmRuZXNzL01cXG5oYWdnaXMvTVNcXG5oYWdnaXNoXFxuaGFnZ2xlL01aR0RSU1xcbmhhZ2dsZXIvTVxcbmhhZ2lvZ3JhcGhlci9TTVxcbmhhZ2lvZ3JhcGh5L1NNXFxuaGFobml1bS9NXFxuaGFpa3UvTVxcbmhhaWwvTURHU1xcbmhhaWxzdG9uZS9NU1xcbmhhaWxzdG9ybS9NU1xcbmhhaXIvTURTXFxuaGFpcmJhbGwvTVNcXG5oYWlyYmFuZC9TXFxuaGFpcmJyZWFkdGgvTVxcbmhhaXJicmVhZHRoc1xcbmhhaXJicnVzaC9NU1xcbmhhaXJjbG90aC9NXFxuaGFpcmN1dC9TTVxcbmhhaXJkby9NU1xcbmhhaXJkcmVzc2VyL1NNXFxuaGFpcmRyZXNzaW5nL01cXG5oYWlyZHJ5ZXIvTVNcXG5oYWlyZ3JpcC9TXFxuaGFpcmluZXNzL01cXG5oYWlybGVzc1xcbmhhaXJsaWtlXFxuaGFpcmxpbmUvU01cXG5oYWlybmV0L1NNXFxuaGFpcnBpZWNlL01TXFxuaGFpcnBpbi9TTVxcbmhhaXJzYnJlYWR0aC9NXFxuaGFpcnNicmVhZHRoc1xcbmhhaXJzcGxpdHRlci9TTVxcbmhhaXJzcGxpdHRpbmcvTVxcbmhhaXJzcHJheS9TXFxuaGFpcnNwcmluZy9NU1xcbmhhaXJzdHlsZS9NU1xcbmhhaXJzdHlsaXN0L1NNXFxuaGFpcnkvVFJQXFxuaGFqXFxuaGFqai9NXFxuaGFqamVzXFxuaGFqamkvU01cXG5oYWtlL01TXFxuaGFsYWwvTVxcbmhhbGJlcmQvU01cXG5oYWxjeW9uXFxuaGFsZS9JVEdEUlNcXG5oYWxmL01cXG5oYWxmYmFjay9TTVxcbmhhbGZoZWFydGVkL1BZXFxuaGFsZmhlYXJ0ZWRuZXNzL01cXG5oYWxmcGVuY2VcXG5oYWxmcGVubnkvU01cXG5oYWxmdGltZS9NU1xcbmhhbGZ0b25lL01TXFxuaGFsZndheVxcbmhhbGZ3aXQvU01cXG5oYWxpYnV0L1NNXFxuaGFsaXRlL01cXG5oYWxpdG9zaXMvTVxcbmhhbGwvTVNcXG5oYWxsZWx1amFoL01cXG5oYWxsZWx1amFoc1xcbmhhbGxtYXJrL0dNRFNcXG5oYWxsb28vTVNHXFxuaGFsbG93L0RTR1xcbmhhbGxvd2VkL1VcXG5oYWxsdWNpbmF0ZS9HTlhEU1xcbmhhbGx1Y2luYXRpb24vTVxcbmhhbGx1Y2luYXRvcnlcXG5oYWxsdWNpbm9nZW4vU01cXG5oYWxsdWNpbm9nZW5pYy9TTVxcbmhhbGx3YXkvU01cXG5oYWxvL01ER1NcXG5oYWxvZ2VuL1NNXFxuaGFsb25cXG5oYWx0L01EUlpHU1xcbmhhbHRlci9HTURcXG5oYWx0ZXJuZWNrL1NcXG5oYWx0aW5nL1lcXG5oYWx2ZS9EU0dcXG5oYWx5YXJkL01TXFxuaGFtL1NNXFxuaGFtYnVyZy9TWk1SXFxuaGFtYnVyZ2VyL01cXG5oYW1sZXQvTVNcXG5oYW1tZWRcXG5oYW1tZXIvTURSU0paR1xcbmhhbW1lcmVyL01cXG5oYW1tZXJoZWFkL1NNXFxuaGFtbWVybG9jay9TTVxcbmhhbW1lcnRvZS9NU1xcbmhhbW1pbmdcXG5oYW1tb2NrL1NNXFxuaGFtbXkvVFJcXG5oYW1wZXIvR01EU1xcbmhhbXBlcmVkL1VcXG5oYW1zdGVyL01TXFxuaGFtc3RyaW5nL0dTTVxcbmhhbXN0cnVuZ1xcbmhhbmQnc1xcbmhhbmQvVURHU1xcbmhhbmRiYWcvU01cXG5oYW5kYmFsbC9NU1xcbmhhbmRiYXJyb3cvU01cXG5oYW5kYmlsbC9NU1xcbmhhbmRib29rL01TXFxuaGFuZGJyYWtlL1NcXG5oYW5kY2FyL1NNXFxuaGFuZGNhcnQvTVNcXG5oYW5kY2xhc3AvTVNcXG5oYW5kY3JhZnQvU01ER1xcbmhhbmRjdWZmL01ER1NcXG5oYW5kZWQvUFxcbmhhbmRmdWwvU01cXG5oYW5kZ3VuL1NNXFxuaGFuZGhlbGQvTVNcXG5oYW5kaG9sZC9NU1xcbmhhbmRpY2FwL01TXFxuaGFuZGljYXBwZWRcXG5oYW5kaWNhcHBlci9NU1xcbmhhbmRpY2FwcGluZ1xcbmhhbmRpY3JhZnQvTVNcXG5oYW5kaWx5XFxuaGFuZGluZXNzL01cXG5oYW5kaXdvcmsvTVxcbmhhbmRrZXJjaGllZi9NU1xcbmhhbmRsZS9NWkdEUlNcXG5oYW5kbGViYXIvTVNcXG5oYW5kbGVyL01cXG5oYW5kbWFkZVxcbmhhbmRtYWlkL1hNTlNcXG5oYW5kbWFpZGVuL01cXG5oYW5kb3V0L1NNXFxuaGFuZG92ZXIvU1xcbmhhbmRwaWNrL0dEU1xcbmhhbmRyYWlsL01TXFxuaGFuZHNhdy9TTVxcbmhhbmRzZXQvU01cXG5oYW5kc2hha2UvSk1HU1xcbmhhbmRzb21lL1BZVFJcXG5oYW5kc29tZW5lc3MvTVxcbmhhbmRzcHJpbmcvTVNcXG5oYW5kc3RhbmQvU01cXG5oYW5kd29yay9NXFxuaGFuZHdvdmVuXFxuaGFuZHdyaXRpbmcvTVxcbmhhbmR3cml0dGVuXFxuaGFuZHkvVVRSXFxuaGFuZHltYW4vTVxcbmhhbmR5bWVuXFxuaGFuZy9NRFJKWkdTXFxuaGFuZ2FyL01TXFxuaGFuZ2RvZ1xcbmhhbmdlci9NXFxuaGFuZ2luZy9NXFxuaGFuZ21hbi9NXFxuaGFuZ21lblxcbmhhbmduYWlsL01TXFxuaGFuZ291dC9TTVxcbmhhbmdvdmVyL01TXFxuaGFuZ3VwL01TXFxuaGFuay9NUlpTXFxuaGFua2VyL0dKRFxcbmhhbmtlcmluZy9NXFxuaGFua2llL01TXFxuaGFuc29tL01TXFxuaGFwL01ZXFxuaGFwaGF6YXJkL1lQXFxuaGFwaGF6YXJkbmVzcy9NXFxuaGFwbGVzcy9ZUFxcbmhhcGxlc3NuZXNzL01cXG5oYXBsb2lkL01TXFxuaGFwcGVuL1NER0pcXG5oYXBwZW5pbmcvTVxcbmhhcHBlbnN0YW5jZS9TTVxcbmhhcHBpbHkvVVxcbmhhcHBpbmVzcy9VTVxcbmhhcHB5L1VSVFBcXG5oYXB0aWNcXG5oYXJhbmd1ZS9NR0RTXFxuaGFyYXNzL0xaR0RSU1xcbmhhcmFzc2VyL01cXG5oYXJhc3NtZW50L01cXG5oYXJiaW5nZXIvU01cXG5oYXJib3IvR01EU1xcbmhhcmJvcm1hc3Rlci9TXFxuaGFyZC9OUllYVFBcXG5oYXJkYmFjay9NU1xcbmhhcmRiYWxsL01cXG5oYXJkYm9hcmQvTVxcbmhhcmRib3VuZFxcbmhhcmRjb3JlXFxuaGFyZGNvdmVyL1NNXFxuaGFyZGVuL1pHRFJcXG5oYXJkZW5lZC9VXFxuaGFyZGVuZXIvTVxcbmhhcmRoYXQvTVNcXG5oYXJkaGVhZGVkL1BZXFxuaGFyZGhlYWRlZG5lc3MvTVxcbmhhcmRoZWFydGVkL1BZXFxuaGFyZGhlYXJ0ZWRuZXNzL01cXG5oYXJkaWhvb2QvTVxcbmhhcmRpbHlcXG5oYXJkaW5lc3MvTVxcbmhhcmRsaW5lci9NU1xcbmhhcmRuZXNzL01cXG5oYXJkc2NyYWJibGVcXG5oYXJkc2hpcC9TTVxcbmhhcmRzdGFuZC9TTVxcbmhhcmR0YWNrL01cXG5oYXJkdG9wL1NNXFxuaGFyZHdhcmUvTVxcbmhhcmR3aXJlZFxcbmhhcmR3b29kL1NNXFxuaGFyZHdvcmtpbmdcXG5oYXJkeS9QVFJcXG5oYXJlL01HRFNcXG5oYXJlYmVsbC9NU1xcbmhhcmVicmFpbmVkXFxuaGFyZWxpcC9TTVxcbmhhcmVsaXBwZWRcXG5oYXJlbS9TTVxcbmhhcmljb3QvU1xcbmhhcmsvREdTXFxuaGFybGVxdWluL1NNXFxuaGFybG90L1NNXFxuaGFybG90cnkvTVxcbmhhcm0vTURHU1xcbmhhcm1lZC9VXFxuaGFybWZ1bC9ZUFxcbmhhcm1mdWxuZXNzL01cXG5oYXJtbGVzcy9QWVxcbmhhcm1sZXNzbmVzcy9NXFxuaGFybW9uaWMvU01cXG5oYXJtb25pY2EvTVNcXG5oYXJtb25pY2FsbHlcXG5oYXJtb25pZXNcXG5oYXJtb25pb3VzL1BZXFxuaGFybW9uaW91c25lc3MvTVxcbmhhcm1vbml1bS9NU1xcbmhhcm1vbml6YXRpb24vTVxcbmhhcm1vbml6ZS9aR0RSU1xcbmhhcm1vbml6ZXIvTVxcbmhhcm1vbnkvRU1cXG5oYXJuZXNzJ3NcXG5oYXJuZXNzL1VEU0dcXG5oYXJwL01ER1NcXG5oYXJwaXN0L1NNXFxuaGFycG9vbi9aR1NNRFJcXG5oYXJwb29uZXIvTVxcbmhhcnBzaWNob3JkL01TXFxuaGFycHNpY2hvcmRpc3QvU01cXG5oYXJweS9TTVxcbmhhcnJpZGFuL01TXFxuaGFycmllci9NXFxuaGFycm93L1NNREdcXG5oYXJydW1waC9HRFxcbmhhcnJ1bXBoc1xcbmhhcnJ5L0RSU1pHXFxuaGFyc2gvUllUUFxcbmhhcnNobmVzcy9NXFxuaGFydC9NU1xcbmhhcnZlc3QvU01EUlpHXFxuaGFydmVzdGVkL1VcXG5oYXJ2ZXN0ZXIvTVxcbmhhc2gvQU1EU0dcXG5oYXNoaXNoL01cXG5oYXNodGFnL1NNXFxuaGFzbid0XFxuaGFzcC9NU1xcbmhhc3NsZS9EU01HXFxuaGFzc29jay9TTVxcbmhhc3QvRE5YR1xcbmhhc3RlL1NNXFxuaGFzdGVuL0RHXFxuaGFzdGlseVxcbmhhc3RpbmVzcy9NXFxuaGFzdHkvUlRQXFxuaGF0L1pHU01EUlxcbmhhdGJhbmQvU1xcbmhhdGJveC9NU1xcbmhhdGNoL01EU0dcXG5oYXRjaGJhY2svTVNcXG5oYXRjaGVjay9TTVxcbmhhdGNoZWQvVVxcbmhhdGNoZXJ5L1NNXFxuaGF0Y2hldC9TTVxcbmhhdGNoaW5nL01cXG5oYXRjaHdheS9TTVxcbmhhdGUvTVNcXG5oYXRlZnVsL1BZXFxuaGF0ZWZ1bG5lc3MvTVxcbmhhdGVtb25nZXIvTVNcXG5oYXRlci9NXFxuaGF0cGluL1NcXG5oYXRyZWQvU01cXG5oYXRzdGFuZC9TXFxuaGF0dGVkXFxuaGF0dGVyL1NNXFxuaGF0dGluZ1xcbmhhdWJlcmsvU01cXG5oYXVnaHRpbHlcXG5oYXVnaHRpbmVzcy9NXFxuaGF1Z2h0eS9QUlRcXG5oYXVsL01EUlpHU1xcbmhhdWxhZ2UvTVxcbmhhdWxlci9NXFxuaGF1bGllci9TXFxuaGF1bmNoL01TXFxuaGF1bnQvU01EUlpHXFxuaGF1bnRlci9NXFxuaGF1bnRpbmcvWVxcbmhhdXRldXIvTVxcbmhhdmUvTUdTXFxuaGF2ZW4ndFxcbmhhdmVuL1NNXFxuaGF2ZXJzYWNrL1NNXFxuaGF2b2MvTVxcbmhhdy9HU01EXFxuaGF3ay9NRFJaR1NcXG5oYXdrZXIvTVxcbmhhd2tpc2gvUFxcbmhhd2tpc2huZXNzL01cXG5oYXdzZXIvU01cXG5oYXd0aG9ybi9NU1xcbmhheS9HU01EXFxuaGF5Y29jay9TTVxcbmhheWxvZnQvU01cXG5oYXltYWtlci9TXFxuaGF5bWFraW5nXFxuaGF5bW93L1NNXFxuaGF5cmljay9NU1xcbmhheXJpZGUvTVNcXG5oYXlzZWVkL01TXFxuaGF5c3RhY2svU01cXG5oYXl3aXJlXFxuaGF6YXJkL1NNREdcXG5oYXphcmRvdXMvWVxcbmhhemUvTVpHSkRSU1xcbmhhemVsL1NNXFxuaGF6ZWxudXQvTVNcXG5oYXplci9NXFxuaGF6aWx5XFxuaGF6aW5lc3MvTVxcbmhhemluZy9NXFxuaGF6bWF0XFxuaGF6eS9SVFBcXG5oZHFyc1xcbmhlJ2RcXG5oZSdsbFxcbmhlL01cXG5oZWFkL01EUlpHSlNcXG5oZWFkYWNoZS9NU1xcbmhlYWRiYW5kL01TXFxuaGVhZGJhbmdlci9TXFxuaGVhZGJhbmdpbmdcXG5oZWFkYm9hcmQvU01cXG5oZWFkYnV0dC9EU0dcXG5oZWFkY2FzZS9TXFxuaGVhZGNoZWVzZVxcbmhlYWRjb3VudC9TXFxuaGVhZGRyZXNzL01TXFxuaGVhZGVyL01cXG5oZWFkZmlyc3RcXG5oZWFkZ2Vhci9NXFxuaGVhZGh1bnQvRFJTWkdcXG5oZWFkaHVudGVyL01cXG5oZWFkaHVudGluZy9NXFxuaGVhZGlseVxcbmhlYWRpbmVzcy9NXFxuaGVhZGluZy9NXFxuaGVhZGxhbXAvTVNcXG5oZWFkbGFuZC9NU1xcbmhlYWRsZXNzXFxuaGVhZGxpZ2h0L01TXFxuaGVhZGxpbmUvTVpHRFJTXFxuaGVhZGxpbmVyL01cXG5oZWFkbG9jay9NU1xcbmhlYWRsb25nXFxuaGVhZG1hbi9NXFxuaGVhZG1hc3Rlci9TTVxcbmhlYWRtZW5cXG5oZWFkbWlzdHJlc3MvTVNcXG5oZWFkcGhvbmUvTVNcXG5oZWFkcGllY2UvTVNcXG5oZWFkcGluL1NNXFxuaGVhZHF1YXJ0ZXIvU0RHXFxuaGVhZHF1YXJ0ZXJzL01cXG5oZWFkcmVzdC9NU1xcbmhlYWRyb29tL01cXG5oZWFkc2NhcmZcXG5oZWFkc2NhcnZlc1xcbmhlYWRzZXQvU01cXG5oZWFkc2hpcC9TTVxcbmhlYWRzaHJpbmtlci9TTVxcbmhlYWRzbWFuL01cXG5oZWFkc21lblxcbmhlYWRzdGFsbC9TTVxcbmhlYWRzdGFuZC9TTVxcbmhlYWRzdG9uZS9TTVxcbmhlYWRzdHJvbmdcXG5oZWFkdGVhY2hlci9TXFxuaGVhZHdhaXRlci9TTVxcbmhlYWR3YXRlcnMvTVxcbmhlYWR3YXkvTVxcbmhlYWR3aW5kL1NNXFxuaGVhZHdvcmQvU01cXG5oZWFkeS9SVFBcXG5oZWFsL0RSSFpHU1xcbmhlYWxlZC9VXFxuaGVhbGVyL01cXG5oZWFsdGgvTVxcbmhlYWx0aGNhcmVcXG5oZWFsdGhmdWwvUFlcXG5oZWFsdGhmdWxuZXNzL01cXG5oZWFsdGhpbHkvVVxcbmhlYWx0aGluZXNzL1VNXFxuaGVhbHRoeS9VVFJQXFxuaGVhcC9NREdTXFxuaGVhci9BSEdKU1xcbmhlYXJkL0FVXFxuaGVhcmVyL1NNXFxuaGVhcmluZy9BTVxcbmhlYXJrZW4vU0dEXFxuaGVhcnNheS9NXFxuaGVhcnNlJ3NcXG5oZWFyc2UvQVNcXG5oZWFydC9TTVxcbmhlYXJ0YWNoZS9NU1xcbmhlYXJ0YmVhdC9NU1xcbmhlYXJ0YnJlYWsvU01HXFxuaGVhcnRicm9rZW5cXG5oZWFydGJ1cm4vTVxcbmhlYXJ0ZW4vRVNHRFxcbmhlYXJ0ZmVsdFxcbmhlYXJ0aC9NXFxuaGVhcnRocnVnL1NcXG5oZWFydGhzXFxuaGVhcnRoc3RvbmUvU01cXG5oZWFydGlseVxcbmhlYXJ0aW5lc3MvTVxcbmhlYXJ0bGFuZC9NU1xcbmhlYXJ0bGVzcy9QWVxcbmhlYXJ0bGVzc25lc3MvTVxcbmhlYXJ0cmVuZGluZy9ZXFxuaGVhcnRzaWNrL1BcXG5oZWFydHNpY2tuZXNzL01cXG5oZWFydHN0cmluZ3MvTVxcbmhlYXJ0dGhyb2IvTVNcXG5oZWFydHdhcm1pbmdcXG5oZWFydHdvb2QvTVxcbmhlYXJ0eS9SU01QVFxcbmhlYXQnc1xcbmhlYXQvQURHU1xcbmhlYXRlZC9VXFxuaGVhdGVkbHlcXG5oZWF0ZXIvU01cXG5oZWF0aC9NTlJYXFxuaGVhdGhlbi9NXFxuaGVhdGhlbmRvbS9NXFxuaGVhdGhlbmlzaFxcbmhlYXRoZW5pc20vTVxcbmhlYXRoZXIvTVxcbmhlYXRoc1xcbmhlYXRpbmcvTVxcbmhlYXRwcm9vZlxcbmhlYXRzdHJva2UvTVxcbmhlYXR3YXZlL1NcXG5oZWF2ZS9EUlNNWkdcXG5oZWF2ZW4vU01ZXFxuaGVhdmVubHkvVFJcXG5oZWF2ZW5zL01cXG5oZWF2ZW53YXJkL1NcXG5oZWF2ZXIvTVxcbmhlYXZpbHlcXG5oZWF2aW5lc3MvTVxcbmhlYXZ5L1JTTVRQXFxuaGVhdnloZWFydGVkXFxuaGVhdnlzZXRcXG5oZWF2eXdlaWdodC9NU1xcbmhlY2svTVxcbmhlY2tsZS9EUlNNWkdcXG5oZWNrbGVyL01cXG5oZWNrbGluZy9NXFxuaGVjdGFyZS9TTVxcbmhlY3RpY1xcbmhlY3RpY2FsbHlcXG5oZWN0b2dyYW0vU01cXG5oZWN0b21ldGVyL01TXFxuaGVjdG9yL1NNREdcXG5oZWRnZS9EUlNNWkdcXG5oZWRnZWhvZy9NU1xcbmhlZGdlaG9wL1NcXG5oZWRnZWhvcHBlZFxcbmhlZGdlaG9wcGluZ1xcbmhlZGdlci9NXFxuaGVkZ2Vyb3cvU01cXG5oZWRvbmlzbS9NXFxuaGVkb25pc3QvTVNcXG5oZWRvbmlzdGljXFxuaGVlZC9NREdTXFxuaGVlZGVkL1VcXG5oZWVkZnVsL1lcXG5oZWVkbGVzcy9QWVxcbmhlZWRsZXNzbmVzcy9NXFxuaGVlaGF3L1NNREdcXG5oZWVsL01ER1NcXG5oZWVsbGVzc1xcbmhlZnQvTURHU1xcbmhlZnRpbHlcXG5oZWZ0aW5lc3MvTVxcbmhlZnR5L1BSVFxcbmhlZ2Vtb25pY1xcbmhlZ2Vtb255L01cXG5oZWdpcmEvU01cXG5oZWlmZXIvU01cXG5oZWlnaHQvWFNNTlxcbmhlaWdodGVuL0RHXFxuaGVpbm91cy9ZUFxcbmhlaW5vdXNuZXNzL01cXG5oZWlyL01TXFxuaGVpcmVzcy9NU1xcbmhlaXJsb29tL1NNXFxuaGVpc3QvU01ER1xcbmhlbGRcXG5oZWxpY2FsXFxuaGVsaWNlc1xcbmhlbGljb3B0ZXIvU0dNRFxcbmhlbGlvY2VudHJpY1xcbmhlbGlvdHJvcGUvU01cXG5oZWxpcGFkL1NcXG5oZWxpcG9ydC9NU1xcbmhlbGl1bS9NXFxuaGVsaXgvTVxcbmhlbGwvTVxcbmhlbGxiZW50XFxuaGVsbGNhdC9NU1xcbmhlbGxlYm9yZS9NXFxuaGVsbGZpcmVcXG5oZWxsaG9sZS9NU1xcbmhlbGxpb24vTVNcXG5oZWxsaXNoL1lQXFxuaGVsbGlzaG5lc3MvTVxcbmhlbGxvL1NNXFxuaGVsbHV2YVxcbmhlbG0vTVNcXG5oZWxtZXQvU01EXFxuaGVsbXNtYW4vTVxcbmhlbG1zbWVuXFxuaGVsb3QvU01cXG5oZWxwL01EUlpHU0pcXG5oZWxwZXIvTVxcbmhlbHBmdWwvVVlcXG5oZWxwZnVsbmVzcy9NXFxuaGVscGluZy9NXFxuaGVscGxlc3MvUFlcXG5oZWxwbGVzc25lc3MvTVxcbmhlbHBsaW5lL1NNXFxuaGVscG1hdGUvU01cXG5oZWx2ZS9TTVxcbmhlbS9TTVxcbmhlbWF0aXRlL01cXG5oZW1hdG9sb2dpY1xcbmhlbWF0b2xvZ2ljYWxcXG5oZW1hdG9sb2dpc3QvTVNcXG5oZW1hdG9sb2d5L01cXG5oZW1lL01cXG5oZW1pcGxlZ2lhXFxuaGVtaXNwaGVyZS9TTVxcbmhlbWlzcGhlcmljXFxuaGVtaXNwaGVyaWNhbFxcbmhlbWxpbmUvU01cXG5oZW1sb2NrL1NNXFxuaGVtbWVkXFxuaGVtbWVyL1NNXFxuaGVtbWluZ1xcbmhlbW9nbG9iaW4vTVxcbmhlbW9waGlsaWEvTVxcbmhlbW9waGlsaWFjL01TXFxuaGVtb3JyaGFnZS9NR0RTXFxuaGVtb3JyaGFnaWNcXG5oZW1vcnJob2lkL01TXFxuaGVtb3N0YXQvTVNcXG5oZW1wL01OXFxuaGVtc3RpdGNoL01EU0dcXG5oZW4vTVxcbmhlbmNlXFxuaGVuY2Vmb3J0aFxcbmhlbmNlZm9yd2FyZFxcbmhlbmNobWFuL01cXG5oZW5jaG1lblxcbmhlbm5hL1NNREdcXG5oZW5wZWNrL0dTRFxcbmhlcFxcbmhlcGFyaW4vTVxcbmhlcGF0aWNcXG5oZXBhdGl0aXMvTVxcbmhlcGF0b2N5dGUvU1xcbmhlcHBlclxcbmhlcHBlc3RcXG5oZXB0YWdvbi9NU1xcbmhlcHRhZ29uYWxcXG5oZXB0YXRobG9uL1NNXFxuaGVyYWxkL1NNREdcXG5oZXJhbGRlZC9VXFxuaGVyYWxkaWNcXG5oZXJhbGRyeS9NXFxuaGVyYi9NU1xcbmhlcmJhY2VvdXNcXG5oZXJiYWdlL01cXG5oZXJiYWwvU1xcbmhlcmJhbGlzdC9NU1xcbmhlcmJpY2lkYWxcXG5oZXJiaWNpZGUvTVNcXG5oZXJiaXZvcmUvU01cXG5oZXJiaXZvcm91c1xcbmhlcmN1bGVhblxcbmhlcmQvTURSWkdTXFxuaGVyZGVyL01cXG5oZXJkc21hbi9NXFxuaGVyZHNtZW5cXG5oZXJlL01cXG5oZXJlYWJvdXQvU1xcbmhlcmVhZnRlci9TTVxcbmhlcmVieVxcbmhlcmVkaXRhcnlcXG5oZXJlZGl0eS9NXFxuaGVyZWluXFxuaGVyZWluYWZ0ZXJcXG5oZXJlb2ZcXG5oZXJlb25cXG5oZXJlc3kvU01cXG5oZXJldGljL1NNXFxuaGVyZXRpY2FsXFxuaGVyZXRvXFxuaGVyZXRvZm9yZVxcbmhlcmV1bmRlclxcbmhlcmV1bnRvXFxuaGVyZXVwb25cXG5oZXJld2l0aFxcbmhlcml0YWJsZS9JXFxuaGVyaXRhZ2UvTVNcXG5oZXJtYXBocm9kaXRlL1NNXFxuaGVybWFwaHJvZGl0aWNcXG5oZXJtZXRpY1xcbmhlcm1ldGljYWwvWVxcbmhlcm1pdC9TTVxcbmhlcm1pdGFnZS9NU1xcbmhlcm1pdGlhblxcbmhlcm5pYS9TTVxcbmhlcm5pYWxcXG5oZXJuaWF0ZS9HTkRTXFxuaGVybmlhdGlvbi9NXFxuaGVyby9NXFxuaGVyb2VzXFxuaGVyb2ljL1NcXG5oZXJvaWNhbGx5XFxuaGVyb2ljcy9NXFxuaGVyb2luL1NNXFxuaGVyb2luZS9TTVxcbmhlcm9pc20vTVxcbmhlcm9uL1NNXFxuaGVycGVzL01cXG5oZXJwZXRvbG9naXN0L1NNXFxuaGVycGV0b2xvZ3kvTVxcbmhlcnJpbmcvTVNcXG5oZXJyaW5nYm9uZS9NXFxuaGVyc2VsZlxcbmhlcnR6L01cXG5oZXNpdGFuY2UvTVxcbmhlc2l0YW5jeS9NXFxuaGVzaXRhbnQvWVxcbmhlc2l0YXRlL0RTR05YXFxuaGVzaXRhdGluZy9VWVxcbmhlc2l0YXRpb24vTVxcbmhlc3NpYW5cXG5oZXRlcm8vU01cXG5oZXRlcm9kb3hcXG5oZXRlcm9kb3h5L01cXG5oZXRlcm9nZW5laXR5L01cXG5oZXRlcm9nZW5lb3VzL1lcXG5oZXRlcm9zZXh1YWwvTVlTXFxuaGV0ZXJvc2V4dWFsaXR5L01cXG5oZXVyaXN0aWMvTVNcXG5oZXVyaXN0aWNhbGx5XFxuaGV1cmlzdGljcy9NXFxuaGV3L1pHU0RSXFxuaGV3ZXIvTVxcbmhleC9HTURTXFxuaGV4YWRlY2ltYWwvU1xcbmhleGFnb24vTVNcXG5oZXhhZ29uYWxcXG5oZXhhZ3JhbS9TTVxcbmhleGFtZXRlci9TTVxcbmhleVxcbmhleWRheS9TTVxcbmhmXFxuaGd0XFxuaGd3eVxcbmhpL1NEXFxuaGlhdHVzL01TXFxuaGliYWNoaS9NU1xcbmhpYmVybmF0ZS9HTkRTXFxuaGliZXJuYXRpb24vTVxcbmhpYmVybmF0b3IvTVNcXG5oaWJpc2N1cy9NU1xcbmhpY2NvdWdoL0RHXFxuaGljY291Z2hzXFxuaGljY3VwL0dTTURcXG5oaWNrL01TXFxuaGlja2V5L1NNXFxuaGlja29yeS9TTVxcbmhpZFxcbmhpZGRlblxcbmhpZGUvTVpHSkRSU1xcbmhpZGVhd2F5L1NNXFxuaGlkZWJvdW5kXFxuaGlkZW91cy9ZUFxcbmhpZGVvdXNuZXNzL01cXG5oaWRlb3V0L01TXFxuaGlkZXIvTVxcbmhpZGluZy9NXFxuaGllL1NcXG5oaWVpbmdcXG5oaWVyYXJjaGljXFxuaGllcmFyY2hpY2FsL1lcXG5oaWVyYXJjaHkvU01cXG5oaWVyb2dseXBoL01cXG5oaWVyb2dseXBoaWMvTVNcXG5oaWVyb2dseXBoc1xcbmhpZ2gvTVJZWlRQXFxuaGlnaGJhbGwvU01cXG5oaWdoYm9yblxcbmhpZ2hib3kvTVNcXG5oaWdoYnJvdy9TTVxcbmhpZ2hjaGFpci9NU1xcbmhpZ2hmYWx1dGluXFxuaGlnaGhhbmRlZC9QWVxcbmhpZ2hoYW5kZWRuZXNzL01cXG5oaWdobGFuZC9NUlpTXFxuaGlnaGxhbmRlci9NXFxuaGlnaGxpZ2h0L1NNRFJaR1xcbmhpZ2hsaWdodGVyL01cXG5oaWdobmVzcy9NXFxuaGlnaHJvYWQvTVNcXG5oaWdoc1xcbmhpZ2h0YWlsL0RTR1xcbmhpZ2h3YXkvTVNcXG5oaWdod2F5bWFuL01cXG5oaWdod2F5bWVuXFxuaGlqYWIvU01cXG5oaWphY2svU0paR01EUlxcbmhpamFja2VyL01cXG5oaWphY2tpbmcvTVxcbmhpa2UvTVpHRFJTXFxuaGlrZXIvTVxcbmhpa2luZy9NXFxuaGlsYXJpb3VzL1BZXFxuaGlsYXJpb3VzbmVzcy9NXFxuaGlsYXJpdHkvTVxcbmhpbGwvTVNcXG5oaWxsYmlsbHkvU01cXG5oaWxsaW5lc3MvTVxcbmhpbGxvY2svTVNcXG5oaWxsc2lkZS9TTVxcbmhpbGx0b3AvTVNcXG5oaWxseS9QUlRcXG5oaWx0L01TXFxuaGltL1NcXG5oaW1zZWxmXFxuaGluZC9NUlpTXFxuaGluZGVyL0dEXFxuaGluZGVyZWQvVVxcbmhpbmRtb3N0XFxuaGluZHF1YXJ0ZXIvTVNcXG5oaW5kcmFuY2UvU01cXG5oaW5kc2lnaHQvTVxcbmhpbmdlJ3NcXG5oaW5nZS9VRFNHXFxuaGludC9NRFJaR1NcXG5oaW50ZXIvTVxcbmhpbnRlcmxhbmQvU01cXG5oaXAvU1BNXFxuaGlwYmF0aFxcbmhpcGJhdGhzXFxuaGlwYm9uZS9NU1xcbmhpcGh1Z2dlcnNcXG5oaXBuZXNzL01cXG5oaXBwZWRcXG5oaXBwZXJcXG5oaXBwZXN0XFxuaGlwcGllL1NNXFxuaGlwcGluZ1xcbmhpcHBvL1NNXFxuaGlwcG9jYW1wdXNcXG5oaXBwb2Ryb21lL1NNXFxuaGlwcG9wb3RhbXVzL01TXFxuaGlwcHlcXG5oaXBzdGVyL01TXFxuaGlyYWdhbmFcXG5oaXJlJ3NcXG5oaXJlL0FHRFNcXG5oaXJlbGluZy9NU1xcbmhpcnN1dGUvUFxcbmhpcnN1dGVuZXNzL01cXG5oaXNzL01EU0dcXG5oaXN0XFxuaGlzdGFtaW5lL01TXFxuaGlzdG9ncmFtL01TXFxuaGlzdG9sb2dpc3QvU01cXG5oaXN0b2xvZ3kvTVxcbmhpc3RvcGF0aG9sb2d5XFxuaGlzdG9yaWFuL01TXFxuaGlzdG9yaWNcXG5oaXN0b3JpY2FsL1lcXG5oaXN0b3JpY2l0eS9NXFxuaGlzdG9yaW9ncmFwaGVyL01TXFxuaGlzdG9yaW9ncmFwaHkvTVxcbmhpc3RvcnkvU01cXG5oaXN0cmlvbmljL1NcXG5oaXN0cmlvbmljYWxseVxcbmhpc3RyaW9uaWNzL01cXG5oaXQvU01cXG5oaXRjaCdzXFxuaGl0Y2gvVURTR1xcbmhpdGNoZXIvTVNcXG5oaXRjaGhpa2UvRFJTTVpHXFxuaGl0Y2hoaWtlci9NXFxuaGl0aGVyXFxuaGl0aGVydG9cXG5oaXR0ZXIvU01cXG5oaXR0aW5nXFxuaGl2ZS9NR0RTXFxuaGl2ZW1pbmQvU01cXG5oaXlhXFxuaG1tXFxuaG8vU01EUllaXFxuaG9hZ2llL01TXFxuaG9hcmQvU1pHTURSSlxcbmhvYXJkZXIvTVxcbmhvYXJkaW5nL01cXG5ob2FyZnJvc3QvTVxcbmhvYXJpbmVzcy9NXFxuaG9hcnNlL1lUUlBcXG5ob2Fyc2VuZXNzL01cXG5ob2FyeS9UUlBcXG5ob2F4L01EUlNaR1xcbmhvYXhlci9NXFxuaG9iL1NNXFxuaG9iYml0L1NcXG5ob2JibGUvTVpHRFJTXFxuaG9iYmxlci9NXFxuaG9iYnkvU01cXG5ob2JieWhvcnNlL01TXFxuaG9iYnlpc3QvU01cXG5ob2Jnb2JsaW4vTVNcXG5ob2JuYWlsL1NHTURcXG5ob2Jub2IvU1xcbmhvYm5vYmJlZFxcbmhvYm5vYmJpbmdcXG5ob2JvL01TXFxuaG9jXFxuaG9jay9NRFNHXFxuaG9ja2V5L01cXG5ob2Nrc2hvcC9NU1xcbmhvZC9TTVxcbmhvZGdlcG9kZ2UvU01cXG5ob2UvU01cXG5ob2VjYWtlL1NNXFxuaG9lZG93bi9TTVxcbmhvZWluZ1xcbmhvZXIvTVxcbmhvZy9TTVxcbmhvZ2FuL1NNXFxuaG9nYmFjay9TTVxcbmhvZ2dlZFxcbmhvZ2dpbmdcXG5ob2dnaXNoL1lcXG5ob2dzaGVhZC9TTVxcbmhvZ3RpZS9EU1xcbmhvZ3R5aW5nXFxuaG9nd2FzaC9NXFxuaG9pY2svU0dEXFxuaG9pc3QvU0dNRFxcbmhva2UvR0RTXFxuaG9rZXlcXG5ob2tpZXJcXG5ob2tpZXN0XFxuaG9rdW0vTVxcbmhvbGQvTVJKU1pHXFxuaG9sZGFsbC9TXFxuaG9sZGVyL01cXG5ob2xkaW5nL01cXG5ob2xkb3V0L1NNXFxuaG9sZG92ZXIvU01cXG5ob2xkdXAvTVNcXG5ob2xlL01HRFNcXG5ob2xleVxcbmhvbGlkYXkvU01ER1xcbmhvbGlkYXltYWtlci9TXFxuaG9saW5lc3MvVU1cXG5ob2xpc21cXG5ob2xpc3RpY1xcbmhvbGlzdGljYWxseVxcbmhvbGxlci9NREdTXFxuaG9sbG93L01EUllQU1RHXFxuaG9sbG93bmVzcy9NXFxuaG9sbHkvU01cXG5ob2xseWhvY2svTVNcXG5ob2xtaXVtL01cXG5ob2xvY2F1c3QvU01cXG5ob2xvZ3JhbS9NU1xcbmhvbG9ncmFwaC9NXFxuaG9sb2dyYXBoaWNcXG5ob2xvZ3JhcGhzXFxuaG9sb2dyYXBoeS9NXFxuaG9sc1xcbmhvbHN0ZXIvU01ER1xcbmhvbHkvVVJQVFxcbmhvbWFnZS9NU1xcbmhvbWJyZS9NU1xcbmhvbWJ1cmcvU01cXG5ob21lL01ZWkdEUlNcXG5ob21lYm9keS9TTVxcbmhvbWVib3kvU01cXG5ob21lY29taW5nL1NNXFxuaG9tZWdyb3duXFxuaG9tZWxhbmQvTVNcXG5ob21lbGVzcy9NUFxcbmhvbWVsZXNzbmVzcy9NXFxuaG9tZWxpa2VcXG5ob21lbGluZXNzL01cXG5ob21lbHkvUFJUXFxuaG9tZW1hZGVcXG5ob21lbWFrZXIvU01cXG5ob21lbWFraW5nL01cXG5ob21lb3BhdGgvTVxcbmhvbWVvcGF0aGljXFxuaG9tZW9wYXRoc1xcbmhvbWVvcGF0aHkvTVxcbmhvbWVvc3Rhc2lzL01cXG5ob21lb3N0YXRpY1xcbmhvbWVvd25lci9NU1xcbmhvbWVwYWdlL01TXFxuaG9tZXIvR01EXFxuaG9tZXJvb20vTVNcXG5ob21lc2Nob29saW5nL01cXG5ob21lc2ljay9QXFxuaG9tZXNpY2tuZXNzL01cXG5ob21lc3B1bi9NXFxuaG9tZXN0ZWFkL1NNRFJaR1xcbmhvbWVzdGVhZGVyL01cXG5ob21lc3RyZXRjaC9NU1xcbmhvbWV0b3duL01TXFxuaG9tZXdhcmQvU1xcbmhvbWV3b3JrL01SWkdcXG5ob21ld3JlY2tlci9TTVxcbmhvbWV5L1NNUFxcbmhvbWV5bmVzcy9NXFxuaG9taWNpZGFsXFxuaG9taWNpZGUvTVNcXG5ob21pZXJcXG5ob21pZXN0XFxuaG9taWxldGljXFxuaG9taWx5L1NNXFxuaG9taW5pZC9TTVxcbmhvbWlub2lkL1NcXG5ob21pbnkvTVxcbmhvbW8vTVNcXG5ob21vZXJvdGljXFxuaG9tb2dlbmVpdHkvTVxcbmhvbW9nZW5lb3VzL1lcXG5ob21vZ2VuaXphdGlvbi9NXFxuaG9tb2dlbml6ZS9EU0dcXG5ob21vZ3JhcGgvTVxcbmhvbW9ncmFwaHNcXG5ob21vbG9nb3VzXFxuaG9tb2xvZ3lcXG5ob21vbnltL1NNXFxuaG9tb3Bob2JpYS9NXFxuaG9tb3Bob2JpY1xcbmhvbW9waG9uZS9NU1xcbmhvbW9zZXh1YWwvU01cXG5ob21vc2V4dWFsaXR5L01cXG5ob24vU1pUR01EUlxcbmhvbmNoby9NU1xcbmhvbmUvTVNcXG5ob25lci9NXFxuaG9uZXN0L0VZVFxcbmhvbmVzdGVyXFxuaG9uZXN0eS9FTVxcbmhvbmV5L1NHTURcXG5ob25leWJlZS9TTVxcbmhvbmV5Y29tYi9NRFNHXFxuaG9uZXlkZXcvU01cXG5ob25leWxvY3VzdC9NXFxuaG9uZXltb29uL1pHTURSU1xcbmhvbmV5bW9vbmVyL01cXG5ob25leXBvdC9TXFxuaG9uZXlzdWNrbGUvU01cXG5ob25rL01EUlNaR1xcbmhvbmtlci9NXFxuaG9ua3kvU01cXG5ob25vci9FU0dNREJcXG5ob25vcmFibGVuZXNzL01cXG5ob25vcmFibHkvRVxcbmhvbm9yYXJpbHlcXG5ob25vcmFyaXVtL01TXFxuaG9ub3JhcnlcXG5ob25vcmVlL1NNXFxuaG9ub3Jlci9TTVxcbmhvbm9yaWZpYy9NU1xcbmhvb2NoL01cXG5ob29kL01EU0dcXG5ob29kaWUvTVNcXG5ob29kbHVtL1NNXFxuaG9vZG9vL01EU0dcXG5ob29kd2luay9ER1NcXG5ob29leS9NXFxuaG9vZi9NRFJTWkdcXG5ob29rJ3NcXG5ob29rL1VEU0dcXG5ob29rYWgvTVxcbmhvb2thaHNcXG5ob29rZXIvTVNcXG5ob29rdXAvTVNcXG5ob29rd29ybS9NU1xcbmhvb2t5L01cXG5ob29saWdhbi9NU1xcbmhvb2xpZ2FuaXNtL01cXG5ob29wL01EU0dcXG5ob29wbGEvTVxcbmhvb3JheVxcbmhvb3NlZ293L1NNXFxuaG9vdC9NRFJTWkdcXG5ob290ZW5hbm55L1NNXFxuaG9vdGVyL01cXG5ob292ZXIvRFNHXFxuaG9vdmVzXFxuaG9wL1NHTURcXG5ob3BlL01TXFxuaG9wZWZ1bC9QU01ZXFxuaG9wZWZ1bG5lc3MvTVxcbmhvcGVsZXNzL1lQXFxuaG9wZWxlc3NuZXNzL01cXG5ob3BwZWRcXG5ob3BwZXIvTVNcXG5ob3BwaW5nXFxuaG9wc2NvdGNoL01EU0dcXG5ob3JhL01TXFxuaG9yZGUvRFNNR1xcbmhvcmVob3VuZC9TTVxcbmhvcml6b24vU01cXG5ob3Jpem9udGFsL1NNWVxcbmhvcm1vbmFsXFxuaG9ybW9uZS9TTVxcbmhvcm4vTURTXFxuaG9ybmJlYW1cXG5ob3JuYmxlbmRlL01cXG5ob3JuZXQvTVNcXG5ob3JubGVzc1xcbmhvcm5saWtlXFxuaG9ybnBpcGUvTVNcXG5ob3JueS9UUlxcbmhvcm9sb2dpY1xcbmhvcm9sb2dpY2FsXFxuaG9yb2xvZ2lzdC9NU1xcbmhvcm9sb2d5L01cXG5ob3Jvc2NvcGUvU01cXG5ob3JyZW5kb3VzL1lcXG5ob3JyaWJsZS9QXFxuaG9ycmlibGVuZXNzL01cXG5ob3JyaWJseVxcbmhvcnJpZC9ZXFxuaG9ycmlmaWNcXG5ob3JyaWZpY2FsbHlcXG5ob3JyaWZ5L0RTR1xcbmhvcnJpZnlpbmcvWVxcbmhvcnJvci9NU1xcbmhvcnNlJ3NcXG5ob3JzZS9VRFNHXFxuaG9yc2ViYWNrL01cXG5ob3JzZWJveC9TXFxuaG9yc2VmbGVzaC9NXFxuaG9yc2VmbHkvU01cXG5ob3JzZWhhaXIvTVxcbmhvcnNlaGlkZS9NXFxuaG9yc2VsYXVnaC9NXFxuaG9yc2VsYXVnaHNcXG5ob3JzZWxlc3NcXG5ob3JzZW1hbi9NXFxuaG9yc2VtYW5zaGlwL01cXG5ob3JzZW1lblxcbmhvcnNlcGxheS9NXFxuaG9yc2Vwb3dlci9NXFxuaG9yc2VyYWRpc2gvTVNcXG5ob3JzZXNoaXQvIVxcbmhvcnNlc2hvZS9EU01cXG5ob3JzZXNob2VpbmdcXG5ob3JzZXRhaWwvU01cXG5ob3JzZXRyYWRpbmdcXG5ob3JzZXdoaXAvU01cXG5ob3JzZXdoaXBwZWRcXG5ob3JzZXdoaXBwaW5nXFxuaG9yc2V3b21hbi9NXFxuaG9yc2V3b21lblxcbmhvcnNleVxcbmhvcnNpZXJcXG5ob3JzaWVzdFxcbmhvcnRhdG9yeVxcbmhvcnRpY3VsdHVyYWxcXG5ob3J0aWN1bHR1cmFsaXN0L1NcXG5ob3J0aWN1bHR1cmUvTVxcbmhvcnRpY3VsdHVyaXN0L01TXFxuaG9zYW5uYS9TTVxcbmhvc2UvTUdEU1xcbmhvc2VwaXBlL1NcXG5ob3NpZXIvTVNcXG5ob3NpZXJ5L01cXG5ob3NwXFxuaG9zcGhvbGlwYXNlXFxuaG9zcGljZS9NU1xcbmhvc3BpdGFibGUvSVxcbmhvc3BpdGFibHkvSVxcbmhvc3BpdGFsL1NNXFxuaG9zcGl0YWxpdHkvTVxcbmhvc3BpdGFsaXphdGlvbi9TTVxcbmhvc3BpdGFsaXplL0RTR1xcbmhvc3QvTURTR1xcbmhvc3RhZ2UvTVNcXG5ob3N0ZWwvWkdNRFJTXFxuaG9zdGVsZXIvTVxcbmhvc3RlbHJ5L1NNXFxuaG9zdGVzcy9NRFNHXFxuaG9zdGlsZS9NWVNcXG5ob3N0aWxpdGllcy9NXFxuaG9zdGlsaXR5L1NNXFxuaG9zdGxlci9NU1xcbmhvdC9TWVBcXG5ob3RiZWQvTVNcXG5ob3RibG9vZGVkXFxuaG90Ym94L01TXFxuaG90Y2FrZS9TTVxcbmhvdGVsL1NNXFxuaG90ZWxpZXIvTVNcXG5ob3Rmb290L01ER1NcXG5ob3RoZWFkL0RTTVxcbmhvdGhlYWRlZC9ZUFxcbmhvdGhlYWRlZG5lc3MvTVxcbmhvdGhvdXNlL1NNXFxuaG90a2V5L1NcXG5ob3RsaW5rL1NcXG5ob3RuZXNzL01cXG5ob3RwbGF0ZS9TTVxcbmhvdHBvdC9TXFxuaG90cy9NXFxuaG90c2hvdC9NU1xcbmhvdHRlZFxcbmhvdHRlclxcbmhvdHRlc3RcXG5ob3R0aWUvU1xcbmhvdHRpbmdcXG5ob3VuZC9TR01EXFxuaG91ci9NWVNcXG5ob3VyZ2xhc3MvTVNcXG5ob3VyaS9TTVxcbmhvdXNlJ3NcXG5ob3VzZS9BRFNHXFxuaG91c2Vib2F0L1NNXFxuaG91c2Vib3VuZFxcbmhvdXNlYm95L1NNXFxuaG91c2VicmVhay9SU1pHXFxuaG91c2VicmVha2VyL01cXG5ob3VzZWJyZWFraW5nL01cXG5ob3VzZWJyb2tlXFxuaG91c2Vicm9rZW5cXG5ob3VzZWNsZWFuL0RTR1xcbmhvdXNlY2xlYW5pbmcvTVxcbmhvdXNlY29hdC9TTVxcbmhvdXNlZmx5L1NNXFxuaG91c2VmdWwvU01cXG5ob3VzZWhvbGQvU01SWlxcbmhvdXNlaG9sZGVyL01cXG5ob3VzZWh1c2JhbmQvU01cXG5ob3VzZWtlZXBlci9NU1xcbmhvdXNla2VlcGluZy9NXFxuaG91c2VsaWdodHMvTVxcbmhvdXNlbWFpZC9TTVxcbmhvdXNlbWFuL01cXG5ob3VzZW1hc3Rlci9TXFxuaG91c2VtYXRlL1NcXG5ob3VzZW1lblxcbmhvdXNlbWlzdHJlc3MvU1xcbmhvdXNlbW90aGVyL1NNXFxuaG91c2VwYXJlbnQvU01cXG5ob3VzZXBsYW50L01TXFxuaG91c2Vwcm91ZFxcbmhvdXNlcm9vbVxcbmhvdXNldG9wL1NNXFxuaG91c2V3YXJlcy9NXFxuaG91c2V3YXJtaW5nL1NNXFxuaG91c2V3aWZlL01ZXFxuaG91c2V3aXZlc1xcbmhvdXNld29yay9NXFxuaG91c2luZy9NU1xcbmhvdmVcXG5ob3ZlbC9TTVxcbmhvdmVyL1NHRFxcbmhvdmVyYm9hcmQvTVNcXG5ob3ZlcmNyYWZ0L01TXFxuaG93J2RcXG5ob3cncmVcXG5ob3cvU01cXG5ob3diZWl0XFxuaG93ZGFoL01cXG5ob3dkYWhzXFxuaG93ZHlcXG5ob3dldmVyXFxuaG93aXR6ZXIvU01cXG5ob3dsL01EUlNaR1xcbmhvd2xlci9NXFxuaG93c29ldmVyXFxuaG95ZGVuL01TXFxuaG95ZGVuaXNoXFxuaHBcXG5oci9TXFxuaHRcXG5odWFyYWNoZS9TTVxcbmh1Yi9TTVxcbmh1YmJ1Yi9TTVxcbmh1YmJ5L1NNXFxuaHViY2FwL1NNXFxuaHVicmlzL01cXG5odWNrbGViZXJyeS9TTVxcbmh1Y2tzdGVyL1NHTURcXG5odWNrc3RlcmlzbS9NXFxuaHVkZGxlL0RTTUdcXG5odWUvRFNNXFxuaHVmZi9NRFNHXFxuaHVmZmlseVxcbmh1ZmZpbmVzcy9NXFxuaHVmZnkvUFJUXFxuaHVnL1NUTVJcXG5odWdlL1lQXFxuaHVnZW5lc3MvTVxcbmh1Z2dlZFxcbmh1Z2dpbmdcXG5odWhcXG5odWxhL01TXFxuaHVsay9NU0dcXG5odWxsL01EUlNaR1xcbmh1bGxhYmFsb28vU01cXG5odWxsZXIvTVxcbmh1bS9TTVxcbmh1bWFuL1NNUllUUFxcbmh1bWFuZS9QWVxcbmh1bWFuZW5lc3MvTVxcbmh1bWFuaXNtL01cXG5odW1hbmlzdC9TTVxcbmh1bWFuaXN0aWNcXG5odW1hbml0YXJpYW4vTVNcXG5odW1hbml0YXJpYW5pc20vTVxcbmh1bWFuaXRpZXMvTVxcbmh1bWFuaXR5L0lTTVxcbmh1bWFuaXphdGlvbi9DTVxcbmh1bWFuaXplL0NEU0dcXG5odW1hbml6ZXIvU01cXG5odW1hbmtpbmQvTVxcbmh1bWFubmVzcy9NXFxuaHVtYW5vaWQvU01cXG5odW1ibGUvRFJTWlRHSlBcXG5odW1ibGVuZXNzL01cXG5odW1ibGVyL01cXG5odW1ibHlcXG5odW1idWcvU01cXG5odW1idWdnZWRcXG5odW1idWdnaW5nXFxuaHVtZGluZ2VyL01TXFxuaHVtZHJ1bS9NXFxuaHVtZXJhbFxcbmh1bWVyaVxcbmh1bWVydXMvTVxcbmh1bWlkL1lcXG5odW1pZGlmaWNhdGlvbi9NXFxuaHVtaWRpZmllci9DTVxcbmh1bWlkaWZ5L0NaR0RSU1xcbmh1bWlkaXR5L01cXG5odW1pZG9yL1NNXFxuaHVtaWxpYXRlL0RTR05YXFxuaHVtaWxpYXRpbmcvWVxcbmh1bWlsaWF0aW9uL01cXG5odW1pbGl0eS9NXFxuaHVtbWVkXFxuaHVtbWVyL1NNXFxuaHVtbWluZ1xcbmh1bW1pbmdiaXJkL1NNXFxuaHVtbW9jay9TTVxcbmh1bW1vY2t5XFxuaHVtbXVzL01cXG5odW1vbmdvdXNcXG5odW1vci9TTURHXFxuaHVtb3Jlc3F1ZVxcbmh1bW9yaXN0L01TXFxuaHVtb3JsZXNzL1lQXFxuaHVtb3JsZXNzbmVzcy9NXFxuaHVtb3JvdXMvUFlcXG5odW1vcm91c25lc3MvTVxcbmh1bXAvTURTR1xcbmh1bXBiYWNrL01EU1xcbmh1bXBoL0RHXFxuaHVtcGhzXFxuaHVtdXMvTVxcbmh1bmNoL01EU0dcXG5odW5jaGJhY2svU01EXFxuaHVuZHJlZC9TTUhcXG5odW5kcmVkZm9sZFxcbmh1bmRyZWR0aC9NXFxuaHVuZHJlZHRoc1xcbmh1bmRyZWR3ZWlnaHQvU01cXG5odW5nXFxuaHVuZ2VyL1NNREdcXG5odW5nb3Zlclxcbmh1bmdyaWx5XFxuaHVuZ3JpbmVzcy9NXFxuaHVuZ3J5L1BSVFxcbmh1bmsvTVJTWlxcbmh1bmtlci9ER1xcbmh1bmt5L1JUXFxuaHVudC9NRFJTWkdcXG5odW50ZXIvTVxcbmh1bnRpbmcvTVxcbmh1bnRyZXNzL01TXFxuaHVudHNtYW4vTVxcbmh1bnRzbWVuXFxuaHVyZGxlL0RSU01aR1xcbmh1cmRsZXIvTVxcbmh1cmRsaW5nL01cXG5odXJsL01EUlNaR1xcbmh1cmxlci9NXFxuaHVybGluZy9NXFxuaHVycmFoL0dNRFxcbmh1cnJhaHNcXG5odXJyaWNhbmUvTVNcXG5odXJyaWVkL1VZXFxuaHVycnkvRFNNR1xcbmh1cnQvTVNHXFxuaHVydGZ1bC9ZUFxcbmh1cnRmdWxuZXNzL01cXG5odXJ0bGUvRFNHXFxuaHVzYmFuZC9HTURTXFxuaHVzYmFuZG1hbi9NXFxuaHVzYmFuZG1lblxcbmh1c2JhbmRyeS9NXFxuaHVzaC9NRFNHXFxuaHVzay9NRFJTWkdcXG5odXNrZXIvTVxcbmh1c2tpbHlcXG5odXNraW5lc3MvTVxcbmh1c2t5L1BSU01UXFxuaHVzc2FyL1NNXFxuaHVzc3kvU01cXG5odXN0aW5ncy9NXFxuaHVzdGxlL0RSU01aR1xcbmh1c3RsZXIvTVxcbmh1dC9TTVxcbmh1dGNoL01TXFxuaHV6emFoL01ER1xcbmh1enphaHNcXG5od3lcXG5oeWFjaW50aC9NXFxuaHlhY2ludGhzXFxuaHlicmlkL1NNXFxuaHlicmlkaXNtL01cXG5oeWJyaWRpemF0aW9uL01cXG5oeWJyaWRpemUvRFNHXFxuaHlkcmEvU01cXG5oeWRyYW5nZWEvU01cXG5oeWRyYW50L01TXFxuaHlkcmF0ZSdzXFxuaHlkcmF0ZS9DR05EU1xcbmh5ZHJhdGlvbi9DTVxcbmh5ZHJhdWxpYy9TXFxuaHlkcmF1bGljYWxseVxcbmh5ZHJhdWxpY3MvTVxcbmh5ZHJvL01cXG5oeWRyb2NhcmJvbi9NU1xcbmh5ZHJvY2VwaGFsdXMvTVxcbmh5ZHJvY2hsb3JpZGVcXG5oeWRyb2NvcnRpc29uZVxcbmh5ZHJvZHluYW1pYy9TXFxuaHlkcm9keW5hbWljcy9NXFxuaHlkcm9lbGVjdHJpY1xcbmh5ZHJvZWxlY3RyaWNhbGx5XFxuaHlkcm9lbGVjdHJpY2l0eS9NXFxuaHlkcm9mb2lsL01TXFxuaHlkcm9nZW4vTVxcbmh5ZHJvZ2VuYXRlL0NHRFNcXG5oeWRyb2dlbmF0aW9uL01cXG5oeWRyb2dlbm91c1xcbmh5ZHJvbG9naXN0L01TXFxuaHlkcm9sb2d5L01cXG5oeWRyb2x5c2VzXFxuaHlkcm9seXNpcy9NXFxuaHlkcm9seXplL0RTR1xcbmh5ZHJvbWV0ZXIvU01cXG5oeWRyb21ldHJ5L01cXG5oeWRyb3BoaWxpY1xcbmh5ZHJvcGhvYmlhL01cXG5oeWRyb3Bob2JpY1xcbmh5ZHJvcGhvbmUvU01cXG5oeWRyb3BsYW5lL0dEU01cXG5oeWRyb3BvbmljL1NcXG5oeWRyb3BvbmljYWxseVxcbmh5ZHJvcG9uaWNzL01cXG5oeWRyb3NwaGVyZS9NXFxuaHlkcm90aGVyYXB5L01cXG5oeWRyb3RoZXJtYWxcXG5oeWRyb3VzXFxuaHlkcm94aWRlL1NNXFxuaHllbmEvU01cXG5oeWdpZW5lL01cXG5oeWdpZW5pYy9VXFxuaHlnaWVuaWNhbGx5XFxuaHlnaWVuaXN0L01TXFxuaHlncm9tZXRlci9TTVxcbmh5aW5nXFxuaHltZW4vU01cXG5oeW1lbmVhbFxcbmh5bW4vTURTR1xcbmh5bW5hbC9NU1xcbmh5bW5ib29rL1NNXFxuaHlwZS9NR0RSU1xcbmh5cGVyYWN0aXZlXFxuaHlwZXJhY3Rpdml0eS9NXFxuaHlwZXJib2xhL1NNXFxuaHlwZXJib2xlL01cXG5oeXBlcmJvbGljXFxuaHlwZXJjcml0aWNhbC9ZXFxuaHlwZXJjdWJlXFxuaHlwZXJnbHljZW1pYS9NXFxuaHlwZXJpbmZsYXRpb25cXG5oeXBlcmxpbmsvR1NNRFxcbmh5cGVybWFya2V0L1NcXG5oeXBlcm1lZGlhL01cXG5oeXBlcnBhcmF0aHlyb2lkaXNtXFxuaHlwZXJwbGFuZVxcbmh5cGVyc2Vuc2l0aXZlL1BcXG5oeXBlcnNlbnNpdGl2ZW5lc3MvTVxcbmh5cGVyc2Vuc2l0aXZpdHkvU01cXG5oeXBlcnNwYWNlL1NcXG5oeXBlcnRlbnNpb24vTVxcbmh5cGVydGVuc2l2ZS9TTVxcbmh5cGVydGV4dC9NXFxuaHlwZXJ0aHlyb2lkL01cXG5oeXBlcnRoeXJvaWRpc20vTVxcbmh5cGVydHJvcGh5L0RTTUdcXG5oeXBlcnZlbnRpbGF0ZS9HTkRTXFxuaHlwZXJ2ZW50aWxhdGlvbi9NXFxuaHlwZXJ2aXNvci9NU1xcbmh5cGhlbi9NRFNHXFxuaHlwaGVuYXRlL1hEU01HTlxcbmh5cGhlbmF0aW9uL01cXG5oeXBub3Nlc1xcbmh5cG5vc2lzL01cXG5oeXBub3RoZXJhcGlzdC9TXFxuaHlwbm90aGVyYXB5L01cXG5oeXBub3RpYy9TTVxcbmh5cG5vdGljYWxseVxcbmh5cG5vdGlzbS9NXFxuaHlwbm90aXN0L01TXFxuaHlwbm90aXplL0dEU1xcbmh5cG8vTVNcXG5oeXBvYWxsZXJnZW5pY1xcbmh5cG9jaG9uZHJpYS9NXFxuaHlwb2Nob25kcmlhYy9TTVxcbmh5cG9jcmlzeS9TTVxcbmh5cG9jcml0ZS9NU1xcbmh5cG9jcml0aWNhbC9ZXFxuaHlwb2Rlcm1pYy9NU1xcbmh5cG9nbHljZW1pYS9NXFxuaHlwb2dseWNlbWljL1NNXFxuaHlwb3RlbnVzZS9NU1xcbmh5cG90aGFsYW1pXFxuaHlwb3RoYWxhbXVzL01cXG5oeXBvdGhlcm1pYS9NXFxuaHlwb3RoZXNlc1xcbmh5cG90aGVzaXMvTVxcbmh5cG90aGVzaXplL0RTR1xcbmh5cG90aGV0aWNhbC9ZXFxuaHlwb3RoeXJvaWQvTVxcbmh5cG90aHlyb2lkaXNtL01cXG5oeXNzb3AvTVxcbmh5c3RlcmVjdG9teS9TTVxcbmh5c3RlcmVzaXNcXG5oeXN0ZXJpYS9NXFxuaHlzdGVyaWMvU01cXG5oeXN0ZXJpY2FsL1lcXG5oeXN0ZXJpY3MvTVxcbmkvVVNcXG5pT1MvTVxcbmlQYWQvTVxcbmlQaG9uZS9NXFxuaVBvZC9NXFxuaVR1bmVzL01cXG5pYW1iL01TXFxuaWFtYmlcXG5pYW1iaWMvU01cXG5pYW1idXMvTVNcXG5pYmV4L01TXFxuaWJpZFxcbmliaWRlbVxcbmliaXMvTVNcXG5pYnVwcm9mZW4vTVxcbmljZSdzXFxuaWNlL0NEU0dcXG5pY2ViZXJnL1NNXFxuaWNlYm9hdC9TTVxcbmljZWJvdW5kXFxuaWNlYm94L01TXFxuaWNlYnJlYWtlci9TTVxcbmljZWNhcC9TTVxcbmljZW1hbi9NXFxuaWNlbWVuXFxuaWNodGh5b2xvZ2lzdC9NU1xcbmljaHRoeW9sb2d5L01cXG5pY2ljbGUvU01cXG5pY2lseVxcbmljaW5lc3MvTVxcbmljaW5nL1NNXFxuaWNreS9SVFxcbmljb24vTVNcXG5pY29uaWNcXG5pY29ub2NsYXNtL01cXG5pY29ub2NsYXN0L1NNXFxuaWNvbm9jbGFzdGljXFxuaWNvbm9ncmFwaHkvTVxcbmljdHVzL01cXG5pY3kvVFBSXFxuaWQvU01ZXFxuaWRlYS9NU1xcbmlkZWFsL1NNWVxcbmlkZWFsaXNtL01cXG5pZGVhbGlzdC9TTVxcbmlkZWFsaXN0aWNcXG5pZGVhbGlzdGljYWxseVxcbmlkZWFsaXphdGlvbi9NU1xcbmlkZWFsaXplL0RTR1xcbmlkZW1cXG5pZGVtcG90ZW50XFxuaWRlbnRpY2FsL1lcXG5pZGVudGlmaWFibGUvVVxcbmlkZW50aWZpY2F0aW9uL01cXG5pZGVudGlmaWVkL1VcXG5pZGVudGlmeS9aR05EUlNYXFxuaWRlbnRpa2l0L1NcXG5pZGVudGl0eS9TTVxcbmlkZW9ncmFtL1NNXFxuaWRlb2dyYXBoL01cXG5pZGVvZ3JhcGhzXFxuaWRlb2xvZ2ljYWwvWVxcbmlkZW9sb2dpc3QvU01cXG5pZGVvbG9ndWUvTVNcXG5pZGVvbG9neS9TTVxcbmlkZXMvTVxcbmlkaW9jeS9TTVxcbmlkaW9tL1NNXFxuaWRpb21hdGljL1VcXG5pZGlvbWF0aWNhbGx5XFxuaWRpb3BhdGhpY1xcbmlkaW9zeW5jcmFzeS9TTVxcbmlkaW9zeW5jcmF0aWNcXG5pZGlvc3luY3JhdGljYWxseVxcbmlkaW90L1NNXFxuaWRpb3RpY1xcbmlkaW90aWNhbGx5XFxuaWRsZS9NWlRHRFJTUFxcbmlkbGVuZXNzL01cXG5pZGxlci9NXFxuaWRvbC9NU1xcbmlkb2xhdGVyL1NNXFxuaWRvbGF0cmVzcy9NU1xcbmlkb2xhdHJvdXNcXG5pZG9sYXRyeS9NXFxuaWRvbGl6YXRpb24vTVxcbmlkb2xpemUvR0RTXFxuaWR5bGwvU01cXG5pZHlsbGljXFxuaWR5bGxpY2FsbHlcXG5pZi9TTVxcbmlmZmluZXNzL01cXG5pZmZ5L1JUUFxcbmlnbG9vL1NNXFxuaWduZW91c1xcbmlnbml0YWJsZVxcbmlnbml0ZS9BR0RTXFxuaWduaXRpb24vTVNcXG5pZ25vYmxlXFxuaWdub2JseVxcbmlnbm9taW5pb3VzL1lcXG5pZ25vbWlueS9TTVxcbmlnbm9yYW11cy9NU1xcbmlnbm9yYW5jZS9NXFxuaWdub3JhbnQvWVxcbmlnbm9yZS9HRFNcXG5pZ3VhbmEvTVNcXG5paVxcbmlpaVxcbmlsZWFcXG5pbGVpdGlzL01cXG5pbGV1bS9NXFxuaWxpYVxcbmlsaXVtL01cXG5pbGsvU01cXG5pbGwvU01QXFxuaWxsZWdhbC9NWVNcXG5pbGxlZ2FsaXR5L1NNXFxuaWxsZWdpYmlsaXR5L01cXG5pbGxlZ2libGVcXG5pbGxlZ2libHlcXG5pbGxlZ2l0aW1hY3kvTVxcbmlsbGVnaXRpbWF0ZS9ZXFxuaWxsaWJlcmFsL1lcXG5pbGxpYmVyYWxpdHkvTVxcbmlsbGljaXQvWVBcXG5pbGxpY2l0bmVzcy9NXFxuaWxsaW1pdGFibGVcXG5pbGxpdGVyYWN5L01cXG5pbGxpdGVyYXRlL01ZU1xcbmlsbG5lc3MvTVNcXG5pbGxvZ2ljYWwvWVxcbmlsbG9naWNhbGl0eS9NXFxuaWxsdW1pbmF0ZS9HTlhEU1xcbmlsbHVtaW5hdGluZy9ZXFxuaWxsdW1pbmF0aW9uL01cXG5pbGx1bWluZS9EU0JHXFxuaWxsdXMvVlxcbmlsbHVzaW9uL0VNU1xcbmlsbHVzaW9uaXN0L1NNXFxuaWxsdXNvcnlcXG5pbGx1c3RyYXRlL0dOVlhEU1xcbmlsbHVzdHJhdGlvbi9NXFxuaWxsdXN0cmF0aXZlL1lcXG5pbGx1c3RyYXRvci9TTVxcbmlsbHVzdHJpb3VzL1BZXFxuaWxsdXN0cmlvdXNuZXNzL01cXG5pbWFnZS9EU01HXFxuaW1hZ2VyeS9NXFxuaW1hZ2luYWJsZS9VXFxuaW1hZ2luYWJseS9VXFxuaW1hZ2luYWxcXG5pbWFnaW5hcnlcXG5pbWFnaW5hdGlvbi9NU1xcbmltYWdpbmF0aXZlL1VZXFxuaW1hZ2luZS9EU0JKR1xcbmltYWdvL01cXG5pbWFnb2VzXFxuaW1hbS9NU1xcbmltYmFsYW5jZS9EU01cXG5pbWJlY2lsZS9NU1xcbmltYmVjaWxpY1xcbmltYmVjaWxpdHkvU01cXG5pbWJpYmUvWkdEUlNcXG5pbWJpYmVyL01cXG5pbWJyaWNhdGlvbi9NXFxuaW1icm9nbGlvL1NNXFxuaW1idWUvRFNHXFxuaW1pdGFibGUvSVxcbmltaXRhdGUvRFNHTlZYXFxuaW1pdGF0aW9uL01cXG5pbWl0YXRpdmUvUFlcXG5pbWl0YXRpdmVuZXNzL01cXG5pbWl0YXRvci9TTVxcbmltbWFjdWxhdGUvUFlcXG5pbW1hY3VsYXRlbmVzcy9NXFxuaW1tYW5lbmNlL01cXG5pbW1hbmVuY3kvTVxcbmltbWFuZW50L1lcXG5pbW1hdGVyaWFsL1lQXFxuaW1tYXRlcmlhbGl0eS9NXFxuaW1tYXRlcmlhbG5lc3MvTVxcbmltbWF0dXJlL1lcXG5pbW1hdHVyaXR5L01cXG5pbW1lYXN1cmFibGVcXG5pbW1lYXN1cmFibHlcXG5pbW1lZGlhY2llcy9NXFxuaW1tZWRpYWN5L1NNXFxuaW1tZWRpYXRlL1BZXFxuaW1tZWRpYXRlbmVzcy9NXFxuaW1tZW1vcmlhbC9ZXFxuaW1tZW5zZS9ZXFxuaW1tZW5zaXR5L1NNXFxuaW1tZXJzZS9YRFNHTlZcXG5pbW1lcnNpYmxlXFxuaW1tZXJzaW9uL01cXG5pbW1pZ3JhbnQvU01cXG5pbW1pZ3JhdGUvRFNHTlxcbmltbWlncmF0aW9uL01cXG5pbW1pbmVuY2UvTVxcbmltbWluZW50L1lcXG5pbW1vYmlsZVxcbmltbW9iaWxpdHkvTVxcbmltbW9iaWxpemF0aW9uL01cXG5pbW1vYmlsaXplL1pHRFJTXFxuaW1tb2RlcmF0ZS9ZXFxuaW1tb2Rlc3QvWVxcbmltbW9kZXN0eS9NXFxuaW1tb2xhdGUvRFNHTlxcbmltbW9sYXRpb24vTVxcbmltbW9yYWwvWVxcbmltbW9yYWxpdHkvU01cXG5pbW1vcnRhbC9NWVNcXG5pbW1vcnRhbGl0eS9NXFxuaW1tb3J0YWxpemUvRFNHXFxuaW1tb3ZhYmlsaXR5L01cXG5pbW1vdmFibGVcXG5pbW1vdmFibHlcXG5pbW11bmVcXG5pbW11bml0eS9NXFxuaW1tdW5pemF0aW9uL1NNXFxuaW1tdW5pemUvR0RTXFxuaW1tdW5vZGVmaWNpZW5jeS9NXFxuaW1tdW5vZGVmaWNpZW50XFxuaW1tdW5vZ2xvYnVsaW4vU1xcbmltbXVub2xvZ2ljXFxuaW1tdW5vbG9naWNhbFxcbmltbXVub2xvZ2lzdC9NU1xcbmltbXVub2xvZ3kvTVxcbmltbXVyZS9EU0dcXG5pbW11dGFiaWxpdHkvTVxcbmltbXV0YWJsZVxcbmltbXV0YWJseVxcbmltcC9TTVJcXG5pbXBhY3QvU01ER1xcbmltcGFpci9TREdMXFxuaW1wYWlyZWQvVVxcbmltcGFpcm1lbnQvTVNcXG5pbXBhbGEvU01cXG5pbXBhbGUvRFNHTFxcbmltcGFsZW1lbnQvTVxcbmltcGFscGFibGVcXG5pbXBhbHBhYmx5XFxuaW1wYW5lbC9TREdcXG5pbXBhcnQvU0RHXFxuaW1wYXJ0aWFsL1lcXG5pbXBhcnRpYWxpdHkvTVxcbmltcGFzc2FibHlcXG5pbXBhc3NlL0JTTVZcXG5pbXBhc3NpYmlsaXR5L01cXG5pbXBhc3NpYmxlXFxuaW1wYXNzaWJseVxcbmltcGFzc2lvbmVkXFxuaW1wYXNzaXZlL1lQXFxuaW1wYXNzaXZlbmVzcy9NXFxuaW1wYXNzaXZpdHkvTVxcbmltcGFzdG8vTVxcbmltcGF0aWVuY2UvTVNcXG5pbXBhdGllbnMvTVxcbmltcGF0aWVudC9ZXFxuaW1wZWFjaC9aR0JMRFJTXFxuaW1wZWFjaGFibGUvVVxcbmltcGVhY2hlci9NXFxuaW1wZWFjaG1lbnQvU01cXG5pbXBlY2NhYmlsaXR5L01cXG5pbXBlY2NhYmxlXFxuaW1wZWNjYWJseVxcbmltcGVjdW5pb3VzL1BZXFxuaW1wZWN1bmlvdXNuZXNzL01cXG5pbXBlZGFuY2UvTVxcbmltcGVkZS9EU0dcXG5pbXBlZGVkL1VcXG5pbXBlZGltZW50L1NNXFxuaW1wZWRpbWVudGEvTVxcbmltcGVsL1NcXG5pbXBlbGxlZFxcbmltcGVsbGVyL01TXFxuaW1wZWxsaW5nXFxuaW1wZW5kL1NER1xcbmltcGVuZXRyYWJpbGl0eS9NXFxuaW1wZW5ldHJhYmxlXFxuaW1wZW5ldHJhYmx5XFxuaW1wZW5pdGVuY2UvTVxcbmltcGVuaXRlbnQvWVxcbmltcGVyYXRpdmUvU01ZXFxuaW1wZXJjZXB0aWJpbGl0eS9NXFxuaW1wZXJjZXB0aWJsZVxcbmltcGVyY2VwdGlibHlcXG5pbXBlcmNlcHRpdmVcXG5pbXBlcmZcXG5pbXBlcmZlY3QvU01ZUFxcbmltcGVyZmVjdGlvbi9NU1xcbmltcGVyZmVjdG5lc3MvTVxcbmltcGVyaWFsL01ZU1xcbmltcGVyaWFsaXNtL01cXG5pbXBlcmlhbGlzdC9TTVxcbmltcGVyaWFsaXN0aWNcXG5pbXBlcmlhbGlzdGljYWxseVxcbmltcGVyaWwvR1NMRFxcbmltcGVyaWxtZW50L01cXG5pbXBlcmlvdXMvUFlcXG5pbXBlcmlvdXNuZXNzL01cXG5pbXBlcmlzaGFibGVcXG5pbXBlcmlzaGFibHlcXG5pbXBlcm1hbmVuY2UvTVxcbmltcGVybWFuZW50L1lcXG5pbXBlcm1lYWJpbGl0eS9NXFxuaW1wZXJtZWFibGVcXG5pbXBlcm1lYWJseVxcbmltcGVybWlzc2libGVcXG5pbXBlcnNvbmFsL1lcXG5pbXBlcnNvbmF0ZS9HTlhEU1xcbmltcGVyc29uYXRpb24vTVxcbmltcGVyc29uYXRvci9TTVxcbmltcGVydGluZW5jZS9NU1xcbmltcGVydGluZW50L1lcXG5pbXBlcnR1cmJhYmlsaXR5L01cXG5pbXBlcnR1cmJhYmxlXFxuaW1wZXJ0dXJiYWJseVxcbmltcGVydmlvdXMvWVxcbmltcGV0aWdvL01cXG5pbXBldHVvc2l0eS9NXFxuaW1wZXR1b3VzL1lQXFxuaW1wZXR1b3VzbmVzcy9NXFxuaW1wZXR1cy9NU1xcbmltcGlldHkvU01cXG5pbXBpbmdlL0xEU0dcXG5pbXBpbmdlbWVudC9NXFxuaW1waW91cy9QWVxcbmltcGlvdXNuZXNzL01cXG5pbXBpc2gvWVBcXG5pbXBpc2huZXNzL01cXG5pbXBsYWNhYmlsaXR5L01cXG5pbXBsYWNhYmxlXFxuaW1wbGFjYWJseVxcbmltcGxhbnQvQlNHTURcXG5pbXBsYW50YXRpb24vTVxcbmltcGxhdXNpYmlsaXR5L1NNXFxuaW1wbGF1c2libGVcXG5pbXBsYXVzaWJseVxcbmltcGxlbWVudC9HQk1EUlNcXG5pbXBsZW1lbnRhYmxlL1VcXG5pbXBsZW1lbnRhdGlvbi9TTVxcbmltcGxlbWVudGVkL1VcXG5pbXBsaWNhdGUvRFNHXFxuaW1wbGljYXRpb24vTVxcbmltcGxpY2l0L1BZXFxuaW1wbGljaXRuZXNzL01cXG5pbXBsb2RlL0RTR1xcbmltcGxvcmUvRFNHXFxuaW1wbG9yaW5nL1lcXG5pbXBsb3Npb24vTVNcXG5pbXBsb3NpdmVcXG5pbXBseS9YRFNHTlxcbmltcG9saXRlL1lQXFxuaW1wb2xpdGVuZXNzL01TXFxuaW1wb2xpdGljXFxuaW1wb25kZXJhYmxlL01TXFxuaW1wb3J0L1pHQlNNRFJcXG5pbXBvcnRhbmNlL01cXG5pbXBvcnRhbnQvWVxcbmltcG9ydGF0aW9uL01TXFxuaW1wb3J0ZXIvTVxcbmltcG9ydHVuYXRlL1lcXG5pbXBvcnR1bmUvR0RTXFxuaW1wb3J0dW5pdHkvTVxcbmltcG9zZS9BRFNHXFxuaW1wb3Nlci9NU1xcbmltcG9zaW5nL1VcXG5pbXBvc2luZ2x5XFxuaW1wb3NpdGlvbi9NU1xcbmltcG9zc2liaWxpdHkvU01cXG5pbXBvc3NpYmxlL1NcXG5pbXBvc3NpYmx5XFxuaW1wb3N0L1NNXFxuaW1wb3N0b3IvU01cXG5pbXBvc3R1cmUvTVNcXG5pbXBvdGVuY2UvTVxcbmltcG90ZW5jeS9NXFxuaW1wb3RlbnQvWVxcbmltcG91bmQvREdTXFxuaW1wb3ZlcmlzaC9EU0xHXFxuaW1wb3ZlcmlzaG1lbnQvTVxcbmltcHJhY3RpY2FiaWxpdHlcXG5pbXByYWN0aWNhYmxlXFxuaW1wcmFjdGljYWJseVxcbmltcHJhY3RpY2FsL1lcXG5pbXByYWN0aWNhbGl0eS9NXFxuaW1wcmVjYXRlL0RTWEdOXFxuaW1wcmVjYXRpb24vTVxcbmltcHJlY2lzZS9QWU5cXG5pbXByZWNpc2VuZXNzL01cXG5pbXByZWNpc2lvbi9NXFxuaW1wcmVnbmFiaWxpdHkvTVxcbmltcHJlZ25hYmxlXFxuaW1wcmVnbmFibHlcXG5pbXByZWduYXRlL0dORFNcXG5pbXByZWduYXRpb24vTVxcbmltcHJlc2FyaW8vU01cXG5pbXByZXNzL01EU0dWXFxuaW1wcmVzc2VkL1VcXG5pbXByZXNzaWJpbGl0eS9NXFxuaW1wcmVzc2libGVcXG5pbXByZXNzaW9uL0JTTVxcbmltcHJlc3Npb25hYmlsaXR5L01cXG5pbXByZXNzaW9uaXNtL01cXG5pbXByZXNzaW9uaXN0L1NNXFxuaW1wcmVzc2lvbmlzdGljXFxuaW1wcmVzc2l2ZS9QWVxcbmltcHJlc3NpdmVuZXNzL01cXG5pbXByaW1hdHVyL1NNXFxuaW1wcmludC9NRFJaR1NcXG5pbXByaW50ZXIvTVxcbmltcHJpc29uL1NETEdcXG5pbXByaXNvbm1lbnQvU01cXG5pbXByb2JhYmlsaXR5L1NNXFxuaW1wcm9iYWJsZVxcbmltcHJvYmFibHlcXG5pbXByb21wdHUvU01cXG5pbXByb3Blci9ZXFxuaW1wcm9wcmlldHkvU01cXG5pbXByb3ZlL0dCRFNMXFxuaW1wcm92ZWQvVVxcbmltcHJvdmVtZW50L01TXFxuaW1wcm92aWRlbmNlL01cXG5pbXByb3ZpZGVudC9ZXFxuaW1wcm92aXNhdGlvbi9TTVxcbmltcHJvdmlzYXRpb25hbFxcbmltcHJvdmlzZS9aR0RSU1xcbmltcHJvdmlzZXIvTVxcbmltcHJ1ZGVuY2UvTVxcbmltcHJ1ZGVudC9ZXFxuaW1wdWRlbmNlL01cXG5pbXB1ZGVudC9ZXFxuaW1wdWduL1pHU0RSXFxuaW1wdWduZXIvTVxcbmltcHVsc2UvTUdOVkRTXFxuaW1wdWxzaW9uL01cXG5pbXB1bHNpdmUvUFlcXG5pbXB1bHNpdmVuZXNzL01cXG5pbXB1bHNpdml0eVxcbmltcHVuaXR5L01cXG5pbXB1cmUvUllUXFxuaW1wdXJpdHkvU01cXG5pbXB1dGF0aW9uL1NNXFxuaW1wdXRlL0JEU0dcXG5pbi9BU01cXG5pbmFjY3VyYWN5L1NcXG5pbmFjdGlvbi9NXFxuaW5hZGVxdWFjeS9TXFxuaW5hZHZlcnRlbmNlL01cXG5pbmFkdmVydGVudC9ZXFxuaW5hbGllbmFiaWxpdHkvTVxcbmluYWxpZW5hYmx5XFxuaW5hbW9yYXRhL1NNXFxuaW5hbmUvUllUXFxuaW5hbmltYXRlL1BZXFxuaW5hbmltYXRlbmVzcy9NXFxuaW5hbml0eS9TTVxcbmluYXBwcm9wcmlhdGUvWVxcbmluYXJ0aWN1bGF0ZS9ZXFxuaW5hc211Y2hcXG5pbmF1ZGlibGVcXG5pbmF1Z3VyYWwvU01cXG5pbmF1Z3VyYXRlL1hHTkRTXFxuaW5hdWd1cmF0aW9uL01cXG5pbmJvYXJkL01TXFxuaW5ib3VuZFxcbmluYm94L01TXFxuaW5icmVlZC9TXFxuaW5jL1RHRFxcbmluY2FsY3VsYWJseVxcbmluY2FuZGVzY2VuY2UvTVxcbmluY2FuZGVzY2VudC9ZXFxuaW5jYW50YXRpb24vU01cXG5pbmNhcGFjaXRhdGUvR05EU1xcbmluY2FyY2VyYXRlL1hEU0dOXFxuaW5jYXJjZXJhdGlvbi9NXFxuaW5jYXJuYWRpbmUvRFNHXFxuaW5jYXJuYXRlL0FYR05EU1xcbmluY2FybmF0aW9uL0FNXFxuaW5jZW5kaWFyeS9TTVxcbmluY2Vuc2UvTUdEU1xcbmluY2VudGl2ZSdzXFxuaW5jZW50aXZlL0VTXFxuaW5jZXB0aW9uL1NNXFxuaW5jZXNzYW50L1lcXG5pbmNlc3QvTVxcbmluY2VzdHVvdXMvUFlcXG5pbmNlc3R1b3VzbmVzcy9NXFxuaW5jaC9NRFNHXFxuaW5jaG9hdGVcXG5pbmNod29ybS9TTVxcbmluY2lkZW5jZS9TTVxcbmluY2lkZW50L1NNXFxuaW5jaWRlbnRhbC9NWVNcXG5pbmNpbmVyYXRlL0RTR05cXG5pbmNpbmVyYXRpb24vTVxcbmluY2luZXJhdG9yL01TXFxuaW5jaXBpZW5jZS9NXFxuaW5jaXBpZW50L1lcXG5pbmNpc2UvWEdOVkRTXFxuaW5jaXNpb24vTVxcbmluY2lzaXZlL1BZXFxuaW5jaXNpdmVuZXNzL01cXG5pbmNpc29yL01TXFxuaW5jaXRlbWVudC9NU1xcbmluY2l0ZXIvTVNcXG5pbmNsXFxuaW5jbGVtZW50XFxuaW5jbGluYXRpb24vRU1cXG5pbmNsaW5hdGlvbnNcXG5pbmNsaW5lJ3NcXG5pbmNsaW5lL0VHRFNcXG5pbmNsdWRlL0dEU1xcbmluY2x1c2lvbi9NU1xcbmluY2x1c2l2ZS9ZUFxcbmluY2x1c2l2ZW5lc3MvTVxcbmluY29nbml0by9NU1xcbmluY29tYnVzdGlibGVcXG5pbmNvbW1vZGUvR0RcXG5pbmNvbW1vZGlvdXNcXG5pbmNvbW11bmljYWRvXFxuaW5jb21wYXRpYmlsaXR5L1NcXG5pbmNvbXBldGVudC9NU1xcbmluY29tcGxldGUvWVxcbmluY29uY2VpdmFiaWxpdHkvTVxcbmluY29uZ3J1b3VzL1BZXFxuaW5jb25ncnVvdXNuZXNzL01cXG5pbmNvbnNvbGFibHlcXG5pbmNvbnN0YW50L1lcXG5pbmNvbnRlc3RhYmlsaXR5L01cXG5pbmNvbnRlc3RhYmx5XFxuaW5jb250aW5lbnRcXG5pbmNvbnRyb3ZlcnRpYmx5XFxuaW5jb252ZW5pZW5jZS9HRFxcbmluY29ycG9yYXRlL0FEU0dOXFxuaW5jb3Jwb3JhdGVkL1VcXG5pbmNvcnBvcmF0aW9uL0FNXFxuaW5jb3Jwb3JlYWxcXG5pbmNvcnJlY3QvWVxcbmluY29ycmlnaWJpbGl0eS9NXFxuaW5jb3JyaWdpYmxlXFxuaW5jb3JyaWdpYmx5XFxuaW5jb3JydXB0aWJseVxcbmluY3JlYXNpbmcvWVxcbmluY3JlbWVudC9TTURHXFxuaW5jcmVtZW50YWwvWVxcbmluY3JlbWVudGFsaXNtXFxuaW5jcmVtZW50YWxpc3QvU01cXG5pbmNyaW1pbmF0ZS9HTkRTXFxuaW5jcmltaW5hdGlvbi9NXFxuaW5jcmltaW5hdG9yeVxcbmluY3J1c3RhdGlvbi9TTVxcbmluY3ViYXRlL0dORFNcXG5pbmN1YmF0aW9uL01cXG5pbmN1YmF0b3IvU01cXG5pbmN1YnVzL01TXFxuaW5jdWxjYXRlL0RTR05cXG5pbmN1bGNhdGlvbi9NXFxuaW5jdWxwYXRlL0RTR1xcbmluY3VtYmVuY3kvU01cXG5pbmN1bWJlbnQvU01cXG5pbmN1bmFidWxhXFxuaW5jdW5hYnVsdW0vTVxcbmluY3VyL1NCXFxuaW5jdXJhYmxlL01TXFxuaW5jdXJhYmx5XFxuaW5jdXJpb3VzXFxuaW5jdXJyZWRcXG5pbmN1cnJpbmdcXG5pbmN1cnNpb24vTVNcXG5pbmRcXG5pbmRlYnRlZC9QXFxuaW5kZWJ0ZWRuZXNzL01cXG5pbmRlZWRcXG5pbmRlZmF0aWdhYmxlXFxuaW5kZWZhdGlnYWJseVxcbmluZGVmZWFzaWJsZVxcbmluZGVmZWFzaWJseVxcbmluZGVmaW5hYmx5XFxuaW5kZWxpYmxlXFxuaW5kZWxpYmx5XFxuaW5kZW1uaWZpY2F0aW9uL01cXG5pbmRlbW5pZnkvR0RTWE5cXG5pbmRlbW5pdHkvU01cXG5pbmRlbnRhdGlvbi9NU1xcbmluZGVudGlvbi9NXFxuaW5kZW50dXJlL0RHXFxuaW5kZXNjcmliYWJseVxcbmluZGVzdHJ1Y3RpYmx5XFxuaW5kZXRlcm1pbmFibHlcXG5pbmRldGVybWluYWN5L01cXG5pbmRldGVybWluYXRlL1lcXG5pbmRleC9aR01EUlNcXG5pbmRleGF0aW9uL1NNXFxuaW5kZXhlci9NXFxuaW5kaWNhdGUvWERTR05WXFxuaW5kaWNhdGlvbi9NXFxuaW5kaWNhdGl2ZS9TTVlcXG5pbmRpY2F0b3IvTVNcXG5pbmRpY3QvR0RTQkxcXG5pbmRpY3RtZW50L1NNXFxuaW5kaWUvU1xcbmluZGlnZW5jZS9NXFxuaW5kaWdlbm91c1xcbmluZGlnZW50L1NNWVxcbmluZGlnbmFudC9ZXFxuaW5kaWduYXRpb24vTVxcbmluZGlnby9NXFxuaW5kaXJlY3QvWVxcbmluZGlzY2lwbGluZVxcbmluZGlzY3JlZXQvWVxcbmluZGlzY3JldGlvbi9TXFxuaW5kaXNjcmltaW5hdGUvWVxcbmluZGlzcGVuc2FiaWxpdHkvTVxcbmluZGlzcGVuc2FibGUvTVNcXG5pbmRpc3BlbnNhYmx5XFxuaW5kaXNzb2x1YmlsaXR5XFxuaW5kaXNzb2x1Ymx5XFxuaW5kaXN0aW5ndWlzaGFibHlcXG5pbmRpdGUvR0RTXFxuaW5kaXVtL01cXG5pbmRpdmlkdWFsL01ZU1xcbmluZGl2aWR1YWxpc20vTVxcbmluZGl2aWR1YWxpc3QvTVNcXG5pbmRpdmlkdWFsaXN0aWNcXG5pbmRpdmlkdWFsaXN0aWNhbGx5XFxuaW5kaXZpZHVhbGl0eS9NXFxuaW5kaXZpZHVhbGl6YXRpb24vTVxcbmluZGl2aWR1YWxpemUvR0RTXFxuaW5kaXZpZHVhdGUvRFNHTlxcbmluZGl2aWR1YXRpb24vTVxcbmluZGl2aXNpYmx5XFxuaW5kb2N0cmluYXRlL0dORFNcXG5pbmRvY3RyaW5hdGlvbi9NXFxuaW5kb2xlbmNlL01cXG5pbmRvbGVudC9ZXFxuaW5kb21pdGFibGVcXG5pbmRvbWl0YWJseVxcbmluZHViaXRhYmxlXFxuaW5kdWJpdGFibHlcXG5pbmR1Y2UvRFJTWkdMXFxuaW5kdWNlbWVudC9TTVxcbmluZHVjZXIvTVxcbmluZHVjdC9ER1ZcXG5pbmR1Y3RhbmNlL01cXG5pbmR1Y3RlZS9TTVxcbmluZHVjdGlvbi9NU1xcbmluZHVjdGl2ZS9ZXFxuaW5kdWxnZS9EU0dcXG5pbmR1bGdlbmNlL1NNXFxuaW5kdWxnZW50L1lcXG5pbmR1c3RyaWFsL1lcXG5pbmR1c3RyaWFsaXNtL01cXG5pbmR1c3RyaWFsaXN0L1NNXFxuaW5kdXN0cmlhbGl6YXRpb24vTVxcbmluZHVzdHJpYWxpemUvRFNHXFxuaW5kdXN0cmlvdXMvWVBcXG5pbmR1c3RyaW91c25lc3MvTVxcbmluZHVzdHJ5L1NNXFxuaW5kd2VsbC9TR1xcbmluZWJyaWF0ZS9NR05EU1xcbmluZWJyaWF0aW9uL01cXG5pbmVkaWJsZVxcbmluZWZmYWJpbGl0eS9NXFxuaW5lZmZhYmxlXFxuaW5lZmZhYmx5XFxuaW5lbGFzdGljXFxuaW5lbGlnaWJsZS9NU1xcbmluZWxpZ2libHlcXG5pbmVsdWN0YWJsZVxcbmluZWx1Y3RhYmx5XFxuaW5lcHQvWVBcXG5pbmVwdGl0dWRlL01cXG5pbmVwdG5lc3MvTVxcbmluZXF1YWxpdHkvU1xcbmluZXJ0L1lQXFxuaW5lcnRpYS9NXFxuaW5lcnRpYWxcXG5pbmVydG5lc3MvTVxcbmluZXNjYXBhYmxlXFxuaW5lc2NhcGFibHlcXG5pbmVzdGltYWJseVxcbmluZXZpdGFiaWxpdHkvTVxcbmluZXZpdGFibGUvTVxcbmluZXZpdGFibHlcXG5pbmV4YWN0L1lcXG5pbmV4aGF1c3RpYmx5XFxuaW5leG9yYWJpbGl0eVxcbmluZXhvcmFibGVcXG5pbmV4b3JhYmx5XFxuaW5leHBlZGllbnRcXG5pbmV4cGVydC9ZXFxuaW5leHBpYWJsZVxcbmluZXhwbGljYWJseVxcbmluZXhwcmVzc2libHlcXG5pbmV4cHJlc3NpdmVcXG5pbmV4dHJpY2FibHlcXG5pbmYvWlRcXG5pbmZhbGxpYmxlXFxuaW5mYW15L1NNXFxuaW5mYW5jeS9NXFxuaW5mYW50L01TXFxuaW5mYW50aWNpZGUvTVNcXG5pbmZhbnRpbGVcXG5pbmZhbnRyeS9TTVxcbmluZmFudHJ5bWFuL01cXG5pbmZhbnRyeW1lblxcbmluZmFyY3QvTVNcXG5pbmZhcmN0aW9uL01cXG5pbmZhdHVhdGUvRFNYR05cXG5pbmZhdHVhdGlvbi9NXFxuaW5mZWN0L0FFU0RHXFxuaW5mZWN0ZWQvVVxcbmluZmVjdGlvbi9BU01cXG5pbmZlY3Rpb3VzL1BZXFxuaW5mZWN0aW91c25lc3MvTVxcbmluZmVsaWNpdG91c1xcbmluZmVyZW5jZS9TTVxcbmluZmVyZW50aWFsXFxuaW5mZXJpb3IvTVNcXG5pbmZlcmlvcml0eS9NXFxuaW5mZXJuYWwvWVxcbmluZmVybm8vTVNcXG5pbmZlcnJlZFxcbmluZmVycmluZ1xcbmluZmVzdC9HRFNcXG5pbmZlc3RhdGlvbi9NU1xcbmluZmlkZWwvTVNcXG5pbmZpZGVsaXR5L1NcXG5pbmZpbHRyYXRvci9TTVxcbmluZmluaXRlL01WXFxuaW5maW5pdGVzaW1hbC9TTVlcXG5pbmZpbml0aXZhbFxcbmluZmluaXRpdmUvTVNcXG5pbmZpbml0dWRlL01cXG5pbmZpbml0eS9TTVxcbmluZmlybVxcbmluZmlybWFyeS9TTVxcbmluZmlybWl0eS9TTVxcbmluZml4XFxuaW5mbGFtZS9EU0dcXG5pbmZsYW1tYWJsZVxcbmluZmxhbW1hdGlvbi9TTVxcbmluZmxhbW1hdG9yeVxcbmluZmxhdGFibGUvU01cXG5pbmZsYXRlL0FEU0dcXG5pbmZsYXRpb24vRU1cXG5pbmZsYXRpb25hcnlcXG5pbmZsZWN0L1NER1xcbmluZmxlY3Rpb24vTVNcXG5pbmZsZWN0aW9uYWxcXG5pbmZsaWN0L1NER1ZcXG5pbmZsaWN0aW9uL01cXG5pbmZsb3cvU01cXG5pbmZsdWVuY2UvTUdEU1xcbmluZmx1ZW5jZWQvVVxcbmluZmx1ZW50aWFsL1lcXG5pbmZsdWVuemEvTVxcbmluZm8vTVxcbmluZm9tZXJjaWFsL1NNXFxuaW5mb3JtL1pcXG5pbmZvcm1hbC9ZXFxuaW5mb3JtYW50L1NNXFxuaW5mb3JtYXRpY3NcXG5pbmZvcm1hdGlvbi9FTVxcbmluZm9ybWF0aW9uYWxcXG5pbmZvcm1hdGl2ZS9QWVxcbmluZm9ybWF0aXZlbmVzcy9NXFxuaW5mb3JtZWQvVVxcbmluZm90YWlubWVudC9NXFxuaW5mcmFcXG5pbmZyYXJlZC9NXFxuaW5mcmFzb25pY1xcbmluZnJhc3RydWN0dXJhbFxcbmluZnJhc3RydWN0dXJlL1NNXFxuaW5mcmVxdWVuY2UvTVxcbmluZnJlcXVlbnQvWVxcbmluZnJpbmdlbWVudC9NU1xcbmluZnVyaWF0ZS9HRFNcXG5pbmZ1cmlhdGluZy9ZXFxuaW5mdXNlci9TTVxcbmluZ2VuaW91cy9QWVxcbmluZ2VuaW91c25lc3MvTVxcbmluZ2VudWUvU01cXG5pbmdlbnVpdHkvTVxcbmluZ2VudW91cy9FWVxcbmluZ2VudW91c25lc3MvTVxcbmluZ2VzdC9TREdcXG5pbmdlc3Rpb24vTVxcbmluZ2xlbm9vay9TTVxcbmluZ290L1NNXFxuaW5ncmFpbi9HXFxuaW5ncmF0ZS9TTVxcbmluZ3JhdGlhdGUvR05EU1xcbmluZ3JhdGlhdGluZy9ZXFxuaW5ncmF0aWF0aW9uL01cXG5pbmdyZWRpZW50L01TXFxuaW5ncmVzcy9NU1xcbmluZ3VpbmFsXFxuaW5oYWJpdC9ER1xcbmluaGFiaXRhYmxlL1VcXG5pbmhhYml0YW50L1NNXFxuaW5oYWJpdGVkL1VcXG5pbmhhbGFudC9TTVxcbmluaGFsYXRpb24vTVNcXG5pbmhhbGF0b3IvTVNcXG5pbmhhbGVyL1NNXFxuaW5oYXJtb25pb3VzXFxuaW5oZXJlL0RTR1xcbmluaGVyZW50L1lcXG5pbmhlcml0L0VHU0RcXG5pbmhlcml0YW5jZS9FTVxcbmluaGVyaXRhbmNlc1xcbmluaGVyaXRvci9TTVxcbmluaGliaXQvR1NEXFxuaW5oaWJpdGlvbi9TTVxcbmluaGliaXRvci9TTVxcbmluaGliaXRvcnlcXG5pbmh1bWFuL1lcXG5pbmh1bWFuZS9ZXFxuaW5pbWljYWwvWVxcbmluaW1pdGFibHlcXG5pbmlxdWl0b3VzL1lcXG5pbmlxdWl0eS9TTVxcbmluaXRpYWwvU0dNRFlcXG5pbml0aWFsaXNtXFxuaW5pdGlhbGl6YXRpb25cXG5pbml0aWFsaXplL0RTR1xcbmluaXRpYWxpemVkL0FVXFxuaW5pdGlhdGUvWE1HTlZEU1xcbmluaXRpYXRlZC9VXFxuaW5pdGlhdGlvbi9NXFxuaW5pdGlhdGl2ZS9TTVxcbmluaXRpYXRvci9NU1xcbmluaXRpYXRvcnlcXG5pbml0aW9cXG5pbmplY3QvU0RHXFxuaW5qZWN0aW9uL1NNXFxuaW5qZWN0b3IvU01cXG5pbmp1bmN0aXZlXFxuaW5qdXJlL0RSU1pHXFxuaW5qdXJlZC9VXFxuaW5qdXJlci9NXFxuaW5qdXJpb3VzXFxuaW5rL01EXFxuaW5rYmxvdC9TTVxcbmlua2luZXNzL01cXG5pbmtsaW5nL1NNXFxuaW5rc3RhbmQvU01cXG5pbmt3ZWxsL01TXFxuaW5reS9SVFBcXG5pbmxhbmQvTVxcbmlubGluZVxcbmlubWF0ZS9TTVxcbmlubW9zdFxcbmlubi9TR01SSlxcbmlubmFyZHMvTVxcbmlubmF0ZS9QWVxcbmlubmF0ZW5lc3MvTVxcbmlubmVybW9zdFxcbmlubmVyc29sZS9TTVxcbmlubmVyc3ByaW5nXFxuaW5uZXJ2YXRlL0dORFNcXG5pbm5lcnZhdGlvbi9NXFxuaW5uaW5nL01cXG5pbm5pdFxcbmlubmtlZXBlci9NU1xcbmlubm9jZW5jZS9NXFxuaW5ub2NlbnQvTVlTXFxuaW5ub2N1b3VzL1BZXFxuaW5ub2N1b3VzbmVzcy9NXFxuaW5ub3ZhdGUvWERTR05WXFxuaW5ub3ZhdGlvbi9NXFxuaW5ub3ZhdG9yL01TXFxuaW5ub3ZhdG9yeVxcbmlubnVlbmRvL1NNXFxuaW5udW1lcmFibHlcXG5pbm51bWVyYXRlXFxuaW5vY3VsYXRlL0FHRFNcXG5pbm9jdWxhdGlvbi9NU1xcbmlub3BlcmF0aXZlXFxuaW5vcmRpbmF0ZS9ZXFxuaW5vcmdhbmljXFxuaW5vc2l0b2xcXG5pbnF1aXJlL1pHRFJcXG5pbnF1aXJlci9NXFxuaW5xdWlyaW5nL1lcXG5pbnF1aXJ5L1NNXFxuaW5xdWlzaXRpb24vTVNcXG5pbnF1aXNpdGlvbmFsXFxuaW5xdWlzaXRpdmUvWVBcXG5pbnF1aXNpdGl2ZW5lc3MvTVxcbmlucXVpc2l0b3IvU01cXG5pbnF1aXNpdG9yaWFsXFxuaW5ydXNoL01TXFxuaW5zYW5lL1RcXG5pbnNhdGlhYmlsaXR5L01cXG5pbnNhdGlhYmx5XFxuaW5zY3JpYmUvWkdEUlxcbmluc2NyaWJlci9NXFxuaW5zY3JpcHRpb24vTVNcXG5pbnNjcnV0YWJpbGl0eS9NXFxuaW5zY3J1dGFibGUvUFxcbmluc2NydXRhYmxlbmVzcy9NXFxuaW5zY3J1dGFibHlcXG5pbnNlYW0vU01cXG5pbnNlY3RpY2lkYWxcXG5pbnNlY3RpY2lkZS9NU1xcbmluc2VjdGl2b3JlL01TXFxuaW5zZWN0aXZvcm91c1xcbmluc2VjdXJlL1lcXG5pbnNlbWluYXRlL0RTR05cXG5pbnNlbWluYXRpb24vTVxcbmluc2Vuc2F0ZVxcbmluc2Vuc2libGVcXG5pbnNlbnNpdGl2ZS9ZXFxuaW5zZXBhcmFibGUvTVNcXG5pbnNlcnQnc1xcbmluc2VydC9BR1NEXFxuaW5zZXJ0aW9uL0FNXFxuaW5zZXJ0aW9uc1xcbmluc2V0dGluZ1xcbmluc2hvcmVcXG5pbnNpZGUvUlNNWlxcbmluc2lkZXIvTVxcbmluc2lkaW91cy9ZUFxcbmluc2lkaW91c25lc3MvTVxcbmluc2lnaHQvTVNcXG5pbnNpZ2h0ZnVsXFxuaW5zaWduaWEvTVxcbmluc2ludWF0ZS9HTlZEU1hcXG5pbnNpbnVhdGlvbi9NXFxuaW5zaW51YXRvci9TTVxcbmluc2lwaWQvUFlcXG5pbnNpcGlkaXR5L01cXG5pbnNpc3QvU0dEXFxuaW5zaXN0ZW5jZS9NXFxuaW5zaXN0ZW50L1lcXG5pbnNpc3RpbmcvWVxcbmluc29mYXJcXG5pbnNvbGUvU01cXG5pbnNvbGVuY2UvTVxcbmluc29sZW50L1lcXG5pbnNvbHVibGVcXG5pbnNvbHVibHlcXG5pbnNvbHZlbmN5L1NcXG5pbnNvbW5pYS9NXFxuaW5zb21uaWFjL1NNXFxuaW5zb211Y2hcXG5pbnNvdWNpYW5jZS9NXFxuaW5zb3VjaWFudFxcbmluc3BlY3QvQUdEU1xcbmluc3BlY3Rpb24vU01cXG5pbnNwZWN0b3IvTVNcXG5pbnNwZWN0b3JhdGUvTVNcXG5pbnNwaXJhdGlvbi9NU1xcbmluc3BpcmF0aW9uYWxcXG5pbnNwaXJhdG9yeVxcbmluc3BpcmVkL1VcXG5pbnNwaXJpbmcvVVxcbmluc3RcXG5pbnN0YWJpbGl0eS9TXFxuaW5zdGFsbC9VQlpSU0RHXFxuaW5zdGFsbGF0aW9uL01TXFxuaW5zdGFsbGVyL1VNXFxuaW5zdGFsbG1lbnQvU01cXG5pbnN0YW5jZS9HRFxcbmluc3RhbnQvTVJZU1xcbmluc3RhbnRhbmVvdXMvWVxcbmluc3RhbnRpYXRlL0RTR1xcbmluc3Rhclxcbmluc3RhdGUvQUdEU1xcbmluc3RlYWRcXG5pbnN0aWdhdGUvRFNHTlxcbmluc3RpZ2F0aW9uL01cXG5pbnN0aWdhdG9yL01TXFxuaW5zdGlsbGF0aW9uL01cXG5pbnN0aW5jdC9WTVNcXG5pbnN0aW5jdGl2ZS9ZXFxuaW5zdGluY3R1YWxcXG5pbnN0aXR1dGUvWE1aR05EUlNcXG5pbnN0aXR1dGVyL01cXG5pbnN0aXR1dGlvbi9NXFxuaW5zdGl0dXRpb25hbC9ZXFxuaW5zdGl0dXRpb25hbGl6YXRpb24vTVxcbmluc3RpdHV0aW9uYWxpemUvRFNHXFxuaW5zdHJcXG5pbnN0cnVjdC9TREdWXFxuaW5zdHJ1Y3RlZC9VXFxuaW5zdHJ1Y3Rpb24vTVNcXG5pbnN0cnVjdGlvbmFsXFxuaW5zdHJ1Y3RpdmUvWVxcbmluc3RydWN0b3IvTVNcXG5pbnN0cnVtZW50L01EU0dcXG5pbnN0cnVtZW50YWwvTVlTXFxuaW5zdHJ1bWVudGFsaXN0L1NNXFxuaW5zdHJ1bWVudGFsaXR5L01cXG5pbnN0cnVtZW50YXRpb24vTVxcbmluc3Vib3JkaW5hdGVcXG5pbnN1ZmZlcmFibGVcXG5pbnN1ZmZlcmFibHlcXG5pbnN1bGFcXG5pbnN1bGFyXFxuaW5zdWxhcml0eS9NXFxuaW5zdWxhdGUvR05EU1xcbmluc3VsYXRpb24vTVxcbmluc3VsYXRvci9NU1xcbmluc3VsaW4vTVxcbmluc3VsdC9TTURHXFxuaW5zdWx0aW5nL1lcXG5pbnN1cGVyYWJsZVxcbmluc3VwZXJhYmx5XFxuaW5zdXJhbmNlL1NNXFxuaW5zdXJlL0RSU1pHQlxcbmluc3VyZWQvU01cXG5pbnN1cmVyL01cXG5pbnN1cmdlbmNlL1NNXFxuaW5zdXJnZW5jeS9TTVxcbmluc3VyZ2VudC9NU1xcbmluc3VybW91bnRhYmx5XFxuaW5zdXJyZWN0aW9uL1NNXFxuaW5zdXJyZWN0aW9uaXN0L1NNXFxuaW50XFxuaW50YWN0XFxuaW50YWdsaW8vTVNcXG5pbnRlZ2VyL01TXFxuaW50ZWdyYWwvU01ZXFxuaW50ZWdyYXRlL0FFVk5HU0RcXG5pbnRlZ3JhdGlvbi9FQU1cXG5pbnRlZ3JhdG9yXFxuaW50ZWdyaXR5L01cXG5pbnRlZ3VtZW50L1NNXFxuaW50ZWwvTVxcbmludGVsbGVjdC9NU1xcbmludGVsbGVjdHVhbC9NWVNcXG5pbnRlbGxlY3R1YWxpc20vTVxcbmludGVsbGVjdHVhbGl6ZS9HRFNcXG5pbnRlbGxpZ2VuY2UvTVxcbmludGVsbGlnZW50L1lcXG5pbnRlbGxpZ2VudHNpYS9NXFxuaW50ZWxsaWdpYmlsaXR5L01cXG5pbnRlbGxpZ2libGUvVVxcbmludGVsbGlnaWJseS9VXFxuaW50ZW5kZWQvU01cXG5pbnRlbnNlL1lUVlJcXG5pbnRlbnNpZmljYXRpb24vTVxcbmludGVuc2lmaWVyL01cXG5pbnRlbnNpZnkvRFJTWkdOXFxuaW50ZW5zaXR5L1NcXG5pbnRlbnNpdmUvTVlQU1xcbmludGVuc2l2ZW5lc3MvTVxcbmludGVudC9TTVlQXFxuaW50ZW50aW9uL01TXFxuaW50ZW50aW9uYWwvVVlcXG5pbnRlbnRuZXNzL01cXG5pbnRlci9FU0xcXG5pbnRlcmFjdC9TR1ZEXFxuaW50ZXJhY3Rpb24vU01cXG5pbnRlcmFjdGl2ZS9ZXFxuaW50ZXJhY3Rpdml0eVxcbmludGVyYnJlZFxcbmludGVyYnJlZWQvR1NcXG5pbnRlcmNlZGUvR0RTXFxuaW50ZXJjZXB0L0dNRFNcXG5pbnRlcmNlcHRpb24vTVNcXG5pbnRlcmNlcHRvci9TTVxcbmludGVyY2Vzc2lvbi9TTVxcbmludGVyY2Vzc29yL01TXFxuaW50ZXJjZXNzb3J5XFxuaW50ZXJjaGFuZ2UvRFNNR1xcbmludGVyY2hhbmdlYWJpbGl0eVxcbmludGVyY2hhbmdlYWJsZVxcbmludGVyY2hhbmdlYWJseVxcbmludGVyY2l0eVxcbmludGVyY29sbGVnaWF0ZVxcbmludGVyY29tL1NNXFxuaW50ZXJjb21tdW5pY2F0ZS9EU0dOXFxuaW50ZXJjb21tdW5pY2F0aW9uL01cXG5pbnRlcmNvbm5lY3QvR0RTXFxuaW50ZXJjb25uZWN0aW9uL1NNXFxuaW50ZXJjb250aW5lbnRhbFxcbmludGVyY291cnNlL01cXG5pbnRlcmN1bHR1cmFsXFxuaW50ZXJkZW5vbWluYXRpb25hbFxcbmludGVyZGVwYXJ0bWVudGFsXFxuaW50ZXJkZXBlbmRlbmNlL01cXG5pbnRlcmRlcGVuZGVudC9ZXFxuaW50ZXJkaWN0L0dNRFNcXG5pbnRlcmRpY3Rpb24vTVxcbmludGVyZGlzY2lwbGluYXJ5XFxuaW50ZXJlc3QvRVNNRFxcbmludGVyZXN0ZWQvVVxcbmludGVyZXN0aW5nL1lcXG5pbnRlcmZhY2UvTUdEU1xcbmludGVyZmFpdGhcXG5pbnRlcmZlcmUvR0RTXFxuaW50ZXJmZXJlbmNlL01cXG5pbnRlcmZlcm9uL01cXG5pbnRlcmZpbGUvR0RTXFxuaW50ZXJnYWxhY3RpY1xcbmludGVyZ292ZXJubWVudGFsXFxuaW50ZXJpbS9NXFxuaW50ZXJpb3IvU01cXG5pbnRlcmpcXG5pbnRlcmplY3QvR0RTXFxuaW50ZXJqZWN0aW9uL1NNXFxuaW50ZXJsYWNlL0dEU1xcbmludGVybGFyZC9ER1NcXG5pbnRlcmxlYXZlL0RTR1xcbmludGVybGV1a2luL01cXG5pbnRlcmxpbmUvR0RTSlxcbmludGVybGluZWFyXFxuaW50ZXJsaW5pbmcvTVxcbmludGVybGluay9EU0dcXG5pbnRlcmxvY2svR01EU1xcbmludGVybG9jdXRvci9TTVxcbmludGVybG9jdXRvcnlcXG5pbnRlcmxvcGUvWkdEUlNcXG5pbnRlcmxvcGVyL01cXG5pbnRlcmx1ZGUvTUdEU1xcbmludGVybWFycmlhZ2UvU01cXG5pbnRlcm1hcnJ5L0dEU1xcbmludGVybWVkaWFyeS9TTVxcbmludGVybWVkaWF0ZS9NWVNcXG5pbnRlcm1lbnQvRU1cXG5pbnRlcm1lbnRzXFxuaW50ZXJtZXp6aVxcbmludGVybWV6em8vTVNcXG5pbnRlcm1pbmFibHlcXG5pbnRlcm1pbmdsZS9EU0dcXG5pbnRlcm1pc3Npb24vU01cXG5pbnRlcm1pdHRlbmNlXFxuaW50ZXJtaXR0ZW5jeVxcbmludGVybWl0dGVudC9ZXFxuaW50ZXJtaXgvR0RTXFxuaW50ZXJuL0dETFxcbmludGVybmFsL1NZXFxuaW50ZXJuYWxpemF0aW9uL01cXG5pbnRlcm5hbGl6ZS9HRFNcXG5pbnRlcm5hdGlvbmFsL1NNWVxcbmludGVybmF0aW9uYWxpc20vTVxcbmludGVybmF0aW9uYWxpc3QvU01cXG5pbnRlcm5hdGlvbmFsaXphdGlvblxcbmludGVybmF0aW9uYWxpemUvRFNHXFxuaW50ZXJuZWNpbmVcXG5pbnRlcm5lZS9TTVxcbmludGVybmV0XFxuaW50ZXJuaXN0L01TXFxuaW50ZXJubWVudC9NXFxuaW50ZXJuc2hpcC9NU1xcbmludGVyb2ZmaWNlXFxuaW50ZXJvcGVyYWJpbGl0eVxcbmludGVyb3BlcmFibGVcXG5pbnRlcm9wZXJhdGUvU1xcbmludGVycGVuZXRyYXRlL0RTR05cXG5pbnRlcnBlcnNvbmFsXFxuaW50ZXJwbGFuZXRhcnlcXG5pbnRlcnBsYXkvTVxcbmludGVycG9sYXRlL1hEU0dOXFxuaW50ZXJwb2xhdGlvbi9NXFxuaW50ZXJwb3NlL0dEU1xcbmludGVycG9zaXRpb24vTVxcbmludGVycHJldC9BR1ZEU1xcbmludGVycHJldGF0aW9uL0FNU1xcbmludGVycHJldGF0aXZlXFxuaW50ZXJwcmV0ZWQvVVxcbmludGVycHJldGVyL01TXFxuaW50ZXJyYWNpYWxcXG5pbnRlcnJlZC9FXFxuaW50ZXJyZWdudW0vU01cXG5pbnRlcnJlbGF0ZS9YRFNHTlxcbmludGVycmVsYXRpb24vTVxcbmludGVycmVsYXRpb25zaGlwL01TXFxuaW50ZXJyaW5nL0VcXG5pbnRlcnJvZ2F0ZS9EU0dOVlhcXG5pbnRlcnJvZ2F0aW9uL01cXG5pbnRlcnJvZ2F0aXZlL01ZU1xcbmludGVycm9nYXRvci9TTVxcbmludGVycm9nYXRvcnkvU01cXG5pbnRlcnJ1cHQvWkdNRFJTXFxuaW50ZXJydXB0ZXIvTVxcbmludGVycnVwdGlvbi9NU1xcbmludGVyc2Nob2xhc3RpY1xcbmludGVyc2VjdC9HRFNcXG5pbnRlcnNlY3Rpb24vU01cXG5pbnRlcnNlY3Rpb25hbFxcbmludGVyc2VjdGlvbmFsaXR5XFxuaW50ZXJzZXNzaW9uL1NNXFxuaW50ZXJzZXhcXG5pbnRlcnNwZXJzZS9HTkRTXFxuaW50ZXJzcGVyc2lvbi9NXFxuaW50ZXJzdGF0ZS9NU1xcbmludGVyc3RlbGxhclxcbmludGVyc3RpY2UvTVNcXG5pbnRlcnN0aXRpYWxcXG5pbnRlcnR3aW5lL0dEU1xcbmludGVydXJiYW5cXG5pbnRlcnZhbC9TTVxcbmludGVydmVuZS9HRFNcXG5pbnRlcnZlbnRpb24vU01cXG5pbnRlcnZlbnRpb25pc20vTVxcbmludGVydmVudGlvbmlzdC9TTVxcbmludGVydmlldy9aR01EUlNcXG5pbnRlcnZpZXdlZS9NU1xcbmludGVydmlld2VyL01cXG5pbnRlcnZvY2FsaWNcXG5pbnRlcndhclxcbmludGVyd2VhdmUvR1NcXG5pbnRlcndvdmVcXG5pbnRlcndvdmVuXFxuaW50ZXN0YWN5L01cXG5pbnRlc3RhdGVcXG5pbnRlc3RpbmFsXFxuaW50ZXN0aW5lL01TXFxuaW50aWZhZGFcXG5pbnRpbWFjeS9TTVxcbmludGltYXRlL01ZR05EU1hcXG5pbnRpbWF0aW9uL01cXG5pbnRpbWlkYXRlL0dORFNcXG5pbnRpbWlkYXRpbmcvWVxcbmludGltaWRhdGlvbi9NXFxuaW50b25hdGlvbi9TTVxcbmludG94aWNhbnQvU01cXG5pbnRveGljYXRlL0RTR05cXG5pbnRveGljYXRpb24vTVxcbmludHJhY3JhbmlhbFxcbmludHJhbXVyYWxcXG5pbnRyYW11c2N1bGFyXFxuaW50cmFuZXQvTVNcXG5pbnRyYW5zaWdlbmNlL01cXG5pbnRyYW5zaWdlbnQvTVlTXFxuaW50cmFzdGF0ZVxcbmludHJhdXRlcmluZVxcbmludHJhdmVub3VzL01TWVxcbmludHJlcGlkL1lcXG5pbnRyZXBpZGl0eS9NXFxuaW50cmljYWN5L1NNXFxuaW50cmljYXRlL1lcXG5pbnRyaWd1ZS9EUlNNWkdcXG5pbnRyaWd1ZXIvTVxcbmludHJpZ3VpbmcvWVxcbmludHJpbnNpY1xcbmludHJpbnNpY2FsbHlcXG5pbnRyby9TTVxcbmludHJvZHVjZS9BR0RTXFxuaW50cm9kdWN0aW9uL0FNXFxuaW50cm9kdWN0aW9uc1xcbmludHJvZHVjdG9yeVxcbmludHJvaXQvU01cXG5pbnRyb3NwZWN0L0dWRFNcXG5pbnRyb3NwZWN0aW9uL01cXG5pbnRyb3NwZWN0aXZlL1lcXG5pbnRyb3ZlcnNpb24vTVxcbmludHJvdmVydC9NRFNcXG5pbnRydWRlL0RSU1pHXFxuaW50cnVkZXIvTVxcbmludHJ1c2lvbi9TTVxcbmludHJ1c2l2ZS9ZUFxcbmludHJ1c2l2ZW5lc3MvTVxcbmludHVpdC9TREdWXFxuaW50dWl0aW9uL1NcXG5pbnR1aXRpdmUvUFlcXG5pbnR1aXRpdmVuZXNzL01cXG5pbnVuZGF0ZS9YRFNHTlxcbmludW5kYXRpb24vTVxcbmludXJlL0RTR1xcbmludmFkZS9EUlNaR1xcbmludmFkZXIvTVxcbmludmFsaWQvR01EWVNcXG5pbnZhbGlkaXNtL01cXG5pbnZhbHVhYmxlXFxuaW52YWx1YWJseVxcbmludmFyaWFudFxcbmludmFzaW9uL01TXFxuaW52YXNpdmVcXG5pbnZlY3RpdmUvTVxcbmludmVpZ2gvR0RcXG5pbnZlaWdoc1xcbmludmVpZ2xlL1pHRFJTXFxuaW52ZWlnbGVyL01cXG5pbnZlbnQvQVNHVkRcXG5pbnZlbnRpb24vQU1TXFxuaW52ZW50aXZlL1BZXFxuaW52ZW50aXZlbmVzcy9NXFxuaW52ZW50b3IvTVNcXG5pbnZlbnRvcnkvRFNNR1xcbmludmVyc2UvU01ZXFxuaW52ZXJ0L1NNRFJaR1xcbmludmVydGVyL01cXG5pbnZlc3QvQVNER0xcXG5pbnZlc3RpZ2F0ZS9HTlZEU1hcXG5pbnZlc3RpZ2F0aW9uL01cXG5pbnZlc3RpZ2F0b3IvU01cXG5pbnZlc3RpZ2F0b3J5XFxuaW52ZXN0aXR1cmUvTVNcXG5pbnZlc3RtZW50L0FFTVxcbmludmVzdG9yL1NNXFxuaW52ZXRlcmFjeS9NXFxuaW52ZXRlcmF0ZVxcbmludmlkaW91cy9ZUFxcbmludmlkaW91c25lc3MvTVxcbmludmlnaWxhdGUvR05EU1xcbmludmlnaWxhdG9yL1NcXG5pbnZpZ29yYXRlL0FEU0dcXG5pbnZpZ29yYXRpbmcvWVxcbmludmlnb3JhdGlvbi9NXFxuaW52aW5jaWJpbGl0eS9NXFxuaW52aW5jaWJseVxcbmludmlvbGFiaWxpdHkvTVxcbmludmlvbGFibHlcXG5pbnZpb2xhdGVcXG5pbnZpdGF0aW9uL1NNXFxuaW52aXRhdGlvbmFsL1NNXFxuaW52aXRlL0RTTUdcXG5pbnZpdGVkL1VcXG5pbnZpdGVlL1NNXFxuaW52aXRpbmcvWVxcbmludm9rZS9EU0dcXG5pbnZvbHVudGFyaW5lc3MvTVxcbmludm9sdW50YXJ5L1BcXG5pbnZvbHV0aW9uL01cXG5pbnZvbHZlL0xEU0dcXG5pbnZvbHZlZC9VXFxuaW52b2x2ZW1lbnQvU01cXG5pbndhcmQvU1lcXG5pb2N0bFxcbmlvZGlkZS9TTVxcbmlvZGluZS9NXFxuaW9kaXplL0RTR1xcbmlvbi9VU01cXG5pb25pY1xcbmlvbml6YXRpb24vVU1cXG5pb25pemUvVURTR1xcbmlvbml6ZXIvTVNcXG5pb25vc3BoZXJlL01TXFxuaW9ub3NwaGVyaWNcXG5pb3RhL01TXFxuaXBlY2FjL1NNXFxuaXJhc2NpYmlsaXR5L01cXG5pcmFzY2libGVcXG5pcmFzY2libHlcXG5pcmF0ZS9ZUFxcbmlyYXRlbmVzcy9NXFxuaXJlL01cXG5pcmVmdWxcXG5pcmVuaWNcXG5pcmlkZXNcXG5pcmlkZXNjZW5jZS9NXFxuaXJpZGVzY2VudC9ZXFxuaXJpZGl1bS9NXFxuaXJpcy9NU1xcbmlyay9TR0RcXG5pcmtzb21lL1lQXFxuaXJrc29tZW5lc3MvTVxcbmlyb24vTURTR1xcbmlyb25jbGFkL01TXFxuaXJvbmljXFxuaXJvbmljYWwvWVxcbmlyb25pbmcvTVxcbmlyb25tb25nZXIvU1xcbmlyb25tb25nZXJ5XFxuaXJvbnN0b25lL01cXG5pcm9ud2FyZS9NXFxuaXJvbndvb2QvTVNcXG5pcm9ud29yay9NXFxuaXJvbnkvU01cXG5pcnJhZGlhdGUvRFNHTlxcbmlycmFkaWF0aW9uL01cXG5pcnJhdGlvbmFsL1NNWVxcbmlycmF0aW9uYWxpdHkvTVxcbmlycmVjbGFpbWFibGVcXG5pcnJlY29uY2lsYWJpbGl0eS9NXFxuaXJyZWNvbmNpbGFibGVcXG5pcnJlY29uY2lsYWJseVxcbmlycmVjb3ZlcmFibGVcXG5pcnJlY292ZXJhYmx5XFxuaXJyZWRlZW1hYmxlXFxuaXJyZWRlZW1hYmx5XFxuaXJyZWR1Y2libGVcXG5pcnJlZHVjaWJseVxcbmlycmVmdXRhYmxlXFxuaXJyZWZ1dGFibHlcXG5pcnJlZ3VsYXIvTVlTXFxuaXJyZWd1bGFyaXR5L1NNXFxuaXJyZWxldmFuY2UvTVNcXG5pcnJlbGV2YW5jeS9NU1xcbmlycmVsZXZhbnQvWVxcbmlycmVsaWdpb25cXG5pcnJlbGlnaW91c1xcbmlycmVtZWRpYWJsZVxcbmlycmVtZWRpYWJseVxcbmlycmVtb3ZhYmxlXFxuaXJyZXBhcmFibGVcXG5pcnJlcGFyYWJseVxcbmlycmVwbGFjZWFibGVcXG5pcnJlcHJlc3NpYmxlXFxuaXJyZXByZXNzaWJseVxcbmlycmVwcm9hY2hhYmxlXFxuaXJyZXByb2FjaGFibHlcXG5pcnJlc2lzdGlibGVcXG5pcnJlc2lzdGlibHlcXG5pcnJlc29sdXRlL1BZTlxcbmlycmVzb2x1dGVuZXNzL01cXG5pcnJlc29sdXRpb24vTVxcbmlycmVzcGVjdGl2ZVxcbmlycmVzcG9uc2liaWxpdHkvTVxcbmlycmVzcG9uc2libGVcXG5pcnJlc3BvbnNpYmx5XFxuaXJyZXRyaWV2YWJsZVxcbmlycmV0cmlldmFibHlcXG5pcnJldmVyZW5jZS9NXFxuaXJyZXZlcmVudC9ZXFxuaXJyZXZlcnNpYmxlXFxuaXJyZXZlcnNpYmx5XFxuaXJyZXZvY2FibGVcXG5pcnJldm9jYWJseVxcbmlycmlnYWJsZVxcbmlycmlnYXRlL0RTR05cXG5pcnJpZ2F0aW9uL01cXG5pcnJpdGFiaWxpdHkvTVxcbmlycml0YWJsZVxcbmlycml0YWJseVxcbmlycml0YW50L1NNXFxuaXJyaXRhdGUvRFNYR05cXG5pcnJpdGF0aW5nL1lcXG5pcnJpdGF0aW9uL01cXG5pcnJ1cHQvREdWU1xcbmlycnVwdGlvbi9TTVxcbmlzY2hlbWlhXFxuaXNjaGVtaWNcXG5pc2luZ2xhc3MvTVxcbmlzbFxcbmlzbGFuZC9TWk1SXFxuaXNsYW5kZXIvTVxcbmlzbGUvTVNcXG5pc2xldC9TTVxcbmlzbS9DTVxcbmlzbXNcXG5pc24ndFxcbmlzb2Jhci9NU1xcbmlzb2JhcmljXFxuaXNvbGF0ZS9EU01HTlxcbmlzb2xhdGlvbi9NXFxuaXNvbGF0aW9uaXNtL01cXG5pc29sYXRpb25pc3QvU01cXG5pc29tZXIvTVNcXG5pc29tZXJpY1xcbmlzb21lcmlzbS9NXFxuaXNvbWV0cmljL1NcXG5pc29tZXRyaWNhbGx5XFxuaXNvbWV0cmljcy9NXFxuaXNvbW9ycGhpY1xcbmlzb21vcnBoaXNtXFxuaXNvc2NlbGVzXFxuaXNvdGhlcm0vU01cXG5pc290b3BlL1NNXFxuaXNvdG9waWNcXG5pc290cm9waWNcXG5pc3N1YW5jZS9NXFxuaXNzdWUvQURTTUdcXG5pc3N1ZXIvTVNcXG5pc3RobWlhblxcbmlzdGhtdXMvTVNcXG5pdCdkXFxuaXQnbGxcXG5pdC9VU01cXG5pdGFsXFxuaXRhbGljL1NNXFxuaXRhbGljaXphdGlvbi9NXFxuaXRhbGljaXplL0dEU1xcbml0YWxpY3MvTVxcbml0Y2gvTURTR1xcbml0Y2hpbmVzcy9NXFxuaXRjaHkvUlBUXFxuaXRlbS9NU1xcbml0ZW1pemF0aW9uL01cXG5pdGVtaXplL0dEU1xcbml0ZXJhdGUvQVhHTlZEU1xcbml0ZXJhdGlvbi9BTVxcbml0ZXJhdG9yL1NcXG5pdGluZXJhbnQvU01cXG5pdGluZXJhcnkvU01cXG5pdHNlbGZcXG5pdi9VXFxuaXZvcnkvU01cXG5pdnkvRFNNXFxuaXhcXG5qL0ZcXG5qYWIvU01cXG5qYWJiZWRcXG5qYWJiZXIvU01EUlpHXFxuamFiYmVyZXIvTVxcbmphYmJpbmdcXG5qYWJvdC9TTVxcbmphY2FyYW5kYS9NU1xcbmphY2svTURHU1xcbmphY2thbC9TTVxcbmphY2thc3MvTVNcXG5qYWNrYm9vdC9TTURcXG5qYWNrZGF3L01TXFxuamFja2V0L1NNRFxcbmphY2toYW1tZXIvTVNcXG5qYWNra25pZmUvTUdEU1xcbmphY2trbml2ZXNcXG5qYWNrcG90L01TXFxuamFja3JhYmJpdC9NU1xcbmphY2tzdHJhdy9NU1xcbmphY3F1YXJkL01cXG5qYWRlL01HRFNcXG5qYWRlZC9QWVxcbmphZGVkbmVzcy9NXFxuamFkZWl0ZS9NXFxuamFnL1NNXFxuamFnZ2VkL1RQUllcXG5qYWdnZWRuZXNzL01cXG5qYWdnaWVzXFxuamFndWFyL1NNXFxuamFpbC9NRFJaR1NcXG5qYWlsYmlyZC9TTVxcbmphaWxicmVhay9TTVxcbmphaWxlci9NXFxuamFpbGhvdXNlL1NcXG5qYWxhcGVuby9NU1xcbmphbG9weS9TTVxcbmphbG91c2llL01TXFxuamFtL1NNXFxuamFtYi9NU1xcbmphbWJhbGF5YS9NXFxuamFtYm9yZWUvTVNcXG5qYW1tZWRcXG5qYW1taW5nXFxuamFtbXkvUlRcXG5qYW5nbGUvRFJTTVpHXFxuamFuZ2xlci9NXFxuamFuaXRvci9TTVxcbmphbml0b3JpYWxcXG5qYXBhbi9TTVxcbmphcGFubmVkXFxuamFwYW5uaW5nXFxuamFwZS9NR0RTXFxuamFyL1NNXFxuamFyZGluaWVyZS9TTVxcbmphcmZ1bC9NU1xcbmphcmdvbi9NXFxuamFycmVkXFxuamFycmluZy9ZXFxuamFzbWluZS9TTVxcbmphc3Blci9NXFxuamF0by9NU1xcbmphdW5kaWNlL0RTTUdcXG5qYXVudC9TR01EXFxuamF1bnRpbHlcXG5qYXVudGluZXNzL01cXG5qYXVudHkvUlBUXFxuamF2YS9NXFxuamF2ZWxpbi9TTVxcbmphdy9TR01EXFxuamF3Ym9uZS9EU01HXFxuamF3YnJlYWtlci9NU1xcbmphd2xpbmUvU1xcbmpheS9TTVxcbmpheWJpcmQvU01cXG5qYXl3YWxrL0RSU1pHXFxuamF5d2Fsa2VyL01cXG5qYXl3YWxraW5nL01cXG5qYXp6L01EU0dcXG5qYXp6eS9UUlxcbmpjdFxcbmplYWxvdXMvWVxcbmplYWxvdXN5L1NNXFxuamVhbi9NU1xcbmplYW5zL01cXG5qZWVwL01TXFxuamVlci9NRFNHXFxuamVlcmluZy9NWVxcbmplZXpcXG5qZWp1bmFcXG5qZWp1bmVcXG5qZWp1bnVtL01cXG5qZWxsL0RTR1xcbmplbGxvL1NcXG5qZWxseS9HRFNNXFxuamVsbHliZWFuL01TXFxuamVsbHlmaXNoL01TXFxuamVsbHlsaWtlXFxuamVsbHlyb2xsL1NNXFxuamVtbXkvR0RTXFxuamVubmV0L01TXFxuamVubnkvU01cXG5qZW9wYXJkaXplL0dEU1xcbmplb3BhcmR5L01cXG5qZXJlbWlhZC9NU1xcbmplcmsvTURTR1xcbmplcmtpbHlcXG5qZXJraW4vTVNcXG5qZXJraW5lc3MvTVxcbmplcmt3YXRlclxcbmplcmt5L1RSTVBcXG5qZXJvYm9hbS9TXFxuamVycnlidWlsdFxcbmplcnJ5Y2FuL1NcXG5qZXJzZXkvTVNcXG5qZXN0L01EUlNaR1xcbmplc3Rlci9NXFxuamVzdGluZy9ZXFxuamV0L1NNXFxuamV0bGluZXIvU01cXG5qZXRwb3J0L01TXFxuamV0c2FtL01cXG5qZXR0ZWRcXG5qZXR0aW5nXFxuamV0dGlzb24vTURTR1xcbmpldHR5L1NNXFxuamV3ZWwvU1pHTURSXFxuamV3ZWxlci9NXFxuamV3ZWxyeS9TTVxcbmpnXFxuamliL1NHTURcXG5qaWJiZWRcXG5qaWJiaW5nXFxuamliZS9NU1xcbmppZmYvTVNcXG5qaWZmeS9TTVxcbmppZydzXFxuamlnL0FTXFxuamlnZ2VkL0FcXG5qaWdnZXInc1xcbmppZ2dlci9BU0RHXFxuamlnZ2luZy9BXFxuamlnZ2xlL0RTTUdcXG5qaWdnbHlcXG5qaWdzYXcvU01ER1xcbmppaGFkL1NNXFxuamloYWRpc3QvU01cXG5qaWx0L01EU0dcXG5qaW1teS9EU01HXFxuamltc29ud2VlZC9NXFxuamluZ2xlL0RTTUdcXG5qaW5nbHlcXG5qaW5nb2lzbS9NXFxuamluZ29pc3QvU01cXG5qaW5nb2lzdGljXFxuamluay9EU0dcXG5qaW5uXFxuamlubmkvTVxcbmppbnJpa2lzaGEvU01cXG5qaW54L01EU0dcXG5qaXRuZXkvU01cXG5qaXR0ZXJidWcvTVNcXG5qaXR0ZXJidWdnZWRcXG5qaXR0ZXJidWdnZXIvTVxcbmppdHRlcmJ1Z2dpbmdcXG5qaXR0ZXJzL01cXG5qaXR0ZXJ5L1JUXFxuaml2ZS9NR0RTXFxuam9iL1NNXFxuam9iYmVkXFxuam9iYmVyL1NNXFxuam9iYmluZ1xcbmpvYmhvbGRlci9NU1xcbmpvYmxlc3MvUFxcbmpvYmxlc3NuZXNzL01cXG5qb2JzaGFyZS9TXFxuam9ic3dvcnRoXFxuam9ic3dvcnRoc1xcbmpvY2svTVNcXG5qb2NrZXkvU0dNRFxcbmpvY2tzdHJhcC9NU1xcbmpvY29zZS9QWVxcbmpvY29zZW5lc3MvTVxcbmpvY29zaXR5L01cXG5qb2N1bGFyL1lcXG5qb2N1bGFyaXR5L01cXG5qb2N1bmQvWVxcbmpvY3VuZGl0eS9NXFxuam9kaHB1cnMvTVxcbmpvZXkvU1xcbmpvZy9TTVxcbmpvZ2dlZFxcbmpvZ2dlci9TTVxcbmpvZ2dpbmcvTVxcbmpvZ2dsZS9EU01HXFxuam9obi9NU1xcbmpvaG5ueS9TTVxcbmpvaG5ueWNha2UvTVNcXG5qb2luJ3NcXG5qb2luL0FGRFNHXFxuam9pbmVyL0ZNU1xcbmpvaW5lcnkvTVxcbmpvaW50J3NcXG5qb2ludC9FR1NEXFxuam9pbnRseS9GXFxuam9pc3QvU01cXG5qb2pvYmFcXG5qb2tlL01aR0RSU1xcbmpva2VyL01cXG5qb2tleVxcbmpva2llclxcbmpva2llc3RcXG5qb2tpbmcvWVxcbmpvbGxpZmljYXRpb24vU01cXG5qb2xsaWx5XFxuam9sbGluZXNzL01cXG5qb2xsaXR5L01cXG5qb2xseS9UR1BEUlNNXFxuam9sdC9NRFJTWkdcXG5qb2x0ZXIvTVxcbmpvbnF1aWwvU01cXG5qb3NoL01EUlNaR1xcbmpvc2hlci9NXFxuam9zdGxlL01HRFNcXG5qb3QvU01cXG5qb3R0ZWRcXG5qb3R0ZXIvTVNcXG5qb3R0aW5nL01TXFxuam91bGUvU01cXG5qb3VuY2UvTUdEU1xcbmpvdW5jeVxcbmpvdXJuYWwvTVNcXG5qb3VybmFsZXNlL01cXG5qb3VybmFsaXNtL01cXG5qb3VybmFsaXN0L1NNXFxuam91cm5hbGlzdGljXFxuam91cm5leS9aR01EUlNcXG5qb3VybmV5ZXIvTVxcbmpvdXJuZXltYW4vTVxcbmpvdXJuZXltZW5cXG5qb3Vybm8vU1xcbmpvdXN0L1NaR01EUlxcbmpvdXN0ZXIvTVxcbmpvdXN0aW5nL01cXG5qb3ZpYWwvWVxcbmpvdmlhbGl0eS9NXFxuam93bC9NU1xcbmpvd2x5L1RSXFxuam95L1NHTURcXG5qb3lmdWwvWVBcXG5qb3lmdWxsZXJcXG5qb3lmdWxsZXN0XFxuam95ZnVsbmVzcy9NXFxuam95bGVzcy9QWVxcbmpveWxlc3NuZXNzL01cXG5qb3lvdXMvWVBcXG5qb3lvdXNuZXNzL01cXG5qb3lyaWRkZW5cXG5qb3lyaWRlL1JTTVpHXFxuam95cmlkZXIvTVxcbmpveXJpZGluZy9NXFxuam95cm9kZVxcbmpveXN0aWNrL1NNXFxuanJcXG5qdWJpbGFudC9ZXFxuanViaWxhdGlvbi9NXFxuanViaWxlZS9TTVxcbmp1ZGRlci9HRFNcXG5qdWRnZSdzXFxuanVkZ2UvQURTR1xcbmp1ZGdlc2hpcC9NXFxuanVkZ21lbnQvU01cXG5qdWRnbWVudGFsL1lcXG5qdWRpY2F0b3J5L1NNXFxuanVkaWNhdHVyZS9NXFxuanVkaWNpYWwvWVxcbmp1ZGljaWFyeS9TTVxcbmp1ZGljaW91cy9JWVBcXG5qdWRpY2lvdXNuZXNzL0lNXFxuanVkby9NXFxuanVnL1NNXFxuanVnZnVsL01TXFxuanVnZ2VkXFxuanVnZ2VybmF1dC9TTVxcbmp1Z2dpbmdcXG5qdWdnbGUvTVpHRFJTXFxuanVnZ2xlci9NXFxuanVnZ2xlcnkvTVxcbmp1Z3VsYXIvU01cXG5qdWljZS9EUlNNWkdcXG5qdWljZXIvTVxcbmp1aWNpbHlcXG5qdWljaW5lc3MvTVxcbmp1aWN5L1BUUlxcbmp1aml0c3UvTVxcbmp1anViZS9NU1xcbmp1a2Vib3gvTVNcXG5qdWxlcC9TTVxcbmp1bGllbm5lXFxuanVtYmxlL01HRFNcXG5qdW1iby9TTVxcbmp1bXAvTURSU1pHXFxuanVtcGVyL01cXG5qdW1waWx5XFxuanVtcGluZXNzL01cXG5qdW1wc3VpdC9NU1xcbmp1bXB5L1RSUFxcbmp1blxcbmp1bmNvL1NNXFxuanVuY3Rpb24vRklTTVxcbmp1bmN0dXJlL0ZNU1xcbmp1bmdsZS9NU1xcbmp1bmlvci9NU1xcbmp1bmlwZXIvU01cXG5qdW5rL01EUlNaR1xcbmp1bmtlci9NXFxuanVua2V0L01EU0dcXG5qdW5rZXRlZXIvTVNcXG5qdW5raWUvTVRSU1xcbmp1bmt5YXJkL01TXFxuanVudGEvU01cXG5qdXJpZGljXFxuanVyaWRpY2FsL1lcXG5qdXJpc2RpY3Rpb24vU01cXG5qdXJpc2RpY3Rpb25hbFxcbmp1cmlzcHJ1ZGVuY2UvTVxcbmp1cmlzdC9NU1xcbmp1cmlzdGljXFxuanVyb3IvU01cXG5qdXJ5L0lTTVxcbmp1cnltYW4vTVxcbmp1cnltZW5cXG5qdXJ5d29tYW4vTVxcbmp1cnl3b21lblxcbmp1c3QvUllQVFxcbmp1c3RpY2UvSU1TXFxuanVzdGlmaWFibGUvVVxcbmp1c3RpZmlhYmx5L1VcXG5qdXN0aWZpY2F0aW9uL01cXG5qdXN0aWZpZWQvVVxcbmp1c3RpZnkvWEdEU05cXG5qdXN0bmVzcy9NXFxuanV0L1NNXFxuanV0ZS9NXFxuanV0dGVkXFxuanV0dGluZ1xcbmp1dmVuaWxlL1NNXFxuanV4dGFwb3NlL0RTR1xcbmp1eHRhcG9zaXRpb24vU01cXG5rL0lGR1NcXG5rSHpcXG5rV1xcbmtXaFxcbmthYmJhbGFoXFxua2Fib29tXFxua2FidWtpL01cXG5rYWRkaXNoL01TXFxua2FmZmVla2xhdGNoL01TXFxua2FmZmVla2xhdHNjaC9NU1xcbmthaHVuYS9TXFxua2Fpc2VyL01TXFxua2FsZS9NXFxua2FsZWlkb3Njb3BlL01TXFxua2FsZWlkb3Njb3BpY1xcbmthbGVpZG9zY29waWNhbGx5XFxua2FtaWthemUvTVNcXG5rYW5hXFxua2FuZ2Fyb28vTVNcXG5rYW5qaVxcbmthb2xpbi9NXFxua2Fwb2svTVxcbmthcHBhL1NNXFxua2FwdXRcXG5rYXJha3VsL01cXG5rYXJhb2tlL01TXFxua2FyYXQvU01cXG5rYXJhdGUvTVxcbmthcm1hL01cXG5rYXJtaWNcXG5rYXJ0L01TXFxua2F0YWthbmFcXG5rYXR5ZGlkL1NNXFxua2F5YWsvU01ER1xcbmtheWFraW5nL01cXG5rYXlvL01EU0dcXG5rYXpvby9TTVxcbmtjXFxua2ViYWIvU01cXG5rZWRnZXJlZVxcbmtlZWwvTURTR1xcbmtlZWxoYXVsL0RHU1xcbmtlZW4vTURSWVNUR1BcXG5rZWVubmVzcy9NXFxua2VlcC9NUlNaR1xcbmtlZXBlci9NXFxua2VlcGluZy9NXFxua2VlcHNha2UvTVNcXG5rZWcvU01cXG5rZWxwL01cXG5rZWx2aW4vU01cXG5rZW4vU01cXG5rZW5uZWRcXG5rZW5uZWwvU0dNRFxcbmtlbm5pbmdcXG5rZW5vL01cXG5rZXBpL01TXFxua2VwdFxcbmtlcmF0aW4vTVxcbmtlcmF0aXRpc1xcbmtlcmJzaWRlXFxua2VyY2hpZWYvU01cXG5rZXJmdWZmbGUvU1xcbmtlcm5lbC9TTVxcbmtlcm9zZW5lL01cXG5rZXN0cmVsL01TXFxua2V0Y2gvTVNcXG5rZXRjaHVwL01cXG5rZXRvXFxua2V0b2dlbmljXFxua2V0b25lL1NcXG5rZXR0bGUvU01cXG5rZXR0bGVkcnVtL1NNXFxua2V5L1NHTURcXG5rZXliaW5kaW5nL1NcXG5rZXlib2FyZC9aR1NNRFJcXG5rZXlib2FyZGVyL01cXG5rZXlib2FyZGlzdC9TTVxcbmtleWhvbGUvTVNcXG5rZXlub3RlL01aR0RSU1xcbmtleW5vdGVyL01cXG5rZXlwYWQvU01cXG5rZXlwdW5jaC9aR01EUlNcXG5rZXlwdW5jaGVyL01cXG5rZXlzdG9uZS9NU1xcbmtleXN0cm9rZS9TTVxcbmtleXdvcmQvTVNcXG5rZ1xcbmtoYWtpL1NNXFxua2hhbi9NU1xcbmtpYmJsZS9EU01HXFxua2liYnV0ei9NU1xcbmtpYmJ1dHppbVxcbmtpYml0ei9aR0RSU1xcbmtpYml0emVyL01cXG5raWJvc2gvTVxcbmtpY2svTURSU1pHXFxua2lja2JhY2svU01cXG5raWNrYmFsbC9NXFxua2lja2JveGluZ1xcbmtpY2tlci9NXFxua2lja29mZi9NU1xcbmtpY2tzdGFuZC9NU1xcbmtpY2t5L1JUXFxua2lkL1NNXFxua2lkZGVkXFxua2lkZGVyL1NNXFxua2lkZGllL1NNXFxua2lkZGluZ1xcbmtpZGRpc2hcXG5raWRkby9TTVxcbmtpZG5hcC9TXFxua2lkbmFwcGVkXFxua2lkbmFwcGVyL01TXFxua2lkbmFwcGluZy9NU1xcbmtpZG5leS9TTVxcbmtpZHNraW4vTVxcbmtpZWxiYXNhL01TXFxua2llbGJhc2lcXG5raWtlL1NcXG5raWxsL0pNRFJTWkdcXG5raWxsZGVlci9TTVxcbmtpbGxlci9NXFxua2lsbGluZy9NXFxua2lsbGpveS9TTVxcbmtpbG4vTURTR1xcbmtpbG8vTVNcXG5raWxvYnl0ZS9TTVxcbmtpbG9jb3Vsb21iL1NcXG5raWxvY3ljbGUvU01cXG5raWxvZ3JhbS9TTVxcbmtpbG9oZXJ0ei9NXFxua2lsb2pvdWxlL1NcXG5raWxvbGl0ZXIvTVNcXG5raWxvbWV0ZXIvTVNcXG5raWxvbmV3dG9uL1NcXG5raWxvcGFzY2FsL1NcXG5raWxvdG9uL1NNXFxua2lsb3ZvbHQvU1xcbmtpbG93YXR0L1NNXFxua2lsdC9NRFJTXFxua2lsdGVyL01cXG5raW1vbm8vTVNcXG5raW4vTVxcbmtpbmFzZVxcbmtpbmQnc1xcbmtpbmQvVVBSWVRcXG5raW5kYVxcbmtpbmRlcmdhcnRlbi9NU1xcbmtpbmRlcmdhcnRuZXIvU01cXG5raW5kaGVhcnRlZC9QWVxcbmtpbmRoZWFydGVkbmVzcy9NXFxua2luZGxlL0FHRFNcXG5raW5kbGluZXNzL01cXG5raW5kbGluZy9NXFxua2luZGx5L1VSVFxcbmtpbmRuZXNzL1VNXFxua2luZG5lc3Nlc1xcbmtpbmRyZWQvTVxcbmtpbmRzXFxua2luZS9TXFxua2luZW1hdGljL1NcXG5raW5lbWF0aWNzL01cXG5raW5ldGljL1NcXG5raW5ldGljYWxseVxcbmtpbmV0aWNzL01cXG5raW5mb2xrL1NNXFxua2luZm9sa3MvTVxcbmtpbmcvTVlTXFxua2luZ2RvbS9TTVxcbmtpbmdmaXNoZXIvU01cXG5raW5nbHkvUlRcXG5raW5nbWFrZXIvU1xcbmtpbmdwaW4vU01cXG5raW5nc2hpcC9NXFxua2luay9NRFNHXFxua2lua2lseVxcbmtpbmtpbmVzcy9NXFxua2lua3kvVFBSXFxua2luc2ZvbGsvTVxcbmtpbnNoaXAvTVxcbmtpbnNtYW4vTVxcbmtpbnNtZW5cXG5raW5zd29tYW4vTVxcbmtpbnN3b21lblxcbmtpb3NrL1NNXFxua2lwL1NNXFxua2lwcGVkXFxua2lwcGVyL01ER1NcXG5raXBwaW5nXFxua2lyc2NoL01TXFxua2lzbWV0L01cXG5raXNzL01EUlNCWkdcXG5raXNzZXIvTVxcbmtpc3NvZmYvU01cXG5raXNzb2dyYW0vU1xcbmtpdC9TR01EXFxua2l0Y2hlbi9TTVxcbmtpdGNoZW5ldHRlL01TXFxua2l0Y2hlbndhcmUvTVxcbmtpdGUvTVNcXG5raXRoL01cXG5raXRzY2gvTVxcbmtpdHNjaHlcXG5raXR0ZWRcXG5raXR0ZW4vTVNcXG5raXR0ZW5pc2hcXG5raXR0aW5nXFxua2l0dHkvU01cXG5raXdpL01TXFxua2l3aWZydWl0L01TXFxua2xcXG5rbGF4b24vU1xcbmtsZXB0b2NyYWN5XFxua2xlcHRvbWFuaWEvTVxcbmtsZXB0b21hbmlhYy9TTVxcbmtsdWRnZS9HRFNcXG5rbHVnZS9EU1xcbmtsdXR6L01TXFxua2x1dHppbmVzcy9NXFxua2x1dHp5L1RSUFxcbmttXFxua25cXG5rbmFjay9TWk1SXFxua25hY2tlci9HRFxcbmtuYXBzYWNrL01TXFxua25hdmUvU01cXG5rbmF2ZXJ5L01cXG5rbmF2aXNoL1lcXG5rbmVhZC9TWkdEUlxcbmtuZWFkZXIvTVxcbmtuZWUvTURTXFxua25lZWNhcC9TTVxcbmtuZWVjYXBwZWRcXG5rbmVlY2FwcGluZ1xcbmtuZWVpbmdcXG5rbmVlbC9TR1xcbmtuZWxsL1NHTURcXG5rbmVsdFxcbmtuZXdcXG5rbmlja2VyL1NcXG5rbmlja2VyYm9ja2Vycy9NXFxua25pY2tlcnMvTVxcbmtuaWNra25hY2svTVNcXG5rbmlmZS9EU01HXFxua25pZ2h0L01EWVNHXFxua25pZ2h0aG9vZC9NU1xcbmtuaWdodGxpbmVzcy9NXFxua25pc2gvTVNcXG5rbml0L01TXFxua25pdHRlZFxcbmtuaXR0ZXIvU01cXG5rbml0dGluZy9NXFxua25pdHdlYXIvTVxcbmtuaXZlc1xcbmtub2IvTVNcXG5rbm9iYmx5XFxua25vYmJ5L1RSXFxua25vY2svU1pHTURSXFxua25vY2thYm91dFxcbmtub2NrZG93bi9TTVxcbmtub2NrZXIvTVxcbmtub2Nrb2ZmL1NNXFxua25vY2tvdXQvU01cXG5rbm9ja3d1cnN0L1NNXFxua25vbGwvU01cXG5rbm90L01TXFxua25vdGhvbGUvU01cXG5rbm90dGVkXFxua25vdHRpbmdcXG5rbm90dHkvVFJcXG5rbm93L1NCXFxua25vd2luZy9VWVNcXG5rbm93bGVkZ2UvTVxcbmtub3dsZWRnZWFibGVcXG5rbm93bGVkZ2VhYmx5XFxua25vd25cXG5rbnVja2xlL0RTTUdcXG5rbnVja2xlZHVzdGVyL1NcXG5rbnVja2xlaGVhZC9NU1xcbmtudXJsL1NHTURcXG5rb2FsYS9TTVxcbmtvYW4vU1xcbmtvaGxcXG5rb2hscmFiaS9NXFxua29obHJhYmllc1xcbmtvbGEvTVNcXG5rb29rL01TXFxua29va2FidXJyYS9TTVxcbmtvb2tpbmVzcy9NXFxua29va3kvVFBSXFxua29wZWNrL01TXFxua29ybWFcXG5rb3NoZXIvRFNHXFxua293dG93L0dNRFNcXG5rcGhcXG5rcmFhbC9TTVxcbmtyYXV0L1NNIVxcbmtyaWxsL01cXG5rcm9uYS9NXFxua3JvbmUvUk1cXG5rcm9ub3JcXG5rcm9udXJcXG5rcnlwdG9uL01cXG5rdFxcbmt1Y2hlbi9TTVxcbmt1ZG9zL01cXG5rdWR6dS9TTVxcbmt1bXF1YXQvTVNcXG5rdmV0Y2gvWkdNRFJTXFxua3ZldGNoZXIvTVxcbmt3XFxubC9TRFhUR0pcXG5sYS9NXFxubGFiL1NNXFxubGFiZWwnc1xcbmxhYmVsL0FTREdcXG5sYWJlbGVkL1VcXG5sYWJpYVxcbmxhYmlhbC9TTVxcbmxhYmlsZVxcbmxhYml1bS9NXFxubGFib3IvU01EUlpHXFxubGFib3JhdG9yeS9TTVxcbmxhYm9yZXIvTVxcbmxhYm9yaW91cy9QWVxcbmxhYm9yaW91c25lc3MvTVxcbmxhYm9yc2F2aW5nXFxubGFidXJudW0vTVNcXG5sYWJ5cmludGgvTVxcbmxhYnlyaW50aGluZVxcbmxhYnlyaW50aHNcXG5sYWMvTVxcbmxhY2Unc1xcbmxhY2UvVUdEU1xcbmxhY2VyYXRlL0RTR05YXFxubGFjZXJhdGlvbi9NXFxubGFjZXdpbmcvU01cXG5sYWNld29yay9NXFxubGFjaHJ5bWFsXFxubGFjaHJ5bW9zZVxcbmxhY2svTURTR1xcbmxhY2thZGFpc2ljYWwvWVxcbmxhY2tleS9TTVxcbmxhY2tsdXN0ZXJcXG5sYWNvbmljXFxubGFjb25pY2FsbHlcXG5sYWNxdWVyL0dNRFNcXG5sYWNyb3NzZS9NXFxubGFjdGF0ZS9HTkRTXFxubGFjdGF0aW9uL01cXG5sYWN0ZWFsXFxubGFjdGljXFxubGFjdG9zZS9NXFxubGFjdW5hL01cXG5sYWN1bmFlXFxubGFjeS9SVFxcbmxhZC9TR01ETkpcXG5sYWRkZXIvR1NNRFxcbmxhZGRpZS9TTVxcbmxhZGRpc2gvUFxcbmxhZGUvU1xcbmxhZGVuL1VcXG5sYWRpbmcvTVxcbmxhZGxlL0RTTUdcXG5sYWR5L1NNXFxubGFkeWJpcmQvU01cXG5sYWR5YnVnL01TXFxubGFkeWZpbmdlci9NU1xcbmxhZHlsaWtlL1VcXG5sYWR5bG92ZS9NU1xcbmxhZHlzaGlwL01TXFxubGFldHJpbGUvTVxcbmxhZy9TWk1SXFxubGFnZXIvTVxcbmxhZ2dhcmQvTVlTXFxubGFnZ2VkXFxubGFnZ2luZy9NXFxubGFnbmlhcHBlL1NNXFxubGFnb29uL1NNXFxubGFpZC9JQVxcbmxhaW5cXG5sYWlyL01TXFxubGFpcmQvU01cXG5sYWl0eS9NXFxubGFrZS9NU1xcbmxha2Vmcm9udC9TXFxubGFrZXNpZGVcXG5sYW0vU01cXG5sYW1hL01TXFxubGFtYXNlcnkvU01cXG5sYW1iL01EU0dcXG5sYW1iYWRhL01TXFxubGFtYmFzdGUvR0RTXFxubGFtYmRhL1NNXFxubGFtYmVuY3kvTVxcbmxhbWJlbnQvWVxcbmxhbWJraW4vU01cXG5sYW1ic2tpbi9TTVxcbmxhbWJzd29vbFxcbmxhbWUvTVlaVEdEUlNQXFxubGFtZWJyYWluL01EU1xcbmxhbWVuZXNzL01cXG5sYW1lbnQvQlNNREdcXG5sYW1lbnRhYmx5XFxubGFtZW50YXRpb24vTVNcXG5sYW1pbmEvTVxcbmxhbWluYWVcXG5sYW1pbmFyXFxubGFtaW5hdGUvTUdORFNcXG5sYW1pbmF0aW9uL01cXG5sYW1tZWRcXG5sYW1taW5nXFxubGFtcC9NU1xcbmxhbXBibGFjay9NXFxubGFtcGxpZ2h0L01SWlxcbmxhbXBsaWdodGVyL01cXG5sYW1wb29uL1NHTURcXG5sYW1wcG9zdC9TTVxcbmxhbXByZXkvTVNcXG5sYW1wc2hhZGUvU01cXG5sYW5haS9TTVxcbmxhbmNlL0RSU01aR1xcbmxhbmNlci9NXFxubGFuY2V0L1NNXFxubGFuZC9NRFJTR0pcXG5sYW5kYXUvU01cXG5sYW5kZmFsbC9NU1xcbmxhbmRmaWxsL01TXFxubGFuZGhvbGRlci9TTVxcbmxhbmRob2xkaW5nL01TXFxubGFuZGluZy9NXFxubGFuZGxhZHkvU01cXG5sYW5kbGVzcy9NXFxubGFuZGxpbmUvTVNcXG5sYW5kbG9ja2VkXFxubGFuZGxvcmQvTVNcXG5sYW5kbHViYmVyL01TXFxubGFuZG1hcmsvTVNcXG5sYW5kbWFzcy9NU1xcbmxhbmRtaW5lL1NcXG5sYW5kb3duZXIvTVNcXG5sYW5kb3duZXJzaGlwXFxubGFuZG93bmluZy9TTVxcbmxhbmRzY2FwZS9NWkdEUlNcXG5sYW5kc2NhcGVyL01cXG5sYW5kc2xpZFxcbmxhbmRzbGlkZS9NR1NcXG5sYW5kc2xpcC9TXFxubGFuZHNtYW4vTVxcbmxhbmRzbWVuXFxubGFuZHdhcmQvU1xcbmxhbmUvTVNcXG5sYW5ndWFnZS9NU1xcbmxhbmd1aWQvUFlcXG5sYW5ndWlkbmVzcy9NXFxubGFuZ3Vpc2gvRFNHXFxubGFuZ3Vvci9TTVxcbmxhbmd1b3JvdXMvWVxcbmxhbmsvUllUUFxcbmxhbmtpbmVzcy9NXFxubGFua25lc3MvTVxcbmxhbmt5L1JUUFxcbmxhbm9saW4vTVxcbmxhbnRlcm4vTVNcXG5sYW50aGFudW0vTVxcbmxhbnlhcmQvTVNcXG5sYXAvU01cXG5sYXBhcm9zY29waWNcXG5sYXBhcm9zY29weVxcbmxhcGFyb3RvbXlcXG5sYXBib2FyZC9TTVxcbmxhcGRvZy9TTVxcbmxhcGVsL1NNXFxubGFwaWRhcnkvU01cXG5sYXBpbi9TTVxcbmxhcHBlZFxcbmxhcHBldC9TTVxcbmxhcHBpbmdcXG5sYXBzZS9BS0dNU0RcXG5sYXB0b3AvU01cXG5sYXB3aW5nL01TXFxubGFyYm9hcmQvU01cXG5sYXJjZW5pc3QvU01cXG5sYXJjZW5vdXNcXG5sYXJjZW55L1NNXFxubGFyY2gvTVNcXG5sYXJkL01EUlNaR1xcbmxhcmRlci9NXFxubGFyZHkvUlRcXG5sYXJnZS9SU1BNWVRcXG5sYXJnZWhlYXJ0ZWRcXG5sYXJnZW5lc3MvTVxcbmxhcmdlc3MvTVxcbmxhcmdpc2hcXG5sYXJnby9TTVxcbmxhcmlhdC9TTVxcbmxhcmsvTURTR1xcbmxhcmtzcHVyL1NNXFxubGFydmEvTVxcbmxhcnZhZVxcbmxhcnZhbFxcbmxhcnluZ2VhbFxcbmxhcnluZ2VzXFxubGFyeW5naXRpcy9NXFxubGFyeW54L01cXG5sYXNhZ25hL01TXFxubGFzY2l2aW91cy9ZUFxcbmxhc2NpdmlvdXNuZXNzL01cXG5sYXNlL1pHRFJTXFxubGFzZXIvTVxcbmxhc2gvTURTR0pcXG5sYXNoaW5nL01cXG5sYXNzL01TXFxubGFzc2llL1NNXFxubGFzc2l0dWRlL01cXG5sYXNzby9TTURHXFxubGFzdC9NRFlTR1xcbmxhc3RpbmcvWVxcbmxhdC9TXFxubGF0Y2gnc1xcbmxhdGNoL1VEU0dcXG5sYXRjaGtleS9TTVxcbmxhdGUvWVRSUFxcbmxhdGVjb21lci9NU1xcbmxhdGVuY3kvTVxcbmxhdGVuZXNzL01cXG5sYXRlbnRcXG5sYXRlcmFsL01EWVNHXFxubGF0ZXN0L01cXG5sYXRleC9NXFxubGF0aC9NRFJTWkdcXG5sYXRoZS9NXFxubGF0aGVyL0dNRFxcbmxhdGhlcnlcXG5sYXRoc1xcbmxhdGljZXNcXG5sYXRpc2hcXG5sYXRpdHVkZS9NU1xcbmxhdGl0dWRpbmFsXFxubGF0aXR1ZGluYXJpYW4vTVNcXG5sYXRyaW5lL01TXFxubGF0dGUvUlNNXFxubGF0dGVyL01ZXFxubGF0dGljZS9NRFNcXG5sYXR0aWNld29yay9TTVxcbmxhdWQvTURTR0JcXG5sYXVkYWJseVxcbmxhdWRhbnVtL01cXG5sYXVkYXRvcnlcXG5sYXVnaC9CTURHXFxubGF1Z2hhYmx5XFxubGF1Z2hpbmcvTVlcXG5sYXVnaGluZ3N0b2NrL1NNXFxubGF1Z2hzXFxubGF1Z2h0ZXIvTVxcbmxhdW5jaC9BR01EU1xcbmxhdW5jaGVyL1NNXFxubGF1bmNocGFkL1NNXFxubGF1bmRlci9EUlpHU1xcbmxhdW5kZXJlci9NXFxubGF1bmRlcmV0dGUvU01cXG5sYXVuZHJlc3MvTVNcXG5sYXVuZHJvbWF0L01TXFxubGF1bmRyeS9TTVxcbmxhdW5kcnltYW4vTVxcbmxhdW5kcnltZW5cXG5sYXVuZHJ5d29tYW4vTVxcbmxhdW5kcnl3b21lblxcbmxhdXJlYXRlL01TXFxubGF1cmVhdGVzaGlwL01cXG5sYXVyZWwvU01cXG5sYXYvU0dEXFxubGF2YS9NXFxubGF2YWdlL01cXG5sYXZhbGllcmUvU01cXG5sYXZhdG9yaWFsXFxubGF2YXRvcnkvU01cXG5sYXZlL1NcXG5sYXZlbmRlci9TTVxcbmxhdmlzaC9QVEdEUlNZXFxubGF2aXNobmVzcy9NXFxubGF3L1NNXFxubGF3YnJlYWtlci9TTVxcbmxhd2JyZWFraW5nL01cXG5sYXdmdWwvVVBZXFxubGF3ZnVsbmVzcy9VTVxcbmxhd2dpdmVyL01TXFxubGF3bGVzcy9QWVxcbmxhd2xlc3NuZXNzL01cXG5sYXdtYWtlci9NU1xcbmxhd21ha2luZy9NXFxubGF3bWFuL01cXG5sYXdtZW5cXG5sYXduL01TXFxubGF3bm1vd2VyL1NNXFxubGF3cmVuY2l1bS9NXFxubGF3c3VpdC9NU1xcbmxhd3llci9TTVxcbmxheC9UUllQXFxubGF4YXRpdmUvTVNcXG5sYXhpdHkvTVxcbmxheG5lc3MvTVxcbmxheS9BSUNTR01cXG5sYXlhYm91dC9TXFxubGF5YXdheS9NXFxubGF5ZXIvQ1NNXFxubGF5ZXJlZFxcbmxheWVyaW5nL01cXG5sYXlldHRlL01TXFxubGF5bWFuL01cXG5sYXltZW5cXG5sYXlvZmYvU01cXG5sYXlvdXQvU01cXG5sYXlvdmVyL01TXFxubGF5cGVvcGxlXFxubGF5cGVyc29uL01TXFxubGF5dXAvU01cXG5sYXl3b21hbi9NXFxubGF5d29tZW5cXG5sYXplL01HRFNcXG5sYXppbHlcXG5sYXppbmVzcy9NXFxubGF6eS9EUlNUR1BcXG5sYXp5Ym9uZXMvTVxcbmxiL1NcXG5sYndcXG5sZWEvU01cXG5sZWFjaC9EU0dcXG5sZWFkL01ETlJTWkdcXG5sZWFkZXIvTVxcbmxlYWRlcmxlc3NcXG5sZWFkZXJzaGlwL1NNXFxubGVhZGluZy9NXFxubGVhZi9NRFNHXFxubGVhZmFnZS9NXFxubGVhZmxlc3NcXG5sZWFmbGV0L0dNRFNcXG5sZWFmc3RhbGsvTVNcXG5sZWFmeS9SVFxcbmxlYWd1ZS9EU01HXFxubGVhay9NRFNHXFxubGVha2FnZS9NU1xcbmxlYWtpbmVzcy9NXFxubGVha3kvUFJUXFxubGVhbi9NRFJTVEdKUFxcbmxlYW5pbmcvTVxcbmxlYW5uZXNzL01cXG5sZWFwL01EUlNaR1xcbmxlYXBlci9NXFxubGVhcGZyb2cvTVNcXG5sZWFwZnJvZ2dlZFxcbmxlYXBmcm9nZ2luZ1xcbmxlYXB0XFxubGVhcm4vQVVHRFNcXG5sZWFybmFiaWxpdHlcXG5sZWFybmFibGVcXG5sZWFybmVkbHlcXG5sZWFybmVyL01TXFxubGVhcm5pbmcnc1xcbmxlYXNlL0FEU01HXFxubGVhc2ViYWNrL1NNXFxubGVhc2Vob2xkL01SU1pcXG5sZWFzZWhvbGRlci9NXFxubGVhc2VyL1NNXFxubGVhc2gnc1xcbmxlYXNoL1VEU0dcXG5sZWFzdC9NXFxubGVhc3R3aXNlXFxubGVhdGhlci9NU1xcbmxlYXRoZXJldHRlL01cXG5sZWF0aGVybmVjay9NU1xcbmxlYXRoZXJ5XFxubGVhdmUvRFJTTVpHSlxcbmxlYXZlbi9TR01EXFxubGVhdmVuZWQvVVxcbmxlYXZlbmluZy9NXFxubGVhdmVyL01cXG5sZWF2aW5ncy9NXFxubGVjaC9NRFJTWkdcXG5sZWNoZXIvTVxcbmxlY2hlcm91cy9QWVxcbmxlY2hlcm91c25lc3MvTVxcbmxlY2hlcnkvTVxcbmxlY2l0aGluL01cXG5sZWN0ZXJuL01TXFxubGVjdHVyZS9NWkdEUlNcXG5sZWN0dXJlci9NXFxubGVjdHVyZXNoaXAvU01cXG5sZWRnZS9SU01aXFxubGVkZ2VyL01cXG5sZWUvUlNNWlxcbmxlZWNoL01EU0dcXG5sZWVrL01TXFxubGVlci9NREdcXG5sZWVyaW5lc3MvTVxcbmxlZXJ5L1JQVFxcbmxlZXdhcmQvU01cXG5sZWV3YXkvTVxcbmxlZnQvTVJTVFxcbmxlZnRpc20vTVxcbmxlZnRpc3QvU01cXG5sZWZ0bW9zdFxcbmxlZnRvdmVyL1NNXFxubGVmdHdhcmQvU1xcbmxlZnR5L1NNXFxubGVnL1NNXFxubGVnYWN5L1NNXFxubGVnYWwvU01ZXFxubGVnYWxlc2UvTVxcbmxlZ2FsaXNtL01TXFxubGVnYWxpc3RpY1xcbmxlZ2FsaXN0aWNhbGx5XFxubGVnYWxpdHkvU01cXG5sZWdhbGl6YXRpb24vTVxcbmxlZ2FsaXplL0dEU1xcbmxlZ2F0ZS9DWE1OU1xcbmxlZ2F0ZWUvTVNcXG5sZWdhdGlvbidzL0FDXFxubGVnYXRvL1NNXFxubGVnZW5kL1NNXFxubGVnZW5kYXJpbHlcXG5sZWdlbmRhcnlcXG5sZWdlcmRlbWFpbi9NXFxubGVnZ2VkXFxubGVnZ2luZXNzL01cXG5sZWdnaW5nL01TXFxubGVnZ3kvUlBUXFxubGVnaG9ybi9NU1xcbmxlZ2liaWxpdHkvTVxcbmxlZ2libGVcXG5sZWdpYmx5XFxubGVnaW9uL1NNXFxubGVnaW9uYXJ5L1NNXFxubGVnaW9ubmFpcmUvU01cXG5sZWdpc2xhdGUvRFNHTlZcXG5sZWdpc2xhdGlvbi9NXFxubGVnaXNsYXRpdmUvWVxcbmxlZ2lzbGF0b3IvTVNcXG5sZWdpc2xhdHVyZS9TTVxcbmxlZ2l0XFxubGVnaXRpbWFjeS9NXFxubGVnaXRpbWF0ZS9EU1lHXFxubGVnaXRpbWF0aXplL0dEU1xcbmxlZ2l0aW1pemF0aW9uL01cXG5sZWdpdGltaXplL0RTR1xcbmxlZ2xlc3NcXG5sZWdtYW4vTVxcbmxlZ21lblxcbmxlZ3Jvb20vU01cXG5sZWd1bWUvTVNcXG5sZWd1bWlub3VzXFxubGVnd2FybWVyL1NcXG5sZWd3b3JrL01cXG5sZWkvU01cXG5sZWlzdXJlL0RNWVxcbmxlaXN1cmVsaW5lc3MvTVxcbmxlaXN1cmV3ZWFyL01cXG5sZWl0bW90aWYvTVNcXG5sZWl0bW90aXYvTVNcXG5sZW1tYS9TXFxubGVtbWUvSkdcXG5sZW1taW5nL01cXG5sZW1vbi9TTVxcbmxlbW9uYWRlL1NNXFxubGVtb25ncmFzc1xcbmxlbW9ueVxcbmxlbXVyL1NNXFxubGVuZC9SU1pHXFxubGVuZGVyL01cXG5sZW5ndGgvTU5YXFxubGVuZ3RoZW4vR0RcXG5sZW5ndGhpbHlcXG5sZW5ndGhpbmVzcy9NXFxubGVuZ3Roc1xcbmxlbmd0aHdpc2VcXG5sZW5ndGh5L1BSVFxcbmxlbmllbmNlL01cXG5sZW5pZW5jeS9NXFxubGVuaWVudC9ZXFxubGVuaXRpdmVcXG5sZW5zL01TXFxubGVudFxcbmxlbnRpbC9NU1xcbmxlbnRvXFxubGVvbmluZVxcbmxlb3BhcmQvU01cXG5sZW9wYXJkZXNzL01TXFxubGVvdGFyZC9TTVxcbmxlcGVyL1NNXFxubGVwcmVjaGF1bi9NU1xcbmxlcHJvc3kvTVxcbmxlcHJvdXNcXG5sZXB0YVxcbmxlcHRvbi9NU1xcbmxlc2JpYW4vU01cXG5sZXNiaWFuaXNtL01cXG5sZXNpb24vTVNcXG5sZXNzL01OUlhcXG5sZXNzZWUvTVNcXG5sZXNzZW4vR0RcXG5sZXNzb24vTVNcXG5sZXNzb3IvTVNcXG5sZXQvSVNNXFxubGV0ZG93bi9TTVxcbmxldGhhbC9ZXFxubGV0aGFyZ2ljXFxubGV0aGFyZ2ljYWxseVxcbmxldGhhcmd5L01cXG5sZXR0ZXIvWkdNRFJTXFxubGV0dGVyYm9tYi9TXFxubGV0dGVyYm94L1NcXG5sZXR0ZXJlZC9VXFxubGV0dGVyZXIvTVxcbmxldHRlcmhlYWQvTVNcXG5sZXR0ZXJpbmcvTVxcbmxldHRlcnByZXNzL01cXG5sZXR0aW5nL1NcXG5sZXR0dWNlL01TXFxubGV0dXAvU01cXG5sZXVjaW5lXFxubGV1Y290b215L1NcXG5sZXVrZW1pYS9NXFxubGV1a2VtaWMvU01cXG5sZXVrb2N5dGUvTVNcXG5sZXZlZS9TTVxcbmxldmVsL1BTWkdNRFJZXFxubGV2ZWxlci9NXFxubGV2ZWxoZWFkZWQvUFxcbmxldmVsaGVhZGVkbmVzcy9NXFxubGV2ZWxuZXNzL01cXG5sZXZlci9TR01EXFxubGV2ZXJhZ2Unc1xcbmxldmVyYWdlL0NEU0dcXG5sZXZpYXRoYW4vTVNcXG5sZXZpZXIvTVxcbmxldml0YXRlL0RTR05cXG5sZXZpdGF0aW9uL01cXG5sZXZpdHkvTVxcbmxldnkvRFJTTVpHXFxubGV3ZC9SWVBUXFxubGV3ZG5lc3MvTVxcbmxleGVyL1NcXG5sZXhpY2FsXFxubGV4aWNvZ3JhcGhlci9NU1xcbmxleGljb2dyYXBoaWNcXG5sZXhpY29ncmFwaGljYWxcXG5sZXhpY29ncmFwaHkvTVxcbmxleGljb24vU01cXG5sZXhpc1xcbmxnXFxubGlhYmlsaXRpZXNcXG5saWFiaWxpdHkvQU1cXG5saWFibGUvQVxcbmxpYWlzZS9HRFNcXG5saWFpc29uL01TXFxubGlhci9NU1xcbmxpYi9NXFxubGliYXRpb24vU01cXG5saWJiZXIvTVNcXG5saWJlbC9TWkdNRFJcXG5saWJlbGVyL01cXG5saWJlbG91c1xcbmxpYmVyYWwvTVlQU1xcbmxpYmVyYWxpc20vTVxcbmxpYmVyYWxpdHkvTVxcbmxpYmVyYWxpemF0aW9uL1NNXFxubGliZXJhbGl6ZS9HRFNcXG5saWJlcmFsbmVzcy9NXFxubGliZXJhdGUvQ0RTR05cXG5saWJlcmF0aW9uL0NNXFxubGliZXJhdG9yL01TXFxubGliZXJ0YXJpYW4vU01cXG5saWJlcnRpbmUvTVNcXG5saWJlcnR5L1NNXFxubGliaWRpbmFsXFxubGliaWRpbm91c1xcbmxpYmlkby9NU1xcbmxpYnJhcmlhbi9NU1xcbmxpYnJhcmlhbnNoaXBcXG5saWJyYXJ5L1NNXFxubGlicmV0dGlzdC9NU1xcbmxpYnJldHRvL1NNXFxubGljZVxcbmxpY2Vuc2UvTUdEU1xcbmxpY2Vuc2VkL1VcXG5saWNlbnNlZS9NU1xcbmxpY2VudGlhdGUvU01cXG5saWNlbnRpb3VzL1lQXFxubGljZW50aW91c25lc3MvTVxcbmxpY2hlbi9NU1xcbmxpY2l0L1lcXG5saWNrL01ESlNHXFxubGlja2luZy9NXFxubGljb3JpY2UvU01cXG5saWQvU01cXG5saWRkZWRcXG5saWRsZXNzXFxubGlkby9NU1xcbmxpZS9EU01cXG5saWVkL01SXFxubGllZi9SVFxcbmxpZWdlL1NNXFxubGllbi9NU1xcbmxpZXUvTVxcbmxpZXV0ZW5hbmN5L01cXG5saWV1dGVuYW50L01TXFxubGlmZS9NWlJcXG5saWZlYmVsdC9TXFxubGlmZWJsb29kL01cXG5saWZlYm9hdC9NU1xcbmxpZmVidW95L01TXFxubGlmZWZvcm1zXFxubGlmZWd1YXJkL1NNXFxubGlmZWxlc3MvWVBcXG5saWZlbGVzc25lc3MvTVxcbmxpZmVsaWtlXFxubGlmZWxpbmUvTVNcXG5saWZlbG9uZ1xcbmxpZmVyL01cXG5saWZlc2F2ZXIvU01cXG5saWZlc2F2aW5nL01cXG5saWZlc3Bhbi9TXFxubGlmZXN0eWxlL1NNXFxubGlmZXRpbWUvTVNcXG5saWZld29yay9NU1xcbmxpZnQvTURSU1pHXFxubGlmdGVyL01cXG5saWZ0b2ZmL1NNXFxubGlnYW1lbnQvTVNcXG5saWdhdGUvR05EU1xcbmxpZ2F0aW9uL01cXG5saWdhdHVyZS9NR0RTXFxubGlnaHQncy9DXFxubGlnaHQvQ0FTVEdEXFxubGlnaHRlZC9VXFxubGlnaHRlbi9TRFJaR1xcbmxpZ2h0ZW5lci9NXFxubGlnaHRlci9TTVxcbmxpZ2h0ZmFjZS9NRFxcbmxpZ2h0aGVhZGVkXFxubGlnaHRoZWFydGVkL1lQXFxubGlnaHRoZWFydGVkbmVzcy9NXFxubGlnaHRob3VzZS9NU1xcbmxpZ2h0aW5nJ3NcXG5saWdodGx5XFxubGlnaHRuZXNzL01cXG5saWdodG5pbmcvTURTXFxubGlnaHRwcm9vZlxcbmxpZ2h0c2hpcC9NU1xcbmxpZ2h0d2VpZ2h0L1NNXFxubGlnbmVvdXNcXG5saWduaW5cXG5saWduaXRlL01cXG5saWlcXG5saWthYmlsaXR5L01cXG5saWthYmxlL1BcXG5saWthYmxlbmVzcy9NXFxubGlrZS9FTUdEU1RcXG5saWtlbGlob29kL1VNXFxubGlrZWxpaG9vZHNcXG5saWtlbGluZXNzL1VNXFxubGlrZWx5L1VQUlRcXG5saWtlbi9TR0RcXG5saWtlbmVzcy9VTVxcbmxpa2VuZXNzZXNcXG5saWtlclxcbmxpa2V3aXNlXFxubGlraW5nL01cXG5saWxhYy9TTVxcbmxpbGxpcHV0aWFuXFxubGlsby9TXFxubGlsdC9NRFNHXFxubGlseS9TTVxcbmxpbWIvTVNcXG5saW1iZXIvVURTR1xcbmxpbWJlcm5lc3MvTVxcbmxpbWJsZXNzXFxubGltYm8vU01cXG5saW1lL01HRFNcXG5saW1lYWRlL1NNXFxubGltZWxpZ2h0L01cXG5saW1lcmljay9TTVxcbmxpbWVzY2FsZVxcbmxpbWVzdG9uZS9NXFxubGltZXkvU1xcbmxpbWl0J3NcXG5saW1pdC9DU1pHRFJcXG5saW1pdGF0aW9uL0NNXFxubGltaXRhdGlvbnNcXG5saW1pdGVkL1VcXG5saW1pdGVyJ3NcXG5saW1pdGluZy9TXFxubGltaXRsZXNzL1BcXG5saW1pdGxlc3NuZXNzL01cXG5saW1uL0RTR1xcbmxpbW8vTVNcXG5saW1vdXNpbmUvTVNcXG5saW1wL01EUllTUFRHXFxubGltcGV0L01TXFxubGltcGlkL1lQXFxubGltcGlkaXR5L01cXG5saW1waWRuZXNzL01cXG5saW1wbmVzcy9NXFxubGlteS9SVFxcbmxpbmFnZS9NXFxubGluY2hwaW4vU01cXG5saW5kZW4vTVNcXG5saW5lL01aR0RSU0pcXG5saW5lYWdlL01TXFxubGluZWFsL1lcXG5saW5lYW1lbnQvU01cXG5saW5lYXIvWVxcbmxpbmVhcml0eS9NXFxubGluZWJhY2tlci9NU1xcbmxpbmVkL1VcXG5saW5lZmVlZFxcbmxpbmVtYW4vTVxcbmxpbmVtZW5cXG5saW5lbi9TTVxcbmxpbmVucy9NXFxubGluZXIvTVxcbmxpbmVzbWFuL01cXG5saW5lc21lblxcbmxpbmV1cC9NU1xcbmxpbmcvTVxcbmxpbmdlci9aR0pEUlNcXG5saW5nZXJlci9NXFxubGluZ2VyaWUvTVxcbmxpbmdlcmluZy9ZXFxubGluZ28vTVxcbmxpbmdvZXNcXG5saW5ndWFsXFxubGluZ3VpbmUvTVxcbmxpbmd1aXN0L1NNXFxubGluZ3Vpc3RpYy9TXFxubGluZ3Vpc3RpY2FsbHlcXG5saW5ndWlzdGljcy9NXFxubGluaW1lbnQvU01cXG5saW5pbmcvTVxcbmxpbmsvTURSU0dcXG5saW5rYWdlL01TXFxubGlua21hblxcbmxpbmttZW5cXG5saW5rdXAvTVNcXG5saW5uZXQvTVNcXG5saW5vXFxubGlub2xldW0vTVxcbmxpbnNlZWQvTVxcbmxpbnQnc1xcbmxpbnQvQ0RHXFxubGludGVsL01TXFxubGludHNcXG5saW50eS9UUlxcbmxpb24vTVNcXG5saW9uZXNzL01TXFxubGlvbmhlYXJ0ZWRcXG5saW9uaXphdGlvbi9NXFxubGlvbml6ZS9HRFNcXG5saXAvU01cXG5saXBpZC9TTVxcbmxpcG9zdWN0aW9uL01cXG5saXBwZWRcXG5saXBweVxcbmxpcHJlYWQvR1JTXFxubGlwcmVhZGVyL01cXG5saXByZWFkaW5nL01cXG5saXBzdGljay9NRFNHXFxubGlxXFxubGlxdWVmYWN0aW9uL01cXG5saXF1ZWZ5L0RTR1xcbmxpcXVldXIvU01cXG5saXF1aWQvTVNcXG5saXF1aWRhdGUvWEdORFNcXG5saXF1aWRhdGlvbi9NXFxubGlxdWlkYXRvci9NU1xcbmxpcXVpZGl0eS9NXFxubGlxdWlkaXplL1pHRFJTXFxubGlxdWlkaXplci9NXFxubGlxdW9yL01ER1NcXG5saXJhL01cXG5saXJlXFxubGlzbGUvTVxcbmxpc3AvTURSU1pHXFxubGlzcGVyL01cXG5saXNzb21lXFxubGlzdC9NRE5TSlhHXFxubGlzdGVkL1VcXG5saXN0ZW4vQk1EUlpHXFxubGlzdGVuZXIvTVxcbmxpc3RlcmlhXFxubGlzdGluZy9NXFxubGlzdGxlc3MvWVBcXG5saXN0bGVzc25lc3MvTVxcbmxpdC9aUlxcbmxpdGFueS9TTVxcbmxpdGNoaS9NU1xcbmxpdGVcXG5saXRlci9NXFxubGl0ZXJhY3kvTVxcbmxpdGVyYWwvU01ZUFxcbmxpdGVyYWxuZXNzL01cXG5saXRlcmFyaW5lc3MvTVxcbmxpdGVyYXJ5L1BcXG5saXRlcmF0ZS9TTVlcXG5saXRlcmF0aS9NXFxubGl0ZXJhdHVyZS9NXFxubGl0aGUvUlBZVFxcbmxpdGhlbmVzcy9NXFxubGl0aGVzb21lXFxubGl0aGl1bS9NXFxubGl0aG9ncmFwaC9NRFJaR1xcbmxpdGhvZ3JhcGhlci9NXFxubGl0aG9ncmFwaGljXFxubGl0aG9ncmFwaGljYWxseVxcbmxpdGhvZ3JhcGhzXFxubGl0aG9ncmFwaHkvTVxcbmxpdGhvc3BoZXJlL1NNXFxubGl0aWdhbnQvU01cXG5saXRpZ2F0ZS9EU0dOXFxubGl0aWdhdGlvbi9NXFxubGl0aWdhdG9yL01TXFxubGl0aWdpb3VzL1BcXG5saXRpZ2lvdXNuZXNzL01cXG5saXRtdXMvTVxcbmxpdG90ZXMvTVxcbmxpdHRlci9NRFJTWkdcXG5saXR0ZXJhdGV1ci9NU1xcbmxpdHRlcmJ1Zy9NU1xcbmxpdHRlcmVyL01cXG5saXR0bGUvTVRSUFxcbmxpdHRsZW5lc3MvTVxcbmxpdHRvcmFsL1NNXFxubGl0dXJnaWNhbC9ZXFxubGl0dXJnaXN0L1NNXFxubGl0dXJneS9TTVxcbmxpdmFiaWxpdHkvTVxcbmxpdmFibGUvVVxcbmxpdmUvQVRHRFNCXFxubGl2ZWxpaG9vZC9TTVxcbmxpdmVsaW5lc3MvTVxcbmxpdmVsb25nL1NcXG5saXZlbHkvUFJUXFxubGl2ZW4vU0dEXFxubGl2ZXInc1xcbmxpdmVyL1NcXG5saXZlcmllZFxcbmxpdmVyaXNoXFxubGl2ZXJ3b3J0L01TXFxubGl2ZXJ3dXJzdC9NXFxubGl2ZXJ5L0NTTVxcbmxpdmVyeW1hbi9DTVxcbmxpdmVyeW1lbi9DXFxubGl2ZXN0b2NrL01cXG5saXZld2FyZVxcbmxpdmlkL1lcXG5saXZpbmcvTVNcXG5saXgvS1xcbmxpemFyZC9NU1xcbmxsXFxubGxhbWEvU01cXG5sbGFuby9TTVxcbmxvXFxubG9hZCdzXFxubG9hZC9BVUdTRFxcbmxvYWRhYmxlXFxubG9hZGVyL01TXFxubG9hZGluZydzXFxubG9hZi9NRFJTWkdcXG5sb2FmZXIvTVxcbmxvYW0vTVxcbmxvYW15L1RSXFxubG9hbi9NRFJTWkdcXG5sb2FuZXIvTVxcbmxvYW5zaGFya2luZy9NXFxubG9hbndvcmQvTVNcXG5sb2F0aC9KWkdEUlNcXG5sb2F0aGVcXG5sb2F0aGVyL01cXG5sb2F0aGluZy9NXFxubG9hdGhzb21lL1BZXFxubG9hdGhzb21lbmVzcy9NXFxubG9hdmVzXFxubG9iL1NNRFxcbmxvYmFyXFxubG9iYmVkXFxubG9iYmVyL01TXFxubG9iYmluZ1xcbmxvYmJ5L0dEU01cXG5sb2JieWlzdC9NU1xcbmxvYmUvTVNcXG5sb2JvdG9taXplL0RTR1xcbmxvYm90b215L1NNXFxubG9ic3Rlci9NU1xcbmxvY2FsL1NNWVxcbmxvY2FsZS9NU1xcbmxvY2FsaXR5L1NNXFxubG9jYWxpemF0aW9uL01cXG5sb2NhbGl6ZS9EU0dcXG5sb2NhdGUvRUFHTkRTXFxubG9jYXRpb24ncy9BXFxubG9jYXRpb24vRVNNXFxubG9jYXRvci9NU1xcbmxvY2F2b3JlL1NNXFxubG9jaVxcbmxvY2svTURSU0JaR1xcbmxvY2tlci9NXFxubG9ja2V0L01TXFxubG9ja2phdy9NXFxubG9ja291dC9NU1xcbmxvY2tzbWl0aC9NXFxubG9ja3NtaXRoc1xcbmxvY2tzdGVwL01cXG5sb2NrdXAvTVNcXG5sb2NvL1NcXG5sb2NvbW90aW9uL01cXG5sb2NvbW90aXZlL01TXFxubG9jb3dlZWQvU01cXG5sb2N1bS9TXFxubG9jdXMvTVxcbmxvY3VzdC9TTVxcbmxvY3V0aW9uL01TXFxubG9kZS9NU1xcbmxvZGVzdGFyL01TXFxubG9kZXN0b25lL01TXFxubG9kZ2UvRFJTSk1aR1xcbmxvZGdlci9NXFxubG9kZ2luZy9NXFxubG9kZ2luZ3MvTVxcbmxvZnQvTURTR1xcbmxvZnRpbHlcXG5sb2Z0aW5lc3MvTVxcbmxvZnR5L1BSVFxcbmxvZy9TTVxcbmxvZ2FuYmVycnkvU01cXG5sb2dhcml0aG0vU01cXG5sb2dhcml0aG1pY1xcbmxvZ2Jvb2svU01cXG5sb2dlL01TXFxubG9nZ2VkXFxubG9nZ2VyL1NNXFxubG9nZ2VyaGVhZC9TTVxcbmxvZ2dpYS9TTVxcbmxvZ2dpbmcvTVxcbmxvZ2ljL01cXG5sb2dpY2FsL1lcXG5sb2dpY2FsaXR5L01cXG5sb2dpY2lhbi9NU1xcbmxvZ2luL1NNXFxubG9naXN0aWMvU1xcbmxvZ2lzdGljYWwvWVxcbmxvZ2lzdGljcy9NXFxubG9namFtL1NNXFxubG9nby9NU1xcbmxvZ29mZi9TTVxcbmxvZ29uL1NNXFxubG9nb3R5cGUvU01cXG5sb2dvdXQvU01cXG5sb2dyb2xsaW5nL01cXG5sb2d5L1JUXFxubG9pbi9NU1xcbmxvaW5jbG90aC9NXFxubG9pbmNsb3Roc1xcbmxvaXRlci9aR1NEUlxcbmxvaXRlcmVyL01cXG5sb2l0ZXJpbmcvTVxcbmxvbGNhdC9TTVxcbmxvbGwvRFNHXFxubG9sbGlwb3AvU01cXG5sb2xsb3AvR1NEXFxubG9sbHkvU1xcbmxvbGx5Z2FnL1NcXG5sb2xseWdhZ2dlZFxcbmxvbGx5Z2FnZ2luZ1xcbmxvbmUvWVpSXFxubG9uZWxpbmVzcy9NXFxubG9uZWx5L1BUUlxcbmxvbmVyL01cXG5sb25lc29tZS9ZUFxcbmxvbmVzb21lbmVzcy9NXFxubG9uZydzXFxubG9uZy9LRFNUR1xcbmxvbmdib2F0L01TXFxubG9uZ2Jvdy9NU1xcbmxvbmdlclxcbmxvbmdldml0eS9NXFxubG9uZ2hhaXIvTVNcXG5sb25naGFuZC9NXFxubG9uZ2hvcm4vTVNcXG5sb25naG91c2UvU1xcbmxvbmdpbmcvTVlTXFxubG9uZ2lzaFxcbmxvbmdpdHVkZS9NU1xcbmxvbmdpdHVkaW5hbC9ZXFxubG9uZ3Nob3JlbWFuL01cXG5sb25nc2hvcmVtZW5cXG5sb25nc2lnaHRlZFxcbmxvbmdzdGFuZGluZ1xcbmxvbmd0aW1lXFxubG9uZ3VldXIvU01cXG5sb25nd2F5c1xcbmxvb1xcbmxvb2ZhaC9NXFxubG9vZmFoc1xcbmxvb2svTURSU1pHXFxubG9va2FsaWtlL01TXFxubG9va2VyL01cXG5sb29rb3V0L01TXFxubG9va3VwXFxubG9vbS9NRFNHXFxubG9vbi9NU1xcbmxvb25pZS9NXFxubG9vbnkvUlNNVFxcbmxvb3AvTURTR1xcbmxvb3Bob2xlL01TXFxubG9vcHkvUlRcXG5sb29zL05SWFxcbmxvb3NlL1VEU1RHXFxubG9vc2VseVxcbmxvb3Nlbi9VR1NEXFxubG9vc2VuZXNzL01cXG5sb290L01EUlNaR1xcbmxvb3Rlci9NXFxubG9vdGluZy9NXFxubG9wL1NcXG5sb3BlL01HRFNcXG5sb3BwZWRcXG5sb3BwaW5nXFxubG9wc2lkZWQvWVBcXG5sb3BzaWRlZG5lc3MvTVxcbmxvcXVhY2lvdXMvUFlcXG5sb3F1YWNpb3VzbmVzcy9NXFxubG9xdWFjaXR5L01cXG5sb3JkL01EWVNHXFxubG9yZGxpbmVzcy9NXFxubG9yZGx5L1RQUlxcbmxvcmRzaGlwL1NNXFxubG9yZS9NXFxubG9yZ25ldHRlL1NNXFxubG9yaXMvTVNcXG5sb3JuXFxubG9ycnkvU01cXG5sb3NlL1pHUlNKXFxubG9zZXIvTVxcbmxvc2luZy9NXFxubG9zcy9NU1xcbmxvc3NsZXNzXFxubG9zdFxcbmxvdC9TTVxcbmxvdGlvbi9TTVxcbmxvdHRlcnkvU01cXG5sb3R0by9NXFxubG90dXMvTVNcXG5sb3VjaGVcXG5sb3VkL1JZVFBcXG5sb3VkaGFpbGVyL1NNXFxubG91ZG1vdXRoL01EXFxubG91ZG1vdXRoc1xcbmxvdWRuZXNzL01cXG5sb3Vkc3BlYWtlci9NU1xcbmxvdWdoXFxubG91Z2hzXFxubG91bmdlL01aR0RSU1xcbmxvdW5nZXIvTVxcbmxvdXIvRFNHXFxubG91c2Unc1xcbmxvdXNlL0NEU0dcXG5sb3VzaWx5XFxubG91c2luZXNzL01cXG5sb3VzeS9UUFJcXG5sb3V0L01TXFxubG91dGlzaC9QWVxcbmxvdXZlci9NRFNcXG5sb3ZhYmxlbmVzcy9NXFxubG92YWJseVxcbmxvdmUvTVlaR0RSU0JcXG5sb3ZlYmlyZC9TTVxcbmxvdmVjaGlsZC9NXFxubG92ZWQvVVxcbmxvdmVsZXNzXFxubG92ZWxpbmVzcy9NXFxubG92ZWxvcm5cXG5sb3ZlbHkvUlNNVFBcXG5sb3ZlbWFraW5nL01cXG5sb3Zlci9NXFxubG92ZXNpY2tcXG5sb3ZleS9TXFxubG92aW5nL1lcXG5sb3cvU1pUR01EUllQXFxubG93Ym9yblxcbmxvd2JveS9NU1xcbmxvd2Jyb3cvU01cXG5sb3dkb3duL01cXG5sb3dlci9HRFxcbmxvd2VyY2FzZS9NXFxubG93ZXJtb3N0XFxubG93aXNoXFxubG93bGFuZC9TWk1SXFxubG93bGFuZGVyL01cXG5sb3dsaWZlL1NNXFxubG93bGluZXNzL01cXG5sb3dseS9UUFJcXG5sb3duZXNzL01cXG5sb3gvTVxcbmxveWFsL0VUWVxcbmxveWFsZXJcXG5sb3lhbGlzbS9NXFxubG95YWxpc3QvU01cXG5sb3lhbHRpZXNcXG5sb3lhbHR5L0VNXFxubG96ZW5nZS9TTVxcbmx0ZFxcbmx1YXUvTVNcXG5sdWJiZXIvTVlTXFxubHViZS9NR0RTXFxubHVicmljYW50L1NNXFxubHVicmljYXRlL0RTR05cXG5sdWJyaWNhdGlvbi9NXFxubHVicmljYXRvci9NU1xcbmx1YnJpY2lvdXMvWVxcbmx1YnJpY2l0eS9NXFxubHVjaWQvUFlcXG5sdWNpZGl0eS9NXFxubHVjaWRuZXNzL01cXG5sdWNrL01EU0dcXG5sdWNraWx5L1VcXG5sdWNraW5lc3MvVU1cXG5sdWNrbGVzc1xcbmx1Y2t5L1VQVFJcXG5sdWNyYXRpdmUvWVBcXG5sdWNyYXRpdmVuZXNzL01cXG5sdWNyZS9NXFxubHVjdWJyYXRlL0dORFNcXG5sdWN1YnJhdGlvbi9NXFxubHVkaWNyb3VzL1lQXFxubHVkaWNyb3VzbmVzcy9NXFxubHVkb1xcbmx1ZmYvRFNHXFxubHVnL1NNXFxubHVnZS9TXFxubHVnZ2FnZS9NXFxubHVnZ2VkXFxubHVnZ2VyL01TXFxubHVnZ2luZ1xcbmx1Z2hvbGUvU1xcbmx1Z3NhaWwvU01cXG5sdWd1YnJpb3VzL1lQXFxubHVndWJyaW91c25lc3MvTVxcbmx1a2V3YXJtL1lQXFxubHVrZXdhcm1uZXNzL01cXG5sdWxsL01EU0dcXG5sdWxsYWJ5L1NNXFxubHVsdS9TXFxubHVtYmFnby9NXFxubHVtYmFyXFxubHVtYmVyL01EUlpHU1xcbmx1bWJlcmVyL01cXG5sdW1iZXJpbmcvTVxcbmx1bWJlcmphY2svU01cXG5sdW1iZXJtYW4vTVxcbmx1bWJlcm1lblxcbmx1bWJlcnlhcmQvU01cXG5sdW1lblxcbmx1bWluYXJ5L1NNXFxubHVtaW5lc2NlbmNlL01cXG5sdW1pbmVzY2VudFxcbmx1bWlub3NpdHkvTVxcbmx1bWlub3VzL1lcXG5sdW1tb3gvTVNcXG5sdW1wL01ETlNHXFxubHVtcGVjdG9teS9TXFxubHVtcGVucHJvbGV0YXJpYXRcXG5sdW1waW5lc3MvTVxcbmx1bXBpc2hcXG5sdW1weS9UUlBcXG5sdW5hY3kvU01cXG5sdW5hclxcbmx1bmF0aWMvU01cXG5sdW5jaC9HTURTXFxubHVuY2hib3gvU1xcbmx1bmNoZW9uL1NNXFxubHVuY2hlb25ldHRlL1NNXFxubHVuY2hyb29tL01TXFxubHVuY2h0aW1lL01TXFxubHVuZy9NRFNHXFxubHVuZ2UvU01cXG5sdW5nZmlzaC9NU1xcbmx1bmdmdWwvU1xcbmx1bmtoZWFkL01TXFxubHVwaW5lL01TXFxubHVwdXMvTVxcbmx1cmNoL0dNRFNcXG5sdXJlL01HRFNcXG5sdXJneVxcbmx1cmlkL1BZXFxubHVyaWRuZXNzL01cXG5sdXJrL0RSU1pHXFxubHVzY2lvdXMvUFlcXG5sdXNjaW91c25lc3MvTVxcbmx1c2gvTVJTWVBUXFxubHVzaG5lc3MvTVxcbmx1c3QvTURSU0dcXG5sdXN0ZXIvTVxcbmx1c3Rlcmxlc3NcXG5sdXN0ZnVsL1lcXG5sdXN0aWx5XFxubHVzdGluZXNzL01cXG5sdXN0cm91cy9ZXFxubHVzdHkvUFRSXFxubHV0YW5pc3QvU01cXG5sdXRlL01TXFxubHV0ZW5pc3QvU01cXG5sdXRldGl1bS9NXFxubHV4XFxubHV4dXJpYW5jZS9NXFxubHV4dXJpYW50L1lcXG5sdXh1cmlhdGUvRFNHTlxcbmx1eHVyaWF0aW9uL01cXG5sdXh1cmlvdXMvUFlcXG5sdXh1cmlvdXNuZXNzL01cXG5sdXh1cnkvU01cXG5sdmlcXG5sdmlpXFxubHhpXFxubHhpaVxcbmx4aXZcXG5seGl4XFxubHh2aVxcbmx4dmlpXFxubHljZXVtL01TXFxubHljaGdhdGUvU1xcbmx5ZS9NR1xcbmx5aW5nL01cXG5seW1waC9NXFxubHltcGhhdGljL1NNXFxubHltcGhvY3l0ZS9TTVxcbmx5bXBob2lkXFxubHltcGhvbWEvU01cXG5seW5jaC9KWkdEUlNcXG5seW5jaGVyL01cXG5seW5jaGluZy9NXFxubHlueC9NU1xcbmx5cmUvTVNcXG5seXJlYmlyZC9NU1xcbmx5cmljL1NNXFxubHlyaWNhbC9ZXFxubHlyaWNpc20vTVxcbmx5cmljaXN0L1NNXFxubHlzb3NvbWFsXFxubHlzb3NvbWVzXFxubS9LQVNcXG5tYSdhbVxcbm1hL1NNSFxcbm1hYy9TR01EXFxubWFjYWJyZVxcbm1hY2FkYW0vTVxcbm1hY2FkYW1pYS9TTVxcbm1hY2FkYW1pemUvR0RTXFxubWFjYXF1ZS9NU1xcbm1hY2Fyb25pL01TXFxubWFjYXJvb24vTVNcXG5tYWNhdy9TTVxcbm1hY2UvTVNcXG5tYWNlcmF0ZS9EU0dOXFxubWFjZXJhdGlvbi9NXFxubWFjaC9NXFxubWFjaGV0ZS9TTVxcbm1hY2hpbmF0ZS9HTkRTWFxcbm1hY2hpbmF0aW9uL01cXG5tYWNoaW5lL0RTTUdCXFxubWFjaGluZXJ5L01cXG5tYWNoaW5pc3QvTVNcXG5tYWNoaXNtby9NXFxubWFjaG8vTVxcbm1hY2tlcmVsL1NNXFxubWFja2luYXcvU01cXG5tYWNraW50b3NoL01TXFxubWFjcmFtZS9NXFxubWFjcm8vU01cXG5tYWNyb2Jpb3RpYy9TXFxubWFjcm9iaW90aWNzL01cXG5tYWNyb2Nvc20vU01cXG5tYWNyb2Vjb25vbWljL1NcXG5tYWNyb2Vjb25vbWljcy9NXFxubWFjcm9sb2d5L1NcXG5tYWNyb24vTVNcXG5tYWNyb3BoYWdlc1xcbm1hY3Jvc2NvcGljXFxubWFkL1NNWVBcXG5tYWRhbS9TTVxcbm1hZGFtZS9NXFxubWFkY2FwL01TXFxubWFkZGVuL0RHU1xcbm1hZGRlbmluZy9ZXFxubWFkZGVyL01TXFxubWFkZGVzdFxcbm1hZGRpbmdcXG5tYWRlL0FVXFxubWFkZW1vaXNlbGxlL01TXFxubWFkaG91c2UvU01cXG5tYWRtYW4vTVxcbm1hZG1lblxcbm1hZG5lc3MvTVxcbm1hZHJhcy9NU1xcbm1hZHJhc2EvU01cXG5tYWRyYXNhaC9NXFxubWFkcmFzYWhzXFxubWFkcmFzc2EvU01cXG5tYWRyaWdhbC9TTVxcbm1hZHdvbWFuL01cXG5tYWR3b21lblxcbm1hZWxzdHJvbS9TTVxcbm1hZXN0cm8vU01cXG5tYWZpYS9TTVxcbm1hZmlvc2lcXG5tYWZpb3NvL01cXG5tYWcvU01cXG5tYWdhemluZS9TTVxcbm1hZ2UvTVNcXG5tYWdlbnRhL01cXG5tYWdnb3QvTVNcXG5tYWdnb3R5XFxubWFnaS9NXFxubWFnaWMvU01cXG5tYWdpY2FsL1lcXG5tYWdpY2lhbi9TTVxcbm1hZ2lja2VkXFxubWFnaWNraW5nXFxubWFnaXN0ZXJpYWwvWVxcbm1hZ2lzdHJhY3kvTVxcbm1hZ2lzdHJhdGUvU01cXG5tYWdtYS9NXFxubWFnbmFuaW1pdHkvTVxcbm1hZ25hbmltb3VzL1lcXG5tYWduYXRlL1NNXFxubWFnbmVzaWEvTVxcbm1hZ25lc2l1bS9NXFxubWFnbmV0L01TXFxubWFnbmV0aWNcXG5tYWduZXRpY2FsbHlcXG5tYWduZXRpc20vTVxcbm1hZ25ldGl0ZS9NXFxubWFnbmV0aXphYmxlXFxubWFnbmV0aXphdGlvbi9DTVxcbm1hZ25ldGl6ZS9DR0RTXFxubWFnbmV0by9TTVxcbm1hZ25ldG9tZXRlci9TTVxcbm1hZ25ldG9zcGhlcmVcXG5tYWduaWZpY2F0aW9uL01cXG5tYWduaWZpY2VuY2UvTVxcbm1hZ25pZmljZW50L1lcXG5tYWduaWZpZXIvTVxcbm1hZ25pZnkvWkdYRFJTTlxcbm1hZ25pbG9xdWVuY2UvTVxcbm1hZ25pbG9xdWVudFxcbm1hZ25pdHVkZS9TTVxcbm1hZ25vbGlhL01TXFxubWFnbm9uXFxubWFnbnVtL01TXFxubWFncGllL01TXFxubWFndXMvTVxcbm1haGFyYWphaC9NXFxubWFoYXJhamFoc1xcbm1haGFyYW5pL1NNXFxubWFoYXJpc2hpL1NNXFxubWFoYXRtYS9TTVxcbm1haG9nYW55L1NNXFxubWFob3V0L01TXFxubWFpZC9NTlNYXFxubWFpZGVuL01ZXFxubWFpZGVuaGFpci9NXFxubWFpZGVuaGVhZC9TTVxcbm1haWRlbmhvb2QvTVxcbm1haWRzZXJ2YW50L1NNXFxubWFpbC9KTURSU1pHXFxubWFpbGJhZy9TTVxcbm1haWxib21iL0dTRFxcbm1haWxib3gvTVNcXG5tYWlsZXIvTVxcbm1haWxpbmcvTVxcbm1haWxsb3QvU01cXG5tYWlsbWFuL01cXG5tYWlsbWVuXFxubWFpbHNob3QvU1xcbm1haW0vRFNHXFxubWFpbi9NWVNcXG5tYWluZnJhbWUvU01cXG5tYWlubGFuZC9NU1xcbm1haW5saW5lL01HRFNcXG5tYWlubWFzdC9NU1xcbm1haW5zYWlsL01TXFxubWFpbnNwcmluZy9NU1xcbm1haW5zdGF5L01TXFxubWFpbnN0cmVhbS9TTURHXFxubWFpbnRhaW4vWkdCRFJTXFxubWFpbnRhaW5hYmlsaXR5XFxubWFpbnRhaW5hYmxlL1VcXG5tYWludGFpbmVkL1VcXG5tYWludGVuYW5jZS9NXFxubWFpbnRvcC9TTVxcbm1haXNvbmV0dGUvTVNcXG5tYWl6ZS9TTVxcbm1hamVzdGljXFxubWFqZXN0aWNhbGx5XFxubWFqZXN0eS9TTVxcbm1ham9saWNhL01cXG5tYWpvci9TR01EWVxcbm1ham9yZG9tby9NU1xcbm1ham9yZXR0ZS9NU1xcbm1ham9yaXRhcmlhbi9TTVxcbm1ham9yaXRhcmlhbmlzbVxcbm1ham9yaXR5L1NNXFxubWFrZSdzL0FcXG5tYWtlL1VBR1NcXG5tYWtlb3Zlci9NU1xcbm1ha2VyL1NNXFxubWFrZXNoaWZ0L1NNXFxubWFrZXVwL01TXFxubWFrZXdlaWdodC9TXFxubWFraW5nL01TXFxubWFraW5ncy9NXFxubWFsYWNoaXRlL01cXG5tYWxhZGp1c3RlZFxcbm1hbGFkanVzdG1lbnQvTVxcbm1hbGFkbWluaXN0cmF0aW9uXFxubWFsYWRyb2l0L1BZXFxubWFsYWRyb2l0bmVzcy9NXFxubWFsYWR5L1NNXFxubWFsYWlzZS9NXFxubWFsYW11dGUvTVNcXG5tYWxhcHJvcGlzbS9TTVxcbm1hbGFyaWEvTVxcbm1hbGFyaWFsXFxubWFsYXJrZXkvTVxcbm1hbGF0aGlvbi9NXFxubWFsY29udGVudC9NU1xcbm1hbGUvTVBTXFxubWFsZWRpY3Rpb24vU01cXG5tYWxlZmFjdGlvbi9NXFxubWFsZWZhY3Rvci9TTVxcbm1hbGVmaWNcXG5tYWxlZmljZW5jZS9NXFxubWFsZWZpY2VudFxcbm1hbGVuZXNzL01cXG5tYWxldm9sZW5jZS9NXFxubWFsZXZvbGVudC9ZXFxubWFsZmVhc2FuY2UvTVxcbm1hbGZvcm1hdGlvbi9TTVxcbm1hbGZvcm1lZFxcbm1hbGZ1bmN0aW9uL01EU0dcXG5tYWxpY2UvTVxcbm1hbGljaW91cy9QWVxcbm1hbGljaW91c25lc3MvTVxcbm1hbGlnbi9EU0dcXG5tYWxpZ25hbmN5L1NNXFxubWFsaWduYW50L1lcXG5tYWxpZ25pdHkvTVxcbm1hbGluZ2VyL1pHU0RSXFxubWFsaW5nZXJlci9NXFxubWFsbC9NU1xcbm1hbGxhcmQvU01cXG5tYWxsZWFiaWxpdHkvTVxcbm1hbGxlYWJsZVxcbm1hbGxldC9NU1xcbm1hbGxvdy9NU1xcbm1hbG5vdXJpc2hlZFxcbm1hbG51dHJpdGlvbi9NXFxubWFsb2NjbHVzaW9uL01cXG5tYWxvZG9yb3VzXFxubWFscHJhY3RpY2UvU01cXG5tYWx0L01EU0dcXG5tYWx0ZWQvTVNcXG5tYWx0b3NlL01cXG5tYWx0cmVhdC9HTERTXFxubWFsdHJlYXRtZW50L01cXG5tYWx0eS9UUlxcbm1hbHdhcmUvTVxcbm1hbS9TXFxubWFtYS9NU1xcbm1hbWJhL1NNXFxubWFtYm8vU0dNRFxcbm1hbW1hL01cXG5tYW1tYWwvTVNcXG5tYW1tYWxpYW4vTVNcXG5tYW1tYXJ5XFxubWFtbW9ncmFtL01TXFxubWFtbW9ncmFwaHkvTVxcbm1hbW1vbi9NXFxubWFtbW90aC9NXFxubWFtbW90aHNcXG5tYW1teS9TTVxcbm1hbidzL0ZcXG5tYW4vVVNZXFxubWFuYWNsZS9EU01HXFxubWFuYWdlL1pHRFJTTFxcbm1hbmFnZWFiaWxpdHkvTVxcbm1hbmFnZWFibGUvVVxcbm1hbmFnZW1lbnQvTVNcXG5tYW5hZ2VyL01cXG5tYW5hZ2VyZXNzL1NcXG5tYW5hZ2VyaWFsXFxubWFuYW5hL01TXFxubWFuYXRlZS9TTVxcbm1hbmRhbGEvU01cXG5tYW5kYW11cy9NU1xcbm1hbmRhcmluL01TXFxubWFuZGF0ZS9EU01HXFxubWFuZGF0b3J5XFxubWFuZGlibGUvTVNcXG5tYW5kaWJ1bGFyXFxubWFuZG9saW4vTVNcXG5tYW5kcmFrZS9NU1xcbm1hbmRyZWwvU01cXG5tYW5kcmlsbC9NU1xcbm1hbmUvTURTXFxubWFuZWdlL01cXG5tYW5ldXZlci9NREdTQkpcXG5tYW5ldXZlcmFiaWxpdHkvTVxcbm1hbmZ1bC9ZXFxubWFuZ2EvTVxcbm1hbmdhbmVzZS9NXFxubWFuZ2UvRFJNWlxcbm1hbmdlci9NXFxubWFuZ2V0b3V0L1NcXG5tYW5naW5lc3MvTVxcbm1hbmdsZS9NWkdEUlNcXG5tYW5nby9NXFxubWFuZ29lc1xcbm1hbmdyb3ZlL01TXFxubWFuZ3kvVFJQXFxubWFuaGFuZGxlL0dEU1xcbm1hbmhvbGUvU01cXG5tYW5ob29kL01cXG5tYW5odW50L1NNXFxubWFuaWEvU01cXG5tYW5pYWMvTVNcXG5tYW5pYWNhbC9ZXFxubWFuaWMvU01cXG5tYW5pY2FsbHlcXG5tYW5pY3VyZS9NR0RTXFxubWFuaWN1cmlzdC9NU1xcbm1hbmlmZXN0L01EWVNHXFxubWFuaWZlc3RhdGlvbi9TTVxcbm1hbmlmZXN0by9TTVxcbm1hbmlmb2xkL0dNRFNcXG5tYW5pa2luL1NNXFxubWFuaWxhL01cXG5tYW5pb2MvTVNcXG5tYW5pcHVsYWJsZVxcbm1hbmlwdWxhdGUvWEdOVkRTXFxubWFuaXB1bGF0aW9uL01cXG5tYW5pcHVsYXRpdmUvWVxcbm1hbmlwdWxhdG9yL01TXFxubWFua2luZC9NXFxubWFua3lcXG5tYW5saWtlXFxubWFubGluZXNzL01cXG5tYW5seS9VVFJcXG5tYW5uYS9NXFxubWFubmVkL1VcXG5tYW5uZXF1aW4vU01cXG5tYW5uZXIvTURZU1xcbm1hbm5lcmlzbS9TTVxcbm1hbm5lcmx5L1VcXG5tYW5uaW5nL1VcXG5tYW5uaXNoL1lQXFxubWFubmlzaG5lc3MvTVxcbm1hbm9tZXRlci9TTVxcbm1hbm9yL1NNXFxubWFub3JpYWxcXG5tYW5wb3dlci9NXFxubWFucXVlXFxubWFuc2FyZC9NU1xcbm1hbnNlL1NYTU5cXG5tYW5zZXJ2YW50L01cXG5tYW5zaW9uL01cXG5tYW5zbGF1Z2h0ZXIvTVxcbm1hbnRhL1NNXFxubWFudGVsL01TXFxubWFudGVscGllY2UvU01cXG5tYW50ZWxzaGVsZlxcbm1hbnRlbHNoZWx2ZXNcXG5tYW50ZXNcXG5tYW50aWxsYS9TTVxcbm1hbnRpcy9NU1xcbm1hbnRpc3NhL1NNXFxubWFudGxlJ3NcXG5tYW50bGUvRUdEU1xcbm1hbnRyYS9NU1xcbm1hbnVhbC9NWVNcXG5tYW51ZmFjdHVyZS9EUlNNWkdcXG5tYW51ZmFjdHVyZXIvTVxcbm1hbnVmYWN0dXJpbmcvTVxcbm1hbnVtaXNzaW9uL1NNXFxubWFudW1pdC9TXFxubWFudW1pdHRlZFxcbm1hbnVtaXR0aW5nXFxubWFudXJlL01HRFNcXG5tYW51c2NyaXB0L01TXFxubWFueS9NXFxubWFwJ3NcXG5tYXAvQVNcXG5tYXBsZS9TTVxcbm1hcG1ha2VyL1NNXFxubWFwcGVkL0FcXG5tYXBwZXIvTVNcXG5tYXBwaW5nL1NcXG5tYXIvU1xcbm1hcmFib3UvTVNcXG5tYXJhYm91dC9TTVxcbm1hcmFjYS9NU1xcbm1hcmFzY2hpbm8vTVNcXG5tYXJhdGhvbi9TTVJaXFxubWFyYXRob25lci9NXFxubWFyYXVkL1pHRFJTXFxubWFyYXVkZXIvTVxcbm1hcmJsZS9NR0RTXFxubWFyYmxlaXplL0dEU1xcbm1hcmJsaW5nL01cXG5tYXJjaC9aR01EUlNcXG5tYXJjaGVyL01cXG5tYXJjaGlvbmVzcy9NU1xcbm1hcmUvTVNcXG5tYXJnYXJpbmUvTVxcbm1hcmdhcml0YS9NU1xcbm1hcmdlXFxubWFyZ2luL01TXFxubWFyZ2luYWwvWVNcXG5tYXJnaW5hbGlhL01cXG5tYXJnaW5hbGl6YXRpb24vTVxcbm1hcmdpbmFsaXplL0dEU1xcbm1hcmlhL01cXG5tYXJpYWNoaS9NU1xcbm1hcmlnb2xkL01TXFxubWFyaWp1YW5hL01cXG5tYXJpbWJhL1NNXFxubWFyaW5hL01TXFxubWFyaW5hZGUvRFNNR1xcbm1hcmluYXJhL01cXG5tYXJpbmF0ZS9EU0dOXFxubWFyaW5hdGlvbi9NXFxubWFyaW5lL01aUlNcXG5tYXJpbmVyL01cXG5tYXJpb25ldHRlL01TXFxubWFyaXRhbC9ZXFxubWFyaXRpbWVcXG5tYXJqb3JhbS9NXFxubWFyay9BTURTR1xcbm1hcmtkb3duL1NNXFxubWFya2VkL1VcXG5tYXJrZWRseVxcbm1hcmtlci9NU1xcbm1hcmtldC9NRFJaR0JTXFxubWFya2V0YWJpbGl0eS9NXFxubWFya2V0YWJsZS9VXFxubWFya2V0ZWVyL1NNXFxubWFya2V0ZXIvTVxcbm1hcmtldGluZy9NXFxubWFya2V0cGxhY2UvU01cXG5tYXJraW5nL1NNXFxubWFya2thL01cXG5tYXJra2FhXFxubWFya3NtYW4vTVxcbm1hcmtzbWFuc2hpcC9NXFxubWFya3NtZW5cXG5tYXJrdXAvTVNcXG5tYXJsL01cXG5tYXJsaW4vTVNcXG5tYXJsaW5lc3Bpa2UvU01cXG5tYXJtYWxhZGUvTVxcbm1hcm1vcmVhbFxcbm1hcm1vc2V0L1NNXFxubWFybW90L01TXFxubWFyb29uL01ER1NcXG5tYXJxdWUvTVNcXG5tYXJxdWVlL1NNXFxubWFycXVlc3MvTVNcXG5tYXJxdWV0cnkvTVxcbm1hcnF1aXMvTVNcXG5tYXJxdWlzZS9NXFxubWFycXVpc2V0dGUvTVxcbm1hcnJlZC9VXFxubWFycmlhZ2UvQVNNXFxubWFycmlhZ2VhYmlsaXR5L01cXG5tYXJyaWFnZWFibGVcXG5tYXJyaWVkL1NNXFxubWFycmluZ1xcbm1hcnJvdy9NU1xcbm1hcnJ5L0FHRFNcXG5tYXJzaC9NU1xcbm1hcnNoYWwvU01ER1xcbm1hcnNobGFuZC9TTVxcbm1hcnNobWFsbG93L1NNXFxubWFyc2h5L1JUXFxubWFyc3VwaWFsL01TXFxubWFydC9NTlNYXFxubWFydGVuL01cXG5tYXJ0ZW5zaXRlXFxubWFydGlhbC9ZXFxubWFydGlhbi9TXFxubWFydGluL01TXFxubWFydGluZXQvTVNcXG5tYXJ0aW5nYWxlL01TXFxubWFydGluaS9TTVxcbm1hcnR5ci9NREdTXFxubWFydHlyZG9tL01cXG5tYXJ2ZWwvTURHU1xcbm1hcnZlbG91cy9ZXFxubWFyemlwYW4vTVxcbm1hc2NcXG5tYXNjYXJhL0dNRFNcXG5tYXNjb3QvTVNcXG5tYXNjdWxpbmUvU01cXG5tYXNjdWxpbml0eS9NXFxubWFzZXIvU01cXG5tYXNoL01EUlNaR1xcbm1hc2hlci9NXFxubWFzaHVwL01TXFxubWFzaydzXFxubWFzay9VRFNHXFxubWFza2VyL01TXFxubWFzb2NoaXNtL01cXG5tYXNvY2hpc3QvU01cXG5tYXNvY2hpc3RpY1xcbm1hc29jaGlzdGljYWxseVxcbm1hc29uL1NNXFxubWFzb25pY1xcbm1hc29ucnkvTVxcbm1hc3F1ZS9NU1xcbm1hc3F1ZXJhZGUvRFJTTVpHXFxubWFzcXVlcmFkZXIvTVxcbm1hc3MvTURTR1ZcXG5tYXNzYWNyZS9NR0RTXFxubWFzc2FnZS9EU01HXFxubWFzc2V1ci9TTVxcbm1hc3NldXNlL01TXFxubWFzc2lmL01TXFxubWFzc2l2ZS9QWVxcbm1hc3NpdmVuZXNzL01cXG5tYXN0L01EU1xcbm1hc3RlY3RvbXkvU01cXG5tYXN0ZXInc1xcbm1hc3Rlci9BREdTXFxubWFzdGVyY2xhc3MvU1xcbm1hc3RlcmZ1bC9ZXFxubWFzdGVybHlcXG5tYXN0ZXJtaW5kL1NHTURcXG5tYXN0ZXJwaWVjZS9NU1xcbm1hc3RlcnN0cm9rZS9TTVxcbm1hc3RlcndvcmsvTVNcXG5tYXN0ZXJ5L01cXG5tYXN0aGVhZC9NU1xcbm1hc3RpYy9NXFxubWFzdGljYXRlL0dORFNcXG5tYXN0aWNhdGlvbi9NXFxubWFzdGlmZi9TTVxcbm1hc3RpdGlzXFxubWFzdG9kb24vU01cXG5tYXN0b2lkL1NNXFxubWFzdHVyYmF0ZS9HTkRTXFxubWFzdHVyYmF0aW9uL01cXG5tYXN0dXJiYXRvcnlcXG5tYXQvU1pHTURSXFxubWF0YWRvci9TTVxcbm1hdGNoL0FNU1xcbm1hdGNoYm9vay9TTVxcbm1hdGNoYm94L01TXFxubWF0Y2hlZC9VXFxubWF0Y2hpbmdcXG5tYXRjaGxlc3NcXG5tYXRjaGxvY2svU01cXG5tYXRjaG1ha2VyL01TXFxubWF0Y2htYWtpbmcvTVxcbm1hdGNoc3RpY2svTVNcXG5tYXRjaHdvb2QvTVxcbm1hdGUvTVNcXG5tYXRlcmlhbC9TTVlcXG5tYXRlcmlhbGlzbS9NXFxubWF0ZXJpYWxpc3QvU01cXG5tYXRlcmlhbGlzdGljXFxubWF0ZXJpYWxpc3RpY2FsbHlcXG5tYXRlcmlhbGl6YXRpb24vTVxcbm1hdGVyaWFsaXplL0RTR1xcbm1hdGVyaWVsL01cXG5tYXRlcm5hbC9ZXFxubWF0ZXJuaXR5L01cXG5tYXRleS9TXFxubWF0aGVtYXRpY2FsL1lcXG5tYXRoZW1hdGljaWFuL1NNXFxubWF0aGVtYXRpY3MvTVxcbm1hdGluZWUvU01cXG5tYXRpbmcvTVxcbm1hdGlucy9NXFxubWF0cmlhcmNoL01cXG5tYXRyaWFyY2hhbFxcbm1hdHJpYXJjaHNcXG5tYXRyaWFyY2h5L1NNXFxubWF0cmljZXNcXG5tYXRyaWNpZGFsXFxubWF0cmljaWRlL01TXFxubWF0cmljdWxhdGUvRFNHTlxcbm1hdHJpY3VsYXRpb24vTVxcbm1hdHJpbW9uaWFsXFxubWF0cmltb255L01cXG5tYXRyaXgvTVxcbm1hdHJvbi9NWVNcXG5tYXR0ZS9EUlNNWkdcXG5tYXR0ZXIvTURHXFxubWF0dGluZy9NXFxubWF0dG9jay9TTVxcbm1hdHRyZXNzL01TXFxubWF0dXJhdGUvR05EU1xcbm1hdHVyYXRpb24vTVxcbm1hdHVyZS9ZVEdEUlNcXG5tYXR1cml0eS9TTVxcbm1hdHpvL1NNSFxcbm1hdHpvaC9NXFxubWF0em9oc1xcbm1hdHpvdFxcbm1hdWRsaW5cXG5tYXVsL01EUlNaR1xcbm1hdWxlci9NXFxubWF1bmRlci9TREdcXG5tYXVzb2xldW0vU01cXG5tYXV2ZS9NXFxubWF2ZW4vU01cXG5tYXZlcmljay9TTVxcbm1hdy9TTVxcbm1hd2tpc2gvUFlcXG5tYXdraXNobmVzcy9NXFxubWF4L0dNRFNcXG5tYXhpL01TXFxubWF4aWxsYS9NXFxubWF4aWxsYWVcXG5tYXhpbGxhcnlcXG5tYXhpbS9TTVxcbm1heGltYVxcbm1heGltYWwvWVxcbm1heGltaXphdGlvbi9NXFxubWF4aW1pemUvR0RTXFxubWF4aW11bS9TTVxcbm1heS9NXFxubWF5YmUvU01cXG5tYXlkYXkvTVNcXG5tYXlmbG93ZXIvTVNcXG5tYXlmbHkvU01cXG5tYXloZW0vTVxcbm1heW4ndFxcbm1heW8vTVxcbm1heW9ubmFpc2UvTVxcbm1heW9yL1NNXFxubWF5b3JhbFxcbm1heW9yYWx0eS9NXFxubWF5b3Jlc3MvTVNcXG5tYXlwb2xlL1NNXFxubWF5c3RcXG5tYXplL01TXFxubWF6dXJrYS9NU1xcbm1kc2VcXG5tZS9EU0hcXG5tZWFkL01cXG5tZWFkb3cvTVNcXG5tZWFkb3dsYXJrL01TXFxubWVhZ2VyL1BZXFxubWVhZ2VybmVzcy9NXFxubWVhbC9NU1xcbm1lYWxpbmVzcy9NXFxubWVhbHRpbWUvU01cXG5tZWFseS9UUFJcXG5tZWFseWJ1Zy9TTVxcbm1lYWx5bW91dGhlZFxcbm1lYW4vTVJZSlBTVEdcXG5tZWFuZGVyL1NNREpHXFxubWVhbmRlcmluZ3MvTVxcbm1lYW5pZS9NXFxubWVhbmluZy9NXFxubWVhbmluZ2Z1bC9QWVxcbm1lYW5pbmdmdWxuZXNzL01cXG5tZWFuaW5nbGVzcy9ZUFxcbm1lYW5pbmdsZXNzbmVzcy9NXFxubWVhbm5lc3MvTVxcbm1lYW50L1VcXG5tZWFudGltZS9NXFxubWVhbndoaWxlL01cXG5tZWFueS9TTVxcbm1lYXNcXG5tZWFzbGVzL01cXG5tZWFzbHkvUlRcXG5tZWFzdXJhYmxlXFxubWVhc3VyYWJseVxcbm1lYXN1cmUnc1xcbm1lYXN1cmUvQURTR1xcbm1lYXN1cmVkL1VcXG5tZWFzdXJlbGVzc1xcbm1lYXN1cmVtZW50L01TXFxubWVhdC9NU1xcbm1lYXRiYWxsL01TXFxubWVhdGhlYWQvTVNcXG5tZWF0aW5lc3MvTVxcbm1lYXRsZXNzXFxubWVhdGxvYWYvTVxcbm1lYXRsb2F2ZXNcXG5tZWF0cGFja2luZy9NXFxubWVhdHkvVFBSXFxubWVjY2EvU01cXG5tZWNoYW5pYy9NU1xcbm1lY2hhbmljYWwvWVxcbm1lY2hhbmljcy9NXFxubWVjaGFuaXNtL1NNXFxubWVjaGFuaXN0aWNcXG5tZWNoYW5pc3RpY2FsbHlcXG5tZWNoYW5pemF0aW9uL01cXG5tZWNoYW5pemUvRFNHXFxubWVkYWwvU01cXG5tZWRhbGlzdC9NU1xcbm1lZGFsbGlvbi9TTVxcbm1lZGRsZS9aR0RSU1xcbm1lZGRsZXIvTVxcbm1lZGRsZXNvbWVcXG5tZWRpYS9TTVxcbm1lZGlhbC9BWVxcbm1lZGlhbi9NU1xcbm1lZGlhdGUvQURTR05cXG5tZWRpYXRlZC9VXFxubWVkaWF0aW9uL0FNXFxubWVkaWF0b3IvTVNcXG5tZWRpYy9TTVxcbm1lZGljYWlkL01cXG5tZWRpY2FsL1NNWVxcbm1lZGljYW1lbnQvTVxcbm1lZGljYXJlL01cXG5tZWRpY2F0ZS9HTlhEU1xcbm1lZGljYXRpb24vTVxcbm1lZGljaW5hbC9ZXFxubWVkaWNpbmUvTVNcXG5tZWRpY28vTVNcXG5tZWRpZXZhbFxcbm1lZGlldmFsaXN0L01TXFxubWVkaW9jcmVcXG5tZWRpb2NyaXR5L1NNXFxubWVkaXRhdGUvRFNHTlZYXFxubWVkaXRhdGlvbi9NXFxubWVkaXRhdGl2ZS9ZXFxubWVkaXVtL01TXFxubWVkbGV5L01TXFxubWVkdWxsYS9TTVxcbm1lZHVzYVxcbm1lZHVzYWVcXG5tZWVkL01cXG5tZWVrL1JZUFRcXG5tZWVrbmVzcy9NXFxubWVlcnNjaGF1bS9TTVxcbm1lZXQvTUpTR1xcbm1lZXRpbmcvTVxcbm1lZXRpbmdob3VzZS9TTVxcbm1lZXR1cC9NU1xcbm1lZy9TXFxubWVnYVxcbm1lZ2FiaXQvU01cXG5tZWdhYnVja3MvTVxcbm1lZ2FieXRlL01TXFxubWVnYWNodXJjaC9NU1xcbm1lZ2FjeWNsZS9TTVxcbm1lZ2FkZWF0aC9NXFxubWVnYWRlYXRoc1xcbm1lZ2FncmFtL1NcXG5tZWdhaGVydHovTVxcbm1lZ2Fqb3VsZS9TXFxubWVnYWxpdGgvTVxcbm1lZ2FsaXRoaWNcXG5tZWdhbGl0aHNcXG5tZWdhbG9tYW5pYS9NXFxubWVnYWxvbWFuaWFjL1NNXFxubWVnYWxvcG9saXMvTVNcXG5tZWdhbWV0ZXIvU1xcbm1lZ2FwYXNjYWwvU1xcbm1lZ2FwaG9uZS9EU01HXFxubWVnYXBpeGVsL1NNXFxubWVnYXN0YXIvU1xcbm1lZ2F0b24vU01cXG5tZWdhd2F0dC9NU1xcbm1laFxcbm1laW9zaXMvTVxcbm1laW90aWNcXG5tZWxhbWluZS9NXFxubWVsYW5jaG9saWEvTVxcbm1lbGFuY2hvbGljL1NcXG5tZWxhbmNob2x5L01cXG5tZWxhbmdlL01TXFxubWVsYW5pbi9NXFxubWVsYW5vbWEvU01cXG5tZWxkL01EU0dcXG5tZWxlZS9TTVxcbm1lbGlvcmF0ZS9HTlZEU1xcbm1lbGlvcmF0aW9uL01cXG5tZWxsaWZsdW91cy9QWVxcbm1lbGxpZmx1b3VzbmVzcy9NXFxubWVsbG93L1BUR0RSWVNcXG5tZWxsb3duZXNzL01cXG5tZWxvZGljXFxubWVsb2RpY2FsbHlcXG5tZWxvZGlvdXMvWVBcXG5tZWxvZGlvdXNuZXNzL01cXG5tZWxvZHJhbWEvTVNcXG5tZWxvZHJhbWF0aWMvU1xcbm1lbG9kcmFtYXRpY2FsbHlcXG5tZWxvZHJhbWF0aWNzL01cXG5tZWxvZHkvU01cXG5tZWxvbi9TTVxcbm1lbHQnc1xcbm1lbHQvQURTR1xcbm1lbHRkb3duL1NNXFxubWVtYmVyJ3NcXG5tZW1iZXIvRUFTXFxubWVtYmVyc2hpcC9TTVxcbm1lbWJyYW5lL1NNXFxubWVtYnJhbm91c1xcbm1lbWUvTVNcXG5tZW1lbnRvL01TXFxubWVtby9NU1xcbm1lbW9pci9NU1xcbm1lbW9yYWJpbGlhL01cXG5tZW1vcmFiaWxpdHkvTVxcbm1lbW9yYWJsZS9VXFxubWVtb3JhYmx5XFxubWVtb3JhbmR1bS9NU1xcbm1lbW9yaWFsL1NNXFxubWVtb3JpYWxpemUvRFNHXFxubWVtb3JpemF0aW9uL01cXG5tZW1vcml6ZS9EU0dcXG5tZW1vcnkvU01cXG5tZW1zYWhpYi9TXFxubWVuL01cXG5tZW5hY2UvTUdEU1xcbm1lbmFjaW5nL1lcXG5tZW5hZ2UvTVNcXG5tZW5hZ2VyaWUvTVNcXG5tZW5kL01EUlNaR1xcbm1lbmRhY2lvdXMvWVxcbm1lbmRhY2l0eS9NXFxubWVuZGVsZXZpdW0vTVxcbm1lbmRlci9NXFxubWVuZGljYW5jeS9NXFxubWVuZGljYW50L1NNXFxubWVuZGluZy9NXFxubWVuZm9say9NU1xcbm1lbmZvbGtzL01cXG5tZW5oYWRlbi9NXFxubWVuaWFsL01ZU1xcbm1lbmluZ2VhbFxcbm1lbmluZ2VzXFxubWVuaW5naXRpcy9NXFxubWVuaW54L01cXG5tZW5pc2NpXFxubWVuaXNjdXMvTVxcbm1lbm9wYXVzYWxcXG5tZW5vcGF1c2UvTVxcbm1lbm9yYWgvTVxcbm1lbm9yYWhzXFxubWVuc2NoL01TXFxubWVuc2VydmFudHNcXG5tZW5zZXMvTVxcbm1lbnN0cnVhbFxcbm1lbnN0cnVhdGUvR05EU1xcbm1lbnN0cnVhdGlvbi9NXFxubWVuc3VyYWJsZVxcbm1lbnN1cmF0aW9uL01cXG5tZW5zd2Vhci9NXFxubWVudGFsL1lcXG5tZW50YWxpc3QvU01cXG5tZW50YWxpdHkvU01cXG5tZW50aG9sL01cXG5tZW50aG9sYXRlZFxcbm1lbnRpb24vR1NNRFxcbm1lbnRpb25lZC9VXFxubWVudG9yL01EU0dcXG5tZW50b3JzaGlwXFxubWVudS9NU1xcbm1lb3cvTURTR1xcbm1lcmNhbnRpbGVcXG5tZXJjYW50aWxpc20vTVxcbm1lcmNlbmFyeS9TTVxcbm1lcmNlci9NU1xcbm1lcmNlcml6ZS9HRFNcXG5tZXJjaGFuZGlzZS9NWkdEUlNcXG5tZXJjaGFuZGlzZXIvTVxcbm1lcmNoYW5kaXNpbmcvTVxcbm1lcmNoYW50L01CU1xcbm1lcmNoYW50bWFuL01cXG5tZXJjaGFudG1lblxcbm1lcmNpZnVsL1VZXFxubWVyY2lsZXNzL1BZXFxubWVyY2lsZXNzbmVzcy9NXFxubWVyY3VyaWFsL1lcXG5tZXJjdXJpY1xcbm1lcmN1cnkvTVxcbm1lcmN5L1NNXFxubWVyZS9NWVRTXFxubWVyZXRyaWNpb3VzL1lQXFxubWVyZXRyaWNpb3VzbmVzcy9NXFxubWVyZ2Fuc2VyL01TXFxubWVyZ2UvRFJTWkdcXG5tZXJnZXIvTVxcbm1lcmlkaWFuL01TXFxubWVyaW5ndWUvTVNcXG5tZXJpbm8vTVNcXG5tZXJpdC9DU01cXG5tZXJpdGVkL1VcXG5tZXJpdGluZ1xcbm1lcml0bGVzc1xcbm1lcml0b2NyYWN5L1NNXFxubWVyaXRvY3JhdGljXFxubWVyaXRvcmlvdXMvUFlcXG5tZXJpdG9yaW91c25lc3MvTVxcbm1lcm1haWQvU01cXG5tZXJtYW4vTVxcbm1lcm1lblxcbm1lcnJpbHlcXG5tZXJyaW1lbnQvTVxcbm1lcnJpbmVzcy9NXFxubWVycnkvVFJQXFxubWVycnltYWtlci9NU1xcbm1lcnJ5bWFraW5nL01cXG5tZXNhL01TXFxubWVzY2FsL01TXFxubWVzY2FsaW5cXG5tZXNjYWxpbmUvTVxcbm1lc2RhbWVzXFxubWVzZGVtb2lzZWxsZXNcXG5tZXNoL01EU0dcXG5tZXNtZXJpY1xcbm1lc21lcmlzbS9NXFxubWVzbWVyaXplL1pHRFJTXFxubWVzbWVyaXplci9NXFxubWVzb21vcnBoL01cXG5tZXNvbW9ycGhzXFxubWVzb24vU01cXG5tZXNvc3BoZXJlL1NNXFxubWVzcXVpdGUvU01cXG5tZXNzL01EU0dcXG5tZXNzYWdlL01HRFNcXG5tZXNzZWlnbmV1cnNcXG5tZXNzZW5nZXIvU01cXG5tZXNzaWFoL01cXG5tZXNzaWFoc1xcbm1lc3NpYW5pY1xcbm1lc3NpZXVyc1xcbm1lc3NpbHlcXG5tZXNzaW5lc3MvTVxcbm1lc3NtYXRlL1NNXFxubWVzc3kvUFRSXFxubWVzdGl6by9NU1xcbm1ldFxcbm1ldGFcXG5tZXRhYm9saWNcXG5tZXRhYm9saWNhbGx5XFxubWV0YWJvbGlzbS9TTVxcbm1ldGFib2xpdGUvU01cXG5tZXRhYm9saXplL0RTR1xcbm1ldGFjYXJwYWwvU01cXG5tZXRhY2FycGlcXG5tZXRhY2FycHVzL01cXG5tZXRhZGF0YVxcbm1ldGFsL1NNRFxcbm1ldGFsYW5ndWFnZS9NU1xcbm1ldGFsbGljXFxubWV0YWxsdXJnaWNcXG5tZXRhbGx1cmdpY2FsXFxubWV0YWxsdXJnaXN0L01TXFxubWV0YWxsdXJneS9NXFxubWV0YWx3b3JrL01SWkdcXG5tZXRhbHdvcmtlci9NXFxubWV0YWx3b3JraW5nL01cXG5tZXRhbW9ycGhpY1xcbm1ldGFtb3JwaGlzbS9NXFxubWV0YW1vcnBob3NlL0dEU1xcbm1ldGFtb3JwaG9zaXMvTVxcbm1ldGFwaG9yL01TXFxubWV0YXBob3JpY1xcbm1ldGFwaG9yaWNhbC9ZXFxubWV0YXBoeXNpY2FsL1lcXG5tZXRhcGh5c2ljcy9NXFxubWV0YXN0YXNlc1xcbm1ldGFzdGFzaXMvTVxcbm1ldGFzdGFzaXplL0RTR1xcbm1ldGFzdGF0aWNcXG5tZXRhdGFyc2FsL01TXFxubWV0YXRhcnNpXFxubWV0YXRhcnN1cy9NXFxubWV0YXRoZXNlc1xcbm1ldGF0aGVzaXMvTVxcbm1ldGUvTVpHRFJTXFxubWV0ZW1wc3ljaG9zZXNcXG5tZXRlbXBzeWNob3Npcy9NXFxubWV0ZW9yL01TXFxubWV0ZW9yaWNcXG5tZXRlb3JpY2FsbHlcXG5tZXRlb3JpdGUvU01cXG5tZXRlb3JvaWQvU01cXG5tZXRlb3JvbG9naWNcXG5tZXRlb3JvbG9naWNhbFxcbm1ldGVvcm9sb2dpc3QvU01cXG5tZXRlb3JvbG9neS9NXFxubWV0ZXIvR01EXFxubWV0Zm9ybWluXFxubWV0aGFkb25lL01cXG5tZXRoYW1waGV0YW1pbmUvTVxcbm1ldGhhbmUvTVxcbm1ldGhhbm9sL01cXG5tZXRoaW5rc1xcbm1ldGhvZC9NU1xcbm1ldGhvZGljYWwvWVBcXG5tZXRob2RpY2FsbmVzcy9NXFxubWV0aG9kb2xvZ2ljYWwvWVxcbm1ldGhvZG9sb2d5L1NNXFxubWV0aG90cmV4YXRlXFxubWV0aG91Z2h0XFxubWV0aHNcXG5tZXRoeWwvTVxcbm1ldGljdWxvdXMvWVBcXG5tZXRpY3Vsb3VzbmVzcy9NXFxubWV0aWVyL01TXFxubWV0cmljL1NcXG5tZXRyaWNhbC9ZXFxubWV0cmljYXRlL0dORFNcXG5tZXRyaWNhdGlvbi9NXFxubWV0cmljaXplL0dEU1xcbm1ldHJvL1NNXFxubWV0cm9ub21lL01TXFxubWV0cm9wb2xpcy9NU1xcbm1ldHJvcG9saXRhblxcbm1ldHRsZS9NXFxubWV0dGxlc29tZVxcbm1ldy9TR01EXFxubWV3bC9EU0dcXG5tZXdzL01cXG5tZXp6YW5pbmUvTVNcXG5tZXp6by9TTVxcbm1mZ1xcbm1mci9TXFxubWdcXG5tZ3JcXG5taS9NTlhcXG5taWFzbWEvTVNcXG5taWMvU1xcbm1pY2EvTVxcbm1pY2VcXG5taWNrL1NcXG5taWNrZXkvTVNcXG5taWNyby9TTVxcbm1pY3JvYWdncmVzc2lvbi9TTVxcbm1pY3JvYmUvTVNcXG5taWNyb2JpYWxcXG5taWNyb2Jpb2xvZ2ljYWxcXG5taWNyb2Jpb2xvZ2lzdC9NU1xcbm1pY3JvYmlvbG9neS9NXFxubWljcm9icmV3ZXJ5L1NNXFxubWljcm9jaGlwL01TXFxubWljcm9jaXJjdWl0L1NNXFxubWljcm9jb2RlXFxubWljcm9jb21wdXRlci9NU1xcbm1pY3JvY29zbS9NU1xcbm1pY3JvY29zbWljXFxubWljcm9kb3QvU01cXG5taWNyb2Vjb25vbWljcy9NXFxubWljcm9lbGVjdHJvbmljL1NcXG5taWNyb2VsZWN0cm9uaWNzL01cXG5taWNyb2ZpYmVyL01TXFxubWljcm9maWNoZS9NXFxubWljcm9maWxtL0dNRFNcXG5taWNyb2ZpbmFuY2VcXG5taWNyb2Zsb3BwaWVzXFxubWljcm9ncm9vdmUvU01cXG5taWNyb2xpZ2h0L01TXFxubWljcm9sb2FuL01TXFxubWljcm9tYW5hZ2UvWkdEUlNMXFxubWljcm9tYW5hZ2VtZW50L01cXG5taWNyb21hbmFnZXIvTVxcbm1pY3JvbWV0ZW9yaXRlL1NNXFxubWljcm9tZXRlci9NU1xcbm1pY3Jvbi9NU1xcbm1pY3Jvb3JnYW5pc20vTVNcXG5taWNyb3Bob25lL1NNXFxubWljcm9wbGFzdGljc1xcbm1pY3JvcHJvY2Vzc29yL01TXFxubWljcm9zY29wZS9TTVxcbm1pY3Jvc2NvcGljXFxubWljcm9zY29waWNhbC9ZXFxubWljcm9zY29weS9NXFxubWljcm9zZWNvbmQvTVNcXG5taWNyb3N1cmdlcnkvTVxcbm1pY3Jvd2F2ZS9EU01HQlxcbm1pY3Jvd2F2ZWFibGVcXG5taWRcXG5taWRhaXIvTVxcbm1pZGRheS9NXFxubWlkZGVuL01TXFxubWlkZGxlL01HU1xcbm1pZGRsZWJyb3cvU01cXG5taWRkbGVtYW4vTVxcbm1pZGRsZW1lblxcbm1pZGRsZW1vc3RcXG5taWRkbGV3ZWlnaHQvTVNcXG5taWRkeS9TTVxcbm1pZGZpZWxkL1JaXFxubWlkZ2UvU01cXG5taWRnZXQvTVNcXG5taWRpL01TXFxubWlkbGFuZC9NU1xcbm1pZGxpZmUvTVxcbm1pZG1vc3RcXG5taWRuaWdodC9NXFxubWlkcG9pbnQvTVNcXG5taWRyaWIvTVNcXG5taWRyaWZmL01TXFxubWlkc2VjdGlvbi9NU1xcbm1pZHNoaXBtYW4vTVxcbm1pZHNoaXBtZW5cXG5taWRzaGlwc1xcbm1pZHNpemVcXG5taWRzdC9NXFxubWlkc3RyZWFtL01cXG5taWRzdW1tZXIvTVxcbm1pZHRlcm0vTVNcXG5taWR0b3duL01cXG5taWR3YXkvTVNcXG5taWR3ZWVrL01TXFxubWlkd2lmZS9NR0RTXFxubWlkd2lmZXJ5L1NNXFxubWlkd2ludGVyL01cXG5taWR3aXZlc1xcbm1pZHllYXIvTVNcXG5taWVuL01cXG5taWZmL0RTR1xcbm1pZ2h0J3ZlXFxubWlnaHQvTVxcbm1pZ2h0aWx5XFxubWlnaHRpbmVzcy9NXFxubWlnaHRuJ3RcXG5taWdodHkvVFJQXFxubWlnbm9uZXR0ZS9TTVxcbm1pZ3JhaW5lL01TXFxubWlncmFudC9NU1xcbm1pZ3JhdGUvQUdEU1xcbm1pZ3JhdGlvbi9TTVxcbm1pZ3JhdG9yeVxcbm1pa2Fkby9NU1xcbm1pa2UvTUdEU1xcbm1pbC9TWk1SXFxubWlsYWR5L1NNXFxubWlsY2hcXG5taWxkL01SWVRQXFxubWlsZGV3L1NNREdcXG5taWxkbmVzcy9NXFxubWlsZS9NU1xcbm1pbGVhZ2UvU01cXG5taWxlcG9zdC9NU1xcbm1pbGVyL01cXG5taWxlc3RvbmUvTVNcXG5taWxmL01TXFxubWlsaWV1L1NNXFxubWlsaXRhbmN5L01cXG5taWxpdGFudC9NWVNcXG5taWxpdGFyaWx5XFxubWlsaXRhcmlzbS9NXFxubWlsaXRhcmlzdC9TTVxcbm1pbGl0YXJpc3RpY1xcbm1pbGl0YXJpemF0aW9uL0NNXFxubWlsaXRhcml6ZS9DRFNHXFxubWlsaXRhcnkvTVxcbm1pbGl0YXRlL0dEU1xcbm1pbGl0aWEvU01cXG5taWxpdGlhbWFuL01cXG5taWxpdGlhbWVuXFxubWlsay9NRFJTWkdcXG5taWxrZXIvTVxcbm1pbGtpbmVzcy9NXFxubWlsa21haWQvTVNcXG5taWxrbWFuL01cXG5taWxrbWVuXFxubWlsa3NoYWtlL1NNXFxubWlsa3NvcC9NU1xcbm1pbGt3ZWVkL1NNXFxubWlsa3kvUlRQXFxubWlsbC9NRFJTWkdKXFxubWlsbGFnZS9NXFxubWlsbGVubmlhXFxubWlsbGVubmlhbC9NXFxubWlsbGVubml1bS9NU1xcbm1pbGxlci9NXFxubWlsbGV0L01cXG5taWxsaWFyZC9NU1xcbm1pbGxpYmFyL01TXFxubWlsbGlncmFtL01TXFxubWlsbGlsaXRlci9NU1xcbm1pbGxpbWV0ZXIvTVNcXG5taWxsaW5lci9NU1xcbm1pbGxpbmVyeS9NXFxubWlsbGluZy9NXFxubWlsbGlvbi9IU01cXG5taWxsaW9uYWlyZS9TTVxcbm1pbGxpb25haXJlc3MvU1xcbm1pbGxpb250aC9NXFxubWlsbGlvbnRoc1xcbm1pbGxpcGVkZS9TTVxcbm1pbGxpc2Vjb25kL1NNXFxubWlsbHBvbmQvU01cXG5taWxscmFjZS9TTVxcbm1pbGxzdG9uZS9TTVxcbm1pbGxzdHJlYW0vTVNcXG5taWxsd3JpZ2h0L1NNXFxubWlsb21ldGVyL1NcXG5taWxxdWV0b2FzdC9TTVxcbm1pbHQvTURTR1xcbm1pbWUvTUdEU1xcbm1pbWVvZ3JhcGgvR01EXFxubWltZW9ncmFwaHNcXG5taW1ldGljXFxubWltaWMvU01cXG5taW1pY2tlZFxcbm1pbWlja2VyL1NNXFxubWltaWNraW5nXFxubWltaWNyeS9TTVxcbm1pbW9zYS9TTVxcbm1pblxcbm1pbmFyZXQvTVNcXG5taW5hdG9yeVxcbm1pbmNlL0RSU01aR1xcbm1pbmNlbWVhdC9NXFxubWluY2VyL01cXG5taW5kJ3NcXG5taW5kL0FEUlNaR1xcbm1pbmRib2dnbGluZ2x5XFxubWluZGVkL1BcXG5taW5kZnVsL1lQXFxubWluZGZ1bG5lc3MvTVxcbm1pbmRsZXNzL1lQXFxubWluZGxlc3NuZXNzL01cXG5taW5kc2V0L01TXFxubWluZS9NWkdORFJTWFxcbm1pbmVmaWVsZC9TTVxcbm1pbmVyL01cXG5taW5lcmFsL01TXFxubWluZXJhbG9naWNhbFxcbm1pbmVyYWxvZ2lzdC9NU1xcbm1pbmVyYWxvZ3kvTVxcbm1pbmVzdHJvbmUvTVxcbm1pbmVzd2VlcGVyL1NNXFxubWluZ2xlL0RTR1xcbm1pbmd5XFxubWluaS9NU1xcbm1pbmlhdHVyZS9NU1xcbm1pbmlhdHVyaXN0L01TXFxubWluaWF0dXJpemF0aW9uL01cXG5taW5pYXR1cml6ZS9HRFNcXG5taW5pYmFyL1NcXG5taW5pYmlrZS9TTVxcbm1pbmlidXMvTVNcXG5taW5pY2FiL1NcXG5taW5pY2FtL01TXFxubWluaWNvbXB1dGVyL1NNXFxubWluaWZsb3BwaWVzXFxubWluaW0vU01cXG5taW5pbWFcXG5taW5pbWFsL1lcXG5taW5pbWFsaXNtL01cXG5taW5pbWFsaXN0L01TXFxubWluaW1pemF0aW9uL01cXG5taW5pbWl6ZS9EU0dcXG5taW5pbXVtL01TXFxubWluaW5nL01cXG5taW5pb24vTVxcbm1pbmlzZXJpZXMvTVxcbm1pbmlza2lydC9NU1xcbm1pbmlzdGVyL1NHTURcXG5taW5pc3RlcmlhbFxcbm1pbmlzdHJhbnQvTVNcXG5taW5pc3RyYXRpb24vTVNcXG5taW5pc3RyeS9TTVxcbm1pbml2YW4vTVNcXG5taW5rL01TXFxubWlubmVzaW5nZXIvTVNcXG5taW5ub3cvU01cXG5taW5vci9TTURHXFxubWlub3JpdHkvU01cXG5taW5veGlkaWwvTVxcbm1pbnN0ZXIvTVNcXG5taW5zdHJlbC9TTVxcbm1pbnN0cmVsc3kvTVxcbm1pbnQvTURSU1pHXFxubWludGFnZS9NXFxubWludGVyL01cXG5taW50eS9SVFxcbm1pbnVlbmQvTVNcXG5taW51ZXQvU01cXG5taW51cy9NU1xcbm1pbnVzY3VsZS9NU1xcbm1pbnV0ZS9QRFJTTVlUR1xcbm1pbnV0ZW1hbi9NXFxubWludXRlbWVuXFxubWludXRlbmVzcy9NXFxubWludXRpYS9NXFxubWludXRpYWVcXG5taW54L01TXFxubWlyYWNsZS9NU1xcbm1pcmFjdWxvdXMvWVxcbm1pcmFnZS9TTVxcbm1pcmUvTUdEU1xcbm1pcnJvci9HU01EXFxubWlydGgvTVxcbm1pcnRoZnVsL1BZXFxubWlydGhmdWxuZXNzL01cXG5taXJ0aGxlc3MvWVxcbm1pcnkvUlRcXG5taXNhZGRyZXNzL0RTR1xcbm1pc2FkdmVudHVyZS9NU1xcbm1pc2FsaWduZWRcXG5taXNhbGlnbm1lbnQvTVxcbm1pc2FsbGlhbmNlL01TXFxubWlzYW50aHJvcGUvU01cXG5taXNhbnRocm9waWNcXG5taXNhbnRocm9waWNhbGx5XFxubWlzYW50aHJvcGlzdC9NU1xcbm1pc2FudGhyb3B5L01cXG5taXNhcHBsaWNhdGlvbi9NXFxubWlzYXBwbHkvRFNHTlhcXG5taXNhcHByZWhlbmQvR1NEXFxubWlzYXBwcmVoZW5zaW9uL01TXFxubWlzYXBwcm9wcmlhdGUvWERTR05cXG5taXNhcHByb3ByaWF0aW9uL01cXG5taXNiZWdvdHRlblxcbm1pc2JlaGF2ZS9HRFNcXG5taXNiZWhhdmlvci9NXFxubWlzY1xcbm1pc2NhbGN1bGF0ZS9EU1hHTlxcbm1pc2NhbGN1bGF0aW9uL01cXG5taXNjYWxsL0RTR1xcbm1pc2NhcnJpYWdlL01TXFxubWlzY2FycnkvR0RTXFxubWlzY2FzdC9TR1xcbm1pc2NlZ2VuYXRpb24vTVxcbm1pc2NlbGxhbmVvdXMvWVxcbm1pc2NlbGxhbnkvU01cXG5taXNjaGFuY2UvU01cXG5taXNjaGllZi9NXFxubWlzY2hpZXZvdXMvWVBcXG5taXNjaGlldm91c25lc3MvTVxcbm1pc2NpYmlsaXR5L01cXG5taXNjaWJsZVxcbm1pc2NsYXNzaWZpZWRcXG5taXNjb21tdW5pY2F0aW9uL1NcXG5taXNjb25jZWl2ZS9HRFNcXG5taXNjb25jZXB0aW9uL1NNXFxubWlzY29uZHVjdC9NREdTXFxubWlzY29uc3RydWN0aW9uL01TXFxubWlzY29uc3RydWUvR0RTXFxubWlzY291bnQvTURTR1xcbm1pc2NyZWFudC9TTVxcbm1pc2N1ZS9EU01HXFxubWlzZGVhbC9HTVNcXG5taXNkZWFsdFxcbm1pc2RlZWQvTVNcXG5taXNkZW1lYW5vci9NU1xcbm1pc2RpYWdub3NlL0dEU1xcbm1pc2RpYWdub3Npcy9NXFxubWlzZGlkXFxubWlzZGlyZWN0L1NER1xcbm1pc2RpcmVjdGlvbi9NXFxubWlzZG8vSkdcXG5taXNkb2VzXFxubWlzZG9pbmcvTVxcbm1pc2RvbmVcXG5taXNlci9TQk1ZXFxubWlzZXJhYmxlbmVzcy9NXFxubWlzZXJhYmx5XFxubWlzZXJsaW5lc3MvTVxcbm1pc2VyeS9TTVxcbm1pc2ZlYXNhbmNlL01cXG5taXNmZWF0dXJlL1NcXG5taXNmaWxlL0dEU1xcbm1pc2ZpcmUvTUdEU1xcbm1pc2ZpdC9TTVxcbm1pc2ZpdHRlZFxcbm1pc2ZpdHRpbmdcXG5taXNmb3J0dW5lL1NNXFxubWlzZ2l2aW5nL01TXFxubWlzZ292ZXJuL1NER0xcXG5taXNnb3Zlcm5tZW50L01cXG5taXNndWlkYW5jZS9NXFxubWlzZ3VpZGUvRFNHXFxubWlzZ3VpZGVkL1lcXG5taXNoYW5kbGUvRFNHXFxubWlzaGFwL1NNXFxubWlzaGVhci9HU1xcbm1pc2hlYXJkXFxubWlzaGl0L1NcXG5taXNoaXR0aW5nXFxubWlzaG1hc2gvTVNcXG5taXNpZGVudGlmeS9HRFNcXG5taXNpbmZvcm0vREdTXFxubWlzaW5mb3JtYXRpb24vTVxcbm1pc2ludGVycHJldC9TR0RcXG5taXNpbnRlcnByZXRhdGlvbi9TTVxcbm1pc2p1ZGdlL0RTR1xcbm1pc2p1ZGdtZW50L1NNXFxubWlzbGFiZWwvR1NEXFxubWlzbGFpZFxcbm1pc2xheS9HU1xcbm1pc2xlYWQvR1NcXG5taXNsZWFkaW5nL1lcXG5taXNsZWRcXG5taXNtYW5hZ2UvTEdEU1xcbm1pc21hbmFnZW1lbnQvTVxcbm1pc21hdGNoL0dNRFNcXG5taXNuYW1lL0dEU1xcbm1pc25vbWVyL01TXFxubWlzb2dhbWlzdC9NU1xcbm1pc29nYW15L01cXG5taXNvZ3luaXN0L1NNXFxubWlzb2d5bmlzdGljXFxubWlzb2d5bm91c1xcbm1pc29neW55L01cXG5taXNwbGFjZS9HTERTXFxubWlzcGxhY2VtZW50L01cXG5taXNwbGF5L0dNRFNcXG5taXNwcmludC9HTURTXFxubWlzcHJpc2lvbi9NXFxubWlzcHJvbm91bmNlL0RTR1xcbm1pc3Byb251bmNpYXRpb24vU01cXG5taXNxdW90YXRpb24vTVNcXG5taXNxdW90ZS9NR0RTXFxubWlzcmVhZC9HSlNcXG5taXNyZWFkaW5nL01cXG5taXNyZW1lbWJlci9HRFNcXG5taXNyZXBvcnQvTURHU1xcbm1pc3JlcHJlc2VudC9HRFNcXG5taXNyZXByZXNlbnRhdGlvbi9NU1xcbm1pc3J1bGUvTUdEU1xcbm1pc3Mnc1xcbm1pc3MvRURTR1ZcXG5taXNzYWwvRVNNXFxubWlzc2VkL1VcXG5taXNzaGFwZS9HRFNcXG5taXNzaGFwZW5cXG5taXNzaWxlL01TXFxubWlzc2lsZXJ5L01cXG5taXNzaW9uL0FNU1xcbm1pc3Npb25hcnkvU01cXG5taXNzaW9uZXIvU01cXG5taXNzaXZlL01TXFxubWlzc3BlYWsvR1NcXG5taXNzcGVsbC9HREpTXFxubWlzc3BlbGxpbmcvTVxcbm1pc3NwZW5kL0dTXFxubWlzc3BlbnRcXG5taXNzcG9rZVxcbm1pc3Nwb2tlblxcbm1pc3N0YXRlL0dEU0xcXG5taXNzdGF0ZW1lbnQvU01cXG5taXNzdGVwL01TXFxubWlzc3VzL01TXFxubWlzdCdzXFxubWlzdC9DRFJTWkdcXG5taXN0YWthYmxlL1VcXG5taXN0YWtlL0JNR1NcXG5taXN0YWtlbi9ZXFxubWlzdGVyJ3NcXG5taXN0aWx5XFxubWlzdGltZS9HRFNcXG5taXN0aW5lc3MvTVxcbm1pc3RsZXRvZS9NXFxubWlzdG9va1xcbm1pc3RyYWwvTVNcXG5taXN0cmFuc2xhdGVkXFxubWlzdHJlYXQvTERHU1xcbm1pc3RyZWF0bWVudC9NXFxubWlzdHJlc3MvTVNcXG5taXN0cmlhbC9NU1xcbm1pc3RydXN0L01EU0dcXG5taXN0cnVzdGZ1bC9ZXFxubWlzdHkvUFJUXFxubWlzdHlwZS9HU1xcbm1pc3VuZGVyc3RhbmQvU0dKXFxubWlzdW5kZXJzdGFuZGluZy9NXFxubWlzdW5kZXJzdG9vZFxcbm1pc3VzZS9EU01HXFxubWl0ZS9NWlJTXFxubWl0ZXIvTURHXFxubWl0aWdhdGUvRFNHTlxcbm1pdGlnYXRlZC9VXFxubWl0aWdhdGlvbi9NXFxubWl0b2Nob25kcmlhXFxubWl0b2Nob25kcmlhbFxcbm1pdG9jaG9uZHJpb25cXG5taXRvc2VzXFxubWl0b3Npcy9NXFxubWl0b3RpY1xcbm1pdHJhbFxcbm1pdHQvTU5TWFxcbm1pdHRlbi9NXFxubWl0enZhaFxcbm1peC9aR01EUlNCXFxubWl4ZWQvVVxcbm1peGVyL01cXG5taXh0dXJlL1NNXFxubWl6emVuL01TXFxubWl6emVubWFzdC9TTVxcbm1rYXlcXG5ta3NcXG5tbFxcbm1tXFxubW5lbW9uaWMvTVNcXG5tbmVtb25pY2FsbHlcXG5tby9DS0hTXFxubW9hbi9NRFJTWkdcXG5tb2FuZXIvTVxcbm1vYXQvTURTXFxubW9iJ3NcXG5tb2IvQ1NcXG5tb2JiZWQvQ1xcbm1vYmJpbmcvQ1xcbm1vYmlsZS9NU1xcbm1vYmlsaXR5L01cXG5tb2JpbGl6YXRpb24vQ01cXG5tb2JpbGl6YXRpb25zXFxubW9iaWxpemUvQ0RTR1xcbm1vYmlsaXplci9TTVxcbm1vYnN0ZXIvU01cXG5tb2NjYXNpbi9TTVxcbm1vY2hhL1NNXFxubW9jay9EUlNaR1xcbm1vY2tlci9NXFxubW9ja2VyeS9TTVxcbm1vY2tpbmcvWVxcbm1vY2tpbmdiaXJkL1NNXFxubW9kL1NUTVxcbm1vZGFsL1NNXFxubW9kYWxpdHkvU1xcbm1vZGRlZFxcbm1vZGRpbmdcXG5tb2RlL01TXFxubW9kZWwvWkdTSk1EUlxcbm1vZGVsZXIvTVxcbm1vZGVsaW5nL01cXG5tb2RlbS9TTVxcbm1vZGVyYXRlL01ZR05QRFNcXG5tb2RlcmF0ZW5lc3MvTVxcbm1vZGVyYXRpb24vTVxcbm1vZGVyYXRvci9TTVxcbm1vZGVybi9NWVBTXFxubW9kZXJuaXNtL01cXG5tb2Rlcm5pc3QvU01cXG5tb2Rlcm5pc3RpY1xcbm1vZGVybml0eS9NXFxubW9kZXJuaXphdGlvbi9NXFxubW9kZXJuaXplL0RSU1pHXFxubW9kZXJuaXplci9NXFxubW9kZXJubmVzcy9NXFxubW9kZXN0L1lcXG5tb2Rlc3R5L01cXG5tb2RpY3VtL1NNXFxubW9kaWZpYWJsZVxcbm1vZGlmaWNhdGlvbi9NXFxubW9kaWZpZWQvVVxcbm1vZGlmaWVyL01cXG5tb2RpZnkvRFJTWFpHTlxcbm1vZGlzaC9ZUFxcbm1vZGlzaG5lc3MvTVxcbm1vZHVsYXJcXG5tb2R1bGFyaXphdGlvblxcbm1vZHVsYXRlL0NHTkRTXFxubW9kdWxhdGlvbi9DTVxcbm1vZHVsYXRpb25zXFxubW9kdWxhdG9yL01TXFxubW9kdWxlL01TXFxubW9kdWxvXFxubW9kdWx1c1xcbm1vZ2d5XFxubW9ndWwvU01cXG5tb2hhaXIvTVxcbm1vaVxcbm1vaWV0eS9TTVxcbm1vaWwvTURTR1xcbm1vaXJlL1NNXFxubW9pc3QvWFRQTlJZXFxubW9pc3Rlbi9EUlpHXFxubW9pc3RlbmVyL01cXG5tb2lzdG5lc3MvTVxcbm1vaXN0dXJlL01cXG5tb2lzdHVyaXplL1pHRFJTXFxubW9pc3R1cml6ZXIvTVxcbm1vbGFyL1NNXFxubW9sYXNzZXMvTVxcbm1vbGQvTURSSlNaR1xcbm1vbGRib2FyZC9TTVxcbm1vbGRlci9HTURcXG5tb2xkaW5lc3MvTVxcbm1vbGRpbmcvTVxcbm1vbGR5L1RQUlxcbm1vbGUvTVNcXG5tb2xlY3VsYXJcXG5tb2xlY3VsYXJpdHkvTVxcbm1vbGVjdWxlL1NNXFxubW9sZWhpbGwvU01cXG5tb2xlc2tpbi9NXFxubW9sZXN0L0RSWkdTXFxubW9sZXN0YXRpb24vTVxcbm1vbGVzdGVkL1VcXG5tb2xlc3Rlci9NXFxubW9sbC9NU1xcbm1vbGxpZmljYXRpb24vTVxcbm1vbGxpZnkvRFNOR1xcbm1vbGx1c2Nhblxcbm1vbGx1c2svU01cXG5tb2xseS9TTVxcbm1vbGx5Y29kZGxlL0RTTUdcXG5tb2x0L01ETlJTWkdcXG5tb2x0ZXIvTVxcbm1vbHliZGVudW0vTVxcbm1vbS9TTVxcbm1vbWVudC9NU1xcbm1vbWVudGFcXG5tb21lbnRhcmlseVxcbm1vbWVudGFyaW5lc3MvTVxcbm1vbWVudGFyeS9QXFxubW9tZW50b3VzL1BZXFxubW9tZW50b3VzbmVzcy9NXFxubW9tZW50dW0vTVxcbm1vbW15L1NNXFxubW9uYWRcXG5tb25hcmNoL01cXG5tb25hcmNoaWNcXG5tb25hcmNoaWNhbFxcbm1vbmFyY2hpc20vTVxcbm1vbmFyY2hpc3QvTVNcXG5tb25hcmNoaXN0aWNcXG5tb25hcmNoc1xcbm1vbmFyY2h5L1NNXFxubW9uYXN0ZXJ5L1NNXFxubW9uYXN0aWMvTVNcXG5tb25hc3RpY2FsL1lcXG5tb25hc3RpY2lzbS9NXFxubW9uYXVyYWxcXG5tb25ldGFyaWx5XFxubW9uZXRhcmlzbS9NXFxubW9uZXRhcmlzdC9NU1xcbm1vbmV0YXJ5XFxubW9uZXRpemF0aW9uL0NcXG5tb25ldGl6ZS9DR0RTXFxubW9uZXkvU01EXFxubW9uZXliYWcvTVNcXG5tb25leWJveC9TXFxubW9uZXlsZW5kZXIvU01cXG5tb25leW1ha2VyL1NNXFxubW9uZXltYWtpbmcvTVxcbm1vbmdlci9NREdTXFxubW9uZ29sL1NcXG5tb25nb2xpc20vTVxcbm1vbmdvbG9pZC9NU1xcbm1vbmdvb3NlL01TXFxubW9uZ3JlbC9TTVxcbm1vbmllc1xcbm1vbmlrZXIvU01cXG5tb25pc20vTVxcbm1vbmlzdC9NU1xcbm1vbml0aW9uL1NNXFxubW9uaXRvci9TTURHXFxubW9uaXRvcnlcXG5tb25rL01TXFxubW9ua2V5L01ER1NcXG5tb25rZXlzaGluZS9TTVxcbm1vbmtpc2hcXG5tb25rc2hvb2QvU01cXG5tb25vL01cXG5tb25vY2hyb21hdGljXFxubW9ub2Nocm9tZS9NU1xcbm1vbm9jbGUvRFNNXFxubW9ub2Nsb25hbFxcbm1vbm9jb3R5bGVkb24vU01cXG5tb25vY290eWxlZG9ub3VzXFxubW9ub2N1bGFyXFxubW9ub2RpY1xcbm1vbm9kaXN0L1NNXFxubW9ub2R5L1NNXFxubW9ub2dhbWlzdC9NU1xcbm1vbm9nYW1vdXMvWVxcbm1vbm9nYW15L01cXG5tb25vZ3JhbS9TTVxcbm1vbm9ncmFtbWVkXFxubW9ub2dyYW1taW5nXFxubW9ub2dyYXBoL01cXG5tb25vZ3JhcGhzXFxubW9ub2xpbmd1YWwvTVNcXG5tb25vbGl0aC9NXFxubW9ub2xpdGhpY1xcbm1vbm9saXRoc1xcbm1vbm9sb2dpc3QvU01cXG5tb25vbG9ndWUvU01cXG5tb25vbWFuaWEvTVxcbm1vbm9tYW5pYWMvTVNcXG5tb25vbWFuaWFjYWxcXG5tb25vbWVyL1NNXFxubW9ub251Y2xlb3Npcy9NXFxubW9ub3Bob25pY1xcbm1vbm9wbGFuZS9TTVxcbm1vbm9wb2xpc3QvU01cXG5tb25vcG9saXN0aWNcXG5tb25vcG9saXphdGlvbi9NXFxubW9ub3BvbGl6ZS9EUlNaR1xcbm1vbm9wb2xpemVyL01cXG5tb25vcG9seS9TTVxcbm1vbm9yYWlsL01TXFxubW9ub3N5bGxhYmljXFxubW9ub3N5bGxhYmxlL01TXFxubW9ub3RoZWlzbS9NXFxubW9ub3RoZWlzdC9TTVxcbm1vbm90aGVpc3RpY1xcbm1vbm90b25lL01TXFxubW9ub3RvbmljXFxubW9ub3RvbmljYWxseVxcbm1vbm90b25vdXMvUFlcXG5tb25vdG9ub3VzbmVzcy9NXFxubW9ub3RvbnkvTVxcbm1vbm91bnNhdHVyYXRlZFxcbm1vbm94aWRlL01TXFxubW9uc2VpZ25ldXIvTVxcbm1vbnNpZXVyL01cXG5tb25zaWdub3IvU01cXG5tb25zb29uL1NNXFxubW9uc29vbmFsXFxubW9uc3Rlci9TTVxcbm1vbnN0cmFuY2UvQVNNXFxubW9uc3Ryb3NpdHkvU01cXG5tb25zdHJvdXMvWVxcbm1vbnRhZ2UvU01cXG5tb250aC9NWVxcbm1vbnRobHkvU01cXG5tb250aHNcXG5tb251bWVudC9NU1xcbm1vbnVtZW50YWwvWVxcbm1vby9TR01EXFxubW9vY2gvWkdNRFJTXFxubW9vY2hlci9NXFxubW9vZC9NU1xcbm1vb2RpbHlcXG5tb29kaW5lc3MvTVxcbm1vb2R5L1RQUlxcbm1vb24vTURTR1xcbm1vb25iZWFtL01TXFxubW9vbmxlc3NcXG5tb29ubGlnaHQvU01EUlpHXFxubW9vbmxpZ2h0ZXIvTVxcbm1vb25saWdodGluZy9NXFxubW9vbmxpdFxcbm1vb25zY2FwZS9TTVxcbm1vb25zaGluZS9NWlJTXFxubW9vbnNoaW5lci9NXFxubW9vbnNob3QvTVNcXG5tb29uc3RvbmUvTVNcXG5tb29uc3RydWNrXFxubW9vbndhbGsvTVNcXG5tb29yL01ESlNHXFxubW9vcmhlbi9TXFxubW9vcmluZy9NXFxubW9vcmxhbmQvTVNcXG5tb29zZS9NXFxubW9vdC9EU0dcXG5tb3AvU1pHTURSXFxubW9wZS9NU1xcbm1vcGVkL1NNXFxubW9wZXIvTVxcbm1vcGV5XFxubW9waWVyXFxubW9waWVzdFxcbm1vcGlzaFxcbm1vcHBlZFxcbm1vcHBldC9NU1xcbm1vcHBpbmdcXG5tb3JhaW5lL1NNXFxubW9yYWwvU01ZXFxubW9yYWxlL01cXG5tb3JhbGlzbVxcbm1vcmFsaXN0L01TXFxubW9yYWxpc3RpY1xcbm1vcmFsaXN0aWNhbGx5XFxubW9yYWxpdGllc1xcbm1vcmFsaXR5L1VNXFxubW9yYWxpemF0aW9uL0NNXFxubW9yYWxpemUvQ0dEU1xcbm1vcmFsaXplci9NU1xcbm1vcmFzcy9NU1xcbm1vcmF0b3JpdW0vU01cXG5tb3JheS9TTVxcbm1vcmJpZC9ZUFxcbm1vcmJpZGl0eS9NXFxubW9yYmlkbmVzcy9NXFxubW9yZGFuY3kvTVxcbm1vcmRhbnQvU01ZXFxubW9yZS9NU1xcbm1vcmVpc2hcXG5tb3JlbC9TTVxcbm1vcmVvdmVyXFxubW9yZXMvTVxcbm1vcmd1ZS9NU1xcbm1vcmlidW5kXFxubW9ybi9NSlNHXFxubW9ybmluZy9NXFxubW9yb2Njby9NXFxubW9yb24vU01cXG5tb3JvbmljXFxubW9yb25pY2FsbHlcXG5tb3Jvc2UvWVBcXG5tb3Jvc2VuZXNzL01cXG5tb3JwaC9HRFxcbm1vcnBoZW1lL01TXFxubW9ycGhlbWljXFxubW9ycGhpYS9NXFxubW9ycGhpbmUvTVxcbm1vcnBoaW5nL01cXG5tb3JwaG9sb2dpY2FsXFxubW9ycGhvbG9neS9NXFxubW9ycGhzXFxubW9ycm93L01TXFxubW9yc2VsL01TXFxubW9ydGFsL01ZU1xcbm1vcnRhbGl0eS9NXFxubW9ydGFyL01EU0dcXG5tb3J0YXJib2FyZC9TTVxcbm1vcnRnYWdlJ3NcXG5tb3J0Z2FnZS9BR0RTXFxubW9ydGdhZ2VlL01TXFxubW9ydGdhZ29yL01TXFxubW9ydGljaWFuL01TXFxubW9ydGlmaWNhdGlvbi9NXFxubW9ydGlmeS9OR0RTXFxubW9ydGlzZS9EU01HXFxubW9ydHVhcnkvU01cXG5tb3NhaWMvTVNcXG5tb3NleS9TR0RcXG5tb3NoL0RTR1xcbm1vc3F1ZS9NU1xcbm1vc3F1aXRvL01cXG5tb3NxdWl0b2VzXFxubW9zcy9NU1xcbm1vc3NiYWNrL1NNXFxubW9zc3kvVFJcXG5tb3N0L01ZXFxubW90L1NNXFxubW90ZSdzXFxubW90ZS9LQ1hTVk5cXG5tb3RlbC9TTVxcbm1vdGV0L1NNXFxubW90aC9NXFxubW90aGJhbGwvR01EU1xcbm1vdGhlci9NRFlTR1xcbm1vdGhlcmJvYXJkL1NNXFxubW90aGVyZnVja2VyL01TIVxcbm1vdGhlcmZ1Y2tpbmcvIVxcbm1vdGhlcmhvb2QvTVxcbm1vdGhlcmxhbmQvTVNcXG5tb3RoZXJsZXNzXFxubW90aGVybGluZXNzL01cXG5tb3Roc1xcbm1vdGlmL1NNXFxubW90aWxlL1NcXG5tb3RpbGl0eS9NXFxubW90aW9uL0tDTVxcbm1vdGlvbmVkXFxubW90aW9uaW5nXFxubW90aW9ubGVzcy9ZUFxcbm1vdGlvbmxlc3NuZXNzL01cXG5tb3RpdmF0ZS9DRFNHXFxubW90aXZhdGVkL1VcXG5tb3RpdmF0aW9uL1NNXFxubW90aXZhdGlvbmFsXFxubW90aXZhdG9yL1NNXFxubW90aXZlL01TXFxubW90aXZlbGVzc1xcbm1vdGxleS9NU1xcbm1vdGxpZXJcXG5tb3RsaWVzdFxcbm1vdG9jcm9zcy9NU1xcbm1vdG9yL1NHTURcXG5tb3RvcmJpa2UvTUdEU1xcbm1vdG9yYm9hdC9NU1xcbm1vdG9yY2FkZS9NU1xcbm1vdG9yY2FyL1NNXFxubW90b3JjeWNsZS9EU01HXFxubW90b3JjeWNsaXN0L01TXFxubW90b3Jpc3QvU01cXG5tb3Rvcml6YXRpb24vTVxcbm1vdG9yaXplL0RTR1xcbm1vdG9ybWFuL01cXG5tb3Rvcm1lblxcbm1vdG9ybW91dGgvTVxcbm1vdG9ybW91dGhzXFxubW90b3J3YXkvU01cXG5tb3R0bGUvR0RTXFxubW90dG8vTVxcbm1vdHRvZXNcXG5tb3VlL01TXFxubW91bmQvU0dNRFxcbm1vdW50L0VBU0dNRFxcbm1vdW50YWJsZVxcbm1vdW50YWluL1NNXFxubW91bnRhaW5lZXIvU01ER1xcbm1vdW50YWluZWVyaW5nL01cXG5tb3VudGFpbm91c1xcbm1vdW50YWluc2lkZS9TTVxcbm1vdW50YWludG9wL1NNXFxubW91bnRlYmFuay9NU1xcbm1vdW50ZWQvVVxcbm1vdW50ZXIvTVNcXG5tb3VudGluZy9TTVxcbm1vdXJuL1NaR0RSXFxubW91cm5lZC9VXFxubW91cm5lci9NXFxubW91cm5mdWwvWVBcXG5tb3VybmZ1bG5lc3MvTVxcbm1vdXJuaW5nL01cXG5tb3VzZS9EUlNNWkdcXG5tb3VzZXIvTVxcbm1vdXNldHJhcC9TTVxcbm1vdXNldHJhcHBlZFxcbm1vdXNldHJhcHBpbmdcXG5tb3VzaW5lc3MvTVxcbm1vdXNzYWthL1NcXG5tb3Vzc2UvTUdEU1xcbm1vdXN5L1BUUlxcbm1vdXRoL0dNRFxcbm1vdXRoZmVlbFxcbm1vdXRoZnVsL01TXFxubW91dGhpbmVzcy9NXFxubW91dGhwaWVjZS9NU1xcbm1vdXRoc1xcbm1vdXRod2FzaC9NU1xcbm1vdXRod2F0ZXJpbmdcXG5tb3V0aHkvUFRSXFxubW91dG9uL01cXG5tb3ZhYmxlL1NNXFxubW92ZS9BTVpHRFJTQlxcbm1vdmVkL1VcXG5tb3ZlbWVudC9TTVxcbm1vdmVyL0FNXFxubW92aWUvU01cXG5tb3ZpZWdvZXIvU01cXG5tb3ZpbmcvWVxcbm1vdy9TWkdNRFJcXG5tb3dlci9NXFxubW94aWUvTVxcbm1venphcmVsbGEvTVxcbm1wXFxubXBnXFxubXBoXFxubXRcXG5tdGdcXG5tdGdlXFxubXUvU01cXG5tdWNoL01cXG5tdWNpbGFnZS9NXFxubXVjaWxhZ2lub3VzXFxubXVjay9NRFNHXFxubXVja3Jha2UvRFJTWkdcXG5tdWNrcmFrZXIvTVxcbm11Y2t5L1RSXFxubXVjb3VzXFxubXVjdXMvTVxcbm11ZC9NXFxubXVkZGlseVxcbm11ZGRpbmVzcy9NXFxubXVkZGxlL01HRFNcXG5tdWRkbGVoZWFkZWRcXG5tdWRkeS9QVEdEUlNcXG5tdWRmbGFwL1NcXG5tdWRmbGF0L01TXFxubXVkZ3VhcmQvU01cXG5tdWRwYWNrL1NcXG5tdWRyb29tL01TXFxubXVkc2xpZGUvTVNcXG5tdWRzbGluZ2VyL1NNXFxubXVkc2xpbmdpbmcvTVxcbm11ZW5zdGVyL01cXG5tdWVzbGlcXG5tdWV6emluL01TXFxubXVmZi9NRFNHXFxubXVmZmluL01TXFxubXVmZmxlL1pHRFJTXFxubXVmZmxlci9NXFxubXVmdGkvU01cXG5tdWcvU01cXG5tdWdmdWwvTVNcXG5tdWdnZWRcXG5tdWdnZXIvTVNcXG5tdWdnaW5lc3MvTVxcbm11Z2dpbmcvTVNcXG5tdWdnaW5zXFxubXVnZ2xlL01TXFxubXVnZ3kvUFRSXFxubXVnc2hvdC9NU1xcbm11Z3d1bXAvTVNcXG5tdWphaGVkZGluXFxubXVrbHVrL01TXFxubXVsYXR0by9NXFxubXVsYXR0b2VzXFxubXVsYmVycnkvU01cXG5tdWxjaC9HTURTXFxubXVsY3QvU0dNRFxcbm11bGUvTVNcXG5tdWxlc2tpbm5lci9NU1xcbm11bGV0ZWVyL01TXFxubXVsaXNoL1BZXFxubXVsaXNobmVzcy9NXFxubXVsbC9EU0dcXG5tdWxsYWgvTVxcbm11bGxhaHNcXG5tdWxsZWluL01cXG5tdWxsZXQvTVNcXG5tdWxsaWdhbi9TTVxcbm11bGxpZ2F0YXdueS9NXFxubXVsbGlvbi9TTURcXG5tdWx0aVxcbm11bHRpY2VsbHVsYXJcXG5tdWx0aWNoYW5uZWxcXG5tdWx0aWNvbG9yZWRcXG5tdWx0aWN1bHR1cmFsXFxubXVsdGljdWx0dXJhbGlzbS9NXFxubXVsdGlkaW1lbnNpb25hbFxcbm11bHRpZGlzY2lwbGluYXJ5XFxubXVsdGlmYWNldGVkXFxubXVsdGlmYW1pbHlcXG5tdWx0aWZhcmlvdXMvUFlcXG5tdWx0aWZhcmlvdXNuZXNzL01cXG5tdWx0aWZvcm1cXG5tdWx0aWdyYWluXFxubXVsdGlsYXRlcmFsL1lcXG5tdWx0aWxheWVyZWRcXG5tdWx0aWxldmVsXFxubXVsdGlsaW5ndWFsXFxubXVsdGlsaW5ndWFsaXNtL01cXG5tdWx0aW1lZGlhL01cXG5tdWx0aW1pbGxpb25haXJlL1NNXFxubXVsdGluYXRpb25hbC9TTVxcbm11bHRpcGFydFxcbm11bHRpcGFydHlcXG5tdWx0aXBsYXllci9NXFxubXVsdGlwbGUvTVNcXG5tdWx0aXBsZXgvWkdNRFJTXFxubXVsdGlwbGV4ZXIvTVxcbm11bHRpcGxpY2FuZC9NU1xcbm11bHRpcGxpY2F0aW9uL01cXG5tdWx0aXBsaWNhdGl2ZVxcbm11bHRpcGxpY2l0eS9TTVxcbm11bHRpcGxpZXIvTVxcbm11bHRpcGx5L05aR0RSU1hcXG5tdWx0aXByb2Nlc3NpbmdcXG5tdWx0aXByb2Nlc3Nvci9TTVxcbm11bHRpcHVycG9zZVxcbm11bHRpcmFjaWFsXFxubXVsdGlzdGFnZVxcbm11bHRpc3RvcnlcXG5tdWx0aXRhc2svR1NcXG5tdWx0aXRhc2tpbmcvTVxcbm11bHRpdHVkZS9TTVxcbm11bHRpdHVkaW5vdXNcXG5tdWx0aXZhcmlhdGVcXG5tdWx0aXZlcnNlL1NNXFxubXVsdGl2aXRhbWluL01TXFxubXVsdGl5ZWFyXFxubXVtXFxubXVtYmxlL01aR0RSU1xcbm11bWJsZXIvTVxcbm11bWJsZXR5cGVnL01cXG5tdW1tZXIvTVNcXG5tdW1tZXJ5L01cXG5tdW1taWZpY2F0aW9uL01cXG5tdW1taWZ5L0dORFNcXG5tdW1teS9TTVxcbm11bXBzL01cXG5tdW5cXG5tdW5jaC9HRFNcXG5tdW5jaGllL1NcXG5tdW5jaGllcy9NXFxubXVuY2hraW4vU01cXG5tdW5kYW5lL1NZXFxubXVuZy9EU0dcXG5tdW5pY2lwYWwvU01ZXFxubXVuaWNpcGFsaXR5L1NNXFxubXVuaWZpY2VuY2UvTVxcbm11bmlmaWNlbnQvWVxcbm11bml0aW9uL01ER1NcXG5tdXJhbC9TTVxcbm11cmFsaXN0L1NNXFxubXVyZGVyL1pHTURSU1xcbm11cmRlcmVyL01cXG5tdXJkZXJlc3MvTVNcXG5tdXJkZXJvdXMvWVxcbm11cmsvTVNcXG5tdXJraWx5XFxubXVya2luZXNzL01cXG5tdXJreS9QVFJcXG5tdXJtdXIvWkdKTURSU1xcbm11cm11cmVyL01cXG5tdXJtdXJpbmcvTVxcbm11cm11cm91c1xcbm11cnJhaW4vTVxcbm11c2NhdC9NU1xcbm11c2NhdGVsL1NNXFxubXVzY2xlL01HRFNcXG5tdXNjbGVib3VuZFxcbm11c2NsZW1hblxcbm11c2NsZW1lblxcbm11c2NseVxcbm11c2N1bGFyL1lcXG5tdXNjdWxhcml0eS9NXFxubXVzY3VsYXR1cmUvTVxcbm11c2N1bG9za2VsZXRhbFxcbm11c2UvTUdEU0pcXG5tdXNldHRlL01TXFxubXVzZXVtL01TXFxubXVzaC9NRFJTWkdcXG5tdXNoaW5lc3MvTVxcbm11c2hyb29tL0dTTURcXG5tdXNoeS9QVFJcXG5tdXNpYy9TTVxcbm11c2ljYWwvTVlTXFxubXVzaWNhbGUvTVNcXG5tdXNpY2FsaXR5L01cXG5tdXNpY2lhbi9TTVlcXG5tdXNpY2lhbnNoaXAvTVxcbm11c2ljb2xvZ2ljYWxcXG5tdXNpY29sb2dpc3QvTVNcXG5tdXNpY29sb2d5L01cXG5tdXNpbmcvTVlcXG5tdXNrL01cXG5tdXNrZWcvTVNcXG5tdXNrZWxsdW5nZS9NU1xcbm11c2tldC9NU1xcbm11c2tldGVlci9NU1xcbm11c2tldHJ5L01cXG5tdXNraWUvTVxcbm11c2tpbmVzcy9NXFxubXVza21lbG9uL1NNXFxubXVza294L01OXFxubXVza3JhdC9NU1xcbm11c2t5L1BUUlNcXG5tdXNsaW4vTVxcbm11c3MvTURTR1xcbm11c3NlbC9NU1xcbm11c3N5L1RSXFxubXVzdCd2ZVxcbm11c3QvTVJTWlxcbm11c3RhY2hlL01EU1xcbm11c3RhY2hpby9TTURcXG5tdXN0YW5nL01TXFxubXVzdGFyZC9NXFxubXVzdGVyL0dNRFxcbm11c3RpbHlcXG5tdXN0aW5lc3MvTVxcbm11c3RuJ3RcXG5tdXN0eS9QVFJcXG5tdXRhYmlsaXR5L01cXG5tdXRhYmx5XFxubXV0YWdlbi9NU1xcbm11dGFnZW5pY1xcbm11dGFudC9NU1xcbm11dGF0ZS9YR05WRFNcXG5tdXRhdGlvbi9NXFxubXV0YXRpb25hbFxcbm11dGUvTVlUR0RSU1BCXFxubXV0ZW5lc3MvTVxcbm11dGlsYXRlL0RTR05YXFxubXV0aWxhdGlvbi9NXFxubXV0aWxhdG9yL1NNXFxubXV0aW5lZXIvU01cXG5tdXRpbm91cy9ZXFxubXV0aW55L0dEU01cXG5tdXR0L01TXFxubXV0dGVyL1pHSk1EUlNcXG5tdXR0ZXJlci9NXFxubXV0dGVyaW5nL01cXG5tdXR0b24vTVxcbm11dHRvbmNob3BzL01cXG5tdXR0b255XFxubXV0dWFsL1lcXG5tdXR1YWxpdHkvTVxcbm11dW11dS9NU1xcbm11emFrXFxubXV6emlseVxcbm11enpsZS9EU01HXFxubXV6enkvUFxcbm15XFxubXljb2xvZ2lzdC9TTVxcbm15Y29sb2d5L01cXG5teWVsaXRpcy9NXFxubXluYS9NU1xcbm15b2NhcmRpYWxcXG5teW9jYXJkaXVtXFxubXlvcGlhL01cXG5teW9waWNcXG5teW9waWNhbGx5XFxubXlyaWFkL1NNXFxubXlybWlkb24vTVNcXG5teXJyaC9NXFxubXlydGxlL1NNXFxubXlzXFxubXlzZWxmXFxubXlzdGVyaW91cy9QWVxcbm15c3RlcmlvdXNuZXNzL01cXG5teXN0ZXJ5L1NNXFxubXlzdGljL1NNXFxubXlzdGljYWwvWVxcbm15c3RpY2lzbS9NXFxubXlzdGlmaWNhdGlvbi9DTVxcbm15c3RpZnkvQ0RTR05cXG5teXN0aXF1ZS9NXFxubXl0aC9NXFxubXl0aGljXFxubXl0aGljYWxcXG5teXRob2xvZ2ljYWxcXG5teXRob2xvZ2lzdC9TTVxcbm15dGhvbG9naXplL0RTR1xcbm15dGhvbG9neS9TTVxcbm15dGhzXFxubXl4b21hdG9zaXNcXG5uL0lLVEhcXG5uYWFuL1NcXG5uYWIvU1xcbm5hYmJlZFxcbm5hYmJpbmdcXG5uYWJvYi9TTVxcbm5hY2VsbGUvU01cXG5uYWNoby9TTVxcbm5hY3JlL01cXG5uYWNyZW91c1xcbm5hZGlyL1NNXFxubmFlXFxubmFmZi9SVFxcbm5hZy9TTVxcbm5hZ2dlZFxcbm5hZ2dlci9NU1xcbm5hZ2dpbmdcXG5uYWd3YXJlXFxubmFoXFxubmFpYWQvU01cXG5uYWlmL01TXFxubmFpbC9NRFNHXFxubmFpbGJydXNoL01TXFxubmFpdmUvUllUXFxubmFpdmV0ZS9NXFxubmFpdmV0eS9NXFxubmFrZWQvUFlcXG5uYWtlZG5lc3MvTVxcbm5hbWUnc1xcbm5hbWUvQUdEU1xcbm5hbWVhYmxlL1VcXG5uYW1lZC9VXFxubmFtZWxlc3MvWVxcbm5hbWVseVxcbm5hbWVwbGF0ZS9NU1xcbm5hbWVzYWtlL1NNXFxubmFubnkvU01cXG5uYW5vYm90L1NcXG5uYW5vbWV0ZXIvU1xcbm5hbm9zZWNvbmQvU01cXG5uYW5vdGVjaG5vbG9neS9TTVxcbm5hbm90dWJlXFxubmFwL1NNXFxubmFwYWxtL01EU0dcXG5uYXBlL01TXFxubmFwaHRoYS9NXFxubmFwaHRoYWxlbmUvTVxcbm5hcGtpbi9NU1xcbm5hcGxlc3NcXG5uYXBvbGVvbi9TTVxcbm5hcHBlZFxcbm5hcHBlci9NU1xcbm5hcHBpbmdcXG5uYXBweS9UUlNNXFxubmFyYy9NU1xcbm5hcmNpc3Npc20vTVxcbm5hcmNpc3Npc3QvTVNcXG5uYXJjaXNzaXN0aWNcXG5uYXJjaXNzdXMvTVxcbm5hcmNvbGVwc3kvTVxcbm5hcmNvbGVwdGljXFxubmFyY29zZXNcXG5uYXJjb3Npcy9NXFxubmFyY290aWMvU01cXG5uYXJjb3RpemF0aW9uL01cXG5uYXJjb3RpemUvR0RTXFxubmFya1xcbm5hcmt5XFxubmFycmF0ZS9HTlZEU1hcXG5uYXJyYXRpb24vTVxcbm5hcnJhdGl2ZS9TTVxcbm5hcnJhdG9yL1NNXFxubmFycm93L1BUR01EUllTXFxubmFycm93bmVzcy9NXFxubmFyd2hhbC9NU1xcbm5hcnlcXG5uYXNhbC9TTVlcXG5uYXNhbGl0eS9NXFxubmFzYWxpemF0aW9uL01cXG5uYXNhbGl6ZS9EU0dcXG5uYXNjZW5jZS9BTVxcbm5hc2NlbnQvQVxcbm5hc3RpbHlcXG5uYXN0aW5lc3MvTVxcbm5hc3R1cnRpdW0vU01cXG5uYXN0eS9QVFJcXG5uYXRhbFxcbm5hdGNoXFxubmF0aW9uL01TXFxubmF0aW9uYWwvTVlTXFxubmF0aW9uYWxpc20vTVxcbm5hdGlvbmFsaXN0L1NNXFxubmF0aW9uYWxpc3RpY1xcbm5hdGlvbmFsaXN0aWNhbGx5XFxubmF0aW9uYWxpdHkvU01cXG5uYXRpb25hbGl6YXRpb24vTVNcXG5uYXRpb25hbGl6ZS9DRFNHXFxubmF0aW9uaG9vZC9NXFxubmF0aW9ud2lkZVxcbm5hdGl2ZS9NU1xcbm5hdGl2aXR5L1NNXFxubmF0bFxcbm5hdHRlci9HTURTXFxubmF0dGlseVxcbm5hdHRpbmVzcy9NXFxubmF0dHkvUFRSXFxubmF0dXJhbCdzXFxubmF0dXJhbC9VUFlcXG5uYXR1cmFsaXNtL01cXG5uYXR1cmFsaXN0L1NNXFxubmF0dXJhbGlzdGljXFxubmF0dXJhbGl6YXRpb24vTVxcbm5hdHVyYWxpemUvRFNHXFxubmF0dXJhbG5lc3MvVU1cXG5uYXR1cmFsc1xcbm5hdHVyZSdzXFxubmF0dXJlL0NTXFxubmF0dXJpc21cXG5uYXR1cmlzdC9TXFxubmF1Z2h0L01TXFxubmF1Z2h0aWx5XFxubmF1Z2h0aW5lc3MvTVxcbm5hdWdodHkvUFRSXFxubmF1c2VhL01cXG5uYXVzZWFtXFxubmF1c2VhdGUvR0RTXFxubmF1c2VhdGluZy9ZXFxubmF1c2VvdXMvUFlcXG5uYXVzZW91c25lc3MvTVxcbm5hdXRpY2FsL1lcXG5uYXV0aWx1cy9NU1xcbm5hdmFsXFxubmF2ZS9NU1xcbm5hdmVsL1NNXFxubmF2aWdhYmlsaXR5L01cXG5uYXZpZ2FibGVcXG5uYXZpZ2F0ZS9EU0dOXFxubmF2aWdhdGlvbi9NXFxubmF2aWdhdGlvbmFsXFxubmF2aWdhdG9yL01TXFxubmF2dnkvU1xcbm5hdnkvU01cXG5uYXkvU01cXG5uYXlzYXllci9NU1xcbm5lJ2VyXFxubmVhbmRlcnRoYWwvTVNcXG5uZWFwL01TXFxubmVhci9EUllTUFRHXFxubmVhcmJ5XFxubmVhcm5lc3MvTVxcbm5lYXJzaG9yZVxcbm5lYXJzaWRlXFxubmVhcnNpZ2h0ZWQvWVBcXG5uZWFyc2lnaHRlZG5lc3MvTVxcbm5lYXQvTlJZUFhUXFxubmVhdGVuL0dEXFxubmVhdGhcXG5uZWF0bmVzcy9NXFxubmVidWxhL01cXG5uZWJ1bGFlXFxubmVidWxhclxcbm5lYnVsb3VzL1BZXFxubmVidWxvdXNuZXNzL01cXG5uZWNlc3NhcmlseS9VXFxubmVjZXNzYXJ5L1NNXFxubmVjZXNzaXRhdGUvRFNHXFxubmVjZXNzaXRvdXNcXG5uZWNlc3NpdHkvU01cXG5uZWNrL01EU0dcXG5uZWNrYmFuZC9TXFxubmVja2VyY2hpZWYvTVNcXG5uZWNraW5nL01cXG5uZWNrbGFjZS9NR0RTSlxcbm5lY2tsaW5lL01TXFxubmVja3RpZS9NU1xcbm5lY3JvbG9neS9NXFxubmVjcm9tYW5jZXIvU01cXG5uZWNyb21hbmN5L01cXG5uZWNyb3BoaWxpYVxcbm5lY3JvcGhpbGlhYy9TXFxubmVjcm9wb2xpcy9NU1xcbm5lY3Jvc2VzXFxubmVjcm9zaXMvTVxcbm5lY3JvdGljXFxubmVjdGFyL01cXG5uZWN0YXJpbmUvTVNcXG5uZWVcXG5uZWVkL01EU0dcXG5uZWVkZWQvVVxcbm5lZWRmdWwvWVxcbm5lZWRpbmVzcy9NXFxubmVlZGxlL01HRFNcXG5uZWVkbGVwb2ludC9NXFxubmVlZGxlc3MvWVBcXG5uZWVkbGVzc25lc3MvTVxcbm5lZWRsZXdvbWFuL01cXG5uZWVkbGV3b21lblxcbm5lZWRsZXdvcmsvTVxcbm5lZWRuJ3RcXG5uZWVkeS9QVFJcXG5uZWZhcmlvdXMvWVBcXG5uZWZhcmlvdXNuZXNzL01cXG5uZWdcXG5uZWdhdGUvRFNHTlZYXFxubmVnYXRpb24vTVxcbm5lZ2F0aXZlL01ZR1BEU1xcbm5lZ2F0aXZlbmVzcy9NXFxubmVnYXRpdmlzbS9NXFxubmVnYXRpdml0eS9NXFxubmVnbGVjdC9TR01EXFxubmVnbGVjdGZ1bC9ZUFxcbm5lZ2xlY3RmdWxuZXNzL01cXG5uZWdsaWdlZS9NU1xcbm5lZ2xpZ2VuY2UvTVxcbm5lZ2xpZ2VudC9ZXFxubmVnbGlnaWJsZVxcbm5lZ2xpZ2libHlcXG5uZWdvdGlhYmlsaXR5L01cXG5uZWdvdGlhYmxlL0FcXG5uZWdvdGlhdGUvQURTR05cXG5uZWdvdGlhdGlvbi9BTVxcbm5lZ290aWF0aW9uc1xcbm5lZ290aWF0b3IvTVNcXG5uZWdyaXR1ZGUvTVxcbm5lZ3JvXFxubmVncm9pZFxcbm5laWdoL01ER1xcbm5laWdoYm9yL1NNRFlHXFxubmVpZ2hib3Job29kL1NNXFxubmVpZ2hib3JsaW5lc3MvTVxcbm5laWdoc1xcbm5laXRoZXJcXG5uZWxzb24vU01cXG5uZW1hdG9kZS9TTVxcbm5lbWVzZXNcXG5uZW1lc2lzL01cXG5uZW9jbGFzc2ljXFxubmVvY2xhc3NpY2FsXFxubmVvY2xhc3NpY2lzbS9NXFxubmVvY29sb25pYWxpc20vTVxcbm5lb2NvbG9uaWFsaXN0L01TXFxubmVvY29uL1NNXFxubmVvY29uc2VydmF0aXZlL1NNXFxubmVvY29ydGV4XFxubmVvZHltaXVtL01cXG5uZW9saXRoaWNcXG5uZW9sb2dpc20vU01cXG5uZW9uL01cXG5uZW9uYXRhbFxcbm5lb25hdGUvTVNcXG5uZW9waGlsaWFcXG5uZW9waHl0ZS9NU1xcbm5lb3BsYXNtL01TXFxubmVvcGxhc3RpY1xcbm5lb3ByZW5lL01cXG5uZXBlbnRoZS9NXFxubmVwaGV3L1NNXFxubmVwaHJpdGUvTVxcbm5lcGhyaXRpY1xcbm5lcGhyaXRpcy9NXFxubmVwaHJvcGF0aHlcXG5uZXBvdGlzbS9NXFxubmVwb3Rpc3QvU01cXG5uZXBvdGlzdGljXFxubmVwdHVuaXVtL01cXG5uZXJkL01TXFxubmVyZHkvUlRcXG5uZXJ2ZSdzXFxubmVydmUvVURTR1xcbm5lcnZlbGVzcy9ZUFxcbm5lcnZlbGVzc25lc3MvTVxcbm5lcnZpbmVzcy9NXFxubmVydm91cy9ZUFxcbm5lcnZvdXNuZXNzL01cXG5uZXJ2eS9UUFJcXG5uZXN0L01EU0dcXG5uZXN0bGUvR0pEU1xcbm5lc3RsaW5nL01cXG5uZXQvU01cXG5uZXRiYWxsXFxubmV0Ym9vay9NU1xcbm5ldGhlclxcbm5ldGhlcm1vc3RcXG5uZXRoZXJ3b3JsZC9NXFxubmV0aXF1ZXR0ZS9TXFxubmV0dGVkXFxubmV0dGVyL1NcXG5uZXR0aW5nL01cXG5uZXR0bGUvTUdEU1xcbm5ldHRsZXNvbWVcXG5uZXR3b3JrL1NHTURcXG5uZXR3b3JraW5nL01cXG5uZXVyYWwvWVxcbm5ldXJhbGdpYS9NXFxubmV1cmFsZ2ljXFxubmV1cmFzdGhlbmlhL01cXG5uZXVyYXN0aGVuaWMvTVNcXG5uZXVyaXRpYy9NU1xcbm5ldXJpdGlzL01cXG5uZXVyb2xvZ2ljYWwvWVxcbm5ldXJvbG9naXN0L1NNXFxubmV1cm9sb2d5L01cXG5uZXVyb24vTVNcXG5uZXVyb25hbFxcbm5ldXJvc2NpZW5jZVxcbm5ldXJvc2VzXFxubmV1cm9zaXMvTVxcbm5ldXJvc3VyZ2Vvbi9NU1xcbm5ldXJvc3VyZ2VyeS9NXFxubmV1cm9zdXJnaWNhbFxcbm5ldXJvdGljL01TXFxubmV1cm90aWNhbGx5XFxubmV1cm90aWNpc21cXG5uZXVyb3RyYW5zbWl0dGVyL1NNXFxubmV1dFxcbm5ldXRlci9NREdTXFxubmV1dHJhbC9TTVlcXG5uZXV0cmFsaXNtL01cXG5uZXV0cmFsaXN0L1NNXFxubmV1dHJhbGl0eS9NXFxubmV1dHJhbGl6YXRpb24vTVxcbm5ldXRyYWxpemUvRFJTWkdcXG5uZXV0cmFsaXplci9NXFxubmV1dHJpbm8vU01cXG5uZXV0cm9uL1NNXFxubmV2ZXJcXG5uZXZlcm1vcmVcXG5uZXZlcnRoZWxlc3NcXG5uZXZpXFxubmV2dXMvTVxcbm5ldy9TVE1SWVBcXG5uZXdiaWUvTVNcXG5uZXdib3JuL1NNXFxubmV3Y29tZXIvU01cXG5uZXdlbC9TTVxcbm5ld2ZhbmdsZWRcXG5uZXdmb3VuZFxcbm5ld2xpbmUvU1xcbm5ld2x5d2VkL1NNXFxubmV3bmVzcy9NXFxubmV3cy9NXFxubmV3c2FnZW50L1NcXG5uZXdzYm95L1NNXFxubmV3c2Nhc3QvU01SWlxcbm5ld3NjYXN0ZXIvTVxcbm5ld3NkZWFsZXIvU01cXG5uZXdzZmxhc2gvU1xcbm5ld3NnaXJsL1NNXFxubmV3c2dyb3VwL01TXFxubmV3c2hvdW5kL1NcXG5uZXdzbGV0dGVyL01TXFxubmV3c21hbi9NXFxubmV3c21lblxcbm5ld3NwYXBlci9NU1xcbm5ld3NwYXBlcm1hbi9NXFxubmV3c3BhcGVybWVuXFxubmV3c3BhcGVyd29tYW4vTVxcbm5ld3NwYXBlcndvbWVuXFxubmV3c3BlYWtcXG5uZXdzcHJpbnQvTVxcbm5ld3NyZWFkZXIvU1xcbm5ld3NyZWVsL01TXFxubmV3c3Jvb20vTVNcXG5uZXdzc3RhbmQvU01cXG5uZXdzd2Vla2x5L1NNXFxubmV3c3dvbWFuL01cXG5uZXdzd29tZW5cXG5uZXdzd29ydGhpbmVzcy9NXFxubmV3c3dvcnRoeS9QXFxubmV3c3kvVFJcXG5uZXd0L01TXFxubmV3dG9uL01TXFxubmV4dC9NXFxubmV4dXMvTVNcXG5uaWFjaW4vTVxcbm5pYi9TTVxcbm5pYmJsZS9NWkdEUlNcXG5uaWJibGVyL01cXG5uaWNlL1BZVFJcXG5uaWNlbmVzcy9NXFxubmljZXR5L1NNXFxubmljaGUvU01cXG5uaWNrL01EUlNaR1xcbm5pY2tlbC9NU1xcbm5pY2tlbG9kZW9uL1NNXFxubmlja2VyL01ER1xcbm5pY2tsZS9TXFxubmlja25hbWUvRFNNR1xcbm5pY290aW5lL01cXG5uaWVjZS9TTVxcbm5pZmVkaXBpbmVcXG5uaWZmXFxubmlmZnlcXG5uaWZ0eS9UUlxcbm5pZ2dhL01TIVxcbm5pZ2dhcmQvU01ZXFxubmlnZ2FyZGxpbmVzcy9NXFxubmlnZ2F6LyFcXG5uaWdnZXIvU00hXFxubmlnZ2xlL01aR0RSU1xcbm5pZ2dsZXIvTVxcbm5pZ2gvUlRcXG5uaWdodC9TTVlcXG5uaWdodGNhcC9TTVxcbm5pZ2h0Y2xvdGhlcy9NXFxubmlnaHRjbHViL1NNXFxubmlnaHRjbHViYmVkXFxubmlnaHRjbHViYmluZ1xcbm5pZ2h0ZHJlc3MvTVNcXG5uaWdodGZhbGwvTVxcbm5pZ2h0Z293bi9TTVxcbm5pZ2h0aGF3ay9TTVxcbm5pZ2h0aWUvU01cXG5uaWdodGluZ2FsZS9TTVxcbm5pZ2h0bGlmZS9NXFxubmlnaHRsaWdodC9TXFxubmlnaHRsb25nXFxubmlnaHRtYXJlL1NNXFxubmlnaHRtYXJpc2hcXG5uaWdodHNoYWRlL1NNXFxubmlnaHRzaGlydC9TTVxcbm5pZ2h0c3BvdC9NU1xcbm5pZ2h0c3RhbmQvU01cXG5uaWdodHN0aWNrL1NNXFxubmlnaHR0aW1lL01cXG5uaWdodHdhdGNobWFuXFxubmlnaHR3YXRjaG1lblxcbm5pZ2h0d2Vhci9NXFxubmloaWxpc20vTVxcbm5paGlsaXN0L01TXFxubmloaWxpc3RpY1xcbm5pbC9NXFxubmltYmlcXG5uaW1ibGUvVFBSXFxubmltYmxlbmVzcy9NXFxubmltYmx5XFxubmltYnVzL01cXG5uaW1ieVxcbm5pbXJvZC9NU1xcbm5pbmNvbXBvb3AvU01cXG5uaW5lL01TXFxubmluZXBpbi9NU1xcbm5pbmVwaW5zL01cXG5uaW5ldGVlbi9TTUhcXG5uaW5ldGVlbnRoL01cXG5uaW5ldGVlbnRoc1xcbm5pbmV0aWV0aC9NXFxubmluZXRpZXRoc1xcbm5pbmV0eS9IU01cXG5uaW5qYS9TTVxcbm5pbm55L1NNXFxubmludGgvTVxcbm5pbnRoc1xcbm5pb2JpdW0vTVxcbm5pcC9TTVxcbm5pcHBlZFxcbm5pcHBlci9NU1xcbm5pcHBpbmVzcy9NXFxubmlwcGluZ1xcbm5pcHBsZS9NU1xcbm5pcHB5L1RQUlxcbm5pcnZhbmEvTVxcbm5pc2VpL01cXG5uaXQvU01SXFxubml0ZXIvTVxcbm5pdHBpY2svU1pHRFJcXG5uaXRwaWNrZXIvTVxcbm5pdHBpY2tpbmcvTVxcbm5pdHJhdGUvRFNNR05cXG5uaXRyYXRpb24vTVxcbm5pdHJpY1xcbm5pdHJpZmljYXRpb24vTVxcbm5pdHJpdGUvU01cXG5uaXRyb1xcbm5pdHJvY2VsbHVsb3NlL01cXG5uaXRyb2dlbi9NXFxubml0cm9nZW5vdXNcXG5uaXRyb2dseWNlcmluL01cXG5uaXR3aXQvTVNcXG5uaXgvR01EU1xcbm5vL1NNXFxubm9iL1NZXFxubm9iYmxlL0dEU1xcbm5vYmVsaXVtL01cXG5ub2JpbGl0eS9NXFxubm9ibGUvUlNQTVRcXG5ub2JsZW1hbi9NXFxubm9ibGVtZW5cXG5ub2JsZW5lc3MvTVxcbm5vYmxld29tYW4vTVxcbm5vYmxld29tZW5cXG5ub2JvZHkvU01cXG5ub2N0dXJuYWwvWVxcbm5vY3R1cm5lL01TXFxubm9kL1NNXFxubm9kYWxcXG5ub2RkZWRcXG5ub2RkaW5nXFxubm9kZGxlL01TXFxubm9kZHlcXG5ub2RlL01TXFxubm9kdWxhclxcbm5vZHVsZS9NU1xcbm5vZWwvTVNcXG5ub2VzXFxubm9nZ2luL01TXFxubm9ob3dcXG5ub2lzZS9EU01HXFxubm9pc2VsZXNzL1BZXFxubm9pc2VsZXNzbmVzcy9NXFxubm9pc2VtYWtlci9NU1xcbm5vaXNpbHlcXG5ub2lzaW5lc3MvTVxcbm5vaXNvbWVcXG5ub2lzeS9QVFJcXG5ub21hZC9TTVxcbm5vbWFkaWNcXG5ub21lbmNsYXR1cmUvTVNcXG5ub21pbmFsL1lcXG5ub21pbmF0ZS9BQ0dOVkRTXFxubm9taW5hdGlvbidzL0FcXG5ub21pbmF0aW9uL0NTTVxcbm5vbWluYXRpdmUvU01cXG5ub21pbmF0b3IvQ1NNXFxubm9taW5lZS9NU1xcbm5vblxcbm5vbmFicmFzaXZlXFxubm9uYWJzb3JiZW50L1NNXFxubm9uYWNhZGVtaWNcXG5ub25hY2NlcHRhbmNlL01cXG5ub25hY2lkXFxubm9uYWN0aXZlL01TXFxubm9uYWRkaWN0aXZlXFxubm9uYWRoZXNpdmVcXG5ub25hZGphY2VudFxcbm5vbmFkanVzdGFibGVcXG5ub25hZG1pbmlzdHJhdGl2ZVxcbm5vbmFnZS9NU1xcbm5vbmFnZW5hcmlhbi9NU1xcbm5vbmFnZ3Jlc3Npb24vTVxcbm5vbmFsY29ob2xpY1xcbm5vbmFsaWduZWRcXG5ub25hbGlnbm1lbnQvTVxcbm5vbmFsbGVyZ2ljXFxubm9uYXBwZWFyYW5jZS9NU1xcbm5vbmFzc2lnbmFibGVcXG5ub25hdGhsZXRpY1xcbm5vbmF0dGVuZGFuY2UvTVxcbm5vbmF1dG9tb3RpdmVcXG5ub25hdmFpbGFiaWxpdHkvTVxcbm5vbmJhc2ljXFxubm9uYmVsaWV2ZXIvTVNcXG5ub25iZWxsaWdlcmVudC9NU1xcbm5vbmJpbmRpbmdcXG5ub25icmVha2FibGVcXG5ub25idXJuYWJsZVxcbm5vbmNhbG9yaWNcXG5ub25jYW5jZXJvdXNcXG5ub25jZS9NXFxubm9uY2hhbGFuY2UvTVxcbm5vbmNoYWxhbnQvWVxcbm5vbmNoYXJnZWFibGVcXG5ub25jbGVyaWNhbC9NU1xcbm5vbmNsaW5pY2FsXFxubm9uY29sbGVjdGFibGVcXG5ub25jb20vTVNcXG5ub25jb21iYXRcXG5ub25jb21iYXRhbnQvTVNcXG5ub25jb21idXN0aWJsZVxcbm5vbmNvbW1lcmNpYWwvTVNcXG5ub25jb21taXR0YWwvWVxcbm5vbmNvbW11bmljYWJsZVxcbm5vbmNvbXBldGluZ1xcbm5vbmNvbXBldGl0aXZlXFxubm9uY29tcGxpYW5jZS9NXFxubm9uY29tcGx5aW5nXFxubm9uY29tcHJlaGVuZGluZ1xcbm5vbmNvbmR1Y3RpbmdcXG5ub25jb25kdWN0b3IvTVNcXG5ub25jb25mb3JtaW5nXFxubm9uY29uZm9ybWlzbVxcbm5vbmNvbmZvcm1pc3QvTVNcXG5ub25jb25mb3JtaXR5L01cXG5ub25jb25zZWN1dGl2ZVxcbm5vbmNvbnN0cnVjdGl2ZVxcbm5vbmNvbnRhZ2lvdXNcXG5ub25jb250aW51b3VzXFxubm9uY29udHJpYnV0aW5nXFxubm9uY29udHJpYnV0b3J5XFxubm9uY29udHJvdmVyc2lhbFxcbm5vbmNvbnZlcnRpYmxlXFxubm9uY29vcGVyYXRpb24vTVxcbm5vbmNvcnJvZGluZ1xcbm5vbmNvcnJvc2l2ZVxcbm5vbmNyZWRpdFxcbm5vbmNyaW1pbmFsL1NNXFxubm9uY3JpdGljYWxcXG5ub25jcnlzdGFsbGluZVxcbm5vbmN1bXVsYXRpdmVcXG5ub25jdXN0b2RpYWxcXG5ub25kYWlyeVxcbm5vbmRlZHVjdGlibGUvTVxcbm5vbmRlbGl2ZXJ5L1NNXFxubm9uZGVtb2NyYXRpY1xcbm5vbmRlbm9taW5hdGlvbmFsXFxubm9uZGVwYXJ0bWVudGFsXFxubm9uZGVwcmVjaWF0aW5nXFxubm9uZGVzY3JpcHRcXG5ub25kZXN0cnVjdGl2ZVxcbm5vbmRldGFjaGFibGVcXG5ub25kZXRlcm1pbmlzbVxcbm5vbmRldGVybWluaXN0aWNcXG5ub25kaXNjaXBsaW5hcnlcXG5ub25kaXNjbG9zdXJlL01cXG5ub25kaXNjcmltaW5hdGlvbi9NXFxubm9uZGlzY3JpbWluYXRvcnlcXG5ub25kcmFtYXRpY1xcbm5vbmRyaW5rZXIvTVNcXG5ub25kcnlpbmdcXG5ub25lXFxubm9uZWR1Y2F0aW9uYWxcXG5ub25lZmZlY3RpdmVcXG5ub25lbGFzdGljXFxubm9uZWxlY3RyaWNcXG5ub25lbGVjdHJpY2FsXFxubm9uZW1wdHlcXG5ub25lbmZvcmNlYWJsZVxcbm5vbmVudGl0eS9TTVxcbm5vbmVxdWl2YWxlbnQvTVNcXG5ub25lc3NlbnRpYWxcXG5ub25lc3VjaC9NU1xcbm5vbmV0aGVsZXNzXFxubm9uZXZlbnQvTVNcXG5ub25leGNoYW5nZWFibGVcXG5ub25leGNsdXNpdmVcXG5ub25leGVtcHQvTVxcbm5vbmV4aXN0ZW5jZS9NXFxubm9uZXhpc3RlbnRcXG5ub25leHBsb3NpdmUvTVNcXG5ub25mYWN0dWFsXFxubm9uZmFkaW5nXFxubm9uZmF0XFxubm9uZmF0YWxcXG5ub25mYXR0ZW5pbmdcXG5ub25mZXJyb3VzXFxubm9uZmljdGlvbi9NXFxubm9uZmljdGlvbmFsXFxubm9uZmxhbW1hYmxlXFxubm9uZmxvd2VyaW5nXFxubm9uZmx1Y3R1YXRpbmdcXG5ub25mbHlpbmdcXG5ub25mb29kL01cXG5ub25mcmVlemluZ1xcbm5vbmZ1bmN0aW9uYWxcXG5ub25nb3Zlcm5tZW50YWxcXG5ub25ncmFudWxhclxcbm5vbmhhemFyZG91c1xcbm5vbmhlcmVkaXRhcnlcXG5ub25odW1hblxcbm5vbmlkZW50aWNhbFxcbm5vbmluY2x1c2l2ZVxcbm5vbmluZGVwZW5kZW50XFxubm9uaW5kdXN0cmlhbFxcbm5vbmluZmVjdGlvdXNcXG5ub25pbmZsYW1tYXRvcnlcXG5ub25pbmZsYXRpb25hcnlcXG5ub25pbmZsZWN0ZWRcXG5ub25pbnRlbGxlY3R1YWwvTVNcXG5ub25pbnRlcmNoYW5nZWFibGVcXG5ub25pbnRlcmZlcmVuY2UvTVxcbm5vbmludGVydmVudGlvbi9NXFxubm9uaW50b3hpY2F0aW5nXFxubm9uaW52YXNpdmVcXG5ub25pcnJpdGF0aW5nXFxubm9uaXNzdWVcXG5ub25qdWRnbWVudGFsXFxubm9uanVkaWNpYWxcXG5ub25sZWdhbFxcbm5vbmxldGhhbFxcbm5vbmxpbmVhclxcbm5vbmxpdGVyYXJ5XFxubm9ubGl2aW5nL01cXG5ub25tYWduZXRpY1xcbm5vbm1hbGlnbmFudFxcbm5vbm1lbWJlci9NU1xcbm5vbm1ldGFsL1NNXFxubm9ubWV0YWxsaWNcXG5ub25taWdyYXRvcnlcXG5ub25taWxpdGFudFxcbm5vbm1pbGl0YXJ5XFxubm9ubmFyY290aWMvU01cXG5ub25uYXRpdmUvTVNcXG5ub25uZWdvdGlhYmxlXFxubm9ubnVjbGVhclxcbm5vbm51bWVyaWNhbFxcbm5vbm9iamVjdGl2ZVxcbm5vbm9ibGlnYXRvcnlcXG5ub25vYnNlcnZhbmNlL01cXG5ub25vYnNlcnZhbnRcXG5ub25vY2N1cGF0aW9uYWxcXG5ub25vY2N1cmVuY2VcXG5ub25vZmZpY2lhbFxcbm5vbm9wZXJhdGlvbmFsXFxubm9ub3BlcmF0aXZlXFxubm9ucGFyYWxsZWwvTVNcXG5ub25wYXJlaWwvTVNcXG5ub25wYXJ0aWNpcGFudC9NU1xcbm5vbnBhcnRpY2lwYXRpbmdcXG5ub25wYXJ0aXNhbi9TTVxcbm5vbnBheWluZ1xcbm5vbnBheW1lbnQvU01cXG5ub25wZXJmb3JtYW5jZS9NXFxubm9ucGVyZm9ybWluZ1xcbm5vbnBlcmlzaGFibGVcXG5ub25wZXJzb24vTVNcXG5ub25waHlzaWNhbC9ZXFxubm9ucGx1cy9TXFxubm9ucGx1c3NlZFxcbm5vbnBsdXNzaW5nXFxubm9ucG9pc29ub3VzXFxubm9ucG9saXRpY2FsXFxubm9ucG9sbHV0aW5nXFxubm9ucG9yb3VzXFxubm9ucHJhY3RpY2luZ1xcbm5vbnByZWp1ZGljaWFsXFxubm9ucHJlc2NyaXB0aW9uXFxubm9ucHJvZHVjdGl2ZVxcbm5vbnByb2Zlc3Npb25hbC9TTVxcbm5vbnByb2ZpdC9TTUJcXG5ub25wcm9saWZlcmF0aW9uL01cXG5ub25wdWJsaWNcXG5ub25wdW5pc2hhYmxlXFxubm9ucmFjaWFsXFxubm9ucmFkaW9hY3RpdmVcXG5ub25yYW5kb21cXG5ub25yZWFjdGl2ZVxcbm5vbnJlY2lwcm9jYWwvU01cXG5ub25yZWNpcHJvY2F0aW5nXFxubm9ucmVjb2duaXRpb24vTVxcbm5vbnJlY292ZXJhYmxlXFxubm9ucmVjdXJyaW5nXFxubm9ucmVkZWVtYWJsZVxcbm5vbnJlZmlsbGFibGVcXG5ub25yZWZ1bmRhYmxlXFxubm9ucmVsaWdpb3VzXFxubm9ucmVuZXdhYmxlXFxubm9ucmVwcmVzZW50YXRpb25hbFxcbm5vbnJlc2lkZW50L01TXFxubm9ucmVzaWRlbnRpYWxcXG5ub25yZXNpZHVhbC9NXFxubm9ucmVzaXN0YW5jZS9NXFxubm9ucmVzaXN0YW50XFxubm9ucmVzdHJpY3RpdmVcXG5ub25yZXR1cm5hYmxlL01TXFxubm9ucmh5dGhtaWNcXG5ub25yaWdpZFxcbm5vbnNhbGFyaWVkXFxubm9uc2NoZWR1bGVkXFxubm9uc2NpZW50aWZpY1xcbm5vbnNjb3JpbmdcXG5ub25zZWFzb25hbFxcbm5vbnNlY3Rhcmlhblxcbm5vbnNlY3VsYXJcXG5ub25zZWdyZWdhdGVkXFxubm9uc2Vuc2UvTVxcbm5vbnNlbnNpY2FsL1lcXG5ub25zZW5zaXRpdmVcXG5ub25zZXhpc3RcXG5ub25zZXh1YWxcXG5ub25za2lkXFxubm9uc2xpcFxcbm5vbnNtb2tlci9TTVxcbm5vbnNtb2tpbmdcXG5ub25zb2NpYWxcXG5ub25zcGVha2luZ1xcbm5vbnNwZWNpYWxpc3QvTVNcXG5ub25zcGVjaWFsaXppbmdcXG5ub25zcGVjaWZpY1xcbm5vbnNwaXJpdHVhbC9TTVxcbm5vbnN0YWluaW5nXFxubm9uc3RhbmRhcmRcXG5ub25zdGFydGVyL01TXFxubm9uc3RpY2tcXG5ub25zdG9wXFxubm9uc3RyYXRlZ2ljXFxubm9uc3RyaWtpbmdcXG5ub25zdHJ1Y3R1cmFsXFxubm9uc3VjY2Vzc2l2ZVxcbm5vbnN1cHBvcnQvR01cXG5ub25zdXJnaWNhbFxcbm5vbnN1c3RhaW5pbmdcXG5ub25zeW1wYXRoaXplci9NXFxubm9udGFybmlzaGFibGVcXG5ub250YXhhYmxlXFxubm9udGVjaG5pY2FsXFxubm9udGVudXJlZFxcbm5vbnRoZWF0cmljYWxcXG5ub250aGlua2luZ1xcbm5vbnRocmVhdGVuaW5nXFxubm9udG94aWNcXG5ub250cmFkaXRpb25hbFxcbm5vbnRyYW5zZmVyYWJsZVxcbm5vbnRyYW5zcGFyZW50XFxubm9udHJpdmlhbFxcbm5vbnRyb3BpY2FsXFxubm9udW5pZm9ybVxcbm5vbnVuaW9uXFxubm9udXNlci9NU1xcbm5vbnZlbm9tb3VzXFxubm9udmVyYmFsXFxubm9udmlhYmxlXFxubm9udmlvbGVuY2UvTVxcbm5vbnZpb2xlbnQvWVxcbm5vbnZpcnVsZW50XFxubm9udm9jYWxcXG5ub252b2NhdGlvbmFsXFxubm9udm9sYXRpbGVcXG5ub252b3Rlci9NU1xcbm5vbnZvdGluZ1xcbm5vbndoaXRlL01TXFxubm9ud29ya2luZ1xcbm5vbnlpZWxkaW5nXFxubm9uemVyb1xcbm5vb2RsZS9NR0RTXFxubm9vay9NU1xcbm5vb2tpZVxcbm5vb2t5XFxubm9vbi9NXFxubm9vbmRheS9NXFxubm9vbnRpZGUvTVxcbm5vb250aW1lL01cXG5ub29zZS9TTVxcbm5vcGVcXG5ub3JcXG5ub3InZWFzdGVyXFxubm9ybS9NU1xcbm5vcm1hbC9NWVxcbm5vcm1hbGN5L01cXG5ub3JtYWxpdHkvTVxcbm5vcm1hbGl6YXRpb24vTVxcbm5vcm1hbGl6ZS9EU0dcXG5ub3JtYXRpdmVcXG5ub3J0aC9aTVJcXG5ub3J0aGJvdW5kXFxubm9ydGhlYXN0L01SWlxcbm5vcnRoZWFzdGVyL01ZXFxubm9ydGhlYXN0ZXJuXFxubm9ydGhlYXN0d2FyZC9TXFxubm9ydGhlci9NWVxcbm5vcnRoZXJseS9TTVxcbm5vcnRoZXJuL1pSXFxubm9ydGhlcm5lci9NXFxubm9ydGhlcm5tb3N0XFxubm9ydGh3YXJkL1NcXG5ub3J0aHdlc3QvWk1SXFxubm9ydGh3ZXN0ZXIvTVlcXG5ub3J0aHdlc3Rlcm5cXG5ub3J0aHdlc3R3YXJkL1NcXG5ub3NlL01HRFNcXG5ub3NlYmFnL1NcXG5ub3NlYmxlZWQvTVNcXG5ub3NlY29uZS9TTVxcbm5vc2VkaXZlL0RTTUdcXG5ub3NlZ2F5L1NNXFxubm9zaC9NRFJTWkdcXG5ub3NoZXIvTVxcbm5vc2lseVxcbm5vc2luZXNzL01cXG5ub3N0YWxnaWEvTVxcbm5vc3RhbGdpY1xcbm5vc3RhbGdpY2FsbHlcXG5ub3N0cmlsL01TXFxubm9zdHJ1bS9NU1xcbm5vc3kvUlBUXFxubm90L0JcXG5ub3RhYmlsaXR5L1NNXFxubm90YWJsZS9TTVxcbm5vdGFibHlcXG5ub3RhcmlhbFxcbm5vdGFyaXphdGlvbi9NXFxubm90YXJpemUvR0RTXFxubm90YXJ5L1NNXFxubm90YXRlL0dEU1xcbm5vdGF0aW9uL0ZDU01cXG5ub3RjaC9HTURTXFxubm90ZSdzXFxubm90ZS9GQ1NER1xcbm5vdGVib29rL01TXFxubm90ZWxldC9TXFxubm90ZXBhZC9TXFxubm90ZXBhcGVyL01cXG5ub3Rld29ydGhpbmVzcy9NXFxubm90ZXdvcnRoeS9QXFxubm90aGluZy9QU01cXG5ub3RoaW5nbmVzcy9NXFxubm90aWNlL01HRFNcXG5ub3RpY2VhYmxlL1VcXG5ub3RpY2VhYmx5XFxubm90aWNlYm9hcmQvU1xcbm5vdGljZWQvVVxcbm5vdGlmaWFibGVcXG5ub3RpZmljYXRpb24vTVxcbm5vdGlmaWVyL01cXG5ub3RpZnkvTkRSU1haR1xcbm5vdGlvbi9NU1xcbm5vdGlvbmFsL1lcXG5ub3RvcmlldHkvTVxcbm5vdG9yaW91cy9ZXFxubm90d2l0aHN0YW5kaW5nXFxubm90d29yay9TXFxubm91Z2F0L01TXFxubm91bi9LTVNcXG5ub3VyaXNoL0RTTEdcXG5ub3VyaXNobWVudC9NXFxubm91c1xcbm5vdmEvTVNcXG5ub3ZhZVxcbm5vdmVsL1NNXFxubm92ZWxldHRlL1NNXFxubm92ZWxpc3QvU01cXG5ub3ZlbGl6YXRpb24vTVNcXG5ub3ZlbGl6ZS9EU0dcXG5ub3ZlbGxhL01TXFxubm92ZWx0eS9TTVxcbm5vdmVuYS9NU1xcbm5vdmVuZVxcbm5vdmljZS9NU1xcbm5vdml0aWF0ZS9NU1xcbm5vdy9NXFxubm93YWRheXMvTVxcbm5vd2F5L1NcXG5ub3doZXJlL01cXG5ub3dpc2VcXG5ub3d0XFxubm94aW91c1xcbm5venpsZS9NU1xcbm51L1NNXFxubnVhbmNlL01EU1xcbm51Yi9TTVxcbm51YmJpbi9NU1xcbm51YmJ5L1RSXFxubnViaWxlXFxubnVjbGVhci9LXFxubnVjbGVhdGUvRFNHTlxcbm51Y2xlYXRpb24vTVxcbm51Y2xlaVxcbm51Y2xlaWNcXG5udWNsZW9saVxcbm51Y2xlb2x1cy9NXFxubnVjbGVvbi9TTVxcbm51Y2xlb3NpZGVcXG5udWNsZW90aWRlXFxubnVjbGV1cy9NXFxubnVkZS9NVFJTXFxubnVkZ2UvR0RTTVxcbm51ZGlzbS9NXFxubnVkaXN0L1NNXFxubnVkaXR5L01cXG5udWdhdG9yeVxcbm51Z2dldC9TTVxcbm51aXNhbmNlL01TXFxubnVrZS9NR0RTXFxubnVsbC9TXFxubnVsbGlmaWNhdGlvbi9NXFxubnVsbGlmeS9ORFNHXFxubnVsbGl0eS9NXFxubnVtYi9aVEdQRFJZU1xcbm51bWJlcidzXFxubnVtYmVyL0FTREdcXG5udW1iZXJlZC9VXFxubnVtYmVybGVzc1xcbm51bWJuZXNzL01cXG5udW1lcmFibGUvSVxcbm51bWVyYWN5L0lNXFxubnVtZXJhbC9TTVxcbm51bWVyYXRlL1hHTkRTXFxubnVtZXJhdGlvbi9NXFxubnVtZXJhdG9yL01TXFxubnVtZXJpY1xcbm51bWVyaWNhbC9ZXFxubnVtZXJvbG9naXN0L01TXFxubnVtZXJvbG9neS9NXFxubnVtZXJvdXMvWVxcbm51bWlub3VzXFxubnVtaXNtYXRpYy9TXFxubnVtaXNtYXRpY3MvTVxcbm51bWlzbWF0aXN0L1NNXFxubnVtc2t1bGwvTVNcXG5udW4vU01cXG5udW5jaW8vU01cXG5udW5uZXJ5L1NNXFxubnVwdGlhbC9NU1xcbm51cnNlL01aR0RSU1xcbm51cnNlbGluZ3NcXG5udXJzZW1haWQvTVNcXG5udXJzZXIvTVxcbm51cnNlcnkvU01cXG5udXJzZXJ5bWFuL01cXG5udXJzZXJ5bWVuXFxubnVyc2luZy9NXFxubnVyc2xpbmcvU01cXG5udXJ0dXJlL0RSU01aR1xcbm51cnR1cmVyL01cXG5udXQvU01cXG5udXRjYXNlL1NcXG5udXRjcmFja2VyL01TXFxubnV0aGF0Y2gvTVNcXG5udXRob3VzZS9TXFxubnV0bWVhdC9TTVxcbm51dG1lZy9TTVxcbm51dHBpY2svU01cXG5udXRyaWEvU01cXG5udXRyaWVudC9NU1xcbm51dHJpbWVudC9NU1xcbm51dHJpdGlvbi9NXFxubnV0cml0aW9uYWwvWVxcbm51dHJpdGlvbmlzdC9TTVxcbm51dHJpdGlvdXMvWVBcXG5udXRyaXRpb3VzbmVzcy9NXFxubnV0cml0aXZlXFxubnV0c2hlbGwvTVNcXG5udXR0ZWRcXG5udXR0ZXIvU1xcbm51dHRpbmVzcy9NXFxubnV0dGluZ1xcbm51dHR5L1JUUFxcbm51enpsZS9EUlNNWkdcXG5udXp6bGVyL01cXG5ueWJibGUvU1xcbm55bG9uL01TXFxubnlsb25zL01cXG5ueW1waC9NXFxubnltcGhldC9NU1xcbm55bXBoby9TXFxubnltcGhvbWFuaWEvTVxcbm55bXBob21hbmlhYy9TTVxcbm55bXBoc1xcbm9cXG5vJ2Nsb2NrXFxubydlclxcbm9hZi9TTVxcbm9hZmlzaC9QWVxcbm9hZmlzaG5lc3MvTVxcbm9hay9TTU5cXG5vYWt1bS9NXFxub2FyL1NHTURcXG5vYXJsb2NrL1NNXFxub2Fyc21hbi9NXFxub2Fyc21lblxcbm9hcnN3b21hbi9NXFxub2Fyc3dvbWVuXFxub2FzZXNcXG5vYXNpcy9NXFxub2F0L1NNTlxcbm9hdGNha2UvU01cXG5vYXRoL01cXG5vYXRoc1xcbm9hdG1lYWwvTVxcbm9hdHMvTVxcbm9iL1NcXG5vYmJsaWdhdG8vTVNcXG5vYmR1cmFjeS9NXFxub2JkdXJhdGUvUFlcXG5vYmR1cmF0ZW5lc3MvTVxcbm9iZWRpZW5jZS9FTVxcbm9iZWRpZW50L0VZXFxub2JlaXNhbmNlL1NNXFxub2JlaXNhbnRcXG5vYmVsaXNrL01TXFxub2Jlc2VcXG5vYmVzaXR5L01cXG5vYmV5L0VEU0dcXG5vYmZ1c2NhdGUvR05YRFNcXG5vYmZ1c2NhdGlvbi9NXFxub2JpL1NNXFxub2JpdC9NU1xcbm9iaXR1YXJ5L1NNXFxub2JqXFxub2JqZWN0L1NHVk1EXFxub2JqZWN0aWZ5L05HRFNcXG5vYmplY3Rpb24vU01CXFxub2JqZWN0aW9uYWJsZS9VXFxub2JqZWN0aW9uYWJseVxcbm9iamVjdGl2ZS9TTVlQXFxub2JqZWN0aXZlbmVzcy9NXFxub2JqZWN0aXZpdHkvTVxcbm9iamVjdG9yL01TXFxub2JqdXJnYXRlL1hHTkRTXFxub2JqdXJnYXRpb24vTVxcbm9ibGF0ZS9OWFxcbm9ibGF0aW9uL01cXG5vYmxpZ2F0ZS9EU1hHTlxcbm9ibGlnYXRpb24vTVxcbm9ibGlnYXRvcmlseVxcbm9ibGlnYXRvcnlcXG5vYmxpZ2UvRUdEU1xcbm9ibGlnaW5nL1lcXG5vYmxpcXVlL1NNWVBcXG5vYmxpcXVlbmVzcy9NXFxub2JsaXF1aXR5L01cXG5vYmxpdGVyYXRlL0RTR05cXG5vYmxpdGVyYXRpb24vTVxcbm9ibGl2aW9uL01cXG5vYmxpdmlvdXMvWVBcXG5vYmxpdmlvdXNuZXNzL01cXG5vYmxvbmcvTVNcXG5vYmxvcXV5L01cXG5vYm5veGlvdXMvWVBcXG5vYm5veGlvdXNuZXNzL01cXG5vYm9lL01TXFxub2JvaXN0L01TXFxub2JzY2VuZS9SWVRcXG5vYnNjZW5pdHkvU01cXG5vYnNjdXJhbnRpc20vTVxcbm9ic2N1cmFudGlzdC9TTVxcbm9ic2N1cmUvRFJTWVRHXFxub2JzY3VyaXR5L1NNXFxub2JzZXF1aWVzXFxub2JzZXF1aW91cy9QWVxcbm9ic2VxdWlvdXNuZXNzL01cXG5vYnNlcXV5L01cXG5vYnNlcnZhYmx5XFxub2JzZXJ2YW5jZS9NU1xcbm9ic2VydmFudC9ZXFxub2JzZXJ2YXRpb24vU01cXG5vYnNlcnZhdGlvbmFsXFxub2JzZXJ2YXRvcnkvU01cXG5vYnNlcnZlL0RSU0JaR1xcbm9ic2VydmVkL1VcXG5vYnNlcnZlci9NXFxub2JzZXNzL0RTR1ZcXG5vYnNlc3Npb24vU01cXG5vYnNlc3Npb25hbC9ZXFxub2JzZXNzaXZlL1BTTVlcXG5vYnNlc3NpdmVuZXNzL01cXG5vYnNpZGlhbi9NXFxub2Jzb2xlc2NlL0RTR1xcbm9ic29sZXNjZW5jZS9NXFxub2Jzb2xlc2NlbnRcXG5vYnNvbGV0ZS9HRFNcXG5vYnN0YWNsZS9NU1xcbm9ic3RldHJpYy9TXFxub2JzdGV0cmljYWxcXG5vYnN0ZXRyaWNpYW4vU01cXG5vYnN0ZXRyaWNzL01cXG5vYnN0aW5hY3kvTVxcbm9ic3RpbmF0ZS9ZXFxub2JzdHJlcGVyb3VzL1lQXFxub2JzdHJlcGVyb3VzbmVzcy9NXFxub2JzdHJ1Y3QvREdWU1xcbm9ic3RydWN0ZWQvVVxcbm9ic3RydWN0aW9uL1NNXFxub2JzdHJ1Y3Rpb25pc20vTVxcbm9ic3RydWN0aW9uaXN0L01TXFxub2JzdHJ1Y3RpdmUvWVBcXG5vYnN0cnVjdGl2ZW5lc3MvTVxcbm9idGFpbi9EQkxHU1xcbm9idGFpbmFibGUvVVxcbm9idGFpbm1lbnQvTVxcbm9idHJ1ZGUvRFNHXFxub2J0cnVzaW9uL01cXG5vYnRydXNpdmUvVVBZXFxub2J0cnVzaXZlbmVzcy9VTVxcbm9idHVzZS9ZVFJQXFxub2J0dXNlbmVzcy9NXFxub2J2ZXJzZS9TTVxcbm9idmlhdGUvRFNHTlxcbm9idmlhdGlvbi9NXFxub2J2aW91cy9QWVxcbm9idmlvdXNuZXNzL01cXG5vY2FyaW5hL01TXFxub2NjYXNpb24vR01EU1xcbm9jY2FzaW9uYWwvWVxcbm9jY2lkZW50YWwvU01cXG5vY2NsdWRlL0dEU1xcbm9jY2x1c2lvbi9TTVxcbm9jY2x1c2l2ZVxcbm9jY3VsdC9NXFxub2NjdWx0aXNtL01cXG5vY2N1bHRpc3QvU01cXG5vY2N1cGFuY3kvTVxcbm9jY3VwYW50L1NNXFxub2NjdXBhdGlvbi9BTVxcbm9jY3VwYXRpb25hbC9ZXFxub2NjdXBhdGlvbnNcXG5vY2N1cGllZC9VXFxub2NjdXBpZXIvU01cXG5vY2N1cHkvQURTR1xcbm9jY3VyL0FTXFxub2NjdXJyZWQvQVxcbm9jY3VycmVuY2UvU01cXG5vY2N1cnJpbmcvQVxcbm9jZWFuL1NNXFxub2NlYW5mcm9udC9TTVxcbm9jZWFuZ29pbmdcXG5vY2VhbmljL01cXG5vY2Vhbm9ncmFwaGVyL1NNXFxub2NlYW5vZ3JhcGhpY1xcbm9jZWFub2dyYXBoeS9NXFxub2NlYW5vbG9neS9NXFxub2NlbG90L01TXFxub2NoL1JcXG5vY2hlci9NXFxub2NrZXIvU1xcbm9jdGFnb24vTVNcXG5vY3RhZ29uYWxcXG5vY3RhbFxcbm9jdGFuZS9NU1xcbm9jdGF2ZS9NU1xcbm9jdGF2by9NU1xcbm9jdGV0L1NNXFxub2N0b2dlbmFyaWFuL1NNXFxub2N0b3B1cy9NU1xcbm9jdWxhci9NU1xcbm9jdWxpc3QvU01cXG5vY3Vsb21vdG9yXFxub2RhbGlzcXVlL1NNXFxub2RkL1NUUllMUFxcbm9kZGJhbGwvU01cXG5vZGRpdHkvU01cXG5vZGRtZW50L1NNXFxub2RkbmVzcy9NXFxub2Rkcy9NXFxub2RlL1NNXFxub2Rpb3VzL1lQXFxub2Rpb3VzbmVzcy9NXFxub2RpdW0vTVxcbm9kb21ldGVyL01TXFxub2Rvci9NRFNcXG5vZG9yaWZlcm91c1xcbm9kb3JsZXNzXFxub2Rvcm91c1xcbm9keXNzZXkvTVNcXG5vZWRpcGFsXFxub2Vub2xvZ3kvTVxcbm9lbm9waGlsZS9TTVxcbm9ldXZyZS9NU1xcbm9mXFxub2ZmL1NaR0RSSlxcbm9mZmFsL01cXG5vZmZiZWF0L01TXFxub2ZmZW5kL1pHRFJTXFxub2ZmZW5kZXIvTVxcbm9mZmVuc2UvTVNcXG5vZmZlbnNpdmUnc1xcbm9mZmVuc2l2ZS9JUFlcXG5vZmZlbnNpdmVuZXNzL0lNXFxub2ZmZW5zaXZlc1xcbm9mZmVyL0pHTURcXG5vZmZlcmluZy9NXFxub2ZmZXJ0b3J5L1NNXFxub2ZmaGFuZFxcbm9mZmhhbmRlZC9QWVxcbm9mZmhhbmRlZG5lc3MvTVxcbm9mZmljZS9NWlJTXFxub2ZmaWNlaG9sZGVyL1NNXFxub2ZmaWNlci9NXFxub2ZmaWNpYWwvTVlTXFxub2ZmaWNpYWxkb20vTVxcbm9mZmljaWFsZXNlXFxub2ZmaWNpYWxpc20vTVxcbm9mZmljaWFudC9TTVxcbm9mZmljaWF0ZS9EU0dcXG5vZmZpY2lhdG9yL01TXFxub2ZmaWNpb3VzL1BZXFxub2ZmaWNpb3VzbmVzcy9NXFxub2ZmaW5nL01cXG5vZmZpc2hcXG5vZmZsaW5lXFxub2ZmbG9hZC9TREdcXG5vZmZwcmludC9TTVxcbm9mZnNldC9NU1xcbm9mZnNldHRpbmdcXG5vZmZzaG9vdC9NU1xcbm9mZnNob3JlL0dcXG5vZmZzaWRlXFxub2Zmc2l0ZVxcbm9mZnNwcmluZy9NXFxub2Zmc3RhZ2UvU1xcbm9mZnRyYWNrXFxub2Z0XFxub2Z0ZW4vVFJcXG5vZnRlbnRpbWVzXFxub2Z0dGltZXNcXG5vZ2xlL01aR0RSU1xcbm9nbGVyL01cXG5vZ3JlL01TXFxub2dyZWlzaFxcbm9ncmVzcy9NU1xcbm9oL01cXG5vaG0vU01cXG5vaG1tZXRlci9NU1xcbm9ob1xcbm9oc1xcbm9pXFxub2lrL1NcXG5vaWwvU0dNRFxcbm9pbGNhbi9TXFxub2lsY2xvdGgvTVxcbm9pbGNsb3Roc1xcbm9pbGZpZWxkL1NcXG5vaWxpbmVzcy9NXFxub2lsbWFuXFxub2lsbWVuXFxub2lsc2tpbi9NU1xcbm9pbHNraW5zL01cXG5vaWx5L1JQVFxcbm9pbmsvTURTR1xcbm9pbnRtZW50L1NNXFxub2thcGkvU01cXG5va2F5L01TR1xcbm9rcmEvTVNcXG5vbGQvVE1OUlBcXG5vbGRpZS9TTVxcbm9sZGlzaFxcbm9sZG5lc3MvTVxcbm9sZHN0ZXIvTVNcXG5vbGUvU01WXFxub2xlYWdpbm91c1xcbm9sZWFuZGVyL01TXFxub2xlby9NXFxub2xlb21hcmdhcmluZS9NXFxub2xmYWN0b3J5L1NNXFxub2xpZ2FyY2gvTVxcbm9saWdhcmNoaWNcXG5vbGlnYXJjaGljYWxcXG5vbGlnYXJjaHNcXG5vbGlnYXJjaHkvU01cXG5vbGlnb251Y2xlb3RpZGUvU1xcbm9saWdvcG9seS9TTVxcbm9saXZlL1NNXFxub20vU01OWFxcbm9tYnVkc21hbi9NXFxub21idWRzbWVuXFxub21lZ2EvU01cXG5vbWVsZXQvTVNcXG5vbWVuL01cXG5vbWljcm9uL01TXFxub21pbm91cy9ZUFxcbm9taW5vdXNuZXNzL01cXG5vbWlzc2lvbi9NU1xcbm9taXQvU1xcbm9taXR0ZWRcXG5vbWl0dGluZ1xcbm9tbmlidXMvTVNcXG5vbW5pcG90ZW5jZS9NXFxub21uaXBvdGVudFxcbm9tbmlwcmVzZW5jZS9NXFxub21uaXByZXNlbnRcXG5vbW5pc2NpZW5jZS9NXFxub21uaXNjaWVudFxcbm9tbml2b3JlL01TXFxub21uaXZvcm91cy9QWVxcbm9tbml2b3JvdXNuZXNzL01cXG5vbi9ZXFxub25ib2FyZFxcbm9uY2UvTVxcbm9uY29nZW5lL1NNXFxub25jb2xvZ2lzdC9TTVxcbm9uY29sb2d5L01cXG5vbmNvbWluZ1xcbm9uZS9TWE1OUFxcbm9uZW5lc3MvTVxcbm9uZXJvdXMvUFlcXG5vbmVyb3VzbmVzcy9NXFxub25lc2VsZlxcbm9uZXRpbWVcXG5vbmdvaW5nXFxub25pb24vTVxcbm9uaW9uc2tpbi9NXFxub25saW5lXFxub25sb29rZXIvU01cXG5vbmxvb2tpbmdcXG5vbm9tYXRvcG9laWEvTVxcbm9ub21hdG9wb2VpY1xcbm9ub21hdG9wb2V0aWNcXG5vbnJ1c2gvTVNHXFxub25zY3JlZW5cXG5vbnNldC9NU1xcbm9uc2hvcmVcXG5vbnNpZGVcXG5vbnNpdGVcXG5vbnNsYXVnaHQvTVNcXG5vbnN0YWdlXFxub250b1xcbm9udG9nZW55L01cXG5vbnRvbG9naWNhbFxcbm9udG9sb2d5L01cXG5vbnVzL01TXFxub253YXJkXFxub255eC9NU1xcbm9vZGxlcy9NXFxub29oL0dEXFxub29oc1xcbm9vbXBoXFxub29wc1xcbm9vemUvTUdEU1xcbm9venkvVFJcXG5vcC9TTURHXFxub3BhY2l0eS9NXFxub3BhbC9NU1xcbm9wYWxlc2NlbmNlL01cXG5vcGFsZXNjZW50XFxub3BhcXVlL1BZVEdEUlNcXG5vcGFxdWVuZXNzL01cXG5vcGNvZGUvU1xcbm9wZS9TXFxub3Blbi9aVEdKUE1EUllTXFxub3BlbmNhc3RcXG5vcGVuZWQvVVxcbm9wZW5lci9NXFxub3BlbmhhbmRlZC9QXFxub3BlbmhhbmRlZG5lc3MvTVxcbm9wZW5oZWFydGVkXFxub3BlbmluZy9NXFxub3Blbm5lc3MvTVxcbm9wZW53b3JrL01cXG5vcGVyYS9NU1xcbm9wZXJhYmxlL0lcXG5vcGVyYW5kL1NcXG5vcGVyYXRlL0RTR05WWFxcbm9wZXJhdGljXFxub3BlcmF0aWNhbGx5XFxub3BlcmF0aW9uL01cXG5vcGVyYXRpb25hbC9ZXFxub3BlcmF0aXZlL1NNXFxub3BlcmF0b3IvU01cXG5vcGVyZXR0YS9TTVxcbm9waHRoYWxtaWNcXG5vcGh0aGFsbW9sb2dpc3QvU01cXG5vcGh0aGFsbW9sb2d5L01cXG5vcGlhdGUvU01cXG5vcGluZS9HTlhEU1xcbm9waW5pb24vTVxcbm9waW5pb25hdGVkXFxub3Bpb2lkL1NNXFxub3BpdW0vTVxcbm9wb3NzdW0vTVNcXG5vcHBcXG5vcHBvbmVudC9TTVxcbm9wcG9ydHVuZS9JWVxcbm9wcG9ydHVuaXNtL01cXG5vcHBvcnR1bmlzdC9TTVxcbm9wcG9ydHVuaXN0aWNcXG5vcHBvcnR1bmlzdGljYWxseVxcbm9wcG9ydHVuaXR5L1NNXFxub3Bwb3NlL0RTR1xcbm9wcG9zZWQvVVxcbm9wcG9zaXRlL1NNWU5YXFxub3Bwb3NpdGlvbi9NXFxub3BwcmVzcy9EU0dWXFxub3BwcmVzc2lvbi9NXFxub3BwcmVzc2l2ZS9ZUFxcbm9wcHJlc3NpdmVuZXNzL01cXG5vcHByZXNzb3IvTVNcXG5vcHByb2JyaW91cy9ZXFxub3Bwcm9icml1bS9NXFxub3B0L1NHRFxcbm9wdGljL01TXFxub3B0aWNhbC9ZXFxub3B0aWNpYW4vU01cXG5vcHRpY3MvTVxcbm9wdGltYVxcbm9wdGltYWwvWVxcbm9wdGltaXNtL1NNXFxub3B0aW1pc3QvU01cXG5vcHRpbWlzdGljXFxub3B0aW1pc3RpY2FsbHlcXG5vcHRpbWl6YXRpb24vTVNcXG5vcHRpbWl6ZS9EUlNHXFxub3B0aW11bS9TTVxcbm9wdGlvbi9TTURHXFxub3B0aW9uYWwvWVxcbm9wdG9tZXRyaXN0L01TXFxub3B0b21ldHJ5L01cXG5vcHVsZW5jZS9NXFxub3B1bGVudC9ZXFxub3B1cy9NU1xcbm9yXFxub3JhY2xlL1NNXFxub3JhY3VsYXJcXG5vcmFsL01ZU1xcbm9yYWxpdHlcXG5vcmFuZ2UvU01QXFxub3JhbmdlYWRlL01TXFxub3JhbmdlcnkvU01cXG5vcmFuZ3V0YW4vU01cXG5vcmF0ZS9HTlhEU1xcbm9yYXRpb24vTVxcbm9yYXRvci9TTVxcbm9yYXRvcmljYWwvWVxcbm9yYXRvcmlvL01TXFxub3JhdG9yeS9TTVxcbm9yYi9TTVxcbm9yYmljdWxhclxcbm9yYml0L01EUlpHU1xcbm9yYml0YWwvU01cXG5vcmJpdGVyL01cXG5vcmMvU01cXG5vcmNoYXJkL1NNXFxub3JjaGVzdHJhL01TXFxub3JjaGVzdHJhbFxcbm9yY2hlc3RyYXRlL0RTWEdOXFxub3JjaGVzdHJhdGlvbi9NXFxub3JjaGlkL1NNXFxub3JkYWluL1NETEdcXG5vcmRhaW5tZW50L01cXG5vcmRlYWwvU01cXG5vcmRlci9FQU1ER1NcXG5vcmRlcmVkL1VcXG5vcmRlcmluZ3NcXG5vcmRlcmxpbmVzcy9FTVxcbm9yZGVybHkvUFNNXFxub3JkaW5hbC9TTVxcbm9yZGluYW5jZS9TTVxcbm9yZGluYXJpbHlcXG5vcmRpbmFyaW5lc3MvTVxcbm9yZGluYXJ5L1NNUFxcbm9yZGluYXRlL01OU1hcXG5vcmRpbmF0aW9uL01cXG5vcmRuYW5jZS9NXFxub3JkdXJlL01cXG5vcmUvU01cXG5vcmVnYW5vL01cXG5vcmdcXG5vcmdhbi9NU1xcbm9yZ2FuZHkvTVxcbm9yZ2FuZWxsZS9NU1xcbm9yZ2FuaWMvU01cXG5vcmdhbmljYWxseS9JXFxub3JnYW5pc20vTVNcXG5vcmdhbmlzbWljXFxub3JnYW5pc3QvTVNcXG5vcmdhbml6YXRpb24vQVNNXFxub3JnYW5pemF0aW9uYWwvWVxcbm9yZ2FuaXplL0FFU0RHXFxub3JnYW5pemVkL1VcXG5vcmdhbml6ZXIvTVNcXG5vcmdhbnphL01cXG5vcmdhc20vU01cXG5vcmdhc21pY1xcbm9yZ2lhc3RpY1xcbm9yZ3kvU01cXG5vcmllbC9NU1xcbm9yaWVudCdzXFxub3JpZW50L0FFREdTXFxub3JpZW50YWwvTVNcXG5vcmllbnRhbGlzdC9TXFxub3JpZW50YXRlL0VEU0dOXFxub3JpZW50YXRpb24vQUVNXFxub3JpZW50YXRpb25zXFxub3JpZW50ZWVyaW5nXFxub3JpZmljZS9NU1xcbm9yaWdcXG5vcmlnYW1pL01cXG5vcmlnaW4vU01cXG5vcmlnaW5hbC9NWVNcXG5vcmlnaW5hbGl0eS9NXFxub3JpZ2luYXRlL0RTR05cXG5vcmlnaW5hdGlvbi9NXFxub3JpZ2luYXRvci9TTVxcbm9yaW9sZS9TTVxcbm9yaXNvbi9TTVxcbm9ybW9sdS9NXFxub3JuYW1lbnQvU0dNRFxcbm9ybmFtZW50YWxcXG5vcm5hbWVudGF0aW9uL01cXG5vcm5hdGUvWVBcXG5vcm5hdGVuZXNzL01cXG5vcm5lcmluZXNzL01cXG5vcm5lcnkvUFJUXFxub3JuaXRob2xvZ2ljYWxcXG5vcm5pdGhvbG9naXN0L01TXFxub3JuaXRob2xvZ3kvTVxcbm9yb3R1bmRcXG5vcm90dW5kaXR5L1NNXFxub3JwaGFuL1NNREdcXG5vcnBoYW5hZ2UvTVNcXG5vcnJpcy9NU1xcbm9ydGhvZG9udGlhL01cXG5vcnRob2RvbnRpYy9TXFxub3J0aG9kb250aWNzL01cXG5vcnRob2RvbnRpc3QvU01cXG5vcnRob2RveC9VXFxub3J0aG9kb3h5L1NNXFxub3J0aG9nb25hbFxcbm9ydGhvZ29uYWxpdHlcXG5vcnRob2dyYXBoaWNcXG5vcnRob2dyYXBoaWNhbGx5XFxub3J0aG9ncmFwaHkvU01cXG5vcnRob3BlZGljL1NcXG5vcnRob3BlZGljcy9NXFxub3J0aG9wZWRpc3QvTVNcXG5vcnpvL01cXG5vc2NpbGxhdGUvR05EU1hcXG5vc2NpbGxhdGlvbi9NXFxub3NjaWxsYXRvci9TTVxcbm9zY2lsbGF0b3J5XFxub3NjaWxsb3Njb3BlL01TXFxub3NjdWxhdGUvRFNYR05cXG5vc2N1bGF0aW9uL01cXG5vc2llci9NU1xcbm9zbWl1bS9NXFxub3Ntb3Npcy9NXFxub3Ntb3RpY1xcbm9zcHJleS9TTVxcbm9zc2ljbGVzXFxub3NzaWZpY2F0aW9uL01cXG5vc3NpZnkvTkdEU1xcbm9zdGVuc2libGVcXG5vc3RlbnNpYmx5XFxub3N0ZW50YXRpb24vTVxcbm9zdGVudGF0aW91cy9ZXFxub3N0ZW9hcnRocml0aXMvTVxcbm9zdGVvcGF0aC9NXFxub3N0ZW9wYXRoaWNcXG5vc3Rlb3BhdGhzXFxub3N0ZW9wYXRoeS9NXFxub3N0ZW9wb3Jvc2lzL01cXG5vc3RsZXIvU1xcbm9zdHJhY2lzbS9NXFxub3N0cmFjaXplL0dEU1xcbm9zdHJpY2gvTVNcXG5vdGhlci9NU1BcXG5vdGhlcndpc2VcXG5vdGhlcndvcmxkbHlcXG5vdGlvc2VcXG5vdHRlci9NU1xcbm90dG9tYW4vTVNcXG5vdWJsaWV0dGUvTVNcXG5vdWNoXFxub3VnaHRcXG5vdWdodG4ndFxcbm91bmNlL01TXFxub3VyL1NcXG5vdXJzZWx2ZXNcXG5vdXN0L1pHRFJTXFxub3VzdGVyL01cXG5vdXQvU0pHTURSXFxub3V0YWdlL1NNXFxub3V0YXJndWUvR0RTXFxub3V0YmFjay9NU1xcbm91dGJhbGFuY2UvRFNHXFxub3V0YmlkL1NcXG5vdXRiaWRkaW5nXFxub3V0Ym9hcmQvTVNcXG5vdXRib2FzdC9EU0dcXG5vdXRib3VuZFxcbm91dGJveC9NU1xcbm91dGJyZWFrL01TXFxub3V0YnVpbGRpbmcvTVNcXG5vdXRidXJzdC9TTVxcbm91dGNhc3QvTVNcXG5vdXRjbGFzcy9EU0dcXG5vdXRjb21lL01TXFxub3V0Y3JvcC9NU1xcbm91dGNyb3BwZWRcXG5vdXRjcm9wcGluZy9TTVxcbm91dGNyeS9TTVxcbm91dGRhdGVkXFxub3V0ZGlkXFxub3V0ZGlzdGFuY2UvR0RTXFxub3V0ZG8vR1xcbm91dGRvZXNcXG5vdXRkb25lXFxub3V0ZG9vci9TXFxub3V0ZG9vcnMvTVxcbm91dGRvb3JzeVxcbm91dGRyYXcvR1NcXG5vdXRkcmF3blxcbm91dGRyZXdcXG5vdXRlcmNvdXJzZVxcbm91dGVybW9zdFxcbm91dGVyd2Vhci9NXFxub3V0ZmFjZS9HRFNcXG5vdXRmYWxsL1NcXG5vdXRmaWVsZC9TTVJaXFxub3V0ZmllbGRlci9NXFxub3V0ZmlnaHQvU0dcXG5vdXRmaXQvU01cXG5vdXRmaXR0ZWRcXG5vdXRmaXR0ZXIvTVNcXG5vdXRmaXR0aW5nXFxub3V0ZmxhbmsvR1NEXFxub3V0Zmxvdy9NU1xcbm91dGZvdWdodFxcbm91dGZveC9HRFNcXG5vdXRnby9NSkdcXG5vdXRnb2VzXFxub3V0Z3Jld1xcbm91dGdyb3cvSEdTXFxub3V0Z3Jvd25cXG5vdXRncm93dGgvTVxcbm91dGdyb3d0aHNcXG5vdXRndWVzcy9HRFNcXG5vdXRndW4vU1xcbm91dGd1bm5lZFxcbm91dGd1bm5pbmdcXG5vdXRoaXQvU1xcbm91dGhpdHRpbmdcXG5vdXRob3VzZS9TTVxcbm91dGluZy9NXFxub3V0bGFpZFxcbm91dGxhbmRpc2gvUFlcXG5vdXRsYW5kaXNobmVzcy9NXFxub3V0bGFzdC9EU0dcXG5vdXRsYXcvU0dNRFxcbm91dGxheS9TR01cXG5vdXRsZXQvU01cXG5vdXRsaWVyL1NcXG5vdXRsaW5lL01HRFNcXG5vdXRsaXZlL0dEU1xcbm91dGxvb2svTVNcXG5vdXRseWluZ1xcbm91dG1hbmV1dmVyL0dEU1xcbm91dG1hdGNoL0dEU1xcbm91dG1vZGVkXFxub3V0bnVtYmVyL0RTR1xcbm91dHBhY2UvR0RTXFxub3V0cGF0aWVudC9NU1xcbm91dHBlcmZvcm0vR1NEXFxub3V0cGxhY2UvTFxcbm91dHBsYWNlbWVudC9NXFxub3V0cGxheS9HRFNcXG5vdXRwb2ludC9ER1NcXG5vdXRwb3N0L01TXFxub3V0cG91cmluZy9NU1xcbm91dHByb2R1Y2UvRFNHXFxub3V0cHV0L1NNXFxub3V0cHV0dGVkXFxub3V0cHV0dGluZ1xcbm91dHJhY2UvR0RTXFxub3V0cmFnZS9NR0RTXFxub3V0cmFnZW91cy9ZXFxub3V0cmFuXFxub3V0cmFuay9HRFNcXG5vdXRyZVxcbm91dHJlYWNoL01EU0dcXG5vdXRyaWRlci9NU1xcbm91dHJpZ2dlci9TTVxcbm91dHJpZ2h0XFxub3V0cnVuL1NcXG5vdXRydW5uaW5nXFxub3V0c2NvcmUvR0RTXFxub3V0c2VsbC9HU1xcbm91dHNldC9TTVxcbm91dHNoaW5lL0dTXFxub3V0c2hvbmVcXG5vdXRzaG91dC9HRFNcXG5vdXRzaWRlL01aUlNcXG5vdXRzaWRlci9NXFxub3V0c2l6ZS9NU1xcbm91dHNraXJ0L01TXFxub3V0c21hcnQvR0RTXFxub3V0c29sZFxcbm91dHNvdXJjZS9EU0dcXG5vdXRzb3VyY2luZy9NXFxub3V0c3BlbmQvU0dcXG5vdXRzcGVudFxcbm91dHNwb2tlbi9ZUFxcbm91dHNwb2tlbm5lc3MvTVxcbm91dHNwcmVhZC9HU1xcbm91dHN0YW5kaW5nL1lcXG5vdXRzdGF0aW9uL01TXFxub3V0c3RheS9ER1NcXG5vdXRzdHJldGNoL0RTR1xcbm91dHN0cmlwL1NcXG5vdXRzdHJpcHBlZFxcbm91dHN0cmlwcGluZ1xcbm91dHRhXFxub3V0dGFrZS9NU1xcbm91dHZvdGUvR0RTXFxub3V0d2FyZC9ZU1xcbm91dHdlYXIvR1NcXG5vdXR3ZWlnaC9HRFxcbm91dHdlaWdoc1xcbm91dHdpdC9TXFxub3V0d2l0aFxcbm91dHdpdHRlZFxcbm91dHdpdHRpbmdcXG5vdXR3b3JlXFxub3V0d29yay9NRFJTWkdcXG5vdXR3b3JuXFxub3V6by9NU1xcbm92YVxcbm92YWwvTVNcXG5vdmFyaWFuXFxub3ZhcnkvU01cXG5vdmF0ZS9OWFxcbm92YXRpb24vTVxcbm92ZW4vTVNcXG5vdmVuYmlyZC9TTVxcbm92ZW5wcm9vZlxcbm92ZW53YXJlXFxub3Zlci9NWVNcXG5vdmVyYWJ1bmRhbmNlL01cXG5vdmVyYWJ1bmRhbnRcXG5vdmVyYWNoaWV2ZS9aR0RSU1xcbm92ZXJhY2hpZXZlci9NXFxub3ZlcmFjdC9HVlNEXFxub3ZlcmFnZS9TTVxcbm92ZXJhZ2dyZXNzaXZlXFxub3ZlcmFsbC9TTVxcbm92ZXJhbGxzL01cXG5vdmVyYW1iaXRpb3VzXFxub3ZlcmFueGlvdXNcXG5vdmVyYXJjaGluZ1xcbm92ZXJhcm0vR1NEXFxub3ZlcmF0ZVxcbm92ZXJhdHRlbnRpdmVcXG5vdmVyYXdlL0RTR1xcbm92ZXJiYWxhbmNlL01HRFNcXG5vdmVyYmVhci9HU1xcbm92ZXJiZWFyaW5nL1lcXG5vdmVyYmlkL1NNXFxub3ZlcmJpZGRpbmdcXG5vdmVyYml0ZS9NU1xcbm92ZXJibG93blxcbm92ZXJib2FyZFxcbm92ZXJib2xkXFxub3ZlcmJvb2svREdTXFxub3ZlcmJvcmVcXG5vdmVyYm9ybmVcXG5vdmVyYm91Z2h0XFxub3ZlcmJ1aWxkL1NHXFxub3ZlcmJ1aWx0XFxub3ZlcmJ1cmRlbi9HU0RcXG5vdmVyYnV5L0dTXFxub3ZlcmNhbWVcXG5vdmVyY2FwYWNpdHkvTVxcbm92ZXJjYXBpdGFsaXplL0RTR1xcbm92ZXJjYXJlZnVsXFxub3ZlcmNhc3QvTUdTXFxub3ZlcmNhdXRpb3VzXFxub3ZlcmNoYXJnZS9EU01HXFxub3ZlcmNsb2NrL0dEXFxub3ZlcmNsb3VkL1NHRFxcbm92ZXJjb2F0L01TXFxub3ZlcmNvbWUvR1NcXG5vdmVyY29tcGVuc2F0ZS9EU0dOXFxub3ZlcmNvbXBlbnNhdGlvbi9NXFxub3ZlcmNvbmZpZGVuY2UvTVxcbm92ZXJjb25maWRlbnRcXG5vdmVyY29uc2NpZW50aW91c1xcbm92ZXJjb29rL0RHU1xcbm92ZXJjcml0aWNhbFxcbm92ZXJjcm93ZC9TREdcXG5vdmVyY3Jvd2RpbmcvTVxcbm92ZXJkZWNvcmF0ZS9EU0dcXG5vdmVyZGVwZW5kZW50XFxub3ZlcmRldmVsb3AvU0RHXFxub3ZlcmRpZFxcbm92ZXJkby9HXFxub3ZlcmRvZXNcXG5vdmVyZG9uZVxcbm92ZXJkb3NlL01HRFNcXG5vdmVyZHJhZnQvU01cXG5vdmVyZHJhdy9HU1xcbm92ZXJkcmF3blxcbm92ZXJkcmVzcy9HTURTXFxub3ZlcmRyZXdcXG5vdmVyZHJpdmUvU01cXG5vdmVyZHViL1NNXFxub3ZlcmR1YmJlZFxcbm92ZXJkdWJiaW5nXFxub3ZlcmR1ZVxcbm92ZXJlYWdlclxcbm92ZXJlYXQvR1NOXFxub3ZlcmVtb3Rpb25hbFxcbm92ZXJlbXBoYXNpcy9NXFxub3ZlcmVtcGhhc2l6ZS9HRFNcXG5vdmVyZW50aHVzaWFzdGljXFxub3ZlcmVzdGltYXRlL01HTkRTXFxub3ZlcmVzdGltYXRpb24vTVxcbm92ZXJleGNpdGUvRFNHXFxub3ZlcmV4ZXJjaXNlL0dEU1xcbm92ZXJleGVydC9TREdcXG5vdmVyZXhlcnRpb24vTVxcbm92ZXJleHBvc2UvR0RTXFxub3ZlcmV4cG9zdXJlL01cXG5vdmVyZXh0ZW5kL0RHU1xcbm92ZXJmZWRcXG5vdmVyZmVlZC9HU1xcbm92ZXJmaWxsL0RHU1xcbm92ZXJmbGV3XFxub3ZlcmZsaWdodC9NU1xcbm92ZXJmbG93L01EU0dcXG5vdmVyZmxvd25cXG5vdmVyZmx5L0dTXFxub3ZlcmZvbmRcXG5vdmVyZnVsbFxcbm92ZXJnZW5lcmFsaXplL0RTR1xcbm92ZXJnZW5lcm91c1xcbm92ZXJncmF6ZS9EU0dcXG5vdmVyZ3Jld1xcbm92ZXJncm91bmRcXG5vdmVyZ3Jvdy9IU0dcXG5vdmVyZ3Jvd25cXG5vdmVyZ3Jvd3RoL01cXG5vdmVyaGFuZC9NRFNcXG5vdmVyaGFuZy9NU0dcXG5vdmVyaGFzdHlcXG5vdmVyaGF1bC9NRFNHXFxub3ZlcmhlYWQvTVNcXG5vdmVyaGVhci9TR1xcbm92ZXJoZWFyZFxcbm92ZXJoZWF0L0RTR1xcbm92ZXJodW5nXFxub3ZlcmluZHVsZ2UvR0RTXFxub3ZlcmluZHVsZ2VuY2UvTVxcbm92ZXJpbmR1bGdlbnRcXG5vdmVyaW5mbGF0ZWRcXG5vdmVyam95L0dTRFxcbm92ZXJraWxsL01cXG5vdmVybGFkZW5cXG5vdmVybGFpZFxcbm92ZXJsYWluXFxub3ZlcmxhbmRcXG5vdmVybGFwL1NNXFxub3ZlcmxhcHBlZFxcbm92ZXJsYXBwaW5nXFxub3ZlcmxhcmdlXFxub3ZlcmxheS9HU01cXG5vdmVybGVhZlxcbm92ZXJsaWVcXG5vdmVybG9hZC9HTURTXFxub3ZlcmxvbmdcXG5vdmVybG9vay9HTURTXFxub3ZlcmxvcmQvTVNcXG5vdmVybHkvU0dcXG5vdmVybWFubmVkXFxub3Zlcm1hbm5pbmdcXG5vdmVybWFzdGVyL1NER1xcbm92ZXJtb2Rlc3RcXG5vdmVybXVjaC9TXFxub3Zlcm5pY2VcXG5vdmVybmlnaHQvTVNcXG5vdmVyb3B0aW1pc20vTVxcbm92ZXJvcHRpbWlzdGljXFxub3ZlcnBhaWRcXG5vdmVycGFydGljdWxhclxcbm92ZXJwYXNzL01TXFxub3ZlcnBheS9HU1xcbm92ZXJwbGF5L0dEU1xcbm92ZXJwb3B1bGF0ZS9HTkRTXFxub3ZlcnBvcHVsYXRpb24vTVxcbm92ZXJwb3dlci9TREdcXG5vdmVycG93ZXJpbmcvWVxcbm92ZXJwcmFpc2UvRFNHXFxub3ZlcnByZWNpc2VcXG5vdmVycHJpY2UvRFNHXFxub3ZlcnByaW50L1NNREdcXG5vdmVycHJvZHVjZS9HRFNcXG5vdmVycHJvZHVjdGlvbi9NXFxub3ZlcnByb3RlY3QvU0RHVlxcbm92ZXJxdWFsaWZpZWRcXG5vdmVycmFuXFxub3ZlcnJhdGUvR0RTXFxub3ZlcnJlYWNoL0dEU1xcbm92ZXJyZWFjdC9TREdcXG5vdmVycmVhY3Rpb24vU01cXG5vdmVycmVmaW5lZFxcbm92ZXJyaWRkZW5cXG5vdmVycmlkZS9NR1NcXG5vdmVycmlwZS9NXFxub3ZlcnJvZGVcXG5vdmVycnVsZS9HRFNcXG5vdmVycnVuL1NNXFxub3ZlcnJ1bm5pbmdcXG5vdmVyc2FtcGxpbmdcXG5vdmVyc2F3XFxub3ZlcnNlYS9TXFxub3ZlcnNlZS9SU1pcXG5vdmVyc2VlaW5nXFxub3ZlcnNlZW5cXG5vdmVyc2Vlci9NXFxub3ZlcnNlbGwvR1NcXG5vdmVyc2Vuc2l0aXZlL1BcXG5vdmVyc2Vuc2l0aXZlbmVzcy9NXFxub3ZlcnNleGVkXFxub3ZlcnNoYWRvdy9EU0dcXG5vdmVyc2hhcmUvRFNHXFxub3ZlcnNob2UvTVNcXG5vdmVyc2hvb3QvR1NcXG5vdmVyc2hvdFxcbm92ZXJzaWdodC9TTVxcbm92ZXJzaW1wbGVcXG5vdmVyc2ltcGxpZmljYXRpb24vTVxcbm92ZXJzaW1wbGlmeS9EU05HWFxcbm92ZXJzaXplXFxub3ZlcnNsZWVwL0dTXFxub3ZlcnNsZXB0XFxub3ZlcnNvbGRcXG5vdmVyc3BlY2lhbGl6YXRpb24vTVxcbm92ZXJzcGVjaWFsaXplL0dEU1xcbm92ZXJzcGVuZC9TR1xcbm92ZXJzcGVudFxcbm92ZXJzcHJlYWQvR1NcXG5vdmVyc3RhZmZlZFxcbm92ZXJzdGF0ZS9EU0xHXFxub3ZlcnN0YXRlbWVudC9NU1xcbm92ZXJzdGF5L0RTR1xcbm92ZXJzdGVwL1NcXG5vdmVyc3RlcHBlZFxcbm92ZXJzdGVwcGluZ1xcbm92ZXJzdGltdWxhdGUvRFNHXFxub3ZlcnN0b2NrL0dTRFxcbm92ZXJzdHJldGNoL0dEU1xcbm92ZXJzdHJpY3RcXG5vdmVyc3RydW5nXFxub3ZlcnN0dWZmZWRcXG5vdmVyc3Vic2NyaWJlL0RTR1xcbm92ZXJzdWJ0bGVcXG5vdmVyc3VwcGx5L0dEU1xcbm92ZXJzdXNwaWNpb3VzXFxub3ZlcnQvWVxcbm92ZXJ0YWtlL0dTXFxub3ZlcnRha2VuXFxub3ZlcnRheC9HRFNcXG5vdmVydGhpbmsvU0dcXG5vdmVydGhvdWdodFxcbm92ZXJ0aHJld1xcbm92ZXJ0aHJvdy9TTUdcXG5vdmVydGhyb3duXFxub3ZlcnRpbWUvTVNcXG5vdmVydGlyZS9HRFNcXG5vdmVydG9uZS9NU1xcbm92ZXJ0b29rXFxub3ZlcnR1cmUvTVNcXG5vdmVydHVybi9EU0dcXG5vdmVydXNlL0RTTUdcXG5vdmVydmFsdWF0aW9uL1NcXG5vdmVydmFsdWUvRFNHXFxub3ZlcnZpZXcvTVNcXG5vdmVyd2VlbmluZy9ZXFxub3ZlcndlaWdodC9NXFxub3ZlcndoZWxtL1NHRFxcbm92ZXJ3aGVsbWluZy9ZXFxub3ZlcndpbnRlci9TREdcXG5vdmVyd29yay9HTURTXFxub3ZlcndyaXRlL0dTXFxub3ZlcndyaXR0ZW5cXG5vdmVyd3JvdGVcXG5vdmVyd3JvdWdodFxcbm92ZXJ6ZWFsb3VzXFxub3ZpZHVjdC9TTVxcbm92aXBhcm91c1xcbm92b2lkL01TXFxub3Z1bGFyXFxub3Z1bGF0ZS9EU0dOXFxub3Z1bGF0aW9uL01cXG5vdnVsZS9NU1xcbm92dW0vTVxcbm93XFxub3dlL0RTR1xcbm93bC9TTVxcbm93bGV0L01TXFxub3dsaXNoL1lcXG5vd24vRVNHRFxcbm93bmVyL01TXFxub3duZXJzaGlwL01cXG5veC9NTlxcbm94YWxhdGVcXG5veGJsb29kL01cXG5veGJvdy9NU1xcbm94Y2FydC9TTVxcbm94Zm9yZC9TTVxcbm94aWRhbnQvTVNcXG5veGlkYXNlXFxub3hpZGF0aW9uL01cXG5veGlkYXRpdmVcXG5veGlkZS9NU1xcbm94aWRpemF0aW9uL01cXG5veGlkaXplL1pHRFJTXFxub3hpZGl6ZXIvTVxcbm94dGFpbC9TXFxub3h5YWNldHlsZW5lL01cXG5veHlnZW4vTVxcbm94eWdlbmF0ZS9EU0dOXFxub3h5Z2VuYXRpb24vTVxcbm94eW1vcmFcXG5veHltb3Jvbi9NXFxub3lzdGVyL1NNXFxub3pcXG5vem9uZS9NXFxucC9OUlhUR0pcXG5wSFxcbnBhL1NNSFxcbnBhYmx1bS9NXFxucGFidWx1bS9NXFxucGFjZS9NWkdEUlNcXG5wYWNlbWFrZXIvU01cXG5wYWNlci9NXFxucGFjZXNldHRlci9TTVxcbnBhY2V5XFxucGFjaHlkZXJtL01TXFxucGFjaHlzYW5kcmEvTVNcXG5wYWNpZmljXFxucGFjaWZpY2FsbHlcXG5wYWNpZmljYXRpb24vTVxcbnBhY2lmaWVyL01cXG5wYWNpZmlzbS9NXFxucGFjaWZpc3QvU01cXG5wYWNpZmlzdGljXFxucGFjaWZ5L1pHRFJTTlxcbnBhY2snc1xcbnBhY2svQVVHU0RcXG5wYWNrYWdlJ3NcXG5wYWNrYWdlL0FHRFNcXG5wYWNrYWdlci9TTVxcbnBhY2thZ2luZy9NXFxucGFja2VyL01TXFxucGFja2V0L01TXFxucGFja2luZydzXFxucGFja2luZ2hvdXNlL1NNXFxucGFja3NhZGRsZS9NU1xcbnBhY3QvTVNcXG5wYWN5L1JUXFxucGFkL1NNXFxucGFkZGVkXFxucGFkZGluZy9NXFxucGFkZGxlL01aR0RSU1xcbnBhZGRsZXIvTVxcbnBhZGRvY2svTURHU1xcbnBhZGR5L1NNXFxucGFkbG9jay9NRFNHXFxucGFkcmUvU01cXG5wYWVhbi9TTVxcbnBhZWxsYS9NU1xcbnBhZ2FuL1NNXFxucGFnYW5pc20vTVxcbnBhZ2UvTVpHRFJTXFxucGFnZWFudC9NU1xcbnBhZ2VhbnRyeS9NXFxucGFnZWJveS9TTVxcbnBhZ2VyL01cXG5wYWdpbmF0ZS9EU0dOXFxucGFnaW5hdGlvbi9NXFxucGFnb2RhL01TXFxucGFoXFxucGFpZC9BVVxcbnBhaWwvTVNcXG5wYWlsZnVsL1NNXFxucGFpbi9NRFNHXFxucGFpbmZ1bC9QWVxcbnBhaW5mdWxsZXJcXG5wYWluZnVsbGVzdFxcbnBhaW5mdWxuZXNzL01cXG5wYWlua2lsbGVyL01TXFxucGFpbmtpbGxpbmdcXG5wYWlubGVzcy9QWVxcbnBhaW5sZXNzbmVzcy9NXFxucGFpbnN0YWtpbmcvTVlcXG5wYWludC9TWkdKTURSXFxucGFpbnRiYWxsXFxucGFpbnRib3gvTVNcXG5wYWludGJydXNoL01TXFxucGFpbnRlZC9VXFxucGFpbnRlci9NWVxcbnBhaW50aW5nL01cXG5wYWludHdvcmtcXG5wYWlyL0FNRFNHXFxucGFpcmVkL1VcXG5wYWlyaW5nL1NcXG5wYWlyd2lzZVxcbnBhaXNsZXkvU01cXG5wYWphbWEvU1xcbnBhamFtYXMvTVxcbnBhbC9TTVlcXG5wYWxhY2UvTVNcXG5wYWxhZGluL1NNXFxucGFsYW5xdWluL1NNXFxucGFsYXRhYmxlL1VcXG5wYWxhdGFsL1NNXFxucGFsYXRhbGl6YXRpb24vTVxcbnBhbGF0YWxpemUvR0RTXFxucGFsYXRlL01CU1xcbnBhbGF0aWFsL1lcXG5wYWxhdGluYXRlL01TXFxucGFsYXRpbmUvTVNcXG5wYWxhdmVyL0dTTURcXG5wYWxhenppXFxucGFsYXp6b1xcbnBhbGUvTVlUR1BEUlNKXFxucGFsZWZhY2UvTVNcXG5wYWxlbmVzcy9NXFxucGFsZW9cXG5wYWxlb2dyYXBoZXIvTVNcXG5wYWxlb2dyYXBoeS9NXFxucGFsZW9saXRoaWNcXG5wYWxlb250b2xvZ2lzdC9TTVxcbnBhbGVvbnRvbG9neS9NXFxucGFsZXR0ZS9TTVxcbnBhbGZyZXkvU01cXG5wYWxpbW9ueS9NXFxucGFsaW1wc2VzdC9NU1xcbnBhbGluZHJvbWUvTVNcXG5wYWxpbmRyb21pY1xcbnBhbGluZy9NXFxucGFsaXNhZGUvU01cXG5wYWxpc2hcXG5wYWxsL01EU0dcXG5wYWxsYWRpdW0vTVxcbnBhbGxiZWFyZXIvTVNcXG5wYWxsZXQvTVNcXG5wYWxsaWF0ZS9EU0dOVlxcbnBhbGxpYXRpb24vTVxcbnBhbGxpYXRpdmUvU01cXG5wYWxsaWQvWVBcXG5wYWxsaWRuZXNzL01cXG5wYWxsb3IvTVxcbnBhbG0vTURTR1xcbnBhbG1hdGVcXG5wYWxtZXR0by9TTVxcbnBhbG1pc3QvU01cXG5wYWxtaXN0cnkvTVxcbnBhbG10b3AvU01cXG5wYWxteS9UUlxcbnBhbG9taW5vL01TXFxucGFscGFibGVcXG5wYWxwYWJseVxcbnBhbHBhdGUvRFNHTlxcbnBhbHBhdGlvbi9NXFxucGFscGl0YXRlL1hHTkRTXFxucGFscGl0YXRpb24vTVxcbnBhbHN5L0dEU01cXG5wYWx0cmluZXNzL01cXG5wYWx0cnkvUlBUXFxucGFtcGFzL01cXG5wYW1wZXIvRFNHXFxucGFtcGhsZXQvTVNcXG5wYW1waGxldGVlci9NU1xcbnBhbi9TTVxcbnBhbmFjZWEvU01cXG5wYW5hY2hlL01cXG5wYW5hbWEvTVNcXG5wYW5hdGVsbGEvU1xcbnBhbmNha2UvRFNNR1xcbnBhbmNocm9tYXRpY1xcbnBhbmNyZWFzL01TXFxucGFuY3JlYXRpY1xcbnBhbmNyZWF0aXRpc1xcbnBhbmRhL1NNXFxucGFuZGVtaWMvU01cXG5wYW5kZW1vbml1bS9NXFxucGFuZGVyL01EUlpHU1xcbnBhbmRlcmVyL01cXG5wYW5lL0tNXFxucGFuZWd5cmljL1NNXFxucGFuZWwvU0dKTURcXG5wYW5lbGluZy9NXFxucGFuZWxpc3QvTVNcXG5wYW5lc1xcbnBhbmcvTVNcXG5wYW5oYW5kbGUvRFJTTVpHXFxucGFuaGFuZGxlci9NXFxucGFuaWMvU01cXG5wYW5pY2tlZFxcbnBhbmlja2luZ1xcbnBhbmlja3lcXG5wYW5uZWRcXG5wYW5uaWVyL1NNXFxucGFubmluZ1xcbnBhbm9wbHkvU01cXG5wYW5vcmFtYS9TTVxcbnBhbm9yYW1pY1xcbnBhbnBpcGVzL01cXG5wYW5zeS9TTVxcbnBhbnQvTURTR1xcbnBhbnRhbG9vbnMvTVxcbnBhbnRlY2huaWNvbi9TXFxucGFudGhlaXNtL01cXG5wYW50aGVpc3QvU01cXG5wYW50aGVpc3RpY1xcbnBhbnRoZW9uL1NNXFxucGFudGhlci9NU1xcbnBhbnRpZS9NU1xcbnBhbnRvL1NcXG5wYW50b21pbWUvTUdEU1xcbnBhbnRvbWltaWNcXG5wYW50b21pbWlzdC9TTVxcbnBhbnRyeS9TTVxcbnBhbnRzdWl0L1NNXFxucGFudHlob3NlL01cXG5wYW50eWxpbmVyL01cXG5wYW50eXdhaXN0L1NNXFxucGFwL1NNXFxucGFwYS9NU1xcbnBhcGFjeS9TTVxcbnBhcGFsXFxucGFwYXJhenppL01cXG5wYXBhcmF6em9cXG5wYXBheWEvTVNcXG5wYXBlci9TWkdNRFJcXG5wYXBlcmJhY2svU01cXG5wYXBlcmJhcmsvU1xcbnBhcGVyYm9hcmQvTVxcbnBhcGVyYm95L1NNXFxucGFwZXJjbGlwL1NcXG5wYXBlcmVyL01cXG5wYXBlcmdpcmwvU01cXG5wYXBlcmhhbmdlci9TTVxcbnBhcGVyaGFuZ2luZy9NXFxucGFwZXJsZXNzXFxucGFwZXJ3ZWlnaHQvTVNcXG5wYXBlcndvcmsvTVxcbnBhcGVyeVxcbnBhcGlsbGEvTVxcbnBhcGlsbGFlXFxucGFwaWxsYXJ5XFxucGFwaXN0L01TXFxucGFwb29zZS9NU1xcbnBhcHB5L1NNXFxucGFwcmlrYS9NXFxucGFweXJpXFxucGFweXJ1cy9NXFxucGFyL1NaR01EUkJKXFxucGFyYS9NU1xcbnBhcmFibGUvTVNcXG5wYXJhYm9sYS9TTVxcbnBhcmFib2xpY1xcbnBhcmFjZXRhbW9sL1NcXG5wYXJhY2h1dGUvRFNNR1xcbnBhcmFjaHV0aXN0L01TXFxucGFyYWRlL01aR0RSU1xcbnBhcmFkZXIvTVxcbnBhcmFkaWdtL1NNXFxucGFyYWRpZ21hdGljXFxucGFyYWRpc2FpY2FsXFxucGFyYWRpc2UvU01cXG5wYXJhZG94L01TXFxucGFyYWRveGljYWwvWVxcbnBhcmFmZmluL01cXG5wYXJhZ2xpZGluZ1xcbnBhcmFnb24vTVNcXG5wYXJhZ3JhcGgvR01EXFxucGFyYWdyYXBoc1xcbnBhcmFrZWV0L1NNXFxucGFyYWxlZ2FsL01TXFxucGFyYWxsYXgvTVNcXG5wYXJhbGxlbC9TR01EXFxucGFyYWxsZWxlZC9VXFxucGFyYWxsZWxpc20vTVNcXG5wYXJhbGxlbGl6YXRpb25cXG5wYXJhbGxlbGl6ZWRcXG5wYXJhbGxlbG9ncmFtL1NNXFxucGFyYWx5c2VzXFxucGFyYWx5c2lzL01cXG5wYXJhbHl0aWMvU01cXG5wYXJhbHl6ZS9EU0dcXG5wYXJhbHl6aW5nL1lcXG5wYXJhbWFnbmV0aWNcXG5wYXJhbWVjaWFcXG5wYXJhbWVjaXVtL01cXG5wYXJhbWVkaWMvTVNcXG5wYXJhbWVkaWNhbC9NU1xcbnBhcmFtZXRlci9NU1xcbnBhcmFtZXRlcml6ZS9EXFxucGFyYW1ldHJpY1xcbnBhcmFtaWxpdGFyeS9TTVxcbnBhcmFtb3VudFxcbnBhcmFtb3VudGN5XFxucGFyYW1vdXIvU01cXG5wYXJhbm9pYS9NXFxucGFyYW5vaWFjL01TXFxucGFyYW5vaWQvU01cXG5wYXJhbm9ybWFsXFxucGFyYXBldC9NU1xcbnBhcmFwaGVybmFsaWEvTVxcbnBhcmFwaHJhc2UvRFNNR1xcbnBhcmFwbGVnaWEvTVxcbnBhcmFwbGVnaWMvU01cXG5wYXJhcHJvZmVzc2lvbmFsL01TXFxucGFyYXBzeWNob2xvZ2lzdC9NU1xcbnBhcmFwc3ljaG9sb2d5L01cXG5wYXJhcXVhdC9NXFxucGFyYXNhaWxpbmdcXG5wYXJhc2NlbmRpbmdcXG5wYXJhc2l0ZS9TTVxcbnBhcmFzaXRpY1xcbnBhcmFzaXRpY2FsL1lcXG5wYXJhc2l0aXNtL01cXG5wYXJhc29sL01TXFxucGFyYXN5bXBhdGhldGljL1NcXG5wYXJhdGhpb24vTVxcbnBhcmF0aHlyb2lkL01TXFxucGFyYXRyb29wL1JaU1xcbnBhcmF0cm9vcGVyL01cXG5wYXJhdHJvb3BzL01cXG5wYXJhdHlwaG9pZC9NXFxucGFyYm9pbC9EU0dcXG5wYXJjZWwvR01EU1xcbnBhcmNoL0xHRFNcXG5wYXJjaG1lbnQvU01cXG5wYXJkbmVyL1NcXG5wYXJkb24vWkdNRFJCU1xcbnBhcmRvbmFibGUvVVxcbnBhcmRvbmFibHkvVVxcbnBhcmRvbmVyL01cXG5wYXJlL1NcXG5wYXJlZ29yaWMvTVxcbnBhcmVudC9HTURTXFxucGFyZW50YWdlL01cXG5wYXJlbnRhbFxcbnBhcmVudGhlc2VzXFxucGFyZW50aGVzaXMvTVxcbnBhcmVudGhlc2l6ZS9EU0dcXG5wYXJlbnRoZXRpY1xcbnBhcmVudGhldGljYWwvWVxcbnBhcmVudGhvb2QvTVxcbnBhcmVudGluZy9NXFxucGFyZXIvTVxcbnBhcmVzL1NcXG5wYXJlc2lzL01cXG5wYXJmYWl0L01TXFxucGFyaWFoL01cXG5wYXJpYWhzXFxucGFyaWJ1c1xcbnBhcmlldGFsXFxucGFyaW11dHVlbC9NU1xcbnBhcmluZy9NXFxucGFyaXNoL01TXFxucGFyaXNoaW9uZXIvTVNcXG5wYXJpdHkvRVNNXFxucGFyay9NRFNHXFxucGFya2EvU01cXG5wYXJraW5nL01cXG5wYXJrbGFuZFxcbnBhcmtvdXJcXG5wYXJrd2F5L01TXFxucGFya3lcXG5wYXJsYW5jZS9NXFxucGFybGF5L0dNRFNcXG5wYXJsZXkvR01EU1xcbnBhcmxpYW1lbnQvU01cXG5wYXJsaWFtZW50YXJpYW4vU01cXG5wYXJsaWFtZW50YXJ5XFxucGFybG9yL01TXFxucGFybG91c1xcbnBhcm1pZ2lhbmFcXG5wYXJvY2hpYWwvWVxcbnBhcm9jaGlhbGlzbS9NXFxucGFyb2Rpc3QvU01cXG5wYXJvZHkvR0RTTVxcbnBhcm9sZS9NR0RTXFxucGFyb2xlZS9NU1xcbnBhcm90aWRcXG5wYXJveHlzbS9TTVxcbnBhcm94eXNtYWxcXG5wYXJxdWV0L01EU0dcXG5wYXJxdWV0cnkvTVxcbnBhcnJlZFxcbnBhcnJpY2lkYWxcXG5wYXJyaWNpZGUvTVNcXG5wYXJyaW5nXFxucGFycm90L0dNRFNcXG5wYXJyeS9HRFNNXFxucGFyc2UvRFJTR1xcbnBhcnNlYy9NU1xcbnBhcnNpbW9uaW91cy9ZXFxucGFyc2ltb255L01cXG5wYXJzbGV5L01cXG5wYXJzbmlwL01TXFxucGFyc29uL01TXFxucGFyc29uYWdlL01TXFxucGFydCdzXFxucGFydC9DRFNHXFxucGFydGFrZS9aR1JTXFxucGFydGFrZW5cXG5wYXJ0YWtlci9NXFxucGFydGVycmUvU01cXG5wYXJ0aGVub2dlbmVzaXMvTVxcbnBhcnRpYWwvTVlTXFxucGFydGlhbGl0eS9NXFxucGFydGljaXBhbnQvU01cXG5wYXJ0aWNpcGF0ZS9EU0dOXFxucGFydGljaXBhdGlvbi9NXFxucGFydGljaXBhdG9yL01TXFxucGFydGljaXBhdG9yeVxcbnBhcnRpY2lwaWFsL01cXG5wYXJ0aWNpcGxlL01TXFxucGFydGljbGUvU01cXG5wYXJ0aWNsZWJvYXJkL01cXG5wYXJ0aWN1bGFyL1NNWVxcbnBhcnRpY3VsYXJpdHkvU01cXG5wYXJ0aWN1bGFyaXphdGlvbi9NXFxucGFydGljdWxhcml6ZS9EU0dcXG5wYXJ0aWN1bGF0ZS9TTVxcbnBhcnRpbmcvTVNcXG5wYXJ0aXNhbi9TTVxcbnBhcnRpc2Fuc2hpcC9NXFxucGFydGl0aW9uL0dNRFNcXG5wYXJ0aXRpdmUvTVNcXG5wYXJ0bHlcXG5wYXJ0bmVyL01EU0dcXG5wYXJ0bmVyc2hpcC9NU1xcbnBhcnRvb2tcXG5wYXJ0cmlkZ2UvU01cXG5wYXJ0dXJpdGlvbi9NXFxucGFydHdheVxcbnBhcnR5L0dEU01cXG5wYXJ2ZW51L01TXFxucGFzY2FsL01TXFxucGFzY2hhbFxcbnBhc2hhL1NNXFxucGFzcy9NXFxucGFzc2FibHlcXG5wYXNzYWdlL01TXFxucGFzc2FnZXdheS9NU1xcbnBhc3Nib29rL01TXFxucGFzc2UvRFJTQlhaR05WXFxucGFzc2VsL01TXFxucGFzc2VuZ2VyL1NNXFxucGFzc2VyL01cXG5wYXNzZXJieS9NXFxucGFzc2Vyc2J5XFxucGFzc2ltXFxucGFzc2luZy9NWVxcbnBhc3Npb24vRU1cXG5wYXNzaW9uYXRlL0VZXFxucGFzc2lvbmZsb3dlci9TTVxcbnBhc3Npb25sZXNzXFxucGFzc2l2ZS9QTVlTXFxucGFzc2l2ZW5lc3MvTVxcbnBhc3Npdml0eS9NXFxucGFzc2l2aXphdGlvblxcbnBhc3Npdml6ZS9EU0dcXG5wYXNza2V5L01TXFxucGFzc3BocmFzZS9TXFxucGFzc3BvcnQvTVNcXG5wYXNzd29yZC9NU1xcbnBhc3QvQU1TXFxucGFzdGEvU01cXG5wYXN0ZS9EU01HXFxucGFzdGVib2FyZC9NXFxucGFzdGVsL01TXFxucGFzdGVybi9NU1xcbnBhc3RldXJpemF0aW9uL01cXG5wYXN0ZXVyaXplL1pHRFJTXFxucGFzdGV1cml6ZWQvVVxcbnBhc3RldXJpemVyL01cXG5wYXN0aWNoZS9NU1xcbnBhc3RpZVxcbnBhc3RpbGxlL01TXFxucGFzdGltZS9NU1xcbnBhc3RpbmVzcy9NXFxucGFzdG9yL01TXFxucGFzdG9yYWwvTVNcXG5wYXN0b3JhdGUvTVNcXG5wYXN0cmFtaS9NXFxucGFzdHJ5L1NNXFxucGFzdHVyYWdlL01cXG5wYXN0dXJlL0RTTUdcXG5wYXN0dXJlbGFuZC9NXFxucGFzdHkvUFRSU01cXG5wYXQvU01cXG5wYXRjaC9FR01EU1xcbnBhdGNoaWx5XFxucGF0Y2hpbmVzcy9NXFxucGF0Y2hvdWxpXFxucGF0Y2h3b3JrL1NNXFxucGF0Y2h5L1RQUlxcbnBhdGUvTVNcXG5wYXRlbGxhL01TXFxucGF0ZWxsYWVcXG5wYXRlbnQvR01EWVNcXG5wYXRlcmZhbWlsaWFzL01TXFxucGF0ZXJuYWwvWVxcbnBhdGVybmFsaXNtL01cXG5wYXRlcm5hbGlzdC9TXFxucGF0ZXJuYWxpc3RpY1xcbnBhdGVybml0eS9NXFxucGF0ZXJub3N0ZXIvTVNcXG5wYXRoL01cXG5wYXRoZXRpY1xcbnBhdGhldGljYWxseVxcbnBhdGhmaW5kZXIvU01cXG5wYXRobGVzc1xcbnBhdGhvZ2VuL1NNXFxucGF0aG9nZW5pY1xcbnBhdGhvbG9naWNhbC9ZXFxucGF0aG9sb2dpc3QvU01cXG5wYXRob2xvZ3kvTVxcbnBhdGhvcy9NXFxucGF0aHNcXG5wYXRod2F5L01TXFxucGF0aWVuY2UvTVxcbnBhdGllbnQvSU1TVFxcbnBhdGllbnRlclxcbnBhdGllbnRseVxcbnBhdGluYS9NU1xcbnBhdGluZVxcbnBhdGlvL1NNXFxucGF0aXNzZXJpZS9TXFxucGF0b2lzL01cXG5wYXRyZXNmYW1pbGlhc1xcbnBhdHJpYXJjaC9NXFxucGF0cmlhcmNoYWxcXG5wYXRyaWFyY2hhdGUvTVNcXG5wYXRyaWFyY2hzXFxucGF0cmlhcmNoeS9TTVxcbnBhdHJpY2lhbi9TTVxcbnBhdHJpY2lkYWxcXG5wYXRyaWNpZGUvU01cXG5wYXRyaW1vbmlhbFxcbnBhdHJpbW9ueS9TTVxcbnBhdHJpb3QvU01cXG5wYXRyaW90aWMvVVxcbnBhdHJpb3RpY2FsbHlcXG5wYXRyaW90aXNtL01cXG5wYXRyb2wvTVNcXG5wYXRyb2xsZWRcXG5wYXRyb2xsaW5nXFxucGF0cm9sbWFuL01cXG5wYXRyb2xtZW5cXG5wYXRyb2x3b21hbi9NXFxucGF0cm9sd29tZW5cXG5wYXRyb24vTVNcXG5wYXRyb25hZ2UvTVNcXG5wYXRyb25lc3MvTVNcXG5wYXRyb25pemUvWkdEUlNcXG5wYXRyb25pemVyL01cXG5wYXRyb25pemluZy9ZXFxucGF0cm9ueW1pYy9TTVxcbnBhdHJvbnltaWNhbGx5XFxucGF0cm9vbi9TTVxcbnBhdHN5L1NNXFxucGF0dGVkXFxucGF0dGVyL01ER1NcXG5wYXR0ZXJuL1NNREdcXG5wYXR0aW5nXFxucGF0dHkvU01cXG5wYXVjaXR5L01cXG5wYXVuY2gvTVNcXG5wYXVuY2h5L1JUXFxucGF1cGVyL01TXFxucGF1cGVyaXNtL01cXG5wYXVwZXJpemUvRFNHXFxucGF1c2UvRFNNR1xcbnBhdmUvQUdEU1xcbnBhdmVkL1VcXG5wYXZlbWVudC9NU1xcbnBhdmlsaW9uL1NNXFxucGF2aW5nL01TXFxucGF2bG92YS9TXFxucGF3L1NHTURcXG5wYXdsL01TXFxucGF3bi9NRFNHXFxucGF3bmJyb2tlci9NU1xcbnBhd25icm9raW5nL01cXG5wYXduc2hvcC9NU1xcbnBhd3Bhdy9NU1xcbnBheSdzXFxucGF5L0FTR0JMXFxucGF5YmFjay9TTVxcbnBheWNoZWNrL01TXFxucGF5ZGF5L01TXFxucGF5ZWRcXG5wYXllZS9TTVxcbnBheWVyL1NNXFxucGF5bG9hZC9TTVxcbnBheW1hc3Rlci9TTVxcbnBheW1lbnQvQVNNXFxucGF5b2ZmL01TXFxucGF5b2xhL01cXG5wYXlvdXQvTVNcXG5wYXlwaG9uZS9TXFxucGF5cm9sbC9TTVxcbnBheXNsaXAvU01cXG5wYXl3YWxsL1NNXFxucGF5d2FyZVxcbnBjdFxcbnBkXFxucGVhL1NNXFxucGVhY2UvU01cXG5wZWFjZWFibGVcXG5wZWFjZWFibHlcXG5wZWFjZWZ1bC9QWVxcbnBlYWNlZnVsbmVzcy9NXFxucGVhY2VrZWVwZXIvU01cXG5wZWFjZWtlZXBpbmcvTVxcbnBlYWNlbWFrZXIvTVNcXG5wZWFjZW1ha2luZy9NXFxucGVhY2V0aW1lL01cXG5wZWFjaC9NU1xcbnBlYWNoeS9UUlxcbnBlYWNvY2svTVNcXG5wZWFmb3dsL01TXFxucGVhaGVuL01TXFxucGVhay9NRFNHXFxucGVha3lcXG5wZWFsL0FNRFNHXFxucGVhbnV0L01TXFxucGVhci9NWVNcXG5wZWFybC9TR01EXFxucGVhcmx5L1JUXFxucGVhc2FudC9TTVxcbnBlYXNhbnRyeS9NXFxucGVhc2hvb3Rlci9TTVxcbnBlYXQvTVxcbnBlYXR5L1RSXFxucGViYmxlL01HRFNcXG5wZWJibHlcXG5wZWNhbi9TTVxcbnBlY2NhZGlsbG8vTVxcbnBlY2NhZGlsbG9lc1xcbnBlY2NhcnkvU01cXG5wZWNrL01EUlNaR1xcbnBlY2tpc2hcXG5wZWNzXFxucGVjdGljXFxucGVjdGluL01cXG5wZWN0b3JhbC9NU1xcbnBlY3RvcmFsaXNcXG5wZWN1bGF0ZS9HTkRTXFxucGVjdWxhdGlvbi9NXFxucGVjdWxhdG9yL1NNXFxucGVjdWxpYXIvWVxcbnBlY3VsaWFyaXR5L1NNXFxucGVjdW5pYXJ5XFxucGVkYWdvZ2ljXFxucGVkYWdvZ2ljYWwvWVxcbnBlZGFnb2d1ZS9TTVxcbnBlZGFnb2d5L01cXG5wZWRhbC9TR01EXFxucGVkYWxvL1NcXG5wZWRhbnQvTVNcXG5wZWRhbnRpY1xcbnBlZGFudGljYWxseVxcbnBlZGFudHJ5L01cXG5wZWRkbGUvWkdEUlNcXG5wZWRkbGVyL01cXG5wZWRlcmFzdC9NU1xcbnBlZGVyYXN0eS9NXFxucGVkZXN0YWwvTVNcXG5wZWRlc3RyaWFuL1NNXFxucGVkZXN0cmlhbml6YXRpb25cXG5wZWRlc3RyaWFuaXplL0dEU1xcbnBlZGlhdHJpYy9TXFxucGVkaWF0cmljaWFuL01TXFxucGVkaWF0cmljcy9NXFxucGVkaWNhYi9TTVxcbnBlZGljdXJlL01HRFNcXG5wZWRpY3VyaXN0L01TXFxucGVkaWdyZWUvTURTXFxucGVkaW1lbnQvTVNcXG5wZWRvbWV0ZXIvTVNcXG5wZWRvcGhpbGUvU1xcbnBlZG9waGlsaWFcXG5wZWR1bmNsZS9NU1xcbnBlZS9EUlNNWlxcbnBlZWluZ1xcbnBlZWsvTURTR1xcbnBlZWthYm9vL01cXG5wZWVsL01EUlNKWkdcXG5wZWVsZWQvVVxcbnBlZWxlci9NXFxucGVlbGluZy9NXFxucGVlbi9NU1xcbnBlZXAvTURSU1pHXFxucGVlcGJvXFxucGVlcGVyL01cXG5wZWVwaG9sZS9NU1xcbnBlZXBzaG93L01TXFxucGVlci9NREdcXG5wZWVyYWdlL1NNXFxucGVlcmVzcy9NU1xcbnBlZXJsZXNzXFxucGVldmUvRFNNR1xcbnBlZXZpc2gvUFlcXG5wZWV2aXNobmVzcy9NXFxucGVld2VlL01TXFxucGVld2l0L1NcXG5wZWcvU01cXG5wZWdib2FyZC9NU1xcbnBlZ2dlZFxcbnBlZ2dpbmdcXG5wZWlnbm9pci9TTVxcbnBlam9yYXRpb24vTVxcbnBlam9yYXRpdmUvU01ZXFxucGVrZS9NU1xcbnBla2luZXNlc1xcbnBla2luZ2VzZS9TTVxcbnBla29lL01cXG5wZWxhZ2ljXFxucGVsZi9NXFxucGVsaWNhbi9NU1xcbnBlbGxhZ3JhL01cXG5wZWxsZXQvR01EU1xcbnBlbGx1Y2lkXFxucGVsbWV0L1NcXG5wZWx0L01EU0dcXG5wZWx2aWNcXG5wZWx2aXMvTVNcXG5wZW1taWNhbi9NXFxucGVuL01cXG5wZW5hbFxcbnBlbmFsaXphdGlvbi9NXFxucGVuYWxpemUvRFNHXFxucGVuYWx0eS9TTVxcbnBlbmFuY2UvTVNcXG5wZW5jZVxcbnBlbmNoYW50L1NNXFxucGVuY2lsL0dNREpTXFxucGVuZC9DRFNHXFxucGVuZGFudC9NU1xcbnBlbmRlbnQvTVNcXG5wZW5kdWxvdXNcXG5wZW5kdWx1bS9NU1xcbnBlbmV0cmFiaWxpdHkvTVxcbnBlbmV0cmFibGVcXG5wZW5ldHJhdGUvRFNHTlZYXFxucGVuZXRyYXRpbmcvWVxcbnBlbmV0cmF0aW9uL01cXG5wZW5mcmllbmQvU1xcbnBlbmd1aW4vTVNcXG5wZW5pY2lsbGluL01cXG5wZW5pbGVcXG5wZW5pbnN1bGEvU01cXG5wZW5pbnN1bGFyXFxucGVuaXMvTVNcXG5wZW5pdGVuY2UvTVxcbnBlbml0ZW50L1NNWVxcbnBlbml0ZW50aWFsXFxucGVuaXRlbnRpYXJ5L1NNXFxucGVua25pZmUvTVxcbnBlbmtuaXZlc1xcbnBlbmxpZ2h0L1NNXFxucGVubWFuL01cXG5wZW5tYW5zaGlwL01cXG5wZW5tZW5cXG5wZW5uYW50L01TXFxucGVubmVkXFxucGVubmlsZXNzXFxucGVubmluZ1xcbnBlbm5vbi9NU1xcbnBlbm55L1NNXFxucGVubnl3ZWlnaHQvTVNcXG5wZW5ueXdvcnRoXFxucGVub2xvZ2lzdC9NU1xcbnBlbm9sb2d5L01cXG5wZW5zaW9uL0JaR01EUlNcXG5wZW5zaW9uZXIvTVxcbnBlbnNpdmUvUFlcXG5wZW5zaXZlbmVzcy9NXFxucGVudFxcbnBlbnRhY2xlL01TXFxucGVudGFnb24vTVNcXG5wZW50YWdvbmFsXFxucGVudGFncmFtL1NNXFxucGVudGFtZXRlci9TTVxcbnBlbnRhdGhsZXRlL01TXFxucGVudGF0aGxvbi9NU1xcbnBlbnRob3VzZS9TTVxcbnBlbnVjaGUvTVxcbnBlbnVsdGltYXRlL1NNXFxucGVudW1icmEvTVNcXG5wZW51bWJyYWVcXG5wZW51cmlvdXMvUFlcXG5wZW51cmlvdXNuZXNzL01cXG5wZW51cnkvTVxcbnBlb24vTVNcXG5wZW9uYWdlL01cXG5wZW9ueS9TTVxcbnBlb3BsZS9NR0RTXFxucGVwL1NNXFxucGVwcGVkXFxucGVwcGVyL0dNRFNcXG5wZXBwZXJjb3JuL1NNXFxucGVwcGVybWludC9TTVxcbnBlcHBlcm9uaS9NU1xcbnBlcHBlcnlcXG5wZXBwaW5lc3MvTVxcbnBlcHBpbmdcXG5wZXBweS9UUFJcXG5wZXBzaW4vTVxcbnBlcHRpYy9NU1xcbnBlcHRpZGUvU1xcbnBlcmFkdmVudHVyZS9NXFxucGVyYW1idWxhdGUvWEdORFNcXG5wZXJhbWJ1bGF0aW9uL01cXG5wZXJhbWJ1bGF0b3IvTVNcXG5wZXJjYWxlL01TXFxucGVyY2VpdmUvQkdEU1xcbnBlcmNlaXZlZC9VXFxucGVyY2VudC9NU1xcbnBlcmNlbnRhZ2UvU01cXG5wZXJjZW50aWxlL1NNXFxucGVyY2VwdGlibGVcXG5wZXJjZXB0aWJseVxcbnBlcmNlcHRpb24vU01cXG5wZXJjZXB0aW9uYWxcXG5wZXJjZXB0aXZlL1BZXFxucGVyY2VwdGl2ZW5lc3MvTVxcbnBlcmNlcHR1YWwvWVxcbnBlcmNoL0dNRFNcXG5wZXJjaGFuY2VcXG5wZXJjaXBpZW5jZS9NXFxucGVyY2lwaWVudFxcbnBlcmNvbGF0ZS9HTkRTXFxucGVyY29sYXRpb24vTVxcbnBlcmNvbGF0b3IvU01cXG5wZXJjdXNzaW9uL0FNXFxucGVyY3Vzc2lvbmlzdC9NU1xcbnBlcmN1c3NpdmVcXG5wZXJkaXRpb24vTVxcbnBlcmR1cmFibGVcXG5wZXJlZ3JpbmF0ZS9EU1hHTlxcbnBlcmVncmluYXRpb24vTVxcbnBlcmVncmluZS9NU1xcbnBlcmVtcHRvcmlseVxcbnBlcmVtcHRvcnlcXG5wZXJlbm5pYWwvU01ZXFxucGVyZXN0cm9pa2EvTVxcbnBlcmZlY3QvUFRHTURSWVNcXG5wZXJmZWN0YS9NU1xcbnBlcmZlY3RpYmlsaXR5L01cXG5wZXJmZWN0aWJsZVxcbnBlcmZlY3Rpb24vU01cXG5wZXJmZWN0aW9uaXNtL01cXG5wZXJmZWN0aW9uaXN0L1NNXFxucGVyZmVjdG5lc3MvTVxcbnBlcmZpZGlvdXMvWVxcbnBlcmZpZHkvU01cXG5wZXJmb3JhdGUvR05YRFNcXG5wZXJmb3JhdGlvbi9NXFxucGVyZm9yY2VcXG5wZXJmb3JtL1NEUlpHXFxucGVyZm9ybWFuY2UvU01cXG5wZXJmb3JtYXRpdmVcXG5wZXJmb3JtZWQvVVxcbnBlcmZvcm1lci9NXFxucGVyZnVtZS9EUlNNWkdcXG5wZXJmdW1lci9NXFxucGVyZnVtZXJ5L1NNXFxucGVyZnVuY3RvcmlseVxcbnBlcmZ1bmN0b3J5XFxucGVyZnVzaW9uXFxucGVyZ29sYS9TTVxcbnBlcmhhcHNcXG5wZXJpY2FyZGlhXFxucGVyaWNhcmRpYWxcXG5wZXJpY2FyZGl0aXNcXG5wZXJpY2FyZGl1bS9NXFxucGVyaWdlZS9TTVxcbnBlcmloZWxpYVxcbnBlcmloZWxpb24vTVxcbnBlcmlsL1NHTURcXG5wZXJpbG91cy9ZXFxucGVyaW1ldGVyL1NNXFxucGVyaW5hdGFsXFxucGVyaW5lYVxcbnBlcmluZXVtL01cXG5wZXJpb2QvTVNcXG5wZXJpb2RpY1xcbnBlcmlvZGljYWwvU01ZXFxucGVyaW9kaWNpdHkvTVxcbnBlcmlvZG9udGFsXFxucGVyaW9kb250aWNzL01cXG5wZXJpb2RvbnRpc3QvU01cXG5wZXJpcGF0ZXRpYy9NU1xcbnBlcmlwaGVyYWwvTVlTXFxucGVyaXBoZXJ5L1NNXFxucGVyaXBocmFzZXNcXG5wZXJpcGhyYXNpcy9NXFxucGVyaXBocmFzdGljXFxucGVyaXNjb3BlL1NNXFxucGVyaXNoL0JEUlNaR1xcbnBlcmlzaGFibGUvTVNcXG5wZXJpc3RhbHNlc1xcbnBlcmlzdGFsc2lzL01cXG5wZXJpc3RhbHRpY1xcbnBlcmlzdHlsZS9TTVxcbnBlcml0b25lYWxcXG5wZXJpdG9uZXVtL01TXFxucGVyaXRvbml0aXMvTVxcbnBlcml3aWcvU01cXG5wZXJpd2lua2xlL1NNXFxucGVyanVyZS9EUlNaR1xcbnBlcmp1cmVyL01cXG5wZXJqdXJ5L1NNXFxucGVyay9NRFNHXFxucGVya2lseVxcbnBlcmtpbmVzcy9NXFxucGVya3kvVFBSXFxucGVybS9NRFNHXFxucGVybWFmcm9zdC9NXFxucGVybWFuZW5jZS9NXFxucGVybWFuZW5jeS9NXFxucGVybWFuZW50L1NNWVxcbnBlcm1lYWJpbGl0eS9NXFxucGVybWVhYmxlXFxucGVybWVhdGUvR05EU1xcbnBlcm1lYXRpb24vTVxcbnBlcm1pc3NpYmxlXFxucGVybWlzc2libHlcXG5wZXJtaXNzaW9uL01TXFxucGVybWlzc2l2ZS9QWVxcbnBlcm1pc3NpdmVuZXNzL01cXG5wZXJtaXQvTVNcXG5wZXJtaXR0ZWRcXG5wZXJtaXR0aW5nXFxucGVybWl0dGl2aXR5XFxucGVybXV0YXRpb24vU01cXG5wZXJtdXRlL0RTR1xcbnBlcm5pY2lvdXMvWVBcXG5wZXJuaWNpb3VzbmVzcy9NXFxucGVyb3JhdGlvbi9NU1xcbnBlcm94aWRlL01HRFNcXG5wZXJwZW5kaWN1bGFyL1NNWVxcbnBlcnBlbmRpY3VsYXJpdHkvTVxcbnBlcnBldHJhdGUvRFNHTlxcbnBlcnBldHJhdGlvbi9NXFxucGVycGV0cmF0b3IvTVNcXG5wZXJwZXR1YWwvU01ZXFxucGVycGV0dWF0ZS9EU0dOXFxucGVycGV0dWF0aW9uL01cXG5wZXJwZXR1aXR5L01cXG5wZXJwbGV4L0dEU1xcbnBlcnBsZXhlZC9ZXFxucGVycGxleGluZy9ZXFxucGVycGxleGl0eS9TTVxcbnBlcnF1aXNpdGUvU01cXG5wZXJzZWN1dGUvR05YRFNcXG5wZXJzZWN1dGlvbi9NXFxucGVyc2VjdXRvci9TTVxcbnBlcnNldmVyYW5jZS9NXFxucGVyc2V2ZXJlL0RTR1xcbnBlcnNpZmxhZ2UvTVxcbnBlcnNpbW1vbi9TTVxcbnBlcnNpc3QvU0dEXFxucGVyc2lzdGVuY2UvTVxcbnBlcnNpc3RlbnQvWVxcbnBlcnNuaWNrZXR5XFxucGVyc29uL1VNU1xcbnBlcnNvbmEvU01cXG5wZXJzb25hYmxlXFxucGVyc29uYWVcXG5wZXJzb25hZ2UvTVNcXG5wZXJzb25hbC9NWVNcXG5wZXJzb25hbGl0eS9TTVxcbnBlcnNvbmFsaXplL0NEU0dcXG5wZXJzb25hbHR5L01cXG5wZXJzb25pZmljYXRpb24vTVxcbnBlcnNvbmlmeS9HRFNOWFxcbnBlcnNvbm5lbC9NXFxucGVyc3BlY3RpdmUvTVNcXG5wZXJzcGV4XFxucGVyc3BpY2FjaW91cy9ZXFxucGVyc3BpY2FjaXR5L01cXG5wZXJzcGljdWl0eS9NXFxucGVyc3BpY3VvdXNcXG5wZXJzcGlyYXRpb24vTVxcbnBlcnNwaXJlL0dEU1xcbnBlcnN1YWRlL0JaR0RSU1xcbnBlcnN1YWRlZC9VXFxucGVyc3VhZGVyL01cXG5wZXJzdWFzaW9uL1NNXFxucGVyc3Vhc2l2ZS9QWVxcbnBlcnN1YXNpdmVuZXNzL01cXG5wZXJ0L1JZUFRcXG5wZXJ0YWluL0dTRFxcbnBlcnRpbmFjaW91cy9ZXFxucGVydGluYWNpdHkvTVxcbnBlcnRpbmVuY2UvTVxcbnBlcnRpbmVudC9ZXFxucGVydG5lc3MvTVxcbnBlcnR1cmIvREdTXFxucGVydHVyYmF0aW9uL1NNXFxucGVydHVyYmVkL1VcXG5wZXJ0dXNzaXMvTVxcbnBlcnVrZS9NU1xcbnBlcnVzYWwvTVNcXG5wZXJ1c2UvR0RTXFxucGVydi9TXFxucGVydmFkZS9EU0dcXG5wZXJ2YXNpdmUvUFlcXG5wZXJ2YXNpdmVuZXNzL01cXG5wZXJ2ZXJzZS9QWFlOXFxucGVydmVyc2VuZXNzL01cXG5wZXJ2ZXJzaW9uL01cXG5wZXJ2ZXJzaXR5L01cXG5wZXJ2ZXJ0L1NHTURcXG5wZXNldGEvTVNcXG5wZXNraWx5XFxucGVza2luZXNzL01cXG5wZXNreS9UUFJcXG5wZXNvL01TXFxucGVzc2FyeS9TXFxucGVzc2ltYWxcXG5wZXNzaW1pc20vTVxcbnBlc3NpbWlzdC9TTVxcbnBlc3NpbWlzdGljXFxucGVzc2ltaXN0aWNhbGx5XFxucGVzdC9NUlNaXFxucGVzdGVyL0dEXFxucGVzdGljaWRlL01TXFxucGVzdGlmZXJvdXNcXG5wZXN0aWxlbmNlL1NNXFxucGVzdGlsZW50XFxucGVzdGlsZW50aWFsXFxucGVzdGxlL01HRFNcXG5wZXN0by9NXFxucGV0L1NaTVJcXG5wZXRhYnl0ZS9NU1xcbnBldGFqb3VsZS9TXFxucGV0YWwvU01EXFxucGV0YXJkL01TXFxucGV0YXdhdHQvU1xcbnBldGNvY2svU01cXG5wZXRlci9HTURcXG5wZXRpb2xlL1NNXFxucGV0aXRlL01TXFxucGV0aXRpb24vWkdNRFJTXFxucGV0aXRpb25hcnlcXG5wZXRpdGlvbmVyL01cXG5wZXRyZWwvTVNcXG5wZXRyaWZhY3Rpb24vTVxcbnBldHJpZnkvRFNHXFxucGV0cm9jaGVtaWNhbC9TTVxcbnBldHJvZG9sbGFyL01TXFxucGV0cm9sL01cXG5wZXRyb2xhdHVtL01cXG5wZXRyb2xldW0vTVxcbnBldHJvbG9naXN0L1NNXFxucGV0cm9sb2d5L01cXG5wZXR0ZWRcXG5wZXR0aWNvYXQvTVNcXG5wZXR0aWZvZy9TXFxucGV0dGlmb2dnZWRcXG5wZXR0aWZvZ2dlci9TTVxcbnBldHRpZm9nZ2VyeS9NXFxucGV0dGlmb2dnaW5nXFxucGV0dGlseVxcbnBldHRpbmVzcy9NXFxucGV0dGluZy9NXFxucGV0dGlzaC9ZXFxucGV0dHkvUFRSXFxucGV0dWxhbmNlL01cXG5wZXR1bGFudC9ZXFxucGV0dW5pYS9NU1xcbnBldy9TTVxcbnBld2VlL1NNXFxucGV3aXQvU01cXG5wZXd0ZXIvTVNcXG5wZXlvdGUvTVxcbnBmXFxucGZlbm5pZy9NU1xcbnBnXFxucGhhZXRvbi9NU1xcbnBoYWdlL1NcXG5waGFnb2N5dGUvU01cXG5waGFsYW5nZXIvU01cXG5waGFsYW5nZXNcXG5waGFsYW54L01TXFxucGhhbGxpXFxucGhhbGxpY1xcbnBoYWxsb2NlbnRyaWNcXG5waGFsbG9jZW50cmlzbVxcbnBoYWxsdXMvTVxcbnBoYW50YXNtL01TXFxucGhhbnRhc21hZ29yaWEvTVNcXG5waGFudGFzbWFnb3JpY2FsXFxucGhhbnRhc21hbFxcbnBoYW50b20vU01cXG5waGFyYW9oL01cXG5waGFyYW9oc1xcbnBoYXJpc2FpY1xcbnBoYXJpc2VlL1NNXFxucGhhcm1hY2V1dGljL01TXFxucGhhcm1hY2V1dGljYWwvU01cXG5waGFybWFjZXV0aWNzL01cXG5waGFybWFjaXN0L01TXFxucGhhcm1hY29sb2dpY1xcbnBoYXJtYWNvbG9naWNhbFxcbnBoYXJtYWNvbG9naXN0L1NNXFxucGhhcm1hY29sb2d5L01cXG5waGFybWFjb3BvZWlhL01TXFxucGhhcm1hY290aGVyYXB5XFxucGhhcm1hY3kvU01cXG5waGFyeW5nZWFsXFxucGhhcnluZ2VzXFxucGhhcnluZ2l0aXMvTVxcbnBoYXJ5bngvTVxcbnBoYXNlL0RTTUdcXG5waGFzZW91dC9TTVxcbnBoYXRcXG5waGVhc2FudC9NU1xcbnBoZW5hY2V0aW4vTVxcbnBoZW5vYmFyYml0YWwvTVxcbnBoZW5vbC9NXFxucGhlbm9tL01TXFxucGhlbm9tZW5hXFxucGhlbm9tZW5hbC9ZXFxucGhlbm9tZW5vbG9naWNhbFxcbnBoZW5vbWVub2xvZ3lcXG5waGVub21lbm9uL01TXFxucGhlbm90eXBlXFxucGhlbnl0b2luXFxucGhlcm9tb25lL01TXFxucGhld1xcbnBoaS9TTVxcbnBoaWFsL1NNXFxucGhpbGFuZGVyL1pHRFJTXFxucGhpbGFuZGVyZXIvTVxcbnBoaWxhbmRlcmluZy9NXFxucGhpbGFudGhyb3BpY1xcbnBoaWxhbnRocm9waWNhbGx5XFxucGhpbGFudGhyb3Bpc3QvTVNcXG5waGlsYW50aHJvcHkvU01cXG5waGlsYXRlbGljXFxucGhpbGF0ZWxpc3QvTVNcXG5waGlsYXRlbHkvTVxcbnBoaWxoYXJtb25pYy9TTVxcbnBoaWxpcHBpYy9NU1xcbnBoaWxpc3RpbmUvTVNcXG5waGlsaXN0aW5pc20vTVxcbnBoaWxvZGVuZHJvbi9TTVxcbnBoaWxvbG9naWNhbFxcbnBoaWxvbG9naXN0L01TXFxucGhpbG9sb2d5L01cXG5waGlsb3NvcGhlci9NU1xcbnBoaWxvc29waGljXFxucGhpbG9zb3BoaWNhbC9ZXFxucGhpbG9zb3BoaXplL0RSU1pHXFxucGhpbG9zb3BoaXplci9NXFxucGhpbG9zb3BoeS9TTVxcbnBoaWx0ZXIvTVNcXG5waGlzaC9aR0RSXFxucGhpc2hlci9NXFxucGhsZWJpdGlzL01cXG5waGxlZ20vTVxcbnBobGVnbWF0aWNcXG5waGxlZ21hdGljYWxseVxcbnBobG9lbS9NXFxucGhsb3gvTVxcbnBob2JpYS9NU1xcbnBob2JpYy9NU1xcbnBob2ViZS9NU1xcbnBob2VuaXgvTVNcXG5waG9uZS9EU01HXFxucGhvbmVjYXJkL1NcXG5waG9uZW1lL01TXFxucGhvbmVtaWNcXG5waG9uZW1pY2FsbHlcXG5waG9uZXRpYy9TXFxucGhvbmV0aWNhbGx5XFxucGhvbmV0aWNpYW4vU01cXG5waG9uZXRpY3MvTVxcbnBob25leWVkXFxucGhvbmV5aW5nXFxucGhvbmljL1NcXG5waG9uaWNhbGx5XFxucGhvbmljcy9NXFxucGhvbmluZXNzL01cXG5waG9ub2dyYXBoL01cXG5waG9ub2dyYXBoaWNcXG5waG9ub2dyYXBoc1xcbnBob25vbG9naWNhbC9ZXFxucGhvbm9sb2dpc3QvTVNcXG5waG9ub2xvZ3kvTVxcbnBob25vblxcbnBob255L1BUR0RSU01cXG5waG9vZXlcXG5waG9zcGhhdGUvTVNcXG5waG9zcGhvZGllc3RlcmFzZVxcbnBob3NwaG9yL01TXFxucGhvc3Bob3Jlc2NlbmNlL01cXG5waG9zcGhvcmVzY2VudC9ZXFxucGhvc3Bob3JpY1xcbnBob3NwaG9yb3VzXFxucGhvc3Bob3J1cy9NXFxucGhvc3Bob3J5bGF0aW9uXFxucGhvdG8vU0dNRFxcbnBob3RvY2VsbC9NU1xcbnBob3RvY29waWVyL01cXG5waG90b2NvcHkvRFJTTVpHXFxucGhvdG9lbGVjdHJpY1xcbnBob3RvZWxlY3RyaWNhbGx5XFxucGhvdG9lbmdyYXZlL0RSU0paR1xcbnBob3RvZW5ncmF2ZXIvTVxcbnBob3RvZW5ncmF2aW5nL01cXG5waG90b2ZpbmlzaGluZy9NXFxucGhvdG9nZW5pY1xcbnBob3RvZ2VuaWNhbGx5XFxucGhvdG9ncmFwaC9NRFJaR1xcbnBob3RvZ3JhcGhlci9NXFxucGhvdG9ncmFwaGljXFxucGhvdG9ncmFwaGljYWxseVxcbnBob3RvZ3JhcGhzL0FcXG5waG90b2dyYXBoeS9NXFxucGhvdG9qb3VybmFsaXNtL01cXG5waG90b2pvdXJuYWxpc3QvU01cXG5waG90b21ldGVyL01TXFxucGhvdG9uL01TXFxucGhvdG9zZW5zaXRpdmVcXG5waG90b3N0YXQvU01cXG5waG90b3N0YXRpY1xcbnBob3Rvc3RhdHRlZFxcbnBob3Rvc3RhdHRpbmdcXG5waG90b3N5bnRoZXNpcy9NXFxucGhvdG9zeW50aGVzaXplL0dEU1xcbnBob3Rvc3ludGhldGljXFxucGhvdG90cm9waWNcXG5waG90b3Ryb3Bpc21cXG5waG90b3R5cGVzZXR0ZXJcXG5waG90b3R5cGVzZXR0aW5nXFxucGhvdG92b2x0YWljXFxucGhyYXNhbFxcbnBocmFzZSdzXFxucGhyYXNlL0FHRFNcXG5waHJhc2Vib29rL1NcXG5waHJhc2VvbG9neS9NXFxucGhyYXNpbmcvTVNcXG5waHJlYWtpbmdcXG5waHJlbm9sb2dpc3QvU01cXG5waHJlbm9sb2d5L01cXG5waHlsYVxcbnBoeWxhY3RlcnkvU01cXG5waHlsb2dlbnkvTVxcbnBoeWx1bS9NXFxucGh5c1xcbnBoeXNpYy9TTVxcbnBoeXNpY2FsL01ZU1xcbnBoeXNpY2FsaXR5XFxucGh5c2ljaWFuL1NNXFxucGh5c2ljaXN0L1NNXFxucGh5c2lja2VkXFxucGh5c2lja2luZ1xcbnBoeXNpY3MvTVxcbnBoeXNpby9TXFxucGh5c2lvZ25vbXkvU01cXG5waHlzaW9ncmFwaHkvTVxcbnBoeXNpb2xvZ2ljXFxucGh5c2lvbG9naWNhbC9ZXFxucGh5c2lvbG9naXN0L01TXFxucGh5c2lvbG9neS9NXFxucGh5c2lvdGhlcmFwaXN0L01TXFxucGh5c2lvdGhlcmFweS9NXFxucGh5c2lxdWUvTVNcXG5waHl0b3BsYW5rdG9uXFxucGkvU01EUkhaR1xcbnBpYW5pc3NpbW8vU01cXG5waWFuaXN0L01TXFxucGlhbm8vU01cXG5waWFub2ZvcnRlL1NNXFxucGlhbm9sYS9TXFxucGlhc3Rlci9NU1xcbnBpYXp6YS9NU1xcbnBpYnJvY2gvTVxcbnBpYnJvY2hzXFxucGljL1NNXFxucGljYS9NXFxucGljYWRvci9NU1xcbnBpY2FudGVcXG5waWNhcmVzcXVlXFxucGljYXl1bmVcXG5waWNjYWxpbGxpL01cXG5waWNjb2xvL01TXFxucGljay9NRFJTSlpHXFxucGlja2F4L0dNRFNcXG5waWNrZXIvTVxcbnBpY2tlcmVsL01TXFxucGlja2V0L1pHTURSU1xcbnBpY2tpbmdzL01cXG5waWNrbGUvTUdEU1xcbnBpY2twb2NrZXQvU01cXG5waWNrdXAvTVNcXG5waWNreS9QVFJcXG5waWNuaWMvTVNcXG5waWNuaWNrZWRcXG5waWNuaWNrZXIvU01cXG5waWNuaWNraW5nXFxucGljb3QvU01cXG5waWN0b2dyYW0vU1xcbnBpY3RvZ3JhcGgvTVxcbnBpY3RvZ3JhcGhzXFxucGljdG9yaWFsL01ZU1xcbnBpY3R1cmUvTUdEU1xcbnBpY3R1cmVzcXVlL1BZXFxucGljdHVyZXNxdWVuZXNzL01cXG5waWRkbGUvTUdEU1xcbnBpZGRseVxcbnBpZGdpbi9NU1xcbnBpZS9TTVxcbnBpZWJhbGQvTVNcXG5waWVjZS9EU01HXFxucGllY2VtZWFsXFxucGllY2V3b3JrL01SWlxcbnBpZWNld29ya2VyL01cXG5waWVjcnVzdC9TTVxcbnBpZWluZ1xcbnBpZXIvTVxcbnBpZXJjZS9KR0RTXFxucGllcmNpbmcvTVlcXG5waWV0eS9NXFxucGllem9lbGVjdHJpY1xcbnBpZmZsZS9NR1xcbnBpZy9TTUxcXG5waWdlb24vTVNcXG5waWdlb25ob2xlL0RTTUdcXG5waWdnZWRcXG5waWdnZXJ5L1NcXG5waWdnaW5nXFxucGlnZ2lzaC9QWVxcbnBpZ2dpc2huZXNzL01cXG5waWdneS9UUlNNXFxucGlnZ3liYWNrL01EU0dcXG5waWdoZWFkZWQvUFlcXG5waWdoZWFkZWRuZXNzL01cXG5waWdsZXQvTVNcXG5waWdtZW50L01EU1xcbnBpZ21lbnRhdGlvbi9NXFxucGlncGVuL01TXFxucGlnc2tpbi9NU1xcbnBpZ3N0eS9TTVxcbnBpZ3N3aWxsXFxucGlndGFpbC9NU1xcbnBpa2UvTVpHRFJTXFxucGlrZXIvTVxcbnBpa2VzdGFmZi9TTVxcbnBpbGFmL1NNXFxucGlsYXN0ZXIvTVNcXG5waWxjaGFyZC9NU1xcbnBpbGUvTUdEU0pcXG5waWxldXAvTVNcXG5waWxmZXIvWkdEUlNcXG5waWxmZXJhZ2UvTVxcbnBpbGZlcmVyL01cXG5waWxncmltL01TXFxucGlsZ3JpbWFnZS9NU1xcbnBpbGluZy9NXFxucGlsbC9NRFNHXFxucGlsbGFnZS9NWkdEUlNcXG5waWxsYWdlci9NXFxucGlsbGFyL01EU1xcbnBpbGxib3gvTVNcXG5waWxsaW9uL01TXFxucGlsbG9jay9TXFxucGlsbG9yeS9HRFNNXFxucGlsbG93L0dNRFNcXG5waWxsb3djYXNlL01TXFxucGlsbG93c2xpcC9NU1xcbnBpbG90L0RHU01cXG5waWxvdGhvdXNlL1NNXFxucGltZW50by9NU1xcbnBpbWllbnRvL01TXFxucGltcC9HTURZU1xcbnBpbXBlcm5lbC9NU1xcbnBpbXBsZS9EU01cXG5waW1wbHkvUlRcXG5waW4vU01cXG5waW5hZm9yZS9NU1xcbnBpbmF0YS9NU1xcbnBpbmJhbGwvTVxcbnBpbmNlci9NU1xcbnBpbmNoL0dNRFNcXG5waW5jdXNoaW9uL01TXFxucGluZSdzXFxucGluZS9BR0RTXFxucGluZWFwcGxlL01TXFxucGluZXdvb2QvU1xcbnBpbmV5XFxucGluZmVhdGhlci9TTVxcbnBpbmcvR01EXFxucGluaGVhZC9TTVxcbnBpbmhvbGUvU01cXG5waW5pZXJcXG5waW5pZXN0XFxucGluaW9uL1NNREdcXG5waW5rL1RHUE1EUlNcXG5waW5rZXllL01cXG5waW5raWUvU01cXG5waW5raXNoXFxucGlua25lc3MvTVxcbnBpbmtvL01TXFxucGlubmFjbGUvU01cXG5waW5uYXRlXFxucGlubmVkL1VcXG5waW5uaW5nL1VcXG5waW5ueS9TXFxucGlub2NobGUvTVxcbnBpbm9uL01TXFxucGlucG9pbnQvU0dNRFxcbnBpbnByaWNrL01TXFxucGluc2V0dGVyL1NNXFxucGluc3RyaXBlL0RTTVxcbnBpbnQvTVNcXG5waW50by9NU1xcbnBpbnVwL01TXFxucGlud2hlZWwvR1NNRFxcbnBpbnlpbi9NXFxucGlueW9uL1NNXFxucGlvbmVlci9TR01EXFxucGlvdXMvWVBcXG5waW91c25lc3MvTVxcbnBpcC9TWkdNRFJcXG5waXBlL01TXFxucGlwZWxpbmUvU01cXG5waXBlci9NXFxucGlwZXR0ZS9TTVxcbnBpcGV3b3JrXFxucGlwaW5nL01cXG5waXBpdC9NU1xcbnBpcHBlZFxcbnBpcHBpbi9TTVxcbnBpcHBpbmdcXG5waXBzcXVlYWsvU01cXG5waXF1YW5jeS9NXFxucGlxdWFudC9ZXFxucGlxdWUvTUdEU1xcbnBpcmFjeS9NXFxucGlyYW5oYS9TTVxcbnBpcmF0ZS9EU01HXFxucGlyYXRpY2FsL1lcXG5waXJvZ2kvTVxcbnBpcm9zaGtpL01cXG5waXJvdWV0dGUvRFNNR1xcbnBpc2NhdG9yaWFsXFxucGlzbWlyZS9TTVxcbnBpc3MvWkdNRFJTXFxucGlzc29pci9TXFxucGlzdGFjaGlvL1NNXFxucGlzdGUvU1xcbnBpc3RpbC9TTVxcbnBpc3RpbGxhdGVcXG5waXN0b2wvU01cXG5waXN0b24vU01cXG5waXQvU01cXG5waXRhL01TXFxucGl0YXBhdC9TTVxcbnBpdGNoL01EUlNaR1xcbnBpdGNoYmxlbmRlL01cXG5waXRjaGVyL01cXG5waXRjaGZvcmsvTURTR1xcbnBpdGNobWFuL01cXG5waXRjaG1lblxcbnBpdGVvdXMvWVBcXG5waXRlb3VzbmVzcy9NXFxucGl0ZmFsbC9TTVxcbnBpdGgvTVxcbnBpdGhlYWQvU1xcbnBpdGhpbHlcXG5waXRoaW5lc3MvTVxcbnBpdGh5L1JUUFxcbnBpdGlhYmxlXFxucGl0aWFibHlcXG5waXRpZnVsL1lcXG5waXRpbGVzcy9QWVxcbnBpdGlsZXNzbmVzcy9NXFxucGl0b24vTVNcXG5waXR0YS9TXFxucGl0dGFuY2UvTVNcXG5waXR0ZWRcXG5waXR0aW5nXFxucGl0dWl0YXJ5L1NNXFxucGl0eS9HRFNNXFxucGl0eWluZy9ZXFxucGl2b3QvTURHU1xcbnBpdm90YWxcXG5waXgvTVxcbnBpeGVsL01TXFxucGl4aWUvTVNcXG5waXp6YS9NU1xcbnBpenphenovTVxcbnBpenplcmlhL1NNXFxucGl6emljYXRpXFxucGl6emljYXRvL01cXG5waidzXFxucGtcXG5wa2dcXG5wa3RcXG5wa3d5XFxucGxcXG5wbGFjYXJkL1NNREdcXG5wbGFjYXRlL0RTR05cXG5wbGFjYXRpb24vTVxcbnBsYWNhdG9yeVxcbnBsYWNlJ3NcXG5wbGFjZS9BRVNETEdcXG5wbGFjZWJvL1NNXFxucGxhY2VkL1VcXG5wbGFjZWhvbGRlci9NU1xcbnBsYWNla2ljay9NRFJaR1NcXG5wbGFjZWtpY2tlci9NXFxucGxhY2VtZW50L0VBU01cXG5wbGFjZW50YS9TTVxcbnBsYWNlbnRhbC9TXFxucGxhY2VyL1NNXFxucGxhY2lkL1lcXG5wbGFjaWRpdHkvTVxcbnBsYWNpbmdzXFxucGxhY2tldC9TTVxcbnBsYWdpYXJpc20vU01cXG5wbGFnaWFyaXN0L1NNXFxucGxhZ2lhcml6ZS9EUlNaR1xcbnBsYWdpYXJpemVyL01cXG5wbGFnaWFyeS9NXFxucGxhZ3VlL0RTTUdcXG5wbGFpY2VcXG5wbGFpZC9NU1xcbnBsYWluL01SWVRTUFxcbnBsYWluY2hhbnRcXG5wbGFpbmNsb3RoZXNcXG5wbGFpbmNsb3RoZXNtYW4vTVxcbnBsYWluY2xvdGhlc21lblxcbnBsYWlubmVzcy9NXFxucGxhaW5zbWFuL01cXG5wbGFpbnNtZW5cXG5wbGFpbnNvbmcvTVxcbnBsYWluc3Bva2VuXFxucGxhaW50L1NNVlxcbnBsYWludGlmZi9TTVxcbnBsYWludGl2ZS9ZXFxucGxhaXQvTURHU1xcbnBsYW4vWk1SU1xcbnBsYW5hclxcbnBsYW5lJ3NcXG5wbGFuZS9DR0RTXFxucGxhbmVsb2FkL01TXFxucGxhbmVyL01cXG5wbGFuZXQvU01cXG5wbGFuZXRhcml1bS9TTVxcbnBsYW5ldGFyeVxcbnBsYW5nZW5jeS9NXFxucGxhbmdlbnRcXG5wbGFuay9NREdTXFxucGxhbmtpbmcvTVxcbnBsYW5rdG9uL01cXG5wbGFubmVkL1VcXG5wbGFubmVyL1NNXFxucGxhbm5pbmcvU1xcbnBsYW50L01EUlpHU0pcXG5wbGFudGFpbi9TTVxcbnBsYW50YXJcXG5wbGFudGF0aW9uL01TXFxucGxhbnRlci9NXFxucGxhbnRpbmcvTVxcbnBsYW50bGlrZVxcbnBsYXF1ZS9TTVxcbnBsYXNoL01EU0dcXG5wbGFzbWEvTVxcbnBsYXNtb25cXG5wbGFzdGVyL1NaR01EUlxcbnBsYXN0ZXJib2FyZC9NXFxucGxhc3RlcmVyL01cXG5wbGFzdGljL1NNXFxucGxhc3RpY2l0eS9NXFxucGxhc3RpY2l6ZS9EU0dcXG5wbGFzdGlxdWVcXG5wbGF0L1hHTUROU1xcbnBsYXRlL01TXFxucGxhdGVhdS9TTURHXFxucGxhdGVmdWwvU01cXG5wbGF0ZWxldC9TTVxcbnBsYXRlbi9NXFxucGxhdGZvcm0vU0dNRFxcbnBsYXRpbmcvTVxcbnBsYXRpbnVtL01cXG5wbGF0aXR1ZGUvU01cXG5wbGF0aXR1ZGlub3VzXFxucGxhdG9uaWNcXG5wbGF0b29uL1NHTURcXG5wbGF0dGVkXFxucGxhdHRlci9TTVxcbnBsYXR0aW5nXFxucGxhdHkvTVxcbnBsYXR5cHVzL01TXFxucGxhdHlzXFxucGxhdWRpdC9TTVxcbnBsYXVzaWJpbGl0eS9NXFxucGxhdXNpYmxlXFxucGxhdXNpYmx5XFxucGxheS9BRUdNRFNcXG5wbGF5YWJsZS9FVVxcbnBsYXlhY3QvU0dEXFxucGxheWFjdGluZy9NXFxucGxheWJhY2svTVNcXG5wbGF5YmlsbC9NU1xcbnBsYXlib29rL01TXFxucGxheWJveS9TTVxcbnBsYXllci9TTVxcbnBsYXlmZWxsb3cvU01cXG5wbGF5ZnVsL1BZXFxucGxheWZ1bG5lc3MvTVxcbnBsYXlnaXJsL01TXFxucGxheWdvZXIvTVNcXG5wbGF5Z3JvdW5kL1NNXFxucGxheWdyb3VwL1NcXG5wbGF5aG91c2UvTVNcXG5wbGF5bGlzdC9NU1xcbnBsYXltYXRlL01TXFxucGxheW9mZi9TTVxcbnBsYXlwZW4vU01cXG5wbGF5cm9vbS9TTVxcbnBsYXlzY2hvb2wvU1xcbnBsYXl0aGluZy9TTVxcbnBsYXl0aW1lL01cXG5wbGF5d3JpZ2h0L1NNXFxucGxhemEvTVNcXG5wbGVhL01TXFxucGxlYWQvRFJaR1NKXFxucGxlYWRlci9NXFxucGxlYWRpbmcvTVlcXG5wbGVhc2FudC9VVFlQXFxucGxlYXNhbnRlclxcbnBsZWFzYW50bmVzcy9VTVxcbnBsZWFzYW50cnkvU01cXG5wbGVhc2UvRURTR1xcbnBsZWFzaW5nL1lTXFxucGxlYXN1cmFibHlcXG5wbGVhc3VyZS9NR0RTQlxcbnBsZWFzdXJlZnVsXFxucGxlYXQvTURHU1xcbnBsZWIvU1xcbnBsZWJieVxcbnBsZWJlL01TXFxucGxlYmVpYW4vTVNcXG5wbGViaXNjaXRlL01TXFxucGxlY3RyYVxcbnBsZWN0cnVtL01TXFxucGxlZGdlL0RTTUdcXG5wbGVuYXJ5L1NNXFxucGxlbmlwb3RlbnRpYXJ5L1NNXFxucGxlbml0dWRlL1NNXFxucGxlbnRlb3VzXFxucGxlbnRpZnVsL1lcXG5wbGVudHkvTVxcbnBsZW51bS9TXFxucGxlb25hc20vTVNcXG5wbGV0aG9yYS9NXFxucGxldXJhL01cXG5wbGV1cmFlXFxucGxldXJpc3kvTVxcbnBsZXh1cy9NU1xcbnBsaWFiaWxpdHkvTVxcbnBsaWFibGVcXG5wbGlhbmN5L01cXG5wbGlhbnQvWVxcbnBsaWVycy9NXFxucGxpZ2h0L1NNREdcXG5wbGltc29sbC9TXFxucGxpbnRoL01cXG5wbGludGhzXFxucGxvZC9TXFxucGxvZGRlZFxcbnBsb2RkZXIvTVNcXG5wbG9kZGluZy9TXFxucGxvbmsvRFJTWkdcXG5wbG9wL01TXFxucGxvcHBlZFxcbnBsb3BwaW5nXFxucGxvc2l2ZS9TXFxucGxvdC9NU1xcbnBsb3R0ZWRcXG5wbG90dGVyL1NNXFxucGxvdHRpbmdcXG5wbG92ZXIvU01cXG5wbG93L0dNRFNcXG5wbG93bWFuL01cXG5wbG93bWVuXFxucGxvd3NoYXJlL01TXFxucGxveSdzXFxucGxveS9TXFxucGx1Y2svTURTR1xcbnBsdWNraWx5XFxucGx1Y2tpbmVzcy9NXFxucGx1Y2t5L1JQVFxcbnBsdWcnc1xcbnBsdWcvVVNcXG5wbHVnZ2VkL1VcXG5wbHVnZ2luZy9VXFxucGx1Z2hvbGUvU1xcbnBsdWdpbi9TTVxcbnBsdW0vR01EU1xcbnBsdW1hZ2UvTVxcbnBsdW1iL01EUlNaR0pcXG5wbHVtYmVkL1VcXG5wbHVtYmVyL01cXG5wbHVtYmluZy9NXFxucGx1bWUvTVNcXG5wbHVtbWV0L1NHTURcXG5wbHVtbXlcXG5wbHVtcC9NRFJZU1RHUFxcbnBsdW1wbmVzcy9NXFxucGx1bXkvUlRcXG5wbHVuZGVyL1NaR01EUlxcbnBsdW5kZXJlci9NXFxucGx1bmdlL0RSU01aR1xcbnBsdW5nZXIvTVxcbnBsdW5rL01EU0dcXG5wbHVwZXJmZWN0L1NNXFxucGx1cmFsL1NNXFxucGx1cmFsaXNtL01cXG5wbHVyYWxpc3QvTVNcXG5wbHVyYWxpc3RpY1xcbnBsdXJhbGl0eS9TTVxcbnBsdXJhbGl6YXRpb24vTVxcbnBsdXJhbGl6ZS9HRFNcXG5wbHVzL01TXFxucGx1c2gvTVJZVFBcXG5wbHVzaG5lc3MvTVxcbnBsdXNoeS9SVFxcbnBsdXRvY3JhY3kvU01cXG5wbHV0b2NyYXQvU01cXG5wbHV0b2NyYXRpY1xcbnBsdXRvbml1bS9NXFxucGx1dmlhbFxcbnBseS9BR0RTTVxcbnBseXdvb2QvTVxcbnBtXFxucG5ldW1hdGljXFxucG5ldW1hdGljYWxseVxcbnBuZXVtb2NvY2NhbFxcbnBuZXVtb2NvY2NpXFxucG5ldW1vY29jY3VzXFxucG5ldW1vbmlhL01cXG5wb2FjaC9EUlNaR1xcbnBvYWNoZXIvTVxcbnBvYWNoaW5nL01cXG5wb2NrL0dNRFNcXG5wb2NrZXQvU01ER1xcbnBvY2tldGJvb2svU01cXG5wb2NrZXRmdWwvU01cXG5wb2NrZXRrbmlmZS9NXFxucG9ja2V0a25pdmVzXFxucG9ja21hcmsvTURHU1xcbnBvZC9TTVxcbnBvZGNhc3QvU01HXFxucG9kZGVkXFxucG9kZGluZ1xcbnBvZGlhdHJpc3QvU01cXG5wb2RpYXRyeS9NXFxucG9kaXVtL1NNXFxucG9lbS9NU1xcbnBvZXN5L01cXG5wb2V0L01TXFxucG9ldGFzdGVyL01TXFxucG9ldGVzcy9NU1xcbnBvZXRpYy9TXFxucG9ldGljYWwvWVxcbnBvZXRyeS9NXFxucG9ncm9tL1NNXFxucG9pL01cXG5wb2lnbmFuY3kvTVxcbnBvaWduYW50L1lcXG5wb2luY2lhbmEvU01cXG5wb2luc2V0dGlhL1NNXFxucG9pbnQvTURSU1pHXFxucG9pbnRibGFua1xcbnBvaW50ZWQvWVxcbnBvaW50ZXIvTVxcbnBvaW50aWxsaXNtL01cXG5wb2ludGlsbGlzdC9TTVxcbnBvaW50bGVzcy9QWVxcbnBvaW50bGVzc25lc3MvTVxcbnBvaW50eS9UUlxcbnBvaXNlL01HRFNcXG5wb2lzb24vU0paR01EUlxcbnBvaXNvbmVyL01cXG5wb2lzb25pbmcvTVxcbnBvaXNvbm91cy9ZXFxucG9rZS9NWkdEUlNcXG5wb2tlci9NXFxucG9rZXkvTVNcXG5wb2t5L1RSXFxucG9sL1NHTURcXG5wb2xhclxcbnBvbGFyaXR5L1NNXFxucG9sYXJpemF0aW9uL0NNXFxucG9sYXJpemUvQ0RTR1xcbnBvbGUvTVNcXG5wb2xlYXhlL0dEU1xcbnBvbGVjYXQvTVNcXG5wb2xlbWljL01TXFxucG9sZW1pY2FsL1lcXG5wb2xlbWljaXN0L1NNXFxucG9sZW1pY3MvTVxcbnBvbGVzdGFyL1NNXFxucG9saWNlL0RTTUdcXG5wb2xpY2VtYW4vTVxcbnBvbGljZW1lblxcbnBvbGljZXdvbWFuL01cXG5wb2xpY2V3b21lblxcbnBvbGljeS9TTVxcbnBvbGljeWhvbGRlci9NU1xcbnBvbGljeW1ha2VyL1NcXG5wb2xpby9NU1xcbnBvbGlvbXllbGl0aXMvTVxcbnBvbGlzaC9aR01EUlNcXG5wb2xpc2hlZC9VXFxucG9saXNoZXIvTVxcbnBvbGl0YnVyby9NU1xcbnBvbGl0ZS9SWVRQXFxucG9saXRlbmVzcy9NXFxucG9saXRlc3NlL01cXG5wb2xpdGljL1NcXG5wb2xpdGljYWwvWVxcbnBvbGl0aWNpYW4vU01cXG5wb2xpdGljaXphdGlvbi9NXFxucG9saXRpY2l6ZS9DRFNHXFxucG9saXRpY2tpbmcvTVxcbnBvbGl0aWNvL1NNXFxucG9saXRpY3MvTVxcbnBvbGl0eS9TTVxcbnBvbGthL01EU0dcXG5wb2xsL0dNRE5TXFxucG9sbGFjay9NU1xcbnBvbGxhcmQvU1xcbnBvbGxlbi9NXFxucG9sbGluYXRlL0dORFNcXG5wb2xsaW5hdGlvbi9NXFxucG9sbGluYXRvci9TTVxcbnBvbGxpbmcvTVxcbnBvbGxpd29nL1NNXFxucG9sbHN0ZXIvU01cXG5wb2xsdXRhbnQvTVNcXG5wb2xsdXRlL1pHTkRSU1xcbnBvbGx1dGVkL1VcXG5wb2xsdXRlci9NXFxucG9sbHV0aW9uL01cXG5wb2xvL01cXG5wb2xvbmFpc2UvU01cXG5wb2xvbml1bS9NXFxucG9sdGVyZ2Vpc3QvTVNcXG5wb2x0cm9vbi9TTVxcbnBvbHlcXG5wb2x5YWNyeWxhbWlkZVxcbnBvbHlhbW9yeS9TXFxucG9seWFuZHJvdXNcXG5wb2x5YW5kcnkvTVxcbnBvbHljbGluaWMvU01cXG5wb2x5ZXN0ZXIvTVNcXG5wb2x5ZXRoeWxlbmUvTVxcbnBvbHlnYW1pc3QvTVNcXG5wb2x5Z2Ftb3VzXFxucG9seWdhbXkvTVxcbnBvbHlnbG90L1NNXFxucG9seWdvbi9TTVxcbnBvbHlnb25hbFxcbnBvbHlncmFwaC9HTURcXG5wb2x5Z3JhcGhzXFxucG9seWhlZHJhbFxcbnBvbHloZWRyb24vU01cXG5wb2x5bWF0aC9NXFxucG9seW1hdGhzXFxucG9seW1lci9TTVxcbnBvbHltZXJpY1xcbnBvbHltZXJpemF0aW9uL01cXG5wb2x5bWVyaXplL0dEU1xcbnBvbHltb3JwaGljXFxucG9seW1vcnBob3VzXFxucG9seW5vbWlhbC9NU1xcbnBvbHlwL01TXFxucG9seXBob25pY1xcbnBvbHlwaG9ueS9NXFxucG9seXByb3B5bGVuZS9NXFxucG9seXNcXG5wb2x5c2Vtb3VzXFxucG9seXN0eXJlbmUvTVxcbnBvbHlzeWxsYWJpY1xcbnBvbHlzeWxsYWJsZS9NU1xcbnBvbHl0ZWNobmljL01TXFxucG9seXRoZWlzbS9NXFxucG9seXRoZWlzdC9TTVxcbnBvbHl0aGVpc3RpY1xcbnBvbHl0aGVuZVxcbnBvbHl1bnNhdHVyYXRlL0RTXFxucG9seXVyZXRoYW5lL01TXFxucG9seXZpbnlsXFxucG9tL1NcXG5wb21hZGUvRFNNR1xcbnBvbWFuZGVyL1NNXFxucG9tZWdyYW5hdGUvTVNcXG5wb21tZWwvU0dNRFxcbnBvbW15L1NcXG5wb21wL01cXG5wb21wYWRvdXIvU01EXFxucG9tcGFuby9NU1xcbnBvbXBvbS9TTVxcbnBvbXBvc2l0eS9NXFxucG9tcG91cy9ZUFxcbnBvbXBvdXNuZXNzL01cXG5wb25jZS9HRFNcXG5wb25jaG8vU01cXG5wb25jeVxcbnBvbmQvTVNcXG5wb25kZXIvU1pHRFJcXG5wb25kZXJlci9NXFxucG9uZGVyb3VzL1lQXFxucG9uZGVyb3VzbmVzcy9NXFxucG9uZS9NU1xcbnBvbmcvR0RTXFxucG9uZ2VlL01cXG5wb25pYXJkL01TXFxucG9udGlmZi9TTVxcbnBvbnRpZmljYWwvWVxcbnBvbnRpZmljYXRlL0RTTUdcXG5wb250b29uL1NNXFxucG9ueS9HRFNNXFxucG9ueXRhaWwvTVNcXG5wb28vU0dEXFxucG9vY2gvTURTR1xcbnBvb2RsZS9TTVxcbnBvb2YvTVNcXG5wb29mdGVyL1NcXG5wb29oL0dNRFxcbnBvb2hzXFxucG9vbC9HTURTXFxucG9vbHJvb20vTVNcXG5wb29sc2lkZS9TXFxucG9vcC9HTURTXFxucG9vci9UUllQXFxucG9vcmJveS9NXFxucG9vcmhvdXNlL1NNXFxucG9vcm5lc3MvTVxcbnBvcC9TTVxcbnBvcGNvcm4vTVxcbnBvcGUvTVNcXG5wb3BndW4vU01cXG5wb3BpbmpheS9NU1xcbnBvcGxhci9TTVxcbnBvcGxpbi9NXFxucG9wb3Zlci9TTVxcbnBvcHBhL01TXFxucG9wcGFkb20vU1xcbnBvcHBlZFxcbnBvcHBlci9TTVxcbnBvcHBldC9TXFxucG9wcGluZ1xcbnBvcHB5L1NNXFxucG9wcHljb2NrL01cXG5wb3B1bGFjZS9NU1xcbnBvcHVsYXIvWVxcbnBvcHVsYXJpdHkvVU1cXG5wb3B1bGFyaXphdGlvbi9NXFxucG9wdWxhcml6ZS9EU0dcXG5wb3B1bGF0ZS9BQ0dEU1xcbnBvcHVsYXRlZC9VXFxucG9wdWxhdGlvbi9DTVxcbnBvcHVsYXRpb25zXFxucG9wdWxpc20vTVxcbnBvcHVsaXN0L01TXFxucG9wdWxvdXMvUFxcbnBvcHVsb3VzbmVzcy9NXFxucG9wdXAvTVNcXG5wb3JjZWxhaW4vU01cXG5wb3JjaC9NU1xcbnBvcmNpbmVcXG5wb3JjdXBpbmUvU01cXG5wb3JlL01HRFNcXG5wb3JneS9TTVxcbnBvcmsvWk1SXFxucG9ya2VyL01cXG5wb3JreS9SU01UXFxucG9ybi9NXFxucG9ybm8vTVxcbnBvcm5vZ3JhcGhlci9NU1xcbnBvcm5vZ3JhcGhpY1xcbnBvcm5vZ3JhcGhpY2FsbHlcXG5wb3Jub2dyYXBoeS9NXFxucG9yb3NpdHkvTVxcbnBvcm91cy9QXFxucG9yb3VzbmVzcy9NXFxucG9ycGh5cml0aWNcXG5wb3JwaHlyeS9NXFxucG9ycG9pc2UvTUdEU1xcbnBvcnJpZGdlL01cXG5wb3JyaW5nZXIvU01cXG5wb3J0J3MvQVxcbnBvcnQvQ0FFR0RTXFxucG9ydGFiaWxpdHkvTVxcbnBvcnRhYmxlL01TXFxucG9ydGFnZS9EU01HXFxucG9ydGFsL1NNXFxucG9ydGN1bGxpcy9NU1xcbnBvcnRlbmQvU0dEXFxucG9ydGVudC9TTVxcbnBvcnRlbnRvdXMvWVBcXG5wb3J0ZXIvQVNNXFxucG9ydGVyaG91c2UvU01cXG5wb3J0Zm9saW8vTVNcXG5wb3J0aG9sZS9NU1xcbnBvcnRpY28vTVxcbnBvcnRpY29lc1xcbnBvcnRpZXJlL01TXFxucG9ydGlvbi9LU0dNRFxcbnBvcnRsaW5lc3MvTVxcbnBvcnRseS9SUFRcXG5wb3J0bWFudGVhdS9NU1xcbnBvcnRyYWl0L01TXFxucG9ydHJhaXRpc3QvU01cXG5wb3J0cmFpdHVyZS9NXFxucG9ydHJheS9TR0RcXG5wb3J0cmF5YWwvTVNcXG5wb3J0dWxhY2EvTVxcbnBvc2Uncy9BXFxucG9zZS9DQUtFR0RTXFxucG9zZXIvRUtTTVxcbnBvc2V1ci9TTVxcbnBvc2gvVFJcXG5wb3NpdC9EU0dWXFxucG9zaXRpb24vQ0tFTVNcXG5wb3NpdGlvbmFsL0tFXFxucG9zaXRpb25lZC9LXFxucG9zaXRpb25pbmcvQUtcXG5wb3NpdGl2ZS9NWVBTXFxucG9zaXRpdmVuZXNzL01cXG5wb3NpdGl2aXNtXFxucG9zaXRpdmlzdC9TXFxucG9zaXRyb24vTVNcXG5wb3NzXFxucG9zc2UvTVNcXG5wb3NzZXNzL0FFVkdTRFxcbnBvc3Nlc3Npb24vQVNNXFxucG9zc2Vzc2l2ZS9TTVlQXFxucG9zc2Vzc2l2ZW5lc3MvTVxcbnBvc3Nlc3Nvci9TTVxcbnBvc3NpYmlsaXR5L1NNXFxucG9zc2libGUvU01cXG5wb3NzaWJseVxcbnBvc3N1bS9TTVxcbnBvc3QvWkdNRFJTSlxcbnBvc3RhZ2UvTVxcbnBvc3RhbFxcbnBvc3RiYWcvU1xcbnBvc3Rib3gvU1xcbnBvc3RjYXJkL1NNXFxucG9zdGNvZGUvU1xcbnBvc3Rjb2xvbmlhbFxcbnBvc3Rjb25zb25hbnRhbFxcbnBvc3RkYXRlL0RTR1xcbnBvc3Rkb2MvTVNcXG5wb3N0ZG9jdG9yYWxcXG5wb3N0ZXIvTVxcbnBvc3Rlcmlvci9TTVxcbnBvc3Rlcml0eS9NXFxucG9zdGdyYWR1YXRlL1NNXFxucG9zdGhhc3RlXFxucG9zdGh1bW91cy9ZXFxucG9zdGh5cG5vdGljXFxucG9zdGllL1NcXG5wb3N0aWxpb24vU01cXG5wb3N0aW5kdXN0cmlhbFxcbnBvc3RpbmcvTVxcbnBvc3RsdWRlL1NNXFxucG9zdG1hbi9NXFxucG9zdG1hcmsvU01ER1xcbnBvc3RtYXN0ZXIvTVNcXG5wb3N0bWVuXFxucG9zdG1lbm9wYXVzYWxcXG5wb3N0bWVyaWRpYW5cXG5wb3N0bWlzdHJlc3MvTVNcXG5wb3N0bW9kZXJuXFxucG9zdG1vZGVybmlzbS9NXFxucG9zdG1vZGVybmlzdC9NU1xcbnBvc3Rtb3J0ZW0vU01cXG5wb3N0bmFzYWxcXG5wb3N0bmF0YWxcXG5wb3N0b3BlcmF0aXZlXFxucG9zdHBhaWRcXG5wb3N0cGFydHVtXFxucG9zdHBvbmUvRFNHTFxcbnBvc3Rwb25lbWVudC9TTVxcbnBvc3RwcmFuZGlhbFxcbnBvc3RzY3JpcHQvU01cXG5wb3N0c2Vhc29uL1NNXFxucG9zdHN5bmFwdGljXFxucG9zdHVsYXRlL1hEU01HTlxcbnBvc3R1bGF0aW9uL01cXG5wb3N0dXJhbFxcbnBvc3R1cmUvTUdKRFNcXG5wb3N0dXJpbmcvTVxcbnBvc3R3YXJcXG5wb3N0d29tYW5cXG5wb3N0d29tZW5cXG5wb3N5L1NNXFxucG90L0NTTVxcbnBvdGFiaWxpdHkvTVxcbnBvdGFibGUvU01cXG5wb3Rhc2gvTVxcbnBvdGFzc2l1bS9NXFxucG90YXRvL01cXG5wb3RhdG9lc1xcbnBvdGJlbGx5L0RTTVxcbnBvdGJvaWxlci9TTVxcbnBvdGVuY3kvTVxcbnBvdGVudC9ZXFxucG90ZW50YXRlL01TXFxucG90ZW50aWFsL01ZU1xcbnBvdGVudGlhbGl0eS9TTVxcbnBvdGVudGlhdGUvR0RTXFxucG90ZnVsL1NNXFxucG90aGVhZC9TTVxcbnBvdGhlci9TTURHXFxucG90aGVyYi9TTVxcbnBvdGhvbGRlci9NU1xcbnBvdGhvbGUvRFJTTVpHXFxucG90aG9vay9TTVxcbnBvdGlvbi9TTVxcbnBvdGx1Y2svTVNcXG5wb3RwaWUvU01cXG5wb3Rwb3VycmkvU01cXG5wb3RzaGVyZC9TTVxcbnBvdHNob3QvTVNcXG5wb3R0YWdlL01cXG5wb3R0ZWRcXG5wb3R0ZXIvR1NNRFxcbnBvdHRlcnkvU01cXG5wb3R0aW5nXFxucG90dHkvUFJTTVRcXG5wb3VjaC9NRFNHXFxucG91Zi9TXFxucG91ZmZlL1NcXG5wb3VsdGVyZXIvTVNcXG5wb3VsdGljZS9EU01HXFxucG91bHRyeS9NXFxucG91bmNlL0RTTUdcXG5wb3VuZCdzXFxucG91bmQvS0RTR1xcbnBvdW5kYWdlL01cXG5wb3VuZGluZy9TTVxcbnBvdXIvR0RTSlxcbnBvdXQvWkdNRFJTXFxucG91dGVyL01cXG5wb3ZlcnR5L01cXG5wb3dcXG5wb3dkZXIvR1NNRFxcbnBvd2RlcnlcXG5wb3dlci9NRFNHXFxucG93ZXJib2F0L01TXFxucG93ZXJmdWwvWVxcbnBvd2VyaG91c2UvU01cXG5wb3dlcmxlc3MvUFlcXG5wb3dlcmxlc3NuZXNzL01cXG5wb3d3b3cvU0dNRFxcbnBveC9NU1xcbnBwXFxucHBtXFxucHByXFxucHJcXG5wcmFjdGljYWJpbGl0eS9NXFxucHJhY3RpY2FibHlcXG5wcmFjdGljYWwvU01ZXFxucHJhY3RpY2FsaXR5L1NNXFxucHJhY3RpY2UvRFNNR0JcXG5wcmFjdGljZWQvVVxcbnByYWN0aWN1bS9TTVxcbnByYWN0aXRpb25lci9TTVxcbnByYWV0b3IvU01cXG5wcmFldG9yaWFuXFxucHJhZ21hdGljL01TXFxucHJhZ21hdGljYWwvWVxcbnByYWdtYXRpc20vTVxcbnByYWdtYXRpc3QvTVNcXG5wcmFpcmllL1NNXFxucHJhaXNlL0VEU01HXFxucHJhaXNld29ydGhpbmVzcy9NXFxucHJhaXNld29ydGh5L1BcXG5wcmFsaW5lL1NNXFxucHJhbS9NU1xcbnByYW5jZS9EUlNNWkdcXG5wcmFuY2VyL01cXG5wcmFuY2luZy9ZXFxucHJhbmcvRFNHXFxucHJhbmsvTVNcXG5wcmFua3N0ZXIvU01cXG5wcmFzZW9keW1pdW0vTVxcbnByYXQvU1xcbnByYXRlL01aR0RSU1xcbnByYXRlci9NXFxucHJhdGZhbGwvU01cXG5wcmF0dGxlL0RSU01aR1xcbnByYXR0bGVyL01cXG5wcmF3bi9NRFNHXFxucHJheS9aR0RSU1xcbnByYXllci9NXFxucHJheWVyZnVsL1lcXG5wcmVhY2gvRFJTWkdMXFxucHJlYWNoZXIvTVxcbnByZWFjaG1lbnQvTVxcbnByZWFjaHkvUlRcXG5wcmVhZG9sZXNjZW5jZS9TTVxcbnByZWFkb2xlc2NlbnRcXG5wcmVhbWJsZS9NR0RTXFxucHJlYXJyYW5nZS9MR0RTXFxucHJlYXJyYW5nZW1lbnQvTVxcbnByZWFzc2lnbmVkXFxucHJlY2FuY2VsL1NNREdcXG5wcmVjYW5jZXJvdXNcXG5wcmVjYXJpb3VzL1BZXFxucHJlY2FyaW91c25lc3MvTVxcbnByZWNhc3RcXG5wcmVjYXV0aW9uL01TXFxucHJlY2F1dGlvbmFyeVxcbnByZWNlZGUvRFNHXFxucHJlY2VkZW5jZS9NXFxucHJlY2VkZW50L1NNXFxucHJlY2VwdC9TTVxcbnByZWNlcHRvci9TTVxcbnByZWNpbmN0L01TXFxucHJlY2lvc2l0eS9NXFxucHJlY2lvdXMvWVBcXG5wcmVjaW91c25lc3MvTVxcbnByZWNpcGljZS9TTVxcbnByZWNpcGl0YW50L01TXFxucHJlY2lwaXRhdGUvWE1ZR05EU1xcbnByZWNpcGl0YXRpb24vTVxcbnByZWNpcGl0b3VzL1lcXG5wcmVjaXMvTVxcbnByZWNpc2UvRFJTWVRHTlBcXG5wcmVjaXNlbmVzcy9NXFxucHJlY2lzaW9uL01cXG5wcmVjbHVkZS9HRFNcXG5wcmVjbHVzaW9uL01cXG5wcmVjb2Npb3VzL1lQXFxucHJlY29jaW91c25lc3MvTVxcbnByZWNvY2l0eS9NXFxucHJlY29nbml0aW9uL01cXG5wcmVjb2duaXRpdmVcXG5wcmVjb2xvbmlhbFxcbnByZWNvbmNlaXZlL0dEU1xcbnByZWNvbmNlcHRpb24vU01cXG5wcmVjb25kaXRpb24vTURHU1xcbnByZWNvb2svR1NEXFxucHJlY3Vyc29yL1NNXFxucHJlY3Vyc29yeVxcbnByZWRhdGUvRFNHXFxucHJlZGF0b3IvTVNcXG5wcmVkYXRvcnlcXG5wcmVkYXduXFxucHJlZGVjZWFzZS9HRFNcXG5wcmVkZWNlc3Nvci9TTVxcbnByZWRlZmluZWRcXG5wcmVkZXNpZ25hdGUvR0RTXFxucHJlZGVzdGluYXRpb24vTVxcbnByZWRlc3RpbmUvRFNHXFxucHJlZGV0ZXJtaW5hdGlvbi9NXFxucHJlZGV0ZXJtaW5lL1pHRFJTXFxucHJlZGV0ZXJtaW5lci9NXFxucHJlZGljYWJsZVxcbnByZWRpY2FtZW50L01TXFxucHJlZGljYXRlL01HTlZEU1xcbnByZWRpY2F0aW9uL01cXG5wcmVkaWNhdGl2ZS9ZXFxucHJlZGljdC9CR1ZTRFxcbnByZWRpY3RhYmlsaXR5L1VNXFxucHJlZGljdGFibGUvVVxcbnByZWRpY3RhYmx5L1VcXG5wcmVkaWN0aW9uL1NNXFxucHJlZGljdG9yL01TXFxucHJlZGlnZXN0L0dEU1xcbnByZWRpbGVjdGlvbi9TTVxcbnByZWRpc3Bvc2UvR0RTXFxucHJlZGlzcG9zaXRpb24vTVNcXG5wcmVkbmlzb25lXFxucHJlZG9taW5hbmNlL01cXG5wcmVkb21pbmFudC9ZXFxucHJlZG9taW5hdGUvWUdEU1xcbnByZWVtaWUvU01cXG5wcmVlbWluZW5jZS9NXFxucHJlZW1pbmVudC9ZXFxucHJlZW1wdC9HVlNEXFxucHJlZW1wdGlvbi9NXFxucHJlZW1wdGl2ZS9ZXFxucHJlZW4vRFNHXFxucHJlZXhpc3QvREdTXFxucHJlZXhpc3RlbmNlL01cXG5wcmVmXFxucHJlZmFiL1NNXFxucHJlZmFiYmVkXFxucHJlZmFiYmluZ1xcbnByZWZhYnJpY2F0ZS9EU0dOXFxucHJlZmFicmljYXRpb24vTVxcbnByZWZhY2UvRFNNR1xcbnByZWZhdG9yeVxcbnByZWZlY3QvU01cXG5wcmVmZWN0dXJlL01TXFxucHJlZmVyL1NCTFxcbnByZWZlcmFibHlcXG5wcmVmZXJlbmNlL01TXFxucHJlZmVyZW50aWFsL1lcXG5wcmVmZXJtZW50L01cXG5wcmVmZXJyZWRcXG5wcmVmZXJyaW5nXFxucHJlZmlndXJlL0dEU1xcbnByZWZpeC9NRFNHXFxucHJlZm9ybS9HU0RcXG5wcmVmcm9udGFsXFxucHJlZ2FtZS9TTVxcbnByZWduYW5jeS9TTVxcbnByZWduYW50XFxucHJlaGVhdC9HU0RcXG5wcmVoZW5zaWxlXFxucHJlaGlzdG9yaWFuL1NcXG5wcmVoaXN0b3JpY1xcbnByZWhpc3RvcmljYWwvWVxcbnByZWhpc3RvcnkvTVxcbnByZWh1bWFuXFxucHJlaW5zdGFsbGVkXFxucHJlanVkZ2UvR0RTXFxucHJlanVkZ21lbnQvU01cXG5wcmVqdWRpY2UvTUdEU1xcbnByZWp1ZGljZWQvVVxcbnByZWp1ZGljaWFsXFxucHJla2luZGVyZ2FydGVuL1NNXFxucHJlbGFjeS9NXFxucHJlbGF0ZS9TTVxcbnByZWxpbS9TTVxcbnByZWxpbWluYXJ5L1NNXFxucHJlbGl0ZXJhdGVcXG5wcmVsdWRlL01TXFxucHJlbWFyaXRhbFxcbnByZW1hdHVyZS9ZXFxucHJlbWVkL1NNXFxucHJlbWVkaWNhbFxcbnByZW1lZGl0YXRlL0RTR05cXG5wcmVtZWRpdGF0ZWQvVVxcbnByZW1lZGl0YXRpb24vTVxcbnByZW1lbnN0cnVhbFxcbnByZW1pZXIvU0dNRFxcbnByZW1pZXJlL01TXFxucHJlbWllcnNoaXAvTVNcXG5wcmVtaXNlL0RTTUdcXG5wcmVtaXVtL1NNXFxucHJlbWl4L0dEU1xcbnByZW1vbGFyL1NNXFxucHJlbW9uaXRpb24vTVNcXG5wcmVtb25pdG9yeVxcbnByZW5hdGFsL1lcXG5wcmVudXAvU01cXG5wcmVudXB0aWFsXFxucHJlb2NjdXBhdGlvbi9TTVxcbnByZW9jY3VweS9EU0dcXG5wcmVvcGVyYXRpdmVcXG5wcmVvcmRhaW4vR0RTXFxucHJlb3duZWRcXG5wcmVwL01TXFxucHJlcGFja2FnZS9EU0dcXG5wcmVwYWNrZWRcXG5wcmVwYWlkXFxucHJlcGFyYXRpb24vU01cXG5wcmVwYXJhdG9yeVxcbnByZXBhcmUvR0RTXFxucHJlcGFyZWQvVVBcXG5wcmVwYXJlZG5lc3MvVU1cXG5wcmVwYXkvR1NMXFxucHJlcGF5bWVudC9NU1xcbnByZXBlbmRcXG5wcmVwb25kZXJhbmNlL1NNXFxucHJlcG9uZGVyYW50L1lcXG5wcmVwb25kZXJhdGUvR0RTXFxucHJlcG9zaXRpb24vU01cXG5wcmVwb3NpdGlvbmFsL1lcXG5wcmVwb3NzZXNzL0dEU1xcbnByZXBvc3Nlc3NpbmcvVVxcbnByZXBvc3Nlc3Npb24vU01cXG5wcmVwb3N0ZXJvdXMvWVxcbnByZXBwZWRcXG5wcmVwcGluZ1xcbnByZXBweS9UUlNNXFxucHJlcHViZXNjZW5jZS9NXFxucHJlcHViZXNjZW50L1NNXFxucHJlcHVjZS9NU1xcbnByZXF1ZWwvTVNcXG5wcmVyZWNvcmQvR1NEXFxucHJlcmVnaXN0ZXIvU0dEXFxucHJlcmVnaXN0cmF0aW9uL01cXG5wcmVyZXF1aXNpdGUvTVNcXG5wcmVyb2dhdGl2ZS9TTVxcbnByZXNcXG5wcmVzYWdlL01HRFNcXG5wcmVzYnlvcGlhL01cXG5wcmVzYnl0ZXIvU01cXG5wcmVzYnl0ZXJ5L1NNXFxucHJlc2Nob29sL1NaTVJcXG5wcmVzY2hvb2xlci9NXFxucHJlc2NpZW5jZS9NXFxucHJlc2NpZW50L1lcXG5wcmVzY3JpYmUvRFNHXFxucHJlc2NyaXB0L1NWTVxcbnByZXNjcmlwdGlvbi9TTVxcbnByZXNjcmlwdGl2ZS9ZXFxucHJlc2Vhc29uL1NNXFxucHJlc2VuY2UvU01cXG5wcmVzZW50L0xNRFJZWkdTQlxcbnByZXNlbnRhYmx5XFxucHJlc2VudGF0aW9uL0FTTVxcbnByZXNlbnRlci9NXFxucHJlc2VudGltZW50L1NNXFxucHJlc2VudG1lbnQvU01cXG5wcmVzZXJ2YXRpb24vTVxcbnByZXNlcnZhdGlvbmlzdC9TTVxcbnByZXNlcnZhdGl2ZS9TTVxcbnByZXNlcnZlL0JEUlNNWkdcXG5wcmVzZXJ2ZXIvTVxcbnByZXNldC9TXFxucHJlc2V0dGluZ1xcbnByZXNocmFua1xcbnByZXNocmluay9HU1xcbnByZXNocnVua1xcbnByZXNpZGUvR0RTXFxucHJlc2lkZW5jeS9TTVxcbnByZXNpZGVudC9NU1xcbnByZXNpZGVudGlhbFxcbnByZXNpZGl1bS9NXFxucHJlc29ydC9ER1NcXG5wcmVzcydzXFxucHJlc3MvQUNHU0RcXG5wcmVzc2VkL1VcXG5wcmVzc2VyL01TXFxucHJlc3NpZS9TXFxucHJlc3NpbmcvU01ZXFxucHJlc3NtYW4vTVxcbnByZXNzbWVuXFxucHJlc3N1cmUvRFNNR1xcbnByZXNzdXJpemF0aW9uL01cXG5wcmVzc3VyaXplL0NHRFNcXG5wcmVzc3VyaXplci9TTVxcbnByZXN0aWRpZ2l0YXRpb24vTVxcbnByZXN0aWdlL01cXG5wcmVzdGlnaW91c1xcbnByZXN0by9TTVxcbnByZXN1bWFibHlcXG5wcmVzdW1lL0dEU0JcXG5wcmVzdW1wdGlvbi9TTVxcbnByZXN1bXB0aXZlXFxucHJlc3VtcHR1b3VzL1lQXFxucHJlc3VtcHR1b3VzbmVzcy9NXFxucHJlc3VwcG9zZS9EU0dcXG5wcmVzdXBwb3NpdGlvbi9NU1xcbnByZXRheFxcbnByZXRlZW4vTVNcXG5wcmV0ZW5kL0RSWkdTXFxucHJldGVuZGVyL01cXG5wcmV0ZW5zZS9TWE1OXFxucHJldGVuc2lvbi9NXFxucHJldGVudGlvdXMvVVlcXG5wcmV0ZW50aW91c25lc3MvTVxcbnByZXRlcml0L1NNXFxucHJldGVybVxcbnByZXRlcm5hdHVyYWwvWVxcbnByZXRlc3QvREdTXFxucHJldGV4dC9NU1xcbnByZXRyaWFsL1NcXG5wcmV0dGlmeS9HRFNcXG5wcmV0dGlseVxcbnByZXR0aW5lc3MvTVxcbnByZXR0eS9UR0RSU01QXFxucHJldHplbC9NU1xcbnByZXZhaWwvREdTXFxucHJldmFsZW5jZS9NXFxucHJldmFsZW50XFxucHJldmFyaWNhdGUvRFNHTlhcXG5wcmV2YXJpY2F0aW9uL01cXG5wcmV2YXJpY2F0b3IvU01cXG5wcmV2ZW50L0RCU0dWXFxucHJldmVudGFibGUvVVxcbnByZXZlbnRhdGl2ZS9NU1xcbnByZXZlbnRpb24vTVxcbnByZXZlbnRpdmUvU01cXG5wcmV2aWV3L01EUlNaR1xcbnByZXZpb3VzL1lcXG5wcmV2aXNpb24vTVNcXG5wcmV3YXJcXG5wcmV5L0dNRFNcXG5wcmV6emllL1NcXG5wcmlhcGljXFxucHJpY2Unc1xcbnByaWNlL0FHRFNcXG5wcmljZWxlc3NcXG5wcmljZXlcXG5wcmljaWVyXFxucHJpY2llc3RcXG5wcmljay9NRFJZU1pHXFxucHJpY2tlci9NXFxucHJpY2tsZS9NR0RTXFxucHJpY2tsaW5lc3MvTVxcbnByaWNrbHkvUFJUXFxucHJpZGUvTUdEU1xcbnByaWRlZnVsL1lcXG5wcmllci9NXFxucHJpZXN0L1NNWVxcbnByaWVzdGVzcy9NU1xcbnByaWVzdGhvb2QvU01cXG5wcmllc3RsaW5lc3MvTVxcbnByaWVzdGx5L1JUUFxcbnByaWcvTVNcXG5wcmlnZ2lzaC9QXFxucHJpZ2dpc2huZXNzL01cXG5wcmltL1pHRFJZUFxcbnByaW1hY3kvTVxcbnByaW1hbFxcbnByaW1hcmlseVxcbnByaW1hcnkvU01cXG5wcmltYXRlL01TXFxucHJpbWUvTVNcXG5wcmltZXIvTVxcbnByaW1ldmFsXFxucHJpbWluZy9NXFxucHJpbWl0aXZlL1NQTVlcXG5wcmltaXRpdmVuZXNzL01cXG5wcmltbWVyXFxucHJpbW1lc3RcXG5wcmltbmVzcy9NXFxucHJpbW9nZW5pdG9yL1NNXFxucHJpbW9nZW5pdHVyZS9NXFxucHJpbW9yZGlhbC9ZXFxucHJpbXAvRFNHXFxucHJpbXJvc2UvU01cXG5wcmltdWxhL1NcXG5wcmluY2UvU01ZXFxucHJpbmNlZG9tL1NNXFxucHJpbmNlbGluZXNzL01cXG5wcmluY2VseS9QUlRcXG5wcmluY2Vzcy9NU1xcbnByaW5jaXBhbC9TTVlcXG5wcmluY2lwYWxpdHkvU01cXG5wcmluY2lwbGUvRFNNXFxucHJpbmNpcGxlZC9VXFxucHJpbnQvQU1EU0dcXG5wcmludGFibGUvVVxcbnByaW50ZXIvTVNcXG5wcmludGluZy9TTVxcbnByaW50bWFraW5nXFxucHJpbnRvdXQvU01cXG5wcmlvbi9TXFxucHJpb3IvTVNcXG5wcmlvcmVzcy9NU1xcbnByaW9yaXRpemF0aW9uXFxucHJpb3JpdGl6ZS9EU0dcXG5wcmlvcml0eS9TTVxcbnByaW9yeS9TTVxcbnByaXNtL01TXFxucHJpc21hdGljXFxucHJpc29uL1NaTVJcXG5wcmlzb25lci9NXFxucHJpc3NpbHlcXG5wcmlzc2luZXNzL01cXG5wcmlzc3kvUFRSXFxucHJpc3RpbmVcXG5wcml0aGVlXFxucHJpdmFjeS9NXFxucHJpdmF0ZS9YTVlUTlJTXFxucHJpdmF0ZWVyL1NNXFxucHJpdmF0aW9uL0NTTVxcbnByaXZhdGl6YXRpb24vU01cXG5wcml2YXRpemUvRFNHXFxucHJpdmV0L1NNXFxucHJpdmlsZWdlL0RTTUdcXG5wcml2aWxlZ2VkL1VcXG5wcml2aWx5XFxucHJpdnkvUlNNVFxcbnByaXplL01HRFNcXG5wcml6ZWQvQVxcbnByaXplZmlnaHQvWkdTTVJcXG5wcml6ZWZpZ2h0ZXIvTVxcbnByaXplZmlnaHRpbmcvTVxcbnByaXpld2lubmVyL01TXFxucHJpemV3aW5uaW5nXFxucHJvL1NNXFxucHJvYmFiaWxpc3RpY1xcbnByb2JhYmlsaXR5L1NNXFxucHJvYmFibGUvU01cXG5wcm9iYWJseVxcbnByb2JhdGUvTU5cXG5wcm9iYXRpb24vWk1SXFxucHJvYmF0aW9uYWxcXG5wcm9iYXRpb25hcnlcXG5wcm9iYXRpb25lci9NXFxucHJvYmUvTUdEU0JKXFxucHJvYml0eS9NXFxucHJvYmxlbS9NU1xcbnByb2JsZW1hdGljL1VcXG5wcm9ibGVtYXRpY2FsL1lcXG5wcm9ib3NjZXNcXG5wcm9ib3NjaXMvTVNcXG5wcm9jYWluZS9NXFxucHJvY2VkdXJhbFxcbnByb2NlZHVyZS9TTVxcbnByb2NlZWQvR0pEU1xcbnByb2NlZWRpbmcvTVxcbnByb2NlZWRzL01cXG5wcm9jZXNzJ3NcXG5wcm9jZXNzL0FHRFNcXG5wcm9jZXNzYWJsZVxcbnByb2Nlc3NlZC9VXFxucHJvY2Vzc2lvbi9HRFxcbnByb2Nlc3Npb25hbC9NU1xcbnByb2Nlc3Nvci9TTVxcbnByb2NsYW1hdGlvbi9NU1xcbnByb2NsaXZpdHkvU01cXG5wcm9jcmFzdGluYXRlL0RTR05cXG5wcm9jcmFzdGluYXRpb24vTVxcbnByb2NyYXN0aW5hdG9yL01TXFxucHJvY3JlYXRlL1ZcXG5wcm9jdG9yL0dNRFNcXG5wcm9jdXJlbWVudC9NXFxucHJvZC9NU1xcbnByb2RpZ2FsL01ZU1xcbnByb2RpZ2FsaXR5L01cXG5wcm9kaWdpb3VzL1lcXG5wcm9kaWd5L1NNXFxucHJvZHVjZSdzXFxucHJvZHVjZS9BWkdEUlNcXG5wcm9kdWNlci9BTVxcbnByb2R1Y2libGUvQVxcbnByb2R1Y3Rpb24vQVNNXFxucHJvZHVjdGl2ZS9VWVxcbnByb2R1Y3RpdmVuZXNzL01cXG5wcm9kdWN0aXZpdHkvTVxcbnByb2YvTVNcXG5wcm9mYW5hdGlvbi9NU1xcbnByb2ZhbmUvUFlHRFNcXG5wcm9mYW5lbmVzcy9NXFxucHJvZmFuaXR5L1NNXFxucHJvZmVzc2VkL1lcXG5wcm9mZXNzaW9uL1NNXFxucHJvZmVzc2lvbmFsL01ZU1xcbnByb2Zlc3Npb25hbGlzbS9NXFxucHJvZmVzc2lvbmFsaXphdGlvblxcbnByb2Zlc3Npb25hbGl6ZS9EU0dcXG5wcm9mZXNzb3IvU01cXG5wcm9mZXNzb3JpYWwvWVxcbnByb2Zlc3NvcnNoaXAvU01cXG5wcm9mZmVyL0dNRFNcXG5wcm9maWNpZW5jeS9NXFxucHJvZmljaWVudC9NWVNcXG5wcm9maXQvQkdEXFxucHJvZml0YWJpbGl0eS9NXFxucHJvZml0YWJsZS9VXFxucHJvZml0YWJseS9VXFxucHJvZml0ZWVyL01ER1NcXG5wcm9maXRlZXJpbmcvTVxcbnByb2ZpdGVyb2xlL1NNXFxucHJvZml0bGVzc1xcbnByb2ZsaWdhY3kvTVxcbnByb2ZsaWdhdGUvU01ZXFxucHJvZm9ybWFcXG5wcm9mb3VuZC9SWVRQXFxucHJvZm91bmRuZXNzL01cXG5wcm9mdW5kaXR5L1NNXFxucHJvZnVzZS9QWVxcbnByb2Z1c2VuZXNzL01cXG5wcm9nZW5pdG9yL1NNXFxucHJvZ2VueS9NXFxucHJvZ2VzdGVyb25lL01cXG5wcm9nZXN0aW4vU1xcbnByb2duYXRob3VzXFxucHJvZ25vc2VzXFxucHJvZ25vc2lzL01cXG5wcm9nbm9zdGljL01TXFxucHJvZ25vc3RpY2F0ZS9YR05EU1xcbnByb2dub3N0aWNhdGlvbi9NXFxucHJvZ25vc3RpY2F0b3IvTVNcXG5wcm9ncmFtL0NBU1xcbnByb2dyYW1tYWJsZS9NU1xcbnByb2dyYW1tYXRpY1xcbnByb2dyYW1tZWQvQUNcXG5wcm9ncmFtbWVyL01TXFxucHJvZ3JhbW1pbmcvU01cXG5wcm9ncmVzcy9NRFNHVlxcbnByb2dyZXNzaW9uL01TXFxucHJvZ3Jlc3NpdmUvUE1ZU1xcbnByb2dyZXNzaXZlbmVzcy9NXFxucHJvaGliaXQvREdWU1xcbnByb2hpYml0aW9uL1NNXFxucHJvaGliaXRpb25pc3QvTVNcXG5wcm9oaWJpdGl2ZS9ZXFxucHJvaGliaXRvcnlcXG5wcm9qZWN0L0dNRFNcXG5wcm9qZWN0aWxlL1NNXFxucHJvamVjdGlvbi9TTVxcbnByb2plY3Rpb25pc3QvU01cXG5wcm9qZWN0b3IvTVNcXG5wcm9rYXJ5b3RlL01TXFxucHJva2FyeW90aWNcXG5wcm9sZS9TXFxucHJvbGV0YXJpYW4vTVNcXG5wcm9sZXRhcmlhdC9NXFxucHJvbGlmZXJhdGUvRFNHTlxcbnByb2xpZmVyYXRpb24vTVxcbnByb2xpZmljXFxucHJvbGlmaWNhbGx5XFxucHJvbGl4L1lcXG5wcm9saXhpdHkvTVxcbnByb2xvZ3VlL1NNXFxucHJvbG9uZ2F0aW9uL1NNXFxucHJvbS9NXFxucHJvbWVuYWRlL01HRFNcXG5wcm9tZXRoaXVtL01cXG5wcm9taW5lbmNlL01cXG5wcm9taW5lbnQvWVxcbnByb21pc2N1aXR5L01cXG5wcm9taXNjdW91cy9ZXFxucHJvbWlzZS9EU01HXFxucHJvbWlzaW5nL1lcXG5wcm9taXNzb3J5XFxucHJvbW8vTVxcbnByb21vbnRvcnkvU01cXG5wcm9tb3RlL0RSWkdcXG5wcm9tb3Rlci9NXFxucHJvbW90aW9uYWxcXG5wcm9tcHQvSlBTTURSWVpUR1xcbnByb21wdGVkL1VcXG5wcm9tcHRlci9NXFxucHJvbXB0aW5nL01cXG5wcm9tcHRpdHVkZS9NXFxucHJvbXB0bmVzcy9NXFxucHJvbXVsZ2F0ZS9HTkRTXFxucHJvbXVsZ2F0aW9uL01cXG5wcm9tdWxnYXRvci9NU1xcbnByb25lL1BcXG5wcm9uZW5lc3MvTVxcbnByb25nL01EU1xcbnByb25naG9ybi9NU1xcbnByb25vbWluYWwvTVxcbnByb25vdW5jZS9EU0xHXFxucHJvbm91bmNlYWJsZS9VXFxucHJvbm91bmNlbWVudC9TTVxcbnByb250b1xcbnByb251bmNpYXRpb24vTVNcXG5wcm9vZi9BREdTTVxcbnByb29mcmVhZC9TUlpHXFxucHJvb2ZyZWFkZXIvTVxcbnByb3AvTVNcXG5wcm9wYWdhbmRhL01cXG5wcm9wYWdhbmRpc3QvTVNcXG5wcm9wYWdhbmRpemUvR0RTXFxucHJvcGFnYXRlL0RTR05cXG5wcm9wYWdhdGlvbi9NXFxucHJvcGFnYXRvci9TTVxcbnByb3BlbC9TXFxucHJvcGVsbGFudC9NU1xcbnByb3BlbGxlZFxcbnByb3BlbGxlci9TTVxcbnByb3BlbGxpbmdcXG5wcm9wZW5zaXR5L1NNXFxucHJvcGVyL01SWVRcXG5wcm9wZXJ0eS9EU01cXG5wcm9waGVjeS9TTVxcbnByb3BoZXNpZXIvTVxcbnByb3BoZXN5L0RSU01aR1xcbnByb3BoZXQvU01cXG5wcm9waGV0ZXNzL01TXFxucHJvcGhldGljXFxucHJvcGhldGljYWwvWVxcbnByb3BoeWxhY3RpYy9TTVxcbnByb3BoeWxheGVzXFxucHJvcGh5bGF4aXMvTVxcbnByb3BpbnF1aXR5L01cXG5wcm9waXRpYXRlL0RTR05cXG5wcm9waXRpYXRpb24vTVxcbnByb3BpdGlhdG9yeVxcbnByb3BpdGlvdXMvWVxcbnByb3BvbmVudC9TTVxcbnByb3BvcnRpb24vRVNNXFxucHJvcG9ydGlvbmFsL1lTXFxucHJvcG9ydGlvbmFsaXR5XFxucHJvcG9ydGlvbmF0ZS9FWVxcbnByb3Bvc2FsL01TXFxucHJvcHBlZFxcbnByb3BwaW5nXFxucHJvcHJhbm9sb2xcXG5wcm9wcmlldGFyeS9TTVxcbnByb3ByaWV0aWVzL01cXG5wcm9wcmlldG9yL1NNXFxucHJvcHJpZXRvcmlhbC9ZXFxucHJvcHJpZXRvcnNoaXAvTVxcbnByb3ByaWV0cmVzcy9NU1xcbnByb3ByaWV0eS9TTVxcbnByb3B1bHNpb24vTVxcbnByb3B1bHNpdmVcXG5wcm9yYXRlL0RTR1xcbnByb3JvZ2F0aW9uL01cXG5wcm9yb2d1ZS9HRFxcbnByb3NhaWNcXG5wcm9zYWljYWxseVxcbnByb3NjZW5pdW0vU01cXG5wcm9zY2l1dHRvL01cXG5wcm9zY3JpYmUvREdcXG5wcm9zY3JpcHRpb24vTVNcXG5wcm9zZS9NXFxucHJvc2VjdXRlL0RTWEdOXFxucHJvc2VjdXRpb24vTVxcbnByb3NlY3V0b3IvTVNcXG5wcm9zZWx5dGUvRFNNR1xcbnByb3NlbHl0aXNtL01cXG5wcm9zZWx5dGl6ZS9EUlNaR1xcbnByb3NlbHl0aXplci9NXFxucHJvc29jaWFsXFxucHJvc29keS9TTVxcbnByb3NwZWN0L01ER1ZTXFxucHJvc3BlY3RpdmUvWVxcbnByb3NwZWN0b3IvU01cXG5wcm9zcGVjdHVzL01TXFxucHJvc3Blci9HU0RcXG5wcm9zcGVyaXR5L01cXG5wcm9zcGVyb3VzL1lcXG5wcm9zdGF0ZS9NU1xcbnByb3N0aGVzZXNcXG5wcm9zdGhlc2lzL01cXG5wcm9zdGhldGljXFxucHJvc3RpdHV0ZS9NR05EU1xcbnByb3N0aXR1dGlvbi9NXFxucHJvc3RyYXRlL0dOWERTXFxucHJvc3RyYXRpb24vTVxcbnByb3N5L1JUXFxucHJvdGFjdGluaXVtL01cXG5wcm90YWdvbmlzdC9TTVxcbnByb3RlYW5cXG5wcm90ZWN0L0dWU0RcXG5wcm90ZWN0ZWQvVVxcbnByb3RlY3Rpb24vU01cXG5wcm90ZWN0aW9uaXNtL01cXG5wcm90ZWN0aW9uaXN0L01TXFxucHJvdGVjdGl2ZS9QWVxcbnByb3RlY3RpdmVuZXNzL01cXG5wcm90ZWN0b3IvTVNcXG5wcm90ZWN0b3JhdGUvTVNcXG5wcm90ZWdlL1NNXFxucHJvdGVnZWUvU1xcbnByb3RlaW4vU01cXG5wcm90ZXN0YW50L1NcXG5wcm90ZXN0YXRpb24vTVNcXG5wcm90b2NvbC9NU1xcbnByb3Rvbi9TTVxcbnByb3RvcGxhc20vTVxcbnByb3RvcGxhc21pY1xcbnByb3RvdHlwZS9NR1NcXG5wcm90b3R5cGljYWxcXG5wcm90b3pvYVxcbnByb3Rvem9hbi9NU1xcbnByb3Rvem9pY1xcbnByb3RyYWN0L0dEXFxucHJvdHJ1ZGUvR0RTXFxucHJvdHJ1c2lsZVxcbnByb3RydXNpb24vTVNcXG5wcm90dWJlcmFuY2UvTVNcXG5wcm90dWJlcmFudFxcbnByb3VkL1JZVFxcbnByb3YvTkJcXG5wcm92YWJpbGl0eS9NXFxucHJvdmFibHlcXG5wcm92ZS9FQUdEU1xcbnByb3ZlZC9VXFxucHJvdmVuL1VcXG5wcm92ZW5hbmNlL1NNXFxucHJvdmVuZGVyL01cXG5wcm92ZW5pZW5jZS9NXFxucHJvdmVyYmlhbC9ZXFxucHJvdmlkZS9EUlNaR1xcbnByb3ZpZGVkL1VcXG5wcm92aWRlbmNlL01cXG5wcm92aWRlbnQvWVxcbnByb3ZpZGVudGlhbC9ZXFxucHJvdmlkZXIvTVxcbnByb3ZpbmNlL01TXFxucHJvdmluY2lhbC9TTVlcXG5wcm92aW5jaWFsaXNtL01cXG5wcm92aXNpb25hbC9ZXFxucHJvdmlzby9TTVxcbnByb3ZvY2F0ZXVyL1NcXG5wcm92b2NhdGl2ZS9QWVxcbnByb3ZvY2F0aXZlbmVzcy9NXFxucHJvdm9rZS9EUlNaR1xcbnByb3Zva2VkL1VcXG5wcm92b2tlci9NXFxucHJvdm9raW5nL1lcXG5wcm92b2xvbmUvTVxcbnByb3Zvc3QvU01cXG5wcm93L01TXFxucHJvd2Vzcy9NXFxucHJvd2wvTURSU1pHXFxucHJvd2xlci9NXFxucHJveGltYWxcXG5wcm94aW1hdGVcXG5wcm94aW1pdHkvTVxcbnByb3h5L1NNXFxucHJ1ZGUvTVNcXG5wcnVkZW5jZS9NXFxucHJ1ZGVudC9ZXFxucHJ1ZGVudGlhbC9ZXFxucHJ1ZGVyeS9NXFxucHJ1ZGlzaC9ZUFxcbnBydWRpc2huZXNzL01cXG5wcnVuZS9NWkdEUlNcXG5wcnVuZXIvTVxcbnBydXJpZW5jZS9NXFxucHJ1cmllbnQvWVxcbnByeS9aVEdEUlNNXFxucHNhbG0vTVNcXG5wc2FsbWlzdC9TTVxcbnBzYWx0ZXJ5L1NNXFxucHNlcGhvbG9naXN0L1NcXG5wc2VwaG9sb2d5XFxucHNldWQvU1xcbnBzZXVkby9TXFxucHNldWRvbnltL1NNXFxucHNldWRvbnltb3VzXFxucHNldWRvc2NpZW5jZS9NU1xcbnBzZXVkeVxcbnBzaGF3L01TXFxucHNpL1NNXFxucHNpdHRhY29zaXMvTVxcbnBzb3JpYXNpcy9NXFxucHNzdFxcbnBzeWNoL01EU0dcXG5wc3ljaGUvTVxcbnBzeWNoZWRlbGlhXFxucHN5Y2hlZGVsaWMvU01cXG5wc3ljaGVkZWxpY2FsbHlcXG5wc3ljaGlhdHJpY1xcbnBzeWNoaWF0cmlzdC9TTVxcbnBzeWNoaWF0cnkvTVxcbnBzeWNoaWMvTVNcXG5wc3ljaGljYWwvWVxcbnBzeWNoby9TTVxcbnBzeWNob2FjdGl2ZVxcbnBzeWNob2FuYWx5c2VzXFxucHN5Y2hvYW5hbHlzaXMvTVxcbnBzeWNob2FuYWx5c3QvU01cXG5wc3ljaG9hbmFseXRpY1xcbnBzeWNob2FuYWx5dGljYWwvWVxcbnBzeWNob2FuYWx5emUvRFNHXFxucHN5Y2hvYmFiYmxlL01cXG5wc3ljaG9kcmFtYS9NU1xcbnBzeWNob2dlbmljXFxucHN5Y2hva2luZXNpc1xcbnBzeWNob2tpbmV0aWNcXG5wc3ljaG9sb2dpY2FsL1lcXG5wc3ljaG9sb2dpc3QvTVNcXG5wc3ljaG9sb2d5L1NNXFxucHN5Y2hvbWV0cmljXFxucHN5Y2hvbmV1cm9zZXNcXG5wc3ljaG9uZXVyb3Npcy9NXFxucHN5Y2hvcGF0aC9NXFxucHN5Y2hvcGF0aGljXFxucHN5Y2hvcGF0aG9sb2d5XFxucHN5Y2hvcGF0aHNcXG5wc3ljaG9wYXRoeS9NXFxucHN5Y2hvcGhhcm1hY29sb2d5XFxucHN5Y2hvcGh5c2lvbG9neVxcbnBzeWNob3MvU1xcbnBzeWNob3Npcy9NXFxucHN5Y2hvc29tYXRpY1xcbnBzeWNob3RoZXJhcGlzdC9NU1xcbnBzeWNob3RoZXJhcHkvU01cXG5wc3ljaG90aWMvU01cXG5wc3ljaG90aWNhbGx5XFxucHN5Y2hvdHJvcGljL01TXFxucHN5Y2hzXFxucHQvQ1xcbnB0YXJtaWdhbi9NU1xcbnB0ZXJvZGFjdHlsL01TXFxucHRvbWFpbmUvU01cXG5wdWIvU01cXG5wdWJlcnRhbFxcbnB1YmVydHkvTVxcbnB1YmVzL01cXG5wdWJlc2NlbmNlL01cXG5wdWJlc2NlbnRcXG5wdWJpY1xcbnB1YmlzL01cXG5wdWJsaWMvQU1cXG5wdWJsaWNhbi9BTVNcXG5wdWJsaWNhdGlvbi9BU01cXG5wdWJsaWNpc3QvTVNcXG5wdWJsaWNpdHkvTVxcbnB1YmxpY2l6ZS9HRFNcXG5wdWJsaWNseVxcbnB1Ymxpc2gvQUdEU1xcbnB1Ymxpc2hhYmxlXFxucHVibGlzaGVkL1VcXG5wdWJsaXNoZXIvTVNcXG5wdWJsaXNoaW5nL01cXG5wdWNlL01cXG5wdWNrL1pNUlNcXG5wdWNrZXIvTURHXFxucHVja2lzaC9ZUFxcbnB1Y2tpc2huZXNzL01cXG5wdWQvU1xcbnB1ZGRpbmcvU01cXG5wdWRkbGUvRFNNR1xcbnB1ZGRsaW5nL01cXG5wdWRlbmRhXFxucHVkZW5kdW0vTVxcbnB1ZGdpbmVzcy9NXFxucHVkZ3kvUFJUXFxucHVlYmxvL1NNXFxucHVlcmlsZVxcbnB1ZXJpbGl0eS9NXFxucHVlcnBlcmFsXFxucHVmZi9aR01EUlNcXG5wdWZmYmFsbC9TTVxcbnB1ZmZlci9NXFxucHVmZmluL1NNXFxucHVmZmluZXNzL01cXG5wdWZmeS9QUlRcXG5wdWcvU01cXG5wdWdpbGlzbS9NXFxucHVnaWxpc3QvU01cXG5wdWdpbGlzdGljXFxucHVnbmFjaW91cy9ZUFxcbnB1Z25hY2lvdXNuZXNzL01cXG5wdWduYWNpdHkvTVxcbnB1a2UvTUdEU1xcbnB1a2thXFxucHVsY2hyaXR1ZGUvTVxcbnB1bGNocml0dWRpbm91c1xcbnB1bGUvR0RTXFxucHVsbC9aR01EUlNcXG5wdWxsYmFjay9NU1xcbnB1bGxlci9NXFxucHVsbGV0L1NNXFxucHVsbGV5L1NNXFxucHVsbG91dC9NU1xcbnB1bGxvdmVyL1NNXFxucHVsbW9uYXJ5XFxucHVscC9HTURTXFxucHVscGluZXNzL01cXG5wdWxwaXQvU01cXG5wdWxwd29vZC9NXFxucHVscHkvUlBUXFxucHVsc2FyL1NNXFxucHVsc2F0ZS9YR05EU1xcbnB1bHNhdGlvbi9NXFxucHVsc2UvQU1HRFNcXG5wdWx2ZXJpemF0aW9uL01cXG5wdWx2ZXJpemUvRFNHXFxucHVtYS9NU1xcbnB1bWljZS9TTVxcbnB1bW1lbC9TR0RcXG5wdW1wL1pHTURSU1xcbnB1bXBlci9NXFxucHVtcGVybmlja2VsL01cXG5wdW1wa2luL01TXFxucHVuL1NNXFxucHVuY2gvTURSU1pHXFxucHVuY2hiYWcvU1xcbnB1bmNoZW9uL01TXFxucHVuY2hlci9NXFxucHVuY2hsaW5lL1NcXG5wdW5jaHkvVFJcXG5wdW5jdGlsaW8vTVxcbnB1bmN0aWxpb3VzL1BZXFxucHVuY3RpbGlvdXNuZXNzL01cXG5wdW5jdHVhbC9ZXFxucHVuY3R1YWxpdHkvTVxcbnB1bmN0dWF0ZS9HTkRTXFxucHVuY3R1YXRpb24vTVxcbnB1bmN0dXJlL0RTTUdcXG5wdW5kaXQvU01cXG5wdW5kaXRyeS9NXFxucHVuZ2VuY3kvTVxcbnB1bmdlbnQvWVxcbnB1bmluZXNzL01cXG5wdW5pc2gvQkxHRFNcXG5wdW5pc2hlZC9VXFxucHVuaXNoaW5nL1lcXG5wdW5pc2htZW50L01TXFxucHVuaXRpdmUvWVxcbnB1bmsvVE1SU1xcbnB1bm5lZFxcbnB1bm5ldC9TXFxucHVubmluZ1xcbnB1bnN0ZXIvU01cXG5wdW50L1pHTURSU1xcbnB1bnRlci9NXFxucHVueS9UUlBcXG5wdXAvU01cXG5wdXBhL01cXG5wdXBhZVxcbnB1cGFsXFxucHVwYXRlL0RTR1xcbnB1cGlsL01TXFxucHVwcGVkXFxucHVwcGV0L01TXFxucHVwcGV0ZWVyL1NNXFxucHVwcGV0cnkvTVxcbnB1cHBpbmdcXG5wdXBweS9TTVxcbnB1cmJsaW5kXFxucHVyY2hhc2UvRFJTTVpHQlxcbnB1cmNoYXNlci9NXFxucHVyZGFoL01cXG5wdXJlL1BZVFJcXG5wdXJlYnJlZC9TTVxcbnB1cmVlL01EU1xcbnB1cmVlaW5nXFxucHVyZW5lc3MvTVxcbnB1cmdhdGl2ZS9TTVxcbnB1cmdhdG9yaWFsXFxucHVyZ2F0b3J5L1NNXFxucHVyZ2UvTVpHRFJTXFxucHVyZ2VyL01cXG5wdXJpZmljYXRpb24vTVxcbnB1cmlmaWVyL01cXG5wdXJpZnkvTkRSU1pHXFxucHVyaW5lL01TXFxucHVyaXNtL01cXG5wdXJpc3QvTVNcXG5wdXJpc3RpY1xcbnB1cml0YW4vU01cXG5wdXJpdGFuaWNhbC9ZXFxucHVyaXRhbmlzbS9NXFxucHVyaXR5L01cXG5wdXJsL0dNRFNcXG5wdXJsaWV1L1NNXFxucHVybG9pbi9TR0RcXG5wdXJwbGUvTVRSU1xcbnB1cnBsaXNoXFxucHVycG9ydC9TTURHXFxucHVycG9ydGVkL1lcXG5wdXJwb3NlL0RTTVlHXFxucHVycG9zZWQvQVxcbnB1cnBvc2VmdWwvWVBcXG5wdXJwb3NlZnVsbmVzcy9NXFxucHVycG9zZWxlc3MvUFlcXG5wdXJyL0dNRFNcXG5wdXJzZS9NWkdEUlNcXG5wdXJzZXIvTVxcbnB1cnN1YW5jZS9NXFxucHVyc3VhbnRcXG5wdXJzdWUvWkdEUlNcXG5wdXJzdWVyL01cXG5wdXJzdWl0L1NNXFxucHVydWxlbmNlL01cXG5wdXJ1bGVudFxcbnB1cnZleS9EU0dcXG5wdXJ2ZXlhbmNlL01cXG5wdXJ2ZXlvci9TTVxcbnB1cnZpZXcvTVxcbnB1cy9NXFxucHVzaC9aR01EUlNcXG5wdXNoYmlrZS9TXFxucHVzaGNhcnQvU01cXG5wdXNoY2hhaXIvU1xcbnB1c2hlci9NXFxucHVzaGlseVxcbnB1c2hpbmVzcy9NXFxucHVzaG92ZXIvTVNcXG5wdXNocGluL1NcXG5wdXNoeS9UUlBcXG5wdXNpbGxhbmltaXR5L01cXG5wdXNpbGxhbmltb3VzL1lcXG5wdXNzL01TXFxucHVzc3kvVFJTTVxcbnB1c3N5Y2F0L01TXFxucHVzc3lmb290L0RTR1xcbnB1c3R1bGFyXFxucHVzdHVsZS9TTVxcbnB1dC9JU01cXG5wdXRhdGl2ZVxcbnB1dG91dC9NU1xcbnB1dHJlZmFjdGlvbi9NXFxucHV0cmVmYWN0aXZlXFxucHV0cmVmeS9HRFNcXG5wdXRyZXNjZW5jZS9NXFxucHV0cmVzY2VudFxcbnB1dHJpZFxcbnB1dHNjaC9NU1xcbnB1dHQvWkdNRFJTXFxucHV0dGVkL0lcXG5wdXR0ZWUvTVNcXG5wdXR0ZXIvTURSWkdcXG5wdXR0ZXJlci9NXFxucHV0dGluZy9JXFxucHV0dHkvR0RTTVxcbnB1dHovU1xcbnB1enpsZS9NWkdEUlNMXFxucHV6emxlbWVudC9NXFxucHV6emxlci9NXFxucHZ0XFxucHduL1NHRFxcbnB5ZWxvbmVwaHJpdGlzXFxucHlnbXkvU01cXG5weWxvbi9TTVxcbnB5bG9yaVxcbnB5bG9yaWNcXG5weWxvcnVzL01cXG5weW9ycmhlYS9NXFxucHlyYW1pZC9HU01EXFxucHlyYW1pZGFsXFxucHlyZS9NU1xcbnB5cmltaWRpbmUvTVNcXG5weXJpdGUvU01cXG5weXJpdGVzL01cXG5weXJvbWFuaWEvTVxcbnB5cm9tYW5pYWMvU01cXG5weXJvdGVjaG5pYy9TXFxucHlyb3RlY2huaWNhbFxcbnB5cm90ZWNobmljcy9NXFxucHlydXZhdGVcXG5weXRob24vU01cXG5weXgvTVNcXG5wemF6elxcbnFcXG5xclxcbnF0L1NcXG5xdHlcXG5xdWFcXG5xdWFjay9HTURTXFxucXVhY2tlcnkvTVxcbnF1YWQvTVNcXG5xdWFkcmFuZ2xlL1NNXFxucXVhZHJhbmd1bGFyXFxucXVhZHJhbnQvTVNcXG5xdWFkcmFwaG9uaWNcXG5xdWFkcmF0aWMvTVNcXG5xdWFkcmF0dXJlXFxucXVhZHJlbm5pYWxcXG5xdWFkcmVubml1bS9NU1xcbnF1YWRyaWNlcHMvTVNcXG5xdWFkcmlsYXRlcmFsL1NNXFxucXVhZHJpbGxlL1hNTlNcXG5xdWFkcmlsbGlvbi9NXFxucXVhZHJpcGxlZ2lhL01cXG5xdWFkcmlwbGVnaWMvU01cXG5xdWFkcml2aXVtL01cXG5xdWFkcnVwZWQvTVNcXG5xdWFkcnVwZWRhbFxcbnF1YWRydXBsZS9NR0RTXFxucXVhZHJ1cGxldC9NU1xcbnF1YWRydXBsaWNhdGUvTUdORFNcXG5xdWFkcnVwbGljYXRpb24vTVxcbnF1YWZmL0dNRFNcXG5xdWFnbWlyZS9TTVxcbnF1YWhvZy9NU1xcbnF1YWlsL0dNRFNcXG5xdWFpbnQvUFJZVFxcbnF1YWludG5lc3MvTVxcbnF1YWtlL01HRFNcXG5xdWFreVxcbnF1YWxpZmljYXRpb24vRU1cXG5xdWFsaWZpZWQvVVxcbnF1YWxpZmllci9TTVxcbnF1YWxpZnkvRUdYTkRTXFxucXVhbGl0YXRpdmUvWVxcbnF1YWxpdHkvU01cXG5xdWFsbS9NU1xcbnF1YWxtaXNoXFxucXVhbmRhcnkvU01cXG5xdWFuZ28vU1xcbnF1YW50YVxcbnF1YW50aWZpYWJsZVxcbnF1YW50aWZpY2F0aW9uL01cXG5xdWFudGlmaWVyL01cXG5xdWFudGlmeS9ORFJTWkdcXG5xdWFudGl0YXRpb25cXG5xdWFudGl0YXRpdmUvWVxcbnF1YW50aXR5L1NNXFxucXVhbnRpemF0aW9uXFxucXVhbnRpemVcXG5xdWFudHVtL01cXG5xdWFyYW50aW5lL01HRFNcXG5xdWFyay9NU1xcbnF1YXJyZWwvU1pHTURSXFxucXVhcnJlbGVyL01cXG5xdWFycmVsc29tZS9QXFxucXVhcnJlbHNvbWVuZXNzL01cXG5xdWFycnkvRFNNR1xcbnF1YXJ0L01TXFxucXVhcnRlci9TR01EWVxcbnF1YXJ0ZXJiYWNrL0dNRFNcXG5xdWFydGVyZGVjay9NU1xcbnF1YXJ0ZXJmaW5hbC9TTVxcbnF1YXJ0ZXJseS9TTVxcbnF1YXJ0ZXJtYXN0ZXIvTVNcXG5xdWFydGVyc3RhZmYvTVxcbnF1YXJ0ZXJzdGF2ZXNcXG5xdWFydGV0L1NNXFxucXVhcnRvL01TXFxucXVhcnR6L01cXG5xdWFzYXIvTVNcXG5xdWFzaC9HRFNcXG5xdWFzaVxcbnF1YXRyYWluL01TXFxucXVhdmVyL01EU0dcXG5xdWF2ZXJ5XFxucXVheS9NU1xcbnF1YXlzaWRlL1NcXG5xdWVhc2lseVxcbnF1ZWFzaW5lc3MvTVxcbnF1ZWFzeS9UUFJcXG5xdWVlbi9HTURZU1xcbnF1ZWVubHkvUlRcXG5xdWVlci9QVEdNRFJZU1xcbnF1ZWVybmVzcy9NXFxucXVlbGwvR0RTXFxucXVlbmNoL1pHRFJTQlxcbnF1ZW5jaGFibGUvVVxcbnF1ZW5jaGVyL01cXG5xdWVuY2hsZXNzXFxucXVlcnVsb3VzL1lQXFxucXVlcnVsb3VzbmVzcy9NXFxucXVlcnkvRFNNR1xcbnF1ZXNcXG5xdWVzYWRpbGxhL01TXFxucXVlc3QvSUZBTVNcXG5xdWVzdGVkXFxucXVlc3RpbmdcXG5xdWVzdGlvbi9TTURSWkdCSlxcbnF1ZXN0aW9uYWJsZS9VXFxucXVlc3Rpb25hYmx5L1VcXG5xdWVzdGlvbmVkL1VcXG5xdWVzdGlvbmVyL01cXG5xdWVzdGlvbmluZy9NWVxcbnF1ZXN0aW9ubmFpcmUvU01cXG5xdWV1ZSdzXFxucXVldWUvQ0RTXFxucXVldWluZ1xcbnF1aWJibGUvRFJTTVpHXFxucXVpYmJsZXIvTVxcbnF1aWNoZS9TTVxcbnF1aWNrL01OUllYVFBcXG5xdWlja2VuL0RHXFxucXVpY2tmaXJlXFxucXVpY2tpZS9TTVxcbnF1aWNrbGltZS9NXFxucXVpY2tuZXNzL01cXG5xdWlja3NhbmQvTVNcXG5xdWlja3NpbHZlci9NXFxucXVpY2tzdGVwL01TXFxucXVpZC9NU1xcbnF1aWVzY2VuY2UvTVxcbnF1aWVzY2VudC9ZXFxucXVpZXQvU01ETlJZWFRHUFxcbnF1aWV0ZW4vREdcXG5xdWlldGlzbVxcbnF1aWV0bmVzcy9NXFxucXVpZXR1ZGUvSUVNXFxucXVpZXR1cy9NU1xcbnF1aWZmL1NcXG5xdWlsbC9TTVxcbnF1aWx0L1NNRFJaR1xcbnF1aWx0ZXIvTVxcbnF1aWx0aW5nL01cXG5xdWluL1NcXG5xdWluY2UvU01cXG5xdWluZS9TXFxucXVpbmlkaW5lXFxucXVpbmluZS9NXFxucXVpbm9hXFxucXVpbnN5L01cXG5xdWludC9TTVxcbnF1aW50ZXNzZW5jZS9TTVxcbnF1aW50ZXNzZW50aWFsL1lcXG5xdWludGV0L1NNXFxucXVpbnR1cGxlL01HRFNcXG5xdWludHVwbGV0L01TXFxucXVpcC9NU1xcbnF1aXBwZWRcXG5xdWlwcGluZ1xcbnF1aXBzdGVyL1NNXFxucXVpcmUnc1xcbnF1aXJlL0lBU1xcbnF1aXJrL1NNREdcXG5xdWlya2luZXNzL01cXG5xdWlya3kvUlRQXFxucXVpcnQvU01cXG5xdWlzbGluZy9TTVxcbnF1aXQvU1xcbnF1aXRjbGFpbS9NU1xcbnF1aXRlXFxucXVpdHRhbmNlL01cXG5xdWl0dGVyL1NNXFxucXVpdHRpbmdcXG5xdWl2ZXIvU01ER1xcbnF1aXZlcnlcXG5xdWl4b3RpY1xcbnF1aXhvdGljYWxseVxcbnF1aXovTVxcbnF1aXp6ZWRcXG5xdWl6emVyL1NNXFxucXVpenplc1xcbnF1aXp6aWNhbC9ZXFxucXVpenppbmdcXG5xdW8vSFxcbnF1b2luL1NNXFxucXVvaXQvU01ER1xcbnF1b25kYW1cXG5xdW9yYXRlL0lcXG5xdW9ydW0vU01cXG5xdW90L0JcXG5xdW90YS9TTVxcbnF1b3RhYmlsaXR5L01cXG5xdW90YXRpb24vU01cXG5xdW90ZSdzXFxucXVvdGUvVURTR1xcbnF1b3RpZGlhblxcbnF1b3RpZW50L1NNXFxucXdlcnR5XFxuci9TXFxucmFiYmV0L0dNRFNcXG5yYWJiaS9TTVxcbnJhYmJpbmF0ZS9NXFxucmFiYmluaWNcXG5yYWJiaW5pY2FsXFxucmFiYml0L0dNRFNcXG5yYWJibGUvTVNcXG5yYWJpZC9QWVxcbnJhYmlkbmVzcy9NXFxucmFiaWVzL01cXG5yYWNjb29uL01TXFxucmFjZS9NWkdEUlNcXG5yYWNlY291cnNlL1NNXFxucmFjZWdvZXIvU1xcbnJhY2Vob3JzZS9NU1xcbnJhY2VtZS9NU1xcbnJhY2VyL01cXG5yYWNldHJhY2svTVNcXG5yYWNld2F5L01TXFxucmFjaWFsL1lcXG5yYWNpYWxpc20vTVxcbnJhY2lhbGlzdC9NU1xcbnJhY2lseVxcbnJhY2luZXNzL01cXG5yYWNpbmcvTVxcbnJhY2lzbS9NXFxucmFjaXN0L1NNXFxucmFjay9HTURTXFxucmFja2V0L1NNREdcXG5yYWNrZXRlZXIvU01ER1xcbnJhY2tldGVlcmluZy9NXFxucmFjb250ZXVyL1NNXFxucmFjcXVldGJhbGwvU01cXG5yYWN5L1BSVFxcbnJhZC9TTVxcbnJhZGFyL1NNXFxucmFkYXJzY29wZS9TTVxcbnJhZGRsZWRcXG5yYWRpYWwvU01ZXFxucmFkaWFuL1NcXG5yYWRpYW5jZS9NXFxucmFkaWFudC9ZXFxucmFkaWF0ZS9EU0dOWFxcbnJhZGlhdGlvbi9NXFxucmFkaWF0b3IvU01cXG5yYWRpY2FsL1NNWVxcbnJhZGljYWxpc20vTVxcbnJhZGljYWxpemF0aW9uL01cXG5yYWRpY2FsaXplL0RTR1xcbnJhZGljY2hpby9NXFxucmFkaWlcXG5yYWRpby9NREdTXFxucmFkaW9hY3RpdmUvWVxcbnJhZGlvYWN0aXZpdHkvTVxcbnJhZGlvY2FyYm9uL01cXG5yYWRpb2dyYW0vTVNcXG5yYWRpb2dyYXBoZXIvU01cXG5yYWRpb2dyYXBoeS9NXFxucmFkaW9pc290b3BlL01TXFxucmFkaW9sb2dpc3QvU01cXG5yYWRpb2xvZ3kvTVxcbnJhZGlvbWFuL01cXG5yYWRpb21lblxcbnJhZGlvbWV0ZXIvTVNcXG5yYWRpb21ldHJpY1xcbnJhZGlvbWV0cnkvTVxcbnJhZGlvcGhvbmUvU01cXG5yYWRpb3Njb3B5L01cXG5yYWRpb3NvbmRlL1NNXFxucmFkaW9zdXJnZXJ5XFxucmFkaW90ZWxlZ3JhcGgvTVxcbnJhZGlvdGVsZWdyYXBoc1xcbnJhZGlvdGVsZWdyYXBoeS9NXFxucmFkaW90ZWxlcGhvbmUvTVNcXG5yYWRpb3RoZXJhcGlzdC9NU1xcbnJhZGlvdGhlcmFweS9NXFxucmFkaXNoL01TXFxucmFkaXVtL01cXG5yYWRpdXMvTVxcbnJhZG9uL01cXG5yYWZmaWEvTVxcbnJhZmZpc2gvWVBcXG5yYWZmaXNobmVzcy9NXFxucmFmZmxlL0RTTUdcXG5yYWZ0L1pHTURSU1xcbnJhZnRlci9NXFxucmFmdGluZy9NXFxucmFnL1NHTURcXG5yYWdhL01TXFxucmFnYW11ZmZpbi9NU1xcbnJhZ2JhZy9NXFxucmFnZS9NU1xcbnJhZ2dhXFxucmFnZ2VkL1JZVFBcXG5yYWdnZWRuZXNzL01cXG5yYWdnZWR5L1JUXFxucmFnZ2luZ1xcbnJhZ2luZy9ZXFxucmFnbGFuL1NNXFxucmFnb3V0L1NNXFxucmFndGFnL1NcXG5yYWd0aW1lL01cXG5yYWd3ZWVkL01cXG5yYWd3b3J0XFxucmFoXFxucmFpZC9aR01EUlNcXG5yYWlkZXIvTVxcbnJhaWwnc1xcbnJhaWwvQ0dEU1xcbnJhaWxjYXJkL1NcXG5yYWlsaW5nL1NNXFxucmFpbGxlcnkvU01cXG5yYWlscm9hZC9TWkdNRFJcXG5yYWlscm9hZGVyL01cXG5yYWlscm9hZGluZy9NXFxucmFpbHdheS9TTVxcbnJhaWx3YXltYW5cXG5yYWlsd2F5bWVuXFxucmFpbWVudC9NXFxucmFpbi9HTURTXFxucmFpbmJvdy9TTVxcbnJhaW5jb2F0L1NNXFxucmFpbmRyb3AvU01cXG5yYWluZmFsbC9TTVxcbnJhaW5tYWtlci9TTVxcbnJhaW5tYWtpbmcvTVxcbnJhaW5wcm9vZlxcbnJhaW5zdG9ybS9NU1xcbnJhaW53YXRlci9NXFxucmFpbnkvUlRcXG5yYWlzZS9NWkdEUlNcXG5yYWlzZXIvTVxcbnJhaXNpbi9TTVxcbnJhamFoL01cXG5yYWphaHNcXG5yYWtlL01HRFNcXG5yYWtpc2gvWVBcXG5yYWtpc2huZXNzL01cXG5yYWxseS9EU01HXFxucmFtL1NNXFxucmFtYmxlL0RSU01aR0pcXG5yYW1ibGVyL01cXG5yYW1idW5jdGlvdXMvUFlcXG5yYW1idW5jdGlvdXNuZXNzL01cXG5yYW1la2luL1NNXFxucmFtaWUvTVxcbnJhbWlmaWNhdGlvbi9NXFxucmFtaWZ5L0RTWE5HXFxucmFtamV0L1NNXFxucmFtbWVkXFxucmFtbWluZ1xcbnJhbXAvR01TXFxucmFtcGFnZS9EU01HXFxucmFtcGFuY3kvTVxcbnJhbXBhbnQvWVxcbnJhbXBhcnQvU01cXG5yYW1yb2QvU01cXG5yYW1yb2RkZWRcXG5yYW1yb2RkaW5nXFxucmFtc2hhY2tsZVxcbnJhbi9BXFxucmFuY2gvTURSU1pHXFxucmFuY2hlci9NXFxucmFuY2hpbmcvTVxcbnJhbmNpZC9QXFxucmFuY2lkaXR5L01cXG5yYW5jaWRuZXNzL01cXG5yYW5jb3IvTVxcbnJhbmNvcm91cy9ZXFxucmFuZC9NXFxucmFuZGluZXNzL01cXG5yYW5kb20vUFNZXFxucmFuZG9taXphdGlvbi9NXFxucmFuZG9taXplL0RTR1xcbnJhbmRvbW5lc3MvTVNcXG5yYW5keS9SVFBcXG5yYW5lZS9NU1xcbnJhbmcvWlJcXG5yYW5nZSdzXFxucmFuZ2UvQ0dEU1xcbnJhbmdlZmluZGVyL1NcXG5yYW5nZXIvTVxcbnJhbmdpbmVzcy9NXFxucmFuZ3kvUlRQXFxucmFuay9UR0pQTURSWVNcXG5yYW5raW5nL01cXG5yYW5rbGUvRFNHXFxucmFua25lc3MvTVxcbnJhbnNhY2svU0dEXFxucmFuc29tL1NaR01EUlxcbnJhbnNvbWVyL01cXG5yYW5zb213YXJlXFxucmFudC9aR01ESlJTXFxucmFudGVyL01cXG5yYXAvU1pHTURSXFxucmFwYWNpb3VzL1BZXFxucmFwYWNpb3VzbmVzcy9NXFxucmFwYWNpdHkvTVxcbnJhcGUvTVNcXG5yYXBlci9NXFxucmFwZXNlZWQvTVxcbnJhcGlkL1BNUllUU1xcbnJhcGlkaXR5L01cXG5yYXBpZG5lc3MvTVxcbnJhcGllci9TTVxcbnJhcGluZS9NXFxucmFwaXN0L1NNXFxucmFwcGVkXFxucmFwcGVsL1NNXFxucmFwcGVsbGVkXFxucmFwcGVsbGluZ1xcbnJhcHBlci9TTVxcbnJhcHBpbmdcXG5yYXBwb3J0L01TXFxucmFwcG9ydGV1ci9TXFxucmFwcHJvY2hlbWVudC9TTVxcbnJhcHNjYWxsaW9uL01TXFxucmFwdC9ZUFxcbnJhcHRuZXNzL01cXG5yYXB0b3IvU1xcbnJhcHR1cmUvTVNcXG5yYXB0dXJvdXMvWVxcbnJhcmUvWVRHUERSU1xcbnJhcmViaXQvTVNcXG5yYXJlZmFjdGlvbi9NXFxucmFyZWZ5L0dEU1xcbnJhcmVuZXNzL01cXG5yYXJpdHkvU01cXG5yYXNjYWwvU01ZXFxucmFzaC9aVE1SU1lQXFxucmFzaGVyL01cXG5yYXNobmVzcy9NXFxucmFzcC9HTURTXFxucmFzcGJlcnJ5L1NNXFxucmFzcHkvUlRcXG5yYXN0ZXJcXG5yYXQvU01cXG5yYXRhdG91aWxsZS9NXFxucmF0YmFnL1NcXG5yYXRjaGV0L0dNRFNcXG5yYXRlL0pYTVpHTkRSU1xcbnJhdGVkL1VcXG5yYXRlcGF5ZXIvU1xcbnJhdGVyL01cXG5yYXRoZXJcXG5yYXRoc2tlbGxlci9TTVxcbnJhdGlmaWNhdGlvbi9NXFxucmF0aWZpZXIvTVxcbnJhdGlmeS9ORFJTWkdcXG5yYXRpbmcvTVxcbnJhdGlvL01TXFxucmF0aW9jaW5hdGUvR05EU1xcbnJhdGlvY2luYXRpb24vTVxcbnJhdGlvbi9NREdcXG5yYXRpb25hbC9TTVlcXG5yYXRpb25hbGUvTVNcXG5yYXRpb25hbGlzbS9NXFxucmF0aW9uYWxpc3QvU01cXG5yYXRpb25hbGlzdGljXFxucmF0aW9uYWxpdHkvTVxcbnJhdGlvbmFsaXphdGlvbi9NU1xcbnJhdGlvbmFsaXplL0RTR1xcbnJhdGxpa2VcXG5yYXRsaW5lL1NNXFxucmF0dGFuL1NNXFxucmF0dGVkXFxucmF0dGVyL1NNXFxucmF0dGluZ1xcbnJhdHRsZS9EUlNNWkdKXFxucmF0dGxlYnJhaW4vU01EXFxucmF0dGxlci9NXFxucmF0dGxlc25ha2UvU01cXG5yYXR0bGV0cmFwL1NNXFxucmF0dGx5XFxucmF0dHJhcC9TTVxcbnJhdHR5L1JUXFxucmF1Y291cy9ZUFxcbnJhdWNvdXNuZXNzL01cXG5yYXVuY2hpbHlcXG5yYXVuY2hpbmVzcy9NXFxucmF1bmNoeS9UUlBcXG5yYXZhZ2UvRFJTTVpHXFxucmF2YWdlci9NXFxucmF2YWdlcy9NXFxucmF2ZS9KTVpHRFJTXFxucmF2ZWwnc1xcbnJhdmVsL1VEU0dcXG5yYXZlbGluZy9TXFxucmF2ZW4vTURTR1xcbnJhdmVub3VzL1lcXG5yYXZpbmUvU01cXG5yYXZpbmcvTVxcbnJhdmlvbGkvU01cXG5yYXZpc2gvRFJTWkdMXFxucmF2aXNoZXIvTVxcbnJhdmlzaGluZy9ZXFxucmF2aXNobWVudC9NXFxucmF3L1BUTVJcXG5yYXdib25lZFxcbnJhd2hpZGUvTVxcbnJhd25lc3MvTVxcbnJheS9TTVxcbnJheW9uL01cXG5yYXplL0dEU1xcbnJhem9yL01TXFxucmF6b3JiYWNrL01TXFxucmF6ei9HTURTXFxucmF6em1hdGF6ei9NXFxucmNwdFxcbnJkXFxucmUvRFNNWVRHVkpcXG5yZWFjaC9NRFNHQlxcbnJlYWNoYWJsZS9VXFxucmVhY3F1aXJlL0RTR1xcbnJlYWN0L1ZcXG5yZWFjdGFuY2VcXG5yZWFjdGFudC9TTVxcbnJlYWN0aW9uYXJ5L1NNXFxucmVhY3Rpdml0eVxcbnJlYWQvWkdNUkJKU1xcbnJlYWRhYmlsaXR5L1NNXFxucmVhZGVyL01cXG5yZWFkZXJzaGlwL1NNXFxucmVhZGlseVxcbnJlYWRpbmVzcy9NXFxucmVhZGluZy9NXFxucmVhZG1pdHRlZFxcbnJlYWRvdXQvU01cXG5yZWFkeS9EUlNUR1BcXG5yZWFmZm9yZXN0YXRpb25cXG5yZWFsL1RNUllQU1xcbnJlYWxpc20vTVxcbnJlYWxpc3QvU01cXG5yZWFsaXN0aWMvVVxcbnJlYWxpc3RpY2FsbHkvVVxcbnJlYWxpdGllc1xcbnJlYWxpdHkvVU1cXG5yZWFsaXphdGlvbi9NU1xcbnJlYWxpemUvRFNCR1xcbnJlYWxpemVkL1VcXG5yZWFsbS9NU1xcbnJlYWxuZXNzL01cXG5yZWFscG9saXRpay9NXFxucmVhbHR5L01cXG5yZWFtL1pHTURSU1xcbnJlYW1lci9NXFxucmVhcC9aR0RSU1xcbnJlYXBlci9NXFxucmVhci9HTURTXFxucmVhcmd1YXJkL01TXFxucmVhcm1vc3RcXG5yZWFyd2FyZC9TXFxucmVhc29uL1NNRFJaR0JcXG5yZWFzb25hYmxlL1VQXFxucmVhc29uYWJsZW5lc3MvVU1cXG5yZWFzb25hYmx5L1VcXG5yZWFzb25lci9NXFxucmVhc29uaW5nL01cXG5yZWFzc3VyaW5nL1lcXG5yZWJhdGUvTVxcbnJlYmVsL01TXFxucmViZWxsaW9uL01TXFxucmViZWxsaW91cy9ZUFxcbnJlYmVsbGlvdXNuZXNzL01cXG5yZWJpZC9TXFxucmViaWRkaW5nXFxucmViaXJ0aC9NXFxucmVib2lsL1NER1xcbnJlYnVpbGQvU0dcXG5yZWJ1a2UvRFNNR1xcbnJlYnVraW5nL1lcXG5yZWJ1dHRhbC9NU1xcbnJlYydkXFxucmVjL01cXG5yZWNhbGNpdHJhbmNlL01cXG5yZWNhbGNpdHJhbnRcXG5yZWNhbnQvU0RHXFxucmVjYW50YXRpb24vU01cXG5yZWNhcC9NU1xcbnJlY2FwaXRhbGl6YXRpb25cXG5yZWNjZS9TXFxucmVjZFxcbnJlY2VpcHQvU01ER1xcbnJlY2VpdmFibGVzL01cXG5yZWNlaXZlL0RSU1pHQlxcbnJlY2VpdmVyL01cXG5yZWNlaXZlcnNoaXAvTVxcbnJlY2VudC9SWVRQXFxucmVjZW50bmVzcy9NXFxucmVjZXB0YWNsZS9TTVxcbnJlY2VwdGlvbi9NU1xcbnJlY2VwdGlvbmlzdC9TTVxcbnJlY2VwdGl2ZS9QWVxcbnJlY2VwdGl2ZW5lc3MvTVxcbnJlY2VwdGl2aXR5L01cXG5yZWNlcHRvci9TTVxcbnJlY2Vzcy9NRFNHVlxcbnJlY2Vzc2lvbmFsL1NNXFxucmVjZXNzaW9uYXJ5XFxucmVjZXNzaXZlL1NNXFxucmVjaGVyY2hlXFxucmVjaWRpdmlzbS9NXFxucmVjaWRpdmlzdC9TTVxcbnJlY2lwZS9TTVxcbnJlY2lwaWVudC9TTVxcbnJlY2lwcm9jYWwvU01ZXFxucmVjaXByb2NhdGUvR05EU1xcbnJlY2lwcm9jYXRpb24vTVxcbnJlY2lwcm9jaXR5L01cXG5yZWNpdGFsL1NNXFxucmVjaXRhbGlzdC9NU1xcbnJlY2l0YXRpdmUvTVNcXG5yZWNpdGVyL1NNXFxucmVja2xlc3MvWVBcXG5yZWNrbGVzc25lc3MvTVxcbnJlY2tvbi9TSkRHXFxucmVja29uaW5nL01cXG5yZWNsYW1hdGlvbi9NXFxucmVjbGluZS9EUlNaR1xcbnJlY2xpbmVyL01cXG5yZWNsdXNlL1NNVlxcbnJlY29nbml6YWJsZS9VXFxucmVjb2duaXphYmx5L1VcXG5yZWNvZ25pemUvRFJTR0JcXG5yZWNvZ25pemVkL1VcXG5yZWNvbWJpbmF0aW9uXFxucmVjb21wZW5zZS9EU01HXFxucmVjb21waWxhdGlvblxcbnJlY29tcGlsZS9HRFxcbnJlY29uL1NcXG5yZWNvbmNpbGUvR0RTQlxcbnJlY29uY2lsaWF0aW9uL1NcXG5yZWNvbmRpdGVcXG5yZWNvbmZpZ3VyYXRpb25cXG5yZWNvbmZpZ3VyZS9EXFxucmVjb25uYWlzc2FuY2UvTVNcXG5yZWNvbm5vaXRlci9ER1NcXG5yZWNvbnN0cnVjdC9WXFxucmVjb25zdHJ1Y3RlZC9VXFxucmVjb3JkZWQvVVxcbnJlY29yZGVyL01TXFxucmVjb3JkaW5nL01TXFxucmVjb3VwL0RHXFxucmVjb3Vyc2UvTVxcbnJlY292ZXJhYmxlL1VcXG5yZWNvdmVyeS9TTVxcbnJlY3JlYW50L01TXFxucmVjcmVhdGlvbmFsXFxucmVjcmltaW5hdGUvRFNHTlhcXG5yZWNyaW1pbmF0aW9uL01cXG5yZWNyaW1pbmF0b3J5XFxucmVjcnVkZXNjZS9HRFNcXG5yZWNydWRlc2NlbmNlL01cXG5yZWNydWRlc2NlbnRcXG5yZWNydWl0L0xTTURSWkdcXG5yZWNydWl0ZXIvTVxcbnJlY3J1aXRtZW50L01cXG5yZWN0YWwvWVxcbnJlY3RhbmdsZS9NU1xcbnJlY3Rhbmd1bGFyXFxucmVjdGlmaWFibGVcXG5yZWN0aWZpY2F0aW9uL01cXG5yZWN0aWZpZXIvTVxcbnJlY3RpZnkvWE5EUlNaR1xcbnJlY3RpbGluZWFyXFxucmVjdGl0dWRlL01cXG5yZWN0by9NU1xcbnJlY3Rvci9TTVxcbnJlY3RvcnkvU01cXG5yZWN0dW0vU01cXG5yZWN1bWJlbnRcXG5yZWN1cGVyYXRlL0dOVkRTXFxucmVjdXBlcmF0aW9uL01cXG5yZWN1ci9TXFxucmVjdXJyZWRcXG5yZWN1cnJlbmNlL1NNXFxucmVjdXJyaW5nXFxucmVjdXJzaW9uL1NcXG5yZWN1c2UvRFNHXFxucmVjeWNsYWJsZS9TTVxcbnJlY3ljbGluZy9NXFxucmVkL1BTTVxcbnJlZGFjdC9TREdcXG5yZWRhY3Rpb24vTVxcbnJlZGFjdG9yL1NNXFxucmVkYmlyZC9TTVxcbnJlZGJyZWFzdC9NU1xcbnJlZGJyaWNrXFxucmVkY2FwL1NNXFxucmVkY29hdC9TTVxcbnJlZGN1cnJhbnQvU1xcbnJlZGRlbi9TREdcXG5yZWRkZXJcXG5yZWRkZXN0XFxucmVkZGlzaFxcbnJlZGVlbS9SWkJcXG5yZWRlZW1lci9NXFxucmVkZW1wdGlvbi9NXFxucmVkZW1wdGl2ZVxcbnJlZGhlYWQvU01EXFxucmVkaXJlY3Rpb25cXG5yZWRpc3RyaWN0L0dEXFxucmVkaXZpZGUvR0RTXFxucmVkbGluaW5nL01cXG5yZWRuZWNrL1NNXFxucmVkbmVzcy9NXFxucmVkby9HXFxucmVkb2xlbmNlL01cXG5yZWRvbGVudFxcbnJlZG91YnQvU0JNXFxucmVkb3VidGFibHlcXG5yZWRvdW5kL1NER1xcbnJlZHJhdy9TR1xcbnJlZHNraW4vU01cXG5yZWR1Y2UvRFJTWkdcXG5yZWR1Y2VyL01cXG5yZWR1Y2libGVcXG5yZWR1Y3Rhc2UvTVxcbnJlZHVjdGlvbi9TTVxcbnJlZHVjdGlvbmlzdFxcbnJlZHVjdGl2ZVxcbnJlZHVuZGFuY3kvU01cXG5yZWR1bmRhbnQvWVxcbnJlZHdvb2QvU01cXG5yZWR5ZS9EU1xcbnJlZWRpbmVzcy9NXFxucmVlZHkvUlRQXFxucmVlZi9aR01EUlNcXG5yZWVmZXIvTVxcbnJlZWsvR01EU1xcbnJlZWwnc1xcbnJlZWwvVUdEU1xcbnJlZXZlL0dcXG5yZWV4cG9ydC9TREdcXG5yZWYvU1pNXFxucmVmYXNoaW9uL0RHU1xcbnJlZmVjdGlvbi9NXFxucmVmZWN0b3J5L1NNXFxucmVmZXIvQlxcbnJlZmVyZWUvRFNNXFxucmVmZXJlZWluZ1xcbnJlZmVyZW5jZS9NR0RTXFxucmVmZXJlbmR1bS9NU1xcbnJlZmVyZW50L1NNXFxucmVmZXJlbnRpYWxcXG5yZWZlcnJhbC9TTVxcbnJlZmVycmVkXFxucmVmZXJyZXIvU01cXG5yZWZlcnJpbmdcXG5yZWZmZWRcXG5yZWZmaW5nXFxucmVmaWxsL0JNXFxucmVmaW5lZC9VXFxucmVmaW5lbWVudC9TTVxcbnJlZmluZXIvU01cXG5yZWZpbmVyeS9TXFxucmVmaXR0aW5nXFxucmVmbGF0ZS9YRFNHTlxcbnJlZmxhdGlvbmFyeVxcbnJlZmxlY3QvR1ZTRFxcbnJlZmxlY3Rpb24vTVNcXG5yZWZsZWN0aXZlL1lcXG5yZWZsZWN0aXZpdHlcXG5yZWZsZWN0b3IvTVNcXG5yZWZsZXhpdmUvU01ZXFxucmVmbGV4aXZpdHlcXG5yZWZsZXhvbG9neVxcbnJlZm9yZ2UvRFNHXFxucmVmb3JtL01aXFxucmVmb3JtYXQvVlxcbnJlZm9ybWF0b3J5L1NNXFxucmVmb3JtYXR0aW5nXFxucmVmb3JtZWQvVVxcbnJlZm9ybWlzdC9TXFxucmVmb3J0aWZ5L0dEU1xcbnJlZnJhY3QvU0dWRFxcbnJlZnJhY3Rpb24vTVxcbnJlZnJhY3RvcnkvU01cXG5yZWZyYWluL1NHTURcXG5yZWZyZXNoL1pHTERSU1xcbnJlZnJlc2hlci9NXFxucmVmcmVzaGluZy9ZXFxucmVmcmVzaG1lbnQvU01cXG5yZWZyZXNobWVudHMvTVxcbnJlZnJpZ2VyYW50L1NNXFxucmVmcmlnZXJhdGUvRFNHTlxcbnJlZnJpZ2VyYXRpb24vTVxcbnJlZnJpZ2VyYXRvci9NU1xcbnJlZnVnZS9TTVxcbnJlZnVnZWUvU01cXG5yZWZ1bGdlbmNlL01cXG5yZWZ1bGdlbnRcXG5yZWZ1bmQvQlxcbnJlZnVyYmlzaG1lbnQvTVNcXG5yZWZ1c2FsL01TXFxucmVmdXRhdGlvbi9NU1xcbnJlZnV0ZS9CRFJTWkdcXG5yZWZ1dGVyL01cXG5yZWdcXG5yZWdhbC9EWUdcXG5yZWdhbGVtZW50L01cXG5yZWdhbGlhL01cXG5yZWdhcmQvRVNNREdcXG5yZWdhcmRsZXNzXFxucmVnYXJkcy9NXFxucmVnYXRoZXIvREdTXFxucmVnYXR0YS9TTVxcbnJlZ2VuY3kvU01cXG5yZWdlbmVyYWN5L01cXG5yZWdlbmVyYXRlL1ZcXG5yZWdleC9NXFxucmVnZXhwL1NcXG5yZWdnYWUvTVxcbnJlZ2ljaWRhbFxcbnJlZ2ljaWRlL01TXFxucmVnaW1lL1NNXFxucmVnaW1lbi9TTVxcbnJlZ2ltZW50L01ER1NcXG5yZWdpbWVudGFsXFxucmVnaW1lbnRhdGlvbi9NXFxucmVnaW9uL1NNXFxucmVnaW9uYWwvWVxcbnJlZ2lvbmFsaXNtL01TXFxucmVnaXN0ZXIvR01EU1xcbnJlZ2lzdGVyZWQvVVxcbnJlZ2lzdHJhbnQvTVNcXG5yZWdpc3RyYXIvTVNcXG5yZWdpc3RyYXRpb24vU01cXG5yZWdpc3RyeS9TTVxcbnJlZ25hbnRcXG5yZWdyZXNzL01EU0dWXFxucmVncmVzc2lvbi9NU1xcbnJlZ3JldC9TTVxcbnJlZ3JldGZ1bC9ZXFxucmVncmV0dGFibGVcXG5yZWdyZXR0YWJseVxcbnJlZ3JldHRlZFxcbnJlZ3JldHRpbmdcXG5yZWdyaW5kL0dTXFxucmVncm91bmRcXG5yZWdyb3VwL0RHU1xcbnJlZ3VsYXIvTVlTXFxucmVndWxhcml0eS9TTVxcbnJlZ3VsYXJpemF0aW9uL01cXG5yZWd1bGFyaXplL0RTR1xcbnJlZ3VsYXRlL0NEU0dOVlxcbnJlZ3VsYXRlZC9VXFxucmVndWxhdGlvbi9DTVxcbnJlZ3VsYXRpb25zXFxucmVndWxhdG9yL01TXFxucmVndWxhdG9yeVxcbnJlZ3VyZ2l0YXRlL0RTR05cXG5yZWd1cmdpdGF0aW9uL01cXG5yZWhhYi9NU1xcbnJlaGFiYmVkXFxucmVoYWJiaW5nXFxucmVoYWJpbGl0YXRlL0dOVkRTXFxucmVoYWJpbGl0YXRpb24vTVxcbnJlaGFuZy9TREdcXG5yZWhlYXJzL0dEXFxucmVoZWFyc2FsL01TXFxucmVoZWFyc2VkL1VcXG5yZWhpXFxucmVodW5nXFxucmVpZnkvTkRTR1xcbnJlaWduL01EU0dcXG5yZWltYnVyc2UvQkRTR0xcXG5yZWltYnVyc2VtZW50L01TXFxucmVpbi9HRFxcbnJlaW5kZWVyL01cXG5yZWluZm9yY2UvTEdEU1xcbnJlaW5mb3JjZW1lbnQvU01cXG5yZWluaXRpYWxpemVcXG5yZWluc3RhbGwvREdcXG5yZWluc3RhdGVtZW50L01cXG5yZWluc3VyYW5jZVxcbnJlaXRlcmF0ZS9WXFxucmVqZWN0L0dTTURcXG5yZWplY3Rpb24vU01cXG5yZWpvaWNlL0pHRFNcXG5yZWpvaWNpbmcvTVxcbnJlam9pbmRlci9TTVxcbnJlanV2ZW5hdGUvRFNHTlxcbnJlanV2ZW5hdGlvbi9NXFxucmVsXFxucmVsYXRlL0RSU0JYWkdOVlxcbnJlbGF0ZWRuZXNzL01cXG5yZWxhdGVyL01cXG5yZWxhdGlvbi9NXFxucmVsYXRpb25hbFxcbnJlbGF0aW9uc2hpcC9NU1xcbnJlbGF0aXZlL01ZU1xcbnJlbGF0aXZpc20vTVxcbnJlbGF0aXZpc3QvU1xcbnJlbGF0aXZpc3RpY1xcbnJlbGF0aXZpdHkvTVxcbnJlbGF4L0RSU1pHXFxucmVsYXhhbnQvTVNcXG5yZWxheGF0aW9uL1NNXFxucmVsYXhlci9NXFxucmVsYXkvRFxcbnJlbGVhc2UvQlxcbnJlbGVhc2VkL1VcXG5yZWxlZ2F0ZS9HTkRTXFxucmVsZW50L1NHRFxcbnJlbGVudGxlc3MvUFlcXG5yZWxlbnRsZXNzbmVzcy9NXFxucmVsZXZhbmNlL01cXG5yZWxldmFuY3kvTVxcbnJlbGV2YW50L1lcXG5yZWxpYWJpbGl0eS9VTVxcbnJlbGlhYmxlL1VcXG5yZWxpYWJseS9VXFxucmVsaWFuY2UvTVxcbnJlbGlhbnRcXG5yZWxpYy9NU1xcbnJlbGllZi9TTVxcbnJlbGlldmUvWkdEUlNcXG5yZWxpZXZlci9NXFxucmVsaWdpb24vU01cXG5yZWxpZ2lvc2l0eVxcbnJlbGlnaW91cy9NWVBcXG5yZWxpZ2lvdXNuZXNzL01cXG5yZWxpbmUvRFNHXFxucmVsaW5xdWlzaC9MRFNHXFxucmVsaW5xdWlzaG1lbnQvTVxcbnJlbGlxdWFyeS9TTVxcbnJlbGlzaC9HTURTXFxucmVsaXN0L1NHRFxcbnJlbG9jYXRlL0JcXG5yZWx1Y3RhbmNlL01cXG5yZWx1Y3RhbnQvWVxcbnJlbHkvR0RTXFxucmVtL01cXG5yZW1haW4vU0dEXFxucmVtYWluZGVyL0dNRFNcXG5yZW1hbmQvU0dEXFxucmVtYXBwaW5nXFxucmVtYXJrL0JcXG5yZW1hcmthYmxlbmVzcy9NXFxucmVtYXJrYWJseVxcbnJlbWFya2VkL1VcXG5yZW1lZGlhYmxlXFxucmVtZWR5L0dEU01cXG5yZW1lbWJlci9ER1xcbnJlbWVtYmVyZWQvVVxcbnJlbWVtYnJhbmNlL01TXFxucmVtaW5kZXIvTVxcbnJlbWluaXNjZS9HRFNcXG5yZW1pbmlzY2VuY2UvTVNcXG5yZW1pbmlzY2VudC9ZXFxucmVtaXNzL1BZXFxucmVtaXNzbmVzcy9NXFxucmVtaXQvU1xcbnJlbWl0dGFuY2UvU01cXG5yZW1pdHRlZFxcbnJlbWl0dGluZy9VXFxucmVtaXgvRFNHXFxucmVtbmFudC9NU1xcbnJlbW9kZWwvR0RTXFxucmVtb2xkL1NHRFxcbnJlbW9uc3RyYW50L1NNXFxucmVtb25zdHJhdGUvRFNHXFxucmVtb3JzZS9NXFxucmVtb3JzZWZ1bC9ZXFxucmVtb3JzZWxlc3MvUFlcXG5yZW1vcnNlbGVzc25lc3MvTVxcbnJlbW90ZS9SU01ZVFBcXG5yZW1vdGVuZXNzL01cXG5yZW1vdmFsL1NNXFxucmVtdW5lcmF0ZS9HTlZYRFNcXG5yZW11bmVyYXRpb24vTVxcbnJlbmFpc3NhbmNlL01TXFxucmVuYWxcXG5yZW5hc2NlbmNlL1NcXG5yZW5kL0dTXFxucmVuZGVyL1NHTURKXFxucmVuZGVyaW5nL01cXG5yZW5kZXp2b3VzL0dNRFNcXG5yZW5kaXRpb24vTVNcXG5yZW5lZ2FkZS9EU01HXFxucmVuZWdlL0RSU1pHXFxucmVuZWdlci9NXFxucmVuZXcvRFNCR1xcbnJlbmV3YWwvTVNcXG5yZW5uZXQvTVxcbnJlbm5pbi9NXFxucmVub3VuY2UvTERTR1xcbnJlbm91bmNlbWVudC9NXFxucmVub3ZhdGUvRFNYR05cXG5yZW5vdmF0aW9uL01cXG5yZW5vdmF0b3IvTVNcXG5yZW5vd24vTURcXG5yZW50L1pHTURSU1xcbnJlbnRhbC9TTVxcbnJlbnRlci9NXFxucmVudW5jaWF0aW9uL1NNXFxucmVvcGVuL1NER1xcbnJlb3JnL01EU0dcXG5yZXAvU01cXG5yZXBhaW50L0dEU1xcbnJlcGFpci9CWlJcXG5yZXBhaXJlci9NXFxucmVwYWlybWFuL01cXG5yZXBhaXJtZW5cXG5yZXBhcmFibGVcXG5yZXBhcmF0aW9uL01TXFxucmVwYXJhdGlvbnMvTVxcbnJlcGFydGVlL01cXG5yZXBhdHJpYXRlL1hEU01HTlxcbnJlcGF0cmlhdGlvbi9NXFxucmVwZWF0L1NNRFJaR0JcXG5yZXBlYXRhYmlsaXR5XFxucmVwZWF0YWJsZS9VXFxucmVwZWF0YWJseVxcbnJlcGVhdGVkL1lcXG5yZXBlYXRlci9NXFxucmVwZWF0aW5nL01cXG5yZXBlbC9TXFxucmVwZWxsZWRcXG5yZXBlbGxlbnQvU01cXG5yZXBlbGxpbmdcXG5yZXBlbnQvU0RHXFxucmVwZW50YW5jZS9NXFxucmVwZW50YW50L1lcXG5yZXBlcmN1c3Npb24vU1xcbnJlcGVydG9pcmUvTVNcXG5yZXBlcnRvcnkvU01cXG5yZXBldGl0aW9uL01TXFxucmVwZXRpdGlvdXMvWVBcXG5yZXBldGl0aW91c25lc3MvTVxcbnJlcGV0aXRpdmUvWVBcXG5yZXBldGl0aXZlbmVzcy9NXFxucmVwaG90b2dyYXBoL0RHXFxucmVwbGFjZWFibGVcXG5yZXBsYW50L0dTRFxcbnJlcGxlbmlzaC9MR0RTXFxucmVwbGVuaXNobWVudC9NXFxucmVwbGV0ZS9QRFNHTlxcbnJlcGxldGVuZXNzL01cXG5yZXBsZXRpb24vTVxcbnJlcGxpY2EvU01cXG5yZXBsaWNhdGUvRFNHTlhcXG5yZXBsaWNhdGlvbi9NXFxucmVwbGljYXRvci9TXFxucmVwb3J0YWdlL01cXG5yZXBvcnRlZC9ZXFxucmVwb3J0b3JpYWxcXG5yZXBvc2VmdWxcXG5yZXBvc2l0aW9uXFxucmVwb3NpdG9yeS9TTVxcbnJlcHJlaGVuZC9ER1NcXG5yZXByZWhlbnNpYmlsaXR5L01cXG5yZXByZWhlbnNpYmxlXFxucmVwcmVoZW5zaWJseVxcbnJlcHJlaGVuc2lvbi9NXFxucmVwcmVzZW50L0dEU1xcbnJlcHJlc2VudGF0aW9uYWxcXG5yZXByZXNlbnRhdGl2ZS9NU1xcbnJlcHJlc2VudGVkL1VcXG5yZXByZXNzaW9uL01TXFxucmVwcmVzc2l2ZS9QWVxcbnJlcHJpZXZlL0RTTUdcXG5yZXByaW1hbmQvR1NNRFxcbnJlcHJpc2FsL1NNXFxucmVwcmlzZS9TTUdcXG5yZXByb2FjaC9HTURTQlxcbnJlcHJvYWNoZnVsL1lcXG5yZXByb2JhdGUvTVNcXG5yZXByb2R1Y3RpdmVcXG5yZXByb2dyYW1taW5nXFxucmVwcm92aW5nL1lcXG5yZXB0aWxlL1NNXFxucmVwdGlsaWFuL01TXFxucmVwdWJsaWMvU1xcbnJlcHVibGljYW5pc20vTVxcbnJlcHVkaWF0ZS9YR05EU1xcbnJlcHVkaWF0aW9uL01cXG5yZXB1ZGlhdG9yL01TXFxucmVwdWduYW5jZS9NXFxucmVwdWduYW50XFxucmVwdWxzaW9uL01cXG5yZXB1bHNpdmUvWVBcXG5yZXB1bHNpdmVuZXNzL01cXG5yZXB1cmNoYXNlL0dEU1xcbnJlcHV0YWJpbGl0eS9NXFxucmVwdXRhYmx5L0VcXG5yZXB1dGF0aW9uL01TXFxucmVwdXRlL0RTTUdCXFxucmVwdXRlZC9ZXFxucmVxdWVzdC9HRFJcXG5yZXF1aWVtL1NNXFxucmVxdWlyZS9MREdcXG5yZXF1aXJlbWVudC9NU1xcbnJlcXVpc2l0ZS9YTU5TXFxucmVxdWlzaXRpb24vR01EXFxucmVxdWl0YWwvTVxcbnJlcXVpdGUvRFJTWkdcXG5yZXF1aXRlZC9VXFxucmVxdWl0ZXIvTVxcbnJlcmVhZC9TR1xcbnJlcmVjb3JkL0dEU1xcbnJlcnVubmluZ1xcbnJlc2FtcGxlL0dEU1xcbnJlc2F0XFxucmVzY2luZC9TREdcXG5yZXNjaXNzaW9uL01cXG5yZXNjdWUvRFJTTVpHXFxucmVzY3Vlci9NXFxucmVzZWFsL0JcXG5yZXNlbWJsZS9EU0dcXG5yZXNlbmRcXG5yZXNlbnQvTFNER1xcbnJlc2VudGZ1bC9ZUFxcbnJlc2VudGZ1bG5lc3MvTVxcbnJlc2VudG1lbnQvTVNcXG5yZXNlcnBpbmUvTVxcbnJlc2VydmF0aW9uL01TXFxucmVzZXJ2ZWQvVVlcXG5yZXNlcnZlZG5lc3MvTVxcbnJlc2VydmlzdC9TTVxcbnJlc2Vydm9pci9TTVxcbnJlc2V0dGluZ1xcbnJlc2hpcHBpbmdcXG5yZXNpZGVuY2UvU01cXG5yZXNpZGVuY3kvU01cXG5yZXNpZGVudC9NU1xcbnJlc2lkZW50aWFsXFxucmVzaWR1YVxcbnJlc2lkdWFsL01TXFxucmVzaWR1ZS9TTVxcbnJlc2lkdXVtL01cXG5yZXNpZ25hdGlvbi9TTVxcbnJlc2lnbmVkL1lcXG5yZXNpbGllbmNlL01cXG5yZXNpbGllbmN5L01cXG5yZXNpbGllbnQvWVxcbnJlc2lub3VzXFxucmVzaXN0L1NNRFJaR1xcbnJlc2lzdGFuY2UvU01cXG5yZXNpc3RhbnQvVVxcbnJlc2lzdGlibGVcXG5yZXNpc3Rpdml0eVxcbnJlc2lzdGxlc3NcXG5yZXNpc3Rvci9NU1xcbnJlc2l0L1NcXG5yZXNpdHRpbmdcXG5yZXNvbGRcXG5yZXNvbGUvRFNHXFxucmVzb2x1dGUvUFlcXG5yZXNvbHV0ZW5lc3MvTVxcbnJlc29sdmUvUkJNXFxucmVzb2x2ZWQvVVxcbnJlc29uYW5jZS9TTVxcbnJlc29uYW50L1lcXG5yZXNvbmF0ZS9HRFNcXG5yZXNvbmF0b3IvU01cXG5yZXNvcnB0aW9uL01cXG5yZXNvdW5kL1NHRFxcbnJlc291bmRpbmcvWVxcbnJlc291cmNlZnVsL1lQXFxucmVzb3VyY2VmdWxuZXNzL01cXG5yZXNwXFxucmVzcGVjdC9FU0dWTURcXG5yZXNwZWN0YWJpbGl0eS9NXFxucmVzcGVjdGFibGVcXG5yZXNwZWN0YWJseVxcbnJlc3BlY3RmdWwvRVlcXG5yZXNwZWN0ZnVsbmVzcy9NXFxucmVzcGVjdGl2ZS9ZXFxucmVzcGVsbC9TR0RcXG5yZXNwaXJhdGlvbi9NXFxucmVzcGlyYXRvci9TTVxcbnJlc3BpcmF0b3J5XFxucmVzcGlyZS9ER1xcbnJlc3BsZW5kZW5jZS9NXFxucmVzcGxlbmRlbnQvWVxcbnJlc3BvbmQvU0dEXFxucmVzcG9uZGVudC9TTVxcbnJlc3BvbnNlL01TXFxucmVzcG9uc2liaWxpdHkvU01cXG5yZXNwb25zaWJsZVxcbnJlc3BvbnNpYmx5XFxucmVzcG9uc2l2ZS9VWVBcXG5yZXNwb25zaXZlbmVzcy9VTVxcbnJlc3QvR1ZNRFNcXG5yZXN0YXRlL0dEU1xcbnJlc3RhdXJhbnQvU01cXG5yZXN0YXVyYXRldXIvTVNcXG5yZXN0ZnVsL1lQXFxucmVzdGZ1bGxlclxcbnJlc3RmdWxsZXN0XFxucmVzdGZ1bG5lc3MvTVxcbnJlc3RpdHV0aW9uL01cXG5yZXN0aXZlL1lQXFxucmVzdGl2ZW5lc3MvTVxcbnJlc3RsZXNzL1BZXFxucmVzdGxlc3NuZXNzL01cXG5yZXN0b3JhdGlvbi9TTVxcbnJlc3RvcmF0aXZlL1NNXFxucmVzdG9yZXIvU01cXG5yZXN0cmFpbmVkL1VcXG5yZXN0cmFpbnQvTVNcXG5yZXN0cmljdC9TREdWXFxucmVzdHJpY3RlZC9VXFxucmVzdHJpY3Rpb24vTVNcXG5yZXN0cmljdGl2ZS9ZUFxcbnJlc3RyaWN0aXZlbmVzcy9NXFxucmVzdHJpbmcvU0dcXG5yZXN0cm9vbS9TTVxcbnJlc3RydWN0dXJpbmcvU01cXG5yZXN1bHQvR1NNRFxcbnJlc3VsdGFudC9TTVxcbnJlc3VtZS9EU01HXFxucmVzdW1wdGlvbi9NU1xcbnJlc3VwcGx5L0RTR1xcbnJlc3VyZ2VuY2UvTVNcXG5yZXN1cmdlbnRcXG5yZXN1cnJlY3QvR1NEXFxucmVzdXJyZWN0aW9uL01TXFxucmVzdXNjaXRhdGUvR05EU1xcbnJlc3VzY2l0YXRpb24vTVxcbnJlc3VzY2l0YXRvci9TTVxcbnJldGFpbGVyL01TXFxucmV0YWluL1NEUlpHXFxucmV0YWluZXIvTVxcbnJldGFrZS9HXFxucmV0YWxpYXRlL0RTR05WWFxcbnJldGFsaWF0aW9uL01cXG5yZXRhbGlhdG9yeVxcbnJldGFyZC9TTURSWkdcXG5yZXRhcmRhbnQvU01cXG5yZXRhcmRhdGlvbi9NXFxucmV0YXJkZXIvTVxcbnJldGNoL0RTR1xcbnJldGVhY2gvR1NcXG5yZXRlbnRpb24vTVxcbnJldGVudGl2ZS9ZUFxcbnJldGVudGl2ZW5lc3MvTVxcbnJldGhpbmsvU0dNXFxucmV0aG91Z2h0XFxucmV0aWNlbmNlL01cXG5yZXRpY2VudC9ZXFxucmV0aWN1bGF0ZWRcXG5yZXRpY3VsYXRpb24vTVNcXG5yZXRpY3VsdW1cXG5yZXRpbmEvU01cXG5yZXRpbmFsXFxucmV0aW5vYmxhc3RvbWFcXG5yZXRpbnVlL1NNXFxucmV0aXJlZS9TTVxcbnJldGlyZW1lbnQvTVNcXG5yZXRvcnQvR01EXFxucmV0cmFjZS9HRFNcXG5yZXRyYWN0L0RCR1xcbnJldHJhY3RpbGVcXG5yZXRyYWN0aW9uL1NcXG5yZXRyYWluL0RHU1xcbnJldHJlYWQvRFxcbnJldHJlbmNobWVudC9NU1xcbnJldHJpYnV0aW9uL01TXFxucmV0cmlidXRpdmVcXG5yZXRyaWV2YWwvU01cXG5yZXRyaWV2ZS9EUlNNWkdCXFxucmV0cmlldmVyL01cXG5yZXRyby9NU1xcbnJldHJvYWN0aXZlL1lcXG5yZXRyb2ZpcmUvR0RTXFxucmV0cm9maXQvU01cXG5yZXRyb2ZpdHRlZFxcbnJldHJvZml0dGluZ1xcbnJldHJvZ3JhZGUvRFNHXFxucmV0cm9ncmVzcy9HVkRTXFxucmV0cm9ncmVzc2lvbi9NXFxucmV0cm9yb2NrZXQvTVNcXG5yZXRyb3NwZWN0L01EU0dWXFxucmV0cm9zcGVjdGlvbi9NXFxucmV0cm9zcGVjdGl2ZS9NWVNcXG5yZXRyb3ZpcnVzL01TXFxucmV0c2luYS9NXFxucmV0dXJuYWJsZS9TTVxcbnJldHVybmVlL1NNXFxucmV2L1pWTVxcbnJldmFtcGluZy9NXFxucmV2ZWFsL0dKU0RcXG5yZXZlYWxlZC9VXFxucmV2ZWFsaW5nL1lcXG5yZXZlaWxsZS9NXFxucmV2ZWwvSk1EUlNaR1xcbnJldmVsYXRpb24vU01cXG5yZXZlbGF0b3J5XFxucmV2ZWxlci9NXFxucmV2ZWxyeS9TTVxcbnJldmVuZ2UvTUdEU1xcbnJldmVudWVyL1NNXFxucmV2ZXJiXFxucmV2ZXJiZXJhdGUvRFNHTlhcXG5yZXZlcmJlcmF0aW9uL01cXG5yZXZlcmUvRFNHXFxucmV2ZXJlbmNlL0RTTUdcXG5yZXZlcmVuZC9TTVxcbnJldmVyZW50L1lcXG5yZXZlcmVudGlhbC9ZXFxucmV2ZXJpZS9NU1xcbnJldmVycy9NXFxucmV2ZXJzYWwvU01cXG5yZXZlcnNlL1lcXG5yZXZlcnNpYmlsaXR5XFxucmV2ZXJzaWJsZVxcbnJldmVyc2libHlcXG5yZXZlcnQvR1NEXFxucmV2ZXJ0aWJsZVxcbnJldmV0bWVudC9TTVxcbnJldmlsZS9EUlNMWkdcXG5yZXZpbGVtZW50L01cXG5yZXZpbGVyL01cXG5yZXZpc2VyL01TXFxucmV2aXNpb24vU01cXG5yZXZpc2lvbmlzbS9NXFxucmV2aXNpb25pc3QvU01cXG5yZXZpdmFsL01TXFxucmV2aXZhbGlzbS9NXFxucmV2aXZhbGlzdC9TTVxcbnJldml2ZS9EU0dcXG5yZXZpdmlmaWNhdGlvbi9NXFxucmV2b2NhYmxlXFxucmV2b2tlL0RTR1xcbnJldm9sdC9HRFxcbnJldm9sdGluZy9ZXFxucmV2b2x1dGlvbi9TTVxcbnJldm9sdXRpb25hcnkvU01cXG5yZXZvbHV0aW9uaXN0L1NNXFxucmV2b2x1dGlvbml6ZS9EU0dcXG5yZXZvbHZlL0JaR0RSU1xcbnJldm9sdmVyL01cXG5yZXZ1ZS9NU1xcbnJldnVsc2lvbi9NXFxucmV2dmVkXFxucmV2dmluZ1xcbnJld2FyZGVkL1VcXG5yZXdhcmRpbmcvVVxcbnJld2FybS9HU0RcXG5yZXdhc2gvR0RTXFxucmV3ZWF2ZS9HU1xcbnJld2VkZGluZ1xcbnJld2luZC9NQlxcbnJld291bmRcXG5yZXdyaXRlL01HU1xcbnJoYXBzb2RpY1xcbnJoYXBzb2RpY2FsXFxucmhhcHNvZGl6ZS9HRFNcXG5yaGFwc29keS9TTVxcbnJoZWEvTVNcXG5yaGVuaXVtL01cXG5yaGVvc3RhdC9TTVxcbnJoZXN1cy9NU1xcbnJoZXRvcmljL01cXG5yaGV0b3JpY2FsL1lcXG5yaGV0b3JpY2lhbi9TTVxcbnJoZXVtL01cXG5yaGV1bWF0aWMvTVNcXG5yaGV1bWF0aWNhbGx5XFxucmhldW1hdGlzbS9NXFxucmhldW1hdG9pZFxcbnJoZXVteVxcbnJoaW5lc3RvbmUvU01cXG5yaGluaXRpcy9NXFxucmhpbm8vTVNcXG5yaGlub2Nlcm9zL01TXFxucmhpbm9wbGFzdHlcXG5yaGlub3ZpcnVzL01TXFxucmhpem9tZS9NU1xcbnJoby9TTVxcbnJob2RpdW0vTVxcbnJob2RvZGVuZHJvbi9TTVxcbnJob21ib2lkL1NNXFxucmhvbWJvaWRhbFxcbnJob21idXMvTVNcXG5yaHViYXJiL01TXFxucmh5bWUvTVpHRFJTXFxucmh5bWVyL01cXG5yaHltZXN0ZXIvTVNcXG5yaHl0aG0vU01cXG5yaHl0aG1pY1xcbnJoeXRobWljYWwvWVxcbnJpYWwvTVNcXG5yaWIvU01cXG5yaWJhbGRcXG5yaWJhbGRyeS9NXFxucmliYmVkXFxucmliYmVyL1NNXFxucmliYmluZ1xcbnJpYmJvbi9TTVxcbnJpYm9mbGF2aW4vTVxcbnJpY2UvTVpHRFJTXFxucmljZXIvTVxcbnJpY2gvVE1SU1lQXFxucmljaG5lc3MvTVxcbnJpY2svR01EU1xcbnJpY2tldHMvTVxcbnJpY2tldHkvUlRcXG5yaWNrcmFjay9NXFxucmlja3NoYXcvTVNcXG5yaWNvY2hldC9HTURTXFxucmljb3R0YS9NXFxucmlkL1NcXG5yaWRkYW5jZS9NXFxucmlkZGVuXFxucmlkZGluZ1xcbnJpZGRsZS9EU01HXFxucmlkZS9NWkdSU1xcbnJpZGVyL01cXG5yaWRlcmxlc3NcXG5yaWRlcnNoaXAvTVxcbnJpZGdlL01HRFNcXG5yaWRnZXBvbGUvU01cXG5yaWRneVxcbnJpZGljdWxlL01HRFNcXG5yaWRpY3Vsb3VzL1lQXFxucmlkaWN1bG91c25lc3MvTVxcbnJpZGluZy9NXFxucmlmZS9UUlxcbnJpZmYvR01EU1xcbnJpZmZsZS9EU01HXFxucmlmZnJhZmYvTVxcbnJpZmxlL01aR0RSU1xcbnJpZmxlbWFuL01cXG5yaWZsZW1lblxcbnJpZmxlci9NXFxucmlmbGluZy9NXFxucmlmdC9HTURTXFxucmlnL1NNXFxucmlnYXRvbmkvTVxcbnJpZ2dlZFxcbnJpZ2dlci9TTVxcbnJpZ2dpbmcvTVxcbnJpZ2h0L01EUllTUFRHXFxucmlnaHRlb3VzL1VQXFxucmlnaHRlb3VzbHlcXG5yaWdodGVvdXNuZXNzL1VNXFxucmlnaHRmdWwvUFlcXG5yaWdodGZ1bG5lc3MvTVxcbnJpZ2h0aXNtL01cXG5yaWdodGlzdC9TTVxcbnJpZ2h0bW9zdFxcbnJpZ2h0bmVzcy9NXFxucmlnaHRvXFxucmlnaHRzaXplL0RTR1xcbnJpZ2h0d2FyZC9TXFxucmlnaWQvWVBcXG5yaWdpZGl0eS9NXFxucmlnaWRuZXNzL01cXG5yaWdtYXJvbGUvTVNcXG5yaWdvci9NU1xcbnJpZ29yb3VzL1lQXFxucmlnb3JvdXNuZXNzL01cXG5yaWxlL0dEU1xcbnJpbGwvTVNcXG5yaW0vU0dNRFxcbnJpbWUvTVNcXG5yaW1sZXNzXFxucmltbWVkXFxucmltbWluZ1xcbnJpbmQvTVNcXG5yaW5nL1pHTURSSlxcbnJpbmdlci9NXFxucmluZ2dpdC9NU1xcbnJpbmdsZWFkZXIvTVNcXG5yaW5nbGV0L01TXFxucmluZ2xpa2VcXG5yaW5nbWFzdGVyL01TXFxucmluZ3NpZGUvTVxcbnJpbmd0b25lL1NNXFxucmluZ3dvcm0vTVxcbnJpbmsvTVNcXG5yaW5zZS9NR0RTXFxucmlvdC9aR01EUlNcXG5yaW90ZXIvTVxcbnJpb3RpbmcvTVxcbnJpb3RvdXMvUFlcXG5yaXAvU1hUTU5SXFxucmlwYXJpYW5cXG5yaXBjb3JkL01TXFxucmlwZS9ZUFxcbnJpcGVuL0RHXFxucmlwZW5lZC9VXFxucmlwZW5lc3MvTVxcbnJpcG9mZi9TTVxcbnJpcG9zdGUvTUdEU1xcbnJpcHBlZFxcbnJpcHBlci9TTVxcbnJpcHBpbmdcXG5yaXBwbGUvRFNNR1xcbnJpcHBseVxcbnJpcHNhdy9TTVxcbnJpcHRpZGUvTVNcXG5yaXNlL0pNWkdSU1xcbnJpc2VuXFxucmlzZXIvTVxcbnJpc2liaWxpdHkvTVxcbnJpc2libGVcXG5yaXNpbmcvTVxcbnJpc2svR01EU1xcbnJpc2tpbHlcXG5yaXNraW5lc3MvTVxcbnJpc2t5L1JQVFxcbnJpc290dG8vTVNcXG5yaXNxdWVcXG5yaXNzb2xlL1NcXG5yaXRlL01TXFxucml0dWFsL1NNWVxcbnJpdHVhbGlzbS9NXFxucml0dWFsaXN0aWNcXG5yaXR1YWxpc3RpY2FsbHlcXG5yaXR1YWxpemVkXFxucml0enkvUlRcXG5yaXYvWk5SXFxucml2YWwvTURTR1xcbnJpdmFsZWQvVVxcbnJpdmFscnkvU01cXG5yaXZlL0NHRFNcXG5yaXZlci9NXFxucml2ZXJiYW5rL1NNXFxucml2ZXJiZWQvTVNcXG5yaXZlcmJvYXQvU01cXG5yaXZlcmZyb250XFxucml2ZXJzaWRlL01TXFxucml2ZXQvTURSU1pHXFxucml2ZXRlci9NXFxucml2aWVyYS9TXFxucml2dWxldC9NU1xcbnJpeWFsL01TXFxucm1cXG5yb2FjaC9HTURTXFxucm9hZC9JTVNcXG5yb2FkYmVkL1NNXFxucm9hZGJsb2NrL01EU0dcXG5yb2FkaG91c2UvU01cXG5yb2FkaWUvTVNcXG5yb2Fka2lsbC9NXFxucm9hZHJ1bm5lci9TTVxcbnJvYWRzaG93L1NNXFxucm9hZHNpZGUvU01cXG5yb2Fkc3Rlci9TTVxcbnJvYWR3YXkvU01cXG5yb2Fkd29yay9TTVxcbnJvYWR3b3J0aHlcXG5yb2FtL1pHRFJTXFxucm9hbWVyL01cXG5yb2FtaW5nL01cXG5yb2FuL01TXFxucm9hci9aR01EUlNcXG5yb2FyZXIvTVxcbnJvYXJpbmcvTVxcbnJvYXN0L1pHTURSU0pcXG5yb2FzdGVyL01cXG5yb2FzdGluZy9NXFxucm9iL1NcXG5yb2JiZWRcXG5yb2JiZXIvTVNcXG5yb2JiZXJ5L1NNXFxucm9iYmluZ1xcbnJvYmUnc1xcbnJvYmUvRUdEU1xcbnJvYmluL01TXFxucm9ib2NhbGwvU0dNRFxcbnJvYm90L01TXFxucm9ib3RpYy9TXFxucm9ib3RpY3MvTVxcbnJvYm90aXplL0dEU1xcbnJvYnVzdC9SWVBUXFxucm9idXN0bmVzcy9NXFxucm9jay9aR01EUlNcXG5yb2NrYWJpbGx5L01cXG5yb2NrYm91bmRcXG5yb2NrZXIvTVxcbnJvY2tlcnkvU1xcbnJvY2tldC9NRFNHXFxucm9ja2V0cnkvTVxcbnJvY2tmYWxsL1NNXFxucm9ja2luZXNzL01cXG5yb2NreS9UUlBcXG5yb2NvY28vTVxcbnJvZC9TTVxcbnJvZGVcXG5yb2RlbnQvTVNcXG5yb2Rlby9NU1xcbnJvZS9TTVxcbnJvZWJ1Y2svU01cXG5yb2VudGdlbi9NU1xcbnJvZ2VyL0dEU1xcbnJvZ3VlJ3NcXG5yb2d1ZS9LU1xcbnJvZ3VlcnkvTVxcbnJvZ3Vpc2gvWVBcXG5yb2d1aXNobmVzcy9NXFxucm9pbC9HRFNcXG5yb2lzdGVyL1pHRFJTXFxucm9pc3RlcmVyL01cXG5yb2xlL01TXFxucm9sbC9NRFJaR0pTXFxucm9sbGJhY2svU01cXG5yb2xsZXIvTVxcbnJvbGxlcmJsYWRpbmdcXG5yb2xsZXJza2F0aW5nL01cXG5yb2xsaWNrL1NER1xcbnJvbGxpY2tpbmcvTVxcbnJvbGxtb3AvU1xcbnJvbGxvdmVyL1NNXFxucm9tYWluZS9NU1xcbnJvbWFuL01cXG5yb21hbmNlL01aR0RSU1xcbnJvbWFuY2VyL01cXG5yb21hbnRpYy9NU1xcbnJvbWFudGljYWxseVxcbnJvbWFudGljaXNtL01cXG5yb21hbnRpY2lzdC9TTVxcbnJvbWFudGljaXplL0RTR1xcbnJvbWVvL01TXFxucm9tcC9NRFJaR1NcXG5yb21wZXIvTVxcbnJvbmRvL1NNXFxucm9vZC9NU1xcbnJvb2YvTURSWkdTXFxucm9vZmVyL01cXG5yb29maW5nL01cXG5yb29mbGVzc1xcbnJvb2Z0b3AvU01cXG5yb29rL01ER1NcXG5yb29rZXJ5L1NNXFxucm9va2llL1NNXFxucm9vbS9NRFJaR1NcXG5yb29tZXIvTVxcbnJvb21ldHRlL1NNXFxucm9vbWZ1bC9TTVxcbnJvb21pbmVzcy9NXFxucm9vbW1hdGUvU01cXG5yb29teS9SVFBcXG5yb29zdC9TTURSWkdcXG5yb29zdGVyL01cXG5yb290L01EUlpHU1xcbnJvb3Rlci9NXFxucm9vdGtpdC9TTVxcbnJvb3RsZXNzL1BcXG5yb290bGV0L1NNXFxucm9wZS9NWkdEUlNcXG5yb3Blci9NXFxucm9weS9SVFxcbnJvc2FyeS9TTVxcbnJvc2UvTVNcXG5yb3NlYXRlXFxucm9zZWJ1ZC9TTVxcbnJvc2VidXNoL01TXFxucm9zZW1hcnkvTVxcbnJvc2V0dGUvU01cXG5yb3Nld2F0ZXIvTVxcbnJvc2V3b29kL01TXFxucm9zaWx5XFxucm9zaW4vU01ER1xcbnJvc2luZXNzL01cXG5yb3N0ZXIvU01cXG5yb3N0cnVtL01TXFxucm9zeS9SVFBcXG5yb3QvU01cXG5yb3RhL1NcXG5yb3RhcnkvU01cXG5yb3RhdGUvRFNHTlhcXG5yb3RhdGlvbi9NXFxucm90YXRpb25hbFxcbnJvdGF0b3J5XFxucm90ZS9NXFxucm90Z3V0L01cXG5yb3Rpc3NlcmllL1NNXFxucm90b2dyYXZ1cmUvTVNcXG5yb3Rvci9TTVxcbnJvdG90aWxsZXIvTVNcXG5yb3R0ZWRcXG5yb3R0ZW4vVFBSWVxcbnJvdHRlbm5lc3MvTVxcbnJvdHRlci9TXFxucm90dGluZ1xcbnJvdHR3ZWlsZXIvU1xcbnJvdHVuZC9QXFxucm90dW5kYS9NU1xcbnJvdHVuZGl0eS9NXFxucm90dW5kbmVzcy9NXFxucm91ZS9NU1xcbnJvdWdlL0RTTUdcXG5yb3VnaC9NRE5SWVhUR1BcXG5yb3VnaGFnZS9NXFxucm91Z2hjYXN0XFxucm91Z2hlbi9HRFxcbnJvdWdoaG91c2UvTUdEU1xcbnJvdWdobmVjay9HTURTXFxucm91Z2huZXNzL01cXG5yb3VnaHNcXG5yb3VnaHNob2RcXG5yb3VsZXR0ZS9NXFxucm91bmQvUFNNRFJZWlRHXFxucm91bmRhYm91dC9TTVxcbnJvdW5kZWwvU1xcbnJvdW5kZWxheS9NU1xcbnJvdW5kaG91c2UvU01cXG5yb3VuZGlzaFxcbnJvdW5kbmVzcy9NXFxucm91bmR1cC9NU1xcbnJvdW5kd29ybS9TTVxcbnJvdXNlL0RTR1xcbnJvdXN0L1NER1xcbnJvdXN0YWJvdXQvU01cXG5yb3V0L01SWlNcXG5yb3V0ZSdzXFxucm91dGUvQURTR1xcbnJvdXRlaW5nXFxucm91dGVyL01cXG5yb3V0aW5lL01ZU1xcbnJvdXRpbml6ZS9HRFNcXG5yb3V4XFxucm92ZS9aR0RSU1xcbnJvdmVyL01cXG5yb3cvU1pHTURSXFxucm93YW4vU1xcbnJvd2JvYXQvTVNcXG5yb3dkaWx5XFxucm93ZGluZXNzL01cXG5yb3dkeS9QUlNNVFxcbnJvd2R5aXNtL01cXG5yb3dlbC9TTURHXFxucm93ZXIvTVxcbnJvd2luZy9NXFxucm93bG9jay9TXFxucm95YWwvU01ZXFxucm95YWxpc3QvU01cXG5yb3lhbHRpZXMvTVxcbnJveWFsdHkvU01cXG5ycG1cXG5ycHNcXG5ydFxcbnJ0ZVxcbnJ1Yi9TTVxcbnJ1YmF0by9TTVxcbnJ1YmJlZFxcbnJ1YmJlci9TTVxcbnJ1YmJlcml6ZS9HRFNcXG5ydWJiZXJuZWNrL01EUlNaR1xcbnJ1YmJlcm5lY2tlci9NXFxucnViYmVyeVxcbnJ1YmJpbmcvU1xcbnJ1YmJpc2gvTURTR1xcbnJ1YmJpc2h5XFxucnViYmxlL01cXG5ydWJkb3duL1NNXFxucnViZS9NU1xcbnJ1YmVsbGEvTVxcbnJ1YmljdW5kXFxucnViaWRpdW0vTVxcbnJ1YmxlL1NNXFxucnVicmljL1NNXFxucnVieS9SU01UXFxucnVjaGVkXFxucnVjay9ER1NcXG5ydWNrc2Fjay9NU1xcbnJ1Y2t1cy9NU1xcbnJ1Y3Rpb25zXFxucnVkZGVyL1NNXFxucnVkZGVybGVzc1xcbnJ1ZGRpbmVzcy9NXFxucnVkZHkvUlRQXFxucnVkZS9ZVFJQXFxucnVkZW5lc3MvTVxcbnJ1ZGltZW50L1NNXFxucnVkaW1lbnRhcnlcXG5ydWUvRFNNR1xcbnJ1ZWZ1bC9QWVxcbnJ1ZWZ1bG5lc3MvTVxcbnJ1ZmYvTURZR1NcXG5ydWZmaWFuL01ZU1xcbnJ1ZmZsZS9EU01HXFxucnVmZmxlZC9VXFxucnVnL1NNXFxucnVnYnkvTVxcbnJ1Z2dlZC9QVFJZXFxucnVnZ2VkbmVzcy9NXFxucnVnZ2VyXFxucnVncmF0L1NNXFxucnVpbi9NREdTXFxucnVpbmF0aW9uL01cXG5ydWlub3VzL1lcXG5ydWxlL01aR0pEUlNcXG5ydWxlci9NXFxucnVsaW5nL01cXG5ydW0vU01cXG5ydW1iYS9TTURHXFxucnVtYmxlL0RTSk1HXFxucnVtYmxpbmcvTVxcbnJ1bWJ1c3Rpb3VzXFxucnVtaW5hbnQvTVNcXG5ydW1pbmF0ZS9YR05WRFNcXG5ydW1pbmF0aW9uL01cXG5ydW1pbmF0aXZlL1lcXG5ydW1tYWdlL0RTTUdcXG5ydW1tZXJcXG5ydW1tZXN0XFxucnVtbXkvTVxcbnJ1bW9yL1NNREdcXG5ydW1vcm1vbmdlci9TTVxcbnJ1bXAvTVlTXFxucnVtcGxlL0RTTUdcXG5ydW1wdXMvTVNcXG5ydW4vQVNNXFxucnVuYWJvdXQvTVNcXG5ydW5hcm91bmQvU01cXG5ydW5hd2F5L01TXFxucnVuZG93bi9TTVxcbnJ1bmUvTVNcXG5ydW5nL01TXFxucnVuaWNcXG5ydW5sZXQvU01cXG5ydW5uZWwvU01cXG5ydW5uZXIvU01cXG5ydW5uaW5nL01cXG5ydW5ueS9SVFxcbnJ1bm9mZi9TTVxcbnJ1bnQvTVNcXG5ydW50aW1lXFxucnVudHkvUlRcXG5ydW53YXkvU01cXG5ydXBlZS9TTVxcbnJ1cGlhaC9NXFxucnVwaWFoc1xcbnJ1cHR1cmUvTUdEU1xcbnJ1cmFsXFxucnVzZS9NU1xcbnJ1c2gvTURSU1pHXFxucnVzaGVyL01cXG5ydXNoeVxcbnJ1c2svTVNcXG5ydXNzZXQvU01cXG5ydXN0L01ER1NcXG5ydXN0aWMvU01cXG5ydXN0aWNhbGx5XFxucnVzdGljYXRlL0dEU1xcbnJ1c3RpY2F0aW9uL01cXG5ydXN0aWNpdHkvTVxcbnJ1c3RpbmVzcy9NXFxucnVzdGxlL0RSU0pNWkdcXG5ydXN0bGVyL01cXG5ydXN0cHJvb2YvU0RHXFxucnVzdHkvUlBOVFxcbnJ1dC9TTVxcbnJ1dGFiYWdhL1NNXFxucnV0aGVuaXVtL01cXG5ydXRoZXJmb3JkaXVtL01cXG5ydXRobGVzcy9ZUFxcbnJ1dGhsZXNzbmVzcy9NXFxucnV0dGVkXFxucnV0dGluZ1xcbnJ1dHR5L1JUXFxucnllL01cXG5zL05ZWEJcXG5zYWJiYXRoL01cXG5zYWJiYXRoc1xcbnNhYmJhdGljYWwvU01cXG5zYWJlci9NU1xcbnNhYmxlL01TXFxuc2Fib3QvTVNcXG5zYWJvdGFnZS9EU01HXFxuc2Fib3RldXIvU01cXG5zYWJyYS9NU1xcbnNhYy9TTVxcbnNhY2NoYXJpbi9NXFxuc2FjY2hhcmluZVxcbnNhY2VyZG90YWxcXG5zYWNoZW0vU01cXG5zYWNoZXQvU01cXG5zYWNrL1pHTURSSlNcXG5zYWNrY2xvdGgvTVxcbnNhY2tlci9NXFxuc2Fja2Z1bC9NU1xcbnNhY2tpbmcvTVxcbnNhY3JhXFxuc2FjcmFtZW50L01TXFxuc2FjcmFtZW50YWxcXG5zYWNyZWQvWVBcXG5zYWNyZWRuZXNzL01cXG5zYWNyaWZpY2UvRFNNR1xcbnNhY3JpZmljaWFsL1lcXG5zYWNyaWxlZ2UvTVNcXG5zYWNyaWxlZ2lvdXMvWVxcbnNhY3Jpc3Rhbi9NU1xcbnNhY3Jpc3R5L1NNXFxuc2Fjcm9pbGlhYy9NU1xcbnNhY3Jvc2FuY3QvUFxcbnNhY3Jvc2FuY3RuZXNzL01cXG5zYWNydW0vTVxcbnNhZC9QWVxcbnNhZGRlbi9TREdcXG5zYWRkZXJcXG5zYWRkZXN0XFxuc2FkZGxlJ3NcXG5zYWRkbGUvVURTR1xcbnNhZGRsZWJhZy9NU1xcbnNhZGRsZXIvU1xcbnNhZGRsZXJ5XFxuc2FkZXNcXG5zYWRodS9TXFxuc2FkaXNtL01cXG5zYWRpc3QvU01cXG5zYWRpc3RpY1xcbnNhZGlzdGljYWxseVxcbnNhZG5lc3MvTVxcbnNhZG9tYXNvY2hpc20vTVxcbnNhZG9tYXNvY2hpc3QvTVNcXG5zYWRvbWFzb2NoaXN0aWNcXG5zYWZhcmkvU0dNRFxcbnNhZmUvTVlUUFJTXFxuc2FmZWd1YXJkL1NNREdcXG5zYWZla2VlcGluZy9NXFxuc2FmZW5lc3MvTVxcbnNhZmV0eS9TTVxcbnNhZmZsb3dlci9NU1xcbnNhZmZyb24vTVNcXG5zYWcvU01cXG5zYWdhL01TXFxuc2FnYWNpb3VzL1lcXG5zYWdhY2l0eS9NXFxuc2FnZS9NWVRSU1xcbnNhZ2VicnVzaC9NXFxuc2FnZ2VkXFxuc2FnZ2luZ1xcbnNhZ2d5L1JUXFxuc2Fnby9NXFxuc2FndWFyby9NU1xcbnNhaGliL01TXFxuc2FpZC9VXFxuc2FpbC9HTURTSlxcbnNhaWxib2FyZC9NUlpHU1xcbnNhaWxib2FyZGVyL01cXG5zYWlsYm9hcmRpbmcvTVxcbnNhaWxib2F0L01TXFxuc2FpbGNsb3RoL01cXG5zYWlsZmlzaC9NU1xcbnNhaWxpbmcvTVxcbnNhaWxvci9TTVxcbnNhaWxwbGFuZS9NU1xcbnNhaW50L01EWVNcXG5zYWludGhvb2QvTVxcbnNhaW50bGlrZVxcbnNhaW50bGluZXNzL01cXG5zYWludGx5L1BSVFxcbnNhaXRoXFxuc2FrZS9NXFxuc2FsYWFtL1NNREdcXG5zYWxhYmxlL1VcXG5zYWxhY2lvdXMvUFlcXG5zYWxhY2lvdXNuZXNzL01cXG5zYWxhY2l0eS9NXFxuc2FsYWQvTVNcXG5zYWxhbWFuZGVyL1NNXFxuc2FsYW1pL1NNXFxuc2FsYXJ5L0RTTVxcbnNhbGUvQUJNU1xcbnNhbGVyb29tL1NcXG5zYWxlc2NsZXJrL1NNXFxuc2FsZXNnaXJsL1NNXFxuc2FsZXNsYWR5L1NNXFxuc2FsZXNtYW4vTVxcbnNhbGVzbWFuc2hpcC9NXFxuc2FsZXNtZW5cXG5zYWxlc3Blb3BsZS9NXFxuc2FsZXNwZXJzb24vTVNcXG5zYWxlc3Jvb20vU1xcbnNhbGVzd29tYW4vTVxcbnNhbGVzd29tZW5cXG5zYWxpZW5jZS9NXFxuc2FsaWVudC9TTVlcXG5zYWxpbmUvU01cXG5zYWxpbml0eS9NXFxuc2FsaXZhL01cXG5zYWxpdmFyeVxcbnNhbGl2YXRlL0dORFNcXG5zYWxpdmF0aW9uL01cXG5zYWxsb3cvUlRQXFxuc2FsbG93bmVzcy9NXFxuc2FsbHkvRFNNR1xcbnNhbG1vbi9TTVxcbnNhbG1vbmVsbGEvTVxcbnNhbG1vbmVsbGFlXFxuc2Fsb24vTVNcXG5zYWxvb24vU01cXG5zYWxzYS9NU1xcbnNhbHQnc1xcbnNhbHQvQ1RHRFNcXG5zYWx0Ym94L01TXFxuc2FsdGNlbGxhci9TTVxcbnNhbHRlZC9VXFxuc2FsdGVyXFxuc2FsdGluZS9TTVxcbnNhbHRpbmVzcy9NXFxuc2FsdHBldGVyL01cXG5zYWx0c2hha2VyL1NNXFxuc2FsdHdhdGVyL01cXG5zYWx0eS9SVFBcXG5zYWx1YnJpb3VzL0lcXG5zYWx1dGFyeVxcbnNhbHV0YXRpb24vTVNcXG5zYWx1dGF0b3JpYW4vTVNcXG5zYWx1dGF0b3J5XFxuc2FsdXRlL0RTTUdcXG5zYWx2YWdlL0RTTUdcXG5zYWx2YWdlYWJsZVxcbnNhbHZhdGlvbi9NXFxuc2FsdmUvTVpHRFJTXFxuc2FsdmVyL01cXG5zYWx2by9NU1xcbnNhbWFyaXVtL01cXG5zYW1iYS9NRFNHXFxuc2FtZS9TUFxcbnNhbWVuZXNzL01cXG5zYW1leVxcbnNhbWl6ZGF0L1NcXG5zYW1vc2EvU1xcbnNhbW92YXIvU01cXG5zYW1wYW4vU01cXG5zYW1wbGUvRFJTTVpHSlxcbnNhbXBsZXIvTVxcbnNhbXBsaW5nL01cXG5zYW11cmFpL1NNXFxuc2FuYXRvcml1bS9TTVxcbnNhbmN0aWZpY2F0aW9uL01cXG5zYW5jdGlmeS9HRFNOXFxuc2FuY3RpbW9uaW91cy9ZUFxcbnNhbmN0aW1vbmlvdXNuZXNzL01cXG5zYW5jdGltb255L01cXG5zYW5jdGlvbi9HU01EXFxuc2FuY3Rpb25lZC9VXFxuc2FuY3RpdHkvTVxcbnNhbmN0dWFyeS9TTVxcbnNhbmN0dW0vU01cXG5zYW5kL1pHTURSU1xcbnNhbmRhbC9TTVxcbnNhbmRhbHdvb2QvTVxcbnNhbmRiYWcvU01cXG5zYW5kYmFnZ2VkXFxuc2FuZGJhZ2dlci9TTVxcbnNhbmRiYWdnaW5nXFxuc2FuZGJhbmsvTVNcXG5zYW5kYmFyL1NNXFxuc2FuZGJsYXN0L1pHTURSU1xcbnNhbmRibGFzdGVyL01cXG5zYW5kYm94L01TXFxuc2FuZGNhc3RsZS9NU1xcbnNhbmRlci9NXFxuc2FuZGhvZy9TTVxcbnNhbmRpbmVzcy9NXFxuc2FuZGxvdC9TTVxcbnNhbmRsb3R0ZXIvTVNcXG5zYW5kbWFuL01cXG5zYW5kbWVuXFxuc2FuZHBhcGVyL0dNRFNcXG5zYW5kcGlwZXIvTVNcXG5zYW5kcGl0L1NcXG5zYW5kc3RvbmUvTVxcbnNhbmRzdG9ybS9TTVxcbnNhbmR3aWNoL01EU0dcXG5zYW5keS9SVFBcXG5zYW5lL0lZVFJcXG5zYW5lbmVzcy9NXFxuc2FuZy9TXFxuc2FuZ2Zyb2lkL01cXG5zYW5ncmlhL01cXG5zYW5ndWluYXJ5XFxuc2FuZ3VpbmUvWVxcbnNhbml0YXJpYW4vU01cXG5zYW5pdGFyaXVtL1NNXFxuc2FuaXRhcnkvSVVcXG5zYW5pdGF0aW9uL01cXG5zYW5pdGl6ZS9aR0RSU1xcbnNhbml0eS9JTVxcbnNhbmtcXG5zYW5zXFxuc2Fuc2VyaWZcXG5zYXAvU01cXG5zYXBpZW5jZS9NXFxuc2FwaWVuc1xcbnNhcGllbnRcXG5zYXBsZXNzXFxuc2FwbGluZy9NU1xcbnNhcHBlZFxcbnNhcHBlci9TXFxuc2FwcGhpcmUvU01cXG5zYXBwaW5lc3MvTVxcbnNhcHBpbmdcXG5zYXBweS9QUlRcXG5zYXByb3BoeXRlL1NNXFxuc2Fwcm9waHl0aWNcXG5zYXBzdWNrZXIvU01cXG5zYXB3b29kL01cXG5zYXJhbi9NXFxuc2FyY2FzbS9NU1xcbnNhcmNhc3RpY1xcbnNhcmNhc3RpY2FsbHlcXG5zYXJjb21hL01TXFxuc2FyY29waGFnaVxcbnNhcmNvcGhhZ3VzL01cXG5zYXJkaW5lL01TXFxuc2FyZG9uaWNcXG5zYXJkb25pY2FsbHlcXG5zYXJnZS9NU1xcbnNhcmkvTVNcXG5zYXJreVxcbnNhcm5pZS9TXFxuc2Fyb25nL1NNXFxuc2Fyc2FwYXJpbGxhL01TXFxuc2FydG9yaWFsL1lcXG5zYXNoL01TXFxuc2FzaGF5L1NHTURcXG5zYXNzL0dNRFNcXG5zYXNzYWZyYXMvTVNcXG5zYXNzeS9SVFxcbnNhdFxcbnNhdGFuaWNcXG5zYXRhbmljYWwvWVxcbnNhdGFuaXNtL01cXG5zYXRhbmlzdC9NU1xcbnNhdGF5XFxuc2F0Y2hlbC9NU1xcbnNhdGUvR0RTXFxuc2F0ZWVuL01cXG5zYXRlbGxpdGUvRFNNR1xcbnNhdGlhYmxlL0lcXG5zYXRpYXRlL0dORFNcXG5zYXRpYXRpb24vTVxcbnNhdGlldHkvTVxcbnNhdGluL01cXG5zYXRpbndvb2QvU01cXG5zYXRpbnlcXG5zYXRpcmUvU01cXG5zYXRpcmljXFxuc2F0aXJpY2FsL1lcXG5zYXRpcmlzdC9TTVxcbnNhdGlyaXplL0RTR1xcbnNhdGlzZmFjdGlvbi9FTVxcbnNhdGlzZmFjdGlvbnNcXG5zYXRpc2ZhY3RvcmlseS9VXFxuc2F0aXNmYWN0b3J5L1VcXG5zYXRpc2ZpZWQvVVxcbnNhdGlzZnkvRURTR1xcbnNhdGlzZnlpbmcvVVxcbnNhdGlzZnlpbmdseVxcbnNhdG9yaS9NXFxuc2F0cmFwL1NNXFxuc2F0c3VtYS9TXFxuc2F0dXJhdGUvRFNHTlxcbnNhdHVyYXRlZC9VXFxuc2F0dXJhdGlvbi9NXFxuc2F0dXJuaW5lXFxuc2F0eXIvTVNcXG5zYXR5cmlhc2lzL01cXG5zYXR5cmljXFxuc2F1Y2UvTVpHRFJTXFxuc2F1Y2VwYW4vU01cXG5zYXVjZXIvTVxcbnNhdWNpbHlcXG5zYXVjaW5lc3MvTVxcbnNhdWN5L1JQVFxcbnNhdWVya3JhdXQvTVxcbnNhdW5hL01EU0dcXG5zYXVudGVyL01ER1NcXG5zYXVyaWFuXFxuc2F1cm9wb2QvU01cXG5zYXVzYWdlL01TXFxuc2F1dGUvTVNcXG5zYXV0ZWVkXFxuc2F1dGVpbmdcXG5zYXZhZ2UvRFJTTVlUR1BcXG5zYXZhZ2VuZXNzL01cXG5zYXZhZ2VyeS9TTVxcbnNhdmFubmEvTVNcXG5zYXZhbnQvU01cXG5zYXZlL0JKTVpHRFJTXFxuc2F2ZWQvVVxcbnNhdmVyL01cXG5zYXZpbmcvTVxcbnNhdmluZ3MvTVxcbnNhdmlvci9TTVxcbnNhdm9yL01EU0dcXG5zYXZvcmluZXNzL01cXG5zYXZvcnkvUFRSU01cXG5zYXZveS9NU1xcbnNhdnZ5L0RSU01UR1xcbnNhdy9TR01EXFxuc2F3Ym9uZXMvTVxcbnNhd2J1Y2svTVNcXG5zYXdkdXN0L01cXG5zYXdmbHkvU01cXG5zYXdob3JzZS9TTVxcbnNhd21pbGwvTVNcXG5zYXd5ZXIvU01cXG5zYXgvTVNcXG5zYXhpZnJhZ2UvU01cXG5zYXhvcGhvbmUvTVNcXG5zYXhvcGhvbmlzdC9TTVxcbnNheSdzXFxuc2F5L1VTR1xcbnNheWluZy9TTVxcbnNjYWIvTVNcXG5zY2FiYmFyZC9NU1xcbnNjYWJiZWRcXG5zY2FiYmluZXNzL01cXG5zY2FiYmluZ1xcbnNjYWJieS9QVFJcXG5zY2FiaWVzL01cXG5zY2Ficm91c1xcbnNjYWQvTVNcXG5zY2FmZm9sZC9TTUdcXG5zY2FmZm9sZGluZy9NXFxuc2NhZy9TXFxuc2NhZ2dlZFxcbnNjYWxhYmlsaXR5XFxuc2NhbGFyL1NcXG5zY2FsYXdhZy9NU1xcbnNjYWxkL01EU0dcXG5zY2FsZSdzXFxuc2NhbGUvQ0dEU1xcbnNjYWxlbGVzc1xcbnNjYWxlbmVcXG5zY2FsaW5lc3MvTVxcbnNjYWxsaW9uL01TXFxuc2NhbGxvcC9HU01EXFxuc2NhbHAvTURSU1pHXFxuc2NhbHBlbC9TTVxcbnNjYWxwZXIvTVxcbnNjYWx5L1JUUFxcbnNjYW0vTVNcXG5zY2FtbWVkXFxuc2NhbW1lci9TXFxuc2NhbW1pbmdcXG5zY2FtcC9NUlNaXFxuc2NhbXBlci9HTURcXG5zY2FtcGkvTVxcbnNjYW4vTVNcXG5zY2FuZGFsL1NNXFxuc2NhbmRhbGl6ZS9EU0dcXG5zY2FuZGFsbW9uZ2VyL1NNXFxuc2NhbmRhbG91cy9ZXFxuc2NhbmRpdW0vTVxcbnNjYW5uZWRcXG5zY2FubmVyL1NNXFxuc2Nhbm5pbmdcXG5zY2Fuc2lvbi9NXFxuc2NhbnQvQ0RTVEdcXG5zY2FudGVyXFxuc2NhbnRpbHlcXG5zY2FudGluZXNzL01cXG5zY2FudGx5XFxuc2NhbnRuZXNzL01cXG5zY2FudHkvUlNQVFxcbnNjYXBlZ29hdC9TR01EXFxuc2NhcGVncmFjZS9NU1xcbnNjYXB1bGEvTVxcbnNjYXB1bGFlXFxuc2NhcHVsYXIvU01cXG5zY2FyL0dNRFNcXG5zY2FyYWIvU01cXG5zY2FyY2UvUllUUFxcbnNjYXJjZW5lc3MvTVxcbnNjYXJjaXR5L1NNXFxuc2NhcmUvTVNcXG5zY2FyZWNyb3cvTVNcXG5zY2FyZW1vbmdlci9TTUdcXG5zY2FyZi9NRFNHXFxuc2NhcmlmaWNhdGlvbi9NXFxuc2NhcmlmeS9ORFNHXFxuc2NhcmlseVxcbnNjYXJpbmVzcy9NXFxuc2NhcmxhdGluYS9NXFxuc2NhcmxldC9NXFxuc2NhcnAvTURSU1pHXFxuc2NhcnBlci9ER1xcbnNjYXJyZWRcXG5zY2FycmluZ1xcbnNjYXJ2ZXNcXG5zY2FyeS9SVFBcXG5zY2F0L01TXFxuc2NhdGhpbmcvWVxcbnNjYXRvbG9naWNhbFxcbnNjYXRvbG9neS9NXFxuc2NhdHRlZFxcbnNjYXR0ZXIvR0pTTURcXG5zY2F0dGVyYnJhaW4vU01EXFxuc2NhdHRlcmluZy9NXFxuc2NhdHRlcnNob3RcXG5zY2F0dGluZ1xcbnNjYXR0eVxcbnNjYXZlbmdlL1pHRFJTXFxuc2NhdmVuZ2VyL01cXG5zY2VuYXJpby9NU1xcbnNjZW5hcmlzdC9NU1xcbnNjZW5lL01TXFxuc2NlbmVyeS9NXFxuc2NlbmljXFxuc2NlbmljYWxseVxcbnNjZW50L0NNU1xcbnNjZW50ZWQvVVxcbnNjZW50aW5nXFxuc2NlbnRsZXNzXFxuc2NlcHRlci9NU1xcbnNjaFxcbnNjaGFkZW5mcmV1ZGVcXG5zY2hlZHVsZSdzXFxuc2NoZWR1bGUvQURTR1xcbnNjaGVkdWxlZC9VXFxuc2NoZWR1bGVyL1NcXG5zY2hlbWFcXG5zY2hlbWF0YVxcbnNjaGVtYXRpYy9TTVxcbnNjaGVtYXRpY2FsbHlcXG5zY2hlbWF0aXplL0dEU1xcbnNjaGVtZS9EUlNNWkdcXG5zY2hlbWVyL01cXG5zY2hlcnpvL01TXFxuc2NoaWxsaW5nL01TXFxuc2NoaXNtL1NNXFxuc2NoaXNtYXRpYy9TTVxcbnNjaGlzdC9NXFxuc2NoaXN0b3NvbWlhc2lzXFxuc2NoaXpvL1NNXFxuc2NoaXpvaWQvTVNcXG5zY2hpem9waHJlbmlhL01cXG5zY2hpem9waHJlbmljL1NNXFxuc2NobGVtaWVsL1NNXFxuc2NobGVwL1NNXFxuc2NobGVwcGVkXFxuc2NobGVwcGluZ1xcbnNjaGxvY2svTVxcbnNjaG1hbHR6L01cXG5zY2htYWx0enkvVFJcXG5zY2htby9NXFxuc2NobW9lc1xcbnNjaG1vb3plL0RSU1pHXFxuc2NobXVjay9NU1xcbnNjaG5hcHBzL01cXG5zY2huYXV6ZXIvU01cXG5zY2huaXR6ZWwvU01cXG5zY2hub29rL01TXFxuc2Nobm96L01TXFxuc2Nobm96emxlL1NNXFxuc2Nob2xhci9NWVNcXG5zY2hvbGFyc2hpcC9NU1xcbnNjaG9sYXN0aWNcXG5zY2hvbGFzdGljYWxseVxcbnNjaG9sYXN0aWNpc21cXG5zY2hvb2wvU0dNRFxcbnNjaG9vbGJhZy9NU1xcbnNjaG9vbGJvb2svU01cXG5zY2hvb2xib3kvTVNcXG5zY2hvb2xjaGlsZC9NXFxuc2Nob29sY2hpbGRyZW4vTVxcbnNjaG9vbGRheXNcXG5zY2hvb2xlZC9VXFxuc2Nob29sZmVsbG93L1NNXFxuc2Nob29sZ2lybC9TTVxcbnNjaG9vbGhvdXNlL1NNXFxuc2Nob29saW5nL01cXG5zY2hvb2xraWQvU1xcbnNjaG9vbG1hcm0vU01cXG5zY2hvb2xtYXJtaXNoXFxuc2Nob29sbWFzdGVyL01TXFxuc2Nob29sbWF0ZS9TTVxcbnNjaG9vbG1pc3RyZXNzL01TXFxuc2Nob29scm9vbS9TTVxcbnNjaG9vbHRlYWNoZXIvTVNcXG5zY2hvb2x3b3JrL01cXG5zY2hvb2x5YXJkL1NNXFxuc2Nob29uZXIvU01cXG5zY2h1c3MvR01EU1xcbnNjaHVzc2Jvb21lci9NU1xcbnNjaHdhL01TXFxuc2NpXFxuc2NpYXRpY1xcbnNjaWF0aWNhL01cXG5zY2llbmNlL0ZNU1xcbnNjaWVudGlmaWMvVVxcbnNjaWVudGlmaWNhbGx5L1VcXG5zY2llbnRpc3QvU01cXG5zY2ltaXRhci9TTVxcbnNjaW50aWxsYS9NU1xcbnNjaW50aWxsYXRlL0RTR05cXG5zY2ludGlsbGF0aW9uL01cXG5zY2lvbi9NU1xcbnNjaXNzb3IvR0RTXFxuc2NsZXJvc2VzXFxuc2NsZXJvc2lzL01cXG5zY2xlcm90aWNcXG5zY29mZi9NRFJTWkdcXG5zY29mZmVyL01cXG5zY29mZmxhdy9NU1xcbnNjb2xkL01EU0dKXFxuc2NvbGRpbmcvTVxcbnNjb2xpb3Npcy9NXFxuc2NvbmNlL1NNXFxuc2NvbmUvTVNcXG5zY29vcC9NRFNHXFxuc2Nvb3BmdWwvTVNcXG5zY29vdC9EUlNaR1xcbnNjb290ZXIvTVxcbnNjb3BlL01HRFNcXG5zY29yYnV0aWNcXG5zY29yY2gvTURSU1pHXFxuc2NvcmNoZXIvTVxcbnNjb3JlL01aR0RSU1xcbnNjb3JlYm9hcmQvU01cXG5zY29yZWNhcmQvTVNcXG5zY29yZWtlZXBlci9NU1xcbnNjb3JlbGVzc1xcbnNjb3JlbGluZS9TXFxuc2NvcmVyL01cXG5zY29ybi9NRFJTWkdcXG5zY29ybmVyL01cXG5zY29ybmZ1bC9ZXFxuc2NvcnBpb24vTVNcXG5zY290Y2gvTURTR1xcbnNjb3RjaHNcXG5zY291bmRyZWwvTVNcXG5zY291ci9EUlNaR1xcbnNjb3VyZXIvTVxcbnNjb3VyZ2UvRFNNR1xcbnNjb3V0L01EUlNaR1xcbnNjb3V0aW5nL01cXG5zY291dG1hc3Rlci9NU1xcbnNjb3cvTVNcXG5zY293bC9NRFNHXFxuc2NyYWJibGUvTVpHRFJTXFxuc2NyYWJibGVyL01cXG5zY3JhZy9NU1xcbnNjcmFnZ2x5L1JUXFxuc2NyYWdneS9UUlxcbnNjcmFtL1NcXG5zY3JhbWJsZSdzXFxuc2NyYW1ibGUvVUdEU1xcbnNjcmFtYmxlci9NU1xcbnNjcmFtbWVkXFxuc2NyYW1taW5nXFxuc2NyYXAvTURSU1pHSlxcbnNjcmFwYm9vay9TTVxcbnNjcmFwZS9TTVxcbnNjcmFwZXIvTVxcbnNjcmFwaGVhcC9TTVxcbnNjcmFwaWVcXG5zY3JhcHBlZFxcbnNjcmFwcGVyL01TXFxuc2NyYXBwaW5nXFxuc2NyYXBweS9UUlxcbnNjcmFweWFyZC9TTVxcbnNjcmF0Y2gvR01EU1xcbnNjcmF0Y2hjYXJkL1NcXG5zY3JhdGNoZWQvVVxcbnNjcmF0Y2hpbHlcXG5zY3JhdGNoaW5lc3MvTVxcbnNjcmF0Y2hwYWQvU1xcbnNjcmF0Y2h5L1BSVFxcbnNjcmF3bC9TTURHXFxuc2NyYXdseVxcbnNjcmF3bmluZXNzL01cXG5zY3Jhd255L1BUUlxcbnNjcmVhbS9TTURSWkdcXG5zY3JlYW1lci9NXFxuc2NyZWFtaW5nL1lcXG5zY3JlZS9NRFNcXG5zY3JlZWNoL0dNRFNcXG5zY3JlZWNoeS9UUlxcbnNjcmVlZC9TXFxuc2NyZWVuL1NKTURHXFxuc2NyZWVuaW5nL01cXG5zY3JlZW5wbGF5L1NNXFxuc2NyZWVuc2F2ZXIvU01cXG5zY3JlZW5zaG90L1NcXG5zY3JlZW53cml0ZXIvU01cXG5zY3JlZW53cml0aW5nL01cXG5zY3JldydzXFxuc2NyZXcvVURTR1xcbnNjcmV3YmFsbC9NU1xcbnNjcmV3ZHJpdmVyL01TXFxuc2NyZXdpbmVzcy9NXFxuc2NyZXd3b3JtL1NNXFxuc2NyZXd5L1BSVFxcbnNjcmliYWxcXG5zY3JpYmJsZS9NWkdEUlNcXG5zY3JpYmJsZXIvTVxcbnNjcmliZSdzXFxuc2NyaWJlL0NLSVNcXG5zY3JpbS9NU1xcbnNjcmltbWFnZS9NR0RTXFxuc2NyaW1wL1NER1xcbnNjcmltc2hhdy9NREdTXFxuc2NyaXAvTVNcXG5zY3JpcHQvRlNNREdcXG5zY3JpcHRlZC9VXFxuc2NyaXB0dXJhbFxcbnNjcmlwdHVyZS9NU1xcbnNjcmlwdHdyaXRlci9TTVxcbnNjcml2ZW5lci9TTVxcbnNjcm9kL01cXG5zY3JvZnVsYS9NXFxuc2Nyb2Z1bG91c1xcbnNjcm9nL1NcXG5zY3JvbGwvR1NNRFxcbnNjcm9vZ2UvTVNcXG5zY3JvdGFcXG5zY3JvdGFsXFxuc2Nyb3R1bS9NXFxuc2Nyb3VuZ2UvRFJTWkdcXG5zY3JvdW5nZXIvTVxcbnNjcm91bmd5L1RSXFxuc2NydWIvTVNcXG5zY3J1YmJlZFxcbnNjcnViYmVyL1NNXFxuc2NydWJiaW5nXFxuc2NydWJieS9SVFxcbnNjcnVmZi9TTVxcbnNjcnVmZmlseVxcbnNjcnVmZmluZXNzL01cXG5zY3J1ZmZ5L1JQVFxcbnNjcnVtL1NcXG5zY3J1bWhhbGZcXG5zY3J1bWhhbHZlc1xcbnNjcnVtbWFnZS9TXFxuc2NydW1tZWRcXG5zY3J1bW1pbmdcXG5zY3J1bXAvU0dEXFxuc2NydW1wdGlvdXMvWVxcbnNjcnVtcHlcXG5zY3J1bmNoL01EU0dcXG5zY3J1bmNoeS9TTVxcbnNjcnVwbGUvTUdEU1xcbnNjcnVwdWxvc2l0eS9NXFxuc2NydXB1bG91cy9VUFlcXG5zY3J1cHVsb3VzbmVzcy9VTVxcbnNjcnV0aW5lZXIvU1xcbnNjcnV0aW5pemUvR0RTXFxuc2NydXRpbnkvTVxcbnNjdWJhL01EU0dcXG5zY3VkL01TXFxuc2N1ZGRlZFxcbnNjdWRkaW5nXFxuc2N1ZmYvTURTR1xcbnNjdWZmbGUvTUdEU1xcbnNjdWxsL01EUlNaR1xcbnNjdWxsZXIvTVxcbnNjdWxsZXJ5L1NNXFxuc2N1bGxpb24vU01cXG5zY3VscHQvU0dEXFxuc2N1bHB0b3IvU01cXG5zY3VscHRyZXNzL01TXFxuc2N1bHB0dXJhbFxcbnNjdWxwdHVyZS9EU01HXFxuc2N1bS9NU1xcbnNjdW1iYWcvTVNcXG5zY3VtbWVkXFxuc2N1bW1pbmdcXG5zY3VtbXkvVFJcXG5zY3VwcGVyL01ER1NcXG5zY3VyZi9NXFxuc2N1cmZ5XFxuc2N1cnJpbGl0eS9NXFxuc2N1cnJpbG91cy9QWVxcbnNjdXJyaWxvdXNuZXNzL01cXG5zY3VycnkvR0RTTVxcbnNjdXJ2aWx5XFxuc2N1cnZ5L1RSTVxcbnNjdXRjaGVvbi9TTVxcbnNjdXR0bGUvTUdEU1xcbnNjdXR0bGVidXR0L01cXG5zY3V6enkvVFJcXG5zY3l0aGUvRFNNR1xcbnNlYS9TTVxcbnNlYWJlZC9TTVxcbnNlYWJpcmQvTVNcXG5zZWFib2FyZC9TTVxcbnNlYWJvcm5lXFxuc2VhY29hc3QvU01cXG5zZWFmYXJlci9TTVxcbnNlYWZhcmluZy9NXFxuc2VhZmxvb3IvU01cXG5zZWFmb29kL01cXG5zZWFmcm9udC9TTVxcbnNlYWdvaW5nXFxuc2VhZ3VsbC9NU1xcbnNlYWhvcnNlL01TXFxuc2VhbCdzXFxuc2VhbC9BVVNER1xcbnNlYWxhbnQvTVNcXG5zZWFsZXIvU01cXG5zZWFsc2tpbi9NXFxuc2VhbS9HTUROU1xcbnNlYW1hbi9NXFxuc2VhbWFuc2hpcC9NXFxuc2VhbWxlc3MvWVxcbnNlYW1vdW50L01TXFxuc2VhbXN0cmVzcy9NU1xcbnNlYW15L1JUXFxuc2VhbmNlL1NNXFxuc2VhcGxhbmUvU01cXG5zZWFwb3J0L01TXFxuc2Vhci9HTURTXFxuc2VhcmNoL0FaR01EUlNcXG5zZWFyY2hhYmxlL1VcXG5zZWFyY2hlci9BTVxcbnNlYXJjaGluZy9ZXFxuc2VhcmNobGlnaHQvTVNcXG5zZWFyaW5nL1lcXG5zZWFzY2FwZS9TTVxcbnNlYXNoZWxsL1NNXFxuc2Vhc2hvcmUvU01cXG5zZWFzaWNrL1BcXG5zZWFzaWNrbmVzcy9NXFxuc2Vhc2lkZS9NU1xcbnNlYXNvbi9TR01EQkpcXG5zZWFzb25hYmxlL1VcXG5zZWFzb25hYmx5L1VcXG5zZWFzb25hbC9ZXFxuc2Vhc29uYWxpdHlcXG5zZWFzb25lZC9VXFxuc2Vhc29uaW5nL01cXG5zZWF0J3NcXG5zZWF0L1VHRFNcXG5zZWF0aW5nL01cXG5zZWF0bWF0ZS9TTVxcbnNlYXdhbGwvTVNcXG5zZWF3YXJkL01TXFxuc2Vhd2F0ZXIvTVxcbnNlYXdheS9TTVxcbnNlYXdlZWQvTVNcXG5zZWF3b3J0aGluZXNzL01cXG5zZWF3b3J0aHkvUFxcbnNlYmFjZW91c1xcbnNlYm9ycmhlYS9NXFxuc2VidW1cXG5zZWMneVxcbnNlYy9TTVxcbnNlY2FudC9TTVxcbnNlY2F0ZXVyc1xcbnNlY2VkZS9EU0dcXG5zZWNlc3Npb24vTVxcbnNlY2Vzc2lvbmlzdC9NU1xcbnNlY2x1ZGUvR0RTXFxuc2VjbHVzaW9uL01cXG5zZWNsdXNpdmVcXG5zZWNvbmQvU0xaR01EUllcXG5zZWNvbmRhcmlseVxcbnNlY29uZGFyeS9TTVxcbnNlY29uZGVyL01cXG5zZWNvbmRoYW5kXFxuc2Vjb25kbWVudC9TXFxuc2VjcmVjeS9NXFxuc2VjcmV0L1NHVk1EWVxcbnNlY3JldGFyaWFsXFxuc2VjcmV0YXJpYXQvTVNcXG5zZWNyZXRhcnkvU01cXG5zZWNyZXRhcnlzaGlwL01cXG5zZWNyZXRlL1hOU1xcbnNlY3JldGlvbi9NXFxuc2VjcmV0aXZlL1BZXFxuc2VjcmV0aXZlbmVzcy9NXFxuc2VjcmV0b3J5XFxuc2VjdC9JTVNcXG5zZWN0YXJpYW4vTVNcXG5zZWN0YXJpYW5pc20vTVxcbnNlY3RhcnkvU01cXG5zZWN0aW9uL0FFU01cXG5zZWN0aW9uYWwvTVNcXG5zZWN0aW9uYWxpc20vTVxcbnNlY3Rpb25lZFxcbnNlY3Rpb25pbmdcXG5zZWN0b3IvRVNNXFxuc2VjdWxhclxcbnNlY3VsYXJpc20vTVxcbnNlY3VsYXJpc3QvU01cXG5zZWN1bGFyaXphdGlvbi9NXFxuc2VjdWxhcml6ZS9EU0dcXG5zZWN1cmUvRFJTWVRHXFxuc2VjdXJlZC9VXFxuc2VjdXJpdHkvSVNNXFxuc2VjeVxcbnNlZGFuL01TXFxuc2VkYXRlL0RSU1lUR05WUFxcbnNlZGF0ZW5lc3MvTVxcbnNlZGF0aW9uL01cXG5zZWRhdGl2ZS9TTVxcbnNlZGVudGFyeVxcbnNlZGdlL01cXG5zZWRneVxcbnNlZGltZW50L01TXFxuc2VkaW1lbnRhcnlcXG5zZWRpbWVudGF0aW9uL01cXG5zZWRpdGlvbi9NXFxuc2VkaXRpb3VzXFxuc2VkdWNlL0RSU1pHXFxuc2VkdWNlci9NXFxuc2VkdWN0aW9uL1NNXFxuc2VkdWN0aXZlL1lQXFxuc2VkdWN0aXZlbmVzcy9NXFxuc2VkdWN0cmVzcy9NU1xcbnNlZHVsb3VzL1lcXG5zZWUvUlNNWlxcbnNlZWQnc1xcbnNlZWQvQUdEU1xcbnNlZWRiZWQvTVNcXG5zZWVkY2FzZS9NU1xcbnNlZWRlZC9VXFxuc2VlZGVyL1NNXFxuc2VlZGluZXNzL01cXG5zZWVkbGVzc1xcbnNlZWRsaW5nL01TXFxuc2VlZHBvZC9NU1xcbnNlZWR5L1JQVFxcbnNlZWluZy9TXFxuc2Vlay9aR1JTXFxuc2Vla2VyL01cXG5zZWVtL0dEU1xcbnNlZW1pbmcvWVxcbnNlZW1saW5lc3MvVU1cXG5zZWVtbHkvVVJUUFxcbnNlZW4vVVxcbnNlZXAvR0RTXFxuc2VlcGFnZS9NXFxuc2Vlci9NXFxuc2VlcnN1Y2tlci9NXFxuc2Vlc2F3L1NNREdcXG5zZWV0aGUvRFNHXFxuc2VnZmF1bHQvU1xcbnNlZ21lbnQvR1NNRFxcbnNlZ21lbnRhdGlvbi9NXFxuc2VnbWVudGVkL1VcXG5zZWdyZWdhdGUvQ0RTR05cXG5zZWdyZWdhdGVkL1VcXG5zZWdyZWdhdGlvbi9DTVxcbnNlZ3JlZ2F0aW9uaXN0L01TXFxuc2VndWUvTUdEU1xcbnNlZ3VlaW5nXFxuc2VpZ25ldXIvU01cXG5zZWlnbmlvci9TTVxcbnNlaW5lL01aR0RSU1xcbnNlaW5lci9NXFxuc2Vpc21pY1xcbnNlaXNtaWNhbGx5XFxuc2Vpc21vZ3JhcGgvWk1SXFxuc2Vpc21vZ3JhcGhlci9NXFxuc2Vpc21vZ3JhcGhpY1xcbnNlaXNtb2dyYXBoc1xcbnNlaXNtb2dyYXBoeS9NXFxuc2Vpc21vbG9naWNcXG5zZWlzbW9sb2dpY2FsXFxuc2Vpc21vbG9naXN0L01TXFxuc2Vpc21vbG9neS9NXFxuc2VpemUvR0RTXFxuc2VpenVyZS9NU1xcbnNlbGRvbVxcbnNlbGVjdC9DU0dWRFxcbnNlbGVjdGlvbi9TTVxcbnNlbGVjdGl2ZS9ZXFxuc2VsZWN0aXZpdHkvTVxcbnNlbGVjdG1hbi9NXFxuc2VsZWN0bWVuXFxuc2VsZWN0bmVzcy9NXFxuc2VsZWN0b3IvTVNcXG5zZWxlbml1bS9NXFxuc2VsZW5vZ3JhcGhlci9NU1xcbnNlbGVub2dyYXBoeS9NXFxuc2VsZi9NXFxuc2VsZmllL1NNXFxuc2VsZmlzaC9VWVBcXG5zZWxmaXNobmVzcy9VTVxcbnNlbGZsZXNzL1BZXFxuc2VsZmxlc3NuZXNzL01cXG5zZWxmc2FtZVxcbnNlbGwnc1xcbnNlbGwvQVpHUlNcXG5zZWxsZXInc1xcbnNlbGxvZmYvTVNcXG5zZWxsb3RhcGUvRFNHXFxuc2VsbG91dC9NU1xcbnNlbHR6ZXIvTVNcXG5zZWx2YWdlL01TXFxuc2VsdmVzXFxuc2VtYW50aWMvU1xcbnNlbWFudGljYWxseVxcbnNlbWFudGljaXN0L01TXFxuc2VtYW50aWNzL01cXG5zZW1hcGhvcmUvRFNNR1xcbnNlbWJsYW5jZS9BU01cXG5zZW1lbi9NXFxuc2VtZXN0ZXIvU01cXG5zZW1pL01TXFxuc2VtaWFubnVhbC9ZXFxuc2VtaWFyaWRcXG5zZW1pYXV0b21hdGljL01TXFxuc2VtaWJyZXZlL1NcXG5zZW1pY2lyY2xlL1NNXFxuc2VtaWNpcmN1bGFyXFxuc2VtaWNvbG9uL01TXFxuc2VtaWNvbmR1Y3RpbmdcXG5zZW1pY29uZHVjdG9yL01TXFxuc2VtaWNvbnNjaW91c1xcbnNlbWlkYXJrbmVzcy9NXFxuc2VtaWRldGFjaGVkXFxuc2VtaWZpbmFsL1NNXFxuc2VtaWZpbmFsaXN0L01TXFxuc2VtaWdsb3NzL1NcXG5zZW1pbW9udGhseS9TTVxcbnNlbWluYWxcXG5zZW1pbmFyL01TXFxuc2VtaW5hcmlhbi9TTVxcbnNlbWluYXJ5L1NNXFxuc2VtaW9mZmljaWFsXFxuc2VtaW90aWMvU1xcbnNlbWlvdGljcy9NXFxuc2VtaXBlcm1lYWJsZVxcbnNlbWlwcmVjaW91c1xcbnNlbWlwcml2YXRlXFxuc2VtaXByby9TXFxuc2VtaXByb2Zlc3Npb25hbC9TTVxcbnNlbWlxdWF2ZXIvU1xcbnNlbWlyZXRpcmVkXFxuc2VtaXNraWxsZWRcXG5zZW1pc29saWRcXG5zZW1pc3dlZXRcXG5zZW1pdG9uZS9TTVxcbnNlbWl0cmFpbGVyL01TXFxuc2VtaXRyYW5zcGFyZW50XFxuc2VtaXRyb3BpY2FsXFxuc2VtaXZvd2VsL1NNXFxuc2VtaXdlZWtseS9TTVxcbnNlbWl5ZWFybHlcXG5zZW1vbGluYS9NXFxuc2VtcHN0cmVzcy9NU1xcbnNlbmF0ZS9TTVxcbnNlbmF0b3IvTVNcXG5zZW5hdG9yaWFsXFxuc2VuZC9aR1JTXFxuc2VuZGVyL01cXG5zZW5kb2ZmL01TXFxuc2VuZXNjZW5jZS9NXFxuc2VuZXNjZW50XFxuc2VuaWxlXFxuc2VuaWxpdHkvTVxcbnNlbmlvci9TTVxcbnNlbmlvcml0eS9NXFxuc2VubmEvTVxcbnNlbm9yL01TXFxuc2Vub3JhL1NNXFxuc2Vub3JpdGEvU01cXG5zZW5zYXRpb24vTVNcXG5zZW5zYXRpb25hbC9ZXFxuc2Vuc2F0aW9uYWxpc20vTVxcbnNlbnNhdGlvbmFsaXN0L01TXFxuc2Vuc2F0aW9uYWxpemUvR0RTXFxuc2Vuc2UvTUdEU1xcbnNlbnNlbGVzcy9QWVxcbnNlbnNlbGVzc25lc3MvTVxcbnNlbnNpYmlsaXRpZXNcXG5zZW5zaWJpbGl0eS9JTVxcbnNlbnNpYmxlL1BcXG5zZW5zaWJsZW5lc3MvTVxcbnNlbnNpYmx5L0lcXG5zZW5zaXRpdmUvU01ZUFxcbnNlbnNpdGl2ZW5lc3MvTVxcbnNlbnNpdGl2aXRpZXNcXG5zZW5zaXRpdml0eS9JTVxcbnNlbnNpdGl6YXRpb24vQ01cXG5zZW5zaXRpemUvQ0RTR1xcbnNlbnNvci9TTVxcbnNlbnNvcnlcXG5zZW5zdWFsL1lcXG5zZW5zdWFsaXN0L1NNXFxuc2Vuc3VhbGl0eS9NXFxuc2Vuc3VvdXMvWVBcXG5zZW5zdW91c25lc3MvTVxcbnNlbnQvRkFVXFxuc2VudGVuY2UvTUdEU1xcbnNlbnRlbnRpb3VzL1lcXG5zZW50aWVuY2UvSU1cXG5zZW50aWVudC9JXFxuc2VudGltZW50L1NNXFxuc2VudGltZW50YWwvWVxcbnNlbnRpbWVudGFsaXNtL01cXG5zZW50aW1lbnRhbGlzdC9NU1xcbnNlbnRpbWVudGFsaXR5L01cXG5zZW50aW1lbnRhbGl6YXRpb24vTVxcbnNlbnRpbWVudGFsaXplL0dEU1xcbnNlbnRpbmVsL01TXFxuc2VudHJ5L1NNXFxuc2VwYWwvTVNcXG5zZXBhcmFiaWxpdHkvSU1cXG5zZXBhcmFibGVcXG5zZXBhcmFibHkvSVxcbnNlcGFyYXRlL1hNWUdOVkRTUFxcbnNlcGFyYXRlbmVzcy9NXFxuc2VwYXJhdGlvbi9NXFxuc2VwYXJhdGlzbS9NXFxuc2VwYXJhdGlzdC9NU1xcbnNlcGFyYXRvci9NU1xcbnNlcGlhL01cXG5zZXBzaXMvTVxcbnNlcHRhXFxuc2VwdGFsXFxuc2VwdGV0L1NNXFxuc2VwdGljXFxuc2VwdGljZW1pYS9NXFxuc2VwdGljZW1pY1xcbnNlcHR1YWdlbmFyaWFuL01TXFxuc2VwdHVtL01cXG5zZXB1bGNoZXIvR01EU1xcbnNlcHVsY2hyYWxcXG5zZXFcXG5zZXF1ZWwvU01cXG5zZXF1ZW5jZS9NWkdEUlNcXG5zZXF1ZW5jaW5nL01cXG5zZXF1ZW50aWFsL0ZZXFxuc2VxdWVzdGVyL1NER1xcbnNlcXVlc3RyYXRlL1hHTkRTXFxuc2VxdWVzdHJhdGlvbi9NXFxuc2VxdWluL1NNRFxcbnNlcXVpbm5lZFxcbnNlcXVpdHVyXFxuc2VxdW9pYS9NU1xcbnNlcmFnbGlvL01TXFxuc2VyYXBlL1NNXFxuc2VyYXBoL01cXG5zZXJhcGhpY1xcbnNlcmFwaHNcXG5zZXJlL1RSXFxuc2VyZW5hZGUvTUdEU1xcbnNlcmVuZGlwaXRvdXNcXG5zZXJlbmRpcGl0eS9NXFxuc2VyZW5lL1JQWVRcXG5zZXJlbmVuZXNzL01cXG5zZXJlbml0eS9NXFxuc2VyZi9NU1xcbnNlcmZkb20vTVxcbnNlcmdlL01cXG5zZXJnZWFudC9NU1xcbnNlcmlhbC9TTVlcXG5zZXJpYWxpemF0aW9uL1NNXFxuc2VyaWFsaXplL0dEU0JcXG5zZXJpZXMvTVxcbnNlcmlmL01TXFxuc2VyaWdyYXBoL01cXG5zZXJpZ3JhcGhzXFxuc2VyaW5lXFxuc2VyaW91cy9QWVxcbnNlcmlvdXNuZXNzL01cXG5zZXJtb24vU01cXG5zZXJtb25pemUvR0RTXFxuc2Vyb2xvZ3kvTVxcbnNlcm90b25pblxcbnNlcm91c1xcbnNlcnBlbnQvTVNcXG5zZXJwZW50aW5lL01cXG5zZXJyYXRlL1hORFxcbnNlcnJhdGlvbi9NXFxuc2VycmllZFxcbnNlcnVtL01TXFxuc2VydmFudC9NU1xcbnNlcnZlJ3MvQUZcXG5zZXJ2ZS9GQUNHRFNcXG5zZXJ2ZXIvU01cXG5zZXJ2ZXJ5L1NcXG5zZXJ2aWNlL0VNU1xcbnNlcnZpY2VhYmlsaXR5L01cXG5zZXJ2aWNlYWJsZVxcbnNlcnZpY2VkXFxuc2VydmljZW1hbi9NXFxuc2VydmljZW1lblxcbnNlcnZpY2V3b21hbi9NXFxuc2VydmljZXdvbWVuXFxuc2VydmljaW5nXFxuc2VydmlldHRlL01TXFxuc2VydmlsZVxcbnNlcnZpbGl0eS9NXFxuc2VydmluZydzXFxuc2VydmluZ3NcXG5zZXJ2aXRvci9NU1xcbnNlcnZpdHVkZS9NXFxuc2Vydm8vTVNcXG5zZXJ2b21lY2hhbmlzbS9TTVxcbnNlcnZvbW90b3IvTVNcXG5zZXNhbWUvU01cXG5zZXNxdWljZW50ZW5uaWFsL01TXFxuc2Vzc2lvbi9NU1xcbnNldC9BSVNNXFxuc2V0YmFjay9NU1xcbnNldHNjcmV3L1NNXFxuc2V0c3F1YXJlL1NcXG5zZXR0L0JKWkdSU1xcbnNldHRlZS9NU1xcbnNldHRlci9NXFxuc2V0dGluZy9NXFxuc2V0dGxlJ3NcXG5zZXR0bGUvQVVHRFNcXG5zZXR0bGVtZW50L0FNXFxuc2V0dGxlbWVudHNcXG5zZXR0bGVyL1NNXFxuc2V0dXAvTVNcXG5zZXZlbi9NSFNcXG5zZXZlbnRlZW4vU01IXFxuc2V2ZW50ZWVudGgvTVxcbnNldmVudGVlbnRoc1xcbnNldmVudGgvTVxcbnNldmVudGhzXFxuc2V2ZW50aWV0aC9NXFxuc2V2ZW50aWV0aHNcXG5zZXZlbnR5L1NNSFxcbnNldmVyL0VUR0RTXFxuc2V2ZXJhbC9NWVxcbnNldmVyYW5jZS9TTVxcbnNldmVyZS9ZUFJcXG5zZXZlcmVuZXNzL01cXG5zZXZlcml0eS9NXFxuc2V3L0FTR0RcXG5zZXdhZ2UvTVxcbnNld2VyL01TXFxuc2V3ZXJhZ2UvTVxcbnNld2luZy9NXFxuc2V3bi9BXFxuc2V4L0dNRFNcXG5zZXhhZ2VuYXJpYW4vU01cXG5zZXhpbHlcXG5zZXhpbmVzcy9NXFxuc2V4aXNtL01cXG5zZXhpc3QvTVNcXG5zZXhsZXNzXFxuc2V4b2xvZ2lzdC9TTVxcbnNleG9sb2d5L01cXG5zZXhwb3QvTVNcXG5zZXh0YW50L1NNXFxuc2V4dGV0L01TXFxuc2V4dGluZ1xcbnNleHRvbi9NU1xcbnNleHR1cGxldC9TTVxcbnNleHVhbC9ZXFxuc2V4dWFsaXR5L01cXG5zZXh5L1BUUlxcbnNmXFxuc2hcXG5zaGFiYmlseVxcbnNoYWJiaW5lc3MvTVxcbnNoYWJieS9QVFJcXG5zaGFjay9NRFNHXFxuc2hhY2tsZSdzXFxuc2hhY2tsZS9VR0RTXFxuc2hhZC9HTURTSlxcbnNoYWRlL01TXFxuc2hhZGlseVxcbnNoYWRpbmVzcy9NXFxuc2hhZGluZy9NXFxuc2hhZG93L1NHTURcXG5zaGFkb3dib3gvR0RTXFxuc2hhZG93eS9SVFxcbnNoYWR5L1JQVFxcbnNoYWZ0L01EU0dcXG5zaGFnL01TXFxuc2hhZ2dlZFxcbnNoYWdnaW5lc3MvTVxcbnNoYWdnaW5nXFxuc2hhZ2d5L1RQUlxcbnNoYWgvTVxcbnNoYWhzXFxuc2hha2UvTVpHUlNcXG5zaGFrZWRvd24vU01cXG5zaGFrZW4vVVxcbnNoYWtlb3V0L01TXFxuc2hha2VyL01cXG5zaGFrZXVwL01TXFxuc2hha2lseVxcbnNoYWtpbmVzcy9NXFxuc2hha3kvUlBUXFxuc2hhbGUvTVxcbnNoYWxsXFxuc2hhbGxvdC9NU1xcbnNoYWxsb3cvVFBNUllTXFxuc2hhbGxvd25lc3MvTVxcbnNoYWxvbVxcbnNoYWx0XFxuc2hhbS9HTURTXFxuc2hhbWFuL1NNXFxuc2hhbWFuaWNcXG5zaGFtYW5pc21cXG5zaGFtYW5pc3RpY1xcbnNoYW1ibGUvTUdEU1xcbnNoYW1ibGVzL01cXG5zaGFtYm9saWNcXG5zaGFtZS9NU1xcbnNoYW1lZmFjZWQvWVxcbnNoYW1lZnVsL1BZXFxuc2hhbWVmdWxuZXNzL01cXG5zaGFtZWxlc3MvWVBcXG5zaGFtZWxlc3NuZXNzL01cXG5zaGFtbWVkXFxuc2hhbW1pbmdcXG5zaGFtcG9vL1pHTURSU1xcbnNoYW1wb29lci9NXFxuc2hhbXJvY2svTVNcXG5zaGFuJ3RcXG5zaGFuZHkvU1xcbnNoYW5naGFpL0RTR1xcbnNoYW5rL01TXFxuc2hhbnR1bmcvTVxcbnNoYW50eS9TTVxcbnNoYW50eXRvd24vU01cXG5zaGFwZSdzXFxuc2hhcGUvQUdEU1xcbnNoYXBlZC9VXFxuc2hhcGVsZXNzL1lQXFxuc2hhcGVsZXNzbmVzcy9NXFxuc2hhcGVsaW5lc3MvTVxcbnNoYXBlbHkvUFRSXFxuc2hhcmQvTVNcXG5zaGFyZS9NWkdEUlNcXG5zaGFyZWFibGVcXG5zaGFyZWNyb3AvU1xcbnNoYXJlY3JvcHBlZFxcbnNoYXJlY3JvcHBlci9NU1xcbnNoYXJlY3JvcHBpbmdcXG5zaGFyZWhvbGRlci9TTVxcbnNoYXJlaG9sZGluZy9TXFxuc2hhcmVyL01cXG5zaGFyZXdhcmUvTVxcbnNoYXJpYS9NXFxuc2hhcmlhaFxcbnNoYXJrL01EU0dcXG5zaGFya3NraW4vTVxcbnNoYXJwL01ETlJZU1BYWlRHXFxuc2hhcnBlbi9BREdTXFxuc2hhcnBlbmVyL01TXFxuc2hhcnBlci9NXFxuc2hhcnBpZS9NU1xcbnNoYXJwaXNoXFxuc2hhcnBuZXNzL01cXG5zaGFycHNob290ZXIvU01cXG5zaGFycHNob290aW5nL01cXG5zaGF0dGVyL0dNRFNcXG5zaGF0dGVycHJvb2ZcXG5zaGF2ZS9NWkdEUlNKXFxuc2hhdmVuL1VcXG5zaGF2ZXIvTVxcbnNoYXZpbmcvTVxcbnNoYXdsL01TXFxuc2hheS9NU1xcbnNoZSdkXFxuc2hlJ2xsXFxuc2hlL0RTTVxcbnNoZWFmL01cXG5zaGVhci9NRFJTWkdcXG5zaGVhcmVyL01cXG5zaGVhdGgvSk1cXG5zaGVhdGhlL1VHRFNcXG5zaGVhdGhpbmcvTVxcbnNoZWF0aHNcXG5zaGVhdmUvRFNNR1xcbnNoZWJhbmcvTVNcXG5zaGViZWVuL1NcXG5zaGVkL01TXFxuc2hlZGRpbmdcXG5zaGVlbi9NXFxuc2hlZW55L1RSXFxuc2hlZXAvTVxcbnNoZWVwZG9nL01TXFxuc2hlZXBmb2xkL1NNXFxuc2hlZXBoZXJkZXIvTVNcXG5zaGVlcGlzaC9ZUFxcbnNoZWVwaXNobmVzcy9NXFxuc2hlZXBza2luL01TXFxuc2hlZXIvTURSU1BUR1xcbnNoZWVybmVzcy9NXFxuc2hlZXQvTVNHXFxuc2hlZXRpbmcvTVxcbnNoZWV0bGlrZVxcbnNoZWlrZG9tL01TXFxuc2hlaWtoL01cXG5zaGVpa2hzXFxuc2hlaWxhL1NcXG5zaGVrZWwvU01cXG5zaGVsZi9NXFxuc2hlbGwvTURSU0dcXG5zaGVsbGFjL01TXFxuc2hlbGxhY2tlZFxcbnNoZWxsYWNraW5nL01TXFxuc2hlbGxmaXJlL01cXG5zaGVsbGZpc2gvTVNcXG5zaGVsdGVyL0dNRFNcXG5zaGVsdmUvR0RTXFxuc2hlbHZpbmcvTVxcbnNoZW5hbmlnYW4vU01cXG5zaGVwaGVyZC9TTURHXFxuc2hlcGhlcmRlc3MvTVNcXG5zaGVyYmV0L1NNXFxuc2hlcmlmZi9TTVxcbnNoZXJyeS9TTVxcbnNoZXcvR0RTXFxuc2hld25cXG5zaGhcXG5zaGlhdHN1L01cXG5zaGliYm9sZXRoL01cXG5zaGliYm9sZXRoc1xcbnNoaWVsZC9NREdTXFxuc2hpZnQvR01EU1xcbnNoaWZ0aWx5XFxuc2hpZnRpbmVzcy9NXFxuc2hpZnRsZXNzL1BZXFxuc2hpZnRsZXNzbmVzcy9NXFxuc2hpZnR5L1JQVFxcbnNoaWl0YWtlL1NNXFxuc2hpbGwvR01EU0pcXG5zaGlsbGVsYWdoL01cXG5zaGlsbGVsYWdoc1xcbnNoaWxsaW5nL01cXG5zaGltL01TXFxuc2hpbW1lZFxcbnNoaW1tZXIvU01ER1xcbnNoaW1tZXJ5XFxuc2hpbW1pbmdcXG5zaGltbXkvRFNNR1xcbnNoaW4vWkdNRFJTXFxuc2hpbmJvbmUvU01cXG5zaGluZGlnL1NNXFxuc2hpbmUvTVNcXG5zaGluZXIvTVxcbnNoaW5nbGUvRFNNR1xcbnNoaW5ndWFyZC9NXFxuc2hpbmluZXNzL01cXG5zaGlubmVkXFxuc2hpbm5pbmdcXG5zaGlubnkvRFNHXFxuc2hpbnNwbGludHMvTVxcbnNoaW55L1RSUFxcbnNoaXAnc1xcbnNoaXAvQUxTXFxuc2hpcGJvYXJkL01TXFxuc2hpcGJ1aWxkZXIvU01cXG5zaGlwYnVpbGRpbmcvTVxcbnNoaXBsb2FkL1NNXFxuc2hpcG1hdGUvU01cXG5zaGlwbWVudC9BTVxcbnNoaXBtZW50c1xcbnNoaXBvd25lci9NU1xcbnNoaXBwZWQvQVxcbnNoaXBwZXIvU01cXG5zaGlwcGluZy9NXFxuc2hpcHNoYXBlXFxuc2hpcHdyZWNrL0dNRFNcXG5zaGlwd3JpZ2h0L01TXFxuc2hpcHlhcmQvU01cXG5zaGlyZS9NU1xcbnNoaXJrL1pHRFJTXFxuc2hpcmtlci9NXFxuc2hpcnIvR01EU0pcXG5zaGlycmluZy9NXFxuc2hpcnQvR01EU1xcbnNoaXJ0ZnJvbnQvU01cXG5zaGlydGluZy9NXFxuc2hpcnRsZXNzXFxuc2hpcnRzbGVldmUvU01cXG5zaGlydHRhaWwvU01cXG5zaGlydHdhaXN0L01TXFxuc2hpcnR5XFxuc2hpdC9TTSFcXG5zaGl0ZmFjZWQvIVxcbnNoaXRoZWFkL1MhXFxuc2hpdGxvYWQvIVxcbnNoaXR0ZWQvIVxcbnNoaXR0aW5nLyFcXG5zaGl0dHkvUlQhXFxuc2hpdi9aTVJTXFxuc2hpdmVyL01ER1xcbnNoaXZlcnlcXG5zaG9hbC9HTURTXFxuc2hvYXQvTVNcXG5zaG9jay9aR01EUlNcXG5zaG9ja2VyL01cXG5zaG9ja2luZy9ZXFxuc2hvY2twcm9vZlxcbnNob2QvVVxcbnNob2RkaWx5XFxuc2hvZGRpbmVzcy9NXFxuc2hvZGR5L1BSTVRcXG5zaG9lL01TXFxuc2hvZWhvcm4vR01EU1xcbnNob2VpbmdcXG5zaG9lbGFjZS9NU1xcbnNob2VtYWtlci9TTVxcbnNob2VzaGluZS9TTVxcbnNob2VzdHJpbmcvU01cXG5zaG9ldHJlZS9NU1xcbnNob2d1bi9NU1xcbnNob2d1bmF0ZS9NXFxuc2hvbmVcXG5zaG9vL0dEU1xcbnNob29rXFxuc2hvb3QvWkdNUlNKXFxuc2hvb3Rlci9NXFxuc2hvb3RpbmcvTVxcbnNob290b3V0L01TXFxuc2hvcC9NU1xcbnNob3BhaG9saWMvTVNcXG5zaG9wZml0dGVyL1NcXG5zaG9wZml0dGluZ1xcbnNob3Bmcm9udC9TXFxuc2hvcGtlZXBlci9NU1xcbnNob3BsaWZ0L0RSWkdTXFxuc2hvcGxpZnRlci9NXFxuc2hvcGxpZnRpbmcvTVxcbnNob3BwZS9NWkdEUlNcXG5zaG9wcGVyL01cXG5zaG9wcGluZy9NXFxuc2hvcHRhbGsvTVxcbnNob3B3b3JuXFxuc2hvcmUvTUdEU1xcbnNob3JlYmlyZC9TTVxcbnNob3JlbGluZS9NU1xcbnNob3JpbmcvTVxcbnNob3J0L1hUR01ETlJZU1BcXG5zaG9ydGFnZS9NU1xcbnNob3J0YnJlYWQvTVxcbnNob3J0Y2FrZS9NU1xcbnNob3J0Y2hhbmdlL0RTR1xcbnNob3J0Y29taW5nL01TXFxuc2hvcnRjcnVzdFxcbnNob3J0Y3V0L01TXFxuc2hvcnRlbi9KR0RcXG5zaG9ydGVuaW5nL01cXG5zaG9ydGZhbGwvTVNcXG5zaG9ydGhhbmQvTURcXG5zaG9ydGhvcm4vTVNcXG5zaG9ydGlzaFxcbnNob3J0bGlzdC9ER1NcXG5zaG9ydG5lc3MvTVxcbnNob3J0c2lnaHRlZC9QWVxcbnNob3J0c2lnaHRlZG5lc3MvTVxcbnNob3J0c3RvcC9NU1xcbnNob3J0d2F2ZS9NU1xcbnNob3J0eS9TTVxcbnNob3QvTVNcXG5zaG90Z3VuL1NNXFxuc2hvdGd1bm5lZFxcbnNob3RndW5uaW5nXFxuc2hvdWxkXFxuc2hvdWxkJ3ZlXFxuc2hvdWxkZXIvTURHU1xcbnNob3VsZG4ndFxcbnNob3V0L1pHTURSU1xcbnNob3V0ZXIvTVxcbnNob3ZlL01HRFNcXG5zaG92ZWwvTURTR1xcbnNob3ZlbGZ1bC9TTVxcbnNob3cvSlpHTURSU1xcbnNob3diaXovTVxcbnNob3dib2F0L01ER1NcXG5zaG93Y2FzZS9NR0RTXFxuc2hvd2Rvd24vTVNcXG5zaG93ZXIvTURHXFxuc2hvd2VycHJvb2ZcXG5zaG93ZXJ5XFxuc2hvd2dpcmwvTVNcXG5zaG93Z3JvdW5kL1NcXG5zaG93aWx5XFxuc2hvd2luZXNzL01cXG5zaG93aW5nL01cXG5zaG93anVtcGluZ1xcbnNob3dtYW4vTVxcbnNob3dtYW5zaGlwL01cXG5zaG93bWVuXFxuc2hvd25cXG5zaG93b2ZmL1NNXFxuc2hvd3BpZWNlL1NNXFxuc2hvd3BsYWNlL1NNXFxuc2hvd3Jvb20vTVNcXG5zaG93c3RvcHBlci9NU1xcbnNob3dzdG9wcGluZ1xcbnNob3d0aW1lXFxuc2hvd3kvVFJQXFxuc2hwdFxcbnNocmFua1xcbnNocmFwbmVsL01cXG5zaHJlZC9NU1xcbnNocmVkZGVkXFxuc2hyZWRkZXIvTVNcXG5zaHJlZGRpbmdcXG5zaHJldy9NU1xcbnNocmV3ZC9SWVBUXFxuc2hyZXdkbmVzcy9NXFxuc2hyZXdpc2hcXG5zaHJpZWsvTURTR1xcbnNocmlmdC9NXFxuc2hyaWtlL01TXFxuc2hyaWxsL0RSU1BUR1xcbnNocmlsbG5lc3MvTVxcbnNocmlsbHlcXG5zaHJpbXAvTURSU1pHXFxuc2hyaW5lL01TXFxuc2hyaW5rL01TQkdcXG5zaHJpbmthZ2UvTVxcbnNocml2ZS9HRFNcXG5zaHJpdmVsL1NHRFxcbnNocml2ZW5cXG5zaHJvdWQvR01EU1xcbnNocnViL01TXFxuc2hydWJiZXJ5L1NNXFxuc2hydWJieS9SVFxcbnNocnVnL01TXFxuc2hydWdnZWRcXG5zaHJ1Z2dpbmdcXG5zaHJ1bmsvTlxcbnNodGljay9NU1xcbnNodWNrL0dNRFNcXG5zaHVja3MvU1xcbnNodWRkZXIvTURTR1xcbnNodWZmbGUvQU1HRFNcXG5zaHVmZmxlYm9hcmQvU01cXG5zaHVmZmxlci9TTVxcbnNodW4vU1xcbnNodW5uZWRcXG5zaHVubmluZ1xcbnNodW50L01TREdcXG5zaHVzaC9EU0dcXG5zaHV0L1NcXG5zaHV0ZG93bi9TTVxcbnNodXRleWUvTVxcbnNodXRvZmYvU01cXG5zaHV0b3V0L1NNXFxuc2h1dHRlci9TTURHXFxuc2h1dHRlcmJ1Zy9NU1xcbnNodXR0aW5nXFxuc2h1dHRsZS9EU01HXFxuc2h1dHRsZWNvY2svR01EU1xcbnNoeS9UR0RSU01ZXFxuc2h5ZXJcXG5zaHllc3RcXG5zaHluZXNzL01cXG5zaHlzdGVyL1NNXFxuc2liaWxhbnQvU01cXG5zaWJsaW5nL1NNXFxuc2lieWwvTVNcXG5zaWJ5bGxpbmVcXG5zaWMvU1xcbnNpY2NlZFxcbnNpY2NpbmdcXG5zaWNrL1BYVEdETlJZU1xcbnNpY2tiYXkvU1xcbnNpY2tiZWQvU01cXG5zaWNrZW4vREdcXG5zaWNrZW5pbmcvWVxcbnNpY2tpZS9NU1xcbnNpY2tpc2hcXG5zaWNrbGUvTVNcXG5zaWNrbHkvUlRcXG5zaWNrbmVzcy9NU1xcbnNpY2tvL01TXFxuc2lja291dC9TTVxcbnNpY2tyb29tL01TXFxuc2lkZSdzXFxuc2lkZS9BR0RTXFxuc2lkZWFybS9TTVxcbnNpZGViYXIvU01cXG5zaWRlYm9hcmQvU01cXG5zaWRlYnVybnMvTVxcbnNpZGVjYXIvU01cXG5zaWRla2ljay9TTVxcbnNpZGVsaWdodC9NU1xcbnNpZGVsaW5lL0RTTUdcXG5zaWRlbG9uZ1xcbnNpZGVtYW4vTVxcbnNpZGVtZW5cXG5zaWRlcGllY2UvTVNcXG5zaWRlcmVhbFxcbnNpZGVzYWRkbGUvTVNcXG5zaWRlc2hvdy9NU1xcbnNpZGVzcGxpdHRpbmdcXG5zaWRlc3RlcC9NU1xcbnNpZGVzdGVwcGVkXFxuc2lkZXN0ZXBwaW5nXFxuc2lkZXN0cm9rZS9EU01HXFxuc2lkZXN3aXBlL0RTTUdcXG5zaWRldHJhY2svU01ER1xcbnNpZGV3YWxrL01TXFxuc2lkZXdhbGwvTVNcXG5zaWRld2F5c1xcbnNpZGV3aW5kZXIvU01cXG5zaWRpbmcvTVNcXG5zaWRsZS9NR0RTXFxuc2llZ2UvTVNcXG5zaWVubmEvTVxcbnNpZXJyYS9NU1xcbnNpZXN0YS9NU1xcbnNpZXZlL01HRFNcXG5zaWZ0L1pHRFJTXFxuc2lmdGVkL1VcXG5zaWZ0ZXIvTVxcbnNpZ2gvR01EXFxuc2lnaHNcXG5zaWdodC9HTURZU0pcXG5zaWdodGluZy9NXFxuc2lnaHRsZXNzXFxuc2lnaHRseS9VVFJcXG5zaWdodHJlYWRcXG5zaWdodHNlZWluZy9NXFxuc2lnaHRzZWVyL01TXFxuc2lnbWEvTVNcXG5zaWduJ3MvQ1xcbnNpZ24vQUZDR0RTXFxuc2lnbmFnZS9NXFxuc2lnbmFsL01EUllTWkdcXG5zaWduYWxlci9NXFxuc2lnbmFsaXphdGlvbi9NXFxuc2lnbmFsaXplL0dEU1xcbnNpZ25hbG1hbi9NXFxuc2lnbmFsbWVuXFxuc2lnbmF0b3J5L1NNXFxuc2lnbmF0dXJlL01TXFxuc2lnbmJvYXJkL01TXFxuc2lnbmVkL1VcXG5zaWduZXIvQ01TXFxuc2lnbmV0L01TXFxuc2lnbmlmaWNhbmNlL0lNXFxuc2lnbmlmaWNhbnQvSVlcXG5zaWduaWZpY2F0aW9uL01cXG5zaWduaWZ5L1hEU05HXFxuc2lnbmluZydzL0NcXG5zaWduaW5nc1xcbnNpZ25vci9GTVNcXG5zaWdub3JhL1NNXFxuc2lnbm9yZVxcbnNpZ25vcmlcXG5zaWdub3JpbmEvTVNcXG5zaWdub3JpbmVcXG5zaWducG9zdC9HU01EXFxuc2lsYWdlL01cXG5zaWxlbmNlL0RSU01aR1xcbnNpbGVuY2VyL01cXG5zaWxlbnQvTVJZU1RcXG5zaWxob3VldHRlL0RTTUdcXG5zaWxpY2EvTVxcbnNpbGljYXRlL01TXFxuc2lsaWNlb3VzXFxuc2lsaWNvbi9TTVxcbnNpbGljb25lL01cXG5zaWxpY29zaXMvTVxcbnNpbGsvTU5TXFxuc2lsa2lseVxcbnNpbGtpbmVzcy9NXFxuc2lsa3NjcmVlbi9TTVxcbnNpbGt3b3JtL01TXFxuc2lsa3kvVFJQXFxuc2lsbC9NU1xcbnNpbGxpbmVzcy9NXFxuc2lsbHkvVFJTTVBcXG5zaWxvL01TXFxuc2lsdC9HTURTXFxuc2lsdHkvVFJcXG5zaWx2ZXIvR01EU1xcbnNpbHZlcmZpc2gvTVNcXG5zaWx2ZXJzbWl0aC9NXFxuc2lsdmVyc21pdGhzXFxuc2lsdmVyd2FyZS9NXFxuc2lsdmVyeVxcbnNpbS9TTVxcbnNpbWlhbi9NU1xcbnNpbWlsYXIvWVxcbnNpbWlsYXJpdHkvRVNNXFxuc2ltaWxlL01TXFxuc2ltaWxpdHVkZS9FTVxcbnNpbW1lci9HTURTXFxuc2ltb25pemUvRFNHXFxuc2ltb255L01cXG5zaW1wYXRpY29cXG5zaW1wZXIvR01EU1xcbnNpbXBlcmluZy9ZXFxuc2ltcGxlL1RSUFxcbnNpbXBsZW1pbmRlZFxcbnNpbXBsZW5lc3MvTVxcbnNpbXBsZXRvbi9TTVxcbnNpbXBsZXhcXG5zaW1wbGljaXR5L01cXG5zaW1wbGlmaWNhdGlvbi9NXFxuc2ltcGxpZnkvRFNYTkdcXG5zaW1wbGlzdGljXFxuc2ltcGxpc3RpY2FsbHlcXG5zaW1wbHlcXG5zaW11bGFjcmFcXG5zaW11bGFjcnVtL1NcXG5zaW11bGF0ZS9FRFNHTlxcbnNpbXVsYXRpb24vRU1cXG5zaW11bGF0aW9uc1xcbnNpbXVsYXRvci9FTVNcXG5zaW11bGNhc3QvR01EU1xcbnNpbXVsdGFuZWl0eS9NXFxuc2ltdWx0YW5lb3VzL1lcXG5zaW4vQVNNXFxuc2luY2VcXG5zaW5jZXJlL0lZVFxcbnNpbmNlcmVyXFxuc2luY2VyaXR5L0lNXFxuc2luZS9NU1xcbnNpbmVjdXJlL01TXFxuc2luZXcvTVNcXG5zaW5ld3lcXG5zaW5mdWwvUFlcXG5zaW5mdWxuZXNzL01cXG5zaW5nL0JaR01EUllTXFxuc2luZ2Fsb25nL1NcXG5zaW5nZS9NU1xcbnNpbmdlaW5nXFxuc2luZ2VyL01cXG5zaW5naW5nL01cXG5zaW5nbGUvUE1HRFNcXG5zaW5nbGVuZXNzL01cXG5zaW5nbGVzL01cXG5zaW5nbGV0L1NcXG5zaW5nbGV0b24vU01cXG5zaW5nbGV0cmVlL1NNXFxuc2luZ3NvbmcvU01ER1xcbnNpbmd1bGFyL1NNWVxcbnNpbmd1bGFyaXR5L1NNXFxuc2luaXN0ZXJcXG5zaW5rL0JaR01SU1xcbnNpbmthYmxlL1VcXG5zaW5rZXIvTVxcbnNpbmtob2xlL1NNXFxuc2lubGVzc1xcbnNpbm5lZFxcbnNpbm5lci9NU1xcbnNpbm5pbmdcXG5zaW5vbG9neVxcbnNpbnVvc2l0eS9NXFxuc2ludW91cy9ZXFxuc2ludXMvTVNcXG5zaW51c2l0aXMvTVxcbnNpbnVzb2lkYWxcXG5zaXAvU01cXG5zaXBob24vR01EU1xcbnNpcHBlZFxcbnNpcHBlci9TTVxcbnNpcHBpbmdcXG5zaXIvU1hNTlxcbnNpcmUvQ01HRFNcXG5zaXJlbi9NXFxuc2lybG9pbi9TTVxcbnNpcm9jY28vU01cXG5zaXJyYWhcXG5zaXJyZWUvTVxcbnNpcy9NU1xcbnNpc2FsL01cXG5zaXNzaWZpZWRcXG5zaXNzeS9SU01UXFxuc2lzdGVyL0FTTVxcbnNpc3Rlcmhvb2QvTVNcXG5zaXN0ZXJsaW5lc3MvTVxcbnNpc3Rlcmx5L1BcXG5zaXQvU1xcbnNpdGFyL1NNXFxuc2l0YXJpc3QvTVNcXG5zaXRjb20vU01cXG5zaXRlL01HRFNcXG5zaXRlbWFwL1NNXFxuc2l0dGVyL1NNXFxuc2l0dGluZy9TTVxcbnNpdHVcXG5zaXR1YXRlL0RTWEdOXFxuc2l0dWF0aW9uL01cXG5zaXR1YXRpb25hbFxcbnNpeC9NU0hcXG5zaXhmb2xkXFxuc2l4cGVuY2UvTVNcXG5zaXhzaG9vdGVyL01cXG5zaXh0ZWVuL1NNSFxcbnNpeHRlZW50aC9NXFxuc2l4dGVlbnRoc1xcbnNpeHRoL01cXG5zaXh0aHNcXG5zaXh0aWV0aC9NXFxuc2l4dGlldGhzXFxuc2l4dHkvU01IXFxuc2l6YWJsZVxcbnNpemUnc1xcbnNpemUvQUdEU1xcbnNpemVyXFxuc2l6aW5nL01cXG5zaXp6bGUvRFJTTVpHXFxuc2thL01cXG5za2F0ZS9NWkdEUlNcXG5za2F0ZWJvYXJkL01EUlNaR1xcbnNrYXRlYm9hcmRlci9NXFxuc2thdGVib2FyZGluZy9NXFxuc2thdGVyL01cXG5za2F0aW5nL01cXG5za2VkYWRkbGUvTUdEU1xcbnNrZWV0L1pNUlxcbnNrZWluL01TXFxuc2tlbGV0YWxcXG5za2VsZXRvbi9TTVxcbnNrZXB0aWMvU01cXG5za2VwdGljYWwvWVxcbnNrZXB0aWNpc20vTVxcbnNrZXRjaC9NRFJTWkdcXG5za2V0Y2hib29rL1NcXG5za2V0Y2hlci9NXFxuc2tldGNoaWx5XFxuc2tldGNoaW5lc3MvTVxcbnNrZXRjaHBhZC9TXFxuc2tldGNoeS9SVFBcXG5za2V3L01EUlpHU1xcbnNrZXdiYWxkL1NcXG5za2V3ZXIvTURHXFxuc2tpL1NaR01EUlxcbnNraWJvYi9TXFxuc2tpZC9NU1xcbnNraWRkZWRcXG5za2lkZGluZ1xcbnNraWRwYW4vU1xcbnNraWVyL01cXG5za2lmZi9TTVxcbnNraWZmbGVcXG5za2lpbmcvTVxcbnNraWxsJ3NcXG5za2lsbC9DU0RcXG5za2lsbGVkL1VcXG5za2lsbGV0L1NNXFxuc2tpbGxmdWwvVVlcXG5za2lsbGZ1bG5lc3MvTVxcbnNraW0vTVNcXG5za2ltbWVkXFxuc2tpbW1lci9TTVxcbnNraW1taW5nXFxuc2tpbXAvU0RHXFxuc2tpbXBpbHlcXG5za2ltcGluZXNzL01cXG5za2ltcHkvUlRQXFxuc2tpbi9NU1xcbnNraW5jYXJlL01cXG5za2luZmxpbnQvTVNcXG5za2luZnVsXFxuc2tpbmhlYWQvTVNcXG5za2lubGVzc1xcbnNraW5uZWRcXG5za2lubmluZXNzL01cXG5za2lubmluZ1xcbnNraW5ueS9STVRQXFxuc2tpbnRcXG5za2ludGlnaHRcXG5za2lwL01TXFxuc2tpcHBlZFxcbnNraXBwZXIvU01ER1xcbnNraXBwaW5nXFxuc2tpcm1pc2gvWkdNRFJTXFxuc2tpcnQvU01ER1xcbnNraXQvTVNcXG5za2l0dGVyL0dTRFxcbnNraXR0aXNoL1lQXFxuc2tpdHRpc2huZXNzL01cXG5za2l0dGxlL1NcXG5za2l2ZS9EUlNaR1xcbnNraXZ2eS9EU01HXFxuc2tvYWwvU01cXG5za3VhL1NcXG5za3VsZHVnZ2VyeS9NXFxuc2t1bGsvU0RSWkdcXG5za3Vsa2VyL01cXG5za3VsbC9TTVxcbnNrdWxsY2FwL01TXFxuc2t1bmsvU01ER1xcbnNreS9HU01cXG5za3ljYXAvU01cXG5za3lkaXZlL0RSU1pHXFxuc2t5ZGl2ZXIvTVxcbnNreWRpdmluZy9NXFxuc2t5amFjay9KWkdTRFJcXG5za3lqYWNrZXIvTVxcbnNreWphY2tpbmcvTVxcbnNreWxhcmsvU0dNRFxcbnNreWxpZ2h0L01TXFxuc2t5bGluZS9TTVxcbnNreXJvY2tldC9HU01EXFxuc2t5c2NyYXBlci9TTVxcbnNreXdhcmQvU1xcbnNreXdyaXRlci9TTVxcbnNreXdyaXRpbmcvTVxcbnNsYWIvTVNcXG5zbGFiYmVkXFxuc2xhYmJpbmdcXG5zbGFjay9QWFpUR01ETlJZU1xcbnNsYWNrZW4vREdcXG5zbGFja2VyL01cXG5zbGFja25lc3MvTVxcbnNsYWNrcy9NXFxuc2xhZy9NU1xcbnNsYWdnZWRcXG5zbGFnZ2luZ1xcbnNsYWdoZWFwL1NcXG5zbGFpblxcbnNsYWtlL0dEU1xcbnNsYWxvbS9NU0RHXFxuc2xhbS9NU1xcbnNsYW1tZWRcXG5zbGFtbWVyL1NNXFxuc2xhbW1pbmdcXG5zbGFuZGVyL01aR0RSU1xcbnNsYW5kZXJlci9NXFxuc2xhbmRlcm91c1xcbnNsYW5nL01cXG5zbGFuZ3kvUlRcXG5zbGFudC9NU0RHXFxuc2xhbnRpbmcvWVxcbnNsYW50d2lzZVxcbnNsYXAvTVNcXG5zbGFwZGFzaFxcbnNsYXBoYXBweVxcbnNsYXBwZWRcXG5zbGFwcGVyL1NcXG5zbGFwcGluZ1xcbnNsYXBzdGljay9NXFxuc2xhc2gvTURSU1pHXFxuc2xhc2hlci9NXFxuc2xhdC9NREdTXFxuc2xhdGUvU01cXG5zbGF0aGVyL1NER1xcbnNsYXR0ZWRcXG5zbGF0dGVybi9TTVlcXG5zbGF1Z2h0ZXIvTURSWkdTXFxuc2xhdWdodGVyZXIvTVxcbnNsYXVnaHRlcmhvdXNlL01TXFxuc2xhdmUvRFJTTVpHXFxuc2xhdmVob2xkZXIvTVNcXG5zbGF2ZXIvTURHXFxuc2xhdmVyeS9NXFxuc2xhdmlzaC9QWVxcbnNsYXZpc2huZXNzL01cXG5zbGF3L01cXG5zbGF5L0RSWkdKU1xcbnNsYXllci9NXFxuc2xheWluZy9NXFxuc2xlYXplL1NNXFxuc2xlYXplYmFnL1NcXG5zbGVhemViYWxsL1NcXG5zbGVhemlseVxcbnNsZWF6aW5lc3MvTVxcbnNsZWF6eS9QUlRcXG5zbGVkL01TXFxuc2xlZGRlZFxcbnNsZWRkZXIvU01cXG5zbGVkZGluZ1xcbnNsZWRnZS9EU01HXFxuc2xlZGdlaGFtbWVyL0dTTURcXG5zbGVlay9TRFJZVEdQXFxuc2xlZWtuZXNzL01cXG5zbGVlcC9TTVJaR1xcbnNsZWVwZXIvTVxcbnNsZWVwaWx5XFxuc2xlZXBpbmVzcy9NXFxuc2xlZXBsZXNzL1BZXFxuc2xlZXBsZXNzbmVzcy9NXFxuc2xlZXBvdmVyL1NNXFxuc2xlZXB3YWxrL1pHU0RSXFxuc2xlZXB3YWxrZXIvTVxcbnNsZWVwd2Fsa2luZy9NXFxuc2xlZXB3ZWFyL01cXG5zbGVlcHkvUlBUXFxuc2xlZXB5aGVhZC9NU1xcbnNsZWV0L1NNREdcXG5zbGVldHlcXG5zbGVldmUvRFNNXFxuc2xlZXZlbGVzc1xcbnNsZWlnaC9NREdcXG5zbGVpZ2hzXFxuc2xlaWdodC9TTVxcbnNsZW5kZXIvUFJUXFxuc2xlbmRlcml6ZS9EU0dcXG5zbGVuZGVybmVzcy9NXFxuc2xlcHRcXG5zbGV1dGgvTUdcXG5zbGV1dGhzXFxuc2xldy9NREdTXFxuc2xpY2UvRFJTTVpHXFxuc2xpY2VyL01cXG5zbGljay9TTURSWVpUR1BcXG5zbGlja2VyL01cXG5zbGlja25lc3MvTVxcbnNsaWRcXG5zbGlkZS9SU01aR1xcbnNsaWRlci9NXFxuc2xpZGVzaG93L01TXFxuc2xpZ2h0L1NNRFJZVEdQXFxuc2xpZ2h0bmVzcy9NXFxuc2xpbS9QU1xcbnNsaW1lL01cXG5zbGltaW5lc3MvTVxcbnNsaW1saW5lXFxuc2xpbW1lZFxcbnNsaW1tZXIvU1xcbnNsaW1tZXN0XFxuc2xpbW1pbmcvTVxcbnNsaW1uZXNzL01cXG5zbGlteS9SVFBcXG5zbGluZy9TTUdcXG5zbGluZ2JhY2svU1xcbnNsaW5nc2hvdC9TTVxcbnNsaW5rL1NHXFxuc2xpbmt5L1JUXFxuc2xpcC9NU1xcbnNsaXBjYXNlL01TXFxuc2xpcGNvdmVyL01TXFxuc2xpcGtub3QvTVNcXG5zbGlwcGFnZS9NU1xcbnNsaXBwZWRcXG5zbGlwcGVyL1NNXFxuc2xpcHBlcmluZXNzL01cXG5zbGlwcGVyeS9QUlRcXG5zbGlwcGluZ1xcbnNsaXBweVxcbnNsaXBzaG9kXFxuc2xpcHN0cmVhbS9TTVxcbnNsaXB3YXkvU01cXG5zbGl0L01TXFxuc2xpdGhlci9TR01EXFxuc2xpdGhlcnlcXG5zbGl0dGVyXFxuc2xpdHRpbmdcXG5zbGl2ZXIvR1NNRFxcbnNsb2IvTVNcXG5zbG9iYmVkXFxuc2xvYmJlci9NRFNHXFxuc2xvYmJlcnlcXG5zbG9iYmluZ1xcbnNsb2UvTVNcXG5zbG9nL01TXFxuc2xvZ2FuL1NNXFxuc2xvZ2FuZWVyaW5nXFxuc2xvZ2dlZFxcbnNsb2dnaW5nXFxuc2xvb3AvU01cXG5zbG9wL01ER1NcXG5zbG9wZS9TTVxcbnNsb3BwZWRcXG5zbG9wcGlseVxcbnNsb3BwaW5lc3MvTVxcbnNsb3BwaW5nXFxuc2xvcHB5L1BUUlxcbnNsb3BzL01cXG5zbG9zaC9EU0dcXG5zbG90L01TXFxuc2xvdGgvTVxcbnNsb3RoZnVsL1lQXFxuc2xvdGhmdWxuZXNzL01cXG5zbG90aHNcXG5zbG90dGVkXFxuc2xvdHRpbmdcXG5zbG91Y2gvWkdNRFJTXFxuc2xvdWNoZXIvTVxcbnNsb3VjaHkvVFJcXG5zbG91Z2gvR01EXFxuc2xvdWdoc1xcbnNsb3Zlbi9TTVlcXG5zbG92ZW5saW5lc3MvTVxcbnNsb3Zlbmx5L1BUUlxcbnNsb3cvRFJZVEdTUFxcbnNsb3djb2FjaC9TXFxuc2xvd2Rvd24vU01cXG5zbG93bmVzcy9NXFxuc2xvd3Bva2UvU01cXG5zbHVkZ2UvTVxcbnNsdWRneS9SVFxcbnNsdWUvTUdEU1xcbnNsdWcvTVNcXG5zbHVnZ2FyZC9NU1xcbnNsdWdnZWRcXG5zbHVnZ2VyL1NNXFxuc2x1Z2dpbmdcXG5zbHVnZ2lzaC9QWVxcbnNsdWdnaXNobmVzcy9NXFxuc2x1aWNlL0RTTUdcXG5zbHVtL01TXFxuc2x1bWJlci9HU01EXFxuc2x1bWJlcm91c1xcbnNsdW1kb2cvU01cXG5zbHVtbG9yZC9NU1xcbnNsdW1tZWRcXG5zbHVtbWVyXFxuc2x1bW1pbmdcXG5zbHVtbXkvUlRcXG5zbHVtcC9TTURHXFxuc2x1bmdcXG5zbHVua1xcbnNsdXIvTVNcXG5zbHVycC9TTURHXFxuc2x1cnJlZFxcbnNsdXJyaW5nXFxuc2x1cnJ5L01cXG5zbHVzaC9NXFxuc2x1c2hpbmVzcy9NXFxuc2x1c2h5L1JQVFxcbnNsdXQvTVNcXG5zbHV0dGlzaFxcbnNsdXR0eS9SVFxcbnNseS9UUllcXG5zbHluZXNzL01cXG5zbWFjay9TTURSWkdcXG5zbWFja2VyL01cXG5zbWFsbC9TTVJUUFxcbnNtYWxsaG9sZGVyL1NcXG5zbWFsbGhvbGRpbmcvU1xcbnNtYWxsaXNoXFxuc21hbGxuZXNzL01cXG5zbWFsbHBveC9NXFxuc21hcm15L1JUXFxuc21hcnQvU01ETlJZWFRHUFxcbnNtYXJ0ZW4vREdcXG5zbWFydG5lc3MvTVxcbnNtYXJ0cGhvbmUvU01cXG5zbWFydHMvTVxcbnNtYXJ0d2F0Y2gvTVNcXG5zbWFydHkvU01cXG5zbWFydHlwYW50cy9NXFxuc21hc2gvTURSU1pHXFxuc21hc2hlci9NXFxuc21hc2h1cC9TTVxcbnNtYXR0ZXJpbmcvTVNcXG5zbWVhci9TTURHXFxuc21lYXJ5L1JUXFxuc21lbGwvU01ER1xcbnNtZWxsaW5lc3MvTVxcbnNtZWxseS9SUFRcXG5zbWVsdC9TTURSWkdcXG5zbWVsdGVyL01cXG5zbWlkZ2VuL01TXFxuc21pbGF4L01cXG5zbWlsZS9EU01HXFxuc21pbGV5L1NNXFxuc21pbGluZy9ZXFxuc21pcmNoL0dNRFNcXG5zbWlyay9TTURHXFxuc21pdGUvU0dcXG5zbWl0aC9NXFxuc21pdGhlcmVlbnMvTVxcbnNtaXRoc1xcbnNtaXRoeS9TTVxcbnNtaXR0ZW5cXG5zbW9jay9TTURHXFxuc21vY2tpbmcvTVxcbnNtb2cvTVNcXG5zbW9nZ3kvUlRcXG5zbW9rZS9EUlNNWkdcXG5zbW9rZWhvdXNlL01TXFxuc21va2VsZXNzXFxuc21va2VyL01cXG5zbW9rZXNjcmVlbi9TTVxcbnNtb2tlc3RhY2svU01cXG5zbW9rZXlcXG5zbW9raW5lc3MvTVxcbnNtb2tpbmcvTVxcbnNtb2t5L1JUUFxcbnNtb2xkZXIvU0dNRFxcbnNtb29jaC9NRFNHXFxuc21vb2NoeVxcbnNtb290aC9QRFJZVEdcXG5zbW9vdGhpZS9NU1xcbnNtb290aG5lc3MvTVxcbnNtb290aHNcXG5zbW9yZ2FzYm9yZC9TTVxcbnNtb3RlXFxuc21vdGhlci9HU01EXFxuc211ZGdlL0RTTUdcXG5zbXVkZ3kvVFJcXG5zbXVnL1lQXFxuc211Z2dlclxcbnNtdWdnZXN0XFxuc211Z2dsZS9aR0RSU1xcbnNtdWdnbGVyL01cXG5zbXVnZ2xpbmcvTVxcbnNtdWduZXNzL01cXG5zbXVyZi9TXFxuc211dC9NU1xcbnNtdXR0aW5lc3MvTVxcbnNtdXR0eS9UUlBcXG5zbmFjay9TTURHXFxuc25hZmZsZS9EU01HXFxuc25hZnUvU01cXG5zbmFnL01TXFxuc25hZ2dlZFxcbnNuYWdnaW5nXFxuc25haWwvU01ER1xcbnNuYWtlL0RTTUdcXG5zbmFrZWJpdGUvTVNcXG5zbmFrZWxpa2VcXG5zbmFrZXNraW5cXG5zbmFreS9SVFxcbnNuYXAnc1xcbnNuYXAvVVNcXG5zbmFwZHJhZ29uL1NNXFxuc25hcHBlZC9VXFxuc25hcHBlci9NU1xcbnNuYXBwaWx5XFxuc25hcHBpbmVzcy9NXFxuc25hcHBpbmcvVVxcbnNuYXBwaXNoL1lQXFxuc25hcHBpc2huZXNzL01cXG5zbmFwcHkvVFJQXFxuc25hcHNob3QvU01cXG5zbmFyZS9EU01HXFxuc25hcmYvU0RHXFxuc25hcmsvU1xcbnNuYXJreS9UUlxcbnNuYXJsJ3NcXG5zbmFybC9VU0RHXFxuc25hcmxpbmcvWVxcbnNuYXJseS9UUlxcbnNuYXRjaC9aR01EUlNcXG5zbmF0Y2hlci9NXFxuc25henppbHlcXG5zbmF6enkvVFJcXG5zbmVhay9TTURSWkdcXG5zbmVha2VyL01cXG5zbmVha2lseVxcbnNuZWFraW5lc3MvTVxcbnNuZWFraW5nL1lcXG5zbmVha3kvVFJQXFxuc25lZXIvU0pNREdcXG5zbmVlcmluZy9ZXFxuc25lZXplL0RTTUdcXG5zbmljay9TRFJaR1xcbnNuaWNrZXIvTURHXFxuc25pZGUvUllUXFxuc25pZmYvU01EUlpHXFxuc25pZmZlci9NXFxuc25pZmZsZS9EU01HXFxuc25pZmZ5L1JUXFxuc25pZnRlci9TTVxcbnNuaXAvTURSWkdTXFxuc25pcGUvU01cXG5zbmlwZXIvTVxcbnNuaXBwZWRcXG5zbmlwcGV0L1NNXFxuc25pcHBpbmdcXG5zbmlwcHkvUlRcXG5zbmlwcy9NXFxuc25pdC9NU1xcbnNuaXRjaC9NRFNHXFxuc25pdmVsL1NNRFJaR1xcbnNuaXZlbGVyL01cXG5zbm9iL01TXFxuc25vYmJlcnkvTVxcbnNub2JiaXNoL1BZXFxuc25vYmJpc2huZXNzL01cXG5zbm9iYnkvUlRcXG5zbm9nL1NcXG5zbm9nZ2VkXFxuc25vZ2dpbmdcXG5zbm9vZC9TTVxcbnNub29rZXIvTURTR1xcbnNub29wL1NNRFJaR1xcbnNub29wZXIvTVxcbnNub29weS9UUlxcbnNub290L1NNXFxuc25vb3RpbHlcXG5zbm9vdGluZXNzL01cXG5zbm9vdHkvUFRSXFxuc25vb3plL0RTTUdcXG5zbm9yZS9EUlNNWkdcXG5zbm9yZXIvTVxcbnNub3JrZWwvWkdNRFJTXFxuc25vcmtlbGVyL01cXG5zbm9ya2VsaW5nL01cXG5zbm9ydC9TTURSWkdcXG5zbm9ydGVyL01cXG5zbm90L01TXFxuc25vdHRpbHlcXG5zbm90dGluZXNzL01cXG5zbm90dHkvVFBSXFxuc25vdXQvU01cXG5zbm93L01ER1NcXG5zbm93YmFsbC9HU01EXFxuc25vd2JhbmsvU01cXG5zbm93YmlyZC9TTVxcbnNub3dibG93ZXIvTVNcXG5zbm93Ym9hcmQvWkdNRFJTXFxuc25vd2JvYXJkZXIvTVxcbnNub3dib2FyZGluZy9NXFxuc25vd2JvdW5kXFxuc25vd2RyaWZ0L1NNXFxuc25vd2Ryb3AvU01cXG5zbm93ZmFsbC9TTVxcbnNub3dmaWVsZC9TTVxcbnNub3dmbGFrZS9TTVxcbnNub3dpbmVzcy9NXFxuc25vd2xpbmVcXG5zbm93bWFuL01cXG5zbm93bWVuXFxuc25vd21vYmlsZS9EU01HXFxuc25vd3Bsb3cvU0dNRFxcbnNub3dzaGVkXFxuc25vd3Nob2UvU01cXG5zbm93c2hvZWluZ1xcbnNub3dzdG9ybS9TTVxcbnNub3dzdWl0L1NNXFxuc25vd3kvUFJUXFxuc251Yi9NU1xcbnNudWJiZWRcXG5zbnViYmluZ1xcbnNudWZmL1NNRFJZWkdcXG5zbnVmZmJveC9NU1xcbnNudWZmZXIvTVxcbnNudWZmbGUvTUdEU1xcbnNudWcvTVlTUFxcbnNudWdnZWRcXG5zbnVnZ2VyXFxuc251Z2dlc3RcXG5zbnVnZ2luZ1xcbnNudWdnbGUvTUdEU1xcbnNudWduZXNzL01cXG5zb1xcbnNvYWsvTURHU0pcXG5zb2FraW5nL01cXG5zb2FwL01ER1NcXG5zb2FwYm94L01TXFxuc29hcGluZXNzL01cXG5zb2Fwc3RvbmUvTVxcbnNvYXBzdWRzL01cXG5zb2FweS9SUFRcXG5zb2FyL01ER1NcXG5zb2IvU01cXG5zb2JiZWRcXG5zb2JiaW5nL1lcXG5zb2Jlci9TRFJZUFRHXFxuc29iZXJuZXNzL01cXG5zb2JyaWV0eS9JTVxcbnNvYnJpcXVldC9TTVxcbnNvY1xcbnNvY2Nlci9NXFxuc29jaWFiaWxpdHkvTVxcbnNvY2lhYmxlL1NNXFxuc29jaWFibHlcXG5zb2NpYWwvU01ZXFxuc29jaWFsaXNtL01cXG5zb2NpYWxpc3QvU01cXG5zb2NpYWxpc3RpY1xcbnNvY2lhbGl0ZS9TTVxcbnNvY2lhbGl6YXRpb24vTVxcbnNvY2lhbGl6ZS9EU0dcXG5zb2NpZXRhbFxcbnNvY2lldHkvU01cXG5zb2Npb2Vjb25vbWljXFxuc29jaW9lY29ub21pY2FsbHlcXG5zb2Npb2xvZ2ljYWwvWVxcbnNvY2lvbG9naXN0L1NNXFxuc29jaW9sb2d5L01cXG5zb2Npb3BhdGgvTVxcbnNvY2lvcGF0aHNcXG5zb2Npb3BvbGl0aWNhbFxcbnNvY2svTURHU1xcbnNvY2tldC9TTVxcbnNvY2tleWUvU01cXG5zb2QvU01cXG5zb2RhL01TXFxuc29kZGVkXFxuc29kZGVuL1lcXG5zb2RkaW5nXFxuc29kaXVtL01cXG5zb2RvbWl0ZS9NU1xcbnNvZG9taXplL0dEU1xcbnNvZG9teS9NXFxuc29ldmVyXFxuc29mYS9NU1xcbnNvZnQvTlJZWFRQXFxuc29mdGJhY2tcXG5zb2Z0YmFsbC9NU1xcbnNvZnRib3VuZFxcbnNvZnRjb3ZlclxcbnNvZnRlbi9EUlpHXFxuc29mdGVuZXIvTVxcbnNvZnRoZWFydGVkXFxuc29mdG5lc3MvTVxcbnNvZnR3YXJlL01cXG5zb2Z0d29vZC9TTVxcbnNvZnR5L1NNXFxuc29nZ2lseVxcbnNvZ2dpbmVzcy9NXFxuc29nZ3kvUlRQXFxuc29pZ25lXFxuc29pZ25lZVxcbnNvaWwvTURHU1xcbnNvaWxlZC9VXFxuc29pcmVlL1NNXFxuc29qb3Vybi9aR01EUlNcXG5zb2pvdXJuZXIvTVxcbnNvbC9TTVxcbnNvbGFjZS9EU01HXFxuc29sYXJcXG5zb2xhcmlhXFxuc29sYXJpdW0vTVxcbnNvbGRcXG5zb2xkZXIvWkdTTURSXFxuc29sZGVyZXIvTVxcbnNvbGRpZXIvTURZU0dcXG5zb2xkaWVyeS9NXFxuc29sZS9GU0RHTVxcbnNvbGVjaXNtL1NNXFxuc29sZWx5XFxuc29sZW1uL1BUUllcXG5zb2xlbW5lc3MvTVxcbnNvbGVtbmlmeS9EU0dcXG5zb2xlbW5pdHkvU01cXG5zb2xlbW5pemF0aW9uL01cXG5zb2xlbW5pemUvRFNHXFxuc29sZW1ubmVzcy9NXFxuc29sZW5vaWQvTVNcXG5zb2xpY2l0L0dEU1xcbnNvbGljaXRhdGlvbi9TTVxcbnNvbGljaXRlZC9VXFxuc29saWNpdG9yL1NNXFxuc29saWNpdG91cy9QWVxcbnNvbGljaXRvdXNuZXNzL01cXG5zb2xpY2l0dWRlL01cXG5zb2xpZC9QU01SWVRcXG5zb2xpZGFyaXR5L01cXG5zb2xpZGlcXG5zb2xpZGlmaWNhdGlvbi9NXFxuc29saWRpZnkvRFNOR1xcbnNvbGlkaXR5L01cXG5zb2xpZG5lc3MvTVxcbnNvbGlkdXMvTVxcbnNvbGlsb3F1aWVzXFxuc29saWxvcXVpemUvRFNHXFxuc29saWxvcXV5L01cXG5zb2xpcHNpc20vTVxcbnNvbGlwc2lzdGljXFxuc29saXRhaXJlL01TXFxuc29saXRhcmluZXNzL01cXG5zb2xpdGFyeS9TTVBcXG5zb2xpdHVkZS9NXFxuc29sby9NREdTXFxuc29sb2lzdC9NU1xcbnNvbHN0aWNlL01TXFxuc29sdWJpbGl0eS9JTVxcbnNvbHVibGUvTVNcXG5zb2x1dGUnc1xcbnNvbHV0ZS9BWE5cXG5zb2x1dGVzXFxuc29sdXRpb24ncy9BRVxcbnNvbHZhYmxlL0lVXFxuc29sdmUvRUFEU0dcXG5zb2x2ZWQvVVxcbnNvbHZlbmN5L0lNXFxuc29sdmVudC9JTVNcXG5zb2x2ZXIvU01cXG5zb21hdGljXFxuc29tYXRvc2Vuc29yeVxcbnNvbWJlci9QWVxcbnNvbWJlcm5lc3MvTVxcbnNvbWJyZXJvL01TXFxuc29tZVxcbnNvbWVib2R5L1NNXFxuc29tZWRheVxcbnNvbWVob3dcXG5zb21lb25lL01TXFxuc29tZXBsYWNlXFxuc29tZXJzYXVsdC9NREdTXFxuc29tZXJzZXQvU01cXG5zb21lcnNldHRlZFxcbnNvbWVyc2V0dGluZ1xcbnNvbWV0aGluZy9TTVxcbnNvbWV0aW1lL1NcXG5zb21ld2F5L1NcXG5zb21ld2hhdC9TXFxuc29tZXdoZXJlXFxuc29tbmFtYnVsaXNtL01cXG5zb21uYW1idWxpc3QvU01cXG5zb21ub2xlbmNlL01cXG5zb21ub2xlbnRcXG5zb24vU01cXG5zb25hci9TTVxcbnNvbmF0YS9TTVxcbnNvbmF0aW5hL1NNXFxuc29uZy9NU1xcbnNvbmdiaXJkL1NNXFxuc29uZ2Jvb2svU01cXG5zb25nZmVzdC9TTVxcbnNvbmdzdGVyL01TXFxuc29uZ3N0cmVzcy9NU1xcbnNvbmd3cml0ZXIvU01cXG5zb25nd3JpdGluZ1xcbnNvbmljXFxuc29ubmV0L1NNXFxuc29ubnkvU01cXG5zb25vZ3JhbS9TTVxcbnNvbm9yaXR5L01cXG5zb25vcm91cy9ZUFxcbnNvbm9yb3VzbmVzcy9NXFxuc29uc29mYml0Y2hlc1xcbnNvb24vUlRcXG5zb290L01cXG5zb290aC9NRFJTWkdcXG5zb290aGVcXG5zb290aGVyL01cXG5zb290aGluZy9ZXFxuc29vdGhzYXllci9NU1xcbnNvb3Roc2F5aW5nL01cXG5zb290eS9SVFxcbnNvcC9TTVxcbnNvcGhcXG5zb3BoaXNtL01cXG5zb3BoaXN0L01TXFxuc29waGlzdGljXFxuc29waGlzdGljYWxcXG5zb3BoaXN0aWNhdGUvRFNNR05cXG5zb3BoaXN0aWNhdGVkL1VcXG5zb3BoaXN0aWNhdGlvbi9NXFxuc29waGlzdHJ5L1NNXFxuc29waG9tb3JlL01TXFxuc29waG9tb3JpY1xcbnNvcG9yaWZpYy9NU1xcbnNvcG9yaWZpY2FsbHlcXG5zb3BwZWRcXG5zb3BwaW5nXFxuc29wcHkvUlRcXG5zb3ByYW5vL01TXFxuc29yYmV0L1NNXFxuc29yY2VyZXIvTVNcXG5zb3JjZXJlc3MvTVNcXG5zb3JjZXJ5L01cXG5zb3JkaWQvUFlcXG5zb3JkaWRuZXNzL01cXG5zb3JlL01ZVFJTUFxcbnNvcmVoZWFkL01TXFxuc29yZW5lc3MvTVxcbnNvcmdodW0vTVxcbnNvcm9yaXR5L1NNXFxuc29ycmVsL1NNXFxuc29ycmlseVxcbnNvcnJpbmVzcy9NXFxuc29ycm93L1NNREdcXG5zb3Jyb3dmdWwvWVBcXG5zb3Jyb3dmdWxuZXNzL01cXG5zb3JyeS9SVFBcXG5zb3J0L0ZBU0dETVxcbnNvcnRhXFxuc29ydGVkL1VcXG5zb3J0ZXIvU01cXG5zb3J0aWUvRFNNXFxuc29ydGllaW5nXFxuc290L1NNXFxuc290dGlzaFxcbnNvdSd3ZXN0ZXJcXG5zb3UvU01IXFxuc291ZmZsZS9TTVxcbnNvdWdoL01ER1xcbnNvdWdoc1xcbnNvdWdodC9VXFxuc291ay9TXFxuc291bC9NU1xcbnNvdWxmdWwvWVBcXG5zb3VsZnVsbmVzcy9NXFxuc291bGxlc3MvWVBcXG5zb3VsbWF0ZS9TTVxcbnNvdW5kL0pQU01EUllaVEdcXG5zb3VuZGFsaWtlL1NcXG5zb3VuZGJhci9TXFxuc291bmRiaXRlL1NcXG5zb3VuZGJvYXJkL01TXFxuc291bmRjaGVjay9TXFxuc291bmRlci9NXFxuc291bmRpbmcvTVxcbnNvdW5kbGVzcy9ZXFxuc291bmRuZXNzL1VNXFxuc291bmRwcm9vZi9HRFNcXG5zb3VuZHByb29maW5nL01cXG5zb3VuZHNjYXBlL1NcXG5zb3VuZHRyYWNrL1NNXFxuc291cC9NREdTXFxuc291cGNvbi9NU1xcbnNvdXB5L1JUXFxuc291ci9NRFJZVEdTUFxcbnNvdXJjZS9BRFNNR1xcbnNvdXJkb3VnaC9NXFxuc291cmRvdWdoc1xcbnNvdXJpc2hcXG5zb3VybmVzcy9NXFxuc291cnB1c3MvTVNcXG5zb3VzYXBob25lL01TXFxuc291c2UvRFNNR1xcbnNvdXRoL01cXG5zb3V0aGJvdW5kXFxuc291dGhlYXN0L1pNUlxcbnNvdXRoZWFzdGVyL01ZXFxuc291dGhlYXN0ZXJuXFxuc291dGhlYXN0d2FyZC9TXFxuc291dGhlcmx5L1NNXFxuc291dGhlcm4vU1pNUlxcbnNvdXRoZXJuZXIvTVxcbnNvdXRoZXJubW9zdFxcbnNvdXRocGF3L1NNXFxuc291dGh3YXJkL01TXFxuc291dGh3ZXN0L1pNUlxcbnNvdXRod2VzdGVyL01ZXFxuc291dGh3ZXN0ZXJuXFxuc291dGh3ZXN0d2FyZC9TXFxuc291dmVuaXIvU01cXG5zb3ZlcmVpZ24vU01cXG5zb3ZlcmVpZ250eS9NXFxuc292aWV0L1NNXFxuc293J3NcXG5zb3cvQVNHRFxcbnNvd2VyL1NNXFxuc293bi9BXFxuc295L01cXG5zb3liZWFuL01TXFxuc296emxlZFxcbnNwYS9TTVxcbnNwYWNlL0RSU01aR1xcbnNwYWNlY3JhZnQvTVNcXG5zcGFjZWZsaWdodC9NU1xcbnNwYWNlbWFuL01cXG5zcGFjZW1lblxcbnNwYWNlcG9ydC9TTVxcbnNwYWNlci9NXFxuc3BhY2VzaGlwL1NNXFxuc3BhY2VzdWl0L1NNXFxuc3BhY2V0aW1lXFxuc3BhY2V3YWxrL1NHTURcXG5zcGFjZXdvbWFuL01cXG5zcGFjZXdvbWVuXFxuc3BhY2V5XFxuc3BhY2lhbFxcbnNwYWNpZXJcXG5zcGFjaWVzdFxcbnNwYWNpbmVzcy9NXFxuc3BhY2luZy9NXFxuc3BhY2lvdXMvWVBcXG5zcGFjaW91c25lc3MvTVxcbnNwYWRlL0RTTUdcXG5zcGFkZWZ1bC9NU1xcbnNwYWRld29yay9NXFxuc3BhZGljZXNcXG5zcGFkaXgvTVxcbnNwYWdoZXR0aS9NXFxuc3Bha2VcXG5zcGFtL01TXFxuc3BhbW1lZFxcbnNwYW1tZXIvU01cXG5zcGFtbWluZ1xcbnNwYW4vTVNcXG5zcGFuZGV4L01cXG5zcGFuZ2xlL0RTTUdcXG5zcGFuZ2x5XFxuc3BhbmllbC9TTVxcbnNwYW5rL1NNREdKXFxuc3BhbmtpbmcvTVxcbnNwYW5uZWRcXG5zcGFubmVyL1NNXFxuc3Bhbm5pbmdcXG5zcGFyL01TXFxuc3BhcmUvRFJTTVlUR1BcXG5zcGFyZW5lc3MvTVxcbnNwYXJlcmlicy9NXFxuc3BhcmluZy9VWVxcbnNwYXJrL1NNRFlHXFxuc3BhcmtsZS9EUlNNWkdcXG5zcGFya2xlci9NXFxuc3Bhcmt5L1JUXFxuc3BhcnJlZFxcbnNwYXJyaW5nXFxuc3BhcnJvdy9TTVxcbnNwYXJyb3doYXdrL1NcXG5zcGFyc2UvUllUUFxcbnNwYXJzZW5lc3MvTVxcbnNwYXJzaXR5L01cXG5zcGFydGFuXFxuc3Bhc20vU01cXG5zcGFzbW9kaWNcXG5zcGFzbW9kaWNhbGx5XFxuc3Bhc3RpYy9TTVxcbnNwYXQvTVNcXG5zcGF0ZS9TTVxcbnNwYXRoZS9TTVxcbnNwYXRpYWwvWVxcbnNwYXR0ZWRcXG5zcGF0dGVyL1NHTURcXG5zcGF0dGluZ1xcbnNwYXR1bGEvU01cXG5zcGF2aW4vTURcXG5zcGF3bi9TTURHXFxuc3BheS9ER1NcXG5zcGVhay9TUlpHSlxcbnNwZWFrZWFzeS9TTVxcbnNwZWFrZXIvTVxcbnNwZWFrZXJwaG9uZS9TXFxuc3BlYXIvU01ER1xcbnNwZWFyZmlzaC9HTURTXFxuc3BlYXJndW5cXG5zcGVhcmhlYWQvR01EU1xcbnNwZWFybWludC9NXFxuc3BlYy9NU1xcbnNwZWNpYWwvU01ZXFxuc3BlY2lhbGlzbS9TXFxuc3BlY2lhbGlzdC9NU1xcbnNwZWNpYWxpemF0aW9uL01TXFxuc3BlY2lhbGl6ZS9HRFNcXG5zcGVjaWFsdHkvU01cXG5zcGVjaWUvU01cXG5zcGVjaWVzL01cXG5zcGVjaWZcXG5zcGVjaWZpYWJsZVxcbnNwZWNpZmljL01TXFxuc3BlY2lmaWNhbGx5XFxuc3BlY2lmaWNhdGlvbi9NXFxuc3BlY2lmaWNpdHkvTVxcbnNwZWNpZmllZC9VXFxuc3BlY2lmeS9YTlpEUlNHXFxuc3BlY2ltZW4vU01cXG5zcGVjaW91cy9ZUFxcbnNwZWNpb3VzbmVzcy9NXFxuc3BlY2svU01ER1xcbnNwZWNrbGUvTUdEU1xcbnNwZWNzL01cXG5zcGVjdGFjbGUvU01cXG5zcGVjdGFjbGVzL01cXG5zcGVjdGFjdWxhci9NWVNcXG5zcGVjdGF0ZS9EU0dcXG5zcGVjdGF0b3IvU01cXG5zcGVjdGVyL0FNU1xcbnNwZWN0cmFcXG5zcGVjdHJhbFxcbnNwZWN0cm9tZXRlci9NU1xcbnNwZWN0cm9zY29wZS9NU1xcbnNwZWN0cm9zY29waWNcXG5zcGVjdHJvc2NvcHkvTVxcbnNwZWN0cnVtL01cXG5zcGVjdWxhdGUvRFNYR05WXFxuc3BlY3VsYXRpb24vTVxcbnNwZWN1bGF0aXZlL1lcXG5zcGVjdWxhdG9yL01TXFxuc3BlZFxcbnNwZWVjaC9NU1xcbnNwZWVjaGlmeS9EU0dcXG5zcGVlY2hsZXNzL1lQXFxuc3BlZWNobGVzc25lc3MvTVxcbnNwZWVjaHdyaXRlci9TXFxuc3BlZWQvU01SWkdcXG5zcGVlZGJvYXQvU01cXG5zcGVlZGVyL01cXG5zcGVlZGlseVxcbnNwZWVkaW5lc3MvTVxcbnNwZWVkaW5nL01cXG5zcGVlZG9tZXRlci9NU1xcbnNwZWVkc3Rlci9TTVxcbnNwZWVkdXAvTVNcXG5zcGVlZHdheS9TTVxcbnNwZWVkd2VsbC9NXFxuc3BlZWR5L1RQUlxcbnNwZWxlb2xvZ2ljYWxcXG5zcGVsZW9sb2dpc3QvTVNcXG5zcGVsZW9sb2d5L01cXG5zcGVsbC9KU01EUlpHXFxuc3BlbGxiaW5kL1pHUlNcXG5zcGVsbGJpbmRlci9NXFxuc3BlbGxib3VuZFxcbnNwZWxsY2hlY2svTURSWkdTXFxuc3BlbGxjaGVja2VyL01cXG5zcGVsbGRvd24vU01cXG5zcGVsbGVyL01cXG5zcGVsbGluZy9NXFxuc3BlbHVua2VyL01TXFxuc3BlbHVua2luZy9NXFxuc3BlbmQvQlNSWkdcXG5zcGVuZGVyL01cXG5zcGVuZGluZy9NXFxuc3BlbmR0aHJpZnQvTVNcXG5zcGVudC9VXFxuc3Blcm0vU01cXG5zcGVybWF0b3pvYVxcbnNwZXJtYXRvem9vbi9NXFxuc3Blcm1pY2lkYWxcXG5zcGVybWljaWRlL01TXFxuc3Bldy9NRFJaR1NcXG5zcGV3ZXIvTVxcbnNwaGFnbnVtL01TXFxuc3BoZXJlL1NNXFxuc3BoZXJpY2FsL1lcXG5zcGhlcm9pZC9TTVxcbnNwaGVyb2lkYWxcXG5zcGhpbmN0ZXIvTVNcXG5zcGhpbngvTVNcXG5zcGljL1NcXG5zcGljZS9EU01HXFxuc3BpY2lseVxcbnNwaWNpbmVzcy9NXFxuc3BpY3VsZS9NU1xcbnNwaWN5L1BSVFxcbnNwaWRlci9TTVxcbnNwaWRlcndlYi9NU1xcbnNwaWRlcnlcXG5zcGllbC9TTURHXFxuc3BpZmYvU0RHXFxuc3BpZmZ5L1RSXFxuc3BpZ290L1NNXFxuc3Bpa2UvRFNNR1xcbnNwaWtpbmVzcy9NXFxuc3Bpa3kvUlBUXFxuc3BpbGwvU01ER1xcbnNwaWxsYWdlL01TXFxuc3BpbGxvdmVyL1NNXFxuc3BpbGx3YXkvTVNcXG5zcGluL01TXFxuc3BpbmFjaC9NXFxuc3BpbmFsL1NNWVxcbnNwaW5kbGUvTUdEU1xcbnNwaW5kbHkvVFJcXG5zcGluZS9TTVxcbnNwaW5lbGVzcy9ZUFxcbnNwaW5ldC9TTVxcbnNwaW5sZXNzXFxuc3Bpbm5ha2VyL1NNXFxuc3Bpbm5lci9NU1xcbnNwaW5uZXJldC9TTVxcbnNwaW5uZXkvU1xcbnNwaW5uaW5nL01cXG5zcGluc3Rlci9TTVxcbnNwaW5zdGVyaG9vZC9NXFxuc3BpbnN0ZXJpc2hcXG5zcGlueS9SVFxcbnNwaXJhY2xlL1NNXFxuc3BpcmFsL1NHTURZXFxuc3BpcmUnc1xcbnNwaXJlL0lGQVNcXG5zcGlyZWEvU01cXG5zcGlyaXQnc1xcbnNwaXJpdC9JU0dEXFxuc3Bpcml0ZWQvWVxcbnNwaXJpdGxlc3NcXG5zcGlyaXR1YWwvTVlTXFxuc3Bpcml0dWFsaXNtL01cXG5zcGlyaXR1YWxpc3QvTVNcXG5zcGlyaXR1YWxpc3RpY1xcbnNwaXJpdHVhbGl0eS9NXFxuc3Bpcml0dW91c1xcbnNwaXJvY2hldGUvU01cXG5zcGlyeVxcbnNwaXQvTURHU1xcbnNwaXRiYWxsL1NNXFxuc3BpdGUvQVNNXFxuc3BpdGVmdWwvUFlcXG5zcGl0ZWZ1bGxlclxcbnNwaXRlZnVsbGVzdFxcbnNwaXRlZnVsbmVzcy9NXFxuc3BpdGZpcmUvU01cXG5zcGl0dGVkXFxuc3BpdHRpbmdcXG5zcGl0dGxlL01cXG5zcGl0dG9vbi9NU1xcbnNwaXYvU1xcbnNwbGFuY2huaWNcXG5zcGxhc2gvR01EU1xcbnNwbGFzaGRvd24vTVNcXG5zcGxhc2hpbHlcXG5zcGxhc2hpbmVzcy9NXFxuc3BsYXNoeS9SVFBcXG5zcGxhdC9TTVxcbnNwbGF0dGVkXFxuc3BsYXR0ZXIvR1NNRFxcbnNwbGF0dGluZ1xcbnNwbGF5L1NNREdcXG5zcGxheWZlZXRcXG5zcGxheWZvb3QvTURcXG5zcGxlZW4vU01cXG5zcGxlbmRpZC9SWVRcXG5zcGxlbmRvci9NU1xcbnNwbGVuZG9yb3VzXFxuc3BsZW5lY3RvbXlcXG5zcGxlbmV0aWNcXG5zcGxpY2UvRFJTTVpHXFxuc3BsaWNlci9NXFxuc3BsaWZmL1NcXG5zcGxpbmUvU1xcbnNwbGludC9TWkdNRFJcXG5zcGxpbnRlci9NREdcXG5zcGxpbnRlcnlcXG5zcGxpdC9TTVxcbnNwbGl0dGluZy9NU1xcbnNwbG9kZ2UvU1xcbnNwbG9zaC9EU0dcXG5zcGxvdGNoL01EU0dcXG5zcGxvdGNoeS9UUlxcbnNwbHVyZ2UvRFNNR1xcbnNwbHV0dGVyL0dNRFNcXG5zcG9pbCdzXFxuc3BvaWwvQ1NEUlpHXFxuc3BvaWxhZ2UvTVxcbnNwb2lsZWQvVVxcbnNwb2lsZXIvQ01cXG5zcG9pbHNwb3J0L01TXFxuc3Bva2UvU01cXG5zcG9rZW4vVVxcbnNwb2tlc21hbi9NXFxuc3Bva2VzbWVuXFxuc3Bva2VzcGVvcGxlXFxuc3Bva2VzcGVyc29uL01TXFxuc3Bva2Vzd29tYW4vTVxcbnNwb2tlc3dvbWVuXFxuc3BvbGlhdGlvbi9DTVxcbnNwb25nZS9EUlNNWkdcXG5zcG9uZ2VyL01cXG5zcG9uZ2luZXNzL01cXG5zcG9uZ3kvUlBUXFxuc3BvbnNvci9NREdTXFxuc3BvbnNvcnNoaXAvTVxcbnNwb250YW5laXR5L01cXG5zcG9udGFuZW91cy9ZXFxuc3Bvb2YvU01ER1xcbnNwb29rL1NNREdcXG5zcG9va2luZXNzL01cXG5zcG9va3kvUlBUXFxuc3Bvb2wvU01ER1xcbnNwb29uL1NNREdcXG5zcG9vbmJpbGwvTVNcXG5zcG9vbmVyaXNtL01TXFxuc3Bvb25mdWwvU01cXG5zcG9vci9TTURHXFxuc3BvcmFkaWNcXG5zcG9yYWRpY2FsbHlcXG5zcG9yZS9EU01HXFxuc3BvcnJhbi9TXFxuc3BvcnQvU01ER1ZcXG5zcG9ydGluZXNzL01cXG5zcG9ydGluZy9ZXFxuc3BvcnRpdmUvWVxcbnNwb3J0c2Nhc3QvTVJaR1NcXG5zcG9ydHNjYXN0ZXIvTVxcbnNwb3J0c21hbi9NXFxuc3BvcnRzbWFubGlrZS9VXFxuc3BvcnRzbWFuc2hpcC9NXFxuc3BvcnRzbWVuXFxuc3BvcnRzcGVvcGxlXFxuc3BvcnRzcGVyc29uXFxuc3BvcnRzd2Vhci9NXFxuc3BvcnRzd29tYW4vTVxcbnNwb3J0c3dvbWVuXFxuc3BvcnRzd3JpdGVyL1NNXFxuc3BvcnR5L1RQUlxcbnNwb3QvQ01TXFxuc3BvdGxlc3MvUFlcXG5zcG90bGVzc25lc3MvTVxcbnNwb3RsaWdodC9HU01EXFxuc3BvdGxpdFxcbnNwb3R0ZWRcXG5zcG90dGVyL01TXFxuc3BvdHRpbHlcXG5zcG90dGluZXNzL01cXG5zcG90dGluZ1xcbnNwb3R0eS9UUFJcXG5zcG91c2FsL01TXFxuc3BvdXNlL1NNXFxuc3BvdXQvU01ER1xcbnNwcmFpbi9HU01EXFxuc3ByYW5nXFxuc3ByYXQvU01cXG5zcHJhd2wvR1NNRFxcbnNwcmF5J3NcXG5zcHJheS9BU0RHXFxuc3ByYXllci9NU1xcbnNwcmVhZC9aR0JTTVJcXG5zcHJlYWRlYWdsZWRcXG5zcHJlYWRlci9NXFxuc3ByZWFkc2hlZXQvTVNcXG5zcHJlZS9EU01cXG5zcHJlZWluZ1xcbnNwcmlnL1NNXFxuc3ByaWdnZWRcXG5zcHJpZ2h0bGluZXNzL01cXG5zcHJpZ2h0bHkvUlRQXFxuc3ByaW5nL0dTTVxcbnNwcmluZ2JvYXJkL01TXFxuc3ByaW5nYm9rL01TXFxuc3ByaW5naWx5XFxuc3ByaW5naW5lc3MvTVxcbnNwcmluZ2xpa2VcXG5zcHJpbmd0aW1lL01cXG5zcHJpbmd5L1JQVFxcbnNwcmlua2xlL0RSU0pNWkdcXG5zcHJpbmtsZXIvTVxcbnNwcmlua2xpbmcvTVxcbnNwcmludC9aR1NNRFJcXG5zcHJpbnRlci9NXFxuc3ByaXRlL1NNXFxuc3ByaXR6L1pHTURSU1xcbnNwcml0emVyL01cXG5zcHJvY2tldC9NU1xcbnNwcm9nL1NcXG5zcHJvdXQvR1NNRFxcbnNwcnVjZS9EUlNQTVlUR1xcbnNwcnVjZW5lc3MvTVxcbnNwcnVuZ1xcbnNwcnkvUllUXFxuc3ByeW5lc3MvTVxcbnNwdWQvTVNcXG5zcHVtZS9EU01HXFxuc3B1bW9uaS9NXFxuc3B1bXlcXG5zcHVuXFxuc3B1bmsvU01cXG5zcHVua3kvVFJcXG5zcHVyL01TXFxuc3B1cmdlL01cXG5zcHVyaW91cy9QWVxcbnNwdXJpb3VzbmVzcy9NXFxuc3B1cm4vU0RHXFxuc3B1cnJlZFxcbnNwdXJyaW5nXFxuc3B1cnQvU01ER1xcbnNwdXRhXFxuc3B1dG5pay9NU1xcbnNwdXR0ZXIvTURHU1xcbnNwdXR1bS9NXFxuc3B5L0dEU01cXG5zcHlnbGFzcy9NU1xcbnNweW1hc3Rlci9TXFxuc3B5d2FyZS9NXFxuc3FcXG5zcXFcXG5zcXVhYi9TTVxcbnNxdWFiYmxlL01aR0RSU1xcbnNxdWFiYmxlci9NXFxuc3F1YWQvU01cXG5zcXVhZHJvbi9NU1xcbnNxdWFsaWQvUFRSWVxcbnNxdWFsaWRuZXNzL01cXG5zcXVhbGwvU0dNRFxcbnNxdWFsbHlcXG5zcXVhbG9yL01cXG5zcXVhbW91c1xcbnNxdWFuZGVyL0dEU1xcbnNxdWFyZS9QRFJTTVlUR1xcbnNxdWFyZW5lc3MvTVxcbnNxdWFyaXNoXFxuc3F1YXNoL0dNRFNcXG5zcXVhc2h5L1RSXFxuc3F1YXQvU01QXFxuc3F1YXRuZXNzL01cXG5zcXVhdHRlZFxcbnNxdWF0dGVyL01TXFxuc3F1YXR0ZXN0XFxuc3F1YXR0aW5nXFxuc3F1YXcvU01cXG5zcXVhd2svU1pHTURSXFxuc3F1YXdrZXIvTVxcbnNxdWVhay9TWkdNRFJcXG5zcXVlYWtlci9NXFxuc3F1ZWFraWx5XFxuc3F1ZWFraW5lc3MvTVxcbnNxdWVha3kvVFJQXFxuc3F1ZWFsL1NaR01EUlxcbnNxdWVhbGVyL01cXG5zcXVlYW1pc2gvUFlcXG5zcXVlYW1pc2huZXNzL01cXG5zcXVlZWdlZS9NRFNcXG5zcXVlZWdlZWluZ1xcbnNxdWVlemUvQk1aR0RSU1xcbnNxdWVlemVib3gvU1xcbnNxdWVlemVyL01cXG5zcXVlbGNoL0dNRFNcXG5zcXVlbGNoeVxcbnNxdWliL1NNXFxuc3F1aWQvU01cXG5zcXVpZGd5XFxuc3F1aWZmeVxcbnNxdWlnZ2xlL0RTTUdcXG5zcXVpZ2dseVxcbnNxdWludC9TVEdNRFJcXG5zcXVpcmUvRFNNR1xcbnNxdWlybS9TR01EXFxuc3F1aXJteS9SVFxcbnNxdWlycmVsL1NHTURcXG5zcXVpcnQvU0dNRFxcbnNxdWlzaC9HTURTXFxuc3F1aXNoeS9SVFxcbnNyaXJhY2hhXFxuc3NoXFxuc3RcXG5zdGFiL01ZU1xcbnN0YWJiZWRcXG5zdGFiYmVyL01TXFxuc3RhYmJpbmcvTVNcXG5zdGFiaWxpdHkvSU1cXG5zdGFiaWxpemF0aW9uL0NNXFxuc3RhYmlsaXplL0NEU0dcXG5zdGFiaWxpemVyL01TXFxuc3RhYmxlL0RSU01UR1xcbnN0YWJsZW1hbi9NXFxuc3RhYmxlbWF0ZS9TXFxuc3RhYmxlbWVuXFxuc3RhYmx5L1VcXG5zdGFjY2F0by9NU1xcbnN0YWNrL1NNREdcXG5zdGFkaXVtL01TXFxuc3RhZmYnc1xcbnN0YWZmL0FTREdcXG5zdGFmZmVyL01TXFxuc3RhZmZpbmcvTVxcbnN0YWcvTURHU0pcXG5zdGFnZS9TTVxcbnN0YWdlY29hY2gvTVNcXG5zdGFnZWNyYWZ0L01cXG5zdGFnZWhhbmQvTVNcXG5zdGFnZXN0cnVja1xcbnN0YWdmbGF0aW9uL01cXG5zdGFnZ2VyL01ER1NcXG5zdGFnZ2VyaW5nL1lcXG5zdGFnaW5nL01cXG5zdGFnbmFuY3kvTVxcbnN0YWduYW50L1lcXG5zdGFnbmF0ZS9EU0dOXFxuc3RhZ25hdGlvbi9NXFxuc3RhZ3kvUlRcXG5zdGFpZC9QUllUXFxuc3RhaWRuZXNzL01cXG5zdGFpbi9TTURHXFxuc3RhaW5lZC9VXFxuc3RhaW5sZXNzL01cXG5zdGFpci9TTVxcbnN0YWlyY2FzZS9NU1xcbnN0YWlyd2F5L01TXFxuc3RhaXJ3ZWxsL1NNXFxuc3Rha2UvRFNNR1xcbnN0YWtlaG9sZGVyL01TXFxuc3Rha2VvdXQvU01cXG5zdGFsYWN0aXRlL01TXFxuc3RhbGFnbWl0ZS9NU1xcbnN0YWxlL0RSU1RHUFxcbnN0YWxlbWF0ZS9EU01HXFxuc3RhbGVuZXNzL01cXG5zdGFsay9TTURSSlpHXFxuc3RhbGtlci9NXFxuc3RhbGtpbmcvTVxcbnN0YWxsJ3NcXG5zdGFsbC9TREdcXG5zdGFsbGhvbGRlci9TXFxuc3RhbGxpb24vTVNcXG5zdGFsd2FydC9NWVNcXG5zdGFtZW4vU01cXG5zdGFtaW5hL01cXG5zdGFtbWVyL1pHTURSU1xcbnN0YW1tZXJlci9NXFxuc3RhbW1lcmluZy9ZXFxuc3RhbXAvU01EUlpHXFxuc3RhbXBlZGUvTUdEU1xcbnN0YW1wZXIvTVxcbnN0YW5jZS9JU01cXG5zdGFuY2gvVEdEUlNcXG5zdGFuY2hpb24vU01cXG5zdGFuZC9TTVJKWkdcXG5zdGFuZGFsb25lXFxuc3RhbmRhcmQvTVNcXG5zdGFuZGFyZGl6YXRpb24vTVxcbnN0YW5kYXJkaXplL0RTR1xcbnN0YW5kYnkvTVxcbnN0YW5kYnlzXFxuc3RhbmRlZS9NU1xcbnN0YW5kZXIvTVxcbnN0YW5kaW5nL01cXG5zdGFuZG9mZi9NU1xcbnN0YW5kb2ZmaXNoXFxuc3RhbmRvdXQvTVNcXG5zdGFuZHBpcGUvU01cXG5zdGFuZHBvaW50L01TXFxuc3RhbmRzdGlsbC9NU1xcbnN0YW5rXFxuc3RhbnphL1NNXFxuc3RhcGgvTVxcbnN0YXBoeWxvY29jY2FsXFxuc3RhcGh5bG9jb2NjaVxcbnN0YXBoeWxvY29jY3VzL01cXG5zdGFwbGUvRFJTTVpHXFxuc3RhcGxlci9NXFxuc3Rhci9NRFJaR1NcXG5zdGFyYm9hcmQvTVxcbnN0YXJidXJzdC9TXFxuc3RhcmNoL0dNRFNcXG5zdGFyY2hpbHlcXG5zdGFyY2hpbmVzcy9NXFxuc3RhcmNoeS9QVFJcXG5zdGFyZG9tL01cXG5zdGFyZHVzdC9NXFxuc3RhcmUvU01cXG5zdGFyZXIvTVxcbnN0YXJmaXNoL01TXFxuc3RhcmZydWl0XFxuc3RhcmdhemUvRFJTWkdcXG5zdGFyZ2F6ZXIvTVxcbnN0YXJrL1JZUFpUXFxuc3RhcmtuZXNzL01cXG5zdGFybGVzc1xcbnN0YXJsZXQvTVNcXG5zdGFybGlnaHQvTVxcbnN0YXJsaW5nL1NNXFxuc3RhcmxpdFxcbnN0YXJyZWRcXG5zdGFycmluZ1xcbnN0YXJyeS9UUlxcbnN0YXJzdHJ1Y2tcXG5zdGFydC9BU01ER1xcbnN0YXJ0ZXIvTVNcXG5zdGFydGxlL0dEU1xcbnN0YXJ0bGluZy9ZXFxuc3RhcnR1cC9NU1xcbnN0YXJ2YXRpb24vTVxcbnN0YXJ2ZS9EU0pHXFxuc3RhcnZlbGluZy9NU1xcbnN0YXNoL01EU0dcXG5zdGFzaXNcXG5zdGF0L01TXFxuc3RhdGUvRFJTTVlHTkxYXFxuc3RhdGVjcmFmdC9NXFxuc3RhdGVkL1VcXG5zdGF0ZWhvb2QvTVxcbnN0YXRlaG91c2UvTVNcXG5zdGF0ZWxlc3MvUFxcbnN0YXRlbGVzc25lc3MvTVxcbnN0YXRlbGluZXNzL01cXG5zdGF0ZWx5L1BSVFxcbnN0YXRlbWVudC9BTVNcXG5zdGF0ZW1lbnRlZFxcbnN0YXRlbWVudGluZ1xcbnN0YXRlcm9vbS9NU1xcbnN0YXRlc2lkZVxcbnN0YXRlc21hbi9NXFxuc3RhdGVzbWFubGlrZVxcbnN0YXRlc21hbnNoaXAvTVxcbnN0YXRlc21lblxcbnN0YXRlc3dvbWFuL01cXG5zdGF0ZXN3b21lblxcbnN0YXRld2lkZVxcbnN0YXRpYy9TTVxcbnN0YXRpY2FsbHlcXG5zdGF0aW9uL01EUlpHXFxuc3RhdGlvbmFyeVxcbnN0YXRpb25lci9NXFxuc3RhdGlvbmVyeS9NXFxuc3RhdGlvbm1hc3Rlci9TXFxuc3RhdGlzdGljL01TXFxuc3RhdGlzdGljYWwvWVxcbnN0YXRpc3RpY2lhbi9TTVxcbnN0YXR1YXJ5L01cXG5zdGF0dWUvU01cXG5zdGF0dWVzcXVlXFxuc3RhdHVldHRlL01TXFxuc3RhdHVyZS9NU1xcbnN0YXR1cy9NU1xcbnN0YXR1dGUvTVNcXG5zdGF0dXRvcmlseVxcbnN0YXR1dG9yeVxcbnN0YXVuY2gvUERSU1lUR1xcbnN0YXVuY2huZXNzL01cXG5zdGF2ZS9EU01HXFxuc3RheS9NRFJaR1NcXG5zdGRcXG5zdGRpb1xcbnN0ZWFkL1NNXFxuc3RlYWRmYXN0L1lQXFxuc3RlYWRmYXN0bmVzcy9NXFxuc3RlYWRpbHkvVVxcbnN0ZWFkaW5lc3MvVU1cXG5zdGVhZHkvVEdQRFJTTVxcbnN0ZWFrL1NNXFxuc3RlYWtob3VzZS9TTVxcbnN0ZWFsL1NNSEdcXG5zdGVhbHRoL01cXG5zdGVhbHRoaWx5XFxuc3RlYWx0aGluZXNzL01cXG5zdGVhbHRoeS9UUFJcXG5zdGVhbS9TTURSWkdcXG5zdGVhbWJvYXQvTVNcXG5zdGVhbWVyL01cXG5zdGVhbWZpdHRlci9TTVxcbnN0ZWFtZml0dGluZy9NXFxuc3RlYW1pbmVzcy9NXFxuc3RlYW1wdW5rXFxuc3RlYW1yb2xsL1pHRFJTXFxuc3RlYW1yb2xsZXIvTURHXFxuc3RlYW1zaGlwL01TXFxuc3RlYW15L1RQUlxcbnN0ZWVkL1NNXFxuc3RlZWwvU01ER1xcbnN0ZWVsaW5lc3MvTVxcbnN0ZWVsbWFrZXIvU1xcbnN0ZWVsd29ya2VyL1NNXFxuc3RlZWx3b3Jrcy9NXFxuc3RlZWx5L1BUUlxcbnN0ZWVseWFyZC9TTVxcbnN0ZWVwL1NNRE5SWVBYVEdcXG5zdGVlcGVuL0dEXFxuc3RlZXBsZS9NU1xcbnN0ZWVwbGVjaGFzZS9NU1xcbnN0ZWVwbGVqYWNrL1NNXFxuc3RlZXBuZXNzL01cXG5zdGVlci9TTURCR1xcbnN0ZWVyYWdlL01cXG5zdGVlcmluZy9NXFxuc3RlZXJzbWFuL01cXG5zdGVlcnNtZW5cXG5zdGVnb3NhdXJpXFxuc3RlZ29zYXVydXMvTVNcXG5zdGVpbi9TTVxcbnN0ZWxsYXJcXG5zdGVtL01TXFxuc3RlbWxlc3NcXG5zdGVtbWVkXFxuc3RlbW1pbmdcXG5zdGVtd2FyZS9NXFxuc3RlbmNoL01TXFxuc3RlbmNpbC9HTURTXFxuc3Rlbm8vU01cXG5zdGVub2dyYXBoZXIvU01cXG5zdGVub2dyYXBoaWNcXG5zdGVub2dyYXBoeS9NXFxuc3Rlbm9zaXNcXG5zdGVudC9TTVxcbnN0ZW50b3JpYW5cXG5zdGVwL0lNU1xcbnN0ZXBicm90aGVyL1NNXFxuc3RlcGNoaWxkL01cXG5zdGVwY2hpbGRyZW4vTVxcbnN0ZXBkYWQvTVNcXG5zdGVwZGF1Z2h0ZXIvU01cXG5zdGVwZmF0aGVyL1NNXFxuc3RlcGxhZGRlci9NU1xcbnN0ZXBtb20vTVNcXG5zdGVwbW90aGVyL1NNXFxuc3RlcHBhcmVudC9TTVxcbnN0ZXBwZS9EUlNNWkdcXG5zdGVwcGVyL01cXG5zdGVwcGluZ3N0b25lL1NNXFxuc3RlcHNpc3Rlci9NU1xcbnN0ZXBzb24vTVNcXG5zdGVyZW8vU01cXG5zdGVyZW9waG9uaWNcXG5zdGVyZW9zY29wZS9NU1xcbnN0ZXJlb3Njb3BpY1xcbnN0ZXJlb3R5cGUvRFNNR1xcbnN0ZXJlb3R5cGljYWxcXG5zdGVyaWxlXFxuc3RlcmlsaXR5L01cXG5zdGVyaWxpemF0aW9uL1NNXFxuc3RlcmlsaXplL0RSU1pHXFxuc3RlcmlsaXplci9NXFxuc3RlcmxpbmcvTVxcbnN0ZXJuL1NNUllQVFxcbnN0ZXJubmVzcy9NXFxuc3Rlcm51bS9NU1xcbnN0ZXJvaWQvTVNcXG5zdGVyb2lkYWxcXG5zdGVydG9yb3VzXFxuc3RldC9TXFxuc3RldGhvc2NvcGUvTVNcXG5zdGV0c29uL01TXFxuc3RldHRlZFxcbnN0ZXR0aW5nXFxuc3RldmVkb3JlL1NNXFxuc3Rldy9NREdTXFxuc3Rld2FyZC9HTURTXFxuc3Rld2FyZGVzcy9NU1xcbnN0ZXdhcmRzaGlwL01cXG5zdGljay9TTVJaR1xcbnN0aWNrZXIvTVxcbnN0aWNraWx5XFxuc3RpY2tpbmVzcy9NXFxuc3RpY2tsZWJhY2svU01cXG5zdGlja2xlci9NU1xcbnN0aWNrcGluL01TXFxuc3RpY2t1cC9NU1xcbnN0aWNreS9QVFJTTVxcbnN0aWZmL1NNRE5SWVBYVEdcXG5zdGlmZmVuL1pHRFJcXG5zdGlmZmVuZXIvTVxcbnN0aWZmZW5pbmcvTVxcbnN0aWZmbmVzcy9NXFxuc3RpZmxlL0RTSkdcXG5zdGlmbGluZy9ZXFxuc3RpZ21hL1NNXFxuc3RpZ21hdGFcXG5zdGlnbWF0aWNcXG5zdGlnbWF0aXphdGlvbi9NXFxuc3RpZ21hdGl6ZS9HRFNcXG5zdGlsZS9TTVxcbnN0aWxldHRvL1NNXFxuc3RpbGwnc1xcbnN0aWxsL0lUR1NEXFxuc3RpbGxiaXJ0aC9NXFxuc3RpbGxiaXJ0aHNcXG5zdGlsbGJvcm5cXG5zdGlsbGVyXFxuc3RpbGxuZXNzL01cXG5zdGlsdC9TTURcXG5zdGlsdGVkL1lcXG5zdGltdWxhbnQvU01cXG5zdGltdWxhdGUvRFNHTlZcXG5zdGltdWxhdGlvbi9NXFxuc3RpbXVsaVxcbnN0aW11bHVzL01cXG5zdGluZy9aR1NNUlxcbnN0aW5nZXIvTVxcbnN0aW5naWx5XFxuc3RpbmdpbmVzcy9NXFxuc3RpbmdyYXkvU01cXG5zdGluZ3kvUlRQXFxuc3RpbmsvWkdTTVJcXG5zdGlua2J1Zy9TTVxcbnN0aW5rZXIvTVxcbnN0aW5reS9SVFxcbnN0aW50L0dTTURcXG5zdGlwZW5kL1NNXFxuc3RpcGVuZGlhcnkvU1xcbnN0aXBwbGUvRFNNR1xcbnN0aXBwbGluZy9NXFxuc3RpcHVsYXRlL1hEU0dOXFxuc3RpcHVsYXRpb24vTVxcbnN0aXIvTVNcXG5zdGlycmVkXFxuc3RpcnJlci9TTVxcbnN0aXJyaW5nL1NZXFxuc3RpcnJ1cC9TTVxcbnN0aXRjaCdzXFxuc3RpdGNoL0FEU0dcXG5zdGl0Y2hlcnkvTVxcbnN0aXRjaGluZy9NXFxuc3RvYXQvU01cXG5zdG9jaGFzdGljXFxuc3RvY2snc1xcbnN0b2NrL0FHU0RcXG5zdG9ja2FkZS9EU01HXFxuc3RvY2ticmVlZGVyL01TXFxuc3RvY2ticm9rZXIvU01cXG5zdG9ja2Jyb2tpbmcvTVxcbnN0b2NraG9sZGVyL1NNXFxuc3RvY2tpbHlcXG5zdG9ja2luZXNzL01cXG5zdG9ja2luZXR0ZS9NXFxuc3RvY2tpbmcvU01cXG5zdG9ja2lzdC9TXFxuc3RvY2twaWxlL01HRFNcXG5zdG9ja3BvdC9TTVxcbnN0b2Nrcm9vbS9NU1xcbnN0b2NrdGFraW5nL01cXG5zdG9ja3kvUlRQXFxuc3RvY2t5YXJkL01TXFxuc3RvZGdlXFxuc3RvZGdpbHlcXG5zdG9kZ2luZXNzL01cXG5zdG9kZ3kvUlRQXFxuc3RvZ2llL01TXFxuc3RvaWMvU01cXG5zdG9pY2FsL1lcXG5zdG9pY2lzbS9NXFxuc3Rva2UvRFJTWkdcXG5zdG9rZXIvTVxcbnN0b2xlL1NNXFxuc3RvbGVuXFxuc3RvbGlkL1JZVFBcXG5zdG9saWRpdHkvTVxcbnN0b2xpZG5lc3MvTVxcbnN0b2xvbi9NU1xcbnN0b21hY2gvTURSWkdcXG5zdG9tYWNoYWNoZS9TTVxcbnN0b21hY2hlci9NXFxuc3RvbWFjaHNcXG5zdG9tcC9HU01EXFxuc3RvbmUvRFJTTVpHXFxuc3RvbmVtYXNvbi9NU1xcbnN0b25lci9NXFxuc3RvbmV3YWxsL0dTRFxcbnN0b25ld2FyZS9NXFxuc3RvbmV3YXNoZWRcXG5zdG9uZXdvcmsvTVxcbnN0b25pbHlcXG5zdG9uaW5lc3MvTVxcbnN0b25rZXJlZFxcbnN0b25raW5nXFxuc3RvbnkvVFJQXFxuc3Rvb2RcXG5zdG9vZ2UvTVNcXG5zdG9vbC9TTVxcbnN0b29wL0dTTURcXG5zdG9wJ3NcXG5zdG9wL1VTXFxuc3RvcGNvY2svU01cXG5zdG9wZ2FwL1NNXFxuc3RvcGxpZ2h0L01TXFxuc3RvcG92ZXIvTVNcXG5zdG9wcGFibGUvVVxcbnN0b3BwYWdlL01TXFxuc3RvcHBlZC9VXFxuc3RvcHBlci9HU01EXFxuc3RvcHBpbmcvVVxcbnN0b3BwbGUvRFNNR1xcbnN0b3B3YXRjaC9NU1xcbnN0b3JhZ2UvTVxcbnN0b3JlJ3NcXG5zdG9yZS9BRFNHXFxuc3RvcmVmcm9udC9NU1xcbnN0b3JlaG91c2UvTVNcXG5zdG9yZWtlZXBlci9TTVxcbnN0b3Jlcm9vbS9TTVxcbnN0b3JrL1NNXFxuc3Rvcm0vR1NNRFxcbnN0b3JtaWx5XFxuc3Rvcm1pbmVzcy9NXFxuc3Rvcm15L1JQVFxcbnN0b3J5L0RTTVxcbnN0b3J5Ym9hcmQvTVNcXG5zdG9yeWJvb2svU01cXG5zdG9yeXRlbGxlci9NU1xcbnN0b3J5dGVsbGluZy9NXFxuc3RvdXAvU01cXG5zdG91dC9UU01SWVBcXG5zdG91dGhlYXJ0ZWRcXG5zdG91dG5lc3MvTVxcbnN0b3ZlL1NNXFxuc3RvdmVwaXBlL1NNXFxuc3Rvdy9ER1NcXG5zdG93YWdlL01cXG5zdG93YXdheS9NU1xcbnN0cmFkZGxlL0RSU01aR1xcbnN0cmFkZGxlci9NXFxuc3RyYWZlL01HRFNcXG5zdHJhZ2dsZS9EUlNaR1xcbnN0cmFnZ2xlci9NXFxuc3RyYWdnbHkvVFJcXG5zdHJhaWdodC9TUFhUTU5SWVxcbnN0cmFpZ2h0YXdheS9TTVxcbnN0cmFpZ2h0ZWRnZS9TTVxcbnN0cmFpZ2h0ZW4vWkdEUlxcbnN0cmFpZ2h0ZW5lci9NXFxuc3RyYWlnaHRmb3J3YXJkL1lQU1xcbnN0cmFpZ2h0Zm9yd2FyZG5lc3MvTVxcbnN0cmFpZ2h0bmVzcy9NXFxuc3RyYWlnaHR3YXlcXG5zdHJhaW4nc1xcbnN0cmFpbi9GQURTR1xcbnN0cmFpbmVyL0FTTVxcbnN0cmFpdC9NTlNYXFxuc3RyYWl0ZW4vR0RcXG5zdHJhaXRqYWNrZXQvU0dNRFxcbnN0cmFpdGxhY2VkXFxuc3RyYW5kL01EU0dcXG5zdHJhbmdlL1BSWVpUXFxuc3RyYW5nZW5lc3MvTVxcbnN0cmFuZ2VyL01cXG5zdHJhbmdsZS9aR0RSU1xcbnN0cmFuZ2xlaG9sZC9TTVxcbnN0cmFuZ2xlci9NXFxuc3RyYW5ndWxhdGUvR05EU1xcbnN0cmFuZ3VsYXRpb24vTVxcbnN0cmFwJ3NcXG5zdHJhcC9VU1xcbnN0cmFwbGVzcy9NU1xcbnN0cmFwcGVkL1VcXG5zdHJhcHBpbmcvTVxcbnN0cmF0YVxcbnN0cmF0YWdlbS9TTVxcbnN0cmF0ZWdpYy9TXFxuc3RyYXRlZ2ljYWwvWVxcbnN0cmF0ZWdpY3MvTVxcbnN0cmF0ZWdpc3QvU01cXG5zdHJhdGVneS9TTVxcbnN0cmF0aVxcbnN0cmF0aWZpY2F0aW9uL01cXG5zdHJhdGlmeS9EU0dOXFxuc3RyYXRvc3BoZXJlL1NNXFxuc3RyYXRvc3BoZXJpY1xcbnN0cmF0dW0vTVxcbnN0cmF0dXMvTVxcbnN0cmF3L0dTTURcXG5zdHJhd2JlcnJ5L1NNXFxuc3RyYXkvR1NNRFxcbnN0cmVhay9NRFJTWkdcXG5zdHJlYWtlci9NXFxuc3RyZWFreS9UUlxcbnN0cmVhbS9NRFJTWkdcXG5zdHJlYW1lci9NXFxuc3RyZWFtbGluZS9EU0dcXG5zdHJlZXQvTVNcXG5zdHJlZXRjYXIvTVNcXG5zdHJlZXRsYW1wL1NcXG5zdHJlZXRsaWdodC9TTVxcbnN0cmVldHdhbGtlci9TTVxcbnN0cmVldHdpc2VcXG5zdHJlbmd0aC9NXFxuc3RyZW5ndGhlbi9BR0RTXFxuc3RyZW5ndGhlbmVyL01TXFxuc3RyZW5ndGhzXFxuc3RyZW51b3VzL1BZXFxuc3RyZW51b3VzbmVzcy9NXFxuc3RyZXAvTVxcbnN0cmVwdG9jb2NjYWxcXG5zdHJlcHRvY29jY2lcXG5zdHJlcHRvY29jY3VzL01cXG5zdHJlcHRvbXljaW4vTVxcbnN0cmVzcy9NRFNHXFxuc3RyZXNzZWQvVVxcbnN0cmVzc2Z1bFxcbnN0cmVzc29yc1xcbnN0cmV0Y2gvQlpHTURSU1xcbnN0cmV0Y2hlci9NREdcXG5zdHJldGNobWFya3NcXG5zdHJldGNoeS9UUlxcbnN0cmV3L0dTREhcXG5zdHJld25cXG5zdHJpYS9NXFxuc3RyaWFlXFxuc3RyaWF0ZWRcXG5zdHJpYXRpb24vTVNcXG5zdHJpY2tlblxcbnN0cmljdC9SWVBUXFxuc3RyaWN0bmVzcy9NXFxuc3RyaWN0dXJlL1NNXFxuc3RyaWRkZW5cXG5zdHJpZGUvTUdTXFxuc3RyaWRlbmN5L01cXG5zdHJpZGVudC9ZXFxuc3RyaWZlL01cXG5zdHJpa2UvTVpHUlNKXFxuc3RyaWtlYm91bmRcXG5zdHJpa2VicmVha2VyL1NNXFxuc3RyaWtlYnJlYWtpbmdcXG5zdHJpa2VvdXQvTVNcXG5zdHJpa2VyL01cXG5zdHJpa2luZy9ZXFxuc3RyaW5nL01EUlNaR1xcbnN0cmluZ2VuY3kvTVxcbnN0cmluZ2VudC9ZXFxuc3RyaW5nZXIvTVxcbnN0cmluZ2luZXNzL01cXG5zdHJpbmd5L1BUUlxcbnN0cmlwL0dTTURcXG5zdHJpcGUvTVNcXG5zdHJpcGV5XFxuc3RyaXBsaW5nL01TXFxuc3RyaXBwZWRcXG5zdHJpcHBlci9NU1xcbnN0cmlwcGluZ1xcbnN0cmlwdGVhc2UvTVpHRFJTXFxuc3RyaXB0ZWFzZXIvTVxcbnN0cmlweVxcbnN0cml2ZS9HU1xcbnN0cml2ZW5cXG5zdHJvYmUvTVNcXG5zdHJvYm9zY29wZS9NU1xcbnN0cm9ib3Njb3BpY1xcbnN0cm9kZVxcbnN0cm9rZS9NR0RTXFxuc3Ryb2xsL01EUlNaR1xcbnN0cm9sbGVyL01cXG5zdHJvbmcvUllUXFxuc3Ryb25nYm94L01TXFxuc3Ryb25naG9sZC9NU1xcbnN0cm9uZ21hbi9NXFxuc3Ryb25nbWVuXFxuc3Ryb25ncm9vbS9TXFxuc3Ryb250aXVtL01cXG5zdHJvcC9TTVxcbnN0cm9waGUvU01cXG5zdHJvcGhpY1xcbnN0cm9wcGVkXFxuc3Ryb3BwaWx5XFxuc3Ryb3BwaW5nXFxuc3Ryb3BweS9UUlBcXG5zdHJvdmVcXG5zdHJ1Y2tcXG5zdHJ1Y3R1cmFsL1lcXG5zdHJ1Y3R1cmFsaXNtXFxuc3RydWN0dXJhbGlzdC9TXFxuc3RydWN0dXJlJ3NcXG5zdHJ1Y3R1cmUvQUdEU1xcbnN0cnVjdHVyZWQvVVxcbnN0cnVkZWwvU01cXG5zdHJ1Z2dsZS9NR0RTXFxuc3RydW0vU01cXG5zdHJ1bW1lZFxcbnN0cnVtbWluZ1xcbnN0cnVtcGV0L01TXFxuc3RydW5nL1VBXFxuc3RydXQvU01cXG5zdHJ1dHRlZFxcbnN0cnV0dGluZ1xcbnN0cnljaG5pbmUvTVxcbnN0dWIvTVNcXG5zdHViYmVkXFxuc3R1YmJpbmdcXG5zdHViYmxlL01cXG5zdHViYmx5XFxuc3R1YmJvcm4vUllQVFxcbnN0dWJib3JubmVzcy9NXFxuc3R1YmJ5L1JUXFxuc3R1Y2NvL01ER1xcbnN0dWNjb2VzXFxuc3R1Y2svVVxcbnN0dWQvTVlTXFxuc3R1ZGJvb2svTVNcXG5zdHVkZGVkXFxuc3R1ZGRpbmcvTVxcbnN0dWRlbnQvU01cXG5zdHVkZW50c2hpcC9TXFxuc3R1ZGllZC9VXFxuc3R1ZGllZGx5XFxuc3R1ZGlvL01TXFxuc3R1ZGlvdXMvUFlcXG5zdHVkaW91c25lc3MvTVxcbnN0dWRseS9SVFxcbnN0dWR5J3NcXG5zdHVkeS9BR0RTXFxuc3R1ZmYvR1NNREpcXG5zdHVmZmlseVxcbnN0dWZmaW5lc3MvTVxcbnN0dWZmaW5nL01cXG5zdHVmZnkvUlBUXFxuc3R1bHRpZmljYXRpb24vTVxcbnN0dWx0aWZ5L0RTTkdcXG5zdHVtYmxlL0RSU01aR1xcbnN0dW1ibGVyL01cXG5zdHVtcC9HU01EXFxuc3R1bXB5L1RSXFxuc3R1bi9TXFxuc3R1bmdcXG5zdHVua1xcbnN0dW5uZWRcXG5zdHVubmVyL1NcXG5zdHVubmluZy9ZXFxuc3R1bnQvR1NNRFxcbnN0dW50bWFuXFxuc3R1bnRtZW5cXG5zdHVwZWZhY3Rpb24vTVxcbnN0dXBlZnkvRFNHXFxuc3R1cGVuZG91cy9ZXFxuc3R1cGlkL1RNUllTXFxuc3R1cGlkaXR5L1NNXFxuc3R1cG9yL01TXFxuc3R1cmRpbHlcXG5zdHVyZGluZXNzL01cXG5zdHVyZHkvVFJQXFxuc3R1cmdlb24vU01cXG5zdHV0dGVyL01EUlNaR1xcbnN0dXR0ZXJlci9NXFxuc3R5L1NNXFxuc3R5bGUnc1xcbnN0eWxlL0FEU0dcXG5zdHlsaVxcbnN0eWxpc2gvUFlcXG5zdHlsaXNobmVzcy9NXFxuc3R5bGlzdC9TTVxcbnN0eWxpc3RpYy9TXFxuc3R5bGlzdGljYWxseVxcbnN0eWxpemUvRFNHXFxuc3R5bHVzL01TXFxuc3R5bWllL01EU1xcbnN0eW1pZWluZ1xcbnN0eXB0aWMvU01cXG5zdWFzaW9uL0VNXFxuc3VhdmUvUllUUFxcbnN1YXZlbmVzcy9NXFxuc3Vhdml0eS9NXFxuc3ViL1NNXFxuc3ViYWx0ZXJuL01TXFxuc3ViYXF1YVxcbnN1YmFyY3RpY1xcbnN1YmFyZWEvTVNcXG5zdWJhdG9taWNcXG5zdWJiYXNlbWVudC9TTVxcbnN1YmJlZFxcbnN1YmJpbmdcXG5zdWJicmFuY2gvTVNcXG5zdWJjYXRlZ29yeS9TTVxcbnN1YmNsYXNzXFxuc3ViY29tbWl0dGVlL1NNXFxuc3ViY29tcGFjdC9TTVxcbnN1YmNvbnNjaW91cy9QTVlcXG5zdWJjb25zY2lvdXNuZXNzL01cXG5zdWJjb250aW5lbnQvU01cXG5zdWJjb250aW5lbnRhbFxcbnN1YmNvbnRyYWN0L01EU0dcXG5zdWJjb250cmFjdG9yL01TXFxuc3ViY3VsdHVyZS9NU1xcbnN1YmN1dGFuZW91cy9ZXFxuc3ViZGl2aWRlL0dEU1xcbnN1YmRpdmlzaW9uL1NNXFxuc3ViZG9tYWluL01TXFxuc3ViZG9taW5hbnRcXG5zdWJkdWUvRFNHXFxuc3ViZWRpdG9yL1NcXG5zdWJmYW1pbHkvU01cXG5zdWJmcmVlemluZ1xcbnN1Ymdyb3VwL01TXFxuc3ViaGVhZC9HSk1TXFxuc3ViaGVhZGluZy9NXFxuc3ViaHVtYW4vTVNcXG5zdWJqXFxuc3ViamVjdC9HVk1EU1xcbnN1YmplY3Rpb24vTVxcbnN1YmplY3RpdmUvWVxcbnN1YmplY3Rpdml0eS9NXFxuc3Viam9pbi9HRFNcXG5zdWJqdWdhdGUvR05EU1xcbnN1Ymp1Z2F0aW9uL01cXG5zdWJqdW5jdGl2ZS9TTVxcbnN1YmxlYXNlL01HRFNcXG5zdWJsZXQvU01cXG5zdWJsZXR0aW5nXFxuc3VibGlldXRlbmFudC9TXFxuc3VibGltYXRlL0dORFNcXG5zdWJsaW1hdGlvbi9NXFxuc3VibGltZS9ZVEdEUlNcXG5zdWJsaW1pbmFsL1lcXG5zdWJsaW1pdHkvTVxcbnN1Ymxpbmd1YWxcXG5zdWJtYXJnaW5hbFxcbnN1Ym1hcmluZS9NWlJTXFxuc3VibWFyaW5lci9NXFxuc3VibWVyZ2UvR0RTXFxuc3VibWVyZ2VuY2UvTVxcbnN1Ym1lcnNlL0dORFNcXG5zdWJtZXJzaWJsZS9NU1xcbnN1Ym1lcnNpb24vTVxcbnN1Ym1pY3Jvc2NvcGljXFxuc3VibWlzc2lvbi9NU1xcbnN1Ym1pc3NpdmUvUFlcXG5zdWJtaXNzaXZlbmVzcy9NXFxuc3VibWl0L0FTXFxuc3VibWl0dGVkL0FcXG5zdWJtaXR0ZXJcXG5zdWJtaXR0aW5nL0FcXG5zdWJub3JtYWxcXG5zdWJvcmJpdGFsXFxuc3Vib3JkZXIvTVNcXG5zdWJvcmRpbmF0ZS9EU01HTlxcbnN1Ym9yZGluYXRpb24vSU1cXG5zdWJvcm4vU0dEXFxuc3Vib3JuYXRpb24vTVxcbnN1YnBhclxcbnN1YnBhcmFncmFwaFxcbnN1YnBhcnRcXG5zdWJwbG90L01TXFxuc3VicG9lbmEvR01EU1xcbnN1YnByaW1lXFxuc3VicHJvZmVzc2lvbmFsL1NNXFxuc3VicHJvZ3JhbS9TXFxuc3Vicm91dGluZS9TTVxcbnN1YnNjcmliZS9VQVNER1xcbnN1YnNjcmliZXIvTVNcXG5zdWJzY3JpcHQvTVNcXG5zdWJzY3JpcHRpb24vTVNcXG5zdWJzZWN0aW9uL01TXFxuc3Vic2VxdWVudC9ZXFxuc3Vic2VydmllbmNlL01cXG5zdWJzZXJ2aWVudC9ZXFxuc3Vic2V0L1NNXFxuc3Vic2lkZS9HRFNcXG5zdWJzaWRlbmNlL01cXG5zdWJzaWRpYXJpdHlcXG5zdWJzaWRpYXJ5L1NNXFxuc3Vic2lkaXphdGlvbi9NXFxuc3Vic2lkaXplL1pHRFJTXFxuc3Vic2lkaXplci9NXFxuc3Vic2lkeS9TTVxcbnN1YnNpc3QvU0RHXFxuc3Vic2lzdGVuY2UvTVxcbnN1YnNvaWwvTVxcbnN1YnNvbmljXFxuc3Vic3BhY2VcXG5zdWJzcGVjaWVzL01cXG5zdWJzdGFuY2UvU01cXG5zdWJzdGFuZGFyZFxcbnN1YnN0YW50aWFsL0lZXFxuc3Vic3RhbnRpYXRlL0dORFNYXFxuc3Vic3RhbnRpYXRlZC9VXFxuc3Vic3RhbnRpYXRpb24vRk1cXG5zdWJzdGFudGl2ZS9TTVlcXG5zdWJzdGF0aW9uL01TXFxuc3Vic3RpdHVlbnRcXG5zdWJzdGl0dXRlL1hNR05EU1xcbnN1YnN0aXR1dGlvbi9NXFxuc3Vic3RyYXRhXFxuc3Vic3RyYXRlL01TXFxuc3Vic3RyYXR1bS9NXFxuc3Vic3RydWN0dXJlL1NNXFxuc3Vic3VtZS9EU0dcXG5zdWJzdW1wdGlvblxcbnN1YnN1cmZhY2UvTVxcbnN1YnN5c3RlbS9TTVxcbnN1YnRlZW4vU01cXG5zdWJ0ZW5hbmN5L01cXG5zdWJ0ZW5hbnQvU01cXG5zdWJ0ZW5kL1NER1xcbnN1YnRlcmZ1Z2UvU01cXG5zdWJ0ZXJyYW5lYW5cXG5zdWJ0ZXh0L1NNXFxuc3VidGl0bGUvRFNNR1xcbnN1YnRsZS9UUlxcbnN1YnRsZXR5L1NNXFxuc3VidGx5XFxuc3VidG9waWMvU01cXG5zdWJ0b3RhbC9TR01EXFxuc3VidHJhY3QvR1NEXFxuc3VidHJhY3Rpb24vU01cXG5zdWJ0cmFoZW5kL1NNXFxuc3VidHJvcGljL1NcXG5zdWJ0cm9waWNhbFxcbnN1YnRyb3BpY3MvTVxcbnN1YnVyYi9NU1xcbnN1YnVyYmFuL1NNXFxuc3VidXJiYW5pdGUvU01cXG5zdWJ1cmJpYS9NXFxuc3VidmVudGlvbi9TTVxcbnN1YnZlcnNpb24vTVxcbnN1YnZlcnNpdmUvU1BNWVxcbnN1YnZlcnNpdmVuZXNzL01cXG5zdWJ2ZXJ0L1NER1xcbnN1YndheS9NU1xcbnN1Ynplcm9cXG5zdWNjZWVkL0dEU1xcbnN1Y2Nlc3MvVk1TXFxuc3VjY2Vzc2Z1bC9VWVxcbnN1Y2Nlc3Npb24vU01cXG5zdWNjZXNzaXZlL1lcXG5zdWNjZXNzb3IvU01cXG5zdWNjaW5jdC9SWVRQXFxuc3VjY2luY3RuZXNzL01cXG5zdWNjb3IvU0dNRFxcbnN1Y2NvdGFzaC9NXFxuc3VjY3ViaVxcbnN1Y2N1YnVzXFxuc3VjY3VsZW5jZS9NXFxuc3VjY3VsZW5jeS9NXFxuc3VjY3VsZW50L1NNXFxuc3VjY3VtYi9HRFNcXG5zdWNoXFxuc3VjaGxpa2VcXG5zdWNrL01EUlpHU1xcbnN1Y2tlci9HTURcXG5zdWNrbGUvRFNKR1xcbnN1Y2tsaW5nL01cXG5zdWNyb3NlL01cXG5zdWN0aW9uL1NNREdcXG5zdWRkZW4vUFlcXG5zdWRkZW5uZXNzL01cXG5zdWRzL01cXG5zdWRzeS9UUlxcbnN1ZS9EU0dcXG5zdWVkZS9NXFxuc3VldC9NXFxuc3VldHlcXG5zdWZmZXIvRFJaR1NKXFxuc3VmZmVyYW5jZS9NXFxuc3VmZmVyZXIvTVxcbnN1ZmZlcmluZy9NXFxuc3VmZmljZS9EU0dcXG5zdWZmaWNpZW5jeS9JTVxcbnN1ZmZpY2llbnQvSVlcXG5zdWZmaXgvTURTR1xcbnN1ZmZpeGF0aW9uL01cXG5zdWZmb2NhdGUvR05EU1xcbnN1ZmZvY2F0aW9uL01cXG5zdWZmcmFnYW4vTVNcXG5zdWZmcmFnZS9NXFxuc3VmZnJhZ2V0dGUvU01cXG5zdWZmcmFnaXN0L01TXFxuc3VmZnVzZS9EU0dOXFxuc3VmZnVzaW9uL01cXG5zdWdhci9HU01EXFxuc3VnYXJjYW5lL01cXG5zdWdhcmNvYXQvR0RTXFxuc3VnYXJsZXNzXFxuc3VnYXJwbHVtL01TXFxuc3VnYXJ5L1JUXFxuc3VnZ2VzdC9HVlNEUlxcbnN1Z2dlc3RpYmlsaXR5L01cXG5zdWdnZXN0aWJsZVxcbnN1Z2dlc3Rpb24vU01cXG5zdWdnZXN0aXZlL1lQXFxuc3VnZ2VzdGl2ZW5lc3MvTVxcbnN1aWNpZGFsXFxuc3VpY2lkZS9TTVxcbnN1aXQvQk1ER1NcXG5zdWl0YWJpbGl0eS9VTVxcbnN1aXRhYmxlbmVzcy9NXFxuc3VpdGFibHkvVVxcbnN1aXRjYXNlL1NNXFxuc3VpdGUvU01cXG5zdWl0ZWQvVVxcbnN1aXRpbmcvTVxcbnN1aXRvci9NU1xcbnN1a2l5YWtpL01cXG5zdWxmYS9NXFxuc3VsZmF0ZS9TTVxcbnN1bGZpZGUvU01cXG5zdWxmb25hbWlkZXNcXG5zdWxmdXIvTURTR1xcbnN1bGZ1cmljXFxuc3VsZnVyb3VzXFxuc3Vsay9NREdTXFxuc3Vsa2lseVxcbnN1bGtpbmVzcy9NXFxuc3Vsa3kvVFJTTVBcXG5zdWxsZW4vUllQVFxcbnN1bGxlbm5lc3MvTVxcbnN1bGxpZWQvVVxcbnN1bGx5L0dEU1xcbnN1bHRhbi9NU1xcbnN1bHRhbmEvU01cXG5zdWx0YW5hdGUvTVNcXG5zdWx0cmlseVxcbnN1bHRyaW5lc3MvTVxcbnN1bHRyeS9SUFRcXG5zdW0vU01cXG5zdW1hYy9NXFxuc3VtbWFyaWx5XFxuc3VtbWFyaXplL0dEU1xcbnN1bW1hcnkvU01cXG5zdW1tYXRcXG5zdW1tYXRpb24vRk1TXFxuc3VtbWVkXFxuc3VtbWVyL01EU0dcXG5zdW1tZXJob3VzZS9TTVxcbnN1bW1lcnRpbWUvTVxcbnN1bW1lcnlcXG5zdW1taW5nXFxuc3VtbWl0L01TXFxuc3VtbWl0cnkvTVxcbnN1bW1vbi9EUlNaR1xcbnN1bW1vbmVyL01cXG5zdW1tb25zL0dNRFNcXG5zdW1vL01cXG5zdW1wL01TXFxuc3VtcHR1b3VzL1BZXFxuc3VtcHR1b3VzbmVzcy9NXFxuc3VuL1NNXFxuc3VuYmF0aC9aR01EUlNcXG5zdW5iYXRoZVxcbnN1bmJhdGhlci9NXFxuc3VuYmF0aGluZy9NXFxuc3VuYmF0aHNcXG5zdW5iZWFtL1NNXFxuc3VuYmVkL1NcXG5zdW5iZWx0L1NNXFxuc3VuYmxvY2svTVNcXG5zdW5ib25uZXQvU01cXG5zdW5idXJuL1NHTURcXG5zdW5idXJzdC9NU1xcbnN1bmRhZS9NU1xcbnN1bmRlY2svU1xcbnN1bmRlci9EU0dcXG5zdW5kaWFsL1NNXFxuc3VuZG93bi9TTVxcbnN1bmRyZXNzL1NcXG5zdW5kcmllcy9NXFxuc3VuZHJ5L1NcXG5zdW5maXNoL01TXFxuc3VuZmxvd2VyL01TXFxuc3VuZy9VXFxuc3VuZ2xhc3Nlcy9NXFxuc3VuaGF0L1NcXG5zdW5rL05cXG5zdW5sYW1wL1NNXFxuc3VubGVzc1xcbnN1bmxpZ2h0L01cXG5zdW5saXRcXG5zdW5uZWRcXG5zdW5uaW5lc3MvTVxcbnN1bm5pbmdcXG5zdW5ueS9UUlBcXG5zdW5yaXNlL1NNXFxuc3Vucm9vZi9TTVxcbnN1bnNjcmVlbi9NU1xcbnN1bnNldC9NU1xcbnN1bnNoYWRlL01TXFxuc3Vuc2hpbmUvTVxcbnN1bnNoaW55XFxuc3Vuc3BvdC9TTVxcbnN1bnN0cm9rZS9NXFxuc3VudGFuL01TXFxuc3VudGFubmVkXFxuc3VudGFubmluZ1xcbnN1bnRyYXAvU1xcbnN1bnVwL01cXG5zdXAvU1pNUlxcbnN1cGVyL01cXG5zdXBlcmFidW5kYW5jZS9NU1xcbnN1cGVyYWJ1bmRhbnRcXG5zdXBlcmFubnVhdGUvR05EU1xcbnN1cGVyYW5udWF0aW9uL01cXG5zdXBlcmIvUllUXFxuc3VwZXJjYXJnby9NXFxuc3VwZXJjYXJnb2VzXFxuc3VwZXJjaGFyZ2UvWkdEUlNcXG5zdXBlcmNoYXJnZXIvTVxcbnN1cGVyY2lsaW91cy9QWVxcbnN1cGVyY2lsaW91c25lc3MvTVxcbnN1cGVyY2l0eS9TTVxcbnN1cGVyY29tcHV0ZXIvTVNcXG5zdXBlcmNvbmR1Y3RpbmdcXG5zdXBlcmNvbmR1Y3RpdmVcXG5zdXBlcmNvbmR1Y3Rpdml0eS9NXFxuc3VwZXJjb25kdWN0b3IvU01cXG5zdXBlcmNyaXRpY2FsXFxuc3VwZXJlZ28vTVNcXG5zdXBlcmVyb2dhdGlvbi9NXFxuc3VwZXJlcm9nYXRvcnlcXG5zdXBlcmZpY2lhbC9ZXFxuc3VwZXJmaWNpYWxpdHkvTVxcbnN1cGVyZmluZVxcbnN1cGVyZmx1aXR5L01cXG5zdXBlcmZsdW91cy9ZUFxcbnN1cGVyZmx1b3VzbmVzcy9NXFxuc3VwZXJnbHVlXFxuc3VwZXJncmFzcy9TXFxuc3VwZXJoZXJvL01TXFxuc3VwZXJoZXJvZXNcXG5zdXBlcmhpZ2h3YXkvU01cXG5zdXBlcmh1bWFuXFxuc3VwZXJpbXBvc2UvR0RTXFxuc3VwZXJpbXBvc2l0aW9uL01cXG5zdXBlcmludGVuZC9EU0dcXG5zdXBlcmludGVuZGVuY2UvTVxcbnN1cGVyaW50ZW5kZW5jeS9NXFxuc3VwZXJpbnRlbmRlbnQvU01cXG5zdXBlcmlvci9NU1xcbnN1cGVyaW9yaXR5L01cXG5zdXBlcmxhdGl2ZS9TTVlcXG5zdXBlcm1hbi9NXFxuc3VwZXJtYXJrZXQvU01cXG5zdXBlcm1hc3NpdmVcXG5zdXBlcm1lblxcbnN1cGVybW9kZWwvU01cXG5zdXBlcm1vbS9NU1xcbnN1cGVybmFsXFxuc3VwZXJuYXR1cmFsL1NZXFxuc3VwZXJub3ZhL01TXFxuc3VwZXJub3ZhZVxcbnN1cGVybnVtZXJhcnkvU01cXG5zdXBlcnBvc2UvR0RTXFxuc3VwZXJwb3NpdGlvbi9NXFxuc3VwZXJwb3dlci9TTVxcbnN1cGVyc2F0dXJhdGUvR05EU1xcbnN1cGVyc2F0dXJhdGlvbi9NXFxuc3VwZXJzY3JpYmUvR0RTXFxuc3VwZXJzY3JpcHQvTVNcXG5zdXBlcnNjcmlwdGlvbi9NXFxuc3VwZXJzZWRlL0dEU1xcbnN1cGVyc2l6ZS9HRFNcXG5zdXBlcnNvbmljXFxuc3VwZXJzcHJlYWRlci9TTVxcbnN1cGVyc3Rhci9NU1xcbnN1cGVyc3RhcmRvbVxcbnN1cGVyc3RhdGUvU1xcbnN1cGVyc3RpdGlvbi9NU1xcbnN1cGVyc3RpdGlvdXMvWVxcbnN1cGVyc3RvcmUvTVNcXG5zdXBlcnN0cnVjdHVyZS9NU1xcbnN1cGVydGFua2VyL01TXFxuc3VwZXJ1c2VyL1NcXG5zdXBlcnZlbmUvR0RTXFxuc3VwZXJ2ZW50aW9uL01cXG5zdXBlcnZpc2UvWEdORFNcXG5zdXBlcnZpc2VkL1VcXG5zdXBlcnZpc2lvbi9NXFxuc3VwZXJ2aXNvci9NU1xcbnN1cGVydmlzb3J5XFxuc3VwZXJ3b21hbi9NXFxuc3VwZXJ3b21lblxcbnN1cGluZS9ZXFxuc3VwcC9EUlpHXFxuc3VwcGVyL01cXG5zdXBwZXJ0aW1lXFxuc3VwcGxcXG5zdXBwbGFudC9TREdcXG5zdXBwbGUvVExQUlxcbnN1cHBsZW1lbnQvTURHU1xcbnN1cHBsZW1lbnRhbFxcbnN1cHBsZW1lbnRhcnlcXG5zdXBwbGVtZW50YXRpb24vTVxcbnN1cHBsZW5lc3MvTVxcbnN1cHBsaWFudC9TTVxcbnN1cHBsaWNhbnQvTVNcXG5zdXBwbGljYXRlL0dEU1xcbnN1cHBsaWNhdGlvbi9NXFxuc3VwcGxpZXIvTVxcbnN1cHBseS9aR0RSU01YTlxcbnN1cHBvcnQvTURSU0JaR1ZcXG5zdXBwb3J0YWJsZS9VSVxcbnN1cHBvcnRlZC9VXFxuc3VwcG9ydGVyL01cXG5zdXBwb3NlL0dEU1xcbnN1cHBvc2VkL1lcXG5zdXBwb3NpdGlvbi9NU1xcbnN1cHBvc2l0b3J5L1NNXFxuc3VwcHJlc3MvR1ZEU1xcbnN1cHByZXNzYW50L01TXFxuc3VwcHJlc3NpYmxlXFxuc3VwcHJlc3Npb24vTVxcbnN1cHByZXNzb3IvU01cXG5zdXBwdXJhdGUvRFNHTlxcbnN1cHB1cmF0aW9uL01cXG5zdXByYVxcbnN1cHJhbmF0aW9uYWxcXG5zdXByZW1hY2lzdC9NU1xcbnN1cHJlbWFjeS9NXFxuc3VwcmVtZS9ZXFxuc3VwcmVtby9TXFxuc3VwdFxcbnN1cmNlYXNlL0RTTUdcXG5zdXJjaGFyZ2UvRFNNR1xcbnN1cmNpbmdsZS9TTVxcbnN1cmUvUFlUUlxcbnN1cmVmaXJlXFxuc3VyZWZvb3RlZFxcbnN1cmVuZXNzL01cXG5zdXJldHkvU01cXG5zdXJmL01EUlpHU1xcbnN1cmZhY2Unc1xcbnN1cmZhY2UvQUdEU1xcbnN1cmZib2FyZC9NRFNHXFxuc3VyZmVpdC9NRFNHXFxuc3VyZmVyL01cXG5zdXJmaW5nL01cXG5zdXJnZS9EU01HXFxuc3VyZ2Vvbi9NU1xcbnN1cmdlcnkvU01cXG5zdXJnaWNhbC9ZXFxuc3VybGluZXNzL01cXG5zdXJseS9QVFJcXG5zdXJtaXNlL01HRFNcXG5zdXJtb3VudC9ER1NCXFxuc3VybW91bnRhYmxlL0lcXG5zdXJuYW1lL01TXFxuc3VycGFzcy9HRFNcXG5zdXJwYXNzZWQvVVxcbnN1cnBsaWNlL01TXFxuc3VycGx1cy9NU1xcbnN1cnBsdXNzZWRcXG5zdXJwbHVzc2luZ1xcbnN1cnByaXNlL0RTTUdKXFxuc3VycHJpc2luZy9VWVxcbnN1cnJlYWxcXG5zdXJyZWFsaXNtL01cXG5zdXJyZWFsaXN0L1NNXFxuc3VycmVhbGlzdGljXFxuc3VycmVhbGlzdGljYWxseVxcbnN1cnJlbmRlci9NRFNHXFxuc3VycmVwdGl0aW91cy9QWVxcbnN1cnJlcHRpdGlvdXNuZXNzL01cXG5zdXJyZXkvTVNcXG5zdXJyb2dhY3kvTVxcbnN1cnJvZ2F0ZS9TTVxcbnN1cnJvdW5kL0dTREpcXG5zdXJyb3VuZGluZy9NXFxuc3Vycm91bmRpbmdzL01cXG5zdXJ0YXgvTURTR1xcbnN1cnRpdGxlL1NcXG5zdXJ2ZWlsbGFuY2UvTVxcbnN1cnZleSdzXFxuc3VydmV5L0FER1NcXG5zdXJ2ZXlpbmcvTVxcbnN1cnZleW9yL1NNXFxuc3Vydml2YWwvU01cXG5zdXJ2aXZhbGlzdC9TTVxcbnN1cnZpdmUvRFNHQlxcbnN1cnZpdm9yL1NNXFxuc3VzY2VwdGliaWxpdHkvU01cXG5zdXNjZXB0aWJsZS9JXFxuc3VzaGkvTVxcbnN1c3BlY3QvU01ER1xcbnN1c3BlY3RlZC9VXFxuc3VzcGVuZC9TRFJaR1xcbnN1c3BlbmRlci9NXFxuc3VzcGVuc2UvWE1OXFxuc3VzcGVuc2VmdWxcXG5zdXNwZW5zaW9uL01cXG5zdXNwaWNpb24vU01cXG5zdXNwaWNpb3VzL1lcXG5zdXNzL0RTR1xcbnN1c3RhaW4vU0RCR1xcbnN1c3RhaW5hYmlsaXR5XFxuc3VzdGFpbmFibGUvVVxcbnN1c3RhaW5hYmx5XFxuc3VzdGVuYW5jZS9NXFxuc3V0bGVyL01TXFxuc3V0dGVlXFxuc3V0dXJlL01HRFNcXG5zdXplcmFpbi9NU1xcbnN1emVyYWludHkvTVxcbnN2ZWx0ZS9UUlxcbnN3YWIvTVNcXG5zd2FiYmVkXFxuc3dhYmJpbmdcXG5zd2FkZGxlL0RTR1xcbnN3YWcvTVNcXG5zd2FnZ2VkXFxuc3dhZ2dlci9TTURSR1xcbnN3YWdnaW5nXFxuc3dhaW4vU01cXG5zd2FsbG93L0dTTURcXG5zd2FsbG93dGFpbC9NU1xcbnN3YW1cXG5zd2FtaS9TTVxcbnN3YW1wL0dTTURcXG5zd2FtcGxhbmQvTVxcbnN3YW1weS9SVFxcbnN3YW4vTVNcXG5zd2Fuay9UR1NNRFJcXG5zd2Fua2lseVxcbnN3YW5raW5lc3MvTVxcbnN3YW5reS9SUFRcXG5zd2FubmVkXFxuc3dhbm5pbmdcXG5zd2Fuc29uZy9TXFxuc3dhcC9NU1xcbnN3YXBwZWRcXG5zd2FwcGluZ1xcbnN3YXJkL1NNXFxuc3dhcm0vR1NNRFxcbnN3YXJ0aHkvVFJcXG5zd2FzaC9HTURTXFxuc3dhc2hidWNrbGVyL1NNXFxuc3dhc2hidWNrbGluZy9NXFxuc3dhc3Rpa2EvU01cXG5zd2F0L01TXFxuc3dhdGNoL01TXFxuc3dhdGgvR01EU1xcbnN3YXRoZS9NXFxuc3dhdGhzXFxuc3dhdHRlZFxcbnN3YXR0ZXIvU01ER1xcbnN3YXR0aW5nXFxuc3dheS9NREdTXFxuc3dheWJhY2svTURcXG5zd2F5ZWQvVVxcbnN3ZWFyL1pHU1JcXG5zd2VhcmVyL01cXG5zd2VhcndvcmQvTVNcXG5zd2VhdC9aR1NNRFJcXG5zd2VhdGJhbmQvTVNcXG5zd2VhdGVyL01cXG5zd2VhdHBhbnRzL01cXG5zd2VhdHMvTVxcbnN3ZWF0c2hpcnQvU01cXG5zd2VhdHNob3AvTVNcXG5zd2VhdHN1aXQvU1xcbnN3ZWF0eS9SVFxcbnN3ZWRlL1NNXFxuc3dlZXAvWkdTTVJKXFxuc3dlZXBlci9NXFxuc3dlZXBpbmcvTVlcXG5zd2VlcGluZ3MvTVxcbnN3ZWVwc3Rha2VzL01cXG5zd2VldC9YVFNNTlJZUFxcbnN3ZWV0YnJlYWQvU01cXG5zd2VldGJyaWVyL1NNXFxuc3dlZXRjb3JuXFxuc3dlZXRlbmVkL1VcXG5zd2VldGVuZXIvTVNcXG5zd2VldGVuaW5nL01cXG5zd2VldGhlYXJ0L1NNXFxuc3dlZXRpZS9TTVxcbnN3ZWV0aXNoXFxuc3dlZXRtZWF0L01TXFxuc3dlZXRuZXNzL01cXG5zd2VsbC9UR1NNRFJKXFxuc3dlbGxoZWFkL01EU1xcbnN3ZWxsaW5nL01cXG5zd2VsdGVyL1NHTURcXG5zd2VwdFxcbnN3ZXB0YmFja1xcbnN3ZXJ2ZS9NR0RTXFxuc3dlcnZpbmcvVVxcbnN3aWZ0L1BUU01SWVxcbnN3aWZ0bmVzcy9NXFxuc3dpZy9NU1xcbnN3aWdnZWRcXG5zd2lnZ2luZ1xcbnN3aWxsL0dTTURcXG5zd2ltL01TXFxuc3dpbW1lci9TTVxcbnN3aW1taW5nL01ZXFxuc3dpbXN1aXQvU01cXG5zd2ltd2VhclxcbnN3aW5kbGUvRFJTTVpHXFxuc3dpbmRsZXIvTVxcbnN3aW5lL1NNXFxuc3dpbmVoZXJkL1NNXFxuc3dpbmcvWkdTTVJcXG5zd2luZ2VpbmdcXG5zd2luZ2VyL01cXG5zd2luaXNoXFxuc3dpcGUvRFNNR1xcbnN3aXJsL0dTTURcXG5zd2lybHlcXG5zd2lzaC9UR01EUlNcXG5zd2l0Y2gvTURSU1pHQlxcbnN3aXRjaGJhY2svTVNcXG5zd2l0Y2hibGFkZS9TTVxcbnN3aXRjaGJvYXJkL1NNXFxuc3dpdGNoZXIvTVxcbnN3aXRjaG92ZXJcXG5zd2l2ZWwvTURHU1xcbnN3aXpcXG5zd2l6elxcbnN3aXp6bGUvRFNHXFxuc3dvbGxlblxcbnN3b29uL1NHTURcXG5zd29vcC9TR01EXFxuc3dvb3NoL01EU0dcXG5zd29yZC9TTVxcbnN3b3JkZmlzaC9NU1xcbnN3b3JkcGxheS9NXFxuc3dvcmRzbWFuL01cXG5zd29yZHNtYW5zaGlwL01cXG5zd29yZHNtZW5cXG5zd29yZVxcbnN3b3JuXFxuc3dvdC9TXFxuc3dvdHRlZFxcbnN3b3R0aW5nXFxuc3d1bVxcbnN3dW5nXFxuc3liYXJpdGUvU01cXG5zeWJhcml0aWNcXG5zeWNhbW9yZS9NU1xcbnN5Y29waGFuY3kvTVxcbnN5Y29waGFudC9TTVxcbnN5Y29waGFudGljXFxuc3lsbGFiaWNcXG5zeWxsYWJpY2F0ZS9HTkRTXFxuc3lsbGFiaWNhdGlvbi9NXFxuc3lsbGFiaWZpY2F0aW9uL01cXG5zeWxsYWJpZnkvRFNOR1xcbnN5bGxhYmxlL01TXFxuc3lsbGFidWIvU1xcbnN5bGxhYnVzL01TXFxuc3lsbG9naXNtL01TXFxuc3lsbG9naXN0aWNcXG5zeWxwaC9NXFxuc3lscGhpY1xcbnN5bHBobGlrZVxcbnN5bHBoc1xcbnN5bHZhblxcbnN5bWJpb3Nlc1xcbnN5bWJpb3Npcy9NXFxuc3ltYmlvdGljXFxuc3ltYmlvdGljYWxseVxcbnN5bWJvbC9NU1xcbnN5bWJvbGljXFxuc3ltYm9saWNhbC9ZXFxuc3ltYm9saXNtL01cXG5zeW1ib2xpemF0aW9uL01cXG5zeW1ib2xpemUvRFNHXFxuc3ltYm9sb2d5XFxuc3ltbWV0cmljXFxuc3ltbWV0cmljYWwvWVxcbnN5bW1ldHJ5L1NNXFxuc3ltcGF0aGV0aWMvVVxcbnN5bXBhdGhldGljYWxseS9VXFxuc3ltcGF0aGllcy9NXFxuc3ltcGF0aGl6ZS9aR0RSU1xcbnN5bXBhdGhpemVyL01cXG5zeW1wYXRoeS9TTVxcbnN5bXBob25pY1xcbnN5bXBob255L1NNXFxuc3ltcG9zaXVtL01TXFxuc3ltcHRvbS9NU1xcbnN5bXB0b21hdGljXFxuc3ltcHRvbWF0aWNhbGx5XFxuc3luL0hcXG5zeW5hZ29nYWxcXG5zeW5hZ29ndWUvU01cXG5zeW5hcHNlL01TXFxuc3luYXB0aWNcXG5zeW5jL01EU0dcXG5zeW5jaHJvbmljaXR5XFxuc3luY2hyb25pemF0aW9uL1NNXFxuc3luY2hyb25pemUvR0RTXFxuc3luY2hyb25vdXMvWVxcbnN5bmNocm9ueVxcbnN5bmNvcGF0ZS9EU0dOXFxuc3luY29wYXRpb24vTVxcbnN5bmNvcGUvTVxcbnN5bmRpY2FsaXNtXFxuc3luZGljYWxpc3QvU1xcbnN5bmRpY2F0ZS9EU01HTlxcbnN5bmRpY2F0aW9uL01cXG5zeW5kcm9tZS9TTVxcbnN5bmVyZ2lzbS9NXFxuc3luZXJnaXN0aWNcXG5zeW5lcmd5L1NNXFxuc3luZnVlbC9NU1xcbnN5bm9kL1NNXFxuc3lub255bS9TTVxcbnN5bm9ueW1vdXNcXG5zeW5vbnlteS9NXFxuc3lub3BzZXNcXG5zeW5vcHNpcy9NXFxuc3lub3B0aWNcXG5zeW5vdmlhbFxcbnN5bnRhY3RpY1xcbnN5bnRhY3RpY2FsL1lcXG5zeW50YXgvTVxcbnN5bnRoZXNlc1xcbnN5bnRoZXNpcy9NXFxuc3ludGhlc2l6ZS9aR0RSU1xcbnN5bnRoZXNpemVyL01cXG5zeW50aGV0aWMvU01cXG5zeW50aGV0aWNhbGx5XFxuc3ludGhzXFxuc3lwaGlsaXMvTVxcbnN5cGhpbGl0aWMvU01cXG5zeXJpbmdlL0RTTUdcXG5zeXJ1cC9TTVxcbnN5cnVweVxcbnN5c2FkbWluL1NcXG5zeXNvcC9TXFxuc3lzdGVtL1NNXFxuc3lzdGVtYXRpYy9VXFxuc3lzdGVtYXRpY2FsL1lcXG5zeXN0ZW1hdGl6YXRpb24vTVxcbnN5c3RlbWF0aXplL0dEU1xcbnN5c3RlbWljL01TXFxuc3lzdGVtaWNhbGx5XFxuc3lzdG9sZS9TTVxcbnN5c3RvbGljXFxudC9TRE5YR0JKXFxudGFcXG50YWIvU01cXG50YWJiZWRcXG50YWJiaW5nXFxudGFiYm91bGVoL01cXG50YWJieS9TTVxcbnRhYmVybmFjbGUvU01cXG50YWJsYS9NU1xcbnRhYmxlL01HRFNcXG50YWJsZWF1L01cXG50YWJsZWF1eFxcbnRhYmxlY2xvdGgvTVxcbnRhYmxlY2xvdGhzXFxudGFibGVsYW5kL1NNXFxudGFibGVzcG9vbi9TTVxcbnRhYmxlc3Bvb25mdWwvU01cXG50YWJsZXQvU01cXG50YWJsZXRvcC9NU1xcbnRhYmxld2FyZS9NXFxudGFibG9pZC9TTVxcbnRhYm9vL01EU0dcXG50YWJvci9NU1xcbnRhYnVsYXJcXG50YWJ1bGF0ZS9EU0dOWFxcbnRhYnVsYXRpb24vTVxcbnRhYnVsYXRvci9TTVxcbnRhY2hvZ3JhcGhcXG50YWNob2dyYXBoc1xcbnRhY2hvbWV0ZXIvU01cXG50YWNoeWNhcmRpYS9NXFxudGFjaHlvblxcbnRhY2l0L1BZXFxudGFjaXRuZXNzL01cXG50YWNpdHVybi9ZXFxudGFjaXR1cm5pdHkvTVxcbnRhY2svWkdNRFJTXFxudGFja2VyL01cXG50YWNraW5lc3MvTVxcbnRhY2tsZS9EUlNNWkdcXG50YWNrbGVyL01cXG50YWNreS9SVFBcXG50YWNvL01TXFxudGFjdC9GTVxcbnRhY3RmdWwvWVBcXG50YWN0ZnVsbmVzcy9NXFxudGFjdGljL1NNXFxudGFjdGljYWwvWVxcbnRhY3RpY2lhbi9NU1xcbnRhY3RpbGVcXG50YWN0aWxpdHkvTVxcbnRhY3RsZXNzL1BZXFxudGFjdGxlc3NuZXNzL01cXG50YWQvU01cXG50YWRwb2xlL01TXFxudGFmZmV0YS9NXFxudGFmZnJhaWwvU01cXG50YWZmeS9TTVxcbnRhZy9TTVxcbnRhZ2dlZFxcbnRhZ2dlci9TTVxcbnRhZ2dpbmdcXG50YWdsaWF0ZWxsZVxcbnRhZ2xpbmUvTVNcXG50YWlnYS9NU1xcbnRhaWwvQUNTRE1HXFxudGFpbGJhY2svTVNcXG50YWlsYm9hcmQvU1xcbnRhaWxib25lL1NcXG50YWlsY29hdC9NU1xcbnRhaWxnYXRlL01aR0RSU1xcbnRhaWxnYXRlci9NXFxudGFpbGxlc3NcXG50YWlsbGlnaHQvTVNcXG50YWlsb3IvU0dNRFxcbnRhaWxvcmluZy9NXFxudGFpbHBpZWNlL1NcXG50YWlscGlwZS9TTVxcbnRhaWxzcGluL1NNXFxudGFpbHdpbmQvU01cXG50YWludC9NRFNHXFxudGFpbnRlZC9VXFxudGFrZS9BSU1TXFxudGFrZWF3YXkvU1xcbnRha2VuL0FcXG50YWtlb2ZmL01TXFxudGFrZW91dC9NU1xcbnRha2VvdmVyL1NNXFxudGFrZXIvTVNcXG50YWtpbmcvU01cXG50YWtpbmdzL01cXG50YWxjL01cXG50YWxjdW0vTVxcbnRhbGUvTVNcXG50YWxlYmVhcmVyL01TXFxudGFsZW50L1NNRFxcbnRhbGVudGVkL1VcXG50YWxpXFxudGFsaXNtYW4vTVNcXG50YWxrL1pHTURSU1xcbnRhbGthdGl2ZS9QWVxcbnRhbGthdGl2ZW5lc3MvTVxcbnRhbGtlci9NXFxudGFsa2llL1JTTVRcXG50YWxreVxcbnRhbGwvVFJQXFxudGFsbGJveS9NU1xcbnRhbGxpZXIvTVxcbnRhbGxpc2hcXG50YWxsbmVzcy9NXFxudGFsbG93L01cXG50YWxsb3d5XFxudGFsbHkvRFJTTVpHXFxudGFsbHloby9NREdTXFxudGFsb24vTVNcXG50YWx1cy9NU1xcbnRhbS9TTVxcbnRhbWFsZS9TTVxcbnRhbWFyYWNrL01TXFxudGFtYXJpbmQvTVNcXG50YW1ib3VyaW5lL01TXFxudGFtZS9CWVpUR0RSU1BcXG50YW1lZC9VXFxudGFtZW5lc3MvTVxcbnRhbWVyL01cXG50YW1veGlmZW5cXG50YW1wL1pHRFJTXFxudGFtcGVyL1pHRFJcXG50YW1wZXJlci9NXFxudGFtcG9uL1NNXFxudGFuL1NNXFxudGFuYWdlci9NU1xcbnRhbmJhcmsvTVxcbnRhbmRlbS9TTVxcbnRhbmRvb3JpL01cXG50YW5nL01TXFxudGFuZ2Vsby9NU1xcbnRhbmdlbnQvTVNcXG50YW5nZW50aWFsL1lcXG50YW5nZXJpbmUvTVNcXG50YW5naWJpbGl0eS9JTVxcbnRhbmdpYmxlL0lNU1xcbnRhbmdpYmxlbmVzcy9NXFxudGFuZ2libHkvSVxcbnRhbmdsZSdzXFxudGFuZ2xlL1VEU0dcXG50YW5nby9NRFNHXFxudGFuZ3kvUlRcXG50YW5rL1pHTURSU1xcbnRhbmthcmQvTVNcXG50YW5rZXIvTVxcbnRhbmtmdWwvTVNcXG50YW5uZWQvVVxcbnRhbm5lci9TTVxcbnRhbm5lcnkvU01cXG50YW5uZXN0XFxudGFubmluL01cXG50YW5uaW5nL01cXG50YW5zeS9NXFxudGFudGFsaXphdGlvbi9NXFxudGFudGFsaXplL1pHRFJTXFxudGFudGFsaXplci9NXFxudGFudGFsaXppbmcvWVxcbnRhbnRhbHVtL01cXG50YW50YW1vdW50XFxudGFudHJhL01cXG50YW50cnVtL1NNXFxudGFwL1NaR01EUlxcbnRhcGFzXFxudGFwZS9NU1xcbnRhcGVsaW5lL01TXFxudGFwZXIvTURHXFxudGFwZXN0cnkvU01cXG50YXBld29ybS9NU1xcbnRhcGlvY2EvTVxcbnRhcGlyL01TXFxudGFwcGVkL1VcXG50YXBwZXIvTVNcXG50YXBwZXQvTVNcXG50YXBwaW5nXFxudGFwcm9vbS9TTVxcbnRhcHJvb3QvU01cXG50YXIvU0dNRFxcbnRhcmFtYXNhbGF0YVxcbnRhcmFudGVsbGEvTVNcXG50YXJhbnR1bGEvU01cXG50YXJiYWxsL1NcXG50YXJkaWx5XFxudGFyZGluZXNzL01cXG50YXJkeS9UUFJcXG50YXJlL01TXFxudGFyZ2V0L01ER1NcXG50YXJpZmYvTVNcXG50YXJtYWMvTVNcXG50YXJtYWNhZGFtXFxudGFybWFja2VkXFxudGFybWFja2luZ1xcbnRhcm4vTVNcXG50YXJuaXNoL0dNRFNcXG50YXJuaXNoZWQvVVxcbnRhcm8vTVNcXG50YXJvdC9NU1xcbnRhcnAvTVNcXG50YXJwYXVsaW4vTVNcXG50YXJwb24vTVNcXG50YXJyYWdvbi9TTVxcbnRhcnJlZFxcbnRhcnJpbmdcXG50YXJyeS9UR0RSU1xcbnRhcnNhbC9NU1xcbnRhcnNpXFxudGFyc3VzL01cXG50YXJ0L1BUR01EUllTXFxudGFydGFuL01TXFxudGFydGFyL01TXFxudGFydGFyaWNcXG50YXJ0bmVzcy9NXFxudGFydHkvVFxcbnRhc2VyL0dNRFNcXG50YXNrL0dNRFNcXG50YXNrYmFyXFxudGFza21hc3Rlci9NU1xcbnRhc2ttaXN0cmVzcy9NU1xcbnRhc3NlbC9NRFNHXFxudGFzdGUvSk1aR0RSU1xcbnRhc3RlZC9VXFxudGFzdGVmdWwvRVBZXFxudGFzdGVmdWxuZXNzL0VNXFxudGFzdGVsZXNzL1BZXFxudGFzdGVsZXNzbmVzcy9NXFxudGFzdGVyL01cXG50YXN0aWx5XFxudGFzdGluZXNzL01cXG50YXN0aW5nL01cXG50YXN0eS9UUlBcXG50YXQvU1pSXFxudGF0YW1pL01TXFxudGF0ZXIvTVxcbnRhdHRlZFxcbnRhdHRlci9NRFNHXFxudGF0dGVyZGVtYWxpb24vTVNcXG50YXR0aWVcXG50YXR0aW5nL01cXG50YXR0bGUvTVpHRFJTXFxudGF0dGxlci9NXFxudGF0dGxldGFsZS9NU1xcbnRhdHRvby9NRFJTWkdcXG50YXR0b29lci9NXFxudGF0dG9vaXN0L1NNXFxudGF0dHkvVFJTXFxudGF1L1NNXFxudGF1Z2h0L1VBXFxudGF1bnQvWkdNRFJTXFxudGF1bnRlci9NXFxudGF1bnRpbmcvWVxcbnRhdXBlL01cXG50YXV0L1BYVE5SWVxcbnRhdXRlbi9ER1xcbnRhdXRuZXNzL01cXG50YXV0b2xvZ2ljYWwvWVxcbnRhdXRvbG9nb3VzXFxudGF1dG9sb2d5L1NNXFxudGF2ZXJuL01TXFxudGF3ZHJpbHlcXG50YXdkcmluZXNzL01cXG50YXdkcnkvUlRQXFxudGF3bnkvVFJNXFxudGF4L0JaR01EUlNcXG50YXhhXFxudGF4YXRpb24vTVxcbnRheGVyL01cXG50YXhpL0dNRFNcXG50YXhpY2FiL1NNXFxudGF4aWRlcm1pc3QvU01cXG50YXhpZGVybXkvTVxcbnRheGltZXRlci9NU1xcbnRheGl3YXkvU1xcbnRheG1hblxcbnRheG1lblxcbnRheG9uXFxudGF4b25vbWljXFxudGF4b25vbWlzdC9NU1xcbnRheG9ub215L1NNXFxudGF4cGF5ZXIvTVNcXG50YXhwYXlpbmdcXG50Yi9TXFxudGJzcFxcbnRlYS9TTVxcbnRlYWJhZy9TXFxudGVhY2FrZS9TTVxcbnRlYWNoL1pHUlNCSlxcbnRlYWNoYWJsZS9VXFxudGVhY2hlci9NXFxudGVhY2hpbmcvTVxcbnRlYWN1cC9NU1xcbnRlYWN1cGZ1bC9NU1xcbnRlYWsvTVNcXG50ZWFrZXR0bGUvU01cXG50ZWFsL01TXFxudGVhbGlnaHQvTVNcXG50ZWFtL0dNRFNcXG50ZWFtbWF0ZS9NU1xcbnRlYW1zdGVyL01TXFxudGVhbXdvcmsvTVxcbnRlYXBvdC9NU1xcbnRlYXIvR01EU1xcbnRlYXJhd2F5L1NcXG50ZWFyZHJvcC9TTVxcbnRlYXJmdWwvWVxcbnRlYXJnYXMvTVNcXG50ZWFyZ2Fzc2VkXFxudGVhcmdhc3NpbmdcXG50ZWFyamVya2VyL01TXFxudGVhcm9vbS9TTVxcbnRlYXJ5L1RSXFxudGVhc2UvTVpHRFJTXFxudGVhc2VsL01TXFxudGVhc2VyL01cXG50ZWFzaW5nL1lcXG50ZWFzcG9vbi9TTVxcbnRlYXNwb29uZnVsL1NNXFxudGVhdC9NU1xcbnRlYXRpbWUvU1xcbnRlY2gvTVxcbnRlY2hpZS9TXFxudGVjaG5ldGl1bS9NXFxudGVjaG5pY2FsL1lcXG50ZWNobmljYWxpdHkvU01cXG50ZWNobmljaWFuL1NNXFxudGVjaG5pY29sb3JcXG50ZWNobmlxdWUvU01cXG50ZWNobm9cXG50ZWNobm9iYWJibGVcXG50ZWNobm9jcmFjeS9TTVxcbnRlY2hub2NyYXQvTVNcXG50ZWNobm9jcmF0aWNcXG50ZWNobm9sb2dpY2FsL1lcXG50ZWNobm9sb2dpc3QvTVNcXG50ZWNobm9sb2d5L1NNXFxudGVjaG5vcGhvYmUvU1xcbnRlY2hzXFxudGVjdG9uaWMvU1xcbnRlY3Rvbmljcy9NXFxudGVkL1NcXG50ZWRkeS9TXFxudGVkaW91cy9QWVxcbnRlZGlvdXNuZXNzL01cXG50ZWRpdW0vTVxcbnRlZS9EU01IXFxudGVlaW5nXFxudGVlbS9HRFNcXG50ZWVuL01TXFxudGVlbmFnZS9SWlxcbnRlZW5hZ2VyL01cXG50ZWVueS9UUlxcbnRlZW55Ym9wcGVyL01TXFxudGVldGVyL01EU0dcXG50ZWV0aGUvR0RTXFxudGVldGhpbmcvTVxcbnRlZXRvdGFsL1JaXFxudGVldG90YWxlci9NXFxudGVldG90YWxpc20vTVxcbnRla3RpdGUvU01cXG50ZWxcXG50ZWxlY2FzdC9TWkdNUlxcbnRlbGVjYXN0ZXIvTVxcbnRlbGVjb21tdW5pY2F0aW9uL01TXFxudGVsZWNvbW11bmljYXRpb25zL01cXG50ZWxlY29tbXV0ZS9aR0RSU1xcbnRlbGVjb21tdXRlci9NXFxudGVsZWNvbW11dGluZy9NXFxudGVsZWNvbmZlcmVuY2UvTUdEU1xcbnRlbGVjb25mZXJlbmNpbmcvTVxcbnRlbGVnZW5pY1xcbnRlbGVncmFtL01TXFxudGVsZWdyYXBoL01EUlpHXFxudGVsZWdyYXBoZXIvTVxcbnRlbGVncmFwaGVzZVxcbnRlbGVncmFwaGljXFxudGVsZWdyYXBoaWNhbGx5XFxudGVsZWdyYXBoaXN0L1NNXFxudGVsZWdyYXBoc1xcbnRlbGVncmFwaHkvTVxcbnRlbGVraW5lc2lzL01cXG50ZWxla2luZXRpY1xcbnRlbGVtYXJrZXRlci9TTVxcbnRlbGVtYXJrZXRpbmcvTVxcbnRlbGVtZXRlci9TTVxcbnRlbGVtZXRyeS9TTVxcbnRlbGVvbG9naWNhbFxcbnRlbGVvbG9neVxcbnRlbGVwYXRoaWNcXG50ZWxlcGF0aGljYWxseVxcbnRlbGVwYXRoeS9NXFxudGVsZXBob25lL0RSU01aR1xcbnRlbGVwaG9uZXIvTVxcbnRlbGVwaG9uaWNcXG50ZWxlcGhvbmlzdC9TXFxudGVsZXBob255L01cXG50ZWxlcGhvdG8vU01cXG50ZWxlcGhvdG9ncmFwaHkvTVxcbnRlbGVwbGF5L01TXFxudGVsZXBvcnRcXG50ZWxlcG9ydGF0aW9uXFxudGVsZXByaW50ZXIvTVNcXG50ZWxlcHJvY2Vzc2luZy9NXFxudGVsZXByb21wdGVyL1NNXFxudGVsZXNhbGVzXFxudGVsZXNjb3BlL0RTTUdcXG50ZWxlc2NvcGljXFxudGVsZXNjb3BpY2FsbHlcXG50ZWxldGV4dC9NU1xcbnRlbGV0aG9uL01TXFxudGVsZXR5cGUvU1xcbnRlbGV0eXBld3JpdGVyL01TXFxudGVsZXZhbmdlbGlzbS9NXFxudGVsZXZhbmdlbGlzdC9NU1xcbnRlbGV2aXNlL1hHTkRTXFxudGVsZXZpc2lvbi9NXFxudGVsZXdvcmtlci9TXFxudGVsZXdvcmtpbmdcXG50ZWxleC9NRFNHXFxudGVsbC9BR1NcXG50ZWxsZXIvU01cXG50ZWxsaW5nL1lcXG50ZWxsdGFsZS9TTVxcbnRlbGx1cml1bS9NXFxudGVsbHkvU01cXG50ZWxuZXRcXG50ZW1ibG9yL01TXFxudGVtZXJpdHkvTVxcbnRlbXAvTURSWlRHU1xcbnRlbXBlci9NREdcXG50ZW1wZXJhL0xTTVxcbnRlbXBlcmFtZW50L01TXFxudGVtcGVyYW1lbnRhbC9ZXFxudGVtcGVyYW5jZS9JTVxcbnRlbXBlcmF0ZS9JWVxcbnRlbXBlcmF0ZW5lc3MvTVxcbnRlbXBlcmF0dXJlL1NNXFxudGVtcGVzdC9TTVxcbnRlbXBlc3R1b3VzL1lQXFxudGVtcGVzdHVvdXNuZXNzL01cXG50ZW1wbGF0ZSdzXFxudGVtcGxhdGUvU1xcbnRlbXBsZS9TTVxcbnRlbXBvL1NNXFxudGVtcG9yYWwvWVxcbnRlbXBvcmFyaWx5XFxudGVtcG9yYXJpbmVzcy9NXFxudGVtcG9yYXJ5L0ZTTVxcbnRlbXBvcml6ZS9aR0RSU1xcbnRlbXBvcml6ZXIvTVxcbnRlbXB0L1NEUlpHXFxudGVtcHRhdGlvbi9NU1xcbnRlbXB0ZXIvTVxcbnRlbXB0aW5nL1lcXG50ZW1wdHJlc3MvTVNcXG50ZW1wdXJhL01cXG50ZW4vQk1IXFxudGVuYWJpbGl0eS9NXFxudGVuYWJsZS9VXFxudGVuYWJseVxcbnRlbmFjaW91cy9ZUFxcbnRlbmFjaW91c25lc3MvTVxcbnRlbmFjaXR5L01cXG50ZW5hbmN5L1NNXFxudGVuYW50L1NNREdcXG50ZW5hbnRlZC9VXFxudGVuYW50cnkvTVxcbnRlbmNoXFxudGVuZC9JRUZER1NcXG50ZW5kZWQvVVxcbnRlbmRlbmN5L1NNXFxudGVuZGVudGlvdXMvWVBcXG50ZW5kZW50aW91c25lc3MvTVxcbnRlbmRlci9TTURSWVRHUFxcbnRlbmRlcmZvb3QvTVNcXG50ZW5kZXJoZWFydGVkL1BcXG50ZW5kZXJoZWFydGVkbmVzcy9NXFxudGVuZGVyaXplL1pHRFJTXFxudGVuZGVyaXplci9NXFxudGVuZGVybG9pbi9TTVxcbnRlbmRlcm5lc3MvTVxcbnRlbmRpbml0aXMvTVxcbnRlbmRvbi9TTVxcbnRlbmRyaWwvU01cXG50ZW5lbWVudC9TTVxcbnRlbmV0L1NNXFxudGVuZm9sZFxcbnRlbm5lci9TXFxudGVubmlzL01cXG50ZW5vbi9TTURHXFxudGVub3IvU01cXG50ZW5waW4vU01cXG50ZW5waW5zL01cXG50ZW5zZS9EUlNNWVRHTlhQXFxudGVuc2VuZXNzL01cXG50ZW5zaWxlXFxudGVuc2lvbi9FU01cXG50ZW5zaXR5L0lNXFxudGVuc29yL1NcXG50ZW50L0RHU01cXG50ZW50YWNsZS9EU01cXG50ZW50YXRpdmUvUFlcXG50ZW50YXRpdmVuZXNzL01cXG50ZW50ZXJob29rL01TXFxudGVudGgvTVlcXG50ZW50aHNcXG50ZW51aXR5L01cXG50ZW51b3VzL1BZXFxudGVudW91c25lc3MvTVxcbnRlbnVyZS9EU01HXFxudGVwZWUvU01cXG50ZXBpZC9ZUFxcbnRlcGlkaXR5L01cXG50ZXBpZG5lc3MvTVxcbnRlcXVpbGEvU01cXG50ZXJhYml0L1NNXFxudGVyYWJ5dGUvTVNcXG50ZXJhaGVydHovTVxcbnRlcmFqb3VsZS9TXFxudGVyYXBpeGVsL01TXFxudGVyYXdhdHQvU1xcbnRlcmJpdW0vTVxcbnRlcmNlbnRlbmFyeS9TTVxcbnRlcmNlbnRlbm5pYWwvU01cXG50ZXJpeWFraVxcbnRlcm0vTURZR1NcXG50ZXJtYWdhbnQvTVNcXG50ZXJtaW5hYmxlL0lDXFxudGVybWluYWwvTVlTXFxudGVybWluYXRlL0RTR05YXFxudGVybWluYXRpb24vQ1NNXFxudGVybWluYXRvci9TXFxudGVybWluaVxcbnRlcm1pbm9sb2dpY2FsL1lcXG50ZXJtaW5vbG9neS9TTVxcbnRlcm1pbnVzL01cXG50ZXJtaXRlL1NNXFxudGVybi9JTVNcXG50ZXJuYXJ5L1NNXFxudGVyclxcbnRlcnJhY2UvRFNNR1xcbnRlcnJhY290dGEvTVxcbnRlcnJhaW4vU01cXG50ZXJyYXBpbi9NU1xcbnRlcnJhcml1bS9TTVxcbnRlcnJhenpvL01TXFxudGVycmVzdHJpYWwvU01ZXFxudGVycmlibGUvUFxcbnRlcnJpYmxlbmVzcy9NXFxudGVycmlibHlcXG50ZXJyaWVyL01cXG50ZXJyaWZpY1xcbnRlcnJpZmljYWxseVxcbnRlcnJpZnkvR0RTXFxudGVycmlmeWluZy9ZXFxudGVycmluZS9TXFxudGVycml0b3JpYWwvTVNcXG50ZXJyaXRvcmlhbGl0eVxcbnRlcnJpdG9yeS9TTVxcbnRlcnJvci9TTVxcbnRlcnJvcmlzbS9NXFxudGVycm9yaXN0L1NNXFxudGVycm9yaXplL0RTR1xcbnRlcnJ5L1JNWlxcbnRlcnJ5Y2xvdGgvTVxcbnRlcnNlL1JZVFBcXG50ZXJzZW5lc3MvTVxcbnRlcnRpYXJ5XFxudGVzc2VsbGF0ZS9EU1hHTlxcbnRlc3NlbGxhdGlvbi9NXFxudGVzdCdzL0FGS1xcbnRlc3QvQUtGQ0RHU1xcbnRlc3RhYmxlL0NGXFxudGVzdGFtZW50L01TXFxudGVzdGFtZW50YXJ5XFxudGVzdGF0ZS9TXFxudGVzdGF0b3IvTVNcXG50ZXN0YXRyaWNlc1xcbnRlc3RhdHJpeC9NXFxudGVzdGVkL1VcXG50ZXN0ZXIvS1NNXFxudGVzdGVzXFxudGVzdGljbGUvTVNcXG50ZXN0aWN1bGFyXFxudGVzdGlmaWVyL01cXG50ZXN0aWZ5L1pHRFJTXFxudGVzdGlseVxcbnRlc3RpbW9uaWFsL01TXFxudGVzdGltb255L1NNXFxudGVzdGluZXNzL01cXG50ZXN0aW5nc1xcbnRlc3Rpcy9NXFxudGVzdG9zdGVyb25lL01cXG50ZXN0eS9QUlRcXG50ZXRhbnVzL01cXG50ZXRjaGlseVxcbnRldGNoeS9QUlRcXG50ZXRoZXIvU01ER1xcbnRldHJhL1NNXFxudGV0cmFjeWNsaW5lL01cXG50ZXRyYWhlZHJhbFxcbnRldHJhaGVkcm9uL01TXFxudGV0cmFtZXRlci9TTVxcbnRleHQvRk1TXFxudGV4dGJvb2svU01cXG50ZXh0ZWRcXG50ZXh0aWxlL01TXFxudGV4dGluZ1xcbnRleHR1YWwvRllcXG50ZXh0dXJhbFxcbnRleHR1cmUvTUdEU1xcbnRoYWxhbWlcXG50aGFsYW11cy9NXFxudGhhbGlkb21pZGUvTVxcbnRoYWxsaXVtL01cXG50aGFuXFxudGhhbmUvU01cXG50aGFuay9TREdcXG50aGFua2Z1bC9ZUFxcbnRoYW5rZnVsbmVzcy9NXFxudGhhbmtsZXNzL1BZXFxudGhhbmtsZXNzbmVzcy9NXFxudGhhbmtzZ2l2aW5nL1NNXFxudGhhdCdkXFxudGhhdCdsbFxcbnRoYXQvTVxcbnRoYXRjaC9NRFJTWkdcXG50aGF0Y2hlci9NXFxudGhhdGNoaW5nL01cXG50aGF3L01ER1NcXG50aGUvSkdcXG50aGVhdGVyL1NNXFxudGhlYXRlcmdvZXIvU01cXG50aGVhdHJpY2FsL1lTXFxudGhlYXRyaWNhbGl0eS9NXFxudGhlYXRyaWNhbHMvTVxcbnRoZWF0cmljcy9NXFxudGhlZS9TXFxudGhlZnQvU01cXG50aGVpci9TXFxudGhlaXNtL01cXG50aGVpc3QvU01cXG50aGVpc3RpY1xcbnRoZW1cXG50aGVtYXRpY1xcbnRoZW1hdGljYWxseVxcbnRoZW1lL0RTTVxcbnRoZW1zZWx2ZXNcXG50aGVuL01cXG50aGVuY2VcXG50aGVuY2Vmb3J0aFxcbnRoZW5jZWZvcndhcmRcXG50aGVvY3JhY3kvU01cXG50aGVvY3JhdGljXFxudGhlb2RvbGl0ZS9TXFxudGhlb2xvZ2lhbi9TTVxcbnRoZW9sb2dpY2FsL1lcXG50aGVvbG9neS9TTVxcbnRoZW9yZW0vTVNcXG50aGVvcmV0aWNcXG50aGVvcmV0aWNhbC9ZXFxudGhlb3JldGljaWFuL1NNXFxudGhlb3Jpc3QvU01cXG50aGVvcml6ZS9EU0dcXG50aGVvcnkvU01cXG50aGVvc29waGljXFxudGhlb3NvcGhpY2FsXFxudGhlb3NvcGhpc3QvU01cXG50aGVvc29waHkvTVxcbnRoZXJhcGV1dGljL1NcXG50aGVyYXBldXRpY2FsbHlcXG50aGVyYXBldXRpY3MvTVxcbnRoZXJhcGlzdC9TTVxcbnRoZXJhcHkvU01cXG50aGVyZS9NXFxudGhlcmVhYm91dC9TXFxudGhlcmVhZnRlclxcbnRoZXJlYXRcXG50aGVyZWJ5XFxudGhlcmVmb3JcXG50aGVyZWZvcmVcXG50aGVyZWZyb21cXG50aGVyZWluXFxudGhlcmVtaW4vU01cXG50aGVyZW9mXFxudGhlcmVvblxcbnRoZXJldG9cXG50aGVyZXRvZm9yZVxcbnRoZXJldW5kZXJcXG50aGVyZXVudG9cXG50aGVyZXVwb25cXG50aGVyZXdpdGhcXG50aGVybS9TTVxcbnRoZXJtYWwvTVlTXFxudGhlcm1pb25pY1xcbnRoZXJtb2R5bmFtaWMvU1xcbnRoZXJtb2R5bmFtaWNzL01cXG50aGVybW9tZXRlci9NU1xcbnRoZXJtb21ldHJpY1xcbnRoZXJtb251Y2xlYXJcXG50aGVybW9wbGFzdGljL1NNXFxudGhlcm1vcy9NU1xcbnRoZXJtb3N0YXQvTVNcXG50aGVybW9zdGF0aWNcXG50aGVybW9zdGF0aWNhbGx5XFxudGhlc2F1cmlcXG50aGVzYXVydXMvTVNcXG50aGVzZS9TXFxudGhlc2lzL01cXG50aGVzcGlhbi9TTVxcbnRoZXRhL1NNXFxudGhldy9NU1xcbnRoZXlcXG50aGV5J2RcXG50aGV5J2xsXFxudGhleSdyZVxcbnRoZXkndmVcXG50aGlhbWluZS9NXFxudGhpY2svUE1OUllYVFxcbnRoaWNrZW4vRFJKWkdcXG50aGlja2VuZXIvTVxcbnRoaWNrZW5pbmcvTVxcbnRoaWNrZXQvTVNcXG50aGlja2hlYWRlZC9NXFxudGhpY2tuZXNzL01TXFxudGhpY2tvL1NcXG50aGlja3NldFxcbnRoaWVmL01cXG50aGlldmUvRFNHXFxudGhpZXZlcnkvTVxcbnRoaWV2aW5nL01cXG50aGlldmlzaFxcbnRoaWdoL01cXG50aGlnaGJvbmUvTVNcXG50aGlnaHNcXG50aGltYmxlL01TXFxudGhpbWJsZWZ1bC9TTVxcbnRoaW4vWVNQXFxudGhpbmVcXG50aGluZy9NXFxudGhpbmdhbWFib2IvU01cXG50aGluZ2FtYWppZy9TTVxcbnRoaW5ndW1hYm9iL1NcXG50aGluZ3VtbXkvU1xcbnRoaW5neS9TXFxudGhpbmsvU1JCWkdcXG50aGlua2FibGUvVVxcbnRoaW5rZXIvTVxcbnRoaW5raW5nJ3NcXG50aGlubmVkXFxudGhpbm5lci9NU1xcbnRoaW5uZXNzL01cXG50aGlubmVzdFxcbnRoaW5uaW5nXFxudGhpcmQvU01ZXFxudGhpcnN0L1NHTURcXG50aGlyc3RpbHlcXG50aGlyc3RpbmVzcy9NXFxudGhpcnN0eS9UUFJcXG50aGlydGVlbi9TTUhcXG50aGlydGVlbnRoL01cXG50aGlydGVlbnRoc1xcbnRoaXJ0aWV0aC9NXFxudGhpcnRpZXRoc1xcbnRoaXJ0eS9IU01cXG50aGlzXFxudGhpc3RsZS9NU1xcbnRoaXN0bGVkb3duL01cXG50aGl0aGVyXFxudGhvXFxudGhvbGUvU01cXG50aG9uZy9TTVxcbnRob3JhY2ljXFxudGhvcmF4L01TXFxudGhvcml1bS9NXFxudGhvcm4vU01cXG50aG9ybmluZXNzL01cXG50aG9ybnkvUFJUXFxudGhvcm91Z2gvUllQVFxcbnRob3JvdWdoYnJlZC9NU1xcbnRob3JvdWdoZmFyZS9NU1xcbnRob3JvdWdoZ29pbmdcXG50aG9yb3VnaG5lc3MvTVxcbnRob3NlXFxudGhvdS9NU1xcbnRob3VnaFxcbnRob3VnaHQvU01cXG50aG91Z2h0ZnVsL1lQXFxudGhvdWdodGZ1bG5lc3MvTVxcbnRob3VnaHRsZXNzL1BZXFxudGhvdWdodGxlc3NuZXNzL01cXG50aG91c2FuZC9NSFNcXG50aG91c2FuZGZvbGRcXG50aG91c2FuZHRoL01cXG50aG91c2FuZHRoc1xcbnRocmFsbC9TTURHXFxudGhyYWxsZG9tL01cXG50aHJhc2gvSk1EUlNaR1xcbnRocmFzaGVyL01cXG50aHJhc2hpbmcvTVxcbnRocmVhZC9TTURSWkdcXG50aHJlYWRiYXJlXFxudGhyZWFkZXIvTVxcbnRocmVhZGxpa2VcXG50aHJlYWR5L1RSXFxudGhyZWF0L1NNTlhcXG50aHJlYXRlbi9ER1xcbnRocmVhdGVuaW5nL1lcXG50aHJlZS9TTVxcbnRocmVlZm9sZFxcbnRocmVlcGVuY2UvTVxcbnRocmVlc2NvcmUvTVNcXG50aHJlZXNvbWUvU01cXG50aHJlbm9keS9TTVxcbnRocmVzaC9NRFJTWkdcXG50aHJlc2hlci9NXFxudGhyZXNob2xkL1NNXFxudGhyZXdcXG50aHJpY2VcXG50aHJpZnQvU01cXG50aHJpZnRpbHlcXG50aHJpZnRpbmVzcy9NXFxudGhyaWZ0bGVzc1xcbnRocmlmdHkvUFRSXFxudGhyaWxsL1NNRFJaR1xcbnRocmlsbGVyL01cXG50aHJpbGxpbmcvWVxcbnRocml2ZS9EU0dcXG50aHJvYXQvU01cXG50aHJvYXRpbHlcXG50aHJvYXRpbmVzcy9NXFxudGhyb2F0eS9SVFBcXG50aHJvYi9TTVxcbnRocm9iYmVkXFxudGhyb2JiaW5nXFxudGhyb2UvU01cXG50aHJvbWJpXFxudGhyb21ib2x5dGljXFxudGhyb21ib3Nlc1xcbnRocm9tYm9zaXMvTVxcbnRocm9tYm90aWNcXG50aHJvbWJ1cy9NXFxudGhyb25lJ3NcXG50aHJvbmUvU1xcbnRocm9uZy9HU01EXFxudGhyb3R0bGUvRFJTTVpHXFxudGhyb3R0bGVyL01cXG50aHJvdWdoXFxudGhyb3VnaG91dFxcbnRocm91Z2hwdXQvTVxcbnRocm93L1NNUlpHXFxudGhyb3dhd2F5L1NNXFxudGhyb3diYWNrL1NNXFxudGhyb3dlci9NXFxudGhyb3duXFxudGhydVxcbnRocnVtL1NNXFxudGhydW1tZWRcXG50aHJ1bW1pbmdcXG50aHJ1c2gvTVNcXG50aHJ1c3QvR1NNXFxudGhydXdheS9NU1xcbnRodWQvTVNcXG50aHVkZGVkXFxudGh1ZGRpbmdcXG50aHVnL01TXFxudGh1Z2dlcnkvTVxcbnRodWdnaXNoXFxudGh1bGl1bS9NXFxudGh1bWIvU01ER1xcbnRodW1ibmFpbC9TTVxcbnRodW1icHJpbnQvU01cXG50aHVtYnNjcmV3L1NNXFxudGh1bWJ0YWNrL1NNXFxudGh1bXAvU01ER1xcbnRodW1waW5nL01cXG50aHVuZGVyL1pHTURSU1xcbnRodW5kZXJib2x0L1NNXFxudGh1bmRlcmNsYXAvU01cXG50aHVuZGVyY2xvdWQvTVNcXG50aHVuZGVyZXIvTVxcbnRodW5kZXJoZWFkL1NNXFxudGh1bmRlcm91cy9ZXFxudGh1bmRlcnNob3dlci9TTVxcbnRodW5kZXJzdG9ybS9TTVxcbnRodW5kZXJzdHJ1Y2tcXG50aHVuZGVyeVxcbnRodW5rL1NcXG50aHVzXFxudGh3YWNrL1pHU01EUlxcbnRod2Fja2VyL01cXG50aHdhcnQvR1NNRFxcbnRoeVxcbnRoeW1lL01cXG50aHltaW5lL01cXG50aHltdXMvTVNcXG50aHlyb2lkL01TXFxudGh5cm9pZGFsXFxudGh5c2VsZlxcbnRpL01SWlxcbnRpYXJhL1NNXFxudGliaWEvTVxcbnRpYmlhZVxcbnRpYmlhbFxcbnRpYy9TTVxcbnRpY2svTURSWkdTXFxudGlja2VyL01cXG50aWNrZXQvR1NNRFxcbnRpY2tpbmcvTVxcbnRpY2tsZS9EUlNNWkdcXG50aWNrbGVyL01cXG50aWNrbGlzaC9ZUFxcbnRpY2tsaXNobmVzcy9NXFxudGlja3RhY2t0b2UvTVxcbnRpY2t0b2NrL01TXFxudGlkYWwvWVxcbnRpZGJpdC9TTVxcbnRpZGRsZXIvU1xcbnRpZGRseVxcbnRpZGRseXdpbmsvU1xcbnRpZGRseXdpbmtzL01cXG50aWRlL01HSkRTXFxudGlkZWxhbmQvU01cXG50aWRlbWFyay9TXFxudGlkZXdhdGVyL01TXFxudGlkZXdheS9NU1xcbnRpZGlseS9VXFxudGlkaW5lc3MvVU1cXG50aWRpbmdzL01cXG50aWR5L0RSU01UR1BcXG50aWUnc1xcbnRpZS9BVVNEXFxudGllYmFjay9NU1xcbnRpZWJyZWFrL1JTWlxcbnRpZWJyZWFrZXIvTVxcbnRpZXBpbi9TXFxudGllci9NRFxcbnRpZmYvTURHU1xcbnRpZ2VyL1NNXFxudGlnZXJpc2hcXG50aWdodC9TTlJZUFhUXFxudGlnaHRlbi9aR0RSXFxudGlnaHRlbmVyL01cXG50aWdodGZpc3RlZFxcbnRpZ2h0bmVzcy9NXFxudGlnaHRyb3BlL01TXFxudGlnaHRzL01cXG50aWdodHdhZC9NU1xcbnRpZ3Jlc3MvTVNcXG50aWxcXG50aWxhcGlhXFxudGlsZGUvU01cXG50aWxlL01aR0RSU1xcbnRpbGVyL01cXG50aWxpbmcvTVxcbnRpbGwnc1xcbnRpbGwvRURSWkdTXFxudGlsbGFibGVcXG50aWxsYWdlL01cXG50aWxsZXIvRU1cXG50aWx0L01ER1NcXG50aW1iZXIvU01ER1xcbnRpbWJlcmxhbmQvTVxcbnRpbWJlcmxpbmUvTVNcXG50aW1icmUvU01cXG50aW1icmVsL1NNXFxudGltZS9NWVpHSkRSU1xcbnRpbWVrZWVwZXIvTVNcXG50aW1la2VlcGluZy9NXFxudGltZWxlc3MvUFlcXG50aW1lbGVzc25lc3MvTVxcbnRpbWVsaW5lL01TXFxudGltZWxpbmVzcy9VTVxcbnRpbWVseS9VUFJUXFxudGltZW91dC9TTVxcbnRpbWVwaWVjZS9NU1xcbnRpbWVyL01cXG50aW1lc2NhbGUvU1xcbnRpbWVzZXJ2ZXIvU01cXG50aW1lc2VydmluZy9NXFxudGltZXNoYXJlL1NcXG50aW1lc3RhbXAvU01EXFxudGltZXRhYmxlL0RTTUdcXG50aW1ld29yblxcbnRpbWV6b25lXFxudGltaWQvUllUUFxcbnRpbWlkaXR5L01cXG50aW1pZG5lc3MvTVxcbnRpbWluZy9NXFxudGltb3JvdXMvUFlcXG50aW1vcm91c25lc3MvTVxcbnRpbW90aHkvTVxcbnRpbXBhbmkvTVxcbnRpbXBhbmlzdC9TTVxcbnRpbi9TTVxcbnRpbmN0dXJlL01HRFNcXG50aW5kZXIvTVxcbnRpbmRlcmJveC9NU1xcbnRpbmUvTVNcXG50aW5mb2lsL01cXG50aW5nL01EWUdcXG50aW5nZS9TTVxcbnRpbmdlaW5nXFxudGluZ2xlL0RTTUdKXFxudGluZ2xpbmcvTVxcbnRpbmluZXNzL01cXG50aW5rZXIvWkdTTURSXFxudGlua2VyZXIvTVxcbnRpbmtsZS9EU01HXFxudGlubmVkXFxudGlubmluZXNzL01cXG50aW5uaW5nXFxudGlubml0dXMvTVxcbnRpbm55L1BSVFxcbnRpbnBsYXRlL01cXG50aW5wb3RcXG50aW5zZWwvR1NNRFxcbnRpbnNtaXRoL01cXG50aW5zbWl0aHNcXG50aW50L01ER1NcXG50aW50aW5uYWJ1bGF0aW9uL01TXFxudGludHlwZS9NU1xcbnRpbndhcmUvTVxcbnRpbnkvUlRQXFxudGlwL1NNXFxudGlwcGVkXFxudGlwcGVyL1NNXFxudGlwcGV0L1NNXFxudGlwcGV4L0dEU1xcbnRpcHBpbmdcXG50aXBwbGUvRFJTTVpHXFxudGlwcGxlci9NXFxudGlwc2lseVxcbnRpcHNpbmVzcy9NXFxudGlwc3Rlci9NU1xcbnRpcHN5L1JQVFxcbnRpcHRvZS9EU01cXG50aXB0b2VpbmdcXG50aXB0b3AvU01cXG50aXJhZGUvU01cXG50aXJhbWlzdS9NU1xcbnRpcmUnc1xcbnRpcmUvQUdEU1xcbnRpcmVkL1BSWVRcXG50aXJlZG5lc3MvTVxcbnRpcmVsZXNzL1lQXFxudGlyZWxlc3NuZXNzL01cXG50aXJlc29tZS9QWVxcbnRpcmVzb21lbmVzcy9NXFxudGlzc3VlL1NNXFxudGl0L1NNXFxudGl0YW4vU01cXG50aXRhbmljXFxudGl0YW5pdW0vTVxcbnRpdGNoL1NcXG50aXRjaHlcXG50aXRoZS9EUlNNWkdcXG50aXRoZXIvTVxcbnRpdGlhbi9NXFxudGl0aWxsYXRlL0RTR05cXG50aXRpbGxhdGluZy9ZXFxudGl0aWxsYXRpb24vTVxcbnRpdGl2YXRlL0RTR05cXG50aXRpdmF0aW9uL01cXG50aXRsZS9EU01HXFxudGl0bGVkL1VcXG50aXRsZWhvbGRlci9NU1xcbnRpdGxpc3QvTVNcXG50aXRtaWNlXFxudGl0bW91c2UvTVxcbnRpdHRlci9TR01EXFxudGl0dGxlL1NNXFxudGl0dHkvU1xcbnRpdHVsYXJcXG50aXp6XFxudGl6enkvU01cXG50blxcbnRucGtcXG50by9JVVxcbnRvYWQvTVNcXG50b2Fkc3Rvb2wvTVNcXG50b2FkeS9EU01HXFxudG9hZHlpc20vTVxcbnRvYXN0L1NNRFJaR1xcbnRvYXN0ZXIvTVxcbnRvYXN0bWFzdGVyL1NNXFxudG9hc3RtaXN0cmVzcy9NU1xcbnRvYXN0eS9UUlNcXG50b2JhY2NvL01TXFxudG9iYWNjb25pc3QvU01cXG50b2JvZ2dhbi9aR1NNRFJcXG50b2JvZ2dhbmVyL01cXG50b2JvZ2dhbmluZy9NXFxudG9jY2F0YS9TXFxudG9jb3BoZXJvbFxcbnRvY3Npbi9TTVxcbnRvZGF5L01cXG50b2RkbGUvRFJTTVpHXFxudG9kZGxlci9NXFxudG9kZHkvU01cXG50b2UvRFNNXFxudG9lY2FwL1NNXFxudG9laG9sZC9NU1xcbnRvZWluZ1xcbnRvZW5haWwvTVNcXG50b2VyYWcvU1xcbnRvZmYvU1xcbnRvZmZlZS9TTVxcbnRvZnUvTVxcbnRvZy9TTVxcbnRvZ2EvTURTXFxudG9nZXRoZXIvUFxcbnRvZ2V0aGVybmVzcy9NXFxudG9nZ2VkXFxudG9nZ2luZ1xcbnRvZ2dsZS9EU01HXFxudG9ncy9NXFxudG9pbC9NRFJaR1NcXG50b2lsZXIvTVxcbnRvaWxldC9NREdTXFxudG9pbGV0cnkvU01cXG50b2lsZXR0ZS9NXFxudG9pbHNvbWVcXG50b2tlL01HRFNcXG50b2tlbi9TTVxcbnRva2VuaXNtL01cXG50b2xkL0FVXFxudG9sZS9NXFxudG9sZXJhYmxlL0lcXG50b2xlcmFibHkvSVxcbnRvbGVyYW5jZS9JTVxcbnRvbGVyYW5jZXNcXG50b2xlcmFudC9JWVxcbnRvbGVyYXRlL0dORFNcXG50b2xlcmF0aW9uL01cXG50b2xsL01ER1NcXG50b2xsYm9vdGgvTVxcbnRvbGxib290aHNcXG50b2xsZ2F0ZS9TTVxcbnRvbGx3YXkvU01cXG50b2x1ZW5lL01cXG50b20vU01cXG50b21haGF3ay9TR01EXFxudG9tYXRvL01cXG50b21hdG9lc1xcbnRvbWIvTURHU1xcbnRvbWJvbGEvU1xcbnRvbWJveS9NU1xcbnRvbWJveWlzaFxcbnRvbWJzdG9uZS9NU1xcbnRvbWNhdC9NU1xcbnRvbWUvTVNcXG50b21mb29sZXJ5L1NNXFxudG9tb2dyYXBoaWNcXG50b21vZ3JhcGh5L01cXG50b21vcnJvdy9NU1xcbnRvbXRpdC9NU1xcbnRvbi9TTVxcbnRvbmFsL1lcXG50b25hbGl0eS9TTVxcbnRvbmUnc1xcbnRvbmUvSVpHRFJTXFxudG9uZWFybS9TTVxcbnRvbmVsZXNzL1lcXG50b25lci9JTVxcbnRvbmcvTURHU1xcbnRvbmd1ZS9NR0RTXFxudG9uZ3VlbGVzc1xcbnRvbmljL1NNXFxudG9uaWdodC9NXFxudG9ubmFnZS9TTVxcbnRvbm5lL1NNXFxudG9uc2lsL01TXFxudG9uc2lsbGVjdG9teS9TTVxcbnRvbnNpbGxpdGlzL01cXG50b25zb3JpYWxcXG50b25zdXJlL0RTTUdcXG50b255L1JUXFxudG9vXFxudG9vay9BXFxudG9vbCdzXFxudG9vbC9BREdTXFxudG9vbGJhci9TTVxcbnRvb2xib3gvTVNcXG50b29sa2l0XFxudG9vbG1ha2VyL01TXFxudG9vdC9NRFJaR1NcXG50b290ZXIvTVxcbnRvb3RoL01EXFxudG9vdGhhY2hlL01TXFxudG9vdGhicnVzaC9NU1xcbnRvb3RoaWx5XFxudG9vdGhsZXNzXFxudG9vdGhwYXN0ZS9TTVxcbnRvb3RocGljay9TTVxcbnRvb3Roc29tZVxcbnRvb3RoeS9SVFxcbnRvb3RsZS9HRFNcXG50b290c2llL1NcXG50b3AvU01cXG50b3Bhei9NU1xcbnRvcGNvYXQvU01cXG50b3BkcmVzc2luZy9TTVxcbnRvcGVlL1NcXG50b3BmbGlnaHRcXG50b3BpXFxudG9waWFyeS9NXFxudG9waWMvU01cXG50b3BpY2FsL1lcXG50b3BpY2FsaXR5L01cXG50b3Brbm90L1NNXFxudG9wbGVzc1xcbnRvcG1hc3QvU01cXG50b3Btb3N0XFxudG9wbm90Y2hcXG50b3BvZ3JhcGhlci9TTVxcbnRvcG9ncmFwaGljXFxudG9wb2dyYXBoaWNhbC9ZXFxudG9wb2dyYXBoeS9TTVxcbnRvcG9sb2dpY2FsL1lcXG50b3BvbG9neVxcbnRvcHBlZFxcbnRvcHBlci9NU1xcbnRvcHBpbmcvU01cXG50b3BwbGUvR0RTXFxudG9wc2FpbC9TTVxcbnRvcHNpZGUvU01cXG50b3Bzb2lsL01cXG50b3BzcGluL01cXG50b3F1ZS9TTVxcbnRvci9TTVxcbnRvcmNoL0dNRFNcXG50b3JjaGJlYXJlci9NU1xcbnRvcmNobGlnaHQvTVxcbnRvcmVcXG50b3JlYWRvci9NU1xcbnRvcm1lbnQvU01ER1xcbnRvcm1lbnRpbmcvWVxcbnRvcm1lbnRvci9NU1xcbnRvcm5cXG50b3JuYWRvL01cXG50b3JuYWRvZXNcXG50b3JwZWRvL0dNRFxcbnRvcnBlZG9lc1xcbnRvcnBpZC9ZXFxudG9ycGlkaXR5L01cXG50b3Jwb3IvTVxcbnRvcnF1ZS9NR0RTXFxudG9ycmVudC9TTVxcbnRvcnJlbnRpYWxcXG50b3JyaWQvWVBcXG50b3JyaWRpdHkvTVxcbnRvcnJpZG5lc3MvTVxcbnRvcnNpb24vTVxcbnRvcnNpb25hbFxcbnRvcnNvL1NNXFxudG9ydCdzXFxudG9ydC9GRUFTXFxudG9ydGUvU01cXG50b3J0ZWxsaW5pL01cXG50b3J0aWxsYS9NU1xcbnRvcnRvaXNlL01TXFxudG9ydG9pc2VzaGVsbC9TTVxcbnRvcnRvbmkvTVxcbnRvcnR1b3VzL1BZXFxudG9ydHVvdXNuZXNzL01cXG50b3J0dXJlL0RSU01aR1xcbnRvcnR1cmVyL01cXG50b3J0dXJvdXNcXG50b3J1c1xcbnRvc2hcXG50b3NzL01EUlNaR1xcbnRvc3N1cC9NU1xcbnRvdC9TR01EXFxudG90YWwvR1NNRFlcXG50b3RhbGl0YXJpYW4vU01cXG50b3RhbGl0YXJpYW5pc20vTVxcbnRvdGFsaXR5L1NNXFxudG90YWxpemF0b3IvU01cXG50b3RlL01TXFxudG90ZW0vU01cXG50b3RlbWljXFxudG90dGVkXFxudG90dGVyL1pHTURSU1xcbnRvdHRlcmVyL01cXG50b3R0aW5nXFxudG91Y2FuL01TXFxudG91Y2gvQUdNRFNcXG50b3VjaGRvd24vU01cXG50b3VjaGUvQkpcXG50b3VjaGVkL1VcXG50b3VjaGlseVxcbnRvdWNoaW5lc3MvTVxcbnRvdWNoaW5nL1lcXG50b3VjaGxpbmUvU1xcbnRvdWNocGFwZXIvU1xcbnRvdWNoc2NyZWVuL01TXFxudG91Y2hzdG9uZS9NU1xcbnRvdWNoeS9SUFRcXG50b3VnaC9YVEdNRE5SWVBcXG50b3VnaGVuL1pHRFJcXG50b3VnaGVuZXIvTVxcbnRvdWdoaWUvU01cXG50b3VnaG5lc3MvTVxcbnRvdWdoc1xcbnRvdXBlZS9NU1xcbnRvdXIvQ0ZTR0RNXFxudG91cmlzbS9NXFxudG91cmlzdC9NU1xcbnRvdXJpc3RpY1xcbnRvdXJpc3R5XFxudG91cm1hbGluZS9NXFxudG91cm5hbWVudC9TTVxcbnRvdXJuZXkvTVNcXG50b3VybmlxdWV0L01TXFxudG91c2xlL0dEU1xcbnRvdXQvTURHU1xcbnRvdy9TWkdNRFJcXG50b3dhcmQvU1xcbnRvd2JvYXQvTVNcXG50b3dlbC9KR1NNRFxcbnRvd2VsZXR0ZS9TTVxcbnRvd2VsaW5nL01cXG50b3dlci9HTURcXG50b3doZWFkL01EU1xcbnRvd2hlZS9NU1xcbnRvd2xpbmUvTVNcXG50b3duL01TXFxudG93bmVlL1NcXG50b3duaG91c2UvTVNcXG50b3duaWUvTVNcXG50b3duc2ZvbGsvTVxcbnRvd25zaGlwL01TXFxudG93bnNtYW4vTVxcbnRvd25zbWVuXFxudG93bnNwZW9wbGUvTVxcbnRvd25zd29tYW4vTVxcbnRvd25zd29tZW5cXG50b3dwYXRoL01cXG50b3dwYXRoc1xcbnRvd3JvcGUvU01cXG50b3hlbWlhL01cXG50b3hpY1xcbnRveGljaXR5L1NNXFxudG94aWNvbG9naWNhbFxcbnRveGljb2xvZ2lzdC9TTVxcbnRveGljb2xvZ3kvTVxcbnRveGluL1NNXFxudG95L1NHTURcXG50b3lib3kvU1xcbnRyXFxudHJhYmVjdWxhXFxudHJhYmVjdWxhclxcbnRyYWJlY3VsZVxcbnRyYWNlL0pEUlNNWkdcXG50cmFjZWFiaWxpdHlcXG50cmFjZWFibGUvVVxcbnRyYWNlci9NXFxudHJhY2VyeS9TTVxcbnRyYWNoZWEvTVxcbnRyYWNoZWFlXFxudHJhY2hlYWxcXG50cmFjaGVvdG9teS9TTVxcbnRyYWNpbmcvTVxcbnRyYWNrL1pHU01EUlxcbnRyYWNrYmFsbC9TTVxcbnRyYWNrZXIvTVxcbnRyYWNrbGVzc1xcbnRyYWNrc3VpdC9TXFxudHJhY3Qnc1xcbnRyYWN0L0NFS0ZBU1xcbnRyYWN0YWJpbGl0eS9JTVxcbnRyYWN0YWJsZS9JXFxudHJhY3RhYmx5L0lcXG50cmFjdGlvbi9FRkFDS01cXG50cmFjdG9yL0ZDS01TXFxudHJhZFxcbnRyYWRlL0pEUlNNWkdcXG50cmFkZW1hcmsvU0dNRFxcbnRyYWRlci9NXFxudHJhZGVzbWFuL01cXG50cmFkZXNtZW5cXG50cmFkZXNwZW9wbGUvTVxcbnRyYWRlc3dvbWFuL01cXG50cmFkZXN3b21lblxcbnRyYWRpbmcvTVxcbnRyYWRpdGlvbi9NU1xcbnRyYWRpdGlvbmFsL1lcXG50cmFkaXRpb25hbGlzbS9NXFxudHJhZGl0aW9uYWxpc3QvU01cXG50cmFkdWNlL0RSU1pHXFxudHJhZHVjZXIvTVxcbnRyYWZmaWMvU01cXG50cmFmZmlja2VkXFxudHJhZmZpY2tlci9TTVxcbnRyYWZmaWNraW5nL01cXG50cmFnZWRpYW4vU01cXG50cmFnZWRpZW5uZS9NU1xcbnRyYWdlZHkvU01cXG50cmFnaWNcXG50cmFnaWNhbGx5XFxudHJhZ2ljb21lZHkvU01cXG50cmFnaWNvbWljXFxudHJhaWwvWkdTTURSXFxudHJhaWxibGF6ZXIvTVNcXG50cmFpbGJsYXppbmcvTVxcbnRyYWlsZXIvTVxcbnRyYWluL1pHU01EUkJcXG50cmFpbmVkL1VcXG50cmFpbmVlL1NNXFxudHJhaW5lci9NXFxudHJhaW5pbmcvTVxcbnRyYWlubG9hZC9NU1xcbnRyYWlubWFuL01cXG50cmFpbm1lblxcbnRyYWluc3BvdHRlci9TXFxudHJhaW5zcG90dGluZ1xcbnRyYWlwc2UvRFNNR1xcbnRyYWl0L1NNXFxudHJhaXRvci9TTVxcbnRyYWl0b3JvdXMvWVxcbnRyYWplY3RvcnkvU01cXG50cmFtL01TXFxudHJhbWNhci9TXFxudHJhbWxpbmVzXFxudHJhbW1lZFxcbnRyYW1tZWwvU0dNRFxcbnRyYW1tZWxlZC9VXFxudHJhbW1pbmdcXG50cmFtcC9aR1NNRFJcXG50cmFtcGVyL01cXG50cmFtcGxlL0RSU01aR1xcbnRyYW1wbGVyL01cXG50cmFtcG9saW5lL01HRFNcXG50cmFtd2F5L1NcXG50cmFuY2UvTVNcXG50cmFuY2hlL1NcXG50cmFucXVpbC9SWVRcXG50cmFucXVpbGl0eS9NXFxudHJhbnF1aWxpemUvWkdEUlNcXG50cmFucXVpbGl6ZXIvTVxcbnRyYW5zL0lcXG50cmFuc2FjdC9ER1NcXG50cmFuc2FjdGlvbi9TTVxcbnRyYW5zYWN0aW9uYWxcXG50cmFuc2FjdG9yL01TXFxudHJhbnNhdGxhbnRpY1xcbnRyYW5zY2VpdmVyL1NNXFxudHJhbnNjZW5kL0dTRFxcbnRyYW5zY2VuZGVuY2UvTVxcbnRyYW5zY2VuZGVudFxcbnRyYW5zY2VuZGVudGFsL1lcXG50cmFuc2NlbmRlbnRhbGlzbS9NXFxudHJhbnNjZW5kZW50YWxpc3QvU01cXG50cmFuc2NvbnRpbmVudGFsXFxudHJhbnNjcmliZS9aR0RSU1xcbnRyYW5zY3JpYmVyL01cXG50cmFuc2NyaXB0L01TXFxudHJhbnNjcmlwdGlvbi9TTVxcbnRyYW5zZHVjZXIvTVNcXG50cmFuc2R1Y3Rpb25cXG50cmFuc2VjdC9EU0dcXG50cmFuc2VwdC9NU1xcbnRyYW5zZmVyL01CU1xcbnRyYW5zZmVyYWwvTVNcXG50cmFuc2ZlcmVuY2UvTVxcbnRyYW5zZmVycmVkXFxudHJhbnNmZXJyaW5nXFxudHJhbnNmaWd1cmF0aW9uL01cXG50cmFuc2ZpZ3VyZS9HRFNcXG50cmFuc2Zpbml0ZVxcbnRyYW5zZml4L0RTR1xcbnRyYW5zZm9ybS9CU1pHTURSXFxudHJhbnNmb3JtYXRpb24vU01cXG50cmFuc2Zvcm1hdGlvbmFsXFxudHJhbnNmb3JtZXIvTVxcbnRyYW5zZnVzZS9EU1hHTlxcbnRyYW5zZnVzaW9uL01cXG50cmFuc2dlbmRlci9TXFxudHJhbnNnZW5pY1xcbnRyYW5zZ3Jlc3MvR0RTXFxudHJhbnNncmVzc2lvbi9TTVxcbnRyYW5zZ3Jlc3Nvci9TTVxcbnRyYW5zaWVuY2UvTVxcbnRyYW5zaWVuY3kvTVxcbnRyYW5zaWVudC9TTVlcXG50cmFuc2lzdG9yL1NNXFxudHJhbnNpc3Rvcml6ZS9EU0dcXG50cmFuc2l0L1NHTURcXG50cmFuc2l0aW9uL0dTTURcXG50cmFuc2l0aW9uYWwvWVxcbnRyYW5zaXRpdmUvSVNNWVxcbnRyYW5zaXRpdmVuZXNzL01cXG50cmFuc2l0aXZpdHkvTVxcbnRyYW5zaXRvcnlcXG50cmFuc2xcXG50cmFuc2xhdGFibGUvVVxcbnRyYW5zbGF0ZS9EU0dOQlhcXG50cmFuc2xhdGVkL1VcXG50cmFuc2xhdGlvbi9NXFxudHJhbnNsYXRvci9TTVxcbnRyYW5zbGl0ZXJhdGUvRFNHTlhcXG50cmFuc2xpdGVyYXRpb24vTVxcbnRyYW5zbG9jYXRpb25cXG50cmFuc2x1Y2VuY2UvTVxcbnRyYW5zbHVjZW5jeS9NXFxudHJhbnNsdWNlbnQvWVxcbnRyYW5zbWlncmF0ZS9HTkRTXFxudHJhbnNtaWdyYXRpb24vTVxcbnRyYW5zbWlzc2libGVcXG50cmFuc21pc3Npb24vTVNcXG50cmFuc21pdC9TXFxudHJhbnNtaXR0YWJsZVxcbnRyYW5zbWl0dGFsL01cXG50cmFuc21pdHRhbmNlL01cXG50cmFuc21pdHRlZFxcbnRyYW5zbWl0dGVyL1NNXFxudHJhbnNtaXR0aW5nXFxudHJhbnNtb2dyaWZpY2F0aW9uL01cXG50cmFuc21vZ3JpZnkvRFNOR1xcbnRyYW5zbXV0YXRpb24vU01cXG50cmFuc211dGUvQkRTR1xcbnRyYW5zbmF0aW9uYWwvTVNcXG50cmFuc29jZWFuaWNcXG50cmFuc29tL1NNXFxudHJhbnNwYWNpZmljXFxudHJhbnNwYXJlbmN5L1NNXFxudHJhbnNwYXJlbnQvWVxcbnRyYW5zcGhvYmlhL01cXG50cmFuc3Bob2JpY1xcbnRyYW5zcGlyYXRpb24vTVxcbnRyYW5zcGlyZS9EU0dcXG50cmFuc3BsYW50L01ER1NcXG50cmFuc3BsYW50YXRpb24vTVxcbnRyYW5zcG9sYXJcXG50cmFuc3BvbmRlci9TTVxcbnRyYW5zcG9ydC9CU1pHTURSXFxudHJhbnNwb3J0YXRpb24vTVxcbnRyYW5zcG9ydGVyL01cXG50cmFuc3Bvc2UvRFNHXFxudHJhbnNwb3NpdGlvbi9NU1xcbnRyYW5zc2V4dWFsL1NNXFxudHJhbnNzZXh1YWxpc20vTVxcbnRyYW5zc2hpcC9TTFxcbnRyYW5zc2hpcG1lbnQvTVxcbnRyYW5zc2hpcHBlZFxcbnRyYW5zc2hpcHBpbmdcXG50cmFuc3Vic3RhbnRpYXRpb24vTVxcbnRyYW5zdmVyc2FsXFxudHJhbnN2ZXJzZS9NWVNcXG50cmFuc3Zlc3Rpc20vTVxcbnRyYW5zdmVzdGl0ZS9NU1xcbnRyYXAvTVNcXG50cmFwZG9vci9NU1xcbnRyYXBlemUvU01cXG50cmFwZXppdW0vU01cXG50cmFwZXpvaWQvU01cXG50cmFwZXpvaWRhbFxcbnRyYXBwYWJsZVxcbnRyYXBwZWRcXG50cmFwcGVyL1NNXFxudHJhcHBpbmcvU1xcbnRyYXBwaW5ncy9NXFxudHJhcHNob290aW5nL01cXG50cmFzaC9HTURTXFxudHJhc2hjYW4vTVNcXG50cmFzaGluZXNzL01cXG50cmFzaHkvUlBUXFxudHJhdW1hL01TXFxudHJhdW1hdGljXFxudHJhdW1hdGljYWxseVxcbnRyYXVtYXRpemUvR0RTXFxudHJhdmFpbC9TR01EXFxudHJhdmVsL01EUlNaR0pcXG50cmF2ZWxlZC9VXFxudHJhdmVsZXIvTVxcbnRyYXZlbGluZy9NXFxudHJhdmVsb2d1ZS9NU1xcbnRyYXZlcnNhbC9TTVxcbnRyYXZlcnNlL0RTTUdcXG50cmF2ZXN0eS9HRFNNXFxudHJhd2wvWkdTTURSXFxudHJhd2xlci9NXFxudHJheS9NU1xcbnRyZWFjaGVyb3VzL1BZXFxudHJlYWNoZXJvdXNuZXNzL01cXG50cmVhY2hlcnkvU01cXG50cmVhY2xlL01cXG50cmVhY2x5XFxudHJlYWQvQUdTTVxcbnRyZWFkbGUvRFNNR1xcbnRyZWFkbWlsbC9NU1xcbnRyZWFzXFxudHJlYXNvbi9CTVxcbnRyZWFzb25vdXNcXG50cmVhc3VyZS9EUlNNWkdcXG50cmVhc3VyZXIvTVxcbnRyZWFzdXJ5L1NNXFxudHJlYXQvQUdTTURcXG50cmVhdGFibGVcXG50cmVhdGVkL1VcXG50cmVhdGlzZS9TTVxcbnRyZWF0bWVudC9NU1xcbnRyZWF0eS9TTVxcbnRyZWJsZS9NR0RTXFxudHJlZS9NRFNcXG50cmVlaW5nXFxudHJlZWxlc3NcXG50cmVlbGlrZVxcbnRyZWVsaW5lXFxudHJlZXRvcC9TTVxcbnRyZWZvaWwvU01cXG50cmVrL01TXFxudHJla2tlZFxcbnRyZWtrZXIvU01cXG50cmVra2luZ1xcbnRyZWxsaXMvR01EU1xcbnRyZW1hdG9kZS9NU1xcbnRyZW1ibGUvRFNNR1xcbnRyZW1lbmRvdXMvWVxcbnRyZW1vbG8vU01cXG50cmVtb3IvTVNcXG50cmVtdWxvdXMvUFlcXG50cmVtdWxvdXNuZXNzL01cXG50cmVuY2gnc1xcbnRyZW5jaC9BRFNHXFxudHJlbmNoYW5jeS9NXFxudHJlbmNoYW50L1lcXG50cmVuY2hlci9NU1xcbnRyZW5jaGVybWFuL01cXG50cmVuY2hlcm1lblxcbnRyZW5kL0dTTURcXG50cmVuZGlseVxcbnRyZW5kaW5lc3MvTVxcbnRyZW5kc2V0dGVyL1NcXG50cmVuZHNldHRpbmdcXG50cmVuZHkvUlNNUFRcXG50cmVwaWRhdGlvbi9NXFxudHJlc3Bhc3MvTURSU1pHXFxudHJlc3Bhc3Nlci9NXFxudHJlc3MvRU1TXFxudHJlc3RsZS9NU1xcbnRyZXdzXFxudHJleS9NU1xcbnRyaWFkL1NNXFxudHJpYWdlL01EXFxudHJpYWwvQVNNXFxudHJpYWxlZFxcbnRyaWFsaW5nXFxudHJpYW5nbGUvU01cXG50cmlhbmd1bGFyL1lcXG50cmlhbmd1bGF0ZS9HTkRTXFxudHJpYW5ndWxhdGlvbi9NXFxudHJpYXRobGV0ZS9TXFxudHJpYXRobG9uL1NNXFxudHJpYmFsXFxudHJpYmFsaXNtL01cXG50cmliZS9TTVxcbnRyaWJlc21hbi9NXFxudHJpYmVzbWVuXFxudHJpYmVzd29tYW4vTVxcbnRyaWJlc3dvbWVuXFxudHJpYnVsYXRpb24vU01cXG50cmlidW5hbC9TTVxcbnRyaWJ1bmUvTVNcXG50cmlidXRhcnkvU01cXG50cmlidXRlJ3NcXG50cmlidXRlL0ZTXFxudHJpY2UvTVxcbnRyaWNlbnRlbm5pYWwvTVNcXG50cmljZXBzL01TXFxudHJpY2VyYXRvcHMvTVxcbnRyaWNoaW5hL01cXG50cmljaGluYWVcXG50cmljaGlub3Npcy9NXFxudHJpY2svR1NNRFxcbnRyaWNrZXJ5L01cXG50cmlja2lseVxcbnRyaWNraW5lc3MvTVxcbnRyaWNrbGUvTUdEU1xcbnRyaWNrc3Rlci9TTVxcbnRyaWNreS9UUlBcXG50cmljb2xvci9TTVxcbnRyaWN5Y2xlL1NNXFxudHJpZGVudC9NU1xcbnRyaWVkL1VcXG50cmllbm5pYWwvTVlTXFxudHJpZXIvU01cXG50cmlmZWN0YS9TTVxcbnRyaWZsZS9NWkdEUlNcXG50cmlmbGVyL01cXG50cmlmb2NhbHMvTVxcbnRyaWcvTVxcbnRyaWdnZXIvTURTR1xcbnRyaWdseWNlcmlkZS9NU1xcbnRyaWdvbm9tZXRyaWNcXG50cmlnb25vbWV0cmljYWxcXG50cmlnb25vbWV0cnkvTVxcbnRyaWtlL1NNXFxudHJpbGF0ZXJhbC9TXFxudHJpbGJ5L1NNXFxudHJpbGwvR1NNRFxcbnRyaWxsaW9uL1NNSFxcbnRyaWxsaW9udGgvTVxcbnRyaWxsaW9udGhzXFxudHJpbGxpdW0vTVxcbnRyaWxvYml0ZS9TTVxcbnRyaWxvZ3kvU01cXG50cmltL1BNWVNcXG50cmltYXJhbi9NU1xcbnRyaW1lc3Rlci9TTVxcbnRyaW1tZWQvVVxcbnRyaW1tZXIvU01cXG50cmltbWVzdFxcbnRyaW1taW5nL1NNXFxudHJpbW1pbmdzL01cXG50cmltbmVzcy9NXFxudHJpbW9udGhseVxcbnRyaW5pdHJvdG9sdWVuZS9NXFxudHJpbml0eS9TTVxcbnRyaW5rZXQvU01cXG50cmlvL01TXFxudHJpcC9NWVNcXG50cmlwYXJ0aXRlXFxudHJpcGUvTVxcbnRyaXBsZS9NR0RTXFxudHJpcGxldC9TTVxcbnRyaXBsZXgvTVNcXG50cmlwbGljYXRlL01HRFNcXG50cmlwb2QvTVNcXG50cmlwb2RhbFxcbnRyaXBvc1xcbnRyaXBwZWRcXG50cmlwcGVyL1NNXFxudHJpcHBpbmdcXG50cmlwdHljaC9NXFxudHJpcHR5Y2hzXFxudHJpcHdpcmUvU1xcbnRyaXJlbWUvU01cXG50cmlzZWN0L1NER1xcbnRyaXNlY3Rpb24vTVxcbnRyaXRlL0ZQWVRcXG50cml0ZW5lc3MvRk1cXG50cml0ZXJcXG50cml0aXVtL01cXG50cml1bXBoL0dNRFxcbnRyaXVtcGhhbFxcbnRyaXVtcGhhbGlzbVxcbnRyaXVtcGhhbGlzdFxcbnRyaXVtcGhhbnQvWVxcbnRyaXVtcGhzXFxudHJpdW12aXIvTVNcXG50cml1bXZpcmF0ZS9TTVxcbnRyaXZhbGVudFxcbnRyaXZldC9NU1xcbnRyaXZpYS9NXFxudHJpdmlhbC9ZXFxudHJpdmlhbGl0eS9TTVxcbnRyaXZpYWxpemF0aW9uL01cXG50cml2aWFsaXplL0dEU1xcbnRyaXZpdW0vTVxcbnRyb2NoYWljXFxudHJvY2hlZS9TTVxcbnRyb2QvQVVcXG50cm9kZGVuL0FcXG50cm9nbG9keXRlL1NNXFxudHJvaWthL01TXFxudHJvbGwvU0dNRFxcbnRyb2xsZXkvU01cXG50cm9sbGV5YnVzL01TXFxudHJvbGxvcC9TTVxcbnRyb21ib25lL01TXFxudHJvbWJvbmlzdC9NU1xcbnRyb21wL1NHRFxcbnRyb24vU1xcbnRyb29wL1NaR01EUlxcbnRyb29wZXIvTVxcbnRyb29wc2hpcC9NU1xcbnRyb3BlL1NNXFxudHJvcGh5L1NNXFxudHJvcGljL01TXFxudHJvcGljYWwvWVxcbnRyb3BpY3MvTVxcbnRyb3Bpc20vU01cXG50cm9wb3NwaGVyZS9TTVxcbnRyb3QvTVNcXG50cm90aC9NXFxudHJvdHRlZFxcbnRyb3R0ZXIvU01cXG50cm90dGluZ1xcbnRyb3ViYWRvdXIvTVNcXG50cm91YmxlL0RTTUdcXG50cm91YmxlZC9VXFxudHJvdWJsZW1ha2VyL01TXFxudHJvdWJsZXNob290L0RSWkdTXFxudHJvdWJsZXNob290ZXIvTVxcbnRyb3VibGVzaG9vdGluZy9NXFxudHJvdWJsZXNob3RcXG50cm91Ymxlc29tZS9ZXFxudHJvdWdoL01cXG50cm91Z2hzXFxudHJvdW5jZS9EUlNaR1xcbnRyb3VuY2VyL01cXG50cm91cGUvTVpHRFJTXFxudHJvdXBlci9NXFxudHJvdXNlci9TTVxcbnRyb3VzZXJzL01cXG50cm91c3NlYXUvTVxcbnRyb3Vzc2VhdXhcXG50cm91dC9TTVxcbnRyb3ZlL1NNXFxudHJvdy9EU0dcXG50cm93ZWwvTURTR1xcbnRyb3kvU1xcbnRydWFuY3kvTVxcbnRydWFudC9HTURTXFxudHJ1Y2UvU01cXG50cnVjay9TWkdNRFJcXG50cnVja2VyL01cXG50cnVja2luZy9NXFxudHJ1Y2tsZS9NR0RTXFxudHJ1Y2tsb2FkL1NNXFxudHJ1Y3VsZW5jZS9NXFxudHJ1Y3VsZW50L1lcXG50cnVkZ2UvTUdEU1xcbnRydWUvTVRHRFJTXFxudHJ1ZWxvdmUvU01cXG50cnVmZmxlL01TXFxudHJ1Zy9TXFxudHJ1aXNtL01TXFxudHJ1bHkvVVxcbnRydW1wL1NHTURcXG50cnVtcGVyeS9NXFxudHJ1bXBldC9aR01EUlNcXG50cnVtcGV0ZXIvTVxcbnRydW5jYXRlL0dORFNcXG50cnVuY2F0aW9uL01cXG50cnVuY2hlb24vU01cXG50cnVuZGxlL01aR0RSU1xcbnRydW5kbGVyL01cXG50cnVuay9TR01cXG50cnVzcy9HTURTXFxudHJ1c3QvRVNHTURcXG50cnVzdGVlL01TXFxudHJ1c3RlZXNoaXAvU01cXG50cnVzdGZ1bC9FWVxcbnRydXN0ZnVsbmVzcy9NXFxudHJ1c3RpbmcvWVxcbnRydXN0d29ydGhpbmVzcy9NXFxudHJ1c3R3b3J0aHkvVFBSXFxudHJ1c3R5L1RSU01cXG50cnV0aC9aTVJcXG50cnV0aGVyL01cXG50cnV0aGZ1bC9VWVBcXG50cnV0aGZ1bG5lc3MvVU1cXG50cnV0aGluZXNzXFxudHJ1dGhzL1VcXG50cnknc1xcbnRyeS9BR0RTXFxudHJ5aW5nL1lcXG50cnlvdXQvU01cXG50cnlwdG9waGFuXFxudHJ5c3QvU01ER1xcbnRzYXJpc3RzXFxudHNldHNlL01TXFxudHNwXFxudHN1bmFtaS9TTVxcbnR0eXNcXG50dWIvU1pHTURSXFxudHViYS9NU1xcbnR1YmFsXFxudHViYnkvVFJcXG50dWJlL01TXFxudHViZWxlc3MvTVxcbnR1YmVyL01cXG50dWJlcmNsZS9TTVxcbnR1YmVyY3VsYXJcXG50dWJlcmN1bGluL01cXG50dWJlcmN1bG9zaXMvTVxcbnR1YmVyY3Vsb3VzXFxudHViZXJvc2UvTVxcbnR1YmVyb3VzXFxudHViZnVsL01TXFxudHViaW5nL01cXG50dWJ1bGFyXFxudHVidWxlL01TXFxudHVjay9NRFJTWkdcXG50dWNrZXIvTURHXFxudHVmdC9NRFJTWkdcXG50dWZ0ZXIvTVxcbnR1Zy9TTVxcbnR1Z2JvYXQvTVNcXG50dWdnZWRcXG50dWdnaW5nXFxudHVpdGlvbi9JTVxcbnR1bGFyZW1pYS9NXFxudHVsaXAvU01cXG50dWxsZS9NXFxudHVtL1NcXG50dW1ibGUvRFJTTVpHXFxudHVtYmxlZG93blxcbnR1bWJsZXIvTVxcbnR1bWJsZXdlZWQvU01cXG50dW1ibGluZy9NXFxudHVtYnJlbC9TTVxcbnR1bWVzY2VuY2UvTVxcbnR1bWVzY2VudFxcbnR1bWlkXFxudHVtaWRpdHkvTVxcbnR1bW15L1NNXFxudHVtb3IvU01cXG50dW1vcm91c1xcbnR1bXVsdC9TTVxcbnR1bXVsdHVvdXMvWVxcbnR1bi9TWkdNRFJcXG50dW5hL01TXFxudHVuZHJhL1NNXFxudHVuZS9NU1xcbnR1bmVmdWwvWVBcXG50dW5lZnVsbmVzcy9NXFxudHVuZWxlc3MvWVxcbnR1bmVyL01cXG50dW5ldXAvU01cXG50dW5nc3Rlbi9NXFxudHVuaWMvU01cXG50dW5uZWwvSlNNRFJaR1xcbnR1bm5lbGVyL01cXG50dW5ueS9TTVxcbnR1cGxlL1NcXG50dXBwZW5jZVxcbnR1cHBlbm55XFxudHVxdWUvU01cXG50dXJiYW4vU01EXFxudHVyYmlkXFxudHVyYmlkaXR5L01cXG50dXJiaW5lL1NNXFxudHVyYm8vU01cXG50dXJib2NoYXJnZS9aR0RSU1xcbnR1cmJvY2hhcmdlci9NXFxudHVyYm9mYW4vU01cXG50dXJib2pldC9TTVxcbnR1cmJvcHJvcC9TTVxcbnR1cmJvdC9TTVxcbnR1cmJ1bGVuY2UvTVxcbnR1cmJ1bGVudC9ZXFxudHVyZC9NU1xcbnR1cmR1Y2tlbi9TTVxcbnR1cmVlbi9TTVxcbnR1cmYvTURTR1xcbnR1cmZ5XFxudHVyZ2lkL1lcXG50dXJnaWRpdHkvTVxcbnR1cmtleS9TTVxcbnR1cm1lcmljL1NNXFxudHVybW9pbC9NU1xcbnR1cm4vQU1EUlNaR1xcbnR1cm5hYm91dC9TTVxcbnR1cm5hcm91bmQvU01cXG50dXJuYnVja2xlL1NNXFxudHVybmNvYXQvU01cXG50dXJuZXIvQU1cXG50dXJuaW5nL01TXFxudHVybmlwL1NNXFxudHVybmtleS9NU1xcbnR1cm5vZmYvTVNcXG50dXJub3V0L01TXFxudHVybm92ZXIvTVNcXG50dXJucGlrZS9NU1xcbnR1cm5zdGlsZS9TTVxcbnR1cm50YWJsZS9TTVxcbnR1cnBlbnRpbmUvTVxcbnR1cnBpdHVkZS9NXFxudHVycHNcXG50dXJxdW9pc2UvU01cXG50dXJyZXQvU01EXFxudHVydGxlL1NNXFxudHVydGxlZG92ZS9TTVxcbnR1cnRsZW5lY2svU01EXFxudHVzaC9NU1xcbnR1c2svTURTXFxudHVzc2xlL0RTTUdcXG50dXNzb2NrL01TXFxudHVzc29ja3lcXG50dXQvU01cXG50dXRlbGFnZS9NXFxudHV0ZWxhcnlcXG50dXRvci9TTURHXFxudHV0b3JlZC9VXFxudHV0b3JpYWwvU01cXG50dXRvcnNoaXAvTVxcbnR1dHRlZFxcbnR1dHRpL1NNXFxudHV0dGluZ1xcbnR1dHUvTVNcXG50dXgvTVNcXG50dXhlZG8vU01cXG50d2FkZGxlL01aR0RSU1xcbnR3YWRkbGVyL01cXG50d2Fpbi9NXFxudHdhbmcvU01ER1xcbnR3YW5neS9SVFxcbnR3YXNcXG50d2F0L1NcXG50d2Vhay9TTURHXFxudHdlZVxcbnR3ZWVkL1NNXFxudHdlZWRzL01cXG50d2VlZHkvUlRcXG50d2VlblxcbnR3ZWV0J3NcXG50d2VldC9BU0RHXFxudHdlZXRlci9TTVxcbnR3ZWV6ZXJzL01cXG50d2VsZnRoL01cXG50d2VsZnRoc1xcbnR3ZWx2ZS9TTVxcbnR3ZWx2ZW1vbnRoL01cXG50d2VsdmVtb250aHNcXG50d2VudGlldGgvTVxcbnR3ZW50aWV0aHNcXG50d2VudHkvU01IXFxudHdlcmsvU0RHXFxudHdlcnAvU01cXG50d2ljZVxcbnR3aWRkbGUvTUdEU1xcbnR3aWRkbHlcXG50d2lnL01TXFxudHdpZ2dlZFxcbnR3aWdnaW5nXFxudHdpZ2d5L1RSXFxudHdpbGlnaHQvTVxcbnR3aWxpdFxcbnR3aWxsL01EXFxudHdpbi9NRFJTWkdcXG50d2luZS9TTVxcbnR3aW5lci9NXFxudHdpbmdlL0RTTUdcXG50d2luay9TWVxcbnR3aW5rbGUvTUdKRFNcXG50d2lua2xpbmcvTVxcbnR3aW5uZWRcXG50d2lubmluZ1xcbnR3aW5zZXQvU1xcbnR3aXJsL1NNRFJaR1xcbnR3aXJsZXIvTVxcbnR3aXJseVxcbnR3aXN0J3NcXG50d2lzdC9VU0RHXFxudHdpc3Rlci9NU1xcbnR3aXN0eS9UUlxcbnR3aXQvTVNcXG50d2l0Y2gvR01EU1xcbnR3aXRjaHkvUlRcXG50d2l0dGVkXFxudHdpdHRlci9NRFNHXFxudHdpdHRlcnlcXG50d2l0dGluZ1xcbnR3aXh0XFxudHdvL1NNXFxudHdvZmVyL1NNXFxudHdvZm9sZFxcbnR3b3BlbmNlL1NNXFxudHdvcGVubnlcXG50d29zb21lL1NNXFxudHdwXFxudHljb29uL1NNXFxudHlpbmcvQVVcXG50eWtlL01TXFxudHltcGFuaS9NXFxudHltcGFuaWNcXG50eW1wYW5pc3QvTVNcXG50eW1wYW51bS9TTVxcbnR5cGUnc1xcbnR5cGUvQUdEU1xcbnR5cGVjYXN0L0dTXFxudHlwZWZhY2UvTVNcXG50eXBlc2NyaXB0L01TXFxudHlwZXNldC9TXFxudHlwZXNldHRlci9NU1xcbnR5cGVzZXR0aW5nL01cXG50eXBld3JpdGUvUlNaR1xcbnR5cGV3cml0ZXIvTVxcbnR5cGV3cml0aW5nL01cXG50eXBld3JpdHRlblxcbnR5cGV3cm90ZVxcbnR5cGhvaWQvTVxcbnR5cGhvb24vTVNcXG50eXBodXMvTVxcbnR5cGljYWwvVVlcXG50eXBpY2FsaXR5L01cXG50eXBpZmljYXRpb24vTVxcbnR5cGlmeS9OR0RTXFxudHlwaW5nL01cXG50eXBpc3QvU01cXG50eXBvL01TXFxudHlwb2dyYXBoZXIvU01cXG50eXBvZ3JhcGhpY1xcbnR5cG9ncmFwaGljYWwvWVxcbnR5cG9ncmFwaHkvTVxcbnR5cG9sb2d5L1NNXFxudHlyYW5uaWNcXG50eXJhbm5pY2FsL1lcXG50eXJhbm5pY2lkYWxcXG50eXJhbm5pY2lkZS9TXFxudHlyYW5uaXplL0dEU1xcbnR5cmFubm9zYXVyL01TXFxudHlyYW5ub3NhdXJ1cy9NU1xcbnR5cmFubm91c1xcbnR5cmFubnkvU01cXG50eXJhbnQvU01cXG50eXJvL01TXFxudHphdHppa2lcXG51L1NcXG51YmlxdWl0b3VzL1lcXG51YmlxdWl0eS9NXFxudWRkZXIvU01cXG51Zm9sb2dpc3QvU01cXG51Zm9sb2d5L01cXG51Z2hcXG51Z2xpbmVzcy9NXFxudWdseS9SVFBcXG51aFxcbnVoZlxcbnVrYXNlL1NNXFxudWt1bGVsZS9TTVxcbnVsY2VyL1NNXFxudWxjZXJhdGUvWERTR05cXG51bGNlcmF0aW9uL01cXG51bGNlcm91c1xcbnVsbmEvTVxcbnVsbmFlXFxudWxuYXJcXG51bHN0ZXIvTVNcXG51bHRcXG51bHRlcmlvclxcbnVsdGltYXRlL01ZXFxudWx0aW1hdHVtL01TXFxudWx0aW1vXFxudWx0cmEvU01cXG51bHRyYWNvbnNlcnZhdGl2ZS9TTVxcbnVsdHJhaGlnaFxcbnVsdHJhbGlnaHQvU01cXG51bHRyYW1hcmluZS9NXFxudWx0cmFtb2Rlcm5cXG51bHRyYXNlbnNpdGl2ZVxcbnVsdHJhc2hvcnRcXG51bHRyYXNvbmljXFxudWx0cmFzb25pY2FsbHlcXG51bHRyYXNvdW5kL01TXFxudWx0cmF2aW9sZXQvTVxcbnVsdWxhdGUvRFNHTlhcXG51bHVsYXRpb24vTVxcbnVtXFxudW1iZWwvU01cXG51bWJlci9NXFxudW1iaWxpY2FsXFxudW1iaWxpY2lcXG51bWJpbGljdXMvTVxcbnVtYnJhL1NNXFxudW1icmFnZS9NXFxudW1icmVsbGEvU01cXG51bWlhay9TTVxcbnVtbGF1dC9NU1xcbnVtcC9TR01EXFxudW1waXJlL01HRFNcXG51bXB0ZWVuL0hcXG51bmFicmlkZ2VkL01TXFxudW5hY2NlcHRhYmlsaXR5XFxudW5hY2NlcHRhYmxlXFxudW5hY2NvbW1vZGF0aW5nXFxudW5hY2NvdW50YWJseVxcbnVuYWR2ZW50dXJvdXNcXG51bmFlc3RoZXRpY1xcbnVuYWx0ZXJhYmx5XFxudW5hbWJpdGlvdXNcXG51bmFuaW1pdHkvTVxcbnVuYW5pbW91cy9ZXFxudW5hcHBhcmVudFxcbnVuYXBwZXRpemluZ1xcbnVuYXBwcmVjaWF0aXZlXFxudW5hcnlcXG51bmFzc2VydGl2ZVxcbnVuYXNzaW1pbGFibGVcXG51bmFzc3VtaW5nL1lcXG51bmF2YWlsaW5nL1lcXG51bmF3YXJlL1NcXG51bmJla25vd25zdFxcbnVuYmVuZC9TR1xcbnVuYmVudFxcbnVuYmlkXFxudW5ibGlua2luZy9ZXFxudW5ibHVzaGluZy9ZXFxudW5ib3NvbS9ER1xcbnVuYm91bmQvRFxcbnVuYm94L0dEU1xcbnVuYnJlYWthYmxlXFxudW5icm9rZW5cXG51bmNhbm55L1RcXG51bmNhcC9TXFxudW5jYXJpbmdcXG51bmNhdGFsb2d1ZWRcXG51bmNlYXNpbmcvWVxcbnVuY2hhbmdlYWJsZVxcbnVuY2hhcmFjdGVyaXN0aWNcXG51bmNoYXJpdGFibGVcXG51bmNoYXN0ZS9SVFxcbnVuY2lhbC9NXFxudW5jbGUvU01cXG51bmNsZWFuL0RSUFRcXG51bmNsZWFubHkvVFxcbnVuY2xlYXIvRFJUXFxudW5jb21mb3J0YWJsZVxcbnVuY29tbW9uL1RcXG51bmNvbXBlbGxpbmdcXG51bmNvbXBsYWluaW5nL1lcXG51bmNvbXBsaWNhdGVkXFxudW5jb21wcmVoZW5kaW5nL1lcXG51bmNvbXByb21pc2luZy9ZXFxudW5jb25kaXRpb25hbC9ZXFxudW5jb25nZW5pYWxcXG51bmNvbnNjaW9uYWJsZVxcbnVuY29uc2Npb25hYmx5XFxudW5jb25zY2lvdXMvTVxcbnVuY29uc3RpdHV0aW9uYWwvWVxcbnVuY29udHJvbGxhYmx5XFxudW5jb250cm92ZXJzaWFsXFxudW5jb29sXFxudW5jb29wZXJhdGl2ZVxcbnVuY291dGgvWVxcbnVuY3J1c2hhYmxlXFxudW5jdGlvbi9TTVxcbnVuY3R1b3VzL1lQXFxudW5jdHVvdXNuZXNzL01cXG51bmN1dFxcbnVuZGF1bnRlZC9ZXFxudW5kZWNpZGVkL1NNXFxudW5kZW1vbnN0cmF0aXZlL1lcXG51bmRlbmlhYmx5XFxudW5kZXJcXG51bmRlcmFjaGlldmUvTFpHRFJTXFxudW5kZXJhY2hpZXZlci9NXFxudW5kZXJhY3QvU0RHXFxudW5kZXJhZ2VcXG51bmRlcmFwcHJlY2lhdGVkXFxudW5kZXJhcm0vU01cXG51bmRlcmJlbGx5L1NNXFxudW5kZXJiaWQvU1xcbnVuZGVyYmlkZGluZ1xcbnVuZGVyYnJ1c2gvTVxcbnVuZGVyY2FycmlhZ2UvTVNcXG51bmRlcmNoYXJnZS9NR0RTXFxudW5kZXJjbGFzcy9NU1xcbnVuZGVyY2xhc3NtYW4vTVxcbnVuZGVyY2xhc3NtZW5cXG51bmRlcmNsb3RoZXMvTVxcbnVuZGVyY2xvdGhpbmcvTVxcbnVuZGVyY29hdC9HSlNNRFxcbnVuZGVyY29hdGluZy9NXFxudW5kZXJjb3ZlclxcbnVuZGVyY3VycmVudC9TTVxcbnVuZGVyY3V0L1NNXFxudW5kZXJjdXR0aW5nXFxudW5kZXJkZXZlbG9wZWRcXG51bmRlcmRldmVsb3BtZW50L01cXG51bmRlcmRvZy9TTVxcbnVuZGVyZG9uZVxcbnVuZGVyZW1wbG95ZWRcXG51bmRlcmVtcGxveW1lbnQvTVxcbnVuZGVyZXN0aW1hdGUvRFNNR05YXFxudW5kZXJlc3RpbWF0aW9uL01cXG51bmRlcmV4cG9zZS9HRFNcXG51bmRlcmV4cG9zdXJlL01TXFxudW5kZXJmZWRcXG51bmRlcmZlZWQvR1NcXG51bmRlcmZsb29yXFxudW5kZXJmbG93XFxudW5kZXJmb290XFxudW5kZXJmdW5kZWRcXG51bmRlcmZ1ci9NXFxudW5kZXJnYXJtZW50L1NNXFxudW5kZXJnby9HXFxudW5kZXJnb2VzXFxudW5kZXJnb25lXFxudW5kZXJncmFkL1NcXG51bmRlcmdyYWR1YXRlL1NNXFxudW5kZXJncm91bmQvTVNcXG51bmRlcmdyb3d0aC9NXFxudW5kZXJoYW5kXFxudW5kZXJoYW5kZWQvUFlcXG51bmRlcmhhbmRlZG5lc3MvTVxcbnVuZGVyaW5mbGF0ZWRcXG51bmRlcmxhaW5cXG51bmRlcmxheS9TTVxcbnVuZGVybGllL1NcXG51bmRlcmxpbmUvTUdEU1xcbnVuZGVybGluZy9NU1xcbnVuZGVybGlwL1NNXFxudW5kZXJseWluZ1xcbnVuZGVybWFubmVkXFxudW5kZXJtZW50aW9uZWRcXG51bmRlcm1pbmUvR0RTXFxudW5kZXJtb3N0XFxudW5kZXJuZWF0aC9NXFxudW5kZXJuZWF0aHNcXG51bmRlcm5vdXJpc2hlZFxcbnVuZGVybm91cmlzaG1lbnQvTVxcbnVuZGVycGFpZFxcbnVuZGVycGFudHMvTVxcbnVuZGVycGFydC9NU1xcbnVuZGVycGFzcy9NU1xcbnVuZGVycGF5L0dTTFxcbnVuZGVycGF5bWVudC9TTVxcbnVuZGVycGluL1NcXG51bmRlcnBpbm5lZFxcbnVuZGVycGlubmluZy9NU1xcbnVuZGVycGxheS9ER1NcXG51bmRlcnBvcHVsYXRlZFxcbnVuZGVycHJpdmlsZWdlZFxcbnVuZGVycHJvZHVjdGlvbi9NXFxudW5kZXJyYXRlL0dEU1xcbnVuZGVycmVwcmVzZW50ZWRcXG51bmRlcnNjb3JlL0RTTUdcXG51bmRlcnNlYS9TXFxudW5kZXJzZWNyZXRhcnkvU01cXG51bmRlcnNlbGwvR1NcXG51bmRlcnNleGVkXFxudW5kZXJzaGlydC9TTVxcbnVuZGVyc2hvb3QvU0dcXG51bmRlcnNob3J0cy9NXFxudW5kZXJzaG90XFxudW5kZXJzaWRlL01TXFxudW5kZXJzaWduL0RHU1xcbnVuZGVyc2lnbmVkL01cXG51bmRlcnNpemVkXFxudW5kZXJza2lydC9TTVxcbnVuZGVyc29sZFxcbnVuZGVyc3RhZmZlZFxcbnVuZGVyc3RhbmQvU0dCSlxcbnVuZGVyc3RhbmRhYmx5XFxudW5kZXJzdGFuZGluZy9NWVxcbnVuZGVyc3RhdGUvRFNMR1xcbnVuZGVyc3RhdGVtZW50L1NNXFxudW5kZXJzdG9vZFxcbnVuZGVyc3R1ZHkvR0RTTVxcbnVuZGVydGFrZS9aR0pSU1xcbnVuZGVydGFrZW5cXG51bmRlcnRha2VyL01cXG51bmRlcnRha2luZy9NXFxudW5kZXJ0aGluZ3MvTVxcbnVuZGVydG9uZS9NU1xcbnVuZGVydG9va1xcbnVuZGVydG93L1NNXFxudW5kZXJ1c2VkXFxudW5kZXJ1dGlsaXplZFxcbnVuZGVydmFsdWF0aW9uL01cXG51bmRlcnZhbHVlL0RTR1xcbnVuZGVyd2F0ZXJcXG51bmRlcndheVxcbnVuZGVyd2Vhci9NXFxudW5kZXJ3ZWlnaHQvTVxcbnVuZGVyd2VudFxcbnVuZGVyd2hlbG0vREdTXFxudW5kZXJ3aXJlL0RTXFxudW5kZXJ3b3JsZC9NU1xcbnVuZGVyd3JpdGUvWkdSU1xcbnVuZGVyd3JpdGVyL01cXG51bmRlcndyaXR0ZW5cXG51bmRlcndyb3RlXFxudW5kZXNpcmFibGUvTVNcXG51bmRpZXMvTVxcbnVuZG9cXG51bmRvdWJ0ZWQvWVxcbnVuZHJhbWF0aWNcXG51bmR1ZVxcbnVuZHVsYW50XFxudW5kdWxhdGUvRFNYR05cXG51bmR1bGF0aW9uL01cXG51bmR5aW5nXFxudW5lYXJ0aGxpbmVzcy9NXFxudW5lYXNlL01cXG51bmVhc3kvVFxcbnVuZWF0YWJsZVxcbnVuZWNvbm9taWNcXG51bmVtcGxveWVkL01cXG51bmVuZGluZ1xcbnVuZW50ZXJwcmlzaW5nXFxudW5lcXVhbC9EWVxcbnVuZXJyaW5nL1lcXG51bmVzc2VudGlhbFxcbnVuZXZlbi9ZXFxudW5leGNlcHRpb25hYmx5XFxudW5leGNpdGVkXFxudW5leGNpdGluZ1xcbnVuZXhwZWN0ZWQvWVBcXG51bmV4cGVjdGVkbmVzcy9NXFxudW5mYWlsaW5nL1lcXG51bmZhaXIvUFRSWVxcbnVuZmFsdGVyaW5nXFxudW5mYW1pbGlhclxcbnVuZmF0aG9tYWJseVxcbnVuZmVkXFxudW5mZWVsaW5nL1lcXG51bmZlbWluaW5lXFxudW5maXQvU1xcbnVuZml0dGluZ1xcbnVuZml4L0dEU1xcbnVuZmxhZ2dpbmcvWVxcbnVuZmxhcHBhYmlsaXR5L01cXG51bmZsYXBwYWJsZVxcbnVuZmxhcHBhYmx5XFxudW5mbGF0dGVyaW5nXFxudW5mbGluY2hpbmcvWVxcbnVuZm9yZ2V0dGFibHlcXG51bmZvcmdpdmFibHlcXG51bmZvcnR1bmF0ZS9NU1xcbnVuZnJpZW5kbHkvVFxcbnVuZnJvY2svREdcXG51bmZydWl0ZnVsXFxudW5mdW5ueVxcbnVuZ2FpbmxpbmVzcy9NXFxudW5nYWlubHkvUlBUXFxudW5nZW5lcm91c1xcbnVuZ2VudGxlXFxudW5nb2RseS9UXFxudW5ncmFjZWZ1bC9ZXFxudW5ncnVkZ2luZ1xcbnVuZ3VhcmRlZFxcbnVuZ3VlbnQvU01cXG51bmd1bGF0ZS9NU1xcbnVuaGFuZHkvVFxcbnVuaGFwcHkvVFxcbnVuaGVhbHRoZnVsXFxudW5oZWFsdGh5L1RcXG51bmhpc3RvcmljYWxcXG51bmhvbHkvVFxcbnVuaHVydFxcbnVuaWNhbWVyYWxcXG51bmljZWxsdWxhclxcbnVuaWNvcm4vU01cXG51bmljeWNsZS9TTVxcbnVuaWRpcmVjdGlvbmFsXFxudW5pZmljYXRpb24vQU1cXG51bmlmb3JtL1NNRFlHXFxudW5pZm9ybWl0eS9NXFxudW5pZnkvQUdEU05cXG51bmlsYXRlcmFsL1lcXG51bmlsYXRlcmFsaXNtXFxudW5pbXBvcnRhbnRcXG51bmltcHJlc3NpdmVcXG51bmluZm9ybWF0aXZlXFxudW5pbmhpYml0ZWQvWVxcbnVuaW5zdXJlZFxcbnVuaW50ZWxsaWdlbnRcXG51bmludGVuZGVkXFxudW5pbnRlcmVzdGluZ1xcbnVuaW50ZXJydXB0ZWQvWVxcbnVuaW50ZXJydXB0aWJsZVxcbnVuaW52aXRpbmdcXG51bmlvbi9BU01cXG51bmlvbmlzbS9NXFxudW5pb25pc3QvTVNcXG51bmlxdWUvWVRSUFxcbnVuaXF1ZW5lc3MvTVxcbnVuaXNleC9NXFxudW5pc29uL01cXG51bml0YXJ5XFxudW5pdGUvQUVHU0RcXG51bml0ZWRseVxcbnVuaXRpZXNcXG51bml0aXplL0RTR1xcbnVuaXR5L0VNXFxudW5pdmFsZW50XFxudW5pdmFsdmUvU01cXG51bml2ZXJzYWwvTVlTXFxudW5pdmVyc2FsaXNtXFxudW5pdmVyc2FsaXN0XFxudW5pdmVyc2FsaXR5L01cXG51bml2ZXJzYWxpemUvRFNHXFxudW5pdmVyc2UvU01cXG51bml2ZXJzaXR5L1NNXFxudW5pdm9jYWxcXG51bmp1c3QvWVxcbnVua2VtcHRcXG51bmtpbmQvVFxcbnVua2luZGx5L1RcXG51bmtub3dhYmxlL01cXG51bmtub3duL1NNXFxudW5sZWFkZWQvTVxcbnVubGVzc1xcbnVubGlrZS9QQlxcbnVubGlrZWx5L1RcXG51bmxpdFxcbnVubG9jay9EU0dcXG51bmxvdmFibGVcXG51bmxvdmVseS9UUlxcbnVubG92aW5nXFxudW5sdWNreS9UXFxudW5tYW5seS9UXFxudW5tYXJyaWVkXFxudW5tZWFuaW5nXFxudW5tZW50aW9uYWJsZS9NU1xcbnVubWVudGlvbmFibGVzL01cXG51bm1ldFxcbnVubWluZGZ1bFxcbnVubWlzc2FibGVcXG51bm1pc3Rha2FibHlcXG51bm1vcmFsXFxudW5tb3ZhYmxlXFxudW5tdXNpY2FsXFxudW5uZWNlc3NhcnlcXG51bm5lcnZpbmcvWVxcbnVub2JzZXJ2YW50XFxudW5vZmZlbnNpdmVcXG51bm9mZmljaWFsL1lcXG51bm9yaWdpbmFsXFxudW5wZW9wbGVcXG51bnBlcmNlcHRpdmVcXG51bnBlcnN1YXNpdmVcXG51bnBpY2svR0RTXFxudW5waW4vU1xcbnVucGxlYXNpbmdcXG51bnBvbGl0aWNhbFxcbnVucG9wdWxhclxcbnVucHJhY3RpY2FsXFxudW5wcmVjZWRlbnRlZC9ZXFxudW5wcm9mZXNzaW9uYWwvWVxcbnVucHJvbWlzaW5nXFxudW5wcm9waXRpb3VzXFxudW5xdWVzdGlvbmluZy9ZXFxudW5xdWlldC9UUlxcbnVucmVhZC9CXFxudW5yZWFkeVxcbnVucmVhbFxcbnVucmVhc29uaW5nXFxudW5yZWdlbmVyYXRlXFxudW5yZWxhdGVkXFxudW5yZWxlbnRpbmcvWVxcbnVucmVsaWV2ZWQvWVxcbnVucmVtYXJrYWJsZVxcbnVucmVtaXR0aW5nL1lcXG51bnJlcGVudGFudFxcbnVucmVwb3J0ZWRcXG51bnJlcHJlc2VudGF0aXZlXFxudW5yZXN0L01cXG51bnJldmVhbGluZ1xcbnVucmlwZS9UUlxcbnVucm9sbC9HRFNcXG51bnJvbWFudGljXFxudW5ydWxpbmVzcy9NXFxudW5ydWx5L1JUUFxcbnVuc2FmZS9ZVFJcXG51bnNhbGVhYmxlXFxudW5zYXZvcnlcXG51bnNjYXRoZWRcXG51bnNlZWluZy9ZXFxudW5zZWVtbHkvVFxcbnVuc2Vlbi9NXFxudW5zZW50aW1lbnRhbFxcbnVuc2V0XFxudW5zaGFrYWJsZVxcbnVuc2hha2FibHlcXG51bnNoYXBlbHlcXG51bnNob2NrYWJsZVxcbnVuc2hvcm5cXG51bnNpZ2h0bGluZXNzL01cXG51bnNpZ2h0bHkvUFRcXG51bnNtaWxpbmdcXG51bnNvY2lhYmxlXFxudW5zb2NpYWxcXG51bnNvbGRcXG51bnNvdW5kL1BSWVRcXG51bnNwZWFrYWJsZVxcbnVuc3BlYWthYmx5XFxudW5zcGVjaWZpY1xcbnVuc3BlY3RhY3VsYXJcXG51bnNwb3J0aW5nXFxudW5zdGFibGVcXG51bnN0ZWFkeS9UUlBcXG51bnN0aW50aW5nL1lcXG51bnN0cmFwcGluZ1xcbnVuc3Vic3RhbnRpYWxcXG51bnN1YnRsZVxcbnVuc3VpdGFibGVcXG51bnN1cmVcXG51bnN1c3BlY3RpbmcvWVxcbnVuc3ltbWV0cmljYWxcXG51bnRhY3RmdWxcXG51bnRoaW5rYWJseVxcbnVudGhpbmtpbmcvWVxcbnVudGlkeS9QVFJcXG51bnRpbFxcbnVudGltZWx5L1RcXG51bnRpcmluZy9ZXFxudW50b3VjaGFibGUvTVNcXG51bnRvd2FyZFxcbnVudHJ1ZS9SVFxcbnVudHJ1c3R3b3J0aHlcXG51bnRydXRoL01cXG51bnV0dGVyYWJsZVxcbnVudXR0ZXJhYmx5XFxudW53YXJyYW50YWJsZVxcbnVud2FyeS9UXFxudW53YXZlcmluZ1xcbnVud2VkXFxudW53ZWxjb21lL0dcXG51bndlbGxcXG51bndpZWxkaW5lc3MvTVxcbnVud2llbGR5L1RSUFxcbnVud2lzZS9SWVRcXG51bndvcnJpZWRcXG51bndvcnRoeS9UXFxudW53b3VuZFxcbnVud3JhcHBpbmdcXG51bnlpZWxkaW5nXFxudXAvU1xcbnVwYmVhdC9NU1xcbnVwYnJhaWQvU0dEXFxudXBicmluZ2luZy9NU1xcbnVwY2h1Y2svU0dEXFxudXBjb21pbmdcXG51cGNvdW50cnkvTVxcbnVwZGF0ZS9NR0RSU1xcbnVwZHJhZnQvTVNcXG51cGVuZC9TR0RcXG51cGZyb250XFxudXBncmFkZS9NR0RTXFxudXBoZWF2YWwvTVNcXG51cGhlbGRcXG51cGhpbGwvTVNcXG51cGhvbGQvWkdSU1xcbnVwaG9sZGVyL01cXG51cGhvbHN0ZXIvQVNHRFxcbnVwaG9sc3RlcmVyL01TXFxudXBob2xzdGVyeS9NXFxudXBrZWVwL01cXG51cGxhbmQvTVNcXG51cGxpZnQvSlNNREdcXG51cGxvYWQvU0RHXFxudXBtYXJrZXRcXG51cG1vc3RcXG51cG9uXFxudXBwZWRcXG51cHBlci9TTVxcbnVwcGVyY2FzZS9NXFxudXBwZXJjbGFzc21hbi9NXFxudXBwZXJjbGFzc21lblxcbnVwcGVyY2xhc3N3b21hblxcbnVwcGVyY2xhc3N3b21lblxcbnVwcGVyY3V0L01TXFxudXBwZXJjdXR0aW5nXFxudXBwZXJtb3N0XFxudXBwaW5nXFxudXBwaXNoXFxudXBwaXR5XFxudXByYWlzZS9EU0dcXG51cHJlYXIvR1NEXFxudXByaWdodC9NWVBTXFxudXByaWdodG5lc3MvTVxcbnVwcmlzaW5nL1NNXFxudXByaXZlclxcbnVwcm9hci9TTVxcbnVwcm9hcmlvdXMvWVxcbnVwcm9vdC9HU0RcXG51cHNjYWxlXFxudXBzZXQvU01cXG51cHNldHRpbmdcXG51cHNob3QvU01cXG51cHNpZGUvU01cXG51cHNpbG9uL01TXFxudXBzdGFnZS9HRFNcXG51cHN0YWlyc1xcbnVwc3RhbmRpbmdcXG51cHN0YXJ0L01EU0dcXG51cHN0YXRlL01cXG51cHN0cmVhbVxcbnVwc3Ryb2tlL1NNXFxudXBzdXJnZS9NR0RTXFxudXBzd2luZy9NU1xcbnVwdGFrZS9TTVxcbnVwdGVtcG9cXG51cHRocnVzdC9HU01cXG51cHRpY2svU01cXG51cHRpZ2h0XFxudXB0b3duL01cXG51cHRyZW5kXFxudXB0dXJuL0dTTURcXG51cHdhcmQvU1lcXG51cHdpbmRcXG51cmFjaWwvTVxcbnVyYW5pdW0vTVxcbnVyYmFuXFxudXJiYW5lL1JZVFxcbnVyYmFuaXR5L01cXG51cmJhbml6YXRpb24vTVxcbnVyYmFuaXplL0RTR1xcbnVyYmFub2xvZ2lzdC9NU1xcbnVyYmFub2xvZ3kvTVxcbnVyY2hpbi9TTVxcbnVyZWEvTVxcbnVyZW1pYS9NXFxudXJlbWljXFxudXJldGVyL1NNXFxudXJldGhhbmUvTVxcbnVyZXRocmEvTVxcbnVyZXRocmFlXFxudXJldGhyYWxcXG51cmdlL01HRFNcXG51cmdlbmN5L01cXG51cmdlbnQvWVxcbnVyaWNcXG51cmluYWwvU01cXG51cmluYWx5c2VzXFxudXJpbmFseXNpcy9NXFxudXJpbmFyeVxcbnVyaW5hdGUvR05EU1xcbnVyaW5hdGlvbi9NXFxudXJpbmUvTVxcbnVybi9TTVxcbnVyb2dlbml0YWxcXG51cm9sb2dpY2FsXFxudXJvbG9naXN0L01TXFxudXJvbG9neS9NXFxudXJzaW5lXFxudXJ0aWNhcmlhL01cXG51c2FiaWxpdHkvTVxcbnVzYWJsZS9VQVxcbnVzYWdlL1NNXFxudXNlL0FFRFNNR1xcbnVzZWQvVVxcbnVzZWZ1bC9QWVxcbnVzZWZ1bG5lc3MvTVxcbnVzZWxlc3MvWVBcXG51c2VsZXNzbmVzcy9NXFxudXNlci9NU1xcbnVzZXJuYW1lL01TXFxudXNoZXIvU01ER1xcbnVzaGVyZXR0ZS9TTVxcbnVzdVxcbnVzdWFsJ3NcXG51c3VhbC9VWVxcbnVzdXJlci9TTVxcbnVzdXJpb3VzXFxudXN1cnAvU0RSWkdcXG51c3VycGF0aW9uL01cXG51c3VycGVyL01cXG51c3VyeS9NXFxudXRlbnNpbC9TTVxcbnV0ZXJpXFxudXRlcmluZVxcbnV0ZXJ1cy9NXFxudXRpbGl0YXJpYW4vTVNcXG51dGlsaXRhcmlhbmlzbS9NXFxudXRpbGl0eS9TTVxcbnV0aWxpemF0aW9uL01cXG51dGlsaXplL0dCRFNcXG51dG1vc3QvTVxcbnV0b3BpYS9TTVxcbnV0dGVyL1NEWUdcXG51dHRlcmFuY2UvU01cXG51dHRlcm1vc3QvTVxcbnV2ZWl0aXNcXG51dnVsYS9TTVxcbnV2dWxhci9NU1xcbnV4b3Jpb3VzXFxudi9BU1xcbnZhYy9TXFxudmFjYW5jeS9TTVxcbnZhY2FudC9ZXFxudmFjYXRlL0RTR1xcbnZhY2F0aW9uL1pHTURSU1xcbnZhY2F0aW9uZXIvTVxcbnZhY2F0aW9uaXN0L1NNXFxudmFjY2luYXRlL0dORFNYXFxudmFjY2luYXRpb24vTVxcbnZhY2NpbmUvU01cXG52YWNpbGxhdGUvWEdORFNcXG52YWNpbGxhdGlvbi9NXFxudmFjdWl0eS9NXFxudmFjdW9sZS9NU1xcbnZhY3VvdXMvWVBcXG52YWN1b3VzbmVzcy9NXFxudmFjdXVtL0dTTURcXG52YWdhYm9uZC9TTURHXFxudmFnYWJvbmRhZ2UvTVxcbnZhZ2FyaW91c1xcbnZhZ2FyeS9TTVxcbnZhZ2luYS9TTVxcbnZhZ2luYWVcXG52YWdpbmFsL1lcXG52YWdpbml0aXNcXG52YWdyYW5jeS9NXFxudmFncmFudC9NU1xcbnZhZ3VlL1JZVFBcXG52YWd1ZW5lc3MvTVxcbnZhZ3VzXFxudmFpbi9SWVRcXG52YWluZ2xvcmlvdXMvWVxcbnZhaW5nbG9yeS9NXFxudmFsXFxudmFsYW5jZS9NU1xcbnZhbGUvTVNcXG52YWxlZGljdGlvbi9NU1xcbnZhbGVkaWN0b3JpYW4vU01cXG52YWxlZGljdG9yeS9TTVxcbnZhbGVuY2UvTVNcXG52YWxlbmN5L1NNXFxudmFsZW50aW5lL1NNXFxudmFsZXQvU01ER1xcbnZhbGV0dWRpbmFyaWFuL01TXFxudmFsZXR1ZGluYXJpYW5pc20vTVxcbnZhbGlhbmNlL01cXG52YWxpYW50L1lcXG52YWxpZC9ZXFxudmFsaWRhdGUvSUdORFNcXG52YWxpZGF0aW9uL0lNXFxudmFsaWRhdGlvbnNcXG52YWxpZGl0eS9JTVxcbnZhbGlkbmVzcy9NXFxudmFsaXNlL1NNXFxudmFsbGV5L1NNXFxudmFsb3IvTVxcbnZhbG9yb3VzL1lcXG52YWx1YWJsZS9NU1xcbnZhbHVhdGUvRFNHXFxudmFsdWF0aW9uL0NBTVNcXG52YWx1ZSdzXFxudmFsdWUvQ0FHU0RcXG52YWx1ZWxlc3NcXG52YWx1ZXIvU01cXG52YWx2ZS9EU01HXFxudmFsdmVsZXNzXFxudmFsdnVsYXJcXG52YW1vb3NlL0RTR1xcbnZhbXAvQU1ER1NcXG52YW1waXJlL1NNXFxudmFuL1NNXFxudmFuYWRpdW0vTVxcbnZhbmRhbC9TTVxcbnZhbmRhbGlzbS9NXFxudmFuZGFsaXplL0RTR1xcbnZhbmUvTVNcXG52YW5ndWFyZC9NU1xcbnZhbmlsbGEvU01cXG52YW5pc2gvSkRTR1xcbnZhbml0eS9TTVxcbnZhbm5lZFxcbnZhbm5pbmdcXG52YW5xdWlzaC9aR0RSU1xcbnZhbnF1aXNoZXIvTVxcbnZhbnRhZ2UvU01cXG52YXBlL0dEU1xcbnZhcGlkL1lQXFxudmFwaWRpdHkvTVxcbnZhcGlkbmVzcy9NXFxudmFwb3IvU01cXG52YXBvcml6YXRpb24vTVxcbnZhcG9yaXplL0RSU1pHXFxudmFwb3JpemVyL01cXG52YXBvcm91c1xcbnZhcG9yd2FyZVxcbnZhcG9yeVxcbnZhcXVlcm8vTVNcXG52YXIvU1xcbnZhcmlhYmlsaXR5L0lNXFxudmFyaWFibGUvSVNNXFxudmFyaWFibHkvSVxcbnZhcmlhbmNlL1NNXFxudmFyaWFudC9NU1xcbnZhcmlhdGUvTlhcXG52YXJpYXRpb24vTVxcbnZhcmljb2xvcmVkXFxudmFyaWNvc2VcXG52YXJpZWQvVVxcbnZhcmllZ2F0ZS9EU0dOXFxudmFyaWVnYXRpb24vTVxcbnZhcmlldGFsL1NNXFxudmFyaWV0eS9TTVxcbnZhcmlvdXMvWVxcbnZhcmxldC9TTVxcbnZhcm1pbnQvTVNcXG52YXJuaXNoL0dNRFNcXG52YXJuaXNoZWQvVVxcbnZhcnNpdHkvU01cXG52YXJ5L0RTR1xcbnZhcnlpbmcvVVxcbnZhc2N1bGFyXFxudmFzZS9NU1xcbnZhc2VjdG9teS9TTVxcbnZhc29jb25zdHJpY3Rpb25cXG52YXNvbW90b3JcXG52YXNzYWwvU01cXG52YXNzYWxhZ2UvTVxcbnZhc3QvTVJZVFNQXFxudmFzdG5lc3MvTVxcbnZhdC9TTVxcbnZhdHRlZFxcbnZhdHRpbmdcXG52YXVkZXZpbGxlL01cXG52YXVkZXZpbGxpYW4vTVNcXG52YXVsdC9TTURSWkdcXG52YXVsdGVyL01cXG52YXVsdGluZy9NXFxudmF1bnQvU01ER1xcbnZiXFxudmVhbC9NXFxudmVjdG9yL1NHTURcXG52ZWVqYXkvU01cXG52ZWVwL01TXFxudmVlci9NREdTXFxudmVnL01cXG52ZWdhbi9TTVxcbnZlZ2FuaXNtXFxudmVnZWJ1cmdlci9TXFxudmVnZXNcXG52ZWdldGFibGUvU01cXG52ZWdldGFyaWFuL1NNXFxudmVnZXRhcmlhbmlzbS9NXFxudmVnZXRhdGUvR05WRFNcXG52ZWdldGF0aW9uL01cXG52ZWdnZWRcXG52ZWdnZXNcXG52ZWdnaWUvU01cXG52ZWdnaWVidXJnZXIvU1xcbnZlZ2dpbmdcXG52ZWhlbWVuY2UvTVxcbnZlaGVtZW5jeS9NXFxudmVoZW1lbnQvWVxcbnZlaGljbGUvTVNcXG52ZWhpY3VsYXJcXG52ZWlsJ3NcXG52ZWlsL1VER1NcXG52ZWluL01ER1NcXG52ZWxhXFxudmVsYXIvU01cXG52ZWxkL01TXFxudmVsbHVtL01cXG52ZWxvY2lwZWRlL01TXFxudmVsb2NpdHkvU01cXG52ZWxvZHJvbWUvU1xcbnZlbG91ci9NU1xcbnZlbHVtL01cXG52ZWx2ZXQvTVxcbnZlbHZldGVlbi9NXFxudmVsdmV0eVxcbnZlbmFsL1lcXG52ZW5hbGl0eS9NXFxudmVuYXRpb24vTVxcbnZlbmQvREdTXFxudmVuZGV0dGEvU01cXG52ZW5kaWJsZVxcbnZlbmRvci9NU1xcbnZlbmVlci9NREdTXFxudmVuZXJhYmlsaXR5L01cXG52ZW5lcmFibGVcXG52ZW5lcmF0ZS9EU0dOXFxudmVuZXJhdGlvbi9NXFxudmVuZXJlYWxcXG52ZW5nZWFuY2UvTVxcbnZlbmdlZnVsL0FZXFxudmVuaWFsXFxudmVuaXJlbWFuL01cXG52ZW5pcmVtZW5cXG52ZW5pc29uL01cXG52ZW5vbS9NXFxudmVub21vdXMvWVxcbnZlbm91c1xcbnZlbnQnc1xcbnZlbnQvREdTXFxudmVudGlsYXRlL0dORFNcXG52ZW50aWxhdGlvbi9NXFxudmVudGlsYXRvci9TTVxcbnZlbnRpbGF0b3J5XFxudmVudHJhbFxcbnZlbnRyaWNsZS9TTVxcbnZlbnRyaWN1bGFyXFxudmVudHJpbG9xdWlzbS9NXFxudmVudHJpbG9xdWlzdC9TTVxcbnZlbnRyaWxvcXV5L01cXG52ZW50dXJlL0RTTUdcXG52ZW50dXJlc29tZS9QWVxcbnZlbnR1cmVzb21lbmVzcy9NXFxudmVudHVyb3VzL1BZXFxudmVudHVyb3VzbmVzcy9NXFxudmVudWUvQVNNXFxudmVyYWNpb3VzL1lcXG52ZXJhY2l0eS9NXFxudmVyYW5kYS9TTVxcbnZlcmFwYW1pbFxcbnZlcmIvS01TXFxudmVyYmFsL01ZU1xcbnZlcmJhbGl6YXRpb24vTVxcbnZlcmJhbGl6ZS9HRFNcXG52ZXJiYXRpbVxcbnZlcmJlbmEvU01cXG52ZXJiaWFnZS9NU1xcbnZlcmJvc2UvWVxcbnZlcmJvc2l0eS9NXFxudmVyYm90ZW5cXG52ZXJkYW50L1lcXG52ZXJkaWN0L1NNXFxudmVyZGlncmlzL0dNRFNcXG52ZXJkdXJlL01cXG52ZXJnZSdzXFxudmVyZ2UvRkRTR1xcbnZlcmdlci9NU1xcbnZlcmlmaWFibGUvVVxcbnZlcmlmaWNhdGlvbi9NXFxudmVyaWZpZWQvVVxcbnZlcmlmeS9EU05HXFxudmVyaWx5XFxudmVyaXNpbWlsaXR1ZGUvTVxcbnZlcml0YWJsZVxcbnZlcml0YWJseVxcbnZlcml0eS9TTVxcbnZlcm1pY2VsbGkvTVxcbnZlcm1pY3VsaXRlL01cXG52ZXJtaWZvcm1cXG52ZXJtaWxpb24vTVxcbnZlcm1pbi9NXFxudmVybWlub3VzXFxudmVybW91dGgvTVxcbnZlcm5hY3VsYXIvTVNcXG52ZXJuYWxcXG52ZXJuaWVyL1NNXFxudmVyb25pY2EvTVxcbnZlcnJ1Y2EvU01cXG52ZXJydWNhZVxcbnZlcnNhXFxudmVyc2F0aWxlXFxudmVyc2F0aWxpdHkvTVxcbnZlcnNlL0FGTkdNU0RYXFxudmVyc2VkL1VcXG52ZXJzaWZpY2F0aW9uL01cXG52ZXJzaWZpZXIvTVxcbnZlcnNpZnkvWkdORFJTXFxudmVyc2lvbi9BRklNU1xcbnZlcnNpb25lZFxcbnZlcnNpb25pbmdcXG52ZXJzby9TTVxcbnZlcnN1c1xcbnZlcnQvQVxcbnZlcnRlYnJhL01cXG52ZXJ0ZWJyYWVcXG52ZXJ0ZWJyYWxcXG52ZXJ0ZWJyYXRlL0lNU1xcbnZlcnRleC9NU1xcbnZlcnRpY2FsL01ZU1xcbnZlcnRpY2VzXFxudmVydGlnaW5vdXNcXG52ZXJ0aWdvL01cXG52ZXJ2ZS9NXFxudmVyeS9SVFxcbnZlc2ljbGUvU01cXG52ZXNpY3VsYXJcXG52ZXNpY3VsYXRlXFxudmVzcGVyL01TXFxudmVzc2VsL01TXFxudmVzdCdzXFxudmVzdC9JTERHU1xcbnZlc3RhbC9NU1xcbnZlc3RpYnVsZS9NU1xcbnZlc3RpZ2UvU01cXG52ZXN0aWdpYWwvWVxcbnZlc3RpbmcvTVxcbnZlc3RtZW50L0lNU1xcbnZlc3RyeS9TTVxcbnZlc3RyeW1hbi9NXFxudmVzdHJ5bWVuXFxudmV0L1NNXFxudmV0Y2gvTVNcXG52ZXRlcmFuL1NNXFxudmV0ZXJpbmFyaWFuL01TXFxudmV0ZXJpbmFyeS9TTVxcbnZldG8vTURHXFxudmV0b2VzXFxudmV0dGVkXFxudmV0dGluZ1xcbnZleC9HRFNcXG52ZXhhdGlvbi9TTVxcbnZleGF0aW91cy9ZXFxudmhmXFxudmlcXG52aWFcXG52aWFiaWxpdHkvTVxcbnZpYWJsZVxcbnZpYWJseVxcbnZpYWR1Y3QvU01cXG52aWFsL01TXFxudmlhbmQvU01cXG52aWJlL01TXFxudmliZXMvTVxcbnZpYnJhaGFycC9TTVxcbnZpYnJhbmN5L01cXG52aWJyYW50L1lcXG52aWJyYXBob25lL01TXFxudmlicmFwaG9uaXN0L01TXFxudmlicmF0ZS9HTkRTWFxcbnZpYnJhdGlvbi9NXFxudmlicmF0by9NU1xcbnZpYnJhdG9yL1NNXFxudmlicmF0b3J5XFxudmlidXJudW0vU01cXG52aWNhci9TTVxcbnZpY2FyYWdlL1NNXFxudmljYXJpb3VzL1lQXFxudmljYXJpb3VzbmVzcy9NXFxudmljZS9DTVNcXG52aWNlZFxcbnZpY2VnZXJlbnQvU01cXG52aWNlbm5pYWxcXG52aWNlcmVnYWxcXG52aWNlcm95L01TXFxudmljaHlzc29pc2UvTVxcbnZpY2luZ1xcbnZpY2luaXR5L01cXG52aWNpb3VzL1lQXFxudmljaW91c25lc3MvTVxcbnZpY2lzc2l0dWRlL1NNXFxudmljdGltL01TXFxudmljdGltaXphdGlvbi9NXFxudmljdGltaXplL0dEU1xcbnZpY3RpbWxlc3NcXG52aWN0b3IvTVNcXG52aWN0b3Jpb3VzL1lcXG52aWN0b3J5L1NNXFxudmljdHVhbC9TTURHXFxudmljdW5hL01TXFxudmlkZWxpY2V0XFxudmlkZW8vR1NNRFxcbnZpZGVvY2Fzc2V0dGUvU01cXG52aWRlb2NvbmZlcmVuY2luZ1xcbnZpZGVvZGlzYy9NU1xcbnZpZGVvcGhvbmUvTVNcXG52aWRlb3RhcGUvRFNNR1xcbnZpZGVvdGV4XFxudmllL0RTXFxudmlldy9BTURSU1pHXFxudmlld2FibGVcXG52aWV3ZXIvQU1cXG52aWV3ZXJzaGlwL01cXG52aWV3ZmluZGVyL1NNXFxudmlld2luZy9TTVxcbnZpZXdwb2ludC9NU1xcbnZpZ2VzaW1hbFxcbnZpZ2lsL1NNXFxudmlnaWxhbmNlL01cXG52aWdpbGFudC9ZXFxudmlnaWxhbnRlL1NNXFxudmlnaWxhbnRpc20vTVxcbnZpZ2lsYW50aXN0L01cXG52aWduZXR0ZS9EU01HXFxudmlnbmV0dGlzdC9NU1xcbnZpZ29yL01cXG52aWdvcm91cy9ZXFxudmlpXFxudmlpaVxcbnZpa2luZy9NU1xcbnZpbGUvWVRQUlxcbnZpbGVuZXNzL01cXG52aWxpZmljYXRpb24vTVxcbnZpbGlmeS9EU05HXFxudmlsbGEvU01cXG52aWxsYWdlL1JTTVpcXG52aWxsYWdlci9NXFxudmlsbGFpbi9TTVxcbnZpbGxhaW5vdXNcXG52aWxsYWlueS9TTVxcbnZpbGxlaW4vU01cXG52aWxsZWluYWdlL01cXG52aWxsaVxcbnZpbGx1cy9NXFxudmltL01cXG52aW5haWdyZXR0ZS9NXFxudmluY2libGUvSVxcbnZpbmRpY2F0ZS9YRFNHTlxcbnZpbmRpY2F0aW9uL01cXG52aW5kaWNhdG9yL01TXFxudmluZGljdGl2ZS9QWVxcbnZpbmRpY3RpdmVuZXNzL01cXG52aW5lL01TXFxudmluZWdhci9NXFxudmluZWdhcnlcXG52aW5leWFyZC9NU1xcbnZpbm8vTVxcbnZpbm91c1xcbnZpbnRhZ2UvTVNcXG52aW50bmVyL01TXFxudmlueWwvU01cXG52aW9sL01CU1xcbnZpb2xhL1NNXFxudmlvbGFibGUvSVxcbnZpb2xhdGUvR05EU1hcXG52aW9sYXRpb24vTVxcbnZpb2xhdG9yL1NNXFxudmlvbGVuY2UvTVxcbnZpb2xlbnQvWVxcbnZpb2xldC9NU1xcbnZpb2xpbi9NU1xcbnZpb2xpbmNlbGxvL1NcXG52aW9saW5pc3QvU01cXG52aW9saXN0L01TXFxudmlvbG9uY2VsbGlzdC9TTVxcbnZpb2xvbmNlbGxvL01TXFxudmlwZXIvU01cXG52aXBlcm91c1xcbnZpcmFnby9NXFxudmlyYWdvZXNcXG52aXJhbFxcbnZpcmVvL1NNXFxudmlyZ2luL01TXFxudmlyZ2luYWwvU01cXG52aXJnaW5pdHkvTVxcbnZpcmd1bGUvTVNcXG52aXJpbGVcXG52aXJpbGl0eS9NXFxudmlyb2xvZ2lzdC9TTVxcbnZpcm9sb2d5L01cXG52aXJ0dWFsL1lcXG52aXJ0dWFsaXphdGlvblxcbnZpcnR1ZS9TTVxcbnZpcnR1b3NpdHkvTVxcbnZpcnR1b3NvL01cXG52aXJ0dW91cy9ZUFxcbnZpcnR1b3VzbmVzcy9NXFxudmlydWxlbmNlL01cXG52aXJ1bGVudC9ZXFxudmlydXMvTVNcXG52aXNhL01EU0dcXG52aXNhZ2UvTVNcXG52aXNjZXJhXFxudmlzY2VyYWwvWVxcbnZpc2NpZFxcbnZpc2Nvc2UvTVxcbnZpc2Nvc2l0eS9NXFxudmlzY291bnQvU01cXG52aXNjb3VudGN5L1NNXFxudmlzY291bnRlc3MvTVNcXG52aXNjb3VzXFxudmlzY3VzL01cXG52aXNlL0FDTUdEU1xcbnZpc2liaWxpdHkvSU1cXG52aXNpYmxlL0lcXG52aXNpYmx5L0lcXG52aXNpb24vS0dEU01cXG52aXNpb25hcnkvU01cXG52aXNpdCdzXFxudmlzaXQvQVNHRFxcbnZpc2l0YW50L01TXFxudmlzaXRhdGlvbi9NU1xcbnZpc2l0b3IvTVNcXG52aXNvci9TTVxcbnZpc3RhL1NNXFxudmlzdWFsL1NNWVxcbnZpc3VhbGl6YXRpb24vU01cXG52aXN1YWxpemUvRFJTWkdcXG52aXN1YWxpemVyL01cXG52aXRhL01cXG52aXRhZVxcbnZpdGFsL1NZXFxudml0YWxpdHkvTVxcbnZpdGFsaXphdGlvbi9BTVxcbnZpdGFsaXplL0NBR1NEXFxudml0YWxzL01cXG52aXRhbWluL01TXFxudml0aWF0ZS9HTkRTXFxudml0aWF0aW9uL01cXG52aXRpY3VsdHVyZS9NXFxudml0aWN1bHR1cmlzdC9NU1xcbnZpdHJlb3VzXFxudml0cmlmYWN0aW9uL01cXG52aXRyaWZpY2F0aW9uL01cXG52aXRyaWZ5L0dORFNcXG52aXRyaW5lL1NNXFxudml0cmlvbC9NXFxudml0cmlvbGljXFxudml0cmlvbGljYWxseVxcbnZpdHRsZXMvTVxcbnZpdHVwZXJhdGUvR05WRFNcXG52aXR1cGVyYXRpb24vTVxcbnZpdmEvTVNcXG52aXZhY2VcXG52aXZhY2lvdXMvUFlcXG52aXZhY2lvdXNuZXNzL01cXG52aXZhY2l0eS9NXFxudml2YXJpYVxcbnZpdmFyaXVtL1NNXFxudml2aWQvUllUUFxcbnZpdmlkbmVzcy9NXFxudml2aWZ5L0FEU0dcXG52aXZpcGFyb3VzXFxudml2aXNlY3QvREdTXFxudml2aXNlY3Rpb24vTVxcbnZpdmlzZWN0aW9uYWxcXG52aXZpc2VjdGlvbmlzdC9TTVxcbnZpeGVuL1NNXFxudml4ZW5pc2gvWVxcbnZpelxcbnZpemllci9TTVxcbnZsZlxcbnZvY2FiXFxudm9jYWJsZS9NU1xcbnZvY2FidWxhcnkvU01cXG52b2NhbC9TTVlcXG52b2NhbGljXFxudm9jYWxpc3QvU01cXG52b2NhbGl6YXRpb24vTVNcXG52b2NhbGl6ZS9EU0dcXG52b2NhdGlvbi9GSUtBU01cXG52b2NhdGlvbmFsL1lcXG52b2NhdGl2ZS9NU1xcbnZvY2lmZXJhdGUvRFNHTlxcbnZvY2lmZXJhdGlvbi9NXFxudm9jaWZlcm91cy9ZUFxcbnZvY2lmZXJvdXNuZXNzL01cXG52b2RrYS9TTVxcbnZvZ3VlL1NNXFxudm9ndWlzaFxcbnZvaWNlL0lEU01HXFxudm9pY2VkL1VcXG52b2ljZWxlc3MvUFlcXG52b2ljZWxlc3NuZXNzL01cXG52b2ljZW1haWwvU01cXG52b2lkL01EU0dCXFxudm9pbGFcXG52b2lsZS9NXFxudm9sL1NcXG52b2xhdGlsZVxcbnZvbGF0aWxpdHkvTVxcbnZvbGF0aWxpemUvRFNHXFxudm9sY2FuaWNcXG52b2xjYW5pc21cXG52b2xjYW5vL01cXG52b2xjYW5vZXNcXG52b2xlL01TXFxudm9saXRpb24vTVxcbnZvbGl0aW9uYWxcXG52b2xsZXkvR1NNRFxcbnZvbGxleWJhbGwvTVNcXG52b2x0L0FNU1xcbnZvbHRhZ2UvTVNcXG52b2x0YWljXFxudm9sdG1ldGVyL1NNXFxudm9sdWJpbGl0eS9NXFxudm9sdWJsZVxcbnZvbHVibHlcXG52b2x1bWUvU01cXG52b2x1bWV0cmljXFxudm9sdW1pbm91cy9ZUFxcbnZvbHVtaW5vdXNuZXNzL01cXG52b2x1bnRhcmlseS9JXFxudm9sdW50YXJpc20vTVxcbnZvbHVudGFyeS9TTVxcbnZvbHVudGVlci9TR01EXFxudm9sdW50ZWVyaXNtL01cXG52b2x1cHR1YXJ5L1NNXFxudm9sdXB0dW91cy9QWVxcbnZvbHVwdHVvdXNuZXNzL01cXG52b2x1dGUvU01cXG52b21pdC9TTURHXFxudm9vZG9vL0dTTURcXG52b29kb29pc20vTVxcbnZvcmFjaW91cy9QWVxcbnZvcmFjaW91c25lc3MvTVxcbnZvcmFjaXR5L01cXG52b3J0ZXgvTVNcXG52b3RhcnkvU01cXG52b3RlJ3NcXG52b3RlL0NHVkRTXFxudm90ZXIvU01cXG52b3VjaC9EUlNaR1xcbnZvdWNoZXIvTVxcbnZvdWNoc2FmZS9EU0dcXG52b3cvU0dNRFxcbnZvd2VsL1NNXFxudm95YWdlL01aR0RSU1xcbnZveWFnZXIvTVxcbnZveWFnZXVyL1NNXFxudm95ZXVyL01TXFxudm95ZXVyaXNtL01cXG52b3lldXJpc3RpY1xcbnZ1bGNhbml6YXRpb24vTVxcbnZ1bGNhbml6ZS9HRFNcXG52dWxnYXIvUllUXFxudnVsZ2FyaWFuL01TXFxudnVsZ2FyaXNtL01TXFxudnVsZ2FyaXR5L1NNXFxudnVsZ2FyaXphdGlvbi9NXFxudnVsZ2FyaXplL1pHRFJTXFxudnVsZ2FyaXplci9NXFxudnVsbmVyYWJpbGl0aWVzXFxudnVsbmVyYWJpbGl0eS9JTVxcbnZ1bG5lcmFibGUvSVxcbnZ1bG5lcmFibHkvSVxcbnZ1bHBpbmVcXG52dWx0dXJlL1NNXFxudnVsdHVyb3VzXFxudnVsdmEvTVxcbnZ1bHZhZVxcbnZ1dnV6ZWxhL01TXFxudnlpbmdcXG53L0ROWFRHVkpcXG53YWJiaXQvU1xcbndhY2svTVJUU1xcbndhY2tpbmVzcy9NXFxud2Fja28vU01cXG53YWNreS9SUFRcXG53YWQvU1pHTURSXFxud2FkZGVkXFxud2FkZGluZy9NXFxud2FkZGxlL0RTTUdcXG53YWRlL01TXFxud2FkZXIvTVxcbndhZGVycy9NXFxud2FkZ2UvU1xcbndhZGkvTVNcXG53YWZlci9TTVxcbndhZmZsZS9NWkdEUlNcXG53YWZmbGVyL01cXG53YWZ0L01ER1NcXG53YWcvU1pHTURSXFxud2FnZS9NU1xcbndhZ2VkL1VcXG53YWdlci9aR01EUlxcbndhZ2VyZXIvTVxcbndhZ2dlZFxcbndhZ2dlcnkvU01cXG53YWdnaW5nXFxud2FnZ2lzaC9ZUFxcbndhZ2dpc2huZXNzL01cXG53YWdnbGUvTUdEU1xcbndhZ29uL1pTTVJcXG53YWdvbmVyL01cXG53YWd0YWlsL1NNXFxud2FpZi9NU1xcbndhaWwvTURSWkdTXFxud2FpbGVyL01cXG53YWlsaW5nL01cXG53YWluL01TXFxud2FpbnNjb3QvU0pNREdcXG53YWluc2NvdGluZy9NXFxud2FpbndyaWdodC9NU1xcbndhaXN0L1NNXFxud2Fpc3RiYW5kL01TXFxud2Fpc3Rjb2F0L01TXFxud2Fpc3RsaW5lL01TXFxud2FpdC9NRFJaR1NcXG53YWl0ZXIvTVxcbndhaXRpbmcvTVxcbndhaXRwZXJzb24vTVNcXG53YWl0cmVzcy9NU1xcbndhaXRzdGFmZi9NXFxud2FpdmUvRFJTWkdcXG53YWl2ZXIvTVxcbndha2UvTUdKRFNcXG53YWtlZnVsL1BZXFxud2FrZWZ1bG5lc3MvTVxcbndha2VuL0dTRFxcbndhbGRvL1NcXG53YWxkb2VzXFxud2FsZS9NR0RTXFxud2Fsay9NRFJaR1NcXG53YWxrYWJvdXQvU1xcbndhbGthd2F5L01TXFxud2Fsa2VyL01cXG53YWxraWVzXFxud2Fsa2luZy9NXFxud2Fsa291dC9TTVxcbndhbGtvdmVyL01TXFxud2Fsa3dheS9TTVxcbndhbGwvTURHU1xcbndhbGxhYnkvU01cXG53YWxsYWhcXG53YWxsYWhzXFxud2FsbGJvYXJkL01cXG53YWxsZXQvTVNcXG53YWxsZXllL0RTTVxcbndhbGxmbG93ZXIvTVNcXG53YWxsb3AvTURTSkdcXG53YWxsb3BpbmcvTVxcbndhbGxvdy9NRFNHXFxud2FsbHBhcGVyL1NNREdcXG53YWxseS9TXFxud2FsbnV0L01TXFxud2FscnVzL01TXFxud2FsdHovWkdNRFJTXFxud2FsdHplci9NXFxud2FtcHVtL01cXG53YW4vR1BEWVxcbndhbmQvTVNcXG53YW5kZXIvRFJTSlpHXFxud2FuZGVyZXIvTVxcbndhbmRlcmluZ3MvTVxcbndhbmRlcmx1c3QvU01cXG53YW5lL01TXFxud2FuZ2xlL01aR0RSU1xcbndhbmdsZXIvTVxcbndhbmsvRFJaR1NcXG53YW5uYVxcbndhbm5hYmUvU01cXG53YW5uYWJlZS9TXFxud2FubmVyXFxud2FubmVzcy9NXFxud2FubmVzdFxcbndhbnQvTURHU1xcbndhbnRlZC9VXFxud2FudG9uL01EWVNQR1xcbndhbnRvbm5lc3MvTVxcbndhcGl0aS9NU1xcbndhci9TTVxcbndhcmJsZS9NWkdEUlNcXG53YXJibGVyL01cXG53YXJib25uZXQvU01cXG53YXJkL0FNREdTXFxud2FyZGVuL01TXFxud2FyZGVyL01TXFxud2FyZHJlc3MvU1xcbndhcmRyb2JlL1NNXFxud2FyZHJvb20vU01cXG53YXJlL01TXFxud2FyZWhvdXNlL0RTTUdcXG53YXJlelxcbndhcmZhcmUvTVxcbndhcmZhcmluXFxud2FyaGVhZC9NU1xcbndhcmhvcnNlL1NNXFxud2FyaWx5L1VcXG53YXJpbmVzcy9VTVxcbndhcmxpa2VcXG53YXJsb2NrL01TXFxud2FybG9yZC9NU1xcbndhcm0vUERSWUhaVEdTXFxud2FybWJsb29kZWRcXG53YXJtZXIvTVxcbndhcm1oZWFydGVkL1BcXG53YXJtaGVhcnRlZG5lc3MvTVxcbndhcm1pc2hcXG53YXJtbmVzcy9NXFxud2FybW9uZ2VyL1NNR1xcbndhcm1vbmdlcmluZy9NXFxud2FybXRoL01cXG53YXJuL0pER1NcXG53YXJuaW5nL01cXG53YXJwL01ER1NcXG53YXJwYWludFxcbndhcnBhdGgvTVxcbndhcnBhdGhzXFxud2FycGxhbmUvTVNcXG53YXJyYW50L0dNRFNcXG53YXJyYW50ZWQvVVxcbndhcnJhbnR5L0RTTUdcXG53YXJyZWRcXG53YXJyZW4vTVNcXG53YXJyaW5nXFxud2Fycmlvci9TTVxcbndhcnNoaXAvU01cXG53YXJ0L01TXFxud2FydGhvZy9TTVxcbndhcnRpbWUvTVxcbndhcnR5L1RSXFxud2FyeS9VUFJUXFxud2FzXFxud2FzYWJpXFxud2FzaC9CSk1EUlNaR1xcbndhc2hhYmxlL1NNXFxud2FzaGJhc2luL1NNXFxud2FzaGJvYXJkL1NNXFxud2FzaGJvd2wvU01cXG53YXNoY2xvdGgvTVxcbndhc2hjbG90aHNcXG53YXNoZWQvVVxcbndhc2hlci9NXFxud2FzaGVyd29tYW4vTVxcbndhc2hlcndvbWVuXFxud2FzaGluZy9NXFxud2FzaG91dC9NU1xcbndhc2hyYWcvTVNcXG53YXNocm9vbS9NU1xcbndhc2hzdGFuZC9TTVxcbndhc2h0dWIvTVNcXG53YXNoeS9UUlxcbndhc24ndFxcbndhc3AvTVNcXG53YXNwaXNoL1lQXFxud2FzcGlzaG5lc3MvTVxcbndhc3NhaWwvU01ER1xcbndhc3RcXG53YXN0YWdlL01cXG53YXN0ZS9EUlNNWkdcXG53YXN0ZWJhc2tldC9NU1xcbndhc3RlZnVsL1BZXFxud2FzdGVmdWxuZXNzL01cXG53YXN0ZWxhbmQvU01cXG53YXN0ZXBhcGVyL01cXG53YXN0ZXIvTVxcbndhc3Rld2F0ZXJcXG53YXN0cmVsL1NNXFxud2F0Y2gvQlpHTURSU1xcbndhdGNoYWJsZS9VXFxud2F0Y2hiYW5kL01TXFxud2F0Y2hkb2cvU01cXG53YXRjaGVyL01cXG53YXRjaGZ1bC9ZUFxcbndhdGNoZnVsbmVzcy9NXFxud2F0Y2htYWtlci9NU1xcbndhdGNobWFraW5nL01cXG53YXRjaG1hbi9NXFxud2F0Y2htZW5cXG53YXRjaHN0cmFwL1NcXG53YXRjaHRvd2VyL1NNXFxud2F0Y2h3b3JkL01TXFxud2F0ZXIvR1NNRFxcbndhdGVyYmVkL01TXFxud2F0ZXJiaXJkL1NNXFxud2F0ZXJib2FyZC9NREpTR1xcbndhdGVyYm9hcmRpbmcvTVxcbndhdGVyYm9ybmVcXG53YXRlcmNvbG9yL01TXFxud2F0ZXJjb3Vyc2UvU01cXG53YXRlcmNyYWZ0L01cXG53YXRlcmNyZXNzL01cXG53YXRlcmZhbGwvU01cXG53YXRlcmZvd2wvU01cXG53YXRlcmZyb250L01TXFxud2F0ZXJob2xlL1NNXFxud2F0ZXJpbmVzcy9NXFxud2F0ZXJsaWx5L1NNXFxud2F0ZXJsaW5lL01TXFxud2F0ZXJsb2dnZWRcXG53YXRlcm1hcmsvTURHU1xcbndhdGVybWVsb24vU01cXG53YXRlcm1pbGwvTVNcXG53YXRlcnByb29mL1NNREdcXG53YXRlcnByb29maW5nL01cXG53YXRlcnMvTVxcbndhdGVyc2hlZC9NU1xcbndhdGVyc2lkZS9NU1xcbndhdGVyc3BvdXQvU01cXG53YXRlcnRpZ2h0XFxud2F0ZXJ3YXkvTVNcXG53YXRlcndoZWVsL1NNXFxud2F0ZXJ3b3Jrcy9NXFxud2F0ZXJ5L1BUUlxcbndhdHQvTVNcXG53YXR0YWdlL01cXG53YXR0bGUvTUdEU1xcbndhdmUvTVpHRFJTXFxud2F2ZWJhbmQvU1xcbndhdmVmb3JtXFxud2F2ZWZyb250XFxud2F2ZWxlbmd0aC9NXFxud2F2ZWxlbmd0aHNcXG53YXZlbGV0L1NNXFxud2F2ZWxpa2VcXG53YXZlci9aR01EUlxcbndhdmVyZXIvTVxcbndhdmVyaW5nL1lcXG53YXZpbmVzcy9NXFxud2F2eS9QUlRcXG53YXgvR01ETlNcXG53YXhpbmVzcy9NXFxud2F4d2luZy9TTVxcbndheHdvcmsvU01cXG53YXh5L1JQVFxcbndheS9TTVxcbndheWJpbGwvU01cXG53YXlmYXJlci9NU1xcbndheWZhcmluZy9TTVxcbndheWxhaWRcXG53YXlsYXkvUlNaR1xcbndheWxheWVyL01cXG53YXlzaWRlL1NNXFxud2F5d2FyZC9QWVxcbndheXdhcmRuZXNzL01cXG53YXpvby9TXFxud2VcXG53ZSdkXFxud2UnbGxcXG53ZSdyZVxcbndlJ3ZlXFxud2Vhay9QTlJZWFRcXG53ZWFrZW4vRFJaR1xcbndlYWtlbmVyL01cXG53ZWFrZmlzaC9NU1xcbndlYWtpc2hcXG53ZWFrbGluZy9TTVxcbndlYWtuZXNzL01TXFxud2VhbC9NSFNcXG53ZWFsdGgvTVxcbndlYWx0aGluZXNzL01cXG53ZWFsdGh5L1RSUFxcbndlYW4vREdTXFxud2VhcG9uL01TXFxud2VhcG9uaXplL0dEU1xcbndlYXBvbmxlc3NcXG53ZWFwb25yeS9NXFxud2Vhci9NUkJKU1pHXFxud2VhcmFibGUvVVxcbndlYXJlci9NXFxud2VhcmllZC9VXFxud2VhcmlseVxcbndlYXJpbmVzcy9NXFxud2Vhcmlzb21lL1lcXG53ZWFyeS9UR0RSU1BcXG53ZWFzZWwvTURZU0dcXG53ZWF0aGVyL1NNREdcXG53ZWF0aGVyYm9hcmQvU0dcXG53ZWF0aGVyY29jay9NU1xcbndlYXRoZXJpbmcvTVxcbndlYXRoZXJpemF0aW9uL01cXG53ZWF0aGVyaXplL0RTR1xcbndlYXRoZXJtYW4vTVxcbndlYXRoZXJtZW5cXG53ZWF0aGVycGVyc29uL01TXFxud2VhdGhlcnByb29mL0dTRFxcbndlYXRoZXJzdHJpcC9TXFxud2VhdGhlcnN0cmlwcGVkXFxud2VhdGhlcnN0cmlwcGluZy9NXFxud2VhdmUvRFJTTVpHXFxud2VhdmVyL01cXG53ZWF2aW5nL01cXG53ZWIvU01cXG53ZWJiZWRcXG53ZWJiaW5nL01cXG53ZWJjYW0vTVNcXG53ZWJjYXN0L1NNR1xcbndlYmZlZXRcXG53ZWJmb290L01cXG53ZWJpbmFyL1NNXFxud2ViaXNvZGUvTVNcXG53ZWJsb2cvTVNcXG53ZWJtYXN0ZXIvU01cXG53ZWJtaXN0cmVzcy9NU1xcbndlYnNpdGUvU01cXG53ZWQvQVNcXG53ZWRkZWQvQVxcbndlZGRlclxcbndlZGRpbmcvU01cXG53ZWRnZS9EU01HXFxud2VkZ2llL01TXFxud2VkbG9jay9NXFxud2VlL1JTTVRcXG53ZWVkL01EUlNaR1xcbndlZWRlci9NXFxud2VlZGtpbGxlci9TXFxud2VlZGxlc3NcXG53ZWVkeS9UUlxcbndlZWluZ1xcbndlZWsvTVlTXFxud2Vla2RheS9TTVxcbndlZWtlbmQvU1pHTURSXFxud2Vla2x5L1NNXFxud2Vla25pZ2h0L1NNXFxud2Vlbi9EU0dcXG53ZWVuaWUvTVRSU1xcbndlZW5zeS9SVFxcbndlZW55XFxud2VlcC9NUkpTWkdcXG53ZWVwZXIvTVxcbndlZXBpZVxcbndlZXB5L1RSU01cXG53ZWV2aWwvTVNcXG53ZWZ0L01TXFxud2VpZ2gnc1xcbndlaWdoL0FHRFxcbndlaWdoYnJpZGdlL1NcXG53ZWlnaHMvQVxcbndlaWdodC9NRFNKR1xcbndlaWdodGVkL1VcXG53ZWlnaHRpbHlcXG53ZWlnaHRpbmVzcy9NXFxud2VpZ2h0bGVzcy9ZUFxcbndlaWdodGxlc3NuZXNzL01cXG53ZWlnaHRsaWZ0ZXIvTVNcXG53ZWlnaHRsaWZ0aW5nL01cXG53ZWlnaHR5L1BUUlxcbndlaXIvTVNcXG53ZWlyZC9QVFJZXFxud2VpcmRpZS9NU1xcbndlaXJkbmVzcy9NXFxud2VpcmRvL01TXFxud2VsY29tZS9NR0RTXFxud2VsZC9NRFJCU1pHXFxud2VsZGVyL01cXG53ZWxmYXJlL01cXG53ZWxraW4vTVxcbndlbGwvTURQU0dcXG53ZWxsaGVhZC9TTVxcbndlbGxpZVxcbndlbGxpbmd0b24vTVNcXG53ZWxsbmVzcy9NXFxud2VsbHNwcmluZy9NU1xcbndlbGx5L1NcXG53ZWxzaC9aR0RSU1xcbndlbHNoZXIvTVxcbndlbHQvTURSU1pHXFxud2VsdGVyL0dNRFxcbndlbHRlcndlaWdodC9TTVxcbndlbi9NXFxud2VuY2gvTVNcXG53ZW5kL0RTR1xcbndlbnRcXG53ZXB0XFxud2VyZVxcbndlcmVuJ3RcXG53ZXJld29sZi9NXFxud2VyZXdvbHZlc1xcbndlc3QvTVxcbndlc3Rib3VuZFxcbndlc3Rlcmx5L1NNXFxud2VzdGVybi9TWk1SXFxud2VzdGVybmVyL01cXG53ZXN0ZXJuaXphdGlvbi9NXFxud2VzdGVybml6ZS9HRFNcXG53ZXN0ZXJubW9zdFxcbndlc3R3YXJkL1NcXG53ZXQvU01ZUFxcbndldGJhY2svU01cXG53ZXRsYW5kL1NNXFxud2V0bmVzcy9NXFxud2V0dGVyL1NNXFxud2V0dGVzdFxcbndldHRpbmdcXG53ZXR3YXJlL1NcXG53aGFjay9TSlpHTURSXFxud2hhY2tlci9NXFxud2hhbGUvRFJTTVpHXFxud2hhbGVib2F0L01TXFxud2hhbGVib25lL01cXG53aGFsZXIvTVxcbndoYWxpbmcvTVxcbndoYW0vTVNcXG53aGFtbWVkXFxud2hhbW1pbmdcXG53aGFtbXkvU01cXG53aGFyZi9NXFxud2hhcnZlc1xcbndoYXQvTVNcXG53aGF0Y2hhbWFjYWxsaXQvTVNcXG53aGF0ZXZlclxcbndoYXRub3QvTVxcbndoYXRzaGVybmFtZVxcbndoYXRzaGlzbmFtZVxcbndoYXRzaXQvU1xcbndoYXRzb2V2ZXJcXG53aGVhbC9TTVxcbndoZWF0L01OXFxud2hlYXRnZXJtXFxud2hlYXRtZWFsXFxud2hlZVxcbndoZWVkbGUvRFJTWkdcXG53aGVlZGxlci9NXFxud2hlZWwvU01EUkdcXG53aGVlbGJhcnJvdy9TTVxcbndoZWVsYmFzZS9TTVxcbndoZWVsY2hhaXIvU01cXG53aGVlbGhvdXNlL01TXFxud2hlZWxpZS9TTVxcbndoZWVsd3JpZ2h0L01TXFxud2hlZXplL0RTTUdcXG53aGVlemlseVxcbndoZWV6aW5lc3MvTVxcbndoZWV6eS9QUlRcXG53aGVsay9TTURcXG53aGVsbS9TREdcXG53aGVscC9TTURHXFxud2hlbi9NU1xcbndoZW5jZVxcbndoZW5ldmVyXFxud2hlbnNvZXZlclxcbndoZXJlL1NNXFxud2hlcmVhYm91dHMvTVxcbndoZXJlYXNcXG53aGVyZWF0XFxud2hlcmVieVxcbndoZXJlZm9yZS9NU1xcbndoZXJlaW5cXG53aGVyZW9mXFxud2hlcmVvblxcbndoZXJlc29ldmVyXFxud2hlcmV0b1xcbndoZXJldXBvblxcbndoZXJldmVyXFxud2hlcmV3aXRoXFxud2hlcmV3aXRoYWwvTVxcbndoZXJyeS9TTVxcbndoZXQvU1xcbndoZXRoZXJcXG53aGV0c3RvbmUvU01cXG53aGV0dGVkXFxud2hldHRpbmdcXG53aGV3XFxud2hleS9NXFxud2hpY2hcXG53aGljaGV2ZXJcXG53aGlmZi9TTURHXFxud2hpZmZsZXRyZWUvTVNcXG53aGlsZS9EU01HXFxud2hpbG9tXFxud2hpbHN0XFxud2hpbS9NU1xcbndoaW1wZXIvTURHU1xcbndoaW1zaWNhbC9ZXFxud2hpbXNpY2FsaXR5L01cXG53aGltc3kvU01cXG53aGluZS9EUlNNWkdcXG53aGluZXIvTVxcbndoaW5nZS9EUlNaR1xcbndoaW5nZWluZ1xcbndoaW5ueS9HRFNNXFxud2hpbnkvUlRcXG53aGlwL01TXFxud2hpcGNvcmQvTVxcbndoaXBsYXNoL01TXFxud2hpcHBlZFxcbndoaXBwZXIvTVNcXG53aGlwcGVyc25hcHBlci9NU1xcbndoaXBwZXQvTVNcXG53aGlwcGluZy9TTVxcbndoaXBwbGV0cmVlL1NNXFxud2hpcHBvb3J3aWxsL01TXFxud2hpcHNhdy9NREdTXFxud2hpci9NU1xcbndoaXJsL1NNREdcXG53aGlybGlnaWcvTVNcXG53aGlybHBvb2wvTVNcXG53aGlybHdpbmQvTVNcXG53aGlybHliaXJkL1NNXFxud2hpcnJlZFxcbndoaXJyaW5nXFxud2hpc2svU01EUlpHXFxud2hpc2tlci9NRFxcbndoaXNrZXJ5XFxud2hpc2tleS9NU1xcbndoaXNreXNcXG53aGlzcGVyL01EUlNaR1xcbndoaXNwZXJlci9NXFxud2hpc3QvTVxcbndoaXN0bGUvTVpHRFJTXFxud2hpc3RsZXIvTVxcbndoaXQvTUROUlNYVEdKXFxud2hpdGUvU1BNXFxud2hpdGViYWl0XFxud2hpdGVib2FyZC9TXFxud2hpdGVjYXAvU01cXG53aGl0ZWZpc2gvTVNcXG53aGl0ZWhlYWQvTVNcXG53aGl0ZWxpc3QvR0RTXFxud2hpdGVuL1pHRFJKXFxud2hpdGVuZXIvTVxcbndoaXRlbmVzcy9NXFxud2hpdGVuaW5nL01cXG53aGl0ZW91dC9TTVxcbndoaXRldGFpbC9NU1xcbndoaXRld2FsbC9TTVxcbndoaXRld2FzaC9NRFNHXFxud2hpdGV3YXRlci9NXFxud2hpdGV5L1NNXFxud2hpdGhlclxcbndoaXRpbmcvTVxcbndoaXRpc2hcXG53aGl0dGxlL1pHRFJTXFxud2hpdHRsZXIvTVxcbndoaXovTVxcbndoaXpraWQvTVxcbndoaXp6YmFuZy9NU1xcbndoaXp6ZWRcXG53aGl6emVzXFxud2hpenppbmdcXG53aG8nZFxcbndobydsbFxcbndobydyZVxcbndobyd2ZVxcbndoby9NXFxud2hvYVxcbndob2R1bml0L01TXFxud2hvZXZlclxcbndob2xlL1NNUFxcbndob2xlZm9vZC9TXFxud2hvbGVncmFpblxcbndob2xlaGVhcnRlZC9ZUFxcbndob2xlaGVhcnRlZG5lc3MvTVxcbndob2xlbWVhbFxcbndob2xlbmVzcy9NXFxud2hvbGVzYWxlL01aR0RSU1xcbndob2xlc2FsZXIvTVxcbndob2xlc29tZS9VUFxcbndob2xlc29tZWx5XFxud2hvbGVzb21lbmVzcy9VTVxcbndob2xld2hlYXRcXG53aG9sbHlcXG53aG9tXFxud2hvbWV2ZXJcXG53aG9tc29ldmVyXFxud2hvb3AvU01EUlpHXFxud2hvb3BlZS9TXFxud2hvb3Blci9NXFxud2hvb3NoL01EU0dcXG53aG9wL1NcXG53aG9wcGVkXFxud2hvcHBlci9TTVxcbndob3BwaW5nXFxud2hvcmUvU01HXFxud2hvcmVob3VzZS9NU1xcbndob3JlaXNoXFxud2hvcmlzaFxcbndob3JsL1NNRFxcbndob3NlXFxud2hvc29cXG53aG9zb2V2ZXJcXG53aHVwL1NcXG53aHVwcGVkXFxud2h1cHBpbmdcXG53aHknZFxcbndoeS9NXFxud2h5c1xcbndpY2svTURSU1pcXG53aWNrZWQvVFBSWVxcbndpY2tlZG5lc3MvTVxcbndpY2tlci9NXFxud2lja2Vyd29yay9NXFxud2lja2V0L1NNXFxud2lkZS9ZVFJQXFxud2lkZW1vdXRoZWRcXG53aWRlbi9TRFJaR1xcbndpZGVuZXIvTVxcbndpZGVuZXNzL01cXG53aWRlc2NyZWVuL01TXFxud2lkZXNwcmVhZFxcbndpZGdldC9TXFxud2lkb3cvU01EUlpHXFxud2lkb3dlci9NXFxud2lkb3dob29kL01cXG53aWR0aC9NXFxud2lkdGhzXFxud2llbGQvU0RSWkdcXG53aWVsZGVyL01cXG53aWVuZXIvU01cXG53aWVuaWUvU01cXG53aWZlL01ZXFxud2lmZWxlc3NcXG53aWcvU01cXG53aWdlb24vTVxcbndpZ2dlZFxcbndpZ2dpbmdcXG53aWdnbGUvRFJTTVpHXFxud2lnZ2xlci9NXFxud2lnZ2x5L1RSXFxud2lnaHQvU01cXG53aWdsZXQvU01cXG53aWd3YWcvU01cXG53aWd3YWdnZWRcXG53aWd3YWdnaW5nXFxud2lnd2FtL1NNXFxud2lraS9NU1xcbndpbGQvTVJZU1RQXFxud2lsZGNhcmQvTVNcXG53aWxkY2F0L01TXFxud2lsZGNhdHRlZFxcbndpbGRjYXR0ZXIvTVNcXG53aWxkY2F0dGluZ1xcbndpbGRlYmVlc3QvTVNcXG53aWxkZXJuZXNzL01TXFxud2lsZGZpcmUvTVNcXG53aWxkZmxvd2VyL1NNXFxud2lsZGZvd2wvTVxcbndpbGRsaWZlL01cXG53aWxkbmVzcy9NXFxud2lsZHMvTVxcbndpbGUvTUdEU1xcbndpbGluZXNzL01cXG53aWxsL01EU1xcbndpbGxmdWwvUFlcXG53aWxsZnVsbmVzcy9NXFxud2lsbGllcy9NXFxud2lsbGluZy9VUFlcXG53aWxsaW5nbmVzcy9VTVxcbndpbGxpd2F3L01TXFxud2lsbG93L1NNXFxud2lsbG93eVxcbndpbGxwb3dlci9NXFxud2lsbHkvU1xcbndpbHQvTURTR1xcbndpbHkvUlRQXFxud2ltcC9NRFNHXFxud2ltcGlzaFxcbndpbXBsZS9EU01HXFxud2ltcHkvUlRcXG53aW4vU0dNRFxcbndpbmNlL0RTTUdcXG53aW5jaC9NRFNHXFxud2luZCdzXFxud2luZC9VQVNHXFxud2luZGJhZy9TTVxcbndpbmRibG93blxcbndpbmRicmVhay9TWk1SXFxud2luZGJyZWFrZXIvTVxcbndpbmRidXJuL01EXFxud2luZGNoZWF0ZXIvU1xcbndpbmRjaGlsbC9NXFxud2luZGVkXFxud2luZGVyL1NNXFxud2luZGZhbGwvTVNcXG53aW5kZmxvd2VyL01TXFxud2luZGlseVxcbndpbmRpbmVzcy9NXFxud2luZGluZydzXFxud2luZGphbW1lci9TTVxcbndpbmRsYXNzL01TXFxud2luZGxlc3NcXG53aW5kbWlsbC9NREdTXFxud2luZG93L1NNREdcXG53aW5kb3dsZXNzXFxud2luZG93cGFuZS9TTVxcbndpbmRvd3NpbGwvU01cXG53aW5kcGlwZS9NU1xcbndpbmRwcm9vZlxcbndpbmRyb3cvU01cXG53aW5kc2NyZWVuL1NNXFxud2luZHNoaWVsZC9TTVxcbndpbmRzb2NrL01TXFxud2luZHN0b3JtL01TXFxud2luZHN1cmYvWkdEUlNcXG53aW5kc3VyZmVyL01cXG53aW5kc3VyZmluZy9NXFxud2luZHN3ZXB0XFxud2luZHVwL1NNXFxud2luZHdhcmQvTVxcbndpbmR5L1JUUFxcbndpbmUvTVNcXG53aW5lZ2xhc3MvTVNcXG53aW5lZ3Jvd2VyL01TXFxud2luZW1ha2VyL01TXFxud2luZXJ5L1NNXFxud2luZy9NRFJaR1xcbndpbmdkaW5nL01TXFxud2luZ2xlc3NcXG53aW5nbGlrZVxcbndpbmdudXQvU01cXG53aW5nc3Bhbi9NU1xcbndpbmdzcHJlYWQvU01cXG53aW5ndGlwL1NNXFxud2luay9NRFJTWkdcXG53aW5rZXIvTVxcbndpbmtsZS9EU01HXFxud2lubmFibGUvVVxcbndpbm5lci9TTVxcbndpbm5pbmcvTVlTXFxud2lubm93L1pHU0RSXFxud2lubm93ZXIvTVxcbndpbm8vTVNcXG53aW5zb21lL1lUUlBcXG53aW5zb21lbmVzcy9NXFxud2ludGVyL0dTTURcXG53aW50ZXJncmVlbi9NXFxud2ludGVyaXplL0dEU1xcbndpbnRlcnRpbWUvTVxcbndpbnRyeS9UUlxcbndpbnkvUlRcXG53aXBlL01aR0RSU1xcbndpcGVyL01cXG53aXJlJ3NcXG53aXJlL0FHRFNcXG53aXJlZC9TXFxud2lyZWhhaXIvTVNcXG53aXJlbGVzcy9NU1xcbndpcmV0YXAvTVNcXG53aXJldGFwcGVkXFxud2lyZXRhcHBlci9TTVxcbndpcmV0YXBwaW5nL01cXG53aXJpbmVzcy9NXFxud2lyaW5nL01cXG53aXJ5L1JUUFxcbndpc2RvbS9NXFxud2lzZS9NWVRHRFJTXFxud2lzZWFjcmUvU01cXG53aXNlY3JhY2svTURTR1xcbndpc2VndXkvU1xcbndpc2gvTURSU1pHXFxud2lzaGJvbmUvU01cXG53aXNoZXIvTVxcbndpc2hmdWwvWVxcbndpc2hsaXN0J3NcXG53aXNwL01TXFxud2lzcHkvUlRcXG53aXN0XFxud2lzdGVyaWEvU01cXG53aXN0ZnVsL1lQXFxud2lzdGZ1bG5lc3MvTVxcbndpdC9TTVxcbndpdGNoL01EU0dcXG53aXRjaGNyYWZ0L01cXG53aXRjaGVyeS9NXFxud2l0aFxcbndpdGhhbFxcbndpdGhkcmF3L1NHXFxud2l0aGRyYXdhbC9NU1xcbndpdGhkcmF3blxcbndpdGhkcmV3XFxud2l0aGUvRFJTTVpHXFxud2l0aGVyL0pHRFxcbndpdGhlcmluZy9ZXFxud2l0aGVycy9NXFxud2l0aGhlbGRcXG53aXRoaG9sZC9TR1xcbndpdGhob2xkaW5nL01cXG53aXRoaW4vTVxcbndpdGhvdXRcXG53aXRoc3RhbmQvR1NcXG53aXRoc3Rvb2RcXG53aXRsZXNzL1BZXFxud2l0bGVzc25lc3MvTVxcbndpdG5lc3MvTURTR1xcbndpdHMvTVxcbndpdHRlZFxcbndpdHRlci9TR0RcXG53aXR0aWNpc20vU01cXG53aXR0aWx5XFxud2l0dGluZXNzL01cXG53aXR0aW5nL1VZXFxud2l0dHkvUlBUXFxud2l2ZS9HRFNcXG53aXpcXG53aXphcmQvU01ZXFxud2l6YXJkcnkvTVxcbndpemVuZWRcXG53ay9ZXFxud29hZC9NXFxud29iYmxlL01HRFNcXG53b2JibGluZXNzL01cXG53b2JibHkvUlRQXFxud29kZ2UvU1xcbndvZS9TTVxcbndvZWJlZ29uZVxcbndvZWZ1bC9ZUFxcbndvZWZ1bGxlclxcbndvZWZ1bGxlc3RcXG53b2VmdWxuZXNzL01cXG53b2cvU1xcbndvay9TTU5cXG53b2tlXFxud29sZC9NU1xcbndvbGYvTURTR1xcbndvbGZob3VuZC9TTVxcbndvbGZpc2hcXG53b2xmcmFtL01cXG53b2x2ZXJpbmUvU01cXG53b2x2ZXNcXG53b21hbi9NXFxud29tYW5ob29kL01cXG53b21hbmlzaFxcbndvbWFuaXplL0RSU1pHXFxud29tYW5pemVyL01cXG53b21hbmtpbmQvTVxcbndvbWFubGlrZS9NXFxud29tYW5saW5lc3MvTVxcbndvbWFubHkvUlBUXFxud29tYi9NU1xcbndvbWJhdC9NU1xcbndvbWJsZS9TXFxud29tZW4vTVxcbndvbWVuZm9say9TTVxcbndvbWVuZm9sa3MvTVxcbndvbid0XFxud29uL01cXG53b25kZXIvTURHTFNcXG53b25kZXJmdWwvWVBcXG53b25kZXJmdWxuZXNzL01cXG53b25kZXJpbmcvWVxcbndvbmRlcmxhbmQvTVNcXG53b25kZXJtZW50L01cXG53b25kcm91cy9ZXFxud29uay9NU1xcbndvbmt5L1RSXFxud29udC9NRFxcbndvbnRlZC9VXFxud29vL1NaR0RSXFxud29vZC9NRE5TR1xcbndvb2RiaW5lL01cXG53b29kYmxvY2svTVNcXG53b29kY2FydmVyL01TXFxud29vZGNhcnZpbmcvU01cXG53b29kY2h1Y2svTVNcXG53b29kY29jay9TTVxcbndvb2RjcmFmdC9NXFxud29vZGN1dC9TTVxcbndvb2RjdXR0ZXIvU01cXG53b29kY3V0dGluZy9NXFxud29vZGVuL1JZVFBcXG53b29kZW5uZXNzL01cXG53b29kaW5lc3MvTVxcbndvb2RsYW5kL1NNXFxud29vZGxpY2VcXG53b29kbG90L1NNXFxud29vZGxvdXNlXFxud29vZG1hbi9NXFxud29vZG1lblxcbndvb2RwZWNrZXIvTVNcXG53b29kcGlsZS9TTVxcbndvb2RzL01cXG53b29kc2hlZC9TTVxcbndvb2RzaW5lc3MvTVxcbndvb2RzbWFuL01cXG53b29kc21lblxcbndvb2RzeS9SVFBcXG53b29kd2luZC9NU1xcbndvb2R3b3JrL01SWkdcXG53b29kd29ya2VyL01cXG53b29kd29ya2luZy9NXFxud29vZHdvcm0vU1xcbndvb2R5L1RQUlNNXFxud29vZXIvTVxcbndvb2YvTURSU1pHXFxud29vZmVyL01cXG53b29sL01OWFxcbndvb2xlbi9NXFxud29vbGdhdGhlcmluZy9NXFxud29vbGluZXNzXFxud29vbGxpbmVzcy9NXFxud29vbGx5L1JTTVBUXFxud29vemlseVxcbndvb3ppbmVzcy9NXFxud29venkvVFJQXFxud29wL1MhXFxud29yZCdzXFxud29yZC9BRFNHXFxud29yZGFnZS9NXFxud29yZGJvb2svU01cXG53b3JkaWx5XFxud29yZGluZXNzL01cXG53b3JkaW5nL1NNXFxud29yZGxlc3MvWVxcbndvcmRwbGF5L01cXG53b3Jkc21pdGhcXG53b3Jkc21pdGhzXFxud29yZHkvVFBSXFxud29yZVxcbndvcmsnc1xcbndvcmsvQURKU0dcXG53b3JrYWJsZS9VXFxud29ya2FkYXlcXG53b3JrYWhvbGljL1NNXFxud29ya2Fyb3VuZC9TXFxud29ya2Jhc2tldC9TXFxud29ya2JlbmNoL01TXFxud29ya2Jvb2svTVNcXG53b3JrZGF5L1NNXFxud29ya2VyL01TXFxud29ya2ZhcmUvTVxcbndvcmtmbG93L01TXFxud29ya2ZvcmNlL01cXG53b3JraG9yc2UvU01cXG53b3JraG91c2UvU01cXG53b3JraW5nJ3NcXG53b3JraW5nbWFuL01cXG53b3JraW5nbWVuXFxud29ya2luZ3MvTVxcbndvcmtpbmd3b21hbi9NXFxud29ya2luZ3dvbWVuXFxud29ya2xvYWQvTVNcXG53b3JrbWFuL01cXG53b3JrbWFubGlrZVxcbndvcmttYW5zaGlwL01cXG53b3JrbWF0ZS9TXFxud29ya21lblxcbndvcmtvdXQvU01cXG53b3JrcGxhY2UvTVNcXG53b3Jrcm9vbS9NU1xcbndvcmtzL01cXG53b3Jrc2hlZXQvTVNcXG53b3Jrc2hvcC9NU1xcbndvcmtzaHlcXG53b3Jrc2l0ZS9TXFxud29ya3NwYWNlXFxud29ya3N0YXRpb24vTVNcXG53b3JrdGFibGUvTVNcXG53b3JrdG9wL1NcXG53b3JrdXAvTVNcXG53b3Jrd2Vlay9TTVxcbndvcmxkL1NNXFxud29ybGRsaWVyXFxud29ybGRsaW5lc3MvVU1cXG53b3JsZGx5L1VUUFxcbndvcmxkdmlldy9TTVxcbndvcmxkd2lkZVxcbndvcm0vTURTR1xcbndvcm1ob2xlL01TXFxud29ybXdvb2QvTVxcbndvcm15L1RSXFxud29ybi9VXFxud29ycmllZC9ZXFxud29ycmllci9NXFxud29ycmltZW50L01cXG53b3JyaXNvbWVcXG53b3JyeS9aR0RSU01KXFxud29ycnlpbmcvWVxcbndvcnJ5d2FydC9TTVxcbndvcnNlL01cXG53b3JzZW4vRFNHXFxud29yc2hpcC9aR1NNRFJcXG53b3JzaGlwZXIvTVxcbndvcnNoaXBmdWxcXG53b3JzdC9TR01EXFxud29yc3RlZC9NXFxud29ydC9NXFxud29ydGgvTVxcbndvcnRoaWVzXFxud29ydGhpbHkvVVxcbndvcnRoaW5lc3MvVU1cXG53b3J0aGxlc3MvUFlcXG53b3J0aGxlc3NuZXNzL01cXG53b3J0aHdoaWxlXFxud29ydGh5J3NcXG53b3J0aHkvVVBSVFxcbndvdFxcbndvdGNoYVxcbndvdWxkJ3ZlXFxud291bGQvU1xcbndvdWxkbid0XFxud291bGRzdFxcbndvdW5kL1NHTURSXFxud292ZS9BXFxud292ZW4vQVVcXG53b3cvU0dNRFxcbndwbVxcbndyYWNrL0dTTURcXG53cmFpdGgvTVxcbndyYWl0aHNcXG53cmFuZ2xlL0RSU01aR0pcXG53cmFuZ2xlci9NXFxud3JhcCdzXFxud3JhcC9VU1xcbndyYXBhcm91bmQvU01cXG53cmFwcGVkL1VcXG53cmFwcGVyL1NNXFxud3JhcHBpbmcvTVNcXG53cmFzc2UvTVNcXG53cmF0aC9NXFxud3JhdGhmdWwvWVxcbndyZWFrL1NHRFxcbndyZWF0aC9NRFNHXFxud3JlYXRoZVxcbndyZWF0aHNcXG53cmVjay9TWkdNRFJcXG53cmVja2FnZS9NXFxud3JlY2tlci9NXFxud3Jlbi9NU1xcbndyZW5jaC9NRFNHXFxud3Jlc3QvU0dNRFxcbndyZXN0bGUvTVpHRFJTXFxud3Jlc3RsZXIvTVxcbndyZXN0bGluZy9NXFxud3JldGNoL01TXFxud3JldGNoZWQvVFBSWVxcbndyZXRjaGVkbmVzcy9NXFxud3JpZ2dsZS9NWkdEUlNcXG53cmlnZ2xlci9NXFxud3JpZ2dseVxcbndyaWdodC9NU1xcbndyaW5nL1NaR01SXFxud3Jpbmdlci9NXFxud3JpbmtsZS9NR0RTXFxud3JpbmtsZWQvVVxcbndyaW5rbHkvVFJTTVxcbndyaXN0L1NNXFxud3Jpc3RiYW5kL01TXFxud3Jpc3R3YXRjaC9NU1xcbndyaXQvTVJCSlNaR1xcbndyaXRlL1NcXG53cml0ZXIvTVxcbndyaXRoZS9NR0RTXFxud3JpdGluZy9NXFxud3JpdHRlbi9BVVxcbndyb25nL1NUR01QRFJZXFxud3Jvbmdkb2VyL1NNXFxud3Jvbmdkb2luZy9TTVxcbndyb25nZnVsL1BZXFxud3JvbmdmdWxuZXNzL01cXG53cm9uZ2hlYWRlZC9ZUFxcbndyb25naGVhZGVkbmVzcy9NXFxud3JvbmduZXNzL01cXG53cm90ZS9BXFxud3JvdGhcXG53cm91Z2h0XFxud3J1bmdcXG53cnkvWVxcbndyeWVyXFxud3J5ZXN0XFxud3J5bmVzcy9NXFxud3RcXG53dW5kZXJraW5kL1NcXG53dXJzdC9TTVxcbnd1c3MvTVNcXG53dXNzeS9SU01UXFxueFxcbnhjaVxcbnhjaWlcXG54Y2l2XFxueGNpeFxcbnhjdmlcXG54Y3ZpaVxcbnhlbm9uL01cXG54ZW5vcGhvYmUvTVNcXG54ZW5vcGhvYmlhL01cXG54ZW5vcGhvYmljXFxueGVyb2dyYXBoaWNcXG54ZXJvZ3JhcGh5L01cXG54ZXJveC9NRFNHXFxueGkvU01cXG54aWlcXG54aWlpXFxueGl2XFxueGl4XFxueG9yXFxueHJlZi9TXFxueHRlcm0vTVxcbnh2XFxueHZpXFxueHZpaVxcbnh2aWlpXFxueHhcXG54eGlcXG54eGlpXFxueHhpaWlcXG54eGl2XFxueHhpeFxcbnh4dlxcbnh4dmlcXG54eHZpaVxcbnh4dmlpaVxcbnh4eFxcbnh4eGlcXG54eHhpaVxcbnh4eGlpaVxcbnh4eGl2XFxueHh4aXhcXG54eHh2XFxueHh4dmlcXG54eHh2aWlcXG54eHh2aWlpXFxueHlsZW0vTVxcbnh5bGVuZVxcbnh5bG9waG9uZS9TTVxcbnh5bG9waG9uaXN0L01TXFxueSdhbGxcXG55L0ZcXG55YVxcbnlhY2h0L1NNREdcXG55YWNodGluZy9NXFxueWFjaHRzbWFuL01cXG55YWNodHNtZW5cXG55YWNodHN3b21hbi9NXFxueWFjaHRzd29tZW5cXG55YWhvby9TTVxcbnlhay9TTVxcbnlha2tlZFxcbnlha2tpbmdcXG55YW0vU01cXG55YW1tZXIvU1pHTURSXFxueWFtbWVyZXIvTVxcbnlhbmcvTVxcbnlhbmsvTURTR1xcbnlhcC9TTVxcbnlhcHBlZFxcbnlhcHBpbmdcXG55YXJkL01TXFxueWFyZGFnZS9NU1xcbnlhcmRhcm0vTVNcXG55YXJkbWFuL01cXG55YXJkbWFzdGVyL01TXFxueWFyZG1lblxcbnlhcmRzdGljay9NU1xcbnlhcm11bGtlL1NNXFxueWFybi9NU1xcbnlhcnJvdy9NXFxueWFzaG1hay9TXFxueWF3L1NHTURcXG55YXdsL01TXFxueWF3bi9NRFJTWkdcXG55YXduZXIvTVxcbnlhd3MvTVxcbnlkXFxueWUvUlNUXFxueWVhL1NNXFxueWVhaC9NXFxueWVhaHNcXG55ZWFyL01ZU1xcbnllYXJib29rL01TXFxueWVhcmxpbmcvTVNcXG55ZWFybG9uZ1xcbnllYXJseS9TTVxcbnllYXJuL0dTSkRcXG55ZWFybmluZy9NXFxueWVhc3QvU01cXG55ZWFzdHkvUlRcXG55ZWdnL01TXFxueWVsbC9NRFNHXFxueWVsbG93L01EUlRHUFNcXG55ZWxsb3doYW1tZXIvU1xcbnllbGxvd2lzaFxcbnllbGxvd25lc3MvTVxcbnllbGxvd3lcXG55ZWxwL01EU0dcXG55ZW4vU01cXG55ZW9tYW4vTVxcbnllb21hbnJ5L01cXG55ZW9tZW5cXG55ZXAvU01cXG55ZXMvTVNcXG55ZXNoaXZhL1NNXFxueWVzc2VkXFxueWVzc2luZ1xcbnllc3RlcmRheS9NU1xcbnllc3RlcnllYXIvTVxcbnlldFxcbnlldGkvTVNcXG55ZXcvU01cXG55aWQvU1xcbnlpZWxkL0pTR01EXFxueWlrZXNcXG55aW4vTVxcbnlpcC9TTVxcbnlpcGVcXG55aXBwZWRcXG55aXBwZWVcXG55aXBwaW5nXFxueW9cXG55b2IvU1xcbnlvYmJvL1NcXG55b2RlbC9TTURSWkdcXG55b2RlbGVyL01cXG55b2dhL01cXG55b2dpL01TXFxueW9naWNcXG55b2d1cnQvU01cXG55b2tlJ3NcXG55b2tlL1VHRFNcXG55b2tlbC9TTVxcbnlvbGsvTURTXFxueW9uXFxueW9uZGVyXFxueW9ua3NcXG55b3JlL01cXG55b3UnZFxcbnlvdSdsbFxcbnlvdSdyZVxcbnlvdSd2ZVxcbnlvdS9TTUhcXG55b3VuZy9UTVJcXG55b3VuZ2lzaFxcbnlvdW5nc3Rlci9NU1xcbnlvdXIvU1xcbnlvdXJzZWxmXFxueW91cnNlbHZlc1xcbnlvdXRoL01cXG55b3V0aGZ1bC9ZUFxcbnlvdXRoZnVsbmVzcy9NXFxueW91dGhzXFxueW93XFxueW93bC9NRFNHXFxueXIvU1xcbnl0dGVyYml1bS9NXFxueXR0cml1bS9NXFxueXVhbi9NXFxueXVjY2EvU01cXG55dWNrXFxueXVja3kvVFJcXG55dWsvU01cXG55dWtrZWRcXG55dWtraW5nXFxueXVra3lcXG55dWxlL01cXG55dWxldGlkZS9NXFxueXVtXFxueXVtbXkvVFJcXG55dXAvU01cXG55dXBwaWUvTVNcXG55dXBwaWZ5L0dEU1xcbnl1cnQvTVNcXG56L0ROWFRHSlxcbnphbmluZXNzL01cXG56YW55L1JTTVBUXFxuemFwL1NNXFxuemFwcGVkXFxuemFwcGVyL01TXFxuemFwcGluZ1xcbnphcHB5XFxuemVhbC9NXFxuemVhbG90L01TXFxuemVhbG90cnkvTVxcbnplYWxvdXMvWVBcXG56ZWFsb3VzbmVzcy9NXFxuemVicmEvU01cXG56ZWJ1L01TXFxuemVkL1NNXFxuemVpdGdlaXN0L1NNXFxuemVuaXRoL01cXG56ZW5pdGhzXFxuemVubmVkXFxuemVvbGl0ZS9TXFxuemVwaHlyL01TXFxuemVwcGVsaW4vTVNcXG56ZXJvL01ESFNHXFxuemVyb2VzXFxuemVzdC9NU1xcbnplc3RmdWwvWVBcXG56ZXN0ZnVsbmVzcy9NXFxuemVzdHkvUlRcXG56ZXRhL01TXFxuemlnemFnL1NNXFxuemlnemFnZ2VkXFxuemlnemFnZ2luZ1xcbnppbGNoL01cXG56aWxsaW9uL01TXFxuemluYy9NU1xcbnppbmNrZWRcXG56aW5ja2luZ1xcbnppbmUvU1xcbnppbmZhbmRlbC9NXFxuemluZy9NRFJaR1xcbnppbmdlci9NXFxuemluZ3kvUlRcXG56aW5uaWEvTVNcXG56aXAnc1xcbnppcC9VU1xcbnppcHBlZC9VXFxuemlwcGVyL01ER1NcXG56aXBwaW5nL1VcXG56aXBweS9UUlxcbnppcmNvbi9NU1xcbnppcmNvbml1bS9NXFxueml0L1NNXFxueml0aGVyL01TXFxuemxvdHkvU01cXG56bG90eXNcXG56b2RpYWMvTVNcXG56b2RpYWNhbFxcbnpvbWJpZS9NU1xcbnpvbmFsL1lcXG56b25lJ3NcXG56b25lL0FHRFNcXG56b25pbmcvTVxcbnpvbmtlZFxcbnpvby9TTVxcbnpvb2tlZXBlci9TTVxcbnpvb2xvZ2ljYWwvWVxcbnpvb2xvZ2lzdC9TTVxcbnpvb2xvZ3kvTVxcbnpvb20vTURTR1xcbnpvb3BoeXRlL1NNXFxuem9vcGh5dGljXFxuem9vcGxhbmt0b25cXG56b3JjaFxcbnpvc3RlclxcbnpvdW5kc1xcbnp1Y2NoaW5pL01TXFxuendpZWJhY2svTVxcbnp5ZGVjby9NXFxuenlnb3RlL1NNXFxuenlnb3RpY1xcbnp5bXVyZ3kvTVwifSl9LHBlcnNvbmFsOnQuam9pbihcIlxcblwiKSxtYXg6NX07cmV0dXJuIE9uKCkudXNlKFNhKS51c2UoR2EsbykudXNlKGNlKS51c2UoaWUpLnVzZSh5YSx7aWdub3JlOltcImRpc2FibGVkXCIsXCJob3N0XCIsXCJob3N0c1wiLFwiaW52YWxpZFwiLFwianVzdFwiXX0pLnVzZShrYSkudXNlKENhKS51c2UoVGEpLnVzZShqZSx7YWdlOjE5fSkudXNlKFhlKS51c2Uob2EpLnVzZShKbikucHJvY2VzcyhuKS50aGVuKChmdW5jdGlvbihuKXtyZXR1cm4gbn0pKX1mdW5jdGlvbiBMYShlKXt2YXIgYSxpPVphKCgwLG4udXNlU3RhdGUpKHt9KSwyKSxyPWlbMF0sdD1pWzFdLG89WmEoKDAsbi51c2VTdGF0ZSkoW10pLDIpLE09b1swXSxzPW9bMV0sbD1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGM9bFswXSxTPWxbMV0sdT1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGQ9dVswXSxtPXVbMV0scD1aYSgoMCxuLnVzZVN0YXRlKSgpLDIpLGg9cFswXSxnPXBbMV0seT1aYSgoMCxuLnVzZVN0YXRlKSgwKSwyKSxiPXlbMF0sRD15WzFdLEc9ZS5zYW1wbGVUZXh0LHc9ZS5zZXRTYW1wbGVUZXh0LHY9ZS51cGRhdGVUaW1lcixrPXZvaWQgMD09PXY/MzAwOnYsUj1lLnBsYWNlaG9sZGVyLFk9dm9pZCAwPT09Uj9cIlByb3ZpZGUgc29tZSB0ZXh0IHRvIGdldCBzdGFydGVkXCI6UixBPWUuY3VzdG9tRGljdGlvbmFyeSxQPWUuYWRkVG9EaWN0aW9uYXJ5LEM9ZS5vcGVuTGlua3NJbk5ld1RhYixUPXZvaWQgMCE9PUMmJkM7KDAsbi51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBTKHNldFRpbWVvdXQoTmEocmVnZW5lcmF0b3JSdW50aW1lLm1hcmsoKGZ1bmN0aW9uIG4oKXtyZXR1cm4gcmVnZW5lcmF0b3JSdW50aW1lLndyYXAoKGZ1bmN0aW9uKG4pe2Zvcig7Oylzd2l0Y2gobi5wcmV2PW4ubmV4dCl7Y2FzZSAwOnJldHVybiBuLnQwPXQsbi5uZXh0PTMsamEoRyxBKTtjYXNlIDM6bi50MT1uLnNlbnQsKDAsbi50MCkobi50MSk7Y2FzZSA1OmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksaykpLGZ1bmN0aW9uKCl7cmV0dXJuIGNsZWFyVGltZW91dChjKX19KSxbR10pLCgwLG4udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZyghMCksbShzZXRUaW1lb3V0KE5hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpnKCExKTtjYXNlIDE6Y2FzZVwiZW5kXCI6cmV0dXJuIG4uc3RvcCgpfX0pLG4pfSkpKSw0ZTMpKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoZCl9fSksW0ddKTt2YXIgeCx6LEUsQixOPWZ1bmN0aW9uKG4pe3ZhciBlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgZT0xO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspe3ZhciBhPW51bGwhPWFyZ3VtZW50c1tlXT9hcmd1bWVudHNbZV06e307ZSUyP3phKE9iamVjdChhKSwhMCkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7RWEobixlLGFbZV0pfSkpOk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKG4sT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoYSkpOnphKE9iamVjdChhKSkuZm9yRWFjaCgoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGEsZSkpfSkpfXJldHVybiBufSh7fSxyKTtlLm1lc3NhZ2VzPXIubWVzc2FnZXMuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lIT09bn0pKSx0KGUpO3ZhciBhPUZhKE0pO2EucHVzaChuKSxzKGEpfSxaPWZ1bmN0aW9uKCl7dmFyIG4sZT0obnVsbD09cnx8bnVsbD09PShuPXIubWVzc2FnZXMpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmxlbmd0aCk+MCxhPSExO2lmKGUpcmV0dXJuIHIubWVzc2FnZXMuZm9yRWFjaCgoZnVuY3Rpb24obil7TS5zb21lKChmdW5jdGlvbihlKXtuLm5hbWUsYT0hMH0pKX0pKSxhfSxGPWZ1bmN0aW9uKG4sZSl7dmFyIGE7aWYobnVsbD09PShhPXdpbmRvdy5sb2NhbFN0b3JhZ2UpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSl7dmFyIGk9SlNPTi5wYXJzZSh3aW5kb3cubG9jYWxTdG9yYWdlLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeSk7aS5wdXNoKG4pLHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeVwiLEpTT04uc3RyaW5naWZ5KGkpKX1lbHNlIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeVwiLEpTT04uc3RyaW5naWZ5KFtuXSkpO04oZSl9O3JldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFooKSwobnVsbD09cnx8bnVsbD09PShhPXIubWVzc2FnZXMpfHx2b2lkIDA9PT1hP3ZvaWQgMDphLmxlbmd0aCk+MD9uLmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWxpc3RcIn0sKG51bGw9PXJ8fG51bGw9PT0oQj1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09Qj92b2lkIDA6Qi5sZW5ndGgpPjA/ci5tZXNzYWdlcy5tYXAoKGZ1bmN0aW9uKGUsYSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChmLHtrZXk6YSxzdWdnZXN0aW9uOmUsc291cmNlVGV4dDpyLnZhbHVlLHNhbXBsZVRleHQ6RyxzZXRTYW1wbGVUZXh0OncscmVtb3ZlU3VnZ2VzdGlvbjpOLGRpc21pc3NlZFN1Z2dlc3Rpb25zOk0saXNBY3RpdmU6YT09PWIsb25DbGljazpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtEKG4pfShhKX0sYWRkVG9EaWN0aW9uYXJ5OlB8fEYsb3BlbkxpbmtzSW5OZXdUYWI6VH0pfSkpOm4uY3JlYXRlRWxlbWVudChcImg0XCIsbnVsbCxcIk5vIHN1Z2dlc3Rpb25zIHRvIHNob3cuLi5cIikpOm4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZVwifSwoej1cIlwiIT09RyxFPShudWxsPT1yfHxudWxsPT09KHg9ci5tZXNzYWdlcyl8fHZvaWQgMD09PXg/dm9pZCAwOngubGVuZ3RoKT4wLHo/aD9uLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7Y2xhc3NOYW1lOlwibG9hZGluZy1zcGlubmVyXCIsc3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQQ0V0TFNCQ2VTQlRZVzBnU0dWeVltVnlkQ0FvUUhOb1pYSmlLU3dnWm05eUlHVjJaWEo1YjI1bExpQk5iM0psSUVBZ2FIUjBjRG92TDJkdmJ5NW5iQzgzUVVwNllrd2dMUzArQ2p4emRtY2dkMmxrZEdnOUlqTTRJaUJvWldsbmFIUTlJak00SWlCMmFXVjNRbTk0UFNJd0lEQWdNemdnTXpnaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NpQWdJQ0E4WkdWbWN6NEtJQ0FnSUNBZ0lDQThiR2x1WldGeVIzSmhaR2xsYm5RZ2VERTlJamd1TURReUpTSWdlVEU5SWpBbElpQjRNajBpTmpVdU5qZ3lKU0lnZVRJOUlqSXpMamcyTlNVaUlHbGtQU0poSWo0S0lDQWdJQ0FnSUNBZ0lDQWdQSE4wYjNBZ2MzUnZjQzFqYjJ4dmNqMGlJemt5T1dGaE1TSWdjM1J2Y0MxdmNHRmphWFI1UFNJd0lpQnZabVp6WlhROUlqQWxJaTgrQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHpkRzl3SUhOMGIzQXRZMjlzYjNJOUlpTTVNamxoWVRFaUlITjBiM0F0YjNCaFkybDBlVDBpTGpZek1TSWdiMlptYzJWMFBTSTJNeTR4TkRZbElpOCtDaUFnSUNBZ0lDQWdJQ0FnSUR4emRHOXdJSE4wYjNBdFkyOXNiM0k5SWlNNU1qbGhZVEVpSUc5bVpuTmxkRDBpTVRBd0pTSXZQZ29nSUNBZ0lDQWdJRHd2YkdsdVpXRnlSM0poWkdsbGJuUStDaUFnSUNBOEwyUmxabk0rQ2lBZ0lDQThaeUJtYVd4c1BTSnViMjVsSWlCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaVBnb2dJQ0FnSUNBZ0lEeG5JSFJ5WVc1elptOXliVDBpZEhKaGJuTnNZWFJsS0RFZ01Ta2lQZ29nSUNBZ0lDQWdJQ0FnSUNBOGNHRjBhQ0JrUFNKTk16WWdNVGhqTUMwNUxqazBMVGd1TURZdE1UZ3RNVGd0TVRnaUlHbGtQU0pQZG1Gc0xUSWlJSE4wY205clpUMGlkWEpzS0NOaEtTSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlqNEtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lEeGhibWx0WVhSbFZISmhibk5tYjNKdENpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdZWFIwY21saWRYUmxUbUZ0WlQwaWRISmhibk5tYjNKdElnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFI1Y0dVOUluSnZkR0YwWlNJS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQm1jbTl0UFNJd0lERTRJREU0SWdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lIUnZQU0l6TmpBZ01UZ2dNVGdpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1pIVnlQU0l3TGpWeklnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSEpsY0dWaGRFTnZkVzUwUFNKcGJtUmxabWx1YVhSbElpQXZQZ29nSUNBZ0lDQWdJQ0FnSUNBOEwzQmhkR2crQ2lBZ0lDQWdJQ0FnSUNBZ0lEeGphWEpqYkdVZ1ptbHNiRDBpSTJabVppSWdZM2c5SWpNMklpQmplVDBpTVRnaUlISTlJakVpUGdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnUEdGdWFXMWhkR1ZVY21GdWMyWnZjbTBLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCaGRIUnlhV0oxZEdWT1lXMWxQU0owY21GdWMyWnZjbTBpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIbHdaVDBpY205MFlYUmxJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUdaeWIyMDlJakFnTVRnZ01UZ2lDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnZEc4OUlqTTJNQ0F4T0NBeE9DSUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JrZFhJOUlqQXVOWE1pQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2NtVndaV0YwUTI5MWJuUTlJbWx1WkdWbWFXNXBkR1VpSUM4K0NpQWdJQ0FnSUNBZ0lDQWdJRHd2WTJseVkyeGxQZ29nSUNBZ0lDQWdJRHd2Wno0S0lDQWdJRHd2Wno0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcImxvYWRpbmcuLi5cIn0pOnomJiFFfHxaKCkmJno/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxuLmNyZWF0ZUVsZW1lbnQoXCJoM1wiLHtjbGFzc05hbWU6XCJlbXB0eS1zdGF0ZS1oZWFkaW5nXCJ9LFwiTm8gaXNzdWVzIGZvdW5kXCIpLG4uY3JlYXRlRWxlbWVudChcInBcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtZGVzY3JpcHRpb25cIn0sXCJXZSByYW4gc2V2ZXJhbCBjaGVja3Mgb24geW91ciB0ZXh0IGFuZCBmb3VuZCBubyB3cml0aW5nIGlzc3Vlcy4gVGhpbmsgd2UgbWlzc2VkIHNvbWV0aGluZz8gXCIsXCIgXCIsbi5jcmVhdGVFbGVtZW50KFwiYVwiLHtocmVmOlwiaHR0cHM6Ly9uZXdyZWxpYy5zbGFjay5jb20vYXJjaGl2ZXMvQzAxQTc2UDNEUFVcIix0YXJnZXQ6VD9cIl9ibGFua1wiOlwiX3NlbGZcIn0sXCJMZXQgdXMga25vd1wiKSxcIi5cIikpOnZvaWQgMDpuLmNyZWF0ZUVsZW1lbnQoXCJoM1wiLHtjbGFzc05hbWU6XCJlbXB0eS1zdGF0ZS1oZWFkaW5nXCJ9LFkpKSkpfUxhLnByb3BUeXBlcz17c2FtcGxlVGV4dDpyKCkuc3RyaW5nLHBsYWNlaG9sZGVyOnIoKS5zdHJpbmcsc2V0U2FtcGxlVGV4dDpyKCkuZnVuYyx1cGRhdGVUaW1lcjpyKCkubnVtYmVyLGN1c3RvbURpY3Rpb25hcnk6cigpLmFycmF5LGFkZFRvRGljdGlvbmFyeTpyKCkuZnVuYyxvcGVuTGlua3NJbk5ld1RhYjpyKCkuYm9vbH07Y29uc3QgcWE9TGF9KSgpLG1vZHVsZS5leHBvcnRzPWl9KSgpOyIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBudW1iZXJJc05hTiA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IHZhbHVlO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpcyhhLCBiKSB7XG5cdGlmIChhID09PSAwICYmIGIgPT09IDApIHtcblx0XHRyZXR1cm4gMSAvIGEgPT09IDEgLyBiO1xuXHR9XG5cdGlmIChhID09PSBiKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKG51bWJlcklzTmFOKGEpICYmIG51bWJlcklzTmFOKGIpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZChnZXRQb2x5ZmlsbCgpLCBPYmplY3QpO1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiB0eXBlb2YgT2JqZWN0LmlzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmlzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltT2JqZWN0SXMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShPYmplY3QsIHsgaXM6IHBvbHlmaWxsIH0sIHtcblx0XHRpczogZnVuY3Rpb24gdGVzdE9iamVjdElzKCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5pcyAhPT0gcG9seWZpbGw7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGtleXNTaGltO1xuaWYgKCFPYmplY3Qua2V5cykge1xuXHQvLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbVxuXHR2YXIgaGFzID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblx0dmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblx0dmFyIGlzQXJncyA9IHJlcXVpcmUoJy4vaXNBcmd1bWVudHMnKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHR2YXIgaXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblx0dmFyIGhhc0RvbnRFbnVtQnVnID0gIWlzRW51bWVyYWJsZS5jYWxsKHsgdG9TdHJpbmc6IG51bGwgfSwgJ3RvU3RyaW5nJyk7XG5cdHZhciBoYXNQcm90b0VudW1CdWcgPSBpc0VudW1lcmFibGUuY2FsbChmdW5jdGlvbiAoKSB7fSwgJ3Byb3RvdHlwZScpO1xuXHR2YXIgZG9udEVudW1zID0gW1xuXHRcdCd0b1N0cmluZycsXG5cdFx0J3RvTG9jYWxlU3RyaW5nJyxcblx0XHQndmFsdWVPZicsXG5cdFx0J2hhc093blByb3BlcnR5Jyxcblx0XHQnaXNQcm90b3R5cGVPZicsXG5cdFx0J3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcblx0XHQnY29uc3RydWN0b3InXG5cdF07XG5cdHZhciBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0dmFyIGN0b3IgPSBvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiBjdG9yICYmIGN0b3IucHJvdG90eXBlID09PSBvO1xuXHR9O1xuXHR2YXIgZXhjbHVkZWRLZXlzID0ge1xuXHRcdCRhcHBsaWNhdGlvbkNhY2hlOiB0cnVlLFxuXHRcdCRjb25zb2xlOiB0cnVlLFxuXHRcdCRleHRlcm5hbDogdHJ1ZSxcblx0XHQkZnJhbWU6IHRydWUsXG5cdFx0JGZyYW1lRWxlbWVudDogdHJ1ZSxcblx0XHQkZnJhbWVzOiB0cnVlLFxuXHRcdCRpbm5lckhlaWdodDogdHJ1ZSxcblx0XHQkaW5uZXJXaWR0aDogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuY2hhbmdlOiB0cnVlLFxuXHRcdCRvbm1vemZ1bGxzY3JlZW5lcnJvcjogdHJ1ZSxcblx0XHQkb3V0ZXJIZWlnaHQ6IHRydWUsXG5cdFx0JG91dGVyV2lkdGg6IHRydWUsXG5cdFx0JHBhZ2VYT2Zmc2V0OiB0cnVlLFxuXHRcdCRwYWdlWU9mZnNldDogdHJ1ZSxcblx0XHQkcGFyZW50OiB0cnVlLFxuXHRcdCRzY3JvbGxMZWZ0OiB0cnVlLFxuXHRcdCRzY3JvbGxUb3A6IHRydWUsXG5cdFx0JHNjcm9sbFg6IHRydWUsXG5cdFx0JHNjcm9sbFk6IHRydWUsXG5cdFx0JHNlbGY6IHRydWUsXG5cdFx0JHdlYmtpdEluZGV4ZWREQjogdHJ1ZSxcblx0XHQkd2Via2l0U3RvcmFnZUluZm86IHRydWUsXG5cdFx0JHdpbmRvdzogdHJ1ZVxuXHR9O1xuXHR2YXIgaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnID0gKGZ1bmN0aW9uICgpIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZvciAodmFyIGsgaW4gd2luZG93KSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoIWV4Y2x1ZGVkS2V5c1snJCcgKyBrXSAmJiBoYXMuY2FsbCh3aW5kb3csIGspICYmIHdpbmRvd1trXSAhPT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93W2tdID09PSAnb2JqZWN0Jykge1xuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZSh3aW5kb3dba10pO1xuXHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9KCkpO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGVJZk5vdEJ1Z2d5ID0gZnVuY3Rpb24gKG8pIHtcblx0XHQvKiBnbG9iYWwgd2luZG93ICovXG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNBdXRvbWF0aW9uRXF1YWxpdHlCdWcpIHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZShvKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xuXG5cdGtleXNTaGltID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcblx0XHR2YXIgaXNPYmplY3QgPSBvYmplY3QgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCc7XG5cdFx0dmFyIGlzRnVuY3Rpb24gPSB0b1N0ci5jYWxsKG9iamVjdCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdFx0dmFyIGlzQXJndW1lbnRzID0gaXNBcmdzKG9iamVjdCk7XG5cdFx0dmFyIGlzU3RyaW5nID0gaXNPYmplY3QgJiYgdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBTdHJpbmddJztcblx0XHR2YXIgdGhlS2V5cyA9IFtdO1xuXG5cdFx0aWYgKCFpc09iamVjdCAmJiAhaXNGdW5jdGlvbiAmJiAhaXNBcmd1bWVudHMpIHtcblx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5rZXlzIGNhbGxlZCBvbiBhIG5vbi1vYmplY3QnKTtcblx0XHR9XG5cblx0XHR2YXIgc2tpcFByb3RvID0gaGFzUHJvdG9FbnVtQnVnICYmIGlzRnVuY3Rpb247XG5cdFx0aWYgKGlzU3RyaW5nICYmIG9iamVjdC5sZW5ndGggPiAwICYmICFoYXMuY2FsbChvYmplY3QsIDApKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IG9iamVjdC5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGkpKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaXNBcmd1bWVudHMgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcblx0XHRcdGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0Lmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdHRoZUtleXMucHVzaChTdHJpbmcoaikpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKHZhciBuYW1lIGluIG9iamVjdCkge1xuXHRcdFx0XHRpZiAoIShza2lwUHJvdG8gJiYgbmFtZSA9PT0gJ3Byb3RvdHlwZScpICYmIGhhcy5jYWxsKG9iamVjdCwgbmFtZSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKG5hbWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChoYXNEb250RW51bUJ1Zykge1xuXHRcdFx0dmFyIHNraXBDb25zdHJ1Y3RvciA9IGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneShvYmplY3QpO1xuXG5cdFx0XHRmb3IgKHZhciBrID0gMDsgayA8IGRvbnRFbnVtcy5sZW5ndGg7ICsraykge1xuXHRcdFx0XHRpZiAoIShza2lwQ29uc3RydWN0b3IgJiYgZG9udEVudW1zW2tdID09PSAnY29uc3RydWN0b3InKSAmJiBoYXMuY2FsbChvYmplY3QsIGRvbnRFbnVtc1trXSkpIHtcblx0XHRcdFx0XHR0aGVLZXlzLnB1c2goZG9udEVudW1zW2tdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdGhlS2V5cztcblx0fTtcbn1cbm1vZHVsZS5leHBvcnRzID0ga2V5c1NoaW07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7XG5cbnZhciBvcmlnS2V5cyA9IE9iamVjdC5rZXlzO1xudmFyIGtleXNTaGltID0gb3JpZ0tleXMgPyBmdW5jdGlvbiBrZXlzKG8pIHsgcmV0dXJuIG9yaWdLZXlzKG8pOyB9IDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG52YXIgb3JpZ2luYWxLZXlzID0gT2JqZWN0LmtleXM7XG5cbmtleXNTaGltLnNoaW0gPSBmdW5jdGlvbiBzaGltT2JqZWN0S2V5cygpIHtcblx0aWYgKE9iamVjdC5rZXlzKSB7XG5cdFx0dmFyIGtleXNXb3Jrc1dpdGhBcmd1bWVudHMgPSAoZnVuY3Rpb24gKCkge1xuXHRcdFx0Ly8gU2FmYXJpIDUuMCBidWdcblx0XHRcdHZhciBhcmdzID0gT2JqZWN0LmtleXMoYXJndW1lbnRzKTtcblx0XHRcdHJldHVybiBhcmdzICYmIGFyZ3MubGVuZ3RoID09PSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdH0oMSwgMikpO1xuXHRcdGlmICgha2V5c1dvcmtzV2l0aEFyZ3VtZW50cykge1xuXHRcdFx0T2JqZWN0LmtleXMgPSBmdW5jdGlvbiBrZXlzKG9iamVjdCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGZ1bmMtbmFtZS1tYXRjaGluZ1xuXHRcdFx0XHRpZiAoaXNBcmdzKG9iamVjdCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb3JpZ2luYWxLZXlzKHNsaWNlLmNhbGwob2JqZWN0KSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhvYmplY3QpO1xuXHRcdFx0fTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0T2JqZWN0LmtleXMgPSBrZXlzU2hpbTtcblx0fVxuXHRyZXR1cm4gT2JqZWN0LmtleXMgfHwga2V5c1NoaW07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXJndW1lbnRzKHZhbHVlKSB7XG5cdHZhciBzdHIgPSB0b1N0ci5jYWxsKHZhbHVlKTtcblx0dmFyIGlzQXJncyA9IHN0ciA9PT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cdGlmICghaXNBcmdzKSB7XG5cdFx0aXNBcmdzID0gc3RyICE9PSAnW29iamVjdCBBcnJheV0nICYmXG5cdFx0XHR2YWx1ZSAhPT0gbnVsbCAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuXHRcdFx0dHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiZcblx0XHRcdHZhbHVlLmxlbmd0aCA+PSAwICYmXG5cdFx0XHR0b1N0ci5jYWxsKHZhbHVlLmNhbGxlZSkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cdH1cblx0cmV0dXJuIGlzQXJncztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIG1vZGlmaWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2VzLXNoaW1zL2VzNi1zaGltXG52YXIga2V5cyA9IHJlcXVpcmUoJ29iamVjdC1rZXlzJyk7XG52YXIgY2FuQmVPYmplY3QgPSBmdW5jdGlvbiAob2JqKSB7XG5cdHJldHVybiB0eXBlb2Ygb2JqICE9PSAndW5kZWZpbmVkJyAmJiBvYmogIT09IG51bGw7XG59O1xudmFyIGhhc1N5bWJvbHMgPSByZXF1aXJlKCdoYXMtc3ltYm9scy9zaGFtcycpKCk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIHRvT2JqZWN0ID0gT2JqZWN0O1xudmFyICRwdXNoID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUucHVzaCcpO1xudmFyICRwcm9wSXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgb3JpZ2luYWxHZXRTeW1ib2xzID0gaGFzU3ltYm9scyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgOiBudWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlMSkge1xuXHRpZiAoIWNhbkJlT2JqZWN0KHRhcmdldCkpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7IH1cblx0dmFyIG9ialRhcmdldCA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzLCBzb3VyY2UsIGksIHByb3BzLCBzeW1zLCB2YWx1ZSwga2V5O1xuXHRmb3IgKHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgKytzKSB7XG5cdFx0c291cmNlID0gdG9PYmplY3QoYXJndW1lbnRzW3NdKTtcblx0XHRwcm9wcyA9IGtleXMoc291cmNlKTtcblx0XHR2YXIgZ2V0U3ltYm9scyA9IGhhc1N5bWJvbHMgJiYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgfHwgb3JpZ2luYWxHZXRTeW1ib2xzKTtcblx0XHRpZiAoZ2V0U3ltYm9scykge1xuXHRcdFx0c3ltcyA9IGdldFN5bWJvbHMoc291cmNlKTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBzeW1zLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGtleSA9IHN5bXNbaV07XG5cdFx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0XHQkcHVzaChwcm9wcywga2V5KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IgKGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyArK2kpIHtcblx0XHRcdGtleSA9IHByb3BzW2ldO1xuXHRcdFx0dmFsdWUgPSBzb3VyY2Vba2V5XTtcblx0XHRcdGlmICgkcHJvcElzRW51bWVyYWJsZShzb3VyY2UsIGtleSkpIHtcblx0XHRcdFx0b2JqVGFyZ2V0W2tleV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIG9ialRhcmdldDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZC5hcHBseShnZXRQb2x5ZmlsbCgpKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xudmFyIGJvdW5kID0gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlMSkge1xuXHRyZXR1cm4gcG9seWZpbGwoT2JqZWN0LCBhcmd1bWVudHMpO1xufTtcblxuZGVmaW5lUHJvcGVydGllcyhib3VuZCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlciA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIHY4LCBzcGVjaWZpY2FsbHkgaW4gbm9kZSA0LngsIGhhcyBhIGJ1ZyB3aXRoIGluY29ycmVjdCBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlclxuXHQgKiBub3RlOiB0aGlzIGRvZXMgbm90IGRldGVjdCB0aGUgYnVnIHVubGVzcyB0aGVyZSdzIDIwIGNoYXJhY3RlcnNcblx0ICovXG5cdHZhciBzdHIgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3QnO1xuXHR2YXIgbGV0dGVycyA9IHN0ci5zcGxpdCgnJyk7XG5cdHZhciBtYXAgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZXR0ZXJzLmxlbmd0aDsgKytpKSB7XG5cdFx0bWFwW2xldHRlcnNbaV1dID0gbGV0dGVyc1tpXTtcblx0fVxuXHR2YXIgb2JqID0gT2JqZWN0LmFzc2lnbih7fSwgbWFwKTtcblx0dmFyIGFjdHVhbCA9ICcnO1xuXHRmb3IgKHZhciBrIGluIG9iaikge1xuXHRcdGFjdHVhbCArPSBrO1xuXHR9XG5cdHJldHVybiBzdHIgIT09IGFjdHVhbDtcbn07XG5cbnZhciBhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucyA9IGZ1bmN0aW9uICgpIHtcblx0aWYgKCFPYmplY3QuYXNzaWduIHx8ICFPYmplY3QucHJldmVudEV4dGVuc2lvbnMpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Lypcblx0ICogRmlyZWZveCAzNyBzdGlsbCBoYXMgXCJwZW5kaW5nIGV4Y2VwdGlvblwiIGxvZ2ljIGluIGl0cyBPYmplY3QuYXNzaWduIGltcGxlbWVudGF0aW9uLFxuXHQgKiB3aGljaCBpcyA3MiUgc2xvd2VyIHRoYW4gb3VyIHNoaW0sIGFuZCBGaXJlZm94IDQwJ3MgbmF0aXZlIGltcGxlbWVudGF0aW9uLlxuXHQgKi9cblx0dmFyIHRocm93ZXIgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoeyAxOiAyIH0pO1xuXHR0cnkge1xuXHRcdE9iamVjdC5hc3NpZ24odGhyb3dlciwgJ3h5Jyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gdGhyb3dlclsxXSA9PT0gJ3knO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBpbXBsZW1lbnRhdGlvbjtcblx0fVxuXHRpZiAobGFja3NQcm9wZXJFbnVtZXJhdGlvbk9yZGVyKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGFzc2lnbkhhc1BlbmRpbmdFeGNlcHRpb25zKCkpIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0cmV0dXJuIE9iamVjdC5hc3NpZ247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltQXNzaWduKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoXG5cdFx0T2JqZWN0LFxuXHRcdHsgYXNzaWduOiBwb2x5ZmlsbCB9LFxuXHRcdHsgYXNzaWduOiBmdW5jdGlvbiAoKSB7IHJldHVybiBPYmplY3QuYXNzaWduICE9PSBwb2x5ZmlsbDsgfSB9XG5cdCk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyICRpc0VudW1lcmFibGUgPSBjYWxsQm91bmQoJ09iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUnKTtcbnZhciAkcHVzaCA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnB1c2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBlbnRyaWVzKE8pIHtcblx0dmFyIG9iaiA9IFJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG5cdHZhciBlbnRyeXMgPSBbXTtcblx0Zm9yICh2YXIga2V5IGluIG9iaikge1xuXHRcdGlmICgkaXNFbnVtZXJhYmxlKG9iaiwga2V5KSkgeyAvLyBjaGVja3Mgb3duLW5lc3MgYXMgd2VsbFxuXHRcdFx0JHB1c2goZW50cnlzLCBba2V5LCBvYmpba2V5XV0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZW50cnlzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC5lbnRyaWVzID09PSAnZnVuY3Rpb24nID8gT2JqZWN0LmVudHJpZXMgOiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1FbnRyaWVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IGVudHJpZXM6IHBvbHlmaWxsIH0sIHtcblx0XHRlbnRyaWVzOiBmdW5jdGlvbiB0ZXN0RW50cmllcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QuZW50cmllcyAhPT0gcG9seWZpbGw7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG5cbnZhciAkaXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgJHB1c2ggPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdmFsdWVzKE8pIHtcblx0dmFyIG9iaiA9IFJlcXVpcmVPYmplY3RDb2VyY2libGUoTyk7XG5cdHZhciB2YWxzID0gW107XG5cdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRpZiAoJGlzRW51bWVyYWJsZShvYmosIGtleSkpIHsgLy8gY2hlY2tzIG93bi1uZXNzIGFzIHdlbGxcblx0XHRcdCRwdXNoKHZhbHMsIG9ialtrZXldKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgc2hpbSA9IHJlcXVpcmUoJy4vc2hpbScpO1xuXG52YXIgcG9seWZpbGwgPSBjYWxsQmluZChnZXRQb2x5ZmlsbCgpLCBPYmplY3QpO1xuXG5kZWZpbmUocG9seWZpbGwsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBvbHlmaWxsO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiB0eXBlb2YgT2JqZWN0LnZhbHVlcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC52YWx1ZXMgOiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1WYWx1ZXMoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cdGRlZmluZShPYmplY3QsIHsgdmFsdWVzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0dmFsdWVzOiBmdW5jdGlvbiB0ZXN0VmFsdWVzKCkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC52YWx1ZXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX3R5cGVvZiA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGlzUGxhaW5PYmplY3Q7XG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHgpIHtcbiAgcmV0dXJuIHggJiYgKHR5cGVvZiB4ID09PSAndW5kZWZpbmVkJyA/ICd1bmRlZmluZWQnIDogX3R5cGVvZih4KSkgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1BsYWluT2JqZWN0LmpzLm1hcCIsIk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzWydkZWZhdWx0J10gPSBmb3JiaWRFeHRyYVByb3BzO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoJ29iamVjdC5hc3NpZ24nKTtcblxudmFyIF9vYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb2JqZWN0KTtcblxudmFyIF9oYXMgPSByZXF1aXJlKCdoYXMnKTtcblxudmFyIF9oYXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFzKTtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzUGxhaW5PYmplY3QnKTtcblxudmFyIF9pc1BsYWluT2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2lzUGxhaW5PYmplY3QpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciB6ZXJvV2lkdGhTcGFjZSA9ICdcXHUyMDBCJztcbnZhciBzcGVjaWFsUHJvcGVydHkgPSAncHJvcC10eXBlcy1leGFjdDogJyArIHplcm9XaWR0aFNwYWNlO1xudmFyIHNlbWFwaG9yZSA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbFsnZm9yJ10gPT09ICdmdW5jdGlvbicgPyBTeW1ib2xbJ2ZvciddKHNwZWNpYWxQcm9wZXJ0eSkgOiAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL3NwZWNpYWxQcm9wZXJ0eTtcblxuZnVuY3Rpb24gYnJhbmQoZm4pIHtcbiAgcmV0dXJuICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShmbiwgX2RlZmluZVByb3BlcnR5KHt9LCBzcGVjaWFsUHJvcGVydHksIHNlbWFwaG9yZSkpO1xufVxuXG5mdW5jdGlvbiBpc0JyYW5kZWQodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIHZhbHVlW3NwZWNpYWxQcm9wZXJ0eV0gPT09IHNlbWFwaG9yZTtcbn1cblxuZnVuY3Rpb24gZm9yYmlkRXh0cmFQcm9wcyhwcm9wVHlwZXMpIHtcbiAgaWYgKCEoMCwgX2lzUGxhaW5PYmplY3QyWydkZWZhdWx0J10pKHByb3BUeXBlcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnaXZlbiBwcm9wVHlwZXMgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuICBpZiAoKDAsIF9oYXMyWydkZWZhdWx0J10pKHByb3BUeXBlcywgc3BlY2lhbFByb3BlcnR5KSAmJiAhaXNCcmFuZGVkKHByb3BUeXBlc1tzcGVjaWFsUHJvcGVydHldKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FnYWluc3QgYWxsIG9kZHMsIHlvdSBjcmVhdGVkIGEgcHJvcFR5cGUgZm9yIGEgcHJvcCB0aGF0IHVzZXMgYm90aCB0aGUgemVyby13aWR0aCBzcGFjZSBhbmQgb3VyIGN1c3RvbSBzdHJpbmcgLSB3aGljaCwgc2FkbHksIGNvbmZsaWN0cyB3aXRoIGBwcm9wLXR5cGVzLWV4YWN0YCcpO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKSh7fSwgcHJvcFR5cGVzLCBfZGVmaW5lUHJvcGVydHkoe30sIHNwZWNpYWxQcm9wZXJ0eSwgYnJhbmQoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGZvcmJpZFVua25vd25Qcm9wcyhwcm9wcywgXywgY29tcG9uZW50TmFtZSkge1xuICAgICAgdmFyIHVua25vd25Qcm9wcyA9IE9iamVjdC5rZXlzKHByb3BzKS5maWx0ZXIoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuICEoMCwgX2hhczJbJ2RlZmF1bHQnXSkocHJvcFR5cGVzLCBwcm9wKTtcbiAgICAgIH0pO1xuICAgICAgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFN0cmluZyhjb21wb25lbnROYW1lKSArICc6IHVua25vd24gcHJvcHMgZm91bmQ6ICcgKyBTdHJpbmcodW5rbm93blByb3BzLmpvaW4oJywgJykpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JiaWRVbmtub3duUHJvcHM7XG4gIH0oKSkpKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RQcm9wVHlwZXNTZWNyZXQgPSByZXF1aXJlKCcuL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldCcpO1xuICB2YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG4gIHZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcblxuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkgeyAvKiovIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBc3NlcnQgdGhhdCB0aGUgdmFsdWVzIG1hdGNoIHdpdGggdGhlIHR5cGUgc3BlY3MuXG4gKiBFcnJvciBtZXNzYWdlcyBhcmUgbWVtb3JpemVkIGFuZCB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gdHlwZVNwZWNzIE1hcCBvZiBuYW1lIHRvIGEgUmVhY3RQcm9wVHlwZVxuICogQHBhcmFtIHtvYmplY3R9IHZhbHVlcyBSdW50aW1lIHZhbHVlcyB0aGF0IG5lZWQgdG8gYmUgdHlwZS1jaGVja2VkXG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb24gZS5nLiBcInByb3BcIiwgXCJjb250ZXh0XCIsIFwiY2hpbGQgY29udGV4dFwiXG4gKiBAcGFyYW0ge3N0cmluZ30gY29tcG9uZW50TmFtZSBOYW1lIG9mIHRoZSBjb21wb25lbnQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICogQHBhcmFtIHs/RnVuY3Rpb259IGdldFN0YWNrIFJldHVybnMgdGhlIGNvbXBvbmVudCBzdGFjay5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZ2V0U3RhY2spIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoXG4gICAgICAgICAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAgICAgICAgICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgK1xuICAgICAgICAgICAgICAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlcnJvciA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yID0gZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAnICtcbiAgICAgICAgICAgIGxvY2F0aW9uICsgJyBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArXG4gICAgICAgICAgICAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJyArIHR5cGVvZiBlcnJvciArICcuICcgK1xuICAgICAgICAgICAgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArXG4gICAgICAgICAgICAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLidcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IubWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2sgPyBnZXRTdGFjaygpIDogJyc7XG5cbiAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAnRmFpbGVkICcgKyBsb2NhdGlvbiArICcgdHlwZTogJyArIGVycm9yLm1lc3NhZ2UgKyAoc3RhY2sgIT0gbnVsbCA/IHN0YWNrIDogJycpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlc2V0cyB3YXJuaW5nIGNhY2hlIHdoZW4gdGVzdGluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICovXG5jaGVja1Byb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2hlY2tQcm9wVHlwZXM7XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0SXMgPSByZXF1aXJlKCdyZWFjdC1pcycpO1xudmFyIGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL2xpYi9oYXMnKTtcbnZhciBjaGVja1Byb3BUeXBlcyA9IHJlcXVpcmUoJy4vY2hlY2tQcm9wVHlwZXMnKTtcblxudmFyIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKCkge307XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByaW50V2FybmluZyA9IGZ1bmN0aW9uKHRleHQpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdXYXJuaW5nOiAnICsgdGV4dDtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgLy8gLS0tIFdlbGNvbWUgdG8gZGVidWdnaW5nIFJlYWN0IC0tLVxuICAgICAgLy8gVGhpcyBlcnJvciB3YXMgdGhyb3duIGFzIGEgY29udmVuaWVuY2Ugc28gdGhhdCB5b3UgY2FuIHVzZSB0aGlzIHN0YWNrXG4gICAgICAvLyB0byBmaW5kIHRoZSBjYWxsc2l0ZSB0aGF0IGNhdXNlZCB0aGlzIHdhcm5pbmcgdG8gZmlyZS5cbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICB9IGNhdGNoICh4KSB7fVxuICB9O1xufVxuXG5mdW5jdGlvbiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKCkge1xuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc1ZhbGlkRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAvKiBnbG9iYWwgU3ltYm9sICovXG4gIHZhciBJVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbiAgdmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InOyAvLyBCZWZvcmUgU3ltYm9sIHNwZWMuXG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGl0ZXJhdG9yIG1ldGhvZCBmdW5jdGlvbiBjb250YWluZWQgb24gdGhlIGl0ZXJhYmxlIG9iamVjdC5cbiAgICpcbiAgICogQmUgc3VyZSB0byBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGl0ZXJhYmxlIGFzIGNvbnRleHQ6XG4gICAqXG4gICAqICAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obXlJdGVyYWJsZSk7XG4gICAqICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgKiAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobXlJdGVyYWJsZSk7XG4gICAqICAgICAgIC4uLlxuICAgKiAgICAgfVxuICAgKlxuICAgKiBAcGFyYW0gez9vYmplY3R9IG1heWJlSXRlcmFibGVcbiAgICogQHJldHVybiB7P2Z1bmN0aW9ufVxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBtYXliZUl0ZXJhYmxlICYmIChJVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtJVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdKTtcbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBpdGVyYXRvckZuO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0aW9uIG9mIG1ldGhvZHMgdGhhdCBhbGxvdyBkZWNsYXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBvZiBwcm9wcyB0aGF0IGFyZVxuICAgKiBzdXBwbGllZCB0byBSZWFjdCBjb21wb25lbnRzLiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgIHZhciBQcm9wcyA9IHJlcXVpcmUoJ1JlYWN0UHJvcFR5cGVzJyk7XG4gICAqICAgdmFyIE15QXJ0aWNsZSA9IFJlYWN0LmNyZWF0ZUNsYXNzKHtcbiAgICogICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgcHJvcCBuYW1lZCBcImRlc2NyaXB0aW9uXCIuXG4gICAqICAgICAgIGRlc2NyaXB0aW9uOiBQcm9wcy5zdHJpbmcsXG4gICAqXG4gICAqICAgICAgIC8vIEEgcmVxdWlyZWQgZW51bSBwcm9wIG5hbWVkIFwiY2F0ZWdvcnlcIi5cbiAgICogICAgICAgY2F0ZWdvcnk6IFByb3BzLm9uZU9mKFsnTmV3cycsJ1Bob3RvcyddKS5pc1JlcXVpcmVkLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHByb3AgbmFtZWQgXCJkaWFsb2dcIiB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIERpYWxvZy5cbiAgICogICAgICAgZGlhbG9nOiBQcm9wcy5pbnN0YW5jZU9mKERpYWxvZykuaXNSZXF1aXJlZFxuICAgKiAgICAgfSxcbiAgICogICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7IC4uLiB9XG4gICAqICAgfSk7XG4gICAqXG4gICAqIEEgbW9yZSBmb3JtYWwgc3BlY2lmaWNhdGlvbiBvZiBob3cgdGhlc2UgbWV0aG9kcyBhcmUgdXNlZDpcbiAgICpcbiAgICogICB0eXBlIDo9IGFycmF5fGJvb2x8ZnVuY3xvYmplY3R8bnVtYmVyfHN0cmluZ3xvbmVPZihbLi4uXSl8aW5zdGFuY2VPZiguLi4pXG4gICAqICAgZGVjbCA6PSBSZWFjdFByb3BUeXBlcy57dHlwZX0oLmlzUmVxdWlyZWQpP1xuICAgKlxuICAgKiBFYWNoIGFuZCBldmVyeSBkZWNsYXJhdGlvbiBwcm9kdWNlcyBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUgc2lnbmF0dXJlLiBUaGlzXG4gICAqIGFsbG93cyB0aGUgY3JlYXRpb24gb2YgY3VzdG9tIHZhbGlkYXRpb24gZnVuY3Rpb25zLiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogIHZhciBNeUxpbmsgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgIHByb3BUeXBlczoge1xuICAgKiAgICAgIC8vIEFuIG9wdGlvbmFsIHN0cmluZyBvciBVUkkgcHJvcCBuYW1lZCBcImhyZWZcIi5cbiAgICogICAgICBocmVmOiBmdW5jdGlvbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICogICAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAqICAgICAgICBpZiAocHJvcFZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHByb3BWYWx1ZSAhPT0gJ3N0cmluZycgJiZcbiAgICogICAgICAgICAgICAhKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFVSSSkpIHtcbiAgICogICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICogICAgICAgICAgICAnRXhwZWN0ZWQgYSBzdHJpbmcgb3IgYW4gVVJJIGZvciAnICsgcHJvcE5hbWUgKyAnIGluICcgK1xuICAgKiAgICAgICAgICAgIGNvbXBvbmVudE5hbWVcbiAgICogICAgICAgICAgKTtcbiAgICogICAgICAgIH1cbiAgICogICAgICB9XG4gICAqICAgIH0sXG4gICAqICAgIHJlbmRlcjogZnVuY3Rpb24oKSB7Li4ufVxuICAgKiAgfSk7XG4gICAqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cblxuICB2YXIgQU5PTllNT1VTID0gJzw8YW5vbnltb3VzPj4nO1xuXG4gIC8vIEltcG9ydGFudCFcbiAgLy8gS2VlcCB0aGlzIGxpc3QgaW4gc3luYyB3aXRoIHByb2R1Y3Rpb24gdmVyc2lvbiBpbiBgLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMuanNgLlxuICB2YXIgUmVhY3RQcm9wVHlwZXMgPSB7XG4gICAgYXJyYXk6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdhcnJheScpLFxuICAgIGJpZ2ludDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2JpZ2ludCcpLFxuICAgIGJvb2w6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdib29sZWFuJyksXG4gICAgZnVuYzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ2Z1bmN0aW9uJyksXG4gICAgbnVtYmVyOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignbnVtYmVyJyksXG4gICAgb2JqZWN0OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignb2JqZWN0JyksXG4gICAgc3RyaW5nOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3RyaW5nJyksXG4gICAgc3ltYm9sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignc3ltYm9sJyksXG5cbiAgICBhbnk6IGNyZWF0ZUFueVR5cGVDaGVja2VyKCksXG4gICAgYXJyYXlPZjogY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyLFxuICAgIGVsZW1lbnQ6IGNyZWF0ZUVsZW1lbnRUeXBlQ2hlY2tlcigpLFxuICAgIGVsZW1lbnRUeXBlOiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCksXG4gICAgaW5zdGFuY2VPZjogY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcixcbiAgICBub2RlOiBjcmVhdGVOb2RlQ2hlY2tlcigpLFxuICAgIG9iamVjdE9mOiBjcmVhdGVPYmplY3RPZlR5cGVDaGVja2VyLFxuICAgIG9uZU9mOiBjcmVhdGVFbnVtVHlwZUNoZWNrZXIsXG4gICAgb25lT2ZUeXBlOiBjcmVhdGVVbmlvblR5cGVDaGVja2VyLFxuICAgIHNoYXBlOiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyLFxuICAgIGV4YWN0OiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyLFxuICB9O1xuXG4gIC8qKlxuICAgKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gICAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICAgKi9cbiAgLyplc2xpbnQtZGlzYWJsZSBuby1zZWxmLWNvbXBhcmUqL1xuICBmdW5jdGlvbiBpcyh4LCB5KSB7XG4gICAgLy8gU2FtZVZhbHVlIGFsZ29yaXRobVxuICAgIGlmICh4ID09PSB5KSB7XG4gICAgICAvLyBTdGVwcyAxLTUsIDctMTBcbiAgICAgIC8vIFN0ZXBzIDYuYi02LmU6ICswICE9IC0wXG4gICAgICByZXR1cm4geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0ZXAgNi5hOiBOYU4gPT0gTmFOXG4gICAgICByZXR1cm4geCAhPT0geCAmJiB5ICE9PSB5O1xuICAgIH1cbiAgfVxuICAvKmVzbGludC1lbmFibGUgbm8tc2VsZi1jb21wYXJlKi9cblxuICAvKipcbiAgICogV2UgdXNlIGFuIEVycm9yLWxpa2Ugb2JqZWN0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGFzIHBlb3BsZSBtYXkgY2FsbFxuICAgKiBQcm9wVHlwZXMgZGlyZWN0bHkgYW5kIGluc3BlY3QgdGhlaXIgb3V0cHV0LiBIb3dldmVyLCB3ZSBkb24ndCB1c2UgcmVhbFxuICAgKiBFcnJvcnMgYW55bW9yZS4gV2UgZG9uJ3QgaW5zcGVjdCB0aGVpciBzdGFjayBhbnl3YXksIGFuZCBjcmVhdGluZyB0aGVtXG4gICAqIGlzIHByb2hpYml0aXZlbHkgZXhwZW5zaXZlIGlmIHRoZXkgYXJlIGNyZWF0ZWQgdG9vIG9mdGVuLCBzdWNoIGFzIHdoYXRcbiAgICogaGFwcGVucyBpbiBvbmVPZlR5cGUoKSBmb3IgYW55IHR5cGUgYmVmb3JlIHRoZSBvbmUgdGhhdCBtYXRjaGVkLlxuICAgKi9cbiAgZnVuY3Rpb24gUHJvcFR5cGVFcnJvcihtZXNzYWdlLCBkYXRhKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB0aGlzLmRhdGEgPSBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyA/IGRhdGE6IHt9O1xuICAgIHRoaXMuc3RhY2sgPSAnJztcbiAgfVxuICAvLyBNYWtlIGBpbnN0YW5jZW9mIEVycm9yYCBzdGlsbCB3b3JrIGZvciByZXR1cm5lZCBlcnJvcnMuXG4gIFByb3BUeXBlRXJyb3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZUNhbGxDYWNoZSA9IHt9O1xuICAgICAgdmFyIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50ID0gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tUeXBlKGlzUmVxdWlyZWQsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICBjb21wb25lbnROYW1lID0gY29tcG9uZW50TmFtZSB8fCBBTk9OWU1PVVM7XG4gICAgICBwcm9wRnVsbE5hbWUgPSBwcm9wRnVsbE5hbWUgfHwgcHJvcE5hbWU7XG5cbiAgICAgIGlmIChzZWNyZXQgIT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAgIGlmICh0aHJvd09uRGlyZWN0QWNjZXNzKSB7XG4gICAgICAgICAgLy8gTmV3IGJlaGF2aW9yIG9ubHkgZm9yIHVzZXJzIG9mIGBwcm9wLXR5cGVzYCBwYWNrYWdlXG4gICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcihcbiAgICAgICAgICAgICdDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICdVc2UgYFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpYCB0byBjYWxsIHRoZW0uICcgK1xuICAgICAgICAgICAgJ1JlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXMnXG4gICAgICAgICAgKTtcbiAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAvLyBPbGQgYmVoYXZpb3IgZm9yIHBlb3BsZSB1c2luZyBSZWFjdC5Qcm9wVHlwZXNcbiAgICAgICAgICB2YXIgY2FjaGVLZXkgPSBjb21wb25lbnROYW1lICsgJzonICsgcHJvcE5hbWU7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgIW1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSAmJlxuICAgICAgICAgICAgLy8gQXZvaWQgc3BhbW1pbmcgdGhlIGNvbnNvbGUgYmVjYXVzZSB0aGV5IGFyZSBvZnRlbiBub3QgYWN0aW9uYWJsZSBleGNlcHQgZm9yIGxpYiBhdXRob3JzXG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA8IDNcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICAgJ1lvdSBhcmUgbWFudWFsbHkgY2FsbGluZyBhIFJlYWN0LlByb3BUeXBlcyB2YWxpZGF0aW9uICcgK1xuICAgICAgICAgICAgICAnZnVuY3Rpb24gZm9yIHRoZSBgJyArIHByb3BGdWxsTmFtZSArICdgIHByb3Agb24gYCcgKyBjb21wb25lbnROYW1lICsgJ2AuIFRoaXMgaXMgZGVwcmVjYXRlZCAnICtcbiAgICAgICAgICAgICAgJ2FuZCB3aWxsIHRocm93IGluIHRoZSBzdGFuZGFsb25lIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiAnICtcbiAgICAgICAgICAgICAgJ1lvdSBtYXkgYmUgc2VlaW5nIHRoaXMgd2FybmluZyBkdWUgdG8gYSB0aGlyZC1wYXJ0eSBQcm9wVHlwZXMgJyArXG4gICAgICAgICAgICAgICdsaWJyYXJ5LiBTZWUgaHR0cHM6Ly9mYi5tZS9yZWFjdC13YXJuaW5nLWRvbnQtY2FsbC1wcm9wdHlwZXMgJyArICdmb3IgZGV0YWlscy4nXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGVbY2FjaGVLZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlV2FybmluZ0NvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgaWYgKGlzUmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkICcgKyAoJ2luIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGBudWxsYC4nKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignVGhlICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGJ1dCBpdHMgdmFsdWUgaXMgYHVuZGVmaW5lZGAuJykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoYWluZWRDaGVja1R5cGUgPSBjaGVja1R5cGUuYmluZChudWxsLCBmYWxzZSk7XG4gICAgY2hhaW5lZENoZWNrVHlwZS5pc1JlcXVpcmVkID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgdHJ1ZSk7XG5cbiAgICByZXR1cm4gY2hhaW5lZENoZWNrVHlwZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKGV4cGVjdGVkVHlwZSkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gZXhwZWN0ZWRUeXBlKSB7XG4gICAgICAgIC8vIGBwcm9wVmFsdWVgIGJlaW5nIGluc3RhbmNlIG9mLCBzYXksIGRhdGUvcmVnZXhwLCBwYXNzIHRoZSAnb2JqZWN0J1xuICAgICAgICAvLyBjaGVjaywgYnV0IHdlIGNhbiBvZmZlciBhIG1vcmUgcHJlY2lzZSBlcnJvciBtZXNzYWdlIGhlcmUgcmF0aGVyIHRoYW5cbiAgICAgICAgLy8gJ29mIHR5cGUgYG9iamVjdGAnLlxuICAgICAgICB2YXIgcHJlY2lzZVR5cGUgPSBnZXRQcmVjaXNlVHlwZShwcm9wVmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByZWNpc2VUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkICcpICsgKCdgJyArIGV4cGVjdGVkVHlwZSArICdgLicpLFxuICAgICAgICAgIHtleHBlY3RlZFR5cGU6IGV4cGVjdGVkVHlwZX1cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQW55VHlwZUNoZWNrZXIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGwpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXlPZlR5cGVDaGVja2VyKHR5cGVDaGVja2VyKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAodHlwZW9mIHR5cGVDaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignUHJvcGVydHkgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiBjb21wb25lbnQgYCcgKyBjb21wb25lbnROYW1lICsgJ2AgaGFzIGludmFsaWQgUHJvcFR5cGUgbm90YXRpb24gaW5zaWRlIGFycmF5T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gYXJyYXkuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGVycm9yID0gdHlwZUNoZWNrZXIocHJvcFZhbHVlLCBpLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJ1snICsgaSArICddJywgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFpc1ZhbGlkRWxlbWVudChwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRUeXBlVHlwZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgaWYgKCFSZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgc2luZ2xlIFJlYWN0RWxlbWVudCB0eXBlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2VUeXBlQ2hlY2tlcihleHBlY3RlZENsYXNzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIShwcm9wc1twcm9wTmFtZV0gaW5zdGFuY2VvZiBleHBlY3RlZENsYXNzKSkge1xuICAgICAgICB2YXIgZXhwZWN0ZWRDbGFzc05hbWUgPSBleHBlY3RlZENsYXNzLm5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgICB2YXIgYWN0dWFsQ2xhc3NOYW1lID0gZ2V0Q2xhc3NOYW1lKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIGFjdHVhbENsYXNzTmFtZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnaW5zdGFuY2Ugb2YgYCcgKyBleHBlY3RlZENsYXNzTmFtZSArICdgLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRW51bVR5cGVDaGVja2VyKGV4cGVjdGVkVmFsdWVzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGV4cGVjdGVkVmFsdWVzKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnRzIHN1cHBsaWVkIHRvIG9uZU9mLCBleHBlY3RlZCBhbiBhcnJheSwgZ290ICcgKyBhcmd1bWVudHMubGVuZ3RoICsgJyBhcmd1bWVudHMuICcgK1xuICAgICAgICAgICAgJ0EgY29tbW9uIG1pc3Rha2UgaXMgdG8gd3JpdGUgb25lT2YoeCwgeSwgeikgaW5zdGVhZCBvZiBvbmVPZihbeCwgeSwgel0pLidcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXkuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWRWYWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzKHByb3BWYWx1ZSwgZXhwZWN0ZWRWYWx1ZXNbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHZhbHVlc1N0cmluZyA9IEpTT04uc3RyaW5naWZ5KGV4cGVjdGVkVmFsdWVzLCBmdW5jdGlvbiByZXBsYWNlcihrZXksIHZhbHVlKSB7XG4gICAgICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgICAgICBpZiAodHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdmFsdWUgYCcgKyBTdHJpbmcocHJvcFZhbHVlKSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBvbmUgb2YgJyArIHZhbHVlc1N0cmluZyArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBvYmplY3RPZi4nKTtcbiAgICAgIH1cbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhbiBvYmplY3QuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHByb3BWYWx1ZSkge1xuICAgICAgICBpZiAoaGFzKHByb3BWYWx1ZSwga2V5KSkge1xuICAgICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlVW5pb25UeXBlQ2hlY2tlcihhcnJheU9mVHlwZUNoZWNrZXJzKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5T2ZUeXBlQ2hlY2tlcnMpKSB7XG4gICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcHJpbnRXYXJuaW5nKCdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZSwgZXhwZWN0ZWQgYW4gaW5zdGFuY2Ugb2YgYXJyYXkuJykgOiB2b2lkIDA7XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5T2ZUeXBlQ2hlY2tlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2ZUeXBlLiBFeHBlY3RlZCBhbiBhcnJheSBvZiBjaGVjayBmdW5jdGlvbnMsIGJ1dCAnICtcbiAgICAgICAgICAncmVjZWl2ZWQgJyArIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyhjaGVja2VyKSArICcgYXQgaW5kZXggJyArIGkgKyAnLidcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlcyA9IFtdO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gYXJyYXlPZlR5cGVDaGVja2Vyc1tpXTtcbiAgICAgICAgdmFyIGNoZWNrZXJSZXN1bHQgPSBjaGVja2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoY2hlY2tlclJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQuZGF0YSAmJiBoYXMoY2hlY2tlclJlc3VsdC5kYXRhLCAnZXhwZWN0ZWRUeXBlJykpIHtcbiAgICAgICAgICBleHBlY3RlZFR5cGVzLnB1c2goY2hlY2tlclJlc3VsdC5kYXRhLmV4cGVjdGVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhciBleHBlY3RlZFR5cGVzTWVzc2FnZSA9IChleHBlY3RlZFR5cGVzLmxlbmd0aCA+IDApID8gJywgZXhwZWN0ZWQgb25lIG9mIHR5cGUgWycgKyBleHBlY3RlZFR5cGVzLmpvaW4oJywgJykgKyAnXSc6ICcnO1xuICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBzdXBwbGllZCB0byAnICsgKCdgJyArIGNvbXBvbmVudE5hbWUgKyAnYCcgKyBleHBlY3RlZFR5cGVzTWVzc2FnZSArICcuJykpO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9kZUNoZWNrZXIoKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICBpZiAoIWlzTm9kZShwcm9wc1twcm9wTmFtZV0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGEgUmVhY3ROb2RlLicpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgdHlwZSkge1xuICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgIChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5ICsgJ2AgaXMgaW52YWxpZDsgJyArXG4gICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlICsgJ2AuJ1xuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IHNoYXBlVHlwZXNba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBjaGVja2VyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgcmV0dXJuIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIGdldFByZWNpc2VUeXBlKGNoZWNrZXIpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVTdHJpY3RTaGFwZVR5cGVDaGVja2VyKHNoYXBlVHlwZXMpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgaWYgKHByb3BUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgYCcgKyBwcm9wVHlwZSArICdgICcgKyAoJ3N1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBgb2JqZWN0YC4nKSk7XG4gICAgICB9XG4gICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGFsbCBrZXlzIGluIGNhc2Ugc29tZSBhcmUgcmVxdWlyZWQgYnV0IG1pc3NpbmcgZnJvbSBwcm9wcy5cbiAgICAgIHZhciBhbGxLZXlzID0gYXNzaWduKHt9LCBwcm9wc1twcm9wTmFtZV0sIHNoYXBlVHlwZXMpO1xuICAgICAgZm9yICh2YXIga2V5IGluIGFsbEtleXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmIChoYXMoc2hhcGVUeXBlcywga2V5KSAmJiB0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjaGVja2VyKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKFxuICAgICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGtleSBgJyArIGtleSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLicgK1xuICAgICAgICAgICAgJ1xcbkJhZCBvYmplY3Q6ICcgKyBKU09OLnN0cmluZ2lmeShwcm9wc1twcm9wTmFtZV0sIG51bGwsICcgICcpICtcbiAgICAgICAgICAgICdcXG5WYWxpZCBrZXlzOiAnICsgSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoc2hhcGVUeXBlcyksIG51bGwsICcgICcpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lICsgJy4nICsga2V5LCBSZWFjdFByb3BUeXBlc1NlY3JldCk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzTm9kZShwcm9wVmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBwcm9wVmFsdWUpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICFwcm9wVmFsdWU7XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHByb3BWYWx1ZS5ldmVyeShpc05vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsdWUgPT09IG51bGwgfHwgaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKHByb3BWYWx1ZSk7XG4gICAgICAgIGlmIChpdGVyYXRvckZuKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKHByb3BWYWx1ZSk7XG4gICAgICAgICAgdmFyIHN0ZXA7XG4gICAgICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IHByb3BWYWx1ZS5lbnRyaWVzKSB7XG4gICAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgICAgIGlmICghaXNOb2RlKHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEl0ZXJhdG9yIHdpbGwgcHJvdmlkZSBlbnRyeSBbayx2XSB0dXBsZXMgcmF0aGVyIHRoYW4gdmFsdWVzLlxuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICB2YXIgZW50cnkgPSBzdGVwLnZhbHVlO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTm9kZShlbnRyeVsxXSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkge1xuICAgIC8vIE5hdGl2ZSBTeW1ib2wuXG4gICAgaWYgKHByb3BUeXBlID09PSAnc3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gZmFsc3kgdmFsdWUgY2FuJ3QgYmUgYSBTeW1ib2xcbiAgICBpZiAoIXByb3BWYWx1ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIDE5LjQuMy41IFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ10gPT09ICdTeW1ib2wnXG4gICAgaWYgKHByb3BWYWx1ZVsnQEB0b1N0cmluZ1RhZyddID09PSAnU3ltYm9sJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgZm9yIG5vbi1zcGVjIGNvbXBsaWFudCBTeW1ib2xzIHdoaWNoIGFyZSBwb2x5ZmlsbGVkLlxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHByb3BWYWx1ZSBpbnN0YW5jZW9mIFN5bWJvbCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gRXF1aXZhbGVudCBvZiBgdHlwZW9mYCBidXQgd2l0aCBzcGVjaWFsIGhhbmRsaW5nIGZvciBhcnJheSBhbmQgcmVnZXhwLlxuICBmdW5jdGlvbiBnZXRQcm9wVHlwZShwcm9wVmFsdWUpIHtcbiAgICB2YXIgcHJvcFR5cGUgPSB0eXBlb2YgcHJvcFZhbHVlO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnYXJyYXknO1xuICAgIH1cbiAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAvLyBPbGQgd2Via2l0cyAoYXQgbGVhc3QgdW50aWwgQW5kcm9pZCA0LjApIHJldHVybiAnZnVuY3Rpb24nIHJhdGhlciB0aGFuXG4gICAgICAvLyAnb2JqZWN0JyBmb3IgdHlwZW9mIGEgUmVnRXhwLiBXZSdsbCBub3JtYWxpemUgdGhpcyBoZXJlIHNvIHRoYXQgL2JsYS9cbiAgICAgIC8vIHBhc3NlcyBQcm9wVHlwZXMub2JqZWN0LlxuICAgICAgcmV0dXJuICdvYmplY3QnO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wocHJvcFR5cGUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiAnc3ltYm9sJztcbiAgICB9XG4gICAgcmV0dXJuIHByb3BUeXBlO1xuICB9XG5cbiAgLy8gVGhpcyBoYW5kbGVzIG1vcmUgdHlwZXMgdGhhbiBgZ2V0UHJvcFR5cGVgLiBPbmx5IHVzZWQgZm9yIGVycm9yIG1lc3NhZ2VzLlxuICAvLyBTZWUgYGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyYC5cbiAgZnVuY3Rpb24gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnIHx8IHByb3BWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnICsgcHJvcFZhbHVlO1xuICAgIH1cbiAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgIGlmIChwcm9wVHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIHJldHVybiAnZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICByZXR1cm4gJ3JlZ2V4cCc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBzdHJpbmcgdGhhdCBpcyBwb3N0Zml4ZWQgdG8gYSB3YXJuaW5nIGFib3V0IGFuIGludmFsaWQgdHlwZS5cbiAgLy8gRm9yIGV4YW1wbGUsIFwidW5kZWZpbmVkXCIgb3IgXCJvZiB0eXBlIGFycmF5XCJcbiAgZnVuY3Rpb24gZ2V0UG9zdGZpeEZvclR5cGVXYXJuaW5nKHZhbHVlKSB7XG4gICAgdmFyIHR5cGUgPSBnZXRQcmVjaXNlVHlwZSh2YWx1ZSk7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdhcnJheSc6XG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICByZXR1cm4gJ2FuICcgKyB0eXBlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgIGNhc2UgJ3JlZ2V4cCc6XG4gICAgICAgIHJldHVybiAnYSAnICsgdHlwZTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cbiAgfVxuXG4gIC8vIFJldHVybnMgY2xhc3MgbmFtZSBvZiB0aGUgb2JqZWN0LCBpZiBhbnkuXG4gIGZ1bmN0aW9uIGdldENsYXNzTmFtZShwcm9wVmFsdWUpIHtcbiAgICBpZiAoIXByb3BWYWx1ZS5jb25zdHJ1Y3RvciB8fCAhcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWUpIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVM7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVmFsdWUuY29uc3RydWN0b3IubmFtZTtcbiAgfVxuXG4gIFJlYWN0UHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzID0gY2hlY2tQcm9wVHlwZXM7XG4gIFJlYWN0UHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlID0gY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGU7XG4gIFJlYWN0UHJvcFR5cGVzLlByb3BUeXBlcyA9IFJlYWN0UHJvcFR5cGVzO1xuXG4gIHJldHVybiBSZWFjdFByb3BUeXBlcztcbn07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcblxuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBkZXZlbG9wbWVudCBiZWhhdmlvci5cbiAgLy8gaHR0cDovL2ZiLm1lL3Byb3AtdHlwZXMtaW4tcHJvZFxuICB2YXIgdGhyb3dPbkRpcmVjdEFjY2VzcyA9IHRydWU7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFR5cGVDaGVja2VycycpKFJlYWN0SXMuaXNFbGVtZW50LCB0aHJvd09uRGlyZWN0QWNjZXNzKTtcbn0gZWxzZSB7XG4gIC8vIEJ5IGV4cGxpY2l0bHkgdXNpbmcgYHByb3AtdHlwZXNgIHlvdSBhcmUgb3B0aW5nIGludG8gbmV3IHByb2R1Y3Rpb24gYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcycpKCk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LWRvbS5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbnZhciBTY2hlZHVsZXIgPSByZXF1aXJlKCdzY2hlZHVsZXInKTtcbnZhciB0cmFjaW5nID0gcmVxdWlyZSgnc2NoZWR1bGVyL3RyYWNpbmcnKTtcblxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XG5cbi8vIGJ5IGNhbGxzIHRvIHRoZXNlIG1ldGhvZHMgYnkgYSBCYWJlbCBwbHVnaW4uXG4vL1xuLy8gSW4gUFJPRCAob3IgaW4gcGFja2FnZXMgd2l0aG91dCBhY2Nlc3MgdG8gUmVhY3QgaW50ZXJuYWxzKSxcbi8vIHRoZXkgYXJlIGxlZnQgYXMgdGhleSBhcmUgaW5zdGVhZC5cblxuZnVuY3Rpb24gd2Fybihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnd2FybicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVycm9yKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yID4gMSA/IF9sZW4yIC0gMSA6IDApLCBfa2V5MiA9IDE7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTIgLSAxXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJpbnRXYXJuaW5nKGxldmVsLCBmb3JtYXQsIGFyZ3MpIHtcbiAgLy8gV2hlbiBjaGFuZ2luZyB0aGlzIGxvZ2ljLCB5b3UgbWlnaHQgd2FudCB0byBhbHNvXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxuICB7XG4gICAgdmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xuXG4gICAgaWYgKHN0YWNrICE9PSAnJykge1xuICAgICAgZm9ybWF0ICs9ICclcyc7XG4gICAgICBhcmdzID0gYXJncy5jb25jYXQoW3N0YWNrXSk7XG4gICAgfVxuXG4gICAgdmFyIGFyZ3NXaXRoRm9ybWF0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiAnJyArIGl0ZW07XG4gICAgfSk7IC8vIENhcmVmdWw6IFJOIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJlZml4XG5cbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcbiAgICAvLyBicmVha3MgSUU5OiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzNjEwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZ1xuXG4gICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwoY29uc29sZVtsZXZlbF0sIGNvbnNvbGUsIGFyZ3NXaXRoRm9ybWF0KTtcbiAgfVxufVxuXG5pZiAoIVJlYWN0KSB7XG4gIHtcbiAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTSB3YXMgbG9hZGVkIGJlZm9yZSBSZWFjdC4gTWFrZSBzdXJlIHlvdSBsb2FkIHRoZSBSZWFjdCBwYWNrYWdlIGJlZm9yZSBsb2FkaW5nIFJlYWN0RE9NLlwiICk7XG4gIH1cbn1cblxudmFyIEZ1bmN0aW9uQ29tcG9uZW50ID0gMDtcbnZhciBDbGFzc0NvbXBvbmVudCA9IDE7XG52YXIgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCA9IDI7IC8vIEJlZm9yZSB3ZSBrbm93IHdoZXRoZXIgaXQgaXMgZnVuY3Rpb24gb3IgY2xhc3NcblxudmFyIEhvc3RSb290ID0gMzsgLy8gUm9vdCBvZiBhIGhvc3QgdHJlZS4gQ291bGQgYmUgbmVzdGVkIGluc2lkZSBhbm90aGVyIG5vZGUuXG5cbnZhciBIb3N0UG9ydGFsID0gNDsgLy8gQSBzdWJ0cmVlLiBDb3VsZCBiZSBhbiBlbnRyeSBwb2ludCB0byBhIGRpZmZlcmVudCByZW5kZXJlci5cblxudmFyIEhvc3RDb21wb25lbnQgPSA1O1xudmFyIEhvc3RUZXh0ID0gNjtcbnZhciBGcmFnbWVudCA9IDc7XG52YXIgTW9kZSA9IDg7XG52YXIgQ29udGV4dENvbnN1bWVyID0gOTtcbnZhciBDb250ZXh0UHJvdmlkZXIgPSAxMDtcbnZhciBGb3J3YXJkUmVmID0gMTE7XG52YXIgUHJvZmlsZXIgPSAxMjtcbnZhciBTdXNwZW5zZUNvbXBvbmVudCA9IDEzO1xudmFyIE1lbW9Db21wb25lbnQgPSAxNDtcbnZhciBTaW1wbGVNZW1vQ29tcG9uZW50ID0gMTU7XG52YXIgTGF6eUNvbXBvbmVudCA9IDE2O1xudmFyIEluY29tcGxldGVDbGFzc0NvbXBvbmVudCA9IDE3O1xudmFyIERlaHlkcmF0ZWRGcmFnbWVudCA9IDE4O1xudmFyIFN1c3BlbnNlTGlzdENvbXBvbmVudCA9IDE5O1xudmFyIEZ1bmRhbWVudGFsQ29tcG9uZW50ID0gMjA7XG52YXIgU2NvcGVDb21wb25lbnQgPSAyMTtcbnZhciBCbG9jayA9IDIyO1xudmFyIE9mZnNjcmVlbkNvbXBvbmVudCA9IDIzO1xudmFyIExlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IDI0O1xuXG4vLyBGaWx0ZXIgY2VydGFpbiBET00gYXR0cmlidXRlcyAoZS5nLiBzcmMsIGhyZWYpIGlmIHRoZWlyIHZhbHVlcyBhcmUgZW1wdHkgc3RyaW5ncy5cblxudmFyIGVuYWJsZVByb2ZpbGVyVGltZXIgPSB0cnVlOyAvLyBSZWNvcmQgZHVyYXRpb25zIGZvciBjb21taXQgYW5kIHBhc3NpdmUgZWZmZWN0cyBwaGFzZXMuXG5cbnZhciBlbmFibGVGdW5kYW1lbnRhbEFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgU2NvcGUgc3VwcG9ydC5cbnZhciBlbmFibGVOZXdSZWNvbmNpbGVyID0gZmFsc2U7IC8vIEVycm9ycyB0aGF0IGFyZSB0aHJvd24gd2hpbGUgdW5tb3VudGluZyAob3IgYWZ0ZXIgaW4gdGhlIGNhc2Ugb2YgcGFzc2l2ZSBlZmZlY3RzKVxudmFyIHdhcm5BYm91dFN0cmluZ1JlZnMgPSBmYWxzZTtcblxudmFyIGFsbE5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoKTtcbi8qKlxuICogTWFwcGluZyBmcm9tIHJlZ2lzdHJhdGlvbiBuYW1lIHRvIGV2ZW50IG5hbWVcbiAqL1xuXG5cbnZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0ge307XG4vKipcbiAqIE1hcHBpbmcgZnJvbSBsb3dlcmNhc2UgcmVnaXN0cmF0aW9uIG5hbWVzIHRvIHRoZSBwcm9wZXJseSBjYXNlZCB2ZXJzaW9uLFxuICogdXNlZCB0byB3YXJuIGluIHRoZSBjYXNlIG9mIG1pc3NpbmcgZXZlbnQgaGFuZGxlcnMuIEF2YWlsYWJsZVxuICogb25seSBpbiB0cnVlLlxuICogQHR5cGUge09iamVjdH1cbiAqL1xuXG52YXIgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9ICB7fSA7IC8vIFRydXN0IHRoZSBkZXZlbG9wZXIgdG8gb25seSB1c2UgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyBpbiB0cnVlXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyVHdvUGhhc2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUgKyAnQ2FwdHVyZScsIGRlcGVuZGVuY2llcyk7XG59XG5mdW5jdGlvbiByZWdpc3RlckRpcmVjdEV2ZW50KHJlZ2lzdHJhdGlvbk5hbWUsIGRlcGVuZGVuY2llcykge1xuICB7XG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0pIHtcbiAgICAgIGVycm9yKCdFdmVudFJlZ2lzdHJ5OiBNb3JlIHRoYW4gb25lIHBsdWdpbiBhdHRlbXB0ZWQgdG8gcHVibGlzaCB0aGUgc2FtZSAnICsgJ3JlZ2lzdHJhdGlvbiBuYW1lLCBgJXNgLicsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXNbcmVnaXN0cmF0aW9uTmFtZV0gPSBkZXBlbmRlbmNpZXM7XG5cbiAge1xuICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IHJlZ2lzdHJhdGlvbk5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA9IHJlZ2lzdHJhdGlvbk5hbWU7XG5cbiAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSA9PT0gJ29uRG91YmxlQ2xpY2snKSB7XG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzLm9uZGJsY2xpY2sgPSByZWdpc3RyYXRpb25OYW1lO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZGVwZW5kZW5jaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgYWxsTmF0aXZlRXZlbnRzLmFkZChkZXBlbmRlbmNpZXNbaV0pO1xuICB9XG59XG5cbnZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgIT09ICd1bmRlZmluZWQnKTtcblxuLy8gQSByZXNlcnZlZCBhdHRyaWJ1dGUuXG4vLyBJdCBpcyBoYW5kbGVkIGJ5IFJlYWN0IHNlcGFyYXRlbHkgYW5kIHNob3VsZG4ndCBiZSB3cml0dGVuIHRvIHRoZSBET00uXG52YXIgUkVTRVJWRUQgPSAwOyAvLyBBIHNpbXBsZSBzdHJpbmcgYXR0cmlidXRlLlxuLy8gQXR0cmlidXRlcyB0aGF0IGFyZW4ndCBpbiB0aGUgZmlsdGVyIGFyZSBwcmVzdW1lZCB0byBoYXZlIHRoaXMgdHlwZS5cblxudmFyIFNUUklORyA9IDE7IC8vIEEgc3RyaW5nIGF0dHJpYnV0ZSB0aGF0IGFjY2VwdHMgYm9vbGVhbnMgaW4gUmVhY3QuIEluIEhUTUwsIHRoZXNlIGFyZSBjYWxsZWRcbi8vIFwiZW51bWVyYXRlZFwiIGF0dHJpYnV0ZXMgd2l0aCBcInRydWVcIiBhbmQgXCJmYWxzZVwiIGFzIHBvc3NpYmxlIHZhbHVlcy5cbi8vIFdoZW4gdHJ1ZSwgaXQgc2hvdWxkIGJlIHNldCB0byBhIFwidHJ1ZVwiIHN0cmluZy5cbi8vIFdoZW4gZmFsc2UsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcImZhbHNlXCIgc3RyaW5nLlxuXG52YXIgQk9PTEVBTklTSF9TVFJJTkcgPSAyOyAvLyBBIHJlYWwgYm9vbGVhbiBhdHRyaWJ1dGUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cblxudmFyIEJPT0xFQU4gPSAzOyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBjYW4gYmUgdXNlZCBhcyBhIGZsYWcgYXMgd2VsbCBhcyB3aXRoIGEgdmFsdWUuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBwcmVzZW50IChzZXQgZWl0aGVyIHRvIGFuIGVtcHR5IHN0cmluZyBvciBpdHMgbmFtZSkuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgb21pdHRlZC5cbi8vIEZvciBhbnkgb3RoZXIgdmFsdWUsIHNob3VsZCBiZSBwcmVzZW50IHdpdGggdGhhdCB2YWx1ZS5cblxudmFyIE9WRVJMT0FERURfQk9PTEVBTiA9IDQ7IC8vIEFuIGF0dHJpYnV0ZSB0aGF0IG11c3QgYmUgbnVtZXJpYyBvciBwYXJzZSBhcyBhIG51bWVyaWMuXG4vLyBXaGVuIGZhbHN5LCBpdCBzaG91bGQgYmUgcmVtb3ZlZC5cblxudmFyIE5VTUVSSUMgPSA1OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIHBvc2l0aXZlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBwb3NpdGl2ZSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBQT1NJVElWRV9OVU1FUklDID0gNjtcblxuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xudmFyIEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgPSBcIjpBLVpfYS16XFxcXHUwMEMwLVxcXFx1MDBENlxcXFx1MDBEOC1cXFxcdTAwRjZcXFxcdTAwRjgtXFxcXHUwMkZGXFxcXHUwMzcwLVxcXFx1MDM3RFxcXFx1MDM3Ri1cXFxcdTFGRkZcXFxcdTIwMEMtXFxcXHUyMDBEXFxcXHUyMDcwLVxcXFx1MjE4RlxcXFx1MkMwMC1cXFxcdTJGRUZcXFxcdTMwMDEtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRkRcIjtcbi8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG52YXIgQVRUUklCVVRFX05BTUVfQ0hBUiA9IEFUVFJJQlVURV9OQU1FX1NUQVJUX0NIQVIgKyBcIlxcXFwtLjAtOVxcXFx1MDBCN1xcXFx1MDMwMC1cXFxcdTAzNkZcXFxcdTIwM0YtXFxcXHUyMDQwXCI7XG52YXIgUk9PVF9BVFRSSUJVVEVfTkFNRSA9ICdkYXRhLXJlYWN0cm9vdCc7XG52YXIgVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVggPSBuZXcgUmVnRXhwKCdeWycgKyBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgJ11bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbnZhciB2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUgPSB7fTtcbmZ1bmN0aW9uIGlzQXR0cmlidXRlTmFtZVNhZmUoYXR0cmlidXRlTmFtZSkge1xuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbCh2YWxpZGF0ZWRBdHRyaWJ1dGVOYW1lQ2FjaGUsIGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChWQUxJRF9BVFRSSUJVVEVfTkFNRV9SRUdFWC50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlsbGVnYWxBdHRyaWJ1dGVOYW1lQ2FjaGVbYXR0cmlidXRlTmFtZV0gPSB0cnVlO1xuXG4gIHtcbiAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgbmFtZTogYCVzYCcsIGF0dHJpYnV0ZU5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAobmFtZS5sZW5ndGggPiAyICYmIChuYW1lWzBdID09PSAnbycgfHwgbmFtZVswXSA9PT0gJ08nKSAmJiAobmFtZVsxXSA9PT0gJ24nIHx8IG5hbWVbMV0gPT09ICdOJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdmdW5jdGlvbic6IC8vICRGbG93SXNzdWUgc3ltYm9sIGlzIHBlcmZlY3RseSB2YWxpZCBoZXJlXG5cbiAgICBjYXNlICdzeW1ib2wnOlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAhcHJvcGVydHlJbmZvLmFjY2VwdHNCb29sZWFucztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgcHJlZml4ID0gbmFtZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsIDUpO1xuICAgICAgICAgIHJldHVybiBwcmVmaXggIT09ICdkYXRhLScgJiYgcHJlZml4ICE9PSAnYXJpYS0nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcblxuICAgIHN3aXRjaCAocHJvcGVydHlJbmZvLnR5cGUpIHtcbiAgICAgIGNhc2UgQk9PTEVBTjpcbiAgICAgICAgcmV0dXJuICF2YWx1ZTtcblxuICAgICAgY2FzZSBPVkVSTE9BREVEX0JPT0xFQU46XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gZmFsc2U7XG5cbiAgICAgIGNhc2UgTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKTtcblxuICAgICAgY2FzZSBQT1NJVElWRV9OVU1FUklDOlxuICAgICAgICByZXR1cm4gaXNOYU4odmFsdWUpIHx8IHZhbHVlIDwgMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRQcm9wZXJ0eUluZm8obmFtZSkge1xuICByZXR1cm4gcHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHByb3BlcnRpZXNbbmFtZV0gOiBudWxsO1xufVxuXG5mdW5jdGlvbiBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgdHlwZSwgbXVzdFVzZVByb3BlcnR5LCBhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVOYW1lc3BhY2UsIHNhbml0aXplVVJMLCByZW1vdmVFbXB0eVN0cmluZykge1xuICB0aGlzLmFjY2VwdHNCb29sZWFucyA9IHR5cGUgPT09IEJPT0xFQU5JU0hfU1RSSU5HIHx8IHR5cGUgPT09IEJPT0xFQU4gfHwgdHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICB0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZSA9IGF0dHJpYnV0ZU5hbWVzcGFjZTtcbiAgdGhpcy5tdXN0VXNlUHJvcGVydHkgPSBtdXN0VXNlUHJvcGVydHk7XG4gIHRoaXMucHJvcGVydHlOYW1lID0gbmFtZTtcbiAgdGhpcy50eXBlID0gdHlwZTtcbiAgdGhpcy5zYW5pdGl6ZVVSTCA9IHNhbml0aXplVVJMO1xuICB0aGlzLnJlbW92ZUVtcHR5U3RyaW5nID0gcmVtb3ZlRW1wdHlTdHJpbmc7XG59IC8vIFdoZW4gYWRkaW5nIGF0dHJpYnV0ZXMgdG8gdGhpcyBsaXN0LCBiZSBzdXJlIHRvIGFsc28gYWRkIHRoZW0gdG9cbi8vIHRoZSBgcG9zc2libGVTdGFuZGFyZE5hbWVzYCBtb2R1bGUgdG8gZW5zdXJlIGNhc2luZyBhbmQgaW5jb3JyZWN0XG4vLyBuYW1lIHdhcm5pbmdzLlxuXG5cbnZhciBwcm9wZXJ0aWVzID0ge307IC8vIFRoZXNlIHByb3BzIGFyZSByZXNlcnZlZCBieSBSZWFjdC4gVGhleSBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxuXG52YXIgcmVzZXJ2ZWRQcm9wcyA9IFsnY2hpbGRyZW4nLCAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLCAvLyBUT0RPOiBUaGlzIHByZXZlbnRzIHRoZSBhc3NpZ25tZW50IG9mIGRlZmF1bHRWYWx1ZSB0byByZWd1bGFyXG4vLyBlbGVtZW50cyAobm90IGp1c3QgaW5wdXRzKS4gTm93IHRoYXQgUmVhY3RET01JbnB1dCBhc3NpZ25zIHRvIHRoZVxuLy8gZGVmYXVsdFZhbHVlIHByb3BlcnR5IC0tIGRvIHdlIG5lZWQgdGhpcz9cbidkZWZhdWx0VmFsdWUnLCAnZGVmYXVsdENoZWNrZWQnLCAnaW5uZXJIVE1MJywgJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLCAnc3R5bGUnXTtcbnJlc2VydmVkUHJvcHMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBSRVNFUlZFRCwgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIEEgZmV3IFJlYWN0IHN0cmluZyBhdHRyaWJ1dGVzIGhhdmUgYSBkaWZmZXJlbnQgbmFtZS5cbi8vIFRoaXMgaXMgYSBtYXBwaW5nIGZyb20gUmVhY3QgcHJvcCBuYW1lcyB0byB0aGUgYXR0cmlidXRlIG5hbWVzLlxuXG5bWydhY2NlcHRDaGFyc2V0JywgJ2FjY2VwdC1jaGFyc2V0J10sIFsnY2xhc3NOYW1lJywgJ2NsYXNzJ10sIFsnaHRtbEZvcicsICdmb3InXSwgWydodHRwRXF1aXYnLCAnaHR0cC1lcXVpdiddXS5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBuYW1lID0gX3JlZlswXSxcbiAgICAgIGF0dHJpYnV0ZU5hbWUgPSBfcmVmWzFdO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYWNjZXB0IFwidHJ1ZVwiIGFuZCBcImZhbHNlXCIuXG4vLyBJbiBSZWFjdCwgd2UgbGV0IHVzZXJzIHBhc3MgYHRydWVgIGFuZCBgZmFsc2VgIGV2ZW4gdGhvdWdoIHRlY2huaWNhbGx5XG4vLyB0aGVzZSBhcmVuJ3QgYm9vbGVhbiBhdHRyaWJ1dGVzICh0aGV5IGFyZSBjb2VyY2VkIHRvIHN0cmluZ3MpLlxuXG5bJ2NvbnRlbnRFZGl0YWJsZScsICdkcmFnZ2FibGUnLCAnc3BlbGxDaGVjaycsICd2YWx1ZSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBcImVudW1lcmF0ZWRcIiBTVkcgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cbi8vIFNpbmNlIHRoZXNlIGFyZSBTVkcgYXR0cmlidXRlcywgdGhlaXIgYXR0cmlidXRlIG5hbWVzIGFyZSBjYXNlLXNlbnNpdGl2ZS5cblxuWydhdXRvUmV2ZXJzZScsICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJywgJ2ZvY3VzYWJsZScsICdwcmVzZXJ2ZUFscGhhJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOSVNIX1NUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBuYW1lLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSBIVE1MIGJvb2xlYW4gYXR0cmlidXRlcy5cblxuWydhbGxvd0Z1bGxTY3JlZW4nLCAnYXN5bmMnLCAvLyBOb3RlOiB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IHByZXZlbnRzIGl0IGZyb20gYmVpbmcgd3JpdHRlbiB0byB0aGUgRE9NXG4vLyBvbiB0aGUgY2xpZW50IHNpZGUgYmVjYXVzZSB0aGUgYnJvd3NlcnMgYXJlIGluY29uc2lzdGVudC4gSW5zdGVhZCB3ZSBjYWxsIGZvY3VzKCkuXG4nYXV0b0ZvY3VzJywgJ2F1dG9QbGF5JywgJ2NvbnRyb2xzJywgJ2RlZmF1bHQnLCAnZGVmZXInLCAnZGlzYWJsZWQnLCAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLCAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJywgJ2Zvcm1Ob1ZhbGlkYXRlJywgJ2hpZGRlbicsICdsb29wJywgJ25vTW9kdWxlJywgJ25vVmFsaWRhdGUnLCAnb3BlbicsICdwbGF5c0lubGluZScsICdyZWFkT25seScsICdyZXF1aXJlZCcsICdyZXZlcnNlZCcsICdzY29wZWQnLCAnc2VhbWxlc3MnLCAvLyBNaWNyb2RhdGFcbidpdGVtU2NvcGUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGFyZSB0aGUgZmV3IFJlYWN0IHByb3BzIHRoYXQgd2Ugc2V0IGFzIERPTSBwcm9wZXJ0aWVzXG4vLyByYXRoZXIgdGhhbiBhdHRyaWJ1dGVzLiBUaGVzZSBhcmUgYWxsIGJvb2xlYW5zLlxuXG5bJ2NoZWNrZWQnLCAvLyBOb3RlOiBgb3B0aW9uLnNlbGVjdGVkYCBpcyBub3QgdXBkYXRlZCBpZiBgc2VsZWN0Lm11bHRpcGxlYCBpc1xuLy8gZGlzYWJsZWQgd2l0aCBgcmVtb3ZlQXR0cmlidXRlYC4gV2UgaGF2ZSBzcGVjaWFsIGxvZ2ljIGZvciBoYW5kbGluZyB0aGlzLlxuJ211bHRpcGxlJywgJ211dGVkJywgJ3NlbGVjdGVkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCB0cnVlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgYXJlIFwib3ZlcmxvYWRlZCBib29sZWFuc1wiOiB0aGV5IGJlaGF2ZSBsaWtlXG4vLyBib29sZWFucywgYnV0IGNhbiBhbHNvIGFjY2VwdCBhIHN0cmluZyB2YWx1ZS5cblxuWydjYXB0dXJlJywgJ2Rvd25sb2FkJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBPVkVSTE9BREVEX0JPT0xFQU4sIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1iZXJzLlxuXG5bJ2NvbHMnLCAncm93cycsICdzaXplJywgJ3NwYW4nIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFBPU0lUSVZFX05VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBhdHRyaWJ1dGVzIHRoYXQgbXVzdCBiZSBudW1iZXJzLlxuXG5bJ3Jvd1NwYW4nLCAnc3RhcnQnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIE5VTUVSSUMsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7XG52YXIgQ0FNRUxJWkUgPSAvW1xcLVxcOl0oW2Etel0pL2c7XG5cbnZhciBjYXBpdGFsaXplID0gZnVuY3Rpb24gKHRva2VuKSB7XG4gIHJldHVybiB0b2tlblsxXS50b1VwcGVyQ2FzZSgpO1xufTsgLy8gVGhpcyBpcyBhIGxpc3Qgb2YgYWxsIFNWRyBhdHRyaWJ1dGVzIHRoYXQgbmVlZCBzcGVjaWFsIGNhc2luZywgbmFtZXNwYWNpbmcsXG4vLyBvciBib29sZWFuIHZhbHVlIGFzc2lnbm1lbnQuIFJlZ3VsYXIgYXR0cmlidXRlcyB0aGF0IGp1c3QgYWNjZXB0IHN0cmluZ3Ncbi8vIGFuZCBoYXZlIHRoZSBzYW1lIG5hbWVzIGFyZSBvbWl0dGVkLCBqdXN0IGxpa2UgaW4gdGhlIEhUTUwgYXR0cmlidXRlIGZpbHRlci5cbi8vIFNvbWUgb2YgdGhlc2UgYXR0cmlidXRlcyBjYW4gYmUgaGFyZCB0byBmaW5kLiBUaGlzIGxpc3Qgd2FzIGNyZWF0ZWQgYnlcbi8vIHNjcmFwaW5nIHRoZSBNRE4gZG9jdW1lbnRhdGlvbi5cblxuXG5bJ2FjY2VudC1oZWlnaHQnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FyYWJpYy1mb3JtJywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2NhcC1oZWlnaHQnLCAnY2xpcC1wYXRoJywgJ2NsaXAtcnVsZScsICdjb2xvci1pbnRlcnBvbGF0aW9uJywgJ2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVycycsICdjb2xvci1wcm9maWxlJywgJ2NvbG9yLXJlbmRlcmluZycsICdkb21pbmFudC1iYXNlbGluZScsICdlbmFibGUtYmFja2dyb3VuZCcsICdmaWxsLW9wYWNpdHknLCAnZmlsbC1ydWxlJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2dseXBoLW5hbWUnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdob3Jpei1hZHYteCcsICdob3Jpei1vcmlnaW4teCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnbGV0dGVyLXNwYWNpbmcnLCAnbGlnaHRpbmctY29sb3InLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdvdmVybGluZS1wb3NpdGlvbicsICdvdmVybGluZS10aGlja25lc3MnLCAncGFpbnQtb3JkZXInLCAncGFub3NlLTEnLCAncG9pbnRlci1ldmVudHMnLCAncmVuZGVyaW5nLWludGVudCcsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3RvcC1jb2xvcicsICdzdG9wLW9wYWNpdHknLCAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbicsICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcycsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2Utd2lkdGgnLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3VuZGVybGluZS1wb3NpdGlvbicsICd1bmRlcmxpbmUtdGhpY2tuZXNzJywgJ3VuaWNvZGUtYmlkaScsICd1bmljb2RlLXJhbmdlJywgJ3VuaXRzLXBlci1lbScsICd2LWFscGhhYmV0aWMnLCAndi1oYW5naW5nJywgJ3YtaWRlb2dyYXBoaWMnLCAndi1tYXRoZW1hdGljYWwnLCAndmVjdG9yLWVmZmVjdCcsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3b3JkLXNwYWNpbmcnLCAnd3JpdGluZy1tb2RlJywgJ3htbG5zOnhsaW5rJywgJ3gtaGVpZ2h0JyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICB2YXIgbmFtZSA9IGF0dHJpYnV0ZU5hbWUucmVwbGFjZShDQU1FTElaRSwgY2FwaXRhbGl6ZSk7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLCBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeGxpbmsgbmFtZXNwYWNlLlxuXG5bJ3hsaW5rOmFjdHVhdGUnLCAneGxpbms6YXJjcm9sZScsICd4bGluazpyb2xlJywgJ3hsaW5rOnNob3cnLCAneGxpbms6dGl0bGUnLCAneGxpbms6dHlwZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFN0cmluZyBTVkcgYXR0cmlidXRlcyB3aXRoIHRoZSB4bWwgbmFtZXNwYWNlLlxuXG5bJ3htbDpiYXNlJywgJ3htbDpsYW5nJywgJ3htbDpzcGFjZScgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgJ2h0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZScsIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlIGV4aXN0cyBib3RoIGluIEhUTUwgYW5kIFNWRy5cbi8vIFRoZSBhdHRyaWJ1dGUgbmFtZSBpcyBjYXNlLXNlbnNpdGl2ZSBpbiBTVkcgc28gd2UgY2FuJ3QganVzdCB1c2Vcbi8vIHRoZSBSZWFjdCBuYW1lIGxpa2Ugd2UgZG8gZm9yIGF0dHJpYnV0ZXMgdGhhdCBleGlzdCBvbmx5IGluIEhUTUwuXG5cblsndGFiSW5kZXgnLCAnY3Jvc3NPcmlnaW4nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXR0cmlidXRlcyBhY2NlcHQgVVJMcy4gVGhlc2UgbXVzdCBub3QgYWxsb3cgamF2YXNjcmlwdDogVVJMUy5cbi8vIFRoZXNlIHdpbGwgYWxzbyBuZWVkIHRvIGFjY2VwdCBUcnVzdGVkIFR5cGVzIG9iamVjdCBpbiB0aGUgZnV0dXJlLlxuXG52YXIgeGxpbmtIcmVmID0gJ3hsaW5rSHJlZic7XG5wcm9wZXJ0aWVzW3hsaW5rSHJlZl0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKCd4bGlua0hyZWYnLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbid4bGluazpocmVmJywgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnLCB0cnVlLCAvLyBzYW5pdGl6ZVVSTFxuZmFsc2UpO1xuWydzcmMnLCAnaHJlZicsICdhY3Rpb24nLCAnZm9ybUFjdGlvbiddLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgcHJvcGVydGllc1thdHRyaWJ1dGVOYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQoYXR0cmlidXRlTmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbiAgdHJ1ZSk7XG59KTtcblxuLy8gYW5kIGFueSBuZXdsaW5lIG9yIHRhYiBhcmUgZmlsdGVyZWQgb3V0IGFzIGlmIHRoZXkncmUgbm90IHBhcnQgb2YgdGhlIFVSTC5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdXJsLXBhcnNpbmdcbi8vIFRhYiBvciBuZXdsaW5lIGFyZSBkZWZpbmVkIGFzIFxcclxcblxcdDpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS10YWItb3ItbmV3bGluZVxuLy8gQSBDMCBjb250cm9sIGlzIGEgY29kZSBwb2ludCBpbiB0aGUgcmFuZ2UgXFx1MDAwMCBOVUxMIHRvIFxcdTAwMUZcbi8vIElORk9STUFUSU9OIFNFUEFSQVRPUiBPTkUsIGluY2x1c2l2ZTpcbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjMC1jb250cm9sLW9yLXNwYWNlXG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxudmFyIGlzSmF2YVNjcmlwdFByb3RvY29sID0gL15bXFx1MDAwMC1cXHUwMDFGIF0qaltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSp2W1xcclxcblxcdF0qYVtcXHJcXG5cXHRdKnNbXFxyXFxuXFx0XSpjW1xcclxcblxcdF0qcltcXHJcXG5cXHRdKmlbXFxyXFxuXFx0XSpwW1xcclxcblxcdF0qdFtcXHJcXG5cXHRdKlxcOi9pO1xudmFyIGRpZFdhcm4gPSBmYWxzZTtcblxuZnVuY3Rpb24gc2FuaXRpemVVUkwodXJsKSB7XG4gIHtcbiAgICBpZiAoIWRpZFdhcm4gJiYgaXNKYXZhU2NyaXB0UHJvdG9jb2wudGVzdCh1cmwpKSB7XG4gICAgICBkaWRXYXJuID0gdHJ1ZTtcblxuICAgICAgZXJyb3IoJ0EgZnV0dXJlIHZlcnNpb24gb2YgUmVhY3Qgd2lsbCBibG9jayBqYXZhc2NyaXB0OiBVUkxzIGFzIGEgc2VjdXJpdHkgcHJlY2F1dGlvbi4gJyArICdVc2UgZXZlbnQgaGFuZGxlcnMgaW5zdGVhZCBpZiB5b3UgY2FuLiBJZiB5b3UgbmVlZCB0byBnZW5lcmF0ZSB1bnNhZmUgSFRNTCB0cnkgJyArICd1c2luZyBkYW5nZXJvdXNseVNldElubmVySFRNTCBpbnN0ZWFkLiBSZWFjdCB3YXMgcGFzc2VkICVzLicsIEpTT04uc3RyaW5naWZ5KHVybCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSBcImV4cGVjdGVkXCIgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuXG4gKiBTb21lIHByb3BlcnRpZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvKSB7XG4gIHtcbiAgICBpZiAocHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eSkge1xuICAgICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG4gICAgICByZXR1cm4gbm9kZVtwcm9wZXJ0eU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGZ1bGx5IGRpc2FibGVkIGphdmFzY3JpcHQ6IFVSTHMsIGFuZCBpZlxuICAgICAgICAvLyB0aGUgaHlkcmF0aW9uIGlzIHN1Y2Nlc3NmdWwgb2YgYSBqYXZhc2NyaXB0OiBVUkwsIHdlXG4gICAgICAgIC8vIHN0aWxsIHdhbnQgdG8gd2FybiBvbiB0aGUgY2xpZW50LlxuICAgICAgICBzYW5pdGl6ZVVSTCgnJyArIGV4cGVjdGVkKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZTtcbiAgICAgIHZhciBzdHJpbmdWYWx1ZSA9IG51bGw7XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gT1ZFUkxPQURFRF9CT09MRUFOKSB7XG4gICAgICAgIGlmIChub2RlLmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCBleHBlY3RlZCwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgICAgICAvLyBXZSBoYWQgYW4gYXR0cmlidXRlIGJ1dCBzaG91bGRuJ3QgaGF2ZSBoYWQgb25lLCBzbyByZWFkIGl0XG4gICAgICAgICAgLy8gZm9yIHRoZSBlcnJvciBtZXNzYWdlLlxuICAgICAgICAgIHJldHVybiBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgICAgIC8vIElmIHRoaXMgd2FzIGEgYm9vbGVhbiwgaXQgZG9lc24ndCBtYXR0ZXIgd2hhdCB0aGUgdmFsdWUgaXNcbiAgICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgaXQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cGVjdGVkLlxuICAgICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgICAgfSAvLyBFdmVuIGlmIHRoaXMgcHJvcGVydHkgdXNlcyBhIG5hbWVzcGFjZSB3ZSB1c2UgZ2V0QXR0cmlidXRlXG4gICAgICAgIC8vIGJlY2F1c2Ugd2UgYXNzdW1lIGl0cyBuYW1lc3BhY2VkIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNvbmZpZy5cbiAgICAgICAgLy8gVG8gdXNlIGdldEF0dHJpYnV0ZU5TIHdlIG5lZWQgdGhlIGxvY2FsIG5hbWUgd2hpY2ggd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBpbiBvdXIgY29uZmlnIGF0bS5cblxuXG4gICAgICAgIHN0cmluZ1ZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZSA9PT0gbnVsbCA/IGV4cGVjdGVkIDogc3RyaW5nVmFsdWU7XG4gICAgICB9IGVsc2UgaWYgKHN0cmluZ1ZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYSBhdHRyaWJ1dGUgb24gYSBub2RlLiBPbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBpcyB1c2VkIGFzIGEgaGludCBvZiB3aGF0IHRoZSBleHBlY3RlZCB2YWx1ZSBpcy4gU29tZVxuICogYXR0cmlidXRlcyBoYXZlIG11bHRpcGxlIGVxdWl2YWxlbnQgdmFsdWVzLlxuICovXG5cbmZ1bmN0aW9uIGdldFZhbHVlRm9yQXR0cmlidXRlKG5vZGUsIG5hbWUsIGV4cGVjdGVkKSB7XG4gIHtcbiAgICBpZiAoIWlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHRoZSBvYmplY3QgaXMgYW4gb3BhcXVlIHJlZmVyZW5jZSBJRCwgaXQncyBleHBlY3RlZCB0aGF0XG4gICAgLy8gdGhlIG5leHQgcHJvcCBpcyBkaWZmZXJlbnQgdGhhbiB0aGUgc2VydmVyIHZhbHVlLCBzbyBqdXN0IHJldHVyblxuICAgIC8vIGV4cGVjdGVkXG5cblxuICAgIGlmIChpc09wYXF1ZUh5ZHJhdGluZ09iamVjdChleHBlY3RlZCkpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICBpZiAoIW5vZGUuaGFzQXR0cmlidXRlKG5hbWUpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gbm9kZS5nZXRBdHRyaWJ1dGUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUgPT09ICcnICsgZXhwZWN0ZWQpIHtcbiAgICAgIHJldHVybiBleHBlY3RlZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgZm9yIGEgcHJvcGVydHkgb24gYSBub2RlLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclByb3BlcnR5KG5vZGUsIG5hbWUsIHZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICB2YXIgcHJvcGVydHlJbmZvID0gZ2V0UHJvcGVydHlJbmZvKG5hbWUpO1xuXG4gIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1dGUobmFtZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgIHZhbHVlID0gbnVsbDtcbiAgfSAvLyBJZiB0aGUgcHJvcCBpc24ndCBpbiB0aGUgc3BlY2lhbCBsaXN0LCB0cmVhdCBpdCBhcyBhIHNpbXBsZSBhdHRyaWJ1dGUuXG5cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcgfHwgcHJvcGVydHlJbmZvID09PSBudWxsKSB7XG4gICAgaWYgKGlzQXR0cmlidXRlTmFtZVNhZmUobmFtZSkpIHtcbiAgICAgIHZhciBfYXR0cmlidXRlTmFtZSA9IG5hbWU7XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShfYXR0cmlidXRlTmFtZSwgICcnICsgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtdXN0VXNlUHJvcGVydHkgPSBwcm9wZXJ0eUluZm8ubXVzdFVzZVByb3BlcnR5O1xuXG4gIGlmIChtdXN0VXNlUHJvcGVydHkpIHtcbiAgICB2YXIgcHJvcGVydHlOYW1lID0gcHJvcGVydHlJbmZvLnByb3BlcnR5TmFtZTtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIHR5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICAgIG5vZGVbcHJvcGVydHlOYW1lXSA9IHR5cGUgPT09IEJPT0xFQU4gPyBmYWxzZSA6ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDb250cmFyeSB0byBgc2V0QXR0cmlidXRlYCwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIHByb3Blcmx5XG4gICAgICAvLyBgdG9TdHJpbmdgZWQgYnkgSUU4LzkuXG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gVGhlIHJlc3QgYXJlIHRyZWF0ZWQgYXMgYXR0cmlidXRlcyB3aXRoIHNwZWNpYWwgY2FzZXMuXG5cblxuICB2YXIgYXR0cmlidXRlTmFtZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lLFxuICAgICAgYXR0cmlidXRlTmFtZXNwYWNlID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWVzcGFjZTtcblxuICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICBub2RlLnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX3R5cGUgPSBwcm9wZXJ0eUluZm8udHlwZTtcbiAgICB2YXIgYXR0cmlidXRlVmFsdWU7XG5cbiAgICBpZiAoX3R5cGUgPT09IEJPT0xFQU4gfHwgX3R5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTiAmJiB2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gSWYgYXR0cmlidXRlIHR5cGUgaXMgYm9vbGVhbiwgd2Uga25vdyBmb3Igc3VyZSBpdCB3b24ndCBiZSBhbiBleGVjdXRpb24gc2lua1xuICAgICAgLy8gYW5kIHdlIHdvbid0IHJlcXVpcmUgVHJ1c3RlZCBUeXBlIGhlcmUuXG4gICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBgc2V0QXR0cmlidXRlYCB3aXRoIG9iamVjdHMgYmVjb21lcyBvbmx5IGBbb2JqZWN0XWAgaW4gSUU4LzksXG4gICAgICAvLyAoJycgKyB2YWx1ZSkgbWFrZXMgaXQgb3V0cHV0IHRoZSBjb3JyZWN0IHRvU3RyaW5nKCktdmFsdWUuXG4gICAgICB7XG4gICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5SW5mby5zYW5pdGl6ZVVSTCkge1xuICAgICAgICBzYW5pdGl6ZVVSTChhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYXR0cmlidXRlTmFtZXNwYWNlKSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJpYnV0ZU5hbWVzcGFjZSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lLCBhdHRyaWJ1dGVWYWx1ZSk7XG4gICAgfVxuICB9XG59XG5cbi8vIEFUVEVOVElPTlxuLy8gV2hlbiBhZGRpbmcgbmV3IHN5bWJvbHMgdG8gdGhpcyBmaWxlLFxuLy8gUGxlYXNlIGNvbnNpZGVyIGFsc28gYWRkaW5nIHRvICdyZWFjdC1kZXZ0b29scy1zaGFyZWQvc3JjL2JhY2tlbmQvUmVhY3RTeW1ib2xzJ1xuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuIElmIHRoZXJlIGlzIG5vIG5hdGl2ZSBTeW1ib2xcbi8vIG5vciBwb2x5ZmlsbCwgdGhlbiBhIHBsYWluIG51bWJlciBpcyB1c2VkIGZvciBwZXJmb3JtYW5jZS5cbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSAweGVhY2E7XG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcbiAgUkVBQ1RfUFJPRklMRVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvZmlsZXInKTtcbiAgUkVBQ1RfUFJPVklERVJfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucHJvdmlkZXInKTtcbiAgUkVBQ1RfQ09OVEVYVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5jb250ZXh0Jyk7XG4gIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG4gIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlJyk7XG4gIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xuICBSRUFDVF9NRU1PX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm1lbW8nKTtcbiAgUkVBQ1RfTEFaWV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sYXp5Jyk7XG4gIFJFQUNUX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmJsb2NrJyk7XG4gIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zZXJ2ZXIuYmxvY2snKTtcbiAgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZnVuZGFtZW50YWwnKTtcbiAgUkVBQ1RfU0NPUEVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2NvcGUnKTtcbiAgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9wYXF1ZS5pZCcpO1xuICBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZGVidWdfdHJhY2VfbW9kZScpO1xuICBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub2Zmc2NyZWVuJyk7XG4gIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGVnYWN5X2hpZGRlbicpO1xufVxuXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XG5mdW5jdGlvbiBnZXRJdGVyYXRvckZuKG1heWJlSXRlcmFibGUpIHtcbiAgaWYgKG1heWJlSXRlcmFibGUgPT09IG51bGwgfHwgdHlwZW9mIG1heWJlSXRlcmFibGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XG5cbiAgaWYgKHR5cGVvZiBtYXliZUl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLy8gSGVscGVycyB0byBwYXRjaCBjb25zb2xlLmxvZ3MgdG8gYXZvaWQgbG9nZ2luZyBkdXJpbmcgc2lkZS1lZmZlY3QgZnJlZVxuLy8gcmVwbGF5aW5nIG9uIHJlbmRlciBmdW5jdGlvbi4gVGhpcyBjdXJyZW50bHkgb25seSBwYXRjaGVzIHRoZSBvYmplY3Rcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cbi8vIFdlIGNvdWxkIGFsc28gZWFnZXJseSBwYXRjaCB0aGUgbWV0aG9kLlxudmFyIGRpc2FibGVkRGVwdGggPSAwO1xudmFyIHByZXZMb2c7XG52YXIgcHJldkluZm87XG52YXIgcHJldldhcm47XG52YXIgcHJldkVycm9yO1xudmFyIHByZXZHcm91cDtcbnZhciBwcmV2R3JvdXBDb2xsYXBzZWQ7XG52YXIgcHJldkdyb3VwRW5kO1xuXG5mdW5jdGlvbiBkaXNhYmxlZExvZygpIHt9XG5cbmRpc2FibGVkTG9nLl9fcmVhY3REaXNhYmxlZExvZyA9IHRydWU7XG5mdW5jdGlvbiBkaXNhYmxlTG9ncygpIHtcbiAge1xuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcbiAgICAgIHByZXZJbmZvID0gY29uc29sZS5pbmZvO1xuICAgICAgcHJldldhcm4gPSBjb25zb2xlLndhcm47XG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICAgICAgcHJldkdyb3VwID0gY29uc29sZS5ncm91cDtcbiAgICAgIHByZXZHcm91cENvbGxhcHNlZCA9IGNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQ7XG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XG5cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogZGlzYWJsZWRMb2csXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGluZm86IHByb3BzLFxuICAgICAgICBsb2c6IHByb3BzLFxuICAgICAgICB3YXJuOiBwcm9wcyxcbiAgICAgICAgZXJyb3I6IHByb3BzLFxuICAgICAgICBncm91cDogcHJvcHMsXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBFbmQ6IHByb3BzXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgZGlzYWJsZWREZXB0aCsrO1xuICB9XG59XG5mdW5jdGlvbiByZWVuYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBkaXNhYmxlZERlcHRoLS07XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgbG9nOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2TG9nXG4gICAgICAgIH0pLFxuICAgICAgICBpbmZvOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xuICAgICAgICB9KSxcbiAgICAgICAgd2FybjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldldhcm5cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2RXJyb3JcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwQ29sbGFwc2VkOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBDb2xsYXBzZWRcbiAgICAgICAgfSksXG4gICAgICAgIGdyb3VwRW5kOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBFbmRcbiAgICAgICAgfSlcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBpZiAoZGlzYWJsZWREZXB0aCA8IDApIHtcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IG51bGw7XG4gICAgZGlzYWJsZUxvZ3MoKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXG4gICAgaWYgKGNvbnN0cnVjdCkge1xuICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXG4gICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH07IC8vICRGbG93Rml4TWVcblxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xuICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cbiAgICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyAmJiBSZWZsZWN0LmNvbnN0cnVjdCkge1xuICAgICAgICAvLyBXZSBjb25zdHJ1Y3QgYSBkaWZmZXJlbnQgY29udHJvbCBmb3IgdGhpcyBjYXNlIHRvIGluY2x1ZGUgYW55IGV4dHJhXG4gICAgICAgIC8vIGZyYW1lcyBhZGRlZCBieSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoRmFrZSwgW10pO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChmbiwgW10sIEZha2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBGYWtlLmNhbGwoKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgZm4uY2FsbChGYWtlLnByb3RvdHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgfVxuXG4gICAgICBmbigpO1xuICAgIH1cbiAgfSBjYXRjaCAoc2FtcGxlKSB7XG4gICAgLy8gVGhpcyBpcyBpbmxpbmVkIG1hbnVhbGx5IGJlY2F1c2UgY2xvc3VyZSBkb2Vzbid0IGRvIGl0IGZvciB1cy5cbiAgICBpZiAoc2FtcGxlICYmIGNvbnRyb2wgJiYgdHlwZW9mIHNhbXBsZS5zdGFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIFRoaXMgZXh0cmFjdHMgdGhlIGZpcnN0IGZyYW1lIGZyb20gdGhlIHNhbXBsZSB0aGF0IGlzbid0IGFsc28gaW4gdGhlIGNvbnRyb2wuXG4gICAgICAvLyBTa2lwcGluZyBvbmUgZnJhbWUgdGhhdCB3ZSBhc3N1bWUgaXMgdGhlIGZyYW1lIHRoYXQgY2FsbHMgdGhlIHR3by5cbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZS5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgY29udHJvbExpbmVzID0gY29udHJvbC5zdGFjay5zcGxpdCgnXFxuJyk7XG4gICAgICB2YXIgcyA9IHNhbXBsZUxpbmVzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgYyA9IGNvbnRyb2xMaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCAmJiBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxuICAgICAgICAvLyBUeXBpY2FsbHkgdGhpcyB3aWxsIGJlIHRoZSByb290IG1vc3Qgb25lLiBIb3dldmVyLCBzdGFjayBmcmFtZXMgbWF5IGJlXG4gICAgICAgIC8vIGN1dCBvZmYgZHVlIHRvIG1heGltdW0gc3RhY2sgbGltaXRzLiBJbiB0aGlzIGNhc2UsIG9uZSBtYXliZSBjdXQgb2ZmXG4gICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXG4gICAgICAgIC8vIGFuZCB0aGVyZSBmb3IgY3V0IG9mZiBlYXJsaWVyLiBTbyB3ZSBzaG91bGQgZmluZCB0aGUgcm9vdCBtb3N0IGZyYW1lIGluXG4gICAgICAgIC8vIHRoZSBzYW1wbGUgc29tZXdoZXJlIGluIHRoZSBjb250cm9sLlxuICAgICAgICBjLS07XG4gICAgICB9XG5cbiAgICAgIGZvciAoOyBzID49IDEgJiYgYyA+PSAwOyBzLS0sIGMtLSkge1xuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcbiAgICAgICAgLy8gZnJhbWUgdGhhdCBjYWxsZWQgb3VyIHNhbXBsZSBmdW5jdGlvbiBhbmQgdGhlIGNvbnRyb2wuXG4gICAgICAgIGlmIChzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cbiAgICAgICAgICAvLyBJZiB3ZSdyZSBhYm91dCB0byByZXR1cm4gdGhlIGZpcnN0IGxpbmUsIGFuZCB0aGUgY29udHJvbCBpcyBhbHNvIG9uIHRoZSBzYW1lXG4gICAgICAgICAgLy8gbGluZSwgdGhhdCdzIGEgcHJldHR5IGdvb2QgaW5kaWNhdG9yIHRoYXQgb3VyIHNhbXBsZSB0aHJldyBhdCBzYW1lIGxpbmUgYXNcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXG4gICAgICAgICAgLy8gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBwYXNzZWQgYSBjbGFzcyB0byBmdW5jdGlvbiBjb21wb25lbnQsIG9yIG5vbi1mdW5jdGlvbi5cbiAgICAgICAgICBpZiAocyAhPT0gMSB8fCBjICE9PSAxKSB7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHMtLTtcbiAgICAgICAgICAgICAgYy0tOyAvLyBXZSBtYXkgc3RpbGwgaGF2ZSBzaW1pbGFyIGludGVybWVkaWF0ZSBmcmFtZXMgZnJvbSB0aGUgY29uc3RydWN0IGNhbGwuXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxuXG4gICAgICAgICAgICAgIGlmIChjIDwgMCB8fCBzYW1wbGVMaW5lc1tzXSAhPT0gY29udHJvbExpbmVzW2NdKSB7XG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXG4gICAgICAgICAgICAgICAgdmFyIF9mcmFtZSA9ICdcXG4nICsgc2FtcGxlTGluZXNbc10ucmVwbGFjZSgnIGF0IG5ldyAnLCAnIGF0ICcpO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgX2ZyYW1lKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IC8vIFJldHVybiB0aGUgbGluZSB3ZSBmb3VuZC5cblxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mcmFtZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgcmVlbnRyeSA9IGZhbHNlO1xuXG4gICAge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGN0b3IsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoY3RvciwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZUZpYmVyKGZpYmVyKSB7XG4gIHZhciBvd25lciA9ICBmaWJlci5fZGVidWdPd25lciA/IGZpYmVyLl9kZWJ1Z093bmVyLnR5cGUgOiBudWxsIDtcbiAgdmFyIHNvdXJjZSA9ICBmaWJlci5fZGVidWdTb3VyY2UgO1xuXG4gIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgY2FzZSBMYXp5Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdMYXp5Jyk7XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlTGlzdCcpO1xuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5yZW5kZXIpO1xuXG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZS5fcmVuZGVyKTtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZGVzY3JpYmVDbGFzc0NvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRTdGFja0J5RmliZXJJbkRldkFuZFByb2Qod29ya0luUHJvZ3Jlc3MpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaW5mbyA9ICcnO1xuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICBkbyB7XG4gICAgICBpbmZvICs9IGRlc2NyaWJlRmliZXIobm9kZSk7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfSB3aGlsZSAobm9kZSk7XG5cbiAgICByZXR1cm4gaW5mbztcbiAgfSBjYXRjaCAoeCkge1xuICAgIHJldHVybiAnXFxuRXJyb3IgZ2VuZXJhdGluZyBzdGFjazogJyArIHgubWVzc2FnZSArICdcXG4nICsgeC5zdGFjaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRXcmFwcGVkTmFtZShvdXRlclR5cGUsIGlubmVyVHlwZSwgd3JhcHBlck5hbWUpIHtcbiAgdmFyIGZ1bmN0aW9uTmFtZSA9IGlubmVyVHlwZS5kaXNwbGF5TmFtZSB8fCBpbm5lclR5cGUubmFtZSB8fCAnJztcbiAgcmV0dXJuIG91dGVyVHlwZS5kaXNwbGF5TmFtZSB8fCAoZnVuY3Rpb25OYW1lICE9PSAnJyA/IHdyYXBwZXJOYW1lICsgXCIoXCIgKyBmdW5jdGlvbk5hbWUgKyBcIilcIiA6IHdyYXBwZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xuICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCAnQ29udGV4dCc7XG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWUodHlwZSkge1xuICBpZiAodHlwZSA9PSBudWxsKSB7XG4gICAgLy8gSG9zdCByb290LCB0ZXh0IG5vZGUgb3IganVzdCBpbnZhbGlkIHR5cGUuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhbiB1bmV4cGVjdGVkIG9iamVjdCBpbiBnZXRDb21wb25lbnROYW1lKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XG5cbiAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xuXG4gICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XG5cbiAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbnZhciBjdXJyZW50ID0gbnVsbDtcbnZhciBpc1JlbmRlcmluZyA9IGZhbHNlO1xuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG93bmVyID0gY3VycmVudC5fZGVidWdPd25lcjtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3duZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldigpIHtcbiAge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSAvLyBTYWZlIGJlY2F1c2UgaWYgY3VycmVudCBmaWJlciBleGlzdHMsIHdlIGFyZSByZWNvbmNpbGluZyxcbiAgICAvLyBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0byBiZSB0aGUgd29yay1pbi1wcm9ncmVzcyB2ZXJzaW9uLlxuXG5cbiAgICByZXR1cm4gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKGN1cnJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0Q3VycmVudEZpYmVyKCkge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuICAgIGN1cnJlbnQgPSBudWxsO1xuICAgIGlzUmVuZGVyaW5nID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEN1cnJlbnRGaWJlcihmaWJlcikge1xuICB7XG4gICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBnZXRDdXJyZW50RmliZXJTdGFja0luRGV2O1xuICAgIGN1cnJlbnQgPSBmaWJlcjtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRJc1JlbmRlcmluZyhyZW5kZXJpbmcpIHtcbiAge1xuICAgIGlzUmVuZGVyaW5nID0gcmVuZGVyaW5nO1xuICB9XG59XG5mdW5jdGlvbiBnZXRJc1JlbmRlcmluZygpIHtcbiAge1xuICAgIHJldHVybiBpc1JlbmRlcmluZztcbiAgfVxufVxuXG4vLyBGbG93IGRvZXMgbm90IGFsbG93IHN0cmluZyBjb25jYXRlbmF0aW9uIG9mIG1vc3Qgbm9uLXN0cmluZyB0eXBlcy4gVG8gd29ya1xuLy8gYXJvdW5kIHRoaXMgbGltaXRhdGlvbiwgd2UgdXNlIGFuIG9wYXF1ZSB0eXBlIHRoYXQgY2FuIG9ubHkgYmUgb2J0YWluZWQgYnlcbi8vIHBhc3NpbmcgdGhlIHZhbHVlIHRocm91Z2ggZ2V0VG9TdHJpbmdWYWx1ZSBmaXJzdC5cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiAnJyArIHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0VG9TdHJpbmdWYWx1ZSh2YWx1ZSkge1xuICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgIGNhc2UgJ251bWJlcic6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdzdHJpbmcnOlxuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gZnVuY3Rpb24sIHN5bWJvbCBhcmUgYXNzaWduZWQgYXMgZW1wdHkgc3RyaW5nc1xuICAgICAgcmV0dXJuICcnO1xuICB9XG59XG5cbnZhciBoYXNSZWFkT25seVZhbHVlID0ge1xuICBidXR0b246IHRydWUsXG4gIGNoZWNrYm94OiB0cnVlLFxuICBpbWFnZTogdHJ1ZSxcbiAgaGlkZGVuOiB0cnVlLFxuICByYWRpbzogdHJ1ZSxcbiAgcmVzZXQ6IHRydWUsXG4gIHN1Ym1pdDogdHJ1ZVxufTtcbmZ1bmN0aW9uIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHModGFnTmFtZSwgcHJvcHMpIHtcbiAge1xuICAgIGlmICghKGhhc1JlYWRPbmx5VmFsdWVbcHJvcHMudHlwZV0gfHwgcHJvcHMub25DaGFuZ2UgfHwgcHJvcHMub25JbnB1dCB8fCBwcm9wcy5yZWFkT25seSB8fCBwcm9wcy5kaXNhYmxlZCB8fCBwcm9wcy52YWx1ZSA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGB2YWx1ZWAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0VmFsdWVgLiBPdGhlcndpc2UsICcgKyAnc2V0IGVpdGhlciBgb25DaGFuZ2VgIG9yIGByZWFkT25seWAuJyk7XG4gICAgfVxuXG4gICAgaWYgKCEocHJvcHMub25DaGFuZ2UgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMuY2hlY2tlZCA9PSBudWxsKSkge1xuICAgICAgZXJyb3IoJ1lvdSBwcm92aWRlZCBhIGBjaGVja2VkYCBwcm9wIHRvIGEgZm9ybSBmaWVsZCB3aXRob3V0IGFuICcgKyAnYG9uQ2hhbmdlYCBoYW5kbGVyLiBUaGlzIHdpbGwgcmVuZGVyIGEgcmVhZC1vbmx5IGZpZWxkLiBJZiAnICsgJ3RoZSBmaWVsZCBzaG91bGQgYmUgbXV0YWJsZSB1c2UgYGRlZmF1bHRDaGVja2VkYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NoZWNrYWJsZShlbGVtKSB7XG4gIHZhciB0eXBlID0gZWxlbS50eXBlO1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgbm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2lucHV0JyAmJiAodHlwZSA9PT0gJ2NoZWNrYm94JyB8fCB0eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHJhY2tlcihub2RlKSB7XG4gIHJldHVybiBub2RlLl92YWx1ZVRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIGRldGFjaFRyYWNrZXIobm9kZSkge1xuICBub2RlLl92YWx1ZVRyYWNrZXIgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIHZhbHVlID0gJyc7XG5cbiAgaWYgKCFub2RlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgaWYgKGlzQ2hlY2thYmxlKG5vZGUpKSB7XG4gICAgdmFsdWUgPSBub2RlLmNoZWNrZWQgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICB9IGVsc2Uge1xuICAgIHZhbHVlID0gbm9kZS52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gdHJhY2tWYWx1ZU9uTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZUZpZWxkID0gaXNDaGVja2FibGUobm9kZSkgPyAnY2hlY2tlZCcgOiAndmFsdWUnO1xuICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobm9kZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHZhbHVlRmllbGQpO1xuICB2YXIgY3VycmVudFZhbHVlID0gJycgKyBub2RlW3ZhbHVlRmllbGRdOyAvLyBpZiBzb21lb25lIGhhcyBhbHJlYWR5IGRlZmluZWQgYSB2YWx1ZSBvciBTYWZhcmksIHRoZW4gYmFpbFxuICAvLyBhbmQgZG9uJ3QgdHJhY2sgdmFsdWUgd2lsbCBjYXVzZSBvdmVyIHJlcG9ydGluZyBvZiBjaGFuZ2VzLFxuICAvLyBidXQgaXQncyBiZXR0ZXIgdGhlbiBhIGhhcmQgZmFpbHVyZVxuICAvLyAobmVlZGVkIGZvciBjZXJ0YWluIHRlc3RzIHRoYXQgc3B5T24gaW5wdXQgdmFsdWVzIGFuZCBTYWZhcmkpXG5cbiAgaWYgKG5vZGUuaGFzT3duUHJvcGVydHkodmFsdWVGaWVsZCkgfHwgdHlwZW9mIGRlc2NyaXB0b3IgPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkZXNjcmlwdG9yLmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5zZXQgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQsXG4gICAgICBzZXQgPSBkZXNjcmlwdG9yLnNldDtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZ2V0LmNhbGwodGhpcyk7XG4gICAgfSxcbiAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9XG4gIH0pOyAvLyBXZSBjb3VsZCd2ZSBwYXNzZWQgdGhpcyB0aGUgZmlyc3QgdGltZVxuICAvLyBidXQgaXQgdHJpZ2dlcnMgYSBidWcgaW4gSUUxMSBhbmQgRWRnZSAxNC8xNS5cbiAgLy8gQ2FsbGluZyBkZWZpbmVQcm9wZXJ0eSgpIGFnYWluIHNob3VsZCBiZSBlcXVpdmFsZW50LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExNzY4XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5vZGUsIHZhbHVlRmllbGQsIHtcbiAgICBlbnVtZXJhYmxlOiBkZXNjcmlwdG9yLmVudW1lcmFibGVcbiAgfSk7XG4gIHZhciB0cmFja2VyID0ge1xuICAgIGdldFZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gY3VycmVudFZhbHVlO1xuICAgIH0sXG4gICAgc2V0VmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudFZhbHVlID0gJycgKyB2YWx1ZTtcbiAgICB9LFxuICAgIHN0b3BUcmFja2luZzogZnVuY3Rpb24gKCkge1xuICAgICAgZGV0YWNoVHJhY2tlcihub2RlKTtcbiAgICAgIGRlbGV0ZSBub2RlW3ZhbHVlRmllbGRdO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHRyYWNrZXI7XG59XG5cbmZ1bmN0aW9uIHRyYWNrKG5vZGUpIHtcbiAgaWYgKGdldFRyYWNrZXIobm9kZSkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVE9ETzogT25jZSBpdCdzIGp1c3QgRmliZXIgd2UgY2FuIG1vdmUgdGhpcyB0byBub2RlLl93cmFwcGVyU3RhdGVcblxuXG4gIG5vZGUuX3ZhbHVlVHJhY2tlciA9IHRyYWNrVmFsdWVPbk5vZGUobm9kZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChub2RlKSB7XG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0cmFja2VyID0gZ2V0VHJhY2tlcihub2RlKTsgLy8gaWYgdGhlcmUgaXMgbm8gdHJhY2tlciBhdCB0aGlzIHBvaW50IGl0J3MgdW5saWtlbHlcbiAgLy8gdGhhdCB0cnlpbmcgYWdhaW4gd2lsbCBzdWNjZWVkXG5cbiAgaWYgKCF0cmFja2VyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgbGFzdFZhbHVlID0gdHJhY2tlci5nZXRWYWx1ZSgpO1xuICB2YXIgbmV4dFZhbHVlID0gZ2V0VmFsdWVGcm9tTm9kZShub2RlKTtcblxuICBpZiAobmV4dFZhbHVlICE9PSBsYXN0VmFsdWUpIHtcbiAgICB0cmFja2VyLnNldFZhbHVlKG5leHRWYWx1ZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGRvYyA9IGRvYyB8fCAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyA/IGRvY3VtZW50IDogdW5kZWZpbmVkKTtcblxuICBpZiAodHlwZW9mIGRvYyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGRvYy5hY3RpdmVFbGVtZW50IHx8IGRvYy5ib2R5O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGRvYy5ib2R5O1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gZmFsc2U7XG52YXIgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gaXNDb250cm9sbGVkKHByb3BzKSB7XG4gIHZhciB1c2VzQ2hlY2tlZCA9IHByb3BzLnR5cGUgPT09ICdjaGVja2JveCcgfHwgcHJvcHMudHlwZSA9PT0gJ3JhZGlvJztcbiAgcmV0dXJuIHVzZXNDaGVja2VkID8gcHJvcHMuY2hlY2tlZCAhPSBudWxsIDogcHJvcHMudmFsdWUgIT0gbnVsbDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8aW5wdXQ+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgdGhlc2Ugb3B0aW9uYWxcbiAqIHByb3BzOiBgY2hlY2tlZGAsIGB2YWx1ZWAsIGBkZWZhdWx0Q2hlY2tlZGAsIGFuZCBgZGVmYXVsdFZhbHVlYC5cbiAqXG4gKiBJZiBgY2hlY2tlZGAgb3IgYHZhbHVlYCBhcmUgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9uc1xuICogdGhhdCBhZmZlY3QgdGhlIGNoZWNrZWQgc3RhdGUgb3IgdmFsdWUgd2lsbCB0cmlnZ2VyIHVwZGF0ZXMgdG8gdGhlIGVsZW1lbnQuXG4gKlxuICogSWYgdGhleSBhcmUgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIG5vdFxuICogdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgcHJvcHMgbXVzdCBjaGFuZ2UgaW4gb3JkZXIgZm9yXG4gKiB0aGUgcmVuZGVyZWQgZWxlbWVudCB0byBiZSB1cGRhdGVkLlxuICpcbiAqIFRoZSByZW5kZXJlZCBlbGVtZW50IHdpbGwgYmUgaW5pdGlhbGl6ZWQgYXMgdW5jaGVja2VkIChvciBgZGVmYXVsdENoZWNrZWRgKVxuICogd2l0aCBhbiBlbXB0eSB2YWx1ZSAob3IgYGRlZmF1bHRWYWx1ZWApLlxuICpcbiAqIFNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDEyL1dELWh0bWw1LTIwMTIxMDI1L3RoZS1pbnB1dC1lbGVtZW50Lmh0bWxcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0Q2hlY2tlZDogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgY2hlY2tlZDogY2hlY2tlZCAhPSBudWxsID8gY2hlY2tlZCA6IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZFxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygnaW5wdXQnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuY2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5DaGVja2VkRGVmYXVsdENoZWNrZWQpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhbiBpbnB1dCBvZiB0eXBlICVzIHdpdGggYm90aCBjaGVja2VkIGFuZCBkZWZhdWx0Q2hlY2tlZCBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgY2hlY2tlZCBwcm9wLCBvciB0aGUgZGVmYXVsdENoZWNrZWQgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdJbnB1dCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50JywgcHJvcHMudHlwZSk7XG5cbiAgICAgIGRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgZGVmYXVsdFZhbHVlID0gcHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgPyAnJyA6IHByb3BzLmRlZmF1bHRWYWx1ZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxDaGVja2VkOiBwcm9wcy5jaGVja2VkICE9IG51bGwgPyBwcm9wcy5jaGVja2VkIDogcHJvcHMuZGVmYXVsdENoZWNrZWQsXG4gICAgaW5pdGlhbFZhbHVlOiBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlICE9IG51bGwgPyBwcm9wcy52YWx1ZSA6IGRlZmF1bHRWYWx1ZSksXG4gICAgY29udHJvbGxlZDogaXNDb250cm9sbGVkKHByb3BzKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciBjaGVja2VkID0gcHJvcHMuY2hlY2tlZDtcblxuICBpZiAoY2hlY2tlZCAhPSBudWxsKSB7XG4gICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCAnY2hlY2tlZCcsIGNoZWNrZWQsIGZhbHNlKTtcbiAgfVxufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIHZhciBjb250cm9sbGVkID0gaXNDb250cm9sbGVkKHByb3BzKTtcblxuICAgIGlmICghbm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgY29udHJvbGxlZCAmJiAhZGlkV2FyblVuY29udHJvbGxlZFRvQ29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGFuIHVuY29udHJvbGxlZCBpbnB1dCB0byBiZSBjb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSB1bmRlZmluZWQgdG8gJyArICdhIGRlZmluZWQgdmFsdWUsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLl93cmFwcGVyU3RhdGUuY29udHJvbGxlZCAmJiAhY29udHJvbGxlZCAmJiAhZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGNoYW5naW5nIGEgY29udHJvbGxlZCBpbnB1dCB0byBiZSB1bmNvbnRyb2xsZWQuICcgKyAnVGhpcyBpcyBsaWtlbHkgY2F1c2VkIGJ5IHRoZSB2YWx1ZSBjaGFuZ2luZyBmcm9tIGEgZGVmaW5lZCB0byAnICsgJ3VuZGVmaW5lZCwgd2hpY2ggc2hvdWxkIG5vdCBoYXBwZW4uICcgKyAnRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgZm9yIHRoZSBsaWZldGltZSBvZiB0aGUgY29tcG9uZW50LiBNb3JlIGluZm86IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FybkNvbnRyb2xsZWRUb1VuY29udHJvbGxlZCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlQ2hlY2tlZChlbGVtZW50LCBwcm9wcyk7XG4gIHZhciB2YWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMudmFsdWUpO1xuICB2YXIgdHlwZSA9IHByb3BzLnR5cGU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICBpZiAodHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gMCAmJiBub2RlLnZhbHVlID09PSAnJyB8fCAvLyBXZSBleHBsaWNpdGx5IHdhbnQgdG8gY29lcmNlIHRvIG51bWJlciBoZXJlIGlmIHBvc3NpYmxlLlxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICBub2RlLnZhbHVlICE9IHZhbHVlKSB7XG4gICAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCcpIHtcbiAgICAvLyBTdWJtaXQvcmVzZXQgaW5wdXRzIG5lZWQgdGhlIGF0dHJpYnV0ZSByZW1vdmVkIGNvbXBsZXRlbHkgdG8gYXZvaWRcbiAgICAvLyBibGFuay10ZXh0IGJ1dHRvbnMuXG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgY29tZXMgZnJvbSBhIGNhc2NhZGUgb2ZcbiAgICAvLyBwcm9wZXJ0aWVzOlxuICAgIC8vICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eVxuICAgIC8vICAzLiBPdGhlcndpc2UgdGhlcmUgc2hvdWxkIGJlIG5vIGNoYW5nZVxuICAgIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgndmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHByb3BzLnR5cGUsIGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKSk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vIFdoZW4gc3luY2luZyB0aGUgY2hlY2tlZCBhdHRyaWJ1dGUsIGl0IG9ubHkgY2hhbmdlcyB3aGVuIGl0IG5lZWRzXG4gICAgLy8gdG8gYmUgcmVtb3ZlZCwgc3VjaCBhcyB0cmFuc2l0aW9uaW5nIGZyb20gYSBjaGVja2JveCBpbnRvIGEgdGV4dCBpbnB1dFxuICAgIGlmIChwcm9wcy5jaGVja2VkID09IG51bGwgJiYgcHJvcHMuZGVmYXVsdENoZWNrZWQgIT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhcHJvcHMuZGVmYXVsdENoZWNrZWQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyKGVsZW1lbnQsIHByb3BzLCBpc0h5ZHJhdGluZykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7IC8vIERvIG5vdCBhc3NpZ24gdmFsdWUgaWYgaXQgaXMgYWxyZWFkeSBzZXQuIFRoaXMgcHJldmVudHMgdXNlciB0ZXh0IGlucHV0XG4gIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykgfHwgcHJvcHMuaGFzT3duUHJvcGVydHkoJ2RlZmF1bHRWYWx1ZScpKSB7XG4gICAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuICAgIHZhciBpc0J1dHRvbiA9IHR5cGUgPT09ICdzdWJtaXQnIHx8IHR5cGUgPT09ICdyZXNldCc7IC8vIEF2b2lkIHNldHRpbmcgdmFsdWUgYXR0cmlidXRlIG9uIHN1Ym1pdC9yZXNldCBpbnB1dHMgYXMgaXQgb3ZlcnJpZGVzIHRoZVxuICAgIC8vIGRlZmF1bHQgdmFsdWUgcHJvdmlkZWQgYnkgdGhlIGJyb3dzZXIuIFNlZTogIzEyODcyXG5cbiAgICBpZiAoaXNCdXR0b24gJiYgKHByb3BzLnZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJvcHMudmFsdWUgPT09IG51bGwpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGluaXRpYWxWYWx1ZSA9IHRvU3RyaW5nKG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpOyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAgIC8vIGZyb20gYmVpbmcgbG9zdCBkdXJpbmcgU1NSIGh5ZHJhdGlvbi5cblxuICAgIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAgIHtcbiAgICAgICAgLy8gV2hlbiBzeW5jaW5nIHRoZSB2YWx1ZSBhdHRyaWJ1dGUsIHRoZSB2YWx1ZSBwcm9wZXJ0eSBzaG91bGQgdXNlXG4gICAgICAgIC8vIHRoZSB3cmFwcGVyU3RhdGUuX2luaXRpYWxWYWx1ZSBwcm9wZXJ0eS4gVGhpcyB1c2VzOlxuICAgICAgICAvL1xuICAgICAgICAvLyAgIDEuIFRoZSB2YWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAyLiBUaGUgZGVmYXVsdFZhbHVlIFJlYWN0IHByb3BlcnR5IHdoZW4gcHJlc2VudFxuICAgICAgICAvLyAgIDMuIEFuIGVtcHR5IHN0cmluZ1xuICAgICAgICBpZiAoaW5pdGlhbFZhbHVlICE9PSBub2RlLnZhbHVlKSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHZhbHVlIGF0dHJpYnV0ZSBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHByb3BlcnR5LFxuICAgICAgLy8gc28gd2UgYXNzaWduIGRlZmF1bHRWYWx1ZSB0byB0aGUgc2FtZSB0aGluZyBhcyB0aGUgdmFsdWUgcHJvcGVydHlcbiAgICAgIC8vIGFzc2lnbm1lbnQgc3RlcCBhYm92ZS5cbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gaW5pdGlhbFZhbHVlO1xuICAgIH1cbiAgfSAvLyBOb3JtYWxseSwgd2UnZCBqdXN0IGRvIGBub2RlLmNoZWNrZWQgPSBub2RlLmNoZWNrZWRgIHVwb24gaW5pdGlhbCBtb3VudCwgbGVzcyB0aGlzIGJ1Z1xuICAvLyB0aGlzIGlzIG5lZWRlZCB0byB3b3JrIGFyb3VuZCBhIGNocm9tZSBidWcgd2hlcmUgc2V0dGluZyBkZWZhdWx0Q2hlY2tlZFxuICAvLyB3aWxsIHNvbWV0aW1lcyBpbmZsdWVuY2UgdGhlIHZhbHVlIG9mIGNoZWNrZWQgKGV2ZW4gYWZ0ZXIgZGV0YWNobWVudCkuXG4gIC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjA4NDE2XG4gIC8vIFdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5zZXQgbmFtZSB0byBhdm9pZCBkaXNydXB0aW5nIHJhZGlvIGJ1dHRvbiBncm91cHMuXG5cblxuICB2YXIgbmFtZSA9IG5vZGUubmFtZTtcblxuICBpZiAobmFtZSAhPT0gJycpIHtcbiAgICBub2RlLm5hbWUgPSAnJztcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBib3RoIHRoZSBjaGVja2VkIHByb3BlcnR5IGFuZFxuICAgIC8vIGF0dHJpYnV0ZSBhcmUgYXNzaWduZWQgYXQgdGhlIHNhbWUgdGltZSB1c2luZyBkZWZhdWx0Q2hlY2tlZC4gVGhpcyB1c2VzOlxuICAgIC8vXG4gICAgLy8gICAxLiBUaGUgY2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDIuIFRoZSBkZWZhdWx0Q2hlY2tlZCBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAvLyAgIDMuIE90aGVyd2lzZSwgZmFsc2VcbiAgICBub2RlLmRlZmF1bHRDaGVja2VkID0gIW5vZGUuZGVmYXVsdENoZWNrZWQ7XG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICEhbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxDaGVja2VkO1xuICB9XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gbmFtZTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHVwZGF0ZVdyYXBwZXIobm9kZSwgcHJvcHMpO1xuICB1cGRhdGVOYW1lZENvdXNpbnMobm9kZSwgcHJvcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVOYW1lZENvdXNpbnMocm9vdE5vZGUsIHByb3BzKSB7XG4gIHZhciBuYW1lID0gcHJvcHMubmFtZTtcblxuICBpZiAocHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuYW1lICE9IG51bGwpIHtcbiAgICB2YXIgcXVlcnlSb290ID0gcm9vdE5vZGU7XG5cbiAgICB3aGlsZSAocXVlcnlSb290LnBhcmVudE5vZGUpIHtcbiAgICAgIHF1ZXJ5Um9vdCA9IHF1ZXJ5Um9vdC5wYXJlbnROb2RlO1xuICAgIH0gLy8gSWYgYHJvb3ROb2RlLmZvcm1gIHdhcyBub24tbnVsbCwgdGhlbiB3ZSBjb3VsZCB0cnkgYGZvcm0uZWxlbWVudHNgLFxuICAgIC8vIGJ1dCB0aGF0IHNvbWV0aW1lcyBiZWhhdmVzIHN0cmFuZ2VseSBpbiBJRTguIFdlIGNvdWxkIGFsc28gdHJ5IHVzaW5nXG4gICAgLy8gYGZvcm0uZ2V0RWxlbWVudHNCeU5hbWVgLCBidXQgdGhhdCB3aWxsIG9ubHkgcmV0dXJuIGRpcmVjdCBjaGlsZHJlblxuICAgIC8vIGFuZCB3b24ndCBpbmNsdWRlIGlucHV0cyB0aGF0IHVzZSB0aGUgSFRNTDUgYGZvcm09YCBhdHRyaWJ1dGUuIFNpbmNlXG4gICAgLy8gdGhlIGlucHV0IG1pZ2h0IG5vdCBldmVuIGJlIGluIGEgZm9ybS4gSXQgbWlnaHQgbm90IGV2ZW4gYmUgaW4gdGhlXG4gICAgLy8gZG9jdW1lbnQuIExldCdzIGp1c3QgdXNlIHRoZSBsb2NhbCBgcXVlcnlTZWxlY3RvckFsbGAgdG8gZW5zdXJlIHdlIGRvbid0XG4gICAgLy8gbWlzcyBhbnl0aGluZy5cblxuXG4gICAgdmFyIGdyb3VwID0gcXVlcnlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2lucHV0W25hbWU9JyArIEpTT04uc3RyaW5naWZ5KCcnICsgbmFtZSkgKyAnXVt0eXBlPVwicmFkaW9cIl0nKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZ3JvdXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBvdGhlck5vZGUgPSBncm91cFtpXTtcblxuICAgICAgaWYgKG90aGVyTm9kZSA9PT0gcm9vdE5vZGUgfHwgb3RoZXJOb2RlLmZvcm0gIT09IHJvb3ROb2RlLmZvcm0pIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIFRoaXMgd2lsbCB0aHJvdyBpZiByYWRpbyBidXR0b25zIHJlbmRlcmVkIGJ5IGRpZmZlcmVudCBjb3BpZXMgb2YgUmVhY3RcbiAgICAgIC8vIGFuZCB0aGUgc2FtZSBuYW1lIGFyZSByZW5kZXJlZCBpbnRvIHRoZSBzYW1lIGZvcm0gKHNhbWUgYXMgIzE5MzkpLlxuICAgICAgLy8gVGhhdCdzIHByb2JhYmx5IG9rYXk7IHdlIGRvbid0IHN1cHBvcnQgaXQganVzdCBhcyB3ZSBkb24ndCBzdXBwb3J0XG4gICAgICAvLyBtaXhpbmcgUmVhY3QgcmFkaW8gYnV0dG9ucyB3aXRoIG5vbi1SZWFjdCBvbmVzLlxuXG5cbiAgICAgIHZhciBvdGhlclByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShvdGhlck5vZGUpO1xuXG4gICAgICBpZiAoIW90aGVyUHJvcHMpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0RE9NSW5wdXQ6IE1peGluZyBSZWFjdCBhbmQgbm9uLVJlYWN0IHJhZGlvIGlucHV0cyB3aXRoIHRoZSBzYW1lIGBuYW1lYCBpcyBub3Qgc3VwcG9ydGVkLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gV2UgbmVlZCB1cGRhdGUgdGhlIHRyYWNrZWQgdmFsdWUgb24gdGhlIG5hbWVkIGNvdXNpbiBzaW5jZSB0aGUgdmFsdWVcbiAgICAgIC8vIHdhcyBjaGFuZ2VkIGJ1dCB0aGUgaW5wdXQgc2F3IG5vIGV2ZW50IG9yIHZhbHVlIHNldFxuXG5cbiAgICAgIHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKG90aGVyTm9kZSk7IC8vIElmIHRoaXMgaXMgYSBjb250cm9sbGVkIHJhZGlvIGJ1dHRvbiBncm91cCwgZm9yY2luZyB0aGUgaW5wdXQgdGhhdFxuICAgICAgLy8gd2FzIHByZXZpb3VzbHkgY2hlY2tlZCB0byB1cGRhdGUgd2lsbCBjYXVzZSBpdCB0byBiZSBjb21lIHJlLWNoZWNrZWRcbiAgICAgIC8vIGFzIGFwcHJvcHJpYXRlLlxuXG4gICAgICB1cGRhdGVXcmFwcGVyKG90aGVyTm9kZSwgb3RoZXJQcm9wcyk7XG4gICAgfVxuICB9XG59IC8vIEluIENocm9tZSwgYXNzaWduaW5nIGRlZmF1bHRWYWx1ZSB0byBjZXJ0YWluIGlucHV0IHR5cGVzIHRyaWdnZXJzIGlucHV0IHZhbGlkYXRpb24uXG4vLyBGb3IgbnVtYmVyIGlucHV0cywgdGhlIGRpc3BsYXkgdmFsdWUgbG9zZXMgdHJhaWxpbmcgZGVjaW1hbCBwb2ludHMuIEZvciBlbWFpbCBpbnB1dHMsXG4vLyBDaHJvbWUgcmFpc2VzIFwiVGhlIHNwZWNpZmllZCB2YWx1ZSA8eD4gaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLlxuLy9cbi8vIEhlcmUgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSBkZWZhdWx0VmFsdWUgaGFzIGFjdHVhbGx5IGNoYW5nZWQsIGF2b2lkaW5nIHRoZXNlIHByb2JsZW1zXG4vLyB3aGVuIHRoZSB1c2VyIGlzIGlucHV0dGluZyB0ZXh0XG4vL1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy83MjUzXG5cblxuZnVuY3Rpb24gc2V0RGVmYXVsdFZhbHVlKG5vZGUsIHR5cGUsIHZhbHVlKSB7XG4gIGlmICggLy8gRm9jdXNlZCBudW1iZXIgaW5wdXRzIHN5bmNocm9uaXplIG9uIGJsdXIuIFNlZSBDaGFuZ2VFdmVudFBsdWdpbi5qc1xuICB0eXBlICE9PSAnbnVtYmVyJyB8fCBnZXRBY3RpdmVFbGVtZW50KG5vZGUub3duZXJEb2N1bWVudCkgIT09IG5vZGUpIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuZGVmYXVsdFZhbHVlICE9PSB0b1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblNlbGVjdGVkU2V0T25PcHRpb24gPSBmYWxzZTtcbnZhciBkaWRXYXJuSW52YWxpZENoaWxkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5DaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgY29udGVudCA9ICcnOyAvLyBGbGF0dGVuIGNoaWxkcmVuLiBXZSdsbCB3YXJuIGlmIHRoZXkgYXJlIGludmFsaWRcbiAgLy8gZHVyaW5nIHZhbGlkYXRlUHJvcHMoKSB3aGljaCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAvLyBOb3RlIHRoYXQgdGhpcyB3b3VsZCB0aHJvdyBvbiBub24tZWxlbWVudCBvYmplY3RzLlxuICAvLyBFbGVtZW50cyBhcmUgc3RyaW5naWZpZWQgKHdoaWNoIGlzIG5vcm1hbGx5IGlycmVsZXZhbnRcbiAgLy8gYnV0IG1hdHRlcnMgZm9yIDxmYnQ+KS5cblxuICBSZWFjdC5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnRlbnQgKz0gY2hpbGQ7IC8vIE5vdGU6IHdlIGRvbid0IHdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlLlxuICAgIC8vIEluc3RlYWQsIHRoaXMgaXMgZG9uZSBzZXBhcmF0ZWx5IGJlbG93IHNvIHRoYXRcbiAgICAvLyBpdCBoYXBwZW5zIGR1cmluZyB0aGUgaHlkcmF0aW9uIGNvZGUgcGF0aCB0b28uXG4gIH0pO1xuICByZXR1cm4gY29udGVudDtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhbiA8b3B0aW9uPiBob3N0IGNvbXBvbmVudCB0aGF0IHdhcm5zIHdoZW4gYHNlbGVjdGVkYCBpcyBzZXQuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHtcbiAgICAvLyBUaGlzIG1pcnJvcnMgdGhlIGNvZGUgcGF0aCBhYm92ZSwgYnV0IHJ1bnMgZm9yIGh5ZHJhdGlvbiB0b28uXG4gICAgLy8gV2FybiBhYm91dCBpbnZhbGlkIGNoaWxkcmVuIGhlcmUgc28gdGhhdCBjbGllbnQgYW5kIGh5ZHJhdGlvbiBhcmUgY29uc2lzdGVudC5cbiAgICAvLyBUT0RPOiB0aGlzIHNlZW1zIGxpa2UgaXQgY291bGQgY2F1c2UgYSBERVYtb25seSB0aHJvdyBmb3IgaHlkcmF0aW9uXG4gICAgLy8gaWYgY2hpbGRyZW4gY29udGFpbnMgYSBub24tZWxlbWVudCBvYmplY3QuIFdlIHNob3VsZCB0cnkgdG8gYXZvaWQgdGhhdC5cbiAgICBpZiAodHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnb2JqZWN0JyAmJiBwcm9wcy5jaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBjaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGNoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZFdhcm5JbnZhbGlkQ2hpbGQpIHtcbiAgICAgICAgICBkaWRXYXJuSW52YWxpZENoaWxkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdPbmx5IHN0cmluZ3MgYW5kIG51bWJlcnMgYXJlIHN1cHBvcnRlZCBhcyA8b3B0aW9uPiBjaGlsZHJlbi4nKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSAvLyBUT0RPOiBSZW1vdmUgc3VwcG9ydCBmb3IgYHNlbGVjdGVkYCBpbiA8b3B0aW9uPi5cblxuXG4gICAgaWYgKHByb3BzLnNlbGVjdGVkICE9IG51bGwgJiYgIWRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uKSB7XG4gICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIG9uIDxzZWxlY3Q+IGluc3RlYWQgb2YgJyArICdzZXR0aW5nIGBzZWxlY3RlZGAgb24gPG9wdGlvbj4uJyk7XG5cbiAgICAgIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RNb3VudFdyYXBwZXIkMShlbGVtZW50LCBwcm9wcykge1xuICAvLyB2YWx1ZT1cIlwiIHNob3VsZCBtYWtlIGEgdmFsdWUgYXR0cmlidXRlICgjNjIxOSlcbiAgaWYgKHByb3BzLnZhbHVlICE9IG51bGwpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndmFsdWUnLCB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKSkpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7XG4gICAgY2hpbGRyZW46IHVuZGVmaW5lZFxuICB9LCBwcm9wcyk7XG5cbiAgdmFyIGNvbnRlbnQgPSBmbGF0dGVuQ2hpbGRyZW4ocHJvcHMuY2hpbGRyZW4pO1xuXG4gIGlmIChjb250ZW50KSB7XG4gICAgaG9zdFByb3BzLmNoaWxkcmVuID0gY29udGVudDtcbiAgfVxuXG4gIHJldHVybiBob3N0UHJvcHM7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMTtcblxue1xuICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gIGlmIChvd25lck5hbWUpIHtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIHZhbHVlUHJvcE5hbWVzID0gWyd2YWx1ZScsICdkZWZhdWx0VmFsdWUnXTtcbi8qKlxuICogVmFsaWRhdGlvbiBmdW5jdGlvbiBmb3IgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKi9cblxuZnVuY3Rpb24gY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3NlbGVjdCcsIHByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVQcm9wTmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBwcm9wTmFtZSA9IHZhbHVlUHJvcE5hbWVzW2ldO1xuXG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgICBpZiAocHJvcHMubXVsdGlwbGUgJiYgIWlzQXJyYXkpIHtcbiAgICAgICAgZXJyb3IoJ1RoZSBgJXNgIHByb3Agc3VwcGxpZWQgdG8gPHNlbGVjdD4gbXVzdCBiZSBhbiBhcnJheSBpZiAnICsgJ2BtdWx0aXBsZWAgaXMgdHJ1ZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9IGVsc2UgaWYgKCFwcm9wcy5tdWx0aXBsZSAmJiBpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYSBzY2FsYXIgJyArICd2YWx1ZSBpZiBgbXVsdGlwbGVgIGlzIGZhbHNlLiVzJywgcHJvcE5hbWUsIGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3B0aW9ucyhub2RlLCBtdWx0aXBsZSwgcHJvcFZhbHVlLCBzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgdmFyIG9wdGlvbnMgPSBub2RlLm9wdGlvbnM7XG5cbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgdmFyIHNlbGVjdGVkVmFsdWVzID0gcHJvcFZhbHVlO1xuICAgIHZhciBzZWxlY3RlZFZhbHVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBQcmVmaXggdG8gYXZvaWQgY2hhb3Mgd2l0aCBzcGVjaWFsIGtleXMuXG4gICAgICBzZWxlY3RlZFZhbHVlWyckJyArIHNlbGVjdGVkVmFsdWVzW2ldXSA9IHRydWU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG9wdGlvbnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgc2VsZWN0ZWQgPSBzZWxlY3RlZFZhbHVlLmhhc093blByb3BlcnR5KCckJyArIG9wdGlvbnNbX2ldLnZhbHVlKTtcblxuICAgICAgaWYgKG9wdGlvbnNbX2ldLnNlbGVjdGVkICE9PSBzZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5zZWxlY3RlZCA9IHNlbGVjdGVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2VsZWN0ZWQgJiYgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gICAgICAgIG9wdGlvbnNbX2ldLmRlZmF1bHRTZWxlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCBzZXQgYHNlbGVjdC52YWx1ZWAgYXMgZXhhY3QgYmVoYXZpb3IgaXNuJ3QgY29uc2lzdGVudCBhY3Jvc3MgYWxsXG4gICAgLy8gYnJvd3NlcnMgZm9yIGFsbCBjYXNlcy5cbiAgICB2YXIgX3NlbGVjdGVkVmFsdWUgPSB0b1N0cmluZyhnZXRUb1N0cmluZ1ZhbHVlKHByb3BWYWx1ZSkpO1xuXG4gICAgdmFyIGRlZmF1bHRTZWxlY3RlZCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvcHRpb25zLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIGlmIChvcHRpb25zW19pMl0udmFsdWUgPT09IF9zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIG9wdGlvbnNbX2kyXS5zZWxlY3RlZCA9IHRydWU7XG5cbiAgICAgICAgaWYgKHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICAgIG9wdGlvbnNbX2kyXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVmYXVsdFNlbGVjdGVkID09PSBudWxsICYmICFvcHRpb25zW19pMl0uZGlzYWJsZWQpIHtcbiAgICAgICAgZGVmYXVsdFNlbGVjdGVkID0gb3B0aW9uc1tfaTJdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0U2VsZWN0ZWQgIT09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRTZWxlY3RlZC5zZWxlY3RlZCA9IHRydWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEltcGxlbWVudHMgYSA8c2VsZWN0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBvcHRpb25hbGx5IHNldHRpbmcgdGhlXG4gKiBwcm9wcyBgdmFsdWVgIGFuZCBgZGVmYXVsdFZhbHVlYC4gSWYgYG11bHRpcGxlYCBpcyBmYWxzZSwgdGhlIHByb3AgbXVzdCBiZSBhXG4gKiBzdHJpbmdhYmxlLiBJZiBgbXVsdGlwbGVgIGlzIHRydWUsIHRoZSBwcm9wIG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nYWJsZXMuXG4gKlxuICogSWYgYHZhbHVlYCBpcyBub3Qgc3VwcGxpZWQgKG9yIG51bGwvdW5kZWZpbmVkKSwgdXNlciBhY3Rpb25zIHRoYXQgY2hhbmdlIHRoZVxuICogc2VsZWN0ZWQgb3B0aW9uIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSByZW5kZXJlZCBvcHRpb25zLlxuICpcbiAqIElmIGl0IGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIG9wdGlvbnMgd2lsbCBub3RcbiAqIHVwZGF0ZSBpbiByZXNwb25zZSB0byB1c2VyIGFjdGlvbnMuIEluc3RlYWQsIHRoZSBgdmFsdWVgIHByb3AgbXVzdCBjaGFuZ2UgaW5cbiAqIG9yZGVyIGZvciB0aGUgcmVuZGVyZWQgb3B0aW9ucyB0byB1cGRhdGUuXG4gKlxuICogSWYgYGRlZmF1bHRWYWx1ZWAgaXMgcHJvdmlkZWQsIGFueSBvcHRpb25zIHdpdGggdGhlIHN1cHBsaWVkIHZhbHVlcyB3aWxsIGJlXG4gKiBzZWxlY3RlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHJldHVybiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgIHZhbHVlOiB1bmRlZmluZWRcbiAgfSk7XG59XG5mdW5jdGlvbiBpbml0V3JhcHBlclN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICBjaGVja1NlbGVjdFByb3BUeXBlcyhwcm9wcyk7XG4gIH1cblxuICBub2RlLl93cmFwcGVyU3RhdGUgPSB7XG4gICAgd2FzTXVsdGlwbGU6ICEhcHJvcHMubXVsdGlwbGVcbiAgfTtcblxuICB7XG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSQxKSB7XG4gICAgICBlcnJvcignU2VsZWN0IGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBzZWxlY3QgJyArICdlbGVtZW50IGFuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICBub2RlLm11bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHBvc3RVcGRhdGVXcmFwcGVyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHdhc011bHRpcGxlID0gbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlO1xuICBub2RlLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGUgPSAhIXByb3BzLm11bHRpcGxlO1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfSBlbHNlIGlmICh3YXNNdWx0aXBsZSAhPT0gISFwcm9wcy5tdWx0aXBsZSkge1xuICAgIC8vIEZvciBzaW1wbGljaXR5LCByZWFwcGx5IGBkZWZhdWx0VmFsdWVgIGlmIGBtdWx0aXBsZWAgaXMgdG9nZ2xlZC5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlICE9IG51bGwpIHtcbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMuZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmV2ZXJ0IHRoZSBzZWxlY3QgYmFjayB0byBpdHMgZGVmYXVsdCB1bnNlbGVjdGVkIHN0YXRlLlxuICAgICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5tdWx0aXBsZSA/IFtdIDogJycsIGZhbHNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMShlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IGZhbHNlO1xuXG4vKipcbiAqIEltcGxlbWVudHMgYSA8dGV4dGFyZWE+IGhvc3QgY29tcG9uZW50IHRoYXQgYWxsb3dzIHNldHRpbmcgYHZhbHVlYCwgYW5kXG4gKiBgZGVmYXVsdFZhbHVlYC4gVGhpcyBkaWZmZXJzIGZyb20gdGhlIHRyYWRpdGlvbmFsIERPTSBBUEkgYmVjYXVzZSB2YWx1ZSBpc1xuICogdXN1YWxseSBzZXQgYXMgUENEQVRBIGNoaWxkcmVuLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAqIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgc3VwcGxpZWQgKGFuZCBub3QgbnVsbC91bmRlZmluZWQpLCB0aGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsXG4gKiBub3QgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIHdpdGggYW4gZW1wdHkgdmFsdWUsIHRoZSBwcm9wXG4gKiBgZGVmYXVsdFZhbHVlYCBpZiBzcGVjaWZpZWQsIG9yIHRoZSBjaGlsZHJlbiBjb250ZW50IChkZXByZWNhdGVkKS5cbiAqL1xuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIGlmICghKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBkb2VzIG5vdCBtYWtlIHNlbnNlIG9uIDx0ZXh0YXJlYT4uXCIgKTtcbiAgICB9XG4gIH0gLy8gQWx3YXlzIHNldCBjaGlsZHJlbiB0byB0aGUgc2FtZSB0aGluZy4gSW4gSUU5LCB0aGUgc2VsZWN0aW9uIHJhbmdlIHdpbGxcbiAgLy8gZ2V0IHJlc2V0IGlmIGB0ZXh0Q29udGVudGAgaXMgbXV0YXRlZC4gIFdlIGNvdWxkIGFkZCBhIGNoZWNrIGluIHNldFRleHRDb250ZW50XG4gIC8vIHRvIG9ubHkgc2V0IHRoZSB2YWx1ZSBpZi93aGVuIHRoZSB2YWx1ZSBkaWZmZXJzIGZyb20gdGhlIG5vZGUgdmFsdWUgKHdoaWNoIHdvdWxkXG4gIC8vIGNvbXBsZXRlbHkgc29sdmUgdGhpcyBJRTkgYnVnKSwgYnV0IFNlYmFzdGlhbitTb3BoaWUgc2VlbWVkIHRvIGxpa2UgdGhpc1xuICAvLyBzb2x1dGlvbi4gVGhlIHZhbHVlIGNhbiBiZSBhIGJvb2xlYW4gb3Igb2JqZWN0IHNvIHRoYXQncyB3aHkgaXQncyBmb3JjZWRcbiAgLy8gdG8gYmUgYSBzdHJpbmcuXG5cblxuICB2YXIgaG9zdFByb3BzID0gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGRlZmF1bHRWYWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoaWxkcmVuOiB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKVxuICB9KTtcblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tDb250cm9sbGVkVmFsdWVQcm9wcygndGV4dGFyZWEnLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblZhbERlZmF1bHRWYWwpIHtcbiAgICAgIGVycm9yKCclcyBjb250YWlucyBhIHRleHRhcmVhIHdpdGggYm90aCB2YWx1ZSBhbmQgZGVmYXVsdFZhbHVlIHByb3BzLiAnICsgJ1RleHRhcmVhIGVsZW1lbnRzIG11c3QgYmUgZWl0aGVyIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICcgKyAnKHNwZWNpZnkgZWl0aGVyIHRoZSB2YWx1ZSBwcm9wLCBvciB0aGUgZGVmYXVsdFZhbHVlIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCB0ZXh0YXJlYSAnICsgJ2FuZCByZW1vdmUgb25lIG9mIHRoZXNlIHByb3BzLiBNb3JlIGluZm86ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycsIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkgfHwgJ0EgY29tcG9uZW50Jyk7XG5cbiAgICAgIGRpZFdhcm5WYWxEZWZhdWx0VmFsID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgaW5pdGlhbFZhbHVlID0gcHJvcHMudmFsdWU7IC8vIE9ubHkgYm90aGVyIGZldGNoaW5nIGRlZmF1bHQgdmFsdWUgaWYgd2UncmUgZ29pbmcgdG8gdXNlIGl0XG5cbiAgaWYgKGluaXRpYWxWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZTtcblxuICAgIGlmIChjaGlsZHJlbiAhPSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIGVycm9yKCdVc2UgdGhlIGBkZWZhdWx0VmFsdWVgIG9yIGB2YWx1ZWAgcHJvcHMgaW5zdGVhZCBvZiBzZXR0aW5nICcgKyAnY2hpbGRyZW4gb24gPHRleHRhcmVhPi4nKTtcbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICBpZiAoIShkZWZhdWx0VmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJJZiB5b3Ugc3VwcGx5IGBkZWZhdWx0VmFsdWVgIG9uIGEgPHRleHRhcmVhPiwgZG8gbm90IHBhc3MgY2hpbGRyZW4uXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICBpZiAoIShjaGlsZHJlbi5sZW5ndGggPD0gMSkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiPHRleHRhcmVhPiBjYW4gb25seSBoYXZlIGF0IG1vc3Qgb25lIGNoaWxkLlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlblswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHRWYWx1ZSA9IGNoaWxkcmVuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0VmFsdWUgPT0gbnVsbCkge1xuICAgICAgZGVmYXVsdFZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgaW5pdGlhbFZhbHVlID0gZGVmYXVsdFZhbHVlO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShpbml0aWFsVmFsdWUpXG4gIH07XG59XG5mdW5jdGlvbiB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGdldFRvU3RyaW5nVmFsdWUocHJvcHMuZGVmYXVsdFZhbHVlKTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIC8vIENhc3QgYHZhbHVlYCB0byBhIHN0cmluZyB0byBlbnN1cmUgdGhlIHZhbHVlIGlzIHNldCBjb3JyZWN0bHkuIFdoaWxlXG4gICAgLy8gYnJvd3NlcnMgdHlwaWNhbGx5IGRvIHRoaXMgYXMgbmVjZXNzYXJ5LCBqc2RvbSBkb2Vzbid0LlxuICAgIHZhciBuZXdWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTsgLy8gVG8gYXZvaWQgc2lkZSBlZmZlY3RzIChzdWNoIGFzIGxvc2luZyB0ZXh0IHNlbGVjdGlvbiksIG9ubHkgc2V0IHZhbHVlIGlmIGNoYW5nZWRcblxuICAgIGlmIChuZXdWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgbm9kZS52YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wcy5kZWZhdWx0VmFsdWUgPT0gbnVsbCAmJiBub2RlLmRlZmF1bHRWYWx1ZSAhPT0gbmV3VmFsdWUpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgbm9kZS5kZWZhdWx0VmFsdWUgPSB0b1N0cmluZyhkZWZhdWx0VmFsdWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBUaGlzIGlzIGluIHBvc3RNb3VudCBiZWNhdXNlIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBET00gbm9kZSwgd2hpY2ggaXMgbm90XG4gIC8vIGF2YWlsYWJsZSB1bnRpbCBhZnRlciB0aGUgY29tcG9uZW50IGhhcyBtb3VudGVkLlxuXG4gIHZhciB0ZXh0Q29udGVudCA9IG5vZGUudGV4dENvbnRlbnQ7IC8vIE9ubHkgc2V0IG5vZGUudmFsdWUgaWYgdGV4dENvbnRlbnQgaXMgZXF1YWwgdG8gdGhlIGV4cGVjdGVkXG4gIC8vIGluaXRpYWwgdmFsdWUuIEluIElFMTAvSUUxMSB0aGVyZSBpcyBhIGJ1ZyB3aGVyZSB0aGUgcGxhY2Vob2xkZXIgYXR0cmlidXRlXG4gIC8vIHdpbGwgcG9wdWxhdGUgdGV4dENvbnRlbnQgYXMgd2VsbC5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubWljcm9zb2Z0LmNvbS9taWNyb3NvZnQtZWRnZS9wbGF0Zm9ybS9pc3N1ZXMvMTAxNTI1L1xuXG4gIGlmICh0ZXh0Q29udGVudCA9PT0gbm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSkge1xuICAgIGlmICh0ZXh0Q29udGVudCAhPT0gJycgJiYgdGV4dENvbnRlbnQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUudmFsdWUgPSB0ZXh0Q29udGVudDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICAvLyBET00gY29tcG9uZW50IGlzIHN0aWxsIG1vdW50ZWQ7IHVwZGF0ZVxuICB1cGRhdGVXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpO1xufVxuXG52YXIgSFRNTF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCc7XG52YXIgTUFUSF9OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMTk5OC9NYXRoL01hdGhNTCc7XG52YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG52YXIgTmFtZXNwYWNlcyA9IHtcbiAgaHRtbDogSFRNTF9OQU1FU1BBQ0UsXG4gIG1hdGhtbDogTUFUSF9OQU1FU1BBQ0UsXG4gIHN2ZzogU1ZHX05BTUVTUEFDRVxufTsgLy8gQXNzdW1lcyB0aGVyZSBpcyBubyBwYXJlbnQgbmFtZXNwYWNlLlxuXG5mdW5jdGlvbiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSkge1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdzdmcnOlxuICAgICAgcmV0dXJuIFNWR19OQU1FU1BBQ0U7XG5cbiAgICBjYXNlICdtYXRoJzpcbiAgICAgIHJldHVybiBNQVRIX05BTUVTUEFDRTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gSFRNTF9OQU1FU1BBQ0U7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkTmFtZXNwYWNlKHBhcmVudE5hbWVzcGFjZSwgdHlwZSkge1xuICBpZiAocGFyZW50TmFtZXNwYWNlID09IG51bGwgfHwgcGFyZW50TmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgIC8vIE5vIChvciBkZWZhdWx0KSBwYXJlbnQgbmFtZXNwYWNlOiBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG4gICAgcmV0dXJuIGdldEludHJpbnNpY05hbWVzcGFjZSh0eXBlKTtcbiAgfVxuXG4gIGlmIChwYXJlbnROYW1lc3BhY2UgPT09IFNWR19OQU1FU1BBQ0UgJiYgdHlwZSA9PT0gJ2ZvcmVpZ25PYmplY3QnKSB7XG4gICAgLy8gV2UncmUgbGVhdmluZyBTVkcuXG4gICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9IC8vIEJ5IGRlZmF1bHQsIHBhc3MgbmFtZXNwYWNlIGJlbG93LlxuXG5cbiAgcmV0dXJuIHBhcmVudE5hbWVzcGFjZTtcbn1cblxuLyogZ2xvYmFscyBNU0FwcCAqL1xuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bmN0aW9uIHdoaWNoIGhhcyAndW5zYWZlJyBwcml2aWxlZ2VzIChyZXF1aXJlZCBieSB3aW5kb3dzOCBhcHBzKVxuICovXG52YXIgY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbiA9IGZ1bmN0aW9uIChmdW5jKSB7XG4gIGlmICh0eXBlb2YgTVNBcHAgIT09ICd1bmRlZmluZWQnICYmIE1TQXBwLmV4ZWNVbnNhZmVMb2NhbEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhcmcwLCBhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBmdW5jKGFyZzAsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZnVuYztcbiAgfVxufTtcblxudmFyIHJldXNhYmxlU1ZHQ29udGFpbmVyO1xuLyoqXG4gKiBTZXQgdGhlIGlubmVySFRNTCBwcm9wZXJ0eSBvZiBhIG5vZGVcbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBodG1sXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0SW5uZXJIVE1MID0gY3JlYXRlTWljcm9zb2Z0VW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbiAobm9kZSwgaHRtbCkge1xuICBpZiAobm9kZS5uYW1lc3BhY2VVUkkgPT09IE5hbWVzcGFjZXMuc3ZnKSB7XG5cbiAgICBpZiAoISgnaW5uZXJIVE1MJyBpbiBub2RlKSkge1xuICAgICAgLy8gSUUgZG9lcyBub3QgaGF2ZSBpbm5lckhUTUwgZm9yIFNWRyBub2Rlcywgc28gaW5zdGVhZCB3ZSBpbmplY3QgdGhlXG4gICAgICAvLyBuZXcgbWFya3VwIGluIGEgdGVtcCBub2RlIGFuZCB0aGVuIG1vdmUgdGhlIGNoaWxkIG5vZGVzIGFjcm9zcyBpbnRvXG4gICAgICAvLyB0aGUgdGFyZ2V0IG5vZGVcbiAgICAgIHJldXNhYmxlU1ZHQ29udGFpbmVyID0gcmV1c2FibGVTVkdDb250YWluZXIgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lci5pbm5lckhUTUwgPSAnPHN2Zz4nICsgaHRtbC52YWx1ZU9mKCkudG9TdHJpbmcoKSArICc8L3N2Zz4nO1xuICAgICAgdmFyIHN2Z05vZGUgPSByZXVzYWJsZVNWR0NvbnRhaW5lci5maXJzdENoaWxkO1xuXG4gICAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKSB7XG4gICAgICAgIG5vZGUucmVtb3ZlQ2hpbGQobm9kZS5maXJzdENoaWxkKTtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKHN2Z05vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLmFwcGVuZENoaWxkKHN2Z05vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLmlubmVySFRNTCA9IGh0bWw7XG59KTtcblxuLyoqXG4gKiBIVE1MIG5vZGVUeXBlIHZhbHVlcyB0aGF0IHJlcHJlc2VudCB0aGUgdHlwZSBvZiB0aGUgbm9kZVxuICovXG52YXIgRUxFTUVOVF9OT0RFID0gMTtcbnZhciBURVhUX05PREUgPSAzO1xudmFyIENPTU1FTlRfTk9ERSA9IDg7XG52YXIgRE9DVU1FTlRfTk9ERSA9IDk7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSA9IDExO1xuXG4vKipcbiAqIFNldCB0aGUgdGV4dENvbnRlbnQgcHJvcGVydHkgb2YgYSBub2RlLiBGb3IgdGV4dCB1cGRhdGVzLCBpdCdzIGZhc3RlclxuICogdG8gc2V0IHRoZSBgbm9kZVZhbHVlYCBvZiB0aGUgVGV4dCBub2RlIGRpcmVjdGx5IGluc3RlYWQgb2YgdXNpbmdcbiAqIGAudGV4dENvbnRlbnRgIHdoaWNoIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyBub2RlIGFuZCBjcmVhdGUgYSBuZXcgb25lLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHRleHRcbiAqIEBpbnRlcm5hbFxuICovXG5cbnZhciBzZXRUZXh0Q29udGVudCA9IGZ1bmN0aW9uIChub2RlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0KSB7XG4gICAgdmFyIGZpcnN0Q2hpbGQgPSBub2RlLmZpcnN0Q2hpbGQ7XG5cbiAgICBpZiAoZmlyc3RDaGlsZCAmJiBmaXJzdENoaWxkID09PSBub2RlLmxhc3RDaGlsZCAmJiBmaXJzdENoaWxkLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIGZpcnN0Q2hpbGQubm9kZVZhbHVlID0gdGV4dDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBub2RlLnRleHRDb250ZW50ID0gdGV4dDtcbn07XG5cbi8vIExpc3QgZGVyaXZlZCBmcm9tIEdlY2tvIHNvdXJjZSBjb2RlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvNGU2MzhlZmM3MS9sYXlvdXQvc3R5bGUvdGVzdC9wcm9wZXJ0eV9kYXRhYmFzZS5qc1xudmFyIHNob3J0aGFuZFRvTG9uZ2hhbmQgPSB7XG4gIGFuaW1hdGlvbjogWydhbmltYXRpb25EZWxheScsICdhbmltYXRpb25EaXJlY3Rpb24nLCAnYW5pbWF0aW9uRHVyYXRpb24nLCAnYW5pbWF0aW9uRmlsbE1vZGUnLCAnYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQnLCAnYW5pbWF0aW9uTmFtZScsICdhbmltYXRpb25QbGF5U3RhdGUnLCAnYW5pbWF0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgYmFja2dyb3VuZDogWydiYWNrZ3JvdW5kQXR0YWNobWVudCcsICdiYWNrZ3JvdW5kQ2xpcCcsICdiYWNrZ3JvdW5kQ29sb3InLCAnYmFja2dyb3VuZEltYWdlJywgJ2JhY2tncm91bmRPcmlnaW4nLCAnYmFja2dyb3VuZFBvc2l0aW9uWCcsICdiYWNrZ3JvdW5kUG9zaXRpb25ZJywgJ2JhY2tncm91bmRSZXBlYXQnLCAnYmFja2dyb3VuZFNpemUnXSxcbiAgYmFja2dyb3VuZFBvc2l0aW9uOiBbJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWSddLFxuICBib3JkZXI6IFsnYm9yZGVyQm90dG9tQ29sb3InLCAnYm9yZGVyQm90dG9tU3R5bGUnLCAnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVySW1hZ2VPdXRzZXQnLCAnYm9yZGVySW1hZ2VSZXBlYXQnLCAnYm9yZGVySW1hZ2VTbGljZScsICdib3JkZXJJbWFnZVNvdXJjZScsICdib3JkZXJJbWFnZVdpZHRoJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJywgJ2JvcmRlclRvcENvbG9yJywgJ2JvcmRlclRvcFN0eWxlJywgJ2JvcmRlclRvcFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrRW5kOiBbJ2JvcmRlckJsb2NrRW5kQ29sb3InLCAnYm9yZGVyQmxvY2tFbmRTdHlsZScsICdib3JkZXJCbG9ja0VuZFdpZHRoJ10sXG4gIGJvcmRlckJsb2NrU3RhcnQ6IFsnYm9yZGVyQmxvY2tTdGFydENvbG9yJywgJ2JvcmRlckJsb2NrU3RhcnRTdHlsZScsICdib3JkZXJCbG9ja1N0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyQm90dG9tOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJ10sXG4gIGJvcmRlckNvbG9yOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckxlZnRDb2xvcicsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclRvcENvbG9yJ10sXG4gIGJvcmRlckltYWdlOiBbJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCddLFxuICBib3JkZXJJbmxpbmVFbmQ6IFsnYm9yZGVySW5saW5lRW5kQ29sb3InLCAnYm9yZGVySW5saW5lRW5kU3R5bGUnLCAnYm9yZGVySW5saW5lRW5kV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lU3RhcnQ6IFsnYm9yZGVySW5saW5lU3RhcnRDb2xvcicsICdib3JkZXJJbmxpbmVTdGFydFN0eWxlJywgJ2JvcmRlcklubGluZVN0YXJ0V2lkdGgnXSxcbiAgYm9yZGVyTGVmdDogWydib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCddLFxuICBib3JkZXJSYWRpdXM6IFsnYm9yZGVyQm90dG9tTGVmdFJhZGl1cycsICdib3JkZXJCb3R0b21SaWdodFJhZGl1cycsICdib3JkZXJUb3BMZWZ0UmFkaXVzJywgJ2JvcmRlclRvcFJpZ2h0UmFkaXVzJ10sXG4gIGJvcmRlclJpZ2h0OiBbJ2JvcmRlclJpZ2h0Q29sb3InLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJSaWdodFdpZHRoJ10sXG4gIGJvcmRlclN0eWxlOiBbJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJSaWdodFN0eWxlJywgJ2JvcmRlclRvcFN0eWxlJ10sXG4gIGJvcmRlclRvcDogWydib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJXaWR0aDogWydib3JkZXJCb3R0b21XaWR0aCcsICdib3JkZXJMZWZ0V2lkdGgnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BXaWR0aCddLFxuICBjb2x1bW5SdWxlOiBbJ2NvbHVtblJ1bGVDb2xvcicsICdjb2x1bW5SdWxlU3R5bGUnLCAnY29sdW1uUnVsZVdpZHRoJ10sXG4gIGNvbHVtbnM6IFsnY29sdW1uQ291bnQnLCAnY29sdW1uV2lkdGgnXSxcbiAgZmxleDogWydmbGV4QmFzaXMnLCAnZmxleEdyb3cnLCAnZmxleFNocmluayddLFxuICBmbGV4RmxvdzogWydmbGV4RGlyZWN0aW9uJywgJ2ZsZXhXcmFwJ10sXG4gIGZvbnQ6IFsnZm9udEZhbWlseScsICdmb250RmVhdHVyZVNldHRpbmdzJywgJ2ZvbnRLZXJuaW5nJywgJ2ZvbnRMYW5ndWFnZU92ZXJyaWRlJywgJ2ZvbnRTaXplJywgJ2ZvbnRTaXplQWRqdXN0JywgJ2ZvbnRTdHJldGNoJywgJ2ZvbnRTdHlsZScsICdmb250VmFyaWFudCcsICdmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJywgJ2ZvbnRXZWlnaHQnLCAnbGluZUhlaWdodCddLFxuICBmb250VmFyaWFudDogWydmb250VmFyaWFudEFsdGVybmF0ZXMnLCAnZm9udFZhcmlhbnRDYXBzJywgJ2ZvbnRWYXJpYW50RWFzdEFzaWFuJywgJ2ZvbnRWYXJpYW50TGlnYXR1cmVzJywgJ2ZvbnRWYXJpYW50TnVtZXJpYycsICdmb250VmFyaWFudFBvc2l0aW9uJ10sXG4gIGdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWQ6IFsnZ3JpZEF1dG9Db2x1bW5zJywgJ2dyaWRBdXRvRmxvdycsICdncmlkQXV0b1Jvd3MnLCAnZ3JpZFRlbXBsYXRlQXJlYXMnLCAnZ3JpZFRlbXBsYXRlQ29sdW1ucycsICdncmlkVGVtcGxhdGVSb3dzJ10sXG4gIGdyaWRBcmVhOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0JywgJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRDb2x1bW46IFsnZ3JpZENvbHVtbkVuZCcsICdncmlkQ29sdW1uU3RhcnQnXSxcbiAgZ3JpZENvbHVtbkdhcDogWydjb2x1bW5HYXAnXSxcbiAgZ3JpZEdhcDogWydjb2x1bW5HYXAnLCAncm93R2FwJ10sXG4gIGdyaWRSb3c6IFsnZ3JpZFJvd0VuZCcsICdncmlkUm93U3RhcnQnXSxcbiAgZ3JpZFJvd0dhcDogWydyb3dHYXAnXSxcbiAgZ3JpZFRlbXBsYXRlOiBbJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBsaXN0U3R5bGU6IFsnbGlzdFN0eWxlSW1hZ2UnLCAnbGlzdFN0eWxlUG9zaXRpb24nLCAnbGlzdFN0eWxlVHlwZSddLFxuICBtYXJnaW46IFsnbWFyZ2luQm90dG9tJywgJ21hcmdpbkxlZnQnLCAnbWFyZ2luUmlnaHQnLCAnbWFyZ2luVG9wJ10sXG4gIG1hcmtlcjogWydtYXJrZXJFbmQnLCAnbWFya2VyTWlkJywgJ21hcmtlclN0YXJ0J10sXG4gIG1hc2s6IFsnbWFza0NsaXAnLCAnbWFza0NvbXBvc2l0ZScsICdtYXNrSW1hZ2UnLCAnbWFza01vZGUnLCAnbWFza09yaWdpbicsICdtYXNrUG9zaXRpb25YJywgJ21hc2tQb3NpdGlvblknLCAnbWFza1JlcGVhdCcsICdtYXNrU2l6ZSddLFxuICBtYXNrUG9zaXRpb246IFsnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJ10sXG4gIG91dGxpbmU6IFsnb3V0bGluZUNvbG9yJywgJ291dGxpbmVTdHlsZScsICdvdXRsaW5lV2lkdGgnXSxcbiAgb3ZlcmZsb3c6IFsnb3ZlcmZsb3dYJywgJ292ZXJmbG93WSddLFxuICBwYWRkaW5nOiBbJ3BhZGRpbmdCb3R0b20nLCAncGFkZGluZ0xlZnQnLCAncGFkZGluZ1JpZ2h0JywgJ3BhZGRpbmdUb3AnXSxcbiAgcGxhY2VDb250ZW50OiBbJ2FsaWduQ29udGVudCcsICdqdXN0aWZ5Q29udGVudCddLFxuICBwbGFjZUl0ZW1zOiBbJ2FsaWduSXRlbXMnLCAnanVzdGlmeUl0ZW1zJ10sXG4gIHBsYWNlU2VsZjogWydhbGlnblNlbGYnLCAnanVzdGlmeVNlbGYnXSxcbiAgdGV4dERlY29yYXRpb246IFsndGV4dERlY29yYXRpb25Db2xvcicsICd0ZXh0RGVjb3JhdGlvbkxpbmUnLCAndGV4dERlY29yYXRpb25TdHlsZSddLFxuICB0ZXh0RW1waGFzaXM6IFsndGV4dEVtcGhhc2lzQ29sb3InLCAndGV4dEVtcGhhc2lzU3R5bGUnXSxcbiAgdHJhbnNpdGlvbjogWyd0cmFuc2l0aW9uRGVsYXknLCAndHJhbnNpdGlvbkR1cmF0aW9uJywgJ3RyYW5zaXRpb25Qcm9wZXJ0eScsICd0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb24nXSxcbiAgd29yZFdyYXA6IFsnb3ZlcmZsb3dXcmFwJ11cbn07XG5cbi8qKlxuICogQ1NTIHByb3BlcnRpZXMgd2hpY2ggYWNjZXB0IG51bWJlcnMgYnV0IGFyZSBub3QgaW4gdW5pdHMgb2YgXCJweFwiLlxuICovXG52YXIgaXNVbml0bGVzc051bWJlciA9IHtcbiAgYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG4gIGJvcmRlckltYWdlT3V0c2V0OiB0cnVlLFxuICBib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuICBib3JkZXJJbWFnZVdpZHRoOiB0cnVlLFxuICBib3hGbGV4OiB0cnVlLFxuICBib3hGbGV4R3JvdXA6IHRydWUsXG4gIGJveE9yZGluYWxHcm91cDogdHJ1ZSxcbiAgY29sdW1uQ291bnQ6IHRydWUsXG4gIGNvbHVtbnM6IHRydWUsXG4gIGZsZXg6IHRydWUsXG4gIGZsZXhHcm93OiB0cnVlLFxuICBmbGV4UG9zaXRpdmU6IHRydWUsXG4gIGZsZXhTaHJpbms6IHRydWUsXG4gIGZsZXhOZWdhdGl2ZTogdHJ1ZSxcbiAgZmxleE9yZGVyOiB0cnVlLFxuICBncmlkQXJlYTogdHJ1ZSxcbiAgZ3JpZFJvdzogdHJ1ZSxcbiAgZ3JpZFJvd0VuZDogdHJ1ZSxcbiAgZ3JpZFJvd1NwYW46IHRydWUsXG4gIGdyaWRSb3dTdGFydDogdHJ1ZSxcbiAgZ3JpZENvbHVtbjogdHJ1ZSxcbiAgZ3JpZENvbHVtbkVuZDogdHJ1ZSxcbiAgZ3JpZENvbHVtblNwYW46IHRydWUsXG4gIGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcbiAgZm9udFdlaWdodDogdHJ1ZSxcbiAgbGluZUNsYW1wOiB0cnVlLFxuICBsaW5lSGVpZ2h0OiB0cnVlLFxuICBvcGFjaXR5OiB0cnVlLFxuICBvcmRlcjogdHJ1ZSxcbiAgb3JwaGFuczogdHJ1ZSxcbiAgdGFiU2l6ZTogdHJ1ZSxcbiAgd2lkb3dzOiB0cnVlLFxuICB6SW5kZXg6IHRydWUsXG4gIHpvb206IHRydWUsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IHRydWUsXG4gIGZsb29kT3BhY2l0eTogdHJ1ZSxcbiAgc3RvcE9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZURhc2hhcnJheTogdHJ1ZSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogdHJ1ZSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcbiAgc3Ryb2tlT3BhY2l0eTogdHJ1ZSxcbiAgc3Ryb2tlV2lkdGg6IHRydWVcbn07XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXggdmVuZG9yLXNwZWNpZmljIHByZWZpeCwgZWc6IFdlYmtpdFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBzdHlsZSBuYW1lLCBlZzogdHJhbnNpdGlvbkR1cmF0aW9uXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0eWxlIG5hbWUgcHJlZml4ZWQgd2l0aCBgcHJlZml4YCwgcHJvcGVybHkgY2FtZWxDYXNlZCwgZWc6XG4gKiBXZWJraXRUcmFuc2l0aW9uRHVyYXRpb25cbiAqL1xuXG5mdW5jdGlvbiBwcmVmaXhLZXkocHJlZml4LCBrZXkpIHtcbiAgcmV0dXJuIHByZWZpeCArIGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zdWJzdHJpbmcoMSk7XG59XG4vKipcbiAqIFN1cHBvcnQgc3R5bGUgbmFtZXMgdGhhdCBtYXkgY29tZSBwYXNzZWQgaW4gcHJlZml4ZWQgYnkgYWRkaW5nIHBlcm11dGF0aW9uc1xuICogb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHByZWZpeGVzID0gWydXZWJraXQnLCAnbXMnLCAnTW96JywgJ08nXTsgLy8gVXNpbmcgT2JqZWN0LmtleXMgaGVyZSwgb3IgZWxzZSB0aGUgdmFuaWxsYSBmb3ItaW4gbG9vcCBtYWtlcyBJRTggZ28gaW50byBhblxuLy8gaW5maW5pdGUgbG9vcCwgYmVjYXVzZSBpdCBpdGVyYXRlcyBvdmVyIHRoZSBuZXdseSBhZGRlZCBwcm9wcyB0b28uXG5cbk9iamVjdC5rZXlzKGlzVW5pdGxlc3NOdW1iZXIpLmZvckVhY2goZnVuY3Rpb24gKHByb3ApIHtcbiAgcHJlZml4ZXMuZm9yRWFjaChmdW5jdGlvbiAocHJlZml4KSB7XG4gICAgaXNVbml0bGVzc051bWJlcltwcmVmaXhLZXkocHJlZml4LCBwcm9wKV0gPSBpc1VuaXRsZXNzTnVtYmVyW3Byb3BdO1xuICB9KTtcbn0pO1xuXG4vKipcbiAqIENvbnZlcnQgYSB2YWx1ZSBpbnRvIHRoZSBwcm9wZXIgY3NzIHdyaXRhYmxlIHZhbHVlLiBUaGUgc3R5bGUgbmFtZSBgbmFtZWBcbiAqIHNob3VsZCBiZSBsb2dpY2FsIChubyBoeXBoZW5zKSwgYXMgc3BlY2lmaWVkXG4gKiBpbiBgQ1NTUHJvcGVydHkuaXNVbml0bGVzc051bWJlcmAuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgQ1NTIHByb3BlcnR5IG5hbWUgc3VjaCBhcyBgdG9wTWFyZ2luYC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQ1NTIHByb3BlcnR5IHZhbHVlIHN1Y2ggYXMgYDEwcHhgLlxuICogQHJldHVybiB7c3RyaW5nfSBOb3JtYWxpemVkIHN0eWxlIHZhbHVlIHdpdGggZGltZW5zaW9ucyBhcHBsaWVkLlxuICovXG5cbmZ1bmN0aW9uIGRhbmdlcm91c1N0eWxlVmFsdWUobmFtZSwgdmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgLy8gTm90ZSB0aGF0IHdlJ3ZlIHJlbW92ZWQgZXNjYXBlVGV4dEZvckJyb3dzZXIoKSBjYWxscyBoZXJlIHNpbmNlIHRoZVxuICAvLyB3aG9sZSBzdHJpbmcgd2lsbCBiZSBlc2NhcGVkIHdoZW4gdGhlIGF0dHJpYnV0ZSBpcyBpbmplY3RlZCBpbnRvXG4gIC8vIHRoZSBtYXJrdXAuIElmIHlvdSBwcm92aWRlIHVuc2FmZSB1c2VyIGRhdGEgaGVyZSB0aGV5IGNhbiBpbmplY3RcbiAgLy8gYXJiaXRyYXJ5IENTUyB3aGljaCBtYXkgYmUgcHJvYmxlbWF0aWMgKEkgY291bGRuJ3QgcmVwcm8gdGhpcyk6XG4gIC8vIGh0dHBzOi8vd3d3Lm93YXNwLm9yZy9pbmRleC5waHAvWFNTX0ZpbHRlcl9FdmFzaW9uX0NoZWF0X1NoZWV0XG4gIC8vIGh0dHA6Ly93d3cudGhlc3Bhbm5lci5jby51ay8yMDA3LzExLzI2L3VsdGltYXRlLXhzcy1jc3MtaW5qZWN0aW9uL1xuICAvLyBUaGlzIGlzIG5vdCBhbiBYU1MgaG9sZSBidXQgaW5zdGVhZCBhIHBvdGVudGlhbCBDU1MgaW5qZWN0aW9uIGlzc3VlXG4gIC8vIHdoaWNoIGhhcyBsZWFkIHRvIGEgZ3JlYXRlciBkaXNjdXNzaW9uIGFib3V0IGhvdyB3ZSdyZSBnb2luZyB0b1xuICAvLyB0cnVzdCBVUkxzIG1vdmluZyBmb3J3YXJkLiBTZWUgIzIxMTU5MDFcbiAgdmFyIGlzRW1wdHkgPSB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nIHx8IHZhbHVlID09PSAnJztcblxuICBpZiAoaXNFbXB0eSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICghaXNDdXN0b21Qcm9wZXJ0eSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSAwICYmICEoaXNVbml0bGVzc051bWJlci5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiBpc1VuaXRsZXNzTnVtYmVyW25hbWVdKSkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7IC8vIFByZXN1bWVzIGltcGxpY2l0ICdweCcgc3VmZml4IGZvciB1bml0bGVzcyBudW1iZXJzXG4gIH1cblxuICByZXR1cm4gKCcnICsgdmFsdWUpLnRyaW0oKTtcbn1cblxudmFyIHVwcGVyY2FzZVBhdHRlcm4gPSAvKFtBLVpdKS9nO1xudmFyIG1zUGF0dGVybiA9IC9ebXMtLztcbi8qKlxuICogSHlwaGVuYXRlcyBhIGNhbWVsY2FzZWQgQ1NTIHByb3BlcnR5IG5hbWUsIGZvciBleGFtcGxlOlxuICpcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ2JhY2tncm91bmRDb2xvcicpXG4gKiAgIDwgXCJiYWNrZ3JvdW5kLWNvbG9yXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ01velRyYW5zaXRpb24nKVxuICogICA8IFwiLW1vei10cmFuc2l0aW9uXCJcbiAqICAgPiBoeXBoZW5hdGVTdHlsZU5hbWUoJ21zVHJhbnNpdGlvbicpXG4gKiAgIDwgXCItbXMtdHJhbnNpdGlvblwiXG4gKlxuICogQXMgTW9kZXJuaXpyIHN1Z2dlc3RzIChodHRwOi8vbW9kZXJuaXpyLmNvbS9kb2NzLyNwcmVmaXhlZCksIGFuIGBtc2AgcHJlZml4XG4gKiBpcyBjb252ZXJ0ZWQgdG8gYC1tcy1gLlxuICovXG5cbmZ1bmN0aW9uIGh5cGhlbmF0ZVN0eWxlTmFtZShuYW1lKSB7XG4gIHJldHVybiBuYW1lLnJlcGxhY2UodXBwZXJjYXNlUGF0dGVybiwgJy0kMScpLnRvTG93ZXJDYXNlKCkucmVwbGFjZShtc1BhdHRlcm4sICctbXMtJyk7XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIC8vICdtc1RyYW5zZm9ybScgaXMgY29ycmVjdCwgYnV0IHRoZSBvdGhlciBwcmVmaXhlcyBzaG91bGQgYmUgY2FwaXRhbGl6ZWRcbiAgdmFyIGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybiA9IC9eKD86d2Via2l0fG1venxvKVtBLVpdLztcbiAgdmFyIG1zUGF0dGVybiQxID0gL14tbXMtLztcbiAgdmFyIGh5cGhlblBhdHRlcm4gPSAvLSguKS9nOyAvLyBzdHlsZSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb25cblxuICB2YXIgYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuID0gLztcXHMqJC87XG4gIHZhciB3YXJuZWRTdHlsZU5hbWVzID0ge307XG4gIHZhciB3YXJuZWRTdHlsZVZhbHVlcyA9IHt9O1xuICB2YXIgd2FybmVkRm9yTmFOVmFsdWUgPSBmYWxzZTtcbiAgdmFyIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSBmYWxzZTtcblxuICB2YXIgY2FtZWxpemUgPSBmdW5jdGlvbiAoc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGh5cGhlblBhdHRlcm4sIGZ1bmN0aW9uIChfLCBjaGFyYWN0ZXIpIHtcbiAgICAgIHJldHVybiBjaGFyYWN0ZXIudG9VcHBlckNhc2UoKTtcbiAgICB9KTtcbiAgfTtcblxuICB2YXIgd2Fybkh5cGhlbmF0ZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIC8vIEFzIEFuZGkgU21pdGggc3VnZ2VzdHNcbiAgICAvLyAoaHR0cDovL3d3dy5hbmRpc21pdGguY29tL2Jsb2cvMjAxMi8wMi9tb2Rlcm5penItcHJlZml4ZWQvKSwgYW4gYC1tc2AgcHJlZml4XG4gICAgLy8gaXMgY29udmVydGVkIHRvIGxvd2VyY2FzZSBgbXNgLlxuICAgIGNhbWVsaXplKG5hbWUucmVwbGFjZShtc1BhdHRlcm4kMSwgJ21zLScpKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZSA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlTmFtZXMuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Vuc3VwcG9ydGVkIHZlbmRvci1wcmVmaXhlZCBzdHlsZSBwcm9wZXJ0eSAlcy4gRGlkIHlvdSBtZWFuICVzPycsIG5hbWUsIG5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKDEpKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZFN0eWxlVmFsdWVzLmhhc093blByb3BlcnR5KHZhbHVlKSAmJiB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZVZhbHVlc1t2YWx1ZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoXCJTdHlsZSBwcm9wZXJ0eSB2YWx1ZXMgc2hvdWxkbid0IGNvbnRhaW4gYSBzZW1pY29sb24uIFwiICsgJ1RyeSBcIiVzOiAlc1wiIGluc3RlYWQuJywgbmFtZSwgdmFsdWUucmVwbGFjZShiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4sICcnKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlSXNOYU4gPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9yTmFOVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JOYU5WYWx1ZSA9IHRydWU7XG5cbiAgICBlcnJvcignYE5hTmAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBpZiAod2FybmVkRm9ySW5maW5pdHlWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdhcm5lZEZvckluZmluaXR5VmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BJbmZpbml0eWAgaXMgYW4gaW52YWxpZCB2YWx1ZSBmb3IgdGhlIGAlc2AgY3NzIHN0eWxlIHByb3BlcnR5LicsIG5hbWUpO1xuICB9O1xuXG4gIHdhcm5WYWxpZFN0eWxlID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKG5hbWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lKG5hbWUpO1xuICAgIH0gZWxzZSBpZiAoYmFkVmVuZG9yZWRTdHlsZU5hbWVQYXR0ZXJuLnRlc3QobmFtZSkpIHtcbiAgICAgIHdhcm5CYWRWZW5kb3JlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybi50ZXN0KHZhbHVlKSkge1xuICAgICAgd2FyblN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uKG5hbWUsIHZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzTmFOKG5hbWUsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoIWlzRmluaXRlKHZhbHVlKSkge1xuICAgICAgICB3YXJuU3R5bGVWYWx1ZUlzSW5maW5pdHkobmFtZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cblxudmFyIHdhcm5WYWxpZFN0eWxlJDEgPSB3YXJuVmFsaWRTdHlsZTtcblxuLyoqXG4gKiBPcGVyYXRpb25zIGZvciBkZWFsaW5nIHdpdGggQ1NTIHByb3BlcnRpZXMuXG4gKi9cblxuLyoqXG4gKiBUaGlzIGNyZWF0ZXMgYSBzdHJpbmcgdGhhdCBpcyBleHBlY3RlZCB0byBiZSBlcXVpdmFsZW50IHRvIHRoZSBzdHlsZVxuICogYXR0cmlidXRlIGdlbmVyYXRlZCBieSBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuIEl0IGJ5LXBhc3NlcyB3YXJuaW5ncyBhbmRcbiAqIHNlY3VyaXR5IGNoZWNrcyBzbyBpdCdzIG5vdCBzYWZlIHRvIHVzZSB0aGlzIHZhbHVlIGZvciBhbnl0aGluZyBvdGhlciB0aGFuXG4gKiBjb21wYXJpc29uLiBJdCBpcyBvbmx5IHVzZWQgaW4gREVWIGZvciBTU1IgdmFsaWRhdGlvbi5cbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMoc3R5bGVzKSB7XG4gIHtcbiAgICB2YXIgc2VyaWFsaXplZCA9ICcnO1xuICAgIHZhciBkZWxpbWl0ZXIgPSAnJztcblxuICAgIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICAgIGlmICghc3R5bGVzLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHlsZVZhbHVlID0gc3R5bGVzW3N0eWxlTmFtZV07XG5cbiAgICAgIGlmIChzdHlsZVZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcbiAgICAgICAgc2VyaWFsaXplZCArPSBkZWxpbWl0ZXIgKyAoaXNDdXN0b21Qcm9wZXJ0eSA/IHN0eWxlTmFtZSA6IGh5cGhlbmF0ZVN0eWxlTmFtZShzdHlsZU5hbWUpKSArICc6JztcbiAgICAgICAgc2VyaWFsaXplZCArPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSwgaXNDdXN0b21Qcm9wZXJ0eSk7XG4gICAgICAgIGRlbGltaXRlciA9ICc7JztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2VyaWFsaXplZCB8fCBudWxsO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBtdWx0aXBsZSBzdHlsZXMgb24gYSBub2RlLiAgSWYgYSB2YWx1ZSBpcyBzcGVjaWZpZWQgYXNcbiAqICcnIChlbXB0eSBzdHJpbmcpLCB0aGUgY29ycmVzcG9uZGluZyBzdHlsZSBwcm9wZXJ0eSB3aWxsIGJlIHVuc2V0LlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IHN0eWxlc1xuICovXG5cbmZ1bmN0aW9uIHNldFZhbHVlRm9yU3R5bGVzKG5vZGUsIHN0eWxlcykge1xuICB2YXIgc3R5bGUgPSBub2RlLnN0eWxlO1xuXG4gIGZvciAodmFyIHN0eWxlTmFtZSBpbiBzdHlsZXMpIHtcbiAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IHN0eWxlTmFtZS5pbmRleE9mKCctLScpID09PSAwO1xuXG4gICAge1xuICAgICAgaWYgKCFpc0N1c3RvbVByb3BlcnR5KSB7XG4gICAgICAgIHdhcm5WYWxpZFN0eWxlJDEoc3R5bGVOYW1lLCBzdHlsZXNbc3R5bGVOYW1lXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHN0eWxlVmFsdWUgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0sIGlzQ3VzdG9tUHJvcGVydHkpO1xuXG4gICAgaWYgKHN0eWxlTmFtZSA9PT0gJ2Zsb2F0Jykge1xuICAgICAgc3R5bGVOYW1lID0gJ2Nzc0Zsb2F0JztcbiAgICB9XG5cbiAgICBpZiAoaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVOYW1lLCBzdHlsZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVbc3R5bGVOYW1lXSA9IHN0eWxlVmFsdWU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVmFsdWVFbXB0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG59XG4vKipcbiAqIEdpdmVuIHtjb2xvcjogJ3JlZCcsIG92ZXJmbG93OiAnaGlkZGVuJ30gcmV0dXJucyB7XG4gKiAgIGNvbG9yOiAnY29sb3InLFxuICogICBvdmVyZmxvd1g6ICdvdmVyZmxvdycsXG4gKiAgIG92ZXJmbG93WTogJ292ZXJmbG93JyxcbiAqIH0uIFRoaXMgY2FuIGJlIHJlYWQgYXMgXCJ0aGUgb3ZlcmZsb3dZIHByb3BlcnR5IHdhcyBzZXQgYnkgdGhlIG92ZXJmbG93XG4gKiBzaG9ydGhhbmRcIi4gVGhhdCBpcywgdGhlIHZhbHVlcyBhcmUgdGhlIHByb3BlcnR5IHRoYXQgZWFjaCB3YXMgZGVyaXZlZCBmcm9tLlxuICovXG5cblxuZnVuY3Rpb24gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlcykge1xuICB2YXIgZXhwYW5kZWQgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gc3R5bGVzKSB7XG4gICAgdmFyIGxvbmdoYW5kcyA9IHNob3J0aGFuZFRvTG9uZ2hhbmRba2V5XSB8fCBba2V5XTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbG9uZ2hhbmRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBleHBhbmRlZFtsb25naGFuZHNbaV1dID0ga2V5O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBhbmRlZDtcbn1cbi8qKlxuICogV2hlbiBtaXhpbmcgc2hvcnRoYW5kIGFuZCBsb25naGFuZCBwcm9wZXJ0eSBuYW1lcywgd2Ugd2FybiBkdXJpbmcgdXBkYXRlcyBpZlxuICogd2UgZXhwZWN0IGFuIGluY29ycmVjdCByZXN1bHQgdG8gb2NjdXIuIEluIHBhcnRpY3VsYXIsIHdlIHdhcm4gZm9yOlxuICpcbiAqIFVwZGF0aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIG92ZXJ3cml0dGVuKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnYmF6JywgZm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJ2JheidcbiAqIFJlbW92aW5nIGEgc2hvcnRoYW5kIHByb3BlcnR5IChsb25naGFuZCBnZXRzIGxvc3QgdG9vKTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250VmFyaWFudDogJ2Jhcid9XG4gKiAgIGJlY29tZXMgLnN0eWxlLmZvbnQgPSAnJ1xuICogUmVtb3ZpbmcgYSBsb25naGFuZCBwcm9wZXJ0eSAoc2hvdWxkIHJldmVydCB0byBzaG9ydGhhbmQ7IGRvZXNuJ3QpOlxuICogICB7Zm9udDogJ2ZvbycsIGZvbnRWYXJpYW50OiAnYmFyJ30gLT4ge2ZvbnQ6ICdmb28nfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250VmFyaWFudCA9ICcnXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0U3R5bGVzKSB7XG4gIHtcbiAgICBpZiAoIW5leHRTdHlsZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXhwYW5kZWRVcGRhdGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKHN0eWxlVXBkYXRlcyk7XG4gICAgdmFyIGV4cGFuZGVkU3R5bGVzID0gZXhwYW5kU2hvcnRoYW5kTWFwKG5leHRTdHlsZXMpO1xuICAgIHZhciB3YXJuZWRBYm91dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGV4cGFuZGVkVXBkYXRlcykge1xuICAgICAgdmFyIG9yaWdpbmFsS2V5ID0gZXhwYW5kZWRVcGRhdGVzW2tleV07XG4gICAgICB2YXIgY29ycmVjdE9yaWdpbmFsS2V5ID0gZXhwYW5kZWRTdHlsZXNba2V5XTtcblxuICAgICAgaWYgKGNvcnJlY3RPcmlnaW5hbEtleSAmJiBvcmlnaW5hbEtleSAhPT0gY29ycmVjdE9yaWdpbmFsS2V5KSB7XG4gICAgICAgIHZhciB3YXJuaW5nS2V5ID0gb3JpZ2luYWxLZXkgKyAnLCcgKyBjb3JyZWN0T3JpZ2luYWxLZXk7XG5cbiAgICAgICAgaWYgKHdhcm5lZEFib3V0W3dhcm5pbmdLZXldKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICB3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzIGEgc3R5bGUgcHJvcGVydHkgZHVyaW5nIHJlcmVuZGVyICglcykgd2hlbiBhICcgKyAnY29uZmxpY3RpbmcgcHJvcGVydHkgaXMgc2V0ICglcykgY2FuIGxlYWQgdG8gc3R5bGluZyBidWdzLiBUbyAnICsgXCJhdm9pZCB0aGlzLCBkb24ndCBtaXggc2hvcnRoYW5kIGFuZCBub24tc2hvcnRoYW5kIHByb3BlcnRpZXMgXCIgKyAnZm9yIHRoZSBzYW1lIHZhbHVlOyBpbnN0ZWFkLCByZXBsYWNlIHRoZSBzaG9ydGhhbmQgd2l0aCAnICsgJ3NlcGFyYXRlIHZhbHVlcy4nLCBpc1ZhbHVlRW1wdHkoc3R5bGVVcGRhdGVzW29yaWdpbmFsS2V5XSkgPyAnUmVtb3ZpbmcnIDogJ1VwZGF0aW5nJywgb3JpZ2luYWxLZXksIGNvcnJlY3RPcmlnaW5hbEtleSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIEZvciBIVE1MLCBjZXJ0YWluIHRhZ3Mgc2hvdWxkIG9taXQgdGhlaXIgY2xvc2UgdGFnLiBXZSBrZWVwIGEgbGlzdCBmb3Jcbi8vIHRob3NlIHNwZWNpYWwtY2FzZSB0YWdzLlxudmFyIG9taXR0ZWRDbG9zZVRhZ3MgPSB7XG4gIGFyZWE6IHRydWUsXG4gIGJhc2U6IHRydWUsXG4gIGJyOiB0cnVlLFxuICBjb2w6IHRydWUsXG4gIGVtYmVkOiB0cnVlLFxuICBocjogdHJ1ZSxcbiAgaW1nOiB0cnVlLFxuICBpbnB1dDogdHJ1ZSxcbiAga2V5Z2VuOiB0cnVlLFxuICBsaW5rOiB0cnVlLFxuICBtZXRhOiB0cnVlLFxuICBwYXJhbTogdHJ1ZSxcbiAgc291cmNlOiB0cnVlLFxuICB0cmFjazogdHJ1ZSxcbiAgd2JyOiB0cnVlIC8vIE5PVEU6IG1lbnVpdGVtJ3MgY2xvc2UgdGFnIHNob3VsZCBiZSBvbWl0dGVkLCBidXQgdGhhdCBjYXVzZXMgcHJvYmxlbXMuXG5cbn07XG5cbi8vIGBvbWl0dGVkQ2xvc2VUYWdzYCBleGNlcHQgdGhhdCBgbWVudWl0ZW1gIHNob3VsZCBzdGlsbCBoYXZlIGl0cyBjbG9zaW5nIHRhZy5cblxudmFyIHZvaWRFbGVtZW50VGFncyA9IF9hc3NpZ24oe1xuICBtZW51aXRlbTogdHJ1ZVxufSwgb21pdHRlZENsb3NlVGFncyk7XG5cbnZhciBIVE1MID0gJ19faHRtbCc7XG5cbmZ1bmN0aW9uIGFzc2VydFZhbGlkUHJvcHModGFnLCBwcm9wcykge1xuICBpZiAoIXByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIE5vdGUgdGhlIHVzZSBvZiBgPT1gIHdoaWNoIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWQuXG5cblxuICBpZiAodm9pZEVsZW1lbnRUYWdzW3RhZ10pIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MID09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCB0YWcgKyBcIiBpcyBhIHZvaWQgZWxlbWVudCB0YWcgYW5kIG11c3QgbmVpdGhlciBoYXZlIGBjaGlsZHJlbmAgbm9yIHVzZSBgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUxgLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9IG51bGwpIHtcbiAgICBpZiAoIShwcm9wcy5jaGlsZHJlbiA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW4gb25seSBzZXQgb25lIG9mIGBjaGlsZHJlbmAgb3IgYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgSFRNTCBpbiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiYHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYCBtdXN0IGJlIGluIHRoZSBmb3JtIGB7X19odG1sOiAuLi59YC4gUGxlYXNlIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kYW5nZXJvdXNseS1zZXQtaW5uZXItaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoIXByb3BzLnN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyAmJiBwcm9wcy5jb250ZW50RWRpdGFibGUgJiYgcHJvcHMuY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0EgY29tcG9uZW50IGlzIGBjb250ZW50RWRpdGFibGVgIGFuZCBjb250YWlucyBgY2hpbGRyZW5gIG1hbmFnZWQgYnkgJyArICdSZWFjdC4gSXQgaXMgbm93IHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gZ3VhcmFudGVlIHRoYXQgbm9uZSBvZiAnICsgJ3Rob3NlIG5vZGVzIGFyZSB1bmV4cGVjdGVkbHkgbW9kaWZpZWQgb3IgZHVwbGljYXRlZC4gVGhpcyBpcyAnICsgJ3Byb2JhYmx5IG5vdCBpbnRlbnRpb25hbC4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwcm9wcy5zdHlsZSA9PSBudWxsIHx8IHR5cGVvZiBwcm9wcy5zdHlsZSA9PT0gJ29iamVjdCcpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIGBzdHlsZWAgcHJvcCBleHBlY3RzIGEgbWFwcGluZyBmcm9tIHN0eWxlIHByb3BlcnRpZXMgdG8gdmFsdWVzLCBub3QgYSBzdHJpbmcuIEZvciBleGFtcGxlLCBzdHlsZT17e21hcmdpblJpZ2h0OiBzcGFjaW5nICsgJ2VtJ319IHdoZW4gdXNpbmcgSlNYLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ3VzdG9tQ29tcG9uZW50KHRhZ05hbWUsIHByb3BzKSB7XG4gIGlmICh0YWdOYW1lLmluZGV4T2YoJy0nKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJztcbiAgfVxuXG4gIHN3aXRjaCAodGFnTmFtZSkge1xuICAgIC8vIFRoZXNlIGFyZSByZXNlcnZlZCBTVkcgYW5kIE1hdGhNTCBlbGVtZW50cy5cbiAgICAvLyBXZSBkb24ndCBtaW5kIHRoaXMgbGlzdCB0b28gbXVjaCBiZWNhdXNlIHdlIGV4cGVjdCBpdCB0byBuZXZlciBncm93LlxuICAgIC8vIFRoZSBhbHRlcm5hdGl2ZSBpcyB0byB0cmFjayB0aGUgbmFtZXNwYWNlIGluIGEgZmV3IHBsYWNlcyB3aGljaCBpcyBjb252b2x1dGVkLlxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjdXN0b20tZWxlbWVudHMtY29yZS1jb25jZXB0c1xuICAgIGNhc2UgJ2Fubm90YXRpb24teG1sJzpcbiAgICBjYXNlICdjb2xvci1wcm9maWxlJzpcbiAgICBjYXNlICdmb250LWZhY2UnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1zcmMnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS11cmknOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1mb3JtYXQnOlxuICAgIGNhc2UgJ2ZvbnQtZmFjZS1uYW1lJzpcbiAgICBjYXNlICdtaXNzaW5nLWdseXBoJzpcbiAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoZSBIVE1MIG9yIFNWRyBhbGxvd2VkIGF0dHJpYnV0ZSBsaXN0LCBiZSBzdXJlIHRvXG4vLyBhbHNvIGFkZCB0aGVtIHRvIHRoaXMgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdCBuYW1lXG4vLyB3YXJuaW5ncy5cbnZhciBwb3NzaWJsZVN0YW5kYXJkTmFtZXMgPSB7XG4gIC8vIEhUTUxcbiAgYWNjZXB0OiAnYWNjZXB0JyxcbiAgYWNjZXB0Y2hhcnNldDogJ2FjY2VwdENoYXJzZXQnLFxuICAnYWNjZXB0LWNoYXJzZXQnOiAnYWNjZXB0Q2hhcnNldCcsXG4gIGFjY2Vzc2tleTogJ2FjY2Vzc0tleScsXG4gIGFjdGlvbjogJ2FjdGlvbicsXG4gIGFsbG93ZnVsbHNjcmVlbjogJ2FsbG93RnVsbFNjcmVlbicsXG4gIGFsdDogJ2FsdCcsXG4gIGFzOiAnYXMnLFxuICBhc3luYzogJ2FzeW5jJyxcbiAgYXV0b2NhcGl0YWxpemU6ICdhdXRvQ2FwaXRhbGl6ZScsXG4gIGF1dG9jb21wbGV0ZTogJ2F1dG9Db21wbGV0ZScsXG4gIGF1dG9jb3JyZWN0OiAnYXV0b0NvcnJlY3QnLFxuICBhdXRvZm9jdXM6ICdhdXRvRm9jdXMnLFxuICBhdXRvcGxheTogJ2F1dG9QbGF5JyxcbiAgYXV0b3NhdmU6ICdhdXRvU2F2ZScsXG4gIGNhcHR1cmU6ICdjYXB0dXJlJyxcbiAgY2VsbHBhZGRpbmc6ICdjZWxsUGFkZGluZycsXG4gIGNlbGxzcGFjaW5nOiAnY2VsbFNwYWNpbmcnLFxuICBjaGFsbGVuZ2U6ICdjaGFsbGVuZ2UnLFxuICBjaGFyc2V0OiAnY2hhclNldCcsXG4gIGNoZWNrZWQ6ICdjaGVja2VkJyxcbiAgY2hpbGRyZW46ICdjaGlsZHJlbicsXG4gIGNpdGU6ICdjaXRlJyxcbiAgY2xhc3M6ICdjbGFzc05hbWUnLFxuICBjbGFzc2lkOiAnY2xhc3NJRCcsXG4gIGNsYXNzbmFtZTogJ2NsYXNzTmFtZScsXG4gIGNvbHM6ICdjb2xzJyxcbiAgY29sc3BhbjogJ2NvbFNwYW4nLFxuICBjb250ZW50OiAnY29udGVudCcsXG4gIGNvbnRlbnRlZGl0YWJsZTogJ2NvbnRlbnRFZGl0YWJsZScsXG4gIGNvbnRleHRtZW51OiAnY29udGV4dE1lbnUnLFxuICBjb250cm9sczogJ2NvbnRyb2xzJyxcbiAgY29udHJvbHNsaXN0OiAnY29udHJvbHNMaXN0JyxcbiAgY29vcmRzOiAnY29vcmRzJyxcbiAgY3Jvc3NvcmlnaW46ICdjcm9zc09yaWdpbicsXG4gIGRhbmdlcm91c2x5c2V0aW5uZXJodG1sOiAnZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwnLFxuICBkYXRhOiAnZGF0YScsXG4gIGRhdGV0aW1lOiAnZGF0ZVRpbWUnLFxuICBkZWZhdWx0OiAnZGVmYXVsdCcsXG4gIGRlZmF1bHRjaGVja2VkOiAnZGVmYXVsdENoZWNrZWQnLFxuICBkZWZhdWx0dmFsdWU6ICdkZWZhdWx0VmFsdWUnLFxuICBkZWZlcjogJ2RlZmVyJyxcbiAgZGlyOiAnZGlyJyxcbiAgZGlzYWJsZWQ6ICdkaXNhYmxlZCcsXG4gIGRpc2FibGVwaWN0dXJlaW5waWN0dXJlOiAnZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUnLFxuICBkaXNhYmxlcmVtb3RlcGxheWJhY2s6ICdkaXNhYmxlUmVtb3RlUGxheWJhY2snLFxuICBkb3dubG9hZDogJ2Rvd25sb2FkJyxcbiAgZHJhZ2dhYmxlOiAnZHJhZ2dhYmxlJyxcbiAgZW5jdHlwZTogJ2VuY1R5cGUnLFxuICBlbnRlcmtleWhpbnQ6ICdlbnRlcktleUhpbnQnLFxuICBmb3I6ICdodG1sRm9yJyxcbiAgZm9ybTogJ2Zvcm0nLFxuICBmb3JtbWV0aG9kOiAnZm9ybU1ldGhvZCcsXG4gIGZvcm1hY3Rpb246ICdmb3JtQWN0aW9uJyxcbiAgZm9ybWVuY3R5cGU6ICdmb3JtRW5jVHlwZScsXG4gIGZvcm1ub3ZhbGlkYXRlOiAnZm9ybU5vVmFsaWRhdGUnLFxuICBmb3JtdGFyZ2V0OiAnZm9ybVRhcmdldCcsXG4gIGZyYW1lYm9yZGVyOiAnZnJhbWVCb3JkZXInLFxuICBoZWFkZXJzOiAnaGVhZGVycycsXG4gIGhlaWdodDogJ2hlaWdodCcsXG4gIGhpZGRlbjogJ2hpZGRlbicsXG4gIGhpZ2g6ICdoaWdoJyxcbiAgaHJlZjogJ2hyZWYnLFxuICBocmVmbGFuZzogJ2hyZWZMYW5nJyxcbiAgaHRtbGZvcjogJ2h0bWxGb3InLFxuICBodHRwZXF1aXY6ICdodHRwRXF1aXYnLFxuICAnaHR0cC1lcXVpdic6ICdodHRwRXF1aXYnLFxuICBpY29uOiAnaWNvbicsXG4gIGlkOiAnaWQnLFxuICBpbm5lcmh0bWw6ICdpbm5lckhUTUwnLFxuICBpbnB1dG1vZGU6ICdpbnB1dE1vZGUnLFxuICBpbnRlZ3JpdHk6ICdpbnRlZ3JpdHknLFxuICBpczogJ2lzJyxcbiAgaXRlbWlkOiAnaXRlbUlEJyxcbiAgaXRlbXByb3A6ICdpdGVtUHJvcCcsXG4gIGl0ZW1yZWY6ICdpdGVtUmVmJyxcbiAgaXRlbXNjb3BlOiAnaXRlbVNjb3BlJyxcbiAgaXRlbXR5cGU6ICdpdGVtVHlwZScsXG4gIGtleXBhcmFtczogJ2tleVBhcmFtcycsXG4gIGtleXR5cGU6ICdrZXlUeXBlJyxcbiAga2luZDogJ2tpbmQnLFxuICBsYWJlbDogJ2xhYmVsJyxcbiAgbGFuZzogJ2xhbmcnLFxuICBsaXN0OiAnbGlzdCcsXG4gIGxvb3A6ICdsb29wJyxcbiAgbG93OiAnbG93JyxcbiAgbWFuaWZlc3Q6ICdtYW5pZmVzdCcsXG4gIG1hcmdpbndpZHRoOiAnbWFyZ2luV2lkdGgnLFxuICBtYXJnaW5oZWlnaHQ6ICdtYXJnaW5IZWlnaHQnLFxuICBtYXg6ICdtYXgnLFxuICBtYXhsZW5ndGg6ICdtYXhMZW5ndGgnLFxuICBtZWRpYTogJ21lZGlhJyxcbiAgbWVkaWFncm91cDogJ21lZGlhR3JvdXAnLFxuICBtZXRob2Q6ICdtZXRob2QnLFxuICBtaW46ICdtaW4nLFxuICBtaW5sZW5ndGg6ICdtaW5MZW5ndGgnLFxuICBtdWx0aXBsZTogJ211bHRpcGxlJyxcbiAgbXV0ZWQ6ICdtdXRlZCcsXG4gIG5hbWU6ICduYW1lJyxcbiAgbm9tb2R1bGU6ICdub01vZHVsZScsXG4gIG5vbmNlOiAnbm9uY2UnLFxuICBub3ZhbGlkYXRlOiAnbm9WYWxpZGF0ZScsXG4gIG9wZW46ICdvcGVuJyxcbiAgb3B0aW11bTogJ29wdGltdW0nLFxuICBwYXR0ZXJuOiAncGF0dGVybicsXG4gIHBsYWNlaG9sZGVyOiAncGxhY2Vob2xkZXInLFxuICBwbGF5c2lubGluZTogJ3BsYXlzSW5saW5lJyxcbiAgcG9zdGVyOiAncG9zdGVyJyxcbiAgcHJlbG9hZDogJ3ByZWxvYWQnLFxuICBwcm9maWxlOiAncHJvZmlsZScsXG4gIHJhZGlvZ3JvdXA6ICdyYWRpb0dyb3VwJyxcbiAgcmVhZG9ubHk6ICdyZWFkT25seScsXG4gIHJlZmVycmVycG9saWN5OiAncmVmZXJyZXJQb2xpY3knLFxuICByZWw6ICdyZWwnLFxuICByZXF1aXJlZDogJ3JlcXVpcmVkJyxcbiAgcmV2ZXJzZWQ6ICdyZXZlcnNlZCcsXG4gIHJvbGU6ICdyb2xlJyxcbiAgcm93czogJ3Jvd3MnLFxuICByb3dzcGFuOiAncm93U3BhbicsXG4gIHNhbmRib3g6ICdzYW5kYm94JyxcbiAgc2NvcGU6ICdzY29wZScsXG4gIHNjb3BlZDogJ3Njb3BlZCcsXG4gIHNjcm9sbGluZzogJ3Njcm9sbGluZycsXG4gIHNlYW1sZXNzOiAnc2VhbWxlc3MnLFxuICBzZWxlY3RlZDogJ3NlbGVjdGVkJyxcbiAgc2hhcGU6ICdzaGFwZScsXG4gIHNpemU6ICdzaXplJyxcbiAgc2l6ZXM6ICdzaXplcycsXG4gIHNwYW46ICdzcGFuJyxcbiAgc3BlbGxjaGVjazogJ3NwZWxsQ2hlY2snLFxuICBzcmM6ICdzcmMnLFxuICBzcmNkb2M6ICdzcmNEb2MnLFxuICBzcmNsYW5nOiAnc3JjTGFuZycsXG4gIHNyY3NldDogJ3NyY1NldCcsXG4gIHN0YXJ0OiAnc3RhcnQnLFxuICBzdGVwOiAnc3RlcCcsXG4gIHN0eWxlOiAnc3R5bGUnLFxuICBzdW1tYXJ5OiAnc3VtbWFyeScsXG4gIHRhYmluZGV4OiAndGFiSW5kZXgnLFxuICB0YXJnZXQ6ICd0YXJnZXQnLFxuICB0aXRsZTogJ3RpdGxlJyxcbiAgdHlwZTogJ3R5cGUnLFxuICB1c2VtYXA6ICd1c2VNYXAnLFxuICB2YWx1ZTogJ3ZhbHVlJyxcbiAgd2lkdGg6ICd3aWR0aCcsXG4gIHdtb2RlOiAnd21vZGUnLFxuICB3cmFwOiAnd3JhcCcsXG4gIC8vIFNWR1xuICBhYm91dDogJ2Fib3V0JyxcbiAgYWNjZW50aGVpZ2h0OiAnYWNjZW50SGVpZ2h0JyxcbiAgJ2FjY2VudC1oZWlnaHQnOiAnYWNjZW50SGVpZ2h0JyxcbiAgYWNjdW11bGF0ZTogJ2FjY3VtdWxhdGUnLFxuICBhZGRpdGl2ZTogJ2FkZGl0aXZlJyxcbiAgYWxpZ25tZW50YmFzZWxpbmU6ICdhbGlnbm1lbnRCYXNlbGluZScsXG4gICdhbGlnbm1lbnQtYmFzZWxpbmUnOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICBhbGxvd3Jlb3JkZXI6ICdhbGxvd1Jlb3JkZXInLFxuICBhbHBoYWJldGljOiAnYWxwaGFiZXRpYycsXG4gIGFtcGxpdHVkZTogJ2FtcGxpdHVkZScsXG4gIGFyYWJpY2Zvcm06ICdhcmFiaWNGb3JtJyxcbiAgJ2FyYWJpYy1mb3JtJzogJ2FyYWJpY0Zvcm0nLFxuICBhc2NlbnQ6ICdhc2NlbnQnLFxuICBhdHRyaWJ1dGVuYW1lOiAnYXR0cmlidXRlTmFtZScsXG4gIGF0dHJpYnV0ZXR5cGU6ICdhdHRyaWJ1dGVUeXBlJyxcbiAgYXV0b3JldmVyc2U6ICdhdXRvUmV2ZXJzZScsXG4gIGF6aW11dGg6ICdhemltdXRoJyxcbiAgYmFzZWZyZXF1ZW5jeTogJ2Jhc2VGcmVxdWVuY3knLFxuICBiYXNlbGluZXNoaWZ0OiAnYmFzZWxpbmVTaGlmdCcsXG4gICdiYXNlbGluZS1zaGlmdCc6ICdiYXNlbGluZVNoaWZ0JyxcbiAgYmFzZXByb2ZpbGU6ICdiYXNlUHJvZmlsZScsXG4gIGJib3g6ICdiYm94JyxcbiAgYmVnaW46ICdiZWdpbicsXG4gIGJpYXM6ICdiaWFzJyxcbiAgYnk6ICdieScsXG4gIGNhbGNtb2RlOiAnY2FsY01vZGUnLFxuICBjYXBoZWlnaHQ6ICdjYXBIZWlnaHQnLFxuICAnY2FwLWhlaWdodCc6ICdjYXBIZWlnaHQnLFxuICBjbGlwOiAnY2xpcCcsXG4gIGNsaXBwYXRoOiAnY2xpcFBhdGgnLFxuICAnY2xpcC1wYXRoJzogJ2NsaXBQYXRoJyxcbiAgY2xpcHBhdGh1bml0czogJ2NsaXBQYXRoVW5pdHMnLFxuICBjbGlwcnVsZTogJ2NsaXBSdWxlJyxcbiAgJ2NsaXAtcnVsZSc6ICdjbGlwUnVsZScsXG4gIGNvbG9yOiAnY29sb3InLFxuICBjb2xvcmludGVycG9sYXRpb246ICdjb2xvckludGVycG9sYXRpb24nLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbic6ICdjb2xvckludGVycG9sYXRpb24nLFxuICBjb2xvcmludGVycG9sYXRpb25maWx0ZXJzOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnOiAnY29sb3JJbnRlcnBvbGF0aW9uRmlsdGVycycsXG4gIGNvbG9ycHJvZmlsZTogJ2NvbG9yUHJvZmlsZScsXG4gICdjb2xvci1wcm9maWxlJzogJ2NvbG9yUHJvZmlsZScsXG4gIGNvbG9ycmVuZGVyaW5nOiAnY29sb3JSZW5kZXJpbmcnLFxuICAnY29sb3ItcmVuZGVyaW5nJzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgY29udGVudHNjcmlwdHR5cGU6ICdjb250ZW50U2NyaXB0VHlwZScsXG4gIGNvbnRlbnRzdHlsZXR5cGU6ICdjb250ZW50U3R5bGVUeXBlJyxcbiAgY3Vyc29yOiAnY3Vyc29yJyxcbiAgY3g6ICdjeCcsXG4gIGN5OiAnY3knLFxuICBkOiAnZCcsXG4gIGRhdGF0eXBlOiAnZGF0YXR5cGUnLFxuICBkZWNlbGVyYXRlOiAnZGVjZWxlcmF0ZScsXG4gIGRlc2NlbnQ6ICdkZXNjZW50JyxcbiAgZGlmZnVzZWNvbnN0YW50OiAnZGlmZnVzZUNvbnN0YW50JyxcbiAgZGlyZWN0aW9uOiAnZGlyZWN0aW9uJyxcbiAgZGlzcGxheTogJ2Rpc3BsYXknLFxuICBkaXZpc29yOiAnZGl2aXNvcicsXG4gIGRvbWluYW50YmFzZWxpbmU6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgJ2RvbWluYW50LWJhc2VsaW5lJzogJ2RvbWluYW50QmFzZWxpbmUnLFxuICBkdXI6ICdkdXInLFxuICBkeDogJ2R4JyxcbiAgZHk6ICdkeScsXG4gIGVkZ2Vtb2RlOiAnZWRnZU1vZGUnLFxuICBlbGV2YXRpb246ICdlbGV2YXRpb24nLFxuICBlbmFibGViYWNrZ3JvdW5kOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gICdlbmFibGUtYmFja2dyb3VuZCc6ICdlbmFibGVCYWNrZ3JvdW5kJyxcbiAgZW5kOiAnZW5kJyxcbiAgZXhwb25lbnQ6ICdleHBvbmVudCcsXG4gIGV4dGVybmFscmVzb3VyY2VzcmVxdWlyZWQ6ICdleHRlcm5hbFJlc291cmNlc1JlcXVpcmVkJyxcbiAgZmlsbDogJ2ZpbGwnLFxuICBmaWxsb3BhY2l0eTogJ2ZpbGxPcGFjaXR5JyxcbiAgJ2ZpbGwtb3BhY2l0eSc6ICdmaWxsT3BhY2l0eScsXG4gIGZpbGxydWxlOiAnZmlsbFJ1bGUnLFxuICAnZmlsbC1ydWxlJzogJ2ZpbGxSdWxlJyxcbiAgZmlsdGVyOiAnZmlsdGVyJyxcbiAgZmlsdGVycmVzOiAnZmlsdGVyUmVzJyxcbiAgZmlsdGVydW5pdHM6ICdmaWx0ZXJVbml0cycsXG4gIGZsb29kb3BhY2l0eTogJ2Zsb29kT3BhY2l0eScsXG4gICdmbG9vZC1vcGFjaXR5JzogJ2Zsb29kT3BhY2l0eScsXG4gIGZsb29kY29sb3I6ICdmbG9vZENvbG9yJyxcbiAgJ2Zsb29kLWNvbG9yJzogJ2Zsb29kQ29sb3InLFxuICBmb2N1c2FibGU6ICdmb2N1c2FibGUnLFxuICBmb250ZmFtaWx5OiAnZm9udEZhbWlseScsXG4gICdmb250LWZhbWlseSc6ICdmb250RmFtaWx5JyxcbiAgZm9udHNpemU6ICdmb250U2l6ZScsXG4gICdmb250LXNpemUnOiAnZm9udFNpemUnLFxuICBmb250c2l6ZWFkanVzdDogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgJ2ZvbnQtc2l6ZS1hZGp1c3QnOiAnZm9udFNpemVBZGp1c3QnLFxuICBmb250c3RyZXRjaDogJ2ZvbnRTdHJldGNoJyxcbiAgJ2ZvbnQtc3RyZXRjaCc6ICdmb250U3RyZXRjaCcsXG4gIGZvbnRzdHlsZTogJ2ZvbnRTdHlsZScsXG4gICdmb250LXN0eWxlJzogJ2ZvbnRTdHlsZScsXG4gIGZvbnR2YXJpYW50OiAnZm9udFZhcmlhbnQnLFxuICAnZm9udC12YXJpYW50JzogJ2ZvbnRWYXJpYW50JyxcbiAgZm9udHdlaWdodDogJ2ZvbnRXZWlnaHQnLFxuICAnZm9udC13ZWlnaHQnOiAnZm9udFdlaWdodCcsXG4gIGZvcm1hdDogJ2Zvcm1hdCcsXG4gIGZyb206ICdmcm9tJyxcbiAgZng6ICdmeCcsXG4gIGZ5OiAnZnknLFxuICBnMTogJ2cxJyxcbiAgZzI6ICdnMicsXG4gIGdseXBobmFtZTogJ2dseXBoTmFtZScsXG4gICdnbHlwaC1uYW1lJzogJ2dseXBoTmFtZScsXG4gIGdseXBob3JpZW50YXRpb25ob3Jpem9udGFsOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCc6ICdnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbCcsXG4gIGdseXBob3JpZW50YXRpb252ZXJ0aWNhbDogJ2dseXBoT3JpZW50YXRpb25WZXJ0aWNhbCcsXG4gICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCc6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICBnbHlwaHJlZjogJ2dseXBoUmVmJyxcbiAgZ3JhZGllbnR0cmFuc2Zvcm06ICdncmFkaWVudFRyYW5zZm9ybScsXG4gIGdyYWRpZW50dW5pdHM6ICdncmFkaWVudFVuaXRzJyxcbiAgaGFuZ2luZzogJ2hhbmdpbmcnLFxuICBob3JpemFkdng6ICdob3JpekFkdlgnLFxuICAnaG9yaXotYWR2LXgnOiAnaG9yaXpBZHZYJyxcbiAgaG9yaXpvcmlnaW54OiAnaG9yaXpPcmlnaW5YJyxcbiAgJ2hvcml6LW9yaWdpbi14JzogJ2hvcml6T3JpZ2luWCcsXG4gIGlkZW9ncmFwaGljOiAnaWRlb2dyYXBoaWMnLFxuICBpbWFnZXJlbmRlcmluZzogJ2ltYWdlUmVuZGVyaW5nJyxcbiAgJ2ltYWdlLXJlbmRlcmluZyc6ICdpbWFnZVJlbmRlcmluZycsXG4gIGluMjogJ2luMicsXG4gIGluOiAnaW4nLFxuICBpbmxpc3Q6ICdpbmxpc3QnLFxuICBpbnRlcmNlcHQ6ICdpbnRlcmNlcHQnLFxuICBrMTogJ2sxJyxcbiAgazI6ICdrMicsXG4gIGszOiAnazMnLFxuICBrNDogJ2s0JyxcbiAgazogJ2snLFxuICBrZXJuZWxtYXRyaXg6ICdrZXJuZWxNYXRyaXgnLFxuICBrZXJuZWx1bml0bGVuZ3RoOiAna2VybmVsVW5pdExlbmd0aCcsXG4gIGtlcm5pbmc6ICdrZXJuaW5nJyxcbiAga2V5cG9pbnRzOiAna2V5UG9pbnRzJyxcbiAga2V5c3BsaW5lczogJ2tleVNwbGluZXMnLFxuICBrZXl0aW1lczogJ2tleVRpbWVzJyxcbiAgbGVuZ3RoYWRqdXN0OiAnbGVuZ3RoQWRqdXN0JyxcbiAgbGV0dGVyc3BhY2luZzogJ2xldHRlclNwYWNpbmcnLFxuICAnbGV0dGVyLXNwYWNpbmcnOiAnbGV0dGVyU3BhY2luZycsXG4gIGxpZ2h0aW5nY29sb3I6ICdsaWdodGluZ0NvbG9yJyxcbiAgJ2xpZ2h0aW5nLWNvbG9yJzogJ2xpZ2h0aW5nQ29sb3InLFxuICBsaW1pdGluZ2NvbmVhbmdsZTogJ2xpbWl0aW5nQ29uZUFuZ2xlJyxcbiAgbG9jYWw6ICdsb2NhbCcsXG4gIG1hcmtlcmVuZDogJ21hcmtlckVuZCcsXG4gICdtYXJrZXItZW5kJzogJ21hcmtlckVuZCcsXG4gIG1hcmtlcmhlaWdodDogJ21hcmtlckhlaWdodCcsXG4gIG1hcmtlcm1pZDogJ21hcmtlck1pZCcsXG4gICdtYXJrZXItbWlkJzogJ21hcmtlck1pZCcsXG4gIG1hcmtlcnN0YXJ0OiAnbWFya2VyU3RhcnQnLFxuICAnbWFya2VyLXN0YXJ0JzogJ21hcmtlclN0YXJ0JyxcbiAgbWFya2VydW5pdHM6ICdtYXJrZXJVbml0cycsXG4gIG1hcmtlcndpZHRoOiAnbWFya2VyV2lkdGgnLFxuICBtYXNrOiAnbWFzaycsXG4gIG1hc2tjb250ZW50dW5pdHM6ICdtYXNrQ29udGVudFVuaXRzJyxcbiAgbWFza3VuaXRzOiAnbWFza1VuaXRzJyxcbiAgbWF0aGVtYXRpY2FsOiAnbWF0aGVtYXRpY2FsJyxcbiAgbW9kZTogJ21vZGUnLFxuICBudW1vY3RhdmVzOiAnbnVtT2N0YXZlcycsXG4gIG9mZnNldDogJ29mZnNldCcsXG4gIG9wYWNpdHk6ICdvcGFjaXR5JyxcbiAgb3BlcmF0b3I6ICdvcGVyYXRvcicsXG4gIG9yZGVyOiAnb3JkZXInLFxuICBvcmllbnQ6ICdvcmllbnQnLFxuICBvcmllbnRhdGlvbjogJ29yaWVudGF0aW9uJyxcbiAgb3JpZ2luOiAnb3JpZ2luJyxcbiAgb3ZlcmZsb3c6ICdvdmVyZmxvdycsXG4gIG92ZXJsaW5lcG9zaXRpb246ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgJ292ZXJsaW5lLXBvc2l0aW9uJzogJ292ZXJsaW5lUG9zaXRpb24nLFxuICBvdmVybGluZXRoaWNrbmVzczogJ292ZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ292ZXJsaW5lLXRoaWNrbmVzcyc6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gIHBhaW50b3JkZXI6ICdwYWludE9yZGVyJyxcbiAgJ3BhaW50LW9yZGVyJzogJ3BhaW50T3JkZXInLFxuICBwYW5vc2UxOiAncGFub3NlMScsXG4gICdwYW5vc2UtMSc6ICdwYW5vc2UxJyxcbiAgcGF0aGxlbmd0aDogJ3BhdGhMZW5ndGgnLFxuICBwYXR0ZXJuY29udGVudHVuaXRzOiAncGF0dGVybkNvbnRlbnRVbml0cycsXG4gIHBhdHRlcm50cmFuc2Zvcm06ICdwYXR0ZXJuVHJhbnNmb3JtJyxcbiAgcGF0dGVybnVuaXRzOiAncGF0dGVyblVuaXRzJyxcbiAgcG9pbnRlcmV2ZW50czogJ3BvaW50ZXJFdmVudHMnLFxuICAncG9pbnRlci1ldmVudHMnOiAncG9pbnRlckV2ZW50cycsXG4gIHBvaW50czogJ3BvaW50cycsXG4gIHBvaW50c2F0eDogJ3BvaW50c0F0WCcsXG4gIHBvaW50c2F0eTogJ3BvaW50c0F0WScsXG4gIHBvaW50c2F0ejogJ3BvaW50c0F0WicsXG4gIHByZWZpeDogJ3ByZWZpeCcsXG4gIHByZXNlcnZlYWxwaGE6ICdwcmVzZXJ2ZUFscGhhJyxcbiAgcHJlc2VydmVhc3BlY3RyYXRpbzogJ3ByZXNlcnZlQXNwZWN0UmF0aW8nLFxuICBwcmltaXRpdmV1bml0czogJ3ByaW1pdGl2ZVVuaXRzJyxcbiAgcHJvcGVydHk6ICdwcm9wZXJ0eScsXG4gIHI6ICdyJyxcbiAgcmFkaXVzOiAncmFkaXVzJyxcbiAgcmVmeDogJ3JlZlgnLFxuICByZWZ5OiAncmVmWScsXG4gIHJlbmRlcmluZ2ludGVudDogJ3JlbmRlcmluZ0ludGVudCcsXG4gICdyZW5kZXJpbmctaW50ZW50JzogJ3JlbmRlcmluZ0ludGVudCcsXG4gIHJlcGVhdGNvdW50OiAncmVwZWF0Q291bnQnLFxuICByZXBlYXRkdXI6ICdyZXBlYXREdXInLFxuICByZXF1aXJlZGV4dGVuc2lvbnM6ICdyZXF1aXJlZEV4dGVuc2lvbnMnLFxuICByZXF1aXJlZGZlYXR1cmVzOiAncmVxdWlyZWRGZWF0dXJlcycsXG4gIHJlc291cmNlOiAncmVzb3VyY2UnLFxuICByZXN0YXJ0OiAncmVzdGFydCcsXG4gIHJlc3VsdDogJ3Jlc3VsdCcsXG4gIHJlc3VsdHM6ICdyZXN1bHRzJyxcbiAgcm90YXRlOiAncm90YXRlJyxcbiAgcng6ICdyeCcsXG4gIHJ5OiAncnknLFxuICBzY2FsZTogJ3NjYWxlJyxcbiAgc2VjdXJpdHk6ICdzZWN1cml0eScsXG4gIHNlZWQ6ICdzZWVkJyxcbiAgc2hhcGVyZW5kZXJpbmc6ICdzaGFwZVJlbmRlcmluZycsXG4gICdzaGFwZS1yZW5kZXJpbmcnOiAnc2hhcGVSZW5kZXJpbmcnLFxuICBzbG9wZTogJ3Nsb3BlJyxcbiAgc3BhY2luZzogJ3NwYWNpbmcnLFxuICBzcGVjdWxhcmNvbnN0YW50OiAnc3BlY3VsYXJDb25zdGFudCcsXG4gIHNwZWN1bGFyZXhwb25lbnQ6ICdzcGVjdWxhckV4cG9uZW50JyxcbiAgc3BlZWQ6ICdzcGVlZCcsXG4gIHNwcmVhZG1ldGhvZDogJ3NwcmVhZE1ldGhvZCcsXG4gIHN0YXJ0b2Zmc2V0OiAnc3RhcnRPZmZzZXQnLFxuICBzdGRkZXZpYXRpb246ICdzdGREZXZpYXRpb24nLFxuICBzdGVtaDogJ3N0ZW1oJyxcbiAgc3RlbXY6ICdzdGVtdicsXG4gIHN0aXRjaHRpbGVzOiAnc3RpdGNoVGlsZXMnLFxuICBzdG9wY29sb3I6ICdzdG9wQ29sb3InLFxuICAnc3RvcC1jb2xvcic6ICdzdG9wQ29sb3InLFxuICBzdG9wb3BhY2l0eTogJ3N0b3BPcGFjaXR5JyxcbiAgJ3N0b3Atb3BhY2l0eSc6ICdzdG9wT3BhY2l0eScsXG4gIHN0cmlrZXRocm91Z2hwb3NpdGlvbjogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gICdzdHJpa2V0aHJvdWdoLXBvc2l0aW9uJzogJ3N0cmlrZXRocm91Z2hQb3NpdGlvbicsXG4gIHN0cmlrZXRocm91Z2h0aGlja25lc3M6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgJ3N0cmlrZXRocm91Z2gtdGhpY2tuZXNzJzogJ3N0cmlrZXRocm91Z2hUaGlja25lc3MnLFxuICBzdHJpbmc6ICdzdHJpbmcnLFxuICBzdHJva2U6ICdzdHJva2UnLFxuICBzdHJva2VkYXNoYXJyYXk6ICdzdHJva2VEYXNoYXJyYXknLFxuICAnc3Ryb2tlLWRhc2hhcnJheSc6ICdzdHJva2VEYXNoYXJyYXknLFxuICBzdHJva2VkYXNob2Zmc2V0OiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gICdzdHJva2UtZGFzaG9mZnNldCc6ICdzdHJva2VEYXNob2Zmc2V0JyxcbiAgc3Ryb2tlbGluZWNhcDogJ3N0cm9rZUxpbmVjYXAnLFxuICAnc3Ryb2tlLWxpbmVjYXAnOiAnc3Ryb2tlTGluZWNhcCcsXG4gIHN0cm9rZWxpbmVqb2luOiAnc3Ryb2tlTGluZWpvaW4nLFxuICAnc3Ryb2tlLWxpbmVqb2luJzogJ3N0cm9rZUxpbmVqb2luJyxcbiAgc3Ryb2tlbWl0ZXJsaW1pdDogJ3N0cm9rZU1pdGVybGltaXQnLFxuICAnc3Ryb2tlLW1pdGVybGltaXQnOiAnc3Ryb2tlTWl0ZXJsaW1pdCcsXG4gIHN0cm9rZXdpZHRoOiAnc3Ryb2tlV2lkdGgnLFxuICAnc3Ryb2tlLXdpZHRoJzogJ3N0cm9rZVdpZHRoJyxcbiAgc3Ryb2tlb3BhY2l0eTogJ3N0cm9rZU9wYWNpdHknLFxuICAnc3Ryb2tlLW9wYWNpdHknOiAnc3Ryb2tlT3BhY2l0eScsXG4gIHN1cHByZXNzY29udGVudGVkaXRhYmxld2FybmluZzogJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZycsXG4gIHN1cHByZXNzaHlkcmF0aW9ud2FybmluZzogJ3N1cHByZXNzSHlkcmF0aW9uV2FybmluZycsXG4gIHN1cmZhY2VzY2FsZTogJ3N1cmZhY2VTY2FsZScsXG4gIHN5c3RlbWxhbmd1YWdlOiAnc3lzdGVtTGFuZ3VhZ2UnLFxuICB0YWJsZXZhbHVlczogJ3RhYmxlVmFsdWVzJyxcbiAgdGFyZ2V0eDogJ3RhcmdldFgnLFxuICB0YXJnZXR5OiAndGFyZ2V0WScsXG4gIHRleHRhbmNob3I6ICd0ZXh0QW5jaG9yJyxcbiAgJ3RleHQtYW5jaG9yJzogJ3RleHRBbmNob3InLFxuICB0ZXh0ZGVjb3JhdGlvbjogJ3RleHREZWNvcmF0aW9uJyxcbiAgJ3RleHQtZGVjb3JhdGlvbic6ICd0ZXh0RGVjb3JhdGlvbicsXG4gIHRleHRsZW5ndGg6ICd0ZXh0TGVuZ3RoJyxcbiAgdGV4dHJlbmRlcmluZzogJ3RleHRSZW5kZXJpbmcnLFxuICAndGV4dC1yZW5kZXJpbmcnOiAndGV4dFJlbmRlcmluZycsXG4gIHRvOiAndG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2Zvcm0nLFxuICB0eXBlb2Y6ICd0eXBlb2YnLFxuICB1MTogJ3UxJyxcbiAgdTI6ICd1MicsXG4gIHVuZGVybGluZXBvc2l0aW9uOiAndW5kZXJsaW5lUG9zaXRpb24nLFxuICAndW5kZXJsaW5lLXBvc2l0aW9uJzogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgdW5kZXJsaW5ldGhpY2tuZXNzOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgJ3VuZGVybGluZS10aGlja25lc3MnOiAndW5kZXJsaW5lVGhpY2tuZXNzJyxcbiAgdW5pY29kZTogJ3VuaWNvZGUnLFxuICB1bmljb2RlYmlkaTogJ3VuaWNvZGVCaWRpJyxcbiAgJ3VuaWNvZGUtYmlkaSc6ICd1bmljb2RlQmlkaScsXG4gIHVuaWNvZGVyYW5nZTogJ3VuaWNvZGVSYW5nZScsXG4gICd1bmljb2RlLXJhbmdlJzogJ3VuaWNvZGVSYW5nZScsXG4gIHVuaXRzcGVyZW06ICd1bml0c1BlckVtJyxcbiAgJ3VuaXRzLXBlci1lbSc6ICd1bml0c1BlckVtJyxcbiAgdW5zZWxlY3RhYmxlOiAndW5zZWxlY3RhYmxlJyxcbiAgdmFscGhhYmV0aWM6ICd2QWxwaGFiZXRpYycsXG4gICd2LWFscGhhYmV0aWMnOiAndkFscGhhYmV0aWMnLFxuICB2YWx1ZXM6ICd2YWx1ZXMnLFxuICB2ZWN0b3JlZmZlY3Q6ICd2ZWN0b3JFZmZlY3QnLFxuICAndmVjdG9yLWVmZmVjdCc6ICd2ZWN0b3JFZmZlY3QnLFxuICB2ZXJzaW9uOiAndmVyc2lvbicsXG4gIHZlcnRhZHZ5OiAndmVydEFkdlknLFxuICAndmVydC1hZHYteSc6ICd2ZXJ0QWR2WScsXG4gIHZlcnRvcmlnaW54OiAndmVydE9yaWdpblgnLFxuICAndmVydC1vcmlnaW4teCc6ICd2ZXJ0T3JpZ2luWCcsXG4gIHZlcnRvcmlnaW55OiAndmVydE9yaWdpblknLFxuICAndmVydC1vcmlnaW4teSc6ICd2ZXJ0T3JpZ2luWScsXG4gIHZoYW5naW5nOiAndkhhbmdpbmcnLFxuICAndi1oYW5naW5nJzogJ3ZIYW5naW5nJyxcbiAgdmlkZW9ncmFwaGljOiAndklkZW9ncmFwaGljJyxcbiAgJ3YtaWRlb2dyYXBoaWMnOiAndklkZW9ncmFwaGljJyxcbiAgdmlld2JveDogJ3ZpZXdCb3gnLFxuICB2aWV3dGFyZ2V0OiAndmlld1RhcmdldCcsXG4gIHZpc2liaWxpdHk6ICd2aXNpYmlsaXR5JyxcbiAgdm1hdGhlbWF0aWNhbDogJ3ZNYXRoZW1hdGljYWwnLFxuICAndi1tYXRoZW1hdGljYWwnOiAndk1hdGhlbWF0aWNhbCcsXG4gIHZvY2FiOiAndm9jYWInLFxuICB3aWR0aHM6ICd3aWR0aHMnLFxuICB3b3Jkc3BhY2luZzogJ3dvcmRTcGFjaW5nJyxcbiAgJ3dvcmQtc3BhY2luZyc6ICd3b3JkU3BhY2luZycsXG4gIHdyaXRpbmdtb2RlOiAnd3JpdGluZ01vZGUnLFxuICAnd3JpdGluZy1tb2RlJzogJ3dyaXRpbmdNb2RlJyxcbiAgeDE6ICd4MScsXG4gIHgyOiAneDInLFxuICB4OiAneCcsXG4gIHhjaGFubmVsc2VsZWN0b3I6ICd4Q2hhbm5lbFNlbGVjdG9yJyxcbiAgeGhlaWdodDogJ3hIZWlnaHQnLFxuICAneC1oZWlnaHQnOiAneEhlaWdodCcsXG4gIHhsaW5rYWN0dWF0ZTogJ3hsaW5rQWN0dWF0ZScsXG4gICd4bGluazphY3R1YXRlJzogJ3hsaW5rQWN0dWF0ZScsXG4gIHhsaW5rYXJjcm9sZTogJ3hsaW5rQXJjcm9sZScsXG4gICd4bGluazphcmNyb2xlJzogJ3hsaW5rQXJjcm9sZScsXG4gIHhsaW5raHJlZjogJ3hsaW5rSHJlZicsXG4gICd4bGluazpocmVmJzogJ3hsaW5rSHJlZicsXG4gIHhsaW5rcm9sZTogJ3hsaW5rUm9sZScsXG4gICd4bGluazpyb2xlJzogJ3hsaW5rUm9sZScsXG4gIHhsaW5rc2hvdzogJ3hsaW5rU2hvdycsXG4gICd4bGluazpzaG93JzogJ3hsaW5rU2hvdycsXG4gIHhsaW5rdGl0bGU6ICd4bGlua1RpdGxlJyxcbiAgJ3hsaW5rOnRpdGxlJzogJ3hsaW5rVGl0bGUnLFxuICB4bGlua3R5cGU6ICd4bGlua1R5cGUnLFxuICAneGxpbms6dHlwZSc6ICd4bGlua1R5cGUnLFxuICB4bWxiYXNlOiAneG1sQmFzZScsXG4gICd4bWw6YmFzZSc6ICd4bWxCYXNlJyxcbiAgeG1sbGFuZzogJ3htbExhbmcnLFxuICAneG1sOmxhbmcnOiAneG1sTGFuZycsXG4gIHhtbG5zOiAneG1sbnMnLFxuICAneG1sOnNwYWNlJzogJ3htbFNwYWNlJyxcbiAgeG1sbnN4bGluazogJ3htbG5zWGxpbmsnLFxuICAneG1sbnM6eGxpbmsnOiAneG1sbnNYbGluaycsXG4gIHhtbHNwYWNlOiAneG1sU3BhY2UnLFxuICB5MTogJ3kxJyxcbiAgeTI6ICd5MicsXG4gIHk6ICd5JyxcbiAgeWNoYW5uZWxzZWxlY3RvcjogJ3lDaGFubmVsU2VsZWN0b3InLFxuICB6OiAneicsXG4gIHpvb21hbmRwYW46ICd6b29tQW5kUGFuJ1xufTtcblxudmFyIGFyaWFQcm9wZXJ0aWVzID0ge1xuICAnYXJpYS1jdXJyZW50JzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtZGV0YWlscyc6IDAsXG4gICdhcmlhLWRpc2FibGVkJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaGlkZGVuJzogMCxcbiAgLy8gc3RhdGVcbiAgJ2FyaWEtaW52YWxpZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWtleXNob3J0Y3V0cyc6IDAsXG4gICdhcmlhLWxhYmVsJzogMCxcbiAgJ2FyaWEtcm9sZWRlc2NyaXB0aW9uJzogMCxcbiAgLy8gV2lkZ2V0IEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXV0b2NvbXBsZXRlJzogMCxcbiAgJ2FyaWEtY2hlY2tlZCc6IDAsXG4gICdhcmlhLWV4cGFuZGVkJzogMCxcbiAgJ2FyaWEtaGFzcG9wdXAnOiAwLFxuICAnYXJpYS1sZXZlbCc6IDAsXG4gICdhcmlhLW1vZGFsJzogMCxcbiAgJ2FyaWEtbXVsdGlsaW5lJzogMCxcbiAgJ2FyaWEtbXVsdGlzZWxlY3RhYmxlJzogMCxcbiAgJ2FyaWEtb3JpZW50YXRpb24nOiAwLFxuICAnYXJpYS1wbGFjZWhvbGRlcic6IDAsXG4gICdhcmlhLXByZXNzZWQnOiAwLFxuICAnYXJpYS1yZWFkb25seSc6IDAsXG4gICdhcmlhLXJlcXVpcmVkJzogMCxcbiAgJ2FyaWEtc2VsZWN0ZWQnOiAwLFxuICAnYXJpYS1zb3J0JzogMCxcbiAgJ2FyaWEtdmFsdWVtYXgnOiAwLFxuICAnYXJpYS12YWx1ZW1pbic6IDAsXG4gICdhcmlhLXZhbHVlbm93JzogMCxcbiAgJ2FyaWEtdmFsdWV0ZXh0JzogMCxcbiAgLy8gTGl2ZSBSZWdpb24gQXR0cmlidXRlc1xuICAnYXJpYS1hdG9taWMnOiAwLFxuICAnYXJpYS1idXN5JzogMCxcbiAgJ2FyaWEtbGl2ZSc6IDAsXG4gICdhcmlhLXJlbGV2YW50JzogMCxcbiAgLy8gRHJhZy1hbmQtRHJvcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWRyb3BlZmZlY3QnOiAwLFxuICAnYXJpYS1ncmFiYmVkJzogMCxcbiAgLy8gUmVsYXRpb25zaGlwIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYWN0aXZlZGVzY2VuZGFudCc6IDAsXG4gICdhcmlhLWNvbGNvdW50JzogMCxcbiAgJ2FyaWEtY29saW5kZXgnOiAwLFxuICAnYXJpYS1jb2xzcGFuJzogMCxcbiAgJ2FyaWEtY29udHJvbHMnOiAwLFxuICAnYXJpYS1kZXNjcmliZWRieSc6IDAsXG4gICdhcmlhLWVycm9ybWVzc2FnZSc6IDAsXG4gICdhcmlhLWZsb3d0byc6IDAsXG4gICdhcmlhLWxhYmVsbGVkYnknOiAwLFxuICAnYXJpYS1vd25zJzogMCxcbiAgJ2FyaWEtcG9zaW5zZXQnOiAwLFxuICAnYXJpYS1yb3djb3VudCc6IDAsXG4gICdhcmlhLXJvd2luZGV4JzogMCxcbiAgJ2FyaWEtcm93c3Bhbic6IDAsXG4gICdhcmlhLXNldHNpemUnOiAwXG59O1xuXG52YXIgd2FybmVkUHJvcGVydGllcyA9IHt9O1xudmFyIHJBUklBID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgckFSSUFDYW1lbCA9IG5ldyBSZWdFeHAoJ14oYXJpYSlbQS1aXVsnICsgQVRUUklCVVRFX05BTUVfQ0hBUiArICddKiQnKTtcbnZhciBoYXNPd25Qcm9wZXJ0eSQxID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0eSh0YWdOYW1lLCBuYW1lKSB7XG4gIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkkMS5jYWxsKHdhcm5lZFByb3BlcnRpZXMsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyQVJJQUNhbWVsLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBhcmlhTmFtZSA9ICdhcmlhLScgKyBuYW1lLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCk7XG4gICAgICB2YXIgY29ycmVjdE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShhcmlhTmFtZSkgPyBhcmlhTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoY29ycmVjdE5hbWUgPT0gbnVsbCkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBBUklBIGF0dHJpYnV0ZSBgJXNgLiBBUklBIGF0dHJpYnV0ZXMgZm9sbG93IHRoZSBwYXR0ZXJuIGFyaWEtKiBhbmQgbXVzdCBiZSBsb3dlcmNhc2UuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gY29ycmVjdE5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgY29ycmVjdE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAockFSSUEudGVzdChuYW1lKSkge1xuICAgICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGFyaWFQcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSA/IGxvd2VyQ2FzZWROYW1lIDogbnVsbDsgLy8gSWYgdGhpcyBpcyBhbiBhcmlhLSogYXR0cmlidXRlLCBidXQgaXMgbm90IGxpc3RlZCBpbiB0aGUga25vd24gRE9NXG4gICAgICAvLyBET00gcHJvcGVydGllcywgdGhlbiBpdCBpcyBhbiBpbnZhbGlkIGFyaWEtKiBhdHRyaWJ1dGUuXG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgPT0gbnVsbCkge1xuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyBhcmlhLSogYXR0cmlidXRlcyBzaG91bGQgYmUgbG93ZXJjYXNlOyBzdWdnZXN0IHRoZSBsb3dlcmNhc2UgdmVyc2lvbi5cblxuXG4gICAgICBpZiAobmFtZSAhPT0gc3RhbmRhcmROYW1lKSB7XG4gICAgICAgIGVycm9yKCdVbmtub3duIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgdmFyIGludmFsaWRQcm9wcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHByb3BzKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IHZhbGlkYXRlUHJvcGVydHkodHlwZSwga2V5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIGludmFsaWRQcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gaW52YWxpZFByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmIChpbnZhbGlkUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3AgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIGFyaWEgcHJvcHMgJXMgb24gPCVzPiB0YWcuICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1hcmlhLXByb3BzJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5JbnZhbGlkQVJJQVByb3BzKHR5cGUsIHByb3BzKTtcbn1cblxudmFyIGRpZFdhcm5WYWx1ZU51bGwgPSBmYWxzZTtcbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAodHlwZSAhPT0gJ2lucHV0JyAmJiB0eXBlICE9PSAndGV4dGFyZWEnICYmIHR5cGUgIT09ICdzZWxlY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BzICE9IG51bGwgJiYgcHJvcHMudmFsdWUgPT09IG51bGwgJiYgIWRpZFdhcm5WYWx1ZU51bGwpIHtcbiAgICAgIGRpZFdhcm5WYWx1ZU51bGwgPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcgJiYgcHJvcHMubXVsdGlwbGUpIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBhcnJheSB3aGVuIGBtdWx0aXBsZWAgaXMgc2V0IHRvIGB0cnVlYCAnICsgJ3RvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgZm9yIHVuY29udHJvbGxlZCBjb21wb25lbnRzLicsIHR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ2B2YWx1ZWAgcHJvcCBvbiBgJXNgIHNob3VsZCBub3QgYmUgbnVsbC4gJyArICdDb25zaWRlciB1c2luZyBhbiBlbXB0eSBzdHJpbmcgdG8gY2xlYXIgdGhlIGNvbXBvbmVudCBvciBgdW5kZWZpbmVkYCAnICsgJ2ZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG57XG4gIHZhciB3YXJuZWRQcm9wZXJ0aWVzJDEgPSB7fTtcbiAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4gIHZhciBFVkVOVF9OQU1FX1JFR0VYID0gL15vbi4vO1xuICB2YXIgSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYID0gL15vblteQS1aXS87XG4gIHZhciByQVJJQSQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKS1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG4gIHZhciByQVJJQUNhbWVsJDEgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG5cbiAgdmFsaWRhdGVQcm9wZXJ0eSQxID0gZnVuY3Rpb24gKHRhZ05hbWUsIG5hbWUsIHZhbHVlLCBldmVudFJlZ2lzdHJ5KSB7XG4gICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFByb3BlcnRpZXMkMSwgbmFtZSkgJiYgd2FybmVkUHJvcGVydGllcyQxW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdvbmZvY3VzaW4nIHx8IGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c291dCcpIHtcbiAgICAgIGVycm9yKCdSZWFjdCB1c2VzIG9uRm9jdXMgYW5kIG9uQmx1ciBpbnN0ZWFkIG9mIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dC4gJyArICdBbGwgUmVhY3QgZXZlbnRzIGFyZSBub3JtYWxpemVkIHRvIGJ1YmJsZSwgc28gb25Gb2N1c0luIGFuZCBvbkZvY3VzT3V0ICcgKyAnYXJlIG5vdCBuZWVkZWQvc3VwcG9ydGVkIGJ5IFJlYWN0LicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXZSBjYW4ndCByZWx5IG9uIHRoZSBldmVudCBzeXN0ZW0gYmVpbmcgaW5qZWN0ZWQgb24gdGhlIHNlcnZlci5cblxuXG4gICAgaWYgKGV2ZW50UmVnaXN0cnkgIT0gbnVsbCkge1xuICAgICAgdmFyIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMgPSBldmVudFJlZ2lzdHJ5LnJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcyA9IGV2ZW50UmVnaXN0cnkucG9zc2libGVSZWdpc3RyYXRpb25OYW1lcztcblxuICAgICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lID0gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzW2xvd2VyQ2FzZWROYW1lXSA6IG51bGw7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuIEl0IHdpbGwgYmUgaWdub3JlZC4nLCBuYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKEVWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgLy8gSWYgbm8gZXZlbnQgcGx1Z2lucyBoYXZlIGJlZW4gaW5qZWN0ZWQsIHdlIGFyZSBpbiBhIHNlcnZlciBlbnZpcm9ubWVudC5cbiAgICAgIC8vIFNvIHdlIGNhbid0IHRlbGwgaWYgdGhlIGV2ZW50IG5hbWUgaXMgY29ycmVjdCBmb3Igc3VyZSwgYnV0IHdlIGNhbiBmaWx0ZXJcbiAgICAgIC8vIG91dCBrbm93biBiYWQgb25lcyBsaWtlIGBvbmNsaWNrYC4gV2UgY2FuJ3Qgc3VnZ2VzdCBhIHNwZWNpZmljIHJlcGxhY2VtZW50IHRob3VnaC5cbiAgICAgIGlmIChJTlZBTElEX0VWRU5UX05BTUVfUkVHRVgudGVzdChuYW1lKSkge1xuICAgICAgICBlcnJvcignSW52YWxpZCBldmVudCBoYW5kbGVyIHByb3BlcnR5IGAlc2AuICcgKyAnUmVhY3QgZXZlbnRzIHVzZSB0aGUgY2FtZWxDYXNlIG5hbWluZyBjb252ZW50aW9uLCBmb3IgZXhhbXBsZSBgb25DbGlja2AuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIExldCB0aGUgQVJJQSBhdHRyaWJ1dGUgaG9vayB2YWxpZGF0ZSBBUklBIGF0dHJpYnV0ZXNcblxuXG4gICAgaWYgKHJBUklBJDEudGVzdChuYW1lKSB8fCByQVJJQUNhbWVsJDEudGVzdChuYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaW5uZXJodG1sJykge1xuICAgICAgZXJyb3IoJ0RpcmVjdGx5IHNldHRpbmcgcHJvcGVydHkgYGlubmVySFRNTGAgaXMgbm90IHBlcm1pdHRlZC4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgbG9va3VwIGRvY3VtZW50YXRpb24gb24gYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2FyaWEnKSB7XG4gICAgICBlcnJvcignVGhlIGBhcmlhYCBhdHRyaWJ1dGUgaXMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgaW4gUmVhY3QuICcgKyAnUGFzcyBpbmRpdmlkdWFsIGBhcmlhLWAgYXR0cmlidXRlcyBpbnN0ZWFkLicpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnaXMnICYmIHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGEgYCVzYCBmb3IgYSBzdHJpbmcgYXR0cmlidXRlIGBpc2AuIElmIHRoaXMgaXMgZXhwZWN0ZWQsIGNhc3QgJyArICd0aGUgdmFsdWUgdG8gYSBzdHJpbmcuJywgdHlwZW9mIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzTmFOKHZhbHVlKSkge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIE5hTiBmb3IgdGhlIGAlc2AgYXR0cmlidXRlLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIG5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcbiAgICB2YXIgaXNSZXNlcnZlZCA9IHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gUkVTRVJWRUQ7IC8vIEtub3duIGF0dHJpYnV0ZXMgc2hvdWxkIG1hdGNoIHRoZSBjYXNpbmcgc3BlY2lmaWVkIGluIHRoZSBwcm9wZXJ0eSBjb25maWcuXG5cbiAgICBpZiAocG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV07XG5cbiAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG5hbWUpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgRE9NIHByb3BlcnR5IGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIHN0YW5kYXJkTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghaXNSZXNlcnZlZCAmJiBuYW1lICE9PSBsb3dlckNhc2VkTmFtZSkge1xuICAgICAgLy8gVW5rbm93biBhdHRyaWJ1dGVzIHNob3VsZCBoYXZlIGxvd2VyY2FzZSBjYXNpbmcgc2luY2UgdGhhdCdzIGhvdyB0aGV5XG4gICAgICAvLyB3aWxsIGJlIGNhc2VkIGFueXdheSB3aXRoIHNlcnZlciByZW5kZXJpbmcuXG4gICAgICBlcnJvcignUmVhY3QgZG9lcyBub3QgcmVjb2duaXplIHRoZSBgJXNgIHByb3Agb24gYSBET00gZWxlbWVudC4gSWYgeW91ICcgKyAnaW50ZW50aW9uYWxseSB3YW50IGl0IHRvIGFwcGVhciBpbiB0aGUgRE9NIGFzIGEgY3VzdG9tICcgKyAnYXR0cmlidXRlLCBzcGVsbCBpdCBhcyBsb3dlcmNhc2UgYCVzYCBpbnN0ZWFkLiAnICsgJ0lmIHlvdSBhY2NpZGVudGFsbHkgcGFzc2VkIGl0IGZyb20gYSBwYXJlbnQgY29tcG9uZW50LCByZW1vdmUgJyArICdpdCBmcm9tIHRoZSBET00gZWxlbWVudC4nLCBuYW1lLCBsb3dlckNhc2VkTmFtZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgJiYgc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJ1JlY2VpdmVkIGAlc2AgZm9yIGEgbm9uLWJvb2xlYW4gYXR0cmlidXRlIGAlc2AuXFxuXFxuJyArICdJZiB5b3Ugd2FudCB0byB3cml0ZSBpdCB0byB0aGUgRE9NLCBwYXNzIGEgc3RyaW5nIGluc3RlYWQ6ICcgKyAnJXM9XCIlc1wiIG9yICVzPXt2YWx1ZS50b1N0cmluZygpfS5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHZhbHVlLCBuYW1lLCBuYW1lLCB2YWx1ZSwgbmFtZSwgbmFtZSwgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIE5vdyB0aGF0IHdlJ3ZlIHZhbGlkYXRlZCBjYXNpbmcsIGRvIG5vdCB2YWxpZGF0ZVxuICAgIC8vIGRhdGEgdHlwZXMgZm9yIHJlc2VydmVkIHByb3BzXG5cblxuICAgIGlmIChpc1Jlc2VydmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIFdhcm4gd2hlbiBhIGtub3duIGF0dHJpYnV0ZSBpcyBhIGJhZCB0eXBlXG5cblxuICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBmYWxzZSkpIHtcbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBXYXJuIHdoZW4gcGFzc2luZyB0aGUgc3RyaW5ncyAnZmFsc2UnIG9yICd0cnVlJyBpbnRvIGEgYm9vbGVhbiBwcm9wXG5cblxuICAgIGlmICgodmFsdWUgPT09ICdmYWxzZScgfHwgdmFsdWUgPT09ICd0cnVlJykgJiYgcHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBCT09MRUFOKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgdGhlIHN0cmluZyBgJXNgIGZvciB0aGUgYm9vbGVhbiBhdHRyaWJ1dGUgYCVzYC4gJyArICclcyAnICsgJ0RpZCB5b3UgbWVhbiAlcz17JXN9PycsIHZhbHVlLCBuYW1lLCB2YWx1ZSA9PT0gJ2ZhbHNlJyA/ICdUaGUgYnJvd3NlciB3aWxsIGludGVycHJldCBpdCBhcyBhIHRydXRoeSB2YWx1ZS4nIDogJ0FsdGhvdWdoIHRoaXMgd29ya3MsIGl0IHdpbGwgbm90IHdvcmsgYXMgZXhwZWN0ZWQgaWYgeW91IHBhc3MgdGhlIHN0cmluZyBcImZhbHNlXCIuJywgbmFtZSwgdmFsdWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG5cbnZhciB3YXJuVW5rbm93blByb3BlcnRpZXMgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAge1xuICAgIHZhciB1bmtub3duUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5JDEodHlwZSwga2V5LCBwcm9wc1trZXldLCBldmVudFJlZ2lzdHJ5KTtcblxuICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIHVua25vd25Qcm9wcy5wdXNoKGtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHVua25vd25Qcm9wU3RyaW5nID0gdW5rbm93blByb3BzLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuICdgJyArIHByb3AgKyAnYCc7XG4gICAgfSkuam9pbignLCAnKTtcblxuICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZSBmb3IgcHJvcCAlcyBvbiA8JXM+IHRhZy4gRWl0aGVyIHJlbW92ZSBpdCBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgaXQgaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAodW5rbm93blByb3BzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGVycm9yKCdJbnZhbGlkIHZhbHVlcyBmb3IgcHJvcHMgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgdGhlbSBmcm9tIHRoZSBlbGVtZW50LCAnICsgJ29yIHBhc3MgYSBzdHJpbmcgb3IgbnVtYmVyIHZhbHVlIHRvIGtlZXAgdGhlbSBpbiB0aGUgRE9NLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2F0dHJpYnV0ZS1iZWhhdmlvciAnLCB1bmtub3duUHJvcFN0cmluZywgdHlwZSk7XG4gICAgfVxuICB9XG59O1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSkge1xuICBpZiAoaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgd2FyblVua25vd25Qcm9wZXJ0aWVzKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KTtcbn1cblxudmFyIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFID0gMTtcbnZhciBJU19OT05fREVMRUdBVEVEID0gMSA8PCAxO1xudmFyIElTX0NBUFRVUkVfUEhBU0UgPSAxIDw8IDI7XG52YXIgSVNfUkVQTEFZRUQgPSAxIDw8IDQ7XG4vLyBzZXQgdG8gTEVHQUNZX0ZCX1NVUFBPUlQuIExFR0FDWV9GQl9TVVBQT1JUIG9ubHkgZ2V0cyBzZXQgd2hlblxuLy8gd2UgY2FsbCB3aWxsRGVmZXJMYXRlckZvckxlZ2FjeUZCU3VwcG9ydCwgdGh1cyBub3QgYmFpbGluZyBvdXRcbi8vIHdpbGwgcmVzdWx0IGluIGVuZGxlc3MgY3ljbGVzIGxpa2UgYW4gaW5maW5pdGUgbG9vcC5cbi8vIFdlIGFsc28gZG9uJ3Qgd2FudCB0byBkZWZlciBkdXJpbmcgZXZlbnQgcmVwbGF5aW5nLlxuXG52YXIgU0hPVUxEX05PVF9QUk9DRVNTX1BPTFlGSUxMX0VWRU5UX1BMVUdJTlMgPSBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSB8IElTX05PTl9ERUxFR0FURUQgfCBJU19DQVBUVVJFX1BIQVNFO1xuXG4vKipcbiAqIEdldHMgdGhlIHRhcmdldCBub2RlIGZyb20gYSBuYXRpdmUgYnJvd3NlciBldmVudCBieSBhY2NvdW50aW5nIGZvclxuICogaW5jb25zaXN0ZW5jaWVzIGluIGJyb3dzZXIgRE9NIEFQSXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7RE9NRXZlbnRUYXJnZXR9IFRhcmdldCBub2RlLlxuICovXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSB7XG4gIC8vIEZhbGxiYWNrIHRvIG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgZm9yIElFOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyNTA2XG4gIHZhciB0YXJnZXQgPSBuYXRpdmVFdmVudC50YXJnZXQgfHwgbmF0aXZlRXZlbnQuc3JjRWxlbWVudCB8fCB3aW5kb3c7IC8vIE5vcm1hbGl6ZSBTVkcgPHVzZT4gZWxlbWVudCBldmVudHMgIzQ5NjNcblxuICBpZiAodGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSB7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0LmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50O1xuICB9IC8vIFNhZmFyaSBtYXkgZmlyZSBldmVudHMgb24gdGV4dCBub2RlcyAoTm9kZS5URVhUX05PREUgaXMgMykuXG4gIC8vIEBzZWUgaHR0cDovL3d3dy5xdWlya3Ntb2RlLm9yZy9qcy9ldmVudHNfcHJvcGVydGllcy5odG1sXG5cblxuICByZXR1cm4gdGFyZ2V0Lm5vZGVUeXBlID09PSBURVhUX05PREUgPyB0YXJnZXQucGFyZW50Tm9kZSA6IHRhcmdldDtcbn1cblxudmFyIHJlc3RvcmVJbXBsID0gbnVsbDtcbnZhciByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbnZhciByZXN0b3JlUXVldWUgPSBudWxsO1xuXG5mdW5jdGlvbiByZXN0b3JlU3RhdGVPZlRhcmdldCh0YXJnZXQpIHtcbiAgLy8gV2UgcGVyZm9ybSB0aGlzIHRyYW5zbGF0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGV2ZW50IGxvb3Agc28gdGhhdCB3ZVxuICAvLyBhbHdheXMgcmVjZWl2ZSB0aGUgY29ycmVjdCBmaWJlciBoZXJlXG4gIHZhciBpbnRlcm5hbEluc3RhbmNlID0gZ2V0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXQpO1xuXG4gIGlmICghaW50ZXJuYWxJbnN0YW5jZSkge1xuICAgIC8vIFVubW91bnRlZFxuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICghKHR5cGVvZiByZXN0b3JlSW1wbCA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oKSBuZWVkcyB0byBiZSBjYWxsZWQgdG8gaGFuZGxlIGEgdGFyZ2V0IGZvciBjb250cm9sbGVkIGV2ZW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdGF0ZU5vZGUgPSBpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZTsgLy8gR3VhcmQgYWdhaW5zdCBGaWJlciBiZWluZyB1bm1vdW50ZWQuXG5cbiAgaWYgKHN0YXRlTm9kZSkge1xuICAgIHZhciBfcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgICByZXN0b3JlSW1wbChpbnRlcm5hbEluc3RhbmNlLnN0YXRlTm9kZSwgaW50ZXJuYWxJbnN0YW5jZS50eXBlLCBfcHJvcHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihpbXBsKSB7XG4gIHJlc3RvcmVJbXBsID0gaW1wbDtcbn1cbmZ1bmN0aW9uIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KSB7XG4gIGlmIChyZXN0b3JlVGFyZ2V0KSB7XG4gICAgaWYgKHJlc3RvcmVRdWV1ZSkge1xuICAgICAgcmVzdG9yZVF1ZXVlLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdG9yZVF1ZXVlID0gW3RhcmdldF07XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJlc3RvcmVUYXJnZXQgPSB0YXJnZXQ7XG4gIH1cbn1cbmZ1bmN0aW9uIG5lZWRzU3RhdGVSZXN0b3JlKCkge1xuICByZXR1cm4gcmVzdG9yZVRhcmdldCAhPT0gbnVsbCB8fCByZXN0b3JlUXVldWUgIT09IG51bGw7XG59XG5mdW5jdGlvbiByZXN0b3JlU3RhdGVJZk5lZWRlZCgpIHtcbiAgaWYgKCFyZXN0b3JlVGFyZ2V0KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHRhcmdldCA9IHJlc3RvcmVUYXJnZXQ7XG4gIHZhciBxdWV1ZWRUYXJnZXRzID0gcmVzdG9yZVF1ZXVlO1xuICByZXN0b3JlVGFyZ2V0ID0gbnVsbDtcbiAgcmVzdG9yZVF1ZXVlID0gbnVsbDtcbiAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KTtcblxuICBpZiAocXVldWVkVGFyZ2V0cykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcXVldWVkVGFyZ2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmVzdG9yZVN0YXRlT2ZUYXJnZXQocXVldWVkVGFyZ2V0c1tpXSk7XG4gICAgfVxuICB9XG59XG5cbi8vIHRoZSByZW5kZXJlci4gU3VjaCBhcyB3aGVuIHdlJ3JlIGRpc3BhdGNoaW5nIGV2ZW50cyBvciBpZiB0aGlyZCBwYXJ0eVxuLy8gbGlicmFyaWVzIG5lZWQgdG8gY2FsbCBiYXRjaGVkVXBkYXRlcy4gRXZlbnR1YWxseSwgdGhpcyBBUEkgd2lsbCBnbyBhd2F5IHdoZW5cbi8vIGV2ZXJ5dGhpbmcgaXMgYmF0Y2hlZCBieSBkZWZhdWx0LiBXZSdsbCB0aGVuIGhhdmUgYSBzaW1pbGFyIEFQSSB0byBvcHQtb3V0IG9mXG4vLyBzY2hlZHVsZWQgd29yayBhbmQgaW5zdGVhZCBkbyBzeW5jaHJvbm91cyB3b3JrLlxuLy8gRGVmYXVsdHNcblxudmFyIGJhdGNoZWRVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYm9va2tlZXBpbmcpIHtcbiAgcmV0dXJuIGZuKGJvb2trZWVwaW5nKTtcbn07XG5cbnZhciBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHJldHVybiBmbihhLCBiLCBjLCBkKTtcbn07XG5cbnZhciBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gYmF0Y2hlZFVwZGF0ZXNJbXBsO1xudmFyIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG52YXIgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmaW5pc2hFdmVudEhhbmRsZXIoKSB7XG4gIC8vIEhlcmUgd2Ugd2FpdCB1bnRpbCBhbGwgdXBkYXRlcyBoYXZlIHByb3BhZ2F0ZWQsIHdoaWNoIGlzIGltcG9ydGFudFxuICAvLyB3aGVuIHVzaW5nIGNvbnRyb2xsZWQgY29tcG9uZW50cyB3aXRoaW4gbGF5ZXJzOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2OThcbiAgLy8gVGhlbiB3ZSByZXN0b3JlIHN0YXRlIG9mIGFueSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgdmFyIGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzID0gbmVlZHNTdGF0ZVJlc3RvcmUoKTtcblxuICBpZiAoY29udHJvbGxlZENvbXBvbmVudHNIYXZlUGVuZGluZ1VwZGF0ZXMpIHtcbiAgICAvLyBJZiBhIGNvbnRyb2xsZWQgZXZlbnQgd2FzIGZpcmVkLCB3ZSBtYXkgbmVlZCB0byByZXN0b3JlIHRoZSBzdGF0ZSBvZlxuICAgIC8vIHRoZSBET00gbm9kZSBiYWNrIHRvIHRoZSBjb250cm9sbGVkIHZhbHVlLiBUaGlzIGlzIG5lY2Vzc2FyeSB3aGVuIFJlYWN0XG4gICAgLy8gYmFpbHMgb3V0IG9mIHRoZSB1cGRhdGUgd2l0aG91dCB0b3VjaGluZyB0aGUgRE9NLlxuICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIHJlc3RvcmVTdGF0ZUlmTmVlZGVkKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmF0Y2hlZFVwZGF0ZXMoZm4sIGJvb2trZWVwaW5nKSB7XG4gIGlmIChpc0luc2lkZUV2ZW50SGFuZGxlcikge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihib29ra2VlcGluZyk7XG4gIH1cblxuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYmF0Y2hlZFVwZGF0ZXNJbXBsKGZuLCBib29ra2VlcGluZyk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBmYWxzZTtcbiAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyhmbiwgYSwgYikge1xuICBpZiAoaXNCYXRjaGluZ0V2ZW50VXBkYXRlcykge1xuICAgIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgaW5zaWRlIGFub3RoZXIgYmF0Y2gsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBpdFxuICAgIC8vIGZ1bGx5IGNvbXBsZXRlcyBiZWZvcmUgcmVzdG9yaW5nIHN0YXRlLlxuICAgIHJldHVybiBmbihhLCBiKTtcbiAgfVxuXG4gIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKGZuLCBhLCBiKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyhmbiwgYSwgYiwgYywgZCkge1xuICB2YXIgcHJldklzSW5zaWRlRXZlbnRIYW5kbGVyID0gaXNJbnNpZGVFdmVudEhhbmRsZXI7XG4gIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBkaXNjcmV0ZVVwZGF0ZXNJbXBsKGZuLCBhLCBiLCBjLCBkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHByZXZJc0luc2lkZUV2ZW50SGFuZGxlcjtcblxuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZCh0aW1lU3RhbXApIHtcbiAge1xuICAgIGlmICghaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAgIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihfYmF0Y2hlZFVwZGF0ZXNJbXBsLCBfZGlzY3JldGVVcGRhdGVzSW1wbCwgX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCwgX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsKSB7XG4gIGJhdGNoZWRVcGRhdGVzSW1wbCA9IF9iYXRjaGVkVXBkYXRlc0ltcGw7XG4gIGRpc2NyZXRlVXBkYXRlc0ltcGwgPSBfZGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2ZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbDtcbiAgYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGwgPSBfYmF0Y2hlZEV2ZW50VXBkYXRlc0ltcGw7XG59XG5cbmZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUodGFnKSB7XG4gIHJldHVybiB0YWcgPT09ICdidXR0b24nIHx8IHRhZyA9PT0gJ2lucHV0JyB8fCB0YWcgPT09ICdzZWxlY3QnIHx8IHRhZyA9PT0gJ3RleHRhcmVhJztcbn1cblxuZnVuY3Rpb24gc2hvdWxkUHJldmVudE1vdXNlRXZlbnQobmFtZSwgdHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoIChuYW1lKSB7XG4gICAgY2FzZSAnb25DbGljayc6XG4gICAgY2FzZSAnb25DbGlja0NhcHR1cmUnOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2snOlxuICAgIGNhc2UgJ29uRG91YmxlQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRG93bic6XG4gICAgY2FzZSAnb25Nb3VzZURvd25DYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlTW92ZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmVDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlVXAnOlxuICAgIGNhc2UgJ29uTW91c2VVcENhcHR1cmUnOlxuICAgIGNhc2UgJ29uTW91c2VFbnRlcic6XG4gICAgICByZXR1cm4gISEocHJvcHMuZGlzYWJsZWQgJiYgaXNJbnRlcmFjdGl2ZSh0eXBlKSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnN0IFRoZSBpbnN0YW5jZSwgd2hpY2ggaXMgdGhlIHNvdXJjZSBvZiBldmVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnaXN0cmF0aW9uTmFtZSBOYW1lIG9mIGxpc3RlbmVyIChlLmcuIGBvbkNsaWNrYCkuXG4gKiBAcmV0dXJuIHs/ZnVuY3Rpb259IFRoZSBzdG9yZWQgY2FsbGJhY2suXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMaXN0ZW5lcihpbnN0LCByZWdpc3RyYXRpb25OYW1lKSB7XG4gIHZhciBzdGF0ZU5vZGUgPSBpbnN0LnN0YXRlTm9kZTtcblxuICBpZiAoc3RhdGVOb2RlID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcyAoZXg6IG9ubG9hZCBldmVudHMgaW4gaW5jcmVtZW50YWwgbW9kZSkuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgcHJvcHMgPSBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlKHN0YXRlTm9kZSk7XG5cbiAgaWYgKHByb3BzID09PSBudWxsKSB7XG4gICAgLy8gV29yayBpbiBwcm9ncmVzcy5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lciA9IHByb3BzW3JlZ2lzdHJhdGlvbk5hbWVdO1xuXG4gIGlmIChzaG91bGRQcmV2ZW50TW91c2VFdmVudChyZWdpc3RyYXRpb25OYW1lLCBpbnN0LnR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEoIWxpc3RlbmVyIHx8IHR5cGVvZiBsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBgXCIgKyByZWdpc3RyYXRpb25OYW1lICsgXCJgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYFwiICsgdHlwZW9mIGxpc3RlbmVyICsgXCJgIHR5cGUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXI7XG59XG5cbnZhciBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlOyAvLyBDaGVjayBpZiBicm93c2VyIHN1cHBvcnQgZXZlbnRzIHdpdGggcGFzc2l2ZSBsaXN0ZW5lcnNcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9FdmVudFRhcmdldC9hZGRFdmVudExpc3RlbmVyI1NhZmVseV9kZXRlY3Rpbmdfb3B0aW9uX3N1cHBvcnRcblxuaWYgKGNhblVzZURPTSkge1xuICB0cnkge1xuICAgIHZhciBvcHRpb25zID0ge307IC8vICRGbG93Rml4TWU6IElnbm9yZSBGbG93IGNvbXBsYWluaW5nIGFib3V0IG5lZWRpbmcgYSB2YWx1ZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9wdGlvbnMsICdwYXNzaXZlJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0Jywgb3B0aW9ucywgb3B0aW9ucyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gIHRyeSB7XG4gICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhpcy5vbkVycm9yKGVycm9yKTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCA9IGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2Q7XG5cbntcbiAgLy8gSW4gREVWIG1vZGUsIHdlIHN3YXAgb3V0IGludm9rZUd1YXJkZWRDYWxsYmFjayBmb3IgYSBzcGVjaWFsIHZlcnNpb25cbiAgLy8gdGhhdCBwbGF5cyBtb3JlIG5pY2VseSB3aXRoIHRoZSBicm93c2VyJ3MgRGV2VG9vbHMuIFRoZSBpZGVhIGlzIHRvIHByZXNlcnZlXG4gIC8vIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLiBCZWNhdXNlIFJlYWN0IHdyYXBzIGFsbCB1c2VyLXByb3ZpZGVkXG4gIC8vIGZ1bmN0aW9ucyBpbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2ssIGFuZCB0aGUgcHJvZHVjdGlvbiB2ZXJzaW9uIG9mXG4gIC8vIGludm9rZUd1YXJkZWRDYWxsYmFjayB1c2VzIGEgdHJ5LWNhdGNoLCBhbGwgdXNlciBleGNlcHRpb25zIGFyZSB0cmVhdGVkXG4gIC8vIGxpa2UgY2F1Z2h0IGV4Y2VwdGlvbnMsIGFuZCB0aGUgRGV2VG9vbHMgd29uJ3QgcGF1c2UgdW5sZXNzIHRoZSBkZXZlbG9wZXJcbiAgLy8gdGFrZXMgdGhlIGV4dHJhIHN0ZXAgb2YgZW5hYmxpbmcgcGF1c2Ugb24gY2F1Z2h0IGV4Y2VwdGlvbnMuIFRoaXMgaXNcbiAgLy8gdW5pbnR1aXRpdmUsIHRob3VnaCwgYmVjYXVzZSBldmVuIHRob3VnaCBSZWFjdCBoYXMgY2F1Z2h0IHRoZSBlcnJvciwgZnJvbVxuICAvLyB0aGUgZGV2ZWxvcGVyJ3MgcGVyc3BlY3RpdmUsIHRoZSBlcnJvciBpcyB1bmNhdWdodC5cbiAgLy9cbiAgLy8gVG8gcHJlc2VydmUgdGhlIGV4cGVjdGVkIFwiUGF1c2Ugb24gZXhjZXB0aW9uc1wiIGJlaGF2aW9yLCB3ZSBkb24ndCB1c2UgYVxuICAvLyB0cnktY2F0Y2ggaW4gREVWLiBJbnN0ZWFkLCB3ZSBzeW5jaHJvbm91c2x5IGRpc3BhdGNoIGEgZmFrZSBldmVudCB0byBhIGZha2VcbiAgLy8gRE9NIG5vZGUsIGFuZCBjYWxsIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIGZyb20gaW5zaWRlIGFuIGV2ZW50IGhhbmRsZXJcbiAgLy8gZm9yIHRoYXQgZmFrZSBldmVudC4gSWYgdGhlIGNhbGxiYWNrIHRocm93cywgdGhlIGVycm9yIGlzIFwiY2FwdHVyZWRcIiB1c2luZ1xuICAvLyBhIGdsb2JhbCBldmVudCBoYW5kbGVyLiBCdXQgYmVjYXVzZSB0aGUgZXJyb3IgaGFwcGVucyBpbiBhIGRpZmZlcmVudFxuICAvLyBldmVudCBsb29wIGNvbnRleHQsIGl0IGRvZXMgbm90IGludGVycnVwdCB0aGUgbm9ybWFsIHByb2dyYW0gZmxvdy5cbiAgLy8gRWZmZWN0aXZlbHksIHRoaXMgZ2l2ZXMgdXMgdHJ5LWNhdGNoIGJlaGF2aW9yIHdpdGhvdXQgYWN0dWFsbHkgdXNpbmdcbiAgLy8gdHJ5LWNhdGNoLiBOZWF0IVxuICAvLyBDaGVjayB0aGF0IHRoZSBicm93c2VyIHN1cHBvcnRzIHRoZSBBUElzIHdlIG5lZWQgdG8gaW1wbGVtZW50IG91ciBzcGVjaWFsXG4gIC8vIERFViB2ZXJzaW9uIG9mIGludm9rZUd1YXJkZWRDYWxsYmFja1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kaXNwYXRjaEV2ZW50ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUV2ZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIGZha2VOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncmVhY3QnKTtcblxuICAgIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBmdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tEZXYobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICAgICAgLy8gSWYgZG9jdW1lbnQgZG9lc24ndCBleGlzdCB3ZSBrbm93IGZvciBzdXJlIHdlIHdpbGwgY3Jhc2ggaW4gdGhpcyBtZXRob2RcbiAgICAgIC8vIHdoZW4gd2UgY2FsbCBkb2N1bWVudC5jcmVhdGVFdmVudCgpLiBIb3dldmVyIHRoaXMgY2FuIGNhdXNlIGNvbmZ1c2luZ1xuICAgICAgLy8gZXJyb3JzOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2tpbmN1YmF0b3IvY3JlYXRlLXJlYWN0LWFwcC9pc3N1ZXMvMzQ4MlxuICAgICAgLy8gU28gd2UgcHJlZW1wdGl2ZWx5IHRocm93IHdpdGggYSBiZXR0ZXIgbWVzc2FnZSBpbnN0ZWFkLlxuICAgICAgaWYgKCEodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgZG9jdW1lbnRgIGdsb2JhbCB3YXMgZGVmaW5lZCB3aGVuIFJlYWN0IHdhcyBpbml0aWFsaXplZCwgYnV0IGlzIG5vdCBkZWZpbmVkIGFueW1vcmUuIFRoaXMgY2FuIGhhcHBlbiBpbiBhIHRlc3QgZW52aXJvbm1lbnQgaWYgYSBjb21wb25lbnQgc2NoZWR1bGVzIGFuIHVwZGF0ZSBmcm9tIGFuIGFzeW5jaHJvbm91cyBjYWxsYmFjaywgYnV0IHRoZSB0ZXN0IGhhcyBhbHJlYWR5IGZpbmlzaGVkIHJ1bm5pbmcuIFRvIHNvbHZlIHRoaXMsIHlvdSBjYW4gZWl0aGVyIHVubW91bnQgdGhlIGNvbXBvbmVudCBhdCB0aGUgZW5kIG9mIHlvdXIgdGVzdCAoYW5kIGVuc3VyZSB0aGF0IGFueSBhc3luY2hyb25vdXMgb3BlcmF0aW9ucyBnZXQgY2FuY2VsZWQgaW4gYGNvbXBvbmVudFdpbGxVbm1vdW50YCksIG9yIHlvdSBjYW4gY2hhbmdlIHRoZSB0ZXN0IGl0c2VsZiB0byBiZSBhc3luY2hyb25vdXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICB2YXIgZGlkQ2FsbCA9IGZhbHNlOyAvLyBLZWVwcyB0cmFjayBvZiB3aGV0aGVyIHRoZSB1c2VyLXByb3ZpZGVkIGNhbGxiYWNrIHRocmV3IGFuIGVycm9yLiBXZVxuICAgICAgLy8gc2V0IHRoaXMgdG8gdHJ1ZSBhdCB0aGUgYmVnaW5uaW5nLCB0aGVuIHNldCBpdCB0byBmYWxzZSByaWdodCBhZnRlclxuICAgICAgLy8gY2FsbGluZyB0aGUgZnVuY3Rpb24uIElmIHRoZSBmdW5jdGlvbiBlcnJvcnMsIGBkaWRFcnJvcmAgd2lsbCBuZXZlciBiZVxuICAgICAgLy8gc2V0IHRvIGZhbHNlLiBUaGlzIHN0cmF0ZWd5IHdvcmtzIGV2ZW4gaWYgdGhlIGJyb3dzZXIgaXMgZmxha3kgYW5kXG4gICAgICAvLyBmYWlscyB0byBjYWxsIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlciwgYmVjYXVzZSBpdCBkb2Vzbid0IHJlbHkgb25cbiAgICAgIC8vIHRoZSBlcnJvciBldmVudCBhdCBhbGwuXG5cbiAgICAgIHZhciBkaWRFcnJvciA9IHRydWU7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSB2YWx1ZSBvZiB3aW5kb3cuZXZlbnQgc28gdGhhdCB3ZSBjYW4gcmVzZXQgaXRcbiAgICAgIC8vIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8gbGV0IHVzZXIgY29kZSBhY2Nlc3Mgd2luZG93LmV2ZW50IGluIHRoZVxuICAgICAgLy8gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGl0LlxuXG4gICAgICB2YXIgd2luZG93RXZlbnQgPSB3aW5kb3cuZXZlbnQ7IC8vIEtlZXBzIHRyYWNrIG9mIHRoZSBkZXNjcmlwdG9yIG9mIHdpbmRvdy5ldmVudCB0byByZXN0b3JlIGl0IGFmdGVyIGV2ZW50XG4gICAgICAvLyBkaXNwYXRjaGluZzogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzY4OFxuXG4gICAgICB2YXIgd2luZG93RXZlbnREZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih3aW5kb3csICdldmVudCcpO1xuXG4gICAgICBmdW5jdGlvbiByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpIHtcbiAgICAgICAgLy8gV2UgaW1tZWRpYXRlbHkgcmVtb3ZlIHRoZSBjYWxsYmFjayBmcm9tIGV2ZW50IGxpc3RlbmVycyBzbyB0aGF0XG4gICAgICAgIC8vIG5lc3RlZCBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBjYWxscyBkbyBub3QgY2xhc2guIE90aGVyd2lzZSwgYVxuICAgICAgICAvLyBuZXN0ZWQgY2FsbCB3b3VsZCB0cmlnZ2VyIHRoZSBmYWtlIGV2ZW50IGhhbmRsZXJzIG9mIGFueSBjYWxsIGhpZ2hlclxuICAgICAgICAvLyBpbiB0aGUgc3RhY2suXG4gICAgICAgIGZha2VOb2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFdlIGNoZWNrIGZvciB3aW5kb3cuaGFzT3duUHJvcGVydHkoJ2V2ZW50JykgdG8gcHJldmVudCB0aGVcbiAgICAgICAgLy8gd2luZG93LmV2ZW50IGFzc2lnbm1lbnQgaW4gYm90aCBJRSA8PSAxMCBhcyB0aGV5IHRocm93IGFuIGVycm9yXG4gICAgICAgIC8vIFwiTWVtYmVyIG5vdCBmb3VuZFwiIGluIHN0cmljdCBtb2RlLCBhbmQgaW4gRmlyZWZveCB3aGljaCBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHdpbmRvdy5ldmVudC5cblxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5ldmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpKSB7XG4gICAgICAgICAgd2luZG93LmV2ZW50ID0gd2luZG93RXZlbnQ7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQ3JlYXRlIGFuIGV2ZW50IGhhbmRsZXIgZm9yIG91ciBmYWtlIGV2ZW50LiBXZSB3aWxsIHN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGRpc3BhdGNoIG91ciBmYWtlIGV2ZW50IHVzaW5nIGBkaXNwYXRjaEV2ZW50YC4gSW5zaWRlIHRoZSBoYW5kbGVyLCB3ZVxuICAgICAgLy8gY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjay5cblxuXG4gICAgICB2YXIgZnVuY0FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDMpO1xuXG4gICAgICBmdW5jdGlvbiBjYWxsQ2FsbGJhY2soKSB7XG4gICAgICAgIGRpZENhbGwgPSB0cnVlO1xuICAgICAgICByZXN0b3JlQWZ0ZXJEaXNwYXRjaCgpO1xuICAgICAgICBmdW5jLmFwcGx5KGNvbnRleHQsIGZ1bmNBcmdzKTtcbiAgICAgICAgZGlkRXJyb3IgPSBmYWxzZTtcbiAgICAgIH0gLy8gQ3JlYXRlIGEgZ2xvYmFsIGVycm9yIGV2ZW50IGhhbmRsZXIuIFdlIHVzZSB0aGlzIHRvIGNhcHR1cmUgdGhlIHZhbHVlXG4gICAgICAvLyB0aGF0IHdhcyB0aHJvd24uIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGVycm9yIGhhbmRsZXIgd2lsbCBmaXJlIG1vcmVcbiAgICAgIC8vIHRoYW4gb25jZTsgZm9yIGV4YW1wbGUsIGlmIG5vbi1SZWFjdCBjb2RlIGFsc28gY2FsbHMgYGRpc3BhdGNoRXZlbnRgXG4gICAgICAvLyBhbmQgYSBoYW5kbGVyIGZvciB0aGF0IGV2ZW50IHRocm93cy4gV2Ugc2hvdWxkIGJlIHJlc2lsaWVudCB0byBtb3N0IG9mXG4gICAgICAvLyB0aG9zZSBjYXNlcy4gRXZlbiBpZiBvdXIgZXJyb3IgZXZlbnQgaGFuZGxlciBmaXJlcyBtb3JlIHRoYW4gb25jZSwgdGhlXG4gICAgICAvLyBsYXN0IGVycm9yIGV2ZW50IGlzIGFsd2F5cyB1c2VkLiBJZiB0aGUgY2FsbGJhY2sgYWN0dWFsbHkgZG9lcyBlcnJvcixcbiAgICAgIC8vIHdlIGtub3cgdGhhdCB0aGUgbGFzdCBlcnJvciBldmVudCBpcyB0aGUgY29ycmVjdCBvbmUsIGJlY2F1c2UgaXQncyBub3RcbiAgICAgIC8vIHBvc3NpYmxlIGZvciBhbnl0aGluZyBlbHNlIHRvIGhhdmUgaGFwcGVuZWQgaW4gYmV0d2VlbiBvdXIgY2FsbGJhY2tcbiAgICAgIC8vIGVycm9yaW5nIGFuZCB0aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhlIGBkaXNwYXRjaEV2ZW50YCBjYWxsIGJlbG93LiBJZlxuICAgICAgLy8gdGhlIGNhbGxiYWNrIGRvZXNuJ3QgZXJyb3IsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgd2FzIGZpcmVkLCB3ZSBrbm93IHRvXG4gICAgICAvLyBpZ25vcmUgaXQgYmVjYXVzZSBgZGlkRXJyb3JgIHdpbGwgYmUgZmFsc2UsIGFzIGRlc2NyaWJlZCBhYm92ZS5cblxuXG4gICAgICB2YXIgZXJyb3I7IC8vIFVzZSB0aGlzIHRvIHRyYWNrIHdoZXRoZXIgdGhlIGVycm9yIGV2ZW50IGlzIGV2ZXIgY2FsbGVkLlxuXG4gICAgICB2YXIgZGlkU2V0RXJyb3IgPSBmYWxzZTtcbiAgICAgIHZhciBpc0Nyb3NzT3JpZ2luRXJyb3IgPSBmYWxzZTtcblxuICAgICAgZnVuY3Rpb24gaGFuZGxlV2luZG93RXJyb3IoZXZlbnQpIHtcbiAgICAgICAgZXJyb3IgPSBldmVudC5lcnJvcjtcbiAgICAgICAgZGlkU2V0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCAmJiBldmVudC5jb2xubyA9PT0gMCAmJiBldmVudC5saW5lbm8gPT09IDApIHtcbiAgICAgICAgICBpc0Nyb3NzT3JpZ2luRXJyb3IgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgICAvLyBTb21lIG90aGVyIGVycm9yIGhhbmRsZXIgaGFzIHByZXZlbnRlZCBkZWZhdWx0LlxuICAgICAgICAgIC8vIEJyb3dzZXJzIHNpbGVuY2UgdGhlIGVycm9yIHJlcG9ydCBpZiB0aGlzIGhhcHBlbnMuXG4gICAgICAgICAgLy8gV2UnbGwgcmVtZW1iZXIgdGhpcyB0byBsYXRlciBkZWNpZGUgd2hldGhlciB0byBsb2cgaXQgb3Igbm90LlxuICAgICAgICAgIGlmIChlcnJvciAhPSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGVycm9yLl9zdXBwcmVzc0xvZ2dpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfSBjYXRjaCAoaW5uZXIpIHsvLyBJZ25vcmUuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhIGZha2UgZXZlbnQgdHlwZS5cblxuXG4gICAgICB2YXIgZXZ0VHlwZSA9IFwicmVhY3QtXCIgKyAobmFtZSA/IG5hbWUgOiAnaW52b2tlZ3VhcmRlZGNhbGxiYWNrJyk7IC8vIEF0dGFjaCBvdXIgZXZlbnQgaGFuZGxlcnNcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuICAgICAgZmFrZU5vZGUuYWRkRXZlbnRMaXN0ZW5lcihldnRUeXBlLCBjYWxsQ2FsbGJhY2ssIGZhbHNlKTsgLy8gU3luY2hyb25vdXNseSBkaXNwYXRjaCBvdXIgZmFrZSBldmVudC4gSWYgdGhlIHVzZXItcHJvdmlkZWQgZnVuY3Rpb25cbiAgICAgIC8vIGVycm9ycywgaXQgd2lsbCB0cmlnZ2VyIG91ciBnbG9iYWwgZXJyb3IgaGFuZGxlci5cblxuICAgICAgZXZ0LmluaXRFdmVudChldnRUeXBlLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgZmFrZU5vZGUuZGlzcGF0Y2hFdmVudChldnQpO1xuXG4gICAgICBpZiAod2luZG93RXZlbnREZXNjcmlwdG9yKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3aW5kb3csICdldmVudCcsIHdpbmRvd0V2ZW50RGVzY3JpcHRvcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkaWRDYWxsICYmIGRpZEVycm9yKSB7XG4gICAgICAgIGlmICghZGlkU2V0RXJyb3IpIHtcbiAgICAgICAgICAvLyBUaGUgY2FsbGJhY2sgZXJyb3JlZCwgYnV0IHRoZSBlcnJvciBldmVudCBuZXZlciBmaXJlZC5cbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcignQW4gZXJyb3Igd2FzIHRocm93biBpbnNpZGUgb25lIG9mIHlvdXIgY29tcG9uZW50cywgYnV0IFJlYWN0ICcgKyBcImRvZXNuJ3Qga25vdyB3aGF0IGl0IHdhcy4gVGhpcyBpcyBsaWtlbHkgZHVlIHRvIGJyb3dzZXIgXCIgKyAnZmxha2luZXNzLiBSZWFjdCBkb2VzIGl0cyBiZXN0IHRvIHByZXNlcnZlIHRoZSBcIlBhdXNlIG9uICcgKyAnZXhjZXB0aW9uc1wiIGJlaGF2aW9yIG9mIHRoZSBEZXZUb29scywgd2hpY2ggcmVxdWlyZXMgc29tZSAnICsgXCJERVYtbW9kZSBvbmx5IHRyaWNrcy4gSXQncyBwb3NzaWJsZSB0aGF0IHRoZXNlIGRvbid0IHdvcmsgaW4gXCIgKyAneW91ciBicm93c2VyLiBUcnkgdHJpZ2dlcmluZyB0aGUgZXJyb3IgaW4gcHJvZHVjdGlvbiBtb2RlLCAnICsgJ29yIHN3aXRjaGluZyB0byBhIG1vZGVybiBicm93c2VyLiBJZiB5b3Ugc3VzcGVjdCB0aGF0IHRoaXMgaXMgJyArICdhY3R1YWxseSBhbiBpc3N1ZSB3aXRoIFJlYWN0LCBwbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0Nyb3NzT3JpZ2luRXJyb3IpIHtcbiAgICAgICAgICBlcnJvciA9IG5ldyBFcnJvcihcIkEgY3Jvc3Mtb3JpZ2luIGVycm9yIHdhcyB0aHJvd24uIFJlYWN0IGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gXCIgKyAndGhlIGFjdHVhbCBlcnJvciBvYmplY3QgaW4gZGV2ZWxvcG1lbnQuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jcm9zc29yaWdpbi1lcnJvciBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gICAgICB9IC8vIFJlbW92ZSBvdXIgZXZlbnQgbGlzdGVuZXJzXG5cblxuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgaGFuZGxlV2luZG93RXJyb3IpO1xuXG4gICAgICBpZiAoIWRpZENhbGwpIHtcbiAgICAgICAgLy8gU29tZXRoaW5nIHdlbnQgcmVhbGx5IHdyb25nLCBhbmQgb3VyIGV2ZW50IHdhcyBub3QgZGlzcGF0Y2hlZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjczNFxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE2NTg1XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB0aGUgcHJvZHVjdGlvbiBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgcmV0dXJuIGludm9rZUd1YXJkZWRDYWxsYmFja1Byb2QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5cbnZhciBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsO1xuXG52YXIgaGFzRXJyb3IgPSBmYWxzZTtcbnZhciBjYXVnaHRFcnJvciA9IG51bGw7IC8vIFVzZWQgYnkgZXZlbnQgc3lzdGVtIHRvIGNhcHR1cmUvcmV0aHJvdyB0aGUgZmlyc3QgZXJyb3IuXG5cbnZhciBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbnZhciByZXRocm93RXJyb3IgPSBudWxsO1xudmFyIHJlcG9ydGVyID0ge1xuICBvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufTtcbi8qKlxuICogQ2FsbCBhIGZ1bmN0aW9uIHdoaWxlIGd1YXJkaW5nIGFnYWluc3QgZXJyb3JzIHRoYXQgaGFwcGVucyB3aXRoaW4gaXQuXG4gKiBSZXR1cm5zIGFuIGVycm9yIGlmIGl0IHRocm93cywgb3RoZXJ3aXNlIG51bGwuXG4gKlxuICogSW4gcHJvZHVjdGlvbiwgdGhpcyBpcyBpbXBsZW1lbnRlZCB1c2luZyBhIHRyeS1jYXRjaC4gVGhlIHJlYXNvbiB3ZSBkb24ndFxuICogdXNlIGEgdHJ5LWNhdGNoIGRpcmVjdGx5IGlzIHNvIHRoYXQgd2UgY2FuIHN3YXAgb3V0IGEgZGlmZmVyZW50XG4gKiBpbXBsZW1lbnRhdGlvbiBpbiBERVYgbW9kZS5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBvZiB0aGUgZ3VhcmQgdG8gdXNlIGZvciBsb2dnaW5nIG9yIGRlYnVnZ2luZ1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaW52b2tlXG4gKiBAcGFyYW0geyp9IGNvbnRleHQgVGhlIGNvbnRleHQgdG8gdXNlIHdoZW4gY2FsbGluZyB0aGUgZnVuY3Rpb25cbiAqIEBwYXJhbSB7Li4uKn0gYXJncyBBcmd1bWVudHMgZm9yIGZ1bmN0aW9uXG4gKi9cblxuZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsJDEuYXBwbHkocmVwb3J0ZXIsIGFyZ3VtZW50cyk7XG59XG4vKipcbiAqIFNhbWUgYXMgaW52b2tlR3VhcmRlZENhbGxiYWNrLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYW4gZXJyb3IsIGl0IHN0b3Jlc1xuICogaXQgaW4gYSBnbG9iYWwgc28gaXQgY2FuIGJlIHJldGhyb3duIGJ5IGByZXRocm93Q2F1Z2h0RXJyb3JgIGxhdGVyLlxuICogVE9ETzogU2VlIGlmIGNhdWdodEVycm9yIGFuZCByZXRocm93RXJyb3IgY2FuIGJlIHVuaWZpZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcihuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgIGlmICghaGFzUmV0aHJvd0Vycm9yKSB7XG4gICAgICBoYXNSZXRocm93RXJyb3IgPSB0cnVlO1xuICAgICAgcmV0aHJvd0Vycm9yID0gZXJyb3I7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIER1cmluZyBleGVjdXRpb24gb2YgZ3VhcmRlZCBmdW5jdGlvbnMgd2Ugd2lsbCBjYXB0dXJlIHRoZSBmaXJzdCBlcnJvciB3aGljaFxuICogd2Ugd2lsbCByZXRocm93IHRvIGJlIGhhbmRsZWQgYnkgdGhlIHRvcCBsZXZlbCBlcnJvciBoYW5kbGVyLlxuICovXG5cbmZ1bmN0aW9uIHJldGhyb3dDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc1JldGhyb3dFcnJvcikge1xuICAgIHZhciBlcnJvciA9IHJldGhyb3dFcnJvcjtcbiAgICBoYXNSZXRocm93RXJyb3IgPSBmYWxzZTtcbiAgICByZXRocm93RXJyb3IgPSBudWxsO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5mdW5jdGlvbiBoYXNDYXVnaHRFcnJvcigpIHtcbiAgcmV0dXJuIGhhc0Vycm9yO1xufVxuZnVuY3Rpb24gY2xlYXJDYXVnaHRFcnJvcigpIHtcbiAgaWYgKGhhc0Vycm9yKSB7XG4gICAgdmFyIGVycm9yID0gY2F1Z2h0RXJyb3I7XG4gICAgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICBjYXVnaHRFcnJvciA9IG51bGw7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiY2xlYXJDYXVnaHRFcnJvciB3YXMgY2FsbGVkIGJ1dCBubyBlcnJvciB3YXMgY2FwdHVyZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBgUmVhY3RJbnN0YW5jZU1hcGAgbWFpbnRhaW5zIGEgbWFwcGluZyBmcm9tIGEgcHVibGljIGZhY2luZyBzdGF0ZWZ1bFxuICogaW5zdGFuY2UgKGtleSkgYW5kIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiAodmFsdWUpLiBUaGlzIGFsbG93cyBwdWJsaWNcbiAqIG1ldGhvZHMgdG8gYWNjZXB0IHRoZSB1c2VyIGZhY2luZyBpbnN0YW5jZSBhcyBhbiBhcmd1bWVudCBhbmQgbWFwIHRoZW0gYmFja1xuICogdG8gaW50ZXJuYWwgbWV0aG9kcy5cbiAqXG4gKiBOb3RlIHRoYXQgdGhpcyBtb2R1bGUgaXMgY3VycmVudGx5IHNoYXJlZCBhbmQgYXNzdW1lZCB0byBiZSBzdGF0ZWxlc3MuXG4gKiBJZiB0aGlzIGJlY29tZXMgYW4gYWN0dWFsIE1hcCwgdGhhdCB3aWxsIGJyZWFrLlxuICovXG5mdW5jdGlvbiBnZXQoa2V5KSB7XG4gIHJldHVybiBrZXkuX3JlYWN0SW50ZXJuYWxzO1xufVxuZnVuY3Rpb24gaGFzKGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscyAhPT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAga2V5Ll9yZWFjdEludGVybmFscyA9IHZhbHVlO1xufVxuXG4vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdHdvIHZhbHVlcy4gVGhleSdyZSB1c2VkIGJ5IFJlYWN0IERldiBUb29scy5cbnZhciBOb0ZsYWdzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFBlcmZvcm1lZFdvcmsgPVxuLyogICAgICAgICAgICAgICAgKi9cbjE7IC8vIFlvdSBjYW4gY2hhbmdlIHRoZSByZXN0IChhbmQgYWRkIG1vcmUpLlxuXG52YXIgUGxhY2VtZW50ID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBVcGRhdGUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40O1xudmFyIFBsYWNlbWVudEFuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjY7XG52YXIgRGVsZXRpb24gPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuODtcbnZhciBDb250ZW50UmVzZXQgPVxuLyogICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDYWxsYmFjayA9XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBEaWRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG42NDtcbnZhciBSZWYgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMjg7XG52YXIgU25hcHNob3QgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMjU2O1xudmFyIFBhc3NpdmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbjUxMjsgLy8gVE9ETyAoZWZmZWN0cykgUmVtb3ZlIHRoaXMgYml0IG9uY2UgdGhlIG5ldyByZWNvbmNpbGVyIGlzIHN5bmNlZCB0byB0aGUgb2xkLlxuXG52YXIgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2ID1cbi8qICAgICAqL1xuODE5MjtcbnZhciBIeWRyYXRpbmcgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4xMDI0O1xudmFyIEh5ZHJhdGluZ0FuZFVwZGF0ZSA9XG4vKiAgICAgICAgICAgKi9cbjEwMjg7IC8vIFBhc3NpdmUgJiBVcGRhdGUgJiBDYWxsYmFjayAmIFJlZiAmIFNuYXBzaG90XG5cbnZhciBMaWZlY3ljbGVFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICovXG45MzI7IC8vIFVuaW9uIG9mIGFsbCBob3N0IGVmZmVjdHNcblxudmFyIEhvc3RFZmZlY3RNYXNrID1cbi8qICAgICAgICAgICAgICAgKi9cbjIwNDc7IC8vIFRoZXNlIGFyZSBub3QgcmVhbGx5IHNpZGUgZWZmZWN0cywgYnV0IHdlIHN0aWxsIHJldXNlIHRoaXMgZmllbGQuXG5cbnZhciBJbmNvbXBsZXRlID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4yMDQ4O1xudmFyIFNob3VsZENhcHR1cmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSA9XG4vKiAqL1xuMTYzODQ7IC8vIFN0YXRpYyB0YWdzIGRlc2NyaWJlIGFzcGVjdHMgb2YgYSBmaWJlciB0aGF0IGFyZSBub3Qgc3BlY2lmaWMgdG8gYSByZW5kZXIsXG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xuZnVuY3Rpb24gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikge1xuICB2YXIgbm9kZSA9IGZpYmVyO1xuICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBmaWJlcjtcblxuICBpZiAoIWZpYmVyLmFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhpcyBtaWdodCBiZSBhIG5ldyB0cmVlIHRoYXQgaXNuJ3QgaW5zZXJ0ZWRcbiAgICAvLyB5ZXQuIElmIGl0IGlzLCB0aGVuIGl0IHdpbGwgaGF2ZSBhIHBlbmRpbmcgaW5zZXJ0aW9uIGVmZmVjdCBvbiBpdC5cbiAgICB2YXIgbmV4dE5vZGUgPSBub2RlO1xuXG4gICAgZG8ge1xuICAgICAgbm9kZSA9IG5leHROb2RlO1xuXG4gICAgICBpZiAoKG5vZGUuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhbiBpbnNlcnRpb24gb3IgaW4tcHJvZ3Jlc3MgaHlkcmF0aW9uLiBUaGUgbmVhcmVzdCBwb3NzaWJsZVxuICAgICAgICAvLyBtb3VudGVkIGZpYmVyIGlzIHRoZSBwYXJlbnQgYnV0IHdlIG5lZWQgdG8gY29udGludWUgdG8gZmlndXJlIG91dFxuICAgICAgICAvLyBpZiB0aGF0IG9uZSBpcyBzdGlsbCBtb3VudGVkLlxuICAgICAgICBuZWFyZXN0TW91bnRlZCA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0Tm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5leHROb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAobm9kZS5yZXR1cm4pIHtcbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gVE9ETzogQ2hlY2sgaWYgdGhpcyB3YXMgYSBuZXN0ZWQgSG9zdFJvb3Qgd2hlbiB1c2VkIHdpdGhcbiAgICAvLyByZW5kZXJDb250YWluZXJJbnRvU3VidHJlZS5cbiAgICByZXR1cm4gbmVhcmVzdE1vdW50ZWQ7XG4gIH0gLy8gSWYgd2UgZGlkbid0IGhpdCB0aGUgcm9vdCwgdGhhdCBtZWFucyB0aGF0IHdlJ3JlIGluIGFuIGRpc2Nvbm5lY3RlZCB0cmVlXG4gIC8vIHRoYXQgaGFzIGJlZW4gdW5tb3VudGVkLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHN1c3BlbnNlU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdXNwZW5zZVN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsKSB7XG4gICAgICByZXR1cm4gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKGZpYmVyKSB7XG4gIHJldHVybiBmaWJlci50YWcgPT09IEhvc3RSb290ID8gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gOiBudWxsO1xufVxuZnVuY3Rpb24gaXNGaWJlck1vdW50ZWQoZmliZXIpIHtcbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cbmZ1bmN0aW9uIGlzTW91bnRlZChjb21wb25lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcbiAgICAgIHZhciBpbnN0YW5jZSA9IG93bmVyRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAoIWluc3RhbmNlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlcikge1xuICAgICAgICBlcnJvcignJXMgaXMgYWNjZXNzaW5nIGlzTW91bnRlZCBpbnNpZGUgaXRzIHJlbmRlcigpIGZ1bmN0aW9uLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lckZpYmVyLnR5cGUpIHx8ICdBIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChjb21wb25lbnQpO1xuXG4gIGlmICghZmliZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRJc01vdW50ZWQoZmliZXIpIHtcbiAgaWYgKCEoZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcihmaWJlcikgPT09IGZpYmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChmaWJlcikge1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmICghYWx0ZXJuYXRlKSB7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYWx0ZXJuYXRlLCB0aGVuIHdlIG9ubHkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBtb3VudGVkLlxuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpO1xuXG4gICAgaWYgKCEobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gZmliZXIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBJZiB3ZSBoYXZlIHR3byBwb3NzaWJsZSBicmFuY2hlcywgd2UnbGwgd2FsayBiYWNrd2FyZHMgdXAgdG8gdGhlIHJvb3RcbiAgLy8gdG8gc2VlIHdoYXQgcGF0aCB0aGUgcm9vdCBwb2ludHMgdG8uIE9uIHRoZSB3YXkgd2UgbWF5IGhpdCBvbmUgb2YgdGhlXG4gIC8vIHNwZWNpYWwgY2FzZXMgYW5kIHdlJ2xsIGRlYWwgd2l0aCB0aGVtLlxuXG5cbiAgdmFyIGEgPSBmaWJlcjtcbiAgdmFyIGIgPSBhbHRlcm5hdGU7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50QSA9IGEucmV0dXJuO1xuXG4gICAgaWYgKHBhcmVudEEgPT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIGF0IHRoZSByb290LlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHBhcmVudEIgPSBwYXJlbnRBLmFsdGVybmF0ZTtcblxuICAgIGlmIChwYXJlbnRCID09PSBudWxsKSB7XG4gICAgICAvLyBUaGVyZSBpcyBubyBhbHRlcm5hdGUuIFRoaXMgaXMgYW4gdW51c3VhbCBjYXNlLiBDdXJyZW50bHksIGl0IG9ubHlcbiAgICAgIC8vIGhhcHBlbnMgd2hlbiBhIFN1c3BlbnNlIGNvbXBvbmVudCBpcyBoaWRkZW4uIEFuIGV4dHJhIGZyYWdtZW50IGZpYmVyXG4gICAgICAvLyBpcyBpbnNlcnRlZCBpbiBiZXR3ZWVuIHRoZSBTdXNwZW5zZSBmaWJlciBhbmQgaXRzIGNoaWxkcmVuLiBTa2lwXG4gICAgICAvLyBvdmVyIHRoaXMgZXh0cmEgZnJhZ21lbnQgZmliZXIgYW5kIHByb2NlZWQgdG8gdGhlIG5leHQgcGFyZW50LlxuICAgICAgdmFyIG5leHRQYXJlbnQgPSBwYXJlbnRBLnJldHVybjtcblxuICAgICAgaWYgKG5leHRQYXJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgYSA9IGIgPSBuZXh0UGFyZW50O1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gSWYgdGhlcmUncyBubyBwYXJlbnQsIHdlJ3JlIGF0IHRoZSByb290LlxuXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gSWYgYm90aCBjb3BpZXMgb2YgdGhlIHBhcmVudCBmaWJlciBwb2ludCB0byB0aGUgc2FtZSBjaGlsZCwgd2UgY2FuXG4gICAgLy8gYXNzdW1lIHRoYXQgdGhlIGNoaWxkIGlzIGN1cnJlbnQuIFRoaXMgaGFwcGVucyB3aGVuIHdlIGJhaWxvdXQgb24gbG93XG4gICAgLy8gcHJpb3JpdHk6IHRoZSBiYWlsZWQgb3V0IGZpYmVyJ3MgY2hpbGQgcmV1c2VzIHRoZSBjdXJyZW50IGNoaWxkLlxuXG5cbiAgICBpZiAocGFyZW50QS5jaGlsZCA9PT0gcGFyZW50Qi5jaGlsZCkge1xuICAgICAgdmFyIGNoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKGNoaWxkKSB7XG4gICAgICAgIGlmIChjaGlsZCA9PT0gYSkge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoaWxkID09PSBiKSB7XG4gICAgICAgICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEIgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgICAgICAgIGFzc2VydElzTW91bnRlZChwYXJlbnRBKTtcbiAgICAgICAgICByZXR1cm4gYWx0ZXJuYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgfSAvLyBXZSBzaG91bGQgbmV2ZXIgaGF2ZSBhbiBhbHRlcm5hdGUgZm9yIGFueSBtb3VudGluZyBub2RlLiBTbyB0aGUgb25seVxuICAgICAgLy8gd2F5IHRoaXMgY291bGQgcG9zc2libHkgaGFwcGVuIGlzIGlmIHRoaXMgd2FzIHVubW91bnRlZCwgaWYgYXQgYWxsLlxuXG5cbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGEucmV0dXJuICE9PSBiLnJldHVybikge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVyIG9mIEEgYW5kIHRoZSByZXR1cm4gcG9pbnRlciBvZiBCIHBvaW50IHRvIGRpZmZlcmVudFxuICAgICAgLy8gZmliZXJzLiBXZSBhc3N1bWUgdGhhdCByZXR1cm4gcG9pbnRlcnMgbmV2ZXIgY3Jpc3MtY3Jvc3MsIHNvIEEgbXVzdFxuICAgICAgLy8gYmVsb25nIHRvIHRoZSBjaGlsZCBzZXQgb2YgQS5yZXR1cm4sIGFuZCBCIG11c3QgYmVsb25nIHRvIHRoZSBjaGlsZFxuICAgICAgLy8gc2V0IG9mIEIucmV0dXJuLlxuICAgICAgYSA9IHBhcmVudEE7XG4gICAgICBiID0gcGFyZW50QjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHJldHVybiBwb2ludGVycyBwb2ludCB0byB0aGUgc2FtZSBmaWJlci4gV2UnbGwgaGF2ZSB0byB1c2UgdGhlXG4gICAgICAvLyBkZWZhdWx0LCBzbG93IHBhdGg6IHNjYW4gdGhlIGNoaWxkIHNldHMgb2YgZWFjaCBwYXJlbnQgYWx0ZXJuYXRlIHRvIHNlZVxuICAgICAgLy8gd2hpY2ggY2hpbGQgYmVsb25ncyB0byB3aGljaCBzZXQuXG4gICAgICAvL1xuICAgICAgLy8gU2VhcmNoIHBhcmVudCBBJ3MgY2hpbGQgc2V0XG4gICAgICB2YXIgZGlkRmluZENoaWxkID0gZmFsc2U7XG4gICAgICB2YXIgX2NoaWxkID0gcGFyZW50QS5jaGlsZDtcblxuICAgICAgd2hpbGUgKF9jaGlsZCkge1xuICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgIGIgPSBwYXJlbnRBO1xuICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkRmluZENoaWxkKSB7XG4gICAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQidzIGNoaWxkIHNldFxuICAgICAgICBfY2hpbGQgPSBwYXJlbnRCLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBhKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYSA9IHBhcmVudEI7XG4gICAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChfY2hpbGQgPT09IGIpIHtcbiAgICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgICBiID0gcGFyZW50QjtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkNoaWxkIHdhcyBub3QgZm91bmQgaW4gZWl0aGVyIHBhcmVudCBzZXQuIFRoaXMgaW5kaWNhdGVzIGEgYnVnIGluIFJlYWN0IHJlbGF0ZWQgdG8gdGhlIHJldHVybiBwb2ludGVyLiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghKGEuYWx0ZXJuYXRlID09PSBiKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZXR1cm4gZmliZXJzIHNob3VsZCBhbHdheXMgYmUgZWFjaCBvdGhlcnMnIGFsdGVybmF0ZXMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gSWYgdGhlIHJvb3QgaXMgbm90IGEgaG9zdCBjb250YWluZXIsIHdlJ3JlIGluIGEgZGlzY29ubmVjdGVkIHRyZWUuIEkuZS5cbiAgLy8gdW5tb3VudGVkLlxuXG5cbiAgaWYgKCEoYS50YWcgPT09IEhvc3RSb290KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhLnN0YXRlTm9kZS5jdXJyZW50ID09PSBhKSB7XG4gICAgLy8gV2UndmUgZGV0ZXJtaW5lZCB0aGF0IEEgaXMgdGhlIGN1cnJlbnQgYnJhbmNoLlxuICAgIHJldHVybiBmaWJlcjtcbiAgfSAvLyBPdGhlcndpc2UgQiBoYXMgdG8gYmUgY3VycmVudCBicmFuY2guXG5cblxuICByZXR1cm4gYWx0ZXJuYXRlO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXIocGFyZW50KSB7XG4gIHZhciBjdXJyZW50UGFyZW50ID0gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgocGFyZW50KTtcblxuICBpZiAoIWN1cnJlbnRQYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBOZXh0IHdlJ2xsIGRyaWxsIGRvd24gdGhpcyBjb21wb25lbnQgdG8gZmluZCB0aGUgZmlyc3QgSG9zdENvbXBvbmVudC9UZXh0LlxuXG5cbiAgdmFyIG5vZGUgPSBjdXJyZW50UGFyZW50O1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZmluZEN1cnJlbnRIb3N0RmliZXJXaXRoTm9Qb3J0YWxzKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgJiYgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHdoaWxlICghbm9kZS5zaWJsaW5nKSB7XG4gICAgICBpZiAoIW5vZGUucmV0dXJuIHx8IG5vZGUucmV0dXJuID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH0gLy8gRmxvdyBuZWVkcyB0aGUgcmV0dXJuIG51bGwgaGVyZSwgYnV0IEVTTGludCBjb21wbGFpbnMgYWJvdXQgaXQuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnJlYWNoYWJsZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBkb2VzRmliZXJDb250YWluKHBhcmVudEZpYmVyLCBjaGlsZEZpYmVyKSB7XG4gIHZhciBub2RlID0gY2hpbGRGaWJlcjtcbiAgdmFyIHBhcmVudEZpYmVyQWx0ZXJuYXRlID0gcGFyZW50RmliZXIuYWx0ZXJuYXRlO1xuXG4gIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgaWYgKG5vZGUgPT09IHBhcmVudEZpYmVyIHx8IG5vZGUgPT09IHBhcmVudEZpYmVyQWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uID0gZm47XG59XG52YXIgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb247XG5mdW5jdGlvbiBzZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihmbikge1xuICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkgPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eTtcbmZ1bmN0aW9uIHNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KGZuKSB7XG4gIGF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5ID0gZm47XG59IC8vIFRPRE86IFVwZ3JhZGUgdGhpcyBkZWZpbml0aW9uIG9uY2Ugd2UncmUgb24gYSBuZXdlciB2ZXJzaW9uIG9mIEZsb3cgdGhhdFxudmFyIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gVGhlIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cyB0byBiZSByZXBsYXllZC5cblxudmFyIHF1ZXVlZERpc2NyZXRlRXZlbnRzID0gW107IC8vIEluZGljYXRlcyBpZiBhbnkgY29udGludW91cyBldmVudCB0YXJnZXRzIGFyZSBub24tbnVsbCBmb3IgZWFybHkgYmFpbG91dC5cbi8vIGlmIHRoZSBsYXN0IHRhcmdldCB3YXMgZGVoeWRyYXRlZC5cblxudmFyIHF1ZXVlZEZvY3VzID0gbnVsbDtcbnZhciBxdWV1ZWREcmFnID0gbnVsbDtcbnZhciBxdWV1ZWRNb3VzZSA9IG51bGw7IC8vIEZvciBwb2ludGVyIGV2ZW50cyB0aGVyZSBjYW4gYmUgb25lIGxhdGVzdCBldmVudCBwZXIgcG9pbnRlcklkLlxuXG52YXIgcXVldWVkUG9pbnRlcnMgPSBuZXcgTWFwKCk7XG52YXIgcXVldWVkUG9pbnRlckNhcHR1cmVzID0gbmV3IE1hcCgpOyAvLyBXZSBjb3VsZCBjb25zaWRlciByZXBsYXlpbmcgc2VsZWN0aW9uY2hhbmdlIGFuZCB0b3VjaG1vdmVzIHRvby5cblxudmFyIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cyA9IFtdO1xuZnVuY3Rpb24gaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSB7XG4gIHJldHVybiBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwO1xufVxudmFyIGRpc2NyZXRlUmVwbGF5YWJsZUV2ZW50cyA9IFsnbW91c2Vkb3duJywgJ21vdXNldXAnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hzdGFydCcsICdhdXhjbGljaycsICdkYmxjbGljaycsICdwb2ludGVyY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJ1cCcsICdkcmFnZW5kJywgJ2RyYWdzdGFydCcsICdkcm9wJywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdpbnB1dCcsICd0ZXh0SW5wdXQnLCAvLyBJbnRlbnRpb25hbGx5IGNhbWVsQ2FzZVxuJ2NvcHknLCAnY3V0JywgJ3Bhc3RlJywgJ2NsaWNrJywgJ2NoYW5nZScsICdjb250ZXh0bWVudScsICdyZXNldCcsICdzdWJtaXQnXTtcbmZ1bmN0aW9uIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZXZlbnRUeXBlKSB7XG4gIHJldHVybiBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMuaW5kZXhPZihldmVudFR5cGUpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4ge1xuICAgIGJsb2NrZWRPbjogYmxvY2tlZE9uLFxuICAgIGRvbUV2ZW50TmFtZTogZG9tRXZlbnROYW1lLFxuICAgIGV2ZW50U3lzdGVtRmxhZ3M6IGV2ZW50U3lzdGVtRmxhZ3MgfCBJU19SRVBMQVlFRCxcbiAgICBuYXRpdmVFdmVudDogbmF0aXZlRXZlbnQsXG4gICAgdGFyZ2V0Q29udGFpbmVyczogW3RhcmdldENvbnRhaW5lcl1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcXVldWVEaXNjcmV0ZUV2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnB1c2gocXVldWVkRXZlbnQpO1xufSAvLyBSZXNldHMgdGhlIHJlcGxheWluZyBmb3IgdGhpcyB0eXBlIG9mIGNvbnRpbnVvdXMgZXZlbnQgdG8gbm8gZXZlbnQuXG5cbmZ1bmN0aW9uIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnbGVhdmUnOlxuICAgICAgcXVldWVkRHJhZyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgICAgcXVldWVkTW91c2UgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgICB7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJzLmRlbGV0ZShwb2ludGVySWQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgICAge1xuICAgICAgICB2YXIgX3BvaW50ZXJJZCA9IG5hdGl2ZUV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmRlbGV0ZShfcG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChleGlzdGluZ1F1ZXVlZEV2ZW50LCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoZXhpc3RpbmdRdWV1ZWRFdmVudCA9PT0gbnVsbCB8fCBleGlzdGluZ1F1ZXVlZEV2ZW50Lm5hdGl2ZUV2ZW50ICE9PSBuYXRpdmVFdmVudCkge1xuICAgIHZhciBxdWV1ZWRFdmVudCA9IGNyZWF0ZVF1ZXVlZFJlcGxheWFibGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG5cbiAgICBpZiAoYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2ZpYmVyMiA9IGdldEluc3RhbmNlRnJvbU5vZGUoYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQXR0ZW1wdCB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2YgdGhpcyB0YXJnZXQuXG4gICAgICAgIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKF9maWJlcjIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWV1ZWRFdmVudDtcbiAgfSAvLyBJZiB3ZSBoYXZlIGFscmVhZHkgcXVldWVkIHRoaXMgZXhhY3QgZXZlbnQsIHRoZW4gaXQncyBiZWNhdXNlXG4gIC8vIHRoZSBkaWZmZXJlbnQgZXZlbnQgc3lzdGVtcyBoYXZlIGRpZmZlcmVudCBET00gZXZlbnQgbGlzdGVuZXJzLlxuICAvLyBXZSBjYW4gYWNjdW11bGF0ZSB0aGUgZmxhZ3MsIGFuZCB0aGUgdGFyZ2V0Q29udGFpbmVycywgYW5kXG4gIC8vIHN0b3JlIGEgc2luZ2xlIGV2ZW50IHRvIGJlIHJlcGxheWVkLlxuXG5cbiAgZXhpc3RpbmdRdWV1ZWRFdmVudC5ldmVudFN5c3RlbUZsYWdzIHw9IGV2ZW50U3lzdGVtRmxhZ3M7XG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gZXhpc3RpbmdRdWV1ZWRFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gIGlmICh0YXJnZXRDb250YWluZXIgIT09IG51bGwgJiYgdGFyZ2V0Q29udGFpbmVycy5pbmRleE9mKHRhcmdldENvbnRhaW5lcikgPT09IC0xKSB7XG4gICAgdGFyZ2V0Q29udGFpbmVycy5wdXNoKHRhcmdldENvbnRhaW5lcik7XG4gIH1cblxuICByZXR1cm4gZXhpc3RpbmdRdWV1ZWRFdmVudDtcbn1cblxuZnVuY3Rpb24gcXVldWVJZkNvbnRpbnVvdXNFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICAvLyBUaGVzZSBzZXQgcmVsYXRlZFRhcmdldCB0byBudWxsIGJlY2F1c2UgdGhlIHJlcGxheWVkIGV2ZW50IHdpbGwgYmUgdHJlYXRlZCBhcyBpZiB3ZVxuICAvLyBtb3ZlZCBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdyAobm8gdGFyZ2V0KSBvbnRvIHRoZSB0YXJnZXQgb25jZSBpdCBoeWRyYXRlcy5cbiAgLy8gSW5zdGVhZCBvZiBtdXRhdGluZyB3ZSBjb3VsZCBjbG9uZSB0aGUgZXZlbnQuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICB7XG4gICAgICAgIHZhciBmb2N1c0V2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZEZvY3VzID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRGb2N1cywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZm9jdXNFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGRyYWdFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWREcmFnID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWREcmFnLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBkcmFnRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBtb3VzZUV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHF1ZXVlZE1vdXNlID0gYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRNb3VzZSwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbW91c2VFdmVudCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBwb2ludGVySWQgPSBwb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5zZXQocG9pbnRlcklkLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJzLmdldChwb2ludGVySWQpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIHBvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVyRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgdmFyIF9wb2ludGVySWQyID0gX3BvaW50ZXJFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5zZXQoX3BvaW50ZXJJZDIsIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkUG9pbnRlckNhcHR1cmVzLmdldChfcG9pbnRlcklkMikgfHwgbnVsbCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgX3BvaW50ZXJFdmVudCkpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gQ2hlY2sgaWYgdGhpcyB0YXJnZXQgaXMgdW5ibG9ja2VkLiBSZXR1cm5zIHRydWUgaWYgaXQncyB1bmJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChxdWV1ZWRUYXJnZXQpIHtcbiAgLy8gVE9ETzogVGhpcyBmdW5jdGlvbiBzaGFyZXMgYSBsb3Qgb2YgbG9naWMgd2l0aCBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50LlxuICAvLyBUcnkgdG8gdW5pZnkgdGhlbS4gSXQncyBhIGJpdCB0cmlja3kgc2luY2UgaXQgd291bGQgcmVxdWlyZSB0d28gcmV0dXJuXG4gIC8vIHZhbHVlcy5cbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShxdWV1ZWRUYXJnZXQudGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciB0YWcgPSBuZWFyZXN0TW91bnRlZC50YWc7XG5cbiAgICAgIGlmICh0YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGdldFN1c3BlbnNlSW5zdGFuY2VGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlJ3JlIGJsb2NrZWQgb24gaHlkcmF0aW5nIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgLy8gSW5jcmVhc2UgaXRzIHByaW9yaXR5LlxuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBpbnN0YW5jZTtcbiAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShxdWV1ZWRUYXJnZXQubGFuZVByaW9yaXR5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHF1ZXVlZFRhcmdldC5wcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkobmVhcmVzdE1vdW50ZWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBnZXRDb250YWluZXJGcm9tRmliZXIobmVhcmVzdE1vdW50ZWQpOyAvLyBXZSBkb24ndCBjdXJyZW50bHkgaGF2ZSBhIHdheSB0byBpbmNyZWFzZSB0aGUgcHJpb3JpdHkgb2ZcbiAgICAgICAgICAvLyBhIHJvb3Qgb3RoZXIgdGhhbiBzeW5jLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0YXJnZXRDb250YWluZXJzID0gcXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICB3aGlsZSAodGFyZ2V0Q29udGFpbmVycy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KHF1ZXVlZEV2ZW50LmRvbUV2ZW50TmFtZSwgcXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBxdWV1ZWRFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICBpZiAobmV4dEJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgdmFyIF9maWJlcjMgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHRCbG9ja2VkT24pO1xuXG4gICAgICBpZiAoX2ZpYmVyMyAhPT0gbnVsbCkge1xuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIzKTtcbiAgICAgIH1cblxuICAgICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgdGFyZ2V0Q29udGFpbmVycy5zaGlmdCgpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnRJbk1hcChxdWV1ZWRFdmVudCwga2V5LCBtYXApIHtcbiAgaWYgKGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRXZlbnQpKSB7XG4gICAgbWFwLmRlbGV0ZShrZXkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlcGxheVVuYmxvY2tlZEV2ZW50cygpIHtcbiAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IGZhbHNlOyAvLyBGaXJzdCByZXBsYXkgZGlzY3JldGUgZXZlbnRzLlxuXG4gIHdoaWxlIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHREaXNjcmV0ZUV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbMF07XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgLy8gSW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgYm91bmRhcnkgdG8gdW5ibG9ja1xuICAgICAgLy8gdGhlIG5leHQgZGlzY3JldGUgZXZlbnQuXG4gICAgICB2YXIgX2ZpYmVyNCA9IGdldEluc3RhbmNlRnJvbU5vZGUobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjQgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbihfZmliZXI0KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIHRhcmdldENvbnRhaW5lcnMgPSBuZXh0RGlzY3JldGVFdmVudC50YXJnZXRDb250YWluZXJzO1xuXG4gICAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIHRhcmdldENvbnRhaW5lciA9IHRhcmdldENvbnRhaW5lcnNbMF07XG4gICAgICB2YXIgbmV4dEJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQobmV4dERpc2NyZXRlRXZlbnQuZG9tRXZlbnROYW1lLCBuZXh0RGlzY3JldGVFdmVudC5ldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5leHREaXNjcmV0ZUV2ZW50Lm5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC4gVHJ5IGFnYWluIGxhdGVyLlxuICAgICAgICBuZXh0RGlzY3JldGVFdmVudC5ibG9ja2VkT24gPSBuZXh0QmxvY2tlZE9uO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gVGhpcyB0YXJnZXQgY29udGFpbmVyIHdhcyBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZC4gVHJ5IHRoZSBuZXh0LlxuXG5cbiAgICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgICB9XG5cbiAgICBpZiAobmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgICAvLyBXZSd2ZSBzdWNjZXNzZnVsbHkgcmVwbGF5ZWQgdGhlIGZpcnN0IGV2ZW50LiBMZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgICAgcXVldWVkRGlzY3JldGVFdmVudHMuc2hpZnQoKTtcbiAgICB9XG4gIH0gLy8gTmV4dCByZXBsYXkgYW55IGNvbnRpbnVvdXMgZXZlbnRzLlxuXG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRm9jdXMpKSB7XG4gICAgcXVldWVkRm9jdXMgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwgJiYgYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudChxdWV1ZWREcmFnKSkge1xuICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICB9XG5cbiAgaWYgKHF1ZXVlZE1vdXNlICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkTW91c2UpKSB7XG4gICAgcXVldWVkTW91c2UgPSBudWxsO1xuICB9XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXApO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCkge1xuICBpZiAocXVldWVkRXZlbnQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuXG4gICAgaWYgKCFoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0KSB7XG4gICAgICBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gdHJ1ZTsgLy8gU2NoZWR1bGUgYSBjYWxsYmFjayB0byBhdHRlbXB0IHJlcGxheWluZyBhcyBtYW55IGV2ZW50cyBhcyBhcmVcbiAgICAgIC8vIG5vdyB1bmJsb2NrZWQuIFRoaXMgZmlyc3QgbWlnaHQgbm90IGFjdHVhbGx5IGJlIHVuYmxvY2tlZCB5ZXQuXG4gICAgICAvLyBXZSBjb3VsZCBjaGVjayBpdCBlYXJseSB0byBhdm9pZCBzY2hlZHVsaW5nIGFuIHVubmVjZXNzYXJ5IGNhbGxiYWNrLlxuXG4gICAgICBTY2hlZHVsZXIudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksIHJlcGxheVVuYmxvY2tlZEV2ZW50cyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJldHJ5SWZCbG9ja2VkT24odW5ibG9ja2VkKSB7XG4gIC8vIE1hcmsgYW55dGhpbmcgdGhhdCB3YXMgYmxvY2tlZCBvbiB0aGlzIGFzIG5vIGxvbmdlciBibG9ja2VkXG4gIC8vIGFuZCBlbGlnaWJsZSBmb3IgYSByZXBsYXkuXG4gIGlmIChxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdLCB1bmJsb2NrZWQpOyAvLyBUaGlzIGlzIGEgZXhwb25lbnRpYWwgc2VhcmNoIGZvciBlYWNoIGJvdW5kYXJ5IHRoYXQgY29tbWl0cy4gSSB0aGluayBpdCdzXG4gICAgLy8gd29ydGggaXQgYmVjYXVzZSB3ZSBleHBlY3QgdmVyeSBmZXcgZGlzY3JldGUgZXZlbnRzIHRvIHF1ZXVlIHVwIGFuZCBvbmNlXG4gICAgLy8gd2UgYXJlIGFjdHVhbGx5IGZ1bGx5IHVuYmxvY2tlZCBpdCB3aWxsIGJlIGZhc3QgdG8gcmVwbGF5IHRoZW0uXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IHF1ZXVlZERpc2NyZXRlRXZlbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcXVldWVkRXZlbnQgPSBxdWV1ZWREaXNjcmV0ZUV2ZW50c1tpXTtcblxuICAgICAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHF1ZXVlZEZvY3VzICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEZvY3VzLCB1bmJsb2NrZWQpO1xuICB9XG5cbiAgaWYgKHF1ZXVlZERyYWcgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRHJhZywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRNb3VzZSwgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIHZhciB1bmJsb2NrID0gZnVuY3Rpb24gKHF1ZXVlZEV2ZW50KSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRFdmVudCwgdW5ibG9ja2VkKTtcbiAgfTtcblxuICBxdWV1ZWRQb2ludGVycy5mb3JFYWNoKHVuYmxvY2spO1xuICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuZm9yRWFjaCh1bmJsb2NrKTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzLmxlbmd0aDsgX2krKykge1xuICAgIHZhciBxdWV1ZWRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbX2ldO1xuXG4gICAgaWYgKHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgcXVldWVkVGFyZ2V0LmJsb2NrZWRPbiA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd2hpbGUgKHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgdmFyIG5leHRFeHBsaWNpdFRhcmdldCA9IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0c1swXTtcblxuICAgIGlmIChuZXh0RXhwbGljaXRUYXJnZXQuYmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBzdGlsbCBibG9ja2VkLlxuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF0dGVtcHRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldChuZXh0RXhwbGljaXRUYXJnZXQpO1xuXG4gICAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBXZSdyZSB1bmJsb2NrZWQuXG4gICAgICAgIHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5zaGlmdCgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgRGlzY3JldGVFdmVudCA9IDA7XG52YXIgVXNlckJsb2NraW5nRXZlbnQgPSAxO1xudmFyIENvbnRpbnVvdXNFdmVudCA9IDI7XG5cbi8qKlxuICogR2VuZXJhdGUgYSBtYXBwaW5nIG9mIHN0YW5kYXJkIHZlbmRvciBwcmVmaXhlcyB1c2luZyB0aGUgZGVmaW5lZCBzdHlsZSBwcm9wZXJ0eSBhbmQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3R5bGVQcm9wXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIG1ha2VQcmVmaXhNYXAoc3R5bGVQcm9wLCBldmVudE5hbWUpIHtcbiAgdmFyIHByZWZpeGVzID0ge307XG4gIHByZWZpeGVzW3N0eWxlUHJvcC50b0xvd2VyQ2FzZSgpXSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xuICBwcmVmaXhlc1snV2Via2l0JyArIHN0eWxlUHJvcF0gPSAnd2Via2l0JyArIGV2ZW50TmFtZTtcbiAgcHJlZml4ZXNbJ01veicgKyBzdHlsZVByb3BdID0gJ21veicgKyBldmVudE5hbWU7XG4gIHJldHVybiBwcmVmaXhlcztcbn1cbi8qKlxuICogQSBsaXN0IG9mIGV2ZW50IG5hbWVzIHRvIGEgY29uZmlndXJhYmxlIGxpc3Qgb2YgdmVuZG9yIHByZWZpeGVzLlxuICovXG5cblxudmFyIHZlbmRvclByZWZpeGVzID0ge1xuICBhbmltYXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ0FuaW1hdGlvbicsICdBbmltYXRpb25FbmQnKSxcbiAgYW5pbWF0aW9uaXRlcmF0aW9uOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uSXRlcmF0aW9uJyksXG4gIGFuaW1hdGlvbnN0YXJ0OiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uU3RhcnQnKSxcbiAgdHJhbnNpdGlvbmVuZDogbWFrZVByZWZpeE1hcCgnVHJhbnNpdGlvbicsICdUcmFuc2l0aW9uRW5kJylcbn07XG4vKipcbiAqIEV2ZW50IG5hbWVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gZGV0ZWN0ZWQgYW5kIHByZWZpeGVkIChpZiBhcHBsaWNhYmxlKS5cbiAqL1xuXG52YXIgcHJlZml4ZWRFdmVudE5hbWVzID0ge307XG4vKipcbiAqIEVsZW1lbnQgdG8gY2hlY2sgZm9yIHByZWZpeGVzIG9uLlxuICovXG5cbnZhciBzdHlsZSA9IHt9O1xuLyoqXG4gKiBCb290c3RyYXAgaWYgYSBET00gZXhpc3RzLlxuICovXG5cbmlmIChjYW5Vc2VET00pIHtcbiAgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKS5zdHlsZTsgLy8gT24gc29tZSBwbGF0Zm9ybXMsIGluIHBhcnRpY3VsYXIgc29tZSByZWxlYXNlcyBvZiBBbmRyb2lkIDQueCxcbiAgLy8gdGhlIHVuLXByZWZpeGVkIFwiYW5pbWF0aW9uXCIgYW5kIFwidHJhbnNpdGlvblwiIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgb24gdGhlXG4gIC8vIHN0eWxlIG9iamVjdCBidXQgdGhlIGV2ZW50cyB0aGF0IGZpcmUgd2lsbCBzdGlsbCBiZSBwcmVmaXhlZCwgc28gd2UgbmVlZFxuICAvLyB0byBjaGVjayBpZiB0aGUgdW4tcHJlZml4ZWQgZXZlbnRzIGFyZSB1c2FibGUsIGFuZCBpZiBub3QgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgbWFwLlxuXG4gIGlmICghKCdBbmltYXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25lbmQuYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25pdGVyYXRpb24uYW5pbWF0aW9uO1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy5hbmltYXRpb25zdGFydC5hbmltYXRpb247XG4gIH0gLy8gU2FtZSBhcyBhYm92ZVxuXG5cbiAgaWYgKCEoJ1RyYW5zaXRpb25FdmVudCcgaW4gd2luZG93KSkge1xuICAgIGRlbGV0ZSB2ZW5kb3JQcmVmaXhlcy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb247XG4gIH1cbn1cbi8qKlxuICogQXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHZlbmRvciBwcmVmaXhlZCBldmVudCBuYW1lLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZShldmVudE5hbWUpIHtcbiAgaWYgKHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdO1xuICB9IGVsc2UgaWYgKCF2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdKSB7XG4gICAgcmV0dXJuIGV2ZW50TmFtZTtcbiAgfVxuXG4gIHZhciBwcmVmaXhNYXAgPSB2ZW5kb3JQcmVmaXhlc1tldmVudE5hbWVdO1xuXG4gIGZvciAodmFyIHN0eWxlUHJvcCBpbiBwcmVmaXhNYXApIHtcbiAgICBpZiAocHJlZml4TWFwLmhhc093blByb3BlcnR5KHN0eWxlUHJvcCkgJiYgc3R5bGVQcm9wIGluIHN0eWxlKSB7XG4gICAgICByZXR1cm4gcHJlZml4ZWRFdmVudE5hbWVzW2V2ZW50TmFtZV0gPSBwcmVmaXhNYXBbc3R5bGVQcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXZlbnROYW1lO1xufVxuXG52YXIgQU5JTUFUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25lbmQnKTtcbnZhciBBTklNQVRJT05fSVRFUkFUSU9OID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ2FuaW1hdGlvbml0ZXJhdGlvbicpO1xudmFyIEFOSU1BVElPTl9TVEFSVCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25zdGFydCcpO1xudmFyIFRSQU5TSVRJT05fRU5EID0gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoJ3RyYW5zaXRpb25lbmQnKTtcblxudmFyIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcCgpO1xudmFyIGV2ZW50UHJpb3JpdGllcyA9IG5ldyBNYXAoKTsgLy8gV2Ugc3RvcmUgbW9zdCBvZiB0aGUgZXZlbnRzIGluIHRoaXMgbW9kdWxlIGluIHBhaXJzIG9mIHR3byBzdHJpbmdzIHNvIHdlIGNhbiByZS11c2Vcbi8vIHRoZSBjb2RlIHJlcXVpcmVkIHRvIGFwcGx5IHRoZSBzYW1lIGxvZ2ljIGZvciBldmVudCBwcmlvcml0aXphdGlvbiBhbmQgdGhhdCBvZiB0aGVcbi8vIFNpbXBsZUV2ZW50UGx1Z2luLiBUaGlzIGNvbXBsaWNhdGVzIHRoaW5ncyBzbGlnaHRseSwgYnV0IHRoZSBhaW0gaXMgdG8gcmVkdWNlIGNvZGVcbi8vIGR1cGxpY2F0aW9uIChmb3Igd2hpY2ggdGhlcmUgd291bGQgYmUgcXVpdGUgYSBiaXQpLiBGb3IgdGhlIGV2ZW50cyB0aGF0IGFyZSBub3QgbmVlZGVkXG4vLyBmb3IgdGhlIFNpbXBsZUV2ZW50UGx1Z2luIChvdGhlckRpc2NyZXRlRXZlbnRzKSB3ZSBwcm9jZXNzIHRoZW0gc2VwYXJhdGVseSBhcyBhblxuLy8gYXJyYXkgb2YgdG9wIGxldmVsIGV2ZW50cy5cbi8vIExhc3RseSwgd2UgaWdub3JlIHByZXR0aWVyIHNvIHdlIGNhbiBrZWVwIHRoZSBmb3JtYXR0aW5nIHNhbmUuXG4vLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydjYW5jZWwnLCAnY2FuY2VsJywgJ2NsaWNrJywgJ2NsaWNrJywgJ2Nsb3NlJywgJ2Nsb3NlJywgJ2NvbnRleHRtZW51JywgJ2NvbnRleHRNZW51JywgJ2NvcHknLCAnY29weScsICdjdXQnLCAnY3V0JywgJ2F1eGNsaWNrJywgJ2F1eENsaWNrJywgJ2RibGNsaWNrJywgJ2RvdWJsZUNsaWNrJywgLy8gQ2FyZWZ1bCFcbidkcmFnZW5kJywgJ2RyYWdFbmQnLCAnZHJhZ3N0YXJ0JywgJ2RyYWdTdGFydCcsICdkcm9wJywgJ2Ryb3AnLCAnZm9jdXNpbicsICdmb2N1cycsIC8vIENhcmVmdWwhXG4nZm9jdXNvdXQnLCAnYmx1cicsIC8vIENhcmVmdWwhXG4naW5wdXQnLCAnaW5wdXQnLCAnaW52YWxpZCcsICdpbnZhbGlkJywgJ2tleWRvd24nLCAna2V5RG93bicsICdrZXlwcmVzcycsICdrZXlQcmVzcycsICdrZXl1cCcsICdrZXlVcCcsICdtb3VzZWRvd24nLCAnbW91c2VEb3duJywgJ21vdXNldXAnLCAnbW91c2VVcCcsICdwYXN0ZScsICdwYXN0ZScsICdwYXVzZScsICdwYXVzZScsICdwbGF5JywgJ3BsYXknLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyQ2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJEb3duJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVyVXAnLCAncmF0ZWNoYW5nZScsICdyYXRlQ2hhbmdlJywgJ3Jlc2V0JywgJ3Jlc2V0JywgJ3NlZWtlZCcsICdzZWVrZWQnLCAnc3VibWl0JywgJ3N1Ym1pdCcsICd0b3VjaGNhbmNlbCcsICd0b3VjaENhbmNlbCcsICd0b3VjaGVuZCcsICd0b3VjaEVuZCcsICd0b3VjaHN0YXJ0JywgJ3RvdWNoU3RhcnQnLCAndm9sdW1lY2hhbmdlJywgJ3ZvbHVtZUNoYW5nZSddO1xudmFyIG90aGVyRGlzY3JldGVFdmVudHMgPSBbJ2NoYW5nZScsICdzZWxlY3Rpb25jaGFuZ2UnLCAndGV4dElucHV0JywgJ2NvbXBvc2l0aW9uc3RhcnQnLCAnY29tcG9zaXRpb25lbmQnLCAnY29tcG9zaXRpb251cGRhdGUnXTtcblxuXG52YXIgdXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnZHJhZycsICdkcmFnJywgJ2RyYWdlbnRlcicsICdkcmFnRW50ZXInLCAnZHJhZ2V4aXQnLCAnZHJhZ0V4aXQnLCAnZHJhZ2xlYXZlJywgJ2RyYWdMZWF2ZScsICdkcmFnb3ZlcicsICdkcmFnT3ZlcicsICdtb3VzZW1vdmUnLCAnbW91c2VNb3ZlJywgJ21vdXNlb3V0JywgJ21vdXNlT3V0JywgJ21vdXNlb3ZlcicsICdtb3VzZU92ZXInLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlck1vdmUnLCAncG9pbnRlcm91dCcsICdwb2ludGVyT3V0JywgJ3BvaW50ZXJvdmVyJywgJ3BvaW50ZXJPdmVyJywgJ3Njcm9sbCcsICdzY3JvbGwnLCAndG9nZ2xlJywgJ3RvZ2dsZScsICd0b3VjaG1vdmUnLCAndG91Y2hNb3ZlJywgJ3doZWVsJywgJ3doZWVsJ107IC8vIHByZXR0aWVyLWlnbm9yZVxuXG52YXIgY29udGludW91c1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2Fib3J0JywgJ2Fib3J0JywgQU5JTUFUSU9OX0VORCwgJ2FuaW1hdGlvbkVuZCcsIEFOSU1BVElPTl9JVEVSQVRJT04sICdhbmltYXRpb25JdGVyYXRpb24nLCBBTklNQVRJT05fU1RBUlQsICdhbmltYXRpb25TdGFydCcsICdjYW5wbGF5JywgJ2NhblBsYXknLCAnY2FucGxheXRocm91Z2gnLCAnY2FuUGxheVRocm91Z2gnLCAnZHVyYXRpb25jaGFuZ2UnLCAnZHVyYXRpb25DaGFuZ2UnLCAnZW1wdGllZCcsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmNyeXB0ZWQnLCAnZW5kZWQnLCAnZW5kZWQnLCAnZXJyb3InLCAnZXJyb3InLCAnZ290cG9pbnRlcmNhcHR1cmUnLCAnZ290UG9pbnRlckNhcHR1cmUnLCAnbG9hZCcsICdsb2FkJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkRGF0YScsICdsb2FkZWRtZXRhZGF0YScsICdsb2FkZWRNZXRhZGF0YScsICdsb2Fkc3RhcnQnLCAnbG9hZFN0YXJ0JywgJ2xvc3Rwb2ludGVyY2FwdHVyZScsICdsb3N0UG9pbnRlckNhcHR1cmUnLCAncGxheWluZycsICdwbGF5aW5nJywgJ3Byb2dyZXNzJywgJ3Byb2dyZXNzJywgJ3NlZWtpbmcnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICdzdXNwZW5kJywgJ3RpbWV1cGRhdGUnLCAndGltZVVwZGF0ZScsIFRSQU5TSVRJT05fRU5ELCAndHJhbnNpdGlvbkVuZCcsICd3YWl0aW5nJywgJ3dhaXRpbmcnXTtcbi8qKlxuICogVHVybnNcbiAqIFsnYWJvcnQnLCAuLi5dXG4gKlxuICogaW50b1xuICpcbiAqIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzID0gbmV3IE1hcChbXG4gKiAgIFsnYWJvcnQnLCAnb25BYm9ydCddLFxuICogXSk7XG4gKlxuICogYW5kIHJlZ2lzdGVycyB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIC8vIEFzIHRoZSBldmVudCB0eXBlcyBhcmUgaW4gcGFpcnMgb2YgdHdvLCB3ZSBuZWVkIHRvIGl0ZXJhdGVcbiAgLy8gdGhyb3VnaCBpbiB0d29zLiBUaGUgZXZlbnRzIGFyZSBpbiBwYWlycyBvZiB0d28gdG8gc2F2ZSBjb2RlXG4gIC8vIGFuZCBpbXByb3ZlIGluaXQgcGVyZiBvZiBwcm9jZXNzaW5nIHRoaXMgYXJyYXksIGFzIGl0IHdpbGxcbiAgLy8gcmVzdWx0IGluIGZhciBmZXdlciBvYmplY3QgYWxsb2NhdGlvbnMgYW5kIHByb3BlcnR5IGFjY2Vzc2VzXG4gIC8vIGlmIHdlIG9ubHkgdXNlIHRocmVlIGFycmF5cyB0byBwcm9jZXNzIGFsbCB0aGUgY2F0ZWdvcmllcyBvZlxuICAvLyBpbnN0ZWFkIG9mIHR1cGxlcy5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHRvcEV2ZW50ID0gZXZlbnRUeXBlc1tpXTtcbiAgICB2YXIgZXZlbnQgPSBldmVudFR5cGVzW2kgKyAxXTtcbiAgICB2YXIgY2FwaXRhbGl6ZWRFdmVudCA9IGV2ZW50WzBdLnRvVXBwZXJDYXNlKCkgKyBldmVudC5zbGljZSgxKTtcbiAgICB2YXIgcmVhY3ROYW1lID0gJ29uJyArIGNhcGl0YWxpemVkRXZlbnQ7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldCh0b3BFdmVudCwgcHJpb3JpdHkpO1xuICAgIHRvcExldmVsRXZlbnRzVG9SZWFjdE5hbWVzLnNldCh0b3BFdmVudCwgcmVhY3ROYW1lKTtcbiAgICByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVhY3ROYW1lLCBbdG9wRXZlbnRdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRFdmVudFByaW9yaXRpZXMoZXZlbnRUeXBlcywgcHJpb3JpdHkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBldmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZXZlbnRQcmlvcml0aWVzLnNldChldmVudFR5cGVzW2ldLCBwcmlvcml0eSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpIHtcbiAgdmFyIHByaW9yaXR5ID0gZXZlbnRQcmlvcml0aWVzLmdldChkb21FdmVudE5hbWUpOyAvLyBEZWZhdWx0IHRvIGEgQ29udGludW91c0V2ZW50LiBOb3RlOiB3ZSBtaWdodFxuICAvLyB3YW50IHRvIHdhcm4gaWYgd2UgY2FuJ3QgZGV0ZWN0IHRoZSBwcmlvcml0eVxuICAvLyBmb3IgdGhlIGV2ZW50LlxuXG4gIHJldHVybiBwcmlvcml0eSA9PT0gdW5kZWZpbmVkID8gQ29udGludW91c0V2ZW50IDogcHJpb3JpdHk7XG59XG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZUV2ZW50cygpIHtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXMoZGlzY3JldGVFdmVudFBhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4sIERpc2NyZXRlRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyh1c2VyQmxvY2tpbmdQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBVc2VyQmxvY2tpbmdFdmVudCk7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBDb250aW51b3VzRXZlbnQpO1xuICBzZXRFdmVudFByaW9yaXRpZXMob3RoZXJEaXNjcmV0ZUV2ZW50cywgRGlzY3JldGVFdmVudCk7XG59XG5cbnZhciBTY2hlZHVsZXJfbm93ID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcblxue1xuICAvLyBQcm92aWRlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiBwcm9kdWN0aW9uK3Byb2ZpbGluZyBidW5kbGUgb2YgZS5nLlxuICAvLyByZWFjdC1kb20gaXMgdXNlZCB3aXRoIHByb2R1Y3Rpb24gKG5vbi1wcm9maWxpbmcpIGJ1bmRsZSBvZlxuICAvLyBzY2hlZHVsZXIvdHJhY2luZ1xuICBpZiAoISh0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmICE9IG51bGwgJiYgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ICE9IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSXQgaXMgbm90IHN1cHBvcnRlZCB0byBydW4gdGhlIHByb2ZpbGluZyB2ZXJzaW9uIG9mIGEgcmVuZGVyZXIgKGZvciBleGFtcGxlLCBgcmVhY3QtZG9tL3Byb2ZpbGluZ2ApIHdpdGhvdXQgYWxzbyByZXBsYWNpbmcgdGhlIGBzY2hlZHVsZXIvdHJhY2luZ2AgbW9kdWxlIHdpdGggYHNjaGVkdWxlci90cmFjaW5nLXByb2ZpbGluZ2AuIFlvdXIgYnVuZGxlciBtaWdodCBoYXZlIGEgc2V0dGluZyBmb3IgYWxpYXNpbmcgYm90aCBtb2R1bGVzLiBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9wcm9maWxpbmdcIiApO1xuICAgIH1cbiAgfVxufVxuLy8gYXNjZW5kaW5nIG51bWJlcnMgc28gd2UgY2FuIGNvbXBhcmUgdGhlbSBsaWtlIG51bWJlcnMuIFRoZXkgc3RhcnQgYXQgOTAgdG9cbi8vIGF2b2lkIGNsYXNoaW5nIHdpdGggU2NoZWR1bGVyJ3MgcHJpb3JpdGllcy5cblxudmFyIEltbWVkaWF0ZVByaW9yaXR5ID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDk3O1xudmFyIExvd1ByaW9yaXR5ID0gOTY7XG52YXIgSWRsZVByaW9yaXR5ID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkgPSA5MDtcbnZhciBpbml0aWFsVGltZU1zID0gU2NoZWR1bGVyX25vdygpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuXG52YXIgU3luY0xhbmVQcmlvcml0eSA9IDE1O1xudmFyIFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5ID0gMTQ7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDEzO1xudmFyIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHkgPSAxMjtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMTtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkgPSAxMDtcbnZhciBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gOTtcbnZhciBEZWZhdWx0TGFuZVByaW9yaXR5ID0gODtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHkgPSA3O1xudmFyIFRyYW5zaXRpb25Qcmlvcml0eSA9IDY7XG52YXIgUmV0cnlMYW5lUHJpb3JpdHkgPSA1O1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDQ7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDM7XG52YXIgSWRsZUxhbmVQcmlvcml0eSA9IDI7XG52YXIgT2Zmc2NyZWVuTGFuZVByaW9yaXR5ID0gMTtcbnZhciBOb0xhbmVQcmlvcml0eSA9IDA7XG52YXIgVG90YWxMYW5lcyA9IDMxO1xudmFyIE5vTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBOb0xhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4wO1xudmFyIFN5bmNMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgU3luY0JhdGNoZWRMYW5lID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICovXG40O1xudmFyIElucHV0RGlzY3JldGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI0O1xudmFyIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICovXG4zMjtcbnZhciBJbnB1dENvbnRpbnVvdXNMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICovXG4xOTI7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAqL1xuMjU2O1xudmFyIERlZmF1bHRMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMzU4NDtcbnZhciBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAqL1xuNDA5NjtcbnZhciBUcmFuc2l0aW9uTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG40MTg2MTEyO1xudmFyIFJldHJ5TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjYyOTE0NTYwO1xudmFyIFNvbWVSZXRyeUxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMzM1NTQ0MzI7XG52YXIgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAqL1xuNjcxMDg4NjQ7XG52YXIgTm9uSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjEzNDIxNzcyNztcbnZhciBJZGxlSHlkcmF0aW9uTGFuZSA9XG4vKiAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjg7XG52YXIgSWRsZUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuODA1MzA2MzY4O1xudmFyIE9mZnNjcmVlbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjEwNzM3NDE4MjQ7XG52YXIgTm9UaW1lc3RhbXAgPSAtMTtcbmZ1bmN0aW9uIHNldEN1cnJlbnRVcGRhdGVMYW5lUHJpb3JpdHkobmV3TGFuZVByaW9yaXR5KSB7XG59IC8vIFwiUmVnaXN0ZXJzXCIgdXNlZCB0byBcInJldHVyblwiIG11bHRpcGxlIHZhbHVlc1xuLy8gVXNlZCBieSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyBhbmQgZ2V0TmV4dExhbmVzOlxuXG52YXIgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG5mdW5jdGlvbiBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhsYW5lcykge1xuICBpZiAoKFN5bmNMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfVxuXG4gIGlmICgoU3luY0JhdGNoZWRMYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuICB9XG5cbiAgaWYgKChJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXREaXNjcmV0ZUxhbmVzID0gSW5wdXREaXNjcmV0ZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlucHV0RGlzY3JldGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXREaXNjcmV0ZUxhbmVzO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0Q29udGludW91c0h5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaW5wdXRDb250aW51b3VzTGFuZXMgPSBJbnB1dENvbnRpbnVvdXNMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dENvbnRpbnVvdXNMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpbnB1dENvbnRpbnVvdXNMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBEZWZhdWx0SHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIERlZmF1bHRIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGRlZmF1bHRMYW5lcyA9IERlZmF1bHRMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChkZWZhdWx0TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGRlZmF1bHRMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBUcmFuc2l0aW9uSHlkcmF0aW9uTGFuZSkgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgdHJhbnNpdGlvbkxhbmVzID0gVHJhbnNpdGlvbkxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHRyYW5zaXRpb25MYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gVHJhbnNpdGlvblByaW9yaXR5O1xuICAgIHJldHVybiB0cmFuc2l0aW9uTGFuZXM7XG4gIH1cblxuICB2YXIgcmV0cnlMYW5lcyA9IFJldHJ5TGFuZXMgJiBsYW5lcztcblxuICBpZiAocmV0cnlMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gUmV0cnlMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIHJldHJ5TGFuZXM7XG4gIH1cblxuICBpZiAobGFuZXMgJiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgSWRsZUh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJZGxlSHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBpZGxlTGFuZXMgPSBJZGxlTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaWRsZUxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBJZGxlTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBpZGxlTGFuZXM7XG4gIH1cblxuICBpZiAoKE9mZnNjcmVlbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE9mZnNjcmVlbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gT2Zmc2NyZWVuTGFuZTtcbiAgfVxuXG4gIHtcbiAgICBlcnJvcignU2hvdWxkIGhhdmUgZm91bmQgbWF0Y2hpbmcgbGFuZXMuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gIH0gLy8gVGhpcyBzaG91bGRuJ3QgYmUgcmVhY2hhYmxlLCBidXQgYXMgYSBmYWxsYmFjaywgcmV0dXJuIHRoZSBlbnRpcmUgYml0bWFzay5cblxuXG4gIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcbiAgcmV0dXJuIGxhbmVzO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICAvLyBUT0RPOiBIYW5kbGUgTG93U2NoZWR1bGVyUHJpb3JpdHksIHNvbWVob3cuIE1heWJlIHRoZSBzYW1lIGxhbmUgYXMgaHlkcmF0aW9uLlxuICAgICAgcmV0dXJuIERlZmF1bHRMYW5lUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlTGFuZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBOb0xhbmVQcmlvcml0eTtcbiAgfVxufVxuZnVuY3Rpb24gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShsYW5lUHJpb3JpdHkpIHtcbiAgc3dpdGNoIChsYW5lUHJpb3JpdHkpIHtcbiAgICBjYXNlIFN5bmNMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIERlZmF1bHRIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5OlxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OlxuICAgIGNhc2UgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgT2Zmc2NyZWVuTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eTtcblxuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9Qcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuZnVuY3Rpb24gZ2V0TmV4dExhbmVzKHJvb3QsIHdpcExhbmVzKSB7XG4gIC8vIEVhcmx5IGJhaWxvdXQgaWYgdGhlcmUncyBubyBwZW5kaW5nIHdvcmsgbGVmdC5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuXG4gIGlmIChwZW5kaW5nTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBOb0xhbmVzO1xuICB9XG5cbiAgdmFyIG5leHRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciBuZXh0TGFuZVByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHZhciBleHBpcmVkTGFuZXMgPSByb290LmV4cGlyZWRMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lczsgLy8gQ2hlY2sgaWYgYW55IHdvcmsgaGFzIGV4cGlyZWQuXG5cbiAgaWYgKGV4cGlyZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIG5leHRMYW5lcyA9IGV4cGlyZWRMYW5lcztcbiAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBTeW5jTGFuZVByaW9yaXR5O1xuICB9IGVsc2Uge1xuICAgIC8vIERvIG5vdCB3b3JrIG9uIGFueSBpZGxlIHdvcmsgdW50aWwgYWxsIHRoZSBub24taWRsZSB3b3JrIGhhcyBmaW5pc2hlZCxcbiAgICAvLyBldmVuIGlmIHRoZSB3b3JrIGlzIHN1c3BlbmRlZC5cbiAgICB2YXIgbm9uSWRsZVBlbmRpbmdMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIE5vbklkbGVMYW5lcztcblxuICAgIGlmIChub25JZGxlUGVuZGluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICB2YXIgbm9uSWRsZVVuYmxvY2tlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKG5vbklkbGVVbmJsb2NrZWRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlVW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9uSWRsZVBpbmdlZExhbmVzID0gbm9uSWRsZVBlbmRpbmdMYW5lcyAmIHBpbmdlZExhbmVzO1xuXG4gICAgICAgIGlmIChub25JZGxlUGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhub25JZGxlUGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgb25seSByZW1haW5pbmcgd29yayBpcyBJZGxlLlxuICAgICAgdmFyIHVuYmxvY2tlZExhbmVzID0gcGVuZGluZ0xhbmVzICYgfnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICBpZiAodW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXModW5ibG9ja2VkTGFuZXMpO1xuICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocGluZ2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgICBuZXh0TGFuZXMgPSBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyhwaW5nZWRMYW5lcyk7XG4gICAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUgcmVhY2hhYmxlIGlmIHdlJ3JlIHN1c3BlbmRlZFxuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgaW4gdGhpcyBwYXRoIGlmIGEgZmFsbGJhY2sgdGltZXIgaXMgbm90IHNjaGVkdWxlZC5cbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfSAvLyBJZiB0aGVyZSBhcmUgaGlnaGVyIHByaW9yaXR5IGxhbmVzLCB3ZSdsbCBpbmNsdWRlIHRoZW0gZXZlbiBpZiB0aGV5XG4gIC8vIGFyZSBzdXNwZW5kZWQuXG5cblxuICBuZXh0TGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBnZXRFcXVhbE9ySGlnaGVyUHJpb3JpdHlMYW5lcyhuZXh0TGFuZXMpOyAvLyBJZiB3ZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgYSByZW5kZXIsIHN3aXRjaGluZyBsYW5lcyB3aWxsIGludGVycnVwdFxuICAvLyBpdCBhbmQgd2UnbGwgbG9zZSBvdXIgcHJvZ3Jlc3MuIFdlIHNob3VsZCBvbmx5IGRvIHRoaXMgaWYgdGhlIG5ldyBsYW5lcyBhcmVcbiAgLy8gaGlnaGVyIHByaW9yaXR5LlxuXG4gIGlmICh3aXBMYW5lcyAhPT0gTm9MYW5lcyAmJiB3aXBMYW5lcyAhPT0gbmV4dExhbmVzICYmIC8vIElmIHdlIGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgdGhlbiBpbnRlcnJ1cHRpbmcgaXMgZmluZS4gRG9uJ3RcbiAgLy8gYm90aGVyIHdhaXRpbmcgdW50aWwgdGhlIHJvb3QgaXMgY29tcGxldGUuXG4gICh3aXBMYW5lcyAmIHN1c3BlbmRlZExhbmVzKSA9PT0gTm9MYW5lcykge1xuICAgIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHdpcExhbmVzKTtcbiAgICB2YXIgd2lwTGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG5cbiAgICBpZiAobmV4dExhbmVQcmlvcml0eSA8PSB3aXBMYW5lUHJpb3JpdHkpIHtcbiAgICAgIHJldHVybiB3aXBMYW5lcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBuZXh0TGFuZVByaW9yaXR5O1xuICAgIH1cbiAgfSAvLyBDaGVjayBmb3IgZW50YW5nbGVkIGxhbmVzIGFuZCBhZGQgdGhlbSB0byB0aGUgYmF0Y2guXG4gIC8vXG4gIC8vIEEgbGFuZSBpcyBzYWlkIHRvIGJlIGVudGFuZ2xlZCB3aXRoIGFub3RoZXIgd2hlbiBpdCdzIG5vdCBhbGxvd2VkIHRvIHJlbmRlclxuICAvLyBpbiBhIGJhdGNoIHRoYXQgZG9lcyBub3QgYWxzbyBpbmNsdWRlIHRoZSBvdGhlciBsYW5lLiBUeXBpY2FsbHkgd2UgZG8gdGhpc1xuICAvLyB3aGVuIG11bHRpcGxlIHVwZGF0ZXMgaGF2ZSB0aGUgc2FtZSBzb3VyY2UsIGFuZCB3ZSBvbmx5IHdhbnQgdG8gcmVzcG9uZCB0b1xuICAvLyB0aGUgbW9zdCByZWNlbnQgZXZlbnQgZnJvbSB0aGF0IHNvdXJjZS5cbiAgLy9cbiAgLy8gTm90ZSB0aGF0IHdlIGFwcGx5IGVudGFuZ2xlbWVudHMgKmFmdGVyKiBjaGVja2luZyBmb3IgcGFydGlhbCB3b3JrIGFib3ZlLlxuICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgYSBsYW5lIGlzIGVudGFuZ2xlZCBkdXJpbmcgYW4gaW50ZXJsZWF2ZWQgZXZlbnQgd2hpbGVcbiAgLy8gaXQncyBhbHJlYWR5IHJlbmRlcmluZywgd2Ugd29uJ3QgaW50ZXJydXB0IGl0LiBUaGlzIGlzIGludGVudGlvbmFsLCBzaW5jZVxuICAvLyBlbnRhbmdsZW1lbnQgaXMgdXN1YWxseSBcImJlc3QgZWZmb3J0XCI6IHdlJ2xsIHRyeSBvdXIgYmVzdCB0byByZW5kZXIgdGhlXG4gIC8vIGxhbmVzIGluIHRoZSBzYW1lIGJhdGNoLCBidXQgaXQncyBub3Qgd29ydGggdGhyb3dpbmcgb3V0IHBhcnRpYWxseVxuICAvLyBjb21wbGV0ZWQgd29yayBpbiBvcmRlciB0byBkbyBpdC5cbiAgLy9cbiAgLy8gRm9yIHRob3NlIGV4Y2VwdGlvbnMgd2hlcmUgZW50YW5nbGVtZW50IGlzIHNlbWFudGljYWxseSBpbXBvcnRhbnQsIGxpa2VcbiAgLy8gdXNlTXV0YWJsZVNvdXJjZSwgd2Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHBhcnRpYWwgd29yayBhdCB0aGVcbiAgLy8gdGltZSB3ZSBhcHBseSB0aGUgZW50YW5nbGVtZW50LlxuXG5cbiAgdmFyIGVudGFuZ2xlZExhbmVzID0gcm9vdC5lbnRhbmdsZWRMYW5lcztcblxuICBpZiAoZW50YW5nbGVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgICB2YXIgbGFuZXMgPSBuZXh0TGFuZXMgJiBlbnRhbmdsZWRMYW5lcztcblxuICAgIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgICAgbmV4dExhbmVzIHw9IGVudGFuZ2xlbWVudHNbaW5kZXhdO1xuICAgICAgbGFuZXMgJj0gfmxhbmU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5leHRMYW5lcztcbn1cbmZ1bmN0aW9uIGdldE1vc3RSZWNlbnRFdmVudFRpbWUocm9vdCwgbGFuZXMpIHtcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXZlbnRUaW1lID0gZXZlbnRUaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXZlbnRUaW1lID4gbW9zdFJlY2VudEV2ZW50VGltZSkge1xuICAgICAgbW9zdFJlY2VudEV2ZW50VGltZSA9IGV2ZW50VGltZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxuXG4gIHJldHVybiBtb3N0UmVjZW50RXZlbnRUaW1lO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogRXhwaXJhdGlvbiBoZXVyaXN0aWMgaXMgY29uc3RhbnQgcGVyIGxhbmUsIHNvIGNvdWxkIHVzZSBhIG1hcC5cbiAgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZSk7XG4gIHZhciBwcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gIGlmIChwcmlvcml0eSA+PSBJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHkpIHtcbiAgICAvLyBVc2VyIGludGVyYWN0aW9ucyBzaG91bGQgZXhwaXJlIHNsaWdodGx5IG1vcmUgcXVpY2tseS5cbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgaXMgc2V0IHRvIHRoZSBjb3JyZXNwb25kaW5nIGNvbnN0YW50IGFzIGluIFNjaGVkdWxlci5qcy4gV2hlblxuICAgIC8vIHdlIG1hZGUgaXQgbGFyZ2VyLCBhIHByb2R1Y3QgbWV0cmljIGluIHd3dyByZWdyZXNzZWQsIHN1Z2dlc3RpbmcgdGhlcmUnc1xuICAgIC8vIGEgdXNlciBpbnRlcmFjdGlvbiB0aGF0J3MgYmVpbmcgc3RhcnZlZCBieSBhIHNlcmllcyBvZiBzeW5jaHJvbm91c1xuICAgIC8vIHVwZGF0ZXMuIElmIHRoYXQgdGhlb3J5IGlzIGNvcnJlY3QsIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZVxuICAgIC8vIHN0YXJ2YXRpb24uIEhvd2V2ZXIsIHRoaXMgc2NlbmFyaW8gc3VwcG9ydHMgdGhlIGlkZWEgdGhhdCBleHBpcmF0aW9uXG4gICAgLy8gdGltZXMgYXJlIGFuIGltcG9ydGFudCBzYWZlZ3VhcmQgd2hlbiBzdGFydmF0aW9uIGRvZXMgaGFwcGVuLlxuICAgIC8vXG4gICAgLy8gQWxzbyBub3RlIHRoYXQsIGluIHRoZSBjYXNlIG9mIHVzZXIgaW5wdXQgc3BlY2lmaWNhbGx5LCB0aGlzIHdpbGwgc29vbiBub1xuICAgIC8vIGxvbmdlciBiZSBhbiBpc3N1ZSBiZWNhdXNlIHdlIHBsYW4gdG8gbWFrZSB1c2VyIGlucHV0IHN5bmNocm9ub3VzIGJ5XG4gICAgLy8gZGVmYXVsdCAodW50aWwgeW91IGVudGVyIGBzdGFydFRyYW5zaXRpb25gLCBvZiBjb3Vyc2UuKVxuICAgIC8vXG4gICAgLy8gSWYgd2VyZW4ndCBwbGFubmluZyB0byBtYWtlIHRoZXNlIHVwZGF0ZXMgc3luY2hyb25vdXMgc29vbiBhbnl3YXksIElcbiAgICAvLyB3b3VsZCBwcm9iYWJseSBtYWtlIHRoaXMgbnVtYmVyIGEgY29uZmlndXJhYmxlIHBhcmFtZXRlci5cbiAgICByZXR1cm4gY3VycmVudFRpbWUgKyAyNTA7XG4gIH0gZWxzZSBpZiAocHJpb3JpdHkgPj0gVHJhbnNpdGlvblByaW9yaXR5KSB7XG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgNTAwMDtcbiAgfSBlbHNlIHtcbiAgICAvLyBBbnl0aGluZyBpZGxlIHByaW9yaXR5IG9yIGxvd2VyIHNob3VsZCBuZXZlciBleHBpcmUuXG4gICAgcmV0dXJuIE5vVGltZXN0YW1wO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtTdGFydmVkTGFuZXNBc0V4cGlyZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgLy8gVE9ETzogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSB0aW1lIHdlIHlpZWxkLiBXZSBjYW4gb3B0aW1pemUgYnkgc3RvcmluZ1xuICAvLyB0aGUgZWFybGllc3QgZXhwaXJhdGlvbiB0aW1lIG9uIHRoZSByb290LiBUaGVuIHVzZSB0aGF0IHRvIHF1aWNrbHkgYmFpbCBvdXRcbiAgLy8gb2YgdGhpcyBmdW5jdGlvbi5cbiAgdmFyIHBlbmRpbmdMYW5lcyA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuICB2YXIgcGluZ2VkTGFuZXMgPSByb290LnBpbmdlZExhbmVzO1xuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7IC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgcGVuZGluZyBsYW5lcyBhbmQgY2hlY2sgaWYgd2UndmUgcmVhY2hlZCB0aGVpclxuICAvLyBleHBpcmF0aW9uIHRpbWUuIElmIHNvLCB3ZSdsbCBhc3N1bWUgdGhlIHVwZGF0ZSBpcyBiZWluZyBzdGFydmVkIGFuZCBtYXJrXG4gIC8vIGl0IGFzIGV4cGlyZWQgdG8gZm9yY2UgaXQgdG8gZmluaXNoLlxuXG4gIHZhciBsYW5lcyA9IHBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIHZhciBleHBpcmF0aW9uVGltZSA9IGV4cGlyYXRpb25UaW1lc1tpbmRleF07XG5cbiAgICBpZiAoZXhwaXJhdGlvblRpbWUgPT09IE5vVGltZXN0YW1wKSB7XG4gICAgICAvLyBGb3VuZCBhIHBlbmRpbmcgbGFuZSB3aXRoIG5vIGV4cGlyYXRpb24gdGltZS4gSWYgaXQncyBub3Qgc3VzcGVuZGVkLCBvclxuICAgICAgLy8gaWYgaXQncyBwaW5nZWQsIGFzc3VtZSBpdCdzIENQVS1ib3VuZC4gQ29tcHV0ZSBhIG5ldyBleHBpcmF0aW9uIHRpbWVcbiAgICAgIC8vIHVzaW5nIHRoZSBjdXJyZW50IHRpbWUuXG4gICAgICBpZiAoKGxhbmUgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMgfHwgKGxhbmUgJiBwaW5nZWRMYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgLy8gQXNzdW1lcyB0aW1lc3RhbXBzIGFyZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG4gICAgICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBjb21wdXRlRXhwaXJhdGlvblRpbWUobGFuZSwgY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZXhwaXJhdGlvblRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRoaXMgbGFuZSBleHBpcmVkXG4gICAgICByb290LmV4cGlyZWRMYW5lcyB8PSBsYW5lO1xuICAgIH1cblxuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59IC8vIFRoaXMgcmV0dXJucyB0aGUgaGlnaGVzdCBwcmlvcml0eSBwZW5kaW5nIGxhbmVzIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGV5XG5mdW5jdGlvbiBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KSB7XG4gIHZhciBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+T2Zmc2NyZWVuTGFuZTtcblxuICBpZiAoZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybiBldmVyeXRoaW5nQnV0T2Zmc2NyZWVuO1xuICB9XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gJiBPZmZzY3JlZW5MYW5lKSB7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICByZXR1cm4gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCkge1xuICByZXR1cm4gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG59XG5mdW5jdGlvbiBpbmNsdWRlc05vbklkbGVXb3JrKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBOb25JZGxlTGFuZXMpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgUmV0cnlMYW5lcykgPT09IGxhbmVzO1xufVxuZnVuY3Rpb24gaW5jbHVkZXNPbmx5VHJhbnNpdGlvbnMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFRyYW5zaXRpb25MYW5lcykgPT09IGxhbmVzO1xufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBhIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVXBkYXRlTGFuZShsYW5lUHJpb3JpdHksIHdpcExhbmVzKSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBOb0xhbmVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFN5bmNMYW5lO1xuXG4gICAgY2FzZSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jQmF0Y2hlZExhbmU7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0RGlzY3JldGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgaWYgKF9sYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShJbnB1dENvbnRpbnVvdXNMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUyID0gcGlja0FyYml0cmFyeUxhbmUoSW5wdXRDb250aW51b3VzTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTIgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIFNoaWZ0IHRvIHRoZSBuZXh0IHByaW9yaXR5IGxldmVsXG4gICAgICAgICAgcmV0dXJuIGZpbmRVcGRhdGVMYW5lKERlZmF1bHRMYW5lUHJpb3JpdHksIHdpcExhbmVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTI7XG4gICAgICB9XG5cbiAgICBjYXNlIERlZmF1bHRMYW5lUHJpb3JpdHk6XG4gICAgICB7XG4gICAgICAgIHZhciBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZTMgPT09IE5vTGFuZSkge1xuICAgICAgICAgIC8vIElmIGFsbCB0aGUgZGVmYXVsdCBsYW5lcyBhcmUgYWxyZWFkeSBiZWluZyB3b3JrZWQgb24sIGxvb2sgZm9yIGFcbiAgICAgICAgICAvLyBsYW5lIGluIHRoZSB0cmFuc2l0aW9uIHJhbmdlLlxuICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAgIC8vIEFsbCB0aGUgdHJhbnNpdGlvbiBsYW5lcyBhcmUgdGFrZW4sIHRvby4gVGhpcyBzaG91bGQgYmUgdmVyeVxuICAgICAgICAgICAgLy8gcmFyZSwgYnV0IGFzIGEgbGFzdCByZXNvcnQsIHBpY2sgYSBkZWZhdWx0IGxhbmUuIFRoaXMgd2lsbCBoYXZlXG4gICAgICAgICAgICAvLyB0aGUgZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgICAgIF9sYW5lMyA9IHBpY2tBcmJpdHJhcnlMYW5lKERlZmF1bHRMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9sYW5lMztcbiAgICAgIH1cblxuICAgIGNhc2UgVHJhbnNpdGlvblByaW9yaXR5OiAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kVHJhbnNpdGlvbkxhbmUgaW5zdGVhZFxuXG4gICAgY2FzZSBSZXRyeUxhbmVQcmlvcml0eTpcbiAgICAgIC8vIFNob3VsZCBiZSBoYW5kbGVkIGJ5IGZpbmRSZXRyeUxhbmUgaW5zdGVhZFxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVMYW5lUHJpb3JpdHk6XG4gICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICAgIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKElkbGVMYW5lcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYW5lO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgdXBkYXRlIHByaW9yaXR5OiBcIiArIGxhbmVQcmlvcml0eSArIFwiLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgfVxuICB9XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kVHJhbnNpdGlvbkxhbmUod2lwTGFuZXMsIHBlbmRpbmdMYW5lcykge1xuICAvLyBGaXJzdCBsb29rIGZvciBsYW5lcyB0aGF0IGFyZSBjb21wbGV0ZWx5IHVuY2xhaW1lZCwgaS5lLiBoYXZlIG5vXG4gIC8vIHBlbmRpbmcgd29yay5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+cGVuZGluZ0xhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgLy8gSWYgYWxsIGxhbmVzIGhhdmUgcGVuZGluZyB3b3JrLCBsb29rIGZvciBhIGxhbmUgdGhhdCBpc24ndCBjdXJyZW50bHlcbiAgICAvLyBiZWluZyB3b3JrZWQgb24uXG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyAmIH53aXBMYW5lcyk7XG5cbiAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAvLyBJZiBldmVyeXRoaW5nIGlzIGJlaW5nIHdvcmtlZCBvbiwgcGljayBhbnkgbGFuZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHdvcmstaW4tcHJvZ3Jlc3MuXG4gICAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgcHVyZSBmdW5jdGlvbiwgc28gdGhhdCBpdCBhbHdheXMgcmV0dXJucyB0aGUgc2FtZSBsYW5lIGZvciBnaXZlbiBpbnB1dHMuXG5cbmZ1bmN0aW9uIGZpbmRSZXRyeUxhbmUod2lwTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhIGZvcmsgb2YgYGZpbmRVcGRhdGVMYW5lYCBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgZm9yIFN1c3BlbnNlXG4gIC8vIFwicmV0cmllc1wiIOKAlCBhIHNwZWNpYWwgdXBkYXRlIHRoYXQgYXR0ZW1wdHMgdG8gZmxpcCBhIFN1c3BlbnNlIGJvdW5kYXJ5XG4gIC8vIGZyb20gaXRzIHBsYWNlaG9sZGVyIHN0YXRlIHRvIGl0cyBwcmltYXJ5L3Jlc29sdmVkIHN0YXRlLlxuICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gIGlmIChsYW5lID09PSBOb0xhbmUpIHtcbiAgICBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoUmV0cnlMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICByZXR1cm4gbGFuZXMgJiAtbGFuZXM7XG59XG5cbmZ1bmN0aW9uIGdldExvd2VzdFByaW9yaXR5TGFuZShsYW5lcykge1xuICAvLyBUaGlzIGZpbmRzIHRoZSBtb3N0IHNpZ25pZmljYW50IG5vbi16ZXJvIGJpdC5cbiAgdmFyIGluZGV4ID0gMzEgLSBjbHozMihsYW5lcyk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBOb0xhbmVzIDogMSA8PCBpbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIDw8IDEpIC0gMTtcbn1cblxuZnVuY3Rpb24gcGlja0FyYml0cmFyeUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyB3cmFwcGVyIGZ1bmN0aW9uIGdldHMgaW5saW5lZC4gT25seSBleGlzdHMgc28gdG8gY29tbXVuaWNhdGUgdGhhdCBpdFxuICAvLyBkb2Vzbid0IG1hdHRlciB3aGljaCBiaXQgaXMgc2VsZWN0ZWQ7IHlvdSBjYW4gcGljayBhbnkgYml0IHdpdGhvdXRcbiAgLy8gYWZmZWN0aW5nIHRoZSBhbGdvcml0aG1zIHdoZXJlIGl0cyB1c2VkLiBIZXJlIEknbSB1c2luZ1xuICAvLyBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lIGJlY2F1c2UgaXQgcmVxdWlyZXMgdGhlIGZld2VzdCBvcGVyYXRpb25zLlxuICByZXR1cm4gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZShsYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpIHtcbiAgcmV0dXJuIDMxIC0gY2x6MzIobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBsYW5lVG9JbmRleChsYW5lKSB7XG4gIHJldHVybiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmUpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlc1NvbWVMYW5lKGEsIGIpIHtcbiAgcmV0dXJuIChhICYgYikgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBpc1N1YnNldE9mTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIChzZXQgJiBzdWJzZXQpID09PSBzdWJzZXQ7XG59XG5mdW5jdGlvbiBtZXJnZUxhbmVzKGEsIGIpIHtcbiAgcmV0dXJuIGEgfCBiO1xufVxuZnVuY3Rpb24gcmVtb3ZlTGFuZXMoc2V0LCBzdWJzZXQpIHtcbiAgcmV0dXJuIHNldCAmIH5zdWJzZXQ7XG59IC8vIFNlZW1zIHJlZHVuZGFudCwgYnV0IGl0IGNoYW5nZXMgdGhlIHR5cGUgZnJvbSBhIHNpbmdsZSBsYW5lICh1c2VkIGZvclxuLy8gdXBkYXRlcykgdG8gYSBncm91cCBvZiBsYW5lcyAodXNlZCBmb3IgZmx1c2hpbmcgd29yaykuXG5cbmZ1bmN0aW9uIGxhbmVUb0xhbmVzKGxhbmUpIHtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBoaWdoZXJQcmlvcml0eUxhbmUoYSwgYikge1xuICAvLyBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGJpdCByYW5nZXMgZGVjcmVhc2UgaW4gcHJpb3JpdHkgYXMgeW91IGdvIGxlZnQuXG4gIHJldHVybiBhICE9PSBOb0xhbmUgJiYgYSA8IGIgPyBhIDogYjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhbmVNYXAoaW5pdGlhbCkge1xuICAvLyBJbnRlbnRpb25hbGx5IHB1c2hpbmcgb25lIGJ5IG9uZS5cbiAgLy8gaHR0cHM6Ly92OC5kZXYvYmxvZy9lbGVtZW50cy1raW5kcyNhdm9pZC1jcmVhdGluZy1ob2xlc1xuICB2YXIgbGFuZU1hcCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgVG90YWxMYW5lczsgaSsrKSB7XG4gICAgbGFuZU1hcC5wdXNoKGluaXRpYWwpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmVNYXA7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgdXBkYXRlTGFuZSwgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGVuZGluZ0xhbmVzIHw9IHVwZGF0ZUxhbmU7IC8vIFRPRE86IFRoZW9yZXRpY2FsbHksIGFueSB1cGRhdGUgdG8gYW55IGxhbmUgY2FuIHVuYmxvY2sgYW55IG90aGVyIGxhbmUuIEJ1dFxuICAvLyBpdCdzIG5vdCBwcmFjdGljYWwgdG8gdHJ5IGV2ZXJ5IHNpbmdsZSBwb3NzaWJsZSBjb21iaW5hdGlvbi4gV2UgbmVlZCBhXG4gIC8vIGhldXJpc3RpYyB0byBkZWNpZGUgd2hpY2ggbGFuZXMgdG8gYXR0ZW1wdCB0byByZW5kZXIsIGFuZCBpbiB3aGljaCBiYXRjaGVzLlxuICAvLyBGb3Igbm93LCB3ZSB1c2UgdGhlIHNhbWUgaGV1cmlzdGljIGFzIGluIHRoZSBvbGQgRXhwaXJhdGlvblRpbWVzIG1vZGVsOlxuICAvLyByZXRyeSBhbnkgbGFuZSBhdCBlcXVhbCBvciBsb3dlciBwcmlvcml0eSwgYnV0IGRvbid0IHRyeSB1cGRhdGVzIGF0IGhpZ2hlclxuICAvLyBwcmlvcml0eSB3aXRob3V0IGFsc28gaW5jbHVkaW5nIHRoZSBsb3dlciBwcmlvcml0eSB1cGRhdGVzLiBUaGlzIHdvcmtzIHdlbGxcbiAgLy8gd2hlbiBjb25zaWRlcmluZyB1cGRhdGVzIGFjcm9zcyBkaWZmZXJlbnQgcHJpb3JpdHkgbGV2ZWxzLCBidXQgaXNuJ3RcbiAgLy8gc3VmZmljaWVudCBmb3IgdXBkYXRlcyB3aXRoaW4gdGhlIHNhbWUgcHJpb3JpdHksIHNpbmNlIHdlIHdhbnQgdG8gdHJlYXRcbiAgLy8gdGhvc2UgdXBkYXRlcyBhcyBwYXJhbGxlbC5cbiAgLy8gVW5zdXNwZW5kIGFueSB1cGRhdGUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHkuXG5cbiAgdmFyIGhpZ2hlclByaW9yaXR5TGFuZXMgPSB1cGRhdGVMYW5lIC0gMTsgLy8gVHVybnMgMGIxMDAwIGludG8gMGIwMTExXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IGhpZ2hlclByaW9yaXR5TGFuZXM7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgaW5kZXggPSBsYW5lVG9JbmRleCh1cGRhdGVMYW5lKTsgLy8gV2UgY2FuIGFsd2F5cyBvdmVyd3JpdGUgYW4gZXhpc3RpbmcgdGltZXN0YW1wIGJlY2F1c2Ugd2UgcHJlZmVyIHRoZSBtb3N0XG4gIC8vIHJlY2VudCBldmVudCwgYW5kIHdlIGFzc3VtZSB0aW1lIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZy5cblxuICBldmVudFRpbWVzW2luZGV4XSA9IGV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKSB7XG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgfD0gc3VzcGVuZGVkTGFuZXM7XG4gIHJvb3QucGluZ2VkTGFuZXMgJj0gfnN1c3BlbmRlZExhbmVzOyAvLyBUaGUgc3VzcGVuZGVkIGxhbmVzIGFyZSBubyBsb25nZXIgQ1BVLWJvdW5kLiBDbGVhciB0aGVpciBleHBpcmF0aW9uIHRpbWVzLlxuXG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lcztcbiAgdmFyIGxhbmVzID0gc3VzcGVuZGVkTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290UGluZ2VkKHJvb3QsIHBpbmdlZExhbmVzLCBldmVudFRpbWUpIHtcbiAgcm9vdC5waW5nZWRMYW5lcyB8PSByb290LnN1c3BlbmRlZExhbmVzICYgcGluZ2VkTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KSB7XG4gIHJvb3QuZXhwaXJlZExhbmVzIHw9IElucHV0RGlzY3JldGVMYW5lcyAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gaGFzRGlzY3JldGVMYW5lcyhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgSW5wdXREaXNjcmV0ZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgdXBkYXRlTGFuZSkge1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgfD0gdXBkYXRlTGFuZSAmIHJvb3QucGVuZGluZ0xhbmVzO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcykge1xuICB2YXIgbm9Mb25nZXJQZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcyAmIH5yZW1haW5pbmdMYW5lcztcbiAgcm9vdC5wZW5kaW5nTGFuZXMgPSByZW1haW5pbmdMYW5lczsgLy8gTGV0J3MgdHJ5IGV2ZXJ5dGhpbmcgYWdhaW5cblxuICByb290LnN1c3BlbmRlZExhbmVzID0gMDtcbiAgcm9vdC5waW5nZWRMYW5lcyA9IDA7XG4gIHJvb3QuZXhwaXJlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290Lm11dGFibGVSZWFkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgJj0gcmVtYWluaW5nTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBDbGVhciB0aGUgbGFuZXMgdGhhdCBubyBsb25nZXIgaGF2ZSBwZW5kaW5nIHdvcmtcblxuICB2YXIgbGFuZXMgPSBub0xvbmdlclBlbmRpbmdMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdID0gTm9MYW5lcztcbiAgICBldmVudFRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGV4cGlyYXRpb25UaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya1Jvb3RFbnRhbmdsZWQocm9vdCwgZW50YW5nbGVkTGFuZXMpIHtcbiAgcm9vdC5lbnRhbmdsZWRMYW5lcyB8PSBlbnRhbmdsZWRMYW5lcztcbiAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gIHZhciBsYW5lcyA9IGVudGFuZ2xlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZW50YW5nbGVtZW50c1tpbmRleF0gfD0gZW50YW5nbGVkTGFuZXM7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbnZhciBjbHozMiA9IE1hdGguY2x6MzIgPyBNYXRoLmNsejMyIDogY2x6MzJGYWxsYmFjazsgLy8gQ291bnQgbGVhZGluZyB6ZXJvcy4gT25seSB1c2VkIG9uIGxhbmVzLCBzbyBhc3N1bWUgaW5wdXQgaXMgYW4gaW50ZWdlci5cbi8vIEJhc2VkIG9uOlxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9jbHozMlxuXG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbmZ1bmN0aW9uIGNsejMyRmFsbGJhY2sobGFuZXMpIHtcbiAgaWYgKGxhbmVzID09PSAwKSB7XG4gICAgcmV0dXJuIDMyO1xuICB9XG5cbiAgcmV0dXJuIDMxIC0gKGxvZyhsYW5lcykgLyBMTjIgfCAwKSB8IDA7XG59XG5cbi8vIEludGVudGlvbmFsbHkgbm90IG5hbWVkIGltcG9ydHMgYmVjYXVzZSBSb2xsdXAgd291bGQgdXNlIGR5bmFtaWMgZGlzcGF0Y2ggZm9yXG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5OyAvLyBUT0RPOiBjYW4gd2Ugc3RvcCBleHBvcnRpbmcgdGhlc2U/XG5cbnZhciBfZW5hYmxlZCA9IHRydWU7IC8vIFRoaXMgaXMgZXhwb3J0ZWQgaW4gRkIgYnVpbGRzIGZvciB1c2UgYnkgbGVnYWN5IEZCIGxheWVyIGluZnJhLlxuLy8gV2UnZCBsaWtlIHRvIHJlbW92ZSB0aGlzIGJ1dCBpdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNhZmUuXG5cbmZ1bmN0aW9uIHNldEVuYWJsZWQoZW5hYmxlZCkge1xuICBfZW5hYmxlZCA9ICEhZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGlzRW5hYmxlZCgpIHtcbiAgcmV0dXJuIF9lbmFibGVkO1xufVxuZnVuY3Rpb24gY3JlYXRlRXZlbnRMaXN0ZW5lcldyYXBwZXJXaXRoUHJpb3JpdHkodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGV2ZW50UHJpb3JpdHkgPSBnZXRFdmVudFByaW9yaXR5Rm9yUGx1Z2luU3lzdGVtKGRvbUV2ZW50TmFtZSk7XG4gIHZhciBsaXN0ZW5lcldyYXBwZXI7XG5cbiAgc3dpdGNoIChldmVudFByaW9yaXR5KSB7XG4gICAgY2FzZSBEaXNjcmV0ZUV2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFVzZXJCbG9ja2luZ0V2ZW50OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQ29udGludW91c0V2ZW50OlxuICAgIGRlZmF1bHQ6XG4gICAgICBsaXN0ZW5lcldyYXBwZXIgPSBkaXNwYXRjaEV2ZW50O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJXcmFwcGVyLmJpbmQobnVsbCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaERpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0lmTmVlZGVkKG5hdGl2ZUV2ZW50LnRpbWVTdGFtcCk7XG4gIH1cblxuICBkaXNjcmV0ZVVwZGF0ZXMoZGlzcGF0Y2hFdmVudCwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hVc2VyQmxvY2tpbmdVcGRhdGUoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBjb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkoVXNlckJsb2NraW5nUHJpb3JpdHkkMSwgZGlzcGF0Y2hFdmVudC5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIGlmICghX2VuYWJsZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYWxsb3dSZXBsYXkgPSB0cnVlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiByZXBsYXlpbmcgY2FwdHVyZSBwaGFzZSBldmVudHMgaXMgY3VycmVudGx5IGJyb2tlblxuICAgIC8vIGJlY2F1c2Ugd2UgdXNlZCB0byBkbyBpdCBkdXJpbmcgdG9wLWxldmVsIG5hdGl2ZSBidWJibGUgaGFuZGxlcnNcbiAgICAvLyBidXQgbm93IHdlIHVzZSBkaWZmZXJlbnQgYnViYmxlIGFuZCBjYXB0dXJlIGhhbmRsZXJzLlxuICAgIC8vIEluIGVhZ2VyIG1vZGUsIHdlIGF0dGFjaCBjYXB0dXJlIGxpc3RlbmVycyBlYXJseSwgc28gd2UgbmVlZFxuICAgIC8vIHRvIGZpbHRlciB0aGVtIG91dCB1bnRpbCB3ZSBmaXggdGhlIGxvZ2ljIHRvIGhhbmRsZSB0aGVtIGNvcnJlY3RseS5cbiAgICAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gb3V0c2lkZSB0aGUgZmxhZyBidXQgSSBwdXQgaXQgaW5zaWRlIHRvIHJlZHVjZSByaXNrLlxuICAgIGFsbG93UmVwbGF5ID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSA9PT0gMDtcbiAgfVxuXG4gIGlmIChhbGxvd1JlcGxheSAmJiBoYXNRdWV1ZWREaXNjcmV0ZUV2ZW50cygpICYmIGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIElmIHdlIGFscmVhZHkgaGF2ZSBhIHF1ZXVlIG9mIGRpc2NyZXRlIGV2ZW50cywgYW5kIHRoaXMgaXMgYW5vdGhlciBkaXNjcmV0ZVxuICAgIC8vIGV2ZW50LCB0aGVuIHdlIGNhbid0IGRpc3BhdGNoIGl0IHJlZ2FyZGxlc3Mgb2YgaXRzIHRhcmdldCwgc2luY2UgdGhleVxuICAgIC8vIG5lZWQgdG8gZGlzcGF0Y2ggaW4gb3JkZXIuXG4gICAgcXVldWVEaXNjcmV0ZUV2ZW50KG51bGwsIC8vIEZsYWdzIHRoYXQgd2UncmUgbm90IGFjdHVhbGx5IGJsb2NrZWQgb24gYW55dGhpbmcgYXMgZmFyIGFzIHdlIGtub3cuXG4gICAgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgYmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gIGlmIChibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAvLyBXZSBzdWNjZXNzZnVsbHkgZGlzcGF0Y2hlZCB0aGlzIGV2ZW50LlxuICAgIGlmIChhbGxvd1JlcGxheSkge1xuICAgICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICBpZiAoaXNSZXBsYXlhYmxlRGlzY3JldGVFdmVudChkb21FdmVudE5hbWUpKSB7XG4gICAgICAvLyBUaGlzIHRoaXMgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIgb25jZSB0aGUgdGFyZ2V0IGlzIGF2YWlsYWJsZS5cbiAgICAgIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBuZWVkIHRvIGNsZWFyIG9ubHkgaWYgd2UgZGlkbid0IHF1ZXVlIGJlY2F1c2VcbiAgICAvLyBxdWV1ZWluZyBpcyBhY2N1bW11bGF0aXZlLlxuXG5cbiAgICBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpO1xuICB9IC8vIFRoaXMgaXMgbm90IHJlcGxheWFibGUgc28gd2UnbGwgaW52b2tlIGl0IGJ1dCB3aXRob3V0IGEgdGFyZ2V0LFxuICAvLyBpbiBjYXNlIHRoZSBldmVudCBzeXN0ZW0gbmVlZHMgdG8gdHJhY2UgaXQuXG5cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgbnVsbCwgdGFyZ2V0Q29udGFpbmVyKTtcbn0gLy8gQXR0ZW1wdCBkaXNwYXRjaGluZyBhbiBldmVudC4gUmV0dXJucyBhIFN1c3BlbnNlSW5zdGFuY2Ugb3IgQ29udGFpbmVyIGlmIGl0J3MgYmxvY2tlZC5cblxuZnVuY3Rpb24gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVE9ETzogV2FybiBpZiBfZW5hYmxlZCBpcyBmYWxzZS5cbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgdGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgPT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgdHJlZSBoYXMgYmVlbiB1bm1vdW50ZWQgYWxyZWFkeS4gRGlzcGF0Y2ggd2l0aG91dCBhIHRhcmdldC5cbiAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBRdWV1ZSB0aGUgZXZlbnQgdG8gYmUgcmVwbGF5ZWQgbGF0ZXIuIEFib3J0IGRpc3BhdGNoaW5nIHNpbmNlIHdlXG4gICAgICAgICAgLy8gZG9uJ3Qgd2FudCB0aGlzIGV2ZW50IGRpc3BhdGNoZWQgdHdpY2UgdGhyb3VnaCB0aGUgZXZlbnQgc3lzdGVtLlxuICAgICAgICAgIC8vIFRPRE86IElmIHRoaXMgaXMgdGhlIGZpcnN0IGRpc2NyZXRlIGV2ZW50IGluIHRoZSBxdWV1ZS4gU2NoZWR1bGUgYW4gaW5jcmVhc2VkXG4gICAgICAgICAgLy8gcHJpb3JpdHkgZm9yIHRoaXMgYm91bmRhcnkuXG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9IC8vIFRoaXMgc2hvdWxkbid0IGhhcHBlbiwgc29tZXRoaW5nIHdlbnQgd3JvbmcgYnV0IHRvIGF2b2lkIGJsb2NraW5nXG4gICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0sIGRpc3BhdGNoIHRoZSBldmVudCB3aXRob3V0IGEgdGFyZ2V0LlxuICAgICAgICAvLyBUT0RPOiBXYXJuLlxuXG5cbiAgICAgICAgdGFyZ2V0SW5zdCA9IG51bGw7XG4gICAgICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgICAgdmFyIHJvb3QgPSBuZWFyZXN0TW91bnRlZC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgIC8vIElmIHRoaXMgaGFwcGVucyBkdXJpbmcgYSByZXBsYXkgc29tZXRoaW5nIHdlbnQgd3JvbmcgYW5kIGl0IG1pZ2h0IGJsb2NrXG4gICAgICAgICAgLy8gdGhlIHdob2xlIHN5c3RlbS5cbiAgICAgICAgICByZXR1cm4gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmIChuZWFyZXN0TW91bnRlZCAhPT0gdGFyZ2V0SW5zdCkge1xuICAgICAgICAvLyBJZiB3ZSBnZXQgYW4gZXZlbnQgKGV4OiBpbWcgb25sb2FkKSBiZWZvcmUgY29tbWl0dGluZyB0aGF0XG4gICAgICAgIC8vIGNvbXBvbmVudCdzIG1vdW50LCBpZ25vcmUgaXQgZm9yIG5vdyAodGhhdCBpcywgdHJlYXQgaXQgYXMgaWYgaXQgd2FzIGFuXG4gICAgICAgIC8vIGV2ZW50IG9uIGEgbm9uLVJlYWN0IHRyZWUpLiBXZSBtaWdodCBhbHNvIGNvbnNpZGVyIHF1ZXVlaW5nIGV2ZW50cyBhbmRcbiAgICAgICAgLy8gZGlzcGF0Y2hpbmcgdGhlbSBhZnRlciB0aGUgbW91bnQuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRGb3JQbHVnaW5FdmVudFN5c3RlbShkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpOyAvLyBXZSdyZSBub3QgYmxvY2tlZCBvbiBhbnl0aGluZy5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcih0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwgdHJ1ZSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cbmZ1bmN0aW9uIGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbiAgICBwYXNzaXZlOiBwYXNzaXZlXG4gIH0pO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldCwgZXZlbnRUeXBlLCBsaXN0ZW5lciwgcGFzc2l2ZSkge1xuICB0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGxpc3RlbmVyLCB7XG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG4vKipcbiAqIFRoZXNlIHZhcmlhYmxlcyBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCB0ZXh0IGNvbnRlbnQgb2YgYSB0YXJnZXQgbm9kZSxcbiAqIGFsbG93aW5nIGNvbXBhcmlzb24gb2YgY29udGVudCBiZWZvcmUgYW5kIGFmdGVyIGEgZ2l2ZW4gZXZlbnQuXG4gKlxuICogSWRlbnRpZnkgdGhlIG5vZGUgd2hlcmUgc2VsZWN0aW9uIGN1cnJlbnRseSBiZWdpbnMsIHRoZW4gb2JzZXJ2ZVxuICogYm90aCBpdHMgdGV4dCBjb250ZW50IGFuZCBpdHMgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgRE9NLiBTaW5jZSB0aGVcbiAqIGJyb3dzZXIgbWF5IG5hdGl2ZWx5IHJlcGxhY2UgdGhlIHRhcmdldCBub2RlIGR1cmluZyBjb21wb3NpdGlvbiwgd2UgY2FuXG4gKiB1c2UgaXRzIHBvc2l0aW9uIHRvIGZpbmQgaXRzIHJlcGxhY2VtZW50LlxuICpcbiAqXG4gKi9cbnZhciByb290ID0gbnVsbDtcbnZhciBzdGFydFRleHQgPSBudWxsO1xudmFyIGZhbGxiYWNrVGV4dCA9IG51bGw7XG5mdW5jdGlvbiBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHJvb3QgPSBuYXRpdmVFdmVudFRhcmdldDtcbiAgc3RhcnRUZXh0ID0gZ2V0VGV4dCgpO1xuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHJlc2V0KCkge1xuICByb290ID0gbnVsbDtcbiAgc3RhcnRUZXh0ID0gbnVsbDtcbiAgZmFsbGJhY2tUZXh0ID0gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldERhdGEoKSB7XG4gIGlmIChmYWxsYmFja1RleHQpIHtcbiAgICByZXR1cm4gZmFsbGJhY2tUZXh0O1xuICB9XG5cbiAgdmFyIHN0YXJ0O1xuICB2YXIgc3RhcnRWYWx1ZSA9IHN0YXJ0VGV4dDtcbiAgdmFyIHN0YXJ0TGVuZ3RoID0gc3RhcnRWYWx1ZS5sZW5ndGg7XG4gIHZhciBlbmQ7XG4gIHZhciBlbmRWYWx1ZSA9IGdldFRleHQoKTtcbiAgdmFyIGVuZExlbmd0aCA9IGVuZFZhbHVlLmxlbmd0aDtcblxuICBmb3IgKHN0YXJ0ID0gMDsgc3RhcnQgPCBzdGFydExlbmd0aDsgc3RhcnQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0XSAhPT0gZW5kVmFsdWVbc3RhcnRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgbWluRW5kID0gc3RhcnRMZW5ndGggLSBzdGFydDtcblxuICBmb3IgKGVuZCA9IDE7IGVuZCA8PSBtaW5FbmQ7IGVuZCsrKSB7XG4gICAgaWYgKHN0YXJ0VmFsdWVbc3RhcnRMZW5ndGggLSBlbmRdICE9PSBlbmRWYWx1ZVtlbmRMZW5ndGggLSBlbmRdKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgc2xpY2VUYWlsID0gZW5kID4gMSA/IDEgLSBlbmQgOiB1bmRlZmluZWQ7XG4gIGZhbGxiYWNrVGV4dCA9IGVuZFZhbHVlLnNsaWNlKHN0YXJ0LCBzbGljZVRhaWwpO1xuICByZXR1cm4gZmFsbGJhY2tUZXh0O1xufVxuZnVuY3Rpb24gZ2V0VGV4dCgpIHtcbiAgaWYgKCd2YWx1ZScgaW4gcm9vdCkge1xuICAgIHJldHVybiByb290LnZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QudGV4dENvbnRlbnQ7XG59XG5cbi8qKlxuICogYGNoYXJDb2RlYCByZXByZXNlbnRzIHRoZSBhY3R1YWwgXCJjaGFyYWN0ZXIgY29kZVwiIGFuZCBpcyBzYWZlIHRvIHVzZSB3aXRoXG4gKiBgU3RyaW5nLmZyb21DaGFyQ29kZWAuIEFzIHN1Y2gsIG9ubHkga2V5cyB0aGF0IGNvcnJlc3BvbmQgdG8gcHJpbnRhYmxlXG4gKiBjaGFyYWN0ZXJzIHByb2R1Y2UgYSB2YWxpZCBgY2hhckNvZGVgLCB0aGUgb25seSBleGNlcHRpb24gdG8gdGhpcyBpcyBFbnRlci5cbiAqIFRoZSBUYWIta2V5IGlzIGNvbnNpZGVyZWQgbm9uLXByaW50YWJsZSBhbmQgZG9lcyBub3QgaGF2ZSBhIGBjaGFyQ29kZWAsXG4gKiBwcmVzdW1hYmx5IGJlY2F1c2UgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHRhYi1jaGFyYWN0ZXIgaW4gYnJvd3NlcnMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50IE5hdGl2ZSBicm93c2VyIGV2ZW50LlxuICogQHJldHVybiB7bnVtYmVyfSBOb3JtYWxpemVkIGBjaGFyQ29kZWAgcHJvcGVydHkuXG4gKi9cbmZ1bmN0aW9uIGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGNoYXJDb2RlO1xuICB2YXIga2V5Q29kZSA9IG5hdGl2ZUV2ZW50LmtleUNvZGU7XG5cbiAgaWYgKCdjaGFyQ29kZScgaW4gbmF0aXZlRXZlbnQpIHtcbiAgICBjaGFyQ29kZSA9IG5hdGl2ZUV2ZW50LmNoYXJDb2RlOyAvLyBGRiBkb2VzIG5vdCBzZXQgYGNoYXJDb2RlYCBmb3IgdGhlIEVudGVyLWtleSwgY2hlY2sgYWdhaW5zdCBga2V5Q29kZWAuXG5cbiAgICBpZiAoY2hhckNvZGUgPT09IDAgJiYga2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgIGNoYXJDb2RlID0gMTM7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElFOCBkb2VzIG5vdCBpbXBsZW1lbnQgYGNoYXJDb2RlYCwgYnV0IGBrZXlDb2RlYCBoYXMgdGhlIGNvcnJlY3QgdmFsdWUuXG4gICAgY2hhckNvZGUgPSBrZXlDb2RlO1xuICB9IC8vIElFIGFuZCBFZGdlIChvbiBXaW5kb3dzKSBhbmQgQ2hyb21lIC8gU2FmYXJpIChvbiBXaW5kb3dzIGFuZCBMaW51eClcbiAgLy8gcmVwb3J0IEVudGVyIGFzIGNoYXJDb2RlIDEwIHdoZW4gY3RybCBpcyBwcmVzc2VkLlxuXG5cbiAgaWYgKGNoYXJDb2RlID09PSAxMCkge1xuICAgIGNoYXJDb2RlID0gMTM7XG4gIH0gLy8gU29tZSBub24tcHJpbnRhYmxlIGtleXMgYXJlIHJlcG9ydGVkIGluIGBjaGFyQ29kZWAvYGtleUNvZGVgLCBkaXNjYXJkIHRoZW0uXG4gIC8vIE11c3Qgbm90IGRpc2NhcmQgdGhlIChub24tKXByaW50YWJsZSBFbnRlci1rZXkuXG5cblxuICBpZiAoY2hhckNvZGUgPj0gMzIgfHwgY2hhckNvZGUgPT09IDEzKSB7XG4gICAgcmV0dXJuIGNoYXJDb2RlO1xuICB9XG5cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlKCkge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlKCkge1xuICByZXR1cm4gZmFsc2U7XG59IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhIGZhY3Rvcnkgc28gdGhhdCB3ZSBoYXZlIGRpZmZlcmVudCByZXR1cm5lZCBjb25zdHJ1Y3RvcnMuXG4vLyBJZiB3ZSBoYWQgYSBzaW5nbGUgY29uc3RydWN0b3IsIGl0IHdvdWxkIGJlIG1lZ2Ftb3JwaGljIGFuZCBlbmdpbmVzIHdvdWxkIGRlb3B0LlxuXG5cbmZ1bmN0aW9uIGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEludGVyZmFjZSkge1xuICAvKipcbiAgICogU3ludGhldGljIGV2ZW50cyBhcmUgZGlzcGF0Y2hlZCBieSBldmVudCBwbHVnaW5zLCB0eXBpY2FsbHkgaW4gcmVzcG9uc2UgdG8gYVxuICAgKiB0b3AtbGV2ZWwgZXZlbnQgZGVsZWdhdGlvbiBoYW5kbGVyLlxuICAgKlxuICAgKiBUaGVzZSBzeXN0ZW1zIHNob3VsZCBnZW5lcmFsbHkgdXNlIHBvb2xpbmcgdG8gcmVkdWNlIHRoZSBmcmVxdWVuY3kgb2YgZ2FyYmFnZVxuICAgKiBjb2xsZWN0aW9uLiBUaGUgc3lzdGVtIHNob3VsZCBjaGVjayBgaXNQZXJzaXN0ZW50YCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVcbiAgICogZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGludG8gdGhlIHBvb2wgYWZ0ZXIgYmVpbmcgZGlzcGF0Y2hlZC4gVXNlcnMgdGhhdFxuICAgKiBuZWVkIGEgcGVyc2lzdGVkIGV2ZW50IHNob3VsZCBpbnZva2UgYHBlcnNpc3RgLlxuICAgKlxuICAgKiBTeW50aGV0aWMgZXZlbnRzIChhbmQgc3ViY2xhc3NlcykgaW1wbGVtZW50IHRoZSBET00gTGV2ZWwgMyBFdmVudHMgQVBJIGJ5XG4gICAqIG5vcm1hbGl6aW5nIGJyb3dzZXIgcXVpcmtzLiBTdWJjbGFzc2VzIGRvIG5vdCBuZWNlc3NhcmlseSBoYXZlIHRvIGltcGxlbWVudCBhXG4gICAqIERPTSBpbnRlcmZhY2U7IGN1c3RvbSBhcHBsaWNhdGlvbi1zcGVjaWZpYyBldmVudHMgY2FuIGFsc28gc3ViY2xhc3MgdGhpcy5cbiAgICovXG4gIGZ1bmN0aW9uIFN5bnRoZXRpY0Jhc2VFdmVudChyZWFjdE5hbWUsIHJlYWN0RXZlbnRUeXBlLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgICB0aGlzLl9yZWFjdE5hbWUgPSByZWFjdE5hbWU7XG4gICAgdGhpcy5fdGFyZ2V0SW5zdCA9IHRhcmdldEluc3Q7XG4gICAgdGhpcy50eXBlID0gcmVhY3RFdmVudFR5cGU7XG4gICAgdGhpcy5uYXRpdmVFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgIHRoaXMudGFyZ2V0ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gICAgdGhpcy5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcblxuICAgIGZvciAodmFyIF9wcm9wTmFtZSBpbiBJbnRlcmZhY2UpIHtcbiAgICAgIGlmICghSW50ZXJmYWNlLmhhc093blByb3BlcnR5KF9wcm9wTmFtZSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHZhciBub3JtYWxpemUgPSBJbnRlcmZhY2VbX3Byb3BOYW1lXTtcblxuICAgICAgaWYgKG5vcm1hbGl6ZSkge1xuICAgICAgICB0aGlzW19wcm9wTmFtZV0gPSBub3JtYWxpemUobmF0aXZlRXZlbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbmF0aXZlRXZlbnRbX3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFByZXZlbnRlZCA9IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgIT0gbnVsbCA/IG5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgOiBuYXRpdmVFdmVudC5yZXR1cm5WYWx1ZSA9PT0gZmFsc2U7XG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9hc3NpZ24oU3ludGhldGljQmFzZUV2ZW50LnByb3RvdHlwZSwge1xuICAgIHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcmV2ZW50ZWQgPSB0cnVlO1xuICAgICAgdmFyIGV2ZW50ID0gdGhpcy5uYXRpdmVFdmVudDtcblxuICAgICAgaWYgKCFldmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5yZXR1cm5WYWx1ZSAhPT0gJ3Vua25vd24nKSB7XG4gICAgICAgIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcbiAgICBzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyAvLyAkRmxvd0ZpeE1lIC0gZmxvdyBpcyBub3QgYXdhcmUgb2YgYHVua25vd25gIGluIElFXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBldmVudC5jYW5jZWxCdWJibGUgIT09ICd1bmtub3duJykge1xuICAgICAgICAvLyBUaGUgQ2hhbmdlRXZlbnRQbHVnaW4gcmVnaXN0ZXJzIGEgXCJwcm9wZXJ0eWNoYW5nZVwiIGV2ZW50IGZvclxuICAgICAgICAvLyBJRS4gVGhpcyBldmVudCBkb2VzIG5vdCBzdXBwb3J0IGJ1YmJsaW5nIG9yIGNhbmNlbGxpbmcsIGFuZFxuICAgICAgICAvLyBhbnkgcmVmZXJlbmNlcyB0byBjYW5jZWxCdWJibGUgdGhyb3cgXCJNZW1iZXIgbm90IGZvdW5kXCIuICBBXG4gICAgICAgIC8vIHR5cGVvZiBjaGVjayBvZiBcInVua25vd25cIiBjaXJjdW12ZW50cyB0aGlzIGlzc3VlIChhbmQgaXMgYWxzb1xuICAgICAgICAvLyBJRSBzcGVjaWZpYykuXG4gICAgICAgIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogV2UgcmVsZWFzZSBhbGwgZGlzcGF0Y2hlZCBgU3ludGhldGljRXZlbnRgcyBhZnRlciBlYWNoIGV2ZW50IGxvb3AsIGFkZGluZ1xuICAgICAqIHRoZW0gYmFjayBpbnRvIHRoZSBwb29sLiBUaGlzIGFsbG93cyBhIHdheSB0byBob2xkIG9udG8gYSByZWZlcmVuY2UgdGhhdFxuICAgICAqIHdvbid0IGJlIGFkZGVkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKi9cbiAgICBwZXJzaXN0OiBmdW5jdGlvbiAoKSB7Ly8gTW9kZXJuIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhpcyBldmVudCBzaG91bGQgYmUgcmVsZWFzZWQgYmFjayBpbnRvIHRoZSBwb29sLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGlzIHNob3VsZCBub3QgYmUgcmVsZWFzZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBpc1BlcnNpc3RlbnQ6IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlXG4gIH0pO1xuXG4gIHJldHVybiBTeW50aGV0aWNCYXNlRXZlbnQ7XG59XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEV2ZW50SW50ZXJmYWNlID0ge1xuICBldmVudFBoYXNlOiAwLFxuICBidWJibGVzOiAwLFxuICBjYW5jZWxhYmxlOiAwLFxuICB0aW1lU3RhbXA6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiBldmVudC50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVmYXVsdFByZXZlbnRlZDogMCxcbiAgaXNUcnVzdGVkOiAwXG59O1xudmFyIFN5bnRoZXRpY0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgVUlFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHZpZXc6IDAsXG4gIGRldGFpbDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNVSUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVUlFdmVudEludGVyZmFjZSk7XG52YXIgbGFzdE1vdmVtZW50WDtcbnZhciBsYXN0TW92ZW1lbnRZO1xudmFyIGxhc3RNb3VzZUV2ZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCkge1xuICBpZiAoZXZlbnQgIT09IGxhc3RNb3VzZUV2ZW50KSB7XG4gICAgaWYgKGxhc3RNb3VzZUV2ZW50ICYmIGV2ZW50LnR5cGUgPT09ICdtb3VzZW1vdmUnKSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gZXZlbnQuc2NyZWVuWCAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblg7XG4gICAgICBsYXN0TW92ZW1lbnRZID0gZXZlbnQuc2NyZWVuWSAtIGxhc3RNb3VzZUV2ZW50LnNjcmVlblk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNb3ZlbWVudFggPSAwO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IDA7XG4gICAgfVxuXG4gICAgbGFzdE1vdXNlRXZlbnQgPSBldmVudDtcbiAgfVxufVxuLyoqXG4gKiBAaW50ZXJmYWNlIE1vdXNlRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIE1vdXNlRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHNjcmVlblg6IDAsXG4gIHNjcmVlblk6IDAsXG4gIGNsaWVudFg6IDAsXG4gIGNsaWVudFk6IDAsXG4gIHBhZ2VYOiAwLFxuICBwYWdlWTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICBidXR0b246IDAsXG4gIGJ1dHRvbnM6IDAsXG4gIHJlbGF0ZWRUYXJnZXQ6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChldmVudC5yZWxhdGVkVGFyZ2V0ID09PSB1bmRlZmluZWQpIHJldHVybiBldmVudC5mcm9tRWxlbWVudCA9PT0gZXZlbnQuc3JjRWxlbWVudCA/IGV2ZW50LnRvRWxlbWVudCA6IGV2ZW50LmZyb21FbGVtZW50O1xuICAgIHJldHVybiBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICB9LFxuICBtb3ZlbWVudFg6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRYJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WDtcbiAgICB9XG5cbiAgICB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZShldmVudCk7XG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFg7XG4gIH0sXG4gIG1vdmVtZW50WTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKCdtb3ZlbWVudFknIGluIGV2ZW50KSB7XG4gICAgICByZXR1cm4gZXZlbnQubW92ZW1lbnRZO1xuICAgIH0gLy8gRG9uJ3QgbmVlZCB0byBjYWxsIHVwZGF0ZU1vdXNlTW92ZW1lbnRQb2x5ZmlsbFN0YXRlKCkgaGVyZVxuICAgIC8vIGJlY2F1c2UgaXQncyBndWFyYW50ZWVkIHRvIGhhdmUgYWxyZWFkeSBydW4gd2hlbiBtb3ZlbWVudFhcbiAgICAvLyB3YXMgY29waWVkLlxuXG5cbiAgICByZXR1cm4gbGFzdE1vdmVtZW50WTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNNb3VzZUV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoTW91c2VFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRHJhZ0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRHJhZ0V2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBkYXRhVHJhbnNmZXI6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRHJhZ0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRHJhZ0V2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBGb2N1c0V2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgRm9jdXNFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgcmVsYXRlZFRhcmdldDogMFxufSk7XG5cbnZhciBTeW50aGV0aWNGb2N1c0V2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoRm9jdXNFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1hbmltYXRpb25zLyNBbmltYXRpb25FdmVudC1pbnRlcmZhY2VcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0FuaW1hdGlvbkV2ZW50XG4gKi9cblxudmFyIEFuaW1hdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgYW5pbWF0aW9uTmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQW5pbWF0aW9uRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChBbmltYXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvY2xpcGJvYXJkLWFwaXMvXG4gKi9cblxudmFyIENsaXBib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgY2xpcGJvYXJkRGF0YTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdjbGlwYm9hcmREYXRhJyBpbiBldmVudCA/IGV2ZW50LmNsaXBib2FyZERhdGEgOiB3aW5kb3cuY2xpcGJvYXJkRGF0YTtcbiAgfVxufSk7XG5cbnZhciBTeW50aGV0aWNDbGlwYm9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENsaXBib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1jb21wb3NpdGlvbmV2ZW50c1xuICovXG5cbnZhciBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDVcbiAqICAgICAgLyNldmVudHMtaW5wdXRldmVudHNcbiAqL1xuLy8gSGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBsaXN0IGZvciBub3cuXG5cbnZhciBTeW50aGV0aWNJbnB1dEV2ZW50ID0gU3ludGhldGljQ29tcG9zaXRpb25FdmVudDtcbi8qKlxuICogTm9ybWFsaXphdGlvbiBvZiBkZXByZWNhdGVkIEhUTUw1IGBrZXlgIHZhbHVlc1xuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgbm9ybWFsaXplS2V5ID0ge1xuICBFc2M6ICdFc2NhcGUnLFxuICBTcGFjZWJhcjogJyAnLFxuICBMZWZ0OiAnQXJyb3dMZWZ0JyxcbiAgVXA6ICdBcnJvd1VwJyxcbiAgUmlnaHQ6ICdBcnJvd1JpZ2h0JyxcbiAgRG93bjogJ0Fycm93RG93bicsXG4gIERlbDogJ0RlbGV0ZScsXG4gIFdpbjogJ09TJyxcbiAgTWVudTogJ0NvbnRleHRNZW51JyxcbiAgQXBwczogJ0NvbnRleHRNZW51JyxcbiAgU2Nyb2xsOiAnU2Nyb2xsTG9jaycsXG4gIE1velByaW50YWJsZUtleTogJ1VuaWRlbnRpZmllZCdcbn07XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbGVnYWN5IGBrZXlDb2RlYCB0byBIVE1MNSBga2V5YFxuICogT25seSBzcGVjaWFsIGtleXMgc3VwcG9ydGVkLCBhbGwgb3RoZXJzIGRlcGVuZCBvbiBrZXlib2FyZCBsYXlvdXQgb3IgYnJvd3NlclxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudCNLZXlfbmFtZXNcbiAqL1xuXG52YXIgdHJhbnNsYXRlVG9LZXkgPSB7XG4gICc4JzogJ0JhY2tzcGFjZScsXG4gICc5JzogJ1RhYicsXG4gICcxMic6ICdDbGVhcicsXG4gICcxMyc6ICdFbnRlcicsXG4gICcxNic6ICdTaGlmdCcsXG4gICcxNyc6ICdDb250cm9sJyxcbiAgJzE4JzogJ0FsdCcsXG4gICcxOSc6ICdQYXVzZScsXG4gICcyMCc6ICdDYXBzTG9jaycsXG4gICcyNyc6ICdFc2NhcGUnLFxuICAnMzInOiAnICcsXG4gICczMyc6ICdQYWdlVXAnLFxuICAnMzQnOiAnUGFnZURvd24nLFxuICAnMzUnOiAnRW5kJyxcbiAgJzM2JzogJ0hvbWUnLFxuICAnMzcnOiAnQXJyb3dMZWZ0JyxcbiAgJzM4JzogJ0Fycm93VXAnLFxuICAnMzknOiAnQXJyb3dSaWdodCcsXG4gICc0MCc6ICdBcnJvd0Rvd24nLFxuICAnNDUnOiAnSW5zZXJ0JyxcbiAgJzQ2JzogJ0RlbGV0ZScsXG4gICcxMTInOiAnRjEnLFxuICAnMTEzJzogJ0YyJyxcbiAgJzExNCc6ICdGMycsXG4gICcxMTUnOiAnRjQnLFxuICAnMTE2JzogJ0Y1JyxcbiAgJzExNyc6ICdGNicsXG4gICcxMTgnOiAnRjcnLFxuICAnMTE5JzogJ0Y4JyxcbiAgJzEyMCc6ICdGOScsXG4gICcxMjEnOiAnRjEwJyxcbiAgJzEyMic6ICdGMTEnLFxuICAnMTIzJzogJ0YxMicsXG4gICcxNDQnOiAnTnVtTG9jaycsXG4gICcxNDUnOiAnU2Nyb2xsTG9jaycsXG4gICcyMjQnOiAnTWV0YSdcbn07XG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBga2V5YCBwcm9wZXJ0eS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudEtleShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQua2V5KSB7XG4gICAgLy8gTm9ybWFsaXplIGluY29uc2lzdGVudCB2YWx1ZXMgcmVwb3J0ZWQgYnkgYnJvd3NlcnMgZHVlIHRvXG4gICAgLy8gaW1wbGVtZW50YXRpb25zIG9mIGEgd29ya2luZyBkcmFmdCBzcGVjaWZpY2F0aW9uLlxuICAgIC8vIEZpcmVGb3ggaW1wbGVtZW50cyBga2V5YCBidXQgcmV0dXJucyBgTW96UHJpbnRhYmxlS2V5YCBmb3IgYWxsXG4gICAgLy8gcHJpbnRhYmxlIGNoYXJhY3RlcnMgKG5vcm1hbGl6ZWQgdG8gYFVuaWRlbnRpZmllZGApLCBpZ25vcmUgaXQuXG4gICAgdmFyIGtleSA9IG5vcm1hbGl6ZUtleVtuYXRpdmVFdmVudC5rZXldIHx8IG5hdGl2ZUV2ZW50LmtleTtcblxuICAgIGlmIChrZXkgIT09ICdVbmlkZW50aWZpZWQnKSB7XG4gICAgICByZXR1cm4ga2V5O1xuICAgIH1cbiAgfSAvLyBCcm93c2VyIGRvZXMgbm90IGltcGxlbWVudCBga2V5YCwgcG9seWZpbGwgYXMgbXVjaCBvZiBpdCBhcyB3ZSBjYW4uXG5cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgIHZhciBjaGFyQ29kZSA9IGdldEV2ZW50Q2hhckNvZGUobmF0aXZlRXZlbnQpOyAvLyBUaGUgZW50ZXIta2V5IGlzIHRlY2huaWNhbGx5IGJvdGggcHJpbnRhYmxlIGFuZCBub24tcHJpbnRhYmxlIGFuZCBjYW5cbiAgICAvLyB0aHVzIGJlIGNhcHR1cmVkIGJ5IGBrZXlwcmVzc2AsIG5vIG90aGVyIG5vbi1wcmludGFibGUga2V5IHNob3VsZC5cblxuICAgIHJldHVybiBjaGFyQ29kZSA9PT0gMTMgPyAnRW50ZXInIDogU3RyaW5nLmZyb21DaGFyQ29kZShjaGFyQ29kZSk7XG4gIH1cblxuICBpZiAobmF0aXZlRXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAvLyBXaGlsZSB1c2VyIGtleWJvYXJkIGxheW91dCBkZXRlcm1pbmVzIHRoZSBhY3R1YWwgbWVhbmluZyBvZiBlYWNoXG4gICAgLy8gYGtleUNvZGVgIHZhbHVlLCBhbG1vc3QgYWxsIGZ1bmN0aW9uIGtleXMgaGF2ZSBhIHVuaXZlcnNhbCB2YWx1ZS5cbiAgICByZXR1cm4gdHJhbnNsYXRlVG9LZXlbbmF0aXZlRXZlbnQua2V5Q29kZV0gfHwgJ1VuaWRlbnRpZmllZCc7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFRyYW5zbGF0aW9uIGZyb20gbW9kaWZpZXIga2V5IHRvIHRoZSBhc3NvY2lhdGVkIHByb3BlcnR5IGluIHRoZSBldmVudC5cbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNrZXlzLU1vZGlmaWVyc1xuICovXG5cblxudmFyIG1vZGlmaWVyS2V5VG9Qcm9wID0ge1xuICBBbHQ6ICdhbHRLZXknLFxuICBDb250cm9sOiAnY3RybEtleScsXG4gIE1ldGE6ICdtZXRhS2V5JyxcbiAgU2hpZnQ6ICdzaGlmdEtleSdcbn07IC8vIE9sZGVyIGJyb3dzZXJzIChTYWZhcmkgPD0gMTAsIGlPUyBTYWZhcmkgPD0gMTAuMikgZG8gbm90IHN1cHBvcnRcbi8vIGdldE1vZGlmaWVyU3RhdGUuIElmIGdldE1vZGlmaWVyU3RhdGUgaXMgbm90IHN1cHBvcnRlZCwgd2UgbWFwIGl0IHRvIGEgc2V0IG9mXG4vLyBtb2RpZmllciBrZXlzIGV4cG9zZWQgYnkgdGhlIGV2ZW50LiBJbiB0aGlzIGNhc2UsIExvY2sta2V5cyBhcmUgbm90IHN1cHBvcnRlZC5cblxuZnVuY3Rpb24gbW9kaWZpZXJTdGF0ZUdldHRlcihrZXlBcmcpIHtcbiAgdmFyIHN5bnRoZXRpY0V2ZW50ID0gdGhpcztcbiAgdmFyIG5hdGl2ZUV2ZW50ID0gc3ludGhldGljRXZlbnQubmF0aXZlRXZlbnQ7XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUpIHtcbiAgICByZXR1cm4gbmF0aXZlRXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZShrZXlBcmcpO1xuICB9XG5cbiAgdmFyIGtleVByb3AgPSBtb2RpZmllcktleVRvUHJvcFtrZXlBcmddO1xuICByZXR1cm4ga2V5UHJvcCA/ICEhbmF0aXZlRXZlbnRba2V5UHJvcF0gOiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnRNb2RpZmllclN0YXRlKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBtb2RpZmllclN0YXRlR2V0dGVyO1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEtleWJvYXJkRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzL1xuICovXG5cblxudmFyIEtleWJvYXJkRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIGtleTogZ2V0RXZlbnRLZXksXG4gIGNvZGU6IDAsXG4gIGxvY2F0aW9uOiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICByZXBlYXQ6IDAsXG4gIGxvY2FsZTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlLFxuICAvLyBMZWdhY3kgSW50ZXJmYWNlXG4gIGNoYXJDb2RlOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAvLyBgY2hhckNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlQcmVzcyBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyB0aGUgYWN0dWFsIHByaW50YWJsZSBjaGFyYWN0ZXIuXG4gICAgLy8gS2V5UHJlc3MgaXMgZGVwcmVjYXRlZCwgYnV0IGl0cyByZXBsYWNlbWVudCBpcyBub3QgeWV0IGZpbmFsIGFuZCBub3RcbiAgICAvLyBpbXBsZW1lbnRlZCBpbiBhbnkgbWFqb3IgYnJvd3Nlci4gT25seSBLZXlQcmVzcyBoYXMgY2hhckNvZGUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAga2V5Q29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGtleUNvZGVgIGlzIHRoZSByZXN1bHQgb2YgYSBLZXlEb3duL1VwIGV2ZW50IGFuZCByZXByZXNlbnRzIHRoZSB2YWx1ZSBvZlxuICAgIC8vIHBoeXNpY2FsIGtleWJvYXJkIGtleS5cbiAgICAvLyBUaGUgYWN0dWFsIG1lYW5pbmcgb2YgdGhlIHZhbHVlIGRlcGVuZHMgb24gdGhlIHVzZXJzJyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyB3aGljaCBjYW5ub3QgYmUgZGV0ZWN0ZWQuIEFzc3VtaW5nIHRoYXQgaXQgaXMgYSBVUyBrZXlib2FyZCBsYXlvdXRcbiAgICAvLyBwcm92aWRlcyBhIHN1cnByaXNpbmdseSBhY2N1cmF0ZSBtYXBwaW5nIGZvciBVUyBhbmQgRXVyb3BlYW4gdXNlcnMuXG4gICAgLy8gRHVlIHRvIHRoaXMsIGl0IGlzIGxlZnQgdG8gdGhlIHVzZXIgdG8gaW1wbGVtZW50IGF0IHRoaXMgdGltZS5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9LFxuICB3aGljaDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYHdoaWNoYCBpcyBhbiBhbGlhcyBmb3IgZWl0aGVyIGBrZXlDb2RlYCBvciBgY2hhckNvZGVgIGRlcGVuZGluZyBvbiB0aGVcbiAgICAvLyB0eXBlIG9mIHRoZSBldmVudC5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleXByZXNzJykge1xuICAgICAgcmV0dXJuIGdldEV2ZW50Q2hhckNvZGUoZXZlbnQpO1xuICAgIH1cblxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJykge1xuICAgICAgcmV0dXJuIGV2ZW50LmtleUNvZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljS2V5Ym9hcmRFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEtleWJvYXJkRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFBvaW50ZXJFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9wb2ludGVyZXZlbnRzL1xuICovXG5cbnZhciBQb2ludGVyRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIHBvaW50ZXJJZDogMCxcbiAgd2lkdGg6IDAsXG4gIGhlaWdodDogMCxcbiAgcHJlc3N1cmU6IDAsXG4gIHRhbmdlbnRpYWxQcmVzc3VyZTogMCxcbiAgdGlsdFg6IDAsXG4gIHRpbHRZOiAwLFxuICB0d2lzdDogMCxcbiAgcG9pbnRlclR5cGU6IDAsXG4gIGlzUHJpbWFyeTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNQb2ludGVyRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChQb2ludGVyRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIFRvdWNoRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvdG91Y2gtZXZlbnRzL1xuICovXG5cbnZhciBUb3VjaEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICB0b3VjaGVzOiAwLFxuICB0YXJnZXRUb3VjaGVzOiAwLFxuICBjaGFuZ2VkVG91Y2hlczogMCxcbiAgYWx0S2V5OiAwLFxuICBtZXRhS2V5OiAwLFxuICBjdHJsS2V5OiAwLFxuICBzaGlmdEtleTogMCxcbiAgZ2V0TW9kaWZpZXJTdGF0ZTogZ2V0RXZlbnRNb2RpZmllclN0YXRlXG59KTtcblxudmFyIFN5bnRoZXRpY1RvdWNoRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChUb3VjaEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA5L1dELWNzczMtdHJhbnNpdGlvbnMtMjAwOTAzMjAvI3RyYW5zaXRpb24tZXZlbnRzLVxuICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVHJhbnNpdGlvbkV2ZW50XG4gKi9cblxudmFyIFRyYW5zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIHByb3BlcnR5TmFtZTogMCxcbiAgZWxhcHNlZFRpbWU6IDAsXG4gIHBzZXVkb0VsZW1lbnQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVHJhbnNpdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVHJhbnNpdGlvbkV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBXaGVlbEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG52YXIgV2hlZWxFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGVsdGFYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWCcgaW4gZXZlbnQgPyBldmVudC5kZWx0YVggOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVhgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAocmlnaHQgaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhWCcgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YVggOiAwO1xuICB9LFxuICBkZWx0YVk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnZGVsdGFZJyBpbiBldmVudCA/IGV2ZW50LmRlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhWWAgZm9yIFdlYmtpdCBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVknIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFZIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFgIGZvciBJRTw5IGFuZCBub3JtYWxpemUgKGRvd24gaXMgcG9zaXRpdmUpLlxuICAgICd3aGVlbERlbHRhJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhIDogMDtcbiAgfSxcbiAgZGVsdGFaOiAwLFxuICAvLyBCcm93c2VycyB3aXRob3V0IFwiZGVsdGFNb2RlXCIgaXMgcmVwb3J0aW5nIGluIHJhdyB3aGVlbCBkZWx0YSB3aGVyZSBvbmVcbiAgLy8gbm90Y2ggb24gdGhlIHNjcm9sbCBpcyBhbHdheXMgKy8tIDEyMCwgcm91Z2hseSBlcXVpdmFsZW50IHRvIHBpeGVscy5cbiAgLy8gQSBnb29kIGFwcHJveGltYXRpb24gb2YgRE9NX0RFTFRBX0xJTkUgKDEpIGlzIDUlIG9mIHZpZXdwb3J0IHNpemUgb3JcbiAgLy8gfjQwIHBpeGVscywgZm9yIERPTV9ERUxUQV9TQ1JFRU4gKDIpIGl0IGlzIDg3LjUlIG9mIHZpZXdwb3J0IHNpemUuXG4gIGRlbHRhTW9kZTogMFxufSk7XG5cbnZhciBTeW50aGV0aWNXaGVlbEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoV2hlZWxFdmVudEludGVyZmFjZSk7XG5cbnZhciBFTkRfS0VZQ09ERVMgPSBbOSwgMTMsIDI3LCAzMl07IC8vIFRhYiwgUmV0dXJuLCBFc2MsIFNwYWNlXG5cbnZhciBTVEFSVF9LRVlDT0RFID0gMjI5O1xudmFyIGNhblVzZUNvbXBvc2l0aW9uRXZlbnQgPSBjYW5Vc2VET00gJiYgJ0NvbXBvc2l0aW9uRXZlbnQnIGluIHdpbmRvdztcbnZhciBkb2N1bWVudE1vZGUgPSBudWxsO1xuXG5pZiAoY2FuVXNlRE9NICYmICdkb2N1bWVudE1vZGUnIGluIGRvY3VtZW50KSB7XG4gIGRvY3VtZW50TW9kZSA9IGRvY3VtZW50LmRvY3VtZW50TW9kZTtcbn0gLy8gV2Via2l0IG9mZmVycyBhIHZlcnkgdXNlZnVsIGB0ZXh0SW5wdXRgIGV2ZW50IHRoYXQgY2FuIGJlIHVzZWQgdG9cbi8vIGRpcmVjdGx5IHJlcHJlc2VudCBgYmVmb3JlSW5wdXRgLiBUaGUgSUUgYHRleHRpbnB1dGAgZXZlbnQgaXMgbm90IGFzXG4vLyB1c2VmdWwsIHNvIHdlIGRvbid0IHVzZSBpdC5cblxuXG52YXIgY2FuVXNlVGV4dElucHV0RXZlbnQgPSBjYW5Vc2VET00gJiYgJ1RleHRFdmVudCcgaW4gd2luZG93ICYmICFkb2N1bWVudE1vZGU7IC8vIEluIElFOSssIHdlIGhhdmUgYWNjZXNzIHRvIGNvbXBvc2l0aW9uIGV2ZW50cywgYnV0IHRoZSBkYXRhIHN1cHBsaWVkXG4vLyBieSB0aGUgbmF0aXZlIGNvbXBvc2l0aW9uZW5kIGV2ZW50IG1heSBiZSBpbmNvcnJlY3QuIEphcGFuZXNlIGlkZW9ncmFwaGljXG4vLyBzcGFjZXMsIGZvciBpbnN0YW5jZSAoXFx1MzAwMCkgYXJlIG5vdCByZWNvcmRlZCBjb3JyZWN0bHkuXG5cbnZhciB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSA9IGNhblVzZURPTSAmJiAoIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgfHwgZG9jdW1lbnRNb2RlICYmIGRvY3VtZW50TW9kZSA+IDggJiYgZG9jdW1lbnRNb2RlIDw9IDExKTtcbnZhciBTUEFDRUJBUl9DT0RFID0gMzI7XG52YXIgU1BBQ0VCQVJfQ0hBUiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoU1BBQ0VCQVJfQ09ERSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQmVmb3JlSW5wdXQnLCBbJ2NvbXBvc2l0aW9uZW5kJywgJ2tleXByZXNzJywgJ3RleHRJbnB1dCcsICdwYXN0ZSddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uRW5kJywgWydjb21wb3NpdGlvbmVuZCcsICdmb2N1c291dCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ21vdXNlZG93biddKTtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNvbXBvc2l0aW9uU3RhcnQnLCBbJ2NvbXBvc2l0aW9uc3RhcnQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblVwZGF0ZScsIFsnY29tcG9zaXRpb251cGRhdGUnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG59IC8vIFRyYWNrIHdoZXRoZXIgd2UndmUgZXZlciBoYW5kbGVkIGEga2V5cHJlc3Mgb24gdGhlIHNwYWNlIGtleS5cblxuXG52YXIgaGFzU3BhY2VLZXlwcmVzcyA9IGZhbHNlO1xuLyoqXG4gKiBSZXR1cm4gd2hldGhlciBhIG5hdGl2ZSBrZXlwcmVzcyBldmVudCBpcyBhc3N1bWVkIHRvIGJlIGEgY29tbWFuZC5cbiAqIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBGaXJlZm94IGZpcmVzIGBrZXlwcmVzc2AgZXZlbnRzIGZvciBrZXkgY29tbWFuZHNcbiAqIChjdXQsIGNvcHksIHNlbGVjdC1hbGwsIGV0Yy4pIGV2ZW4gdGhvdWdoIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZC5cbiAqL1xuXG5mdW5jdGlvbiBpc0tleXByZXNzQ29tbWFuZChuYXRpdmVFdmVudCkge1xuICByZXR1cm4gKG5hdGl2ZUV2ZW50LmN0cmxLZXkgfHwgbmF0aXZlRXZlbnQuYWx0S2V5IHx8IG5hdGl2ZUV2ZW50Lm1ldGFLZXkpICYmIC8vIGN0cmxLZXkgJiYgYWx0S2V5IGlzIGVxdWl2YWxlbnQgdG8gQWx0R3IsIGFuZCBpcyBub3QgYSBjb21tYW5kLlxuICAhKG5hdGl2ZUV2ZW50LmN0cmxLZXkgJiYgbmF0aXZlRXZlbnQuYWx0S2V5KTtcbn1cbi8qKlxuICogVHJhbnNsYXRlIG5hdGl2ZSB0b3AgbGV2ZWwgZXZlbnRzIGludG8gZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbnN0YXJ0JzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvblN0YXJ0JztcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiAnb25Db21wb3NpdGlvbkVuZCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbnVwZGF0ZSc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25VcGRhdGUnO1xuICB9XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIGJlc3QtZ3Vlc3MgbW9kZWwgdGhpbmsgdGhpcyBldmVudCBzaWduaWZpZXMgdGhhdFxuICogY29tcG9zaXRpb24gaGFzIGJlZ3VuP1xuICovXG5cblxuZnVuY3Rpb24gaXNGYWxsYmFja0NvbXBvc2l0aW9uU3RhcnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lID09PSAna2V5ZG93bicgJiYgbmF0aXZlRXZlbnQua2V5Q29kZSA9PT0gU1RBUlRfS0VZQ09ERTtcbn1cbi8qKlxuICogRG9lcyBvdXIgZmFsbGJhY2sgbW9kZSB0aGluayB0aGF0IHRoaXMgZXZlbnQgaXMgdGhlIGVuZCBvZiBjb21wb3NpdGlvbj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgLy8gQ29tbWFuZCBrZXlzIGluc2VydCBvciBjbGVhciBJTUUgaW5wdXQuXG4gICAgICByZXR1cm4gRU5EX0tFWUNPREVTLmluZGV4T2YobmF0aXZlRXZlbnQua2V5Q29kZSkgIT09IC0xO1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgICAvLyBFeHBlY3QgSU1FIGtleUNvZGUgb24gZWFjaCBrZXlkb3duLiBJZiB3ZSBnZXQgYW55IG90aGVyXG4gICAgICAvLyBjb2RlIHdlIG11c3QgaGF2ZSBleGl0ZWQgZWFybGllci5cbiAgICAgIHJldHVybiBuYXRpdmVFdmVudC5rZXlDb2RlICE9PSBTVEFSVF9LRVlDT0RFO1xuXG4gICAgY2FzZSAna2V5cHJlc3MnOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgLy8gRXZlbnRzIGFyZSBub3QgcG9zc2libGUgd2l0aG91dCBjYW5jZWxsaW5nIElNRS5cbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBHb29nbGUgSW5wdXQgVG9vbHMgcHJvdmlkZXMgY29tcG9zaXRpb24gZGF0YSB2aWEgYSBDdXN0b21FdmVudCxcbiAqIHdpdGggdGhlIGBkYXRhYCBwcm9wZXJ0eSBwb3B1bGF0ZWQgaW4gdGhlIGBkZXRhaWxgIG9iamVjdC4gSWYgdGhpc1xuICogaXMgYXZhaWxhYmxlIG9uIHRoZSBldmVudCBvYmplY3QsIHVzZSBpdC4gSWYgbm90LCB0aGlzIGlzIGEgcGxhaW5cbiAqIGNvbXBvc2l0aW9uIGV2ZW50IGFuZCB3ZSBoYXZlIG5vdGhpbmcgc3BlY2lhbCB0byBleHRyYWN0LlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7P3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldERhdGFGcm9tQ3VzdG9tRXZlbnQobmF0aXZlRXZlbnQpIHtcbiAgdmFyIGRldGFpbCA9IG5hdGl2ZUV2ZW50LmRldGFpbDtcblxuICBpZiAodHlwZW9mIGRldGFpbCA9PT0gJ29iamVjdCcgJiYgJ2RhdGEnIGluIGRldGFpbCkge1xuICAgIHJldHVybiBkZXRhaWwuZGF0YTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBDaGVjayBpZiBhIGNvbXBvc2l0aW9uIGV2ZW50IHdhcyB0cmlnZ2VyZWQgYnkgS29yZWFuIElNRS5cbiAqIE91ciBmYWxsYmFjayBtb2RlIGRvZXMgbm90IHdvcmsgd2VsbCB3aXRoIElFJ3MgS29yZWFuIElNRSxcbiAqIHNvIGp1c3QgdXNlIG5hdGl2ZSBjb21wb3NpdGlvbiBldmVudHMgd2hlbiBLb3JlYW4gSU1FIGlzIHVzZWQuXG4gKiBBbHRob3VnaCBDb21wb3NpdGlvbkV2ZW50LmxvY2FsZSBwcm9wZXJ0eSBpcyBkZXByZWNhdGVkLFxuICogaXQgaXMgYXZhaWxhYmxlIGluIElFLCB3aGVyZSBvdXIgZmFsbGJhY2sgbW9kZSBpcyBlbmFibGVkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIG5hdGl2ZUV2ZW50LmxvY2FsZSA9PT0gJ2tvJztcbn0gLy8gVHJhY2sgdGhlIGN1cnJlbnQgSU1FIGNvbXBvc2l0aW9uIHN0YXR1cywgaWYgYW55LlxuXG5cbnZhciBpc0NvbXBvc2luZyA9IGZhbHNlO1xuLyoqXG4gKiBAcmV0dXJuIHs/b2JqZWN0fSBBIFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQuXG4gKi9cblxuZnVuY3Rpb24gZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGV2ZW50VHlwZTtcbiAgdmFyIGZhbGxiYWNrRGF0YTtcblxuICBpZiAoY2FuVXNlQ29tcG9zaXRpb25FdmVudCkge1xuICAgIGV2ZW50VHlwZSA9IGdldENvbXBvc2l0aW9uRXZlbnRUeXBlKGRvbUV2ZW50TmFtZSk7XG4gIH0gZWxzZSBpZiAoIWlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICBldmVudFR5cGUgPSAnb25Db21wb3NpdGlvblN0YXJ0JztcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25FbmQnO1xuICB9XG5cbiAgaWYgKCFldmVudFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkpIHtcbiAgICAvLyBUaGUgY3VycmVudCBjb21wb3NpdGlvbiBpcyBzdG9yZWQgc3RhdGljYWxseSBhbmQgbXVzdCBub3QgYmVcbiAgICAvLyBvdmVyd3JpdHRlbiB3aGlsZSBjb21wb3NpdGlvbiBjb250aW51ZXMuXG4gICAgaWYgKCFpc0NvbXBvc2luZyAmJiBldmVudFR5cGUgPT09ICdvbkNvbXBvc2l0aW9uU3RhcnQnKSB7XG4gICAgICBpc0NvbXBvc2luZyA9IGluaXRpYWxpemUobmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvbkVuZCcpIHtcbiAgICAgIGlmIChpc0NvbXBvc2luZykge1xuICAgICAgICBmYWxsYmFja0RhdGEgPSBnZXREYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCBldmVudFR5cGUpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50KGV2ZW50VHlwZSwgZG9tRXZlbnROYW1lLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuXG4gICAgaWYgKGZhbGxiYWNrRGF0YSkge1xuICAgICAgLy8gSW5qZWN0IGRhdGEgZ2VuZXJhdGVkIGZyb20gZmFsbGJhY2sgcGF0aCBpbnRvIHRoZSBzeW50aGV0aWMgZXZlbnQuXG4gICAgICAvLyBUaGlzIG1hdGNoZXMgdGhlIHByb3BlcnR5IG9mIG5hdGl2ZSBDb21wb3NpdGlvbkV2ZW50SW50ZXJmYWNlLlxuICAgICAgZXZlbnQuZGF0YSA9IGZhbGxiYWNrRGF0YTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGN1c3RvbURhdGEgPSBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgICAgaWYgKGN1c3RvbURhdGEgIT09IG51bGwpIHtcbiAgICAgICAgZXZlbnQuZGF0YSA9IGN1c3RvbURhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogSWYgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50cyBhcmUgYXZhaWxhYmxlLCBvdXIgZ29hbCBpcyB0byBtYWtlXG4gICAgICAgKiB1c2Ugb2YgdGhlbS4gSG93ZXZlciwgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2U6IHRoZSBzcGFjZWJhciBrZXkuXG4gICAgICAgKiBJbiBXZWJraXQsIHByZXZlbnRpbmcgZGVmYXVsdCBvbiBhIHNwYWNlYmFyIGB0ZXh0SW5wdXRgIGV2ZW50XG4gICAgICAgKiBjYW5jZWxzIGNoYXJhY3RlciBpbnNlcnRpb24sIGJ1dCBpdCAqYWxzbyogY2F1c2VzIHRoZSBicm93c2VyXG4gICAgICAgKiB0byBmYWxsIGJhY2sgdG8gaXRzIGRlZmF1bHQgc3BhY2ViYXIgYmVoYXZpb3Igb2Ygc2Nyb2xsaW5nIHRoZVxuICAgICAgICogcGFnZS5cbiAgICAgICAqXG4gICAgICAgKiBUcmFja2luZyBhdDpcbiAgICAgICAqIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNTUxMDNcbiAgICAgICAqXG4gICAgICAgKiBUbyBhdm9pZCB0aGlzIGlzc3VlLCB1c2UgdGhlIGtleXByZXNzIGV2ZW50IGFzIGlmIG5vIGB0ZXh0SW5wdXRgXG4gICAgICAgKiBldmVudCBpcyBhdmFpbGFibGUuXG4gICAgICAgKi9cbiAgICAgIHZhciB3aGljaCA9IG5hdGl2ZUV2ZW50LndoaWNoO1xuXG4gICAgICBpZiAod2hpY2ggIT09IFNQQUNFQkFSX0NPREUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhhc1NwYWNlS2V5cHJlc3MgPSB0cnVlO1xuICAgICAgcmV0dXJuIFNQQUNFQkFSX0NIQVI7XG5cbiAgICBjYXNlICd0ZXh0SW5wdXQnOlxuICAgICAgLy8gUmVjb3JkIHRoZSBjaGFyYWN0ZXJzIHRvIGJlIGFkZGVkIHRvIHRoZSBET00uXG4gICAgICB2YXIgY2hhcnMgPSBuYXRpdmVFdmVudC5kYXRhOyAvLyBJZiBpdCdzIGEgc3BhY2ViYXIgY2hhcmFjdGVyLCBhc3N1bWUgdGhhdCB3ZSBoYXZlIGFscmVhZHkgaGFuZGxlZFxuICAgICAgLy8gaXQgYXQgdGhlIGtleXByZXNzIGxldmVsIGFuZCBiYWlsIGltbWVkaWF0ZWx5LiBBbmRyb2lkIENocm9tZVxuICAgICAgLy8gZG9lc24ndCBnaXZlIHVzIGtleWNvZGVzLCBzbyB3ZSBuZWVkIHRvIGlnbm9yZSBpdC5cblxuICAgICAgaWYgKGNoYXJzID09PSBTUEFDRUJBUl9DSEFSICYmIGhhc1NwYWNlS2V5cHJlc3MpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGFycztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBGb3Igb3RoZXIgbmF0aXZlIGV2ZW50IHR5cGVzLCBkbyBub3RoaW5nLlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90IHByb3ZpZGUgdGhlIGB0ZXh0SW5wdXRgIGV2ZW50LCBleHRyYWN0IHRoZVxuICogYXBwcm9wcmlhdGUgc3RyaW5nIHRvIHVzZSBmb3IgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIElmIHdlIGFyZSBjdXJyZW50bHkgY29tcG9zaW5nIChJTUUpIGFuZCB1c2luZyBhIGZhbGxiYWNrIHRvIGRvIHNvLFxuICAvLyB0cnkgdG8gZXh0cmFjdCB0aGUgY29tcG9zZWQgY2hhcmFjdGVycyBmcm9tIHRoZSBmYWxsYmFjayBvYmplY3QuXG4gIC8vIElmIGNvbXBvc2l0aW9uIGV2ZW50IGlzIGF2YWlsYWJsZSwgd2UgZXh0cmFjdCBhIHN0cmluZyBvbmx5IGF0XG4gIC8vIGNvbXBvc2l0aW9uZXZlbnQsIG90aGVyd2lzZSBleHRyYWN0IGl0IGF0IGZhbGxiYWNrIGV2ZW50cy5cbiAgaWYgKGlzQ29tcG9zaW5nKSB7XG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NvbXBvc2l0aW9uZW5kJyB8fCAhY2FuVXNlQ29tcG9zaXRpb25FdmVudCAmJiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkpIHtcbiAgICAgIHZhciBjaGFycyA9IGdldERhdGEoKTtcbiAgICAgIHJlc2V0KCk7XG4gICAgICBpc0NvbXBvc2luZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuIGNoYXJzO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICAvLyBJZiBhIHBhc3RlIGV2ZW50IG9jY3VycyBhZnRlciBhIGtleXByZXNzLCB0aHJvdyBvdXQgdGhlIGlucHV0XG4gICAgICAvLyBjaGFycy4gUGFzdGUgZXZlbnRzIHNob3VsZCBub3QgbGVhZCB0byBCZWZvcmVJbnB1dCBldmVudHMuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8qKlxuICAgICAgICogQXMgb2YgdjI3LCBGaXJlZm94IG1heSBmaXJlIGtleXByZXNzIGV2ZW50cyBldmVuIHdoZW4gbm8gY2hhcmFjdGVyXG4gICAgICAgKiB3aWxsIGJlIGluc2VydGVkLiBBIGZldyBwb3NzaWJpbGl0aWVzOlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyBgMGAuIEFycm93IGtleXMsIEVzYyBrZXksIGV0Yy5cbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgdGhlIHByZXNzZWQga2V5IGNvZGUsIGJ1dCBubyBjaGFyIGlzIGF2YWlsYWJsZS5cbiAgICAgICAqICAgRXg6ICdBbHRHciArIGRgIGluIFBvbGlzaC4gVGhlcmUgaXMgbm8gbW9kaWZpZWQgY2hhcmFjdGVyIGZvclxuICAgICAgICogICB0aGlzIGtleSBjb21iaW5hdGlvbiBhbmQgbm8gY2hhcmFjdGVyIGlzIGluc2VydGVkIGludG8gdGhlXG4gICAgICAgKiAgIGRvY3VtZW50LCBidXQgRkYgZmlyZXMgdGhlIGtleXByZXNzIGZvciBjaGFyIGNvZGUgYDEwMGAgYW55d2F5LlxuICAgICAgICogICBObyBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgYSBjb21tYW5kIGNvbWJpbmF0aW9uIGlzXG4gICAgICAgKiAgIGJlaW5nIHVzZWQuIEV4OiBgQ21kK0NgLiBObyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQsIGFuZCBub1xuICAgICAgICogICBgaW5wdXRgIGV2ZW50IHdpbGwgb2NjdXIuXG4gICAgICAgKi9cbiAgICAgIGlmICghaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpKSB7XG4gICAgICAgIC8vIElFIGZpcmVzIHRoZSBga2V5cHJlc3NgIGV2ZW50IHdoZW4gYSB1c2VyIHR5cGVzIGFuIGVtb2ppIHZpYVxuICAgICAgICAvLyBUb3VjaCBrZXlib2FyZCBvZiBXaW5kb3dzLiAgSW4gc3VjaCBhIGNhc2UsIHRoZSBgY2hhcmAgcHJvcGVydHlcbiAgICAgICAgLy8gaG9sZHMgYW4gZW1vamkgY2hhcmFjdGVyIGxpa2UgYFxcdUQ4M0RcXHVERTBBYC4gIEJlY2F1c2UgaXRzIGxlbmd0aFxuICAgICAgICAvLyBpcyAyLCB0aGUgcHJvcGVydHkgYHdoaWNoYCBkb2VzIG5vdCByZXByZXNlbnQgYW4gZW1vamkgY29ycmVjdGx5LlxuICAgICAgICAvLyBJbiBzdWNoIGEgY2FzZSwgd2UgZGlyZWN0bHkgcmV0dXJuIHRoZSBgY2hhcmAgcHJvcGVydHkgaW5zdGVhZCBvZlxuICAgICAgICAvLyB1c2luZyBgd2hpY2hgLlxuICAgICAgICBpZiAobmF0aXZlRXZlbnQuY2hhciAmJiBuYXRpdmVFdmVudC5jaGFyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmF0aXZlRXZlbnQuY2hhcjtcbiAgICAgICAgfSBlbHNlIGlmIChuYXRpdmVFdmVudC53aGljaCkge1xuICAgICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKG5hdGl2ZUV2ZW50LndoaWNoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgJ2NvbXBvc2l0aW9uZW5kJzpcbiAgICAgIHJldHVybiB1c2VGYWxsYmFja0NvbXBvc2l0aW9uRGF0YSAmJiAhaXNVc2luZ0tvcmVhbklNRShuYXRpdmVFdmVudCkgPyBudWxsIDogbmF0aXZlRXZlbnQuZGF0YTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBFeHRyYWN0IGEgU3ludGhldGljSW5wdXRFdmVudCBmb3IgYGJlZm9yZUlucHV0YCwgYmFzZWQgb24gZWl0aGVyIG5hdGl2ZVxuICogYHRleHRJbnB1dGAgb3IgZmFsbGJhY2sgYmVoYXZpb3IuXG4gKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNJbnB1dEV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEJlZm9yZUlucHV0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgdmFyIGNoYXJzO1xuXG4gIGlmIChjYW5Vc2VUZXh0SW5wdXRFdmVudCkge1xuICAgIGNoYXJzID0gZ2V0TmF0aXZlQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSBlbHNlIHtcbiAgICBjaGFycyA9IGdldEZhbGxiYWNrQmVmb3JlSW5wdXRDaGFycyhkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBJZiBubyBjaGFyYWN0ZXJzIGFyZSBiZWluZyBpbnNlcnRlZCwgbm8gQmVmb3JlSW5wdXQgZXZlbnQgc2hvdWxkXG4gIC8vIGJlIGZpcmVkLlxuXG5cbiAgaWYgKCFjaGFycykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyh0YXJnZXRJbnN0LCAnb25CZWZvcmVJbnB1dCcpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNJbnB1dEV2ZW50KCdvbkJlZm9yZUlucHV0JywgJ2JlZm9yZWlucHV0JywgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcbiAgICBldmVudC5kYXRhID0gY2hhcnM7XG4gIH1cbn1cbi8qKlxuICogQ3JlYXRlIGFuIGBvbkJlZm9yZUlucHV0YCBldmVudCB0byBtYXRjaFxuICogaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAxMzExMDUvI2V2ZW50cy1pbnB1dGV2ZW50cy5cbiAqXG4gKiBUaGlzIGV2ZW50IHBsdWdpbiBpcyBiYXNlZCBvbiB0aGUgbmF0aXZlIGB0ZXh0SW5wdXRgIGV2ZW50XG4gKiBhdmFpbGFibGUgaW4gQ2hyb21lLCBTYWZhcmksIE9wZXJhLCBhbmQgSUUuIFRoaXMgZXZlbnQgZmlyZXMgYWZ0ZXJcbiAqIGBvbktleVByZXNzYCBhbmQgYG9uQ29tcG9zaXRpb25FbmRgLCBidXQgYmVmb3JlIGBvbklucHV0YC5cbiAqXG4gKiBgYmVmb3JlSW5wdXRgIGlzIHNwZWMnZCBidXQgbm90IGltcGxlbWVudGVkIGluIGFueSBicm93c2VycywgYW5kXG4gKiB0aGUgYGlucHV0YCBldmVudCBkb2VzIG5vdCBwcm92aWRlIGFueSB1c2VmdWwgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBoYXNcbiAqIGFjdHVhbGx5IGJlZW4gYWRkZWQsIGNvbnRyYXJ5IHRvIHRoZSBzcGVjLiBUaHVzLCBgdGV4dElucHV0YCBpcyB0aGUgYmVzdFxuICogYXZhaWxhYmxlIGV2ZW50IHRvIGlkZW50aWZ5IHRoZSBjaGFyYWN0ZXJzIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGluc2VydGVkXG4gKiBpbnRvIHRoZSB0YXJnZXQgbm9kZS5cbiAqXG4gKiBUaGlzIHBsdWdpbiBpcyBhbHNvIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBgY29tcG9zaXRpb25gIGV2ZW50cywgdGh1c1xuICogYWxsb3dpbmcgdXMgdG8gc2hhcmUgY29tcG9zaXRpb24gZmFsbGJhY2sgY29kZSBmb3IgYm90aCBgYmVmb3JlSW5wdXRgIGFuZFxuICogYGNvbXBvc2l0aW9uYCBldmVudCB0eXBlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICBleHRyYWN0Q29tcG9zaXRpb25FdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RoZS1pbnB1dC1lbGVtZW50Lmh0bWwjaW5wdXQtdHlwZS1hdHRyLXN1bW1hcnlcbiAqL1xudmFyIHN1cHBvcnRlZElucHV0VHlwZXMgPSB7XG4gIGNvbG9yOiB0cnVlLFxuICBkYXRlOiB0cnVlLFxuICBkYXRldGltZTogdHJ1ZSxcbiAgJ2RhdGV0aW1lLWxvY2FsJzogdHJ1ZSxcbiAgZW1haWw6IHRydWUsXG4gIG1vbnRoOiB0cnVlLFxuICBudW1iZXI6IHRydWUsXG4gIHBhc3N3b3JkOiB0cnVlLFxuICByYW5nZTogdHJ1ZSxcbiAgc2VhcmNoOiB0cnVlLFxuICB0ZWw6IHRydWUsXG4gIHRleHQ6IHRydWUsXG4gIHRpbWU6IHRydWUsXG4gIHVybDogdHJ1ZSxcbiAgd2VlazogdHJ1ZVxufTtcblxuZnVuY3Rpb24gaXNUZXh0SW5wdXRFbGVtZW50KGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuICBpZiAobm9kZU5hbWUgPT09ICdpbnB1dCcpIHtcbiAgICByZXR1cm4gISFzdXBwb3J0ZWRJbnB1dFR5cGVzW2VsZW0udHlwZV07XG4gIH1cblxuICBpZiAobm9kZU5hbWUgPT09ICd0ZXh0YXJlYScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgc3VwcG9ydGVkIGluIHRoZSBjdXJyZW50IGV4ZWN1dGlvbiBlbnZpcm9ubWVudC5cbiAqXG4gKiBOT1RFOiBUaGlzIHdpbGwgbm90IHdvcmsgY29ycmVjdGx5IGZvciBub24tZ2VuZXJpYyBldmVudHMgc3VjaCBhcyBgY2hhbmdlYCxcbiAqIGByZXNldGAsIGBsb2FkYCwgYGVycm9yYCwgYW5kIGBzZWxlY3RgLlxuICpcbiAqIEJvcnJvd3MgZnJvbSBNb2Rlcm5penIuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVN1ZmZpeCBFdmVudCBuYW1lLCBlLmcuIFwiY2xpY2tcIi5cbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhlIGV2ZW50IGlzIHN1cHBvcnRlZC5cbiAqIEBpbnRlcm5hbFxuICogQGxpY2Vuc2UgTW9kZXJuaXpyIDMuMC4wcHJlIChDdXN0b20gQnVpbGQpIHwgTUlUXG4gKi9cblxuZnVuY3Rpb24gaXNFdmVudFN1cHBvcnRlZChldmVudE5hbWVTdWZmaXgpIHtcbiAgaWYgKCFjYW5Vc2VET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgZXZlbnROYW1lID0gJ29uJyArIGV2ZW50TmFtZVN1ZmZpeDtcbiAgdmFyIGlzU3VwcG9ydGVkID0gKGV2ZW50TmFtZSBpbiBkb2N1bWVudCk7XG5cbiAgaWYgKCFpc1N1cHBvcnRlZCkge1xuICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoZXZlbnROYW1lLCAncmV0dXJuOycpO1xuICAgIGlzU3VwcG9ydGVkID0gdHlwZW9mIGVsZW1lbnRbZXZlbnROYW1lXSA9PT0gJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIHJldHVybiBpc1N1cHBvcnRlZDtcbn1cblxuZnVuY3Rpb24gcmVnaXN0ZXJFdmVudHMkMSgpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkNoYW5nZScsIFsnY2hhbmdlJywgJ2NsaWNrJywgJ2ZvY3VzaW4nLCAnZm9jdXNvdXQnLCAnaW5wdXQnLCAna2V5ZG93bicsICdrZXl1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBpbnN0LCBuYXRpdmVFdmVudCwgdGFyZ2V0KSB7XG4gIC8vIEZsYWcgdGhpcyBldmVudCBsb29wIGFzIG5lZWRpbmcgc3RhdGUgcmVzdG9yZS5cbiAgZW5xdWV1ZVN0YXRlUmVzdG9yZSh0YXJnZXQpO1xuICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGluc3QsICdvbkNoYW5nZScpO1xuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciBldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudCgnb25DaGFuZ2UnLCAnY2hhbmdlJywgbnVsbCwgbmF0aXZlRXZlbnQsIHRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn1cbi8qKlxuICogRm9yIElFIHNoaW1zXG4gKi9cblxuXG52YXIgYWN0aXZlRWxlbWVudCA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGNoYW5nZWAgZXZlbnRcbiAqL1xuXG5mdW5jdGlvbiBzaG91bGRVc2VDaGFuZ2VFdmVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgPT09ICdzZWxlY3QnIHx8IG5vZGVOYW1lID09PSAnaW5wdXQnICYmIGVsZW0udHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG5mdW5jdGlvbiBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGNyZWF0ZUFuZEFjY3VtdWxhdGVDaGFuZ2VFdmVudChkaXNwYXRjaFF1ZXVlLCBhY3RpdmVFbGVtZW50SW5zdCwgbmF0aXZlRXZlbnQsIGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KSk7IC8vIElmIGNoYW5nZSBhbmQgcHJvcGVydHljaGFuZ2UgYnViYmxlZCwgd2UnZCBqdXN0IGJpbmQgdG8gaXQgbGlrZSBhbGwgdGhlXG4gIC8vIG90aGVyIGV2ZW50cyBhbmQgaGF2ZSBpdCBnbyB0aHJvdWdoIFJlYWN0QnJvd3NlckV2ZW50RW1pdHRlci4gU2luY2UgaXRcbiAgLy8gZG9lc24ndCwgd2UgbWFudWFsbHkgbGlzdGVuIGZvciB0aGUgZXZlbnRzIGFuZCBzbyB3ZSBoYXZlIHRvIGVucXVldWUgYW5kXG4gIC8vIHByb2Nlc3MgdGhlIGFic3RyYWN0IGV2ZW50IG1hbnVhbGx5LlxuICAvL1xuICAvLyBCYXRjaGluZyBpcyBuZWNlc3NhcnkgaGVyZSBpbiBvcmRlciB0byBlbnN1cmUgdGhhdCBhbGwgZXZlbnQgaGFuZGxlcnMgcnVuXG4gIC8vIGJlZm9yZSB0aGUgbmV4dCByZXJlbmRlciAoaW5jbHVkaW5nIGV2ZW50IGhhbmRsZXJzIGF0dGFjaGVkIHRvIGFuY2VzdG9yXG4gIC8vIGVsZW1lbnRzIGluc3RlYWQgb2YgZGlyZWN0bHkgb24gdGhlIGlucHV0KS4gV2l0aG91dCB0aGlzLCBjb250cm9sbGVkXG4gIC8vIGNvbXBvbmVudHMgZG9uJ3Qgd29yayBwcm9wZXJseSBpbiBjb25qdW5jdGlvbiB3aXRoIGV2ZW50IGJ1YmJsaW5nIGJlY2F1c2VcbiAgLy8gdGhlIGNvbXBvbmVudCBpcyByZXJlbmRlcmVkIGFuZCB0aGUgdmFsdWUgcmV2ZXJ0ZWQgYmVmb3JlIGFsbCB0aGUgZXZlbnRcbiAgLy8gaGFuZGxlcnMgY2FuIHJ1bi4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzA4LlxuXG4gIGJhdGNoZWRVcGRhdGVzKHJ1bkV2ZW50SW5CYXRjaCwgZGlzcGF0Y2hRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkV2ZW50SW5CYXRjaChkaXNwYXRjaFF1ZXVlKSB7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIDApO1xufVxuXG5mdW5jdGlvbiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCkge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCk7XG5cbiAgaWYgKHVwZGF0ZVZhbHVlSWZDaGFuZ2VkKHRhcmdldE5vZGUpKSB7XG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgaW5wdXRgIGV2ZW50XG4gKi9cblxuXG52YXIgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gZmFsc2U7XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgLy8gSUU5IGNsYWltcyB0byBzdXBwb3J0IHRoZSBpbnB1dCBldmVudCBidXQgZmFpbHMgdG8gdHJpZ2dlciBpdCB3aGVuXG4gIC8vIGRlbGV0aW5nIHRleHQsIHNvIHdlIGlnbm9yZSBpdHMgaW5wdXQgZXZlbnRzLlxuICBpc0lucHV0RXZlbnRTdXBwb3J0ZWQgPSBpc0V2ZW50U3VwcG9ydGVkKCdpbnB1dCcpICYmICghZG9jdW1lbnQuZG9jdW1lbnRNb2RlIHx8IGRvY3VtZW50LmRvY3VtZW50TW9kZSA+IDkpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgU3RhcnRzIHRyYWNraW5nIHByb3BlcnR5Y2hhbmdlIGV2ZW50cyBvbiB0aGUgcGFzc2VkLWluIGVsZW1lbnRcbiAqIGFuZCBvdmVycmlkZSB0aGUgdmFsdWUgcHJvcGVydHkgc28gdGhhdCB3ZSBjYW4gZGlzdGluZ3Vpc2ggdXNlciBldmVudHMgZnJvbVxuICogdmFsdWUgY2hhbmdlcyBpbiBKUy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgYWN0aXZlRWxlbWVudCA9IHRhcmdldDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSB0YXJnZXRJbnN0O1xuICBhY3RpdmVFbGVtZW50LmF0dGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgUmVtb3ZlcyB0aGUgZXZlbnQgbGlzdGVuZXJzIGZyb20gdGhlIGN1cnJlbnRseS10cmFja2VkIGVsZW1lbnQsXG4gKiBpZiBhbnkgZXhpc3RzLlxuICovXG5cblxuZnVuY3Rpb24gc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKSB7XG4gIGlmICghYWN0aXZlRWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFjdGl2ZUVsZW1lbnQuZGV0YWNoRXZlbnQoJ29ucHJvcGVydHljaGFuZ2UnLCBoYW5kbGVQcm9wZXJ0eUNoYW5nZSk7XG4gIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICBhY3RpdmVFbGVtZW50SW5zdCA9IG51bGw7XG59XG4vKipcbiAqIChGb3IgSUUgPD05KSBIYW5kbGVzIGEgcHJvcGVydHljaGFuZ2UgZXZlbnQsIHNlbmRpbmcgYSBgY2hhbmdlYCBldmVudCBpZlxuICogdGhlIHZhbHVlIG9mIHRoZSBhY3RpdmUgZWxlbWVudCBoYXMgY2hhbmdlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5Q2hhbmdlKG5hdGl2ZUV2ZW50KSB7XG4gIGlmIChuYXRpdmVFdmVudC5wcm9wZXJ0eU5hbWUgIT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKGFjdGl2ZUVsZW1lbnRJbnN0KSkge1xuICAgIG1hbnVhbERpc3BhdGNoQ2hhbmdlRXZlbnQobmF0aXZlRXZlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldCwgdGFyZ2V0SW5zdCkge1xuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNpbicpIHtcbiAgICAvLyBJbiBJRTksIHByb3BlcnR5Y2hhbmdlIGZpcmVzIGZvciBtb3N0IGlucHV0IGV2ZW50cyBidXQgaXMgYnVnZ3kgYW5kXG4gICAgLy8gZG9lc24ndCBmaXJlIHdoZW4gdGV4dCBpcyBkZWxldGVkLCBidXQgY29udmVuaWVudGx5LCBzZWxlY3Rpb25jaGFuZ2VcbiAgICAvLyBhcHBlYXJzIHRvIGZpcmUgaW4gYWxsIG9mIHRoZSByZW1haW5pbmcgY2FzZXMgc28gd2UgY2F0Y2ggdGhvc2UgYW5kXG4gICAgLy8gZm9yd2FyZCB0aGUgZXZlbnQgaWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkXG4gICAgLy8gSW4gZWl0aGVyIGNhc2UsIHdlIGRvbid0IHdhbnQgdG8gY2FsbCB0aGUgZXZlbnQgaGFuZGxlciBpZiB0aGUgdmFsdWVcbiAgICAvLyBpcyBjaGFuZ2VkIGZyb20gSlMgc28gd2UgcmVkZWZpbmUgYSBzZXR0ZXIgZm9yIGAudmFsdWVgIHRoYXQgdXBkYXRlc1xuICAgIC8vIG91ciBhY3RpdmVFbGVtZW50VmFsdWUgdmFyaWFibGUsIGFsbG93aW5nIHVzIHRvIGlnbm9yZSB0aG9zZSBjaGFuZ2VzXG4gICAgLy9cbiAgICAvLyBzdG9wV2F0Y2hpbmcoKSBzaG91bGQgYmUgYSBub29wIGhlcmUgYnV0IHdlIGNhbGwgaXQganVzdCBpbiBjYXNlIHdlXG4gICAgLy8gbWlzc2VkIGEgYmx1ciBldmVudCBzb21laG93LlxuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gICAgc3RhcnRXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKHRhcmdldCwgdGFyZ2V0SW5zdCk7XG4gIH0gZWxzZSBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgc3RvcFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UoKTtcbiAgfVxufSAvLyBGb3IgSUU4IGFuZCBJRTkuXG5cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3NlbGVjdGlvbmNoYW5nZScgfHwgZG9tRXZlbnROYW1lID09PSAna2V5dXAnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nKSB7XG4gICAgLy8gT24gdGhlIHNlbGVjdGlvbmNoYW5nZSBldmVudCwgdGhlIHRhcmdldCBpcyBqdXN0IGRvY3VtZW50IHdoaWNoIGlzbid0XG4gICAgLy8gaGVscGZ1bCBmb3IgdXMgc28ganVzdCBjaGVjayBhY3RpdmVFbGVtZW50IGluc3RlYWQuXG4gICAgLy9cbiAgICAvLyA5OSUgb2YgdGhlIHRpbWUsIGtleWRvd24gYW5kIGtleXVwIGFyZW4ndCBuZWNlc3NhcnkuIElFOCBmYWlscyB0byBmaXJlXG4gICAgLy8gcHJvcGVydHljaGFuZ2Ugb24gdGhlIGZpcnN0IGlucHV0IGV2ZW50IGFmdGVyIHNldHRpbmcgYHZhbHVlYCBmcm9tIGFcbiAgICAvLyBzY3JpcHQgYW5kIGZpcmVzIG9ubHkga2V5ZG93biwga2V5cHJlc3MsIGtleXVwLiBDYXRjaGluZyBrZXl1cCB1c3VhbGx5XG4gICAgLy8gZ2V0cyBpdCBhbmQgY2F0Y2hpbmcga2V5ZG93biBsZXRzIHVzIGZpcmUgYW4gZXZlbnQgZm9yIHRoZSBmaXJzdFxuICAgIC8vIGtleXN0cm9rZSBpZiB1c2VyIGRvZXMgYSBrZXkgcmVwZWF0IChpdCdsbCBiZSBhIGxpdHRsZSBkZWxheWVkOiByaWdodFxuICAgIC8vIGJlZm9yZSB0aGUgc2Vjb25kIGtleXN0cm9rZSkuIE90aGVyIGlucHV0IG1ldGhvZHMgKGUuZy4sIHBhc3RlKSBzZWVtIHRvXG4gICAgLy8gZmlyZSBzZWxlY3Rpb25jaGFuZ2Ugbm9ybWFsbHkuXG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCk7XG4gIH1cbn1cbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjbGlja2AgZXZlbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHNob3VsZFVzZUNsaWNrRXZlbnQoZWxlbSkge1xuICAvLyBVc2UgdGhlIGBjbGlja2AgZXZlbnQgdG8gZGV0ZWN0IGNoYW5nZXMgdG8gY2hlY2tib3ggYW5kIHJhZGlvIGlucHV0cy5cbiAgLy8gVGhpcyBhcHByb2FjaCB3b3JrcyBhY3Jvc3MgYWxsIGJyb3dzZXJzLCB3aGVyZWFzIGBjaGFuZ2VgIGRvZXMgbm90IGZpcmVcbiAgLy8gdW50aWwgYGJsdXJgIGluIElFOC5cbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKGVsZW0udHlwZSA9PT0gJ2NoZWNrYm94JyB8fCBlbGVtLnR5cGUgPT09ICdyYWRpbycpO1xufVxuXG5mdW5jdGlvbiBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NsaWNrJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2lucHV0JyB8fCBkb21FdmVudE5hbWUgPT09ICdjaGFuZ2UnKSB7XG4gICAgcmV0dXJuIGdldEluc3RJZlZhbHVlQ2hhbmdlZCh0YXJnZXRJbnN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKG5vZGUpIHtcbiAgdmFyIHN0YXRlID0gbm9kZS5fd3JhcHBlclN0YXRlO1xuXG4gIGlmICghc3RhdGUgfHwgIXN0YXRlLmNvbnRyb2xsZWQgfHwgbm9kZS50eXBlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBJZiBjb250cm9sbGVkLCBhc3NpZ24gdGhlIHZhbHVlIGF0dHJpYnV0ZSB0byB0aGUgY3VycmVudCB2YWx1ZSBvbiBibHVyXG4gICAgc2V0RGVmYXVsdFZhbHVlKG5vZGUsICdudW1iZXInLCBub2RlLnZhbHVlKTtcbiAgfVxufVxuLyoqXG4gKiBUaGlzIHBsdWdpbiBjcmVhdGVzIGFuIGBvbkNoYW5nZWAgZXZlbnQgdGhhdCBub3JtYWxpemVzIGNoYW5nZSBldmVudHNcbiAqIGFjcm9zcyBmb3JtIGVsZW1lbnRzLiBUaGlzIGV2ZW50IGZpcmVzIGF0IGEgdGltZSB3aGVuIGl0J3MgcG9zc2libGUgdG9cbiAqIGNoYW5nZSB0aGUgZWxlbWVudCdzIHZhbHVlIHdpdGhvdXQgc2VlaW5nIGEgZmxpY2tlci5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBzZWxlY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG4gIHZhciBnZXRUYXJnZXRJbnN0RnVuYywgaGFuZGxlRXZlbnRGdW5jO1xuXG4gIGlmIChzaG91bGRVc2VDaGFuZ2VFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNoYW5nZUV2ZW50O1xuICB9IGVsc2UgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSkge1xuICAgIGlmIChpc0lucHV0RXZlbnRTdXBwb3J0ZWQpIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0T3JDaGFuZ2VFdmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgICAgaGFuZGxlRXZlbnRGdW5jID0gaGFuZGxlRXZlbnRzRm9ySW5wdXRFdmVudFBvbHlmaWxsO1xuICAgIH1cbiAgfSBlbHNlIGlmIChzaG91bGRVc2VDbGlja0V2ZW50KHRhcmdldE5vZGUpKSB7XG4gICAgZ2V0VGFyZ2V0SW5zdEZ1bmMgPSBnZXRUYXJnZXRJbnN0Rm9yQ2xpY2tFdmVudDtcbiAgfVxuXG4gIGlmIChnZXRUYXJnZXRJbnN0RnVuYykge1xuICAgIHZhciBpbnN0ID0gZ2V0VGFyZ2V0SW5zdEZ1bmMoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KTtcblxuICAgIGlmIChpbnN0KSB7XG4gICAgICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBpZiAoaGFuZGxlRXZlbnRGdW5jKSB7XG4gICAgaGFuZGxlRXZlbnRGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0Tm9kZSwgdGFyZ2V0SW5zdCk7XG4gIH0gLy8gV2hlbiBibHVycmluZywgc2V0IHRoZSB2YWx1ZSBhdHRyaWJ1dGUgZm9yIG51bWJlciBpbnB1dHNcblxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdmb2N1c291dCcpIHtcbiAgICBoYW5kbGVDb250cm9sbGVkSW5wdXRCbHVyKHRhcmdldE5vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDIoKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uTW91c2VFbnRlcicsIFsnbW91c2VvdXQnLCAnbW91c2VvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlTGVhdmUnLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Qb2ludGVyRW50ZXInLCBbJ3BvaW50ZXJvdXQnLCAncG9pbnRlcm92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckxlYXZlJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xufVxuLyoqXG4gKiBGb3IgYWxtb3N0IGV2ZXJ5IGludGVyYWN0aW9uIHdlIGNhcmUgYWJvdXQsIHRoZXJlIHdpbGwgYmUgYm90aCBhIHRvcC1sZXZlbFxuICogYG1vdXNlb3ZlcmAgYW5kIGBtb3VzZW91dGAgZXZlbnQgdGhhdCBvY2N1cnMuIE9ubHkgdXNlIGBtb3VzZW91dGAgc28gdGhhdFxuICogd2UgZG8gbm90IGV4dHJhY3QgZHVwbGljYXRlIGV2ZW50cy4gSG93ZXZlciwgbW92aW5nIHRoZSBtb3VzZSBpbnRvIHRoZVxuICogYnJvd3NlciBmcm9tIG91dHNpZGUgd2lsbCBub3QgZmlyZSBhIGBtb3VzZW91dGAgZXZlbnQuIEluIHRoaXMgY2FzZSwgd2UgdXNlXG4gKiB0aGUgYG1vdXNlb3ZlcmAgdG9wLWxldmVsIGV2ZW50LlxuICovXG5cblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIGlzT3ZlckV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdmVyJyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3Zlcic7XG4gIHZhciBpc091dEV2ZW50ID0gZG9tRXZlbnROYW1lID09PSAnbW91c2VvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnO1xuXG4gIGlmIChpc092ZXJFdmVudCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX1JFUExBWUVEKSA9PT0gMCkge1xuICAgIC8vIElmIHRoaXMgaXMgYW4gb3ZlciBldmVudCB3aXRoIGEgdGFyZ2V0LCB3ZSBtaWdodCBoYXZlIGFscmVhZHkgZGlzcGF0Y2hlZFxuICAgIC8vIHRoZSBldmVudCBpbiB0aGUgb3V0IGV2ZW50IG9mIHRoZSBvdGhlciB0YXJnZXQuIElmIHRoaXMgaXMgcmVwbGF5ZWQsXG4gICAgLy8gdGhlbiBpdCdzIGJlY2F1c2Ugd2UgY291bGRuJ3QgZGlzcGF0Y2ggYWdhaW5zdCB0aGlzIHRhcmdldCBwcmV2aW91c2x5XG4gICAgLy8gc28gd2UgaGF2ZSB0byBkbyBpdCBub3cgaW5zdGVhZC5cbiAgICB2YXIgcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQuZnJvbUVsZW1lbnQ7XG5cbiAgICBpZiAocmVsYXRlZCkge1xuICAgICAgLy8gSWYgdGhlIHJlbGF0ZWQgbm9kZSBpcyBtYW5hZ2VkIGJ5IFJlYWN0LCB3ZSBjYW4gYXNzdW1lIHRoYXQgd2UgaGF2ZVxuICAgICAgLy8gYWxyZWFkeSBkaXNwYXRjaGVkIHRoZSBjb3JyZXNwb25kaW5nIGV2ZW50cyBkdXJpbmcgaXRzIG1vdXNlb3V0LlxuICAgICAgaWYgKGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHJlbGF0ZWQpIHx8IGlzQ29udGFpbmVyTWFya2VkQXNSb290KHJlbGF0ZWQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIWlzT3V0RXZlbnQgJiYgIWlzT3ZlckV2ZW50KSB7XG4gICAgLy8gTXVzdCBub3QgYmUgYSBtb3VzZSBvciBwb2ludGVyIGluIG9yIG91dCAtIGlnbm9yaW5nLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB3aW47IC8vIFRPRE86IHdoeSBpcyB0aGlzIG51bGxhYmxlIGluIHRoZSB0eXBlcyBidXQgd2UgcmVhZCBmcm9tIGl0P1xuXG4gIGlmIChuYXRpdmVFdmVudFRhcmdldC53aW5kb3cgPT09IG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgLy8gYG5hdGl2ZUV2ZW50VGFyZ2V0YCBpcyBwcm9iYWJseSBhIHdpbmRvdyBvYmplY3QuXG4gICAgd2luID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETzogRmlndXJlIG91dCB3aHkgYG93bmVyRG9jdW1lbnRgIGlzIHNvbWV0aW1lcyB1bmRlZmluZWQgaW4gSUU4LlxuICAgIHZhciBkb2MgPSBuYXRpdmVFdmVudFRhcmdldC5vd25lckRvY3VtZW50O1xuXG4gICAgaWYgKGRvYykge1xuICAgICAgd2luID0gZG9jLmRlZmF1bHRWaWV3IHx8IGRvYy5wYXJlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpbiA9IHdpbmRvdztcbiAgICB9XG4gIH1cblxuICB2YXIgZnJvbTtcbiAgdmFyIHRvO1xuXG4gIGlmIChpc091dEV2ZW50KSB7XG4gICAgdmFyIF9yZWxhdGVkID0gbmF0aXZlRXZlbnQucmVsYXRlZFRhcmdldCB8fCBuYXRpdmVFdmVudC50b0VsZW1lbnQ7XG5cbiAgICBmcm9tID0gdGFyZ2V0SW5zdDtcbiAgICB0byA9IF9yZWxhdGVkID8gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoX3JlbGF0ZWQpIDogbnVsbDtcblxuICAgIGlmICh0byAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5lYXJlc3RNb3VudGVkID0gZ2V0TmVhcmVzdE1vdW50ZWRGaWJlcih0byk7XG5cbiAgICAgIGlmICh0byAhPT0gbmVhcmVzdE1vdW50ZWQgfHwgdG8udGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIHRvLnRhZyAhPT0gSG9zdFRleHQpIHtcbiAgICAgICAgdG8gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBNb3ZpbmcgdG8gYSBub2RlIGZyb20gb3V0c2lkZSB0aGUgd2luZG93LlxuICAgIGZyb20gPSBudWxsO1xuICAgIHRvID0gdGFyZ2V0SW5zdDtcbiAgfVxuXG4gIGlmIChmcm9tID09PSB0bykge1xuICAgIC8vIE5vdGhpbmcgcGVydGFpbnMgdG8gb3VyIG1hbmFnZWQgY29tcG9uZW50cy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgdmFyIGxlYXZlRXZlbnRUeXBlID0gJ29uTW91c2VMZWF2ZSc7XG4gIHZhciBlbnRlckV2ZW50VHlwZSA9ICdvbk1vdXNlRW50ZXInO1xuICB2YXIgZXZlbnRUeXBlUHJlZml4ID0gJ21vdXNlJztcblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm91dCcgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInKSB7XG4gICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljUG9pbnRlckV2ZW50O1xuICAgIGxlYXZlRXZlbnRUeXBlID0gJ29uUG9pbnRlckxlYXZlJztcbiAgICBlbnRlckV2ZW50VHlwZSA9ICdvblBvaW50ZXJFbnRlcic7XG4gICAgZXZlbnRUeXBlUHJlZml4ID0gJ3BvaW50ZXInO1xuICB9XG5cbiAgdmFyIGZyb21Ob2RlID0gZnJvbSA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZShmcm9tKTtcbiAgdmFyIHRvTm9kZSA9IHRvID09IG51bGwgPyB3aW4gOiBnZXROb2RlRnJvbUluc3RhbmNlKHRvKTtcbiAgdmFyIGxlYXZlID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihsZWF2ZUV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2xlYXZlJywgZnJvbSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgbGVhdmUudGFyZ2V0ID0gZnJvbU5vZGU7XG4gIGxlYXZlLnJlbGF0ZWRUYXJnZXQgPSB0b05vZGU7XG4gIHZhciBlbnRlciA9IG51bGw7IC8vIFdlIHNob3VsZCBvbmx5IHByb2Nlc3MgdGhpcyBuYXRpdmVFdmVudCBpZiB3ZSBhcmUgcHJvY2Vzc2luZ1xuICAvLyB0aGUgZmlyc3QgYW5jZXN0b3IuIE5leHQgdGltZSwgd2Ugd2lsbCBpZ25vcmUgdGhlIGV2ZW50LlxuXG4gIHZhciBuYXRpdmVUYXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChuYXRpdmVUYXJnZXRJbnN0ID09PSB0YXJnZXRJbnN0KSB7XG4gICAgdmFyIGVudGVyRXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKGVudGVyRXZlbnRUeXBlLCBldmVudFR5cGVQcmVmaXggKyAnZW50ZXInLCB0bywgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBlbnRlckV2ZW50LnRhcmdldCA9IHRvTm9kZTtcbiAgICBlbnRlckV2ZW50LnJlbGF0ZWRUYXJnZXQgPSBmcm9tTm9kZTtcbiAgICBlbnRlciA9IGVudGVyRXZlbnQ7XG4gIH1cblxuICBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlLCBlbnRlciwgZnJvbSwgdG8pO1xufVxuXG4vKipcbiAqIGlubGluZWQgT2JqZWN0LmlzIHBvbHlmaWxsIHRvIGF2b2lkIHJlcXVpcmluZyBjb25zdW1lcnMgc2hpcCB0aGVpciBvd25cbiAqIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9pc1xuICovXG5mdW5jdGlvbiBpcyh4LCB5KSB7XG4gIHJldHVybiB4ID09PSB5ICYmICh4ICE9PSAwIHx8IDEgLyB4ID09PSAxIC8geSkgfHwgeCAhPT0geCAmJiB5ICE9PSB5IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIDtcbn1cblxudmFyIG9iamVjdElzID0gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGlzO1xuXG52YXIgaGFzT3duUHJvcGVydHkkMiA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG4vKipcbiAqIFBlcmZvcm1zIGVxdWFsaXR5IGJ5IGl0ZXJhdGluZyB0aHJvdWdoIGtleXMgb24gYW4gb2JqZWN0IGFuZCByZXR1cm5pbmcgZmFsc2VcbiAqIHdoZW4gYW55IGtleSBoYXMgdmFsdWVzIHdoaWNoIGFyZSBub3Qgc3RyaWN0bHkgZXF1YWwgYmV0d2VlbiB0aGUgYXJndW1lbnRzLlxuICogUmV0dXJucyB0cnVlIHdoZW4gdGhlIHZhbHVlcyBvZiBhbGwga2V5cyBhcmUgc3RyaWN0bHkgZXF1YWwuXG4gKi9cblxuZnVuY3Rpb24gc2hhbGxvd0VxdWFsKG9iakEsIG9iakIpIHtcbiAgaWYgKG9iamVjdElzKG9iakEsIG9iakIpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAodHlwZW9mIG9iakEgIT09ICdvYmplY3QnIHx8IG9iakEgPT09IG51bGwgfHwgdHlwZW9mIG9iakIgIT09ICdvYmplY3QnIHx8IG9iakIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIga2V5c0EgPSBPYmplY3Qua2V5cyhvYmpBKTtcbiAgdmFyIGtleXNCID0gT2JqZWN0LmtleXMob2JqQik7XG5cbiAgaWYgKGtleXNBLmxlbmd0aCAhPT0ga2V5c0IubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFRlc3QgZm9yIEEncyBrZXlzIGRpZmZlcmVudCBmcm9tIEIuXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNBLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNPd25Qcm9wZXJ0eSQyLmNhbGwob2JqQiwga2V5c0FbaV0pIHx8ICFvYmplY3RJcyhvYmpBW2tleXNBW2ldXSwgb2JqQltrZXlzQVtpXV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogR2l2ZW4gYW55IG5vZGUgcmV0dXJuIHRoZSBmaXJzdCBsZWFmIG5vZGUgd2l0aG91dCBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9XG4gKi9cblxuZnVuY3Rpb24gZ2V0TGVhZk5vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSAmJiBub2RlLmZpcnN0Q2hpbGQpIHtcbiAgICBub2RlID0gbm9kZS5maXJzdENoaWxkO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG4vKipcbiAqIEdldCB0aGUgbmV4dCBzaWJsaW5nIHdpdGhpbiBhIGNvbnRhaW5lci4gVGhpcyB3aWxsIHdhbGsgdXAgdGhlXG4gKiBET00gaWYgYSBub2RlJ3Mgc2libGluZ3MgaGF2ZSBiZWVuIGV4aGF1c3RlZC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEByZXR1cm4gez9ET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0U2libGluZ05vZGUobm9kZSkge1xuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5leHRTaWJsaW5nKSB7XG4gICAgICByZXR1cm4gbm9kZS5uZXh0U2libGluZztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICB9XG59XG4vKipcbiAqIEdldCBvYmplY3QgZGVzY3JpYmluZyB0aGUgbm9kZXMgd2hpY2ggY29udGFpbiBjaGFyYWN0ZXJzIGF0IG9mZnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IHJvb3RcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KHJvb3QsIG9mZnNldCkge1xuICB2YXIgbm9kZSA9IGdldExlYWZOb2RlKHJvb3QpO1xuICB2YXIgbm9kZVN0YXJ0ID0gMDtcbiAgdmFyIG5vZGVFbmQgPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgbm9kZUVuZCA9IG5vZGVTdGFydCArIG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuXG4gICAgICBpZiAobm9kZVN0YXJ0IDw9IG9mZnNldCAmJiBub2RlRW5kID49IG9mZnNldCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgb2Zmc2V0OiBvZmZzZXQgLSBub2RlU3RhcnRcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgbm9kZVN0YXJ0ID0gbm9kZUVuZDtcbiAgICB9XG5cbiAgICBub2RlID0gZ2V0TGVhZk5vZGUoZ2V0U2libGluZ05vZGUobm9kZSkpO1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBvdXRlck5vZGVcbiAqIEByZXR1cm4gez9vYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gZ2V0T2Zmc2V0cyhvdXRlck5vZGUpIHtcbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBvdXRlck5vZGUub3duZXJEb2N1bWVudDtcbiAgdmFyIHdpbiA9IG93bmVyRG9jdW1lbnQgJiYgb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uICYmIHdpbi5nZXRTZWxlY3Rpb24oKTtcblxuICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGFuY2hvck5vZGUgPSBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldCA9IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGUgPSBzZWxlY3Rpb24uZm9jdXNOb2RlLFxuICAgICAgZm9jdXNPZmZzZXQgPSBzZWxlY3Rpb24uZm9jdXNPZmZzZXQ7IC8vIEluIEZpcmVmb3gsIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBjYW4gYmUgXCJhbm9ueW1vdXMgZGl2c1wiLCBlLmcuIHRoZVxuICAvLyB1cC9kb3duIGJ1dHRvbnMgb24gYW4gPGlucHV0IHR5cGU9XCJudW1iZXJcIj4uIEFub255bW91cyBkaXZzIGRvIG5vdCBzZWVtIHRvXG4gIC8vIGV4cG9zZSBwcm9wZXJ0aWVzLCB0cmlnZ2VyaW5nIGEgXCJQZXJtaXNzaW9uIGRlbmllZCBlcnJvclwiIGlmIGFueSBvZiBpdHNcbiAgLy8gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQuIFRoZSBvbmx5IHNlZW1pbmdseSBwb3NzaWJsZSB3YXkgdG8gYXZvaWQgZXJyb3JpbmdcbiAgLy8gaXMgdG8gYWNjZXNzIGEgcHJvcGVydHkgdGhhdCB0eXBpY2FsbHkgd29ya3MgZm9yIG5vbi1hbm9ueW1vdXMgZGl2cyBhbmRcbiAgLy8gY2F0Y2ggYW55IGVycm9yIHRoYXQgbWF5IG90aGVyd2lzZSBhcmlzZS4gU2VlXG4gIC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTIwODQyN1xuXG4gIHRyeSB7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gICAgYW5jaG9yTm9kZS5ub2RlVHlwZTtcbiAgICBmb2N1c05vZGUubm9kZVR5cGU7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtZXhwcmVzc2lvbnMgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KTtcbn1cbi8qKlxuICogUmV0dXJucyB7c3RhcnQsIGVuZH0gd2hlcmUgYHN0YXJ0YCBpcyB0aGUgY2hhcmFjdGVyL2NvZGVwb2ludCBpbmRleCBvZlxuICogKGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCkgd2l0aGluIHRoZSB0ZXh0Q29udGVudCBvZiBgb3V0ZXJOb2RlYCwgYW5kXG4gKiBgZW5kYCBpcyB0aGUgaW5kZXggb2YgKGZvY3VzTm9kZSwgZm9jdXNPZmZzZXQpLlxuICpcbiAqIFJldHVybnMgbnVsbCBpZiB5b3UgcGFzcyBpbiBnYXJiYWdlIGlucHV0IGJ1dCB3ZSBzaG91bGQgcHJvYmFibHkganVzdCBjcmFzaC5cbiAqXG4gKiBFeHBvcnRlZCBvbmx5IGZvciB0ZXN0aW5nLlxuICovXG5cbmZ1bmN0aW9uIGdldE1vZGVybk9mZnNldHNGcm9tUG9pbnRzKG91dGVyTm9kZSwgYW5jaG9yTm9kZSwgYW5jaG9yT2Zmc2V0LCBmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KSB7XG4gIHZhciBsZW5ndGggPSAwO1xuICB2YXIgc3RhcnQgPSAtMTtcbiAgdmFyIGVuZCA9IC0xO1xuICB2YXIgaW5kZXhXaXRoaW5BbmNob3IgPSAwO1xuICB2YXIgaW5kZXhXaXRoaW5Gb2N1cyA9IDA7XG4gIHZhciBub2RlID0gb3V0ZXJOb2RlO1xuICB2YXIgcGFyZW50Tm9kZSA9IG51bGw7XG5cbiAgb3V0ZXI6IHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIG5leHQgPSBudWxsO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlID09PSBhbmNob3JOb2RlICYmIChhbmNob3JPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aCArIGFuY2hvck9mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZvY3VzTm9kZSAmJiAoZm9jdXNPZmZzZXQgPT09IDAgfHwgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSkge1xuICAgICAgICBlbmQgPSBsZW5ndGggKyBmb2N1c09mZnNldDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgICBsZW5ndGggKz0gbm9kZS5ub2RlVmFsdWUubGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBpZiAoKG5leHQgPSBub2RlLmZpcnN0Q2hpbGQpID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIGZpcnN0IGNoaWxkIGBuZXh0YC5cblxuXG4gICAgICBwYXJlbnROb2RlID0gbm9kZTtcbiAgICAgIG5vZGUgPSBuZXh0O1xuICAgIH1cblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gb3V0ZXJOb2RlKSB7XG4gICAgICAgIC8vIElmIGBvdXRlck5vZGVgIGhhcyBjaGlsZHJlbiwgdGhpcyBpcyBhbHdheXMgdGhlIHNlY29uZCB0aW1lIHZpc2l0aW5nXG4gICAgICAgIC8vIGl0LiBJZiBpdCBoYXMgbm8gY2hpbGRyZW4sIHRoaXMgaXMgc3RpbGwgdGhlIGZpcnN0IGxvb3AsIGFuZCB0aGUgb25seVxuICAgICAgICAvLyB2YWxpZCBzZWxlY3Rpb24gaXMgYW5jaG9yTm9kZSBhbmQgZm9jdXNOb2RlIGJvdGggZXF1YWwgdG8gdGhpcyBub2RlXG4gICAgICAgIC8vIGFuZCBib3RoIG9mZnNldHMgMCwgaW4gd2hpY2ggY2FzZSB3ZSB3aWxsIGhhdmUgaGFuZGxlZCBhYm92ZS5cbiAgICAgICAgYnJlYWsgb3V0ZXI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBhbmNob3JOb2RlICYmICsraW5kZXhXaXRoaW5BbmNob3IgPT09IGFuY2hvck9mZnNldCkge1xuICAgICAgICBzdGFydCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudE5vZGUgPT09IGZvY3VzTm9kZSAmJiArK2luZGV4V2l0aGluRm9jdXMgPT09IGZvY3VzT2Zmc2V0KSB7XG4gICAgICAgIGVuZCA9IGxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5uZXh0U2libGluZykgIT09IG51bGwpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBwYXJlbnROb2RlO1xuICAgICAgcGFyZW50Tm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB9IC8vIE1vdmluZyBmcm9tIGBub2RlYCB0byBpdHMgbmV4dCBzaWJsaW5nIGBuZXh0YC5cblxuXG4gICAgbm9kZSA9IG5leHQ7XG4gIH1cblxuICBpZiAoc3RhcnQgPT09IC0xIHx8IGVuZCA9PT0gLTEpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4uIChXb3VsZCBoYXBwZW4gaWYgdGhlIGFuY2hvci9mb2N1cyBub2RlcyBhcmVuJ3RcbiAgICAvLyBhY3R1YWxseSBpbnNpZGUgdGhlIHBhc3NlZC1pbiBub2RlLilcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIGVuZDogZW5kXG4gIH07XG59XG4vKipcbiAqIEluIG1vZGVybiBub24tSUUgYnJvd3NlcnMsIHdlIGNhbiBzdXBwb3J0IGJvdGggZm9yd2FyZCBhbmQgYmFja3dhcmRcbiAqIHNlbGVjdGlvbnMuXG4gKlxuICogTm90ZTogSUUxMCsgc3VwcG9ydHMgdGhlIFNlbGVjdGlvbiBvYmplY3QsIGJ1dCBpdCBkb2VzIG5vdCBzdXBwb3J0XG4gKiB0aGUgYGV4dGVuZGAgbWV0aG9kLCB3aGljaCBtZWFucyB0aGF0IGV2ZW4gaW4gbW9kZXJuIElFLCBpdCdzIG5vdCBwb3NzaWJsZVxuICogdG8gcHJvZ3JhbW1hdGljYWxseSBjcmVhdGUgYSBiYWNrd2FyZCBzZWxlY3Rpb24uIFRodXMsIGZvciBhbGwgSUVcbiAqIHZlcnNpb25zLCB3ZSB1c2UgdGhlIG9sZCBJRSBBUEkgdG8gY3JlYXRlIG91ciBzZWxlY3Rpb25zLlxuICpcbiAqIEBwYXJhbSB7RE9NRWxlbWVudHxET01UZXh0Tm9kZX0gbm9kZVxuICogQHBhcmFtIHtvYmplY3R9IG9mZnNldHNcbiAqL1xuXG5mdW5jdGlvbiBzZXRPZmZzZXRzKG5vZGUsIG9mZnNldHMpIHtcbiAgdmFyIGRvYyA9IG5vZGUub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudDtcbiAgdmFyIHdpbiA9IGRvYyAmJiBkb2MuZGVmYXVsdFZpZXcgfHwgd2luZG93OyAvLyBFZGdlIGZhaWxzIHdpdGggXCJPYmplY3QgZXhwZWN0ZWRcIiBpbiBzb21lIHNjZW5hcmlvcy5cbiAgLy8gKEZvciBpbnN0YW5jZTogVGlueU1DRSBlZGl0b3IgdXNlZCBpbiBhIGxpc3QgY29tcG9uZW50IHRoYXQgc3VwcG9ydHMgcGFzdGluZyB0byBhZGQgbW9yZSxcbiAgLy8gZmFpbHMgd2hlbiBwYXN0aW5nIDEwMCsgaXRlbXMpXG5cbiAgaWYgKCF3aW4uZ2V0U2VsZWN0aW9uKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgdmFyIGxlbmd0aCA9IG5vZGUudGV4dENvbnRlbnQubGVuZ3RoO1xuICB2YXIgc3RhcnQgPSBNYXRoLm1pbihvZmZzZXRzLnN0YXJ0LCBsZW5ndGgpO1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQgPT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogTWF0aC5taW4ob2Zmc2V0cy5lbmQsIGxlbmd0aCk7IC8vIElFIDExIHVzZXMgbW9kZXJuIHNlbGVjdGlvbiwgYnV0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXh0ZW5kIG1ldGhvZC5cbiAgLy8gRmxpcCBiYWNrd2FyZCBzZWxlY3Rpb25zLCBzbyB3ZSBjYW4gc2V0IHdpdGggYSBzaW5nbGUgcmFuZ2UuXG5cbiAgaWYgKCFzZWxlY3Rpb24uZXh0ZW5kICYmIHN0YXJ0ID4gZW5kKSB7XG4gICAgdmFyIHRlbXAgPSBlbmQ7XG4gICAgZW5kID0gc3RhcnQ7XG4gICAgc3RhcnQgPSB0ZW1wO1xuICB9XG5cbiAgdmFyIHN0YXJ0TWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBzdGFydCk7XG4gIHZhciBlbmRNYXJrZXIgPSBnZXROb2RlRm9yQ2hhcmFjdGVyT2Zmc2V0KG5vZGUsIGVuZCk7XG5cbiAgaWYgKHN0YXJ0TWFya2VyICYmIGVuZE1hcmtlcikge1xuICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMSAmJiBzZWxlY3Rpb24uYW5jaG9yTm9kZSA9PT0gc3RhcnRNYXJrZXIubm9kZSAmJiBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0ID09PSBzdGFydE1hcmtlci5vZmZzZXQgJiYgc2VsZWN0aW9uLmZvY3VzTm9kZSA9PT0gZW5kTWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmZvY3VzT2Zmc2V0ID09PSBlbmRNYXJrZXIub2Zmc2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHJhbmdlID0gZG9jLmNyZWF0ZVJhbmdlKCk7XG4gICAgcmFuZ2Uuc2V0U3RhcnQoc3RhcnRNYXJrZXIubm9kZSwgc3RhcnRNYXJrZXIub2Zmc2V0KTtcbiAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7XG5cbiAgICBpZiAoc3RhcnQgPiBlbmQpIHtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgICBzZWxlY3Rpb24uZXh0ZW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2Uuc2V0RW5kKGVuZE1hcmtlci5ub2RlLCBlbmRNYXJrZXIub2Zmc2V0KTtcbiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzVGV4dE5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm5vZGVUeXBlID09PSBURVhUX05PREU7XG59XG5cbmZ1bmN0aW9uIGNvbnRhaW5zTm9kZShvdXRlck5vZGUsIGlubmVyTm9kZSkge1xuICBpZiAoIW91dGVyTm9kZSB8fCAhaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZSA9PT0gaW5uZXJOb2RlKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNUZXh0Tm9kZShvdXRlck5vZGUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUoaW5uZXJOb2RlKSkge1xuICAgIHJldHVybiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUucGFyZW50Tm9kZSk7XG4gIH0gZWxzZSBpZiAoJ2NvbnRhaW5zJyBpbiBvdXRlck5vZGUpIHtcbiAgICByZXR1cm4gb3V0ZXJOb2RlLmNvbnRhaW5zKGlubmVyTm9kZSk7XG4gIH0gZWxzZSBpZiAob3V0ZXJOb2RlLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKSB7XG4gICAgcmV0dXJuICEhKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihpbm5lck5vZGUpICYgMTYpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0luRG9jdW1lbnQobm9kZSkge1xuICByZXR1cm4gbm9kZSAmJiBub2RlLm93bmVyRG9jdW1lbnQgJiYgY29udGFpbnNOb2RlKG5vZGUub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1NhbWVPcmlnaW5GcmFtZShpZnJhbWUpIHtcbiAgdHJ5IHtcbiAgICAvLyBBY2Nlc3NpbmcgdGhlIGNvbnRlbnREb2N1bWVudCBvZiBhIEhUTUxJZnJhbWVFbGVtZW50IGNhbiBjYXVzZSB0aGUgYnJvd3NlclxuICAgIC8vIHRvIHRocm93LCBlLmcuIGlmIGl0IGhhcyBhIGNyb3NzLW9yaWdpbiBzcmMgYXR0cmlidXRlLlxuICAgIC8vIFNhZmFyaSB3aWxsIHNob3cgYW4gZXJyb3IgaW4gdGhlIGNvbnNvbGUgd2hlbiB0aGUgYWNjZXNzIHJlc3VsdHMgaW4gXCJCbG9ja2VkIGEgZnJhbWUgd2l0aCBvcmlnaW5cIi4gZS5nOlxuICAgIC8vIGlmcmFtZS5jb250ZW50RG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgLy8gQSBzYWZldHkgd2F5IGlzIHRvIGFjY2VzcyBvbmUgb2YgdGhlIGNyb3NzIG9yaWdpbiBwcm9wZXJ0aWVzOiBXaW5kb3cgb3IgTG9jYXRpb25cbiAgICAvLyBXaGljaCBtaWdodCByZXN1bHQgaW4gXCJTZWN1cml0eUVycm9yXCIgRE9NIEV4Y2VwdGlvbiBhbmQgaXQgaXMgY29tcGF0aWJsZSB0byBTYWZhcmkuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvYnJvd3NlcnMuaHRtbCNpbnRlZ3JhdGlvbi13aXRoLWlkbFxuICAgIHJldHVybiB0eXBlb2YgaWZyYW1lLmNvbnRlbnRXaW5kb3cubG9jYXRpb24uaHJlZiA9PT0gJ3N0cmluZyc7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50RGVlcCgpIHtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KCk7XG5cbiAgd2hpbGUgKGVsZW1lbnQgaW5zdGFuY2VvZiB3aW4uSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICBpZiAoaXNTYW1lT3JpZ2luRnJhbWUoZWxlbWVudCkpIHtcbiAgICAgIHdpbiA9IGVsZW1lbnQuY29udGVudFdpbmRvdztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZWxlbWVudCA9IGdldEFjdGl2ZUVsZW1lbnQod2luLmRvY3VtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxuLyoqXG4gKiBAUmVhY3RJbnB1dFNlbGVjdGlvbjogUmVhY3QgaW5wdXQgc2VsZWN0aW9uIG1vZHVsZS4gQmFzZWQgb24gU2VsZWN0aW9uLmpzLFxuICogYnV0IG1vZGlmaWVkIHRvIGJlIHN1aXRhYmxlIGZvciByZWFjdCBhbmQgaGFzIGEgY291cGxlIG9mIGJ1ZyBmaXhlcyAoZG9lc24ndFxuICogYXNzdW1lIGJ1dHRvbnMgaGF2ZSByYW5nZSBzZWxlY3Rpb25zIGFsbG93ZWQpLlxuICogSW5wdXQgc2VsZWN0aW9uIG1vZHVsZSBmb3IgUmVhY3QuXG4gKi9cblxuLyoqXG4gKiBAaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzOiB3ZSBnZXQgdGhlIGVsZW1lbnQgdHlwZXMgdGhhdCBzdXBwb3J0IHNlbGVjdGlvblxuICogZnJvbSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNkby1ub3QtYXBwbHksIGxvb2tpbmcgYXQgYHNlbGVjdGlvblN0YXJ0YFxuICogYW5kIGBzZWxlY3Rpb25FbmRgIHJvd3MuXG4gKi9cblxuXG5mdW5jdGlvbiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtICYmIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4gbm9kZU5hbWUgJiYgKG5vZGVOYW1lID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICd0ZXh0JyB8fCBlbGVtLnR5cGUgPT09ICdzZWFyY2gnIHx8IGVsZW0udHlwZSA9PT0gJ3RlbCcgfHwgZWxlbS50eXBlID09PSAndXJsJyB8fCBlbGVtLnR5cGUgPT09ICdwYXNzd29yZCcpIHx8IG5vZGVOYW1lID09PSAndGV4dGFyZWEnIHx8IGVsZW0uY29udGVudEVkaXRhYmxlID09PSAndHJ1ZScpO1xufVxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKSB7XG4gIHZhciBmb2N1c2VkRWxlbSA9IGdldEFjdGl2ZUVsZW1lbnREZWVwKCk7XG4gIHJldHVybiB7XG4gICAgZm9jdXNlZEVsZW06IGZvY3VzZWRFbGVtLFxuICAgIHNlbGVjdGlvblJhbmdlOiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMoZm9jdXNlZEVsZW0pID8gZ2V0U2VsZWN0aW9uKGZvY3VzZWRFbGVtKSA6IG51bGxcbiAgfTtcbn1cbi8qKlxuICogQHJlc3RvcmVTZWxlY3Rpb246IElmIGFueSBzZWxlY3Rpb24gaW5mb3JtYXRpb24gd2FzIHBvdGVudGlhbGx5IGxvc3QsXG4gKiByZXN0b3JlIGl0LiBUaGlzIGlzIHVzZWZ1bCB3aGVuIHBlcmZvcm1pbmcgb3BlcmF0aW9ucyB0aGF0IGNvdWxkIHJlbW92ZSBkb21cbiAqIG5vZGVzIGFuZCBwbGFjZSB0aGVtIGJhY2sgaW4sIHJlc3VsdGluZyBpbiBmb2N1cyBiZWluZyBsb3N0LlxuICovXG5cbmZ1bmN0aW9uIHJlc3RvcmVTZWxlY3Rpb24ocHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbikge1xuICB2YXIgY3VyRm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICB2YXIgcHJpb3JGb2N1c2VkRWxlbSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uZm9jdXNlZEVsZW07XG4gIHZhciBwcmlvclNlbGVjdGlvblJhbmdlID0gcHJpb3JTZWxlY3Rpb25JbmZvcm1hdGlvbi5zZWxlY3Rpb25SYW5nZTtcblxuICBpZiAoY3VyRm9jdXNlZEVsZW0gIT09IHByaW9yRm9jdXNlZEVsZW0gJiYgaXNJbkRvY3VtZW50KHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgaWYgKHByaW9yU2VsZWN0aW9uUmFuZ2UgIT09IG51bGwgJiYgaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKHByaW9yRm9jdXNlZEVsZW0pKSB7XG4gICAgICBzZXRTZWxlY3Rpb24ocHJpb3JGb2N1c2VkRWxlbSwgcHJpb3JTZWxlY3Rpb25SYW5nZSk7XG4gICAgfSAvLyBGb2N1c2luZyBhIG5vZGUgY2FuIGNoYW5nZSB0aGUgc2Nyb2xsIHBvc2l0aW9uLCB3aGljaCBpcyB1bmRlc2lyYWJsZVxuXG5cbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdmFyIGFuY2VzdG9yID0gcHJpb3JGb2N1c2VkRWxlbTtcblxuICAgIHdoaWxlIChhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgIGFuY2VzdG9ycy5wdXNoKHtcbiAgICAgICAgICBlbGVtZW50OiBhbmNlc3RvcixcbiAgICAgICAgICBsZWZ0OiBhbmNlc3Rvci5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHRvcDogYW5jZXN0b3Iuc2Nyb2xsVG9wXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJpb3JGb2N1c2VkRWxlbS5mb2N1cygpO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYW5jZXN0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgaW5mbyA9IGFuY2VzdG9yc1tpXTtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxMZWZ0ID0gaW5mby5sZWZ0O1xuICAgICAgaW5mby5lbGVtZW50LnNjcm9sbFRvcCA9IGluZm8udG9wO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBAZ2V0U2VsZWN0aW9uOiBHZXRzIHRoZSBzZWxlY3Rpb24gYm91bmRzIG9mIGEgZm9jdXNlZCB0ZXh0YXJlYSwgaW5wdXQgb3JcbiAqIGNvbnRlbnRFZGl0YWJsZSBub2RlLlxuICogLUBpbnB1dDogTG9vayB1cCBzZWxlY3Rpb24gYm91bmRzIG9mIHRoaXMgaW5wdXRcbiAqIC1AcmV0dXJuIHtzdGFydDogc2VsZWN0aW9uU3RhcnQsIGVuZDogc2VsZWN0aW9uRW5kfVxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbihpbnB1dCkge1xuICB2YXIgc2VsZWN0aW9uO1xuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgLy8gTW9kZXJuIGJyb3dzZXIgd2l0aCBpbnB1dCBvciB0ZXh0YXJlYS5cbiAgICBzZWxlY3Rpb24gPSB7XG4gICAgICBzdGFydDogaW5wdXQuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IGlucHV0LnNlbGVjdGlvbkVuZFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gQ29udGVudCBlZGl0YWJsZSBvciBvbGQgSUUgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0gZ2V0T2Zmc2V0cyhpbnB1dCk7XG4gIH1cblxuICByZXR1cm4gc2VsZWN0aW9uIHx8IHtcbiAgICBzdGFydDogMCxcbiAgICBlbmQ6IDBcbiAgfTtcbn1cbi8qKlxuICogQHNldFNlbGVjdGlvbjogU2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIHRleHRhcmVhIG9yIGlucHV0IGFuZCBmb2N1c2VzXG4gKiB0aGUgaW5wdXQuXG4gKiAtQGlucHV0ICAgICBTZXQgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0IG9yIHRleHRhcmVhXG4gKiAtQG9mZnNldHMgICBPYmplY3Qgb2Ygc2FtZSBmb3JtIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSBnZXQqXG4gKi9cblxuZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGlucHV0LCBvZmZzZXRzKSB7XG4gIHZhciBzdGFydCA9IG9mZnNldHMuc3RhcnQ7XG4gIHZhciBlbmQgPSBvZmZzZXRzLmVuZDtcblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgfVxuXG4gIGlmICgnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0KSB7XG4gICAgaW5wdXQuc2VsZWN0aW9uU3RhcnQgPSBzdGFydDtcbiAgICBpbnB1dC5zZWxlY3Rpb25FbmQgPSBNYXRoLm1pbihlbmQsIGlucHV0LnZhbHVlLmxlbmd0aCk7XG4gIH0gZWxzZSB7XG4gICAgc2V0T2Zmc2V0cyhpbnB1dCwgb2Zmc2V0cyk7XG4gIH1cbn1cblxudmFyIHNraXBTZWxlY3Rpb25DaGFuZ2VFdmVudCA9IGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5kb2N1bWVudE1vZGUgPD0gMTE7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDMoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25TZWxlY3QnLCBbJ2ZvY3Vzb3V0JywgJ2NvbnRleHRtZW51JywgJ2RyYWdlbmQnLCAnZm9jdXNpbicsICdrZXlkb3duJywgJ2tleXVwJywgJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3NlbGVjdGlvbmNoYW5nZSddKTtcbn1cblxudmFyIGFjdGl2ZUVsZW1lbnQkMSA9IG51bGw7XG52YXIgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG52YXIgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG52YXIgbW91c2VEb3duID0gZmFsc2U7XG4vKipcbiAqIEdldCBhbiBvYmplY3Qgd2hpY2ggaXMgYSB1bmlxdWUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLlxuICpcbiAqIFRoZSByZXR1cm4gdmFsdWUgd2lsbCBub3QgYmUgY29uc2lzdGVudCBhY3Jvc3Mgbm9kZXMgb3IgYnJvd3NlcnMsIGJ1dFxuICogdHdvIGlkZW50aWNhbCBzZWxlY3Rpb25zIG9uIHRoZSBzYW1lIG5vZGUgd2lsbCByZXR1cm4gaWRlbnRpY2FsIG9iamVjdHMuXG4gKi9cblxuZnVuY3Rpb24gZ2V0U2VsZWN0aW9uJDEobm9kZSkge1xuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBub2RlICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhub2RlKSkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGFydDogbm9kZS5zZWxlY3Rpb25TdGFydCxcbiAgICAgIGVuZDogbm9kZS5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHZhciB3aW4gPSBub2RlLm93bmVyRG9jdW1lbnQgJiYgbm9kZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdztcbiAgICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbigpO1xuICAgIHJldHVybiB7XG4gICAgICBhbmNob3JOb2RlOiBzZWxlY3Rpb24uYW5jaG9yTm9kZSxcbiAgICAgIGFuY2hvck9mZnNldDogc2VsZWN0aW9uLmFuY2hvck9mZnNldCxcbiAgICAgIGZvY3VzTm9kZTogc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0OiBzZWxlY3Rpb24uZm9jdXNPZmZzZXRcbiAgICB9O1xuICB9XG59XG4vKipcbiAqIEdldCBkb2N1bWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGV2ZW50IHRhcmdldC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQoZXZlbnRUYXJnZXQpIHtcbiAgcmV0dXJuIGV2ZW50VGFyZ2V0LndpbmRvdyA9PT0gZXZlbnRUYXJnZXQgPyBldmVudFRhcmdldC5kb2N1bWVudCA6IGV2ZW50VGFyZ2V0Lm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFID8gZXZlbnRUYXJnZXQgOiBldmVudFRhcmdldC5vd25lckRvY3VtZW50O1xufVxuLyoqXG4gKiBQb2xsIHNlbGVjdGlvbiB0byBzZWUgd2hldGhlciBpdCdzIGNoYW5nZWQuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50XG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRUYXJnZXRcbiAqIEByZXR1cm4gez9TeW50aGV0aWNFdmVudH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCkge1xuICAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgcmlnaHQgZWxlbWVudCwgYW5kIHRoYXQgdGhlIHVzZXIgaXMgbm90IGRyYWdnaW5nIGFcbiAgLy8gc2VsZWN0aW9uICh0aGlzIG1hdGNoZXMgbmF0aXZlIGBzZWxlY3RgIGV2ZW50IGJlaGF2aW9yKS4gSW4gSFRNTDUsIHNlbGVjdFxuICAvLyBmaXJlcyBvbmx5IG9uIGlucHV0IGFuZCB0ZXh0YXJlYSB0aHVzIGlmIHRoZXJlJ3Mgbm8gZm9jdXNlZCBlbGVtZW50IHdlXG4gIC8vIHdvbid0IGRpc3BhdGNoLlxuICB2YXIgZG9jID0gZ2V0RXZlbnRUYXJnZXREb2N1bWVudChuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKG1vdXNlRG93biB8fCBhY3RpdmVFbGVtZW50JDEgPT0gbnVsbCB8fCBhY3RpdmVFbGVtZW50JDEgIT09IGdldEFjdGl2ZUVsZW1lbnQoZG9jKSkge1xuICAgIHJldHVybjtcbiAgfSAvLyBPbmx5IGZpcmUgd2hlbiBzZWxlY3Rpb24gaGFzIGFjdHVhbGx5IGNoYW5nZWQuXG5cblxuICB2YXIgY3VycmVudFNlbGVjdGlvbiA9IGdldFNlbGVjdGlvbiQxKGFjdGl2ZUVsZW1lbnQkMSk7XG5cbiAgaWYgKCFsYXN0U2VsZWN0aW9uIHx8ICFzaGFsbG93RXF1YWwobGFzdFNlbGVjdGlvbiwgY3VycmVudFNlbGVjdGlvbikpIHtcbiAgICBsYXN0U2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbjtcbiAgICB2YXIgbGlzdGVuZXJzID0gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKGFjdGl2ZUVsZW1lbnRJbnN0JDEsICdvblNlbGVjdCcpO1xuXG4gICAgaWYgKGxpc3RlbmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uU2VsZWN0JywgJ3NlbGVjdCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgICBldmVudDogZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICAgIGV2ZW50LnRhcmdldCA9IGFjdGl2ZUVsZW1lbnQkMTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25TZWxlY3RgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBzZWxlY3QgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy5cbiAqXG4gKiBTdXBwb3J0ZWQgZWxlbWVudHMgYXJlOlxuICogLSBpbnB1dCAoc2VlIGBpc1RleHRJbnB1dEVsZW1lbnRgKVxuICogLSB0ZXh0YXJlYVxuICogLSBjb250ZW50RWRpdGFibGVcbiAqXG4gKiBUaGlzIGRpZmZlcnMgZnJvbSBuYXRpdmUgYnJvd3NlciBpbXBsZW1lbnRhdGlvbnMgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICogLSBGaXJlcyBvbiBjb250ZW50RWRpdGFibGUgZmllbGRzIGFzIHdlbGwgYXMgaW5wdXRzLlxuICogLSBGaXJlcyBmb3IgY29sbGFwc2VkIHNlbGVjdGlvbi5cbiAqIC0gRmlyZXMgYWZ0ZXIgdXNlciBpbnB1dC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG5cbiAgdmFyIHRhcmdldE5vZGUgPSB0YXJnZXRJbnN0ID8gZ2V0Tm9kZUZyb21JbnN0YW5jZSh0YXJnZXRJbnN0KSA6IHdpbmRvdztcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIC8vIFRyYWNrIHRoZSBpbnB1dCBub2RlIHRoYXQgaGFzIGZvY3VzLlxuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgaWYgKGlzVGV4dElucHV0RWxlbWVudCh0YXJnZXROb2RlKSB8fCB0YXJnZXROb2RlLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnQkMSA9IHRhcmdldE5vZGU7XG4gICAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSB0YXJnZXRJbnN0O1xuICAgICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xuICAgICAgYWN0aXZlRWxlbWVudEluc3QkMSA9IG51bGw7XG4gICAgICBsYXN0U2VsZWN0aW9uID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuICAgIC8vIERvbid0IGZpcmUgdGhlIGV2ZW50IHdoaWxlIHRoZSB1c2VyIGlzIGRyYWdnaW5nLiBUaGlzIG1hdGNoZXMgdGhlXG4gICAgLy8gc2VtYW50aWNzIG9mIHRoZSBuYXRpdmUgc2VsZWN0IGV2ZW50LlxuXG4gICAgY2FzZSAnbW91c2Vkb3duJzpcbiAgICAgIG1vdXNlRG93biA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICBjYXNlICdtb3VzZXVwJzpcbiAgICBjYXNlICdkcmFnZW5kJzpcbiAgICAgIG1vdXNlRG93biA9IGZhbHNlO1xuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICAgIGJyZWFrO1xuICAgIC8vIENocm9tZSBhbmQgSUUgZmlyZSBub24tc3RhbmRhcmQgZXZlbnQgd2hlbiBzZWxlY3Rpb24gaXMgY2hhbmdlZCAoYW5kXG4gICAgLy8gc29tZXRpbWVzIHdoZW4gaXQgaGFzbid0KS4gSUUncyBldmVudCBmaXJlcyBvdXQgb2Ygb3JkZXIgd2l0aCByZXNwZWN0XG4gICAgLy8gdG8ga2V5IGFuZCBpbnB1dCBldmVudHMgb24gZGVsZXRpb24sIHNvIHdlIGRpc2NhcmQgaXQuXG4gICAgLy9cbiAgICAvLyBGaXJlZm94IGRvZXNuJ3Qgc3VwcG9ydCBzZWxlY3Rpb25jaGFuZ2UsIHNvIGNoZWNrIHNlbGVjdGlvbiBzdGF0dXNcbiAgICAvLyBhZnRlciBlYWNoIGtleSBlbnRyeS4gVGhlIHNlbGVjdGlvbiBjaGFuZ2VzIGFmdGVyIGtleWRvd24gYW5kIGJlZm9yZVxuICAgIC8vIGtleXVwLCBidXQgd2UgY2hlY2sgb24ga2V5ZG93biBhcyB3ZWxsIGluIHRoZSBjYXNlIG9mIGhvbGRpbmcgZG93biBhXG4gICAgLy8ga2V5LCB3aGVuIG11bHRpcGxlIGtleWRvd24gZXZlbnRzIGFyZSBmaXJlZCBidXQgb25seSBvbmUga2V5dXAgaXMuXG4gICAgLy8gVGhpcyBpcyBhbHNvIG91ciBhcHByb2FjaCBmb3IgSUUgaGFuZGxpbmcsIGZvciB0aGUgcmVhc29uIGFib3ZlLlxuXG4gICAgY2FzZSAnc2VsZWN0aW9uY2hhbmdlJzpcbiAgICAgIGlmIChza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciByZWFjdE5hbWUgPSB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5nZXQoZG9tRXZlbnROYW1lKTtcblxuICBpZiAocmVhY3ROYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRXZlbnQ7XG4gIHZhciByZWFjdEV2ZW50VHlwZSA9IGRvbUV2ZW50TmFtZTtcblxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGtleXByZXNzIGV2ZW50IGZvciBmdW5jdGlvbiBrZXlzIHRvby4gVGhpcyByZW1vdmVzXG4gICAgICAvLyB0aGUgdW53YW50ZWQga2V5cHJlc3MgZXZlbnRzLiBFbnRlciBpcyBob3dldmVyIGJvdGggcHJpbnRhYmxlIGFuZFxuICAgICAgLy8gbm9uLXByaW50YWJsZS4gT25lIHdvdWxkIGV4cGVjdCBUYWIgdG8gYmUgYXMgd2VsbCAoYnV0IGl0IGlzbid0KS5cbiAgICAgIGlmIChnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdrZXlkb3duJzpcbiAgICBjYXNlICdrZXl1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNLZXlib2FyZEV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2ZvY3VzJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIHJlYWN0RXZlbnRUeXBlID0gJ2JsdXInO1xuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljRm9jdXNFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnYmVmb3JlYmx1cic6XG4gICAgY2FzZSAnYWZ0ZXJibHVyJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NsaWNrJzpcbiAgICAgIC8vIEZpcmVmb3ggY3JlYXRlcyBhIGNsaWNrIGV2ZW50IG9uIHJpZ2h0IG1vdXNlIGNsaWNrcy4gVGhpcyByZW1vdmVzIHRoZVxuICAgICAgLy8gdW53YW50ZWQgY2xpY2sgZXZlbnRzLlxuICAgICAgaWYgKG5hdGl2ZUV2ZW50LmJ1dHRvbiA9PT0gMikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICBjYXNlICdhdXhjbGljayc6XG4gICAgY2FzZSAnZGJsY2xpY2snOlxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgY2FzZSAnbW91c2Vtb3ZlJzpcbiAgICBjYXNlICdtb3VzZXVwJzogLy8gVE9ETzogRGlzYWJsZWQgZWxlbWVudHMgc2hvdWxkIG5vdCByZXNwb25kIHRvIG1vdXNlIGV2ZW50c1xuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnbW91c2VvdXQnOlxuICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgY2FzZSAnY29udGV4dG1lbnUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljTW91c2VFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZHJhZyc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgY2FzZSAnZHJhZ2VudGVyJzpcbiAgICBjYXNlICdkcmFnZXhpdCc6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICBjYXNlICdkcmFnb3Zlcic6XG4gICAgY2FzZSAnZHJhZ3N0YXJ0JzpcbiAgICBjYXNlICdkcm9wJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0RyYWdFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndG91Y2hjYW5jZWwnOlxuICAgIGNhc2UgJ3RvdWNoZW5kJzpcbiAgICBjYXNlICd0b3VjaG1vdmUnOlxuICAgIGNhc2UgJ3RvdWNoc3RhcnQnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVG91Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBBTklNQVRJT05fRU5EOlxuICAgIGNhc2UgQU5JTUFUSU9OX0lURVJBVElPTjpcbiAgICBjYXNlIEFOSU1BVElPTl9TVEFSVDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFRSQU5TSVRJT05fRU5EOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVHJhbnNpdGlvbkV2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzY3JvbGwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljVUlFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnd2hlZWwnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljV2hlZWxFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnY29weSc6XG4gICAgY2FzZSAnY3V0JzpcbiAgICBjYXNlICdwYXN0ZSc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNDbGlwYm9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZ290cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ2xvc3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAncG9pbnRlcmNhbmNlbCc6XG4gICAgY2FzZSAncG9pbnRlcmRvd24nOlxuICAgIGNhc2UgJ3BvaW50ZXJtb3ZlJzpcbiAgICBjYXNlICdwb2ludGVyb3V0JzpcbiAgICBjYXNlICdwb2ludGVyb3Zlcic6XG4gICAgY2FzZSAncG9pbnRlcnVwJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICB7XG4gICAgLy8gU29tZSBldmVudHMgZG9uJ3QgYnViYmxlIGluIHRoZSBicm93c2VyLlxuICAgIC8vIEluIHRoZSBwYXN0LCBSZWFjdCBoYXMgYWx3YXlzIGJ1YmJsZWQgdGhlbSwgYnV0IHRoaXMgY2FuIGJlIHN1cnByaXNpbmcuXG4gICAgLy8gV2UncmUgZ29pbmcgdG8gdHJ5IGFsaWduaW5nIGNsb3NlciB0byB0aGUgYnJvd3NlciBiZWhhdmlvciBieSBub3QgYnViYmxpbmdcbiAgICAvLyB0aGVtIGluIFJlYWN0IGVpdGhlci4gV2UnbGwgc3RhcnQgYnkgbm90IGJ1YmJsaW5nIG9uU2Nyb2xsLCBhbmQgdGhlbiBleHBhbmQuXG4gICAgdmFyIGFjY3VtdWxhdGVUYXJnZXRPbmx5ID0gIWluQ2FwdHVyZVBoYXNlICYmIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhZGQgYWxsIGV2ZW50cyBmcm9tXG4gICAgLy8gbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QgaW4gRE9NUGx1Z2luRXZlbnRTeXN0ZW0uXG4gICAgLy8gVGhlbiB3ZSBjYW4gcmVtb3ZlIHRoaXMgc3BlY2lhbCBsaXN0LlxuICAgIC8vIFRoaXMgaXMgYSBicmVha2luZyBjaGFuZ2UgdGhhdCBjYW4gd2FpdCB1bnRpbCBSZWFjdCAxOC5cbiAgICBkb21FdmVudE5hbWUgPT09ICdzY3JvbGwnO1xuXG4gICAgdmFyIF9saXN0ZW5lcnMgPSBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudC50eXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpO1xuXG4gICAgaWYgKF9saXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBjcmVhdGUgZXZlbnQgbGF6aWx5LlxuICAgICAgdmFyIF9ldmVudCA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IF9ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzOiBfbGlzdGVuZXJzXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuLy8gVE9ETzogcmVtb3ZlIHRvcC1sZXZlbCBzaWRlIGVmZmVjdC5cbnJlZ2lzdGVyU2ltcGxlRXZlbnRzKCk7XG5yZWdpc3RlckV2ZW50cyQyKCk7XG5yZWdpc3RlckV2ZW50cyQxKCk7XG5yZWdpc3RlckV2ZW50cyQzKCk7XG5yZWdpc3RlckV2ZW50cygpO1xuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICAvLyBUT0RPOiB3ZSBzaG91bGQgcmVtb3ZlIHRoZSBjb25jZXB0IG9mIGEgXCJTaW1wbGVFdmVudFBsdWdpblwiLlxuICAvLyBUaGlzIGlzIHRoZSBiYXNpYyBmdW5jdGlvbmFsaXR5IG9mIHRoZSBldmVudCBzeXN0ZW0uIEFsbFxuICAvLyB0aGUgb3RoZXIgcGx1Z2lucyBhcmUgZXNzZW50aWFsbHkgcG9seWZpbGxzLiBTbyB0aGUgcGx1Z2luXG4gIC8vIHNob3VsZCBwcm9iYWJseSBiZSBpbmxpbmVkIHNvbWV3aGVyZSBhbmQgaGF2ZSBpdHMgbG9naWNcbiAgLy8gYmUgY29yZSB0aGUgdG8gZXZlbnQgc3lzdGVtLiBUaGlzIHdvdWxkIHBvdGVudGlhbGx5IGFsbG93XG4gIC8vIHVzIHRvIHNoaXAgYnVpbGRzIG9mIFJlYWN0IHdpdGhvdXQgdGhlIHBvbHlmaWxsZWQgcGx1Z2lucyBiZWxvdy5cbiAgZXh0cmFjdEV2ZW50cyQ0KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgdmFyIHNob3VsZFByb2Nlc3NQb2x5ZmlsbFBsdWdpbnMgPSAoZXZlbnRTeXN0ZW1GbGFncyAmIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TKSA9PT0gMDsgLy8gV2UgZG9uJ3QgcHJvY2VzcyB0aGVzZSBldmVudHMgdW5sZXNzIHdlIGFyZSBpbiB0aGVcbiAgLy8gZXZlbnQncyBuYXRpdmUgXCJidWJibGVcIiBwaGFzZSwgd2hpY2ggbWVhbnMgdGhhdCB3ZSdyZVxuICAvLyBub3QgaW4gdGhlIGNhcHR1cmUgcGhhc2UuIFRoYXQncyBiZWNhdXNlIHdlIGVtdWxhdGVcbiAgLy8gdGhlIGNhcHR1cmUgcGhhc2UgaGVyZSBzdGlsbC4gVGhpcyBpcyBhIHRyYWRlLW9mZixcbiAgLy8gYmVjYXVzZSBpbiBhbiBpZGVhbCB3b3JsZCB3ZSB3b3VsZCBub3QgZW11bGF0ZSBhbmQgdXNlXG4gIC8vIHRoZSBwaGFzZXMgcHJvcGVybHksIGxpa2Ugd2UgZG8gd2l0aCB0aGUgU2ltcGxlRXZlbnRcbiAgLy8gcGx1Z2luLiBIb3dldmVyLCB0aGUgcGx1Z2lucyBiZWxvdyBlaXRoZXIgZXhwZWN0XG4gIC8vIGVtdWxhdGlvbiAoRW50ZXJMZWF2ZSkgb3IgdXNlIHN0YXRlIGxvY2FsaXplZCB0byB0aGF0XG4gIC8vIHBsdWdpbiAoQmVmb3JlSW5wdXQsIENoYW5nZSwgU2VsZWN0KS4gVGhlIHN0YXRlIGluXG4gIC8vIHRoZXNlIG1vZHVsZXMgY29tcGxpY2F0ZXMgdGhpbmdzLCBhcyB5b3UnbGwgZXNzZW50aWFsbHlcbiAgLy8gZ2V0IHRoZSBjYXNlIHdoZXJlIHRoZSBjYXB0dXJlIHBoYXNlIGV2ZW50IG1pZ2h0IGNoYW5nZVxuICAvLyBzdGF0ZSwgb25seSBmb3IgdGhlIGZvbGxvd2luZyBidWJibGUgZXZlbnQgdG8gY29tZSBpblxuICAvLyBsYXRlciBhbmQgbm90IHRyaWdnZXIgYW55dGhpbmcgYXMgdGhlIHN0YXRlIG5vd1xuICAvLyBpbnZhbGlkYXRlcyB0aGUgaGV1cmlzdGljcyBvZiB0aGUgZXZlbnQgcGx1Z2luLiBXZVxuICAvLyBjb3VsZCBhbHRlciBhbGwgdGhlc2UgcGx1Z2lucyB0byB3b3JrIGluIHN1Y2ggd2F5cywgYnV0XG4gIC8vIHRoYXQgbWlnaHQgY2F1c2Ugb3RoZXIgdW5rbm93biBzaWRlLWVmZmVjdHMgdGhhdCB3ZVxuICAvLyBjYW4ndCBmb3JzZWUgcmlnaHQgbm93LlxuXG4gIGlmIChzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zKSB7XG4gICAgZXh0cmFjdEV2ZW50cyQyKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzKTtcbiAgICBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMkMyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZXh0cmFjdEV2ZW50cyhkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIH1cbn0gLy8gTGlzdCBvZiBldmVudHMgdGhhdCBuZWVkIHRvIGJlIGluZGl2aWR1YWxseSBhdHRhY2hlZCB0byBtZWRpYSBlbGVtZW50cy5cblxuXG52YXIgbWVkaWFFdmVudFR5cGVzID0gWydhYm9ydCcsICdjYW5wbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2VtcHRpZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2xvYWRlZGRhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ3BhdXNlJywgJ3BsYXknLCAncGxheWluZycsICdwcm9ncmVzcycsICdyYXRlY2hhbmdlJywgJ3NlZWtlZCcsICdzZWVraW5nJywgJ3N0YWxsZWQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3ZvbHVtZWNoYW5nZScsICd3YWl0aW5nJ107IC8vIFdlIHNob3VsZCBub3QgZGVsZWdhdGUgdGhlc2UgZXZlbnRzIHRvIHRoZSBjb250YWluZXIsIGJ1dCByYXRoZXJcbi8vIHNldCB0aGVtIG9uIHRoZSBhY3R1YWwgdGFyZ2V0IGVsZW1lbnQgaXRzZWxmLiBUaGlzIGlzIHByaW1hcmlseVxuLy8gYmVjYXVzZSB0aGVzZSBldmVudHMgZG8gbm90IGNvbnNpc3RlbnRseSBidWJibGUgaW4gdGhlIERPTS5cblxudmFyIG5vbkRlbGVnYXRlZEV2ZW50cyA9IG5ldyBTZXQoWydjYW5jZWwnLCAnY2xvc2UnLCAnaW52YWxpZCcsICdsb2FkJywgJ3Njcm9sbCcsICd0b2dnbGUnXS5jb25jYXQobWVkaWFFdmVudFR5cGVzKSk7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpIHtcbiAgdmFyIHR5cGUgPSBldmVudC50eXBlIHx8ICd1bmtub3duLWV2ZW50JztcbiAgZXZlbnQuY3VycmVudFRhcmdldCA9IGN1cnJlbnRUYXJnZXQ7XG4gIGludm9rZUd1YXJkZWRDYWxsYmFja0FuZENhdGNoRmlyc3RFcnJvcih0eXBlLCBsaXN0ZW5lciwgdW5kZWZpbmVkLCBldmVudCk7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZUl0ZW1zSW5PcmRlcihldmVudCwgZGlzcGF0Y2hMaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciBwcmV2aW91c0luc3RhbmNlO1xuXG4gIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgIGZvciAodmFyIGkgPSBkaXNwYXRjaExpc3RlbmVycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRpID0gZGlzcGF0Y2hMaXN0ZW5lcnNbaV0sXG4gICAgICAgICAgaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5pbnN0YW5jZSxcbiAgICAgICAgICBjdXJyZW50VGFyZ2V0ID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBsaXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmxpc3RlbmVyO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgbGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpO1xuICAgICAgcHJldmlvdXNJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2Rpc3BhdGNoTGlzdGVuZXJzJF9pID0gZGlzcGF0Y2hMaXN0ZW5lcnNbX2ldLFxuICAgICAgICAgIF9pbnN0YW5jZSA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5pbnN0YW5jZSxcbiAgICAgICAgICBfY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgIF9saXN0ZW5lciA9IF9kaXNwYXRjaExpc3RlbmVycyRfaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKF9pbnN0YW5jZSAhPT0gcHJldmlvdXNJbnN0YW5jZSAmJiBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZXhlY3V0ZURpc3BhdGNoKGV2ZW50LCBfbGlzdGVuZXIsIF9jdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBfaW5zdGFuY2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpIHtcbiAgdmFyIGluQ2FwdHVyZVBoYXNlID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19DQVBUVVJFX1BIQVNFKSAhPT0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRpc3BhdGNoUXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgX2Rpc3BhdGNoUXVldWUkaSA9IGRpc3BhdGNoUXVldWVbaV0sXG4gICAgICAgIGV2ZW50ID0gX2Rpc3BhdGNoUXVldWUkaS5ldmVudCxcbiAgICAgICAgbGlzdGVuZXJzID0gX2Rpc3BhdGNoUXVldWUkaS5saXN0ZW5lcnM7XG4gICAgcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGxpc3RlbmVycywgaW5DYXB0dXJlUGhhc2UpOyAvLyAgZXZlbnQgc3lzdGVtIGRvZXNuJ3QgdXNlIHBvb2xpbmcuXG4gIH0gLy8gVGhpcyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byByZXRocm93IGlmIGFueSBvZiB0aGUgZXZlbnQgaGFuZGxlcnMgdGhyZXcuXG5cblxuICByZXRocm93Q2F1Z2h0RXJyb3IoKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgbmF0aXZlRXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCk7XG4gIHZhciBkaXNwYXRjaFF1ZXVlID0gW107XG4gIGV4dHJhY3RFdmVudHMkNShkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHByb2Nlc3NEaXNwYXRjaFF1ZXVlKGRpc3BhdGNoUXVldWUsIGV2ZW50U3lzdGVtRmxhZ3MpO1xufVxuXG5mdW5jdGlvbiBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KGRvbUV2ZW50TmFtZSwgdGFyZ2V0RWxlbWVudCkge1xuICB2YXIgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciA9IGZhbHNlO1xuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldEVsZW1lbnQpO1xuICB2YXIgbGlzdGVuZXJTZXRLZXkgPSBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGFkZFRyYXBwZWRFdmVudExpc3RlbmVyKHRhcmdldEVsZW1lbnQsIGRvbUV2ZW50TmFtZSwgSVNfTk9OX0RFTEVHQVRFRCwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxudmFyIGxpc3RlbmluZ01hcmtlciA9ICdfcmVhY3RMaXN0ZW5pbmcnICsgTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG5mdW5jdGlvbiBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0pIHtcbiAgICAgIC8vIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG9uJ3QgaXRlcmF0ZSB0aHJvdWdoIGV2ZW50c1xuICAgICAgLy8gZm9yIHRoZSBzYW1lIHBvcnRhbCBjb250YWluZXIgb3Igcm9vdCBub2RlIG1vcmUgdGhhbiBvbmNlLlxuICAgICAgLy8gVE9ETzogb25jZSB3ZSByZW1vdmUgdGhlIGZsYWcsIHdlIG1heSBiZSBhYmxlIHRvIGFsc29cbiAgICAgIC8vIHJlbW92ZSBzb21lIG9mIHRoZSBib29ra2VlcGluZyBtYXBzIHVzZWQgZm9yIGxhemluZXNzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJvb3RDb250YWluZXJFbGVtZW50W2xpc3RlbmluZ01hcmtlcl0gPSB0cnVlO1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChkb21FdmVudE5hbWUpIHtcbiAgICAgIGlmICghbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgICAgIGxpc3RlblRvTmF0aXZlRXZlbnQoZG9tRXZlbnROYW1lLCBmYWxzZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgdHJ1ZSwgcm9vdENvbnRhaW5lckVsZW1lbnQsIG51bGwpO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgcm9vdENvbnRhaW5lckVsZW1lbnQsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGV2ZW50U3lzdGVtRmxhZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gNCAmJiBhcmd1bWVudHNbNF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1s0XSA6IDA7XG4gIHZhciB0YXJnZXQgPSByb290Q29udGFpbmVyRWxlbWVudDsgLy8gc2VsZWN0aW9uY2hhbmdlIG5lZWRzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBkb2N1bWVudFxuICAvLyBvdGhlcndpc2UgaXQgd29uJ3QgY2FwdHVyZSBpbmNvbWluZyBldmVudHMgdGhhdCBhcmUgb25seVxuICAvLyB0cmlnZ2VyZWQgb24gdGhlIGRvY3VtZW50IGRpcmVjdGx5LlxuXG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnICYmIHJvb3RDb250YWluZXJFbGVtZW50Lm5vZGVUeXBlICE9PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgfSAvLyBJZiB0aGUgZXZlbnQgY2FuIGJlIGRlbGVnYXRlZCAob3IgaXMgY2FwdHVyZSBwaGFzZSksIHdlIGNhblxuICAvLyByZWdpc3RlciBpdCB0byB0aGUgcm9vdCBjb250YWluZXIuIE90aGVyd2lzZSwgd2Ugc2hvdWxkXG4gIC8vIHJlZ2lzdGVyIHRoZSBldmVudCB0byB0aGUgdGFyZ2V0IGVsZW1lbnQgYW5kIG1hcmsgaXQgYXNcbiAgLy8gYSBub24tZGVsZWdhdGVkIGV2ZW50LlxuXG5cbiAgaWYgKHRhcmdldEVsZW1lbnQgIT09IG51bGwgJiYgIWlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgJiYgbm9uRGVsZWdhdGVkRXZlbnRzLmhhcyhkb21FdmVudE5hbWUpKSB7XG4gICAgLy8gRm9yIGFsbCBub24tZGVsZWdhdGVkIGV2ZW50cywgYXBhcnQgZnJvbSBzY3JvbGwsIHdlIGF0dGFjaFxuICAgIC8vIHRoZWlyIGV2ZW50IGxpc3RlbmVycyB0byB0aGUgcmVzcGVjdGl2ZSBlbGVtZW50cyB0aGF0IHRoZWlyXG4gICAgLy8gZXZlbnRzIGZpcmUgb24uIFRoYXQgbWVhbnMgd2UgY2FuIHNraXAgdGhpcyBzdGVwLCBhcyBldmVudFxuICAgIC8vIGxpc3RlbmVyIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgcHJldmlvdXNseS4gSG93ZXZlciwgd2VcbiAgICAvLyBzcGVjaWFsIGNhc2UgdGhlIHNjcm9sbCBldmVudCBiZWNhdXNlIHRoZSByZWFsaXR5IGlzIHRoYXQgYW55XG4gICAgLy8gZWxlbWVudCBjYW4gc2Nyb2xsLlxuICAgIC8vIFRPRE86IGlkZWFsbHksIHdlJ2QgZXZlbnR1YWxseSBhcHBseSB0aGUgc2FtZSBsb2dpYyB0byBhbGxcbiAgICAvLyBldmVudHMgZnJvbSB0aGUgbm9uRGVsZWdhdGVkRXZlbnRzIGxpc3QuIFRoZW4gd2UgY2FuIHJlbW92ZVxuICAgIC8vIHRoaXMgc3BlY2lhbCBjYXNlIGFuZCB1c2UgdGhlIHNhbWUgbG9naWMgZm9yIGFsbCBldmVudHMuXG4gICAgaWYgKGRvbUV2ZW50TmFtZSAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX05PTl9ERUxFR0FURUQ7XG4gICAgdGFyZ2V0ID0gdGFyZ2V0RWxlbWVudDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lclNldCA9IGdldEV2ZW50TGlzdGVuZXJTZXQodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTsgLy8gSWYgdGhlIGxpc3RlbmVyIGVudHJ5IGlzIGVtcHR5IG9yIHdlIHNob3VsZCB1cGdyYWRlLCB0aGVuXG4gIC8vIHdlIG5lZWQgdG8gdHJhcCBhbiBldmVudCBsaXN0ZW5lciBvbnRvIHRoZSB0YXJnZXQuXG5cbiAgaWYgKCFsaXN0ZW5lclNldC5oYXMobGlzdGVuZXJTZXRLZXkpKSB7XG4gICAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICAgIGV2ZW50U3lzdGVtRmxhZ3MgfD0gSVNfQ0FQVFVSRV9QSEFTRTtcbiAgICB9XG5cbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7XG4gICAgbGlzdGVuZXJTZXQuYWRkKGxpc3RlbmVyU2V0S2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lciwgaXNEZWZlcnJlZExpc3RlbmVyRm9yTGVnYWN5RkJTdXBwb3J0KSB7XG4gIHZhciBsaXN0ZW5lciA9IGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKTsgLy8gSWYgcGFzc2l2ZSBvcHRpb24gaXMgbm90IHN1cHBvcnRlZCwgdGhlbiB0aGUgZXZlbnQgd2lsbCBiZVxuICAvLyBhY3RpdmUgYW5kIG5vdCBwYXNzaXZlLlxuXG4gIHZhciBpc1Bhc3NpdmVMaXN0ZW5lciA9IHVuZGVmaW5lZDtcblxuICBpZiAocGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQpIHtcbiAgICAvLyBCcm93c2VycyBpbnRyb2R1Y2VkIGFuIGludGVydmVudGlvbiwgbWFraW5nIHRoZXNlIGV2ZW50c1xuICAgIC8vIHBhc3NpdmUgYnkgZGVmYXVsdCBvbiBkb2N1bWVudC4gUmVhY3QgZG9lc24ndCBiaW5kIHRoZW1cbiAgICAvLyB0byBkb2N1bWVudCBhbnltb3JlLCBidXQgY2hhbmdpbmcgdGhpcyBub3cgd291bGQgdW5kb1xuICAgIC8vIHRoZSBwZXJmb3JtYW5jZSB3aW5zIGZyb20gdGhlIGNoYW5nZS4gU28gd2UgZW11bGF0ZVxuICAgIC8vIHRoZSBleGlzdGluZyBiZWhhdmlvciBtYW51YWxseSBvbiB0aGUgcm9vdHMgbm93LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTk2NTFcbiAgICBpZiAoZG9tRXZlbnROYW1lID09PSAndG91Y2hzdGFydCcgfHwgZG9tRXZlbnROYW1lID09PSAndG91Y2htb3ZlJyB8fCBkb21FdmVudE5hbWUgPT09ICd3aGVlbCcpIHtcbiAgICAgIGlzUGFzc2l2ZUxpc3RlbmVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB0YXJnZXRDb250YWluZXIgPSAgdGFyZ2V0Q29udGFpbmVyO1xuICB2YXIgdW5zdWJzY3JpYmVMaXN0ZW5lcjsgLy8gV2hlbiBsZWdhY3lGQlN1cHBvcnQgaXMgZW5hYmxlZCwgaXQncyBmb3Igd2hlbiB3ZVxuXG5cbiAgaWYgKGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpIHtcbiAgICBpZiAoaXNQYXNzaXZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudEJ1YmJsZUxpc3RlbmVyV2l0aFBhc3NpdmVGbGFnKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lciwgaXNQYXNzaXZlTGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcih0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc01hdGNoaW5nUm9vdENvbnRhaW5lcihncmFuZENvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHJldHVybiBncmFuZENvbnRhaW5lciA9PT0gdGFyZ2V0Q29udGFpbmVyIHx8IGdyYW5kQ29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgJiYgZ3JhbmRDb250YWluZXIucGFyZW50Tm9kZSA9PT0gdGFyZ2V0Q29udGFpbmVyO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBhbmNlc3Rvckluc3QgPSB0YXJnZXRJbnN0O1xuXG4gIGlmICgoZXZlbnRTeXN0ZW1GbGFncyAmIElTX0VWRU5UX0hBTkRMRV9OT05fTUFOQUdFRF9OT0RFKSA9PT0gMCAmJiAoZXZlbnRTeXN0ZW1GbGFncyAmIElTX05PTl9ERUxFR0FURUQpID09PSAwKSB7XG4gICAgdmFyIHRhcmdldENvbnRhaW5lck5vZGUgPSB0YXJnZXRDb250YWluZXI7IC8vIElmIHdlIGFyZSB1c2luZyB0aGUgbGVnYWN5IEZCIHN1cHBvcnQgZmxhZywgd2VcblxuICAgIGlmICh0YXJnZXRJbnN0ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGUgYmVsb3cgbG9naWMgYXR0ZW1wdHMgdG8gd29yayBvdXQgaWYgd2UgbmVlZCB0byBjaGFuZ2VcbiAgICAgIC8vIHRoZSB0YXJnZXQgZmliZXIgdG8gYSBkaWZmZXJlbnQgYW5jZXN0b3IuIFdlIGhhZCBzaW1pbGFyIGxvZ2ljXG4gICAgICAvLyBpbiB0aGUgbGVnYWN5IGV2ZW50IHN5c3RlbSwgZXhjZXB0IHRoZSBiaWcgZGlmZmVyZW5jZSBiZXR3ZWVuXG4gICAgICAvLyBzeXN0ZW1zIGlzIHRoYXQgdGhlIG1vZGVybiBldmVudCBzeXN0ZW0gbm93IGhhcyBhbiBldmVudCBsaXN0ZW5lclxuICAgICAgLy8gYXR0YWNoZWQgdG8gZWFjaCBSZWFjdCBSb290IGFuZCBSZWFjdCBQb3J0YWwgUm9vdC4gVG9nZXRoZXIsXG4gICAgICAvLyB0aGUgRE9NIG5vZGVzIHJlcHJlc2VudGluZyB0aGVzZSByb290cyBhcmUgdGhlIFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gVG8gZmlndXJlIG91dCB3aGljaCBhbmNlc3RvciBpbnN0YW5jZSB3ZSBzaG91bGQgdXNlLCB3ZSB0cmF2ZXJzZVxuICAgICAgLy8gdXAgdGhlIGZpYmVyIHRyZWUgZnJvbSB0aGUgdGFyZ2V0IGluc3RhbmNlIGFuZCBhdHRlbXB0IHRvIGZpbmRcbiAgICAgIC8vIHJvb3QgYm91bmRhcmllcyB0aGF0IG1hdGNoIHRoYXQgb2Ygb3VyIGN1cnJlbnQgXCJyb290Q29udGFpbmVyXCIuXG4gICAgICAvLyBJZiB3ZSBmaW5kIHRoYXQgXCJyb290Q29udGFpbmVyXCIsIHdlIGZpbmQgdGhlIHBhcmVudCBmaWJlclxuICAgICAgLy8gc3ViLXRyZWUgZm9yIHRoYXQgcm9vdCBhbmQgbWFrZSB0aGF0IG91ciBhbmNlc3RvciBpbnN0YW5jZS5cbiAgICAgIHZhciBub2RlID0gdGFyZ2V0SW5zdDtcblxuICAgICAgbWFpbkxvb3A6IHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5vZGVUYWcgPSBub2RlLnRhZztcblxuICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFJvb3QgfHwgbm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgIHZhciBjb250YWluZXIgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGNvbnRhaW5lciwgdGFyZ2V0Q29udGFpbmVyTm9kZSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChub2RlVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAvLyBUaGUgdGFyZ2V0IGlzIGEgcG9ydGFsLCBidXQgaXQncyBub3QgdGhlIHJvb3RDb250YWluZXIgd2UncmUgbG9va2luZyBmb3IuXG4gICAgICAgICAgICAvLyBOb3JtYWxseSBwb3J0YWxzIGhhbmRsZSB0aGVpciBvd24gZXZlbnRzIGFsbCB0aGUgd2F5IGRvd24gdG8gdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBTbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBzdG9wIG5vdy4gSG93ZXZlciwgd2UgZG9uJ3Qga25vdyBpZiB0aGlzIHBvcnRhbFxuICAgICAgICAgICAgLy8gd2FzIHBhcnQgb2YgKm91ciogcm9vdC5cbiAgICAgICAgICAgIHZhciBncmFuZE5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgICAgICAgd2hpbGUgKGdyYW5kTm9kZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB2YXIgZ3JhbmRUYWcgPSBncmFuZE5vZGUudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChncmFuZFRhZyA9PT0gSG9zdFJvb3QgfHwgZ3JhbmRUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICAgICAgICB2YXIgZ3JhbmRDb250YWluZXIgPSBncmFuZE5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICAgICAgICBpZiAoaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yIGFuZCB3ZSBmb3VuZCBpdCBhc1xuICAgICAgICAgICAgICAgICAgLy8gYSBwYXJlbnQgb2YgdGhlIFBvcnRhbC4gVGhhdCBtZWFucyB3ZSBjYW4gaWdub3JlIGl0IGJlY2F1c2UgdGhlXG4gICAgICAgICAgICAgICAgICAvLyBQb3J0YWwgd2lsbCBidWJibGUgdGhyb3VnaCB0byB1cy5cbiAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBncmFuZE5vZGUgPSBncmFuZE5vZGUucmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gTm93IHdlIG5lZWQgdG8gZmluZCBpdCdzIGNvcnJlc3BvbmRpbmcgaG9zdCBmaWJlciBpbiB0aGUgb3RoZXJcbiAgICAgICAgICAvLyB0cmVlLiBUbyBkbyB0aGlzIHdlIGNhbiB1c2UgZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsIGJ1dCB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB0aGUgZmliZXIgaXMgYSBob3N0IGluc3RhbmNlLCBvdGhlcndpc2VcbiAgICAgICAgICAvLyB3ZSBuZWVkIHRvIHRyYXZlcnNlIHVwIHRocm91Z2ggdGhlIERPTSB0aWxsIHdlIGZpbmQgdGhlIGNvcnJlY3RcbiAgICAgICAgICAvLyBub2RlIHRoYXQgaXMgZnJvbSB0aGUgb3RoZXIgdHJlZS5cblxuXG4gICAgICAgICAgd2hpbGUgKGNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHBhcmVudE5vZGUgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShjb250YWluZXIpO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnROb2RlLnRhZztcblxuICAgICAgICAgICAgaWYgKHBhcmVudFRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBwYXJlbnRUYWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgICAgICAgIG5vZGUgPSBhbmNlc3Rvckluc3QgPSBwYXJlbnROb2RlO1xuICAgICAgICAgICAgICBjb250aW51ZSBtYWluTG9vcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGFpbmVyID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGJhdGNoZWRFdmVudFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50c0ZvclBsdWdpbnMoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgYW5jZXN0b3JJbnN0KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHJldHVybiB7XG4gICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgIGxpc3RlbmVyOiBsaXN0ZW5lcixcbiAgICBjdXJyZW50VGFyZ2V0OiBjdXJyZW50VGFyZ2V0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVTaW5nbGVQaGFzZUxpc3RlbmVycyh0YXJnZXRGaWJlciwgcmVhY3ROYW1lLCBuYXRpdmVFdmVudFR5cGUsIGluQ2FwdHVyZVBoYXNlLCBhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgIT09IG51bGwgPyByZWFjdE5hbWUgKyAnQ2FwdHVyZScgOiBudWxsO1xuICB2YXIgcmVhY3RFdmVudE5hbWUgPSBpbkNhcHR1cmVQaGFzZSA/IGNhcHR1cmVOYW1lIDogcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyO1xuICB2YXIgbGFzdEhvc3RDb21wb25lbnQgPSBudWxsOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTIgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMi5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTIudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIGxhc3RIb3N0Q29tcG9uZW50ID0gc3RhdGVOb2RlOyAvLyBjcmVhdGVFdmVudEhhbmRsZSBsaXN0ZW5lcnNcblxuXG4gICAgICBpZiAocmVhY3RFdmVudE5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0RXZlbnROYW1lKTtcblxuICAgICAgICBpZiAobGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGxpc3RlbmVyLCBsYXN0SG9zdENvbXBvbmVudCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBJZiB3ZSBhcmUgb25seSBhY2N1bXVsYXRpbmcgZXZlbnRzIGZvciB0aGUgdGFyZ2V0LCB0aGVuIHdlIGRvbid0XG4gICAgLy8gY29udGludWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggdGhlIFJlYWN0IGZpYmVyIHRyZWUgdG8gZmluZCBvdGhlclxuICAgIC8vIGxpc3RlbmVycy5cblxuXG4gICAgaWYgKGFjY3VtdWxhdGVUYXJnZXRPbmx5KSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gQmVmb3JlSW5wdXRFdmVudFBsdWdpblxuLy8gLSBDaGFuZ2VFdmVudFBsdWdpblxuLy8gLSBTZWxlY3RFdmVudFBsdWdpblxuLy8gVGhpcyBpcyBiZWNhdXNlIHdlIG9ubHkgcHJvY2VzcyB0aGVzZSBwbHVnaW5zXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMgKHZpYSBlbXVsYXRpb24pLlxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSkge1xuICB2YXIgY2FwdHVyZU5hbWUgPSByZWFjdE5hbWUgKyAnQ2FwdHVyZSc7XG4gIHZhciBsaXN0ZW5lcnMgPSBbXTtcbiAgdmFyIGluc3RhbmNlID0gdGFyZ2V0RmliZXI7IC8vIEFjY3VtdWxhdGUgYWxsIGluc3RhbmNlcyBhbmQgbGlzdGVuZXJzIHZpYSB0aGUgdGFyZ2V0IC0+IHJvb3QgcGF0aC5cblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICB2YXIgX2luc3RhbmNlMyA9IGluc3RhbmNlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2UzLnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlMy50YWc7IC8vIEhhbmRsZSBsaXN0ZW5lcnMgdGhhdCBhcmUgb24gSG9zdENvbXBvbmVudHMgKGkuZS4gPGRpdj4pXG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG4gICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVOYW1lKTtcblxuICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVhY3ROYW1lKTtcblxuICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgbGlzdGVuZXJzLnB1c2goY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgYnViYmxlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIHJldHVybiBsaXN0ZW5lcnM7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudChpbnN0KSB7XG4gIGlmIChpbnN0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkbyB7XG4gICAgaW5zdCA9IGluc3QucmV0dXJuOyAvLyBUT0RPOiBJZiB0aGlzIGlzIGEgSG9zdFJvb3Qgd2UgbWlnaHQgd2FudCB0byBiYWlsIG91dC5cbiAgICAvLyBUaGF0IGlzIGRlcGVuZGluZyBvbiBpZiB3ZSB3YW50IG5lc3RlZCBzdWJ0cmVlcyAobGF5ZXJzKSB0byBidWJibGVcbiAgICAvLyBldmVudHMgdG8gdGhlaXIgcGFyZW50LiBXZSBjb3VsZCBhbHNvIGdvIHRocm91Z2ggcGFyZW50Tm9kZSBvbiB0aGVcbiAgICAvLyBob3N0IG5vZGUgYnV0IHRoYXQgd291bGRuJ3Qgd29yayBmb3IgUmVhY3QgTmF0aXZlIGFuZCBkb2Vzbid0IGxldCB1c1xuICAgIC8vIGRvIHRoZSBwb3J0YWwgZmVhdHVyZS5cbiAgfSB3aGlsZSAoaW5zdCAmJiBpbnN0LnRhZyAhPT0gSG9zdENvbXBvbmVudCk7XG5cbiAgaWYgKGluc3QpIHtcbiAgICByZXR1cm4gaW5zdDtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgQSBhbmQgQiwgb3IgbnVsbCBpZiB0aGV5IGFyZSBpblxuICogZGlmZmVyZW50IHRyZWVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoaW5zdEEsIGluc3RCKSB7XG4gIHZhciBub2RlQSA9IGluc3RBO1xuICB2YXIgbm9kZUIgPSBpbnN0QjtcbiAgdmFyIGRlcHRoQSA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEEgPSBub2RlQTsgdGVtcEE7IHRlbXBBID0gZ2V0UGFyZW50KHRlbXBBKSkge1xuICAgIGRlcHRoQSsrO1xuICB9XG5cbiAgdmFyIGRlcHRoQiA9IDA7XG5cbiAgZm9yICh2YXIgdGVtcEIgPSBub2RlQjsgdGVtcEI7IHRlbXBCID0gZ2V0UGFyZW50KHRlbXBCKSkge1xuICAgIGRlcHRoQisrO1xuICB9IC8vIElmIEEgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEEgLSBkZXB0aEIgPiAwKSB7XG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIGRlcHRoQS0tO1xuICB9IC8vIElmIEIgaXMgZGVlcGVyLCBjcmF3bCB1cC5cblxuXG4gIHdoaWxlIChkZXB0aEIgLSBkZXB0aEEgPiAwKSB7XG4gICAgbm9kZUIgPSBnZXRQYXJlbnQobm9kZUIpO1xuICAgIGRlcHRoQi0tO1xuICB9IC8vIFdhbGsgaW4gbG9ja3N0ZXAgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuXG5cbiAgdmFyIGRlcHRoID0gZGVwdGhBO1xuXG4gIHdoaWxlIChkZXB0aC0tKSB7XG4gICAgaWYgKG5vZGVBID09PSBub2RlQiB8fCBub2RlQiAhPT0gbnVsbCAmJiBub2RlQSA9PT0gbm9kZUIuYWx0ZXJuYXRlKSB7XG4gICAgICByZXR1cm4gbm9kZUE7XG4gICAgfVxuXG4gICAgbm9kZUEgPSBnZXRQYXJlbnQobm9kZUEpO1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGV2ZW50LCB0YXJnZXQsIGNvbW1vbiwgaW5DYXB0dXJlUGhhc2UpIHtcbiAgdmFyIHJlZ2lzdHJhdGlvbk5hbWUgPSBldmVudC5fcmVhY3ROYW1lO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldDtcblxuICB3aGlsZSAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICBpZiAoaW5zdGFuY2UgPT09IGNvbW1vbikge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0YW5jZTQgPSBpbnN0YW5jZSxcbiAgICAgICAgYWx0ZXJuYXRlID0gX2luc3RhbmNlNC5hbHRlcm5hdGUsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTQuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2U0LnRhZztcblxuICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRhcmdldCA9IHN0YXRlTm9kZTtcblxuICAgICAgaWYgKGluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBjYXB0dXJlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGNhcHR1cmVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXJzLnVuc2hpZnQoY3JlYXRlRGlzcGF0Y2hMaXN0ZW5lcihpbnN0YW5jZSwgY2FwdHVyZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIWluQ2FwdHVyZVBoYXNlKSB7XG4gICAgICAgIHZhciBidWJibGVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWdpc3RyYXRpb25OYW1lKTtcblxuICAgICAgICBpZiAoYnViYmxlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbnN0YW5jZSA9IGluc3RhbmNlLnJldHVybjtcbiAgfVxuXG4gIGlmIChsaXN0ZW5lcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gIH1cbn0gLy8gV2Ugc2hvdWxkIG9ubHkgdXNlIHRoaXMgZnVuY3Rpb24gZm9yOlxuLy8gLSBFbnRlckxlYXZlRXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhpcyBwbHVnaW5cbi8vIGluIHRoZSBidWJibGUgcGhhc2UsIHNvIHdlIG5lZWQgdG8gYWNjdW11bGF0ZSB0d29cbi8vIHBoYXNlIGV2ZW50IGxpc3RlbmVycy5cblxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlRW50ZXJMZWF2ZVR3b1BoYXNlTGlzdGVuZXJzKGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGVudGVyRXZlbnQsIGZyb20sIHRvKSB7XG4gIHZhciBjb21tb24gPSBmcm9tICYmIHRvID8gZ2V0TG93ZXN0Q29tbW9uQW5jZXN0b3IoZnJvbSwgdG8pIDogbnVsbDtcblxuICBpZiAoZnJvbSAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbGVhdmVFdmVudCwgZnJvbSwgY29tbW9uLCBmYWxzZSk7XG4gIH1cblxuICBpZiAodG8gIT09IG51bGwgJiYgZW50ZXJFdmVudCAhPT0gbnVsbCkge1xuICAgIGFjY3VtdWxhdGVFbnRlckxlYXZlTGlzdGVuZXJzRm9yRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZW50ZXJFdmVudCwgdG8sIGNvbW1vbiwgdHJ1ZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgY2FwdHVyZSkge1xuICByZXR1cm4gZG9tRXZlbnROYW1lICsgXCJfX1wiICsgKGNhcHR1cmUgPyAnY2FwdHVyZScgOiAnYnViYmxlJyk7XG59XG5cbnZhciBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IGZhbHNlO1xudmFyIERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MID0gJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJztcbnZhciBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgPSAnc3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nJztcbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xudmFyIEFVVE9GT0NVUyA9ICdhdXRvRm9jdXMnO1xudmFyIENISUxEUkVOID0gJ2NoaWxkcmVuJztcbnZhciBTVFlMRSA9ICdzdHlsZSc7XG52YXIgSFRNTCQxID0gJ19faHRtbCc7XG52YXIgSFRNTF9OQU1FU1BBQ0UkMSA9IE5hbWVzcGFjZXMuaHRtbDtcbnZhciB3YXJuZWRVbmtub3duVGFncztcbnZhciBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc7XG52YXIgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudDtcbnZhciB3YXJuRm9yVGV4dERpZmZlcmVuY2U7XG52YXIgd2FybkZvclByb3BEaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXM7XG52YXIgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyO1xudmFyIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmc7XG52YXIgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlO1xudmFyIG5vcm1hbGl6ZUhUTUw7XG5cbntcbiAgd2FybmVkVW5rbm93blRhZ3MgPSB7XG4gICAgLy8gVGhlcmUgYXJlIHdvcmtpbmcgcG9seWZpbGxzIGZvciA8ZGlhbG9nPi4gTGV0IHBlb3BsZSB1c2UgaXQuXG4gICAgZGlhbG9nOiB0cnVlLFxuICAgIC8vIEVsZWN0cm9uIHNoaXBzIGEgY3VzdG9tIDx3ZWJ2aWV3PiB0YWcgdG8gZGlzcGxheSBleHRlcm5hbCB3ZWIgY29udGVudCBpblxuICAgIC8vIGFuIGlzb2xhdGVkIGZyYW1lIGFuZCBwcm9jZXNzLlxuICAgIC8vIFRoaXMgdGFnIGlzIG5vdCBwcmVzZW50IGluIG5vbiBFbGVjdHJvbiBlbnZpcm9ubWVudHMgc3VjaCBhcyBKU0RvbSB3aGljaFxuICAgIC8vIGlzIG9mdGVuIHVzZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAgLy8gQHNlZSBodHRwczovL2VsZWN0cm9uanMub3JnL2RvY3MvYXBpL3dlYnZpZXctdGFnXG4gICAgd2VidmlldzogdHJ1ZVxuICB9O1xuXG4gIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQgPSBmdW5jdGlvbiAodHlwZSwgcHJvcHMpIHtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXModHlwZSwgcHJvcHMpO1xuICAgIHZhbGlkYXRlUHJvcGVydGllcyQxKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMih0eXBlLCBwcm9wcywge1xuICAgICAgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llczogcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyxcbiAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM6IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXNcbiAgICB9KTtcbiAgfTsgLy8gSUUgMTEgcGFyc2VzICYgbm9ybWFsaXplcyB0aGUgc3R5bGUgYXR0cmlidXRlIGFzIG9wcG9zZWQgdG8gb3RoZXJcbiAgLy8gYnJvd3NlcnMuIEl0IGFkZHMgc3BhY2VzIGFuZCBzb3J0cyB0aGUgcHJvcGVydGllcyBpbiBzb21lXG4gIC8vIG5vbi1hbHBoYWJldGljYWwgb3JkZXIuIEhhbmRsaW5nIHRoYXQgd291bGQgcmVxdWlyZSBzb3J0aW5nIENTU1xuICAvLyBwcm9wZXJ0aWVzIGluIHRoZSBjbGllbnQgJiBzZXJ2ZXIgdmVyc2lvbnMgb3IgYXBwbHlpbmdcbiAgLy8gYGV4cGVjdGVkU3R5bGVgIHRvIGEgdGVtcG9yYXJ5IERPTSBub2RlIHRvIHJlYWQgaXRzIGBzdHlsZWAgYXR0cmlidXRlXG4gIC8vIG5vcm1hbGl6ZWQuIFNpbmNlIGl0IG9ubHkgYWZmZWN0cyBJRSwgd2UncmUgc2tpcHBpbmcgc3R5bGUgd2FybmluZ3NcbiAgLy8gaW4gdGhhdCBicm93c2VyIGNvbXBsZXRlbHkgaW4gZmF2b3Igb2YgZG9pbmcgYWxsIHRoYXQgd29yay5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTE4MDdcblxuXG4gIGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcgPSBjYW5Vc2VET00gJiYgIWRvY3VtZW50LmRvY3VtZW50TW9kZTsgLy8gSFRNTCBwYXJzaW5nIG5vcm1hbGl6ZXMgQ1IgYW5kIENSTEYgdG8gTEYuXG4gIC8vIEl0IGFsc28gY2FuIHR1cm4gXFx1MDAwMCBpbnRvIFxcdUZGRkQgaW5zaWRlIGF0dHJpYnV0ZXMuXG4gIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9odG1sNS9zaW5nbGUtcGFnZS5odG1sI3ByZXByb2Nlc3NpbmctdGhlLWlucHV0LXN0cmVhbVxuICAvLyBJZiB3ZSBoYXZlIGEgbWlzbWF0Y2gsIGl0IG1pZ2h0IGJlIGNhdXNlZCBieSB0aGF0LlxuICAvLyBXZSB3aWxsIHN0aWxsIHBhdGNoIHVwIGluIHRoaXMgY2FzZSBidXQgbm90IGZpcmUgdGhlIHdhcm5pbmcuXG5cbiAgdmFyIE5PUk1BTElaRV9ORVdMSU5FU19SRUdFWCA9IC9cXHJcXG4/L2c7XG4gIHZhciBOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVggPSAvXFx1MDAwMHxcXHVGRkZEL2c7XG5cbiAgbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlID0gZnVuY3Rpb24gKG1hcmt1cCkge1xuICAgIHZhciBtYXJrdXBTdHJpbmcgPSB0eXBlb2YgbWFya3VwID09PSAnc3RyaW5nJyA/IG1hcmt1cCA6ICcnICsgbWFya3VwO1xuICAgIHJldHVybiBtYXJrdXBTdHJpbmcucmVwbGFjZShOT1JNQUxJWkVfTkVXTElORVNfUkVHRVgsICdcXG4nKS5yZXBsYWNlKE5PUk1BTElaRV9OVUxMX0FORF9SRVBMQUNFTUVOVF9SRUdFWCwgJycpO1xuICB9O1xuXG4gIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZSA9IGZ1bmN0aW9uIChzZXJ2ZXJUZXh0LCBjbGllbnRUZXh0KSB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG5vcm1hbGl6ZWRDbGllbnRUZXh0ID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFRleHQpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShzZXJ2ZXJUZXh0KTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVGV4dCA9PT0gbm9ybWFsaXplZENsaWVudFRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignVGV4dCBjb250ZW50IGRpZCBub3QgbWF0Y2guIFNlcnZlcjogXCIlc1wiIENsaWVudDogXCIlc1wiJywgbm9ybWFsaXplZFNlcnZlclRleHQsIG5vcm1hbGl6ZWRDbGllbnRUZXh0KTtcbiAgfTtcblxuICB3YXJuRm9yUHJvcERpZmZlcmVuY2UgPSBmdW5jdGlvbiAocHJvcE5hbWUsIHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoY2xpZW50VmFsdWUpO1xuICAgIHZhciBub3JtYWxpemVkU2VydmVyVmFsdWUgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVmFsdWUpO1xuXG4gICAgaWYgKG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSA9PT0gbm9ybWFsaXplZENsaWVudFZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1Byb3AgYCVzYCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6ICVzIENsaWVudDogJXMnLCBwcm9wTmFtZSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZFNlcnZlclZhbHVlKSwgSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplZENsaWVudFZhbHVlKSk7XG4gIH07XG5cbiAgd2FybkZvckV4dHJhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lcykge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcbiAgICB2YXIgbmFtZXMgPSBbXTtcbiAgICBhdHRyaWJ1dGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuXG4gICAgZXJyb3IoJ0V4dHJhIGF0dHJpYnV0ZXMgZnJvbSB0aGUgc2VydmVyOiAlcycsIG5hbWVzKTtcbiAgfTtcblxuICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAocmVnaXN0cmF0aW9uTmFtZSwgbGlzdGVuZXIpIHtcbiAgICBpZiAobGlzdGVuZXIgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBgZmFsc2VgLlxcblxcbicgKyAnSWYgeW91IHVzZWQgdG8gY29uZGl0aW9uYWxseSBvbWl0IGl0IHdpdGggJXM9e2NvbmRpdGlvbiAmJiB2YWx1ZX0sICcgKyAncGFzcyAlcz17Y29uZGl0aW9uID8gdmFsdWUgOiB1bmRlZmluZWR9IGluc3RlYWQuJywgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCBgJXNgIGxpc3RlbmVyIHRvIGJlIGEgZnVuY3Rpb24sIGluc3RlYWQgZ290IGEgdmFsdWUgb2YgYCVzYCB0eXBlLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHR5cGVvZiBsaXN0ZW5lcik7XG4gICAgfVxuICB9OyAvLyBQYXJzZSB0aGUgSFRNTCBhbmQgcmVhZCBpdCBiYWNrIHRvIG5vcm1hbGl6ZSB0aGUgSFRNTCBzdHJpbmcgc28gdGhhdCBpdFxuICAvLyBjYW4gYmUgdXNlZCBmb3IgY29tcGFyaXNvbi5cblxuXG4gIG5vcm1hbGl6ZUhUTUwgPSBmdW5jdGlvbiAocGFyZW50LCBodG1sKSB7XG4gICAgLy8gV2UgY291bGQgaGF2ZSBjcmVhdGVkIGEgc2VwYXJhdGUgZG9jdW1lbnQgaGVyZSB0byBhdm9pZFxuICAgIC8vIHJlLWluaXRpYWxpemluZyBjdXN0b20gZWxlbWVudHMgaWYgdGhleSBleGlzdC4gQnV0IHRoaXMgYnJlYWtzXG4gICAgLy8gaG93IDxub3NjcmlwdD4gaXMgYmVpbmcgaGFuZGxlZC4gU28gd2UgdXNlIHRoZSBzYW1lIGRvY3VtZW50LlxuICAgIC8vIFNlZSB0aGUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMTE1Ny5cbiAgICB2YXIgdGVzdEVsZW1lbnQgPSBwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxID8gcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYXJlbnQudGFnTmFtZSkgOiBwYXJlbnQub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocGFyZW50Lm5hbWVzcGFjZVVSSSwgcGFyZW50LnRhZ05hbWUpO1xuICAgIHRlc3RFbGVtZW50LmlubmVySFRNTCA9IGh0bWw7XG4gICAgcmV0dXJuIHRlc3RFbGVtZW50LmlubmVySFRNTDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0T3duZXJEb2N1bWVudEZyb21Sb290Q29udGFpbmVyKHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJFbGVtZW50IDogcm9vdENvbnRhaW5lckVsZW1lbnQub3duZXJEb2N1bWVudDtcbn1cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbmZ1bmN0aW9uIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KG5vZGUpIHtcbiAgLy8gTW9iaWxlIFNhZmFyaSBkb2VzIG5vdCBmaXJlIHByb3Blcmx5IGJ1YmJsZSBjbGljayBldmVudHMgb25cbiAgLy8gbm9uLWludGVyYWN0aXZlIGVsZW1lbnRzLCB3aGljaCBtZWFucyBkZWxlZ2F0ZWQgY2xpY2sgbGlzdGVuZXJzIGRvIG5vdFxuICAvLyBmaXJlLiBUaGUgd29ya2Fyb3VuZCBmb3IgdGhpcyBidWcgaW52b2x2ZXMgYXR0YWNoaW5nIGFuIGVtcHR5IGNsaWNrXG4gIC8vIGxpc3RlbmVyIG9uIHRoZSB0YXJnZXQgbm9kZS5cbiAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDEwLzA5L2NsaWNrX2V2ZW50X2RlbC5odG1sXG4gIC8vIEp1c3Qgc2V0IGl0IHVzaW5nIHRoZSBvbmNsaWNrIHByb3BlcnR5IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBtYW5hZ2UgYW55XG4gIC8vIGJvb2trZWVwaW5nIGZvciBpdC4gTm90IHN1cmUgaWYgd2UgbmVlZCB0byBjbGVhciBpdCB3aGVuIHRoZSBsaXN0ZW5lciBpc1xuICAvLyByZW1vdmVkLlxuICAvLyBUT0RPOiBPbmx5IGRvIHRoaXMgZm9yIHRoZSByZWxldmFudCBTYWZhcmlzIG1heWJlP1xuICBub2RlLm9uY2xpY2sgPSBub29wO1xufVxuXG5mdW5jdGlvbiBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBuZXh0UHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGZvciAodmFyIHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IG5leHRQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAge1xuICAgICAgICBpZiAobmV4dFByb3ApIHtcbiAgICAgICAgICAvLyBGcmVlemUgdGhlIG5leHQgc3R5bGUgb2JqZWN0IHNvIHRoYXQgd2UgY2FuIGFzc3VtZSBpdCB3b24ndCBiZVxuICAgICAgICAgIC8vIG11dGF0ZWQuIFdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgZm9yIHRoaXMgaW4gdGhlIHBhc3QuXG4gICAgICAgICAgT2JqZWN0LmZyZWV6ZShuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG5cblxuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKG5leHRIdG1sICE9IG51bGwpIHtcbiAgICAgICAgc2V0SW5uZXJIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGluaXRpYWwgdGV4dENvbnRlbnQgd2hlbiB0aGUgdGV4dCBpcyBlbXB0eS4gSW4gSUUxMSBzZXR0aW5nXG4gICAgICAgIC8vIHRleHRDb250ZW50IG9uIGEgPHRleHRhcmVhPiB3aWxsIGNhdXNlIHRoZSBwbGFjZWhvbGRlciB0byBub3RcbiAgICAgICAgLy8gc2hvdyB3aXRoaW4gdGhlIDx0ZXh0YXJlYT4gdW50aWwgaXQgaGFzIGJlZW4gZm9jdXNlZCBhbmQgYmx1cnJlZCBhZ2Fpbi5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy82NzMxI2lzc3VlY29tbWVudC0yNTQ4NzQ1NTNcbiAgICAgICAgdmFyIGNhblNldFRleHRDb250ZW50ID0gdGFnICE9PSAndGV4dGFyZWEnIHx8IG5leHRQcm9wICE9PSAnJztcblxuICAgICAgICBpZiAoY2FuU2V0VGV4dENvbnRlbnQpIHtcbiAgICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyArIG5leHRQcm9wKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgbmV4dFByb3AgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB3YXJuRm9ySW52YWxpZEV2ZW50TGlzdGVuZXIocHJvcEtleSwgbmV4dFByb3ApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BLZXkgPT09ICdvblNjcm9sbCcpIHtcbiAgICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdzY3JvbGwnLCBkb21FbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgc2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgLy8gVE9ETzogSGFuZGxlIHdhc0N1c3RvbUNvbXBvbmVudFRhZ1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHVwZGF0ZVBheWxvYWQubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgcHJvcEtleSA9IHVwZGF0ZVBheWxvYWRbaV07XG4gICAgdmFyIHByb3BWYWx1ZSA9IHVwZGF0ZVBheWxvYWRbaSArIDFdO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICBzZXRWYWx1ZUZvclN0eWxlcyhkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsIHByb3BWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgcHJvcFZhbHVlLCBpc0N1c3RvbUNvbXBvbmVudFRhZyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJFbGVtZW50LCBwYXJlbnROYW1lc3BhY2UpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnOyAvLyBXZSBjcmVhdGUgdGFncyBpbiB0aGUgbmFtZXNwYWNlIG9mIHRoZWlyIHBhcmVudCBjb250YWluZXIsIGV4Y2VwdCBIVE1MXG4gIC8vIHRhZ3MgZ2V0IG5vIG5hbWVzcGFjZS5cblxuICB2YXIgb3duZXJEb2N1bWVudCA9IGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIHZhciBkb21FbGVtZW50O1xuICB2YXIgbmFtZXNwYWNlVVJJID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICBuYW1lc3BhY2VVUkkgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAge1xuICAgICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcyk7IC8vIFNob3VsZCB0aGlzIGNoZWNrIGJlIGdhdGVkIGJ5IHBhcmVudCBuYW1lc3BhY2U/IE5vdCBzdXJlIHdlIHdhbnQgdG9cbiAgICAgIC8vIGFsbG93IDxTVkc+IG9yIDxtQVRIPi5cblxuICAgICAgaWYgKCFpc0N1c3RvbUNvbXBvbmVudFRhZyAmJiB0eXBlICE9PSB0eXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgZXJyb3IoJzwlcyAvPiBpcyB1c2luZyBpbmNvcnJlY3QgY2FzaW5nLiAnICsgJ1VzZSBQYXNjYWxDYXNlIGZvciBSZWFjdCBjb21wb25lbnRzLCAnICsgJ29yIGxvd2VyY2FzZSBmb3IgSFRNTCBlbGVtZW50cy4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gJ3NjcmlwdCcpIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgc2NyaXB0IHZpYSAuaW5uZXJIVE1MIHNvIGl0cyBcInBhcnNlci1pbnNlcnRlZFwiIGZsYWcgaXNcbiAgICAgIC8vIHNldCB0byB0cnVlIGFuZCBpdCBkb2VzIG5vdCBleGVjdXRlXG4gICAgICB2YXIgZGl2ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcblxuICAgICAgZGl2LmlubmVySFRNTCA9ICc8c2NyaXB0PjwnICsgJy9zY3JpcHQ+JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLy8gVGhpcyBpcyBndWFyYW50ZWVkIHRvIHlpZWxkIGEgc2NyaXB0IGVsZW1lbnQuXG5cbiAgICAgIHZhciBmaXJzdENoaWxkID0gZGl2LmZpcnN0Q2hpbGQ7XG4gICAgICBkb21FbGVtZW50ID0gZGl2LnJlbW92ZUNoaWxkKGZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHByb3BzLmlzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gJEZsb3dJc3N1ZSBgY3JlYXRlRWxlbWVudGAgc2hvdWxkIGJlIHVwZGF0ZWQgZm9yIFdlYiBDb21wb25lbnRzXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUsIHtcbiAgICAgICAgaXM6IHByb3BzLmlzXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU2VwYXJhdGUgZWxzZSBicmFuY2ggaW5zdGVhZCBvZiB1c2luZyBgcHJvcHMuaXMgfHwgdW5kZWZpbmVkYCBhYm92ZSBiZWNhdXNlIG9mIGEgRmlyZWZveCBidWcuXG4gICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC82ODk2XG4gICAgICAvLyBhbmQgZGlzY3Vzc2lvbiBpbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc2MjQwXG4gICAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KHR5cGUpOyAvLyBOb3JtYWxseSBhdHRyaWJ1dGVzIGFyZSBhc3NpZ25lZCBpbiBgc2V0SW5pdGlhbERPTVByb3BlcnRpZXNgLCBob3dldmVyIHRoZSBgbXVsdGlwbGVgIGFuZCBgc2l6ZWBcbiAgICAgIC8vIGF0dHJpYnV0ZXMgb24gYHNlbGVjdGBzIG5lZWRzIHRvIGJlIGFkZGVkIGJlZm9yZSBgb3B0aW9uYHMgYXJlIGluc2VydGVkLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50czpcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIGRvZXMgbm90IHNjcm9sbCB0byB0aGUgY29ycmVjdCBvcHRpb24gYmVjYXVzZSBzaW5ndWxhclxuICAgICAgLy8gIGBzZWxlY3RgIGVsZW1lbnRzIGF1dG9tYXRpY2FsbHkgcGljayB0aGUgZmlyc3QgaXRlbSAjMTMyMjJcbiAgICAgIC8vIC0gYSBidWcgd2hlcmUgdGhlIGBzZWxlY3RgIHNldCB0aGUgZmlyc3QgaXRlbSBhcyBzZWxlY3RlZCBkZXNwaXRlIHRoZSBgc2l6ZWAgYXR0cmlidXRlICMxNDIzOVxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMyMjJcbiAgICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MjM5XG5cbiAgICAgIGlmICh0eXBlID09PSAnc2VsZWN0Jykge1xuICAgICAgICB2YXIgbm9kZSA9IGRvbUVsZW1lbnQ7XG5cbiAgICAgICAgaWYgKHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgICAgbm9kZS5tdWx0aXBsZSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvcHMuc2l6ZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgYSBzaXplIGdyZWF0ZXIgdGhhbiAxIGNhdXNlcyBhIHNlbGVjdCB0byBiZWhhdmUgbGlrZSBgbXVsdGlwbGU9dHJ1ZWAsIHdoZXJlXG4gICAgICAgICAgLy8gaXQgaXMgcG9zc2libGUgdGhhdCBubyBvcHRpb24gaXMgc2VsZWN0ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUaGlzIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gYSBzZWxlY3QgaW4gXCJzaW5nbGUgc2VsZWN0aW9uIG1vZGVcIi5cbiAgICAgICAgICBub2RlLnNpemUgPSBwcm9wcy5zaXplO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRvbUVsZW1lbnQgPSBvd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuYW1lc3BhY2VVUkksIHR5cGUpO1xuICB9XG5cbiAge1xuICAgIGlmIChuYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFJDEpIHtcbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGRvbUVsZW1lbnQpID09PSAnW29iamVjdCBIVE1MVW5rbm93bkVsZW1lbnRdJyAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHdhcm5lZFVua25vd25UYWdzLCB0eXBlKSkge1xuICAgICAgICB3YXJuZWRVbmtub3duVGFnc1t0eXBlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSB0YWcgPCVzPiBpcyB1bnJlY29nbml6ZWQgaW4gdGhpcyBicm93c2VyLiAnICsgJ0lmIHlvdSBtZWFudCB0byByZW5kZXIgYSBSZWFjdCBjb21wb25lbnQsIHN0YXJ0IGl0cyBuYW1lIHdpdGggJyArICdhbiB1cHBlcmNhc2UgbGV0dGVyLicsIHR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkb21FbGVtZW50O1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkuY3JlYXRlVGV4dE5vZGUodGV4dCk7XG59XG5mdW5jdGlvbiBzZXRJbml0aWFsUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIHJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcblxuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgdmFyIHByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnZGlhbG9nJzpcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2NhbmNlbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2xvc2UnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzb3VyY2UnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGVycm9yIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgdmFsaWRhdGVQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpO1xuICBzZXRJbml0aWFsRE9NUHJvcGVydGllcyh0YWcsIGRvbUVsZW1lbnQsIHJvb3RDb250YWluZXJFbGVtZW50LCBwcm9wcywgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgZmFsc2UpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cbn0gLy8gQ2FsY3VsYXRlIHRoZSBkaWZmIGJldHdlZW4gdGhlIHR3byBvYmplY3RzLlxuXG5mdW5jdGlvbiBkaWZmUHJvcGVydGllcyhkb21FbGVtZW50LCB0YWcsIGxhc3RSYXdQcm9wcywgbmV4dFJhd1Byb3BzLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIG5leHRSYXdQcm9wcyk7XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG4gIHZhciBsYXN0UHJvcHM7XG4gIHZhciBuZXh0UHJvcHM7XG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDEoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBsYXN0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCBsYXN0UmF3UHJvcHMpO1xuICAgICAgbmV4dFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBsYXN0UHJvcHMgPSBsYXN0UmF3UHJvcHM7XG4gICAgICBuZXh0UHJvcHMgPSBuZXh0UmF3UHJvcHM7XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdFByb3BzLm9uQ2xpY2sgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG5leHRQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCBuZXh0UHJvcHMpO1xuICB2YXIgcHJvcEtleTtcbiAgdmFyIHN0eWxlTmFtZTtcbiAgdmFyIHN0eWxlVXBkYXRlcyA9IG51bGw7XG5cbiAgZm9yIChwcm9wS2V5IGluIGxhc3RQcm9wcykge1xuICAgIGlmIChuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgIWxhc3RQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBsYXN0UHJvcHNbcHJvcEtleV0gPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB2YXIgbGFzdFN0eWxlID0gbGFzdFByb3BzW3Byb3BLZXldO1xuXG4gICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0U3R5bGUpIHtcbiAgICAgICAgaWYgKGxhc3RTdHlsZS5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MIHx8IHByb3BLZXkgPT09IENISUxEUkVOKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IFNVUFBSRVNTX0NPTlRFTlRfRURJVEFCTEVfV0FSTklORyB8fCBwcm9wS2V5ID09PSBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBBVVRPRk9DVVMpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgIC8vIHRoYXQgdGhlIFwiY3VycmVudFwiIGZpYmVyIHBvaW50ZXIgZ2V0cyB1cGRhdGVkIHNvIHdlIG5lZWQgYSBjb21taXRcbiAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICBpZiAoIXVwZGF0ZVBheWxvYWQpIHtcbiAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYWxsIG90aGVyIGRlbGV0ZWQgcHJvcGVydGllcyB3ZSBhZGQgaXQgdG8gdGhlIHF1ZXVlLiBXZSB1c2VcbiAgICAgIC8vIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgaW4gdGhlIGNvbW1pdCBwaGFzZSBpbnN0ZWFkLlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAocHJvcEtleSBpbiBuZXh0UHJvcHMpIHtcbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG4gICAgdmFyIGxhc3RQcm9wID0gbGFzdFByb3BzICE9IG51bGwgPyBsYXN0UHJvcHNbcHJvcEtleV0gOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoIW5leHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSB8fCBuZXh0UHJvcCA9PT0gbGFzdFByb3AgfHwgbmV4dFByb3AgPT0gbnVsbCAmJiBsYXN0UHJvcCA9PSBudWxsKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChsYXN0UHJvcCkge1xuICAgICAgICAvLyBVbnNldCBzdHlsZXMgb24gYGxhc3RQcm9wYCBidXQgbm90IG9uIGBuZXh0UHJvcGAuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIGxhc3RQcm9wKSB7XG4gICAgICAgICAgaWYgKGxhc3RQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgKCFuZXh0UHJvcCB8fCAhbmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkpIHtcbiAgICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICAgIHN0eWxlVXBkYXRlcyA9IHt9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBVcGRhdGUgc3R5bGVzIHRoYXQgY2hhbmdlZCBzaW5jZSBgbGFzdFByb3BgLlxuXG5cbiAgICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAobmV4dFByb3AuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSAmJiBsYXN0UHJvcFtzdHlsZU5hbWVdICE9PSBuZXh0UHJvcFtzdHlsZU5hbWVdKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSBuZXh0UHJvcFtzdHlsZU5hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVsaWVzIG9uIGB1cGRhdGVTdHlsZXNCeUlEYCBub3QgbXV0YXRpbmcgYHN0eWxlVXBkYXRlc2AuXG4gICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZC5wdXNoKHByb3BLZXksIHN0eWxlVXBkYXRlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdHlsZVVwZGF0ZXMgPSBuZXh0UHJvcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgbGFzdEh0bWwgPSBsYXN0UHJvcCA/IGxhc3RQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChsYXN0SHRtbCAhPT0gbmV4dEh0bWwpIHtcbiAgICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dEh0bWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5leHRQcm9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcy5oYXNPd25Qcm9wZXJ0eShwcm9wS2V5KSkge1xuICAgICAgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2UgZWFnZXJseSBsaXN0ZW4gdG8gdGhpcyBldmVuIHRob3VnaCB3ZSBoYXZlbid0IGNvbW1pdHRlZCB5ZXQuXG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkICYmIGxhc3RQcm9wICE9PSBuZXh0UHJvcCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlLiBJZiBhbnkgbGlzdGVuZXIgdXBkYXRlcyB3ZSBuZWVkIHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBwcm9wcyBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAgIC8vIHRvIHVwZGF0ZSB0aGlzIGVsZW1lbnQuXG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ29iamVjdCcgJiYgbmV4dFByb3AgIT09IG51bGwgJiYgbmV4dFByb3AuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFKSB7XG4gICAgICAvLyBJZiB3ZSBlbmNvdW50ZXIgdXNlT3BhcXVlUmVmZXJlbmNlJ3Mgb3BhcXVlIG9iamVjdCwgdGhpcyBtZWFucyB3ZSBhcmUgaHlkcmF0aW5nLlxuICAgICAgLy8gSW4gdGhpcyBjYXNlLCBjYWxsIHRoZSBvcGFxdWUgb2JqZWN0J3MgdG9TdHJpbmcgZnVuY3Rpb24gd2hpY2ggZ2VuZXJhdGVzIGEgbmV3IGNsaWVudFxuICAgICAgLy8gSUQgc28gY2xpZW50IGFuZCBzZXJ2ZXIgSURzIG1hdGNoIGFuZCB0aHJvd3MgdG8gcmVyZW5kZXIuXG4gICAgICBuZXh0UHJvcC50b1N0cmluZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBGb3IgYW55IG90aGVyIHByb3BlcnR5IHdlIGFsd2F5cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFuZCB0aGVuIHdlXG4gICAgICAvLyBmaWx0ZXIgaXQgb3V0IHVzaW5nIHRoZSBhbGxvd2VkIHByb3BlcnR5IGxpc3QgZHVyaW5nIHRoZSBjb21taXQuXG4gICAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2gocHJvcEtleSwgbmV4dFByb3ApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdHlsZVVwZGF0ZXMpIHtcbiAgICB7XG4gICAgICB2YWxpZGF0ZVNob3J0aGFuZFByb3BlcnR5Q29sbGlzaW9uSW5EZXYoc3R5bGVVcGRhdGVzLCBuZXh0UHJvcHNbU1RZTEVdKTtcbiAgICB9XG5cbiAgICAodXBkYXRlUGF5bG9hZCA9IHVwZGF0ZVBheWxvYWQgfHwgW10pLnB1c2goU1RZTEUsIHN0eWxlVXBkYXRlcyk7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn0gLy8gQXBwbHkgdGhlIGRpZmYuXG5cbmZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcykge1xuICAvLyBVcGRhdGUgY2hlY2tlZCAqYmVmb3JlKiBuYW1lLlxuICAvLyBJbiB0aGUgbWlkZGxlIG9mIGFuIHVwZGF0ZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSBtdWx0aXBsZSBjaGVja2VkLlxuICAvLyBXaGVuIGEgY2hlY2tlZCByYWRpbyB0cmllcyB0byBjaGFuZ2UgbmFtZSwgYnJvd3NlciBtYWtlcyBhbm90aGVyIHJhZGlvJ3MgY2hlY2tlZCBmYWxzZS5cbiAgaWYgKHRhZyA9PT0gJ2lucHV0JyAmJiBuZXh0UmF3UHJvcHMudHlwZSA9PT0gJ3JhZGlvJyAmJiBuZXh0UmF3UHJvcHMubmFtZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlQ2hlY2tlZChkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHdhc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbGFzdFJhd1Byb3BzKTtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCBuZXh0UmF3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZi5cblxuICB1cGRhdGVET01Qcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHdhc0N1c3RvbUNvbXBvbmVudFRhZywgaXNDdXN0b21Db21wb25lbnRUYWcpOyAvLyBUT0RPOiBFbnN1cmUgdGhhdCBhbiB1cGRhdGUgZ2V0cyBzY2hlZHVsZWQgaWYgYW55IG9mIHRoZSBzcGVjaWFsIHByb3BzXG4gIC8vIGNoYW5nZWQuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICAvLyBVcGRhdGUgdGhlIHdyYXBwZXIgYXJvdW5kIGlucHV0cyAqYWZ0ZXIqIHVwZGF0aW5nIHByb3BzLiBUaGlzIGhhcyB0b1xuICAgICAgLy8gaGFwcGVuIGFmdGVyIGB1cGRhdGVET01Qcm9wZXJ0aWVzYC4gT3RoZXJ3aXNlIEhUTUw1IGlucHV0IHZhbGlkYXRpb25zXG4gICAgICAvLyByYWlzZSB3YXJuaW5ncyBhbmQgcHJldmVudCB0aGUgbmV3IHZhbHVlIGZyb20gYmVpbmcgYXNzaWduZWQuXG4gICAgICB1cGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHVwZGF0ZVdyYXBwZXIkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgLy8gPHNlbGVjdD4gdmFsdWUgdXBkYXRlIG5lZWRzIHRvIG9jY3VyIGFmdGVyIDxvcHRpb24+IGNoaWxkcmVuXG4gICAgICAvLyByZWNvbmNpbGlhdGlvblxuICAgICAgcG9zdFVwZGF0ZVdyYXBwZXIoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BOYW1lKSB7XG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSBwcm9wTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKCFwb3NzaWJsZVN0YW5kYXJkTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gcG9zc2libGVTdGFuZGFyZE5hbWVzW2xvd2VyQ2FzZWROYW1lXSB8fCBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcGFyZW50TmFtZXNwYWNlLCByb290Q29udGFpbmVyRWxlbWVudCkge1xuICB2YXIgaXNDdXN0b21Db21wb25lbnRUYWc7XG4gIHZhciBleHRyYUF0dHJpYnV0ZU5hbWVzO1xuXG4gIHtcbiAgICBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSByYXdQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklOR10gPT09IHRydWU7XG4gICAgaXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIHJhd1Byb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50KHRhZywgcmF3UHJvcHMpO1xuICB9IC8vIFRPRE86IE1ha2Ugc3VyZSB0aGF0IHdlIGNoZWNrIGlzTW91bnRlZCBiZWZvcmUgZmlyaW5nIGFueSBvZiB0aGVzZSBldmVudHMuXG5cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lmcmFtZSc6XG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICBjYXNlICdlbWJlZCc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgbG9hZCBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndmlkZW8nOlxuICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgYWxsIHRoZSBtZWRpYSBldmVudHMuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1lZGlhRXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KG1lZGlhRXZlbnRUeXBlc1tpXSwgZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2ltZyc6XG4gICAgY2FzZSAnaW1hZ2UnOlxuICAgIGNhc2UgJ2xpbmsnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBlcnJvciBhbmQgbG9hZCBldmVudHMuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnbG9hZCcsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSB0b2dnbGUgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCd0b2dnbGUnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDIoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIGFzc2VydFZhbGlkUHJvcHModGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIGV4dHJhQXR0cmlidXRlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBkb21FbGVtZW50LmF0dHJpYnV0ZXM7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXR0cmlidXRlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBuYW1lID0gYXR0cmlidXRlc1tfaV0ubmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgICAgLy8gQnVpbHQtaW4gU1NSIGF0dHJpYnV0ZSBpcyBhbGxvd2VkXG4gICAgICAgIGNhc2UgJ2RhdGEtcmVhY3Ryb290JzpcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAgIC8vIFRPRE86IE9ubHkgaWdub3JlIHRoZW0gb24gY29udHJvbGxlZCB0YWdzLlxuXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjaGVja2VkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWxlY3RlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBJbnRlbnRpb25hbGx5IHVzZSB0aGUgb3JpZ2luYWwgbmFtZS5cbiAgICAgICAgICAvLyBTZWUgZGlzY3Vzc2lvbiBpbiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMDY3Ni5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmFkZChhdHRyaWJ1dGVzW19pXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgdXBkYXRlUGF5bG9hZCA9IG51bGw7XG5cbiAgZm9yICh2YXIgcHJvcEtleSBpbiByYXdQcm9wcykge1xuICAgIGlmICghcmF3UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHZhciBuZXh0UHJvcCA9IHJhd1Byb3BzW3Byb3BLZXldO1xuXG4gICAgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICAvLyBGb3IgdGV4dCBjb250ZW50IGNoaWxkcmVuIHdlIGNvbXBhcmUgYWdhaW5zdCB0ZXh0Q29udGVudC4gVGhpc1xuICAgICAgLy8gbWlnaHQgbWF0Y2ggYWRkaXRpb25hbCBIVE1MIHRoYXQgaXMgaGlkZGVuIHdoZW4gd2UgcmVhZCBpdCB1c2luZ1xuICAgICAgLy8gdGV4dENvbnRlbnQuIEUuZy4gXCJmb29cIiB3aWxsIG1hdGNoIFwiZjxzcGFuPm9vPC9zcGFuPlwiIGJ1dCB0aGF0IHN0aWxsXG4gICAgICAvLyBzYXRpc2ZpZXMgb3VyIHJlcXVpcmVtZW50LiBPdXIgcmVxdWlyZW1lbnQgaXMgbm90IHRvIHByb2R1Y2UgcGVyZmVjdFxuICAgICAgLy8gSFRNTCBhbmQgYXR0cmlidXRlcy4gSWRlYWxseSB3ZSBzaG91bGQgcHJlc2VydmUgc3RydWN0dXJlIGJ1dCBpdCdzXG4gICAgICAvLyBvayBub3QgdG8gaWYgdGhlIHZpc2libGUgY29udGVudCBpcyBzdGlsbCBlbm91Z2ggdG8gaW5kaWNhdGUgd2hhdFxuICAgICAgLy8gZXZlbiBsaXN0ZW5lcnMgdGhlc2Ugbm9kZXMgbWlnaHQgYmUgd2lyZWQgdXAgdG8uXG4gICAgICAvLyBUT0RPOiBXYXJuIGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBhIHNpbmdsZSB0ZXh0Tm9kZSBhcyBhIGNoaWxkLlxuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIHVzZSBkb21FbGVtZW50LmZpcnN0Q2hpbGQubm9kZVZhbHVlIHRvIGNvbXBhcmU/XG4gICAgICBpZiAodHlwZW9mIG5leHRQcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudC50ZXh0Q29udGVudCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09ICcnICsgbmV4dFByb3ApIHtcbiAgICAgICAgICBpZiAoICFzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JUZXh0RGlmZmVyZW5jZShkb21FbGVtZW50LnRleHRDb250ZW50LCBuZXh0UHJvcCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtDSElMRFJFTiwgJycgKyBuZXh0UHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCAvLyBDb252aW5jZSBGbG93IHdlJ3ZlIGNhbGN1bGF0ZWQgaXQgKGl0J3MgREVWLW9ubHkgaW4gdGhpcyBtZXRob2QuKVxuICAgIHR5cGVvZiBpc0N1c3RvbUNvbXBvbmVudFRhZyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAvLyBWYWxpZGF0ZSB0aGF0IHRoZSBwcm9wZXJ0aWVzIGNvcnJlc3BvbmQgdG8gdGhlaXIgZXhwZWN0ZWQgdmFsdWVzLlxuICAgICAgdmFyIHNlcnZlclZhbHVlID0gdm9pZCAwO1xuICAgICAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhwcm9wS2V5KTtcblxuICAgICAgaWYgKHN1cHByZXNzSHlkcmF0aW9uV2FybmluZykgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgfHwgLy8gQ29udHJvbGxlZCBhdHRyaWJ1dGVzIGFyZSBub3QgdmFsaWRhdGVkXG4gICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cbiAgICAgIHByb3BLZXkgPT09ICd2YWx1ZScgfHwgcHJvcEtleSA9PT0gJ2NoZWNrZWQnIHx8IHByb3BLZXkgPT09ICdzZWxlY3RlZCcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gREFOR0VST1VTTFlfU0VUX0lOTkVSX0hUTUwpIHtcbiAgICAgICAgdmFyIHNlcnZlckhUTUwgPSBkb21FbGVtZW50LmlubmVySFRNTDtcbiAgICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkSFRNTCA9IG5vcm1hbGl6ZUhUTUwoZG9tRWxlbWVudCwgbmV4dEh0bWwpO1xuXG4gICAgICAgICAgaWYgKGV4cGVjdGVkSFRNTCAhPT0gc2VydmVySFRNTCkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlckhUTUwsIGV4cGVjdGVkSFRNTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG5cbiAgICAgICAgaWYgKGNhbkRpZmZTdHlsZUZvckh5ZHJhdGlvbldhcm5pbmcpIHtcbiAgICAgICAgICB2YXIgZXhwZWN0ZWRTdHlsZSA9IGNyZWF0ZURhbmdlcm91c1N0cmluZ0ZvclN0eWxlcyhuZXh0UHJvcCk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBkb21FbGVtZW50LmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZFN0eWxlICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBleHBlY3RlZFN0eWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlKSB7XG4gICAgICAgICAgd2FybkZvclByb3BEaWZmZXJlbmNlKHByb3BLZXksIHNlcnZlclZhbHVlLCBuZXh0UHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIXNob3VsZElnbm9yZUF0dHJpYnV0ZShwcm9wS2V5LCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSAmJiAhc2hvdWxkUmVtb3ZlQXR0cmlidXRlKHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSkge1xuICAgICAgICB2YXIgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKHByb3BlcnR5SW5mbyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wLCBwcm9wZXJ0eUluZm8pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBwYXJlbnROYW1lc3BhY2U7XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICBvd25OYW1lc3BhY2UgPSBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodGFnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3duTmFtZXNwYWNlID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5LnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc3RhbmRhcmROYW1lID0gZ2V0UG9zc2libGVTdGFuZGFyZE5hbWUocHJvcEtleSk7XG5cbiAgICAgICAgICAgIGlmIChzdGFuZGFyZE5hbWUgIT09IG51bGwgJiYgc3RhbmRhcmROYW1lICE9PSBwcm9wS2V5KSB7XG4gICAgICAgICAgICAgIC8vIElmIGFuIFNWRyBwcm9wIGlzIHN1cHBsaWVkIHdpdGggYmFkIGNhc2luZywgaXQgd2lsbFxuICAgICAgICAgICAgICAvLyBiZSBzdWNjZXNzZnVsbHkgcGFyc2VkIGZyb20gSFRNTCwgYnV0IHdpbGwgcHJvZHVjZSBhIG1pc21hdGNoXG4gICAgICAgICAgICAgIC8vIChhbmQgd291bGQgYmUgaW5jb3JyZWN0bHkgcmVuZGVyZWQgb24gdGhlIGNsaWVudCkuXG4gICAgICAgICAgICAgIC8vIEhvd2V2ZXIsIHdlIGFscmVhZHkgd2FybiBhYm91dCBiYWQgY2FzaW5nIGVsc2V3aGVyZS5cbiAgICAgICAgICAgICAgLy8gU28gd2UnbGwgc2tpcCB0aGUgbWlzbGVhZGluZyBleHRyYSBtaXNtYXRjaCB3YXJuaW5nIGluIHRoaXMgY2FzZS5cbiAgICAgICAgICAgICAgaXNNaXNtYXRjaER1ZVRvQmFkQ2FzaW5nID0gdHJ1ZTsgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuXG4gICAgICAgICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHN0YW5kYXJkTmFtZSk7XG4gICAgICAgICAgICB9IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuXG4gICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShwcm9wS2V5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzZXJ2ZXJWYWx1ZSA9IGdldFZhbHVlRm9yQXR0cmlidXRlKGRvbUVsZW1lbnQsIHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0UHJvcCAhPT0gc2VydmVyVmFsdWUgJiYgIWlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZykge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICBpZiAoZXh0cmFBdHRyaWJ1dGVOYW1lcy5zaXplID4gMCAmJiAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzKGV4dHJhQXR0cmlidXRlTmFtZXMpO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlcihkb21FbGVtZW50LCByYXdQcm9wcywgdHJ1ZSk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMyhkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgLy8gRm9yIGlucHV0IGFuZCB0ZXh0YXJlYSB3ZSBjdXJyZW50IGFsd2F5cyBzZXQgdGhlIHZhbHVlIHByb3BlcnR5IGF0XG4gICAgICAvLyBwb3N0IG1vdW50IHRvIGZvcmNlIGl0IHRvIGRpdmVyZ2UgZnJvbSBhdHRyaWJ1dGVzLiBIb3dldmVyLCBmb3JcbiAgICAgIC8vIG9wdGlvbiBhbmQgc2VsZWN0IHdlIGRvbid0IHF1aXRlIGRvIHRoZSBzYW1lIHRoaW5nIGFuZCBzZWxlY3RcbiAgICAgIC8vIGlzIG5vdCByZXNpbGllbnQgdG8gdGhlIERPTSBzdGF0ZSBjaGFuZ2luZyBzbyB3ZSBkb24ndCBkbyB0aGF0IGhlcmUuXG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBub3QgZG9pbmcgdGhpcyBmb3IgaW5wdXQgYW5kIHRleHRhcmVhLlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHR5cGVvZiByYXdQcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiB1cGRhdGVQYXlsb2FkO1xufVxuZnVuY3Rpb24gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB2YXIgaXNEaWZmZXJlbnQgPSB0ZXh0Tm9kZS5ub2RlVmFsdWUgIT09IHRleHQ7XG4gIHJldHVybiBpc0RpZmZlcmVudDtcbn1cbmZ1bmN0aW9uIHdhcm5Gb3JVbm1hdGNoZWRUZXh0KHRleHROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UodGV4dE5vZGUubm9kZVZhbHVlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSA8JXM+IGluIDwlcz4uJywgY2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnROb2RlLCBjaGlsZCkge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0RpZCBub3QgZXhwZWN0IHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gdGhlIHRleHQgbm9kZSBcIiVzXCIgaW4gPCVzPi4nLCBjaGlsZC5ub2RlVmFsdWUsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnROb2RlLCB0YWcsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIDwlcz4gaW4gPCVzPi4nLCB0YWcsIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnROb2RlLCB0ZXh0KSB7XG4gIHtcbiAgICBpZiAodGV4dCA9PT0gJycpIHtcbiAgICAgIC8vIFdlIGV4cGVjdCB0byBpbnNlcnQgZW1wdHkgdGV4dCBub2RlcyBzaW5jZSB0aGV5J3JlIG5vdCByZXByZXNlbnRlZCBpblxuICAgICAgLy8gdGhlIEhUTUwuXG4gICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBzcGVjaWFsIGNhc2UgaWYgd2UgY2FuIGp1c3QgYXZvaWQgaW5zZXJ0aW5nIGVtcHR5XG4gICAgICAvLyB0ZXh0IG5vZGVzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFeHBlY3RlZCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgbWF0Y2hpbmcgdGV4dCBub2RlIGZvciBcIiVzXCIgaW4gPCVzPi4nLCB0ZXh0LCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMoZG9tRWxlbWVudCwgdGFnLCBwcm9wcykge1xuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQyKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZG9tRWxlbWVudCwgcHJvcHMpO1xuICAgICAgcmV0dXJuO1xuICB9XG59XG5cbnZhciB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoKSB7fTtcblxudmFyIHVwZGF0ZWRBbmNlc3RvckluZm8gPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyBUaGlzIHZhbGlkYXRpb24gY29kZSB3YXMgd3JpdHRlbiBiYXNlZCBvbiB0aGUgSFRNTDUgcGFyc2luZyBzcGVjOlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNoYXMtYW4tZWxlbWVudC1pbi1zY29wZVxuICAvL1xuICAvLyBOb3RlOiB0aGlzIGRvZXMgbm90IGNhdGNoIGFsbCBpbnZhbGlkIG5lc3RpbmcsIG5vciBkb2VzIGl0IHRyeSB0byAoYXMgaXQnc1xuICAvLyBub3QgY2xlYXIgd2hhdCBwcmFjdGljYWwgYmVuZWZpdCBkb2luZyBzbyBwcm92aWRlcyk7IGluc3RlYWQsIHdlIHdhcm4gb25seVxuICAvLyBmb3IgY2FzZXMgd2hlcmUgdGhlIHBhcnNlciB3aWxsIGdpdmUgYSBwYXJzZSB0cmVlIGRpZmZlcmluZyBmcm9tIHdoYXQgUmVhY3RcbiAgLy8gaW50ZW5kZWQuIEZvciBleGFtcGxlLCA8Yj48ZGl2PjwvZGl2PjwvYj4gaXMgaW52YWxpZCBidXQgd2UgZG9uJ3Qgd2FyblxuICAvLyBiZWNhdXNlIGl0IHN0aWxsIHBhcnNlcyBjb3JyZWN0bHk7IHdlIGRvIHdhcm4gZm9yIG90aGVyIGNhc2VzIGxpa2UgbmVzdGVkXG4gIC8vIDxwPiB0YWdzIHdoZXJlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlY29uZCBlbGVtZW50IGltcGxpY2l0bHkgY2xvc2VzIHRoZVxuICAvLyBmaXJzdCwgY2F1c2luZyBhIGNvbmZ1c2luZyBtZXNzLlxuICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNzcGVjaWFsXG4gIHZhciBzcGVjaWFsVGFncyA9IFsnYWRkcmVzcycsICdhcHBsZXQnLCAnYXJlYScsICdhcnRpY2xlJywgJ2FzaWRlJywgJ2Jhc2UnLCAnYmFzZWZvbnQnLCAnYmdzb3VuZCcsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhcHRpb24nLCAnY2VudGVyJywgJ2NvbCcsICdjb2xncm91cCcsICdkZCcsICdkZXRhaWxzJywgJ2RpcicsICdkaXYnLCAnZGwnLCAnZHQnLCAnZW1iZWQnLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9vdGVyJywgJ2Zvcm0nLCAnZnJhbWUnLCAnZnJhbWVzZXQnLCAnaDEnLCAnaDInLCAnaDMnLCAnaDQnLCAnaDUnLCAnaDYnLCAnaGVhZCcsICdoZWFkZXInLCAnaGdyb3VwJywgJ2hyJywgJ2h0bWwnLCAnaWZyYW1lJywgJ2ltZycsICdpbnB1dCcsICdpc2luZGV4JywgJ2xpJywgJ2xpbmsnLCAnbGlzdGluZycsICdtYWluJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRhJywgJ25hdicsICdub2VtYmVkJywgJ25vZnJhbWVzJywgJ25vc2NyaXB0JywgJ29iamVjdCcsICdvbCcsICdwJywgJ3BhcmFtJywgJ3BsYWludGV4dCcsICdwcmUnLCAnc2NyaXB0JywgJ3NlY3Rpb24nLCAnc2VsZWN0JywgJ3NvdXJjZScsICdzdHlsZScsICdzdW1tYXJ5JywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpdGxlJywgJ3RyJywgJ3RyYWNrJywgJ3VsJywgJ3dicicsICd4bXAnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcblxuICB2YXIgaW5TY29wZVRhZ3MgPSBbJ2FwcGxldCcsICdjYXB0aW9uJywgJ2h0bWwnLCAndGFibGUnLCAndGQnLCAndGgnLCAnbWFycXVlZScsICdvYmplY3QnLCAndGVtcGxhdGUnLCAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNodG1sLWludGVncmF0aW9uLXBvaW50XG4gIC8vIFRPRE86IERpc3Rpbmd1aXNoIGJ5IG5hbWVzcGFjZSBoZXJlIC0tIGZvciA8dGl0bGU+LCBpbmNsdWRpbmcgaXQgaGVyZVxuICAvLyBlcnJzIG9uIHRoZSBzaWRlIG9mIGZld2VyIHdhcm5pbmdzXG4gICdmb3JlaWduT2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnXTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tYnV0dG9uLXNjb3BlXG5cbiAgdmFyIGJ1dHRvblNjb3BlVGFncyA9IGluU2NvcGVUYWdzLmNvbmNhdChbJ2J1dHRvbiddKTsgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZ2VuZXJhdGUtaW1wbGllZC1lbmQtdGFnc1xuXG4gIHZhciBpbXBsaWVkRW5kVGFncyA9IFsnZGQnLCAnZHQnLCAnbGknLCAnb3B0aW9uJywgJ29wdGdyb3VwJywgJ3AnLCAncnAnLCAncnQnXTtcbiAgdmFyIGVtcHR5QW5jZXN0b3JJbmZvID0ge1xuICAgIGN1cnJlbnQ6IG51bGwsXG4gICAgZm9ybVRhZzogbnVsbCxcbiAgICBhVGFnSW5TY29wZTogbnVsbCxcbiAgICBidXR0b25UYWdJblNjb3BlOiBudWxsLFxuICAgIG5vYnJUYWdJblNjb3BlOiBudWxsLFxuICAgIHBUYWdJbkJ1dHRvblNjb3BlOiBudWxsLFxuICAgIGxpc3RJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGwsXG4gICAgZGxJdGVtVGFnQXV0b2Nsb3Npbmc6IG51bGxcbiAgfTtcblxuICB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKG9sZEluZm8sIHRhZykge1xuICAgIHZhciBhbmNlc3RvckluZm8gPSBfYXNzaWduKHt9LCBvbGRJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvKTtcblxuICAgIHZhciBpbmZvID0ge1xuICAgICAgdGFnOiB0YWdcbiAgICB9O1xuXG4gICAgaWYgKGluU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZSA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8ubm9iclRhZ0luU2NvcGUgPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChidXR0b25TY29wZVRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSkge1xuICAgICAgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlID0gbnVsbDtcbiAgICB9IC8vIFNlZSBydWxlcyBmb3IgJ2xpJywgJ2RkJywgJ2R0JyBzdGFydCB0YWdzIGluXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBpZiAoc3BlY2lhbFRhZ3MuaW5kZXhPZih0YWcpICE9PSAtMSAmJiB0YWcgIT09ICdhZGRyZXNzJyAmJiB0YWcgIT09ICdkaXYnICYmIHRhZyAhPT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZyA9IG51bGw7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgIH1cblxuICAgIGFuY2VzdG9ySW5mby5jdXJyZW50ID0gaW5mbztcblxuICAgIGlmICh0YWcgPT09ICdmb3JtJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmZvcm1UYWcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdhJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYnV0dG9uJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdub2JyJykge1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAncCcpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2xpJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdkZCcgfHwgdGFnID09PSAnZHQnKSB7XG4gICAgICBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3NpbmcgPSBpbmZvO1xuICAgIH1cblxuICAgIHJldHVybiBhbmNlc3RvckluZm87XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgaXNUYWdWYWxpZFdpdGhQYXJlbnQgPSBmdW5jdGlvbiAodGFnLCBwYXJlbnRUYWcpIHtcbiAgICAvLyBGaXJzdCwgbGV0J3MgY2hlY2sgaWYgd2UncmUgaW4gYW4gdW51c3VhbCBwYXJzaW5nIG1vZGUuLi5cbiAgICBzd2l0Y2ggKHBhcmVudFRhZykge1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluc2VsZWN0XG4gICAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICdvcHRncm91cCcgfHwgdGFnID09PSAnI3RleHQnO1xuXG4gICAgICBjYXNlICdvcHRncm91cCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdvcHRpb24nIHx8IHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIFN0cmljdGx5IHNwZWFraW5nLCBzZWVpbmcgYW4gPG9wdGlvbj4gZG9lc24ndCBtZWFuIHdlJ3JlIGluIGEgPHNlbGVjdD5cbiAgICAgIC8vIGJ1dFxuXG4gICAgICBjYXNlICdvcHRpb24nOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnI3RleHQnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGRcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNhcHRpb25cbiAgICAgIC8vIE5vIHNwZWNpYWwgYmVoYXZpb3Igc2luY2UgdGhlc2UgcnVsZXMgZmFsbCBiYWNrIHRvIFwiaW4gYm9keVwiIG1vZGUgZm9yXG4gICAgICAvLyBhbGwgZXhjZXB0IHNwZWNpYWwgdGFibGUgbm9kZXMgd2hpY2ggY2F1c2UgYmFkIHBhcnNpbmcgYmVoYXZpb3IgYW55d2F5LlxuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludHJcblxuICAgICAgY2FzZSAndHInOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndGgnIHx8IHRhZyA9PT0gJ3RkJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50Ym9keVxuXG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICd0cicgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluY29sZ3JvdXBcblxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY29sJyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW50YWJsZVxuXG4gICAgICBjYXNlICd0YWJsZSc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdjYXB0aW9uJyB8fCB0YWcgPT09ICdjb2xncm91cCcgfHwgdGFnID09PSAndGJvZHknIHx8IHRhZyA9PT0gJ3Rmb290JyB8fCB0YWcgPT09ICd0aGVhZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluaGVhZFxuXG4gICAgICBjYXNlICdoZWFkJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2Jhc2UnIHx8IHRhZyA9PT0gJ2Jhc2Vmb250JyB8fCB0YWcgPT09ICdiZ3NvdW5kJyB8fCB0YWcgPT09ICdsaW5rJyB8fCB0YWcgPT09ICdtZXRhJyB8fCB0YWcgPT09ICd0aXRsZScgfHwgdGFnID09PSAnbm9zY3JpcHQnIHx8IHRhZyA9PT0gJ25vZnJhbWVzJyB8fCB0YWcgPT09ICdzdHlsZScgfHwgdGFnID09PSAnc2NyaXB0JyB8fCB0YWcgPT09ICd0ZW1wbGF0ZSc7XG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZW1hbnRpY3MuaHRtbCN0aGUtaHRtbC1lbGVtZW50XG5cbiAgICAgIGNhc2UgJ2h0bWwnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaGVhZCcgfHwgdGFnID09PSAnYm9keScgfHwgdGFnID09PSAnZnJhbWVzZXQnO1xuXG4gICAgICBjYXNlICdmcmFtZXNldCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdmcmFtZSc7XG5cbiAgICAgIGNhc2UgJyNkb2N1bWVudCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdodG1sJztcbiAgICB9IC8vIFByb2JhYmx5IGluIHRoZSBcImluIGJvZHlcIiBwYXJzaW5nIG1vZGUsIHNvIHdlIG91dGxhdyBvbmx5IHRhZyBjb21ib3NcbiAgICAvLyB3aGVyZSB0aGUgcGFyc2luZyBydWxlcyBjYXVzZSBpbXBsaWNpdCBvcGVucyBvciBjbG9zZXMgdG8gYmUgYWRkZWQuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWluYm9keVxuXG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSAnaDEnOlxuICAgICAgY2FzZSAnaDInOlxuICAgICAgY2FzZSAnaDMnOlxuICAgICAgY2FzZSAnaDQnOlxuICAgICAgY2FzZSAnaDUnOlxuICAgICAgY2FzZSAnaDYnOlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnICE9PSAnaDEnICYmIHBhcmVudFRhZyAhPT0gJ2gyJyAmJiBwYXJlbnRUYWcgIT09ICdoMycgJiYgcGFyZW50VGFnICE9PSAnaDQnICYmIHBhcmVudFRhZyAhPT0gJ2g1JyAmJiBwYXJlbnRUYWcgIT09ICdoNic7XG5cbiAgICAgIGNhc2UgJ3JwJzpcbiAgICAgIGNhc2UgJ3J0JzpcbiAgICAgICAgcmV0dXJuIGltcGxpZWRFbmRUYWdzLmluZGV4T2YocGFyZW50VGFnKSA9PT0gLTE7XG5cbiAgICAgIGNhc2UgJ2JvZHknOlxuICAgICAgY2FzZSAnY2FwdGlvbic6XG4gICAgICBjYXNlICdjb2wnOlxuICAgICAgY2FzZSAnY29sZ3JvdXAnOlxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgY2FzZSAnZnJhbWUnOlxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgIGNhc2UgJ3Rib2R5JzpcbiAgICAgIGNhc2UgJ3RkJzpcbiAgICAgIGNhc2UgJ3Rmb290JzpcbiAgICAgIGNhc2UgJ3RoJzpcbiAgICAgIGNhc2UgJ3RoZWFkJzpcbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgLy8gVGhlc2UgdGFncyBhcmUgb25seSB2YWxpZCB3aXRoIGEgZmV3IHBhcmVudHMgdGhhdCBoYXZlIHNwZWNpYWwgY2hpbGRcbiAgICAgICAgLy8gcGFyc2luZyBydWxlcyAtLSBpZiB3ZSdyZSBkb3duIGhlcmUsIHRoZW4gbm9uZSBvZiB0aG9zZSBtYXRjaGVkIGFuZFxuICAgICAgICAvLyBzbyB3ZSBhbGxvdyBpdCBvbmx5IGlmIHdlIGRvbid0IGtub3cgd2hhdCB0aGUgcGFyZW50IGlzLCBhcyBhbGwgb3RoZXJcbiAgICAgICAgLy8gY2FzZXMgYXJlIGludmFsaWQuXG4gICAgICAgIHJldHVybiBwYXJlbnRUYWcgPT0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlclxuICAgKi9cblxuXG4gIHZhciBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnID0gZnVuY3Rpb24gKHRhZywgYW5jZXN0b3JJbmZvKSB7XG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnYXJ0aWNsZSc6XG4gICAgICBjYXNlICdhc2lkZSc6XG4gICAgICBjYXNlICdibG9ja3F1b3RlJzpcbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICBjYXNlICdkZXRhaWxzJzpcbiAgICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBjYXNlICdkaXInOlxuICAgICAgY2FzZSAnZGl2JzpcbiAgICAgIGNhc2UgJ2RsJzpcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcbiAgICAgIGNhc2UgJ2ZpZ2NhcHRpb24nOlxuICAgICAgY2FzZSAnZmlndXJlJzpcbiAgICAgIGNhc2UgJ2Zvb3Rlcic6XG4gICAgICBjYXNlICdoZWFkZXInOlxuICAgICAgY2FzZSAnaGdyb3VwJzpcbiAgICAgIGNhc2UgJ21haW4nOlxuICAgICAgY2FzZSAnbWVudSc6XG4gICAgICBjYXNlICduYXYnOlxuICAgICAgY2FzZSAnb2wnOlxuICAgICAgY2FzZSAncCc6XG4gICAgICBjYXNlICdzZWN0aW9uJzpcbiAgICAgIGNhc2UgJ3N1bW1hcnknOlxuICAgICAgY2FzZSAndWwnOlxuICAgICAgY2FzZSAncHJlJzpcbiAgICAgIGNhc2UgJ2xpc3RpbmcnOlxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgY2FzZSAnaHInOlxuICAgICAgY2FzZSAneG1wJzpcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZTtcblxuICAgICAgY2FzZSAnZm9ybSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZm9ybVRhZyB8fCBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2xpJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdkZCc6XG4gICAgICBjYXNlICdkdCc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uZGxJdGVtVGFnQXV0b2Nsb3Npbmc7XG5cbiAgICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYnV0dG9uVGFnSW5TY29wZTtcblxuICAgICAgY2FzZSAnYSc6XG4gICAgICAgIC8vIFNwZWMgc2F5cyBzb21ldGhpbmcgYWJvdXQgc3RvcmluZyBhIGxpc3Qgb2YgbWFya2VycywgYnV0IGl0IHNvdW5kc1xuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoaXMgY2hlY2suXG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ25vYnInOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhciBkaWRXYXJuJDEgPSB7fTtcblxuICB2YWxpZGF0ZURPTU5lc3RpbmcgPSBmdW5jdGlvbiAoY2hpbGRUYWcsIGNoaWxkVGV4dCwgYW5jZXN0b3JJbmZvKSB7XG4gICAgYW5jZXN0b3JJbmZvID0gYW5jZXN0b3JJbmZvIHx8IGVtcHR5QW5jZXN0b3JJbmZvO1xuICAgIHZhciBwYXJlbnRJbmZvID0gYW5jZXN0b3JJbmZvLmN1cnJlbnQ7XG4gICAgdmFyIHBhcmVudFRhZyA9IHBhcmVudEluZm8gJiYgcGFyZW50SW5mby50YWc7XG5cbiAgICBpZiAoY2hpbGRUZXh0ICE9IG51bGwpIHtcbiAgICAgIGlmIChjaGlsZFRhZyAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3Rpbmc6IHdoZW4gY2hpbGRUZXh0IGlzIHBhc3NlZCwgY2hpbGRUYWcgc2hvdWxkIGJlIG51bGwnKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGRUYWcgPSAnI3RleHQnO1xuICAgIH1cblxuICAgIHZhciBpbnZhbGlkUGFyZW50ID0gaXNUYWdWYWxpZFdpdGhQYXJlbnQoY2hpbGRUYWcsIHBhcmVudFRhZykgPyBudWxsIDogcGFyZW50SW5mbztcbiAgICB2YXIgaW52YWxpZEFuY2VzdG9yID0gaW52YWxpZFBhcmVudCA/IG51bGwgOiBmaW5kSW52YWxpZEFuY2VzdG9yRm9yVGFnKGNoaWxkVGFnLCBhbmNlc3RvckluZm8pO1xuICAgIHZhciBpbnZhbGlkUGFyZW50T3JBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgfHwgaW52YWxpZEFuY2VzdG9yO1xuXG4gICAgaWYgKCFpbnZhbGlkUGFyZW50T3JBbmNlc3Rvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBhbmNlc3RvclRhZyA9IGludmFsaWRQYXJlbnRPckFuY2VzdG9yLnRhZztcbiAgICB2YXIgd2FybktleSA9ICEhaW52YWxpZFBhcmVudCArICd8JyArIGNoaWxkVGFnICsgJ3wnICsgYW5jZXN0b3JUYWc7XG5cbiAgICBpZiAoZGlkV2FybiQxW3dhcm5LZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybiQxW3dhcm5LZXldID0gdHJ1ZTtcbiAgICB2YXIgdGFnRGlzcGxheU5hbWUgPSBjaGlsZFRhZztcbiAgICB2YXIgd2hpdGVzcGFjZUluZm8gPSAnJztcblxuICAgIGlmIChjaGlsZFRhZyA9PT0gJyN0ZXh0Jykge1xuICAgICAgaWYgKC9cXFMvLnRlc3QoY2hpbGRUZXh0KSkge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdUZXh0IG5vZGVzJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhZ0Rpc3BsYXlOYW1lID0gJ1doaXRlc3BhY2UgdGV4dCBub2Rlcyc7XG4gICAgICAgIHdoaXRlc3BhY2VJbmZvID0gXCIgTWFrZSBzdXJlIHlvdSBkb24ndCBoYXZlIGFueSBleHRyYSB3aGl0ZXNwYWNlIGJldHdlZW4gdGFncyBvbiBcIiArICdlYWNoIGxpbmUgb2YgeW91ciBzb3VyY2UgY29kZS4nO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0YWdEaXNwbGF5TmFtZSA9ICc8JyArIGNoaWxkVGFnICsgJz4nO1xuICAgIH1cblxuICAgIGlmIChpbnZhbGlkUGFyZW50KSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICBpZiAoYW5jZXN0b3JUYWcgPT09ICd0YWJsZScgJiYgY2hpbGRUYWcgPT09ICd0cicpIHtcbiAgICAgICAgaW5mbyArPSAnIEFkZCBhIDx0Ym9keT4sIDx0aGVhZD4gb3IgPHRmb290PiB0byB5b3VyIGNvZGUgdG8gbWF0Y2ggdGhlIERPTSB0cmVlIGdlbmVyYXRlZCBieSAnICsgJ3RoZSBicm93c2VyLic7XG4gICAgICB9XG5cbiAgICAgIGVycm9yKCd2YWxpZGF0ZURPTU5lc3RpbmcoLi4uKTogJXMgY2Fubm90IGFwcGVhciBhcyBhIGNoaWxkIG9mIDwlcz4uJXMlcycsIHRhZ0Rpc3BsYXlOYW1lLCBhbmNlc3RvclRhZywgd2hpdGVzcGFjZUluZm8sIGluZm8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBkZXNjZW5kYW50IG9mICcgKyAnPCVzPi4nLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcpO1xuICAgIH1cbiAgfTtcbn1cblxudmFyIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDE7XG5cbntcbiAgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMSA9ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnO1xufVxuXG52YXIgU1VTUEVOU0VfU1RBUlRfREFUQSA9ICckJztcbnZhciBTVVNQRU5TRV9FTkRfREFUQSA9ICcvJCc7XG52YXIgU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBID0gJyQ/JztcbnZhciBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBID0gJyQhJztcbnZhciBTVFlMRSQxID0gJ3N0eWxlJztcbnZhciBldmVudHNFbmFibGVkID0gbnVsbDtcbnZhciBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG5cbmZ1bmN0aW9uIHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgcHJvcHMpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnYnV0dG9uJzpcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICByZXR1cm4gISFwcm9wcy5hdXRvRm9jdXM7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRleHQocm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHZhciB0eXBlO1xuICB2YXIgbmFtZXNwYWNlO1xuICB2YXIgbm9kZVR5cGUgPSByb290Q29udGFpbmVySW5zdGFuY2Uubm9kZVR5cGU7XG5cbiAgc3dpdGNoIChub2RlVHlwZSkge1xuICAgIGNhc2UgRE9DVU1FTlRfTk9ERTpcbiAgICBjYXNlIERPQ1VNRU5UX0ZSQUdNRU5UX05PREU6XG4gICAgICB7XG4gICAgICAgIHR5cGUgPSBub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/ICcjZG9jdW1lbnQnIDogJyNmcmFnbWVudCc7XG4gICAgICAgIHZhciByb290ID0gcm9vdENvbnRhaW5lckluc3RhbmNlLmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgbmFtZXNwYWNlID0gcm9vdCA/IHJvb3QubmFtZXNwYWNlVVJJIDogZ2V0Q2hpbGROYW1lc3BhY2UobnVsbCwgJycpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBjb250YWluZXIgPSBub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFID8gcm9vdENvbnRhaW5lckluc3RhbmNlLnBhcmVudE5vZGUgOiByb290Q29udGFpbmVySW5zdGFuY2U7XG4gICAgICAgIHZhciBvd25OYW1lc3BhY2UgPSBjb250YWluZXIubmFtZXNwYWNlVVJJIHx8IG51bGw7XG4gICAgICAgIHR5cGUgPSBjb250YWluZXIudGFnTmFtZTtcbiAgICAgICAgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2Uob3duTmFtZXNwYWNlLCB0eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIHZhbGlkYXRlZFRhZyA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhudWxsLCB2YWxpZGF0ZWRUYWcpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0Q2hpbGRIb3N0Q29udGV4dChwYXJlbnRIb3N0Q29udGV4dCwgdHlwZSwgcm9vdENvbnRhaW5lckluc3RhbmNlKSB7XG4gIHtcbiAgICB2YXIgcGFyZW50SG9zdENvbnRleHREZXYgPSBwYXJlbnRIb3N0Q29udGV4dDtcbiAgICB2YXIgbmFtZXNwYWNlID0gZ2V0Q2hpbGROYW1lc3BhY2UocGFyZW50SG9zdENvbnRleHREZXYubmFtZXNwYWNlLCB0eXBlKTtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhwYXJlbnRIb3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgIGFuY2VzdG9ySW5mbzogYW5jZXN0b3JJbmZvXG4gICAgfTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0UHVibGljSW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gcHJlcGFyZUZvckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIGV2ZW50c0VuYWJsZWQgPSBpc0VuYWJsZWQoKTtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBnZXRTZWxlY3Rpb25JbmZvcm1hdGlvbigpO1xuICB2YXIgYWN0aXZlSW5zdGFuY2UgPSBudWxsO1xuXG4gIHNldEVuYWJsZWQoZmFsc2UpO1xuICByZXR1cm4gYWN0aXZlSW5zdGFuY2U7XG59XG5mdW5jdGlvbiByZXNldEFmdGVyQ29tbWl0KGNvbnRhaW5lckluZm8pIHtcbiAgcmVzdG9yZVNlbGVjdGlvbihzZWxlY3Rpb25JbmZvcm1hdGlvbik7XG4gIHNldEVuYWJsZWQoZXZlbnRzRW5hYmxlZCk7XG4gIGV2ZW50c0VuYWJsZWQgPSBudWxsO1xuICBzZWxlY3Rpb25JbmZvcm1hdGlvbiA9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZSh0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICAvLyBUT0RPOiB0YWtlIG5hbWVzcGFjZSBpbnRvIGFjY291bnQgd2hlbiB2YWxpZGF0aW5nLlxuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyh0eXBlLCBudWxsLCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgcHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG5cbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICB2YXIgZG9tRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgcGFyZW50TmFtZXNwYWNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgZG9tRWxlbWVudCk7XG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgcHJvcHMpO1xuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UuYXBwZW5kQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQpIHtcbiAgc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG4gIHJldHVybiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVVcGRhdGUoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcblxuICAgIGlmICh0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gIT09IHR5cGVvZiBvbGRQcm9wcy5jaGlsZHJlbiAmJiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3UHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInKSkge1xuICAgICAgdmFyIHN0cmluZyA9ICcnICsgbmV3UHJvcHMuY2hpbGRyZW47XG4gICAgICB2YXIgb3duQW5jZXN0b3JJbmZvID0gdXBkYXRlZEFuY2VzdG9ySW5mbyhob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8sIHR5cGUpO1xuICAgICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHN0cmluZywgb3duQW5jZXN0b3JJbmZvKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByb3BzKSB7XG4gIHJldHVybiB0eXBlID09PSAndGV4dGFyZWEnIHx8IHR5cGUgPT09ICdvcHRpb24nIHx8IHR5cGUgPT09ICdub3NjcmlwdCcgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdudW1iZXInIHx8IHR5cGVvZiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PT0gJ29iamVjdCcgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgIT09IG51bGwgJiYgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sICE9IG51bGw7XG59XG5mdW5jdGlvbiBjcmVhdGVUZXh0SW5zdGFuY2UodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG4gICAgdmFsaWRhdGVET01OZXN0aW5nKG51bGwsIHRleHQsIGhvc3RDb250ZXh0RGV2LmFuY2VzdG9ySW5mbyk7XG4gIH1cblxuICB2YXIgdGV4dE5vZGUgPSBjcmVhdGVUZXh0Tm9kZSh0ZXh0LCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0Tm9kZSk7XG4gIHJldHVybiB0ZXh0Tm9kZTtcbn1cbi8vIGlmIGEgY29tcG9uZW50IGp1c3QgaW1wb3J0cyBSZWFjdERPTSAoZS5nLiBmb3IgZmluZERPTU5vZGUpLlxuLy8gU29tZSBlbnZpcm9ubWVudHMgbWlnaHQgbm90IGhhdmUgc2V0VGltZW91dCBvciBjbGVhclRpbWVvdXQuXG5cbnZhciBzY2hlZHVsZVRpbWVvdXQgPSB0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJyA/IHNldFRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgY2FuY2VsVGltZW91dCA9IHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBjbGVhclRpbWVvdXQgOiB1bmRlZmluZWQ7XG52YXIgbm9UaW1lb3V0ID0gLTE7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNvbW1pdE1vdW50KGRvbUVsZW1lbnQsIHR5cGUsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIERlc3BpdGUgdGhlIG5hbWluZyB0aGF0IG1pZ2h0IGltcGx5IG90aGVyd2lzZSwgdGhpcyBtZXRob2Qgb25seVxuICAvLyBmaXJlcyBpZiB0aGVyZSBpcyBhbiBgVXBkYXRlYCBlZmZlY3Qgc2NoZWR1bGVkIGR1cmluZyBtb3VudGluZy5cbiAgLy8gVGhpcyBoYXBwZW5zIGlmIGBmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbmAgcmV0dXJucyBgdHJ1ZWAgKHdoaWNoIGl0XG4gIC8vIGRvZXMgdG8gaW1wbGVtZW50IHRoZSBgYXV0b0ZvY3VzYCBhdHRyaWJ1dGUgb24gdGhlIGNsaWVudCkuIEJ1dFxuICAvLyB0aGVyZSBhcmUgYWxzbyBvdGhlciBjYXNlcyB3aGVuIHRoaXMgbWlnaHQgaGFwcGVuIChzdWNoIGFzIHBhdGNoaW5nXG4gIC8vIHVwIHRleHQgY29udGVudCBkdXJpbmcgaHlkcmF0aW9uIG1pc21hdGNoKS4gU28gd2UnbGwgY2hlY2sgdGhpcyBhZ2Fpbi5cbiAgaWYgKHNob3VsZEF1dG9Gb2N1c0hvc3RDb21wb25lbnQodHlwZSwgbmV3UHJvcHMpKSB7XG4gICAgZG9tRWxlbWVudC5mb2N1cygpO1xuICB9XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGUoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIC8vIFVwZGF0ZSB0aGUgcHJvcHMgaGFuZGxlIHNvIHRoYXQgd2Uga25vdyB3aGljaCBwcm9wcyBhcmUgdGhlIG9uZXMgd2l0aFxuICAvLyB3aXRoIGN1cnJlbnQgZXZlbnQgaGFuZGxlcnMuXG4gIHVwZGF0ZUZpYmVyUHJvcHMoZG9tRWxlbWVudCwgbmV3UHJvcHMpOyAvLyBBcHBseSB0aGUgZGlmZiB0byB0aGUgRE9NIG5vZGUuXG5cbiAgdXBkYXRlUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB0eXBlLCBvbGRQcm9wcywgbmV3UHJvcHMpO1xufVxuZnVuY3Rpb24gcmVzZXRUZXh0Q29udGVudChkb21FbGVtZW50KSB7XG4gIHNldFRleHRDb250ZW50KGRvbUVsZW1lbnQsICcnKTtcbn1cbmZ1bmN0aW9uIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSBuZXdUZXh0O1xufVxuZnVuY3Rpb24gYXBwZW5kQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkVG9Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICB2YXIgcGFyZW50Tm9kZTtcblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBwYXJlbnROb2RlID0gY29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGNvbnRhaW5lcik7XG4gIH0gZWxzZSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lcjtcbiAgICBwYXJlbnROb2RlLmFwcGVuZENoaWxkKGNoaWxkKTtcbiAgfSAvLyBUaGlzIGNvbnRhaW5lciBtaWdodCBiZSB1c2VkIGZvciBhIHBvcnRhbC5cbiAgLy8gSWYgc29tZXRoaW5nIGluc2lkZSBhIHBvcnRhbCBpcyBjbGlja2VkLCB0aGF0IGNsaWNrIHNob3VsZCBidWJibGVcbiAgLy8gdGhyb3VnaCB0aGUgUmVhY3QgdHJlZS4gSG93ZXZlciwgb24gTW9iaWxlIFNhZmFyaSB0aGUgY2xpY2sgd291bGRcbiAgLy8gbmV2ZXIgYnViYmxlIHRocm91Z2ggdGhlICpET00qIHRyZWUgdW5sZXNzIGFuIGFuY2VzdG9yIHdpdGggb25jbGlja1xuICAvLyBldmVudCBleGlzdHMuIFNvIHdlIHdvdWxkbid0IHNlZSBpdCBhbmQgZGlzcGF0Y2ggaXQuXG4gIC8vIFRoaXMgaXMgd2h5IHdlIGVuc3VyZSB0aGF0IG5vbiBSZWFjdCByb290IGNvbnRhaW5lcnMgaGF2ZSBpbmxpbmUgb25jbGlja1xuICAvLyBkZWZpbmVkLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExOTE4XG5cblxuICB2YXIgcmVhY3RSb290Q29udGFpbmVyID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgaWYgKChyZWFjdFJvb3RDb250YWluZXIgPT09IG51bGwgfHwgcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQpICYmIHBhcmVudE5vZGUub25jbGljayA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE86IFRoaXMgY2FzdCBtYXkgbm90IGJlIHNvdW5kIGZvciBTVkcsIE1hdGhNTCBvciBjdXN0b20gZWxlbWVudHMuXG4gICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQocGFyZW50Tm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGluc2VydEJlZm9yZShwYXJlbnRJbnN0YW5jZSwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xufVxuZnVuY3Rpb24gaW5zZXJ0SW5Db250YWluZXJCZWZvcmUoY29udGFpbmVyLCBjaGlsZCwgYmVmb3JlQ2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBiZWZvcmVDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUNoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5yZW1vdmVDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY29udGFpbmVyLCBjaGlsZCkge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgfVxufVxuZnVuY3Rpb24gaGlkZUluc3RhbmNlKGluc3RhbmNlKSB7XG4gIC8vIFRPRE86IERvZXMgdGhpcyB3b3JrIGZvciBhbGwgZWxlbWVudCB0eXBlcz8gV2hhdCBhYm91dCBNYXRoTUw/IFNob3VsZCB3ZVxuICAvLyBwYXNzIGhvc3QgY29udGV4dCB0byB0aGlzIG1ldGhvZD9cbiAgaW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgdmFyIHN0eWxlID0gaW5zdGFuY2Uuc3R5bGU7XG5cbiAgaWYgKHR5cGVvZiBzdHlsZS5zZXRQcm9wZXJ0eSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHN0eWxlLnNldFByb3BlcnR5KCdkaXNwbGF5JywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgfVxufVxuZnVuY3Rpb24gaGlkZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UpIHtcbiAgdGV4dEluc3RhbmNlLm5vZGVWYWx1ZSA9ICcnO1xufVxuZnVuY3Rpb24gdW5oaWRlSW5zdGFuY2UoaW5zdGFuY2UsIHByb3BzKSB7XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZVByb3AgPSBwcm9wc1tTVFlMRSQxXTtcbiAgdmFyIGRpc3BsYXkgPSBzdHlsZVByb3AgIT09IHVuZGVmaW5lZCAmJiBzdHlsZVByb3AgIT09IG51bGwgJiYgc3R5bGVQcm9wLmhhc093blByb3BlcnR5KCdkaXNwbGF5JykgPyBzdHlsZVByb3AuZGlzcGxheSA6IG51bGw7XG4gIGluc3RhbmNlLnN0eWxlLmRpc3BsYXkgPSBkYW5nZXJvdXNTdHlsZVZhbHVlKCdkaXNwbGF5JywgZGlzcGxheSk7XG59XG5mdW5jdGlvbiB1bmhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSB0ZXh0O1xufVxuZnVuY3Rpb24gY2xlYXJDb250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci50ZXh0Q29udGVudCA9ICcnO1xuICB9IGVsc2UgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHZhciBib2R5ID0gY29udGFpbmVyLmJvZHk7XG5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBib2R5LnRleHRDb250ZW50ID0gJyc7XG4gICAgfVxuICB9XG59IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGNhbkh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKGluc3RhbmNlLm5vZGVUeXBlICE9PSBFTEVNRU5UX05PREUgfHwgdHlwZS50b0xvd2VyQ2FzZSgpICE9PSBpbnN0YW5jZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gVGhpcyBoYXMgbm93IGJlZW4gcmVmaW5lZCB0byBhbiBlbGVtZW50IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKGluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICh0ZXh0ID09PSAnJyB8fCBpbnN0YW5jZS5ub2RlVHlwZSAhPT0gVEVYVF9OT0RFKSB7XG4gICAgLy8gRW1wdHkgc3RyaW5ncyBhcmUgbm90IHBhcnNlZCBieSBIVE1MIHNvIHRoZXJlIHdvbid0IGJlIGEgY29ycmVjdCBtYXRjaCBoZXJlLlxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYSB0ZXh0IG5vZGUuXG5cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZS5kYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEE7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGUobm9kZSkge1xuICAvLyBTa2lwIG5vbi1oeWRyYXRhYmxlIG5vZGVzLlxuICBmb3IgKDsgbm9kZSAhPSBudWxsOyBub2RlID0gbm9kZS5uZXh0U2libGluZykge1xuICAgIHZhciBub2RlVHlwZSA9IG5vZGUubm9kZVR5cGU7XG5cbiAgICBpZiAobm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGluc3RhbmNlKSB7XG4gIHJldHVybiBnZXROZXh0SHlkcmF0YWJsZShpbnN0YW5jZS5uZXh0U2libGluZyk7XG59XG5mdW5jdGlvbiBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUocGFyZW50SW5zdGFuY2UuZmlyc3RDaGlsZCk7XG59XG5mdW5jdGlvbiBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGluc3RhbmNlKTsgLy8gVE9ETzogUG9zc2libHkgZGVmZXIgdGhpcyB1bnRpbCB0aGUgY29tbWl0IHBoYXNlIHdoZXJlIGFsbCB0aGUgZXZlbnRzXG4gIC8vIGdldCBhdHRhY2hlZC5cblxuICB1cGRhdGVGaWJlclByb3BzKGluc3RhbmNlLCBwcm9wcyk7XG4gIHZhciBwYXJlbnROYW1lc3BhY2U7XG5cbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHBhcmVudE5hbWVzcGFjZSA9IGhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZTtcbiAgfVxuXG4gIHJldHVybiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcGFyZW50TmFtZXNwYWNlKTtcbn1cbmZ1bmN0aW9uIGh5ZHJhdGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlLCB0ZXh0LCBpbnRlcm5hbEluc3RhbmNlSGFuZGxlKSB7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIHRleHRJbnN0YW5jZSk7XG4gIHJldHVybiBkaWZmSHlkcmF0ZWRUZXh0KHRleHRJbnN0YW5jZSwgdGV4dCk7XG59XG5mdW5jdGlvbiBnZXROZXh0SHlkcmF0YWJsZUluc3RhbmNlQWZ0ZXJTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSBzdXNwZW5zZUluc3RhbmNlLm5leHRTaWJsaW5nOyAvLyBTa2lwIHBhc3QgYWxsIG5vZGVzIHdpdGhpbiB0aGlzIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAvLyBUaGVyZSBtaWdodCBiZSBuZXN0ZWQgbm9kZXMgc28gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGhvd1xuICAvLyBkZWVwIHdlIGFyZSBhbmQgb25seSBicmVhayBvdXQgd2hlbiB3ZSdyZSBiYWNrIG9uIHRvcC5cblxuICB2YXIgZGVwdGggPSAwO1xuXG4gIHdoaWxlIChub2RlKSB7XG4gICAgaWYgKG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGRhdGEgPSBub2RlLmRhdGE7XG5cbiAgICAgIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKG5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcHRoLS07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLm5leHRTaWJsaW5nO1xuICB9IC8vIFRPRE86IFdhcm4sIHdlIGRpZG4ndCBmaW5kIHRoZSBlbmQgY29tbWVudCBib3VuZGFyeS5cblxuXG4gIHJldHVybiBudWxsO1xufSAvLyBSZXR1cm5zIHRoZSBTdXNwZW5zZUluc3RhbmNlIGlmIHRoaXMgbm9kZSBpcyBhIGRpcmVjdCBjaGlsZCBvZiBhXG4vLyBTdXNwZW5zZUluc3RhbmNlLiBJLmUuIGlmIGl0cyBwcmV2aW91cyBzaWJsaW5nIGlzIGEgQ29tbWVudCB3aXRoXG4vLyBTVVNQRU5TRV94X1NUQVJUX0RBVEEuIE90aGVyd2lzZSwgbnVsbC5cblxuZnVuY3Rpb24gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZSh0YXJnZXRJbnN0YW5jZSkge1xuICB2YXIgbm9kZSA9IHRhcmdldEluc3RhbmNlLnByZXZpb3VzU2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9GQUxMQkFDS19TVEFSVF9EQVRBIHx8IGRhdGEgPT09IFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSkge1xuICAgICAgICBpZiAoZGVwdGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX0VORF9EQVRBKSB7XG4gICAgICAgIGRlcHRoKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucHJldmlvdXNTaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZENvbnRhaW5lcihjb250YWluZXIpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKGNvbnRhaW5lcik7XG59XG5mdW5jdGlvbiBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSkge1xuICAvLyBSZXRyeSBpZiBhbnkgZXZlbnQgcmVwbGF5aW5nIHdhcyBibG9ja2VkIG9uIHRoaXMuXG4gIHJldHJ5SWZCbG9ja2VkT24oc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSkge1xuICB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfSBlbHNlIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSA7IGVsc2Uge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlVGV4dChwYXJlbnRDb250YWluZXIsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgd2FybkZvckRlbGV0ZWRIeWRyYXRhYmxlRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVySW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0eXBlLCBwcm9wcykge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0eXBlLCBwcm9wcykge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRFbGVtZW50KHBhcmVudEluc3RhbmNlLCB0eXBlKTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCB0ZXh0KSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIHtcbiAgICB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50SW5zdGFuY2UsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlKSB7XG4gIGlmICggcGFyZW50UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkckMV0gIT09IHRydWUpIDtcbn1cbnZhciBjbGllbnRJZCA9IDA7XG5mdW5jdGlvbiBtYWtlQ2xpZW50SWRJbkRFVih3YXJuT25BY2Nlc3NJbkRFVikge1xuICB2YXIgaWQgPSAncjonICsgKGNsaWVudElkKyspLnRvU3RyaW5nKDM2KTtcbiAgcmV0dXJuIHtcbiAgICB0b1N0cmluZzogZnVuY3Rpb24gKCkge1xuICAgICAgd2Fybk9uQWNjZXNzSW5ERVYoKTtcbiAgICAgIHJldHVybiBpZDtcbiAgICB9LFxuICAgIHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9O1xufVxuZnVuY3Rpb24gaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUuJCR0eXBlb2YgPT09IFJFQUNUX09QQVFVRV9JRF9UWVBFO1xufVxuZnVuY3Rpb24gbWFrZU9wYXF1ZUh5ZHJhdGluZ09iamVjdChhdHRlbXB0VG9SZWFkVmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfT1BBUVVFX0lEX1RZUEUsXG4gICAgdG9TdHJpbmc6IGF0dGVtcHRUb1JlYWRWYWx1ZSxcbiAgICB2YWx1ZU9mOiBhdHRlbXB0VG9SZWFkVmFsdWVcbiAgfTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVQb3J0YWxNb3VudChwb3J0YWxJbnN0YW5jZSkge1xuICB7XG4gICAgbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocG9ydGFsSW5zdGFuY2UpO1xuICB9XG59XG5cbnZhciByYW5kb21LZXkgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTtcbnZhciBpbnRlcm5hbEluc3RhbmNlS2V5ID0gJ19fcmVhY3RGaWJlciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsUHJvcHNLZXkgPSAnX19yZWFjdFByb3BzJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleSA9ICdfX3JlYWN0Q29udGFpbmVyJCcgKyByYW5kb21LZXk7XG52YXIgaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5ID0gJ19fcmVhY3RFdmVudHMkJyArIHJhbmRvbUtleTtcbmZ1bmN0aW9uIHByZWNhY2hlRmliZXJOb2RlKGhvc3RJbnN0LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gPSBob3N0SW5zdDtcbn1cbmZ1bmN0aW9uIG1hcmtDb250YWluZXJBc1Jvb3QoaG9zdFJvb3QsIG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IGhvc3RSb290O1xufVxuZnVuY3Rpb24gdW5tYXJrQ29udGFpbmVyQXNSb290KG5vZGUpIHtcbiAgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XSA9IG51bGw7XG59XG5mdW5jdGlvbiBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChub2RlKSB7XG4gIHJldHVybiAhIW5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG59IC8vIEdpdmVuIGEgRE9NIG5vZGUsIHJldHVybiB0aGUgY2xvc2VzdCBIb3N0Q29tcG9uZW50IG9yIEhvc3RUZXh0IGZpYmVyIGFuY2VzdG9yLlxuLy8gSWYgdGhlIHRhcmdldCBub2RlIGlzIHBhcnQgb2YgYSBoeWRyYXRlZCBvciBub3QgeWV0IHJlbmRlcmVkIHN1YnRyZWUsIHRoZW5cbi8vIHRoaXMgbWF5IGFsc28gcmV0dXJuIGEgU3VzcGVuc2VDb21wb25lbnQgb3IgSG9zdFJvb3QgdG8gaW5kaWNhdGUgdGhhdC5cbi8vIENvbmNlcHR1YWxseSB0aGUgSG9zdFJvb3QgZmliZXIgaXMgYSBjaGlsZCBvZiB0aGUgQ29udGFpbmVyIG5vZGUuIFNvIGlmIHlvdVxuLy8gcGFzcyB0aGUgQ29udGFpbmVyIG5vZGUgYXMgdGhlIHRhcmdldE5vZGUsIHlvdSB3aWxsIG5vdCBhY3R1YWxseSBnZXQgdGhlXG4vLyBIb3N0Um9vdCBiYWNrLiBUbyBnZXQgdG8gdGhlIEhvc3RSb290LCB5b3UgbmVlZCB0byBwYXNzIGEgY2hpbGQgb2YgaXQuXG4vLyBUaGUgc2FtZSB0aGluZyBhcHBsaWVzIHRvIFN1c3BlbnNlIGJvdW5kYXJpZXMuXG5cbmZ1bmN0aW9uIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKHRhcmdldE5vZGUpIHtcbiAgdmFyIHRhcmdldEluc3QgPSB0YXJnZXROb2RlW2ludGVybmFsSW5zdGFuY2VLZXldO1xuXG4gIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgLy8gRG9uJ3QgcmV0dXJuIEhvc3RSb290IG9yIFN1c3BlbnNlQ29tcG9uZW50IGhlcmUuXG4gICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gIH0gLy8gSWYgdGhlIGRpcmVjdCBldmVudCB0YXJnZXQgaXNuJ3QgYSBSZWFjdCBvd25lZCBET00gbm9kZSwgd2UgbmVlZCB0byBsb29rXG4gIC8vIHRvIHNlZSBpZiBvbmUgb2YgaXRzIHBhcmVudHMgaXMgYSBSZWFjdCBvd25lZCBET00gbm9kZS5cblxuXG4gIHZhciBwYXJlbnROb2RlID0gdGFyZ2V0Tm9kZS5wYXJlbnROb2RlO1xuXG4gIHdoaWxlIChwYXJlbnROb2RlKSB7XG4gICAgLy8gV2UnbGwgY2hlY2sgaWYgdGhpcyBpcyBhIGNvbnRhaW5lciByb290IHRoYXQgY291bGQgaW5jbHVkZVxuICAgIC8vIFJlYWN0IG5vZGVzIGluIHRoZSBmdXR1cmUuIFdlIG5lZWQgdG8gY2hlY2sgdGhpcyBmaXJzdCBiZWNhdXNlXG4gICAgLy8gaWYgd2UncmUgYSBjaGlsZCBvZiBhIGRlaHlkcmF0ZWQgY29udGFpbmVyLCB3ZSBuZWVkIHRvIGZpcnN0XG4gICAgLy8gZmluZCB0aGF0IGlubmVyIGNvbnRhaW5lciBiZWZvcmUgbW92aW5nIG9uIHRvIGZpbmRpbmcgdGhlIHBhcmVudFxuICAgIC8vIGluc3RhbmNlLiBOb3RlIHRoYXQgd2UgZG9uJ3QgY2hlY2sgdGhpcyBmaWVsZCBvbiAgdGhlIHRhcmdldE5vZGVcbiAgICAvLyBpdHNlbGYgYmVjYXVzZSB0aGUgZmliZXJzIGFyZSBjb25jZXB0dWFsbHkgYmV0d2VlbiB0aGUgY29udGFpbmVyXG4gICAgLy8gbm9kZSBhbmQgdGhlIGZpcnN0IGNoaWxkLiBJdCBpc24ndCBzdXJyb3VuZGluZyB0aGUgY29udGFpbmVyIG5vZGUuXG4gICAgLy8gSWYgaXQncyBub3QgYSBjb250YWluZXIsIHdlIGNoZWNrIGlmIGl0J3MgYW4gaW5zdGFuY2UuXG4gICAgdGFyZ2V0SW5zdCA9IHBhcmVudE5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gfHwgcGFyZW50Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgIGlmICh0YXJnZXRJbnN0KSB7XG4gICAgICAvLyBTaW5jZSB0aGlzIHdhc24ndCB0aGUgZGlyZWN0IHRhcmdldCBvZiB0aGUgZXZlbnQsIHdlIG1pZ2h0IGhhdmVcbiAgICAgIC8vIHN0ZXBwZWQgcGFzdCBkZWh5ZHJhdGVkIERPTSBub2RlcyB0byBnZXQgaGVyZS4gSG93ZXZlciB0aGV5IGNvdWxkXG4gICAgICAvLyBhbHNvIGhhdmUgYmVlbiBub24tUmVhY3Qgbm9kZXMuIFdlIG5lZWQgdG8gYW5zd2VyIHdoaWNoIG9uZS5cbiAgICAgIC8vIElmIHdlIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVuIHRoZXJlIGNhbid0IGJlXG4gICAgICAvLyBhIG5lc3RlZCBzdXNwZW5zZSBib3VuZGFyeSB3aXRoaW4gaXQuIFNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIGZhc3RcbiAgICAgIC8vIGJhaWxvdXQuIE1vc3Qgb2YgdGhlIHRpbWUsIHdoZW4gcGVvcGxlIGFkZCBub24tUmVhY3QgY2hpbGRyZW4gdG9cbiAgICAgIC8vIHRoZSB0cmVlLCBpdCBpcyB1c2luZyBhIHJlZiB0byBhIGNoaWxkLWxlc3MgRE9NIG5vZGUuXG4gICAgICAvLyBOb3JtYWxseSB3ZSdkIG9ubHkgbmVlZCB0byBjaGVjayBvbmUgb2YgdGhlIGZpYmVycyBiZWNhdXNlIGlmIGl0XG4gICAgICAvLyBoYXMgZXZlciBnb25lIGZyb20gaGF2aW5nIGNoaWxkcmVuIHRvIGRlbGV0aW5nIHRoZW0gb3IgdmljZSB2ZXJzYVxuICAgICAgLy8gaXQgd291bGQgaGF2ZSBkZWxldGVkIHRoZSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IG5lc3RlZCBpbnNpZGUgYWxyZWFkeS5cbiAgICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHRoZSBIb3N0Um9vdCBzdGFydHMgb3V0IHdpdGggYW4gYWx0ZXJuYXRlIGl0IG1pZ2h0XG4gICAgICAvLyBoYXZlIG9uZSBvbiB0aGUgYWx0ZXJuYXRlIHNvIHdlIG5lZWQgdG8gY2hlY2sgaW4gY2FzZSB0aGlzIHdhcyBhXG4gICAgICAvLyByb290LlxuICAgICAgdmFyIGFsdGVybmF0ZSA9IHRhcmdldEluc3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAodGFyZ2V0SW5zdC5jaGlsZCAhPT0gbnVsbCB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgYWx0ZXJuYXRlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE5leHQgd2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoZSBub2RlIHRoYXQgc2tpcHBlZCBwYXN0IGlzXG4gICAgICAgIC8vIG5lc3RlZCB3aXRoaW4gYSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFuZCBpZiBzbywgd2hpY2ggb25lLlxuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0Tm9kZSk7XG5cbiAgICAgICAgd2hpbGUgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBmb3VuZCBhIHN1c3BlbnNlIGluc3RhbmNlLiBUaGF0IG1lYW5zIHRoYXQgd2UgaGF2ZW4ndFxuICAgICAgICAgIC8vIGh5ZHJhdGVkIGl0IHlldC4gRXZlbiB0aG91Z2ggd2UgbGVhdmUgdGhlIGNvbW1lbnRzIGluIHRoZVxuICAgICAgICAgIC8vIERPTSBhZnRlciBoeWRyYXRpbmcsIGFuZCB0aGVyZSBhcmUgYm91bmRhcmllcyBpbiB0aGUgRE9NXG4gICAgICAgICAgLy8gdGhhdCBjb3VsZCBhbHJlYWR5IGJlIGh5ZHJhdGVkLCB3ZSB3b3VsZG4ndCBoYXZlIGZvdW5kIHRoZW1cbiAgICAgICAgICAvLyB0aHJvdWdoIHRoaXMgcGFzcyBzaW5jZSBpZiB0aGUgdGFyZ2V0IGlzIGh5ZHJhdGVkIGl0IHdvdWxkXG4gICAgICAgICAgLy8gaGF2ZSBoYWQgYW4gaW50ZXJuYWxJbnN0YW5jZUtleSBvbiBpdC5cbiAgICAgICAgICAvLyBMZXQncyBnZXQgdGhlIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCB0aGUgU3VzcGVuc2VDb21wb25lbnRcbiAgICAgICAgICAvLyBhcyB0aGUgZGVlcGVzdCBpbnN0YW5jZS5cbiAgICAgICAgICB2YXIgdGFyZ2V0U3VzcGVuc2VJbnN0ID0gc3VzcGVuc2VJbnN0YW5jZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICAgICAgICAgIGlmICh0YXJnZXRTdXNwZW5zZUluc3QpIHtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXRTdXNwZW5zZUluc3Q7XG4gICAgICAgICAgfSAvLyBJZiB3ZSBkb24ndCBmaW5kIGEgRmliZXIgb24gdGhlIGNvbW1lbnQsIGl0IG1pZ2h0IGJlIGJlY2F1c2VcbiAgICAgICAgICAvLyB3ZSBoYXZlbid0IGdvdHRlbiB0byBoeWRyYXRlIGl0IHlldC4gVGhlcmUgbWlnaHQgc3RpbGwgYmUgYVxuICAgICAgICAgIC8vIHBhcmVudCBib3VuZGFyeSB0aGF0IGhhc24ndCBhYm92ZSB0aGlzIG9uZSBzbyB3ZSBuZWVkIHRvIGZpbmRcbiAgICAgICAgICAvLyB0aGUgb3V0ZXIgbW9zdCB0aGF0IGlzIGtub3duLlxuXG5cbiAgICAgICAgICBzdXNwZW5zZUluc3RhbmNlID0gZ2V0UGFyZW50U3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTsgLy8gSWYgd2UgZG9uJ3QgZmluZCBvbmUsIHRoZW4gdGhhdCBzaG91bGQgbWVhbiB0aGF0IHRoZSBwYXJlbnRcbiAgICAgICAgICAvLyBob3N0IGNvbXBvbmVudCBhbHNvIGhhc24ndCBoeWRyYXRlZCB5ZXQuIFdlIGNhbiByZXR1cm4gaXRcbiAgICAgICAgICAvLyBiZWxvdyBzaW5jZSBpdCB3aWxsIGJhaWwgb3V0IG9uIHRoZSBpc01vdW50ZWQgY2hlY2sgbGF0ZXIuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhcmdldEluc3Q7XG4gICAgfVxuXG4gICAgdGFyZ2V0Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudFxuICogaW5zdGFuY2UsIG9yIG51bGwgaWYgdGhlIG5vZGUgd2FzIG5vdCByZW5kZXJlZCBieSB0aGlzIFJlYWN0LlxuICovXG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlRnJvbU5vZGUobm9kZSkge1xuICB2YXIgaW5zdCA9IG5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV0gfHwgbm9kZVtpbnRlcm5hbENvbnRhaW5lckluc3RhbmNlS2V5XTtcblxuICBpZiAoaW5zdCkge1xuICAgIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQgfHwgaW5zdC50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0Um9vdCkge1xuICAgICAgcmV0dXJuIGluc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHaXZlbiBhIFJlYWN0RE9NQ29tcG9uZW50IG9yIFJlYWN0RE9NVGV4dENvbXBvbmVudCwgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nXG4gKiBET00gbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXROb2RlRnJvbUluc3RhbmNlKGluc3QpIHtcbiAgaWYgKGluc3QudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGluc3QudGFnID09PSBIb3N0VGV4dCkge1xuICAgIC8vIEluIEZpYmVyIHRoaXMsIGlzIGp1c3QgdGhlIHN0YXRlIG5vZGUgcmlnaHQgbm93LiBXZSBhc3N1bWUgaXQgd2lsbCBiZVxuICAgIC8vIGEgaG9zdCBjb21wb25lbnQgb3IgaG9zdCB0ZXh0LlxuICAgIHJldHVybiBpbnN0LnN0YXRlTm9kZTtcbiAgfSAvLyBXaXRob3V0IHRoaXMgZmlyc3QgaW52YXJpYW50LCBwYXNzaW5nIGEgbm9uLURPTS1jb21wb25lbnQgdHJpZ2dlcnMgdGhlIG5leHRcbiAgLy8gaW52YXJpYW50IGZvciBhIG1pc3NpbmcgcGFyZW50LCB3aGljaCBpcyBzdXBlciBjb25mdXNpbmcuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiZ2V0Tm9kZUZyb21JbnN0YW5jZTogSW52YWxpZCBhcmd1bWVudC5cIiApO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShub2RlKSB7XG4gIHJldHVybiBub2RlW2ludGVybmFsUHJvcHNLZXldIHx8IG51bGw7XG59XG5mdW5jdGlvbiB1cGRhdGVGaWJlclByb3BzKG5vZGUsIHByb3BzKSB7XG4gIG5vZGVbaW50ZXJuYWxQcm9wc0tleV0gPSBwcm9wcztcbn1cbmZ1bmN0aW9uIGdldEV2ZW50TGlzdGVuZXJTZXQobm9kZSkge1xuICB2YXIgZWxlbWVudExpc3RlbmVyU2V0ID0gbm9kZVtpbnRlcm5hbEV2ZW50SGFuZGxlcnNLZXldO1xuXG4gIGlmIChlbGVtZW50TGlzdGVuZXJTZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XSA9IG5ldyBTZXQoKTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50TGlzdGVuZXJTZXQ7XG59XG5cbnZhciBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lO1xuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShzdGFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrUHJvcFR5cGVzKHR5cGVTcGVjcywgdmFsdWVzLCBsb2NhdGlvbiwgY29tcG9uZW50TmFtZSwgZWxlbWVudCkge1xuICB7XG4gICAgLy8gJEZsb3dGaXhNZSBUaGlzIGlzIG9rYXkgYnV0IEZsb3cgZG9lc24ndCBrbm93IGl0LlxuICAgIHZhciBoYXMgPSBGdW5jdGlvbi5jYWxsLmJpbmQoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSk7XG5cbiAgICBmb3IgKHZhciB0eXBlU3BlY05hbWUgaW4gdHlwZVNwZWNzKSB7XG4gICAgICBpZiAoaGFzKHR5cGVTcGVjcywgdHlwZVNwZWNOYW1lKSkge1xuICAgICAgICB2YXIgZXJyb3IkMSA9IHZvaWQgMDsgLy8gUHJvcCB0eXBlIHZhbGlkYXRpb24gbWF5IHRocm93LiBJbiBjYXNlIHRoZXkgZG8sIHdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gZmFpbCB0aGUgcmVuZGVyIHBoYXNlIHdoZXJlIGl0IGRpZG4ndCBmYWlsIGJlZm9yZS4gU28gd2UgbG9nIGl0LlxuICAgICAgICAvLyBBZnRlciB0aGVzZSBoYXZlIGJlZW4gY2xlYW5lZCB1cCwgd2UnbGwgbGV0IHRoZW0gdGhyb3cuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKChjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycpICsgJzogJyArIGxvY2F0aW9uICsgJyB0eXBlIGAnICsgdHlwZVNwZWNOYW1lICsgJ2AgaXMgaW52YWxpZDsgJyArICdpdCBtdXN0IGJlIGEgZnVuY3Rpb24sIHVzdWFsbHkgZnJvbSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UsIGJ1dCByZWNlaXZlZCBgJyArIHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSArICdgLicgKyAnVGhpcyBvZnRlbiBoYXBwZW5zIGJlY2F1c2Ugb2YgdHlwb3Mgc3VjaCBhcyBgUHJvcFR5cGVzLmZ1bmN0aW9uYCBpbnN0ZWFkIG9mIGBQcm9wVHlwZXMuZnVuY2AuJyk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvciQxID0gdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0odmFsdWVzLCB0eXBlU3BlY05hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBudWxsLCAnU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQnKTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciQxID0gZXg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSAmJiAhKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvcikpIHtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCclczogdHlwZSBzcGVjaWZpY2F0aW9uIG9mICVzJyArICcgYCVzYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgKyAnZnVuY3Rpb24gbXVzdCByZXR1cm4gYG51bGxgIG9yIGFuIGBFcnJvcmAgYnV0IHJldHVybmVkIGEgJXMuICcgKyAnWW91IG1heSBoYXZlIGZvcmdvdHRlbiB0byBwYXNzIGFuIGFyZ3VtZW50IHRvIHRoZSB0eXBlIGNoZWNrZXIgJyArICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgKyAnc2hhcGUgYWxsIHJlcXVpcmUgYW4gYXJndW1lbnQpLicsIGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJywgbG9jYXRpb24sIHR5cGVTcGVjTmFtZSwgdHlwZW9mIGVycm9yJDEpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yICYmICEoZXJyb3IkMS5tZXNzYWdlIGluIGxvZ2dlZFR5cGVGYWlsdXJlcykpIHtcbiAgICAgICAgICAvLyBPbmx5IG1vbml0b3IgdGhpcyBmYWlsdXJlIG9uY2UgYmVjYXVzZSB0aGVyZSB0ZW5kcyB0byBiZSBhIGxvdCBvZiB0aGVcbiAgICAgICAgICAvLyBzYW1lIGVycm9yLlxuICAgICAgICAgIGxvZ2dlZFR5cGVGYWlsdXJlc1tlcnJvciQxLm1lc3NhZ2VdID0gdHJ1ZTtcbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcblxuICAgICAgICAgIGVycm9yKCdGYWlsZWQgJXMgdHlwZTogJXMnLCBsb2NhdGlvbiwgZXJyb3IkMS5tZXNzYWdlKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWx1ZVN0YWNrID0gW107XG52YXIgZmliZXJTdGFjaztcblxue1xuICBmaWJlclN0YWNrID0gW107XG59XG5cbnZhciBpbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjcmVhdGVDdXJzb3IoZGVmYXVsdFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgY3VycmVudDogZGVmYXVsdFZhbHVlXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBvcChjdXJzb3IsIGZpYmVyKSB7XG4gIGlmIChpbmRleCA8IDApIHtcbiAgICB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBwb3AuJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIGlmIChmaWJlciAhPT0gZmliZXJTdGFja1tpbmRleF0pIHtcbiAgICAgIGVycm9yKCdVbmV4cGVjdGVkIEZpYmVyIHBvcHBlZC4nKTtcbiAgICB9XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlU3RhY2tbaW5kZXhdO1xuICB2YWx1ZVN0YWNrW2luZGV4XSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gbnVsbDtcbiAgfVxuXG4gIGluZGV4LS07XG59XG5cbmZ1bmN0aW9uIHB1c2goY3Vyc29yLCB2YWx1ZSwgZmliZXIpIHtcbiAgaW5kZXgrKztcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBjdXJzb3IuY3VycmVudDtcblxuICB7XG4gICAgZmliZXJTdGFja1tpbmRleF0gPSBmaWJlcjtcbiAgfVxuXG4gIGN1cnNvci5jdXJyZW50ID0gdmFsdWU7XG59XG5cbnZhciB3YXJuZWRBYm91dE1pc3NpbmdHZXRDaGlsZENvbnRleHQ7XG5cbntcbiAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0ID0ge307XG59XG5cbnZhciBlbXB0eUNvbnRleHRPYmplY3QgPSB7fTtcblxue1xuICBPYmplY3QuZnJlZXplKGVtcHR5Q29udGV4dE9iamVjdCk7XG59IC8vIEEgY3Vyc29yIHRvIHRoZSBjdXJyZW50IG1lcmdlZCBjb250ZXh0IG9iamVjdCBvbiB0aGUgc3RhY2suXG5cblxudmFyIGNvbnRleHRTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihlbXB0eUNvbnRleHRPYmplY3QpOyAvLyBBIGN1cnNvciB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBjb250ZXh0IGhhcyBjaGFuZ2VkLlxuXG52YXIgZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihmYWxzZSk7IC8vIEtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIGNvbnRleHQgb2JqZWN0IHRoYXQgd2FzIG9uIHRoZSBzdGFjay5cbi8vIFdlIHVzZSB0aGlzIHRvIGdldCBhY2Nlc3MgdG8gdGhlIHBhcmVudCBjb250ZXh0IGFmdGVyIHdlIGhhdmUgYWxyZWFkeVxuLy8gcHVzaGVkIHRoZSBuZXh0IGNvbnRleHQgcHJvdmlkZXIsIGFuZCBub3cgbmVlZCB0byBtZXJnZSB0aGVpciBjb250ZXh0cy5cblxudmFyIHByZXZpb3VzQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuZnVuY3Rpb24gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlcikge1xuICB7XG4gICAgaWYgKGRpZFB1c2hPd25Db250ZXh0SWZQcm92aWRlciAmJiBpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAvLyBJZiB0aGUgZmliZXIgaXMgYSBjb250ZXh0IHByb3ZpZGVyIGl0c2VsZiwgd2hlbiB3ZSByZWFkIGl0cyBjb250ZXh0XG4gICAgICAvLyB3ZSBtYXkgaGF2ZSBhbHJlYWR5IHB1c2hlZCBpdHMgb3duIGNoaWxkIGNvbnRleHQgb24gdGhlIHN0YWNrLiBBIGNvbnRleHRcbiAgICAgIC8vIHByb3ZpZGVyIHNob3VsZCBub3QgXCJzZWVcIiBpdHMgb3duIGNoaWxkIGNvbnRleHQuIFRoZXJlZm9yZSB3ZSByZWFkIHRoZVxuICAgICAgLy8gcHJldmlvdXMgKHBhcmVudCkgY29udGV4dCBpbnN0ZWFkIGZvciBhIGNvbnRleHQgcHJvdmlkZXIuXG4gICAgICByZXR1cm4gcHJldmlvdXNDb250ZXh0O1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgbWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQgPSB1bm1hc2tlZENvbnRleHQ7XG4gICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQgPSBtYXNrZWRDb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSB0eXBlLmNvbnRleHRUeXBlcztcblxuICAgIGlmICghY29udGV4dFR5cGVzKSB7XG4gICAgICByZXR1cm4gZW1wdHlDb250ZXh0T2JqZWN0O1xuICAgIH0gLy8gQXZvaWQgcmVjcmVhdGluZyBtYXNrZWQgY29udGV4dCB1bmxlc3MgdW5tYXNrZWQgY29udGV4dCBoYXMgY2hhbmdlZC5cbiAgICAvLyBGYWlsaW5nIHRvIGRvIHRoaXMgd2lsbCByZXN1bHQgaW4gdW5uZWNlc3NhcnkgY2FsbHMgdG8gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5cbiAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIGluZmluaXRlIGxvb3BzIGlmIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgY2FsbHMgc2V0U3RhdGUuXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmIChpbnN0YW5jZSAmJiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID09PSB1bm1hc2tlZENvbnRleHQpIHtcbiAgICAgIHJldHVybiBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDtcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dCA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIGNvbnRleHRUeXBlcykge1xuICAgICAgY29udGV4dFtrZXldID0gdW5tYXNrZWRDb250ZXh0W2tleV07XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNvbnRleHRUeXBlcywgY29udGV4dCwgJ2NvbnRleHQnLCBuYW1lKTtcbiAgICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgICAvLyBDb250ZXh0IGlzIGNyZWF0ZWQgYmVmb3JlIHRoZSBjbGFzcyBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHNvIGNoZWNrIGZvciBpbnN0YW5jZS5cblxuXG4gICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFzQ29udGV4dENoYW5nZWQoKSB7XG4gIHtcbiAgICByZXR1cm4gZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvci5jdXJyZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKHR5cGUpIHtcbiAge1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG4gICAgcmV0dXJuIGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyKSB7XG4gIHtcbiAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZmliZXIpO1xuICAgIHBvcChjb250ZXh0U3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGZpYmVyLCBjb250ZXh0LCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIGlmICghKGNvbnRleHRTdGFja0N1cnNvci5jdXJyZW50ID09PSBlbXB0eUNvbnRleHRPYmplY3QpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIlVuZXhwZWN0ZWQgY29udGV4dCBmb3VuZCBvbiBzdGFjay4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yLCBjb250ZXh0LCBmaWJlcik7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIGZpYmVyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCB0eXBlLCBwYXJlbnRDb250ZXh0KSB7XG4gIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gdHlwZS5jaGlsZENvbnRleHRUeXBlczsgLy8gVE9ETyAoYnZhdWdobikgUmVwbGFjZSB0aGlzIGJlaGF2aW9yIHdpdGggYW4gaW52YXJpYW50KCkgaW4gdGhlIGZ1dHVyZS5cbiAgICAvLyBJdCBoYXMgb25seSBiZWVuIGFkZGVkIGluIEZpYmVyIHRvIG1hdGNoIHRoZSAodW5pbnRlbnRpb25hbCkgYmVoYXZpb3IgaW4gU3RhY2suXG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgICAgIGlmICghd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0W2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCclcy5jaGlsZENvbnRleHRUeXBlcyBpcyBzcGVjaWZpZWQgYnV0IHRoZXJlIGlzIG5vIGdldENoaWxkQ29udGV4dCgpIG1ldGhvZCAnICsgJ29uIHRoZSBpbnN0YW5jZS4gWW91IGNhbiBlaXRoZXIgZGVmaW5lIGdldENoaWxkQ29udGV4dCgpIG9uICVzIG9yIHJlbW92ZSAnICsgJ2NoaWxkQ29udGV4dFR5cGVzIGZyb20gaXQuJywgY29tcG9uZW50TmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkQ29udGV4dCA9IGluc3RhbmNlLmdldENoaWxkQ29udGV4dCgpO1xuXG4gICAgZm9yICh2YXIgY29udGV4dEtleSBpbiBjaGlsZENvbnRleHQpIHtcbiAgICAgIGlmICghKGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0VHlwZXMpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ1Vua25vd24nKSArIFwiLmdldENoaWxkQ29udGV4dCgpOiBrZXkgXFxcIlwiICsgY29udGV4dEtleSArIFwiXFxcIiBpcyBub3QgZGVmaW5lZCBpbiBjaGlsZENvbnRleHRUeXBlcy5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcbiAgICAgIGNoZWNrUHJvcFR5cGVzKGNoaWxkQ29udGV4dFR5cGVzLCBjaGlsZENvbnRleHQsICdjaGlsZCBjb250ZXh0JywgbmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9hc3NpZ24oe30sIHBhcmVudENvbnRleHQsIGNoaWxkQ29udGV4dCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcykge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlOyAvLyBXZSBwdXNoIHRoZSBjb250ZXh0IGFzIGVhcmx5IGFzIHBvc3NpYmxlIHRvIGVuc3VyZSBzdGFjayBpbnRlZ3JpdHkuXG4gICAgLy8gSWYgdGhlIGluc3RhbmNlIGRvZXMgbm90IGV4aXN0IHlldCwgd2Ugd2lsbCBwdXNoIG51bGwgYXQgZmlyc3QsXG4gICAgLy8gYW5kIHJlcGxhY2UgaXQgb24gdGhlIHN0YWNrIGxhdGVyIHdoZW4gaW52YWxpZGF0aW5nIHRoZSBjb250ZXh0LlxuXG4gICAgdmFyIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0ID0gaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgfHwgZW1wdHlDb250ZXh0T2JqZWN0OyAvLyBSZW1lbWJlciB0aGUgcGFyZW50IGNvbnRleHQgc28gd2UgY2FuIG1lcmdlIHdpdGggaXQgbGF0ZXIuXG4gICAgLy8gSW5oZXJpdCB0aGUgcGFyZW50J3MgZGlkLXBlcmZvcm0td29yayB2YWx1ZSB0byBhdm9pZCBpbmFkdmVydGVudGx5IGJsb2NraW5nIHVwZGF0ZXMuXG5cbiAgICBwcmV2aW91c0NvbnRleHQgPSBjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudDtcbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIHR5cGUsIGRpZENoYW5nZSkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGFuIGluc3RhbmNlIGJ5IHRoaXMgcG9pbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAvLyBNZXJnZSBwYXJlbnQgYW5kIG93biBjb250ZXh0LlxuICAgICAgLy8gU2tpcCB0aGlzIGlmIHdlJ3JlIG5vdCB1cGRhdGluZyBkdWUgdG8gc0NVLlxuICAgICAgLy8gVGhpcyBhdm9pZHMgdW5uZWNlc3NhcmlseSByZWNvbXB1dGluZyBtZW1vaXplZCB2YWx1ZXMuXG4gICAgICB2YXIgbWVyZ2VkQ29udGV4dCA9IHByb2Nlc3NDaGlsZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHR5cGUsIHByZXZpb3VzQ29udGV4dCk7XG4gICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IG1lcmdlZENvbnRleHQ7IC8vIFJlcGxhY2UgdGhlIG9sZCAob3IgZW1wdHkpIGNvbnRleHQgd2l0aCB0aGUgbmV3IG9uZS5cbiAgICAgIC8vIEl0IGlzIGltcG9ydGFudCB0byB1bndpbmQgdGhlIGNvbnRleHQgaW4gdGhlIHJldmVyc2Ugb3JkZXIuXG5cbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7IC8vIE5vdyBwdXNoIHRoZSBuZXcgY29udGV4dCBhbmQgbWFyayB0aGF0IGl0IGhhcyBjaGFuZ2VkLlxuXG4gICAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgbWVyZ2VkQ29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRDaGFuZ2UsIHdvcmtJblByb2dyZXNzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKSB7XG4gIHtcbiAgICAvLyBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHVzZWQgd2l0aCByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjsgbm90IHN1cmUgaWYgaXRcbiAgICAvLyBtYWtlcyBzZW5zZSBlbHNld2hlcmVcbiAgICBpZiAoIShpc0ZpYmVyTW91bnRlZChmaWJlcikgJiYgZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgc3VidHJlZSBwYXJlbnQgdG8gYmUgYSBtb3VudGVkIGNsYXNzIGNvbXBvbmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBzd2l0Y2ggKG5vZGUudGFnKSB7XG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLmNvbnRleHQ7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gbm9kZS50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUgIT09IG51bGwpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJGb3VuZCB1bmV4cGVjdGVkIGRldGFjaGVkIHN1YnRyZWUgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBMZWdhY3lSb290ID0gMDtcbnZhciBCbG9ja2luZ1Jvb3QgPSAxO1xudmFyIENvbmN1cnJlbnRSb290ID0gMjtcblxudmFyIHJlbmRlcmVySUQgPSBudWxsO1xudmFyIGluamVjdGVkSG9vayA9IG51bGw7XG52YXIgaGFzTG9nZ2VkRXJyb3IgPSBmYWxzZTtcbnZhciBpc0RldlRvb2xzUHJlc2VudCA9IHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gIT09ICd1bmRlZmluZWQnO1xuZnVuY3Rpb24gaW5qZWN0SW50ZXJuYWxzKGludGVybmFscykge1xuICBpZiAodHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBObyBEZXZUb29sc1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBob29rID0gX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fO1xuXG4gIGlmIChob29rLmlzRGlzYWJsZWQpIHtcbiAgICAvLyBUaGlzIGlzbid0IGEgcmVhbCBwcm9wZXJ0eSBvbiB0aGUgaG9vaywgYnV0IGl0IGNhbiBiZSBzZXQgdG8gb3B0IG91dFxuICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzg3N1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKCFob29rLnN1cHBvcnRzRmliZXIpIHtcbiAgICB7XG4gICAgICBlcnJvcignVGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIFJlYWN0IERldlRvb2xzIGlzIHRvbyBvbGQgYW5kIHdpbGwgbm90IHdvcmsgJyArICd3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgUmVhY3QuIFBsZWFzZSB1cGRhdGUgUmVhY3QgRGV2VG9vbHMuICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzJyk7XG4gICAgfSAvLyBEZXZUb29scyBleGlzdHMsIGV2ZW4gdGhvdWdoIGl0IGRvZXNuJ3Qgc3VwcG9ydCBGaWJlci5cblxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIHJlbmRlcmVySUQgPSBob29rLmluamVjdChpbnRlcm5hbHMpOyAvLyBXZSBoYXZlIHN1Y2Nlc3NmdWxseSBpbmplY3RlZCwgc28gbm93IGl0IGlzIHNhZmUgdG8gc2V0IHVwIGhvb2tzLlxuXG4gICAgaW5qZWN0ZWRIb29rID0gaG9vaztcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gQ2F0Y2ggYWxsIGVycm9ycyBiZWNhdXNlIGl0IGlzIHVuc2FmZSB0byB0aHJvdyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMuJywgZXJyKTtcbiAgICB9XG4gIH0gLy8gRGV2VG9vbHMgZXhpc3RzXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIG9uU2NoZWR1bGVSb290KHJvb3QsIGNoaWxkcmVuKSB7XG4gIHtcbiAgICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25TY2hlZHVsZUZpYmVyUm9vdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgY2hpbGRyZW4pO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICggIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3Qocm9vdCwgcHJpb3JpdHlMZXZlbCkge1xuICBpZiAoaW5qZWN0ZWRIb29rICYmIHR5cGVvZiBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICB0cnkge1xuICAgICAgdmFyIGRpZEVycm9yID0gKHJvb3QuY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpID09PSBEaWRDYXB0dXJlO1xuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lcikge1xuICAgICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclJvb3QocmVuZGVyZXJJRCwgcm9vdCwgcHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHVuZGVmaW5lZCwgZGlkRXJyb3IpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBvbkNvbW1pdFVubW91bnQoZmliZXIpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudChyZW5kZXJlcklELCBmaWJlcik7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghaGFzTG9nZ2VkRXJyb3IpIHtcbiAgICAgICAgICBoYXNMb2dnZWRFcnJvciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVhY3QgaW5zdHJ1bWVudGF0aW9uIGVuY291bnRlcmVkIGFuIGVycm9yOiAlcycsIGVycik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNjaGVkdWxlcl9ydW5XaXRoUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2ssXG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrID0gU2NoZWR1bGVyLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9zaG91bGRZaWVsZCA9IFNjaGVkdWxlci51bnN0YWJsZV9zaG91bGRZaWVsZCxcbiAgICBTY2hlZHVsZXJfcmVxdWVzdFBhaW50ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3JlcXVlc3RQYWludCxcbiAgICBTY2hlZHVsZXJfbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93LFxuICAgIFNjaGVkdWxlcl9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IFNjaGVkdWxlci51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxcbiAgICBTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Ob3JtYWxQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTG93UHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTG93UHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0lkbGVQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9JZGxlUHJpb3JpdHk7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VDYWxsYmFja05vZGUgPSB7fTsgLy8gRXhjZXB0IGZvciBOb1ByaW9yaXR5LCB0aGVzZSBjb3JyZXNwb25kIHRvIFNjaGVkdWxlciBwcmlvcml0aWVzLiBXZSB1c2Vcbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSQxID0gOTk7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA9IDk4O1xudmFyIE5vcm1hbFByaW9yaXR5JDEgPSA5NztcbnZhciBMb3dQcmlvcml0eSQxID0gOTY7XG52YXIgSWRsZVByaW9yaXR5JDEgPSA5NTsgLy8gTm9Qcmlvcml0eSBpcyB0aGUgYWJzZW5jZSBvZiBwcmlvcml0eS4gQWxzbyBSZWFjdC1vbmx5LlxuXG52YXIgTm9Qcmlvcml0eSQxID0gOTA7XG52YXIgc2hvdWxkWWllbGQgPSBTY2hlZHVsZXJfc2hvdWxkWWllbGQ7XG52YXIgcmVxdWVzdFBhaW50ID0gLy8gRmFsbCBiYWNrIGdyYWNlZnVsbHkgaWYgd2UncmUgcnVubmluZyBhbiBvbGRlciB2ZXJzaW9uIG9mIFNjaGVkdWxlci5cblNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgIT09IHVuZGVmaW5lZCA/IFNjaGVkdWxlcl9yZXF1ZXN0UGFpbnQgOiBmdW5jdGlvbiAoKSB7fTtcbnZhciBzeW5jUXVldWUgPSBudWxsO1xudmFyIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbnZhciBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG52YXIgaW5pdGlhbFRpbWVNcyQxID0gU2NoZWR1bGVyX25vdyQxKCk7IC8vIElmIHRoZSBpbml0aWFsIHRpbWVzdGFtcCBpcyByZWFzb25hYmx5IHNtYWxsLCB1c2UgU2NoZWR1bGVyJ3MgYG5vd2AgZGlyZWN0bHkuXG4vLyBUaGlzIHdpbGwgYmUgdGhlIGNhc2UgZm9yIG1vZGVybiBicm93c2VycyB0aGF0IHN1cHBvcnQgYHBlcmZvcm1hbmNlLm5vd2AuIEluXG4vLyBvbGRlciBicm93c2VycywgU2NoZWR1bGVyIGZhbGxzIGJhY2sgdG8gYERhdGUubm93YCwgd2hpY2ggcmV0dXJucyBhIFVuaXhcbi8vIHRpbWVzdGFtcC4gSW4gdGhhdCBjYXNlLCBzdWJ0cmFjdCB0aGUgbW9kdWxlIGluaXRpYWxpemF0aW9uIHRpbWUgdG8gc2ltdWxhdGVcbi8vIHRoZSBiZWhhdmlvciBvZiBwZXJmb3JtYW5jZS5ub3cgYW5kIGtlZXAgb3VyIHRpbWVzIHNtYWxsIGVub3VnaCB0byBmaXRcbi8vIHdpdGhpbiAzMiBiaXRzLlxuLy8gVE9ETzogQ29uc2lkZXIgbGlmdGluZyB0aGlzIGludG8gU2NoZWR1bGVyLlxuXG52YXIgbm93ID0gaW5pdGlhbFRpbWVNcyQxIDwgMTAwMDAgPyBTY2hlZHVsZXJfbm93JDEgOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBTY2hlZHVsZXJfbm93JDEoKSAtIGluaXRpYWxUaW1lTXMkMTtcbn07XG5mdW5jdGlvbiBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgc3dpdGNoIChTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSkge1xuICAgIGNhc2UgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIEltbWVkaWF0ZVByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHJldHVybiBVc2VyQmxvY2tpbmdQcmlvcml0eSQyO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk6XG4gICAgICByZXR1cm4gTm9ybWFsUHJpb3JpdHkkMTtcblxuICAgIGNhc2UgU2NoZWR1bGVyX0xvd1ByaW9yaXR5OlxuICAgICAgcmV0dXJuIExvd1ByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZVByaW9yaXR5JDE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biBwcmlvcml0eSBsZXZlbC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxufVxuXG5mdW5jdGlvbiByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgc3dpdGNoIChyZWFjdFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5O1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eTtcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHk7XG5cbiAgICBjYXNlIExvd1ByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0xvd1ByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHkkMTpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfSWRsZVByaW9yaXR5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDEocmVhY3RQcmlvcml0eUxldmVsLCBmbikge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGZuKTtcbn1cbmZ1bmN0aW9uIHNjaGVkdWxlQ2FsbGJhY2socmVhY3RQcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IHJlYWN0UHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KHJlYWN0UHJpb3JpdHlMZXZlbCk7XG4gIHJldHVybiBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBzY2hlZHVsZVN5bmNDYWxsYmFjayhjYWxsYmFjaykge1xuICAvLyBQdXNoIHRoaXMgY2FsbGJhY2sgaW50byBhbiBpbnRlcm5hbCBxdWV1ZS4gV2UnbGwgZmx1c2ggdGhlc2UgZWl0aGVyIGluXG4gIC8vIHRoZSBuZXh0IHRpY2ssIG9yIGVhcmxpZXIgaWYgc29tZXRoaW5nIGNhbGxzIGBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlYC5cbiAgaWYgKHN5bmNRdWV1ZSA9PT0gbnVsbCkge1xuICAgIHN5bmNRdWV1ZSA9IFtjYWxsYmFja107IC8vIEZsdXNoIHRoZSBxdWV1ZSBpbiB0aGUgbmV4dCB0aWNrLCBhdCB0aGUgZWFybGllc3QuXG5cbiAgICBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZUltcGwpO1xuICB9IGVsc2Uge1xuICAgIC8vIFB1c2ggb250byBleGlzdGluZyBxdWV1ZS4gRG9uJ3QgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrIGJlY2F1c2VcbiAgICAvLyB3ZSBhbHJlYWR5IHNjaGVkdWxlZCBvbmUgd2hlbiB3ZSBjcmVhdGVkIHRoZSBxdWV1ZS5cbiAgICBzeW5jUXVldWUucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICByZXR1cm4gZmFrZUNhbGxiYWNrTm9kZTtcbn1cbmZ1bmN0aW9uIGNhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSkge1xuICBpZiAoY2FsbGJhY2tOb2RlICE9PSBmYWtlQ2FsbGJhY2tOb2RlKSB7XG4gICAgU2NoZWR1bGVyX2NhbmNlbENhbGxiYWNrKGNhbGxiYWNrTm9kZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKSB7XG4gIGlmIChpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBub2RlID0gaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGU7XG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBudWxsO1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhub2RlKTtcbiAgfVxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKCkge1xuICBpZiAoIWlzRmx1c2hpbmdTeW5jUXVldWUgJiYgc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gUHJldmVudCByZS1lbnRyYW5jeS5cbiAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gdHJ1ZTtcbiAgICB2YXIgaSA9IDA7XG5cbiAgICB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgX2lzU3luYzIgPSB0cnVlO1xuICAgICAgICB2YXIgX3F1ZXVlID0gc3luY1F1ZXVlO1xuICAgICAgICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZm9yICg7IGkgPCBfcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjYWxsYmFjayA9IF9xdWV1ZVtpXTtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBjYWxsYmFjayA9IGNhbGxiYWNrKF9pc1N5bmMyKTtcbiAgICAgICAgICAgIH0gd2hpbGUgKGNhbGxiYWNrICE9PSBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzeW5jUXVldWUgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgc29tZXRoaW5nIHRocm93cywgbGVhdmUgdGhlIHJlbWFpbmluZyBjYWxsYmFja3Mgb24gdGhlIHF1ZXVlLlxuICAgICAgICBpZiAoc3luY1F1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3luY1F1ZXVlID0gc3luY1F1ZXVlLnNsaWNlKGkgKyAxKTtcbiAgICAgICAgfSAvLyBSZXN1bWUgZmx1c2hpbmcgaW4gdGhlIG5leHQgdGlja1xuXG5cbiAgICAgICAgU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5LCBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKTtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpc0ZsdXNoaW5nU3luY1F1ZXVlID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG52YXIgTm9Nb2RlID0gMDtcbnZhciBTdHJpY3RNb2RlID0gMTsgLy8gVE9ETzogUmVtb3ZlIEJsb2NraW5nTW9kZSBhbmQgQ29uY3VycmVudE1vZGUgYnkgcmVhZGluZyBmcm9tIHRoZSByb290XG4vLyB0YWcgaW5zdGVhZFxuXG52YXIgQmxvY2tpbmdNb2RlID0gMjtcbnZhciBDb25jdXJyZW50TW9kZSA9IDQ7XG52YXIgUHJvZmlsZU1vZGUgPSA4O1xudmFyIERlYnVnVHJhY2luZ01vZGUgPSAxNjtcblxudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50QmF0Y2hDb25maWc7XG52YXIgTm9UcmFuc2l0aW9uID0gMDtcbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpIHtcbiAgcmV0dXJuIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLnRyYW5zaXRpb247XG59XG5cbnZhciBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncyA9IHtcbiAgcmVjb3JkVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHt9LFxuICBmbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5nczogZnVuY3Rpb24gKCkge30sXG4gIHJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKCkge30sXG4gIGRpc2NhcmRQZW5kaW5nV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9XG59O1xuXG57XG4gIHZhciBmaW5kU3RyaWN0Um9vdCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICAgIHZhciBtYXliZVN0cmljdFJvb3QgPSBudWxsO1xuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgbWF5YmVTdHJpY3RSb290ID0gbm9kZTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBtYXliZVN0cmljdFJvb3Q7XG4gIH07XG5cbiAgdmFyIHNldFRvU29ydGVkU3RyaW5nID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHNldC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgYXJyYXkucHVzaCh2YWx1ZSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5LnNvcnQoKS5qb2luKCcsICcpO1xuICB9O1xuXG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgdmFyIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cbiAgICBpZiAoZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBEb24ndCB3YXJuIGFib3V0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cy5cbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlICYmIHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIFdlIGRvIGFuIGluaXRpYWwgcGFzcyB0byBnYXRoZXIgY29tcG9uZW50IG5hbWVzXG4gICAgdmFyIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuXG4gICAgaWYgKHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuYWRkKGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgICBkaWRXYXJuQWJvdXRVbnNhZmVMaWZlY3ljbGVzLmFkZChmaWJlci50eXBlKTtcbiAgICAgIH0pO1xuICAgICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9IC8vIEZpbmFsbHksIHdlIGZsdXNoIGFsbCB0aGUgd2FybmluZ3NcbiAgICAvLyBVTlNBRkVfIG9uZXMgYmVmb3JlIHRoZSBkZXByZWNhdGVkIG9uZXMsIHNpbmNlIHRoZXknbGwgYmUgJ2xvdWRlcidcblxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIHNvcnRlZE5hbWVzID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkIGFuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIHNvcnRlZE5hbWVzKTtcbiAgICB9XG5cbiAgICBpZiAoVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgXCIqIElmIHlvdSdyZSB1cGRhdGluZyBzdGF0ZSB3aGVuZXZlciBwcm9wcyBjaGFuZ2UsIFwiICsgJ3JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2UgbWVtb2l6YXRpb24gdGVjaG5pcXVlcyBvciBtb3ZlIGl0IHRvICcgKyAnc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gTGVhcm4gbW9yZSBhdDogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Rlcml2ZWQtc3RhdGVcXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMyID0gc2V0VG9Tb3J0ZWRTdHJpbmcoVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSBpbiBzdHJpY3QgbW9kZSBpcyBub3QgcmVjb21tZW5kZWQgJyArICdhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMyA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbE1vdW50IGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBjb2RlIHdpdGggc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZE1vdW50LCBhbmQgc2V0IGluaXRpYWwgc3RhdGUgaW4gdGhlIGNvbnN0cnVjdG9yLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbE1vdW50IHRvIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczMpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXM0ID0gc2V0VG9Tb3J0ZWRTdHJpbmcoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgd2FybignY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCByZWZhY3RvciB5b3VyIFwiICsgJ2NvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICcqIFJlbmFtZSBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXM0KTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNSA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxVcGRhdGUgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFVwZGF0ZSB0byBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7IC8vIFRyYWNrcyBjb21wb25lbnRzIHdlIGhhdmUgYWxyZWFkeSB3YXJuZWQgYWJvdXQuXG5cbiAgdmFyIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQgPSBuZXcgU2V0KCk7XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7XG4gICAgdmFyIHN0cmljdFJvb3QgPSBmaW5kU3RyaWN0Um9vdChmaWJlcik7XG5cbiAgICBpZiAoc3RyaWN0Um9vdCA9PT0gbnVsbCkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHRvIGZpbmQgYSBTdHJpY3RNb2RlIGNvbXBvbmVudCBpbiBhIHN0cmljdCBtb2RlIHRyZWUuICcgKyAnVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRGVkdXAgc3RyYXRlZ3k6IFdhcm4gb25jZSBwZXIgY29tcG9uZW50LlxuXG5cbiAgICBpZiAoZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5oYXMoZmliZXIudHlwZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgd2FybmluZ3NGb3JSb290ID0gcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nLmdldChzdHJpY3RSb290KTtcblxuICAgIGlmIChmaWJlci50eXBlLmNvbnRleHRUeXBlcyAhPSBudWxsIHx8IGZpYmVyLnR5cGUuY2hpbGRDb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0Q2hpbGRDb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAod2FybmluZ3NGb3JSb290ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgd2FybmluZ3NGb3JSb290ID0gW107XG4gICAgICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5zZXQoc3RyaWN0Um9vdCwgd2FybmluZ3NGb3JSb290KTtcbiAgICAgIH1cblxuICAgICAgd2FybmluZ3NGb3JSb290LnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlckFycmF5LCBzdHJpY3RSb290KSB7XG4gICAgICBpZiAoZmliZXJBcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB2YXIgZmlyc3RGaWJlciA9IGZpYmVyQXJyYXlbMF07XG4gICAgICB2YXIgdW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG4gICAgICBmaWJlckFycmF5LmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIHVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5Q29udGV4dC5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKHVuaXF1ZU5hbWVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpcnN0RmliZXIpO1xuXG4gICAgICAgIGVycm9yKCdMZWdhY3kgY29udGV4dCBBUEkgaGFzIGJlZW4gZGV0ZWN0ZWQgd2l0aGluIGEgc3RyaWN0LW1vZGUgdHJlZS4nICsgJ1xcblxcblRoZSBvbGQgQVBJIHdpbGwgYmUgc3VwcG9ydGVkIGluIGFsbCAxNi54IHJlbGVhc2VzLCBidXQgYXBwbGljYXRpb25zICcgKyAndXNpbmcgaXQgc2hvdWxkIG1pZ3JhdGUgdG8gdGhlIG5ldyB2ZXJzaW9uLicgKyAnXFxuXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJyArICdcXG5cXG5MZWFybiBtb3JlIGFib3V0IHRoaXMgd2FybmluZyBoZXJlOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvbGVnYWN5LWNvbnRleHQnLCBzb3J0ZWROYW1lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZyA9IG5ldyBNYXAoKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURlZmF1bHRQcm9wcyhDb21wb25lbnQsIGJhc2VQcm9wcykge1xuICBpZiAoQ29tcG9uZW50ICYmIENvbXBvbmVudC5kZWZhdWx0UHJvcHMpIHtcbiAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHMuIFRha2VuIGZyb20gUmVhY3RFbGVtZW50XG4gICAgdmFyIHByb3BzID0gX2Fzc2lnbih7fSwgYmFzZVByb3BzKTtcblxuICAgIHZhciBkZWZhdWx0UHJvcHMgPSBDb21wb25lbnQuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZGVmYXVsdFByb3BzKSB7XG4gICAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcHM7XG4gIH1cblxuICByZXR1cm4gYmFzZVByb3BzO1xufVxuXG4vLyBNYXggMzEgYml0IGludGVnZXIuIFRoZSBtYXggaW50ZWdlciBzaXplIGluIFY4IGZvciAzMi1iaXQgc3lzdGVtcy5cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG52YXIgTUFYX1NJR05FRF8zMV9CSVRfSU5UID0gMTA3Mzc0MTgyMztcblxudmFyIHZhbHVlQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKG51bGwpO1xudmFyIHJlbmRlcmVyU2lnaWw7XG5cbntcbiAgLy8gVXNlIHRoaXMgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBjb250ZXh0XG4gIHJlbmRlcmVyU2lnaWwgPSB7fTtcbn1cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBudWxsO1xudmFyIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG52YXIgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuZnVuY3Rpb24gcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCkge1xuICAvLyBUaGlzIGlzIGNhbGxlZCByaWdodCBiZWZvcmUgUmVhY3QgeWllbGRzIGV4ZWN1dGlvbiwgdG8gZW5zdXJlIGByZWFkQ29udGV4dGBcbiAgLy8gY2Fubm90IGJlIGNhbGxlZCBvdXRzaWRlIHRoZSByZW5kZXIgcGhhc2UuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gbnVsbDtcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcblxuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCkge1xuICB7XG4gICAgaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFViA9IHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gcHVzaFByb3ZpZGVyKHByb3ZpZGVyRmliZXIsIG5leHRWYWx1ZSkge1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgcHVzaCh2YWx1ZUN1cnNvciwgY29udGV4dC5fY3VycmVudFZhbHVlLCBwcm92aWRlckZpYmVyKTtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBuZXh0VmFsdWU7XG5cbiAgICB7XG4gICAgICBpZiAoY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSB1bmRlZmluZWQgJiYgY29udGV4dC5fY3VycmVudFJlbmRlcmVyICE9PSBudWxsICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gcmVuZGVyZXJTaWdpbCkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBjb250ZXh0IHByb3ZpZGVyLiBUaGlzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZC4nKTtcbiAgICAgIH1cblxuICAgICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbDtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHBvcFByb3ZpZGVyKHByb3ZpZGVyRmliZXIpIHtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9IHZhbHVlQ3Vyc29yLmN1cnJlbnQ7XG4gIHBvcCh2YWx1ZUN1cnNvciwgcHJvdmlkZXJGaWJlcik7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJGaWJlci50eXBlLl9jb250ZXh0O1xuXG4gIHtcbiAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBjdXJyZW50VmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSkge1xuICBpZiAob2JqZWN0SXMob2xkVmFsdWUsIG5ld1ZhbHVlKSkge1xuICAgIC8vIE5vIGNoYW5nZVxuICAgIHJldHVybiAwO1xuICB9IGVsc2Uge1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IHR5cGVvZiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyA9PT0gJ2Z1bmN0aW9uJyA/IGNvbnRleHQuX2NhbGN1bGF0ZUNoYW5nZWRCaXRzKG9sZFZhbHVlLCBuZXdWYWx1ZSkgOiBNQVhfU0lHTkVEXzMxX0JJVF9JTlQ7XG5cbiAgICB7XG4gICAgICBpZiAoKGNoYW5nZWRCaXRzICYgTUFYX1NJR05FRF8zMV9CSVRfSU5UKSAhPT0gY2hhbmdlZEJpdHMpIHtcbiAgICAgICAgZXJyb3IoJ2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBFeHBlY3RlZCB0aGUgcmV0dXJuIHZhbHVlIHRvIGJlIGEgJyArICczMS1iaXQgaW50ZWdlci4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNoYW5nZWRCaXRzIHwgMDtcbiAgfVxufVxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25QYXJlbnRQYXRoKHBhcmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVXBkYXRlIHRoZSBjaGlsZCBsYW5lcyBvZiBhbGwgdGhlIGFuY2VzdG9ycywgaW5jbHVkaW5nIHRoZSBhbHRlcm5hdGVzLlxuICB2YXIgbm9kZSA9IHBhcmVudDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBhbHRlcm5hdGUgPSBub2RlLmFsdGVybmF0ZTtcblxuICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgICBub2RlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5vZGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmICFpc1N1YnNldE9mTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgYWx0ZXJuYXRlIHdhcyB1cGRhdGVkLCB3aGljaCBtZWFucyB0aGUgcmVzdCBvZiB0aGVcbiAgICAgIC8vIGFuY2VzdG9yIHBhdGggYWxyZWFkeSBoYXMgc3VmZmljaWVudCBwcmlvcml0eS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcHJvcGFnYXRlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgY29udGV4dCwgY2hhbmdlZEJpdHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBmaWJlciA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIGlmIChmaWJlciAhPT0gbnVsbCkge1xuICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgIGZpYmVyLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgdmFyIG5leHRGaWJlciA9IHZvaWQgMDsgLy8gVmlzaXQgdGhpcyBmaWJlci5cblxuICAgIHZhciBsaXN0ID0gZmliZXIuZGVwZW5kZW5jaWVzO1xuXG4gICAgaWYgKGxpc3QgIT09IG51bGwpIHtcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgICAgdmFyIGRlcGVuZGVuY3kgPSBsaXN0LmZpcnN0Q29udGV4dDtcblxuICAgICAgd2hpbGUgKGRlcGVuZGVuY3kgIT09IG51bGwpIHtcbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGNvbnRleHQgbWF0Y2hlcy5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kuY29udGV4dCA9PT0gY29udGV4dCAmJiAoZGVwZW5kZW5jeS5vYnNlcnZlZEJpdHMgJiBjaGFuZ2VkQml0cykgIT09IDApIHtcbiAgICAgICAgICAvLyBNYXRjaCEgU2NoZWR1bGUgYW4gdXBkYXRlIG9uIHRoaXMgZmliZXIuXG4gICAgICAgICAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIFNjaGVkdWxlIGEgZm9yY2UgdXBkYXRlIG9uIHRoZSB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgcGlja0FyYml0cmFyeUxhbmUocmVuZGVyTGFuZXMpKTtcbiAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTsgLy8gVE9ETzogQmVjYXVzZSB3ZSBkb24ndCBoYXZlIGEgd29yay1pbi1wcm9ncmVzcywgdGhpcyB3aWxsIGFkZCB0aGVcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB0byB0aGUgY3VycmVudCBmaWJlciwgdG9vLCB3aGljaCBtZWFucyBpdCB3aWxsIHBlcnNpc3QgZXZlbiBpZlxuICAgICAgICAgICAgLy8gdGhpcyByZW5kZXIgaXMgdGhyb3duIGF3YXkuIFNpbmNlIGl0J3MgYSByYWNlIGNvbmRpdGlvbiwgbm90IHN1cmUgaXQnc1xuICAgICAgICAgICAgLy8gd29ydGggZml4aW5nLlxuXG4gICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhmaWJlci5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTsgLy8gTWFyayB0aGUgdXBkYXRlZCBsYW5lcyBvbiB0aGUgbGlzdCwgdG9vLlxuXG4gICAgICAgICAgbGlzdC5sYW5lcyA9IG1lcmdlTGFuZXMobGlzdC5sYW5lcywgcmVuZGVyTGFuZXMpOyAvLyBTaW5jZSB3ZSBhbHJlYWR5IGZvdW5kIGEgbWF0Y2gsIHdlIGNhbiBzdG9wIHRyYXZlcnNpbmcgdGhlXG4gICAgICAgICAgLy8gZGVwZW5kZW5jeSBsaXN0LlxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZXBlbmRlbmN5ID0gZGVwZW5kZW5jeS5uZXh0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDb250ZXh0UHJvdmlkZXIpIHtcbiAgICAgIC8vIERvbid0IHNjYW4gZGVlcGVyIGlmIHRoaXMgaXMgYSBtYXRjaGluZyBwcm92aWRlclxuICAgICAgbmV4dEZpYmVyID0gZmliZXIudHlwZSA9PT0gd29ya0luUHJvZ3Jlc3MudHlwZSA/IG51bGwgOiBmaWJlci5jaGlsZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVHJhdmVyc2UgZG93bi5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLmNoaWxkO1xuICAgIH1cblxuICAgIGlmIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIGNoaWxkIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgbmV4dEZpYmVyLnJldHVybiA9IGZpYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBjaGlsZC4gVHJhdmVyc2UgdG8gbmV4dCBzaWJsaW5nLlxuICAgICAgbmV4dEZpYmVyID0gZmliZXI7XG5cbiAgICAgIHdoaWxlIChuZXh0RmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5leHRGaWJlciA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAvLyBXZSdyZSBiYWNrIHRvIHRoZSByb290IG9mIHRoaXMgc3VidHJlZS4gRXhpdC5cbiAgICAgICAgICBuZXh0RmliZXIgPSBudWxsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNpYmxpbmcgPSBuZXh0RmliZXIuc2libGluZztcblxuICAgICAgICBpZiAoc2libGluZyAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFNldCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgdGhlIHNpYmxpbmcgdG8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG4gICAgICAgICAgc2libGluZy5yZXR1cm4gPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgICAgIG5leHRGaWJlciA9IHNpYmxpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gTm8gbW9yZSBzaWJsaW5ncy4gVHJhdmVyc2UgdXAuXG5cblxuICAgICAgICBuZXh0RmliZXIgPSBuZXh0RmliZXIucmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpYmVyID0gbmV4dEZpYmVyO1xuICB9XG59XG5mdW5jdGlvbiBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIgPSB3b3JrSW5Qcm9ncmVzcztcbiAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbiAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gbnVsbDtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcztcblxuICBpZiAoZGVwZW5kZW5jaWVzICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0Q29udGV4dCA9IGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQ7XG5cbiAgICBpZiAoZmlyc3RDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShkZXBlbmRlbmNpZXMubGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgICAvLyBDb250ZXh0IGxpc3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuIE1hcmsgdGhhdCB0aGlzIGZpYmVyIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgICAgfSAvLyBSZXNldCB0aGUgd29yay1pbi1wcm9ncmVzcyBsaXN0XG5cblxuICAgICAgZGVwZW5kZW5jaWVzLmZpcnN0Q29udGV4dCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAge1xuICAgIC8vIFRoaXMgd2FybmluZyB3b3VsZCBmaXJlIGlmIHlvdSByZWFkIGNvbnRleHQgaW5zaWRlIGEgSG9vayBsaWtlIHVzZU1lbW8uXG4gICAgLy8gVW5saWtlIHRoZSBjbGFzcyBjaGVjayBiZWxvdywgaXQncyBub3QgZW5mb3JjZWQgaW4gcHJvZHVjdGlvbiBmb3IgcGVyZi5cbiAgICBpZiAoaXNEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVikge1xuICAgICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPT09IGNvbnRleHQpIDsgZWxzZSBpZiAob2JzZXJ2ZWRCaXRzID09PSBmYWxzZSB8fCBvYnNlcnZlZEJpdHMgPT09IDApIDsgZWxzZSB7XG4gICAgdmFyIHJlc29sdmVkT2JzZXJ2ZWRCaXRzOyAvLyBBdm9pZCBkZW9wdGluZyBvbiBvYnNlcnZhYmxlIGFyZ3VtZW50cyBvciBoZXRlcm9nZW5lb3VzIHR5cGVzLlxuXG4gICAgaWYgKHR5cGVvZiBvYnNlcnZlZEJpdHMgIT09ICdudW1iZXInIHx8IG9ic2VydmVkQml0cyA9PT0gTUFYX1NJR05FRF8zMV9CSVRfSU5UKSB7XG4gICAgICAvLyBPYnNlcnZlIGFsbCB1cGRhdGVzLlxuICAgICAgbGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID0gY29udGV4dDtcbiAgICAgIHJlc29sdmVkT2JzZXJ2ZWRCaXRzID0gTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IG9ic2VydmVkQml0cztcbiAgICB9XG5cbiAgICB2YXIgY29udGV4dEl0ZW0gPSB7XG4gICAgICBjb250ZXh0OiBjb250ZXh0LFxuICAgICAgb2JzZXJ2ZWRCaXRzOiByZXNvbHZlZE9ic2VydmVkQml0cyxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9PT0gbnVsbCkge1xuICAgICAgaWYgKCEoY3VycmVudGx5UmVuZGVyaW5nRmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiBJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IGRlcGVuZGVuY3kgZm9yIHRoaXMgY29tcG9uZW50LiBDcmVhdGUgYSBuZXcgbGlzdC5cblxuXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBjb250ZXh0SXRlbTtcbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyLmRlcGVuZGVuY2llcyA9IHtcbiAgICAgICAgbGFuZXM6IE5vTGFuZXMsXG4gICAgICAgIGZpcnN0Q29udGV4dDogY29udGV4dEl0ZW0sXG4gICAgICAgIHJlc3BvbmRlcnM6IG51bGxcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCBhIG5ldyBjb250ZXh0IGl0ZW0uXG4gICAgICBsYXN0Q29udGV4dERlcGVuZGVuY3kgPSBsYXN0Q29udGV4dERlcGVuZGVuY3kubmV4dCA9IGNvbnRleHRJdGVtO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAgY29udGV4dC5fY3VycmVudFZhbHVlIDtcbn1cblxudmFyIFVwZGF0ZVN0YXRlID0gMDtcbnZhciBSZXBsYWNlU3RhdGUgPSAxO1xudmFyIEZvcmNlVXBkYXRlID0gMjtcbnZhciBDYXB0dXJlVXBkYXRlID0gMzsgLy8gR2xvYmFsIHN0YXRlIHRoYXQgaXMgcmVzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLlxuLy8gSXQgc2hvdWxkIG9ubHkgYmUgcmVhZCByaWdodCBhZnRlciBjYWxsaW5nIGBwcm9jZXNzVXBkYXRlUXVldWVgLCB2aWFcbi8vIGBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nYC5cblxudmFyIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG52YXIgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZTtcbnZhciBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWU7XG5cbntcbiAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IGZhbHNlO1xuICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplVXBkYXRlUXVldWUoZmliZXIpIHtcbiAgdmFyIHF1ZXVlID0ge1xuICAgIGJhc2VTdGF0ZTogZmliZXIubWVtb2l6ZWRTdGF0ZSxcbiAgICBmaXJzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgbGFzdEJhc2VVcGRhdGU6IG51bGwsXG4gICAgc2hhcmVkOiB7XG4gICAgICBwZW5kaW5nOiBudWxsXG4gICAgfSxcbiAgICBlZmZlY3RzOiBudWxsXG4gIH07XG4gIGZpYmVyLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG59XG5mdW5jdGlvbiBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIENsb25lIHRoZSB1cGRhdGUgcXVldWUgZnJvbSBjdXJyZW50LiBVbmxlc3MgaXQncyBhbHJlYWR5IGEgY2xvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgIHZhciBjbG9uZSA9IHtcbiAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSxcbiAgICAgIGxhc3RCYXNlVXBkYXRlOiBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUsXG4gICAgICBzaGFyZWQ6IGN1cnJlbnRRdWV1ZS5zaGFyZWQsXG4gICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgIH07XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjbG9uZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSkge1xuICB2YXIgdXBkYXRlID0ge1xuICAgIGV2ZW50VGltZTogZXZlbnRUaW1lLFxuICAgIGxhbmU6IGxhbmUsXG4gICAgdGFnOiBVcGRhdGVTdGF0ZSxcbiAgICBwYXlsb2FkOiBudWxsLFxuICAgIGNhbGxiYWNrOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbmZ1bmN0aW9uIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSkge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaWJlci51cGRhdGVRdWV1ZTtcblxuICBpZiAodXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICAvLyBPbmx5IG9jY3VycyBpZiB0aGUgZmliZXIgaGFzIGJlZW4gdW5tb3VudGVkLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzaGFyZWRRdWV1ZSA9IHVwZGF0ZVF1ZXVlLnNoYXJlZDtcbiAgdmFyIHBlbmRpbmcgPSBzaGFyZWRRdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHNoYXJlZFF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG5cbiAge1xuICAgIGlmIChjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPT09IHNoYXJlZFF1ZXVlICYmICFkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIChzZXRTdGF0ZSwgcmVwbGFjZVN0YXRlLCBvciBmb3JjZVVwZGF0ZSkgd2FzIHNjaGVkdWxlZCAnICsgJ2Zyb20gaW5zaWRlIGFuIHVwZGF0ZSBmdW5jdGlvbi4gVXBkYXRlIGZ1bmN0aW9ucyBzaG91bGQgYmUgcHVyZSwgJyArICd3aXRoIHplcm8gc2lkZS1lZmZlY3RzLiBDb25zaWRlciB1c2luZyBjb21wb25lbnREaWRVcGRhdGUgb3IgYSAnICsgJ2NhbGxiYWNrLicpO1xuXG4gICAgICBkaWRXYXJuVXBkYXRlSW5zaWRlVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY2FwdHVyZWRVcGRhdGUpIHtcbiAgLy8gQ2FwdHVyZWQgdXBkYXRlcyBhcmUgdXBkYXRlcyB0aGF0IGFyZSB0aHJvd24gYnkgYSBjaGlsZCBkdXJpbmcgdGhlIHJlbmRlclxuICAvLyBwaGFzZS4gVGhleSBzaG91bGQgYmUgZGlzY2FyZGVkIGlmIHRoZSByZW5kZXIgaXMgYWJvcnRlZC4gVGhlcmVmb3JlLFxuICAvLyB3ZSBzaG91bGQgb25seSBwdXQgdGhlbSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSwgbm90IHRoZSBjdXJyZW50IG9uZS5cbiAgdmFyIHF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7IC8vIENoZWNrIGlmIHRoZSB3b3JrLWluLXByb2dyZXNzIHF1ZXVlIGlzIGEgY2xvbmUuXG5cbiAgdmFyIGN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGU7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgIGlmIChxdWV1ZSA9PT0gY3VycmVudFF1ZXVlKSB7XG4gICAgICAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyB0aGUgc2FtZSBhcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlblxuICAgICAgLy8gd2UgYmFpbCBvdXQgb24gYSBwYXJlbnQgZmliZXIgdGhhdCB0aGVuIGNhcHR1cmVzIGFuIGVycm9yIHRocm93biBieVxuICAgICAgLy8gYSBjaGlsZC4gU2luY2Ugd2Ugd2FudCB0byBhcHBlbmQgdGhlIHVwZGF0ZSBvbmx5IHRvIHRoZSB3b3JrLWluXG4gICAgICAvLyAtcHJvZ3Jlc3MgcXVldWUsIHdlIG5lZWQgdG8gY2xvbmUgdGhlIHVwZGF0ZXMuIFdlIHVzdWFsbHkgY2xvbmUgZHVyaW5nXG4gICAgICAvLyBwcm9jZXNzVXBkYXRlUXVldWUsIGJ1dCB0aGF0IGRpZG4ndCBoYXBwZW4gaW4gdGhpcyBjYXNlIGJlY2F1c2Ugd2VcbiAgICAgIC8vIHNraXBwZWQgb3ZlciB0aGUgcGFyZW50IHdoZW4gd2UgYmFpbGVkIG91dC5cbiAgICAgIHZhciBuZXdGaXJzdCA9IG51bGw7XG4gICAgICB2YXIgbmV3TGFzdCA9IG51bGw7XG4gICAgICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgICAgIC8vIExvb3AgdGhyb3VnaCB0aGUgdXBkYXRlcyBhbmQgY2xvbmUgdGhlbS5cbiAgICAgICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgICBkbyB7XG4gICAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGUuZXZlbnRUaW1lLFxuICAgICAgICAgICAgbGFuZTogdXBkYXRlLmxhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjbG9uZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgICAgICBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCk7IC8vIEFwcGVuZCB0aGUgY2FwdHVyZWQgdXBkYXRlIHRoZSBlbmQgb2YgdGhlIGNsb25lZCBsaXN0LlxuXG5cbiAgICAgICAgaWYgKG5ld0xhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0Lm5leHQgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgICAgICBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBubyBiYXNlIHVwZGF0ZXMuXG4gICAgICAgIG5ld0ZpcnN0ID0gbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgfVxuXG4gICAgICBxdWV1ZSA9IHtcbiAgICAgICAgYmFzZVN0YXRlOiBjdXJyZW50UXVldWUuYmFzZVN0YXRlLFxuICAgICAgICBmaXJzdEJhc2VVcGRhdGU6IG5ld0ZpcnN0LFxuICAgICAgICBsYXN0QmFzZVVwZGF0ZTogbmV3TGFzdCxcbiAgICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgICBlZmZlY3RzOiBjdXJyZW50UXVldWUuZWZmZWN0c1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gcXVldWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cblxuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gIH1cblxuICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IGNhcHR1cmVkVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0ZUZyb21VcGRhdGUod29ya0luUHJvZ3Jlc3MsIHF1ZXVlLCB1cGRhdGUsIHByZXZTdGF0ZSwgbmV4dFByb3BzLCBpbnN0YW5jZSkge1xuICBzd2l0Y2ggKHVwZGF0ZS50YWcpIHtcbiAgICBjYXNlIFJlcGxhY2VTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBheWxvYWQgPSB1cGRhdGUucGF5bG9hZDtcblxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBuZXh0U3RhdGUgPSBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXh0U3RhdGU7XG4gICAgICAgIH0gLy8gU3RhdGUgb2JqZWN0XG5cblxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2FwdHVyZVVwZGF0ZTpcbiAgICAgIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgIH1cbiAgICAvLyBJbnRlbnRpb25hbCBmYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBVcGRhdGVTdGF0ZTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG4gICAgICAgIHZhciBwYXJ0aWFsU3RhdGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBfcGF5bG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIC8vIFVwZGF0ZXIgZnVuY3Rpb25cbiAgICAgICAgICB7XG4gICAgICAgICAgICBlbnRlckRpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGFydGlhbFN0YXRlID0gX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgX3BheWxvYWQuY2FsbChpbnN0YW5jZSwgcHJldlN0YXRlLCBuZXh0UHJvcHMpO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGV4aXREaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBQYXJ0aWFsIHN0YXRlIG9iamVjdFxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIE51bGwgYW5kIHVuZGVmaW5lZCBhcmUgdHJlYXRlZCBhcyBuby1vcHMuXG4gICAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgICAgfSAvLyBNZXJnZSB0aGUgcGFydGlhbCBzdGF0ZSBhbmQgdGhlIHByZXZpb3VzIHN0YXRlLlxuXG5cbiAgICAgICAgcmV0dXJuIF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRm9yY2VVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIGhhc0ZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZTtcbiAgICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmV2U3RhdGU7XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgcHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIHtcbiAgICBjdXJyZW50bHlQcm9jZXNzaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQ7XG4gIH1cblxuICB2YXIgZmlyc3RCYXNlVXBkYXRlID0gcXVldWUuZmlyc3RCYXNlVXBkYXRlO1xuICB2YXIgbGFzdEJhc2VVcGRhdGUgPSBxdWV1ZS5sYXN0QmFzZVVwZGF0ZTsgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHBlbmRpbmcgdXBkYXRlcy4gSWYgc28sIHRyYW5zZmVyIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnNoYXJlZC5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7IC8vIFRoZSBwZW5kaW5nIHF1ZXVlIGlzIGNpcmN1bGFyLiBEaXNjb25uZWN0IHRoZSBwb2ludGVyIGJldHdlZW4gZmlyc3RcbiAgICAvLyBhbmQgbGFzdCBzbyB0aGF0IGl0J3Mgbm9uLWNpcmN1bGFyLlxuXG4gICAgdmFyIGxhc3RQZW5kaW5nVXBkYXRlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHZhciBmaXJzdFBlbmRpbmdVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0O1xuICAgIGxhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsOyAvLyBBcHBlbmQgcGVuZGluZyB1cGRhdGVzIHRvIGJhc2UgcXVldWVcblxuICAgIGlmIChsYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgIH1cblxuICAgIGxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7IC8vIElmIHRoZXJlJ3MgYSBjdXJyZW50IHF1ZXVlLCBhbmQgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgYmFzZSBxdWV1ZSwgdGhlblxuICAgIC8vIHdlIG5lZWQgdG8gdHJhbnNmZXIgdGhlIHVwZGF0ZXMgdG8gdGhhdCBxdWV1ZSwgdG9vLiBCZWNhdXNlIHRoZSBiYXNlXG4gICAgLy8gcXVldWUgaXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgd2l0aCBubyBjeWNsZXMsIHdlIGNhbiBhcHBlbmQgdG8gYm90aFxuICAgIC8vIGxpc3RzIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBzdHJ1Y3R1cmFsIHNoYXJpbmcuXG4gICAgLy8gVE9ETzogUGFzcyBgY3VycmVudGAgYXMgYXJndW1lbnRcblxuICAgIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYWx3YXlzIG5vbi1udWxsIG9uIGEgQ2xhc3NDb21wb25lbnQgb3IgSG9zdFJvb3RcbiAgICAgIHZhciBjdXJyZW50UXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICAgICAgdmFyIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9IGN1cnJlbnRRdWV1ZS5sYXN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSAhPT0gbGFzdEJhc2VVcGRhdGUpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudExhc3RCYXNlVXBkYXRlLm5leHQgPSBmaXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGUgPSBsYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gVGhlc2UgdmFsdWVzIG1heSBjaGFuZ2UgYXMgd2UgcHJvY2VzcyB0aGUgcXVldWUuXG5cblxuICBpZiAoZmlyc3RCYXNlVXBkYXRlICE9PSBudWxsKSB7XG4gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBsaXN0IG9mIHVwZGF0ZXMgdG8gY29tcHV0ZSB0aGUgcmVzdWx0LlxuICAgIHZhciBuZXdTdGF0ZSA9IHF1ZXVlLmJhc2VTdGF0ZTsgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmUgcmVuZGVyTGFuZXNcbiAgICAvLyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuICAgIHZhciBuZXdMYW5lcyA9IE5vTGFuZXM7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0xhc3RCYXNlVXBkYXRlID0gbnVsbDtcbiAgICB2YXIgdXBkYXRlID0gZmlyc3RCYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcbiAgICAgIHZhciB1cGRhdGVFdmVudFRpbWUgPSB1cGRhdGUuZXZlbnRUaW1lO1xuXG4gICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgdXBkYXRlTGFuZSkpIHtcbiAgICAgICAgLy8gUHJpb3JpdHkgaXMgaW5zdWZmaWNpZW50LiBTa2lwIHRoaXMgdXBkYXRlLiBJZiB0aGlzIGlzIHRoZSBmaXJzdFxuICAgICAgICAvLyBza2lwcGVkIHVwZGF0ZSwgdGhlIHByZXZpb3VzIHVwZGF0ZS9zdGF0ZSBpcyB0aGUgbmV3IGJhc2VcbiAgICAgICAgLy8gdXBkYXRlL3N0YXRlLlxuICAgICAgICB2YXIgY2xvbmUgPSB7XG4gICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgbGFuZTogdXBkYXRlTGFuZSxcbiAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgY2FsbGJhY2s6IHVwZGF0ZS5jYWxsYmFjayxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0xhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3RCYXNlVXBkYXRlID0gbmV3TGFzdEJhc2VVcGRhdGUgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBjbG9uZTtcbiAgICAgICAgfSAvLyBVcGRhdGUgdGhlIHJlbWFpbmluZyBwcmlvcml0eSBpbiB0aGUgcXVldWUuXG5cblxuICAgICAgICBuZXdMYW5lcyA9IG1lcmdlTGFuZXMobmV3TGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICBldmVudFRpbWU6IHVwZGF0ZUV2ZW50VGltZSxcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICB0YWc6IHVwZGF0ZS50YWcsXG4gICAgICAgICAgICBwYXlsb2FkOiB1cGRhdGUucGF5bG9hZCxcbiAgICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdMYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlLm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIG5ld1N0YXRlID0gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBuZXdTdGF0ZSwgcHJvcHMsIGluc3RhbmNlKTtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gdXBkYXRlLmNhbGxiYWNrO1xuXG4gICAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENhbGxiYWNrO1xuICAgICAgICAgIHZhciBlZmZlY3RzID0gcXVldWUuZWZmZWN0cztcblxuICAgICAgICAgIGlmIChlZmZlY3RzID09PSBudWxsKSB7XG4gICAgICAgICAgICBxdWV1ZS5lZmZlY3RzID0gW3VwZGF0ZV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVmZmVjdHMucHVzaCh1cGRhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcblxuICAgICAgaWYgKHVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICAgICAgICBpZiAocGVuZGluZ1F1ZXVlID09PSBudWxsKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgZnJvbSBpbnNpZGUgYSByZWR1Y2VyLiBBZGQgdGhlIG5ld1xuICAgICAgICAgIC8vIHBlbmRpbmcgdXBkYXRlcyB0byB0aGUgZW5kIG9mIHRoZSBsaXN0IGFuZCBrZWVwIHByb2Nlc3NpbmcuXG4gICAgICAgICAgdmFyIF9sYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTsgLy8gSW50ZW50aW9uYWxseSB1bnNvdW5kLiBQZW5kaW5nIHVwZGF0ZXMgZm9ybSBhIGNpcmN1bGFyIGxpc3QsIGJ1dCB3ZVxuICAgICAgICAgIC8vIHVucmF2ZWwgdGhlbSB3aGVuIHRyYW5zZmVycmluZyB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gICAgICAgICAgdmFyIF9maXJzdFBlbmRpbmdVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICAgICAgICBfbGFzdFBlbmRpbmdVcGRhdGUubmV4dCA9IG51bGw7XG4gICAgICAgICAgdXBkYXRlID0gX2ZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IF9sYXN0UGVuZGluZ1VwZGF0ZTtcbiAgICAgICAgICBxdWV1ZS5zaGFyZWQucGVuZGluZyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlICh0cnVlKTtcblxuICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUuYmFzZVN0YXRlID0gbmV3QmFzZVN0YXRlO1xuICAgIHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZSA9IG5ld0ZpcnN0QmFzZVVwZGF0ZTtcbiAgICBxdWV1ZS5sYXN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlOyAvLyBTZXQgdGhlIHJlbWFpbmluZyBleHBpcmF0aW9uIHRpbWUgdG8gYmUgd2hhdGV2ZXIgaXMgcmVtYWluaW5nIGluIHRoZSBxdWV1ZS5cbiAgICAvLyBUaGlzIHNob3VsZCBiZSBmaW5lIGJlY2F1c2UgdGhlIG9ubHkgdHdvIG90aGVyIHRoaW5ncyB0aGF0IGNvbnRyaWJ1dGUgdG9cbiAgICAvLyBleHBpcmF0aW9uIHRpbWUgYXJlIHByb3BzIGFuZCBjb250ZXh0LiBXZSdyZSBhbHJlYWR5IGluIHRoZSBtaWRkbGUgb2YgdGhlXG4gICAgLy8gYmVnaW4gcGhhc2UgYnkgdGhlIHRpbWUgd2Ugc3RhcnQgcHJvY2Vzc2luZyB0aGUgcXVldWUsIHNvIHdlJ3ZlIGFscmVhZHlcbiAgICAvLyBkZWFsdCB3aXRoIHRoZSBwcm9wcy4gQ29udGV4dCBpbiBjb21wb25lbnRzIHRoYXQgc3BlY2lmeVxuICAgIC8vIHNob3VsZENvbXBvbmVudFVwZGF0ZSBpcyB0cmlja3k7IGJ1dCB3ZSdsbCBoYXZlIHRvIGFjY291bnQgZm9yXG4gICAgLy8gdGhhdCByZWdhcmRsZXNzLlxuXG4gICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyhuZXdMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBuZXdMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGNvbnRleHQpIHtcbiAgaWYgKCEodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgYXJndW1lbnQgcGFzc2VkIGFzIGNhbGxiYWNrLiBFeHBlY3RlZCBhIGZ1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiBcIiArIGNhbGxiYWNrICk7XG4gICAgfVxuICB9XG5cbiAgY2FsbGJhY2suY2FsbChjb250ZXh0KTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIYXNGb3JjZVVwZGF0ZUJlZm9yZVByb2Nlc3NpbmcoKSB7XG4gIGhhc0ZvcmNlVXBkYXRlID0gZmFsc2U7XG59XG5mdW5jdGlvbiBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkge1xuICByZXR1cm4gaGFzRm9yY2VVcGRhdGU7XG59XG5mdW5jdGlvbiBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIGZpbmlzaGVkUXVldWUsIGluc3RhbmNlKSB7XG4gIC8vIENvbW1pdCB0aGUgZWZmZWN0c1xuICB2YXIgZWZmZWN0cyA9IGZpbmlzaGVkUXVldWUuZWZmZWN0cztcbiAgZmluaXNoZWRRdWV1ZS5lZmZlY3RzID0gbnVsbDtcblxuICBpZiAoZWZmZWN0cyAhPT0gbnVsbCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZWZmZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGVmZmVjdCA9IGVmZmVjdHNbaV07XG4gICAgICB2YXIgY2FsbGJhY2sgPSBlZmZlY3QuY2FsbGJhY2s7XG5cbiAgICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgICBlZmZlY3QuY2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsQ2FsbGJhY2soY2FsbGJhY2ssIGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGZha2VJbnRlcm5hbEluc3RhbmNlID0ge307XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7IC8vIFJlYWN0LkNvbXBvbmVudCB1c2VzIGEgc2hhcmVkIGZyb3plbiBvYmplY3QgYnkgZGVmYXVsdC5cbi8vIFdlJ2xsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB3ZSBuZWVkIHRvIGluaXRpYWxpemUgbGVnYWN5IHJlZnMuXG5cbnZhciBlbXB0eVJlZnNPYmplY3QgPSBuZXcgUmVhY3QuQ29tcG9uZW50KCkucmVmcztcbnZhciBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlO1xudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZTtcbnZhciB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uSW52YWxpZENhbGxiYWNrO1xudmFyIGRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlO1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzO1xudmFyIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZTtcblxue1xuICBkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0R2V0U25hcHNob3RCZWZvcmVVcGRhdGVXaXRob3V0RGlkVXBkYXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcyA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlID0gbmV3IFNldCgpO1xuICB2YXIgZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrID0gbmV3IFNldCgpO1xuXG4gIHdhcm5PbkludmFsaWRDYWxsYmFjayA9IGZ1bmN0aW9uIChjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCB8fCB0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gY2FsbGVyTmFtZSArICdfJyArIGNhbGxiYWNrO1xuXG4gICAgaWYgKCFkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suaGFzKGtleSkpIHtcbiAgICAgIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjay5hZGQoa2V5KTtcblxuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9O1xuXG4gIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IGZ1bmN0aW9uICh0eXBlLCBwYXJ0aWFsU3RhdGUpIHtcbiAgICBpZiAocGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpOiBBIHZhbGlkIHN0YXRlIG9iamVjdCAob3IgbnVsbCkgbXVzdCBiZSByZXR1cm5lZC4gJyArICdZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBUaGlzIGlzIHNvIGdyb3NzIGJ1dCBpdCdzIGF0IGxlYXN0IG5vbi1jcml0aWNhbCBhbmQgY2FuIGJlIHJlbW92ZWQgaWZcbiAgLy8gaXQgY2F1c2VzIHByb2JsZW1zLiBUaGlzIGlzIG1lYW50IHRvIGdpdmUgYSBuaWNlciBlcnJvciBtZXNzYWdlIGZvclxuICAvLyBSZWFjdERPTTE1LnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHJlYWN0RE9NMTZDb21wb25lbnQsXG4gIC8vIC4uLikpIHdoaWNoIG90aGVyd2lzZSB0aHJvd3MgYSBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhIGZ1bmN0aW9uXCJcbiAgLy8gZXhjZXB0aW9uLlxuXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZha2VJbnRlcm5hbEluc3RhbmNlLCAnX3Byb2Nlc3NDaGlsZENvbnRleHQnLCB7XG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIl9wcm9jZXNzQ2hpbGRDb250ZXh0IGlzIG5vdCBhdmFpbGFibGUgaW4gUmVhY3QgMTYrLiBUaGlzIGxpa2VseSBtZWFucyB5b3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgYW5kIGFyZSBhdHRlbXB0aW5nIHRvIG5lc3QgYSBSZWFjdCAxNSB0cmVlIGluc2lkZSBhIFJlYWN0IDE2IHRyZWUgdXNpbmcgdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIsIHdoaWNoIGlzbid0IHN1cHBvcnRlZC4gVHJ5IHRvIG1ha2Ugc3VyZSB5b3UgaGF2ZSBvbmx5IG9uZSBjb3B5IG9mIFJlYWN0IChhbmQgaWRlYWxseSwgc3dpdGNoIHRvIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIE9iamVjdC5mcmVlemUoZmFrZUludGVybmFsSW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcGFydGlhbFN0YXRlID0gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcblxuICB7XG4gICAgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlKGN0b3IsIHBhcnRpYWxTdGF0ZSk7XG4gIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gIHZhciBtZW1vaXplZFN0YXRlID0gcGFydGlhbFN0YXRlID09PSBudWxsIHx8IHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkID8gcHJldlN0YXRlIDogX2Fzc2lnbih7fSwgcHJldlN0YXRlLCBwYXJ0aWFsU3RhdGUpO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbWVtb2l6ZWRTdGF0ZTsgLy8gT25jZSB0aGUgdXBkYXRlIHF1ZXVlIGlzIGVtcHR5LCBwZXJzaXN0IHRoZSBkZXJpdmVkIHN0YXRlIG9udG8gdGhlXG4gIC8vIGJhc2Ugc3RhdGUuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gUXVldWUgaXMgYWx3YXlzIG5vbi1udWxsIGZvciBjbGFzc2VzXG4gICAgdmFyIHVwZGF0ZVF1ZXVlID0gd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG4gICAgdXBkYXRlUXVldWUuYmFzZVN0YXRlID0gbWVtb2l6ZWRTdGF0ZTtcbiAgfVxufVxudmFyIGNsYXNzQ29tcG9uZW50VXBkYXRlciA9IHtcbiAgaXNNb3VudGVkOiBpc01vdW50ZWQsXG4gIGVucXVldWVTZXRTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS5wYXlsb2FkID0gcGF5bG9hZDtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ3NldFN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAoaW5zdCwgcGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoaW5zdCk7XG4gICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKGV2ZW50VGltZSwgbGFuZSk7XG4gICAgdXBkYXRlLnRhZyA9IFJlcGxhY2VTdGF0ZTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdyZXBsYWNlU3RhdGUnKTtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIH0sXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKGluc3QsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcblxuICAgIGlmIChjYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB7XG4gICAgICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayhjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAodHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIEludm9rZSB0aGUgZnVuY3Rpb24gYW4gZXh0cmEgdGltZSB0byBoZWxwIGRldGVjdCBzaWRlLWVmZmVjdHMuXG4gICAgICAgICAgaW5zdGFuY2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNob3VsZFVwZGF0ZSA9IGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICAgIHtcbiAgICAgIGlmIChzaG91bGRVcGRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlcnJvcignJXMuc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk6IFJldHVybmVkIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIGEgJyArICdib29sZWFuIHZhbHVlLiBNYWtlIHN1cmUgdG8gcmV0dXJuIHRydWUgb3IgZmFsc2UuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbiAgfVxuXG4gIGlmIChjdG9yLnByb3RvdHlwZSAmJiBjdG9yLnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCkge1xuICAgIHJldHVybiAhc2hhbGxvd0VxdWFsKG9sZFByb3BzLCBuZXdQcm9wcykgfHwgIXNoYWxsb3dFcXVhbChvbGRTdGF0ZSwgbmV3U3RhdGUpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIHtcbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG4gICAgdmFyIHJlbmRlclByZXNlbnQgPSBpbnN0YW5jZS5yZW5kZXI7XG5cbiAgICBpZiAoIXJlbmRlclByZXNlbnQpIHtcbiAgICAgIGlmIChjdG9yLnByb3RvdHlwZSAmJiB0eXBlb2YgY3Rvci5wcm90b3R5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiBkaWQgeW91IGFjY2lkZW50YWxseSByZXR1cm4gYW4gb2JqZWN0IGZyb20gdGhlIGNvbnN0cnVjdG9yPycsIG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IE5vIGByZW5kZXJgIG1ldGhvZCBmb3VuZCBvbiB0aGUgcmV0dXJuZWQgY29tcG9uZW50ICcgKyAnaW5zdGFuY2U6IHlvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gZGVmaW5lIGByZW5kZXJgLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUgJiYgIWluc3RhbmNlLmdldEluaXRpYWxTdGF0ZS5pc1JlYWN0Q2xhc3NBcHByb3ZlZCAmJiAhaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICAgIGVycm9yKCdnZXRJbml0aWFsU3RhdGUgd2FzIGRlZmluZWQgb24gJXMsIGEgcGxhaW4gSmF2YVNjcmlwdCBjbGFzcy4gJyArICdUaGlzIGlzIG9ubHkgc3VwcG9ydGVkIGZvciBjbGFzc2VzIGNyZWF0ZWQgdXNpbmcgUmVhY3QuY3JlYXRlQ2xhc3MuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGRlZmluZSBhIHN0YXRlIHByb3BlcnR5IGluc3RlYWQ/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLmdldERlZmF1bHRQcm9wcyAmJiAhaW5zdGFuY2UuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ1VzZSBhIHN0YXRpYyBwcm9wZXJ0eSB0byBkZWZpbmUgZGVmYXVsdFByb3BzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGluc3RhbmNlLnByb3BUeXBlcykge1xuICAgICAgZXJyb3IoJ3Byb3BUeXBlcyB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIHByb3BUeXBlcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5jb250ZXh0VHlwZSkge1xuICAgICAgZXJyb3IoJ2NvbnRleHRUeXBlIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGUgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGVzKSB7XG4gICAgICAgIGVycm9yKCdjb250ZXh0VHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBjb250ZXh0VHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGN0b3IuY29udGV4dFR5cGUgJiYgY3Rvci5jb250ZXh0VHlwZXMgJiYgIWRpZFdhcm5BYm91dENvbnRleHRUeXBlQW5kQ29udGV4dFR5cGVzLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5hZGQoY3Rvcik7XG5cbiAgICAgICAgZXJyb3IoJyVzIGRlY2xhcmVzIGJvdGggY29udGV4dFR5cGVzIGFuZCBjb250ZXh0VHlwZSBzdGF0aWMgcHJvcGVydGllcy4gJyArICdUaGUgbGVnYWN5IGNvbnRleHRUeXBlcyBwcm9wZXJ0eSB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRTaG91bGRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50U2hvdWxkVXBkYXRlKCkuIERpZCB5b3UgbWVhbiBzaG91bGRDb21wb25lbnRVcGRhdGUoKT8gJyArICdUaGUgbmFtZSBpcyBwaHJhc2VkIGFzIGEgcXVlc3Rpb24gYmVjYXVzZSB0aGUgZnVuY3Rpb24gaXMgJyArICdleHBlY3RlZCB0byByZXR1cm4gYSB2YWx1ZS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgJiYgdHlwZW9mIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkIHNob3VsZENvbXBvbmVudFVwZGF0ZSgpLiAnICsgJ3Nob3VsZENvbXBvbmVudFVwZGF0ZSBzaG91bGQgbm90IGJlIHVzZWQgd2hlbiBleHRlbmRpbmcgUmVhY3QuUHVyZUNvbXBvbmVudC4gJyArICdQbGVhc2UgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdXNlZC4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdBIHB1cmUgY29tcG9uZW50Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVbm1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudERpZFVubW91bnQoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFVubW91bnQoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRSZWNlaXZlUHJvcHMoKS4gQnV0IHRoZXJlIGlzIG5vIHN1Y2ggbGlmZWN5Y2xlIG1ldGhvZC4gJyArICdJZiB5b3UgbWVhbnQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBpbiByZXNwb25zZSB0byBjaGFuZ2luZyBwcm9wcywgJyArICd1c2UgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpLiBJZiB5b3UgbWVhbnQgdG8gZmV0Y2ggZGF0YSBvciAnICsgJ3J1biBzaWRlLWVmZmVjdHMgb3IgbXV0YXRpb25zIGFmdGVyIFJlYWN0IGhhcyB1cGRhdGVkIHRoZSBVSSwgdXNlIGNvbXBvbmVudERpZFVwZGF0ZSgpLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnRXaWxsUmVjaWV2ZVByb3BzKCkuIERpZCB5b3UgbWVhbiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdVTlNBRkVfY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKT8nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzTXV0YXRlZFByb3BzID0gaW5zdGFuY2UucHJvcHMgIT09IG5ld1Byb3BzO1xuXG4gICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSB1bmRlZmluZWQgJiYgaGFzTXV0YXRlZFByb3BzKSB7XG4gICAgICBlcnJvcignJXMoLi4uKTogV2hlbiBjYWxsaW5nIHN1cGVyKCkgaW4gYCVzYCwgbWFrZSBzdXJlIHRvIHBhc3MgJyArIFwidXAgdGhlIHNhbWUgcHJvcHMgdGhhdCB5b3VyIGNvbXBvbmVudCdzIGNvbnN0cnVjdG9yIHdhcyBwYXNzZWQuXCIsIG5hbWUsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5kZWZhdWx0UHJvcHMpIHtcbiAgICAgIGVycm9yKCdTZXR0aW5nIGRlZmF1bHRQcm9wcyBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIGlnbm9yZWQuJyArICcgSW5zdGVhZCwgZGVmaW5lIGRlZmF1bHRQcm9wcyBhcyBhIHN0YXRpYyBwcm9wZXJ0eSBvbiAlcy4nLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgIWRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5oYXMoY3RvcikpIHtcbiAgICAgIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZS5hZGQoY3Rvcik7XG5cbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBzaG91bGQgYmUgdXNlZCB3aXRoIGNvbXBvbmVudERpZFVwZGF0ZSgpLiAnICsgJ1RoaXMgY29tcG9uZW50IGRlZmluZXMgZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBvbmx5LicsIGdldENvbXBvbmVudE5hbWUoY3RvcikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcygpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yKCkgaXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGEgc3RhdGljIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclczogZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSBpcyBkZWZpbmVkIGFzIGEgc3RhdGljIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIHZhciBfc3RhdGUgPSBpbnN0YW5jZS5zdGF0ZTtcblxuICAgIGlmIChfc3RhdGUgJiYgKHR5cGVvZiBfc3RhdGUgIT09ICdvYmplY3QnIHx8IGlzQXJyYXkoX3N0YXRlKSkpIHtcbiAgICAgIGVycm9yKCclcy5zdGF0ZTogbXVzdCBiZSBzZXQgdG8gYW4gb2JqZWN0IG9yIG51bGwnLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3Rvci5jaGlsZENvbnRleHRUeXBlcyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIGVycm9yKCclcy5nZXRDaGlsZENvbnRleHQoKTogY2hpbGRDb250ZXh0VHlwZXMgbXVzdCBiZSBkZWZpbmVkIGluIG9yZGVyIHRvICcgKyAndXNlIGdldENoaWxkQ29udGV4dCgpLicsIG5hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnVwZGF0ZXIgPSBjbGFzc0NvbXBvbmVudFVwZGF0ZXI7XG4gIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBUaGUgaW5zdGFuY2UgbmVlZHMgYWNjZXNzIHRvIHRoZSBmaWJlciBzbyB0aGF0IGl0IGNhbiBzY2hlZHVsZSB1cGRhdGVzXG5cbiAgc2V0KGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcyk7XG5cbiAge1xuICAgIGluc3RhbmNlLl9yZWFjdEludGVybmFsSW5zdGFuY2UgPSBmYWtlSW50ZXJuYWxJbnN0YW5jZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBwcm9wcykge1xuICB2YXIgaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPSBmYWxzZTtcbiAgdmFyIHVubWFza2VkQ29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcbiAgdmFyIGNvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAge1xuICAgIGlmICgnY29udGV4dFR5cGUnIGluIGN0b3IpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gLy8gQWxsb3cgbnVsbCBmb3IgY29uZGl0aW9uYWwgZGVjbGFyYXRpb25cbiAgICAgIGNvbnRleHRUeXBlID09PSBudWxsIHx8IGNvbnRleHRUeXBlICE9PSB1bmRlZmluZWQgJiYgY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0NPTlRFWFRfVFlQRSAmJiBjb250ZXh0VHlwZS5fY29udGV4dCA9PT0gdW5kZWZpbmVkOyAvLyBOb3QgYSA8Q29udGV4dC5Db25zdW1lcj5cblxuICAgICAgaWYgKCFpc1ZhbGlkICYmICFkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuaGFzKGN0b3IpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZS5hZGQoY3Rvcik7XG4gICAgICAgIHZhciBhZGRlbmR1bSA9ICcnO1xuXG4gICAgICAgIGlmIChjb250ZXh0VHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byB1bmRlZmluZWQuICcgKyAnVGhpcyBjYW4gYmUgY2F1c2VkIGJ5IGEgdHlwbyBvciBieSBtaXhpbmcgdXAgbmFtZWQgYW5kIGRlZmF1bHQgaW1wb3J0cy4gJyArICdUaGlzIGNhbiBhbHNvIGhhcHBlbiBkdWUgdG8gYSBjaXJjdWxhciBkZXBlbmRlbmN5LCBzbyAnICsgJ3RyeSBtb3ZpbmcgdGhlIGNyZWF0ZUNvbnRleHQoKSBjYWxsIHRvIGEgc2VwYXJhdGUgZmlsZS4nO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGEgJyArIHR5cGVvZiBjb250ZXh0VHlwZSArICcuJztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LlByb3ZpZGVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZS5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gPENvbnRleHQuQ29uc3VtZXI+XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgdGhlIENvbnRleHQuQ29uc3VtZXIgaW5zdGVhZD8nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNvbnRleHRUeXBlKS5qb2luKCcsICcpICsgJ30uJztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCclcyBkZWZpbmVzIGFuIGludmFsaWQgY29udGV4dFR5cGUuICcgKyAnY29udGV4dFR5cGUgc2hvdWxkIHBvaW50IHRvIHRoZSBDb250ZXh0IG9iamVjdCByZXR1cm5lZCBieSBSZWFjdC5jcmVhdGVDb250ZXh0KCkuJXMnLCBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnLCBhZGRlbmR1bSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBjb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgdmFyIGNvbnRleHRUeXBlcyA9IGN0b3IuY29udGV4dFR5cGVzO1xuICAgIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gY29udGV4dFR5cGVzICE9PSBudWxsICYmIGNvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICAgIGNvbnRleHQgPSBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA/IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCkgOiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH0gLy8gSW5zdGFudGlhdGUgdHdpY2UgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuXG5cbiAge1xuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IG5ldyBjdG9yKHByb3BzLCBjb250ZXh0KTtcbiAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlICE9PSBudWxsICYmIGluc3RhbmNlLnN0YXRlICE9PSB1bmRlZmluZWQgPyBpbnN0YW5jZS5zdGF0ZSA6IG51bGw7XG4gIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nICYmIHN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCdgJXNgIHVzZXMgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYnV0IGl0cyBpbml0aWFsIHN0YXRlIGlzICcgKyAnJXMuIFRoaXMgaXMgbm90IHJlY29tbWVuZGVkLiBJbnN0ZWFkLCBkZWZpbmUgdGhlIGluaXRpYWwgc3RhdGUgYnkgJyArICdhc3NpZ25pbmcgYW4gb2JqZWN0IHRvIGB0aGlzLnN0YXRlYCBpbiB0aGUgY29uc3RydWN0b3Igb2YgYCVzYC4gJyArICdUaGlzIGVuc3VyZXMgdGhhdCBgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzYCBhcmd1bWVudHMgaGF2ZSBhIGNvbnNpc3RlbnQgc2hhcGUuJywgY29tcG9uZW50TmFtZSwgaW5zdGFuY2Uuc3RhdGUgPT09IG51bGwgPyAnbnVsbCcgOiAndW5kZWZpbmVkJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfSAvLyBJZiBuZXcgY29tcG9uZW50IEFQSXMgYXJlIGRlZmluZWQsIFwidW5zYWZlXCIgbGlmZWN5Y2xlcyB3b24ndCBiZSBjYWxsZWQuXG4gICAgLy8gV2FybiBhYm91dCB0aGVzZSBsaWZlY3ljbGVzIGlmIHRoZXkgYXJlIHByZXNlbnQuXG4gICAgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIG1ldGhvZHMgdGhvdWdoLlxuXG5cbiAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGZvdW5kV2lsbE1vdW50TmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9IG51bGw7XG4gICAgICB2YXIgZm91bmRXaWxsVXBkYXRlTmFtZSA9IG51bGw7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudC5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbE1vdW50TmFtZSA9ICdjb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzLl9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgICAgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA9ICdjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSAnY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJztcbiAgICAgIH1cblxuICAgICAgaWYgKGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsIHx8IGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgICB2YXIgbmV3QXBpTmFtZSA9IHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyA/ICdnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKScgOiAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKSc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmhhcyhfY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgICBkaWRXYXJuQWJvdXRMZWdhY3lMaWZlY3ljbGVzQW5kRGVyaXZlZFN0YXRlLmFkZChfY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgICBlcnJvcignVW5zYWZlIGxlZ2FjeSBsaWZlY3ljbGVzIHdpbGwgbm90IGJlIGNhbGxlZCBmb3IgY29tcG9uZW50cyB1c2luZyBuZXcgY29tcG9uZW50IEFQSXMuXFxuXFxuJyArICclcyB1c2VzICVzIGJ1dCBhbHNvIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgbGVnYWN5IGxpZmVjeWNsZXM6JXMlcyVzXFxuXFxuJyArICdUaGUgYWJvdmUgbGlmZWN5Y2xlcyBzaG91bGQgYmUgcmVtb3ZlZC4gTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTpcXG4nICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMnLCBfY29tcG9uZW50TmFtZSwgbmV3QXBpTmFtZSwgZm91bmRXaWxsTW91bnROYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsTW91bnROYW1lIDogJycsIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lIDogJycsIGZvdW5kV2lsbFVwZGF0ZU5hbWUgIT09IG51bGwgPyBcIlxcbiAgXCIgKyBmb3VuZFdpbGxVcGRhdGVOYW1lIDogJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENhY2hlIHVubWFza2VkIGNvbnRleHQgc28gd2UgY2FuIGF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIG5lY2Vzc2FyeS5cbiAgLy8gUmVhY3RGaWJlckNvbnRleHQgdXN1YWxseSB1cGRhdGVzIHRoaXMgY2FjaGUgYnV0IGNhbid0IGZvciBuZXdseS1jcmVhdGVkIGluc3RhbmNlcy5cblxuXG4gIGlmIChpc0xlZ2FjeUNvbnRleHRDb25zdW1lcikge1xuICAgIGNhY2hlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgfVxuXG4gIGlmIChvbGRTdGF0ZSAhPT0gaW5zdGFuY2Uuc3RhdGUpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbE1vdW50KCk6IEFzc2lnbmluZyBkaXJlY3RseSB0byB0aGlzLnN0YXRlIGlzICcgKyBcImRlcHJlY2F0ZWQgKGV4Y2VwdCBpbnNpZGUgYSBjb21wb25lbnQncyBcIiArICdjb25zdHJ1Y3RvcikuIFVzZSBzZXRTdGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ0NvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGNsYXNzQ29tcG9uZW50VXBkYXRlci5lbnF1ZXVlUmVwbGFjZVN0YXRlKGluc3RhbmNlLCBpbnN0YW5jZS5zdGF0ZSwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpIHtcbiAgdmFyIG9sZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG5ld1Byb3BzLCBuZXh0Q29udGV4dCk7XG4gIH1cblxuICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IG9sZFN0YXRlKSB7XG4gICAge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignJXMuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gJyArIFwidGhpcy5zdGF0ZSBpcyBkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59IC8vIEludm9rZXMgdGhlIG1vdW50IGxpZmUtY3ljbGVzIG9uIGEgcHJldmlvdXNseSBuZXZlciByZW5kZXJlZCBpbnN0YW5jZS5cblxuXG5mdW5jdGlvbiBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgY2hlY2tDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgaW5zdGFuY2UucmVmcyA9IGVtcHR5UmVmc09iamVjdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgaW5zdGFuY2UuY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB7XG4gICAgaWYgKGluc3RhbmNlLnN0YXRlID09PSBuZXdQcm9wcykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dERpcmVjdGx5QXNzaWduaW5nUHJvcHNUb1N0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBJdCBpcyBub3QgcmVjb21tZW5kZWQgdG8gYXNzaWduIHByb3BzIGRpcmVjdGx5IHRvIHN0YXRlICcgKyBcImJlY2F1c2UgdXBkYXRlcyB0byBwcm9wcyB3b24ndCBiZSByZWZsZWN0ZWQgaW4gc3RhdGUuIFwiICsgJ0luIG1vc3QgY2FzZXMsIGl0IGlzIGJldHRlciB0byB1c2UgcHJvcHMgZGlyZWN0bHkuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXdQcm9wcywgaW5zdGFuY2UsIHJlbmRlckxhbmVzKTtcbiAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9IC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG5cbiAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgIT09ICdmdW5jdGlvbicgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgY2FsbENvbXBvbmVudFdpbGxNb3VudCh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpOyAvLyBJZiB3ZSBoYWQgYWRkaXRpb25hbCBzdGF0ZSB1cGRhdGVzIGR1cmluZyB0aGlzIGxpZmUtY3ljbGUsIGxldCdzXG4gICAgLy8gcHJvY2VzcyB0aGVtIG5vdy5cblxuICAgIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gICAgaW5zdGFuY2Uuc3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXN1bWVNb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzLCByZW5kZXJMYW5lcykge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIGluc3RhbmNlLnByb3BzID0gb2xkUHJvcHM7XG4gIHZhciBvbGRDb250ZXh0ID0gaW5zdGFuY2UuY29udGV4dDtcbiAgdmFyIGNvbnRleHRUeXBlID0gY3Rvci5jb250ZXh0VHlwZTtcbiAgdmFyIG5leHRDb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgbmV4dENvbnRleHQgPSByZWFkQ29udGV4dChjb250ZXh0VHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIG5leHRDb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgbmV4dExlZ2FjeVVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHM7XG4gIHZhciBoYXNOZXdMaWZlY3ljbGVzID0gdHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbic7IC8vIE5vdGU6IER1cmluZyB0aGVzZSBsaWZlLWN5Y2xlcywgaW5zdGFuY2UucHJvcHMvaW5zdGFuY2Uuc3RhdGUgYXJlIHdoYXRcbiAgLy8gZXZlciB0aGUgcHJldmlvdXNseSBhdHRlbXB0ZWQgdG8gcmVuZGVyIC0gbm90IHRoZSBcImN1cnJlbnRcIi4gSG93ZXZlcixcbiAgLy8gZHVyaW5nIGNvbXBvbmVudERpZFVwZGF0ZSB3ZSBwYXNzIHRoZSBcImN1cnJlbnRcIiBwcm9wcy5cbiAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG5cbiAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH0gLy8gSWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybmVkIGZhbHNlLCB3ZSBzaG91bGQgc3RpbGwgdXBkYXRlIHRoZVxuICAgIC8vIG1lbW9pemVkIHN0YXRlIHRvIGluZGljYXRlIHRoYXQgdGhpcyB3b3JrIGNhbiBiZSByZXVzZWQuXG5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBuZXdQcm9wcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gIH0gLy8gVXBkYXRlIHRoZSBleGlzdGluZyBpbnN0YW5jZSdzIHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgcG9pbnRlcnMgZXZlblxuICAvLyBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZS5cblxuXG4gIGluc3RhbmNlLnByb3BzID0gbmV3UHJvcHM7XG4gIGluc3RhbmNlLnN0YXRlID0gbmV3U3RhdGU7XG4gIGluc3RhbmNlLmNvbnRleHQgPSBuZXh0Q29udGV4dDtcbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn0gLy8gSW52b2tlcyB0aGUgdXBkYXRlIGxpZmUtY3ljbGVzIGFuZCByZXR1cm5zIGZhbHNlIGlmIGl0IHNob3VsZG4ndCByZXJlbmRlci5cblxuXG5mdW5jdGlvbiB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIHVucmVzb2x2ZWRPbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID8gdW5yZXNvbHZlZE9sZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB1bnJlc29sdmVkT2xkUHJvcHMpO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgdW5yZXNvbHZlZE5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IHVucmVzb2x2ZWROZXdQcm9wcyB8fCBvbGRDb250ZXh0ICE9PSBuZXh0Q29udGV4dCkge1xuICAgICAgY2FsbENvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlLCBuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCk7XG4gIHZhciBvbGRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBuZXdTdGF0ZSA9IGluc3RhbmNlLnN0YXRlID0gb2xkU3RhdGU7XG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAodW5yZXNvbHZlZE9sZFByb3BzID09PSB1bnJlc29sdmVkTmV3UHJvcHMgJiYgb2xkU3RhdGUgPT09IG5ld1N0YXRlICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpICYmICFjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkpIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgY3RvciwgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLCBuZXdQcm9wcyk7XG4gICAgbmV3U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB9XG5cbiAgdmFyIHNob3VsZFVwZGF0ZSA9IGNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSB8fCBjaGVja1Nob3VsZENvbXBvbmVudFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgY3Rvciwgb2xkUHJvcHMsIG5ld1Byb3BzLCBvbGRTdGF0ZSwgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcblxuICBpZiAoc2hvdWxkVXBkYXRlKSB7XG4gICAgLy8gSW4gb3JkZXIgdG8gc3VwcG9ydCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMsXG4gICAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cbiAgICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG5ld1Byb3BzLCBuZXdTdGF0ZSwgbmV4dENvbnRleHQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgIH1cbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBwcm9wcy9zdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbnZhciBkaWRXYXJuQWJvdXRNYXBzO1xudmFyIGRpZFdhcm5BYm91dEdlbmVyYXRvcnM7XG52YXIgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmc7XG52YXIgb3duZXJIYXNGdW5jdGlvblR5cGVXYXJuaW5nO1xuXG52YXIgd2FybkZvck1pc3NpbmdLZXkgPSBmdW5jdGlvbiAoY2hpbGQsIHJldHVybkZpYmVyKSB7fTtcblxue1xuICBkaWRXYXJuQWJvdXRNYXBzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEdlbmVyYXRvcnMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xuICAvKipcbiAgICogV2FybiBpZiB0aGVyZSdzIG5vIGtleSBleHBsaWNpdGx5IHNldCBvbiBkeW5hbWljIGFycmF5cyBvZiBjaGlsZHJlbiBvclxuICAgKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAgICogdXBkYXRlcy5cbiAgICovXG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG4gIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZyA9IHt9O1xuXG4gIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge1xuICAgIGlmIChjaGlsZCA9PT0gbnVsbCB8fCB0eXBlb2YgY2hpbGQgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFjaGlsZC5fc3RvcmUgfHwgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCB8fCBjaGlsZC5rZXkgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghKHR5cGVvZiBjaGlsZC5fc3RvcmUgPT09ICdvYmplY3QnKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdCBDb21wb25lbnQgaW4gd2FybkZvck1pc3NpbmdLZXkgc2hvdWxkIGhhdmUgYSBfc3RvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdFYWNoIGNoaWxkIGluIGEgbGlzdCBzaG91bGQgaGF2ZSBhIHVuaXF1ZSAnICsgJ1wia2V5XCIgcHJvcC4gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yICcgKyAnbW9yZSBpbmZvcm1hdGlvbi4nKTtcbiAgfTtcbn1cblxudmFyIGlzQXJyYXkkMSA9IEFycmF5LmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCkge1xuICB2YXIgbWl4ZWRSZWYgPSBlbGVtZW50LnJlZjtcblxuICBpZiAobWl4ZWRSZWYgIT09IG51bGwgJiYgdHlwZW9mIG1peGVkUmVmICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ29iamVjdCcpIHtcbiAgICB7XG4gICAgICAvLyBUT0RPOiBDbGVhbiB0aGlzIHVwIG9uY2Ugd2UgdHVybiBvbiB0aGUgc3RyaW5nIHJlZiB3YXJuaW5nIGZvclxuICAgICAgLy8gZXZlcnlvbmUsIGJlY2F1c2UgdGhlIHN0cmljdCBtb2RlIGNhc2Ugd2lsbCBubyBsb25nZXIgYmUgcmVsZXZhbnRcbiAgICAgIGlmICgocmV0dXJuRmliZXIubW9kZSAmIFN0cmljdE1vZGUgfHwgd2FybkFib3V0U3RyaW5nUmVmcykgJiYgLy8gV2Ugd2FybiBpbiBSZWFjdEVsZW1lbnQuanMgaWYgb3duZXIgYW5kIHNlbGYgYXJlIGVxdWFsIGZvciBzdHJpbmcgcmVmc1xuICAgICAgLy8gYmVjYXVzZSB0aGVzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb25cbiAgICAgIC8vIHVzaW5nIGEgY29kZW1vZC4gVGhlcmVmb3JlLCB3ZSBkb24ndCBoYXZlIHRvIHdhcm4gYWJvdXQgc3RyaW5nIHJlZnMgYWdhaW4uXG4gICAgICAhKGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX3NlbGYgJiYgZWxlbWVudC5fb3duZXIuc3RhdGVOb2RlICE9PSBlbGVtZW50Ll9zZWxmKSkge1xuICAgICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgZXJyb3IoJ0Egc3RyaW5nIHJlZiwgXCIlc1wiLCBoYXMgYmVlbiBmb3VuZCB3aXRoaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1N0cmluZyByZWZzIGFyZSBhIHNvdXJjZSBvZiBwb3RlbnRpYWwgYnVncyBhbmQgc2hvdWxkIGJlIGF2b2lkZWQuICcgKyAnV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgbWl4ZWRSZWYpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQuX293bmVyKSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBpbnN0O1xuXG4gICAgICBpZiAob3duZXIpIHtcbiAgICAgICAgdmFyIG93bmVyRmliZXIgPSBvd25lcjtcblxuICAgICAgICBpZiAoIShvd25lckZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRnVuY3Rpb24gY29tcG9uZW50cyBjYW5ub3QgaGF2ZSBzdHJpbmcgcmVmcy4gV2UgcmVjb21tZW5kIHVzaW5nIHVzZVJlZigpIGluc3RlYWQuIExlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWZcIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc3QgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpbnN0KSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJNaXNzaW5nIG93bmVyIGZvciBzdHJpbmcgcmVmIFwiICsgbWl4ZWRSZWYgKyBcIi4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHJpbmdSZWYgPSAnJyArIG1peGVkUmVmOyAvLyBDaGVjayBpZiBwcmV2aW91cyBzdHJpbmcgcmVmIG1hdGNoZXMgbmV3IHN0cmluZyByZWZcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5yZWYgIT09IG51bGwgJiYgdHlwZW9mIGN1cnJlbnQucmVmID09PSAnZnVuY3Rpb24nICYmIGN1cnJlbnQucmVmLl9zdHJpbmdSZWYgPT09IHN0cmluZ1JlZikge1xuICAgICAgICByZXR1cm4gY3VycmVudC5yZWY7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWYgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlZnMgPSBpbnN0LnJlZnM7XG5cbiAgICAgICAgaWYgKHJlZnMgPT09IGVtcHR5UmVmc09iamVjdCkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSBsYXp5IHBvb2xlZCBmcm96ZW4gb2JqZWN0LCBzbyB3ZSBuZWVkIHRvIGluaXRpYWxpemUuXG4gICAgICAgICAgcmVmcyA9IGluc3QucmVmcyA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZGVsZXRlIHJlZnNbc3RyaW5nUmVmXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZzW3N0cmluZ1JlZl0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVmLl9zdHJpbmdSZWYgPSBzdHJpbmdSZWY7XG4gICAgICByZXR1cm4gcmVmO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISh0eXBlb2YgbWl4ZWRSZWYgPT09ICdzdHJpbmcnKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgcmVmIHRvIGJlIGEgZnVuY3Rpb24sIGEgc3RyaW5nLCBhbiBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlUmVmKCksIG9yIG51bGwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoIWVsZW1lbnQuX293bmVyKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHJlZiB3YXMgc3BlY2lmaWVkIGFzIGEgc3RyaW5nIChcIiArIG1peGVkUmVmICsgXCIpIGJ1dCBubyBvd25lciB3YXMgc2V0LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGZ1bmN0aW9uIGNvbXBvbmVudFxcbjIuIFlvdSBtYXkgYmUgYWRkaW5nIGEgcmVmIHRvIGEgY29tcG9uZW50IHRoYXQgd2FzIG5vdCBjcmVhdGVkIGluc2lkZSBhIGNvbXBvbmVudCdzIHJlbmRlciBtZXRob2RcXG4zLiBZb3UgaGF2ZSBtdWx0aXBsZSBjb3BpZXMgb2YgUmVhY3QgbG9hZGVkXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWZzLW11c3QtaGF2ZS1vd25lciBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1peGVkUmVmO1xufVxuXG5mdW5jdGlvbiB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKSB7XG4gIGlmIChyZXR1cm5GaWJlci50eXBlICE9PSAndGV4dGFyZWEnKSB7XG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuZXdDaGlsZCkgPT09ICdbb2JqZWN0IE9iamVjdF0nID8gJ29iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhuZXdDaGlsZCkuam9pbignLCAnKSArICd9JyA6IG5ld0NoaWxkKSArIFwiKS4gSWYgeW91IG1lYW50IHRvIHJlbmRlciBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4sIHVzZSBhbiBhcnJheSBpbnN0ZWFkLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcikge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRnVuY3Rpb25zIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZC4gVGhpcyBtYXkgaGFwcGVuIGlmICcgKyAneW91IHJldHVybiBhIENvbXBvbmVudCBpbnN0ZWFkIG9mIDxDb21wb25lbnQgLz4gZnJvbSByZW5kZXIuICcgKyAnT3IgbWF5YmUgeW91IG1lYW50IHRvIGNhbGwgdGhpcyBmdW5jdGlvbiByYXRoZXIgdGhhbiByZXR1cm4gaXQuJyk7XG4gIH1cbn0gLy8gV2UgYXZvaWQgaW5saW5pbmcgdGhpcyB0byBhdm9pZCBwb3RlbnRpYWwgZGVvcHRzIGZyb20gdXNpbmcgdHJ5L2NhdGNoLlxuLy8gdG8gYmUgYWJsZSB0byBvcHRpbWl6ZSBlYWNoIHBhdGggaW5kaXZpZHVhbGx5IGJ5IGJyYW5jaGluZyBlYXJseS4gVGhpcyBuZWVkc1xuLy8gYSBjb21waWxlciBvciB3ZSBjYW4gZG8gaXQgbWFudWFsbHkuIEhlbHBlcnMgdGhhdCBkb24ndCBuZWVkIHRoaXMgYnJhbmNoaW5nXG4vLyBsaXZlIG91dHNpZGUgb2YgdGhpcyBmdW5jdGlvbi5cblxuXG5mdW5jdGlvbiBDaGlsZFJlY29uY2lsZXIoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICBmdW5jdGlvbiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGRUb0RlbGV0ZSkge1xuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlbGV0aW9ucyBhcmUgYWRkZWQgaW4gcmV2ZXJzZWQgb3JkZXIgc28gd2UgYWRkIGl0IHRvIHRoZSBmcm9udC5cbiAgICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgcmV0dXJuIGZpYmVyJ3MgZWZmZWN0IGxpc3QgaXMgZW1wdHkgZXhjZXB0IGZvclxuICAgIC8vIGRlbGV0aW9ucywgc28gd2UgY2FuIGp1c3QgYXBwZW5kIHRoZSBkZWxldGlvbiB0byB0aGUgbGlzdC4gVGhlIHJlbWFpbmluZ1xuICAgIC8vIGVmZmVjdHMgYXJlbid0IGFkZGVkIHVudGlsIHRoZSBjb21wbGV0ZSBwaGFzZS4gT25jZSB3ZSBpbXBsZW1lbnRcbiAgICAvLyByZXN1bWluZywgdGhpcyBtYXkgbm90IGJlIHRydWUuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgfVxuXG4gICAgY2hpbGRUb0RlbGV0ZS5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247XG4gIH1cblxuICBmdW5jdGlvbiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFRPRE86IEZvciB0aGUgc2hvdWxkQ2xvbmUgY2FzZSwgdGhpcyBjb3VsZCBiZSBtaWNyby1vcHRpbWl6ZWQgYSBiaXQgYnlcbiAgICAvLyBhc3N1bWluZyB0aGF0IGFmdGVyIHRoZSBmaXJzdCBjaGlsZCB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGV2ZXJ5dGhpbmcuXG5cblxuICAgIHZhciBjaGlsZFRvRGVsZXRlID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGRUb0RlbGV0ZSAhPT0gbnVsbCkge1xuICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpO1xuICAgICAgY2hpbGRUb0RlbGV0ZSA9IGNoaWxkVG9EZWxldGUuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1hcFJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCkge1xuICAgIC8vIEFkZCB0aGUgcmVtYWluaW5nIGNoaWxkcmVuIHRvIGEgdGVtcG9yYXJ5IG1hcCBzbyB0aGF0IHdlIGNhbiBmaW5kIHRoZW0gYnlcbiAgICAvLyBrZXlzIHF1aWNrbHkuIEltcGxpY2l0IChudWxsKSBrZXlzIGdldCBhZGRlZCB0byB0aGlzIHNldCB3aXRoIHRoZWlyIGluZGV4XG4gICAgLy8gaW5zdGVhZC5cbiAgICB2YXIgZXhpc3RpbmdDaGlsZHJlbiA9IG5ldyBNYXAoKTtcbiAgICB2YXIgZXhpc3RpbmdDaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGV4aXN0aW5nQ2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGlmIChleGlzdGluZ0NoaWxkLmtleSAhPT0gbnVsbCkge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmtleSwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGlzdGluZ0NoaWxkcmVuLnNldChleGlzdGluZ0NoaWxkLmluZGV4LCBleGlzdGluZ0NoaWxkKTtcbiAgICAgIH1cblxuICAgICAgZXhpc3RpbmdDaGlsZCA9IGV4aXN0aW5nQ2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3RpbmdDaGlsZHJlbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUZpYmVyKGZpYmVyLCBwZW5kaW5nUHJvcHMpIHtcbiAgICAvLyBXZSBjdXJyZW50bHkgc2V0IHNpYmxpbmcgdG8gbnVsbCBhbmQgaW5kZXggdG8gMCBoZXJlIGJlY2F1c2UgaXQgaXMgZWFzeVxuICAgIC8vIHRvIGZvcmdldCB0byBkbyBiZWZvcmUgcmV0dXJuaW5nIGl0LiBFLmcuIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuXG4gICAgdmFyIGNsb25lID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoZmliZXIsIHBlbmRpbmdQcm9wcyk7XG4gICAgY2xvbmUuaW5kZXggPSAwO1xuICAgIGNsb25lLnNpYmxpbmcgPSBudWxsO1xuICAgIHJldHVybiBjbG9uZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SW5kZXgpIHtcbiAgICBuZXdGaWJlci5pbmRleCA9IG5ld0luZGV4O1xuXG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG5cbiAgICB2YXIgY3VycmVudCA9IG5ld0ZpYmVyLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgb2xkSW5kZXggPSBjdXJyZW50LmluZGV4O1xuXG4gICAgICBpZiAob2xkSW5kZXggPCBsYXN0UGxhY2VkSW5kZXgpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG1vdmUuXG4gICAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpdGVtIGNhbiBzdGF5IGluIHBsYWNlLlxuICAgICAgICByZXR1cm4gb2xkSW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uLlxuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gbGFzdFBsYWNlZEluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHBsYWNlU2luZ2xlQ2hpbGQobmV3RmliZXIpIHtcbiAgICAvLyBUaGlzIGlzIHNpbXBsZXIgZm9yIHRoZSBzaW5nbGUgY2hpbGQgY2FzZS4gV2Ugb25seSBuZWVkIHRvIGRvIGFcbiAgICAvLyBwbGFjZW1lbnQgZm9yIGluc2VydGluZyBuZXcgY2hpbGRyZW4uXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3RmliZXI7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCh0ZXh0Q29udGVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHRleHRDb250ZW50KTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChjdXJyZW50LmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY3VycmVudCwgZWxlbWVudCkgKSkge1xuICAgICAgICAvLyBNb3ZlIGJhc2VkIG9uIGluZGV4XG4gICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIGVsZW1lbnQucHJvcHMpO1xuICAgICAgICBleGlzdGluZy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICB7XG4gICAgICAgICAgZXhpc3RpbmcuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9XG4gICAgfSAvLyBJbnNlcnRcblxuXG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudCwgZWxlbWVudCk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVBvcnRhbChyZXR1cm5GaWJlciwgY3VycmVudCwgcG9ydGFsLCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0UG9ydGFsIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8gIT09IHBvcnRhbC5jb250YWluZXJJbmZvIHx8IGN1cnJlbnQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uICE9PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwocG9ydGFsLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgIGV4aXN0aW5nLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBmcmFnbWVudCwgbGFuZXMsIGtleSkge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBGcmFnbWVudCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZyYWdtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywga2V5KTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBmcmFnbWVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KCcnICsgbmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX2NyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgICAgICAgIF9jcmVhdGVkLnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgbnVsbCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgX2NyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkMiA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZDIucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgICByZXR1cm4gX2NyZWF0ZWQyO1xuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9jcmVhdGVkMyA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgbnVsbCk7XG5cbiAgICAgICAgX2NyZWF0ZWQzLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICByZXR1cm4gX2NyZWF0ZWQzO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVXBkYXRlIHRoZSBmaWJlciBpZiB0aGUga2V5cyBtYXRjaCwgb3RoZXJ3aXNlIHJldHVybiBudWxsLlxuICAgIHZhciBrZXkgPSBvbGRGaWJlciAhPT0gbnVsbCA/IG9sZEZpYmVyLmtleSA6IG51bGw7XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cy4gSWYgdGhlIHByZXZpb3VzIG5vZGUgaXMgaW1wbGljaXRseSBrZXllZFxuICAgICAgLy8gd2UgY2FuIGNvbnRpbnVlIHRvIHJlcGxhY2UgaXQgd2l0aG91dCBhYm9ydGluZyBldmVuIGlmIGl0IGlzIG5vdCBhIHRleHRcbiAgICAgIC8vIG5vZGUuXG4gICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG9sZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBrZXkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICBpZiAoa2V5ICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZCwgbGFuZXMsIG51bGwpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd09uSW52YWxpZE9iamVjdFR5cGUocmV0dXJuRmliZXIsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHdhcm5PbkZ1bmN0aW9uVHlwZShyZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLCBzbyB3ZSBuZWl0aGVyIGhhdmUgdG8gY2hlY2sgdGhlIG9sZCBub3JcbiAgICAgIC8vIG5ldyBub2RlIGZvciB0aGUga2V5LiBJZiBib3RoIGFyZSB0ZXh0IG5vZGVzLCB0aGV5IG1hdGNoLlxuICAgICAgdmFyIG1hdGNoZWRGaWJlciA9IGV4aXN0aW5nQ2hpbGRyZW4uZ2V0KG5ld0lkeCkgfHwgbnVsbDtcbiAgICAgIHJldHVybiB1cGRhdGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgbWF0Y2hlZEZpYmVyLCAnJyArIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW4sIGxhbmVzLCBuZXdDaGlsZC5rZXkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlRWxlbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdDaGlsZC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBuZXdDaGlsZC5rZXkpIHx8IG51bGw7XG5cbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIyLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSB8fCBnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgICB2YXIgX21hdGNoZWRGaWJlcjMgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMywgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBXYXJucyBpZiB0aGVyZSBpcyBhIGR1cGxpY2F0ZSBvciBtaXNzaW5nIGtleVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0JyB8fCBjaGlsZCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ga25vd25LZXlzO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKGNoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHdhcm5Gb3JNaXNzaW5nS2V5KGNoaWxkLCByZXR1cm5GaWJlcik7XG4gICAgICAgICAgdmFyIGtleSA9IGNoaWxkLmtleTtcblxuICAgICAgICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGtub3duS2V5cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAga25vd25LZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAga25vd25LZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFrbm93bktleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yKCdFbmNvdW50ZXJlZCB0d28gY2hpbGRyZW4gd2l0aCB0aGUgc2FtZSBrZXksIGAlc2AuICcgKyAnS2V5cyBzaG91bGQgYmUgdW5pcXVlIHNvIHRoYXQgY29tcG9uZW50cyBtYWludGFpbiB0aGVpciBpZGVudGl0eSAnICsgJ2Fjcm9zcyB1cGRhdGVzLiBOb24tdW5pcXVlIGtleXMgbWF5IGNhdXNlIGNoaWxkcmVuIHRvIGJlICcgKyAnZHVwbGljYXRlZCBhbmQvb3Igb21pdHRlZCDigJQgdGhlIGJlaGF2aW9yIGlzIHVuc3VwcG9ydGVkIGFuZCAnICsgJ2NvdWxkIGNoYW5nZSBpbiBhIGZ1dHVyZSB2ZXJzaW9uLicsIGtleSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25LZXlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5BcnJheShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuLCBsYW5lcykge1xuICAgIC8vIFRoaXMgYWxnb3JpdGhtIGNhbid0IG9wdGltaXplIGJ5IHNlYXJjaGluZyBmcm9tIGJvdGggZW5kcyBzaW5jZSB3ZVxuICAgIC8vIGRvbid0IGhhdmUgYmFja3BvaW50ZXJzIG9uIGZpYmVycy4gSSdtIHRyeWluZyB0byBzZWUgaG93IGZhciB3ZSBjYW4gZ2V0XG4gICAgLy8gd2l0aCB0aGF0IG1vZGVsLiBJZiBpdCBlbmRzIHVwIG5vdCBiZWluZyB3b3J0aCB0aGUgdHJhZGVvZmZzLCB3ZSBjYW5cbiAgICAvLyBhZGQgaXQgbGF0ZXIuXG4gICAgLy8gRXZlbiB3aXRoIGEgdHdvIGVuZGVkIG9wdGltaXphdGlvbiwgd2UnZCB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgY2FzZVxuICAgIC8vIHdoZXJlIHRoZXJlIGFyZSBmZXcgY2hhbmdlcyBhbmQgYnJ1dGUgZm9yY2UgdGhlIGNvbXBhcmlzb24gaW5zdGVhZCBvZlxuICAgIC8vIGdvaW5nIGZvciB0aGUgTWFwLiBJdCdkIGxpa2UgdG8gZXhwbG9yZSBoaXR0aW5nIHRoYXQgcGF0aCBmaXJzdCBpblxuICAgIC8vIGZvcndhcmQtb25seSBtb2RlIGFuZCBvbmx5IGdvIGZvciB0aGUgTWFwIG9uY2Ugd2Ugbm90aWNlIHRoYXQgd2UgbmVlZFxuICAgIC8vIGxvdHMgb2YgbG9vayBhaGVhZC4gVGhpcyBkb2Vzbid0IGhhbmRsZSByZXZlcnNhbCBhcyB3ZWxsIGFzIHR3byBlbmRlZFxuICAgIC8vIHNlYXJjaCBidXQgdGhhdCdzIHVudXN1YWwuIEJlc2lkZXMsIGZvciB0aGUgdHdvIGVuZGVkIG9wdGltaXphdGlvbiB0b1xuICAgIC8vIHdvcmsgb24gSXRlcmFibGVzLCB3ZSdkIG5lZWQgdG8gY29weSB0aGUgd2hvbGUgc2V0LlxuICAgIC8vIEluIHRoaXMgZmlyc3QgaXRlcmF0aW9uLCB3ZSdsbCBqdXN0IGxpdmUgd2l0aCBoaXR0aW5nIHRoZSBiYWQgY2FzZVxuICAgIC8vIChhZGRpbmcgZXZlcnl0aGluZyB0byBhIE1hcCkgaW4gZm9yIGV2ZXJ5IGluc2VydC9tb3ZlLlxuICAgIC8vIElmIHlvdSBjaGFuZ2UgdGhpcyBjb2RlLCBhbHNvIHVwZGF0ZSByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKCkgd2hpY2hcbiAgICAvLyB1c2VzIHRoZSBzYW1lIGFsZ29yaXRobS5cbiAgICB7XG4gICAgICAvLyBGaXJzdCwgdmFsaWRhdGUga2V5cy5cbiAgICAgIHZhciBrbm93bktleXMgPSBudWxsO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5ld0NoaWxkcmVuW2ldO1xuICAgICAgICBrbm93bktleXMgPSB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmIG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIGlmIChvbGRGaWJlci5pbmRleCA+IG5ld0lkeCkge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlcjtcbiAgICAgICAgb2xkRmliZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXIuc2libGluZztcbiAgICAgIH1cblxuICAgICAgdmFyIG5ld0ZpYmVyID0gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKG5ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IFRoaXMgYnJlYWtzIG9uIGVtcHR5IHNsb3RzIGxpa2UgbnVsbCBjaGlsZHJlbi4gVGhhdCdzXG4gICAgICAgIC8vIHVuZm9ydHVuYXRlIGJlY2F1c2UgaXQgdHJpZ2dlcnMgdGhlIHNsb3cgcGF0aCBhbGwgdGhlIHRpbWUuIFdlIG5lZWRcbiAgICAgICAgLy8gYSBiZXR0ZXIgd2F5IHRvIGNvbW11bmljYXRlIHdoZXRoZXIgdGhpcyB3YXMgYSBtaXNzIG9yIG51bGwsXG4gICAgICAgIC8vIGJvb2xlYW4sIHVuZGVmaW5lZCwgZXRjLlxuICAgICAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICBpZiAob2xkRmliZXIgJiYgbmV3RmliZXIuYWx0ZXJuYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgbWF0Y2hlZCB0aGUgc2xvdCwgYnV0IHdlIGRpZG4ndCByZXVzZSB0aGUgZXhpc3RpbmcgZmliZXIsIHNvIHdlXG4gICAgICAgICAgLy8gbmVlZCB0byBkZWxldGUgdGhlIGV4aXN0aW5nIGNoaWxkLlxuICAgICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChuZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIG91dCBvZiB0aGUgbG9vcC4gVGhpcyBvbmx5IGhhcHBlbnMgZm9yIHRoZSBmaXJzdCBydW4uXG4gICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBuZXdGaWJlcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IERlZmVyIHNpYmxpbmdzIGlmIHdlJ3JlIG5vdCBhdCB0aGUgcmlnaHQgaW5kZXggZm9yIHRoaXMgc2xvdC5cbiAgICAgICAgLy8gSS5lLiBpZiB3ZSBoYWQgbnVsbCB2YWx1ZXMgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gZGVmZXIgdGhpc1xuICAgICAgICAvLyBmb3IgZWFjaCBudWxsIHZhbHVlLiBIb3dldmVyLCB3ZSBhbHNvIGRvbid0IHdhbnQgdG8gY2FsbCB1cGRhdGVTbG90XG4gICAgICAgIC8vIHdpdGggdGhlIHByZXZpb3VzIG9uZS5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBuZXdGaWJlcjtcbiAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgIH1cblxuICAgIGlmIChuZXdJZHggPT09IG5ld0NoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgICB2YXIgX25ld0ZpYmVyID0gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgICBpZiAoX25ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlciwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgbmV3SWR4IDwgbmV3Q2hpbGRyZW4ubGVuZ3RoOyBuZXdJZHgrKykge1xuICAgICAgdmFyIF9uZXdGaWJlcjIgPSB1cGRhdGVGcm9tTWFwKGV4aXN0aW5nQ2hpbGRyZW4sIHJldHVybkZpYmVyLCBuZXdJZHgsIG5ld0NoaWxkcmVuW25ld0lkeF0sIGxhbmVzKTtcblxuICAgICAgaWYgKF9uZXdGaWJlcjIgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgICBpZiAoX25ld0ZpYmVyMi5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuZXcgZmliZXIgaXMgYSB3b3JrIGluIHByb2dyZXNzLCBidXQgaWYgdGhlcmUgZXhpc3RzIGFcbiAgICAgICAgICAgIC8vIGN1cnJlbnQsIHRoYXQgbWVhbnMgdGhhdCB3ZSByZXVzZWQgdGhlIGZpYmVyLiBXZSBuZWVkIHRvIGRlbGV0ZVxuICAgICAgICAgICAgLy8gaXQgZnJvbSB0aGUgY2hpbGQgbGlzdCBzbyB0aGF0IHdlIGRvbid0IGFkZCBpdCB0byB0aGUgZGVsZXRpb25cbiAgICAgICAgICAgIC8vIGxpc3QuXG4gICAgICAgICAgICBleGlzdGluZ0NoaWxkcmVuLmRlbGV0ZShfbmV3RmliZXIyLmtleSA9PT0gbnVsbCA/IG5ld0lkeCA6IF9uZXdGaWJlcjIua2V5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjI7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gQW55IGV4aXN0aW5nIGNoaWxkcmVuIHRoYXQgd2VyZW4ndCBjb25zdW1lZCBhYm92ZSB3ZXJlIGRlbGV0ZWQuIFdlIG5lZWRcbiAgICAgIC8vIHRvIGFkZCB0aGVtIHRvIHRoZSBkZWxldGlvbiBsaXN0LlxuICAgICAgZXhpc3RpbmdDaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICByZXR1cm4gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkcmVuSXRlcmFibGUsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbiBhcyByZWNvbmNpbGVDaGlsZHJlbkFycmF5KCksXG4gICAgLy8gYnV0IHVzaW5nIHRoZSBpdGVyYXRvciBpbnN0ZWFkLlxuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgIGlmICghKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBvYmplY3QgaXMgbm90IGFuIGl0ZXJhYmxlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gV2UgZG9uJ3Qgc3VwcG9ydCByZW5kZXJpbmcgR2VuZXJhdG9ycyBiZWNhdXNlIGl0J3MgYSBtdXRhdGlvbi5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEyOTk1XG4gICAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyAkRmxvd0ZpeE1lIEZsb3cgZG9lc24ndCBrbm93IGFib3V0IHRvU3RyaW5nVGFnXG4gICAgICBuZXdDaGlsZHJlbkl0ZXJhYmxlW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdHZW5lcmF0b3InKSB7XG4gICAgICAgIGlmICghZGlkV2FybkFib3V0R2VuZXJhdG9ycykge1xuICAgICAgICAgIGVycm9yKCdVc2luZyBHZW5lcmF0b3JzIGFzIGNoaWxkcmVuIGlzIHVuc3VwcG9ydGVkIGFuZCB3aWxsIGxpa2VseSB5aWVsZCAnICsgJ3VuZXhwZWN0ZWQgcmVzdWx0cyBiZWNhdXNlIGVudW1lcmF0aW5nIGEgZ2VuZXJhdG9yIG11dGF0ZXMgaXQuICcgKyAnWW91IG1heSBjb252ZXJ0IGl0IHRvIGFuIGFycmF5IHdpdGggYEFycmF5LmZyb20oKWAgb3IgdGhlICcgKyAnYFsuLi5zcHJlYWRdYCBvcGVyYXRvciBiZWZvcmUgcmVuZGVyaW5nLiBLZWVwIGluIG1pbmQgJyArICd5b3UgbWlnaHQgbmVlZCB0byBwb2x5ZmlsbCB0aGVzZSBmZWF0dXJlcyBmb3Igb2xkZXIgYnJvd3NlcnMuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gdHJ1ZTtcbiAgICAgIH0gLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG5cblxuICAgICAgaWYgKG5ld0NoaWxkcmVuSXRlcmFibGUuZW50cmllcyA9PT0gaXRlcmF0b3JGbikge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBkaWRXYXJuQWJvdXRNYXBzID0gdHJ1ZTtcbiAgICAgIH0gLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICAvLyBXZSdsbCBnZXQgYSBkaWZmZXJlbnQgaXRlcmF0b3IgbGF0ZXIgZm9yIHRoZSBtYWluIHBhc3MuXG5cblxuICAgICAgdmFyIF9uZXdDaGlsZHJlbiA9IGl0ZXJhdG9yRm4uY2FsbChuZXdDaGlsZHJlbkl0ZXJhYmxlKTtcblxuICAgICAgaWYgKF9uZXdDaGlsZHJlbikge1xuICAgICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgICB2YXIgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgICAgIGZvciAoOyAhX3N0ZXAuZG9uZTsgX3N0ZXAgPSBfbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICAgICAgdmFyIGNoaWxkID0gX3N0ZXAudmFsdWU7XG4gICAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoIShuZXdDaGlsZHJlbiAhPSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJBbiBpdGVyYWJsZSBvYmplY3QgcHJvdmlkZWQgbm8gaXRlcmF0b3IuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzTmV3RmliZXIgPSBudWxsO1xuICAgIHZhciBvbGRGaWJlciA9IGN1cnJlbnRGaXJzdENoaWxkO1xuICAgIHZhciBsYXN0UGxhY2VkSW5kZXggPSAwO1xuICAgIHZhciBuZXdJZHggPSAwO1xuICAgIHZhciBuZXh0T2xkRmliZXIgPSBudWxsO1xuICAgIHZhciBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpO1xuXG4gICAgZm9yICg7IG9sZEZpYmVyICE9PSBudWxsICYmICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAoc3RlcC5kb25lKSB7XG4gICAgICAvLyBXZSd2ZSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIG5ldyBjaGlsZHJlbi4gV2UgY2FuIGRlbGV0ZSB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBvbGRGaWJlcik7XG4gICAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgICB9XG5cbiAgICBpZiAob2xkRmliZXIgPT09IG51bGwpIHtcbiAgICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IG1vcmUgZXhpc3RpbmcgY2hpbGRyZW4gd2UgY2FuIGNob29zZSBhIGZhc3QgcGF0aFxuICAgICAgLy8gc2luY2UgdGhlIHJlc3Qgd2lsbCBhbGwgYmUgaW5zZXJ0aW9ucy5cbiAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICB2YXIgX25ld0ZpYmVyMyA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlcjMgPT09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyMywgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICAgIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBfbmV3RmliZXIzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjM7XG4gICAgICAgIH1cblxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyID0gX25ld0ZpYmVyMztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfSAvLyBBZGQgYWxsIGNoaWxkcmVuIHRvIGEga2V5IG1hcCBmb3IgcXVpY2sgbG9va3Vwcy5cblxuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpOyAvLyBLZWVwIHNjYW5uaW5nIGFuZCB1c2UgdGhlIG1hcCB0byByZXN0b3JlIGRlbGV0ZWQgaXRlbXMgYXMgbW92ZXMuXG5cbiAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgIHZhciBfbmV3RmliZXI0ID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBzdGVwLnZhbHVlLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjQuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyNC5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXI0LmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXI0LCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXI0O1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQsIGxhbmVzKSB7XG4gICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIGNoZWNrIGZvciBrZXlzIG9uIHRleHQgbm9kZXMgc2luY2Ugd2UgZG9uJ3QgaGF2ZSBhXG4gICAgLy8gd2F5IHRvIGRlZmluZSB0aGVtLlxuICAgIGlmIChjdXJyZW50Rmlyc3RDaGlsZCAhPT0gbnVsbCAmJiBjdXJyZW50Rmlyc3RDaGlsZC50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAvLyBXZSBhbHJlYWR5IGhhdmUgYW4gZXhpc3Rpbmcgbm9kZSBzbyBsZXQncyBqdXN0IHVwZGF0ZSBpdCBhbmQgZGVsZXRlXG4gICAgICAvLyB0aGUgcmVzdC5cbiAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZC5zaWJsaW5nKTtcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnRGaXJzdENoaWxkLCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9IC8vIFRoZSBleGlzdGluZyBmaXJzdCBjaGlsZCBpcyBub3QgYSB0ZXh0IG5vZGUgc28gd2UgbmVlZCB0byBjcmVhdGUgb25lXG4gICAgLy8gYW5kIGRlbGV0ZSB0aGUgZXhpc3Rpbmcgb25lcy5cblxuXG4gICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKTtcbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgc3dpdGNoIChjaGlsZC50YWcpIHtcbiAgICAgICAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkLnNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzLmNoaWxkcmVuKTtcbiAgICAgICAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEJsb2NrOlxuXG4gICAgICAgICAgLy8gV2UgaW50ZW50aW9uYWxseSBmYWxsdGhyb3VnaCBoZXJlIGlmIGVuYWJsZUJsb2Nrc0FQSSBpcyBub3Qgb24uXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lZCBuby1mYWxsdGhyb3VnaFxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGNoaWxkLmVsZW1lbnRUeXBlID09PSBlbGVtZW50LnR5cGUgfHwgKCAvLyBLZWVwIHRoaXMgY2hlY2sgaW5saW5lIHNvIGl0IG9ubHkgcnVucyBvbiB0aGUgZmFsc2UgcGF0aDpcbiAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZUZhbWlseUZvckhvdFJlbG9hZGluZyhjaGlsZCwgZWxlbWVudCkgKSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcblxuICAgICAgICAgICAgICAgIHZhciBfZXhpc3RpbmczID0gdXNlRmliZXIoY2hpbGQsIGVsZW1lbnQucHJvcHMpO1xuXG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGNoaWxkLCBlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBfZXhpc3RpbmczLnJldHVybiA9IHJldHVybkZpYmVyO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBfZXhpc3RpbmczLl9kZWJ1Z093bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9leGlzdGluZzM7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBEaWRuJ3QgbWF0Y2guXG5cblxuICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgICBicmVhaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICBpZiAoZWxlbWVudC50eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFKSB7XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnQucHJvcHMuY2hpbGRyZW4sIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzLCBlbGVtZW50LmtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfY3JlYXRlZDQgPSBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgX2NyZWF0ZWQ0LnJlZiA9IGNvZXJjZVJlZihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIGVsZW1lbnQpO1xuICAgICAgX2NyZWF0ZWQ0LnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIF9jcmVhdGVkNDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBwb3J0YWwsIGxhbmVzKSB7XG4gICAgdmFyIGtleSA9IHBvcnRhbC5rZXk7XG4gICAgdmFyIGNoaWxkID0gY3VycmVudEZpcnN0Q2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIC8vIFRPRE86IElmIGtleSA9PT0gbnVsbCBhbmQgY2hpbGQua2V5ID09PSBudWxsLCB0aGVuIHRoaXMgb25seSBhcHBsaWVzIHRvXG4gICAgICAvLyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdC5cbiAgICAgIGlmIChjaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoY2hpbGQudGFnID09PSBIb3N0UG9ydGFsICYmIGNoaWxkLnN0YXRlTm9kZS5jb250YWluZXJJbmZvID09PSBwb3J0YWwuY29udGFpbmVySW5mbyAmJiBjaGlsZC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24gPT09IHBvcnRhbC5pbXBsZW1lbnRhdGlvbikge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgcG9ydGFsLmNoaWxkcmVuIHx8IFtdKTtcbiAgICAgICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgIH1cblxuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH0gLy8gVGhpcyBBUEkgd2lsbCB0YWcgdGhlIGNoaWxkcmVuIHdpdGggdGhlIHNpZGUtZWZmZWN0IG9mIHRoZSByZWNvbmNpbGlhdGlvblxuICAvLyBpdHNlbGYuIFRoZXkgd2lsbCBiZSBhZGRlZCB0byB0aGUgc2lkZS1lZmZlY3QgbGlzdCBhcyB3ZSBwYXNzIHRocm91Z2ggdGhlXG4gIC8vIGNoaWxkcmVuIGFuZCB0aGUgcGFyZW50LlxuXG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRGaWJlcnMocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5vdCByZWN1cnNpdmUuXG4gICAgLy8gSWYgdGhlIHRvcCBsZXZlbCBpdGVtIGlzIGFuIGFycmF5LCB3ZSB0cmVhdCBpdCBhcyBhIHNldCBvZiBjaGlsZHJlbixcbiAgICAvLyBub3QgYXMgYSBmcmFnbWVudC4gTmVzdGVkIGFycmF5cyBvbiB0aGUgb3RoZXIgaGFuZCB3aWxsIGJlIHRyZWF0ZWQgYXNcbiAgICAvLyBmcmFnbWVudCBub2Rlcy4gUmVjdXJzaW9uIGhhcHBlbnMgYXQgdGhlIG5vcm1hbCBmbG93LlxuICAgIC8vIEhhbmRsZSB0b3AgbGV2ZWwgdW5rZXllZCBmcmFnbWVudHMgYXMgaWYgdGhleSB3ZXJlIGFycmF5cy5cbiAgICAvLyBUaGlzIGxlYWRzIHRvIGFuIGFtYmlndWl0eSBiZXR3ZWVuIDw+e1suLi5dfTwvPiBhbmQgPD4uLi48Lz4uXG4gICAgLy8gV2UgdHJlYXQgdGhlIGFtYmlndW91cyBjYXNlcyBhYm92ZSB0aGUgc2FtZS5cbiAgICB2YXIgaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwgJiYgbmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSAmJiBuZXdDaGlsZC5rZXkgPT09IG51bGw7XG5cbiAgICBpZiAoaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgbmV3Q2hpbGQgPSBuZXdDaGlsZC5wcm9wcy5jaGlsZHJlbjtcbiAgICB9IC8vIEhhbmRsZSBvYmplY3QgdHlwZXNcblxuXG4gICAgdmFyIGlzT2JqZWN0ID0gdHlwZW9mIG5ld0NoaWxkID09PSAnb2JqZWN0JyAmJiBuZXdDaGlsZCAhPT0gbnVsbDtcblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgc3dpdGNoIChuZXdDaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpKTtcblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBwbGFjZVNpbmdsZUNoaWxkKHJlY29uY2lsZVNpbmdsZVRleHROb2RlKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgJycgKyBuZXdDaGlsZCwgbGFuZXMpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJheSQxKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChnZXRJdGVyYXRvckZuKG5ld0NoaWxkKSkge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmIChpc09iamVjdCkge1xuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICd1bmRlZmluZWQnICYmICFpc1Vua2V5ZWRUb3BMZXZlbEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIGlzIHVuZGVmaW5lZCwgYW5kIHRoZSByZXR1cm4gZmliZXIgaXMgYSBjb21wb3NpdGVcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhyb3cgYW4gZXJyb3IuIElmIEZpYmVyIHJldHVybiB0eXBlcyBhcmUgZGlzYWJsZWQsXG4gICAgICAvLyB3ZSBhbHJlYWR5IHRocmV3IGFib3ZlLlxuICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBpbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucmVuZGVyLl9pc01vY2tGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgIC8vIFdlIGFsbG93IGF1dG8tbW9ja3MgdG8gcHJvY2VlZCBhcyBpZiB0aGV5J3JlIHJldHVybmluZyBudWxsLlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGZhbGwgdGhyb3VnaCB0byB0aGUgbmV4dCBjYXNlLCB3aGljaCBoYW5kbGVzIGJvdGhcbiAgICAgICAgLy8gZnVuY3Rpb25zIGFuZCBjbGFzc2VzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICBjYXNlIEJsb2NrOlxuICAgICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggKGdldENvbXBvbmVudE5hbWUocmV0dXJuRmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCcpICsgXCIoLi4uKTogTm90aGluZyB3YXMgcmV0dXJuZWQgZnJvbSByZW5kZXIuIFRoaXMgdXN1YWxseSBtZWFucyBhIHJldHVybiBzdGF0ZW1lbnQgaXMgbWlzc2luZy4gT3IsIHRvIHJlbmRlciBub3RoaW5nLCByZXR1cm4gbnVsbC5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gUmVtYWluaW5nIGNhc2VzIGFyZSBhbGwgdHJlYXRlZCBhcyBlbXB0eS5cblxuXG4gICAgcmV0dXJuIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gIH1cblxuICByZXR1cm4gcmVjb25jaWxlQ2hpbGRGaWJlcnM7XG59XG5cbnZhciByZWNvbmNpbGVDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcih0cnVlKTtcbnZhciBtb3VudENoaWxkRmliZXJzID0gQ2hpbGRSZWNvbmNpbGVyKGZhbHNlKTtcbmZ1bmN0aW9uIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKCEoY3VycmVudCA9PT0gbnVsbCB8fCB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9PT0gY3VycmVudC5jaGlsZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZXN1bWluZyB3b3JrIG5vdCB5ZXQgaW1wbGVtZW50ZWQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBuZXdDaGlsZCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHdoaWxlIChjdXJyZW50Q2hpbGQuc2libGluZyAhPT0gbnVsbCkge1xuICAgIGN1cnJlbnRDaGlsZCA9IGN1cnJlbnRDaGlsZC5zaWJsaW5nO1xuICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQuc2libGluZyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRDaGlsZCwgY3VycmVudENoaWxkLnBlbmRpbmdQcm9wcyk7XG4gICAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIH1cblxuICBuZXdDaGlsZC5zaWJsaW5nID0gbnVsbDtcbn0gLy8gUmVzZXQgYSB3b3JrSW5Qcm9ncmVzcyBjaGlsZCBzZXQgdG8gcHJlcGFyZSBpdCBmb3IgYSBzZWNvbmQgcGFzcy5cblxuZnVuY3Rpb24gcmVzZXRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgdmFyIGNoaWxkID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgcmVzZXRXb3JrSW5Qcm9ncmVzcyhjaGlsZCwgbGFuZXMpO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgTk9fQ09OVEVYVCA9IHt9O1xudmFyIGNvbnRleHRTdGFja0N1cnNvciQxID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xudmFyIHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5PX0NPTlRFWFQpO1xuXG5mdW5jdGlvbiByZXF1aXJlZENvbnRleHQoYykge1xuICBpZiAoIShjICE9PSBOT19DT05URVhUKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGhvc3QgY29udGV4dCB0byBleGlzdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjO1xufVxuXG5mdW5jdGlvbiBnZXRSb290SG9zdENvbnRhaW5lcigpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgcmV0dXJuIHJvb3RJbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250YWluZXIoZmliZXIsIG5leHRSb290SW5zdGFuY2UpIHtcbiAgLy8gUHVzaCBjdXJyZW50IHJvb3QgaW5zdGFuY2Ugb250byB0aGUgc3RhY2s7XG4gIC8vIFRoaXMgYWxsb3dzIHVzIHRvIHJlc2V0IHJvb3Qgd2hlbiBwb3J0YWxzIGFyZSBwb3BwZWQuXG4gIHB1c2gocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIG5leHRSb290SW5zdGFuY2UsIGZpYmVyKTsgLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cbiAgcHVzaChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIsIGZpYmVyKTsgLy8gRmluYWxseSwgd2UgbmVlZCB0byBwdXNoIHRoZSBob3N0IGNvbnRleHQgdG8gdGhlIHN0YWNrLlxuICAvLyBIb3dldmVyLCB3ZSBjYW4ndCBqdXN0IGNhbGwgZ2V0Um9vdEhvc3RDb250ZXh0KCkgYW5kIHB1c2ggaXQgYmVjYXVzZVxuICAvLyB3ZSdkIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGVudHJpZXMgb24gdGhlIHN0YWNrIGRlcGVuZGluZyBvblxuICAvLyB3aGV0aGVyIGdldFJvb3RIb3N0Q29udGV4dCgpIHRocm93cyBzb21ld2hlcmUgaW4gcmVuZGVyZXIgY29kZSBvciBub3QuXG4gIC8vIFNvIHdlIHB1c2ggYW4gZW1wdHkgdmFsdWUgZmlyc3QuIFRoaXMgbGV0cyB1cyBzYWZlbHkgdW53aW5kIG9uIGVycm9ycy5cblxuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBOT19DT05URVhULCBmaWJlcik7XG4gIHZhciBuZXh0Um9vdENvbnRleHQgPSBnZXRSb290SG9zdENvbnRleHQobmV4dFJvb3RJbnN0YW5jZSk7IC8vIE5vdyB0aGF0IHdlIGtub3cgdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHRocm93LCByZXBsYWNlIGl0LlxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Um9vdENvbnRleHQsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gcG9wSG9zdENvbnRhaW5lcihmaWJlcikge1xuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIHBvcChyb290SW5zdGFuY2VTdGFja0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0Q29udGV4dCgpIHtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5mdW5jdGlvbiBwdXNoSG9zdENvbnRleHQoZmliZXIpIHtcbiAgdmFyIHJvb3RJbnN0YW5jZSA9IHJlcXVpcmVkQ29udGV4dChyb290SW5zdGFuY2VTdGFja0N1cnNvci5jdXJyZW50KTtcbiAgdmFyIGNvbnRleHQgPSByZXF1aXJlZENvbnRleHQoY29udGV4dFN0YWNrQ3Vyc29yJDEuY3VycmVudCk7XG4gIHZhciBuZXh0Q29udGV4dCA9IGdldENoaWxkSG9zdENvbnRleHQoY29udGV4dCwgZmliZXIudHlwZSk7IC8vIERvbid0IHB1c2ggdGhpcyBGaWJlcidzIGNvbnRleHQgdW5sZXNzIGl0J3MgdW5pcXVlLlxuXG4gIGlmIChjb250ZXh0ID09PSBuZXh0Q29udGV4dCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBUcmFjayB0aGUgY29udGV4dCBhbmQgdGhlIEZpYmVyIHRoYXQgcHJvdmlkZWQgaXQuXG4gIC8vIFRoaXMgZW5hYmxlcyB1cyB0byBwb3Agb25seSBGaWJlcnMgdGhhdCBwcm92aWRlIHVuaXF1ZSBjb250ZXh0cy5cblxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7XG4gIHB1c2goY29udGV4dFN0YWNrQ3Vyc29yJDEsIG5leHRDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIC8vIERvIG5vdCBwb3AgdW5sZXNzIHRoaXMgRmliZXIgcHJvdmlkZWQgdGhlIGN1cnJlbnQgY29udGV4dC5cbiAgLy8gcHVzaEhvc3RDb250ZXh0KCkgb25seSBwdXNoZXMgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG4gIGlmIChjb250ZXh0RmliZXJTdGFja0N1cnNvci5jdXJyZW50ICE9PSBmaWJlcikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHBvcChjb250ZXh0U3RhY2tDdXJzb3IkMSwgZmliZXIpO1xuICBwb3AoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxudmFyIERlZmF1bHRTdXNwZW5zZUNvbnRleHQgPSAwOyAvLyBUaGUgU3VzcGVuc2UgQ29udGV4dCBpcyBzcGxpdCBpbnRvIHR3byBwYXJ0cy4gVGhlIGxvd2VyIGJpdHMgaXNcbi8vIGluaGVyaXRlZCBkZWVwbHkgZG93biB0aGUgc3VidHJlZS4gVGhlIHVwcGVyIGJpdHMgb25seSBhZmZlY3Rcbi8vIHRoaXMgaW1tZWRpYXRlIHN1c3BlbnNlIGJvdW5kYXJ5IGFuZCBnZXRzIHJlc2V0IGVhY2ggbmV3XG4vLyBib3VuZGFyeSBvciBzdXNwZW5zZSBsaXN0LlxuXG52YXIgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgPSAxOyAvLyBTdWJ0cmVlIEZsYWdzOlxuLy8gSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0IGluZGljYXRlcyB0aGF0IG9uZSBvZiBvdXIgcGFyZW50IFN1c3BlbnNlXG4vLyBib3VuZGFyaWVzIGlzIG5vdCBjdXJyZW50bHkgc2hvd2luZyB2aXNpYmxlIG1haW4gY29udGVudC5cbi8vIEVpdGhlciBiZWNhdXNlIGl0IGlzIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIG9yIGlzIG5vdCBtb3VudGVkIGF0IGFsbC5cbi8vIFdlIGNhbiB1c2UgdGhpcyB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVzaXJhYmxlIHRvIHRyaWdnZXIgYSBmYWxsYmFjayBhdFxuLy8gdGhlIHBhcmVudC4gSWYgbm90LCB0aGVuIHdlIG1pZ2h0IG5lZWQgdG8gdHJpZ2dlciB1bmRlc2lyYWJsZSBib3VuZGFyaWVzXG4vLyBhbmQvb3Igc3VzcGVuZCB0aGUgY29tbWl0IHRvIGF2b2lkIGhpZGluZyB0aGUgcGFyZW50IGNvbnRlbnQuXG5cbnZhciBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQgPSAxOyAvLyBTaGFsbG93IEZsYWdzOlxuLy8gRm9yY2VTdXNwZW5zZUZhbGxiYWNrIGNhbiBiZSB1c2VkIGJ5IFN1c3BlbnNlTGlzdCB0byBmb3JjZSBuZXdseSBhZGRlZFxuLy8gaXRlbXMgaW50byB0aGVpciBmYWxsYmFjayBzdGF0ZSBkdXJpbmcgb25lIG9mIHRoZSByZW5kZXIgcGFzc2VzLlxuXG52YXIgRm9yY2VTdXNwZW5zZUZhbGxiYWNrID0gMjtcbnZhciBzdXNwZW5zZVN0YWNrQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKERlZmF1bHRTdXNwZW5zZUNvbnRleHQpO1xuZnVuY3Rpb24gaGFzU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIGZsYWcpIHtcbiAgcmV0dXJuIChwYXJlbnRDb250ZXh0ICYgZmxhZykgIT09IDA7XG59XG5mdW5jdGlvbiBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2s7XG59XG5mdW5jdGlvbiBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHNoYWxsb3dDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0ICYgU3VidHJlZVN1c3BlbnNlQ29udGV4dE1hc2sgfCBzaGFsbG93Q29udGV4dDtcbn1cbmZ1bmN0aW9uIGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCwgc3VidHJlZUNvbnRleHQpIHtcbiAgcmV0dXJuIHBhcmVudENvbnRleHQgfCBzdWJ0cmVlQ29udGV4dDtcbn1cbmZ1bmN0aW9uIHB1c2hTdXNwZW5zZUNvbnRleHQoZmliZXIsIG5ld0NvbnRleHQpIHtcbiAgcHVzaChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBuZXdDb250ZXh0LCBmaWJlcik7XG59XG5mdW5jdGlvbiBwb3BTdXNwZW5zZUNvbnRleHQoZmliZXIpIHtcbiAgcG9wKHN1c3BlbnNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKHdvcmtJblByb2dyZXNzLCBoYXNJbnZpc2libGVQYXJlbnQpIHtcbiAgLy8gSWYgaXQgd2FzIHRoZSBwcmltYXJ5IGNoaWxkcmVuIHRoYXQganVzdCBzdXNwZW5kZWQsIGNhcHR1cmUgYW5kIHJlbmRlciB0aGVcbiAgLy8gZmFsbGJhY2suIE90aGVyd2lzZSwgZG9uJ3QgY2FwdHVyZSBhbmQgYnViYmxlIHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV4dFN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHRTdGF0ZS5kZWh5ZHJhdGVkICE9PSBudWxsKSB7XG4gICAgICAvLyBBIGRlaHlkcmF0ZWQgYm91bmRhcnkgYWx3YXlzIGNhcHR1cmVzLlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wczsgLy8gSW4gb3JkZXIgdG8gY2FwdHVyZSwgdGhlIFN1c3BlbnNlIGNvbXBvbmVudCBtdXN0IGhhdmUgYSBmYWxsYmFjayBwcm9wLlxuXG4gIGlmIChwcm9wcy5mYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFJlZ3VsYXIgYm91bmRhcmllcyBhbHdheXMgY2FwdHVyZS5cblxuXG4gIGlmIChwcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIElmIGl0J3MgYSBib3VuZGFyeSB3ZSBzaG91bGQgYXZvaWQsIHRoZW4gd2UgcHJlZmVyIHRvIGJ1YmJsZSB1cCB0byB0aGVcbiAgLy8gcGFyZW50IGJvdW5kYXJ5IGlmIGl0IGlzIGN1cnJlbnRseSBpbnZpc2libGUuXG5cblxuICBpZiAoaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIElmIHRoZSBwYXJlbnQgaXMgbm90IGFibGUgdG8gaGFuZGxlIGl0LCB3ZSBtdXN0IGhhbmRsZSBpdC5cblxuXG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZmluZEZpcnN0U3VzcGVuZGVkKHJvdykge1xuICB2YXIgbm9kZSA9IHJvdztcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBkZWh5ZHJhdGVkID0gc3RhdGUuZGVoeWRyYXRlZDtcblxuICAgICAgICBpZiAoZGVoeWRyYXRlZCA9PT0gbnVsbCB8fCBpc1N1c3BlbnNlSW5zdGFuY2VQZW5kaW5nKGRlaHlkcmF0ZWQpIHx8IGlzU3VzcGVuc2VJbnN0YW5jZUZhbGxiYWNrKGRlaHlkcmF0ZWQpKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQgJiYgLy8gcmV2ZWFsT3JkZXIgdW5kZWZpbmVkIGNhbid0IGJlIHRydXN0ZWQgYmVjYXVzZSBpdCBkb24ndFxuICAgIC8vIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBpdCBzdXNwZW5kZWQgb3Igbm90LlxuICAgIG5vZGUubWVtb2l6ZWRQcm9wcy5yZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgZGlkU3VzcGVuZCA9IChub2RlLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgIGlmIChkaWRTdXNwZW5kKSB7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm93KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHJvdykge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBOb0ZsYWdzJDEgPVxuLyogICovXG4wOyAvLyBSZXByZXNlbnRzIHdoZXRoZXIgZWZmZWN0IHNob3VsZCBmaXJlLlxuXG52YXIgSGFzRWZmZWN0ID1cbi8qICovXG4xOyAvLyBSZXByZXNlbnRzIHRoZSBwaGFzZSBpbiB3aGljaCB0aGUgZWZmZWN0IChub3QgdGhlIGNsZWFuLXVwKSBmaXJlcy5cblxudmFyIExheW91dCA9XG4vKiAgICAqL1xuMjtcbnZhciBQYXNzaXZlJDEgPVxuLyogICAqL1xuNDtcblxuLy8gVGhpcyBtYXkgaGF2ZSBiZWVuIGFuIGluc2VydGlvbiBvciBhIGh5ZHJhdGlvbi5cblxudmFyIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbnZhciBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gbnVsbDtcbnZhciBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBlbnRlckh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgdmFyIHBhcmVudEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChwYXJlbnRJbnN0YW5jZSk7XG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIGlzSHlkcmF0aW5nID0gdHJ1ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShyZXR1cm5GaWJlciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICBkaWROb3RIeWRyYXRlQ29udGFpbmVySW5zdGFuY2UocmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUluc3RhbmNlKHJldHVybkZpYmVyLnR5cGUsIHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHMsIHJldHVybkZpYmVyLnN0YXRlTm9kZSwgaW5zdGFuY2UpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGNyZWF0ZUZpYmVyRnJvbUhvc3RJbnN0YW5jZUZvckRlbGV0aW9uKCk7XG4gIGNoaWxkVG9EZWxldGUuc3RhdGVOb2RlID0gaW5zdGFuY2U7XG4gIGNoaWxkVG9EZWxldGUucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gIGNoaWxkVG9EZWxldGUuZmxhZ3MgPSBEZWxldGlvbjsgLy8gVGhpcyBtaWdodCBzZWVtIGxpa2UgaXQgYmVsb25ncyBvbiBwcm9ncmVzc2VkRmlyc3REZWxldGlvbi4gSG93ZXZlcixcbiAgLy8gdGhlc2UgY2hpbGRyZW4gYXJlIG5vdCBwYXJ0IG9mIHRoZSByZWNvbmNpbGlhdGlvbiBsaXN0IG9mIGNoaWxkcmVuLlxuICAvLyBFdmVuIGlmIHdlIGFib3J0IGFuZCByZXJlY29uY2lsZSB0aGUgY2hpbGRyZW4sIHRoYXQgd2lsbCB0cnkgdG8gaHlkcmF0ZVxuICAvLyBhZ2FpbiBhbmQgdGhlIG5vZGVzIGFyZSBzdGlsbCBpbiB0aGUgaG9zdCB0cmVlIHNvIHRoZXNlIHdpbGwgYmVcbiAgLy8gcmVjcmVhdGVkLlxuXG4gIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UocmV0dXJuRmliZXIsIGZpYmVyKSB7XG4gIGZpYmVyLmZsYWdzID0gZmliZXIuZmxhZ3MgJiB+SHlkcmF0aW5nIHwgUGxhY2VtZW50O1xuXG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRDb250YWluZXIgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHBhcmVudFR5cGUgPSByZXR1cm5GaWJlci50eXBlO1xuICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgICAgdmFyIF90eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIF9wcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIF90eXBlKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICAgICAgICAgIHZhciBfdGV4dCA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVUZXh0SW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgICAgICBkaWROb3RGaW5kSHlkcmF0YWJsZVN1c3BlbnNlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkge1xuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSBmaWJlci50eXBlO1xuICAgICAgICB2YXIgcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGNhbkh5ZHJhdGVJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHR5cGUpO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgIHZhciB0ZXh0SW5zdGFuY2UgPSBjYW5IeWRyYXRlVGV4dEluc3RhbmNlKG5leHRJbnN0YW5jZSwgdGV4dCk7XG5cbiAgICAgICAgaWYgKHRleHRJbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGZpYmVyLnN0YXRlTm9kZSA9IHRleHRJbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZShmaWJlcikge1xuICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgaWYgKCFuZXh0SW5zdGFuY2UpIHtcbiAgICAvLyBOb3RoaW5nIHRvIGh5ZHJhdGUuIE1ha2UgaXQgYW4gaW5zZXJ0aW9uLlxuICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UgPSBuZXh0SW5zdGFuY2U7XG5cbiAgaWYgKCF0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpKSB7XG4gICAgLy8gSWYgd2UgY2FuJ3QgaHlkcmF0ZSB0aGlzIGluc3RhbmNlIGxldCdzIHRyeSB0aGUgbmV4dCBvbmUuXG4gICAgLy8gV2UgdXNlIHRoaXMgYXMgYSBoZXVyaXN0aWMuIEl0J3MgYmFzZWQgb24gaW50dWl0aW9uIGFuZCBub3QgZGF0YSBzbyBpdFxuICAgIC8vIG1pZ2h0IGJlIGZsYXdlZCBvciB1bm5lY2Vzc2FyeS5cbiAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG5cbiAgICBpZiAoIW5leHRJbnN0YW5jZSB8fCAhdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICAgIGluc2VydE5vbkh5ZHJhdGVkSW5zdGFuY2UoaHlkcmF0aW9uUGFyZW50RmliZXIsIGZpYmVyKTtcbiAgICAgIGlzSHlkcmF0aW5nID0gZmFsc2U7XG4gICAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbWF0Y2hlZCB0aGUgbmV4dCBvbmUsIHdlJ2xsIG5vdyBhc3N1bWUgdGhhdCB0aGUgZmlyc3Qgb25lIHdhc1xuICAgIC8vIHN1cGVyZmx1b3VzIGFuZCB3ZSdsbCBkZWxldGUgaXQuIFNpbmNlIHdlIGNhbid0IGVhZ2VybHkgZGVsZXRlIGl0XG4gICAgLy8gd2UnbGwgaGF2ZSB0byBzY2hlZHVsZSBhIGRlbGV0aW9uLiBUbyBkbyB0aGF0LCB0aGlzIG5vZGUgbmVlZHMgYSBkdW1teVxuICAgIC8vIGZpYmVyIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gICAgZGVsZXRlSHlkcmF0YWJsZUluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaXJzdEF0dGVtcHRlZEluc3RhbmNlKTtcbiAgfVxuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gZmliZXI7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBnZXRGaXJzdEh5ZHJhdGFibGVDaGlsZChuZXh0SW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdEluc3RhbmNlKGZpYmVyLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG5cbiAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdXBkYXRlUGF5bG9hZCA9IGh5ZHJhdGVJbnN0YW5jZShpbnN0YW5jZSwgZmliZXIudHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgZmliZXIpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICBmaWJlci51cGRhdGVRdWV1ZSA9IHVwZGF0ZVBheWxvYWQ7IC8vIElmIHRoZSB1cGRhdGUgcGF5bG9hZCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIGNoYW5nZSBvciBpZiB0aGVyZVxuICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS5cblxuICBpZiAodXBkYXRlUGF5bG9hZCAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciB0ZXh0SW5zdGFuY2UgPSBmaWJlci5zdGF0ZU5vZGU7XG4gIHZhciB0ZXh0Q29udGVudCA9IGZpYmVyLm1lbW9pemVkUHJvcHM7XG4gIHZhciBzaG91bGRVcGRhdGUgPSBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQsIGZpYmVyKTtcblxuICB7XG4gICAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UgaXMgY2FsbGVkIGluIGEgY29udGV4dCB3aGVyZSB0aGVcbiAgICAgIC8vIGh5ZHJhdGlvbiBwYXJlbnQgaXMgdGhlIHBhcmVudCBob3N0IGNvbXBvbmVudCBvZiB0aGlzIGhvc3QgdGV4dC5cbiAgICAgIHZhciByZXR1cm5GaWJlciA9IGh5ZHJhdGlvblBhcmVudEZpYmVyO1xuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICAgIGRpZE5vdE1hdGNoSHlkcmF0ZWRDb250YWluZXJUZXh0SW5zdGFuY2UocGFyZW50Q29udGFpbmVyLCB0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50KTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudFByb3BzID0gcmV0dXJuRmliZXIubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgICAgdmFyIHBhcmVudEluc3RhbmNlID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNob3VsZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gc2tpcFBhc3REZWh5ZHJhdGVkU3VzcGVuc2VJbnN0YW5jZShmaWJlcikge1xuXG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBzdXNwZW5zZVN0YXRlICE9PSBudWxsID8gc3VzcGVuc2VTdGF0ZS5kZWh5ZHJhdGVkIDogbnVsbDtcblxuICBpZiAoIXN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCB0byBoYXZlIGEgaHlkcmF0ZWQgc3VzcGVuc2UgaW5zdGFuY2UuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcikge1xuICB2YXIgcGFyZW50ID0gZmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwgJiYgcGFyZW50LnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBwYXJlbnQudGFnICE9PSBIb3N0Um9vdCAmJiBwYXJlbnQudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IHBhcmVudDtcbn1cblxuZnVuY3Rpb24gcG9wSHlkcmF0aW9uU3RhdGUoZmliZXIpIHtcblxuICBpZiAoZmliZXIgIT09IGh5ZHJhdGlvblBhcmVudEZpYmVyKSB7XG4gICAgLy8gV2UncmUgZGVlcGVyIHRoYW4gdGhlIGN1cnJlbnQgaHlkcmF0aW9uIGNvbnRleHQsIGluc2lkZSBhbiBpbnNlcnRlZFxuICAgIC8vIHRyZWUuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIC8vIElmIHdlJ3JlIG5vdCBjdXJyZW50bHkgaHlkcmF0aW5nIGJ1dCB3ZSdyZSBpbiBhIGh5ZHJhdGlvbiBjb250ZXh0LCB0aGVuXG4gICAgLy8gd2Ugd2VyZSBhbiBpbnNlcnRpb24gYW5kIG5vdyBuZWVkIHRvIHBvcCB1cCByZWVudGVyIGh5ZHJhdGlvbiBvZiBvdXJcbiAgICAvLyBzaWJsaW5ncy5cbiAgICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcbiAgICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBmaWJlci50eXBlOyAvLyBJZiB3ZSBoYXZlIGFueSByZW1haW5pbmcgaHlkcmF0YWJsZSBub2Rlcywgd2UgbmVlZCB0byBkZWxldGUgdGhlbSBub3cuXG4gIC8vIFdlIG9ubHkgZG8gdGhpcyBkZWVwZXIgdGhhbiBoZWFkIGFuZCBib2R5IHNpbmNlIHRoZXkgdGVuZCB0byBoYXZlIHJhbmRvbVxuICAvLyBvdGhlciBub2RlcyBpbiB0aGVtLiBXZSBhbHNvIGlnbm9yZSBjb21wb25lbnRzIHdpdGggcHVyZSB0ZXh0IGNvbnRlbnQgaW5cbiAgLy8gc2lkZSBvZiB0aGVtLlxuICAvLyBUT0RPOiBCZXR0ZXIgaGV1cmlzdGljLlxuXG4gIGlmIChmaWJlci50YWcgIT09IEhvc3RDb21wb25lbnQgfHwgdHlwZSAhPT0gJ2hlYWQnICYmIHR5cGUgIT09ICdib2R5JyAmJiAhc2hvdWxkU2V0VGV4dENvbnRlbnQodHlwZSwgZmliZXIubWVtb2l6ZWRQcm9wcykpIHtcbiAgICB2YXIgbmV4dEluc3RhbmNlID0gbmV4dEh5ZHJhdGFibGVJbnN0YW5jZTtcblxuICAgIHdoaWxlIChuZXh0SW5zdGFuY2UpIHtcbiAgICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShmaWJlciwgbmV4dEluc3RhbmNlKTtcbiAgICAgIG5leHRJbnN0YW5jZSA9IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhuZXh0SW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpO1xuXG4gIGlmIChmaWJlci50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpO1xuICB9IGVsc2Uge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBoeWRyYXRpb25QYXJlbnRGaWJlciA/IGdldE5leHRIeWRyYXRhYmxlU2libGluZyhmaWJlci5zdGF0ZU5vZGUpIDogbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXNldEh5ZHJhdGlvblN0YXRlKCkge1xuXG4gIGh5ZHJhdGlvblBhcmVudEZpYmVyID0gbnVsbDtcbiAgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG4gIGlzSHlkcmF0aW5nID0gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldElzSHlkcmF0aW5nKCkge1xuICByZXR1cm4gaXNIeWRyYXRpbmc7XG59XG5cbi8vIGFuZCBzaG91bGQgYmUgcmVzZXQgYmVmb3JlIHN0YXJ0aW5nIGEgbmV3IHJlbmRlci5cbi8vIFRoaXMgdHJhY2tzIHdoaWNoIG11dGFibGUgc291cmNlcyBuZWVkIHRvIGJlIHJlc2V0IGFmdGVyIGEgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NTb3VyY2VzID0gW107XG52YXIgcmVuZGVyZXJTaWdpbCQxO1xuXG57XG4gIC8vIFVzZWQgdG8gZGV0ZWN0IG11bHRpcGxlIHJlbmRlcmVycyB1c2luZyB0aGUgc2FtZSBtdXRhYmxlIHNvdXJjZS5cbiAgcmVuZGVyZXJTaWdpbCQxID0ge307XG59XG5cbmZ1bmN0aW9uIG1hcmtTb3VyY2VBc0RpcnR5KG11dGFibGVTb3VyY2UpIHtcbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIG11dGFibGVTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzc1NvdXJjZXNbaV07XG5cbiAgICB7XG4gICAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1NvdXJjZXMubGVuZ3RoID0gMDtcbn1cbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICByZXR1cm4gbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pIHtcbiAge1xuICAgIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnkgPSB2ZXJzaW9uO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLnB1c2gobXV0YWJsZVNvdXJjZSk7XG59XG5mdW5jdGlvbiB3YXJuQWJvdXRNdWx0aXBsZVJlbmRlcmVyc0RFVihtdXRhYmxlU291cmNlKSB7XG4gIHtcbiAgICB7XG4gICAgICBpZiAobXV0YWJsZVNvdXJjZS5fY3VycmVudFByaW1hcnlSZW5kZXJlciA9PSBudWxsKSB7XG4gICAgICAgIG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPSByZW5kZXJlclNpZ2lsJDE7XG4gICAgICB9IGVsc2UgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwkMSkge1xuICAgICAgICBlcnJvcignRGV0ZWN0ZWQgbXVsdGlwbGUgcmVuZGVyZXJzIGNvbmN1cnJlbnRseSByZW5kZXJpbmcgdGhlICcgKyAnc2FtZSBtdXRhYmxlIHNvdXJjZS4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIEVhZ2VyIHJlYWRzIHRoZSB2ZXJzaW9uIG9mIGEgbXV0YWJsZSBzb3VyY2UgYW5kIHN0b3JlcyBpdCBvbiB0aGUgcm9vdC5cblxudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyO1xuXG57XG4gIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0TWlzbWF0Y2hlZEhvb2tzRm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG4vLyBUaGVzZSBhcmUgc2V0IHJpZ2h0IGJlZm9yZSBjYWxsaW5nIHRoZSBjb21wb25lbnQuXG52YXIgcmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci4gSSd2ZSBuYW1lZCBpdCBkaWZmZXJlbnRseSB0byBkaXN0aW5ndWlzaCBpdCBmcm9tXG4vLyB0aGUgd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG52YXIgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7IC8vIEhvb2tzIGFyZSBzdG9yZWQgYXMgYSBsaW5rZWQgbGlzdCBvbiB0aGUgZmliZXIncyBtZW1vaXplZFN0YXRlIGZpZWxkLiBUaGVcbi8vIGN1cnJlbnQgaG9vayBsaXN0IGlzIHRoZSBsaXN0IHRoYXQgYmVsb25ncyB0byB0aGUgY3VycmVudCBmaWJlci4gVGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGhvb2sgbGlzdCBpcyBhIG5ldyBsaXN0IHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGVcbi8vIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuXG5cbnZhciBjdXJyZW50SG9vayA9IG51bGw7XG52YXIgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDsgLy8gV2hldGhlciBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBhdCBhbnkgcG9pbnQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIFRoaXNcbi8vIGRvZXMgbm90IGdldCByZXNldCBpZiB3ZSBkbyBhbm90aGVyIHJlbmRlciBwYXNzOyBvbmx5IHdoZW4gd2UncmUgY29tcGxldGVseVxuLy8gZmluaXNoZWQgZXZhbHVhdGluZyB0aGlzIGNvbXBvbmVudC4gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gd2Uga25vd1xuLy8gd2hldGhlciB3ZSBuZWVkIHRvIGNsZWFyIHJlbmRlciBwaGFzZSB1cGRhdGVzIGFmdGVyIGEgdGhyb3cuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7IC8vIFdoZXJlIGFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIG9ubHkgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLiBUaGlzXG4vLyBnZXRzIHJlc2V0IGFmdGVyIGVhY2ggYXR0ZW1wdC5cbi8vIFRPRE86IE1heWJlIHRoZXJlJ3Mgc29tZSB3YXkgdG8gY29uc29saWRhdGUgdGhpcyB3aXRoXG4vLyBgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZWAuIE9yIHdpdGggYG51bWJlck9mUmVSZW5kZXJzYC5cblxudmFyIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xudmFyIFJFX1JFTkRFUl9MSU1JVCA9IDI1OyAvLyBJbiBERVYsIHRoaXMgaXMgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcHJpbWl0aXZlIGhvb2tcblxudmFyIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDsgLy8gSW4gREVWLCB0aGlzIGxpc3QgZW5zdXJlcyB0aGF0IGhvb2tzIGFyZSBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIgYmV0d2VlbiByZW5kZXJzLlxuLy8gVGhlIGxpc3Qgc3RvcmVzIHRoZSBvcmRlciBvZiBob29rcyB1c2VkIGR1cmluZyB0aGUgaW5pdGlhbCByZW5kZXIgKG1vdW50KS5cbi8vIFN1YnNlcXVlbnQgcmVuZGVycyAodXBkYXRlcykgcmVmZXJlbmNlIHRoaXMgbGlzdC5cblxudmFyIGhvb2tUeXBlc0RldiA9IG51bGw7XG52YXIgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gSW4gREVWLCB0aGlzIHRyYWNrcyB3aGV0aGVyIGN1cnJlbnRseSByZW5kZXJpbmcgY29tcG9uZW50IG5lZWRzIHRvIGlnbm9yZVxuLy8gdGhlIGRlcGVuZGVuY2llcyBmb3IgSG9va3MgdGhhdCBuZWVkIHRoZW0gKGUuZy4gdXNlRWZmZWN0IG9yIHVzZU1lbW8pLlxuLy8gV2hlbiB0cnVlLCBzdWNoIEhvb2tzIHdpbGwgYWx3YXlzIGJlIFwicmVtb3VudGVkXCIuIE9ubHkgdXNlZCBkdXJpbmcgaG90IHJlbG9hZC5cblxudmFyIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG5cbmZ1bmN0aW9uIG1vdW50SG9va1R5cGVzRGV2KCkge1xuICB7XG4gICAgdmFyIGhvb2tOYW1lID0gY3VycmVudEhvb2tOYW1lSW5EZXY7XG5cbiAgICBpZiAoaG9va1R5cGVzRGV2ID09PSBudWxsKSB7XG4gICAgICBob29rVHlwZXNEZXYgPSBbaG9va05hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBob29rVHlwZXNEZXYucHVzaChob29rTmFtZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYrKztcblxuICAgICAgaWYgKGhvb2tUeXBlc0Rldltob29rVHlwZXNVcGRhdGVJbmRleERldl0gIT09IGhvb2tOYW1lKSB7XG4gICAgICAgIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGhvb2tOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcykge1xuICB7XG4gICAgaWYgKGRlcHMgIT09IHVuZGVmaW5lZCAmJiBkZXBzICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KGRlcHMpKSB7XG4gICAgICAvLyBWZXJpZnkgZGVwcywgYnV0IG9ubHkgb24gbW91bnQgdG8gYXZvaWQgZXh0cmEgY2hlY2tzLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGVpciB0eXBlIHdvdWxkIGNoYW5nZSBhcyB1c3VhbGx5IHlvdSBkZWZpbmUgdGhlbSBpbmxpbmUuXG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCB0aGF0IGlzIG5vdCBhbiBhcnJheSAoaW5zdGVhZCwgcmVjZWl2ZWQgYCVzYCkuIFdoZW4gJyArICdzcGVjaWZpZWQsIHRoZSBmaW5hbCBhcmd1bWVudCBtdXN0IGJlIGFuIGFycmF5LicsIGN1cnJlbnRIb29rTmFtZUluRGV2LCB0eXBlb2YgZGVwcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbkhvb2tNaXNtYXRjaEluRGV2KGN1cnJlbnRIb29rTmFtZSkge1xuICB7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudHlwZSk7XG5cbiAgICBpZiAoIWRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHRhYmxlID0gJyc7XG4gICAgICAgIHZhciBzZWNvbmRDb2x1bW5TdGFydCA9IDMwO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2OyBpKyspIHtcbiAgICAgICAgICB2YXIgb2xkSG9va05hbWUgPSBob29rVHlwZXNEZXZbaV07XG4gICAgICAgICAgdmFyIG5ld0hvb2tOYW1lID0gaSA9PT0gaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPyBjdXJyZW50SG9va05hbWUgOiBvbGRIb29rTmFtZTtcbiAgICAgICAgICB2YXIgcm93ID0gaSArIDEgKyBcIi4gXCIgKyBvbGRIb29rTmFtZTsgLy8gRXh0cmEgc3BhY2Ugc28gc2Vjb25kIGNvbHVtbiBsaW5lcyB1cFxuICAgICAgICAgIC8vIGxvbCBAIElFIG5vdCBzdXBwb3J0aW5nIFN0cmluZyNyZXBlYXRcblxuICAgICAgICAgIHdoaWxlIChyb3cubGVuZ3RoIDwgc2Vjb25kQ29sdW1uU3RhcnQpIHtcbiAgICAgICAgICAgIHJvdyArPSAnICc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcm93ICs9IG5ld0hvb2tOYW1lICsgJ1xcbic7XG4gICAgICAgICAgdGFibGUgKz0gcm93O1xuICAgICAgICB9XG5cbiAgICAgICAgZXJyb3IoJ1JlYWN0IGhhcyBkZXRlY3RlZCBhIGNoYW5nZSBpbiB0aGUgb3JkZXIgb2YgSG9va3MgY2FsbGVkIGJ5ICVzLiAnICsgJ1RoaXMgd2lsbCBsZWFkIHRvIGJ1Z3MgYW5kIGVycm9ycyBpZiBub3QgZml4ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHJlYWQgdGhlIFJ1bGVzIG9mIEhvb2tzOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3NcXG5cXG4nICsgJyAgIFByZXZpb3VzIHJlbmRlciAgICAgICAgICAgIE5leHQgcmVuZGVyXFxuJyArICcgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nICsgJyVzJyArICcgICBeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cXG4nLCBjb21wb25lbnROYW1lLCB0YWJsZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SW52YWxpZEhvb2tFcnJvcigpIHtcbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpIHtcbiAge1xuICAgIGlmIChpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcykge1xuICAgICAgLy8gT25seSB0cnVlIHdoZW4gdGhpcyBjb21wb25lbnQgaXMgYmVpbmcgaG90IHJlbG9hZGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcmV2RGVwcyA9PT0gbnVsbCkge1xuICAgIHtcbiAgICAgIGVycm9yKCclcyByZWNlaXZlZCBhIGZpbmFsIGFyZ3VtZW50IGR1cmluZyB0aGlzIHJlbmRlciwgYnV0IG5vdCBkdXJpbmcgJyArICd0aGUgcHJldmlvdXMgcmVuZGVyLiBFdmVuIHRob3VnaCB0aGUgZmluYWwgYXJndW1lbnQgaXMgb3B0aW9uYWwsICcgKyAnaXRzIHR5cGUgY2Fubm90IGNoYW5nZSBiZXR3ZWVuIHJlbmRlcnMuJywgY3VycmVudEhvb2tOYW1lSW5EZXYpO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCBib3RoZXIgY29tcGFyaW5nIGxlbmd0aHMgaW4gcHJvZCBiZWNhdXNlIHRoZXNlIGFycmF5cyBzaG91bGQgYmVcbiAgICAvLyBwYXNzZWQgaW5saW5lLlxuICAgIGlmIChuZXh0RGVwcy5sZW5ndGggIT09IHByZXZEZXBzLmxlbmd0aCkge1xuICAgICAgZXJyb3IoJ1RoZSBmaW5hbCBhcmd1bWVudCBwYXNzZWQgdG8gJXMgY2hhbmdlZCBzaXplIGJldHdlZW4gcmVuZGVycy4gVGhlICcgKyAnb3JkZXIgYW5kIHNpemUgb2YgdGhpcyBhcnJheSBtdXN0IHJlbWFpbiBjb25zdGFudC5cXG5cXG4nICsgJ1ByZXZpb3VzOiAlc1xcbicgKyAnSW5jb21pbmc6ICVzJywgY3VycmVudEhvb2tOYW1lSW5EZXYsIFwiW1wiICsgcHJldkRlcHMuam9pbignLCAnKSArIFwiXVwiLCBcIltcIiArIG5leHREZXBzLmpvaW4oJywgJykgKyBcIl1cIik7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcmV2RGVwcy5sZW5ndGggJiYgaSA8IG5leHREZXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKG9iamVjdElzKG5leHREZXBzW2ldLCBwcmV2RGVwc1tpXSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHNlY29uZEFyZywgbmV4dFJlbmRlckxhbmVzKSB7XG4gIHJlbmRlckxhbmVzID0gbmV4dFJlbmRlckxhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAge1xuICAgIGhvb2tUeXBlc0RldiA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcyA6IG51bGw7XG4gICAgaG9va1R5cGVzVXBkYXRlSW5kZXhEZXYgPSAtMTsgLy8gVXNlZCBmb3IgaG90IHJlbG9hZGluZzpcblxuICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnR5cGUgIT09IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7IC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlc2V0XG4gIC8vIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgLy8gd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgLy8gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICAvLyBUT0RPIFdhcm4gaWYgbm8gaG9va3MgYXJlIHVzZWQgYXQgYWxsIGR1cmluZyBtb3VudCwgdGhlbiBzb21lIGFyZSB1c2VkIGR1cmluZyB1cGRhdGUuXG4gIC8vIEN1cnJlbnRseSB3ZSB3aWxsIGlkZW50aWZ5IHRoZSB1cGRhdGUgcmVuZGVyIGFzIGEgbW91bnQgYmVjYXVzZSBtZW1vaXplZFN0YXRlID09PSBudWxsLlxuICAvLyBUaGlzIGlzIHRyaWNreSBiZWNhdXNlIGl0J3MgdmFsaWQgZm9yIGNlcnRhaW4gdHlwZXMgb2YgY29tcG9uZW50cyAoZS5nLiBSZWFjdC5sYXp5KVxuICAvLyBVc2luZyBtZW1vaXplZFN0YXRlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBtb3VudC91cGRhdGUgb25seSB3b3JrcyBpZiBhdCBsZWFzdCBvbmUgc3RhdGVmdWwgaG9vayBpcyB1c2VkLlxuICAvLyBOb24tc3RhdGVmdWwgaG9va3MgKGUuZy4gY29udGV4dCkgZG9uJ3QgZ2V0IGFkZGVkIHRvIG1lbW9pemVkU3RhdGUsXG4gIC8vIHNvIG1lbW9pemVkU3RhdGUgd291bGQgYmUgbnVsbCBkdXJpbmcgdXBkYXRlcyBhbmQgbW91bnRzLlxuXG4gIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICB9IGVsc2UgaWYgKGhvb2tUeXBlc0RldiAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGhhbmRsZXMgYW4gZWRnZSBjYXNlIHdoZXJlIGEgY29tcG9uZW50IGlzIHVwZGF0aW5nLFxuICAgICAgLy8gYnV0IG5vIHN0YXRlZnVsIGhvb2tzIGhhdmUgYmVlbiB1c2VkLlxuICAgICAgLy8gV2Ugd2FudCB0byBtYXRjaCB0aGUgcHJvZHVjdGlvbiBjb2RlIGJlaGF2aW9yICh3aGljaCB3aWxsIHVzZSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50KSxcbiAgICAgIC8vIGJ1dCB3aXRoIHRoZSBleHRyYSBERVYgdmFsaWRhdGlvbiB0byBlbnN1cmUgaG9va3Mgb3JkZXJpbmcgaGFzbid0IGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIGRpc3BhdGNoZXIgZG9lcyB0aGF0LlxuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcbiAgICB9XG4gIH1cblxuICB2YXIgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7IC8vIENoZWNrIGlmIHRoZXJlIHdhcyBhIHJlbmRlciBwaGFzZSB1cGRhdGVcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKSB7XG4gICAgLy8gS2VlcCByZW5kZXJpbmcgaW4gYSBsb29wIGZvciBhcyBsb25nIGFzIHJlbmRlciBwaGFzZSB1cGRhdGVzIGNvbnRpbnVlIHRvXG4gICAgLy8gYmUgc2NoZWR1bGVkLiBVc2UgYSBjb3VudGVyIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXG4gICAgdmFyIG51bWJlck9mUmVSZW5kZXJzID0gMDtcblxuICAgIGRvIHtcbiAgICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xuXG4gICAgICBpZiAoIShudW1iZXJPZlJlUmVuZGVycyA8IFJFX1JFTkRFUl9MSU1JVCkpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlRvbyBtYW55IHJlLXJlbmRlcnMuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIHJlbmRlcnMgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbnVtYmVyT2ZSZVJlbmRlcnMgKz0gMTtcblxuICAgICAge1xuICAgICAgICAvLyBFdmVuIHdoZW4gaG90IHJlbG9hZGluZywgYWxsb3cgZGVwZW5kZW5jaWVzIHRvIHN0YWJpbGl6ZVxuICAgICAgICAvLyBhZnRlciBmaXJzdCByZW5kZXIgdG8gcHJldmVudCBpbmZpbml0ZSByZW5kZXIgcGhhc2UgdXBkYXRlcy5cbiAgICAgICAgaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMgPSBmYWxzZTtcbiAgICAgIH0gLy8gU3RhcnQgb3ZlciBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3RcblxuXG4gICAgICBjdXJyZW50SG9vayA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICB7XG4gICAgICAgIC8vIEFsc28gdmFsaWRhdGUgaG9vayBvcmRlciBmb3IgY2FzY2FkaW5nIHVwZGF0ZXMuXG4gICAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgICB9XG5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA7XG4gICAgICBjaGlsZHJlbiA9IENvbXBvbmVudChwcm9wcywgc2Vjb25kQXJnKTtcbiAgICB9IHdoaWxlIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MpO1xuICB9IC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuXG5cbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBDb250ZXh0T25seURpc3BhdGNoZXI7XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0hvb2tUeXBlcyA9IGhvb2tUeXBlc0RldjtcbiAgfSAvLyBUaGlzIGNoZWNrIHVzZXMgY3VycmVudEhvb2sgc28gdGhhdCBpdCB3b3JrcyB0aGUgc2FtZSBpbiBERVYgYW5kIHByb2QgYnVuZGxlcy5cbiAgLy8gaG9va1R5cGVzRGV2IGNvdWxkIGNhdGNoIG1vcmUgY2FzZXMgKGUuZy4gY29udGV4dCkgYnV0IG9ubHkgaW4gREVWIGJ1bmRsZXMuXG5cblxuICB2YXIgZGlkUmVuZGVyVG9vRmV3SG9va3MgPSBjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBjdXJyZW50SG9vay5uZXh0ICE9PSBudWxsO1xuICByZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsO1xuICBjdXJyZW50SG9vayA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG5cbiAge1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gZmFsc2U7XG5cbiAgaWYgKCEhZGlkUmVuZGVyVG9vRmV3SG9va3MpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBmZXdlciBob29rcyB0aGFuIGV4cGVjdGVkLiBUaGlzIG1heSBiZSBjYXVzZWQgYnkgYW4gYWNjaWRlbnRhbCBlYXJseSByZXR1cm4gc3RhdGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuZnVuY3Rpb24gYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBsYW5lcykge1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzICY9IH4oUGFzc2l2ZSB8IFVwZGF0ZSk7XG4gIGN1cnJlbnQubGFuZXMgPSByZW1vdmVMYW5lcyhjdXJyZW50LmxhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiByZXNldEhvb2tzQWZ0ZXJUaHJvdygpIHtcbiAgLy8gV2UgY2FuIGFzc3VtZSB0aGUgcHJldmlvdXMgZGlzcGF0Y2hlciBpcyBhbHdheXMgdGhpcyBvbmUsIHNpbmNlIHdlIHNldCBpdFxuICAvLyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSByZW5kZXIgcGhhc2UgYW5kIHRoZXJlJ3Mgbm8gcmUtZW50cmFuY3kuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlKSB7XG4gICAgLy8gVGhlcmUgd2VyZSByZW5kZXIgcGhhc2UgdXBkYXRlcy4gVGhlc2UgYXJlIG9ubHkgdmFsaWQgZm9yIHRoaXMgcmVuZGVyXG4gICAgLy8gcGhhc2UsIHdoaWNoIHdlIGFyZSBub3cgYWJvcnRpbmcuIFJlbW92ZSB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZXMgc29cbiAgICAvLyB0aGV5IGRvIG5vdCBwZXJzaXN0IHRvIHRoZSBuZXh0IHJlbmRlci4gRG8gbm90IHJlbW92ZSB1cGRhdGVzIGZyb20gaG9va3NcbiAgICAvLyB0aGF0IHdlcmVuJ3QgcHJvY2Vzc2VkLlxuICAgIC8vXG4gICAgLy8gT25seSByZXNldCB0aGUgdXBkYXRlcyBmcm9tIHRoZSBxdWV1ZSBpZiBpdCBoYXMgYSBjbG9uZS4gSWYgaXQgZG9lc1xuICAgIC8vIG5vdCBoYXZlIGEgY2xvbmUsIHRoYXQgbWVhbnMgaXQgd2Fzbid0IHByb2Nlc3NlZCwgYW5kIHRoZSB1cGRhdGVzIHdlcmVcbiAgICAvLyBzY2hlZHVsZWQgYmVmb3JlIHdlIGVudGVyZWQgdGhlIHJlbmRlciBwaGFzZS5cbiAgICB2YXIgaG9vayA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gICAgICBpZiAocXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGhvb2sgPSBob29rLm5leHQ7XG4gICAgfVxuXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7XG4gICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSBudWxsO1xuICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbiAgfVxuXG4gIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpIHtcbiAgdmFyIGhvb2sgPSB7XG4gICAgbWVtb2l6ZWRTdGF0ZTogbnVsbCxcbiAgICBiYXNlU3RhdGU6IG51bGwsXG4gICAgYmFzZVF1ZXVlOiBudWxsLFxuICAgIHF1ZXVlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTtcblxuICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdFxuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IGhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IGhvb2s7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NIb29rO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBib3RoIGZvciB1cGRhdGVzIGFuZCBmb3IgcmUtcmVuZGVycyB0cmlnZ2VyZWQgYnkgYVxuICAvLyByZW5kZXIgcGhhc2UgdXBkYXRlLiBJdCBhc3N1bWVzIHRoZXJlIGlzIGVpdGhlciBhIGN1cnJlbnQgaG9vayB3ZSBjYW5cbiAgLy8gY2xvbmUsIG9yIGEgd29yay1pbi1wcm9ncmVzcyBob29rIGZyb20gYSBwcmV2aW91cyByZW5kZXIgcGFzcyB0aGF0IHdlIGNhblxuICAvLyB1c2UgYXMgYSBiYXNlLiBXaGVuIHdlIHJlYWNoIHRoZSBlbmQgb2YgdGhlIGJhc2UgbGlzdCwgd2UgbXVzdCBzd2l0Y2ggdG9cbiAgLy8gdGhlIGRpc3BhdGNoZXIgdXNlZCBmb3IgbW91bnRzLlxuICB2YXIgbmV4dEN1cnJlbnRIb29rO1xuXG4gIGlmIChjdXJyZW50SG9vayA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0Q3VycmVudEhvb2sgPSBudWxsO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXh0Q3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICB9XG5cbiAgdmFyIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2s7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG4gIH0gZWxzZSB7XG4gICAgbmV4dFdvcmtJblByb2dyZXNzSG9vayA9IHdvcmtJblByb2dyZXNzSG9vay5uZXh0O1xuICB9XG5cbiAgaWYgKG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgIT09IG51bGwpIHtcbiAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSB3b3JrLWluLXByb2dyZXNzLiBSZXVzZSBpdC5cbiAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgfSBlbHNlIHtcbiAgICAvLyBDbG9uZSBmcm9tIHRoZSBjdXJyZW50IGhvb2suXG4gICAgaWYgKCEobmV4dEN1cnJlbnRIb29rICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJSZW5kZXJlZCBtb3JlIGhvb2tzIHRoYW4gZHVyaW5nIHRoZSBwcmV2aW91cyByZW5kZXIuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjdXJyZW50SG9vayA9IG5leHRDdXJyZW50SG9vaztcbiAgICB2YXIgbmV3SG9vayA9IHtcbiAgICAgIG1lbW9pemVkU3RhdGU6IGN1cnJlbnRIb29rLm1lbW9pemVkU3RhdGUsXG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRIb29rLmJhc2VTdGF0ZSxcbiAgICAgIGJhc2VRdWV1ZTogY3VycmVudEhvb2suYmFzZVF1ZXVlLFxuICAgICAgcXVldWU6IGN1cnJlbnRIb29rLnF1ZXVlLFxuICAgICAgbmV4dDogbnVsbFxuICAgIH07XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NIb29rID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBob29rIGluIHRoZSBsaXN0LlxuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlID0gd29ya0luUHJvZ3Jlc3NIb29rID0gbmV3SG9vaztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQXBwZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG4gICAgICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dCA9IG5ld0hvb2s7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpIHtcbiAgcmV0dXJuIHtcbiAgICBsYXN0RWZmZWN0OiBudWxsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGJhc2ljU3RhdGVSZWR1Y2VyKHN0YXRlLCBhY3Rpb24pIHtcbiAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgcmV0dXJuIHR5cGVvZiBhY3Rpb24gPT09ICdmdW5jdGlvbicgPyBhY3Rpb24oc3RhdGUpIDogYWN0aW9uO1xufVxuXG5mdW5jdGlvbiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBpbml0aWFsU3RhdGU7XG5cbiAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXQoaW5pdGlhbEFyZyk7XG4gIH0gZWxzZSB7XG4gICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbEFyZztcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogcmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyO1xuICB2YXIgY3VycmVudCA9IGN1cnJlbnRIb29rOyAvLyBUaGUgbGFzdCByZWJhc2UgdXBkYXRlIHRoYXQgaXMgTk9UIHBhcnQgb2YgdGhlIGJhc2Ugc3RhdGUuXG5cbiAgdmFyIGJhc2VRdWV1ZSA9IGN1cnJlbnQuYmFzZVF1ZXVlOyAvLyBUaGUgbGFzdCBwZW5kaW5nIHVwZGF0ZSB0aGF0IGhhc24ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG5cbiAgdmFyIHBlbmRpbmdRdWV1ZSA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmdRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgbmV3IHVwZGF0ZXMgdGhhdCBoYXZlbid0IGJlZW4gcHJvY2Vzc2VkIHlldC5cbiAgICAvLyBXZSdsbCBhZGQgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cbiAgICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAvLyBNZXJnZSB0aGUgcGVuZGluZyBxdWV1ZSBhbmQgdGhlIGJhc2UgcXVldWUuXG4gICAgICB2YXIgYmFzZUZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgICB2YXIgcGVuZGluZ0ZpcnN0ID0gcGVuZGluZ1F1ZXVlLm5leHQ7XG4gICAgICBiYXNlUXVldWUubmV4dCA9IHBlbmRpbmdGaXJzdDtcbiAgICAgIHBlbmRpbmdRdWV1ZS5uZXh0ID0gYmFzZUZpcnN0O1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChjdXJyZW50LmJhc2VRdWV1ZSAhPT0gYmFzZVF1ZXVlKSB7XG4gICAgICAgIC8vIEludGVybmFsIGludmFyaWFudCB0aGF0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBmZWFzaWJseSBjb3VsZCBpblxuICAgICAgICAvLyB0aGUgZnV0dXJlIGlmIHdlIGltcGxlbWVudCByZXN1bWluZywgb3Igc29tZSBmb3JtIG9mIHRoYXQuXG4gICAgICAgIGVycm9yKCdJbnRlcm5hbCBlcnJvcjogRXhwZWN0ZWQgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSB0byBiZSBhIGNsb25lLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudC5iYXNlUXVldWUgPSBiYXNlUXVldWUgPSBwZW5kaW5nUXVldWU7XG4gICAgcXVldWUucGVuZGluZyA9IG51bGw7XG4gIH1cblxuICBpZiAoYmFzZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgLy8gV2UgaGF2ZSBhIHF1ZXVlIHRvIHByb2Nlc3MuXG4gICAgdmFyIGZpcnN0ID0gYmFzZVF1ZXVlLm5leHQ7XG4gICAgdmFyIG5ld1N0YXRlID0gY3VycmVudC5iYXNlU3RhdGU7XG4gICAgdmFyIG5ld0Jhc2VTdGF0ZSA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUZpcnN0ID0gbnVsbDtcbiAgICB2YXIgbmV3QmFzZVF1ZXVlTGFzdCA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIHVwZGF0ZUxhbmUgPSB1cGRhdGUubGFuZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgIGVhZ2VyUmVkdWNlcjogdXBkYXRlLmVhZ2VyUmVkdWNlcixcbiAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVGaXJzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QgPSBjbG9uZTtcbiAgICAgICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuICAgICAgICAvLyBUT0RPOiBEb24ndCBuZWVkIHRvIGFjY3VtdWxhdGUgdGhpcy4gSW5zdGVhZCwgd2UgY2FuIHJlbW92ZVxuICAgICAgICAvLyByZW5kZXJMYW5lcyBmcm9tIHRoZSBvcmlnaW5hbCBsYW5lcy5cblxuXG4gICAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMgPSBtZXJnZUxhbmVzKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubGFuZXMsIHVwZGF0ZUxhbmUpO1xuICAgICAgICBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKHVwZGF0ZUxhbmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyB1cGRhdGUgZG9lcyBoYXZlIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9jbG9uZSA9IHtcbiAgICAgICAgICAgIC8vIFRoaXMgdXBkYXRlIGlzIGdvaW5nIHRvIGJlIGNvbW1pdHRlZCBzbyB3ZSBuZXZlciB3YW50IHVuY29tbWl0XG4gICAgICAgICAgICAvLyBpdC4gVXNpbmcgTm9MYW5lIHdvcmtzIGJlY2F1c2UgMCBpcyBhIHN1YnNldCBvZiBhbGwgYml0bWFza3MsIHNvXG4gICAgICAgICAgICAvLyB0aGlzIHdpbGwgbmV2ZXIgYmUgc2tpcHBlZCBieSB0aGUgY2hlY2sgYWJvdmUuXG4gICAgICAgICAgICBsYW5lOiBOb0xhbmUsXG4gICAgICAgICAgICBhY3Rpb246IHVwZGF0ZS5hY3Rpb24sXG4gICAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgICBlYWdlclN0YXRlOiB1cGRhdGUuZWFnZXJTdGF0ZSxcbiAgICAgICAgICAgIG5leHQ6IG51bGxcbiAgICAgICAgICB9O1xuICAgICAgICAgIG5ld0Jhc2VRdWV1ZUxhc3QgPSBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBfY2xvbmU7XG4gICAgICAgIH0gLy8gUHJvY2VzcyB0aGlzIHVwZGF0ZS5cblxuXG4gICAgICAgIGlmICh1cGRhdGUuZWFnZXJSZWR1Y2VyID09PSByZWR1Y2VyKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyB1cGRhdGUgd2FzIHByb2Nlc3NlZCBlYWdlcmx5LCBhbmQgaXRzIHJlZHVjZXIgbWF0Y2hlcyB0aGVcbiAgICAgICAgICAvLyBjdXJyZW50IHJlZHVjZXIsIHdlIGNhbiB1c2UgdGhlIGVhZ2VybHkgY29tcHV0ZWQgc3RhdGUuXG4gICAgICAgICAgbmV3U3RhdGUgPSB1cGRhdGUuZWFnZXJTdGF0ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgYWN0aW9uID0gdXBkYXRlLmFjdGlvbjtcbiAgICAgICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBudWxsICYmIHVwZGF0ZSAhPT0gZmlyc3QpO1xuXG4gICAgaWYgKG5ld0Jhc2VRdWV1ZUxhc3QgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdCYXNlUXVldWVMYXN0Lm5leHQgPSBuZXdCYXNlUXVldWVGaXJzdDtcbiAgICB9IC8vIE1hcmsgdGhhdCB0aGUgZmliZXIgcGVyZm9ybWVkIHdvcmssIGJ1dCBvbmx5IGlmIHRoZSBuZXcgc3RhdGUgaXNcbiAgICAvLyBkaWZmZXJlbnQgZnJvbSB0aGUgY3VycmVudCBzdGF0ZS5cblxuXG4gICAgaWYgKCFvYmplY3RJcyhuZXdTdGF0ZSwgaG9vay5tZW1vaXplZFN0YXRlKSkge1xuICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICBob29rLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBob29rLmJhc2VRdWV1ZSA9IG5ld0Jhc2VRdWV1ZUxhc3Q7XG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlO1xuXG4gIGlmICghKHF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBoYXZlIGEgcXVldWUuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHF1ZXVlLmxhc3RSZW5kZXJlZFJlZHVjZXIgPSByZWR1Y2VyOyAvLyBUaGlzIGlzIGEgcmUtcmVuZGVyLiBBcHBseSB0aGUgbmV3IHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvIHRoZSBwcmV2aW91c1xuICAvLyB3b3JrLWluLXByb2dyZXNzIGhvb2suXG5cbiAgdmFyIGRpc3BhdGNoID0gcXVldWUuZGlzcGF0Y2g7XG4gIHZhciBsYXN0UmVuZGVyUGhhc2VVcGRhdGUgPSBxdWV1ZS5wZW5kaW5nO1xuICB2YXIgbmV3U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKGxhc3RSZW5kZXJQaGFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSBxdWV1ZSBkb2Vzbid0IHBlcnNpc3QgcGFzdCB0aGlzIHJlbmRlciBwYXNzLlxuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgIHZhciBmaXJzdFJlbmRlclBoYXNlVXBkYXRlID0gbGFzdFJlbmRlclBoYXNlVXBkYXRlLm5leHQ7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGU7XG5cbiAgICBkbyB7XG4gICAgICAvLyBQcm9jZXNzIHRoaXMgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gV2UgZG9uJ3QgaGF2ZSB0byBjaGVjayB0aGVcbiAgICAgIC8vIHByaW9yaXR5IGJlY2F1c2UgaXQgd2lsbCBhbHdheXMgYmUgdGhlIHNhbWUgYXMgdGhlIGN1cnJlbnRcbiAgICAgIC8vIHJlbmRlcidzLlxuICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICBuZXdTdGF0ZSA9IHJlZHVjZXIobmV3U3RhdGUsIGFjdGlvbik7XG4gICAgICB1cGRhdGUgPSB1cGRhdGUubmV4dDtcbiAgICB9IHdoaWxlICh1cGRhdGUgIT09IGZpcnN0UmVuZGVyUGhhc2VVcGRhdGUpOyAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7IC8vIERvbid0IHBlcnNpc3QgdGhlIHN0YXRlIGFjY3VtdWxhdGVkIGZyb20gdGhlIHJlbmRlciBwaGFzZSB1cGRhdGVzIHRvXG4gICAgLy8gdGhlIGJhc2Ugc3RhdGUgdW5sZXNzIHRoZSBxdWV1ZSBpcyBlbXB0eS5cbiAgICAvLyBUT0RPOiBOb3Qgc3VyZSBpZiB0aGlzIGlzIHRoZSBkZXNpcmVkIHNlbWFudGljcywgYnV0IGl0J3Mgd2hhdCB3ZVxuICAgIC8vIGRvIGZvciBnRFNGUC4gSSBjYW4ndCByZW1lbWJlciB3aHkuXG5cbiAgICBpZiAoaG9vay5iYXNlUXVldWUgPT09IG51bGwpIHtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgfVxuXG4gICAgcXVldWUubGFzdFJlbmRlcmVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfVxuXG4gIHJldHVybiBbbmV3U3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCkge1xuICB7XG4gICAgd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYoc291cmNlKTtcbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpOyAvLyBJcyBpdCBzYWZlIGZvciB0aGlzIGNvbXBvbmVudCB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcj9cblxuICB2YXIgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGZhbHNlOyAvLyBDaGVjayB0aGUgdmVyc2lvbiBmaXJzdC5cbiAgLy8gSWYgdGhpcyByZW5kZXIgaGFzIGFscmVhZHkgYmVlbiBzdGFydGVkIHdpdGggYSBzcGVjaWZpYyB2ZXJzaW9uLFxuICAvLyB3ZSBjYW4gdXNlIGl0IGFsb25lIHRvIGRldGVybWluZSBpZiB3ZSBjYW4gc2FmZWx5IHJlYWQgZnJvbSB0aGUgc291cmNlLlxuXG4gIHZhciBjdXJyZW50UmVuZGVyVmVyc2lvbiA9IGdldFdvcmtJblByb2dyZXNzVmVyc2lvbihzb3VyY2UpO1xuXG4gIGlmIChjdXJyZW50UmVuZGVyVmVyc2lvbiAhPT0gbnVsbCkge1xuICAgIC8vIEl0J3Mgc2FmZSB0byByZWFkIGlmIHRoZSBzdG9yZSBoYXNuJ3QgYmVlbiBtdXRhdGVkIHNpbmNlIHRoZSBsYXN0IHRpbWVcbiAgICAvLyB3ZSByZWFkIHNvbWV0aGluZy5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gY3VycmVudFJlbmRlclZlcnNpb24gPT09IHZlcnNpb247XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgdGhlcmUncyBubyB2ZXJzaW9uLCB0aGVuIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgd2UndmUgcmVhZCBmcm9tIHRoZVxuICAgIC8vIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHBhc3MsIHNvIHdlIG5lZWQgdG8gZG8gYSBiaXQgbW9yZSB3b3JrLlxuICAgIC8vIFdoYXQgd2UgbmVlZCB0byBkZXRlcm1pbmUgaXMgaWYgdGhlcmUgYXJlIGFueSBob29rcyB0aGF0IGFscmVhZHlcbiAgICAvLyBzdWJzY3JpYmVkIHRvIHRoZSBzb3VyY2UsIGFuZCBpZiBzbywgd2hldGhlciB0aGVyZSBhcmUgYW55IHBlbmRpbmdcbiAgICAvLyBtdXRhdGlvbnMgdGhhdCBoYXZlbid0IGJlZW4gc3luY2hyb25pemVkIHlldC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlIGFyZSBubyBwZW5kaW5nIG11dGF0aW9ucywgdGhlbiBgcm9vdC5tdXRhYmxlUmVhZExhbmVzYCB3aWxsIGJlXG4gICAgLy8gZW1wdHksIGFuZCB3ZSBrbm93IHdlIGNhbiBzYWZlbHkgcmVhZC5cbiAgICAvL1xuICAgIC8vIElmIHRoZXJlICphcmUqIHBlbmRpbmcgbXV0YXRpb25zLCB3ZSBtYXkgc3RpbGwgYmUgYWJsZSB0byBzYWZlbHkgcmVhZFxuICAgIC8vIGlmIHRoZSBjdXJyZW50bHkgcmVuZGVyaW5nIGxhbmVzIGFyZSBpbmNsdXNpdmUgb2YgdGhlIHBlbmRpbmcgbXV0YXRpb25cbiAgICAvLyBsYW5lcywgc2luY2UgdGhhdCBndWFyYW50ZWVzIHRoYXQgdGhlIHZhbHVlIHdlJ3JlIGFib3V0IHRvIHJlYWQgZnJvbVxuICAgIC8vIHRoZSBzb3VyY2UgaXMgY29uc2lzdGVudCB3aXRoIHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGR1cmluZyB0aGUgbW9zdFxuICAgIC8vIHJlY2VudCBtdXRhdGlvbi5cbiAgICBpc1NhZmVUb1JlYWRGcm9tU291cmNlID0gaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuXG4gICAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICAgIC8vIElmIGl0J3Mgc2FmZSB0byByZWFkIGZyb20gdGhpcyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlcixcbiAgICAgIC8vIHN0b3JlIHRoZSB2ZXJzaW9uIGluIGNhc2Ugb3RoZXIgY29tcG9uZW50cyByZWFkIGZyb20gaXQuXG4gICAgICAvLyBBIGNoYW5nZWQgdmVyc2lvbiBudW1iZXIgd2lsbCBsZXQgdGhvc2UgY29tcG9uZW50cyBrbm93IHRvIHRocm93IGFuZCByZXN0YXJ0IHRoZSByZW5kZXIuXG4gICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlLCB2ZXJzaW9uKTtcbiAgICB9XG4gIH1cblxuICBpZiAoaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSkge1xuICAgIHZhciBzbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2Ygc25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHNob3VsZCBub3QgcmV0dXJuIGEgZnVuY3Rpb24gYXMgdGhlIHNuYXBzaG90IHZhbHVlLiAnICsgJ0Z1bmN0aW9ucyBtYXkgY2xvc2Ugb3ZlciBtdXRhYmxlIHZhbHVlcyBhbmQgY2F1c2UgdGVhcmluZy4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc25hcHNob3Q7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBoYW5kbGVzIHRoZSBzcGVjaWFsIGNhc2Ugb2YgYSBtdXRhYmxlIHNvdXJjZSBiZWluZyBzaGFyZWQgYmV0d2VlbiByZW5kZXJlcnMuXG4gICAgLy8gSW4gdGhhdCBjYXNlLCBpZiB0aGUgc291cmNlIGlzIG11dGF0ZWQgYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCByZW5kZXJlcixcbiAgICAvLyBUaGUgc2Vjb25kIHJlbmRlcmVyIGRvbid0IGtub3cgdGhhdCBpdCBuZWVkcyB0byByZXNldCB0aGUgV0lQIHZlcnNpb24gZHVyaW5nIHVud2luZCxcbiAgICAvLyAoYmVjYXVzZSB0aGUgaG9vayBvbmx5IG1hcmtzIHNvdXJjZXMgYXMgZGlydHkgaWYgaXQncyB3cml0dGVuIHRvIHRoZWlyIFdJUCB2ZXJzaW9uKS5cbiAgICAvLyBUaGF0IHdvdWxkIGNhdXNlIHRoaXMgdGVhciBjaGVjayB0byB0aHJvdyBhZ2FpbiBhbmQgZXZlbnR1YWxseSBiZSB2aXNpYmxlIHRvIHRoZSB1c2VyLlxuICAgIC8vIFdlIGNhbiBhdm9pZCB0aGlzIGluZmluaXRlIGxvb3AgYnkgZXhwbGljaXRseSBtYXJraW5nIHRoZSBzb3VyY2UgYXMgZGlydHkuXG4gICAgLy9cbiAgICAvLyBUaGlzIGNhbiBsZWFkIHRvIHRlYXJpbmcgaW4gdGhlIGZpcnN0IHJlbmRlcmVyIHdoZW4gaXQgcmVzdW1lcyxcbiAgICAvLyBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCB0aGF0IChzaG9ydCBvZiB0aHJvd2luZyBoZXJlIGFuZCByZWZ1c2luZyB0byBjb250aW51ZSB0aGUgcmVuZGVyKS5cbiAgICBtYXJrU291cmNlQXNEaXJ0eShzb3VyY2UpO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgcmVhZCBmcm9tIG11dGFibGUgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgd2l0aG91dCB0ZWFyaW5nLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1c2VNdXRhYmxlU291cmNlKGhvb2ssIHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgcm9vdCA9IGdldFdvcmtJblByb2dyZXNzUm9vdCgpO1xuXG4gIGlmICghKHJvb3QgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYSB3b3JrLWluLXByb2dyZXNzIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGdldFZlcnNpb24gPSBzb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcblxuICB2YXIgX2Rpc3BhdGNoZXIkdXNlU3RhdGUgPSBkaXNwYXRjaGVyLnVzZVN0YXRlKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVhZEZyb21VbnN1YmNyaWJlZE11dGFibGVTb3VyY2Uocm9vdCwgc291cmNlLCBnZXRTbmFwc2hvdCk7XG4gIH0pLFxuICAgICAgY3VycmVudFNuYXBzaG90ID0gX2Rpc3BhdGNoZXIkdXNlU3RhdGVbMF0sXG4gICAgICBzZXRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzFdO1xuXG4gIHZhciBzbmFwc2hvdCA9IGN1cnJlbnRTbmFwc2hvdDsgLy8gR3JhYiBhIGhhbmRsZSB0byB0aGUgc3RhdGUgaG9vayBhcyB3ZWxsLlxuICAvLyBXZSB1c2UgaXQgdG8gY2xlYXIgdGhlIHBlbmRpbmcgdXBkYXRlIHF1ZXVlIGlmIHdlIGhhdmUgYSBuZXcgc291cmNlLlxuXG4gIHZhciBzdGF0ZUhvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2s7XG4gIHZhciBtZW1vaXplZFN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuICB2YXIgcmVmcyA9IG1lbW9pemVkU3RhdGUucmVmcztcbiAgdmFyIHByZXZHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gIHZhciBwcmV2U291cmNlID0gbWVtb2l6ZWRTdGF0ZS5zb3VyY2U7XG4gIHZhciBwcmV2U3Vic2NyaWJlID0gbWVtb2l6ZWRTdGF0ZS5zdWJzY3JpYmU7XG4gIHZhciBmaWJlciA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDE7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiByZWZzLFxuICAgIHNvdXJjZTogc291cmNlLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlXG4gIH07IC8vIFN5bmMgdGhlIHZhbHVlcyBuZWVkZWQgYnkgb3VyIHN1YnNjcmlwdGlvbiBoYW5kbGVyIGFmdGVyIGVhY2ggY29tbWl0LlxuXG4gIGRpc3BhdGNoZXIudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICByZWZzLmdldFNuYXBzaG90ID0gZ2V0U25hcHNob3Q7IC8vIE5vcm1hbGx5IHRoZSBkaXNwYXRjaCBmdW5jdGlvbiBmb3IgYSBzdGF0ZSBob29rIG5ldmVyIGNoYW5nZXMsXG4gICAgLy8gYnV0IHRoaXMgaG9vayByZWNyZWF0ZXMgdGhlIHF1ZXVlIGluIGNlcnRhaW4gY2FzZXMgIHRvIGF2b2lkIHVwZGF0ZXMgZnJvbSBzdGFsZSBzb3VyY2VzLlxuICAgIC8vIGhhbmRsZUNoYW5nZSgpIGJlbG93IG5lZWRzIHRvIHJlZmVyZW5jZSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gd2l0aG91dCByZS1zdWJzY3JpYmluZyxcbiAgICAvLyBzbyB3ZSB1c2UgYSByZWYgdG8gZW5zdXJlIHRoYXQgaXQgYWx3YXlzIGhhcyB0aGUgbGF0ZXN0IHZlcnNpb24uXG5cbiAgICByZWZzLnNldFNuYXBzaG90ID0gc2V0U25hcHNob3Q7IC8vIENoZWNrIGZvciBhIHBvc3NpYmxlIGNoYW5nZSBiZXR3ZWVuIHdoZW4gd2UgbGFzdCByZW5kZXJlZCBub3cuXG5cbiAgICB2YXIgbWF5YmVOZXdWZXJzaW9uID0gZ2V0VmVyc2lvbihzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICBpZiAoIW9iamVjdElzKHZlcnNpb24sIG1heWJlTmV3VmVyc2lvbikpIHtcbiAgICAgIHZhciBtYXliZU5ld1NuYXBzaG90ID0gZ2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgbWF5YmVOZXdTbmFwc2hvdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFvYmplY3RJcyhzbmFwc2hvdCwgbWF5YmVOZXdTbmFwc2hvdCkpIHtcbiAgICAgICAgc2V0U25hcHNob3QobWF5YmVOZXdTbmFwc2hvdCk7XG4gICAgICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgICAgICBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIGxhbmUpO1xuICAgICAgfSAvLyBJZiB0aGUgc291cmNlIG11dGF0ZWQgYmV0d2VlbiByZW5kZXIgYW5kIG5vdyxcbiAgICAgIC8vIHRoZXJlIG1heSBiZSBzdGF0ZSB1cGRhdGVzIGFscmVhZHkgc2NoZWR1bGVkIGZyb20gdGhlIG9sZCBzb3VyY2UuXG4gICAgICAvLyBFbnRhbmdsZSB0aGUgdXBkYXRlcyBzbyB0aGF0IHRoZXkgcmVuZGVyIGluIHRoZSBzYW1lIGJhdGNoLlxuXG5cbiAgICAgIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIHJvb3QubXV0YWJsZVJlYWRMYW5lcyk7XG4gICAgfVxuICB9LCBbZ2V0U25hcHNob3QsIHNvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIHdlIGdvdCBhIG5ldyBzb3VyY2Ugb3Igc3Vic2NyaWJlIGZ1bmN0aW9uLCByZS1zdWJzY3JpYmUgaW4gYSBwYXNzaXZlIGVmZmVjdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZUNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBsYXRlc3RHZXRTbmFwc2hvdCA9IHJlZnMuZ2V0U25hcHNob3Q7XG4gICAgICB2YXIgbGF0ZXN0U2V0U25hcHNob3QgPSByZWZzLnNldFNuYXBzaG90O1xuXG4gICAgICB0cnkge1xuICAgICAgICBsYXRlc3RTZXRTbmFwc2hvdChsYXRlc3RHZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSkpOyAvLyBSZWNvcmQgYSBwZW5kaW5nIG11dGFibGUgc291cmNlIHVwZGF0ZSB3aXRoIHRoZSBzYW1lIGV4cGlyYXRpb24gdGltZS5cblxuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEEgc2VsZWN0b3IgbWlnaHQgdGhyb3cgYWZ0ZXIgYSBzb3VyY2UgbXV0YXRpb24uXG4gICAgICAgIC8vIGUuZy4gaXQgbWlnaHQgdHJ5IHRvIHJlYWQgZnJvbSBhIHBhcnQgb2YgdGhlIHN0b3JlIHRoYXQgbm8gbG9uZ2VyIGV4aXN0cy5cbiAgICAgICAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzdGlsbCBzY2hlZHVsZSBhbiB1cGRhdGUgd2l0aCBSZWFjdC5cbiAgICAgICAgLy8gV29yc3QgY2FzZSB0aGUgc2VsZWN0b3Igd2lsbCB0aHJvdyBhZ2FpbiBhbmQgdGhlbiBhbiBlcnJvciBib3VuZGFyeSB3aWxsIGhhbmRsZSBpdC5cbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHVuc3Vic2NyaWJlID0gc3Vic2NyaWJlKHNvdXJjZS5fc291cmNlLCBoYW5kbGVDaGFuZ2UpO1xuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiB1bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc3Vic2NyaWJlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfSwgW3NvdXJjZSwgc3Vic2NyaWJlXSk7IC8vIElmIGFueSBvZiB0aGUgaW5wdXRzIHRvIHVzZU11dGFibGVTb3VyY2UgY2hhbmdlLCByZWFkaW5nIGlzIHBvdGVudGlhbGx5IHVuc2FmZS5cbiAgLy9cbiAgLy8gSWYgZWl0aGVyIHRoZSBzb3VyY2Ugb3IgdGhlIHN1YnNjcmlwdGlvbiBoYXZlIGNoYW5nZWQgd2UgY2FuJ3QgY2FuJ3QgdHJ1c3QgdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gTWF5YmUgdGhlIHNvdXJjZSBjaGFuZ2VkIGluIGEgd2F5IHRoYXQgdGhlIG9sZCBzdWJzY3JpcHRpb24gaWdub3JlZCBidXQgdGhlIG5ldyBvbmUgZGVwZW5kcyBvbi5cbiAgLy9cbiAgLy8gSWYgdGhlIGdldFNuYXBzaG90IGZ1bmN0aW9uIGNoYW5nZWQsIHdlIGFsc28gc2hvdWxkbid0IHJlbHkgb24gdGhlIHVwZGF0ZSBxdWV1ZS5cbiAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoZSB1bmRlcmx5aW5nIHNvdXJjZSB3YXMgbXV0YXRlZCBiZXR3ZWVuIHRoZSB3aGVuIHRoZSBsYXN0IFwiY2hhbmdlXCIgZXZlbnQgZmlyZWQsXG4gIC8vIGFuZCB3aGVuIHRoZSBjdXJyZW50IHJlbmRlciAod2l0aCB0aGUgbmV3IGdldFNuYXBzaG90IGZ1bmN0aW9uKSBpcyBwcm9jZXNzZWQuXG4gIC8vXG4gIC8vIEluIGJvdGggY2FzZXMsIHdlIG5lZWQgdG8gdGhyb3cgYXdheSBwZW5kaW5nIHVwZGF0ZXMgKHNpbmNlIHRoZXkgYXJlIG5vIGxvbmdlciByZWxldmFudClcbiAgLy8gYW5kIHRyZWF0IHJlYWRpbmcgZnJvbSB0aGUgc291cmNlIGFzIHdlIGRvIGluIHRoZSBtb3VudCBjYXNlLlxuXG4gIGlmICghb2JqZWN0SXMocHJldkdldFNuYXBzaG90LCBnZXRTbmFwc2hvdCkgfHwgIW9iamVjdElzKHByZXZTb3VyY2UsIHNvdXJjZSkgfHwgIW9iamVjdElzKHByZXZTdWJzY3JpYmUsIHN1YnNjcmliZSkpIHtcbiAgICAvLyBDcmVhdGUgYSBuZXcgcXVldWUgYW5kIHNldFN0YXRlIG1ldGhvZCxcbiAgICAvLyBTbyBpZiB0aGVyZSBhcmUgaW50ZXJsZWF2ZWQgdXBkYXRlcywgdGhleSBnZXQgcHVzaGVkIHRvIHRoZSBvbGRlciBxdWV1ZS5cbiAgICAvLyBXaGVuIHRoaXMgYmVjb21lcyBjdXJyZW50LCB0aGUgcHJldmlvdXMgcXVldWUgYW5kIGRpc3BhdGNoIG1ldGhvZCB3aWxsIGJlIGRpc2NhcmRlZCxcbiAgICAvLyBpbmNsdWRpbmcgYW55IGludGVybGVhdmluZyB1cGRhdGVzIHRoYXQgb2NjdXIuXG4gICAgdmFyIG5ld1F1ZXVlID0ge1xuICAgICAgcGVuZGluZzogbnVsbCxcbiAgICAgIGRpc3BhdGNoOiBudWxsLFxuICAgICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgICBsYXN0UmVuZGVyZWRTdGF0ZTogc25hcHNob3RcbiAgICB9O1xuICAgIG5ld1F1ZXVlLmRpc3BhdGNoID0gc2V0U25hcHNob3QgPSBkaXNwYXRjaEFjdGlvbi5iaW5kKG51bGwsIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEsIG5ld1F1ZXVlKTtcbiAgICBzdGF0ZUhvb2sucXVldWUgPSBuZXdRdWV1ZTtcbiAgICBzdGF0ZUhvb2suYmFzZVF1ZXVlID0gbnVsbDtcbiAgICBzbmFwc2hvdCA9IHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICAgIHN0YXRlSG9vay5tZW1vaXplZFN0YXRlID0gc3RhdGVIb29rLmJhc2VTdGF0ZSA9IHNuYXBzaG90O1xuICB9XG5cbiAgcmV0dXJuIHNuYXBzaG90O1xufVxuXG5mdW5jdGlvbiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0ge1xuICAgIHJlZnM6IHtcbiAgICAgIGdldFNuYXBzaG90OiBnZXRTbmFwc2hvdCxcbiAgICAgIHNldFNuYXBzaG90OiBudWxsXG4gICAgfSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9O1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xufVxuXG5mdW5jdGlvbiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG5cbiAgaWYgKHR5cGVvZiBpbml0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyAkRmxvd0ZpeE1lOiBGbG93IGRvZXNuJ3QgbGlrZSBtaXhlZCB0eXBlc1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuICB9XG5cbiAgaG9vay5tZW1vaXplZFN0YXRlID0gaG9vay5iYXNlU3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gIHZhciBxdWV1ZSA9IGhvb2sucXVldWUgPSB7XG4gICAgcGVuZGluZzogbnVsbCxcbiAgICBkaXNwYXRjaDogbnVsbCxcbiAgICBsYXN0UmVuZGVyZWRSZWR1Y2VyOiBiYXNpY1N0YXRlUmVkdWNlcixcbiAgICBsYXN0UmVuZGVyZWRTdGF0ZTogaW5pdGlhbFN0YXRlXG4gIH07XG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBxdWV1ZSk7XG4gIHJldHVybiBbaG9vay5tZW1vaXplZFN0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gdXBkYXRlUmVkdWNlcihiYXNpY1N0YXRlUmVkdWNlcik7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKSB7XG4gIHJldHVybiByZXJlbmRlclJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiBwdXNoRWZmZWN0KHRhZywgY3JlYXRlLCBkZXN0cm95LCBkZXBzKSB7XG4gIHZhciBlZmZlY3QgPSB7XG4gICAgdGFnOiB0YWcsXG4gICAgY3JlYXRlOiBjcmVhdGUsXG4gICAgZGVzdHJveTogZGVzdHJveSxcbiAgICBkZXBzOiBkZXBzLFxuICAgIC8vIENpcmN1bGFyXG4gICAgbmV4dDogbnVsbFxuICB9O1xuICB2YXIgY29tcG9uZW50VXBkYXRlUXVldWUgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmIChjb21wb25lbnRVcGRhdGVRdWV1ZSA9PT0gbnVsbCkge1xuICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3JlYXRlRnVuY3Rpb25Db21wb25lbnRVcGRhdGVRdWV1ZSgpO1xuICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEudXBkYXRlUXVldWUgPSBjb21wb25lbnRVcGRhdGVRdWV1ZTtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxhc3RFZmZlY3QgPSBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgbGFzdEVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICAgICAgZWZmZWN0Lm5leHQgPSBmaXJzdEVmZmVjdDtcbiAgICAgIGNvbXBvbmVudFVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgPSBlZmZlY3Q7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVmZmVjdDtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWYoaW5pdGlhbFZhbHVlKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHJlZiA9IHtcbiAgICBjdXJyZW50OiBpbml0aWFsVmFsdWVcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHJlZjtcbiAgcmV0dXJuIHJlZjtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICByZXR1cm4gaG9vay5tZW1vaXplZFN0YXRlO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBmaWJlckZsYWdzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IGhvb2tGbGFncywgY3JlYXRlLCB1bmRlZmluZWQsIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRWZmZWN0SW1wbChmaWJlckZsYWdzLCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIGRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGN1cnJlbnRIb29rICE9PSBudWxsKSB7XG4gICAgdmFyIHByZXZFZmZlY3QgPSBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlO1xuICAgIGRlc3Ryb3kgPSBwcmV2RWZmZWN0LmRlc3Ryb3k7XG5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZFZmZlY3QuZGVwcztcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHB1c2hFZmZlY3QoaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgZGVzdHJveSwgbmV4dERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUgfCBQYXNzaXZlLCBQYXNzaXZlJDEsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIG1vdW50RWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICByZXR1cm4gdXBkYXRlRWZmZWN0SW1wbChVcGRhdGUsIExheW91dCwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gaW1wZXJhdGl2ZUhhbmRsZUVmZmVjdChjcmVhdGUsIHJlZikge1xuICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZWZDYWxsYmFjayA9IHJlZjtcblxuICAgIHZhciBfaW5zdCA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmQ2FsbGJhY2soX2luc3QpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZDYWxsYmFjayhudWxsKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciByZWZPYmplY3QgPSByZWY7XG5cbiAgICB7XG4gICAgICBpZiAoIXJlZk9iamVjdC5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgZmlyc3QgYXJndW1lbnQgdG8gZWl0aGVyIGJlIGEgJyArICdyZWYgY2FsbGJhY2sgb3IgUmVhY3QuY3JlYXRlUmVmKCkgb2JqZWN0LiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCAnYW4gb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKHJlZk9iamVjdCkuam9pbignLCAnKSArICd9Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIF9pbnN0MiA9IGNyZWF0ZSgpO1xuXG4gICAgcmVmT2JqZWN0LmN1cnJlbnQgPSBfaW5zdDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJlZk9iamVjdC5jdXJyZW50ID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNyZWF0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIHVzZUltcGVyYXRpdmVIYW5kbGUoKSBzZWNvbmQgYXJndW1lbnQgdG8gYmUgYSBmdW5jdGlvbiAnICsgJ3RoYXQgY3JlYXRlcyBhIGhhbmRsZS4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY3JlYXRlICE9PSBudWxsID8gdHlwZW9mIGNyZWF0ZSA6ICdudWxsJyk7XG4gICAgfVxuICB9IC8vIFRPRE86IElmIGRlcHMgYXJlIHByb3ZpZGVkLCBzaG91bGQgd2Ugc2tpcCBjb21wYXJpbmcgdGhlIHJlZiBpdHNlbGY/XG5cblxuICB2YXIgZWZmZWN0RGVwcyA9IGRlcHMgIT09IG51bGwgJiYgZGVwcyAhPT0gdW5kZWZpbmVkID8gZGVwcy5jb25jYXQoW3JlZl0pIDogbnVsbDtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QuYmluZChudWxsLCBjcmVhdGUsIHJlZiksIGVmZmVjdERlcHMpO1xufVxuXG5mdW5jdGlvbiBtb3VudERlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7Ly8gVGhpcyBob29rIGlzIG5vcm1hbGx5IGEgbm8tb3AuXG4gIC8vIFRoZSByZWFjdC1kZWJ1Zy1ob29rcyBwYWNrYWdlIGluamVjdHMgaXRzIG93biBpbXBsZW1lbnRhdGlvblxuICAvLyBzbyB0aGF0IGUuZy4gRGV2VG9vbHMgY2FuIGRpc3BsYXkgY3VzdG9tIGhvb2sgdmFsdWVzLlxufVxuXG52YXIgdXBkYXRlRGVidWdWYWx1ZSA9IG1vdW50RGVidWdWYWx1ZTtcblxuZnVuY3Rpb24gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2U3RhdGVbMV07XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICByZXR1cm4gcHJldlN0YXRlWzBdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtjYWxsYmFjaywgbmV4dERlcHNdO1xuICByZXR1cm4gY2FsbGJhY2s7XG59XG5cbmZ1bmN0aW9uIG1vdW50TWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBuZXh0VmFsdWUgPSBuZXh0Q3JlYXRlKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IFtuZXh0VmFsdWUsIG5leHREZXBzXTtcbiAgcmV0dXJuIG5leHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtbyhuZXh0Q3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgcHJldlN0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAvLyBBc3N1bWUgdGhlc2UgYXJlIGRlZmluZWQuIElmIHRoZXkncmUgbm90LCBhcmVIb29rSW5wdXRzRXF1YWwgd2lsbCB3YXJuLlxuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIG1vdW50RGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX21vdW50U3RhdGUgPSBtb3VudFN0YXRlKHZhbHVlKSxcbiAgICAgIHByZXZWYWx1ZSA9IF9tb3VudFN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfbW91bnRTdGF0ZVsxXTtcblxuICBtb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUgPSB1cGRhdGVTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3VwZGF0ZVN0YXRlWzBdLFxuICAgICAgc2V0VmFsdWUgPSBfdXBkYXRlU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3JlcmVuZGVyU3RhdGUgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBwcmV2VmFsdWUgPSBfcmVyZW5kZXJTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMV07XG5cbiAgdXBkYXRlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJldlRyYW5zaXRpb24gPSBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb247XG4gICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgIHRyeSB7XG4gICAgICBzZXRWYWx1ZSh2YWx1ZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IHByZXZUcmFuc2l0aW9uO1xuICAgIH1cbiAgfSwgW3ZhbHVlXSk7XG4gIHJldHVybiBwcmV2VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHN0YXJ0VHJhbnNpdGlvbihzZXRQZW5kaW5nLCBjYWxsYmFjaykge1xuICB2YXIgcHJpb3JpdHlMZXZlbCA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7XG5cbiAge1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPCBVc2VyQmxvY2tpbmdQcmlvcml0eSQyID8gVXNlckJsb2NraW5nUHJpb3JpdHkkMiA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFBlbmRpbmcodHJ1ZSk7XG4gICAgfSk7XG4gICAgcnVuV2l0aFByaW9yaXR5JDEocHJpb3JpdHlMZXZlbCA+IE5vcm1hbFByaW9yaXR5JDEgPyBOb3JtYWxQcmlvcml0eSQxIDogcHJpb3JpdHlMZXZlbCwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gMTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0UGVuZGluZyhmYWxzZSk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFRyYW5zaXRpb24oKSB7XG4gIHZhciBfbW91bnRTdGF0ZTIgPSBtb3VudFN0YXRlKGZhbHNlKSxcbiAgICAgIGlzUGVuZGluZyA9IF9tb3VudFN0YXRlMlswXSxcbiAgICAgIHNldFBlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMV07IC8vIFRoZSBgc3RhcnRgIG1ldGhvZCBjYW4gYmUgc3RvcmVkIG9uIGEgcmVmLCBzaW5jZSBgc2V0UGVuZGluZ2BcbiAgLy8gbmV2ZXIgY2hhbmdlcy5cblxuXG4gIHZhciBzdGFydCA9IHN0YXJ0VHJhbnNpdGlvbi5iaW5kKG51bGwsIHNldFBlbmRpbmcpO1xuICBtb3VudFJlZihzdGFydCk7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVRyYW5zaXRpb24oKSB7XG4gIHZhciBfdXBkYXRlU3RhdGUyID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF91cGRhdGVTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyVHJhbnNpdGlvbigpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlMiA9IHJlcmVuZGVyU3RhdGUoKSxcbiAgICAgIGlzUGVuZGluZyA9IF9yZXJlbmRlclN0YXRlMlswXTtcblxuICB2YXIgc3RhcnRSZWYgPSB1cGRhdGVSZWYoKTtcbiAgdmFyIHN0YXJ0ID0gc3RhcnRSZWYuY3VycmVudDtcbiAgcmV0dXJuIFtzdGFydCwgaXNQZW5kaW5nXTtcbn1cblxudmFyIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldElzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2VJbkRFVigpIHtcbiAge1xuICAgIHJldHVybiBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcikge1xuICB7XG4gICAgLy8gVE9ETzogU2hvdWxkIHdhcm4gaW4gZWZmZWN0cyBhbmQgY2FsbGJhY2tzLCB0b29cbiAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nO1xuXG4gICAgaWYgKGdldElzUmVuZGVyaW5nKCkgJiYgIWRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0pIHtcbiAgICAgIGVycm9yKCdUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSAnICsgJ3Bhc3NlZCB0aHJvdWdoIHRvIGF0dHJpYnV0ZXMgb25seS4gRG8gbm90IHJlYWQgdGhlICcgKyAndmFsdWUgZGlyZWN0bHkuJyk7XG5cbiAgICAgIGRpZFdhcm5BYm91dFVzZU9wYXF1ZUlkZW50aWZpZXJbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBtYWtlSWQgPSAgbWFrZUNsaWVudElkSW5ERVYuYmluZChudWxsLCB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYuYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxKSkgO1xuXG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgdmFyIGRpZFVwZ3JhZGUgPSBmYWxzZTtcbiAgICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuXG4gICAgdmFyIHJlYWRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGlmICghZGlkVXBncmFkZSkge1xuICAgICAgICAvLyBPbmx5IHVwZ3JhZGUgb25jZS4gVGhpcyB3b3JrcyBldmVuIGluc2lkZSB0aGUgcmVuZGVyIHBoYXNlIGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHVwZGF0ZSBpcyBhZGRlZCB0byBhIHNoYXJlZCBxdWV1ZSwgd2hpY2ggb3V0bGFzdHMgdGhlXG4gICAgICAgIC8vIGluLXByb2dyZXNzIHJlbmRlci5cbiAgICAgICAgZGlkVXBncmFkZSA9IHRydWU7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlzVXBkYXRpbmdPcGFxdWVWYWx1ZUluUmVuZGVyUGhhc2UgPSB0cnVlO1xuICAgICAgICAgIHNldElkKG1ha2VJZCgpKTtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gICAgICAgICAgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWKGZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgb2JqZWN0IHBhc3NlZCBiYWNrIGZyb20gdXNlT3BhcXVlSWRlbnRpZmllciBpcyBtZWFudCB0byBiZSBwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSB2YWx1ZSBkaXJlY3RseS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciBpZCA9IG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QocmVhZFZhbHVlKTtcbiAgICB2YXIgc2V0SWQgPSBtb3VudFN0YXRlKGlkKVsxXTtcblxuICAgIGlmICgoY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IFVwZGF0ZSB8IFBhc3NpdmU7XG4gICAgICBwdXNoRWZmZWN0KEhhc0VmZmVjdCB8IFBhc3NpdmUkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICB9LCB1bmRlZmluZWQsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiBpZDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2lkID0gbWFrZUlkKCk7XG5cbiAgICBtb3VudFN0YXRlKF9pZCk7XG4gICAgcmV0dXJuIF9pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgaWQgPSB1cGRhdGVTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gcmVyZW5kZXJTdGF0ZSgpWzBdO1xuICByZXR1cm4gaWQ7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoQWN0aW9uKGZpYmVyLCBxdWV1ZSwgYWN0aW9uKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1szXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoXCJTdGF0ZSB1cGRhdGVzIGZyb20gdGhlIHVzZVN0YXRlKCkgYW5kIHVzZVJlZHVjZXIoKSBIb29rcyBkb24ndCBzdXBwb3J0IHRoZSBcIiArICdzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuIFRvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciAnICsgJ3JlbmRlcmluZywgZGVjbGFyZSBpdCBpbiB0aGUgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBsYW5lOiBsYW5lLFxuICAgIGFjdGlvbjogYWN0aW9uLFxuICAgIGVhZ2VyUmVkdWNlcjogbnVsbCxcbiAgICBlYWdlclN0YXRlOiBudWxsLFxuICAgIG5leHQ6IG51bGxcbiAgfTsgLy8gQXBwZW5kIHRoZSB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC5cblxuICB2YXIgcGVuZGluZyA9IHF1ZXVlLnBlbmRpbmc7XG5cbiAgaWYgKHBlbmRpbmcgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUuIENyZWF0ZSBhIGNpcmN1bGFyIGxpc3QuXG4gICAgdXBkYXRlLm5leHQgPSB1cGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlLm5leHQgPSBwZW5kaW5nLm5leHQ7XG4gICAgcGVuZGluZy5uZXh0ID0gdXBkYXRlO1xuICB9XG5cbiAgcXVldWUucGVuZGluZyA9IHVwZGF0ZTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoZmliZXIgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkge1xuICAgIC8vIFRoaXMgaXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlLiBTdGFzaCBpdCBpbiBhIGxhemlseS1jcmVhdGVkIG1hcCBvZlxuICAgIC8vIHF1ZXVlIC0+IGxpbmtlZCBsaXN0IG9mIHVwZGF0ZXMuIEFmdGVyIHRoaXMgcmVuZGVyIHBhc3MsIHdlJ2xsIHJlc3RhcnRcbiAgICAvLyBhbmQgYXBwbHkgdGhlIHN0YXNoZWQgdXBkYXRlcyBvbiB0b3Agb2YgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cbiAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZmliZXIubGFuZXMgPT09IE5vTGFuZXMgJiYgKGFsdGVybmF0ZSA9PT0gbnVsbCB8fCBhbHRlcm5hdGUubGFuZXMgPT09IE5vTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcXVldWUgaXMgY3VycmVudGx5IGVtcHR5LCB3aGljaCBtZWFucyB3ZSBjYW4gZWFnZXJseSBjb21wdXRlIHRoZVxuICAgICAgLy8gbmV4dCBzdGF0ZSBiZWZvcmUgZW50ZXJpbmcgdGhlIHJlbmRlciBwaGFzZS4gSWYgdGhlIG5ldyBzdGF0ZSBpcyB0aGVcbiAgICAgIC8vIHNhbWUgYXMgdGhlIGN1cnJlbnQgc3RhdGUsIHdlIG1heSBiZSBhYmxlIHRvIGJhaWwgb3V0IGVudGlyZWx5LlxuICAgICAgdmFyIGxhc3RSZW5kZXJlZFJlZHVjZXIgPSBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyO1xuXG4gICAgICBpZiAobGFzdFJlbmRlcmVkUmVkdWNlciAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgcHJldkRpc3BhdGNoZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlO1xuICAgICAgICAgIHZhciBlYWdlclN0YXRlID0gbGFzdFJlbmRlcmVkUmVkdWNlcihjdXJyZW50U3RhdGUsIGFjdGlvbik7IC8vIFN0YXNoIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLCBhbmQgdGhlIHJlZHVjZXIgdXNlZCB0byBjb21wdXRlXG4gICAgICAgICAgLy8gaXQsIG9uIHRoZSB1cGRhdGUgb2JqZWN0LiBJZiB0aGUgcmVkdWNlciBoYXNuJ3QgY2hhbmdlZCBieSB0aGVcbiAgICAgICAgICAvLyB0aW1lIHdlIGVudGVyIHRoZSByZW5kZXIgcGhhc2UsIHRoZW4gdGhlIGVhZ2VyIHN0YXRlIGNhbiBiZSB1c2VkXG4gICAgICAgICAgLy8gd2l0aG91dCBjYWxsaW5nIHRoZSByZWR1Y2VyIGFnYWluLlxuXG4gICAgICAgICAgdXBkYXRlLmVhZ2VyUmVkdWNlciA9IGxhc3RSZW5kZXJlZFJlZHVjZXI7XG4gICAgICAgICAgdXBkYXRlLmVhZ2VyU3RhdGUgPSBlYWdlclN0YXRlO1xuXG4gICAgICAgICAgaWYgKG9iamVjdElzKGVhZ2VyU3RhdGUsIGN1cnJlbnRTdGF0ZSkpIHtcbiAgICAgICAgICAgIC8vIEZhc3QgcGF0aC4gV2UgY2FuIGJhaWwgb3V0IHdpdGhvdXQgc2NoZWR1bGluZyBSZWFjdCB0byByZS1yZW5kZXIuXG4gICAgICAgICAgICAvLyBJdCdzIHN0aWxsIHBvc3NpYmxlIHRoYXQgd2UnbGwgbmVlZCB0byByZWJhc2UgdGhpcyB1cGRhdGUgbGF0ZXIsXG4gICAgICAgICAgICAvLyBpZiB0aGUgY29tcG9uZW50IHJlLXJlbmRlcnMgZm9yIGEgZGlmZmVyZW50IHJlYXNvbiBhbmQgYnkgdGhhdFxuICAgICAgICAgICAgLy8gdGltZSB0aGUgcmVkdWNlciBoYXMgY2hhbmdlZC5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7Ly8gU3VwcHJlc3MgdGhlIGVycm9yLiBJdCB3aWxsIHRocm93IGFnYWluIGluIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcik7XG4gICAgICAgIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRldihmaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9XG59XG5cbnZhciBDb250ZXh0T25seURpc3BhdGNoZXIgPSB7XG4gIHJlYWRDb250ZXh0OiByZWFkQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2s6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlQ29udGV4dDogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VMYXlvdXRFZmZlY3Q6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTWVtbzogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWR1Y2VyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVJlZjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VTdGF0ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWJ1Z1ZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZURlZmVycmVkVmFsdWU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlVHJhbnNpdGlvbjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VNdXRhYmxlU291cmNlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU9wYXF1ZUlkZW50aWZpZXI6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG59O1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0gbnVsbDtcbnZhciBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG5cbntcbiAgdmFyIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gJyArICdJbiBjbGFzc2VzLCB5b3UgY2FuIHJlYWQgaXQgaW4gdGhlIHJlbmRlciBtZXRob2Qgb3IgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiAnICsgJ0luIGZ1bmN0aW9uIGNvbXBvbmVudHMsIHlvdSBjYW4gcmVhZCBpdCBkaXJlY3RseSBpbiB0aGUgZnVuY3Rpb24gYm9keSwgYnV0IG5vdCAnICsgJ2luc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuJyk7XG4gIH07XG5cbiAgdmFyIHdhcm5JbnZhbGlkSG9va0FjY2VzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICBlcnJvcignRG8gbm90IGNhbGwgSG9va3MgaW5zaWRlIHVzZUVmZmVjdCguLi4pLCB1c2VNZW1vKC4uLiksIG9yIG90aGVyIGJ1aWx0LWluIEhvb2tzLiAnICsgJ1lvdSBjYW4gb25seSBjYWxsIEhvb2tzIGF0IHRoZSB0b3AgbGV2ZWwgb2YgeW91ciBSZWFjdCBmdW5jdGlvbi4gJyArICdGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyk7XG4gIH07XG5cbiAgSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVJlZigpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudENhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudExheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFJlZihpbml0aWFsVmFsdWUpO1xuICAgIH0sXG4gICAgdXNlU3RhdGU6IGZ1bmN0aW9uIChpbml0aWFsU3RhdGUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVN0YXRlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50T3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlQ2FsbGJhY2s6IGZ1bmN0aW9uIChjYWxsYmFjaywgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ2FsbGJhY2snO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUxheW91dEVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTGF5b3V0RWZmZWN0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiByZXJlbmRlclJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZU11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xufVxuXG52YXIgbm93JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfbm93O1xudmFyIGNvbW1pdFRpbWUgPSAwO1xudmFyIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG5cbmZ1bmN0aW9uIGdldENvbW1pdFRpbWUoKSB7XG4gIHJldHVybiBjb21taXRUaW1lO1xufVxuXG5mdW5jdGlvbiByZWNvcmRDb21taXRUaW1lKCkge1xuXG4gIGNvbW1pdFRpbWUgPSBub3ckMSgpO1xufVxuXG5mdW5jdGlvbiBzdGFydFByb2ZpbGVyVGltZXIoZmliZXIpIHtcblxuICBwcm9maWxlclN0YXJ0VGltZSA9IG5vdyQxKCk7XG5cbiAgaWYgKGZpYmVyLmFjdHVhbFN0YXJ0VGltZSA8IDApIHtcbiAgICBmaWJlci5hY3R1YWxTdGFydFRpbWUgPSBub3ckMSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbn1cblxuZnVuY3Rpb24gc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShmaWJlciwgb3ZlcnJpZGVCYXNlVGltZSkge1xuXG4gIGlmIChwcm9maWxlclN0YXJ0VGltZSA+PSAwKSB7XG4gICAgdmFyIGVsYXBzZWRUaW1lID0gbm93JDEoKSAtIHByb2ZpbGVyU3RhcnRUaW1lO1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGVsYXBzZWRUaW1lO1xuXG4gICAgaWYgKG92ZXJyaWRlQmFzZVRpbWUpIHtcbiAgICAgIGZpYmVyLnNlbGZCYXNlRHVyYXRpb24gPSBlbGFwc2VkVGltZTtcbiAgICB9XG5cbiAgICBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24oZmliZXIpIHtcbiAgLy8gVHJhbnNmZXIgdGltZSBzcGVudCByZW5kZXJpbmcgdGhlc2UgY2hpbGRyZW4gc28gd2UgZG9uJ3QgbG9zZSBpdFxuICAvLyBhZnRlciB3ZSByZXJlbmRlci4gVGhpcyBpcyB1c2VkIGFzIGEgaGVscGVyIGluIHNwZWNpYWwgY2FzZXNcbiAgLy8gd2hlcmUgd2Ugc2hvdWxkIGNvdW50IHRoZSB3b3JrIG9mIG11bHRpcGxlIHBhc3Nlcy5cbiAgdmFyIGNoaWxkID0gZmliZXIuY2hpbGQ7XG5cbiAgd2hpbGUgKGNoaWxkKSB7XG4gICAgZmliZXIuYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dEJhZENsYXNzO1xudmFyIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzO1xudmFyIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHM7XG52YXIgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXI7XG52YXIgZGlkV2FybkFib3V0VGFpbE9wdGlvbnM7XG5cbntcbiAgZGlkV2FybkFib3V0QmFkQ2xhc3MgPSB7fTtcbiAgZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudCA9IHt9O1xuICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnMgPSB7fTtcbiAgZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlciA9IHt9O1xuICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9ucyA9IHt9O1xufVxuXG5mdW5jdGlvbiByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIElmIHRoaXMgaXMgYSBmcmVzaCBuZXcgY29tcG9uZW50IHRoYXQgaGFzbid0IGJlZW4gcmVuZGVyZWQgeWV0LCB3ZVxuICAgIC8vIHdvbid0IHVwZGF0ZSBpdHMgY2hpbGQgc2V0IGJ5IGFwcGx5aW5nIG1pbmltYWwgc2lkZS1lZmZlY3RzLiBJbnN0ZWFkLFxuICAgIC8vIHdlIHdpbGwgYWRkIHRoZW0gYWxsIHRvIHRoZSBjaGlsZCBiZWZvcmUgaXQgZ2V0cyByZW5kZXJlZC4gVGhhdCBtZWFuc1xuICAgIC8vIHdlIGNhbiBvcHRpbWl6ZSB0aGlzIHJlY29uY2lsaWF0aW9uIHBhc3MgYnkgbm90IHRyYWNraW5nIHNpZGUtZWZmZWN0cy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG1vdW50Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZSBjdXJyZW50IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB3b3JrIGluIHByb2dyZXNzLCBpdCBtZWFucyB0aGF0XG4gICAgLy8gd2UgaGF2ZW4ndCB5ZXQgc3RhcnRlZCBhbnkgd29yayBvbiB0aGVzZSBjaGlsZHJlbi4gVGhlcmVmb3JlLCB3ZSB1c2VcbiAgICAvLyB0aGUgY2xvbmUgYWxnb3JpdGhtIHRvIGNyZWF0ZSBhIGNvcHkgb2YgYWxsIHRoZSBjdXJyZW50IGNoaWxkcmVuLlxuICAgIC8vIElmIHdlIGhhZCBhbnkgcHJvZ3Jlc3NlZCB3b3JrIGFscmVhZHksIHRoYXQgaXMgaW52YWxpZCBhdCB0aGlzIHBvaW50IHNvXG4gICAgLy8gbGV0J3MgdGhyb3cgaXQgb3V0LlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBmdW5jdGlvbiBpcyBmb3JrIG9mIHJlY29uY2lsZUNoaWxkcmVuLiBJdCdzIHVzZWQgaW4gY2FzZXMgd2hlcmUgd2VcbiAgLy8gd2FudCB0byByZWNvbmNpbGUgd2l0aG91dCBtYXRjaGluZyBhZ2FpbnN0IHRoZSBleGlzdGluZyBzZXQuIFRoaXMgaGFzIHRoZVxuICAvLyBlZmZlY3Qgb2YgYWxsIGN1cnJlbnQgY2hpbGRyZW4gYmVpbmcgdW5tb3VudGVkOyBldmVuIGlmIHRoZSB0eXBlIGFuZCBrZXlcbiAgLy8gYXJlIHRoZSBzYW1lLCB0aGUgb2xkIGNoaWxkIGlzIHVubW91bnRlZCBhbmQgYSBuZXcgY2hpbGQgaXMgY3JlYXRlZC5cbiAgLy9cbiAgLy8gVG8gZG8gdGhpcywgd2UncmUgZ29pbmcgdG8gZ28gdGhyb3VnaCB0aGUgcmVjb25jaWxlIGFsZ29yaXRobSB0d2ljZS4gSW5cbiAgLy8gdGhlIGZpcnN0IHBhc3MsIHdlIHNjaGVkdWxlIGEgZGVsZXRpb24gZm9yIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbiBieVxuICAvLyBwYXNzaW5nIG51bGwuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGN1cnJlbnQuY2hpbGQsIG51bGwsIHJlbmRlckxhbmVzKTsgLy8gSW4gdGhlIHNlY29uZCBwYXNzLCB3ZSBtb3VudCB0aGUgbmV3IGNoaWxkcmVuLiBUaGUgdHJpY2sgaGVyZSBpcyB0aGF0IHdlXG4gIC8vIHBhc3MgbnVsbCBpbiBwbGFjZSBvZiB3aGVyZSB3ZSB1c3VhbGx5IHBhc3MgdGhlIGN1cnJlbnQgY2hpbGQgc2V0LiBUaGlzIGhhc1xuICAvLyB0aGUgZWZmZWN0IG9mIHJlbW91bnRpbmcgYWxsIGNoaWxkcmVuIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGVpclxuICAvLyBpZGVudGl0aWVzIG1hdGNoLlxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgYWZ0ZXIgdGhlIGZpcnN0IHJlbmRlciBzdXNwZW5kcy5cbiAgLy8gV2UnbGwgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHRoaXMgaXMgZmluZSBvciBjYW4gY2F1c2UgaXNzdWVzLlxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgcmVuZGVyID0gQ29tcG9uZW50LnJlbmRlcjtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjsgLy8gVGhlIHJlc3QgaXMgYSBmb3JrIG9mIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50XG5cbiAgdmFyIG5leHRDaGlsZHJlbjtcbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlciwgbmV4dFByb3BzLCByZWYsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHZhciB0eXBlID0gQ29tcG9uZW50LnR5cGU7XG5cbiAgICBpZiAoaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSAmJiBDb21wb25lbnQuY29tcGFyZSA9PT0gbnVsbCAmJiAvLyBTaW1wbGVNZW1vQ29tcG9uZW50IGNvZGVwYXRoIGRvZXNuJ3QgcmVzb2x2ZSBvdXRlciBwcm9wcyBlaXRoZXIuXG4gICAgQ29tcG9uZW50LmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG4gICAgICB9IC8vIElmIHRoaXMgaXMgYSBwbGFpbiBmdW5jdGlvbiBjb21wb25lbnQgd2l0aG91dCBkZWZhdWx0IHByb3BzLFxuICAgICAgLy8gYW5kIHdpdGggb25seSB0aGUgZGVmYXVsdCBzaGFsbG93IGNvbXBhcmlzb24sIHdlIHVwZ3JhZGUgaXRcbiAgICAgIC8vIHRvIGEgU2ltcGxlTWVtb0NvbXBvbmVudCB0byBhbGxvdyBmYXN0IHBhdGggdXBkYXRlcy5cblxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBTaW1wbGVNZW1vQ29tcG9uZW50O1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVkVHlwZTtcblxuICAgICAge1xuICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIHR5cGUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVzb2x2ZWRUeXBlLCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAge1xuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICAvLyBJbm5lciBtZW1vIGNvbXBvbmVudCBwcm9wcyBhcmVuJ3QgY3VycmVudGx5IHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50LlxuICAgICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUodHlwZSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGlsZCA9IGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyhDb21wb25lbnQudHlwZSwgbnVsbCwgbmV4dFByb3BzLCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MubW9kZSwgcmVuZGVyTGFuZXMpO1xuICAgIGNoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgICBjaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHtcbiAgICB2YXIgX3R5cGUgPSBDb21wb25lbnQudHlwZTtcbiAgICB2YXIgX2lubmVyUHJvcFR5cGVzID0gX3R5cGUucHJvcFR5cGVzO1xuXG4gICAgaWYgKF9pbm5lclByb3BUeXBlcykge1xuICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgIC8vIFdlIGNvdWxkIG1vdmUgaXQgdGhlcmUsIGJ1dCB3ZSdkIHN0aWxsIG5lZWQgdGhpcyBmb3IgbGF6eSBjb2RlIHBhdGguXG4gICAgICBjaGVja1Byb3BUeXBlcyhfaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjdXJyZW50Q2hpbGQgPSBjdXJyZW50LmNoaWxkOyAvLyBUaGlzIGlzIGFsd2F5cyBleGFjdGx5IG9uZSBjaGlsZFxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZSh1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhpcyB3aWxsIGJlIHRoZSBwcm9wcyB3aXRoIHJlc29sdmVkIGRlZmF1bHRQcm9wcyxcbiAgICAvLyB1bmxpa2UgY3VycmVudC5tZW1vaXplZFByb3BzIHdoaWNoIHdpbGwgYmUgdGhlIHVucmVzb2x2ZWQgb25lcy5cbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudENoaWxkLm1lbW9pemVkUHJvcHM7IC8vIERlZmF1bHQgdG8gc2hhbGxvdyBjb21wYXJpc29uXG5cbiAgICB2YXIgY29tcGFyZSA9IENvbXBvbmVudC5jb21wYXJlO1xuICAgIGNvbXBhcmUgPSBjb21wYXJlICE9PSBudWxsID8gY29tcGFyZSA6IHNoYWxsb3dFcXVhbDtcblxuICAgIGlmIChjb21wYXJlKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIG5leHRQcm9wcyk7XG4gIG5ld0NoaWxkLnJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcbiAgbmV3Q2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbmV3Q2hpbGQ7XG4gIHJldHVybiBuZXdDaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBjdXJyZW50IGNhbiBiZSBub24tbnVsbCBoZXJlIGV2ZW4gaWYgdGhlIGNvbXBvbmVudFxuICAvLyBoYXNuJ3QgeWV0IG1vdW50ZWQuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBpbm5lciByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBvdXRlck1lbW9UeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG5cbiAgICAgIGlmIChvdXRlck1lbW9UeXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgLy8gV2Ugd2FybiB3aGVuIHlvdSBkZWZpbmUgcHJvcFR5cGVzIG9uIGxhenkoKVxuICAgICAgICAvLyBzbyBsZXQncyBqdXN0IHNraXAgb3ZlciBpdCB0byBmaW5kIG1lbW8oKSBvdXRlciB3cmFwcGVyLlxuICAgICAgICAvLyBJbm5lciBwcm9wcyBmb3IgbWVtbyBhcmUgdmFsaWRhdGVkIGxhdGVyLlxuICAgICAgICB2YXIgbGF6eUNvbXBvbmVudCA9IG91dGVyTWVtb1R5cGU7XG4gICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IGluaXQocGF5bG9hZCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBvdXRlck1lbW9UeXBlID0gbnVsbDtcbiAgICAgICAgfSAvLyBJbm5lciBwcm9wVHlwZXMgd2lsbCBiZSB2YWxpZGF0ZWQgaW4gdGhlIGZ1bmN0aW9uIGNvbXBvbmVudCBwYXRoLlxuXG5cbiAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gb3V0ZXJNZW1vVHlwZSAmJiBvdXRlck1lbW9UeXBlLnByb3BUeXBlcztcblxuICAgICAgICBpZiAob3V0ZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCAoU2ltcGxlTWVtb0NvbXBvbmVudCBoYXMgbm8gZGVmYXVsdFByb3BzKVxuICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShvdXRlck1lbW9UeXBlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAoc2hhbGxvd0VxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSAmJiBjdXJyZW50LnJlZiA9PT0gd29ya0luUHJvZ3Jlc3MucmVmICYmICggLy8gUHJldmVudCBiYWlsb3V0IGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBjaGFuZ2VkIGR1ZSB0byBob3QgcmVsb2FkLlxuICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSBjdXJyZW50LnR5cGUgKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgICAvLyBUaGUgcGVuZGluZyBsYW5lcyB3ZXJlIGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBiZWdpbldvcmsuIFdlJ3JlXG4gICAgICAgIC8vIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgdGhlcmUgbWlnaHQgYmUgb3RoZXIgbGFuZXMgdGhhdCB3ZXJlbid0XG4gICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBjdXJyZW50IHJlbmRlci4gVXN1YWxseSwgdGhlIHByaW9yaXR5IGxldmVsIG9mIHRoZVxuICAgICAgICAvLyByZW1haW5pbmcgdXBkYXRlcyBpcyBhY2N1bWxhdGVkIGR1cmluZyB0aGUgZXZhbHVhdGlvbiBvZiB0aGVcbiAgICAgICAgLy8gY29tcG9uZW50IChpLmUuIHdoZW4gcHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlKS4gQnV0IHNpbmNlIHNpbmNlXG4gICAgICAgIC8vIHdlJ3JlIGJhaWxpbmcgb3V0IGVhcmx5ICp3aXRob3V0KiBldmFsdWF0aW5nIHRoZSBjb21wb25lbnQsIHdlIG5lZWRcbiAgICAgICAgLy8gdG8gYWNjb3VudCBmb3IgaXQgaGVyZSwgdG9vLiBSZXNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGN1cnJlbnQgZmliZXIuXG4gICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBhcHBsaWVzIHRvIFNpbXBsZU1lbW9Db21wb25lbnQsIG5vdCBNZW1vQ29tcG9uZW50LFxuICAgICAgICAvLyBiZWNhdXNlIGEgTWVtb0NvbXBvbmVudCBmaWJlciBkb2VzIG5vdCBoYXZlIGhvb2tzIG9yIGFuIHVwZGF0ZSBxdWV1ZTtcbiAgICAgICAgLy8gcmF0aGVyLCBpdCB3cmFwcyBhcm91bmQgYW4gaW5uZXIgY29tcG9uZW50LCB3aGljaCBtYXkgb3IgbWF5IG5vdFxuICAgICAgICAvLyBjb250YWlucyBob29rcy5cbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgcmVzZXQgYXQgaW4gYmVnaW5Xb3JrIG91dCBvZiB0aGUgY29tbW9uIHBhdGggc28gdGhhdFxuICAgICAgICAvLyB0aGlzIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZWxzZSBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgcHJldlN0YXRlID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSA6IG51bGw7XG5cbiAgaWYgKG5leHRQcm9wcy5tb2RlID09PSAnaGlkZGVuJyB8fCBuZXh0UHJvcHMubW9kZSA9PT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBJbiBsZWdhY3kgc3luYyBtb2RlLCBkb24ndCBkZWZlciB0aGUgc3VidHJlZS4gUmVuZGVyIGl0IG5vdy5cbiAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2hhdCB3ZSBzaG91bGQgZG8gaW4gQmxvY2tpbmcgbW9kZS5cbiAgICAgIHZhciBuZXh0U3RhdGUgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXh0U3RhdGU7XG4gICAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSkge1xuICAgICAgdmFyIG5leHRCYXNlTGFuZXM7XG5cbiAgICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZCYXNlTGFuZXMgPSBwcmV2U3RhdGUuYmFzZUxhbmVzO1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2QmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0QmFzZUxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgICB9IC8vIFNjaGVkdWxlIHRoaXMgZmliZXIgdG8gcmUtcmVuZGVyIGF0IG9mZnNjcmVlbiBwcmlvcml0eS4gVGhlbiBiYWlsb3V0LlxuXG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKE9mZnNjcmVlbkxhbmUpO1xuICAgICAgfVxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBsYW5lVG9MYW5lcyhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIHZhciBfbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IG5leHRCYXNlTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTsgLy8gV2UncmUgYWJvdXQgdG8gYmFpbCBvdXQsIGJ1dCB3ZSBuZWVkIHRvIHB1c2ggdGhpcyB0byB0aGUgc3RhY2sgYW55d2F5XG4gICAgICAvLyB0byBhdm9pZCBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cblxuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBuZXh0QmFzZUxhbmVzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW5kZXJpbmcgYXQgb2Zmc2NyZWVuLCBzbyB3ZSBjYW4gY2xlYXIgdGhlIGJhc2UgbGFuZXMuXG4gICAgICB2YXIgX25leHRTdGF0ZTIgPSB7XG4gICAgICAgIGJhc2VMYW5lczogTm9MYW5lc1xuICAgICAgfTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBfbmV4dFN0YXRlMjsgLy8gUHVzaCB0aGUgbGFuZXMgdGhhdCB3ZXJlIHNraXBwZWQgd2hlbiB3ZSBiYWlsZWQgb3V0LlxuXG4gICAgICB2YXIgc3VidHJlZVJlbmRlckxhbmVzID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmJhc2VMYW5lcyA6IHJlbmRlckxhbmVzO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgX3N1YnRyZWVSZW5kZXJMYW5lcztcblxuICAgIGlmIChwcmV2U3RhdGUgIT09IG51bGwpIHtcbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHByZXZTdGF0ZS5iYXNlTGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UncmUgbm90IGhpZGRlbiBhbnltb3JlLCByZXNldCB0aGUgc3RhdGVcblxuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFdlIHdlcmVuJ3QgcHJldmlvdXNseSBoaWRkZW4sIGFuZCB3ZSBzdGlsbCBhcmVuJ3QsIHNvIHRoZXJlJ3Mgbm90aGluZ1xuICAgICAgLy8gc3BlY2lhbCB0byBkby4gTmVlZCB0byBwdXNoIHRvIHRoZSBzdGFjayByZWdhcmRsZXNzLCB0aG91Z2gsIHRvIGF2b2lkXG4gICAgICAvLyBhIHB1c2gvcG9wIG1pc2FsaWdubWVudC5cbiAgICAgIF9zdWJ0cmVlUmVuZGVyTGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB9XG5cbiAgICBwdXNoUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MsIF9zdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59IC8vIE5vdGU6IFRoZXNlIGhhcHBlbiB0byBoYXZlIGlkZW50aWNhbCBiZWdpbiBwaGFzZXMsIGZvciBub3cuIFdlIHNob3VsZG4ndCBob2xkXG4vLyBvdXJzZWx2ZXMgdG8gdGhpcyBjb25zdHJhaW50LCB0aG91Z2guIElmIHRoZSBiZWhhdmlvciBkaXZlcmdlcywgd2Ugc2hvdWxkXG4vLyBmb3JrIHRoZSBmdW5jdGlvbi5cblxuXG52YXIgdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50ID0gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50O1xuXG5mdW5jdGlvbiB1cGRhdGVGcmFnbWVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRDaGlsZHJlbiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1vZGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTsgLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cbiAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgc3RhdGVOb2RlLnBhc3NpdmVFZmZlY3REdXJhdGlvbiA9IDA7XG4gIH1cblxuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcmVmID0gd29ya0luUHJvZ3Jlc3MucmVmO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsICYmIHJlZiAhPT0gbnVsbCB8fCBjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSByZWYpIHtcbiAgICAvLyBTY2hlZHVsZSBhIFJlZiBlZmZlY3RcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBSZWY7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgICBjb250ZXh0ID0gZ2V0TWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgdW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmICFkaWRSZWNlaXZlVXBkYXRlKSB7XG4gICAgYmFpbG91dEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnR5cGUgIT09IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlKSB7XG4gICAgICAvLyBMYXp5IGNvbXBvbmVudCBwcm9wcyBjYW4ndCBiZSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudFxuICAgICAgLy8gYmVjYXVzZSB0aGV5J3JlIG9ubHkgZ3VhcmFudGVlZCB0byBiZSByZXNvbHZlZCBoZXJlLlxuICAgICAgdmFyIGlubmVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgaWYgKGlubmVyUHJvcFR5cGVzKSB7XG4gICAgICAgIGNoZWNrUHJvcFR5cGVzKGlubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgLy8gRHVyaW5nIG1vdW50aW5nIHdlIGRvbid0IGtub3cgdGhlIGNoaWxkIGNvbnRleHQgeWV0IGFzIHRoZSBpbnN0YW5jZSBkb2Vzbid0IGV4aXN0LlxuICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgdmFyIHNob3VsZFVwZGF0ZTtcblxuICBpZiAoaW5zdGFuY2UgPT09IG51bGwpIHtcbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBjbGFzcyBjb21wb25lbnQgd2l0aG91dCBhbiBpbnN0YW5jZSBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWRcbiAgICAgIC8vIGluc2lkZSBhIG5vbi1jb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0b1xuICAgICAgLy8gdHJlYXQgaXQgbGlrZSBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5XG4gICAgICAvLyBjb21taXR0ZWQuIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICAgIH0gLy8gSW4gdGhlIGluaXRpYWwgcGFzcyB3ZSBtaWdodCBuZWVkIHRvIGNvbnN0cnVjdCB0aGUgaW5zdGFuY2UuXG5cblxuICAgIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgc2hvdWxkVXBkYXRlID0gdHJ1ZTtcbiAgfSBlbHNlIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gSW4gYSByZXN1bWUsIHdlJ2xsIGFscmVhZHkgaGF2ZSBhbiBpbnN0YW5jZSB3ZSBjYW4gcmV1c2UuXG4gICAgc2hvdWxkVXBkYXRlID0gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHNob3VsZFVwZGF0ZSA9IHVwZGF0ZUNsYXNzSW5zdGFuY2UoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgbmV4dFVuaXRPZldvcmsgPSBmaW5pc2hDbGFzc0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBzaG91bGRVcGRhdGUsIGhhc0NvbnRleHQsIHJlbmRlckxhbmVzKTtcblxuICB7XG4gICAgdmFyIGluc3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlICYmIGluc3QucHJvcHMgIT09IG5leHRQcm9wcykge1xuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgIGVycm9yKCdJdCBsb29rcyBsaWtlICVzIGlzIHJlYXNzaWduaW5nIGl0cyBvd24gYHRoaXMucHJvcHNgIHdoaWxlIHJlbmRlcmluZy4gJyArICdUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIGNhbiBsZWFkIHRvIGNvbmZ1c2luZyBidWdzLicsIGdldENvbXBvbmVudE5hbWUod29ya0luUHJvZ3Jlc3MudHlwZSkgfHwgJ2EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0VW5pdE9mV29yaztcbn1cblxuZnVuY3Rpb24gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcykge1xuICAvLyBSZWZzIHNob3VsZCB1cGRhdGUgZXZlbiBpZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJucyBmYWxzZVxuICBtYXJrUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgdmFyIGRpZENhcHR1cmVFcnJvciA9ICh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gIGlmICghc2hvdWxkVXBkYXRlICYmICFkaWRDYXB0dXJlRXJyb3IpIHtcbiAgICAvLyBDb250ZXh0IHByb3ZpZGVycyBzaG91bGQgZGVmZXIgdG8gc0NVIGZvciByZW5kZXJpbmdcbiAgICBpZiAoaGFzQ29udGV4dCkge1xuICAgICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gUmVyZW5kZXJcblxuICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgdmFyIG5leHRDaGlsZHJlbjtcblxuICBpZiAoZGlkQ2FwdHVyZUVycm9yICYmIHR5cGVvZiBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYgd2UgY2FwdHVyZWQgYW4gZXJyb3IsIGJ1dCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgaXMgbm90IGRlZmluZWQsXG4gICAgLy8gdW5tb3VudCBhbGwgdGhlIGNoaWxkcmVuLiBjb21wb25lbnREaWRDYXRjaCB3aWxsIHNjaGVkdWxlIGFuIHVwZGF0ZSB0b1xuICAgIC8vIHJlLXJlbmRlciBhIGZhbGxiYWNrLiBUaGlzIGlzIHRlbXBvcmFyeSB1bnRpbCB3ZSBtaWdyYXRlIGV2ZXJ5b25lIHRvXG4gICAgLy8gdGhlIG5ldyBBUEkuXG4gICAgLy8gVE9ETzogV2FybiBpbiBhIGZ1dHVyZSByZWxlYXNlLlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG5cbiAgICB7XG4gICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICAgIG5leHRDaGlsZHJlbiA9IGluc3RhbmNlLnJlbmRlcigpO1xuXG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZW5kZXIoKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gICAgfVxuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gSWYgd2UncmUgcmVjb3ZlcmluZyBmcm9tIGFuIGVycm9yLCByZWNvbmNpbGUgd2l0aG91dCByZXVzaW5nIGFueSBvZlxuICAgIC8vIHRoZSBleGlzdGluZyBjaGlsZHJlbi4gQ29uY2VwdHVhbGx5LCB0aGUgbm9ybWFsIGNoaWxkcmVuIGFuZCB0aGUgY2hpbGRyZW5cbiAgICAvLyB0aGF0IGFyZSBzaG93biBvbiBlcnJvciBhcmUgdHdvIGRpZmZlcmVudCBzZXRzLCBzbyB3ZSBzaG91bGRuJ3QgcmV1c2VcbiAgICAvLyBub3JtYWwgY2hpbGRyZW4gZXZlbiBpZiB0aGVpciBpZGVudGl0aWVzIG1hdGNoLlxuICAgIGZvcmNlVW5tb3VudEN1cnJlbnRBbmRSZWNvbmNpbGUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSAvLyBNZW1vaXplIHN0YXRlIHVzaW5nIHRoZSB2YWx1ZXMgd2UganVzdCB1c2VkIHRvIHJlbmRlci5cbiAgLy8gVE9ETzogUmVzdHJ1Y3R1cmUgc28gd2UgbmV2ZXIgcmVhZCB2YWx1ZXMgZnJvbSB0aGUgaW5zdGFuY2UuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gaW5zdGFuY2Uuc3RhdGU7IC8vIFRoZSBjb250ZXh0IG1pZ2h0IGhhdmUgY2hhbmdlZCBzbyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0LlxuXG4gIGlmIChoYXNDb250ZXh0KSB7XG4gICAgaW52YWxpZGF0ZUNvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcykge1xuICB2YXIgcm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICBpZiAocm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgIHB1c2hUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MsIHJvb3QucGVuZGluZ0NvbnRleHQsIHJvb3QucGVuZGluZ0NvbnRleHQgIT09IHJvb3QuY29udGV4dCk7XG4gIH0gZWxzZSBpZiAocm9vdC5jb250ZXh0KSB7XG4gICAgLy8gU2hvdWxkIGFsd2F5cyBiZSBzZXRcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LmNvbnRleHQsIGZhbHNlKTtcbiAgfVxuXG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCByb290LmNvbnRhaW5lckluZm8pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RSb290Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICghKGN1cnJlbnQgIT09IG51bGwgJiYgdXBkYXRlUXVldWUgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgdGhlIHJvb3QgZG9lcyBub3QgaGF2ZSBhbiB1cGRhdGVRdWV1ZSwgd2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBiYWlsZWQgb3V0LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIHZhciBwcmV2Q2hpbGRyZW4gPSBwcmV2U3RhdGUgIT09IG51bGwgPyBwcmV2U3RhdGUuZWxlbWVudCA6IG51bGw7XG4gIGNsb25lVXBkYXRlUXVldWUoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5leHRQcm9wcywgbnVsbCwgcmVuZGVyTGFuZXMpO1xuICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRTdGF0ZS5lbGVtZW50O1xuXG4gIGlmIChuZXh0Q2hpbGRyZW4gPT09IHByZXZDaGlsZHJlbikge1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QuaHlkcmF0ZSAmJiBlbnRlckh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKSkge1xuICAgIC8vIElmIHdlIGRvbid0IGhhdmUgYW55IGN1cnJlbnQgY2hpbGRyZW4gdGhpcyBtaWdodCBiZSB0aGUgZmlyc3QgcGFzcy5cbiAgICAvLyBXZSBhbHdheXMgdHJ5IHRvIGh5ZHJhdGUuIElmIHRoaXMgaXNuJ3QgYSBoeWRyYXRpb24gcGFzcyB0aGVyZSB3b24ndFxuICAgIC8vIGJlIGFueSBjaGlsZHJlbiB0byBoeWRyYXRlIHdoaWNoIGlzIGVmZmVjdGl2ZWx5IHRoZSBzYW1lIHRoaW5nIGFzXG4gICAgLy8gbm90IGh5ZHJhdGluZy5cbiAgICB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9IHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YTtcblxuICAgICAgaWYgKG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgIT0gbnVsbCkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGFbaV07XG4gICAgICAgICAgdmFyIHZlcnNpb24gPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2kgKyAxXTtcbiAgICAgICAgICBzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGNoaWxkO1xuICAgIHZhciBub2RlID0gY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSkge1xuICAgICAgLy8gTWFyayBlYWNoIGNoaWxkIGFzIGh5ZHJhdGluZy4gVGhpcyBpcyBhIGZhc3QgcGF0aCB0byBrbm93IHdoZXRoZXIgdGhpc1xuICAgICAgLy8gdHJlZSBpcyBwYXJ0IG9mIGEgaHlkcmF0aW5nIHRyZWUuIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgaWYgYSBjaGlsZFxuICAgICAgLy8gbm9kZSBoYXMgZnVsbHkgbW91bnRlZCB5ZXQsIGFuZCBmb3Igc2NoZWR1bGluZyBldmVudCByZXBsYXlpbmcuXG4gICAgICAvLyBDb25jZXB0dWFsbHkgdGhpcyBpcyBzaW1pbGFyIHRvIFBsYWNlbWVudCBpbiB0aGF0IGEgbmV3IHN1YnRyZWUgaXNcbiAgICAgIC8vIGluc2VydGVkIGludG8gdGhlIFJlYWN0IHRyZWUgaGVyZS4gSXQganVzdCBoYXBwZW5zIHRvIG5vdCBuZWVkIERPTVxuICAgICAgLy8gbXV0YXRpb25zIGJlY2F1c2UgaXQgYWxyZWFkeSBleGlzdHMuXG4gICAgICBub2RlLmZsYWdzID0gbm9kZS5mbGFncyAmIH5QbGFjZW1lbnQgfCBIeWRyYXRpbmc7XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2UgcmVzZXQgaHlkcmF0aW9uIHN0YXRlIGluIGNhc2Ugd2UgYWJvcnRlZCBhbmQgcmVzdW1lZCBhbm90aGVyXG4gICAgLy8gcm9vdC5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgcmVzZXRIeWRyYXRpb25TdGF0ZSgpO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgbmV4dFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgcHJldlByb3BzID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG51bGw7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0UHJvcHMuY2hpbGRyZW47XG4gIHZhciBpc0RpcmVjdFRleHRDaGlsZCA9IHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIG5leHRQcm9wcyk7XG5cbiAgaWYgKGlzRGlyZWN0VGV4dENoaWxkKSB7XG4gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIGEgZGlyZWN0IHRleHQgY2hpbGQgb2YgYSBob3N0IG5vZGUuIFRoaXMgaXMgYSBjb21tb25cbiAgICAvLyBjYXNlLiBXZSB3b24ndCBoYW5kbGUgaXQgYXMgYSByZWlmaWVkIGNoaWxkLiBXZSB3aWxsIGluc3RlYWQgaGFuZGxlXG4gICAgLy8gdGhpcyBpbiB0aGUgaG9zdCBlbnZpcm9ubWVudCB0aGF0IGFsc28gaGFzIGFjY2VzcyB0byB0aGlzIHByb3AuIFRoYXRcbiAgICAvLyBhdm9pZHMgYWxsb2NhdGluZyBhbm90aGVyIEhvc3RUZXh0IGZpYmVyIGFuZCB0cmF2ZXJzaW5nIGl0LlxuICAgIG5leHRDaGlsZHJlbiA9IG51bGw7XG4gIH0gZWxzZSBpZiAocHJldlByb3BzICE9PSBudWxsICYmIHNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIHByZXZQcm9wcykpIHtcbiAgICAvLyBJZiB3ZSdyZSBzd2l0Y2hpbmcgZnJvbSBhIGRpcmVjdCB0ZXh0IGNoaWxkIHRvIGEgbm9ybWFsIGNoaWxkLCBvciB0b1xuICAgIC8vIGVtcHR5LCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHRoZSB0ZXh0IGNvbnRlbnQgdG8gYmUgcmVzZXQuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gQ29udGVudFJlc2V0O1xuICB9XG5cbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVIb3N0VGV4dChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfSAvLyBOb3RoaW5nIHRvIGRvIGhlcmUuIFRoaXMgaXMgdGVybWluYWwuIFdlJ2xsIGRvIHRoZSBjb21wbGV0aW9uIHN0ZXBcbiAgLy8gaW1tZWRpYXRlbHkgYWZ0ZXIuXG5cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXp5Q29tcG9uZW50KF9jdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgZWxlbWVudFR5cGUsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBIGxhenkgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGxhenlDb21wb25lbnQgPSBlbGVtZW50VHlwZTtcbiAgdmFyIHBheWxvYWQgPSBsYXp5Q29tcG9uZW50Ll9wYXlsb2FkO1xuICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG4gIHZhciBDb21wb25lbnQgPSBpbml0KHBheWxvYWQpOyAvLyBTdG9yZSB0aGUgdW53cmFwcGVkIGNvbXBvbmVudCBpbiB0aGUgdHlwZS5cblxuICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50O1xuICB2YXIgcmVzb2x2ZWRUYWcgPSB3b3JrSW5Qcm9ncmVzcy50YWcgPSByZXNvbHZlTGF6eUNvbXBvbmVudFRhZyhDb21wb25lbnQpO1xuICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBwcm9wcyk7XG4gIHZhciBjaGlsZDtcblxuICBzd2l0Y2ggKHJlc29sdmVkVGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBDb21wb25lbnQgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoQ29tcG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlRm9yd2FyZFJlZihudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gQ29tcG9uZW50LnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCByZXNvbHZlZFByb3BzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVNZW1vQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LnR5cGUsIHJlc29sdmVkUHJvcHMpLCAvLyBUaGUgaW5uZXIgdHlwZSBjYW4gaGF2ZSBkZWZhdWx0cyB0b29cbiAgICAgICAgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICB9XG5cbiAgdmFyIGhpbnQgPSAnJztcblxuICB7XG4gICAgaWYgKENvbXBvbmVudCAhPT0gbnVsbCAmJiB0eXBlb2YgQ29tcG9uZW50ID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgaGludCA9ICcgRGlkIHlvdSB3cmFwIGEgY29tcG9uZW50IGluIFJlYWN0LmxhenkoKSBtb3JlIHRoYW4gb25jZT8nO1xuICAgIH1cbiAgfSAvLyBUaGlzIG1lc3NhZ2UgaW50ZW50aW9uYWxseSBkb2Vzbid0IG1lbnRpb24gRm9yd2FyZFJlZiBvciBNZW1vQ29tcG9uZW50XG4gIC8vIGJlY2F1c2UgdGhlIGZhY3QgdGhhdCBpdCdzIGEgc2VwYXJhdGUgdHlwZSBvZiB3b3JrIGlzIGFuXG4gIC8vIGltcGxlbWVudGF0aW9uIGRldGFpbC5cblxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZC4gUmVjZWl2ZWQgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG86IFwiICsgQ29tcG9uZW50ICsgXCIuIExhenkgZWxlbWVudCB0eXBlIG11c3QgcmVzb2x2ZSB0byBhIGNsYXNzIG9yIGZ1bmN0aW9uLlwiICsgaGludCApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEluY29tcGxldGVDbGFzc0NvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcykge1xuICBpZiAoX2N1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBBbiBpbmNvbXBsZXRlIGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH0gLy8gUHJvbW90ZSB0aGUgZmliZXIgdG8gYSBjbGFzcyBhbmQgdHJ5IHJlbmRlcmluZyBhZ2Fpbi5cblxuXG4gIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaGUgcmVzdCBvZiB0aGlzIGZ1bmN0aW9uIGlzIGEgZm9yayBvZiBgdXBkYXRlQ2xhc3NDb21wb25lbnRgXG4gIC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gIHZhciBoYXNDb250ZXh0O1xuXG4gIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgaGFzQ29udGV4dCA9IHRydWU7XG4gICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gZWxzZSB7XG4gICAgaGFzQ29udGV4dCA9IGZhbHNlO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMpO1xuICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIG1vdW50SW5kZXRlcm1pbmF0ZUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5kZXRlcm1pbmF0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgdmFyIHByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgY29udGV4dDtcblxuICB7XG4gICAgdmFyIHVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBmYWxzZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgdmFsdWU7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQucHJvdG90eXBlICYmIHR5cGVvZiBDb21wb25lbnQucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKFwiVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBoYXZlIGEgcmVuZGVyIG1ldGhvZCwgYnV0IGRvZXNuJ3QgZXh0ZW5kIFJlYWN0LkNvbXBvbmVudC4gXCIgKyAnVGhpcyBpcyBsaWtlbHkgdG8gY2F1c2UgZXJyb3JzLiBDaGFuZ2UgJXMgdG8gZXh0ZW5kIFJlYWN0LkNvbXBvbmVudCBpbnN0ZWFkLicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dEJhZENsYXNzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nKHdvcmtJblByb2dyZXNzLCBudWxsKTtcbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICB2YWx1ZSA9IHJlbmRlcldpdGhIb29rcyhudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgY29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIHtcbiAgICAvLyBTdXBwb3J0IGZvciBtb2R1bGUgY29tcG9uZW50cyBpcyBkZXByZWNhdGVkIGFuZCBpcyByZW1vdmVkIGJlaGluZCBhIGZsYWcuXG4gICAgLy8gV2hldGhlciBvciBub3QgaXQgd291bGQgY3Jhc2ggbGF0ZXIsIHdlIHdhbnQgdG8gc2hvdyBhIGdvb2QgbWVzc2FnZSBpbiBERVYgZmlyc3QuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoIC8vIFJ1biB0aGVzZSBjaGVja3MgaW4gcHJvZHVjdGlvbiBvbmx5IGlmIHRoZSBmbGFnIGlzIG9mZi5cbiAgLy8gRXZlbnR1YWxseSB3ZSdsbCBkZWxldGUgdGhpcyBicmFuY2ggYWx0b2dldGhlci5cbiAgIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJyAmJiB2YWx1ZS4kJHR5cGVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMiA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0TW9kdWxlUGF0dGVybkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTJdKSB7XG4gICAgICAgIGVycm9yKCdUaGUgPCVzIC8+IGNvbXBvbmVudCBhcHBlYXJzIHRvIGJlIGEgZnVuY3Rpb24gY29tcG9uZW50IHRoYXQgcmV0dXJucyBhIGNsYXNzIGluc3RhbmNlLiAnICsgJ0NoYW5nZSAlcyB0byBhIGNsYXNzIHRoYXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4gJyArIFwiSWYgeW91IGNhbid0IHVzZSBhIGNsYXNzIHRyeSBhc3NpZ25pbmcgdGhlIHByb3RvdHlwZSBvbiB0aGUgZnVuY3Rpb24gYXMgYSB3b3JrYXJvdW5kLiBcIiArIFwiYCVzLnByb3RvdHlwZSA9IFJlYWN0LkNvbXBvbmVudC5wcm90b3R5cGVgLiBEb24ndCB1c2UgYW4gYXJyb3cgZnVuY3Rpb24gc2luY2UgaXQgXCIgKyAnY2Fubm90IGJlIGNhbGxlZCB3aXRoIGBuZXdgIGJ5IFJlYWN0LicsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyLCBfY29tcG9uZW50TmFtZTIpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBQcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyBhIGNsYXNzIGluc3RhbmNlXG5cblxuICAgIHdvcmtJblByb2dyZXNzLnRhZyA9IENsYXNzQ29tcG9uZW50OyAvLyBUaHJvdyBvdXQgYW55IGhvb2tzIHRoYXQgd2VyZSB1c2VkLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsOyAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAgIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgICAvLyBXZSB3aWxsIGludmFsaWRhdGUgdGhlIGNoaWxkIGNvbnRleHQgaW4gZmluaXNoQ2xhc3NDb21wb25lbnQoKSByaWdodCBhZnRlciByZW5kZXJpbmcuXG5cbiAgICB2YXIgaGFzQ29udGV4dCA9IGZhbHNlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gdmFsdWUuc3RhdGUgIT09IG51bGwgJiYgdmFsdWUuc3RhdGUgIT09IHVuZGVmaW5lZCA/IHZhbHVlLnN0YXRlIDogbnVsbDtcbiAgICBpbml0aWFsaXplVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MpO1xuICAgIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBDb21wb25lbnQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFwcGx5RGVyaXZlZFN0YXRlRnJvbVByb3BzKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgcHJvcHMpO1xuICAgIH1cblxuICAgIGFkb3B0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgdmFsdWUpO1xuICAgIG1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBwcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBmaW5pc2hDbGFzc0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCB0cnVlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gIH0gZWxzZSB7XG4gICAgLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBmdW5jdGlvbiBjb21wb25lbnRcbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBGdW5jdGlvbkNvbXBvbmVudDtcblxuICAgIHtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlY29uY2lsZUNoaWxkcmVuKG51bGwsIHdvcmtJblByb2dyZXNzLCB2YWx1ZSwgcmVuZGVyTGFuZXMpO1xuXG4gICAge1xuICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpO1xuICAgIH1cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCkge1xuICB7XG4gICAgaWYgKENvbXBvbmVudCkge1xuICAgICAgaWYgKENvbXBvbmVudC5jaGlsZENvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogY2hpbGRDb250ZXh0VHlwZXMgY2Fubm90IGJlIGRlZmluZWQgb24gYSBmdW5jdGlvbiBjb21wb25lbnQuJywgQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdDb21wb25lbnQnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3MucmVmICE9PSBudWxsKSB7XG4gICAgICB2YXIgaW5mbyA9ICcnO1xuICAgICAgdmFyIG93bmVyTmFtZSA9IGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCk7XG5cbiAgICAgIGlmIChvd25lck5hbWUpIHtcbiAgICAgICAgaW5mbyArPSAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBvd25lck5hbWUgKyAnYC4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgd2FybmluZ0tleSA9IG93bmVyTmFtZSB8fCB3b3JrSW5Qcm9ncmVzcy5fZGVidWdJRCB8fCAnJztcbiAgICAgIHZhciBkZWJ1Z1NvdXJjZSA9IHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZTtcblxuICAgICAgaWYgKGRlYnVnU291cmNlKSB7XG4gICAgICAgIHdhcm5pbmdLZXkgPSBkZWJ1Z1NvdXJjZS5maWxlTmFtZSArICc6JyArIGRlYnVnU291cmNlLmxpbmVOdW1iZXI7XG4gICAgICB9XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzW3dhcm5pbmdLZXldKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ0Z1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGJlIGdpdmVuIHJlZnMuICcgKyAnQXR0ZW1wdHMgdG8gYWNjZXNzIHRoaXMgcmVmIHdpbGwgZmFpbC4gJyArICdEaWQgeW91IG1lYW4gdG8gdXNlIFJlYWN0LmZvcndhcmRSZWYoKT8lcycsIGluZm8pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lMyA9IGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSB8fCAnVW5rbm93bic7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuJywgX2NvbXBvbmVudE5hbWUzKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50W19jb21wb25lbnROYW1lM10gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgQ29tcG9uZW50LmNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBDb21wb25lbnQuY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTQgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdKSB7XG4gICAgICAgIGVycm9yKCclczogRnVuY3Rpb24gY29tcG9uZW50cyBkbyBub3Qgc3VwcG9ydCBjb250ZXh0VHlwZS4nLCBfY29tcG9uZW50TmFtZTQpO1xuXG4gICAgICAgIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIFNVU1BFTkRFRF9NQVJLRVIgPSB7XG4gIGRlaHlkcmF0ZWQ6IG51bGwsXG4gIHJldHJ5TGFuZTogTm9MYW5lXG59O1xuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IHJlbmRlckxhbmVzXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocHJldk9mZnNjcmVlblN0YXRlLCByZW5kZXJMYW5lcykge1xuICByZXR1cm4ge1xuICAgIGJhc2VMYW5lczogbWVyZ2VMYW5lcyhwcmV2T2Zmc2NyZWVuU3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcylcbiAgfTtcbn0gLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIGlubGluZSB0aGlzIGJhY2tcblxuXG5mdW5jdGlvbiBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrLCB0aGVyZSBhcmUgY2FzZXMgd2hlcmUgd2UgbmVlZCB0b1xuICAvLyByZW1haW4gb24gdGhhdCBmYWxsYmFjayByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGNvbnRlbnQgaGFzIHJlc29sdmVkLlxuICAvLyBGb3IgZXhhbXBsZSwgU3VzcGVuc2VMaXN0IGNvb3JkaW5hdGVzIHdoZW4gbmVzdGVkIGNvbnRlbnQgYXBwZWFycy5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICAvLyBDdXJyZW50bHkgc2hvd2luZyBjb250ZW50LiBEb24ndCBoaWRlIGl0LCBldmVuIGlmIEZvcmNlU3VzcGVuc2VGYWxsYWNrXG4gICAgICAvLyBpcyB0cnVlLiBNb3JlIHByZWNpc2UgbmFtZSBtaWdodCBiZSBcIkZvcmNlUmVtYWluU3VzcGVuc2VGYWxsYmFja1wiLlxuICAgICAgLy8gTm90ZTogVGhpcyBpcyBhIGZhY3RvcmluZyBzbWVsbC4gQ2FuJ3QgcmVtYWluIG9uIGEgZmFsbGJhY2sgaWYgdGhlcmUnc1xuICAgICAgLy8gbm8gZmFsbGJhY2sgdG8gcmVtYWluIG9uLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSAvLyBOb3QgY3VycmVudGx5IHNob3dpbmcgY29udGVudC4gQ29uc3VsdCB0aGUgU3VzcGVuc2UgY29udGV4dC5cblxuXG4gIHJldHVybiBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcykge1xuICAvLyBUT0RPOiBTaG91bGQgbm90IHJlbW92ZSByZW5kZXIgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBkdXJpbmcgdGhpcyByZW5kZXJcbiAgcmV0dXJuIHJlbW92ZUxhbmVzKGN1cnJlbnQuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gVGhpcyBpcyB1c2VkIGJ5IERldlRvb2xzIHRvIGZvcmNlIGEgYm91bmRhcnkgdG8gc3VzcGVuZC5cblxuICB7XG4gICAgaWYgKHNob3VsZFN1c3BlbmQod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIHZhciBzaG93RmFsbGJhY2sgPSBmYWxzZTtcbiAgdmFyIGRpZFN1c3BlbmQgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoZGlkU3VzcGVuZCB8fCBzaG91bGRSZW1haW5PbkZhbGxiYWNrKHN1c3BlbnNlQ29udGV4dCwgY3VycmVudCkpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhpcyBib3VuZGFyeSdzIHN1YnRyZWUgYWxyZWFkeSBzdXNwZW5kZWQuIFN3aXRjaCB0b1xuICAgIC8vIHJlbmRlcmluZyB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgc2hvd0ZhbGxiYWNrID0gdHJ1ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+RGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICAvLyBBdHRlbXB0aW5nIHRoZSBtYWluIGNvbnRlbnRcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50Lm1lbW9pemVkU3RhdGUgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBuZXcgbW91bnQgb3IgdGhpcyBib3VuZGFyeSBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBzdGF0ZS5cbiAgICAgIC8vIE1hcmsgdGhpcyBzdWJ0cmVlIGNvbnRleHQgYXMgaGF2aW5nIGF0IGxlYXN0IG9uZSBpbnZpc2libGUgcGFyZW50IHRoYXQgY291bGRcbiAgICAgIC8vIGhhbmRsZSB0aGUgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBCb3VuZGFyaWVzIHdpdGhvdXQgZmFsbGJhY2tzIG9yIHNob3VsZCBiZSBhdm9pZGVkIGFyZSBub3QgY29uc2lkZXJlZCBzaW5jZVxuICAgICAgLy8gdGhleSBjYW5ub3QgaGFuZGxlIHByZWZlcnJlZCBmYWxsYmFjayBzdGF0ZXMuXG4gICAgICBpZiAobmV4dFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgbmV4dFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlKSB7XG4gICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IGFkZFN1YnRyZWVTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN1c3BlbnNlQ29udGV4dCA9IHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCk7XG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIE9LLCB0aGUgbmV4dCBwYXJ0IGlzIGNvbmZ1c2luZy4gV2UncmUgYWJvdXQgdG8gcmVjb25jaWxlIHRoZSBTdXNwZW5zZVxuICAvLyBib3VuZGFyeSdzIGNoaWxkcmVuLiBUaGlzIGludm9sdmVzIHNvbWUgY3VzdG9tIHJlY29uY2lsYXRpb24gbG9naWMuIFR3b1xuICAvLyBtYWluIHJlYXNvbnMgdGhpcyBpcyBzbyBjb21wbGljYXRlZC5cbiAgLy9cbiAgLy8gRmlyc3QsIExlZ2FjeSBNb2RlIGhhcyBkaWZmZXJlbnQgc2VtYW50aWNzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4gVGhlXG4gIC8vIHByaW1hcnkgdHJlZSB3aWxsIGNvbW1pdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUsIHNvIHdoZW4gd2UgZG8gdGhlXG4gIC8vIHNlY29uZCBwYXNzIHRvIHJlbmRlciB0aGUgZmFsbGJhY2ssIHdlIGRvIHNvbWUgZXhjZWVkaW5nbHksIHVoLCBjbGV2ZXJcbiAgLy8gaGFja3MgdG8gbWFrZSB0aGF0IG5vdCB0b3RhbGx5IGJyZWFrLiBMaWtlIHRyYW5zZmVycmluZyBlZmZlY3RzIGFuZFxuICAvLyBkZWxldGlvbnMgZnJvbSBoaWRkZW4gdHJlZS4gSW4gQ29uY3VycmVudCBNb2RlLCBpdCdzIG11Y2ggc2ltcGxlcixcbiAgLy8gYmVjYXVzZSB3ZSBiYWlsb3V0IG9uIHRoZSBwcmltYXJ5IHRyZWUgY29tcGxldGVseSBhbmQgbGVhdmUgaXQgaW4gaXRzIG9sZFxuICAvLyBzdGF0ZSwgbm8gZWZmZWN0cy4gU2FtZSBhcyB3aGF0IHdlIGRvIGZvciBPZmZzY3JlZW4gKGV4Y2VwdCB0aGF0XG4gIC8vIE9mZnNjcmVlbiBkb2Vzbid0IGhhdmUgdGhlIGZpcnN0IHJlbmRlciBwYXNzKS5cbiAgLy9cbiAgLy8gU2Vjb25kIGlzIGh5ZHJhdGlvbi4gRHVyaW5nIGh5ZHJhdGlvbiwgdGhlIFN1c3BlbnNlIGZpYmVyIGhhcyBhIHNsaWdodGx5XG4gIC8vIGRpZmZlcmVudCBsYXlvdXQsIHdoZXJlIHRoZSBjaGlsZCBwb2ludHMgdG8gYSBkZWh5ZHJhdGVkIGZyYWdtZW50LCB3aGljaFxuICAvLyBjb250YWlucyB0aGUgRE9NIHJlbmRlcmVkIGJ5IHRoZSBzZXJ2ZXIuXG4gIC8vXG4gIC8vIFRoaXJkLCBldmVuIGlmIHlvdSBzZXQgYWxsIHRoYXQgYXNpZGUsIFN1c3BlbnNlIGlzIGxpa2UgZXJyb3IgYm91bmRhcmllcyBpblxuICAvLyB0aGF0IHdlIGZpcnN0IHdlIHRyeSB0byByZW5kZXIgb25lIHRyZWUsIGFuZCBpZiB0aGF0IGZhaWxzLCB3ZSByZW5kZXIgYWdhaW5cbiAgLy8gYW5kIHN3aXRjaCB0byBhIGRpZmZlcmVudCB0cmVlLiBMaWtlIGEgdHJ5L2NhdGNoIGJsb2NrLiBTbyB3ZSBoYXZlIHRvIHRyYWNrXG4gIC8vIHdoaWNoIGJyYW5jaCB3ZSdyZSBjdXJyZW50bHkgcmVuZGVyaW5nLiBJZGVhbGx5IHdlIHdvdWxkIG1vZGVsIHRoaXMgdXNpbmdcbiAgLy8gYSBzdGFjay5cblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluaXRpYWwgbW91bnRcbiAgICAvLyBJZiB3ZSdyZSBjdXJyZW50bHkgaHlkcmF0aW5nLCB0cnkgdG8gaHlkcmF0ZSB0aGlzIGJvdW5kYXJ5LlxuICAgIC8vIEJ1dCBvbmx5IGlmIHRoaXMgaGFzIGEgZmFsbGJhY2suXG4gICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7IC8vIFRoaXMgY291bGQndmUgYmVlbiBhIGRlaHlkcmF0ZWQgc3VzcGVuc2UgY29tcG9uZW50LlxuICAgIH1cblxuICAgIHZhciBuZXh0UHJpbWFyeUNoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBuZXh0RmFsbGJhY2tDaGlsZHJlbiA9IG5leHRQcm9wcy5mYWxsYmFjaztcblxuICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgIHZhciBmYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50Lm1lbW9pemVkU3RhdGUgPSBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpO1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICByZXR1cm4gZmFsbGJhY2tGcmFnbWVudDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcHMudW5zdGFibGVfZXhwZWN0ZWRMb2FkVGltZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBDUFUtYm91bmQgdHJlZS4gU2tpcCB0aGlzIHRyZWUgYW5kIHNob3cgYSBwbGFjZWhvbGRlciB0b1xuICAgICAgLy8gdW5ibG9jayB0aGUgc3Vycm91bmRpbmcgY29udGVudC4gVGhlbiBpbW1lZGlhdGVseSByZXRyeSBhZnRlciB0aGVcbiAgICAgIC8vIGluaXRpYWwgY29tbWl0LlxuICAgICAgdmFyIF9mYWxsYmFja0ZyYWdtZW50ID0gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIG5leHRQcmltYXJ5Q2hpbGRyZW4sIG5leHRGYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpcyB0b1xuICAgICAgLy8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zIG9mXG4gICAgICAvLyBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsIGl0J3NcbiAgICAgIC8vIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXMgY29tbWl0dGVkLiBJZlxuICAgICAgLy8gaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlIHBhaW50ZWQuXG4gICAgICAvLyBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuIFdlIGNhbiB1c2UgYW55XG4gICAgICAvLyBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZyBzaW5jZSB3ZSdyZSBsZWF2aW5nXG4gICAgICAvLyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgIHtcbiAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2ZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaXMgYW4gdXBkYXRlLlxuICAgIC8vIElmIHRoZSBjdXJyZW50IGZpYmVyIGhhcyBhIFN1c3BlbnNlU3RhdGUsIHRoYXQgbWVhbnMgaXQncyBhbHJlYWR5IHNob3dpbmdcbiAgICAvLyBhIGZhbGxiYWNrLlxuICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjIgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMiwgX25leHRGYWxsYmFja0NoaWxkcmVuMiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBwcmV2T2Zmc2NyZWVuU3RhdGUgPSBjdXJyZW50LmNoaWxkLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDMubWVtb2l6ZWRTdGF0ZSA9IHByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgICByZXR1cm4gX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjMgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDQgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW4zLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0cmVlIGlzIG5vdCBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjay5cbiAgICAgIGlmIChzaG93RmFsbGJhY2spIHtcbiAgICAgICAgLy8gVGltZWQgb3V0LlxuICAgICAgICB2YXIgX25leHRGYWxsYmFja0NoaWxkcmVuMyA9IG5leHRQcm9wcy5mYWxsYmFjaztcbiAgICAgICAgdmFyIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCA9IG5leHRQcm9wcy5jaGlsZHJlbjtcblxuICAgICAgICB2YXIgX2ZhbGxiYWNrQ2hpbGRGcmFnbWVudDIgPSB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNCwgX25leHRGYWxsYmFja0NoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgIHZhciBfcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1Lm1lbW9pemVkU3RhdGUgPSBfcHJldk9mZnNjcmVlblN0YXRlID09PSBudWxsID8gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSA6IHVwZGF0ZVN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUoX3ByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ1LmNoaWxkTGFuZXMgPSBnZXRSZW1haW5pbmdXb3JrSW5QcmltYXJ5VHJlZShjdXJyZW50LCByZW5kZXJMYW5lcyk7IC8vIFNraXAgdGhlIHByaW1hcnkgY2hpbGRyZW4sIGFuZCBjb250aW51ZSB3b3JraW5nIG9uIHRoZVxuICAgICAgICAvLyBmYWxsYmFjayBjaGlsZHJlbi5cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU3RpbGwgaGF2ZW4ndCB0aW1lZCBvdXQuIENvbnRpbnVlIHJlbmRlcmluZyB0aGUgY2hpbGRyZW4sIGxpa2Ugd2VcbiAgICAgICAgLy8gbm9ybWFsbHkgZG8uXG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjUgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9wcmltYXJ5Q2hpbGRGcmFnbWVudDYgPSB1cGRhdGVTdXNwZW5zZVByaW1hcnlDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX25leHRQcmltYXJ5Q2hpbGRyZW41LCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBtb3VudFN1c3BlbnNlRmFsbGJhY2tDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCBmYWxsYmFja0NoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuXG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHByaW1hcnlDaGlsZFByb3BzLCBtb2RlLCBOb0xhbmVzLCBudWxsKTtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKSB7XG4gIC8vIFRoZSBwcm9wcyBhcmd1bWVudCB0byBgY3JlYXRlV29ya0luUHJvZ3Jlc3NgIGlzIGBhbnlgIHR5cGVkLCBzbyB3ZSB1c2UgdGhpc1xuICAvLyB3cmFwcGVyIGZ1bmN0aW9uIHRvIGNvbnN0cmFpbiBpdC5cbiAgcmV0dXJuIGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnQsIG9mZnNjcmVlblByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzT2Zmc2NyZWVuRmliZXIoY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LCB7XG4gICAgbW9kZTogJ3Zpc2libGUnLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfSk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgfVxuXG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gbnVsbDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIC8vIERlbGV0ZSB0aGUgZmFsbGJhY2sgY2hpbGQgZnJhZ21lbnRcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIHByaW1hcnlDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3VycmVudC5jaGlsZDtcbiAgdmFyIGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZztcbiAgdmFyIHByaW1hcnlDaGlsZFByb3BzID0ge1xuICAgIG1vZGU6ICdoaWRkZW4nLFxuICAgIGNoaWxkcmVuOiBwcmltYXJ5Q2hpbGRyZW5cbiAgfTtcbiAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50O1xuXG4gIGlmICggLy8gSW4gbGVnYWN5IG1vZGUsIHdlIGNvbW1pdCB0aGUgcHJpbWFyeSB0cmVlIGFzIGlmIGl0IHN1Y2Nlc3NmdWxseVxuICAvLyBjb21wbGV0ZWQsIGV2ZW4gdGhvdWdoIGl0J3MgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLlxuICAobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSAmJiAvLyBNYWtlIHN1cmUgd2UncmUgb24gdGhlIHNlY29uZCBwYXNzLCBpLmUuIHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50IHdhc1xuICAvLyBhbHJlYWR5IGNsb25lZC4gSW4gbGVnYWN5IG1vZGUsIHRoZSBvbmx5IGNhc2Ugd2hlcmUgdGhpcyBpc24ndCB0cnVlIGlzXG4gIC8vIHdoZW4gRGV2VG9vbHMgZm9yY2VzIHVzIHRvIGRpc3BsYXkgYSBmYWxsYmFjazsgd2Ugc2tpcCB0aGUgZmlyc3QgcmVuZGVyXG4gIC8vIHBhc3MgZW50aXJlbHkgYW5kIGdvIHN0cmFpZ2h0IHRvIHJlbmRlcmluZyB0aGUgZmFsbGJhY2suIChJbiBDb25jdXJyZW50XG4gIC8vIE1vZGUsIFN1c3BlbnNlTGlzdCBjYW4gYWxzbyB0cmlnZ2VyIHRoaXMgc2NlbmFyaW8sIGJ1dCB0aGlzIGlzIGEgbGVnYWN5LVxuICAvLyBvbmx5IGNvZGVwYXRoLilcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgIT09IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCkge1xuICAgIHZhciBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBwcm9ncmVzc2VkUHJpbWFyeUZyYWdtZW50O1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnBlbmRpbmdQcm9wcyA9IHByaW1hcnlDaGlsZFByb3BzO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgIC8vIFJlc2V0IHRoZSBkdXJhdGlvbnMgZnJvbSB0aGUgZmlyc3QgcGFzcyBzbyB0aGV5IGFyZW4ndCBpbmNsdWRlZCBpbiB0aGVcbiAgICAgIC8vIGZpbmFsIGFtb3VudHMuIFRoaXMgc2VlbXMgY291bnRlcmludHVpdGl2ZSwgc2luY2Ugd2UncmUgaW50ZW50aW9uYWxseVxuICAgICAgLy8gbm90IG1lYXN1cmluZyBwYXJ0IG9mIHRoZSByZW5kZXIgcGhhc2UsIGJ1dCB0aGlzIG1ha2VzIGl0IG1hdGNoIHdoYXQgd2VcbiAgICAgIC8vIGRvIGluIENvbmN1cnJlbnQgTW9kZS5cbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH0gLy8gVGhlIGZhbGxiYWNrIGZpYmVyIHdhcyBhZGRlZCBhcyBhIGRlbGV0aW9uIGVmZmVjdCBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gSG93ZXZlciwgc2luY2Ugd2UncmUgZ29pbmcgdG8gcmVtYWluIG9uIHRoZSBmYWxsYmFjaywgd2Ugbm8gbG9uZ2VyIHdhbnRcbiAgICAvLyB0byBkZWxldGUgaXQuIFNvIHdlIG5lZWQgdG8gcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QuIERlbGV0aW9ucyBhcmUgc3RvcmVkXG4gICAgLy8gb24gdGhlIHNhbWUgbGlzdCBhcyBlZmZlY3RzLiBXZSB3YW50IHRvIGtlZXAgdGhlIGVmZmVjdHMgZnJvbSB0aGUgcHJpbWFyeVxuICAgIC8vIHRyZWUuIFNvIHdlIGNvcHkgdGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQncyBlZmZlY3QgbGlzdCwgd2hpY2ggZG9lcyBub3RcbiAgICAvLyBpbmNsdWRlIHRoZSBmYWxsYmFjayBkZWxldGlvbiBlZmZlY3QuXG5cblxuICAgIHZhciBwcm9ncmVzc2VkTGFzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50Lmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAocHJvZ3Jlc3NlZExhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuZmlyc3RFZmZlY3Q7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gcHJvZ3Jlc3NlZExhc3RFZmZlY3Q7XG4gICAgICBwcm9ncmVzc2VkTGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogUmVzZXQgdGhpcyBzb21ld2hlcmUgZWxzZT8gTG9sIGxlZ2FjeSBtb2RlIGlzIHNvIHdlaXJkLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwgcHJpbWFyeUNoaWxkUHJvcHMpO1xuICB9XG5cbiAgdmFyIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcblxuICBpZiAoY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCAhPT0gbnVsbCkge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQsIGZhbGxiYWNrQ2hpbGRyZW4pO1xuICB9IGVsc2Uge1xuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTsgLy8gTmVlZHMgYSBwbGFjZW1lbnQgZWZmZWN0IGJlY2F1c2UgdGhlIHBhcmVudCAodGhlIFN1c3BlbnNlIGJvdW5kYXJ5KSBhbHJlYWR5XG4gICAgLy8gbW91bnRlZCBidXQgdGhpcyBpcyBhIG5ldyBmaWJlci5cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICBmYWxsYmFja0NoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHByaW1hcnlDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nID0gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHByaW1hcnlDaGlsZEZyYWdtZW50O1xuICByZXR1cm4gZmFsbGJhY2tDaGlsZEZyYWdtZW50O1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVdvcmtPbkZpYmVyKGZpYmVyLCByZW5kZXJMYW5lcykge1xuICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChmaWJlci5yZXR1cm4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gcHJvcGFnYXRlU3VzcGVuc2VDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBmaXJzdENoaWxkLCByZW5kZXJMYW5lcykge1xuICAvLyBNYXJrIGFueSBTdXNwZW5zZSBib3VuZGFyaWVzIHdpdGggZmFsbGJhY2tzIGFzIGhhdmluZyB3b3JrIHRvIGRvLlxuICAvLyBJZiB0aGV5IHdlcmUgcHJldmlvdXNseSBmb3JjZWQgaW50byBmYWxsYmFja3MsIHRoZXkgbWF5IG5vdyBiZSBhYmxlXG4gIC8vIHRvIHVuYmxvY2suXG4gIHZhciBub2RlID0gZmlyc3RDaGlsZDtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgIHZhciBzdGF0ZSA9IG5vZGUubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHNjaGVkdWxlV29ya09uRmliZXIobm9kZSwgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlTGlzdENvbXBvbmVudCkge1xuICAgICAgLy8gSWYgdGhlIHRhaWwgaXMgaGlkZGVuIHRoZXJlIG1pZ2h0IG5vdCBiZSBhbiBTdXNwZW5zZSBib3VuZGFyaWVzXG4gICAgICAvLyB0byBzY2hlZHVsZSB3b3JrIG9uLiBJbiB0aGlzIGNhc2Ugd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBvbiB0aGVcbiAgICAgIC8vIGxpc3QgaXRzZWxmLlxuICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSB0byB0cmF2ZXJzZSB0byB0aGUgY2hpbGRyZW4gb2YgdGhlIGxpc3Qgc2luY2VcbiAgICAgIC8vIHRoZSBsaXN0IHdpbGwgcHJvcGFnYXRlIHRoZSBjaGFuZ2Ugd2hlbiBpdCByZXJlbmRlcnMuXG4gICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kTGFzdENvbnRlbnRSb3coZmlyc3RDaGlsZCkge1xuICAvLyBUaGlzIGlzIGdvaW5nIHRvIGZpbmQgdGhlIGxhc3Qgcm93IGFtb25nIHRoZXNlIGNoaWxkcmVuIHRoYXQgaXMgYWxyZWFkeVxuICAvLyBzaG93aW5nIGNvbnRlbnQgb24gdGhlIHNjcmVlbiwgYXMgb3Bwb3NlZCB0byBiZWluZyBpbiBmYWxsYmFjayBzdGF0ZSBvclxuICAvLyBuZXcuIElmIGEgcm93IGhhcyBtdWx0aXBsZSBTdXNwZW5zZSBib3VuZGFyaWVzLCBhbnkgb2YgdGhlbSBiZWluZyBpbiB0aGVcbiAgLy8gZmFsbGJhY2sgc3RhdGUsIGNvdW50cyBhcyB0aGUgd2hvbGUgcm93IGJlaW5nIGluIGEgZmFsbGJhY2sgc3RhdGUuXG4gIC8vIE5vdGUgdGhhdCB0aGUgXCJyb3dzXCIgd2lsbCBiZSB3b3JrSW5Qcm9ncmVzcywgYnV0IGFueSBuZXN0ZWQgY2hpbGRyZW5cbiAgLy8gd2lsbCBzdGlsbCBiZSBjdXJyZW50IHNpbmNlIHdlIGhhdmVuJ3QgcmVuZGVyZWQgdGhlbSB5ZXQuIFRoZSBtb3VudGVkXG4gIC8vIG9yZGVyIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgdGhlIG5ldyBvcmRlci4gV2UgdXNlIHRoZSBuZXcgb3JkZXIuXG4gIHZhciByb3cgPSBmaXJzdENoaWxkO1xuICB2YXIgbGFzdENvbnRlbnRSb3cgPSBudWxsO1xuXG4gIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgIGlmIChjdXJyZW50Um93ICE9PSBudWxsICYmIGZpbmRGaXJzdFN1c3BlbmRlZChjdXJyZW50Um93KSA9PT0gbnVsbCkge1xuICAgICAgbGFzdENvbnRlbnRSb3cgPSByb3c7XG4gICAgfVxuXG4gICAgcm93ID0gcm93LnNpYmxpbmc7XG4gIH1cblxuICByZXR1cm4gbGFzdENvbnRlbnRSb3c7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmV2ZWFsT3JkZXIocmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmIChyZXZlYWxPcmRlciAhPT0gdW5kZWZpbmVkICYmIHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ3RvZ2V0aGVyJyAmJiAhZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdKSB7XG4gICAgICBkaWRXYXJuQWJvdXRSZXZlYWxPcmRlcltyZXZlYWxPcmRlcl0gPSB0cnVlO1xuXG4gICAgICBpZiAodHlwZW9mIHJldmVhbE9yZGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICBzd2l0Y2ggKHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgICAgY2FzZSAnZm9yd2FyZHMnOlxuICAgICAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnVXNlIGxvd2VyY2FzZSBcIiVzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBjYXNlICdmb3J3YXJkJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZCc6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgdmFsaWQgdmFsdWUgZm9yIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnUmVhY3QgdXNlcyB0aGUgLXMgc3VmZml4IGluIHRoZSBzcGVsbGluZy4gVXNlIFwiJXNzXCIgaW5zdGVhZC4nLCByZXZlYWxPcmRlciwgcmV2ZWFsT3JkZXIudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcignJXMgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ0RpZCB5b3UgbWVhbiBcInRvZ2V0aGVyXCIsIFwiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiPycsIHJldmVhbE9yZGVyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpIHtcbiAge1xuICAgIGlmICh0YWlsTW9kZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0pIHtcbiAgICAgIGlmICh0YWlsTW9kZSAhPT0gJ2NvbGxhcHNlZCcgJiYgdGFpbE1vZGUgIT09ICdoaWRkZW4nKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1wiJXNcIiBpcyBub3QgYSBzdXBwb3J0ZWQgdmFsdWUgZm9yIHRhaWwgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJjb2xsYXBzZWRcIiBvciBcImhpZGRlblwiPycsIHRhaWxNb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAocmV2ZWFsT3JkZXIgIT09ICdmb3J3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICdiYWNrd2FyZHMnKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zW3RhaWxNb2RlXSA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJzxTdXNwZW5zZUxpc3QgdGFpbD1cIiVzXCIgLz4gaXMgb25seSB2YWxpZCBpZiByZXZlYWxPcmRlciBpcyAnICsgJ1wiZm9yd2FyZHNcIiBvciBcImJhY2t3YXJkc1wiLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBzcGVjaWZ5IHJldmVhbE9yZGVyPVwiZm9yd2FyZHNcIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0TmVzdGVkQ2hpbGQoY2hpbGRTbG90LCBpbmRleCkge1xuICB7XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGNoaWxkU2xvdCk7XG4gICAgdmFyIGlzSXRlcmFibGUgPSAhaXNBcnJheSAmJiB0eXBlb2YgZ2V0SXRlcmF0b3JGbihjaGlsZFNsb3QpID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGlzQXJyYXkgfHwgaXNJdGVyYWJsZSkge1xuICAgICAgdmFyIHR5cGUgPSBpc0FycmF5ID8gJ2FycmF5JyA6ICdpdGVyYWJsZSc7XG5cbiAgICAgIGVycm9yKCdBIG5lc3RlZCAlcyB3YXMgcGFzc2VkIHRvIHJvdyAjJXMgaW4gPFN1c3BlbnNlTGlzdCAvPi4gV3JhcCBpdCBpbiAnICsgJ2FuIGFkZGl0aW9uYWwgU3VzcGVuc2VMaXN0IHRvIGNvbmZpZ3VyZSBpdHMgcmV2ZWFsT3JkZXI6ICcgKyAnPFN1c3BlbnNlTGlzdCByZXZlYWxPcmRlcj0uLi4+IC4uLiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPnslc308L1N1c3BlbnNlTGlzdD4gLi4uICcgKyAnPC9TdXNwZW5zZUxpc3Q+JywgdHlwZSwgaW5kZXgsIHR5cGUpO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3VzcGVuc2VMaXN0Q2hpbGRyZW4oY2hpbGRyZW4sIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAoKHJldmVhbE9yZGVyID09PSAnZm9yd2FyZHMnIHx8IHJldmVhbE9yZGVyID09PSAnYmFja3dhcmRzJykgJiYgY2hpbGRyZW4gIT09IHVuZGVmaW5lZCAmJiBjaGlsZHJlbiAhPT0gbnVsbCAmJiBjaGlsZHJlbiAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkcmVuW2ldLCBpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2hpbGRyZW5JdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChjaGlsZHJlbik7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW5JdGVyYXRvcikge1xuICAgICAgICAgICAgdmFyIHN0ZXAgPSBjaGlsZHJlbkl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgIHZhciBfaSA9IDA7XG5cbiAgICAgICAgICAgIGZvciAoOyAhc3RlcC5kb25lOyBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKHN0ZXAudmFsdWUsIF9pKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIF9pKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVycm9yKCdBIHNpbmdsZSByb3cgd2FzIHBhc3NlZCB0byBhIDxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9XCIlc1wiIC8+LiAnICsgJ1RoaXMgaXMgbm90IHVzZWZ1bCBzaW5jZSBpdCBuZWVkcyBtdWx0aXBsZSByb3dzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBwYXNzIG11bHRpcGxlIGNoaWxkcmVuIG9yIGFuIGFycmF5PycsIHJldmVhbE9yZGVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGlzQmFja3dhcmRzLCB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmcpIHtcbiAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0ge1xuICAgICAgaXNCYWNrd2FyZHM6IGlzQmFja3dhcmRzLFxuICAgICAgcmVuZGVyaW5nOiBudWxsLFxuICAgICAgcmVuZGVyaW5nU3RhcnRUaW1lOiAwLFxuICAgICAgbGFzdDogbGFzdENvbnRlbnRSb3csXG4gICAgICB0YWlsOiB0YWlsLFxuICAgICAgdGFpbE1vZGU6IHRhaWxNb2RlLFxuICAgICAgbGFzdEVmZmVjdDogbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZ1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyBvYmplY3QgZnJvbSBwcmV2aW91cyByZW5kZXJzLlxuICAgIHJlbmRlclN0YXRlLmlzQmFja3dhcmRzID0gaXNCYWNrd2FyZHM7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSAwO1xuICAgIHJlbmRlclN0YXRlLmxhc3QgPSBsYXN0Q29udGVudFJvdztcbiAgICByZW5kZXJTdGF0ZS50YWlsID0gdGFpbDtcbiAgICByZW5kZXJTdGF0ZS50YWlsTW9kZSA9IHRhaWxNb2RlO1xuICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nO1xuICB9XG59IC8vIFRoaXMgY2FuIGVuZCB1cCByZW5kZXJpbmcgdGhpcyBjb21wb25lbnQgbXVsdGlwbGUgcGFzc2VzLlxuLy8gVGhlIGZpcnN0IHBhc3Mgc3BsaXRzIHRoZSBjaGlsZHJlbiBmaWJlcnMgaW50byB0d28gc2V0cy4gQSBoZWFkIGFuZCB0YWlsLlxuLy8gV2UgZmlyc3QgcmVuZGVyIHRoZSBoZWFkLiBJZiBhbnl0aGluZyBpcyBpbiBmYWxsYmFjayBzdGF0ZSwgd2UgZG8gYW5vdGhlclxuLy8gcGFzcyB0aHJvdWdoIGJlZ2luV29yayB0byByZXJlbmRlciBhbGwgY2hpbGRyZW4gKGluY2x1ZGluZyB0aGUgdGFpbCkgd2l0aFxuLy8gdGhlIGZvcmNlIHN1c3BlbmQgY29udGV4dC4gSWYgdGhlIGZpcnN0IHJlbmRlciBkaWRuJ3QgaGF2ZSBhbnl0aGluZyBpblxuLy8gaW4gZmFsbGJhY2sgc3RhdGUuIFRoZW4gd2UgcmVuZGVyIGVhY2ggcm93IGluIHRoZSB0YWlsIG9uZS1ieS1vbmUuXG4vLyBUaGF0IGhhcHBlbnMgaW4gdGhlIGNvbXBsZXRlV29yayBwaGFzZSB3aXRob3V0IGdvaW5nIGJhY2sgdG8gYmVnaW5Xb3JrLlxuXG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJldmVhbE9yZGVyID0gbmV4dFByb3BzLnJldmVhbE9yZGVyO1xuICB2YXIgdGFpbE1vZGUgPSBuZXh0UHJvcHMudGFpbDtcbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVUYWlsT3B0aW9ucyh0YWlsTW9kZSwgcmV2ZWFsT3JkZXIpO1xuICB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKG5ld0NoaWxkcmVuLCByZXZlYWxPcmRlcik7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvdWxkRm9yY2VGYWxsYmFjayA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG5cbiAgaWYgKHNob3VsZEZvcmNlRmFsbGJhY2spIHtcbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICB9IGVsc2Uge1xuICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gY3VycmVudCAhPT0gbnVsbCAmJiAoY3VycmVudC5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgIC8vIElmIHdlIHByZXZpb3VzbHkgZm9yY2VkIGEgZmFsbGJhY2ssIHdlIG5lZWQgdG8gc2NoZWR1bGUgd29ya1xuICAgICAgLy8gb24gYW55IG5lc3RlZCBib3VuZGFyaWVzIHRvIGxldCB0aGVtIGtub3cgdG8gdHJ5IHRvIHJlbmRlclxuICAgICAgLy8gYWdhaW4uIFRoaXMgaXMgdGhlIHNhbWUgYXMgY29udGV4dCB1cGRhdGluZy5cbiAgICAgIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MuY2hpbGQsIHJlbmRlckxhbmVzKTtcbiAgICB9XG5cbiAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICB9XG5cbiAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc3VzcGVuc2VDb250ZXh0KTtcblxuICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgU3VzcGVuc2VMaXN0IGRvZXNuJ3Qgd29yayBzbyB3ZSBqdXN0XG4gICAgLy8gdXNlIG1ha2UgaXQgYSBub29wIGJ5IHRyZWF0aW5nIGl0IGFzIHRoZSBkZWZhdWx0IHJldmVhbE9yZGVyLlxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAocmV2ZWFsT3JkZXIpIHtcbiAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXN0Q29udGVudFJvdyA9IGZpbmRMYXN0Q29udGVudFJvdyh3b3JrSW5Qcm9ncmVzcy5jaGlsZCk7XG4gICAgICAgICAgdmFyIHRhaWw7XG5cbiAgICAgICAgICBpZiAobGFzdENvbnRlbnRSb3cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFRoZSB3aG9sZSBsaXN0IGlzIHBhcnQgb2YgdGhlIHRhaWwuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBjb3VsZCBmYXN0IHBhdGggYnkganVzdCByZW5kZXJpbmcgdGhlIHRhaWwgbm93LlxuICAgICAgICAgICAgdGFpbCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBEaXNjb25uZWN0IHRoZSB0YWlsIHJvd3MgYWZ0ZXIgdGhlIGNvbnRlbnQgcm93LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZW0gc2VwYXJhdGVseSBsYXRlci5cbiAgICAgICAgICAgIHRhaWwgPSBsYXN0Q29udGVudFJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgbGFzdENvbnRlbnRSb3cuc2libGluZyA9IG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICB0YWlsLCBsYXN0Q29udGVudFJvdywgdGFpbE1vZGUsIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2JhY2t3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBXZSdyZSBnb2luZyB0byBmaW5kIHRoZSBmaXJzdCByb3cgdGhhdCBoYXMgZXhpc3RpbmcgY29udGVudC5cbiAgICAgICAgICAvLyBBdCB0aGUgc2FtZSB0aW1lIHdlJ3JlIGdvaW5nIHRvIHJldmVyc2UgdGhlIGxpc3Qgb2YgZXZlcnl0aGluZ1xuICAgICAgICAgIC8vIHdlIHBhc3MgaW4gdGhlIG1lYW50aW1lLiBUaGF0J3MgZ29pbmcgdG8gYmUgb3VyIHRhaWwgaW4gcmV2ZXJzZVxuICAgICAgICAgIC8vIG9yZGVyLlxuICAgICAgICAgIHZhciBfdGFpbCA9IG51bGw7XG4gICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcblxuICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50Um93ID0gcm93LmFsdGVybmF0ZTsgLy8gTmV3IHJvd3MgY2FuJ3QgYmUgY29udGVudCByb3dzLlxuXG4gICAgICAgICAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtYWluIGNvbnRlbnQuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcm93O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5leHRSb3cgPSByb3cuc2libGluZztcbiAgICAgICAgICAgIHJvdy5zaWJsaW5nID0gX3RhaWw7XG4gICAgICAgICAgICBfdGFpbCA9IHJvdztcbiAgICAgICAgICAgIHJvdyA9IG5leHRSb3c7XG4gICAgICAgICAgfSAvLyBUT0RPOiBJZiB3b3JrSW5Qcm9ncmVzcy5jaGlsZCBpcyBudWxsLCB3ZSBjYW4gY29udGludWUgb24gdGhlIHRhaWwgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgdHJ1ZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBfdGFpbCwgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICd0b2dldGhlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIGZhbHNlLCAvLyBpc0JhY2t3YXJkc1xuICAgICAgICAgIG51bGwsIC8vIHRhaWxcbiAgICAgICAgICBudWxsLCAvLyBsYXN0XG4gICAgICAgICAgdW5kZWZpbmVkLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgLy8gVGhlIGRlZmF1bHQgcmV2ZWFsIG9yZGVyIGlzIHRoZSBzYW1lIGFzIG5vdCBoYXZpbmdcbiAgICAgICAgICAvLyBhIGJvdW5kYXJ5LlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBQb3J0YWxzIGFyZSBzcGVjaWFsIGJlY2F1c2Ugd2UgZG9uJ3QgYXBwZW5kIHRoZSBjaGlsZHJlbiBkdXJpbmcgbW91bnRcbiAgICAvLyBidXQgYXQgY29tbWl0LiBUaGVyZWZvcmUgd2UgbmVlZCB0byB0cmFjayBpbnNlcnRpb25zIHdoaWNoIHRoZSBub3JtYWxcbiAgICAvLyBmbG93IGRvZXNuJ3QgZG8gZHVyaW5nIG1vdW50LiBUaGlzIGRvZXNuJ3QgaGFwcGVuIGF0IHRoZSByb290IGJlY2F1c2VcbiAgICAvLyB0aGUgcm9vdCBhbHdheXMgc3RhcnRzIHdpdGggYSBcImN1cnJlbnRcIiB3aXRoIGEgbnVsbCBjaGlsZC5cbiAgICAvLyBUT0RPOiBDb25zaWRlciB1bmlmeWluZyB0aGlzIHdpdGggaG93IHRoZSByb290IHdvcmtzLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcmVjb25jaWxlQ2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIG51bGwsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxudmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOb1ZhbHVlUHJvcE9uQ29udGV4dFByb3ZpZGVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRQcm92aWRlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHByb3ZpZGVyVHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gIHZhciBjb250ZXh0ID0gcHJvdmlkZXJUeXBlLl9jb250ZXh0O1xuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBvbGRQcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7XG4gIHZhciBuZXdWYWx1ZSA9IG5ld1Byb3BzLnZhbHVlO1xuXG4gIHtcbiAgICBpZiAoISgndmFsdWUnIGluIG5ld1Byb3BzKSkge1xuICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlcikge1xuICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJ1RoZSBgdmFsdWVgIHByb3AgaXMgcmVxdWlyZWQgZm9yIHRoZSBgPENvbnRleHQuUHJvdmlkZXI+YC4gRGlkIHlvdSBtaXNzcGVsbCBpdCBvciBmb3JnZXQgdG8gcGFzcyBpdD8nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJvdmlkZXJQcm9wVHlwZXMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChwcm92aWRlclByb3BUeXBlcykge1xuICAgICAgY2hlY2tQcm9wVHlwZXMocHJvdmlkZXJQcm9wVHlwZXMsIG5ld1Byb3BzLCAncHJvcCcsICdDb250ZXh0LlByb3ZpZGVyJyk7XG4gICAgfVxuICB9XG5cbiAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG5cbiAgaWYgKG9sZFByb3BzICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFZhbHVlID0gb2xkUHJvcHMudmFsdWU7XG4gICAgdmFyIGNoYW5nZWRCaXRzID0gY2FsY3VsYXRlQ2hhbmdlZEJpdHMoY29udGV4dCwgbmV3VmFsdWUsIG9sZFZhbHVlKTtcblxuICAgIGlmIChjaGFuZ2VkQml0cyA9PT0gMCkge1xuICAgICAgLy8gTm8gY2hhbmdlLiBCYWlsb3V0IGVhcmx5IGlmIGNoaWxkcmVuIGFyZSB0aGUgc2FtZS5cbiAgICAgIGlmIChvbGRQcm9wcy5jaGlsZHJlbiA9PT0gbmV3UHJvcHMuY2hpbGRyZW4gJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkpIHtcbiAgICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGNvbnRleHQgdmFsdWUgY2hhbmdlZC4gU2VhcmNoIGZvciBtYXRjaGluZyBjb25zdW1lcnMgYW5kIHNjaGVkdWxlXG4gICAgICAvLyB0aGVtIHRvIHVwZGF0ZS5cbiAgICAgIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG5ld0NoaWxkcmVuID0gbmV3UHJvcHMuY2hpbGRyZW47XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSBmYWxzZTtcblxuZnVuY3Rpb24gdXBkYXRlQ29udGV4dENvbnN1bWVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgY29udGV4dCA9IHdvcmtJblByb2dyZXNzLnR5cGU7IC8vIFRoZSBsb2dpYyBiZWxvdyBmb3IgQ29udGV4dCBkaWZmZXJzIGRlcGVuZGluZyBvbiBQUk9EIG9yIERFViBtb2RlLiBJblxuICAvLyBERVYgbW9kZSwgd2UgY3JlYXRlIGEgc2VwYXJhdGUgb2JqZWN0IGZvciBDb250ZXh0LkNvbnN1bWVyIHRoYXQgYWN0c1xuICAvLyBsaWtlIGEgcHJveHkgdG8gQ29udGV4dC4gVGhpcyBwcm94eSBvYmplY3QgYWRkcyB1bm5lY2Vzc2FyeSBjb2RlIGluIFBST0RcbiAgLy8gc28gd2UgdXNlIHRoZSBvbGQgYmVoYXZpb3VyIChDb250ZXh0LkNvbnN1bWVyIHJlZmVyZW5jZXMgQ29udGV4dCkgdG9cbiAgLy8gcmVkdWNlIHNpemUgYW5kIG92ZXJoZWFkLiBUaGUgc2VwYXJhdGUgb2JqZWN0IHJlZmVyZW5jZXMgY29udGV4dCB2aWFcbiAgLy8gYSBwcm9wZXJ0eSBjYWxsZWQgXCJfY29udGV4dFwiLCB3aGljaCBhbHNvIGdpdmVzIHVzIHRoZSBhYmlsaXR5IHRvIGNoZWNrXG4gIC8vIGluIERFViBtb2RlIGlmIHRoaXMgcHJvcGVydHkgZXhpc3RzIG9yIG5vdCBhbmQgd2FybiBpZiBpdCBkb2VzIG5vdC5cblxuICB7XG4gICAgaWYgKGNvbnRleHQuX2NvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gVGhpcyBtYXkgYmUgYmVjYXVzZSBpdCdzIGEgQ29udGV4dCAocmF0aGVyIHRoYW4gYSBDb25zdW1lcikuXG4gICAgICAvLyBPciBpdCBtYXkgYmUgYmVjYXVzZSBpdCdzIG9sZGVyIFJlYWN0IHdoZXJlIHRoZXkncmUgdGhlIHNhbWUgdGhpbmcuXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gd2FybiBpZiB3ZSdyZSBzdXJlIGl0J3MgYSBuZXcgUmVhY3QuXG4gICAgICBpZiAoY29udGV4dCAhPT0gY29udGV4dC5Db25zdW1lcikge1xuICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lcikge1xuICAgICAgICAgIGhhc1dhcm5lZEFib3V0VXNpbmdDb250ZXh0QXNDb25zdW1lciA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0PiBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0Ll9jb250ZXh0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHJlbmRlciA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ0EgY29udGV4dCBjb25zdW1lciB3YXMgcmVuZGVyZWQgd2l0aCBtdWx0aXBsZSBjaGlsZHJlbiwgb3IgYSBjaGlsZCAnICsgXCJ0aGF0IGlzbid0IGEgZnVuY3Rpb24uIEEgY29udGV4dCBjb25zdW1lciBleHBlY3RzIGEgc2luZ2xlIGNoaWxkIFwiICsgJ3RoYXQgaXMgYSBmdW5jdGlvbi4gSWYgeW91IGRpZCBwYXNzIGEgZnVuY3Rpb24sIG1ha2Ugc3VyZSB0aGVyZSAnICsgJ2lzIG5vIHRyYWlsaW5nIG9yIGxlYWRpbmcgd2hpdGVzcGFjZSBhcm91bmQgaXQuJyk7XG4gICAgfVxuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5ld1ZhbHVlID0gcmVhZENvbnRleHQoY29udGV4dCwgbmV3UHJvcHMudW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbiAgdmFyIG5ld0NoaWxkcmVuO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXdDaGlsZHJlbiA9IHJlbmRlcihuZXdWYWx1ZSk7XG4gICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICB9IC8vIFJlYWN0IERldlRvb2xzIHJlYWRzIHRoaXMgZmxhZy5cblxuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBlcmZvcm1lZFdvcms7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXdDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCkge1xuICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAvLyBSZXVzZSBwcmV2aW91cyBkZXBlbmRlbmNpZXNcbiAgICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50LmRlcGVuZGVuY2llcztcbiAgfVxuXG4gIHtcbiAgICAvLyBEb24ndCB1cGRhdGUgXCJiYXNlXCIgcmVuZGVyIHRpbWVzIGZvciBiYWlsb3V0cy5cbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZygpO1xuICB9XG5cbiAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcyk7IC8vIENoZWNrIGlmIHRoZSBjaGlsZHJlbiBoYXZlIGFueSBwZW5kaW5nIHdvcmsuXG5cbiAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKSkge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBkb24ndCBoYXZlIGFueSB3b3JrIGVpdGhlci4gV2UgY2FuIHNraXAgdGhlbS5cbiAgICAvLyBUT0RPOiBPbmNlIHdlIGFkZCBiYWNrIHJlc3VtaW5nLCB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGNoaWxkcmVuIGFyZVxuICAgIC8vIGEgd29yay1pbi1wcm9ncmVzcyBzZXQuIElmIHNvLCB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZWlyIGVmZmVjdHMuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhpcyBmaWJlciBkb2Vzbid0IGhhdmUgd29yaywgYnV0IGl0cyBzdWJ0cmVlIGRvZXMuIENsb25lIHRoZSBjaGlsZFxuICAgIC8vIGZpYmVycyBhbmQgY29udGludWUuXG4gICAgY2xvbmVDaGlsZEZpYmVycyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW91bnRGaWJlcihjdXJyZW50LCBvbGRXb3JrSW5Qcm9ncmVzcywgbmV3V29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciByZXR1cm5GaWJlciA9IG9sZFdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIGlmIChyZXR1cm5GaWJlciA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dhcCB0aGUgcm9vdCBmaWJlci4nKTtcbiAgICB9IC8vIERpc2Nvbm5lY3QgZnJvbSB0aGUgb2xkIGN1cnJlbnQuXG4gICAgLy8gSXQgd2lsbCBnZXQgZGVsZXRlZC5cblxuXG4gICAgY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIG9sZFdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIENvbm5lY3QgdG8gdGhlIG5ldyB0cmVlLlxuXG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuaW5kZXggPSBvbGRXb3JrSW5Qcm9ncmVzcy5pbmRleDtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gb2xkV29ya0luUHJvZ3Jlc3Muc2libGluZztcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5yZXR1cm4gPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmVmID0gb2xkV29ya0luUHJvZ3Jlc3MucmVmOyAvLyBSZXBsYWNlIHRoZSBjaGlsZC9zaWJsaW5nIHBvaW50ZXJzIGFib3ZlIGl0LlxuXG4gICAgaWYgKG9sZFdvcmtJblByb2dyZXNzID09PSByZXR1cm5GaWJlci5jaGlsZCkge1xuICAgICAgcmV0dXJuRmliZXIuY2hpbGQgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHByZXZTaWJsaW5nID0gcmV0dXJuRmliZXIuY2hpbGQ7XG5cbiAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHBhcmVudCB0byBoYXZlIGEgY2hpbGQuJyk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwcmV2U2libGluZy5zaWJsaW5nICE9PSBvbGRXb3JrSW5Qcm9ncmVzcykge1xuICAgICAgICBwcmV2U2libGluZyA9IHByZXZTaWJsaW5nLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZTaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byBmaW5kIHRoZSBwcmV2aW91cyBzaWJsaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHByZXZTaWJsaW5nLnNpYmxpbmcgPSBuZXdXb3JrSW5Qcm9ncmVzcztcbiAgICB9IC8vIERlbGV0ZSB0aGUgb2xkIGZpYmVyIGFuZCBwbGFjZSB0aGUgbmV3IG9uZS5cbiAgICAvLyBTaW5jZSB0aGUgb2xkIGZpYmVyIGlzIGRpc2Nvbm5lY3RlZCwgd2UgaGF2ZSB0byBzY2hlZHVsZSBpdCBtYW51YWxseS5cblxuXG4gICAgdmFyIGxhc3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKGxhc3QgIT09IG51bGwpIHtcbiAgICAgIGxhc3QubmV4dEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY3VycmVudDtcbiAgICB9XG5cbiAgICBjdXJyZW50Lm5leHRFZmZlY3QgPSBudWxsO1xuICAgIGN1cnJlbnQuZmxhZ3MgPSBEZWxldGlvbjtcbiAgICBuZXdXb3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7IC8vIFJlc3RhcnQgd29yayBmcm9tIHRoZSBuZXcgZmliZXIuXG5cbiAgICByZXR1cm4gbmV3V29ya0luUHJvZ3Jlc3M7XG4gIH1cbn1cblxuZnVuY3Rpb24gYmVnaW5Xb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgdXBkYXRlTGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5sYW5lcztcblxuICB7XG4gICAgaWYgKHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCAmJiBjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHdpbGwgcmVzdGFydCB0aGUgYmVnaW4gcGhhc2Ugd2l0aCBhIG5ldyBmaWJlci5cbiAgICAgIHJldHVybiByZW1vdW50RmliZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5rZXksIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcywgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgfHwgbnVsbCwgd29ya0luUHJvZ3Jlc3MubW9kZSwgd29ya0luUHJvZ3Jlc3MubGFuZXMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgIT09IG5ld1Byb3BzIHx8IGhhc0NvbnRleHRDaGFuZ2VkKCkgfHwgKCAvLyBGb3JjZSBhIHJlLXJlbmRlciBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZDpcbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIC8vIElmIHByb3BzIG9yIGNvbnRleHQgY2hhbmdlZCwgbWFyayB0aGUgZmliZXIgYXMgaGF2aW5nIHBlcmZvcm1lZCB3b3JrLlxuICAgICAgLy8gVGhpcyBtYXkgYmUgdW5zZXQgaWYgdGhlIHByb3BzIGFyZSBkZXRlcm1pbmVkIHRvIGJlIGVxdWFsIGxhdGVyIChtZW1vKS5cbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmVzKSkge1xuICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlOyAvLyBUaGlzIGZpYmVyIGRvZXMgbm90IGhhdmUgYW55IHBlbmRpbmcgd29yay4gQmFpbG91dCB3aXRob3V0IGVudGVyaW5nXG4gICAgICAvLyB0aGUgYmVnaW4gcGhhc2UuIFRoZXJlJ3Mgc3RpbGwgc29tZSBib29ra2VlcGluZyB3ZSB0aGF0IG5lZWRzIHRvIGJlIGRvbmVcbiAgICAgIC8vIGluIHRoaXMgb3B0aW1pemVkIHBhdGgsIG1vc3RseSBwdXNoaW5nIHN0dWZmIG9udG8gdGhlIHN0YWNrLlxuXG4gICAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgICAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBuZXdWYWx1ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudmFsdWU7XG4gICAgICAgICAgICBwdXNoUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFByb2ZpbGVyIHNob3VsZCBvbmx5IGNhbGwgb25SZW5kZXIgd2hlbiBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIGFjdHVhbGx5IHJlbmRlcmVkLlxuICAgICAgICAgICAgdmFyIGhhc0NoaWxkV29yayA9IGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAoaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgIH0gLy8gUmVzZXQgZWZmZWN0IGR1cmF0aW9ucyBmb3IgdGhlIG5leHQgZXZlbnR1YWwgZWZmZWN0IHBoYXNlLlxuICAgICAgICAgICAgLy8gVGhlc2UgYXJlIHJlc2V0IGR1cmluZyByZW5kZXIgdG8gYWxsb3cgdGhlIERldlRvb2xzIGNvbW1pdCBob29rIGEgY2hhbmNlIHRvIHJlYWQgdGhlbSxcblxuXG4gICAgICAgICAgICB2YXIgc3RhdGVOb2RlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICAgICAgICAgICAgc3RhdGVOb2RlLmVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHdoZXRoZXIgdG8gcmV0cnkgdGhlIHByaW1hcnkgY2hpbGRyZW4sIG9yIHRvIHNraXAgb3ZlciBpdCBhbmRcbiAgICAgICAgICAgICAgLy8gZ28gc3RyYWlnaHQgdG8gdGhlIGZhbGxiYWNrLiBDaGVjayB0aGUgcHJpb3JpdHkgb2YgdGhlIHByaW1hcnlcbiAgICAgICAgICAgICAgLy8gY2hpbGQgZnJhZ21lbnQuXG5cblxuICAgICAgICAgICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZExhbmVzID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcztcblxuICAgICAgICAgICAgICBpZiAoaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgcHJpbWFyeUNoaWxkTGFuZXMpKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFVzZSB0aGUgbm9ybWFsIHBhdGhcbiAgICAgICAgICAgICAgICAvLyB0byBhdHRlbXB0IHRvIHJlbmRlciB0aGUgcHJpbWFyeSBjaGlsZHJlbiBhZ2Fpbi5cbiAgICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCBkb2VzIG5vdCBoYXZlIHBlbmRpbmcgd29yayBtYXJrZWRcbiAgICAgICAgICAgICAgICAvLyBvbiBpdFxuICAgICAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHNldERlZmF1bHRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCkpOyAvLyBUaGUgcHJpbWFyeSBjaGlsZHJlbiBkbyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgd2l0aCBzdWZmaWNpZW50XG4gICAgICAgICAgICAgICAgLy8gcHJpb3JpdHkuIEJhaWxvdXQuXG5cbiAgICAgICAgICAgICAgICB2YXIgY2hpbGQgPSBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFRoZSBmYWxsYmFjayBjaGlsZHJlbiBoYXZlIHBlbmRpbmcgd29yay4gU2tpcCBvdmVyIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbiBhbmQgd29yayBvbiB0aGUgZmFsbGJhY2suXG4gICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuc2libGluZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBkaWRTdXNwZW5kQmVmb3JlID0gKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgICAgICAgICAgdmFyIF9oYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGRpZFN1c3BlbmRCZWZvcmUpIHtcbiAgICAgICAgICAgICAgaWYgKF9oYXNDaGlsZFdvcmspIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBzb21ldGhpbmcgd2FzIGluIGZhbGxiYWNrIHN0YXRlIGxhc3QgdGltZSwgYW5kIHdlIGhhdmUgYWxsIHRoZVxuICAgICAgICAgICAgICAgIC8vIHNhbWUgY2hpbGRyZW4gdGhlbiB3ZSdyZSBzdGlsbCBpbiBwcm9ncmVzc2l2ZSBsb2FkaW5nIHN0YXRlLlxuICAgICAgICAgICAgICAgIC8vIFNvbWV0aGluZyBtaWdodCBnZXQgdW5ibG9ja2VkIGJ5IHN0YXRlIHVwZGF0ZXMgb3IgcmV0cmllcyBpbiB0aGVcbiAgICAgICAgICAgICAgICAvLyB0cmVlIHdoaWNoIHdpbGwgYWZmZWN0IHRoZSB0YWlsLiBTbyB3ZSBuZWVkIHRvIHVzZSB0aGUgbm9ybWFsXG4gICAgICAgICAgICAgICAgLy8gcGF0aCB0byBjb21wdXRlIHRoZSBjb3JyZWN0IHRhaWwuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICAgICAgICB9IC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgfSAvLyBJZiBub3RoaW5nIHN1c3BlbmRlZCBiZWZvcmUgYW5kIHdlJ3JlIHJlbmRlcmluZyB0aGUgc2FtZSBjaGlsZHJlbixcbiAgICAgICAgICAgIC8vIHRoZW4gdGhlIHRhaWwgZG9lc24ndCBtYXR0ZXIuIEFueXRoaW5nIG5ldyB0aGF0IHN1c3BlbmRzIHdpbGwgd29ya1xuICAgICAgICAgICAgLy8gaW4gdGhlIFwidG9nZXRoZXJcIiBtb2RlLCBzbyB3ZSBjYW4gY29udGludWUgZnJvbSB0aGUgc3RhdGUgd2UgaGFkLlxuXG5cbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBSZXNldCB0byB0aGUgXCJ0b2dldGhlclwiIG1vZGUgaW4gY2FzZSB3ZSd2ZSBzdGFydGVkIGEgZGlmZmVyZW50XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBpbiB0aGUgcGFzdCBidXQgZGlkbid0IGNvbXBsZXRlIGl0LlxuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBudWxsO1xuICAgICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG5cbiAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWYgbm9uZSBvZiB0aGUgY2hpbGRyZW4gaGFkIGFueSB3b3JrLCB0aGF0IG1lYW5zIHRoYXQgbm9uZSBvZlxuICAgICAgICAgICAgICAvLyB0aGVtIGdvdCByZXRyaWVkIHNvIHRoZXknbGwgc3RpbGwgYmUgYmxvY2tlZCBpbiB0aGUgc2FtZSB3YXlcbiAgICAgICAgICAgICAgLy8gYXMgYmVmb3JlLiBXZSBjYW4gZmFzdCBiYWlsIG91dC5cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgICAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOZWVkIHRvIGNoZWNrIGlmIHRoZSB0cmVlIHN0aWxsIG5lZWRzIHRvIGJlIGRlZmVycmVkLiBUaGlzIGlzXG4gICAgICAgICAgICAvLyBhbG1vc3QgaWRlbnRpY2FsIHRvIHRoZSBsb2dpYyB1c2VkIGluIHRoZSBub3JtYWwgdXBkYXRlIHBhdGgsXG4gICAgICAgICAgICAvLyBzbyB3ZSdsbCBqdXN0IGVudGVyIHRoYXQuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2UnbGwgYmFpbCBvdXRcbiAgICAgICAgICAgIC8vIGF0IHRoZSBuZXh0IGxldmVsIGluc3RlYWQgb2YgdGhpcyBvbmUsIGJlY2F1c2UgdGhlIGNoaWxkIHByb3BzXG4gICAgICAgICAgICAvLyBoYXZlIG5vdCBjaGFuZ2VkLiBXaGljaCBpcyBmaW5lLlxuICAgICAgICAgICAgLy8gVE9ETzogUHJvYmFibHkgc2hvdWxkIHJlZmFjdG9yIGBiZWdpbldvcmtgIHRvIHNwbGl0IHRoZSBiYWlsb3V0XG4gICAgICAgICAgICAvLyBwYXRoIGZyb20gdGhlIG5vcm1hbCBwYXRoLiBJJ20gdGVtcHRlZCB0byBkbyBhIGxhYmVsZWQgYnJlYWsgaGVyZVxuICAgICAgICAgICAgLy8gYnV0IEkgd29uJ3QgOilcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gTm9MYW5lcztcbiAgICAgICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgoY3VycmVudC5mbGFncyAmIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBvbmx5IGV4aXN0cyBmb3IgbGVnYWN5IG1vZGUuXG4gICAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xOTIxNi5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbiB0aGlzIGZpYmVyLCBidXQgdGhlcmUgYXJlIG5vIG5ldyBwcm9wc1xuICAgICAgICAvLyBub3IgbGVnYWN5IGNvbnRleHQuIFNldCB0aGlzIHRvIGZhbHNlLiBJZiBhbiB1cGRhdGUgcXVldWUgb3IgY29udGV4dFxuICAgICAgICAvLyBjb25zdW1lciBwcm9kdWNlcyBhIGNoYW5nZWQgdmFsdWUsIGl0IHdpbGwgc2V0IHRoaXMgdG8gdHJ1ZS4gT3RoZXJ3aXNlLFxuICAgICAgICAvLyB0aGUgY29tcG9uZW50IHdpbGwgYXNzdW1lIHRoZSBjaGlsZHJlbiBoYXZlIG5vdCBjaGFuZ2VkIGFuZCBiYWlsIG91dC5cbiAgICAgICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkaWRSZWNlaXZlVXBkYXRlID0gZmFsc2U7XG4gIH0gLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY2xlYXIgcGVuZGluZyB1cGRhdGUgcHJpb3JpdHkuXG4gIC8vIFRPRE86IFRoaXMgYXNzdW1lcyB0aGF0IHdlJ3JlIGFib3V0IHRvIGV2YWx1YXRlIHRoZSBjb21wb25lbnQgYW5kIHByb2Nlc3NcbiAgLy8gdGhlIHVwZGF0ZSBxdWV1ZS4gSG93ZXZlciwgdGhlcmUncyBhbiBleGNlcHRpb246IFNpbXBsZU1lbW9Db21wb25lbnRcbiAgLy8gc29tZXRpbWVzIGJhaWxzIG91dCBsYXRlciBpbiB0aGUgYmVnaW4gcGhhc2UuIFRoaXMgaW5kaWNhdGVzIHRoYXQgd2Ugc2hvdWxkXG4gIC8vIG1vdmUgdGhpcyBhc3NpZ25tZW50IG91dCBvZiB0aGUgY29tbW9uIHBhdGggYW5kIGludG8gZWFjaCBicmFuY2guXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG5cbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIEluZGV0ZXJtaW5hdGVDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnR5cGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGVsZW1lbnRUeXBlID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGU7XG4gICAgICAgIHJldHVybiBtb3VudExhenlDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50ID8gdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50LCB1bnJlc29sdmVkUHJvcHMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSBfQ29tcG9uZW50MiA/IF91bnJlc29sdmVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQyLCBfdW5yZXNvbHZlZFByb3BzKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQyLCBfcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Um9vdChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcmV0dXJuIHVwZGF0ZVBvcnRhbENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB2YXIgdHlwZSA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMyID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IHR5cGUgPyBfdW5yZXNvbHZlZFByb3BzMiA6IHJlc29sdmVEZWZhdWx0UHJvcHModHlwZSwgX3VucmVzb2x2ZWRQcm9wczIpO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGb3J3YXJkUmVmKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBfcmVzb2x2ZWRQcm9wczIsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTW9kZTpcbiAgICAgIHJldHVybiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZVByb2ZpbGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgQ29udGV4dENvbnN1bWVyOlxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX3R5cGUyID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHMzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzOyAvLyBSZXNvbHZlIG91dGVyIHByb3BzIGZpcnN0LCB0aGVuIHJlc29sdmUgaW5uZXIgcHJvcHMuXG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMyA9IHJlc29sdmVEZWZhdWx0UHJvcHMoX3R5cGUyLCBfdW5yZXNvbHZlZFByb3BzMyk7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgICAgICAgdmFyIG91dGVyUHJvcFR5cGVzID0gX3R5cGUyLnByb3BUeXBlcztcblxuICAgICAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgICAgIGNoZWNrUHJvcFR5cGVzKG91dGVyUHJvcFR5cGVzLCBfcmVzb2x2ZWRQcm9wczMsIC8vIFJlc29sdmVkIGZvciBvdXRlciBvbmx5XG4gICAgICAgICAgICAgICdwcm9wJywgZ2V0Q29tcG9uZW50TmFtZShfdHlwZTIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMi50eXBlLCBfcmVzb2x2ZWRQcm9wczMpO1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgX3R5cGUyLCBfcmVzb2x2ZWRQcm9wczMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVTaW1wbGVNZW1vQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9Db21wb25lbnQzID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIF91bnJlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczQgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDMgPyBfdW5yZXNvbHZlZFByb3BzNCA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudDMsIF91bnJlc29sdmVkUHJvcHM0KTtcblxuICAgICAgICByZXR1cm4gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9Db21wb25lbnQzLCBfcmVzb2x2ZWRQcm9wczQsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VMaXN0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVMZWdhY3lIaWRkZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHVuaXQgb2Ygd29yayB0YWcgKFwiICsgd29ya0luUHJvZ3Jlc3MudGFnICsgXCIpLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpIHtcbiAgLy8gVGFnIHRoZSBmaWJlciB3aXRoIGFuIHVwZGF0ZSBlZmZlY3QuIFRoaXMgdHVybnMgYSBQbGFjZW1lbnQgaW50b1xuICAvLyBhIFBsYWNlbWVudEFuZFVwZGF0ZS5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xufVxuXG5mdW5jdGlvbiBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpIHtcbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xufVxuXG52YXIgYXBwZW5kQWxsQ2hpbGRyZW47XG52YXIgdXBkYXRlSG9zdENvbnRhaW5lcjtcbnZhciB1cGRhdGVIb3N0Q29tcG9uZW50JDE7XG52YXIgdXBkYXRlSG9zdFRleHQkMTtcblxue1xuICAvLyBNdXRhdGlvbiBtb2RlXG4gIGFwcGVuZEFsbENoaWxkcmVuID0gZnVuY3Rpb24gKHBhcmVudCwgd29ya0luUHJvZ3Jlc3MsIG5lZWRzVmlzaWJpbGl0eVRvZ2dsZSwgaXNIaWRkZW4pIHtcbiAgICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBjcmVhdGVkIGJ1dCB3ZSBuZWVkIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIGFwcGVuZEluaXRpYWxDaGlsZChwYXJlbnQsIG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVIb3N0Q29udGFpbmVyID0gZnVuY3Rpb24gKHdvcmtJblByb2dyZXNzKSB7Ly8gTm9vcFxuICB9O1xuXG4gIHVwZGF0ZUhvc3RDb21wb25lbnQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICAgIC8vIElmIHdlIGhhdmUgYW4gYWx0ZXJuYXRlLCB0aGF0IG1lYW5zIHRoaXMgaXMgYW4gdXBkYXRlIGFuZCB3ZSBuZWVkIHRvXG4gICAgLy8gc2NoZWR1bGUgYSBzaWRlLWVmZmVjdCB0byBkbyB0aGUgdXBkYXRlcy5cbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG5cbiAgICBpZiAob2xkUHJvcHMgPT09IG5ld1Byb3BzKSB7XG4gICAgICAvLyBJbiBtdXRhdGlvbiBtb2RlLCB0aGlzIGlzIHN1ZmZpY2llbnQgZm9yIGEgYmFpbG91dCBiZWNhdXNlXG4gICAgICAvLyB3ZSB3b24ndCB0b3VjaCB0aGlzIG5vZGUgZXZlbiBpZiBjaGlsZHJlbiBjaGFuZ2VkLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZ2V0IHVwZGF0ZWQgYmVjYXVzZSBvbmUgb2Ygb3VyIGNoaWxkcmVuIHVwZGF0ZWQsIHdlIGRvbid0XG4gICAgLy8gaGF2ZSBuZXdQcm9wcyBzbyB3ZSdsbCBoYXZlIHRvIHJldXNlIHRoZW0uXG4gICAgLy8gVE9ETzogU3BsaXQgdGhlIHVwZGF0ZSBBUEkgYXMgc2VwYXJhdGUgZm9yIHRoZSBwcm9wcyB2cy4gY2hpbGRyZW4uXG4gICAgLy8gRXZlbiBiZXR0ZXIgd291bGQgYmUgaWYgY2hpbGRyZW4gd2VyZW4ndCBzcGVjaWFsIGNhc2VkIGF0IGFsbCB0aG8uXG5cblxuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogRXhwZXJpZW5jaW5nIGFuIGVycm9yIHdoZXJlIG9sZFByb3BzIGlzIG51bGwuIFN1Z2dlc3RzIGEgaG9zdFxuICAgIC8vIGNvbXBvbmVudCBpcyBoaXR0aW5nIHRoZSByZXN1bWUgcGF0aC4gRmlndXJlIG91dCB3aHkuIFBvc3NpYmx5XG4gICAgLy8gcmVsYXRlZCB0byBgaGlkZGVuYC5cblxuICAgIHZhciB1cGRhdGVQYXlsb2FkID0gcHJlcGFyZVVwZGF0ZShpbnN0YW5jZSwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGN1cnJlbnRIb3N0Q29udGV4dCk7IC8vIFRPRE86IFR5cGUgdGhpcyBzcGVjaWZpYyB0byB0aGlzIHR5cGUgb2YgY29tcG9uZW50LlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgICAvLyBpcyBhIG5ldyByZWYgd2UgbWFyayB0aGlzIGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGlzIGRvbmUgaW4gY29tbWl0V29yay5cblxuICAgIGlmICh1cGRhdGVQYXlsb2FkKSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdFRleHQkMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCkge1xuICAgIC8vIElmIHRoZSB0ZXh0IGRpZmZlcnMsIG1hcmsgaXQgYXMgYW4gdXBkYXRlLiBBbGwgdGhlIHdvcmsgaW4gZG9uZSBpbiBjb21taXRXb3JrLlxuICAgIGlmIChvbGRUZXh0ICE9PSBuZXdUZXh0KSB7XG4gICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgaGFzUmVuZGVyZWRBVGFpbEZhbGxiYWNrKSB7XG4gIGlmIChnZXRJc0h5ZHJhdGluZygpKSB7XG4gICAgLy8gSWYgd2UncmUgaHlkcmF0aW5nLCB3ZSBzaG91bGQgY29uc3VtZSBhcyBtYW55IGl0ZW1zIGFzIHdlIGNhblxuICAgIC8vIHNvIHdlIGRvbid0IGxlYXZlIGFueSBiZWhpbmQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChyZW5kZXJTdGF0ZS50YWlsTW9kZSkge1xuICAgIGNhc2UgJ2hpZGRlbic6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgdGFpbE5vZGUgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICB2YXIgbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAodGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAodGFpbE5vZGUuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBsYXN0VGFpbE5vZGUgPSB0YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0YWlsTm9kZSA9IHRhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAobGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBEZXRhY2ggdGhlIGluc2VydGlvbiBhZnRlciB0aGUgbGFzdCBub2RlIHRoYXQgd2FzIGFscmVhZHlcbiAgICAgICAgICAvLyBpbnNlcnRlZC5cbiAgICAgICAgICBsYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgJ2NvbGxhcHNlZCc6XG4gICAgICB7XG4gICAgICAgIC8vIEFueSBpbnNlcnRpb25zIGF0IHRoZSBlbmQgb2YgdGhlIHRhaWwgbGlzdCBhZnRlciB0aGlzIHBvaW50XG4gICAgICAgIC8vIHNob3VsZCBiZSBpbnZpc2libGUuIElmIHRoZXJlIGFyZSBhbHJlYWR5IG1vdW50ZWQgYm91bmRhcmllc1xuICAgICAgICAvLyBhbnl0aGluZyBiZWZvcmUgdGhlbSBhcmUgbm90IGNvbnNpZGVyZWQgZm9yIGNvbGxhcHNpbmcuXG4gICAgICAgIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIHdob2xlIHRhaWwgdG8gZmluZCBpZlxuICAgICAgICAvLyB0aGVyZSBhcmUgYW55LlxuICAgICAgICB2YXIgX3RhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIF9sYXN0VGFpbE5vZGUgPSBudWxsO1xuXG4gICAgICAgIHdoaWxlIChfdGFpbE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoX3RhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgX2xhc3RUYWlsTm9kZSA9IF90YWlsTm9kZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBfdGFpbE5vZGUgPSBfdGFpbE5vZGUuc2libGluZztcbiAgICAgICAgfSAvLyBOZXh0IHdlJ3JlIHNpbXBseSBnb2luZyB0byBkZWxldGUgYWxsIGluc2VydGlvbnMgYWZ0ZXIgdGhlXG4gICAgICAgIC8vIGxhc3QgcmVuZGVyZWQgaXRlbS5cblxuXG4gICAgICAgIGlmIChfbGFzdFRhaWxOb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gQWxsIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgdGFpbCBhcmUgaW5zZXJ0aW9ucy5cbiAgICAgICAgICBpZiAoIWhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjayAmJiByZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBXZSBzdXNwZW5kZWQgZHVyaW5nIHRoZSBoZWFkLiBXZSB3YW50IHRvIHNob3cgYXQgbGVhc3Qgb25lXG4gICAgICAgICAgICAvLyByb3cgYXQgdGhlIHRhaWwuIFNvIHdlJ2xsIGtlZXAgb24gYW5kIGN1dCBvZmYgdGhlIHJlc3QuXG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJTdGF0ZS50YWlsID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgX2xhc3RUYWlsTm9kZS5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBGcmFnbWVudDpcbiAgICBjYXNlIE1vZGU6XG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3Qod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXNldFdvcmtJblByb2dyZXNzVmVyc2lvbnMoKTtcbiAgICAgICAgdmFyIGZpYmVyUm9vdCA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmliZXJSb290LnBlbmRpbmdDb250ZXh0KSB7XG4gICAgICAgICAgZmliZXJSb290LmNvbnRleHQgPSBmaWJlclJvb3QucGVuZGluZ0NvbnRleHQ7XG4gICAgICAgICAgZmliZXJSb290LnBlbmRpbmdDb250ZXh0ID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQuY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoeWRyYXRlZCwgcG9wIHNvIHRoYXQgd2UgY2FuIGRlbGV0ZSBhbnkgcmVtYWluaW5nIGNoaWxkcmVuXG4gICAgICAgICAgLy8gdGhhdCB3ZXJlbid0IGh5ZHJhdGVkLlxuICAgICAgICAgIHZhciB3YXNIeWRyYXRlZCA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmICh3YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHRoZW4gd2UnbGwgbmVlZCB0byBzY2hlZHVsZSBhbiB1cGRhdGUgZm9yXG4gICAgICAgICAgICAvLyB0aGUgY29tbWl0IHNpZGUtZWZmZWN0cyBvbiB0aGUgcm9vdC5cbiAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpYmVyUm9vdC5oeWRyYXRlKSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhbiBlZmZlY3QgdG8gY2xlYXIgdGhpcyBjb250YWluZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IGNvbW1pdC5cbiAgICAgICAgICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgY2FzZSBvZiBSZWFjdCByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciB3aXRoIHByZXZpb3VzIGNoaWxkcmVuLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIHNhZmUgdG8gZG8gZm9yIHVwZGF0ZXMgdG9vLCBiZWNhdXNlIGN1cnJlbnQuY2hpbGQgd291bGQgb25seSBiZSBudWxsXG4gICAgICAgICAgICAvLyBpZiB0aGUgcHJldmlvdXMgcmVuZGVyIHdhcyBudWxsIChzbyB0aGUgdGhlIGNvbnRhaW5lciB3b3VsZCBhbHJlYWR5IGJlIGVtcHR5KS5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZUhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgdXBkYXRlSG9zdENvbXBvbmVudCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcblxuICAgICAgICAgIGlmIChjdXJyZW50LnJlZiAhPT0gd29ya0luUHJvZ3Jlc3MucmVmKSB7XG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW5ld1Byb3BzKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTsgLy8gVE9ETzogTW92ZSBjcmVhdGVJbnN0YW5jZSB0byBiZWdpbldvcmsgYW5kIGtlZXAgaXQgb24gYSBjb250ZXh0XG4gICAgICAgICAgLy8gXCJzdGFja1wiIGFzIHRoZSBwYXJlbnQuIFRoZW4gYXBwZW5kIGNoaWxkcmVuIGFzIHdlIGdvIGluIGJlZ2luV29ya1xuICAgICAgICAgIC8vIG9yIGNvbXBsZXRlV29yayBkZXBlbmRpbmcgb24gd2hldGhlciB3ZSB3YW50IHRvIGFkZCB0aGVtIHRvcC0+ZG93biBvclxuICAgICAgICAgIC8vIGJvdHRvbS0+dXAuIFRvcC0+ZG93biBpcyBmYXN0ZXIgaW4gSUUxMS5cblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAoX3dhc0h5ZHJhdGVkKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgYW5kIGNyZWF0ZUluc3RhbmNlIHN0ZXAgaW50byB0aGUgYmVnaW5QaGFzZVxuICAgICAgICAgICAgLy8gdG8gY29uc29saWRhdGUuXG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpKSB7XG4gICAgICAgICAgICAgIC8vIElmIGNoYW5nZXMgdG8gdGhlIGh5ZHJhdGVkIG5vZGUgbmVlZCB0byBiZSBhcHBsaWVkIGF0IHRoZVxuICAgICAgICAgICAgICAvLyBjb21taXQtcGhhc2Ugd2UgbWFyayB0aGlzIGFzIHN1Y2guXG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGVJbnN0YW5jZSh0eXBlLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIGFwcGVuZEFsbENoaWxkcmVuKGluc3RhbmNlLCB3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGluc3RhbmNlOyAvLyBDZXJ0YWluIHJlbmRlcmVycyByZXF1aXJlIGNvbW1pdC10aW1lIGVmZmVjdHMgZm9yIGluaXRpYWwgbW91bnQuXG4gICAgICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIHN1cHBvcnRzIGF1dG8tZm9jdXMgZm9yIGNlcnRhaW4gZWxlbWVudHMpLlxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHN1Y2ggcmVuZGVyZXJzIGdldCBzY2hlZHVsZWQgZm9yIGxhdGVyIHdvcmsuXG5cbiAgICAgICAgICAgIGlmIChmaW5hbGl6ZUluaXRpYWxDaGlsZHJlbihpbnN0YW5jZSwgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSByZWYgb24gYSBob3N0IG5vZGUgd2UgbmVlZCB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgICAgICBtYXJrUmVmJDEod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBuZXdQcm9wcztcblxuICAgICAgICBpZiAoY3VycmVudCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudC5tZW1vaXplZFByb3BzOyAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZFxuICAgICAgICAgIC8vIHRvIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG5cbiAgICAgICAgICB1cGRhdGVIb3N0VGV4dCQxKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5ld1RleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoISh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT09IG51bGwpKSB7XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJXZSBtdXN0IGhhdmUgbmV3IHByb3BzIGZvciBuZXcgbW91bnRzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gd2UgYWJvcnQgd29yay5cblxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfcm9vdENvbnRhaW5lckluc3RhbmNlID0gZ2V0Um9vdEhvc3RDb250YWluZXIoKTtcblxuICAgICAgICAgIHZhciBfY3VycmVudEhvc3RDb250ZXh0ID0gZ2V0SG9zdENvbnRleHQoKTtcblxuICAgICAgICAgIHZhciBfd2FzSHlkcmF0ZWQyID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZDIpIHtcbiAgICAgICAgICAgIGlmIChwcmVwYXJlVG9IeWRyYXRlSG9zdFRleHRJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAgICAgICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZSA9IGNyZWF0ZVRleHRJbnN0YW5jZShuZXdUZXh0LCBfcm9vdENvbnRhaW5lckluc3RhbmNlLCBfY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB2YXIgbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgICAvLyBTb21ldGhpbmcgc3VzcGVuZGVkLiBSZS1yZW5kZXIgd2l0aCB0aGUgZmFsbGJhY2sgY2hpbGRyZW4uXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lczsgLy8gRG8gbm90IHJlc2V0IHRoZSBlZmZlY3QgbGlzdC5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG5leHREaWRUaW1lb3V0ID0gbmV4dFN0YXRlICE9PSBudWxsO1xuICAgICAgICB2YXIgcHJldkRpZFRpbWVvdXQgPSBmYWxzZTtcblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLmZhbGxiYWNrICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICBwcmV2RGlkVGltZW91dCA9IHByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuZXh0RGlkVGltZW91dCAmJiAhcHJldkRpZFRpbWVvdXQpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHN1YnRyZWVlIGlzIHJ1bm5pbmcgaW4gYmxvY2tpbmcgbW9kZSB3ZSBjYW4gc3VzcGVuZCxcbiAgICAgICAgICAvLyBvdGhlcndpc2Ugd2Ugd29uJ3Qgc3VzcGVuZC5cbiAgICAgICAgICAvLyBUT0RPOiBUaGlzIHdpbGwgc3RpbGwgc3VzcGVuZCBhIHN5bmNocm9ub3VzIHRyZWUgaWYgYW55dGhpbmdcbiAgICAgICAgICAvLyBpbiB0aGUgY29uY3VycmVudCB0cmVlIGFscmVhZHkgc3VzcGVuZGVkIGR1cmluZyB0aGlzIHJlbmRlci5cbiAgICAgICAgICAvLyBUaGlzIGlzIGEga25vd24gYnVnLlxuICAgICAgICAgIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGJhY2sgdG8gdGhyb3dFeGNlcHRpb24gYmVjYXVzZSB0aGlzIGlzIHRvbyBsYXRlXG4gICAgICAgICAgICAvLyBpZiB0aGlzIGlzIGEgbGFyZ2UgdHJlZSB3aGljaCBpcyBjb21tb24gZm9yIGluaXRpYWwgbG9hZHMuIFdlXG4gICAgICAgICAgICAvLyBkb24ndCBrbm93IGlmIHdlIHNob3VsZCByZXN0YXJ0IGEgcmVuZGVyIG9yIG5vdCB1bnRpbCB3ZSBnZXRcbiAgICAgICAgICAgIC8vIHRoaXMgbWFya2VyLCBhbmQgdGhpcyBpcyB0b28gbGF0ZS5cbiAgICAgICAgICAgIC8vIElmIHRoaXMgcmVuZGVyIGFscmVhZHkgaGFkIGEgcGluZyBvciBsb3dlciBwcmkgdXBkYXRlcyxcbiAgICAgICAgICAgIC8vIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlIGtub3cgd2UncmUgZ29pbmcgdG8gc3VzcGVuZCB3ZVxuICAgICAgICAgICAgLy8gc2hvdWxkIGJlIGFibGUgdG8gaW1tZWRpYXRlbHkgcmVzdGFydCBmcm9tIHdpdGhpbiB0aHJvd0V4Y2VwdGlvbi5cbiAgICAgICAgICAgIHZhciBoYXNJbnZpc2libGVDaGlsZENvbnRleHQgPSBjdXJyZW50ID09PSBudWxsICYmIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWU7XG5cbiAgICAgICAgICAgIGlmIChoYXNJbnZpc2libGVDaGlsZENvbnRleHQgfHwgaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBpbiBhbiBpbnZpc2libGUgdHJlZSBvciBhIG5ldyByZW5kZXIsIHRoZW4gc2hvd2luZ1xuICAgICAgICAgICAgICAvLyB0aGlzIGJvdW5kYXJ5IGlzIG9rLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBPdGhlcndpc2UsIHdlJ3JlIGdvaW5nIHRvIGhhdmUgdG8gaGlkZSBjb250ZW50IHNvIHdlIHNob3VsZFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kIGZvciBsb25nZXIgaWYgcG9zc2libGUuXG4gICAgICAgICAgICAgIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB7XG4gICAgICAgICAgLy8gVE9ETzogT25seSBzY2hlZHVsZSB1cGRhdGVzIGlmIHRoZXNlIHZhbHVlcyBhcmUgbm9uIGVxdWFsLCBpLmUuIGl0IGNoYW5nZWQuXG4gICAgICAgICAgaWYgKG5leHREaWRUaW1lb3V0IHx8IHByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGp1c3QgdGltZWQgb3V0LCBzY2hlZHVsZSBhbiBlZmZlY3QgdG8gYXR0YWNoIGFcbiAgICAgICAgICAgIC8vIHJldHJ5IGxpc3RlbmVyIHRvIHRoZSBwcm9taXNlLiBUaGlzIGZsYWcgaXMgYWxzbyB1c2VkIHRvIGhpZGUgdGhlXG4gICAgICAgICAgICAvLyBwcmltYXJ5IGNoaWxkcmVuLiBJbiBtdXRhdGlvbiBtb2RlLCB3ZSBhbHNvIG5lZWQgdGhlIGZsYWcgdG9cbiAgICAgICAgICAgIC8vICp1bmhpZGUqIGNoaWxkcmVuIHRoYXQgd2VyZSBwcmV2aW91c2x5IGhpZGRlbiwgc28gY2hlY2sgaWYgdGhpc1xuICAgICAgICAgICAgLy8gaXMgY3VycmVudGx5IHRpbWVkIG91dCwgdG9vLlxuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcHJlcGFyZVBvcnRhbE1vdW50KHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIC8vIFBvcCBwcm92aWRlciBmaWJlclxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgLy8gU2FtZSBhcyBjbGFzcyBjb21wb25lbnQgY2FzZS4gSSBwdXQgaXQgZG93biBoZXJlIHNvIHRoYXQgdGhlIHRhZ3MgYXJlXG4gICAgICAgIC8vIHNlcXVlbnRpYWwgdG8gZW5zdXJlIHRoaXMgc3dpdGNoIGlzIGNvbXBpbGVkIHRvIGEganVtcCB0YWJsZS5cbiAgICAgICAgdmFyIF9Db21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihfQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJlbmRlclN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBydW5uaW5nIGluIHRoZSBkZWZhdWx0LCBcImluZGVwZW5kZW50XCIgbW9kZS5cbiAgICAgICAgICAvLyBXZSBkb24ndCBkbyBhbnl0aGluZyBpbiB0aGlzIG1vZGUuXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGlkU3VzcGVuZEFscmVhZHkgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcbiAgICAgICAgdmFyIHJlbmRlcmVkVGFpbCA9IHJlbmRlclN0YXRlLnJlbmRlcmluZztcblxuICAgICAgICBpZiAocmVuZGVyZWRUYWlsID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UganVzdCByZW5kZXJlZCB0aGUgaGVhZC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBmaXJzdCBwYXNzLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgYW55dGhpbmcgaXMgc3RpbGxcbiAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBpbiB0aGUgcmVuZGVyZWQgc2V0LlxuICAgICAgICAgICAgLy8gSWYgbmV3IGNvbnRlbnQgdW5zdXNwZW5kZWQsIGJ1dCB0aGVyZSdzIHN0aWxsIHNvbWUgY29udGVudCB0aGF0XG4gICAgICAgICAgICAvLyBkaWRuJ3QuIFRoZW4gd2UgbmVlZCB0byBkbyBhIHNlY29uZCBwYXNzIHRoYXQgZm9yY2VzIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgc2hvd2luZyB0aGVpciBmYWxsYmFja3MuXG4gICAgICAgICAgICAvLyBXZSBtaWdodCBiZSBzdXNwZW5kZWQgaWYgc29tZXRoaW5nIGluIHRoaXMgcmVuZGVyIHBhc3Mgc3VzcGVuZGVkLCBvclxuICAgICAgICAgICAgLy8gc29tZXRoaW5nIGluIHRoZSBwcmV2aW91cyBjb21taXR0ZWQgcGFzcyBzdXNwZW5kZWQuIE90aGVyd2lzZSxcbiAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gY2hhbmNlIHNvIHdlIGNhbiBza2lwIHRoZSBleHBlbnNpdmUgY2FsbCB0b1xuICAgICAgICAgICAgLy8gZmluZEZpcnN0U3VzcGVuZGVkLlxuICAgICAgICAgICAgdmFyIGNhbm5vdEJlU3VzcGVuZGVkID0gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkgJiYgKGN1cnJlbnQgPT09IG51bGwgfHwgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gTm9GbGFncyk7XG5cbiAgICAgICAgICAgIGlmICghY2Fubm90QmVTdXNwZW5kZWQpIHtcbiAgICAgICAgICAgICAgdmFyIHJvdyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gICAgICAgICAgICAgIHdoaWxlIChyb3cgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VzcGVuZGVkID0gZmluZEZpcnN0U3VzcGVuZGVkKHJvdyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VzcGVuZGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIElmIHRoaXMgaXMgYSBuZXdseSBzdXNwZW5kZWQgdHJlZSwgaXQgbWlnaHQgbm90IGdldCBjb21taXR0ZWQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIHBhcnQgb2YgdGhlIHNlY29uZCBwYXNzLiBJbiB0aGF0IGNhc2Ugbm90aGluZyB3aWxsIHN1YnNjcmliZSB0b1xuICAgICAgICAgICAgICAgICAgLy8gaXRzIHRoZW5uYWJsZXMuIEluc3RlYWQsIHdlJ2xsIHRyYW5zZmVyIGl0cyB0aGVubmFibGVzIHRvIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gU3VzcGVuc2VMaXN0IHNvIHRoYXQgaXQgY2FuIHJldHJ5IGlmIHRoZXkgcmVzb2x2ZS5cbiAgICAgICAgICAgICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIG11bHRpcGxlIG9mIHRoZXNlIGluIHRoZSBsaXN0IGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAgICAgICAgICAgLy8gZ29pbmcgdG8gd2FpdCBmb3IgYWxsIG9mIHRoZW0gYW55d2F5LCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXJcbiAgICAgICAgICAgICAgICAgIC8vIHdoaWNoIG9uZXMgZ2V0cyB0byBwaW5nLiBJbiB0aGVvcnkgd2UgY291bGQgZ2V0IGNsZXZlciBhbmQga2VlcFxuICAgICAgICAgICAgICAgICAgLy8gdHJhY2sgb2YgaG93IG1hbnkgZGVwZW5kZW5jaWVzIHJlbWFpbiBidXQgaXQgZ2V0cyB0cmlja3kgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgLy8gaW4gdGhlIG1lYW50aW1lLCB3ZSBjYW4gYWRkL3JlbW92ZS9jaGFuZ2UgaXRlbXMgYW5kIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICAgICAgIC8vIFdlIG1pZ2h0IGJhaWwgb3V0IG9mIHRoZSBsb29wIGJlZm9yZSBmaW5kaW5nIGFueSBidXQgdGhhdFxuICAgICAgICAgICAgICAgICAgLy8gZG9lc24ndCBtYXR0ZXIgc2luY2UgdGhhdCBtZWFucyB0aGF0IHRoZSBvdGhlciBib3VuZGFyaWVzIHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIHdlIGRpZCBmaW5kIGFscmVhZHkgaGFzIHRoZWlyIGxpc3RlbmVycyBhdHRhY2hlZC5cblxuICAgICAgICAgICAgICAgICAgdmFyIG5ld1RoZW5uYWJsZXMgPSBzdXNwZW5kZWQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgICAgICAgICAgIGlmIChuZXdUaGVubmFibGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbmV3VGhlbm5hYmxlcztcbiAgICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICAgICAgfSAvLyBSZXJlbmRlciB0aGUgd2hvbGUgbGlzdCwgYnV0IHRoaXMgdGltZSwgd2UnbGwgZm9yY2UgZmFsbGJhY2tzXG4gICAgICAgICAgICAgICAgICAvLyB0byBzdGF5IGluIHBsYWNlLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IGJlZm9yZSBkb2luZyB0aGUgc2Vjb25kIHBhc3Mgc2luY2UgdGhhdCdzIG5vdyBpbnZhbGlkLlxuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlc2V0IHRoZSBjaGlsZCBmaWJlcnMgdG8gdGhlaXIgb3JpZ2luYWwgc3RhdGUuXG5cbiAgICAgICAgICAgICAgICAgIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTsgLy8gU2V0IHVwIHRoZSBTdXNwZW5zZSBDb250ZXh0IHRvIGZvcmNlIHN1c3BlbnNlIGFuZCBpbW1lZGlhdGVseVxuICAgICAgICAgICAgICAgICAgLy8gcmVyZW5kZXIgdGhlIGNoaWxkcmVuLlxuXG4gICAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcm93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwgJiYgbm93KCkgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhbHJlYWR5IHBhc3NlZCBvdXIgQ1BVIGRlYWRsaW5lIGJ1dCB3ZSBzdGlsbCBoYXZlIHJvd3NcbiAgICAgICAgICAgICAgLy8gbGVmdCBpbiB0aGUgdGFpbC4gV2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXIgYXR0ZW1wdHMgdG8gcmVuZGVyXG4gICAgICAgICAgICAgIC8vIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpO1xuICAgICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBnb2luZyB0byByZW5kZXIgdGhlIHRhaWwuXG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBcHBlbmQgdGhlIHJlbmRlcmVkIHJvdyB0byB0aGUgY2hpbGQgbGlzdC5cbiAgICAgICAgICBpZiAoIWRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICB2YXIgX3N1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyZW5kZXJlZFRhaWwpO1xuXG4gICAgICAgICAgICBpZiAoX3N1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7IC8vIEVuc3VyZSB3ZSB0cmFuc2ZlciB0aGUgdXBkYXRlIHF1ZXVlIHRvIHRoZSBwYXJlbnQgc28gdGhhdCBpdCBkb2Vzbid0XG4gICAgICAgICAgICAgIC8vIGdldCBsb3N0IGlmIHRoaXMgcm93IGVuZHMgdXAgZHJvcHBlZCBkdXJpbmcgYSBzZWNvbmQgcGFzcy5cblxuICAgICAgICAgICAgICB2YXIgX25ld1RoZW5uYWJsZXMgPSBfc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgIGlmIChfbmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gX25ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCB0cnVlKTsgLy8gVGhpcyBtaWdodCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbiAgICAgICAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgPT09IG51bGwgJiYgcmVuZGVyU3RhdGUudGFpbE1vZGUgPT09ICdoaWRkZW4nICYmICFyZW5kZXJlZFRhaWwuYWx0ZXJuYXRlICYmICFnZXRJc0h5ZHJhdGluZygpIC8vIFdlIGRvbid0IGN1dCBpdCBpZiB3ZSdyZSBoeWRyYXRpbmcuXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBkZWxldGUgdGhlIHJvdyB3ZSBqdXN0IHJlbmRlcmVkLlxuICAgICAgICAgICAgICAgICAgLy8gUmVzZXQgdGhlIGVmZmVjdCBsaXN0IHRvIHdoYXQgaXQgd2FzIGJlZm9yZSB3ZSByZW5kZXJlZCB0aGlzXG4gICAgICAgICAgICAgICAgICAvLyBjaGlsZC4gVGhlIG5lc3RlZCBjaGlsZHJlbiBoYXZlIGFscmVhZHkgYXBwZW5kZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgICAgICAgICAgIHZhciBsYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHJlbmRlclN0YXRlLmxhc3RFZmZlY3Q7IC8vIFJlbW92ZSBhbnkgZWZmZWN0cyB0aGF0IHdlcmUgYXBwZW5kZWQgYWZ0ZXIgdGhpcyBwb2ludC5cblxuICAgICAgICAgICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgIH0gLy8gV2UncmUgZG9uZS5cblxuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCAvLyBUaGUgdGltZSBpdCB0b29rIHRvIHJlbmRlciBsYXN0IHJvdyBpcyBncmVhdGVyIHRoYW4gdGhlIHJlbWFpbmluZ1xuICAgICAgICAgICAgLy8gdGltZSB3ZSBoYXZlIHRvIHJlbmRlci4gU28gcmVuZGVyaW5nIG9uZSBtb3JlIHJvdyB3b3VsZCBsaWtlbHlcbiAgICAgICAgICAgIC8vIGV4Y2VlZCBpdC5cbiAgICAgICAgICAgIG5vdygpICogMiAtIHJlbmRlclN0YXRlLnJlbmRlcmluZ1N0YXJ0VGltZSA+IGdldFJlbmRlclRhcmdldFRpbWUoKSAmJiByZW5kZXJMYW5lcyAhPT0gT2Zmc2NyZWVuTGFuZSkge1xuICAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vdyBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBhbmQgd2UnbGwganVzdCBnaXZlIHVwIGZ1cnRoZXJcbiAgICAgICAgICAgICAgLy8gYXR0ZW1wdHMgdG8gcmVuZGVyIHRoZSBtYWluIGNvbnRlbnQgYW5kIG9ubHkgcmVuZGVyIGZhbGxiYWNrcy5cbiAgICAgICAgICAgICAgLy8gVGhlIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGlzIHVzdWFsbHkgZmFzdGVyLlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgICAgICBkaWRTdXNwZW5kQWxyZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBTaW5jZSBub3RoaW5nIGFjdHVhbGx5IHN1c3BlbmRlZCwgdGhlcmUgd2lsbCBub3RoaW5nIHRvIHBpbmcgdGhpc1xuICAgICAgICAgICAgICAvLyB0byBnZXQgaXQgc3RhcnRlZCBiYWNrIHVwIHRvIGF0dGVtcHQgdGhlIG5leHQgaXRlbS4gV2hpbGUgaW4gdGVybXNcbiAgICAgICAgICAgICAgLy8gb2YgcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLFxuICAgICAgICAgICAgICAvLyBpdCdzIG5vdCBwYXJ0IG9mIHRoZSBzYW1lIHRyYW5zaXRpb24gb25jZSB0aGUgdHJhbnNpdGlvbiBoYXNcbiAgICAgICAgICAgICAgLy8gY29tbWl0dGVkLiBJZiBpdCdzIHN5bmMsIHdlIHN0aWxsIHdhbnQgdG8geWllbGQgc28gdGhhdCBpdCBjYW4gYmVcbiAgICAgICAgICAgICAgLy8gcGFpbnRlZC4gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLlxuICAgICAgICAgICAgICAvLyBXZSBjYW4gdXNlIGFueSBSZXRyeUxhbmUgZXZlbiBpZiBpdCdzIHRoZSBvbmUgY3VycmVudGx5IHJlbmRlcmluZ1xuICAgICAgICAgICAgICAvLyBzaW5jZSB3ZSdyZSBsZWF2aW5nIGl0IGJlaGluZCBvbiB0aGlzIG5vZGUuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBtYXJrU3Bhd25lZFdvcmsoU29tZVJldHJ5TGFuZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVuZGVyU3RhdGUuaXNCYWNrd2FyZHMpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlZmZlY3QgbGlzdCBvZiB0aGUgYmFja3dhcmRzIHRhaWwgd2lsbCBoYXZlIGJlZW4gYWRkZWRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBlbmQuIFRoaXMgYnJlYWtzIHRoZSBndWFyYW50ZWUgdGhhdCBsaWZlLWN5Y2xlcyBmaXJlIGluXG4gICAgICAgICAgICAvLyBzaWJsaW5nIG9yZGVyIGJ1dCB0aGF0IGlzbid0IGEgc3Ryb25nIGd1YXJhbnRlZSBwcm9taXNlZCBieSBSZWFjdC5cbiAgICAgICAgICAgIC8vIEVzcGVjaWFsbHkgc2luY2UgdGhlc2UgbWlnaHQgYWxzbyBqdXN0IHBvcCBpbiBkdXJpbmcgZnV0dXJlIGNvbW1pdHMuXG4gICAgICAgICAgICAvLyBBcHBlbmQgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdC5cbiAgICAgICAgICAgIHJlbmRlcmVkVGFpbC5zaWJsaW5nID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZpb3VzU2libGluZyA9IHJlbmRlclN0YXRlLmxhc3Q7XG5cbiAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcHJldmlvdXNTaWJsaW5nLnNpYmxpbmcgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVuZGVyU3RhdGUubGFzdCA9IHJlbmRlcmVkVGFpbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIHN0aWxsIGhhdmUgdGFpbCByb3dzIHRvIHJlbmRlci5cbiAgICAgICAgICAvLyBQb3AgYSByb3cuXG4gICAgICAgICAgdmFyIG5leHQgPSByZW5kZXJTdGF0ZS50YWlsO1xuICAgICAgICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG5leHQ7XG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG5leHQuc2libGluZztcbiAgICAgICAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPSBub3coKTtcbiAgICAgICAgICBuZXh0LnNpYmxpbmcgPSBudWxsOyAvLyBSZXN0b3JlIHRoZSBjb250ZXh0LlxuICAgICAgICAgIC8vIFRPRE86IFdlIGNhbiBwcm9iYWJseSBqdXN0IGF2b2lkIHBvcHBpbmcgaXQgaW5zdGVhZCBhbmQgb25seVxuICAgICAgICAgIC8vIHNldHRpbmcgaXQgdGhlIGZpcnN0IHRpbWUgd2UgZ28gZnJvbSBub3Qgc3VzcGVuZGVkIHRvIHN1c3BlbmRlZC5cblxuICAgICAgICAgIHZhciBzdXNwZW5zZUNvbnRleHQgPSBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG5cbiAgICAgICAgICBpZiAoZGlkU3VzcGVuZEFscmVhZHkpIHtcbiAgICAgICAgICAgIHN1c3BlbnNlQ29udGV4dCA9IHNldFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7IC8vIERvIGEgcGFzcyBvdmVyIHRoZSBuZXh0IHJvdy5cblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgQmxvY2s6XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfbmV4dFN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgX3ByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgcHJldklzSGlkZGVuID0gX3ByZXZTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgICB2YXIgbmV4dElzSGlkZGVuID0gX25leHRTdGF0ZSAhPT0gbnVsbDtcblxuICAgICAgICAgIGlmIChwcmV2SXNIaWRkZW4gIT09IG5leHRJc0hpZGRlbiAmJiBuZXdQcm9wcy5tb2RlICE9PSAndW5zdGFibGUtZGVmZXItd2l0aG91dC1oaWRpbmcnKSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bndpbmRXb3JrKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBDb21wb25lbnQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuXG4gICAgICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICAgICAgcG9wQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoZmxhZ3MgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBmbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBfZmxhZ3MgPSB3b3JrSW5Qcm9ncmVzcy5mbGFncztcblxuICAgICAgICBpZiAoISgoX2ZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIHJvb3QgZmFpbGVkIHRvIHVubW91bnQgYWZ0ZXIgYW4gZXJyb3IuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlO1xuICAgICAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IHBvcEh5ZHJhdGlvblN0YXRlXG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgIHZhciBfZmxhZ3MyID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKF9mbGFnczIgJiBTaG91bGRDYXB0dXJlKSB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgPSBfZmxhZ3MyICYgflNob3VsZENhcHR1cmUgfCBEaWRDYXB0dXJlOyAvLyBDYXB0dXJlZCBhIHN1c3BlbnNlIGVmZmVjdC4gUmUtcmVuZGVyIHRoZSBib3VuZGFyeS5cblxuICAgICAgICAgIGlmICggKHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgICAgICAgICAgdHJhbnNmZXJBY3R1YWxEdXJhdGlvbih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTsgLy8gU3VzcGVuc2VMaXN0IGRvZXNuJ3QgYWN0dWFsbHkgY2F0Y2ggYW55dGhpbmcuIEl0IHNob3VsZCd2ZSBiZWVuXG4gICAgICAgIC8vIGNhdWdodCBieSBhIG5lc3RlZCBib3VuZGFyeS4gSWYgbm90LCBpdCBzaG91bGQgYnViYmxlIHRocm91Z2guXG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yaykge1xuICBzd2l0Y2ggKGludGVycnVwdGVkV29yay50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSBpbnRlcnJ1cHRlZFdvcmsudHlwZS5jaGlsZENvbnRleHRUeXBlcztcblxuICAgICAgICBpZiAoY2hpbGRDb250ZXh0VHlwZXMgIT09IG51bGwgJiYgY2hpbGRDb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHBvcENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBwb3BUb3BMZXZlbENvbnRleHRPYmplY3QoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHBvcFN1c3BlbnNlQ29udGV4dChpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgIHBvcFByb3ZpZGVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcG9wUmVuZGVyTGFuZXMoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZSkge1xuICAvLyBJZiB0aGUgdmFsdWUgaXMgYW4gZXJyb3IsIGNhbGwgdGhpcyBmdW5jdGlvbiBpbW1lZGlhdGVseSBhZnRlciBpdCBpcyB0aHJvd25cbiAgLy8gc28gdGhlIHN0YWNrIGlzIGFjY3VyYXRlLlxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdGFjazogZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHNvdXJjZSlcbiAgfTtcbn1cblxuLy8gVGhpcyBtb2R1bGUgaXMgZm9ya2VkIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4vLyBCeSBkZWZhdWx0LCByZXR1cm4gYHRydWVgIHRvIGxvZyBlcnJvcnMgdG8gdGhlIGNvbnNvbGUuXG4vLyBGb3JrcyBjYW4gcmV0dXJuIGBmYWxzZWAgaWYgdGhpcyBpc24ndCBkZXNpcmFibGUuXG5mdW5jdGlvbiBzaG93RXJyb3JEaWFsb2coYm91bmRhcnksIGVycm9ySW5mbykge1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbG9nQ2FwdHVyZWRFcnJvcihib3VuZGFyeSwgZXJyb3JJbmZvKSB7XG4gIHRyeSB7XG4gICAgdmFyIGxvZ0Vycm9yID0gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pOyAvLyBBbGxvdyBpbmplY3RlZCBzaG93RXJyb3JEaWFsb2coKSB0byBwcmV2ZW50IGRlZmF1bHQgY29uc29sZS5lcnJvciBsb2dnaW5nLlxuICAgIC8vIFRoaXMgZW5hYmxlcyByZW5kZXJlcnMgbGlrZSBSZWFjdE5hdGl2ZSB0byBiZXR0ZXIgbWFuYWdlIHJlZGJveCBiZWhhdmlvci5cblxuICAgIGlmIChsb2dFcnJvciA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgICBpZiAodHJ1ZSkge1xuICAgICAgdmFyIHNvdXJjZSA9IGVycm9ySW5mby5zb3VyY2U7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB2YXIgY29tcG9uZW50U3RhY2sgPSBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJyc7IC8vIEJyb3dzZXJzIHN1cHBvcnQgc2lsZW5jaW5nIHVuY2F1Z2h0IGVycm9ycyBieSBjYWxsaW5nXG4gICAgICAvLyBgcHJldmVudERlZmF1bHQoKWAgaW4gd2luZG93IGBlcnJvcmAgaGFuZGxlci5cbiAgICAgIC8vIFdlIHJlY29yZCB0aGlzIGluZm9ybWF0aW9uIGFzIGFuIGV4cGFuZG8gb24gdGhlIGVycm9yLlxuXG4gICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiBlcnJvci5fc3VwcHJlc3NMb2dnaW5nKSB7XG4gICAgICAgIGlmIChib3VuZGFyeS50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgLy8gVGhlIGVycm9yIGlzIHJlY292ZXJhYmxlIGFuZCB3YXMgc2lsZW5jZWQuXG4gICAgICAgICAgLy8gSWdub3JlIGl0IGFuZCBkb24ndCBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG4gICAgICAgICAgLy8gVGhpcyBpcyBoYW5keSBmb3IgdGVzdGluZyBlcnJvciBib3VuZGFyaWVzIHdpdGhvdXQgbm9pc2UuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIFRoZSBlcnJvciBpcyBmYXRhbC4gU2luY2UgdGhlIHNpbGVuY2luZyBtaWdodCBoYXZlXG4gICAgICAgIC8vIGJlZW4gYWNjaWRlbnRhbCwgd2UnbGwgc3VyZmFjZSBpdCBhbnl3YXkuXG4gICAgICAgIC8vIEhvd2V2ZXIsIHRoZSBicm93c2VyIHdvdWxkIGhhdmUgc2lsZW5jZWQgdGhlIG9yaWdpbmFsIGVycm9yXG4gICAgICAgIC8vIHNvIHdlJ2xsIHByaW50IGl0IGZpcnN0LCBhbmQgdGhlbiBwcmludCB0aGUgc3RhY2sgYWRkZW5kdW0uXG5cblxuICAgICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgICAgIC8vIEZvciBhIG1vcmUgZGV0YWlsZWQgZGVzY3JpcHRpb24gb2YgdGhpcyBibG9jaywgc2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8xMzM4NFxuICAgICAgfVxuXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IHNvdXJjZSA/IGdldENvbXBvbmVudE5hbWUoc291cmNlLnR5cGUpIDogbnVsbDtcbiAgICAgIHZhciBjb21wb25lbnROYW1lTWVzc2FnZSA9IGNvbXBvbmVudE5hbWUgPyBcIlRoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiB0aGUgPFwiICsgY29tcG9uZW50TmFtZSArIFwiPiBjb21wb25lbnQ6XCIgOiAnVGhlIGFib3ZlIGVycm9yIG9jY3VycmVkIGluIG9uZSBvZiB5b3VyIFJlYWN0IGNvbXBvbmVudHM6JztcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TWVzc2FnZTtcbiAgICAgIHZhciBlcnJvckJvdW5kYXJ5TmFtZSA9IGdldENvbXBvbmVudE5hbWUoYm91bmRhcnkudHlwZSk7XG5cbiAgICAgIGlmIChlcnJvckJvdW5kYXJ5TmFtZSkge1xuICAgICAgICBlcnJvckJvdW5kYXJ5TWVzc2FnZSA9IFwiUmVhY3Qgd2lsbCB0cnkgdG8gcmVjcmVhdGUgdGhpcyBjb21wb25lbnQgdHJlZSBmcm9tIHNjcmF0Y2ggXCIgKyAoXCJ1c2luZyB0aGUgZXJyb3IgYm91bmRhcnkgeW91IHByb3ZpZGVkLCBcIiArIGVycm9yQm91bmRhcnlOYW1lICsgXCIuXCIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSAnQ29uc2lkZXIgYWRkaW5nIGFuIGVycm9yIGJvdW5kYXJ5IHRvIHlvdXIgdHJlZSB0byBjdXN0b21pemUgZXJyb3IgaGFuZGxpbmcgYmVoYXZpb3IuXFxuJyArICdWaXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZXJyb3ItYm91bmRhcmllcyB0byBsZWFybiBtb3JlIGFib3V0IGVycm9yIGJvdW5kYXJpZXMuJztcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbWJpbmVkTWVzc2FnZSA9IGNvbXBvbmVudE5hbWVNZXNzYWdlICsgXCJcXG5cIiArIGNvbXBvbmVudFN0YWNrICsgXCJcXG5cXG5cIiArIChcIlwiICsgZXJyb3JCb3VuZGFyeU1lc3NhZ2UpOyAvLyBJbiBkZXZlbG9wbWVudCwgd2UgcHJvdmlkZSBvdXIgb3duIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSBjb21wb25lbnQgc3RhY2suXG4gICAgICAvLyBXZSBkb24ndCBpbmNsdWRlIHRoZSBvcmlnaW5hbCBlcnJvciBtZXNzYWdlIGFuZCBKUyBzdGFjayBiZWNhdXNlIHRoZSBicm93c2VyXG4gICAgICAvLyBoYXMgYWxyZWFkeSBwcmludGVkIGl0LiBFdmVuIGlmIHRoZSBhcHBsaWNhdGlvbiBzd2FsbG93cyB0aGUgZXJyb3IsIGl0IGlzIHN0aWxsXG4gICAgICAvLyBkaXNwbGF5ZWQgYnkgdGhlIGJyb3dzZXIgdGhhbmtzIHRvIHRoZSBERVYtb25seSBmYWtlIGV2ZW50IHRyaWNrIGluIFJlYWN0RXJyb3JVdGlscy5cblxuICAgICAgY29uc29sZVsnZXJyb3InXShjb21iaW5lZE1lc3NhZ2UpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSW4gcHJvZHVjdGlvbiwgd2UgcHJpbnQgdGhlIGVycm9yIGRpcmVjdGx5LlxuICAgICAgLy8gVGhpcyB3aWxsIGluY2x1ZGUgdGhlIG1lc3NhZ2UsIHRoZSBKUyBzdGFjaywgYW5kIGFueXRoaW5nIHRoZSBicm93c2VyIHdhbnRzIHRvIHNob3cuXG4gICAgICAvLyBXZSBwYXNzIHRoZSBlcnJvciBvYmplY3QgaW5zdGVhZCBvZiBjdXN0b20gbWVzc2FnZSBzbyB0aGF0IHRoZSBicm93c2VyIGRpc3BsYXlzIHRoZSBlcnJvciBuYXRpdmVseS5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oZXJyb3IpOyAvLyBEb24ndCB0cmFuc2Zvcm0gdG8gb3VyIHdyYXBwZXJcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIG1ldGhvZCBtdXN0IG5vdCB0aHJvdywgb3IgUmVhY3QgaW50ZXJuYWwgc3RhdGUgd2lsbCBnZXQgbWVzc2VkIHVwLlxuICAgIC8vIElmIGNvbnNvbGUuZXJyb3IgaXMgb3ZlcnJpZGRlbiwgb3IgbG9nQ2FwdHVyZWRFcnJvcigpIHNob3dzIGEgZGlhbG9nIHRoYXQgdGhyb3dzLFxuICAgIC8vIHdlIHdhbnQgdG8gcmVwb3J0IHRoaXMgZXJyb3Igb3V0c2lkZSBvZiB0aGUgbm9ybWFsIHN0YWNrIGFzIGEgbGFzdCByZXNvcnQuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzE4OFxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgdGhyb3cgZTtcbiAgICB9KTtcbiAgfVxufVxuXG52YXIgUG9zc2libHlXZWFrTWFwJDEgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShmaWJlciwgZXJyb3JJbmZvLCBsYW5lKSB7XG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIGxhbmUpOyAvLyBVbm1vdW50IHRoZSByb290IGJ5IHJlbmRlcmluZyBudWxsLlxuXG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBudWxsXG4gIH07XG4gIHZhciBlcnJvciA9IGVycm9ySW5mby52YWx1ZTtcblxuICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgb25VbmNhdWdodEVycm9yKGVycm9yKTtcbiAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICB9O1xuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTtcbiAgdXBkYXRlLnRhZyA9IENhcHR1cmVVcGRhdGU7XG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPSBmaWJlci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcjtcblxuICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgdXBkYXRlLnBheWxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBsb2dDYXB0dXJlZEVycm9yKGZpYmVyLCBlcnJvckluZm8pO1xuICAgICAgcmV0dXJuIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcihlcnJvciQxKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyIGluc3QgPSBmaWJlci5zdGF0ZU5vZGU7XG5cbiAgaWYgKGluc3QgIT09IG51bGwgJiYgdHlwZW9mIGluc3QuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiBjYWxsYmFjaygpIHtcbiAgICAgIHtcbiAgICAgICAgbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUbyBwcmVzZXJ2ZSB0aGUgcHJlZXhpc3RpbmcgcmV0cnkgYmVoYXZpb3Igb2YgZXJyb3IgYm91bmRhcmllcyxcbiAgICAgICAgLy8gd2Uga2VlcCB0cmFjayBvZiB3aGljaCBvbmVzIGFscmVhZHkgZmFpbGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgICAvLyBUaGlzIGdldHMgcmVzZXQgYmVmb3JlIHdlIHlpZWxkIGJhY2sgdG8gdGhlIGJyb3dzZXIuXG4gICAgICAgIC8vIFRPRE86IFdhcm4gaW4gc3RyaWN0IG1vZGUgaWYgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzXG4gICAgICAgIC8vIG5vdCBkZWZpbmVkLlxuICAgICAgICBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKHRoaXMpOyAvLyBPbmx5IGxvZyBoZXJlIGlmIGNvbXBvbmVudERpZENhdGNoIGlzIHRoZSBvbmx5IGVycm9yIGJvdW5kYXJ5IG1ldGhvZCBkZWZpbmVkXG5cbiAgICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVycm9yJDEgPSBlcnJvckluZm8udmFsdWU7XG4gICAgICB2YXIgc3RhY2sgPSBlcnJvckluZm8uc3RhY2s7XG4gICAgICB0aGlzLmNvbXBvbmVudERpZENhdGNoKGVycm9yJDEsIHtcbiAgICAgICAgY29tcG9uZW50U3RhY2s6IHN0YWNrICE9PSBudWxsID8gc3RhY2sgOiAnJ1xuICAgICAgfSk7XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBJZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZCxcbiAgICAgICAgICAvLyB0aGVuIGl0IG5lZWRzIHRvIGNhbGwgc2V0U3RhdGUgdG8gcmVjb3ZlciBmcm9tIGVycm9ycy5cbiAgICAgICAgICAvLyBJZiBubyBzdGF0ZSB1cGRhdGUgaXMgc2NoZWR1bGVkIHRoZW4gdGhlIGJvdW5kYXJ5IHdpbGwgc3dhbGxvdyB0aGUgZXJyb3IuXG4gICAgICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKGZpYmVyLmxhbmVzLCBTeW5jTGFuZSkpIHtcbiAgICAgICAgICAgIGVycm9yKCclczogRXJyb3IgYm91bmRhcmllcyBzaG91bGQgaW1wbGVtZW50IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpLiAnICsgJ0luIHRoYXQgbWV0aG9kLCByZXR1cm4gYSBzdGF0ZSB1cGRhdGUgdG8gZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIG9yIGZhbGxiYWNrIFVJLicsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1Vua25vd24nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5jYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCBsYW5lcykge1xuICAvLyBBdHRhY2ggYSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZSB0byBcInBpbmdcIiB0aGUgcm9vdCBhbmQgcmV0cnkuIEJ1dCBvbmx5IGlmXG4gIC8vIG9uZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0IGZvciB0aGUgbGFuZXMgd2UncmUgY3VycmVudGx5IHJlbmRlcmluZyAod2hpY2hcbiAgLy8gYWN0cyBsaWtlIGEgXCJ0aHJlYWQgSURcIiBoZXJlKS5cbiAgdmFyIHBpbmdDYWNoZSA9IHJvb3QucGluZ0NhY2hlO1xuICB2YXIgdGhyZWFkSURzO1xuXG4gIGlmIChwaW5nQ2FjaGUgPT09IG51bGwpIHtcbiAgICBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAkMSgpO1xuICAgIHRocmVhZElEcyA9IG5ldyBTZXQoKTtcbiAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICB9IGVsc2Uge1xuICAgIHRocmVhZElEcyA9IHBpbmdDYWNoZS5nZXQod2FrZWFibGUpO1xuXG4gICAgaWYgKHRocmVhZElEcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgICBwaW5nQ2FjaGUuc2V0KHdha2VhYmxlLCB0aHJlYWRJRHMpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghdGhyZWFkSURzLmhhcyhsYW5lcykpIHtcbiAgICAvLyBNZW1vaXplIHVzaW5nIHRoZSB0aHJlYWQgSUQgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgIHRocmVhZElEcy5hZGQobGFuZXMpO1xuICAgIHZhciBwaW5nID0gcGluZ1N1c3BlbmRlZFJvb3QuYmluZChudWxsLCByb290LCB3YWtlYWJsZSwgbGFuZXMpO1xuICAgIHdha2VhYmxlLnRoZW4ocGluZywgcGluZyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24ocm9vdCwgcmV0dXJuRmliZXIsIHNvdXJjZUZpYmVyLCB2YWx1ZSwgcm9vdFJlbmRlckxhbmVzKSB7XG4gIC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS5cbiAgc291cmNlRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTsgLy8gSXRzIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICBzb3VyY2VGaWJlci5maXJzdEVmZmVjdCA9IHNvdXJjZUZpYmVyLmxhc3RFZmZlY3QgPSBudWxsO1xuXG4gIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVGhpcyBpcyBhIHdha2VhYmxlLlxuICAgIHZhciB3YWtlYWJsZSA9IHZhbHVlO1xuXG4gICAgaWYgKChzb3VyY2VGaWJlci5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgbWVtb2l6ZWRTdGF0ZSB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgYXR0ZW1wdGVkXG4gICAgICAvLyB0byByZW5kZXIgaXQuXG4gICAgICB2YXIgY3VycmVudFNvdXJjZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnRTb3VyY2UpIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBjdXJyZW50U291cmNlLnVwZGF0ZVF1ZXVlO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gY3VycmVudFNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICAgICAgICBzb3VyY2VGaWJlci5sYW5lcyA9IGN1cnJlbnRTb3VyY2UubGFuZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb3VyY2VGaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgICAgIHNvdXJjZUZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBoYXNJbnZpc2libGVQYXJlbnRCb3VuZGFyeSA9IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCk7IC8vIFNjaGVkdWxlIHRoZSBuZWFyZXN0IFN1c3BlbnNlIHRvIHJlLXJlbmRlciB0aGUgdGltZWQgb3V0IHZpZXcuXG5cbiAgICB2YXIgX3dvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoX3dvcmtJblByb2dyZXNzLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgc2hvdWxkQ2FwdHVyZVN1c3BlbnNlKF93b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkpKSB7XG4gICAgICAgIC8vIEZvdW5kIHRoZSBuZWFyZXN0IGJvdW5kYXJ5LlxuICAgICAgICAvLyBTdGFzaCB0aGUgcHJvbWlzZSBvbiB0aGUgYm91bmRhcnkgZmliZXIuIElmIHRoZSBib3VuZGFyeSB0aW1lcyBvdXQsIHdlJ2xsXG4gICAgICAgIC8vIGF0dGFjaCBhbm90aGVyIGxpc3RlbmVyIHRvIGZsaXAgdGhlIGJvdW5kYXJ5IGJhY2sgdG8gaXRzIG5vcm1hbCBzdGF0ZS5cbiAgICAgICAgdmFyIHdha2VhYmxlcyA9IF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAod2FrZWFibGVzID09PSBudWxsKSB7XG4gICAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gbmV3IFNldCgpO1xuICAgICAgICAgIHVwZGF0ZVF1ZXVlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUXVldWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2FrZWFibGVzLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIH0gLy8gSWYgdGhlIGJvdW5kYXJ5IGlzIG91dHNpZGUgb2YgYmxvY2tpbmcgbW9kZSwgd2Ugc2hvdWxkICpub3QqXG4gICAgICAgIC8vIHN1c3BlbmQgdGhlIGNvbW1pdC4gUHJldGVuZCBhcyBpZiB0aGUgc3VzcGVuZGVkIGNvbXBvbmVudCByZW5kZXJlZFxuICAgICAgICAvLyBudWxsIGFuZCBrZWVwIHJlbmRlcmluZy4gSW4gdGhlIGNvbW1pdCBwaGFzZSwgd2UnbGwgc2NoZWR1bGUgYVxuICAgICAgICAvLyBzdWJzZXF1ZW50IHN5bmNocm9ub3VzIHVwZGF0ZSB0byByZS1yZW5kZXIgdGhlIFN1c3BlbnNlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBOb3RlOiBJdCBkb2Vzbid0IG1hdHRlciB3aGV0aGVyIHRoZSBjb21wb25lbnQgdGhhdCBzdXNwZW5kZWQgd2FzXG4gICAgICAgIC8vIGluc2lkZSBhIGJsb2NraW5nIG1vZGUgdHJlZS4gSWYgdGhlIFN1c3BlbnNlIGlzIG91dHNpZGUgb2YgaXQsIHdlXG4gICAgICAgIC8vIHNob3VsZCAqbm90KiBzdXNwZW5kIHRoZSBjb21taXQuXG5cblxuICAgICAgICBpZiAoKF93b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgICAgICAgX3dvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgfD0gRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZTsgLy8gV2UncmUgZ29pbmcgdG8gY29tbWl0IHRoaXMgZmliZXIgZXZlbiB0aG91Z2ggaXQgZGlkbid0IGNvbXBsZXRlLlxuICAgICAgICAgIC8vIEJ1dCB3ZSBzaG91bGRuJ3QgY2FsbCBhbnkgbGlmZWN5Y2xlIG1ldGhvZHMgb3IgY2FsbGJhY2tzLiBSZW1vdmVcbiAgICAgICAgICAvLyBhbGwgbGlmZWN5Y2xlIGVmZmVjdCB0YWdzLlxuXG4gICAgICAgICAgc291cmNlRmliZXIuZmxhZ3MgJj0gfihMaWZlY3ljbGVFZmZlY3RNYXNrIHwgSW5jb21wbGV0ZSk7XG5cbiAgICAgICAgICBpZiAoc291cmNlRmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgdmFyIGN1cnJlbnRTb3VyY2VGaWJlciA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTb3VyY2VGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50LiBDaGFuZ2UgdGhlIHRhZyBzbyBpdCdzIG5vdCBtaXN0YWtlbiBmb3IgYVxuICAgICAgICAgICAgICAvLyBjb21wbGV0ZWQgY2xhc3MgY29tcG9uZW50LiBGb3IgZXhhbXBsZSwgd2Ugc2hvdWxkIG5vdCBjYWxsXG4gICAgICAgICAgICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50IGlmIGl0IGlzIGRlbGV0ZWQuXG4gICAgICAgICAgICAgIHNvdXJjZUZpYmVyLnRhZyA9IEluY29tcGxldGVDbGFzc0NvbXBvbmVudDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFdoZW4gd2UgdHJ5IHJlbmRlcmluZyBhZ2Fpbiwgd2Ugc2hvdWxkIG5vdCByZXVzZSB0aGUgY3VycmVudCBmaWJlcixcbiAgICAgICAgICAgICAgLy8gc2luY2UgaXQncyBrbm93biB0byBiZSBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFVzZSBhIGZvcmNlIHVwZGF0ZSB0b1xuICAgICAgICAgICAgICAvLyBwcmV2ZW50IGEgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIFN5bmNMYW5lKTtcbiAgICAgICAgICAgICAgdXBkYXRlLnRhZyA9IEZvcmNlVXBkYXRlO1xuICAgICAgICAgICAgICBlbnF1ZXVlVXBkYXRlKHNvdXJjZUZpYmVyLCB1cGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gVGhlIHNvdXJjZSBmaWJlciBkaWQgbm90IGNvbXBsZXRlLiBNYXJrIGl0IHdpdGggU3luYyBwcmlvcml0eSB0b1xuICAgICAgICAgIC8vIGluZGljYXRlIHRoYXQgaXQgc3RpbGwgaGFzIHBlbmRpbmcgd29yay5cblxuXG4gICAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBTeW5jTGFuZSk7IC8vIEV4aXQgd2l0aG91dCBzdXNwZW5kaW5nLlxuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IC8vIENvbmZpcm1lZCB0aGF0IHRoZSBib3VuZGFyeSBpcyBpbiBhIGNvbmN1cnJlbnQgbW9kZSB0cmVlLiBDb250aW51ZVxuICAgICAgICAvLyB3aXRoIHRoZSBub3JtYWwgc3VzcGVuZCBwYXRoLlxuICAgICAgICAvL1xuICAgICAgICAvLyBBZnRlciB0aGlzIHdlJ2xsIHVzZSBhIHNldCBvZiBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoaXNcbiAgICAgICAgLy8gcmVuZGVyIHBhc3Mgd2lsbCBydW4gdG8gY29tcGxldGlvbiBvciByZXN0YXJ0IG9yIFwic3VzcGVuZFwiIHRoZSBjb21taXQuXG4gICAgICAgIC8vIFRoZSBhY3R1YWwgbG9naWMgZm9yIHRoaXMgaXMgc3ByZWFkIG91dCBpbiBkaWZmZXJlbnQgcGxhY2VzLlxuICAgICAgICAvL1xuICAgICAgICAvLyBUaGlzIGZpcnN0IHByaW5jaXBsZSBpcyB0aGF0IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2hlbiB3ZSBjb21wbGV0ZVxuICAgICAgICAvLyBhIHJvb3QsIHRoZW4gd2Ugc2hvdWxkIGFsc28gcmVzdGFydCBpZiB3ZSBnZXQgYW4gdXBkYXRlIG9yIHBpbmcgdGhhdFxuICAgICAgICAvLyBtaWdodCB1bnN1c3BlbmQgaXQsIGFuZCB2aWNlIHZlcnNhLiBUaGUgb25seSByZWFzb24gdG8gc3VzcGVuZCBpc1xuICAgICAgICAvLyBiZWNhdXNlIHlvdSB0aGluayB5b3UgbWlnaHQgd2FudCB0byByZXN0YXJ0IGJlZm9yZSBjb21taXR0aW5nLiBIb3dldmVyLFxuICAgICAgICAvLyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8gcmVzdGFydCBvbmx5IHdoaWxlIGluIHRoZSBwZXJpb2Qgd2UncmUgc3VzcGVuZGVkLlxuICAgICAgICAvL1xuICAgICAgICAvLyBSZXN0YXJ0aW5nIHRvbyBhZ2dyZXNzaXZlbHkgaXMgYWxzbyBub3QgZ29vZCBiZWNhdXNlIGl0IHN0YXJ2ZXMgb3V0IGFueVxuICAgICAgICAvLyBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gU28gd2UgdXNlIGhldXJpc3RpY3MgdG8gZGV0ZXJtaW5lIHdoZW4uXG4gICAgICAgIC8vIFN1c3BlbnNlIEhldXJpc3RpY3NcbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgbm90aGluZyB0aHJldyBhIFByb21pc2Ugb3IgYWxsIHRoZSBzYW1lIGZhbGxiYWNrcyBhcmUgYWxyZWFkeSBzaG93aW5nLFxuICAgICAgICAvLyB0aGVuIGRvbid0IHN1c3BlbmQvcmVzdGFydC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiBpbml0aWFsIHJlbmRlciBvZiBhIG5ldyB0cmVlIG9mIFN1c3BlbnNlIGJvdW5kYXJpZXMgYW5kXG4gICAgICAgIC8vIHRob3NlIHRyaWdnZXIgYSBmYWxsYmFjaywgdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuIFdlIHdhbnQgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgd2UgY2FuIHNob3cgdGhlIGluaXRpYWwgbG9hZGluZyBzdGF0ZSBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB3ZSBoaXQgYSBcIkRlbGF5ZWRcIiBjYXNlLCBzdWNoIGFzIHdoZW4gd2UnZCBzd2l0Y2ggZnJvbSBjb250ZW50IGJhY2sgaW50b1xuICAgICAgICAvLyBhIGZhbGxiYWNrLCB0aGVuIHdlIHNob3VsZCBhbHdheXMgc3VzcGVuZC9yZXN0YXJ0LiBUcmFuc2l0aW9ucyBhcHBseVxuICAgICAgICAvLyB0byB0aGlzIGNhc2UuIElmIG5vbmUgaXMgZGVmaW5lZCwgSk5EIGlzIHVzZWQgaW5zdGVhZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UncmUgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgYW5kIGl0IGdldHMgXCJyZXRyaWVkXCIsIGFsbG93aW5nIHVzIHRvIHNob3dcbiAgICAgICAgLy8gYW5vdGhlciBsZXZlbCwgYnV0IHRoZXJlJ3Mgc3RpbGwgYW4gaW5uZXIgYm91bmRhcnkgdGhhdCB3b3VsZCBzaG93IGEgZmFsbGJhY2ssXG4gICAgICAgIC8vIHRoZW4gd2Ugc3VzcGVuZC9yZXN0YXJ0IGZvciA1MDBtcyBzaW5jZSB0aGUgbGFzdCB0aW1lIHdlIHNob3dlZCBhIGZhbGxiYWNrXG4gICAgICAgIC8vIGFueXdoZXJlIGluIHRoZSB0cmVlLiBUaGlzIGVmZmVjdGl2ZWx5IHRocm90dGxlcyBwcm9ncmVzc2l2ZSBsb2FkaW5nIGludG8gYVxuICAgICAgICAvLyBjb25zaXN0ZW50IHRyYWluIG9mIGNvbW1pdHMuIFRoaXMgYWxzbyBnaXZlcyB1cyBhbiBvcHBvcnR1bml0eSB0byByZXN0YXJ0IHRvXG4gICAgICAgIC8vIGdldCB0byB0aGUgY29tcGxldGVkIHN0YXRlIHNsaWdodGx5IGVhcmxpZXIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoZXJlJ3MgYW1iaWd1aXR5IGR1ZSB0byBiYXRjaGluZyBpdCdzIHJlc29sdmVkIGluIHByZWZlcmVuY2Ugb2Y6XG4gICAgICAgIC8vIDEpIFwiZGVsYXllZFwiLCAyKSBcImluaXRpYWwgcmVuZGVyXCIsIDMpIFwicmV0cnlcIi5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2Ugd2FudCB0byBlbnN1cmUgdGhhdCBhIFwiYnVzeVwiIHN0YXRlIGRvZXNuJ3QgZ2V0IGZvcmNlIGNvbW1pdHRlZC4gV2Ugd2FudCB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBuZXcgaW5pdGlhbCBsb2FkaW5nIHN0YXRlcyBjYW4gY29tbWl0IGFzIHNvb24gYXMgcG9zc2libGUuXG5cblxuICAgICAgICBhdHRhY2hQaW5nTGlzdGVuZXIocm9vdCwgd2FrZWFibGUsIHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByb290UmVuZGVyTGFuZXM7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gLy8gVGhpcyBib3VuZGFyeSBhbHJlYWR5IGNhcHR1cmVkIGR1cmluZyB0aGlzIHJlbmRlci4gQ29udGludWUgdG8gdGhlIG5leHRcbiAgICAgIC8vIGJvdW5kYXJ5LlxuXG5cbiAgICAgIF93b3JrSW5Qcm9ncmVzcyA9IF93b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gICAgfSB3aGlsZSAoX3dvcmtJblByb2dyZXNzICE9PSBudWxsKTsgLy8gTm8gYm91bmRhcnkgd2FzIGZvdW5kLiBGYWxsdGhyb3VnaCB0byBlcnJvciBtb2RlLlxuICAgIC8vIFRPRE86IFVzZSBpbnZhcmlhbnQgc28gdGhlIG1lc3NhZ2UgaXMgc3RyaXBwZWQgaW4gcHJvZD9cblxuXG4gICAgdmFsdWUgPSBuZXcgRXJyb3IoKGdldENvbXBvbmVudE5hbWUoc291cmNlRmliZXIudHlwZSkgfHwgJ0EgUmVhY3QgY29tcG9uZW50JykgKyAnIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxcbicgKyAnXFxuJyArICdBZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvICcgKyAncHJvdmlkZSBhIGxvYWRpbmcgaW5kaWNhdG9yIG9yIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkuJyk7XG4gIH0gLy8gV2UgZGlkbid0IGZpbmQgYSBib3VuZGFyeSB0aGF0IGNvdWxkIGhhbmRsZSB0aGlzIHR5cGUgb2YgZXhjZXB0aW9uLiBTdGFydFxuICAvLyBvdmVyIGFuZCB0cmF2ZXJzZSBwYXJlbnQgcGF0aCBhZ2FpbiwgdGhpcyB0aW1lIHRyZWF0aW5nIHRoZSBleGNlcHRpb25cbiAgLy8gYXMgYW4gZXJyb3IuXG5cblxuICByZW5kZXJEaWRFcnJvcigpO1xuICB2YWx1ZSA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUodmFsdWUsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gcmV0dXJuRmliZXI7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9lcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuICAgICAgICAgIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMsIGxhbmUpO1xuXG4gICAgICAgICAgdmFyIF91cGRhdGUgPSBjcmVhdGVSb290RXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF9lcnJvckluZm8sIGxhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgLy8gQ2FwdHVyZSBhbmQgcmV0cnlcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IHZhbHVlO1xuICAgICAgICB2YXIgY3RvciA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MgJiYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCBpbnN0YW5jZSAhPT0gbnVsbCAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNob3VsZENhcHR1cmU7XG5cbiAgICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShyb290UmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBfbGFuZSk7IC8vIFNjaGVkdWxlIHRoZSBlcnJvciBib3VuZGFyeSB0byByZS1yZW5kZXIgdXNpbmcgdXBkYXRlZCBzdGF0ZVxuXG4gICAgICAgICAgdmFyIF91cGRhdGUyID0gY3JlYXRlQ2xhc3NFcnJvclVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgZXJyb3JJbmZvLCBfbGFuZSk7XG5cbiAgICAgICAgICBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIF91cGRhdGUyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcbiAgfSB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpO1xufVxuXG52YXIgZGlkV2FybkFib3V0VW5kZWZpbmVkU25hcHNob3RCZWZvcmVVcGRhdGUgPSBudWxsO1xuXG57XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbmV3IFNldCgpO1xufVxuXG52YXIgUG9zc2libHlXZWFrU2V0ID0gdHlwZW9mIFdlYWtTZXQgPT09ICdmdW5jdGlvbicgPyBXZWFrU2V0IDogU2V0O1xuXG52YXIgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyID0gZnVuY3Rpb24gKGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQoKTtcbiAgfVxufTsgLy8gQ2FwdHVyZSBlcnJvcnMgc28gdGhleSBkb24ndCBpbnRlcnJ1cHQgdW5tb3VudGluZy5cblxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjYWxsQ29tcG9uZW50V2lsbFVubW91bnRXaXRoVGltZXIsIG51bGwsIGN1cnJlbnQsIGluc3RhbmNlKTtcblxuICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICB2YXIgdW5tb3VudEVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgdW5tb3VudEVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIHJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgcmVmLCBudWxsLCBudWxsKTtcblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIHZhciByZWZFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihjdXJyZW50LCByZWZFcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgZXJyb3IpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgICAvLyBidXQgaW5zdGVhZCB3ZSByZWx5IG9uIHRoZW0gYmVpbmcgc2V0IGR1cmluZyBsYXN0IHJlbmRlci5cbiAgICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc25hcHNob3QgPSBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gcHJldlByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgcHJldlByb3BzKSwgcHJldlN0YXRlKTtcblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgZGlkV2FyblNldCA9IGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlO1xuXG4gICAgICAgICAgICAgIGlmIChzbmFwc2hvdCA9PT0gdW5kZWZpbmVkICYmICFkaWRXYXJuU2V0LmhhcyhmaW5pc2hlZFdvcmsudHlwZSkpIHtcbiAgICAgICAgICAgICAgICBkaWRXYXJuU2V0LmFkZChmaW5pc2hlZFdvcmsudHlwZSk7XG5cbiAgICAgICAgICAgICAgICBlcnJvcignJXMuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoKTogQSBzbmFwc2hvdCB2YWx1ZSAob3IgbnVsbCkgJyArICdtdXN0IGJlIHJldHVybmVkLiBZb3UgaGF2ZSByZXR1cm5lZCB1bmRlZmluZWQuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlID0gc25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBTbmFwc2hvdCkge1xuICAgICAgICAgICAgdmFyIHJvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgICAgICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICAvLyBOb3RoaW5nIHRvIGRvIGZvciB0aGVzZSBjb21wb25lbnQgdHlwZXNcbiAgICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQodGFnLCBmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgaWYgKChlZmZlY3QudGFnICYgdGFnKSA9PT0gdGFnKSB7XG4gICAgICAgIC8vIFVubW91bnRcbiAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKGRlc3Ryb3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlc3Ryb3koKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBNb3VudFxuICAgICAgICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgICAgICAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcblxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGRlc3Ryb3kgPSBlZmZlY3QuZGVzdHJveTtcblxuICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGRlc3Ryb3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBhZGRlbmR1bSA9IHZvaWQgMDtcblxuICAgICAgICAgICAgaWYgKGRlc3Ryb3kgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZCBudWxsLiBJZiB5b3VyIGVmZmVjdCBkb2VzIG5vdCByZXF1aXJlIGNsZWFuICcgKyAndXAsIHJldHVybiB1bmRlZmluZWQgKG9yIG5vdGhpbmcpLic7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZXN0cm95LnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnXFxuXFxuSXQgbG9va3MgbGlrZSB5b3Ugd3JvdGUgdXNlRWZmZWN0KGFzeW5jICgpID0+IC4uLikgb3IgcmV0dXJuZWQgYSBQcm9taXNlLiAnICsgJ0luc3RlYWQsIHdyaXRlIHRoZSBhc3luYyBmdW5jdGlvbiBpbnNpZGUgeW91ciBlZmZlY3QgJyArICdhbmQgY2FsbCBpdCBpbW1lZGlhdGVseTpcXG5cXG4nICsgJ3VzZUVmZmVjdCgoKSA9PiB7XFxuJyArICcgIGFzeW5jIGZ1bmN0aW9uIGZldGNoRGF0YSgpIHtcXG4nICsgJyAgICAvLyBZb3UgY2FuIGF3YWl0IGhlcmVcXG4nICsgJyAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IE15QVBJLmdldERhdGEoc29tZUlkKTtcXG4nICsgJyAgICAvLyAuLi5cXG4nICsgJyAgfVxcbicgKyAnICBmZXRjaERhdGEoKTtcXG4nICsgXCJ9LCBbc29tZUlkXSk7IC8vIE9yIFtdIGlmIGVmZmVjdCBkb2Vzbid0IG5lZWQgcHJvcHMgb3Igc3RhdGVcXG5cXG5cIiArICdMZWFybiBtb3JlIGFib3V0IGRhdGEgZmV0Y2hpbmcgd2l0aCBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2hvb2tzLWRhdGEtZmV0Y2hpbmcnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgYWRkZW5kdW0gPSAnIFlvdSByZXR1cm5lZDogJyArIGRlc3Ryb3k7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVycm9yKCdBbiBlZmZlY3QgZnVuY3Rpb24gbXVzdCBub3QgcmV0dXJuIGFueXRoaW5nIGJlc2lkZXMgYSBmdW5jdGlvbiwgJyArICd3aGljaCBpcyB1c2VkIGZvciBjbGVhbi11cC4lcycsIGFkZGVuZHVtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlICE9PSBudWxsID8gdXBkYXRlUXVldWUubGFzdEVmZmVjdCA6IG51bGw7XG5cbiAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgZmlyc3RFZmZlY3QgPSBsYXN0RWZmZWN0Lm5leHQ7XG4gICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAgdmFyIF9lZmZlY3QgPSBlZmZlY3QsXG4gICAgICAgICAgbmV4dCA9IF9lZmZlY3QubmV4dCxcbiAgICAgICAgICB0YWcgPSBfZWZmZWN0LnRhZztcblxuICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEgJiYgKHRhZyAmIEhhc0VmZmVjdCkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RNb3VudChmaW5pc2hlZFdvcmssIGVmZmVjdCk7XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IG5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGlmZUN5Y2xlcyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIGZpbmlzaGVkV29yaywgY29tbWl0dGVkTGFuZXMpIHtcbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIEF0IHRoaXMgcG9pbnQgbGF5b3V0IGVmZmVjdHMgaGF2ZSBhbHJlYWR5IGJlZW4gZGVzdHJveWVkIChkdXJpbmcgbXV0YXRpb24gcGhhc2UpLlxuICAgICAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcHJldmVudCBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0TW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgc2NoZWR1bGVQYXNzaXZlRWZmZWN0cyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZE1vdW50LiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5zdGF0ZWAuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHByZXZQcm9wcyA9IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSA9PT0gZmluaXNoZWRXb3JrLnR5cGUgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiByZXNvbHZlRGVmYXVsdFByb3BzKGZpbmlzaGVkV29yay50eXBlLCBjdXJyZW50Lm1lbW9pemVkUHJvcHMpO1xuICAgICAgICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnY29tcG9uZW50RGlkVXBkYXRlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZXZTdGF0ZSwgaW5zdGFuY2UuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuXG5cbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmICh1cGRhdGVRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAncHJvY2Vzc2luZyB0aGUgdXBkYXRlIHF1ZXVlLiAnICsgJ1RoaXMgbWlnaHQgZWl0aGVyIGJlIGJlY2F1c2Ugb2YgYSBidWcgaW4gUmVhY3QsIG9yIGJlY2F1c2UgJyArICdhIGNvbXBvbmVudCByZWFzc2lnbnMgaXRzIG93biBgdGhpcy5wcm9wc2AuICcgKyAnUGxlYXNlIGZpbGUgYW4gaXNzdWUuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkgfHwgJ2luc3RhbmNlJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHN0YXRlIHRvIG1hdGNoIG1lbW9pemVkIHN0YXRlIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBXZSBjb3VsZCB1cGRhdGUgaW5zdGFuY2UgcHJvcHMgYW5kIHN0YXRlIGhlcmUsXG4gICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIHVwZGF0ZVF1ZXVlLCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBJIHRoaW5rIHRoaXMgaXMgbm93IGFsd2F5cyBub24tbnVsbCBieSB0aGUgdGltZSBpdCByZWFjaGVzIHRoZVxuICAgICAgICAvLyBjb21taXQgcGhhc2UuIENvbnNpZGVyIHJlbW92aW5nIHRoZSB0eXBlIGNoZWNrLlxuICAgICAgICB2YXIgX3VwZGF0ZVF1ZXVlID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgIGlmIChfdXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2luc3RhbmNlID0gbnVsbDtcblxuICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZmluaXNoZWRXb3JrLmNoaWxkLnRhZykge1xuICAgICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZ2V0UHVibGljSW5zdGFuY2UoZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICAgICAgICBfaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuY2hpbGQuc3RhdGVOb2RlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbW1pdFVwZGF0ZVF1ZXVlKGZpbmlzaGVkV29yaywgX3VwZGF0ZVF1ZXVlLCBfaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX2luc3RhbmNlMiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7IC8vIFJlbmRlcmVycyBtYXkgc2NoZWR1bGUgd29yayB0byBiZSBkb25lIGFmdGVyIGhvc3QgY29tcG9uZW50cyBhcmUgbW91bnRlZFxuICAgICAgICAvLyAoZWcgRE9NIHJlbmRlcmVyIG1heSBzY2hlZHVsZSBhdXRvLWZvY3VzIGZvciBpbnB1dHMgYW5kIGZvcm0gY29udHJvbHMpLlxuICAgICAgICAvLyBUaGVzZSBlZmZlY3RzIHNob3VsZCBvbmx5IGJlIGNvbW1pdHRlZCB3aGVuIGNvbXBvbmVudHMgYXJlIGZpcnN0IG1vdW50ZWQsXG4gICAgICAgIC8vIGFrYSB3aGVuIHRoZXJlIGlzIG5vIGN1cnJlbnQvYWx0ZXJuYXRlLlxuXG4gICAgICAgIGlmIChjdXJyZW50ID09PSBudWxsICYmIGZpbmlzaGVkV29yay5mbGFncyAmIFVwZGF0ZSkge1xuICAgICAgICAgIHZhciB0eXBlID0gZmluaXNoZWRXb3JrLnR5cGU7XG4gICAgICAgICAgdmFyIHByb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgY29tbWl0TW91bnQoX2luc3RhbmNlMiwgdHlwZSwgcHJvcHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggdGV4dC5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBXZSBoYXZlIG5vIGxpZmUtY3ljbGVzIGFzc29jaWF0ZWQgd2l0aCBwb3J0YWxzLlxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFByb2ZpbGVyOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9maW5pc2hlZFdvcmskbWVtb2l6ZTIgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcyxcbiAgICAgICAgICAgICAgb25Db21taXQgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uQ29tbWl0LFxuICAgICAgICAgICAgICBvblJlbmRlciA9IF9maW5pc2hlZFdvcmskbWVtb2l6ZTIub25SZW5kZXI7XG4gICAgICAgICAgdmFyIGVmZmVjdER1cmF0aW9uID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbjtcbiAgICAgICAgICB2YXIgY29tbWl0VGltZSA9IGdldENvbW1pdFRpbWUoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2Ygb25SZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgb25SZW5kZXIoZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMuaWQsIGN1cnJlbnQgPT09IG51bGwgPyAnbW91bnQnIDogJ3VwZGF0ZScsIGZpbmlzaGVkV29yay5hY3R1YWxEdXJhdGlvbiwgZmluaXNoZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24sIGZpbmlzaGVkV29yay5hY3R1YWxTdGFydFRpbWUsIGNvbW1pdFRpbWUsIGZpbmlzaGVkUm9vdC5tZW1vaXplZEludGVyYWN0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbikge1xuICB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgaW5zZXJ0ZWQgYnV0IHdlIG5lZWQgdG8gcmVjdXJzZSBkb3duIGl0c1xuICAgIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgICB2YXIgbm9kZSA9IGZpbmlzaGVkV29yaztcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZUluc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVJbnN0YW5jZShub2RlLnN0YXRlTm9kZSwgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTMgPSBub2RlLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoaXNIaWRkZW4pIHtcbiAgICAgICAgICBoaWRlVGV4dEluc3RhbmNlKF9pbnN0YW5jZTMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzLCBub2RlLm1lbW9pemVkUHJvcHMpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKChub2RlLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50IHx8IG5vZGUudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQpICYmIG5vZGUubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbCAmJiBub2RlICE9PSBmaW5pc2hlZFdvcmspIDsgZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpbmlzaGVkV29yaykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEF0dGFjaFJlZihmaW5pc2hlZFdvcmspIHtcbiAgdmFyIHJlZiA9IGZpbmlzaGVkV29yay5yZWY7XG5cbiAgaWYgKHJlZiAhPT0gbnVsbCkge1xuICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgdmFyIGluc3RhbmNlVG9Vc2U7XG5cbiAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgaW5zdGFuY2VUb1VzZSA9IGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBpbnN0YW5jZTtcbiAgICB9IC8vIE1vdmVkIG91dHNpZGUgdG8gZW5zdXJlIERDRSB3b3JrcyB3aXRoIHRoaXMgZmxhZ1xuXG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJlZihpbnN0YW5jZVRvVXNlKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoIXJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcmVmIG9iamVjdCBwcm92aWRlZCBmb3IgJXMuICcgKyAnVXNlIGVpdGhlciBhIHJlZi1zZXR0ZXIgZnVuY3Rpb24gb3IgUmVhY3QuY3JlYXRlUmVmKCkuJywgZ2V0Q29tcG9uZW50TmFtZShmaW5pc2hlZFdvcmsudHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJlZi5jdXJyZW50ID0gaW5zdGFuY2VUb1VzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0RGV0YWNoUmVmKGN1cnJlbnQpIHtcbiAgdmFyIGN1cnJlbnRSZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAoY3VycmVudFJlZiAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2YgY3VycmVudFJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFJlZihudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn0gLy8gVXNlci1vcmlnaW5hdGluZyBlcnJvcnMgKGxpZmVjeWNsZXMgYW5kIHJlZnMpIHNob3VsZCBub3QgaW50ZXJydXB0XG4vLyBkZWxldGlvbiwgc28gZG9uJ3QgbGV0IHRoZW0gdGhyb3cuIEhvc3Qtb3JpZ2luYXRpbmcgZXJyb3JzIHNob3VsZFxuLy8gaW50ZXJydXB0IGRlbGV0aW9uLCBzbyBpdCdzIG9rYXlcblxuXG5mdW5jdGlvbiBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICBvbkNvbW1pdFVubW91bnQoY3VycmVudCk7XG5cbiAgc3dpdGNoIChjdXJyZW50LnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgdmFyIHVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3Q7XG5cbiAgICAgICAgICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgICAgICAgICAgdmFyIGVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgIHZhciBfZWZmZWN0MiA9IGVmZmVjdCxcbiAgICAgICAgICAgICAgICAgIGRlc3Ryb3kgPSBfZWZmZWN0Mi5kZXN0cm95LFxuICAgICAgICAgICAgICAgICAgdGFnID0gX2VmZmVjdDIudGFnO1xuXG4gICAgICAgICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoKHRhZyAmIFBhc3NpdmUkMSkgIT09IE5vRmxhZ3MkMSkge1xuICAgICAgICAgICAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoY3VycmVudCwgZWZmZWN0KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBzYWZlbHlDYWxsRGVzdHJveShjdXJyZW50LCBkZXN0cm95KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBlZmZlY3QgPSBlZmZlY3QubmV4dDtcbiAgICAgICAgICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHNhZmVseUNhbGxDb21wb25lbnRXaWxsVW5tb3VudChjdXJyZW50LCBpbnN0YW5jZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHNhZmVseURldGFjaFJlZihjdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiB0aGlzIGlzIHJlY3Vyc2l2ZS5cbiAgICAgICAgLy8gV2UgYXJlIGFsc28gbm90IHVzaW5nIHRoaXMgcGFyZW50IGJlY2F1c2VcbiAgICAgICAgLy8gdGhlIHBvcnRhbCB3aWxsIGdldCBwdXNoZWQgaW1tZWRpYXRlbHkuXG4gICAgICAgIHtcbiAgICAgICAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWh5ZHJhdGVkRnJhZ21lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTY29wZUNvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFdoaWxlIHdlJ3JlIGluc2lkZSBhIHJlbW92ZWQgaG9zdCBub2RlIHdlIGRvbid0IHdhbnQgdG8gY2FsbFxuICAvLyByZW1vdmVDaGlsZCBvbiB0aGUgaW5uZXIgbm9kZXMgYmVjYXVzZSB0aGV5J3JlIHJlbW92ZWQgYnkgdGhlIHRvcFxuICAvLyBjYWxsIGFueXdheS4gV2UgYWxzbyB3YW50IHRvIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQgb24gYWxsXG4gIC8vIGNvbXBvc2l0ZXMgYmVmb3JlIHRoaXMgaG9zdCBub2RlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS4gVGhlcmVmb3JlXG4gIC8vIHdlIGRvIGFuIGlubmVyIGxvb3Agd2hpbGUgd2UncmUgc3RpbGwgaW5zaWRlIHRoZSBob3N0IG5vZGUuXG4gIHZhciBub2RlID0gcm9vdDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB0aGV5IG1heSBjb250YWluIG1vcmUgY29tcG9zaXRlIG9yIGhvc3Qgbm9kZXMuXG4gICAgLy8gU2tpcCBwb3J0YWxzIGJlY2F1c2UgY29tbWl0VW5tb3VudCgpIGN1cnJlbnRseSB2aXNpdHMgdGhlbSByZWN1cnNpdmVseS5cblxuICAgIGlmIChub2RlLmNoaWxkICE9PSBudWxsICYmICggLy8gSWYgd2UgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIHVzaW5nIGNvbW1pdFVubW91bnQgYWJvdmUuXG4gICAgLy8gSWYgd2UgZG9uJ3QgdXNlIG11dGF0aW9uIHdlIGRyaWxsIGRvd24gaW50byBwb3J0YWxzIGhlcmUgaW5zdGVhZC5cbiAgICAgbm9kZS50YWcgIT09IEhvc3RQb3J0YWwpKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSByb290KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb290KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyTXV0YXRpb24oZmliZXIpIHtcbiAgLy8gQ3V0IG9mZiB0aGUgcmV0dXJuIHBvaW50ZXJzIHRvIGRpc2Nvbm5lY3QgaXQgZnJvbSB0aGUgdHJlZS4gSWRlYWxseSwgd2VcbiAgLy8gc2hvdWxkIGNsZWFyIHRoZSBjaGlsZCBwb2ludGVyIG9mIHRoZSBwYXJlbnQgYWx0ZXJuYXRlIHRvIGxldCB0aGlzXG4gIC8vIGdldCBHQzplZCBidXQgd2UgZG9uJ3Qga25vdyB3aGljaCBmb3Igc3VyZSB3aGljaCBwYXJlbnQgaXMgdGhlIGN1cnJlbnRcbiAgLy8gb25lIHNvIHdlJ2xsIHNldHRsZSBmb3IgR0M6aW5nIHRoZSBzdWJ0cmVlIG9mIHRoaXMgY2hpbGQuIFRoaXMgY2hpbGRcbiAgLy8gaXRzZWxmIHdpbGwgYmUgR0M6ZWQgd2hlbiB0aGUgcGFyZW50IHVwZGF0ZXMgdGhlIG5leHQgdGltZS5cbiAgLy8gTm90ZTogd2UgY2Fubm90IG51bGwgb3V0IHNpYmxpbmcgaGVyZSwgb3RoZXJ3aXNlIGl0IGNhbiBjYXVzZSBpc3N1ZXNcbiAgLy8gd2l0aCBmaW5kRE9NTm9kZSBhbmQgaG93IGl0IHJlcXVpcmVzIHRoZSBzaWJsaW5nIGZpZWxkIHRvIGNhcnJ5IG91dFxuICAvLyB0cmF2ZXJzYWwgaW4gYSBsYXRlciBlZmZlY3QuIFNlZSBQUiAjMTY4MjAuIFdlIG5vdyBjbGVhciB0aGUgc2libGluZ1xuICAvLyBmaWVsZCBhZnRlciBlZmZlY3RzLCBzZWU6IGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvL1xuICAvLyBEb24ndCBkaXNjb25uZWN0IHN0YXRlTm9kZSBub3c7IGl0IHdpbGwgYmUgZGV0YWNoZWQgaW4gZGV0YWNoRmliZXJBZnRlckVmZmVjdHMuXG4gIC8vIEl0IG1heSBiZSByZXF1aXJlZCBpZiB0aGUgY3VycmVudCBjb21wb25lbnQgaXMgYW4gZXJyb3IgYm91bmRhcnksXG4gIC8vIGFuZCBvbmUgb2YgaXRzIGRlc2NlbmRhbnRzIHRocm93cyB3aGlsZSB1bm1vdW50aW5nIGEgcGFzc2l2ZSBlZmZlY3QuXG4gIGZpYmVyLmFsdGVybmF0ZSA9IG51bGw7XG4gIGZpYmVyLmNoaWxkID0gbnVsbDtcbiAgZmliZXIuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgZmliZXIuZmlyc3RFZmZlY3QgPSBudWxsO1xuICBmaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICBmaWJlci5wZW5kaW5nUHJvcHMgPSBudWxsO1xuICBmaWJlci5yZXR1cm4gPSBudWxsO1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IG51bGw7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRIb3N0UGFyZW50RmliZXIoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgaWYgKGlzSG9zdFBhcmVudChwYXJlbnQpKSB7XG4gICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9zdFBhcmVudChmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QgfHwgZmliZXIudGFnID09PSBIb3N0UG9ydGFsO1xufVxuXG5mdW5jdGlvbiBnZXRIb3N0U2libGluZyhmaWJlcikge1xuICAvLyBXZSdyZSBnb2luZyB0byBzZWFyY2ggZm9yd2FyZCBpbnRvIHRoZSB0cmVlIHVudGlsIHdlIGZpbmQgYSBzaWJsaW5nIGhvc3RcbiAgLy8gbm9kZS4gVW5mb3J0dW5hdGVseSwgaWYgbXVsdGlwbGUgaW5zZXJ0aW9ucyBhcmUgZG9uZSBpbiBhIHJvdyB3ZSBoYXZlIHRvXG4gIC8vIHNlYXJjaCBwYXN0IHRoZW0uIFRoaXMgbGVhZHMgdG8gZXhwb25lbnRpYWwgc2VhcmNoIGZvciB0aGUgbmV4dCBzaWJsaW5nLlxuICAvLyBUT0RPOiBGaW5kIGEgbW9yZSBlZmZpY2llbnQgd2F5IHRvIGRvIHRoaXMuXG4gIHZhciBub2RlID0gZmliZXI7XG5cbiAgc2libGluZ3M6IHdoaWxlICh0cnVlKSB7XG4gICAgLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcsIGxldCdzIHRyeSB0aGUgbmV4dCBzaWJsaW5nLlxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBpc0hvc3RQYXJlbnQobm9kZS5yZXR1cm4pKSB7XG4gICAgICAgIC8vIElmIHdlIHBvcCBvdXQgb2YgdGhlIHJvb3Qgb3IgaGl0IHRoZSBwYXJlbnQgdGhlIGZpYmVyIHdlIGFyZSB0aGVcbiAgICAgICAgLy8gbGFzdCBzaWJsaW5nLlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuXG4gICAgd2hpbGUgKG5vZGUudGFnICE9PSBIb3N0Q29tcG9uZW50ICYmIG5vZGUudGFnICE9PSBIb3N0VGV4dCAmJiBub2RlLnRhZyAhPT0gRGVoeWRyYXRlZEZyYWdtZW50KSB7XG4gICAgICAvLyBJZiBpdCBpcyBub3QgaG9zdCBub2RlIGFuZCwgd2UgbWlnaHQgaGF2ZSBhIGhvc3Qgbm9kZSBpbnNpZGUgaXQuXG4gICAgICAvLyBUcnkgdG8gc2VhcmNoIGRvd24gdW50aWwgd2UgZmluZCBvbmUuXG4gICAgICBpZiAobm9kZS5mbGFncyAmIFBsYWNlbWVudCkge1xuICAgICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IC8vIElmIHdlIGRvbid0IGhhdmUgYSBjaGlsZCwgdHJ5IHRoZSBzaWJsaW5ncyBpbnN0ZWFkLlxuICAgICAgLy8gV2UgYWxzbyBza2lwIHBvcnRhbHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgcGFydCBvZiB0aGlzIGhvc3QgdHJlZS5cblxuXG4gICAgICBpZiAobm9kZS5jaGlsZCA9PT0gbnVsbCB8fCBub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICBjb250aW51ZSBzaWJsaW5ncztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICB9XG4gICAgfSAvLyBDaGVjayBpZiB0aGlzIGhvc3Qgbm9kZSBpcyBzdGFibGUgb3IgYWJvdXQgdG8gYmUgcGxhY2VkLlxuXG5cbiAgICBpZiAoIShub2RlLmZsYWdzICYgUGxhY2VtZW50KSkge1xuICAgICAgLy8gRm91bmQgaXQhXG4gICAgICByZXR1cm4gbm9kZS5zdGF0ZU5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFBsYWNlbWVudChmaW5pc2hlZFdvcmspIHtcblxuXG4gIHZhciBwYXJlbnRGaWJlciA9IGdldEhvc3RQYXJlbnRGaWJlcihmaW5pc2hlZFdvcmspOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgcGFyZW50O1xuICB2YXIgaXNDb250YWluZXI7XG4gIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnRGaWJlci5zdGF0ZU5vZGU7XG5cbiAgc3dpdGNoIChwYXJlbnRGaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICBpc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICBpc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lLW5vLWZhbGx0aHJvdWdoXG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob3N0IHBhcmVudCBmaWJlci4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgfVxuXG4gIGlmIChwYXJlbnRGaWJlci5mbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgIC8vIFJlc2V0IHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIHBhcmVudCBiZWZvcmUgZG9pbmcgYW55IGluc2VydGlvbnNcbiAgICByZXNldFRleHRDb250ZW50KHBhcmVudCk7IC8vIENsZWFyIENvbnRlbnRSZXNldCBmcm9tIHRoZSBlZmZlY3QgdGFnXG5cbiAgICBwYXJlbnRGaWJlci5mbGFncyAmPSB+Q29udGVudFJlc2V0O1xuICB9XG5cbiAgdmFyIGJlZm9yZSA9IGdldEhvc3RTaWJsaW5nKGZpbmlzaGVkV29yayk7IC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuXG4gIGlmIChpc0NvbnRhaW5lcikge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoZmluaXNoZWRXb3JrLCBiZWZvcmUsIHBhcmVudCk7XG4gIH0gZWxzZSB7XG4gICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEluQ29udGFpbmVyQmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKHBhcmVudCwgc3RhdGVOb2RlKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2Uge1xuICAgIHZhciBjaGlsZCA9IG5vZGUuY2hpbGQ7XG5cbiAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlSW50b0NvbnRhaW5lcihzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShub2RlLCBiZWZvcmUsIHBhcmVudCkge1xuICB2YXIgdGFnID0gbm9kZS50YWc7XG4gIHZhciBpc0hvc3QgPSB0YWcgPT09IEhvc3RDb21wb25lbnQgfHwgdGFnID09PSBIb3N0VGV4dDtcblxuICBpZiAoaXNIb3N0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgIHZhciBzdGF0ZU5vZGUgPSBpc0hvc3QgPyBub2RlLnN0YXRlTm9kZSA6IG5vZGUuc3RhdGVOb2RlLmluc3RhbmNlO1xuXG4gICAgaWYgKGJlZm9yZSkge1xuICAgICAgaW5zZXJ0QmVmb3JlKHBhcmVudCwgc3RhdGVOb2RlLCBiZWZvcmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcHBlbmRDaGlsZChwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUoY2hpbGQsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgIHZhciBzaWJsaW5nID0gY2hpbGQuc2libGluZztcblxuICAgICAgd2hpbGUgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKHNpYmxpbmcsIGJlZm9yZSwgcGFyZW50KTtcbiAgICAgICAgc2libGluZyA9IHNpYmxpbmcuc2libGluZztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBkZWxldGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICB2YXIgbm9kZSA9IGN1cnJlbnQ7IC8vIEVhY2ggaXRlcmF0aW9uLCBjdXJyZW50UGFyZW50IGlzIHBvcHVsYXRlZCB3aXRoIG5vZGUncyBob3N0IHBhcmVudCBpZiBub3RcbiAgLy8gY3VycmVudFBhcmVudElzVmFsaWQuXG5cbiAgdmFyIGN1cnJlbnRQYXJlbnRJc1ZhbGlkID0gZmFsc2U7IC8vIE5vdGU6IHRoZXNlIHR3byB2YXJpYWJsZXMgKm11c3QqIGFsd2F5cyBiZSB1cGRhdGVkIHRvZ2V0aGVyLlxuXG4gIHZhciBjdXJyZW50UGFyZW50O1xuICB2YXIgY3VycmVudFBhcmVudElzQ29udGFpbmVyO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKCFjdXJyZW50UGFyZW50SXNWYWxpZCkge1xuICAgICAgdmFyIHBhcmVudCA9IG5vZGUucmV0dXJuO1xuXG4gICAgICBmaW5kUGFyZW50OiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAoIShwYXJlbnQgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gZmluZCBhIGhvc3QgcGFyZW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHBhcmVudFN0YXRlTm9kZSA9IHBhcmVudC5zdGF0ZU5vZGU7XG5cbiAgICAgICAgc3dpdGNoIChwYXJlbnQudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZTtcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IGZhbHNlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7XG4gICAgICAgICAgICBicmVhayBmaW5kUGFyZW50O1xuXG4gICAgICAgIH1cblxuICAgICAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgY29tbWl0TmVzdGVkVW5tb3VudHMoZmluaXNoZWRSb290LCBub2RlKTsgLy8gQWZ0ZXIgYWxsIHRoZSBjaGlsZHJlbiBoYXZlIHVubW91bnRlZCwgaXQgaXMgbm93IHNhZmUgdG8gcmVtb3ZlIHRoZVxuICAgICAgLy8gbm9kZSBmcm9tIHRoZSB0cmVlLlxuXG4gICAgICBpZiAoY3VycmVudFBhcmVudElzQ29udGFpbmVyKSB7XG4gICAgICAgIHJlbW92ZUNoaWxkRnJvbUNvbnRhaW5lcihjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVDaGlsZChjdXJyZW50UGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IC8vIERvbid0IHZpc2l0IGNoaWxkcmVuIGJlY2F1c2Ugd2UgYWxyZWFkeSB2aXNpdGVkIHRoZW0uXG5cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIGludG8gYSBwb3J0YWwsIGl0IGJlY29tZXMgdGhlIHBhcmVudCB0byByZW1vdmUgZnJvbS5cbiAgICAgICAgLy8gV2Ugd2lsbCByZWFzc2lnbiBpdCBiYWNrIHdoZW4gd2UgcG9wIHRoZSBwb3J0YWwgb24gdGhlIHdheSB1cC5cbiAgICAgICAgY3VycmVudFBhcmVudCA9IG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lciA9IHRydWU7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgcG9ydGFscyBtaWdodCBjb250YWluIGhvc3QgY29tcG9uZW50cy5cblxuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIG5vZGUpOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIG1heSBmaW5kIG1vcmUgaG9zdCBjb21wb25lbnRzIGJlbG93LlxuXG4gICAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcblxuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgIC8vIFdoZW4gd2UgZ28gb3V0IG9mIHRoZSBwb3J0YWwsIHdlIG5lZWQgdG8gcmVzdG9yZSB0aGUgcGFyZW50LlxuICAgICAgICAvLyBTaW5jZSB3ZSBkb24ndCBrZWVwIGEgc3RhY2sgb2YgdGhlbSwgd2Ugd2lsbCBzZWFyY2ggZm9yIGl0LlxuICAgICAgICBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERlbGV0aW9uKGZpbmlzaGVkUm9vdCwgY3VycmVudCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICB7XG4gICAgLy8gUmVjdXJzaXZlbHkgZGVsZXRlIGFsbCBob3N0IG5vZGVzIGZyb20gdGhlIHBhcmVudC5cbiAgICAvLyBEZXRhY2ggcmVmcyBhbmQgY2FsbCBjb21wb25lbnRXaWxsVW5tb3VudCgpIG9uIHRoZSB3aG9sZSBzdWJ0cmVlLlxuICAgIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQpO1xuICB9XG5cbiAgdmFyIGFsdGVybmF0ZSA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuICBkZXRhY2hGaWJlck11dGF0aW9uKGN1cnJlbnQpO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBkZXRhY2hGaWJlck11dGF0aW9uKGFsdGVybmF0ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0V29yayhjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcblxuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIC8vIExheW91dCBlZmZlY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nIHRoZSBtdXRhdGlvbiBwaGFzZSBzbyB0aGF0IGFsbFxuICAgICAgICAvLyBkZXN0cm95IGZ1bmN0aW9ucyBmb3IgYWxsIGZpYmVycyBhcmUgY2FsbGVkIGJlZm9yZSBhbnkgY3JlYXRlIGZ1bmN0aW9ucy5cbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyBzaWJsaW5nIGNvbXBvbmVudCBlZmZlY3RzIGZyb20gaW50ZXJmZXJpbmcgd2l0aCBlYWNoIG90aGVyLFxuICAgICAgICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IHNob3VsZCBuZXZlciBvdmVycmlkZSBhIHJlZiBzZXRcbiAgICAgICAgLy8gYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQgZHVyaW5nIHRoZSBzYW1lIGNvbW1pdC5cbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdEhvb2tFZmZlY3RMaXN0VW5tb3VudChMYXlvdXQgfCBIYXNFZmZlY3QsIGZpbmlzaGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9IG51bGwpIHtcbiAgICAgICAgICAvLyBDb21taXQgdGhlIHdvcmsgcHJlcGFyZWQgZWFybGllci5cbiAgICAgICAgICB2YXIgbmV3UHJvcHMgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAgIC8vIGFzIHRoZSBuZXdQcm9wcy4gVGhlIHVwZGF0ZVBheWxvYWQgd2lsbCBjb250YWluIHRoZSByZWFsIGNoYW5nZSBpblxuICAgICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICAgIHZhciBvbGRQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdQcm9wcztcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlOyAvLyBUT0RPOiBUeXBlIHRoZSB1cGRhdGVRdWV1ZSB0byBiZSBzcGVjaWZpYyB0byBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgICAgICAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gICAgICAgICAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbW1pdFVwZGF0ZShpbnN0YW5jZSwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAge1xuICAgICAgICBpZiAoIShmaW5pc2hlZFdvcmsuc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgc2hvdWxkIGhhdmUgYSB0ZXh0IG5vZGUgaW5pdGlhbGl6ZWQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgdmFyIG5ld1RleHQgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wczsgLy8gRm9yIGh5ZHJhdGlvbiB3ZSByZXVzZSB0aGUgdXBkYXRlIHBhdGggYnV0IHdlIHRyZWF0IHRoZSBvbGRQcm9wc1xuICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLlxuXG4gICAgICAgIHZhciBvbGRUZXh0ID0gY3VycmVudCAhPT0gbnVsbCA/IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyA6IG5ld1RleHQ7XG4gICAgICAgIGNvbW1pdFRleHRVcGRhdGUodGV4dEluc3RhbmNlLCBvbGRUZXh0LCBuZXdUZXh0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfcm9vdCA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICBpZiAoX3Jvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gV2UndmUganVzdCBoeWRyYXRlZC4gTm8gbmVlZCB0byBoeWRyYXRlIGFnYWluLlxuICAgICAgICAgICAgX3Jvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgY29tbWl0SHlkcmF0ZWRDb250YWluZXIoX3Jvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgY29tbWl0U3VzcGVuc2VDb21wb25lbnQoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEluY29tcGxldGVDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICAgIHZhciBpc0hpZGRlbiA9IG5ld1N0YXRlICE9PSBudWxsO1xuICAgICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihmaW5pc2hlZFdvcmssIGlzSGlkZGVuKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yaykge1xuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgIT09IG51bGwpIHtcbiAgICBtYXJrQ29tbWl0VGltZU9mRmFsbGJhY2soKTtcblxuICAgIHtcbiAgICAgIC8vIEhpZGUgdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgdGhhdCBjb250YWlucyB0aGUgcHJpbWFyeSBjaGlsZHJlbi4gVE9ETzpcbiAgICAgIC8vIElkZWFsbHksIHRoaXMgZWZmZWN0IHdvdWxkIGhhdmUgYmVlbiBzY2hlZHVsZWQgb24gdGhlIE9mZnNjcmVlbiBmaWJlclxuICAgICAgLy8gaXRzZWxmLiBUaGF0J3MgaG93IHVuaGlkaW5nIHdvcmtzOiB0aGUgT2Zmc2NyZWVuIGNvbXBvbmVudCBzY2hlZHVsZXMgYW5cbiAgICAgIC8vIGVmZmVjdCBvbiBpdHNlbGYuIEhvd2V2ZXIsIGluIHRoaXMgY2FzZSwgdGhlIGNvbXBvbmVudCBkaWRuJ3QgY29tcGxldGUsXG4gICAgICAvLyBzbyB0aGUgZmliZXIgd2FzIG5ldmVyIGFkZGVkIHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgbm9ybWFsIHBhdGguIFdlXG4gICAgICAvLyBjb3VsZCBoYXZlIGFwcGVuZGVkIGl0IHRvIHRoZSBlZmZlY3QgbGlzdCBpbiB0aGUgU3VzcGVuc2UgY29tcG9uZW50J3NcbiAgICAgIC8vIHNlY29uZCBwYXNzLCBidXQgZG9pbmcgaXQgdGhpcyB3YXkgaXMgbGVzcyBjb21wbGljYXRlZC4gVGhpcyB3b3VsZCBiZVxuICAgICAgLy8gc2ltcGxlciBpZiB3ZSBnb3QgcmlkIG9mIHRoZSBlZmZlY3QgbGlzdCBhbmQgdHJhdmVyc2VkIHRoZSB0cmVlLCBsaWtlXG4gICAgICAvLyB3ZSdyZSBwbGFubmluZyB0byBkby5cbiAgICAgIHZhciBwcmltYXJ5Q2hpbGRQYXJlbnQgPSBmaW5pc2hlZFdvcmsuY2hpbGQ7XG4gICAgICBoaWRlT3JVbmhpZGVBbGxDaGlsZHJlbihwcmltYXJ5Q2hpbGRQYXJlbnQsIHRydWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUh5ZHJhdGlvbkNhbGxiYWNrcyhmaW5pc2hlZFJvb3QsIGZpbmlzaGVkV29yaykge1xuXG4gIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChuZXdTdGF0ZSA9PT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gZmluaXNoZWRXb3JrLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBzdXNwZW5zZUluc3RhbmNlID0gcHJldlN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKHN1c3BlbnNlSW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBjb21taXRIeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0YWNoU3VzcGVuc2VSZXRyeUxpc3RlbmVycyhmaW5pc2hlZFdvcmspIHtcbiAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgdGhlbiBpdCB3aWxsIGhhdmUgYSBzZXQgb2Ygd2FrZWFibGVzLlxuICAvLyBGb3IgZWFjaCB3YWtlYWJsZSwgYXR0YWNoIGEgbGlzdGVuZXIgc28gdGhhdCB3aGVuIGl0IHJlc29sdmVzLCBSZWFjdFxuICAvLyBhdHRlbXB0cyB0byByZS1yZW5kZXIgdGhlIGJvdW5kYXJ5IGluIHRoZSBwcmltYXJ5IChwcmUtdGltZW91dCkgc3RhdGUuXG4gIHZhciB3YWtlYWJsZXMgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG5cbiAgaWYgKHdha2VhYmxlcyAhPT0gbnVsbCkge1xuICAgIGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgdmFyIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgaWYgKHJldHJ5Q2FjaGUgPT09IG51bGwpIHtcbiAgICAgIHJldHJ5Q2FjaGUgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlID0gbmV3IFBvc3NpYmx5V2Vha1NldCgpO1xuICAgIH1cblxuICAgIHdha2VhYmxlcy5mb3JFYWNoKGZ1bmN0aW9uICh3YWtlYWJsZSkge1xuICAgICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgYm91bmRhcnkgZmliZXIgdG8gcHJldmVudCByZWR1bmRhbnQgbGlzdGVuZXJzLlxuICAgICAgdmFyIHJldHJ5ID0gcmVzb2x2ZVJldHJ5V2FrZWFibGUuYmluZChudWxsLCBmaW5pc2hlZFdvcmssIHdha2VhYmxlKTtcblxuICAgICAgaWYgKCFyZXRyeUNhY2hlLmhhcyh3YWtlYWJsZSkpIHtcbiAgICAgICAge1xuICAgICAgICAgIGlmICh3YWtlYWJsZS5fX3JlYWN0RG9Ob3RUcmFjZUludGVyYWN0aW9ucyAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgcmV0cnkgPSB0cmFjaW5nLnVuc3RhYmxlX3dyYXAocmV0cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHJ5Q2FjaGUuYWRkKHdha2VhYmxlKTtcbiAgICAgICAgd2FrZWFibGUudGhlbihyZXRyeSwgcmV0cnkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIFRoaXMgZnVuY3Rpb24gZGV0ZWN0cyB3aGVuIGEgU3VzcGVuc2UgYm91bmRhcnkgZ29lcyBmcm9tIHZpc2libGUgdG8gaGlkZGVuLlxuLy8gSXQgcmV0dXJucyBmYWxzZSBpZiB0aGUgYm91bmRhcnkgaXMgYWxyZWFkeSBoaWRkZW4uXG4vLyBUT0RPOiBVc2UgYW4gZWZmZWN0IHRhZy5cblxuXG5mdW5jdGlvbiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBmaW5pc2hlZFdvcmspIHtcbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAob2xkU3RhdGUgPT09IG51bGwgfHwgb2xkU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG4gICAgICByZXR1cm4gbmV3U3RhdGUgIT09IG51bGwgJiYgbmV3U3RhdGUuZGVoeWRyYXRlZCA9PT0gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQoY3VycmVudCkge1xuXG4gIHJlc2V0VGV4dENvbnRlbnQoY3VycmVudC5zdGF0ZU5vZGUpO1xufVxuXG52YXIgQ09NUE9ORU5UX1RZUEUgPSAwO1xudmFyIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IDE7XG52YXIgUk9MRV9UWVBFID0gMjtcbnZhciBURVNUX05BTUVfVFlQRSA9IDM7XG52YXIgVEVYVF9UWVBFID0gNDtcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yJDEgPSBTeW1ib2wuZm9yO1xuICBDT01QT05FTlRfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5jb21wb25lbnQnKTtcbiAgSEFTX1BTRVVET19DTEFTU19UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLmhhc19wc2V1ZG9fY2xhc3MnKTtcbiAgUk9MRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnJvbGUnKTtcbiAgVEVTVF9OQU1FX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGVzdF9pZCcpO1xuICBURVhUX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IudGV4dCcpO1xufVxudmFyIGNvbW1pdEhvb2tzID0gW107XG5mdW5jdGlvbiBvbkNvbW1pdFJvb3QkMSgpIHtcbiAge1xuICAgIGNvbW1pdEhvb2tzLmZvckVhY2goZnVuY3Rpb24gKGNvbW1pdEhvb2spIHtcbiAgICAgIHJldHVybiBjb21taXRIb29rKCk7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBSZWFjdEN1cnJlbnRPd25lciQyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXIsXG4gICAgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSBSZWFjdFNoYXJlZEludGVybmFscy5Jc1NvbWVSZW5kZXJlckFjdGluZztcbnZhciBOb0NvbnRleHQgPVxuLyogICAgICAgICAgICAgKi9cbjA7XG52YXIgQmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAqL1xuMTtcbnZhciBFdmVudENvbnRleHQgPVxuLyogICAgICAgICAgICAgICAgICovXG4yO1xudmFyIERpc2NyZXRlRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgKi9cbjQ7XG52YXIgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCA9XG4vKiAgICAgICAqL1xuODtcbnZhciBSZW5kZXJDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4xNjtcbnZhciBDb21taXRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICovXG4zMjtcbnZhciBSZXRyeUFmdGVyRXJyb3IgPVxuLyogICAgICAgKi9cbjY0O1xudmFyIFJvb3RJbmNvbXBsZXRlID0gMDtcbnZhciBSb290RmF0YWxFcnJvcmVkID0gMTtcbnZhciBSb290RXJyb3JlZCA9IDI7XG52YXIgUm9vdFN1c3BlbmRlZCA9IDM7XG52YXIgUm9vdFN1c3BlbmRlZFdpdGhEZWxheSA9IDQ7XG52YXIgUm9vdENvbXBsZXRlZCA9IDU7IC8vIERlc2NyaWJlcyB3aGVyZSB3ZSBhcmUgaW4gdGhlIFJlYWN0IGV4ZWN1dGlvbiBzdGFja1xuXG52YXIgZXhlY3V0aW9uQ29udGV4dCA9IE5vQ29udGV4dDsgLy8gVGhlIHJvb3Qgd2UncmUgd29ya2luZyBvblxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDsgLy8gVGhlIGZpYmVyIHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzID0gbnVsbDsgLy8gVGhlIGxhbmVzIHdlJ3JlIHJlbmRlcmluZ1xuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBTdGFjayB0aGF0IGFsbG93cyBjb21wb25lbnRzIHRvIGNoYW5nZSB0aGUgcmVuZGVyIGxhbmVzIGZvciBpdHMgc3VidHJlZVxuLy8gVGhpcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHdvcmtpbmcgb24gYXQgdGhlIHJvb3QuIFRoZSBvbmx5XG4vLyBjYXNlIHdoZXJlIGl0J3MgZGlmZmVyZW50IGZyb20gYHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzYCBpcyB3aGVuIHdlXG4vLyBlbnRlciBhIHN1YnRyZWUgdGhhdCBpcyBoaWRkZW4gYW5kIG5lZWRzIHRvIGJlIHVuaGlkZGVuOiBTdXNwZW5zZSBhbmRcbi8vIE9mZnNjcmVlbiBjb21wb25lbnQuXG4vL1xuLy8gTW9zdCB0aGluZ3MgaW4gdGhlIHdvcmsgbG9vcCBzaG91bGQgZGVhbCB3aXRoIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLlxuLy8gTW9zdCB0aGluZ3MgaW4gYmVnaW4vY29tcGxldGUgcGhhc2VzIHNob3VsZCBkZWFsIHdpdGggc3VidHJlZVJlbmRlckxhbmVzLlxuXG52YXIgc3VidHJlZVJlbmRlckxhbmVzID0gTm9MYW5lcztcbnZhciBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IgPSBjcmVhdGVDdXJzb3IoTm9MYW5lcyk7IC8vIFdoZXRoZXIgdG8gcm9vdCBjb21wbGV0ZWQsIGVycm9yZWQsIHN1c3BlbmRlZCwgZXRjLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RJbmNvbXBsZXRlOyAvLyBBIGZhdGFsIGVycm9yLCBpZiBvbmUgaXMgdGhyb3duXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yID0gbnVsbDsgLy8gXCJJbmNsdWRlZFwiIGxhbmVzIHJlZmVyIHRvIGxhbmVzIHRoYXQgd2VyZSB3b3JrZWQgb24gZHVyaW5nIHRoaXMgcmVuZGVyLiBJdCdzXG4vLyBzbGlnaHRseSBkaWZmZXJlbnQgdGhhbiBgcmVuZGVyTGFuZXNgIGJlY2F1c2UgYHJlbmRlckxhbmVzYCBjYW4gY2hhbmdlIGFzIHlvdVxuLy8gZW50ZXIgYW5kIGV4aXQgYW4gT2Zmc2NyZWVuIHRyZWUuIFRoaXMgdmFsdWUgaXMgdGhlIGNvbWJpbmF0aW9uIG9mIGFsbCByZW5kZXJcbi8vIGxhbmVzIGZvciB0aGUgZW50aXJlIHJlbmRlciBwaGFzZS5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgd29yayBsZWZ0IG92ZXIgYnkgY29tcG9uZW50cyB0aGF0IHdlcmUgdmlzaXRlZCBkdXJpbmcgdGhpcyByZW5kZXIuIE9ubHlcbi8vIGluY2x1ZGVzIHVucHJvY2Vzc2VkIHVwZGF0ZXMsIG5vdCB3b3JrIGluIGJhaWxlZCBvdXQgY2hpbGRyZW4uXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCAoaW4gYW4gaW50ZXJsZWF2ZWQgZXZlbnQpIGR1cmluZyB0aGlzIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7IC8vIExhbmVzIHRoYXQgd2VyZSBwaW5nZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG52YXIgbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgPSBudWxsOyAvLyBUaGUgbW9zdCByZWNlbnQgdGltZSB3ZSBjb21taXR0ZWQgYSBmYWxsYmFjay4gVGhpcyBsZXRzIHVzIGVuc3VyZSBhIHRyYWluXG4vLyBtb2RlbCB3aGVyZSB3ZSBkb24ndCBjb21taXQgbmV3IGxvYWRpbmcgc3RhdGVzIGluIHRvbyBxdWljayBzdWNjZXNzaW9uLlxuXG52YXIgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IDA7XG52YXIgRkFMTEJBQ0tfVEhST1RUTEVfTVMgPSA1MDA7IC8vIFRoZSBhYnNvbHV0ZSB0aW1lIGZvciB3aGVuIHdlIHNob3VsZCBzdGFydCBnaXZpbmcgdXAgb24gcmVuZGVyaW5nXG4vLyBtb3JlIGFuZCBwcmVmZXIgQ1BVIHN1c3BlbnNlIGhldXJpc3RpY3MgaW5zdGVhZC5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBJbmZpbml0eTsgLy8gSG93IGxvbmcgYSByZW5kZXIgaXMgc3VwcG9zZWQgdG8gdGFrZSBiZWZvcmUgd2Ugc3RhcnQgZm9sbG93aW5nIENQVVxuLy8gc3VzcGVuc2UgaGV1cmlzdGljcyBhbmQgb3B0IG91dCBvZiByZW5kZXJpbmcgbW9yZSBjb250ZW50LlxuXG52YXIgUkVOREVSX1RJTUVPVVRfTVMgPSA1MDA7XG5cbmZ1bmN0aW9uIHJlc2V0UmVuZGVyVGltZXIoKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWUgPSBub3coKSArIFJFTkRFUl9USU1FT1VUX01TO1xufVxuXG5mdW5jdGlvbiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkge1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyVGFyZ2V0VGltZTtcbn1cbnZhciBuZXh0RWZmZWN0ID0gbnVsbDtcbnZhciBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG52YXIgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbnZhciBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG52YXIgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbnZhciByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSBOb1ByaW9yaXR5JDE7XG52YXIgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBOb0xhbmVzO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xudmFyIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG52YXIgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7IC8vIFVzZSB0aGVzZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3Agb2YgbmVzdGVkIHVwZGF0ZXNcblxudmFyIE5FU1RFRF9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG52YXIgcm9vdFdpdGhOZXN0ZWRVcGRhdGVzID0gbnVsbDtcbnZhciBORVNURURfUEFTU0lWRV9VUERBVEVfTElNSVQgPSA1MDtcbnZhciBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwOyAvLyBNYXJrcyB0aGUgbmVlZCB0byByZXNjaGVkdWxlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIGF0IHRoZXNlIGxhbmVzXG4vLyBkdXJpbmcgdGhlIGNvbW1pdCBwaGFzZS4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgdHJhY2VkIGFjcm9zcyBjb21wb25lbnRzXG4vLyB0aGF0IHNwYXduIG5ldyB3b3JrIGR1cmluZyByZW5kZXIuIEUuZy4gaGlkZGVuIGJvdW5kYXJpZXMsIHN1c3BlbmRlZCBTU1Jcbi8vIGh5ZHJhdGlvbiBvciBTdXNwZW5zZUxpc3QuXG4vLyBUT0RPOiBDYW4gdXNlIGEgYml0bWFzayBpbnN0ZWFkIG9mIGFuIGFycmF5XG5cbnZhciBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7IC8vIElmIHR3byB1cGRhdGVzIGFyZSBzY2hlZHVsZWQgd2l0aGluIHRoZSBzYW1lIGV2ZW50LCB3ZSBzaG91bGQgdHJlYXQgdGhlaXJcbi8vIGV2ZW50IHRpbWVzIGFzIHNpbXVsdGFuZW91cywgZXZlbiBpZiB0aGUgYWN0dWFsIGNsb2NrIHRpbWUgaGFzIGFkdmFuY2VkXG4vLyBiZXR3ZWVuIHRoZSBmaXJzdCBhbmQgc2Vjb25kIGNhbGwuXG5cbnZhciBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG52YXIgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xudmFyIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7IC8vIERldiBvbmx5IGZsYWcgdGhhdCB0cmFja3MgaWYgcGFzc2l2ZSBlZmZlY3RzIGFyZSBjdXJyZW50bHkgYmVpbmcgZmx1c2hlZC5cbi8vIFdlIHdhcm4gYWJvdXQgc3RhdGUgdXBkYXRlcyBmb3IgdW5tb3VudGVkIGNvbXBvbmVudHMgZGlmZmVyZW50bHkgaW4gdGhpcyBjYXNlLlxuXG52YXIgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcbnZhciBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldFdvcmtJblByb2dyZXNzUm9vdCgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdDtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RFdmVudFRpbWUoKSB7XG4gIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICAvLyBXZSdyZSBpbnNpZGUgUmVhY3QsIHNvIGl0J3MgZmluZSB0byByZWFkIHRoZSBhY3R1YWwgdGltZS5cbiAgICByZXR1cm4gbm93KCk7XG4gIH0gLy8gV2UncmUgbm90IGluc2lkZSBSZWFjdCwgc28gd2UgbWF5IGJlIGluIHRoZSBtaWRkbGUgb2YgYSBicm93c2VyIGV2ZW50LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFRpbWUgIT09IE5vVGltZXN0YW1wKSB7XG4gICAgLy8gVXNlIHRoZSBzYW1lIHN0YXJ0IHRpbWUgZm9yIGFsbCB1cGRhdGVzIHVudGlsIHdlIGVudGVyIFJlYWN0IGFnYWluLlxuICAgIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xuICB9IC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZSBzaW5jZSBSZWFjdCB5aWVsZGVkLiBDb21wdXRlIGEgbmV3IHN0YXJ0IHRpbWUuXG5cblxuICBjdXJyZW50RXZlbnRUaW1lID0gbm93KCk7XG4gIHJldHVybiBjdXJyZW50RXZlbnRUaW1lO1xufVxuZnVuY3Rpb24gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpIHtcbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFRoZSBhbGdvcml0aG0gZm9yIGFzc2lnbmluZyBhbiB1cGRhdGUgdG8gYSBsYW5lIHNob3VsZCBiZSBzdGFibGUgZm9yIGFsbFxuICAvLyB1cGRhdGVzIGF0IHRoZSBzYW1lIHByaW9yaXR5IHdpdGhpbiB0aGUgc2FtZSBldmVudC4gVG8gZG8gdGhpcywgdGhlIGlucHV0c1xuICAvLyB0byB0aGUgYWxnb3JpdGhtIG11c3QgYmUgdGhlIHNhbWUuIEZvciBleGFtcGxlLCB3ZSB1c2UgdGhlIGByZW5kZXJMYW5lc2BcbiAgLy8gdG8gYXZvaWQgY2hvb3NpbmcgYSBsYW5lIHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHJlbmRlcmluZy5cbiAgLy9cbiAgLy8gSG93ZXZlciwgdGhlIFwiaW5jbHVkZWRcIiBsYW5lcyBjb3VsZCBiZSBtdXRhdGVkIGluIGJldHdlZW4gdXBkYXRlcyBpbiB0aGVcbiAgLy8gc2FtZSBldmVudCwgbGlrZSBpZiB5b3UgcGVyZm9ybSBhbiB1cGRhdGUgaW5zaWRlIGBmbHVzaFN5bmNgLiBPciBhbnkgb3RoZXJcbiAgLy8gY29kZSBwYXRoIHRoYXQgbWlnaHQgY2FsbCBgcHJlcGFyZUZyZXNoU3RhY2tgLlxuICAvL1xuICAvLyBUaGUgdHJpY2sgd2UgdXNlIGlzIHRvIGNhY2hlIHRoZSBmaXJzdCBvZiBlYWNoIG9mIHRoZXNlIGlucHV0cyB3aXRoaW4gYW5cbiAgLy8gZXZlbnQuIFRoZW4gcmVzZXQgdGhlIGNhY2hlZCB2YWx1ZXMgb25jZSB3ZSBjYW4gYmUgc3VyZSB0aGUgZXZlbnQgaXMgb3Zlci5cbiAgLy8gT3VyIGhldXJpc3RpYyBmb3IgdGhhdCBpcyB3aGVuZXZlciB3ZSBlbnRlciBhIGNvbmN1cnJlbnQgd29yayBsb29wLlxuICAvL1xuICAvLyBXZSdsbCBkbyB0aGUgc2FtZSBmb3IgYGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lc2AgYmVsb3cuXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICB2YXIgaXNUcmFuc2l0aW9uID0gcmVxdWVzdEN1cnJlbnRUcmFuc2l0aW9uKCkgIT09IE5vVHJhbnNpdGlvbjtcblxuICBpZiAoaXNUcmFuc2l0aW9uKSB7XG4gICAgaWYgKGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QgIT09IG51bGwgPyBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdC5wZW5kaW5nTGFuZXMgOiBOb0xhbmVzO1xuICAgIH1cblxuICAgIHJldHVybiBmaW5kVHJhbnNpdGlvbkxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMsIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyk7XG4gIH0gLy8gVE9ETzogUmVtb3ZlIHRoaXMgZGVwZW5kZW5jeSBvbiB0aGUgU2NoZWR1bGVyIHByaW9yaXR5LlxuICAvLyBUbyBkbyB0aGF0LCB3ZSdyZSByZXBsYWNpbmcgaXQgd2l0aCBhbiB1cGRhdGUgbGFuZSBwcmlvcml0eS5cblxuXG4gIHZhciBzY2hlZHVsZXJQcmlvcml0eSA9IGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCk7IC8vIFRoZSBvbGQgYmVoYXZpb3Igd2FzIHVzaW5nIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGUgU2NoZWR1bGVyLlxuICAvLyBUaGlzIGNvdXBsZXMgUmVhY3QgdG8gdGhlIFNjaGVkdWxlciBpbnRlcm5hbHMsIHNvIHdlJ3JlIHJlcGxhY2luZyBpdFxuICAvLyB3aXRoIHRoZSBjdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5IGFib3ZlLiBBcyBhbiBleGFtcGxlIG9mIGhvdyB0aGlzXG4gIC8vIGNvdWxkIGJlIHByb2JsZW1hdGljLCBpZiB3ZSdyZSBub3QgaW5zaWRlIGBTY2hlZHVsZXIucnVuV2l0aFByaW9yaXR5YCxcbiAgLy8gdGhlbiB3ZSdsbCBnZXQgdGhlIHByaW9yaXR5IG9mIHRoZSBjdXJyZW50IHJ1bm5pbmcgU2NoZWR1bGVyIHRhc2ssXG4gIC8vIHdoaWNoIGlzIHByb2JhYmx5IG5vdCB3aGF0IHdlIHdhbnQuXG5cbiAgdmFyIGxhbmU7XG5cbiAgaWYgKCAvLyBUT0RPOiBUZW1wb3JhcnkuIFdlJ3JlIHJlbW92aW5nIHRoZSBjb25jZXB0IG9mIGRpc2NyZXRlIHVwZGF0ZXMuXG4gIChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgc2NoZWR1bGVyUHJpb3JpdHkgPT09IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIpIHtcbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoSW5wdXREaXNjcmV0ZUxhbmVQcmlvcml0eSwgY3VycmVudEV2ZW50V2lwTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJMYW5lUHJpb3JpdHkgPSBzY2hlZHVsZXJQcmlvcml0eVRvTGFuZVByaW9yaXR5KHNjaGVkdWxlclByaW9yaXR5KTtcblxuICAgIGxhbmUgPSBmaW5kVXBkYXRlTGFuZShzY2hlZHVsZXJMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0UmV0cnlMYW5lKGZpYmVyKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGByZXF1ZXN0VXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiDigJQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgLy8gU3BlY2lhbCBjYXNlc1xuICB2YXIgbW9kZSA9IGZpYmVyLm1vZGU7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIFN5bmNMYW5lO1xuICB9IGVsc2UgaWYgKChtb2RlICYgQ29uY3VycmVudE1vZGUpID09PSBOb01vZGUpIHtcbiAgICByZXR1cm4gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSA9PT0gSW1tZWRpYXRlUHJpb3JpdHkkMSA/IFN5bmNMYW5lIDogU3luY0JhdGNoZWRMYW5lO1xuICB9IC8vIFNlZSBgcmVxdWVzdFVwZGF0ZUxhbmVgIGZvciBleHBsYW5hdGlvbiBvZiBgY3VycmVudEV2ZW50V2lwTGFuZXNgXG5cblxuICBpZiAoY3VycmVudEV2ZW50V2lwTGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICBjdXJyZW50RXZlbnRXaXBMYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXM7XG4gIH1cblxuICByZXR1cm4gZmluZFJldHJ5TGFuZShjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKSB7XG4gIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpO1xuICB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcik7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoZmliZXIsIGxhbmUpO1xuXG4gIGlmIChyb290ID09PSBudWxsKSB7XG4gICAgd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBNYXJrIHRoYXQgdGhlIHJvb3QgaGFzIGEgcGVuZGluZyB1cGRhdGUuXG5cblxuICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgbGFuZSwgZXZlbnRUaW1lKTtcblxuICBpZiAocm9vdCA9PT0gd29ya0luUHJvZ3Jlc3NSb290KSB7XG4gICAgLy8gUmVjZWl2ZWQgYW4gdXBkYXRlIHRvIGEgdHJlZSB0aGF0J3MgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuIE1hcmtcbiAgICAvLyB0aGF0IHRoZXJlIHdhcyBhbiBpbnRlcmxlYXZlZCB1cGRhdGUgd29yayBvbiB0aGlzIHJvb3QuIFVubGVzcyB0aGVcbiAgICAvLyBgZGVmZXJSZW5kZXJQaGFzZVVwZGF0ZVRvTmV4dEJhdGNoYCBmbGFnIGlzIG9mZiBhbmQgdGhpcyBpcyBhIHJlbmRlclxuICAgIC8vIHBoYXNlIHVwZGF0ZS4gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB0cmVhdCByZW5kZXIgcGhhc2UgdXBkYXRlcyBhcyBpZlxuICAgIC8vIHRoZXkgd2VyZSBpbnRlcmxlYXZlZCwgZm9yIGJhY2t3YXJkcyBjb21wYXQgcmVhc29ucy5cbiAgICB7XG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcywgbGFuZSk7XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkpIHtcbiAgICAgIC8vIFRoZSByb290IGFscmVhZHkgc3VzcGVuZGVkIHdpdGggYSBkZWxheSwgd2hpY2ggbWVhbnMgdGhpcyByZW5kZXJcbiAgICAgIC8vIGRlZmluaXRlbHkgd29uJ3QgZmluaXNoLiBTaW5jZSB3ZSBoYXZlIGEgbmV3IHVwZGF0ZSwgbGV0J3MgbWFyayBpdCBhc1xuICAgICAgLy8gc3VzcGVuZGVkIG5vdywgcmlnaHQgYmVmb3JlIG1hcmtpbmcgdGhlIGluY29taW5nIHVwZGF0ZS4gVGhpcyBoYXMgdGhlXG4gICAgICAvLyBlZmZlY3Qgb2YgaW50ZXJydXB0aW5nIHRoZSBjdXJyZW50IHJlbmRlciBhbmQgc3dpdGNoaW5nIHRvIHRoZSB1cGRhdGUuXG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgdGhpcyBkb2Vzbid0IG92ZXJyaWRlIHBpbmdzIHRoYXQgaGFwcGVuIHdoaWxlIHdlJ3ZlXG4gICAgICAvLyBhbHJlYWR5IHN0YXJ0ZWQgcmVuZGVyaW5nLlxuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHJlcXVlc3RVcGRhdGVMYW5lUHJpb3JpdHkgYWxzbyByZWFkcyB0aGUgcHJpb3JpdHkuIFBhc3MgdGhlXG4gIC8vIHByaW9yaXR5IGFzIGFuIGFyZ3VtZW50IHRvIHRoYXQgZnVuY3Rpb24gYW5kIHRoaXMgb25lLlxuXG5cbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIGlmIChsYW5lID09PSBTeW5jTGFuZSkge1xuICAgIGlmICggLy8gQ2hlY2sgaWYgd2UncmUgaW5zaWRlIHVuYmF0Y2hlZFVwZGF0ZXNcbiAgICAoZXhlY3V0aW9uQ29udGV4dCAmIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgLy8gQ2hlY2sgaWYgd2UncmUgbm90IGFscmVhZHkgcmVuZGVyaW5nXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBSZWdpc3RlciBwZW5kaW5nIGludGVyYWN0aW9ucyBvbiB0aGUgcm9vdCB0byBhdm9pZCBsb3NpbmcgdHJhY2VkIGludGVyYWN0aW9uIGRhdGEuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7IC8vIFRoaXMgaXMgYSBsZWdhY3kgZWRnZSBjYXNlLiBUaGUgaW5pdGlhbCBtb3VudCBvZiBhIFJlYWN0RE9NLnJlbmRlci1lZFxuICAgICAgLy8gcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMgc2hvdWxkIGJlIHN5bmNocm9ub3VzLCBidXQgbGF5b3V0IHVwZGF0ZXNcbiAgICAgIC8vIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBiYXRjaC5cblxuICAgICAgcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgc3luY2hyb25vdXMgd29yayBub3csIHVubGVzcyB3ZSdyZSBhbHJlYWR5IHdvcmtpbmcgb3IgaW5zaWRlXG4gICAgICAgIC8vIGEgYmF0Y2guIFRoaXMgaXMgaW50ZW50aW9uYWxseSBpbnNpZGUgc2NoZWR1bGVVcGRhdGVPbkZpYmVyIGluc3RlYWQgb2ZcbiAgICAgICAgLy8gc2NoZWR1bGVDYWxsYmFja0ZvckZpYmVyIHRvIHByZXNlcnZlIHRoZSBhYmlsaXR5IHRvIHNjaGVkdWxlIGEgY2FsbGJhY2tcbiAgICAgICAgLy8gd2l0aG91dCBpbW1lZGlhdGVseSBmbHVzaGluZyBpdC4gV2Ugb25seSBkbyB0aGlzIGZvciB1c2VyLWluaXRpYXRlZFxuICAgICAgICAvLyB1cGRhdGVzLCB0byBwcmVzZXJ2ZSBoaXN0b3JpY2FsIGJlaGF2aW9yIG9mIGxlZ2FjeSBtb2RlLlxuICAgICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gU2NoZWR1bGUgYSBkaXNjcmV0ZSB1cGRhdGUgYnV0IG9ubHkgaWYgaXQncyBub3QgU3luYy5cbiAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBEaXNjcmV0ZUV2ZW50Q29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAoIC8vIE9ubHkgdXBkYXRlcyBhdCB1c2VyLWJsb2NraW5nIHByaW9yaXR5IG9yIGdyZWF0ZXIgYXJlIGNvbnNpZGVyZWRcbiAgICAvLyBkaXNjcmV0ZSwgZXZlbiBpbnNpZGUgYSBkaXNjcmV0ZSBldmVudC5cbiAgICBwcmlvcml0eUxldmVsID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyIHx8IHByaW9yaXR5TGV2ZWwgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEpKSB7XG4gICAgICAvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgYSBkaXNjcmV0ZSBldmVudC4gVHJhY2sgdGhlIGxvd2VzdCBwcmlvcml0eVxuICAgICAgLy8gZGlzY3JldGUgdXBkYXRlIHBlciByb290IHNvIHdlIGNhbiBmbHVzaCB0aGVtIGVhcmx5LCBpZiBuZWVkZWQuXG4gICAgICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9PT0gbnVsbCkge1xuICAgICAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbmV3IFNldChbcm9vdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5hZGQocm9vdCk7XG4gICAgICB9XG4gICAgfSAvLyBTY2hlZHVsZSBvdGhlciB1cGRhdGVzIGFmdGVyIGluIGNhc2UgdGhlIGNhbGxiYWNrIGlzIHN5bmMuXG5cblxuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKTtcbiAgfSAvLyBXZSB1c2UgdGhpcyB3aGVuIGFzc2lnbmluZyBhIGxhbmUgZm9yIGEgdHJhbnNpdGlvbiBpbnNpZGVcbiAgLy8gYHJlcXVlc3RVcGRhdGVMYW5lYC4gV2UgYXNzdW1lIGl0J3MgdGhlIHNhbWUgYXMgdGhlIHJvb3QgYmVpbmcgdXBkYXRlZCxcbiAgLy8gc2luY2UgaW4gdGhlIGNvbW1vbiBjYXNlIG9mIGEgc2luZ2xlIHJvb3QgYXBwIGl0IHByb2JhYmx5IGlzLiBJZiBpdCdzIG5vdFxuICAvLyB0aGUgc2FtZSByb290LCB0aGVuIGl0J3Mgbm90IGEgaHVnZSBkZWFsLCB3ZSBqdXN0IG1pZ2h0IGJhdGNoIG1vcmUgc3R1ZmZcbiAgLy8gdG9nZXRoZXIgbW9yZSB0aGFuIG5lY2Vzc2FyeS5cblxuXG4gIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gcm9vdDtcbn0gLy8gVGhpcyBpcyBzcGxpdCBpbnRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gd2UgY2FuIG1hcmsgYSBmaWJlciB3aXRoIHBlbmRpbmdcbi8vIHdvcmsgd2l0aG91dCB0cmVhdGluZyBpdCBhcyBhIHR5cGljYWwgdXBkYXRlIHRoYXQgb3JpZ2luYXRlcyBmcm9tIGFuIGV2ZW50O1xuLy8gZS5nLiByZXRyeWluZyBhIFN1c3BlbnNlIGJvdW5kYXJ5IGlzbid0IGFuIHVwZGF0ZSwgYnV0IGl0IGRvZXMgc2NoZWR1bGUgd29ya1xuLy8gb24gYSBmaWJlci5cblxuZnVuY3Rpb24gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3Qoc291cmNlRmliZXIsIGxhbmUpIHtcbiAgLy8gVXBkYXRlIHRoZSBzb3VyY2UgZmliZXIncyBsYW5lc1xuICBzb3VyY2VGaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoc291cmNlRmliZXIubGFuZXMsIGxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gc291cmNlRmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICBhbHRlcm5hdGUubGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5sYW5lcywgbGFuZSk7XG4gIH1cblxuICB7XG4gICAgaWYgKGFsdGVybmF0ZSA9PT0gbnVsbCAmJiAoc291cmNlRmliZXIuZmxhZ3MgJiAoUGxhY2VtZW50IHwgSHlkcmF0aW5nKSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgIH1cbiAgfSAvLyBXYWxrIHRoZSBwYXJlbnQgcGF0aCB0byB0aGUgcm9vdCBhbmQgdXBkYXRlIHRoZSBjaGlsZCBleHBpcmF0aW9uIHRpbWUuXG5cblxuICB2YXIgbm9kZSA9IHNvdXJjZUZpYmVyO1xuICB2YXIgcGFyZW50ID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChwYXJlbnQgIT09IG51bGwpIHtcbiAgICBwYXJlbnQuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMocGFyZW50LmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIGFsdGVybmF0ZSA9IHBhcmVudC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIGxhbmUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB7XG4gICAgICAgIGlmICgocGFyZW50LmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihzb3VyY2VGaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gcGFyZW50O1xuICAgIHBhcmVudCA9IHBhcmVudC5yZXR1cm47XG4gIH1cblxuICBpZiAobm9kZS50YWcgPT09IEhvc3RSb290KSB7XG4gICAgdmFyIHJvb3QgPSBub2RlLnN0YXRlTm9kZTtcbiAgICByZXR1cm4gcm9vdDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSAvLyBVc2UgdGhpcyBmdW5jdGlvbiB0byBzY2hlZHVsZSBhIHRhc2sgZm9yIGEgcm9vdC4gVGhlcmUncyBvbmx5IG9uZSB0YXNrIHBlclxuLy8gcm9vdDsgaWYgYSB0YXNrIHdhcyBhbHJlYWR5IHNjaGVkdWxlZCwgd2UnbGwgY2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBwcmlvcml0eVxuLy8gb2YgdGhlIGV4aXN0aW5nIHRhc2sgaXMgdGhlIHNhbWUgYXMgdGhlIHByaW9yaXR5IG9mIHRoZSBuZXh0IGxldmVsIHRoYXQgdGhlXG4vLyByb290IGhhcyB3b3JrIG9uLiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBldmVyeSB1cGRhdGUsIGFuZCByaWdodCBiZWZvcmVcbi8vIGV4aXRpbmcgYSB0YXNrLlxuXG5cbmZ1bmN0aW9uIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBjdXJyZW50VGltZSkge1xuICB2YXIgZXhpc3RpbmdDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTsgLy8gQ2hlY2sgaWYgYW55IGxhbmVzIGFyZSBiZWluZyBzdGFydmVkIGJ5IG90aGVyIHdvcmsuIElmIHNvLCBtYXJrIHRoZW0gYXNcbiAgLy8gZXhwaXJlZCBzbyB3ZSBrbm93IHRvIHdvcmsgb24gdGhvc2UgbmV4dC5cblxuICBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKTsgLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGxhbmVzIHRvIHdvcmsgb24sIGFuZCB0aGVpciBwcmlvcml0eS5cblxuICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7IC8vIFRoaXMgcmV0dXJucyB0aGUgcHJpb3JpdHkgbGV2ZWwgY29tcHV0ZWQgZHVyaW5nIHRoZSBgZ2V0TmV4dExhbmVzYCBjYWxsLlxuXG4gIHZhciBuZXdDYWxsYmFja1ByaW9yaXR5ID0gcmV0dXJuTmV4dExhbmVzUHJpb3JpdHkoKTtcblxuICBpZiAobmV4dExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBUaGVyZSdzIG5vdGhpbmcgdG8gd29yayBvbi5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICAgIGNhbmNlbENhbGxiYWNrKGV4aXN0aW5nQ2FsbGJhY2tOb2RlKTtcbiAgICAgIHJvb3QuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICAgIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfSAvLyBDaGVjayBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHRhc2suIFdlIG1heSBiZSBhYmxlIHRvIHJldXNlIGl0LlxuXG5cbiAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tQcmlvcml0eSA9IHJvb3QuY2FsbGJhY2tQcmlvcml0eTtcblxuICAgIGlmIChleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPT09IG5ld0NhbGxiYWNrUHJpb3JpdHkpIHtcbiAgICAgIC8vIFRoZSBwcmlvcml0eSBoYXNuJ3QgY2hhbmdlZC4gV2UgY2FuIHJldXNlIHRoZSBleGlzdGluZyB0YXNrLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhlIHByaW9yaXR5IGNoYW5nZWQuIENhbmNlbCB0aGUgZXhpc3RpbmcgY2FsbGJhY2suIFdlJ2xsIHNjaGVkdWxlIGEgbmV3XG4gICAgLy8gb25lIGJlbG93LlxuXG5cbiAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gIH0gLy8gU2NoZWR1bGUgYSBuZXcgY2FsbGJhY2suXG5cblxuICB2YXIgbmV3Q2FsbGJhY2tOb2RlO1xuXG4gIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBTeW5jIFJlYWN0IGNhbGxiYWNrcyBhcmUgc2NoZWR1bGVkIG9uIGEgc3BlY2lhbFxuICAgIC8vIGludGVybmFsIHF1ZXVlXG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVTeW5jQ2FsbGJhY2socGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2UgaWYgKG5ld0NhbGxiYWNrUHJpb3JpdHkgPT09IFN5bmNCYXRjaGVkTGFuZVByaW9yaXR5KSB7XG4gICAgbmV3Q2FsbGJhY2tOb2RlID0gc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBwZXJmb3JtU3luY1dvcmtPblJvb3QuYmluZChudWxsLCByb290KSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVkdWxlclByaW9yaXR5TGV2ZWwgPSBsYW5lUHJpb3JpdHlUb1NjaGVkdWxlclByaW9yaXR5KG5ld0NhbGxiYWNrUHJpb3JpdHkpO1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCwgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9XG5cbiAgcm9vdC5jYWxsYmFja1ByaW9yaXR5ID0gbmV3Q2FsbGJhY2tQcmlvcml0eTtcbiAgcm9vdC5jYWxsYmFja05vZGUgPSBuZXdDYWxsYmFja05vZGU7XG59IC8vIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IGZvciBldmVyeSBjb25jdXJyZW50IHRhc2ssIGkuZS4gYW55dGhpbmcgdGhhdFxuLy8gZ29lcyB0aHJvdWdoIFNjaGVkdWxlci5cblxuXG5mdW5jdGlvbiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3Qocm9vdCkge1xuICAvLyBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIGEgUmVhY3QgZXZlbnQsIHdlIGNhbiBjbGVhciB0aGUgY3VycmVudFxuICAvLyBldmVudCB0aW1lLiBUaGUgbmV4dCB1cGRhdGUgd2lsbCBjb21wdXRlIGEgbmV3IGV2ZW50IHRpbWUuXG4gIGN1cnJlbnRFdmVudFRpbWUgPSBOb1RpbWVzdGFtcDtcbiAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfSAvLyBGbHVzaCBhbnkgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgYmVmb3JlIGRlY2lkaW5nIHdoaWNoIGxhbmVzIHRvIHdvcmsgb24sXG4gIC8vIGluIGNhc2UgdGhleSBzY2hlZHVsZSBhZGRpdGlvbmFsIHdvcmsuXG5cblxuICB2YXIgb3JpZ2luYWxDYWxsYmFja05vZGUgPSByb290LmNhbGxiYWNrTm9kZTtcbiAgdmFyIGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMgPSBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG5cbiAgaWYgKGRpZEZsdXNoUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHBhc3NpdmUgZWZmZWN0IHBoYXNlIG1heSBoYXZlIGNhbmNlbGVkIHRoZSBjdXJyZW50IHRhc2suXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHRhc2sgbm9kZSBmb3IgdGhpcyByb290IHdhcyBjaGFuZ2VkLlxuICAgIGlmIChyb290LmNhbGxiYWNrTm9kZSAhPT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAgIC8vIFRoZSBjdXJyZW50IHRhc2sgd2FzIGNhbmNlbGVkLiBFeGl0LiBXZSBkb24ndCBuZWVkIHRvIGNhbGxcbiAgICAgIC8vIGBlbnN1cmVSb290SXNTY2hlZHVsZWRgIGJlY2F1c2UgdGhlIGNoZWNrIGFib3ZlIGltcGxpZXMgZWl0aGVyIHRoYXRcbiAgICAgIC8vIHRoZXJlJ3MgYSBuZXcgdGFzaywgb3IgdGhhdCB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfSAvLyBEZXRlcm1pbmUgdGhlIG5leHQgZXhwaXJhdGlvbiB0aW1lIHRvIHdvcmsgb24sIHVzaW5nIHRoZSBmaWVsZHMgc3RvcmVkXG4gIC8vIG9uIHRoZSByb290LlxuXG5cbiAgdmFyIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCA/IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzIDogTm9MYW5lcyk7XG5cbiAgaWYgKGxhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgLy8gRGVmZW5zaXZlIGNvZGluZy4gVGhpcyBpcyBuZXZlciBleHBlY3RlZCB0byBoYXBwZW4uXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKTtcblxuICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2hlbiB1bmhpZGluZyBhIGhpZGRlbiB0cmVlLCB3ZSBpbmNsdWRlIGFsbCB0aGUgbGFuZXNcbiAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgIC8vXG4gICAgLy8gU28gd2UnbGwgdGhyb3cgb3V0IHRoZSBjdXJyZW50IHdvcmsgYW5kIHJlc3RhcnQuXG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gIH0gZWxzZSBpZiAoZXhpdFN0YXR1cyAhPT0gUm9vdEluY29tcGxldGUpIHtcbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgICAgLy8gZGlzY2FyZCBzZXJ2ZXIgcmVzcG9uc2UgYW5kIGZhbGwgYmFjayB0byBjbGllbnQgc2lkZSByZW5kZXIuXG5cbiAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgICAvLyBhbGwgcGVuZGluZyB1cGRhdGVzIGFyZSBpbmNsdWRlZC4gSWYgaXQgc3RpbGwgZmFpbHMgYWZ0ZXIgdGhlIHNlY29uZFxuICAgICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgICBpZiAobGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgICB0aHJvdyBmYXRhbEVycm9yO1xuICAgIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIFRoZSBuZXh0IHN0ZXAgaXMgZWl0aGVyIHRvIGNvbW1pdCBpdCxcbiAgICAvLyBvciwgaWYgc29tZXRoaW5nIHN1c3BlbmRlZCwgd2FpdCB0byBjb21taXQgaXQgYWZ0ZXIgYSB0aW1lb3V0LlxuXG5cbiAgICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgICByb290LmZpbmlzaGVkTGFuZXMgPSBsYW5lcztcbiAgICBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKTtcbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKHJvb3QuY2FsbGJhY2tOb2RlID09PSBvcmlnaW5hbENhbGxiYWNrTm9kZSkge1xuICAgIC8vIFRoZSB0YXNrIG5vZGUgc2NoZWR1bGVkIGZvciB0aGlzIHJvb3QgaXMgdGhlIHNhbWUgb25lIHRoYXQnc1xuICAgIC8vIGN1cnJlbnRseSBleGVjdXRlZC4gTmVlZCB0byByZXR1cm4gYSBjb250aW51YXRpb24uXG4gICAgcmV0dXJuIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENvbmN1cnJlbnRSZW5kZXIocm9vdCwgZXhpdFN0YXR1cywgbGFuZXMpIHtcbiAgc3dpdGNoIChleGl0U3RhdHVzKSB7XG4gICAgY2FzZSBSb290SW5jb21wbGV0ZTpcbiAgICBjYXNlIFJvb3RGYXRhbEVycm9yZWQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJSb290IGRpZCBub3QgY29tcGxldGUuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAvLyBGbG93IGtub3dzIGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zIGlmIEkgYWRkIGEgYnJlYWtcbiAgICAvLyBzdGF0ZW1lbnQsIGJ1dCBlc2xpbnQgZG9lc24ndCBrbm93IGFib3V0IGludmFyaWFudCwgc28gaXQgY29tcGxhaW5zXG4gICAgLy8gaWYgSSBkby4gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICBjYXNlIFJvb3RFcnJvcmVkOlxuICAgICAge1xuICAgICAgICAvLyBXZSBzaG91bGQgaGF2ZSBhbHJlYWR5IGF0dGVtcHRlZCB0byByZXRyeSB0aGlzIHRyZWUuIElmIHdlIHJlYWNoZWRcbiAgICAgICAgLy8gdGhpcyBwb2ludCwgaXQgZXJyb3JlZCBhZ2Fpbi4gQ29tbWl0IGl0LlxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZDpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7IC8vIFdlIGhhdmUgYW4gYWNjZXB0YWJsZSBsb2FkaW5nIHN0YXRlLiBXZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgd2VcbiAgICAgICAgLy8gc2hvdWxkIGltbWVkaWF0ZWx5IGNvbW1pdCBpdCBvciB3YWl0IGEgYml0LlxuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlSZXRyaWVzKGxhbmVzKSAmJiAvLyBkbyBub3QgZGVsYXkgaWYgd2UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlXG4gICAgICAgICFzaG91bGRGb3JjZUZsdXNoRmFsbGJhY2tzSW5ERVYoKSkge1xuICAgICAgICAgIC8vIFRoaXMgcmVuZGVyIG9ubHkgaW5jbHVkZWQgcmV0cmllcywgbm8gdXBkYXRlcy4gVGhyb3R0bGUgY29tbWl0dGluZ1xuICAgICAgICAgIC8vIHJldHJpZXMgc28gdGhhdCB3ZSBkb24ndCBzaG93IHRvbyBtYW55IGxvYWRpbmcgc3RhdGVzIHRvbyBxdWlja2x5LlxuICAgICAgICAgIHZhciBtc1VudGlsVGltZW91dCA9IGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgKyBGQUxMQkFDS19USFJPVFRMRV9NUyAtIG5vdygpOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuICAgICAgICAgIGlmIChtc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICB2YXIgbmV4dExhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuXG4gICAgICAgICAgICBpZiAobmV4dExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgICAgIC8vIFRoZXJlJ3MgYWRkaXRpb25hbCB3b3JrIG9uIHRoaXMgcm9vdC5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgICAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHN1c3BlbmRlZExhbmVzLCBsYW5lcykpIHtcbiAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIHByZWZlciB0byByZW5kZXIgdGhlIGZhbGxiYWNrIG9mIGF0IHRoZSBsYXN0XG4gICAgICAgICAgICAgIC8vIHN1c3BlbmRlZCBsZXZlbC4gUGluZyB0aGUgbGFzdCBzdXNwZW5kZWQgbGV2ZWwgdG8gdHJ5XG4gICAgICAgICAgICAgIC8vIHJlbmRlcmluZyBpdCBhZ2Fpbi5cbiAgICAgICAgICAgICAgLy8gRklYTUU6IFdoYXQgaWYgdGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgSWRsZT8gU2hvdWxkIG5vdCByZXN0YXJ0LlxuICAgICAgICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICAgICAgICBtYXJrUm9vdFBpbmdlZChyb290LCBzdXNwZW5kZWRMYW5lcyk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSAvLyBUaGUgcmVuZGVyIGlzIHN1c3BlbmRlZCwgaXQgaGFzbid0IHRpbWVkIG91dCwgYW5kIHRoZXJlJ3Mgbm9cbiAgICAgICAgICAgIC8vIGxvd2VyIHByaW9yaXR5IHdvcmsgdG8gZG8uIEluc3RlYWQgb2YgY29tbWl0dGluZyB0aGUgZmFsbGJhY2tcbiAgICAgICAgICAgIC8vIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGEgdG8gYXJyaXZlLlxuXG5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIG1zVW50aWxUaW1lb3V0KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUaGUgd29yayBleHBpcmVkLiBDb21taXQgaW1tZWRpYXRlbHkuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdFN1c3BlbmRlZFdpdGhEZWxheTpcbiAgICAgIHtcbiAgICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgYSB0cmFuc2l0aW9uLCBzbyB3ZSBzaG91bGQgZXhpdCB3aXRob3V0IGNvbW1pdHRpbmcgYVxuICAgICAgICAgIC8vIHBsYWNlaG9sZGVyIGFuZCB3aXRob3V0IHNjaGVkdWxpbmcgYSB0aW1lb3V0LiBEZWxheSBpbmRlZmluaXRlbHlcbiAgICAgICAgICAvLyB1bnRpbCB3ZSByZWNlaXZlIG1vcmUgZGF0YS5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHRyYW5zaXRpb24sIGJ1dCB3ZSBkaWQgdHJpZ2dlciBhbiBhdm9pZGVkIHN0YXRlLlxuICAgICAgICAgIC8vIFNjaGVkdWxlIGEgcGxhY2Vob2xkZXIgdG8gZGlzcGxheSBhZnRlciBhIHNob3J0IGRlbGF5LCB1c2luZyB0aGUgSnVzdFxuICAgICAgICAgIC8vIE5vdGljZWFibGUgRGlmZmVyZW5jZS5cbiAgICAgICAgICAvLyBUT0RPOiBJcyB0aGUgSk5EIG9wdGltaXphdGlvbiB3b3J0aCB0aGUgYWRkZWQgY29tcGxleGl0eT8gSWYgdGhpcyBpc1xuICAgICAgICAgIC8vIHRoZSBvbmx5IHJlYXNvbiB3ZSB0cmFjayB0aGUgZXZlbnQgdGltZSwgdGhlbiBwcm9iYWJseSBub3QuXG4gICAgICAgICAgLy8gQ29uc2lkZXIgcmVtb3ZpbmcuXG4gICAgICAgICAgdmFyIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKTtcbiAgICAgICAgICB2YXIgZXZlbnRUaW1lTXMgPSBtb3N0UmVjZW50RXZlbnRUaW1lO1xuICAgICAgICAgIHZhciB0aW1lRWxhcHNlZE1zID0gbm93KCkgLSBldmVudFRpbWVNcztcblxuICAgICAgICAgIHZhciBfbXNVbnRpbFRpbWVvdXQgPSBqbmQodGltZUVsYXBzZWRNcykgLSB0aW1lRWxhcHNlZE1zOyAvLyBEb24ndCBib3RoZXIgd2l0aCBhIHZlcnkgc2hvcnQgc3VzcGVuc2UgdGltZS5cblxuXG4gICAgICAgICAgaWYgKF9tc1VudGlsVGltZW91dCA+IDEwKSB7XG4gICAgICAgICAgICAvLyBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrIGltbWVkaWF0ZWx5LCB3YWl0IGZvciBtb3JlIGRhdGFcbiAgICAgICAgICAgIC8vIHRvIGFycml2ZS5cbiAgICAgICAgICAgIHJvb3QudGltZW91dEhhbmRsZSA9IHNjaGVkdWxlVGltZW91dChjb21taXRSb290LmJpbmQobnVsbCwgcm9vdCksIF9tc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gQ29tbWl0IHRoZSBwbGFjZWhvbGRlci5cblxuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBSb290Q29tcGxldGVkOlxuICAgICAge1xuICAgICAgICAvLyBUaGUgd29yayBjb21wbGV0ZWQuIFJlYWR5IHRvIGNvbW1pdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biByb290IGV4aXQgc3RhdHVzLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICAvLyBXaGVuIHN1c3BlbmRpbmcsIHdlIHNob3VsZCBhbHdheXMgZXhjbHVkZSBsYW5lcyB0aGF0IHdlcmUgcGluZ2VkIG9yIChtb3JlXG4gIC8vIHJhcmVseSwgc2luY2Ugd2UgdHJ5IHRvIGF2b2lkIGl0KSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAvLyBUT0RPOiBMb2wgbWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gZmFjdG9yIHRoaXMgYmVzaWRlcyB0aGlzXG4gIC8vIG9ibm94aW91c2x5IG5hbWVkIGZ1bmN0aW9uIDopXG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzKTtcbiAgc3VzcGVuZGVkTGFuZXMgPSByZW1vdmVMYW5lcyhzdXNwZW5kZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKTtcbiAgbWFya1Jvb3RTdXNwZW5kZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3Igc3luY2hyb25vdXMgdGFza3MgdGhhdCBkb24ndCBnb1xuLy8gdGhyb3VnaCBTY2hlZHVsZXJcblxuXG5mdW5jdGlvbiBwZXJmb3JtU3luY1dvcmtPblJvb3Qocm9vdCkge1xuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIHZhciBsYW5lcztcbiAgdmFyIGV4aXRTdGF0dXM7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCAmJiBpbmNsdWRlc1NvbWVMYW5lKHJvb3QuZXhwaXJlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcykpIHtcbiAgICAvLyBUaGVyZSdzIGEgcGFydGlhbCB0cmVlLCBhbmQgYXQgbGVhc3Qgb25lIG9mIGl0cyBsYW5lcyBoYXMgZXhwaXJlZC4gRmluaXNoXG4gICAgLy8gcmVuZGVyaW5nIGl0IGJlZm9yZSByZW5kZXJpbmcgdGhlIHJlc3Qgb2YgdGhlIGV4cGlyZWQgd29yay5cbiAgICBsYW5lcyA9IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG5cbiAgICBpZiAoaW5jbHVkZXNTb21lTGFuZSh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSB7XG4gICAgICAvLyBUaGUgcmVuZGVyIGluY2x1ZGVkIGxhbmVzIHRoYXQgd2VyZSB1cGRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgICAvLyB0aGF0IHdlcmUgcHJldmlvdXNseSBza2lwcGVkIHdoZW4gdGhlIHRyZWUgd2FzIGhpZGRlbi4gVGhhdCBzZXQgb2ZcbiAgICAgIC8vIGxhbmVzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIGxhbmVzIHdlIHN0YXJ0ZWQgcmVuZGVyaW5nIHdpdGguXG4gICAgICAvL1xuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgb25seSBoYXBwZW5zIHdoZW4gcGFydCBvZiB0aGUgdHJlZSBpcyByZW5kZXJlZFxuICAgICAgLy8gY29uY3VycmVudGx5LiBJZiB0aGUgd2hvbGUgdHJlZSBpcyByZW5kZXJlZCBzeW5jaHJvbm91c2x5LCB0aGVuIHRoZXJlXG4gICAgICAvLyBhcmUgbm8gaW50ZXJsZWF2ZWQgZXZlbnRzLlxuICAgICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgbGFuZXMpO1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGFuZXMgPSBnZXROZXh0TGFuZXMocm9vdCwgTm9MYW5lcyk7XG4gICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIGlmIChyb290LnRhZyAhPT0gTGVnYWN5Um9vdCAmJiBleGl0U3RhdHVzID09PSBSb290RXJyb3JlZCkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmV0cnlBZnRlckVycm9yOyAvLyBJZiBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgaHlkcmF0aW9uLFxuICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgaWYgKHJvb3QuaHlkcmF0ZSkge1xuICAgICAgcm9vdC5oeWRyYXRlID0gZmFsc2U7XG4gICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgIH0gLy8gSWYgc29tZXRoaW5nIHRocmV3IGFuIGVycm9yLCB0cnkgcmVuZGVyaW5nIG9uZSBtb3JlIHRpbWUuIFdlJ2xsIHJlbmRlclxuICAgIC8vIHN5bmNocm9ub3VzbHkgdG8gYmxvY2sgY29uY3VycmVudCBkYXRhIG11dGF0aW9ucywgYW5kIHdlJ2xsIGluY2x1ZGVzXG4gICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAvLyBhdHRlbXB0LCB3ZSdsbCBnaXZlIHVwIGFuZCBjb21taXQgdGhlIHJlc3VsdGluZyB0cmVlLlxuXG5cbiAgICBsYW5lcyA9IGdldExhbmVzVG9SZXRyeVN5bmNocm9ub3VzbHlPbkVycm9yKHJvb3QpO1xuXG4gICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChleGl0U3RhdHVzID09PSBSb290RmF0YWxFcnJvcmVkKSB7XG4gICAgdmFyIGZhdGFsRXJyb3IgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RGYXRhbEVycm9yO1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgfSAvLyBXZSBub3cgaGF2ZSBhIGNvbnNpc3RlbnQgdHJlZS4gQmVjYXVzZSB0aGlzIGlzIGEgc3luYyByZW5kZXIsIHdlXG4gIC8vIHdpbGwgY29tbWl0IGl0IGV2ZW4gaWYgc29tZXRoaW5nIHN1c3BlbmRlZC5cblxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmN1cnJlbnQuYWx0ZXJuYXRlO1xuICByb290LmZpbmlzaGVkV29yayA9IGZpbmlzaGVkV29yaztcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gIGNvbW1pdFJvb3Qocm9vdCk7IC8vIEJlZm9yZSBleGl0aW5nLCBtYWtlIHN1cmUgdGhlcmUncyBhIGNhbGxiYWNrIHNjaGVkdWxlZCBmb3IgdGhlIG5leHRcbiAgLy8gcGVuZGluZyBsZXZlbC5cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzKCkge1xuICAvLyBUT0RPOiBTaG91bGQgYmUgYWJsZSB0byBmbHVzaCBpbnNpZGUgYmF0Y2hlZFVwZGF0ZXMsIGJ1dCBub3QgaW5zaWRlIGBhY3RgLlxuICAvLyBIb3dldmVyLCBgYWN0YCB1c2VzIGBiYXRjaGVkVXBkYXRlc2AsIHNvIHRoZXJlJ3Mgbm8gd2F5IHRvIGRpc3Rpbmd1aXNoXG4gIC8vIHRob3NlIHR3byBjYXNlcy4gTmVlZCB0byBmaXggdGhpcyBiZWZvcmUgZXhwb3NpbmcgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNcbiAgLy8gYXMgYSBwdWJsaWMgQVBJLlxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoQmF0Y2hlZENvbnRleHQgfCBSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgICAgIGVycm9yKCd1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyAnICsgJ2FscmVhZHkgcmVuZGVyaW5nLicpO1xuICAgICAgfVxuICAgIH0gLy8gV2UncmUgYWxyZWFkeSByZW5kZXJpbmcsIHNvIHdlIGNhbid0IHN5bmNocm9ub3VzbHkgZmx1c2ggcGVuZGluZyB3b3JrLlxuICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgYSBuZXN0ZWQgZXZlbnQgZGlzcGF0Y2ggdHJpZ2dlcmVkIGJ5IGEgbGlmZWN5Y2xlL2VmZmVjdCxcbiAgICAvLyBsaWtlIGBlbC5mb2N1cygpYC4gRXhpdC5cblxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCk7IC8vIElmIHRoZSBkaXNjcmV0ZSB1cGRhdGVzIHNjaGVkdWxlZCBwYXNzaXZlIGVmZmVjdHMsIGZsdXNoIHRoZW0gbm93IHNvIHRoYXRcbiAgLy8gdGhleSBmaXJlIGJlZm9yZSB0aGUgbmV4dCBzZXJpYWwgZXZlbnQuXG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMoKSB7XG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgLy8gRm9yIGVhY2ggcm9vdCB3aXRoIHBlbmRpbmcgZGlzY3JldGUgdXBkYXRlcywgc2NoZWR1bGUgYSBjYWxsYmFjayB0b1xuICAgIC8vIGltbWVkaWF0ZWx5IGZsdXNoIHRoZW0uXG4gICAgdmFyIHJvb3RzID0gcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcztcbiAgICByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzID0gbnVsbDtcbiAgICByb290cy5mb3JFYWNoKGZ1bmN0aW9uIChyb290KSB7XG4gICAgICBtYXJrRGlzY3JldGVVcGRhdGVzRXhwaXJlZChyb290KTtcbiAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG4gICAgfSk7XG4gIH0gLy8gTm93IGZsdXNoIHRoZSBpbW1lZGlhdGUgcXVldWUuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBCYXRjaGVkQ29udGV4dDtcblxuICB0cnkge1xuICAgIHJldHVybiBmbihhKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBiYXRjaGVkRXZlbnRVcGRhdGVzJDEoZm4sIGEpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBFdmVudENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZGlzY3JldGVVcGRhdGVzJDEoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBEaXNjcmV0ZUV2ZW50Q29udGV4dDtcblxuICB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShVc2VyQmxvY2tpbmdQcmlvcml0eSQyLCBmbi5iaW5kKG51bGwsIGEsIGIsIGMsIGQpKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgICBpZiAoZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0KSB7XG4gICAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bmJhdGNoZWRVcGRhdGVzKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgJj0gfkJhdGNoZWRDb250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0IHw9IExlZ2FjeVVuYmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gZmx1c2hTeW5jKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG5cbiAgaWYgKChwcmV2RXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpICE9PSBOb0NvbnRleHQpIHtcbiAgICB7XG4gICAgICBlcnJvcignZmx1c2hTeW5jIHdhcyBjYWxsZWQgZnJvbSBpbnNpZGUgYSBsaWZlY3ljbGUgbWV0aG9kLiBSZWFjdCBjYW5ub3QgJyArICdmbHVzaCB3aGVuIFJlYWN0IGlzIGFscmVhZHkgcmVuZGVyaW5nLiBDb25zaWRlciBtb3ZpbmcgdGhpcyBjYWxsIHRvICcgKyAnYSBzY2hlZHVsZXIgdGFzayBvciBtaWNybyB0YXNrLicpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihhKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICBpZiAoZm4pIHtcbiAgICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZuLmJpbmQobnVsbCwgYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0OyAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoLlxuICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgd2lsbCBoYXBwZW4gZXZlbiBpZiBiYXRjaGVkVXBkYXRlcyBpcyBoaWdoZXIgdXBcbiAgICAgIC8vIHRoZSBzdGFjay5cblxuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcHVzaFJlbmRlckxhbmVzKGZpYmVyLCBsYW5lcykge1xuICBwdXNoKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgc3VidHJlZVJlbmRlckxhbmVzLCBmaWJlcik7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IG1lcmdlTGFuZXMoc3VidHJlZVJlbmRlckxhbmVzLCBsYW5lcyk7XG4gIHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzUm9vdEluY2x1ZGVkTGFuZXMsIGxhbmVzKTtcbn1cbmZ1bmN0aW9uIHBvcFJlbmRlckxhbmVzKGZpYmVyKSB7XG4gIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvci5jdXJyZW50O1xuICBwb3Aoc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKSB7XG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcbiAgdmFyIHRpbWVvdXRIYW5kbGUgPSByb290LnRpbWVvdXRIYW5kbGU7XG5cbiAgaWYgKHRpbWVvdXRIYW5kbGUgIT09IG5vVGltZW91dCkge1xuICAgIC8vIFRoZSByb290IHByZXZpb3VzIHN1c3BlbmRlZCBhbmQgc2NoZWR1bGVkIGEgdGltZW91dCB0byBjb21taXQgYSBmYWxsYmFja1xuICAgIC8vIHN0YXRlLiBOb3cgdGhhdCB3ZSBoYXZlIGFkZGl0aW9uYWwgd29yaywgY2FuY2VsIHRoZSB0aW1lb3V0LlxuICAgIHJvb3QudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDsgLy8gJEZsb3dGaXhNZSBDb21wbGFpbnMgbm9UaW1lb3V0IGlzIG5vdCBhIFRpbWVvdXRJRCwgZGVzcGl0ZSB0aGUgY2hlY2sgYWJvdmVcblxuICAgIGNhbmNlbFRpbWVvdXQodGltZW91dEhhbmRsZSk7XG4gIH1cblxuICBpZiAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICB2YXIgaW50ZXJydXB0ZWRXb3JrID0gd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuXG4gICAgd2hpbGUgKGludGVycnVwdGVkV29yayAhPT0gbnVsbCkge1xuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKGludGVycnVwdGVkV29yayk7XG4gICAgICBpbnRlcnJ1cHRlZFdvcmsgPSBpbnRlcnJ1cHRlZFdvcmsucmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzUm9vdCA9IHJvb3Q7XG4gIHdvcmtJblByb2dyZXNzID0gY3JlYXRlV29ya0luUHJvZ3Jlc3Mocm9vdC5jdXJyZW50LCBudWxsKTtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTtcbiAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gTm9MYW5lcztcblxuICB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmRpc2NhcmRQZW5kaW5nV2FybmluZ3MoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSkge1xuICBkbyB7XG4gICAgdmFyIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG5cbiAgICB0cnkge1xuICAgICAgLy8gUmVzZXQgbW9kdWxlLWxldmVsIHN0YXRlIHRoYXQgd2FzIHNldCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuICAgICAgcmVzZXRIb29rc0FmdGVyVGhyb3coKTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7IC8vIFRPRE86IEkgZm91bmQgYW5kIGFkZGVkIHRoaXMgbWlzc2luZyBsaW5lIHdoaWxlIGludmVzdGlnYXRpbmcgYVxuICAgICAgLy8gc2VwYXJhdGUgaXNzdWUuIFdyaXRlIGEgcmVncmVzc2lvbiB0ZXN0IHVzaW5nIHN0cmluZyByZWZzLlxuXG4gICAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xuXG4gICAgICBpZiAoZXJyb3JlZFdvcmsgPT09IG51bGwgfHwgZXJyb3JlZFdvcmsucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIC8vIEV4cGVjdGVkIHRvIGJlIHdvcmtpbmcgb24gYSBub24tcm9vdCBmaWJlci4gVGhpcyBpcyBhIGZhdGFsIGVycm9yXG4gICAgICAgIC8vIGJlY2F1c2UgdGhlcmUncyBubyBhbmNlc3RvciB0aGF0IGNhbiBoYW5kbGUgaXQ7IHRoZSByb290IGlzXG4gICAgICAgIC8vIHN1cHBvc2VkIHRvIGNhcHR1cmUgYWxsIGVycm9ycyB0aGF0IHdlcmVuJ3QgY2F1Z2h0IGJ5IGFuIGVycm9yXG4gICAgICAgIC8vIGJvdW5kYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEZhdGFsRXJyb3JlZDtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IHRocm93blZhbHVlOyAvLyBTZXQgYHdvcmtJblByb2dyZXNzYCB0byBudWxsLiBUaGlzIHJlcHJlc2VudHMgYWR2YW5jaW5nIHRvIHRoZSBuZXh0XG4gICAgICAgIC8vIHNpYmxpbmcsIG9yIHRoZSBwYXJlbnQgaWYgdGhlcmUgYXJlIG5vIHNpYmxpbmdzLiBCdXQgc2luY2UgdGhlIHJvb3RcbiAgICAgICAgLy8gaGFzIG5vIHNpYmxpbmdzIG5vciBhIHBhcmVudCwgd2Ugc2V0IGl0IHRvIG51bGwuIFVzdWFsbHkgdGhpcyBpc1xuICAgICAgICAvLyBoYW5kbGVkIGJ5IGBjb21wbGV0ZVVuaXRPZldvcmtgIG9yIGB1bndpbmRXb3JrYCwgYnV0IHNpbmNlIHdlJ3JlXG4gICAgICAgIC8vIGludGVudGlvbmFsbHkgbm90IGNhbGxpbmcgdGhvc2UsIHdlIG5lZWQgc2V0IGl0IGhlcmUuXG4gICAgICAgIC8vIFRPRE86IENvbnNpZGVyIGNhbGxpbmcgYHVud2luZFdvcmtgIHRvIHBvcCB0aGUgY29udGV4dHMuXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmFibGVQcm9maWxlclRpbWVyICYmIGVycm9yZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZWNvcmQgdGhlIHRpbWUgc3BlbnQgcmVuZGVyaW5nIGJlZm9yZSBhbiBlcnJvciB3YXMgdGhyb3duLiBUaGlzXG4gICAgICAgIC8vIGF2b2lkcyBpbmFjY3VyYXRlIFByb2ZpbGVyIGR1cmF0aW9ucyBpbiB0aGUgY2FzZSBvZiBhXG4gICAgICAgIC8vIHN1c3BlbmRlZCByZW5kZXIuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZXJyb3JlZFdvcmssIHRydWUpO1xuICAgICAgfVxuXG4gICAgICB0aHJvd0V4Y2VwdGlvbihyb290LCBlcnJvcmVkV29yay5yZXR1cm4sIGVycm9yZWRXb3JrLCB0aHJvd25WYWx1ZSwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgICAgY29tcGxldGVVbml0T2ZXb3JrKGVycm9yZWRXb3JrKTtcbiAgICB9IGNhdGNoICh5ZXRBbm90aGVyVGhyb3duVmFsdWUpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBpbiB0aGUgcmV0dXJuIHBhdGggYWxzbyB0aHJldy5cbiAgICAgIHRocm93blZhbHVlID0geWV0QW5vdGhlclRocm93blZhbHVlO1xuXG4gICAgICBpZiAod29ya0luUHJvZ3Jlc3MgPT09IGVycm9yZWRXb3JrICYmIGVycm9yZWRXb3JrICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIHRoaXMgYm91bmRhcnkgaGFzIGFscmVhZHkgZXJyb3JlZCwgdGhlbiB3ZSBoYWQgdHJvdWJsZSBwcm9jZXNzaW5nXG4gICAgICAgIC8vIHRoZSBlcnJvci4gQnViYmxlIGl0IHRvIHRoZSBuZXh0IGJvdW5kYXJ5LlxuICAgICAgICBlcnJvcmVkV29yayA9IGVycm9yZWRXb3JrLnJldHVybjtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBlcnJvcmVkV29yaztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yZWRXb3JrID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgICB9XG5cbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gUmV0dXJuIHRvIHRoZSBub3JtYWwgd29yayBsb29wLlxuXG5cbiAgICByZXR1cm47XG4gIH0gd2hpbGUgKHRydWUpO1xufVxuXG5mdW5jdGlvbiBwdXNoRGlzcGF0Y2hlcigpIHtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQ7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIGlmIChwcmV2RGlzcGF0Y2hlciA9PT0gbnVsbCkge1xuICAgIC8vIFRoZSBSZWFjdCBpc29tb3JwaGljIHBhY2thZ2UgZG9lcyBub3QgaW5jbHVkZSBhIGRlZmF1bHQgZGlzcGF0Y2hlci5cbiAgICAvLyBJbnN0ZWFkIHRoZSBmaXJzdCByZW5kZXJlciB3aWxsIGxhemlseSBhdHRhY2ggb25lLCBpbiBvcmRlciB0byBnaXZlXG4gICAgLy8gbmljZXIgZXJyb3IgbWVzc2FnZXMuXG4gICAgcmV0dXJuIENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJldkRpc3BhdGNoZXI7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcikge1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpIHtcbiAge1xuICAgIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnM7XG4gICAgcmV0dXJuIHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpIHtcbiAge1xuICAgIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCkge1xuICBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lID0gbm93KCk7XG59XG5mdW5jdGlvbiBtYXJrU2tpcHBlZFVwZGF0ZUxhbmVzKGxhbmUpIHtcbiAgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gbWVyZ2VMYW5lcyhsYW5lLCB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMpO1xufVxuZnVuY3Rpb24gcmVuZGVyRGlkU3VzcGVuZCgpIHtcbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWQ7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmREZWxheUlmUG9zc2libGUoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk7XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIHVwZGF0ZXMgdGhhdCB3ZSBza2lwcGVkIHRyZWUgdGhhdCBtaWdodCBoYXZlIHVuYmxvY2tlZFxuICAvLyB0aGlzIHJlbmRlci5cblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgIT09IG51bGwgJiYgKGluY2x1ZGVzTm9uSWRsZVdvcmsod29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKSB8fCBpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcykpKSB7XG4gICAgLy8gTWFyayB0aGUgY3VycmVudCByZW5kZXIgYXMgc3VzcGVuZGVkIHNvIHRoYXQgd2Ugc3dpdGNoIHRvIHdvcmtpbmcgb25cbiAgICAvLyB0aGUgdXBkYXRlcyB0aGF0IHdlcmUgc2tpcHBlZC4gVXN1YWxseSB3ZSBvbmx5IHN1c3BlbmQgYXQgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gVE9ETzogV2Ugc2hvdWxkIHByb2JhYmx5IGFsd2F5cyBtYXJrIHRoZSByb290IGFzIHN1c3BlbmRlZCBpbW1lZGlhdGVseVxuICAgIC8vIChpbnNpZGUgdGhpcyBmdW5jdGlvbiksIHNpbmNlIGJ5IHN1c3BlbmRpbmcgYXQgdGhlIGVuZCBvZiB0aGUgcmVuZGVyXG4gICAgLy8gcGhhc2UgaW50cm9kdWNlcyBhIHBvdGVudGlhbCBtaXN0YWtlIHdoZXJlIHdlIHN1c3BlbmQgbGFuZXMgdGhhdCB3ZXJlXG4gICAgLy8gcGluZ2VkIG9yIHVwZGF0ZWQgd2hpbGUgd2Ugd2VyZSByZW5kZXJpbmcuXG4gICAgbWFya1Jvb3RTdXNwZW5kZWQkMSh3b3JrSW5Qcm9ncmVzc1Jvb3QsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVuZGVyRGlkRXJyb3IoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzICE9PSBSb290Q29tcGxldGVkKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RFcnJvcmVkO1xuICB9XG59IC8vIENhbGxlZCBkdXJpbmcgcmVuZGVyIHRvIGRldGVybWluZSBpZiBhbnl0aGluZyBoYXMgc3VzcGVuZGVkLlxuLy8gUmV0dXJucyBmYWxzZSBpZiB3ZSdyZSBub3Qgc3VyZS5cblxuZnVuY3Rpb24gcmVuZGVySGFzTm90U3VzcGVuZGVkWWV0KCkge1xuICAvLyBJZiBzb21ldGhpbmcgZXJyb3JlZCBvciBjb21wbGV0ZWQsIHdlIGNhbid0IHJlYWxseSBiZSBzdXJlLFxuICAvLyBzbyB0aG9zZSBhcmUgZmFsc2UuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIGxhbmVzKTtcbiAgICBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICB9XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpO1xuXG4gIGRvIHtcbiAgICB0cnkge1xuICAgICAgd29ya0xvb3BTeW5jKCk7XG4gICAgICBicmVhaztcbiAgICB9IGNhdGNoICh0aHJvd25WYWx1ZSkge1xuICAgICAgaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpO1xuICAgIH1cbiAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyBhIHN5bmMgcmVuZGVyLCBzbyB3ZSBzaG91bGQgaGF2ZSBmaW5pc2hlZCB0aGUgd2hvbGUgdHJlZS5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgYW4gaW5jb21wbGV0ZSByb290LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xufSAvLyBUaGUgd29yayBsb29wIGlzIGFuIGV4dHJlbWVseSBob3QgcGF0aC4gVGVsbCBDbG9zdXJlIG5vdCB0byBpbmxpbmUgaXQuXG5cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcFN5bmMoKSB7XG4gIC8vIEFscmVhZHkgdGltZWQgb3V0LCBzbyBwZXJmb3JtIHdvcmsgd2l0aG91dCBjaGVja2luZyBpZiB3ZSBuZWVkIHRvIHlpZWxkLlxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUm9vdENvbmN1cnJlbnQocm9vdCwgbGFuZXMpIHtcbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBSZW5kZXJDb250ZXh0O1xuICB2YXIgcHJldkRpc3BhdGNoZXIgPSBwdXNoRGlzcGF0Y2hlcigpOyAvLyBJZiB0aGUgcm9vdCBvciBsYW5lcyBoYXZlIGNoYW5nZWQsIHRocm93IG91dCB0aGUgZXhpc3Rpbmcgc3RhY2tcbiAgLy8gYW5kIHByZXBhcmUgYSBmcmVzaCBvbmUuIE90aGVyd2lzZSB3ZSdsbCBjb250aW51ZSB3aGVyZSB3ZSBsZWZ0IG9mZi5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSByb290IHx8IHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzICE9PSBsYW5lcykge1xuICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wQ29uY3VycmVudCgpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBwb3BEaXNwYXRjaGVyKHByZXZEaXNwYXRjaGVyKTtcbiAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG5cbiAgICByZXR1cm4gUm9vdEluY29tcGxldGU7XG4gIH0gZWxzZSB7XG5cblxuICAgIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzOyAvLyBSZXR1cm4gdGhlIGZpbmFsIGV4aXQgc3RhdHVzLlxuXG4gICAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXM7XG4gIH1cbn1cbi8qKiBAbm9pbmxpbmUgKi9cblxuXG5mdW5jdGlvbiB3b3JrTG9vcENvbmN1cnJlbnQoKSB7XG4gIC8vIFBlcmZvcm0gd29yayB1bnRpbCBTY2hlZHVsZXIgYXNrcyB1cyB0byB5aWVsZFxuICB3aGlsZSAod29ya0luUHJvZ3Jlc3MgIT09IG51bGwgJiYgIXNob3VsZFlpZWxkKCkpIHtcbiAgICBwZXJmb3JtVW5pdE9mV29yayh3b3JrSW5Qcm9ncmVzcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gIC8vIG5vdGhpbmcgc2hvdWxkIHJlbHkgb24gdGhpcywgYnV0IHJlbHlpbmcgb24gaXQgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0XG4gIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgdmFyIGN1cnJlbnQgPSB1bml0T2ZXb3JrLmFsdGVybmF0ZTtcbiAgc2V0Q3VycmVudEZpYmVyKHVuaXRPZldvcmspO1xuICB2YXIgbmV4dDtcblxuICBpZiAoICh1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKHVuaXRPZldvcmssIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIG5leHQgPSBiZWdpbldvcmskMShjdXJyZW50LCB1bml0T2ZXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgdW5pdE9mV29yay5tZW1vaXplZFByb3BzID0gdW5pdE9mV29yay5wZW5kaW5nUHJvcHM7XG5cbiAgaWYgKG5leHQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGRvZXNuJ3Qgc3Bhd24gbmV3IHdvcmssIGNvbXBsZXRlIHRoZSBjdXJyZW50IHdvcmsuXG4gICAgY29tcGxldGVVbml0T2ZXb3JrKHVuaXRPZldvcmspO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgfVxuXG4gIFJlYWN0Q3VycmVudE93bmVyJDIuY3VycmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKSB7XG4gIC8vIEF0dGVtcHQgdG8gY29tcGxldGUgdGhlIGN1cnJlbnQgdW5pdCBvZiB3b3JrLCB0aGVuIG1vdmUgdG8gdGhlIG5leHRcbiAgLy8gc2libGluZy4gSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2libGluZ3MsIHJldHVybiB0byB0aGUgcGFyZW50IGZpYmVyLlxuICB2YXIgY29tcGxldGVkV29yayA9IHVuaXRPZldvcms7XG5cbiAgZG8ge1xuICAgIC8vIFRoZSBjdXJyZW50LCBmbHVzaGVkLCBzdGF0ZSBvZiB0aGlzIGZpYmVyIGlzIHRoZSBhbHRlcm5hdGUuIElkZWFsbHlcbiAgICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAgIC8vIG5lZWQgYW4gYWRkaXRpb25hbCBmaWVsZCBvbiB0aGUgd29yayBpbiBwcm9ncmVzcy5cbiAgICB2YXIgY3VycmVudCA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlO1xuICAgIHZhciByZXR1cm5GaWJlciA9IGNvbXBsZXRlZFdvcmsucmV0dXJuOyAvLyBDaGVjayBpZiB0aGUgd29yayBjb21wbGV0ZWQgb3IgaWYgc29tZXRoaW5nIHRocmV3LlxuXG4gICAgaWYgKChjb21wbGV0ZWRXb3JrLmZsYWdzICYgSW5jb21wbGV0ZSkgPT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihjb21wbGV0ZWRXb3JrKTtcbiAgICAgIHZhciBuZXh0ID0gdm9pZCAwO1xuXG4gICAgICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydFByb2ZpbGVyVGltZXIoY29tcGxldGVkV29yayk7XG4gICAgICAgIG5leHQgPSBjb21wbGV0ZVdvcmsoY3VycmVudCwgY29tcGxldGVkV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTsgLy8gVXBkYXRlIHJlbmRlciBkdXJhdGlvbiBhc3N1bWluZyB3ZSBkaWRuJ3QgZXJyb3IuXG5cbiAgICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YShjb21wbGV0ZWRXb3JrLCBmYWxzZSk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG5cbiAgICAgIGlmIChuZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENvbXBsZXRpbmcgdGhpcyBmaWJlciBzcGF3bmVkIG5ldyB3b3JrLiBXb3JrIG9uIHRoYXQgbmV4dC5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MgPSBuZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q2hpbGRMYW5lcyhjb21wbGV0ZWRXb3JrKTtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsICYmIC8vIERvIG5vdCBhcHBlbmQgZWZmZWN0cyB0byBwYXJlbnRzIGlmIGEgc2libGluZyBmYWlsZWQgdG8gY29tcGxldGVcbiAgICAgIChyZXR1cm5GaWJlci5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIEFwcGVuZCBhbGwgdGhlIGVmZmVjdHMgb2YgdGhlIHN1YnRyZWUgYW5kIHRoaXMgZmliZXIgb250byB0aGUgZWZmZWN0XG4gICAgICAgIC8vIGxpc3Qgb2YgdGhlIHBhcmVudC4gVGhlIGNvbXBsZXRpb24gb3JkZXIgb2YgdGhlIGNoaWxkcmVuIGFmZmVjdHMgdGhlXG4gICAgICAgIC8vIHNpZGUtZWZmZWN0IG9yZGVyLlxuICAgICAgICBpZiAocmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29tcGxldGVkV29yay5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsuZmlyc3RFZmZlY3Q7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdDtcbiAgICAgICAgfSAvLyBJZiB0aGlzIGZpYmVyIGhhZCBzaWRlLWVmZmVjdHMsIHdlIGFwcGVuZCBpdCBBRlRFUiB0aGUgY2hpbGRyZW4nc1xuICAgICAgICAvLyBzaWRlLWVmZmVjdHMuIFdlIGNhbiBwZXJmb3JtIGNlcnRhaW4gc2lkZS1lZmZlY3RzIGVhcmxpZXIgaWYgbmVlZGVkLFxuICAgICAgICAvLyBieSBkb2luZyBtdWx0aXBsZSBwYXNzZXMgb3ZlciB0aGUgZWZmZWN0IGxpc3QuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAgICAgLy8gc2NoZWR1bGUgb3VyIG93biBzaWRlLWVmZmVjdCBvbiBvdXIgb3duIGxpc3QgYmVjYXVzZSBpZiBlbmQgdXBcbiAgICAgICAgLy8gcmV1c2luZyBjaGlsZHJlbiB3ZSdsbCBzY2hlZHVsZSB0aGlzIGVmZmVjdCBvbnRvIGl0c2VsZiBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBhdCB0aGUgZW5kLlxuXG5cbiAgICAgICAgdmFyIGZsYWdzID0gY29tcGxldGVkV29yay5mbGFnczsgLy8gU2tpcCBib3RoIE5vV29yayBhbmQgUGVyZm9ybWVkV29yayB0YWdzIHdoZW4gY3JlYXRpbmcgdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0LiBQZXJmb3JtZWRXb3JrIGVmZmVjdCBpcyByZWFkIGJ5IFJlYWN0IERldlRvb2xzIGJ1dCBzaG91bGRuJ3QgYmVcbiAgICAgICAgLy8gY29tbWl0dGVkLlxuXG4gICAgICAgIGlmIChmbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAgICAgICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdC5uZXh0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSBiZWNhdXNlIHNvbWV0aGluZyB0aHJldy4gUG9wIHZhbHVlcyBvZmZcbiAgICAgIC8vIHRoZSBzdGFjayB3aXRob3V0IGVudGVyaW5nIHRoZSBjb21wbGV0ZSBwaGFzZS4gSWYgdGhpcyBpcyBhIGJvdW5kYXJ5LFxuICAgICAgLy8gY2FwdHVyZSB2YWx1ZXMgaWYgcG9zc2libGUuXG4gICAgICB2YXIgX25leHQgPSB1bndpbmRXb3JrKGNvbXBsZXRlZFdvcmspOyAvLyBCZWNhdXNlIHRoaXMgZmliZXIgZGlkIG5vdCBjb21wbGV0ZSwgZG9uJ3QgcmVzZXQgaXRzIGV4cGlyYXRpb24gdGltZS5cblxuXG4gICAgICBpZiAoX25leHQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gSWYgY29tcGxldGluZyB0aGlzIHdvcmsgc3Bhd25lZCBuZXcgd29yaywgZG8gdGhhdCBuZXh0LiBXZSdsbCBjb21lXG4gICAgICAgIC8vIGJhY2sgaGVyZSBhZ2Fpbi5cbiAgICAgICAgLy8gU2luY2Ugd2UncmUgcmVzdGFydGluZywgcmVtb3ZlIGFueXRoaW5nIHRoYXQgaXMgbm90IGEgaG9zdCBlZmZlY3RcbiAgICAgICAgLy8gZnJvbSB0aGUgZWZmZWN0IHRhZy5cbiAgICAgICAgX25leHQuZmxhZ3MgJj0gSG9zdEVmZmVjdE1hc2s7XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gX25leHQ7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSByZW5kZXIgZHVyYXRpb24gZm9yIHRoZSBmaWJlciB0aGF0IGVycm9yZWQuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpOyAvLyBJbmNsdWRlIHRoZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gZmFpbGVkIGNoaWxkcmVuIGJlZm9yZSBjb250aW51aW5nLlxuXG4gICAgICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICAgICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29tcGxldGVkV29yay5hY3R1YWxEdXJhdGlvbiA9IGFjdHVhbER1cmF0aW9uO1xuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgLy8gTWFyayB0aGUgcGFyZW50IGZpYmVyIGFzIGluY29tcGxldGUgYW5kIGNsZWFyIGl0cyBlZmZlY3QgbGlzdC5cbiAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcbiAgICAgICAgcmV0dXJuRmliZXIuZmxhZ3MgfD0gSW5jb21wbGV0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc2libGluZ0ZpYmVyID0gY29tcGxldGVkV29yay5zaWJsaW5nO1xuXG4gICAgaWYgKHNpYmxpbmdGaWJlciAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvIGluIHRoaXMgcmV0dXJuRmliZXIsIGRvIHRoYXQgbmV4dC5cbiAgICAgIHdvcmtJblByb2dyZXNzID0gc2libGluZ0ZpYmVyO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gT3RoZXJ3aXNlLCByZXR1cm4gdG8gdGhlIHBhcmVudFxuXG5cbiAgICBjb21wbGV0ZWRXb3JrID0gcmV0dXJuRmliZXI7IC8vIFVwZGF0ZSB0aGUgbmV4dCB0aGluZyB3ZSdyZSB3b3JraW5nIG9uIGluIGNhc2Ugc29tZXRoaW5nIHRocm93cy5cblxuICAgIHdvcmtJblByb2dyZXNzID0gY29tcGxldGVkV29yaztcbiAgfSB3aGlsZSAoY29tcGxldGVkV29yayAhPT0gbnVsbCk7IC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIHJvb3QuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUpIHtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdENvbXBsZXRlZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yaykge1xuICBpZiAoIC8vIFRPRE86IE1vdmUgdGhpcyBjaGVjayBvdXQgb2YgdGhlIGhvdCBwYXRoIGJ5IG1vdmluZyBgcmVzZXRDaGlsZExhbmVzYFxuICAvLyB0byBzd2l0Y2ggc3RhdGVtZW50IGluIGBjb21wbGV0ZVdvcmtgLlxuICAoY29tcGxldGVkV29yay50YWcgPT09IExlZ2FjeUhpZGRlbkNvbXBvbmVudCB8fCBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gT2Zmc2NyZWVuQ29tcG9uZW50KSAmJiBjb21wbGV0ZWRXb3JrLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgIWluY2x1ZGVzU29tZUxhbmUoc3VidHJlZVJlbmRlckxhbmVzLCBPZmZzY3JlZW5MYW5lKSAmJiAoY29tcGxldGVkV29yay5tb2RlICYgQ29uY3VycmVudE1vZGUpICE9PSBOb0xhbmVzKSB7XG4gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoaXMgY29tcG9uZW50IGFyZSBoaWRkZW4uIERvbid0IGJ1YmJsZSB0aGVpclxuICAgIC8vIGV4cGlyYXRpb24gdGltZXMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG5ld0NoaWxkTGFuZXMgPSBOb0xhbmVzOyAvLyBCdWJibGUgdXAgdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZS5cblxuICBpZiAoIChjb21wbGV0ZWRXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkgIT09IE5vTW9kZSkge1xuICAgIC8vIEluIHByb2ZpbGluZyBtb2RlLCByZXNldENoaWxkRXhwaXJhdGlvblRpbWUgaXMgYWxzbyB1c2VkIHRvIHJlc2V0XG4gICAgLy8gcHJvZmlsZXIgZHVyYXRpb25zLlxuICAgIHZhciBhY3R1YWxEdXJhdGlvbiA9IGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb247XG4gICAgdmFyIHRyZWVCYXNlRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLnNlbGZCYXNlRHVyYXRpb247IC8vIFdoZW4gYSBmaWJlciBpcyBjbG9uZWQsIGl0cyBhY3R1YWxEdXJhdGlvbiBpcyByZXNldCB0byAwLiBUaGlzIHZhbHVlIHdpbGxcbiAgICAvLyBvbmx5IGJlIHVwZGF0ZWQgaWYgd29yayBpcyBkb25lIG9uIHRoZSBmaWJlciAoaS5lLiBpdCBkb2Vzbid0IGJhaWxvdXQpLlxuICAgIC8vIFdoZW4gd29yayBpcyBkb25lLCBpdCBzaG91bGQgYnViYmxlIHRvIHRoZSBwYXJlbnQncyBhY3R1YWxEdXJhdGlvbi4gSWZcbiAgICAvLyB0aGUgZmliZXIgaGFzIG5vdCBiZWVuIGNsb25lZCB0aG91Z2gsIChtZWFuaW5nIG5vIHdvcmsgd2FzIGRvbmUpLCB0aGVuXG4gICAgLy8gdGhpcyB2YWx1ZSB3aWxsIHJlZmxlY3QgdGhlIGFtb3VudCBvZiB0aW1lIHNwZW50IHdvcmtpbmcgb24gYSBwcmV2aW91c1xuICAgIC8vIHJlbmRlci4gSW4gdGhhdCBjYXNlIGl0IHNob3VsZCBub3QgYnViYmxlLiBXZSBkZXRlcm1pbmUgd2hldGhlciBpdCB3YXNcbiAgICAvLyBjbG9uZWQgYnkgY29tcGFyaW5nIHRoZSBjaGlsZCBwb2ludGVyLlxuXG4gICAgdmFyIHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucyA9IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlID09PSBudWxsIHx8IGNvbXBsZXRlZFdvcmsuY2hpbGQgIT09IGNvbXBsZXRlZFdvcmsuYWx0ZXJuYXRlLmNoaWxkO1xuICAgIHZhciBjaGlsZCA9IGNvbXBsZXRlZFdvcmsuY2hpbGQ7XG5cbiAgICB3aGlsZSAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoY2hpbGQubGFuZXMsIGNoaWxkLmNoaWxkTGFuZXMpKTtcblxuICAgICAgaWYgKHNob3VsZEJ1YmJsZUFjdHVhbER1cmF0aW9ucykge1xuICAgICAgICBhY3R1YWxEdXJhdGlvbiArPSBjaGlsZC5hY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgdHJlZUJhc2VEdXJhdGlvbiArPSBjaGlsZC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgY2hpbGQgPSBjaGlsZC5zaWJsaW5nO1xuICAgIH1cblxuICAgIHZhciBpc1RpbWVkT3V0U3VzcGVuc2UgPSBjb21wbGV0ZWRXb3JrLnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsO1xuXG4gICAgaWYgKGlzVGltZWRPdXRTdXNwZW5zZSkge1xuICAgICAgLy8gRG9uJ3QgY291bnQgdGltZSBzcGVudCBpbiBhIHRpbWVkIG91dCBTdXNwZW5zZSBzdWJ0cmVlIGFzIHBhcnQgb2YgdGhlIGJhc2UgZHVyYXRpb24uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICBpZiAocHJpbWFyeUNoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAgICAgdHJlZUJhc2VEdXJhdGlvbiAtPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICBjb21wbGV0ZWRXb3JrLnRyZWVCYXNlRHVyYXRpb24gPSB0cmVlQmFzZUR1cmF0aW9uO1xuICB9IGVsc2Uge1xuICAgIHZhciBfY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKF9jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgbmV3Q2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMobmV3Q2hpbGRMYW5lcywgbWVyZ2VMYW5lcyhfY2hpbGQubGFuZXMsIF9jaGlsZC5jaGlsZExhbmVzKSk7XG4gICAgICBfY2hpbGQgPSBfY2hpbGQuc2libGluZztcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZWRXb3JrLmNoaWxkTGFuZXMgPSBuZXdDaGlsZExhbmVzO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290KHJvb3QpIHtcbiAgdmFyIHJlbmRlclByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuICBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBjb21taXRSb290SW1wbC5iaW5kKG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFJvb3RJbXBsKHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgZG8ge1xuICAgIC8vIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIGNhbGwgYGZsdXNoU3luY1VwZGF0ZVF1ZXVlYCBhdCB0aGUgZW5kLCB3aGljaFxuICAgIC8vIG1lYW5zIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCB3aWxsIHNvbWV0aW1lcyByZXN1bHQgaW4gYWRkaXRpb25hbFxuICAgIC8vIHBhc3NpdmUgZWZmZWN0cy4gU28gd2UgbmVlZCB0byBrZWVwIGZsdXNoaW5nIGluIGEgbG9vcCB1bnRpbCB0aGVyZSBhcmVcbiAgICAvLyBubyBtb3JlIHBlbmRpbmcgZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNaWdodCBiZSBiZXR0ZXIgaWYgYGZsdXNoUGFzc2l2ZUVmZmVjdHNgIGRpZCBub3QgYXV0b21hdGljYWxseVxuICAgIC8vIGZsdXNoIHN5bmNocm9ub3VzIHdvcmsgYXQgdGhlIGVuZCwgdG8gYXZvaWQgZmFjdG9yaW5nIGhhemFyZHMgbGlrZSB0aGlzLlxuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgfSB3aGlsZSAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgIT09IG51bGwpO1xuXG4gIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpO1xuXG4gIGlmICghKChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgbm90IGFscmVhZHkgYmUgd29ya2luZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBmaW5pc2hlZFdvcmsgPSByb290LmZpbmlzaGVkV29yaztcbiAgdmFyIGxhbmVzID0gcm9vdC5maW5pc2hlZExhbmVzO1xuXG4gIGlmIChmaW5pc2hlZFdvcmsgPT09IG51bGwpIHtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBudWxsO1xuICByb290LmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuXG4gIGlmICghKGZpbmlzaGVkV29yayAhPT0gcm9vdC5jdXJyZW50KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBjb21taXQgdGhlIHNhbWUgdHJlZSBhcyBiZWZvcmUuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH0gLy8gY29tbWl0Um9vdCBuZXZlciByZXR1cm5zIGEgY29udGludWF0aW9uOyBpdCBhbHdheXMgZmluaXNoZXMgc3luY2hyb25vdXNseS5cbiAgLy8gU28gd2UgY2FuIGNsZWFyIHRoZXNlIG5vdyB0byBhbGxvdyBhIG5ldyBjYWxsYmFjayB0byBiZSBzY2hlZHVsZWQuXG5cblxuICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7IC8vIFVwZGF0ZSB0aGUgZmlyc3QgYW5kIGxhc3QgcGVuZGluZyB0aW1lcyBvbiB0aGlzIHJvb3QuIFRoZSBuZXcgZmlyc3RcbiAgLy8gcGVuZGluZyB0aW1lIGlzIHdoYXRldmVyIGlzIGxlZnQgb24gdGhlIHJvb3QgZmliZXIuXG5cbiAgdmFyIHJlbWFpbmluZ0xhbmVzID0gbWVyZ2VMYW5lcyhmaW5pc2hlZFdvcmsubGFuZXMsIGZpbmlzaGVkV29yay5jaGlsZExhbmVzKTtcbiAgbWFya1Jvb3RGaW5pc2hlZChyb290LCByZW1haW5pbmdMYW5lcyk7IC8vIENsZWFyIGFscmVhZHkgZmluaXNoZWQgZGlzY3JldGUgdXBkYXRlcyBpbiBjYXNlIHRoYXQgYSBsYXRlciBjYWxsIG9mXG4gIC8vIGBmbHVzaERpc2NyZXRlVXBkYXRlc2Agc3RhcnRzIGEgdXNlbGVzcyByZW5kZXIgcGFzcyB3aGljaCBtYXkgY2FuY2Vsc1xuICAvLyBhIHNjaGVkdWxlZCB0aW1lb3V0LlxuXG4gIGlmIChyb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzICE9PSBudWxsKSB7XG4gICAgaWYgKCFoYXNEaXNjcmV0ZUxhbmVzKHJlbWFpbmluZ0xhbmVzKSAmJiByb290c1dpdGhQZW5kaW5nRGlzY3JldGVVcGRhdGVzLmhhcyhyb290KSkge1xuICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5kZWxldGUocm9vdCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFdlIGNhbiByZXNldCB0aGVzZSBub3cgdGhhdCB0aGV5IGFyZSBmaW5pc2hlZC5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG4gIH0gLy8gR2V0IHRoZSBsaXN0IG9mIGVmZmVjdHMuXG5cblxuICB2YXIgZmlyc3RFZmZlY3Q7XG5cbiAgaWYgKGZpbmlzaGVkV29yay5mbGFncyA+IFBlcmZvcm1lZFdvcmspIHtcbiAgICAvLyBBIGZpYmVyJ3MgZWZmZWN0IGxpc3QgY29uc2lzdHMgb25seSBvZiBpdHMgY2hpbGRyZW4sIG5vdCBpdHNlbGYuIFNvIGlmXG4gICAgLy8gdGhlIHJvb3QgaGFzIGFuIGVmZmVjdCwgd2UgbmVlZCB0byBhZGQgaXQgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdC4gVGhlXG4gICAgLy8gcmVzdWx0aW5nIGxpc3QgaXMgdGhlIHNldCB0aGF0IHdvdWxkIGJlbG9uZyB0byB0aGUgcm9vdCdzIHBhcmVudCwgaWYgaXRcbiAgICAvLyBoYWQgb25lOyB0aGF0IGlzLCBhbGwgdGhlIGVmZmVjdHMgaW4gdGhlIHRyZWUgaW5jbHVkaW5nIHRoZSByb290LlxuICAgIGlmIChmaW5pc2hlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgIH0gZWxzZSB7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yaztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gVGhlcmUgaXMgbm8gZWZmZWN0IG9uIHRoZSByb290LlxuICAgIGZpcnN0RWZmZWN0ID0gZmluaXNoZWRXb3JrLmZpcnN0RWZmZWN0O1xuICB9XG5cbiAgaWYgKGZpcnN0RWZmZWN0ICE9PSBudWxsKSB7XG5cbiAgICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIFJlc2V0IHRoaXMgdG8gbnVsbCBiZWZvcmUgY2FsbGluZyBsaWZlY3ljbGVzXG5cbiAgICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsOyAvLyBUaGUgY29tbWl0IHBoYXNlIGlzIGJyb2tlbiBpbnRvIHNldmVyYWwgc3ViLXBoYXNlcy4gV2UgZG8gYSBzZXBhcmF0ZSBwYXNzXG4gICAgLy8gb2YgdGhlIGVmZmVjdCBsaXN0IGZvciBlYWNoIHBoYXNlOiBhbGwgbXV0YXRpb24gZWZmZWN0cyBjb21lIGJlZm9yZSBhbGxcbiAgICAvLyBsYXlvdXQgZWZmZWN0cywgYW5kIHNvIG9uLlxuICAgIC8vIFRoZSBmaXJzdCBwaGFzZSBhIFwiYmVmb3JlIG11dGF0aW9uXCIgcGhhc2UuIFdlIHVzZSB0aGlzIHBoYXNlIHRvIHJlYWQgdGhlXG4gICAgLy8gc3RhdGUgb2YgdGhlIGhvc3QgdHJlZSByaWdodCBiZWZvcmUgd2UgbXV0YXRlIGl0LiBUaGlzIGlzIHdoZXJlXG4gICAgLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgaXMgY2FsbGVkLlxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gcHJlcGFyZUZvckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pO1xuICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IGZhbHNlO1xuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cywgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgZXJyb3IpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTsgLy8gV2Ugbm8gbG9uZ2VyIG5lZWQgdG8gdHJhY2sgdGhlIGFjdGl2ZSBpbnN0YW5jZSBmaWJlclxuXG5cbiAgICBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21taXQgdGltZSB0byBiZSBzaGFyZWQgYnkgYWxsIFByb2ZpbGVycyBpbiB0aGlzXG4gICAgICAvLyBiYXRjaC4gVGhpcyBlbmFibGVzIHRoZW0gdG8gYmUgZ3JvdXBlZCBsYXRlci5cbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBtdXRhdGlvbiBwaGFzZSwgd2hlcmUgd2UgbXV0YXRlIHRoZSBob3N0IHRyZWUuXG5cblxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGNvbW1pdE11dGF0aW9uRWZmZWN0cywgbnVsbCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IobmV4dEVmZmVjdCwgX2Vycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICByZXNldEFmdGVyQ29tbWl0KHJvb3QuY29udGFpbmVySW5mbyk7IC8vIFRoZSB3b3JrLWluLXByb2dyZXNzIHRyZWUgaXMgbm93IHRoZSBjdXJyZW50IHRyZWUuIFRoaXMgbXVzdCBjb21lIGFmdGVyXG4gICAgLy8gdGhlIG11dGF0aW9uIHBoYXNlLCBzbyB0aGF0IHRoZSBwcmV2aW91cyB0cmVlIGlzIHN0aWxsIGN1cnJlbnQgZHVyaW5nXG4gICAgLy8gY29tcG9uZW50V2lsbFVubW91bnQsIGJ1dCBiZWZvcmUgdGhlIGxheW91dCBwaGFzZSwgc28gdGhhdCB0aGUgZmluaXNoZWRcbiAgICAvLyB3b3JrIGlzIGN1cnJlbnQgZHVyaW5nIGNvbXBvbmVudERpZE1vdW50L1VwZGF0ZS5cblxuICAgIHJvb3QuY3VycmVudCA9IGZpbmlzaGVkV29yazsgLy8gVGhlIG5leHQgcGhhc2UgaXMgdGhlIGxheW91dCBwaGFzZSwgd2hlcmUgd2UgY2FsbCBlZmZlY3RzIHRoYXQgcmVhZFxuICAgIC8vIHRoZSBob3N0IHRyZWUgYWZ0ZXIgaXQncyBiZWVuIG11dGF0ZWQuIFRoZSBpZGlvbWF0aWMgdXNlIGNhc2UgZm9yIHRoaXMgaXNcbiAgICAvLyBsYXlvdXQsIGJ1dCBjbGFzcyBjb21wb25lbnQgbGlmZWN5Y2xlcyBhbHNvIGZpcmUgaGVyZSBmb3IgbGVnYWN5IHJlYXNvbnMuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRMYXlvdXRFZmZlY3RzLCBudWxsLCByb290LCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShuZXh0RWZmZWN0ICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2Vycm9yMiA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcjIpO1xuICAgICAgICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKTtcblxuICAgIG5leHRFZmZlY3QgPSBudWxsOyAvLyBUZWxsIFNjaGVkdWxlciB0byB5aWVsZCBhdCB0aGUgZW5kIG9mIHRoZSBmcmFtZSwgc28gdGhlIGJyb3dzZXIgaGFzIGFuXG4gICAgLy8gb3Bwb3J0dW5pdHkgdG8gcGFpbnQuXG5cbiAgICByZXF1ZXN0UGFpbnQoKTtcblxuICAgIHtcbiAgICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICB9XG5cbiAgICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgLy8gTm8gZWZmZWN0cy5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIE1lYXN1cmUgdGhlc2UgYW55d2F5IHNvIHRoZSBmbGFtZWdyYXBoIGV4cGxpY2l0bHkgc2hvd3MgdGhhdCB0aGVyZSB3ZXJlXG4gICAgLy8gbm8gZWZmZWN0cy5cbiAgICAvLyBUT0RPOiBNYXliZSB0aGVyZSdzIGEgYmV0dGVyIHdheSB0byByZXBvcnQgdGhpcy5cblxuICAgIHtcbiAgICAgIHJlY29yZENvbW1pdFRpbWUoKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cyA9IHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzO1xuXG4gIGlmIChyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIC8vIFRoaXMgY29tbWl0IGhhcyBwYXNzaXZlIGVmZmVjdHMuIFN0YXNoIGEgcmVmZXJlbmNlIHRvIHRoZW0uIEJ1dCBkb24ndFxuICAgIC8vIHNjaGVkdWxlIGEgY2FsbGJhY2sgdW50aWwgYWZ0ZXIgZmx1c2hpbmcgbGF5b3V0IHdvcmsuXG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IHJvb3Q7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzTGFuZXMgPSBsYW5lcztcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IHJlbmRlclByaW9yaXR5TGV2ZWw7XG4gIH0gZWxzZSB7XG4gICAgLy8gV2UgYXJlIGRvbmUgd2l0aCB0aGUgZWZmZWN0IGNoYWluIGF0IHRoaXMgcG9pbnQgc28gbGV0J3MgY2xlYXIgdGhlXG4gICAgLy8gbmV4dEVmZmVjdCBwb2ludGVycyB0byBhc3Npc3Qgd2l0aCBHQy4gSWYgd2UgaGF2ZSBwYXNzaXZlIGVmZmVjdHMsIHdlJ2xsXG4gICAgLy8gY2xlYXIgdGhpcyBpbiBmbHVzaFBhc3NpdmVFZmZlY3RzLlxuICAgIG5leHRFZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gICAgICBuZXh0RWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgICBpZiAobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICAgIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKG5leHRFZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBuZXh0RWZmZWN0ID0gbmV4dE5leHRFZmZlY3Q7XG4gICAgfVxuICB9IC8vIFJlYWQgdGhpcyBhZ2Fpbiwgc2luY2UgYW4gZWZmZWN0IG1pZ2h0IGhhdmUgdXBkYXRlZCBpdFxuXG5cbiAgcmVtYWluaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lczsgLy8gQ2hlY2sgaWYgdGhlcmUncyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3RcblxuICBpZiAocmVtYWluaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICB7XG4gICAgICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyO1xuICAgICAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IG51bGw7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleHBpcmF0aW9uVGltZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBleHBpcmF0aW9uVGltZXNbaV0sIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCByZW1haW5pbmdMYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gcmVtYWluaW5nIHdvcmssIHdlIGNhbiBjbGVhciB0aGUgc2V0IG9mIGFscmVhZHkgZmFpbGVkXG4gICAgLy8gZXJyb3IgYm91bmRhcmllcy5cbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG51bGw7XG4gIH1cblxuICB7XG4gICAgaWYgKCFyb290RGlkSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzLCB0aGVuIHdlIGNhbiBjb21wbGV0ZSB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBPdGhlcndpc2UsIHdlJ2xsIHdhaXQgdW50aWwgYWZ0ZXIgdGhlIHBhc3NpdmUgZWZmZWN0cyBhcmUgZmx1c2hlZC5cbiAgICAgIC8vIFdhaXQgdG8gZG8gdGhpcyB1bnRpbCBhZnRlciByZW1haW5pbmcgd29yayBoYXMgYmVlbiBzY2hlZHVsZWQsXG4gICAgICAvLyBzbyB0aGF0IHdlIGRvbid0IHByZW1hdHVyZWx5IHNpZ25hbCBjb21wbGV0ZSBmb3IgaW50ZXJhY3Rpb25zIHdoZW4gdGhlcmUncyBlLmcuIGhpZGRlbiB3b3JrLlxuICAgICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzID09PSBTeW5jTGFuZSkge1xuICAgIC8vIENvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJvb3Qgc3luY2hyb25vdXNseSByZS1yZW5kZXJzIHdpdGhvdXRcbiAgICAvLyBmaW5pc2hpbmcuIElmIHRoZXJlIGFyZSB0b28gbWFueSwgaXQgaW5kaWNhdGVzIGFuIGluZmluaXRlIHVwZGF0ZSBsb29wLlxuICAgIGlmIChyb290ID09PSByb290V2l0aE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IHJvb3Q7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgfVxuXG4gIG9uQ29tbWl0Um9vdChmaW5pc2hlZFdvcmsuc3RhdGVOb2RlLCByZW5kZXJQcmlvcml0eUxldmVsKTtcblxuICB7XG4gICAgb25Db21taXRSb290JDEoKTtcbiAgfSAvLyBBbHdheXMgY2FsbCB0aGlzIGJlZm9yZSBleGl0aW5nIGBjb21taXRSb290YCwgdG8gZW5zdXJlIHRoYXQgYW55XG4gIC8vIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QgaXMgc2NoZWR1bGVkLlxuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcblxuICBpZiAoaGFzVW5jYXVnaHRFcnJvcikge1xuICAgIGhhc1VuY2F1Z2h0RXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgX2Vycm9yMyA9IGZpcnN0VW5jYXVnaHRFcnJvcjtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHRocm93IF9lcnJvcjM7XG4gIH1cblxuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gYSBSZWFjdERPTS5yZW5kZXItZWQgcm9vdCBpbnNpZGUgb2YgYmF0Y2hlZFVwZGF0ZXMuIFRoZSBjb21taXQgZmlyZWRcbiAgICAvLyBzeW5jaHJvbm91c2x5LCBidXQgbGF5b3V0IHVwZGF0ZXMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIHRoZSBlbmRcbiAgICAvLyBvZiB0aGUgYmF0Y2guXG5cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIElmIGxheW91dCB3b3JrIHdhcyBzY2hlZHVsZWQsIGZsdXNoIGl0IG5vdy5cblxuXG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25FZmZlY3RzKCkge1xuICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIXNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciAmJiBmb2N1c2VkSW5zdGFuY2VIYW5kbGUgIT09IG51bGwpIHtcbiAgICAgIGlmICgobmV4dEVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSAhPT0gTm9GbGFncykge1xuICAgICAgICBpZiAoZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIG91dCBvZiB0aGUgaG90IHBhdGggdXNpbmcgYSBkZWRpY2F0ZWQgZWZmZWN0IHRhZy5cbiAgICAgICAgaWYgKG5leHRFZmZlY3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCAmJiBpc1N1c3BlbnNlQm91bmRhcnlCZWluZ0hpZGRlbihjdXJyZW50LCBuZXh0RWZmZWN0KSAmJiBkb2VzRmliZXJDb250YWluKG5leHRFZmZlY3QsIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSkpIHtcbiAgICAgICAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmICgoZmxhZ3MgJiBTbmFwc2hvdCkgIT09IE5vRmxhZ3MpIHtcbiAgICAgIHNldEN1cnJlbnRGaWJlcihuZXh0RWZmZWN0KTtcbiAgICAgIGNvbW1pdEJlZm9yZU11dGF0aW9uTGlmZUN5Y2xlcyhjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuXG4gICAgaWYgKChmbGFncyAmIFBhc3NpdmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBhcmUgcGFzc2l2ZSBlZmZlY3RzLCBzY2hlZHVsZSBhIGNhbGxiYWNrIHRvIGZsdXNoIGF0XG4gICAgICAvLyB0aGUgZWFybGllc3Qgb3Bwb3J0dW5pdHkuXG4gICAgICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE11dGF0aW9uRWZmZWN0cyhyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIC8vIFRPRE86IFNob3VsZCBwcm9iYWJseSBtb3ZlIHRoZSBidWxrIG9mIHRoaXMgZnVuY3Rpb24gdG8gY29tbWl0V29yay5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIENvbnRlbnRSZXNldCkge1xuICAgICAgY29tbWl0UmVzZXRUZXh0Q29udGVudChuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbW1pdERldGFjaFJlZihjdXJyZW50KTtcbiAgICAgIH1cbiAgICB9IC8vIFRoZSBmb2xsb3dpbmcgc3dpdGNoIHN0YXRlbWVudCBpcyBvbmx5IGNvbmNlcm5lZCBhYm91dCBwbGFjZW1lbnQsXG4gICAgLy8gdXBkYXRlcywgYW5kIGRlbGV0aW9ucy4gVG8gYXZvaWQgbmVlZGluZyB0byBhZGQgYSBjYXNlIGZvciBldmVyeSBwb3NzaWJsZVxuICAgIC8vIGJpdG1hcCB2YWx1ZSwgd2UgcmVtb3ZlIHRoZSBzZWNvbmRhcnkgZWZmZWN0cyBmcm9tIHRoZSBlZmZlY3QgdGFnIGFuZFxuICAgIC8vIHN3aXRjaCBvbiB0aGF0IHZhbHVlLlxuXG5cbiAgICB2YXIgcHJpbWFyeUZsYWdzID0gZmxhZ3MgJiAoUGxhY2VtZW50IHwgVXBkYXRlIHwgRGVsZXRpb24gfCBIeWRyYXRpbmcpO1xuXG4gICAgc3dpdGNoIChwcmltYXJ5RmxhZ3MpIHtcbiAgICAgIGNhc2UgUGxhY2VtZW50OlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG4gICAgICAgICAgLy8gVE9ETzogZmluZERPTU5vZGUgZG9lc24ndCByZWx5IG9uIHRoaXMgYW55IG1vcmUgYnV0IGlzTW91bnRlZCBkb2VzXG4gICAgICAgICAgLy8gYW5kIGlzTW91bnRlZCBpcyBkZXByZWNhdGVkIGFueXdheSBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBraWxsIHRoaXMuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBQbGFjZW1lbnRBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBQbGFjZW1lbnRcbiAgICAgICAgICBjb21taXRQbGFjZW1lbnQobmV4dEVmZmVjdCk7IC8vIENsZWFyIHRoZSBcInBsYWNlbWVudFwiIGZyb20gZWZmZWN0IHRhZyBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGlzIGlzXG4gICAgICAgICAgLy8gaW5zZXJ0ZWQsIGJlZm9yZSBhbnkgbGlmZS1jeWNsZXMgbGlrZSBjb21wb25lbnREaWRNb3VudCBnZXRzIGNhbGxlZC5cblxuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gflBsYWNlbWVudDsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZzpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZztcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEh5ZHJhdGluZ0FuZFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIG5leHRFZmZlY3QuZmxhZ3MgJj0gfkh5ZHJhdGluZzsgLy8gVXBkYXRlXG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnQyID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudDIsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIF9jdXJyZW50MyA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQzLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIERlbGV0aW9uOlxuICAgICAgICB7XG4gICAgICAgICAgY29tbWl0RGVsZXRpb24ocm9vdCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIG5leHRFZmZlY3QgPSBuZXh0RWZmZWN0Lm5leHRFZmZlY3Q7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0TGF5b3V0RWZmZWN0cyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG5cbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgdmFyIGZsYWdzID0gbmV4dEVmZmVjdC5mbGFncztcblxuICAgIGlmIChmbGFncyAmIChVcGRhdGUgfCBDYWxsYmFjaykpIHtcbiAgICAgIHZhciBjdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICBjb21taXRMaWZlQ3ljbGVzKHJvb3QsIGN1cnJlbnQsIG5leHRFZmZlY3QpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChmbGFncyAmIFJlZikge1xuICAgICAgICBjb21taXRBdHRhY2hSZWYobmV4dEVmZmVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKSB7XG4gIC8vIFJldHVybnMgd2hldGhlciBwYXNzaXZlIGVmZmVjdHMgd2VyZSBmbHVzaGVkLlxuICBpZiAocGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgIT09IE5vUHJpb3JpdHkkMSkge1xuICAgIHZhciBwcmlvcml0eUxldmVsID0gcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xuXG4gICAge1xuICAgICAgcmV0dXJuIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwsIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmliZXIsIGVmZmVjdCkge1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQucHVzaChlZmZlY3QsIGZpYmVyKTtcblxuICB7XG4gICAgZmliZXIuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICBhbHRlcm5hdGUuZmxhZ3MgfD0gUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgIH1cbiAgfVxuXG4gIGlmICghcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgc2NoZWR1bGVDYWxsYmFjayhOb3JtYWxQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VQYXNzaXZlRWZmZWN0Q3JlYXRlKGVmZmVjdCkge1xuICB2YXIgY3JlYXRlID0gZWZmZWN0LmNyZWF0ZTtcbiAgZWZmZWN0LmRlc3Ryb3kgPSBjcmVhdGUoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQYXNzaXZlRWZmZWN0c0ltcGwoKSB7XG4gIGlmIChyb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciByb290ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHM7XG4gIHZhciBsYW5lcyA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzO1xuICByb290V2l0aFBlbmRpbmdQYXNzaXZlRWZmZWN0cyA9IG51bGw7XG4gIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IGZsdXNoIHBhc3NpdmUgZWZmZWN0cyB3aGlsZSBhbHJlYWR5IHJlbmRlcmluZy5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICB9XG5cbiAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBDb21taXRDb250ZXh0O1xuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7IC8vIEl0J3MgaW1wb3J0YW50IHRoYXQgQUxMIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3QgZGVzdHJveSBmdW5jdGlvbnMgYXJlIGNhbGxlZFxuICAvLyBiZWZvcmUgQU5ZIHBhc3NpdmUgZWZmZWN0IGNyZWF0ZSBmdW5jdGlvbnMgYXJlIGNhbGxlZC5cbiAgLy8gT3RoZXJ3aXNlIGVmZmVjdHMgaW4gc2libGluZyBjb21wb25lbnRzIG1pZ2h0IGludGVyZmVyZSB3aXRoIGVhY2ggb3RoZXIuXG4gIC8vIGUuZy4gYSBkZXN0cm95IGZ1bmN0aW9uIGluIG9uZSBjb21wb25lbnQgbWF5IHVuaW50ZW50aW9uYWxseSBvdmVycmlkZSBhIHJlZlxuICAvLyB2YWx1ZSBzZXQgYnkgYSBjcmVhdGUgZnVuY3Rpb24gaW4gYW5vdGhlciBjb21wb25lbnQuXG4gIC8vIExheW91dCBlZmZlY3RzIGhhdmUgdGhlIHNhbWUgY29uc3RyYWludC5cbiAgLy8gRmlyc3QgcGFzczogRGVzdHJveSBzdGFsZSBwYXNzaXZlIGVmZmVjdHMuXG5cbiAgdmFyIHVubW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c1VubW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50ID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1bm1vdW50RWZmZWN0cy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciBfZWZmZWN0ID0gdW5tb3VudEVmZmVjdHNbaV07XG4gICAgdmFyIGZpYmVyID0gdW5tb3VudEVmZmVjdHNbaSArIDFdO1xuICAgIHZhciBkZXN0cm95ID0gX2VmZmVjdC5kZXN0cm95O1xuICAgIF9lZmZlY3QuZGVzdHJveSA9IHVuZGVmaW5lZDtcblxuICAgIHtcbiAgICAgIGZpYmVyLmZsYWdzICY9IH5QYXNzaXZlVW5tb3VudFBlbmRpbmdEZXY7XG4gICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgIGFsdGVybmF0ZS5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGVzdHJveSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgZGVzdHJveSwgbnVsbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICAgIGlmICghKGZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgYmUgd29ya2luZyBvbiBhbiBlZmZlY3QuXCIgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoZmliZXIsIGVycm9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFNlY29uZCBwYXNzOiBDcmVhdGUgbmV3IHBhc3NpdmUgZWZmZWN0cy5cblxuXG4gIHZhciBtb3VudEVmZmVjdHMgPSBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQ7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNNb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb3VudEVmZmVjdHMubGVuZ3RoOyBfaSArPSAyKSB7XG4gICAgdmFyIF9lZmZlY3QyID0gbW91bnRFZmZlY3RzW19pXTtcbiAgICB2YXIgX2ZpYmVyID0gbW91bnRFZmZlY3RzW19pICsgMV07XG5cbiAgICB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoX2ZpYmVyKTtcblxuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZSwgbnVsbCwgX2VmZmVjdDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgICBpZiAoIShfZmliZXIgIT09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9lcnJvcjQgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoX2ZpYmVyLCBfZXJyb3I0KTtcbiAgICAgIH1cblxuICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICB9XG4gIH0gLy8gTm90ZTogVGhpcyBjdXJyZW50bHkgYXNzdW1lcyB0aGVyZSBhcmUgbm8gcGFzc2l2ZSBlZmZlY3RzIG9uIHRoZSByb290IGZpYmVyXG4gIC8vIGJlY2F1c2UgdGhlIHJvb3QgaXMgbm90IHBhcnQgb2YgaXRzIG93biBlZmZlY3QgbGlzdC5cbiAgLy8gVGhpcyBjb3VsZCBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS5cblxuXG4gIHZhciBlZmZlY3QgPSByb290LmN1cnJlbnQuZmlyc3RFZmZlY3Q7XG5cbiAgd2hpbGUgKGVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0TmV4dEVmZmVjdCA9IGVmZmVjdC5uZXh0RWZmZWN0OyAvLyBSZW1vdmUgbmV4dEVmZmVjdCBwb2ludGVyIHRvIGFzc2lzdCBHQ1xuXG4gICAgZWZmZWN0Lm5leHRFZmZlY3QgPSBudWxsO1xuXG4gICAgaWYgKGVmZmVjdC5mbGFncyAmIERlbGV0aW9uKSB7XG4gICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhlZmZlY3QpO1xuICAgIH1cblxuICAgIGVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICB9XG5cbiAge1xuICAgIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKTtcbiAgICBmaW5pc2hQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHtcbiAgICBpc0ZsdXNoaW5nUGFzc2l2ZUVmZmVjdHMgPSBmYWxzZTtcbiAgfVxuXG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpOyAvLyBJZiBhZGRpdGlvbmFsIHBhc3NpdmUgZWZmZWN0cyB3ZXJlIHNjaGVkdWxlZCwgaW5jcmVtZW50IGEgY291bnRlci4gSWYgdGhpc1xuICAvLyBleGNlZWRzIHRoZSBsaW1pdCwgd2UnbGwgZmlyZSBhIHdhcm5pbmcuXG5cbiAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwgPyAwIDogbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ICsgMTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkICE9PSBudWxsICYmIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkLmhhcyhpbnN0YW5jZSk7XG59XG5mdW5jdGlvbiBtYXJrTGVnYWN5RXJyb3JCb3VuZGFyeUFzRmFpbGVkKGluc3RhbmNlKSB7XG4gIGlmIChsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9PT0gbnVsbCkge1xuICAgIGxlZ2FjeUVycm9yQm91bmRhcmllc1RoYXRBbHJlYWR5RmFpbGVkID0gbmV3IFNldChbaW5zdGFuY2VdKTtcbiAgfSBlbHNlIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5hZGQoaW5zdGFuY2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcihlcnJvcikge1xuICBpZiAoIWhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gdHJ1ZTtcbiAgICBmaXJzdFVuY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgfVxufVxuXG52YXIgb25VbmNhdWdodEVycm9yID0gcHJlcGFyZVRvVGhyb3dVbmNhdWdodEVycm9yO1xuXG5mdW5jdGlvbiBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChyb290RmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICB2YXIgZXJyb3JJbmZvID0gY3JlYXRlQ2FwdHVyZWRWYWx1ZShlcnJvciwgc291cmNlRmliZXIpO1xuICB2YXIgdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHJvb3RGaWJlciwgZXJyb3JJbmZvLCBTeW5jTGFuZSk7XG4gIGVucXVldWVVcGRhdGUocm9vdEZpYmVyLCB1cGRhdGUpO1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHJvb3RGaWJlciwgU3luY0xhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3Ioc291cmNlRmliZXIsIGVycm9yKSB7XG4gIGlmIChzb3VyY2VGaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgLy8gRXJyb3Igd2FzIHRocm93biBhdCB0aGUgcm9vdC4gVGhlcmUgaXMgbm8gcGFyZW50LCBzbyB0aGUgcm9vdFxuICAgIC8vIGl0c2VsZiBzaG91bGQgY2FwdHVyZSBpdC5cbiAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChzb3VyY2VGaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgZmliZXIgPSBzb3VyY2VGaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKGZpYmVyICE9PSBudWxsKSB7XG4gICAgaWYgKGZpYmVyLnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yT25Sb290KGZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gZWxzZSBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgdmFyIGN0b3IgPSBmaWJlci50eXBlO1xuICAgICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gICAgICBpZiAodHlwZW9mIGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNBbHJlYWR5RmFpbGVkTGVnYWN5RXJyb3JCb3VuZGFyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgICAgICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICAgICAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgICAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgICAgICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBTeW5jTGFuZSk7XG5cbiAgICAgICAgaWYgKHJvb3QgIT09IG51bGwpIHtcbiAgICAgICAgICBtYXJrUm9vdFVwZGF0ZWQocm9vdCwgU3luY0xhbmUsIGV2ZW50VGltZSk7XG4gICAgICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIFN5bmNMYW5lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGlzIGNvbXBvbmVudCBoYXMgYWxyZWFkeSBiZWVuIHVubW91bnRlZC5cbiAgICAgICAgICAvLyBXZSBjYW4ndCBzY2hlZHVsZSBhbnkgZm9sbG93IHVwIHdvcmsgZm9yIHRoZSByb290IGJlY2F1c2UgdGhlIGZpYmVyIGlzIGFscmVhZHkgdW5tb3VudGVkLFxuICAgICAgICAgIC8vIGJ1dCB3ZSBjYW4gc3RpbGwgY2FsbCB0aGUgbG9nLW9ubHkgYm91bmRhcnkgc28gdGhlIGVycm9yIGlzbid0IHN3YWxsb3dlZC5cbiAgICAgICAgICAvL1xuICAgICAgICAgIC8vIFRPRE8gVGhpcyBpcyBvbmx5IGEgdGVtcG9yYXJ5IGJhbmRhaWQgZm9yIHRoZSBvbGQgcmVjb25jaWxlciBmb3JrLlxuICAgICAgICAgIC8vIFdlIGNhbiBkZWxldGUgdGhpcyBzcGVjaWFsIGNhc2Ugb25jZSB0aGUgbmV3IGZvcmsgaXMgbWVyZ2VkLlxuICAgICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRDYXRjaChlcnJvciwgZXJyb3JJbmZvKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yVG9JZ25vcmUpIHsvLyBUT0RPIElnbm9yZSB0aGlzIGVycm9yPyBSZXRocm93IGl0P1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGtpbmQgb2YgYW4gZWRnZSBjYXNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IGZpYmVyLnJldHVybjtcbiAgfVxufVxuZnVuY3Rpb24gcGluZ1N1c3BlbmRlZFJvb3Qocm9vdCwgd2FrZWFibGUsIHBpbmdlZExhbmVzKSB7XG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcblxuICBpZiAocGluZ0NhY2hlICE9PSBudWxsKSB7XG4gICAgLy8gVGhlIHdha2VhYmxlIHJlc29sdmVkLCBzbyB3ZSBubyBsb25nZXIgbmVlZCB0byBtZW1vaXplLCBiZWNhdXNlIGl0IHdpbGxcbiAgICAvLyBuZXZlciBiZSB0aHJvd24gYWdhaW4uXG4gICAgcGluZ0NhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcyk7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCA9PT0gcm9vdCAmJiBpc1N1YnNldE9mTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMsIHBpbmdlZExhbmVzKSkge1xuICAgIC8vIFJlY2VpdmVkIGEgcGluZyBhdCB0aGUgc2FtZSBwcmlvcml0eSBsZXZlbCBhdCB3aGljaCB3ZSdyZSBjdXJyZW50bHlcbiAgICAvLyByZW5kZXJpbmcuIFdlIG1pZ2h0IHdhbnQgdG8gcmVzdGFydCB0aGlzIHJlbmRlci4gVGhpcyBzaG91bGQgbWlycm9yXG4gICAgLy8gdGhlIGxvZ2ljIG9mIHdoZXRoZXIgb3Igbm90IGEgcm9vdCBzdXNwZW5kcyBvbmNlIGl0IGNvbXBsZXRlcy5cbiAgICAvLyBUT0RPOiBJZiB3ZSdyZSByZW5kZXJpbmcgc3luYyBlaXRoZXIgZHVlIHRvIFN5bmMsIEJhdGNoZWQgb3IgZXhwaXJlZCxcbiAgICAvLyB3ZSBzaG91bGQgcHJvYmFibHkgbmV2ZXIgcmVzdGFydC5cbiAgICAvLyBJZiB3ZSdyZSBzdXNwZW5kZWQgd2l0aCBkZWxheSwgb3IgaWYgaXQncyBhIHJldHJ5LCB3ZSdsbCBhbHdheXMgc3VzcGVuZFxuICAgIC8vIHNvIHdlIGNhbiBhbHdheXMgcmVzdGFydC5cbiAgICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZFdpdGhEZWxheSB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkICYmIGluY2x1ZGVzT25seVJldHJpZXMod29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpICYmIG5vdygpIC0gZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA8IEZBTExCQUNLX1RIUk9UVExFX01TKSB7XG4gICAgICAvLyBSZXN0YXJ0IGZyb20gdGhlIHJvb3QuXG4gICAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRXZlbiB0aG91Z2ggd2UgY2FuJ3QgcmVzdGFydCByaWdodCBub3csIHdlIG1pZ2h0IGdldCBhblxuICAgICAgLy8gb3Bwb3J0dW5pdHkgbGF0ZXIuIFNvIHdlIG1hcmsgdGhpcyByZW5kZXIgYXMgaGF2aW5nIGEgcGluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzUm9vdFBpbmdlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcywgcGluZ2VkTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcGluZ2VkTGFuZXMpO1xufVxuXG5mdW5jdGlvbiByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKSB7XG4gIC8vIFRoZSBib3VuZGFyeSBmaWJlciAoYSBTdXNwZW5zZSBjb21wb25lbnQgb3IgU3VzcGVuc2VMaXN0IGNvbXBvbmVudClcbiAgLy8gcHJldmlvdXNseSB3YXMgcmVuZGVyZWQgaW4gaXRzIGZhbGxiYWNrIHN0YXRlLiBPbmUgb2YgdGhlIHByb21pc2VzIHRoYXRcbiAgLy8gc3VzcGVuZGVkIGl0IGhhcyByZXNvbHZlZCwgd2hpY2ggbWVhbnMgYXQgbGVhc3QgcGFydCBvZiB0aGUgdHJlZSB3YXNcbiAgLy8gbGlrZWx5IHVuYmxvY2tlZC4gVHJ5IHJlbmRlcmluZyBhZ2FpbiwgYXQgYSBuZXcgZXhwaXJhdGlvbiB0aW1lLlxuICBpZiAocmV0cnlMYW5lID09PSBOb0xhbmUpIHtcbiAgICByZXRyeUxhbmUgPSByZXF1ZXN0UmV0cnlMYW5lKGJvdW5kYXJ5RmliZXIpO1xuICB9IC8vIFRPRE86IFNwZWNpYWwgY2FzZSBpZGxlIHByaW9yaXR5P1xuXG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xuXG4gIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHJldHJ5TGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmV0cnlMYW5lKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZVJldHJ5V2FrZWFibGUoYm91bmRhcnlGaWJlciwgd2FrZWFibGUpIHtcbiAgdmFyIHJldHJ5TGFuZSA9IE5vTGFuZTsgLy8gRGVmYXVsdFxuXG4gIHZhciByZXRyeUNhY2hlO1xuXG4gIHtcbiAgICByZXRyeUNhY2hlID0gYm91bmRhcnlGaWJlci5zdGF0ZU5vZGU7XG4gIH1cblxuICBpZiAocmV0cnlDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHJldHJ5Q2FjaGUuZGVsZXRlKHdha2VhYmxlKTtcbiAgfVxuXG4gIHJldHJ5VGltZWRPdXRCb3VuZGFyeShib3VuZGFyeUZpYmVyLCByZXRyeUxhbmUpO1xufSAvLyBDb21wdXRlcyB0aGUgbmV4dCBKdXN0IE5vdGljZWFibGUgRGlmZmVyZW5jZSAoSk5EKSBib3VuZGFyeS5cbi8vIFRoZSB0aGVvcnkgaXMgdGhhdCBhIHBlcnNvbiBjYW4ndCB0ZWxsIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gc21hbGwgZGlmZmVyZW5jZXMgaW4gdGltZS5cbi8vIFRoZXJlZm9yZSwgaWYgd2Ugd2FpdCBhIGJpdCBsb25nZXIgdGhhbiBuZWNlc3NhcnkgdGhhdCB3b24ndCB0cmFuc2xhdGUgdG8gYSBub3RpY2VhYmxlXG4vLyBkaWZmZXJlbmNlIGluIHRoZSBleHBlcmllbmNlLiBIb3dldmVyLCB3YWl0aW5nIGZvciBsb25nZXIgbWlnaHQgbWVhbiB0aGF0IHdlIGNhbiBhdm9pZFxuLy8gc2hvd2luZyBhbiBpbnRlcm1lZGlhdGUgbG9hZGluZyBzdGF0ZS4gVGhlIGxvbmdlciB3ZSBoYXZlIGFscmVhZHkgd2FpdGVkLCB0aGUgaGFyZGVyIGl0XG4vLyBpcyB0byB0ZWxsIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuIFRoZXJlZm9yZSwgdGhlIGxvbmdlciB3ZSd2ZSBhbHJlYWR5IHdhaXRlZCxcbi8vIHRoZSBsb25nZXIgd2UgY2FuIHdhaXQgYWRkaXRpb25hbGx5LiBBdCBzb21lIHBvaW50IHdlIGhhdmUgdG8gZ2l2ZSB1cCB0aG91Z2guXG4vLyBXZSBwaWNrIGEgdHJhaW4gbW9kZWwgd2hlcmUgdGhlIG5leHQgYm91bmRhcnkgY29tbWl0cyBhdCBhIGNvbnNpc3RlbnQgc2NoZWR1bGUuXG4vLyBUaGVzZSBwYXJ0aWN1bGFyIG51bWJlcnMgYXJlIHZhZ3VlIGVzdGltYXRlcy4gV2UgZXhwZWN0IHRvIGFkanVzdCB0aGVtIGJhc2VkIG9uIHJlc2VhcmNoLlxuXG5mdW5jdGlvbiBqbmQodGltZUVsYXBzZWQpIHtcbiAgcmV0dXJuIHRpbWVFbGFwc2VkIDwgMTIwID8gMTIwIDogdGltZUVsYXBzZWQgPCA0ODAgPyA0ODAgOiB0aW1lRWxhcHNlZCA8IDEwODAgPyAxMDgwIDogdGltZUVsYXBzZWQgPCAxOTIwID8gMTkyMCA6IHRpbWVFbGFwc2VkIDwgMzAwMCA/IDMwMDAgOiB0aW1lRWxhcHNlZCA8IDQzMjAgPyA0MzIwIDogY2VpbCh0aW1lRWxhcHNlZCAvIDE5NjApICogMTk2MDtcbn1cblxuZnVuY3Rpb24gY2hlY2tGb3JOZXN0ZWRVcGRhdGVzKCkge1xuICBpZiAobmVzdGVkVXBkYXRlQ291bnQgPiBORVNURURfVVBEQVRFX0xJTUlUKSB7XG4gICAgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xuICAgIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG5cbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIk1heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCByZXBlYXRlZGx5IGNhbGxzIHNldFN0YXRlIGluc2lkZSBjb21wb25lbnRXaWxsVXBkYXRlIG9yIGNvbXBvbmVudERpZFVwZGF0ZS4gUmVhY3QgbGltaXRzIHRoZSBudW1iZXIgb2YgbmVzdGVkIHVwZGF0ZXMgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcy5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAobmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID4gTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUKSB7XG4gICAgICBuZXN0ZWRQYXNzaXZlVXBkYXRlQ291bnQgPSAwO1xuXG4gICAgICBlcnJvcignTWF4aW11bSB1cGRhdGUgZGVwdGggZXhjZWVkZWQuIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgY29tcG9uZW50ICcgKyBcImNhbGxzIHNldFN0YXRlIGluc2lkZSB1c2VFZmZlY3QsIGJ1dCB1c2VFZmZlY3QgZWl0aGVyIGRvZXNuJ3QgXCIgKyAnaGF2ZSBhIGRlcGVuZGVuY3kgYXJyYXksIG9yIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZXMgb24gJyArICdldmVyeSByZW5kZXIuJyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoUmVuZGVyUGhhc2VTdHJpY3RNb2RlV2FybmluZ3NJbkRFVigpIHtcbiAge1xuICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmcoKTtcblxuICAgIHtcbiAgICAgIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLmZsdXNoUGVuZGluZ1Vuc2FmZUxpZmVjeWNsZVdhcm5pbmdzKCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Ob3RZZXRNb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gV2UgbGV0IHRoZSBvdGhlciB3YXJuaW5nIGFib3V0IHJlbmRlciBwaGFzZSB1cGRhdGVzIGRlYWwgd2l0aCB0aGlzIG9uZS5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIShmaWJlci5tb2RlICYgKEJsb2NraW5nTW9kZSB8IENvbmN1cnJlbnRNb2RlKSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCAmJiB0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvck5vdFlldE1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ID0gbmV3IFNldChbY29tcG9uZW50TmFtZV0pO1xuICAgIH1cblxuICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYSBjb21wb25lbnQgdGhhdCBoYXNuJ3QgbW91bnRlZCB5ZXQuIFwiICsgJ1RoaXMgaW5kaWNhdGVzIHRoYXQgeW91IGhhdmUgYSBzaWRlLWVmZmVjdCBpbiB5b3VyIHJlbmRlciBmdW5jdGlvbiB0aGF0ICcgKyAnYXN5bmNocm9ub3VzbHkgbGF0ZXIgY2FsbHMgdHJpZXMgdG8gdXBkYXRlIHRoZSBjb21wb25lbnQuIE1vdmUgdGhpcyB3b3JrIHRvICcgKyAndXNlRWZmZWN0IGluc3RlYWQuJyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ID0gbnVsbDtcblxuZnVuY3Rpb24gd2FybkFib3V0VXBkYXRlT25Vbm1vdW50ZWRGaWJlckluREVWKGZpYmVyKSB7XG4gIHtcbiAgICB2YXIgdGFnID0gZmliZXIudGFnO1xuXG4gICAgaWYgKHRhZyAhPT0gSG9zdFJvb3QgJiYgdGFnICE9PSBDbGFzc0NvbXBvbmVudCAmJiB0YWcgIT09IEZ1bmN0aW9uQ29tcG9uZW50ICYmIHRhZyAhPT0gRm9yd2FyZFJlZiAmJiB0YWcgIT09IE1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBTaW1wbGVNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gQmxvY2spIHtcbiAgICAgIC8vIE9ubHkgd2FybiBmb3IgdXNlci1kZWZpbmVkIGNvbXBvbmVudHMsIG5vdCBpbnRlcm5hbCBvbmVzIGxpa2UgU3VzcGVuc2UuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGVyZSBhcmUgcGVuZGluZyBwYXNzaXZlIGVmZmVjdHMgdW5tb3VudHMgZm9yIHRoaXMgRmliZXIsXG4gICAgLy8gd2UgY2FuIGFzc3VtZSB0aGF0IHRoZXkgd291bGQgaGF2ZSBwcmV2ZW50ZWQgdGhpcyB1cGRhdGUuXG5cblxuICAgIGlmICgoZmliZXIuZmxhZ3MgJiBQYXNzaXZlVW5tb3VudFBlbmRpbmdEZXYpICE9PSBOb0ZsYWdzKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBXZSBzaG93IHRoZSB3aG9sZSBzdGFjayBidXQgZGVkdXBlIG9uIHRoZSB0b3AgY29tcG9uZW50J3MgbmFtZSBiZWNhdXNlXG4gICAgLy8gdGhlIHByb2JsZW1hdGljIGNvZGUgYWxtb3N0IGFsd2F5cyBsaWVzIGluc2lkZSB0aGF0IGNvbXBvbmVudC5cblxuXG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdSZWFjdENvbXBvbmVudCc7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50Lmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICBpZiAoaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzKSA7IGVsc2Uge1xuICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICB0cnkge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuXG4gICAgICAgIGVycm9yKFwiQ2FuJ3QgcGVyZm9ybSBhIFJlYWN0IHN0YXRlIHVwZGF0ZSBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LiBUaGlzIFwiICsgJ2lzIGEgbm8tb3AsIGJ1dCBpdCBpbmRpY2F0ZXMgYSBtZW1vcnkgbGVhayBpbiB5b3VyIGFwcGxpY2F0aW9uLiBUbyAnICsgJ2ZpeCwgY2FuY2VsIGFsbCBzdWJzY3JpcHRpb25zIGFuZCBhc3luY2hyb25vdXMgdGFza3MgaW4gJXMuJywgdGFnID09PSBDbGFzc0NvbXBvbmVudCA/ICd0aGUgY29tcG9uZW50V2lsbFVubW91bnQgbWV0aG9kJyA6ICdhIHVzZUVmZmVjdCBjbGVhbnVwIGZ1bmN0aW9uJyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgYmVnaW5Xb3JrJDE7XG5cbntcbiAgdmFyIGR1bW15RmliZXIgPSBudWxsO1xuXG4gIGJlZ2luV29yayQxID0gZnVuY3Rpb24gKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKSB7XG4gICAgLy8gSWYgYSBjb21wb25lbnQgdGhyb3dzIGFuIGVycm9yLCB3ZSByZXBsYXkgaXQgYWdhaW4gaW4gYSBzeW5jaHJvbm91c2x5XG4gICAgLy8gZGlzcGF0Y2hlZCBldmVudCwgc28gdGhhdCB0aGUgZGVidWdnZXIgd2lsbCB0cmVhdCBpdCBhcyBhbiB1bmNhdWdodFxuICAgIC8vIGVycm9yIFNlZSBSZWFjdEVycm9yVXRpbHMgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgLy8gQmVmb3JlIGVudGVyaW5nIHRoZSBiZWdpbiBwaGFzZSwgY29weSB0aGUgd29yay1pbi1wcm9ncmVzcyBvbnRvIGEgZHVtbXlcbiAgICAvLyBmaWJlci4gSWYgYmVnaW5Xb3JrIHRocm93cywgd2UnbGwgdXNlIHRoaXMgdG8gcmVzZXQgdGhlIHN0YXRlLlxuICAgIHZhciBvcmlnaW5hbFdvcmtJblByb2dyZXNzQ29weSA9IGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKGR1bW15RmliZXIsIHVuaXRPZldvcmspO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBiZWdpbldvcmsoY3VycmVudCwgdW5pdE9mV29yaywgbGFuZXMpO1xuICAgIH0gY2F0Y2ggKG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgIGlmIChvcmlnaW5hbEVycm9yICE9PSBudWxsICYmIHR5cGVvZiBvcmlnaW5hbEVycm9yID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvci50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIERvbid0IHJlcGxheSBwcm9taXNlcy4gVHJlYXQgZXZlcnl0aGluZyBlbHNlIGxpa2UgYW4gZXJyb3IuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9IC8vIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgd2l0aCBoYW5kbGVFcnJvcjsgYW55IGNoYW5nZXMgaGVyZSBtdXN0IGhhdmVcbiAgICAgIC8vIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0aGVyZS5cblxuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7IC8vIERvbid0IHJlc2V0IGN1cnJlbnQgZGVidWcgZmliZXIsIHNpbmNlIHdlJ3JlIGFib3V0IHRvIHdvcmsgb24gdGhlXG4gICAgICAvLyBzYW1lIGZpYmVyIGFnYWluLlxuICAgICAgLy8gVW53aW5kIHRoZSBmYWlsZWQgc3RhY2sgZnJhbWVcblxuICAgICAgdW53aW5kSW50ZXJydXB0ZWRXb3JrKHVuaXRPZldvcmspOyAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBwcm9wZXJ0aWVzIG9mIHRoZSBmaWJlci5cblxuICAgICAgYXNzaWduRmliZXJQcm9wZXJ0aWVzSW5ERVYodW5pdE9mV29yaywgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkpO1xuXG4gICAgICBpZiAoIHVuaXRPZldvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBwcm9maWxlciB0aW1lci5cbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKHVuaXRPZldvcmspO1xuICAgICAgfSAvLyBSdW4gYmVnaW5Xb3JrIGFnYWluLlxuXG5cbiAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBiZWdpbldvcmssIG51bGwsIGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgdmFyIHJlcGxheUVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpOyAvLyBgaW52b2tlR3VhcmRlZENhbGxiYWNrYCBzb21ldGltZXMgc2V0cyBhbiBleHBhbmRvIGBfc3VwcHJlc3NMb2dnaW5nYC5cbiAgICAgICAgLy8gUmV0aHJvdyB0aGlzIGVycm9yIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIG9uZS5cblxuICAgICAgICB0aHJvdyByZXBsYXlFcnJvcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgYnJhbmNoIGlzIHJlYWNoYWJsZSBpZiB0aGUgcmVuZGVyIHBoYXNlIGlzIGltcHVyZS5cbiAgICAgICAgdGhyb3cgb3JpZ2luYWxFcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IGZhbHNlO1xudmFyIGRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudDtcblxue1xuICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFJlbmRlclBoYXNlVXBkYXRlc0luREVWKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgKGV4ZWN1dGlvbkNvbnRleHQgJiBSZW5kZXJDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmICFnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSkge1xuICAgICAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUgPSB3b3JrSW5Qcm9ncmVzcyAmJiBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdVbmtub3duJzsgLy8gRGVkdXBlIGJ5IHRoZSByZW5kZXJpbmcgY29tcG9uZW50IGJlY2F1c2UgaXQncyB0aGUgb25lIHRoYXQgbmVlZHMgdG8gYmUgZml4ZWQuXG5cbiAgICAgICAgICAgIHZhciBkZWR1cGVLZXkgPSByZW5kZXJpbmdDb21wb25lbnROYW1lO1xuXG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyRm9yQW5vdGhlckNvbXBvbmVudC5oYXMoZGVkdXBlS2V5KSkge1xuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuYWRkKGRlZHVwZUtleSk7XG4gICAgICAgICAgICAgIHZhciBzZXRTdGF0ZUNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBhIGNvbXBvbmVudCAoYCVzYCkgd2hpbGUgcmVuZGVyaW5nIGEgJyArICdkaWZmZXJlbnQgY29tcG9uZW50IChgJXNgKS4gVG8gbG9jYXRlIHRoZSBiYWQgc2V0U3RhdGUoKSBjYWxsIGluc2lkZSBgJXNgLCAnICsgJ2ZvbGxvdyB0aGUgc3RhY2sgdHJhY2UgYXMgZGVzY3JpYmVkIGluIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zZXRzdGF0ZS1pbi1yZW5kZXInLCBzZXRTdGF0ZUNvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUsIHJlbmRlcmluZ0NvbXBvbmVudE5hbWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dFVwZGF0ZUluUmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVycm9yKCdDYW5ub3QgdXBkYXRlIGR1cmluZyBhbiBleGlzdGluZyBzdGF0ZSB0cmFuc2l0aW9uIChzdWNoIGFzICcgKyAnd2l0aGluIGByZW5kZXJgKS4gUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSAnICsgJ2Z1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4nKTtcblxuICAgICAgICAgICAgICBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gYSAnc2hhcmVkJyB2YXJpYWJsZSB0aGF0IGNoYW5nZXMgd2hlbiBhY3QoKSBvcGVucy9jbG9zZXMgaW4gdGVzdHMuXG5cblxudmFyIElzVGhpc1JlbmRlcmVyQWN0aW5nID0ge1xuICBjdXJyZW50OiBmYWxzZVxufTtcbmZ1bmN0aW9uIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChmaWJlcikge1xuICB7XG4gICAgaWYgKCBJc1NvbWVSZW5kZXJlckFjdGluZy5jdXJyZW50ID09PSB0cnVlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgIT09IHRydWUpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkl0IGxvb2tzIGxpa2UgeW91J3JlIHVzaW5nIHRoZSB3cm9uZyBhY3QoKSBhcm91bmQgeW91ciB0ZXN0IGludGVyYWN0aW9ucy5cXG5cIiArICdCZSBzdXJlIHRvIHVzZSB0aGUgbWF0Y2hpbmcgdmVyc2lvbiBvZiBhY3QoKSBjb3JyZXNwb25kaW5nIHRvIHlvdXIgcmVuZGVyZXI6XFxuXFxuJyArICcvLyBmb3IgcmVhY3QtZG9tOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IHthY3R9IGZyJyArIFwib20gJ3JlYWN0LWRvbS90ZXN0LXV0aWxzJztcXG5cIiArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pO1xcblxcbicgKyAnLy8gZm9yIHJlYWN0LXRlc3QtcmVuZGVyZXI6XFxuJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICdpbXBvcnQgVGVzdFJlbmRlcmVyIGZyJyArIFwib20gcmVhY3QtdGVzdC1yZW5kZXJlcic7XFxuXCIgKyAnY29uc3Qge2FjdH0gPSBUZXN0UmVuZGVyZXI7XFxuJyArICcvLyAuLi5cXG4nICsgJ2FjdCgoKSA9PiAuLi4pOycpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ0VmZmVjdHNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpICE9PSBOb01vZGUgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIGVycm9yKCdBbiB1cGRhdGUgdG8gJXMgcmFuIGFuIGVmZmVjdCwgYnV0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdhcm5JZk5vdEN1cnJlbnRseUFjdGluZ1VwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKCBleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQgJiYgSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UgJiYgSXNUaGlzUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIGluc2lkZSBhIHRlc3Qgd2FzIG5vdCB3cmFwcGVkIGluIGFjdCguLi4pLlxcblxcbicgKyAnV2hlbiB0ZXN0aW5nLCBjb2RlIHRoYXQgY2F1c2VzIFJlYWN0IHN0YXRlIHVwZGF0ZXMgc2hvdWxkIGJlICcgKyAnd3JhcHBlZCBpbnRvIGFjdCguLi4pOlxcblxcbicgKyAnYWN0KCgpID0+IHtcXG4nICsgJyAgLyogZmlyZSBldmVudHMgdGhhdCB1cGRhdGUgc3RhdGUgKi9cXG4nICsgJ30pO1xcbicgKyAnLyogYXNzZXJ0IG9uIHRoZSBvdXRwdXQgKi9cXG5cXG4nICsgXCJUaGlzIGVuc3VyZXMgdGhhdCB5b3UncmUgdGVzdGluZyB0aGUgYmVoYXZpb3IgdGhlIHVzZXIgd291bGQgc2VlIFwiICsgJ2luIHRoZSBicm93c2VyLicgKyAnIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dyYXAtdGVzdHMtd2l0aC1hY3QnLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYgPSB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVY7IC8vIEluIHRlc3RzLCB3ZSB3YW50IHRvIGVuZm9yY2UgYSBtb2NrZWQgc2NoZWR1bGVyLlxuXG52YXIgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSBmYWxzZTsgLy8gVE9ETyBCZWZvcmUgd2UgcmVsZWFzZSBjb25jdXJyZW50IG1vZGUsIHJldmlzaXQgdGhpcyBhbmQgZGVjaWRlIHdoZXRoZXIgYSBtb2NrZWRcbi8vIHNjaGVkdWxlciBpcyB0aGUgYWN0dWFsIHJlY29tbWVuZGF0aW9uLiBUaGUgYWx0ZXJuYXRpdmUgY291bGQgYmUgYSB0ZXN0aW5nIGJ1aWxkLFxuLy8gYSBuZXcgbGliLCBvciB3aGF0ZXZlcjsgd2UgZHVubm8ganVzdCB5ZXQuIFRoaXMgbWVzc2FnZSBpcyBmb3IgZWFybHkgYWRvcHRlcnNcbi8vIHRvIGdldCB0aGVpciB0ZXN0cyByaWdodC5cblxuZnVuY3Rpb24gd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoZmliZXIpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuQWJvdXRVbm1vY2tlZFNjaGVkdWxlciA9PT0gZmFsc2UgJiYgU2NoZWR1bGVyLnVuc3RhYmxlX2ZsdXNoQWxsV2l0aG91dEFzc2VydGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoZmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSB8fCBmaWJlci5tb2RlICYgQ29uY3VycmVudE1vZGUpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdJbiBDb25jdXJyZW50IG9yIFN5bmMgbW9kZXMsIHRoZSBcInNjaGVkdWxlclwiIG1vZHVsZSBuZWVkcyB0byBiZSBtb2NrZWQgJyArICd0byBndWFyYW50ZWUgY29uc2lzdGVudCBiZWhhdmlvdXIgYWNyb3NzIHRlc3RzIGFuZCBicm93c2Vycy4gJyArICdGb3IgZXhhbXBsZSwgd2l0aCBqZXN0OiBcXG4nICsgLy8gQnJlYWsgdXAgcmVxdWlyZXMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgIFwiamVzdC5tb2NrKCdzY2hlZHVsZXInLCAoKSA9PiByZXF1aXJlXCIgKyBcIignc2NoZWR1bGVyL3Vuc3RhYmxlX21vY2snKSk7XFxuXFxuXCIgKyAnRm9yIG1vcmUgaW5mbywgdmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL21vY2stc2NoZWR1bGVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVUaHJlYWRJRChyb290LCBsYW5lKSB7XG4gIC8vIEludGVyYWN0aW9uIHRocmVhZHMgYXJlIHVuaXF1ZSBwZXIgcm9vdCBhbmQgZXhwaXJhdGlvbiB0aW1lLlxuICAvLyBOT1RFOiBJbnRlbnRpb25hbGx5IHVuc291bmQgY2FzdC4gQWxsIHRoYXQgbWF0dGVycyBpcyB0aGF0IGl0J3MgYSBudW1iZXJcbiAgLy8gYW5kIGl0IHJlcHJlc2VudHMgYSBiYXRjaCBvZiB3b3JrLiBDb3VsZCBtYWtlIGEgaGVscGVyIGZ1bmN0aW9uIGluc3RlYWQsXG4gIC8vIGJ1dCBtZWggdGhpcyBpcyBmaW5lIGZvciBub3cuXG4gIHJldHVybiBsYW5lICogMTAwMCArIHJvb3QuaW50ZXJhY3Rpb25UaHJlYWRJRDtcbn1cblxuZnVuY3Rpb24gbWFya1NwYXduZWRXb3JrKGxhbmUpIHtcblxuICBpZiAoc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPT09IG51bGwpIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlciA9IFtsYW5lXTtcbiAgfSBlbHNlIHtcbiAgICBzcGF3bmVkV29ya0R1cmluZ1JlbmRlci5wdXNoKGxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUsIGludGVyYWN0aW9ucykge1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbnMgPSBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZ2V0KGxhbmUpO1xuXG4gICAgaWYgKHBlbmRpbmdJbnRlcmFjdGlvbnMgIT0gbnVsbCkge1xuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGlmICghcGVuZGluZ0ludGVyYWN0aW9ucy5oYXMoaW50ZXJhY3Rpb24pKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHByZXZpb3VzbHkgdW5zY2hlZHVsZWQgaW50ZXJhY3Rpb24uXG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbk1hcC5zZXQobGFuZSwgbmV3IFNldChpbnRlcmFjdGlvbnMpKTsgLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cblxuICAgICAgaW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpIHtcblxuICBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQpO1xufVxuXG5mdW5jdGlvbiBzdGFydFdvcmtPblBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpIHtcbiAgLy8gd2UgY2FuIGFjY3VyYXRlbHkgYXR0cmlidXRlIHRpbWUgc3BlbnQgd29ya2luZyBvbiBpdCwgQW5kIHNvIHRoYXQgY2FzY2FkaW5nXG4gIC8vIHdvcmsgdHJpZ2dlcmVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlIHdpbGwgYmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBzY2hlZHVsZWRMYW5lKSB7XG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUobGFuZXMsIHNjaGVkdWxlZExhbmUpKSB7XG4gICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICAgICAgfSk7XG4gICAgfVxuICB9KTsgLy8gU3RvcmUgdGhlIGN1cnJlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBvbiB0aGUgRmliZXJSb290IGZvciBhIGZldyByZWFzb25zOlxuICAvLyBXZSBjYW4gcmUtdXNlIGl0IGluIGhvdCBmdW5jdGlvbnMgbGlrZSBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QoKVxuICAvLyB3aXRob3V0IGhhdmluZyB0byByZWNhbGN1bGF0ZSBpdC4gV2Ugd2lsbCBhbHNvIHVzZSBpdCBpbiBjb21taXRXb3JrKCkgdG9cbiAgLy8gcGFzcyB0byBhbnkgUHJvZmlsZXIgb25SZW5kZXIoKSBob29rcy4gVGhpcyBhbHNvIHByb3ZpZGVzIERldlRvb2xzIHdpdGggYVxuICAvLyB3YXkgdG8gYWNjZXNzIGl0IHdoZW4gdGhlIG9uQ29tbWl0Um9vdCgpIGhvb2sgaXMgY2FsbGVkLlxuXG4gIHJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMgPSBpbnRlcmFjdGlvbnM7XG5cbiAgaWYgKGludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gdHJhY2luZy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGhyZWFkSUQgPSBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZXMpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBjb21taXR0ZWRMYW5lcykge1xuXG4gIHZhciByZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0ID0gcm9vdC5wZW5kaW5nTGFuZXM7XG4gIHZhciBzdWJzY3JpYmVyO1xuXG4gIHRyeSB7XG4gICAgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgICAvLyBGSVhNRTogTW9yZSB0aGFuIG9uZSBsYW5lIGNhbiBmaW5pc2ggaW4gYSBzaW5nbGUgY29tbWl0LlxuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGNvbW1pdHRlZExhbmVzKTtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChyb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9IGZpbmFsbHkge1xuICAgIC8vIENsZWFyIGNvbXBsZXRlZCBpbnRlcmFjdGlvbnMgZnJvbSB0aGUgcGVuZGluZyBNYXAuXG4gICAgLy8gVW5sZXNzIHRoZSByZW5kZXIgd2FzIHN1c3BlbmRlZCBvciBjYXNjYWRpbmcgd29yayB3YXMgc2NoZWR1bGVkLFxuICAgIC8vIEluIHdoaWNoIGNhc2XigJMgbGVhdmUgcGVuZGluZyBpbnRlcmFjdGlvbnMgdW50aWwgdGhlIHN1YnNlcXVlbnQgcmVuZGVyLlxuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25NYXAgPSByb290LnBlbmRpbmdJbnRlcmFjdGlvbk1hcDtcbiAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZm9yRWFjaChmdW5jdGlvbiAoc2NoZWR1bGVkSW50ZXJhY3Rpb25zLCBsYW5lKSB7XG4gICAgICAvLyBPbmx5IGRlY3JlbWVudCB0aGUgcGVuZGluZyBpbnRlcmFjdGlvbiBjb3VudCBpZiB3ZSdyZSBkb25lLlxuICAgICAgLy8gSWYgdGhlcmUncyBzdGlsbCB3b3JrIGF0IHRoZSBjdXJyZW50IHByaW9yaXR5LFxuICAgICAgLy8gVGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSBhcmUgd2FpdGluZyBmb3Igc3VzcGVuc2UgZGF0YS5cbiAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW1haW5pbmdMYW5lc0FmdGVyQ29tbWl0LCBsYW5lKSkge1xuICAgICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuZGVsZXRlKGxhbmUpO1xuICAgICAgICBzY2hlZHVsZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIElmIHRoZSBzdWJzY3JpYmVyIHRocm93cywgcmV0aHJvdyBpdCBpbiBhIHNlcGFyYXRlIHRhc2tcbiAgICAgICAgICAgICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0gLy8gYGFjdGAgdGVzdGluZyBBUElcblxuZnVuY3Rpb24gc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkge1xuICAvLyBOZXZlciBmb3JjZSBmbHVzaCBpbiBwcm9kdWN0aW9uLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBnZXQgc3RyaXBwZWQgb3V0LlxuICByZXR1cm4gIGFjdGluZ1VwZGF0ZXNTY29wZURlcHRoID4gMDtcbn1cbi8vIHNvIHdlIGNhbiB0ZWxsIGlmIGFueSBhc3luYyBhY3QoKSBjYWxscyB0cnkgdG8gcnVuIGluIHBhcmFsbGVsLlxuXG5cbnZhciBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA9IDA7XG5cbmZ1bmN0aW9uIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzKGZpYmVyKSB7XG4gIGZpYmVyLnNpYmxpbmcgPSBudWxsO1xuICBmaWJlci5zdGF0ZU5vZGUgPSBudWxsO1xufVxuXG52YXIgcmVzb2x2ZUZhbWlseSA9IG51bGw7IC8vICRGbG93Rml4TWUgRmxvdyBnZXRzIGNvbmZ1c2VkIGJ5IGEgV2Vha1NldCBmZWF0dXJlIGNoZWNrIGJlbG93LlxuXG52YXIgZmFpbGVkQm91bmRhcmllcyA9IG51bGw7XG52YXIgc2V0UmVmcmVzaEhhbmRsZXIgPSBmdW5jdGlvbiAoaGFuZGxlcikge1xuICB7XG4gICAgcmVzb2x2ZUZhbWlseSA9IGhhbmRsZXI7XG4gIH1cbn07XG5mdW5jdGlvbiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseSh0eXBlKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcodHlwZSkge1xuICAvLyBObyBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcy5cbiAgcmV0dXJuIHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyh0eXBlKTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHJlYWwgZm9yd2FyZFJlZi4gRG9uJ3Qgd2FudCB0byBjcmFzaCBlYXJseS5cbiAgICAgIGlmICh0eXBlICE9PSBudWxsICYmIHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gRm9yd2FyZFJlZiBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHJlc29sdmVkIC50eXBlIGlzIGFuIG9iamVjdCxcbiAgICAgICAgLy8gYnV0IGl0J3MgcG9zc2libGUgdGhhdCB3ZSBvbmx5IGhhdmUgaXRzIGlubmVyIHJlbmRlciBmdW5jdGlvbiBpbiB0aGUgbWFwLlxuICAgICAgICAvLyBJZiB0aGF0IGlubmVyIHJlbmRlciBmdW5jdGlvbiBpcyBkaWZmZXJlbnQsIHdlJ2xsIGJ1aWxkIGEgbmV3IGZvcndhcmRSZWYgdHlwZS5cbiAgICAgICAgdmFyIGN1cnJlbnRSZW5kZXIgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZS5yZW5kZXIpO1xuXG4gICAgICAgIGlmICh0eXBlLnJlbmRlciAhPT0gY3VycmVudFJlbmRlcikge1xuICAgICAgICAgIHZhciBzeW50aGV0aWNUeXBlID0ge1xuICAgICAgICAgICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgICAgICAgICByZW5kZXI6IGN1cnJlbnRSZW5kZXJcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3ludGhldGljVHlwZS5kaXNwbGF5TmFtZSA9IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHN5bnRoZXRpY1R5cGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfSAvLyBVc2UgdGhlIGxhdGVzdCBrbm93biBpbXBsZW1lbnRhdGlvbi5cblxuXG4gICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoZmliZXIsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBwcmV2VHlwZSA9IGZpYmVyLmVsZW1lbnRUeXBlO1xuICAgIHZhciBuZXh0VHlwZSA9IGVsZW1lbnQudHlwZTsgLy8gSWYgd2UgZ290IGhlcmUsIHdlIGtub3cgdHlwZXMgYXJlbid0ID09PSBlcXVhbC5cblxuICAgIHZhciBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IGZhbHNlO1xuICAgIHZhciAkJHR5cGVvZk5leHRUeXBlID0gdHlwZW9mIG5leHRUeXBlID09PSAnb2JqZWN0JyAmJiBuZXh0VHlwZSAhPT0gbnVsbCA/IG5leHRUeXBlLiQkdHlwZW9mIDogbnVsbDtcblxuICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIG5leHRUeXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgdGhlIGlubmVyIHR5cGUgeWV0LlxuICAgICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gYXNzdW1lIHRoYXQgdGhlIGxhenkgaW5uZXIgdHlwZSBpcyBzdGFibGUsXG4gICAgICAgICAgICAvLyBhbmQgc28gaXQgaXMgc3VmZmljaWVudCB0byBhdm9pZCByZWNvbmNpbGluZyBpdCBhd2F5LlxuICAgICAgICAgICAgLy8gV2UncmUgbm90IGdvaW5nIHRvIHVud3JhcCBvciBhY3R1YWxseSB1c2UgdGhlIG5ldyBsYXp5IHR5cGUuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCQkdHlwZW9mTmV4dFR5cGUgPT09IFJFQUNUX0xBWllfVFlQRSkge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IGlmIGl0IHdhcyBidXQgY2FuIG5vIGxvbmdlciBiZSBzaW1wbGUsXG4gICAgICAgICAgICAvLyB3ZSBzaG91bGRuJ3Qgc2V0IHRoaXMuXG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBDaGVjayBpZiBib3RoIHR5cGVzIGhhdmUgYSBmYW1pbHkgYW5kIGl0J3MgdGhlIHNhbWUgb25lLlxuXG5cbiAgICBpZiAobmVlZHNDb21wYXJlRmFtaWxpZXMpIHtcbiAgICAgIC8vIE5vdGU6IG1lbW8oKSBhbmQgZm9yd2FyZFJlZigpIHdlJ2xsIGNvbXBhcmUgb3V0ZXIgcmF0aGVyIHRoYW4gaW5uZXIgdHlwZS5cbiAgICAgIC8vIFRoaXMgbWVhbnMgYm90aCBvZiB0aGVtIG5lZWQgdG8gYmUgcmVnaXN0ZXJlZCB0byBwcmVzZXJ2ZSBzdGF0ZS5cbiAgICAgIC8vIElmIHdlIHVud3JhcHBlZCBhbmQgY29tcGFyZWQgdGhlIGlubmVyIHR5cGVzIGZvciB3cmFwcGVycyBpbnN0ZWFkLFxuICAgICAgLy8gdGhlbiB3ZSB3b3VsZCByaXNrIGZhbHNlbHkgc2F5aW5nIHR3byBzZXBhcmF0ZSBtZW1vKEZvbylcbiAgICAgIC8vIGNhbGxzIGFyZSBlcXVpdmFsZW50IGJlY2F1c2UgdGhleSB3cmFwIHRoZSBzYW1lIEZvbyBmdW5jdGlvbi5cbiAgICAgIHZhciBwcmV2RmFtaWx5ID0gcmVzb2x2ZUZhbWlseShwcmV2VHlwZSk7XG5cbiAgICAgIGlmIChwcmV2RmFtaWx5ICE9PSB1bmRlZmluZWQgJiYgcHJldkZhbWlseSA9PT0gcmVzb2x2ZUZhbWlseShuZXh0VHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcikge1xuICB7XG4gICAgaWYgKHJlc29sdmVGYW1pbHkgPT09IG51bGwpIHtcbiAgICAgIC8vIEhvdCByZWxvYWRpbmcgaXMgZGlzYWJsZWQuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBXZWFrU2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMgPT09IG51bGwpIHtcbiAgICAgIGZhaWxlZEJvdW5kYXJpZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgIH1cblxuICAgIGZhaWxlZEJvdW5kYXJpZXMuYWRkKGZpYmVyKTtcbiAgfVxufVxudmFyIHNjaGVkdWxlUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCB1cGRhdGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBzdGFsZUZhbWlsaWVzID0gdXBkYXRlLnN0YWxlRmFtaWxpZXMsXG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcyA9IHVwZGF0ZS51cGRhdGVkRmFtaWxpZXM7XG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9KTtcbiAgfVxufTtcbnZhciBzY2hlZHVsZVJvb3QgPSBmdW5jdGlvbiAocm9vdCwgZWxlbWVudCkge1xuICB7XG4gICAgaWYgKHJvb3QuY29udGV4dCAhPT0gZW1wdHlDb250ZXh0T2JqZWN0KSB7XG4gICAgICAvLyBTdXBlciBlZGdlIGNhc2U6IHJvb3QgaGFzIGEgbGVnYWN5IF9yZW5kZXJTdWJ0cmVlIGNvbnRleHRcbiAgICAgIC8vIGJ1dCB3ZSBkb24ndCBrbm93IHRoZSBwYXJlbnRDb21wb25lbnQgc28gd2UgY2FuJ3QgcGFzcyBpdC5cbiAgICAgIC8vIEp1c3QgaWdub3JlLiBXZSdsbCBkZWxldGUgdGhpcyB3aXRoIF9yZW5kZXJTdWJ0cmVlIGNvZGUgcGF0aCBsYXRlci5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gICAgZmx1c2hTeW5jKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCByb290LCBudWxsLCBudWxsKTtcbiAgICB9KTtcbiAgfVxufTtcblxuZnVuY3Rpb24gc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShmaWJlciwgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlLFxuICAgICAgICBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIHJlc29sdmVGYW1pbHkgdG8gYmUgc2V0IGR1cmluZyBob3QgcmVsb2FkLicpO1xuICAgIH1cblxuICAgIHZhciBuZWVkc1JlbmRlciA9IGZhbHNlO1xuICAgIHZhciBuZWVkc1JlbW91bnQgPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgZmFtaWx5ID0gcmVzb2x2ZUZhbWlseShjYW5kaWRhdGVUeXBlKTtcblxuICAgICAgaWYgKGZhbWlseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChzdGFsZUZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1cGRhdGVkRmFtaWxpZXMuaGFzKGZhbWlseSkpIHtcbiAgICAgICAgICBpZiAodGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgICAgbmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmVlZHNSZW5kZXIgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzICE9PSBudWxsKSB7XG4gICAgICBpZiAoZmFpbGVkQm91bmRhcmllcy5oYXMoZmliZXIpIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBmYWlsZWRCb3VuZGFyaWVzLmhhcyhhbHRlcm5hdGUpKSB7XG4gICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCkge1xuICAgICAgZmliZXIuX2RlYnVnTmVlZHNSZW1vdW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobmVlZHNSZW1vdW50IHx8IG5lZWRzUmVuZGVyKSB7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsICYmICFuZWVkc1JlbW91bnQpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoY2hpbGQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoc2libGluZywgdXBkYXRlZEZhbWlsaWVzLCBzdGFsZUZhbWlsaWVzKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCA9IGZ1bmN0aW9uIChyb290LCBmYW1pbGllcykge1xuICB7XG4gICAgdmFyIGhvc3RJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgdmFyIHR5cGVzID0gbmV3IFNldChmYW1pbGllcy5tYXAoZnVuY3Rpb24gKGZhbWlseSkge1xuICAgICAgcmV0dXJuIGZhbWlseS5jdXJyZW50O1xuICAgIH0pKTtcbiAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkocm9vdC5jdXJyZW50LCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgcmV0dXJuIGhvc3RJbnN0YW5jZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShmaWJlciwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkLFxuICAgICAgICBzaWJsaW5nID0gZmliZXIuc2libGluZyxcbiAgICAgICAgdGFnID0gZmliZXIudGFnLFxuICAgICAgICB0eXBlID0gZmliZXIudHlwZTtcbiAgICB2YXIgY2FuZGlkYXRlVHlwZSA9IG51bGw7XG5cbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIGNhbmRpZGF0ZVR5cGUgPSB0eXBlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBkaWRNYXRjaCA9IGZhbHNlO1xuXG4gICAgaWYgKGNhbmRpZGF0ZVR5cGUgIT09IG51bGwpIHtcbiAgICAgIGlmICh0eXBlcy5oYXMoY2FuZGlkYXRlVHlwZSkpIHtcbiAgICAgICAgZGlkTWF0Y2ggPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkaWRNYXRjaCkge1xuICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNoLiBUaGlzIG9ubHkgZHJpbGxzIGRvd24gdG8gdGhlIGNsb3Nlc3QgaG9zdCBjb21wb25lbnRzLlxuICAgICAgLy8gVGhlcmUncyBubyBuZWVkIHRvIHNlYXJjaCBkZWVwZXIgYmVjYXVzZSBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2l2aW5nXG4gICAgICAvLyB2aXN1YWwgZmVlZGJhY2ssIFwiZmxhc2hpbmdcIiBvdXRlcm1vc3QgcGFyZW50IHJlY3RhbmdsZXMgaXMgc3VmZmljaWVudC5cbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJZiB0aGVyZSdzIG5vIG1hdGNoLCBtYXliZSB0aGVyZSB3aWxsIGJlIG9uZSBmdXJ0aGVyIGRvd24gaW4gdGhlIGNoaWxkIHRyZWUuXG4gICAgICBpZiAoY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KGNoaWxkLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShzaWJsaW5nLCB0eXBlcywgaG9zdEluc3RhbmNlcyk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBmb3VuZEhvc3RJbnN0YW5jZXMgPSBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpO1xuXG4gICAgaWYgKGZvdW5kSG9zdEluc3RhbmNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgd2UgZGlkbid0IGZpbmQgYW55IGhvc3QgY2hpbGRyZW4sIGZhbGxiYWNrIHRvIGNsb3Nlc3QgaG9zdCBwYXJlbnQuXG5cblxuICAgIHZhciBub2RlID0gZmliZXI7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCB0byByZWFjaCByb290IGZpcnN0LicpO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRDaGlsZEhvc3RJbnN0YW5jZXNGb3JGaWJlclNoYWxsb3dseShmaWJlciwgaG9zdEluc3RhbmNlcykge1xuICB7XG4gICAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmFsc2U7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIC8vIFdlIGdvdCBhIG1hdGNoLlxuICAgICAgICBmb3VuZEhvc3RJbnN0YW5jZXMgPSB0cnVlO1xuICAgICAgICBob3N0SW5zdGFuY2VzLmFkZChub2RlLnN0YXRlTm9kZSk7IC8vIFRoZXJlIG1heSBzdGlsbCBiZSBtb3JlLCBzbyBrZWVwIHNlYXJjaGluZy5cbiAgICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUgPT09IGZpYmVyKSB7XG4gICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSBmaWJlcikge1xuICAgICAgICAgIHJldHVybiBmb3VuZEhvc3RJbnN0YW5jZXM7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgaGFzQmFkTWFwUG9seWZpbGw7XG5cbntcbiAgaGFzQmFkTWFwUG9seWZpbGwgPSBmYWxzZTtcblxuICB0cnkge1xuICAgIHZhciBub25FeHRlbnNpYmxlT2JqZWN0ID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHt9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1uZXcgKi9cblxuICAgIG5ldyBNYXAoW1tub25FeHRlbnNpYmxlT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW25vbkV4dGVuc2libGVPYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVE9ETzogQ29uc2lkZXIgd2FybmluZyBhYm91dCBiYWQgcG9seWZpbGxzXG4gICAgaGFzQmFkTWFwUG9seWZpbGwgPSB0cnVlO1xuICB9XG59XG5cbnZhciBkZWJ1Z0NvdW50ZXIgPSAxO1xuXG5mdW5jdGlvbiBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyBJbnN0YW5jZVxuICB0aGlzLnRhZyA9IHRhZztcbiAgdGhpcy5rZXkgPSBrZXk7XG4gIHRoaXMuZWxlbWVudFR5cGUgPSBudWxsO1xuICB0aGlzLnR5cGUgPSBudWxsO1xuICB0aGlzLnN0YXRlTm9kZSA9IG51bGw7IC8vIEZpYmVyXG5cbiAgdGhpcy5yZXR1cm4gPSBudWxsO1xuICB0aGlzLmNoaWxkID0gbnVsbDtcbiAgdGhpcy5zaWJsaW5nID0gbnVsbDtcbiAgdGhpcy5pbmRleCA9IDA7XG4gIHRoaXMucmVmID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nUHJvcHMgPSBwZW5kaW5nUHJvcHM7XG4gIHRoaXMubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gIHRoaXMudXBkYXRlUXVldWUgPSBudWxsO1xuICB0aGlzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICB0aGlzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIHRoaXMubW9kZSA9IG1vZGU7IC8vIEVmZmVjdHNcblxuICB0aGlzLmZsYWdzID0gTm9GbGFncztcbiAgdGhpcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgdGhpcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFzdEVmZmVjdCA9IG51bGw7XG4gIHRoaXMubGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmNoaWxkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmFsdGVybmF0ZSA9IG51bGw7XG5cbiAge1xuICAgIC8vIE5vdGU6IFRoZSBmb2xsb3dpbmcgaXMgZG9uZSB0byBhdm9pZCBhIHY4IHBlcmZvcm1hbmNlIGNsaWZmLlxuICAgIC8vXG4gICAgLy8gSW5pdGlhbGl6aW5nIHRoZSBmaWVsZHMgYmVsb3cgdG8gc21pcyBhbmQgbGF0ZXIgdXBkYXRpbmcgdGhlbSB3aXRoXG4gICAgLy8gZG91YmxlIHZhbHVlcyB3aWxsIGNhdXNlIEZpYmVycyB0byBlbmQgdXAgaGF2aW5nIHNlcGFyYXRlIHNoYXBlcy5cbiAgICAvLyBUaGlzIGJlaGF2aW9yL2J1ZyBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggT2JqZWN0LnByZXZlbnRFeHRlbnNpb24oKS5cbiAgICAvLyBGb3J0dW5hdGVseSB0aGlzIG9ubHkgaW1wYWN0cyBERVYgYnVpbGRzLlxuICAgIC8vIFVuZm9ydHVuYXRlbHkgaXQgbWFrZXMgUmVhY3QgdW51c2FibHkgc2xvdyBmb3Igc29tZSBhcHBsaWNhdGlvbnMuXG4gICAgLy8gVG8gd29yayBhcm91bmQgdGhpcywgaW5pdGlhbGl6ZSB0aGUgZmllbGRzIGJlbG93IHdpdGggZG91Ymxlcy5cbiAgICAvL1xuICAgIC8vIExlYXJuIG1vcmUgYWJvdXQgdGhpcyBoZXJlOlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTQzNjVcbiAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD04NTM4XG4gICAgdGhpcy5hY3R1YWxEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy5hY3R1YWxTdGFydFRpbWUgPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gTnVtYmVyLk5hTjsgLy8gSXQncyBva2F5IHRvIHJlcGxhY2UgdGhlIGluaXRpYWwgZG91YmxlcyB3aXRoIHNtaXMgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uXG4gICAgLy8gVGhpcyB3b24ndCB0cmlnZ2VyIHRoZSBwZXJmb3JtYW5jZSBjbGlmZiBtZW50aW9uZWQgYWJvdmUsXG4gICAgLy8gYW5kIGl0IHNpbXBsaWZpZXMgb3RoZXIgcHJvZmlsZXIgY29kZSAoaW5jbHVkaW5nIERldlRvb2xzKS5cblxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgdGhpcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICB0aGlzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICB9XG5cbiAge1xuICAgIC8vIFRoaXMgaXNuJ3QgZGlyZWN0bHkgdXNlZCBidXQgaXMgaGFuZHkgZm9yIGRlYnVnZ2luZyBpbnRlcm5hbHM6XG4gICAgdGhpcy5fZGVidWdJRCA9IGRlYnVnQ291bnRlcisrO1xuICAgIHRoaXMuX2RlYnVnU291cmNlID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z093bmVyID0gbnVsbDtcbiAgICB0aGlzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGZhbHNlO1xuICAgIHRoaXMuX2RlYnVnSG9va1R5cGVzID0gbnVsbDtcblxuICAgIGlmICghaGFzQmFkTWFwUG9seWZpbGwgJiYgdHlwZW9mIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHRoaXMpO1xuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGEgY29uc3RydWN0b3IgZnVuY3Rpb24sIHJhdGhlciB0aGFuIGEgUE9KTyBjb25zdHJ1Y3Rvciwgc3RpbGxcbi8vIHBsZWFzZSBlbnN1cmUgd2UgZG8gdGhlIGZvbGxvd2luZzpcbi8vIDEpIE5vYm9keSBzaG91bGQgYWRkIGFueSBpbnN0YW5jZSBtZXRob2RzIG9uIHRoaXMuIEluc3RhbmNlIG1ldGhvZHMgY2FuIGJlXG4vLyAgICBtb3JlIGRpZmZpY3VsdCB0byBwcmVkaWN0IHdoZW4gdGhleSBnZXQgb3B0aW1pemVkIGFuZCB0aGV5IGFyZSBhbG1vc3Rcbi8vICAgIG5ldmVyIGlubGluZWQgcHJvcGVybHkgaW4gc3RhdGljIGNvbXBpbGVycy5cbi8vIDIpIE5vYm9keSBzaG91bGQgcmVseSBvbiBgaW5zdGFuY2VvZiBGaWJlcmAgZm9yIHR5cGUgdGVzdGluZy4gV2Ugc2hvdWxkXG4vLyAgICBhbHdheXMga25vdyB3aGVuIGl0IGlzIGEgZmliZXIuXG4vLyAzKSBXZSBtaWdodCB3YW50IHRvIGV4cGVyaW1lbnQgd2l0aCB1c2luZyBudW1lcmljIGtleXMgc2luY2UgdGhleSBhcmUgZWFzaWVyXG4vLyAgICB0byBvcHRpbWl6ZSBpbiBhIG5vbi1KSVQgZW52aXJvbm1lbnQuXG4vLyA0KSBXZSBjYW4gZWFzaWx5IGdvIGZyb20gYSBjb25zdHJ1Y3RvciB0byBhIGNyZWF0ZUZpYmVyIG9iamVjdCBsaXRlcmFsIGlmIHRoYXRcbi8vICAgIGlzIGZhc3Rlci5cbi8vIDUpIEl0IHNob3VsZCBiZSBlYXN5IHRvIHBvcnQgdGhpcyB0byBhIEMgc3RydWN0IGFuZCBrZWVwIGEgQyBpbXBsZW1lbnRhdGlvblxuLy8gICAgY29tcGF0aWJsZS5cblxuXG52YXIgY3JlYXRlRmliZXIgPSBmdW5jdGlvbiAodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSkge1xuICAvLyAkRmxvd0ZpeE1lOiB0aGUgc2hhcGVzIGFyZSBleGFjdCBoZXJlIGJ1dCBGbG93IGRvZXNuJ3QgbGlrZSBjb25zdHJ1Y3RvcnNcbiAgcmV0dXJuIG5ldyBGaWJlck5vZGUodGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBpc1NpbXBsZUZ1bmN0aW9uQ29tcG9uZW50KHR5cGUpIHtcbiAgcmV0dXJuIHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nICYmICFzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSAmJiB0eXBlLmRlZmF1bHRQcm9wcyA9PT0gdW5kZWZpbmVkO1xufVxuZnVuY3Rpb24gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNob3VsZENvbnN0cnVjdCQxKENvbXBvbmVudCkgPyBDbGFzc0NvbXBvbmVudCA6IEZ1bmN0aW9uQ29tcG9uZW50O1xuICB9IGVsc2UgaWYgKENvbXBvbmVudCAhPT0gdW5kZWZpbmVkICYmIENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IENvbXBvbmVudC4kJHR5cGVvZjtcblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSkge1xuICAgICAgcmV0dXJuIEZvcndhcmRSZWY7XG4gICAgfVxuXG4gICAgaWYgKCQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpIHtcbiAgICAgIHJldHVybiBNZW1vQ29tcG9uZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBJbmRldGVybWluYXRlQ29tcG9uZW50O1xufSAvLyBUaGlzIGlzIHVzZWQgdG8gY3JlYXRlIGFuIGFsdGVybmF0ZSBmaWJlciB0byBkbyB3b3JrIG9uLlxuXG5mdW5jdGlvbiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBwZW5kaW5nUHJvcHMpIHtcbiAgdmFyIHdvcmtJblByb2dyZXNzID0gY3VycmVudC5hbHRlcm5hdGU7XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzID09PSBudWxsKSB7XG4gICAgLy8gV2UgdXNlIGEgZG91YmxlIGJ1ZmZlcmluZyBwb29saW5nIHRlY2huaXF1ZSBiZWNhdXNlIHdlIGtub3cgdGhhdCB3ZSdsbFxuICAgIC8vIG9ubHkgZXZlciBuZWVkIGF0IG1vc3QgdHdvIHZlcnNpb25zIG9mIGEgdHJlZS4gV2UgcG9vbCB0aGUgXCJvdGhlclwiIHVudXNlZFxuICAgIC8vIG5vZGUgdGhhdCB3ZSdyZSBmcmVlIHRvIHJldXNlLiBUaGlzIGlzIGxhemlseSBjcmVhdGVkIHRvIGF2b2lkIGFsbG9jYXRpbmdcbiAgICAvLyBleHRyYSBvYmplY3RzIGZvciB0aGluZ3MgdGhhdCBhcmUgbmV2ZXIgdXBkYXRlZC4gSXQgYWxzbyBhbGxvdyB1cyB0b1xuICAgIC8vIHJlY2xhaW0gdGhlIGV4dHJhIG1lbW9yeSBpZiBuZWVkZWQuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSBjcmVhdGVGaWJlcihjdXJyZW50LnRhZywgcGVuZGluZ1Byb3BzLCBjdXJyZW50LmtleSwgY3VycmVudC5tb2RlKTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9IGN1cnJlbnQuZWxlbWVudFR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjdXJyZW50LnN0YXRlTm9kZTtcblxuICAgIHtcbiAgICAgIC8vIERFVi1vbmx5IGZpZWxkc1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgPSBjdXJyZW50Ll9kZWJ1Z0lEO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnU291cmNlID0gY3VycmVudC5fZGVidWdTb3VyY2U7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdPd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBjdXJyZW50Ll9kZWJ1Z0hvb2tUeXBlcztcbiAgICB9XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBjdXJyZW50O1xuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gd29ya0luUHJvZ3Jlc3M7XG4gIH0gZWxzZSB7XG4gICAgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGFsdGVybmF0ZS5cbiAgICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZy5cblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gTm9GbGFnczsgLy8gVGhlIGVmZmVjdCBsaXN0IGlzIG5vIGxvbmdlciB2YWxpZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgcmVzZXQsIHJhdGhlciB0aGFuIGNvcHksIGFjdHVhbER1cmF0aW9uICYgYWN0dWFsU3RhcnRUaW1lLlxuICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aW1lIGZyb20gZW5kbGVzc2x5IGFjY3VtdWxhdGluZyBpbiBuZXcgY29tbWl0cy5cbiAgICAgIC8vIFRoaXMgaGFzIHRoZSBkb3duc2lkZSBvZiByZXNldHRpbmcgdmFsdWVzIGZvciBkaWZmZXJlbnQgcHJpb3JpdHkgcmVuZGVycyxcbiAgICAgIC8vIEJ1dCB3b3JrcyBmb3IgeWllbGRpbmcgKHRoZSBjb21tb24gY2FzZSkgYW5kIHNob3VsZCBzdXBwb3J0IHJlc3VtaW5nLlxuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgLy8gaXQgY2Fubm90IGJlIHNoYXJlZCB3aXRoIHRoZSBjdXJyZW50IGZpYmVyLlxuXG4gIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgIGxhbmVzOiBjdXJyZW50RGVwZW5kZW5jaWVzLmxhbmVzLFxuICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgfTsgLy8gVGhlc2Ugd2lsbCBiZSBvdmVycmlkZGVuIGR1cmluZyB0aGUgcGFyZW50J3MgcmVjb25jaWxpYXRpb25cblxuICB3b3JrSW5Qcm9ncmVzcy5zaWJsaW5nID0gY3VycmVudC5zaWJsaW5nO1xuICB3b3JrSW5Qcm9ncmVzcy5pbmRleCA9IGN1cnJlbnQuaW5kZXg7XG4gIHdvcmtJblByb2dyZXNzLnJlZiA9IGN1cnJlbnQucmVmO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50LnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnTmVlZHNSZW1vdW50ID0gY3VycmVudC5fZGVidWdOZWVkc1JlbW91bnQ7XG5cbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVDbGFzc0ZvckhvdFJlbG9hZGluZyhjdXJyZW50LnR5cGUpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xufSAvLyBVc2VkIHRvIHJldXNlIGEgRmliZXIgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0V29ya0luUHJvZ3Jlc3Mod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgcmVzZXRzIHRoZSBGaWJlciB0byB3aGF0IGNyZWF0ZUZpYmVyIG9yIGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkXG4gIC8vIGhhdmUgc2V0IHRoZSB2YWx1ZXMgdG8gYmVmb3JlIGR1cmluZyB0aGUgZmlyc3QgcGFzcy4gSWRlYWxseSB0aGlzIHdvdWxkbid0XG4gIC8vIGJlIG5lY2Vzc2FyeSBidXQgdW5mb3J0dW5hdGVseSBtYW55IGNvZGUgcGF0aHMgcmVhZHMgZnJvbSB0aGUgd29ya0luUHJvZ3Jlc3NcbiAgLy8gd2hlbiB0aGV5IHNob3VsZCBiZSByZWFkaW5nIGZyb20gY3VycmVudCBhbmQgd3JpdGluZyB0byB3b3JrSW5Qcm9ncmVzcy5cbiAgLy8gV2UgYXNzdW1lIHBlbmRpbmdQcm9wcywgaW5kZXgsIGtleSwgcmVmLCByZXR1cm4gYXJlIHN0aWxsIHVudG91Y2hlZCB0b1xuICAvLyBhdm9pZCBkb2luZyBhbm90aGVyIHJlY29uY2lsaWF0aW9uLlxuICAvLyBSZXNldCB0aGUgZWZmZWN0IHRhZyBidXQga2VlcCBhbnkgUGxhY2VtZW50IHRhZ3MsIHNpbmNlIHRoYXQncyBzb21ldGhpbmdcbiAgLy8gdGhhdCBjaGlsZCBmaWJlciBpcyBzZXR0aW5nLCBub3QgdGhlIHJlY29uY2lsaWF0aW9uLlxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSBQbGFjZW1lbnQ7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgd29ya0luUHJvZ3Jlc3MubmV4dEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUmVzZXQgdG8gY3JlYXRlRmliZXIncyBpbml0aWFsIHZhbHVlcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBudWxsO1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSAwO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IDA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFJlc2V0IHRvIHRoZSBjbG9uZWQgdmFsdWVzIHRoYXQgY3JlYXRlV29ya0luUHJvZ3Jlc3Mgd291bGQndmUuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IGN1cnJlbnQuY2hpbGRMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIE5lZWRlZCBiZWNhdXNlIEJsb2NrcyBzdG9yZSBkYXRhIG9uIHR5cGUuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gY3VycmVudC50eXBlOyAvLyBDbG9uZSB0aGUgZGVwZW5kZW5jaWVzIG9iamVjdC4gVGhpcyBpcyBtdXRhdGVkIGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLCBzb1xuICAgIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICAgIHZhciBjdXJyZW50RGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudERlcGVuZGVuY2llcyA9PT0gbnVsbCA/IG51bGwgOiB7XG4gICAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICAgIGZpcnN0Q29udGV4dDogY3VycmVudERlcGVuZGVuY2llcy5maXJzdENvbnRleHRcbiAgICB9O1xuXG4gICAge1xuICAgICAgLy8gTm90ZTogV2UgZG9uJ3QgcmVzZXQgdGhlIGFjdHVhbFRpbWUgY291bnRzLiBJdCdzIHVzZWZ1bCB0byBhY2N1bXVsYXRlXG4gICAgICAvLyBhY3R1YWwgdGltZSBhY3Jvc3MgbXVsdGlwbGUgcmVuZGVyIHBhc3Nlcy5cbiAgICAgIHdvcmtJblByb2dyZXNzLnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50LnNlbGZCYXNlRHVyYXRpb247XG4gICAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUhvc3RSb290RmliZXIodGFnKSB7XG4gIHZhciBtb2RlO1xuXG4gIGlmICh0YWcgPT09IENvbmN1cnJlbnRSb290KSB7XG4gICAgbW9kZSA9IENvbmN1cnJlbnRNb2RlIHwgQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIGlmICh0YWcgPT09IEJsb2NraW5nUm9vdCkge1xuICAgIG1vZGUgPSBCbG9ja2luZ01vZGUgfCBTdHJpY3RNb2RlO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSBOb01vZGU7XG4gIH1cblxuICBpZiAoIGlzRGV2VG9vbHNQcmVzZW50KSB7XG4gICAgLy8gQWx3YXlzIGNvbGxlY3QgcHJvZmlsZSB0aW1pbmdzIHdoZW4gRGV2VG9vbHMgYXJlIHByZXNlbnQuXG4gICAgLy8gVGhpcyBlbmFibGVzIERldlRvb2xzIHRvIHN0YXJ0IGNhcHR1cmluZyB0aW1pbmcgYXQgYW55IHBvaW504oCTXG4gICAgLy8gV2l0aG91dCBzb21lIG5vZGVzIGluIHRoZSB0cmVlIGhhdmluZyBlbXB0eSBiYXNlIHRpbWVzLlxuICAgIG1vZGUgfD0gUHJvZmlsZU1vZGU7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlRmliZXIoSG9zdFJvb3QsIG51bGwsIG51bGwsIG1vZGUpO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIC8vIFJlYWN0JEVsZW1lbnRUeXBlXG5rZXksIHBlbmRpbmdQcm9wcywgb3duZXIsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlclRhZyA9IEluZGV0ZXJtaW5hdGVDb21wb25lbnQ7IC8vIFRoZSByZXNvbHZlZCB0eXBlIGlzIHNldCBpZiB3ZSBrbm93IHdoYXQgdGhlIGZpbmFsIHR5cGUgd2lsbCBiZS4gSS5lLiBpdCdzIG5vdCBsYXp5LlxuXG4gIHZhciByZXNvbHZlZFR5cGUgPSB0eXBlO1xuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChzaG91bGRDb25zdHJ1Y3QkMSh0eXBlKSkge1xuICAgICAgZmliZXJUYWcgPSBDbGFzc0NvbXBvbmVudDtcblxuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICByZXNvbHZlZFR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgZmliZXJUYWcgPSBIb3N0Q29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIGdldFRhZzogc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZSQUdNRU5UX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21GcmFnbWVudChwZW5kaW5nUHJvcHMuY2hpbGRyZW4sIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFOlxuICAgICAgICBmaWJlclRhZyA9IE1vZGU7XG4gICAgICAgIG1vZGUgfD0gRGVidWdUcmFjaW5nTW9kZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU1RSSUNUX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IFN0cmljdE1vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX09GRlNDUkVFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfU0NPUEVfVFlQRTpcblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBDb250ZXh0UHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBjb25zdW1lclxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dENvbnN1bWVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBGb3J3YXJkUmVmO1xuXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZvcndhcmRSZWZGb3JIb3RSZWxvYWRpbmcocmVzb2x2ZWRUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBNZW1vQ29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IExhenlDb21wb25lbnQ7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRUeXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQmxvY2s7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBcIiArICduYW1lZCBpbXBvcnRzLic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25lck5hbWUgPSBvd25lciA/IGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkVsZW1lbnQgdHlwZSBpcyBpbnZhbGlkOiBleHBlY3RlZCBhIHN0cmluZyAoZm9yIGJ1aWx0LWluIGNvbXBvbmVudHMpIG9yIGEgY2xhc3MvZnVuY3Rpb24gKGZvciBjb21wb3NpdGUgY29tcG9uZW50cykgYnV0IGdvdDogXCIgKyAodHlwZSA9PSBudWxsID8gdHlwZSA6IHR5cGVvZiB0eXBlKSArIFwiLlwiICsgaW5mbyApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKGZpYmVyVGFnLCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gdHlwZTtcbiAgZmliZXIudHlwZSA9IHJlc29sdmVkVHlwZTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBvd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUVsZW1lbnQoZWxlbWVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIG93bmVyID0gbnVsbDtcblxuICB7XG4gICAgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBlbGVtZW50LnByb3BzO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHModHlwZSwga2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcyk7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZWxlbWVudHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoRnJhZ21lbnQsIGVsZW1lbnRzLCBrZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVByb2ZpbGVyKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB7XG4gICAgaWYgKHR5cGVvZiBwZW5kaW5nUHJvcHMuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBlcnJvcignUHJvZmlsZXIgbXVzdCBzcGVjaWZ5IGFuIFwiaWRcIiBhcyBhIHByb3AnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihQcm9maWxlciwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUgfCBQcm9maWxlTW9kZSk7IC8vIFRPRE86IFRoZSBQcm9maWxlciBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuXG4gIHtcbiAgICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgICBlZmZlY3REdXJhdGlvbjogMCxcbiAgICAgIHBhc3NpdmVFZmZlY3REdXJhdGlvbjogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgU3VzcGVuc2VDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gIC8vIFRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgaW4gZ2V0Q29tcG9uZW50TmFtZSBzbyB0aGF0IGl0IHJlbGllcyBvbiB0aGUgdGFnXG4gIC8vIGluc3RlYWQuXG5cbiAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2VMaXN0KHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihTdXNwZW5zZUxpc3RDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTtcblxuICB7XG4gICAgLy8gVE9ETzogVGhlIFN1c3BlbnNlTGlzdENvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAgIC8vIGluc3RlYWQuXG4gICAgZmliZXIudHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKE9mZnNjcmVlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgT2Zmc2NyZWVuQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21MZWdhY3lIaWRkZW4ocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKExlZ2FjeUhpZGRlbkNvbXBvbmVudCwgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpOyAvLyBUT0RPOiBUaGUgTGVnYWN5SGlkZGVuIGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIHtcbiAgICBmaWJlci50eXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVRleHQoY29udGVudCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFRleHQsIGNvbnRlbnQsIG51bGwsIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdENvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTsgLy8gVE9ETzogVGhlc2Ugc2hvdWxkIG5vdCBuZWVkIGEgdHlwZS5cblxuICBmaWJlci5lbGVtZW50VHlwZSA9ICdERUxFVEVEJztcbiAgZmliZXIudHlwZSA9ICdERUxFVEVEJztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgbW9kZSwgbGFuZXMpIHtcbiAgdmFyIHBlbmRpbmdQcm9wcyA9IHBvcnRhbC5jaGlsZHJlbiAhPT0gbnVsbCA/IHBvcnRhbC5jaGlsZHJlbiA6IFtdO1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihIb3N0UG9ydGFsLCBwZW5kaW5nUHJvcHMsIHBvcnRhbC5rZXksIG1vZGUpO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICBmaWJlci5zdGF0ZU5vZGUgPSB7XG4gICAgY29udGFpbmVySW5mbzogcG9ydGFsLmNvbnRhaW5lckluZm8sXG4gICAgcGVuZGluZ0NoaWxkcmVuOiBudWxsLFxuICAgIC8vIFVzZWQgYnkgcGVyc2lzdGVudCB1cGRhdGVzXG4gICAgaW1wbGVtZW50YXRpb246IHBvcnRhbC5pbXBsZW1lbnRhdGlvblxuICB9O1xuICByZXR1cm4gZmliZXI7XG59IC8vIFVzZWQgZm9yIHN0YXNoaW5nIFdJUCBwcm9wZXJ0aWVzIHRvIHJlcGxheSBmYWlsZWQgd29yayBpbiBERVYuXG5cbmZ1bmN0aW9uIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHRhcmdldCwgc291cmNlKSB7XG4gIGlmICh0YXJnZXQgPT09IG51bGwpIHtcbiAgICAvLyBUaGlzIEZpYmVyJ3MgaW5pdGlhbCBwcm9wZXJ0aWVzIHdpbGwgYWx3YXlzIGJlIG92ZXJ3cml0dGVuLlxuICAgIC8vIFdlIG9ubHkgdXNlIGEgRmliZXIgdG8gZW5zdXJlIHRoZSBzYW1lIGhpZGRlbiBjbGFzcyBzbyBERVYgaXNuJ3Qgc2xvdy5cbiAgICB0YXJnZXQgPSBjcmVhdGVGaWJlcihJbmRldGVybWluYXRlQ29tcG9uZW50LCBudWxsLCBudWxsLCBOb01vZGUpO1xuICB9IC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSB3cml0dGVuIGFzIGEgbGlzdCBvZiBhbGwgcHJvcGVydGllcy5cbiAgLy8gV2UgdHJpZWQgdG8gdXNlIE9iamVjdC5hc3NpZ24oKSBpbnN0ZWFkIGJ1dCB0aGlzIGlzIGNhbGxlZCBpblxuICAvLyB0aGUgaG90dGVzdCBwYXRoLCBhbmQgT2JqZWN0LmFzc2lnbigpIHdhcyB0b28gc2xvdzpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwMlxuICAvLyBUaGlzIGNvZGUgaXMgREVWLW9ubHkgc28gc2l6ZSBpcyBub3QgYSBjb25jZXJuLlxuXG5cbiAgdGFyZ2V0LnRhZyA9IHNvdXJjZS50YWc7XG4gIHRhcmdldC5rZXkgPSBzb3VyY2Uua2V5O1xuICB0YXJnZXQuZWxlbWVudFR5cGUgPSBzb3VyY2UuZWxlbWVudFR5cGU7XG4gIHRhcmdldC50eXBlID0gc291cmNlLnR5cGU7XG4gIHRhcmdldC5zdGF0ZU5vZGUgPSBzb3VyY2Uuc3RhdGVOb2RlO1xuICB0YXJnZXQucmV0dXJuID0gc291cmNlLnJldHVybjtcbiAgdGFyZ2V0LmNoaWxkID0gc291cmNlLmNoaWxkO1xuICB0YXJnZXQuc2libGluZyA9IHNvdXJjZS5zaWJsaW5nO1xuICB0YXJnZXQuaW5kZXggPSBzb3VyY2UuaW5kZXg7XG4gIHRhcmdldC5yZWYgPSBzb3VyY2UucmVmO1xuICB0YXJnZXQucGVuZGluZ1Byb3BzID0gc291cmNlLnBlbmRpbmdQcm9wcztcbiAgdGFyZ2V0Lm1lbW9pemVkUHJvcHMgPSBzb3VyY2UubWVtb2l6ZWRQcm9wcztcbiAgdGFyZ2V0LnVwZGF0ZVF1ZXVlID0gc291cmNlLnVwZGF0ZVF1ZXVlO1xuICB0YXJnZXQubWVtb2l6ZWRTdGF0ZSA9IHNvdXJjZS5tZW1vaXplZFN0YXRlO1xuICB0YXJnZXQuZGVwZW5kZW5jaWVzID0gc291cmNlLmRlcGVuZGVuY2llcztcbiAgdGFyZ2V0Lm1vZGUgPSBzb3VyY2UubW9kZTtcbiAgdGFyZ2V0LmZsYWdzID0gc291cmNlLmZsYWdzO1xuICB0YXJnZXQubmV4dEVmZmVjdCA9IHNvdXJjZS5uZXh0RWZmZWN0O1xuICB0YXJnZXQuZmlyc3RFZmZlY3QgPSBzb3VyY2UuZmlyc3RFZmZlY3Q7XG4gIHRhcmdldC5sYXN0RWZmZWN0ID0gc291cmNlLmxhc3RFZmZlY3Q7XG4gIHRhcmdldC5sYW5lcyA9IHNvdXJjZS5sYW5lcztcbiAgdGFyZ2V0LmNoaWxkTGFuZXMgPSBzb3VyY2UuY2hpbGRMYW5lcztcbiAgdGFyZ2V0LmFsdGVybmF0ZSA9IHNvdXJjZS5hbHRlcm5hdGU7XG5cbiAge1xuICAgIHRhcmdldC5hY3R1YWxEdXJhdGlvbiA9IHNvdXJjZS5hY3R1YWxEdXJhdGlvbjtcbiAgICB0YXJnZXQuYWN0dWFsU3RhcnRUaW1lID0gc291cmNlLmFjdHVhbFN0YXJ0VGltZTtcbiAgICB0YXJnZXQuc2VsZkJhc2VEdXJhdGlvbiA9IHNvdXJjZS5zZWxmQmFzZUR1cmF0aW9uO1xuICAgIHRhcmdldC50cmVlQmFzZUR1cmF0aW9uID0gc291cmNlLnRyZWVCYXNlRHVyYXRpb247XG4gIH1cblxuICB0YXJnZXQuX2RlYnVnSUQgPSBzb3VyY2UuX2RlYnVnSUQ7XG4gIHRhcmdldC5fZGVidWdTb3VyY2UgPSBzb3VyY2UuX2RlYnVnU291cmNlO1xuICB0YXJnZXQuX2RlYnVnT3duZXIgPSBzb3VyY2UuX2RlYnVnT3duZXI7XG4gIHRhcmdldC5fZGVidWdOZWVkc1JlbW91bnQgPSBzb3VyY2UuX2RlYnVnTmVlZHNSZW1vdW50O1xuICB0YXJnZXQuX2RlYnVnSG9va1R5cGVzID0gc291cmNlLl9kZWJ1Z0hvb2tUeXBlcztcbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMuY29udGFpbmVySW5mbyA9IGNvbnRhaW5lckluZm87XG4gIHRoaXMucGVuZGluZ0NoaWxkcmVuID0gbnVsbDtcbiAgdGhpcy5jdXJyZW50ID0gbnVsbDtcbiAgdGhpcy5waW5nQ2FjaGUgPSBudWxsO1xuICB0aGlzLmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHRoaXMudGltZW91dEhhbmRsZSA9IG5vVGltZW91dDtcbiAgdGhpcy5jb250ZXh0ID0gbnVsbDtcbiAgdGhpcy5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gIHRoaXMuaHlkcmF0ZSA9IGh5ZHJhdGU7XG4gIHRoaXMuY2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgdGhpcy5jYWxsYmFja1ByaW9yaXR5ID0gTm9MYW5lUHJpb3JpdHk7XG4gIHRoaXMuZXZlbnRUaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9MYW5lcyk7XG4gIHRoaXMuZXhwaXJhdGlvblRpbWVzID0gY3JlYXRlTGFuZU1hcChOb1RpbWVzdGFtcCk7XG4gIHRoaXMucGVuZGluZ0xhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5zdXNwZW5kZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMucGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmV4cGlyZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMubXV0YWJsZVJlYWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuZW50YW5nbGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlbWVudHMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuXG4gIHtcbiAgICB0aGlzLm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIHRoaXMuaW50ZXJhY3Rpb25UaHJlYWRJRCA9IHRyYWNpbmcudW5zdGFibGVfZ2V0VGhyZWFkSUQoKTtcbiAgICB0aGlzLm1lbW9pemVkSW50ZXJhY3Rpb25zID0gbmV3IFNldCgpO1xuICAgIHRoaXMucGVuZGluZ0ludGVyYWN0aW9uTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlIEJsb2NraW5nUm9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVCbG9ja2luZ1Jvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIENvbmN1cnJlbnRSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIExlZ2FjeVJvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlTGVnYWN5Um9vdCgpJztcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyUm9vdChjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICB2YXIgcm9vdCA9IG5ldyBGaWJlclJvb3ROb2RlKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG4gIC8vIHN0YXRlTm9kZSBpcyBhbnkuXG5cblxuICB2YXIgdW5pbml0aWFsaXplZEZpYmVyID0gY3JlYXRlSG9zdFJvb3RGaWJlcih0YWcpO1xuICByb290LmN1cnJlbnQgPSB1bmluaXRpYWxpemVkRmliZXI7XG4gIHVuaW5pdGlhbGl6ZWRGaWJlci5zdGF0ZU5vZGUgPSByb290O1xuICBpbml0aWFsaXplVXBkYXRlUXVldWUodW5pbml0aWFsaXplZEZpYmVyKTtcbiAgcmV0dXJuIHJvb3Q7XG59XG5cbi8vIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSB2ZXJzaW9uIHVzZWQgZm9yIHNlcnZlciByZW5kZXJpbmcgbWF0Y2hlcyB0aGUgb25lXG4vLyB0aGF0IGlzIGV2ZW50dWFsbHkgcmVhZCBkdXJpbmcgaHlkcmF0aW9uLlxuLy8gSWYgdGhleSBkb24ndCBtYXRjaCB0aGVyZSdzIGEgcG90ZW50aWFsIHRlYXIgYW5kIGEgZnVsbCBkZW9wdCByZW5kZXIgaXMgcmVxdWlyZWQuXG5cbmZ1bmN0aW9uIHJlZ2lzdGVyTXV0YWJsZVNvdXJjZUZvckh5ZHJhdGlvbihyb290LCBtdXRhYmxlU291cmNlKSB7XG4gIHZhciBnZXRWZXJzaW9uID0gbXV0YWJsZVNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKG11dGFibGVTb3VyY2UuX3NvdXJjZSk7IC8vIFRPRE8gQ2xlYXIgdGhpcyBkYXRhIG9uY2UgYWxsIHBlbmRpbmcgaHlkcmF0aW9uIHdvcmsgaXMgZmluaXNoZWQuXG4gIC8vIFJldGFpbmluZyBpdCBmb3JldmVyIG1heSBpbnRlcmZlcmUgd2l0aCBHQy5cblxuICBpZiAocm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID09IG51bGwpIHtcbiAgICByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSBbbXV0YWJsZVNvdXJjZSwgdmVyc2lvbl07XG4gIH0gZWxzZSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLnB1c2gobXV0YWJsZVNvdXJjZSwgdmVyc2lvbik7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXJJbmZvLCAvLyBUT0RPOiBmaWd1cmUgb3V0IHRoZSBBUEkgZm9yIGNyb3NzLXJlbmRlcmVyIGltcGxlbWVudGF0aW9uLlxuaW1wbGVtZW50YXRpb24pIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAzICYmIGFyZ3VtZW50c1szXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzNdIDogbnVsbDtcbiAgcmV0dXJuIHtcbiAgICAvLyBUaGlzIHRhZyBhbGxvdyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgUG9ydGFsXG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BPUlRBTF9UWVBFLFxuICAgIGtleToga2V5ID09IG51bGwgPyBudWxsIDogJycgKyBrZXksXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lckluZm86IGNvbnRhaW5lckluZm8sXG4gICAgaW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uXG4gIH07XG59XG5cbnZhciBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzO1xudmFyIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlO1xuXG57XG4gIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGUgPSB7fTtcbn1cblxuZnVuY3Rpb24gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KSB7XG4gIGlmICghcGFyZW50Q29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgfVxuXG4gIHZhciBmaWJlciA9IGdldChwYXJlbnRDb21wb25lbnQpO1xuICB2YXIgcGFyZW50Q29udGV4dCA9IGZpbmRDdXJyZW50VW5tYXNrZWRDb250ZXh0KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgIHZhciBDb21wb25lbnQgPSBmaWJlci50eXBlO1xuXG4gICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgIHJldHVybiBwcm9jZXNzQ2hpbGRDb250ZXh0KGZpYmVyLCBDb21wb25lbnQsIHBhcmVudENvbnRleHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnRDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50LCBtZXRob2ROYW1lKSB7XG4gIHtcbiAgICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICAgIGlmIChmaWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbXBvbmVudC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVuYWJsZSB0byBmaW5kIG5vZGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkFyZ3VtZW50IGFwcGVhcnMgdG8gbm90IGJlIGEgUmVhY3RDb21wb25lbnQuIEtleXM6IFwiICsgT2JqZWN0LmtleXMoY29tcG9uZW50KSApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaG9zdEZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZGlkV2FybkFib3V0RmluZE5vZGVJblN0cmljdE1vZGVbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuICAgICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoaG9zdEZpYmVyKTtcblxuICAgICAgICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIGlzIGluc2lkZSBTdHJpY3RNb2RlLiAnICsgJ0luc3RlYWQsIGFkZCBhIHJlZiBkaXJlY3RseSB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byByZWZlcmVuY2UuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1maW5kLW5vZGUnLCBtZXRob2ROYW1lLCBtZXRob2ROYW1lLCBjb21wb25lbnROYW1lKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3IoJyVzIGlzIGRlcHJlY2F0ZWQgaW4gU3RyaWN0TW9kZS4gJyArICclcyB3YXMgcGFzc2VkIGFuIGluc3RhbmNlIG9mICVzIHdoaWNoIHJlbmRlcnMgU3RyaWN0TW9kZSBjaGlsZHJlbi4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIC8vIElkZWFsbHkgdGhpcyBzaG91bGQgcmVzZXQgdG8gcHJldmlvdXMgYnV0IHRoaXMgc2hvdWxkbid0IGJlIGNhbGxlZCBpblxuICAgICAgICAgIC8vIHJlbmRlciBhbmQgdGhlcmUncyBhbm90aGVyIHdhcm5pbmcgZm9yIHRoYXQgYW55d2F5LlxuICAgICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgICBzZXRDdXJyZW50RmliZXIocHJldmlvdXNGaWJlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSwgaHlkcmF0aW9uQ2FsbGJhY2tzKSB7XG4gIHJldHVybiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRhaW5lcihlbGVtZW50LCBjb250YWluZXIsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spIHtcbiAge1xuICAgIG9uU2NoZWR1bGVSb290KGNvbnRhaW5lciwgZWxlbWVudCk7XG4gIH1cblxuICB2YXIgY3VycmVudCQxID0gY29udGFpbmVyLmN1cnJlbnQ7XG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG5cbiAge1xuICAgIC8vICRGbG93RXhwZWN0ZWRFcnJvciAtIGplc3QgaXNuJ3QgYSBnbG9iYWwsIGFuZCBpc24ndCByZWNvZ25pemVkIG91dHNpZGUgb2YgdGVzdHNcbiAgICBpZiAoJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqZXN0KSB7XG4gICAgICB3YXJuSWZVbm1vY2tlZFNjaGVkdWxlcihjdXJyZW50JDEpO1xuICAgICAgd2FybklmTm90U2NvcGVkV2l0aE1hdGNoaW5nQWN0KGN1cnJlbnQkMSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShjdXJyZW50JDEpO1xuXG4gIHZhciBjb250ZXh0ID0gZ2V0Q29udGV4dEZvclN1YnRyZWUocGFyZW50Q29tcG9uZW50KTtcblxuICBpZiAoY29udGFpbmVyLmNvbnRleHQgPT09IG51bGwpIHtcbiAgICBjb250YWluZXIuY29udGV4dCA9IGNvbnRleHQ7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLnBlbmRpbmdDb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHtcbiAgICBpZiAoaXNSZW5kZXJpbmcgJiYgY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcykge1xuICAgICAgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcyA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdSZW5kZXIgbWV0aG9kcyBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZTsgJyArICd0cmlnZ2VyaW5nIG5lc3RlZCBjb21wb25lbnQgdXBkYXRlcyBmcm9tIHJlbmRlciBpcyBub3QgYWxsb3dlZC4gJyArICdJZiBuZWNlc3NhcnksIHRyaWdnZXIgbmVzdGVkIHVwZGF0ZXMgaW4gY29tcG9uZW50RGlkVXBkYXRlLlxcblxcbicgKyAnQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgJXMuJywgZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50LnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpOyAvLyBDYXV0aW9uOiBSZWFjdCBEZXZUb29scyBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByb3BlcnR5XG4gIC8vIGJlaW5nIGNhbGxlZCBcImVsZW1lbnRcIi5cblxuICB1cGRhdGUucGF5bG9hZCA9IHtcbiAgICBlbGVtZW50OiBlbGVtZW50XG4gIH07XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjYWxsYmFjaztcblxuICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogRXhwZWN0ZWQgdGhlIGxhc3Qgb3B0aW9uYWwgYGNhbGxiYWNrYCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuXG4gIGVucXVldWVVcGRhdGUoY3VycmVudCQxLCB1cGRhdGUpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoY3VycmVudCQxLCBsYW5lLCBldmVudFRpbWUpO1xuICByZXR1cm4gbGFuZTtcbn1cbmZ1bmN0aW9uIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShjb250YWluZXIpIHtcbiAgdmFyIGNvbnRhaW5lckZpYmVyID0gY29udGFpbmVyLmN1cnJlbnQ7XG5cbiAgaWYgKCFjb250YWluZXJGaWJlci5jaGlsZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc3dpdGNoIChjb250YWluZXJGaWJlci5jaGlsZC50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICByZXR1cm4gZ2V0UHVibGljSW5zdGFuY2UoY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gY29udGFpbmVyRmliZXIuY2hpbGQuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpIHtcbiAgdmFyIHN1c3BlbnNlU3RhdGUgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChzdXNwZW5zZVN0YXRlICE9PSBudWxsICYmIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgIHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lID0gaGlnaGVyUHJpb3JpdHlMYW5lKHN1c3BlbnNlU3RhdGUucmV0cnlMYW5lLCByZXRyeUxhbmUpO1xuICB9XG59IC8vIEluY3JlYXNlcyB0aGUgcHJpb3JpdHkgb2YgdGhlbm5hYmxlcyB3aGVuIHRoZXkgcmVzb2x2ZSB3aXRoaW4gdGhpcyBib3VuZGFyeS5cblxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIG1hcmtSZXRyeUxhbmVJbXBsKGZpYmVyLCByZXRyeUxhbmUpO1xuICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gIGlmIChhbHRlcm5hdGUpIHtcbiAgICBtYXJrUmV0cnlMYW5lSW1wbChhbHRlcm5hdGUsIHJldHJ5TGFuZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBJbnB1dERpc2NyZXRlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBhbmQgdGhleSBzaG91bGQgbm90IHN1c3BlbmQgb24gSS9PLFxuICAgIC8vIHNpbmNlIHlvdSBoYXZlIHRvIHdyYXAgYW55dGhpbmcgdGhhdCBtaWdodCBzdXNwZW5kIGluXG4gICAgLy8gU3VzcGVuc2UuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKGZpYmVyKSB7XG4gIGlmIChmaWJlci50YWcgIT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgaWdub3JlIEhvc3RSb290cyBoZXJlIGJlY2F1c2Ugd2UgY2FuJ3QgaW5jcmVhc2VcbiAgICAvLyB0aGVpciBwcmlvcml0eSBvdGhlciB0aGFuIHN5bmNocm9ub3VzbHkgZmx1c2ggaXQuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gcnVuV2l0aFByaW9yaXR5JDIocHJpb3JpdHksIGZuKSB7XG5cbiAgdHJ5IHtcbiAgICBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KHByaW9yaXR5KTtcbiAgICByZXR1cm4gZm4oKTtcbiAgfSBmaW5hbGx5IHtcbiAgfVxufVxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGhvc3RGaWJlci50YWcgPT09IEZ1bmRhbWVudGFsQ29tcG9uZW50KSB7XG4gICAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGUuaW5zdGFuY2U7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxudmFyIHNob3VsZFN1c3BlbmRJbXBsID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIHNob3VsZFN1c3BlbmQoZmliZXIpIHtcbiAgcmV0dXJuIHNob3VsZFN1c3BlbmRJbXBsKGZpYmVyKTtcbn1cbnZhciBvdmVycmlkZUhvb2tTdGF0ZSA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHMgPSBudWxsO1xudmFyIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IG51bGw7XG52YXIgc2NoZWR1bGVVcGRhdGUgPSBudWxsO1xudmFyIHNldFN1c3BlbnNlSGFuZGxlciA9IG51bGw7XG5cbntcbiAgdmFyIGNvcHlXaXRoRGVsZXRlSW1wbCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIGluZGV4KSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKGtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdXBkYXRlZDtcbiAgICB9IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuXG4gICAgdXBkYXRlZFtrZXldID0gY29weVdpdGhEZWxldGVJbXBsKG9ialtrZXldLCBwYXRoLCBpbmRleCArIDEpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aERlbGV0ZSA9IGZ1bmN0aW9uIChvYmosIHBhdGgpIHtcbiAgICByZXR1cm4gY29weVdpdGhEZWxldGVJbXBsKG9iaiwgcGF0aCwgMCk7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoUmVuYW1lSW1wbCA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIGluZGV4KSB7XG4gICAgdmFyIG9sZEtleSA9IG9sZFBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopO1xuXG4gICAgaWYgKGluZGV4ICsgMSA9PT0gb2xkUGF0aC5sZW5ndGgpIHtcbiAgICAgIHZhciBuZXdLZXkgPSBuZXdQYXRoW2luZGV4XTsgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuXG4gICAgICB1cGRhdGVkW25ld0tleV0gPSB1cGRhdGVkW29sZEtleV07XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHVwZGF0ZWQpKSB7XG4gICAgICAgIHVwZGF0ZWQuc3BsaWNlKG9sZEtleSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdXBkYXRlZFtvbGRLZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICB1cGRhdGVkW29sZEtleV0gPSBjb3B5V2l0aFJlbmFtZUltcGwoIC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcbiAgICAgIG9ialtvbGRLZXldLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCArIDEpO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZSA9IGZ1bmN0aW9uIChvYmosIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBpZiAob2xkUGF0aC5sZW5ndGggIT09IG5ld1BhdGgubGVuZ3RoKSB7XG4gICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgb2YgdGhlIHNhbWUgbGVuZ3RoJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdQYXRoLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBpZiAob2xkUGF0aFtpXSAhPT0gbmV3UGF0aFtpXSkge1xuICAgICAgICAgIHdhcm4oJ2NvcHlXaXRoUmVuYW1lKCkgZXhwZWN0cyBwYXRocyB0byBiZSB0aGUgc2FtZSBleGNlcHQgZm9yIHRoZSBkZWVwZXN0IGtleScpO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvcHlXaXRoUmVuYW1lSW1wbChvYmosIG9sZFBhdGgsIG5ld1BhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldEltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPj0gcGF0aC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIga2V5ID0gcGF0aFtpbmRleF07XG4gICAgdmFyIHVwZGF0ZWQgPSBBcnJheS5pc0FycmF5KG9iaikgPyBvYmouc2xpY2UoKSA6IF9hc3NpZ24oe30sIG9iaik7IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoU2V0SW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxLCB2YWx1ZSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQ7XG4gIH07XG5cbiAgdmFyIGNvcHlXaXRoU2V0ID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgdmFsdWUpIHtcbiAgICByZXR1cm4gY29weVdpdGhTZXRJbXBsKG9iaiwgcGF0aCwgMCwgdmFsdWUpO1xuICB9O1xuXG4gIHZhciBmaW5kSG9vayA9IGZ1bmN0aW9uIChmaWJlciwgaWQpIHtcbiAgICAvLyBGb3Igbm93LCB0aGUgXCJpZFwiIG9mIHN0YXRlZnVsIGhvb2tzIGlzIGp1c3QgdGhlIHN0YXRlZnVsIGhvb2sgaW5kZXguXG4gICAgLy8gVGhpcyBtYXkgY2hhbmdlIGluIHRoZSBmdXR1cmUgd2l0aCBlLmcuIG5lc3RlZCBob29rcy5cbiAgICB2YXIgY3VycmVudEhvb2sgPSBmaWJlci5tZW1vaXplZFN0YXRlO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRIb29rICE9PSBudWxsICYmIGlkID4gMCkge1xuICAgICAgY3VycmVudEhvb2sgPSBjdXJyZW50SG9vay5uZXh0O1xuICAgICAgaWQtLTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3VycmVudEhvb2s7XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgZWRpdGFibGUgdmFsdWVzIGZvciB1c2VTdGF0ZSBhbmQgdXNlUmVkdWNlci5cblxuXG4gIG92ZXJyaWRlSG9va1N0YXRlID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCwgdmFsdWUpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhTZXQoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoLCB2YWx1ZSk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07XG5cbiAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBpZCwgcGF0aCkge1xuICAgIHZhciBob29rID0gZmluZEhvb2soZmliZXIsIGlkKTtcblxuICAgIGlmIChob29rICE9PSBudWxsKSB7XG4gICAgICB2YXIgbmV3U3RhdGUgPSBjb3B5V2l0aERlbGV0ZShob29rLm1lbW9pemVkU3RhdGUsIHBhdGgpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhSZW5hbWUoaG9vay5tZW1vaXplZFN0YXRlLCBvbGRQYXRoLCBuZXdQYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTsgLy8gU3VwcG9ydCBEZXZUb29scyBwcm9wcyBmb3IgZnVuY3Rpb24gY29tcG9uZW50cywgZm9yd2FyZFJlZiwgbWVtbywgaG9zdCBjb21wb25lbnRzLCBldGMuXG5cblxuICBvdmVycmlkZVByb3BzID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoLCB2YWx1ZSkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoU2V0KGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgsIHZhbHVlKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoID0gZnVuY3Rpb24gKGZpYmVyLCBwYXRoKSB7XG4gICAgZmliZXIucGVuZGluZ1Byb3BzID0gY29weVdpdGhEZWxldGUoZmliZXIubWVtb2l6ZWRQcm9wcywgcGF0aCk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgb2xkUGF0aCwgbmV3UGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoUmVuYW1lKGZpYmVyLm1lbW9pemVkUHJvcHMsIG9sZFBhdGgsIG5ld1BhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2NoZWR1bGVVcGRhdGUgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgc2V0U3VzcGVuc2VIYW5kbGVyID0gZnVuY3Rpb24gKG5ld1Nob3VsZFN1c3BlbmRJbXBsKSB7XG4gICAgc2hvdWxkU3VzcGVuZEltcGwgPSBuZXdTaG91bGRTdXNwZW5kSW1wbDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIoZmliZXIpIHtcbiAgdmFyIGhvc3RGaWJlciA9IGZpbmRDdXJyZW50SG9zdEZpYmVyKGZpYmVyKTtcblxuICBpZiAoaG9zdEZpYmVyID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gaG9zdEZpYmVyLnN0YXRlTm9kZTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZShpbnN0YW5jZSkge1xuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0Q3VycmVudEZpYmVyRm9yRGV2VG9vbHMoKSB7XG4gIHJldHVybiBjdXJyZW50O1xufVxuXG5mdW5jdGlvbiBpbmplY3RJbnRvRGV2VG9vbHMoZGV2VG9vbHNDb25maWcpIHtcbiAgdmFyIGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlID0gZGV2VG9vbHNDb25maWcuZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U7XG4gIHZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbiAgcmV0dXJuIGluamVjdEludGVybmFscyh7XG4gICAgYnVuZGxlVHlwZTogZGV2VG9vbHNDb25maWcuYnVuZGxlVHlwZSxcbiAgICB2ZXJzaW9uOiBkZXZUb29sc0NvbmZpZy52ZXJzaW9uLFxuICAgIHJlbmRlcmVyUGFja2FnZU5hbWU6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyUGFja2FnZU5hbWUsXG4gICAgcmVuZGVyZXJDb25maWc6IGRldlRvb2xzQ29uZmlnLnJlbmRlcmVyQ29uZmlnLFxuICAgIG92ZXJyaWRlSG9va1N0YXRlOiBvdmVycmlkZUhvb2tTdGF0ZSxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGg6IG92ZXJyaWRlSG9va1N0YXRlUmVuYW1lUGF0aCxcbiAgICBvdmVycmlkZVByb3BzOiBvdmVycmlkZVByb3BzLFxuICAgIG92ZXJyaWRlUHJvcHNEZWxldGVQYXRoOiBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCxcbiAgICBvdmVycmlkZVByb3BzUmVuYW1lUGF0aDogb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGgsXG4gICAgc2V0U3VzcGVuc2VIYW5kbGVyOiBzZXRTdXNwZW5zZUhhbmRsZXIsXG4gICAgc2NoZWR1bGVVcGRhdGU6IHNjaGVkdWxlVXBkYXRlLFxuICAgIGN1cnJlbnREaXNwYXRjaGVyUmVmOiBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOiBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcixcbiAgICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZmluZEZpYmVyQnlIb3N0SW5zdGFuY2UgfHwgZW1wdHlGaW5kRmliZXJCeUhvc3RJbnN0YW5jZSxcbiAgICAvLyBSZWFjdCBSZWZyZXNoXG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoOiAgZmluZEhvc3RJbnN0YW5jZXNGb3JSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJlZnJlc2g6ICBzY2hlZHVsZVJlZnJlc2ggLFxuICAgIHNjaGVkdWxlUm9vdDogIHNjaGVkdWxlUm9vdCAsXG4gICAgc2V0UmVmcmVzaEhhbmRsZXI6ICBzZXRSZWZyZXNoSGFuZGxlciAsXG4gICAgLy8gRW5hYmxlcyBEZXZUb29scyB0byBhcHBlbmQgb3duZXIgc3RhY2tzIHRvIGVycm9yIG1lc3NhZ2VzIGluIERFViBtb2RlLlxuICAgIGdldEN1cnJlbnRGaWJlcjogIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzIFxuICB9KTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01Sb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICB0aGlzLl9pbnRlcm5hbFJvb3QgPSBjcmVhdGVSb290SW1wbChjb250YWluZXIsIENvbmN1cnJlbnRSb290LCBvcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gUmVhY3RET01CbG9ja2luZ1Jvb3QoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpO1xufVxuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnJlbmRlciA9IFJlYWN0RE9NQmxvY2tpbmdSb290LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoY2hpbGRyZW4pIHtcbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG5cbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IGRvZXMgbm90IHN1cHBvcnQgdGhlIHNlY29uZCBjYWxsYmFjayBhcmd1bWVudC4gJyArICdUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgcmVuZGVyaW5nLCBkZWNsYXJlIGl0IGluIGEgY29tcG9uZW50IGJvZHkgd2l0aCB1c2VFZmZlY3QoKS4nKTtcbiAgICB9XG5cbiAgICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMocm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGUgJyArICdyb290IGNvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArIFwicm9vdC51bm1vdW50KCkgdG8gZW1wdHkgYSByb290J3MgY29udGFpbmVyLlwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgcm9vdCwgbnVsbCwgbnVsbCk7XG59O1xuXG5SZWFjdERPTVJvb3QucHJvdG90eXBlLnVubW91bnQgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUudW5tb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgYXJndW1lbnRzWzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcigndW5tb3VudCguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IGEgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3QgPSB0aGlzLl9pbnRlcm5hbFJvb3Q7XG4gIHZhciBjb250YWluZXIgPSByb290LmNvbnRhaW5lckluZm87XG4gIHVwZGF0ZUNvbnRhaW5lcihudWxsLCByb290LCBudWxsLCBmdW5jdGlvbiAoKSB7XG4gICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gIH0pO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCB0YWcsIG9wdGlvbnMpIHtcbiAgLy8gVGFnIGlzIGVpdGhlciBMZWdhY3lSb290IG9yIENvbmN1cnJlbnQgUm9vdFxuICB2YXIgaHlkcmF0ZSA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGUgPT09IHRydWU7XG4gIHZhciBoeWRyYXRpb25DYWxsYmFja3MgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zIHx8IG51bGw7XG4gIHZhciBtdXRhYmxlU291cmNlcyA9IG9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMgIT0gbnVsbCAmJiBvcHRpb25zLmh5ZHJhdGlvbk9wdGlvbnMubXV0YWJsZVNvdXJjZXMgfHwgbnVsbDtcbiAgdmFyIHJvb3QgPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCB0YWcsIGh5ZHJhdGUpO1xuICBtYXJrQ29udGFpbmVyQXNSb290KHJvb3QuY3VycmVudCwgY29udGFpbmVyKTtcbiAgdmFyIGNvbnRhaW5lck5vZGVUeXBlID0gY29udGFpbmVyLm5vZGVUeXBlO1xuXG4gIHtcbiAgICB2YXIgcm9vdENvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IGNvbnRhaW5lci5wYXJlbnROb2RlIDogY29udGFpbmVyO1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHJvb3RDb250YWluZXJFbGVtZW50KTtcbiAgfVxuXG4gIGlmIChtdXRhYmxlU291cmNlcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbXV0YWJsZVNvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBtdXRhYmxlU291cmNlID0gbXV0YWJsZVNvdXJjZXNbaV07XG4gICAgICByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvb3Q7XG59XG5mdW5jdGlvbiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgTGVnYWN5Um9vdCwgb3B0aW9ucyk7XG59XG5mdW5jdGlvbiBpc1ZhbGlkQ29udGFpbmVyKG5vZGUpIHtcbiAgcmV0dXJuICEhKG5vZGUgJiYgKG5vZGUubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIG5vZGUubm9kZVZhbHVlID09PSAnIHJlYWN0LW1vdW50LXBvaW50LXVuc3RhYmxlICcpKTtcbn1cblxudmFyIFJlYWN0Q3VycmVudE93bmVyJDMgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbnZhciB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzO1xudmFyIHdhcm5lZEFib3V0SHlkcmF0ZUFQSSA9IGZhbHNlO1xuXG57XG4gIHRvcExldmVsVXBkYXRlV2FybmluZ3MgPSBmdW5jdGlvbiAoY29udGFpbmVyKSB7XG4gICAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyICYmIGNvbnRhaW5lci5ub2RlVHlwZSAhPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgaG9zdEluc3RhbmNlID0gZmluZEhvc3RJbnN0YW5jZVdpdGhOb1BvcnRhbHMoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIuX2ludGVybmFsUm9vdC5jdXJyZW50KTtcblxuICAgICAgaWYgKGhvc3RJbnN0YW5jZSkge1xuICAgICAgICBpZiAoaG9zdEluc3RhbmNlLnBhcmVudE5vZGUgIT09IGNvbnRhaW5lcikge1xuICAgICAgICAgIGVycm9yKCdyZW5kZXIoLi4uKTogSXQgbG9va3MgbGlrZSB0aGUgUmVhY3QtcmVuZGVyZWQgY29udGVudCBvZiB0aGlzICcgKyAnY29udGFpbmVyIHdhcyByZW1vdmVkIHdpdGhvdXQgdXNpbmcgUmVhY3QuIFRoaXMgaXMgbm90ICcgKyAnc3VwcG9ydGVkIGFuZCB3aWxsIGNhdXNlIGVycm9ycy4gSW5zdGVhZCwgY2FsbCAnICsgJ1JlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUgdG8gZW1wdHkgYSBjb250YWluZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCA9ICEhY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKHJvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCkpO1xuXG4gICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkICYmICFpc1Jvb3RSZW5kZXJlZEJ5U29tZVJlYWN0KSB7XG4gICAgICBlcnJvcigncmVuZGVyKC4uLik6IFJlcGxhY2luZyBSZWFjdC1yZW5kZXJlZCBjaGlsZHJlbiB3aXRoIGEgbmV3IHJvb3QgJyArICdjb21wb25lbnQuIElmIHlvdSBpbnRlbmRlZCB0byB1cGRhdGUgdGhlIGNoaWxkcmVuIG9mIHRoaXMgbm9kZSwgJyArICd5b3Ugc2hvdWxkIGluc3RlYWQgaGF2ZSB0aGUgZXhpc3RpbmcgY2hpbGRyZW4gdXBkYXRlIHRoZWlyIHN0YXRlICcgKyAnYW5kIHJlbmRlciB0aGUgbmV3IGNvbXBvbmVudHMgaW5zdGVhZCBvZiBjYWxsaW5nIFJlYWN0RE9NLnJlbmRlci4nKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgY29udGFpbmVyLnRhZ05hbWUgJiYgY29udGFpbmVyLnRhZ05hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0JPRFknKSB7XG4gICAgICBlcnJvcigncmVuZGVyKCk6IFJlbmRlcmluZyBjb21wb25lbnRzIGRpcmVjdGx5IGludG8gZG9jdW1lbnQuYm9keSBpcyAnICsgJ2Rpc2NvdXJhZ2VkLCBzaW5jZSBpdHMgY2hpbGRyZW4gYXJlIG9mdGVuIG1hbmlwdWxhdGVkIGJ5IHRoaXJkLXBhcnR5ICcgKyAnc2NyaXB0cyBhbmQgYnJvd3NlciBleHRlbnNpb25zLiBUaGlzIG1heSBsZWFkIHRvIHN1YnRsZSAnICsgJ3JlY29uY2lsaWF0aW9uIGlzc3Vlcy4gVHJ5IHJlbmRlcmluZyBpbnRvIGEgY29udGFpbmVyIGVsZW1lbnQgY3JlYXRlZCAnICsgJ2ZvciB5b3VyIGFwcC4nKTtcbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpIHtcbiAgaWYgKCFjb250YWluZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmRvY3VtZW50RWxlbWVudDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcikge1xuICB2YXIgcm9vdEVsZW1lbnQgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgcmV0dXJuICEhKHJvb3RFbGVtZW50ICYmIHJvb3RFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdEVsZW1lbnQuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKTtcbn1cblxuZnVuY3Rpb24gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpIHtcbiAgdmFyIHNob3VsZEh5ZHJhdGUgPSBmb3JjZUh5ZHJhdGUgfHwgc2hvdWxkSHlkcmF0ZUR1ZVRvTGVnYWN5SGV1cmlzdGljKGNvbnRhaW5lcik7IC8vIEZpcnN0IGNsZWFyIGFueSBleGlzdGluZyBjb250ZW50LlxuXG4gIGlmICghc2hvdWxkSHlkcmF0ZSkge1xuICAgIHZhciB3YXJuZWQgPSBmYWxzZTtcbiAgICB2YXIgcm9vdFNpYmxpbmc7XG5cbiAgICB3aGlsZSAocm9vdFNpYmxpbmcgPSBjb250YWluZXIubGFzdENoaWxkKSB7XG4gICAgICB7XG4gICAgICAgIGlmICghd2FybmVkICYmIHJvb3RTaWJsaW5nLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgJiYgcm9vdFNpYmxpbmcuaGFzQXR0cmlidXRlKFJPT1RfQVRUUklCVVRFX05BTUUpKSB7XG4gICAgICAgICAgd2FybmVkID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdyZW5kZXIoKTogVGFyZ2V0IG5vZGUgaGFzIG1hcmt1cCByZW5kZXJlZCBieSBSZWFjdCwgYnV0IHRoZXJlICcgKyAnYXJlIHVucmVsYXRlZCBub2RlcyBhcyB3ZWxsLiBUaGlzIGlzIG1vc3QgY29tbW9ubHkgY2F1c2VkIGJ5ICcgKyAnd2hpdGUtc3BhY2UgaW5zZXJ0ZWQgYXJvdW5kIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGFpbmVyLnJlbW92ZUNoaWxkKHJvb3RTaWJsaW5nKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKHNob3VsZEh5ZHJhdGUgJiYgIWZvcmNlSHlkcmF0ZSAmJiAhd2FybmVkQWJvdXRIeWRyYXRlQVBJKSB7XG4gICAgICB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdyZW5kZXIoKTogQ2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSB0byBoeWRyYXRlIHNlcnZlci1yZW5kZXJlZCBtYXJrdXAgJyArICd3aWxsIHN0b3Agd29ya2luZyBpbiBSZWFjdCB2MTguIFJlcGxhY2UgdGhlIFJlYWN0RE9NLnJlbmRlcigpIGNhbGwgJyArICd3aXRoIFJlYWN0RE9NLmh5ZHJhdGUoKSBpZiB5b3Ugd2FudCBSZWFjdCB0byBhdHRhY2ggdG8gdGhlIHNlcnZlciBIVE1MLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVMZWdhY3lSb290KGNvbnRhaW5lciwgc2hvdWxkSHlkcmF0ZSA/IHtcbiAgICBoeWRyYXRlOiB0cnVlXG4gIH0gOiB1bmRlZmluZWQpO1xufVxuXG5mdW5jdGlvbiB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsZXJOYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgY2hpbGRyZW4sIGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlLCBjYWxsYmFjaykge1xuICB7XG4gICAgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncyhjb250YWluZXIpO1xuICAgIHdhcm5PbkludmFsaWRDYWxsYmFjayQxKGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2ssICdyZW5kZXInKTtcbiAgfSAvLyBUT0RPOiBXaXRob3V0IGBhbnlgIHR5cGUsIEZsb3cgc2F5cyBcIlByb3BlcnR5IGNhbm5vdCBiZSBhY2Nlc3NlZCBvbiBhbnlcbiAgLy8gbWVtYmVyIG9mIGludGVyc2VjdGlvbiB0eXBlLlwiIFdoeXl5eXl5LlxuXG5cbiAgdmFyIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcjtcbiAgdmFyIGZpYmVyUm9vdDtcblxuICBpZiAoIXJvb3QpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgcm9vdCA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbGVnYWN5Q3JlYXRlUm9vdEZyb21ET01Db250YWluZXIoY29udGFpbmVyLCBmb3JjZUh5ZHJhdGUpO1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBvcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbiAgICAgICAgb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBJbml0aWFsIG1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIGZpYmVyUm9vdCwgcGFyZW50Q29tcG9uZW50LCBjYWxsYmFjayk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgZmliZXJSb290ID0gcm9vdC5faW50ZXJuYWxSb290O1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIF9vcmlnaW5hbENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICAgIGNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcblxuICAgICAgICBfb3JpZ2luYWxDYWxsYmFjay5jYWxsKGluc3RhbmNlKTtcbiAgICAgIH07XG4gICAgfSAvLyBVcGRhdGVcblxuXG4gICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGdldFB1YmxpY1Jvb3RJbnN0YW5jZShmaWJlclJvb3QpO1xufVxuXG5mdW5jdGlvbiBmaW5kRE9NTm9kZShjb21wb25lbnRPckVsZW1lbnQpIHtcbiAge1xuICAgIHZhciBvd25lciA9IFJlYWN0Q3VycmVudE93bmVyJDMuY3VycmVudDtcblxuICAgIGlmIChvd25lciAhPT0gbnVsbCAmJiBvd25lci5zdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciB3YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXI7XG5cbiAgICAgIGlmICghd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBmaW5kRE9NTm9kZSBpbnNpZGUgaXRzIHJlbmRlcigpLiAnICsgJ3JlbmRlcigpIHNob3VsZCBiZSBhIHB1cmUgZnVuY3Rpb24gb2YgcHJvcHMgYW5kIHN0YXRlLiBJdCBzaG91bGQgJyArICduZXZlciBhY2Nlc3Mgc29tZXRoaW5nIHRoYXQgcmVxdWlyZXMgc3RhbGUgZGF0YSBmcm9tIHRoZSBwcmV2aW91cyAnICsgJ3JlbmRlciwgc3VjaCBhcyByZWZzLiBNb3ZlIHRoaXMgbG9naWMgdG8gY29tcG9uZW50RGlkTW91bnQgYW5kICcgKyAnY29tcG9uZW50RGlkVXBkYXRlIGluc3RlYWQuJywgZ2V0Q29tcG9uZW50TmFtZShvd25lci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgb3duZXIuc3RhdGVOb2RlLl93YXJuZWRBYm91dFJlZnNJblJlbmRlciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29tcG9uZW50T3JFbGVtZW50Lm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gY29tcG9uZW50T3JFbGVtZW50O1xuICB9XG5cbiAge1xuICAgIHJldHVybiBmaW5kSG9zdEluc3RhbmNlV2l0aFdhcm5pbmcoY29tcG9uZW50T3JFbGVtZW50LCAnZmluZERPTU5vZGUnKTtcbiAgfVxufVxuZnVuY3Rpb24gaHlkcmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5oeWRyYXRlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCBjcmVhdGVSb290KGNvbnRhaW5lciwge2h5ZHJhdGU6IHRydWV9KS5yZW5kZXIoZWxlbWVudCk/Jyk7XG4gICAgfVxuICB9IC8vIFRPRE86IHRocm93IG9yIHdhcm4gaWYgd2UgY291bGRuJ3QgaHlkcmF0ZT9cblxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIHRydWUsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHJlbmRlcihlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHJvb3QucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBlbGVtZW50LCBjb250YWluZXIsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXJOb2RlKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIShwYXJlbnRDb21wb25lbnQgIT0gbnVsbCAmJiBoYXMocGFyZW50Q29tcG9uZW50KSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJwYXJlbnRDb21wb25lbnQgbXVzdCBiZSBhIHZhbGlkIFJlYWN0IENvbXBvbmVudFwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgZmFsc2UsIGNhbGxiYWNrKTtcbn1cbmZ1bmN0aW9uIHVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKSB7XG4gIGlmICghaXNWYWxpZENvbnRhaW5lcihjb250YWluZXIpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSguLi4pOiBUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIHZhciBpc01vZGVyblJvb3QgPSBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChjb250YWluZXIpICYmIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID09PSB1bmRlZmluZWQ7XG5cbiAgICBpZiAoaXNNb2Rlcm5Sb290KSB7XG4gICAgICBlcnJvcignWW91IGFyZSBjYWxsaW5nIFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoKSBvbiBhIGNvbnRhaW5lciB0aGF0IHdhcyBwcmV2aW91c2x5ICcgKyAncGFzc2VkIHRvIFJlYWN0RE9NLmNyZWF0ZVJvb3QoKS4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiBEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnVubW91bnQoKT8nKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIpIHtcbiAgICB7XG4gICAgICB2YXIgcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gICAgICB2YXIgcmVuZGVyZWRCeURpZmZlcmVudFJlYWN0ID0gcm9vdEVsICYmICFnZXRJbnN0YW5jZUZyb21Ob2RlKHJvb3RFbCk7XG5cbiAgICAgIGlmIChyZW5kZXJlZEJ5RGlmZmVyZW50UmVhY3QpIHtcbiAgICAgICAgZXJyb3IoXCJ1bm1vdW50Q29tcG9uZW50QXROb2RlKCk6IFRoZSBub2RlIHlvdSdyZSBhdHRlbXB0aW5nIHRvIHVubW91bnQgXCIgKyAnd2FzIHJlbmRlcmVkIGJ5IGFub3RoZXIgY29weSBvZiBSZWFjdC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFVubW91bnQgc2hvdWxkIG5vdCBiZSBiYXRjaGVkLlxuXG5cbiAgICB1bmJhdGNoZWRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICAgIGxlZ2FjeVJlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKG51bGwsIG51bGwsIGNvbnRhaW5lciwgZmFsc2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gJEZsb3dGaXhNZSBUaGlzIHNob3VsZCBwcm9iYWJseSB1c2UgYGRlbGV0ZSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lcmBcbiAgICAgICAgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPSBudWxsO1xuICAgICAgICB1bm1hcmtDb250YWluZXJBc1Jvb3QoY29udGFpbmVyKTtcbiAgICAgIH0pO1xuICAgIH0pOyAvLyBJZiB5b3UgY2FsbCB1bm1vdW50Q29tcG9uZW50QXROb2RlIHR3aWNlIGluIHF1aWNrIHN1Y2Nlc3Npb24sIHlvdSdsbFxuICAgIC8vIGdldCBgdHJ1ZWAgdHdpY2UuIFRoYXQncyBwcm9iYWJseSBmaW5lP1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgdmFyIF9yb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcblxuICAgICAgdmFyIGhhc05vblJvb3RSZWFjdENoaWxkID0gISEoX3Jvb3RFbCAmJiBnZXRJbnN0YW5jZUZyb21Ob2RlKF9yb290RWwpKTsgLy8gQ2hlY2sgaWYgdGhlIGNvbnRhaW5lciBpdHNlbGYgaXMgYSBSZWFjdCByb290IG5vZGUuXG5cbiAgICAgIHZhciBpc0NvbnRhaW5lclJlYWN0Um9vdCA9IGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGlzVmFsaWRDb250YWluZXIoY29udGFpbmVyLnBhcmVudE5vZGUpICYmICEhY29udGFpbmVyLnBhcmVudE5vZGUuX3JlYWN0Um9vdENvbnRhaW5lcjtcblxuICAgICAgaWYgKGhhc05vblJvb3RSZWFjdENoaWxkKSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBSZWFjdCBhbmQgaXMgbm90IGEgdG9wLWxldmVsIGNvbnRhaW5lci4gJXMnLCBpc0NvbnRhaW5lclJlYWN0Um9vdCA/ICdZb3UgbWF5IGhhdmUgYWNjaWRlbnRhbGx5IHBhc3NlZCBpbiBhIFJlYWN0IHJvb3Qgbm9kZSBpbnN0ZWFkICcgKyAnb2YgaXRzIGNvbnRhaW5lci4nIDogJ0luc3RlYWQsIGhhdmUgdGhlIHBhcmVudCBjb21wb25lbnQgdXBkYXRlIGl0cyBzdGF0ZSBhbmQgJyArICdyZXJlbmRlciBpbiBvcmRlciB0byByZW1vdmUgdGhpcyBjb21wb25lbnQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbnNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uKGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uJDEpO1xuc2V0QXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KGF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eSQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdFByaW9yaXR5KHJ1bldpdGhQcmlvcml0eSQyKTtcbnZhciBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IGZhbHNlO1xuXG57XG4gIGlmICh0eXBlb2YgTWFwICE9PSAnZnVuY3Rpb24nIHx8IC8vICRGbG93SXNzdWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgTWFwIGhhcyBubyBwcm90b3R5cGVcbiAgTWFwLnByb3RvdHlwZSA9PSBudWxsIHx8IHR5cGVvZiBNYXAucHJvdG90eXBlLmZvckVhY2ggIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIFNldCBoYXMgbm8gcHJvdG90eXBlXG4gIFNldC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5jbGVhciAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgU2V0LnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgZXJyb3IoJ1JlYWN0IGRlcGVuZHMgb24gTWFwIGFuZCBTZXQgYnVpbHQtaW4gdHlwZXMuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICB9XG59XG5cbnNldFJlc3RvcmVJbXBsZW1lbnRhdGlvbihyZXN0b3JlQ29udHJvbGxlZFN0YXRlJDMpO1xuc2V0QmF0Y2hpbmdJbXBsZW1lbnRhdGlvbihiYXRjaGVkVXBkYXRlcyQxLCBkaXNjcmV0ZVVwZGF0ZXMkMSwgZmx1c2hEaXNjcmV0ZVVwZGF0ZXMsIGJhdGNoZWRFdmVudFVwZGF0ZXMkMSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbCQxKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogcGFzcyBSZWFjdERPTSBwb3J0YWwgaW1wbGVtZW50YXRpb24gYXMgdGhpcmQgYXJndW1lbnRcbiAgLy8gJEZsb3dGaXhNZSBUaGUgRmxvdyB0eXBlIGlzIG9wYXF1ZSBidXQgdGhlcmUncyBubyB3YXkgdG8gYWN0dWFsbHkgY3JlYXRlIGl0LlxuXG5cbiAgcmV0dXJuIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVyLCBudWxsLCBrZXkpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKSB7XG5cbiAgcmV0dXJuIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKHBhcmVudENvbXBvbmVudCwgZWxlbWVudCwgY29udGFpbmVyTm9kZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lcikge1xuICB2YXIga2V5ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dFVuc3RhYmxlQ3JlYXRlUG9ydGFsKSB7XG4gICAgICBkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1RoZSBSZWFjdERPTS51bnN0YWJsZV9jcmVhdGVQb3J0YWwoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTgrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0RE9NLmNyZWF0ZVBvcnRhbCgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEksICcgKyAnYnV0IHdpdGhvdXQgdGhlIFwidW5zdGFibGVfXCIgcHJlZml4LicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyLCBrZXkpO1xufVxuXG52YXIgSW50ZXJuYWxzID0ge1xuICAvLyBLZWVwIGluIHN5bmMgd2l0aCBSZWFjdFRlc3RVdGlscy5qcywgYW5kIFJlYWN0VGVzdFV0aWxzQWN0LmpzLlxuICAvLyBUaGlzIGlzIGFuIGFycmF5IGZvciBiZXR0ZXIgbWluaWZpY2F0aW9uLlxuICBFdmVudHM6IFtnZXRJbnN0YW5jZUZyb21Ob2RlLCBnZXROb2RlRnJvbUluc3RhbmNlLCBnZXRGaWJlckN1cnJlbnRQcm9wc0Zyb21Ob2RlLCBlbnF1ZXVlU3RhdGVSZXN0b3JlLCByZXN0b3JlU3RhdGVJZk5lZWRlZCwgZmx1c2hQYXNzaXZlRWZmZWN0cywgLy8gVE9ETzogVGhpcyBpcyByZWxhdGVkIHRvIGBhY3RgLCBub3QgZXZlbnRzLiBNb3ZlIHRvIHNlcGFyYXRlIGtleT9cbiAgSXNUaGlzUmVuZGVyZXJBY3RpbmddXG59O1xudmFyIGZvdW5kRGV2VG9vbHMgPSBpbmplY3RJbnRvRGV2VG9vbHMoe1xuICBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTogZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUsXG4gIGJ1bmRsZVR5cGU6ICAxICxcbiAgdmVyc2lvbjogUmVhY3RWZXJzaW9uLFxuICByZW5kZXJlclBhY2thZ2VOYW1lOiAncmVhY3QtZG9tJ1xufSk7XG5cbntcbiAgaWYgKCFmb3VuZERldlRvb2xzICYmIGNhblVzZURPTSAmJiB3aW5kb3cudG9wID09PSB3aW5kb3cuc2VsZikge1xuICAgIC8vIElmIHdlJ3JlIGluIENocm9tZSBvciBGaXJlZm94LCBwcm92aWRlIGEgZG93bmxvYWQgbGluayBpZiBub3QgaW5zdGFsbGVkLlxuICAgIGlmIChuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZScpID4gLTEgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdFZGdlJykgPT09IC0xIHx8IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRmlyZWZveCcpID4gLTEpIHtcbiAgICAgIHZhciBwcm90b2NvbCA9IHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDsgLy8gRG9uJ3Qgd2FybiBpbiBleG90aWMgY2FzZXMgbGlrZSBjaHJvbWUtZXh0ZW5zaW9uOi8vLlxuXG4gICAgICBpZiAoL14oaHR0cHM/fGZpbGUpOiQvLnRlc3QocHJvdG9jb2wpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcbiAgICAgICAgY29uc29sZS5pbmZvKCclY0Rvd25sb2FkIHRoZSBSZWFjdCBEZXZUb29scyAnICsgJ2ZvciBhIGJldHRlciBkZXZlbG9wbWVudCBleHBlcmllbmNlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycgKyAocHJvdG9jb2wgPT09ICdmaWxlOicgPyAnXFxuWW91IG1pZ2h0IG5lZWQgdG8gdXNlIGEgbG9jYWwgSFRUUCBzZXJ2ZXIgKGluc3RlYWQgb2YgZmlsZTovLyk6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LWRldnRvb2xzLWZhcScgOiAnJyksICdmb250LXdlaWdodDpib2xkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQgPSBJbnRlcm5hbHM7XG5leHBvcnRzLmNyZWF0ZVBvcnRhbCA9IGNyZWF0ZVBvcnRhbCQxO1xuZXhwb3J0cy5maW5kRE9NTm9kZSA9IGZpbmRET01Ob2RlO1xuZXhwb3J0cy5mbHVzaFN5bmMgPSBmbHVzaFN5bmM7XG5leHBvcnRzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuZXhwb3J0cy5yZW5kZXIgPSByZW5kZXI7XG5leHBvcnRzLnVubW91bnRDb21wb25lbnRBdE5vZGUgPSB1bm1vdW50Q29tcG9uZW50QXROb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9iYXRjaGVkVXBkYXRlcyA9IGJhdGNoZWRVcGRhdGVzJDE7XG5leHBvcnRzLnVuc3RhYmxlX2NyZWF0ZVBvcnRhbCA9IHVuc3RhYmxlX2NyZWF0ZVBvcnRhbDtcbmV4cG9ydHMudW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIgPSByZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gY2hlY2tEQ0UoKSB7XG4gIC8qIGdsb2JhbCBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gKi9cbiAgaWYgKFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnIHx8XG4gICAgdHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBUaGlzIGJyYW5jaCBpcyB1bnJlYWNoYWJsZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24gaXMgb25seSBjYWxsZWRcbiAgICAvLyBpbiBwcm9kdWN0aW9uLCBidXQgdGhlIGNvbmRpdGlvbiBpcyB0cnVlIG9ubHkgaW4gZGV2ZWxvcG1lbnQuXG4gICAgLy8gVGhlcmVmb3JlIGlmIHRoZSBicmFuY2ggaXMgc3RpbGwgaGVyZSwgZGVhZCBjb2RlIGVsaW1pbmF0aW9uIHdhc24ndFxuICAgIC8vIHByb3Blcmx5IGFwcGxpZWQuXG4gICAgLy8gRG9uJ3QgY2hhbmdlIHRoZSBtZXNzYWdlLiBSZWFjdCBEZXZUb29scyByZWxpZXMgb24gaXQuIEFsc28gbWFrZSBzdXJlXG4gICAgLy8gdGhpcyBtZXNzYWdlIGRvZXNuJ3Qgb2NjdXIgZWxzZXdoZXJlIGluIHRoaXMgZnVuY3Rpb24sIG9yIGl0IHdpbGwgY2F1c2VcbiAgICAvLyBhIGZhbHNlIHBvc2l0aXZlLlxuICAgIHRocm93IG5ldyBFcnJvcignXl9eJyk7XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBWZXJpZnkgdGhhdCB0aGUgY29kZSBhYm92ZSBoYXMgYmVlbiBkZWFkIGNvZGUgZWxpbWluYXRlZCAoRENFJ2QpLlxuICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShjaGVja0RDRSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIERldlRvb2xzIHNob3VsZG4ndCBjcmFzaCBSZWFjdCwgbm8gbWF0dGVyIHdoYXQuXG4gICAgLy8gV2Ugc2hvdWxkIHN0aWxsIHJlcG9ydCBpbiBjYXNlIHdlIGJyZWFrIHRoaXMgY29kZS5cbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gIH1cbn1cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgLy8gRENFIGNoZWNrIHNob3VsZCBoYXBwZW4gYmVmb3JlIFJlYWN0RE9NIGJ1bmRsZSBleGVjdXRlcyBzbyB0aGF0XG4gIC8vIERldlRvb2xzIGNhbiByZXBvcnQgYmFkIG1pbmlmaWNhdGlvbiBkdXJpbmcgaW5qZWN0aW9uLlxuICBjaGVja0RDRSgpO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20uZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBY3Rpdml0eSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDEyIDE4IDEyIDE1IDIxIDkgMyA2IDEyIDIgMTJcIlxuICB9KSk7XG59KTtcbkFjdGl2aXR5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFjdGl2aXR5LmRpc3BsYXlOYW1lID0gJ0FjdGl2aXR5JztcbmV4cG9ydCBkZWZhdWx0IEFjdGl2aXR5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBaXJwbGF5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTdINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTUgMTcgMjEgNyAyMSAxMiAxNVwiXG4gIH0pKTtcbn0pO1xuQWlycGxheS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BaXJwbGF5LmRpc3BsYXlOYW1lID0gJ0FpcnBsYXknO1xuZXhwb3J0IGRlZmF1bHQgQWlycGxheTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxlcnRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQWxlcnRDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxlcnRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQWxlcnRDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsZXJ0T2N0YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNy44NiAyIDE2LjE0IDIgMjIgNy44NiAyMiAxNi4xNCAxNi4xNCAyMiA3Ljg2IDIyIDIgMTYuMTQgMiA3Ljg2IDcuODYgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQWxlcnRPY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsZXJ0T2N0YWdvbi5kaXNwbGF5TmFtZSA9ICdBbGVydE9jdGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGVydFRyaWFuZ2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjI5IDMuODZMMS44MiAxOGEyIDIgMCAwIDAgMS43MSAzaDE2Ljk0YTIgMiAwIDAgMCAxLjcxLTNMMTMuNzEgMy44NmEyIDIgMCAwIDAtMy40MiAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuQWxlcnRUcmlhbmdsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGVydFRyaWFuZ2xlLmRpc3BsYXlOYW1lID0gJ0FsZXJ0VHJpYW5nbGUnO1xuZXhwb3J0IGRlZmF1bHQgQWxlcnRUcmlhbmdsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25DZW50ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduQ2VudGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduQ2VudGVyLmRpc3BsYXlOYW1lID0gJ0FsaWduQ2VudGVyJztcbmV4cG9ydCBkZWZhdWx0IEFsaWduQ2VudGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGlnbkp1c3RpZnkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduSnVzdGlmeS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGlnbkp1c3RpZnkuZGlzcGxheU5hbWUgPSAnQWxpZ25KdXN0aWZ5JztcbmV4cG9ydCBkZWZhdWx0IEFsaWduSnVzdGlmeTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25MZWZ0LmRpc3BsYXlOYW1lID0gJ0FsaWduTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkFsaWduUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25SaWdodC5kaXNwbGF5TmFtZSA9ICdBbGlnblJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFsaWduUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFuY2hvciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNVwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEySDJhMTAgMTAgMCAwIDAgMjAgMGgtM1wiXG4gIH0pKTtcbn0pO1xuQW5jaG9yLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFuY2hvci5kaXNwbGF5TmFtZSA9ICdBbmNob3InO1xuZXhwb3J0IGRlZmF1bHQgQW5jaG9yOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcGVydHVyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuMzFcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjAuMDVcIixcbiAgICB5MjogXCIxNy45NFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjkuNjlcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjEuMTdcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNy4zOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTMuMTJcIixcbiAgICB5MjogXCIyLjA2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOS42OVwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMy45NVwiLFxuICAgIHkyOiBcIjYuMDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC4zMVwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMi44M1wiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuNjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEwLjg4XCIsXG4gICAgeTI6IFwiMjEuOTRcIlxuICB9KSk7XG59KTtcbkFwZXJ0dXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFwZXJ0dXJlLmRpc3BsYXlOYW1lID0gJ0FwZXJ0dXJlJztcbmV4cG9ydCBkZWZhdWx0IEFwZXJ0dXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcmNoaXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjEgOCAyMSAyMSAzIDIxIDMgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQXJjaGl2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcmNoaXZlLmRpc3BsYXlOYW1lID0gJ0FyY2hpdmUnO1xuZXhwb3J0IGRlZmF1bHQgQXJjaGl2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggMTIgMTIgMTYgMTYgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5BcnJvd0Rvd25DaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dEb3duQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0Fycm93RG93bkNpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0Rvd25DaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93bkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAxNyA3IDE3IDcgN1wiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd25MZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93RG93bkxlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA3IDE3IDE3IDcgMTdcIlxuICB9KSk7XG59KTtcbkFycm93RG93blJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93blJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Fycm93RG93blJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93blJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0Rvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgMTIgMTIgMTkgNSAxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93bi5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd24nO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0xlZnRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgOCA4IDEyIDEyIDE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dMZWZ0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93TGVmdENpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd0xlZnRDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dMZWZ0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0xlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTlcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTkgNSAxMiAxMiA1XCJcbiAgfSkpO1xufSk7XG5BcnJvd0xlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dMZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93TGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0xlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93UmlnaHRDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMTYgMTYgMTIgMTIgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFycm93UmlnaHRDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dSaWdodENpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd1JpZ2h0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFycm93UmlnaHRDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93UmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgNSAxOSAxMiAxMiAxOVwiXG4gIH0pKTtcbn0pO1xuQXJyb3dSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1JpZ2h0LmRpc3BsYXlOYW1lID0gJ0Fycm93UmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAxMiAxMiA4IDggMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5BcnJvd1VwQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dVcENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1VwQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTcgNyA3IDE3IDdcIlxuICB9KSk7XG59KTtcbkFycm93VXBMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBMZWZ0LmRpc3BsYXlOYW1lID0gJ0Fycm93VXBMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXBMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3IDcgMTcgNyAxNyAxN1wiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcFJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93VXBSaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcFJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1VwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjUgMTIgMTIgNSAxOSAxMlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwLmRpc3BsYXlOYW1lID0gJ0Fycm93VXAnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXRTaWduID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTMuOTIgNy45NFwiXG4gIH0pKTtcbn0pO1xuQXRTaWduLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkF0U2lnbi5kaXNwbGF5TmFtZSA9ICdBdFNpZ24nO1xuZXhwb3J0IGRlZmF1bHQgQXRTaWduOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiOFwiLFxuICAgIHI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOC4yMSAxMy44OSA3IDIzIDEyIDIwIDE3IDIzIDE1Ljc5IDEzLjg4XCJcbiAgfSkpO1xufSk7XG5Bd2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Bd2FyZC5kaXNwbGF5TmFtZSA9ICdBd2FyZCc7XG5leHBvcnQgZGVmYXVsdCBBd2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmFyQ2hhcnQyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQmFyQ2hhcnQyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhckNoYXJ0Mi5kaXNwbGF5TmFtZSA9ICdCYXJDaGFydDInO1xuZXhwb3J0IGRlZmF1bHQgQmFyQ2hhcnQyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXJDaGFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkJhckNoYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhckNoYXJ0LmRpc3BsYXlOYW1lID0gJ0JhckNoYXJ0JztcbmV4cG9ydCBkZWZhdWx0IEJhckNoYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXR0ZXJ5Q2hhcmdpbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxOEgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDMuMTlNMTUgNmgyYTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAyaC0zLjE5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDYgNyAxMiAxMyAxMiA5IDE4XCJcbiAgfSkpO1xufSk7XG5CYXR0ZXJ5Q2hhcmdpbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmF0dGVyeUNoYXJnaW5nLmRpc3BsYXlOYW1lID0gJ0JhdHRlcnlDaGFyZ2luZyc7XG5leHBvcnQgZGVmYXVsdCBCYXR0ZXJ5Q2hhcmdpbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJhdHRlcnkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCI2XCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMTJcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5CYXR0ZXJ5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhdHRlcnkuZGlzcGxheU5hbWUgPSAnQmF0dGVyeSc7XG5leHBvcnQgZGVmYXVsdCBCYXR0ZXJ5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCZWxsT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjczIDIxYTIgMiAwIDAgMS0zLjQ2IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC42MyAxM0ExNy44OSAxNy44OSAwIDAgMSAxOCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi4yNiA2LjI2QTUuODYgNS44NiAwIDAgMCA2IDhjMCA3LTMgOS0zIDloMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA4YTYgNiAwIDAgMC05LjMzLTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbkJlbGxPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmVsbE9mZi5kaXNwbGF5TmFtZSA9ICdCZWxsT2ZmJztcbmV4cG9ydCBkZWZhdWx0IEJlbGxPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJlbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOEE2IDYgMCAwIDAgNiA4YzAgNy0zIDktMyA5aDE4cy0zLTItMy05XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMuNzMgMjFhMiAyIDAgMCAxLTMuNDYgMFwiXG4gIH0pKTtcbn0pO1xuQmVsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CZWxsLmRpc3BsYXlOYW1lID0gJ0JlbGwnO1xuZXhwb3J0IGRlZmF1bHQgQmVsbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmx1ZXRvb3RoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNi41IDYuNSAxNy41IDE3LjUgMTIgMjMgMTIgMSAxNy41IDYuNSA2LjUgMTcuNVwiXG4gIH0pKTtcbn0pO1xuQmx1ZXRvb3RoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJsdWV0b290aC5kaXNwbGF5TmFtZSA9ICdCbHVldG9vdGgnO1xuZXhwb3J0IGRlZmF1bHQgQmx1ZXRvb3RoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb2xkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgNGg4YTQgNCAwIDAgMSA0IDQgNCA0IDAgMCAxLTQgNEg2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMTJoOWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnpcIlxuICB9KSk7XG59KTtcbkJvbGQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm9sZC5kaXNwbGF5TmFtZSA9ICdCb2xkJztcbmV4cG9ydCBkZWZhdWx0IEJvbGQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJvb2tPcGVuID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgM2g2YTQgNCAwIDAgMSA0IDR2MTRhMyAzIDAgMCAwLTMtM0gyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDNoLTZhNCA0IDAgMCAwLTQgNHYxNGEzIDMgMCAwIDEgMy0zaDd6XCJcbiAgfSkpO1xufSk7XG5Cb29rT3Blbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rT3Blbi5kaXNwbGF5TmFtZSA9ICdCb29rT3Blbic7XG5leHBvcnQgZGVmYXVsdCBCb29rT3BlbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9vayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDE5LjVBMi41IDIuNSAwIDAgMSA2LjUgMTdIMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjUgMkgyMHYyMEg2LjVBMi41IDIuNSAwIDAgMSA0IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJ6XCJcbiAgfSkpO1xufSk7XG5Cb29rLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvb2suZGlzcGxheU5hbWUgPSAnQm9vayc7XG5leHBvcnQgZGVmYXVsdCBCb29rOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb29rbWFyayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAyMWwtNy01LTcgNVY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbkJvb2ttYXJrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvb2ttYXJrLmRpc3BsYXlOYW1lID0gJ0Jvb2ttYXJrJztcbmV4cG9ydCBkZWZhdWx0IEJvb2ttYXJrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Cb3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm94LmRpc3BsYXlOYW1lID0gJ0JveCc7XG5leHBvcnQgZGVmYXVsdCBCb3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJyaWVmY2FzZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjFWNWEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MTZcIlxuICB9KSk7XG59KTtcbkJyaWVmY2FzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CcmllZmNhc2UuZGlzcGxheU5hbWUgPSAnQnJpZWZjYXNlJztcbmV4cG9ydCBkZWZhdWx0IEJyaWVmY2FzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FsZW5kYXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DYWxlbmRhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DYWxlbmRhci5kaXNwbGF5TmFtZSA9ICdDYWxlbmRhcic7XG5leHBvcnQgZGVmYXVsdCBDYWxlbmRhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FtZXJhT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDIxSDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoM20zLTNoNmwyIDNoNGEyIDIgMCAwIDEgMiAydjkuMzRtLTcuNzItMi4wNmE0IDQgMCAxIDEtNS41Ni01LjU2XCJcbiAgfSkpO1xufSk7XG5DYW1lcmFPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FtZXJhT2ZmLmRpc3BsYXlOYW1lID0gJ0NhbWVyYU9mZic7XG5leHBvcnQgZGVmYXVsdCBDYW1lcmFPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbWVyYSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAxOWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNGwyLTNoNmwyIDNoNGEyIDIgMCAwIDEgMiAyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxM1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuQ2FtZXJhLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhbWVyYS5kaXNwbGF5TmFtZSA9ICdDYW1lcmEnO1xuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDYXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMTYuMUE1IDUgMCAwIDEgNS45IDIwTTIgMTIuMDVBOSA5IDAgMCAxIDkuOTUgMjBNMiA4VjZhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJoLTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIyLjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkNhc3QucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FzdC5kaXNwbGF5TmFtZSA9ICdDYXN0JztcbmV4cG9ydCBkZWZhdWx0IENhc3Q7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDExLjA4VjEyYTEwIDEwIDAgMSAxLTUuOTMtOS4xNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgNCAxMiAxNC4wMSA5IDExLjAxXCJcbiAgfSkpO1xufSk7XG5DaGVja0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGVja0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdDaGVja0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBDaGVja0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hlY2tTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDExIDEyIDE0IDIyIDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMnY3YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMVwiXG4gIH0pKTtcbn0pO1xuQ2hlY2tTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hlY2tTcXVhcmUuZGlzcGxheU5hbWUgPSAnQ2hlY2tTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgNiA5IDE3IDQgMTJcIlxuICB9KSk7XG59KTtcbkNoZWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZWNrLmRpc3BsYXlOYW1lID0gJ0NoZWNrJztcbmV4cG9ydCBkZWZhdWx0IENoZWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjYgOSAxMiAxNSAxOCA5XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uRG93bi5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uRG93bic7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAxOCA5IDEyIDE1IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25MZWZ0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDE4IDE1IDEyIDkgNlwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvblJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25SaWdodC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvblJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOCAxNSAxMiA5IDYgMTVcIlxuICB9KSk7XG59KTtcbkNoZXZyb25VcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uVXAuZGlzcGxheU5hbWUgPSAnQ2hldnJvblVwJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25VcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAxMyAxMiAxOCAxNyAxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyA2IDEyIDExIDE3IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc0Rvd24uZGlzcGxheU5hbWUgPSAnQ2hldnJvbnNEb3duJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNMZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTEgMTcgNiAxMiAxMSA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOCAxNyAxMyAxMiAxOCA3XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uc0xlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNMZWZ0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uc0xlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAxNyAxOCAxMiAxMyA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDE3IDExIDEyIDYgN1wiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc1JpZ2h0LmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbnNVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDExIDEyIDYgNyAxMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTggMTIgMTMgNyAxOFwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uc1VwLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zVXAnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hyb21lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMS4xN1wiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzLjk1XCIsXG4gICAgeTE6IFwiNi4wNlwiLFxuICAgIHgyOiBcIjguNTRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwLjg4XCIsXG4gICAgeTE6IFwiMjEuOTRcIixcbiAgICB4MjogXCIxNS40NlwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5DaHJvbWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hyb21lLmRpc3BsYXlOYW1lID0gJ0Nocm9tZSc7XG5leHBvcnQgZGVmYXVsdCBDaHJvbWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsaXBib2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOFwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjhcIixcbiAgICBoZWlnaHQ6IFwiNFwiLFxuICAgIHJ4OiBcIjFcIixcbiAgICByeTogXCIxXCJcbiAgfSkpO1xufSk7XG5DbGlwYm9hcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xpcGJvYXJkLmRpc3BsYXlOYW1lID0gJ0NsaXBib2FyZCc7XG5leHBvcnQgZGVmYXVsdCBDbGlwYm9hcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDYgMTIgMTIgMTYgMTRcIlxuICB9KSk7XG59KTtcbkNsb2NrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb2NrLmRpc3BsYXlOYW1lID0gJ0Nsb2NrJztcbmV4cG9ydCBkZWZhdWx0IENsb2NrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZERyaXp6bGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNi41OEE1IDUgMCAwIDAgMTggN2gtMS4yNkE4IDggMCAxIDAgNCAxNS4yNVwiXG4gIH0pKTtcbn0pO1xuQ2xvdWREcml6emxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkRHJpenpsZS5kaXNwbGF5TmFtZSA9ICdDbG91ZERyaXp6bGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWREcml6emxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZExpZ2h0bmluZyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAxNi45QTUgNSAwIDAgMCAxOCA3aC0xLjI2YTggOCAwIDEgMC0xMS42MiA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAxMSA5IDE3IDE1IDE3IDExIDIzXCJcbiAgfSkpO1xufSk7XG5DbG91ZExpZ2h0bmluZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZExpZ2h0bmluZy5kaXNwbGF5TmFtZSA9ICdDbG91ZExpZ2h0bmluZyc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZExpZ2h0bmluZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNjEgMTYuOTVBNSA1IDAgMCAwIDE4IDEwaC0xLjI2YTggOCAwIDAgMC03LjA1LTZNNSA1YTggOCAwIDAgMCA0IDE1aDlhNSA1IDAgMCAwIDEuNy0uM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuQ2xvdWRPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRPZmYuZGlzcGxheU5hbWUgPSAnQ2xvdWRPZmYnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWRPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkUmFpbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTYuNThBNSA1IDAgMCAwIDE4IDdoLTEuMjZBOCA4IDAgMSAwIDQgMTUuMjVcIlxuICB9KSk7XG59KTtcbkNsb3VkUmFpbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZFJhaW4uZGlzcGxheU5hbWUgPSAnQ2xvdWRSYWluJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkUmFpbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRTbm93ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE3LjU4QTUgNSAwIDAgMCAxOCA4aC0xLjI2QTggOCAwIDEgMCA0IDE2LjI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiOC4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiOC4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxNi4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjE2LjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkNsb3VkU25vdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZFNub3cuZGlzcGxheU5hbWUgPSAnQ2xvdWRTbm93JztcbmV4cG9ydCBkZWZhdWx0IENsb3VkU25vdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTBoLTEuMjZBOCA4IDAgMSAwIDkgMjBoOWE1IDUgMCAwIDAgMC0xMHpcIlxuICB9KSk7XG59KTtcbkNsb3VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkLmRpc3BsYXlOYW1lID0gJ0Nsb3VkJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb2RlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTggMjIgMTIgMTYgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA2IDIgMTIgOCAxOFwiXG4gIH0pKTtcbn0pO1xuQ29kZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2RlLmRpc3BsYXlOYW1lID0gJ0NvZGUnO1xuZXhwb3J0IGRlZmF1bHQgQ29kZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZXBlbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAyMiA4LjUgMjIgMTUuNSAxMiAyMiAyIDE1LjUgMiA4LjUgMTIgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDguNSAxMiAxNS41IDIgOC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDE1LjUgMTIgOC41IDIyIDE1LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjguNVwiXG4gIH0pKTtcbn0pO1xuQ29kZXBlbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2RlcGVuLmRpc3BsYXlOYW1lID0gJ0NvZGVwZW4nO1xuZXhwb3J0IGRlZmF1bHQgQ29kZXBlbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZXNhbmRib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3LjUgNC4yMSAxMiA2LjgxIDE2LjUgNC4yMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNy41IDE5Ljc5IDcuNSAxNC42IDMgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDEyIDE2LjUgMTQuNiAxNi41IDE5Ljc5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Db2Rlc2FuZGJveC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2Rlc2FuZGJveC5kaXNwbGF5TmFtZSA9ICdDb2Rlc2FuZGJveCc7XG5leHBvcnQgZGVmYXVsdCBDb2Rlc2FuZGJveDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29mZmVlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDhoMWE0IDQgMCAwIDEgMCA4aC0xXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiA4aDE2djlhNCA0IDAgMCAxLTQgNEg2YTQgNCAwIDAgMS00LTRWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCI0XCJcbiAgfSkpO1xufSk7XG5Db2ZmZWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29mZmVlLmRpc3BsYXlOYW1lID0gJ0NvZmZlZSc7XG5leHBvcnQgZGVmYXVsdCBDb2ZmZWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbHVtbnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgM2g3YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtN20wLTE4SDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDdtMC0xOHYxOFwiXG4gIH0pKTtcbn0pO1xuQ29sdW1ucy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db2x1bW5zLmRpc3BsYXlOYW1lID0gJ0NvbHVtbnMnO1xuZXhwb3J0IGRlZmF1bHQgQ29sdW1uczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29tbWFuZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAzYTMgMyAwIDAgMC0zIDN2MTJhMyAzIDAgMCAwIDMgMyAzIDMgMCAwIDAgMy0zIDMgMyAwIDAgMC0zLTNINmEzIDMgMCAwIDAtMyAzIDMgMyAwIDAgMCAzIDMgMyAzIDAgMCAwIDMtM1Y2YTMgMyAwIDAgMC0zLTMgMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAgMyAzaDEyYTMgMyAwIDAgMCAzLTMgMyAzIDAgMCAwLTMtM3pcIlxuICB9KSk7XG59KTtcbkNvbW1hbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29tbWFuZC5kaXNwbGF5TmFtZSA9ICdDb21tYW5kJztcbmV4cG9ydCBkZWZhdWx0IENvbW1hbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbXBhc3MgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxNi4yNCA3Ljc2IDE0LjEyIDE0LjEyIDcuNzYgMTYuMjQgOS44OCA5Ljg4IDE2LjI0IDcuNzZcIlxuICB9KSk7XG59KTtcbkNvbXBhc3MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29tcGFzcy5kaXNwbGF5TmFtZSA9ICdDb21wYXNzJztcbmV4cG9ydCBkZWZhdWx0IENvbXBhc3M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcHkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI5XCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiMTNcIixcbiAgICBoZWlnaHQ6IFwiMTNcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTVINGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg5YTIgMiAwIDAgMSAyIDJ2MVwiXG4gIH0pKTtcbn0pO1xuQ29weS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3B5LmRpc3BsYXlOYW1lID0gJ0NvcHknO1xuZXhwb3J0IGRlZmF1bHQgQ29weTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyRG93bkxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDEwIDQgMTUgOSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDR2N2E0IDQgMCAwIDEtNCA0SDRcIlxuICB9KSk7XG59KTtcbkNvcm5lckRvd25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lckRvd25MZWZ0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lckRvd25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckRvd25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJEb3duUmlnaHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAxMCAyMCAxNSAxNSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNHY3YTQgNCAwIDAgMCA0IDRoMTJcIlxuICB9KSk7XG59KTtcbkNvcm5lckRvd25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJEb3duUmlnaHQuZGlzcGxheU5hbWUgPSAnQ29ybmVyRG93blJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckRvd25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyTGVmdERvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCAxNSA5IDIwIDQgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCA0aC03YTQgNCAwIDAgMC00IDR2MTJcIlxuICB9KSk7XG59KTtcbkNvcm5lckxlZnREb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lckxlZnREb3duLmRpc3BsYXlOYW1lID0gJ0Nvcm5lckxlZnREb3duJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckxlZnREb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJMZWZ0VXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCA5IDkgNCA0IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjRcIlxuICB9KSk7XG59KTtcbkNvcm5lckxlZnRVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJMZWZ0VXAuZGlzcGxheU5hbWUgPSAnQ29ybmVyTGVmdFVwJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lckxlZnRVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyUmlnaHREb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgMTUgMTUgMjAgMjAgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDRoN2E0IDQgMCAwIDEgNCA0djEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJSaWdodERvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyUmlnaHREb3duLmRpc3BsYXlOYW1lID0gJ0Nvcm5lclJpZ2h0RG93bic7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJSaWdodERvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclJpZ2h0VXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMCA5IDE1IDQgMjAgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjRcIlxuICB9KSk7XG59KTtcbkNvcm5lclJpZ2h0VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyUmlnaHRVcC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJSaWdodFVwJztcbmV4cG9ydCBkZWZhdWx0IENvcm5lclJpZ2h0VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclVwTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMTQgNCA5IDkgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDIwdi03YTQgNCAwIDAgMC00LTRINFwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyVXBMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclVwTGVmdC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJVcExlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyVXBMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJVcFJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTQgMjAgOSAxNSA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAyMHYtN2E0IDQgMCAwIDEgNC00aDEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJVcFJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclVwUmlnaHQuZGlzcGxheU5hbWUgPSAnQ29ybmVyVXBSaWdodCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJVcFJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcHUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI0XCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiMTZcIixcbiAgICBoZWlnaHQ6IFwiMTZcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOVwiLFxuICAgIHk6IFwiOVwiLFxuICAgIHdpZHRoOiBcIjZcIixcbiAgICBoZWlnaHQ6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQ3B1LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNwdS5kaXNwbGF5TmFtZSA9ICdDcHUnO1xuZXhwb3J0IGRlZmF1bHQgQ3B1OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcmVkaXRDYXJkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5DcmVkaXRDYXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNyZWRpdENhcmQuZGlzcGxheU5hbWUgPSAnQ3JlZGl0Q2FyZCc7XG5leHBvcnQgZGVmYXVsdCBDcmVkaXRDYXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcm9wID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMTMgMUw2IDE2YTIgMiAwIDAgMCAyIDJoMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDYuMTNMMTYgNmEyIDIgMCAwIDEgMiAydjE1XCJcbiAgfSkpO1xufSk7XG5Dcm9wLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNyb3AuZGlzcGxheU5hbWUgPSAnQ3JvcCc7XG5leHBvcnQgZGVmYXVsdCBDcm9wOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDcm9zc2hhaXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkNyb3NzaGFpci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Dcm9zc2hhaXIuZGlzcGxheU5hbWUgPSAnQ3Jvc3NoYWlyJztcbmV4cG9ydCBkZWZhdWx0IENyb3NzaGFpcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGF0YWJhc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZWxsaXBzZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcng6IFwiOVwiLFxuICAgIHJ5OiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMmMwIDEuNjYtNCAzLTkgM3MtOS0xLjM0LTktM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjVcIlxuICB9KSk7XG59KTtcbkRhdGFiYXNlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRhdGFiYXNlLmRpc3BsYXlOYW1lID0gJ0RhdGFiYXNlJztcbmV4cG9ydCBkZWZhdWx0IERhdGFiYXNlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEZWxldGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgNEg4bC03IDggNyA4aDEzYTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0yelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5EZWxldGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGVsZXRlLmRpc3BsYXlOYW1lID0gJ0RlbGV0ZSc7XG5leHBvcnQgZGVmYXVsdCBEZWxldGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpc2MgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuRGlzYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXNjLmRpc3BsYXlOYW1lID0gJ0Rpc2MnO1xuZXhwb3J0IGRlZmF1bHQgRGlzYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSk7XG59KTtcbkRpdmlkZUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGVDaXJjbGUuZGlzcGxheU5hbWUgPSAnRGl2aWRlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSk7XG59KTtcbkRpdmlkZVNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGVTcXVhcmUuZGlzcGxheU5hbWUgPSAnRGl2aWRlU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZVNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGl2aWRlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuRGl2aWRlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRpdmlkZS5kaXNwbGF5TmFtZSA9ICdEaXZpZGUnO1xuZXhwb3J0IGRlZmF1bHQgRGl2aWRlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEb2xsYXJTaWduID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDZcIlxuICB9KSk7XG59KTtcbkRvbGxhclNpZ24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRG9sbGFyU2lnbi5kaXNwbGF5TmFtZSA9ICdEb2xsYXJTaWduJztcbmV4cG9ydCBkZWZhdWx0IERvbGxhclNpZ247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERvd25sb2FkQ2xvdWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI4IDE3IDEyIDIxIDE2IDE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC44OCAxOC4wOUE1IDUgMCAwIDAgMTggOWgtMS4yNkE4IDggMCAxIDAgMyAxNi4yOVwiXG4gIH0pKTtcbn0pO1xuRG93bmxvYWRDbG91ZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Eb3dubG9hZENsb3VkLmRpc3BsYXlOYW1lID0gJ0Rvd25sb2FkQ2xvdWQnO1xuZXhwb3J0IGRlZmF1bHQgRG93bmxvYWRDbG91ZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRG93bmxvYWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAxMCAxMiAxNSAxNyAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSk7XG59KTtcbkRvd25sb2FkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRvd25sb2FkLmRpc3BsYXlOYW1lID0gJ0Rvd25sb2FkJztcbmV4cG9ydCBkZWZhdWx0IERvd25sb2FkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEcmliYmJsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41NiAyLjc1YzQuMzcgNi4wMyA2LjAyIDkuNDIgOC4wMyAxNy43Mm0yLjU0LTE1LjM4Yy0zLjcyIDQuMzUtOC45NCA1LjY2LTE2Ljg4IDUuODVtMTkuNSAxLjljLTMuNS0uOTMtNi42My0uODItOC45NCAwLTIuNTguOTItNS4wMSAyLjg2LTcuNDQgNi4zMlwiXG4gIH0pKTtcbn0pO1xuRHJpYmJibGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRHJpYmJibGUuZGlzcGxheU5hbWUgPSAnRHJpYmJibGUnO1xuZXhwb3J0IGRlZmF1bHQgRHJpYmJibGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERyb3BsZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMi42OWw1LjY2IDUuNjZhOCA4IDAgMSAxLTExLjMxIDB6XCJcbiAgfSkpO1xufSk7XG5Ecm9wbGV0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRyb3BsZXQuZGlzcGxheU5hbWUgPSAnRHJvcGxldCc7XG5leHBvcnQgZGVmYXVsdCBEcm9wbGV0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFZGl0MiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAzYTIuODI4IDIuODI4IDAgMSAxIDQgNEw3LjUgMjAuNSAyIDIybDEuNS01LjVMMTcgM3pcIlxuICB9KSk7XG59KTtcbkVkaXQyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkVkaXQyLmRpc3BsYXlOYW1lID0gJ0VkaXQyJztcbmV4cG9ydCBkZWZhdWx0IEVkaXQyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFZGl0MyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyMGg5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNSAzLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDcgMTlsLTQgMSAxLTRMMTYuNSAzLjV6XCJcbiAgfSkpO1xufSk7XG5FZGl0My5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FZGl0My5kaXNwbGF5TmFtZSA9ICdFZGl0Myc7XG5leHBvcnQgZGVmYXVsdCBFZGl0MzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMSA0SDRhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC41IDIuNWEyLjEyMSAyLjEyMSAwIDAgMSAzIDNMMTIgMTVsLTQgMSAxLTQgOS41LTkuNXpcIlxuICB9KSk7XG59KTtcbkVkaXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRWRpdC5kaXNwbGF5TmFtZSA9ICdFZGl0JztcbmV4cG9ydCBkZWZhdWx0IEVkaXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV4dGVybmFsTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAxM3Y2YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmg2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSk7XG59KTtcbkV4dGVybmFsTGluay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FeHRlcm5hbExpbmsuZGlzcGxheU5hbWUgPSAnRXh0ZXJuYWxMaW5rJztcbmV4cG9ydCBkZWZhdWx0IEV4dGVybmFsTGluazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRXllT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3Ljk0IDE3Ljk0QTEwLjA3IDEwLjA3IDAgMCAxIDEyIDIwYy03IDAtMTEtOC0xMS04YTE4LjQ1IDE4LjQ1IDAgMCAxIDUuMDYtNS45NE05LjkgNC4yNEE5LjEyIDkuMTIgMCAwIDEgMTIgNGM3IDAgMTEgOCAxMSA4YTE4LjUgMTguNSAwIDAgMS0yLjE2IDMuMTltLTYuNzItMS4wN2EzIDMgMCAxIDEtNC4yNC00LjI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5FeWVPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXllT2ZmLmRpc3BsYXlOYW1lID0gJ0V5ZU9mZic7XG5leHBvcnQgZGVmYXVsdCBFeWVPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV5ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDEyczQtOCAxMS04IDExIDggMTEgOC00IDgtMTEgOC0xMS04LTExLTh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5FeWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXllLmRpc3BsYXlOYW1lID0gJ0V5ZSc7XG5leHBvcnQgZGVmYXVsdCBFeWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZhY2Vib29rID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDJoLTNhNSA1IDAgMCAwLTUgNXYzSDd2NGgzdjhoNHYtOGgzbDEtNGgtNFY3YTEgMSAwIDAgMSAxLTFoM3pcIlxuICB9KSk7XG59KTtcbkZhY2Vib29rLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZhY2Vib29rLmRpc3BsYXlOYW1lID0gJ0ZhY2Vib29rJztcbmV4cG9ydCBkZWZhdWx0IEZhY2Vib29rOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGYXN0Rm9yd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTkgMjIgMTIgMTMgNSAxMyAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyIDE5IDExIDEyIDIgNSAyIDE5XCJcbiAgfSkpO1xufSk7XG5GYXN0Rm9yd2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GYXN0Rm9yd2FyZC5kaXNwbGF5TmFtZSA9ICdGYXN0Rm9yd2FyZCc7XG5leHBvcnQgZGVmYXVsdCBGYXN0Rm9yd2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmVhdGhlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC4yNCAxMi4yNGE2IDYgMCAwIDAtOC40OS04LjQ5TDUgMTAuNVYxOWg4LjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTcuNVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GZWF0aGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZlYXRoZXIuZGlzcGxheU5hbWUgPSAnRmVhdGhlcic7XG5leHBvcnQgZGVmYXVsdCBGZWF0aGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWdtYSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmgzLjVhMy41IDMuNSAwIDEgMSAwIDdIMTJWMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxMi41YTMuNSAzLjUgMCAxIDEgNyAwIDMuNSAzLjUgMCAxIDEtNyAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMi41QTMuNSAzLjUgMCAwIDEgOC41IDlIMTJ2N0g4LjVBMy41IDMuNSAwIDAgMSA1IDEyLjV6XCJcbiAgfSkpO1xufSk7XG5GaWdtYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWdtYS5kaXNwbGF5TmFtZSA9ICdGaWdtYSc7XG5leHBvcnQgZGVmYXVsdCBGaWdtYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsZU1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMiAxNCA4IDIwIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GaWxlTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZU1pbnVzLmRpc3BsYXlOYW1lID0gJ0ZpbGVNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBGaWxlTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGVQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMiAxNCA4IDIwIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcbkZpbGVQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVQbHVzLmRpc3BsYXlOYW1lID0gJ0ZpbGVQbHVzJztcbmV4cG9ydCBkZWZhdWx0IEZpbGVQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlVGV4dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDkgOSA5IDggOVwiXG4gIH0pKTtcbn0pO1xuRmlsZVRleHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZVRleHQuZGlzcGxheU5hbWUgPSAnRmlsZVRleHQnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZVRleHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjl6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMyAyIDEzIDkgMjAgOVwiXG4gIH0pKTtcbn0pO1xuRmlsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxlLmRpc3BsYXlOYW1lID0gJ0ZpbGUnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsbSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjIuMThcIixcbiAgICByeTogXCIyLjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pKTtcbn0pO1xuRmlsbS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxtLmRpc3BsYXlOYW1lID0gJ0ZpbG0nO1xuZXhwb3J0IGRlZmF1bHQgRmlsbTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsdGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMiAzIDIgMyAxMCAxMi40NiAxMCAxOSAxNCAyMSAxNCAxMi40NiAyMiAzXCJcbiAgfSkpO1xufSk7XG5GaWx0ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsdGVyLmRpc3BsYXlOYW1lID0gJ0ZpbHRlcic7XG5leHBvcnQgZGVmYXVsdCBGaWx0ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZsYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxNXMxLTEgNC0xIDUgMiA4IDIgNC0xIDQtMVYzcy0xIDEtNCAxLTUtMi04LTItNCAxLTQgMXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcbkZsYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmxhZy5kaXNwbGF5TmFtZSA9ICdGbGFnJztcbmV4cG9ydCBkZWZhdWx0IEZsYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlck1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuRm9sZGVyTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRm9sZGVyTWludXMuZGlzcGxheU5hbWUgPSAnRm9sZGVyTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgRm9sZGVyTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlclBsdXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkZvbGRlclBsdXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRm9sZGVyUGx1cy5kaXNwbGF5TmFtZSA9ICdGb2xkZXJQbHVzJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlclBsdXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZvbGRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyelwiXG4gIH0pKTtcbn0pO1xuRm9sZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlci5kaXNwbGF5TmFtZSA9ICdGb2xkZXInO1xuZXhwb3J0IGRlZmF1bHQgRm9sZGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGcmFtZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwbDcgN3YtN20tNyAwaDdcIlxuICB9KSk7XG59KTtcbkZyYW1lci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GcmFtZXIuZGlzcGxheU5hbWUgPSAnRnJhbWVyJztcbmV4cG9ydCBkZWZhdWx0IEZyYW1lcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRnJvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcbkZyb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZyb3duLmRpc3BsYXlOYW1lID0gJ0Zyb3duJztcbmV4cG9ydCBkZWZhdWx0IEZyb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgMTIgMjAgMjIgNCAyMiA0IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA3SDcuNWEyLjUgMi41IDAgMCAxIDAtNUMxMSAyIDEyIDcgMTIgN3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiA3aDQuNWEyLjUgMi41IDAgMCAwIDAtNUMxMyAyIDEyIDcgMTIgN3pcIlxuICB9KSk7XG59KTtcbkdpZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2lmdC5kaXNwbGF5TmFtZSA9ICdHaWZ0JztcbmV4cG9ydCBkZWZhdWx0IEdpZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdEJyYW5jaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA5YTkgOSAwIDAgMS05IDlcIlxuICB9KSk7XG59KTtcbkdpdEJyYW5jaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRCcmFuY2guZGlzcGxheU5hbWUgPSAnR2l0QnJhbmNoJztcbmV4cG9ydCBkZWZhdWx0IEdpdEJyYW5jaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0Q29tbWl0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEuMDVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3LjAxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMi45NlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5HaXRDb21taXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0Q29tbWl0LmRpc3BsYXlOYW1lID0gJ0dpdENvbW1pdCc7XG5leHBvcnQgZGVmYXVsdCBHaXRDb21taXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdE1lcmdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjZcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDIxVjlhOSA5IDAgMCAwIDkgOVwiXG4gIH0pKTtcbn0pO1xuR2l0TWVyZ2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0TWVyZ2UuZGlzcGxheU5hbWUgPSAnR2l0TWVyZ2UnO1xuZXhwb3J0IGRlZmF1bHQgR2l0TWVyZ2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdFB1bGxSZXF1ZXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjZcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyA2aDNhMiAyIDAgMCAxIDIgMnY3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbkdpdFB1bGxSZXF1ZXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdFB1bGxSZXF1ZXN0LmRpc3BsYXlOYW1lID0gJ0dpdFB1bGxSZXF1ZXN0JztcbmV4cG9ydCBkZWZhdWx0IEdpdFB1bGxSZXF1ZXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRIdWIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxOWMtNSAxLjUtNS0yLjUtNy0zbTE0IDZ2LTMuODdhMy4zNyAzLjM3IDAgMCAwLS45NC0yLjYxYzMuMTQtLjM1IDYuNDQtMS41NCA2LjQ0LTdBNS40NCA1LjQ0IDAgMCAwIDIwIDQuNzcgNS4wNyA1LjA3IDAgMCAwIDE5LjkxIDFTMTguNzMuNjUgMTYgMi40OGExMy4zOCAxMy4zOCAwIDAgMC03IDBDNi4yNy42NSA1LjA5IDEgNS4wOSAxQTUuMDcgNS4wNyAwIDAgMCA1IDQuNzdhNS40NCA1LjQ0IDAgMCAwLTEuNSAzLjc4YzAgNS40MiAzLjMgNi42MSA2LjQ0IDdBMy4zNyAzLjM3IDAgMCAwIDkgMTguMTNWMjJcIlxuICB9KSk7XG59KTtcbkdpdEh1Yi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRIdWIuZGlzcGxheU5hbWUgPSAnR2l0SHViJztcbmV4cG9ydCBkZWZhdWx0IEdpdEh1YjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0bGFiID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjY1IDE0LjM5TDEyIDIyLjEzIDEuMzUgMTQuMzlhLjg0Ljg0IDAgMCAxLS4zLS45NGwxLjIyLTMuNzggMi40NC03LjUxQS40Mi40MiAwIDAgMSA0LjgyIDJhLjQzLjQzIDAgMCAxIC41OCAwIC40Mi40MiAwIDAgMSAuMTEuMThsMi40NCA3LjQ5aDguMWwyLjQ0LTcuNTFBLjQyLjQyIDAgMCAxIDE4LjYgMmEuNDMuNDMgMCAwIDEgLjU4IDAgLjQyLjQyIDAgMCAxIC4xMS4xOGwyLjQ0IDcuNTFMMjMgMTMuNDVhLjg0Ljg0IDAgMCAxLS4zNS45NHpcIlxuICB9KSk7XG59KTtcbkdpdGxhYi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRsYWIuZGlzcGxheU5hbWUgPSAnR2l0bGFiJztcbmV4cG9ydCBkZWZhdWx0IEdpdGxhYjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2xvYmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyYTE1LjMgMTUuMyAwIDAgMSA0IDEwIDE1LjMgMTUuMyAwIDAgMS00IDEwIDE1LjMgMTUuMyAwIDAgMS00LTEwIDE1LjMgMTUuMyAwIDAgMSA0LTEwelwiXG4gIH0pKTtcbn0pO1xuR2xvYmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2xvYmUuZGlzcGxheU5hbWUgPSAnR2xvYmUnO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdyaWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiN1wiLFxuICAgIGhlaWdodDogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMTRcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiN1wiLFxuICAgIGhlaWdodDogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pKTtcbn0pO1xuR3JpZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HcmlkLmRpc3BsYXlOYW1lID0gJ0dyaWQnO1xuZXhwb3J0IGRlZmF1bHQgR3JpZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGFyZERyaXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCI2LjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTAuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuSGFyZERyaXZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhhcmREcml2ZS5kaXNwbGF5TmFtZSA9ICdIYXJkRHJpdmUnO1xuZXhwb3J0IGRlZmF1bHQgSGFyZERyaXZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIYXNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbkhhc2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSGFzaC5kaXNwbGF5TmFtZSA9ICdIYXNoJztcbmV4cG9ydCBkZWZhdWx0IEhhc2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhlYWRwaG9uZXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxOHYtNmE5IDkgMCAwIDEgMTggMHY2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTlhMiAyIDAgMCAxLTIgMmgtMWEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoM3pNMyAxOWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAwIDItMnYtM2EyIDIgMCAwIDAtMi0ySDN6XCJcbiAgfSkpO1xufSk7XG5IZWFkcGhvbmVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlYWRwaG9uZXMuZGlzcGxheU5hbWUgPSAnSGVhZHBob25lcyc7XG5leHBvcnQgZGVmYXVsdCBIZWFkcGhvbmVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC44NCA0LjYxYTUuNSA1LjUgMCAwIDAtNy43OCAwTDEyIDUuNjdsLTEuMDYtMS4wNmE1LjUgNS41IDAgMCAwLTcuNzggNy43OGwxLjA2IDEuMDZMMTIgMjEuMjNsNy43OC03Ljc4IDEuMDYtMS4wNmE1LjUgNS41IDAgMCAwIDAtNy43OHpcIlxuICB9KSk7XG59KTtcbkhlYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlYXJ0LmRpc3BsYXlOYW1lID0gJ0hlYXJ0JztcbmV4cG9ydCBkZWZhdWx0IEhlYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWxwQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSkpO1xufSk7XG5IZWxwQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhlbHBDaXJjbGUuZGlzcGxheU5hbWUgPSAnSGVscENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBIZWxwQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZXhhZ29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pKTtcbn0pO1xuSGV4YWdvbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZXhhZ29uLmRpc3BsYXlOYW1lID0gJ0hleGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgSGV4YWdvbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSG9tZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDlsOS03IDkgN3YxMWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMjIgOSAxMiAxNSAxMiAxNSAyMlwiXG4gIH0pKTtcbn0pO1xuSG9tZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ib21lLmRpc3BsYXlOYW1lID0gJ0hvbWUnO1xuZXhwb3J0IGRlZmF1bHQgSG9tZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW1hZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiOC41XCIsXG4gICAgcjogXCIxLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDE1IDE2IDEwIDUgMjFcIlxuICB9KSk7XG59KTtcbkltYWdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkltYWdlLmRpc3BsYXlOYW1lID0gJ0ltYWdlJztcbmV4cG9ydCBkZWZhdWx0IEltYWdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbmJveCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDEyIDE2IDEyIDE0IDE1IDEwIDE1IDggMTIgMiAxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUuNDUgNS4xMUwyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExelwiXG4gIH0pKTtcbn0pO1xuSW5ib3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSW5ib3guZGlzcGxheU5hbWUgPSAnSW5ib3gnO1xuZXhwb3J0IGRlZmF1bHQgSW5ib3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEluZm8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5JbmZvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkluZm8uZGlzcGxheU5hbWUgPSAnSW5mbyc7XG5leHBvcnQgZGVmYXVsdCBJbmZvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbnN0YWdyYW0gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCI1XCIsXG4gICAgcnk6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNy41XCIsXG4gICAgeTE6IFwiNi41XCIsXG4gICAgeDI6IFwiMTcuNTFcIixcbiAgICB5MjogXCI2LjVcIlxuICB9KSk7XG59KTtcbkluc3RhZ3JhbS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbnN0YWdyYW0uZGlzcGxheU5hbWUgPSAnSW5zdGFncmFtJztcbmV4cG9ydCBkZWZhdWx0IEluc3RhZ3JhbTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSXRhbGljID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbkl0YWxpYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JdGFsaWMuZGlzcGxheU5hbWUgPSAnSXRhbGljJztcbmV4cG9ydCBkZWZhdWx0IEl0YWxpYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgS2V5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDJsLTIgMm0tNy42MSA3LjYxYTUuNSA1LjUgMCAxIDEtNy43NzggNy43NzggNS41IDUuNSAwIDAgMSA3Ljc3Ny03Ljc3N3ptMCAwTDE1LjUgNy41bTAgMGwzIDNMMjIgN2wtMy0zbS0zLjUgMy41TDE5IDRcIlxuICB9KSk7XG59KTtcbktleS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5LZXkuZGlzcGxheU5hbWUgPSAnS2V5JztcbmV4cG9ydCBkZWZhdWx0IEtleTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGF5ZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDIgNyAxMiAxMiAyMiA3IDEyIDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIgMTcgMTIgMjIgMjIgMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIgMTIgMTIgMTcgMjIgMTJcIlxuICB9KSk7XG59KTtcbkxheWVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MYXllcnMuZGlzcGxheU5hbWUgPSAnTGF5ZXJzJztcbmV4cG9ydCBkZWZhdWx0IExheWVyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGF5b3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5MYXlvdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGF5b3V0LmRpc3BsYXlOYW1lID0gJ0xheW91dCc7XG5leHBvcnQgZGVmYXVsdCBMYXlvdXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpZmVCdW95ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjkuMTdcIixcbiAgICB5MjogXCI5LjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCIxNC44M1wiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC44M1wiLFxuICAgIHkxOiBcIjkuMTdcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjQuOTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC44M1wiLFxuICAgIHkxOiBcIjkuMTdcIixcbiAgICB4MjogXCIxOC4zNlwiLFxuICAgIHkyOiBcIjUuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiMTkuMDdcIixcbiAgICB4MjogXCI5LjE3XCIsXG4gICAgeTI6IFwiMTQuODNcIlxuICB9KSk7XG59KTtcbkxpZmVCdW95LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpZmVCdW95LmRpc3BsYXlOYW1lID0gJ0xpZmVCdW95JztcbmV4cG9ydCBkZWZhdWx0IExpZmVCdW95OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaW5rMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNSA3aDNhNSA1IDAgMCAxIDUgNSA1IDUgMCAwIDEtNSA1aC0zbS02IDBINmE1IDUgMCAwIDEtNS01IDUgNSAwIDAgMSA1LTVoM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkxpbmsyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpbmsyLmRpc3BsYXlOYW1lID0gJ0xpbmsyJztcbmV4cG9ydCBkZWZhdWx0IExpbmsyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaW5rID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxMWE1IDUgMCAwIDAtNy41NC0uNTRsLTMgM2E1IDUgMCAwIDAgNy4wNyA3LjA3bDEuNzEtMS43MVwiXG4gIH0pKTtcbn0pO1xuTGluay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaW5rLmRpc3BsYXlOYW1lID0gJ0xpbmsnO1xuZXhwb3J0IGRlZmF1bHQgTGluazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGlua2VkaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgOGE2IDYgMCAwIDEgNiA2djdoLTR2LTdhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAydjdoLTR2LTdhNiA2IDAgMCAxIDYtNnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI0XCIsXG4gICAgaGVpZ2h0OiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI0XCIsXG4gICAgY3k6IFwiNFwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuTGlua2VkaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGlua2VkaW4uZGlzcGxheU5hbWUgPSAnTGlua2VkaW4nO1xuZXhwb3J0IGRlZmF1bHQgTGlua2VkaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpc3QgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzLjAxXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcbkxpc3QucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGlzdC5kaXNwbGF5TmFtZSA9ICdMaXN0JztcbmV4cG9ydCBkZWZhdWx0IExpc3Q7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvYWRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuOTNcIixcbiAgICB5MTogXCI0LjkzXCIsXG4gICAgeDI6IFwiNy43NlwiLFxuICAgIHkyOiBcIjcuNzZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNi4yNFwiLFxuICAgIHkxOiBcIjE2LjI0XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCIxOS4wN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjE5LjA3XCIsXG4gICAgeDI6IFwiNy43NlwiLFxuICAgIHkyOiBcIjE2LjI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuMjRcIixcbiAgICB5MTogXCI3Ljc2XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCI0LjkzXCJcbiAgfSkpO1xufSk7XG5Mb2FkZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9hZGVyLmRpc3BsYXlOYW1lID0gJ0xvYWRlcic7XG5leHBvcnQgZGVmYXVsdCBMb2FkZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxMVwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjExXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExVjdhNSA1IDAgMCAxIDEwIDB2NFwiXG4gIH0pKTtcbn0pO1xuTG9jay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Mb2NrLmRpc3BsYXlOYW1lID0gJ0xvY2snO1xuZXhwb3J0IGRlZmF1bHQgTG9jazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTG9nSW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgM2g0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMmgtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgMTcgMTUgMTIgMTAgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkxvZ0luLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvZ0luLmRpc3BsYXlOYW1lID0gJ0xvZ0luJztcbmV4cG9ydCBkZWZhdWx0IExvZ0luOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2dPdXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE3IDIxIDEyIDE2IDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Mb2dPdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9nT3V0LmRpc3BsYXlOYW1lID0gJ0xvZ091dCc7XG5leHBvcnQgZGVmYXVsdCBMb2dPdXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1haWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDE2YzEuMSAwIDIgLjkgMiAydjEyYzAgMS4xLS45IDItMiAySDRjLTEuMSAwLTItLjktMi0yVjZjMC0xLjEuOS0yIDItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyLDYgMTIsMTMgMiw2XCJcbiAgfSkpO1xufSk7XG5NYWlsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1haWwuZGlzcGxheU5hbWUgPSAnTWFpbCc7XG5leHBvcnQgZGVmYXVsdCBNYWlsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXBQaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTBjMCA3LTkgMTMtOSAxM3MtOS02LTktMTNhOSA5IDAgMCAxIDE4IDB6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEwXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5NYXBQaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWFwUGluLmRpc3BsYXlOYW1lID0gJ01hcFBpbic7XG5leHBvcnQgZGVmYXVsdCBNYXBQaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1hcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMSA2IDEgMjIgOCAxOCAxNiAyMiAyMyAxOCAyMyAyIDE2IDYgOCAyIDEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pKTtcbn0pO1xuTWFwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1hcC5kaXNwbGF5TmFtZSA9ICdNYXAnO1xuZXhwb3J0IGRlZmF1bHQgTWFwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXhpbWl6ZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNSAzIDIxIDMgMjEgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAyMSAzIDIxIDMgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuTWF4aW1pemUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1heGltaXplMi5kaXNwbGF5TmFtZSA9ICdNYXhpbWl6ZTInO1xuZXhwb3J0IGRlZmF1bHQgTWF4aW1pemUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXhpbWl6ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDNINWEyIDIgMCAwIDAtMiAydjNtMTggMFY1YTIgMiAwIDAgMC0yLTJoLTNtMCAxOGgzYTIgMiAwIDAgMCAyLTJ2LTNNMyAxNnYzYTIgMiAwIDAgMCAyIDJoM1wiXG4gIH0pKTtcbn0pO1xuTWF4aW1pemUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWF4aW1pemUuZGlzcGxheU5hbWUgPSAnTWF4aW1pemUnO1xuZXhwb3J0IGRlZmF1bHQgTWF4aW1pemU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1laCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNS4wMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcbk1laC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZWguZGlzcGxheU5hbWUgPSAnTWVoJztcbmV4cG9ydCBkZWZhdWx0IE1laDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVudSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5NZW51LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1lbnUuZGlzcGxheU5hbWUgPSAnTWVudSc7XG5leHBvcnQgZGVmYXVsdCBNZW51OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNZXNzYWdlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDExLjVhOC4zOCA4LjM4IDAgMCAxLS45IDMuOCA4LjUgOC41IDAgMCAxLTcuNiA0LjcgOC4zOCA4LjM4IDAgMCAxLTMuOC0uOUwzIDIxbDEuOS01LjdhOC4zOCA4LjM4IDAgMCAxLS45LTMuOCA4LjUgOC41IDAgMCAxIDQuNy03LjYgOC4zOCA4LjM4IDAgMCAxIDMuOC0uOWguNWE4LjQ4IDguNDggMCAwIDEgOCA4di41elwiXG4gIH0pKTtcbn0pO1xuTWVzc2FnZUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZXNzYWdlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ01lc3NhZ2VDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVzc2FnZVNxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNWEyIDIgMCAwIDEtMiAySDdsLTQgNFY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbk1lc3NhZ2VTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVzc2FnZVNxdWFyZS5kaXNwbGF5TmFtZSA9ICdNZXNzYWdlU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pY09mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDl2M2EzIDMgMCAwIDAgNS4xMiAyLjEyTTE1IDkuMzRWNGEzIDMgMCAwIDAtNS45NC0uNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE2Ljk1QTcgNyAwIDAgMSA1IDEydi0ybTE0IDB2MmE3IDcgMCAwIDEtLjExIDEuMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbk1pY09mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaWNPZmYuZGlzcGxheU5hbWUgPSAnTWljT2ZmJztcbmV4cG9ydCBkZWZhdWx0IE1pY09mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWljID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDFhMyAzIDAgMCAwLTMgM3Y4YTMgMyAwIDAgMCA2IDBWNGEzIDMgMCAwIDAtMy0zelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbk1pYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaWMuZGlzcGxheU5hbWUgPSAnTWljJztcbmV4cG9ydCBkZWZhdWx0IE1pYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWluaW1pemUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCAxNCAxMCAxNCAxMCAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjAgMTAgMTQgMTAgMTQgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5NaW5pbWl6ZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWluaW1pemUyLmRpc3BsYXlOYW1lID0gJ01pbmltaXplMic7XG5leHBvcnQgZGVmYXVsdCBNaW5pbWl6ZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbmltaXplID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggM3YzYTIgMiAwIDAgMS0yIDJIM20xOCAwaC0zYTIgMiAwIDAgMS0yLTJWM20wIDE4di0zYTIgMiAwIDAgMSAyLTJoM00zIDE2aDNhMiAyIDAgMCAxIDIgMnYzXCJcbiAgfSkpO1xufSk7XG5NaW5pbWl6ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW5pbWl6ZS5kaXNwbGF5TmFtZSA9ICdNaW5pbWl6ZSc7XG5leHBvcnQgZGVmYXVsdCBNaW5pbWl6ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWludXNDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ01pbnVzQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW51c1NxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuTWludXNTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWludXNTcXVhcmUuZGlzcGxheU5hbWUgPSAnTWludXNTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgTWludXNTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzLmRpc3BsYXlOYW1lID0gJ01pbnVzJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb25pdG9yID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcbk1vbml0b3IucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9uaXRvci5kaXNwbGF5TmFtZSA9ICdNb25pdG9yJztcbmV4cG9ydCBkZWZhdWx0IE1vbml0b3I7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTIuNzlBOSA5IDAgMSAxIDExLjIxIDMgNyA3IDAgMCAwIDIxIDEyLjc5elwiXG4gIH0pKTtcbn0pO1xuTW9vbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb29uLmRpc3BsYXlOYW1lID0gJ01vb24nO1xuZXhwb3J0IGRlZmF1bHQgTW9vbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9yZUhvcml6b250YWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOVwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjFcIlxuICB9KSk7XG59KTtcbk1vcmVIb3Jpem9udGFsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vcmVIb3Jpem9udGFsLmRpc3BsYXlOYW1lID0gJ01vcmVIb3Jpem9udGFsJztcbmV4cG9ydCBkZWZhdWx0IE1vcmVIb3Jpem9udGFsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb3JlVmVydGljYWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTlcIixcbiAgICByOiBcIjFcIlxuICB9KSk7XG59KTtcbk1vcmVWZXJ0aWNhbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3JlVmVydGljYWwuZGlzcGxheU5hbWUgPSAnTW9yZVZlcnRpY2FsJztcbmV4cG9ydCBkZWZhdWx0IE1vcmVWZXJ0aWNhbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW91c2VQb2ludGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgM2w3LjA3IDE2Ljk3IDIuNTEtNy4zOSA3LjM5LTIuNTFMMyAzelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDEzbDYgNlwiXG4gIH0pKTtcbn0pO1xuTW91c2VQb2ludGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vdXNlUG9pbnRlci5kaXNwbGF5TmFtZSA9ICdNb3VzZVBvaW50ZXInO1xuZXhwb3J0IGRlZmF1bHQgTW91c2VQb2ludGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb3ZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNSA5IDIgMTIgNSAxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSA1IDEyIDIgMTUgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTkgMTIgMjIgOSAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgOSAyMiAxMiAxOSAxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSkpO1xufSk7XG5Nb3ZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vdmUuZGlzcGxheU5hbWUgPSAnTW92ZSc7XG5leHBvcnQgZGVmYXVsdCBNb3ZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNdXNpYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk05IDE4VjVsMTItMnYxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOFwiLFxuICAgIGN5OiBcIjE2XCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5NdXNpYy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NdXNpYy5kaXNwbGF5TmFtZSA9ICdNdXNpYyc7XG5leHBvcnQgZGVmYXVsdCBNdXNpYzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTmF2aWdhdGlvbjIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDIgMTkgMjEgMTIgMTcgNSAyMSAxMiAyXCJcbiAgfSkpO1xufSk7XG5OYXZpZ2F0aW9uMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5OYXZpZ2F0aW9uMi5kaXNwbGF5TmFtZSA9ICdOYXZpZ2F0aW9uMic7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTmF2aWdhdGlvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMyAxMSAyMiAyIDEzIDIxIDExIDEzIDMgMTFcIlxuICB9KSk7XG59KTtcbk5hdmlnYXRpb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTmF2aWdhdGlvbi5kaXNwbGF5TmFtZSA9ICdOYXZpZ2F0aW9uJztcbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSk7XG59KTtcbk9jdGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuT2N0YWdvbi5kaXNwbGF5TmFtZSA9ICdPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IE9jdGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhY2thZ2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuNVwiLFxuICAgIHkxOiBcIjkuNFwiLFxuICAgIHgyOiBcIjcuNVwiLFxuICAgIHkyOiBcIjQuMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMi4wOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBhY2thZ2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGFja2FnZS5kaXNwbGF5TmFtZSA9ICdQYWNrYWdlJztcbmV4cG9ydCBkZWZhdWx0IFBhY2thZ2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhcGVyY2xpcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS40NCAxMS4wNWwtOS4xOSA5LjE5YTYgNiAwIDAgMS04LjQ5LTguNDlsOS4xOS05LjE5YTQgNCAwIDAgMSA1LjY2IDUuNjZsLTkuMiA5LjE5YTIgMiAwIDAgMS0yLjgzLTIuODNsOC40OS04LjQ4XCJcbiAgfSkpO1xufSk7XG5QYXBlcmNsaXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGFwZXJjbGlwLmRpc3BsYXlOYW1lID0gJ1BhcGVyY2xpcCc7XG5leHBvcnQgZGVmYXVsdCBQYXBlcmNsaXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhdXNlQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuUGF1c2VDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGF1c2VDaXJjbGUuZGlzcGxheU5hbWUgPSAnUGF1c2VDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGF1c2VDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBhdXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNlwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjRcIixcbiAgICBoZWlnaHQ6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCI0XCIsXG4gICAgd2lkdGg6IFwiNFwiLFxuICAgIGhlaWdodDogXCIxNlwiXG4gIH0pKTtcbn0pO1xuUGF1c2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGF1c2UuZGlzcGxheU5hbWUgPSAnUGF1c2UnO1xuZXhwb3J0IGRlZmF1bHQgUGF1c2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBlblRvb2wgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTlsNy03IDMgMy03IDctMy0zelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDEzbC0xLjUtNy41TDIgMmwzLjUgMTQuNUwxMyAxOGw1LTV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMiAybDcuNTg2IDcuNTg2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCIyXCJcbiAgfSkpO1xufSk7XG5QZW5Ub29sLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBlblRvb2wuZGlzcGxheU5hbWUgPSAnUGVuVG9vbCc7XG5leHBvcnQgZGVmYXVsdCBQZW5Ub29sOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQZXJjZW50ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNi41XCIsXG4gICAgY3k6IFwiNi41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE3LjVcIixcbiAgICBjeTogXCIxNy41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSk7XG59KTtcblBlcmNlbnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGVyY2VudC5kaXNwbGF5TmFtZSA9ICdQZXJjZW50JztcbmV4cG9ydCBkZWZhdWx0IFBlcmNlbnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lQ2FsbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS4wNSA1QTUgNSAwIDAgMSAxOSA4Ljk1TTE1LjA1IDFBOSA5IDAgMCAxIDIzIDguOTRtLTEgNy45OHYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVDYWxsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lQ2FsbC5kaXNwbGF5TmFtZSA9ICdQaG9uZUNhbGwnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVDYWxsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUZvcndhcmRlZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDEgMjMgNSAxOSA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lRm9yd2FyZGVkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lRm9yd2FyZGVkLmRpc3BsYXlOYW1lID0gJ1Bob25lRm9yd2FyZGVkJztcbmV4cG9ydCBkZWZhdWx0IFBob25lRm9yd2FyZGVkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUluY29taW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMiAxNiA4IDIyIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVJbmNvbWluZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUluY29taW5nLmRpc3BsYXlOYW1lID0gJ1Bob25lSW5jb21pbmcnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVJbmNvbWluZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVNaXNzZWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lTWlzc2VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lTWlzc2VkLmRpc3BsYXlOYW1lID0gJ1Bob25lTWlzc2VkJztcbmV4cG9ydCBkZWZhdWx0IFBob25lTWlzc2VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC42OCAxMy4zMWExNiAxNiAwIDAgMCAzLjQxIDIuNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuNyAyIDIgMCAwIDEgMS43MiAydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNDIgMTkuNDIgMCAwIDEtMy4zMy0yLjY3bS0yLjY3LTMuMzRhMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjYzQTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjFcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuUGhvbmVPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmVPZmYuZGlzcGxheU5hbWUgPSAnUGhvbmVPZmYnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lT3V0Z29pbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA3IDIzIDEgMTcgMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZU91dGdvaW5nLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lT3V0Z29pbmcuZGlzcGxheU5hbWUgPSAnUGhvbmVPdXRnb2luZyc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZU91dGdvaW5nOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmUuZGlzcGxheU5hbWUgPSAnUGhvbmUnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBpZUNoYXJ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxLjIxIDE1Ljg5QTEwIDEwIDAgMSAxIDggMi44M1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDEyQTEwIDEwIDAgMCAwIDEyIDJ2MTB6XCJcbiAgfSkpO1xufSk7XG5QaWVDaGFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaWVDaGFydC5kaXNwbGF5TmFtZSA9ICdQaWVDaGFydCc7XG5leHBvcnQgZGVmYXVsdCBQaWVDaGFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGxheUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDggMTYgMTIgMTAgMTYgMTAgOFwiXG4gIH0pKTtcbn0pO1xuUGxheUNpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbGF5Q2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BsYXlDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGxheUNpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGxheSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNSAzIDE5IDEyIDUgMjEgNSAzXCJcbiAgfSkpO1xufSk7XG5QbGF5LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsYXkuZGlzcGxheU5hbWUgPSAnUGxheSc7XG5leHBvcnQgZGVmYXVsdCBQbGF5OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQbHVzQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuUGx1c0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbHVzQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BsdXNDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgUGx1c0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGx1c1NxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXNTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1c1NxdWFyZS5kaXNwbGF5TmFtZSA9ICdQbHVzU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFBsdXNTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsdXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1cy5kaXNwbGF5TmFtZSA9ICdQbHVzJztcbmV4cG9ydCBkZWZhdWx0IFBsdXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBvY2tldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDNoMTZhMiAyIDAgMCAxIDIgMnY2YTEwIDEwIDAgMCAxLTEwIDEwQTEwIDEwIDAgMCAxIDIgMTFWNWEyIDIgMCAwIDEgMi0yelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCAxMCAxMiAxNCAxNiAxMFwiXG4gIH0pKTtcbn0pO1xuUG9ja2V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBvY2tldC5kaXNwbGF5TmFtZSA9ICdQb2NrZXQnO1xuZXhwb3J0IGRlZmF1bHQgUG9ja2V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQb3dlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOC4zNiA2LjY0YTkgOSAwIDEgMS0xMi43MyAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuUG93ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUG93ZXIuZGlzcGxheU5hbWUgPSAnUG93ZXInO1xuZXhwb3J0IGRlZmF1bHQgUG93ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFByaW50ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDkgNiAyIDE4IDIgMTggOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY1YTIgMiAwIDAgMS0yIDJoLTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjZcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiMTJcIixcbiAgICBoZWlnaHQ6IFwiOFwiXG4gIH0pKTtcbn0pO1xuUHJpbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QcmludGVyLmRpc3BsYXlOYW1lID0gJ1ByaW50ZXInO1xuZXhwb3J0IGRlZmF1bHQgUHJpbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmFkaW8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuMjQgNy43NmE2IDYgMCAwIDEgMCA4LjQ5bS04LjQ4LS4wMWE2IDYgMCAwIDEgMC04LjQ5bTExLjMxLTIuODJhMTAgMTAgMCAwIDEgMCAxNC4xNG0tMTQuMTQgMGExMCAxMCAwIDAgMSAwLTE0LjE0XCJcbiAgfSkpO1xufSk7XG5SYWRpby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SYWRpby5kaXNwbGF5TmFtZSA9ICdSYWRpbyc7XG5leHBvcnQgZGVmYXVsdCBSYWRpbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVmcmVzaENjdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNCAxIDEwIDcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDIwIDIzIDE0IDE3IDE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNDkgOUE5IDkgMCAwIDAgNS42NCA1LjY0TDEgMTBtMjIgNGwtNC42NCA0LjM2QTkgOSAwIDAgMSAzLjUxIDE1XCJcbiAgfSkpO1xufSk7XG5SZWZyZXNoQ2N3LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJlZnJlc2hDY3cuZGlzcGxheU5hbWUgPSAnUmVmcmVzaENjdyc7XG5leHBvcnQgZGVmYXVsdCBSZWZyZXNoQ2N3OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSZWZyZXNoQ3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA0IDIzIDEwIDE3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDIwIDEgMTQgNyAxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuNTEgOWE5IDkgMCAwIDEgMTQuODUtMy4zNkwyMyAxME0xIDE0bDQuNjQgNC4zNkE5IDkgMCAwIDAgMjAuNDkgMTVcIlxuICB9KSk7XG59KTtcblJlZnJlc2hDdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZWZyZXNoQ3cuZGlzcGxheU5hbWUgPSAnUmVmcmVzaEN3JztcbmV4cG9ydCBkZWZhdWx0IFJlZnJlc2hDdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVwZWF0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMSAyMSA1IDE3IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDExVjlhNCA0IDAgMCAxIDQtNGgxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAyMyAzIDE5IDcgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxM3YyYTQgNCAwIDAgMS00IDRIM1wiXG4gIH0pKTtcbn0pO1xuUmVwZWF0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJlcGVhdC5kaXNwbGF5TmFtZSA9ICdSZXBlYXQnO1xuZXhwb3J0IGRlZmF1bHQgUmVwZWF0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSZXdpbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDE5IDIgMTIgMTEgNSAxMSAxOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMiAxOSAxMyAxMiAyMiA1IDIyIDE5XCJcbiAgfSkpO1xufSk7XG5SZXdpbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmV3aW5kLmRpc3BsYXlOYW1lID0gJ1Jld2luZCc7XG5leHBvcnQgZGVmYXVsdCBSZXdpbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJvdGF0ZUNjdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNCAxIDEwIDcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUxIDE1YTkgOSAwIDEgMCAyLjEzLTkuMzZMMSAxMFwiXG4gIH0pKTtcbn0pO1xuUm90YXRlQ2N3LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJvdGF0ZUNjdy5kaXNwbGF5TmFtZSA9ICdSb3RhdGVDY3cnO1xuZXhwb3J0IGRlZmF1bHQgUm90YXRlQ2N3OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSb3RhdGVDdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDQgMjMgMTAgMTcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC40OSAxNWE5IDkgMCAxIDEtMi4xMi05LjM2TDIzIDEwXCJcbiAgfSkpO1xufSk7XG5Sb3RhdGVDdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Sb3RhdGVDdy5kaXNwbGF5TmFtZSA9ICdSb3RhdGVDdyc7XG5leHBvcnQgZGVmYXVsdCBSb3RhdGVDdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUnNzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTFhOSA5IDAgMCAxIDkgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNGExNiAxNiAwIDAgMSAxNiAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNVwiLFxuICAgIGN5OiBcIjE5XCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Sc3MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUnNzLmRpc3BsYXlOYW1lID0gJ1Jzcyc7XG5leHBvcnQgZGVmYXVsdCBSc3M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNhdmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxMWw1IDV2MTFhMiAyIDAgMCAxLTIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDIxIDE3IDEzIDcgMTMgNyAyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyAzIDcgOCAxNSA4XCJcbiAgfSkpO1xufSk7XG5TYXZlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNhdmUuZGlzcGxheU5hbWUgPSAnU2F2ZSc7XG5leHBvcnQgZGVmYXVsdCBTYXZlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTY2lzc29ycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCI4LjEyXCIsXG4gICAgeTI6IFwiMTUuODhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNC40N1wiLFxuICAgIHkxOiBcIjE0LjQ4XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjguMTJcIixcbiAgICB5MTogXCI4LjEyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuU2Npc3NvcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2Npc3NvcnMuZGlzcGxheU5hbWUgPSAnU2Npc3NvcnMnO1xuZXhwb3J0IGRlZmF1bHQgU2Npc3NvcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNlYXJjaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjExXCIsXG4gICAgY3k6IFwiMTFcIixcbiAgICByOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTYuNjVcIixcbiAgICB5MjogXCIxNi42NVwiXG4gIH0pKTtcbn0pO1xuU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNlYXJjaC5kaXNwbGF5TmFtZSA9ICdTZWFyY2gnO1xuZXhwb3J0IGRlZmF1bHQgU2VhcmNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjExXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMiAxNSAyMiAxMSAxMyAyIDkgMjIgMlwiXG4gIH0pKTtcbn0pO1xuU2VuZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZW5kLmRpc3BsYXlOYW1lID0gJ1NlbmQnO1xuZXhwb3J0IGRlZmF1bHQgU2VuZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2VydmVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjhcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMTRcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCI4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjYuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiNi4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5TZXJ2ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2VydmVyLmRpc3BsYXlOYW1lID0gJ1NlcnZlcic7XG5leHBvcnQgZGVmYXVsdCBTZXJ2ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNldHRpbmdzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjQgMTVhMS42NSAxLjY1IDAgMCAwIC4zMyAxLjgybC4wNi4wNmEyIDIgMCAwIDEgMCAyLjgzIDIgMiAwIDAgMS0yLjgzIDBsLS4wNi0uMDZhMS42NSAxLjY1IDAgMCAwLTEuODItLjMzIDEuNjUgMS42NSAwIDAgMC0xIDEuNTFWMjFhMiAyIDAgMCAxLTIgMiAyIDIgMCAwIDEtMi0ydi0uMDlBMS42NSAxLjY1IDAgMCAwIDkgMTkuNGExLjY1IDEuNjUgMCAwIDAtMS44Mi4zM2wtLjA2LjA2YTIgMiAwIDAgMS0yLjgzIDAgMiAyIDAgMCAxIDAtMi44M2wuMDYtLjA2YTEuNjUgMS42NSAwIDAgMCAuMzMtMS44MiAxLjY1IDEuNjUgMCAwIDAtMS41MS0xSDNhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEgMi0yaC4wOUExLjY1IDEuNjUgMCAwIDAgNC42IDlhMS42NSAxLjY1IDAgMCAwLS4zMy0xLjgybC0uMDYtLjA2YTIgMiAwIDAgMSAwLTIuODMgMiAyIDAgMCAxIDIuODMgMGwuMDYuMDZhMS42NSAxLjY1IDAgMCAwIDEuODIuMzNIOWExLjY1IDEuNjUgMCAwIDAgMS0xLjUxVjNhMiAyIDAgMCAxIDItMiAyIDIgMCAwIDEgMiAydi4wOWExLjY1IDEuNjUgMCAwIDAgMSAxLjUxIDEuNjUgMS42NSAwIDAgMCAxLjgyLS4zM2wuMDYtLjA2YTIgMiAwIDAgMSAyLjgzIDAgMiAyIDAgMCAxIDAgMi44M2wtLjA2LjA2YTEuNjUgMS42NSAwIDAgMC0uMzMgMS44MlY5YTEuNjUgMS42NSAwIDAgMCAxLjUxIDFIMjFhMiAyIDAgMCAxIDIgMiAyIDIgMCAwIDEtMiAyaC0uMDlhMS42NSAxLjY1IDAgMCAwLTEuNTEgMXpcIlxuICB9KSk7XG59KTtcblNldHRpbmdzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNldHRpbmdzLmRpc3BsYXlOYW1lID0gJ1NldHRpbmdzJztcbmV4cG9ydCBkZWZhdWx0IFNldHRpbmdzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGFyZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOFwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxOVwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjguNTlcIixcbiAgICB5MTogXCIxMy41MVwiLFxuICAgIHgyOiBcIjE1LjQyXCIsXG4gICAgeTI6IFwiMTcuNDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNS40MVwiLFxuICAgIHkxOiBcIjYuNTFcIixcbiAgICB4MjogXCI4LjU5XCIsXG4gICAgeTI6IFwiMTAuNDlcIlxuICB9KSk7XG59KTtcblNoYXJlMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGFyZTIuZGlzcGxheU5hbWUgPSAnU2hhcmUyJztcbmV4cG9ydCBkZWZhdWx0IFNoYXJlMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgNiAxMiAyIDggNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblNoYXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNoYXJlLmRpc3BsYXlOYW1lID0gJ1NoYXJlJztcbmV4cG9ydCBkZWZhdWx0IFNoYXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGllbGRPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkuNjkgMTRhNi45IDYuOSAwIDAgMCAuMzEtMlY1bC04LTMtMy4xNiAxLjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNC43MyA0LjczTDQgNXY3YzAgNiA4IDEwIDggMTBhMjAuMjkgMjAuMjkgMCAwIDAgNS42Mi00LjM4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5TaGllbGRPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hpZWxkT2ZmLmRpc3BsYXlOYW1lID0gJ1NoaWVsZE9mZic7XG5leHBvcnQgZGVmYXVsdCBTaGllbGRPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNoaWVsZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAyMnM4LTQgOC0xMFY1bC04LTMtOCAzdjdjMCA2IDggMTAgOCAxMHpcIlxuICB9KSk7XG59KTtcblNoaWVsZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGllbGQuZGlzcGxheU5hbWUgPSAnU2hpZWxkJztcbmV4cG9ydCBkZWZhdWx0IFNoaWVsZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hvcHBpbmdCYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyTDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWNmwtMy00elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTBhNCA0IDAgMCAxLTggMFwiXG4gIH0pKTtcbn0pO1xuU2hvcHBpbmdCYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hvcHBpbmdCYWcuZGlzcGxheU5hbWUgPSAnU2hvcHBpbmdCYWcnO1xuZXhwb3J0IGRlZmF1bHQgU2hvcHBpbmdCYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNob3BwaW5nQ2FydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjlcIixcbiAgICBjeTogXCIyMVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMjBcIixcbiAgICBjeTogXCIyMVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEgMWg0bDIuNjggMTMuMzlhMiAyIDAgMCAwIDIgMS42MWg5LjcyYTIgMiAwIDAgMCAyLTEuNjFMMjMgNkg2XCJcbiAgfSkpO1xufSk7XG5TaG9wcGluZ0NhcnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hvcHBpbmdDYXJ0LmRpc3BsYXlOYW1lID0gJ1Nob3BwaW5nQ2FydCc7XG5leHBvcnQgZGVmYXVsdCBTaG9wcGluZ0NhcnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNodWZmbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAzIDIxIDMgMjEgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjEgMTYgMjEgMjEgMTYgMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcblNodWZmbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2h1ZmZsZS5kaXNwbGF5TmFtZSA9ICdTaHVmZmxlJztcbmV4cG9ydCBkZWZhdWx0IFNodWZmbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNpZGViYXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5TaWRlYmFyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNpZGViYXIuZGlzcGxheU5hbWUgPSAnU2lkZWJhcic7XG5leHBvcnQgZGVmYXVsdCBTaWRlYmFyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTa2lwQmFjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTkgMjAgOSAxMiAxOSA0IDE5IDIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNVwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiNVwiLFxuICAgIHkyOiBcIjVcIlxuICB9KSk7XG59KTtcblNraXBCYWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNraXBCYWNrLmRpc3BsYXlOYW1lID0gJ1NraXBCYWNrJztcbmV4cG9ydCBkZWZhdWx0IFNraXBCYWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTa2lwRm9yd2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNSA0IDE1IDEyIDUgMjAgNSA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTlcIixcbiAgICB5MTogXCI1XCIsXG4gICAgeDI6IFwiMTlcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pKTtcbn0pO1xuU2tpcEZvcndhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2tpcEZvcndhcmQuZGlzcGxheU5hbWUgPSAnU2tpcEZvcndhcmQnO1xuZXhwb3J0IGRlZmF1bHQgU2tpcEZvcndhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNsYWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjUgMTBjLS44MyAwLTEuNS0uNjctMS41LTEuNXYtNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNXY1YzAgLjgzLS42NyAxLjUtMS41IDEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMC41IDEwSDE5VjguNWMwLS44My42Ny0xLjUgMS41LTEuNXMxLjUuNjcgMS41IDEuNS0uNjcgMS41LTEuNSAxLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41IDE0Yy44MyAwIDEuNS42NyAxLjUgMS41djVjMCAuODMtLjY3IDEuNS0xLjUgMS41UzggMjEuMzMgOCAyMC41di01YzAtLjgzLjY3LTEuNSAxLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMuNSAxNEg1djEuNWMwIC44My0uNjcgMS41LTEuNSAxLjVTMiAxNi4zMyAyIDE1LjUgMi42NyAxNCAzLjUgMTR6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTQuNWMwLS44My42Ny0xLjUgMS41LTEuNWg1Yy44MyAwIDEuNS42NyAxLjUgMS41cy0uNjcgMS41LTEuNSAxLjVoLTVjLS44MyAwLTEuNS0uNjctMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS41IDE5SDE0djEuNWMwIC44My42NyAxLjUgMS41IDEuNXMxLjUtLjY3IDEuNS0xLjUtLjY3LTEuNS0xLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDkuNUMxMCA4LjY3IDkuMzMgOCA4LjUgOGgtNUMyLjY3IDggMiA4LjY3IDIgOS41UzIuNjcgMTEgMy41IDExaDVjLjgzIDAgMS41LS42NyAxLjUtMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNSA1SDEwVjMuNUMxMCAyLjY3IDkuMzMgMiA4LjUgMlM3IDIuNjcgNyAzLjUgNy42NyA1IDguNSA1elwiXG4gIH0pKTtcbn0pO1xuU2xhY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2xhY2suZGlzcGxheU5hbWUgPSAnU2xhY2snO1xuZXhwb3J0IGRlZmF1bHQgU2xhY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNsYXNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSk7XG59KTtcblNsYXNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsYXNoLmRpc3BsYXlOYW1lID0gJ1NsYXNoJztcbmV4cG9ydCBkZWZhdWx0IFNsYXNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGlkZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIxMFwiLFxuICAgIHgyOiBcIjRcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIwXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMFwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5TbGlkZXJzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsaWRlcnMuZGlzcGxheU5hbWUgPSAnU2xpZGVycyc7XG5leHBvcnQgZGVmYXVsdCBTbGlkZXJzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbWFydHBob25lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNVwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjE0XCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuU21hcnRwaG9uZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbWFydHBob25lLmRpc3BsYXlOYW1lID0gJ1NtYXJ0cGhvbmUnO1xuZXhwb3J0IGRlZmF1bHQgU21hcnRwaG9uZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU21pbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTggMTRzMS41IDIgNCAyIDQtMiA0LTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5TbWlsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbWlsZS5kaXNwbGF5TmFtZSA9ICdTbWlsZSc7XG5leHBvcnQgZGVmYXVsdCBTbWlsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3BlYWtlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjRcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNlwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjE0XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSkpO1xufSk7XG5TcGVha2VyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNwZWFrZXIuZGlzcGxheU5hbWUgPSAnU3BlYWtlcic7XG5leHBvcnQgZGVmYXVsdCBTcGVha2VyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pKTtcbn0pO1xuU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNxdWFyZS5kaXNwbGF5TmFtZSA9ICdTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdGFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDE1LjA5IDguMjYgMjIgOS4yNyAxNyAxNC4xNCAxOC4xOCAyMS4wMiAxMiAxNy43NyA1LjgyIDIxLjAyIDcgMTQuMTQgMiA5LjI3IDguOTEgOC4yNiAxMiAyXCJcbiAgfSkpO1xufSk7XG5TdGFyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN0YXIuZGlzcGxheU5hbWUgPSAnU3Rhcic7XG5leHBvcnQgZGVmYXVsdCBTdGFyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdG9wQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjlcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI2XCIsXG4gICAgaGVpZ2h0OiBcIjZcIlxuICB9KSk7XG59KTtcblN0b3BDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3RvcENpcmNsZS5kaXNwbGF5TmFtZSA9ICdTdG9wQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFN0b3BDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCI0LjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjUuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjE4LjM2XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxOS43OFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjE5Ljc4XCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjE4LjM2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCI1LjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCI0LjIyXCJcbiAgfSkpO1xufSk7XG5TdW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3VuLmRpc3BsYXlOYW1lID0gJ1N1bic7XG5leHBvcnQgZGVmYXVsdCBTdW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1bnJpc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMThhNSA1IDAgMCAwLTEwIDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjIyXCIsXG4gICAgeTE6IFwiMTAuMjJcIixcbiAgICB4MjogXCI1LjY0XCIsXG4gICAgeTI6IFwiMTEuNjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4LjM2XCIsXG4gICAgeTE6IFwiMTEuNjRcIixcbiAgICB4MjogXCIxOS43OFwiLFxuICAgIHkyOiBcIjEwLjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjFcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA2IDEyIDIgMTYgNlwiXG4gIH0pKTtcbn0pO1xuU3VucmlzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdW5yaXNlLmRpc3BsYXlOYW1lID0gJ1N1bnJpc2UnO1xuZXhwb3J0IGRlZmF1bHQgU3VucmlzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3Vuc2V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4YTUgNSAwIDAgMC0xMCAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjEwLjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjExLjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjExLjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxMC4yMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDUgMTIgOSA4IDVcIlxuICB9KSk7XG59KTtcblN1bnNldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdW5zZXQuZGlzcGxheU5hbWUgPSAnU3Vuc2V0JztcbmV4cG9ydCBkZWZhdWx0IFN1bnNldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGFibGV0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNFwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuVGFibGV0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhYmxldC5kaXNwbGF5TmFtZSA9ICdUYWJsZXQnO1xuZXhwb3J0IGRlZmF1bHQgVGFibGV0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUYWcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNTkgMTMuNDFsLTcuMTcgNy4xN2EyIDIgMCAwIDEtMi44MyAwTDIgMTJWMmgxMGw4LjU5IDguNTlhMiAyIDAgMCAxIDAgMi44MnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjcuMDFcIixcbiAgICB5MjogXCI3XCJcbiAgfSkpO1xufSk7XG5UYWcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGFnLmRpc3BsYXlOYW1lID0gJ1RhZyc7XG5leHBvcnQgZGVmYXVsdCBUYWc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRhcmdldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIyXCJcbiAgfSkpO1xufSk7XG5UYXJnZXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGFyZ2V0LmRpc3BsYXlOYW1lID0gJ1RhcmdldCc7XG5leHBvcnQgZGVmYXVsdCBUYXJnZXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRlcm1pbmFsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCAxNyAxMCAxMSA0IDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxOVwiXG4gIH0pKTtcbn0pO1xuVGVybWluYWwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGVybWluYWwuZGlzcGxheU5hbWUgPSAnVGVybWluYWwnO1xuZXhwb3J0IGRlZmF1bHQgVGVybWluYWw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRoZXJtb21ldGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDE0Ljc2VjMuNWEyLjUgMi41IDAgMCAwLTUgMHYxMS4yNmE0LjUgNC41IDAgMSAwIDUgMHpcIlxuICB9KSk7XG59KTtcblRoZXJtb21ldGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRoZXJtb21ldGVyLmRpc3BsYXlOYW1lID0gJ1RoZXJtb21ldGVyJztcbmV4cG9ydCBkZWZhdWx0IFRoZXJtb21ldGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUaHVtYnNEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwIDE1djRhMyAzIDAgMCAwIDMgM2w0LTlWMkg1LjcyYTIgMiAwIDAgMC0yIDEuN2wtMS4zOCA5YTIgMiAwIDAgMCAyIDIuM3ptNy0xM2gyLjY3QTIuMzEgMi4zMSAwIDAgMSAyMiA0djdhMi4zMSAyLjMxIDAgMCAxLTIuMzMgMkgxN1wiXG4gIH0pKTtcbn0pO1xuVGh1bWJzRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaHVtYnNEb3duLmRpc3BsYXlOYW1lID0gJ1RodW1ic0Rvd24nO1xuZXhwb3J0IGRlZmF1bHQgVGh1bWJzRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGh1bWJzVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgOVY1YTMgMyAwIDAgMC0zLTNsLTQgOXYxMWgxMS4yOGEyIDIgMCAwIDAgMi0xLjdsMS4zOC05YTIgMiAwIDAgMC0yLTIuM3pNNyAyMkg0YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmgzXCJcbiAgfSkpO1xufSk7XG5UaHVtYnNVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaHVtYnNVcC5kaXNwbGF5TmFtZSA9ICdUaHVtYnNVcCc7XG5leHBvcnQgZGVmYXVsdCBUaHVtYnNVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVG9nZ2xlTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjdcIixcbiAgICByeTogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcblRvZ2dsZUxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVG9nZ2xlTGVmdC5kaXNwbGF5TmFtZSA9ICdUb2dnbGVMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZUxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRvZ2dsZVJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNVwiLFxuICAgIHdpZHRoOiBcIjIyXCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiN1wiLFxuICAgIHJ5OiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE2XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcblRvZ2dsZVJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvZ2dsZVJpZ2h0LmRpc3BsYXlOYW1lID0gJ1RvZ2dsZVJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IFRvZ2dsZVJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUb29sID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjc3LTMuNzdhNiA2IDAgMCAxLTcuOTQgNy45NGwtNi45MSA2LjkxYTIuMTIgMi4xMiAwIDAgMS0zLTNsNi45MS02LjkxYTYgNiAwIDAgMSA3Ljk0LTcuOTRsLTMuNzYgMy43NnpcIlxuICB9KSk7XG59KTtcblRvb2wucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVG9vbC5kaXNwbGF5TmFtZSA9ICdUb29sJztcbmV4cG9ydCBkZWZhdWx0IFRvb2w7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyYXNoMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMgNiA1IDYgMjEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNm0zIDBWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuVHJhc2gyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRyYXNoMi5kaXNwbGF5TmFtZSA9ICdUcmFzaDInO1xuZXhwb3J0IGRlZmF1bHQgVHJhc2gyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjMgNiA1IDYgMjEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDZ2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNm0zIDBWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyXCJcbiAgfSkpO1xufSk7XG5UcmFzaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmFzaC5kaXNwbGF5TmFtZSA9ICdUcmFzaCc7XG5leHBvcnQgZGVmYXVsdCBUcmFzaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJlbGxvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjdcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIzXCIsXG4gICAgaGVpZ2h0OiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiM1wiLFxuICAgIGhlaWdodDogXCI1XCJcbiAgfSkpO1xufSk7XG5UcmVsbG8ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbGxvLmRpc3BsYXlOYW1lID0gJ1RyZWxsbyc7XG5leHBvcnQgZGVmYXVsdCBUcmVsbG87IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZW5kaW5nRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDE4IDEzLjUgOC41IDguNSAxMy41IDEgNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTggMjMgMTggMjMgMTJcIlxuICB9KSk7XG59KTtcblRyZW5kaW5nRG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmVuZGluZ0Rvd24uZGlzcGxheU5hbWUgPSAnVHJlbmRpbmdEb3duJztcbmV4cG9ydCBkZWZhdWx0IFRyZW5kaW5nRG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJlbmRpbmdVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDYgMTMuNSAxNS41IDguNSAxMC41IDEgMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDYgMjMgNiAyMyAxMlwiXG4gIH0pKTtcbn0pO1xuVHJlbmRpbmdVcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmVuZGluZ1VwLmRpc3BsYXlOYW1lID0gJ1RyZW5kaW5nVXAnO1xuZXhwb3J0IGRlZmF1bHQgVHJlbmRpbmdVcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJpYW5nbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuMjkgMy44NkwxLjgyIDE4YTIgMiAwIDAgMCAxLjcxIDNoMTYuOTRhMiAyIDAgMCAwIDEuNzEtM0wxMy43MSAzLjg2YTIgMiAwIDAgMC0zLjQyIDB6XCJcbiAgfSkpO1xufSk7XG5UcmlhbmdsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmlhbmdsZS5kaXNwbGF5TmFtZSA9ICdUcmlhbmdsZSc7XG5leHBvcnQgZGVmYXVsdCBUcmlhbmdsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJ1Y2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMTVcIixcbiAgICBoZWlnaHQ6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgOCAyMCA4IDIzIDExIDIzIDE2IDE2IDE2IDE2IDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjUuNVwiLFxuICAgIGN5OiBcIjE4LjVcIixcbiAgICByOiBcIjIuNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTguNVwiLFxuICAgIGN5OiBcIjE4LjVcIixcbiAgICByOiBcIjIuNVwiXG4gIH0pKTtcbn0pO1xuVHJ1Y2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJ1Y2suZGlzcGxheU5hbWUgPSAnVHJ1Y2snO1xuZXhwb3J0IGRlZmF1bHQgVHJ1Y2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFR2ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjE1XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDIgMTIgNyA3IDJcIlxuICB9KSk7XG59KTtcblR2LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR2LmRpc3BsYXlOYW1lID0gJ1R2JztcbmV4cG9ydCBkZWZhdWx0IFR2OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUd2l0Y2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMkgzdjE2aDV2NGw0LTRoNWw0LTRWMnptLTEwIDlWN201IDRWN1wiXG4gIH0pKTtcbn0pO1xuVHdpdGNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR3aXRjaC5kaXNwbGF5TmFtZSA9ICdUd2l0Y2gnO1xuZXhwb3J0IGRlZmF1bHQgVHdpdGNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUd2l0dGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDNhMTAuOSAxMC45IDAgMCAxLTMuMTQgMS41MyA0LjQ4IDQuNDggMCAwIDAtNy44NiAzdjFBMTAuNjYgMTAuNjYgMCAwIDEgMyA0cy00IDkgNSAxM2ExMS42NCAxMS42NCAwIDAgMS03IDJjOSA1IDIwIDAgMjAtMTEuNWE0LjUgNC41IDAgMCAwLS4wOC0uODNBNy43MiA3LjcyIDAgMCAwIDIzIDN6XCJcbiAgfSkpO1xufSk7XG5Ud2l0dGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblR3aXR0ZXIuZGlzcGxheU5hbWUgPSAnVHdpdHRlcic7XG5leHBvcnQgZGVmYXVsdCBUd2l0dGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUeXBlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNCA3IDQgNCAyMCA0IDIwIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pKTtcbn0pO1xuVHlwZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UeXBlLmRpc3BsYXlOYW1lID0gJ1R5cGUnO1xuZXhwb3J0IGRlZmF1bHQgVHlwZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW1icmVsbGEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMTJhMTEuMDUgMTEuMDUgMCAwIDAtMjIgMHptLTUgN2EzIDMgMCAwIDEtNiAwdi03XCJcbiAgfSkpO1xufSk7XG5VbWJyZWxsYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VbWJyZWxsYS5kaXNwbGF5TmFtZSA9ICdVbWJyZWxsYSc7XG5leHBvcnQgZGVmYXVsdCBVbWJyZWxsYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW5kZXJsaW5lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgM3Y3YTYgNiAwIDAgMCA2IDYgNiA2IDAgMCAwIDYtNlYzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pKTtcbn0pO1xuVW5kZXJsaW5lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVuZGVybGluZS5kaXNwbGF5TmFtZSA9ICdVbmRlcmxpbmUnO1xuZXhwb3J0IGRlZmF1bHQgVW5kZXJsaW5lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVbmxvY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIxMVwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjExXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk03IDExVjdhNSA1IDAgMCAxIDkuOS0xXCJcbiAgfSkpO1xufSk7XG5VbmxvY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVW5sb2NrLmRpc3BsYXlOYW1lID0gJ1VubG9jayc7XG5leHBvcnQgZGVmYXVsdCBVbmxvY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVwbG9hZENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTYgMTIgMTIgOCAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMzkgMTguMzlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTYgMTIgMTIgOCAxNlwiXG4gIH0pKTtcbn0pO1xuVXBsb2FkQ2xvdWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXBsb2FkQ2xvdWQuZGlzcGxheU5hbWUgPSAnVXBsb2FkQ2xvdWQnO1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkQ2xvdWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVwbG9hZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi00XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA4IDEyIDMgNyA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuVXBsb2FkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVwbG9hZC5kaXNwbGF5TmFtZSA9ICdVcGxvYWQnO1xuZXhwb3J0IGRlZmF1bHQgVXBsb2FkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyQ2hlY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTEgMTkgMTMgMjMgOVwiXG4gIH0pKTtcbn0pO1xuVXNlckNoZWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJDaGVjay5kaXNwbGF5TmFtZSA9ICdVc2VyQ2hlY2snO1xuZXhwb3J0IGRlZmF1bHQgVXNlckNoZWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyTWludXMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5Vc2VyTWludXMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlck1pbnVzLmRpc3BsYXlOYW1lID0gJ1VzZXJNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyTWludXM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVzZXJQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIyMFwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblVzZXJQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJQbHVzLmRpc3BsYXlOYW1lID0gJ1VzZXJQbHVzJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyWCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4LjVcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjE4XCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSk7XG59KTtcblVzZXJYLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJYLmRpc3BsYXlOYW1lID0gJ1VzZXJYJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDIxdi0yYTQgNCAwIDAgMC00LTRIOGE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuVXNlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyLmRpc3BsYXlOYW1lID0gJ1VzZXInO1xuZXhwb3J0IGRlZmF1bHQgVXNlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlcnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMy4xM2E0IDQgMCAwIDEgMCA3Ljc1XCJcbiAgfSkpO1xufSk7XG5Vc2Vycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2Vycy5kaXNwbGF5TmFtZSA9ICdVc2Vycyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVmlkZW9PZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMTZ2MWEyIDIgMCAwIDEtMiAySDNhMiAyIDAgMCAxLTItMlY3YTIgMiAwIDAgMSAyLTJoMm01LjY2IDBIMTRhMiAyIDAgMCAxIDIgMnYzLjM0bDEgMUwyMyA3djEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5WaWRlb09mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5WaWRlb09mZi5kaXNwbGF5TmFtZSA9ICdWaWRlb09mZic7XG5leHBvcnQgZGVmYXVsdCBWaWRlb09mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVmlkZW8gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjIzIDcgMTYgMTIgMjMgMTcgMjMgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNVwiLFxuICAgIHdpZHRoOiBcIjE1XCIsXG4gICAgaGVpZ2h0OiBcIjE0XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSk7XG59KTtcblZpZGVvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZpZGVvLmRpc3BsYXlOYW1lID0gJ1ZpZGVvJztcbmV4cG9ydCBkZWZhdWx0IFZpZGVvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2ljZW1haWwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1LjVcIixcbiAgICBjeTogXCIxMS41XCIsXG4gICAgcjogXCI0LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4LjVcIixcbiAgICBjeTogXCIxMS41XCIsXG4gICAgcjogXCI0LjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1LjVcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjE4LjVcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuVm9pY2VtYWlsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvaWNlbWFpbC5kaXNwbGF5TmFtZSA9ICdWb2ljZW1haWwnO1xuZXhwb3J0IGRlZmF1bHQgVm9pY2VtYWlsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUxID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNS41NCA4LjQ2YTUgNSAwIDAgMSAwIDcuMDdcIlxuICB9KSk7XG59KTtcblZvbHVtZTEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVm9sdW1lMS5kaXNwbGF5TmFtZSA9ICdWb2x1bWUxJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZvbHVtZTIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjA3IDQuOTNhMTAgMTAgMCAwIDEgMCAxNC4xNE0xNS41NCA4LjQ2YTUgNSAwIDAgMSAwIDcuMDdcIlxuICB9KSk7XG59KTtcblZvbHVtZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVm9sdW1lMi5kaXNwbGF5TmFtZSA9ICdWb2x1bWUyJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZvbHVtZVggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWVYLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZVguZGlzcGxheU5hbWUgPSAnVm9sdW1lWCc7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWVYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDUgNiA5IDIgOSAyIDE1IDYgMTUgMTEgMTkgMTEgNVwiXG4gIH0pKTtcbn0pO1xuVm9sdW1lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZS5kaXNwbGF5TmFtZSA9ICdWb2x1bWUnO1xuZXhwb3J0IGRlZmF1bHQgVm9sdW1lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXYXRjaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDkgMTIgMTIgMTMuNSAxMy41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNTEgMTcuMzVsLS4zNSAzLjgzYTIgMiAwIDAgMS0yIDEuODJIOS44M2EyIDIgMCAwIDEtMi0xLjgybC0uMzUtMy44M20uMDEtMTAuN2wuMzUtMy44M0EyIDIgMCAwIDEgOS44MyAxaDQuMzVhMiAyIDAgMCAxIDIgMS44MmwuMzUgMy44M1wiXG4gIH0pKTtcbn0pO1xuV2F0Y2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2F0Y2guZGlzcGxheU5hbWUgPSAnV2F0Y2gnO1xuZXhwb3J0IGRlZmF1bHQgV2F0Y2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFdpZmlPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYuNzIgMTEuMDZBMTAuOTQgMTAuOTQgMCAwIDEgMTkgMTIuNTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyLjU1YTEwLjk0IDEwLjk0IDAgMCAxIDUuMTctMi4zOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjcxIDUuMDVBMTYgMTYgMCAwIDEgMjIuNTggOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNDIgOWExNS45MSAxNS45MSAwIDAgMSA0LjctMi44OFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTMgMTYuMTFhNiA2IDAgMCAxIDYuOTUgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5XaWZpT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldpZmlPZmYuZGlzcGxheU5hbWUgPSAnV2lmaU9mZic7XG5leHBvcnQgZGVmYXVsdCBXaWZpT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaWZpID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTIuNTVhMTEgMTEgMCAwIDEgMTQuMDggMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEuNDIgOWExNiAxNiAwIDAgMSAyMS4xNiAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOC41MyAxNi4xMWE2IDYgMCAwIDEgNi45NSAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcbldpZmkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2lmaS5kaXNwbGF5TmFtZSA9ICdXaWZpJztcbmV4cG9ydCBkZWZhdWx0IFdpZmk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFdpbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS41OSA0LjU5QTIgMiAwIDEgMSAxMSA4SDJtMTAuNTkgMTEuNDFBMiAyIDAgMSAwIDE0IDE2SDJtMTUuNzMtOC4yN0EyLjUgMi41IDAgMSAxIDE5LjUgMTJIMlwiXG4gIH0pKTtcbn0pO1xuV2luZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5XaW5kLmRpc3BsYXlOYW1lID0gJ1dpbmQnO1xuZXhwb3J0IGRlZmF1bHQgV2luZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5YQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblhDaXJjbGUuZGlzcGxheU5hbWUgPSAnWENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBYQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBYT2N0YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiNy44NiAyIDE2LjE0IDIgMjIgNy44NiAyMiAxNi4xNCAxNi4xNCAyMiA3Ljg2IDIyIDIgMTYuMTQgMiA3Ljg2IDcuODYgMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWE9jdGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWE9jdGFnb24uZGlzcGxheU5hbWUgPSAnWE9jdGFnb24nO1xuZXhwb3J0IGRlZmF1bHQgWE9jdGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFhTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWFNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5YU3F1YXJlLmRpc3BsYXlOYW1lID0gJ1hTcXVhcmUnO1xuZXhwb3J0IGRlZmF1bHQgWFNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjE4XCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblgucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWC5kaXNwbGF5TmFtZSA9ICdYJztcbmV4cG9ydCBkZWZhdWx0IFg7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFlvdXR1YmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIuNTQgNi40MmEyLjc4IDIuNzggMCAwIDAtMS45NC0yQzE4Ljg4IDQgMTIgNCAxMiA0cy02Ljg4IDAtOC42LjQ2YTIuNzggMi43OCAwIDAgMC0xLjk0IDJBMjkgMjkgMCAwIDAgMSAxMS43NWEyOSAyOSAwIDAgMCAuNDYgNS4zM0EyLjc4IDIuNzggMCAwIDAgMy40IDE5YzEuNzIuNDYgOC42LjQ2IDguNi40NnM2Ljg4IDAgOC42LS40NmEyLjc4IDIuNzggMCAwIDAgMS45NC0yIDI5IDI5IDAgMCAwIC40Ni01LjI1IDI5IDI5IDAgMCAwLS40Ni01LjMzelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCI5Ljc1IDE1LjAyIDE1LjUgMTEuNzUgOS43NSA4LjQ4IDkuNzUgMTUuMDJcIlxuICB9KSk7XG59KTtcbllvdXR1YmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWW91dHViZS5kaXNwbGF5TmFtZSA9ICdZb3V0dWJlJztcbmV4cG9ydCBkZWZhdWx0IFlvdXR1YmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFphcE9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyLjQxIDYuNzUgMTMgMiAxMC41NyA0LjkyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOC41NyAxMi45MSAyMSAxMCAxNS42NiAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCA4IDMgMTQgMTIgMTQgMTEgMjIgMTYgMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcblphcE9mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5aYXBPZmYuZGlzcGxheU5hbWUgPSAnWmFwT2ZmJztcbmV4cG9ydCBkZWZhdWx0IFphcE9mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWmFwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMyAyIDMgMTQgMTIgMTQgMTEgMjIgMjEgMTAgMTIgMTAgMTMgMlwiXG4gIH0pKTtcbn0pO1xuWmFwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblphcC5kaXNwbGF5TmFtZSA9ICdaYXAnO1xuZXhwb3J0IGRlZmF1bHQgWmFwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBab29tSW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjE2LjY1XCIsXG4gICAgeTI6IFwiMTYuNjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMVwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMVwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuWm9vbUluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblpvb21Jbi5kaXNwbGF5TmFtZSA9ICdab29tSW4nO1xuZXhwb3J0IGRlZmF1bHQgWm9vbUluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBab29tT3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNi42NVwiLFxuICAgIHkyOiBcIjE2LjY1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuWm9vbU91dC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5ab29tT3V0LmRpc3BsYXlOYW1lID0gJ1pvb21PdXQnO1xuZXhwb3J0IGRlZmF1bHQgWm9vbU91dDsiLCJleHBvcnQgeyBkZWZhdWx0IGFzIEFjdGl2aXR5IH0gZnJvbSAnLi9pY29ucy9hY3Rpdml0eSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFpcnBsYXkgfSBmcm9tICcuL2ljb25zL2FpcnBsYXknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbGVydENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYWxlcnQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy9hbGVydC1vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRUcmlhbmdsZSB9IGZyb20gJy4vaWNvbnMvYWxlcnQtdHJpYW5nbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbGlnbkNlbnRlciB9IGZyb20gJy4vaWNvbnMvYWxpZ24tY2VudGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25KdXN0aWZ5IH0gZnJvbSAnLi9pY29ucy9hbGlnbi1qdXN0aWZ5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25MZWZ0IH0gZnJvbSAnLi9pY29ucy9hbGlnbi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25SaWdodCB9IGZyb20gJy4vaWNvbnMvYWxpZ24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBbmNob3IgfSBmcm9tICcuL2ljb25zL2FuY2hvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFwZXJ0dXJlIH0gZnJvbSAnLi9pY29ucy9hcGVydHVyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFyY2hpdmUgfSBmcm9tICcuL2ljb25zL2FyY2hpdmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0Rvd25DaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duTGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctZG93bi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duUmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0Rvd24gfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd0xlZnRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LWxlZnQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dMZWZ0IH0gZnJvbSAnLi9pY29ucy9hcnJvdy1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dSaWdodENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYXJyb3ctcmlnaHQtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dSaWdodCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy11cC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwTGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93VXBSaWdodCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwIH0gZnJvbSAnLi9pY29ucy9hcnJvdy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF0U2lnbiB9IGZyb20gJy4vaWNvbnMvYXQtc2lnbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEF3YXJkIH0gZnJvbSAnLi9pY29ucy9hd2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhckNoYXJ0MiB9IGZyb20gJy4vaWNvbnMvYmFyLWNoYXJ0LTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXJDaGFydCB9IGZyb20gJy4vaWNvbnMvYmFyLWNoYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmF0dGVyeUNoYXJnaW5nIH0gZnJvbSAnLi9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmF0dGVyeSB9IGZyb20gJy4vaWNvbnMvYmF0dGVyeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJlbGxPZmYgfSBmcm9tICcuL2ljb25zL2JlbGwtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmVsbCB9IGZyb20gJy4vaWNvbnMvYmVsbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJsdWV0b290aCB9IGZyb20gJy4vaWNvbnMvYmx1ZXRvb3RoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9sZCB9IGZyb20gJy4vaWNvbnMvYm9sZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvb2tPcGVuIH0gZnJvbSAnLi9pY29ucy9ib29rLW9wZW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb29rIH0gZnJvbSAnLi9pY29ucy9ib29rJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9va21hcmsgfSBmcm9tICcuL2ljb25zL2Jvb2ttYXJrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm94IH0gZnJvbSAnLi9pY29ucy9ib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCcmllZmNhc2UgfSBmcm9tICcuL2ljb25zL2JyaWVmY2FzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbGVuZGFyIH0gZnJvbSAnLi9pY29ucy9jYWxlbmRhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbWVyYU9mZiB9IGZyb20gJy4vaWNvbnMvY2FtZXJhLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhbWVyYSB9IGZyb20gJy4vaWNvbnMvY2FtZXJhJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2FzdCB9IGZyb20gJy4vaWNvbnMvY2FzdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9jaGVjay1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvY2hlY2stc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2sgfSBmcm9tICcuL2ljb25zL2NoZWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbkRvd24gfSBmcm9tICcuL2ljb25zL2NoZXZyb24tZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25MZWZ0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uUmlnaHQgfSBmcm9tICcuL2ljb25zL2NoZXZyb24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uVXAgfSBmcm9tICcuL2ljb25zL2NoZXZyb24tdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc0Rvd24gfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc0xlZnQgfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc1JpZ2h0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25zVXAgfSBmcm9tICcuL2ljb25zL2NoZXZyb25zLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hyb21lIH0gZnJvbSAnLi9pY29ucy9jaHJvbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaXJjbGUgfSBmcm9tICcuL2ljb25zL2NpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsaXBib2FyZCB9IGZyb20gJy4vaWNvbnMvY2xpcGJvYXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvY2sgfSBmcm9tICcuL2ljb25zL2Nsb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWREcml6emxlIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1kcml6emxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRMaWdodG5pbmcgfSBmcm9tICcuL2ljb25zL2Nsb3VkLWxpZ2h0bmluZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkT2ZmIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZFJhaW4gfSBmcm9tICcuL2ljb25zL2Nsb3VkLXJhaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZFNub3cgfSBmcm9tICcuL2ljb25zL2Nsb3VkLXNub3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZCB9IGZyb20gJy4vaWNvbnMvY2xvdWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2RlIH0gZnJvbSAnLi9pY29ucy9jb2RlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29kZXBlbiB9IGZyb20gJy4vaWNvbnMvY29kZXBlbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZGVzYW5kYm94IH0gZnJvbSAnLi9pY29ucy9jb2Rlc2FuZGJveCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZmZlZSB9IGZyb20gJy4vaWNvbnMvY29mZmVlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sdW1ucyB9IGZyb20gJy4vaWNvbnMvY29sdW1ucyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbW1hbmQgfSBmcm9tICcuL2ljb25zL2NvbW1hbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21wYXNzIH0gZnJvbSAnLi9pY29ucy9jb21wYXNzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29weSB9IGZyb20gJy4vaWNvbnMvY29weSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckRvd25MZWZ0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItZG93bi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyRG93blJpZ2h0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItZG93bi1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckxlZnREb3duIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItbGVmdC1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyTGVmdFVwIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItbGVmdC11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lclJpZ2h0RG93biB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXJpZ2h0LWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJSaWdodFVwIH0gZnJvbSAnLi9pY29ucy9jb3JuZXItcmlnaHQtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJVcExlZnQgfSBmcm9tICcuL2ljb25zL2Nvcm5lci11cC1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyVXBSaWdodCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXVwLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3B1IH0gZnJvbSAnLi9pY29ucy9jcHUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcmVkaXRDYXJkIH0gZnJvbSAnLi9pY29ucy9jcmVkaXQtY2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENyb3AgfSBmcm9tICcuL2ljb25zL2Nyb3AnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcm9zc2hhaXIgfSBmcm9tICcuL2ljb25zL2Nyb3NzaGFpcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERhdGFiYXNlIH0gZnJvbSAnLi9pY29ucy9kYXRhYmFzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERlbGV0ZSB9IGZyb20gJy4vaWNvbnMvZGVsZXRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRGlzYyB9IGZyb20gJy4vaWNvbnMvZGlzYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZVNxdWFyZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpdmlkZSB9IGZyb20gJy4vaWNvbnMvZGl2aWRlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG9sbGFyU2lnbiB9IGZyb20gJy4vaWNvbnMvZG9sbGFyLXNpZ24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3dubG9hZENsb3VkIH0gZnJvbSAnLi9pY29ucy9kb3dubG9hZC1jbG91ZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvd25sb2FkIH0gZnJvbSAnLi9pY29ucy9kb3dubG9hZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyaWJiYmxlIH0gZnJvbSAnLi9pY29ucy9kcmliYmJsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERyb3BsZXQgfSBmcm9tICcuL2ljb25zL2Ryb3BsZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0MiB9IGZyb20gJy4vaWNvbnMvZWRpdC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdDMgfSBmcm9tICcuL2ljb25zL2VkaXQtMyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXQgfSBmcm9tICcuL2ljb25zL2VkaXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeHRlcm5hbExpbmsgfSBmcm9tICcuL2ljb25zL2V4dGVybmFsLWxpbmsnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeWVPZmYgfSBmcm9tICcuL2ljb25zL2V5ZS1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFeWUgfSBmcm9tICcuL2ljb25zL2V5ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZhY2Vib29rIH0gZnJvbSAnLi9pY29ucy9mYWNlYm9vayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZhc3RGb3J3YXJkIH0gZnJvbSAnLi9pY29ucy9mYXN0LWZvcndhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGZWF0aGVyIH0gZnJvbSAnLi9pY29ucy9mZWF0aGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlnbWEgfSBmcm9tICcuL2ljb25zL2ZpZ21hJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZU1pbnVzIH0gZnJvbSAnLi9pY29ucy9maWxlLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZVBsdXMgfSBmcm9tICcuL2ljb25zL2ZpbGUtcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVUZXh0IH0gZnJvbSAnLi9pY29ucy9maWxlLXRleHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlIH0gZnJvbSAnLi9pY29ucy9maWxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsbSB9IGZyb20gJy4vaWNvbnMvZmlsbSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbHRlciB9IGZyb20gJy4vaWNvbnMvZmlsdGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmxhZyB9IGZyb20gJy4vaWNvbnMvZmxhZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvbGRlck1pbnVzIH0gZnJvbSAnLi9pY29ucy9mb2xkZXItbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXJQbHVzIH0gZnJvbSAnLi9pY29ucy9mb2xkZXItcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZvbGRlciB9IGZyb20gJy4vaWNvbnMvZm9sZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRnJhbWVyIH0gZnJvbSAnLi9pY29ucy9mcmFtZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGcm93biB9IGZyb20gJy4vaWNvbnMvZnJvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaWZ0IH0gZnJvbSAnLi9pY29ucy9naWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0QnJhbmNoIH0gZnJvbSAnLi9pY29ucy9naXQtYnJhbmNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0Q29tbWl0IH0gZnJvbSAnLi9pY29ucy9naXQtY29tbWl0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0TWVyZ2UgfSBmcm9tICcuL2ljb25zL2dpdC1tZXJnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdFB1bGxSZXF1ZXN0IH0gZnJvbSAnLi9pY29ucy9naXQtcHVsbC1yZXF1ZXN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0SHViIH0gZnJvbSAnLi9pY29ucy9naXRodWInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaXRsYWIgfSBmcm9tICcuL2ljb25zL2dpdGxhYic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdsb2JlIH0gZnJvbSAnLi9pY29ucy9nbG9iZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdyaWQgfSBmcm9tICcuL2ljb25zL2dyaWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIYXJkRHJpdmUgfSBmcm9tICcuL2ljb25zL2hhcmQtZHJpdmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIYXNoIH0gZnJvbSAnLi9pY29ucy9oYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGVhZHBob25lcyB9IGZyb20gJy4vaWNvbnMvaGVhZHBob25lcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlYXJ0IH0gZnJvbSAnLi9pY29ucy9oZWFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlbHBDaXJjbGUgfSBmcm9tICcuL2ljb25zL2hlbHAtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGV4YWdvbiB9IGZyb20gJy4vaWNvbnMvaGV4YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhvbWUgfSBmcm9tICcuL2ljb25zL2hvbWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSB9IGZyb20gJy4vaWNvbnMvaW1hZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbmJveCB9IGZyb20gJy4vaWNvbnMvaW5ib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJbmZvIH0gZnJvbSAnLi9pY29ucy9pbmZvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5zdGFncmFtIH0gZnJvbSAnLi9pY29ucy9pbnN0YWdyYW0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBJdGFsaWMgfSBmcm9tICcuL2ljb25zL2l0YWxpYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEtleSB9IGZyb20gJy4vaWNvbnMva2V5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGF5ZXJzIH0gZnJvbSAnLi9pY29ucy9sYXllcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMYXlvdXQgfSBmcm9tICcuL2ljb25zL2xheW91dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpZmVCdW95IH0gZnJvbSAnLi9pY29ucy9saWZlLWJ1b3knO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rMiB9IGZyb20gJy4vaWNvbnMvbGluay0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluayB9IGZyb20gJy4vaWNvbnMvbGluayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmtlZGluIH0gZnJvbSAnLi9pY29ucy9saW5rZWRpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3QgfSBmcm9tICcuL2ljb25zL2xpc3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2FkZXIgfSBmcm9tICcuL2ljb25zL2xvYWRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExvY2sgfSBmcm9tICcuL2ljb25zL2xvY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2dJbiB9IGZyb20gJy4vaWNvbnMvbG9nLWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nT3V0IH0gZnJvbSAnLi9pY29ucy9sb2ctb3V0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWFpbCB9IGZyb20gJy4vaWNvbnMvbWFpbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcFBpbiB9IGZyb20gJy4vaWNvbnMvbWFwLXBpbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1hcCB9IGZyb20gJy4vaWNvbnMvbWFwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWF4aW1pemUyIH0gZnJvbSAnLi9pY29ucy9tYXhpbWl6ZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWF4aW1pemUgfSBmcm9tICcuL2ljb25zL21heGltaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVoIH0gZnJvbSAnLi9pY29ucy9tZWgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSAnLi9pY29ucy9tZW51JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVzc2FnZUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvbWVzc2FnZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZXNzYWdlU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9tZXNzYWdlLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pY09mZiB9IGZyb20gJy4vaWNvbnMvbWljLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pYyB9IGZyb20gJy4vaWNvbnMvbWljJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWluaW1pemUyIH0gZnJvbSAnLi9pY29ucy9taW5pbWl6ZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWluaW1pemUgfSBmcm9tICcuL2ljb25zL21pbmltaXplJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWludXNDaXJjbGUgfSBmcm9tICcuL2ljb25zL21pbnVzLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbnVzU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9taW51cy1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaW51cyB9IGZyb20gJy4vaWNvbnMvbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb25pdG9yIH0gZnJvbSAnLi9pY29ucy9tb25pdG9yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9vbiB9IGZyb20gJy4vaWNvbnMvbW9vbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1vcmVIb3Jpem9udGFsIH0gZnJvbSAnLi9pY29ucy9tb3JlLWhvcml6b250YWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3JlVmVydGljYWwgfSBmcm9tICcuL2ljb25zL21vcmUtdmVydGljYWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3VzZVBvaW50ZXIgfSBmcm9tICcuL2ljb25zL21vdXNlLXBvaW50ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3ZlIH0gZnJvbSAnLi9pY29ucy9tb3ZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTXVzaWMgfSBmcm9tICcuL2ljb25zL211c2ljJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTmF2aWdhdGlvbjIgfSBmcm9tICcuL2ljb25zL25hdmlnYXRpb24tMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5hdmlnYXRpb24gfSBmcm9tICcuL2ljb25zL25hdmlnYXRpb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy9vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGFja2FnZSB9IGZyb20gJy4vaWNvbnMvcGFja2FnZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhcGVyY2xpcCB9IGZyb20gJy4vaWNvbnMvcGFwZXJjbGlwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGF1c2VDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BhdXNlLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhdXNlIH0gZnJvbSAnLi9pY29ucy9wYXVzZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBlblRvb2wgfSBmcm9tICcuL2ljb25zL3Blbi10b29sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGVyY2VudCB9IGZyb20gJy4vaWNvbnMvcGVyY2VudCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lQ2FsbCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtY2FsbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lRm9yd2FyZGVkIH0gZnJvbSAnLi9pY29ucy9waG9uZS1mb3J3YXJkZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUluY29taW5nIH0gZnJvbSAnLi9pY29ucy9waG9uZS1pbmNvbWluZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lTWlzc2VkIH0gZnJvbSAnLi9pY29ucy9waG9uZS1taXNzZWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZU9mZiB9IGZyb20gJy4vaWNvbnMvcGhvbmUtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVPdXRnb2luZyB9IGZyb20gJy4vaWNvbnMvcGhvbmUtb3V0Z29pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZSB9IGZyb20gJy4vaWNvbnMvcGhvbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaWVDaGFydCB9IGZyb20gJy4vaWNvbnMvcGllLWNoYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGxheUNpcmNsZSB9IGZyb20gJy4vaWNvbnMvcGxheS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbGF5IH0gZnJvbSAnLi9pY29ucy9wbGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGx1c0NpcmNsZSB9IGZyb20gJy4vaWNvbnMvcGx1cy1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbHVzU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9wbHVzLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsdXMgfSBmcm9tICcuL2ljb25zL3BsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQb2NrZXQgfSBmcm9tICcuL2ljb25zL3BvY2tldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBvd2VyIH0gZnJvbSAnLi9pY29ucy9wb3dlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFByaW50ZXIgfSBmcm9tICcuL2ljb25zL3ByaW50ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSYWRpbyB9IGZyb20gJy4vaWNvbnMvcmFkaW8nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWZyZXNoQ2N3IH0gZnJvbSAnLi9pY29ucy9yZWZyZXNoLWNjdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlZnJlc2hDdyB9IGZyb20gJy4vaWNvbnMvcmVmcmVzaC1jdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJlcGVhdCB9IGZyb20gJy4vaWNvbnMvcmVwZWF0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmV3aW5kIH0gZnJvbSAnLi9pY29ucy9yZXdpbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3RhdGVDY3cgfSBmcm9tICcuL2ljb25zL3JvdGF0ZS1jY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3RhdGVDdyB9IGZyb20gJy4vaWNvbnMvcm90YXRlLWN3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUnNzIH0gZnJvbSAnLi9pY29ucy9yc3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTYXZlIH0gZnJvbSAnLi9pY29ucy9zYXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2Npc3NvcnMgfSBmcm9tICcuL2ljb25zL3NjaXNzb3JzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSAnLi9pY29ucy9zZWFyY2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZW5kIH0gZnJvbSAnLi9pY29ucy9zZW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VydmVyIH0gZnJvbSAnLi9pY29ucy9zZXJ2ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTZXR0aW5ncyB9IGZyb20gJy4vaWNvbnMvc2V0dGluZ3MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGFyZTIgfSBmcm9tICcuL2ljb25zL3NoYXJlLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGFyZSB9IGZyb20gJy4vaWNvbnMvc2hhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGllbGRPZmYgfSBmcm9tICcuL2ljb25zL3NoaWVsZC1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaGllbGQgfSBmcm9tICcuL2ljb25zL3NoaWVsZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNob3BwaW5nQmFnIH0gZnJvbSAnLi9pY29ucy9zaG9wcGluZy1iYWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG9wcGluZ0NhcnQgfSBmcm9tICcuL2ljb25zL3Nob3BwaW5nLWNhcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaHVmZmxlIH0gZnJvbSAnLi9pY29ucy9zaHVmZmxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2lkZWJhciB9IGZyb20gJy4vaWNvbnMvc2lkZWJhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNraXBCYWNrIH0gZnJvbSAnLi9pY29ucy9za2lwLWJhY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lwRm9yd2FyZCB9IGZyb20gJy4vaWNvbnMvc2tpcC1mb3J3YXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xhY2sgfSBmcm9tICcuL2ljb25zL3NsYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xhc2ggfSBmcm9tICcuL2ljb25zL3NsYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2xpZGVycyB9IGZyb20gJy4vaWNvbnMvc2xpZGVycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNtYXJ0cGhvbmUgfSBmcm9tICcuL2ljb25zL3NtYXJ0cGhvbmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTbWlsZSB9IGZyb20gJy4vaWNvbnMvc21pbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTcGVha2VyIH0gZnJvbSAnLi9pY29ucy9zcGVha2VyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3F1YXJlIH0gZnJvbSAnLi9pY29ucy9zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdGFyIH0gZnJvbSAnLi9pY29ucy9zdGFyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RvcENpcmNsZSB9IGZyb20gJy4vaWNvbnMvc3RvcC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW4gfSBmcm9tICcuL2ljb25zL3N1bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN1bnJpc2UgfSBmcm9tICcuL2ljb25zL3N1bnJpc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW5zZXQgfSBmcm9tICcuL2ljb25zL3N1bnNldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxldCB9IGZyb20gJy4vaWNvbnMvdGFibGV0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnIH0gZnJvbSAnLi9pY29ucy90YWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUYXJnZXQgfSBmcm9tICcuL2ljb25zL3RhcmdldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRlcm1pbmFsIH0gZnJvbSAnLi9pY29ucy90ZXJtaW5hbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRoZXJtb21ldGVyIH0gZnJvbSAnLi9pY29ucy90aGVybW9tZXRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRodW1ic0Rvd24gfSBmcm9tICcuL2ljb25zL3RodW1icy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGh1bWJzVXAgfSBmcm9tICcuL2ljb25zL3RodW1icy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZUxlZnQgfSBmcm9tICcuL2ljb25zL3RvZ2dsZS1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9nZ2xlUmlnaHQgfSBmcm9tICcuL2ljb25zL3RvZ2dsZS1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvb2wgfSBmcm9tICcuL2ljb25zL3Rvb2wnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFzaDIgfSBmcm9tICcuL2ljb25zL3RyYXNoLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmFzaCB9IGZyb20gJy4vaWNvbnMvdHJhc2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVsbG8gfSBmcm9tICcuL2ljb25zL3RyZWxsbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyZW5kaW5nRG93biB9IGZyb20gJy4vaWNvbnMvdHJlbmRpbmctZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyZW5kaW5nVXAgfSBmcm9tICcuL2ljb25zL3RyZW5kaW5nLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJpYW5nbGUgfSBmcm9tICcuL2ljb25zL3RyaWFuZ2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJ1Y2sgfSBmcm9tICcuL2ljb25zL3RydWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHYgfSBmcm9tICcuL2ljb25zL3R2JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHdpdGNoIH0gZnJvbSAnLi9pY29ucy90d2l0Y2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUd2l0dGVyIH0gZnJvbSAnLi9pY29ucy90d2l0dGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHlwZSB9IGZyb20gJy4vaWNvbnMvdHlwZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVtYnJlbGxhIH0gZnJvbSAnLi9pY29ucy91bWJyZWxsYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVuZGVybGluZSB9IGZyb20gJy4vaWNvbnMvdW5kZXJsaW5lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVW5sb2NrIH0gZnJvbSAnLi9pY29ucy91bmxvY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVcGxvYWRDbG91ZCB9IGZyb20gJy4vaWNvbnMvdXBsb2FkLWNsb3VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXBsb2FkIH0gZnJvbSAnLi9pY29ucy91cGxvYWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyQ2hlY2sgfSBmcm9tICcuL2ljb25zL3VzZXItY2hlY2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyTWludXMgfSBmcm9tICcuL2ljb25zL3VzZXItbWludXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyUGx1cyB9IGZyb20gJy4vaWNvbnMvdXNlci1wbHVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlclggfSBmcm9tICcuL2ljb25zL3VzZXIteCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVzZXIgfSBmcm9tICcuL2ljb25zL3VzZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VycyB9IGZyb20gJy4vaWNvbnMvdXNlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlb09mZiB9IGZyb20gJy4vaWNvbnMvdmlkZW8tb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8gfSBmcm9tICcuL2ljb25zL3ZpZGVvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9pY2VtYWlsIH0gZnJvbSAnLi9pY29ucy92b2ljZW1haWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUxIH0gZnJvbSAnLi9pY29ucy92b2x1bWUtMSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvbHVtZTIgfSBmcm9tICcuL2ljb25zL3ZvbHVtZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lWCB9IGZyb20gJy4vaWNvbnMvdm9sdW1lLXgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUgfSBmcm9tICcuL2ljb25zL3ZvbHVtZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdhdGNoIH0gZnJvbSAnLi9pY29ucy93YXRjaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpZmlPZmYgfSBmcm9tICcuL2ljb25zL3dpZmktb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgV2lmaSB9IGZyb20gJy4vaWNvbnMvd2lmaSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpbmQgfSBmcm9tICcuL2ljb25zL3dpbmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy94LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFhPY3RhZ29uIH0gZnJvbSAnLi9pY29ucy94LW9jdGFnb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYU3F1YXJlIH0gZnJvbSAnLi9pY29ucy94LXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFggfSBmcm9tICcuL2ljb25zL3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBZb3V0dWJlIH0gZnJvbSAnLi9pY29ucy95b3V0dWJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmFwT2ZmIH0gZnJvbSAnLi9pY29ucy96YXAtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWmFwIH0gZnJvbSAnLi9pY29ucy96YXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBab29tSW4gfSBmcm9tICcuL2ljb25zL3pvb20taW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBab29tT3V0IH0gZnJvbSAnLi9pY29ucy96b29tLW91dCc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEJ1dHRvbiA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGlzU2Vjb25kYXJ5ID0gX2EuaXNTZWNvbmRhcnksIGlzVGVydGlhcnkgPSBfYS5pc1RlcnRpYXJ5LCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DbGljayA9IF9hLm9uQ2xpY2ssIGlzRGVzdHJ1Y3RpdmUgPSBfYS5pc0Rlc3RydWN0aXZlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBsZXZlbCA9IGlzVGVydGlhcnkgPyBcInRlcnRpYXJ5XCIgOiBpc1NlY29uZGFyeSA/IFwic2Vjb25kYXJ5XCIgOiBcInByaW1hcnlcIjtcbiAgICB2YXIgbW9kaWZpY2F0b3IgPSBpc0Rlc3RydWN0aXZlID8gXCItZGVzdHJ1Y3RpdmVcIiA6IFwiXCI7XG4gICAgaWYgKGlzU2Vjb25kYXJ5ICYmIGlzVGVydGlhcnkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiVXNlIG9ubHkgb25lIGxldmVsIG1vZGlmaWNhdG9yIFxcXCJpc1NlY29uZGFyeVxcXCIgb3IgXFxcImlzVGVydGlhcnlcXFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgb25DbGljazogb25DbGljaywgY2xhc3NOYW1lOiBcImJ1dHRvbiBidXR0b24tLVwiICsgbGV2ZWwgKyBtb2RpZmljYXRvciArIFwiIFwiICsgY2xhc3NOYW1lLCBkaXNhYmxlZDogaXNEaXNhYmxlZCB9LCBjaGlsZHJlbikpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEJ1dHRvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJ1dHRvbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIENoZWNrYm94ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGlkID0gX2EuaWQsIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgdHlwZSA9IF9hLnR5cGUsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBsYWJlbCA9IF9hLmxhYmVsLCBuYW1lID0gX2EubmFtZSwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHR5cGUgPSB0eXBlIHx8IFwiY2hlY2tib3hcIjtcbiAgICB2YXIgaW5wdXRDb25maWcgPSB7XG4gICAgICAgIGlkOiBpZCB8fCB0eXBlICsgXCItLVwiICsgKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwMDApLnRvRml4ZWQoMCksXG4gICAgfTtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBcInN3aXRjaFwiOlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJzd2l0Y2hfX3RvZ2dsZVwiLCB0eXBlOiBcImNoZWNrYm94XCIgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcInJhZGlvXCI6XG4gICAgICAgICAgICBpbnB1dENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZyksIHsgY2xhc3NOYW1lOiBcInJhZGlvX19idXR0b25cIiwgdHlwZTogXCJyYWRpb1wiLCBuYW1lOiBuYW1lIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICBpbnB1dENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZyksIHsgY2xhc3NOYW1lOiBcImNoZWNrYm94X19ib3hcIiwgdHlwZTogXCJjaGVja2JveFwiIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHZhciBsYWJlbENsYXNzID0gdHlwZSArIFwiX19sYWJlbFwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IHR5cGUgKyBcIiBcIiArIGNsYXNzTmFtZSB9LFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIF9fYXNzaWduKHt9LCBpbnB1dENvbmZpZywgeyBkZWZhdWx0Q2hlY2tlZDogZGVmYXVsdFZhbHVlLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQuY2hlY2tlZCwgZXZlbnQpOyB9LCBkaXNhYmxlZDogaXNEaXNhYmxlZCB9KSksXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IGxhYmVsQ2xhc3MsIGh0bWxGb3I6IGlucHV0Q29uZmlnLmlkIH0sIGxhYmVsKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IENoZWNrYm94O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q2hlY2tib3guanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgRGlzY2xvc3VyZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpc0RlZmF1bHRFeHBhbmRlZCA9IF9hLmlzRGVmYXVsdEV4cGFuZGVkLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGxhYmVsID0gX2EubGFiZWwsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGlzU2VjdGlvbiA9IF9hLmlzU2VjdGlvbiwgb25FeHBhbmQgPSBfYS5vbkV4cGFuZDtcbiAgICB2YXIgX2IgPSByZWFjdF8xLnVzZVN0YXRlKEJvb2xlYW4oaXNEZWZhdWx0RXhwYW5kZWQpKSwgaXNFeHBhbmRlZCA9IF9iWzBdLCBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UgPSBfYlsxXTtcbiAgICB2YXIgdG9nZ2xlRXhhcG5kU3RhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uRXhwYW5kICYmIG9uRXhwYW5kKCFpc0V4cGFuZGVkKTtcbiAgICAgICAgb25FeHBhbmRlZFN0YXRlQ2hhbmdlKCFpc0V4cGFuZGVkKTtcbiAgICB9O1xuICAgIHZhciBsYWJlbENsYXNzID0gaXNTZWN0aW9uID8gXCJkaXNjbG9zdXJlLS1zZWN0aW9uXCIgOiBcIlwiO1xuICAgIHZhciBleHBhbmRDbGFzcyA9IGlzRXhwYW5kZWQgPyBcImRpc2Nsb3N1cmUtLWV4cGFuZGVkXCIgOiBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZSBcIiArIChjbGFzc05hbWUgfHwgXCJcIikgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZV9faXRlbSBcIiArIGV4cGFuZENsYXNzIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkaXNjbG9zdXJlX19sYWJlbCBcIiArIGxhYmVsQ2xhc3MsIG9uQ2xpY2s6IHRvZ2dsZUV4YXBuZFN0YXRlIH0sIGxhYmVsKSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmVfX2NvbnRlbnRcIiB9LCBjaGlsZHJlbikpKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gRGlzY2xvc3VyZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPURpc2Nsb3N1cmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIEljb24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBuYW1lID0gX2EubmFtZSwgY29sb3IgPSBfYS5jb2xvciwgdGV4dCA9IF9hLnRleHQsIGlzU2VsZWN0ZWQgPSBfYS5pc1NlbGVjdGVkLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DbGljayA9IF9hLm9uQ2xpY2s7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgdmFyIGljb25DbGFzcyA9IHRleHQgPyBcIlwiIDogXCJpY29uLS1cIiArIG5hbWU7XG4gICAgdmFyIGNvbG9yQ2xhc3MgPSAhaXNEaXNhYmxlZCAmJiBjb2xvciA/IFwiaWNvbi0tXCIgKyBjb2xvciA6IFwiaWNvbi0tYmxhY2stM1wiO1xuICAgIHZhciBzZWxlY3RlZENsYXNzID0gaXNTZWxlY3RlZCA/IFwiaWNvbi1idXR0b24tLXNlbGVjdGVkXCIgOiBcIlwiO1xuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBzdHlsZToge1xuICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgY3Vyc29yOiBcImRlZmF1bHRcIixcbiAgICAgICAgICAgIH0sIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNsaWNrOiBvbkNsaWNrLCBjbGFzc05hbWU6IFwiaWNvbi1idXR0b24gXCIgKyBzZWxlY3RlZENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImljb24gXCIgKyBpY29uQ2xhc3MgfSwgdGV4dCkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaWNvbiBcIiArIGljb25DbGFzcyArIFwiIFwiICsgY29sb3JDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIHRleHQpKTtcbiAgICB9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gSWNvbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUljb24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIF8xID0gcmVxdWlyZShcIi4vXCIpO1xudmFyIElucHV0Q29tcG9uZW50ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCB0eXBlID0gX2EudHlwZSwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiB0eXBlLCBjbGFzc05hbWU6IGNsYXNzTmFtZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSwgZXZlbnQpOyB9IH0pKTtcbn07XG52YXIgSW5wdXQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCB0eXBlID0gX2EudHlwZSwgaWNvbiA9IF9hLmljb24sIF9iID0gX2EuaWNvbkNvbG9yLCBpY29uQ29sb3IgPSBfYiA9PT0gdm9pZCAwID8gXCJibGFjazNcIiA6IF9iLCBkZWZhdWx0VmFsdWUgPSBfYS5kZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHR5cGUgPSB0eXBlIHx8IFwidGV4dFwiO1xuICAgIHZhciBpbnB1dENsYXNzID0gXCJpbnB1dF9fZmllbGRcIjtcbiAgICBpZiAoaWNvbikge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0IGlucHV0LS13aXRoLWljb25cIiB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXzEuSWNvbiwgeyBuYW1lOiBpY29uLCBjb2xvcjogaWNvbkNvbG9yLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkIH0pLFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIHsgY2xhc3NOYW1lOiBpbnB1dENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUsIHR5cGU6IHR5cGUsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSB9KSkpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dFwiIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChJbnB1dENvbXBvbmVudCwgeyBjbGFzc05hbWU6IGlucHV0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSwgdHlwZTogdHlwZSwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCwgb25DaGFuZ2U6IG9uQ2hhbmdlIH0pKSk7XG4gICAgfVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IElucHV0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW5wdXQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIExhYmVsID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImxhYmVsIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIGNoaWxkcmVuKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gTGFiZWw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1MYWJlbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2NyZWF0ZUJpbmRpbmcgPSAodGhpcyAmJiB0aGlzLl9fY3JlYXRlQmluZGluZykgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9KTtcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBvW2syXSA9IG1ba107XG59KSk7XG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX3NldE1vZHVsZURlZmF1bHQpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XG59KTtcbnZhciBfX2ltcG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0U3RhcikgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydFN0YXIocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciByZWFjdF9vdXRzaWRlX2NsaWNrX2hhbmRsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyXCIpKTtcbnZhciBTZWxlY3QgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS5jbGFzc05hbWUsIGNsYXNzTmFtZSA9IF9iID09PSB2b2lkIDAgPyBcIlwiIDogX2IsIG9wdGlvbnMgPSBfYS5vcHRpb25zLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBvbkV4cGFuZCA9IF9hLm9uRXhwYW5kLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIHZhciBfYyA9IHJlYWN0XzEudXNlU3RhdGUoZmFsc2UpLCBpc0V4cGFuZGVkID0gX2NbMF0sIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUob3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWU7XG4gICAgfSkpLCBzZWxlY3RlZE9wdGlvbiA9IF9kWzBdLCBvblNlbGVjdE9wdGlvbiA9IF9kWzFdO1xuICAgIHJlYWN0XzEudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgb25FeHBhbmQgJiYgb25FeHBhbmQoaXNFeHBhbmRlZCk7XG4gICAgfSwgW2lzRXhwYW5kZWRdKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uQ2hhbmdlICYmIHNlbGVjdGVkT3B0aW9uICYmIG9uQ2hhbmdlKHNlbGVjdGVkT3B0aW9uKTtcbiAgICB9LCBbc2VsZWN0ZWRPcHRpb25dKTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXdTZWxlY3RlZE9wdGlvbiA9IG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZSA9PT0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgICAgICBvblNlbGVjdE9wdGlvbihuZXdTZWxlY3RlZE9wdGlvbik7XG4gICAgfSwgW2RlZmF1bHRWYWx1ZV0pO1xuICAgIHZhciBoYW5kbGVFeHBhbmRDbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSghaXNFeHBhbmRlZCk7IH07XG4gICAgdmFyIGhhbmRsZU91dHNpZGVDbGljayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZShmYWxzZSk7IH07XG4gICAgdmFyIGhhbmRsZVNlbGVjdENsaWNrID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBuZXdPcHRpb24gPSBvcHRpb25zLmZpbmQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdiA9IF9hLnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIHYgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgb25FeHBhbmRlZFN0YXRlQ2hhbmdlKGZhbHNlKTtcbiAgICAgICAgb25TZWxlY3RPcHRpb24obmV3T3B0aW9uKTtcbiAgICB9O1xuICAgIHZhciBleHBhbmRCdXR0b25DbGFzcyA9IGlzRXhwYW5kZWQgPyBcInNlbGVjdC1tZW51X19idXR0b24tLWFjdGl2ZVwiIDogXCJcIjtcbiAgICB2YXIgZXhwYW5MaXN0Q2xhc3MgPSBpc0V4cGFuZGVkID8gXCJzZWxlY3QtbWVudV9fbWVudS0tYWN0aXZlXCIgOiBcIlwiO1xuICAgIHZhciBkaXNhYmxlZENvbG9yQ2xhc3MgPSBpc0Rpc2FibGVkID8gXCJpY29uLS1ibGFjay0zXCIgOiBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3Rfb3V0c2lkZV9jbGlja19oYW5kbGVyXzEuZGVmYXVsdCwgeyBvbk91dHNpZGVDbGljazogaGFuZGxlT3V0c2lkZUNsaWNrLCBkaXNhYmxlZDogIWlzRXhwYW5kZWQgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnUgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19idXR0b24gXCIgKyBleHBhbmRCdXR0b25DbGFzcyArIFwiIFwiICsgZGlzYWJsZWRDb2xvckNsYXNzLCBvbkNsaWNrOiBoYW5kbGVFeHBhbmRDbGljaywgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIHRpdGxlOiBzZWxlY3RlZE9wdGlvbiA9PT0gbnVsbCB8fCBzZWxlY3RlZE9wdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRPcHRpb24udGl0bGUsIHR5cGU6IFwiYnV0dG9uXCIgfSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2xhYmVsXCIgfSwgKHNlbGVjdGVkT3B0aW9uICYmIHNlbGVjdGVkT3B0aW9uLmxhYmVsKSB8fCBwbGFjZWhvbGRlciksXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19jYXJldFwiIH0pKSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX21lbnUgXCIgKyBleHBhbkxpc3RDbGFzcyArIFwiIFwiICsgZGlzYWJsZWRDb2xvckNsYXNzLCBzdHlsZTogeyB0b3A6IFwiLTI0cHhcIiB9IH0sIG9wdGlvbnMgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLm1hcChmdW5jdGlvbiAoX2EsIGkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWUsIGxhYmVsID0gX2EubGFiZWwsIGRpdmlkZXIgPSBfYS5kaXZpZGVyLCB0aXRsZSA9IF9hLnRpdGxlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGl2aWRlciA/IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF8xLmRlZmF1bHQuRnJhZ21lbnQsIHsga2V5OiBcInNlbGVjdC1vcHRpb24tZGl2aWRlci0tXCIgKyBpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZpZGVyICE9PSB0cnVlICYmIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2RpdmlkZXItbGFiZWxcIiB9LCBkaXZpZGVyKSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fZGl2aWRlclwiLCBrZXk6IFwic2VsZWN0LW9wdGlvbi0tXCIgKyBpIH0pKSkgOiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbSBcIiArIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi52YWx1ZSA9PT0gdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFwic2VsZWN0LW1lbnVfX2l0ZW0tLXNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCIpLCBvbkNsaWNrOiBmdW5jdGlvbiAoKSB7IHJldHVybiBoYW5kbGVTZWxlY3RDbGljayh2YWx1ZSk7IH0sIGtleTogXCJzZWxlY3Qtb3B0aW9uLS1cIiArIGksIHRpdGxlOiB0aXRsZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19pdGVtLWljb25cIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbS1sYWJlbFwiIH0sIGxhYmVsKSkpO1xuICAgICAgICAgICAgICAgIH0pKSkpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBTZWxlY3Q7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TZWxlY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBzaXplID0gX2Euc2l6ZSwgd2VpZ2h0ID0gX2Eud2VpZ2h0O1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBzaXplQ2xhc3MgPSBzaXplICYmIFwidHlwZS0tXCIgKyBzaXplO1xuICAgIHZhciB3ZWlnaHRDbGFzcyA9IHdlaWdodCAmJiBcInR5cGUtLVwiICsgd2VpZ2h0O1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInR5cGUgXCIgKyBzaXplQ2xhc3MgKyBcIiBcIiArIHdlaWdodENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUgfSwgY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGV4dC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgVGV4dGFyZWEgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBfYiA9IF9hLnJvd3MsIHJvd3MgPSBfYiA9PT0gdm9pZCAwID8gMiA6IF9iLCBkZWZhdWx0VmFsdWUgPSBfYS5kZWZhdWx0VmFsdWUsIHBsYWNlaG9sZGVyID0gX2EucGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQgPSBfYS5pc0Rpc2FibGVkLCBvbkNoYW5nZSA9IF9hLm9uQ2hhbmdlO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJ0ZXh0YXJlYVwiLCB7IHJvd3M6IHJvd3MsIGNsYXNzTmFtZTogXCJ0ZXh0YXJlYSBcIiArIGNsYXNzTmFtZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBmdW5jdGlvbiAoZXZlbnQpIHsgcmV0dXJuIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKGV2ZW50LnRhcmdldC52YWx1ZSwgZXZlbnQpOyB9IH0pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0YXJlYTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRleHRhcmVhLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfMSA9IHJlcXVpcmUoXCIuL1wiKTtcbnZhciBUZXh0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgaWNvbk5hbWUgPSBfYS5pY29uTmFtZSwgaWNvblRleHQgPSBfYS5pY29uVGV4dCwgaWNvbkNvbG9yID0gX2EuaWNvbkNvbG9yO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwib25ib2FyZGluZy10aXAgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgaWNvbk5hbWUgJiYgKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm9uYm9hcmRpbmctdGlwX19pY29uXCIgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8xLkljb24sIHsgbmFtZTogaWNvbk5hbWUsIGNvbG9yOiBpY29uQ29sb3IsIHRleHQ6IGljb25UZXh0IH0pKSksXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInR5cGUgb25ib2FyZGluZy10aXBfX21zZ1wiIH0sIGNoaWxkcmVuKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IFRleHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaXAuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRpdGxlID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgbGV2ZWwgPSBfYS5sZXZlbCwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICBsZXZlbCA9IGxldmVsIHx8IFwiaDFcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICB2YXIgaGVhZGVyQ2xhc3NOYW1lID0gXCJzZWN0aW9uLXRpdGxlIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lO1xuICAgIHN3aXRjaCAobGV2ZWwpIHtcbiAgICAgICAgY2FzZSBcImgxXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImgyXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMlwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImgzXCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg0XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg1XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2FzZSBcImg2XCI6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoNlwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImgxXCIsIHsgY2xhc3NOYW1lOiBoZWFkZXJDbGFzc05hbWUgfSwgY2hpbGRyZW4pO1xuICAgIH1cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUaXRsZTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRpdGxlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TZWxlY3QgPSBleHBvcnRzLlRleHRhcmVhID0gZXhwb3J0cy5UaXAgPSBleHBvcnRzLlRleHQgPSBleHBvcnRzLkxhYmVsID0gZXhwb3J0cy5UaXRsZSA9IGV4cG9ydHMuSWNvbiA9IGV4cG9ydHMuSW5wdXQgPSBleHBvcnRzLkRpc2Nsb3N1cmUgPSBleHBvcnRzLkNoZWNrYm94ID0gZXhwb3J0cy5CdXR0b24gPSB2b2lkIDA7XG52YXIgQnV0dG9uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vQnV0dG9uXCIpKTtcbmV4cG9ydHMuQnV0dG9uID0gQnV0dG9uXzEuZGVmYXVsdDtcbnZhciBDaGVja2JveF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0NoZWNrYm94XCIpKTtcbmV4cG9ydHMuQ2hlY2tib3ggPSBDaGVja2JveF8xLmRlZmF1bHQ7XG52YXIgRGlzY2xvc3VyZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0Rpc2Nsb3N1cmVcIikpO1xuZXhwb3J0cy5EaXNjbG9zdXJlID0gRGlzY2xvc3VyZV8xLmRlZmF1bHQ7XG52YXIgSW5wdXRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9JbnB1dFwiKSk7XG5leHBvcnRzLklucHV0ID0gSW5wdXRfMS5kZWZhdWx0O1xudmFyIEljb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9JY29uXCIpKTtcbmV4cG9ydHMuSWNvbiA9IEljb25fMS5kZWZhdWx0O1xudmFyIFRpdGxlXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVGl0bGVcIikpO1xuZXhwb3J0cy5UaXRsZSA9IFRpdGxlXzEuZGVmYXVsdDtcbnZhciBMYWJlbF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0xhYmVsXCIpKTtcbmV4cG9ydHMuTGFiZWwgPSBMYWJlbF8xLmRlZmF1bHQ7XG52YXIgVGV4dF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RleHRcIikpO1xuZXhwb3J0cy5UZXh0ID0gVGV4dF8xLmRlZmF1bHQ7XG52YXIgVGlwXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vVGlwXCIpKTtcbmV4cG9ydHMuVGlwID0gVGlwXzEuZGVmYXVsdDtcbnZhciBUZXh0YXJlYV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RleHRhcmVhXCIpKTtcbmV4cG9ydHMuVGV4dGFyZWEgPSBUZXh0YXJlYV8xLmRlZmF1bHQ7XG52YXIgU2VsZWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vU2VsZWN0XCIpKTtcbmV4cG9ydHMuU2VsZWN0ID0gU2VsZWN0XzEuZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCBhcGkgZnJvbSBcIiEuLi9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZpZ21hLXBsdWdpbi1kcy5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjEzLjFcbiAqIHJlYWN0LWlzLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5cblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgaGFzU3ltYm9sID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yO1xudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSA6IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpIDogMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mcmFnbWVudCcpIDogMHhlYWNiO1xudmFyIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpIDogMHhlYWNjO1xudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpIDogMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wcm92aWRlcicpIDogMHhlYWNkO1xudmFyIFJFQUNUX0NPTlRFWFRfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnRleHQnKSA6IDB4ZWFjZTsgLy8gVE9ETzogV2UgZG9uJ3QgdXNlIEFzeW5jTW9kZSBvciBDb25jdXJyZW50TW9kZSBhbnltb3JlLiBUaGV5IHdlcmUgdGVtcG9yYXJ5XG4vLyAodW5zdGFibGUpIEFQSXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZC4gQ2FuIHdlIHJlbW92ZSB0aGUgc3ltYm9scz9cblxudmFyIFJFQUNUX0FTWU5DX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmFzeW5jX21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbmN1cnJlbnRfbW9kZScpIDogMHhlYWNmO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpIDogMHhlYWQwO1xudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpIDogMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKSA6IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5tZW1vJykgOiAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubGF6eScpIDogMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5ibG9jaycpIDogMHhlYWQ5O1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpIDogMHhlYWQ1O1xudmFyIFJFQUNUX1JFU1BPTkRFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucmVzcG9uZGVyJykgOiAweGVhZDY7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnNjb3BlJykgOiAweGVhZDc7XG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgfHwgLy8gTm90ZTogaXRzIHR5cGVvZiBtaWdodCBiZSBvdGhlciB0aGFuICdzeW1ib2wnIG9yICdudW1iZXInIGlmIGl0J3MgYSBwb2x5ZmlsbC5cbiAgdHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1JFU1BPTkRFUl9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1NDT1BFX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQkxPQ0tfVFlQRSk7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZihvYmplY3QpIHtcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCkge1xuICAgIHZhciAkJHR5cGVvZiA9IG9iamVjdC4kJHR5cGVvZjtcblxuICAgIHN3aXRjaCAoJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICB2YXIgdHlwZSA9IG9iamVjdC50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfQVNZTkNfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdmFyICQkdHlwZW9mVHlwZSA9IHR5cGUgJiYgdHlwZS4kJHR5cGVvZjtcblxuICAgICAgICAgICAgc3dpdGNoICgkJHR5cGVvZlR5cGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgICAgICAgICAgcmV0dXJuICQkdHlwZW9mVHlwZTtcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgIHJldHVybiAkJHR5cGVvZjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufSAvLyBBc3luY01vZGUgaXMgZGVwcmVjYXRlZCBhbG9uZyB3aXRoIGlzQXN5bmNNb2RlXG5cbnZhciBBc3luY01vZGUgPSBSRUFDVF9BU1lOQ19NT0RFX1RZUEU7XG52YXIgQ29uY3VycmVudE1vZGUgPSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbnZhciBDb250ZXh0Q29uc3VtZXIgPSBSRUFDVF9DT05URVhUX1RZUEU7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gUkVBQ1RfUFJPVklERVJfVFlQRTtcbnZhciBFbGVtZW50ID0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xudmFyIEZvcndhcmRSZWYgPSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFO1xudmFyIEZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbnZhciBMYXp5ID0gUkVBQ1RfTEFaWV9UWVBFO1xudmFyIE1lbW8gPSBSRUFDVF9NRU1PX1RZUEU7XG52YXIgUG9ydGFsID0gUkVBQ1RfUE9SVEFMX1RZUEU7XG52YXIgUHJvZmlsZXIgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xudmFyIFN0cmljdE1vZGUgPSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFO1xudmFyIFN1c3BlbnNlID0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbnZhciBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IGZhbHNlOyAvLyBBc3luY01vZGUgc2hvdWxkIGJlIGRlcHJlY2F0ZWRcblxuZnVuY3Rpb24gaXNBc3luY01vZGUob2JqZWN0KSB7XG4gIHtcbiAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGVwcmVjYXRlZElzQXN5bmNNb2RlKSB7XG4gICAgICBoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSA9IHRydWU7IC8vIFVzaW5nIGNvbnNvbGVbJ3dhcm4nXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG5cbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnVGhlIFJlYWN0SXMuaXNBc3luY01vZGUoKSBhbGlhcyBoYXMgYmVlbiBkZXByZWNhdGVkLCAnICsgJ2FuZCB3aWxsIGJlIHJlbW92ZWQgaW4gUmVhY3QgMTcrLiBVcGRhdGUgeW91ciBjb2RlIHRvIHVzZSAnICsgJ1JlYWN0SXMuaXNDb25jdXJyZW50TW9kZSgpIGluc3RlYWQuIEl0IGhhcyB0aGUgZXhhY3Qgc2FtZSBBUEkuJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB8fCB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xufVxuZnVuY3Rpb24gaXNDb25jdXJyZW50TW9kZShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05DVVJSRU5UX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dENvbnN1bWVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0NPTlRFWFRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29udGV4dFByb3ZpZGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST1ZJREVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZvcndhcmRSZWYob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzRnJhZ21lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzTGF6eShvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9MQVpZX1RZUEU7XG59XG5mdW5jdGlvbiBpc01lbW8ob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTUVNT19UWVBFO1xufVxuZnVuY3Rpb24gaXNQb3J0YWwob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfUE9SVEFMX1RZUEU7XG59XG5mdW5jdGlvbiBpc1Byb2ZpbGVyKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N0cmljdE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzU3VzcGVuc2Uob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfU1VTUEVOU0VfVFlQRTtcbn1cblxuZXhwb3J0cy5Bc3luY01vZGUgPSBBc3luY01vZGU7XG5leHBvcnRzLkNvbmN1cnJlbnRNb2RlID0gQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLkNvbnRleHRDb25zdW1lciA9IENvbnRleHRDb25zdW1lcjtcbmV4cG9ydHMuQ29udGV4dFByb3ZpZGVyID0gQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5FbGVtZW50ID0gRWxlbWVudDtcbmV4cG9ydHMuRm9yd2FyZFJlZiA9IEZvcndhcmRSZWY7XG5leHBvcnRzLkZyYWdtZW50ID0gRnJhZ21lbnQ7XG5leHBvcnRzLkxhenkgPSBMYXp5O1xuZXhwb3J0cy5NZW1vID0gTWVtbztcbmV4cG9ydHMuUG9ydGFsID0gUG9ydGFsO1xuZXhwb3J0cy5Qcm9maWxlciA9IFByb2ZpbGVyO1xuZXhwb3J0cy5TdHJpY3RNb2RlID0gU3RyaWN0TW9kZTtcbmV4cG9ydHMuU3VzcGVuc2UgPSBTdXNwZW5zZTtcbmV4cG9ydHMuaXNBc3luY01vZGUgPSBpc0FzeW5jTW9kZTtcbmV4cG9ydHMuaXNDb25jdXJyZW50TW9kZSA9IGlzQ29uY3VycmVudE1vZGU7XG5leHBvcnRzLmlzQ29udGV4dENvbnN1bWVyID0gaXNDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLmlzQ29udGV4dFByb3ZpZGVyID0gaXNDb250ZXh0UHJvdmlkZXI7XG5leHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbmV4cG9ydHMuaXNGb3J3YXJkUmVmID0gaXNGb3J3YXJkUmVmO1xuZXhwb3J0cy5pc0ZyYWdtZW50ID0gaXNGcmFnbWVudDtcbmV4cG9ydHMuaXNMYXp5ID0gaXNMYXp5O1xuZXhwb3J0cy5pc01lbW8gPSBpc01lbW87XG5leHBvcnRzLmlzUG9ydGFsID0gaXNQb3J0YWw7XG5leHBvcnRzLmlzUHJvZmlsZXIgPSBpc1Byb2ZpbGVyO1xuZXhwb3J0cy5pc1N0cmljdE1vZGUgPSBpc1N0cmljdE1vZGU7XG5leHBvcnRzLmlzU3VzcGVuc2UgPSBpc1N1c3BlbnNlO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudFR5cGUgPSBpc1ZhbGlkRWxlbWVudFR5cGU7XG5leHBvcnRzLnR5cGVPZiA9IHR5cGVPZjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1pcy5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuXG52YXIgX2NyZWF0ZUNsYXNzID0gZnVuY3Rpb24gKCkgeyBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgcHJvcHMpIHsgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykgeyB2YXIgZGVzY3JpcHRvciA9IHByb3BzW2ldOyBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7IGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTsgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSBkZXNjcmlwdG9yLndyaXRhYmxlID0gdHJ1ZTsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpOyB9IH0gcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHsgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTsgaWYgKHN0YXRpY1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfTsgfSgpO1xuXG52YXIgX3JlYWN0ID0gcmVxdWlyZSgncmVhY3QnKTtcblxudmFyIF9yZWFjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9yZWFjdCk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZSgncHJvcC10eXBlcycpO1xuXG52YXIgX3Byb3BUeXBlczIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9wcm9wVHlwZXMpO1xuXG52YXIgX2FpcmJuYlByb3BUeXBlcyA9IHJlcXVpcmUoJ2FpcmJuYi1wcm9wLXR5cGVzJyk7XG5cbnZhciBfY29uc29saWRhdGVkRXZlbnRzID0gcmVxdWlyZSgnY29uc29saWRhdGVkLWV2ZW50cycpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoJ29iamVjdC52YWx1ZXMnKTtcblxudmFyIF9vYmplY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfb2JqZWN0KTtcblxudmFyIF9kb2N1bWVudCA9IHJlcXVpcmUoJ2RvY3VtZW50LmNvbnRhaW5zJyk7XG5cbnZhciBfZG9jdW1lbnQyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZG9jdW1lbnQpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHsgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKTsgfSB9XG5cbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHNlbGYsIGNhbGwpIHsgaWYgKCFzZWxmKSB7IHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTsgfSByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTsgfSBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHsgY29uc3RydWN0b3I6IHsgdmFsdWU6IHN1YkNsYXNzLCBlbnVtZXJhYmxlOiBmYWxzZSwgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBpZiAoc3VwZXJDbGFzcykgT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKSA6IHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7IH1cblxudmFyIERJU1BMQVkgPSB7XG4gIEJMT0NLOiAnYmxvY2snLFxuICBGTEVYOiAnZmxleCcsXG4gIElOTElORTogJ2lubGluZScsXG4gIElOTElORV9CTE9DSzogJ2lubGluZS1ibG9jaycsXG4gIENPTlRFTlRTOiAnY29udGVudHMnXG59O1xuXG52YXIgcHJvcFR5cGVzID0gKDAsIF9haXJibmJQcm9wVHlwZXMuZm9yYmlkRXh0cmFQcm9wcykoe1xuICBjaGlsZHJlbjogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5ub2RlLmlzUmVxdWlyZWQsXG4gIG9uT3V0c2lkZUNsaWNrOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZGlzYWJsZWQ6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYm9vbCxcbiAgdXNlQ2FwdHVyZTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5ib29sLFxuICBkaXNwbGF5OiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLm9uZU9mKCgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShESVNQTEFZKSlcbn0pO1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBkaXNhYmxlZDogZmFsc2UsXG5cbiAgLy8gYHVzZUNhcHR1cmVgIGlzIHNldCB0byB0cnVlIGJ5IGRlZmF1bHQgc28gdGhhdCBhIGBzdG9wUHJvcGFnYXRpb25gIGluIHRoZVxuICAvLyBjaGlsZHJlbiB3aWxsIG5vdCBwcmV2ZW50IGFsbCBvdXRzaWRlIGNsaWNrIGhhbmRsZXJzIGZyb20gZmlyaW5nIC0gbWFqYVxuICB1c2VDYXB0dXJlOiB0cnVlLFxuICBkaXNwbGF5OiBESVNQTEFZLkJMT0NLXG59O1xuXG52YXIgT3V0c2lkZUNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhPdXRzaWRlQ2xpY2tIYW5kbGVyLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBPdXRzaWRlQ2xpY2tIYW5kbGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIE91dHNpZGVDbGlja0hhbmRsZXIpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIF90aGlzID0gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBPdXRzaWRlQ2xpY2tIYW5kbGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT3V0c2lkZUNsaWNrSGFuZGxlcikpLmNhbGwuYXBwbHkoX3JlZiwgW3RoaXNdLmNvbmNhdChhcmdzKSkpO1xuXG4gICAgX3RoaXMub25Nb3VzZURvd24gPSBfdGhpcy5vbk1vdXNlRG93bi5iaW5kKF90aGlzKTtcbiAgICBfdGhpcy5vbk1vdXNlVXAgPSBfdGhpcy5vbk1vdXNlVXAuYmluZChfdGhpcyk7XG4gICAgX3RoaXMuc2V0Q2hpbGROb2RlUmVmID0gX3RoaXMuc2V0Q2hpbGROb2RlUmVmLmJpbmQoX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIF9jcmVhdGVDbGFzcyhPdXRzaWRlQ2xpY2tIYW5kbGVyLCBbe1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICAgIHZhciBfcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgZGlzYWJsZWQgPSBfcHJvcHMuZGlzYWJsZWQsXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gX3Byb3BzLnVzZUNhcHR1cmU7XG5cblxuICAgICAgICBpZiAoIWRpc2FibGVkKSB0aGlzLmFkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXIodXNlQ2FwdHVyZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21wb25lbnREaWRNb3VudDtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZFVwZGF0ZScsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShfcmVmMikge1xuICAgICAgICB2YXIgcHJldkRpc2FibGVkID0gX3JlZjIuZGlzYWJsZWQ7XG4gICAgICAgIHZhciBfcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzMi5kaXNhYmxlZCxcbiAgICAgICAgICAgIHVzZUNhcHR1cmUgPSBfcHJvcHMyLnVzZUNhcHR1cmU7XG5cbiAgICAgICAgaWYgKHByZXZEaXNhYmxlZCAhPT0gZGlzYWJsZWQpIHtcbiAgICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50RGlkVXBkYXRlO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50V2lsbFVubW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVycygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50V2lsbFVubW91bnQ7XG4gICAgfSgpXG5cbiAgICAvLyBVc2UgbW91c2Vkb3duL21vdXNldXAgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyByZW1haW4gb3V0c2lkZSB0aGUgcm9vdCdzXG4gICAgLy8gZGVzY2VuZGFudCB0cmVlLCBldmVuIHdoZW4gZHJhZ2dlZC4gVGhpcyBzaG91bGQgYWxzbyBnZXQgdHJpZ2dlcmVkIG9uXG4gICAgLy8gdG91Y2ggZGV2aWNlcy5cblxuICB9LCB7XG4gICAga2V5OiAnb25Nb3VzZURvd24nLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBvbk1vdXNlRG93bihlKSB7XG4gICAgICAgIHZhciB1c2VDYXB0dXJlID0gdGhpcy5wcm9wcy51c2VDYXB0dXJlO1xuXG5cbiAgICAgICAgdmFyIGlzRGVzY2VuZGFudE9mUm9vdCA9IHRoaXMuY2hpbGROb2RlICYmICgwLCBfZG9jdW1lbnQyWydkZWZhdWx0J10pKHRoaXMuY2hpbGROb2RlLCBlLnRhcmdldCk7XG4gICAgICAgIGlmICghaXNEZXNjZW5kYW50T2ZSb290KSB7XG4gICAgICAgICAgaWYgKHRoaXMucmVtb3ZlTW91c2VVcCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSAoMCwgX2NvbnNvbGlkYXRlZEV2ZW50cy5hZGRFdmVudExpc3RlbmVyKShkb2N1bWVudCwgJ21vdXNldXAnLCB0aGlzLm9uTW91c2VVcCwgeyBjYXB0dXJlOiB1c2VDYXB0dXJlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvbk1vdXNlRG93bjtcbiAgICB9KClcblxuICAgIC8vIFVzZSBtb3VzZWRvd24vbW91c2V1cCB0byBlbmZvcmNlIHRoYXQgY2xpY2tzIHJlbWFpbiBvdXRzaWRlIHRoZSByb290J3NcbiAgICAvLyBkZXNjZW5kYW50IHRyZWUsIGV2ZW4gd2hlbiBkcmFnZ2VkLiBUaGlzIHNob3VsZCBhbHNvIGdldCB0cmlnZ2VyZWQgb25cbiAgICAvLyB0b3VjaCBkZXZpY2VzLlxuXG4gIH0sIHtcbiAgICBrZXk6ICdvbk1vdXNlVXAnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBvbk1vdXNlVXAoZSkge1xuICAgICAgICB2YXIgb25PdXRzaWRlQ2xpY2sgPSB0aGlzLnByb3BzLm9uT3V0c2lkZUNsaWNrO1xuXG5cbiAgICAgICAgdmFyIGlzRGVzY2VuZGFudE9mUm9vdCA9IHRoaXMuY2hpbGROb2RlICYmICgwLCBfZG9jdW1lbnQyWydkZWZhdWx0J10pKHRoaXMuY2hpbGROb2RlLCBlLnRhcmdldCk7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAoKTtcbiAgICAgICAgICB0aGlzLnJlbW92ZU1vdXNlVXAgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0Rlc2NlbmRhbnRPZlJvb3QpIHtcbiAgICAgICAgICBvbk91dHNpZGVDbGljayhlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb25Nb3VzZVVwO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAnc2V0Q2hpbGROb2RlUmVmJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gc2V0Q2hpbGROb2RlUmVmKHJlZikge1xuICAgICAgICB0aGlzLmNoaWxkTm9kZSA9IHJlZjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNldENoaWxkTm9kZVJlZjtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2FkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBhZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVNb3VzZURvd24gPSAoMCwgX2NvbnNvbGlkYXRlZEV2ZW50cy5hZGRFdmVudExpc3RlbmVyKShkb2N1bWVudCwgJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd24sIHsgY2FwdHVyZTogdXNlQ2FwdHVyZSB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFkZE1vdXNlRG93bkV2ZW50TGlzdGVuZXI7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdyZW1vdmVFdmVudExpc3RlbmVycycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZURvd24pIHRoaXMucmVtb3ZlTW91c2VEb3duKCk7XG4gICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHRoaXMucmVtb3ZlTW91c2VVcCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVtb3ZlRXZlbnRMaXN0ZW5lcnM7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdyZW5kZXInLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICAgIHZhciBfcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNoaWxkcmVuID0gX3Byb3BzMy5jaGlsZHJlbixcbiAgICAgICAgICAgIGRpc3BsYXkgPSBfcHJvcHMzLmRpc3BsYXk7XG5cblxuICAgICAgICByZXR1cm4gX3JlYWN0MlsnZGVmYXVsdCddLmNyZWF0ZUVsZW1lbnQoXG4gICAgICAgICAgJ2RpdicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVmOiB0aGlzLnNldENoaWxkTm9kZVJlZixcbiAgICAgICAgICAgIHN0eWxlOiBkaXNwbGF5ICE9PSBESVNQTEFZLkJMT0NLICYmICgwLCBfb2JqZWN0MlsnZGVmYXVsdCddKShESVNQTEFZKS5pbmNsdWRlcyhkaXNwbGF5KSA/IHsgZGlzcGxheTogZGlzcGxheSB9IDogdW5kZWZpbmVkXG4gICAgICAgICAgfSxcbiAgICAgICAgICBjaGlsZHJlblxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVuZGVyO1xuICAgIH0oKVxuICB9XSk7XG5cbiAgcmV0dXJuIE91dHNpZGVDbGlja0hhbmRsZXI7XG59KF9yZWFjdDJbJ2RlZmF1bHQnXS5Db21wb25lbnQpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBPdXRzaWRlQ2xpY2tIYW5kbGVyO1xuXG5cbk91dHNpZGVDbGlja0hhbmRsZXIucHJvcFR5cGVzID0gcHJvcFR5cGVzO1xuT3V0c2lkZUNsaWNrSGFuZGxlci5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnJlc29sdmVkXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnVpbGQvT3V0c2lkZUNsaWNrSGFuZGxlcicpO1xuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNy4wLjJcbiAqIHJlYWN0LmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbi8vIFRPRE86IHRoaXMgaXMgc3BlY2lhbCBiZWNhdXNlIGl0IGdldHMgaW1wb3J0ZWQgZHVyaW5nIGJ1aWxkLlxudmFyIFJlYWN0VmVyc2lvbiA9ICcxNy4wLjInO1xuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xuZXhwb3J0cy5GcmFnbWVudCA9IDB4ZWFjYjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IDB4ZWFjYztcbmV4cG9ydHMuUHJvZmlsZXIgPSAweGVhZDI7XG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSAweGVhY2U7XG52YXIgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IDB4ZWFkMDtcbmV4cG9ydHMuU3VzcGVuc2UgPSAweGVhZDE7XG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gMHhlYWQ4O1xudmFyIFJFQUNUX01FTU9fVFlQRSA9IDB4ZWFkMztcbnZhciBSRUFDVF9MQVpZX1RZUEUgPSAweGVhZDQ7XG52YXIgUkVBQ1RfQkxPQ0tfVFlQRSA9IDB4ZWFkOTtcbnZhciBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IDB4ZWFkYTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gMHhlYWQ1O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSAweGVhZDc7XG52YXIgUkVBQ1RfT1BBUVVFX0lEX1RZUEUgPSAweGVhZTA7XG52YXIgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSAweGVhZTE7XG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSAweGVhZTI7XG52YXIgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gMHhlYWUzO1xuXG5pZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuZm9yKSB7XG4gIHZhciBzeW1ib2xGb3IgPSBTeW1ib2wuZm9yO1xuICBSRUFDVF9FTEVNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmVsZW1lbnQnKTtcbiAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnBvcnRhbCcpO1xuICBleHBvcnRzLkZyYWdtZW50ID0gc3ltYm9sRm9yKCdyZWFjdC5mcmFnbWVudCcpO1xuICBleHBvcnRzLlN0cmljdE1vZGUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIGV4cG9ydHMuUHJvZmlsZXIgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBleHBvcnRzLlN1c3BlbnNlID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgZGlzcGF0Y2hlci5cbiAqL1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIgPSB7XG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogQHR5cGUge1JlYWN0Q29tcG9uZW50fVxuICAgKi9cbiAgY3VycmVudDogbnVsbFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBiYXRjaCdzIGNvbmZpZ3VyYXRpb24gc3VjaCBhcyBob3cgbG9uZyBhbiB1cGRhdGVcbiAqIHNob3VsZCBzdXNwZW5kIGZvciBpZiBpdCBuZWVkcyB0by5cbiAqL1xudmFyIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnID0ge1xuICB0cmFuc2l0aW9uOiAwXG59O1xuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IG93bmVyLlxuICpcbiAqIFRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBjb21wb25lbnQgd2hvIHNob3VsZCBvd24gYW55IGNvbXBvbmVudHMgdGhhdCBhcmVcbiAqIGN1cnJlbnRseSBiZWluZyBjb25zdHJ1Y3RlZC5cbiAqL1xudmFyIFJlYWN0Q3VycmVudE93bmVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbnZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0ge307XG52YXIgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IG51bGw7XG5mdW5jdGlvbiBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spIHtcbiAge1xuICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgfVxufVxuXG57XG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lID0gZnVuY3Rpb24gKHN0YWNrKSB7XG4gICAge1xuICAgICAgY3VycmVudEV4dHJhU3RhY2tGcmFtZSA9IHN0YWNrO1xuICAgIH1cbiAgfTsgLy8gU3RhY2sgaW1wbGVtZW50YXRpb24gaW5qZWN0ZWQgYnkgdGhlIGN1cnJlbnQgcmVuZGVyZXIuXG5cblxuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjayA9IG51bGw7XG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdGFjayA9ICcnOyAvLyBBZGQgYW4gZXh0cmEgdG9wIGZyYW1lIHdoaWxlIGFuIGVsZW1lbnQgaXMgYmVpbmcgdmFsaWRhdGVkXG5cbiAgICBpZiAoY3VycmVudEV4dHJhU3RhY2tGcmFtZSkge1xuICAgICAgc3RhY2sgKz0gY3VycmVudEV4dHJhU3RhY2tGcmFtZTtcbiAgICB9IC8vIERlbGVnYXRlIHRvIHRoZSBpbmplY3RlZCByZW5kZXJlci1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICB2YXIgaW1wbCA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrO1xuXG4gICAgaWYgKGltcGwpIHtcbiAgICAgIHN0YWNrICs9IGltcGwoKSB8fCAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhY2s7XG4gIH07XG59XG5cbi8qKlxuICogVXNlZCBieSBhY3QoKSB0byB0cmFjayB3aGV0aGVyIHlvdSdyZSBpbnNpZGUgYW4gYWN0KCkgc2NvcGUuXG4gKi9cbnZhciBJc1NvbWVSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWc6IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnLFxuICBSZWFjdEN1cnJlbnRPd25lcjogUmVhY3RDdXJyZW50T3duZXIsXG4gIElzU29tZVJlbmRlcmVyQWN0aW5nOiBJc1NvbWVSZW5kZXJlckFjdGluZyxcbiAgLy8gVXNlZCBieSByZW5kZXJlcnMgdG8gYXZvaWQgYnVuZGxpbmcgb2JqZWN0LWFzc2lnbiB0d2ljZSBpbiBVTUQgYnVuZGxlczpcbiAgYXNzaWduOiBfYXNzaWduXG59O1xuXG57XG4gIFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWUgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lO1xufVxuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IHt9O1xuXG5mdW5jdGlvbiB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgY2FsbGVyTmFtZSkge1xuICB7XG4gICAgdmFyIF9jb25zdHJ1Y3RvciA9IHB1YmxpY0luc3RhbmNlLmNvbnN0cnVjdG9yO1xuICAgIHZhciBjb21wb25lbnROYW1lID0gX2NvbnN0cnVjdG9yICYmIChfY29uc3RydWN0b3IuZGlzcGxheU5hbWUgfHwgX2NvbnN0cnVjdG9yLm5hbWUpIHx8ICdSZWFjdENsYXNzJztcbiAgICB2YXIgd2FybmluZ0tleSA9IGNvbXBvbmVudE5hbWUgKyBcIi5cIiArIGNhbGxlck5hbWU7XG5cbiAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yVW5tb3VudGVkQ29tcG9uZW50W3dhcm5pbmdLZXldKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IoXCJDYW4ndCBjYWxsICVzIG9uIGEgY29tcG9uZW50IHRoYXQgaXMgbm90IHlldCBtb3VudGVkLiBcIiArICdUaGlzIGlzIGEgbm8tb3AsIGJ1dCBpdCBtaWdodCBpbmRpY2F0ZSBhIGJ1ZyBpbiB5b3VyIGFwcGxpY2F0aW9uLiAnICsgJ0luc3RlYWQsIGFzc2lnbiB0byBgdGhpcy5zdGF0ZWAgZGlyZWN0bHkgb3IgZGVmaW5lIGEgYHN0YXRlID0ge307YCAnICsgJ2NsYXNzIHByb3BlcnR5IHdpdGggdGhlIGRlc2lyZWQgc3RhdGUgaW4gdGhlICVzIGNvbXBvbmVudC4nLCBjYWxsZXJOYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSA9IHRydWU7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBpcyB0aGUgYWJzdHJhY3QgQVBJIGZvciBhbiB1cGRhdGUgcXVldWUuXG4gKi9cblxuXG52YXIgUmVhY3ROb29wVXBkYXRlUXVldWUgPSB7XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciBvciBub3QgdGhpcyBjb21wb3NpdGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHdlIHdhbnQgdG8gdGVzdC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBtb3VudGVkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqIEBwcm90ZWN0ZWRcbiAgICogQGZpbmFsXG4gICAqL1xuICBpc01vdW50ZWQ6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSxcblxuICAvKipcbiAgICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICAgKiBjZXJ0YWludHkgdGhhdCB3ZSBhcmUgKipub3QqKiBpbiBhIERPTSB0cmFuc2FjdGlvbi5cbiAgICpcbiAgICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICAgKiBjb21wb25lbnQncyBzdGF0ZSBoYXMgY2hhbmdlZCBidXQgYHNldFN0YXRlYCB3YXMgbm90IGNhbGxlZC5cbiAgICpcbiAgICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICAgKiBgY29tcG9uZW50V2lsbFVwZGF0ZWAgYW5kIGBjb21wb25lbnREaWRVcGRhdGVgLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBjb21wb25lbnQgaXMgdXBkYXRlZC5cbiAgICogQHBhcmFtIHs/c3RyaW5nfSBjYWxsZXJOYW1lIG5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZUZvcmNlVXBkYXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdmb3JjZVVwZGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyBhbGwgb2YgdGhlIHN0YXRlLiBBbHdheXMgdXNlIHRoaXMgb3IgYHNldFN0YXRlYCB0byBtdXRhdGUgc3RhdGUuXG4gICAqIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAgICpcbiAgICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAgICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb21wbGV0ZVN0YXRlIE5leHQgc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVSZXBsYWNlU3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgY29tcGxldGVTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3JlcGxhY2VTdGF0ZScpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gVGhpcyBvbmx5IGV4aXN0cyBiZWNhdXNlIF9wZW5kaW5nU3RhdGUgaXNcbiAgICogaW50ZXJuYWwuIFRoaXMgcHJvdmlkZXMgYSBtZXJnaW5nIHN0cmF0ZWd5IHRoYXQgaXMgbm90IGF2YWlsYWJsZSB0byBkZWVwXG4gICAqIHByb3BlcnRpZXMgd2hpY2ggaXMgY29uZnVzaW5nLiBUT0RPOiBFeHBvc2UgcGVuZGluZ1N0YXRlIG9yIGRvbid0IHVzZSBpdFxuICAgKiBkdXJpbmcgdGhlIG1lcmdlLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB0aGF0IHNob3VsZCByZXJlbmRlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggc3RhdGUuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gTmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChwdWJsaWNJbnN0YW5jZSwgcGFydGlhbFN0YXRlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnc2V0U3RhdGUnKTtcbiAgfVxufTtcblxudmFyIGVtcHR5T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eU9iamVjdCk7XG59XG4vKipcbiAqIEJhc2UgY2xhc3MgaGVscGVycyBmb3IgdGhlIHVwZGF0aW5nIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICovXG5cblxuZnVuY3Rpb24gQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7IC8vIFdlIGluaXRpYWxpemUgdGhlIGRlZmF1bHQgdXBkYXRlciBidXQgdGhlIHJlYWwgb25lIGdldHMgaW5qZWN0ZWQgYnkgdGhlXG4gIC8vIHJlbmRlcmVyLlxuXG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbkNvbXBvbmVudC5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCA9IHt9O1xuLyoqXG4gKiBTZXRzIGEgc3Vic2V0IG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIHRvIG11dGF0ZVxuICogc3RhdGUuIFlvdSBzaG91bGQgdHJlYXQgYHRoaXMuc3RhdGVgIGFzIGltbXV0YWJsZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBgdGhpcy5zdGF0ZWAgd2lsbCBiZSBpbW1lZGlhdGVseSB1cGRhdGVkLCBzb1xuICogYWNjZXNzaW5nIGB0aGlzLnN0YXRlYCBhZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIG1heSByZXR1cm4gdGhlIG9sZCB2YWx1ZS5cbiAqXG4gKiBUaGVyZSBpcyBubyBndWFyYW50ZWUgdGhhdCBjYWxscyB0byBgc2V0U3RhdGVgIHdpbGwgcnVuIHN5bmNocm9ub3VzbHksXG4gKiBhcyB0aGV5IG1heSBldmVudHVhbGx5IGJlIGJhdGNoZWQgdG9nZXRoZXIuICBZb3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWxcbiAqIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjYWxsIHRvIHNldFN0YXRlIGlzIGFjdHVhbGx5XG4gKiBjb21wbGV0ZWQuXG4gKlxuICogV2hlbiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIHRvIHNldFN0YXRlLCBpdCB3aWxsIGJlIGNhbGxlZCBhdCBzb21lIHBvaW50IGluXG4gKiB0aGUgZnV0dXJlIChub3Qgc3luY2hyb25vdXNseSkuIEl0IHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIHVwIHRvIGRhdGVcbiAqIGNvbXBvbmVudCBhcmd1bWVudHMgKHN0YXRlLCBwcm9wcywgY29udGV4dCkuIFRoZXNlIHZhbHVlcyBjYW4gYmUgZGlmZmVyZW50XG4gKiBmcm9tIHRoaXMuKiBiZWNhdXNlIHlvdXIgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBhZnRlciByZWNlaXZlUHJvcHMgYnV0IGJlZm9yZVxuICogc2hvdWxkQ29tcG9uZW50VXBkYXRlLCBhbmQgdGhpcyBuZXcgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCB3aWxsIG5vdCB5ZXQgYmVcbiAqIGFzc2lnbmVkIHRvIHRoaXMuXG4gKlxuICogQHBhcmFtIHtvYmplY3R8ZnVuY3Rpb259IHBhcnRpYWxTdGF0ZSBOZXh0IHBhcnRpYWwgc3RhdGUgb3IgZnVuY3Rpb24gdG9cbiAqICAgICAgICBwcm9kdWNlIG5leHQgcGFydGlhbCBzdGF0ZSB0byBiZSBtZXJnZWQgd2l0aCBjdXJyZW50IHN0YXRlLlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciBzdGF0ZSBpcyB1cGRhdGVkLlxuICogQGZpbmFsXG4gKiBAcHJvdGVjdGVkXG4gKi9cblxuQ29tcG9uZW50LnByb3RvdHlwZS5zZXRTdGF0ZSA9IGZ1bmN0aW9uIChwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrKSB7XG4gIGlmICghKHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBwYXJ0aWFsU3RhdGUgPT09ICdmdW5jdGlvbicgfHwgcGFydGlhbFN0YXRlID09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0U3RhdGUoLi4uKTogdGFrZXMgYW4gb2JqZWN0IG9mIHN0YXRlIHZhcmlhYmxlcyB0byB1cGRhdGUgb3IgYSBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMuXCIgKTtcbiAgICB9XG4gIH1cblxuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xufTtcbi8qKlxuICogRm9yY2VzIGFuIHVwZGF0ZS4gVGhpcyBzaG91bGQgb25seSBiZSBpbnZva2VkIHdoZW4gaXQgaXMga25vd24gd2l0aFxuICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gKlxuICogWW91IG1heSB3YW50IHRvIGNhbGwgdGhpcyB3aGVuIHlvdSBrbm93IHRoYXQgc29tZSBkZWVwZXIgYXNwZWN0IG9mIHRoZVxuICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gKlxuICogVGhpcyB3aWxsIG5vdCBpbnZva2UgYHNob3VsZENvbXBvbmVudFVwZGF0ZWAsIGJ1dCBpdCB3aWxsIGludm9rZVxuICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAqXG4gKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIHVwZGF0ZSBpcyBjb21wbGV0ZS5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cblxuQ29tcG9uZW50LnByb3RvdHlwZS5mb3JjZVVwZGF0ZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICB0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsIGNhbGxiYWNrLCAnZm9yY2VVcGRhdGUnKTtcbn07XG4vKipcbiAqIERlcHJlY2F0ZWQgQVBJcy4gVGhlc2UgQVBJcyB1c2VkIHRvIGV4aXN0IG9uIGNsYXNzaWMgUmVhY3QgY2xhc3NlcyBidXQgc2luY2VcbiAqIHdlIHdvdWxkIGxpa2UgdG8gZGVwcmVjYXRlIHRoZW0sIHdlJ3JlIG5vdCBnb2luZyB0byBtb3ZlIHRoZW0gb3ZlciB0byB0aGlzXG4gKiBtb2Rlcm4gYmFzZSBjbGFzcy4gSW5zdGVhZCwgd2UgZGVmaW5lIGEgZ2V0dGVyIHRoYXQgd2FybnMgaWYgaXQncyBhY2Nlc3NlZC5cbiAqL1xuXG5cbntcbiAgdmFyIGRlcHJlY2F0ZWRBUElzID0ge1xuICAgIGlzTW91bnRlZDogWydpc01vdW50ZWQnLCAnSW5zdGVhZCwgbWFrZSBzdXJlIHRvIGNsZWFuIHVwIHN1YnNjcmlwdGlvbnMgYW5kIHBlbmRpbmcgcmVxdWVzdHMgaW4gJyArICdjb21wb25lbnRXaWxsVW5tb3VudCB0byBwcmV2ZW50IG1lbW9yeSBsZWFrcy4nXSxcbiAgICByZXBsYWNlU3RhdGU6IFsncmVwbGFjZVN0YXRlJywgJ1JlZmFjdG9yIHlvdXIgY29kZSB0byB1c2Ugc2V0U3RhdGUgaW5zdGVhZCAoc2VlICcgKyAnaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8zMjM2KS4nXVxuICB9O1xuXG4gIHZhciBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcgPSBmdW5jdGlvbiAobWV0aG9kTmFtZSwgaW5mbykge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21wb25lbnQucHJvdG90eXBlLCBtZXRob2ROYW1lLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignJXMoLi4uKSBpcyBkZXByZWNhdGVkIGluIHBsYWluIEphdmFTY3JpcHQgUmVhY3QgY2xhc3Nlcy4gJXMnLCBpbmZvWzBdLCBpbmZvWzFdKTtcblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGZvciAodmFyIGZuTmFtZSBpbiBkZXByZWNhdGVkQVBJcykge1xuICAgIGlmIChkZXByZWNhdGVkQVBJcy5oYXNPd25Qcm9wZXJ0eShmbk5hbWUpKSB7XG4gICAgICBkZWZpbmVEZXByZWNhdGlvbldhcm5pbmcoZm5OYW1lLCBkZXByZWNhdGVkQVBJc1tmbk5hbWVdKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gQ29tcG9uZW50RHVtbXkoKSB7fVxuXG5Db21wb25lbnREdW1teS5wcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuLyoqXG4gKiBDb252ZW5pZW5jZSBjb21wb25lbnQgd2l0aCBkZWZhdWx0IHNoYWxsb3cgZXF1YWxpdHkgY2hlY2sgZm9yIHNDVS5cbiAqL1xuXG5mdW5jdGlvbiBQdXJlQ29tcG9uZW50KHByb3BzLCBjb250ZXh0LCB1cGRhdGVyKSB7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jb250ZXh0ID0gY29udGV4dDsgLy8gSWYgYSBjb21wb25lbnQgaGFzIHN0cmluZyByZWZzLCB3ZSB3aWxsIGFzc2lnbiBhIGRpZmZlcmVudCBvYmplY3QgbGF0ZXIuXG5cbiAgdGhpcy5yZWZzID0gZW1wdHlPYmplY3Q7XG4gIHRoaXMudXBkYXRlciA9IHVwZGF0ZXIgfHwgUmVhY3ROb29wVXBkYXRlUXVldWU7XG59XG5cbnZhciBwdXJlQ29tcG9uZW50UHJvdG90eXBlID0gUHVyZUNvbXBvbmVudC5wcm90b3R5cGUgPSBuZXcgQ29tcG9uZW50RHVtbXkoKTtcbnB1cmVDb21wb25lbnRQcm90b3R5cGUuY29uc3RydWN0b3IgPSBQdXJlQ29tcG9uZW50OyAvLyBBdm9pZCBhbiBleHRyYSBwcm90b3R5cGUganVtcCBmb3IgdGhlc2UgbWV0aG9kcy5cblxuX2Fzc2lnbihwdXJlQ29tcG9uZW50UHJvdG90eXBlLCBDb21wb25lbnQucHJvdG90eXBlKTtcblxucHVyZUNvbXBvbmVudFByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudCA9IHRydWU7XG5cbi8vIGFuIGltbXV0YWJsZSBvYmplY3Qgd2l0aCBhIHNpbmdsZSBtdXRhYmxlIHZhbHVlXG5mdW5jdGlvbiBjcmVhdGVSZWYoKSB7XG4gIHZhciByZWZPYmplY3QgPSB7XG4gICAgY3VycmVudDogbnVsbFxuICB9O1xuXG4gIHtcbiAgICBPYmplY3Quc2VhbChyZWZPYmplY3QpO1xuICB9XG5cbiAgcmV0dXJuIHJlZk9iamVjdDtcbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5GcmFnbWVudDpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgZXhwb3J0cy5Qcm9maWxlcjpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBleHBvcnRzLlN0cmljdE1vZGU6XG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xuXG4gICAgY2FzZSBleHBvcnRzLlN1c3BlbnNlOlxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICB2YXIgY29udGV4dCA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShjb250ZXh0KSArICcuQ29uc3VtZXInO1xuXG4gICAgICBjYXNlIFJFQUNUX1BST1ZJREVSX1RZUEU6XG4gICAgICAgIHZhciBwcm92aWRlciA9IHR5cGU7XG4gICAgICAgIHJldHVybiBnZXRDb250ZXh0TmFtZShwcm92aWRlci5fY29udGV4dCkgKyAnLlByb3ZpZGVyJztcblxuICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpO1xuXG4gICAgICBjYXNlIFJFQUNUX0JMT0NLX1RZUEU6XG4gICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoaW5pdChwYXlsb2FkKSk7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgUkVTRVJWRURfUFJPUFMgPSB7XG4gIGtleTogdHJ1ZSxcbiAgcmVmOiB0cnVlLFxuICBfX3NlbGY6IHRydWUsXG4gIF9fc291cmNlOiB0cnVlXG59O1xudmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duLCBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biwgZGlkV2FybkFib3V0U3RyaW5nUmVmcztcblxue1xuICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzID0ge307XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkUmVmKGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAncmVmJykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ3JlZicpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcucmVmICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGhhc1ZhbGlkS2V5KGNvbmZpZykge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcbiAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgJ2tleScpLmdldDtcblxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nS2V5ID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nS2V5LmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAna2V5Jywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gIHZhciB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYgPSBmdW5jdGlvbiAoKSB7XG4gICAge1xuICAgICAgaWYgKCFzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bikge1xuICAgICAgICBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93biA9IHRydWU7XG5cbiAgICAgICAgZXJyb3IoJyVzOiBgcmVmYCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYuaXNSZWFjdFdhcm5pbmcgPSB0cnVlO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdyZWYnLCB7XG4gICAgZ2V0OiB3YXJuQWJvdXRBY2Nlc3NpbmdSZWYsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgY29uZmlnLl9fc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gY29uZmlnLl9fc2VsZikge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignQ29tcG9uZW50IFwiJXNcIiBjb250YWlucyB0aGUgc3RyaW5nIHJlZiBcIiVzXCIuICcgKyAnU3VwcG9ydCBmb3Igc3RyaW5nIHJlZnMgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuICcgKyAnVGhpcyBjYXNlIGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBhbiBhcnJvdyBmdW5jdGlvbi4gJyArICdXZSBhc2sgeW91IHRvIG1hbnVhbGx5IGZpeCB0aGlzIGNhc2UgYnkgdXNpbmcgdXNlUmVmKCkgb3IgY3JlYXRlUmVmKCkgaW5zdGVhZC4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLXN0cmluZy1yZWYnLCBjb21wb25lbnROYW1lLCBjb25maWcucmVmKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IFJlYWN0IGVsZW1lbnQuIFRoaXMgbm8gbG9uZ2VyIGFkaGVyZXMgdG9cbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXG4gKiB3aWxsIG5vdCB3b3JrLiBJbnN0ZWFkIHRlc3QgJCR0eXBlb2YgZmllbGQgYWdhaW5zdCBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgdG8gY2hlY2tcbiAqIGlmIHNvbWV0aGluZyBpcyBhIFJlYWN0IEVsZW1lbnQuXG4gKlxuICogQHBhcmFtIHsqfSB0eXBlXG4gKiBAcGFyYW0geyp9IHByb3BzXG4gKiBAcGFyYW0geyp9IGtleVxuICogQHBhcmFtIHtzdHJpbmd8b2JqZWN0fSByZWZcbiAqIEBwYXJhbSB7Kn0gb3duZXJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xuICogZGlmZmVyZW50IGZyb20gdGhlIGBvd25lcmAgd2hlbiBSZWFjdC5jcmVhdGVFbGVtZW50IGlzIGNhbGxlZCwgc28gdGhhdCB3ZVxuICogY2FuIHdhcm4uIFdlIHdhbnQgdG8gZ2V0IHJpZCBvZiBvd25lciBhbmQgcmVwbGFjZSBzdHJpbmcgYHJlZmBzIHdpdGggYXJyb3dcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cbiAqIGNoYW5nZSBpbiBiZWhhdmlvci5cbiAqIEBwYXJhbSB7Kn0gc291cmNlIEFuIGFubm90YXRpb24gb2JqZWN0IChhZGRlZCBieSBhIHRyYW5zcGlsZXIgb3Igb3RoZXJ3aXNlKVxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cbiAqIEBpbnRlcm5hbFxuICovXG5cblxudmFyIFJlYWN0RWxlbWVudCA9IGZ1bmN0aW9uICh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpIHtcbiAgdmFyIGVsZW1lbnQgPSB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3dzIHVzIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IHRoaXMgYXMgYSBSZWFjdCBFbGVtZW50XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0VMRU1FTlRfVFlQRSxcbiAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XG4gICAgdHlwZTogdHlwZSxcbiAgICBrZXk6IGtleSxcbiAgICByZWY6IHJlZixcbiAgICBwcm9wczogcHJvcHMsXG4gICAgLy8gUmVjb3JkIHRoZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIHRoaXMgZWxlbWVudC5cbiAgICBfb3duZXI6IG93bmVyXG4gIH07XG5cbiAge1xuICAgIC8vIFRoZSB2YWxpZGF0aW9uIGZsYWcgaXMgY3VycmVudGx5IG11dGF0aXZlLiBXZSBwdXQgaXQgb25cbiAgICAvLyBhbiBleHRlcm5hbCBiYWNraW5nIHN0b3JlIHNvIHRoYXQgd2UgY2FuIGZyZWV6ZSB0aGUgd2hvbGUgb2JqZWN0LlxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cbiAgICAvLyBjb21tb25seSB1c2VkIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAgICBlbGVtZW50Ll9zdG9yZSA9IHt9OyAvLyBUbyBtYWtlIGNvbXBhcmluZyBSZWFjdEVsZW1lbnRzIGVhc2llciBmb3IgdGVzdGluZyBwdXJwb3Nlcywgd2UgbWFrZVxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcbiAgICAvLyBpbmNsdWRlIGV2ZXJ5IGVudmlyb25tZW50IHdlIHJ1biB0ZXN0cyBpbiksIHNvIHRoZSB0ZXN0IGZyYW1ld29ya1xuICAgIC8vIGlnbm9yZXMgaXQuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudC5fc3RvcmUsICd2YWxpZGF0ZWQnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmYWxzZVxuICAgIH0pOyAvLyBzZWxmIGFuZCBzb3VyY2UgYXJlIERFViBvbmx5IHByb3BlcnRpZXMuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zZWxmJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHNlbGZcbiAgICB9KTsgLy8gVHdvIGVsZW1lbnRzIGNyZWF0ZWQgaW4gdHdvIGRpZmZlcmVudCBwbGFjZXMgc2hvdWxkIGJlIGNvbnNpZGVyZWRcbiAgICAvLyBlcXVhbCBmb3IgdGVzdGluZyBwdXJwb3NlcyBhbmQgdGhlcmVmb3JlIHdlIGhpZGUgaXQgZnJvbSBlbnVtZXJhdGlvbi5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50LCAnX3NvdXJjZScsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzb3VyY2VcbiAgICB9KTtcblxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICBPYmplY3QuZnJlZXplKGVsZW1lbnQucHJvcHMpO1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn07XG4vKipcbiAqIENyZWF0ZSBhbmQgcmV0dXJuIGEgbmV3IFJlYWN0RWxlbWVudCBvZiB0aGUgZ2l2ZW4gdHlwZS5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjY3JlYXRlZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodHlwZSwgY29uZmlnLCBjaGlsZHJlbikge1xuICB2YXIgcHJvcE5hbWU7IC8vIFJlc2VydmVkIG5hbWVzIGFyZSBleHRyYWN0ZWRcblxuICB2YXIgcHJvcHMgPSB7fTtcbiAgdmFyIGtleSA9IG51bGw7XG4gIHZhciByZWYgPSBudWxsO1xuICB2YXIgc2VsZiA9IG51bGw7XG4gIHZhciBzb3VyY2UgPSBudWxsO1xuXG4gIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XG4gICAgICByZWYgPSBjb25maWcucmVmO1xuXG4gICAgICB7XG4gICAgICAgIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfVxuXG4gICAgc2VsZiA9IGNvbmZpZy5fX3NlbGYgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zZWxmO1xuICAgIHNvdXJjZSA9IGNvbmZpZy5fX3NvdXJjZSA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNvbmZpZy5fX3NvdXJjZTsgLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBjb25maWcpIHtcbiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgcHJvcE5hbWUpICYmICFSRVNFUlZFRF9QUk9QUy5oYXNPd25Qcm9wZXJ0eShwcm9wTmFtZSkpIHtcbiAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gY29uZmlnW3Byb3BOYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmIChPYmplY3QuZnJlZXplKSB7XG4gICAgICAgIE9iamVjdC5mcmVlemUoY2hpbGRBcnJheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcHJvcHMuY2hpbGRyZW4gPSBjaGlsZEFycmF5O1xuICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xuXG5cbiAgaWYgKHR5cGUgJiYgdHlwZS5kZWZhdWx0UHJvcHMpIHtcbiAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChrZXkgfHwgcmVmKSB7XG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XG5cbiAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlZikge1xuICAgICAgICBkZWZpbmVSZWZQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCwgcHJvcHMpO1xufVxuZnVuY3Rpb24gY2xvbmVBbmRSZXBsYWNlS2V5KG9sZEVsZW1lbnQsIG5ld0tleSkge1xuICB2YXIgbmV3RWxlbWVudCA9IFJlYWN0RWxlbWVudChvbGRFbGVtZW50LnR5cGUsIG5ld0tleSwgb2xkRWxlbWVudC5yZWYsIG9sZEVsZW1lbnQuX3NlbGYsIG9sZEVsZW1lbnQuX3NvdXJjZSwgb2xkRWxlbWVudC5fb3duZXIsIG9sZEVsZW1lbnQucHJvcHMpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8qKlxuICogQ2xvbmUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgdXNpbmcgZWxlbWVudCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2Nsb25lZWxlbWVudFxuICovXG5cbmZ1bmN0aW9uIGNsb25lRWxlbWVudChlbGVtZW50LCBjb25maWcsIGNoaWxkcmVuKSB7XG4gIGlmICghIShlbGVtZW50ID09PSBudWxsIHx8IGVsZW1lbnQgPT09IHVuZGVmaW5lZCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJSZWFjdC5jbG9uZUVsZW1lbnQoLi4uKTogVGhlIGFyZ3VtZW50IG11c3QgYmUgYSBSZWFjdCBlbGVtZW50LCBidXQgeW91IHBhc3NlZCBcIiArIGVsZW1lbnQgKyBcIi5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBwcm9wTmFtZTsgLy8gT3JpZ2luYWwgcHJvcHMgYXJlIGNvcGllZFxuXG4gIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGVsZW1lbnQucHJvcHMpOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cblxuICB2YXIga2V5ID0gZWxlbWVudC5rZXk7XG4gIHZhciByZWYgPSBlbGVtZW50LnJlZjsgLy8gU2VsZiBpcyBwcmVzZXJ2ZWQgc2luY2UgdGhlIG93bmVyIGlzIHByZXNlcnZlZC5cblxuICB2YXIgc2VsZiA9IGVsZW1lbnQuX3NlbGY7IC8vIFNvdXJjZSBpcyBwcmVzZXJ2ZWQgc2luY2UgY2xvbmVFbGVtZW50IGlzIHVubGlrZWx5IHRvIGJlIHRhcmdldGVkIGJ5IGFcbiAgLy8gdHJhbnNwaWxlciwgYW5kIHRoZSBvcmlnaW5hbCBzb3VyY2UgaXMgcHJvYmFibHkgYSBiZXR0ZXIgaW5kaWNhdG9yIG9mIHRoZVxuICAvLyB0cnVlIG93bmVyLlxuXG4gIHZhciBzb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7IC8vIE93bmVyIHdpbGwgYmUgcHJlc2VydmVkLCB1bmxlc3MgcmVmIGlzIG92ZXJyaWRkZW5cblxuICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgLy8gU2lsZW50bHkgc3RlYWwgdGhlIHJlZiBmcm9tIHRoZSBwYXJlbnQuXG4gICAgICByZWYgPSBjb25maWcucmVmO1xuICAgICAgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuICAgIH1cblxuICAgIGlmIChoYXNWYWxpZEtleShjb25maWcpKSB7XG4gICAgICBrZXkgPSAnJyArIGNvbmZpZy5rZXk7XG4gICAgfSAvLyBSZW1haW5pbmcgcHJvcGVydGllcyBvdmVycmlkZSBleGlzdGluZyBwcm9wc1xuXG5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuXG4gICAgaWYgKGVsZW1lbnQudHlwZSAmJiBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgICBkZWZhdWx0UHJvcHMgPSBlbGVtZW50LnR5cGUuZGVmYXVsdFByb3BzO1xuICAgIH1cblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIGlmIChjb25maWdbcHJvcE5hbWVdID09PSB1bmRlZmluZWQgJiYgZGVmYXVsdFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gLy8gQ2hpbGRyZW4gY2FuIGJlIG1vcmUgdGhhbiBvbmUgYXJndW1lbnQsIGFuZCB0aG9zZSBhcmUgdHJhbnNmZXJyZWQgb250b1xuICAvLyB0aGUgbmV3bHkgYWxsb2NhdGVkIHByb3BzIG9iamVjdC5cblxuXG4gIHZhciBjaGlsZHJlbkxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuXG4gIGlmIChjaGlsZHJlbkxlbmd0aCA9PT0gMSkge1xuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gIH0gZWxzZSBpZiAoY2hpbGRyZW5MZW5ndGggPiAxKSB7XG4gICAgdmFyIGNoaWxkQXJyYXkgPSBBcnJheShjaGlsZHJlbkxlbmd0aCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkQXJyYXlbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfVxuXG4gIHJldHVybiBSZWFjdEVsZW1lbnQoZWxlbWVudC50eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBvd25lciwgcHJvcHMpO1xufVxuLyoqXG4gKiBWZXJpZmllcyB0aGUgb2JqZWN0IGlzIGEgUmVhY3RFbGVtZW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNpc3ZhbGlkZWxlbWVudFxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgYG9iamVjdGAgaXMgYSBSZWFjdEVsZW1lbnQuXG4gKiBAZmluYWxcbiAqL1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudChvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmIG9iamVjdCAhPT0gbnVsbCAmJiBvYmplY3QuJCR0eXBlb2YgPT09IFJFQUNUX0VMRU1FTlRfVFlQRTtcbn1cblxudmFyIFNFUEFSQVRPUiA9ICcuJztcbnZhciBTVUJTRVBBUkFUT1IgPSAnOic7XG4vKipcbiAqIEVzY2FwZSBhbmQgd3JhcCBrZXkgc28gaXQgaXMgc2FmZSB0byB1c2UgYXMgYSByZWFjdGlkXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSB0byBiZSBlc2NhcGVkLlxuICogQHJldHVybiB7c3RyaW5nfSB0aGUgZXNjYXBlZCBrZXkuXG4gKi9cblxuZnVuY3Rpb24gZXNjYXBlKGtleSkge1xuICB2YXIgZXNjYXBlUmVnZXggPSAvWz06XS9nO1xuICB2YXIgZXNjYXBlckxvb2t1cCA9IHtcbiAgICAnPSc6ICc9MCcsXG4gICAgJzonOiAnPTInXG4gIH07XG4gIHZhciBlc2NhcGVkU3RyaW5nID0ga2V5LnJlcGxhY2UoZXNjYXBlUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgIHJldHVybiBlc2NhcGVyTG9va3VwW21hdGNoXTtcbiAgfSk7XG4gIHJldHVybiAnJCcgKyBlc2NhcGVkU3RyaW5nO1xufVxuLyoqXG4gKiBUT0RPOiBUZXN0IHRoYXQgYSBzaW5nbGUgY2hpbGQgYW5kIGFuIGFycmF5IHdpdGggb25lIGl0ZW0gaGF2ZSB0aGUgc2FtZSBrZXlcbiAqIHBhdHRlcm4uXG4gKi9cblxuXG52YXIgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xudmFyIHVzZXJQcm92aWRlZEtleUVzY2FwZVJlZ2V4ID0gL1xcLysvZztcblxuZnVuY3Rpb24gZXNjYXBlVXNlclByb3ZpZGVkS2V5KHRleHQpIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZSh1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCwgJyQmLycpO1xufVxuLyoqXG4gKiBHZW5lcmF0ZSBhIGtleSBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIGEgZWxlbWVudCB3aXRoaW4gYSBzZXQuXG4gKlxuICogQHBhcmFtIHsqfSBlbGVtZW50IEEgZWxlbWVudCB0aGF0IGNvdWxkIGNvbnRhaW4gYSBtYW51YWwga2V5LlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IEluZGV4IHRoYXQgaXMgdXNlZCBpZiBhIG1hbnVhbCBrZXkgaXMgbm90IHByb3ZpZGVkLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEtleShlbGVtZW50LCBpbmRleCkge1xuICAvLyBEbyBzb21lIHR5cGVjaGVja2luZyBoZXJlIHNpbmNlIHdlIGNhbGwgdGhpcyBibGluZGx5LiBXZSB3YW50IHRvIGVuc3VyZVxuICAvLyB0aGF0IHdlIGRvbid0IGJsb2NrIHBvdGVudGlhbCBmdXR1cmUgRVMgQVBJcy5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnb2JqZWN0JyAmJiBlbGVtZW50ICE9PSBudWxsICYmIGVsZW1lbnQua2V5ICE9IG51bGwpIHtcbiAgICAvLyBFeHBsaWNpdCBrZXlcbiAgICByZXR1cm4gZXNjYXBlKCcnICsgZWxlbWVudC5rZXkpO1xuICB9IC8vIEltcGxpY2l0IGtleSBkZXRlcm1pbmVkIGJ5IHRoZSBpbmRleCBpbiB0aGUgc2V0XG5cblxuICByZXR1cm4gaW5kZXgudG9TdHJpbmcoMzYpO1xufVxuXG5mdW5jdGlvbiBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIGFycmF5LCBlc2NhcGVkUHJlZml4LCBuYW1lU29GYXIsIGNhbGxiYWNrKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIGNoaWxkcmVuO1xuXG4gIGlmICh0eXBlID09PSAndW5kZWZpbmVkJyB8fCB0eXBlID09PSAnYm9vbGVhbicpIHtcbiAgICAvLyBBbGwgb2YgdGhlIGFib3ZlIGFyZSBwZXJjZWl2ZWQgYXMgbnVsbC5cbiAgICBjaGlsZHJlbiA9IG51bGw7XG4gIH1cblxuICB2YXIgaW52b2tlQ2FsbGJhY2sgPSBmYWxzZTtcblxuICBpZiAoY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgc3dpdGNoIChjaGlsZHJlbi4kJHR5cGVvZikge1xuICAgICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgICBpbnZva2VDYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfVxuXG4gIGlmIChpbnZva2VDYWxsYmFjaykge1xuICAgIHZhciBfY2hpbGQgPSBjaGlsZHJlbjtcbiAgICB2YXIgbWFwcGVkQ2hpbGQgPSBjYWxsYmFjayhfY2hpbGQpOyAvLyBJZiBpdCdzIHRoZSBvbmx5IGNoaWxkLCB0cmVhdCB0aGUgbmFtZSBhcyBpZiBpdCB3YXMgd3JhcHBlZCBpbiBhbiBhcnJheVxuICAgIC8vIHNvIHRoYXQgaXQncyBjb25zaXN0ZW50IGlmIHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gZ3Jvd3M6XG5cbiAgICB2YXIgY2hpbGRLZXkgPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SICsgZ2V0RWxlbWVudEtleShfY2hpbGQsIDApIDogbmFtZVNvRmFyO1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWFwcGVkQ2hpbGQpKSB7XG4gICAgICB2YXIgZXNjYXBlZENoaWxkS2V5ID0gJyc7XG5cbiAgICAgIGlmIChjaGlsZEtleSAhPSBudWxsKSB7XG4gICAgICAgIGVzY2FwZWRDaGlsZEtleSA9IGVzY2FwZVVzZXJQcm92aWRlZEtleShjaGlsZEtleSkgKyAnLyc7XG4gICAgICB9XG5cbiAgICAgIG1hcEludG9BcnJheShtYXBwZWRDaGlsZCwgYXJyYXksIGVzY2FwZWRDaGlsZEtleSwgJycsIGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChtYXBwZWRDaGlsZCAhPSBudWxsKSB7XG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQobWFwcGVkQ2hpbGQpKSB7XG4gICAgICAgIG1hcHBlZENoaWxkID0gY2xvbmVBbmRSZXBsYWNlS2V5KG1hcHBlZENoaWxkLCAvLyBLZWVwIGJvdGggdGhlIChtYXBwZWQpIGFuZCBvbGQga2V5cyBpZiB0aGV5IGRpZmZlciwganVzdCBhc1xuICAgICAgICAvLyB0cmF2ZXJzZUFsbENoaWxkcmVuIHVzZWQgdG8gZG8gZm9yIG9iamVjdHMgYXMgY2hpbGRyZW5cbiAgICAgICAgZXNjYXBlZFByZWZpeCArICggLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBSZWFjdC5Qb3J0YWwgZG9lc24ndCBoYXZlIGEga2V5XG4gICAgICAgIG1hcHBlZENoaWxkLmtleSAmJiAoIV9jaGlsZCB8fCBfY2hpbGQua2V5ICE9PSBtYXBwZWRDaGlsZC5rZXkpID8gLy8gJEZsb3dGaXhNZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBleGlzdGluZyBlbGVtZW50J3Mga2V5IGNhbiBiZSBhIG51bWJlclxuICAgICAgICBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoJycgKyBtYXBwZWRDaGlsZC5rZXkpICsgJy8nIDogJycpICsgY2hpbGRLZXkpO1xuICAgICAgfVxuXG4gICAgICBhcnJheS5wdXNoKG1hcHBlZENoaWxkKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIHZhciBjaGlsZDtcbiAgdmFyIG5leHROYW1lO1xuICB2YXIgc3VidHJlZUNvdW50ID0gMDsgLy8gQ291bnQgb2YgY2hpbGRyZW4gZm91bmQgaW4gdGhlIGN1cnJlbnQgc3VidHJlZS5cblxuICB2YXIgbmV4dE5hbWVQcmVmaXggPSBuYW1lU29GYXIgPT09ICcnID8gU0VQQVJBVE9SIDogbmFtZVNvRmFyICsgU1VCU0VQQVJBVE9SO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNoaWxkID0gY2hpbGRyZW5baV07XG4gICAgICBuZXh0TmFtZSA9IG5leHROYW1lUHJlZml4ICsgZ2V0RWxlbWVudEtleShjaGlsZCwgaSk7XG4gICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKGNoaWxkcmVuKTtcblxuICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdmFyIGl0ZXJhYmxlQ2hpbGRyZW4gPSBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICAvLyBXYXJuIGFib3V0IHVzaW5nIE1hcHMgYXMgY2hpbGRyZW5cbiAgICAgICAgaWYgKGl0ZXJhdG9yRm4gPT09IGl0ZXJhYmxlQ2hpbGRyZW4uZW50cmllcykge1xuICAgICAgICAgIGlmICghZGlkV2FybkFib3V0TWFwcykge1xuICAgICAgICAgICAgd2FybignVXNpbmcgTWFwcyBhcyBjaGlsZHJlbiBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ1VzZSBhbiBhcnJheSBvZiBrZXllZCBSZWFjdEVsZW1lbnRzIGluc3RlYWQuJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKGl0ZXJhYmxlQ2hpbGRyZW4pO1xuICAgICAgdmFyIHN0ZXA7XG4gICAgICB2YXIgaWkgPSAwO1xuXG4gICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgIGNoaWxkID0gc3RlcC52YWx1ZTtcbiAgICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGlpKyspO1xuICAgICAgICBzdWJ0cmVlQ291bnQgKz0gbWFwSW50b0FycmF5KGNoaWxkLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmV4dE5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIgY2hpbGRyZW5TdHJpbmcgPSAnJyArIGNoaWxkcmVuO1xuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJPYmplY3RzIGFyZSBub3QgdmFsaWQgYXMgYSBSZWFjdCBjaGlsZCAoZm91bmQ6IFwiICsgKGNoaWxkcmVuU3RyaW5nID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmpvaW4oJywgJykgKyAnfScgOiBjaGlsZHJlblN0cmluZykgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN1YnRyZWVDb3VudDtcbn1cblxuLyoqXG4gKiBNYXBzIGNoaWxkcmVuIHRoYXQgYXJlIHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5tYXBcbiAqXG4gKiBUaGUgcHJvdmlkZWQgbWFwRnVuY3Rpb24oY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZnVuYyBUaGUgbWFwIGZ1bmN0aW9uLlxuICogQHBhcmFtIHsqfSBjb250ZXh0IENvbnRleHQgZm9yIG1hcEZ1bmN0aW9uLlxuICogQHJldHVybiB7b2JqZWN0fSBPYmplY3QgY29udGFpbmluZyB0aGUgb3JkZXJlZCBtYXAgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmMsIGNvbnRleHQpIHtcbiAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIG1hcEludG9BcnJheShjaGlsZHJlbiwgcmVzdWx0LCAnJywgJycsIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBmdW5jLmNhbGwoY29udGV4dCwgY2hpbGQsIGNvdW50KyspO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzXG4gKiBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmNvdW50XG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgY2hpbGRyZW4uXG4gKi9cblxuXG5mdW5jdGlvbiBjb3VudENoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIHZhciBuID0gMDtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBuKys7IC8vIERvbid0IHJldHVybiBhbnl0aGluZ1xuICB9KTtcbiAgcmV0dXJuIG47XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgdGhyb3VnaCBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVuZm9yZWFjaFxuICpcbiAqIFRoZSBwcm92aWRlZCBmb3JFYWNoRnVuYyhjaGlsZCwgaW5kZXgpIHdpbGwgYmUgY2FsbGVkIGZvciBlYWNoXG4gKiBsZWFmIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHBhcmFtIHtmdW5jdGlvbigqLCBpbnQpfSBmb3JFYWNoRnVuY1xuICogQHBhcmFtIHsqfSBmb3JFYWNoQ29udGV4dCBDb250ZXh0IGZvciBmb3JFYWNoQ29udGV4dC5cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaENoaWxkcmVuKGNoaWxkcmVuLCBmb3JFYWNoRnVuYywgZm9yRWFjaENvbnRleHQpIHtcbiAgbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uICgpIHtcbiAgICBmb3JFYWNoRnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmcuXG4gIH0sIGZvckVhY2hDb250ZXh0KTtcbn1cbi8qKlxuICogRmxhdHRlbiBhIGNoaWxkcmVuIG9iamVjdCAodHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gKSBhbmRcbiAqIHJldHVybiBhbiBhcnJheSB3aXRoIGFwcHJvcHJpYXRlbHkgcmUta2V5ZWQgY2hpbGRyZW4uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVudG9hcnJheVxuICovXG5cblxuZnVuY3Rpb24gdG9BcnJheShjaGlsZHJlbikge1xuICByZXR1cm4gbWFwQ2hpbGRyZW4oY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfSkgfHwgW107XG59XG4vKipcbiAqIFJldHVybnMgdGhlIGZpcnN0IGNoaWxkIGluIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiBhbmQgdmVyaWZpZXMgdGhhdCB0aGVyZVxuICogaXMgb25seSBvbmUgY2hpbGQgaW4gdGhlIGNvbGxlY3Rpb24uXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVub25seVxuICpcbiAqIFRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGEgc2luZ2xlIGNoaWxkIGdldHNcbiAqIHBhc3NlZCB3aXRob3V0IGEgd3JhcHBlciwgYnV0IHRoZSBwdXJwb3NlIG9mIHRoaXMgaGVscGVyIGZ1bmN0aW9uIGlzIHRvXG4gKiBhYnN0cmFjdCBhd2F5IHRoZSBwYXJ0aWN1bGFyIHN0cnVjdHVyZSBvZiBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gez9vYmplY3R9IGNoaWxkcmVuIENoaWxkIGNvbGxlY3Rpb24gc3RydWN0dXJlLlxuICogQHJldHVybiB7UmVhY3RFbGVtZW50fSBUaGUgZmlyc3QgYW5kIG9ubHkgYFJlYWN0RWxlbWVudGAgY29udGFpbmVkIGluIHRoZVxuICogc3RydWN0dXJlLlxuICovXG5cblxuZnVuY3Rpb24gb25seUNoaWxkKGNoaWxkcmVuKSB7XG4gIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuQ2hpbGRyZW4ub25seSBleHBlY3RlZCB0byByZWNlaXZlIGEgc2luZ2xlIFJlYWN0IGVsZW1lbnQgY2hpbGQuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hpbGRyZW47XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRleHQoZGVmYXVsdFZhbHVlLCBjYWxjdWxhdGVDaGFuZ2VkQml0cykge1xuICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09IHVuZGVmaW5lZCkge1xuICAgIGNhbGN1bGF0ZUNoYW5nZWRCaXRzID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICBpZiAoY2FsY3VsYXRlQ2hhbmdlZEJpdHMgIT09IG51bGwgJiYgdHlwZW9mIGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdjcmVhdGVDb250ZXh0OiBFeHBlY3RlZCB0aGUgb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMnLCBjYWxjdWxhdGVDaGFuZ2VkQml0cyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICBfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6IGNhbGN1bGF0ZUNoYW5nZWRCaXRzLFxuICAgIC8vIEFzIGEgd29ya2Fyb3VuZCB0byBzdXBwb3J0IG11bHRpcGxlIGNvbmN1cnJlbnQgcmVuZGVyZXJzLCB3ZSBjYXRlZ29yaXplXG4gICAgLy8gc29tZSByZW5kZXJlcnMgYXMgcHJpbWFyeSBhbmQgb3RoZXJzIGFzIHNlY29uZGFyeS4gV2Ugb25seSBleHBlY3RcbiAgICAvLyB0aGVyZSB0byBiZSB0d28gY29uY3VycmVudCByZW5kZXJlcnMgYXQgbW9zdDogUmVhY3QgTmF0aXZlIChwcmltYXJ5KSBhbmRcbiAgICAvLyBGYWJyaWMgKHNlY29uZGFyeSk7IFJlYWN0IERPTSAocHJpbWFyeSkgYW5kIFJlYWN0IEFSVCAoc2Vjb25kYXJ5KS5cbiAgICAvLyBTZWNvbmRhcnkgcmVuZGVyZXJzIHN0b3JlIHRoZWlyIGNvbnRleHQgdmFsdWVzIG9uIHNlcGFyYXRlIGZpZWxkcy5cbiAgICBfY3VycmVudFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgX2N1cnJlbnRWYWx1ZTI6IGRlZmF1bHRWYWx1ZSxcbiAgICAvLyBVc2VkIHRvIHRyYWNrIGhvdyBtYW55IGNvbmN1cnJlbnQgcmVuZGVyZXJzIHRoaXMgY29udGV4dCBjdXJyZW50bHlcbiAgICAvLyBzdXBwb3J0cyB3aXRoaW4gaW4gYSBzaW5nbGUgcmVuZGVyZXIuIFN1Y2ggYXMgcGFyYWxsZWwgc2VydmVyIHJlbmRlcmluZy5cbiAgICBfdGhyZWFkQ291bnQ6IDAsXG4gICAgLy8gVGhlc2UgYXJlIGNpcmN1bGFyXG4gICAgUHJvdmlkZXI6IG51bGwsXG4gICAgQ29uc3VtZXI6IG51bGxcbiAgfTtcbiAgY29udGV4dC5Qcm92aWRlciA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfUFJPVklERVJfVFlQRSxcbiAgICBfY29udGV4dDogY29udGV4dFxuICB9O1xuICB2YXIgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSBmYWxzZTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IGZhbHNlO1xuXG4gIHtcbiAgICAvLyBBIHNlcGFyYXRlIG9iamVjdCwgYnV0IHByb3hpZXMgYmFjayB0byB0aGUgb3JpZ2luYWwgY29udGV4dCBvYmplY3QgZm9yXG4gICAgLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIEl0IGhhcyBhIGRpZmZlcmVudCAkJHR5cGVvZiwgc28gd2UgY2FuIHByb3Blcmx5XG4gICAgLy8gd2FybiBmb3IgdGhlIGluY29ycmVjdCB1c2FnZSBvZiBDb250ZXh0IGFzIGEgQ29uc3VtZXIuXG4gICAgdmFyIENvbnN1bWVyID0ge1xuICAgICAgJCR0eXBlb2Y6IFJFQUNUX0NPTlRFWFRfVFlQRSxcbiAgICAgIF9jb250ZXh0OiBjb250ZXh0LFxuICAgICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0c1xuICAgIH07IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG5vdCBzZXR0aW5nIGEgdmFsdWUsIHdoaWNoIGlzIGludGVudGlvbmFsIGhlcmVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENvbnN1bWVyLCB7XG4gICAgICBQcm92aWRlcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdDb25zdW1lclByb3ZpZGVyKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuUHJvdmlkZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuUHJvdmlkZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuUHJvdmlkZXI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9Qcm92aWRlcikge1xuICAgICAgICAgIGNvbnRleHQuUHJvdmlkZXIgPSBfUHJvdmlkZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBfY3VycmVudFZhbHVlOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICBjb250ZXh0Ll9jdXJyZW50VmFsdWUgPSBfY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZTI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTI7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF9jdXJyZW50VmFsdWUyKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlMiA9IF9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX3RocmVhZENvdW50OiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll90aHJlYWRDb3VudDtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoX3RocmVhZENvdW50KSB7XG4gICAgICAgICAgY29udGV4dC5fdGhyZWFkQ291bnQgPSBfdGhyZWFkQ291bnQ7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBDb25zdW1lcjoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzKSB7XG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycyA9IHRydWU7XG5cbiAgICAgICAgICAgIGVycm9yKCdSZW5kZXJpbmcgPENvbnRleHQuQ29uc3VtZXIuQ29uc3VtZXI+IGlzIG5vdCBzdXBwb3J0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byByZW5kZXIgPENvbnRleHQuQ29uc3VtZXI+IGluc3RlYWQ/Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuQ29uc3VtZXI7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkaXNwbGF5TmFtZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5kaXNwbGF5TmFtZTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGlzcGxheU5hbWUpIHtcbiAgICAgICAgICBpZiAoIWhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyKSB7XG4gICAgICAgICAgICB3YXJuKCdTZXR0aW5nIGBkaXNwbGF5TmFtZWAgb24gQ29udGV4dC5Db25zdW1lciBoYXMgbm8gZWZmZWN0LiAnICsgXCJZb3Ugc2hvdWxkIHNldCBpdCBkaXJlY3RseSBvbiB0aGUgY29udGV4dCB3aXRoIENvbnRleHQuZGlzcGxheU5hbWUgPSAnJXMnLlwiLCBkaXNwbGF5TmFtZSk7XG5cbiAgICAgICAgICAgIGhhc1dhcm5lZEFib3V0RGlzcGxheU5hbWVPbkNvbnN1bWVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gJEZsb3dGaXhNZTogRmxvdyBjb21wbGFpbnMgYWJvdXQgbWlzc2luZyBwcm9wZXJ0aWVzIGJlY2F1c2UgaXQgZG9lc24ndCB1bmRlcnN0YW5kIGRlZmluZVByb3BlcnR5XG5cbiAgICBjb250ZXh0LkNvbnN1bWVyID0gQ29uc3VtZXI7XG4gIH1cblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyID0gbnVsbDtcbiAgICBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIyID0gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBjb250ZXh0O1xufVxuXG52YXIgVW5pbml0aWFsaXplZCA9IC0xO1xudmFyIFBlbmRpbmcgPSAwO1xudmFyIFJlc29sdmVkID0gMTtcbnZhciBSZWplY3RlZCA9IDI7XG5cbmZ1bmN0aW9uIGxhenlJbml0aWFsaXplcihwYXlsb2FkKSB7XG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFVuaW5pdGlhbGl6ZWQpIHtcbiAgICB2YXIgY3RvciA9IHBheWxvYWQuX3Jlc3VsdDtcbiAgICB2YXIgdGhlbmFibGUgPSBjdG9yKCk7IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cbiAgICB2YXIgcGVuZGluZyA9IHBheWxvYWQ7XG4gICAgcGVuZGluZy5fc3RhdHVzID0gUGVuZGluZztcbiAgICBwZW5kaW5nLl9yZXN1bHQgPSB0aGVuYWJsZTtcbiAgICB0aGVuYWJsZS50aGVuKGZ1bmN0aW9uIChtb2R1bGVPYmplY3QpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgdmFyIGRlZmF1bHRFeHBvcnQgPSBtb2R1bGVPYmplY3QuZGVmYXVsdDtcblxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGRlZmF1bHRFeHBvcnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZXJyb3IoJ2xhenk6IEV4cGVjdGVkIHRoZSByZXN1bHQgb2YgYSBkeW5hbWljIGltcG9ydCgpIGNhbGwuICcgKyAnSW5zdGVhZCByZWNlaXZlZDogJXNcXG5cXG5Zb3VyIGNvZGUgc2hvdWxkIGxvb2sgbGlrZTogXFxuICAnICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgICAgICdjb25zdCBNeUNvbXBvbmVudCA9IGxhenkoKCkgPT4gaW1wJyArIFwib3J0KCcuL015Q29tcG9uZW50JykpXCIsIG1vZHVsZU9iamVjdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIFRyYW5zaXRpb24gdG8gdGhlIG5leHQgc3RhdGUuXG5cblxuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZXNvbHZlZC5fc3RhdHVzID0gUmVzb2x2ZWQ7XG4gICAgICAgIHJlc29sdmVkLl9yZXN1bHQgPSBkZWZhdWx0RXhwb3J0O1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKHBheWxvYWQuX3N0YXR1cyA9PT0gUGVuZGluZykge1xuICAgICAgICAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuICAgICAgICB2YXIgcmVqZWN0ZWQgPSBwYXlsb2FkO1xuICAgICAgICByZWplY3RlZC5fc3RhdHVzID0gUmVqZWN0ZWQ7XG4gICAgICAgIHJlamVjdGVkLl9yZXN1bHQgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFJlc29sdmVkKSB7XG4gICAgcmV0dXJuIHBheWxvYWQuX3Jlc3VsdDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBwYXlsb2FkLl9yZXN1bHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGF6eShjdG9yKSB7XG4gIHZhciBwYXlsb2FkID0ge1xuICAgIC8vIFdlIHVzZSB0aGVzZSBmaWVsZHMgdG8gc3RvcmUgdGhlIHJlc3VsdC5cbiAgICBfc3RhdHVzOiAtMSxcbiAgICBfcmVzdWx0OiBjdG9yXG4gIH07XG4gIHZhciBsYXp5VHlwZSA9IHtcbiAgICAkJHR5cGVvZjogUkVBQ1RfTEFaWV9UWVBFLFxuICAgIF9wYXlsb2FkOiBwYXlsb2FkLFxuICAgIF9pbml0OiBsYXp5SW5pdGlhbGl6ZXJcbiAgfTtcblxuICB7XG4gICAgLy8gSW4gcHJvZHVjdGlvbiwgdGhpcyB3b3VsZCBqdXN0IHNldCBpdCBvbiB0aGUgb2JqZWN0LlxuICAgIHZhciBkZWZhdWx0UHJvcHM7XG4gICAgdmFyIHByb3BUeXBlczsgLy8gJEZsb3dGaXhNZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMobGF6eVR5cGUsIHtcbiAgICAgIGRlZmF1bHRQcm9wczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBkZWZhdWx0UHJvcHM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld0RlZmF1bHRQcm9wcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBkZWZhdWx0UHJvcHNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBkZWZhdWx0UHJvcHMgPSBuZXdEZWZhdWx0UHJvcHM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ2RlZmF1bHRQcm9wcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb3BUeXBlczoge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBwcm9wVHlwZXM7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1Byb3BUeXBlcykge1xuICAgICAgICAgIGVycm9yKCdSZWFjdC5sYXp5KC4uLik6IEl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gYXNzaWduIGBwcm9wVHlwZXNgIHRvICcgKyAnYSBsYXp5IGNvbXBvbmVudCBpbXBvcnQuIEVpdGhlciBzcGVjaWZ5IHRoZW0gd2hlcmUgdGhlIGNvbXBvbmVudCAnICsgJ2lzIGRlZmluZWQsIG9yIGNyZWF0ZSBhIHdyYXBwaW5nIGNvbXBvbmVudCBhcm91bmQgaXQuJyk7XG5cbiAgICAgICAgICBwcm9wVHlwZXMgPSBuZXdQcm9wVHlwZXM7IC8vIE1hdGNoIHByb2R1Y3Rpb24gYmVoYXZpb3IgbW9yZSBjbG9zZWx5OlxuICAgICAgICAgIC8vICRGbG93Rml4TWVcblxuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShsYXp5VHlwZSwgJ3Byb3BUeXBlcycsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxhenlUeXBlO1xufVxuXG5mdW5jdGlvbiBmb3J3YXJkUmVmKHJlbmRlcikge1xuICB7XG4gICAgaWYgKHJlbmRlciAhPSBudWxsICYmIHJlbmRlci4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgcmVjZWl2ZWQgYSBgbWVtb2AgJyArICdjb21wb25lbnQuIEluc3RlYWQgb2YgZm9yd2FyZFJlZihtZW1vKC4uLikpLCB1c2UgJyArICdtZW1vKGZvcndhcmRSZWYoLi4uKSkuJyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVuZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignZm9yd2FyZFJlZiByZXF1aXJlcyBhIHJlbmRlciBmdW5jdGlvbiBidXQgd2FzIGdpdmVuICVzLicsIHJlbmRlciA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByZW5kZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocmVuZGVyLmxlbmd0aCAhPT0gMCAmJiByZW5kZXIubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIGVycm9yKCdmb3J3YXJkUmVmIHJlbmRlciBmdW5jdGlvbnMgYWNjZXB0IGV4YWN0bHkgdHdvIHBhcmFtZXRlcnM6IHByb3BzIGFuZCByZWYuICVzJywgcmVuZGVyLmxlbmd0aCA9PT0gMSA/ICdEaWQgeW91IGZvcmdldCB0byB1c2UgdGhlIHJlZiBwYXJhbWV0ZXI/JyA6ICdBbnkgYWRkaXRpb25hbCBwYXJhbWV0ZXIgd2lsbCBiZSB1bmRlZmluZWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlbmRlciAhPSBudWxsKSB7XG4gICAgICBpZiAocmVuZGVyLmRlZmF1bHRQcm9wcyAhPSBudWxsIHx8IHJlbmRlci5wcm9wVHlwZXMgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGRvIG5vdCBzdXBwb3J0IHByb3BUeXBlcyBvciBkZWZhdWx0UHJvcHMuICcgKyAnRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyBhIFJlYWN0IGNvbXBvbmVudD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUsXG4gICAgcmVuZGVyOiByZW5kZXJcbiAgfTtcblxuICB7XG4gICAgdmFyIG93bk5hbWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnRUeXBlLCAnZGlzcGxheU5hbWUnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gb3duTmFtZTtcbiAgICAgIH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG93bk5hbWUgPSBuYW1lO1xuXG4gICAgICAgIGlmIChyZW5kZXIuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHJlbmRlci5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXG5cbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOb3RlOiB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyAoZS5nLiBpZiBpdCdzIGEgcG9seWZpbGwpLlxuXG5cbiAgaWYgKHR5cGUgPT09IGV4cG9ydHMuRnJhZ21lbnQgfHwgdHlwZSA9PT0gZXhwb3J0cy5Qcm9maWxlciB8fCB0eXBlID09PSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSB8fCB0eXBlID09PSBleHBvcnRzLlN0cmljdE1vZGUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdXNwZW5zZSB8fCB0eXBlID09PSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFIHx8IGVuYWJsZVNjb3BlQVBJICkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfUFJPVklERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUgfHwgdHlwZVswXSA9PT0gUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbWVtbyh0eXBlLCBjb21wYXJlKSB7XG4gIHtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKSkge1xuICAgICAgZXJyb3IoJ21lbW86IFRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgY29tcG9uZW50LiBJbnN0ZWFkICcgKyAncmVjZWl2ZWQ6ICVzJywgdHlwZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB0eXBlKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudFR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX01FTU9fVFlQRSxcbiAgICB0eXBlOiB0eXBlLFxuICAgIGNvbXBhcmU6IGNvbXBhcmUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb21wYXJlXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAodHlwZS5kaXNwbGF5TmFtZSA9PSBudWxsKSB7XG4gICAgICAgICAgdHlwZS5kaXNwbGF5TmFtZSA9IG5hbWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50VHlwZTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZURpc3BhdGNoZXIoKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50O1xuXG4gIGlmICghKGRpc3BhdGNoZXIgIT09IG51bGwpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCBob29rIGNhbGwuIEhvb2tzIGNhbiBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgb2YgdGhlIGJvZHkgb2YgYSBmdW5jdGlvbiBjb21wb25lbnQuIFRoaXMgY291bGQgaGFwcGVuIGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyByZWFzb25zOlxcbjEuIFlvdSBtaWdodCBoYXZlIG1pc21hdGNoaW5nIHZlcnNpb25zIG9mIFJlYWN0IGFuZCB0aGUgcmVuZGVyZXIgKHN1Y2ggYXMgUmVhY3QgRE9NKVxcbjIuIFlvdSBtaWdodCBiZSBicmVha2luZyB0aGUgUnVsZXMgb2YgSG9va3NcXG4zLiBZb3UgbWlnaHQgaGF2ZSBtb3JlIHRoYW4gb25lIGNvcHkgb2YgUmVhY3QgaW4gdGhlIHNhbWUgYXBwXFxuU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9pbnZhbGlkLWhvb2stY2FsbCBmb3IgdGlwcyBhYm91dCBob3cgdG8gZGVidWcgYW5kIGZpeCB0aGlzIHByb2JsZW0uXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gdXNlQ29udGV4dChDb250ZXh0LCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuXG4gIHtcbiAgICBpZiAodW5zdGFibGVfb2JzZXJ2ZWRCaXRzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVycm9yKCd1c2VDb250ZXh0KCkgc2Vjb25kIGFyZ3VtZW50IGlzIHJlc2VydmVkIGZvciBmdXR1cmUgJyArICd1c2UgaW4gUmVhY3QuIFBhc3NpbmcgaXQgaXMgbm90IHN1cHBvcnRlZC4gJyArICdZb3UgcGFzc2VkOiAlcy4lcycsIHVuc3RhYmxlX29ic2VydmVkQml0cywgdHlwZW9mIHVuc3RhYmxlX29ic2VydmVkQml0cyA9PT0gJ251bWJlcicgJiYgQXJyYXkuaXNBcnJheShhcmd1bWVudHNbMl0pID8gJ1xcblxcbkRpZCB5b3UgY2FsbCBhcnJheS5tYXAodXNlQ29udGV4dCk/ICcgKyAnQ2FsbGluZyBIb29rcyBpbnNpZGUgYSBsb29wIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcnVsZXMtb2YtaG9va3MnIDogJycpO1xuICAgIH0gLy8gVE9ETzogYWRkIGEgbW9yZSBnZW5lcmljIHdhcm5pbmcgZm9yIGludmFsaWQgdmFsdWVzLlxuXG5cbiAgICBpZiAoQ29udGV4dC5fY29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgcmVhbENvbnRleHQgPSBDb250ZXh0Ll9jb250ZXh0OyAvLyBEb24ndCBkZWR1cGxpY2F0ZSBiZWNhdXNlIHRoaXMgbGVnaXRpbWF0ZWx5IGNhdXNlcyBidWdzXG4gICAgICAvLyBhbmQgbm9ib2R5IHNob3VsZCBiZSB1c2luZyB0aGlzIGluIGV4aXN0aW5nIGNvZGUuXG5cbiAgICAgIGlmIChyZWFsQ29udGV4dC5Db25zdW1lciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuQ29uc3VtZXIpIGlzIG5vdCBzdXBwb3J0ZWQsIG1heSBjYXVzZSBidWdzLCBhbmQgd2lsbCBiZSAnICsgJ3JlbW92ZWQgaW4gYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfSBlbHNlIGlmIChyZWFsQ29udGV4dC5Qcm92aWRlciA9PT0gQ29udGV4dCkge1xuICAgICAgICBlcnJvcignQ2FsbGluZyB1c2VDb250ZXh0KENvbnRleHQuUHJvdmlkZXIpIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgdXNlQ29udGV4dChDb250ZXh0KSBpbnN0ZWFkPycpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKTtcbn1cbmZ1bmN0aW9uIHVzZVN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xufVxuZnVuY3Rpb24gdXNlUmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZVJlZihpbml0aWFsVmFsdWUpO1xufVxuZnVuY3Rpb24gdXNlRWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VNZW1vKGNyZWF0ZSwgZGVwcykge1xuICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gIHJldHVybiBkaXNwYXRjaGVyLnVzZU1lbW8oY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gIHtcbiAgICB2YXIgZGlzcGF0Y2hlciA9IHJlc29sdmVEaXNwYXRjaGVyKCk7XG4gICAgcmV0dXJuIGRpc3BhdGNoZXIudXNlRGVidWdWYWx1ZSh2YWx1ZSwgZm9ybWF0dGVyRm4pO1xuICB9XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyO1xudmFyIHByZWZpeDtcbmZ1bmN0aW9uIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKG5hbWUsIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgaWYgKHByZWZpeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSB4LnN0YWNrLnRyaW0oKS5tYXRjaCgvXFxuKCAqKGF0ICk/KS8pO1xuICAgICAgICBwcmVmaXggPSBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbiAgICAgIH1cbiAgICB9IC8vIFdlIHVzZSB0aGUgcHJlZml4IHRvIGVuc3VyZSBvdXIgc3RhY2tzIGxpbmUgdXAgd2l0aCBuYXRpdmUgc3RhY2sgZnJhbWVzLlxuXG5cbiAgICByZXR1cm4gJ1xcbicgKyBwcmVmaXggKyBuYW1lO1xuICB9XG59XG52YXIgcmVlbnRyeSA9IGZhbHNlO1xudmFyIGNvbXBvbmVudEZyYW1lQ2FjaGU7XG5cbntcbiAgdmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDtcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgY29uc3RydWN0KSB7XG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxuICBpZiAoIWZuIHx8IHJlZW50cnkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB7XG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xuXG4gICAgaWYgKGZyYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29udHJvbDtcbiAgcmVlbnRyeSA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWUgSXQgZG9lcyBhY2NlcHQgdW5kZWZpbmVkLlxuXG4gIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gdW5kZWZpbmVkO1xuICB2YXIgcHJldmlvdXNEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICBwcmV2aW91c0Rpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDsgLy8gU2V0IHRoZSBkaXNwYXRjaGVyIGluIERFViBiZWNhdXNlIHRoaXMgbWlnaHQgYmUgY2FsbCBpbiB0aGUgcmVuZGVyIGZ1bmN0aW9uXG4gICAgLy8gZm9yIHdhcm5pbmdzLlxuXG4gICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldmlvdXNEaXNwYXRjaGVyO1xuICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgfVxuXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xuICB9IC8vIEZhbGxiYWNrIHRvIGp1c3QgdXNpbmcgdGhlIG5hbWUgaWYgd2UgY291bGRuJ3QgbWFrZSBpdCB0aHJvdy5cblxuXG4gIHZhciBuYW1lID0gZm4gPyBmbi5kaXNwbGF5TmFtZSB8fCBmbi5uYW1lIDogJyc7XG4gIHZhciBzeW50aGV0aWNGcmFtZSA9IG5hbWUgPyBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lKSA6ICcnO1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzeW50aGV0aWNGcmFtZTtcbn1cbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgc291cmNlLCBvd25lckZuKSB7XG4gIHtcbiAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZShmbiwgZmFsc2UpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZENvbnN0cnVjdChDb21wb25lbnQpIHtcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XG4gIHJldHVybiAhIShwcm90b3R5cGUgJiYgcHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQpO1xufVxuXG5mdW5jdGlvbiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZSwgc291cmNlLCBvd25lckZuKSB7XG5cbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHtcbiAgICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKHR5cGUsIHNob3VsZENvbnN0cnVjdCh0eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSh0eXBlKTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFOlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcbiAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUudHlwZSwgc291cmNlLCBvd25lckZuKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKHR5cGUuX3JlbmRlcik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSB0eXBlO1xuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgICAgICAgICB2YXIgaW5pdCA9IGxhenlDb21wb25lbnQuX2luaXQ7XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gTGF6eSBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoaW5pdChwYXlsb2FkKSwgc291cmNlLCBvd25lckZuKTtcbiAgICAgICAgICB9IGNhdGNoICh4KSB7fVxuICAgICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRFeHRyYVN0YWNrRnJhbWUobnVsbCk7XG4gICAgfVxuICB9XG59XG5cbnZhciBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bjtcblxue1xuICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSB7XG4gIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XG5cbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG5hbWUgKyAnYC4nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW0oc291cmNlKSB7XG4gIGlmIChzb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBmaWxlTmFtZSA9IHNvdXJjZS5maWxlTmFtZS5yZXBsYWNlKC9eLipbXFxcXFxcL10vLCAnJyk7XG4gICAgdmFyIGxpbmVOdW1iZXIgPSBzb3VyY2UubGluZU51bWJlcjtcbiAgICByZXR1cm4gJ1xcblxcbkNoZWNrIHlvdXIgY29kZSBhdCAnICsgZmlsZU5hbWUgKyAnOicgKyBsaW5lTnVtYmVyICsgJy4nO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bUZvclByb3BzKGVsZW1lbnRQcm9wcykge1xuICBpZiAoZWxlbWVudFByb3BzICE9PSBudWxsICYmIGVsZW1lbnRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKGVsZW1lbnRQcm9wcy5fX3NvdXJjZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG4vKipcbiAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAqIG9iamVjdCBrZXlzIGFyZSBub3QgdmFsaWQuIFRoaXMgYWxsb3dzIHVzIHRvIGtlZXAgdHJhY2sgb2YgY2hpbGRyZW4gYmV0d2VlblxuICogdXBkYXRlcy5cbiAqL1xuXG5cbnZhciBvd25lckhhc0tleVVzZVdhcm5pbmcgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XG4gIHZhciBpbmZvID0gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCk7XG5cbiAgaWYgKCFpbmZvKSB7XG4gICAgdmFyIHBhcmVudE5hbWUgPSB0eXBlb2YgcGFyZW50VHlwZSA9PT0gJ3N0cmluZycgPyBwYXJlbnRUeXBlIDogcGFyZW50VHlwZS5kaXNwbGF5TmFtZSB8fCBwYXJlbnRUeXBlLm5hbWU7XG5cbiAgICBpZiAocGFyZW50TmFtZSkge1xuICAgICAgaW5mbyA9IFwiXFxuXFxuQ2hlY2sgdGhlIHRvcC1sZXZlbCByZW5kZXIgY2FsbCB1c2luZyA8XCIgKyBwYXJlbnROYW1lICsgXCI+LlwiO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpbmZvO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZSBlbGVtZW50IGRvZXNuJ3QgaGF2ZSBhbiBleHBsaWNpdCBrZXkgYXNzaWduZWQgdG8gaXQuXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcbiAqIHJlb3JkZXJlZC4gQWxsIGNoaWxkcmVuIHRoYXQgaGF2ZW4ndCBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkIGFyZSByZXF1aXJlZCB0b1xuICogaGF2ZSBhIFwia2V5XCIgcHJvcGVydHkgYXNzaWduZWQgdG8gaXQuIEVycm9yIHN0YXR1c2VzIGFyZSBjYWNoZWQgc28gYSB3YXJuaW5nXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBlbGVtZW50J3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xuICBpZiAoIWVsZW1lbnQuX3N0b3JlIHx8IGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCB8fCBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkID0gdHJ1ZTtcbiAgdmFyIGN1cnJlbnRDb21wb25lbnRFcnJvckluZm8gPSBnZXRDdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvKHBhcmVudFR5cGUpO1xuXG4gIGlmIChvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBvd25lckhhc0tleVVzZVdhcm5pbmdbY3VycmVudENvbXBvbmVudEVycm9ySW5mb10gPSB0cnVlOyAvLyBVc3VhbGx5IHRoZSBjdXJyZW50IG93bmVyIGlzIHRoZSBvZmZlbmRlciwgYnV0IGlmIGl0IGFjY2VwdHMgY2hpbGRyZW4gYXMgYVxuICAvLyBwcm9wZXJ0eSwgaXQgbWF5IGJlIHRoZSBjcmVhdG9yIG9mIHRoZSBjaGlsZCB0aGF0J3MgcmVzcG9uc2libGUgZm9yXG4gIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cblxuICB2YXIgY2hpbGRPd25lciA9ICcnO1xuXG4gIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XG4gICAgLy8gR2l2ZSB0aGUgY29tcG9uZW50IHRoYXQgb3JpZ2luYWxseSBjcmVhdGVkIHRoaXMgY2hpbGQuXG4gICAgY2hpbGRPd25lciA9IFwiIEl0IHdhcyBwYXNzZWQgYSBjaGlsZCBmcm9tIFwiICsgZ2V0Q29tcG9uZW50TmFtZShlbGVtZW50Ll9vd25lci50eXBlKSArIFwiLlwiO1xuICB9XG5cbiAge1xuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZWxlbWVudCk7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcblxuICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gIH1cbn1cbi8qKlxuICogRW5zdXJlIHRoYXQgZXZlcnkgZWxlbWVudCBlaXRoZXIgaXMgcGFzc2VkIGluIGEgc3RhdGljIGxvY2F0aW9uLCBpbiBhblxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB3aXRoIHZhbGlkIGtleSBwcm9wZXJ0eS5cbiAqXG4gKiBAaW50ZXJuYWxcbiAqIEBwYXJhbSB7UmVhY3ROb2RlfSBub2RlIFN0YXRpY2FsbHkgcGFzc2VkIGNoaWxkIG9mIGFueSB0eXBlLlxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIG5vZGUncyBwYXJlbnQncyB0eXBlLlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xuICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBjaGlsZCA9IG5vZGVbaV07XG5cbiAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XG4gICAgLy8gVGhpcyBlbGVtZW50IHdhcyBwYXNzZWQgaW4gYSB2YWxpZCBsb2NhdGlvbi5cbiAgICBpZiAobm9kZS5fc3RvcmUpIHtcbiAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgfVxuICB9IGVsc2UgaWYgKG5vZGUpIHtcbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obm9kZSk7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcbiAgICAgIC8vIGJ1dCBub3cgd2UgcHJpbnQgYSBzZXBhcmF0ZSB3YXJuaW5nIGZvciB0aGVtIGxhdGVyLlxuICAgICAgaWYgKGl0ZXJhdG9yRm4gIT09IG5vZGUuZW50cmllcykge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XG4gICAgICAgIHZhciBzdGVwO1xuXG4gICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoc3RlcC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdpdmVuIGFuIGVsZW1lbnQsIHZhbGlkYXRlIHRoYXQgaXRzIHByb3BzIGZvbGxvdyB0aGUgcHJvcFR5cGVzIGRlZmluaXRpb24sXG4gKiBwcm92aWRlZCBieSB0aGUgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wVHlwZXMoZWxlbWVudCkge1xuICB7XG4gICAgdmFyIHR5cGUgPSBlbGVtZW50LnR5cGU7XG5cbiAgICBpZiAodHlwZSA9PT0gbnVsbCB8fCB0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHByb3BUeXBlcztcblxuICAgIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcFR5cGVzID0gdHlwZS5wcm9wVHlwZXM7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gTm90ZTogTWVtbyBvbmx5IGNoZWNrcyBvdXRlciBwcm9wcyBoZXJlLlxuICAgIC8vIElubmVyIHByb3BzIGFyZSBjaGVja2VkIGluIHRoZSByZWNvbmNpbGVyLlxuICAgIHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3BUeXBlcykge1xuICAgICAgLy8gSW50ZW50aW9uYWxseSBpbnNpZGUgdG8gYXZvaWQgdHJpZ2dlcmluZyBsYXp5IGluaXRpYWxpemVyczpcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKTtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3BUeXBlcywgZWxlbWVudC5wcm9wcywgJ3Byb3AnLCBuYW1lLCBlbGVtZW50KTtcbiAgICB9IGVsc2UgaWYgKHR5cGUuUHJvcFR5cGVzICE9PSB1bmRlZmluZWQgJiYgIXByb3BUeXBlc01pc3NwZWxsV2FybmluZ1Nob3duKSB7XG4gICAgICBwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93biA9IHRydWU7IC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG5cbiAgICAgIHZhciBfbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG5cbiAgICAgIGVycm9yKCdDb21wb25lbnQgJXMgZGVjbGFyZWQgYFByb3BUeXBlc2AgaW5zdGVhZCBvZiBgcHJvcFR5cGVzYC4gRGlkIHlvdSBtaXNzcGVsbCB0aGUgcHJvcGVydHkgYXNzaWdubWVudD8nLCBfbmFtZSB8fCAnVW5rbm93bicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgdHlwZS5nZXREZWZhdWx0UHJvcHMgPT09ICdmdW5jdGlvbicgJiYgIXR5cGUuZ2V0RGVmYXVsdFByb3BzLmlzUmVhY3RDbGFzc0FwcHJvdmVkKSB7XG4gICAgICBlcnJvcignZ2V0RGVmYXVsdFByb3BzIGlzIG9ubHkgdXNlZCBvbiBjbGFzc2ljIFJlYWN0LmNyZWF0ZUNsYXNzICcgKyAnZGVmaW5pdGlvbnMuIFVzZSBhIHN0YXRpYyBwcm9wZXJ0eSBuYW1lZCBgZGVmYXVsdFByb3BzYCBpbnN0ZWFkLicpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhIGZyYWdtZW50LCB2YWxpZGF0ZSB0aGF0IGl0IGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdpdGggZnJhZ21lbnQgcHJvcHNcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVGcmFnbWVudFByb3BzKGZyYWdtZW50KSB7XG4gIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IGtleXNbaV07XG5cbiAgICAgIGlmIChrZXkgIT09ICdjaGlsZHJlbicgJiYga2V5ICE9PSAna2V5Jykge1xuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGZyYWdtZW50KTtcblxuICAgICAgICBlcnJvcignSW52YWxpZCBwcm9wIGAlc2Agc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4gJyArICdSZWFjdC5GcmFnbWVudCBjYW4gb25seSBoYXZlIGBrZXlgIGFuZCBgY2hpbGRyZW5gIHByb3BzLicsIGtleSk7XG5cbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYWdtZW50LnJlZiAhPT0gbnVsbCkge1xuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xuXG4gICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uKHR5cGUsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgdmFsaWRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpOyAvLyBXZSB3YXJuIGluIHRoaXMgY2FzZSBidXQgZG9uJ3QgdGhyb3cuIFdlIGV4cGVjdCB0aGUgZWxlbWVudCBjcmVhdGlvbiB0b1xuICAvLyBzdWNjZWVkIGFuZCB0aGVyZSB3aWxsIGxpa2VseSBiZSBlcnJvcnMgaW4gcmVuZGVyLlxuXG4gIGlmICghdmFsaWRUeXBlKSB7XG4gICAgdmFyIGluZm8gPSAnJztcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmIHR5cGUgIT09IG51bGwgJiYgT2JqZWN0LmtleXModHlwZSkubGVuZ3RoID09PSAwKSB7XG4gICAgICBpbmZvICs9ICcgWW91IGxpa2VseSBmb3Jnb3QgdG8gZXhwb3J0IHlvdXIgY29tcG9uZW50IGZyb20gdGhlIGZpbGUgJyArIFwiaXQncyBkZWZpbmVkIGluLCBvciB5b3UgbWlnaHQgaGF2ZSBtaXhlZCB1cCBkZWZhdWx0IGFuZCBuYW1lZCBpbXBvcnRzLlwiO1xuICAgIH1cblxuICAgIHZhciBzb3VyY2VJbmZvID0gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhwcm9wcyk7XG5cbiAgICBpZiAoc291cmNlSW5mbykge1xuICAgICAgaW5mbyArPSBzb3VyY2VJbmZvO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbmZvICs9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuICAgIH1cblxuICAgIHZhciB0eXBlU3RyaW5nO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSAnbnVsbCc7XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHR5cGUpKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCAmJiB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUpIHtcbiAgICAgIHR5cGVTdHJpbmcgPSBcIjxcIiArIChnZXRDb21wb25lbnROYW1lKHR5cGUudHlwZSkgfHwgJ1Vua25vd24nKSArIFwiIC8+XCI7XG4gICAgICBpbmZvID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBleHBvcnQgYSBKU1ggbGl0ZXJhbCBpbnN0ZWFkIG9mIGEgY29tcG9uZW50Pyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHR5cGVTdHJpbmcgPSB0eXBlb2YgdHlwZTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBlcnJvcignUmVhY3QuY3JlYXRlRWxlbWVudDogdHlwZSBpcyBpbnZhbGlkIC0tIGV4cGVjdGVkIGEgc3RyaW5nIChmb3IgJyArICdidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlICcgKyAnY29tcG9uZW50cykgYnV0IGdvdDogJXMuJXMnLCB0eXBlU3RyaW5nLCBpbmZvKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gVGhlIHJlc3VsdCBjYW4gYmUgbnVsbGlzaCBpZiBhIG1vY2sgb3IgYSBjdXN0b20gZnVuY3Rpb24gaXMgdXNlZC5cbiAgLy8gVE9ETzogRHJvcCB0aGlzIHdoZW4gdGhlc2UgYXJlIG5vIGxvbmdlciBhbGxvd2VkIGFzIHRoZSB0eXBlIGFyZ3VtZW50LlxuXG4gIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfSAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xuICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZyBlcnJvcnMuXG4gIC8vIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmQgcHJvZC5cbiAgLy8gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlIHR5cGUgaXNcbiAgLy8gZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxuXG5cbiAgaWYgKHZhbGlkVHlwZSkge1xuICAgIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhhcmd1bWVudHNbaV0sIHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50KSB7XG4gICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xuICB9IGVsc2Uge1xuICAgIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG52YXIgZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkgPSBmYWxzZTtcbmZ1bmN0aW9uIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbih0eXBlKSB7XG4gIHZhciB2YWxpZGF0ZWRGYWN0b3J5ID0gY3JlYXRlRWxlbWVudFdpdGhWYWxpZGF0aW9uLmJpbmQobnVsbCwgdHlwZSk7XG4gIHZhbGlkYXRlZEZhY3RvcnkudHlwZSA9IHR5cGU7XG5cbiAge1xuICAgIGlmICghZGlkV2FybkFib3V0RGVwcmVjYXRlZENyZWF0ZUZhY3RvcnkpIHtcbiAgICAgIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gdHJ1ZTtcblxuICAgICAgd2FybignUmVhY3QuY3JlYXRlRmFjdG9yeSgpIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiAnICsgJ2EgZnV0dXJlIG1ham9yIHJlbGVhc2UuIENvbnNpZGVyIHVzaW5nIEpTWCAnICsgJ29yIHVzZSBSZWFjdC5jcmVhdGVFbGVtZW50KCkgZGlyZWN0bHkgaW5zdGVhZC4nKTtcbiAgICB9IC8vIExlZ2FjeSBob29rOiByZW1vdmUgaXRcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbGlkYXRlZEZhY3RvcnksICd0eXBlJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgd2FybignRmFjdG9yeS50eXBlIGlzIGRlcHJlY2F0ZWQuIEFjY2VzcyB0aGUgY2xhc3MgZGlyZWN0bHkgJyArICdiZWZvcmUgcGFzc2luZyBpdCB0byBjcmVhdGVGYWN0b3J5LicpO1xuXG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAndHlwZScsIHtcbiAgICAgICAgICB2YWx1ZTogdHlwZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVkRmFjdG9yeTtcbn1cbmZ1bmN0aW9uIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uKGVsZW1lbnQsIHByb3BzLCBjaGlsZHJlbikge1xuICB2YXIgbmV3RWxlbWVudCA9IGNsb25lRWxlbWVudC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gIGZvciAodmFyIGkgPSAyOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCBuZXdFbGVtZW50LnR5cGUpO1xuICB9XG5cbiAgdmFsaWRhdGVQcm9wVHlwZXMobmV3RWxlbWVudCk7XG4gIHJldHVybiBuZXdFbGVtZW50O1xufVxuXG57XG5cbiAgdHJ5IHtcbiAgICB2YXIgZnJvemVuT2JqZWN0ID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbZnJvemVuT2JqZWN0LCBudWxsXV0pO1xuICAgIG5ldyBTZXQoW2Zyb3plbk9iamVjdF0pO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tbmV3ICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxufVxuXG52YXIgY3JlYXRlRWxlbWVudCQxID0gIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbiA7XG52YXIgY2xvbmVFbGVtZW50JDEgPSAgY2xvbmVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNyZWF0ZUZhY3RvcnkgPSAgY3JlYXRlRmFjdG9yeVdpdGhWYWxpZGF0aW9uIDtcbnZhciBDaGlsZHJlbiA9IHtcbiAgbWFwOiBtYXBDaGlsZHJlbixcbiAgZm9yRWFjaDogZm9yRWFjaENoaWxkcmVuLFxuICBjb3VudDogY291bnRDaGlsZHJlbixcbiAgdG9BcnJheTogdG9BcnJheSxcbiAgb25seTogb25seUNoaWxkXG59O1xuXG5leHBvcnRzLkNoaWxkcmVuID0gQ2hpbGRyZW47XG5leHBvcnRzLkNvbXBvbmVudCA9IENvbXBvbmVudDtcbmV4cG9ydHMuUHVyZUNvbXBvbmVudCA9IFB1cmVDb21wb25lbnQ7XG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gUmVhY3RTaGFyZWRJbnRlcm5hbHM7XG5leHBvcnRzLmNsb25lRWxlbWVudCA9IGNsb25lRWxlbWVudCQxO1xuZXhwb3J0cy5jcmVhdGVDb250ZXh0ID0gY3JlYXRlQ29udGV4dDtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yeSA9IGNyZWF0ZUZhY3Rvcnk7XG5leHBvcnRzLmNyZWF0ZVJlZiA9IGNyZWF0ZVJlZjtcbmV4cG9ydHMuZm9yd2FyZFJlZiA9IGZvcndhcmRSZWY7XG5leHBvcnRzLmlzVmFsaWRFbGVtZW50ID0gaXNWYWxpZEVsZW1lbnQ7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy5tZW1vID0gbWVtbztcbmV4cG9ydHMudXNlQ2FsbGJhY2sgPSB1c2VDYWxsYmFjaztcbmV4cG9ydHMudXNlQ29udGV4dCA9IHVzZUNvbnRleHQ7XG5leHBvcnRzLnVzZURlYnVnVmFsdWUgPSB1c2VEZWJ1Z1ZhbHVlO1xuZXhwb3J0cy51c2VFZmZlY3QgPSB1c2VFZmZlY3Q7XG5leHBvcnRzLnVzZUltcGVyYXRpdmVIYW5kbGUgPSB1c2VJbXBlcmF0aXZlSGFuZGxlO1xuZXhwb3J0cy51c2VMYXlvdXRFZmZlY3QgPSB1c2VMYXlvdXRFZmZlY3Q7XG5leHBvcnRzLnVzZU1lbW8gPSB1c2VNZW1vO1xuZXhwb3J0cy51c2VSZWR1Y2VyID0gdXNlUmVkdWNlcjtcbmV4cG9ydHMudXNlUmVmID0gdXNlUmVmO1xuZXhwb3J0cy51c2VTdGF0ZSA9IHVzZVN0YXRlO1xuZXhwb3J0cy52ZXJzaW9uID0gUmVhY3RWZXJzaW9uO1xuICB9KSgpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxNCwgRmFjZWJvb2ssIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNELXN0eWxlIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBodHRwczovL3Jhdy5naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL21hc3Rlci9MSUNFTlNFIGZpbGUuIEFuXG4gKiBhZGRpdGlvbmFsIGdyYW50IG9mIHBhdGVudCByaWdodHMgY2FuIGJlIGZvdW5kIGluIHRoZSBQQVRFTlRTIGZpbGUgaW5cbiAqIHRoZSBzYW1lIGRpcmVjdG9yeS5cbiAqL1xuXG4hKGZ1bmN0aW9uKGdsb2JhbCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICB2YXIgT3AgPSBPYmplY3QucHJvdG90eXBlO1xuICB2YXIgaGFzT3duID0gT3AuaGFzT3duUHJvcGVydHk7XG4gIHZhciB1bmRlZmluZWQ7IC8vIE1vcmUgY29tcHJlc3NpYmxlIHRoYW4gdm9pZCAwLlxuICB2YXIgJFN5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiA/IFN5bWJvbCA6IHt9O1xuICB2YXIgaXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLml0ZXJhdG9yIHx8IFwiQEBpdGVyYXRvclwiO1xuICB2YXIgYXN5bmNJdGVyYXRvclN5bWJvbCA9ICRTeW1ib2wuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiO1xuICB2YXIgdG9TdHJpbmdUYWdTeW1ib2wgPSAkU3ltYm9sLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuXG4gIHZhciBpbk1vZHVsZSA9IHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCI7XG4gIHZhciBydW50aW1lID0gZ2xvYmFsLnJlZ2VuZXJhdG9yUnVudGltZTtcbiAgaWYgKHJ1bnRpbWUpIHtcbiAgICBpZiAoaW5Nb2R1bGUpIHtcbiAgICAgIC8vIElmIHJlZ2VuZXJhdG9yUnVudGltZSBpcyBkZWZpbmVkIGdsb2JhbGx5IGFuZCB3ZSdyZSBpbiBhIG1vZHVsZSxcbiAgICAgIC8vIG1ha2UgdGhlIGV4cG9ydHMgb2JqZWN0IGlkZW50aWNhbCB0byByZWdlbmVyYXRvclJ1bnRpbWUuXG4gICAgICBtb2R1bGUuZXhwb3J0cyA9IHJ1bnRpbWU7XG4gICAgfVxuICAgIC8vIERvbid0IGJvdGhlciBldmFsdWF0aW5nIHRoZSByZXN0IG9mIHRoaXMgZmlsZSBpZiB0aGUgcnVudGltZSB3YXNcbiAgICAvLyBhbHJlYWR5IGRlZmluZWQgZ2xvYmFsbHkuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRGVmaW5lIHRoZSBydW50aW1lIGdsb2JhbGx5IChhcyBleHBlY3RlZCBieSBnZW5lcmF0ZWQgY29kZSkgYXMgZWl0aGVyXG4gIC8vIG1vZHVsZS5leHBvcnRzIChpZiB3ZSdyZSBpbiBhIG1vZHVsZSkgb3IgYSBuZXcsIGVtcHR5IG9iamVjdC5cbiAgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWUgPSBpbk1vZHVsZSA/IG1vZHVsZS5leHBvcnRzIDoge307XG5cbiAgZnVuY3Rpb24gd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCkge1xuICAgIC8vIElmIG91dGVyRm4gcHJvdmlkZWQgYW5kIG91dGVyRm4ucHJvdG90eXBlIGlzIGEgR2VuZXJhdG9yLCB0aGVuIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yLlxuICAgIHZhciBwcm90b0dlbmVyYXRvciA9IG91dGVyRm4gJiYgb3V0ZXJGbi5wcm90b3R5cGUgaW5zdGFuY2VvZiBHZW5lcmF0b3IgPyBvdXRlckZuIDogR2VuZXJhdG9yO1xuICAgIHZhciBnZW5lcmF0b3IgPSBPYmplY3QuY3JlYXRlKHByb3RvR2VuZXJhdG9yLnByb3RvdHlwZSk7XG4gICAgdmFyIGNvbnRleHQgPSBuZXcgQ29udGV4dCh0cnlMb2NzTGlzdCB8fCBbXSk7XG5cbiAgICAvLyBUaGUgLl9pbnZva2UgbWV0aG9kIHVuaWZpZXMgdGhlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzLlxuICAgIGdlbmVyYXRvci5faW52b2tlID0gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBnZW5lcmF0b3I7XG4gIH1cbiAgcnVudGltZS53cmFwID0gd3JhcDtcblxuICAvLyBUcnkvY2F0Y2ggaGVscGVyIHRvIG1pbmltaXplIGRlb3B0aW1pemF0aW9ucy4gUmV0dXJucyBhIGNvbXBsZXRpb25cbiAgLy8gcmVjb3JkIGxpa2UgY29udGV4dC50cnlFbnRyaWVzW2ldLmNvbXBsZXRpb24uIFRoaXMgaW50ZXJmYWNlIGNvdWxkXG4gIC8vIGhhdmUgYmVlbiAoYW5kIHdhcyBwcmV2aW91c2x5KSBkZXNpZ25lZCB0byB0YWtlIGEgY2xvc3VyZSB0byBiZVxuICAvLyBpbnZva2VkIHdpdGhvdXQgYXJndW1lbnRzLCBidXQgaW4gYWxsIHRoZSBjYXNlcyB3ZSBjYXJlIGFib3V0IHdlXG4gIC8vIGFscmVhZHkgaGF2ZSBhbiBleGlzdGluZyBtZXRob2Qgd2Ugd2FudCB0byBjYWxsLCBzbyB0aGVyZSdzIG5vIG5lZWRcbiAgLy8gdG8gY3JlYXRlIGEgbmV3IGZ1bmN0aW9uIG9iamVjdC4gV2UgY2FuIGV2ZW4gZ2V0IGF3YXkgd2l0aCBhc3N1bWluZ1xuICAvLyB0aGUgbWV0aG9kIHRha2VzIGV4YWN0bHkgb25lIGFyZ3VtZW50LCBzaW5jZSB0aGF0IGhhcHBlbnMgdG8gYmUgdHJ1ZVxuICAvLyBpbiBldmVyeSBjYXNlLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHRvdWNoIHRoZSBhcmd1bWVudHMgb2JqZWN0LiBUaGVcbiAgLy8gb25seSBhZGRpdGlvbmFsIGFsbG9jYXRpb24gcmVxdWlyZWQgaXMgdGhlIGNvbXBsZXRpb24gcmVjb3JkLCB3aGljaFxuICAvLyBoYXMgYSBzdGFibGUgc2hhcGUgYW5kIHNvIGhvcGVmdWxseSBzaG91bGQgYmUgY2hlYXAgdG8gYWxsb2NhdGUuXG4gIGZ1bmN0aW9uIHRyeUNhdGNoKGZuLCBvYmosIGFyZykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcIm5vcm1hbFwiLCBhcmc6IGZuLmNhbGwob2JqLCBhcmcpIH07XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRocm93XCIsIGFyZzogZXJyIH07XG4gICAgfVxuICB9XG5cbiAgdmFyIEdlblN0YXRlU3VzcGVuZGVkU3RhcnQgPSBcInN1c3BlbmRlZFN0YXJ0XCI7XG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkID0gXCJzdXNwZW5kZWRZaWVsZFwiO1xuICB2YXIgR2VuU3RhdGVFeGVjdXRpbmcgPSBcImV4ZWN1dGluZ1wiO1xuICB2YXIgR2VuU3RhdGVDb21wbGV0ZWQgPSBcImNvbXBsZXRlZFwiO1xuXG4gIC8vIFJldHVybmluZyB0aGlzIG9iamVjdCBmcm9tIHRoZSBpbm5lckZuIGhhcyB0aGUgc2FtZSBlZmZlY3QgYXNcbiAgLy8gYnJlYWtpbmcgb3V0IG9mIHRoZSBkaXNwYXRjaCBzd2l0Y2ggc3RhdGVtZW50LlxuICB2YXIgQ29udGludWVTZW50aW5lbCA9IHt9O1xuXG4gIC8vIER1bW15IGNvbnN0cnVjdG9yIGZ1bmN0aW9ucyB0aGF0IHdlIHVzZSBhcyB0aGUgLmNvbnN0cnVjdG9yIGFuZFxuICAvLyAuY29uc3RydWN0b3IucHJvdG90eXBlIHByb3BlcnRpZXMgZm9yIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBHZW5lcmF0b3JcbiAgLy8gb2JqZWN0cy4gRm9yIGZ1bGwgc3BlYyBjb21wbGlhbmNlLCB5b3UgbWF5IHdpc2ggdG8gY29uZmlndXJlIHlvdXJcbiAgLy8gbWluaWZpZXIgbm90IHRvIG1hbmdsZSB0aGUgbmFtZXMgb2YgdGhlc2UgdHdvIGZ1bmN0aW9ucy5cbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG5cbiAgLy8gVGhpcyBpcyBhIHBvbHlmaWxsIGZvciAlSXRlcmF0b3JQcm90b3R5cGUlIGZvciBlbnZpcm9ubWVudHMgdGhhdFxuICAvLyBkb24ndCBuYXRpdmVseSBzdXBwb3J0IGl0LlxuICB2YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbiAgSXRlcmF0b3JQcm90b3R5cGVbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIHZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcbiAgdmFyIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG8gJiYgZ2V0UHJvdG8oZ2V0UHJvdG8odmFsdWVzKFtdKSkpO1xuICBpZiAoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgJiZcbiAgICAgIE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICE9PSBPcCAmJlxuICAgICAgaGFzT3duLmNhbGwoTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUsIGl0ZXJhdG9yU3ltYm9sKSkge1xuICAgIC8vIFRoaXMgZW52aXJvbm1lbnQgaGFzIGEgbmF0aXZlICVJdGVyYXRvclByb3RvdHlwZSU7IHVzZSBpdCBpbnN0ZWFkXG4gICAgLy8gb2YgdGhlIHBvbHlmaWxsLlxuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gTmF0aXZlSXRlcmF0b3JQcm90b3R5cGU7XG4gIH1cblxuICB2YXIgR3AgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZS5wcm90b3R5cGUgPVxuICAgIEdlbmVyYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR3AuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUuY29uc3RydWN0b3IgPSBHZW5lcmF0b3JGdW5jdGlvbjtcbiAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGVbdG9TdHJpbmdUYWdTeW1ib2xdID1cbiAgICBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcblxuICAvLyBIZWxwZXIgZm9yIGRlZmluaW5nIHRoZSAubmV4dCwgLnRocm93LCBhbmQgLnJldHVybiBtZXRob2RzIG9mIHRoZVxuICAvLyBJdGVyYXRvciBpbnRlcmZhY2UgaW4gdGVybXMgb2YgYSBzaW5nbGUgLl9pbnZva2UgbWV0aG9kLlxuICBmdW5jdGlvbiBkZWZpbmVJdGVyYXRvck1ldGhvZHMocHJvdG90eXBlKSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24obWV0aG9kKSB7XG4gICAgICBwcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKGFyZykge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKG1ldGhvZCwgYXJnKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24gPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICB2YXIgY3RvciA9IHR5cGVvZiBnZW5GdW4gPT09IFwiZnVuY3Rpb25cIiAmJiBnZW5GdW4uY29uc3RydWN0b3I7XG4gICAgcmV0dXJuIGN0b3JcbiAgICAgID8gY3RvciA9PT0gR2VuZXJhdG9yRnVuY3Rpb24gfHxcbiAgICAgICAgLy8gRm9yIHRoZSBuYXRpdmUgR2VuZXJhdG9yRnVuY3Rpb24gY29uc3RydWN0b3IsIHRoZSBiZXN0IHdlIGNhblxuICAgICAgICAvLyBkbyBpcyB0byBjaGVjayBpdHMgLm5hbWUgcHJvcGVydHkuXG4gICAgICAgIChjdG9yLmRpc3BsYXlOYW1lIHx8IGN0b3IubmFtZSkgPT09IFwiR2VuZXJhdG9yRnVuY3Rpb25cIlxuICAgICAgOiBmYWxzZTtcbiAgfTtcblxuICBydW50aW1lLm1hcmsgPSBmdW5jdGlvbihnZW5GdW4pIHtcbiAgICBpZiAoT2JqZWN0LnNldFByb3RvdHlwZU9mKSB7XG4gICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoZ2VuRnVuLCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdlbkZ1bi5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgICAgIGlmICghKHRvU3RyaW5nVGFnU3ltYm9sIGluIGdlbkZ1bikpIHtcbiAgICAgICAgZ2VuRnVuW3RvU3RyaW5nVGFnU3ltYm9sXSA9IFwiR2VuZXJhdG9yRnVuY3Rpb25cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZ2VuRnVuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoR3ApO1xuICAgIHJldHVybiBnZW5GdW47XG4gIH07XG5cbiAgLy8gV2l0aGluIHRoZSBib2R5IG9mIGFueSBhc3luYyBmdW5jdGlvbiwgYGF3YWl0IHhgIGlzIHRyYW5zZm9ybWVkIHRvXG4gIC8vIGB5aWVsZCByZWdlbmVyYXRvclJ1bnRpbWUuYXdyYXAoeClgLCBzbyB0aGF0IHRoZSBydW50aW1lIGNhbiB0ZXN0XG4gIC8vIGBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpYCB0byBkZXRlcm1pbmUgaWYgdGhlIHlpZWxkZWQgdmFsdWUgaXNcbiAgLy8gbWVhbnQgdG8gYmUgYXdhaXRlZC5cbiAgcnVudGltZS5hd3JhcCA9IGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB7IF9fYXdhaXQ6IGFyZyB9O1xuICB9O1xuXG4gIGZ1bmN0aW9uIEFzeW5jSXRlcmF0b3IoZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChnZW5lcmF0b3JbbWV0aG9kXSwgZ2VuZXJhdG9yLCBhcmcpO1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgcmVqZWN0KHJlY29yZC5hcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlY29yZC5hcmc7XG4gICAgICAgIHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlICYmXG4gICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKHZhbHVlLCBcIl9fYXdhaXRcIikpIHtcbiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKGZ1bmN0aW9uKHVud3JhcHBlZCkge1xuICAgICAgICAgIC8vIFdoZW4gYSB5aWVsZGVkIFByb21pc2UgaXMgcmVzb2x2ZWQsIGl0cyBmaW5hbCB2YWx1ZSBiZWNvbWVzXG4gICAgICAgICAgLy8gdGhlIC52YWx1ZSBvZiB0aGUgUHJvbWlzZTx7dmFsdWUsZG9uZX0+IHJlc3VsdCBmb3IgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCBpdGVyYXRpb24uIElmIHRoZSBQcm9taXNlIGlzIHJlamVjdGVkLCBob3dldmVyLCB0aGVcbiAgICAgICAgICAvLyByZXN1bHQgZm9yIHRoaXMgaXRlcmF0aW9uIHdpbGwgYmUgcmVqZWN0ZWQgd2l0aCB0aGUgc2FtZVxuICAgICAgICAgIC8vIHJlYXNvbi4gTm90ZSB0aGF0IHJlamVjdGlvbnMgb2YgeWllbGRlZCBQcm9taXNlcyBhcmUgbm90XG4gICAgICAgICAgLy8gdGhyb3duIGJhY2sgaW50byB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uLCBhcyBpcyB0aGUgY2FzZVxuICAgICAgICAgIC8vIHdoZW4gYW4gYXdhaXRlZCBQcm9taXNlIGlzIHJlamVjdGVkLiBUaGlzIGRpZmZlcmVuY2UgaW5cbiAgICAgICAgICAvLyBiZWhhdmlvciBiZXR3ZWVuIHlpZWxkIGFuZCBhd2FpdCBpcyBpbXBvcnRhbnQsIGJlY2F1c2UgaXRcbiAgICAgICAgICAvLyBhbGxvd3MgdGhlIGNvbnN1bWVyIHRvIGRlY2lkZSB3aGF0IHRvIGRvIHdpdGggdGhlIHlpZWxkZWRcbiAgICAgICAgICAvLyByZWplY3Rpb24gKHN3YWxsb3cgaXQgYW5kIGNvbnRpbnVlLCBtYW51YWxseSAudGhyb3cgaXQgYmFja1xuICAgICAgICAgIC8vIGludG8gdGhlIGdlbmVyYXRvciwgYWJhbmRvbiBpdGVyYXRpb24sIHdoYXRldmVyKS4gV2l0aFxuICAgICAgICAgIC8vIGF3YWl0LCBieSBjb250cmFzdCwgdGhlcmUgaXMgbm8gb3Bwb3J0dW5pdHkgdG8gZXhhbWluZSB0aGVcbiAgICAgICAgICAvLyByZWplY3Rpb24gcmVhc29uIG91dHNpZGUgdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgc28gdGhlXG4gICAgICAgICAgLy8gb25seSBvcHRpb24gaXMgdG8gdGhyb3cgaXQgZnJvbSB0aGUgYXdhaXQgZXhwcmVzc2lvbiwgYW5kXG4gICAgICAgICAgLy8gbGV0IHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24gaGFuZGxlIHRoZSBleGNlcHRpb24uXG4gICAgICAgICAgcmVzdWx0LnZhbHVlID0gdW53cmFwcGVkO1xuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGdsb2JhbC5wcm9jZXNzID09PSBcIm9iamVjdFwiICYmIGdsb2JhbC5wcm9jZXNzLmRvbWFpbikge1xuICAgICAgaW52b2tlID0gZ2xvYmFsLnByb2Nlc3MuZG9tYWluLmJpbmQoaW52b2tlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJldmlvdXNQcm9taXNlID1cbiAgICAgICAgLy8gSWYgZW5xdWV1ZSBoYXMgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIHdlIHdhbnQgdG8gd2FpdCB1bnRpbFxuICAgICAgICAvLyBhbGwgcHJldmlvdXMgUHJvbWlzZXMgaGF2ZSBiZWVuIHJlc29sdmVkIGJlZm9yZSBjYWxsaW5nIGludm9rZSxcbiAgICAgICAgLy8gc28gdGhhdCByZXN1bHRzIGFyZSBhbHdheXMgZGVsaXZlcmVkIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBJZlxuICAgICAgICAvLyBlbnF1ZXVlIGhhcyBub3QgYmVlbiBjYWxsZWQgYmVmb3JlLCB0aGVuIGl0IGlzIGltcG9ydGFudCB0b1xuICAgICAgICAvLyBjYWxsIGludm9rZSBpbW1lZGlhdGVseSwgd2l0aG91dCB3YWl0aW5nIG9uIGEgY2FsbGJhY2sgdG8gZmlyZSxcbiAgICAgICAgLy8gc28gdGhhdCB0aGUgYXN5bmMgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhcyB0aGUgb3Bwb3J0dW5pdHkgdG8gZG9cbiAgICAgICAgLy8gYW55IG5lY2Vzc2FyeSBzZXR1cCBpbiBhIHByZWRpY3RhYmxlIHdheS4gVGhpcyBwcmVkaWN0YWJpbGl0eVxuICAgICAgICAvLyBpcyB3aHkgdGhlIFByb21pc2UgY29uc3RydWN0b3Igc3luY2hyb25vdXNseSBpbnZva2VzIGl0c1xuICAgICAgICAvLyBleGVjdXRvciBjYWxsYmFjaywgYW5kIHdoeSBhc3luYyBmdW5jdGlvbnMgc3luY2hyb25vdXNseVxuICAgICAgICAvLyBleGVjdXRlIGNvZGUgYmVmb3JlIHRoZSBmaXJzdCBhd2FpdC4gU2luY2Ugd2UgaW1wbGVtZW50IHNpbXBsZVxuICAgICAgICAvLyBhc3luYyBmdW5jdGlvbnMgaW4gdGVybXMgb2YgYXN5bmMgZ2VuZXJhdG9ycywgaXQgaXMgZXNwZWNpYWxseVxuICAgICAgICAvLyBpbXBvcnRhbnQgdG8gZ2V0IHRoaXMgcmlnaHQsIGV2ZW4gdGhvdWdoIGl0IHJlcXVpcmVzIGNhcmUuXG4gICAgICAgIHByZXZpb3VzUHJvbWlzZSA/IHByZXZpb3VzUHJvbWlzZS50aGVuKFxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLFxuICAgICAgICAgIC8vIEF2b2lkIHByb3BhZ2F0aW5nIGZhaWx1cmVzIHRvIFByb21pc2VzIHJldHVybmVkIGJ5IGxhdGVyXG4gICAgICAgICAgLy8gaW52b2NhdGlvbnMgb2YgdGhlIGl0ZXJhdG9yLlxuICAgICAgICAgIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnXG4gICAgICAgICkgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgIH1cblxuICAgIC8vIERlZmluZSB0aGUgdW5pZmllZCBoZWxwZXIgbWV0aG9kIHRoYXQgaXMgdXNlZCB0byBpbXBsZW1lbnQgLm5leHQsXG4gICAgLy8gLnRocm93LCBhbmQgLnJldHVybiAoc2VlIGRlZmluZUl0ZXJhdG9yTWV0aG9kcykuXG4gICAgdGhpcy5faW52b2tlID0gZW5xdWV1ZTtcbiAgfVxuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhBc3luY0l0ZXJhdG9yLnByb3RvdHlwZSk7XG4gIEFzeW5jSXRlcmF0b3IucHJvdG90eXBlW2FzeW5jSXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICBydW50aW1lLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yO1xuXG4gIC8vIE5vdGUgdGhhdCBzaW1wbGUgYXN5bmMgZnVuY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBvbiB0b3Agb2ZcbiAgLy8gQXN5bmNJdGVyYXRvciBvYmplY3RzOyB0aGV5IGp1c3QgcmV0dXJuIGEgUHJvbWlzZSBmb3IgdGhlIHZhbHVlIG9mXG4gIC8vIHRoZSBmaW5hbCByZXN1bHQgcHJvZHVjZWQgYnkgdGhlIGl0ZXJhdG9yLlxuICBydW50aW1lLmFzeW5jID0gZnVuY3Rpb24oaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICB2YXIgaXRlciA9IG5ldyBBc3luY0l0ZXJhdG9yKFxuICAgICAgd3JhcChpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdClcbiAgICApO1xuXG4gICAgcmV0dXJuIHJ1bnRpbWUuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvci5yZXR1cm4pIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIGEgcmV0dXJuIG1ldGhvZCwgZ2l2ZSBpdCBhXG4gICAgICAgICAgLy8gY2hhbmNlIHRvIGNsZWFuIHVwLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJyZXR1cm5cIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAvLyBJZiBtYXliZUludm9rZURlbGVnYXRlKGNvbnRleHQpIGNoYW5nZWQgY29udGV4dC5tZXRob2QgZnJvbVxuICAgICAgICAgICAgLy8gXCJyZXR1cm5cIiB0byBcInRocm93XCIsIGxldCB0aGF0IG92ZXJyaWRlIHRoZSBUeXBlRXJyb3IgYmVsb3cuXG4gICAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZFwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKG1ldGhvZCwgZGVsZWdhdGUuaXRlcmF0b3IsIGNvbnRleHQuYXJnKTtcblxuICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgdmFyIGluZm8gPSByZWNvcmQuYXJnO1xuXG4gICAgaWYgKCEgaW5mbykge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdFwiKTtcbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuXG4gICAgaWYgKGluZm8uZG9uZSkge1xuICAgICAgLy8gQXNzaWduIHRoZSByZXN1bHQgb2YgdGhlIGZpbmlzaGVkIGRlbGVnYXRlIHRvIHRoZSB0ZW1wb3JhcnlcbiAgICAgIC8vIHZhcmlhYmxlIHNwZWNpZmllZCBieSBkZWxlZ2F0ZS5yZXN1bHROYW1lIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0W2RlbGVnYXRlLnJlc3VsdE5hbWVdID0gaW5mby52YWx1ZTtcblxuICAgICAgLy8gUmVzdW1lIGV4ZWN1dGlvbiBhdCB0aGUgZGVzaXJlZCBsb2NhdGlvbiAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dC5uZXh0ID0gZGVsZWdhdGUubmV4dExvYztcblxuICAgICAgLy8gSWYgY29udGV4dC5tZXRob2Qgd2FzIFwidGhyb3dcIiBidXQgdGhlIGRlbGVnYXRlIGhhbmRsZWQgdGhlXG4gICAgICAvLyBleGNlcHRpb24sIGxldCB0aGUgb3V0ZXIgZ2VuZXJhdG9yIHByb2NlZWQgbm9ybWFsbHkuIElmXG4gICAgICAvLyBjb250ZXh0Lm1ldGhvZCB3YXMgXCJuZXh0XCIsIGZvcmdldCBjb250ZXh0LmFyZyBzaW5jZSBpdCBoYXMgYmVlblxuICAgICAgLy8gXCJjb25zdW1lZFwiIGJ5IHRoZSBkZWxlZ2F0ZSBpdGVyYXRvci4gSWYgY29udGV4dC5tZXRob2Qgd2FzXG4gICAgICAvLyBcInJldHVyblwiLCBhbGxvdyB0aGUgb3JpZ2luYWwgLnJldHVybiBjYWxsIHRvIGNvbnRpbnVlIGluIHRoZVxuICAgICAgLy8gb3V0ZXIgZ2VuZXJhdG9yLlxuICAgICAgaWYgKGNvbnRleHQubWV0aG9kICE9PSBcInJldHVyblwiKSB7XG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJlLXlpZWxkIHRoZSByZXN1bHQgcmV0dXJuZWQgYnkgdGhlIGRlbGVnYXRlIG1ldGhvZC5cbiAgICAgIHJldHVybiBpbmZvO1xuICAgIH1cblxuICAgIC8vIFRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBpcyBmaW5pc2hlZCwgc28gZm9yZ2V0IGl0IGFuZCBjb250aW51ZSB3aXRoXG4gICAgLy8gdGhlIG91dGVyIGdlbmVyYXRvci5cbiAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgfVxuXG4gIC8vIERlZmluZSBHZW5lcmF0b3IucHJvdG90eXBlLntuZXh0LHRocm93LHJldHVybn0gaW4gdGVybXMgb2YgdGhlXG4gIC8vIHVuaWZpZWQgLl9pbnZva2UgaGVscGVyIG1ldGhvZC5cbiAgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEdwKTtcblxuICBHcFt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvclwiO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgR3BbaXRlcmF0b3JTeW1ib2xdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgR3AudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfTtcblxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkobG9jcykge1xuICAgIHZhciBlbnRyeSA9IHsgdHJ5TG9jOiBsb2NzWzBdIH07XG5cbiAgICBpZiAoMSBpbiBsb2NzKSB7XG4gICAgICBlbnRyeS5jYXRjaExvYyA9IGxvY3NbMV07XG4gICAgfVxuXG4gICAgaWYgKDIgaW4gbG9jcykge1xuICAgICAgZW50cnkuZmluYWxseUxvYyA9IGxvY3NbMl07XG4gICAgICBlbnRyeS5hZnRlckxvYyA9IGxvY3NbM107XG4gICAgfVxuXG4gICAgdGhpcy50cnlFbnRyaWVzLnB1c2goZW50cnkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzZXRUcnlFbnRyeShlbnRyeSkge1xuICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uIHx8IHt9O1xuICAgIHJlY29yZC50eXBlID0gXCJub3JtYWxcIjtcbiAgICBkZWxldGUgcmVjb3JkLmFyZztcbiAgICBlbnRyeS5jb21wbGV0aW9uID0gcmVjb3JkO1xuICB9XG5cbiAgZnVuY3Rpb24gQ29udGV4dCh0cnlMb2NzTGlzdCkge1xuICAgIC8vIFRoZSByb290IGVudHJ5IG9iamVjdCAoZWZmZWN0aXZlbHkgYSB0cnkgc3RhdGVtZW50IHdpdGhvdXQgYSBjYXRjaFxuICAgIC8vIG9yIGEgZmluYWxseSBibG9jaykgZ2l2ZXMgdXMgYSBwbGFjZSB0byBzdG9yZSB2YWx1ZXMgdGhyb3duIGZyb21cbiAgICAvLyBsb2NhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZW5jbG9zaW5nIHRyeSBzdGF0ZW1lbnQuXG4gICAgdGhpcy50cnlFbnRyaWVzID0gW3sgdHJ5TG9jOiBcInJvb3RcIiB9XTtcbiAgICB0cnlMb2NzTGlzdC5mb3JFYWNoKHB1c2hUcnlFbnRyeSwgdGhpcyk7XG4gICAgdGhpcy5yZXNldCh0cnVlKTtcbiAgfVxuXG4gIHJ1bnRpbWUua2V5cyA9IGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBrZXlzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iamVjdCkge1xuICAgICAga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIGtleXMucmV2ZXJzZSgpO1xuXG4gICAgLy8gUmF0aGVyIHRoYW4gcmV0dXJuaW5nIGFuIG9iamVjdCB3aXRoIGEgbmV4dCBtZXRob2QsIHdlIGtlZXBcbiAgICAvLyB0aGluZ3Mgc2ltcGxlIGFuZCByZXR1cm4gdGhlIG5leHQgZnVuY3Rpb24gaXRzZWxmLlxuICAgIHJldHVybiBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgd2hpbGUgKGtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBrZXkgPSBrZXlzLnBvcCgpO1xuICAgICAgICBpZiAoa2V5IGluIG9iamVjdCkge1xuICAgICAgICAgIG5leHQudmFsdWUgPSBrZXk7XG4gICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gVG8gYXZvaWQgY3JlYXRpbmcgYW4gYWRkaXRpb25hbCBvYmplY3QsIHdlIGp1c3QgaGFuZyB0aGUgLnZhbHVlXG4gICAgICAvLyBhbmQgLmRvbmUgcHJvcGVydGllcyBvZmYgdGhlIG5leHQgZnVuY3Rpb24gb2JqZWN0IGl0c2VsZi4gVGhpc1xuICAgICAgLy8gYWxzbyBlbnN1cmVzIHRoYXQgdGhlIG1pbmlmaWVyIHdpbGwgbm90IGFub255bWl6ZSB0aGUgZnVuY3Rpb24uXG4gICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfTtcbiAgfTtcblxuICBmdW5jdGlvbiB2YWx1ZXMoaXRlcmFibGUpIHtcbiAgICBpZiAoaXRlcmFibGUpIHtcbiAgICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGl0ZXJhYmxlW2l0ZXJhdG9yU3ltYm9sXTtcbiAgICAgIGlmIChpdGVyYXRvck1ldGhvZCkge1xuICAgICAgICByZXR1cm4gaXRlcmF0b3JNZXRob2QuY2FsbChpdGVyYWJsZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaXRlcmFibGUubmV4dCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBpdGVyYWJsZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc05hTihpdGVyYWJsZS5sZW5ndGgpKSB7XG4gICAgICAgIHZhciBpID0gLTEsIG5leHQgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgIHdoaWxlICgrK2kgPCBpdGVyYWJsZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd24uY2FsbChpdGVyYWJsZSwgaSkpIHtcbiAgICAgICAgICAgICAgbmV4dC52YWx1ZSA9IGl0ZXJhYmxlW2ldO1xuICAgICAgICAgICAgICBuZXh0LmRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbmV4dC52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBuZXh0LmRvbmUgPSB0cnVlO1xuXG4gICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG5leHQubmV4dCA9IG5leHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGFuIGl0ZXJhdG9yIHdpdGggbm8gdmFsdWVzLlxuICAgIHJldHVybiB7IG5leHQ6IGRvbmVSZXN1bHQgfTtcbiAgfVxuICBydW50aW1lLnZhbHVlcyA9IHZhbHVlcztcblxuICBmdW5jdGlvbiBkb25lUmVzdWx0KCkge1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuXG4gIENvbnRleHQucHJvdG90eXBlID0ge1xuICAgIGNvbnN0cnVjdG9yOiBDb250ZXh0LFxuXG4gICAgcmVzZXQ6IGZ1bmN0aW9uKHNraXBUZW1wUmVzZXQpIHtcbiAgICAgIHRoaXMucHJldiA9IDA7XG4gICAgICB0aGlzLm5leHQgPSAwO1xuICAgICAgLy8gUmVzZXR0aW5nIGNvbnRleHQuX3NlbnQgZm9yIGxlZ2FjeSBzdXBwb3J0IG9mIEJhYmVsJ3NcbiAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICB0aGlzLnNlbnQgPSB0aGlzLl9zZW50ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kb25lID0gZmFsc2U7XG4gICAgICB0aGlzLmRlbGVnYXRlID0gbnVsbDtcblxuICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgIHRoaXMuYXJnID0gdW5kZWZpbmVkO1xuXG4gICAgICB0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChyZXNldFRyeUVudHJ5KTtcblxuICAgICAgaWYgKCFza2lwVGVtcFJlc2V0KSB7XG4gICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGhpcykge1xuICAgICAgICAgIC8vIE5vdCBzdXJlIGFib3V0IHRoZSBvcHRpbWFsIG9yZGVyIG9mIHRoZXNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgaWYgKG5hbWUuY2hhckF0KDApID09PSBcInRcIiAmJlxuICAgICAgICAgICAgICBoYXNPd24uY2FsbCh0aGlzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAhaXNOYU4oK25hbWUuc2xpY2UoMSkpKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG5cbiAgICAgIHZhciByb290RW50cnkgPSB0aGlzLnRyeUVudHJpZXNbMF07XG4gICAgICB2YXIgcm9vdFJlY29yZCA9IHJvb3RFbnRyeS5jb21wbGV0aW9uO1xuICAgICAgaWYgKHJvb3RSZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IHJvb3RSZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG5cbiAgICBkaXNwYXRjaEV4Y2VwdGlvbjogZnVuY3Rpb24oZXhjZXB0aW9uKSB7XG4gICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgIHRocm93IGV4Y2VwdGlvbjtcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnRleHQgPSB0aGlzO1xuICAgICAgZnVuY3Rpb24gaGFuZGxlKGxvYywgY2F1Z2h0KSB7XG4gICAgICAgIHJlY29yZC50eXBlID0gXCJ0aHJvd1wiO1xuICAgICAgICByZWNvcmQuYXJnID0gZXhjZXB0aW9uO1xuICAgICAgICBjb250ZXh0Lm5leHQgPSBsb2M7XG5cbiAgICAgICAgaWYgKGNhdWdodCkge1xuICAgICAgICAgIC8vIElmIHRoZSBkaXNwYXRjaGVkIGV4Y2VwdGlvbiB3YXMgY2F1Z2h0IGJ5IGEgY2F0Y2ggYmxvY2ssXG4gICAgICAgICAgLy8gdGhlbiBsZXQgdGhhdCBjYXRjaCBibG9jayBoYW5kbGUgdGhlIGV4Y2VwdGlvbiBub3JtYWxseS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICEhIGNhdWdodDtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuXG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IFwicm9vdFwiKSB7XG4gICAgICAgICAgLy8gRXhjZXB0aW9uIHRocm93biBvdXRzaWRlIG9mIGFueSB0cnkgYmxvY2sgdGhhdCBjb3VsZCBoYW5kbGVcbiAgICAgICAgICAvLyBpdCwgc28gc2V0IHRoZSBjb21wbGV0aW9uIHZhbHVlIG9mIHRoZSBlbnRpcmUgZnVuY3Rpb24gdG9cbiAgICAgICAgICAvLyB0aHJvdyB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJldHVybiBoYW5kbGUoXCJlbmRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBoYXNDYXRjaCA9IGhhc093bi5jYWxsKGVudHJ5LCBcImNhdGNoTG9jXCIpO1xuICAgICAgICAgIHZhciBoYXNGaW5hbGx5ID0gaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKTtcblxuICAgICAgICAgIGlmIChoYXNDYXRjaCAmJiBoYXNGaW5hbGx5KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzQ2F0Y2gpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5jYXRjaExvYykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlKGVudHJ5LmNhdGNoTG9jLCB0cnVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSBpZiAoaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5maW5hbGx5TG9jKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWJydXB0OiBmdW5jdGlvbih0eXBlLCBhcmcpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jIDw9IHRoaXMucHJldiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwoZW50cnksIFwiZmluYWxseUxvY1wiKSAmJlxuICAgICAgICAgICAgdGhpcy5wcmV2IDwgZW50cnkuZmluYWxseUxvYykge1xuICAgICAgICAgIHZhciBmaW5hbGx5RW50cnkgPSBlbnRyeTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZmluYWxseUVudHJ5ICYmXG4gICAgICAgICAgKHR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgICB0eXBlID09PSBcImNvbnRpbnVlXCIpICYmXG4gICAgICAgICAgZmluYWxseUVudHJ5LnRyeUxvYyA8PSBhcmcgJiZcbiAgICAgICAgICBhcmcgPD0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgLy8gSWdub3JlIHRoZSBmaW5hbGx5IGVudHJ5IGlmIGNvbnRyb2wgaXMgbm90IGp1bXBpbmcgdG8gYVxuICAgICAgICAvLyBsb2NhdGlvbiBvdXRzaWRlIHRoZSB0cnkvY2F0Y2ggYmxvY2suXG4gICAgICAgIGZpbmFsbHlFbnRyeSA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciByZWNvcmQgPSBmaW5hbGx5RW50cnkgPyBmaW5hbGx5RW50cnkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmVjb3JkLnR5cGUgPSB0eXBlO1xuICAgICAgcmVjb3JkLmFyZyA9IGFyZztcblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSkge1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICB0aGlzLm5leHQgPSBmaW5hbGx5RW50cnkuZmluYWxseUxvYztcbiAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBsZXRlKHJlY29yZCk7XG4gICAgfSxcblxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbihyZWNvcmQsIGFmdGVyTG9jKSB7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByZWNvcmQuYXJnO1xuICAgICAgfVxuXG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwiYnJlYWtcIiB8fFxuICAgICAgICAgIHJlY29yZC50eXBlID09PSBcImNvbnRpbnVlXCIpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gcmVjb3JkLmFyZztcbiAgICAgIH0gZWxzZSBpZiAocmVjb3JkLnR5cGUgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgdGhpcy5ydmFsID0gdGhpcy5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgICB0aGlzLm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgIHRoaXMubmV4dCA9IFwiZW5kXCI7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiICYmIGFmdGVyTG9jKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IGFmdGVyTG9jO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9LFxuXG4gICAgZmluaXNoOiBmdW5jdGlvbihmaW5hbGx5TG9jKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LmZpbmFsbHlMb2MgPT09IGZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB0aGlzLmNvbXBsZXRlKGVudHJ5LmNvbXBsZXRpb24sIGVudHJ5LmFmdGVyTG9jKTtcbiAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uKHRyeUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS50cnlMb2MgPT09IHRyeUxvYykge1xuICAgICAgICAgIHZhciByZWNvcmQgPSBlbnRyeS5jb21wbGV0aW9uO1xuICAgICAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICB2YXIgdGhyb3duID0gcmVjb3JkLmFyZztcbiAgICAgICAgICAgIHJlc2V0VHJ5RW50cnkoZW50cnkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGhyb3duO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRoZSBjb250ZXh0LmNhdGNoIG1ldGhvZCBtdXN0IG9ubHkgYmUgY2FsbGVkIHdpdGggYSBsb2NhdGlvblxuICAgICAgLy8gYXJndW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0byBhIGtub3duIGNhdGNoIGJsb2NrLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpO1xuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbihpdGVyYWJsZSwgcmVzdWx0TmFtZSwgbmV4dExvYykge1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IHtcbiAgICAgICAgaXRlcmF0b3I6IHZhbHVlcyhpdGVyYWJsZSksXG4gICAgICAgIHJlc3VsdE5hbWU6IHJlc3VsdE5hbWUsXG4gICAgICAgIG5leHRMb2M6IG5leHRMb2NcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLm1ldGhvZCA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgLy8gRGVsaWJlcmF0ZWx5IGZvcmdldCB0aGUgbGFzdCBzZW50IHZhbHVlIHNvIHRoYXQgd2UgZG9uJ3RcbiAgICAgICAgLy8gYWNjaWRlbnRhbGx5IHBhc3MgaXQgb24gdG8gdGhlIGRlbGVnYXRlLlxuICAgICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfVxuICB9O1xufSkoXG4gIC8vIEFtb25nIHRoZSB2YXJpb3VzIHRyaWNrcyBmb3Igb2J0YWluaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWxcbiAgLy8gb2JqZWN0LCB0aGlzIHNlZW1zIHRvIGJlIHRoZSBtb3N0IHJlbGlhYmxlIHRlY2huaXF1ZSB0aGF0IGRvZXMgbm90XG4gIC8vIHVzZSBpbmRpcmVjdCBldmFsICh3aGljaCB2aW9sYXRlcyBDb250ZW50IFNlY3VyaXR5IFBvbGljeSkuXG4gIHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOlxuICB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiID8gd2luZG93IDpcbiAgdHlwZW9mIHNlbGYgPT09IFwib2JqZWN0XCIgPyBzZWxmIDogdGhpc1xuKTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MC4yMC4yXG4gKiBzY2hlZHVsZXItdHJhY2luZy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBERUZBVUxUX1RIUkVBRF9JRCA9IDA7IC8vIENvdW50ZXJzIHVzZWQgdG8gZ2VuZXJhdGUgdW5pcXVlIElEcy5cblxudmFyIGludGVyYWN0aW9uSURDb3VudGVyID0gMDtcbnZhciB0aHJlYWRJRENvdW50ZXIgPSAwOyAvLyBTZXQgb2YgY3VycmVudGx5IHRyYWNlZCBpbnRlcmFjdGlvbnMuXG4vLyBJbnRlcmFjdGlvbnMgXCJzdGFja1wi4oCTXG4vLyBNZWFuaW5nIHRoYXQgbmV3bHkgdHJhY2VkIGludGVyYWN0aW9ucyBhcmUgYXBwZW5kZWQgdG8gdGhlIHByZXZpb3VzbHkgYWN0aXZlIHNldC5cbi8vIFdoZW4gYW4gaW50ZXJhY3Rpb24gZ29lcyBvdXQgb2Ygc2NvcGUsIHRoZSBwcmV2aW91cyBzZXQgKGlmIGFueSkgaXMgcmVzdG9yZWQuXG5cbmV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSBudWxsOyAvLyBMaXN0ZW5lcihzKSB0byBub3RpZnkgd2hlbiBpbnRlcmFjdGlvbnMgYmVnaW4gYW5kIGVuZC5cblxuZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYgPSBudWxsO1xuXG57XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYgPSB7XG4gICAgY3VycmVudDogbmV3IFNldCgpXG4gIH07XG4gIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2NsZWFyKGNhbGxiYWNrKSB7XG5cbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IG5ldyBTZXQoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG4gIH1cbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnQoKSB7XG4gIHtcbiAgICByZXR1cm4gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRUaHJlYWRJRCgpIHtcbiAgcmV0dXJuICsrdGhyZWFkSURDb3VudGVyO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfdHJhY2UobmFtZSwgdGltZXN0YW1wLCBjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciBpbnRlcmFjdGlvbiA9IHtcbiAgICBfX2NvdW50OiAxLFxuICAgIGlkOiBpbnRlcmFjdGlvbklEQ291bnRlcisrLFxuICAgIG5hbWU6IG5hbWUsXG4gICAgdGltZXN0YW1wOiB0aW1lc3RhbXBcbiAgfTtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7IC8vIFRyYWNlZCBpbnRlcmFjdGlvbnMgc2hvdWxkIHN0YWNrL2FjY3VtdWxhdGUuXG4gIC8vIFRvIGRvIHRoYXQsIGNsb25lIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVGhlIHByZXZpb3VzIHNldCB3aWxsIGJlIHJlc3RvcmVkIHVwb24gY29tcGxldGlvbi5cblxuICB2YXIgaW50ZXJhY3Rpb25zID0gbmV3IFNldChwcmV2SW50ZXJhY3Rpb25zKTtcbiAgaW50ZXJhY3Rpb25zLmFkZChpbnRlcmFjdGlvbik7XG4gIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IGludGVyYWN0aW9ucztcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgdHJ5IHtcbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gcHJldkludGVyYWN0aW9ucztcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTsgLy8gSWYgbm8gYXN5bmMgd29yayB3YXMgc2NoZWR1bGVkIGZvciB0aGlzIGludGVyYWN0aW9uLFxuICAgICAgICAgIC8vIE5vdGlmeSBzdWJzY3JpYmVycyB0aGF0IGl0J3MgY29tcGxldGVkLlxuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJldHVyblZhbHVlO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfd3JhcChjYWxsYmFjaykge1xuICB2YXIgdGhyZWFkSUQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IERFRkFVTFRfVEhSRUFEX0lEO1xuXG4gIHZhciB3cmFwcGVkSW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICB2YXIgc3Vic2NyaWJlciA9IGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gIH0gLy8gVXBkYXRlIHRoZSBwZW5kaW5nIGFzeW5jIHdvcmsgY291bnQgZm9yIHRoZSBjdXJyZW50IGludGVyYWN0aW9ucy5cbiAgLy8gVXBkYXRlIGFmdGVyIGNhbGxpbmcgc3Vic2NyaWJlcnMgaW4gY2FzZSBvZiBlcnJvci5cblxuXG4gIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gIH0pO1xuICB2YXIgaGFzUnVuID0gZmFsc2U7XG5cbiAgZnVuY3Rpb24gd3JhcHBlZCgpIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSB3cmFwcGVkSW50ZXJhY3Rpb25zO1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIHZhciByZXR1cm5WYWx1ZTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2suYXBwbHkodW5kZWZpbmVkLCBhcmd1bWVudHMpO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoIWhhc1J1bikge1xuICAgICAgICAvLyBXZSBvbmx5IGV4cGVjdCBhIHdyYXBwZWQgZnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWQgb25jZSxcbiAgICAgICAgLy8gQnV0IGluIHRoZSBldmVudCB0aGF0IGl0J3MgZXhlY3V0ZWQgbW9yZSB0aGFuIG9uY2XigJNcbiAgICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIG91dHN0YW5kaW5nIGludGVyYWN0aW9uIGNvdW50cyBvbmNlLlxuICAgICAgICBoYXNSdW4gPSB0cnVlOyAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgICAgLy8gSWYgdGhpcyB3YXMgdGhlIGxhc3Qgc2NoZWR1bGVkIGFzeW5jIHdvcmsgZm9yIGFueSBvZiB0aGVtLFxuICAgICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuXG4gICAgICAgIHdyYXBwZWRJbnRlcmFjdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAoaW50ZXJhY3Rpb24pIHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHdyYXBwZWQuY2FuY2VsID0gZnVuY3Rpb24gY2FuY2VsKCkge1xuICAgIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN1YnNjcmliZXIub25Xb3JrQ2FuY2VsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAvLyBVcGRhdGUgcGVuZGluZyBhc3luYyBjb3VudHMgZm9yIGFsbCB3cmFwcGVkIGludGVyYWN0aW9ucy5cbiAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgIC8vIE1hcmsgdGhlbSBhcyBjb21wbGV0ZWQuXG4gICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIGludGVyYWN0aW9uLl9fY291bnQtLTtcblxuICAgICAgICBpZiAoc3Vic2NyaWJlciAmJiBpbnRlcmFjdGlvbi5fX2NvdW50ID09PSAwKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gd3JhcHBlZDtcbn1cblxudmFyIHN1YnNjcmliZXJzID0gbnVsbDtcblxue1xuICBzdWJzY3JpYmVycyA9IG5ldyBTZXQoKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc3Vic2NyaWJlKHN1YnNjcmliZXIpIHtcbiAge1xuICAgIHN1YnNjcmliZXJzLmFkZChzdWJzY3JpYmVyKTtcblxuICAgIGlmIChzdWJzY3JpYmVycy5zaXplID09PSAxKSB7XG4gICAgICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50ID0ge1xuICAgICAgICBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZDogb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQsXG4gICAgICAgIG9uSW50ZXJhY3Rpb25UcmFjZWQ6IG9uSW50ZXJhY3Rpb25UcmFjZWQsXG4gICAgICAgIG9uV29ya0NhbmNlbGVkOiBvbldvcmtDYW5jZWxlZCxcbiAgICAgICAgb25Xb3JrU2NoZWR1bGVkOiBvbldvcmtTY2hlZHVsZWQsXG4gICAgICAgIG9uV29ya1N0YXJ0ZWQ6IG9uV29ya1N0YXJ0ZWQsXG4gICAgICAgIG9uV29ya1N0b3BwZWQ6IG9uV29ya1N0b3BwZWRcbiAgICAgIH07XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV91bnN1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5kZWxldGUoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uSW50ZXJhY3Rpb25UcmFjZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU2NoZWR1bGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpIHtcbiAgdmFyIGRpZENhdGNoRXJyb3IgPSBmYWxzZTtcbiAgdmFyIGNhdWdodEVycm9yID0gbnVsbDtcbiAgc3Vic2NyaWJlcnMuZm9yRWFjaChmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgIHRyeSB7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmV4cG9ydHMudW5zdGFibGVfY2xlYXIgPSB1bnN0YWJsZV9jbGVhcjtcbmV4cG9ydHMudW5zdGFibGVfZ2V0Q3VycmVudCA9IHVuc3RhYmxlX2dldEN1cnJlbnQ7XG5leHBvcnRzLnVuc3RhYmxlX2dldFRocmVhZElEID0gdW5zdGFibGVfZ2V0VGhyZWFkSUQ7XG5leHBvcnRzLnVuc3RhYmxlX3N1YnNjcmliZSA9IHVuc3RhYmxlX3N1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfdHJhY2UgPSB1bnN0YWJsZV90cmFjZTtcbmV4cG9ydHMudW5zdGFibGVfdW5zdWJzY3JpYmUgPSB1bnN0YWJsZV91bnN1YnNjcmliZTtcbmV4cG9ydHMudW5zdGFibGVfd3JhcCA9IHVuc3RhYmxlX3dyYXA7XG4gIH0pKCk7XG59XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gIChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxudmFyIGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyA9IGZhbHNlO1xudmFyIGVuYWJsZVByb2ZpbGluZyA9IGZhbHNlO1xuXG52YXIgcmVxdWVzdEhvc3RDYWxsYmFjaztcbnZhciByZXF1ZXN0SG9zdFRpbWVvdXQ7XG52YXIgY2FuY2VsSG9zdFRpbWVvdXQ7XG52YXIgcmVxdWVzdFBhaW50O1xudmFyIGhhc1BlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xuXG5pZiAoaGFzUGVyZm9ybWFuY2VOb3cpIHtcbiAgdmFyIGxvY2FsUGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuICBleHBvcnRzLnVuc3RhYmxlX25vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbG9jYWxQZXJmb3JtYW5jZS5ub3coKTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBsb2NhbERhdGUgPSBEYXRlO1xuICB2YXIgaW5pdGlhbFRpbWUgPSBsb2NhbERhdGUubm93KCk7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsRGF0ZS5ub3coKSAtIGluaXRpYWxUaW1lO1xuICB9O1xufVxuXG5pZiAoIC8vIElmIFNjaGVkdWxlciBydW5zIGluIGEgbm9uLURPTSBlbnZpcm9ubWVudCwgaXQgZmFsbHMgYmFjayB0byBhIG5haXZlXG4vLyBpbXBsZW1lbnRhdGlvbiB1c2luZyBzZXRUaW1lb3V0LlxudHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgfHwgLy8gQ2hlY2sgaWYgTWVzc2FnZUNoYW5uZWwgaXMgc3VwcG9ydGVkLCB0b28uXG50eXBlb2YgTWVzc2FnZUNoYW5uZWwgIT09ICdmdW5jdGlvbicpIHtcbiAgLy8gSWYgdGhpcyBhY2NpZGVudGFsbHkgZ2V0cyBpbXBvcnRlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LCBlLmcuIEphdmFTY3JpcHRDb3JlLFxuICAvLyBmYWxsYmFjayB0byBhIG5haXZlIGltcGxlbWVudGF0aW9uLlxuICB2YXIgX2NhbGxiYWNrID0gbnVsbDtcbiAgdmFyIF90aW1lb3V0SUQgPSBudWxsO1xuXG4gIHZhciBfZmx1c2hDYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICB2YXIgaGFzUmVtYWluaW5nVGltZSA9IHRydWU7XG5cbiAgICAgICAgX2NhbGxiYWNrKGhhc1JlbWFpbmluZ1RpbWUsIGN1cnJlbnRUaW1lKTtcblxuICAgICAgICBfY2FsbGJhY2sgPSBudWxsO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RDYWxsYmFjayA9IGZ1bmN0aW9uIChjYikge1xuICAgIGlmIChfY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIC8vIFByb3RlY3QgYWdhaW5zdCByZS1lbnRyYW5jeS5cbiAgICAgIHNldFRpbWVvdXQocmVxdWVzdEhvc3RDYWxsYmFjaywgMCwgY2IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBfY2FsbGJhY2sgPSBjYjtcbiAgICAgIHNldFRpbWVvdXQoX2ZsdXNoQ2FsbGJhY2ssIDApO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2IsIG1zKSB7XG4gICAgX3RpbWVvdXRJRCA9IHNldFRpbWVvdXQoY2IsIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjbGVhclRpbWVvdXQoX3RpbWVvdXRJRCk7XG4gIH07XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG5cbiAgcmVxdWVzdFBhaW50ID0gZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uICgpIHt9O1xufSBlbHNlIHtcbiAgLy8gQ2FwdHVyZSBsb2NhbCByZWZlcmVuY2VzIHRvIG5hdGl2ZSBBUElzLCBpbiBjYXNlIGEgcG9seWZpbGwgb3ZlcnJpZGVzIHRoZW0uXG4gIHZhciBfc2V0VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0O1xuICB2YXIgX2NsZWFyVGltZW91dCA9IHdpbmRvdy5jbGVhclRpbWVvdXQ7XG5cbiAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIFRPRE86IFNjaGVkdWxlciBubyBsb25nZXIgcmVxdWlyZXMgdGhlc2UgbWV0aG9kcyB0byBiZSBwb2x5ZmlsbGVkLiBCdXRcbiAgICAvLyBtYXliZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdhcm5pbmcgaWYgdGhleSBkb24ndCBleGlzdCwgdG8gcHJlc2VydmUgdGhlXG4gICAgLy8gb3B0aW9uIHRvIHJlbHkgb24gaXQgaW4gdGhlIGZ1dHVyZT9cbiAgICB2YXIgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICB2YXIgY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG5cbiAgICBpZiAodHlwZW9mIHJlcXVlc3RBbmltYXRpb25GcmFtZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gVXNpbmcgY29uc29sZVsnZXJyb3InXSB0byBldmFkZSBCYWJlbCBhbmQgRVNMaW50XG4gICAgICBjb25zb2xlWydlcnJvciddKFwiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIFwiICsgJ01ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgJyArICdwb2x5ZmlsbCBpbiBvbGRlciBicm93c2Vycy4gaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3JlYWN0LXBvbHlmaWxscycpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICB2YXIgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgdmFyIHRhc2tUaW1lb3V0SUQgPSAtMTsgLy8gU2NoZWR1bGVyIHBlcmlvZGljYWxseSB5aWVsZHMgaW4gY2FzZSB0aGVyZSBpcyBvdGhlciB3b3JrIG9uIHRoZSBtYWluXG4gIC8vIHRocmVhZCwgbGlrZSB1c2VyIGV2ZW50cy4gQnkgZGVmYXVsdCwgaXQgeWllbGRzIG11bHRpcGxlIHRpbWVzIHBlciBmcmFtZS5cbiAgLy8gSXQgZG9lcyBub3QgYXR0ZW1wdCB0byBhbGlnbiB3aXRoIGZyYW1lIGJvdW5kYXJpZXMsIHNpbmNlIG1vc3QgdGFza3MgZG9uJ3RcbiAgLy8gbmVlZCB0byBiZSBmcmFtZSBhbGlnbmVkOyBmb3IgdGhvc2UgdGhhdCBkbywgdXNlIHJlcXVlc3RBbmltYXRpb25GcmFtZS5cblxuICB2YXIgeWllbGRJbnRlcnZhbCA9IDU7XG4gIHZhciBkZWFkbGluZSA9IDA7IC8vIFRPRE86IE1ha2UgdGhpcyBjb25maWd1cmFibGVcblxuICB7XG4gICAgLy8gYGlzSW5wdXRQZW5kaW5nYCBpcyBub3QgYXZhaWxhYmxlLiBTaW5jZSB3ZSBoYXZlIG5vIHdheSBvZiBrbm93aW5nIGlmXG4gICAgLy8gdGhlcmUncyBwZW5kaW5nIGlucHV0LCBhbHdheXMgeWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUuXG4gICAgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBleHBvcnRzLnVuc3RhYmxlX25vdygpID49IGRlYWRsaW5lO1xuICAgIH07IC8vIFNpbmNlIHdlIHlpZWxkIGV2ZXJ5IGZyYW1lIHJlZ2FyZGxlc3MsIGByZXF1ZXN0UGFpbnRgIGhhcyBubyBlZmZlY3QuXG5cblxuICAgIHJlcXVlc3RQYWludCA9IGZ1bmN0aW9uICgpIHt9O1xuICB9XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9mb3JjZUZyYW1lUmF0ZSA9IGZ1bmN0aW9uIChmcHMpIHtcbiAgICBpZiAoZnBzIDwgMCB8fCBmcHMgPiAxMjUpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXSgnZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsICcgKyAnZm9yY2luZyBmcmFtZSByYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZnBzID4gMCkge1xuICAgICAgeWllbGRJbnRlcnZhbCA9IE1hdGguZmxvb3IoMTAwMCAvIGZwcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlc2V0IHRoZSBmcmFtZXJhdGVcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7IC8vIFlpZWxkIGFmdGVyIGB5aWVsZEludGVydmFsYCBtcywgcmVnYXJkbGVzcyBvZiB3aGVyZSB3ZSBhcmUgaW4gdGhlIHZzeW5jXG4gICAgICAvLyBjeWNsZS4gVGhpcyBtZWFucyB0aGVyZSdzIGFsd2F5cyB0aW1lIHJlbWFpbmluZyBhdCB0aGUgYmVnaW5uaW5nIG9mXG4gICAgICAvLyB0aGUgbWVzc2FnZSBldmVudC5cblxuICAgICAgZGVhZGxpbmUgPSBjdXJyZW50VGltZSArIHlpZWxkSW50ZXJ2YWw7XG4gICAgICB2YXIgaGFzVGltZVJlbWFpbmluZyA9IHRydWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBoYXNNb3JlV29yayA9IHNjaGVkdWxlZEhvc3RDYWxsYmFjayhoYXNUaW1lUmVtYWluaW5nLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgaWYgKCFoYXNNb3JlV29yaykge1xuICAgICAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gZmFsc2U7XG4gICAgICAgICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgd29yaywgc2NoZWR1bGUgdGhlIG5leHQgbWVzc2FnZSBldmVudCBhdCB0aGUgZW5kXG4gICAgICAgICAgLy8gb2YgdGhlIHByZWNlZGluZyBvbmUuXG4gICAgICAgICAgcG9ydC5wb3N0TWVzc2FnZShudWxsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgYSBzY2hlZHVsZXIgdGFzayB0aHJvd3MsIGV4aXQgdGhlIGN1cnJlbnQgYnJvd3NlciB0YXNrIHNvIHRoZVxuICAgICAgICAvLyBlcnJvciBjYW4gYmUgb2JzZXJ2ZWQuXG4gICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgIH0gLy8gWWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgd2lsbCBnaXZlIGl0IGEgY2hhbmNlIHRvIHBhaW50LCBzbyB3ZSBjYW5cbiAgfTtcblxuICB2YXIgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICB2YXIgcG9ydCA9IGNoYW5uZWwucG9ydDI7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gcGVyZm9ybVdvcmtVbnRpbERlYWRsaW5lO1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBzY2hlZHVsZWRIb3N0Q2FsbGJhY2sgPSBjYWxsYmFjaztcblxuICAgIGlmICghaXNNZXNzYWdlTG9vcFJ1bm5pbmcpIHtcbiAgICAgIGlzTWVzc2FnZUxvb3BSdW5uaW5nID0gdHJ1ZTtcbiAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0VGltZW91dCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgbXMpIHtcbiAgICB0YXNrVGltZW91dElEID0gX3NldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgY2FsbGJhY2soZXhwb3J0cy51bnN0YWJsZV9ub3coKSk7XG4gICAgfSwgbXMpO1xuICB9O1xuXG4gIGNhbmNlbEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKCkge1xuICAgIF9jbGVhclRpbWVvdXQodGFza1RpbWVvdXRJRCk7XG5cbiAgICB0YXNrVGltZW91dElEID0gLTE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHB1c2goaGVhcCwgbm9kZSkge1xuICB2YXIgaW5kZXggPSBoZWFwLmxlbmd0aDtcbiAgaGVhcC5wdXNoKG5vZGUpO1xuICBzaWZ0VXAoaGVhcCwgbm9kZSwgaW5kZXgpO1xufVxuZnVuY3Rpb24gcGVlayhoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG4gIHJldHVybiBmaXJzdCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGZpcnN0O1xufVxuZnVuY3Rpb24gcG9wKGhlYXApIHtcbiAgdmFyIGZpcnN0ID0gaGVhcFswXTtcblxuICBpZiAoZmlyc3QgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBsYXN0ID0gaGVhcC5wb3AoKTtcblxuICAgIGlmIChsYXN0ICE9PSBmaXJzdCkge1xuICAgICAgaGVhcFswXSA9IGxhc3Q7XG4gICAgICBzaWZ0RG93bihoZWFwLCBsYXN0LCAwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2lmdFVwKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBwYXJlbnRJbmRleCA9IGluZGV4IC0gMSA+Pj4gMTtcbiAgICB2YXIgcGFyZW50ID0gaGVhcFtwYXJlbnRJbmRleF07XG5cbiAgICBpZiAocGFyZW50ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShwYXJlbnQsIG5vZGUpID4gMCkge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBsYXJnZXIuIFN3YXAgcG9zaXRpb25zLlxuICAgICAgaGVhcFtwYXJlbnRJbmRleF0gPSBub2RlO1xuICAgICAgaGVhcFtpbmRleF0gPSBwYXJlbnQ7XG4gICAgICBpbmRleCA9IHBhcmVudEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGUgcGFyZW50IGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnREb3duKGhlYXAsIG5vZGUsIGkpIHtcbiAgdmFyIGluZGV4ID0gaTtcbiAgdmFyIGxlbmd0aCA9IGhlYXAubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBsZWZ0SW5kZXggPSAoaW5kZXggKyAxKSAqIDIgLSAxO1xuICAgIHZhciBsZWZ0ID0gaGVhcFtsZWZ0SW5kZXhdO1xuICAgIHZhciByaWdodEluZGV4ID0gbGVmdEluZGV4ICsgMTtcbiAgICB2YXIgcmlnaHQgPSBoZWFwW3JpZ2h0SW5kZXhdOyAvLyBJZiB0aGUgbGVmdCBvciByaWdodCBub2RlIGlzIHNtYWxsZXIsIHN3YXAgd2l0aCB0aGUgc21hbGxlciBvZiB0aG9zZS5cblxuICAgIGlmIChsZWZ0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShsZWZ0LCBub2RlKSA8IDApIHtcbiAgICAgIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIGxlZnQpIDwgMCkge1xuICAgICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgICBoZWFwW3JpZ2h0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSBsZWZ0O1xuICAgICAgICBoZWFwW2xlZnRJbmRleF0gPSBub2RlO1xuICAgICAgICBpbmRleCA9IGxlZnRJbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJpZ2h0ICE9PSB1bmRlZmluZWQgJiYgY29tcGFyZShyaWdodCwgbm9kZSkgPCAwKSB7XG4gICAgICBoZWFwW2luZGV4XSA9IHJpZ2h0O1xuICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICBpbmRleCA9IHJpZ2h0SW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5laXRoZXIgY2hpbGQgaXMgc21hbGxlci4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZShhLCBiKSB7XG4gIC8vIENvbXBhcmUgc29ydCBpbmRleCBmaXJzdCwgdGhlbiB0YXNrIGlkLlxuICB2YXIgZGlmZiA9IGEuc29ydEluZGV4IC0gYi5zb3J0SW5kZXg7XG4gIHJldHVybiBkaWZmICE9PSAwID8gZGlmZiA6IGEuaWQgLSBiLmlkO1xufVxuXG4vLyBUT0RPOiBVc2Ugc3ltYm9scz9cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDE7XG52YXIgVXNlckJsb2NraW5nUHJpb3JpdHkgPSAyO1xudmFyIE5vcm1hbFByaW9yaXR5ID0gMztcbnZhciBMb3dQcmlvcml0eSA9IDQ7XG52YXIgSWRsZVByaW9yaXR5ID0gNTtcblxuZnVuY3Rpb24gbWFya1Rhc2tFcnJvcmVkKHRhc2ssIG1zKSB7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXZhciAqL1xuLy8gTWF0aC5wb3coMiwgMzApIC0gMVxuLy8gMGIxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTFcblxudmFyIG1heFNpZ25lZDMxQml0SW50ID0gMTA3Mzc0MTgyMzsgLy8gVGltZXMgb3V0IGltbWVkaWF0ZWx5XG5cbnZhciBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVCA9IC0xOyAvLyBFdmVudHVhbGx5IHRpbWVzIG91dFxuXG52YXIgVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUID0gMjUwO1xudmFyIE5PUk1BTF9QUklPUklUWV9USU1FT1VUID0gNTAwMDtcbnZhciBMT1dfUFJJT1JJVFlfVElNRU9VVCA9IDEwMDAwOyAvLyBOZXZlciB0aW1lcyBvdXRcblxudmFyIElETEVfUFJJT1JJVFlfVElNRU9VVCA9IG1heFNpZ25lZDMxQml0SW50OyAvLyBUYXNrcyBhcmUgc3RvcmVkIG9uIGEgbWluIGhlYXBcblxudmFyIHRhc2tRdWV1ZSA9IFtdO1xudmFyIHRpbWVyUXVldWUgPSBbXTsgLy8gSW5jcmVtZW50aW5nIGlkIGNvdW50ZXIuIFVzZWQgdG8gbWFpbnRhaW4gaW5zZXJ0aW9uIG9yZGVyLlxuXG52YXIgdGFza0lkQ291bnRlciA9IDE7IC8vIFBhdXNpbmcgdGhlIHNjaGVkdWxlciBpcyB1c2VmdWwgZm9yIGRlYnVnZ2luZy5cbnZhciBjdXJyZW50VGFzayA9IG51bGw7XG52YXIgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTsgLy8gVGhpcyBpcyBzZXQgd2hpbGUgcGVyZm9ybWluZyB3b3JrLCB0byBwcmV2ZW50IHJlLWVudHJhbmN5LlxuXG52YXIgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xudmFyIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG52YXIgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKSB7XG4gIC8vIENoZWNrIGZvciB0YXNrcyB0aGF0IGFyZSBubyBsb25nZXIgZGVsYXllZCBhbmQgYWRkIHRoZW0gdG8gdGhlIHF1ZXVlLlxuICB2YXIgdGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gIHdoaWxlICh0aW1lciAhPT0gbnVsbCkge1xuICAgIGlmICh0aW1lci5jYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGltZXIgd2FzIGNhbmNlbGxlZC5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXJ0VGltZSA8PSBjdXJyZW50VGltZSkge1xuICAgICAgLy8gVGltZXIgZmlyZWQuIFRyYW5zZmVyIHRvIHRoZSB0YXNrIHF1ZXVlLlxuICAgICAgcG9wKHRpbWVyUXVldWUpO1xuICAgICAgdGltZXIuc29ydEluZGV4ID0gdGltZXIuZXhwaXJhdGlvblRpbWU7XG4gICAgICBwdXNoKHRhc2tRdWV1ZSwgdGltZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZW1haW5pbmcgdGltZXJzIGFyZSBwZW5kaW5nLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVUaW1lb3V0KGN1cnJlbnRUaW1lKSB7XG4gIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCkge1xuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgIT09IG51bGwpIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgICBpZiAoZmlyc3RUaW1lciAhPT0gbnVsbCkge1xuICAgICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZsdXNoV29yayhoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuXG5cbiAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSBmYWxzZTtcblxuICBpZiAoaXNIb3N0VGltZW91dFNjaGVkdWxlZCkge1xuICAgIC8vIFdlIHNjaGVkdWxlZCBhIHRpbWVvdXQgYnV0IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4gQ2FuY2VsIGl0LlxuICAgIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nV29yayA9IHRydWU7XG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIGlmIChlbmFibGVQcm9maWxpbmcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoY3VycmVudFRhc2sgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICAgICAgICAgIG1hcmtUYXNrRXJyb3JlZChjdXJyZW50VGFzaywgY3VycmVudFRpbWUpO1xuICAgICAgICAgIGN1cnJlbnRUYXNrLmlzUXVldWVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2F0Y2ggaW4gcHJvZCBjb2RlIHBhdGguXG4gICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50VGFzayA9IG51bGw7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgaXNQZXJmb3JtaW5nV29yayA9IGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGluaXRpYWxUaW1lO1xuICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG5cbiAgd2hpbGUgKGN1cnJlbnRUYXNrICE9PSBudWxsICYmICEoZW5hYmxlU2NoZWR1bGVyRGVidWdnaW5nICkpIHtcbiAgICBpZiAoY3VycmVudFRhc2suZXhwaXJhdGlvblRpbWUgPiBjdXJyZW50VGltZSAmJiAoIWhhc1RpbWVSZW1haW5pbmcgfHwgZXhwb3J0cy51bnN0YWJsZV9zaG91bGRZaWVsZCgpKSkge1xuICAgICAgLy8gVGhpcyBjdXJyZW50VGFzayBoYXNuJ3QgZXhwaXJlZCwgYW5kIHdlJ3ZlIHJlYWNoZWQgdGhlIGRlYWRsaW5lLlxuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdmFyIGNhbGxiYWNrID0gY3VycmVudFRhc2suY2FsbGJhY2s7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IG51bGw7XG4gICAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRUYXNrLnByaW9yaXR5TGV2ZWw7XG4gICAgICB2YXIgZGlkVXNlckNhbGxiYWNrVGltZW91dCA9IGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lO1xuXG4gICAgICB2YXIgY29udGludWF0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayhkaWRVc2VyQ2FsbGJhY2tUaW1lb3V0KTtcbiAgICAgIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcblxuICAgICAgaWYgKHR5cGVvZiBjb250aW51YXRpb25DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjdXJyZW50VGFzay5jYWxsYmFjayA9IGNvbnRpbnVhdGlvbkNhbGxiYWNrO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoY3VycmVudFRhc2sgPT09IHBlZWsodGFza1F1ZXVlKSkge1xuICAgICAgICAgIHBvcCh0YXNrUXVldWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICB9XG5cbiAgICBjdXJyZW50VGFzayA9IHBlZWsodGFza1F1ZXVlKTtcbiAgfSAvLyBSZXR1cm4gd2hldGhlciB0aGVyZSdzIGFkZGl0aW9uYWwgd29ya1xuXG5cbiAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGZpcnN0VGltZXIgPSBwZWVrKHRpbWVyUXVldWUpO1xuXG4gICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBmaXJzdFRpbWVyLnN0YXJ0VGltZSAtIGN1cnJlbnRUaW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcnVuV2l0aFByaW9yaXR5KHByaW9yaXR5TGV2ZWwsIGV2ZW50SGFuZGxlcikge1xuICBzd2l0Y2ggKHByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IE5vcm1hbFByaW9yaXR5O1xuICB9XG5cbiAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZXZlbnRIYW5kbGVyKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfbmV4dChldmVudEhhbmRsZXIpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWw7XG5cbiAgc3dpdGNoIChjdXJyZW50UHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5OlxuICAgICAgLy8gU2hpZnQgZG93biB0byBub3JtYWwgcHJpb3JpdHlcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIEFueXRoaW5nIGxvd2VyIHRoYW4gbm9ybWFsIHByaW9yaXR5IHNob3VsZCByZW1haW4gYXQgdGhlIGN1cnJlbnQgbGV2ZWwuXG4gICAgICBwcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXBDYWxsYmFjayhjYWxsYmFjaykge1xuICB2YXIgcGFyZW50UHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIC8vIFRoaXMgaXMgYSBmb3JrIG9mIHJ1bldpdGhQcmlvcml0eSwgaW5saW5lZCBmb3IgcGVyZm9ybWFuY2UuXG4gICAgdmFyIHByZXZpb3VzUHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcGFyZW50UHJpb3JpdHlMZXZlbDtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmV2aW91c1ByaW9yaXR5TGV2ZWw7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKHByaW9yaXR5TGV2ZWwsIGNhbGxiYWNrLCBvcHRpb25zKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG4gIHZhciBzdGFydFRpbWU7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnb2JqZWN0JyAmJiBvcHRpb25zICE9PSBudWxsKSB7XG4gICAgdmFyIGRlbGF5ID0gb3B0aW9ucy5kZWxheTtcblxuICAgIGlmICh0eXBlb2YgZGVsYXkgPT09ICdudW1iZXInICYmIGRlbGF5ID4gMCkge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWUgKyBkZWxheTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICB9XG5cbiAgdmFyIHRpbWVvdXQ7XG5cbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJTU1FRElBVEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBVU0VSX0JMT0NLSU5HX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5OlxuICAgICAgdGltZW91dCA9IElETEVfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBMT1dfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBkZWZhdWx0OlxuICAgICAgdGltZW91dCA9IE5PUk1BTF9QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgZXhwaXJhdGlvblRpbWUgPSBzdGFydFRpbWUgKyB0aW1lb3V0O1xuICB2YXIgbmV3VGFzayA9IHtcbiAgICBpZDogdGFza0lkQ291bnRlcisrLFxuICAgIGNhbGxiYWNrOiBjYWxsYmFjayxcbiAgICBwcmlvcml0eUxldmVsOiBwcmlvcml0eUxldmVsLFxuICAgIHN0YXJ0VGltZTogc3RhcnRUaW1lLFxuICAgIGV4cGlyYXRpb25UaW1lOiBleHBpcmF0aW9uVGltZSxcbiAgICBzb3J0SW5kZXg6IC0xXG4gIH07XG5cbiAgaWYgKHN0YXJ0VGltZSA+IGN1cnJlbnRUaW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGRlbGF5ZWQgdGFzay5cbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IHN0YXJ0VGltZTtcbiAgICBwdXNoKHRpbWVyUXVldWUsIG5ld1Rhc2spO1xuXG4gICAgaWYgKHBlZWsodGFza1F1ZXVlKSA9PT0gbnVsbCAmJiBuZXdUYXNrID09PSBwZWVrKHRpbWVyUXVldWUpKSB7XG4gICAgICAvLyBBbGwgdGFza3MgYXJlIGRlbGF5ZWQsIGFuZCB0aGlzIGlzIHRoZSB0YXNrIHdpdGggdGhlIGVhcmxpZXN0IGRlbGF5LlxuICAgICAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAgICAgLy8gQ2FuY2VsIGFuIGV4aXN0aW5nIHRpbWVvdXQuXG4gICAgICAgIGNhbmNlbEhvc3RUaW1lb3V0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIH0gLy8gU2NoZWR1bGUgYSB0aW1lb3V0LlxuXG5cbiAgICAgIHJlcXVlc3RIb3N0VGltZW91dChoYW5kbGVUaW1lb3V0LCBzdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG5ld1Rhc2suc29ydEluZGV4ID0gZXhwaXJhdGlvblRpbWU7XG4gICAgcHVzaCh0YXNrUXVldWUsIG5ld1Rhc2spO1xuICAgIC8vIHdhaXQgdW50aWwgdGhlIG5leHQgdGltZSB3ZSB5aWVsZC5cblxuXG4gICAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgICAgaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgPSB0cnVlO1xuICAgICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdUYXNrO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbigpIHtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY29udGludWVFeGVjdXRpb24oKSB7XG5cbiAgaWYgKCFpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCAmJiAhaXNQZXJmb3JtaW5nV29yaykge1xuICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGUoKSB7XG4gIHJldHVybiBwZWVrKHRhc2tRdWV1ZSk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrKHRhc2spIHtcbiAgLy8gcmVtb3ZlIGZyb20gdGhlIHF1ZXVlIGJlY2F1c2UgeW91IGNhbid0IHJlbW92ZSBhcmJpdHJhcnkgbm9kZXMgZnJvbSBhblxuICAvLyBhcnJheSBiYXNlZCBoZWFwLCBvbmx5IHRoZSBmaXJzdCBvbmUuKVxuXG5cbiAgdGFzay5jYWxsYmFjayA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkge1xuICByZXR1cm4gY3VycmVudFByaW9yaXR5TGV2ZWw7XG59XG5cbnZhciB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSByZXF1ZXN0UGFpbnQ7XG52YXIgdW5zdGFibGVfUHJvZmlsaW5nID0gIG51bGw7XG5cbmV4cG9ydHMudW5zdGFibGVfSWRsZVByaW9yaXR5ID0gSWRsZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9JbW1lZGlhdGVQcmlvcml0eSA9IEltbWVkaWF0ZVByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Mb3dQcmlvcml0eSA9IExvd1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSA9IE5vcm1hbFByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9Qcm9maWxpbmcgPSB1bnN0YWJsZV9Qcm9maWxpbmc7XG5leHBvcnRzLnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5ID0gVXNlckJsb2NraW5nUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrID0gdW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uID0gdW5zdGFibGVfY29udGludWVFeGVjdXRpb247XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsID0gdW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWw7XG5leHBvcnRzLnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlID0gdW5zdGFibGVfZ2V0Rmlyc3RDYWxsYmFja05vZGU7XG5leHBvcnRzLnVuc3RhYmxlX25leHQgPSB1bnN0YWJsZV9uZXh0O1xuZXhwb3J0cy51bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9yZXF1ZXN0UGFpbnQgPSB1bnN0YWJsZV9yZXF1ZXN0UGFpbnQ7XG5leHBvcnRzLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSA9IHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayA9IHVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXBDYWxsYmFjayA9IHVuc3RhYmxlX3dyYXBDYWxsYmFjaztcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9zY2hlZHVsZXIucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgaXNPbGRJRSA9IGZ1bmN0aW9uIGlzT2xkSUUoKSB7XG4gIHZhciBtZW1vO1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUoKSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vID09PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3NcbiAgICAgIC8vIEBzZWUgaHR0cDovL2Jyb3dzZXJoYWNrcy5jb20vI2hhY2stZTcxZDg2OTJmNjUzMzQxNzNmZWU3MTVjMjIyY2I4MDVcbiAgICAgIC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcbiAgICAgIC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuICAgICAgLy8gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlci9pc3N1ZXMvMTc3XG4gICAgICBtZW1vID0gQm9vbGVhbih3aW5kb3cgJiYgZG9jdW1lbnQgJiYgZG9jdW1lbnQuYWxsICYmICF3aW5kb3cuYXRvYik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59KCk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiBnZXRUYXJnZXQoKSB7XG4gIHZhciBtZW1vID0ge307XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vcml6ZSh0YXJnZXQpIHtcbiAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgICBzdHlsZVRhcmdldCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbiAgfTtcbn0oKTtcblxudmFyIHN0eWxlc0luRG9tID0gW107XG5cbmZ1bmN0aW9uIGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgdmFyIHJlc3VsdCA9IC0xO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5Eb20ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5Eb21baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKSB7XG4gIHZhciBpZENvdW50TWFwID0ge307XG4gIHZhciBpZGVudGlmaWVycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGVzSW5Eb20ucHVzaCh7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IGFkZFN0eWxlKG9iaiwgb3B0aW9ucyksXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cblxuICByZXR1cm4gaWRlbnRpZmllcnM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHZhciBhdHRyaWJ1dGVzID0gb3B0aW9ucy5hdHRyaWJ1dGVzIHx8IHt9O1xuXG4gIGlmICh0eXBlb2YgYXR0cmlidXRlcy5ub25jZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09ICd1bmRlZmluZWQnID8gX193ZWJwYWNrX25vbmNlX18gOiBudWxsO1xuXG4gICAgaWYgKG5vbmNlKSB7XG4gICAgICBhdHRyaWJ1dGVzLm5vbmNlID0gbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKGtleSwgYXR0cmlidXRlc1trZXldKTtcbiAgfSk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG9wdGlvbnMuaW5zZXJ0KHN0eWxlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG9wdGlvbnMuaW5zZXJ0IHx8ICdoZWFkJyk7XG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgICB9XG5cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgcmV0dXJuIHN0eWxlO1xufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZSk7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG52YXIgcmVwbGFjZVRleHQgPSBmdW5jdGlvbiByZXBsYWNlVGV4dCgpIHtcbiAgdmFyIHRleHRTdG9yZSA9IFtdO1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZShpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICB0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG4gICAgcmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG4gIH07XG59KCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcoc3R5bGUsIGluZGV4LCByZW1vdmUsIG9iaikge1xuICB2YXIgY3NzID0gcmVtb3ZlID8gJycgOiBvYmoubWVkaWEgPyBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpLmNvbmNhdChvYmouY3NzLCBcIn1cIikgOiBvYmouY3NzOyAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuICAgIHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuICAgIGlmIChjaGlsZE5vZGVzW2luZGV4XSkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuICAgIH1cblxuICAgIGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuICAgICAgc3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcoc3R5bGUsIG9wdGlvbnMsIG9iaikge1xuICB2YXIgY3NzID0gb2JqLmNzcztcbiAgdmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuICB2YXIgc291cmNlTWFwID0gb2JqLnNvdXJjZU1hcDtcblxuICBpZiAobWVkaWEpIHtcbiAgICBzdHlsZS5zZXRBdHRyaWJ1dGUoJ21lZGlhJywgbWVkaWEpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLnJlbW92ZUF0dHJpYnV0ZSgnbWVkaWEnKTtcbiAgfVxuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH0gLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZS5maXJzdENoaWxkKSB7XG4gICAgICBzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhciBzaW5nbGV0b25Db3VudGVyID0gMDtcblxuZnVuY3Rpb24gYWRkU3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBzdHlsZTtcbiAgdmFyIHVwZGF0ZTtcbiAgdmFyIHJlbW92ZTtcblxuICBpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcbiAgICB2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcbiAgICBzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIGZhbHNlKTtcbiAgICByZW1vdmUgPSBhcHBseVRvU2luZ2xldG9uVGFnLmJpbmQobnVsbCwgc3R5bGUsIHN0eWxlSW5kZXgsIHRydWUpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlID0gaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICAgIHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cbiAgICByZW1vdmUgPSBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuICAgIH07XG4gIH1cblxuICB1cGRhdGUob2JqKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVtb3ZlKCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OyAvLyBGb3JjZSBzaW5nbGUtdGFnIHNvbHV0aW9uIG9uIElFNi05LCB3aGljaCBoYXMgYSBoYXJkIGxpbWl0IG9uIHRoZSAjIG9mIDxzdHlsZT5cbiAgLy8gdGFncyBpdCB3aWxsIGFsbG93IG9uIGEgcGFnZVxuXG4gIGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSAnYm9vbGVhbicpIHtcbiAgICBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcbiAgfVxuXG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcblxuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3TGlzdCkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5Eb21bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRG9tW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRG9tLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVEUySWlCb1pXbG5hSFE5SWpnd0lpQjJhV1YzUW05NFBTSXdJREFnTVRFMklEZ3dJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOFp5QmpiR2x3TFhCaGRHZzlJblZ5YkNnalkyeHBjREJmT0RBMVh6TXdPREU0S1NJK0NqeHdZWFJvSUdROUlrMHdJRE5ETUNBeExqTTBNekUxSURFdU16UXpNVFVnTUNBeklEQklNVEV6UXpFeE5DNDJOVGNnTUNBeE1UWWdNUzR6TkRNeE5TQXhNVFlnTTFZNE1FZ3dWak5hSWlCbWFXeHNQU0lqTUVReE1qRXlJaTgrQ2p4eVpXTjBJSGRwWkhSb1BTSXhNVGdpSUdobGFXZG9kRDBpTWpRaUlHWnBiR3c5SWlNeE9ESXhNalVpTHo0S1BIQmhkR2dnWkQwaVRURXlMalVnTkRGRE1USXVOU0F6T1M0d05qY2dNVFF1TURZM0lETTNMalVnTVRZZ016Y3VOVWd4TVRjdU5WWTRNQzQxU0RFeUxqVldOREZhSWlCbWFXeHNQU0lqTVRneU1USTFJaUJ6ZEhKdmEyVTlJaU15UVRNMk0wTWlMejRLUEhKbFkzUWdlRDBpTkRVaUlIazlJallpSUhkcFpIUm9QU0l5TnlJZ2FHVnBaMmgwUFNJeE15SWdjbmc5SWpNaUlHWnBiR3c5SWlNelFUUTBORUlpTHo0S1BISmxZM1FnZUQwaU56WWlJSGs5SWpZaUlIZHBaSFJvUFNJeU55SWdhR1ZwWjJoMFBTSXhNeUlnY25nOUlqTWlJR1pwYkd3OUlpTXpRVFEwTkVJaUx6NEtQSEpsWTNRZ2VEMGlNVEEzSWlCNVBTSTJJaUIzYVdSMGFEMGlNamNpSUdobGFXZG9kRDBpTVRNaUlISjRQU0l6SWlCbWFXeHNQU0lqTTBFME5EUkNJaTgrQ2p4d1lYUm9JR1E5SWsweU15NDVNVElnTVRFdU5qYzNOVU15TXk0ek5EazJJRGt1TURFMU1EWWdNakF1TWpRMklEY3VORFE0TmpVZ01UWXVPVGd4TWlBNExqRTNPVFU1UXpFekxqY3hOalFnT0M0NU1EazNOeUF4TVM0MU1qVTJJREV4TGpZMk1EZ2dNVEl1TURnNElERTBMak15TWpWRE1USXVOalV3TlNBeE5pNDVPRFE1SURFMUxqYzFOQ0F4T0M0MU5URXpJREU1TGpBeE9EZ2dNVGN1T0RJd05FTXlNaTR5T0RNMklERTNMakE1TURJZ01qUXVORGMwTkNBeE5DNHpNems1SURJekxqa3hNaUF4TVM0Mk56YzFXazB4T0NBeE5TNDBOVFF4UXpFMkxqWTRNak1nTVRVdU5EVTBNU0F4TlM0Mk1UUTVJREUwTGpNMU5URWdNVFV1TmpFME9TQXhNME14TlM0Mk1UUTVJREV4TGpZME5Ea2dNVFl1TmpneklERXdMalUwTlRrZ01UZ2dNVEF1TlRRMU9VTXhPUzR6TVRjZ01UQXVOVFExT1NBeU1DNHpPRFV4SURFeExqWTBORElnTWpBdU16ZzFNU0F4TTBNeU1DNHpPRFV4SURFMExqTTFOVGdnTVRrdU16RTNJREUxTGpRMU5ERWdNVGdnTVRVdU5EVTBNVm9pSUdacGJHdzlJaU13TURoRE9Ua2lMejRLUEhCaGRHZ2daRDBpVFRFNExqVXlOemNnT1M0MU5qUXhPRU14Tmk0Mk16WTFJRGt1TlRZME1UZ2dNVFV1TVRBek1TQXhNUzR4TkRFNUlERTFMakV3TXpFZ01UTXVNRGczT0VNeE5TNHhNRE14SURFMUxqQXpNemNnTVRZdU5qTTJOU0F4Tmk0Mk1URTFJREU0TGpVeU56Y2dNVFl1TmpFeE5VTXlNQzQwTVRrMklERTJMall4TVRVZ01qRXVPVFV6SURFMUxqQXpNemNnTWpFdU9UVXpJREV6TGpBNE56aERNakV1T1RVeU1pQXhNUzR4TkRFNUlESXdMalF4T0RrZ09TNDFOalF4T0NBeE9DNDFNamMzSURrdU5UWTBNVGhhVFRFM0xqazVPVGtnTVRVdU1UUXpOa014Tmk0NE5Ea3pJREUxTGpFME16WWdNVFV1T1RFMk5pQXhOQzR4T0RNNUlERTFMamt4TmpZZ01UTkRNVFV1T1RFMk5pQXhNUzQ0TVRZeElERTJMamcwT1RNZ01UQXVPRFUyTkNBeE55NDVPVGs1SURFd0xqZzFOalJETVRrdU1UVXdOQ0F4TUM0NE5UWTBJREl3TGpBNE16RWdNVEV1T0RFMk1TQXlNQzR3T0RNeElERXpRekl3TGpBNE16RWdNVFF1TVRnek9TQXhPUzR4TlRBMElERTFMakUwTXpZZ01UY3VPVGs1T1NBeE5TNHhORE0yV2lJZ1ptbHNiRDBpSXpjd1EwTkVNeUl2UGdvOGNtVmpkQ0I0UFNJeU5DSWdlVDBpTkRraUlIZHBaSFJvUFNJM05DSWdhR1ZwWjJoMFBTSTJJaUJ5ZUQwaU1TSWdabWxzYkQwaUl6TkJORFEwUWlJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ua2lJSGRwWkhSb1BTSTFPU0lnYUdWcFoyaDBQU0k0SWlCeWVEMGlNU0lnWm1sc2JEMGlJek5CTkRRMFFpSXZQZ284TDJjK0NqeGtaV1p6UGdvOFkyeHBjRkJoZEdnZ2FXUTlJbU5zYVhBd1h6Z3dOVjh6TURneE9DSStDanh3WVhSb0lHUTlJazB3SURORE1DQXhMak0wTXpFMUlERXVNelF6TVRVZ01DQXpJREJJTVRFelF6RXhOQzQyTlRjZ01DQXhNVFlnTVM0ek5ETXhOU0F4TVRZZ00xWTRNRWd3VmpOYUlpQm1hV3hzUFNKM2FHbDBaU0l2UGdvOEwyTnNhWEJRWVhSb1BnbzhMMlJsWm5NK0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlPQ0lnYUdWcFoyaDBQU0l4TXlJZ2RtbGxkMEp2ZUQwaU1DQXdJRGdnTVRNaUlHWnBiR3c5SW01dmJtVWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk5pNDJJREV5TGpSTU1DNDRNREF3TURNZ05pNDFNREF3TVV3MkxqWWdNQzQyTURBd01EWk1OeTQwSURFdU5EQXdNREZNTWk0eUlEWXVOVEF3TURGTU55NDBJREV4TGpaTU5pNDJJREV5TGpSYUlpQm1hV3hzUFNJak1qZ3pOak0ySWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEdOcGNtTnNaU0JqZUQwaU1UWXVOU0lnWTNrOUlqRTJMalVpSUhJOUlqa3VOU0lnYzNSeWIydGxQU0lqTTBRNVJFWkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNeTFwYm5OcFpHVXRNVjg0TUROZk1qUTBPVElpSUdacGJHdzlJbmRvYVhSbElqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE5DNDJPRElnTWpBdU5ETXlRekUwTGpnM056SWdNakF1TmpJM01pQXhOUzR4T1RNNElESXdMall5TnpJZ01UVXVNemc1TVNBeU1DNDBNekpNTVRZdU1EazJNaUF4T1M0M01qUTVUREl4TGpZMU5UTWdNVFF1TVRZMU4wTXlNUzQ0TlRBMklERXpMamszTURVZ01qRXVPRFV3TmlBeE15NDJOVE01SURJeExqWTFOVE1nTVRNdU5EVTROa3d5TUM0NU5EZ3lJREV5TGpjMU1UVkRNakF1TnpVeklERXlMalUxTmpNZ01qQXVORE0yTkNBeE1pNDFOVFl6SURJd0xqSTBNVEVnTVRJdU56VXhOVXd4TlM0d016VTFJREUzTGprMU56Rk1NVE11TWpZM09DQXhOaTR4T0RrelF6RXpMakEzTWpVZ01UVXVPVGswTVNBeE1pNDNOVFU1SURFMUxqazVOREVnTVRJdU5UWXdOeUF4Tmk0eE9Ea3pUREV4TGpnMU16WWdNVFl1T0RrMk5FTXhNUzQyTlRneklERTNMakE1TVRjZ01URXVOalU0TXlBeE55NDBNRGd6SURFeExqZzFNellnTVRjdU5qQXpOa3d4TXk0NU56UTVJREU1TGpjeU5EbE1NVFF1TmpneUlESXdMalF6TWxvaUx6NEtQQzl0WVhOclBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFMExqWTRNaUF5TUM0ME16SkRNVFF1T0RjM01pQXlNQzQyTWpjeUlERTFMakU1TXpnZ01qQXVOakkzTWlBeE5TNHpPRGt4SURJd0xqUXpNa3d4Tmk0d09UWXlJREU1TGpjeU5EbE1NakV1TmpVMU15QXhOQzR4TmpVM1F6SXhMamcxTURZZ01UTXVPVGN3TlNBeU1TNDROVEEySURFekxqWTFNemtnTWpFdU5qVTFNeUF4TXk0ME5UZzJUREl3TGprME9ESWdNVEl1TnpVeE5VTXlNQzQzTlRNZ01USXVOVFUyTXlBeU1DNDBNelkwSURFeUxqVTFOak1nTWpBdU1qUXhNU0F4TWk0M05URTFUREUxTGpBek5UVWdNVGN1T1RVM01Vd3hNeTR5TmpjNElERTJMakU0T1RORE1UTXVNRGN5TlNBeE5TNDVPVFF4SURFeUxqYzFOVGtnTVRVdU9UazBNU0F4TWk0MU5qQTNJREUyTGpFNE9UTk1NVEV1T0RVek5pQXhOaTQ0T1RZMFF6RXhMalkxT0RNZ01UY3VNRGt4TnlBeE1TNDJOVGd6SURFM0xqUXdPRE1nTVRFdU9EVXpOaUF4Tnk0Mk1ETTJUREV6TGprM05Ea2dNVGt1TnpJME9Vd3hOQzQyT0RJZ01qQXVORE15V2lJZ1ptbHNiRDBpSXpORU9VUkdSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UVXVNRE0xTlNBeE55NDVOVGN4VERFMExqTXlPRFFnTVRndU5qWTBNa3d4TlM0d016VTFJREU1TGpNM01UTk1NVFV1TnpReU5pQXhPQzQyTmpReVRERTFMakF6TlRVZ01UY3VPVFUzTVZwTk1UUXVOamd5SURFNUxqY3lORGxETVRRdU9EYzNNaUF4T1M0MU1qazJJREUxTGpFNU16Z2dNVGt1TlRJNU5pQXhOUzR6T0RreElERTVMamN5TkRsTU1UTXVPVGMwT1NBeU1TNHhNemt4UXpFMExqVTJNRGNnTWpFdU56STBPU0F4TlM0MU1UQTBJREl4TGpjeU5Ea2dNVFl1TURrMk1pQXlNUzR4TXpreFRERTBMalk0TWlBeE9TNDNNalE1V2sweE5TNHpPRGt4SURFNUxqQXhOemhNTVRRdU5qZ3lJREU1TGpjeU5EbE1NVFl1TURrMk1pQXlNUzR4TXpreFRERTJMamd3TXpNZ01qQXVORE15VERFMUxqTTRPVEVnTVRrdU1ERTNPRnBOTWpBdU9UUTRNaUF4TXk0ME5UZzJUREUxTGpNNE9URWdNVGt1TURFM09Fd3hOaTQ0TURNeklESXdMalF6TWt3eU1pNHpOakkwSURFMExqZzNNamhNTWpBdU9UUTRNaUF4TXk0ME5UZzJXazB5TUM0NU5EZ3lJREUwTGpFMk5UZERNakF1TnpVeklERXpMamszTURVZ01qQXVOelV6SURFekxqWTFNemtnTWpBdU9UUTRNaUF4TXk0ME5UZzJUREl5TGpNMk1qUWdNVFF1T0RjeU9FTXlNaTQ1TkRneUlERTBMakk0TnpFZ01qSXVPVFE0TWlBeE15NHpNemN6SURJeUxqTTJNalFnTVRJdU56VXhOVXd5TUM0NU5EZ3lJREUwTGpFMk5UZGFUVEl3TGpJME1URWdNVE11TkRVNE5rd3lNQzQ1TkRneUlERTBMakUyTlRkTU1qSXVNell5TkNBeE1pNDNOVEUxVERJeExqWTFOVE1nTVRJdU1EUTBORXd5TUM0eU5ERXhJREV6TGpRMU9EWmFUVEl3TGprME9ESWdNVE11TkRVNE5rTXlNQzQzTlRNZ01UTXVOalV6T1NBeU1DNDBNelkwSURFekxqWTFNemtnTWpBdU1qUXhNU0F4TXk0ME5UZzJUREl4TGpZMU5UTWdNVEl1TURRME5FTXlNUzR3TmprMUlERXhMalExT0RZZ01qQXVNVEU1T0NBeE1TNDBOVGcySURFNUxqVXpOQ0F4TWk0d05EUTBUREl3TGprME9ESWdNVE11TkRVNE5scE5NVFV1TnpReU5pQXhPQzQyTmpReVRESXdMamswT0RJZ01UTXVORFU0Tmt3eE9TNDFNelFnTVRJdU1EUTBORXd4TkM0ek1qZzBJREUzTGpJMVRERTFMamMwTWpZZ01UZ3VOalkwTWxwTk1USXVOVFl3TnlBeE5pNDRPVFkwVERFMExqTXlPRFFnTVRndU5qWTBNa3d4TlM0M05ESTJJREUzTGpJMVRERXpMamszTkRrZ01UVXVORGd5TWt3eE1pNDFOakEzSURFMkxqZzVOalJhVFRFekxqSTJOemdnTVRZdU9EazJORU14TXk0d056STFJREUzTGpBNU1UY2dNVEl1TnpVMU9TQXhOeTR3T1RFM0lERXlMalUyTURjZ01UWXVPRGsyTkV3eE15NDVOelE1SURFMUxqUTRNakpETVRNdU16ZzVNU0F4TkM0NE9UWTBJREV5TGpRek9UTWdNVFF1T0RrMk5DQXhNUzQ0TlRNMklERTFMalE0TWpKTU1UTXVNalkzT0NBeE5pNDRPVFkwV2sweE1pNDFOakEzSURFM0xqWXdNelpNTVRNdU1qWTNPQ0F4Tmk0NE9UWTBUREV4TGpnMU16WWdNVFV1TkRneU1rd3hNUzR4TkRZMElERTJMakU0T1ROTU1USXVOVFl3TnlBeE55NDJNRE0yV2sweE1pNDFOakEzSURFMkxqZzVOalJETVRJdU56VTFPU0F4Tnk0d09URTNJREV5TGpjMU5Ua2dNVGN1TkRBNE15QXhNaTQxTmpBM0lERTNMall3TXpaTU1URXVNVFEyTkNBeE5pNHhPRGt6UXpFd0xqVTJNRGNnTVRZdU56YzFNU0F4TUM0MU5qQTNJREUzTGpjeU5Ea2dNVEV1TVRRMk5DQXhPQzR6TVRBM1RERXlMalUyTURjZ01UWXVPRGsyTkZwTk1UUXVOamd5SURFNUxqQXhOemhNTVRJdU5UWXdOeUF4Tmk0NE9UWTBUREV4TGpFME5qUWdNVGd1TXpFd04wd3hNeTR5TmpjNElESXdMalF6TWt3eE5DNDJPRElnTVRrdU1ERTNPRnBOTVRVdU16ZzVNU0F4T1M0M01qUTVUREUwTGpZNE1pQXhPUzR3TVRjNFRERXpMakkyTnpnZ01qQXVORE15VERFekxqazNORGtnTWpFdU1UTTVNVXd4TlM0ek9Ea3hJREU1TGpjeU5EbGFJaUJtYVd4c1BTSWpNMFE1UkVaR0lpQnRZWE5yUFNKMWNtd29JM0JoZEdndE15MXBibk5wWkdVdE1WODRNRE5mTWpRME9USXBJaTgrQ2p3dmMzWm5QZ289XCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTXhSak15TkRjaUx6NEtQRzFoYzJzZ2FXUTlJbkJoZEdndE1pMXBibk5wWkdVdE1WODFNREZmTmpBMk5pSWdabWxzYkQwaWQyaHBkR1VpUGdvOGNHRjBhQ0JtYVd4c0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdOc2FYQXRjblZzWlQwaVpYWmxibTlrWkNJZ1pEMGlUVEU0SURFd1NESXpRekl6TGpVMU1qTWdNVEFnTWpRZ01UQXVORFEzTnlBeU5DQXhNVll4TmtneE9GWXhNRnBOTVRZZ09FZ3hPRWd5TTBNeU5DNDJOVFk1SURnZ01qWWdPUzR6TkRNeE5TQXlOaUF4TVZZeU0wTXlOaUF5TkM0Mk5UWTVJREkwTGpZMU5qa2dNallnTWpNZ01qWklNVGhJTVRaSU1URkRPUzR6TkRNeE5TQXlOaUE0SURJMExqWTFOamtnT0NBeU0xWXhNVU00SURrdU16UXpNVFVnT1M0ek5ETXhOU0E0SURFeElEaElNVFphVFRFNElESTBTREl6UXpJekxqVTFNak1nTWpRZ01qUWdNak11TlRVeU15QXlOQ0F5TTFZeE9FZ3hPRll5TkZwTk1UWWdNalJJTVRGRE1UQXVORFEzTnlBeU5DQXhNQ0F5TXk0MU5USXpJREV3SURJelZqRTRTREUyVmpJMFdrMHhNQ0F4TmxZeE1VTXhNQ0F4TUM0ME5EYzNJREV3TGpRME56Y2dNVEFnTVRFZ01UQklNVFpXTVRaSU1UQmFJaTgrQ2p3dmJXRnphejRLUEhCaGRHZ2daRDBpVFRFNElERXdWamxJTVRkV01UQklNVGhhVFRJMElERTJWakUzU0RJMVZqRTJTREkwV2sweE9DQXhOa2d4TjFZeE4wZ3hPRll4TmxwTk1UZ2dNalJJTVRkV01qVklNVGhXTWpSYVRUSTBJREU0U0RJMVZqRTNTREkwVmpFNFdrMHhPQ0F4T0ZZeE4wZ3hOMVl4T0VneE9GcE5NVFlnTWpSV01qVklNVGRXTWpSSU1UWmFUVEV3SURFNFZqRTNTRGxXTVRoSU1UQmFUVEUySURFNFNERTNWakUzU0RFMlZqRTRXazB4TUNBeE5rZzVWakUzU0RFd1ZqRTJXazB4TmlBeE1FZ3hOMVk1U0RFMlZqRXdXazB4TmlBeE5sWXhOMGd4TjFZeE5rZ3hObHBOTWpNZ09VZ3hPRll4TVVneU0xWTVXazB5TlNBeE1VTXlOU0E1TGpnNU5UUXpJREkwTGpFd05EWWdPU0F5TXlBNVZqRXhTREkxV2sweU5TQXhObFl4TVVneU0xWXhOa2d5TlZwTk1qUWdNVFZJTVRoV01UZElNalJXTVRWYVRURTVJREUyVmpFd1NERTNWakUyU0RFNVdrMHhPQ0EzU0RFMlZqbElNVGhXTjFwTk1qTWdOMGd4T0ZZNVNESXpWamRhVFRJM0lERXhRekkzSURndU56a3dPRFlnTWpVdU1qQTVNU0EzSURJeklEZFdPVU15TkM0eE1EUTJJRGtnTWpVZ09TNDRPVFUwTXlBeU5TQXhNVWd5TjFwTk1qY2dNak5XTVRGSU1qVldNak5JTWpkYVRUSXpJREkzUXpJMUxqSXdPVEVnTWpjZ01qY2dNalV1TWpBNU1TQXlOeUF5TTBneU5VTXlOU0F5TkM0eE1EUTJJREkwTGpFd05EWWdNalVnTWpNZ01qVldNamRhVFRFNElESTNTREl6VmpJMVNERTRWakkzV2sweE5pQXlOMGd4T0ZZeU5VZ3hObFl5TjFwTk1URWdNamRJTVRaV01qVklNVEZXTWpkYVRUY2dNak5ETnlBeU5TNHlNRGt4SURndU56a3dPRFlnTWpjZ01URWdNamRXTWpWRE9TNDRPVFUwTXlBeU5TQTVJREkwTGpFd05EWWdPU0F5TTBnM1drMDNJREV4VmpJelNEbFdNVEZJTjFwTk1URWdOME00TGpjNU1EZzJJRGNnTnlBNExqYzVNRGcySURjZ01URklPVU01SURrdU9EazFORE1nT1M0NE9UVTBNeUE1SURFeElEbFdOMXBOTVRZZ04wZ3hNVlk1U0RFMlZqZGFUVEU0SURJMVNESXpWakl6U0RFNFZqSTFXazB5TXlBeU5VTXlOQzR4TURRMklESTFJREkxSURJMExqRXdORFlnTWpVZ01qTklNak5XTWpWYVRUSTFJREl6VmpFNFNESXpWakl6U0RJMVdrMHhPQ0F4T1VneU5GWXhOMGd4T0ZZeE9WcE5NVGtnTWpSV01UaElNVGRXTWpSSU1UbGFUVEV4SURJMVNERTJWakl6U0RFeFZqSTFXazA1SURJelF6a2dNalF1TVRBME5pQTVMamc1TlRReklESTFJREV4SURJMVZqSXpTREV4U0RsYVRUa2dNVGhXTWpOSU1URldNVGhJT1ZwTk1UQWdNVGxJTVRaV01UZElNVEJXTVRsYVRURTFJREU0VmpJMFNERTNWakU0U0RFMVdrMDVJREV4VmpFMlNERXhWakV4U0RsYVRURXhJRGxET1M0NE9UVTBNeUE1SURrZ09TNDRPVFUwTXlBNUlERXhTREV4VmpFeFZqbGFUVEUySURsSU1URldNVEZJTVRaV09WcE5NVFVnTVRCV01UWklNVGRXTVRCSU1UVmFUVEUySURFMVNERXdWakUzU0RFMlZqRTFXaUlnWm1sc2JEMGlJek5FT1VSR1JpSWdiV0Z6YXowaWRYSnNLQ053WVhSb0xUSXRhVzV6YVdSbExURmZOVEF4WHpZd05qWXBJaTgrQ2p4eVpXTjBJSGc5SWpJd0lpQjVQU0kxSWlCM2FXUjBhRDBpT1NJZ2FHVnBaMmgwUFNJNUlpQm1hV3hzUFNJak1qRXlSVE5FSWk4K0NqeHRZWE5ySUdsa1BTSndZWFJvTFRVdGFXNXphV1JsTFRKZk5UQXhYell3TmpZaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHlOQ0F4TVM0MVF6STBJREV4TGpjM05qRWdNalF1TWpJek9TQXhNaUF5TkM0MUlERXlTREkxTGpWRE1qVXVOemMyTVNBeE1pQXlOaUF4TVM0M056WXhJREkySURFeExqVldNVEJJTWpjdU5VTXlOeTQzTnpZeElERXdJREk0SURrdU56YzJNVFFnTWpnZ09TNDFWamd1TlVNeU9DQTRMakl5TXpnMklESTNMamMzTmpFZ09DQXlOeTQxSURoSU1qWldOaTQxUXpJMklEWXVNakl6T0RZZ01qVXVOemMyTVNBMklESTFMalVnTmtneU5DNDFRekkwTGpJeU16a2dOaUF5TkNBMkxqSXlNemcySURJMElEWXVOVlk0U0RJeUxqVkRNakl1TWpJek9TQTRJREl5SURndU1qSXpPRFlnTWpJZ09DNDFWamt1TlVNeU1pQTVMamMzTmpFMElESXlMakl5TXprZ01UQWdNakl1TlNBeE1FZ3lORll4TVM0MVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1qUWdNVEV1TlVNeU5DQXhNUzQzTnpZeElESTBMakl5TXprZ01USWdNalF1TlNBeE1rZ3lOUzQxUXpJMUxqYzNOakVnTVRJZ01qWWdNVEV1TnpjMk1TQXlOaUF4TVM0MVZqRXdTREkzTGpWRE1qY3VOemMyTVNBeE1DQXlPQ0E1TGpjM05qRTBJREk0SURrdU5WWTRMalZETWpnZ09DNHlNak00TmlBeU55NDNOell4SURnZ01qY3VOU0E0U0RJMlZqWXVOVU15TmlBMkxqSXlNemcySURJMUxqYzNOakVnTmlBeU5TNDFJRFpJTWpRdU5VTXlOQzR5TWpNNUlEWWdNalFnTmk0eU1qTTROaUF5TkNBMkxqVldPRWd5TWk0MVF6SXlMakl5TXprZ09DQXlNaUE0TGpJeU16ZzJJREl5SURndU5WWTVMalZETWpJZ09TNDNOell4TkNBeU1pNHlNak01SURFd0lESXlMalVnTVRCSU1qUldNVEV1TlZvaUlHWnBiR3c5SWlNelJEbEVSa1lpTHo0S1BIQmhkR2dnWkQwaVRUSTJJREV3VmpsSU1qVldNVEJJTWpaYVRUSTJJRGhJTWpWV09VZ3lObFk0V2sweU5DQTRWamxJTWpWV09FZ3lORnBOTWpRZ01UQklNalZXT1VneU5GWXhNRnBOTWpRdU5TQXhNVU15TkM0M056WXhJREV4SURJMUlERXhMakl5TXprZ01qVWdNVEV1TlVneU0wTXlNeUF4TWk0ek1qZzBJREl6TGpZM01UWWdNVE1nTWpRdU5TQXhNMVl4TVZwTk1qVXVOU0F4TVVneU5DNDFWakV6U0RJMUxqVldNVEZhVFRJMUlERXhMalZETWpVZ01URXVNakl6T1NBeU5TNHlNak01SURFeElESTFMalVnTVRGV01UTkRNall1TXpJNE5DQXhNeUF5TnlBeE1pNHpNamcwSURJM0lERXhMalZJTWpWYVRUSTFJREV3VmpFeExqVklNamRXTVRCSU1qVmFUVEkzTGpVZ09VZ3lObFl4TVVneU55NDFWamxhVFRJM0lEa3VOVU15TnlBNUxqSXlNemcySURJM0xqSXlNemtnT1NBeU55NDFJRGxXTVRGRE1qZ3VNekk0TkNBeE1TQXlPU0F4TUM0ek1qZzBJREk1SURrdU5VZ3lOMXBOTWpjZ09DNDFWamt1TlVneU9WWTRMalZJTWpkYVRUSTNMalVnT1VNeU55NHlNak01SURrZ01qY2dPQzQzTnpZeE5DQXlOeUE0TGpWSU1qbERNamtnTnk0Mk56RTFOeUF5T0M0ek1qZzBJRGNnTWpjdU5TQTNWamxhVFRJMklEbElNamN1TlZZM1NESTJWamxhVFRJMUlEWXVOVlk0U0RJM1ZqWXVOVWd5TlZwTk1qVXVOU0EzUXpJMUxqSXlNemtnTnlBeU5TQTJMamMzTmpFMElESTFJRFl1TlVneU4wTXlOeUExTGpZM01UVTNJREkyTGpNeU9EUWdOU0F5TlM0MUlEVldOMXBOTWpRdU5TQTNTREkxTGpWV05VZ3lOQzQxVmpkYVRUSTFJRFl1TlVNeU5TQTJMamMzTmpFMElESTBMamMzTmpFZ055QXlOQzQxSURkV05VTXlNeTQyTnpFMklEVWdNak1nTlM0Mk56RTFOeUF5TXlBMkxqVklNalZhVFRJMUlEaFdOaTQxU0RJelZqaElNalZhVFRJeUxqVWdPVWd5TkZZM1NESXlMalZXT1ZwTk1qTWdPQzQxUXpJeklEZ3VOemMyTVRRZ01qSXVOemMyTVNBNUlESXlMalVnT1ZZM1F6SXhMalkzTVRZZ055QXlNU0EzTGpZM01UVTNJREl4SURndU5VZ3lNMXBOTWpNZ09TNDFWamd1TlVneU1WWTVMalZJTWpOYVRUSXlMalVnT1VNeU1pNDNOell4SURrZ01qTWdPUzR5TWpNNE5pQXlNeUE1TGpWSU1qRkRNakVnTVRBdU16STROQ0F5TVM0Mk56RTJJREV4SURJeUxqVWdNVEZXT1ZwTk1qUWdPVWd5TWk0MVZqRXhTREkwVmpsYVRUSTFJREV4TGpWV01UQklNak5XTVRFdU5VZ3lOVm9pSUdacGJHdzlJaU16UkRsRVJrWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMDFMV2x1YzJsa1pTMHlYelV3TVY4Mk1EWTJLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTXhSak15TkRjaUx6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE1pQXhOME14TWlBeE5DNHlNemcySURFMExqSXpPRFlnTVRJZ01UY2dNVEpXTVRkV01qSkRNVFF1TWpNNE5pQXlNaUF4TWlBeE9TNDNOakUwSURFeUlERTNXazB4TnlBeE1FTXhNeTR4TXpRZ01UQWdNVEFnTVRNdU1UTTBJREV3SURFM1F6RXdJREl3TGpnMk5pQXhNeTR4TXpRZ01qUWdNVGNnTWpSRE1qQXVPRFkySURJMElESTBJREl3TGpnMk5pQXlOQ0F4TjBNeU5DQXhNeTR4TXpRZ01qQXVPRFkySURFd0lERTNJREV3V2lJZ1ptbHNiRDBpSXpORU9VUkdSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UY2dOUzR3T0RNek5GWTNMakkxSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHhOeUF5Tmk0M05WWXlPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJRGd1TlRjeE5qZE1NVEF1TVRFZ01UQXVNVEVpSUhOMGNtOXJaVDBpSXpORU9VUkdSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURJekxqZzVUREkxTGpReU9ETWdNalV1TkRJNE15SWdjM1J5YjJ0bFBTSWpNMFE1UkVaR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284Y0dGMGFDQmtQU0pOTlM0d09ETXpOQ0F4TjBnM0xqSTFJaUJ6ZEhKdmEyVTlJaU16UkRsRVJrWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweU5pNDNOU0F4TjBneU9DNDVNVFkzSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lESTFMalF5T0ROTU1UQXVNVEVnTWpNdU9Ea2lJSE4wY205clpUMGlJek5FT1VSR1JpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREV3TGpFeFRESTFMalF5T0RNZ09DNDFOekUyTnlJZ2MzUnliMnRsUFNJak0wUTVSRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU5GUmtZNFJrWWlMejRLUEdOcGNtTnNaU0JqZUQwaU1UWXVOU0lnWTNrOUlqRTJMalVpSUhJOUlqa3VOU0lnYzNSeWIydGxQU0lqTUVNM05FUkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNeTFwYm5OcFpHVXRNVjgxTUROZk5UWXhOU0lnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFMExqWTRNaUF5TUM0ME16SkRNVFF1T0RjM01pQXlNQzQyTWpjeUlERTFMakU1TXpnZ01qQXVOakkzTWlBeE5TNHpPRGt4SURJd0xqUXpNa3d4Tmk0d09UWXlJREU1TGpjeU5EbE1NakV1TmpVMU15QXhOQzR4TmpVM1F6SXhMamcxTURZZ01UTXVPVGN3TlNBeU1TNDROVEEySURFekxqWTFNemtnTWpFdU5qVTFNeUF4TXk0ME5UZzJUREl3TGprME9ESWdNVEl1TnpVeE5VTXlNQzQzTlRNZ01USXVOVFUyTXlBeU1DNDBNelkwSURFeUxqVTFOak1nTWpBdU1qUXhNU0F4TWk0M05URTFUREUxTGpBek5UVWdNVGN1T1RVM01Vd3hNeTR5TmpjNElERTJMakU0T1RORE1UTXVNRGN5TlNBeE5TNDVPVFF4SURFeUxqYzFOVGtnTVRVdU9UazBNU0F4TWk0MU5qQTNJREUyTGpFNE9UTk1NVEV1T0RVek5pQXhOaTQ0T1RZMFF6RXhMalkxT0RNZ01UY3VNRGt4TnlBeE1TNDJOVGd6SURFM0xqUXdPRE1nTVRFdU9EVXpOaUF4Tnk0Mk1ETTJUREV6TGprM05Ea2dNVGt1TnpJME9Vd3hOQzQyT0RJZ01qQXVORE15V2lJdlBnbzhMMjFoYzJzK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTVRRdU5qZ3lJREl3TGpRek1rTXhOQzQ0TnpjeUlESXdMall5TnpJZ01UVXVNVGt6T0NBeU1DNDJNamN5SURFMUxqTTRPVEVnTWpBdU5ETXlUREUyTGpBNU5qSWdNVGt1TnpJME9Vd3lNUzQyTlRVeklERTBMakUyTlRkRE1qRXVPRFV3TmlBeE15NDVOekExSURJeExqZzFNRFlnTVRNdU5qVXpPU0F5TVM0Mk5UVXpJREV6TGpRMU9EWk1NakF1T1RRNE1pQXhNaTQzTlRFMVF6SXdMamMxTXlBeE1pNDFOVFl6SURJd0xqUXpOalFnTVRJdU5UVTJNeUF5TUM0eU5ERXhJREV5TGpjMU1UVk1NVFV1TURNMU5TQXhOeTQ1TlRjeFRERXpMakkyTnpnZ01UWXVNVGc1TTBNeE15NHdOekkxSURFMUxqazVOREVnTVRJdU56VTFPU0F4TlM0NU9UUXhJREV5TGpVMk1EY2dNVFl1TVRnNU0wd3hNUzQ0TlRNMklERTJMamc1TmpSRE1URXVOalU0TXlBeE55NHdPVEUzSURFeExqWTFPRE1nTVRjdU5EQTRNeUF4TVM0NE5UTTJJREUzTGpZd016Wk1NVE11T1RjME9TQXhPUzQzTWpRNVRERTBMalk0TWlBeU1DNDBNekphSWlCbWFXeHNQU0lqTUVNM05FUkdJaTgrQ2p4d1lYUm9JR1E5SWsweE5TNHdNelUxSURFM0xqazFOekZNTVRRdU16STROQ0F4T0M0Mk5qUXlUREUxTGpBek5UVWdNVGt1TXpjeE0wd3hOUzQzTkRJMklERTRMalkyTkRKTU1UVXVNRE0xTlNBeE55NDVOVGN4V2sweE5DNDJPRElnTVRrdU56STBPVU14TkM0NE56Y3lJREU1TGpVeU9UWWdNVFV1TVRrek9DQXhPUzQxTWprMklERTFMak00T1RFZ01Ua3VOekkwT1V3eE15NDVOelE1SURJeExqRXpPVEZETVRRdU5UWXdOeUF5TVM0M01qUTVJREUxTGpVeE1EUWdNakV1TnpJME9TQXhOaTR3T1RZeUlESXhMakV6T1RGTU1UUXVOamd5SURFNUxqY3lORGxhVFRFMUxqTTRPVEVnTVRrdU1ERTNPRXd4TkM0Mk9ESWdNVGt1TnpJME9Vd3hOaTR3T1RZeUlESXhMakV6T1RGTU1UWXVPREF6TXlBeU1DNDBNekpNTVRVdU16ZzVNU0F4T1M0d01UYzRXazB5TUM0NU5EZ3lJREV6TGpRMU9EWk1NVFV1TXpnNU1TQXhPUzR3TVRjNFRERTJMamd3TXpNZ01qQXVORE15VERJeUxqTTJNalFnTVRRdU9EY3lPRXd5TUM0NU5EZ3lJREV6TGpRMU9EWmFUVEl3TGprME9ESWdNVFF1TVRZMU4wTXlNQzQzTlRNZ01UTXVPVGN3TlNBeU1DNDNOVE1nTVRNdU5qVXpPU0F5TUM0NU5EZ3lJREV6TGpRMU9EWk1Nakl1TXpZeU5DQXhOQzQ0TnpJNFF6SXlMamswT0RJZ01UUXVNamczTVNBeU1pNDVORGd5SURFekxqTXpOek1nTWpJdU16WXlOQ0F4TWk0M05URTFUREl3TGprME9ESWdNVFF1TVRZMU4xcE5NakF1TWpReE1TQXhNeTQwTlRnMlRESXdMamswT0RJZ01UUXVNVFkxTjB3eU1pNHpOakkwSURFeUxqYzFNVFZNTWpFdU5qVTFNeUF4TWk0d05EUTBUREl3TGpJME1URWdNVE11TkRVNE5scE5NakF1T1RRNE1pQXhNeTQwTlRnMlF6SXdMamMxTXlBeE15NDJOVE01SURJd0xqUXpOalFnTVRNdU5qVXpPU0F5TUM0eU5ERXhJREV6TGpRMU9EWk1NakV1TmpVMU15QXhNaTR3TkRRMFF6SXhMakEyT1RVZ01URXVORFU0TmlBeU1DNHhNVGs0SURFeExqUTFPRFlnTVRrdU5UTTBJREV5TGpBME5EUk1NakF1T1RRNE1pQXhNeTQwTlRnMldrMHhOUzQzTkRJMklERTRMalkyTkRKTU1qQXVPVFE0TWlBeE15NDBOVGcyVERFNUxqVXpOQ0F4TWk0d05EUTBUREUwTGpNeU9EUWdNVGN1TWpWTU1UVXVOelF5TmlBeE9DNDJOalF5V2sweE1pNDFOakEzSURFMkxqZzVOalJNTVRRdU16STROQ0F4T0M0Mk5qUXlUREUxTGpjME1qWWdNVGN1TWpWTU1UTXVPVGMwT1NBeE5TNDBPREl5VERFeUxqVTJNRGNnTVRZdU9EazJORnBOTVRNdU1qWTNPQ0F4Tmk0NE9UWTBRekV6TGpBM01qVWdNVGN1TURreE55QXhNaTQzTlRVNUlERTNMakE1TVRjZ01USXVOVFl3TnlBeE5pNDRPVFkwVERFekxqazNORGtnTVRVdU5EZ3lNa014TXk0ek9Ea3hJREUwTGpnNU5qUWdNVEl1TkRNNU15QXhOQzQ0T1RZMElERXhMamcxTXpZZ01UVXVORGd5TWt3eE15NHlOamM0SURFMkxqZzVOalJhVFRFeUxqVTJNRGNnTVRjdU5qQXpOa3d4TXk0eU5qYzRJREUyTGpnNU5qUk1NVEV1T0RVek5pQXhOUzQwT0RJeVRERXhMakUwTmpRZ01UWXVNVGc1TTB3eE1pNDFOakEzSURFM0xqWXdNelphVFRFeUxqVTJNRGNnTVRZdU9EazJORU14TWk0M05UVTVJREUzTGpBNU1UY2dNVEl1TnpVMU9TQXhOeTQwTURneklERXlMalUyTURjZ01UY3VOakF6Tmt3eE1TNHhORFkwSURFMkxqRTRPVE5ETVRBdU5UWXdOeUF4Tmk0M056VXhJREV3TGpVMk1EY2dNVGN1TnpJME9TQXhNUzR4TkRZMElERTRMak14TURkTU1USXVOVFl3TnlBeE5pNDRPVFkwV2sweE5DNDJPRElnTVRrdU1ERTNPRXd4TWk0MU5qQTNJREUyTGpnNU5qUk1NVEV1TVRRMk5DQXhPQzR6TVRBM1RERXpMakkyTnpnZ01qQXVORE15VERFMExqWTRNaUF4T1M0d01UYzRXazB4TlM0ek9Ea3hJREU1TGpjeU5EbE1NVFF1TmpneUlERTVMakF4TnpoTU1UTXVNalkzT0NBeU1DNDBNekpNTVRNdU9UYzBPU0F5TVM0eE16a3hUREUxTGpNNE9URWdNVGt1TnpJME9Wb2lJR1pwYkd3OUlpTXdRemMwUkVZaUlHMWhjMnM5SW5WeWJDZ2pjR0YwYUMwekxXbHVjMmxrWlMweFh6VXdNMTgxTmpFMUtTSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRVaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5TQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB3SURjdU5VTXdJRE11TkNBekxqUWdNQ0EzTGpVZ01FTXhNUzQySURBZ01UVWdNeTQwSURFMUlEY3VOVU14TlNBeE1TNDJJREV4TGpZZ01UVWdOeTQxSURFMVF6TXVOQ0F4TlNBd0lERXhMallnTUNBM0xqVmFUVEVnTnk0MVF6RWdNVEV1TVNBekxqa2dNVFFnTnk0MUlERTBRekV4TGpFZ01UUWdNVFFnTVRFdU1TQXhOQ0EzTGpWRE1UUWdNeTQ1SURFeExqRWdNU0EzTGpVZ01VTXpMamtnTVNBeElETXVPU0F4SURjdU5WcE5PQ0F4TVZZeE1rZzNWakV4U0RoYVRUVWdOUzQxUXpVZ05DNHhJRFl1TVNBeklEY3VOU0F6UXpndU9TQXpJREV3SURRdU1TQXhNQ0ExTGpWRE1UQWdOaTQzTWpnd01pQTVMak00TkRRNElEY3VNVGcyTmpNZ09DNDRPVFU0TVNBM0xqVTFNRGN6UXpndU9ESTNNemNnTnk0Mk1ERTNNaUE0TGpjMk1UUXlJRGN1TmpVd09EWWdPQzQzSURjdU4wTTRMalkzTmpZeklEY3VOekUwTURJZ09DNDJOVE01TVNBM0xqY3lOell4SURndU5qTXhPRFFnTnk0M05EQTRNVU00TGpFNE1UYzBJRGd1TURFZ09DQTRMakV4T0RjZ09DQTRMalZXT1ZZeE1FZzNWamxXT0M0MVF6Y2dOeTQxT1RVME5DQTNMalUzTWpjMUlEY3VNVGd4T0RJZ055NDVOemd4TkNBMkxqZzRPVEEzUXpndU1ESXdPVEVnTmk0NE5UZ3hPQ0E0TGpBMk1UZ3lJRFl1T0RJNE5qTWdPQzR4SURZdU9FTTRMakV5TWprM0lEWXVOemcyTWpJZ09DNHhORFUzTWlBMkxqYzNNalkxSURndU1UWTRNalFnTmk0M05Ua3lNa000TGpZek5Ua2dOaTQwT0RBek5pQTVJRFl1TWpZek1qVWdPU0ExTGpWRE9TQTBMamNnT0M0eklEUWdOeTQxSURSRE5pNDNJRFFnTmlBMExqY2dOaUExTGpWV05rZzFWalV1TlZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdlRDBpTUM0MUlpQjVQU0l3TGpVaUlIZHBaSFJvUFNJNUlpQm9aV2xuYUhROUlqa2lJSE4wY205clpUMGlZbXhoWTJzaUx6NEtQSEpsWTNRZ2VEMGlOQzQxSWlCNVBTSTBMalVpSUhkcFpIUm9QU0k1SWlCb1pXbG5hSFE5SWpraUlITjBjbTlyWlQwaVlteGhZMnNpTHo0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEdOcGNtTnNaU0JqZUQwaU55SWdZM2s5SWpjaUlISTlJall1TlNJZ2MzUnliMnRsUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQR3hwYm1VZ2VURTlJall1TlNJZ2VESTlJakUwSWlCNU1qMGlOaTQxSWlCemRISnZhMlU5SW1Kc1lXTnJJaTgrQ2p3dmMzWm5QZ289XCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQR2NnWTJ4cGNDMXdZWFJvUFNKMWNtd29JMk5zYVhBd1h6SXdNRjgwTmpBNEtTSStDanh3WVhSb0lHUTlJazB3TGprek56Z3lNaUF4TWk0MVREY2dNa3d4TXk0d05qSXlJREV5TGpWSU1DNDVNemM0TWpKYUlpQnpkSEp2YTJVOUltSnNZV05ySWk4K0Nqd3ZaejRLUEdSbFpuTStDanhqYkdsd1VHRjBhQ0JwWkQwaVkyeHBjREJmTWpBd1h6UTJNRGdpUGdvOGNtVmpkQ0IzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlHWnBiR3c5SW5kb2FYUmxJaTgrQ2p3dlkyeHBjRkJoZEdnK0Nqd3ZaR1ZtY3o0S1BDOXpkbWMrQ2c9PVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRFeUlESklNbFl4TWtneE1sWXlXaUlnYzNSeWIydGxQU0ppYkdGamF5SXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJakUwSWlCb1pXbG5hSFE5SWpFMElpQm1hV3hzUFNKM2FHbDBaU0l2UGdvOGNHRjBhQ0JrUFNKTk1pQXlTREV5VmpWSU1URldNMGczTGpWV01URklPVll4TWtnMVZqRXhTRFl1TlZZelNETldOVWd5VmpKYUlpQm1hV3hzUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UTWlJR2hsYVdkb2REMGlNeUlnZG1sbGQwSnZlRDBpTUNBd0lERXpJRE1pSUdacGJHdzlJbTV2Ym1VaUlIaHRiRzV6UFNKb2RIUndPaTh2ZDNkM0xuY3pMbTl5Wnk4eU1EQXdMM04yWnlJK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTXlBeExqSTFRek1nTVM0NU5EQXpOaUF5TGpRME1ETTJJREl1TlNBeExqYzFJREl1TlVNeExqQTFPVFkwSURJdU5TQXdMalVnTVM0NU5EQXpOaUF3TGpVZ01TNHlOVU13TGpVZ01DNDFOVGsyTkRRZ01TNHdOVGsyTkNBd0lERXVOelVnTUVNeUxqUTBNRE0ySURBZ015QXdMalUxT1RZME5DQXpJREV1TWpWYVRUZ2dNUzR5TlVNNElERXVPVFF3TXpZZ055NDBOREF6TmlBeUxqVWdOaTQzTlNBeUxqVkROaTR3TlRrMk5DQXlMalVnTlM0MUlERXVPVFF3TXpZZ05TNDFJREV1TWpWRE5TNDFJREF1TlRVNU5qUTBJRFl1TURVNU5qUWdNQ0EyTGpjMUlEQkROeTQwTkRBek5pQXdJRGdnTUM0MU5UazJORFFnT0NBeExqSTFXazB4TVM0M05TQXlMalZETVRJdU5EUXdOQ0F5TGpVZ01UTWdNUzQ1TkRBek5pQXhNeUF4TGpJMVF6RXpJREF1TlRVNU5qUTBJREV5TGpRME1EUWdNQ0F4TVM0M05TQXdRekV4TGpBMU9UWWdNQ0F4TUM0MUlEQXVOVFU1TmpRMElERXdMalVnTVM0eU5VTXhNQzQxSURFdU9UUXdNellnTVRFdU1EVTVOaUF5TGpVZ01URXVOelVnTWk0MVdpSWdabWxzYkQwaUl6VTFOakEyTUNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU5GUmtZNFJrWWlMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNaTFwYm5OcFpHVXRNVjgxTURGZk5qQTJOaUlnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFNElERXdTREl6UXpJekxqVTFNak1nTVRBZ01qUWdNVEF1TkRRM055QXlOQ0F4TVZZeE5rZ3hPRll4TUZwTk1UWWdPRWd4T0VneU0wTXlOQzQyTlRZNUlEZ2dNallnT1M0ek5ETXhOU0F5TmlBeE1WWXlNME15TmlBeU5DNDJOVFk1SURJMExqWTFOamtnTWpZZ01qTWdNalpJTVRoSU1UWklNVEZET1M0ek5ETXhOU0F5TmlBNElESTBMalkxTmprZ09DQXlNMVl4TVVNNElEa3VNelF6TVRVZ09TNHpORE14TlNBNElERXhJRGhJTVRaYVRURTRJREkwU0RJelF6SXpMalUxTWpNZ01qUWdNalFnTWpNdU5UVXlNeUF5TkNBeU0xWXhPRWd4T0ZZeU5GcE5NVFlnTWpSSU1URkRNVEF1TkRRM055QXlOQ0F4TUNBeU15NDFOVEl6SURFd0lESXpWakU0U0RFMlZqSTBXazB4TUNBeE5sWXhNVU14TUNBeE1DNDBORGMzSURFd0xqUTBOemNnTVRBZ01URWdNVEJJTVRaV01UWklNVEJhSWk4K0Nqd3ZiV0Z6YXo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB4T0NBeE1FZ3lNME15TXk0MU5USXpJREV3SURJMElERXdMalEwTnpjZ01qUWdNVEZXTVRaSU1UaFdNVEJhVFRFMklEaElNVGhJTWpORE1qUXVOalUyT1NBNElESTJJRGt1TXpRek1UVWdNallnTVRGV01qTkRNallnTWpRdU5qVTJPU0F5TkM0Mk5UWTVJREkySURJeklESTJTREU0U0RFMlNERXhRemt1TXpRek1UVWdNallnT0NBeU5DNDJOVFk1SURnZ01qTldNVEZET0NBNUxqTTBNekUxSURrdU16UXpNVFVnT0NBeE1TQTRTREUyV2sweE9DQXlORWd5TTBNeU15NDFOVEl6SURJMElESTBJREl6TGpVMU1qTWdNalFnTWpOV01UaElNVGhXTWpSYVRURTJJREkwU0RFeFF6RXdMalEwTnpjZ01qUWdNVEFnTWpNdU5UVXlNeUF4TUNBeU0xWXhPRWd4TmxZeU5GcE5NVEFnTVRaV01URkRNVEFnTVRBdU5EUTNOeUF4TUM0ME5EYzNJREV3SURFeElERXdTREUyVmpFMlNERXdXaUlnWm1sc2JEMGlkMmhwZEdVaUx6NEtQSEJoZEdnZ1pEMGlUVEU0SURFd1ZqbElNVGRXTVRCSU1UaGFUVEkwSURFMlZqRTNTREkxVmpFMlNESTBXazB4T0NBeE5rZ3hOMVl4TjBneE9GWXhObHBOTVRnZ01qUklNVGRXTWpWSU1UaFdNalJhVFRJMElERTRTREkxVmpFM1NESTBWakU0V2sweE9DQXhPRll4TjBneE4xWXhPRWd4T0ZwTk1UWWdNalJXTWpWSU1UZFdNalJJTVRaYVRURXdJREU0VmpFM1NEbFdNVGhJTVRCYVRURTJJREU0U0RFM1ZqRTNTREUyVmpFNFdrMHhNQ0F4TmtnNVZqRTNTREV3VmpFMldrMHhOaUF4TUVneE4xWTVTREUyVmpFd1drMHhOaUF4TmxZeE4wZ3hOMVl4TmtneE5scE5Nak1nT1VneE9GWXhNVWd5TTFZNVdrMHlOU0F4TVVNeU5TQTVMamc1TlRReklESTBMakV3TkRZZ09TQXlNeUE1VmpFeFNESTFXazB5TlNBeE5sWXhNVWd5TTFZeE5rZ3lOVnBOTWpRZ01UVklNVGhXTVRkSU1qUldNVFZhVFRFNUlERTJWakV3U0RFM1ZqRTJTREU1V2sweE9DQTNTREUyVmpsSU1UaFdOMXBOTWpNZ04wZ3hPRlk1U0RJelZqZGFUVEkzSURFeFF6STNJRGd1Tnprd09EWWdNalV1TWpBNU1TQTNJREl6SURkV09VTXlOQzR4TURRMklEa2dNalVnT1M0NE9UVTBNeUF5TlNBeE1VZ3lOMXBOTWpjZ01qTldNVEZJTWpWV01qTklNamRhVFRJeklESTNRekkxTGpJd09URWdNamNnTWpjZ01qVXVNakE1TVNBeU55QXlNMGd5TlVNeU5TQXlOQzR4TURRMklESTBMakV3TkRZZ01qVWdNak1nTWpWV01qZGFUVEU0SURJM1NESXpWakkxU0RFNFZqSTNXazB4TmlBeU4wZ3hPRll5TlVneE5sWXlOMXBOTVRFZ01qZElNVFpXTWpWSU1URldNamRhVFRjZ01qTkROeUF5TlM0eU1Ea3hJRGd1Tnprd09EWWdNamNnTVRFZ01qZFdNalZET1M0NE9UVTBNeUF5TlNBNUlESTBMakV3TkRZZ09TQXlNMGczV2swM0lERXhWakl6U0RsV01URklOMXBOTVRFZ04wTTRMamM1TURnMklEY2dOeUE0TGpjNU1EZzJJRGNnTVRGSU9VTTVJRGt1T0RrMU5ETWdPUzQ0T1RVME15QTVJREV4SURsV04xcE5NVFlnTjBneE1WWTVTREUyVmpkYVRURTRJREkxU0RJelZqSXpTREU0VmpJMVdrMHlNeUF5TlVNeU5DNHhNRFEySURJMUlESTFJREkwTGpFd05EWWdNalVnTWpOSU1qTldNalZhVFRJMUlESXpWakU0U0RJelZqSXpTREkxV2sweE9DQXhPVWd5TkZZeE4wZ3hPRll4T1ZwTk1Ua2dNalJXTVRoSU1UZFdNalJJTVRsYVRURXhJREkxU0RFMlZqSXpTREV4VmpJMVdrMDVJREl6UXprZ01qUXVNVEEwTmlBNUxqZzVOVFF6SURJMUlERXhJREkxVmpJelNERXhTRGxhVFRrZ01UaFdNak5JTVRGV01UaElPVnBOTVRBZ01UbElNVFpXTVRkSU1UQldNVGxhVFRFMUlERTRWakkwU0RFM1ZqRTRTREUxV2swNUlERXhWakUyU0RFeFZqRXhTRGxhVFRFeElEbERPUzQ0T1RVME15QTVJRGtnT1M0NE9UVTBNeUE1SURFeFNERXhWakV4VmpsYVRURTJJRGxJTVRGV01URklNVFpXT1ZwTk1UVWdNVEJXTVRaSU1UZFdNVEJJTVRWYVRURTJJREUxU0RFd1ZqRTNTREUyVmpFMVdpSWdabWxzYkQwaUl6QkROelJFUmlJZ2JXRnphejBpZFhKc0tDTndZWFJvTFRJdGFXNXphV1JsTFRGZk5UQXhYell3TmpZcElpOCtDanh5WldOMElIZzlJakl3SWlCNVBTSTFJaUIzYVdSMGFEMGlPU0lnYUdWcFoyaDBQU0k1SWlCbWFXeHNQU0lqUlVaR09FWkdJaTgrQ2p4dFlYTnJJR2xrUFNKd1lYUm9MVFV0YVc1emFXUmxMVEpmTlRBeFh6WXdOallpSUdacGJHdzlJbmRvYVhSbElqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweU5DQXhNUzQxUXpJMElERXhMamMzTmpFZ01qUXVNakl6T1NBeE1pQXlOQzQxSURFeVNESTFMalZETWpVdU56YzJNU0F4TWlBeU5pQXhNUzQzTnpZeElESTJJREV4TGpWV01UQklNamN1TlVNeU55NDNOell4SURFd0lESTRJRGt1TnpjMk1UUWdNamdnT1M0MVZqZ3VOVU15T0NBNExqSXlNemcySURJM0xqYzNOakVnT0NBeU55NDFJRGhJTWpaV05pNDFRekkySURZdU1qSXpPRFlnTWpVdU56YzJNU0EySURJMUxqVWdOa2d5TkM0MVF6STBMakl5TXprZ05pQXlOQ0EyTGpJeU16ZzJJREkwSURZdU5WWTRTREl5TGpWRE1qSXVNakl6T1NBNElESXlJRGd1TWpJek9EWWdNaklnT0M0MVZqa3VOVU15TWlBNUxqYzNOakUwSURJeUxqSXlNemtnTVRBZ01qSXVOU0F4TUVneU5GWXhNUzQxV2lJdlBnbzhMMjFoYzJzK0NqeHdZWFJvSUdacGJHd3RjblZzWlQwaVpYWmxibTlrWkNJZ1kyeHBjQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmtQU0pOTWpRZ01URXVOVU15TkNBeE1TNDNOell4SURJMExqSXlNemtnTVRJZ01qUXVOU0F4TWtneU5TNDFRekkxTGpjM05qRWdNVElnTWpZZ01URXVOemMyTVNBeU5pQXhNUzQxVmpFd1NESTNMalZETWpjdU56YzJNU0F4TUNBeU9DQTVMamMzTmpFMElESTRJRGt1TlZZNExqVkRNamdnT0M0eU1qTTROaUF5Tnk0M056WXhJRGdnTWpjdU5TQTRTREkyVmpZdU5VTXlOaUEyTGpJeU16ZzJJREkxTGpjM05qRWdOaUF5TlM0MUlEWklNalF1TlVNeU5DNHlNak01SURZZ01qUWdOaTR5TWpNNE5pQXlOQ0EyTGpWV09FZ3lNaTQxUXpJeUxqSXlNemtnT0NBeU1pQTRMakl5TXpnMklESXlJRGd1TlZZNUxqVkRNaklnT1M0M056WXhOQ0F5TWk0eU1qTTVJREV3SURJeUxqVWdNVEJJTWpSV01URXVOVm9pSUdacGJHdzlJaU13UXpjMFJFWWlMejRLUEhCaGRHZ2daRDBpVFRJMklERXdWamxJTWpWV01UQklNalphVFRJMklEaElNalZXT1VneU5sWTRXazB5TkNBNFZqbElNalZXT0VneU5GcE5NalFnTVRCSU1qVldPVWd5TkZZeE1GcE5NalF1TlNBeE1VTXlOQzQzTnpZeElERXhJREkxSURFeExqSXlNemtnTWpVZ01URXVOVWd5TTBNeU15QXhNaTR6TWpnMElESXpMalkzTVRZZ01UTWdNalF1TlNBeE0xWXhNVnBOTWpVdU5TQXhNVWd5TkM0MVZqRXpTREkxTGpWV01URmFUVEkxSURFeExqVkRNalVnTVRFdU1qSXpPU0F5TlM0eU1qTTVJREV4SURJMUxqVWdNVEZXTVRORE1qWXVNekk0TkNBeE15QXlOeUF4TWk0ek1qZzBJREkzSURFeExqVklNalZhVFRJMUlERXdWakV4TGpWSU1qZFdNVEJJTWpWYVRUSTNMalVnT1VneU5sWXhNVWd5Tnk0MVZqbGFUVEkzSURrdU5VTXlOeUE1TGpJeU16ZzJJREkzTGpJeU16a2dPU0F5Tnk0MUlEbFdNVEZETWpndU16STROQ0F4TVNBeU9TQXhNQzR6TWpnMElESTVJRGt1TlVneU4xcE5NamNnT0M0MVZqa3VOVWd5T1ZZNExqVklNamRhVFRJM0xqVWdPVU15Tnk0eU1qTTVJRGtnTWpjZ09DNDNOell4TkNBeU55QTRMalZJTWpsRE1qa2dOeTQyTnpFMU55QXlPQzR6TWpnMElEY2dNamN1TlNBM1ZqbGFUVEkySURsSU1qY3VOVlkzU0RJMlZqbGFUVEkxSURZdU5WWTRTREkzVmpZdU5VZ3lOVnBOTWpVdU5TQTNRekkxTGpJeU16a2dOeUF5TlNBMkxqYzNOakUwSURJMUlEWXVOVWd5TjBNeU55QTFMalkzTVRVM0lESTJMak15T0RRZ05TQXlOUzQxSURWV04xcE5NalF1TlNBM1NESTFMalZXTlVneU5DNDFWamRhVFRJMUlEWXVOVU15TlNBMkxqYzNOakUwSURJMExqYzNOakVnTnlBeU5DNDFJRGRXTlVNeU15NDJOekUySURVZ01qTWdOUzQyTnpFMU55QXlNeUEyTGpWSU1qVmFUVEkxSURoV05pNDFTREl6VmpoSU1qVmFUVEl5TGpVZ09VZ3lORlkzU0RJeUxqVldPVnBOTWpNZ09DNDFRekl6SURndU56YzJNVFFnTWpJdU56YzJNU0E1SURJeUxqVWdPVlkzUXpJeExqWTNNVFlnTnlBeU1TQTNMalkzTVRVM0lESXhJRGd1TlVneU0xcE5Nak1nT1M0MVZqZ3VOVWd5TVZZNUxqVklNak5hVFRJeUxqVWdPVU15TWk0M056WXhJRGtnTWpNZ09TNHlNak00TmlBeU15QTVMalZJTWpGRE1qRWdNVEF1TXpJNE5DQXlNUzQyTnpFMklERXhJREl5TGpVZ01URldPVnBOTWpRZ09VZ3lNaTQxVmpFeFNESTBWamxhVFRJMUlERXhMalZXTVRCSU1qTldNVEV1TlVneU5Wb2lJR1pwYkd3OUlpTXdRemMwUkVZaUlHMWhjMnM5SW5WeWJDZ2pjR0YwYUMwMUxXbHVjMmxrWlMweVh6VXdNVjgyTURZMktTSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB4TWlBeE4wTXhNaUF4TkM0eU16ZzJJREUwTGpJek9EWWdNVElnTVRjZ01USldNVGRXTWpKRE1UUXVNak00TmlBeU1pQXhNaUF4T1M0M05qRTBJREV5SURFM1drMHhOeUF4TUVNeE15NHhNelFnTVRBZ01UQWdNVE11TVRNMElERXdJREUzUXpFd0lESXdMamcyTmlBeE15NHhNelFnTWpRZ01UY2dNalJETWpBdU9EWTJJREkwSURJMElESXdMamcyTmlBeU5DQXhOME15TkNBeE15NHhNelFnTWpBdU9EWTJJREV3SURFM0lERXdXaUlnWm1sc2JEMGlJekJETnpSRVJpSXZQZ284Y0dGMGFDQmtQU0pOTVRjZ05TNHdPRE16TkZZM0xqSTFJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweE55QXlOaTQzTlZZeU9DNDVNVFkzSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lEZ3VOVGN4TmpkTU1UQXVNVEVnTVRBdU1URWlJSE4wY205clpUMGlJekJETnpSRVJpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREl6TGpnNVRESTFMalF5T0RNZ01qVXVOREk0TXlJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhjR0YwYUNCa1BTSk5OUzR3T0RNek5DQXhOMGczTGpJMUlpQnpkSEp2YTJVOUlpTXdRemMwUkVZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazB5Tmk0M05TQXhOMGd5T0M0NU1UWTNJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWswNExqVTNNVFkzSURJMUxqUXlPRE5NTVRBdU1URWdNak11T0RraUlITjBjbTlyWlQwaUl6QkROelJFUmlJZ2MzUnliMnRsTFhkcFpIUm9QU0l5SWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUx6NEtQSEJoZEdnZ1pEMGlUVEl6TGpnNUlERXdMakV4VERJMUxqUXlPRE1nT0M0MU56RTJOeUlnYzNSeWIydGxQU0lqTUVNM05FUkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1URTJJaUJvWldsbmFIUTlJamd3SWlCMmFXVjNRbTk0UFNJd0lEQWdNVEUySURnd0lpQm1hV3hzUFNKdWIyNWxJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQZ284WnlCamJHbHdMWEJoZEdnOUluVnliQ2dqWTJ4cGNEQmZPREExWHpNd09ETXhLU0krQ2p4d1lYUm9JR1E5SWswd0lETkRNQ0F4TGpNME16RTFJREV1TXpRek1UVWdNQ0F6SURCSU1URXpRekV4TkM0Mk5UY2dNQ0F4TVRZZ01TNHpORE14TlNBeE1UWWdNMVk0TUVnd1ZqTmFJaUJtYVd4c1BTSWpSak5HTkVZMElpOCtDanh5WldOMElIZHBaSFJvUFNJeE1UZ2lJR2hsYVdkb2REMGlNalFpSUdacGJHdzlJbmRvYVhSbElpOCtDanh3WVhSb0lHUTlJazB4TWk0MUlEUXhRekV5TGpVZ016a3VNRFkzSURFMExqQTJOeUF6Tnk0MUlERTJJRE0zTGpWSU1URTNMalZXT0RBdU5VZ3hNaTQxVmpReFdpSWdabWxzYkQwaWQyaHBkR1VpSUhOMGNtOXJaVDBpSTBVM1JUbEZPU0l2UGdvOGNtVmpkQ0I0UFNJME5TSWdlVDBpTmlJZ2QybGtkR2c5SWpJM0lpQm9aV2xuYUhROUlqRXpJaUJ5ZUQwaU15SWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ea2lJSGRwWkhSb1BTSTNOQ0lnYUdWcFoyaDBQU0kySWlCeWVEMGlNU0lnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlOVGtpSUhkcFpIUm9QU0kxT1NJZ2FHVnBaMmgwUFNJNElpQnllRDBpTVNJZ1ptbHNiRDBpSTBVM1JUbEZRU0l2UGdvOGNtVmpkQ0I0UFNJM05pSWdlVDBpTmlJZ2QybGtkR2c5SWpJM0lpQm9aV2xuYUhROUlqRXpJaUJ5ZUQwaU15SWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSXhNRGNpSUhrOUlqWWlJSGRwWkhSb1BTSXlOeUlnYUdWcFoyaDBQU0l4TXlJZ2NuZzlJak1pSUdacGJHdzlJaU5GTjBVNVJVRWlMejRLUEhCaGRHZ2daRDBpVFRJekxqa3hNaUF4TVM0Mk56YzFRekl6TGpNME9UWWdPUzR3TVRVd05pQXlNQzR5TkRZZ055NDBORGcyTlNBeE5pNDVPREV5SURndU1UYzVOVGxETVRNdU56RTJOQ0E0TGprd09UYzNJREV4TGpVeU5UWWdNVEV1TmpZd09DQXhNaTR3T0RnZ01UUXVNekl5TlVNeE1pNDJOVEExSURFMkxqazRORGtnTVRVdU56VTBJREU0TGpVMU1UTWdNVGt1TURFNE9DQXhOeTQ0TWpBMFF6SXlMakk0TXpZZ01UY3VNRGt3TWlBeU5DNDBOelEwSURFMExqTXpPVGtnTWpNdU9URXlJREV4TGpZM056VmFUVEU0SURFMUxqUTFOREZETVRZdU5qZ3lNeUF4TlM0ME5UUXhJREUxTGpZeE5Ea2dNVFF1TXpVMU1TQXhOUzQyTVRRNUlERXpRekUxTGpZeE5Ea2dNVEV1TmpRME9TQXhOaTQyT0RNZ01UQXVOVFExT1NBeE9DQXhNQzQxTkRVNVF6RTVMak14TnlBeE1DNDFORFU1SURJd0xqTTROVEVnTVRFdU5qUTBNaUF5TUM0ek9EVXhJREV6UXpJd0xqTTROVEVnTVRRdU16VTFPQ0F4T1M0ek1UY2dNVFV1TkRVME1TQXhPQ0F4TlM0ME5UUXhXaUlnWm1sc2JEMGlJekF3T0VNNU9TSXZQZ284Y0dGMGFDQmtQU0pOTVRndU5USTNOeUE1TGpVMk5ERTRRekUyTGpZek5qVWdPUzQxTmpReE9DQXhOUzR4TURNeElERXhMakUwTVRrZ01UVXVNVEF6TVNBeE15NHdPRGM0UXpFMUxqRXdNekVnTVRVdU1ETXpOeUF4Tmk0Mk16WTFJREUyTGpZeE1UVWdNVGd1TlRJM055QXhOaTQyTVRFMVF6SXdMalF4T1RZZ01UWXVOakV4TlNBeU1TNDVOVE1nTVRVdU1ETXpOeUF5TVM0NU5UTWdNVE11TURnM09FTXlNUzQ1TlRJeUlERXhMakUwTVRrZ01qQXVOREU0T1NBNUxqVTJOREU0SURFNExqVXlOemNnT1M0MU5qUXhPRnBOTVRjdU9UazVPU0F4TlM0eE5ETTJRekUyTGpnME9UTWdNVFV1TVRRek5pQXhOUzQ1TVRZMklERTBMakU0TXprZ01UVXVPVEUyTmlBeE0wTXhOUzQ1TVRZMklERXhMamd4TmpFZ01UWXVPRFE1TXlBeE1DNDROVFkwSURFM0xqazVPVGtnTVRBdU9EVTJORU14T1M0eE5UQTBJREV3TGpnMU5qUWdNakF1TURnek1TQXhNUzQ0TVRZeElESXdMakE0TXpFZ01UTkRNakF1TURnek1TQXhOQzR4T0RNNUlERTVMakUxTURRZ01UVXVNVFF6TmlBeE55NDVPVGs1SURFMUxqRTBNelphSWlCbWFXeHNQU0lqTnpCRFEwUXpJaTgrQ2p3dlp6NEtQR1JsWm5NK0NqeGpiR2x3VUdGMGFDQnBaRDBpWTJ4cGNEQmZPREExWHpNd09ETXhJajRLUEhCaGRHZ2daRDBpVFRBZ00wTXdJREV1TXpRek1UVWdNUzR6TkRNeE5TQXdJRE1nTUVneE1UTkRNVEUwTGpZMU55QXdJREV4TmlBeExqTTBNekUxSURFeE5pQXpWamd3U0RCV00xb2lJR1pwYkd3OUluZG9hWFJsSWk4K0Nqd3ZZMnhwY0ZCaGRHZytDand2WkdWbWN6NEtQQzl6ZG1jK0NnPT1cIiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgVGFibGVDcmVhdG9yIGZyb20gXCIuL1RhYmxlQ3JlYXRvci9UYWJsZUNyZWF0b3JcIjtcbmltcG9ydCBEZXNpZ25MaW50ZXIgZnJvbSBcIi4vRGVzaWduTGludGVyL0Rlc2lnbkxpbnRlclwiO1xuaW1wb3J0IFJlc2l6ZXIgZnJvbSBcIi4vUmVzaXplclwiO1xuaW1wb3J0IFRoZW1lU3dpdGNoZXIgZnJvbSBcIi4vVGhlbWVTd2l0Y2hlclwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBIb21lIGZyb20gXCIuL0hvbWVcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiLi4vdXRpbGl0eS1mdW5jdGlvbnNcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IEFwcCA9ICh7fSkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVQbHVnaW4sIHNldEFjdGl2ZVBsdWdpbl0gPSB1c2VTdGF0ZShcImhvbWVcIik7XG4gICAgY29uc3QgW2xhdGVzdEZpZ21hQ29tbWFuZCwgc2V0TGF0ZXN0RmlnbWFDb21tYW5kXSA9IHVzZVN0YXRlKFwiXCIpO1xuICAgIGNvbnN0IFtzZWxlY3RlZFRleHRMYXllcnMsIHNldFNlbGVjdGVkVGV4dExheWVyc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW3NhbXBsZVRleHRJbmRleCwgc2V0U2FtcGxlVGV4dEluZGV4XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtsb2NhbEN1c3RvbURpY3Rpb25hcnksIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeV0gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2xvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLCBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCxdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtjb2xvcnNXaXRoSXNzdWVzLCBzZXRDb2xvcnNXaXRoSXNzdWVzXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbbG9hZGluZ0NvbG9yRGF0YSwgc2V0TG9hZGluZ0NvbG9yRGF0YV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3NlbGVjdGlvbk1hZGUsIHNldFNlbGVjdGlvbk1hZGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtjdXJyZW50U2VsZWN0aW9uLCBzZXRDdXJyZW50U2VsZWN0aW9uXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2luY29taW5nU2VsZWN0aW9uLCBzZXRJbmNvbWluZ1NlbGVjdGlvbl0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UsIHNldEN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZV0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtjb2xvclRva2Vucywgc2V0Q29sb3JUb2tlbnNdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbYWN0aXZlQ29sb3JUaWxlLCBzZXRBY3RpdmVDb2xvclRpbGVdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY29sb3JJc3N1ZXNGaXhlZCwgc2V0Q29sb3JJc3N1ZXNGaXhlZF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbbG9hZGluZ0RhcmtTd2l0Y2gsIHNldExvYWRpbmdEYXJrU3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbG9hZGluZ0xpZ2h0U3dpdGNoLCBzZXRMb2FkaW5nTGlnaHRTd2l0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50ID0gKGV2ZW50TmFtZSwgY3VzdG9tRGF0YSkgPT4ge1xuICAgICAgICBuZXdyZWxpYy5hZGRQYWdlQWN0aW9uKGV2ZW50TmFtZSwgY3VzdG9tRGF0YSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShjdXN0b21EYXRhKTtcbiAgICAgICAgICAgIH0sIDU1MCk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImluaXRpYWxpemUtc2VsZWN0aW9uXCIgfSB9LCBcIipcIik7XG4gICAgICAgIHdpbmRvdy5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHsgdHlwZSwgbWVzc2FnZSB9ID0gZXZlbnQuZGF0YS5wbHVnaW5NZXNzYWdlO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcImZpZ21hLWNvbW1hbmRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBwbHVnaW4tb3BlbmVkYCwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldExhdGVzdEZpZ21hQ29tbWFuZChtZXNzYWdlLm9wZW5lZFRvKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImluaXRpYWwtc2VsZWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRTZWxlY3Rpb24obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJzZWxlY3Rpb24tY2hhbmdlZFwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRJbmNvbWluZ1NlbGVjdGlvbihtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRhYmxlLWNyZWF0ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoXCJPbmVDb3JlVG9vbGJveDogdGFibGUtY3JlYXRlZFwiLCBtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImNsb3NlLXBsdWdpblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibmV3LXRleHQtc2VsZWN0aW9uXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldFNhbXBsZVRleHRJbmRleCgwKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0U2VsZWN0ZWRUZXh0TGF5ZXJzKG1lc3NhZ2UudGV4dExheWVycyk7XG4gICAgICAgICAgICAgICAgICAgIHNldEN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZShtZXNzYWdlLnNlbGVjdGVkTGF5ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcInRleHQtbGludGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IGxhbmd1YWdlLWxpbnRlZFwiLCBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UuY3VzdG9tRXZlbnREYXRhKSwgeyBzdWdnZXN0aW9uczogbWVzc2FnZS5taW5pbWFsUmVwb3J0IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZS5mdWxsUmVwb3J0LmZvckVhY2goKHN1Z2dlc3Rpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IGxhbmd1YWdlLWxpbnRlci1zdWdnZXN0aW9uLW1hZGVcIiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlLmN1c3RvbUV2ZW50RGF0YSksIHN1Z2dlc3Rpb24pKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2NhbC1jdXN0b20tZGljdGlvbmFyeS1yZXRyaWV2ZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbG9yLXN0YXRzXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdDb2xvckRhdGEoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDb2xvcnNXaXRoSXNzdWVzKChfYSA9IG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5jb2xvclN0YXRzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29sb3JzTm90VXNpbmdPbmVDb3JlQ29sb3JTdHlsZSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGlvbk1hZGUobWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXNzYWdlLnNlbGVjdGlvbk1hZGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDb2xvclRva2VucyhtZXNzYWdlLmNvbG9yVG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JJc3N1ZXNGaXhlZCgwKTtcbiAgICAgICAgICAgICAgICAgICAgKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5zZWxlY3Rpb25NYWRlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBjb2xvcnMtbGludGVkYCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBtZXNzYWdlLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVLZXk6IG1lc3NhZ2UuZmlsZUtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgTmFtZVwiOiBtZXNzYWdlW1wiVXNlciBOYW1lXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXNlciBBdmF0YXJcIjogbWVzc2FnZVtcIlVzZXIgQXZhdGFyXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVXNlciBJRFwiOiBtZXNzYWdlW1wiVXNlciBJRFwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNlc3Npb24gSURcIjogbWVzc2FnZVtcIlNlc3Npb24gSURcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRMYXllcnNXaXRoQ29sb3I6IG1lc3NhZ2UuY29sb3JTdGF0cy5zZWxlY3RlZExheWVyc1dpdGhDb2xvci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsSW5zdGFuY2VzT2ZDb2xvcjogbWVzc2FnZS5jb2xvclN0YXRzLmFsbEluc3RhbmNlc09mQ29sb3IubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1dpdGhDb2xvclN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzV2l0aENvbG9yU3R5bGUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc1VzaW5nT25lQ29yZVN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzVXNpbmdPbmVDb3JlU3R5bGUubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yc05vdFVzaW5nT25lQ29yZUNvbG9yU3R5bGU6IG1lc3NhZ2UuY29sb3JTdGF0cy5jb2xvcnNOb3RVc2luZ09uZUNvcmVDb2xvclN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmVDb3JlQ29sb3JTdHlsZUNvdmVyYWdlOiBtZXNzYWdlLmNvbG9yU3RhdHMub25lQ29yZUNvbG9yU3R5bGVDb3ZlcmFnZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzT2ZBbGxJbnN0YW5jZXNPZkNvbG9yOiBtZXNzYWdlLmNvbG9yU3RhdHMuaWRzT2ZBbGxJbnN0YW5jZXNPZkNvbG9yLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwiY29sb3ItcmVwbGFjZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQoYE9uZUNvcmVUb29sYm94OiBjb2xvci1yZXBsYWNlZGAsIE9iamVjdC5hc3NpZ24oe30sIG1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxvYWRpbmctbGlnaHQtdGhlbWUtc3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdMaWdodFN3aXRjaCh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImxvYWRpbmctZGFyay10aGVtZS1zd2l0Y2hcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0RhcmtTd2l0Y2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0aGVtZS1zd2l0Y2hlZFwiOlxuICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5zd2l0Y2hlZFRvID09PSBcImRhcmtcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0RhcmtTd2l0Y2goZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1lc3NhZ2Uuc3dpdGNoZWRUbyA9PT0gXCJsaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTGlnaHRTd2l0Y2goZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRUaGVtZVN3aXRjaGVyRXZlbnQgPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogdGhlbWUtc3dpdGNoZWRgLCBPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZS5jbG9zZUFmdGVyUnVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImNsb3NlLXBsdWdpblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFRoZW1lU3dpdGNoZXJFdmVudCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGxhdGVzdEZpZ21hQ29tbWFuZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGxhdGVzdEZpZ21hQ29tbWFuZCkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWhvbWVcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tdGFibGUtY3JlYXRvclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJ0YWJsZS1jcmVhdG9yXCIpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwib3Blbi10aGVtZS1zd2l0Y2hlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJ0aGVtZS1zd2l0Y2hlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tbGFuZ3VhZ2UtbGludGVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImxhbmd1YWdlLWxpbnRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tY29sb3ItbGludGVyXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImNvbG9yLWxpbnRlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbbGF0ZXN0RmlnbWFDb21tYW5kXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGN1cnJlbnRTZWxlY3Rpb24gJiYgaW5jb21pbmdTZWxlY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBpbmNvbWluZ1NlbGVjdGlvbikpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXJyZW50U2VsZWN0aW9uKGluY29taW5nU2VsZWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtpbmNvbWluZ1NlbGVjdGlvbl0pO1xuICAgIGNvbnN0IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gPSAoZGVzdGluYXRpb24pID0+IHtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKGRlc3RpbmF0aW9uKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcIm5hdmlnYXRlLXRvLXRhYlwiLFxuICAgICAgICAgICAgICAgIHRhYkNsaWNrZWQ6IGRlc3RpbmF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyUGx1Z2luQm9keSA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3RpdmVQbHVnaW4pIHtcbiAgICAgICAgICAgIGNhc2UgXCJob21lXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoSG9tZSwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gfSk7XG4gICAgICAgICAgICBjYXNlIFwidGFibGUtY3JlYXRvclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRhYmxlQ3JlYXRvciwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24gfSk7XG4gICAgICAgICAgICBjYXNlIFwibGFuZ3VhZ2UtbGludGVyXCI6XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KERlc2lnbkxpbnRlciwgeyBzZXRBY3RpdmVQbHVnaW46IGhhbmRsZVBsdWdpbk5hdmlnYXRpb24sIG9wZW5UbzogXCJsYW5ndWFnZVwiIH0pKTtcbiAgICAgICAgICAgIGNhc2UgXCJ0aGVtZS1zd2l0Y2hlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lU3dpdGNoZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcImNvbG9yLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25MaW50ZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uLCBvcGVuVG86IFwiY29sb3JcIiB9KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGZ1bmN0aW9ucyA9IHtcbiAgICAgICAgaGFuZGxlUGx1Z2luTmF2aWdhdGlvbixcbiAgICAgICAgdHJpZ2dlck5ld1JlbGljQ3VzdG9tRXZlbnQsXG4gICAgfTtcbiAgICBjb25zdCBzdGF0ZSA9IHtcbiAgICAgICAgc2VsZWN0ZWRUZXh0TGF5ZXJzLFxuICAgICAgICBzZXRTZWxlY3RlZFRleHRMYXllcnMsXG4gICAgICAgIHNhbXBsZVRleHRJbmRleCxcbiAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4LFxuICAgICAgICBsb2NhbEN1c3RvbURpY3Rpb25hcnksXG4gICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeSxcbiAgICAgICAgbG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsXG4gICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLFxuICAgICAgICBjb2xvcnNXaXRoSXNzdWVzLFxuICAgICAgICBzZXRDb2xvcnNXaXRoSXNzdWVzLFxuICAgICAgICBsb2FkaW5nQ29sb3JEYXRhLFxuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhLFxuICAgICAgICBzZWxlY3Rpb25NYWRlLFxuICAgICAgICBzZXRTZWxlY3Rpb25NYWRlLFxuICAgICAgICBjdXJyZW50U2VsZWN0aW9uLFxuICAgICAgICBpbmNvbWluZ1NlbGVjdGlvbixcbiAgICAgICAgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlLFxuICAgICAgICBjb2xvclRva2VucyxcbiAgICAgICAgYWN0aXZlQ29sb3JUaWxlLFxuICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUsXG4gICAgICAgIGNvbG9ySXNzdWVzRml4ZWQsXG4gICAgICAgIHNldENvbG9ySXNzdWVzRml4ZWQsXG4gICAgICAgIGxvYWRpbmdEYXJrU3dpdGNoLFxuICAgICAgICBsb2FkaW5nTGlnaHRTd2l0Y2gsXG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogeyBmdW5jdGlvbnMsIHN0YXRlIH0gfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChSZXNpemVyLCBudWxsKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJhcHBcIiB9LCByZW5kZXJQbHVnaW5Cb2R5KCkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQXBwO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBQbHVnaW5Db250ZXh0IH0gZnJvbSBcIi4uL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBDb2xvclRpbGUgZnJvbSBcIi4vQ29sb3JUaWxlXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgQ29sb3JMaW50ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGNvbG9yc1dpdGhJc3N1ZXMsIHNldENvbG9yc1dpdGhJc3N1ZXMsIGxvYWRpbmdDb2xvckRhdGEsIHNldExvYWRpbmdDb2xvckRhdGEsIHNlbGVjdGlvbk1hZGUsIGNvbG9ySXNzdWVzRml4ZWQsIH0gPSBzdGF0ZTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWNvbG9yLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH0sIFtdKTtcbiAgICBjb25zdCBpZ25vcmVDb2xvcklzc3VlID0gKGNvbG9ySWQpID0+IHtcbiAgICAgICAgY29uc3QgY29sb3JUb0JlUmVtb3ZlZCA9IGNvbG9yc1dpdGhJc3N1ZXMuZmluZCgoY29sb3IpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvci5jb2xvcklkID09PSBjb2xvcklkO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgaW5kZXhPZkNvbG9yVG9CZVJlbW92ZWQgPSBjb2xvcnNXaXRoSXNzdWVzLmluZGV4T2YoY29sb3JUb0JlUmVtb3ZlZCk7XG4gICAgICAgIGNvbnN0IG5ld0NvbG9yc1dpdGhJc3N1ZXMgPSBbLi4uY29sb3JzV2l0aElzc3Vlc107XG4gICAgICAgIG5ld0NvbG9yc1dpdGhJc3N1ZXMuc3BsaWNlKGluZGV4T2ZDb2xvclRvQmVSZW1vdmVkLCAxKTtcbiAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcyhuZXdDb2xvcnNXaXRoSXNzdWVzKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbG9ySXNzdWVzID0gKCkgPT4ge1xuICAgICAgICBpZiAoKGNvbG9yc1dpdGhJc3N1ZXMgPT09IG51bGwgfHwgY29sb3JzV2l0aElzc3VlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JzV2l0aElzc3Vlcy5sZW5ndGgpID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yc1dpdGhJc3N1ZXMubWFwKChjb2xvciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sb3JUaWxlLCB7IGNvbG9yRGF0YTogY29sb3IsIGtleTogaW5kZXgsIGlnbm9yZUNvbG9ySXNzdWU6IGlnbm9yZUNvbG9ySXNzdWUgfSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVJlc2NhbkxheWVyc0NsaWNrID0gKCkgPT4ge1xuICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWNvbG9yLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyRW1wdHlTdGF0ZSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgaGVhZGluZ1RleHQgPSAhbG9hZGluZ0NvbG9yRGF0YVxuICAgICAgICAgICAgPyBcIlNlbGVjdCBhIGxheWVyKHMpIHRvIGdldCBzdGFydGVkXCJcbiAgICAgICAgICAgIDogXCJMb2FkaW5nIGNvbG9yIGRhdGEuLi5cIjtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25UZXh0ID0gIWxvYWRpbmdDb2xvckRhdGFcbiAgICAgICAgICAgID8gXCJUbyBjaGVjayB5b3VyIGNvbG9ycyBzZWxlY3QgYW55IGxheWVyLCBmcmFtZSwgb3IgZ3JvdXAgb2YgbGF5ZXJzIGFuZCB0aGVuIGxpbnQgY29sb3JzLlwiXG4gICAgICAgICAgICA6IFwiVGhpcyBtYXkgdGFrZSBhIG1vbWVudFwiO1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBsb2FkaW5nQ29sb3JEYXRhICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbG9hZGVyXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItZW1wdHktc3RhdGUtaGVhZGluZ1wiIH0sIGhlYWRpbmdUZXh0KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uXCIgfSwgZGVzY3JpcHRpb25UZXh0KSxcbiAgICAgICAgICAgICFsb2FkaW5nQ29sb3JEYXRhICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVSZXNjYW5MYXllcnNDbGljaygpIH0sIFwiQ2hlY2sgY29sb3JzXCIpKSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29sb3JMaW50aW5nU3VtbWFyeSA9ICgpID0+IHtcbiAgICAgICAgaWYgKCFsb2FkaW5nQ29sb3JEYXRhICYmIHNlbGVjdGlvbk1hZGUpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLXN1bWFyeVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctc3VtbWFyeS1oZWFkaW5nXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzV2l0aElzc3Vlcy5sZW5ndGggLSBjb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICAgICAgICAgICAgICBcIiBjb2xvciBpc3N1ZXMgZm91bmRcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uXCIgfSwgY29sb3JzV2l0aElzc3Vlcy5sZW5ndGggLSBjb2xvcklzc3Vlc0ZpeGVkID4gMCA/IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgICAgICBcIlRvIGZpeCB0aGVzZSBpc3N1ZXMsIHJlcGxhY2UgZWFjaCBvZiB0aGUgY29sb3JzIGxpc3RlZCBiZWxvdyB3aXRoIGEgT25lIENvcmUgY29sb3Igc3R5bGUuXCIsXG4gICAgICAgICAgICAgICAgICAgIGAgYCxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vY29sb3IvI3NlbWFudGljLXRva2Vuc1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCIgfSwgXCJTZWUgY29sb3IgZG9jc1wiKSxcbiAgICAgICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgICAgIFwiZm9yIG1vcmUgaW5mby5cIikpIDogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVhY3QuRnJhZ21lbnQsIG51bGwsIFwiVGhlcmUgYXJlIG5vIGNvbG9yIGlzc3VlcyB3aXRoIHRoZSBzZWxlY3RlZCBsYXllcnMgOikuIFRvIGNoZWNrIGZvciBpc3N1ZXMgaW4gb3RoZXIgbGF5ZXJzIHNlbGVjdCBhbm90aGVyIGxheWVyKHMpIGFuZCBjbGljayBcXFwiUmUtc2NhbiBjb2xvcnNcXFwiLlwiKSkpKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyRW1wdHlTdGF0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBub0NvbG9ySXNzdWVzID0gKGNvbG9yc1dpdGhJc3N1ZXMgPT09IG51bGwgfHwgY29sb3JzV2l0aElzc3VlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JzV2l0aElzc3Vlcy5sZW5ndGgpID09PSAwO1xuICAgIGNvbnN0IGNvbG9yTGludGVyQ29udGFpbmVyQ2xhc3NlcyA9IGNsYXNzTmFtZXMoXCJjb2xvci1saW50ZXItY29udGFpbmVyXCIsIHtcbiAgICAgICAgXCJzdW1tYXJ5LWlzLWxvYWRpbmdcIjogbG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgXCJzdW1tYXJ5LWlzLWVtcHR5XCI6IG5vQ29sb3JJc3N1ZXMsXG4gICAgICAgIFwibm8tc2VsZWN0aW9uLW1hZGVcIjogIXNlbGVjdGlvbk1hZGUsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiLCB7IGNsYXNzTmFtZTogY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzIH0sXG4gICAgICAgICAgICByZW5kZXJDb2xvckxpbnRpbmdTdW1tYXJ5KCksXG4gICAgICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiAhbm9Db2xvcklzc3VlcyAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGVzLWNvbnRhaW5lclwiIH0sIHJlbmRlckNvbG9ySXNzdWVzKCkpKSksXG4gICAgICAgICFsb2FkaW5nQ29sb3JEYXRhICYmIHNlbGVjdGlvbk1hZGUgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJmb290ZXJcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1mb290ZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gaGFuZGxlUmVzY2FuTGF5ZXJzQ2xpY2soKSB9LCBcIkNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uXCIpKSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb2xvckxpbnRlcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNvbnRleHQsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgY2hyb21hIGZyb20gXCJjaHJvbWEtanNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgaWNvbkxheWVyVGV4dCBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItdGV4dC5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJFbGxpcHNlIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1lbGxpcHNlLnN2Z1wiO1xuaW1wb3J0IGljb25MYXllckxpbmUgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLWxpbmUuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyUG9seWdvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItcG9seWdvbi5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJSZWN0YW5nbGUgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXJlY3RhbmdsZS5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJCb29sZWFuT3BlcmF0aW9uIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1ib29sZWFuLW9wZXJhdGlvbi5zdmdcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwicmVhY3QtZmlnbWEtcGx1Z2luLWRzXCI7XG5pbXBvcnQgeyBDaGVjayB9IGZyb20gXCJyZWFjdC1mZWF0aGVyXCI7XG5pbXBvcnQgXCJyZWFjdC1maWdtYS1wbHVnaW4tZHMvZmlnbWEtcGx1Z2luLWRzLmNzc1wiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgQ29sb3JUaWxlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGNvbG9yVG9rZW5zLCBhY3RpdmVDb2xvclRpbGUsIHNldEFjdGl2ZUNvbG9yVGlsZSwgY29sb3JJc3N1ZXNGaXhlZCwgc2V0Q29sb3JJc3N1ZXNGaXhlZCwgfSA9IHN0YXRlO1xuICAgIGNvbnN0IHsgY29sb3JJZCwgbGF5ZXJJZCwgbGF5ZXJOYW1lLCBsYXllclR5cGUsIGNvbG9yVHlwZSwgY29sb3JJbkhleCwgfSA9IHByb3BzLmNvbG9yRGF0YTtcbiAgICBjb25zdCB7IGlnbm9yZUNvbG9ySXNzdWUgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtpc0V4cGFuZGVkLCBzZXRJc0V4cGFuZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbWVudUFjdGl2ZSwgc2V0TWVudUFjdGl2ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVCdXR0b25Ib3ZlcmVkLCBzZXRNZW51QnV0dG9uSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVIb3ZlcmVkLCBzZXRNZW51SG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVUaW1lciwgc2V0TWVudVRpbWVyXSA9IHVzZVN0YXRlKG51bGwpO1xuICAgIGNvbnN0IFtpc3N1ZUZpeGVkLCBzZXRJc3N1ZUZpeGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZlQ29sb3JUaWxlID09PSBjb2xvcklkKSB7XG4gICAgICAgICAgICBzZXRJc0V4cGFuZGVkKHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0SXNFeHBhbmRlZChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9LCBbYWN0aXZlQ29sb3JUaWxlXSk7XG4gICAgY29uc3QgaGFuZGxlQ29sb3JUaWxlQ2xpY2sgPSAobGF5ZXJJZCkgPT4ge1xuICAgICAgICBpZiAoIWlzRXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbG9yVGlsZShjb2xvcklkKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbG9yVGlsZShcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwic2VsZWN0LWxheWVyXCIsXG4gICAgICAgICAgICAgICAgbGF5ZXJJZDogbGF5ZXJJZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCB0cnVuY2F0ZUxheWVyTmFtZSA9IChsYXllck5hbWUsIGxlbmd0aCA9IDI1KSA9PiB7XG4gICAgICAgIGlmIChsYXllck5hbWUubGVuZ3RoID4gbGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbGF5ZXJOYW1lLnN1YnN0cmluZygwLCBsZW5ndGgpICsgXCIuLi5cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbGF5ZXJOYW1lO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVG9rZW5TdWdnZXN0aW9ucyA9ICgpID0+IHtcbiAgICAgICAgaWYgKChjb2xvclRva2VucyA9PT0gbnVsbCB8fCBjb2xvclRva2VucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29sb3JUb2tlbnMubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcmVkQ29sb3JUb2tlbnMgPSBjb2xvclRva2Vucy5maWx0ZXIodG9rZW4gPT4gIXRva2VuLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygncHJpdmF0ZScpKTtcbiAgICAgICAgICAgIGxldCByZWxldmFudENvbG9yU3R5bGVzID0gW107XG4gICAgICAgICAgICBsZXQgbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMgPSBbXTtcbiAgICAgICAgICAgIGlmIChsYXllclR5cGUgPT09IFwiVEVYVFwiKSB7XG4gICAgICAgICAgICAgICAgcmVsZXZhbnRDb2xvclN0eWxlcyA9IGZpbHRlcmVkQ29sb3JUb2tlbnNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigodG9rZW4pID0+IHRva2VuLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcInRleHRcIikpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUudG9Mb3dlckNhc2UoKSA+IGIubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sb3JUeXBlID09PSBcImZpbGxcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJiYWNrZ3JvdW5kXCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbG9yVHlwZSA9PT0gXCJzdHJva2VcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJib3JkZXJcIikpXG4gICAgICAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLm5hbWUudG9Mb3dlckNhc2UoKSA+IGIubmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMgPSByZWxldmFudENvbG9yU3R5bGVzXG4gICAgICAgICAgICAgICAgLm1hcCgocmVsZXZhbnRDb2xvclN0eWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlbGV2YW50Q29sb3JTdHlsZS5oZXggPT09IFwiTm9uZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlbGV2YW50Q29sb3JTdHlsZSksIHsgc2ltaWxhcml0eTogMCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3Qgb25lQ29yZUNvbG9yID0gcmVsZXZhbnRDb2xvclN0eWxlLmhleDtcbiAgICAgICAgICAgICAgICBjb25zdCBzaW1pbGFyaXR5ID0gMTAwIC0gY2hyb21hLmRpc3RhbmNlKG9uZUNvcmVDb2xvciwgY29sb3JJbkhleCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVsZXZhbnRDb2xvclN0eWxlKSwgeyBzaW1pbGFyaXR5IH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiLnNpbWlsYXJpdHkgLSBhLnNpbWlsYXJpdHk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maWx0ZXIodG9rZW4gPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRGFya01vZGVUb2tlbiA9IHRva2VuLnRoZW1lID09PSAnZGFyayc7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNEdXBsaWNhdGUgPSByZWxldmFudENvbG9yU3R5bGVzLnNvbWUocmVsZXZhbnRTdHlsZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWxldmFudFN0eWxlLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiAhKGlzRHVwbGljYXRlICYmIGlzRGFya01vZGVUb2tlbik7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zbGljZSgwLCA0KTtcbiAgICAgICAgICAgIHJldHVybiBtb3N0UmVsZXZhbnRDb2xvclN0eWxlcy5tYXAoKGNvbG9yU3R5bGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbVwiLCBrZXk6IGluZGV4LCBvbkNsaWNrOiAoZSkgPT4gaGFuZGxlU3VnZ2VzdGlvbkZpeENsaWNrKGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVLZXk6IGNvbG9yU3R5bGUua2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTdHlsZU5hbWU6IGNvbG9yU3R5bGUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVDb2xvcjogY29sb3JTdHlsZS5oZXgsXG4gICAgICAgICAgICAgICAgICAgIH0pIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1zYW1wbGVcIiwgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBjb2xvclN0eWxlLmhleCB9IH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1wcmltYXJ5LWNvbnRlbnRcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nXCIgfSwgY29sb3JTdHlsZS5uYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1kZXNjcmlwdGlvblwiIH0sIGNvbG9yU3R5bGUuZGVzY3JpcHRpb24pKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YVwiIH0sIFwiQXBwbHkgZml4XCIpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudUNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZSghbWVudUFjdGl2ZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVCdG5NZW51TW91c2VFbnRlciA9ICgpID0+IHtcbiAgICAgICAgc2V0TWVudUJ1dHRvbkhvdmVyZWQodHJ1ZSk7XG4gICAgICAgIGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQnRuTWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVCdXR0b25Ib3ZlcmVkKGZhbHNlKTtcbiAgICAgICAgc2V0TWVudVRpbWVyKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH0sIDQwMCkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KG1lbnVUaW1lcik7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNZW51TW91c2VFbnRlciA9ICgpID0+IHtcbiAgICAgICAgc2V0TWVudUhvdmVyZWQodHJ1ZSk7XG4gICAgICAgIGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudU1vdXNlTGVhdmUgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVIb3ZlcmVkKGZhbHNlKTtcbiAgICAgICAgc2V0TWVudVRpbWVyKHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgICAgIH0sIDIwMCkpO1xuICAgICAgICByZXR1cm4gKCkgPT4gY2xlYXJUaW1lb3V0KG1lbnVUaW1lcik7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVJZ25vcmVJc3N1ZUNsaWNrID0gKGUpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgaWdub3JlQ29sb3JJc3N1ZShjb2xvcklkKTtcbiAgICAgICAgc2V0TWVudUFjdGl2ZShmYWxzZSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVTdWdnZXN0aW9uRml4Q2xpY2sgPSAoZSwgY29sb3JTdHlsZURhdGEpID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFwcGx5LWNvbG9yLXN0eWxlXCIsXG4gICAgICAgICAgICAgICAgY29sb3JUeXBlLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IGxheWVySWQsXG4gICAgICAgICAgICAgICAgb3JpZ2luYWxDb2xvcjogY29sb3JJbkhleCxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlS2V5OiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlS2V5LFxuICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVOYW1lOiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlTmFtZSxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlQ29sb3I6IGNvbG9yU3R5bGVEYXRhLmNvbG9yU3R5bGVDb2xvcixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCk7XG4gICAgICAgIHNldElzc3VlRml4ZWQodHJ1ZSk7XG4gICAgICAgICFpc3N1ZUZpeGVkICYmIHNldENvbG9ySXNzdWVzRml4ZWQoY29sb3JJc3N1ZXNGaXhlZCArIDEpO1xuICAgIH07XG4gICAgY29uc3QgbGF5ZXJUeXBlSWNvbnMgPSB7XG4gICAgICAgIFRFWFQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclRleHQsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBFTExJUFNFOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJFbGxpcHNlLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgRlJBTUU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImZyYW1lXCIgfSksXG4gICAgICAgIEdST1VQOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJncm91cFwiIH0pLFxuICAgICAgICBDT01QT05FTlQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImNvbXBvbmVudFwiIH0pLFxuICAgICAgICBJTlNUQU5DRTogUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7IGNsYXNzTmFtZTogXCJsYXllci1pY29uXCIsIG5hbWU6IFwiaW5zdGFuY2VcIiB9KSxcbiAgICAgICAgTElORTogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyTGluZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFBPTFlHT046IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclBvbHlnb24sIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBSRUNUQU5HTEU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclJlY3RhbmdsZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFNIQVBFX1dJVEhfVEVYVDogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyVGV4dCwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIFNUQVI6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiwgbmFtZTogXCJzdGFyLW9mZlwiIH0pLFxuICAgICAgICBCT09MRUFOX09QRVJBVElPTjogKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllckJvb2xlYW5PcGVyYXRpb24sIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pKSxcbiAgICB9O1xuICAgIGNvbnN0IGNvbG9yVGlsZUhlYWRpbmdUZXh0ID0gKCkgPT4ge1xuICAgICAgICBpZiAoaXNzdWVGaXhlZCkge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICAgICAgICAgIFwiRml4ZWQgXCIsXG4gICAgICAgICAgICAgICAgYCBgLFxuICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ2hlY2ssIHsgY29sb3I6IFwiIzEyNjQ0MFwiLCBzaXplOiAxNyB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIChjb2xvclR5cGUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgK1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZS5zbGljZSgxKSArXG4gICAgICAgICAgICAgICAgXCIgbmVlZHMgT25lIENvcmUgY29sb3Igc3R5bGVcIik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGNvbG9yVGlsZUNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwiY29sb3ItdGlsZS1jb250YWluZXJcIiwge1xuICAgICAgICBcIm1lbnUtYWN0aXZlXCI6IG1lbnVBY3RpdmUsXG4gICAgICAgIFwiY29sb3ItdGlsZS1ob3Zlci1zdGF0ZS1kaXNhYmxlZFwiOiBtZW51QnV0dG9uSG92ZXJlZCB8fCBtZW51SG92ZXJlZCxcbiAgICAgICAgZXhwYW5kZWQ6IGlzRXhwYW5kZWQsXG4gICAgICAgIFwiaXNzdWUtZml4ZWRcIjogaXNzdWVGaXhlZCxcbiAgICB9KTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogY29sb3JUaWxlQ29udGFpbmVyQ2xhc3Nlcywgb25DbGljazogKCkgPT4gaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCkgfSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWhlYWRlclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtdGl0bGUtc2VjdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtaGVhZGluZ1wiIH0sIGNvbG9yVGlsZUhlYWRpbmdUZXh0KCkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuLWNvbG9yLXRpbGUtbWVudVwiLCBvbkNsaWNrOiAoZSkgPT4gaGFuZGxlTWVudUNsaWNrKGUpLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUJ0bk1lbnVNb3VzZUVudGVyKCksIG9uTW91c2VMZWF2ZTogKCkgPT4gaGFuZGxlQnRuTWVudU1vdXNlTGVhdmUoKSB9LCBcIk9wdGlvbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnVcIiwgb25Nb3VzZUVudGVyOiAoKSA9PiBoYW5kbGVNZW51TW91c2VFbnRlcigpLCBvbk1vdXNlTGVhdmU6ICgpID0+IGhhbmRsZU1lbnVNb3VzZUxlYXZlKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtc1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1cIiwgb25DbGljazogKCkgPT4gaGFuZGxlQ29sb3JUaWxlQ2xpY2sobGF5ZXJJZCkgfSwgXCJTZWxlY3QgbGF5ZXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1cIiwgb25DbGljazogKGUpID0+IGhhbmRsZUlnbm9yZUlzc3VlQ2xpY2soZSkgfSwgXCJJZ25vcmUgaXNzdWVcIikpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaHJcIiwgbnVsbCksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7IGhyZWY6IFwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi9jb2xvci8jc2VtYW50aWMtdG9rZW5zXCIsIHRhcmdldDogXCJfYmxhbmtcIiB9LCBcIlNlZSBjb2xvciBkb2NzXCIpKSkpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdFwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0gY29sb3ItdGlsZS1tZXRhLWNvbG9yXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBzdHlsZTogeyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9ySW5IZXggfSwgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtY29sb3Itc2FtcGxlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgIGNvbG9ySW5IZXgpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIGNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW1cIiB9LFxuICAgICAgICAgICAgICAgICAgICBsYXllclR5cGVJY29uc1tsYXllclR5cGVdLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZVwiIH0sIHRydW5jYXRlTGF5ZXJOYW1lKGxheWVyTmFtZSkpKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbVwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFwiVHlwZTogXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yVHlwZSkpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFydGljbGVcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmdcIiB9LCBcIlN1Z2dlc3RlZCBjb2xvciBzdHlsZXNcIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0XCIgfSwgcmVuZGVyVG9rZW5TdWdnZXN0aW9ucygpKSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBDb2xvclRpbGU7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5pbXBvcnQgQ29sb3JMaW50ZXIgZnJvbSBcIi4vQ29sb3JMaW50ZXJcIjtcbmltcG9ydCBMYW5ndWFnZUxpbnRlclBsdWdpbiBmcm9tIFwiLi9MYW5ndWFnZUxpbnRlclBsdWdpblwiO1xuaW1wb3J0IEljb25DaGV2cm9uTGVmdCBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tY2hldnJvbi1sZWZ0LnN2Z1wiO1xuY29uc3QgRGVzaWduTGludGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzZXRBY3RpdmVQbHVnaW4sIG9wZW5UbyB9ID0gcHJvcHM7XG4gICAgY29uc3QgW2FjdGl2ZVRhYiwgc2V0QWN0aXZlVGFiXSA9IHVzZVN0YXRlKG9wZW5Ubyk7XG4gICAgY29uc3QgaGFuZGxlVGFiQ2xpY2sgPSAobmFtZU9mVGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYkFzU2luZ2xlV29yZCA9IG5hbWVPZlRhYi5zcGxpdChcIi1cIilbMF07XG4gICAgICAgIHNldEFjdGl2ZVRhYih0YWJBc1NpbmdsZVdvcmQpO1xuICAgICAgICBzZXRBY3RpdmVQbHVnaW4obmFtZU9mVGFiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlck5hdmlnYXRpb25UYWJzID0gKCkgPT4ge1xuICAgICAgICBjb25zdCB0YWJzID0gW1wiY29sb3ItbGludGVyXCIsIFwibGFuZ3VhZ2UtbGludGVyXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgbGV0IHRhYkxhYmVsID0gdGFiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGFiLnNwbGl0KFwiLVwiKVswXS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlVGFiICsgXCItbGludGVyXCIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXMucHVzaChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0YWJMYWJlbCA9PT0gJ0xhbmd1YWdlJykge1xuICAgICAgICAgICAgICAgIHRhYkxhYmVsID0gJ0xhbmd1YWdlIChiZXRhKSc7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3Nlc091dHB1dCA9IGAke3RhYkNsYXNzZXNPdXRwdXR9IGxhbmd1YWdlLWJldGEtdGFiYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUYWJDbGljayh0YWIpLCBrZXk6IGluZGV4IH0sXG4gICAgICAgICAgICAgICAgdGFiTGFiZWwsXG4gICAgICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICAgICAgdGFiTGFiZWwgPT09ICdMYW5ndWFnZScgJiYgXCIoYmV0YSlcIikpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckRlc2lnbkxpbnRlciA9ICgpID0+IHtcbiAgICAgICAgc3dpdGNoIChhY3RpdmVUYWIpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsYW5ndWFnZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KExhbmd1YWdlTGludGVyUGx1Z2luLCBudWxsKTtcbiAgICAgICAgICAgIGNhc2UgXCJjb2xvclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KENvbG9yTGludGVyLCBudWxsKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgcmVuZGVyRGVzaWduTGludGVyKCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBEZXNpZ25MaW50ZXI7XG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCIuLi8uLi91dGlsaXR5LWZ1bmN0aW9uc1wiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCBMYW5ndWFnZUxpbnRlciwgeyBsaW50TXlUZXh0IH0gZnJvbSBcIm5ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXJcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi4vUGx1Z2luQ29udGV4dFwiO1xucmVxdWlyZShcImJhYmVsLXBvbHlmaWxsXCIpO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuY29uc3QgTGFuZ3VhZ2VMaW50ZXJQbHVnaW4gPSAoKSA9PiB7XG4gICAgY29uc3QgW3RleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMsIHNldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtzYW1wbGVUZXh0LCBzZXRTYW1wbGVUZXh0XSA9IHVzZVN0YXRlKFwiXCIpO1xuICAgIGNvbnN0IFttYXhUZXh0SW5kZXgsIHNldE1heFRleHRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbc2VsZWN0aW9uSGFzQ2hhbmdlZCwgc2V0U2VsZWN0aW9uSGFzQ2hhbmdlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IHNlbGVjdGVkVGV4dExheWVycywgc2FtcGxlVGV4dEluZGV4LCBzZXRTYW1wbGVUZXh0SW5kZXgsIGxvY2FsQ3VzdG9tRGljdGlvbmFyeSwgbG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsIGN1cnJlbnRTZWxlY3Rpb24sIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZSwgfSA9IHN0YXRlO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJyZXF1ZXN0LWxvY2FsLWN1c3RvbS1kaWN0aW9uYXJ5XCIgfSB9LCBcIipcIik7XG4gICAgICAgIHNldFNlbGVjdGlvbkhhc0NoYW5nZWQoZmFsc2UpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicnVuLWxhbmd1YWdlLWxpbnRlclwiIH0gfSwgXCIqXCIpO1xuICAgIH0sIFtdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAodGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbMF0uY2hhcmFjdGVycyk7XG4gICAgICAgICAgICBzZXRNYXhUZXh0SW5kZXgodGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dChcIlwiKTtcbiAgICAgICAgICAgIHNldE1heFRleHRJbmRleCgwKTtcbiAgICAgICAgfVxuICAgIH0sIFt0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHNhbXBsZVRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInNhbXBsZS10ZXh0LWNoYW5nZWRcIixcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlTm9kZUlkOiB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleF0uaWQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgfVxuICAgIH0sIFtzYW1wbGVUZXh0XSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1c2VFZmZlY3QgZmlyZWRcIik7XG4gICAgICAgIGlmIChsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCAmJiBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkICYmXG4gICAgICAgICAgICBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJlcXVlc3QtbG9jYWwtY3VzdG9tLWRpY3Rpb25hcnlcIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgfVxuICAgIH0sIFtzZWxlY3RlZFRleHRMYXllcnMsIGxvY2FsQ3VzdG9tRGljdGlvbmFyeV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICghaXNFcXVhbChjdXJyZW50U2VsZWN0aW9uLCBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UpICYmXG4gICAgICAgICAgICBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGlvbkhhc0NoYW5nZWQodHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9LCBbY3VycmVudFNlbGVjdGlvbiwgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlXSk7XG4gICAgY29uc3QgbGludFNlbGVjdGVkTGF5ZXJzID0gKCkgPT4ge1xuICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1sYW5ndWFnZS1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZVNvdXJjZVRleHQgPSAodXBkYXRlZFRleHQpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInVwZGF0ZS1zb3VyY2UtdGV4dFwiLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbc2FtcGxlVGV4dEluZGV4XS5pZCxcbiAgICAgICAgICAgICAgICB1cGRhdGVkVGV4dDogdXBkYXRlZFRleHQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIHNldFNhbXBsZVRleHQodXBkYXRlZFRleHQpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlVGV4dExheWVyTmF2aWdhdGlvbiA9IChkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJwcmV2aW91c1wiKSB7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnNbc2FtcGxlVGV4dEluZGV4IC0gMV0uY2hhcmFjdGVycyk7XG4gICAgICAgICAgICBzZXRTYW1wbGVUZXh0SW5kZXgoc2FtcGxlVGV4dEluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGlyZWN0aW9uID09PSBcIm5leHRcIikge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleCArIDFdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4KHNhbXBsZVRleHRJbmRleCArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBhc3luY0ZpbHRlciA9IChhcnIsIGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmFpbCA9IFN5bWJvbCgpO1xuICAgICAgICByZXR1cm4gKHlpZWxkIFByb21pc2UuYWxsKGFyci5tYXAoKGl0ZW0pID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkgeyByZXR1cm4gKCh5aWVsZCBjYWxsYmFjayhpdGVtKSkgPyBpdGVtIDogZmFpbCk7IH0pKSkpLmZpbHRlcigoaSkgPT4gaSAhPT0gZmFpbCk7XG4gICAgfSk7XG4gICAgY29uc3QgZ2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucyA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBsYXllcnNXaXRoU3VnZ2VzdGlvbnMgPSB5aWVsZCBhc3luY0ZpbHRlcihzZWxlY3RlZFRleHRMYXllcnMsIChpdGVtKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGxldCByZXBvcnQgPSBcIlwiO1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5yZXNvbHZlKGxpbnRNeVRleHQoaXRlbS5jaGFyYWN0ZXJzLCBsb2NhbEN1c3RvbURpY3Rpb25hcnkpKS50aGVuKChyZXN1bHQpID0+IChyZXBvcnQgPSByZXN1bHQpKTtcbiAgICAgICAgICAgIGlmIChyZXBvcnQubWVzc2FnZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcG9ydFdpdGhFbnVtZXJhYmxlUHJvcHMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHJlcG9ydC5tZXNzYWdlcykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pbmltYWxSZXBvcnQgPSByZXBvcnRXaXRoRW51bWVyYWJsZVByb3BzLm1hcCgobWVzc2FnZSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgYWN0dWFsOiBtZXNzYWdlLmFjdHVhbCxcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IG1lc3NhZ2UuZXhwZWN0ZWQuc2xpY2UoMCwgMyksXG4gICAgICAgICAgICAgICAgICAgIHJ1bGU6IG1lc3NhZ2Uuc291cmNlLFxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInRleHQtbGludGVkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbWFsUmVwb3J0LFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVsbFJlcG9ydDogcmVwb3J0V2l0aEVudW1lcmFibGVQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LCBcIipcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gISEoKF9hID0gcmVwb3J0Lm1lc3NhZ2VzWzBdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWVzc2FnZSk7XG4gICAgICAgIH0pKTtcbiAgICAgICAgc2V0VGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucyhsYXllcnNXaXRoU3VnZ2VzdGlvbnMpO1xuICAgIH0pO1xuICAgIGNvbnN0IGFkZFRvRGljdGlvbmFyeSA9ICh3b3JkVG9BZGQsIHN1Z2dlc3Rpb25JZCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiYWRkLXRvLWRpY3Rpb25hcnlcIixcbiAgICAgICAgICAgICAgICB3b3JkVG9BZGQ6IHdvcmRUb0FkZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHByb3ZpZGVTYW1wbGVUZXh0ID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBsYXllcklzU2VsZWN0ZWQgPSBzZWxlY3RlZFRleHRMYXllcnMubGVuZ3RoID4gMDtcbiAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnNBdmFpbGFibGUgPSB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmICghbGF5ZXJJc1NlbGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsYXllcklzU2VsZWN0ZWQgJiYgIXN1Z2dlc3Rpb25zQXZhaWxhYmxlKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJIZWxsbywgV29ybGRcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzYW1wbGVUZXh0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwibGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgIFwic2VsZWN0aW9uLWhhcy1jaGFuZ2VkXCI6IHNlbGVjdGlvbkhhc0NoYW5nZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgeyBjbGFzc05hbWU6IFwidGV4dC1sYXllci1uYXZcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwibmF2LWFycm93IGxlZnQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVRleHRMYXllck5hdmlnYXRpb24oXCJwcmV2aW91c1wiKSwgZGlzYWJsZWQ6IHNhbXBsZVRleHRJbmRleCAtIDEgPCAwIH0pLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwibmF2LWFycm93IHJpZ2h0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUZXh0TGF5ZXJOYXZpZ2F0aW9uKFwibmV4dFwiKSwgZGlzYWJsZWQ6IHNhbXBsZVRleHRJbmRleCArIDEgPj0gbWF4VGV4dEluZGV4IH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGFuZ3VhZ2VMaW50ZXIsIHsgc2FtcGxlVGV4dDogcHJvdmlkZVNhbXBsZVRleHQoKSwgc2V0U2FtcGxlVGV4dDogdXBkYXRlU291cmNlVGV4dCwgdXBkYXRlVGltZXI6IDEwMCwgY3VzdG9tRGljdGlvbmFyeTogbG9jYWxDdXN0b21EaWN0aW9uYXJ5LCBhZGRUb0RpY3Rpb25hcnk6IGFkZFRvRGljdGlvbmFyeSwgb3BlbkxpbmtzSW5OZXdUYWI6IHRydWUgfSksXG4gICAgICAgICAgICBzZWxlY3Rpb25IYXNDaGFuZ2VkICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctZm9vdGVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0biBidG4tcHJpbWFyeVwiLCBvbkNsaWNrOiAoKSA9PiBsaW50U2VsZWN0ZWRMYXllcnMoKSB9LCBcIkNoZWNrIGN1cnJlbnQgc2VsZWN0aW9uXCIpKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgTGFuZ3VhZ2VMaW50ZXJQbHVnaW47XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IEhvbWUgPSAocHJvcHMpID0+IHtcbiAgICBjb25zdCB7IHNldEFjdGl2ZVBsdWdpbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgUGx1Z2luVGlsZSA9IChwcm9wcykgPT4ge1xuICAgICAgICBjb25zdCB7IGhlYWRpbmcsIGRlc2NyaXB0aW9uLCBvbkNsaWNrLCBwbHVnaW5OYW1lIH0gPSBwcm9wcztcbiAgICAgICAgY29uc3QgdGlsZUNsYXNzZXMgPSB7XG4gICAgICAgICAgICB0YWJsZUNyZWF0b3I6IFwidGFibGUtY3JlYXRvclwiLFxuICAgICAgICAgICAgdGhlbWVTd2l0Y2hlcjogXCJ0aGVtZS1zd2l0Y2hlclwiLFxuICAgICAgICAgICAgZGVzaWduTGludGVyOiBcImRlc2lnbi1saW50ZXJcIixcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBgcGx1Z2luLXRpbGUtY29udGFpbmVyICR7dGlsZUNsYXNzZXNbcGx1Z2luTmFtZV19YCwgb25DbGljazogKCkgPT4gb25DbGljaygpIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWljb25cIiwgXCJhcmlhLWhpZGRlblwiOiBcInRydWVcIiB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwicGx1Z2luLXRpbGUtY29weVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImgzXCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWhlYWRpbmdcIiB9LCBoZWFkaW5nKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1kZXNjcmlwdGlvblwiIH0sIGRlc2NyaXB0aW9uKSkpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJob21lLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luVGlsZSwgeyBwbHVnaW5OYW1lOiBcInRhYmxlQ3JlYXRvclwiLCBoZWFkaW5nOiBcIlRhYmxlIGNyZWF0b3JcIiwgZGVzY3JpcHRpb246IFwiQ3JlYXRlIE9uZSBDb3JlIHRhYmxlcyB3aXRoIHlvdXIgY2VsbCBhbmQgY29sdW1uIHNldHRpbmdzLlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJ0YWJsZS1jcmVhdG9yXCIpIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpblRpbGUsIHsgcGx1Z2luTmFtZTogXCJ0aGVtZVN3aXRjaGVyXCIsIGhlYWRpbmc6IFwiVGhlbWUgc3dpdGNoZXJcIiwgZGVzY3JpcHRpb246IFwiQSBkYXJrIG1vZGUgb3IgbGlnaHQgbW9kZSBzZXR0aW5nIGZvciB5b3VyIGxheWVyc1wiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJ0aGVtZS1zd2l0Y2hlclwiKSB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQbHVnaW5UaWxlLCB7IHBsdWdpbk5hbWU6IFwiZGVzaWduTGludGVyXCIsIGhlYWRpbmc6IFwiRGVzaWduIGxpbnRlclwiLCBkZXNjcmlwdGlvbjogXCJDaGVja3MgeW91ciBsYXllcnMgZm9yIGNvbG9yIHN0eWxlcywgYW5kIHNvb24gd2lsbCBjaGVjayBmb3IgbGFuZ3VhZ2UgdG9vLlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJjb2xvci1saW50ZXJcIikgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImhvbWUtc3VwcG9ydFwiIH0sXG4gICAgICAgICAgICBcIlJlcG9ydCBhIGJ1Zywgc2hhcmUgYSBmZWF0dXJlIGlkZWEsIG9yIGdldCBzdXBwb3J0IGF0XCIsXG4gICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdHJvbmdcIiwgbnVsbCwgXCIjaGVscC1vbmUtY29yZVwiKSxcbiAgICAgICAgICAgIFwiLlwiKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEhvbWU7XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgY29uc3QgUGx1Z2luQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQobnVsbCk7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmNvbnN0IFJlc2l6ZXIgPSAoKSA9PiB7XG4gICAgY29uc3QgcmVzaXplclJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBbcHJlc3NlZCwgc2V0UHJlc3NlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlckRvd24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnNldFBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgICAgIHNldFByZXNzZWQodHJ1ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJVcCA9IChlKSA9PiB7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGUucG9pbnRlcklkKTtcbiAgICAgICAgICAgIHNldFByZXNzZWQoZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmUgPSAoZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXNzZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicmVzaXplXCIsIHNpemU6IHsgeDogZS5jbGllbnRYLCB5OiBlLmNsaWVudFkgfSB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBoYW5kbGVQb2ludGVyRG93bik7XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsIGhhbmRsZU1vdXNlTW92ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIGhhbmRsZVBvaW50ZXJEb3duKTtcbiAgICAgICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGhhbmRsZVBvaW50ZXJVcCk7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICB9O1xuICAgIH0sIFtwcmVzc2VkXSk7XG4gICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyByZWY6IHJlc2l6ZXJSZWYsIGNsYXNzTmFtZTogXCJyZXNpemVyXCIgfSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgUmVzaXplcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbHVtbkNvbmZpZ3VyYXRpb24gPSAoeyBjcmVhdGVUYWJsZSwgZ29Ub0RpbWVuc2lvbnNTZWxlY3Rpb24sIGFjdGl2ZUNvbCwgY29sdW1uQ29uZmlndXJhdGlvbiwgc2V0Q29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuLCBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUgPSAoYXR0cikgPT4ge1xuICAgICAgICBsZXQgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5ID0gWy4uLmNvbHVtbkNvbmZpZ3VyYXRpb25dO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXlbYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bYXR0cl0gPVxuICAgICAgICAgICAgYXR0ciAhPT0gXCJtdWx0aVZhbHVlXCIgPyBlbGVtZW50LnZhbHVlIDogZWxlbWVudC5jaGVja2VkO1xuICAgICAgICBpZiAoY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW2F0dHJdID09PSAnbWV0cmljJykge1xuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dWydhbGlnbm1lbnQnXSA9ICdyaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q29sdW1uQ29uZmlndXJhdGlvbihjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTmF2QnV0dG9uQ2xpY2sgPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicHJldmlvdXNcIiAmJiBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSAwKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwibmV4dFwiICYmXG4gICAgICAgICAgICBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSBjb2x1bW5Db25maWd1cmF0aW9uLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4oYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVDb2x1bW5PcHRpb25TZWxlY3Rpb24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSAtIDEpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLW5hdlwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyBsZWZ0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVOYXZCdXR0b25DbGljayhcInByZXZpb3VzXCIpLCBkaXNhYmxlZDogYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiA9PT0gMCB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IG5hbWU6IFwiY29sdW1uLXNlbGVjdGlvblwiLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93blwiLCBvbkNoYW5nZTogKGUpID0+IGhhbmRsZUNvbHVtbk9wdGlvblNlbGVjdGlvbihlKSwgdmFsdWU6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gKyAxIH0sIFsuLi5BcnJheShhY3RpdmVDb2wpLmtleXMoKV0ubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyBrZXk6IGluZGV4LCB2YWx1ZTogaW5kZXggKyAxLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93bi1vcHRpb25cIiB9LCBgQ29sdW1uICR7aW5kZXggKyAxfWApKTtcbiAgICAgICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJuYXYtYXJyb3cgcmlnaHQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZU5hdkJ1dHRvbkNsaWNrKFwibmV4dFwiKSwgZGlzYWJsZWQ6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gPT09IGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoIC0gMSB9KSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29uZmlndXJhdGlvbkJvZHkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpVmFsdWVEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsVHlwZSA9IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJjZWxsVHlwZVwiXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q2VsbFR5cGUgPT09IFwiVGV4dFwiIHx8XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxUeXBlID09PSBcInRleHRcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJtZXRyaWNcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keS1oZWFkaW5nc1wiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIG51bGwsIFwiQ2VsbCBmb3JtYXR0aW5nXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNlwiLCBudWxsLCBcIkNob29zZSB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGNlbGxzIGluIHRoaXMgY29sdW1uXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1uYW1lXCIgfSwgXCJDb2x1bW4gbmFtZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiwgbmFtZTogXCJjb2x1bW4tbmFtZVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tbmFtZS1pbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJlLmcuIGRhdGUsIGFjY291bnQsIHRocm91Z2hwdXQsIGV0Yy4gXCIsIGlkOiBcImNvbHVtbi1uYW1lXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwibmFtZVwiKSwgdmFsdWU6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJuYW1lXCJdIH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1jZWxsLXR5cGVcIiB9LCBcIkNlbGwgdHlwZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1pbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHsgbmFtZTogXCJhbGlnbm1lbnQtc2VsZWN0aW9uXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dCBjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXRcIiwgaWQ6IFwiY29sdW1uLWNlbGwtdHlwZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcImNlbGxUeXBlXCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImNlbGxUeXBlXCJdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiVGV4dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJsaW5rXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJMaW5rXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcIm1ldHJpY1wiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiTWV0cmljXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImVudGl0eVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiRW50aXR5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImZhdm9yaXRlXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJGYXZvcml0ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJ1c2VyXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJVc2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJDaGVja2JveFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJhY3Rpb25zXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJBY3Rpb25zXCIpKSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiY29sdW1uLWFsaWdubWVudFwiIH0sIFwiQWxpZ25tZW50XCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBuYW1lOiBcImFsaWdubWVudC1zZWxlY3Rpb25cIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0IGNvbHVtbi1jb25maWd1cmF0aW9uLWFsaWdubWVudC1pbnB1dFwiLCBpZDogXCJjb2x1bW4tYWxpZ25tZW50XCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwiYWxpZ25tZW50XCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImFsaWdubWVudFwiXSwgZGlzYWJsZWQ6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bJ2NlbGxUeXBlJ10gPT09ICdtZXRyaWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwibGVmdFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiTGVmdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJyaWdodFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiUmlnaHRcIikpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIsIGh0bWxGb3I6IFwiY29sdW1uLW11bHRpLXZhbHVlXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IFwibGFiZWxcIiB9LCBcIk11bHRpLXZhbHVlXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGB1aS1zd2l0Y2ggJHttdWx0aVZhbHVlRGlzYWJsZWQoKSA/IFwiZGlzYWJsZWRcIiA6IFwiXCJ9YCB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcImNoZWNrYm94XCIsIGlkOiBcImNvbHVtbi1tdWx0aS12YWx1ZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcIm11bHRpVmFsdWVcIiksIGNoZWNrZWQ6ICFtdWx0aVZhbHVlRGlzYWJsZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcIm11bHRpVmFsdWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZhbHNlLCBkaXNhYmxlZDogbXVsdGlWYWx1ZURpc2FibGVkKCkgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNsaWRlciByb3VuZFwiIH0pKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNhbGxzVG9BY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuXCIsIG9uQ2xpY2s6IGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uIH0sIFwiQmFja1wiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jcmVhdGUtdGFibGVcIiwgb25DbGljazogY3JlYXRlVGFibGUgfSwgXCJDcmVhdGUgdGFibGVcIikpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb25maWd1cmF0aW9uQm9keSgpLFxuICAgICAgICAgICAgcmVuZGVyQ2FsbHNUb0FjdGlvbigpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IENvbHVtbkNvbmZpZ3VyYXRpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBEaW1lbnNpb25zU2VsZWN0aW9uID0gKHsgaGFuZGxlR3JpZFNxdWFyZUNsaWNrLCBhY3RpdmVDb2wsIGFjdGl2ZVJvdywgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzLCBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFtob3ZlcmVkQ29sLCBzZXRIb3ZlcmVkQ29sXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtob3ZlcmVkUm93LCBzZXRIb3ZlcmVkUm93XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFt0YWJsZUhvdmVyZWQsIHNldFRhYmxlSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaGFuZGxlR3JpZFNxdWFyZU1vdXNlRW50ZXIgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEhvdmVyZWRDb2woY29sSW5kZXgpO1xuICAgICAgICBzZXRIb3ZlcmVkUm93KHJvd0luZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRhYmxlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCB7IGNsYXNzTmFtZTogYGdyaWQtc2VsZWN0b3IgJHt0YWJsZUhvdmVyZWQgPyBcImhvdmVyZWRcIiA6IFwiXCJ9YCwgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRUYWJsZUhvdmVyZWQodHJ1ZSksIG9uTW91c2VMZWF2ZTogKCkgPT4gc2V0VGFibGVIb3ZlcmVkKGZhbHNlKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIFsuLi5BcnJheSg4KS5rZXlzKCldLm1hcCgocm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCB7IGtleTogcm93SW5kZXggfSwgWy4uLkFycmF5KDgpLmtleXMoKV0ubWFwKChjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCB7IGNsYXNzTmFtZTogYGlucHV0X19yYWRpb2AsIGtleTogY29sSW5kZXggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwicmFkaW9cIiwgaWQ6IGB0JHtyb3dJbmRleCArIDF9eCR7Y29sSW5kZXggKyAxfWAsIG5hbWU6IFwic2VsZWN0aW9uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBgdCR7cm93SW5kZXggKyAxfXgke2NvbEluZGV4ICsgMX1gLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVNb3VzZUVudGVyKGNvbEluZGV4LCByb3dJbmRleCksIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVDbGljayhjb2xJbmRleCwgcm93SW5kZXgpLCBjbGFzc05hbWU6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2xJbmRleCA8PSBob3ZlcmVkQ29sICYmIHJvd0luZGV4IDw9IGhvdmVyZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImhvdmVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbEluZGV4IDwgYWN0aXZlQ29sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4IDwgYWN0aXZlUm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoYWN0aXZlUm93ID09PSAwICYmIGFjdGl2ZUNvbCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1gIH0pKSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGFibGUtZGltZW5zaW9ucy1jb25maWdcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwibnVtYmVyLW9mLWNvbHNcIiB9LCBcIkNvbHVtbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJudW1iZXJcIiwgbWluOiBcIjBcIiwgbWF4OiBcIjI0XCIsIG5hbWU6IFwibnVtYmVyLW9mLWNvbHNcIiwgaWQ6IFwibnVtYmVyLW9mLWNvbHNcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1jb2xzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJjb2xcIiksIHZhbHVlOiBhY3RpdmVDb2wgPT09IDAgJiYgYWN0aXZlUm93ID09PSAwID8gXCJcIiA6IGFjdGl2ZUNvbCwgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkQ29sICsgMSkudG9TdHJpbmcoKSA6IFwiKDI0IG1heClcIiB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJudW1iZXItb2Ytcm93c1wiIH0sIFwiUm93c1wiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcIm51bWJlclwiLCBtaW46IFwiMFwiLCBtYXg6IFwiMTAwXCIsIG5hbWU6IFwibnVtYmVyLW9mLXJvd3NcIiwgaWQ6IFwibnVtYmVyLW9mLXJvd3NcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1yb3dzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJyb3dcIiksIHZhbHVlOiBhY3RpdmVSb3cgPT09IDAgJiYgYWN0aXZlQ29sID09PSAwID8gXCJcIiA6IGFjdGl2ZVJvdywgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkUm93ICsgMSkudG9TdHJpbmcoKSA6IFwiKDEwMCBtYXgpXCIgfSkpKSxcbiAgICAgICAgcmVuZGVyVGFibGUoKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyIGRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDZcIiwgbnVsbCwgXCIoTWF4OiAyNCBjb2x1bW5zIGFuZCAxMDAgcm93cylcIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgZGlzYWJsZWQ6IGFjdGl2ZUNvbCA8IDEsIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnkgYnRuLWNyZWF0ZS10YWJsZVwiLCBvbkNsaWNrOiBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiB9LCBcIkNvbnRpbnVlXCIpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERpbWVuc2lvbnNTZWxlY3Rpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBDb2x1bW5Db25maWd1cmF0aW9uIGZyb20gXCIuL0NvbHVtbkNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBEaW1lbnNpb25zU2VsZWN0aW9uIGZyb20gXCIuL0RpbWVuc2lvbnNTZWxlY3Rpb25cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IFRhYmxlQ3JlYXRvciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luIH0gPSBwcm9wcztcbiAgICBjb25zdCBbYWN0aXZlVGFiXSA9IHVzZVN0YXRlKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICBjb25zdCBbYWN0aXZlU2NyZWVuLCBzZXRBY3RpdmVTY3JlZW5dID0gdXNlU3RhdGUoXCJEaW1lbnNpb25zU2VsZWN0aW9uXCIpO1xuICAgIGNvbnN0IFthY3RpdmVDb2wsIHNldEFjdGl2ZUNvbF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbYWN0aXZlUm93LCBzZXRBY3RpdmVSb3ddID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2NvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb25dID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGxldCBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBbXTtcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBbLi4uQXJyYXkoYWN0aXZlQ29sKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICBjZWxsVHlwZTogXCJUZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpVmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sdW1uQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBjb2x1bW5Db25maWd1cmF0aW9uO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5sZW5ndGggPiBhY3RpdmVDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zVG9SZW1vdmUgPSBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkubGVuZ3RoIC0gYWN0aXZlQ29sO1xuICAgICAgICAgICAgICAgIFsuLi5BcnJheShjb2x1bW5zVG9SZW1vdmUpLmtleXMoKV0ubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1RvQWRkID0gYWN0aXZlQ29sIC0gY29sdW1uQ29uZmlndXJhdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBbLi4uQXJyYXkoY29sdW1uc1RvQWRkKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFR5cGU6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldENvbHVtbkNvbmZpZ3VyYXRpb24oY29sdW1uQ29uZmlndXJhdGlvbkFycmF5KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdChoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uLCBbYWN0aXZlQ29sXSk7XG4gICAgY29uc3QgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzID0gKHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgbGV0IHsgdmFsdWUsIG1pbiwgbWF4IH0gPSBlbGVtZW50O1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBNYXRoLm1heChOdW1iZXIobWluKSwgTWF0aC5taW4oTnVtYmVyKG1heCksIE51bWJlcih2YWx1ZSkpKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiY29sXCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbChjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwicm93XCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVJvdyhjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVHcmlkU3F1YXJlQ2xpY2sgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZUNvbChjb2xJbmRleCArIDEpO1xuICAgICAgICBzZXRBY3RpdmVSb3cocm93SW5kZXggKyAxKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRhYmxlID0gKCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY3JlYXRlLXRhYmxlXCIsXG4gICAgICAgICAgICAgICAgY29sczogYWN0aXZlQ29sLFxuICAgICAgICAgICAgICAgIHJvd3M6IGFjdGl2ZVJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uOiBjb2x1bW5Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwiY3JlYXRpb24tZmVlZGJhY2tcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uID0gKCkgPT4ge1xuICAgICAgICBzZXRBY3RpdmVTY3JlZW4oXCJDb2x1bW5Db25maWd1cmF0aW9uXCIpO1xuICAgIH07XG4gICAgY29uc3QgZ29Ub0RpbWVuc2lvbnNTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVNjcmVlbihcIkRpbWVuc2lvbnNTZWxlY3Rpb25cIik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUYWJsZUNyZWF0b3IgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiRGltZW5zaW9uc1NlbGVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGltZW5zaW9uc1NlbGVjdGlvbiwgeyBoYW5kbGVHcmlkU3F1YXJlQ2xpY2s6IGhhbmRsZUdyaWRTcXVhcmVDbGljaywgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGFjdGl2ZVJvdzogYWN0aXZlUm93LCBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHM6IGhhbmRlR3JpZFNlbGVjdGlvbklucHV0cywgZ29Ub0NvbHVtbkNvbmZpZ3VyYXRpb246IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiQ29sdW1uQ29uZmlndXJhdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sdW1uQ29uZmlndXJhdGlvbiwgeyBjcmVhdGVUYWJsZTogY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uOiBnb1RvRGltZW5zaW9uc1NlbGVjdGlvbiwgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGNvbHVtbkNvbmZpZ3VyYXRpb246IGNvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb246IHNldENvbHVtbkNvbmZpZ3VyYXRpb24gfSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRhYmxlLWNyZWF0b3JcIl07XG4gICAgICAgIHJldHVybiB0YWJzLm1hcCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXMgPSBbXCJ0YWItbmF2aWdhdGlvbi10YWJcIl07XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICBsZXQgdGFiTGFiZWwgPSB0YWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0YWIuc3BsaXQoXCItXCIpLmpvaW4oXCIgXCIpLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVUYWIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXMucHVzaChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBrZXk6IGluZGV4IH0sIHRhYkxhYmVsKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgcmVuZGVyVGFibGVDcmVhdG9yKCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNyZWF0b3I7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmltcG9ydCBMaWdodE1vZGVUaHVtYm5haWwgZnJvbSBcIi4uL2Fzc2V0cy9saWdodC1tb2RlLXRodW1ibmFpbC5zdmdcIjtcbmltcG9ydCBEYXJrTW9kZVRodW1ibmFpbCBmcm9tIFwiLi4vYXNzZXRzL2RhcmstbW9kZS10aHVtYm5haWwuc3ZnXCI7XG5jb25zdCBUaGVtZVN3aXRjaGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb24sIGxvYWRpbmdMaWdodFN3aXRjaCwgbG9hZGluZ0RhcmtTd2l0Y2ggfSA9IHN0YXRlO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdMaWdodFN3aXRjaCwgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdEYXJrU3dpdGNoLCBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB7IHNldEFjdGl2ZVBsdWdpbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlnaHRNb2RlUmFkaW9PcHRpb24gPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgZGFya01vZGVSYWRpb09wdGlvbiA9IHVzZVJlZihudWxsKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoKGN1cnJlbnRTZWxlY3Rpb24gPT09IG51bGwgfHwgY3VycmVudFNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpID4gW10pIHtcbiAgICAgICAgICAgIGxpZ2h0TW9kZVJhZGlvT3B0aW9uLmN1cnJlbnQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGFya01vZGVSYWRpb09wdGlvbi5jdXJyZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sIFtjdXJyZW50U2VsZWN0aW9uXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbG9hZGluZ0xpZ2h0U3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdMaWdodFN3aXRjaChmYWxzZSk7XG4gICAgfSwgW2xvYWRpbmdMaWdodFN3aXRjaF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmdEYXJrU3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKGZhbHNlKTtcbiAgICB9LCBbbG9hZGluZ0RhcmtTd2l0Y2hdKTtcbiAgICBjb25zdCBoYW5kbGVUYWJDbGljayA9IChuYW1lT2ZUYWIpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKG5hbWVPZlRhYik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRoZW1lLXN3aXRjaGVyXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCIsIFwiYWN0aXZlXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IHRhYkNsYXNzZXNPdXRwdXQsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVRhYkNsaWNrKHRhYiksIGtleTogaW5kZXggfSwgXCJUaGVtZSBzd2l0Y2hlclwiKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0RGFya1RoZW1lID0gKCkgPT4ge1xuICAgICAgICBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwidGhlbWUtc3dpdGNoZXItdG8tZGFya1wiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0TGlnaHRUaGVtZSA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2godHJ1ZSk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJ0aGVtZS1zd2l0Y2hlci10by1saWdodFwiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zd2l0Y2hlci1oZWFkaW5nXCIgfSwgXCJDaG9vc2UgYSB0aGVtZVwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uXCIgfSwgXCJTZWxlY3Qgc29tZSBsYXllcnMsIHRoZW4gY2hvc2UgYSB0aGVtZSBiZWxvdy5cIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1vcHRpb25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInJhZGlvXCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXRcIiwgaWQ6IFwibGlnaHQtbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGxpZ2h0TW9kZVJhZGlvT3B0aW9uIH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImxpZ2h0LW1vZGUtY2hlY2tib3hcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1pbnB1dC1sYWJlbFwiLCBvbkNsaWNrOiAoKSA9PiBzZXRMaWdodFRoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IExpZ2h0TW9kZVRodW1ibmFpbCwgYWx0OiBcIlRodW1ibmFpbCBvZiBsaWdodCBzY3JlZW4gZXhhbXBsZVwiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHRcIiB9LCBcIkxpZ2h0IG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdMaWdodFN3aXRjaCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWxvYWRlclwiIH0pKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tb3B0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJyYWRpb1wiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWlucHV0XCIsIGlkOiBcImRhcmstbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGRhcmtNb2RlUmFkaW9PcHRpb24gfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiZGFyay1tb2RlLWNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWxcIiwgb25DbGljazogKCkgPT4gc2V0RGFya1RoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IERhcmtNb2RlVGh1bWJuYWlsLCBhbHQ6IFwiVGh1bWJuYWlsIG9mIGRhcmsgc2NyZWVuIGV4YW1wbGVcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2VcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1sYWJlbC10ZXh0XCIgfSwgXCJEYXJrIG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdEYXJrU3dpdGNoICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItbG9hZGVyXCIgfSkpKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGhlbWVTd2l0Y2hlcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgQXBwIGZyb20gJy4vY29tcG9uZW50cy9BcHAnO1xuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwLCBudWxsKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWN0LXBhZ2UnKSk7XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3VpLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIi8qIVxuICogQ2hlY2sgaWYgdHdvIG9iamVjdHMgb3IgYXJyYXlzIGFyZSBlcXVhbFxuICogKGMpIDIwMjEgQ2hyaXMgRmVyZGluYW5kaSwgTUlUIExpY2Vuc2UsIGh0dHBzOi8vZ29tYWtldGhpbmdzLmNvbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMSBUaGUgZmlyc3QgaXRlbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMiBUaGUgc2Vjb25kIGl0ZW1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGV5J3JlIGVxdWFsIGluIHZhbHVlXG4gKi9cbmNvbnN0IGlzRXF1YWwgPSAob2JqMSwgb2JqMikgPT4ge1xuICAvKipcbiAgICogTW9yZSBhY2N1cmF0ZWx5IGNoZWNrIHRoZSB0eXBlIG9mIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvYmogVGhlIG9iamVjdFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICBUaGUgb2JqZWN0IHR5cGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldFR5cGUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwoKSB7XG4gICAgLy8gQ2hlY2sgbGVuZ3RoXG4gICAgaWYgKG9iajEubGVuZ3RoICE9PSBvYmoyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqMS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0VxdWFsKG9iajFbaV0sIG9iajJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlT2JqZWN0c0VxdWFsKCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhvYmoxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBvYmplY3RcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoxLCBrZXkpKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVGdW5jdGlvbnNFcXVhbCgpIHtcbiAgICByZXR1cm4gb2JqMS50b1N0cmluZygpID09PSBvYmoyLnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVQcmltYXRpdmVzRXF1YWwoKSB7XG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XG4gIH1cblxuICAvLyBHZXQgdGhlIG9iamVjdCB0eXBlXG4gIGxldCB0eXBlID0gZ2V0VHlwZShvYmoxKTtcblxuICAvLyBJZiB0aGUgdHdvIGl0ZW1zIGFyZSBub3QgdGhlIHNhbWUgdHlwZSwgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlICE9PSBnZXRUeXBlKG9iajIpKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBiYXNlZCBvbiB0eXBlXG4gIGlmICh0eXBlID09PSBcImFycmF5XCIpIHJldHVybiBhcmVBcnJheXNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIGFyZU9iamVjdHNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gYXJlRnVuY3Rpb25zRXF1YWwoKTtcbiAgcmV0dXJuIGFyZVByaW1hdGl2ZXNFcXVhbCgpO1xufTtcblxuZXhwb3J0IHsgaXNFcXVhbCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== >>>>>>> f3ba81b (fix(TableCreator): Adjust colors and placeholders) ======= //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2FuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYmV0d2Vlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYm9vbGVhblNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZlR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuU2VxdWVuY2VPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY29tcG9uZW50V2l0aE5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2Rpc2FsbG93ZWRJZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvZWxlbWVudFR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9leHBsaWNpdE51bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9yZW5kZXJhYmxlQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9oZWxwZXJzL3dyYXBWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9rZXlzT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlUHJvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9uQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL25vbk5lZ2F0aXZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvbm9uTmVnYXRpdmVOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL251bWVyaWNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ByZWRpY2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3JlZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVxdWlyZWRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVzdHJpY3RlZFByb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NlcXVlbmNlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NoYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9zdHJpbmdFbmRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvc3RyaW5nU3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvdW5pcXVlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3VuaXF1ZUFycmF5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ZhbHVlc09mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC93aXRoU2hhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5maW5kL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2Nocm9tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29uc29saWRhdGVkLWV2ZW50cy9saWIvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zdHlsZXMvdWkuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb2N1bWVudC5jb250YWlucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9jdW1lbnQuY29udGFpbnMvcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvSW50ZWdlck9ySW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9JbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Ficy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvNS9mbG9vci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tYXhTYWZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9yZWdleFRlc3Rlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXMyMDE1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb25zLWhhdmUtbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXIvbGliL0xhbmd1YWdlTGludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMtZXhhY3QvYnVpbGQvaGVscGVycy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzLWV4YWN0L2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWN0aXZpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9haXJwbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtb2N0YWdvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsZXJ0LXRyaWFuZ2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tY2VudGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tanVzdGlmeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsaWduLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hbGlnbi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FwZXJ0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJjaGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24tY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC1jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy11cC1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXQtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2F3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmFyLWNoYXJ0LTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXItY2hhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmF0dGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JlbGwtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmVsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JsdWV0b290aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JvbGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLW9wZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYm9va21hcmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9icmllZmNhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYWxlbmRhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NhbWVyYS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYW1lcmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbi11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NoZXZyb25zLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbnMtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nocm9tZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NsaXBib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQtZHJpenpsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLWxpZ2h0bmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLXJhaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jbG91ZC1zbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29kZXBlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvZGVzYW5kYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29mZmVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvbW1hbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb21wYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29weS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1sZWZ0LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItbGVmdC11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1yaWdodC1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcHUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcmVkaXQtY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcm9zc2hhaXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kYXRhYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Rpc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kaXZpZGUtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZGl2aWRlLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RvbGxhci1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZG93bmxvYWQtY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kb3dubG9hZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RyaWJiYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZHJvcGxldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9leHRlcm5hbC1saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZXllLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2V5ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZhY2Vib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmFzdC1mb3J3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmVhdGhlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpZ21hLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsZS1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtcGx1cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9maWxtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmxhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZm9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJhbWVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0LWJyYW5jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2dpdC1jb21taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0aHViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0bGFiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2xvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ncmlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGFyZC1kcml2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWFkcGhvbmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGVhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWxwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hleGFnb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ob21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbmJveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2luZm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbnN0YWdyYW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pdGFsaWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXllcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXlvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saWZlLWJ1b3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbGlua2VkaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9hZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYWlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWFwLXBpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21heGltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYXhpbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21laC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tZXNzYWdlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWljLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbmltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9taW5pbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW9uaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLWhvcml6b250YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLXZlcnRpY2FsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW91c2UtcG9pbnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tdXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24tMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhcGVyY2xpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGVuLXRvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wZXJjZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWZvcndhcmRlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWluY29taW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtbWlzc2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb3V0Z29pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9waG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BpZS1jaGFydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsYXktY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsdXMtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGx1cy1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG9ja2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG93ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wcmludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZWZyZXNoLWNjdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3JlZnJlc2gtY3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXdpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yb3RhdGUtY2N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcm90YXRlLWN3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcnNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2F2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NjaXNzb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NlcnZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hhcmUtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoYXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hpZWxkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoaWVsZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWJhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWNhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zaHVmZmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2lkZWJhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtYmFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtZm9yd2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NsYWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2xhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc21hcnRwaG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NtaWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc3BlYWtlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N0YXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdG9wLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bnJpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWJsZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YXJnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90ZXJtaW5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RoZXJtb21ldGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdGh1bWJzLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90aHVtYnMtdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90b2dnbGUtbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RvZ2dsZS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Rvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmFzaC0yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVsbG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVuZGluZy1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJlbmRpbmctdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmlhbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RydWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VtYnJlbGxhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5sb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLWNsb3VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlci1jaGVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VzZXItbWludXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXBsdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvaWNlbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdm9sdW1lLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92b2x1bWUteC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3dhdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2lmaS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy93aWZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2luZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3gtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveW91dHViZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3phcC1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96b29tLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvem9vbS1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvQnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvRGlzY2xvc3VyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSWNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L0xhYmVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHRhcmVhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9UaXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RpdGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3M/NTMwYiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvdHJhY2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9kYXJrLW1vZGUtdGh1bWJuYWlsLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1kYXJrLWRlc2lnbi1saW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGVzaWduLWxpbnRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1oZWxwLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWluZm8uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItYm9vbGVhbi1vcGVyYXRpb24uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItZWxsaXBzZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci1saW5lLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXBvbHlnb24uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItcmVjdGFuZ2xlLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXRleHQuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbW9yZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLXRoZW1lLXN3aXRjaGVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9saWdodC1tb2RlLXRodW1ibmFpbC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0FwcC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9Db2xvckxpbnRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9Db2xvclRpbGUudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvRGVzaWduTGludGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvRGVzaWduTGludGVyL0xhbmd1YWdlTGludGVyUGx1Z2luLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvSG9tZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1BsdWdpbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1Jlc2l6ZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UYWJsZUNyZWF0b3IvQ29sdW1uQ29uZmlndXJhdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RhYmxlQ3JlYXRvci9EaW1lbnNpb25zU2VsZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvVGFibGVDcmVhdG9yL1RhYmxlQ3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RoZW1lU3dpdGNoZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvc3R5bGVzL3VpLmNzcz8zNGM3Iiwid2VicGFjazovLy8uL3NyYy9hcHAvdXRpbGl0eS1mdW5jdGlvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FB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O0FBQ2xHO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0NBQWtDLEVBQUUsYUFBYSxFQUFFO0FBQ25ELG1DQUFtQyxFQUFFLGFBQWEsRUFBRTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxnQkFBZ0I7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdDQUF3QywyQkFBMkI7QUFDbkUsd0NBQXdDLHFDQUFxQzs7QUFFN0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxFQUFFLEVBQUU7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1EQUFtRCxpQkFBaUI7QUFDcEU7O0FBRUEsb0NBQW9DLHdCQUF3QjtBQUM1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiw4QkFBOEI7QUFDekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLDZCQUE2QjtBQUN6RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsYUFBYTtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZUFBZTtBQUN4QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywwQkFBMEI7QUFDbEUsd0NBQXdDLDBCQUEwQjtBQUNsRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHlEQUF5RCxZQUFZO0FBQ3JFLFNBQVM7QUFDVDtBQUNBLHlEQUF5RCxZQUFZO0FBQ3JFLFNBQVM7QUFDVDtBQUNBOztBQUVBLGdDQUFnQyxnQ0FBZ0M7QUFDaEU7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7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QUFDQTs7QUFFQSxLQUFLLEtBQTZCO0FBQ2xDO0FBQ0E7QUFDQSxFQUFFLFVBQVUsSUFBNEU7QUFDeEY7QUFDQSxFQUFFLGlDQUFxQixFQUFFLG1DQUFFO0FBQzNCO0FBQ0EsR0FBRztBQUFBLG9HQUFDO0FBQ0osRUFBRSxNQUFNLEVBRU47QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7O0FDekREO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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QUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Es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ckMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw0RUFBdUI7QUFDL0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyx3SEFBNkM7QUFDckQsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRUFBb0I7QUFDNUIsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FB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YSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxVQUFVLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLFVBQVUsVUFBVSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sVUFBVSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLFFBQVEsS0FBSyxVQUFVLFFBQVEsS0FBSyxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsU0FBUyxLQUFLLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FB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WSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLFdBQVcsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sTUFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxNQUFNLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxZQUFZLGFBQWEsV0FBVyxZQUFZLFdBQVcsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsT0FBTyxNQUFNLFVBQVUsTUFBTSxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksV0FBVyxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxNQUFNLE1BQU0sVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksYUFBYSxNQUFNLFlBQVksYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFVBQVUsVUFBVSxVQUFVLE1BQU0sVUFBVSxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxhQUFhLE1BQU0sVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxNQUFNLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sV0FBVyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxhQUFhLE1BQU0sVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxPQUFPLE1BQU0sVUFBVSxZQUFZLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxNQUFNLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsS0FBSyxPQUFPLGFBQWEsV0FBVyxNQUFNLEtBQUssWUFBWSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxNQUFNLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxXQUFXLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLFNBQVMsS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxhQUFhLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxNQUFNLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGNBQWMsYUFBYSxPQUFPLEtBQUssS0FBSyxZQUFZLE1BQU0sTUFBTSxZQUFZLE1BQU0sVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsZ0NBQWdDLGlCQUFpQixjQUFjLDRLQUE0SyxHQUFHLGtC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QSxnSEFBZ0g7QUFDaEg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQSxvQkFBb0I7O0FBRXBCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsRUFBRTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7O0FBRVI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROztBQUVSO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHdCQUF3QjtBQUN4QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1QseUJBQXlCO0FBQ3pCO0FBQ0EsU0FBUztBQUNULHlCQUF5QjtBQUN6QjtBQUNBLFNBQVM7QUFDVCxrQ0FBa0M7QUFDbEM7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCO0FBQzVCO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEOztBQUUxRDtBQUNBOztBQUVBO0FBQ0Esd0RBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFROzs7QUFHUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjs7O0FBR2pCO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyxFQUFFO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQSw0QkFBNEI7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlFQUFpRTtBQUNq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QUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwySEFBMkgsNkJBQTZCO0FBQ3hKO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtGQUFrRjtBQUNsRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPLDBDQUEwQzs7O0FBR2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtGQUErRjtBQUMvRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLDBDQUEwQzs7O0FBR2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZFQUE2RTs7QUFFN0U7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzSkFBc0osaUJBQWlCO0FBQ3ZLLE9BQU87QUFDUCxzSkFBc0osaUJBQWlCLHdEQUF3RCxtQkFBbUIsZ0JBQWdCLDhCQUE4QjtBQUNoUzs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxvR0FBb0csR0FBRzs7QUFFdkc7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLGVBQWU7QUFDM0I7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0VBQXNFOztBQUV0RTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2Qzs7QUFFN0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDBCQUEwQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixXQUFXLE9BQU87QUFDbEIsWUFBWSxVQUFVO0FBQ3RCOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTs7QUFFTjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Qsc0NBQXNDOztBQUV0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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxzRUFBc0U7QUFDdEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLGdCQUFnQjtBQUNqQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2Qzs7QUFFN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlEQUF5RDs7QUFFekQsb0JBQW9CO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7O0FBR0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhHQUE4Rzs7QUFFOUc7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIscUJBQXFCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLGVBQWUsZUFBZTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxPQUFPO0FBQ25CO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0JBQStCO0FBQy9CLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZ0NBQWdDO0FBQ2hDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQixLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQ0FBMEM7QUFDMUM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLGlEQUFpRDtBQUNqRDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7O0FBRUEsbUNBQW1DOztBQUVuQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQSwrRUFBK0U7QUFDL0U7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0EsWUFBWSxRQUFRO0FBQ3BCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkdBQTZHO0FBQzdHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVOztBQUVWO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdILGlCQUFpQixrQkFBa0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxZQUFZO0FBQ1o7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxXQUFXLFdBQVc7QUFDdEIsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFdBQVc7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFdBQVcsT0FBTztBQUNsQjs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhFQUE4RTtBQUM5RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxtQkFBbUIsc0JBQXNCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtB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QzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0REFBNEQ7QUFDNUQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsNEJBQTRCO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUssMkVBQTJFLG9HQUFvRyxrQ0FBa0M7QUFDdE47QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSyxvR0FBb0c7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtFQUFrRTs7QUFFbEUsOEZBQThGO0FBQzlGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDRCQUE0QjtBQUNqRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkNBQTZDO0FBQzdDOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0Isd0JBQXdCO0FBQzVDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDO0FBQ3JDO0FBQ0EsK0VBQStFO0FBQy9FO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBLGFBQWE7OztBQUdiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLDB2QkFBMHZCOztBQUUxdkI7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQyx1REFBdUQ7O0FBRXZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQ0FBaUM7O0FBRWpDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsUUFBUSxjQUFjO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQztBQUMxQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBLENBQUM7QUFDRDtBQUNBOztBQUVBO0FBQ0EsNENBQTRDO0FBQzVDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssK0NBQStDO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7OztBQUdBLHlFQUF5RTtBQUN6RTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBIQUEwSDtBQUMxSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1FQUFtRTs7QUFFbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0QsMERBQTBEOztBQUUxRCxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBLDBIQUEwSDtBQUMxSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RTtBQUN6RTs7QUFFQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtRUFBbUU7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwQkFBMEI7QUFDMUI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQkFBMkI7O0FBRTNCO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFtQjtBQUNuQzs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBOEQ7QUFDOUQscURBQXFEO0FBQ3JELDJEQUEyRDtBQUMzRCwyQ0FBMkM7QUFDM0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEOztBQUVyRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhDQUE4Qzs7QUFFOUM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCOztBQUUzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOERBQThEOztBQUU5RCwyREFBMkQ7QUFDM0Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQseURBQXlEO0FBQzVHLDZCQUE2Qjs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6Qzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTLHlCQUF5Qjs7O0FBR2xDO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVCx5QkFBeUI7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNENBQTRDOztBQUU1Qzs7QUFFQTtBQUNBLGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0Esa0NBQWtDOztBQUVsQztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7OztBQUdUO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixvQkFBb0I7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0QjtBQUM1Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxrR0FBa0c7QUFDbEcsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2SUFBNkk7O0FBRTdJO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsa0VBQWtFLDRDQUE0QztBQUM5Rzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQSxxREFBcUQ7QUFDckQ7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0lBQWtJO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrSUFBa0k7QUFDbEk7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DOztBQUVwQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhKQUE4Six5Q0FBeUM7QUFDdk07QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQix3QkFBd0I7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsa0RBQWtEO0FBQzVEO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksNkJBQTZCO0FBQ3pDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0wsdUVBQXVFOztBQUV2RSxVQUFVLDZCQUE2QjtBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQSxjQUFjLGFBQWE7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFVBQVUsaUNBQWlDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMLHVFQUF1RTs7QUFFdkUsVUFBVSxZQUFZO0FBQ3RCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQ7O0FBRTdEO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBLDZDQUE2Qzs7QUFFN0M7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRCQUE0Qjs7QUFFNUIsb0NBQW9DOztBQUVwQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssMkNBQTJDO0FBQ2hEOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsa0NBQWtDO0FBQ2xDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkNBQTJDOztBQUUzQyxxQ0FBcUM7QUFDckM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsaUNBQWlDO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7O0FBRW5DOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRyxvQ0FBb0M7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHLHVCQUF1QjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EseUtBQXlLLDBDQUEwQztBQUNuTjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxxRUFBcUU7QUFDckU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLGdCQUFnQjtBQUN6QixTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7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O0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDOztBQUV0QztBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMENBQTBDOztBQUUxQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxnREFBZ0Q7O0FBRWhEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdUJBQXVCLDRDQUE0QztBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQSxHQUFHOzs7QUFHSCxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCx3Q0FBd0M7O0FBRXhDO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzREFBc0Q7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnR0FBZ0c7QUFDaEc7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILCtGQUErRjtBQUMvRjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEseU5BQXlOLEdBQUc7O0FBRTVOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHFCQUFxQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsWUFBWTtBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7OztBQUdYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwrQ0FBK0M7O0FBRS9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsK0JBQStCO0FBQy9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxtSEFBbUg7QUFDbkg7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBOzs7QUFHQTtBQUNBLGFBQWE7QUFDYjtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw0REFBNEQ7O0FBRTVEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sb0NBQW9DO0FBQzNDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsOENBQThDO0FBQzlDO0FBQ0E7O0FBRUEscUhBQXFIOztBQUVySCwrQ0FBK0M7QUFDL0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7OztBQUdiO0FBQ0E7O0FBRUEsb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDO0FBQzlDOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOztBQUViOztBQUVBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHlEQUF5RDtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjtBQUNuQjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEscUVBQXFFOztBQUVyRSxnRUFBZ0U7QUFDaEU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxXQUFXOztBQUVYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVDQUF1QztBQUN2Qzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvREFBb0Q7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzRkFBc0Y7O0FBRXRGO0FBQ0E7QUFDQSxtQkFBbUI7OztBQUduQjtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QjtBQUM5QjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQSwrREFBK0Q7O0FBRS9EO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJDQUEyQztBQUMzQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQSxnSEFBZ0g7QUFDaEg7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QyxLQUFLLE1BQU0sRUFLTjtBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLCtDQUErQzs7QUFFL0MsNkJBQTZCO0FBQzdCOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7QUFFUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtDQUFrQzs7QUFFbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFIQUFxSDs7QUFFckg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsNERBQTREO0FBQzVEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOzs7QUFHQSxzRUFBc0U7O0FBRXRFO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0EsS0FBSyxrQ0FBa0M7QUFDdkM7OztBQUdBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEseUVBQXlFOztBQUV6RTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7OztBQUdGO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLHlOQUF5TixxQ0FBcUMsd0ZBQXdGLDJCQUEyQixxQkFBcUIsUUFBUSxZQUFZO0FBQzFaLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTyw0SUFBNEk7QUFDbko7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQSxxREFBcUQ7O0FBRXJEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCOztBQUU3QjtBQUNBOztBQUVBLDRDQUE0QztBQUM1Qzs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHLCtCQUErQjtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRywrQkFBK0I7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7QUFFUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHdDQUF3Qzs7QUFFeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvREFBb0Q7QUFDcEQ7QUFDQTs7QUFFQTtBQUNBLHVDQUF1Qzs7QUFFdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCOztBQUV0QixpQ0FBaUM7O0FBRWpDLDhCQUE4Qjs7QUFFOUIsMEJBQTBCOztBQUUxQiw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxREFBcUQ7O0FBRXJELGtEQUFrRDs7QUFFbEQsd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7QUFDOUM7O0FBRUEsNkNBQTZDOztBQUU3Qyw2Q0FBNkM7O0FBRTdDO0FBQ0EsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0EsK0JBQStCO0FBQy9COztBQUVBLGtEQUFrRDtBQUNsRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQSxvREFBb0Q7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7QUFDRCxRQUFRO0FBQ1I7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQSwrQ0FBK0M7O0FBRS9DLDRHQUE0Rzs7QUFFNUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDBDQUEwQztBQUMxQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QztBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJGQUEyRjs7QUFFM0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1FQUFtRTs7O0FBR25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQSxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMLDhDQUE4QztBQUM5QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQzs7QUFFbkM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBOztBQUVBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSw0Q0FBNEM7O0FBRTVDO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQzs7QUFFM0M7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSx3RUFBd0U7O0FBRXhFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBLHdDQUF3QztBQUN4QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSw0Q0FBNEM7OztBQUc1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVFQUF1RTs7QUFFdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMLGdDQUFnQzs7QUFFaEM7QUFDQSxHQUFHLGdDQUFnQzs7O0FBR25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsOEJBQThCOztBQUU5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyw0Q0FBNEM7QUFDL0M7OztBQUdBLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBLHlDQUF5QztBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEOztBQUVsRCx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyw2QkFBNkI7OztBQUdsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUwsc0JBQXNCO0FBQ3RCOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdILHFDQUFxQzs7QUFFckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx1QkFBdUIsNEJBQTRCO0FBQ25EO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUEseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7O0FBRXpDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsaUJBQWlCLDJCQUEyQjtBQUM1QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUEsa0JBQWtCLDBCQUEwQjtBQUM1QztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQSwyQ0FBMkM7O0FBRTNDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjtBQUMzQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdCQUF3QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7O0FBRXpCOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0Es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QUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdDQUFnQzs7QUFFaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUMsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHlEQUF5RDtBQUN6RDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCOztBQUV4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQjs7QUFFbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNILCtDQUErQzs7QUFFL0MsdUNBQXVDO0FBQ3ZDOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3Qzs7QUFFeEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMkVBQTJFOztBQUUzRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0U7QUFDdEU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVFQUF1RTtBQUN2RTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0RBQWtEO0FBQ2xEOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHlFQUF5RTtBQUN6RTtBQUNBOztBQUVBLDZDQUE2QztBQUM3Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsK0RBQStEOztBQUUvRDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQSxrQ0FBa0M7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTCxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLCtEQUErRCxPQUFPOztBQUV0RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsMkJBQTJCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtRkFBbUY7O0FBRW5GO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxpTUFBaU0sY0FBYztBQUMvTTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsS0FBSyxFQUFFO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQSw2RUFBNkU7O0FBRTdFOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQXVEO0FBQ0Y7QUFDUztBQUNFO0FBQ0U7QUFDSjtBQUNFO0FBQ047QUFDRTtBQUNUO0FBQ0k7QUFDRjtBQUNrQjtBQUNKO0FBQ0U7QUFDWDtBQUNhO0FBQ2I7QUFDZTtBQUNiO0FBQ087QUFDSjtBQUNFO0FBQ1g7QUFDRjtBQUNIO0FBQ1U7QUFDSDtBQUNjO0FBQ2pCO0FBQ0M7QUFDUDtBQUNVO0FBQ1Y7QUFDUztBQUNUO0FBQ1E7QUFDVjtBQUNZO0FBQ0Y7QUFDRztBQUNQO0FBQ0o7QUFDZTtBQUNBO0FBQ2I7QUFDYTtBQUNBO0FBQ0U7QUFD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O0FBRUE7QUFDQSxtREFBbUQ7O0FBRW5EOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsRUFBRTtBQUNiLFdBQVcsRUFBRTtBQUNi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Q0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssRUFBRTs7QUFFUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCOztBQUUxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2QkFBNkI7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBIQUEwSDtBQUMxSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBOztBQUVBLG1FQUFtRTs7QUFFbkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGFBQWE7QUFDeEIsV0FBVyxFQUFFO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBEQUEwRDtBQUMxRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUMsa0JBQWtCO0FBQ25EO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUI7O0FBRWpCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFF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QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULGdDQUFnQztBQUNoQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7OztBQzFWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVhOztBQUViLElBQUksSUFBcUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtB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QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7Ozs7Ozs7Ozs7OztBQ3JvQmE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDO0FBQ0QsbUJBQW1CLG1CQUFPLENBQUMsNkZBQWdDO0FBQzNEOzs7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QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUErQjtBQUNPO0FBQ0g7QUFDbkMsZ0RBQWUsQ0FBQyxtREFBbUIsQ0FBQyx1REFBRzs7Ozs7Ozs7Ozs7OztBQ0h2QztBQUFBO0FBQUE7QUFBQTtBQUErRjtBQUMvRixZQUEwRjs7QUFFMUY7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLDBHQUFHLENBQUMsbUZBQU87Ozs7QUFJVCxrSkFBTyxhQUFhLEU7Ozs7Ozs7Ozs7OztBQ1puQztBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxFQUFFO0FBQ2QsWUFBWSxFQUFFO0FBQ2QsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYyxPQUFPO0FBQ3JCLGNBQWMsT0FBTztBQUNyQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsaUJBQWlCO0FBQ3BDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRW1CIiwiZmlsZSI6InVpLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvYXBwL2luZGV4LnRzeFwiKTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBhbmRWYWxpZGF0b3I7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGFuZFZhbGlkYXRvcih2YWxpZGF0b3JzKSB7XG4gIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYW5kJztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhbmQ6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoIDw9IDEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignYW5kOiAyIG9yIG1vcmUgdmFsaWRhdG9ycyBhcmUgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBhbmQoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICB2YWxpZGF0b3JzLnNvbWUoZnVuY3Rpb24gKHZhbGlkYXRvckZuKSB7XG4gICAgICBmaXJzdEVycm9yID0gdmFsaWRhdG9yRm4uYXBwbHkodm9pZCAwLCBhcmdzKTtcbiAgICAgIHJldHVybiBmaXJzdEVycm9yICE9IG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0RXJyb3IgPT0gbnVsbCA/IG51bGwgOiBmaXJzdEVycm9yO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gYW5kSXNSZXF1aXJlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RFcnJvciA9IG51bGw7XG4gICAgdmFsaWRhdG9ycy5zb21lKGZ1bmN0aW9uICh2YWxpZGF0b3JGbikge1xuICAgICAgZmlyc3RFcnJvciA9IHZhbGlkYXRvckZuLmlzUmVxdWlyZWQuYXBwbHkodmFsaWRhdG9yRm4sIGFyZ3MpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciA9PSBudWxsID8gbnVsbCA6IGZpcnN0RXJyb3I7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgbmFtZSwgdmFsaWRhdG9ycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hbmQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGJldHdlZW5WYWxpZGF0b3I7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwib2JqZWN0LmVudHJpZXNcIikpO1xuXG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG5cbnZhciBfdmFsdWVzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbHVlc09mXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkoYXJyLCBpKSB7IHJldHVybiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyLCBpKSB8fCBfbm9uSXRlcmFibGVSZXN0KCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwidW5kZWZpbmVkXCIgfHwgIShTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGFycikpKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX2UgPSB1bmRlZmluZWQ7IHRyeSB7IGZvciAodmFyIF9pID0gYXJyW1N5bWJvbC5pdGVyYXRvcl0oKSwgX3M7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxuZnVuY3Rpb24gbnVtYmVyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIG11c3QgYmUgYSBub24tTmFOIG51bWJlci5cIikpO1xufVxuXG5mdW5jdGlvbiBudW1iZXJPclByb3BzRnVuYyhwcm9wcywgcHJvcE5hbWUpIHtcbiAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIjogYSBmdW5jdGlvbiwgb3IgYSBub24tTmFOIG51bWJlciBpcyByZXF1aXJlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIGxvd2VyQ29tcGFyZSh2YWx1ZSwgX3JlZikge1xuICB2YXIgZ3QgPSBfcmVmLmd0LFxuICAgICAgZ3RlID0gX3JlZi5ndGU7XG5cbiAgaWYgKHR5cGVvZiBndCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWUgPiBndDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ3RlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZSA+PSBndGU7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gdXBwZXJDb21wYXJlKHZhbHVlLCBfcmVmMikge1xuICB2YXIgbHQgPSBfcmVmMi5sdCxcbiAgICAgIGx0ZSA9IF9yZWYyLmx0ZTtcblxuICBpZiAodHlwZW9mIGx0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZSA8IGx0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBsdGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlIDw9IGx0ZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBncmVhdGVyVGhhbkVycm9yKF9yZWYzKSB7XG4gIHZhciBndCA9IF9yZWYzLmd0LFxuICAgICAgZ3RlID0gX3JlZjMuZ3RlO1xuXG4gIGlmICh0eXBlb2YgZ3QgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFwiZ3JlYXRlciB0aGFuIFwiLmNvbmNhdChndCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGd0ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gXCJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gXCIuY29uY2F0KGd0ZSk7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGxlc3NUaGFuRXJyb3IoX3JlZjQpIHtcbiAgdmFyIGx0ID0gX3JlZjQubHQsXG4gICAgICBsdGUgPSBfcmVmNC5sdGU7XG5cbiAgaWYgKHR5cGVvZiBsdCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gXCJsZXNzIHRoYW4gXCIuY29uY2F0KGx0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbHRlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImxlc3MgdGhhbiBvciBlcXVhbCB0byBcIi5jb25jYXQobHRlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZXJyb3JNZXNzYWdlKGNvbXBvbmVudE5hbWUsIHByb3BOYW1lLCBvcHRzKSB7XG4gIHZhciBlcnJvcnMgPSBbZ3JlYXRlclRoYW5FcnJvcihvcHRzKSwgbGVzc1RoYW5FcnJvcihvcHRzKV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyBhbmQgJyk7XG4gIHJldHVybiBcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBcIikuY29uY2F0KGVycm9ycyk7XG59XG5cbmZ1bmN0aW9uIHByb3BzVGh1bmtpZnkob3B0cykge1xuICByZXR1cm4gKDAsIF9vYmplY3RbXCJkZWZhdWx0XCJdKShvcHRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgX3JlZjUpIHtcbiAgICB2YXIgX3JlZjYgPSBfc2xpY2VkVG9BcnJheShfcmVmNSwgMiksXG4gICAgICAgIGtleSA9IF9yZWY2WzBdLFxuICAgICAgICB2YWx1ZSA9IF9yZWY2WzFdO1xuXG4gICAgdmFyIG51bWJlclRodW5rID0gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyA/IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IDogdmFsdWU7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBudW1iZXJUaHVuaykpO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGludm9rZVdpdGhQcm9wcyhvcHRzVGh1bmtzLCBwcm9wcykge1xuICByZXR1cm4gKDAsIF9vYmplY3RbXCJkZWZhdWx0XCJdKShvcHRzVGh1bmtzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgX3JlZjcpIHtcbiAgICB2YXIgX3JlZjggPSBfc2xpY2VkVG9BcnJheShfcmVmNywgMiksXG4gICAgICAgIGtleSA9IF9yZWY4WzBdLFxuICAgICAgICB0aHVuayA9IF9yZWY4WzFdO1xuXG4gICAgdmFyIHZhbHVlID0gdGh1bmsocHJvcHMpO1xuICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFjYyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIGtleSwgdmFsdWUpKTtcbiAgfSwge30pO1xufVxuXG52YXIgYXJnVmFsaWRhdG9ycyA9IFsoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdDogbnVtYmVyT3JQcm9wc0Z1bmMsXG4gIGd0OiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHRlOiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3Q6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdDogbnVtYmVyT3JQcm9wc0Z1bmMsXG4gIGd0ZTogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0ZTogbnVtYmVyT3JQcm9wc0Z1bmMsXG4gIGd0ZTogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHRlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgZ3Q6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBndGU6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkXTtcblxuZnVuY3Rpb24gYXJnVmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSkge1xuICByZXR1cm4gYXJnVmFsaWRhdG9ycy5ldmVyeShmdW5jdGlvbiAodmFsaWRhdG9yKSB7XG4gICAgcmV0dXJuICEhdmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSk7XG4gIH0pO1xufVxuXG52YXIgdGh1bmtWYWx1ZVZhbGlkYXRvciA9ICgwLCBfdmFsdWVzT2ZbXCJkZWZhdWx0XCJdKShudW1iZXIpLmlzUmVxdWlyZWQ7XG5cbmZ1bmN0aW9uIGJldHdlZW5WYWxpZGF0b3Iob3B0aW9ucykge1xuICB2YXIgYXJnRXJyb3IgPSBhcmdWYWxpZGF0b3Ioe1xuICAgIG9wdGlvbnM6IG9wdGlvbnNcbiAgfSwgJ29wdGlvbnMnKTtcblxuICBpZiAoYXJnRXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdiZXR3ZWVuOiBvbmx5IG9uZSBvZiB0aGUgcGFpcnMgb2YgYGx0YC9gbHRlYCwgYW5kIGBndGAvYGd0ZWAsIG1heSBiZSBzdXBwbGllZCwgYW5kIGF0IGxlYXN0IG9uZSBwYWlyIG11c3QgYmUgcHJvdmlkZWQuJyk7XG4gIH1cblxuICB2YXIgb3B0c1RodW5rcyA9IHByb3BzVGh1bmtpZnkob3B0aW9ucyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGJldHdlZW4ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIG11c3QgYmUgYSBudW1iZXIsIGdvdCBcXFwiXCIpLmNvbmNhdChfdHlwZW9mKHByb3BWYWx1ZSksIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIG9wdHMgPSBpbnZva2VXaXRoUHJvcHMob3B0c1RodW5rcywgcHJvcHMpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHRodW5rVmFsdWVzRXJyb3IgPSB0aHVua1ZhbHVlVmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgW19kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcE5hbWUsIG9wdHMpLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICAgIGlmICh0aHVua1ZhbHVlc0Vycm9yKSB7XG4gICAgICByZXR1cm4gdGh1bmtWYWx1ZXNFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoIWxvd2VyQ29tcGFyZShwcm9wVmFsdWUsIG9wdHMpIHx8ICF1cHBlckNvbXBhcmUocHJvcFZhbHVlLCBvcHRzKSkge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKGVycm9yTWVzc2FnZShjb21wb25lbnROYW1lLCBwcm9wTmFtZSwgb3B0cykpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gYmV0d2VlblJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG51bWJlciwgZ290IFxcXCJcIikuY29uY2F0KF90eXBlb2YocHJvcFZhbHVlKSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IGludm9rZVdpdGhQcm9wcyhvcHRzVGh1bmtzLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgdGh1bmtWYWx1ZXNFcnJvciA9IHRodW5rVmFsdWVWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZSwgb3B0cyksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHRodW5rVmFsdWVzRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aHVua1ZhbHVlc0Vycm9yO1xuICAgIH1cblxuICAgIGlmICghbG93ZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykgfHwgIXVwcGVyQ29tcGFyZShwcm9wVmFsdWUsIG9wdHMpKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKGNvbXBvbmVudE5hbWUsIHByb3BOYW1lLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2JldHdlZW4nLCBvcHRpb25zKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJldHdlZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGJvb2xlYW5Tb21lVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBib29sZWFuU29tZVZhbGlkYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIG5vdEFsbFByb3BzRmFsc2UgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgbm90QWxsUHJvcHNGYWxzZVtfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChub3RBbGxQcm9wc0ZhbHNlLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhdCBsZWFzdCBvbmUgcHJvcCAob25lIG9mIHdoaWNoIG11c3QgYmUgYHRydWVgKSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFub3RBbGxQcm9wc0ZhbHNlLmV2ZXJ5KGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJztcbiAgfSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhbGwgYm9vbGVhblNvbWUgcHJvcHMgbXVzdCBiZSBzdHJpbmdzJyk7XG4gIH1cblxuICB2YXIgcHJvcHNMaXN0ID0gbm90QWxsUHJvcHNGYWxzZS5qb2luKCcsIG9yICcpO1xuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBib29sZWFuU29tZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgY291bnRGYWxzZSA9IGZ1bmN0aW9uIGNvdW50RmFsc2UoY291bnQsIHByb3ApIHtcbiAgICAgIHJldHVybiBjb3VudCArIChwcm9wc1twcm9wXSA9PT0gZmFsc2UgPyAxIDogMCk7XG4gICAgfTtcblxuICAgIHZhciBmYWxzZVByb3BDb3VudCA9IG5vdEFsbFByb3BzRmFsc2UucmVkdWNlKGNvdW50RmFsc2UsIDApO1xuXG4gICAgaWYgKGZhbHNlUHJvcENvdW50ID09PSBub3RBbGxQcm9wc0ZhbHNlLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgaGF2ZSBhdCBsZWFzdCBvbmUgb2YgdGhlc2UgYm9vbGVhbiBwcm9wcyBiZSBgdHJ1ZWA6IFwiKS5jb25jYXQocHJvcHNMaXN0KSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wcm9wVHlwZXMuYm9vbC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBib29sZWFuU29tZVJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudEZhbHNlID0gZnVuY3Rpb24gY291bnRGYWxzZShjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID09PSBmYWxzZSA/IDEgOiAwKTtcbiAgICB9O1xuXG4gICAgdmFyIGZhbHNlUHJvcENvdW50ID0gbm90QWxsUHJvcHNGYWxzZS5yZWR1Y2UoY291bnRGYWxzZSwgMCk7XG5cbiAgICBpZiAoZmFsc2VQcm9wQ291bnQgPT09IG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiQSBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBib29sZWFuIHByb3BzIGJlIGB0cnVlYDogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5ib29sLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwiYm9vbGVhblNvbWU6IFwiLmNvbmNhdChwcm9wc0xpc3QpLCBub3RBbGxQcm9wc0ZhbHNlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJvb2xlYW5Tb21lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW47XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuKHByb3ApIHtcbiAgaWYgKHR5cGVvZiBwcm9wICE9PSAnc3RyaW5nJyAmJiBfdHlwZW9mKHByb3ApICE9PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcHJvcDogbXVzdCBiZSBzdHJpbmcgb3Igc3ltYm9sJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuV2l0aFByb3AoX3JlZiwgXywgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9yZWYuY2hpbGRyZW47XG4gICAgdmFyIHRydXRoeUNoaWxkcmVuQ291bnQgPSAwO1xuICAgIHZhciBwcm9wQ291bnQgPSAwO1xuICAgIHZhciBncmFuZGNoaWxkcmVuQ291bnQgPSAwO1xuXG4gICAgX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5mb3JFYWNoKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgIGlmICghY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnV0aHlDaGlsZHJlbkNvdW50ICs9IDE7XG5cbiAgICAgIGlmIChjaGlsZC5wcm9wc1twcm9wXSkge1xuICAgICAgICBwcm9wQ291bnQgKz0gMTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZWFjdFtcImRlZmF1bHRcIl0uQ2hpbGRyZW4uY291bnQoY2hpbGQucHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICAgIGdyYW5kY2hpbGRyZW5Db3VudCArPSAxO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHByb3BDb3VudCA9PT0gdHJ1dGh5Q2hpbGRyZW5Db3VudCAmJiBncmFuZGNoaWxkcmVuQ291bnQgPT09IDAgfHwgcHJvcENvdW50ID09PSAwICYmIGdyYW5kY2hpbGRyZW5Db3VudCA9PT0gdHJ1dGh5Q2hpbGRyZW5Db3VudCB8fCBwcm9wQ291bnQgPT09IDAgJiYgZ3JhbmRjaGlsZHJlbkNvdW50ID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgIHJlcXVpcmVzIGNoaWxkcmVuIHRvIGFsbCBoYXZlIHByb3AgXFx1MjAxQ1wiKS5jb25jYXQocHJvcCwgXCJcXHUyMDFELCBhbGwgaGF2ZSBjaGlsZHJlbiwgb3IgYWxsIGhhdmUgbmVpdGhlci5cIikpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gdmFsaWRhdG9yO1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcImNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbldpdGhQcm9wOlwiLmNvbmNhdChwcm9wKSwgcHJvcCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuT2Y7XG5cbnZhciBfcmVuZGVyYWJsZUNoaWxkcmVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3JlbmRlcmFibGVDaGlsZHJlblwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoaWxkcmVuKHByb3BUeXBlLCBjaGlsZHJlbiwgcHJvcHMpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIGVycm9yO1xuICBjaGlsZHJlbi5zb21lKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIGVycm9yID0gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRcbiAgICB9KSwgJ2NoaWxkcmVuJ10uY29uY2F0KHJlc3QpKTtcbiAgICByZXR1cm4gZXJyb3I7XG4gIH0pO1xuICByZXR1cm4gZXJyb3IgfHwgbnVsbDtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5PZihwcm9wVHlwZSkge1xuICBmdW5jdGlvbiBjaGlsZHJlbk9mUHJvcFR5cGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5PZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ2hpbGRyZW4uYXBwbHkodm9pZCAwLCBbcHJvcFR5cGUsIGNoaWxkcmVuLCBwcm9wcywgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIGNoaWxkcmVuT2ZQcm9wVHlwZS5pc1JlcXVpcmVkID0gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIGNoaWxkcmVuT2YgdmFsaWRhdG9yIG9uIG5vbi1jaGlsZHJlbiBwcm9wIFxcXCJcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgYXQgbGVhc3Qgb25lIG5vZGUgb2YgdHlwZSBcIikuY29uY2F0KHByb3BUeXBlLnR5cGVOYW1lIHx8IHByb3BUeXBlLm5hbWUpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaGlsZHJlbi5hcHBseSh2b2lkIDAsIFtwcm9wVHlwZSwgY2hpbGRyZW4sIHByb3BzLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjaGlsZHJlbk9mUHJvcFR5cGUsICdjaGlsZHJlbk9mJywgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hpbGRyZW5PZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX2FycmF5UHJvdG90eXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiYXJyYXkucHJvdG90eXBlLmZpbmRcIikpO1xuXG52YXIgX2dldENvbXBvbmVudE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZVwiKSk7XG5cbnZhciBfcmVuZGVyYWJsZUNoaWxkcmVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3JlbmRlcmFibGVDaGlsZHJlblwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG9ubHlUeXBlcyh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpIHtcbiAgaWYgKCFjaGlsZHJlbi5ldmVyeShmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQgJiYgKDAsIF9hcnJheVByb3RvdHlwZVtcImRlZmF1bHRcIl0pKHR5cGVzLCBmdW5jdGlvbiAoVHlwZSkge1xuICAgICAgcmV0dXJuIFR5cGUgPT09ICcqJyB8fCBjaGlsZC50eXBlID09PSBUeXBlO1xuICAgIH0pO1xuICB9KSkge1xuICAgIHZhciB0eXBlTmFtZXMgPSB0eXBlcy5tYXAoX2dldENvbXBvbmVudE5hbWVbXCJkZWZhdWx0XCJdKS5qb2luKCcsIG9yICcpO1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgb25seSBhY2NlcHRzIGNoaWxkcmVuIG9mIHR5cGUgXCIpLmNvbmNhdCh0eXBlTmFtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBpc1JlcXVpcmVkKHR5cGVzLCBjaGlsZHJlbiwgY29tcG9uZW50TmFtZSkge1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgdmFyIHR5cGVOYW1lcyA9IHR5cGVzLm1hcChfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pLmpvaW4oJywgb3IgJyk7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbm9kZSBvZiB0eXBlIFwiKS5jb25jYXQodHlwZU5hbWVzKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5PZlR5cGUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCB0eXBlcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICB0eXBlc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmICh0eXBlcy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignY2hpbGRyZW5PZlR5cGU6IGF0IGxlYXN0IDEgdHlwZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHJldHVybiBvbmx5VHlwZXModHlwZXMsICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcHNbcHJvcE5hbWVdKSwgY29tcG9uZW50TmFtZSk7XG4gIH1cblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BzW3Byb3BOYW1lXSk7XG4gICAgcmV0dXJuIGlzUmVxdWlyZWQodHlwZXMsIGNoaWxkcmVuLCBjb21wb25lbnROYW1lKSB8fCBvbmx5VHlwZXModHlwZXMsIGNoaWxkcmVuLCBjb21wb25lbnROYW1lKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnY2hpbGRyZW5PZlR5cGUnLCB0eXBlcyk7XG59XG5cbnZhciBfZGVmYXVsdCA9IGNoaWxkcmVuT2ZUeXBlO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoaWxkcmVuT2ZUeXBlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBjaGlsZHJlblNlcXVlbmNlT2ZWYWxpZGF0b3I7XG5cbnZhciBfc2VxdWVuY2VPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfcmVuZGVyYWJsZUNoaWxkcmVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3JlbmRlcmFibGVDaGlsZHJlblwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBjaGlsZHJlblNlcXVlbmNlT2ZWYWxpZGF0b3IoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBzcGVjaWZpZXJzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNwZWNpZmllcnNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgc2VxID0gX3NlcXVlbmNlT2ZbXCJkZWZhdWx0XCJdLmFwcGx5KHZvaWQgMCwgc3BlY2lmaWVycyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGNoaWxkcmVuU2VxdWVuY2VPZihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcE5hbWUgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGlzIHVzaW5nIHRoZSBjaGlsZHJlblNlcXVlbmNlT2YgdmFsaWRhdG9yIG9uIG5vbi1jaGlsZHJlbiBwcm9wIFxcXCJcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgdmFyIGNoaWxkcmVuID0gKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcS5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGNoaWxkcmVuU2VxdWVuY2VPZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIGNoaWxkcmVuU2VxdWVuY2VPZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogcmVuZGVyYWJsZSBjaGlsZHJlbiBhcmUgcmVxdWlyZWQuXCIpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxLmlzUmVxdWlyZWQuYXBwbHkoc2VxLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICB9KSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2NoaWxkcmVuU2VxdWVuY2VPZicsIHNwZWNpZmllcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hpbGRyZW5TZXF1ZW5jZU9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBjb21wb25lbnRXaXRoTmFtZTtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF9pc1JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiaXMtcmVnZXhcIikpO1xuXG52YXIgX2FycmF5UHJvdG90eXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiYXJyYXkucHJvdG90eXBlLmZpbmRcIikpO1xuXG52YXIgX2dldENvbXBvbmVudE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHN0cmlwSE9DcyhmdWxsTmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwKSB7XG4gIHZhciBpbm5lck5hbWUgPSBmdWxsTmFtZTtcblxuICB3aGlsZSAoL1xcKFteKCldKlxcKS9nLnRlc3QoaW5uZXJOYW1lKSkge1xuICAgIHZhciBIT0MgPSBpbm5lck5hbWU7XG4gICAgdmFyIHByZXZpb3VzSE9DID0gdm9pZCAwO1xuXG4gICAgZG8ge1xuICAgICAgcHJldmlvdXNIT0MgPSBIT0M7XG4gICAgICBIT0MgPSBwcmV2aW91c0hPQy5yZXBsYWNlKC9cXChbXigpXSpcXCkvZywgJycpO1xuICAgIH0gd2hpbGUgKHByZXZpb3VzSE9DICE9PSBIT0MpO1xuXG4gICAgaWYgKG5hbWVzT2ZIT0NzVG9TdHJpcC5pbmRleE9mKEhPQykgPT09IC0xKSB7XG4gICAgICByZXR1cm4gaW5uZXJOYW1lO1xuICAgIH1cblxuICAgIGlubmVyTmFtZSA9IGlubmVyTmFtZS5yZXBsYWNlKFJlZ0V4cChcIl5cIi5jb25jYXQoSE9DLCBcIlxcXFwofFxcXFwpJFwiKSwgJ2cnKSwgJycpO1xuICB9XG5cbiAgcmV0dXJuIGlubmVyTmFtZTtcbn1cblxuZnVuY3Rpb24gaGFzTmFtZShuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiAoMCwgX2FycmF5UHJvdG90eXBlW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGhhc05hbWUuYXBwbHkodm9pZCAwLCBbbmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwLCBpdGVtLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgICB9KSwgQm9vbGVhbikgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICghIC8qI19fUFVSRV9fKi9fcmVhY3RbXCJkZWZhdWx0XCJdLmlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi5cIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyBub3QgYSB2YWxpZCBSZWFjdCBlbGVtZW50XCIpKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gcHJvcFZhbHVlLnR5cGU7XG4gIHZhciBjb21wb25lbnROYW1lRnJvbVR5cGUgPSAoMCwgX2dldENvbXBvbmVudE5hbWVbXCJkZWZhdWx0XCJdKSh0eXBlKTtcbiAgdmFyIGlubmVyQ29tcG9uZW50TmFtZSA9IG5hbWVzT2ZIT0NzVG9TdHJpcC5sZW5ndGggPiAwID8gc3RyaXBIT0NzKGNvbXBvbmVudE5hbWVGcm9tVHlwZSwgbmFtZXNPZkhPQ3NUb1N0cmlwKSA6IGNvbXBvbmVudE5hbWVGcm9tVHlwZTtcblxuICBpZiAoKDAsIF9pc1JlZ2V4W1wiZGVmYXVsdFwiXSkobmFtZSkgJiYgIW5hbWUudGVzdChpbm5lckNvbXBvbmVudE5hbWUpKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiYCBvbmx5IGFjY2VwdHMgY29tcG9uZW50cyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIFwiKS5jb25jYXQobmFtZSkpO1xuICB9XG5cbiAgaWYgKCEoMCwgX2lzUmVnZXhbXCJkZWZhdWx0XCJdKShuYW1lKSAmJiBpbm5lckNvbXBvbmVudE5hbWUgIT09IG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9ubHkgYWNjZXB0cyBjb21wb25lbnRzIG5hbWVkIFwiKS5jb25jYXQobmFtZSwgXCIsIGdvdCBcIikuY29uY2F0KGlubmVyQ29tcG9uZW50TmFtZSkpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbXBvbmVudFdpdGhOYW1lKG5hbWUpIHtcbiAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgJiYgISgwLCBfaXNSZWdleFtcImRlZmF1bHRcIl0pKG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIGEgcmVnZXgnKTtcbiAgfVxuXG4gIHZhciBwYXNzZWRPcHRpb25zID0gT2JqZWN0LmtleXMob3B0aW9ucyk7XG5cbiAgaWYgKHBhc3NlZE9wdGlvbnMubGVuZ3RoID4gMSB8fCBwYXNzZWRPcHRpb25zLmxlbmd0aCA9PT0gMSAmJiBwYXNzZWRPcHRpb25zWzBdICE9PSAnc3RyaXBIT0NzJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgb25seSBvcHRpb25zIHN1cHBvcnRlZCBhcmU6IFxcdTIwMUNzdHJpcEhPQ3NcXHUyMDFELCBnb3Q6IFxcdTIwMUNcIi5jb25jYXQocGFzc2VkT3B0aW9ucy5qb2luKCfigJ0sIOKAnCcpLCBcIlxcdTIwMURcIikpO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJHN0cmlwSE9DcyA9IG9wdGlvbnMuc3RyaXBIT0NzLFxuICAgICAgbmFtZXNPZkhPQ3NUb1N0cmlwID0gX29wdGlvbnMkc3RyaXBIT0NzID09PSB2b2lkIDAgPyBbXSA6IF9vcHRpb25zJHN0cmlwSE9DcztcbiAgdmFyIGFsbEhPQ05hbWVzQXJlVmFsaWQgPSBuYW1lc09mSE9Dc1RvU3RyaXAuZXZlcnkoZnVuY3Rpb24gKHgpIHtcbiAgICBpZiAodHlwZW9mIHggIT09ICdzdHJpbmcnIHx8IC9bKCldL2cudGVzdCh4KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAvXig/OlthLXpdW2EtekEtWjAtOV0rfFtBLVpdW2Etel1bYS16QS1aMC05XSspJC8udGVzdCh4KTtcbiAgfSk7XG5cbiAgaWYgKCFhbGxIT0NOYW1lc0FyZVZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXZlcnkgcHJvdmlkZWQgSE9DIG5hbWUgbXVzdCBiZSBhIHN0cmluZyB3aXRoIG5vIHBhcmVucywgYW5kIGluIGNhbWVsQ2FzZScpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWVWYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc05hbWUuYXBwbHkodm9pZCAwLCBbbmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwLCBwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgY29tcG9uZW50V2l0aE5hbWVWYWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpdGhOYW1lUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiYCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgY29tcG9uZW50IG5hbWVkIFwiKS5jb25jYXQobmFtZSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBoYXNOYW1lLmFwcGx5KHZvaWQgMCwgW25hbWUsIG5hbWVzT2ZIT0NzVG9TdHJpcCwgcHJvcFZhbHVlLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoY29tcG9uZW50V2l0aE5hbWVWYWxpZGF0b3IsIFwiY29tcG9uZW50V2l0aE5hbWU6XCIuY29uY2F0KG5hbWUpLCBuYW1lKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudFdpdGhOYW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBkaXNhbGxvd2VkSWY7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGRpc2FsbG93ZWRJZihwcm9wVHlwZSwgb3RoZXJQcm9wTmFtZSwgb3RoZXJQcm9wVHlwZSkge1xuICBpZiAodHlwZW9mIHByb3BUeXBlICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBwcm9wVHlwZS5pc1JlcXVpcmVkICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBwcm9wVHlwZSB2YWxpZGF0b3IgaXMgcmVxdWlyZWQ7IHByb3BUeXBlIHZhbGlkYXRvcnMgbXVzdCBhbHNvIHByb3ZpZGUgYC5pc1JlcXVpcmVkYCcpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvdGhlclByb3BOYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ290aGVyIHByb3AgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG90aGVyUHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvdGhlciBwcm9wIHR5cGUgdmFsaWRhdG9yIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiBkaXNhbGxvd2VkSWZSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBwcm9wVHlwZS5pc1JlcXVpcmVkLmFwcGx5KHByb3BUeXBlLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzW290aGVyUHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvdGhlckVycm9yID0gb3RoZXJQcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgb3RoZXJQcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICAgIGlmIChvdGhlckVycm9yKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEVycm9yKFwicHJvcCBcXHUyMDFDXCIuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgaXMgZGlzYWxsb3dlZCB3aGVuIFxcdTIwMUNcIikuY29uY2F0KG90aGVyUHJvcE5hbWUsIFwiXFx1MjAxRCBtYXRjaGVzIHRoZSBwcm92aWRlZCB2YWxpZGF0b3JcIikpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGRpc2FsbG93ZWRJZlByb3BUeXBlKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc2FsbG93ZWRJZlJlcXVpcmVkLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGRpc2FsbG93ZWRJZlJlcXVpcmVkO1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnZGlzYWxsb3dlZElmJywge1xuICAgIHByb3BUeXBlOiBwcm9wVHlwZSxcbiAgICBvdGhlclByb3BOYW1lOiBvdGhlclByb3BOYW1lLFxuICAgIG90aGVyUHJvcFR5cGU6IG90aGVyUHJvcFR5cGVcbiAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kaXNhbGxvd2VkSWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGVsZW1lbnRUeXBlVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2dldENvbXBvbmVudE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gZ2V0VHlwZU5hbWUoVHlwZSkge1xuICBpZiAodHlwZW9mIFR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIFR5cGU7XG4gIH1cblxuICB2YXIgdHlwZSA9ICgwLCBfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pKFR5cGUpO1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAvLyBpbiBlbnZpcm9ubWVudHMgd2hlcmUgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIG5hbWVzXG5cbiAgcmV0dXJuIHR5cGUgfHwgJ0Fub255bW91cyBDb21wb25lbnQnO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUVsZW1lbnRUeXBlKFR5cGUsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdHlwZSA9IHByb3BzW3Byb3BOYW1lXS50eXBlO1xuXG4gIGlmICh0eXBlID09PSBUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi5cIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCBvZiB0eXBlIFwiKS5jb25jYXQoZ2V0VHlwZU5hbWUoVHlwZSkpKTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudFR5cGVWYWxpZGF0b3IoVHlwZSkge1xuICBpZiAoVHlwZSA9PT0gJyonKSB7XG4gICAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKF9wcm9wVHlwZXMuZWxlbWVudCwgJ2VsZW1lbnRUeXBlKCopJywgVHlwZSk7XG4gIH1cblxuICBpZiAoISgwLCBfcmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUpKFR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlR5cGUgbXVzdCBiZSBhIFJlYWN0IENvbXBvbmVudCwgYW4gSFRNTCBlbGVtZW50IHRhZyBuYW1lLCBvciBcXFwiKlxcXCIuIEdvdCBhbiBcIi5jb25jYXQoX3R5cGVvZihUeXBlKSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZWxlbWVudFR5cGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVFbGVtZW50VHlwZS5hcHBseSh2b2lkIDAsIFtUeXBlLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH1cblxuICBlbGVtZW50VHlwZS5pc1JlcXVpcmVkID0gZWxlbWVudFR5cGU7IC8vIGNvdmVyZWQgYnkgYW5kICsgZWxlbWVudFxuXG4gIHZhciB0eXBlTmFtZSA9IGdldFR5cGVOYW1lKFR5cGUpO1xuICB2YXIgdmFsaWRhdG9yTmFtZSA9IFwiZWxlbWVudFR5cGUoXCIuY29uY2F0KHR5cGVOYW1lLCBcIilcIik7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSgoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFtfcHJvcFR5cGVzLmVsZW1lbnQsIGVsZW1lbnRUeXBlXSwgdmFsaWRhdG9yTmFtZSksIHZhbGlkYXRvck5hbWUsIFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZWxlbWVudFR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF9vciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vb3JcIikpO1xuXG52YXIgX2V4cGxpY2l0TnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXhwbGljaXROdWxsXCIpKTtcblxudmFyIF93aXRoU2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3dpdGhTaGFwZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBhcnJheU9mVmFsaWRhdG9yO1xudmFyIHZhbGlkYXRvciA9ICgwLCBfb3JbXCJkZWZhdWx0XCJdKShbX2V4cGxpY2l0TnVsbFtcImRlZmF1bHRcIl0sIC8vIG51bGwvdW5kZWZpbmVkXG4oMCwgX3Byb3BUeXBlcy5vbmVPZikoW2ZhbHNlLCAnJywgTmFOXSksICgwLCBfd2l0aFNoYXBlW1wiZGVmYXVsdFwiXSkoX3Byb3BUeXBlcy5hcnJheSwge1xuICBsZW5ndGg6ICgwLCBfcHJvcFR5cGVzLm9uZU9mKShbMF0pLmlzUmVxdWlyZWRcbn0pLmlzUmVxdWlyZWQsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGFycmF5T2ZWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xufV0pO1xuYXJyYXlPZlZhbGlkYXRvciA9ICgwLCBfcHJvcFR5cGVzLmFycmF5T2YpKHZhbGlkYXRvcikuaXNSZXF1aXJlZDtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdlbXB0eScpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gZXhwbGljaXROdWxsKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBudWxsIG9yIHVuZGVmaW5lZDsgcmVjZWl2ZWQgXCIpLmNvbmNhdChfdHlwZW9mKHByb3BzW3Byb3BOYW1lXSkpKTtcbn1cblxuZXhwbGljaXROdWxsLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBleHBsaWNpdE51bGxSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFx1MjAxQ1wiKS5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBtdXN0IGJlIG51bGw7IHJlY2VpdmVkIFwiKS5jb25jYXQoX3R5cGVvZihwcm9wc1twcm9wTmFtZV0pKSk7XG59O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKGV4cGxpY2l0TnVsbCwgJ2V4cGxpY2l0TnVsbCcpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4cGxpY2l0TnVsbC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZ2V0Q29tcG9uZW50TmFtZTtcblxudmFyIF9mdW5jdGlvblByb3RvdHlwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImZ1bmN0aW9uLnByb3RvdHlwZS5uYW1lXCIpKTtcblxudmFyIF9yZWFjdElzID0gcmVxdWlyZShcInJlYWN0LWlzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCAoMCwgX2Z1bmN0aW9uUHJvdG90eXBlW1wiZGVmYXVsdFwiXSkoQ29tcG9uZW50KTtcbiAgfVxuXG4gIGlmICgoMCwgX3JlYWN0SXMuaXNGb3J3YXJkUmVmKSh7XG4gICAgdHlwZTogQ29tcG9uZW50LFxuICAgICQkdHlwZW9mOiBfcmVhY3RJcy5FbGVtZW50XG4gIH0pKSB7XG4gICAgcmV0dXJuIENvbXBvbmVudC5kaXNwbGF5TmFtZTtcbiAgfVxuXG4gIGlmICgoMCwgX3JlYWN0SXMuaXNNZW1vKShDb21wb25lbnQpKSB7XG4gICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50LnR5cGUpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZXRDb21wb25lbnROYW1lLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGZpbml0ZSA9IGlzRmluaXRlO1xuXG52YXIgX2RlZmF1bHQgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiBmaW5pdGUoeCkgJiYgZmxvb3IoeCkgPT09IHg7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInByb3AtdHlwZXMtZXhhY3QvYnVpbGQvaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBfZGVmYXVsdCA9IF9pc1BsYWluT2JqZWN0W1wiZGVmYXVsdFwiXTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1BsYWluT2JqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBpc1ByaW1pdGl2ZTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBpc1ByaW1pdGl2ZSh4KSB7XG4gIHJldHVybiAheCB8fCBfdHlwZW9mKHgpICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgeCAhPT0gJ2Z1bmN0aW9uJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJpbWl0aXZlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSByZW5kZXJhYmxlQ2hpbGRyZW47XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiByZW5kZXJhYmxlQ2hpbGRyZW4oY2hpbGRyZW5Qcm9wKSB7XG4gIHJldHVybiBfcmVhY3RbXCJkZWZhdWx0XCJdLkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW5Qcm9wKS5maWx0ZXIoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkID09PSAwIHx8IGNoaWxkO1xuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlbmRlcmFibGVDaGlsZHJlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdHlwZU9mO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiB0eXBlT2YoY2hpbGQpIHtcbiAgaWYgKGNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgaWYgKF90eXBlb2YoY2hpbGQpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBfdHlwZW9mKGNoaWxkKTtcbiAgfVxuXG4gIGlmICggLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgcmV0dXJuIGNoaWxkLnR5cGU7XG4gIH1cblxuICByZXR1cm4gY2hpbGQ7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHdyYXBWYWxpZGF0b3I7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwib2JqZWN0LmFzc2lnblwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB3cmFwVmFsaWRhdG9yKHZhbGlkYXRvciwgdHlwZU5hbWUpIHtcbiAgdmFyIHR5cGVDaGVja2VyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuICByZXR1cm4gKDAsIF9vYmplY3RbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IuYmluZCgpLCB7XG4gICAgdHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgIHR5cGVDaGVja2VyOiB0eXBlQ2hlY2tlcixcbiAgICBpc1JlcXVpcmVkOiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKHZhbGlkYXRvci5pc1JlcXVpcmVkLmJpbmQoKSwge1xuICAgICAgdHlwZU5hbWU6IHR5cGVOYW1lLFxuICAgICAgdHlwZUNoZWNrZXI6IHR5cGVDaGVja2VyLFxuICAgICAgdHlwZVJlcXVpcmVkOiB0cnVlXG4gICAgfSlcbiAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13cmFwVmFsaWRhdG9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX3Byb3BUeXBlc0V4YWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlcy1leGFjdFwiKSk7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX2Jvb2xlYW5Tb21lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ib29sZWFuU29tZVwiKSk7XG5cbnZhciBfY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW5cIikpO1xuXG52YXIgX2NoaWxkcmVuT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuT2ZcIikpO1xuXG52YXIgX2NoaWxkcmVuT2ZUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jaGlsZHJlbk9mVHlwZVwiKSk7XG5cbnZhciBfY2hpbGRyZW5TZXF1ZW5jZU9mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jaGlsZHJlblNlcXVlbmNlT2ZcIikpO1xuXG52YXIgX2NvbXBvbmVudFdpdGhOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jb21wb25lbnRXaXRoTmFtZVwiKSk7XG5cbnZhciBfZGlzYWxsb3dlZElmID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9kaXNhbGxvd2VkSWZcIikpO1xuXG52YXIgX2VsZW1lbnRUeXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9lbGVtZW50VHlwZVwiKSk7XG5cbnZhciBfZW1wdHkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2VtcHR5XCIpKTtcblxudmFyIF9leHBsaWNpdE51bGwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2V4cGxpY2l0TnVsbFwiKSk7XG5cbnZhciBfaW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaW50ZWdlclwiKSk7XG5cbnZhciBfa2V5c09mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9rZXlzT2ZcIikpO1xuXG52YXIgX211dHVhbGx5RXhjbHVzaXZlUHJvcHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dHVhbGx5RXhjbHVzaXZlUHJvcHNcIikpO1xuXG52YXIgX211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wc1wiKSk7XG5cbnZhciBfbkNoaWxkcmVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uQ2hpbGRyZW5cIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9uTmVnYXRpdmVJbnRlZ2VyXCIpKTtcblxudmFyIF9ub25OZWdhdGl2ZU51bWJlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9uTmVnYXRpdmVOdW1iZXJcIikpO1xuXG52YXIgX251bWVyaWNTdHJpbmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL251bWVyaWNTdHJpbmdcIikpO1xuXG52YXIgX29iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vb2JqZWN0XCIpKTtcblxudmFyIF9vciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vb3JcIikpO1xuXG52YXIgX3ByZWRpY2F0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcHJlZGljYXRlXCIpKTtcblxudmFyIF9yYW5nZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmFuZ2VcIikpO1xuXG52YXIgX3JlZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVmXCIpKTtcblxudmFyIF9yZXF1aXJlZEJ5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXF1aXJlZEJ5XCIpKTtcblxudmFyIF9yZXN0cmljdGVkUHJvcCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVzdHJpY3RlZFByb3BcIikpO1xuXG52YXIgX3NlcXVlbmNlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NlcXVlbmNlT2ZcIikpO1xuXG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG5cbnZhciBfc3RyaW5nRW5kc1dpdGggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ0VuZHNXaXRoXCIpKTtcblxudmFyIF9zdHJpbmdTdGFydHNXaXRoID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zdHJpbmdTdGFydHNXaXRoXCIpKTtcblxudmFyIF91bmlxdWVBcnJheSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdW5pcXVlQXJyYXlcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5T2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3VuaXF1ZUFycmF5T2ZcIikpO1xuXG52YXIgX3ZhbHVlc09mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWx1ZXNPZlwiKSk7XG5cbnZhciBfd2l0aFNoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi93aXRoU2hhcGVcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFuZDogX2FuZFtcImRlZmF1bHRcIl0sXG4gIGJldHdlZW46IF9iZXR3ZWVuW1wiZGVmYXVsdFwiXSxcbiAgYm9vbGVhblNvbWU6IF9ib29sZWFuU29tZVtcImRlZmF1bHRcIl0sXG4gIGNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbjogX2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbltcImRlZmF1bHRcIl0sXG4gIGNoaWxkcmVuT2Y6IF9jaGlsZHJlbk9mW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5PZlR5cGU6IF9jaGlsZHJlbk9mVHlwZVtcImRlZmF1bHRcIl0sXG4gIGNoaWxkcmVuU2VxdWVuY2VPZjogX2NoaWxkcmVuU2VxdWVuY2VPZltcImRlZmF1bHRcIl0sXG4gIGNvbXBvbmVudFdpdGhOYW1lOiBfY29tcG9uZW50V2l0aE5hbWVbXCJkZWZhdWx0XCJdLFxuICBkaXNhbGxvd2VkSWY6IF9kaXNhbGxvd2VkSWZbXCJkZWZhdWx0XCJdLFxuICBlbGVtZW50VHlwZTogX2VsZW1lbnRUeXBlW1wiZGVmYXVsdFwiXSxcbiAgZW1wdHk6IF9lbXB0eVtcImRlZmF1bHRcIl0sXG4gIGV4cGxpY2l0TnVsbDogX2V4cGxpY2l0TnVsbFtcImRlZmF1bHRcIl0sXG4gIGZvcmJpZEV4dHJhUHJvcHM6IF9wcm9wVHlwZXNFeGFjdFtcImRlZmF1bHRcIl0sXG4gIGludGVnZXI6IF9pbnRlZ2VyW1wiZGVmYXVsdFwiXSxcbiAga2V5c09mOiBfa2V5c09mW1wiZGVmYXVsdFwiXSxcbiAgbXV0dWFsbHlFeGNsdXNpdmVQcm9wczogX211dHVhbGx5RXhjbHVzaXZlUHJvcHNbXCJkZWZhdWx0XCJdLFxuICBtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wczogX211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzW1wiZGVmYXVsdFwiXSxcbiAgbkNoaWxkcmVuOiBfbkNoaWxkcmVuW1wiZGVmYXVsdFwiXSxcbiAgbm9uTmVnYXRpdmVJbnRlZ2VyOiBfbm9uTmVnYXRpdmVJbnRlZ2VyW1wiZGVmYXVsdFwiXSxcbiAgbm9uTmVnYXRpdmVOdW1iZXI6IF9ub25OZWdhdGl2ZU51bWJlcltcImRlZmF1bHRcIl0sXG4gIG51bWVyaWNTdHJpbmc6IF9udW1lcmljU3RyaW5nW1wiZGVmYXVsdFwiXSxcbiAgb2JqZWN0OiBfb2JqZWN0W1wiZGVmYXVsdFwiXSxcbiAgb3I6IF9vcltcImRlZmF1bHRcIl0sXG4gIHByZWRpY2F0ZTogX3ByZWRpY2F0ZVtcImRlZmF1bHRcIl0sXG4gIHJhbmdlOiBfcmFuZ2VbXCJkZWZhdWx0XCJdLFxuICByZWY6IF9yZWZbXCJkZWZhdWx0XCJdLFxuICByZXF1aXJlZEJ5OiBfcmVxdWlyZWRCeVtcImRlZmF1bHRcIl0sXG4gIHJlc3RyaWN0ZWRQcm9wOiBfcmVzdHJpY3RlZFByb3BbXCJkZWZhdWx0XCJdLFxuICBzZXF1ZW5jZU9mOiBfc2VxdWVuY2VPZltcImRlZmF1bHRcIl0sXG4gIHNoYXBlOiBfc2hhcGVbXCJkZWZhdWx0XCJdLFxuICBzdHJpbmdFbmRzV2l0aDogX3N0cmluZ0VuZHNXaXRoW1wiZGVmYXVsdFwiXSxcbiAgc3RyaW5nU3RhcnRzV2l0aDogX3N0cmluZ1N0YXJ0c1dpdGhbXCJkZWZhdWx0XCJdLFxuICB1bmlxdWVBcnJheTogX3VuaXF1ZUFycmF5W1wiZGVmYXVsdFwiXSxcbiAgdW5pcXVlQXJyYXlPZjogX3VuaXF1ZUFycmF5T2ZbXCJkZWZhdWx0XCJdLFxuICB2YWx1ZXNPZjogX3ZhbHVlc09mW1wiZGVmYXVsdFwiXSxcbiAgd2l0aFNoYXBlOiBfd2l0aFNoYXBlW1wiZGVmYXVsdFwiXVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfaXNJbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL2lzSW50ZWdlclwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHJlcXVpcmVkSW50ZWdlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAocHJvcFZhbHVlID09IG51bGwgfHwgISgwLCBfaXNJbnRlZ2VyW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGFuIGludGVnZXJcIikpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbnZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBpbnRlZ2VyKHByb3BzLCBwcm9wTmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDJdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVpcmVkSW50ZWdlci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG59O1xuXG52YWxpZGF0b3IuaXNSZXF1aXJlZCA9IHJlcXVpcmVkSW50ZWdlcjtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdpbnRlZ2VyJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZWdlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0ga2V5c09mVmFsaWRhdG9yO1xuXG52YXIgX2lzUHJpbWl0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL2lzUHJpbWl0aXZlXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24ga2V5c09mVmFsaWRhdG9yKHByb3BUeXBlKSB7XG4gIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAna2V5c09mJztcblxuICBpZiAodHlwZW9mIHByb3BUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgdG8ga2V5c09mIG11c3QgYmUgYSB2YWxpZCBQcm9wVHlwZSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGtleXNPZihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSA1XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsIHx8ICgwLCBfaXNQcmltaXRpdmVbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RFcnJvciA9IG51bGw7XG4gICAgT2JqZWN0LmtleXMocHJvcFZhbHVlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZpcnN0RXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtfZGVmaW5lUHJvcGVydHkoe30sIGtleSwga2V5KSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgXCIoXCIuY29uY2F0KHByb3BGdWxsTmFtZSwgXCIpLlwiKS5jb25jYXQoa2V5KV0uY29uY2F0KHJlc3QpKTtcbiAgICAgIHJldHVybiBmaXJzdEVycm9yICE9IG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0RXJyb3IgfHwgbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGtleWVkQnlSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgaXMgcmVxdWlyZWQsIGJ1dCB2YWx1ZSBpcyBcIikuY29uY2F0KHByb3BWYWx1ZSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIG5hbWUsIHByb3BUeXBlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWtleXNPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbXV0dWFsbHlFeGNsdXNpdmVPZlR5cGU7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZU9mVHlwZShwcm9wVHlwZSkge1xuICBpZiAodHlwZW9mIHByb3BUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBwcm9wVHlwZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4Y2x1c2l2ZVByb3BzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBleGNsdXNpdmVQcm9wc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoZXhjbHVzaXZlUHJvcHMubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2F0IGxlYXN0IG9uZSBwcm9wIHRoYXQgaXMgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggdGhpcyBwcm9wVHlwZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHByb3BMaXN0ID0gZXhjbHVzaXZlUHJvcHMuam9pbignLCBvciAnKTtcbiAgdmFyIG1hcCA9IGV4Y2x1c2l2ZVByb3BzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwcm9wKSB7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcCwgdHJ1ZSkpO1xuICB9LCB7fSk7XG5cbiAgdmFyIGNvdW50UHJvcHMgPSBmdW5jdGlvbiBjb3VudFByb3BzKGNvdW50LCBwcm9wKSB7XG4gICAgcmV0dXJuIGNvdW50ICsgKG1hcFtwcm9wXSA/IDEgOiAwKTtcbiAgfTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gbXV0dWFsbHlFeGNsdXNpdmVQcm9wcyhwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcihmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGw7XG4gICAgfSkucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIHByb3BzOiBcIikuY29uY2F0KHByb3BMaXN0KSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlUHJvcHNSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gT2JqZWN0LmtleXMocHJvcHMpLmZpbHRlcihmdW5jdGlvbiAocHJvcCkge1xuICAgICAgcmV0dXJuIHByb3AgPT09IHByb3BOYW1lIHx8IHByb3BzW3Byb3BdICE9IG51bGw7XG4gICAgfSkucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIHByb3BzOiBcIikuY29uY2F0KHByb3BMaXN0KSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMyA/IF9sZW4zIC0gMyA6IDApLCBfa2V5MyA9IDM7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcIm11dHVhbGx5RXhjbHVzaXZlUHJvcHM6XCIuY29uY2F0KHByb3BMaXN0KSwgZXhjbHVzaXZlUHJvcHMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXV0dWFsbHlFeGNsdXNpdmVQcm9wcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbXV0dWFsbHlFeGNsdXNpdmVUcnVlO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVRydWUoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBleGNsdXNpdmVQcm9wcyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBleGNsdXNpdmVQcm9wc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChleGNsdXNpdmVQcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXQgbGVhc3Qgb25lIHByb3AgdGhhdCBpcyBtdXR1YWxseSBleGNsdXNpdmUgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGlmICghZXhjbHVzaXZlUHJvcHMuZXZlcnkoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FsbCBleGNsdXNpdmUgdHJ1ZSBwcm9wcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgfVxuXG4gIHZhciBwcm9wc0xpc3QgPSBleGNsdXNpdmVQcm9wcy5qb2luKCcsIG9yICcpO1xuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wcyhwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgY291bnRQcm9wcyA9IGZ1bmN0aW9uIGNvdW50UHJvcHMoY291bnQsIHByb3ApIHtcbiAgICAgIHJldHVybiBjb3VudCArIChwcm9wc1twcm9wXSA/IDEgOiAwKTtcbiAgICB9O1xuXG4gICAgdmFyIGV4Y2x1c2l2ZVByb3BDb3VudCA9IGV4Y2x1c2l2ZVByb3BzLnJlZHVjZShjb3VudFByb3BzLCAwKTtcblxuICAgIGlmIChleGNsdXNpdmVQcm9wQ291bnQgPiAxKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiQSBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgY2Fubm90IGhhdmUgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBib29sZWFuIHByb3BzIGJlIHRydWU6IFwiKS5jb25jYXQocHJvcHNMaXN0KSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9wcm9wVHlwZXMuYm9vbC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudFByb3BzID0gZnVuY3Rpb24gY291bnRQcm9wcyhjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgdHJ1ZTogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5ib29sLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHM6IFwiLmNvbmNhdChwcm9wc0xpc3QpLCBleGNsdXNpdmVQcm9wcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wcy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbkNoaWxkcmVuO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBuQ2hpbGRyZW4obikge1xuICB2YXIgcHJvcFR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IF9wcm9wVHlwZXMubm9kZTtcblxuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IGlzTmFOKG4pIHx8IG4gPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBub24tbmVnYXRpdmUgbnVtYmVyIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gbkNoaWxkcmVuVmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIG5DaGlsZHJlbiB2YWxpZGF0b3Igb24gYSBub24tY2hpbGRyZW4gcHJvcFwiKSk7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gcHJvcHMuY2hpbGRyZW47XG5cbiAgICB2YXIgY2hpbGRyZW5Db3VudCA9IF9yZWFjdFtcImRlZmF1bHRcIl0uQ2hpbGRyZW4uY291bnQoY2hpbGRyZW4pO1xuXG4gICAgaWYgKGNoaWxkcmVuQ291bnQgIT09IG4pIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBleHBlY3RzIHRvIHJlY2VpdmUgXCIpLmNvbmNhdChuLCBcIiBjaGlsZHJlbiwgYnV0IHJlY2VpdmVkIFwiKS5jb25jYXQoY2hpbGRyZW5Db3VudCwgXCIgY2hpbGRyZW4uXCIpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gdmFsaWRhdG9yO1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcIm5DaGlsZHJlbjpcIi5jb25jYXQobiksIG4pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bkNoaWxkcmVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2ludGVnZXJcIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlTnVtYmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZU51bWJlclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgX2RlZmF1bHQgPSAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFsoMCwgX2ludGVnZXJbXCJkZWZhdWx0XCJdKSgpLCAoMCwgX25vbk5lZ2F0aXZlTnVtYmVyW1wiZGVmYXVsdFwiXSkoKV0sICdub25OZWdhdGl2ZUludGVnZXInKTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5vbk5lZ2F0aXZlSW50ZWdlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX29iamVjdElzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwib2JqZWN0LWlzXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gaXNOb25OZWdhdGl2ZSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoeCkgJiYgeCA+PSAwICYmICEoMCwgX29iamVjdElzW1wiZGVmYXVsdFwiXSkoeCwgLTApO1xufVxuXG5mdW5jdGlvbiBub25OZWdhdGl2ZU51bWJlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmICh2YWx1ZSA9PSBudWxsIHx8IGlzTm9uTmVnYXRpdmUodmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiIGluIFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZE5vbk5lZ2F0aXZlTnVtYmVyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKGlzTm9uTmVnYXRpdmUodmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiIGluIFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXJcIikpO1xufVxuXG5ub25OZWdhdGl2ZU51bWJlci5pc1JlcXVpcmVkID0gcmVxdWlyZWROb25OZWdhdGl2ZU51bWJlcjtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShub25OZWdhdGl2ZU51bWJlciwgJ25vbk5lZ2F0aXZlTnVtYmVyJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9uTmVnYXRpdmVOdW1iZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIHZhbGlkTnVtZXJpY0NoYXJzID0gL15bLStdPyg/OlsxLTldWzAtOV0qKD86XFwuWzAtOV0rKT98MHwwXFwuWzAtOV0rKSQvO1xuXG52YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gbnVtZXJpY1N0cmluZyhwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgc3RyaW5nRXJyb3IgPSBfcHJvcFR5cGVzLnN0cmluZy5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgcmV0dXJuIHN0cmluZ0Vycm9yO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICB2YXIgcGFzc2VzUmVnZXggPSB2YWxpZE51bWVyaWNDaGFycy50ZXN0KHZhbHVlKTtcblxuICBpZiAocGFzc2VzUmVnZXgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBwcm9wIFxcXCJcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcXCIgKHZhbHVlIFxcXCJcIikuY29uY2F0KHZhbHVlLCBcIlxcXCIpIG11c3QgYmUgYSBudW1lcmljIHN0cmluZzpcXG4gICAgLSBzdGFydGluZyB3aXRoIGFuIG9wdGlvbmFsICsgb3IgLVxcbiAgICAtIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGxlYWRpbmcgemVyb1xcbiAgICAtIHdpdGggYW4gb3B0aW9uYWwgZGVjaW1hbCBwYXJ0ICh0aGF0IGNvbnRhaW5zIG9ubHkgb25lIGRlY2ltYWwgcG9pbnQsIGlmIHByZXNlbnQpXFxuICAgIC0gdGhhdCBvdGhlcndpc2Ugb25seSBjb250YWlucyBkaWdpdHMgKDAtOSlcXG4gICAgLSBub3QgKy1OYU4sIG9yICstSW5maW5pdHlcXG4gIFwiKSk7XG59O1xuXG52YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG51bWVyaWNTdHJpbmdSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkXCIpKTtcbiAgfVxuXG4gIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xufTtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdudW1lcmljU3RyaW5nJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bnVtZXJpY1N0cmluZy5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX2lzUGxhaW5PYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQbGFpbk9iamVjdFwiKSk7XG5cbnZhciBfdHlwZU9mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3R5cGVPZlwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qXG4gIGNvZGUgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzE0MTU2ZTU2YjljZjE4YWM4Njk2MzE4NWM1YWY0YWJkZGYzZmY4MTEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy90eXBlcy9SZWFjdFByb3BUeXBlcy5qcyNMMjAyLUwyMDZcbiAgc28gdGhhdCBpdCBjYW4gYmUgY2FsbGVkIG91dHNpZGUgb2YgUmVhY3QncyBub3JtYWwgUHJvcFR5cGUgZmxvd1xuKi9cbnZhciBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lcyA9IHtcbiAgcHJvcDogJ3Byb3AnLFxuICBjb250ZXh0OiAnY29udGV4dCcsXG4gIGNoaWxkQ29udGV4dDogJ2NoaWxkIGNvbnRleHQnXG59O1xuXG5mdW5jdGlvbiBvYmplY3QocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoKDAsIF9pc1BsYWluT2JqZWN0W1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSB8fCBsb2NhdGlvbjtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIFwiLmNvbmNhdChsb2NhdGlvbk5hbWUsIFwiIGBcIikuY29uY2F0KHByb3BGdWxsTmFtZSwgXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoKDAsIF90eXBlT2ZbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpLCBcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBleHBlY3RlZCBgb2JqZWN0YC5cIikpO1xufVxuXG5vYmplY3QuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG9iamVjdFJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBsb2NhdGlvbk5hbWUgPSBSZWFjdFByb3BUeXBlTG9jYXRpb25OYW1lc1tsb2NhdGlvbl0gfHwgbG9jYXRpb247XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJUaGUgXCIuY29uY2F0KGxvY2F0aW9uTmFtZSwgXCIgYFwiKS5jb25jYXQocHJvcEZ1bGxOYW1lLCBcImAgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluIGBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCwgYnV0IGl0cyB2YWx1ZSBpcyBgXCIpLmNvbmNhdChwcm9wVmFsdWUsIFwiYC5cIikpO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIG9iamVjdC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWVdLmNvbmNhdChyZXN0KSk7XG59O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKG9iamVjdCwgJ29iamVjdCcpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9iamVjdC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gb3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gb25lT2ZUeXBlVmFsaWRhdG9yKHZhbGlkYXRvcnMpIHtcbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIG9uZU9mVHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3JzID0gdmFsaWRhdG9ycy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA8IHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogaW52YWxpZCB2YWx1ZSBzdXBwbGllZCB0byBcIikuY29uY2F0KHByb3BOYW1lLCBcIi5cIikpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gb25lT2ZUeXBlUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IG1pc3NpbmcgdmFsdWUgZm9yIHJlcXVpcmVkIFwiKS5jb25jYXQocHJvcE5hbWUsIFwiLlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIGVycm9ycyA9IHZhbGlkYXRvcnMubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICByZXR1cm4gdi5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gICAgfSkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgaWYgKGVycm9ycy5sZW5ndGggPT09IHZhbGlkYXRvcnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogaW52YWxpZCB2YWx1ZSBcIikuY29uY2F0KGVycm9ycywgXCIgc3VwcGxpZWQgdG8gcmVxdWlyZWQgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIuXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnb25lT2ZUeXBlJywgdmFsaWRhdG9ycyk7XG59XG5cbmZ1bmN0aW9uIG9yKHZhbGlkYXRvcnMpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdvcic7XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbGlkYXRvcnMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3I6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKHZhbGlkYXRvcnMubGVuZ3RoIDw9IDEpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3I6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IG9uZU9mVHlwZVZhbGlkYXRvcihbKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikob25lT2ZUeXBlVmFsaWRhdG9yKHZhbGlkYXRvcnMpKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheSh2YWxpZGF0b3JzKSkpO1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBuYW1lLCB2YWxpZGF0b3JzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBwcmVkaWNhdGU7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHByZWRpY2F0ZShmbikge1xuICB2YXIgbWVzc2FnZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJyc7XG5cbiAgaWYgKHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2BmbmAgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYG1lc3NhZ2VgLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVxdWlyZWRWYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHJlc3VsdCA9IGZuKHByb3BzW3Byb3BOYW1lXSk7XG5cbiAgICBpZiAocmVzdWx0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgIHJlcXVpcmVzIHRoYXQgYFwiKS5jb25jYXQocHJvcE5hbWUsIFwiYCBwYXNzIGEgcHJlZGljYXRlIGZ1bmN0aW9uXCIpLmNvbmNhdChtZXNzYWdlID8gXCI6IFwiLmNvbmNhdChtZXNzYWdlKSA6ICcnLCBcIi5cIikpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDIgPyBfbGVuIC0gMiA6IDApLCBfa2V5ID0gMjsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVpcmVkVmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gcmVxdWlyZWRWYWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdwcmVkaWNhdGUnLCBmbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVkaWNhdGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHJhbmdlO1xuXG52YXIgX2FuZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYW5kXCIpKTtcblxudmFyIF9iZXR3ZWVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9iZXR3ZWVuXCIpKTtcblxudmFyIF9pbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9pbnRlZ2VyXCIpKTtcblxudmFyIF9pc0ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNJbnRlZ2VyXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUiB8fFxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbk1hdGgucG93KDIsIDUzKSAtIDE7XG5cbmZ1bmN0aW9uIGlzVmFsaWRMZW5ndGgoeCkge1xuICByZXR1cm4gKDAsIF9pc0ludGVnZXJbXCJkZWZhdWx0XCJdKSh4KSAmJiBNYXRoLmFicyh4KSA8IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbmZ1bmN0aW9uIHJhbmdlKG1pbiwgbWF4KSB7XG4gIGlmICghaXNWYWxpZExlbmd0aChtaW4pIHx8ICFpc1ZhbGlkTGVuZ3RoKG1heCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlxcXCJyYW5nZVxcXCIgcmVxdWlyZXMgdHdvIGludGVnZXJzOiBcIi5jb25jYXQobWluLCBcIiBhbmQgXCIpLmNvbmNhdChtYXgsIFwiIGdpdmVuXCIpKTtcbiAgfVxuXG4gIGlmIChtaW4gPT09IG1heCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdtaW4gYW5kIG1heCBtdXN0IG5vdCBiZSB0aGUgc2FtZScpO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKCgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoWygwLCBfaW50ZWdlcltcImRlZmF1bHRcIl0pKCksICgwLCBfYmV0d2VlbltcImRlZmF1bHRcIl0pKHtcbiAgICBndGU6IG1pbixcbiAgICBsdDogbWF4XG4gIH0pXSwgJ3JhbmdlJyksICdyYW5nZScsIHtcbiAgICBtaW46IG1pbixcbiAgICBtYXg6IG1heFxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmdlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfcmVhY3QgPSByZXF1aXJlKFwicmVhY3RcIik7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGlzUHJvdG90eXBlT2YgPSBPYmplY3QucHJvdG90eXBlLmlzUHJvdG90eXBlT2Y7XG5cbmZ1bmN0aW9uIGlzTmV3UmVmKHByb3ApIHtcbiAgaWYgKCEoMCwgX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdKShwcm9wKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBvd25Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocHJvcCk7XG4gIHJldHVybiBvd25Qcm9wZXJ0aWVzLmxlbmd0aCA9PT0gMSAmJiBvd25Qcm9wZXJ0aWVzWzBdID09PSAnY3VycmVudCc7XG59XG5cbmZ1bmN0aW9uIGlzQ2FsbGJhY2tSZWYocHJvcCkge1xuICByZXR1cm4gdHlwZW9mIHByb3AgPT09ICdmdW5jdGlvbicgJiYgIWlzUHJvdG90eXBlT2YuY2FsbChfcmVhY3QuQ29tcG9uZW50LCBwcm9wKSAmJiAoIV9yZWFjdC5QdXJlQ29tcG9uZW50IHx8ICFpc1Byb3RvdHlwZU9mLmNhbGwoX3JlYWN0LlB1cmVDb21wb25lbnQsIHByb3ApKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZWRSZWYocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKGlzQ2FsbGJhY2tSZWYocHJvcFZhbHVlKSB8fCBpc05ld1JlZihwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgcmVmXCIpKTtcbn1cblxuZnVuY3Rpb24gcmVmKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVpcmVkUmVmLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbn1cblxucmVmLmlzUmVxdWlyZWQgPSByZXF1aXJlZFJlZjtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShyZWYsICdyZWYnKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWYuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGdldFJlcXVpcmVkQnk7XG5cbnZhciBfb2JqZWN0SXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QtaXNcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBnZXRSZXF1aXJlZEJ5KHJlcXVpcmVkQnlQcm9wTmFtZSwgcHJvcFR5cGUpIHtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICBmdW5jdGlvbiByZXF1aXJlZEJ5KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wc1tyZXF1aXJlZEJ5UHJvcE5hbWVdKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgICBpZiAoKDAsIF9vYmplY3RJc1tcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSwgZGVmYXVsdFZhbHVlKSB8fCB0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogd2hlbiBcIikuY29uY2F0KHJlcXVpcmVkQnlQcm9wTmFtZSwgXCIgaXMgdHJ1ZSwgcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXHUyMDFEIG11c3QgYmUgcHJlc2VudC5cIikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH1cblxuICByZXF1aXJlZEJ5LmlzUmVxdWlyZWQgPSBmdW5jdGlvbiByZXF1aXJlZEJ5UmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICgoMCwgX29iamVjdElzW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUpKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXHUyMDFEIG11c3QgYmUgcHJlc2VudC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVHlwZS5pc1JlcXVpcmVkLmFwcGx5KHByb3BUeXBlLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShyZXF1aXJlZEJ5LCBcInJlcXVpcmVkQnkgXFx1MjAxQ1wiLmNvbmNhdChyZXF1aXJlZEJ5UHJvcE5hbWUsIFwiXFx1MjAxRFwiKSwgW3JlcXVpcmVkQnlQcm9wTmFtZSwgZGVmYXVsdFZhbHVlXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXF1aXJlZEJ5LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGN1c3RvbU1lc3NhZ2VXcmFwcGVyKG1lc3NzYWdlRnVuY3Rpb24pIHtcbiAgZnVuY3Rpb24gcmVzdHJpY3RlZFByb3AocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbikge1xuICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG1lc3NzYWdlRnVuY3Rpb24gJiYgdHlwZW9mIG1lc3NzYWdlRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiA0ID8gX2xlbiAtIDQgOiAwKSwgX2tleSA9IDQ7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgcmVzdFtfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKG1lc3NzYWdlRnVuY3Rpb24uYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbl0uY29uY2F0KHJlc3QpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJUaGUgXCIuY29uY2F0KHByb3BOYW1lLCBcIiBcIikuY29uY2F0KGxvY2F0aW9uLCBcIiBvbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGlzIG5vdCBhbGxvd2VkLlwiKSk7XG4gIH1cblxuICByZXN0cmljdGVkUHJvcC5pc1JlcXVpcmVkID0gcmVzdHJpY3RlZFByb3A7XG4gIHJldHVybiByZXN0cmljdGVkUHJvcDtcbn1cblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHZhciBtZXNzc2FnZUZ1bmN0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBudWxsO1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoY3VzdG9tTWVzc2FnZVdyYXBwZXIobWVzc3NhZ2VGdW5jdGlvbiksICdyZXN0cmljdGVkUHJvcCcpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc3RyaWN0ZWRQcm9wLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBzZXF1ZW5jZU9mVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX2FuZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYW5kXCIpKTtcblxudmFyIF9iZXR3ZWVuID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9iZXR3ZWVuXCIpKTtcblxudmFyIF9ub25OZWdhdGl2ZUludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25vbk5lZ2F0aXZlSW50ZWdlclwiKSk7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vYmplY3RcIikpO1xuXG52YXIgX3dpdGhTaGFwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd2l0aFNoYXBlXCIpKTtcblxudmFyIF90eXBlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvdHlwZU9mXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBtaW5WYWxpZGF0b3IgPSBfbm9uTmVnYXRpdmVJbnRlZ2VyW1wiZGVmYXVsdFwiXTtcbnZhciBtYXhWYWxpZGF0b3IgPSAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFtfbm9uTmVnYXRpdmVJbnRlZ2VyW1wiZGVmYXVsdFwiXSwgKDAsIF9iZXR3ZWVuW1wiZGVmYXVsdFwiXSkoe1xuICBndGU6IDFcbn0pXSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2UobWluLCBtYXgpIHtcbiAgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInIHx8IHR5cGVvZiBtaW4gIT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIG51bGw7IC8vIG5vIGFkZGl0aW9uYWwgY2hlY2tpbmcgbmVlZGVkIHVubGVzcyBib3RoIGFyZSBwcmVzZW50XG4gIH1cblxuICBpZiAobWluIDw9IG1heCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKCdtaW4gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4Jyk7XG59XG5cbnZhciBzcGVjaWZpZXJTaGFwZSA9IHtcbiAgdmFsaWRhdG9yOiBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignXCJ2YWxpZGF0b3JcIiBtdXN0IGJlIGEgcHJvcFR5cGUgdmFsaWRhdG9yIGZ1bmN0aW9uJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0sXG4gIG1pbjogZnVuY3Rpb24gbWluKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHJldHVybiBtaW5WYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB8fCB2YWxpZGF0ZVJhbmdlKHByb3BzLm1pbiwgcHJvcHMubWF4KTtcbiAgfSxcbiAgbWF4OiBmdW5jdGlvbiBtYXgocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIG1heFZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHx8IHZhbGlkYXRlUmFuZ2UocHJvcHMubWluLCBwcm9wcy5tYXgpO1xuICB9XG59O1xuXG5mdW5jdGlvbiBnZXRNaW5NYXgoX3JlZikge1xuICB2YXIgbWluID0gX3JlZi5taW4sXG4gICAgICBtYXggPSBfcmVmLm1heDtcbiAgdmFyIG1pbmltdW07XG4gIHZhciBtYXhpbXVtO1xuXG4gIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyAmJiB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgIC8vIG5laXRoZXIgcHJvdmlkZWQsIGRlZmF1bHQgdG8gXCIxXCJcbiAgICBtaW5pbXVtID0gMTtcbiAgICBtYXhpbXVtID0gMTtcbiAgfSBlbHNlIHtcbiAgICBtaW5pbXVtID0gdHlwZW9mIG1pbiA9PT0gJ251bWJlcicgPyBtaW4gOiAxO1xuICAgIG1heGltdW0gPSB0eXBlb2YgbWF4ID09PSAnbnVtYmVyJyA/IG1heCA6IEluZmluaXR5O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtaW5pbXVtOiBtaW5pbXVtLFxuICAgIG1heGltdW06IG1heGltdW1cbiAgfTtcbn1cblxuZnVuY3Rpb24gY2h1bmtCeVR5cGUoaXRlbXMpIHtcbiAgdmFyIGNodW5rID0gW107XG4gIHZhciBsYXN0VHlwZTtcbiAgcmV0dXJuIGl0ZW1zLnJlZHVjZShmdW5jdGlvbiAoY2h1bmtzLCBpdGVtKSB7XG4gICAgdmFyIGl0ZW1UeXBlID0gKDAsIF90eXBlT2ZbXCJkZWZhdWx0XCJdKShpdGVtKTtcblxuICAgIGlmICghbGFzdFR5cGUgfHwgaXRlbVR5cGUgPT09IGxhc3RUeXBlKSB7XG4gICAgICBjaHVuay5wdXNoKGl0ZW0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaHVua3MucHVzaChjaHVuayk7XG4gICAgICBjaHVuayA9IFtpdGVtXTtcbiAgICB9XG5cbiAgICBsYXN0VHlwZSA9IGl0ZW1UeXBlO1xuICAgIHJldHVybiBjaHVua3M7XG4gIH0sIFtdKS5jb25jYXQoY2h1bmsubGVuZ3RoID4gMCA/IFtjaHVua10gOiBbXSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2h1bmtzKHNwZWNpZmllcnMsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgaXRlbXMgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciBjaHVua3MgPSBjaHVua0J5VHlwZShpdGVtcyk7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDRdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcGVjaWZpZXJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgdmFyIF9zcGVjaWZpZXJzJGkgPSBzcGVjaWZpZXJzW2ldLFxuICAgICAgICB2YWxpZGF0b3IgPSBfc3BlY2lmaWVycyRpLnZhbGlkYXRvcixcbiAgICAgICAgbWluID0gX3NwZWNpZmllcnMkaS5taW4sXG4gICAgICAgIG1heCA9IF9zcGVjaWZpZXJzJGkubWF4O1xuXG4gICAgdmFyIF9nZXRNaW5NYXggPSBnZXRNaW5NYXgoe1xuICAgICAgbWluOiBtaW4sXG4gICAgICBtYXg6IG1heFxuICAgIH0pLFxuICAgICAgICBtaW5pbXVtID0gX2dldE1pbk1heC5taW5pbXVtLFxuICAgICAgICBtYXhpbXVtID0gX2dldE1pbk1heC5tYXhpbXVtO1xuXG4gICAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgJiYgbWluaW11bSA9PT0gMCkge1xuICAgICAgLy8gbm8gY2h1bmtzIGxlZnQsIGJ1dCB0aGlzIHNwZWNpZmllciBkb2VzIG5vdCByZXF1aXJlIGFueSBpdGVtc1xuICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlPZlZhbGlkYXRvciA9ICgwLCBfcHJvcFR5cGVzLmFycmF5T2YpKHZhbGlkYXRvcikuaXNSZXF1aXJlZDtcbiAgICB2YXIgY2h1bmsgPSBjaHVua3Muc2hpZnQoKTsgLy8gZXh0cmFjdCB0aGUgbmV4dCBjaHVuayB0byB0ZXN0XG5cbiAgICB2YXIgY2h1bmtFcnJvciA9IGFycmF5T2ZWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCBjaHVuaykpLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICAgIGlmIChjaHVua0Vycm9yKSB7XG4gICAgICAvLyB0aGlzIGNodW5rIGlzIGludmFsaWRcbiAgICAgIGlmIChtaW5pbXVtID09PSAwKSB7XG4gICAgICAgIC8vIGJ1dCwgc3BlY2lmaWVyIGhhcyBhIG1pbiBvZiAwIGFuZCBjYW4gYmUgc2tpcHBlZFxuICAgICAgICBjaHVua3MudW5zaGlmdChjaHVuayk7IC8vIHB1dCB0aGUgY2h1bmsgYmFjaywgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvblxuXG4gICAgICAgIGNvbnRpbnVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaHVua0Vycm9yO1xuICAgIH0gLy8gY2h1bmsgaXMgdmFsaWQhXG5cblxuICAgIGlmIChjaHVuay5sZW5ndGggPCBtaW5pbXVtKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHNwZWNpZmllciBpbmRleCBcIikuY29uY2F0KGksIFwiIHJlcXVpcmVzIGEgbWluaW11bSBvZiBcIikuY29uY2F0KG1pbiwgXCIgaXRlbXMsIGJ1dCBvbmx5IGhhcyBcIikuY29uY2F0KGNodW5rLmxlbmd0aCwgXCIuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoY2h1bmsubGVuZ3RoID4gbWF4aW11bSkge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBzcGVjaWZpZXIgaW5kZXggXCIpLmNvbmNhdChpLCBcIiByZXF1aXJlcyBhIG1heGltdW0gb2YgXCIpLmNvbmNhdChtYXgsIFwiIGl0ZW1zLCBidXQgaGFzIFwiKS5jb25jYXQoY2h1bmsubGVuZ3RoLCBcIi5cIikpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjaHVua3MubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBhZnRlciBhbGwgXCIpLmNvbmNhdChzcGVjaWZpZXJzLmxlbmd0aCwgXCIgc3BlY2lmaWVycyBtYXRjaGVkLCBcIikuY29uY2F0KGNodW5rcy5sZW5ndGgsIFwiIHR5cGVzIG9mIGl0ZW1zIHdlcmUgcmVtYWluaW5nLlwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHNwZWNpZmllclZhbGlkYXRvciA9ICgwLCBfd2l0aFNoYXBlW1wiZGVmYXVsdFwiXSkoKDAsIF9vYmplY3RbXCJkZWZhdWx0XCJdKSgpLCBzcGVjaWZpZXJTaGFwZSkuaXNSZXF1aXJlZDtcblxuZnVuY3Rpb24gc2VxdWVuY2VPZlZhbGlkYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBzcGVjaWZpZXJzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgc3BlY2lmaWVyc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgaWYgKHNwZWNpZmllcnMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NlcXVlbmNlT2Y6IGF0IGxlYXN0IG9uZSBzcGVjaWZpZXIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciBlcnJvcnMgPSBzcGVjaWZpZXJzLm1hcChmdW5jdGlvbiAoc3BlY2lmaWVyLCBpKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllclZhbGlkYXRvcih7XG4gICAgICBzcGVjaWZpZXI6IHNwZWNpZmllclxuICAgIH0sICdzcGVjaWZpZXInLCAnc2VxdWVuY2VPZiBzcGVjaWZpZXInLCBcInN1ZXF1ZW5jZU9mIHNwZWNpZmllciwgaW5kZXggXCIuY29uY2F0KGkpLCBcInNwZWNpZmllciwgaW5kZXggXCIuY29uY2F0KGkpKTtcbiAgfSk7XG5cbiAgaWYgKGVycm9ycy5zb21lKEJvb2xlYW4pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlxcbiAgICAgIHNlcXVlbmNlT2Y6IGFsbCBzcGVjaWZpZXJzIG11c3QgbWF0Y2ggdGhlIGFwcHJvcHJpYXRlIHNoYXBlLlxcblxcbiAgICAgIEVycm9yczpcXG4gICAgICAgIFwiLmNvbmNhdChlcnJvcnMubWFwKGZ1bmN0aW9uIChlLCBpKSB7XG4gICAgICByZXR1cm4gXCIgLSBBcmd1bWVudCBpbmRleCBcIi5jb25jYXQoaSwgXCI6IFwiKS5jb25jYXQoZS5tZXNzYWdlKTtcbiAgICB9KS5qb2luKCcsXFxuICAgICAgICAnKSwgXCJcXG4gICAgXCIpKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBzZXF1ZW5jZU9mKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDIgPyBfbGVuMyAtIDIgOiAwKSwgX2tleTMgPSAyOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gMl0gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IF9wcm9wVHlwZXMuYXJyYXkuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ2h1bmtzLmFwcGx5KHZvaWQgMCwgW3NwZWNpZmllcnMsIHByb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHNlcXVlbmNlT2ZSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjQgPiAzID8gX2xlbjQgLSAzIDogMCksIF9rZXk0ID0gMzsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgcmVzdFtfa2V5NCAtIDNdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3IgPSBfcHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5hcnJheSwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUNodW5rcy5hcHBseSh2b2lkIDAsIFtzcGVjaWZpZXJzLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3NlcXVlbmNlT2YnLCBzcGVjaWZpZXJzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlcXVlbmNlT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHNoYXBlVmFsaWRhdG9yO1xuXG52YXIgX2lzUGxhaW5PYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQbGFpbk9iamVjdFwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHNoYXBlVmFsaWRhdG9yKHNoYXBlVHlwZXMpIHtcbiAgaWYgKCEoMCwgX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdKShzaGFwZVR5cGVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NoYXBlIG11c3QgYmUgYSBub3JtYWwgb2JqZWN0Jyk7XG4gIH1cblxuICBmdW5jdGlvbiBzaGFwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBjb2RlIGFkYXB0ZWQgZnJvbSBQcm9wVHlwZXMuc2hhcGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzE0MTU2ZTU2YjljZjE4YWM4Njk2MzE4NWM1YWY0YWJkZGYzZmY4MTEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy90eXBlcy9SZWFjdFByb3BUeXBlcy5qcyNMMzgxXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiwgbm8tcmVzdHJpY3RlZC1zeW50YXhcblxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuXG4gICAgICBpZiAoY2hlY2tlcikge1xuICAgICAgICB2YXIgZXJyb3IgPSBjaGVja2VyLmFwcGx5KHZvaWQgMCwgW3Byb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbl0uY29uY2F0KHJlc3QpKTtcblxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHNoYXBlLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBzaGFwZVJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyByZXF1aXJlZC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiBzaGFwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHNoYXBlLCAnc2hhcGUnLCBzaGFwZVR5cGVzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYXBlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBzdHJpbmdFbmRzV2l0aFZhbGlkYXRvcjtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaW5nRW5kc1dpdGhWYWxpZGF0b3IoZW5kKSB7XG4gIGlmICh0eXBlb2YgZW5kICE9PSAnc3RyaW5nJyB8fCBlbmQubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYSBub24tZW1wdHkgc3RyaW5nIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gc3RyaW5nRW5kc1dpdGgocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wVmFsdWUuZW5kc1dpdGgoZW5kKSB8fCBwcm9wVmFsdWUubGVuZ3RoIDw9IGVuZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBkb2VzIG5vdCBlbmQgd2l0aCBcXFwiXCIpLmNvbmNhdChlbmQsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiByZXF1aXJlZFN0cmluZ0VuZHNXaXRoKCkge1xuICAgIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5zdHJpbmcsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcInN0cmluZ0VuZHNXaXRoOiBcIi5jb25jYXQoZW5kKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdHJpbmdFbmRzV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gc3RyaW5nU3RhcnRzV2l0aFZhbGlkYXRvcjtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaW5nU3RhcnRzV2l0aFZhbGlkYXRvcihzdGFydCkge1xuICBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnc3RyaW5nJyB8fCBzdGFydC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICAgIGlmIChzdHJpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmluZ0Vycm9yO1xuICAgIH1cblxuICAgIGlmICghcHJvcFZhbHVlLnN0YXJ0c1dpdGgoc3RhcnQpIHx8IHByb3BWYWx1ZS5sZW5ndGggPD0gc3RhcnQubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgZG9lcyBub3Qgc3RhcnQgd2l0aCBcXFwiXCIpLmNvbmNhdChzdGFydCwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nU3RhcnRzV2l0aCgpIHtcbiAgICB2YXIgc3RyaW5nRXJyb3IgPSBfcHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLmFwcGx5KF9wcm9wVHlwZXMuc3RyaW5nLCBhcmd1bWVudHMpO1xuXG4gICAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJzdHJpbmdTdGFydHNXaXRoOiBcIi5jb25jYXQoc3RhcnQpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZ1N0YXJ0c1dpdGguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gdW5pcXVlQ291bnRXaXRoU2V0KGFycikge1xuICByZXR1cm4gbmV3IFNldChhcnIpLnNpemU7XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbmZ1bmN0aW9uIHVuaXF1ZUNvdW50TGVnYWN5KGFycikge1xuICB2YXIgc2VlbiA9IFtdO1xuICBhcnIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgIGlmIChzZWVuLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICBzZWVuLnB1c2goaXRlbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlZW4ubGVuZ3RoO1xufVxuXG52YXIgZ2V0VW5pcXVlQ291bnQgPSB0eXBlb2YgU2V0ID09PSAnZnVuY3Rpb24nID8gdW5pcXVlQ291bnRXaXRoU2V0IDpcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG51bmlxdWVDb3VudExlZ2FjeTtcblxuZnVuY3Rpb24gcmVxdWlyZWRVbmlxdWVBcnJheShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IF9wcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmFycmF5LCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICB2YXIgdW5pcXVlQ291bnQgPSBnZXRVbmlxdWVDb3VudChwcm9wVmFsdWUpO1xuXG4gIGlmICh1bmlxdWVDb3VudCAhPT0gcHJvcFZhbHVlLmxlbmd0aCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogdmFsdWVzIG11c3QgYmUgdW5pcXVlLiBcIikuY29uY2F0KHByb3BWYWx1ZS5sZW5ndGggLSB1bmlxdWVDb3VudCwgXCIgZHVwbGljYXRlIHZhbHVlcyBmb3VuZC5cIikpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHVuaXF1ZUFycmF5KHByb3BzLCBwcm9wTmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMiA/IF9sZW4yIC0gMiA6IDApLCBfa2V5MiA9IDI7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICByZXN0W19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgcmV0dXJuIHJlcXVpcmVkVW5pcXVlQXJyYXkuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xufVxuXG51bmlxdWVBcnJheS5pc1JlcXVpcmVkID0gcmVxdWlyZWRVbmlxdWVBcnJheTtcblxudmFyIF9kZWZhdWx0ID0gZnVuY3Rpb24gX2RlZmF1bHQoKSB7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh1bmlxdWVBcnJheSwgJ3VuaXF1ZUFycmF5Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pcXVlQXJyYXkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHVuaXF1ZUFycmF5T2ZUeXBlVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX2FuZCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYW5kXCIpKTtcblxudmFyIF91bmlxdWVBcnJheSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdW5pcXVlQXJyYXlcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciB1bmlxdWUgPSAoMCwgX3VuaXF1ZUFycmF5W1wiZGVmYXVsdFwiXSkoKTtcblxuZnVuY3Rpb24gdW5pcXVlQXJyYXlPZlR5cGVWYWxpZGF0b3IodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0eXBlIG11c3QgYmUgYSB2YWxpZGF0b3IgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIHZhciBtYXBwZXIgPSBudWxsO1xuICB2YXIgbmFtZSA9ICd1bmlxdWVBcnJheU9mVHlwZSc7XG5cbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHJlc3RbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHJlc3QubGVuZ3RoID09PSAxKSB7XG4gICAgaWYgKHR5cGVvZiByZXN0WzBdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtYXBwZXIgPSByZXN0WzBdO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc3RbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lID0gcmVzdFswXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2luZ2xlIGlucHV0IG11c3QgZWl0aGVyIGJlIHN0cmluZyBvciBmdW5jdGlvbicpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChyZXN0Lmxlbmd0aCA9PT0gMikge1xuICAgIGlmICh0eXBlb2YgcmVzdFswXSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgcmVzdFsxXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG1hcHBlciA9IHJlc3RbMF07XG4gICAgICBuYW1lID0gcmVzdFsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVsdGlwbGUgaW5wdXRzIG11c3QgYmUgaW4gW2Z1bmN0aW9uLCBzdHJpbmddIG9yZGVyJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID4gMikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29ubHkgW10sIFtuYW1lXSwgW21hcHBlcl0sIGFuZCBbbWFwcGVyLCBuYW1lXSBhcmUgdmFsaWQgaW5wdXRzJyk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmlxdWVBcnJheU9mTWFwcGVkKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZXMgPSBwcm9wVmFsdWUubWFwKG1hcHBlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlLmFwcGx5KHZvaWQgMCwgW19vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZSwgdmFsdWVzKSksIHByb3BOYW1lXS5jb25jYXQoYXJncykpO1xuICB9XG5cbiAgdW5pcXVlQXJyYXlPZk1hcHBlZC5pc1JlcXVpcmVkID0gZnVuY3Rpb24gaXNSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIGFyZ3NbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gX3Byb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLmFwcGx5KF9wcm9wVHlwZXMuYXJyYXksIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXF1ZUFycmF5T2ZNYXBwZWQuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQoYXJncykpO1xuICB9O1xuXG4gIHZhciBhcnJheVZhbGlkYXRvciA9ICgwLCBfcHJvcFR5cGVzLmFycmF5T2YpKHR5cGUpO1xuICB2YXIgdW5pcXVlVmFsaWRhdG9yID0gbWFwcGVyID8gdW5pcXVlQXJyYXlPZk1hcHBlZCA6IHVuaXF1ZTtcbiAgdmFyIHZhbGlkYXRvciA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW2FycmF5VmFsaWRhdG9yLCB1bmlxdWVWYWxpZGF0b3JdLCBuYW1lKTtcbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFt1bmlxdWVWYWxpZGF0b3IuaXNSZXF1aXJlZCwgYXJyYXlWYWxpZGF0b3IuaXNSZXF1aXJlZF0sIFwiXCIuY29uY2F0KG5hbWUsIFwiLmlzUmVxdWlyZWRcIikpO1xuICByZXR1cm4gdmFsaWRhdG9yO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dW5pcXVlQXJyYXlPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdmFsdWVzT2ZWYWxpZGF0b3I7XG5cbnZhciBfaXNQcmltaXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQcmltaXRpdmVcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vLyBjb2RlIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi8xNDE1NmU1NmI5Y2YxOGFjODY5NjMxODVjNWFmNGFiZGRmM2ZmODExL3NyYy9pc29tb3JwaGljL2NsYXNzaWMvdHlwZXMvUmVhY3RQcm9wVHlwZXMuanMjTDMwNy1MMzQwXG5mdW5jdGlvbiB2YWx1ZXNPZlZhbGlkYXRvcihwcm9wVHlwZSkge1xuICBpZiAodHlwZW9mIHByb3BUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb2JqZWN0T2Y6IHByb3BUeXBlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHZhbHVlc09mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiA1ID8gX2xlbiAtIDUgOiAwKSwgX2tleSA9IDU7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwgfHwgKDAsIF9pc1ByaW1pdGl2ZVtcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yO1xuICAgIE9iamVjdC5rZXlzKHByb3BWYWx1ZSkuc29tZShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBmaXJzdEVycm9yID0gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBcIlwiLmNvbmNhdChwcm9wRnVsbE5hbWUsIFwiLlwiKS5jb25jYXQoa2V5KV0uY29uY2F0KHJlc3QpKTtcbiAgICAgIHJldHVybiBmaXJzdEVycm9yO1xuICAgIH0pO1xuICAgIHJldHVybiBmaXJzdEVycm9yIHx8IG51bGw7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiB2YWx1ZXNPZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyByZXF1aXJlZC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICd2YWx1ZXNPZicsIHByb3BUeXBlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZhbHVlc09mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB3aXRoU2hhcGU7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX3NoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zaGFwZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB3aXRoU2hhcGUodHlwZSwgc2hhcGVUeXBlcykge1xuICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0eXBlIG11c3QgYmUgYSB2YWxpZCBQcm9wVHlwZScpO1xuICB9XG5cbiAgdmFyIHNoYXBlVmFsaWRhdG9yID0gKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHNoYXBlVHlwZXMpO1xuICByZXR1cm4gKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbdHlwZSwgc2hhcGVWYWxpZGF0b3JdLCAnd2l0aFNoYXBlJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aXRoU2hhcGUuanMubWFwIiwibW9kdWxlLmV4cG9ydHMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nID8gcmVxdWlyZSgnLi9idWlsZC9tb2NrcycpIDogcmVxdWlyZSgnLi9idWlsZCcpO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbnZhciBUb09iamVjdCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QnKTtcbnZhciBUb0xlbmd0aCA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGgnKTtcbnZhciBJc0NhbGxhYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Jc0NhbGxhYmxlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmluZChwcmVkaWNhdGUpIHtcblx0dmFyIGxpc3QgPSBUb09iamVjdCh0aGlzKTtcblx0dmFyIGxlbmd0aCA9IFRvTGVuZ3RoKGxpc3QubGVuZ3RoKTtcblx0aWYgKCFJc0NhbGxhYmxlKHByZWRpY2F0ZSkpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSNmaW5kOiBwcmVkaWNhdGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKGxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB2b2lkIDA7XG5cdH1cblx0dmFyIHRoaXNBcmc7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkge1xuXHRcdHRoaXNBcmcgPSBhcmd1bWVudHNbMV07XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMCwgdmFsdWU7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdHZhbHVlID0gbGlzdFtpXTtcblx0XHQvLyBpbmxpbmVkIGZvciBwZXJmb3JtYW5jZTogaWYgKENhbGwocHJlZGljYXRlLCB0aGlzQXJnLCBbdmFsdWUsIGksIGxpc3RdKSkge1xuXHRcdGlmIChwcmVkaWNhdGUuYXBwbHkodGhpc0FyZywgW3ZhbHVlLCBpLCBsaXN0XSkpIHtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHZvaWQgMDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBzaGltID0gcmVxdWlyZSgnLi9zaGltJyk7XG5cbnZhciAkc2xpY2UgPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5zbGljZScpO1xuXG52YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXG52YXIgYm91bmRGaW5kU2hpbSA9IGZ1bmN0aW9uIGZpbmQoYXJyYXksIHByZWRpY2F0ZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJyYXkpO1xuXHR2YXIgYXJncyA9ICRzbGljZShhcmd1bWVudHMsIDEpO1xuXHRyZXR1cm4gcG9seWZpbGwuYXBwbHkoYXJyYXksIGFyZ3MpO1xufTtcblxuZGVmaW5lKGJvdW5kRmluZFNoaW0sIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kRmluZFNoaW07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdC8vIERldGVjdCBpZiBhbiBpbXBsZW1lbnRhdGlvbiBleGlzdHNcblx0Ly8gRGV0ZWN0IGVhcmx5IGltcGxlbWVudGF0aW9ucyB3aGljaCBza2lwcGVkIGhvbGVzIGluIHNwYXJzZSBhcnJheXNcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNwYXJzZS1hcnJheXNcblx0dmFyIGltcGxlbWVudGVkID0gQXJyYXkucHJvdG90eXBlLmZpbmQgJiYgWywgMV0uZmluZChmdW5jdGlvbiAoKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0pICE9PSAxO1xuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuXHRyZXR1cm4gaW1wbGVtZW50ZWQgPyBBcnJheS5wcm90b3R5cGUuZmluZCA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1BcnJheVByb3RvdHlwZUZpbmQoKSB7XG5cdHZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cblx0ZGVmaW5lKEFycmF5LnByb3RvdHlwZSwgeyBmaW5kOiBwb2x5ZmlsbCB9LCB7XG5cdFx0ZmluZDogZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maW5kICE9PSBwb2x5ZmlsbDtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxucmVxdWlyZShcImNvcmUtanMvc2hpbVwiKTtcblxucmVxdWlyZShcInJlZ2VuZXJhdG9yLXJ1bnRpbWUvcnVudGltZVwiKTtcblxucmVxdWlyZShcImNvcmUtanMvZm4vcmVnZXhwL2VzY2FwZVwiKTtcblxuaWYgKGdsb2JhbC5fYmFiZWxQb2x5ZmlsbCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJvbmx5IG9uZSBpbnN0YW5jZSBvZiBiYWJlbC1wb2x5ZmlsbCBpcyBhbGxvd2VkXCIpO1xufVxuZ2xvYmFsLl9iYWJlbFBvbHlmaWxsID0gdHJ1ZTtcblxudmFyIERFRklORV9QUk9QRVJUWSA9IFwiZGVmaW5lUHJvcGVydHlcIjtcbmZ1bmN0aW9uIGRlZmluZShPLCBrZXksIHZhbHVlKSB7XG4gIE9ba2V5XSB8fCBPYmplY3RbREVGSU5FX1BST1BFUlRZXShPLCBrZXksIHtcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IHZhbHVlXG4gIH0pO1xufVxuXG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRMZWZ0XCIsIFwiXCIucGFkU3RhcnQpO1xuZGVmaW5lKFN0cmluZy5wcm90b3R5cGUsIFwicGFkUmlnaHRcIiwgXCJcIi5wYWRFbmQpO1xuXG5cInBvcCxyZXZlcnNlLHNoaWZ0LGtleXMsdmFsdWVzLGVudHJpZXMsaW5kZXhPZixldmVyeSxzb21lLGZvckVhY2gsbWFwLGZpbHRlcixmaW5kLGZpbmRJbmRleCxpbmNsdWRlcyxqb2luLHNsaWNlLGNvbmNhdCxwdXNoLHNwbGljZSx1bnNoaWZ0LHNvcnQsbGFzdEluZGV4T2YscmVkdWNlLHJlZHVjZVJpZ2h0LGNvcHlXaXRoaW4sZmlsbFwiLnNwbGl0KFwiLFwiKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgW11ba2V5XSAmJiBkZWZpbmUoQXJyYXksIGtleSwgRnVuY3Rpb24uY2FsbC5iaW5kKFtdW2tleV0pKTtcbn0pOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnLi8nKTtcblxudmFyICRpbmRleE9mID0gY2FsbEJpbmQoR2V0SW50cmluc2ljKCdTdHJpbmcucHJvdG90eXBlLmluZGV4T2YnKSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJvdW5kSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljID0gR2V0SW50cmluc2ljKG5hbWUsICEhYWxsb3dNaXNzaW5nKTtcblx0aWYgKHR5cGVvZiBpbnRyaW5zaWMgPT09ICdmdW5jdGlvbicgJiYgJGluZGV4T2YobmFtZSwgJy5wcm90b3R5cGUuJykgPiAtMSkge1xuXHRcdHJldHVybiBjYWxsQmluZChpbnRyaW5zaWMpO1xuXHR9XG5cdHJldHVybiBpbnRyaW5zaWM7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmRlZmluZVByb3BlcnR5JScsIHRydWUpO1xudmFyICRtYXggPSBHZXRJbnRyaW5zaWMoJyVNYXRoLm1heCUnKTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHR0cnkge1xuXHRcdCRkZWZpbmVQcm9wZXJ0eSh7fSwgJ2EnLCB7IHZhbHVlOiAxIH0pO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZGVmaW5lUHJvcGVydHlcblx0XHQkZGVmaW5lUHJvcGVydHkgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHR2YXIgZnVuYyA9ICRyZWZsZWN0QXBwbHkoYmluZCwgJGNhbGwsIGFyZ3VtZW50cyk7XG5cdGlmICgkZ09QRCAmJiAkZGVmaW5lUHJvcGVydHkpIHtcblx0XHR2YXIgZGVzYyA9ICRnT1BEKGZ1bmMsICdsZW5ndGgnKTtcblx0XHRpZiAoZGVzYy5jb25maWd1cmFibGUpIHtcblx0XHRcdC8vIG9yaWdpbmFsIGxlbmd0aCwgcGx1cyB0aGUgcmVjZWl2ZXIsIG1pbnVzIGFueSBhZGRpdGlvbmFsIGFyZ3VtZW50cyAoYWZ0ZXIgdGhlIHJlY2VpdmVyKVxuXHRcdFx0JGRlZmluZVByb3BlcnR5KFxuXHRcdFx0XHRmdW5jLFxuXHRcdFx0XHQnbGVuZ3RoJyxcblx0XHRcdFx0eyB2YWx1ZTogMSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSB9XG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZnVuYztcbn07XG5cbnZhciBhcHBseUJpbmQgPSBmdW5jdGlvbiBhcHBseUJpbmQoKSB7XG5cdHJldHVybiAkcmVmbGVjdEFwcGx5KGJpbmQsICRhcHBseSwgYXJndW1lbnRzKTtcbn07XG5cbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0JGRlZmluZVByb3BlcnR5KG1vZHVsZS5leHBvcnRzLCAnYXBwbHknLCB7IHZhbHVlOiBhcHBseUJpbmQgfSk7XG59IGVsc2Uge1xuXHRtb2R1bGUuZXhwb3J0cy5hcHBseSA9IGFwcGx5QmluZDtcbn1cbiIsIi8qKlxuICogY2hyb21hLmpzIC0gSmF2YVNjcmlwdCBsaWJyYXJ5IGZvciBjb2xvciBjb252ZXJzaW9uc1xuICpcbiAqIENvcHlyaWdodCAoYykgMjAxMS0yMDE5LCBHcmVnb3IgQWlzY2hcbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcbiAqXG4gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXNcbiAqIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICpcbiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSxcbiAqIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cbiAqIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuICpcbiAqIDMuIFRoZSBuYW1lIEdyZWdvciBBaXNjaCBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzXG4gKiBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIlxuICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRVxuICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFXG4gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBHUkVHT1IgQUlTQ0ggT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCxcbiAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLFxuICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSxcbiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUllcbiAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gKiBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsXG4gKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqXG4gKiBjaHJvbWEuanMgaW5jbHVkZXMgY29sb3JzIGZyb20gY29sb3JicmV3ZXIyLm9yZywgd2hpY2ggYXJlIHJlbGVhc2VkIHVuZGVyXG4gKiB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLFxuICogYW5kIFRoZSBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKiBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsXG4gKiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhblxuICogXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCxcbiAqIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljXG4gKiBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICpcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIE5hbWVkIGNvbG9ycyBhcmUgdGFrZW4gZnJvbSBYMTEgQ29sb3IgTmFtZXMuXG4gKiBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAqXG4gKiBAcHJlc2VydmVcbiAqL1xuXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5jaHJvbWEgPSBmYWN0b3J5KCkpO1xufSkodGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGxpbWl0JDIgPSBmdW5jdGlvbiAoeCwgbWluLCBtYXgpIHtcbiAgICAgICAgaWYgKCBtaW4gPT09IHZvaWQgMCApIG1pbj0wO1xuICAgICAgICBpZiAoIG1heCA9PT0gdm9pZCAwICkgbWF4PTE7XG5cbiAgICAgICAgcmV0dXJuIHggPCBtaW4gPyBtaW4gOiB4ID4gbWF4ID8gbWF4IDogeDtcbiAgICB9O1xuXG4gICAgdmFyIGxpbWl0JDEgPSBsaW1pdCQyO1xuXG4gICAgdmFyIGNsaXBfcmdiJDMgPSBmdW5jdGlvbiAocmdiKSB7XG4gICAgICAgIHJnYi5fY2xpcHBlZCA9IGZhbHNlO1xuICAgICAgICByZ2IuX3VuY2xpcHBlZCA9IHJnYi5zbGljZSgwKTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPD0zOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChpIDwgMykge1xuICAgICAgICAgICAgICAgIGlmIChyZ2JbaV0gPCAwIHx8IHJnYltpXSA+IDI1NSkgeyByZ2IuX2NsaXBwZWQgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgcmdiW2ldID0gbGltaXQkMShyZ2JbaV0sIDAsIDI1NSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZ2JbaV0gPSBsaW1pdCQxKHJnYltpXSwgMCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjtcbiAgICB9O1xuXG4gICAgLy8gcG9ydGVkIGZyb20galF1ZXJ5J3MgJC50eXBlXG4gICAgdmFyIGNsYXNzVG9UeXBlID0ge307XG4gICAgZm9yICh2YXIgaSQxID0gMCwgbGlzdCQxID0gWydCb29sZWFuJywgJ051bWJlcicsICdTdHJpbmcnLCAnRnVuY3Rpb24nLCAnQXJyYXknLCAnRGF0ZScsICdSZWdFeHAnLCAnVW5kZWZpbmVkJywgJ051bGwnXTsgaSQxIDwgbGlzdCQxLmxlbmd0aDsgaSQxICs9IDEpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBsaXN0JDFbaSQxXTtcblxuICAgICAgICBjbGFzc1RvVHlwZVsoXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiKV0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuICAgIHZhciB0eXBlJHAgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIGNsYXNzVG9UeXBlW09iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopXSB8fCBcIm9iamVjdFwiO1xuICAgIH07XG5cbiAgICB2YXIgdHlwZSRvID0gdHlwZSRwO1xuXG4gICAgdmFyIHVucGFjayRCID0gZnVuY3Rpb24gKGFyZ3MsIGtleU9yZGVyKSB7XG4gICAgICAgIGlmICgga2V5T3JkZXIgPT09IHZvaWQgMCApIGtleU9yZGVyPW51bGw7XG5cbiAgICBcdC8vIGlmIGNhbGxlZCB3aXRoIG1vcmUgdGhhbiAzIGFyZ3VtZW50cywgd2UgcmV0dXJuIHRoZSBhcmd1bWVudHNcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID49IDMpIHsgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpOyB9XG4gICAgICAgIC8vIHdpdGggbGVzcyB0aGFuIDMgYXJncyB3ZSBjaGVjayBpZiBmaXJzdCBhcmcgaXMgb2JqZWN0XG4gICAgICAgIC8vIGFuZCB1c2UgdGhlIGtleU9yZGVyIHN0cmluZyB0byBleHRyYWN0IGFuZCBzb3J0IHByb3BlcnRpZXNcbiAgICBcdGlmICh0eXBlJG8oYXJnc1swXSkgPT0gJ29iamVjdCcgJiYga2V5T3JkZXIpIHtcbiAgICBcdFx0cmV0dXJuIGtleU9yZGVyLnNwbGl0KCcnKVxuICAgIFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGFyZ3NbMF1ba10gIT09IHVuZGVmaW5lZDsgfSlcbiAgICBcdFx0XHQubWFwKGZ1bmN0aW9uIChrKSB7IHJldHVybiBhcmdzWzBdW2tdOyB9KTtcbiAgICBcdH1cbiAgICBcdC8vIG90aGVyd2lzZSB3ZSBqdXN0IHJldHVybiB0aGUgZmlyc3QgYXJndW1lbnRcbiAgICBcdC8vICh3aGljaCB3ZSBzdXBwb3NlIGlzIGFuIGFycmF5IG9mIGFyZ3MpXG4gICAgICAgIHJldHVybiBhcmdzWzBdO1xuICAgIH07XG5cbiAgICB2YXIgdHlwZSRuID0gdHlwZSRwO1xuXG4gICAgdmFyIGxhc3QkNCA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDIpIHsgcmV0dXJuIG51bGw7IH1cbiAgICAgICAgdmFyIGwgPSBhcmdzLmxlbmd0aC0xO1xuICAgICAgICBpZiAodHlwZSRuKGFyZ3NbbF0pID09ICdzdHJpbmcnKSB7IHJldHVybiBhcmdzW2xdLnRvTG93ZXJDYXNlKCk7IH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBQSSQyID0gTWF0aC5QSTtcblxuICAgIHZhciB1dGlscyA9IHtcbiAgICBcdGNsaXBfcmdiOiBjbGlwX3JnYiQzLFxuICAgIFx0bGltaXQ6IGxpbWl0JDIsXG4gICAgXHR0eXBlOiB0eXBlJHAsXG4gICAgXHR1bnBhY2s6IHVucGFjayRCLFxuICAgIFx0bGFzdDogbGFzdCQ0LFxuICAgIFx0UEk6IFBJJDIsXG4gICAgXHRUV09QSTogUEkkMioyLFxuICAgIFx0UElUSElSRDogUEkkMi8zLFxuICAgIFx0REVHMlJBRDogUEkkMiAvIDE4MCxcbiAgICBcdFJBRDJERUc6IDE4MCAvIFBJJDJcbiAgICB9O1xuXG4gICAgdmFyIGlucHV0JGggPSB7XG4gICAgXHRmb3JtYXQ6IHt9LFxuICAgIFx0YXV0b2RldGVjdDogW11cbiAgICB9O1xuXG4gICAgdmFyIGxhc3QkMyA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIGNsaXBfcmdiJDIgPSB1dGlscy5jbGlwX3JnYjtcbiAgICB2YXIgdHlwZSRtID0gdXRpbHMudHlwZTtcbiAgICB2YXIgX2lucHV0ID0gaW5wdXQkaDtcblxuICAgIHZhciBDb2xvciREID0gZnVuY3Rpb24gQ29sb3IoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIG1lID0gdGhpcztcbiAgICAgICAgaWYgKHR5cGUkbShhcmdzWzBdKSA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgJiZcbiAgICAgICAgICAgIGFyZ3NbMF0uY29uc3RydWN0b3IgPT09IHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgIC8vIHRoZSBhcmd1bWVudCBpcyBhbHJlYWR5IGEgQ29sb3IgaW5zdGFuY2VcbiAgICAgICAgICAgIHJldHVybiBhcmdzWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGFzdCBhcmd1bWVudCBjb3VsZCBiZSB0aGUgbW9kZVxuICAgICAgICB2YXIgbW9kZSA9IGxhc3QkMyhhcmdzKTtcbiAgICAgICAgdmFyIGF1dG9kZXRlY3QgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIW1vZGUpIHtcbiAgICAgICAgICAgIGF1dG9kZXRlY3QgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFfaW5wdXQuc29ydGVkKSB7XG4gICAgICAgICAgICAgICAgX2lucHV0LmF1dG9kZXRlY3QgPSBfaW5wdXQuYXV0b2RldGVjdC5zb3J0KGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGIucCAtIGEucDsgfSk7XG4gICAgICAgICAgICAgICAgX2lucHV0LnNvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhdXRvLWRldGVjdCBmb3JtYXRcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gX2lucHV0LmF1dG9kZXRlY3Q7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNoayA9IGxpc3RbaV07XG5cbiAgICAgICAgICAgICAgICBtb2RlID0gY2hrLnRlc3QuYXBwbHkoY2hrLCBhcmdzKTtcbiAgICAgICAgICAgICAgICBpZiAobW9kZSkgeyBicmVhazsgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9pbnB1dC5mb3JtYXRbbW9kZV0pIHtcbiAgICAgICAgICAgIHZhciByZ2IgPSBfaW5wdXQuZm9ybWF0W21vZGVdLmFwcGx5KG51bGwsIGF1dG9kZXRlY3QgPyBhcmdzIDogYXJncy5zbGljZSgwLC0xKSk7XG4gICAgICAgICAgICBtZS5fcmdiID0gY2xpcF9yZ2IkMihyZ2IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGZvcm1hdDogJythcmdzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCBhbHBoYSBjaGFubmVsXG4gICAgICAgIGlmIChtZS5fcmdiLmxlbmd0aCA9PT0gMykgeyBtZS5fcmdiLnB1c2goMSk7IH1cbiAgICB9O1xuXG4gICAgQ29sb3IkRC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gICAgICAgIGlmICh0eXBlJG0odGhpcy5oZXgpID09ICdmdW5jdGlvbicpIHsgcmV0dXJuIHRoaXMuaGV4KCk7IH1cbiAgICAgICAgcmV0dXJuIChcIltcIiArICh0aGlzLl9yZ2Iuam9pbignLCcpKSArIFwiXVwiKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yXzEgPSBDb2xvciREO1xuXG4gICAgdmFyIGNocm9tYSRrID0gZnVuY3Rpb24gKCkge1xuICAgIFx0dmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICBcdHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICBcdHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBjaHJvbWEkay5Db2xvciwgWyBudWxsIF0uY29uY2F0KCBhcmdzKSApKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGsuQ29sb3IgPSBDb2xvcl8xO1xuICAgIGNocm9tYSRrLnZlcnNpb24gPSAnMi40LjInO1xuXG4gICAgdmFyIGNocm9tYV8xID0gY2hyb21hJGs7XG5cbiAgICB2YXIgdW5wYWNrJEEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIG1heCQyID0gTWF0aC5tYXg7XG5cbiAgICB2YXIgcmdiMmNteWskMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJEEoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICByID0gciAvIDI1NTtcbiAgICAgICAgZyA9IGcgLyAyNTU7XG4gICAgICAgIGIgPSBiIC8gMjU1O1xuICAgICAgICB2YXIgayA9IDEgLSBtYXgkMihyLG1heCQyKGcsYikpO1xuICAgICAgICB2YXIgZiA9IGsgPCAxID8gMSAvICgxLWspIDogMDtcbiAgICAgICAgdmFyIGMgPSAoMS1yLWspICogZjtcbiAgICAgICAgdmFyIG0gPSAoMS1nLWspICogZjtcbiAgICAgICAgdmFyIHkgPSAoMS1iLWspICogZjtcbiAgICAgICAgcmV0dXJuIFtjLG0seSxrXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJjbXlrXzEgPSByZ2IyY215ayQxO1xuXG4gICAgdmFyIHVucGFjayR6ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgdmFyIGNteWsycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skeihhcmdzLCAnY215aycpO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBtID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIHkgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgayA9IGFyZ3NbM107XG4gICAgICAgIHZhciBhbHBoYSA9IGFyZ3MubGVuZ3RoID4gNCA/IGFyZ3NbNF0gOiAxO1xuICAgICAgICBpZiAoayA9PT0gMSkgeyByZXR1cm4gWzAsMCwwLGFscGhhXTsgfVxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgYyA+PSAxID8gMCA6IDI1NSAqICgxLWMpICogKDEtayksIC8vIHJcbiAgICAgICAgICAgIG0gPj0gMSA/IDAgOiAyNTUgKiAoMS1tKSAqICgxLWspLCAvLyBnXG4gICAgICAgICAgICB5ID49IDEgPyAwIDogMjU1ICogKDEteSkgKiAoMS1rKSwgLy8gYlxuICAgICAgICAgICAgYWxwaGFcbiAgICAgICAgXTtcbiAgICB9O1xuXG4gICAgdmFyIGNteWsycmdiXzEgPSBjbXlrMnJnYjtcblxuICAgIHZhciBjaHJvbWEkaiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRDID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkZyA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayR5ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGwgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHJnYjJjbXlrID0gcmdiMmNteWtfMTtcblxuICAgIENvbG9yJEMucHJvdG90eXBlLmNteWsgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJjbXlrKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRqLmNteWsgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJEMsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydjbXlrJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRnLmZvcm1hdC5jbXlrID0gY215azJyZ2JfMTtcblxuICAgIGlucHV0JGcuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skeShhcmdzLCAnY215aycpO1xuICAgICAgICAgICAgaWYgKHR5cGUkbChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnY215ayc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skeCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGFzdCQyID0gdXRpbHMubGFzdDtcbiAgICB2YXIgcm5kID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIE1hdGgucm91bmQoYSoxMDApLzEwMDsgfTtcblxuICAgIC8qXG4gICAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICAgKiAtIGhzbDJjc3MoaCxzLGwpXG4gICAgICogLSBoc2wyY3NzKGgscyxsLGEpXG4gICAgICogLSBoc2wyY3NzKFtoLHMsbF0sIG1vZGUpXG4gICAgICogLSBoc2wyY3NzKFtoLHMsbCxhXSwgbW9kZSlcbiAgICAgKiAtIGhzbDJjc3Moe2gscyxsLGF9LCBtb2RlKVxuICAgICAqL1xuICAgIHZhciBoc2wyY3NzJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIGhzbGEgPSB1bnBhY2skeChhcmdzLCAnaHNsYScpO1xuICAgICAgICB2YXIgbW9kZSA9IGxhc3QkMihhcmdzKSB8fCAnbHNhJztcbiAgICAgICAgaHNsYVswXSA9IHJuZChoc2xhWzBdIHx8IDApO1xuICAgICAgICBoc2xhWzFdID0gcm5kKGhzbGFbMV0qMTAwKSArICclJztcbiAgICAgICAgaHNsYVsyXSA9IHJuZChoc2xhWzJdKjEwMCkgKyAnJSc7XG4gICAgICAgIGlmIChtb2RlID09PSAnaHNsYScgfHwgKGhzbGEubGVuZ3RoID4gMyAmJiBoc2xhWzNdPDEpKSB7XG4gICAgICAgICAgICBoc2xhWzNdID0gaHNsYS5sZW5ndGggPiAzID8gaHNsYVszXSA6IDE7XG4gICAgICAgICAgICBtb2RlID0gJ2hzbGEnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHNsYS5sZW5ndGggPSAzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAobW9kZSArIFwiKFwiICsgKGhzbGEuam9pbignLCcpKSArIFwiKVwiKTtcbiAgICB9O1xuXG4gICAgdmFyIGhzbDJjc3NfMSA9IGhzbDJjc3MkMTtcblxuICAgIHZhciB1bnBhY2skdyA9IHV0aWxzLnVucGFjaztcblxuICAgIC8qXG4gICAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICAgKiAtIHJnYjJoc2wocixnLGIpXG4gICAgICogLSByZ2IyaHNsKHIsZyxiLGEpXG4gICAgICogLSByZ2IyaHNsKFtyLGcsYl0pXG4gICAgICogLSByZ2IyaHNsKFtyLGcsYixhXSlcbiAgICAgKiAtIHJnYjJoc2woe3IsZyxiLGF9KVxuICAgICAqL1xuICAgIHZhciByZ2IyaHNsJDMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayR3KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciByID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGcgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG5cbiAgICAgICAgciAvPSAyNTU7XG4gICAgICAgIGcgLz0gMjU1O1xuICAgICAgICBiIC89IDI1NTtcblxuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcblxuICAgICAgICB2YXIgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgICAgICAgdmFyIHMsIGg7XG5cbiAgICAgICAgaWYgKG1heCA9PT0gbWluKXtcbiAgICAgICAgICAgIHMgPSAwO1xuICAgICAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gbCA8IDAuNSA/IChtYXggLSBtaW4pIC8gKG1heCArIG1pbikgOiAobWF4IC0gbWluKSAvICgyIC0gbWF4IC0gbWluKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyID09IG1heCkgeyBoID0gKGcgLSBiKSAvIChtYXggLSBtaW4pOyB9XG4gICAgICAgIGVsc2UgaWYgKGcgPT0gbWF4KSB7IGggPSAyICsgKGIgLSByKSAvIChtYXggLSBtaW4pOyB9XG4gICAgICAgIGVsc2UgaWYgKGIgPT0gbWF4KSB7IGggPSA0ICsgKHIgLSBnKSAvIChtYXggLSBtaW4pOyB9XG5cbiAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aD4zICYmIGFyZ3NbM10hPT11bmRlZmluZWQpIHsgcmV0dXJuIFtoLHMsbCxhcmdzWzNdXTsgfVxuICAgICAgICByZXR1cm4gW2gscyxsXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoc2xfMSA9IHJnYjJoc2wkMztcblxuICAgIHZhciB1bnBhY2skdiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGFzdCQxID0gdXRpbHMubGFzdDtcbiAgICB2YXIgaHNsMmNzcyA9IGhzbDJjc3NfMTtcbiAgICB2YXIgcmdiMmhzbCQyID0gcmdiMmhzbF8xO1xuICAgIHZhciByb3VuZCQ2ID0gTWF0aC5yb3VuZDtcblxuICAgIC8qXG4gICAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICAgKiAtIHJnYjJjc3MocixnLGIpXG4gICAgICogLSByZ2IyY3NzKHIsZyxiLGEpXG4gICAgICogLSByZ2IyY3NzKFtyLGcsYl0sIG1vZGUpXG4gICAgICogLSByZ2IyY3NzKFtyLGcsYixhXSwgbW9kZSlcbiAgICAgKiAtIHJnYjJjc3Moe3IsZyxiLGF9LCBtb2RlKVxuICAgICAqL1xuICAgIHZhciByZ2IyY3NzJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYmEgPSB1bnBhY2skdihhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgbW9kZSA9IGxhc3QkMShhcmdzKSB8fCAncmdiJztcbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMykgPT0gJ2hzbCcpIHtcbiAgICAgICAgICAgIHJldHVybiBoc2wyY3NzKHJnYjJoc2wkMihyZ2JhKSwgbW9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmdiYVswXSA9IHJvdW5kJDYocmdiYVswXSk7XG4gICAgICAgIHJnYmFbMV0gPSByb3VuZCQ2KHJnYmFbMV0pO1xuICAgICAgICByZ2JhWzJdID0gcm91bmQkNihyZ2JhWzJdKTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdyZ2JhJyB8fCAocmdiYS5sZW5ndGggPiAzICYmIHJnYmFbM108MSkpIHtcbiAgICAgICAgICAgIHJnYmFbM10gPSByZ2JhLmxlbmd0aCA+IDMgPyByZ2JhWzNdIDogMTtcbiAgICAgICAgICAgIG1vZGUgPSAncmdiYSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChtb2RlICsgXCIoXCIgKyAocmdiYS5zbGljZSgwLG1vZGU9PT0ncmdiJz8zOjQpLmpvaW4oJywnKSkgKyBcIilcIik7XG4gICAgfTtcblxuICAgIHZhciByZ2IyY3NzXzEgPSByZ2IyY3NzJDE7XG5cbiAgICB2YXIgdW5wYWNrJHUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJvdW5kJDUgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGhzbDJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFzc2lnbjtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJHUoYXJncywgJ2hzbCcpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIGlmIChzID09PSAwKSB7XG4gICAgICAgICAgICByID0gZyA9IGIgPSBsKjI1NTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0MyA9IFswLDAsMF07XG4gICAgICAgICAgICB2YXIgYyA9IFswLDAsMF07XG4gICAgICAgICAgICB2YXIgdDIgPSBsIDwgMC41ID8gbCAqICgxK3MpIDogbCtzLWwqcztcbiAgICAgICAgICAgIHZhciB0MSA9IDIgKiBsIC0gdDI7XG4gICAgICAgICAgICB2YXIgaF8gPSBoIC8gMzYwO1xuICAgICAgICAgICAgdDNbMF0gPSBoXyArIDEvMztcbiAgICAgICAgICAgIHQzWzFdID0gaF87XG4gICAgICAgICAgICB0M1syXSA9IGhfIC0gMS8zO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPDM7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICh0M1tpXSA8IDApIHsgdDNbaV0gKz0gMTsgfVxuICAgICAgICAgICAgICAgIGlmICh0M1tpXSA+IDEpIHsgdDNbaV0gLT0gMTsgfVxuICAgICAgICAgICAgICAgIGlmICg2ICogdDNbaV0gPCAxKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MSArICh0MiAtIHQxKSAqIDYgKiB0M1tpXTsgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKDIgKiB0M1tpXSA8IDEpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQyOyB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMyAqIHQzW2ldIDwgMilcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDEgKyAodDIgLSB0MSkgKiAoKDIgLyAzKSAtIHQzW2ldKSAqIDY7IH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoYXNzaWduID0gW3JvdW5kJDUoY1swXSoyNTUpLHJvdW5kJDUoY1sxXSoyNTUpLHJvdW5kJDUoY1syXSoyNTUpXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gMykge1xuICAgICAgICAgICAgLy8ga2VlcCBhbHBoYSBjaGFubmVsXG4gICAgICAgICAgICByZXR1cm4gW3IsZyxiLGFyZ3NbM11dO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgfTtcblxuICAgIHZhciBoc2wycmdiXzEgPSBoc2wycmdiJDE7XG5cbiAgICB2YXIgaHNsMnJnYiA9IGhzbDJyZ2JfMTtcbiAgICB2YXIgaW5wdXQkZiA9IGlucHV0JGg7XG5cbiAgICB2YXIgUkVfUkdCID0gL15yZ2JcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqXFwpJC87XG4gICAgdmFyIFJFX1JHQkEgPSAvXnJnYmFcXChcXHMqKC0/XFxkKyksXFxzKigtP1xcZCspXFxzKixcXHMqKC0/XFxkKylcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG4gICAgdmFyIFJFX1JHQl9QQ1QgPSAvXnJnYlxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgICB2YXIgUkVfUkdCQV9QQ1QgPSAvXnJnYmFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooWzAxXXxbMDFdP1xcLlxcZCspXFwpJC87XG4gICAgdmFyIFJFX0hTTCA9IC9eaHNsXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqLFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSVcXHMqXFwpJC87XG4gICAgdmFyIFJFX0hTTEEgPSAvXmhzbGFcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcblxuICAgIHZhciByb3VuZCQ0ID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBjc3MycmdiJDEgPSBmdW5jdGlvbiAoY3NzKSB7XG4gICAgICAgIGNzcyA9IGNzcy50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICAgICAgdmFyIG07XG5cbiAgICAgICAgaWYgKGlucHV0JGYuZm9ybWF0Lm5hbWVkKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnB1dCRmLmZvcm1hdC5uYW1lZChjc3MpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiKDI1MCwyMCwwKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcmdiW2ldID0gK3JnYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJnYlszXSA9IDE7ICAvLyBkZWZhdWx0IGFscGhhXG4gICAgICAgICAgICByZXR1cm4gcmdiO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiYSgyNTAsMjAsMCwwLjQpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JBKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMSA9IG0uc2xpY2UoMSw1KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMT0wOyBpJDE8NDsgaSQxKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkMVtpJDFdID0gK3JnYiQxW2kkMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmdiJDE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2IoMTAwJSwwJSwwJSlcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQl9QQ1QpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQyID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQyPTA7IGkkMjwzOyBpJDIrKykge1xuICAgICAgICAgICAgICAgIHJnYiQyW2kkMl0gPSByb3VuZCQ0KHJnYiQyW2kkMl0gKiAyLjU1KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJnYiQyWzNdID0gMTsgIC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiByZ2IkMjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYmEoMTAwJSwwJSwwJSwwLjQpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0JBX1BDVCkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDMgPSBtLnNsaWNlKDEsNSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDM9MDsgaSQzPDM7IGkkMysrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDNbaSQzXSA9IHJvdW5kJDQocmdiJDNbaSQzXSAqIDIuNTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiJDNbM10gPSArcmdiJDNbM107XG4gICAgICAgICAgICByZXR1cm4gcmdiJDM7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoc2woMCwxMDAlLDUwJSlcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTCkpKSB7XG4gICAgICAgICAgICB2YXIgaHNsID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgaHNsWzFdICo9IDAuMDE7XG4gICAgICAgICAgICBoc2xbMl0gKj0gMC4wMTtcbiAgICAgICAgICAgIHZhciByZ2IkNCA9IGhzbDJyZ2IoaHNsKTtcbiAgICAgICAgICAgIHJnYiQ0WzNdID0gMTtcbiAgICAgICAgICAgIHJldHVybiByZ2IkNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhzbGEoMCwxMDAlLDUwJSwwLjUpXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9IU0xBKSkpIHtcbiAgICAgICAgICAgIHZhciBoc2wkMSA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGhzbCQxWzFdICo9IDAuMDE7XG4gICAgICAgICAgICBoc2wkMVsyXSAqPSAwLjAxO1xuICAgICAgICAgICAgdmFyIHJnYiQ1ID0gaHNsMnJnYihoc2wkMSk7XG4gICAgICAgICAgICByZ2IkNVszXSA9ICttWzRdOyAgLy8gZGVmYXVsdCBhbHBoYSA9IDFcbiAgICAgICAgICAgIHJldHVybiByZ2IkNTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjc3MycmdiJDEudGVzdCA9IGZ1bmN0aW9uIChzKSB7XG4gICAgICAgIHJldHVybiBSRV9SR0IudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCQS50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JfUENULnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQkFfUENULnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX0hTTC50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9IU0xBLnRlc3Qocyk7XG4gICAgfTtcblxuICAgIHZhciBjc3MycmdiXzEgPSBjc3MycmdiJDE7XG5cbiAgICB2YXIgY2hyb21hJGkgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkQiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGUgPSBpbnB1dCRoO1xuICAgIHZhciB0eXBlJGsgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHJnYjJjc3MgPSByZ2IyY3NzXzE7XG4gICAgdmFyIGNzczJyZ2IgPSBjc3MycmdiXzE7XG5cbiAgICBDb2xvciRCLnByb3RvdHlwZS5jc3MgPSBmdW5jdGlvbihtb2RlKSB7XG4gICAgICAgIHJldHVybiByZ2IyY3NzKHRoaXMuX3JnYiwgbW9kZSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRpLmNzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkQiwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2NzcyddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkZS5mb3JtYXQuY3NzID0gY3NzMnJnYjtcblxuICAgIGlucHV0JGUuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNSxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkayhoKSA9PT0gJ3N0cmluZycgJiYgY3NzMnJnYi50ZXN0KGgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjc3MnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgQ29sb3IkQSA9IENvbG9yXzE7XG4gICAgdmFyIGNocm9tYSRoID0gY2hyb21hXzE7XG4gICAgdmFyIGlucHV0JGQgPSBpbnB1dCRoO1xuICAgIHZhciB1bnBhY2skdCA9IHV0aWxzLnVucGFjaztcblxuICAgIGlucHV0JGQuZm9ybWF0LmdsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2IgPSB1bnBhY2skdChhcmdzLCAncmdiYScpO1xuICAgICAgICByZ2JbMF0gKj0gMjU1O1xuICAgICAgICByZ2JbMV0gKj0gMjU1O1xuICAgICAgICByZ2JbMl0gKj0gMjU1O1xuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH07XG5cbiAgICBjaHJvbWEkaC5nbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkQSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2dsJ10pICkpO1xuICAgIH07XG5cbiAgICBDb2xvciRBLnByb3RvdHlwZS5nbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB2YXIgcmdiID0gdGhpcy5fcmdiO1xuICAgICAgICByZXR1cm4gW3JnYlswXS8yNTUsIHJnYlsxXS8yNTUsIHJnYlsyXS8yNTUsIHJnYlszXV07XG4gICAgfTtcblxuICAgIHZhciB1bnBhY2skcyA9IHV0aWxzLnVucGFjaztcblxuICAgIHZhciByZ2IyaGNnJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRzKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIG1pbiA9IE1hdGgubWluKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4ID0gTWF0aC5tYXgociwgZywgYik7XG4gICAgICAgIHZhciBkZWx0YSA9IG1heCAtIG1pbjtcbiAgICAgICAgdmFyIGMgPSBkZWx0YSAqIDEwMCAvIDI1NTtcbiAgICAgICAgdmFyIF9nID0gbWluIC8gKDI1NSAtIGRlbHRhKSAqIDEwMDtcbiAgICAgICAgdmFyIGg7XG4gICAgICAgIGlmIChkZWx0YSA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAociA9PT0gbWF4KSB7IGggPSAoZyAtIGIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChnID09PSBtYXgpIHsgaCA9IDIrKGIgLSByKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoYiA9PT0gbWF4KSB7IGggPSA0KyhyIC0gZykgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCwgYywgX2ddO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhjZ18xID0gcmdiMmhjZyQxO1xuXG4gICAgdmFyIHVucGFjayRyID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBmbG9vciQzID0gTWF0aC5mbG9vcjtcblxuICAgIC8qXG4gICAgICogdGhpcyBpcyBiYXNpY2FsbHkganVzdCBIU1Ygd2l0aCBzb21lIG1pbm9yIHR3ZWFrc1xuICAgICAqXG4gICAgICogaHVlLi4gWzAuLjM2MF1cbiAgICAgKiBjaHJvbWEgLi4gWzAuLjFdXG4gICAgICogZ3JheW5lc3MgLi4gWzAuLjFdXG4gICAgICovXG5cbiAgICB2YXIgaGNnMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyLCBhc3NpZ24kMywgYXNzaWduJDQsIGFzc2lnbiQ1O1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skcihhcmdzLCAnaGNnJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgX2cgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIF9nID0gX2cgKiAyNTU7XG4gICAgICAgIHZhciBfYyA9IGMgKiAyNTU7XG4gICAgICAgIGlmIChjID09PSAwKSB7XG4gICAgICAgICAgICByID0gZyA9IGIgPSBfZztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoID09PSAzNjApIHsgaCA9IDA7IH1cbiAgICAgICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgICAgIGggLz0gNjA7XG4gICAgICAgICAgICB2YXIgaSA9IGZsb29yJDMoaCk7XG4gICAgICAgICAgICB2YXIgZiA9IGggLSBpO1xuICAgICAgICAgICAgdmFyIHAgPSBfZyAqICgxIC0gYyk7XG4gICAgICAgICAgICB2YXIgcSA9IHAgKyBfYyAqICgxIC0gZik7XG4gICAgICAgICAgICB2YXIgdCA9IHAgKyBfYyAqIGY7XG4gICAgICAgICAgICB2YXIgdiA9IHAgKyBfYztcbiAgICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogKGFzc2lnbiA9IFt2LCB0LCBwXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAoYXNzaWduJDEgPSBbcSwgdiwgcF0sIHIgPSBhc3NpZ24kMVswXSwgZyA9IGFzc2lnbiQxWzFdLCBiID0gYXNzaWduJDFbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMjogKGFzc2lnbiQyID0gW3AsIHYsIHRdLCByID0gYXNzaWduJDJbMF0sIGcgPSBhc3NpZ24kMlsxXSwgYiA9IGFzc2lnbiQyWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IChhc3NpZ24kMyA9IFtwLCBxLCB2XSwgciA9IGFzc2lnbiQzWzBdLCBnID0gYXNzaWduJDNbMV0sIGIgPSBhc3NpZ24kM1syXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA0OiAoYXNzaWduJDQgPSBbdCwgcCwgdl0sIHIgPSBhc3NpZ24kNFswXSwgZyA9IGFzc2lnbiQ0WzFdLCBiID0gYXNzaWduJDRbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNTogKGFzc2lnbiQ1ID0gW3YsIHAsIHFdLCByID0gYXNzaWduJDVbMF0sIGcgPSBhc3NpZ24kNVsxXSwgYiA9IGFzc2lnbiQ1WzJdKTsgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhjZzJyZ2JfMSA9IGhjZzJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJHEgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkaiA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRnID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHogPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRjID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaGNnID0gcmdiMmhjZ18xO1xuXG4gICAgQ29sb3Ikei5wcm90b3R5cGUuaGNnID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaGNnKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRnLmhjZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkeiwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hjZyddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkYy5mb3JtYXQuaGNnID0gaGNnMnJnYl8xO1xuXG4gICAgaW5wdXQkYy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAxLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRxKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGooYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hjZyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skcCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGFzdCA9IHV0aWxzLmxhc3Q7XG4gICAgdmFyIHJvdW5kJDMgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIHJnYjJoZXgkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJHAoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGEgPSByZWZbM107XG4gICAgICAgIHZhciBtb2RlID0gbGFzdChhcmdzKSB8fCAnYXV0byc7XG4gICAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHsgYSA9IDE7IH1cbiAgICAgICAgaWYgKG1vZGUgPT09ICdhdXRvJykge1xuICAgICAgICAgICAgbW9kZSA9IGEgPCAxID8gJ3JnYmEnIDogJ3JnYic7XG4gICAgICAgIH1cbiAgICAgICAgciA9IHJvdW5kJDMocik7XG4gICAgICAgIGcgPSByb3VuZCQzKGcpO1xuICAgICAgICBiID0gcm91bmQkMyhiKTtcbiAgICAgICAgdmFyIHUgPSByIDw8IDE2IHwgZyA8PCA4IHwgYjtcbiAgICAgICAgdmFyIHN0ciA9IFwiMDAwMDAwXCIgKyB1LnRvU3RyaW5nKDE2KTsgLy8jLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHN0ciA9IHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIDYpO1xuICAgICAgICB2YXIgaHhhID0gJzAnICsgcm91bmQkMyhhICogMjU1KS50b1N0cmluZygxNik7XG4gICAgICAgIGh4YSA9IGh4YS5zdWJzdHIoaHhhLmxlbmd0aCAtIDIpO1xuICAgICAgICBzd2l0Y2ggKG1vZGUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgY2FzZSAncmdiYSc6IHJldHVybiAoXCIjXCIgKyBzdHIgKyBoeGEpO1xuICAgICAgICAgICAgY2FzZSAnYXJnYic6IHJldHVybiAoXCIjXCIgKyBoeGEgKyBzdHIpO1xuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIChcIiNcIiArIHN0cik7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoZXhfMSA9IHJnYjJoZXgkMjtcblxuICAgIHZhciBSRV9IRVggPSAvXiM/KFtBLUZhLWYwLTldezZ9fFtBLUZhLWYwLTldezN9KSQvO1xuICAgIHZhciBSRV9IRVhBID0gL14jPyhbQS1GYS1mMC05XXs4fXxbQS1GYS1mMC05XXs0fSkkLztcblxuICAgIHZhciBoZXgycmdiJDEgPSBmdW5jdGlvbiAoaGV4KSB7XG4gICAgICAgIGlmIChoZXgubWF0Y2goUkVfSEVYKSkge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIG9wdGlvbmFsIGxlYWRpbmcgI1xuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDQgfHwgaGV4Lmxlbmd0aCA9PT0gNykge1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zdWJzdHIoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBleHBhbmQgc2hvcnQtbm90YXRpb24gdG8gZnVsbCBzaXgtZGlnaXRcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1ID0gcGFyc2VJbnQoaGV4LCAxNik7XG4gICAgICAgICAgICB2YXIgciA9IHUgPj4gMTY7XG4gICAgICAgICAgICB2YXIgZyA9IHUgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYiA9IHUgJiAweEZGO1xuICAgICAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG1hdGNoIHJnYmEgaGV4IGZvcm1hdCwgZWcgI0ZGMDAwMDc3XG4gICAgICAgIGlmIChoZXgubWF0Y2goUkVfSEVYQSkpIHtcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA1IHx8IGhleC5sZW5ndGggPT09IDkpIHtcbiAgICAgICAgICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIGVpZ2h0LWRpZ2l0XG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgICAgIGhleCA9IGhleC5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4WzBdK2hleFswXStoZXhbMV0raGV4WzFdK2hleFsyXStoZXhbMl0raGV4WzNdK2hleFszXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB1JDEgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgICAgIHZhciByJDEgPSB1JDEgPj4gMjQgJiAweEZGO1xuICAgICAgICAgICAgdmFyIGckMSA9IHUkMSA+PiAxNiAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYiQxID0gdSQxID4+IDggJiAweEZGO1xuICAgICAgICAgICAgdmFyIGEgPSBNYXRoLnJvdW5kKCh1JDEgJiAweEZGKSAvIDB4RkYgKiAxMDApIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIFtyJDEsZyQxLGIkMSxhXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHdlIHVzZWQgdG8gY2hlY2sgZm9yIGNzcyBjb2xvcnMgaGVyZVxuICAgICAgICAvLyBpZiBfaW5wdXQuY3NzPyBhbmQgcmdiID0gX2lucHV0LmNzcyBoZXhcbiAgICAgICAgLy8gICAgIHJldHVybiByZ2JcblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBoZXggY29sb3I6IFwiICsgaGV4KSk7XG4gICAgfTtcblxuICAgIHZhciBoZXgycmdiXzEgPSBoZXgycmdiJDE7XG5cbiAgICB2YXIgY2hyb21hJGYgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeSA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkaSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGlucHV0JGIgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoZXgkMSA9IHJnYjJoZXhfMTtcblxuICAgIENvbG9yJHkucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoZXgkMSh0aGlzLl9yZ2IsIG1vZGUpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkZi5oZXggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHksIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoZXgnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGIuZm9ybWF0LmhleCA9IGhleDJyZ2JfMTtcbiAgICBpbnB1dCRiLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDQsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uIChoKSB7XG4gICAgICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDEgXTtcblxuICAgICAgICAgICAgaWYgKCFyZXN0Lmxlbmd0aCAmJiB0eXBlJGkoaCkgPT09ICdzdHJpbmcnICYmIFszLDQsNSw2LDcsOCw5XS5pbmRleE9mKGgubGVuZ3RoKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoZXgnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJG8gPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIFRXT1BJJDIgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgbWluJDIgPSBNYXRoLm1pbjtcbiAgICB2YXIgc3FydCQ0ID0gTWF0aC5zcXJ0O1xuICAgIHZhciBhY29zID0gTWF0aC5hY29zO1xuXG4gICAgdmFyIHJnYjJoc2kkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvKlxuICAgICAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9yZ2IyaHNpLmNwcFxuICAgICAgICAqL1xuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJG8oYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuICAgICAgICB2YXIgaDtcbiAgICAgICAgdmFyIG1pbl8gPSBtaW4kMihyLGcsYik7XG4gICAgICAgIHZhciBpID0gKHIrZytiKSAvIDM7XG4gICAgICAgIHZhciBzID0gaSA+IDAgPyAxIC0gbWluXy9pIDogMDtcbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgIGggPSBOYU47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoID0gKChyLWcpKyhyLWIpKSAvIDI7XG4gICAgICAgICAgICBoIC89IHNxcnQkNCgoci1nKSooci1nKSArIChyLWIpKihnLWIpKTtcbiAgICAgICAgICAgIGggPSBhY29zKGgpO1xuICAgICAgICAgICAgaWYgKGIgPiBnKSB7XG4gICAgICAgICAgICAgICAgaCA9IFRXT1BJJDIgLSBoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaCAvPSBUV09QSSQyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCozNjAscyxpXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoc2lfMSA9IHJnYjJoc2kkMTtcblxuICAgIHZhciB1bnBhY2skbiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGltaXQgPSB1dGlscy5saW1pdDtcbiAgICB2YXIgVFdPUEkkMSA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBQSVRISVJEID0gdXRpbHMuUElUSElSRDtcbiAgICB2YXIgY29zJDQgPSBNYXRoLmNvcztcblxuICAgIC8qXG4gICAgICogaHVlIFswLi4zNjBdXG4gICAgICogc2F0dXJhdGlvbiBbMC4uMV1cbiAgICAgKiBpbnRlbnNpdHkgWzAuLjFdXG4gICAgICovXG4gICAgdmFyIGhzaTJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLypcbiAgICAgICAgYm9ycm93ZWQgZnJvbSBoZXJlOlxuICAgICAgICBodHRwOi8vaHVtbWVyLnN0YW5mb3JkLmVkdS9tdXNlaW5mby9kb2MvZXhhbXBsZXMvaHVtZHJ1bS9rZXlzY2FwZTIvaHNpMnJnYi5jcHBcbiAgICAgICAgKi9cbiAgICAgICAgYXJncyA9IHVucGFjayRuKGFyZ3MsICdoc2knKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBpID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuXG4gICAgICAgIGlmIChpc05hTihoKSkgeyBoID0gMDsgfVxuICAgICAgICBpZiAoaXNOYU4ocykpIHsgcyA9IDA7IH1cbiAgICAgICAgLy8gbm9ybWFsaXplIGh1ZVxuICAgICAgICBpZiAoaCA+IDM2MCkgeyBoIC09IDM2MDsgfVxuICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgaCAvPSAzNjA7XG4gICAgICAgIGlmIChoIDwgMS8zKSB7XG4gICAgICAgICAgICBiID0gKDEtcykvMztcbiAgICAgICAgICAgIHIgPSAoMStzKmNvcyQ0KFRXT1BJJDEqaCkvY29zJDQoUElUSElSRC1UV09QSSQxKmgpKS8zO1xuICAgICAgICAgICAgZyA9IDEgLSAoYityKTtcbiAgICAgICAgfSBlbHNlIGlmIChoIDwgMi8zKSB7XG4gICAgICAgICAgICBoIC09IDEvMztcbiAgICAgICAgICAgIHIgPSAoMS1zKS8zO1xuICAgICAgICAgICAgZyA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICBiID0gMSAtIChyK2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaCAtPSAyLzM7XG4gICAgICAgICAgICBnID0gKDEtcykvMztcbiAgICAgICAgICAgIGIgPSAoMStzKmNvcyQ0KFRXT1BJJDEqaCkvY29zJDQoUElUSElSRC1UV09QSSQxKmgpKS8zO1xuICAgICAgICAgICAgciA9IDEgLSAoZytiKTtcbiAgICAgICAgfVxuICAgICAgICByID0gbGltaXQoaSpyKjMpO1xuICAgICAgICBnID0gbGltaXQoaSpnKjMpO1xuICAgICAgICBiID0gbGltaXQoaSpiKjMpO1xuICAgICAgICByZXR1cm4gW3IqMjU1LCBnKjI1NSwgYioyNTUsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzaTJyZ2JfMSA9IGhzaTJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJG0gPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkaCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRlID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHggPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRhID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IyaHNpID0gcmdiMmhzaV8xO1xuXG4gICAgQ29sb3IkeC5wcm90b3R5cGUuaHNpID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHNpKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRlLmhzaSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkeCwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hzaSddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkYS5mb3JtYXQuaHNpID0gaHNpMnJnYl8xO1xuXG4gICAgaW5wdXQkYS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRtKGFyZ3MsICdoc2knKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hzaSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skbCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRnID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGQgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDkgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoc2wkMSA9IHJnYjJoc2xfMTtcblxuICAgIENvbG9yJHcucHJvdG90eXBlLmhzbCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzbCQxKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSRkLmhzbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hzbCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkOS5mb3JtYXQuaHNsID0gaHNsMnJnYl8xO1xuXG4gICAgaW5wdXQkOS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayRsKGFyZ3MsICdoc2wnKTtcbiAgICAgICAgICAgIGlmICh0eXBlJGcoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hzbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skayA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbWluJDEgPSBNYXRoLm1pbjtcbiAgICB2YXIgbWF4JDEgPSBNYXRoLm1heDtcblxuICAgIC8qXG4gICAgICogc3VwcG9ydGVkIGFyZ3VtZW50czpcbiAgICAgKiAtIHJnYjJoc3YocixnLGIpXG4gICAgICogLSByZ2IyaHN2KFtyLGcsYl0pXG4gICAgICogLSByZ2IyaHN2KHtyLGcsYn0pXG4gICAgICovXG4gICAgdmFyIHJnYjJoc2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRrKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgZyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcbiAgICAgICAgdmFyIG1pbl8gPSBtaW4kMShyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heF8gPSBtYXgkMShyLCBnLCBiKTtcbiAgICAgICAgdmFyIGRlbHRhID0gbWF4XyAtIG1pbl87XG4gICAgICAgIHZhciBoLHMsdjtcbiAgICAgICAgdiA9IG1heF8gLyAyNTUuMDtcbiAgICAgICAgaWYgKG1heF8gPT09IDApIHtcbiAgICAgICAgICAgIGggPSBOdW1iZXIuTmFOO1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gZGVsdGEgLyBtYXhfO1xuICAgICAgICAgICAgaWYgKHIgPT09IG1heF8pIHsgaCA9IChnIC0gYikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGcgPT09IG1heF8pIHsgaCA9IDIrKGIgLSByKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoYiA9PT0gbWF4XykgeyBoID0gNCsociAtIGcpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGggKj0gNjA7XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2gsIHMsIHZdXG4gICAgfTtcblxuICAgIHZhciByZ2IyaHN2JDEgPSByZ2IyaHNsO1xuXG4gICAgdmFyIHVucGFjayRqID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBmbG9vciQyID0gTWF0aC5mbG9vcjtcblxuICAgIHZhciBoc3YycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDIsIGFzc2lnbiQzLCBhc3NpZ24kNCwgYXNzaWduJDU7XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayRqKGFyZ3MsICdoc3YnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgcyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciB2ID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICB2ICo9IDI1NTtcbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IHY7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaCA9PT0gMzYwKSB7IGggPSAwOyB9XG4gICAgICAgICAgICBpZiAoaCA+IDM2MCkgeyBoIC09IDM2MDsgfVxuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgICAgICBoIC89IDYwO1xuXG4gICAgICAgICAgICB2YXIgaSA9IGZsb29yJDIoaCk7XG4gICAgICAgICAgICB2YXIgZiA9IGggLSBpO1xuICAgICAgICAgICAgdmFyIHAgPSB2ICogKDEgLSBzKTtcbiAgICAgICAgICAgIHZhciBxID0gdiAqICgxIC0gcyAqIGYpO1xuICAgICAgICAgICAgdmFyIHQgPSB2ICogKDEgLSBzICogKDEgLSBmKSk7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogKGFzc2lnbiA9IFt2LCB0LCBwXSwgciA9IGFzc2lnblswXSwgZyA9IGFzc2lnblsxXSwgYiA9IGFzc2lnblsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAxOiAoYXNzaWduJDEgPSBbcSwgdiwgcF0sIHIgPSBhc3NpZ24kMVswXSwgZyA9IGFzc2lnbiQxWzFdLCBiID0gYXNzaWduJDFbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMjogKGFzc2lnbiQyID0gW3AsIHYsIHRdLCByID0gYXNzaWduJDJbMF0sIGcgPSBhc3NpZ24kMlsxXSwgYiA9IGFzc2lnbiQyWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IChhc3NpZ24kMyA9IFtwLCBxLCB2XSwgciA9IGFzc2lnbiQzWzBdLCBnID0gYXNzaWduJDNbMV0sIGIgPSBhc3NpZ24kM1syXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA0OiAoYXNzaWduJDQgPSBbdCwgcCwgdl0sIHIgPSBhc3NpZ24kNFswXSwgZyA9IGFzc2lnbiQ0WzFdLCBiID0gYXNzaWduJDRbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgNTogKGFzc2lnbiQ1ID0gW3YsIHAsIHFdLCByID0gYXNzaWduJDVbMF0sIGcgPSBhc3NpZ24kNVsxXSwgYiA9IGFzc2lnbiQ1WzJdKTsgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3IsZyxiLGFyZ3MubGVuZ3RoID4gMz9hcmdzWzNdOjFdO1xuICAgIH07XG5cbiAgICB2YXIgaHN2MnJnYl8xID0gaHN2MnJnYjtcblxuICAgIHZhciB1bnBhY2skaSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRmID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGMgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkdiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDggPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoc3YgPSByZ2IyaHN2JDE7XG5cbiAgICBDb2xvciR2LnByb3RvdHlwZS5oc3YgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc3YodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGMuaHN2ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR2LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHN2J10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ4LmZvcm1hdC5oc3YgPSBoc3YycmdiXzE7XG5cbiAgICBpbnB1dCQ4LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJGkoYXJncywgJ2hzdicpO1xuICAgICAgICAgICAgaWYgKHR5cGUkZihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHN2JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIGxhYkNvbnN0YW50cyA9IHtcbiAgICAgICAgLy8gQ29ycmVzcG9uZHMgcm91Z2hseSB0byBSR0IgYnJpZ2h0ZXIvZGFya2VyXG4gICAgICAgIEtuOiAxOCxcblxuICAgICAgICAvLyBENjUgc3RhbmRhcmQgcmVmZXJlbnRcbiAgICAgICAgWG46IDAuOTUwNDcwLFxuICAgICAgICBZbjogMSxcbiAgICAgICAgWm46IDEuMDg4ODMwLFxuXG4gICAgICAgIHQwOiAwLjEzNzkzMTAzNCwgIC8vIDQgLyAyOVxuICAgICAgICB0MTogMC4yMDY4OTY1NTIsICAvLyA2IC8gMjlcbiAgICAgICAgdDI6IDAuMTI4NDE4NTUsICAgLy8gMyAqIHQxICogdDFcbiAgICAgICAgdDM6IDAuMDA4ODU2NDUyLCAgLy8gdDEgKiB0MSAqIHQxXG4gICAgfTtcblxuICAgIHZhciBMQUJfQ09OU1RBTlRTJDMgPSBsYWJDb25zdGFudHM7XG4gICAgdmFyIHVucGFjayRoID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBwb3ckYSA9IE1hdGgucG93O1xuXG4gICAgdmFyIHJnYjJsYWIkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGgoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2IyeHl6KHIsZyxiKTtcbiAgICAgICAgdmFyIHggPSByZWYkMVswXTtcbiAgICAgICAgdmFyIHkgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIHogPSByZWYkMVsyXTtcbiAgICAgICAgdmFyIGwgPSAxMTYgKiB5IC0gMTY7XG4gICAgICAgIHJldHVybiBbbCA8IDAgPyAwIDogbCwgNTAwICogKHggLSB5KSwgMjAwICogKHkgLSB6KV07XG4gICAgfTtcblxuICAgIHZhciByZ2JfeHl6ID0gZnVuY3Rpb24gKHIpIHtcbiAgICAgICAgaWYgKChyIC89IDI1NSkgPD0gMC4wNDA0NSkgeyByZXR1cm4gciAvIDEyLjkyOyB9XG4gICAgICAgIHJldHVybiBwb3ckYSgociArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH07XG5cbiAgICB2YXIgeHl6X2xhYiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIGlmICh0ID4gTEFCX0NPTlNUQU5UUyQzLnQzKSB7IHJldHVybiBwb3ckYSh0LCAxIC8gMyk7IH1cbiAgICAgICAgcmV0dXJuIHQgLyBMQUJfQ09OU1RBTlRTJDMudDIgKyBMQUJfQ09OU1RBTlRTJDMudDA7XG4gICAgfTtcblxuICAgIHZhciByZ2IyeHl6ID0gZnVuY3Rpb24gKHIsZyxiKSB7XG4gICAgICAgIHIgPSByZ2JfeHl6KHIpO1xuICAgICAgICBnID0gcmdiX3h5eihnKTtcbiAgICAgICAgYiA9IHJnYl94eXooYik7XG4gICAgICAgIHZhciB4ID0geHl6X2xhYigoMC40MTI0NTY0ICogciArIDAuMzU3NTc2MSAqIGcgKyAwLjE4MDQzNzUgKiBiKSAvIExBQl9DT05TVEFOVFMkMy5Ybik7XG4gICAgICAgIHZhciB5ID0geHl6X2xhYigoMC4yMTI2NzI5ICogciArIDAuNzE1MTUyMiAqIGcgKyAwLjA3MjE3NTAgKiBiKSAvIExBQl9DT05TVEFOVFMkMy5Zbik7XG4gICAgICAgIHZhciB6ID0geHl6X2xhYigoMC4wMTkzMzM5ICogciArIDAuMTE5MTkyMCAqIGcgKyAwLjk1MDMwNDEgKiBiKSAvIExBQl9DT05TVEFOVFMkMy5abik7XG4gICAgICAgIHJldHVybiBbeCx5LHpdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmxhYl8xID0gcmdiMmxhYiQyO1xuXG4gICAgdmFyIExBQl9DT05TVEFOVFMkMiA9IGxhYkNvbnN0YW50cztcbiAgICB2YXIgdW5wYWNrJGcgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHBvdyQ5ID0gTWF0aC5wb3c7XG5cbiAgICAvKlxuICAgICAqIEwqIFswLi4xMDBdXG4gICAgICogYSBbLTEwMC4uMTAwXVxuICAgICAqIGIgWy0xMDAuLjEwMF1cbiAgICAgKi9cbiAgICB2YXIgbGFiMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skZyhhcmdzLCAnbGFiJyk7XG4gICAgICAgIHZhciBsID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGEgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgYiA9IGFyZ3NbMl07XG4gICAgICAgIHZhciB4LHkseiwgcixnLGJfO1xuXG4gICAgICAgIHkgPSAobCArIDE2KSAvIDExNjtcbiAgICAgICAgeCA9IGlzTmFOKGEpID8geSA6IHkgKyBhIC8gNTAwO1xuICAgICAgICB6ID0gaXNOYU4oYikgPyB5IDogeSAtIGIgLyAyMDA7XG5cbiAgICAgICAgeSA9IExBQl9DT05TVEFOVFMkMi5ZbiAqIGxhYl94eXooeSk7XG4gICAgICAgIHggPSBMQUJfQ09OU1RBTlRTJDIuWG4gKiBsYWJfeHl6KHgpO1xuICAgICAgICB6ID0gTEFCX0NPTlNUQU5UUyQyLlpuICogbGFiX3h5eih6KTtcblxuICAgICAgICByID0geHl6X3JnYigzLjI0MDQ1NDIgKiB4IC0gMS41MzcxMzg1ICogeSAtIDAuNDk4NTMxNCAqIHopOyAgLy8gRDY1IC0+IHNSR0JcbiAgICAgICAgZyA9IHh5el9yZ2IoLTAuOTY5MjY2MCAqIHggKyAxLjg3NjAxMDggKiB5ICsgMC4wNDE1NTYwICogeik7XG4gICAgICAgIGJfID0geHl6X3JnYigwLjA1NTY0MzQgKiB4IC0gMC4yMDQwMjU5ICogeSArIDEuMDU3MjI1MiAqIHopO1xuXG4gICAgICAgIHJldHVybiBbcixnLGJfLGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIHh5el9yZ2IgPSBmdW5jdGlvbiAocikge1xuICAgICAgICByZXR1cm4gMjU1ICogKHIgPD0gMC4wMDMwNCA/IDEyLjkyICogciA6IDEuMDU1ICogcG93JDkociwgMSAvIDIuNCkgLSAwLjA1NSlcbiAgICB9O1xuXG4gICAgdmFyIGxhYl94eXogPSBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdCA+IExBQl9DT05TVEFOVFMkMi50MSA/IHQgKiB0ICogdCA6IExBQl9DT05TVEFOVFMkMi50MiAqICh0IC0gTEFCX0NPTlNUQU5UUyQyLnQwKVxuICAgIH07XG5cbiAgICB2YXIgbGFiMnJnYl8xID0gbGFiMnJnYiQxO1xuXG4gICAgdmFyIHVucGFjayRmID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGUgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkYiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR1ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkNyA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmxhYiQxID0gcmdiMmxhYl8xO1xuXG4gICAgQ29sb3IkdS5wcm90b3R5cGUubGFiID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IybGFiJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGIubGFiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR1LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbGFiJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ3LmZvcm1hdC5sYWIgPSBsYWIycmdiXzE7XG5cbiAgICBpbnB1dCQ3LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJGYoYXJncywgJ2xhYicpO1xuICAgICAgICAgICAgaWYgKHR5cGUkZShhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbGFiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRlID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBSQUQyREVHID0gdXRpbHMuUkFEMkRFRztcbiAgICB2YXIgc3FydCQzID0gTWF0aC5zcXJ0O1xuICAgIHZhciBhdGFuMiQyID0gTWF0aC5hdGFuMjtcbiAgICB2YXIgcm91bmQkMiA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgbGFiMmxjaCQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skZShhcmdzLCAnbGFiJyk7XG4gICAgICAgIHZhciBsID0gcmVmWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciBjID0gc3FydCQzKGEgKiBhICsgYiAqIGIpO1xuICAgICAgICB2YXIgaCA9IChhdGFuMiQyKGIsIGEpICogUkFEMkRFRyArIDM2MCkgJSAzNjA7XG4gICAgICAgIGlmIChyb3VuZCQyKGMqMTAwMDApID09PSAwKSB7IGggPSBOdW1iZXIuTmFOOyB9XG4gICAgICAgIHJldHVybiBbbCwgYywgaF07XG4gICAgfTtcblxuICAgIHZhciBsYWIybGNoXzEgPSBsYWIybGNoJDI7XG5cbiAgICB2YXIgdW5wYWNrJGQgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJnYjJsYWIgPSByZ2IybGFiXzE7XG4gICAgdmFyIGxhYjJsY2gkMSA9IGxhYjJsY2hfMTtcblxuICAgIHZhciByZ2IybGNoJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRkKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gcmdiMmxhYihyLGcsYik7XG4gICAgICAgIHZhciBsID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBhID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbGFiMmxjaCQxKGwsYSxiXyk7XG4gICAgfTtcblxuICAgIHZhciByZ2IybGNoXzEgPSByZ2IybGNoJDE7XG5cbiAgICB2YXIgdW5wYWNrJGMgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIERFRzJSQUQgPSB1dGlscy5ERUcyUkFEO1xuICAgIHZhciBzaW4kMyA9IE1hdGguc2luO1xuICAgIHZhciBjb3MkMyA9IE1hdGguY29zO1xuXG4gICAgdmFyIGxjaDJsYWIkMiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvKlxuICAgICAgICBDb252ZXJ0IGZyb20gYSBxdWFsaXRhdGl2ZSBwYXJhbWV0ZXIgaCBhbmQgYSBxdWFudGl0YXRpdmUgcGFyYW1ldGVyIGwgdG8gYSAyNC1iaXQgcGl4ZWwuXG4gICAgICAgIFRoZXNlIGZvcm11bGFzIHdlcmUgaW52ZW50ZWQgYnkgRGF2aWQgRGFscnltcGxlIHRvIG9idGFpbiBtYXhpbXVtIGNvbnRyYXN0IHdpdGhvdXQgZ29pbmdcbiAgICAgICAgb3V0IG9mIGdhbXV0IGlmIHRoZSBwYXJhbWV0ZXJzIGFyZSBpbiB0aGUgcmFuZ2UgMC0xLlxuXG4gICAgICAgIEEgc2F0dXJhdGlvbiBtdWx0aXBsaWVyIHdhcyBhZGRlZCBieSBHcmVnb3IgQWlzY2hcbiAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRjKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSByZWZbMF07XG4gICAgICAgIHZhciBjID0gcmVmWzFdO1xuICAgICAgICB2YXIgaCA9IHJlZlsyXTtcbiAgICAgICAgaWYgKGlzTmFOKGgpKSB7IGggPSAwOyB9XG4gICAgICAgIGggPSBoICogREVHMlJBRDtcbiAgICAgICAgcmV0dXJuIFtsLCBjb3MkMyhoKSAqIGMsIHNpbiQzKGgpICogY11cbiAgICB9O1xuXG4gICAgdmFyIGxjaDJsYWJfMSA9IGxjaDJsYWIkMjtcblxuICAgIHZhciB1bnBhY2skYiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGNoMmxhYiQxID0gbGNoMmxhYl8xO1xuICAgIHZhciBsYWIycmdiID0gbGFiMnJnYl8xO1xuXG4gICAgdmFyIGxjaDJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGIoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBjID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcmVmID0gbGNoMmxhYiQxIChsLGMsaCk7XG4gICAgICAgIHZhciBMID0gcmVmWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBsYWIycmdiIChMLGEsYl8pO1xuICAgICAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIGxjaDJyZ2JfMSA9IGxjaDJyZ2IkMTtcblxuICAgIHZhciB1bnBhY2skYSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGNoMnJnYiA9IGxjaDJyZ2JfMTtcblxuICAgIHZhciBoY2wycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciBoY2wgPSB1bnBhY2skYShhcmdzLCAnaGNsJykucmV2ZXJzZSgpO1xuICAgICAgICByZXR1cm4gbGNoMnJnYi5hcHBseSh2b2lkIDAsIGhjbCk7XG4gICAgfTtcblxuICAgIHZhciBoY2wycmdiXzEgPSBoY2wycmdiO1xuXG4gICAgdmFyIHVucGFjayQ5ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGQgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkYSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR0ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkNiA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmxjaCA9IHJnYjJsY2hfMTtcblxuICAgIENvbG9yJHQucHJvdG90eXBlLmxjaCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmdiMmxjaCh0aGlzLl9yZ2IpOyB9O1xuICAgIENvbG9yJHQucHJvdG90eXBlLmhjbCA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmdiMmxjaCh0aGlzLl9yZ2IpLnJldmVyc2UoKTsgfTtcblxuICAgIGNocm9tYSRhLmxjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdCwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2xjaCddKSApKTtcbiAgICB9O1xuICAgIGNocm9tYSRhLmhjbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkdCwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hjbCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNi5mb3JtYXQubGNoID0gbGNoMnJnYl8xO1xuICAgIGlucHV0JDYuZm9ybWF0LmhjbCA9IGhjbDJyZ2JfMTtcblxuICAgIFsnbGNoJywnaGNsJ10uZm9yRWFjaChmdW5jdGlvbiAobSkgeyByZXR1cm4gaW5wdXQkNi5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQ5KGFyZ3MsIG0pO1xuICAgICAgICAgICAgaWYgKHR5cGUkZChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7IH0pO1xuXG4gICAgLyoqXG4gICAgXHRYMTEgY29sb3IgbmFtZXNcblxuICAgIFx0aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1jb2xvci8jc3ZnLWNvbG9yXG4gICAgKi9cblxuICAgIHZhciB3M2N4MTEkMSA9IHtcbiAgICAgICAgYWxpY2VibHVlOiAnI2YwZjhmZicsXG4gICAgICAgIGFudGlxdWV3aGl0ZTogJyNmYWViZDcnLFxuICAgICAgICBhcXVhOiAnIzAwZmZmZicsXG4gICAgICAgIGFxdWFtYXJpbmU6ICcjN2ZmZmQ0JyxcbiAgICAgICAgYXp1cmU6ICcjZjBmZmZmJyxcbiAgICAgICAgYmVpZ2U6ICcjZjVmNWRjJyxcbiAgICAgICAgYmlzcXVlOiAnI2ZmZTRjNCcsXG4gICAgICAgIGJsYWNrOiAnIzAwMDAwMCcsXG4gICAgICAgIGJsYW5jaGVkYWxtb25kOiAnI2ZmZWJjZCcsXG4gICAgICAgIGJsdWU6ICcjMDAwMGZmJyxcbiAgICAgICAgYmx1ZXZpb2xldDogJyM4YTJiZTInLFxuICAgICAgICBicm93bjogJyNhNTJhMmEnLFxuICAgICAgICBidXJseXdvb2Q6ICcjZGViODg3JyxcbiAgICAgICAgY2FkZXRibHVlOiAnIzVmOWVhMCcsXG4gICAgICAgIGNoYXJ0cmV1c2U6ICcjN2ZmZjAwJyxcbiAgICAgICAgY2hvY29sYXRlOiAnI2QyNjkxZScsXG4gICAgICAgIGNvcmFsOiAnI2ZmN2Y1MCcsXG4gICAgICAgIGNvcm5mbG93ZXI6ICcjNjQ5NWVkJyxcbiAgICAgICAgY29ybmZsb3dlcmJsdWU6ICcjNjQ5NWVkJyxcbiAgICAgICAgY29ybnNpbGs6ICcjZmZmOGRjJyxcbiAgICAgICAgY3JpbXNvbjogJyNkYzE0M2MnLFxuICAgICAgICBjeWFuOiAnIzAwZmZmZicsXG4gICAgICAgIGRhcmtibHVlOiAnIzAwMDA4YicsXG4gICAgICAgIGRhcmtjeWFuOiAnIzAwOGI4YicsXG4gICAgICAgIGRhcmtnb2xkZW5yb2Q6ICcjYjg4NjBiJyxcbiAgICAgICAgZGFya2dyYXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2dyZWVuOiAnIzAwNjQwMCcsXG4gICAgICAgIGRhcmtncmV5OiAnI2E5YTlhOScsXG4gICAgICAgIGRhcmtraGFraTogJyNiZGI3NmInLFxuICAgICAgICBkYXJrbWFnZW50YTogJyM4YjAwOGInLFxuICAgICAgICBkYXJrb2xpdmVncmVlbjogJyM1NTZiMmYnLFxuICAgICAgICBkYXJrb3JhbmdlOiAnI2ZmOGMwMCcsXG4gICAgICAgIGRhcmtvcmNoaWQ6ICcjOTkzMmNjJyxcbiAgICAgICAgZGFya3JlZDogJyM4YjAwMDAnLFxuICAgICAgICBkYXJrc2FsbW9uOiAnI2U5OTY3YScsXG4gICAgICAgIGRhcmtzZWFncmVlbjogJyM4ZmJjOGYnLFxuICAgICAgICBkYXJrc2xhdGVibHVlOiAnIzQ4M2Q4YicsXG4gICAgICAgIGRhcmtzbGF0ZWdyYXk6ICcjMmY0ZjRmJyxcbiAgICAgICAgZGFya3NsYXRlZ3JleTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrdHVycXVvaXNlOiAnIzAwY2VkMScsXG4gICAgICAgIGRhcmt2aW9sZXQ6ICcjOTQwMGQzJyxcbiAgICAgICAgZGVlcHBpbms6ICcjZmYxNDkzJyxcbiAgICAgICAgZGVlcHNreWJsdWU6ICcjMDBiZmZmJyxcbiAgICAgICAgZGltZ3JheTogJyM2OTY5NjknLFxuICAgICAgICBkaW1ncmV5OiAnIzY5Njk2OScsXG4gICAgICAgIGRvZGdlcmJsdWU6ICcjMWU5MGZmJyxcbiAgICAgICAgZmlyZWJyaWNrOiAnI2IyMjIyMicsXG4gICAgICAgIGZsb3JhbHdoaXRlOiAnI2ZmZmFmMCcsXG4gICAgICAgIGZvcmVzdGdyZWVuOiAnIzIyOGIyMicsXG4gICAgICAgIGZ1Y2hzaWE6ICcjZmYwMGZmJyxcbiAgICAgICAgZ2FpbnNib3JvOiAnI2RjZGNkYycsXG4gICAgICAgIGdob3N0d2hpdGU6ICcjZjhmOGZmJyxcbiAgICAgICAgZ29sZDogJyNmZmQ3MDAnLFxuICAgICAgICBnb2xkZW5yb2Q6ICcjZGFhNTIwJyxcbiAgICAgICAgZ3JheTogJyM4MDgwODAnLFxuICAgICAgICBncmVlbjogJyMwMDgwMDAnLFxuICAgICAgICBncmVlbnllbGxvdzogJyNhZGZmMmYnLFxuICAgICAgICBncmV5OiAnIzgwODA4MCcsXG4gICAgICAgIGhvbmV5ZGV3OiAnI2YwZmZmMCcsXG4gICAgICAgIGhvdHBpbms6ICcjZmY2OWI0JyxcbiAgICAgICAgaW5kaWFucmVkOiAnI2NkNWM1YycsXG4gICAgICAgIGluZGlnbzogJyM0YjAwODInLFxuICAgICAgICBpdm9yeTogJyNmZmZmZjAnLFxuICAgICAgICBraGFraTogJyNmMGU2OGMnLFxuICAgICAgICBsYXNlcmxlbW9uOiAnI2ZmZmY1NCcsXG4gICAgICAgIGxhdmVuZGVyOiAnI2U2ZTZmYScsXG4gICAgICAgIGxhdmVuZGVyYmx1c2g6ICcjZmZmMGY1JyxcbiAgICAgICAgbGF3bmdyZWVuOiAnIzdjZmMwMCcsXG4gICAgICAgIGxlbW9uY2hpZmZvbjogJyNmZmZhY2QnLFxuICAgICAgICBsaWdodGJsdWU6ICcjYWRkOGU2JyxcbiAgICAgICAgbGlnaHRjb3JhbDogJyNmMDgwODAnLFxuICAgICAgICBsaWdodGN5YW46ICcjZTBmZmZmJyxcbiAgICAgICAgbGlnaHRnb2xkZW5yb2Q6ICcjZmFmYWQyJyxcbiAgICAgICAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6ICcjZmFmYWQyJyxcbiAgICAgICAgbGlnaHRncmF5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0Z3JlZW46ICcjOTBlZTkwJyxcbiAgICAgICAgbGlnaHRncmV5OiAnI2QzZDNkMycsXG4gICAgICAgIGxpZ2h0cGluazogJyNmZmI2YzEnLFxuICAgICAgICBsaWdodHNhbG1vbjogJyNmZmEwN2EnLFxuICAgICAgICBsaWdodHNlYWdyZWVuOiAnIzIwYjJhYScsXG4gICAgICAgIGxpZ2h0c2t5Ymx1ZTogJyM4N2NlZmEnLFxuICAgICAgICBsaWdodHNsYXRlZ3JheTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHNsYXRlZ3JleTogJyM3Nzg4OTknLFxuICAgICAgICBsaWdodHN0ZWVsYmx1ZTogJyNiMGM0ZGUnLFxuICAgICAgICBsaWdodHllbGxvdzogJyNmZmZmZTAnLFxuICAgICAgICBsaW1lOiAnIzAwZmYwMCcsXG4gICAgICAgIGxpbWVncmVlbjogJyMzMmNkMzInLFxuICAgICAgICBsaW5lbjogJyNmYWYwZTYnLFxuICAgICAgICBtYWdlbnRhOiAnI2ZmMDBmZicsXG4gICAgICAgIG1hcm9vbjogJyM4MDAwMDAnLFxuICAgICAgICBtYXJvb24yOiAnIzdmMDAwMCcsXG4gICAgICAgIG1hcm9vbjM6ICcjYjAzMDYwJyxcbiAgICAgICAgbWVkaXVtYXF1YW1hcmluZTogJyM2NmNkYWEnLFxuICAgICAgICBtZWRpdW1ibHVlOiAnIzAwMDBjZCcsXG4gICAgICAgIG1lZGl1bW9yY2hpZDogJyNiYTU1ZDMnLFxuICAgICAgICBtZWRpdW1wdXJwbGU6ICcjOTM3MGRiJyxcbiAgICAgICAgbWVkaXVtc2VhZ3JlZW46ICcjM2NiMzcxJyxcbiAgICAgICAgbWVkaXVtc2xhdGVibHVlOiAnIzdiNjhlZScsXG4gICAgICAgIG1lZGl1bXNwcmluZ2dyZWVuOiAnIzAwZmE5YScsXG4gICAgICAgIG1lZGl1bXR1cnF1b2lzZTogJyM0OGQxY2MnLFxuICAgICAgICBtZWRpdW12aW9sZXRyZWQ6ICcjYzcxNTg1JyxcbiAgICAgICAgbWlkbmlnaHRibHVlOiAnIzE5MTk3MCcsXG4gICAgICAgIG1pbnRjcmVhbTogJyNmNWZmZmEnLFxuICAgICAgICBtaXN0eXJvc2U6ICcjZmZlNGUxJyxcbiAgICAgICAgbW9jY2FzaW46ICcjZmZlNGI1JyxcbiAgICAgICAgbmF2YWpvd2hpdGU6ICcjZmZkZWFkJyxcbiAgICAgICAgbmF2eTogJyMwMDAwODAnLFxuICAgICAgICBvbGRsYWNlOiAnI2ZkZjVlNicsXG4gICAgICAgIG9saXZlOiAnIzgwODAwMCcsXG4gICAgICAgIG9saXZlZHJhYjogJyM2YjhlMjMnLFxuICAgICAgICBvcmFuZ2U6ICcjZmZhNTAwJyxcbiAgICAgICAgb3JhbmdlcmVkOiAnI2ZmNDUwMCcsXG4gICAgICAgIG9yY2hpZDogJyNkYTcwZDYnLFxuICAgICAgICBwYWxlZ29sZGVucm9kOiAnI2VlZThhYScsXG4gICAgICAgIHBhbGVncmVlbjogJyM5OGZiOTgnLFxuICAgICAgICBwYWxldHVycXVvaXNlOiAnI2FmZWVlZScsXG4gICAgICAgIHBhbGV2aW9sZXRyZWQ6ICcjZGI3MDkzJyxcbiAgICAgICAgcGFwYXlhd2hpcDogJyNmZmVmZDUnLFxuICAgICAgICBwZWFjaHB1ZmY6ICcjZmZkYWI5JyxcbiAgICAgICAgcGVydTogJyNjZDg1M2YnLFxuICAgICAgICBwaW5rOiAnI2ZmYzBjYicsXG4gICAgICAgIHBsdW06ICcjZGRhMGRkJyxcbiAgICAgICAgcG93ZGVyYmx1ZTogJyNiMGUwZTYnLFxuICAgICAgICBwdXJwbGU6ICcjODAwMDgwJyxcbiAgICAgICAgcHVycGxlMjogJyM3ZjAwN2YnLFxuICAgICAgICBwdXJwbGUzOiAnI2EwMjBmMCcsXG4gICAgICAgIHJlYmVjY2FwdXJwbGU6ICcjNjYzMzk5JyxcbiAgICAgICAgcmVkOiAnI2ZmMDAwMCcsXG4gICAgICAgIHJvc3licm93bjogJyNiYzhmOGYnLFxuICAgICAgICByb3lhbGJsdWU6ICcjNDE2OWUxJyxcbiAgICAgICAgc2FkZGxlYnJvd246ICcjOGI0NTEzJyxcbiAgICAgICAgc2FsbW9uOiAnI2ZhODA3MicsXG4gICAgICAgIHNhbmR5YnJvd246ICcjZjRhNDYwJyxcbiAgICAgICAgc2VhZ3JlZW46ICcjMmU4YjU3JyxcbiAgICAgICAgc2Vhc2hlbGw6ICcjZmZmNWVlJyxcbiAgICAgICAgc2llbm5hOiAnI2EwNTIyZCcsXG4gICAgICAgIHNpbHZlcjogJyNjMGMwYzAnLFxuICAgICAgICBza3libHVlOiAnIzg3Y2VlYicsXG4gICAgICAgIHNsYXRlYmx1ZTogJyM2YTVhY2QnLFxuICAgICAgICBzbGF0ZWdyYXk6ICcjNzA4MDkwJyxcbiAgICAgICAgc2xhdGVncmV5OiAnIzcwODA5MCcsXG4gICAgICAgIHNub3c6ICcjZmZmYWZhJyxcbiAgICAgICAgc3ByaW5nZ3JlZW46ICcjMDBmZjdmJyxcbiAgICAgICAgc3RlZWxibHVlOiAnIzQ2ODJiNCcsXG4gICAgICAgIHRhbjogJyNkMmI0OGMnLFxuICAgICAgICB0ZWFsOiAnIzAwODA4MCcsXG4gICAgICAgIHRoaXN0bGU6ICcjZDhiZmQ4JyxcbiAgICAgICAgdG9tYXRvOiAnI2ZmNjM0NycsXG4gICAgICAgIHR1cnF1b2lzZTogJyM0MGUwZDAnLFxuICAgICAgICB2aW9sZXQ6ICcjZWU4MmVlJyxcbiAgICAgICAgd2hlYXQ6ICcjZjVkZWIzJyxcbiAgICAgICAgd2hpdGU6ICcjZmZmZmZmJyxcbiAgICAgICAgd2hpdGVzbW9rZTogJyNmNWY1ZjUnLFxuICAgICAgICB5ZWxsb3c6ICcjZmZmZjAwJyxcbiAgICAgICAgeWVsbG93Z3JlZW46ICcjOWFjZDMyJ1xuICAgIH07XG5cbiAgICB2YXIgdzNjeDExXzEgPSB3M2N4MTEkMTtcblxuICAgIHZhciBDb2xvciRzID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkNSA9IGlucHV0JGg7XG4gICAgdmFyIHR5cGUkYyA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgdzNjeDExID0gdzNjeDExXzE7XG4gICAgdmFyIGhleDJyZ2IgPSBoZXgycmdiXzE7XG4gICAgdmFyIHJnYjJoZXggPSByZ2IyaGV4XzE7XG5cbiAgICBDb2xvciRzLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciBoZXggPSByZ2IyaGV4KHRoaXMuX3JnYiwgJ3JnYicpO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IE9iamVjdC5rZXlzKHczY3gxMSk7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICB2YXIgbiA9IGxpc3RbaV07XG5cbiAgICAgICAgICAgIGlmICh3M2N4MTFbbl0gPT09IGhleCkgeyByZXR1cm4gbi50b0xvd2VyQ2FzZSgpOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhleDtcbiAgICB9O1xuXG4gICAgaW5wdXQkNS5mb3JtYXQubmFtZWQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAodzNjeDExW25hbWVdKSB7IHJldHVybiBoZXgycmdiKHczY3gxMVtuYW1lXSk7IH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvbG9yIG5hbWU6ICcrbmFtZSk7XG4gICAgfTtcblxuICAgIGlucHV0JDUuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNSxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkYyhoKSA9PT0gJ3N0cmluZycgJiYgdzNjeDExW2gudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ25hbWVkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayQ4ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgdmFyIHJnYjJudW0kMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJDgoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICByZXR1cm4gKHIgPDwgMTYpICsgKGcgPDwgOCkgKyBiO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMm51bV8xID0gcmdiMm51bSQxO1xuXG4gICAgdmFyIHR5cGUkYiA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgbnVtMnJnYiA9IGZ1bmN0aW9uIChudW0pIHtcbiAgICAgICAgaWYgKHR5cGUkYihudW0pID09IFwibnVtYmVyXCIgJiYgbnVtID49IDAgJiYgbnVtIDw9IDB4RkZGRkZGKSB7XG4gICAgICAgICAgICB2YXIgciA9IG51bSA+PiAxNjtcbiAgICAgICAgICAgIHZhciBnID0gKG51bSA+PiA4KSAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYiA9IG51bSAmIDB4RkY7XG4gICAgICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVua25vd24gbnVtIGNvbG9yOiBcIitudW0pO1xuICAgIH07XG5cbiAgICB2YXIgbnVtMnJnYl8xID0gbnVtMnJnYjtcblxuICAgIHZhciBjaHJvbWEkOSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRyID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkNCA9IGlucHV0JGg7XG4gICAgdmFyIHR5cGUkYSA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMm51bSA9IHJnYjJudW1fMTtcblxuICAgIENvbG9yJHIucHJvdG90eXBlLm51bSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMm51bSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkOS5udW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHIsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydudW0nXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDQuZm9ybWF0Lm51bSA9IG51bTJyZ2JfMTtcblxuICAgIGlucHV0JDQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNSxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSAmJiB0eXBlJGEoYXJnc1swXSkgPT09ICdudW1iZXInICYmIGFyZ3NbMF0gPj0gMCAmJiBhcmdzWzBdIDw9IDB4RkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdudW0nO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgY2hyb21hJDggPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkcSA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDMgPSBpbnB1dCRoO1xuICAgIHZhciB1bnBhY2skNyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSQ5ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgcm91bmQkMSA9IE1hdGgucm91bmQ7XG5cbiAgICBDb2xvciRxLnByb3RvdHlwZS5yZ2IgPSBmdW5jdGlvbihybmQpIHtcbiAgICAgICAgaWYgKCBybmQgPT09IHZvaWQgMCApIHJuZD10cnVlO1xuXG4gICAgICAgIGlmIChybmQgPT09IGZhbHNlKSB7IHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwzKTsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsMykubWFwKHJvdW5kJDEpO1xuICAgIH07XG5cbiAgICBDb2xvciRxLnByb3RvdHlwZS5yZ2JhID0gZnVuY3Rpb24ocm5kKSB7XG4gICAgICAgIGlmICggcm5kID09PSB2b2lkIDAgKSBybmQ9dHJ1ZTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fcmdiLnNsaWNlKDAsNCkubWFwKGZ1bmN0aW9uICh2LGkpIHtcbiAgICAgICAgICAgIHJldHVybiBpPDMgPyAocm5kID09PSBmYWxzZSA/IHYgOiByb3VuZCQxKHYpKSA6IHY7XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBjaHJvbWEkOC5yZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHEsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydyZ2InXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDMuZm9ybWF0LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiYSA9IHVucGFjayQ3KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIGlmIChyZ2JhWzNdID09PSB1bmRlZmluZWQpIHsgcmdiYVszXSA9IDE7IH1cbiAgICAgICAgcmV0dXJuIHJnYmE7XG4gICAgfTtcblxuICAgIGlucHV0JDMuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skNyhhcmdzLCAncmdiYScpO1xuICAgICAgICAgICAgaWYgKHR5cGUkOShhcmdzKSA9PT0gJ2FycmF5JyAmJiAoYXJncy5sZW5ndGggPT09IDMgfHxcbiAgICAgICAgICAgICAgICBhcmdzLmxlbmd0aCA9PT0gNCAmJiB0eXBlJDkoYXJnc1szXSkgPT0gJ251bWJlcicgJiYgYXJnc1szXSA+PSAwICYmIGFyZ3NbM10gPD0gMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3JnYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8qXG4gICAgICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICAgKi9cblxuICAgIHZhciBsb2ckMSA9IE1hdGgubG9nO1xuXG4gICAgdmFyIHRlbXBlcmF0dXJlMnJnYiQxID0gZnVuY3Rpb24gKGtlbHZpbikge1xuICAgICAgICB2YXIgdGVtcCA9IGtlbHZpbiAvIDEwMDtcbiAgICAgICAgdmFyIHIsZyxiO1xuICAgICAgICBpZiAodGVtcCA8IDY2KSB7XG4gICAgICAgICAgICByID0gMjU1O1xuICAgICAgICAgICAgZyA9IHRlbXAgPCA2ID8gMCA6IC0xNTUuMjU0ODU1NjI3MDkxNzkgLSAwLjQ0NTk2OTUwNDY5NTc5MTMzICogKGcgPSB0ZW1wLTIpICsgMTA0LjQ5MjE2MTk5MzkzODg4ICogbG9nJDEoZyk7XG4gICAgICAgICAgICBiID0gdGVtcCA8IDIwID8gMCA6IC0yNTQuNzY5MzUxODQxMjA5MDIgKyAwLjgyNzQwOTYwNjQwMDczOTUgKiAoYiA9IHRlbXAtMTApICsgMTE1LjY3OTk0NDAxMDY2MTQ3ICogbG9nJDEoYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByID0gMzUxLjk3NjkwNTY2ODA1NjkzICsgMC4xMTQyMDY0NTM3ODQxNjUgKiAociA9IHRlbXAtNTUpIC0gNDAuMjUzNjYzMDkzMzIxMjcgKiBsb2ckMShyKTtcbiAgICAgICAgICAgIGcgPSAzMjUuNDQ5NDEyNTcxMTk3NCArIDAuMDc5NDM0NTY1MzY2NjIzNDIgKiAoZyA9IHRlbXAtNTApIC0gMjguMDg1Mjk2MzUwNzk1NyAqIGxvZyQxKGcpO1xuICAgICAgICAgICAgYiA9IDI1NTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgIH07XG5cbiAgICB2YXIgdGVtcGVyYXR1cmUycmdiXzEgPSB0ZW1wZXJhdHVyZTJyZ2IkMTtcblxuICAgIC8qXG4gICAgICogQmFzZWQgb24gaW1wbGVtZW50YXRpb24gYnkgTmVpbCBCYXJ0bGV0dFxuICAgICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9uZWlsYmFydGxldHQvY29sb3ItdGVtcGVyYXR1cmVcbiAgICAgKiovXG5cbiAgICB2YXIgdGVtcGVyYXR1cmUycmdiID0gdGVtcGVyYXR1cmUycmdiXzE7XG4gICAgdmFyIHVucGFjayQ2ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgcmdiMnRlbXBlcmF0dXJlJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYiA9IHVucGFjayQ2KGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZ2JbMF0sIGIgPSByZ2JbMl07XG4gICAgICAgIHZhciBtaW5UZW1wID0gMTAwMDtcbiAgICAgICAgdmFyIG1heFRlbXAgPSA0MDAwMDtcbiAgICAgICAgdmFyIGVwcyA9IDAuNDtcbiAgICAgICAgdmFyIHRlbXA7XG4gICAgICAgIHdoaWxlIChtYXhUZW1wIC0gbWluVGVtcCA+IGVwcykge1xuICAgICAgICAgICAgdGVtcCA9IChtYXhUZW1wICsgbWluVGVtcCkgKiAwLjU7XG4gICAgICAgICAgICB2YXIgcmdiJDEgPSB0ZW1wZXJhdHVyZTJyZ2IodGVtcCk7XG4gICAgICAgICAgICBpZiAoKHJnYiQxWzJdIC8gcmdiJDFbMF0pID49IChiIC8gcikpIHtcbiAgICAgICAgICAgICAgICBtYXhUZW1wID0gdGVtcDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWluVGVtcCA9IHRlbXA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdW5kKHRlbXApO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMnRlbXBlcmF0dXJlXzEgPSByZ2IydGVtcGVyYXR1cmUkMTtcblxuICAgIHZhciBjaHJvbWEkNyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRwID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMiA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMnRlbXBlcmF0dXJlID0gcmdiMnRlbXBlcmF0dXJlXzE7XG5cbiAgICBDb2xvciRwLnByb3RvdHlwZS50ZW1wID1cbiAgICBDb2xvciRwLnByb3RvdHlwZS5rZWx2aW4gPVxuICAgIENvbG9yJHAucHJvdG90eXBlLnRlbXBlcmF0dXJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IydGVtcGVyYXR1cmUodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDcudGVtcCA9XG4gICAgY2hyb21hJDcua2VsdmluID1cbiAgICBjaHJvbWEkNy50ZW1wZXJhdHVyZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkcCwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ3RlbXAnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDIuZm9ybWF0LnRlbXAgPVxuICAgIGlucHV0JDIuZm9ybWF0LmtlbHZpbiA9XG4gICAgaW5wdXQkMi5mb3JtYXQudGVtcGVyYXR1cmUgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcblxuICAgIHZhciB1bnBhY2skNSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgY2JydCA9IE1hdGguY2JydDtcbiAgICB2YXIgcG93JDggPSBNYXRoLnBvdztcbiAgICB2YXIgc2lnbiQxID0gTWF0aC5zaWduO1xuXG4gICAgdmFyIHJnYjJva2xhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8vIE9LTGFiIGNvbG9yIHNwYWNlIGltcGxlbWVudGF0aW9uIHRha2VuIGZyb21cbiAgICAgICAgLy8gaHR0cHM6Ly9ib3R0b3Nzb24uZ2l0aHViLmlvL3Bvc3RzL29rbGFiL1xuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJDUoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBbcmdiMmxyZ2IociAvIDI1NSksIHJnYjJscmdiKGcgLyAyNTUpLCByZ2IybHJnYihiIC8gMjU1KV07XG4gICAgICAgIHZhciBsciA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgbGcgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGxiID0gcmVmJDFbMl07XG4gICAgICAgIHZhciBsID0gY2JydCgwLjQxMjIyMTQ3MDggKiBsciArIDAuNTM2MzMyNTM2MyAqIGxnICsgMC4wNTE0NDU5OTI5ICogbGIpO1xuICAgICAgICB2YXIgbSA9IGNicnQoMC4yMTE5MDM0OTgyICogbHIgKyAwLjY4MDY5OTU0NTEgKiBsZyArIDAuMTA3Mzk2OTU2NiAqIGxiKTtcbiAgICAgICAgdmFyIHMgPSBjYnJ0KDAuMDg4MzAyNDYxOSAqIGxyICsgMC4yODE3MTg4Mzc2ICogbGcgKyAwLjYyOTk3ODcwMDUgKiBsYik7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDAuMjEwNDU0MjU1MyAqIGwgKyAwLjc5MzYxNzc4NSAqIG0gLSAwLjAwNDA3MjA0NjggKiBzLFxuICAgICAgICAgICAgMS45Nzc5OTg0OTUxICogbCAtIDIuNDI4NTkyMjA1ICogbSArIDAuNDUwNTkzNzA5OSAqIHMsXG4gICAgICAgICAgICAwLjAyNTkwNDAzNzEgKiBsICsgMC43ODI3NzE3NjYyICogbSAtIDAuODA4Njc1NzY2ICogc1xuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMm9rbGFiXzEgPSByZ2Iyb2tsYWIkMjtcblxuICAgIGZ1bmN0aW9uIHJnYjJscmdiKGMpIHtcbiAgICAgICAgdmFyIGFicyA9IE1hdGguYWJzKGMpO1xuICAgICAgICBpZiAoYWJzIDwgMC4wNDA0NSkge1xuICAgICAgICAgICAgcmV0dXJuIGMgLyAxMi45MjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHNpZ24kMShjKSB8fCAxKSAqIHBvdyQ4KChhYnMgKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbiAgICB9XG5cbiAgICB2YXIgdW5wYWNrJDQgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHBvdyQ3ID0gTWF0aC5wb3c7XG4gICAgdmFyIHNpZ24gPSBNYXRoLnNpZ247XG5cbiAgICAvKlxuICAgICAqIEwqIFswLi4xMDBdXG4gICAgICogYSBbLTEwMC4uMTAwXVxuICAgICAqIGIgWy0xMDAuLjEwMF1cbiAgICAgKi9cbiAgICB2YXIgb2tsYWIycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayQ0KGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIEwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcblxuICAgICAgICB2YXIgbCA9IHBvdyQ3KEwgKyAwLjM5NjMzNzc3NzQgKiBhICsgMC4yMTU4MDM3NTczICogYiwgMyk7XG4gICAgICAgIHZhciBtID0gcG93JDcoTCAtIDAuMTA1NTYxMzQ1OCAqIGEgLSAwLjA2Mzg1NDE3MjggKiBiLCAzKTtcbiAgICAgICAgdmFyIHMgPSBwb3ckNyhMIC0gMC4wODk0ODQxNzc1ICogYSAtIDEuMjkxNDg1NTQ4ICogYiwgMyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKCs0LjA3Njc0MTY2MjEgKiBsIC0gMy4zMDc3MTE1OTEzICogbSArIDAuMjMwOTY5OTI5MiAqIHMpLFxuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoLTEuMjY4NDM4MDA0NiAqIGwgKyAyLjYwOTc1NzQwMTEgKiBtIC0gMC4zNDEzMTkzOTY1ICogcyksXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigtMC4wMDQxOTYwODYzICogbCAtIDAuNzAzNDE4NjE0NyAqIG0gKyAxLjcwNzYxNDcwMSAqIHMpLFxuICAgICAgICAgICAgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFcbiAgICAgICAgXTtcbiAgICB9O1xuXG4gICAgdmFyIG9rbGFiMnJnYl8xID0gb2tsYWIycmdiJDE7XG5cbiAgICBmdW5jdGlvbiBscmdiMnJnYihjKSB7XG4gICAgICAgIHZhciBhYnMgPSBNYXRoLmFicyhjKTtcbiAgICAgICAgaWYgKGFicyA+IDAuMDAzMTMwOCkge1xuICAgICAgICAgICAgcmV0dXJuIChzaWduKGMpIHx8IDEpICogKDEuMDU1ICogcG93JDcoYWJzLCAxIC8gMi40KSAtIDAuMDU1KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYyAqIDEyLjkyO1xuICAgIH1cblxuICAgIHZhciB1bnBhY2skMyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSQ4ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJDYgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkbyA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JDEgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJva2xhYiQxID0gcmdiMm9rbGFiXzE7XG5cbiAgICBDb2xvciRvLnByb3RvdHlwZS5va2xhYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJva2xhYiQxKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ2Lm9rbGFiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRvLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnb2tsYWInXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDEuZm9ybWF0Lm9rbGFiID0gb2tsYWIycmdiXzE7XG5cbiAgICBpbnB1dCQxLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDMsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDMoYXJncywgJ29rbGFiJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ4KGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdva2xhYic7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skMiA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcmdiMm9rbGFiID0gcmdiMm9rbGFiXzE7XG4gICAgdmFyIGxhYjJsY2ggPSBsYWIybGNoXzE7XG5cbiAgICB2YXIgcmdiMm9rbGNoJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayQyKGFyZ3MsICdyZ2InKTtcbiAgICAgICAgdmFyIHIgPSByZWZbMF07XG4gICAgICAgIHZhciBnID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gcmdiMm9rbGFiKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIGxhYjJsY2gobCwgYSwgYl8pO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMm9rbGNoXzEgPSByZ2Iyb2tsY2gkMTtcblxuICAgIHZhciB1bnBhY2skMSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbGNoMmxhYiA9IGxjaDJsYWJfMTtcbiAgICB2YXIgb2tsYWIycmdiID0gb2tsYWIycmdiXzE7XG5cbiAgICB2YXIgb2tsY2gycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skMShhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByZWYgPSBsY2gybGFiKGwsIGMsIGgpO1xuICAgICAgICB2YXIgTCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGEgPSByZWZbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gb2tsYWIycmdiKEwsIGEsIGJfKTtcbiAgICAgICAgdmFyIHIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGcgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIFtyLCBnLCBiLCBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMV07XG4gICAgfTtcblxuICAgIHZhciBva2xjaDJyZ2JfMSA9IG9rbGNoMnJnYjtcblxuICAgIHZhciB1bnBhY2sgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkNyA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSQ1ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJG4gPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMm9rbGNoID0gcmdiMm9rbGNoXzE7XG5cbiAgICBDb2xvciRuLnByb3RvdHlwZS5va2xjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJva2xjaCh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNS5va2xjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkbiwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ29rbGNoJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dC5mb3JtYXQub2tsY2ggPSBva2xjaDJyZ2JfMTtcblxuICAgIGlucHV0LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDMsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrKGFyZ3MsICdva2xjaCcpO1xuICAgICAgICAgICAgaWYgKHR5cGUkNyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnb2tsY2gnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgQ29sb3IkbSA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkNiA9IHV0aWxzLnR5cGU7XG5cbiAgICBDb2xvciRtLnByb3RvdHlwZS5hbHBoYSA9IGZ1bmN0aW9uKGEsIG11dGF0ZSkge1xuICAgICAgICBpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlPWZhbHNlO1xuXG4gICAgICAgIGlmIChhICE9PSB1bmRlZmluZWQgJiYgdHlwZSQ2KGEpID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3JnYlszXSA9IGE7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJG0oW3RoaXMuX3JnYlswXSwgdGhpcy5fcmdiWzFdLCB0aGlzLl9yZ2JbMl0sIGFdLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3JnYlszXTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGwgPSBDb2xvcl8xO1xuXG4gICAgQ29sb3IkbC5wcm90b3R5cGUuY2xpcHBlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmdiLl9jbGlwcGVkIHx8IGZhbHNlO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkayA9IENvbG9yXzE7XG4gICAgdmFyIExBQl9DT05TVEFOVFMkMSA9IGxhYkNvbnN0YW50cztcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmRhcmtlbiA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHR2YXIgbWUgPSB0aGlzO1xuICAgIFx0dmFyIGxhYiA9IG1lLmxhYigpO1xuICAgIFx0bGFiWzBdIC09IExBQl9DT05TVEFOVFMkMS5LbiAqIGFtb3VudDtcbiAgICBcdHJldHVybiBuZXcgQ29sb3IkayhsYWIsICdsYWInKS5hbHBoYShtZS5hbHBoYSgpLCB0cnVlKTtcbiAgICB9O1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuYnJpZ2h0ZW4gPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0cmV0dXJuIHRoaXMuZGFya2VuKC1hbW91bnQpO1xuICAgIH07XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5kYXJrZXIgPSBDb2xvciRrLnByb3RvdHlwZS5kYXJrZW47XG4gICAgQ29sb3Ikay5wcm90b3R5cGUuYnJpZ2h0ZXIgPSBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlbjtcblxuICAgIHZhciBDb2xvciRqID0gQ29sb3JfMTtcblxuICAgIENvbG9yJGoucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChtYykge1xuICAgICAgICB2YXIgcmVmID0gbWMuc3BsaXQoJy4nKTtcbiAgICAgICAgdmFyIG1vZGUgPSByZWZbMF07XG4gICAgICAgIHZhciBjaGFubmVsID0gcmVmWzFdO1xuICAgICAgICB2YXIgc3JjID0gdGhpc1ttb2RlXSgpO1xuICAgICAgICBpZiAoY2hhbm5lbCkge1xuICAgICAgICAgICAgdmFyIGkgPSBtb2RlLmluZGV4T2YoY2hhbm5lbCkgLSAobW9kZS5zdWJzdHIoMCwgMikgPT09ICdvaycgPyAyIDogMCk7XG4gICAgICAgICAgICBpZiAoaSA+IC0xKSB7IHJldHVybiBzcmNbaV07IH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGNoYW5uZWwgXCIgKyBjaGFubmVsICsgXCIgaW4gbW9kZSBcIiArIG1vZGUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzcmM7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGkgPSBDb2xvcl8xO1xuICAgIHZhciB0eXBlJDUgPSB1dGlscy50eXBlO1xuICAgIHZhciBwb3ckNiA9IE1hdGgucG93O1xuXG4gICAgdmFyIEVQUyA9IDFlLTc7XG4gICAgdmFyIE1BWF9JVEVSID0gMjA7XG5cbiAgICBDb2xvciRpLnByb3RvdHlwZS5sdW1pbmFuY2UgPSBmdW5jdGlvbihsdW0pIHtcbiAgICAgICAgaWYgKGx1bSAhPT0gdW5kZWZpbmVkICYmIHR5cGUkNShsdW0pID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgaWYgKGx1bSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiBwdXJlIGJsYWNrXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKFswLDAsMCx0aGlzLl9yZ2JbM11dLCAncmdiJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobHVtID09PSAxKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgd2hpdGVcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkoWzI1NSwyNTUsMjU1LHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbXB1dGUgbmV3IGNvbG9yIHVzaW5nLi4uXG4gICAgICAgICAgICB2YXIgY3VyX2x1bSA9IHRoaXMubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICB2YXIgbW9kZSA9ICdyZ2InO1xuICAgICAgICAgICAgdmFyIG1heF9pdGVyID0gTUFYX0lURVI7XG5cbiAgICAgICAgICAgIHZhciB0ZXN0ID0gZnVuY3Rpb24gKGxvdywgaGlnaCkge1xuICAgICAgICAgICAgICAgIHZhciBtaWQgPSBsb3cuaW50ZXJwb2xhdGUoaGlnaCwgMC41LCBtb2RlKTtcbiAgICAgICAgICAgICAgICB2YXIgbG0gPSBtaWQubHVtaW5hbmNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGx1bSAtIGxtKSA8IEVQUyB8fCAhbWF4X2l0ZXItLSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjbG9zZSBlbm91Z2hcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1pZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxtID4gbHVtID8gdGVzdChsb3csIG1pZCkgOiB0ZXN0KG1pZCwgaGlnaCk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICB2YXIgcmdiID0gKGN1cl9sdW0gPiBsdW0gPyB0ZXN0KG5ldyBDb2xvciRpKFswLDAsMF0pLCB0aGlzKSA6IHRlc3QodGhpcywgbmV3IENvbG9yJGkoWzI1NSwyNTUsMjU1XSkpKS5yZ2IoKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShyZ2IuY29uY2F0KCBbdGhpcy5fcmdiWzNdXSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZ2IybHVtaW5hbmNlLmFwcGx5KHZvaWQgMCwgKHRoaXMuX3JnYikuc2xpY2UoMCwzKSk7XG4gICAgfTtcblxuXG4gICAgdmFyIHJnYjJsdW1pbmFuY2UgPSBmdW5jdGlvbiAocixnLGIpIHtcbiAgICAgICAgLy8gcmVsYXRpdmUgbHVtaW5hbmNlXG4gICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI3JlbGF0aXZlbHVtaW5hbmNlZGVmXG4gICAgICAgIHIgPSBsdW1pbmFuY2VfeChyKTtcbiAgICAgICAgZyA9IGx1bWluYW5jZV94KGcpO1xuICAgICAgICBiID0gbHVtaW5hbmNlX3goYik7XG4gICAgICAgIHJldHVybiAwLjIxMjYgKiByICsgMC43MTUyICogZyArIDAuMDcyMiAqIGI7XG4gICAgfTtcblxuICAgIHZhciBsdW1pbmFuY2VfeCA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHggLz0gMjU1O1xuICAgICAgICByZXR1cm4geCA8PSAwLjAzOTI4ID8geC8xMi45MiA6IHBvdyQ2KCh4KzAuMDU1KS8xLjA1NSwgMi40KTtcbiAgICB9O1xuXG4gICAgdmFyIGludGVycG9sYXRvciQxID0ge307XG5cbiAgICB2YXIgQ29sb3IkaCA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkNCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGludGVycG9sYXRvciA9IGludGVycG9sYXRvciQxO1xuXG4gICAgdmFyIG1peCQxID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgaWYgKCBmID09PSB2b2lkIDAgKSBmPTAuNTtcbiAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDM7XG4gICAgICAgIHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDMgXTtcblxuICAgICAgICB2YXIgbW9kZSA9IHJlc3RbMF0gfHwgJ2xyZ2InO1xuICAgICAgICBpZiAoIWludGVycG9sYXRvclttb2RlXSAmJiAhcmVzdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGZhbGwgYmFjayB0byB0aGUgZmlyc3Qgc3VwcG9ydGVkIG1vZGVcbiAgICAgICAgICAgIG1vZGUgPSBPYmplY3Qua2V5cyhpbnRlcnBvbGF0b3IpWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwiaW50ZXJwb2xhdGlvbiBtb2RlIFwiICsgbW9kZSArIFwiIGlzIG5vdCBkZWZpbmVkXCIpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZSQ0KGNvbDEpICE9PSAnb2JqZWN0JykgeyBjb2wxID0gbmV3IENvbG9yJGgoY29sMSk7IH1cbiAgICAgICAgaWYgKHR5cGUkNChjb2wyKSAhPT0gJ29iamVjdCcpIHsgY29sMiA9IG5ldyBDb2xvciRoKGNvbDIpOyB9XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0b3JbbW9kZV0oY29sMSwgY29sMiwgZilcbiAgICAgICAgICAgIC5hbHBoYShjb2wxLmFscGhhKCkgKyBmICogKGNvbDIuYWxwaGEoKSAtIGNvbDEuYWxwaGEoKSkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZyA9IENvbG9yXzE7XG4gICAgdmFyIG1peCA9IG1peCQxO1xuXG4gICAgQ29sb3IkZy5wcm90b3R5cGUubWl4ID1cbiAgICBDb2xvciRnLnByb3RvdHlwZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKGNvbDIsIGYpIHtcbiAgICBcdGlmICggZiA9PT0gdm9pZCAwICkgZj0wLjU7XG4gICAgXHR2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcbiAgICBcdHdoaWxlICggbGVuLS0gPiAwICkgcmVzdFsgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiArIDIgXTtcblxuICAgIFx0cmV0dXJuIG1peC5hcHBseSh2b2lkIDAsIFsgdGhpcywgY29sMiwgZiBdLmNvbmNhdCggcmVzdCApKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGYgPSBDb2xvcl8xO1xuXG4gICAgQ29sb3IkZi5wcm90b3R5cGUucHJlbXVsdGlwbHkgPSBmdW5jdGlvbihtdXRhdGUpIHtcbiAgICBcdGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGU9ZmFsc2U7XG5cbiAgICBcdHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgXHR2YXIgYSA9IHJnYlszXTtcbiAgICBcdGlmIChtdXRhdGUpIHtcbiAgICBcdFx0dGhpcy5fcmdiID0gW3JnYlswXSphLCByZ2JbMV0qYSwgcmdiWzJdKmEsIGFdO1xuICAgIFx0XHRyZXR1cm4gdGhpcztcbiAgICBcdH0gZWxzZSB7XG4gICAgXHRcdHJldHVybiBuZXcgQ29sb3IkZihbcmdiWzBdKmEsIHJnYlsxXSphLCByZ2JbMl0qYSwgYV0sICdyZ2InKTtcbiAgICBcdH1cbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJGUgPSBDb2xvcl8xO1xuICAgIHZhciBMQUJfQ09OU1RBTlRTID0gbGFiQ29uc3RhbnRzO1xuXG4gICAgQ29sb3IkZS5wcm90b3R5cGUuc2F0dXJhdGUgPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0dmFyIG1lID0gdGhpcztcbiAgICBcdHZhciBsY2ggPSBtZS5sY2goKTtcbiAgICBcdGxjaFsxXSArPSBMQUJfQ09OU1RBTlRTLktuICogYW1vdW50O1xuICAgIFx0aWYgKGxjaFsxXSA8IDApIHsgbGNoWzFdID0gMDsgfVxuICAgIFx0cmV0dXJuIG5ldyBDb2xvciRlKGxjaCwgJ2xjaCcpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xuICAgIH07XG5cbiAgICBDb2xvciRlLnByb3RvdHlwZS5kZXNhdHVyYXRlID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHJldHVybiB0aGlzLnNhdHVyYXRlKC1hbW91bnQpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZCA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkMyA9IHV0aWxzLnR5cGU7XG5cbiAgICBDb2xvciRkLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobWMsIHZhbHVlLCBtdXRhdGUpIHtcbiAgICAgICAgaWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZSA9IGZhbHNlO1xuXG4gICAgICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbW9kZSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQzKHZhbHVlKSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLmNoYXJBdCgwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy0nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSArPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKj0gK3ZhbHVlLnN1YnN0cigxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy8nOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAvPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gPSArdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUkMyh2YWx1ZSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuc3VwcG9ydGVkIHZhbHVlIGZvciBDb2xvci5zZXRcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBvdXQgPSBuZXcgQ29sb3IkZChzcmMsIG1vZGUpO1xuICAgICAgICAgICAgICAgIGlmIChtdXRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmdiID0gb3V0Ll9yZ2I7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gY2hhbm5lbCBcIiArIGNoYW5uZWwgKyBcIiBpbiBtb2RlIFwiICsgbW9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkYyA9IENvbG9yXzE7XG5cbiAgICB2YXIgcmdiID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIHh5ejAgPSBjb2wxLl9yZ2I7XG4gICAgICAgIHZhciB4eXoxID0gY29sMi5fcmdiO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJGMoXG4gICAgICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdLXh5ejBbMF0pLFxuICAgICAgICAgICAgeHl6MFsxXSArIGYgKiAoeHl6MVsxXS14eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0teHl6MFsyXSksXG4gICAgICAgICAgICAncmdiJ1xuICAgICAgICApXG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLnJnYiA9IHJnYjtcblxuICAgIHZhciBDb2xvciRiID0gQ29sb3JfMTtcbiAgICB2YXIgc3FydCQyID0gTWF0aC5zcXJ0O1xuICAgIHZhciBwb3ckNSA9IE1hdGgucG93O1xuXG4gICAgdmFyIGxyZ2IgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgcmVmID0gY29sMS5fcmdiO1xuICAgICAgICB2YXIgeDEgPSByZWZbMF07XG4gICAgICAgIHZhciB5MSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHoxID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBjb2wyLl9yZ2I7XG4gICAgICAgIHZhciB4MiA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgeTIgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIHoyID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkYihcbiAgICAgICAgICAgIHNxcnQkMihwb3ckNSh4MSwyKSAqICgxLWYpICsgcG93JDUoeDIsMikgKiBmKSxcbiAgICAgICAgICAgIHNxcnQkMihwb3ckNSh5MSwyKSAqICgxLWYpICsgcG93JDUoeTIsMikgKiBmKSxcbiAgICAgICAgICAgIHNxcnQkMihwb3ckNSh6MSwyKSAqICgxLWYpICsgcG93JDUoejIsMikgKiBmKSxcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgIClcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEubHJnYiA9IGxyZ2I7XG5cbiAgICB2YXIgQ29sb3IkYSA9IENvbG9yXzE7XG5cbiAgICB2YXIgbGFiID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIHh5ejAgPSBjb2wxLmxhYigpO1xuICAgICAgICB2YXIgeHl6MSA9IGNvbDIubGFiKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkYShcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0teHl6MFswXSksXG4gICAgICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdLXh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXS14eXowWzJdKSxcbiAgICAgICAgICAgICdsYWInXG4gICAgICAgIClcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEubGFiID0gbGFiO1xuXG4gICAgdmFyIENvbG9yJDkgPSBDb2xvcl8xO1xuXG4gICAgdmFyIF9oc3ggPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZiwgbSkge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMTtcblxuICAgICAgICB2YXIgeHl6MCwgeHl6MTtcbiAgICAgICAgaWYgKG0gPT09ICdoc2wnKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5oc2woKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLmhzbCgpO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT09ICdoc3YnKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5oc3YoKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLmhzdigpO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT09ICdoY2cnKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5oY2coKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLmhjZygpO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT09ICdoc2knKSB7XG4gICAgICAgICAgICB4eXowID0gY29sMS5oc2koKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLmhzaSgpO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT09ICdsY2gnIHx8IG0gPT09ICdoY2wnKSB7XG4gICAgICAgICAgICBtID0gJ2hjbCc7XG4gICAgICAgICAgICB4eXowID0gY29sMS5oY2woKTtcbiAgICAgICAgICAgIHh5ejEgPSBjb2wyLmhjbCgpO1xuICAgICAgICB9IGVsc2UgaWYgKG0gPT09ICdva2xjaCcpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLm9rbGNoKCkucmV2ZXJzZSgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaHVlMCwgaHVlMSwgc2F0MCwgc2F0MSwgbGJ2MCwgbGJ2MTtcbiAgICAgICAgaWYgKG0uc3Vic3RyKDAsIDEpID09PSAnaCcgfHwgbSA9PT0gJ29rbGNoJykge1xuICAgICAgICAgICAgKGFzc2lnbiA9IHh5ejAsIGh1ZTAgPSBhc3NpZ25bMF0sIHNhdDAgPSBhc3NpZ25bMV0sIGxidjAgPSBhc3NpZ25bMl0pO1xuICAgICAgICAgICAgKGFzc2lnbiQxID0geHl6MSwgaHVlMSA9IGFzc2lnbiQxWzBdLCBzYXQxID0gYXNzaWduJDFbMV0sIGxidjEgPSBhc3NpZ24kMVsyXSk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2F0LCBodWUsIGxidiwgZGg7XG5cbiAgICAgICAgaWYgKCFpc05hTihodWUwKSAmJiAhaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgICAgIC8vIGJvdGggY29sb3JzIGhhdmUgaHVlXG4gICAgICAgICAgICBpZiAoaHVlMSA+IGh1ZTAgJiYgaHVlMSAtIGh1ZTAgPiAxODApIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgLSAoaHVlMCArIDM2MCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGh1ZTEgPCBodWUwICYmIGh1ZTAgLSBodWUxID4gMTgwKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWUxICsgMzYwIC0gaHVlMDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWUxIC0gaHVlMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGh1ZSA9IGh1ZTAgKyBmICogZGg7XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzTmFOKGh1ZTApKSB7XG4gICAgICAgICAgICBodWUgPSBodWUwO1xuICAgICAgICAgICAgaWYgKChsYnYxID09IDEgfHwgbGJ2MSA9PSAwKSAmJiBtICE9ICdoc3YnKSB7IHNhdCA9IHNhdDA7IH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMSkpIHtcbiAgICAgICAgICAgIGh1ZSA9IGh1ZTE7XG4gICAgICAgICAgICBpZiAoKGxidjAgPT0gMSB8fCBsYnYwID09IDApICYmIG0gIT0gJ2hzdicpIHsgc2F0ID0gc2F0MTsgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaHVlID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzYXQgPT09IHVuZGVmaW5lZCkgeyBzYXQgPSBzYXQwICsgZiAqIChzYXQxIC0gc2F0MCk7IH1cbiAgICAgICAgbGJ2ID0gbGJ2MCArIGYgKiAobGJ2MSAtIGxidjApO1xuICAgICAgICByZXR1cm4gbSA9PT0gJ29rbGNoJyA/IG5ldyBDb2xvciQ5KFtsYnYsIHNhdCwgaHVlXSwgbSkgOiBuZXcgQ29sb3IkOShbaHVlLCBzYXQsIGxidl0sIG0pO1xuICAgIH07XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDUgPSBfaHN4O1xuXG4gICAgdmFyIGxjaCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDUoY29sMSwgY29sMiwgZiwgJ2xjaCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5sY2ggPSBsY2g7XG4gICAgaW50ZXJwb2xhdG9yJDEuaGNsID0gbGNoO1xuXG4gICAgdmFyIENvbG9yJDggPSBDb2xvcl8xO1xuXG4gICAgdmFyIG51bSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciBjMSA9IGNvbDEubnVtKCk7XG4gICAgICAgIHZhciBjMiA9IGNvbDIubnVtKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkOChjMSArIGYgKiAoYzItYzEpLCAnbnVtJylcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEubnVtID0gbnVtO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQ0ID0gX2hzeDtcblxuICAgIHZhciBoY2cgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQ0KGNvbDEsIGNvbDIsIGYsICdoY2cnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEuaGNnID0gaGNnO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQzID0gX2hzeDtcblxuICAgIHZhciBoc2kgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQzKGNvbDEsIGNvbDIsIGYsICdoc2knKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEuaHNpID0gaHNpO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQyID0gX2hzeDtcblxuICAgIHZhciBoc2wgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQyKGNvbDEsIGNvbDIsIGYsICdoc2wnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEuaHNsID0gaHNsO1xuXG4gICAgdmFyIGludGVycG9sYXRlX2hzeCQxID0gX2hzeDtcblxuICAgIHZhciBoc3YgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgIFx0cmV0dXJuIGludGVycG9sYXRlX2hzeCQxKGNvbDEsIGNvbDIsIGYsICdoc3YnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEuaHN2ID0gaHN2O1xuXG4gICAgdmFyIENvbG9yJDcgPSBDb2xvcl8xO1xuXG4gICAgdmFyIG9rbGFiID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIHh5ejAgPSBjb2wxLm9rbGFiKCk7XG4gICAgICAgIHZhciB4eXoxID0gY29sMi5va2xhYigpO1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yJDcoXG4gICAgICAgICAgICB4eXowWzBdICsgZiAqICh4eXoxWzBdIC0geHl6MFswXSksXG4gICAgICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdIC0geHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdIC0geHl6MFsyXSksXG4gICAgICAgICAgICAnb2tsYWInXG4gICAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLm9rbGFiID0gb2tsYWI7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4ID0gX2hzeDtcblxuICAgIHZhciBva2xjaCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnBvbGF0ZV9oc3goY29sMSwgY29sMiwgZiwgJ29rbGNoJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLm9rbGNoID0gb2tsY2g7XG5cbiAgICB2YXIgQ29sb3IkNiA9IENvbG9yXzE7XG4gICAgdmFyIGNsaXBfcmdiJDEgPSB1dGlscy5jbGlwX3JnYjtcbiAgICB2YXIgcG93JDQgPSBNYXRoLnBvdztcbiAgICB2YXIgc3FydCQxID0gTWF0aC5zcXJ0O1xuICAgIHZhciBQSSQxID0gTWF0aC5QSTtcbiAgICB2YXIgY29zJDIgPSBNYXRoLmNvcztcbiAgICB2YXIgc2luJDIgPSBNYXRoLnNpbjtcbiAgICB2YXIgYXRhbjIkMSA9IE1hdGguYXRhbjI7XG5cbiAgICB2YXIgYXZlcmFnZSA9IGZ1bmN0aW9uIChjb2xvcnMsIG1vZGUsIHdlaWdodHMpIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdscmdiJztcbiAgICAgICAgaWYgKCB3ZWlnaHRzID09PSB2b2lkIDAgKSB3ZWlnaHRzPW51bGw7XG5cbiAgICAgICAgdmFyIGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICBpZiAoIXdlaWdodHMpIHsgd2VpZ2h0cyA9IEFycmF5LmZyb20obmV3IEFycmF5KGwpKS5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSk7IH1cbiAgICAgICAgLy8gbm9ybWFsaXplIHdlaWdodHNcbiAgICAgICAgdmFyIGsgPSBsIC8gd2VpZ2h0cy5yZWR1Y2UoZnVuY3Rpb24oYSwgYikgeyByZXR1cm4gYSArIGI7IH0pO1xuICAgICAgICB3ZWlnaHRzLmZvckVhY2goZnVuY3Rpb24gKHcsaSkgeyB3ZWlnaHRzW2ldICo9IGs7IH0pO1xuICAgICAgICAvLyBjb252ZXJ0IGNvbG9ycyB0byBDb2xvciBvYmplY3RzXG4gICAgICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5ldyBDb2xvciQ2KGMpOyB9KTtcbiAgICAgICAgaWYgKG1vZGUgPT09ICdscmdiJykge1xuICAgICAgICAgICAgcmV0dXJuIF9hdmVyYWdlX2xyZ2IoY29sb3JzLCB3ZWlnaHRzKVxuICAgICAgICB9XG4gICAgICAgIHZhciBmaXJzdCA9IGNvbG9ycy5zaGlmdCgpO1xuICAgICAgICB2YXIgeHl6ID0gZmlyc3QuZ2V0KG1vZGUpO1xuICAgICAgICB2YXIgY250ID0gW107XG4gICAgICAgIHZhciBkeCA9IDA7XG4gICAgICAgIHZhciBkeSA9IDA7XG4gICAgICAgIC8vIGluaXRpYWwgY29sb3JcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPHh5ei5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgeHl6W2ldID0gKHh5eltpXSB8fCAwKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICBjbnQucHVzaChpc05hTih4eXpbaV0pID8gMCA6IHdlaWdodHNbMF0pO1xuICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcgJiYgIWlzTmFOKHh5eltpXSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgQSA9IHh5eltpXSAvIDE4MCAqIFBJJDE7XG4gICAgICAgICAgICAgICAgZHggKz0gY29zJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgICAgIGR5ICs9IHNpbiQyKEEpICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBhbHBoYSA9IGZpcnN0LmFscGhhKCkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICBjb2xvcnMuZm9yRWFjaChmdW5jdGlvbiAoYyxjaSkge1xuICAgICAgICAgICAgdmFyIHh5ejIgPSBjLmdldChtb2RlKTtcbiAgICAgICAgICAgIGFscGhhICs9IGMuYWxwaGEoKSAqIHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8eHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTih4eXoyW2ldKSkge1xuICAgICAgICAgICAgICAgICAgICBjbnRbaV0gKz0gd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBBID0geHl6MltpXSAvIDE4MCAqIFBJJDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBkeCArPSBjb3MkMihBKSAqIHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICAgICAgICAgICAgICBkeSArPSBzaW4kMihBKSAqIHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4eXpbaV0gKz0geHl6MltpXSAqIHdlaWdodHNbY2krMV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZvciAodmFyIGkkMT0wOyBpJDE8eHl6Lmxlbmd0aDsgaSQxKyspIHtcbiAgICAgICAgICAgIGlmIChtb2RlLmNoYXJBdChpJDEpID09PSAnaCcpIHtcbiAgICAgICAgICAgICAgICB2YXIgQSQxID0gYXRhbjIkMShkeSAvIGNudFtpJDFdLCBkeCAvIGNudFtpJDFdKSAvIFBJJDEgKiAxODA7XG4gICAgICAgICAgICAgICAgd2hpbGUgKEEkMSA8IDApIHsgQSQxICs9IDM2MDsgfVxuICAgICAgICAgICAgICAgIHdoaWxlIChBJDEgPj0gMzYwKSB7IEEkMSAtPSAzNjA7IH1cbiAgICAgICAgICAgICAgICB4eXpbaSQxXSA9IEEkMTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeHl6W2kkMV0gPSB4eXpbaSQxXS9jbnRbaSQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBhbHBoYSAvPSBsO1xuICAgICAgICByZXR1cm4gKG5ldyBDb2xvciQ2KHh5eiwgbW9kZSkpLmFscGhhKGFscGhhID4gMC45OTk5OSA/IDEgOiBhbHBoYSwgdHJ1ZSk7XG4gICAgfTtcblxuXG4gICAgdmFyIF9hdmVyYWdlX2xyZ2IgPSBmdW5jdGlvbiAoY29sb3JzLCB3ZWlnaHRzKSB7XG4gICAgICAgIHZhciBsID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgdmFyIHh5eiA9IFswLDAsMCwwXTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpIDwgY29sb3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY29sID0gY29sb3JzW2ldO1xuICAgICAgICAgICAgdmFyIGYgPSB3ZWlnaHRzW2ldIC8gbDtcbiAgICAgICAgICAgIHZhciByZ2IgPSBjb2wuX3JnYjtcbiAgICAgICAgICAgIHh5elswXSArPSBwb3ckNChyZ2JbMF0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzFdICs9IHBvdyQ0KHJnYlsxXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbMl0gKz0gcG93JDQocmdiWzJdLDIpICogZjtcbiAgICAgICAgICAgIHh5elszXSArPSByZ2JbM10gKiBmO1xuICAgICAgICB9XG4gICAgICAgIHh5elswXSA9IHNxcnQkMSh4eXpbMF0pO1xuICAgICAgICB4eXpbMV0gPSBzcXJ0JDEoeHl6WzFdKTtcbiAgICAgICAgeHl6WzJdID0gc3FydCQxKHh5elsyXSk7XG4gICAgICAgIGlmICh4eXpbM10gPiAwLjk5OTk5OTkpIHsgeHl6WzNdID0gMTsgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yJDYoY2xpcF9yZ2IkMSh4eXopKTtcbiAgICB9O1xuXG4gICAgLy8gbWluaW1hbCBtdWx0aS1wdXJwb3NlIGludGVyZmFjZVxuXG4gICAgLy8gQHJlcXVpcmVzIHV0aWxzIGNvbG9yIGFuYWx5emVcblxuICAgIHZhciBjaHJvbWEkNCA9IGNocm9tYV8xO1xuICAgIHZhciB0eXBlJDIgPSB1dGlscy50eXBlO1xuXG4gICAgdmFyIHBvdyQzID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgc2NhbGUkMiA9IGZ1bmN0aW9uKGNvbG9ycykge1xuXG4gICAgICAgIC8vIGNvbnN0cnVjdG9yXG4gICAgICAgIHZhciBfbW9kZSA9ICdyZ2InO1xuICAgICAgICB2YXIgX25hY29sID0gY2hyb21hJDQoJyNjY2MnKTtcbiAgICAgICAgdmFyIF9zcHJlYWQgPSAwO1xuICAgICAgICAvLyBjb25zdCBfZml4ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9kb21haW4gPSBbMCwgMV07XG4gICAgICAgIHZhciBfcG9zID0gW107XG4gICAgICAgIHZhciBfcGFkZGluZyA9IFswLDBdO1xuICAgICAgICB2YXIgX2NsYXNzZXMgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9jb2xvcnMgPSBbXTtcbiAgICAgICAgdmFyIF9vdXQgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9taW4gPSAwO1xuICAgICAgICB2YXIgX21heCA9IDE7XG4gICAgICAgIHZhciBfY29ycmVjdExpZ2h0bmVzcyA9IGZhbHNlO1xuICAgICAgICB2YXIgX2NvbG9yQ2FjaGUgPSB7fTtcbiAgICAgICAgdmFyIF91c2VDYWNoZSA9IHRydWU7XG4gICAgICAgIHZhciBfZ2FtbWEgPSAxO1xuXG4gICAgICAgIC8vIHByaXZhdGUgbWV0aG9kc1xuXG4gICAgICAgIHZhciBzZXRDb2xvcnMgPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycyB8fCBbJyNmZmYnLCAnIzAwMCddO1xuICAgICAgICAgICAgaWYgKGNvbG9ycyAmJiB0eXBlJDIoY29sb3JzKSA9PT0gJ3N0cmluZycgJiYgY2hyb21hJDQuYnJld2VyICYmXG4gICAgICAgICAgICAgICAgY2hyb21hJDQuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IGNocm9tYSQ0LmJyZXdlcltjb2xvcnMudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZSQyKGNvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgc2luZ2xlIGNvbG9yXG4gICAgICAgICAgICAgICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sb3JzID0gW2NvbG9yc1swXSwgY29sb3JzWzBdXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIGNvbG9yc1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IGNvbG9ycy5zbGljZSgwKTtcbiAgICAgICAgICAgICAgICAvLyBjb252ZXJ0IHRvIGNocm9tYSBjbGFzc2VzXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYz0wOyBjPGNvbG9ycy5sZW5ndGg7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcnNbY10gPSBjaHJvbWEkNChjb2xvcnNbY10pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBhdXRvLWZpbGwgY29sb3IgcG9zaXRpb25cbiAgICAgICAgICAgICAgICBfcG9zLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYyQxPTA7IGMkMTxjb2xvcnMubGVuZ3RoOyBjJDErKykge1xuICAgICAgICAgICAgICAgICAgICBfcG9zLnB1c2goYyQxLyhjb2xvcnMubGVuZ3RoLTEpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgICAgICByZXR1cm4gX2NvbG9ycyA9IGNvbG9ycztcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgZ2V0Q2xhc3MgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKF9jbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB2YXIgbiA9IF9jbGFzc2VzLmxlbmd0aC0xO1xuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaSA8IG4gJiYgdmFsdWUgPj0gX2NsYXNzZXNbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaS0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfTtcbiAgICAgICAgdmFyIHRNYXBEb21haW4gPSBmdW5jdGlvbiAodCkgeyByZXR1cm4gdDsgfTtcblxuICAgICAgICAvLyBjb25zdCBjbGFzc2lmeVZhbHVlID0gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgLy8gICAgIGxldCB2YWwgPSB2YWx1ZTtcbiAgICAgICAgLy8gICAgIGlmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbiA9IF9jbGFzc2VzLmxlbmd0aC0xO1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IGkgPSBnZXRDbGFzcyh2YWx1ZSk7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbWluYyA9IF9jbGFzc2VzWzBdICsgKChfY2xhc3Nlc1sxXS1fY2xhc3Nlc1swXSkgKiAoMCArIChfc3ByZWFkICogMC41KSkpOyAgLy8gY2VudGVyIG9mIDFzdCBjbGFzc1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IG1heGMgPSBfY2xhc3Nlc1tuLTFdICsgKChfY2xhc3Nlc1tuXS1fY2xhc3Nlc1tuLTFdKSAqICgxIC0gKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgbGFzdCBjbGFzc1xuICAgICAgICAvLyAgICAgICAgIHZhbCA9IF9taW4gKyAoKCgoX2NsYXNzZXNbaV0gKyAoKF9jbGFzc2VzW2krMV0gLSBfY2xhc3Nlc1tpXSkgKiAwLjUpKSAtIG1pbmMpIC8gKG1heGMtbWluYykpICogKF9tYXggLSBfbWluKSk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgICByZXR1cm4gdmFsO1xuICAgICAgICAvLyB9O1xuXG4gICAgICAgIHZhciBnZXRDb2xvciA9IGZ1bmN0aW9uKHZhbCwgYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICB2YXIgY29sLCB0O1xuICAgICAgICAgICAgaWYgKGJ5cGFzc01hcCA9PSBudWxsKSB7IGJ5cGFzc01hcCA9IGZhbHNlOyB9XG4gICAgICAgICAgICBpZiAoaXNOYU4odmFsKSB8fCAodmFsID09PSBudWxsKSkgeyByZXR1cm4gX25hY29sOyB9XG4gICAgICAgICAgICBpZiAoIWJ5cGFzc01hcCkge1xuICAgICAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiAoX2NsYXNzZXMubGVuZ3RoID4gMikpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZmluZCB0aGUgY2xhc3NcbiAgICAgICAgICAgICAgICAgICAgdmFyIGMgPSBnZXRDbGFzcyh2YWwpO1xuICAgICAgICAgICAgICAgICAgICB0ID0gYyAvIChfY2xhc3Nlcy5sZW5ndGgtMik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChfbWF4ICE9PSBfbWluKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgaW50ZXJwb2xhdGUgYmV0d2VlbiBtaW4vbWF4XG4gICAgICAgICAgICAgICAgICAgIHQgPSAodmFsIC0gX21pbikgLyAoX21heCAtIF9taW4pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHQgPSAxO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdCA9IHZhbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZG9tYWluIG1hcFxuICAgICAgICAgICAgdCA9IHRNYXBEb21haW4odCk7XG5cbiAgICAgICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICAgICAgdCA9IHRNYXBMaWdodG5lc3ModCk7ICAvLyBsaWdodG5lc3MgY29ycmVjdGlvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX2dhbW1hICE9PSAxKSB7IHQgPSBwb3ckMyh0LCBfZ2FtbWEpOyB9XG5cbiAgICAgICAgICAgIHQgPSBfcGFkZGluZ1swXSArICh0ICogKDEgLSBfcGFkZGluZ1swXSAtIF9wYWRkaW5nWzFdKSk7XG5cbiAgICAgICAgICAgIHQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCB0KSk7XG5cbiAgICAgICAgICAgIHZhciBrID0gTWF0aC5mbG9vcih0ICogMTAwMDApO1xuXG4gICAgICAgICAgICBpZiAoX3VzZUNhY2hlICYmIF9jb2xvckNhY2hlW2tdKSB7XG4gICAgICAgICAgICAgICAgY29sID0gX2NvbG9yQ2FjaGVba107XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDIoX2NvbG9ycykgPT09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy9mb3IgaSBpbiBbMC4uX3Bvcy5sZW5ndGgtMV1cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPF9wb3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gX3Bvc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IDw9IHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0ID49IHApICYmIChpID09PSAoX3Bvcy5sZW5ndGgtMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gX2NvbG9yc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gcCAmJiB0IDwgX3Bvc1tpKzFdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9ICh0LXApLyhfcG9zW2krMV0tcCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID0gY2hyb21hJDQuaW50ZXJwb2xhdGUoX2NvbG9yc1tpXSwgX2NvbG9yc1tpKzFdLCB0LCBfbW9kZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUkMihfY29sb3JzKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzKHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoX3VzZUNhY2hlKSB7IF9jb2xvckNhY2hlW2tdID0gY29sOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY29sO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciByZXNldENhY2hlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX2NvbG9yQ2FjaGUgPSB7fTsgfTtcblxuICAgICAgICBzZXRDb2xvcnMoY29sb3JzKTtcblxuICAgICAgICAvLyBwdWJsaWMgaW50ZXJmYWNlXG5cbiAgICAgICAgdmFyIGYgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICB2YXIgYyA9IGNocm9tYSQ0KGdldENvbG9yKHYpKTtcbiAgICAgICAgICAgIGlmIChfb3V0ICYmIGNbX291dF0pIHsgcmV0dXJuIGNbX291dF0oKTsgfSBlbHNlIHsgcmV0dXJuIGM7IH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmNsYXNzZXMgPSBmdW5jdGlvbihjbGFzc2VzKSB7XG4gICAgICAgICAgICBpZiAoY2xhc3NlcyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihjbGFzc2VzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IGNsYXNzZXM7XG4gICAgICAgICAgICAgICAgICAgIF9kb21haW4gPSBbY2xhc3Nlc1swXSwgY2xhc3Nlc1tjbGFzc2VzLmxlbmd0aC0xXV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBjaHJvbWEkNC5hbmFseXplKF9kb21haW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBbZC5taW4sIGQubWF4XTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gY2hyb21hJDQubGltaXRzKGQsICdlJywgY2xhc3Nlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gX2NsYXNzZXM7XG4gICAgICAgIH07XG5cblxuICAgICAgICBmLmRvbWFpbiA9IGZ1bmN0aW9uKGRvbWFpbikge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9kb21haW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfbWluID0gZG9tYWluWzBdO1xuICAgICAgICAgICAgX21heCA9IGRvbWFpbltkb21haW4ubGVuZ3RoLTFdO1xuICAgICAgICAgICAgX3BvcyA9IFtdO1xuICAgICAgICAgICAgdmFyIGsgPSBfY29sb3JzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmICgoZG9tYWluLmxlbmd0aCA9PT0gaykgJiYgKF9taW4gIT09IF9tYXgpKSB7XG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIHBvc2l0aW9uc1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gQXJyYXkuZnJvbShkb21haW4pOyBpIDwgbGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGxpc3RbaV07XG5cbiAgICAgICAgICAgICAgICAgIF9wb3MucHVzaCgoZC1fbWluKSAvIChfbWF4LV9taW4pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGM9MDsgYzxrOyBjKyspIHtcbiAgICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKGMvKGstMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZG9tYWluLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGRvbWFpbiBtYXBcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRPdXQgPSBkb21haW4ubWFwKGZ1bmN0aW9uIChkLGkpIHsgcmV0dXJuIGkvKGRvbWFpbi5sZW5ndGgtMSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdEJyZWFrcyA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIChkIC0gX21pbikgLyAoX21heCAtIF9taW4pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0QnJlYWtzLmV2ZXJ5KGZ1bmN0aW9uICh2YWwsIGkpIHsgcmV0dXJuIHRPdXRbaV0gPT09IHZhbDsgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRNYXBEb21haW4gPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0IDw9IDAgfHwgdCA+PSAxKSB7IHJldHVybiB0OyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0ID49IHRCcmVha3NbaSsxXSkgeyBpKys7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZiA9ICh0IC0gdEJyZWFrc1tpXSkgLyAodEJyZWFrc1tpKzFdIC0gdEJyZWFrc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG91dCA9IHRPdXRbaV0gKyBmICogKHRPdXRbaSsxXSAtIHRPdXRbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZG9tYWluID0gW19taW4sIF9tYXhdO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5tb2RlID0gZnVuY3Rpb24oX20pIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbW9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9tb2RlID0gX207XG4gICAgICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnJhbmdlID0gZnVuY3Rpb24oY29sb3JzLCBfcG9zKSB7XG4gICAgICAgICAgICBzZXRDb2xvcnMoY29sb3JzKTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYub3V0ID0gZnVuY3Rpb24oX28pIHtcbiAgICAgICAgICAgIF9vdXQgPSBfbztcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuc3ByZWFkID0gZnVuY3Rpb24odmFsKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3NwcmVhZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9zcHJlYWQgPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmNvcnJlY3RMaWdodG5lc3MgPSBmdW5jdGlvbih2KSB7XG4gICAgICAgICAgICBpZiAodiA9PSBudWxsKSB7IHYgPSB0cnVlOyB9XG4gICAgICAgICAgICBfY29ycmVjdExpZ2h0bmVzcyA9IHY7XG4gICAgICAgICAgICByZXNldENhY2hlKCk7XG4gICAgICAgICAgICBpZiAoX2NvcnJlY3RMaWdodG5lc3MpIHtcbiAgICAgICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgTDAgPSBnZXRDb2xvcigwLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIEwxID0gZ2V0Q29sb3IoMSwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwb2wgPSBMMCA+IEwxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9hY3R1YWwgPSBnZXRDb2xvcih0LCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExfaWRlYWwgPSBMMCArICgoTDEgLSBMMCkgKiB0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQwID0gMDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQxID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1heF9pdGVyID0gMjA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICgoTWF0aC5hYnMoTF9kaWZmKSA+IDFlLTIpICYmIChtYXhfaXRlci0tID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9sKSB7IExfZGlmZiAqPSAtMTsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMX2RpZmYgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQwID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDEgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0MSA9IHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gKHQwIC0gdCkgKiAwLjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIExfYWN0dWFsID0gZ2V0Q29sb3IodCwgdHJ1ZSkubGFiKClbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExfZGlmZiA9IExfYWN0dWFsIC0gTF9pZGVhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHQ7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5wYWRkaW5nID0gZnVuY3Rpb24ocCkge1xuICAgICAgICAgICAgaWYgKHAgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDIocCkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIHAgPSBbcCxwXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3BhZGRpbmcgPSBwO1xuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3BhZGRpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5jb2xvcnMgPSBmdW5jdGlvbihudW1Db2xvcnMsIG91dCkge1xuICAgICAgICAgICAgLy8gSWYgbm8gYXJndW1lbnRzIGFyZSBnaXZlbiwgcmV0dXJuIHRoZSBvcmlnaW5hbCBjb2xvcnMgdGhhdCB3ZXJlIHByb3ZpZGVkXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHsgb3V0ID0gJ2hleCc7IH1cbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBfY29sb3JzLnNsaWNlKDApO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtmKDAuNSldO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG51bUNvbG9ycyA+IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgZG0gPSBfZG9tYWluWzBdO1xuICAgICAgICAgICAgICAgIHZhciBkZCA9IF9kb21haW5bMV0gLSBkbTtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBfX3JhbmdlX18oMCwgbnVtQ29sb3JzLCBmYWxzZSkubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBmKCBkbSArICgoaS8obnVtQ29sb3JzLTEpKSAqIGRkKSApOyB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gcmV0dXJucyBhbGwgY29sb3JzIGJhc2VkIG9uIHRoZSBkZWZpbmVkIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBjb2xvcnMgPSBbXTtcbiAgICAgICAgICAgICAgICB2YXIgc2FtcGxlcyA9IFtdO1xuICAgICAgICAgICAgICAgIGlmIChfY2xhc3NlcyAmJiAoX2NsYXNzZXMubGVuZ3RoID4gMikpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDEsIGVuZCA9IF9jbGFzc2VzLmxlbmd0aCwgYXNjID0gMSA8PSBlbmQ7IGFzYyA/IGkgPCBlbmQgOiBpID4gZW5kOyBhc2MgPyBpKysgOiBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZXMucHVzaCgoX2NsYXNzZXNbaS0xXStfY2xhc3Nlc1tpXSkqMC41KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZXMgPSBfZG9tYWluO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHQgPSBzYW1wbGVzLm1hcChmdW5jdGlvbiAodikgeyByZXR1cm4gZih2KTsgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjaHJvbWEkNFtvdXRdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0Lm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gY1tvdXRdKCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmNhY2hlID0gZnVuY3Rpb24oYykge1xuICAgICAgICAgICAgaWYgKGMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF91c2VDYWNoZSA9IGM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfdXNlQ2FjaGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5nYW1tYSA9IGZ1bmN0aW9uKGcpIHtcbiAgICAgICAgICAgIGlmIChnICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfZ2FtbWEgPSBnO1xuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2dhbW1hO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYubm9kYXRhID0gZnVuY3Rpb24oZCkge1xuICAgICAgICAgICAgaWYgKGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9uYWNvbCA9IGNocm9tYSQ0KGQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX25hY29sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICBmdW5jdGlvbiBfX3JhbmdlX18obGVmdCwgcmlnaHQsIGluY2x1c2l2ZSkge1xuICAgICAgdmFyIHJhbmdlID0gW107XG4gICAgICB2YXIgYXNjZW5kaW5nID0gbGVmdCA8IHJpZ2h0O1xuICAgICAgdmFyIGVuZCA9ICFpbmNsdXNpdmUgPyByaWdodCA6IGFzY2VuZGluZyA/IHJpZ2h0ICsgMSA6IHJpZ2h0IC0gMTtcbiAgICAgIGZvciAodmFyIGkgPSBsZWZ0OyBhc2NlbmRpbmcgPyBpIDwgZW5kIDogaSA+IGVuZDsgYXNjZW5kaW5nID8gaSsrIDogaS0tKSB7XG4gICAgICAgIHJhbmdlLnB1c2goaSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmFuZ2U7XG4gICAgfVxuXG4gICAgLy9cbiAgICAvLyBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gICAgLy9cblxuICAgIC8vIEByZXF1aXJlcyB1dGlscyBsYWJcbiAgICB2YXIgQ29sb3IkNSA9IENvbG9yXzE7XG5cbiAgICB2YXIgc2NhbGUkMSA9IHNjYWxlJDI7XG5cbiAgICAvLyBudGggcm93IG9mIHRoZSBwYXNjYWwgdHJpYW5nbGVcbiAgICB2YXIgYmlub21fcm93ID0gZnVuY3Rpb24obikge1xuICAgICAgICB2YXIgcm93ID0gWzEsIDFdO1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgdmFyIG5ld3JvdyA9IFsxXTtcbiAgICAgICAgICAgIGZvciAodmFyIGogPSAxOyBqIDw9IHJvdy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIG5ld3Jvd1tqXSA9IChyb3dbal0gfHwgMCkgKyByb3dbaiAtIDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcm93ID0gbmV3cm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb3c7XG4gICAgfTtcblxuICAgIHZhciBiZXppZXIgPSBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICAgICAgdmFyIGFzc2lnbiwgYXNzaWduJDEsIGFzc2lnbiQyO1xuXG4gICAgICAgIHZhciBJLCBsYWIwLCBsYWIxLCBsYWIyO1xuICAgICAgICBjb2xvcnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBuZXcgQ29sb3IkNShjKTsgfSk7XG4gICAgICAgIGlmIChjb2xvcnMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBsaW5lYXIgaW50ZXJwb2xhdGlvblxuICAgICAgICAgICAgKGFzc2lnbiA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pLCBsYWIwID0gYXNzaWduWzBdLCBsYWIxID0gYXNzaWduWzFdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBsYWIwW2ldICsgKHQgKiAobGFiMVtpXSAtIGxhYjBbaV0pKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgLy8gcXVhZHJhdGljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICAoYXNzaWduJDEgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KSwgbGFiMCA9IGFzc2lnbiQxWzBdLCBsYWIxID0gYXNzaWduJDFbMV0sIGxhYjIgPSBhc3NpZ24kMVsyXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gKCgxLXQpKigxLXQpICogbGFiMFtpXSkgKyAoMiAqICgxLXQpICogdCAqIGxhYjFbaV0pICsgKHQgKiB0ICogbGFiMltpXSk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGNvbG9ycy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIC8vIGN1YmljIGJlemllciBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICB2YXIgbGFiMztcbiAgICAgICAgICAgIChhc3NpZ24kMiA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pLCBsYWIwID0gYXNzaWduJDJbMF0sIGxhYjEgPSBhc3NpZ24kMlsxXSwgbGFiMiA9IGFzc2lnbiQyWzJdLCBsYWIzID0gYXNzaWduJDJbM10pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuICgoMS10KSooMS10KSooMS10KSAqIGxhYjBbaV0pICsgKDMgKiAoMS10KSAqICgxLXQpICogdCAqIGxhYjFbaV0pICsgKDMgKiAoMS10KSAqIHQgKiB0ICogbGFiMltpXSkgKyAodCp0KnQgKiBsYWIzW2ldKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA+PSA1KSB7XG4gICAgICAgICAgICAvLyBnZW5lcmFsIGNhc2UgKGRlZ3JlZSBuIGJlemllcilcbiAgICAgICAgICAgIHZhciBsYWJzLCByb3csIG47XG4gICAgICAgICAgICBsYWJzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSk7XG4gICAgICAgICAgICBuID0gY29sb3JzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICByb3cgPSBiaW5vbV9yb3cobik7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdSA9IDEgLSB0O1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gbGFicy5yZWR1Y2UoZnVuY3Rpb24gKHN1bSwgZWwsIGopIHsgcmV0dXJuIChzdW0gKyByb3dbal0gKiBNYXRoLnBvdyggdSwgKG4gLSBqKSApICogTWF0aC5wb3coIHQsIGogKSAqIGVsW2ldKTsgfSwgMCk7IH0pKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJDUobGFiLCAnbGFiJyk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJObyBwb2ludCBpbiBydW5uaW5nIGJlemllciB3aXRoIG9ubHkgb25lIGNvbG9yLlwiKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBJO1xuICAgIH07XG5cbiAgICB2YXIgYmV6aWVyXzEgPSBmdW5jdGlvbiAoY29sb3JzKSB7XG4gICAgICAgIHZhciBmID0gYmV6aWVyKGNvbG9ycyk7XG4gICAgICAgIGYuc2NhbGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2FsZSQxKGYpOyB9O1xuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgLypcbiAgICAgKiBpbnRlcnBvbGF0ZXMgYmV0d2VlbiBhIHNldCBvZiBjb2xvcnMgdXppbmcgYSBiZXppZXIgc3BsaW5lXG4gICAgICogYmxlbmQgbW9kZSBmb3JtdWxhcyB0YWtlbiBmcm9tIGh0dHA6Ly93d3cudmVudHVyZS13YXJlLmNvbS9rZXZpbi9jb2RpbmcvbGV0cy1sZWFybi1tYXRoLXBob3Rvc2hvcC1ibGVuZC1tb2Rlcy9cbiAgICAgKi9cblxuICAgIHZhciBjaHJvbWEkMyA9IGNocm9tYV8xO1xuXG4gICAgdmFyIGJsZW5kID0gZnVuY3Rpb24gKGJvdHRvbSwgdG9wLCBtb2RlKSB7XG4gICAgICAgIGlmICghYmxlbmRbbW9kZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBibGVuZCBtb2RlICcgKyBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYmxlbmRbbW9kZV0oYm90dG9tLCB0b3ApO1xuICAgIH07XG5cbiAgICB2YXIgYmxlbmRfZiA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBmdW5jdGlvbiAoYm90dG9tLHRvcCkge1xuICAgICAgICAgICAgdmFyIGMwID0gY2hyb21hJDModG9wKS5yZ2IoKTtcbiAgICAgICAgICAgIHZhciBjMSA9IGNocm9tYSQzKGJvdHRvbSkucmdiKCk7XG4gICAgICAgICAgICByZXR1cm4gY2hyb21hJDMucmdiKGYoYzAsIGMxKSk7XG4gICAgICAgIH07IH07XG5cbiAgICB2YXIgZWFjaCA9IGZ1bmN0aW9uIChmKSB7IHJldHVybiBmdW5jdGlvbiAoYzAsIGMxKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBvdXRbMF0gPSBmKGMwWzBdLCBjMVswXSk7XG4gICAgICAgICAgICBvdXRbMV0gPSBmKGMwWzFdLCBjMVsxXSk7XG4gICAgICAgICAgICBvdXRbMl0gPSBmKGMwWzJdLCBjMVsyXSk7XG4gICAgICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgICB9OyB9O1xuXG4gICAgdmFyIG5vcm1hbCA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhOyB9O1xuICAgIHZhciBtdWx0aXBseSA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgKiBiIC8gMjU1OyB9O1xuICAgIHZhciBkYXJrZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhID4gYiA/IGIgOiBhOyB9O1xuICAgIHZhciBsaWdodGVuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSA+IGIgPyBhIDogYjsgfTtcbiAgICB2YXIgc2NyZWVuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gMjU1ICogKDEgLSAoMS1hLzI1NSkgKiAoMS1iLzI1NSkpOyB9O1xuICAgIHZhciBvdmVybGF5ID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYiA8IDEyOCA/IDIgKiBhICogYiAvIDI1NSA6IDI1NSAqICgxIC0gMiAqICgxIC0gYSAvIDI1NSApICogKCAxIC0gYiAvIDI1NSApKTsgfTtcbiAgICB2YXIgYnVybiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIDI1NSAqICgxIC0gKDEgLSBiIC8gMjU1KSAvIChhLzI1NSkpOyB9O1xuICAgIHZhciBkb2RnZSA9IGZ1bmN0aW9uIChhLGIpIHtcbiAgICAgICAgaWYgKGEgPT09IDI1NSkgeyByZXR1cm4gMjU1OyB9XG4gICAgICAgIGEgPSAyNTUgKiAoYiAvIDI1NSkgLyAoMSAtIGEgLyAyNTUpO1xuICAgICAgICByZXR1cm4gYSA+IDI1NSA/IDI1NSA6IGFcbiAgICB9O1xuXG4gICAgLy8gIyBhZGQgPSAoYSxiKSAtPlxuICAgIC8vICMgICAgIGlmIChhICsgYiA+IDI1NSkgdGhlbiAyNTUgZWxzZSBhICsgYlxuXG4gICAgYmxlbmQubm9ybWFsID0gYmxlbmRfZihlYWNoKG5vcm1hbCkpO1xuICAgIGJsZW5kLm11bHRpcGx5ID0gYmxlbmRfZihlYWNoKG11bHRpcGx5KSk7XG4gICAgYmxlbmQuc2NyZWVuID0gYmxlbmRfZihlYWNoKHNjcmVlbikpO1xuICAgIGJsZW5kLm92ZXJsYXkgPSBibGVuZF9mKGVhY2gob3ZlcmxheSkpO1xuICAgIGJsZW5kLmRhcmtlbiA9IGJsZW5kX2YoZWFjaChkYXJrZW4pKTtcbiAgICBibGVuZC5saWdodGVuID0gYmxlbmRfZihlYWNoKGxpZ2h0ZW4pKTtcbiAgICBibGVuZC5kb2RnZSA9IGJsZW5kX2YoZWFjaChkb2RnZSkpO1xuICAgIGJsZW5kLmJ1cm4gPSBibGVuZF9mKGVhY2goYnVybikpO1xuICAgIC8vIGJsZW5kLmFkZCA9IGJsZW5kX2YoZWFjaChhZGQpKTtcblxuICAgIHZhciBibGVuZF8xID0gYmxlbmQ7XG5cbiAgICAvLyBjdWJlaGVsaXggaW50ZXJwb2xhdGlvblxuICAgIC8vIGJhc2VkIG9uIEQuQS4gR3JlZW4gXCJBIGNvbG91ciBzY2hlbWUgZm9yIHRoZSBkaXNwbGF5IG9mIGFzdHJvbm9taWNhbCBpbnRlbnNpdHkgaW1hZ2VzXCJcbiAgICAvLyBodHRwOi8vYXN0cm9uLXNvYy5pbi9idWxsZXRpbi8xMUp1bmUvMjg5MzkyMDExLnBkZlxuXG4gICAgdmFyIHR5cGUkMSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNsaXBfcmdiID0gdXRpbHMuY2xpcF9yZ2I7XG4gICAgdmFyIFRXT1BJID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIHBvdyQyID0gTWF0aC5wb3c7XG4gICAgdmFyIHNpbiQxID0gTWF0aC5zaW47XG4gICAgdmFyIGNvcyQxID0gTWF0aC5jb3M7XG4gICAgdmFyIGNocm9tYSQyID0gY2hyb21hXzE7XG5cbiAgICB2YXIgY3ViZWhlbGl4ID0gZnVuY3Rpb24oc3RhcnQsIHJvdGF0aW9ucywgaHVlLCBnYW1tYSwgbGlnaHRuZXNzKSB7XG4gICAgICAgIGlmICggc3RhcnQgPT09IHZvaWQgMCApIHN0YXJ0PTMwMDtcbiAgICAgICAgaWYgKCByb3RhdGlvbnMgPT09IHZvaWQgMCApIHJvdGF0aW9ucz0tMS41O1xuICAgICAgICBpZiAoIGh1ZSA9PT0gdm9pZCAwICkgaHVlPTE7XG4gICAgICAgIGlmICggZ2FtbWEgPT09IHZvaWQgMCApIGdhbW1hPTE7XG4gICAgICAgIGlmICggbGlnaHRuZXNzID09PSB2b2lkIDAgKSBsaWdodG5lc3M9WzAsMV07XG5cbiAgICAgICAgdmFyIGRoID0gMCwgZGw7XG4gICAgICAgIGlmICh0eXBlJDEobGlnaHRuZXNzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgZGwgPSBsaWdodG5lc3NbMV0gLSBsaWdodG5lc3NbMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgICAgICBsaWdodG5lc3MgPSBbbGlnaHRuZXNzLCBsaWdodG5lc3NdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGYgPSBmdW5jdGlvbihmcmFjdCkge1xuICAgICAgICAgICAgdmFyIGEgPSBUV09QSSAqICgoKHN0YXJ0KzEyMCkvMzYwKSArIChyb3RhdGlvbnMgKiBmcmFjdCkpO1xuICAgICAgICAgICAgdmFyIGwgPSBwb3ckMihsaWdodG5lc3NbMF0gKyAoZGwgKiBmcmFjdCksIGdhbW1hKTtcbiAgICAgICAgICAgIHZhciBoID0gZGggIT09IDAgPyBodWVbMF0gKyAoZnJhY3QgKiBkaCkgOiBodWU7XG4gICAgICAgICAgICB2YXIgYW1wID0gKGggKiBsICogKDEtbCkpIC8gMjtcbiAgICAgICAgICAgIHZhciBjb3NfYSA9IGNvcyQxKGEpO1xuICAgICAgICAgICAgdmFyIHNpbl9hID0gc2luJDEoYSk7XG4gICAgICAgICAgICB2YXIgciA9IGwgKyAoYW1wICogKCgtMC4xNDg2MSAqIGNvc19hKSArICgxLjc4Mjc3KiBzaW5fYSkpKTtcbiAgICAgICAgICAgIHZhciBnID0gbCArIChhbXAgKiAoKC0wLjI5MjI3ICogY29zX2EpIC0gKDAuOTA2NDkqIHNpbl9hKSkpO1xuICAgICAgICAgICAgdmFyIGIgPSBsICsgKGFtcCAqICgrMS45NzI5NCAqIGNvc19hKSk7XG4gICAgICAgICAgICByZXR1cm4gY2hyb21hJDIoY2xpcF9yZ2IoW3IqMjU1LGcqMjU1LGIqMjU1LDFdKSk7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5zdGFydCA9IGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgICAgIGlmICgocyA9PSBudWxsKSkgeyByZXR1cm4gc3RhcnQ7IH1cbiAgICAgICAgICAgIHN0YXJ0ID0gcztcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucm90YXRpb25zID0gZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgaWYgKChyID09IG51bGwpKSB7IHJldHVybiByb3RhdGlvbnM7IH1cbiAgICAgICAgICAgIHJvdGF0aW9ucyA9IHI7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmdhbW1hID0gZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgaWYgKChnID09IG51bGwpKSB7IHJldHVybiBnYW1tYTsgfVxuICAgICAgICAgICAgZ2FtbWEgPSBnO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5odWUgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICBpZiAoKGggPT0gbnVsbCkpIHsgcmV0dXJuIGh1ZTsgfVxuICAgICAgICAgICAgaHVlID0gaDtcbiAgICAgICAgICAgIGlmICh0eXBlJDEoaHVlKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlWzFdIC0gaHVlWzBdO1xuICAgICAgICAgICAgICAgIGlmIChkaCA9PT0gMCkgeyBodWUgPSBodWVbMV07IH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5saWdodG5lc3MgPSBmdW5jdGlvbihoKSB7XG4gICAgICAgICAgICBpZiAoKGggPT0gbnVsbCkpIHsgcmV0dXJuIGxpZ2h0bmVzczsgfVxuICAgICAgICAgICAgaWYgKHR5cGUkMShoKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIGxpZ2h0bmVzcyA9IGg7XG4gICAgICAgICAgICAgICAgZGwgPSBoWzFdIC0gaFswXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzID0gW2gsaF07XG4gICAgICAgICAgICAgICAgZGwgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNocm9tYSQyLnNjYWxlKGYpOyB9O1xuXG4gICAgICAgIGYuaHVlKGh1ZSk7XG5cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciQ0ID0gQ29sb3JfMTtcbiAgICB2YXIgZGlnaXRzID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gICAgdmFyIGZsb29yJDEgPSBNYXRoLmZsb29yO1xuICAgIHZhciByYW5kb20gPSBNYXRoLnJhbmRvbTtcblxuICAgIHZhciByYW5kb21fMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvZGUgPSAnIyc7XG4gICAgICAgIGZvciAodmFyIGk9MDsgaTw2OyBpKyspIHtcbiAgICAgICAgICAgIGNvZGUgKz0gZGlnaXRzLmNoYXJBdChmbG9vciQxKHJhbmRvbSgpICogMTYpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbG9yJDQoY29kZSwgJ2hleCcpO1xuICAgIH07XG5cbiAgICB2YXIgdHlwZSA9IHR5cGUkcDtcbiAgICB2YXIgbG9nID0gTWF0aC5sb2c7XG4gICAgdmFyIHBvdyQxID0gTWF0aC5wb3c7XG4gICAgdmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuXG4gICAgdmFyIGFuYWx5emUgPSBmdW5jdGlvbiAoZGF0YSwga2V5KSB7XG4gICAgICAgIGlmICgga2V5ID09PSB2b2lkIDAgKSBrZXk9bnVsbDtcblxuICAgICAgICB2YXIgciA9IHtcbiAgICAgICAgICAgIG1pbjogTnVtYmVyLk1BWF9WQUxVRSxcbiAgICAgICAgICAgIG1heDogTnVtYmVyLk1BWF9WQUxVRSotMSxcbiAgICAgICAgICAgIHN1bTogMCxcbiAgICAgICAgICAgIHZhbHVlczogW10sXG4gICAgICAgICAgICBjb3VudDogMFxuICAgICAgICB9O1xuICAgICAgICBpZiAodHlwZShkYXRhKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGRhdGEgPSBPYmplY3QudmFsdWVzKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAodmFsKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIHR5cGUodmFsKSA9PT0gJ29iamVjdCcpIHsgdmFsID0gdmFsW2tleV07IH1cbiAgICAgICAgICAgIGlmICh2YWwgIT09IHVuZGVmaW5lZCAmJiB2YWwgIT09IG51bGwgJiYgIWlzTmFOKHZhbCkpIHtcbiAgICAgICAgICAgICAgICByLnZhbHVlcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgci5zdW0gKz0gdmFsO1xuICAgICAgICAgICAgICAgIGlmICh2YWwgPCByLm1pbikgeyByLm1pbiA9IHZhbDsgfVxuICAgICAgICAgICAgICAgIGlmICh2YWwgPiByLm1heCkgeyByLm1heCA9IHZhbDsgfVxuICAgICAgICAgICAgICAgIHIuY291bnQgKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgci5kb21haW4gPSBbci5taW4sIHIubWF4XTtcblxuICAgICAgICByLmxpbWl0cyA9IGZ1bmN0aW9uIChtb2RlLCBudW0pIHsgcmV0dXJuIGxpbWl0cyhyLCBtb2RlLCBudW0pOyB9O1xuXG4gICAgICAgIHJldHVybiByO1xuICAgIH07XG5cblxuICAgIHZhciBsaW1pdHMgPSBmdW5jdGlvbiAoZGF0YSwgbW9kZSwgbnVtKSB7XG4gICAgICAgIGlmICggbW9kZSA9PT0gdm9pZCAwICkgbW9kZT0nZXF1YWwnO1xuICAgICAgICBpZiAoIG51bSA9PT0gdm9pZCAwICkgbnVtPTc7XG5cbiAgICAgICAgaWYgKHR5cGUoZGF0YSkgPT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgZGF0YSA9IGFuYWx5emUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1pbiA9IGRhdGEubWluO1xuICAgICAgICB2YXIgbWF4ID0gZGF0YS5tYXg7XG4gICAgICAgIHZhciB2YWx1ZXMgPSBkYXRhLnZhbHVlcy5zb3J0KGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEtYjsgfSk7XG5cbiAgICAgICAgaWYgKG51bSA9PT0gMSkgeyByZXR1cm4gW21pbixtYXhdOyB9XG5cbiAgICAgICAgdmFyIGxpbWl0cyA9IFtdO1xuXG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnYycpIHsgLy8gY29udGludW91c1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2UnKSB7IC8vIGVxdWFsIGludGVydmFsXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaT0xOyBpPG51bTsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKygoaS9udW0pKihtYXgtbWluKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdsJykgeyAvLyBsb2cgc2NhbGVcbiAgICAgICAgICAgIGlmIChtaW4gPD0gMCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTG9nYXJpdGhtaWMgc2NhbGVzIGFyZSBvbmx5IHBvc3NpYmxlIGZvciB2YWx1ZXMgPiAwJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWluX2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1pbik7XG4gICAgICAgICAgICB2YXIgbWF4X2xvZyA9IE1hdGguTE9HMTBFICogbG9nKG1heCk7XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxPTE7IGkkMTxudW07IGkkMSsrKSB7XG4gICAgICAgICAgICAgICAgbGltaXRzLnB1c2gocG93JDEoMTAsIG1pbl9sb2cgKyAoKGkkMS9udW0pICogKG1heF9sb2cgLSBtaW5fbG9nKSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG4gICAgICAgIH1cblxuICAgICAgICBlbHNlIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAncScpIHsgLy8gcXVhbnRpbGUgc2NhbGVcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDI9MTsgaSQyPG51bTsgaSQyKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcCA9ICgodmFsdWVzLmxlbmd0aC0xKSAqIGkkMikvbnVtO1xuICAgICAgICAgICAgICAgIHZhciBwYiA9IGZsb29yKHApO1xuICAgICAgICAgICAgICAgIGlmIChwYiA9PT0gcCkge1xuICAgICAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2YWx1ZXNbcGJdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgeyAvLyBwID4gcGJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByID0gcCAtIHBiO1xuICAgICAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCgodmFsdWVzW3BiXSooMS1wcikpICsgKHZhbHVlc1twYisxXSpwcikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1heCk7XG5cbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdrJykgeyAvLyBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvblxuICAgICAgICAgICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2ZpZ3VlL3NvdXJjZS9icm93c2UvdHJ1bmsvZmlndWUuanMjMzM2XG4gICAgICAgICAgICBzaW1wbGlmaWVkIGZvciAxLWQgaW5wdXQgdmFsdWVzXG4gICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGNsdXN0ZXI7XG4gICAgICAgICAgICB2YXIgbiA9IHZhbHVlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgYXNzaWdubWVudHMgPSBuZXcgQXJyYXkobik7XG4gICAgICAgICAgICB2YXIgY2x1c3RlclNpemVzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICB2YXIgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBuYl9pdGVycyA9IDA7XG4gICAgICAgICAgICB2YXIgY2VudHJvaWRzID0gbnVsbDtcblxuICAgICAgICAgICAgLy8gZ2V0IHNlZWQgdmFsdWVzXG4gICAgICAgICAgICBjZW50cm9pZHMgPSBbXTtcbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDM9MTsgaSQzPG51bTsgaSQzKyspIHtcbiAgICAgICAgICAgICAgICBjZW50cm9pZHMucHVzaChtaW4gKyAoKGkkMy9udW0pICogKG1heC1taW4pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjZW50cm9pZHMucHVzaChtYXgpO1xuXG4gICAgICAgICAgICB3aGlsZSAocmVwZWF0KSB7XG4gICAgICAgICAgICAgICAgLy8gYXNzaWdubWVudCBzdGVwXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaj0wOyBqPG51bTsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tqXSA9IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkND0wOyBpJDQ8bjsgaSQ0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2kkNF07XG4gICAgICAgICAgICAgICAgICAgIHZhciBtaW5kaXN0ID0gTnVtYmVyLk1BWF9WQUxVRTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJlc3QgPSAodm9pZCAwKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiQxPTA7IGokMTxudW07IGokMSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGlzdCA9IGFicyQxKGNlbnRyb2lkc1tqJDFdLXZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXN0IDwgbWluZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmRpc3QgPSBkaXN0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3QgPSBqJDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbHVzdGVyU2l6ZXNbYmVzdF0rKztcbiAgICAgICAgICAgICAgICAgICAgICAgIGFzc2lnbm1lbnRzW2kkNF0gPSBiZXN0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gdXBkYXRlIGNlbnRyb2lkcyBzdGVwXG4gICAgICAgICAgICAgICAgdmFyIG5ld0NlbnRyb2lkcyA9IG5ldyBBcnJheShudW0pO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGokMj0wOyBqJDI8bnVtOyBqJDIrKykge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbaiQyXSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkkNT0wOyBpJDU8bjsgaSQ1KyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdDZW50cm9pZHNbY2x1c3Rlcl0gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9IHZhbHVlc1tpJDVdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdICs9IHZhbHVlc1tpJDVdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZvciAodmFyIGokMz0wOyBqJDM8bnVtOyBqJDMrKykge1xuICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbaiQzXSAqPSAxL2NsdXN0ZXJTaXplc1tqJDNdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIGNvbnZlcmdlbmNlXG4gICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQ0PTA7IGokNDxudW07IGokNCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdDZW50cm9pZHNbaiQ0XSAhPT0gY2VudHJvaWRzW2okNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNlbnRyb2lkcyA9IG5ld0NlbnRyb2lkcztcbiAgICAgICAgICAgICAgICBuYl9pdGVycysrO1xuXG4gICAgICAgICAgICAgICAgaWYgKG5iX2l0ZXJzID4gMjAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcGVhdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gZmluaXNoZWQgay1tZWFucyBjbHVzdGVyaW5nXG4gICAgICAgICAgICAvLyB0aGUgbmV4dCBwYXJ0IGlzIGJvcnJvd2VkIGZyb20gZ2FicmllbGZsb3IuaXRcbiAgICAgICAgICAgIHZhciBrQ2x1c3RlcnMgPSB7fTtcbiAgICAgICAgICAgIGZvciAodmFyIGokNT0wOyBqJDU8bnVtOyBqJDUrKykge1xuICAgICAgICAgICAgICAgIGtDbHVzdGVyc1tqJDVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBpJDY9MDsgaSQ2PG47IGkkNisrKSB7XG4gICAgICAgICAgICAgICAgY2x1c3RlciA9IGFzc2lnbm1lbnRzW2kkNl07XG4gICAgICAgICAgICAgICAga0NsdXN0ZXJzW2NsdXN0ZXJdLnB1c2godmFsdWVzW2kkNl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRtcEtNZWFuc0JyZWFrcyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiQ2PTA7IGokNjxudW07IGokNisrKSB7XG4gICAgICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1bMF0pO1xuICAgICAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcy5wdXNoKGtDbHVzdGVyc1tqJDZdW2tDbHVzdGVyc1tqJDZdLmxlbmd0aC0xXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MgPSB0bXBLTWVhbnNCcmVha3Muc29ydChmdW5jdGlvbiAoYSxiKXsgcmV0dXJuIGEtYjsgfSk7XG4gICAgICAgICAgICBsaW1pdHMucHVzaCh0bXBLTWVhbnNCcmVha3NbMF0pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQ3PTE7IGkkNyA8IHRtcEtNZWFuc0JyZWFrcy5sZW5ndGg7IGkkNys9IDIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdiA9IHRtcEtNZWFuc0JyZWFrc1tpJDddO1xuICAgICAgICAgICAgICAgIGlmICghaXNOYU4odikgJiYgKGxpbWl0cy5pbmRleE9mKHYpID09PSAtMSkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGltaXRzLnB1c2godik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsaW1pdHM7XG4gICAgfTtcblxuICAgIHZhciBhbmFseXplXzEgPSB7YW5hbHl6ZTogYW5hbHl6ZSwgbGltaXRzOiBsaW1pdHN9O1xuXG4gICAgdmFyIENvbG9yJDMgPSBDb2xvcl8xO1xuXG5cbiAgICB2YXIgY29udHJhc3QgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAvLyBXQ0FHIGNvbnRyYXN0IHJhdGlvXG4gICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDA4L1JFQy1XQ0FHMjAtMjAwODEyMTEvI2NvbnRyYXN0LXJhdGlvZGVmXG4gICAgICAgIGEgPSBuZXcgQ29sb3IkMyhhKTtcbiAgICAgICAgYiA9IG5ldyBDb2xvciQzKGIpO1xuICAgICAgICB2YXIgbDEgPSBhLmx1bWluYW5jZSgpO1xuICAgICAgICB2YXIgbDIgPSBiLmx1bWluYW5jZSgpO1xuICAgICAgICByZXR1cm4gbDEgPiBsMiA/IChsMSArIDAuMDUpIC8gKGwyICsgMC4wNSkgOiAobDIgKyAwLjA1KSAvIChsMSArIDAuMDUpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkMiA9IENvbG9yXzE7XG4gICAgdmFyIHNxcnQgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIHBvdyA9IE1hdGgucG93O1xuICAgIHZhciBtaW4gPSBNYXRoLm1pbjtcbiAgICB2YXIgbWF4ID0gTWF0aC5tYXg7XG4gICAgdmFyIGF0YW4yID0gTWF0aC5hdGFuMjtcbiAgICB2YXIgYWJzID0gTWF0aC5hYnM7XG4gICAgdmFyIGNvcyA9IE1hdGguY29zO1xuICAgIHZhciBzaW4gPSBNYXRoLnNpbjtcbiAgICB2YXIgZXhwID0gTWF0aC5leHA7XG4gICAgdmFyIFBJID0gTWF0aC5QSTtcblxuICAgIHZhciBkZWx0YUUgPSBmdW5jdGlvbihhLCBiLCBLbCwgS2MsIEtoKSB7XG4gICAgICAgIGlmICggS2wgPT09IHZvaWQgMCApIEtsPTE7XG4gICAgICAgIGlmICggS2MgPT09IHZvaWQgMCApIEtjPTE7XG4gICAgICAgIGlmICggS2ggPT09IHZvaWQgMCApIEtoPTE7XG5cbiAgICAgICAgLy8gRGVsdGEgRSAoQ0lFIDIwMDApXG4gICAgICAgIC8vIHNlZSBodHRwOi8vd3d3LmJydWNlbGluZGJsb29tLmNvbS9pbmRleC5odG1sP0Vxbl9EZWx0YUVfQ0lFMjAwMC5odG1sXG4gICAgICAgIHZhciByYWQyZGVnID0gZnVuY3Rpb24ocmFkKSB7XG4gICAgICAgICAgICByZXR1cm4gMzYwICogcmFkIC8gKDIgKiBQSSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBkZWcycmFkID0gZnVuY3Rpb24oZGVnKSB7XG4gICAgICAgICAgICByZXR1cm4gKDIgKiBQSSAqIGRlZykgLyAzNjA7XG4gICAgICAgIH07XG4gICAgICAgIGEgPSBuZXcgQ29sb3IkMihhKTtcbiAgICAgICAgYiA9IG5ldyBDb2xvciQyKGIpO1xuICAgICAgICB2YXIgcmVmID0gQXJyYXkuZnJvbShhLmxhYigpKTtcbiAgICAgICAgdmFyIEwxID0gcmVmWzBdO1xuICAgICAgICB2YXIgYTEgPSByZWZbMV07XG4gICAgICAgIHZhciBiMSA9IHJlZlsyXTtcbiAgICAgICAgdmFyIHJlZiQxID0gQXJyYXkuZnJvbShiLmxhYigpKTtcbiAgICAgICAgdmFyIEwyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBhMiA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYjIgPSByZWYkMVsyXTtcbiAgICAgICAgdmFyIGF2Z0wgPSAoTDEgKyBMMikvMjtcbiAgICAgICAgdmFyIEMxID0gc3FydChwb3coYTEsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgICAgIHZhciBDMiA9IHNxcnQocG93KGEyLCAyKSArIHBvdyhiMiwgMikpO1xuICAgICAgICB2YXIgYXZnQyA9IChDMSArIEMyKS8yO1xuICAgICAgICB2YXIgRyA9IDAuNSooMS1zcXJ0KHBvdyhhdmdDLCA3KS8ocG93KGF2Z0MsIDcpICsgcG93KDI1LCA3KSkpKTtcbiAgICAgICAgdmFyIGExcCA9IGExKigxK0cpO1xuICAgICAgICB2YXIgYTJwID0gYTIqKDErRyk7XG4gICAgICAgIHZhciBDMXAgPSBzcXJ0KHBvdyhhMXAsIDIpICsgcG93KGIxLCAyKSk7XG4gICAgICAgIHZhciBDMnAgPSBzcXJ0KHBvdyhhMnAsIDIpICsgcG93KGIyLCAyKSk7XG4gICAgICAgIHZhciBhdmdDcCA9IChDMXAgKyBDMnApLzI7XG4gICAgICAgIHZhciBhcmN0YW4xID0gcmFkMmRlZyhhdGFuMihiMSwgYTFwKSk7XG4gICAgICAgIHZhciBhcmN0YW4yID0gcmFkMmRlZyhhdGFuMihiMiwgYTJwKSk7XG4gICAgICAgIHZhciBoMXAgPSBhcmN0YW4xID49IDAgPyBhcmN0YW4xIDogYXJjdGFuMSArIDM2MDtcbiAgICAgICAgdmFyIGgycCA9IGFyY3RhbjIgPj0gMCA/IGFyY3RhbjIgOiBhcmN0YW4yICsgMzYwO1xuICAgICAgICB2YXIgYXZnSHAgPSBhYnMoaDFwIC0gaDJwKSA+IDE4MCA/IChoMXAgKyBoMnAgKyAzNjApLzIgOiAoaDFwICsgaDJwKS8yO1xuICAgICAgICB2YXIgVCA9IDEgLSAwLjE3KmNvcyhkZWcycmFkKGF2Z0hwIC0gMzApKSArIDAuMjQqY29zKGRlZzJyYWQoMiphdmdIcCkpICsgMC4zMipjb3MoZGVnMnJhZCgzKmF2Z0hwICsgNikpIC0gMC4yKmNvcyhkZWcycmFkKDQqYXZnSHAgLSA2MykpO1xuICAgICAgICB2YXIgZGVsdGFIcCA9IGgycCAtIGgxcDtcbiAgICAgICAgZGVsdGFIcCA9IGFicyhkZWx0YUhwKSA8PSAxODAgPyBkZWx0YUhwIDogaDJwIDw9IGgxcCA/IGRlbHRhSHAgKyAzNjAgOiBkZWx0YUhwIC0gMzYwO1xuICAgICAgICBkZWx0YUhwID0gMipzcXJ0KEMxcCpDMnApKnNpbihkZWcycmFkKGRlbHRhSHApLzIpO1xuICAgICAgICB2YXIgZGVsdGFMID0gTDIgLSBMMTtcbiAgICAgICAgdmFyIGRlbHRhQ3AgPSBDMnAgLSBDMXA7ICAgIFxuICAgICAgICB2YXIgc2wgPSAxICsgKDAuMDE1KnBvdyhhdmdMIC0gNTAsIDIpKS9zcXJ0KDIwICsgcG93KGF2Z0wgLSA1MCwgMikpO1xuICAgICAgICB2YXIgc2MgPSAxICsgMC4wNDUqYXZnQ3A7XG4gICAgICAgIHZhciBzaCA9IDEgKyAwLjAxNSphdmdDcCpUO1xuICAgICAgICB2YXIgZGVsdGFUaGV0YSA9IDMwKmV4cCgtcG93KChhdmdIcCAtIDI3NSkvMjUsIDIpKTtcbiAgICAgICAgdmFyIFJjID0gMipzcXJ0KHBvdyhhdmdDcCwgNykvKHBvdyhhdmdDcCwgNykgKyBwb3coMjUsIDcpKSk7XG4gICAgICAgIHZhciBSdCA9IC1SYypzaW4oMipkZWcycmFkKGRlbHRhVGhldGEpKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHNxcnQocG93KGRlbHRhTC8oS2wqc2wpLCAyKSArIHBvdyhkZWx0YUNwLyhLYypzYyksIDIpICsgcG93KGRlbHRhSHAvKEtoKnNoKSwgMikgKyBSdCooZGVsdGFDcC8oS2Mqc2MpKSooZGVsdGFIcC8oS2gqc2gpKSk7XG4gICAgICAgIHJldHVybiBtYXgoMCwgbWluKDEwMCwgcmVzdWx0KSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciQxID0gQ29sb3JfMTtcblxuICAgIC8vIHNpbXBsZSBFdWNsaWRlYW4gZGlzdGFuY2VcbiAgICB2YXIgZGlzdGFuY2UgPSBmdW5jdGlvbihhLCBiLCBtb2RlKSB7XG4gICAgICAgIGlmICggbW9kZSA9PT0gdm9pZCAwICkgbW9kZT0nbGFiJztcblxuICAgICAgICAvLyBEZWx0YSBFIChDSUUgMTk3NilcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXF1YXRpb25zLmh0bWxcbiAgICAgICAgYSA9IG5ldyBDb2xvciQxKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDEoYik7XG4gICAgICAgIHZhciBsMSA9IGEuZ2V0KG1vZGUpO1xuICAgICAgICB2YXIgbDIgPSBiLmdldChtb2RlKTtcbiAgICAgICAgdmFyIHN1bV9zcSA9IDA7XG4gICAgICAgIGZvciAodmFyIGkgaW4gbDEpIHtcbiAgICAgICAgICAgIHZhciBkID0gKGwxW2ldIHx8IDApIC0gKGwyW2ldIHx8IDApO1xuICAgICAgICAgICAgc3VtX3NxICs9IGQqZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTWF0aC5zcXJ0KHN1bV9zcSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciA9IENvbG9yXzE7XG5cbiAgICB2YXIgdmFsaWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MpICkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBzb21lIHByZS1kZWZpbmVkIGNvbG9yIHNjYWxlczpcbiAgICB2YXIgY2hyb21hJDEgPSBjaHJvbWFfMTtcblxuICAgIHZhciBzY2FsZSA9IHNjYWxlJDI7XG5cbiAgICB2YXIgc2NhbGVzID0ge1xuICAgIFx0Y29vbDogZnVuY3Rpb24gY29vbCgpIHsgcmV0dXJuIHNjYWxlKFtjaHJvbWEkMS5oc2woMTgwLDEsLjkpLCBjaHJvbWEkMS5oc2woMjUwLC43LC40KV0pIH0sXG4gICAgXHRob3Q6IGZ1bmN0aW9uIGhvdCgpIHsgcmV0dXJuIHNjYWxlKFsnIzAwMCcsJyNmMDAnLCcjZmYwJywnI2ZmZiddKS5tb2RlKCdyZ2InKSB9XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAgICBDb2xvckJyZXdlciBjb2xvcnMgZm9yIGNocm9tYS5qc1xuXG4gICAgICAgIENvcHlyaWdodCAoYykgMjAwMiBDeW50aGlhIEJyZXdlciwgTWFyayBIYXJyb3dlciwgYW5kIFRoZVxuICAgICAgICBQZW5uc3lsdmFuaWEgU3RhdGUgVW5pdmVyc2l0eS5cblxuICAgICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgICAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgICAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkXG4gICAgICAgIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SXG4gICAgICAgIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlXG4gICAgICAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gICAgKi9cblxuICAgIHZhciBjb2xvcmJyZXdlciA9IHtcbiAgICAgICAgLy8gc2VxdWVudGlhbFxuICAgICAgICBPclJkOiBbJyNmZmY3ZWMnLCAnI2ZlZThjOCcsICcjZmRkNDllJywgJyNmZGJiODQnLCAnI2ZjOGQ1OScsICcjZWY2NTQ4JywgJyNkNzMwMWYnLCAnI2IzMDAwMCcsICcjN2YwMDAwJ10sXG4gICAgICAgIFB1QnU6IFsnI2ZmZjdmYicsICcjZWNlN2YyJywgJyNkMGQxZTYnLCAnI2E2YmRkYicsICcjNzRhOWNmJywgJyMzNjkwYzAnLCAnIzA1NzBiMCcsICcjMDQ1YThkJywgJyMwMjM4NTgnXSxcbiAgICAgICAgQnVQdTogWycjZjdmY2ZkJywgJyNlMGVjZjQnLCAnI2JmZDNlNicsICcjOWViY2RhJywgJyM4Yzk2YzYnLCAnIzhjNmJiMScsICcjODg0MTlkJywgJyM4MTBmN2MnLCAnIzRkMDA0YiddLFxuICAgICAgICBPcmFuZ2VzOiBbJyNmZmY1ZWInLCAnI2ZlZTZjZScsICcjZmRkMGEyJywgJyNmZGFlNmInLCAnI2ZkOGQzYycsICcjZjE2OTEzJywgJyNkOTQ4MDEnLCAnI2E2MzYwMycsICcjN2YyNzA0J10sXG4gICAgICAgIEJ1R246IFsnI2Y3ZmNmZCcsICcjZTVmNWY5JywgJyNjY2VjZTYnLCAnIzk5ZDhjOScsICcjNjZjMmE0JywgJyM0MWFlNzYnLCAnIzIzOGI0NScsICcjMDA2ZDJjJywgJyMwMDQ0MWInXSxcbiAgICAgICAgWWxPckJyOiBbJyNmZmZmZTUnLCAnI2ZmZjdiYycsICcjZmVlMzkxJywgJyNmZWM0NGYnLCAnI2ZlOTkyOScsICcjZWM3MDE0JywgJyNjYzRjMDInLCAnIzk5MzQwNCcsICcjNjYyNTA2J10sXG4gICAgICAgIFlsR246IFsnI2ZmZmZlNScsICcjZjdmY2I5JywgJyNkOWYwYTMnLCAnI2FkZGQ4ZScsICcjNzhjNjc5JywgJyM0MWFiNWQnLCAnIzIzODQ0MycsICcjMDA2ODM3JywgJyMwMDQ1MjknXSxcbiAgICAgICAgUmVkczogWycjZmZmNWYwJywgJyNmZWUwZDInLCAnI2ZjYmJhMScsICcjZmM5MjcyJywgJyNmYjZhNGEnLCAnI2VmM2IyYycsICcjY2IxODFkJywgJyNhNTBmMTUnLCAnIzY3MDAwZCddLFxuICAgICAgICBSZFB1OiBbJyNmZmY3ZjMnLCAnI2ZkZTBkZCcsICcjZmNjNWMwJywgJyNmYTlmYjUnLCAnI2Y3NjhhMScsICcjZGQzNDk3JywgJyNhZTAxN2UnLCAnIzdhMDE3NycsICcjNDkwMDZhJ10sXG4gICAgICAgIEdyZWVuczogWycjZjdmY2Y1JywgJyNlNWY1ZTAnLCAnI2M3ZTljMCcsICcjYTFkOTliJywgJyM3NGM0NzYnLCAnIzQxYWI1ZCcsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgICAgICBZbEduQnU6IFsnI2ZmZmZkOScsICcjZWRmOGIxJywgJyNjN2U5YjQnLCAnIzdmY2RiYicsICcjNDFiNmM0JywgJyMxZDkxYzAnLCAnIzIyNWVhOCcsICcjMjUzNDk0JywgJyMwODFkNTgnXSxcbiAgICAgICAgUHVycGxlczogWycjZmNmYmZkJywgJyNlZmVkZjUnLCAnI2RhZGFlYicsICcjYmNiZGRjJywgJyM5ZTlhYzgnLCAnIzgwN2RiYScsICcjNmE1MWEzJywgJyM1NDI3OGYnLCAnIzNmMDA3ZCddLFxuICAgICAgICBHbkJ1OiBbJyNmN2ZjZjAnLCAnI2UwZjNkYicsICcjY2NlYmM1JywgJyNhOGRkYjUnLCAnIzdiY2NjNCcsICcjNGViM2QzJywgJyMyYjhjYmUnLCAnIzA4NjhhYycsICcjMDg0MDgxJ10sXG4gICAgICAgIEdyZXlzOiBbJyNmZmZmZmYnLCAnI2YwZjBmMCcsICcjZDlkOWQ5JywgJyNiZGJkYmQnLCAnIzk2OTY5NicsICcjNzM3MzczJywgJyM1MjUyNTInLCAnIzI1MjUyNScsICcjMDAwMDAwJ10sXG4gICAgICAgIFlsT3JSZDogWycjZmZmZmNjJywgJyNmZmVkYTAnLCAnI2ZlZDk3NicsICcjZmViMjRjJywgJyNmZDhkM2MnLCAnI2ZjNGUyYScsICcjZTMxYTFjJywgJyNiZDAwMjYnLCAnIzgwMDAyNiddLFxuICAgICAgICBQdVJkOiBbJyNmN2Y0ZjknLCAnI2U3ZTFlZicsICcjZDRiOWRhJywgJyNjOTk0YzcnLCAnI2RmNjViMCcsICcjZTcyOThhJywgJyNjZTEyNTYnLCAnIzk4MDA0MycsICcjNjcwMDFmJ10sXG4gICAgICAgIEJsdWVzOiBbJyNmN2ZiZmYnLCAnI2RlZWJmNycsICcjYzZkYmVmJywgJyM5ZWNhZTEnLCAnIzZiYWVkNicsICcjNDI5MmM2JywgJyMyMTcxYjUnLCAnIzA4NTE5YycsICcjMDgzMDZiJ10sXG4gICAgICAgIFB1QnVHbjogWycjZmZmN2ZiJywgJyNlY2UyZjAnLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM2N2E5Y2YnLCAnIzM2OTBjMCcsICcjMDI4MThhJywgJyMwMTZjNTknLCAnIzAxNDYzNiddLFxuICAgICAgICBWaXJpZGlzOiBbJyM0NDAxNTQnLCAnIzQ4Mjc3NycsICcjM2Y0YThhJywgJyMzMTY3OGUnLCAnIzI2ODM4ZicsICcjMWY5ZDhhJywgJyM2Y2NlNWEnLCAnI2I2ZGUyYicsICcjZmVlODI1J10sXG5cbiAgICAgICAgLy8gZGl2ZXJnaW5nXG5cbiAgICAgICAgU3BlY3RyYWw6IFsnIzllMDE0MicsICcjZDUzZTRmJywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDhiJywgJyNmZmZmYmYnLCAnI2U2ZjU5OCcsICcjYWJkZGE0JywgJyM2NmMyYTUnLCAnIzMyODhiZCcsICcjNWU0ZmEyJ10sXG4gICAgICAgIFJkWWxHbjogWycjYTUwMDI2JywgJyNkNzMwMjcnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZDllZjhiJywgJyNhNmQ5NmEnLCAnIzY2YmQ2MycsICcjMWE5ODUwJywgJyMwMDY4MzcnXSxcbiAgICAgICAgUmRCdTogWycjNjcwMDFmJywgJyNiMjE4MmInLCAnI2Q2NjA0ZCcsICcjZjRhNTgyJywgJyNmZGRiYzcnLCAnI2Y3ZjdmNycsICcjZDFlNWYwJywgJyM5MmM1ZGUnLCAnIzQzOTNjMycsICcjMjE2NmFjJywgJyMwNTMwNjEnXSxcbiAgICAgICAgUGlZRzogWycjOGUwMTUyJywgJyNjNTFiN2QnLCAnI2RlNzdhZScsICcjZjFiNmRhJywgJyNmZGUwZWYnLCAnI2Y3ZjdmNycsICcjZTZmNWQwJywgJyNiOGUxODYnLCAnIzdmYmM0MScsICcjNGQ5MjIxJywgJyMyNzY0MTknXSxcbiAgICAgICAgUFJHbjogWycjNDAwMDRiJywgJyM3NjJhODMnLCAnIzk5NzBhYicsICcjYzJhNWNmJywgJyNlN2Q0ZTgnLCAnI2Y3ZjdmNycsICcjZDlmMGQzJywgJyNhNmRiYTAnLCAnIzVhYWU2MScsICcjMWI3ODM3JywgJyMwMDQ0MWInXSxcbiAgICAgICAgUmRZbEJ1OiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA5MCcsICcjZmZmZmJmJywgJyNlMGYzZjgnLCAnI2FiZDllOScsICcjNzRhZGQxJywgJyM0NTc1YjQnLCAnIzMxMzY5NSddLFxuICAgICAgICBCckJHOiBbJyM1NDMwMDUnLCAnIzhjNTEwYScsICcjYmY4MTJkJywgJyNkZmMyN2QnLCAnI2Y2ZThjMycsICcjZjVmNWY1JywgJyNjN2VhZTUnLCAnIzgwY2RjMScsICcjMzU5NzhmJywgJyMwMTY2NWUnLCAnIzAwM2MzMCddLFxuICAgICAgICBSZEd5OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZmZmZmZmJywgJyNlMGUwZTAnLCAnI2JhYmFiYScsICcjODc4Nzg3JywgJyM0ZDRkNGQnLCAnIzFhMWExYSddLFxuICAgICAgICBQdU9yOiBbJyM3ZjNiMDgnLCAnI2IzNTgwNicsICcjZTA4MjE0JywgJyNmZGI4NjMnLCAnI2ZlZTBiNicsICcjZjdmN2Y3JywgJyNkOGRhZWInLCAnI2IyYWJkMicsICcjODA3M2FjJywgJyM1NDI3ODgnLCAnIzJkMDA0YiddLFxuXG4gICAgICAgIC8vIHF1YWxpdGF0aXZlXG5cbiAgICAgICAgU2V0MjogWycjNjZjMmE1JywgJyNmYzhkNjInLCAnIzhkYTBjYicsICcjZTc4YWMzJywgJyNhNmQ4NTQnLCAnI2ZmZDkyZicsICcjZTVjNDk0JywgJyNiM2IzYjMnXSxcbiAgICAgICAgQWNjZW50OiBbJyM3ZmM5N2YnLCAnI2JlYWVkNCcsICcjZmRjMDg2JywgJyNmZmZmOTknLCAnIzM4NmNiMCcsICcjZjAwMjdmJywgJyNiZjViMTcnLCAnIzY2NjY2NiddLFxuICAgICAgICBTZXQxOiBbJyNlNDFhMWMnLCAnIzM3N2ViOCcsICcjNGRhZjRhJywgJyM5ODRlYTMnLCAnI2ZmN2YwMCcsICcjZmZmZjMzJywgJyNhNjU2MjgnLCAnI2Y3ODFiZicsICcjOTk5OTk5J10sXG4gICAgICAgIFNldDM6IFsnIzhkZDNjNycsICcjZmZmZmIzJywgJyNiZWJhZGEnLCAnI2ZiODA3MicsICcjODBiMWQzJywgJyNmZGI0NjInLCAnI2IzZGU2OScsICcjZmNjZGU1JywgJyNkOWQ5ZDknLCAnI2JjODBiZCcsICcjY2NlYmM1JywgJyNmZmVkNmYnXSxcbiAgICAgICAgRGFyazI6IFsnIzFiOWU3NycsICcjZDk1ZjAyJywgJyM3NTcwYjMnLCAnI2U3Mjk4YScsICcjNjZhNjFlJywgJyNlNmFiMDInLCAnI2E2NzYxZCcsICcjNjY2NjY2J10sXG4gICAgICAgIFBhaXJlZDogWycjYTZjZWUzJywgJyMxZjc4YjQnLCAnI2IyZGY4YScsICcjMzNhMDJjJywgJyNmYjlhOTknLCAnI2UzMWExYycsICcjZmRiZjZmJywgJyNmZjdmMDAnLCAnI2NhYjJkNicsICcjNmEzZDlhJywgJyNmZmZmOTknLCAnI2IxNTkyOCddLFxuICAgICAgICBQYXN0ZWwyOiBbJyNiM2UyY2QnLCAnI2ZkY2RhYycsICcjY2JkNWU4JywgJyNmNGNhZTQnLCAnI2U2ZjVjOScsICcjZmZmMmFlJywgJyNmMWUyY2MnLCAnI2NjY2NjYyddLFxuICAgICAgICBQYXN0ZWwxOiBbJyNmYmI0YWUnLCAnI2IzY2RlMycsICcjY2NlYmM1JywgJyNkZWNiZTQnLCAnI2ZlZDlhNicsICcjZmZmZmNjJywgJyNlNWQ4YmQnLCAnI2ZkZGFlYycsICcjZjJmMmYyJ10sXG4gICAgfTtcblxuICAgIC8vIGFkZCBsb3dlcmNhc2UgYWxpYXNlcyBmb3IgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaGVzXG4gICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBPYmplY3Qua2V5cyhjb2xvcmJyZXdlcik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHZhciBrZXkgPSBsaXN0W2ldO1xuXG4gICAgICAgIGNvbG9yYnJld2VyW2tleS50b0xvd2VyQ2FzZSgpXSA9IGNvbG9yYnJld2VyW2tleV07XG4gICAgfVxuXG4gICAgdmFyIGNvbG9yYnJld2VyXzEgPSBjb2xvcmJyZXdlcjtcblxuICAgIHZhciBjaHJvbWEgPSBjaHJvbWFfMTtcblxuICAgIC8vIGZlZWwgZnJlZSB0byBjb21tZW50IG91dCBhbnl0aGluZyB0byByb2xsdXBcbiAgICAvLyBhIHNtYWxsZXIgY2hyb21hLmpzIGJ1aWx0XG5cbiAgICAvLyBpbyAtLT4gY29udmVydCBjb2xvcnNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgLy8gb3BlcmF0b3JzIC0tPiBtb2RpZnkgZXhpc3RpbmcgQ29sb3JzXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBpbnRlcnBvbGF0b3JzXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgLy8gZ2VuZXJhdG9ycyAtLSA+IGNyZWF0ZSBuZXcgY29sb3JzXG4gICAgY2hyb21hLmF2ZXJhZ2UgPSBhdmVyYWdlO1xuICAgIGNocm9tYS5iZXppZXIgPSBiZXppZXJfMTtcbiAgICBjaHJvbWEuYmxlbmQgPSBibGVuZF8xO1xuICAgIGNocm9tYS5jdWJlaGVsaXggPSBjdWJlaGVsaXg7XG4gICAgY2hyb21hLm1peCA9IGNocm9tYS5pbnRlcnBvbGF0ZSA9IG1peCQxO1xuICAgIGNocm9tYS5yYW5kb20gPSByYW5kb21fMTtcbiAgICBjaHJvbWEuc2NhbGUgPSBzY2FsZSQyO1xuXG4gICAgLy8gb3RoZXIgdXRpbGl0eSBtZXRob2RzXG4gICAgY2hyb21hLmFuYWx5emUgPSBhbmFseXplXzEuYW5hbHl6ZTtcbiAgICBjaHJvbWEuY29udHJhc3QgPSBjb250cmFzdDtcbiAgICBjaHJvbWEuZGVsdGFFID0gZGVsdGFFO1xuICAgIGNocm9tYS5kaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgIGNocm9tYS5saW1pdHMgPSBhbmFseXplXzEubGltaXRzO1xuICAgIGNocm9tYS52YWxpZCA9IHZhbGlkO1xuXG4gICAgLy8gc2NhbGVcbiAgICBjaHJvbWEuc2NhbGVzID0gc2NhbGVzO1xuXG4gICAgLy8gY29sb3JzXG4gICAgY2hyb21hLmNvbG9ycyA9IHczY3gxMV8xO1xuICAgIGNocm9tYS5icmV3ZXIgPSBjb2xvcmJyZXdlcl8xO1xuXG4gICAgdmFyIGNocm9tYV9qcyA9IGNocm9tYTtcblxuICAgIHJldHVybiBjaHJvbWFfanM7XG5cbn0pKTtcbiIsIi8qIVxuICBDb3B5cmlnaHQgKGMpIDIwMTggSmVkIFdhdHNvbi5cbiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlIChNSVQpLCBzZWVcbiAgaHR0cDovL2plZHdhdHNvbi5naXRodWIuaW8vY2xhc3NuYW1lc1xuKi9cbi8qIGdsb2JhbCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uICgpIHtcblx0J3VzZSBzdHJpY3QnO1xuXG5cdHZhciBoYXNPd24gPSB7fS5oYXNPd25Qcm9wZXJ0eTtcblxuXHRmdW5jdGlvbiBjbGFzc05hbWVzKCkge1xuXHRcdHZhciBjbGFzc2VzID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblx0XHRcdGlmICghYXJnKSBjb250aW51ZTtcblxuXHRcdFx0dmFyIGFyZ1R5cGUgPSB0eXBlb2YgYXJnO1xuXG5cdFx0XHRpZiAoYXJnVHlwZSA9PT0gJ3N0cmluZycgfHwgYXJnVHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGFyZyk7XG5cdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuXHRcdFx0XHRpZiAoYXJnLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBpbm5lciA9IGNsYXNzTmFtZXMuYXBwbHkobnVsbCwgYXJnKTtcblx0XHRcdFx0XHRpZiAoaW5uZXIpIHtcblx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChpbm5lcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKGFyZ1R5cGUgPT09ICdvYmplY3QnKSB7XG5cdFx0XHRcdGlmIChhcmcudG9TdHJpbmcgPT09IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcpIHtcblx0XHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gYXJnKSB7XG5cdFx0XHRcdFx0XHRpZiAoaGFzT3duLmNhbGwoYXJnLCBrZXkpICYmIGFyZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdGNsYXNzZXMucHVzaChrZXkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnLnRvU3RyaW5nKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNsYXNzZXMuam9pbignICcpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0Y2xhc3NOYW1lcy5kZWZhdWx0ID0gY2xhc3NOYW1lcztcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGNsYXNzTmFtZXM7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZGVmaW5lLmFtZCA9PT0gJ29iamVjdCcgJiYgZGVmaW5lLmFtZCkge1xuXHRcdC8vIHJlZ2lzdGVyIGFzICdjbGFzc25hbWVzJywgY29uc2lzdGVudCB3aXRoIG5wbSBwYWNrYWdlIG5hbWVcblx0XHRkZWZpbmUoJ2NsYXNzbmFtZXMnLCBbXSwgZnVuY3Rpb24gKCkge1xuXHRcdFx0cmV0dXJuIGNsYXNzTmFtZXM7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0d2luZG93LmNsYXNzTmFtZXMgPSBjbGFzc05hbWVzO1xuXHR9XG59KCkpO1xuIiwidmFyIENBTl9VU0VfRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcblxuLy8gQWRhcHRlZCBmcm9tIE1vZGVybml6clxuLy8gaHR0cHM6Ly9naXRodWIuY29tL01vZGVybml6ci9Nb2Rlcm5penIvYmxvYi9hY2IzZjBkOS9mZWF0dXJlLWRldGVjdHMvZG9tL3Bhc3NpdmVldmVudGxpc3RlbmVycy5qcyNMMjYtTDM3XG5mdW5jdGlvbiB0ZXN0UGFzc2l2ZUV2ZW50TGlzdGVuZXJzKCkge1xuICBpZiAoIUNBTl9VU0VfRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCF3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciB8fCAhd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIgfHwgIU9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBzdXBwb3J0c1Bhc3NpdmVPcHRpb24gPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2V0dGVyLXJldHVyblxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgICBzdXBwb3J0c1Bhc3NpdmVPcHRpb24gPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdldDtcbiAgICAgIH0oKVxuICAgIH0pO1xuICAgIHZhciBub29wID0gZnVuY3Rpb24gbm9vcCgpIHt9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIG5vb3AsIG9wdHMpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd0ZXN0UGFzc2l2ZUV2ZW50U3VwcG9ydCcsIG5vb3AsIG9wdHMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gZG8gbm90aGluZ1xuICB9XG5cbiAgcmV0dXJuIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbjtcbn1cblxudmFyIG1lbW9pemVkID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBjYW5Vc2VQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmIChtZW1vaXplZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbWVtb2l6ZWQgPSB0ZXN0UGFzc2l2ZUV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVFdmVudE9wdGlvbnMoZXZlbnRPcHRpb25zKSB7XG4gIGlmICghZXZlbnRPcHRpb25zKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmICghY2FuVXNlUGFzc2l2ZUV2ZW50TGlzdGVuZXJzKCkpIHtcbiAgICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBwYXNzaXZlIG9wdGlvbiwgdGhlbiBpdCBpcyBleHBlY3RpbmdcbiAgICAvLyBhIGJvb2xlYW4gZm9yIHRoZSBvcHRpb25zIGFyZ3VtZW50IHRvIHNwZWNpZnkgd2hldGhlciBpdCBzaG91bGQgdXNlXG4gICAgLy8gY2FwdHVyZSBvciBub3QuIEluIG1vcmUgbW9kZXJuIGJyb3dzZXJzLCB0aGlzIGlzIHBhc3NlZCB2aWEgdGhlIGBjYXB0dXJlYFxuICAgIC8vIG9wdGlvbiwgc28gbGV0J3MganVzdCBob2lzdCB0aGF0IHZhbHVlIHVwLlxuICAgIHJldHVybiAhIWV2ZW50T3B0aW9ucy5jYXB0dXJlO1xuICB9XG5cbiAgcmV0dXJuIGV2ZW50T3B0aW9ucztcbn1cblxuLyogZXNsaW50LWRpc2FibGUgbm8tYml0d2lzZSAqL1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgdW5pcXVlIGtleSBmb3IgYW55IHNldCBvZiBldmVudCBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGV2ZW50T3B0aW9uc0tleShub3JtYWxpemVkRXZlbnRPcHRpb25zKSB7XG4gIGlmICghbm9ybWFsaXplZEV2ZW50T3B0aW9ucykge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgLy8gSWYgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgdGhlIG5vcm1hbGl6ZWRcbiAgLy8gZXZlbnQgb3B0aW9ucyB3aWxsIGJlIGEgYm9vbGVhbi5cbiAgaWYgKG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMgPT09IHRydWUpIHtcbiAgICByZXR1cm4gMTAwO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIGJyb3dzZXIgc3VwcG9ydHMgcGFzc2l2ZSBldmVudCBsaXN0ZW5lcnMsIHNvIHdlIGV4cGVjdFxuICAvLyB0aGUgZXZlbnQgb3B0aW9ucyB0byBiZSBhbiBvYmplY3Qgd2l0aCBwb3NzaWJsZSBwcm9wZXJ0aWVzIG9mIGNhcHR1cmUsXG4gIC8vIHBhc3NpdmUsIGFuZCBvbmNlLlxuICAvL1xuICAvLyBXZSB3YW50IHRvIGNvbnNpc3RlbnRseSByZXR1cm4gdGhlIHNhbWUgdmFsdWUsIHJlZ2FyZGxlc3Mgb2YgdGhlIG9yZGVyIG9mXG4gIC8vIHRoZXNlIHByb3BlcnRpZXMsIHNvIGxldCdzIHVzZSBiaW5hcnkgbWF0aHMgdG8gYXNzaWduIGVhY2ggcHJvcGVydHkgdG8gYVxuICAvLyBiaXQsIGFuZCB0aGVuIGFkZCB0aG9zZSB0b2dldGhlciAod2l0aCBhbiBvZmZzZXQgdG8gYWNjb3VudCBmb3IgdGhlXG4gIC8vIGJvb2xlYW5zIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbikuXG4gIHZhciBjYXB0dXJlID0gbm9ybWFsaXplZEV2ZW50T3B0aW9ucy5jYXB0dXJlIDw8IDA7XG4gIHZhciBwYXNzaXZlID0gbm9ybWFsaXplZEV2ZW50T3B0aW9ucy5wYXNzaXZlIDw8IDE7XG4gIHZhciBvbmNlID0gbm9ybWFsaXplZEV2ZW50T3B0aW9ucy5vbmNlIDw8IDI7XG4gIHJldHVybiBjYXB0dXJlICsgcGFzc2l2ZSArIG9uY2U7XG59XG5cbmZ1bmN0aW9uIGVuc3VyZUNhbk11dGF0ZU5leHRFdmVudEhhbmRsZXJzKGV2ZW50SGFuZGxlcnMpIHtcbiAgaWYgKGV2ZW50SGFuZGxlcnMuaGFuZGxlcnMgPT09IGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMgPSBldmVudEhhbmRsZXJzLmhhbmRsZXJzLnNsaWNlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gVGFyZ2V0RXZlbnRIYW5kbGVycyh0YXJnZXQpIHtcbiAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gIHRoaXMuZXZlbnRzID0ge307XG59XG5cblRhcmdldEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLmdldEV2ZW50SGFuZGxlcnMgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGdldEV2ZW50SGFuZGxlcnMoZXZlbnROYW1lLCBvcHRpb25zKSB7XG4gICAgdmFyIGtleSA9IFN0cmluZyhldmVudE5hbWUpICsgJyAnICsgU3RyaW5nKGV2ZW50T3B0aW9uc0tleShvcHRpb25zKSk7XG5cbiAgICBpZiAoIXRoaXMuZXZlbnRzW2tleV0pIHtcbiAgICAgIHRoaXMuZXZlbnRzW2tleV0gPSB7XG4gICAgICAgIGhhbmRsZXJzOiBbXSxcbiAgICAgICAgaGFuZGxlRXZlbnQ6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICAgIHRoaXMuZXZlbnRzW2tleV0ubmV4dEhhbmRsZXJzID0gdGhpcy5ldmVudHNba2V5XS5oYW5kbGVycztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5ldmVudHNba2V5XTtcbiAgfVxuXG4gIHJldHVybiBnZXRFdmVudEhhbmRsZXJzO1xufSgpO1xuXG5UYXJnZXRFdmVudEhhbmRsZXJzLnByb3RvdHlwZS5oYW5kbGVFdmVudCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gaGFuZGxlRXZlbnQoZXZlbnROYW1lLCBvcHRpb25zLCBldmVudCkge1xuICAgIHZhciBldmVudEhhbmRsZXJzID0gdGhpcy5nZXRFdmVudEhhbmRsZXJzKGV2ZW50TmFtZSwgb3B0aW9ucyk7XG4gICAgZXZlbnRIYW5kbGVycy5oYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzO1xuICAgIGV2ZW50SGFuZGxlcnMuaGFuZGxlcnMuZm9yRWFjaChmdW5jdGlvbiAoaGFuZGxlcikge1xuICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBmb3IgcHJlc2VuY2UgaGVyZSBiZWNhdXNlIGEgaGFuZGxlciBmdW5jdGlvbiBtYXlcbiAgICAgICAgLy8gY2F1c2UgbGF0ZXIgaGFuZGxlcnMgdG8gZ2V0IHJlbW92ZWQuIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgZm9yXG4gICAgICAgIC8vIGluc3RhbmNlIGhhdmUgYSB3YXlwb2ludCB0aGF0IHVubW91bnRzIGFub3RoZXIgd2F5cG9pbnQgYXMgcGFydCBvZiBhblxuICAgICAgICAvLyBvbkVudGVyL29uTGVhdmUgaGFuZGxlci5cbiAgICAgICAgaGFuZGxlcihldmVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaGFuZGxlRXZlbnQ7XG59KCk7XG5cblRhcmdldEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuXG4gICAgLy8gb3B0aW9ucyBoYXMgYWxyZWFkeSBiZWVuIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludC5cbiAgICB2YXIgZXZlbnRIYW5kbGVycyA9IHRoaXMuZ2V0RXZlbnRIYW5kbGVycyhldmVudE5hbWUsIG9wdGlvbnMpO1xuXG4gICAgZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycyk7XG5cbiAgICBpZiAoZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMsIGV2ZW50TmFtZSwgb3B0aW9ucyk7XG5cbiAgICAgIHRoaXMudGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5wdXNoKGxpc3RlbmVyKTtcblxuICAgIHZhciBpc1N1YnNjcmliZWQgPSB0cnVlO1xuICAgIHZhciB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIHVuc3Vic2NyaWJlKCkge1xuICAgICAgICBpZiAoIWlzU3Vic2NyaWJlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlzU3Vic2NyaWJlZCA9IGZhbHNlO1xuXG4gICAgICAgIGVuc3VyZUNhbk11dGF0ZU5leHRFdmVudEhhbmRsZXJzKGV2ZW50SGFuZGxlcnMpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgICAgICAgZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBpZiAoZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gQWxsIGV2ZW50IGhhbmRsZXJzIGhhdmUgYmVlbiByZW1vdmVkLCBzbyB3ZSB3YW50IHRvIHJlbW92ZSB0aGUgZXZlbnRcbiAgICAgICAgICAvLyBsaXN0ZW5lciBmcm9tIHRoZSB0YXJnZXQgbm9kZS5cblxuICAgICAgICAgIGlmIChfdGhpcy50YXJnZXQpIHtcbiAgICAgICAgICAgIC8vIFRoZXJlIGNhbiBiZSBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSB0YXJnZXQgbWF5IG5vIGxvbmdlciBleGlzdFxuICAgICAgICAgICAgLy8gd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgZS5nLiB3aGVuIGEgUmVhY3QgY29tcG9uZW50IGlzXG4gICAgICAgICAgICAvLyB1bm1vdW50aW5nLiBHdWFyZGluZyBhZ2FpbnN0IHRoaXMgcHJldmVudHMgdGhlIGZvbGxvd2luZyBlcnJvcjpcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyAgIENhbm5vdCByZWFkIHByb3BlcnR5ICdyZW1vdmVFdmVudExpc3RlbmVyJyBvZiB1bmRlZmluZWRcbiAgICAgICAgICAgIF90aGlzLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZXZlbnRIYW5kbGVycy5oYW5kbGVFdmVudCwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXZlbnRIYW5kbGVycy5oYW5kbGVFdmVudCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gICAgfSgpO1xuICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgfVxuXG4gIHJldHVybiBhZGQ7XG59KCk7XG5cbnZhciBFVkVOVF9IQU5ETEVSU19LRVkgPSAnX19jb25zb2xpZGF0ZWRfZXZlbnRzX2hhbmRsZXJzX18nO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L3ByZWZlci1kZWZhdWx0LWV4cG9ydFxuZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIGV2ZW50TmFtZSwgbGlzdGVuZXIsIG9wdGlvbnMpIHtcbiAgaWYgKCF0YXJnZXRbRVZFTlRfSEFORExFUlNfS0VZXSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHRhcmdldFtFVkVOVF9IQU5ETEVSU19LRVldID0gbmV3IFRhcmdldEV2ZW50SGFuZGxlcnModGFyZ2V0KTtcbiAgfVxuICB2YXIgbm9ybWFsaXplZEV2ZW50T3B0aW9ucyA9IG5vcm1hbGl6ZUV2ZW50T3B0aW9ucyhvcHRpb25zKTtcbiAgcmV0dXJuIHRhcmdldFtFVkVOVF9IQU5ETEVSU19LRVldLmFkZChldmVudE5hbWUsIGxpc3RlbmVyLCBub3JtYWxpemVkRXZlbnRPcHRpb25zKTtcbn1cblxuZXhwb3J0IHsgYWRkRXZlbnRMaXN0ZW5lciB9O1xuIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLlJlZ0V4cC5lc2NhcGU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgZnVuY3Rpb24hJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgbXNnKSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ251bWJlcicgJiYgY29mKGl0KSAhPSAnTnVtYmVyJykgdGhyb3cgVHlwZUVycm9yKG1zZyk7XG4gIHJldHVybiAraXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMxIEFycmF5LnByb3RvdHlwZVtAQHVuc2NvcGFibGVzXVxudmFyIFVOU0NPUEFCTEVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3Vuc2NvcGFibGVzJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcbmlmIChBcnJheVByb3RvW1VOU0NPUEFCTEVTXSA9PSB1bmRlZmluZWQpIHJlcXVpcmUoJy4vX2hpZGUnKShBcnJheVByb3RvLCBVTlNDT1BBQkxFUywge30pO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4gLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1hZHZhbmNlc3RyaW5naW5kZXhcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFMsIGluZGV4LCB1bmljb2RlKSB7XG4gIHJldHVybiBpbmRleCArICh1bmljb2RlID8gYXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBDb25zdHJ1Y3RvciwgbmFtZSwgZm9yYmlkZGVuRmllbGQpIHtcbiAgaWYgKCEoaXQgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikgfHwgKGZvcmJpZGRlbkZpZWxkICE9PSB1bmRlZmluZWQgJiYgZm9yYmlkZGVuRmllbGQgaW4gaXQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKG5hbWUgKyAnOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYW4gb2JqZWN0IScpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gMjIuMS4zLjMgQXJyYXkucHJvdG90eXBlLmNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCwgZW5kID0gdGhpcy5sZW5ndGgpXG4ndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgdG8gPSB0b0Fic29sdXRlSW5kZXgodGFyZ2V0LCBsZW4pO1xuICB2YXIgZnJvbSA9IHRvQWJzb2x1dGVJbmRleChzdGFydCwgbGVuKTtcbiAgdmFyIGVuZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgY291bnQgPSBNYXRoLm1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlIE9bdG9dO1xuICAgIHRvICs9IGluYztcbiAgICBmcm9tICs9IGluYztcbiAgfSByZXR1cm4gTztcbn07XG4iLCIvLyAyMi4xLjMuNiBBcnJheS5wcm90b3R5cGUuZmlsbCh2YWx1ZSwgc3RhcnQgPSAwLCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0ID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IHRvQWJzb2x1dGVJbmRleChhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IGFMZW4gPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXIsIElURVJBVE9SKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgZm9yT2YoaXRlciwgZmFsc2UsIHJlc3VsdC5wdXNoLCByZXN1bHQsIElURVJBVE9SKTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJU19JTkNMVURFUykge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBlbCwgZnJvbUluZGV4KSB7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QoJHRoaXMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBpZiAoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpIHdoaWxlIChsZW5ndGggPiBpbmRleCkge1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgaWYgKHZhbHVlICE9IHZhbHVlKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSNpbmRleE9mIGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykge1xuICAgICAgaWYgKE9baW5kZXhdID09PSBlbCkgcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcbiIsIi8vIDAgLT4gQXJyYXkjZm9yRWFjaFxuLy8gMSAtPiBBcnJheSNtYXBcbi8vIDIgLT4gQXJyYXkjZmlsdGVyXG4vLyAzIC0+IEFycmF5I3NvbWVcbi8vIDQgLT4gQXJyYXkjZXZlcnlcbi8vIDUgLT4gQXJyYXkjZmluZFxuLy8gNiAtPiBBcnJheSNmaW5kSW5kZXhcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhc2MgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgJGNyZWF0ZSkge1xuICB2YXIgSVNfTUFQID0gVFlQRSA9PSAxO1xuICB2YXIgSVNfRklMVEVSID0gVFlQRSA9PSAyO1xuICB2YXIgSVNfU09NRSA9IFRZUEUgPT0gMztcbiAgdmFyIElTX0VWRVJZID0gVFlQRSA9PSA0O1xuICB2YXIgSVNfRklORF9JTkRFWCA9IFRZUEUgPT0gNjtcbiAgdmFyIE5PX0hPTEVTID0gVFlQRSA9PSA1IHx8IElTX0ZJTkRfSU5ERVg7XG4gIHZhciBjcmVhdGUgPSAkY3JlYXRlIHx8IGFzYztcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCkge1xuICAgIHZhciBPID0gdG9PYmplY3QoJHRoaXMpO1xuICAgIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgICB2YXIgZiA9IGN0eChjYWxsYmFja2ZuLCB0aGF0LCAzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoc2VsZi5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiA/IGNyZWF0ZSgkdGhpcywgMCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIHZhbCwgcmVzO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSBpZiAoTk9fSE9MRVMgfHwgaW5kZXggaW4gc2VsZikge1xuICAgICAgdmFsID0gc2VsZltpbmRleF07XG4gICAgICByZXMgPSBmKHZhbCwgaW5kZXgsIE8pO1xuICAgICAgaWYgKFRZUEUpIHtcbiAgICAgICAgaWYgKElTX01BUCkgcmVzdWx0W2luZGV4XSA9IHJlczsgICAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzKSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAvLyBzb21lXG4gICAgICAgICAgY2FzZSA1OiByZXR1cm4gdmFsOyAgICAgICAgICAgICAgLy8gZmluZFxuICAgICAgICAgIGNhc2UgNjogcmV0dXJuIGluZGV4OyAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcmVzdWx0LnB1c2godmFsKTsgICAgICAgIC8vIGZpbHRlclxuICAgICAgICB9IGVsc2UgaWYgKElTX0VWRVJZKSByZXR1cm4gZmFsc2U7IC8vIGV2ZXJ5XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBJU19GSU5EX0lOREVYID8gLTEgOiBJU19TT01FIHx8IElTX0VWRVJZID8gSVNfRVZFUlkgOiByZXN1bHQ7XG4gIH07XG59O1xuIiwidmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYUxlbiwgbWVtbywgaXNSaWdodCkge1xuICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gIHZhciBzZWxmID0gSU9iamVjdChPKTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgdmFyIGluZGV4ID0gaXNSaWdodCA/IGxlbmd0aCAtIDEgOiAwO1xuICB2YXIgaSA9IGlzUmlnaHQgPyAtMSA6IDE7XG4gIGlmIChhTGVuIDwgMikgZm9yICg7Oykge1xuICAgIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICBpbmRleCArPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGluZGV4ICs9IGk7XG4gICAgaWYgKGlzUmlnaHQgPyBpbmRleCA8IDAgOiBsZW5ndGggPD0gaW5kZXgpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZScpO1xuICAgIH1cbiAgfVxuICBmb3IgKDtpc1JpZ2h0ID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgIG1lbW8gPSBjYWxsYmFja2ZuKG1lbW8sIHNlbGZbaW5kZXhdLCBpbmRleCwgTyk7XG4gIH1cbiAgcmV0dXJuIG1lbW87XG59O1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbCkpIHtcbiAgICBDID0gb3JpZ2luYWwuY29uc3RydWN0b3I7XG4gICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICBpZiAodHlwZW9mIEMgPT0gJ2Z1bmN0aW9uJyAmJiAoQyA9PT0gQXJyYXkgfHwgaXNBcnJheShDLnByb3RvdHlwZSkpKSBDID0gdW5kZWZpbmVkO1xuICAgIGlmIChpc09iamVjdChDKSkge1xuICAgICAgQyA9IENbU1BFQ0lFU107XG4gICAgICBpZiAoQyA9PT0gbnVsbCkgQyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0gcmV0dXJuIEMgPT09IHVuZGVmaW5lZCA/IEFycmF5IDogQztcbn07XG4iLCIvLyA5LjQuMi4zIEFycmF5U3BlY2llc0NyZWF0ZShvcmlnaW5hbEFycmF5LCBsZW5ndGgpXG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbCwgbGVuZ3RoKSB7XG4gIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbCkpKGxlbmd0aCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGludm9rZSA9IHJlcXVpcmUoJy4vX2ludm9rZScpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChGLCBsZW4sIGFyZ3MpIHtcbiAgaWYgKCEobGVuIGluIGZhY3RvcmllcykpIHtcbiAgICBmb3IgKHZhciBuID0gW10sIGkgPSAwOyBpIDwgbGVuOyBpKyspIG5baV0gPSAnYVsnICsgaSArICddJztcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICBmYWN0b3JpZXNbbGVuXSA9IEZ1bmN0aW9uKCdGLGEnLCAncmV0dXJuIG5ldyBGKCcgKyBuLmpvaW4oJywnKSArICcpJyk7XG4gIH0gcmV0dXJuIGZhY3Rvcmllc1tsZW5dKEYsIGFyZ3MpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5iaW5kIHx8IGZ1bmN0aW9uIGJpbmQodGhhdCAvKiAsIC4uLmFyZ3MgKi8pIHtcbiAgdmFyIGZuID0gYUZ1bmN0aW9uKHRoaXMpO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgdmFyIGJvdW5kID0gZnVuY3Rpb24gKC8qIGFyZ3MuLi4gKi8pIHtcbiAgICB2YXIgYXJncyA9IHBhcnRBcmdzLmNvbmNhdChhcnJheVNsaWNlLmNhbGwoYXJndW1lbnRzKSk7XG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBib3VuZCA/IGNvbnN0cnVjdChmbiwgYXJncy5sZW5ndGgsIGFyZ3MpIDogaW52b2tlKGZuLCBhcmdzLCB0aGF0KTtcbiAgfTtcbiAgaWYgKGlzT2JqZWN0KGZuLnByb3RvdHlwZSkpIGJvdW5kLnByb3RvdHlwZSA9IGZuLnByb3RvdHlwZTtcbiAgcmV0dXJuIGJvdW5kO1xufTtcbiIsIi8vIGdldHRpbmcgdGFnIGZyb20gMTkuMS4zLjYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZygpXG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIEFSRyA9IGNvZihmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgTywgVCwgQjtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKFQgPSB0cnlHZXQoTyA9IE9iamVjdChpdCksIFRBRykpID09ICdzdHJpbmcnID8gVFxuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQVJHID8gY29mKE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKEIgPSBjb2YoTykpID09ICdPYmplY3QnICYmIHR5cGVvZiBPLmNhbGxlZSA9PSAnZnVuY3Rpb24nID8gJ0FyZ3VtZW50cycgOiBCO1xufTtcbiIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChpdCkuc2xpY2UoOCwgLTEpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciAkaXRlckRlZmluZSA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBmYXN0S2V5ID0gcmVxdWlyZSgnLi9fbWV0YScpLmZhc3RLZXk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0laRSA9IERFU0NSSVBUT1JTID8gJ19zJyA6ICdzaXplJztcblxudmFyIGdldEVudHJ5ID0gZnVuY3Rpb24gKHRoYXQsIGtleSkge1xuICAvLyBmYXN0IGNhc2VcbiAgdmFyIGluZGV4ID0gZmFzdEtleShrZXkpO1xuICB2YXIgZW50cnk7XG4gIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gdGhhdC5faVtpbmRleF07XG4gIC8vIGZyb3plbiBvYmplY3QgY2FzZVxuICBmb3IgKGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgIGlmIChlbnRyeS5rID09IGtleSkgcmV0dXJuIGVudHJ5O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29uc3RydWN0b3I6IGZ1bmN0aW9uICh3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKSB7XG4gICAgdmFyIEMgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBDLCBOQU1FLCAnX2knKTtcbiAgICAgIHRoYXQuX3QgPSBOQU1FOyAgICAgICAgIC8vIGNvbGxlY3Rpb24gdHlwZVxuICAgICAgdGhhdC5faSA9IGNyZWF0ZShudWxsKTsgLy8gaW5kZXhcbiAgICAgIHRoYXQuX2YgPSB1bmRlZmluZWQ7ICAgIC8vIGZpcnN0IGVudHJ5XG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAgICAvLyBsYXN0IGVudHJ5XG4gICAgICB0aGF0W1NJWkVdID0gMDsgICAgICAgICAvLyBzaXplXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjEuMy4xIE1hcC5wcm90b3R5cGUuY2xlYXIoKVxuICAgICAgLy8gMjMuMi4zLjIgU2V0LnByb3RvdHlwZS5jbGVhcigpXG4gICAgICBjbGVhcjogZnVuY3Rpb24gY2xlYXIoKSB7XG4gICAgICAgIGZvciAodmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKSwgZGF0YSA9IHRoYXQuX2ksIGVudHJ5ID0gdGhhdC5fZjsgZW50cnk7IGVudHJ5ID0gZW50cnkubikge1xuICAgICAgICAgIGVudHJ5LnIgPSB0cnVlO1xuICAgICAgICAgIGlmIChlbnRyeS5wKSBlbnRyeS5wID0gZW50cnkucC5uID0gdW5kZWZpbmVkO1xuICAgICAgICAgIGRlbGV0ZSBkYXRhW2VudHJ5LmldO1xuICAgICAgICB9XG4gICAgICAgIHRoYXQuX2YgPSB0aGF0Ll9sID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGF0W1NJWkVdID0gMDtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuMyBNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy4yLjMuNCBTZXQucHJvdG90eXBlLmRlbGV0ZSh2YWx1ZSlcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciB0aGF0ID0gdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubjtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnA7XG4gICAgICAgICAgZGVsZXRlIHRoYXQuX2lbZW50cnkuaV07XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubiA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucCA9IHByZXY7XG4gICAgICAgICAgaWYgKHRoYXQuX2YgPT0gZW50cnkpIHRoYXQuX2YgPSBuZXh0O1xuICAgICAgICAgIGlmICh0aGF0Ll9sID09IGVudHJ5KSB0aGF0Ll9sID0gcHJldjtcbiAgICAgICAgICB0aGF0W1NJWkVdLS07XG4gICAgICAgIH0gcmV0dXJuICEhZW50cnk7XG4gICAgICB9LFxuICAgICAgLy8gMjMuMi4zLjYgU2V0LnByb3RvdHlwZS5mb3JFYWNoKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gICAgICAvLyAyMy4xLjMuNSBNYXAucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICAgICAgdmFsaWRhdGUodGhpcywgTkFNRSk7XG4gICAgICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAzKTtcbiAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICB3aGlsZSAoZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGlzLl9mKSB7XG4gICAgICAgICAgZihlbnRyeS52LCBlbnRyeS5rLCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgLy8gMjMuMS4zLjcgTWFwLnByb3RvdHlwZS5oYXMoa2V5KVxuICAgICAgLy8gMjMuMi4zLjcgU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICEhZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTkFNRSksIGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKERFU0NSSVBUT1JTKSBkUChDLnByb3RvdHlwZSwgJ3NpemUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlKHRoaXMsIE5BTUUpW1NJWkVdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICB2YXIgcHJldiwgaW5kZXg7XG4gICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICBlbnRyeS52ID0gdmFsdWU7XG4gICAgLy8gY3JlYXRlIG5ldyBlbnRyeVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGF0Ll9sID0gZW50cnkgPSB7XG4gICAgICAgIGk6IGluZGV4ID0gZmFzdEtleShrZXksIHRydWUpLCAvLyA8LSBpbmRleFxuICAgICAgICBrOiBrZXksICAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0ga2V5XG4gICAgICAgIHY6IHZhbHVlLCAgICAgICAgICAgICAgICAgICAgICAvLyA8LSB2YWx1ZVxuICAgICAgICBwOiBwcmV2ID0gdGhhdC5fbCwgICAgICAgICAgICAgLy8gPC0gcHJldmlvdXMgZW50cnlcbiAgICAgICAgbjogdW5kZWZpbmVkLCAgICAgICAgICAgICAgICAgIC8vIDwtIG5leHQgZW50cnlcbiAgICAgICAgcjogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHJlbW92ZWRcbiAgICAgIH07XG4gICAgICBpZiAoIXRoYXQuX2YpIHRoYXQuX2YgPSBlbnRyeTtcbiAgICAgIGlmIChwcmV2KSBwcmV2Lm4gPSBlbnRyeTtcbiAgICAgIHRoYXRbU0laRV0rKztcbiAgICAgIC8vIGFkZCB0byBpbmRleFxuICAgICAgaWYgKGluZGV4ICE9PSAnRicpIHRoYXQuX2lbaW5kZXhdID0gZW50cnk7XG4gICAgfSByZXR1cm4gdGhhdDtcbiAgfSxcbiAgZ2V0RW50cnk6IGdldEVudHJ5LFxuICBzZXRTdHJvbmc6IGZ1bmN0aW9uIChDLCBOQU1FLCBJU19NQVApIHtcbiAgICAvLyBhZGQgLmtleXMsIC52YWx1ZXMsIC5lbnRyaWVzLCBbQEBpdGVyYXRvcl1cbiAgICAvLyAyMy4xLjMuNCwgMjMuMS4zLjgsIDIzLjEuMy4xMSwgMjMuMS4zLjEyLCAyMy4yLjMuNSwgMjMuMi4zLjgsIDIzLjIuMy4xMCwgMjMuMi4zLjExXG4gICAgJGl0ZXJEZWZpbmUoQywgTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICB0aGlzLl90ID0gdmFsaWRhdGUoaXRlcmF0ZWQsIE5BTUUpOyAvLyB0YXJnZXRcbiAgICAgIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAgICAgIC8vIGtpbmRcbiAgICAgIHRoaXMuX2wgPSB1bmRlZmluZWQ7ICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgICAgdmFyIGtpbmQgPSB0aGF0Ll9rO1xuICAgICAgdmFyIGVudHJ5ID0gdGhhdC5fbDtcbiAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LnIpIGVudHJ5ID0gZW50cnkucDtcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXRoYXQuX3QgfHwgISh0aGF0Ll9sID0gZW50cnkgPSBlbnRyeSA/IGVudHJ5Lm4gOiB0aGF0Ll90Ll9mKSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICB0aGF0Ll90ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gc3RlcCgxKTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkuayk7XG4gICAgICBpZiAoa2luZCA9PSAndmFsdWVzJykgcmV0dXJuIHN0ZXAoMCwgZW50cnkudik7XG4gICAgICByZXR1cm4gc3RlcCgwLCBbZW50cnkuaywgZW50cnkudl0pO1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGFkZCBbQEBzcGVjaWVzXSwgMjMuMS4yLjIsIDIzLjIuMi4yXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcbiAgfVxufTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgaWYgKGNsYXNzb2YodGhpcykgIT0gTkFNRSkgdGhyb3cgVHlwZUVycm9yKE5BTUUgKyBcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtcbiAgICByZXR1cm4gZnJvbSh0aGlzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBnZXRXZWFrID0gcmVxdWlyZSgnLi9fbWV0YScpLmdldFdlYWs7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG52YXIgJGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xudmFyIGFycmF5RmluZEluZGV4ID0gY3JlYXRlQXJyYXlNZXRob2QoNik7XG52YXIgaWQgPSAwO1xuXG4vLyBmYWxsYmFjayBmb3IgdW5jYXVnaHQgZnJvemVuIGtleXNcbnZhciB1bmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKHRoYXQpIHtcbiAgcmV0dXJuIHRoYXQuX2wgfHwgKHRoYXQuX2wgPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG52YXIgVW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5hID0gW107XG59O1xudmFyIGZpbmRVbmNhdWdodEZyb3plbiA9IGZ1bmN0aW9uIChzdG9yZSwga2V5KSB7XG4gIHJldHVybiBhcnJheUZpbmQoc3RvcmUuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGl0WzBdID09PSBrZXk7XG4gIH0pO1xufTtcblVuY2F1Z2h0RnJvemVuU3RvcmUucHJvdG90eXBlID0ge1xuICBnZXQ6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIHJldHVybiBlbnRyeVsxXTtcbiAgfSxcbiAgaGFzOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuICEhZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gIH0sXG4gIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgICBpZiAoZW50cnkpIGVudHJ5WzFdID0gdmFsdWU7XG4gICAgZWxzZSB0aGlzLmEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9LFxuICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBpbmRleCA9IGFycmF5RmluZEluZGV4KHRoaXMuYSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgICB9KTtcbiAgICBpZiAofmluZGV4KSB0aGlzLmEuc3BsaWNlKGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gaWQrKzsgICAgICAvLyBjb2xsZWN0aW9uIGlkXG4gICAgICB0aGF0Ll9sID0gdW5kZWZpbmVkOyAvLyBsZWFrIHN0b3JlIGZvciB1bmNhdWdodCBmcm96ZW4gb2JqZWN0c1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgIH0pO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCB7XG4gICAgICAvLyAyMy4zLjMuMiBXZWFrTWFwLnByb3RvdHlwZS5kZWxldGUoa2V5KVxuICAgICAgLy8gMjMuNC4zLjMgV2Vha1NldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpWydkZWxldGUnXShrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpICYmIGRlbGV0ZSBkYXRhW3RoaXMuX2ldO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjMuMy40IFdlYWtNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy40LjMuNCBXZWFrU2V0LnByb3RvdHlwZS5oYXModmFsdWUpXG4gICAgICBoYXM6IGZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgICAgICAgaWYgKCFpc09iamVjdChrZXkpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBkYXRhID0gZ2V0V2VhayhrZXkpO1xuICAgICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgTkFNRSkpLmhhcyhrZXkpO1xuICAgICAgICByZXR1cm4gZGF0YSAmJiAkaGFzKGRhdGEsIHRoaXMuX2kpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDO1xuICB9LFxuICBkZWY6IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgdmFyIGRhdGEgPSBnZXRXZWFrKGFuT2JqZWN0KGtleSksIHRydWUpO1xuICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHRoYXQpLnNldChrZXksIHZhbHVlKTtcbiAgICBlbHNlIGRhdGFbdGhhdC5faV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhhdDtcbiAgfSxcbiAgdWZzdG9yZTogdW5jYXVnaHRGcm96ZW5TdG9yZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIHdyYXBwZXIsIG1ldGhvZHMsIGNvbW1vbiwgSVNfTUFQLCBJU19XRUFLKSB7XG4gIHZhciBCYXNlID0gZ2xvYmFsW05BTUVdO1xuICB2YXIgQyA9IEJhc2U7XG4gIHZhciBBRERFUiA9IElTX01BUCA/ICdzZXQnIDogJ2FkZCc7XG4gIHZhciBwcm90byA9IEMgJiYgQy5wcm90b3R5cGU7XG4gIHZhciBPID0ge307XG4gIHZhciBmaXhNZXRob2QgPSBmdW5jdGlvbiAoS0VZKSB7XG4gICAgdmFyIGZuID0gcHJvdG9bS0VZXTtcbiAgICByZWRlZmluZShwcm90bywgS0VZLFxuICAgICAgS0VZID09ICdkZWxldGUnID8gZnVuY3Rpb24gKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdoYXMnID8gZnVuY3Rpb24gaGFzKGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gZmFsc2UgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGEpIHtcbiAgICAgICAgcmV0dXJuIElTX1dFQUsgJiYgIWlzT2JqZWN0KGEpID8gdW5kZWZpbmVkIDogZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpO1xuICAgICAgfSA6IEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZChhKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTsgcmV0dXJuIHRoaXM7IH1cbiAgICAgICAgOiBmdW5jdGlvbiBzZXQoYSwgYikgeyBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSwgYik7IHJldHVybiB0aGlzOyB9XG4gICAgKTtcbiAgfTtcbiAgaWYgKHR5cGVvZiBDICE9ICdmdW5jdGlvbicgfHwgIShJU19XRUFLIHx8IHByb3RvLmZvckVhY2ggJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgQygpLmVudHJpZXMoKS5uZXh0KCk7XG4gIH0pKSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQyA9IGNvbW1vbi5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBOQU1FLCBJU19NQVAsIEFEREVSKTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwgbWV0aG9kcyk7XG4gICAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gIENocm9taXVtIDQwLSB3ZWFrLWNvbGxlY3Rpb25zIHRocm93cyBvbiBwcmltaXRpdmVzLCBidXQgc2hvdWxkIHJldHVybiBmYWxzZVxuICAgIHZhciBUSFJPV1NfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgaW5zdGFuY2UuaGFzKDEpOyB9KTtcbiAgICAvLyBtb3N0IGVhcmx5IGltcGxlbWVudGF0aW9ucyBkb2Vzbid0IHN1cHBvcnRzIGl0ZXJhYmxlcywgbW9zdCBtb2Rlcm4gLSBub3QgY2xvc2UgaXQgY29ycmVjdGx5XG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSAkaXRlckRldGVjdChmdW5jdGlvbiAoaXRlcikgeyBuZXcgQyhpdGVyKTsgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgLy8gZm9yIGVhcmx5IGltcGxlbWVudGF0aW9ucyAtMCBhbmQgKzAgbm90IHRoZSBzYW1lXG4gICAgdmFyIEJVR0dZX1pFUk8gPSAhSVNfV0VBSyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBWOCB+IENocm9taXVtIDQyLSBmYWlscyBvbmx5IHdpdGggNSsgZWxlbWVudHNcbiAgICAgIHZhciAkaW5zdGFuY2UgPSBuZXcgQygpO1xuICAgICAgdmFyIGluZGV4ID0gNTtcbiAgICAgIHdoaWxlIChpbmRleC0tKSAkaW5zdGFuY2VbQURERVJdKGluZGV4LCBpbmRleCk7XG4gICAgICByZXR1cm4gISRpbnN0YW5jZS5oYXMoLTApO1xuICAgIH0pO1xuICAgIGlmICghQUNDRVBUX0lURVJBQkxFUykge1xuICAgICAgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRhcmdldCwgaXRlcmFibGUpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0YXJnZXQsIEMsIE5BTUUpO1xuICAgICAgICB2YXIgdGhhdCA9IGluaGVyaXRJZlJlcXVpcmVkKG5ldyBCYXNlKCksIHRhcmdldCwgQyk7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIEMucHJvdG90eXBlID0gcHJvdG87XG4gICAgICBwcm90by5jb25zdHJ1Y3RvciA9IEM7XG4gICAgfVxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cbiAgICBpZiAoQlVHR1lfWkVSTyB8fCBIQVNOVF9DSEFJTklORykgZml4TWV0aG9kKEFEREVSKTtcbiAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIHNob3VsZCBub3QgY29udGFpbnMgLmNsZWFyIG1ldGhvZFxuICAgIGlmIChJU19XRUFLICYmIHByb3RvLmNsZWFyKSBkZWxldGUgcHJvdG8uY2xlYXI7XG4gIH1cblxuICBzZXRUb1N0cmluZ1RhZyhDLCBOQU1FKTtcblxuICBPW05BTUVdID0gQztcbiAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQyAhPSBCYXNlKSwgTyk7XG5cbiAgaWYgKCFJU19XRUFLKSBjb21tb24uc2V0U3Ryb25nKEMsIE5BTUUsIElTX01BUCk7XG5cbiAgcmV0dXJuIEM7XG59O1xuIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHsgdmVyc2lvbjogJzIuNi4xMicgfTtcbmlmICh0eXBlb2YgX19lID09ICdudW1iZXInKSBfX2UgPSBjb3JlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgaWYgKGluZGV4IGluIG9iamVjdCkgJGRlZmluZVByb3BlcnR5LmYob2JqZWN0LCBpbmRleCwgY3JlYXRlRGVzYygwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtpbmRleF0gPSB2YWx1ZTtcbn07XG4iLCIvLyBvcHRpb25hbCAvIHNpbXBsZSBjb250ZXh0IGJpbmRpbmdcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCwgbGVuZ3RoKSB7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmICh0aGF0ID09PSB1bmRlZmluZWQpIHJldHVybiBmbjtcbiAgc3dpdGNoIChsZW5ndGgpIHtcbiAgICBjYXNlIDE6IHJldHVybiBmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYik7XG4gICAgfTtcbiAgICBjYXNlIDM6IHJldHVybiBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSwgYiwgYyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBnZXRUaW1lID0gRGF0ZS5wcm90b3R5cGUuZ2V0VGltZTtcbnZhciAkdG9JU09TdHJpbmcgPSBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZztcblxudmFyIGx6ID0gZnVuY3Rpb24gKG51bSkge1xuICByZXR1cm4gbnVtID4gOSA/IG51bSA6ICcwJyArIG51bTtcbn07XG5cbi8vIFBoYW50b21KUyAvIG9sZCBXZWJLaXQgaGFzIGEgYnJva2VuIGltcGxlbWVudGF0aW9uc1xubW9kdWxlLmV4cG9ydHMgPSAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJHRvSVNPU3RyaW5nLmNhbGwobmV3IERhdGUoLTVlMTMgLSAxKSkgIT0gJzAzODUtMDctMjVUMDc6MDY6MzkuOTk5Wic7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZShOYU4pKTtcbn0pKSA/IGZ1bmN0aW9uIHRvSVNPU3RyaW5nKCkge1xuICBpZiAoIWlzRmluaXRlKGdldFRpbWUuY2FsbCh0aGlzKSkpIHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgdGltZSB2YWx1ZScpO1xuICB2YXIgZCA9IHRoaXM7XG4gIHZhciB5ID0gZC5nZXRVVENGdWxsWWVhcigpO1xuICB2YXIgbSA9IGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCk7XG4gIHZhciBzID0geSA8IDAgPyAnLScgOiB5ID4gOTk5OSA/ICcrJyA6ICcnO1xuICByZXR1cm4gcyArICgnMDAwMDAnICsgTWF0aC5hYnMoeSkpLnNsaWNlKHMgPyAtNiA6IC00KSArXG4gICAgJy0nICsgbHooZC5nZXRVVENNb250aCgpICsgMSkgKyAnLScgKyBseihkLmdldFVUQ0RhdGUoKSkgK1xuICAgICdUJyArIGx6KGQuZ2V0VVRDSG91cnMoKSkgKyAnOicgKyBseihkLmdldFVUQ01pbnV0ZXMoKSkgK1xuICAgICc6JyArIGx6KGQuZ2V0VVRDU2Vjb25kcygpKSArICcuJyArIChtID4gOTkgPyBtIDogJzAnICsgbHoobSkpICsgJ1onO1xufSA6ICR0b0lTT1N0cmluZztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgTlVNQkVSID0gJ251bWJlcic7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGhpbnQpIHtcbiAgaWYgKGhpbnQgIT09ICdzdHJpbmcnICYmIGhpbnQgIT09IE5VTUJFUiAmJiBoaW50ICE9PSAnZGVmYXVsdCcpIHRocm93IFR5cGVFcnJvcignSW5jb3JyZWN0IGhpbnQnKTtcbiAgcmV0dXJuIHRvUHJpbWl0aXZlKGFuT2JqZWN0KHRoaXMpLCBoaW50ICE9IE5VTUJFUik7XG59O1xuIiwiLy8gNy4yLjEgUmVxdWlyZU9iamVjdENvZXJjaWJsZShhcmd1bWVudClcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIi8vIFRoYW5rJ3MgSUU4IGZvciBoaXMgZnVubnkgZGVmaW5lUHJvcGVydHlcbm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9IH0pLmEgIT0gNztcbn0pO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbi8vIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50IGlzICdvYmplY3QnIGluIG9sZCBJRVxudmFyIGlzID0gaXNPYmplY3QoZG9jdW1lbnQpICYmIGlzT2JqZWN0KGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpdCkgOiB7fTtcbn07XG4iLCIvLyBJRSA4LSBkb24ndCBlbnVtIGJ1ZyBrZXlzXG5tb2R1bGUuZXhwb3J0cyA9IChcbiAgJ2NvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZidcbikuc3BsaXQoJywnKTtcbiIsIi8vIGFsbCBlbnVtZXJhYmxlIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBzeW1ib2xzXG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgcElFID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IGdldEtleXMoaXQpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgaWYgKGdldFN5bWJvbHMpIHtcbiAgICB2YXIgc3ltYm9scyA9IGdldFN5bWJvbHMoaXQpO1xuICAgIHZhciBpc0VudW0gPSBwSUUuZjtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAoc3ltYm9scy5sZW5ndGggPiBpKSBpZiAoaXNFbnVtLmNhbGwoaXQsIGtleSA9IHN5bWJvbHNbaSsrXSkpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbiAodHlwZSwgbmFtZSwgc291cmNlKSB7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GO1xuICB2YXIgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuRztcbiAgdmFyIElTX1NUQVRJQyA9IHR5cGUgJiAkZXhwb3J0LlM7XG4gIHZhciBJU19QUk9UTyA9IHR5cGUgJiAkZXhwb3J0LlA7XG4gIHZhciBJU19CSU5EID0gdHlwZSAmICRleHBvcnQuQjtcbiAgdmFyIHRhcmdldCA9IElTX0dMT0JBTCA/IGdsb2JhbCA6IElTX1NUQVRJQyA/IGdsb2JhbFtuYW1lXSB8fCAoZ2xvYmFsW25hbWVdID0ge30pIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXTtcbiAgdmFyIGV4cG9ydHMgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KTtcbiAgdmFyIGV4cFByb3RvID0gZXhwb3J0c1tQUk9UT1RZUEVdIHx8IChleHBvcnRzW1BST1RPVFlQRV0gPSB7fSk7XG4gIHZhciBrZXksIG93biwgb3V0LCBleHA7XG4gIGlmIChJU19HTE9CQUwpIHNvdXJjZSA9IG5hbWU7XG4gIGZvciAoa2V5IGluIHNvdXJjZSkge1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgLy8gZXhwb3J0IG5hdGl2ZSBvciBwYXNzZWRcbiAgICBvdXQgPSAob3duID8gdGFyZ2V0IDogc291cmNlKVtrZXldO1xuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgZXhwID0gSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpIDogSVNfUFJPVE8gJiYgdHlwZW9mIG91dCA9PSAnZnVuY3Rpb24nID8gY3R4KEZ1bmN0aW9uLmNhbGwsIG91dCkgOiBvdXQ7XG4gICAgLy8gZXh0ZW5kIGdsb2JhbFxuICAgIGlmICh0YXJnZXQpIHJlZGVmaW5lKHRhcmdldCwga2V5LCBvdXQsIHR5cGUgJiAkZXhwb3J0LlUpO1xuICAgIC8vIGV4cG9ydFxuICAgIGlmIChleHBvcnRzW2tleV0gIT0gb3V0KSBoaWRlKGV4cG9ydHMsIGtleSwgZXhwKTtcbiAgICBpZiAoSVNfUFJPVE8gJiYgZXhwUHJvdG9ba2V5XSAhPSBvdXQpIGV4cFByb3RvW2tleV0gPSBvdXQ7XG4gIH1cbn07XG5nbG9iYWwuY29yZSA9IGNvcmU7XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgXG5tb2R1bGUuZXhwb3J0cyA9ICRleHBvcnQ7XG4iLCJ2YXIgTUFUQ0ggPSByZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgcmUgPSAvLi87XG4gIHRyeSB7XG4gICAgJy8uLydbS0VZXShyZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0cnkge1xuICAgICAgcmVbTUFUQ0hdID0gZmFsc2U7XG4gICAgICByZXR1cm4gIScvLi8nW0tFWV0ocmUpO1xuICAgIH0gY2F0Y2ggKGYpIHsgLyogZW1wdHkgKi8gfVxuICB9IHJldHVybiB0cnVlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5leGVjJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5cbnZhciBTUEVDSUVTID0gd2tzKCdzcGVjaWVzJyk7XG5cbnZhciBSRVBMQUNFX1NVUFBPUlRTX05BTUVEX0dST1VQUyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vICNyZXBsYWNlIG5lZWRzIGJ1aWx0LWluIHN1cHBvcnQgZm9yIG5hbWVkIGdyb3Vwcy5cbiAgLy8gI21hdGNoIHdvcmtzIGZpbmUgYmVjYXVzZSBpdCBqdXN0IHJldHVybiB0aGUgZXhlYyByZXN1bHRzLCBldmVuIGlmIGl0IGhhc1xuICAvLyBhIFwiZ3JvcHNcIiBwcm9wZXJ0eS5cbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBDaHJvbWUgNTEgaGFzIGEgYnVnZ3kgXCJzcGxpdFwiIGltcGxlbWVudGF0aW9uIHdoZW4gUmVnRXhwI2V4ZWMgIT09IG5hdGl2ZUV4ZWNcbiAgdmFyIHJlID0gLyg/OikvO1xuICB2YXIgb3JpZ2luYWxFeGVjID0gcmUuZXhlYztcbiAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9yaWdpbmFsRXhlYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9O1xuICB2YXIgcmVzdWx0ID0gJ2FiJy5zcGxpdChyZSk7XG4gIHJldHVybiByZXN1bHQubGVuZ3RoID09PSAyICYmIHJlc3VsdFswXSA9PT0gJ2EnICYmIHJlc3VsdFsxXSA9PT0gJ2InO1xufSkoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZLCBsZW5ndGgsIGV4ZWMpIHtcbiAgdmFyIFNZTUJPTCA9IHdrcyhLRVkpO1xuXG4gIHZhciBERUxFR0FURVNfVE9fU1lNQk9MID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBTdHJpbmcgbWV0aG9kcyBjYWxsIHN5bWJvbC1uYW1lZCBSZWdFcCBtZXRob2RzXG4gICAgdmFyIE8gPSB7fTtcbiAgICBPW1NZTUJPTF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9O1xuICAgIHJldHVybiAnJ1tLRVldKE8pICE9IDc7XG4gIH0pO1xuXG4gIHZhciBERUxFR0FURVNfVE9fRVhFQyA9IERFTEVHQVRFU19UT19TWU1CT0wgPyAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG4gICAgcmUuZXhlYyA9IGZ1bmN0aW9uICgpIHsgZXhlY0NhbGxlZCA9IHRydWU7IHJldHVybiBudWxsOyB9O1xuICAgIGlmIChLRVkgPT09ICdzcGxpdCcpIHtcbiAgICAgIC8vIFJlZ0V4cFtAQHNwbGl0XSBkb2Vzbid0IGNhbGwgdGhlIHJlZ2V4J3MgZXhlYyBtZXRob2QsIGJ1dCBmaXJzdCBjcmVhdGVzXG4gICAgICAvLyBhIG5ldyBvbmUuIFdlIG5lZWQgdG8gcmV0dXJuIHRoZSBwYXRjaGVkIHJlZ2V4IHdoZW4gY3JlYXRpbmcgdGhlIG5ldyBvbmUuXG4gICAgICByZS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgICAgcmUuY29uc3RydWN0b3JbU1BFQ0lFU10gPSBmdW5jdGlvbiAoKSB7IHJldHVybiByZTsgfTtcbiAgICB9XG4gICAgcmVbU1lNQk9MXSgnJyk7XG4gICAgcmV0dXJuICFleGVjQ2FsbGVkO1xuICB9KSA6IHVuZGVmaW5lZDtcblxuICBpZiAoXG4gICAgIURFTEVHQVRFU19UT19TWU1CT0wgfHxcbiAgICAhREVMRUdBVEVTX1RPX0VYRUMgfHxcbiAgICAoS0VZID09PSAncmVwbGFjZScgJiYgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTKSB8fFxuICAgIChLRVkgPT09ICdzcGxpdCcgJiYgIVNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQylcbiAgKSB7XG4gICAgdmFyIG5hdGl2ZVJlZ0V4cE1ldGhvZCA9IC8uL1tTWU1CT0xdO1xuICAgIHZhciBmbnMgPSBleGVjKFxuICAgICAgZGVmaW5lZCxcbiAgICAgIFNZTUJPTCxcbiAgICAgICcnW0tFWV0sXG4gICAgICBmdW5jdGlvbiBtYXliZUNhbGxOYXRpdmUobmF0aXZlTWV0aG9kLCByZWdleHAsIHN0ciwgYXJnMiwgZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgaWYgKHJlZ2V4cC5leGVjID09PSByZWdleHBFeGVjKSB7XG4gICAgICAgICAgaWYgKERFTEVHQVRFU19UT19TWU1CT0wgJiYgIWZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAgIC8vIHBvbHlmaWxsZWQgZnVuY3Rpb24pLCBsZWFzaW5nIHRvIGluZmluaXRlIHJlY3Vyc2lvbi5cbiAgICAgICAgICAgIC8vIFdlIGF2b2lkIGl0IGJ5IGRpcmVjdGx5IGNhbGxpbmcgdGhlIG5hdGl2ZSBAQG1ldGhvZCBtZXRob2QuXG4gICAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogbmF0aXZlUmVnRXhwTWV0aG9kLmNhbGwocmVnZXhwLCBzdHIsIGFyZzIpIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVNZXRob2QuY2FsbChzdHIsIHJlZ2V4cCwgYXJnMikgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgICAgfVxuICAgICk7XG4gICAgdmFyIHN0cmZuID0gZm5zWzBdO1xuICAgIHZhciByeGZuID0gZm5zWzFdO1xuXG4gICAgcmVkZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgS0VZLCBzdHJmbik7XG4gICAgaGlkZShSZWdFeHAucHJvdG90eXBlLCBTWU1CT0wsIGxlbmd0aCA9PSAyXG4gICAgICAvLyAyMS4yLjUuOCBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV0oc3RyaW5nLCByZXBsYWNlVmFsdWUpXG4gICAgICAvLyAyMS4yLjUuMTEgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XShzdHJpbmcsIGxpbWl0KVxuICAgICAgPyBmdW5jdGlvbiAoc3RyaW5nLCBhcmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMsIGFyZyk7IH1cbiAgICAgIC8vIDIxLjIuNS42IFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF0oc3RyaW5nKVxuICAgICAgLy8gMjEuMi41LjkgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF0oc3RyaW5nKVxuICAgICAgOiBmdW5jdGlvbiAoc3RyaW5nKSB7IHJldHVybiByeGZuLmNhbGwoc3RyaW5nLCB0aGlzKTsgfVxuICAgICk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFnc1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSBhbk9iamVjdCh0aGlzKTtcbiAgdmFyIHJlc3VsdCA9ICcnO1xuICBpZiAodGhhdC5nbG9iYWwpIHJlc3VsdCArPSAnZyc7XG4gIGlmICh0aGF0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAnaSc7XG4gIGlmICh0aGF0Lm11bHRpbGluZSkgcmVzdWx0ICs9ICdtJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQuc3RpY2t5KSByZXN1bHQgKz0gJ3knO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUZsYXR0ZW5JbnRvQXJyYXlcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgSVNfQ09OQ0FUX1NQUkVBREFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbmZ1bmN0aW9uIGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgc291cmNlLCBzb3VyY2VMZW4sIHN0YXJ0LCBkZXB0aCwgbWFwcGVyLCB0aGlzQXJnKSB7XG4gIHZhciB0YXJnZXRJbmRleCA9IHN0YXJ0O1xuICB2YXIgc291cmNlSW5kZXggPSAwO1xuICB2YXIgbWFwRm4gPSBtYXBwZXIgPyBjdHgobWFwcGVyLCB0aGlzQXJnLCAzKSA6IGZhbHNlO1xuICB2YXIgZWxlbWVudCwgc3ByZWFkYWJsZTtcblxuICB3aGlsZSAoc291cmNlSW5kZXggPCBzb3VyY2VMZW4pIHtcbiAgICBpZiAoc291cmNlSW5kZXggaW4gc291cmNlKSB7XG4gICAgICBlbGVtZW50ID0gbWFwRm4gPyBtYXBGbihzb3VyY2Vbc291cmNlSW5kZXhdLCBzb3VyY2VJbmRleCwgb3JpZ2luYWwpIDogc291cmNlW3NvdXJjZUluZGV4XTtcblxuICAgICAgc3ByZWFkYWJsZSA9IGZhbHNlO1xuICAgICAgaWYgKGlzT2JqZWN0KGVsZW1lbnQpKSB7XG4gICAgICAgIHNwcmVhZGFibGUgPSBlbGVtZW50W0lTX0NPTkNBVF9TUFJFQURBQkxFXTtcbiAgICAgICAgc3ByZWFkYWJsZSA9IHNwcmVhZGFibGUgIT09IHVuZGVmaW5lZCA/ICEhc3ByZWFkYWJsZSA6IGlzQXJyYXkoZWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzcHJlYWRhYmxlICYmIGRlcHRoID4gMCkge1xuICAgICAgICB0YXJnZXRJbmRleCA9IGZsYXR0ZW5JbnRvQXJyYXkodGFyZ2V0LCBvcmlnaW5hbCwgZWxlbWVudCwgdG9MZW5ndGgoZWxlbWVudC5sZW5ndGgpLCB0YXJnZXRJbmRleCwgZGVwdGggLSAxKSAtIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodGFyZ2V0SW5kZXggPj0gMHgxZmZmZmZmZmZmZmZmZikgdGhyb3cgVHlwZUVycm9yKCk7XG4gICAgICAgIHRhcmdldFt0YXJnZXRJbmRleF0gPSBlbGVtZW50O1xuICAgICAgfVxuXG4gICAgICB0YXJnZXRJbmRleCsrO1xuICAgIH1cbiAgICBzb3VyY2VJbmRleCsrO1xuICB9XG4gIHJldHVybiB0YXJnZXRJbmRleDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmbGF0dGVuSW50b0FycmF5O1xuIiwidmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBCUkVBSyA9IHt9O1xudmFyIFJFVFVSTiA9IHt9O1xudmFyIGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgZW50cmllcywgZm4sIHRoYXQsIElURVJBVE9SKSB7XG4gIHZhciBpdGVyRm4gPSBJVEVSQVRPUiA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXJhYmxlOyB9IDogZ2V0SXRlckZuKGl0ZXJhYmxlKTtcbiAgdmFyIGYgPSBjdHgoZm4sIHRoYXQsIGVudHJpZXMgPyAyIDogMSk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGgsIHN0ZXAsIGl0ZXJhdG9yLCByZXN1bHQ7XG4gIGlmICh0eXBlb2YgaXRlckZuICE9ICdmdW5jdGlvbicpIHRocm93IFR5cGVFcnJvcihpdGVyYWJsZSArICcgaXMgbm90IGl0ZXJhYmxlIScpO1xuICAvLyBmYXN0IGNhc2UgZm9yIGFycmF5cyB3aXRoIGRlZmF1bHQgaXRlcmF0b3JcbiAgaWYgKGlzQXJyYXlJdGVyKGl0ZXJGbikpIGZvciAobGVuZ3RoID0gdG9MZW5ndGgoaXRlcmFibGUubGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICByZXN1bHQgPSBlbnRyaWVzID8gZihhbk9iamVjdChzdGVwID0gaXRlcmFibGVbaW5kZXhdKVswXSwgc3RlcFsxXSkgOiBmKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH0gZWxzZSBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoaXRlcmFibGUpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7KSB7XG4gICAgcmVzdWx0ID0gY2FsbChpdGVyYXRvciwgZiwgc3RlcC52YWx1ZSwgZW50cmllcyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gQlJFQUsgfHwgcmVzdWx0ID09PSBSRVRVUk4pIHJldHVybiByZXN1bHQ7XG4gIH1cbn07XG5leHBvcnRzLkJSRUFLID0gQlJFQUs7XG5leHBvcnRzLlJFVFVSTiA9IFJFVFVSTjtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ25hdGl2ZS1mdW5jdGlvbi10by1zdHJpbmcnLCBGdW5jdGlvbi50b1N0cmluZyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICA6IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5pZiAodHlwZW9mIF9fZyA9PSAnbnVtYmVyJykgX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG4iLCJ2YXIgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoaXQsIGtleSk7XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbiAob2JqZWN0LCBrZXksIHZhbHVlKSB7XG4gIG9iamVjdFtrZXldID0gdmFsdWU7XG4gIHJldHVybiBvYmplY3Q7XG59O1xuIiwidmFyIGRvY3VtZW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuZG9jdW1lbnQ7XG5tb2R1bGUuZXhwb3J0cyA9IGRvY3VtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnZGl2JyksICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBzZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldDtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHRhcmdldCwgQykge1xuICB2YXIgUyA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgdmFyIFA7XG4gIGlmIChTICE9PSBDICYmIHR5cGVvZiBTID09ICdmdW5jdGlvbicgJiYgKFAgPSBTLnByb3RvdHlwZSkgIT09IEMucHJvdG90eXBlICYmIGlzT2JqZWN0KFApICYmIHNldFByb3RvdHlwZU9mKSB7XG4gICAgc2V0UHJvdG90eXBlT2YodGhhdCwgUCk7XG4gIH0gcmV0dXJuIHRoYXQ7XG59O1xuIiwiLy8gZmFzdCBhcHBseSwgaHR0cDovL2pzcGVyZi5sbmtpdC5jb20vZmFzdC1hcHBseS81XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgYXJncywgdGhhdCkge1xuICB2YXIgdW4gPSB0aGF0ID09PSB1bmRlZmluZWQ7XG4gIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICBjYXNlIDA6IHJldHVybiB1biA/IGZuKClcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCk7XG4gICAgY2FzZSAxOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdKTtcbiAgICBjYXNlIDI6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgIGNhc2UgMzogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgY2FzZSA0OiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgfSByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJncyk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNvZihpdCkgPT0gJ1N0cmluZycgPyBpdC5zcGxpdCgnJykgOiBPYmplY3QoaXQpO1xufTtcbiIsIi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3JcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIEFycmF5UHJvdG8gPSBBcnJheS5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG9bSVRFUkFUT1JdID09PSBpdCk7XG59O1xuIiwiLy8gNy4yLjIgSXNBcnJheShhcmd1bWVudClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiBpc0FycmF5KGFyZykge1xuICByZXR1cm4gY29mKGFyZykgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNJbnRlZ2VyKGl0KSB7XG4gIHJldHVybiAhaXNPYmplY3QoaXQpICYmIGlzRmluaXRlKGl0KSAmJiBmbG9vcihpdCkgPT09IGl0O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuIiwiLy8gNy4yLjggSXNSZWdFeHAoYXJndW1lbnQpXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY29mKGl0KSA9PSAnUmVnRXhwJyk7XG59O1xuIiwiLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYXRvciwgZm4sIHZhbHVlLCBlbnRyaWVzKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVudHJpZXMgPyBmbihhbk9iamVjdCh2YWx1ZSlbMF0sIHZhbHVlWzFdKSA6IGZuKHZhbHVlKTtcbiAgLy8gNy40LjYgSXRlcmF0b3JDbG9zZShpdGVyYXRvciwgY29tcGxldGlvbilcbiAgfSBjYXRjaCAoZSkge1xuICAgIHZhciByZXQgPSBpdGVyYXRvclsncmV0dXJuJ107XG4gICAgaWYgKHJldCAhPT0gdW5kZWZpbmVkKSBhbk9iamVjdChyZXQuY2FsbChpdGVyYXRvcikpO1xuICAgIHRocm93IGU7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGRlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG5cbi8vIDI1LjEuMi4xLjEgJUl0ZXJhdG9yUHJvdG90eXBlJVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19oaWRlJykoSXRlcmF0b3JQcm90b3R5cGUsIHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIE5BTUUsIG5leHQpIHtcbiAgQ29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlLCB7IG5leHQ6IGRlc2NyaXB0b3IoMSwgbmV4dCkgfSk7XG4gIHNldFRvU3RyaW5nVGFnKENvbnN0cnVjdG9yLCBOQU1FICsgJyBJdGVyYXRvcicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbnZhciAkaXRlckNyZWF0ZSA9IHJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1kgPSAhKFtdLmtleXMgJiYgJ25leHQnIGluIFtdLmtleXMoKSk7IC8vIFNhZmFyaSBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbnZhciBGRl9JVEVSQVRPUiA9ICdAQGl0ZXJhdG9yJztcbnZhciBLRVlTID0gJ2tleXMnO1xudmFyIFZBTFVFUyA9ICd2YWx1ZXMnO1xuXG52YXIgcmV0dXJuVGhpcyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEJhc2UsIE5BTUUsIENvbnN0cnVjdG9yLCBuZXh0LCBERUZBVUxULCBJU19TRVQsIEZPUkNFRCkge1xuICAkaXRlckNyZWF0ZShDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCk7XG4gIHZhciBnZXRNZXRob2QgPSBmdW5jdGlvbiAoa2luZCkge1xuICAgIGlmICghQlVHR1kgJiYga2luZCBpbiBwcm90bykgcmV0dXJuIHByb3RvW2tpbmRdO1xuICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgY2FzZSBLRVlTOiByZXR1cm4gZnVuY3Rpb24ga2V5cygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgIH0gcmV0dXJuIGZ1bmN0aW9uIGVudHJpZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gIH07XG4gIHZhciBUQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBERUZfVkFMVUVTID0gREVGQVVMVCA9PSBWQUxVRVM7XG4gIHZhciBWQUxVRVNfQlVHID0gZmFsc2U7XG4gIHZhciBwcm90byA9IEJhc2UucHJvdG90eXBlO1xuICB2YXIgJG5hdGl2ZSA9IHByb3RvW0lURVJBVE9SXSB8fCBwcm90b1tGRl9JVEVSQVRPUl0gfHwgREVGQVVMVCAmJiBwcm90b1tERUZBVUxUXTtcbiAgdmFyICRkZWZhdWx0ID0gJG5hdGl2ZSB8fCBnZXRNZXRob2QoREVGQVVMVCk7XG4gIHZhciAkZW50cmllcyA9IERFRkFVTFQgPyAhREVGX1ZBTFVFUyA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKCdlbnRyaWVzJykgOiB1bmRlZmluZWQ7XG4gIHZhciAkYW55TmF0aXZlID0gTkFNRSA9PSAnQXJyYXknID8gcHJvdG8uZW50cmllcyB8fCAkbmF0aXZlIDogJG5hdGl2ZTtcbiAgdmFyIG1ldGhvZHMsIGtleSwgSXRlcmF0b3JQcm90b3R5cGU7XG4gIC8vIEZpeCBuYXRpdmVcbiAgaWYgKCRhbnlOYXRpdmUpIHtcbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvdHlwZU9mKCRhbnlOYXRpdmUuY2FsbChuZXcgQmFzZSgpKSk7XG4gICAgaWYgKEl0ZXJhdG9yUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlICYmIEl0ZXJhdG9yUHJvdG90eXBlLm5leHQpIHtcbiAgICAgIC8vIFNldCBAQHRvU3RyaW5nVGFnIHRvIG5hdGl2ZSBpdGVyYXRvcnNcbiAgICAgIHNldFRvU3RyaW5nVGFnKEl0ZXJhdG9yUHJvdG90eXBlLCBUQUcsIHRydWUpO1xuICAgICAgLy8gZml4IGZvciBzb21lIG9sZCBlbmdpbmVzXG4gICAgICBpZiAoIUxJQlJBUlkgJiYgdHlwZW9mIEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSAhPSAnZnVuY3Rpb24nKSBoaWRlKEl0ZXJhdG9yUHJvdG90eXBlLCBJVEVSQVRPUiwgcmV0dXJuVGhpcyk7XG4gICAgfVxuICB9XG4gIC8vIGZpeCBBcnJheSN7dmFsdWVzLCBAQGl0ZXJhdG9yfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKERFRl9WQUxVRVMgJiYgJG5hdGl2ZSAmJiAkbmF0aXZlLm5hbWUgIT09IFZBTFVFUykge1xuICAgIFZBTFVFU19CVUcgPSB0cnVlO1xuICAgICRkZWZhdWx0ID0gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gJG5hdGl2ZS5jYWxsKHRoaXMpOyB9O1xuICB9XG4gIC8vIERlZmluZSBpdGVyYXRvclxuICBpZiAoKCFMSUJSQVJZIHx8IEZPUkNFRCkgJiYgKEJVR0dZIHx8IFZBTFVFU19CVUcgfHwgIXByb3RvW0lURVJBVE9SXSkpIHtcbiAgICBoaWRlKHByb3RvLCBJVEVSQVRPUiwgJGRlZmF1bHQpO1xuICB9XG4gIC8vIFBsdWcgZm9yIGxpYnJhcnlcbiAgSXRlcmF0b3JzW05BTUVdID0gJGRlZmF1bHQ7XG4gIEl0ZXJhdG9yc1tUQUddID0gcmV0dXJuVGhpcztcbiAgaWYgKERFRkFVTFQpIHtcbiAgICBtZXRob2RzID0ge1xuICAgICAgdmFsdWVzOiBERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoVkFMVUVTKSxcbiAgICAgIGtleXM6IElTX1NFVCA/ICRkZWZhdWx0IDogZ2V0TWV0aG9kKEtFWVMpLFxuICAgICAgZW50cmllczogJGVudHJpZXNcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoa2V5IGluIG1ldGhvZHMpIHtcbiAgICAgIGlmICghKGtleSBpbiBwcm90bykpIHJlZGVmaW5lKHByb3RvLCBrZXksIG1ldGhvZHNba2V5XSk7XG4gICAgfSBlbHNlICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKEJVR0dZIHx8IFZBTFVFU19CVUcpLCBOQU1FLCBtZXRob2RzKTtcbiAgfVxuICByZXR1cm4gbWV0aG9kcztcbn07XG4iLCJ2YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBTQUZFX0NMT1NJTkcgPSBmYWxzZTtcblxudHJ5IHtcbiAgdmFyIHJpdGVyID0gWzddW0lURVJBVE9SXSgpO1xuICByaXRlclsncmV0dXJuJ10gPSBmdW5jdGlvbiAoKSB7IFNBRkVfQ0xPU0lORyA9IHRydWU7IH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby10aHJvdy1saXRlcmFsXG4gIEFycmF5LmZyb20ocml0ZXIsIGZ1bmN0aW9uICgpIHsgdGhyb3cgMjsgfSk7XG59IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgc2tpcENsb3NpbmcpIHtcbiAgaWYgKCFza2lwQ2xvc2luZyAmJiAhU0FGRV9DTE9TSU5HKSByZXR1cm4gZmFsc2U7XG4gIHZhciBzYWZlID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIGFyciA9IFs3XTtcbiAgICB2YXIgaXRlciA9IGFycltJVEVSQVRPUl0oKTtcbiAgICBpdGVyLm5leHQgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB7IGRvbmU6IHNhZmUgPSB0cnVlIH07IH07XG4gICAgYXJyW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGl0ZXI7IH07XG4gICAgZXhlYyhhcnIpO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIHNhZmU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZG9uZSwgdmFsdWUpIHtcbiAgcmV0dXJuIHsgdmFsdWU6IHZhbHVlLCBkb25lOiAhIWRvbmUgfTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmYWxzZTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG0xID0gTWF0aC5leHBtMTtcbm1vZHVsZS5leHBvcnRzID0gKCEkZXhwbTFcbiAgLy8gT2xkIEZGIGJ1Z1xuICB8fCAkZXhwbTEoMTApID4gMjIwMjUuNDY1Nzk0ODA2NzE5IHx8ICRleHBtMSgxMCkgPCAyMjAyNS40NjU3OTQ4MDY3MTY1MTY4XG4gIC8vIFRvciBCcm93c2VyIGJ1Z1xuICB8fCAkZXhwbTEoLTJlLTE3KSAhPSAtMmUtMTdcbikgPyBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA9PSAwID8geCA6IHggPiAtMWUtNiAmJiB4IDwgMWUtNiA/IHggKyB4ICogeCAvIDIgOiBNYXRoLmV4cCh4KSAtIDE7XG59IDogJGV4cG0xO1xuIiwiLy8gMjAuMi4yLjE2IE1hdGguZnJvdW5kKHgpXG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xudmFyIHBvdyA9IE1hdGgucG93O1xudmFyIEVQU0lMT04gPSBwb3coMiwgLTUyKTtcbnZhciBFUFNJTE9OMzIgPSBwb3coMiwgLTIzKTtcbnZhciBNQVgzMiA9IHBvdygyLCAxMjcpICogKDIgLSBFUFNJTE9OMzIpO1xudmFyIE1JTjMyID0gcG93KDIsIC0xMjYpO1xuXG52YXIgcm91bmRUaWVzVG9FdmVuID0gZnVuY3Rpb24gKG4pIHtcbiAgcmV0dXJuIG4gKyAxIC8gRVBTSUxPTiAtIDEgLyBFUFNJTE9OO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLmZyb3VuZCB8fCBmdW5jdGlvbiBmcm91bmQoeCkge1xuICB2YXIgJGFicyA9IE1hdGguYWJzKHgpO1xuICB2YXIgJHNpZ24gPSBzaWduKHgpO1xuICB2YXIgYSwgcmVzdWx0O1xuICBpZiAoJGFicyA8IE1JTjMyKSByZXR1cm4gJHNpZ24gKiByb3VuZFRpZXNUb0V2ZW4oJGFicyAvIE1JTjMyIC8gRVBTSUxPTjMyKSAqIE1JTjMyICogRVBTSUxPTjMyO1xuICBhID0gKDEgKyBFUFNJTE9OMzIgLyBFUFNJTE9OKSAqICRhYnM7XG4gIHJlc3VsdCA9IGEgLSAoYSAtICRhYnMpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIGlmIChyZXN1bHQgPiBNQVgzMiB8fCByZXN1bHQgIT0gcmVzdWx0KSByZXR1cm4gJHNpZ24gKiBJbmZpbml0eTtcbiAgcmV0dXJuICRzaWduICogcmVzdWx0O1xufTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgubG9nMXAgfHwgZnVuY3Rpb24gbG9nMXAoeCkge1xuICByZXR1cm4gKHggPSAreCkgPiAtMWUtOCAmJiB4IDwgMWUtOCA/IHggLSB4ICogeCAvIDIgOiBNYXRoLmxvZygxICsgeCk7XG59O1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNjYWxlIHx8IGZ1bmN0aW9uIHNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICBpZiAoXG4gICAgYXJndW1lbnRzLmxlbmd0aCA9PT0gMFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgeCAhPSB4XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkxvdyAhPSBpbkxvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgaW5IaWdoICE9IGluSGlnaFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0TG93ICE9IG91dExvd1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgICAgfHwgb3V0SGlnaCAhPSBvdXRIaWdoXG4gICkgcmV0dXJuIE5hTjtcbiAgaWYgKHggPT09IEluZmluaXR5IHx8IHggPT09IC1JbmZpbml0eSkgcmV0dXJuIHg7XG4gIHJldHVybiAoeCAtIGluTG93KSAqIChvdXRIaWdoIC0gb3V0TG93KSAvIChpbkhpZ2ggLSBpbkxvdykgKyBvdXRMb3c7XG59O1xuIiwiLy8gMjAuMi4yLjI4IE1hdGguc2lnbih4KVxubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnNpZ24gfHwgZnVuY3Rpb24gc2lnbih4KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgfHwgeCAhPSB4ID8geCA6IHggPCAwID8gLTEgOiAxO1xufTtcbiIsInZhciBNRVRBID0gcmVxdWlyZSgnLi9fdWlkJykoJ21ldGEnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHNldERlc2MgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGlkID0gMDtcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlIHx8IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59O1xudmFyIEZSRUVaRSA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xudmFyIHNldE1ldGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgc2V0RGVzYyhpdCwgTUVUQSwgeyB2YWx1ZToge1xuICAgIGk6ICdPJyArICsraWQsIC8vIG9iamVjdCBJRFxuICAgIHc6IHt9ICAgICAgICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gfSk7XG59O1xudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gcHJpbWl0aXZlIHdpdGggcHJlZml4XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiAodHlwZW9mIGl0ID09ICdzdHJpbmcnID8gJ1MnIDogJ1AnKSArIGl0O1xuICBpZiAoIWhhcyhpdCwgTUVUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YShpdCk7XG4gIC8vIHJldHVybiBvYmplY3QgSURcbiAgfSByZXR1cm4gaXRbTUVUQV0uaTtcbn07XG52YXIgZ2V0V2VhayA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gdHJ1ZTtcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gZmFsc2U7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIGhhc2ggd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSByZXR1cm4gaXRbTUVUQV0udztcbn07XG4vLyBhZGQgbWV0YWRhdGEgb24gZnJlZXplLWZhbWlseSBtZXRob2RzIGNhbGxpbmdcbnZhciBvbkZyZWV6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoRlJFRVpFICYmIG1ldGEuTkVFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXMoaXQsIE1FVEEpKSBzZXRNZXRhKGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIEtFWTogTUVUQSxcbiAgTkVFRDogZmFsc2UsXG4gIGZhc3RLZXk6IGZhc3RLZXksXG4gIGdldFdlYWs6IGdldFdlYWssXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcbiIsInZhciBNYXAgPSByZXF1aXJlKCcuL2VzNi5tYXAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ21ldGFkYXRhJyk7XG52YXIgc3RvcmUgPSBzaGFyZWQuc3RvcmUgfHwgKHNoYXJlZC5zdG9yZSA9IG5ldyAocmVxdWlyZSgnLi9lczYud2Vhay1tYXAnKSkoKSk7XG5cbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gZnVuY3Rpb24gKHRhcmdldCwgdGFyZ2V0S2V5LCBjcmVhdGUpIHtcbiAgdmFyIHRhcmdldE1ldGFkYXRhID0gc3RvcmUuZ2V0KHRhcmdldCk7XG4gIGlmICghdGFyZ2V0TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICBzdG9yZS5zZXQodGFyZ2V0LCB0YXJnZXRNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH1cbiAgdmFyIGtleU1ldGFkYXRhID0gdGFyZ2V0TWV0YWRhdGEuZ2V0KHRhcmdldEtleSk7XG4gIGlmICgha2V5TWV0YWRhdGEpIHtcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB0YXJnZXRNZXRhZGF0YS5zZXQodGFyZ2V0S2V5LCBrZXlNZXRhZGF0YSA9IG5ldyBNYXAoKSk7XG4gIH0gcmV0dXJuIGtleU1ldGFkYXRhO1xufTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogbWV0YWRhdGFNYXAuaGFzKE1ldGFkYXRhS2V5KTtcbn07XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKE8sIFAsIGZhbHNlKTtcbiAgcmV0dXJuIG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBtZXRhZGF0YU1hcC5nZXQoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlLCBPLCBQKSB7XG4gIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgdHJ1ZSkuc2V0KE1ldGFkYXRhS2V5LCBNZXRhZGF0YVZhbHVlKTtcbn07XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCh0YXJnZXQsIHRhcmdldEtleSwgZmFsc2UpO1xuICB2YXIga2V5cyA9IFtdO1xuICBpZiAobWV0YWRhdGFNYXApIG1ldGFkYXRhTWFwLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyBrZXlzLnB1c2goa2V5KTsgfSk7XG4gIHJldHVybiBrZXlzO1xufTtcbnZhciB0b01ldGFLZXkgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIGl0ID09ICdzeW1ib2wnID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcbnZhciBleHAgPSBmdW5jdGlvbiAoTykge1xuICAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCBPKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdG9yZTogc3RvcmUsXG4gIG1hcDogZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCxcbiAgaGFzOiBvcmRpbmFyeUhhc093bk1ldGFkYXRhLFxuICBnZXQ6IG9yZGluYXJ5R2V0T3duTWV0YWRhdGEsXG4gIHNldDogb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSxcbiAga2V5czogb3JkaW5hcnlPd25NZXRhZGF0YUtleXMsXG4gIGtleTogdG9NZXRhS2V5LFxuICBleHA6IGV4cFxufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBtYWNyb3Rhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIE9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaGVhZCwgbGFzdCwgbm90aWZ5O1xuXG4gIHZhciBmbHVzaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcGFyZW50LCBmbjtcbiAgICBpZiAoaXNOb2RlICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoaGVhZCkgbm90aWZ5KCk7XG4gICAgICAgIGVsc2UgbGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9IGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LmVudGVyKCk7XG4gIH07XG5cbiAgLy8gTm9kZS5qc1xuICBpZiAoaXNOb2RlKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gYnJvd3NlcnMgd2l0aCBNdXRhdGlvbk9ic2VydmVyLCBleGNlcHQgaU9TIFNhZmFyaSAtIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMzlcbiAgfSBlbHNlIGlmIChPYnNlcnZlciAmJiAhKGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci5zdGFuZGFsb25lKSkge1xuICAgIHZhciB0b2dnbGUgPSB0cnVlO1xuICAgIHZhciBub2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG5ldyBPYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICB2YXIgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHByb21pc2UudGhlbihmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnXG4gIC8vIC0gb25yZWFkeXN0YXRlY2hhbmdlXG4gIC8vIC0gc2V0VGltZW91dFxuICB9IGVsc2Uge1xuICAgIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIHN0cmFuZ2UgSUUgKyB3ZWJwYWNrIGRldiBzZXJ2ZXIgYnVnIC0gdXNlIC5jYWxsKGdsb2JhbClcbiAgICAgIG1hY3JvdGFzay5jYWxsKGdsb2JhbCwgZmx1c2gpO1xuICAgIH07XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKGZuKSB7XG4gICAgdmFyIHRhc2sgPSB7IGZuOiBmbiwgbmV4dDogdW5kZWZpbmVkIH07XG4gICAgaWYgKGxhc3QpIGxhc3QubmV4dCA9IHRhc2s7XG4gICAgaWYgKCFoZWFkKSB7XG4gICAgICBoZWFkID0gdGFzaztcbiAgICAgIG5vdGlmeSgpO1xuICAgIH0gbGFzdCA9IHRhc2s7XG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjUuNC4xLjUgTmV3UHJvbWlzZUNhcGFiaWxpdHkoQylcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG5cbmZ1bmN0aW9uIFByb21pc2VDYXBhYmlsaXR5KEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFGdW5jdGlvbihyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhRnVuY3Rpb24ocmVqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIChDKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMTkuMS4yLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSwgLi4uKVxudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpO1xudmFyICRhc3NpZ24gPSBPYmplY3QuYXNzaWduO1xuXG4vLyBzaG91bGQgd29yayB3aXRoIHN5bWJvbHMgYW5kIHNob3VsZCBoYXZlIGRldGVybWluaXN0aWMgcHJvcGVydHkgb3JkZXIgKFY4IGJ1Zylcbm1vZHVsZS5leHBvcnRzID0gISRhc3NpZ24gfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBBID0ge307XG4gIHZhciBCID0ge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICB2YXIgUyA9IFN5bWJvbCgpO1xuICB2YXIgSyA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdCc7XG4gIEFbU10gPSA3O1xuICBLLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7IEJba10gPSBrOyB9KTtcbiAgcmV0dXJuICRhc3NpZ24oe30sIEEpW1NdICE9IDcgfHwgT2JqZWN0LmtleXMoJGFzc2lnbih7fSwgQikpLmpvaW4oJycpICE9IEs7XG59KSA/IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHZhciBUID0gdG9PYmplY3QodGFyZ2V0KTtcbiAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICB2YXIgaW5kZXggPSAxO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICB3aGlsZSAoYUxlbiA+IGluZGV4KSB7XG4gICAgdmFyIFMgPSBJT2JqZWN0KGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgdmFyIGtleXMgPSBnZXRTeW1ib2xzID8gZ2V0S2V5cyhTKS5jb25jYXQoZ2V0U3ltYm9scyhTKSkgOiBnZXRLZXlzKFMpO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaikge1xuICAgICAga2V5ID0ga2V5c1tqKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChTLCBrZXkpKSBUW2tleV0gPSBTW2tleV07XG4gICAgfVxuICB9IHJldHVybiBUO1xufSA6ICRhc3NpZ247XG4iLCIvLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGRQcyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBFbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIGNyZWF0ZURpY3QgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIFRocmFzaCwgd2FzdGUgYW5kIHNvZG9teTogSUUgR0MgYnVnXG4gIHZhciBpZnJhbWUgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2lmcmFtZScpO1xuICB2YXIgaSA9IGVudW1CdWdLZXlzLmxlbmd0aDtcbiAgdmFyIGx0ID0gJzwnO1xuICB2YXIgZ3QgPSAnPic7XG4gIHZhciBpZnJhbWVEb2N1bWVudDtcbiAgaWZyYW1lLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIHJlcXVpcmUoJy4vX2h0bWwnKS5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICBpZnJhbWUuc3JjID0gJ2phdmFzY3JpcHQ6JzsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zY3JpcHQtdXJsXG4gIC8vIGNyZWF0ZURpY3QgPSBpZnJhbWUuY29udGVudFdpbmRvdy5PYmplY3Q7XG4gIC8vIGh0bWwucmVtb3ZlQ2hpbGQoaWZyYW1lKTtcbiAgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudFdpbmRvdy5kb2N1bWVudDtcbiAgaWZyYW1lRG9jdW1lbnQub3BlbigpO1xuICBpZnJhbWVEb2N1bWVudC53cml0ZShsdCArICdzY3JpcHQnICsgZ3QgKyAnZG9jdW1lbnQuRj1PYmplY3QnICsgbHQgKyAnL3NjcmlwdCcgKyBndCk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIGNyZWF0ZURpY3QgPSBpZnJhbWVEb2N1bWVudC5GO1xuICB3aGlsZSAoaS0tKSBkZWxldGUgY3JlYXRlRGljdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2ldXTtcbiAgcmV0dXJuIGNyZWF0ZURpY3QoKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmNyZWF0ZSB8fCBmdW5jdGlvbiBjcmVhdGUoTywgUHJvcGVydGllcykge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoTyAhPT0gbnVsbCkge1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHkoKTtcbiAgICBFbXB0eVtQUk9UT1RZUEVdID0gbnVsbDtcbiAgICAvLyBhZGQgXCJfX3Byb3RvX19cIiBmb3IgT2JqZWN0LmdldFByb3RvdHlwZU9mIHBvbHlmaWxsXG4gICAgcmVzdWx0W0lFX1BST1RPXSA9IE87XG4gIH0gZWxzZSByZXN1bHQgPSBjcmVhdGVEaWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkUHMocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBkUCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIFAgPSB0b1ByaW1pdGl2ZShQLCB0cnVlKTtcbiAgYW5PYmplY3QoQXR0cmlidXRlcyk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyBUeXBlRXJyb3IoJ0FjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIScpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMgOiBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpIHtcbiAgYW5PYmplY3QoTyk7XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhQcm9wZXJ0aWVzKTtcbiAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICB2YXIgaSA9IDA7XG4gIHZhciBQO1xuICB3aGlsZSAobGVuZ3RoID4gaSkgZFAuZihPLCBQID0ga2V5c1tpKytdLCBQcm9wZXJ0aWVzW1BdKTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gRm9yY2VkIHJlcGxhY2VtZW50IHByb3RvdHlwZSBhY2Nlc3NvcnMgbWV0aG9kc1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19saWJyYXJ5JykgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICB2YXIgSyA9IE1hdGgucmFuZG9tKCk7XG4gIC8vIEluIEZGIHRocm93cyBvbmx5IGRlZmluZSBtZXRob2RzXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZiwgbm8tdXNlbGVzcy1jYWxsXG4gIF9fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLCBLLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xuICBkZWxldGUgcmVxdWlyZSgnLi9fZ2xvYmFsJylbS107XG59KTtcbiIsInZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4vX2llOC1kb20tZGVmaW5lJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbmV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BEIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSU9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuIGdPUEQoTywgUCk7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzKE8sIFApKSByZXR1cm4gY3JlYXRlRGVzYyghcElFLmYuY2FsbChPLCBQKSwgT1tQXSk7XG59O1xuIiwiLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ09QTihpdCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gd2luZG93TmFtZXMuc2xpY2UoKTtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIHRvU3RyaW5nLmNhbGwoaXQpID09ICdbb2JqZWN0IFdpbmRvd10nID8gZ2V0V2luZG93TmFtZXMoaXQpIDogZ09QTih0b0lPYmplY3QoaXQpKTtcbn07XG4iLCIvLyAxOS4xLjIuNyAvIDE1LjIuMy40IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE8pXG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpO1xudmFyIGhpZGRlbktleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJykuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoTykge1xuICByZXR1cm4gJGtleXMoTywgaGlkZGVuS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbiIsIi8vIDE5LjEuMi45IC8gMTUuMi4zLjIgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uIChPKSB7XG4gIE8gPSB0b09iamVjdChPKTtcbiAgaWYgKGhhcyhPLCBJRV9QUk9UTykpIHJldHVybiBPW0lFX1BST1RPXTtcbiAgaWYgKHR5cGVvZiBPLmNvbnN0cnVjdG9yID09ICdmdW5jdGlvbicgJiYgTyBpbnN0YW5jZW9mIE8uY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gTy5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIH0gcmV0dXJuIE8gaW5zdGFuY2VvZiBPYmplY3QgPyBPYmplY3RQcm90byA6IG51bGw7XG59O1xuIiwidmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciBJRV9QUk9UTyA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqZWN0LCBuYW1lcykge1xuICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICB2YXIgaSA9IDA7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGtleTtcbiAgZm9yIChrZXkgaW4gTykgaWYgKGtleSAhPSBJRV9QUk9UTykgaGFzKE8sIGtleSkgJiYgcmVzdWx0LnB1c2goa2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhcyhPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCIvLyAxOS4xLjIuMTQgLyAxNS4yLjMuMTQgT2JqZWN0LmtleXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBlbnVtQnVnS2V5cyk7XG59O1xuIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4iLCIvLyBtb3N0IE9iamVjdCBtZXRob2RzIGJ5IEVTNiBzaG91bGQgYWNjZXB0IHByaW1pdGl2ZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMpIHtcbiAgdmFyIGZuID0gKGNvcmUuT2JqZWN0IHx8IHt9KVtLRVldIHx8IE9iamVjdFtLRVldO1xuICB2YXIgZXhwID0ge307XG4gIGV4cFtLRVldID0gZXhlYyhmbik7XG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBmbigxKTsgfSksICdPYmplY3QnLCBleHApO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGlzRW51bSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXNFbnRyaWVzKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChpdCk7XG4gICAgdmFyIGtleXMgPSBnZXRLZXlzKE8pO1xuICAgIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBrZXk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGkpIHtcbiAgICAgIGtleSA9IGtleXNbaSsrXTtcbiAgICAgIGlmICghREVTQ1JJUFRPUlMgfHwgaXNFbnVtLmNhbGwoTywga2V5KSkge1xuICAgICAgICByZXN1bHQucHVzaChpc0VudHJpZXMgPyBba2V5LCBPW2tleV1dIDogT1trZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG4iLCIvLyBhbGwgb2JqZWN0IGtleXMsIGluY2x1ZGVzIG5vbi1lbnVtZXJhYmxlIGFuZCBzeW1ib2xzXG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJyk7XG52YXIgZ09QUyA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BzJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBSZWZsZWN0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdDtcbm1vZHVsZS5leHBvcnRzID0gUmVmbGVjdCAmJiBSZWZsZWN0Lm93bktleXMgfHwgZnVuY3Rpb24gb3duS2V5cyhpdCkge1xuICB2YXIga2V5cyA9IGdPUE4uZihhbk9iamVjdChpdCkpO1xuICB2YXIgZ2V0U3ltYm9scyA9IGdPUFMuZjtcbiAgcmV0dXJuIGdldFN5bWJvbHMgPyBrZXlzLmNvbmNhdChnZXRTeW1ib2xzKGl0KSkgOiBrZXlzO1xufTtcbiIsInZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnBhcnNlRmxvYXQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG5cbm1vZHVsZS5leHBvcnRzID0gMSAvICRwYXJzZUZsb2F0KHJlcXVpcmUoJy4vX3N0cmluZy13cycpICsgJy0wJykgIT09IC1JbmZpbml0eSA/IGZ1bmN0aW9uIHBhcnNlRmxvYXQoc3RyKSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHZhciByZXN1bHQgPSAkcGFyc2VGbG9hdChzdHJpbmcpO1xuICByZXR1cm4gcmVzdWx0ID09PSAwICYmIHN0cmluZy5jaGFyQXQoMCkgPT0gJy0nID8gLTAgOiByZXN1bHQ7XG59IDogJHBhcnNlRmxvYXQ7XG4iLCJ2YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VJbnQ7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgd3MgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBoZXggPSAvXlstK10/MFt4WF0vO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICRwYXJzZUludCh3cyArICcwOCcpICE9PSA4IHx8ICRwYXJzZUludCh3cyArICcweDE2JykgIT09IDIyID8gZnVuY3Rpb24gcGFyc2VJbnQoc3RyLCByYWRpeCkge1xuICB2YXIgc3RyaW5nID0gJHRyaW0oU3RyaW5nKHN0ciksIDMpO1xuICByZXR1cm4gJHBhcnNlSW50KHN0cmluZywgKHJhZGl4ID4+PiAwKSB8fCAoaGV4LnRlc3Qoc3RyaW5nKSA/IDE2IDogMTApKTtcbn0gOiAkcGFyc2VJbnQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZTogZmFsc2UsIHY6IGV4ZWMoKSB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHsgZTogdHJ1ZSwgdjogZSB9O1xuICB9XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGJpdG1hcCwgdmFsdWUpIHtcbiAgcmV0dXJuIHtcbiAgICBlbnVtZXJhYmxlOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZTogIShiaXRtYXAgJiA0KSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfTtcbn07XG4iLCJ2YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBzcmMsIHNhZmUpIHtcbiAgZm9yICh2YXIga2V5IGluIHNyYykgcmVkZWZpbmUodGFyZ2V0LCBrZXksIHNyY1trZXldLCBzYWZlKTtcbiAgcmV0dXJuIHRhcmdldDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBTUkMgPSByZXF1aXJlKCcuL191aWQnKSgnc3JjJyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi9fZnVuY3Rpb24tdG8tc3RyaW5nJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBUUEwgPSAoJycgKyAkdG9TdHJpbmcpLnNwbGl0KFRPX1NUUklORyk7XG5cbnJlcXVpcmUoJy4vX2NvcmUnKS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiAkdG9TdHJpbmcuY2FsbChpdCk7XG59O1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywga2V5LCB2YWwsIHNhZmUpIHtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2YgdmFsID09ICdmdW5jdGlvbic7XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCAnbmFtZScpIHx8IGhpZGUodmFsLCAnbmFtZScsIGtleSk7XG4gIGlmIChPW2tleV0gPT09IHZhbCkgcmV0dXJuO1xuICBpZiAoaXNGdW5jdGlvbikgaGFzKHZhbCwgU1JDKSB8fCBoaWRlKHZhbCwgU1JDLCBPW2tleV0gPyAnJyArIE9ba2V5XSA6IFRQTC5qb2luKFN0cmluZyhrZXkpKSk7XG4gIGlmIChPID09PSBnbG9iYWwpIHtcbiAgICBPW2tleV0gPSB2YWw7XG4gIH0gZWxzZSBpZiAoIXNhZmUpIHtcbiAgICBkZWxldGUgT1trZXldO1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9IGVsc2UgaWYgKE9ba2V5XSkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIHtcbiAgICBoaWRlKE8sIGtleSwgdmFsKTtcbiAgfVxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG59KShGdW5jdGlvbi5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nICYmIHRoaXNbU1JDXSB8fCAkdG9TdHJpbmcuY2FsbCh0aGlzKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciBidWlsdGluRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcblxuIC8vIGBSZWdFeHBFeGVjYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmICh0eXBlb2YgZXhlYyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciByZXN1bHQgPSBleGVjLmNhbGwoUiwgUyk7XG4gICAgaWYgKHR5cGVvZiByZXN1bHQgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAoY2xhc3NvZihSKSAhPT0gJ1JlZ0V4cCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWdFeHAjZXhlYyBjYWxsZWQgb24gaW5jb21wYXRpYmxlIHJlY2VpdmVyJyk7XG4gIH1cbiAgcmV0dXJuIGJ1aWx0aW5FeGVjLmNhbGwoUiwgUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xuXG52YXIgbmF0aXZlRXhlYyA9IFJlZ0V4cC5wcm90b3R5cGUuZXhlYztcbi8vIFRoaXMgYWx3YXlzIHJlZmVycyB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLCBiZWNhdXNlIHRoZVxuLy8gU3RyaW5nI3JlcGxhY2UgcG9seWZpbGwgdXNlcyAuL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMuanMsXG4vLyB3aGljaCBsb2FkcyB0aGlzIGZpbGUgYmVmb3JlIHBhdGNoaW5nIHRoZSBtZXRob2QuXG52YXIgbmF0aXZlUmVwbGFjZSA9IFN0cmluZy5wcm90b3R5cGUucmVwbGFjZTtcblxudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcblxudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcblxudmFyIFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyA9IChmdW5jdGlvbiAoKSB7XG4gIHZhciByZTEgPSAvYS8sXG4gICAgICByZTIgPSAvYiovZztcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMSwgJ2EnKTtcbiAgbmF0aXZlRXhlYy5jYWxsKHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMVtMQVNUX0lOREVYXSAhPT0gMCB8fCByZTJbTEFTVF9JTkRFWF0gIT09IDA7XG59KSgpO1xuXG4vLyBub25wYXJ0aWNpcGF0aW5nIGNhcHR1cmluZyBncm91cCwgY29waWVkIGZyb20gZXM1LXNoaW0ncyBTdHJpbmcjc3BsaXQgcGF0Y2guXG52YXIgTlBDR19JTkNMVURFRCA9IC8oKT8/Ly5leGVjKCcnKVsxXSAhPT0gdW5kZWZpbmVkO1xuXG52YXIgUEFUQ0ggPSBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgfHwgTlBDR19JTkNMVURFRDtcblxuaWYgKFBBVENIKSB7XG4gIHBhdGNoZWRFeGVjID0gZnVuY3Rpb24gZXhlYyhzdHIpIHtcbiAgICB2YXIgcmUgPSB0aGlzO1xuICAgIHZhciBsYXN0SW5kZXgsIHJlQ29weSwgbWF0Y2gsIGk7XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyByZS5zb3VyY2UgKyAnJCg/IVxcXFxzKScsIHJlZ2V4cEZsYWdzLmNhbGwocmUpKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmVbTEFTVF9JTkRFWF07XG5cbiAgICBtYXRjaCA9IG5hdGl2ZUV4ZWMuY2FsbChyZSwgc3RyKTtcblxuICAgIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlW0xBU1RfSU5ERVhdID0gcmUuZ2xvYmFsID8gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggOiBsYXN0SW5kZXg7XG4gICAgfVxuICAgIGlmIChOUENHX0lOQ0xVREVEICYmIG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIEZpeCBicm93c2VycyB3aG9zZSBgZXhlY2AgbWV0aG9kcyBkb24ndCBjb25zaXN0ZW50bHkgcmV0dXJuIGB1bmRlZmluZWRgXG4gICAgICAvLyBmb3IgTlBDRywgbGlrZSBJRTguIE5PVEU6IFRoaXMgZG9lc24nIHdvcmsgZm9yIC8oLj8pPy9cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sb29wLWZ1bmNcbiAgICAgIG5hdGl2ZVJlcGxhY2UuY2FsbChtYXRjaFswXSwgcmVDb3B5LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoIC0gMjsgaSsrKSB7XG4gICAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSA9PT0gdW5kZWZpbmVkKSBtYXRjaFtpXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGNoO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGNoZWRFeGVjO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAocmVnRXhwLCByZXBsYWNlKSB7XG4gIHZhciByZXBsYWNlciA9IHJlcGxhY2UgPT09IE9iamVjdChyZXBsYWNlKSA/IGZ1bmN0aW9uIChwYXJ0KSB7XG4gICAgcmV0dXJuIHJlcGxhY2VbcGFydF07XG4gIH0gOiByZXBsYWNlO1xuICByZXR1cm4gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIFN0cmluZyhpdCkucmVwbGFjZShyZWdFeHAsIHJlcGxhY2VyKTtcbiAgfTtcbn07XG4iLCIvLyA3LjIuOSBTYW1lVmFsdWUoeCwgeSlcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmlzIHx8IGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4geCA9PT0geSA/IHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5IDogeCAhPSB4ICYmIHkgIT0geTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT0xMRUNUSU9OKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCBDT0xMRUNUSU9OLCB7IGZyb206IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwRm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgbWFwRm4gPSBhcmd1bWVudHNbMV07XG4gICAgdmFyIG1hcHBpbmcsIEEsIG4sIGNiO1xuICAgIGFGdW5jdGlvbih0aGlzKTtcbiAgICBtYXBwaW5nID0gbWFwRm4gIT09IHVuZGVmaW5lZDtcbiAgICBpZiAobWFwcGluZykgYUZ1bmN0aW9uKG1hcEZuKTtcbiAgICBpZiAoc291cmNlID09IHVuZGVmaW5lZCkgcmV0dXJuIG5ldyB0aGlzKCk7XG4gICAgQSA9IFtdO1xuICAgIGlmIChtYXBwaW5nKSB7XG4gICAgICBuID0gMDtcbiAgICAgIGNiID0gY3R4KG1hcEZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgZnVuY3Rpb24gKG5leHRJdGVtKSB7XG4gICAgICAgIEEucHVzaChjYihuZXh0SXRlbSwgbisrKSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yT2Yoc291cmNlLCBmYWxzZSwgQS5wdXNoLCBBKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyB0aGlzKEEpO1xuICB9IH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBBID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aC0tKSBBW2xlbmd0aF0gPSBhcmd1bWVudHNbbGVuZ3RoXTtcbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiLy8gV29ya3Mgd2l0aCBfX3Byb3RvX18gb25seS4gT2xkIHY4IGNhbid0IHdvcmsgd2l0aCBudWxsIHByb3RvIG9iamVjdHMuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBjaGVjayA9IGZ1bmN0aW9uIChPLCBwcm90bykge1xuICBhbk9iamVjdChPKTtcbiAgaWYgKCFpc09iamVjdChwcm90bykgJiYgcHJvdG8gIT09IG51bGwpIHRocm93IFR5cGVFcnJvcihwcm90byArIFwiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKTtcbn07XG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgKCdfX3Byb3RvX18nIGluIHt9ID8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIGZ1bmN0aW9uICh0ZXN0LCBidWdneSwgc2V0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXQgPSByZXF1aXJlKCcuL19jdHgnKShGdW5jdGlvbi5jYWxsLCByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmYoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCwgMik7XG4gICAgICAgIHNldCh0ZXN0LCBbXSk7XG4gICAgICAgIGJ1Z2d5ID0gISh0ZXN0IGluc3RhbmNlb2YgQXJyYXkpO1xuICAgICAgfSBjYXRjaCAoZSkgeyBidWdneSA9IHRydWU7IH1cbiAgICAgIHJldHVybiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZihPLCBwcm90bykge1xuICAgICAgICBjaGVjayhPLCBwcm90byk7XG4gICAgICAgIGlmIChidWdneSkgTy5fX3Byb3RvX18gPSBwcm90bztcbiAgICAgICAgZWxzZSBzZXQoTywgcHJvdG8pO1xuICAgICAgICByZXR1cm4gTztcbiAgICAgIH07XG4gICAgfSh7fSwgZmFsc2UpIDogdW5kZWZpbmVkKSxcbiAgY2hlY2s6IGNoZWNrXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFNQRUNJRVMgPSByZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgdmFyIEMgPSBnbG9iYWxbS0VZXTtcbiAgaWYgKERFU0NSSVBUT1JTICYmIEMgJiYgIUNbU1BFQ0lFU10pIGRQLmYoQywgU1BFQ0lFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgfSk7XG59O1xuIiwidmFyIGRlZiA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgVEFHID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCB0YWcsIHN0YXQpIHtcbiAgaWYgKGl0ICYmICFoYXMoaXQgPSBzdGF0ID8gaXQgOiBpdC5wcm90b3R5cGUsIFRBRykpIGRlZihpdCwgVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHRhZyB9KTtcbn07XG4iLCJ2YXIgc2hhcmVkID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ2tleXMnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gc2hhcmVkW2tleV0gfHwgKHNoYXJlZFtrZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIFNIQVJFRCA9ICdfX2NvcmUtanNfc2hhcmVkX18nO1xudmFyIHN0b3JlID0gZ2xvYmFsW1NIQVJFRF0gfHwgKGdsb2JhbFtTSEFSRURdID0ge30pO1xuXG4obW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICByZXR1cm4gc3RvcmVba2V5XSB8fCAoc3RvcmVba2V5XSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IHt9KTtcbn0pKCd2ZXJzaW9ucycsIFtdKS5wdXNoKHtcbiAgdmVyc2lvbjogY29yZS52ZXJzaW9uLFxuICBtb2RlOiByZXF1aXJlKCcuL19saWJyYXJ5JykgPyAncHVyZScgOiAnZ2xvYmFsJyxcbiAgY29weXJpZ2h0OiAnwqkgMjAyMCBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KSdcbn0pO1xuIiwiLy8gNy4zLjIwIFNwZWNpZXNDb25zdHJ1Y3RvcihPLCBkZWZhdWx0Q29uc3RydWN0b3IpXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBEKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IEQgOiBhRnVuY3Rpb24oUyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobWV0aG9kLCBhcmcpIHtcbiAgcmV0dXJuICEhbWV0aG9kICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYWxsXG4gICAgYXJnID8gbWV0aG9kLmNhbGwobnVsbCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCAxKSA6IG1ldGhvZC5jYWxsKG51bGwpO1xuICB9KTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG4vLyB0cnVlICAtPiBTdHJpbmcjYXRcbi8vIGZhbHNlIC0+IFN0cmluZyNjb2RlUG9pbnRBdFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgcG9zKSB7XG4gICAgdmFyIHMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gICAgdmFyIGkgPSB0b0ludGVnZXIocG9zKTtcbiAgICB2YXIgbCA9IHMubGVuZ3RoO1xuICAgIHZhciBhLCBiO1xuICAgIGlmIChpIDwgMCB8fCBpID49IGwpIHJldHVybiBUT19TVFJJTkcgPyAnJyA6IHVuZGVmaW5lZDtcbiAgICBhID0gcy5jaGFyQ29kZUF0KGkpO1xuICAgIHJldHVybiBhIDwgMHhkODAwIHx8IGEgPiAweGRiZmYgfHwgaSArIDEgPT09IGwgfHwgKGIgPSBzLmNoYXJDb2RlQXQoaSArIDEpKSA8IDB4ZGMwMCB8fCBiID4gMHhkZmZmXG4gICAgICA/IFRPX1NUUklORyA/IHMuY2hhckF0KGkpIDogYVxuICAgICAgOiBUT19TVFJJTkcgPyBzLnNsaWNlKGksIGkgKyAyKSA6IChhIC0gMHhkODAwIDw8IDEwKSArIChiIC0gMHhkYzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuIiwiLy8gaGVscGVyIGZvciBTdHJpbmcje3N0YXJ0c1dpdGgsIGVuZHNXaXRoLCBpbmNsdWRlc31cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIHNlYXJjaFN0cmluZywgTkFNRSkge1xuICBpZiAoaXNSZWdFeHAoc2VhcmNoU3RyaW5nKSkgdGhyb3cgVHlwZUVycm9yKCdTdHJpbmcjJyArIE5BTUUgKyBcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7XG4gIHJldHVybiBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBxdW90ID0gL1wiL2c7XG4vLyBCLjIuMy4yLjEgQ3JlYXRlSFRNTChzdHJpbmcsIHRhZywgYXR0cmlidXRlLCB2YWx1ZSlcbnZhciBjcmVhdGVIVE1MID0gZnVuY3Rpb24gKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKSB7XG4gIHZhciBTID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIHZhciBwMSA9ICc8JyArIHRhZztcbiAgaWYgKGF0dHJpYnV0ZSAhPT0gJycpIHAxICs9ICcgJyArIGF0dHJpYnV0ZSArICc9XCInICsgU3RyaW5nKHZhbHVlKS5yZXBsYWNlKHF1b3QsICcmcXVvdDsnKSArICdcIic7XG4gIHJldHVybiBwMSArICc+JyArIFMgKyAnPC8nICsgdGFnICsgJz4nO1xufTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUsIGV4ZWMpIHtcbiAgdmFyIE8gPSB7fTtcbiAgT1tOQU1FXSA9IGV4ZWMoY3JlYXRlSFRNTCk7XG4gICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ZXN0ID0gJydbTkFNRV0oJ1wiJyk7XG4gICAgcmV0dXJuIHRlc3QgIT09IHRlc3QudG9Mb3dlckNhc2UoKSB8fCB0ZXN0LnNwbGl0KCdcIicpLmxlbmd0aCA+IDM7XG4gIH0pLCAnU3RyaW5nJywgTyk7XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHJlcGVhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBtYXhMZW5ndGgsIGZpbGxTdHJpbmcsIGxlZnQpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZCh0aGF0KSk7XG4gIHZhciBzdHJpbmdMZW5ndGggPSBTLmxlbmd0aDtcbiAgdmFyIGZpbGxTdHIgPSBmaWxsU3RyaW5nID09PSB1bmRlZmluZWQgPyAnICcgOiBTdHJpbmcoZmlsbFN0cmluZyk7XG4gIHZhciBpbnRNYXhMZW5ndGggPSB0b0xlbmd0aChtYXhMZW5ndGgpO1xuICBpZiAoaW50TWF4TGVuZ3RoIDw9IHN0cmluZ0xlbmd0aCB8fCBmaWxsU3RyID09ICcnKSByZXR1cm4gUztcbiAgdmFyIGZpbGxMZW4gPSBpbnRNYXhMZW5ndGggLSBzdHJpbmdMZW5ndGg7XG4gIHZhciBzdHJpbmdGaWxsZXIgPSByZXBlYXQuY2FsbChmaWxsU3RyLCBNYXRoLmNlaWwoZmlsbExlbiAvIGZpbGxTdHIubGVuZ3RoKSk7XG4gIGlmIChzdHJpbmdGaWxsZXIubGVuZ3RoID4gZmlsbExlbikgc3RyaW5nRmlsbGVyID0gc3RyaW5nRmlsbGVyLnNsaWNlKDAsIGZpbGxMZW4pO1xuICByZXR1cm4gbGVmdCA/IHN0cmluZ0ZpbGxlciArIFMgOiBTICsgc3RyaW5nRmlsbGVyO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgdmFyIHN0ciA9IFN0cmluZyhkZWZpbmVkKHRoaXMpKTtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbiA9IHRvSW50ZWdlcihjb3VudCk7XG4gIGlmIChuIDwgMCB8fCBuID09IEluZmluaXR5KSB0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7XG4gIGZvciAoO24gPiAwOyAobiA+Pj49IDEpICYmIChzdHIgKz0gc3RyKSkgaWYgKG4gJiAxKSByZXMgKz0gc3RyO1xuICByZXR1cm4gcmVzO1xufTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgc3BhY2VzID0gcmVxdWlyZSgnLi9fc3RyaW5nLXdzJyk7XG52YXIgc3BhY2UgPSAnWycgKyBzcGFjZXMgKyAnXSc7XG52YXIgbm9uID0gJ1xcdTIwMGJcXHUwMDg1JztcbnZhciBsdHJpbSA9IFJlZ0V4cCgnXicgKyBzcGFjZSArIHNwYWNlICsgJyonKTtcbnZhciBydHJpbSA9IFJlZ0V4cChzcGFjZSArIHNwYWNlICsgJyokJyk7XG5cbnZhciBleHBvcnRlciA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEFMSUFTKSB7XG4gIHZhciBleHAgPSB7fTtcbiAgdmFyIEZPUkNFID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAhIXNwYWNlc1tLRVldKCkgfHwgbm9uW0tFWV0oKSAhPSBub247XG4gIH0pO1xuICB2YXIgZm4gPSBleHBbS0VZXSA9IEZPUkNFID8gZXhlYyh0cmltKSA6IHNwYWNlc1tLRVldO1xuICBpZiAoQUxJQVMpIGV4cFtBTElBU10gPSBmbjtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRSwgJ1N0cmluZycsIGV4cCk7XG59O1xuXG4vLyAxIC0+IFN0cmluZyN0cmltTGVmdFxuLy8gMiAtPiBTdHJpbmcjdHJpbVJpZ2h0XG4vLyAzIC0+IFN0cmluZyN0cmltXG52YXIgdHJpbSA9IGV4cG9ydGVyLnRyaW0gPSBmdW5jdGlvbiAoc3RyaW5nLCBUWVBFKSB7XG4gIHN0cmluZyA9IFN0cmluZyhkZWZpbmVkKHN0cmluZykpO1xuICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKGx0cmltLCAnJyk7XG4gIGlmIChUWVBFICYgMikgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocnRyaW0sICcnKTtcbiAgcmV0dXJuIHN0cmluZztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0ZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9ICdcXHgwOVxceDBBXFx4MEJcXHgwQ1xceDBEXFx4MjBcXHhBMFxcdTE2ODBcXHUxODBFXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwMycgK1xuICAnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjZWwgPSByZXF1aXJlKCcuL19kb20tY3JlYXRlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHNldFRhc2sgPSBnbG9iYWwuc2V0SW1tZWRpYXRlO1xudmFyIGNsZWFyVGFzayA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBNZXNzYWdlQ2hhbm5lbCA9IGdsb2JhbC5NZXNzYWdlQ2hhbm5lbDtcbnZhciBEaXNwYXRjaCA9IGdsb2JhbC5EaXNwYXRjaDtcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGRlZmVyLCBjaGFubmVsLCBwb3J0O1xudmFyIHJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGlkID0gK3RoaXM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgaWYgKHF1ZXVlLmhhc093blByb3BlcnR5KGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG52YXIgbGlzdGVuZXIgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgcnVuLmNhbGwoZXZlbnQuZGF0YSk7XG59O1xuLy8gTm9kZS5qcyAwLjkrICYgSUUxMCsgaGFzIHNldEltbWVkaWF0ZSwgb3RoZXJ3aXNlOlxuaWYgKCFzZXRUYXNrIHx8ICFjbGVhclRhc2spIHtcbiAgc2V0VGFzayA9IGZ1bmN0aW9uIHNldEltbWVkaWF0ZShmbikge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgdmFyIGkgPSAxO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICBxdWV1ZVsrK2NvdW50ZXJdID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICBpbnZva2UodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSwgYXJncyk7XG4gICAgfTtcbiAgICBkZWZlcihjb3VudGVyKTtcbiAgICByZXR1cm4gY291bnRlcjtcbiAgfTtcbiAgY2xlYXJUYXNrID0gZnVuY3Rpb24gY2xlYXJJbW1lZGlhdGUoaWQpIHtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICB9O1xuICAvLyBOb2RlLmpzIDAuOC1cbiAgaWYgKHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhjdHgocnVuLCBpZCwgMSkpO1xuICAgIH07XG4gIC8vIEJyb3dzZXJzIHdpdGggTWVzc2FnZUNoYW5uZWwsIGluY2x1ZGVzIFdlYldvcmtlcnNcbiAgfSBlbHNlIGlmIChNZXNzYWdlQ2hhbm5lbCkge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gY3R4KHBvcnQucG9zdE1lc3NhZ2UsIHBvcnQsIDEpO1xuICAvLyBCcm93c2VycyB3aXRoIHBvc3RNZXNzYWdlLCBza2lwIFdlYldvcmtlcnNcbiAgLy8gSUU4IGhhcyBwb3N0TWVzc2FnZSwgYnV0IGl0J3Mgc3luYyAmIHR5cGVvZiBpdHMgcG9zdE1lc3NhZ2UgaXMgJ29iamVjdCdcbiAgfSBlbHNlIGlmIChnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lciAmJiB0eXBlb2YgcG9zdE1lc3NhZ2UgPT0gJ2Z1bmN0aW9uJyAmJiAhZ2xvYmFsLmltcG9ydFNjcmlwdHMpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgZ2xvYmFsLnBvc3RNZXNzYWdlKGlkICsgJycsICcqJyk7XG4gICAgfTtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGxpc3RlbmVyLCBmYWxzZSk7XG4gIC8vIElFOC1cbiAgfSBlbHNlIGlmIChPTlJFQURZU1RBVEVDSEFOR0UgaW4gY2VsKCdzY3JpcHQnKSkge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBodG1sLmFwcGVuZENoaWxkKGNlbCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bi5jYWxsKGlkKTtcbiAgICAgIH07XG4gICAgfTtcbiAgLy8gUmVzdCBvbGQgYnJvd3NlcnNcbiAgfSBlbHNlIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgc2V0VGltZW91dChjdHgocnVuLCBpZCwgMSksIDApO1xuICAgIH07XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IHNldFRhc2ssXG4gIGNsZWFyOiBjbGVhclRhc2tcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5kZXgsIGxlbmd0aCkge1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvaW5kZXhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gMDtcbiAgdmFyIG51bWJlciA9IHRvSW50ZWdlcihpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCEnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpc05hTihpdCA9ICtpdCkgPyAwIDogKGl0ID4gMCA/IGZsb29yIDogY2VpbCkoaXQpO1xufTtcbiIsIi8vIHRvIGluZGV4ZWQgb2JqZWN0LCB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBJT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcbiIsIi8vIDcuMS4xMyBUb09iamVjdChhcmd1bWVudClcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIE9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFMpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBpdDtcbiAgdmFyIGZuLCB2YWw7XG4gIGlmIChTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAodHlwZW9mIChmbiA9IGl0LnZhbHVlT2YpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSkgcmV0dXJuIHZhbDtcbiAgaWYgKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIik7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykpIHtcbiAgdmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG4gIHZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbiAgdmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbiAgdmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbiAgdmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG4gIHZhciAkYnVmZmVyID0gcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJyk7XG4gIHZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbiAgdmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xuICB2YXIgcHJvcGVydHlEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuICB2YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbiAgdmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG4gIHZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG4gIHZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuICB2YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG4gIHZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xuICB2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbiAgdmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xuICB2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbiAgdmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG4gIHZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xuICB2YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG4gIHZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG4gIHZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbiAgdmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG4gIHZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuICB2YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG4gIHZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbiAgdmFyIGNyZWF0ZUFycmF5TWV0aG9kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpO1xuICB2YXIgY3JlYXRlQXJyYXlJbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJyk7XG4gIHZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG4gIHZhciBBcnJheUl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG4gIHZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbiAgdmFyICRpdGVyRGV0ZWN0ID0gcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKTtcbiAgdmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuL19zZXQtc3BlY2llcycpO1xuICB2YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xuICB2YXIgYXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKTtcbiAgdmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuICB2YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xuICB2YXIgZFAgPSAkRFAuZjtcbiAgdmFyIGdPUEQgPSAkR09QRC5mO1xuICB2YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuICB2YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbiAgdmFyIFVpbnQ4QXJyYXkgPSBnbG9iYWwuVWludDhBcnJheTtcbiAgdmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG4gIHZhciBTSEFSRURfQlVGRkVSID0gJ1NoYXJlZCcgKyBBUlJBWV9CVUZGRVI7XG4gIHZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG4gIHZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbiAgdmFyIEFycmF5UHJvdG8gPSBBcnJheVtQUk9UT1RZUEVdO1xuICB2YXIgJEFycmF5QnVmZmVyID0gJGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbiAgdmFyICREYXRhVmlldyA9ICRidWZmZXIuRGF0YVZpZXc7XG4gIHZhciBhcnJheUZvckVhY2ggPSBjcmVhdGVBcnJheU1ldGhvZCgwKTtcbiAgdmFyIGFycmF5RmlsdGVyID0gY3JlYXRlQXJyYXlNZXRob2QoMik7XG4gIHZhciBhcnJheVNvbWUgPSBjcmVhdGVBcnJheU1ldGhvZCgzKTtcbiAgdmFyIGFycmF5RXZlcnkgPSBjcmVhdGVBcnJheU1ldGhvZCg0KTtcbiAgdmFyIGFycmF5RmluZCA9IGNyZWF0ZUFycmF5TWV0aG9kKDUpO1xuICB2YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbiAgdmFyIGFycmF5SW5jbHVkZXMgPSBjcmVhdGVBcnJheUluY2x1ZGVzKHRydWUpO1xuICB2YXIgYXJyYXlJbmRleE9mID0gY3JlYXRlQXJyYXlJbmNsdWRlcyhmYWxzZSk7XG4gIHZhciBhcnJheVZhbHVlcyA9IEFycmF5SXRlcmF0b3JzLnZhbHVlcztcbiAgdmFyIGFycmF5S2V5cyA9IEFycmF5SXRlcmF0b3JzLmtleXM7XG4gIHZhciBhcnJheUVudHJpZXMgPSBBcnJheUl0ZXJhdG9ycy5lbnRyaWVzO1xuICB2YXIgYXJyYXlMYXN0SW5kZXhPZiA9IEFycmF5UHJvdG8ubGFzdEluZGV4T2Y7XG4gIHZhciBhcnJheVJlZHVjZSA9IEFycmF5UHJvdG8ucmVkdWNlO1xuICB2YXIgYXJyYXlSZWR1Y2VSaWdodCA9IEFycmF5UHJvdG8ucmVkdWNlUmlnaHQ7XG4gIHZhciBhcnJheUpvaW4gPSBBcnJheVByb3RvLmpvaW47XG4gIHZhciBhcnJheVNvcnQgPSBBcnJheVByb3RvLnNvcnQ7XG4gIHZhciBhcnJheVNsaWNlID0gQXJyYXlQcm90by5zbGljZTtcbiAgdmFyIGFycmF5VG9TdHJpbmcgPSBBcnJheVByb3RvLnRvU3RyaW5nO1xuICB2YXIgYXJyYXlUb0xvY2FsZVN0cmluZyA9IEFycmF5UHJvdG8udG9Mb2NhbGVTdHJpbmc7XG4gIHZhciBJVEVSQVRPUiA9IHdrcygnaXRlcmF0b3InKTtcbiAgdmFyIFRBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbiAgdmFyIFRZUEVEX0NPTlNUUlVDVE9SID0gdWlkKCd0eXBlZF9jb25zdHJ1Y3RvcicpO1xuICB2YXIgREVGX0NPTlNUUlVDVE9SID0gdWlkKCdkZWZfY29uc3RydWN0b3InKTtcbiAgdmFyIEFMTF9DT05TVFJVQ1RPUlMgPSAkdHlwZWQuQ09OU1RSO1xuICB2YXIgVFlQRURfQVJSQVkgPSAkdHlwZWQuVFlQRUQ7XG4gIHZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG4gIHZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG5cbiAgdmFyICRtYXAgPSBjcmVhdGVBcnJheU1ldGhvZCgxLCBmdW5jdGlvbiAoTywgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGFsbG9jYXRlKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsZW5ndGgpO1xuICB9KTtcblxuICB2YXIgTElUVExFX0VORElBTiA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXSA9PT0gMTtcbiAgfSk7XG5cbiAgdmFyIEZPUkNFRF9TRVQgPSAhIVVpbnQ4QXJyYXkgJiYgISFVaW50OEFycmF5W1BST1RPVFlQRV0uc2V0ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgVWludDhBcnJheSgxKS5zZXQoe30pO1xuICB9KTtcblxuICB2YXIgdG9PZmZzZXQgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlcihpdCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ICUgQllURVMpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCEnKTtcbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9O1xuXG4gIHZhciB2YWxpZGF0ZSA9IGZ1bmN0aW9uIChpdCkge1xuICAgIGlmIChpc09iamVjdChpdCkgJiYgVFlQRURfQVJSQVkgaW4gaXQpIHJldHVybiBpdDtcbiAgICB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IScpO1xuICB9O1xuXG4gIHZhciBhbGxvY2F0ZSA9IGZ1bmN0aW9uIChDLCBsZW5ndGgpIHtcbiAgICBpZiAoIShpc09iamVjdChDKSAmJiBUWVBFRF9DT05TVFJVQ1RPUiBpbiBDKSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciEnKTtcbiAgICB9IHJldHVybiBuZXcgQyhsZW5ndGgpO1xuICB9O1xuXG4gIHZhciBzcGVjaWVzRnJvbUxpc3QgPSBmdW5jdGlvbiAoTywgbGlzdCkge1xuICAgIHJldHVybiBmcm9tTGlzdChzcGVjaWVzQ29uc3RydWN0b3IoTywgT1tERUZfQ09OU1RSVUNUT1JdKSwgbGlzdCk7XG4gIH07XG5cbiAgdmFyIGZyb21MaXN0ID0gZnVuY3Rpb24gKEMsIGxpc3QpIHtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUoQywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChpdCwga2V5LCBpbnRlcm5hbCkge1xuICAgIGRQKGl0LCBrZXksIHsgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzLl9kW2ludGVybmFsXTsgfSB9KTtcbiAgfTtcblxuICB2YXIgJGZyb20gPSBmdW5jdGlvbiBmcm9tKHNvdXJjZSAvKiAsIG1hcGZuLCB0aGlzQXJnICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChzb3VyY2UpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgaSwgbGVuZ3RoLCB2YWx1ZXMsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIWlzQXJyYXlJdGVyKGl0ZXJGbikpIHtcbiAgICAgIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChPKSwgdmFsdWVzID0gW10sIGkgPSAwOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGkrKykge1xuICAgICAgICB2YWx1ZXMucHVzaChzdGVwLnZhbHVlKTtcbiAgICAgIH0gTyA9IHZhbHVlcztcbiAgICB9XG4gICAgaWYgKG1hcHBpbmcgJiYgYUxlbiA+IDIpIG1hcGZuID0gY3R4KG1hcGZuLCBhcmd1bWVudHNbMl0sIDIpO1xuICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKSwgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTsgbGVuZ3RoID4gaTsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHZhciAkb2YgPSBmdW5jdGlvbiBvZigvKiAuLi5pdGVtcyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IGFsbG9jYXRlKHRoaXMsIGxlbmd0aCk7XG4gICAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gYXJndW1lbnRzW2luZGV4KytdO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgLy8gaU9TIFNhZmFyaSA2LnggZmFpbHMgaGVyZVxuICB2YXIgVE9fTE9DQUxFX0JVRyA9ICEhVWludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9Mb2NhbGVTdHJpbmcuY2FsbChuZXcgVWludDhBcnJheSgxKSk7IH0pO1xuXG4gIHZhciAkdG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgICByZXR1cm4gYXJyYXlUb0xvY2FsZVN0cmluZy5hcHBseShUT19MT0NBTEVfQlVHID8gYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpKSA6IHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHZhciBwcm90byA9IHtcbiAgICBjb3B5V2l0aGluOiBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCwgc3RhcnQgLyogLCBlbmQgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUNvcHlXaXRoaW4uY2FsbCh2YWxpZGF0ZSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlFdmVyeSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmlsbDogZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5RmlsbC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5RmlsdGVyKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLFxuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCkpO1xuICAgIH0sXG4gICAgZmluZDogZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlGaW5kKHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZpbmRJbmRleDogZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmRJbmRleCh2YWxpZGF0ZSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICBhcnJheUZvckVhY2godmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5kZXhPZih2YWxpZGF0ZSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUluY2x1ZGVzKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlKb2luLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggKi8pIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgICAgcmV0dXJuIGFycmF5TGFzdEluZGV4T2YuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBtYXA6IGZ1bmN0aW9uIG1hcChtYXBmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiAkbWFwKHZhbGlkYXRlKHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2UuYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlSZWR1Y2VSaWdodC5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJldmVyc2U6IGZ1bmN0aW9uIHJldmVyc2UoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIgbGVuZ3RoID0gdmFsaWRhdGUodGhhdCkubGVuZ3RoO1xuICAgICAgdmFyIG1pZGRsZSA9IE1hdGguZmxvb3IobGVuZ3RoIC8gMik7XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHZhbHVlO1xuICAgICAgd2hpbGUgKGluZGV4IDwgbWlkZGxlKSB7XG4gICAgICAgIHZhbHVlID0gdGhhdFtpbmRleF07XG4gICAgICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICAgICAgdGhhdFtsZW5ndGhdID0gdmFsdWU7XG4gICAgICB9IHJldHVybiB0aGF0O1xuICAgIH0sXG4gICAgc29tZTogZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5U29tZSh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc29ydDogZnVuY3Rpb24gc29ydChjb21wYXJlZm4pIHtcbiAgICAgIHJldHVybiBhcnJheVNvcnQuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgY29tcGFyZWZuKTtcbiAgICB9LFxuICAgIHN1YmFycmF5OiBmdW5jdGlvbiBzdWJhcnJheShiZWdpbiwgZW5kKSB7XG4gICAgICB2YXIgTyA9IHZhbGlkYXRlKHRoaXMpO1xuICAgICAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICAgICAgdmFyICRiZWdpbiA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgICAgIHJldHVybiBuZXcgKHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pKShcbiAgICAgICAgTy5idWZmZXIsXG4gICAgICAgIE8uYnl0ZU9mZnNldCArICRiZWdpbiAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgICAgIHRvTGVuZ3RoKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCkpIC0gJGJlZ2luKVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyICRzbGljZSA9IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICByZXR1cm4gc3BlY2llc0Zyb21MaXN0KHRoaXMsIGFycmF5U2xpY2UuY2FsbCh2YWxpZGF0ZSh0aGlzKSwgc3RhcnQsIGVuZCkpO1xuICB9O1xuXG4gIHZhciAkc2V0ID0gZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICAgIHZhbGlkYXRlKHRoaXMpO1xuICAgIHZhciBvZmZzZXQgPSB0b09mZnNldChhcmd1bWVudHNbMV0sIDEpO1xuICAgIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgICB2YXIgc3JjID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgoc3JjLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBpZiAobGVuICsgb2Zmc2V0ID4gbGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB0aGlzW29mZnNldCArIGluZGV4XSA9IHNyY1tpbmRleCsrXTtcbiAgfTtcblxuICB2YXIgJGl0ZXJhdG9ycyA9IHtcbiAgICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGFycmF5RW50cmllcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIGtleXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlLZXlzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlWYWx1ZXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfVxuICB9O1xuXG4gIHZhciBpc1RBSW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNPYmplY3QodGFyZ2V0KVxuICAgICAgJiYgdGFyZ2V0W1RZUEVEX0FSUkFZXVxuICAgICAgJiYgdHlwZW9mIGtleSAhPSAnc3ltYm9sJ1xuICAgICAgJiYga2V5IGluIHRhcmdldFxuICAgICAgJiYgU3RyaW5nKCtrZXkpID09IFN0cmluZyhrZXkpO1xuICB9O1xuICB2YXIgJGdldERlc2MgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAgICByZXR1cm4gaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgID8gcHJvcGVydHlEZXNjKDIsIHRhcmdldFtrZXldKVxuICAgICAgOiBnT1BEKHRhcmdldCwga2V5KTtcbiAgfTtcbiAgdmFyICRzZXREZXNjID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2MpIHtcbiAgICBpZiAoaXNUQUluZGV4KHRhcmdldCwga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSlcbiAgICAgICYmIGlzT2JqZWN0KGRlc2MpXG4gICAgICAmJiBoYXMoZGVzYywgJ3ZhbHVlJylcbiAgICAgICYmICFoYXMoZGVzYywgJ2dldCcpXG4gICAgICAmJiAhaGFzKGRlc2MsICdzZXQnKVxuICAgICAgLy8gVE9ETzogYWRkIHZhbGlkYXRpb24gZGVzY3JpcHRvciB3L28gY2FsbGluZyBhY2Nlc3NvcnNcbiAgICAgICYmICFkZXNjLmNvbmZpZ3VyYWJsZVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ3dyaXRhYmxlJykgfHwgZGVzYy53cml0YWJsZSlcbiAgICAgICYmICghaGFzKGRlc2MsICdlbnVtZXJhYmxlJykgfHwgZGVzYy5lbnVtZXJhYmxlKVxuICAgICkge1xuICAgICAgdGFyZ2V0W2tleV0gPSBkZXNjLnZhbHVlO1xuICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICB9IHJldHVybiBkUCh0YXJnZXQsIGtleSwgZGVzYyk7XG4gIH07XG5cbiAgaWYgKCFBTExfQ09OU1RSVUNUT1JTKSB7XG4gICAgJEdPUEQuZiA9ICRnZXREZXNjO1xuICAgICREUC5mID0gJHNldERlc2M7XG4gIH1cblxuICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFBTExfQ09OU1RSVUNUT1JTLCAnT2JqZWN0Jywge1xuICAgIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldERlc2MsXG4gICAgZGVmaW5lUHJvcGVydHk6ICRzZXREZXNjXG4gIH0pO1xuXG4gIGlmIChmYWlscyhmdW5jdGlvbiAoKSB7IGFycmF5VG9TdHJpbmcuY2FsbCh7fSk7IH0pKSB7XG4gICAgYXJyYXlUb1N0cmluZyA9IGFycmF5VG9Mb2NhbGVTdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0aGlzKTtcbiAgICB9O1xuICB9XG5cbiAgdmFyICRUeXBlZEFycmF5UHJvdG90eXBlJCA9IHJlZGVmaW5lQWxsKHt9LCBwcm90byk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJGl0ZXJhdG9ycyk7XG4gIGhpZGUoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBJVEVSQVRPUiwgJGl0ZXJhdG9ycy52YWx1ZXMpO1xuICByZWRlZmluZUFsbCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIHtcbiAgICBzbGljZTogJHNsaWNlLFxuICAgIHNldDogJHNldCxcbiAgICBjb25zdHJ1Y3RvcjogZnVuY3Rpb24gKCkgeyAvKiBub29wICovIH0sXG4gICAgdG9TdHJpbmc6IGFycmF5VG9TdHJpbmcsXG4gICAgdG9Mb2NhbGVTdHJpbmc6ICR0b0xvY2FsZVN0cmluZ1xuICB9KTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J1ZmZlcicsICdiJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdieXRlT2Zmc2V0JywgJ28nKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVMZW5ndGgnLCAnbCcpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnbGVuZ3RoJywgJ2UnKTtcbiAgZFAoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCBUQUcsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbVFlQRURfQVJSQVldOyB9XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBtYXgtc3RhdGVtZW50c1xuICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIEJZVEVTLCB3cmFwcGVyLCBDTEFNUEVEKSB7XG4gICAgQ0xBTVBFRCA9ICEhQ0xBTVBFRDtcbiAgICB2YXIgTkFNRSA9IEtFWSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBLRVk7XG4gICAgdmFyIFNFVFRFUiA9ICdzZXQnICsgS0VZO1xuICAgIHZhciBUeXBlZEFycmF5ID0gZ2xvYmFsW05BTUVdO1xuICAgIHZhciBCYXNlID0gVHlwZWRBcnJheSB8fCB7fTtcbiAgICB2YXIgVEFDID0gVHlwZWRBcnJheSAmJiBnZXRQcm90b3R5cGVPZihUeXBlZEFycmF5KTtcbiAgICB2YXIgRk9SQ0VEID0gIVR5cGVkQXJyYXkgfHwgISR0eXBlZC5BQlY7XG4gICAgdmFyIE8gPSB7fTtcbiAgICB2YXIgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkgJiYgVHlwZWRBcnJheVtQUk9UT1RZUEVdO1xuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIHJldHVybiBkYXRhLnZbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgICB2YXIgZGF0YSA9IHRoYXQuX2Q7XG4gICAgICBpZiAoQ0xBTVBFRCkgdmFsdWUgPSAodmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhmZiA/IDB4ZmYgOiB2YWx1ZSAmIDB4ZmY7XG4gICAgICBkYXRhLnZbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5vLCB2YWx1ZSwgTElUVExFX0VORElBTik7XG4gICAgfTtcbiAgICB2YXIgYWRkRWxlbWVudCA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgZFAodGhhdCwgaW5kZXgsIHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGdldHRlcih0aGlzLCBpbmRleCk7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHNldHRlcih0aGlzLCBpbmRleCwgdmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSwgJ19kJyk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgICB2YXIgYnVmZmVyLCBieXRlTGVuZ3RoLCBsZW5ndGgsIGtsYXNzO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3ICRBcnJheUJ1ZmZlcihieXRlTGVuZ3RoKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgYnVmZmVyID0gZGF0YTtcbiAgICAgICAgICBvZmZzZXQgPSB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyk7XG4gICAgICAgICAgdmFyICRsZW4gPSBkYXRhLmJ5dGVMZW5ndGg7XG4gICAgICAgICAgaWYgKCRsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKCRsZW4gJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9ICRsZW4gLSBvZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIG9mZnNldCA+ICRsZW4pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgbGVuZ3RoID0gYnl0ZUxlbmd0aCAvIEJZVEVTO1xuICAgICAgICB9IGVsc2UgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaGlkZSh0aGF0LCAnX2QnLCB7XG4gICAgICAgICAgYjogYnVmZmVyLFxuICAgICAgICAgIG86IG9mZnNldCxcbiAgICAgICAgICBsOiBieXRlTGVuZ3RoLFxuICAgICAgICAgIGU6IGxlbmd0aCxcbiAgICAgICAgICB2OiBuZXcgJERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IGNyZWF0ZSgkVHlwZWRBcnJheVByb3RvdHlwZSQpO1xuICAgICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5KTtcbiAgICB9IGVsc2UgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBUeXBlZEFycmF5KDEpO1xuICAgIH0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgtMSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSkgfHwgISRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7XG4gICAgICBuZXcgVHlwZWRBcnJheSgpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkobnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheSgxLjUpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgICAgbmV3IFR5cGVkQXJyYXkoaXRlcik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgfSwgdHJ1ZSkpIHtcbiAgICAgIFR5cGVkQXJyYXkgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBkYXRhLCAkb2Zmc2V0LCAkbGVuZ3RoKSB7XG4gICAgICAgIGFuSW5zdGFuY2UodGhhdCwgVHlwZWRBcnJheSwgTkFNRSk7XG4gICAgICAgIHZhciBrbGFzcztcbiAgICAgICAgLy8gYHdzYCBtb2R1bGUgYnVnLCB0ZW1wb3JhcmlseSByZW1vdmUgdmFsaWRhdGlvbiBsZW5ndGggZm9yIFVpbnQ4QXJyYXlcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYnNvY2tldHMvd3MvcHVsbC82NDVcbiAgICAgICAgaWYgKCFpc09iamVjdChkYXRhKSkgcmV0dXJuIG5ldyBCYXNlKHRvSW5kZXgoZGF0YSkpO1xuICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mICRBcnJheUJ1ZmZlciB8fCAoa2xhc3MgPSBjbGFzc29mKGRhdGEpKSA9PSBBUlJBWV9CVUZGRVIgfHwga2xhc3MgPT0gU0hBUkVEX0JVRkZFUikge1xuICAgICAgICAgIHJldHVybiAkbGVuZ3RoICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gbmV3IEJhc2UoZGF0YSwgdG9PZmZzZXQoJG9mZnNldCwgQllURVMpLCAkbGVuZ3RoKVxuICAgICAgICAgICAgOiAkb2Zmc2V0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IEJhc2UoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFRZUEVEX0FSUkFZIGluIGRhdGEpIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgcmV0dXJuICRmcm9tLmNhbGwoVHlwZWRBcnJheSwgZGF0YSk7XG4gICAgICB9KTtcbiAgICAgIGFycmF5Rm9yRWFjaChUQUMgIT09IEZ1bmN0aW9uLnByb3RvdHlwZSA/IGdPUE4oQmFzZSkuY29uY2F0KGdPUE4oVEFDKSkgOiBnT1BOKEJhc2UpLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmICghKGtleSBpbiBUeXBlZEFycmF5KSkgaGlkZShUeXBlZEFycmF5LCBrZXksIEJhc2Vba2V5XSk7XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlbUFJPVE9UWVBFXSA9IFR5cGVkQXJyYXlQcm90b3R5cGU7XG4gICAgICBpZiAoIUxJQlJBUlkpIFR5cGVkQXJyYXlQcm90b3R5cGUuY29uc3RydWN0b3IgPSBUeXBlZEFycmF5O1xuICAgIH1cbiAgICB2YXIgJG5hdGl2ZUl0ZXJhdG9yID0gVHlwZWRBcnJheVByb3RvdHlwZVtJVEVSQVRPUl07XG4gICAgdmFyIENPUlJFQ1RfSVRFUl9OQU1FID0gISEkbmF0aXZlSXRlcmF0b3JcbiAgICAgICYmICgkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSAndmFsdWVzJyB8fCAkbmF0aXZlSXRlcmF0b3IubmFtZSA9PSB1bmRlZmluZWQpO1xuICAgIHZhciAkaXRlcmF0b3IgPSAkaXRlcmF0b3JzLnZhbHVlcztcbiAgICBoaWRlKFR5cGVkQXJyYXksIFRZUEVEX0NPTlNUUlVDVE9SLCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRZUEVEX0FSUkFZLCBOQU1FKTtcbiAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIFZJRVcsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgREVGX0NPTlNUUlVDVE9SLCBUeXBlZEFycmF5KTtcblxuICAgIGlmIChDTEFNUEVEID8gbmV3IFR5cGVkQXJyYXkoMSlbVEFHXSAhPSBOQU1FIDogIShUQUcgaW4gVHlwZWRBcnJheVByb3RvdHlwZSkpIHtcbiAgICAgIGRQKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRBRywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIE5BTUU7IH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIE9bTkFNRV0gPSBUeXBlZEFycmF5O1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoVHlwZWRBcnJheSAhPSBCYXNlKSwgTyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUywgTkFNRSwge1xuICAgICAgQllURVNfUEVSX0VMRU1FTlQ6IEJZVEVTXG4gICAgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHsgQmFzZS5vZi5jYWxsKFR5cGVkQXJyYXksIDEpOyB9KSwgTkFNRSwge1xuICAgICAgZnJvbTogJGZyb20sXG4gICAgICBvZjogJG9mXG4gICAgfSk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAsIE5BTUUsIHByb3RvKTtcblxuICAgIHNldFNwZWNpZXMoTkFNRSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRF9TRVQsIE5BTUUsIHsgc2V0OiAkc2V0IH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhQ09SUkVDVF9JVEVSX05BTUUsIE5BTUUsICRpdGVyYXRvcnMpO1xuXG4gICAgaWYgKCFMSUJSQVJZICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZykgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEpLnNsaWNlKCk7XG4gICAgfSksIE5BTUUsIHsgc2xpY2U6ICRzbGljZSB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgVHlwZWRBcnJheShbMSwgMl0pLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXlQcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xuICAgIH0pKSwgTkFNRSwgeyB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nIH0pO1xuXG4gICAgSXRlcmF0b3JzW05BTUVdID0gQ09SUkVDVF9JVEVSX05BTUUgPyAkbmF0aXZlSXRlcmF0b3IgOiAkaXRlcmF0b3I7XG4gICAgaWYgKCFMSUJSQVJZICYmICFDT1JSRUNUX0lURVJfTkFNRSkgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBJVEVSQVRPUiwgJGl0ZXJhdG9yKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4vX3RvLWluZGV4Jyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgYXJyYXlGaWxsID0gcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBBUlJBWV9CVUZGRVIgPSAnQXJyYXlCdWZmZXInO1xudmFyIERBVEFfVklFVyA9ICdEYXRhVmlldyc7XG52YXIgUFJPVE9UWVBFID0gJ3Byb3RvdHlwZSc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCEnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4ISc7XG52YXIgJEFycmF5QnVmZmVyID0gZ2xvYmFsW0FSUkFZX0JVRkZFUl07XG52YXIgJERhdGFWaWV3ID0gZ2xvYmFsW0RBVEFfVklFV107XG52YXIgTWF0aCA9IGdsb2JhbC5NYXRoO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3ctcmVzdHJpY3RlZC1uYW1lc1xudmFyIEluZmluaXR5ID0gZ2xvYmFsLkluZmluaXR5O1xudmFyIEJhc2VCdWZmZXIgPSAkQXJyYXlCdWZmZXI7XG52YXIgYWJzID0gTWF0aC5hYnM7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xudmFyIEJVRkZFUiA9ICdidWZmZXInO1xudmFyIEJZVEVfTEVOR1RIID0gJ2J5dGVMZW5ndGgnO1xudmFyIEJZVEVfT0ZGU0VUID0gJ2J5dGVPZmZzZXQnO1xudmFyICRCVUZGRVIgPSBERVNDUklQVE9SUyA/ICdfYicgOiBCVUZGRVI7XG52YXIgJExFTkdUSCA9IERFU0NSSVBUT1JTID8gJ19sJyA6IEJZVEVfTEVOR1RIO1xudmFyICRPRkZTRVQgPSBERVNDUklQVE9SUyA/ICdfbycgOiBCWVRFX09GRlNFVDtcblxuLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbmZ1bmN0aW9uIHBhY2tJRUVFNzU0KHZhbHVlLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGJ1ZmZlciA9IG5ldyBBcnJheShuQnl0ZXMpO1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIHJ0ID0gbUxlbiA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCB2YWx1ZSA9PT0gMCAmJiAxIC8gdmFsdWUgPCAwID8gMSA6IDA7XG4gIHZhciBlLCBtLCBjO1xuICB2YWx1ZSA9IGFicyh2YWx1ZSk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHZhbHVlICE9IHZhbHVlIHx8IHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICBtID0gdmFsdWUgIT0gdmFsdWUgPyAxIDogMDtcbiAgICBlID0gZU1heDtcbiAgfSBlbHNlIHtcbiAgICBlID0gZmxvb3IobG9nKHZhbHVlKSAvIExOMik7XG4gICAgaWYgKHZhbHVlICogKGMgPSBwb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLTtcbiAgICAgIGMgKj0gMjtcbiAgICB9XG4gICAgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICB2YWx1ZSArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogcG93KDIsIDEgLSBlQmlhcyk7XG4gICAgfVxuICAgIGlmICh2YWx1ZSAqIGMgPj0gMikge1xuICAgICAgZSsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IGVNYXgpIHtcbiAgICAgIG0gPSAwO1xuICAgICAgZSA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICh2YWx1ZSAqIGMgLSAxKSAqIHBvdygyLCBtTGVuKTtcbiAgICAgIGUgPSBlICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSB2YWx1ZSAqIHBvdygyLCBlQmlhcyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IDA7XG4gICAgfVxuICB9XG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltpKytdID0gbSAmIDI1NSwgbSAvPSAyNTYsIG1MZW4gLT0gOCk7XG4gIGUgPSBlIDw8IG1MZW4gfCBtO1xuICBlTGVuICs9IG1MZW47XG4gIGZvciAoOyBlTGVuID4gMDsgYnVmZmVyW2krK10gPSBlICYgMjU1LCBlIC89IDI1NiwgZUxlbiAtPSA4KTtcbiAgYnVmZmVyWy0taV0gfD0gcyAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn1cbmZ1bmN0aW9uIHVucGFja0lFRUU3NTQoYnVmZmVyLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGVMZW4gPSBuQnl0ZXMgKiA4IC0gbUxlbiAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxO1xuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDE7XG4gIHZhciBuQml0cyA9IGVMZW4gLSA3O1xuICB2YXIgaSA9IG5CeXRlcyAtIDE7XG4gIHZhciBzID0gYnVmZmVyW2ktLV07XG4gIHZhciBlID0gcyAmIDEyNztcbiAgdmFyIG07XG4gIHMgPj49IDc7XG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSBlICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBtID0gZSAmICgxIDw8IC1uQml0cykgLSAxO1xuICBlID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1MZW47XG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW2ldLCBpLS0sIG5CaXRzIC09IDgpO1xuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXM7XG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogcyA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgcG93KDIsIG1MZW4pO1xuICAgIGUgPSBlIC0gZUJpYXM7XG4gIH0gcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBwb3coMiwgZSAtIG1MZW4pO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tJMzIoYnl0ZXMpIHtcbiAgcmV0dXJuIGJ5dGVzWzNdIDw8IDI0IHwgYnl0ZXNbMl0gPDwgMTYgfCBieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF07XG59XG5mdW5jdGlvbiBwYWNrSTgoaXQpIHtcbiAgcmV0dXJuIFtpdCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kxNihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0kzMihpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZiwgaXQgPj4gOCAmIDB4ZmYsIGl0ID4+IDE2ICYgMHhmZiwgaXQgPj4gMjQgJiAweGZmXTtcbn1cbmZ1bmN0aW9uIHBhY2tGNjQoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCA1MiwgOCk7XG59XG5mdW5jdGlvbiBwYWNrRjMyKGl0KSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChpdCwgMjMsIDQpO1xufVxuXG5mdW5jdGlvbiBhZGRHZXR0ZXIoQywga2V5LCBpbnRlcm5hbCkge1xuICBkUChDW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXNbaW50ZXJuYWxdOyB9IH0pO1xufVxuXG5mdW5jdGlvbiBnZXQodmlldywgYnl0ZXMsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gc3RvcmUuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgYnl0ZXMpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcGFjay5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBzZXQodmlldywgYnl0ZXMsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIG51bUluZGV4ID0gK2luZGV4O1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KG51bUluZGV4KTtcbiAgaWYgKGludEluZGV4ICsgYnl0ZXMgPiB2aWV3WyRMRU5HVEhdKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIHN0b3JlID0gdmlld1skQlVGRkVSXS5fYjtcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyB2aWV3WyRPRkZTRVRdO1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlczsgaSsrKSBzdG9yZVtzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBieXRlcyAtIGkgLSAxXTtcbn1cblxuaWYgKCEkdHlwZWQuQUJWKSB7XG4gICRBcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIEFycmF5QnVmZmVyKGxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuICAgIHZhciBieXRlTGVuZ3RoID0gdG9JbmRleChsZW5ndGgpO1xuICAgIHRoaXMuX2IgPSBhcnJheUZpbGwuY2FsbChuZXcgQXJyYXkoYnl0ZUxlbmd0aCksIDApO1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gICREYXRhVmlldyA9IGZ1bmN0aW9uIERhdGFWaWV3KGJ1ZmZlciwgYnl0ZU9mZnNldCwgYnl0ZUxlbmd0aCkge1xuICAgIGFuSW5zdGFuY2UodGhpcywgJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuICAgIGFuSW5zdGFuY2UoYnVmZmVyLCAkQXJyYXlCdWZmZXIsIERBVEFfVklFVyk7XG4gICAgdmFyIGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlclskTEVOR1RIXTtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGJ5dGVPZmZzZXQpO1xuICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID09PSB1bmRlZmluZWQgPyBidWZmZXJMZW5ndGggLSBvZmZzZXQgOiB0b0xlbmd0aChieXRlTGVuZ3RoKTtcbiAgICBpZiAob2Zmc2V0ICsgYnl0ZUxlbmd0aCA+IGJ1ZmZlckxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgIHRoaXNbJEJVRkZFUl0gPSBidWZmZXI7XG4gICAgdGhpc1skT0ZGU0VUXSA9IG9mZnNldDtcbiAgICB0aGlzWyRMRU5HVEhdID0gYnl0ZUxlbmd0aDtcbiAgfTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQlVGRkVSLCAnX2InKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX0xFTkdUSCwgJ19sJyk7XG4gICAgYWRkR2V0dGVyKCREYXRhVmlldywgQllURV9PRkZTRVQsICdfbycpO1xuICB9XG5cbiAgcmVkZWZpbmVBbGwoJERhdGFWaWV3W1BST1RPVFlQRV0sIHtcbiAgICBnZXRJbnQ4OiBmdW5jdGlvbiBnZXRJbnQ4KGJ5dGVPZmZzZXQpIHtcbiAgICAgIHJldHVybiBnZXQodGhpcywgMSwgYnl0ZU9mZnNldClbMF0gPDwgMjQgPj4gMjQ7XG4gICAgfSxcbiAgICBnZXRVaW50ODogZnVuY3Rpb24gZ2V0VWludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXTtcbiAgICB9LFxuICAgIGdldEludDE2OiBmdW5jdGlvbiBnZXRJbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKTtcbiAgICAgIHJldHVybiAoYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdKSA8PCAxNiA+PiAxNjtcbiAgICB9LFxuICAgIGdldFVpbnQxNjogZnVuY3Rpb24gZ2V0VWludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSTMyKGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pKTtcbiAgICB9LFxuICAgIGdldFVpbnQzMjogZnVuY3Rpb24gZ2V0VWludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpID4+PiAwO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQzMjogZnVuY3Rpb24gZ2V0RmxvYXQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgMjMsIDQpO1xuICAgIH0sXG4gICAgZ2V0RmxvYXQ2NDogZnVuY3Rpb24gZ2V0RmxvYXQ2NChieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSUVFRTc1NChnZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSwgNTIsIDgpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJOCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRJbnQxNjogZnVuY3Rpb24gc2V0SW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQxNjogZnVuY3Rpb24gc2V0VWludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0kxNiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldFVpbnQzMjogZnVuY3Rpb24gc2V0VWludDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0kzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDMyOiBmdW5jdGlvbiBzZXRGbG9hdDMyKGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgcGFja0YzMiwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfSxcbiAgICBzZXRGbG9hdDY0OiBmdW5jdGlvbiBzZXRGbG9hdDY0KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgOCwgYnl0ZU9mZnNldCwgcGFja0Y2NCwgdmFsdWUsIGFyZ3VtZW50c1syXSk7XG4gICAgfVxuICB9KTtcbn0gZWxzZSB7XG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICRBcnJheUJ1ZmZlcigxKTtcbiAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgJEFycmF5QnVmZmVyKC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgfSkgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgbmV3ICRBcnJheUJ1ZmZlcihOYU4pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIHJldHVybiAkQXJyYXlCdWZmZXIubmFtZSAhPSBBUlJBWV9CVUZGRVI7XG4gIH0pKSB7XG4gICAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgICBhbkluc3RhbmNlKHRoaXMsICRBcnJheUJ1ZmZlcik7XG4gICAgICByZXR1cm4gbmV3IEJhc2VCdWZmZXIodG9JbmRleChsZW5ndGgpKTtcbiAgICB9O1xuICAgIHZhciBBcnJheUJ1ZmZlclByb3RvID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV0gPSBCYXNlQnVmZmVyW1BST1RPVFlQRV07XG4gICAgZm9yICh2YXIga2V5cyA9IGdPUE4oQmFzZUJ1ZmZlciksIGogPSAwLCBrZXk7IGtleXMubGVuZ3RoID4gajspIHtcbiAgICAgIGlmICghKChrZXkgPSBrZXlzW2orK10pIGluICRBcnJheUJ1ZmZlcikpIGhpZGUoJEFycmF5QnVmZmVyLCBrZXksIEJhc2VCdWZmZXJba2V5XSk7XG4gICAgfVxuICAgIGlmICghTElCUkFSWSkgQXJyYXlCdWZmZXJQcm90by5jb25zdHJ1Y3RvciA9ICRBcnJheUJ1ZmZlcjtcbiAgfVxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHZpZXcgPSBuZXcgJERhdGFWaWV3KG5ldyAkQXJyYXlCdWZmZXIoMikpO1xuICB2YXIgJHNldEludDggPSAkRGF0YVZpZXdbUFJPVE9UWVBFXS5zZXRJbnQ4O1xuICB2aWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHZpZXcuc2V0SW50OCgxLCAyMTQ3NDgzNjQ5KTtcbiAgaWYgKHZpZXcuZ2V0SW50OCgwKSB8fCAhdmlldy5nZXRJbnQ4KDEpKSByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH0sXG4gICAgc2V0VWludDg6IGZ1bmN0aW9uIHNldFVpbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICAkc2V0SW50OC5jYWxsKHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9XG4gIH0sIHRydWUpO1xufVxuc2V0VG9TdHJpbmdUYWcoJEFycmF5QnVmZmVyLCBBUlJBWV9CVUZGRVIpO1xuc2V0VG9TdHJpbmdUYWcoJERhdGFWaWV3LCBEQVRBX1ZJRVcpO1xuaGlkZSgkRGF0YVZpZXdbUFJPVE9UWVBFXSwgJHR5cGVkLlZJRVcsIHRydWUpO1xuZXhwb3J0c1tBUlJBWV9CVUZGRVJdID0gJEFycmF5QnVmZmVyO1xuZXhwb3J0c1tEQVRBX1ZJRVddID0gJERhdGFWaWV3O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgVFlQRUQgPSB1aWQoJ3R5cGVkX2FycmF5Jyk7XG52YXIgVklFVyA9IHVpZCgndmlldycpO1xudmFyIEFCViA9ICEhKGdsb2JhbC5BcnJheUJ1ZmZlciAmJiBnbG9iYWwuRGF0YVZpZXcpO1xudmFyIENPTlNUUiA9IEFCVjtcbnZhciBpID0gMDtcbnZhciBsID0gOTtcbnZhciBUeXBlZDtcblxudmFyIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnMgPSAoXG4gICdJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheSdcbikuc3BsaXQoJywnKTtcblxud2hpbGUgKGkgPCBsKSB7XG4gIGlmIChUeXBlZCA9IGdsb2JhbFtUeXBlZEFycmF5Q29uc3RydWN0b3JzW2krK11dKSB7XG4gICAgaGlkZShUeXBlZC5wcm90b3R5cGUsIFRZUEVELCB0cnVlKTtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gIH0gZWxzZSBDT05TVFIgPSBmYWxzZTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFCVjogQUJWLFxuICBDT05TVFI6IENPTlNUUixcbiAgVFlQRUQ6IFRZUEVELFxuICBWSUVXOiBWSUVXXG59O1xuIiwidmFyIGlkID0gMDtcbnZhciBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJy5jb25jYXQoa2V5ID09PSB1bmRlZmluZWQgPyAnJyA6IGtleSwgJylfJywgKCsraWQgKyBweCkudG9TdHJpbmcoMzYpKTtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgbmF2aWdhdG9yID0gZ2xvYmFsLm5hdmlnYXRvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBuYXZpZ2F0b3IgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCB8fCAnJztcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIFRZUEUpIHtcbiAgaWYgKCFpc09iamVjdChpdCkgfHwgaXQuX3QgIT09IFRZUEUpIHRocm93IFR5cGVFcnJvcignSW5jb21wYXRpYmxlIHJlY2VpdmVyLCAnICsgVFlQRSArICcgcmVxdWlyZWQhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIHdrc0V4dCA9IHJlcXVpcmUoJy4vX3drcy1leHQnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHZhciAkU3ltYm9sID0gY29yZS5TeW1ib2wgfHwgKGNvcmUuU3ltYm9sID0gTElCUkFSWSA/IHt9IDogZ2xvYmFsLlN5bWJvbCB8fCB7fSk7XG4gIGlmIChuYW1lLmNoYXJBdCgwKSAhPSAnXycgJiYgIShuYW1lIGluICRTeW1ib2wpKSBkZWZpbmVQcm9wZXJ0eSgkU3ltYm9sLCBuYW1lLCB7IHZhbHVlOiB3a3NFeHQuZihuYW1lKSB9KTtcbn07XG4iLCJleHBvcnRzLmYgPSByZXF1aXJlKCcuL193a3MnKTtcbiIsInZhciBzdG9yZSA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpKCd3a3MnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5TeW1ib2w7XG52YXIgVVNFX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT0gJ2Z1bmN0aW9uJztcblxudmFyICRleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobmFtZSkge1xuICByZXR1cm4gc3RvcmVbbmFtZV0gfHwgKHN0b3JlW25hbWVdID1cbiAgICBVU0VfU1lNQk9MICYmIFN5bWJvbFtuYW1lXSB8fCAoVVNFX1NZTUJPTCA/IFN5bWJvbCA6IHVpZCkoJ1N5bWJvbC4nICsgbmFtZSkpO1xufTtcblxuJGV4cG9ydHMuc3RvcmUgPSBzdG9yZTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvcmUnKS5nZXRJdGVyYXRvck1ldGhvZCA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXQgIT0gdW5kZWZpbmVkKSByZXR1cm4gaXRbSVRFUkFUT1JdXG4gICAgfHwgaXRbJ0BAaXRlcmF0b3InXVxuICAgIHx8IEl0ZXJhdG9yc1tjbGFzc29mKGl0KV07XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2JlbmphbWluZ3IvUmV4RXhwLmVzY2FwZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmUgPSByZXF1aXJlKCcuL19yZXBsYWNlcicpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZ0V4cCcsIHsgZXNjYXBlOiBmdW5jdGlvbiBlc2NhcGUoaXQpIHsgcmV0dXJuICRyZShpdCk7IH0gfSk7XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7IGNvcHlXaXRoaW46IHJlcXVpcmUoJy4vX2FycmF5LWNvcHktd2l0aGluJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdjb3B5V2l0aGluJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRldmVyeSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg0KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLmV2ZXJ5LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNSAvIDE1LjQuNC4xNiBBcnJheS5wcm90b3R5cGUuZXZlcnkoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZXZlcnk6IGZ1bmN0aW9uIGV2ZXJ5KGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRldmVyeSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgZmlsbDogcmVxdWlyZSgnLi9fYXJyYXktZmlsbCcpIH0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmlsbCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmlsdGVyID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDIpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZmlsdGVyLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuNyAvIDE1LjQuNC4yMCBBcnJheS5wcm90b3R5cGUuZmlsdGVyKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOSBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNik7XG52YXIgS0VZID0gJ2ZpbmRJbmRleCc7XG52YXIgZm9yY2VkID0gdHJ1ZTtcbi8vIFNob3VsZG4ndCBza2lwIGhvbGVzXG5pZiAoS0VZIGluIFtdKSBBcnJheSgxKVtLRVldKGZ1bmN0aW9uICgpIHsgZm9yY2VkID0gZmFsc2U7IH0pO1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmb3JjZWQsICdBcnJheScsIHtcbiAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuOCBBcnJheS5wcm90b3R5cGUuZmluZChwcmVkaWNhdGUsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaW5kID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDUpO1xudmFyIEtFWSA9ICdmaW5kJztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kOiBmdW5jdGlvbiBmaW5kKGNhbGxiYWNrZm4gLyogLCB0aGF0ID0gdW5kZWZpbmVkICovKSB7XG4gICAgcmV0dXJuICRmaW5kKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKShLRVkpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciBTVFJJQ1QgPSByZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZm9yRWFjaCwgdHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIVNUUklDVCwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTAgLyAxNS40LjQuMTggQXJyYXkucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkZm9yRWFjaCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi9faXRlci1jYWxsJyk7XG52YXIgaXNBcnJheUl0ZXIgPSByZXF1aXJlKCcuL19pcy1hcnJheS1pdGVyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHsgQXJyYXkuZnJvbShpdGVyKTsgfSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjEgQXJyYXkuZnJvbShhcnJheUxpa2UsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICBmcm9tOiBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIG1hcGZuID0gYUxlbiA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gICAgdmFyIG1hcHBpbmcgPSBtYXBmbiAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGl0ZXJGbiA9IGdldEl0ZXJGbihPKTtcbiAgICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yO1xuICAgIGlmIChtYXBwaW5nKSBtYXBmbiA9IGN0eChtYXBmbiwgYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQsIDIpO1xuICAgIC8vIGlmIG9iamVjdCBpc24ndCBpdGVyYWJsZSBvciBpdCdzIGFycmF5IHdpdGggZGVmYXVsdCBpdGVyYXRvciAtIHVzZSBzaW1wbGUgY2FzZVxuICAgIGlmIChpdGVyRm4gIT0gdW5kZWZpbmVkICYmICEoQyA9PSBBcnJheSAmJiBpc0FycmF5SXRlcihpdGVyRm4pKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCByZXN1bHQgPSBuZXcgQygpOyAhKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IGNhbGwoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gICAgICBmb3IgKHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7IGxlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICAgIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXN1bHQubGVuZ3RoID0gaW5kZXg7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKShmYWxzZSk7XG52YXIgJG5hdGl2ZSA9IFtdLmluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTEgLyAxNS40LjQuMTQgQXJyYXkucHJvdG90eXBlLmluZGV4T2Yoc2VhcmNoRWxlbWVudCBbLCBmcm9tSW5kZXhdKVxuICBpbmRleE9mOiBmdW5jdGlvbiBpbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuIE5FR0FUSVZFX1pFUk9cbiAgICAgIC8vIGNvbnZlcnQgLTAgdG8gKzBcbiAgICAgID8gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDBcbiAgICAgIDogJGluZGV4T2YodGhpcywgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIvLyAyMi4xLjIuMiAvIDE1LjQuMy4yIEFycmF5LmlzQXJyYXkoYXJnKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdBcnJheScsIHsgaXNBcnJheTogcmVxdWlyZSgnLi9faXMtYXJyYXknKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhZGRUb1Vuc2NvcGFibGVzID0gcmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJyk7XG52YXIgc3RlcCA9IHJlcXVpcmUoJy4vX2l0ZXItc3RlcCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcblxuLy8gMjIuMS4zLjQgQXJyYXkucHJvdG90eXBlLmVudHJpZXMoKVxuLy8gMjIuMS4zLjEzIEFycmF5LnByb3RvdHlwZS5rZXlzKClcbi8vIDIyLjEuMy4yOSBBcnJheS5wcm90b3R5cGUudmFsdWVzKClcbi8vIDIyLjEuMy4zMCBBcnJheS5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKEFycmF5LCAnQXJyYXknLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgdGhpcy5fdCA9IHRvSU9iamVjdChpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB0aGlzLl9rID0ga2luZDsgICAgICAgICAgICAgICAgLy8ga2luZFxuLy8gMjIuMS41LjIuMSAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGtpbmQgPSB0aGlzLl9rO1xuICB2YXIgaW5kZXggPSB0aGlzLl9pKys7XG4gIGlmICghTyB8fCBpbmRleCA+PSBPLmxlbmd0aCkge1xuICAgIHRoaXMuX3QgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHN0ZXAoMSk7XG4gIH1cbiAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBpbmRleCk7XG4gIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBPW2luZGV4XSk7XG4gIHJldHVybiBzdGVwKDAsIFtpbmRleCwgT1tpbmRleF1dKTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlICg5LjQuNC42LCA5LjQuNC43KVxuSXRlcmF0b3JzLkFyZ3VtZW50cyA9IEl0ZXJhdG9ycy5BcnJheTtcblxuYWRkVG9VbnNjb3BhYmxlcygna2V5cycpO1xuYWRkVG9VbnNjb3BhYmxlcygndmFsdWVzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCdlbnRyaWVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmpvaW4oc2VwYXJhdG9yKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgYXJyYXlKb2luID0gW10uam9pbjtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIHN0cmluZ3NcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKHJlcXVpcmUoJy4vX2lvYmplY3QnKSAhPSBPYmplY3QgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShhcnJheUpvaW4pKSwgJ0FycmF5Jywge1xuICBqb2luOiBmdW5jdGlvbiBqb2luKHNlcGFyYXRvcikge1xuICAgIHJldHVybiBhcnJheUpvaW4uY2FsbCh0b0lPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciAkbmF0aXZlID0gW10ubGFzdEluZGV4T2Y7XG52YXIgTkVHQVRJVkVfWkVSTyA9ICEhJG5hdGl2ZSAmJiAxIC8gWzFdLmxhc3RJbmRleE9mKDEsIC0wKSA8IDA7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKE5FR0FUSVZFX1pFUk8gfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkbmF0aXZlKSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE0IC8gMTUuNC40LjE1IEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGxhc3RJbmRleE9mOiBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ID0gQFsqLTFdICovKSB7XG4gICAgLy8gY29udmVydCAtMCB0byArMFxuICAgIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gJG5hdGl2ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gICAgdmFyIE8gPSB0b0lPYmplY3QodGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSBsZW5ndGggLSAxO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBNYXRoLm1pbihpbmRleCwgdG9JbnRlZ2VyKGFyZ3VtZW50c1sxXSkpO1xuICAgIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gICAgZm9yICg7aW5kZXggPj0gMDsgaW5kZXgtLSkgaWYgKGluZGV4IGluIE8pIGlmIChPW2luZGV4XSA9PT0gc2VhcmNoRWxlbWVudCkgcmV0dXJuIGluZGV4IHx8IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJG1hcCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgxKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLm1hcCwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjE1IC8gMTUuNC40LjE5IEFycmF5LnByb3RvdHlwZS5tYXAoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuL19jcmVhdGUtcHJvcGVydHknKTtcblxuLy8gV2ViS2l0IEFycmF5Lm9mIGlzbid0IGdlbmVyaWNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuICEoQXJyYXkub2YuY2FsbChGKSBpbnN0YW5jZW9mIEYpO1xufSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4yLjMgQXJyYXkub2YoIC4uLml0ZW1zKVxuICBvZjogZnVuY3Rpb24gb2YoLyogLi4uYXJncyAqLykge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBuZXcgKHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgPyB0aGlzIDogQXJyYXkpKGFMZW4pO1xuICAgIHdoaWxlIChhTGVuID4gaW5kZXgpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwgaW5kZXgsIGFyZ3VtZW50c1tpbmRleCsrXSk7XG4gICAgcmVzdWx0Lmxlbmd0aCA9IGFMZW47XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuL19hcnJheS1yZWR1Y2UnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnJlZHVjZVJpZ2h0LCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTkgLyAxNS40LjQuMjIgQXJyYXkucHJvdG90eXBlLnJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlUmlnaHQ6IGZ1bmN0aW9uIHJlZHVjZVJpZ2h0KGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIHRydWUpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTggLyAxNS40LjQuMjEgQXJyYXkucHJvdG90eXBlLnJlZHVjZShjYWxsYmFja2ZuIFssIGluaXRpYWxWYWx1ZV0pXG4gIHJlZHVjZTogZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgICByZXR1cm4gJHJlZHVjZSh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoLCBhcmd1bWVudHNbMV0sIGZhbHNlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuL19odG1sJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFycmF5U2xpY2UgPSBbXS5zbGljZTtcblxuLy8gZmFsbGJhY2sgZm9yIG5vdCBhcnJheS1saWtlIEVTMyBzdHJpbmdzIGFuZCBET00gb2JqZWN0c1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgaWYgKGh0bWwpIGFycmF5U2xpY2UuY2FsbChodG1sKTtcbn0pLCAnQXJyYXknLCB7XG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShiZWdpbiwgZW5kKSB7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRoaXMubGVuZ3RoKTtcbiAgICB2YXIga2xhc3MgPSBjb2YodGhpcyk7XG4gICAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQ7XG4gICAgaWYgKGtsYXNzID09ICdBcnJheScpIHJldHVybiBhcnJheVNsaWNlLmNhbGwodGhpcywgYmVnaW4sIGVuZCk7XG4gICAgdmFyIHN0YXJ0ID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW4pO1xuICAgIHZhciB1cFRvID0gdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuKTtcbiAgICB2YXIgc2l6ZSA9IHRvTGVuZ3RoKHVwVG8gLSBzdGFydCk7XG4gICAgdmFyIGNsb25lZCA9IG5ldyBBcnJheShzaXplKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgZm9yICg7IGkgPCBzaXplOyBpKyspIGNsb25lZFtpXSA9IGtsYXNzID09ICdTdHJpbmcnXG4gICAgICA/IHRoaXMuY2hhckF0KHN0YXJ0ICsgaSlcbiAgICAgIDogdGhpc1tzdGFydCArIGldO1xuICAgIHJldHVybiBjbG9uZWQ7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkc29tZSA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgzKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKFtdLnNvbWUsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yMyAvIDE1LjQuNC4xNyBBcnJheS5wcm90b3R5cGUuc29tZShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRzb21lKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJHNvcnQgPSBbXS5zb3J0O1xudmFyIHRlc3QgPSBbMSwgMiwgM107XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU4LVxuICB0ZXN0LnNvcnQodW5kZWZpbmVkKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IGJ1Z1xuICB0ZXN0LnNvcnQobnVsbCk7XG4gIC8vIE9sZCBXZWJLaXRcbn0pIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJHNvcnQpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMjUgQXJyYXkucHJvdG90eXBlLnNvcnQoY29tcGFyZWZuKVxuICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgIHJldHVybiBjb21wYXJlZm4gPT09IHVuZGVmaW5lZFxuICAgICAgPyAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpKVxuICAgICAgOiAkc29ydC5jYWxsKHRvT2JqZWN0KHRoaXMpLCBhRnVuY3Rpb24oY29tcGFyZWZuKSk7XG4gIH1cbn0pO1xuIiwicmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnQXJyYXknKTtcbiIsIi8vIDIwLjMuMy4xIC8gMTUuOS40LjQgRGF0ZS5ub3coKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdEYXRlJywgeyBub3c6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBEYXRlKCkuZ2V0VGltZSgpOyB9IH0pO1xuIiwiLy8gMjAuMy40LjM2IC8gMTUuOS41LjQzIERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JU09TdHJpbmcgPSByZXF1aXJlKCcuL19kYXRlLXRvLWlzby1zdHJpbmcnKTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyAhPT0gdG9JU09TdHJpbmcpLCAnRGF0ZScsIHtcbiAgdG9JU09TdHJpbmc6IHRvSVNPU3RyaW5nXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbmV3IERhdGUoTmFOKS50b0pTT04oKSAhPT0gbnVsbFxuICAgIHx8IERhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHsgdG9JU09TdHJpbmc6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDE7IH0gfSkgIT09IDE7XG59KSwgJ0RhdGUnLCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTihrZXkpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBwdiA9IHRvUHJpbWl0aXZlKE8pO1xuICAgIHJldHVybiB0eXBlb2YgcHYgPT0gJ251bWJlcicgJiYgIWlzRmluaXRlKHB2KSA/IG51bGwgOiBPLnRvSVNPU3RyaW5nKCk7XG4gIH1cbn0pO1xuIiwidmFyIFRPX1BSSU1JVElWRSA9IHJlcXVpcmUoJy4vX3drcycpKCd0b1ByaW1pdGl2ZScpO1xudmFyIHByb3RvID0gRGF0ZS5wcm90b3R5cGU7XG5cbmlmICghKFRPX1BSSU1JVElWRSBpbiBwcm90bykpIHJlcXVpcmUoJy4vX2hpZGUnKShwcm90bywgVE9fUFJJTUlUSVZFLCByZXF1aXJlKCcuL19kYXRlLXRvLXByaW1pdGl2ZScpKTtcbiIsInZhciBEYXRlUHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcbnZhciBJTlZBTElEX0RBVEUgPSAnSW52YWxpZCBEYXRlJztcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyICR0b1N0cmluZyA9IERhdGVQcm90b1tUT19TVFJJTkddO1xudmFyIGdldFRpbWUgPSBEYXRlUHJvdG8uZ2V0VGltZTtcbmlmIChuZXcgRGF0ZShOYU4pICsgJycgIT0gSU5WQUxJRF9EQVRFKSB7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoRGF0ZVByb3RvLCBUT19TVFJJTkcsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHZhciB2YWx1ZSA9IGdldFRpbWUuY2FsbCh0aGlzKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIHZhbHVlID09PSB2YWx1ZSA/ICR0b1N0cmluZy5jYWxsKHRoaXMpIDogSU5WQUxJRF9EQVRFO1xuICB9KTtcbn1cbiIsIi8vIDE5LjIuMy4yIC8gMTUuMy40LjUgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQodGhpc0FyZywgYXJncy4uLilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnRnVuY3Rpb24nLCB7IGJpbmQ6IHJlcXVpcmUoJy4vX2JpbmQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIEhBU19JTlNUQU5DRSA9IHJlcXVpcmUoJy4vX3drcycpKCdoYXNJbnN0YW5jZScpO1xudmFyIEZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG4vLyAxOS4yLjMuNiBGdW5jdGlvbi5wcm90b3R5cGVbQEBoYXNJbnN0YW5jZV0oVilcbmlmICghKEhBU19JTlNUQU5DRSBpbiBGdW5jdGlvblByb3RvKSkgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihGdW5jdGlvblByb3RvLCBIQVNfSU5TVEFOQ0UsIHsgdmFsdWU6IGZ1bmN0aW9uIChPKSB7XG4gIGlmICh0eXBlb2YgdGhpcyAhPSAnZnVuY3Rpb24nIHx8ICFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIWlzT2JqZWN0KHRoaXMucHJvdG90eXBlKSkgcmV0dXJuIE8gaW5zdGFuY2VvZiB0aGlzO1xuICAvLyBmb3IgZW52aXJvbm1lbnQgdy9vIG5hdGl2ZSBgQEBoYXNJbnN0YW5jZWAgbG9naWMgZW5vdWdoIGBpbnN0YW5jZW9mYCwgYnV0IGFkZCB0aGlzOlxuICB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKSBpZiAodGhpcy5wcm90b3R5cGUgPT09IE8pIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59IH0pO1xuIiwidmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBGUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG52YXIgbmFtZVJFID0gL15cXHMqZnVuY3Rpb24gKFteIChdKikvO1xudmFyIE5BTUUgPSAnbmFtZSc7XG5cbi8vIDE5LjIuNC4yIG5hbWVcbk5BTUUgaW4gRlByb3RvIHx8IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgZFAoRlByb3RvLCBOQU1FLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoJycgKyB0aGlzKS5tYXRjaChuYW1lUkUpWzFdO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTUFQID0gJ01hcCc7XG5cbi8vIDIzLjEgTWFwIE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKE1BUCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gTWFwKCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMS4zLjYgTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICB2YXIgZW50cnkgPSBzdHJvbmcuZ2V0RW50cnkodmFsaWRhdGUodGhpcywgTUFQKSwga2V5KTtcbiAgICByZXR1cm4gZW50cnkgJiYgZW50cnkudjtcbiAgfSxcbiAgLy8gMjMuMS4zLjkgTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlcbiAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIE1BUCksIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nLCB0cnVlKTtcbiIsIi8vIDIwLjIuMi4zIE1hdGguYWNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbG9nMXAgPSByZXF1aXJlKCcuL19tYXRoLWxvZzFwJyk7XG52YXIgc3FydCA9IE1hdGguc3FydDtcbnZhciAkYWNvc2ggPSBNYXRoLmFjb3NoO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICEoJGFjb3NoXG4gIC8vIFY4IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM1MDlcbiAgJiYgTWF0aC5mbG9vcigkYWNvc2goTnVtYmVyLk1BWF9WQUxVRSkpID09IDcxMFxuICAvLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYWNvc2goSW5maW5pdHkpIC0+IE5hTlxuICAmJiAkYWNvc2goSW5maW5pdHkpID09IEluZmluaXR5XG4pLCAnTWF0aCcsIHtcbiAgYWNvc2g6IGZ1bmN0aW9uIGFjb3NoKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPCAxID8gTmFOIDogeCA+IDk0OTA2MjY1LjYyNDI1MTU2XG4gICAgICA/IE1hdGgubG9nKHgpICsgTWF0aC5MTjJcbiAgICAgIDogbG9nMXAoeCAtIDEgKyBzcXJ0KHggLSAxKSAqIHNxcnQoeCArIDEpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuNSBNYXRoLmFzaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhc2luaCA9IE1hdGguYXNpbmg7XG5cbmZ1bmN0aW9uIGFzaW5oKHgpIHtcbiAgcmV0dXJuICFpc0Zpbml0ZSh4ID0gK3gpIHx8IHggPT0gMCA/IHggOiB4IDwgMCA/IC1hc2luaCgteCkgOiBNYXRoLmxvZyh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgMSkpO1xufVxuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXNpbmgoMCkgLT4gLTBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXNpbmggJiYgMSAvICRhc2luaCgwKSA+IDApLCAnTWF0aCcsIHsgYXNpbmg6IGFzaW5oIH0pO1xuIiwiLy8gMjAuMi4yLjcgTWF0aC5hdGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXRhbmggPSBNYXRoLmF0YW5oO1xuXG4vLyBUb3IgQnJvd3NlciBidWc6IE1hdGguYXRhbmgoLTApIC0+IDBcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYXRhbmggJiYgMSAvICRhdGFuaCgtMCkgPCAwKSwgJ01hdGgnLCB7XG4gIGF0YW5oOiBmdW5jdGlvbiBhdGFuaCh4KSB7XG4gICAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuOSBNYXRoLmNicnQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNicnQ6IGZ1bmN0aW9uIGNicnQoeCkge1xuICAgIHJldHVybiBzaWduKHggPSAreCkgKiBNYXRoLnBvdyhNYXRoLmFicyh4KSwgMSAvIDMpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMSBNYXRoLmNsejMyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsejMyOiBmdW5jdGlvbiBjbHozMih4KSB7XG4gICAgcmV0dXJuICh4ID4+Pj0gMCkgPyAzMSAtIE1hdGguZmxvb3IoTWF0aC5sb2coeCArIDAuNSkgKiBNYXRoLkxPRzJFKSA6IDMyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xMiBNYXRoLmNvc2goeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY29zaDogZnVuY3Rpb24gY29zaCh4KSB7XG4gICAgcmV0dXJuIChleHAoeCA9ICt4KSArIGV4cCgteCkpIC8gMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTQgTWF0aC5leHBtMSh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCRleHBtMSAhPSBNYXRoLmV4cG0xKSwgJ01hdGgnLCB7IGV4cG0xOiAkZXhwbTEgfSk7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgZnJvdW5kOiByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpIH0pO1xuIiwiLy8gMjAuMi4yLjE3IE1hdGguaHlwb3QoW3ZhbHVlMVssIHZhbHVlMlssIOKApiBdXV0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFicyA9IE1hdGguYWJzO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGh5cG90OiBmdW5jdGlvbiBoeXBvdCh2YWx1ZTEsIHZhbHVlMikgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbGFyZyA9IDA7XG4gICAgdmFyIGFyZywgZGl2O1xuICAgIHdoaWxlIChpIDwgYUxlbikge1xuICAgICAgYXJnID0gYWJzKGFyZ3VtZW50c1tpKytdKTtcbiAgICAgIGlmIChsYXJnIDwgYXJnKSB7XG4gICAgICAgIGRpdiA9IGxhcmcgLyBhcmc7XG4gICAgICAgIHN1bSA9IHN1bSAqIGRpdiAqIGRpdiArIDE7XG4gICAgICAgIGxhcmcgPSBhcmc7XG4gICAgICB9IGVsc2UgaWYgKGFyZyA+IDApIHtcbiAgICAgICAgZGl2ID0gYXJnIC8gbGFyZztcbiAgICAgICAgc3VtICs9IGRpdiAqIGRpdjtcbiAgICAgIH0gZWxzZSBzdW0gKz0gYXJnO1xuICAgIH1cbiAgICByZXR1cm4gbGFyZyA9PT0gSW5maW5pdHkgPyBJbmZpbml0eSA6IGxhcmcgKiBNYXRoLnNxcnQoc3VtKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMTggTWF0aC5pbXVsKHgsIHkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRpbXVsID0gTWF0aC5pbXVsO1xuXG4vLyBzb21lIFdlYktpdCB2ZXJzaW9ucyBmYWlscyB3aXRoIGJpZyBudW1iZXJzLCBzb21lIGhhcyB3cm9uZyBhcml0eVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICRpbXVsKDB4ZmZmZmZmZmYsIDUpICE9IC01IHx8ICRpbXVsLmxlbmd0aCAhPSAyO1xufSksICdNYXRoJywge1xuICBpbXVsOiBmdW5jdGlvbiBpbXVsKHgsIHkpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciB4biA9ICt4O1xuICAgIHZhciB5biA9ICt5O1xuICAgIHZhciB4bCA9IFVJTlQxNiAmIHhuO1xuICAgIHZhciB5bCA9IFVJTlQxNiAmIHluO1xuICAgIHJldHVybiAwIHwgeGwgKiB5bCArICgoVUlOVDE2ICYgeG4gPj4+IDE2KSAqIHlsICsgeGwgKiAoVUlOVDE2ICYgeW4gPj4+IDE2KSA8PCAxNiA+Pj4gMCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjIxIE1hdGgubG9nMTAoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgbG9nMTA6IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgKiBNYXRoLkxPRzEwRTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjAgTWF0aC5sb2cxcCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBsb2cxcDogcmVxdWlyZSgnLi9fbWF0aC1sb2cxcCcpIH0pO1xuIiwiLy8gMjAuMi4yLjIyIE1hdGgubG9nMih4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cyOiBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMjtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ246IHJlcXVpcmUoJy4vX21hdGgtc2lnbicpIH0pO1xuIiwiLy8gMjAuMi4yLjMwIE1hdGguc2luaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuLy8gVjggbmVhciBDaHJvbWl1bSAzOCBoYXMgYSBwcm9ibGVtIHdpdGggdmVyeSBzbWFsbCBudW1iZXJzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIU1hdGguc2luaCgtMmUtMTcpICE9IC0yZS0xNztcbn0pLCAnTWF0aCcsIHtcbiAgc2luaDogZnVuY3Rpb24gc2luaCh4KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHggPSAreCkgPCAxXG4gICAgICA/IChleHBtMSh4KSAtIGV4cG0xKC14KSkgLyAyXG4gICAgICA6IChleHAoeCAtIDEpIC0gZXhwKC14IC0gMSkpICogKE1hdGguRSAvIDIpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4zMyBNYXRoLnRhbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZXhwbTEgPSByZXF1aXJlKCcuL19tYXRoLWV4cG0xJyk7XG52YXIgZXhwID0gTWF0aC5leHA7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdGFuaDogZnVuY3Rpb24gdGFuaCh4KSB7XG4gICAgdmFyIGEgPSBleHBtMSh4ID0gK3gpO1xuICAgIHZhciBiID0gZXhwbTEoLXgpO1xuICAgIHJldHVybiBhID09IEluZmluaXR5ID8gMSA6IGIgPT0gSW5maW5pdHkgPyAtMSA6IChhIC0gYikgLyAoZXhwKHgpICsgZXhwKC14KSk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjM0IE1hdGgudHJ1bmMoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdHJ1bmM6IGZ1bmN0aW9uIHRydW5jKGl0KSB7XG4gICAgcmV0dXJuIChpdCA+IDAgPyBNYXRoLmZsb29yIDogTWF0aC5jZWlsKShpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIGluaGVyaXRJZlJlcXVpcmVkID0gcmVxdWlyZSgnLi9faW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgJHRyaW0gPSByZXF1aXJlKCcuL19zdHJpbmctdHJpbScpLnRyaW07XG52YXIgTlVNQkVSID0gJ051bWJlcic7XG52YXIgJE51bWJlciA9IGdsb2JhbFtOVU1CRVJdO1xudmFyIEJhc2UgPSAkTnVtYmVyO1xudmFyIHByb3RvID0gJE51bWJlci5wcm90b3R5cGU7XG4vLyBPcGVyYSB+MTIgaGFzIGJyb2tlbiBPYmplY3QjdG9TdHJpbmdcbnZhciBCUk9LRU5fQ09GID0gY29mKHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKShwcm90bykpID09IE5VTUJFUjtcbnZhciBUUklNID0gJ3RyaW0nIGluIFN0cmluZy5wcm90b3R5cGU7XG5cbi8vIDcuMS4zIFRvTnVtYmVyKGFyZ3VtZW50KVxudmFyIHRvTnVtYmVyID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHZhciBpdCA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCBmYWxzZSk7XG4gIGlmICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgJiYgaXQubGVuZ3RoID4gMikge1xuICAgIGl0ID0gVFJJTSA/IGl0LnRyaW0oKSA6ICR0cmltKGl0LCAzKTtcbiAgICB2YXIgZmlyc3QgPSBpdC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciB0aGlyZCwgcmFkaXgsIG1heENvZGU7XG4gICAgaWYgKGZpcnN0ID09PSA0MyB8fCBmaXJzdCA9PT0gNDUpIHtcbiAgICAgIHRoaXJkID0gaXQuY2hhckNvZGVBdCgyKTtcbiAgICAgIGlmICh0aGlyZCA9PT0gODggfHwgdGhpcmQgPT09IDEyMCkgcmV0dXJuIE5hTjsgLy8gTnVtYmVyKCcrMHgxJykgc2hvdWxkIGJlIE5hTiwgb2xkIFY4IGZpeFxuICAgIH0gZWxzZSBpZiAoZmlyc3QgPT09IDQ4KSB7XG4gICAgICBzd2l0Y2ggKGl0LmNoYXJDb2RlQXQoMSkpIHtcbiAgICAgICAgY2FzZSA2NjogY2FzZSA5ODogcmFkaXggPSAyOyBtYXhDb2RlID0gNDk7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMGJbMDFdKyQvaVxuICAgICAgICBjYXNlIDc5OiBjYXNlIDExMTogcmFkaXggPSA4OyBtYXhDb2RlID0gNTU7IGJyZWFrOyAvLyBmYXN0IGVxdWFsIC9eMG9bMC03XSskL2lcbiAgICAgICAgZGVmYXVsdDogcmV0dXJuICtpdDtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGRpZ2l0cyA9IGl0LnNsaWNlKDIpLCBpID0gMCwgbCA9IGRpZ2l0cy5sZW5ndGgsIGNvZGU7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgY29kZSA9IGRpZ2l0cy5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBwYXJzZUludCBwYXJzZXMgYSBzdHJpbmcgdG8gYSBmaXJzdCB1bmF2YWlsYWJsZSBzeW1ib2xcbiAgICAgICAgLy8gYnV0IFRvTnVtYmVyIHNob3VsZCByZXR1cm4gTmFOIGlmIGEgc3RyaW5nIGNvbnRhaW5zIHVuYXZhaWxhYmxlIHN5bWJvbHNcbiAgICAgICAgaWYgKGNvZGUgPCA0OCB8fCBjb2RlID4gbWF4Q29kZSkgcmV0dXJuIE5hTjtcbiAgICAgIH0gcmV0dXJuIHBhcnNlSW50KGRpZ2l0cywgcmFkaXgpO1xuICAgIH1cbiAgfSByZXR1cm4gK2l0O1xufTtcblxuaWYgKCEkTnVtYmVyKCcgMG8xJykgfHwgISROdW1iZXIoJzBiMScpIHx8ICROdW1iZXIoJysweDEnKSkge1xuICAkTnVtYmVyID0gZnVuY3Rpb24gTnVtYmVyKHZhbHVlKSB7XG4gICAgdmFyIGl0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDEgPyAwIDogdmFsdWU7XG4gICAgdmFyIHRoYXQgPSB0aGlzO1xuICAgIHJldHVybiB0aGF0IGluc3RhbmNlb2YgJE51bWJlclxuICAgICAgLy8gY2hlY2sgb24gMS4uY29uc3RydWN0b3IoZm9vKSBjYXNlXG4gICAgICAmJiAoQlJPS0VOX0NPRiA/IGZhaWxzKGZ1bmN0aW9uICgpIHsgcHJvdG8udmFsdWVPZi5jYWxsKHRoYXQpOyB9KSA6IGNvZih0aGF0KSAhPSBOVU1CRVIpXG4gICAgICAgID8gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UodG9OdW1iZXIoaXQpKSwgdGhhdCwgJE51bWJlcikgOiB0b051bWJlcihpdCk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZ09QTihCYXNlKSA6IChcbiAgICAvLyBFUzM6XG4gICAgJ01BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLCcgK1xuICAgIC8vIEVTNiAoaW4gY2FzZSwgaWYgbW9kdWxlcyB3aXRoIEVTNiBOdW1iZXIgc3RhdGljcyByZXF1aXJlZCBiZWZvcmUpOlxuICAgICdFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsJyArXG4gICAgJ01JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXInXG4gICkuc3BsaXQoJywnKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOyBqKyspIHtcbiAgICBpZiAoaGFzKEJhc2UsIGtleSA9IGtleXNbal0pICYmICFoYXMoJE51bWJlciwga2V5KSkge1xuICAgICAgZFAoJE51bWJlciwga2V5LCBnT1BEKEJhc2UsIGtleSkpO1xuICAgIH1cbiAgfVxuICAkTnVtYmVyLnByb3RvdHlwZSA9IHByb3RvO1xuICBwcm90by5jb25zdHJ1Y3RvciA9ICROdW1iZXI7XG4gIHJlcXVpcmUoJy4vX3JlZGVmaW5lJykoZ2xvYmFsLCBOVU1CRVIsICROdW1iZXIpO1xufVxuIiwiLy8gMjAuMS4yLjEgTnVtYmVyLkVQU0lMT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBFUFNJTE9OOiBNYXRoLnBvdygyLCAtNTIpIH0pO1xuIiwiLy8gMjAuMS4yLjIgTnVtYmVyLmlzRmluaXRlKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgX2lzRmluaXRlID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuaXNGaW5pdGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc0Zpbml0ZTogZnVuY3Rpb24gaXNGaW5pdGUoaXQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGl0ID09ICdudW1iZXInICYmIF9pc0Zpbml0ZShpdCk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjMgTnVtYmVyLmlzSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgaXNJbnRlZ2VyOiByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJykgfSk7XG4iLCIvLyAyMC4xLjIuNCBOdW1iZXIuaXNOYU4obnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzTmFOOiBmdW5jdGlvbiBpc05hTihudW1iZXIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgcmV0dXJuIG51bWJlciAhPSBudW1iZXI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjUgTnVtYmVyLmlzU2FmZUludGVnZXIobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBpc0ludGVnZXIgPSByZXF1aXJlKCcuL19pcy1pbnRlZ2VyJyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywge1xuICBpc1NhZmVJbnRlZ2VyOiBmdW5jdGlvbiBpc1NhZmVJbnRlZ2VyKG51bWJlcikge1xuICAgIHJldHVybiBpc0ludGVnZXIobnVtYmVyKSAmJiBhYnMobnVtYmVyKSA8PSAweDFmZmZmZmZmZmZmZmZmO1xuICB9XG59KTtcbiIsIi8vIDIwLjEuMi42IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUFYX1NBRkVfSU5URUdFUjogMHgxZmZmZmZmZmZmZmZmZiB9KTtcbiIsIi8vIDIwLjEuMi4xMCBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IE1JTl9TQUZFX0lOVEVHRVI6IC0weDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAyMC4xLjIuMTIgTnVtYmVyLnBhcnNlRmxvYXQoc3RyaW5nKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTnVtYmVyLnBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCAnTnVtYmVyJywgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAyMC4xLjIuMTMgTnVtYmVyLnBhcnNlSW50KHN0cmluZywgcmFkaXgpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgJ051bWJlcicsIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFOdW1iZXJWYWx1ZSA9IHJlcXVpcmUoJy4vX2EtbnVtYmVyLXZhbHVlJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyICR0b0ZpeGVkID0gMS4wLnRvRml4ZWQ7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGRhdGEgPSBbMCwgMCwgMCwgMCwgMCwgMF07XG52YXIgRVJST1IgPSAnTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uISc7XG52YXIgWkVSTyA9ICcwJztcblxudmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKG4sIGMpIHtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIGMyID0gYztcbiAgd2hpbGUgKCsraSA8IDYpIHtcbiAgICBjMiArPSBuICogZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gYzIgJSAxZTc7XG4gICAgYzIgPSBmbG9vcihjMiAvIDFlNyk7XG4gIH1cbn07XG52YXIgZGl2aWRlID0gZnVuY3Rpb24gKG4pIHtcbiAgdmFyIGkgPSA2O1xuICB2YXIgYyA9IDA7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGMgKz0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZmxvb3IoYyAvIG4pO1xuICAgIGMgPSAoYyAlIG4pICogMWU3O1xuICB9XG59O1xudmFyIG51bVRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaSA9IDY7XG4gIHZhciBzID0gJyc7XG4gIHdoaWxlICgtLWkgPj0gMCkge1xuICAgIGlmIChzICE9PSAnJyB8fCBpID09PSAwIHx8IGRhdGFbaV0gIT09IDApIHtcbiAgICAgIHZhciB0ID0gU3RyaW5nKGRhdGFbaV0pO1xuICAgICAgcyA9IHMgPT09ICcnID8gdCA6IHMgKyByZXBlYXQuY2FsbChaRVJPLCA3IC0gdC5sZW5ndGgpICsgdDtcbiAgICB9XG4gIH0gcmV0dXJuIHM7XG59O1xudmFyIHBvdyA9IGZ1bmN0aW9uICh4LCBuLCBhY2MpIHtcbiAgcmV0dXJuIG4gPT09IDAgPyBhY2MgOiBuICUgMiA9PT0gMSA/IHBvdyh4LCBuIC0gMSwgYWNjICogeCkgOiBwb3coeCAqIHgsIG4gLyAyLCBhY2MpO1xufTtcbnZhciBsb2cgPSBmdW5jdGlvbiAoeCkge1xuICB2YXIgbiA9IDA7XG4gIHZhciB4MiA9IHg7XG4gIHdoaWxlICh4MiA+PSA0MDk2KSB7XG4gICAgbiArPSAxMjtcbiAgICB4MiAvPSA0MDk2O1xuICB9XG4gIHdoaWxlICh4MiA+PSAyKSB7XG4gICAgbiArPSAxO1xuICAgIHgyIC89IDI7XG4gIH0gcmV0dXJuIG47XG59O1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICghISR0b0ZpeGVkICYmIChcbiAgMC4wMDAwOC50b0ZpeGVkKDMpICE9PSAnMC4wMDAnIHx8XG4gIDAuOS50b0ZpeGVkKDApICE9PSAnMScgfHxcbiAgMS4yNTUudG9GaXhlZCgyKSAhPT0gJzEuMjUnIHx8XG4gIDEwMDAwMDAwMDAwMDAwMDAxMjguMC50b0ZpeGVkKDApICE9PSAnMTAwMDAwMDAwMDAwMDAwMDEyOCdcbikgfHwgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9GaXhlZC5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9GaXhlZDogZnVuY3Rpb24gdG9GaXhlZChmcmFjdGlvbkRpZ2l0cykge1xuICAgIHZhciB4ID0gYU51bWJlclZhbHVlKHRoaXMsIEVSUk9SKTtcbiAgICB2YXIgZiA9IHRvSW50ZWdlcihmcmFjdGlvbkRpZ2l0cyk7XG4gICAgdmFyIHMgPSAnJztcbiAgICB2YXIgbSA9IFpFUk87XG4gICAgdmFyIGUsIHosIGosIGs7XG4gICAgaWYgKGYgPCAwIHx8IGYgPiAyMCkgdGhyb3cgUmFuZ2VFcnJvcihFUlJPUik7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmICh4ICE9IHgpIHJldHVybiAnTmFOJztcbiAgICBpZiAoeCA8PSAtMWUyMSB8fCB4ID49IDFlMjEpIHJldHVybiBTdHJpbmcoeCk7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBzID0gJy0nO1xuICAgICAgeCA9IC14O1xuICAgIH1cbiAgICBpZiAoeCA+IDFlLTIxKSB7XG4gICAgICBlID0gbG9nKHggKiBwb3coMiwgNjksIDEpKSAtIDY5O1xuICAgICAgeiA9IGUgPCAwID8geCAqIHBvdygyLCAtZSwgMSkgOiB4IC8gcG93KDIsIGUsIDEpO1xuICAgICAgeiAqPSAweDEwMDAwMDAwMDAwMDAwO1xuICAgICAgZSA9IDUyIC0gZTtcbiAgICAgIGlmIChlID4gMCkge1xuICAgICAgICBtdWx0aXBseSgwLCB6KTtcbiAgICAgICAgaiA9IGY7XG4gICAgICAgIHdoaWxlIChqID49IDcpIHtcbiAgICAgICAgICBtdWx0aXBseSgxZTcsIDApO1xuICAgICAgICAgIGogLT0gNztcbiAgICAgICAgfVxuICAgICAgICBtdWx0aXBseShwb3coMTAsIGosIDEpLCAwKTtcbiAgICAgICAgaiA9IGUgLSAxO1xuICAgICAgICB3aGlsZSAoaiA+PSAyMykge1xuICAgICAgICAgIGRpdmlkZSgxIDw8IDIzKTtcbiAgICAgICAgICBqIC09IDIzO1xuICAgICAgICB9XG4gICAgICAgIGRpdmlkZSgxIDw8IGopO1xuICAgICAgICBtdWx0aXBseSgxLCAxKTtcbiAgICAgICAgZGl2aWRlKDIpO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBtdWx0aXBseSgxIDw8IC1lLCAwKTtcbiAgICAgICAgbSA9IG51bVRvU3RyaW5nKCkgKyByZXBlYXQuY2FsbChaRVJPLCBmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGYgPiAwKSB7XG4gICAgICBrID0gbS5sZW5ndGg7XG4gICAgICBtID0gcyArIChrIDw9IGYgPyAnMC4nICsgcmVwZWF0LmNhbGwoWkVSTywgZiAtIGspICsgbSA6IG0uc2xpY2UoMCwgayAtIGYpICsgJy4nICsgbS5zbGljZShrIC0gZikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtID0gcyArIG07XG4gICAgfSByZXR1cm4gbTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciAkdG9QcmVjaXNpb24gPSAxLjAudG9QcmVjaXNpb247XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIElFNy1cbiAgcmV0dXJuICR0b1ByZWNpc2lvbi5jYWxsKDEsIHVuZGVmaW5lZCkgIT09ICcxJztcbn0pIHx8ICEkZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBWOCB+IEFuZHJvaWQgNC4zLVxuICAkdG9QcmVjaXNpb24uY2FsbCh7fSk7XG59KSksICdOdW1iZXInLCB7XG4gIHRvUHJlY2lzaW9uOiBmdW5jdGlvbiB0b1ByZWNpc2lvbihwcmVjaXNpb24pIHtcbiAgICB2YXIgdGhhdCA9IGFOdW1iZXJWYWx1ZSh0aGlzLCAnTnVtYmVyI3RvUHJlY2lzaW9uOiBpbmNvcnJlY3QgaW52b2NhdGlvbiEnKTtcbiAgICByZXR1cm4gcHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyAkdG9QcmVjaXNpb24uY2FsbCh0aGF0KSA6ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQsIHByZWNpc2lvbik7XG4gIH1cbn0pO1xuIiwiLy8gMTkuMS4zLjEgT2JqZWN0LmFzc2lnbih0YXJnZXQsIHNvdXJjZSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GLCAnT2JqZWN0JywgeyBhc3NpZ246IHJlcXVpcmUoJy4vX29iamVjdC1hc3NpZ24nKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMiAvIDE1LjIuMy41IE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0JywgeyBjcmVhdGU6IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuMyAvIDE1LjIuMy43IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpLCAnT2JqZWN0JywgeyBkZWZpbmVQcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19vYmplY3QtZHBzJykgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuLy8gMTkuMS4yLjQgLyAxNS4yLjMuNiBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnR5OiByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mIH0pO1xuIiwiLy8gMTkuMS4yLjUgT2JqZWN0LmZyZWV6ZShPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKS5vbkZyZWV6ZTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdmcmVlemUnLCBmdW5jdGlvbiAoJGZyZWV6ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gZnJlZXplKGl0KSB7XG4gICAgcmV0dXJuICRmcmVlemUgJiYgaXNPYmplY3QoaXQpID8gJGZyZWV6ZShtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKVxudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldE93blByb3BlcnR5RGVzY3JpcHRvcicsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodG9JT2JqZWN0KGl0KSwga2V5KTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlOYW1lcycsIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuLWV4dCcpLmY7XG59KTtcbiIsIi8vIDE5LjEuMi45IE9iamVjdC5nZXRQcm90b3R5cGVPZihPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2dldFByb3RvdHlwZU9mJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YoaXQpIHtcbiAgICByZXR1cm4gJGdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMSBPYmplY3QuaXNFeHRlbnNpYmxlKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0V4dGVuc2libGUnLCBmdW5jdGlvbiAoJGlzRXh0ZW5zaWJsZSkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNFeHRlbnNpYmxlKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKGl0KSA6IHRydWUgOiBmYWxzZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjEyIE9iamVjdC5pc0Zyb3plbihPKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnaXNGcm96ZW4nLCBmdW5jdGlvbiAoJGlzRnJvemVuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0Zyb3plbihpdCkge1xuICAgIHJldHVybiBpc09iamVjdChpdCkgPyAkaXNGcm96ZW4gPyAkaXNGcm96ZW4oaXQpIDogZmFsc2UgOiB0cnVlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTMgT2JqZWN0LmlzU2VhbGVkKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc1NlYWxlZCcsIGZ1bmN0aW9uICgkaXNTZWFsZWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzU2VhbGVkKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc1NlYWxlZCA/ICRpc1NlYWxlZChpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xMCBPYmplY3QuaXModmFsdWUxLCB2YWx1ZTIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGlzOiByZXF1aXJlKCcuL19zYW1lLXZhbHVlJykgfSk7XG4iLCIvLyAxOS4xLjIuMTQgT2JqZWN0LmtleXMoTylcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdrZXlzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24ga2V5cyhpdCkge1xuICAgIHJldHVybiAka2V5cyh0b09iamVjdChpdCkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTUgT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3ByZXZlbnRFeHRlbnNpb25zJywgZnVuY3Rpb24gKCRwcmV2ZW50RXh0ZW5zaW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gcHJldmVudEV4dGVuc2lvbnMoaXQpIHtcbiAgICByZXR1cm4gJHByZXZlbnRFeHRlbnNpb25zICYmIGlzT2JqZWN0KGl0KSA/ICRwcmV2ZW50RXh0ZW5zaW9ucyhtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjE3IE9iamVjdC5zZWFsKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ3NlYWwnLCBmdW5jdGlvbiAoJHNlYWwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlYWwoaXQpIHtcbiAgICByZXR1cm4gJHNlYWwgJiYgaXNPYmplY3QoaXQpID8gJHNlYWwobWV0YShpdCkpIDogaXQ7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMy4xOSBPYmplY3Quc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IHNldFByb3RvdHlwZU9mOiByZXF1aXJlKCcuL19zZXQtcHJvdG8nKS5zZXQgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIHRlc3QgPSB7fTtcbnRlc3RbcmVxdWlyZSgnLi9fd2tzJykoJ3RvU3RyaW5nVGFnJyldID0gJ3onO1xuaWYgKHRlc3QgKyAnJyAhPSAnW29iamVjdCB6XScpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgJyArIGNsYXNzb2YodGhpcykgKyAnXSc7XG4gIH0sIHRydWUpO1xufVxuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VGbG9hdCA9IHJlcXVpcmUoJy4vX3BhcnNlLWZsb2F0Jyk7XG4vLyAxOC4yLjQgcGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuRiAqIChwYXJzZUZsb2F0ICE9ICRwYXJzZUZsb2F0KSwgeyBwYXJzZUZsb2F0OiAkcGFyc2VGbG9hdCB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhcnNlSW50ID0gcmVxdWlyZSgnLi9fcGFyc2UtaW50Jyk7XG4vLyAxOC4yLjUgcGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlSW50ICE9ICRwYXJzZUludCksIHsgcGFyc2VJbnQ6ICRwYXJzZUludCB9KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIHRhc2sgPSByZXF1aXJlKCcuL190YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUgPSByZXF1aXJlKCcuL19uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgcGVyZm9ybSA9IHJlcXVpcmUoJy4vX3BlcmZvcm0nKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcbnZhciBQUk9NSVNFID0gJ1Byb21pc2UnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIHZlcnNpb25zID0gcHJvY2VzcyAmJiBwcm9jZXNzLnZlcnNpb25zO1xudmFyIHY4ID0gdmVyc2lvbnMgJiYgdmVyc2lvbnMudjggfHwgJyc7XG52YXIgJFByb21pc2UgPSBnbG9iYWxbUFJPTUlTRV07XG52YXIgaXNOb2RlID0gY2xhc3NvZihwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG52YXIgZW1wdHkgPSBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH07XG52YXIgSW50ZXJuYWwsIG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSwgT3duUHJvbWlzZUNhcGFiaWxpdHksIFdyYXBwZXI7XG52YXIgbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mO1xuXG52YXIgVVNFX05BVElWRSA9ICEhZnVuY3Rpb24gKCkge1xuICB0cnkge1xuICAgIC8vIGNvcnJlY3Qgc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICAgIHZhciBwcm9taXNlID0gJFByb21pc2UucmVzb2x2ZSgxKTtcbiAgICB2YXIgRmFrZVByb21pc2UgPSAocHJvbWlzZS5jb25zdHJ1Y3RvciA9IHt9KVtyZXF1aXJlKCcuL193a3MnKSgnc3BlY2llcycpXSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgICBleGVjKGVtcHR5LCBlbXB0eSk7XG4gICAgfTtcbiAgICAvLyB1bmhhbmRsZWQgcmVqZWN0aW9ucyB0cmFja2luZyBzdXBwb3J0LCBOb2RlSlMgUHJvbWlzZSB3aXRob3V0IGl0IGZhaWxzIEBAc3BlY2llcyB0ZXN0XG4gICAgcmV0dXJuIChpc05vZGUgfHwgdHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCA9PSAnZnVuY3Rpb24nKVxuICAgICAgJiYgcHJvbWlzZS50aGVuKGVtcHR5KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlXG4gICAgICAvLyB2OCA2LjYgKE5vZGUgMTAgYW5kIENocm9tZSA2NikgaGF2ZSBhIGJ1ZyB3aXRoIHJlc29sdmluZyBjdXN0b20gdGhlbmFibGVzXG4gICAgICAvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD04MzA1NjVcbiAgICAgIC8vIHdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gICAgICAmJiB2OC5pbmRleE9mKCc2LjYnKSAhPT0gMFxuICAgICAgJiYgdXNlckFnZW50LmluZGV4T2YoJ0Nocm9tZS82NicpID09PSAtMTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG59KCk7XG5cbi8vIGhlbHBlcnNcbnZhciBpc1RoZW5hYmxlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciB0aGVuO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmIHR5cGVvZiAodGhlbiA9IGl0LnRoZW4pID09ICdmdW5jdGlvbicgPyB0aGVuIDogZmFsc2U7XG59O1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uIChwcm9taXNlLCBpc1JlamVjdCkge1xuICBpZiAocHJvbWlzZS5fbikgcmV0dXJuO1xuICBwcm9taXNlLl9uID0gdHJ1ZTtcbiAgdmFyIGNoYWluID0gcHJvbWlzZS5fYztcbiAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciBvayA9IHByb21pc2UuX3MgPT0gMTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIHJ1biA9IGZ1bmN0aW9uIChyZWFjdGlvbikge1xuICAgICAgdmFyIGhhbmRsZXIgPSBvayA/IHJlYWN0aW9uLm9rIDogcmVhY3Rpb24uZmFpbDtcbiAgICAgIHZhciByZXNvbHZlID0gcmVhY3Rpb24ucmVzb2x2ZTtcbiAgICAgIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gICAgICB2YXIgZG9tYWluID0gcmVhY3Rpb24uZG9tYWluO1xuICAgICAgdmFyIHJlc3VsdCwgdGhlbiwgZXhpdGVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGhhbmRsZXIpIHtcbiAgICAgICAgICBpZiAoIW9rKSB7XG4gICAgICAgICAgICBpZiAocHJvbWlzZS5faCA9PSAyKSBvbkhhbmRsZVVuaGFuZGxlZChwcm9taXNlKTtcbiAgICAgICAgICAgIHByb21pc2UuX2ggPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaGFuZGxlciA9PT0gdHJ1ZSkgcmVzdWx0ID0gdmFsdWU7XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgICAgIHJlc3VsdCA9IGhhbmRsZXIodmFsdWUpOyAvLyBtYXkgdGhyb3dcbiAgICAgICAgICAgIGlmIChkb21haW4pIHtcbiAgICAgICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICAgICAgZXhpdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gcmVhY3Rpb24ucHJvbWlzZSkge1xuICAgICAgICAgICAgcmVqZWN0KFR5cGVFcnJvcignUHJvbWlzZS1jaGFpbiBjeWNsZScpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRoZW4uY2FsbChyZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSBlbHNlIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIHJlamVjdCh2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgfVxuICAgIH07XG4gICAgd2hpbGUgKGNoYWluLmxlbmd0aCA+IGkpIHJ1bihjaGFpbltpKytdKTsgLy8gdmFyaWFibGUgbGVuZ3RoIC0gY2FuJ3QgdXNlIGZvckVhY2hcbiAgICBwcm9taXNlLl9jID0gW107XG4gICAgcHJvbWlzZS5fbiA9IGZhbHNlO1xuICAgIGlmIChpc1JlamVjdCAmJiAhcHJvbWlzZS5faCkgb25VbmhhbmRsZWQocHJvbWlzZSk7XG4gIH0pO1xufTtcbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdmFsdWUgPSBwcm9taXNlLl92O1xuICAgIHZhciB1bmhhbmRsZWQgPSBpc1VuaGFuZGxlZChwcm9taXNlKTtcbiAgICB2YXIgcmVzdWx0LCBoYW5kbGVyLCBjb25zb2xlO1xuICAgIGlmICh1bmhhbmRsZWQpIHtcbiAgICAgIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgcHJvY2Vzcy5lbWl0KCd1bmhhbmRsZWRSZWplY3Rpb24nLCB2YWx1ZSwgcHJvbWlzZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbikge1xuICAgICAgICAgIGhhbmRsZXIoeyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHZhbHVlIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKChjb25zb2xlID0gZ2xvYmFsLmNvbnNvbGUpICYmIGNvbnNvbGUuZXJyb3IpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmhhbmRsZWQgcHJvbWlzZSByZWplY3Rpb24nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gQnJvd3NlcnMgc2hvdWxkIG5vdCB0cmlnZ2VyIGByZWplY3Rpb25IYW5kbGVkYCBldmVudCBpZiBpdCB3YXMgaGFuZGxlZCBoZXJlLCBOb2RlSlMgLSBzaG91bGRcbiAgICAgIHByb21pc2UuX2ggPSBpc05vZGUgfHwgaXNVbmhhbmRsZWQocHJvbWlzZSkgPyAyIDogMTtcbiAgICB9IHByb21pc2UuX2EgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHVuaGFuZGxlZCAmJiByZXN1bHQuZSkgdGhyb3cgcmVzdWx0LnY7XG4gIH0pO1xufTtcbnZhciBpc1VuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHJldHVybiBwcm9taXNlLl9oICE9PSAxICYmIChwcm9taXNlLl9hIHx8IHByb21pc2UuX2MpLmxlbmd0aCA9PT0gMDtcbn07XG52YXIgb25IYW5kbGVVbmhhbmRsZWQgPSBmdW5jdGlvbiAocHJvbWlzZSkge1xuICB0YXNrLmNhbGwoZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhbmRsZXI7XG4gICAgaWYgKGlzTm9kZSkge1xuICAgICAgcHJvY2Vzcy5lbWl0KCdyZWplY3Rpb25IYW5kbGVkJywgcHJvbWlzZSk7XG4gICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9ucmVqZWN0aW9uaGFuZGxlZCkge1xuICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogcHJvbWlzZS5fdiB9KTtcbiAgICB9XG4gIH0pO1xufTtcbnZhciAkcmVqZWN0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcztcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICBwcm9taXNlLl92ID0gdmFsdWU7XG4gIHByb21pc2UuX3MgPSAyO1xuICBpZiAoIXByb21pc2UuX2EpIHByb21pc2UuX2EgPSBwcm9taXNlLl9jLnNsaWNlKCk7XG4gIG5vdGlmeShwcm9taXNlLCB0cnVlKTtcbn07XG52YXIgJHJlc29sdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICB2YXIgdGhlbjtcbiAgaWYgKHByb21pc2UuX2QpIHJldHVybjtcbiAgcHJvbWlzZS5fZCA9IHRydWU7XG4gIHByb21pc2UgPSBwcm9taXNlLl93IHx8IHByb21pc2U7IC8vIHVud3JhcFxuICB0cnkge1xuICAgIGlmIChwcm9taXNlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKSkge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfTsgLy8gd3JhcFxuICAgICAgICB0cnkge1xuICAgICAgICAgIHRoZW4uY2FsbCh2YWx1ZSwgY3R4KCRyZXNvbHZlLCB3cmFwcGVyLCAxKSwgY3R4KCRyZWplY3QsIHdyYXBwZXIsIDEpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICRyZWplY3QuY2FsbCh3cmFwcGVyLCBlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgICAgIHByb21pc2UuX3MgPSAxO1xuICAgICAgbm90aWZ5KHByb21pc2UsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAkcmVqZWN0LmNhbGwoeyBfdzogcHJvbWlzZSwgX2Q6IGZhbHNlIH0sIGUpOyAvLyB3cmFwXG4gIH1cbn07XG5cbi8vIGNvbnN0cnVjdG9yIHBvbHlmaWxsXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgLy8gMjUuNC4zLjEgUHJvbWlzZShleGVjdXRvcilcbiAgJFByb21pc2UgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkUHJvbWlzZSwgUFJPTUlTRSwgJ19oJyk7XG4gICAgYUZ1bmN0aW9uKGV4ZWN1dG9yKTtcbiAgICBJbnRlcm5hbC5jYWxsKHRoaXMpO1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcihjdHgoJHJlc29sdmUsIHRoaXMsIDEpLCBjdHgoJHJlamVjdCwgdGhpcywgMSkpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgJHJlamVjdC5jYWxsKHRoaXMsIGVycik7XG4gICAgfVxuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgSW50ZXJuYWwgPSBmdW5jdGlvbiBQcm9taXNlKGV4ZWN1dG9yKSB7XG4gICAgdGhpcy5fYyA9IFtdOyAgICAgICAgICAgICAvLyA8LSBhd2FpdGluZyByZWFjdGlvbnNcbiAgICB0aGlzLl9hID0gdW5kZWZpbmVkOyAgICAgIC8vIDwtIGNoZWNrZWQgaW4gaXNVbmhhbmRsZWQgcmVhY3Rpb25zXG4gICAgdGhpcy5fcyA9IDA7ICAgICAgICAgICAgICAvLyA8LSBzdGF0ZVxuICAgIHRoaXMuX2QgPSBmYWxzZTsgICAgICAgICAgLy8gPC0gZG9uZVxuICAgIHRoaXMuX3YgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gdmFsdWVcbiAgICB0aGlzLl9oID0gMDsgICAgICAgICAgICAgIC8vIDwtIHJlamVjdGlvbiBzdGF0ZSwgMCAtIGRlZmF1bHQsIDEgLSBoYW5kbGVkLCAyIC0gdW5oYW5kbGVkXG4gICAgdGhpcy5fbiA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBub3RpZnlcbiAgfTtcbiAgSW50ZXJuYWwucHJvdG90eXBlID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJykoJFByb21pc2UucHJvdG90eXBlLCB7XG4gICAgLy8gMjUuNC41LjMgUHJvbWlzZS5wcm90b3R5cGUudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZClcbiAgICB0aGVuOiBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJFByb21pc2UpKTtcbiAgICAgIHJlYWN0aW9uLm9rID0gdHlwZW9mIG9uRnVsZmlsbGVkID09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IHRydWU7XG4gICAgICByZWFjdGlvbi5mYWlsID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT0gJ2Z1bmN0aW9uJyAmJiBvblJlamVjdGVkO1xuICAgICAgcmVhY3Rpb24uZG9tYWluID0gaXNOb2RlID8gcHJvY2Vzcy5kb21haW4gOiB1bmRlZmluZWQ7XG4gICAgICB0aGlzLl9jLnB1c2gocmVhY3Rpb24pO1xuICAgICAgaWYgKHRoaXMuX2EpIHRoaXMuX2EucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fcykgbm90aWZ5KHRoaXMsIGZhbHNlKTtcbiAgICAgIHJldHVybiByZWFjdGlvbi5wcm9taXNlO1xuICAgIH0sXG4gICAgLy8gMjUuNC41LjEgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2gob25SZWplY3RlZClcbiAgICAnY2F0Y2gnOiBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICAgICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICAgIH1cbiAgfSk7XG4gIE93blByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gbmV3IEludGVybmFsKCk7XG4gICAgdGhpcy5wcm9taXNlID0gcHJvbWlzZTtcbiAgICB0aGlzLnJlc29sdmUgPSBjdHgoJHJlc29sdmUsIHByb21pc2UsIDEpO1xuICAgIHRoaXMucmVqZWN0ID0gY3R4KCRyZWplY3QsIHByb21pc2UsIDEpO1xuICB9O1xuICBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoQykge1xuICAgIHJldHVybiBDID09PSAkUHJvbWlzZSB8fCBDID09PSBXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgUHJvbWlzZTogJFByb21pc2UgfSk7XG5yZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpKCRQcm9taXNlLCBQUk9NSVNFKTtcbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoUFJPTUlTRSk7XG5XcmFwcGVyID0gcmVxdWlyZSgnLi9fY29yZScpW1BST01JU0VdO1xuXG4vLyBzdGF0aWNzXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC41IFByb21pc2UucmVqZWN0KHIpXG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHRoaXMpO1xuICAgIHZhciAkJHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgICQkcmVqZWN0KHIpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoTElCUkFSWSB8fCAhVVNFX05BVElWRSksIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjYgUHJvbWlzZS5yZXNvbHZlKHgpXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShMSUJSQVJZICYmIHRoaXMgPT09IFdyYXBwZXIgPyAkUHJvbWlzZSA6IHRoaXMsIHgpO1xuICB9XG59KTtcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIShVU0VfTkFUSVZFICYmIHJlcXVpcmUoJy4vX2l0ZXItZGV0ZWN0JykoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgJFByb21pc2UuYWxsKGl0ZXIpWydjYXRjaCddKGVtcHR5KTtcbn0pKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuMSBQcm9taXNlLmFsbChpdGVyYWJsZSlcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVzb2x2ZSA9IGNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciByZW1haW5pbmcgPSAxO1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICB2YXIgJGluZGV4ID0gaW5kZXgrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgdmFsdWVzLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIEMucmVzb2x2ZShwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzWyRpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAtLXJlbWFpbmluZyB8fCByZXNvbHZlKHZhbHVlcyk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfSxcbiAgLy8gMjUuNC40LjQgUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKVxuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gICAgdmFyIHJlamVjdCA9IGNhcGFiaWxpdHkucmVqZWN0O1xuICAgIHZhciByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvck9mKGl0ZXJhYmxlLCBmYWxzZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lKSByZWplY3QocmVzdWx0LnYpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xIFJlZmxlY3QuYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHJBcHBseSA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5hcHBseTtcbnZhciBmQXBwbHkgPSBGdW5jdGlvbi5hcHBseTtcbi8vIE1TIEVkZ2UgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJBcHBseShmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBhcHBseTogZnVuY3Rpb24gYXBwbHkodGFyZ2V0LCB0aGlzQXJndW1lbnQsIGFyZ3VtZW50c0xpc3QpIHtcbiAgICB2YXIgVCA9IGFGdW5jdGlvbih0YXJnZXQpO1xuICAgIHZhciBMID0gYW5PYmplY3QoYXJndW1lbnRzTGlzdCk7XG4gICAgcmV0dXJuIHJBcHBseSA/IHJBcHBseShULCB0aGlzQXJndW1lbnQsIEwpIDogZkFwcGx5LmNhbGwoVCwgdGhpc0FyZ3VtZW50LCBMKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjIgUmVmbGVjdC5jb25zdHJ1Y3QodGFyZ2V0LCBhcmd1bWVudHNMaXN0IFssIG5ld1RhcmdldF0pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi9fYmluZCcpO1xudmFyIHJDb25zdHJ1Y3QgPSAocmVxdWlyZSgnLi9fZ2xvYmFsJykuUmVmbGVjdCB8fCB7fSkuY29uc3RydWN0O1xuXG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShyQ29uc3RydWN0KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgW10sIEYpIGluc3RhbmNlb2YgRik7XG59KTtcbnZhciBBUkdTX0JVRyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChORVdfVEFSR0VUX0JVRyB8fCBBUkdTX0JVRyksICdSZWZsZWN0Jywge1xuICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uIGNvbnN0cnVjdChUYXJnZXQsIGFyZ3MgLyogLCBuZXdUYXJnZXQgKi8pIHtcbiAgICBhRnVuY3Rpb24oVGFyZ2V0KTtcbiAgICBhbk9iamVjdChhcmdzKTtcbiAgICB2YXIgbmV3VGFyZ2V0ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyBUYXJnZXQgOiBhRnVuY3Rpb24oYXJndW1lbnRzWzJdKTtcbiAgICBpZiAoQVJHU19CVUcgJiYgIU5FV19UQVJHRVRfQlVHKSByZXR1cm4gckNvbnN0cnVjdChUYXJnZXQsIGFyZ3MsIG5ld1RhcmdldCk7XG4gICAgaWYgKFRhcmdldCA9PSBuZXdUYXJnZXQpIHtcbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgb3B0aW1pemF0aW9uIGZvciAwLTQgYXJndW1lbnRzXG4gICAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBUYXJnZXQoKTtcbiAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdKTtcbiAgICAgICAgY2FzZSAyOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdKTtcbiAgICAgICAgY2FzZSAzOiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICAgICAgY2FzZSA0OiByZXR1cm4gbmV3IFRhcmdldChhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKTtcbiAgICAgIH1cbiAgICAgIC8vIHcvbyBhbHRlcmVkIG5ld1RhcmdldCwgbG90IG9mIGFyZ3VtZW50cyBjYXNlXG4gICAgICB2YXIgJGFyZ3MgPSBbbnVsbF07XG4gICAgICAkYXJncy5wdXNoLmFwcGx5KCRhcmdzLCBhcmdzKTtcbiAgICAgIHJldHVybiBuZXcgKGJpbmQuYXBwbHkoVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0LnByb3RvdHlwZSk7XG4gICAgdmFyIHJlc3VsdCA9IEZ1bmN0aW9uLmFwcGx5LmNhbGwoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjMgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5LCBhdHRyaWJ1dGVzKVxudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcblxuLy8gTVMgRWRnZSBoYXMgYnJva2VuIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkgLSB0aHJvd2luZyBpbnN0ZWFkIG9mIHJldHVybmluZyBmYWxzZVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIFJlZmxlY3QuZGVmaW5lUHJvcGVydHkoZFAuZih7fSwgMSwgeyB2YWx1ZTogMSB9KSwgMSwgeyB2YWx1ZTogMiB9KTtcbn0pLCAnUmVmbGVjdCcsIHtcbiAgZGVmaW5lUHJvcGVydHk6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHByb3BlcnR5S2V5ID0gdG9QcmltaXRpdmUocHJvcGVydHlLZXksIHRydWUpO1xuICAgIGFuT2JqZWN0KGF0dHJpYnV0ZXMpO1xuICAgIHRyeSB7XG4gICAgICBkUC5mKHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjQgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZGVsZXRlUHJvcGVydHk6IGZ1bmN0aW9uIGRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICB2YXIgZGVzYyA9IGdPUEQoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICAgIHJldHVybiBkZXNjICYmICFkZXNjLmNvbmZpZ3VyYWJsZSA/IGZhbHNlIDogZGVsZXRlIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gMjYuMS41IFJlZmxlY3QuZW51bWVyYXRlKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBFbnVtZXJhdGUgPSBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IGFuT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgIC8vIG5leHQgaW5kZXhcbiAgdmFyIGtleXMgPSB0aGlzLl9rID0gW107ICAgICAgLy8ga2V5c1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBpdGVyYXRlZCkga2V5cy5wdXNoKGtleSk7XG59O1xucmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKShFbnVtZXJhdGUsICdPYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgdmFyIGtleXMgPSB0aGF0Ll9rO1xuICB2YXIga2V5O1xuICBkbyB7XG4gICAgaWYgKHRoYXQuX2kgPj0ga2V5cy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfSB3aGlsZSAoISgoa2V5ID0ga2V5c1t0aGF0Ll9pKytdKSBpbiB0aGF0Ll90KSk7XG4gIHJldHVybiB7IHZhbHVlOiBrZXksIGRvbmU6IGZhbHNlIH07XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBlbnVtZXJhdGU6IGZ1bmN0aW9uIGVudW1lcmF0ZSh0YXJnZXQpIHtcbiAgICByZXR1cm4gbmV3IEVudW1lcmF0ZSh0YXJnZXQpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNyBSZWZsZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIHByb3BlcnR5S2V5KVxudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjggUmVmbGVjdC5nZXRQcm90b3R5cGVPZih0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdldFByb3RvID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKHRhcmdldCkge1xuICAgIHJldHVybiBnZXRQcm90byhhbk9iamVjdCh0YXJnZXQpKTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjYgUmVmbGVjdC5nZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSBbLCByZWNlaXZlcl0pXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuZnVuY3Rpb24gZ2V0KHRhcmdldCwgcHJvcGVydHlLZXkgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHRhcmdldCA6IGFyZ3VtZW50c1syXTtcbiAgdmFyIGRlc2MsIHByb3RvO1xuICBpZiAoYW5PYmplY3QodGFyZ2V0KSA9PT0gcmVjZWl2ZXIpIHJldHVybiB0YXJnZXRbcHJvcGVydHlLZXldO1xuICBpZiAoZGVzYyA9IGdPUEQuZih0YXJnZXQsIHByb3BlcnR5S2V5KSkgcmV0dXJuIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgID8gZGVzYy52YWx1ZVxuICAgIDogZGVzYy5nZXQgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZXNjLmdldC5jYWxsKHJlY2VpdmVyKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSByZXR1cm4gZ2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7IGdldDogZ2V0IH0pO1xuIiwiLy8gMjYuMS45IFJlZmxlY3QuaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGhhczogZnVuY3Rpb24gaGFzKHRhcmdldCwgcHJvcGVydHlLZXkpIHtcbiAgICByZXR1cm4gcHJvcGVydHlLZXkgaW4gdGFyZ2V0O1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTAgUmVmbGVjdC5pc0V4dGVuc2libGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGlzRXh0ZW5zaWJsZTogZnVuY3Rpb24gaXNFeHRlbnNpYmxlKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcmV0dXJuICRpc0V4dGVuc2libGUgPyAkaXNFeHRlbnNpYmxlKHRhcmdldCkgOiB0cnVlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMTEgUmVmbGVjdC5vd25LZXlzKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgb3duS2V5czogcmVxdWlyZSgnLi9fb3duLWtleXMnKSB9KTtcbiIsIi8vIDI2LjEuMTIgUmVmbGVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJHByZXZlbnRFeHRlbnNpb25zID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHByZXZlbnRFeHRlbnNpb25zOiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpIHtcbiAgICBhbk9iamVjdCh0YXJnZXQpO1xuICAgIHRyeSB7XG4gICAgICBpZiAoJHByZXZlbnRFeHRlbnNpb25zKSAkcHJldmVudEV4dGVuc2lvbnModGFyZ2V0KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xNCBSZWZsZWN0LnNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG8pXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNldFByb3RvID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJyk7XG5cbmlmIChzZXRQcm90bykgJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBzZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bykge1xuICAgIHNldFByb3RvLmNoZWNrKHRhcmdldCwgcHJvdG8pO1xuICAgIHRyeSB7XG4gICAgICBzZXRQcm90by5zZXQodGFyZ2V0LCBwcm90byk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuMTMgUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSwgViBbLCByZWNlaXZlcl0pXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5cbmZ1bmN0aW9uIHNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDQgPyB0YXJnZXQgOiBhcmd1bWVudHNbM107XG4gIHZhciBvd25EZXNjID0gZ09QRC5mKGFuT2JqZWN0KHRhcmdldCksIHByb3BlcnR5S2V5KTtcbiAgdmFyIGV4aXN0aW5nRGVzY3JpcHRvciwgcHJvdG87XG4gIGlmICghb3duRGVzYykge1xuICAgIGlmIChpc09iamVjdChwcm90byA9IGdldFByb3RvdHlwZU9mKHRhcmdldCkpKSB7XG4gICAgICByZXR1cm4gc2V0KHByb3RvLCBwcm9wZXJ0eUtleSwgViwgcmVjZWl2ZXIpO1xuICAgIH1cbiAgICBvd25EZXNjID0gY3JlYXRlRGVzYygwKTtcbiAgfVxuICBpZiAoaGFzKG93bkRlc2MsICd2YWx1ZScpKSB7XG4gICAgaWYgKG93bkRlc2Mud3JpdGFibGUgPT09IGZhbHNlIHx8ICFpc09iamVjdChyZWNlaXZlcikpIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZXhpc3RpbmdEZXNjcmlwdG9yID0gZ09QRC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSkpIHtcbiAgICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IuZ2V0IHx8IGV4aXN0aW5nRGVzY3JpcHRvci5zZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLndyaXRhYmxlID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgZXhpc3RpbmdEZXNjcmlwdG9yLnZhbHVlID0gVjtcbiAgICAgIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBleGlzdGluZ0Rlc2NyaXB0b3IpO1xuICAgIH0gZWxzZSBkUC5mKHJlY2VpdmVyLCBwcm9wZXJ0eUtleSwgY3JlYXRlRGVzYygwLCBWKSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIG93bkRlc2Muc2V0ID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IChvd25EZXNjLnNldC5jYWxsKHJlY2VpdmVyLCBWKSwgdHJ1ZSk7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgc2V0OiBzZXQgfSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciAkZmxhZ3MgPSByZXF1aXJlKCcuL19mbGFncycpO1xudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xudmFyIEJhc2UgPSAkUmVnRXhwO1xudmFyIHByb3RvID0gJFJlZ0V4cC5wcm90b3R5cGU7XG52YXIgcmUxID0gL2EvZztcbnZhciByZTIgPSAvYS9nO1xuLy8gXCJuZXdcIiBjcmVhdGVzIGEgbmV3IG9iamVjdCwgb2xkIHdlYmtpdCBidWdneSBoZXJlXG52YXIgQ09SUkVDVF9ORVcgPSBuZXcgJFJlZ0V4cChyZTEpICE9PSByZTE7XG5cbmlmIChyZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICghQ09SUkVDVF9ORVcgfHwgcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJlMltyZXF1aXJlKCcuL193a3MnKSgnbWF0Y2gnKV0gPSBmYWxzZTtcbiAgLy8gUmVnRXhwIGNvbnN0cnVjdG9yIGNhbiBhbHRlciBmbGFncyBhbmQgSXNSZWdFeHAgd29ya3MgY29ycmVjdCB3aXRoIEBAbWF0Y2hcbiAgcmV0dXJuICRSZWdFeHAocmUxKSAhPSByZTEgfHwgJFJlZ0V4cChyZTIpID09IHJlMiB8fCAkUmVnRXhwKHJlMSwgJ2knKSAhPSAnL2EvaSc7XG59KSkpIHtcbiAgJFJlZ0V4cCA9IGZ1bmN0aW9uIFJlZ0V4cChwLCBmKSB7XG4gICAgdmFyIHRpUkUgPSB0aGlzIGluc3RhbmNlb2YgJFJlZ0V4cDtcbiAgICB2YXIgcGlSRSA9IGlzUmVnRXhwKHApO1xuICAgIHZhciBmaVUgPSBmID09PSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuICF0aVJFICYmIHBpUkUgJiYgcC5jb25zdHJ1Y3RvciA9PT0gJFJlZ0V4cCAmJiBmaVUgPyBwXG4gICAgICA6IGluaGVyaXRJZlJlcXVpcmVkKENPUlJFQ1RfTkVXXG4gICAgICAgID8gbmV3IEJhc2UocGlSRSAmJiAhZmlVID8gcC5zb3VyY2UgOiBwLCBmKVxuICAgICAgICA6IEJhc2UoKHBpUkUgPSBwIGluc3RhbmNlb2YgJFJlZ0V4cCkgPyBwLnNvdXJjZSA6IHAsIHBpUkUgJiYgZmlVID8gJGZsYWdzLmNhbGwocCkgOiBmKVxuICAgICAgLCB0aVJFID8gdGhpcyA6IHByb3RvLCAkUmVnRXhwKTtcbiAgfTtcbiAgdmFyIHByb3h5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIGtleSBpbiAkUmVnRXhwIHx8IGRQKCRSZWdFeHAsIGtleSwge1xuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBCYXNlW2tleV07IH0sXG4gICAgICBzZXQ6IGZ1bmN0aW9uIChpdCkgeyBCYXNlW2tleV0gPSBpdDsgfVxuICAgIH0pO1xuICB9O1xuICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlKSwgaSA9IDA7IGtleXMubGVuZ3RoID4gaTspIHByb3h5KGtleXNbaSsrXSk7XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJFJlZ0V4cDtcbiAgJFJlZ0V4cC5wcm90b3R5cGUgPSBwcm90bztcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsICdSZWdFeHAnLCAkUmVnRXhwKTtcbn1cblxucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKSgnUmVnRXhwJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG5yZXF1aXJlKCcuL19leHBvcnQnKSh7XG4gIHRhcmdldDogJ1JlZ0V4cCcsXG4gIHByb3RvOiB0cnVlLFxuICBmb3JjZWQ6IHJlZ2V4cEV4ZWMgIT09IC8uLy5leGVjXG59LCB7XG4gIGV4ZWM6IHJlZ2V4cEV4ZWNcbn0pO1xuIiwiLy8gMjEuMi41LjMgZ2V0IFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3MoKVxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgLy4vZy5mbGFncyAhPSAnZycpIHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYoUmVnRXhwLnByb3RvdHlwZSwgJ2ZsYWdzJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGdldDogcmVxdWlyZSgnLi9fZmxhZ3MnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBtYXRjaCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdtYXRjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBNQVRDSCwgJG1hdGNoLCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5tYXRjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5tYXRjaFxuICAgIGZ1bmN0aW9uIG1hdGNoKHJlZ2V4cCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gcmVnZXhwID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHJlZ2V4cFtNQVRDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtNQVRDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAbWF0Y2hdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAbWF0Y2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRtYXRjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIGlmICghcnguZ2xvYmFsKSByZXR1cm4gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBBID0gW107XG4gICAgICB2YXIgbiA9IDA7XG4gICAgICB2YXIgcmVzdWx0O1xuICAgICAgd2hpbGUgKChyZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKSkgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIEFbbl0gPSBtYXRjaFN0cjtcbiAgICAgICAgaWYgKG1hdGNoU3RyID09PSAnJykgcngubGFzdEluZGV4ID0gYWR2YW5jZVN0cmluZ0luZGV4KFMsIHRvTGVuZ3RoKHJ4Lmxhc3RJbmRleCksIGZ1bGxVbmljb2RlKTtcbiAgICAgICAgbisrO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG4gPT09IDAgPyBudWxsIDogQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MUyA9IC9cXCQoWyQmYCddfFxcZFxcZD98PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmYCddfFxcZFxcZD8pL2c7XG5cbnZhciBtYXliZVRvU3RyaW5nID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA9PT0gdW5kZWZpbmVkID8gaXQgOiBTdHJpbmcoaXQpO1xufTtcblxuLy8gQEByZXBsYWNlIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3JlcGxhY2UnLCAyLCBmdW5jdGlvbiAoZGVmaW5lZCwgUkVQTEFDRSwgJHJlcGxhY2UsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUucmVwbGFjZVxuICAgIGZ1bmN0aW9uIHJlcGxhY2Uoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIGZuID0gc2VhcmNoVmFsdWUgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogc2VhcmNoVmFsdWVbUkVQTEFDRV07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGZuLmNhbGwoc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiAkcmVwbGFjZS5jYWxsKFN0cmluZyhPKSwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHJlcGxhY2VdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAcmVwbGFjZVxuICAgIGZ1bmN0aW9uIChyZWdleHAsIHJlcGxhY2VWYWx1ZSkge1xuICAgICAgdmFyIHJlcyA9IG1heWJlQ2FsbE5hdGl2ZSgkcmVwbGFjZSwgcmVnZXhwLCB0aGlzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuXG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgZnVuY3Rpb25hbFJlcGxhY2UgPSB0eXBlb2YgcmVwbGFjZVZhbHVlID09PSAnZnVuY3Rpb24nO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gU3RyaW5nKHJlcGxhY2VWYWx1ZSk7XG4gICAgICB2YXIgZ2xvYmFsID0gcnguZ2xvYmFsO1xuICAgICAgaWYgKGdsb2JhbCkge1xuICAgICAgICB2YXIgZnVsbFVuaWNvZGUgPSByeC51bmljb2RlO1xuICAgICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgfVxuICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkgYnJlYWs7XG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICBpZiAoIWdsb2JhbCkgYnJlYWs7XG4gICAgICAgIHZhciBtYXRjaFN0ciA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgfVxuICAgICAgdmFyIGFjY3VtdWxhdGVkUmVzdWx0ID0gJyc7XG4gICAgICB2YXIgbmV4dFNvdXJjZVBvc2l0aW9uID0gMDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdWx0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHRzW2ldO1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IFN0cmluZyhyZXN1bHRbMF0pO1xuICAgICAgICB2YXIgcG9zaXRpb24gPSBtYXgobWluKHRvSW50ZWdlcihyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBjYXB0dXJlcy5wdXNoKG1heWJlVG9TdHJpbmcocmVzdWx0W2pdKSk7XG4gICAgICAgIHZhciBuYW1lZENhcHR1cmVzID0gcmVzdWx0Lmdyb3VwcztcbiAgICAgICAgaWYgKGZ1bmN0aW9uYWxSZXBsYWNlKSB7XG4gICAgICAgICAgdmFyIHJlcGxhY2VyQXJncyA9IFttYXRjaGVkXS5jb25jYXQoY2FwdHVyZXMsIHBvc2l0aW9uLCBTKTtcbiAgICAgICAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSByZXBsYWNlckFyZ3MucHVzaChuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBTdHJpbmcocmVwbGFjZVZhbHVlLmFwcGx5KHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbiwgcG9zaXRpb24pICsgcmVwbGFjZW1lbnQ7XG4gICAgICAgICAgbmV4dFNvdXJjZVBvc2l0aW9uID0gcG9zaXRpb24gKyBtYXRjaGVkLmxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFjY3VtdWxhdGVkUmVzdWx0ICsgUy5zbGljZShuZXh0U291cmNlUG9zaXRpb24pO1xuICAgIH1cbiAgXTtcblxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWdldHN1YnN0aXR1dGlvblxuICBmdW5jdGlvbiBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgc3RyLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VtZW50KSB7XG4gICAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgIHZhciBtID0gY2FwdHVyZXMubGVuZ3RoO1xuICAgIHZhciBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFNfTk9fTkFNRUQ7XG4gICAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbmFtZWRDYXB0dXJlcyA9IHRvT2JqZWN0KG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgc3ltYm9scyA9IFNVQlNUSVRVVElPTl9TWU1CT0xTO1xuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChyZXBsYWNlbWVudCwgc3ltYm9scywgZnVuY3Rpb24gKG1hdGNoLCBjaCkge1xuICAgICAgdmFyIGNhcHR1cmU7XG4gICAgICBzd2l0Y2ggKGNoLmNoYXJBdCgwKSkge1xuICAgICAgICBjYXNlICckJzogcmV0dXJuICckJztcbiAgICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgICBjYXNlICdgJzogcmV0dXJuIHN0ci5zbGljZSgwLCBwb3NpdGlvbik7XG4gICAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHIuc2xpY2UodGFpbFBvcyk7XG4gICAgICAgIGNhc2UgJzwnOlxuICAgICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW2NoLnNsaWNlKDEsIC0xKV07XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgICB2YXIgbiA9ICtjaDtcbiAgICAgICAgICBpZiAobiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgICAgdmFyIGYgPSBmbG9vcihuIC8gMTApO1xuICAgICAgICAgICAgaWYgKGYgPT09IDApIHJldHVybiBtYXRjaDtcbiAgICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoLmNoYXJBdCgxKSA6IGNhcHR1cmVzW2YgLSAxXSArIGNoLmNoYXJBdCgxKTtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FwdHVyZSA9IGNhcHR1cmVzW24gLSAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjYXB0dXJlID09PSB1bmRlZmluZWQgPyAnJyA6IGNhcHR1cmU7XG4gICAgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzYW1lVmFsdWUgPSByZXF1aXJlKCcuL19zYW1lLXZhbHVlJyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG5cbi8vIEBAc2VhcmNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NlYXJjaCcsIDEsIGZ1bmN0aW9uIChkZWZpbmVkLCBTRUFSQ0gsICRzZWFyY2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNlYXJjaGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zZWFyY2hcbiAgICBmdW5jdGlvbiBzZWFyY2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW1NFQVJDSF07XG4gICAgICByZXR1cm4gZm4gIT09IHVuZGVmaW5lZCA/IGZuLmNhbGwocmVnZXhwLCBPKSA6IG5ldyBSZWdFeHAocmVnZXhwKVtTRUFSQ0hdKFN0cmluZyhPKSk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNlYXJjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzZWFyY2hcbiAgICBmdW5jdGlvbiAocmVnZXhwKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRzZWFyY2gsIHJlZ2V4cCwgdGhpcyk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG4gICAgICB2YXIgcnggPSBhbk9iamVjdChyZWdleHApO1xuICAgICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgICB2YXIgcHJldmlvdXNMYXN0SW5kZXggPSByeC5sYXN0SW5kZXg7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShwcmV2aW91c0xhc3RJbmRleCwgMCkpIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICBpZiAoIXNhbWVWYWx1ZShyeC5sYXN0SW5kZXgsIHByZXZpb3VzTGFzdEluZGV4KSkgcngubGFzdEluZGV4ID0gcHJldmlvdXNMYXN0SW5kZXg7XG4gICAgICByZXR1cm4gcmVzdWx0ID09PSBudWxsID8gLTEgOiByZXN1bHQuaW5kZXg7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjYWxsUmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyICRtaW4gPSBNYXRoLm1pbjtcbnZhciAkcHVzaCA9IFtdLnB1c2g7XG52YXIgJFNQTElUID0gJ3NwbGl0JztcbnZhciBMRU5HVEggPSAnbGVuZ3RoJztcbnZhciBMQVNUX0lOREVYID0gJ2xhc3RJbmRleCc7XG52YXIgTUFYX1VJTlQzMiA9IDB4ZmZmZmZmZmY7XG5cbi8vIGJhYmVsLW1pbmlmeSB0cmFuc3BpbGVzIFJlZ0V4cCgneCcsICd5JykgLT4gL3gveSBhbmQgaXQgY2F1c2VzIFN5bnRheEVycm9yXG52YXIgU1VQUE9SVFNfWSA9ICFmYWlscyhmdW5jdGlvbiAoKSB7IFJlZ0V4cChNQVhfVUlOVDMyLCAneScpOyB9KTtcblxuLy8gQEBzcGxpdCBsb2dpY1xucmVxdWlyZSgnLi9fZml4LXJlLXdrcycpKCdzcGxpdCcsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBTUExJVCwgJHNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYydbJFNQTElUXSgvKGIpKi8pWzFdID09ICdjJyB8fFxuICAgICd0ZXN0J1skU1BMSVRdKC8oPzopLywgLTEpW0xFTkdUSF0gIT0gNCB8fFxuICAgICdhYidbJFNQTElUXSgvKD86YWIpKi8pW0xFTkdUSF0gIT0gMiB8fFxuICAgICcuJ1skU1BMSVRdKC8oLj8pKC4/KS8pW0xFTkdUSF0gIT0gNCB8fFxuICAgICcuJ1skU1BMSVRdKC8oKSgpLylbTEVOR1RIXSA+IDEgfHxcbiAgICAnJ1skU1BMSVRdKC8uPy8pW0xFTkdUSF1cbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwKSByZXR1cm4gW107XG4gICAgICAvLyBJZiBgc2VwYXJhdG9yYCBpcyBub3QgYSByZWdleCwgdXNlIG5hdGl2ZSBzcGxpdFxuICAgICAgaWYgKCFpc1JlZ0V4cChzZXBhcmF0b3IpKSByZXR1cm4gJHNwbGl0LmNhbGwoc3RyaW5nLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICAgIHZhciBvdXRwdXQgPSBbXTtcbiAgICAgIHZhciBmbGFncyA9IChzZXBhcmF0b3IuaWdub3JlQ2FzZSA/ICdpJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5zdGlja3kgPyAneScgOiAnJyk7XG4gICAgICB2YXIgbGFzdExhc3RJbmRleCA9IDA7XG4gICAgICB2YXIgc3BsaXRMaW1pdCA9IGxpbWl0ID09PSB1bmRlZmluZWQgPyBNQVhfVUlOVDMyIDogbGltaXQgPj4+IDA7XG4gICAgICAvLyBNYWtlIGBnbG9iYWxgIGFuZCBhdm9pZCBgbGFzdEluZGV4YCBpc3N1ZXMgYnkgd29ya2luZyB3aXRoIGEgY29weVxuICAgICAgdmFyIHNlcGFyYXRvckNvcHkgPSBuZXcgUmVnRXhwKHNlcGFyYXRvci5zb3VyY2UsIGZsYWdzICsgJ2cnKTtcbiAgICAgIHZhciBtYXRjaCwgbGFzdEluZGV4LCBsYXN0TGVuZ3RoO1xuICAgICAgd2hpbGUgKG1hdGNoID0gcmVnZXhwRXhlYy5jYWxsKHNlcGFyYXRvckNvcHksIHN0cmluZykpIHtcbiAgICAgICAgbGFzdEluZGV4ID0gc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXTtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBvdXRwdXQucHVzaChzdHJpbmcuc2xpY2UobGFzdExhc3RJbmRleCwgbWF0Y2guaW5kZXgpKTtcbiAgICAgICAgICBpZiAobWF0Y2hbTEVOR1RIXSA+IDEgJiYgbWF0Y2guaW5kZXggPCBzdHJpbmdbTEVOR1RIXSkgJHB1c2guYXBwbHkob3V0cHV0LCBtYXRjaC5zbGljZSgxKSk7XG4gICAgICAgICAgbGFzdExlbmd0aCA9IG1hdGNoWzBdW0xFTkdUSF07XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0W0xFTkdUSF0gPj0gc3BsaXRMaW1pdCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0gPT09IG1hdGNoLmluZGV4KSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdKys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmdbTEVOR1RIXSkge1xuICAgICAgICBpZiAobGFzdExlbmd0aCB8fCAhc2VwYXJhdG9yQ29weS50ZXN0KCcnKSkgb3V0cHV0LnB1c2goJycpO1xuICAgICAgfSBlbHNlIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0W0xFTkdUSF0gPiBzcGxpdExpbWl0ID8gb3V0cHV0LnNsaWNlKDAsIHNwbGl0TGltaXQpIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCdbJFNQTElUXSh1bmRlZmluZWQsIDApW0xFTkdUSF0pIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogJHNwbGl0LmNhbGwodGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gJHNwbGl0O1xuICB9XG5cbiAgcmV0dXJuIFtcbiAgICAvLyBgU3RyaW5nLnByb3RvdHlwZS5zcGxpdGAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zcGxpdFxuICAgIGZ1bmN0aW9uIHNwbGl0KHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBzcGxpdHRlciA9IHNlcGFyYXRvciA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZXBhcmF0b3JbU1BMSVRdO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyICE9PSB1bmRlZmluZWRcbiAgICAgICAgPyBzcGxpdHRlci5jYWxsKHNlcGFyYXRvciwgTywgbGltaXQpXG4gICAgICAgIDogaW50ZXJuYWxTcGxpdC5jYWxsKFN0cmluZyhPKSwgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfSxcbiAgICAvLyBgUmVnRXhwLnByb3RvdHlwZVtAQHNwbGl0XWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNwbGl0XG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGNhbm5vdCBiZSBwcm9wZXJseSBwb2x5ZmlsbGVkIGluIGVuZ2luZXMgdGhhdCBkb24ndCBzdXBwb3J0XG4gICAgLy8gdGhlICd5JyBmbGFnLlxuICAgIGZ1bmN0aW9uIChyZWdleHAsIGxpbWl0KSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJlZ2V4cCwgdGhpcywgbGltaXQsIGludGVybmFsU3BsaXQgIT09ICRzcGxpdCk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFNVUFBPUlRTX1kgPyAneScgOiAnZycpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoU1VQUE9SVFNfWSA/IHJ4IDogJ14oPzonICsgcnguc291cmNlICsgJyknLCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gU1VQUE9SVFNfWSA/IHEgOiAwO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTVVBQT1JUU19ZID8gUyA6IFMuc2xpY2UocSkpO1xuICAgICAgICB2YXIgZTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHogPT09IG51bGwgfHxcbiAgICAgICAgICAoZSA9ICRtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFNVUFBPUlRTX1kgPyAwIDogcSkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBBLnB1c2goUy5zbGljZShwLCBxKSk7XG4gICAgICAgICAgaWYgKEEubGVuZ3RoID09PSBsaW0pIHJldHVybiBBO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDw9IHoubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBBLnB1c2goeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgQS5wdXNoKFMuc2xpY2UocCkpO1xuICAgICAgcmV0dXJuIEE7XG4gICAgfVxuICBdO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5yZXF1aXJlKCcuL2VzNi5yZWdleHAuZmxhZ3MnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gLy4vW1RPX1NUUklOR107XG5cbnZhciBkZWZpbmUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShSZWdFeHAucHJvdG90eXBlLCBUT19TVFJJTkcsIGZuLCB0cnVlKTtcbn07XG5cbi8vIDIxLjIuNS4xNCBSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nKClcbmlmIChyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHsgcmV0dXJuICR0b1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KSkge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICByZXR1cm4gJy8nLmNvbmNhdChSLnNvdXJjZSwgJy8nLFxuICAgICAgJ2ZsYWdzJyBpbiBSID8gUi5mbGFncyA6ICFERVNDUklQVE9SUyAmJiBSIGluc3RhbmNlb2YgUmVnRXhwID8gJGZsYWdzLmNhbGwoUikgOiB1bmRlZmluZWQpO1xuICB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG59IGVsc2UgaWYgKCR0b1N0cmluZy5uYW1lICE9IFRPX1NUUklORykge1xuICBkZWZpbmUoZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuICR0b1N0cmluZy5jYWxsKHRoaXMpO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciBzdHJvbmcgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXN0cm9uZycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFNFVCA9ICdTZXQnO1xuXG4vLyAyMy4yIFNldCBPYmplY3RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShTRVQsIGZ1bmN0aW9uIChnZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFNldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjIuMy4xIFNldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiBzdHJvbmcuZGVmKHZhbGlkYXRlKHRoaXMsIFNFVCksIHZhbHVlID0gdmFsdWUgPT09IDAgPyAwIDogdmFsdWUsIHZhbHVlKTtcbiAgfVxufSwgc3Ryb25nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjIgU3RyaW5nLnByb3RvdHlwZS5hbmNob3IobmFtZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2FuY2hvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBhbmNob3IobmFtZSkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ25hbWUnLCBuYW1lKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMyBTdHJpbmcucHJvdG90eXBlLmJpZygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdiaWcnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmlnKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiaWcnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy40IFN0cmluZy5wcm90b3R5cGUuYmxpbmsoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYmxpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gYmxpbmsoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JsaW5rJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNSBTdHJpbmcucHJvdG90eXBlLmJvbGQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYm9sZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBib2xkKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdiJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKShmYWxzZSk7XG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjMgU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdChwb3MpXG4gIGNvZGVQb2ludEF0OiBmdW5jdGlvbiBjb2RlUG9pbnRBdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiLy8gMjEuMS4zLjYgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aChzZWFyY2hTdHJpbmcgWywgZW5kUG9zaXRpb25dKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIEVORFNfV0lUSCA9ICdlbmRzV2l0aCc7XG52YXIgJGVuZHNXaXRoID0gJydbRU5EU19XSVRIXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShFTkRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBlbmRzV2l0aDogZnVuY3Rpb24gZW5kc1dpdGgoc2VhcmNoU3RyaW5nIC8qICwgZW5kUG9zaXRpb24gPSBAbGVuZ3RoICovKSB7XG4gICAgdmFyIHRoYXQgPSBjb250ZXh0KHRoaXMsIHNlYXJjaFN0cmluZywgRU5EU19XSVRIKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhhdC5sZW5ndGgpO1xuICAgIHZhciBlbmQgPSBlbmRQb3NpdGlvbiA9PT0gdW5kZWZpbmVkID8gbGVuIDogTWF0aC5taW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSBTdHJpbmcoc2VhcmNoU3RyaW5nKTtcbiAgICByZXR1cm4gJGVuZHNXaXRoXG4gICAgICA/ICRlbmRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgZW5kKVxuICAgICAgOiB0aGF0LnNsaWNlKGVuZCAtIHNlYXJjaC5sZW5ndGgsIGVuZCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy42IFN0cmluZy5wcm90b3R5cGUuZml4ZWQoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZml4ZWQnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gZml4ZWQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3R0JywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuNyBTdHJpbmcucHJvdG90eXBlLmZvbnRjb2xvcihjb2xvcilcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRjb2xvcicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250Y29sb3IoY29sb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdjb2xvcicsIGNvbG9yKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOCBTdHJpbmcucHJvdG90eXBlLmZvbnRzaXplKHNpemUpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmb250c2l6ZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmb250c2l6ZShzaXplKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2ZvbnQnLCAnc2l6ZScsIHNpemUpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgZnJvbUNoYXJDb2RlID0gU3RyaW5nLmZyb21DaGFyQ29kZTtcbnZhciAkZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50O1xuXG4vLyBsZW5ndGggc2hvdWxkIGJlIDEsIG9sZCBGRiBwcm9ibGVtXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICghISRmcm9tQ29kZVBvaW50ICYmICRmcm9tQ29kZVBvaW50Lmxlbmd0aCAhPSAxKSwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjIgU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uY29kZVBvaW50cylcbiAgZnJvbUNvZGVQb2ludDogZnVuY3Rpb24gZnJvbUNvZGVQb2ludCh4KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZTtcbiAgICB3aGlsZSAoYUxlbiA+IGkpIHtcbiAgICAgIGNvZGUgPSArYXJndW1lbnRzW2krK107XG4gICAgICBpZiAodG9BYnNvbHV0ZUluZGV4KGNvZGUsIDB4MTBmZmZmKSAhPT0gY29kZSkgdGhyb3cgUmFuZ2VFcnJvcihjb2RlICsgJyBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Jyk7XG4gICAgICByZXMucHVzaChjb2RlIDwgMHgxMDAwMFxuICAgICAgICA/IGZyb21DaGFyQ29kZShjb2RlKVxuICAgICAgICA6IGZyb21DaGFyQ29kZSgoKGNvZGUgLT0gMHgxMDAwMCkgPj4gMTApICsgMHhkODAwLCBjb2RlICUgMHg0MDAgKyAweGRjMDApXG4gICAgICApO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNyBTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzKHNlYXJjaFN0cmluZywgcG9zaXRpb24gPSAwKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb250ZXh0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWNvbnRleHQnKTtcbnZhciBJTkNMVURFUyA9ICdpbmNsdWRlcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoSU5DTFVERVMpLCAnU3RyaW5nJywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfmNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBJTkNMVURFUylcbiAgICAgIC5pbmRleE9mKHNlYXJjaFN0cmluZywgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjkgU3RyaW5nLnByb3RvdHlwZS5pdGFsaWNzKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2l0YWxpY3MnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXRhbGljcygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnaScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkYXQgPSByZXF1aXJlKCcuL19zdHJpbmctYXQnKSh0cnVlKTtcblxuLy8gMjEuMS4zLjI3IFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl0oKVxucmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKShTdHJpbmcsICdTdHJpbmcnLCBmdW5jdGlvbiAoaXRlcmF0ZWQpIHtcbiAgdGhpcy5fdCA9IFN0cmluZyhpdGVyYXRlZCk7IC8vIHRhcmdldFxuICB0aGlzLl9pID0gMDsgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuLy8gMjEuMS41LjIuMSAlU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlLm5leHQoKVxufSwgZnVuY3Rpb24gKCkge1xuICB2YXIgTyA9IHRoaXMuX3Q7XG4gIHZhciBpbmRleCA9IHRoaXMuX2k7XG4gIHZhciBwb2ludDtcbiAgaWYgKGluZGV4ID49IE8ubGVuZ3RoKSByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIHBvaW50ID0gJGF0KE8sIGluZGV4KTtcbiAgdGhpcy5faSArPSBwb2ludC5sZW5ndGg7XG4gIHJldHVybiB7IHZhbHVlOiBwb2ludCwgZG9uZTogZmFsc2UgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTAgU3RyaW5nLnByb3RvdHlwZS5saW5rKHVybClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2xpbmsnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gbGluayh1cmwpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYScsICdocmVmJywgdXJsKTtcbiAgfTtcbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMi40IFN0cmluZy5yYXcoY2FsbFNpdGUsIC4uLnN1YnN0aXR1dGlvbnMpXG4gIHJhdzogZnVuY3Rpb24gcmF3KGNhbGxTaXRlKSB7XG4gICAgdmFyIHRwbCA9IHRvSU9iamVjdChjYWxsU2l0ZS5yYXcpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0cGwubGVuZ3RoKTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB3aGlsZSAobGVuID4gaSkge1xuICAgICAgcmVzLnB1c2goU3RyaW5nKHRwbFtpKytdKSk7XG4gICAgICBpZiAoaSA8IGFMZW4pIHJlcy5wdXNoKFN0cmluZyhhcmd1bWVudHNbaV0pKTtcbiAgICB9IHJldHVybiByZXMuam9pbignJyk7XG4gIH1cbn0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdTdHJpbmcnLCB7XG4gIC8vIDIxLjEuMy4xMyBTdHJpbmcucHJvdG90eXBlLnJlcGVhdChjb3VudClcbiAgcmVwZWF0OiByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jylcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMTEgU3RyaW5nLnByb3RvdHlwZS5zbWFsbCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzbWFsbCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzbWFsbCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnc21hbGwnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIvLyAyMS4xLjMuMTggU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoKHNlYXJjaFN0cmluZyBbLCBwb3NpdGlvbiBdKVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIFNUQVJUU19XSVRIID0gJ3N0YXJ0c1dpdGgnO1xudmFyICRzdGFydHNXaXRoID0gJydbU1RBUlRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKFNUQVJUU19XSVRIKSwgJ1N0cmluZycsIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBTVEFSVFNfV0lUSCk7XG4gICAgdmFyIGluZGV4ID0gdG9MZW5ndGgoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkc3RhcnRzV2l0aFxuICAgICAgPyAkc3RhcnRzV2l0aC5jYWxsKHRoYXQsIHNlYXJjaCwgaW5kZXgpXG4gICAgICA6IHRoYXQuc2xpY2UoaW5kZXgsIGluZGV4ICsgc2VhcmNoLmxlbmd0aCkgPT09IHNlYXJjaDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMiBTdHJpbmcucHJvdG90eXBlLnN0cmlrZSgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdHJpa2UnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3RyaWtlKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdHJpa2UnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMyBTdHJpbmcucHJvdG90eXBlLnN1YigpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdWInLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3ViKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdWInLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xNCBTdHJpbmcucHJvdG90eXBlLnN1cCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdzdXAnLCBmdW5jdGlvbiAoY3JlYXRlSFRNTCkge1xuICByZXR1cm4gZnVuY3Rpb24gc3VwKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzdXAnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyMS4xLjMuMjUgU3RyaW5nLnByb3RvdHlwZS50cmltKClcbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW0nLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW0oKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDMpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBFQ01BU2NyaXB0IDYgc3ltYm9scyBzaGltXG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgTUVUQSA9IHJlcXVpcmUoJy4vX21ldGEnKS5LRVk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi9fdWlkJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIHdrc0RlZmluZSA9IHJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKTtcbnZhciBlbnVtS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0ta2V5cycpO1xudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGNyZWF0ZURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbnZhciBnT1BORXh0ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0Jyk7XG52YXIgJEdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyICRHT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciAkRFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgZ09QRCA9ICRHT1BELmY7XG52YXIgZFAgPSAkRFAuZjtcbnZhciBnT1BOID0gZ09QTkV4dC5mO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyICRKU09OID0gZ2xvYmFsLkpTT047XG52YXIgX3N0cmluZ2lmeSA9ICRKU09OICYmICRKU09OLnN0cmluZ2lmeTtcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBISURERU4gPSB3a3MoJ19oaWRkZW4nKTtcbnZhciBUT19QUklNSVRJVkUgPSB3a3MoJ3RvUHJpbWl0aXZlJyk7XG52YXIgaXNFbnVtID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgU3ltYm9sUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC1yZWdpc3RyeScpO1xudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPUFN5bWJvbHMgPSBzaGFyZWQoJ29wLXN5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90byA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyIFVTRV9OQVRJVkUgPSB0eXBlb2YgJFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmICEhJEdPUFMuZjtcbnZhciBRT2JqZWN0ID0gZ2xvYmFsLlFPYmplY3Q7XG4vLyBEb24ndCB1c2Ugc2V0dGVycyBpbiBRdCBTY3JpcHQsIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8xNzNcbnZhciBzZXR0ZXIgPSAhUU9iamVjdCB8fCAhUU9iamVjdFtQUk9UT1RZUEVdIHx8ICFRT2JqZWN0W1BST1RPVFlQRV0uZmluZENoaWxkO1xuXG4vLyBmYWxsYmFjayBmb3Igb2xkIEFuZHJvaWQsIGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvdjgvaXNzdWVzL2RldGFpbD9pZD02ODdcbnZhciBzZXRTeW1ib2xEZXNjID0gREVTQ1JJUFRPUlMgJiYgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF9jcmVhdGUoZFAoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gZFAodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKGl0LCBrZXksIEQpIHtcbiAgdmFyIHByb3RvRGVzYyA9IGdPUEQoT2JqZWN0UHJvdG8sIGtleSk7XG4gIGlmIChwcm90b0Rlc2MpIGRlbGV0ZSBPYmplY3RQcm90b1trZXldO1xuICBkUChpdCwga2V5LCBEKTtcbiAgaWYgKHByb3RvRGVzYyAmJiBpdCAhPT0gT2JqZWN0UHJvdG8pIGRQKE9iamVjdFByb3RvLCBrZXksIHByb3RvRGVzYyk7XG59IDogZFA7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZykge1xuICB2YXIgc3ltID0gQWxsU3ltYm9sc1t0YWddID0gX2NyZWF0ZSgkU3ltYm9sW1BST1RPVFlQRV0pO1xuICBzeW0uX2sgPSB0YWc7XG4gIHJldHVybiBzeW07XG59O1xuXG52YXIgaXNTeW1ib2wgPSBVU0VfTkFUSVZFICYmIHR5cGVvZiAkU3ltYm9sLml0ZXJhdG9yID09ICdzeW1ib2wnID8gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCc7XG59IDogZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCBpbnN0YW5jZW9mICRTeW1ib2w7XG59O1xuXG52YXIgJGRlZmluZVByb3BlcnR5ID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoaXQsIGtleSwgRCkge1xuICBpZiAoaXQgPT09IE9iamVjdFByb3RvKSAkZGVmaW5lUHJvcGVydHkoT1BTeW1ib2xzLCBrZXksIEQpO1xuICBhbk9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGFuT2JqZWN0KEQpO1xuICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUQuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXMoaXQsIEhJRERFTikpIGRQKGl0LCBISURERU4sIGNyZWF0ZURlc2MoMSwge30pKTtcbiAgICAgIGl0W0hJRERFTl1ba2V5XSA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChoYXMoaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSBpdFtISURERU5dW2tleV0gPSBmYWxzZTtcbiAgICAgIEQgPSBfY3JlYXRlKEQsIHsgZW51bWVyYWJsZTogY3JlYXRlRGVzYygwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzYyhpdCwga2V5LCBEKTtcbiAgfSByZXR1cm4gZFAoaXQsIGtleSwgRCk7XG59O1xudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhpdCwgUCkge1xuICBhbk9iamVjdChpdCk7XG4gIHZhciBrZXlzID0gZW51bUtleXMoUCA9IHRvSU9iamVjdChQKSk7XG4gIHZhciBpID0gMDtcbiAgdmFyIGwgPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGwgPiBpKSAkZGVmaW5lUHJvcGVydHkoaXQsIGtleSA9IGtleXNbaSsrXSwgUFtrZXldKTtcbiAgcmV0dXJuIGl0O1xufTtcbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKGl0LCBQKSB7XG4gIHJldHVybiBQID09PSB1bmRlZmluZWQgPyBfY3JlYXRlKGl0KSA6ICRkZWZpbmVQcm9wZXJ0aWVzKF9jcmVhdGUoaXQpLCBQKTtcbn07XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoa2V5KSB7XG4gIHZhciBFID0gaXNFbnVtLmNhbGwodGhpcywga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKSk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gRSB8fCAhaGFzKHRoaXMsIGtleSkgfHwgIWhhcyhBbGxTeW1ib2xzLCBrZXkpIHx8IGhhcyh0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtrZXldID8gRSA6IHRydWU7XG59O1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoaXQsIGtleSkge1xuICBpdCA9IHRvSU9iamVjdChpdCk7XG4gIGtleSA9IHRvUHJpbWl0aXZlKGtleSwgdHJ1ZSk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8gJiYgaGFzKEFsbFN5bWJvbHMsIGtleSkgJiYgIWhhcyhPUFN5bWJvbHMsIGtleSkpIHJldHVybjtcbiAgdmFyIEQgPSBnT1BEKGl0LCBrZXkpO1xuICBpZiAoRCAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pKSBELmVudW1lcmFibGUgPSB0cnVlO1xuICByZXR1cm4gRDtcbn07XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KSB7XG4gIHZhciBuYW1lcyA9IGdPUE4odG9JT2JqZWN0KGl0KSk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgdmFyIGkgPSAwO1xuICB2YXIga2V5O1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkge1xuICAgIGlmICghaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIGtleSAhPSBISURERU4gJiYga2V5ICE9IE1FVEEpIHJlc3VsdC5wdXNoKGtleSk7XG4gIH0gcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgJGdldE93blByb3BlcnR5U3ltYm9scyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICB2YXIgSVNfT1AgPSBpdCA9PT0gT2JqZWN0UHJvdG87XG4gIHZhciBuYW1lcyA9IGdPUE4oSVNfT1AgPyBPUFN5bWJvbHMgOiB0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKGhhcyhBbGxTeW1ib2xzLCBrZXkgPSBuYW1lc1tpKytdKSAmJiAoSVNfT1AgPyBoYXMoT2JqZWN0UHJvdG8sIGtleSkgOiB0cnVlKSkgcmVzdWx0LnB1c2goQWxsU3ltYm9sc1trZXldKTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gMTkuNC4xLjEgU3ltYm9sKFtkZXNjcmlwdGlvbl0pXG5pZiAoIVVTRV9OQVRJVkUpIHtcbiAgJFN5bWJvbCA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mICRTeW1ib2wpIHRocm93IFR5cGVFcnJvcignU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIScpO1xuICAgIHZhciB0YWcgPSB1aWQoYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICAgIHZhciAkc2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcyA9PT0gT2JqZWN0UHJvdG8pICRzZXQuY2FsbChPUFN5bWJvbHMsIHZhbHVlKTtcbiAgICAgIGlmIChoYXModGhpcywgSElEREVOKSAmJiBoYXModGhpc1tISURERU5dLCB0YWcpKSB0aGlzW0hJRERFTl1bdGFnXSA9IGZhbHNlO1xuICAgICAgc2V0U3ltYm9sRGVzYyh0aGlzLCB0YWcsIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBzZXR0ZXIpIHNldFN5bWJvbERlc2MoT2JqZWN0UHJvdG8sIHRhZywgeyBjb25maWd1cmFibGU6IHRydWUsIHNldDogJHNldCB9KTtcbiAgICByZXR1cm4gd3JhcCh0YWcpO1xuICB9O1xuICByZWRlZmluZSgkU3ltYm9sW1BST1RPVFlQRV0sICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9rO1xuICB9KTtcblxuICAkR09QRC5mID0gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbiAgJERQLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZiA9IGdPUE5FeHQuZiA9ICRnZXRPd25Qcm9wZXJ0eU5hbWVzO1xuICByZXF1aXJlKCcuL19vYmplY3QtcGllJykuZiA9ICRwcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiAgJEdPUFMuZiA9ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmICFyZXF1aXJlKCcuL19saWJyYXJ5JykpIHtcbiAgICByZWRlZmluZShPYmplY3RQcm90bywgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJywgJHByb3BlcnR5SXNFbnVtZXJhYmxlLCB0cnVlKTtcbiAgfVxuXG4gIHdrc0V4dC5mID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gd3JhcCh3a3MobmFtZSkpO1xuICB9O1xufVxuXG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCB7IFN5bWJvbDogJFN5bWJvbCB9KTtcblxuZm9yICh2YXIgZXM2U3ltYm9scyA9IChcbiAgLy8gMTkuNC4yLjIsIDE5LjQuMi4zLCAxOS40LjIuNCwgMTkuNC4yLjYsIDE5LjQuMi44LCAxOS40LjIuOSwgMTkuNC4yLjEwLCAxOS40LjIuMTEsIDE5LjQuMi4xMiwgMTkuNC4yLjEzLCAxOS40LjIuMTRcbiAgJ2hhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzJ1xuKS5zcGxpdCgnLCcpLCBqID0gMDsgZXM2U3ltYm9scy5sZW5ndGggPiBqOyl3a3MoZXM2U3ltYm9sc1tqKytdKTtcblxuZm9yICh2YXIgd2VsbEtub3duU3ltYm9scyA9ICRrZXlzKHdrcy5zdG9yZSksIGsgPSAwOyB3ZWxsS25vd25TeW1ib2xzLmxlbmd0aCA+IGs7KSB3a3NEZWZpbmUod2VsbEtub3duU3ltYm9sc1trKytdKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgJ1N5bWJvbCcsIHtcbiAgLy8gMTkuNC4yLjEgU3ltYm9sLmZvcihrZXkpXG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIGhhcyhTeW1ib2xSZWdpc3RyeSwga2V5ICs9ICcnKVxuICAgICAgPyBTeW1ib2xSZWdpc3RyeVtrZXldXG4gICAgICA6IFN5bWJvbFJlZ2lzdHJ5W2tleV0gPSAkU3ltYm9sKGtleSk7XG4gIH0sXG4gIC8vIDE5LjQuMi41IFN5bWJvbC5rZXlGb3Ioc3ltKVxuICBrZXlGb3I6IGZ1bmN0aW9uIGtleUZvcihzeW0pIHtcbiAgICBpZiAoIWlzU3ltYm9sKHN5bSkpIHRocm93IFR5cGVFcnJvcihzeW0gKyAnIGlzIG5vdCBhIHN5bWJvbCEnKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gU3ltYm9sUmVnaXN0cnkpIGlmIChTeW1ib2xSZWdpc3RyeVtrZXldID09PSBzeW0pIHJldHVybiBrZXk7XG4gIH0sXG4gIHVzZVNldHRlcjogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSB0cnVlOyB9LFxuICB1c2VTaW1wbGU6IGZ1bmN0aW9uICgpIHsgc2V0dGVyID0gZmFsc2U7IH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnT2JqZWN0Jywge1xuICAvLyAxOS4xLjIuMiBPYmplY3QuY3JlYXRlKE8gWywgUHJvcGVydGllc10pXG4gIGNyZWF0ZTogJGNyZWF0ZSxcbiAgLy8gMTkuMS4yLjQgT2JqZWN0LmRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpXG4gIGRlZmluZVByb3BlcnR5OiAkZGVmaW5lUHJvcGVydHksXG4gIC8vIDE5LjEuMi4zIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE8sIFByb3BlcnRpZXMpXG4gIGRlZmluZVByb3BlcnRpZXM6ICRkZWZpbmVQcm9wZXJ0aWVzLFxuICAvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbiAgLy8gMTkuMS4yLjcgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbiAgZ2V0T3duUHJvcGVydHlOYW1lczogJGdldE93blByb3BlcnR5TmFtZXMsXG4gIC8vIDE5LjEuMi44IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTylcbiAgZ2V0T3duUHJvcGVydHlTeW1ib2xzOiAkZ2V0T3duUHJvcGVydHlTeW1ib2xzXG59KTtcblxuLy8gQ2hyb21lIDM4IGFuZCAzOSBgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc2AgZmFpbHMgb24gcHJpbWl0aXZlc1xuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzQ0M1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSAkZmFpbHMoZnVuY3Rpb24gKCkgeyAkR09QUy5mKDEpOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBGQUlMU19PTl9QUklNSVRJVkVTLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHJldHVybiAkR09QUy5mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4vLyAyNC4zLjIgSlNPTi5zdHJpbmdpZnkodmFsdWUgWywgcmVwbGFjZXIgWywgc3BhY2VdXSlcbiRKU09OICYmICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCFVU0VfTkFUSVZFIHx8ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBTID0gJFN5bWJvbCgpO1xuICAvLyBNUyBFZGdlIGNvbnZlcnRzIHN5bWJvbCB2YWx1ZXMgdG8gSlNPTiBhcyB7fVxuICAvLyBXZWJLaXQgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIG51bGxcbiAgLy8gVjggdGhyb3dzIG9uIGJveGVkIHN5bWJvbHNcbiAgcmV0dXJuIF9zdHJpbmdpZnkoW1NdKSAhPSAnW251bGxdJyB8fCBfc3RyaW5naWZ5KHsgYTogUyB9KSAhPSAne30nIHx8IF9zdHJpbmdpZnkoT2JqZWN0KFMpKSAhPSAne30nO1xufSkpLCAnSlNPTicsIHtcbiAgc3RyaW5naWZ5OiBmdW5jdGlvbiBzdHJpbmdpZnkoaXQpIHtcbiAgICB2YXIgYXJncyA9IFtpdF07XG4gICAgdmFyIGkgPSAxO1xuICAgIHZhciByZXBsYWNlciwgJHJlcGxhY2VyO1xuICAgIHdoaWxlIChhcmd1bWVudHMubGVuZ3RoID4gaSkgYXJncy5wdXNoKGFyZ3VtZW50c1tpKytdKTtcbiAgICAkcmVwbGFjZXIgPSByZXBsYWNlciA9IGFyZ3NbMV07XG4gICAgaWYgKCFpc09iamVjdChyZXBsYWNlcikgJiYgaXQgPT09IHVuZGVmaW5lZCB8fCBpc1N5bWJvbChpdCkpIHJldHVybjsgLy8gSUU4IHJldHVybnMgc3RyaW5nIG9uIHVuZGVmaW5lZFxuICAgIGlmICghaXNBcnJheShyZXBsYWNlcikpIHJlcGxhY2VyID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgIGlmICh0eXBlb2YgJHJlcGxhY2VyID09ICdmdW5jdGlvbicpIHZhbHVlID0gJHJlcGxhY2VyLmNhbGwodGhpcywga2V5LCB2YWx1ZSk7XG4gICAgICBpZiAoIWlzU3ltYm9sKHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gICAgYXJnc1sxXSA9IHJlcGxhY2VyO1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmFwcGx5KCRKU09OLCBhcmdzKTtcbiAgfVxufSk7XG5cbi8vIDE5LjQuMy40IFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV0oaGludClcbiRTeW1ib2xbUFJPVE9UWVBFXVtUT19QUklNSVRJVkVdIHx8IHJlcXVpcmUoJy4vX2hpZGUnKSgkU3ltYm9sW1BST1RPVFlQRV0sIFRPX1BSSU1JVElWRSwgJFN5bWJvbFtQUk9UT1RZUEVdLnZhbHVlT2YpO1xuLy8gMTkuNC4zLjUgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoJFN5bWJvbCwgJ1N5bWJvbCcpO1xuLy8gMjAuMi4xLjkgTWF0aFtAQHRvU3RyaW5nVGFnXVxuc2V0VG9TdHJpbmdUYWcoTWF0aCwgJ01hdGgnLCB0cnVlKTtcbi8vIDI0LjMuMyBKU09OW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhnbG9iYWwuSlNPTiwgJ0pTT04nLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbnZhciBidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIEFycmF5QnVmZmVyID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykuQXJyYXlCdWZmZXI7XG52YXIgc3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi9fc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xudmFyICRBcnJheUJ1ZmZlciA9IGJ1ZmZlci5BcnJheUJ1ZmZlcjtcbnZhciAkRGF0YVZpZXcgPSBidWZmZXIuRGF0YVZpZXc7XG52YXIgJGlzVmlldyA9ICR0eXBlZC5BQlYgJiYgQXJyYXlCdWZmZXIuaXNWaWV3O1xudmFyICRzbGljZSA9ICRBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U7XG52YXIgVklFVyA9ICR0eXBlZC5WSUVXO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogKEFycmF5QnVmZmVyICE9PSAkQXJyYXlCdWZmZXIpLCB7IEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISR0eXBlZC5DT05TVFIsIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjMuMSBBcnJheUJ1ZmZlci5pc1ZpZXcoYXJnKVxuICBpc1ZpZXc6IGZ1bmN0aW9uIGlzVmlldyhpdCkge1xuICAgIHJldHVybiAkaXNWaWV3ICYmICRpc1ZpZXcoaXQpIHx8IGlzT2JqZWN0KGl0KSAmJiBWSUVXIGluIGl0O1xuICB9XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlUgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICFuZXcgJEFycmF5QnVmZmVyKDIpLnNsaWNlKDEsIHVuZGVmaW5lZCkuYnl0ZUxlbmd0aDtcbn0pLCBBUlJBWV9CVUZGRVIsIHtcbiAgLy8gMjQuMS40LjMgQXJyYXlCdWZmZXIucHJvdG90eXBlLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIHNsaWNlOiBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gICAgaWYgKCRzbGljZSAhPT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gJHNsaWNlLmNhbGwoYW5PYmplY3QodGhpcyksIHN0YXJ0KTsgLy8gRkYgZml4XG4gICAgdmFyIGxlbiA9IGFuT2JqZWN0KHRoaXMpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIGZpcnN0ID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICAgIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiBlbmQsIGxlbik7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKHRoaXMsICRBcnJheUJ1ZmZlcikpKHRvTGVuZ3RoKGZpbiAtIGZpcnN0KSk7XG4gICAgdmFyIHZpZXdTID0gbmV3ICREYXRhVmlldyh0aGlzKTtcbiAgICB2YXIgdmlld1QgPSBuZXcgJERhdGFWaWV3KHJlc3VsdCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB3aGlsZSAoZmlyc3QgPCBmaW4pIHtcbiAgICAgIHZpZXdULnNldFVpbnQ4KGluZGV4KyssIHZpZXdTLmdldFVpbnQ4KGZpcnN0KyspKTtcbiAgICB9IHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKEFSUkFZX0JVRkZFUik7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fdHlwZWQnKS5BQlYsIHtcbiAgRGF0YVZpZXc6IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpLkRhdGFWaWV3XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0Zsb2F0NjQnLCA4LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gRmxvYXQ2NEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDE2JywgMiwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MzJBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIEludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDE2QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDMyJywgNCwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQ4JywgMSwgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhDbGFtcGVkQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0sIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGVhY2ggPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMCk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJyk7XG52YXIgYXNzaWduID0gcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgV0VBS19NQVAgPSAnV2Vha01hcCc7XG52YXIgZ2V0V2VhayA9IG1ldGEuZ2V0V2VhaztcbnZhciBpc0V4dGVuc2libGUgPSBPYmplY3QuaXNFeHRlbnNpYmxlO1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSB3ZWFrLnVmc3RvcmU7XG52YXIgSW50ZXJuYWxNYXA7XG5cbnZhciB3cmFwcGVyID0gZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha01hcCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTtcbiAgfTtcbn07XG5cbnZhciBtZXRob2RzID0ge1xuICAvLyAyMy4zLjMuMyBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KVxuICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICBpZiAoaXNPYmplY3Qoa2V5KSkge1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICBpZiAoZGF0YSA9PT0gdHJ1ZSkgcmV0dXJuIHVuY2F1Z2h0RnJvemVuU3RvcmUodmFsaWRhdGUodGhpcywgV0VBS19NQVApKS5nZXQoa2V5KTtcbiAgICAgIHJldHVybiBkYXRhID8gZGF0YVt0aGlzLl9pXSA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH0sXG4gIC8vIDIzLjMuMy41IFdlYWtNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHdlYWsuZGVmKHZhbGlkYXRlKHRoaXMsIFdFQUtfTUFQKSwga2V5LCB2YWx1ZSk7XG4gIH1cbn07XG5cbi8vIDIzLjMgV2Vha01hcCBPYmplY3RzXG52YXIgJFdlYWtNYXAgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX01BUCwgd3JhcHBlciwgbWV0aG9kcywgd2VhaywgdHJ1ZSwgdHJ1ZSk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbmlmIChOQVRJVkVfV0VBS19NQVAgJiYgSVNfSUUxMSkge1xuICBJbnRlcm5hbE1hcCA9IHdlYWsuZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgV0VBS19NQVApO1xuICBhc3NpZ24oSW50ZXJuYWxNYXAucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgbWV0YS5ORUVEID0gdHJ1ZTtcbiAgZWFjaChbJ2RlbGV0ZScsICdoYXMnLCAnZ2V0JywgJ3NldCddLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHByb3RvID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICAgIHZhciBtZXRob2QgPSBwcm90b1trZXldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBrZXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAvLyBzdG9yZSBmcm96ZW4gb2JqZWN0cyBvbiBpbnRlcm5hbCB3ZWFrbWFwIHNoaW1cbiAgICAgIGlmIChpc09iamVjdChhKSAmJiAhaXNFeHRlbnNpYmxlKGEpKSB7XG4gICAgICAgIGlmICghdGhpcy5fZikgdGhpcy5fZiA9IG5ldyBJbnRlcm5hbE1hcCgpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5fZltrZXldKGEsIGIpO1xuICAgICAgICByZXR1cm4ga2V5ID09ICdzZXQnID8gdGhpcyA6IHJlc3VsdDtcbiAgICAgIC8vIHN0b3JlIGFsbCB0aGUgcmVzdCBvbiBuYXRpdmUgd2Vha21hcFxuICAgICAgfSByZXR1cm4gbWV0aG9kLmNhbGwodGhpcywgYSwgYik7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHdlYWsgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXdlYWsnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBXRUFLX1NFVCA9ICdXZWFrU2V0JztcblxuLy8gMjMuNCBXZWFrU2V0IE9iamVjdHNcbnJlcXVpcmUoJy4vX2NvbGxlY3Rpb24nKShXRUFLX1NFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gV2Vha1NldCgpIHsgcmV0dXJuIGdldCh0aGlzLCBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCB7XG4gIC8vIDIzLjQuMy4xIFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlcbiAgYWRkOiBmdW5jdGlvbiBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19TRVQpLCB2YWx1ZSwgdHJ1ZSk7XG4gIH1cbn0sIHdlYWssIGZhbHNlLCB0cnVlKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0TWFwXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXRNYXA6IGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBzb3VyY2VMZW4sIEE7XG4gICAgYUZ1bmN0aW9uKGNhbGxiYWNrZm4pO1xuICAgIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCAxLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXRNYXAnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtZmxhdE1hcC8jc2VjLUFycmF5LnByb3RvdHlwZS5mbGF0dGVuXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZsYXR0ZW5JbnRvQXJyYXkgPSByZXF1aXJlKCcuL19mbGF0dGVuLWludG8tYXJyYXknKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGZsYXR0ZW46IGZ1bmN0aW9uIGZsYXR0ZW4oLyogZGVwdGhBcmcgPSAxICovKSB7XG4gICAgdmFyIGRlcHRoQXJnID0gYXJndW1lbnRzWzBdO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgQSA9IGFycmF5U3BlY2llc0NyZWF0ZShPLCAwKTtcbiAgICBmbGF0dGVuSW50b0FycmF5KEEsIE8sIE8sIHNvdXJjZUxlbiwgMCwgZGVwdGhBcmcgPT09IHVuZGVmaW5lZCA/IDEgOiB0b0ludGVnZXIoZGVwdGhBcmcpKTtcbiAgICByZXR1cm4gQTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmbGF0dGVuJyk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdpbmNsdWRlcycpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3J3YWxkcm9uL3RjMzktbm90ZXMvYmxvYi9tYXN0ZXIvZXM2LzIwMTQtMDkvc2VwdC0yNS5tZCM1MTAtZ2xvYmFsYXNhcC1mb3ItZW5xdWV1aW5nLWEtbWljcm90YXNrXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgcHJvY2VzcyA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLnByb2Nlc3M7XG52YXIgaXNOb2RlID0gcmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnO1xuXG4kZXhwb3J0KCRleHBvcnQuRywge1xuICBhc2FwOiBmdW5jdGlvbiBhc2FwKGZuKSB7XG4gICAgdmFyIGRvbWFpbiA9IGlzTm9kZSAmJiBwcm9jZXNzLmRvbWFpbjtcbiAgICBtaWNyb3Rhc2soZG9tYWluID8gZG9tYWluLmJpbmQoZm4pIDogZm4pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9samhhcmIvcHJvcG9zYWwtaXMtZXJyb3JcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnRXJyb3InLCB7XG4gIGlzRXJyb3I6IGZ1bmN0aW9uIGlzRXJyb3IoaXQpIHtcbiAgICByZXR1cm4gY29mKGl0KSA9PT0gJ0Vycm9yJztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IGdsb2JhbDogcmVxdWlyZSgnLi9fZ2xvYmFsJykgfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1tYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnTWFwJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ01hcCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnTWFwJykgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGNsYW1wOiBmdW5jdGlvbiBjbGFtcCh4LCBsb3dlciwgdXBwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5taW4odXBwZXIsIE1hdGgubWF4KGxvd2VyLCB4KSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBERUdfUEVSX1JBRDogTWF0aC5QSSAvIDE4MCB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgUkFEX1BFUl9ERUcgPSAxODAgLyBNYXRoLlBJO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGRlZ3JlZXM6IGZ1bmN0aW9uIGRlZ3JlZXMocmFkaWFucykge1xuICAgIHJldHVybiByYWRpYW5zICogUkFEX1BFUl9ERUc7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzY2FsZSA9IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKTtcbnZhciBmcm91bmQgPSByZXF1aXJlKCcuL19tYXRoLWZyb3VuZCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGZzY2FsZTogZnVuY3Rpb24gZnNjYWxlKHgsIGluTG93LCBpbkhpZ2gsIG91dExvdywgb3V0SGlnaCkge1xuICAgIHJldHVybiBmcm91bmQoc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaWFkZGg6IGZ1bmN0aW9uIGlhZGRoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSArICh5MSA+Pj4gMCkgKyAoKCR4MCAmICR5MCB8ICgkeDAgfCAkeTApICYgfigkeDAgKyAkeTAgPj4+IDApKSA+Pj4gMzEpIHwgMDtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpbXVsaDogZnVuY3Rpb24gaW11bGgodSwgdikge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyICR1ID0gK3U7XG4gICAgdmFyICR2ID0gK3Y7XG4gICAgdmFyIHUwID0gJHUgJiBVSU5UMTY7XG4gICAgdmFyIHYwID0gJHYgJiBVSU5UMTY7XG4gICAgdmFyIHUxID0gJHUgPj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4gMTYpICsgKCh1MCAqIHYxID4+PiAwKSArICh0ICYgVUlOVDE2KSA+PiAxNik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaXN1Ymg6IGZ1bmN0aW9uIGlzdWJoKHgwLCB4MSwgeTAsIHkxKSB7XG4gICAgdmFyICR4MCA9IHgwID4+PiAwO1xuICAgIHZhciAkeDEgPSB4MSA+Pj4gMDtcbiAgICB2YXIgJHkwID0geTAgPj4+IDA7XG4gICAgcmV0dXJuICR4MSAtICh5MSA+Pj4gMCkgLSAoKH4keDAgJiAkeTAgfCB+KCR4MCBeICR5MCkgJiAkeDAgLSAkeTAgPj4+IDApID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgUkFEX1BFUl9ERUc6IDE4MCAvIE1hdGguUEkgfSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIERFR19QRVJfUkFEID0gTWF0aC5QSSAvIDE4MDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICByYWRpYW5zOiBmdW5jdGlvbiByYWRpYW5zKGRlZ3JlZXMpIHtcbiAgICByZXR1cm4gZGVncmVlcyAqIERFR19QRVJfUkFEO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2NhbGU6IHJlcXVpcmUoJy4vX21hdGgtc2NhbGUnKSB9KTtcbiIsIi8vIGh0dHA6Ly9qZmJhc3RpZW4uZ2l0aHViLmlvL3BhcGVycy9NYXRoLnNpZ25iaXQuaHRtbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzaWduYml0OiBmdW5jdGlvbiBzaWduYml0KHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgIT0geCA/IHggOiB4ID09IDAgPyAxIC8geCA9PSBJbmZpbml0eSA6IHggPiAwO1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHVtdWxoOiBmdW5jdGlvbiB1bXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+Pj4gMTY7XG4gICAgdmFyIHYxID0gJHYgPj4+IDE2O1xuICAgIHZhciB0ID0gKHUxICogdjAgPj4+IDApICsgKHUwICogdjAgPj4+IDE2KTtcbiAgICByZXR1cm4gdTEgKiB2MSArICh0ID4+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+PiAxNik7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMiBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lR2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lR2V0dGVyX18oUCwgZ2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgZ2V0OiBhRnVuY3Rpb24oZ2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG5cbi8vIEIuMi4yLjMgT2JqZWN0LnByb3RvdHlwZS5fX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcilcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2RlZmluZVNldHRlcl9fOiBmdW5jdGlvbiBfX2RlZmluZVNldHRlcl9fKFAsIHNldHRlcikge1xuICAgICRkZWZpbmVQcm9wZXJ0eS5mKHRvT2JqZWN0KHRoaXMpLCBQLCB7IHNldDogYUZ1bmN0aW9uKHNldHRlciksIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGVudHJpZXMgPSByZXF1aXJlKCcuL19vYmplY3QtdG8tYXJyYXknKSh0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoaXQpIHtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG93bktleXMgPSByZXF1aXJlKCcuL19vd24ta2V5cycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXREZXNjID0gZ09QRC5mO1xuICAgIHZhciBrZXlzID0gb3duS2V5cyhPKTtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBrZXksIGRlc2M7XG4gICAgd2hpbGUgKGtleXMubGVuZ3RoID4gaSkge1xuICAgICAgZGVzYyA9IGdldERlc2MoTywga2V5ID0ga2V5c1tpKytdKTtcbiAgICAgIGlmIChkZXNjICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjQgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cEdldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBHZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBHZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5nZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbi8vIEIuMi4yLjUgT2JqZWN0LnByb3RvdHlwZS5fX2xvb2t1cFNldHRlcl9fKFApXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19sb29rdXBTZXR0ZXJfXzogZnVuY3Rpb24gX19sb29rdXBTZXR0ZXJfXyhQKSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgSyA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICAgIHZhciBEO1xuICAgIGRvIHtcbiAgICAgIGlmIChEID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIEspKSByZXR1cm4gRC5zZXQ7XG4gICAgfSB3aGlsZSAoTyA9IGdldFByb3RvdHlwZU9mKE8pKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1vYmplY3QtdmFsdWVzLWVudHJpZXNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHZhbHVlcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKGZhbHNlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7XG4gIHZhbHVlczogZnVuY3Rpb24gdmFsdWVzKGl0KSB7XG4gICAgcmV0dXJuICR2YWx1ZXMoaXQpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZW5wYXJzaW5nL2VzLW9ic2VydmFibGVcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBtaWNyb3Rhc2sgPSByZXF1aXJlKCcuL19taWNyb3Rhc2snKSgpO1xudmFyIE9CU0VSVkFCTEUgPSByZXF1aXJlKCcuL193a3MnKSgnb2JzZXJ2YWJsZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuL19hbi1pbnN0YW5jZScpO1xudmFyIHJlZGVmaW5lQWxsID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUtYWxsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyIFJFVFVSTiA9IGZvck9mLlJFVFVSTjtcblxudmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChmbikge1xuICByZXR1cm4gZm4gPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGFGdW5jdGlvbihmbik7XG59O1xuXG52YXIgY2xlYW51cFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgdmFyIGNsZWFudXAgPSBzdWJzY3JpcHRpb24uX2M7XG4gIGlmIChjbGVhbnVwKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9jID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXAoKTtcbiAgfVxufTtcblxudmFyIHN1YnNjcmlwdGlvbkNsb3NlZCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgcmV0dXJuIHN1YnNjcmlwdGlvbi5fbyA9PT0gdW5kZWZpbmVkO1xufTtcblxudmFyIGNsb3NlU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgfVxufTtcblxudmFyIFN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc3Vic2NyaWJlcikge1xuICBhbk9iamVjdChvYnNlcnZlcik7XG4gIHRoaXMuX2MgPSB1bmRlZmluZWQ7XG4gIHRoaXMuX28gPSBvYnNlcnZlcjtcbiAgb2JzZXJ2ZXIgPSBuZXcgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIodGhpcyk7XG4gIHRyeSB7XG4gICAgdmFyIGNsZWFudXAgPSBzdWJzY3JpYmVyKG9ic2VydmVyKTtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gY2xlYW51cDtcbiAgICBpZiAoY2xlYW51cCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7IHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOyB9O1xuICAgICAgZWxzZSBhRnVuY3Rpb24oY2xlYW51cCk7XG4gICAgICB0aGlzLl9jID0gY2xlYW51cDtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICByZXR1cm47XG4gIH0gaWYgKHN1YnNjcmlwdGlvbkNsb3NlZCh0aGlzKSkgY2xlYW51cFN1YnNjcmlwdGlvbih0aGlzKTtcbn07XG5cblN1YnNjcmlwdGlvbi5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICB1bnN1YnNjcmliZTogZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7IGNsb3NlU3Vic2NyaXB0aW9uKHRoaXMpOyB9XG59KTtcblxudmFyIFN1YnNjcmlwdGlvbk9ic2VydmVyID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB0aGlzLl9zID0gc3Vic2NyaXB0aW9uO1xufTtcblxuU3Vic2NyaXB0aW9uT2JzZXJ2ZXIucHJvdG90eXBlID0gcmVkZWZpbmVBbGwoe30sIHtcbiAgbmV4dDogZnVuY3Rpb24gbmV4dCh2YWx1ZSkge1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9zO1xuICAgIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLm5leHQpO1xuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsb3NlU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcbiAgZXJyb3I6IGZ1bmN0aW9uIGVycm9yKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKHN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB0aHJvdyB2YWx1ZTtcbiAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5lcnJvcik7XG4gICAgICBpZiAoIW0pIHRocm93IHZhbHVlO1xuICAgICAgdmFsdWUgPSBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfSxcbiAgY29tcGxldGU6IGZ1bmN0aW9uIGNvbXBsZXRlKHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgc3Vic2NyaXB0aW9uLl9vID0gdW5kZWZpbmVkO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIuY29tcGxldGUpO1xuICAgICAgICB2YWx1ZSA9IG0gPyBtLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudmFyICRPYnNlcnZhYmxlID0gZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmVyKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgJE9ic2VydmFibGUsICdPYnNlcnZhYmxlJywgJ19mJykuX2YgPSBhRnVuY3Rpb24oc3Vic2NyaWJlcik7XG59O1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZS5wcm90b3R5cGUsIHtcbiAgc3Vic2NyaWJlOiBmdW5jdGlvbiBzdWJzY3JpYmUob2JzZXJ2ZXIpIHtcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihvYnNlcnZlciwgdGhpcy5fZik7XG4gIH0sXG4gIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIG5ldyAoY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICBhRnVuY3Rpb24oZm4pO1xuICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoYXQuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBmbih2YWx1ZSk7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5yZWRlZmluZUFsbCgkT2JzZXJ2YWJsZSwge1xuICBmcm9tOiBmdW5jdGlvbiBmcm9tKHgpIHtcbiAgICB2YXIgQyA9IHR5cGVvZiB0aGlzID09PSAnZnVuY3Rpb24nID8gdGhpcyA6ICRPYnNlcnZhYmxlO1xuICAgIHZhciBtZXRob2QgPSBnZXRNZXRob2QoYW5PYmplY3QoeClbT0JTRVJWQUJMRV0pO1xuICAgIGlmIChtZXRob2QpIHtcbiAgICAgIHZhciBvYnNlcnZhYmxlID0gYW5PYmplY3QobWV0aG9kLmNhbGwoeCkpO1xuICAgICAgcmV0dXJuIG9ic2VydmFibGUuY29uc3RydWN0b3IgPT09IEMgPyBvYnNlcnZhYmxlIDogbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlLnN1YnNjcmliZShvYnNlcnZlcik7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBDKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoZm9yT2YoeCwgZmFsc2UsIGZ1bmN0aW9uIChpdCkge1xuICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KGl0KTtcbiAgICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybiBSRVRVUk47XG4gICAgICAgICAgICB9KSA9PT0gUkVUVVJOKSByZXR1cm47XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGRvbmUpIHRocm93IGU7XG4gICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH0sXG4gIG9mOiBmdW5jdGlvbiBvZigpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZ3VtZW50cy5sZW5ndGgsIGl0ZW1zID0gbmV3IEFycmF5KGwpOyBpIDwgbDspIGl0ZW1zW2ldID0gYXJndW1lbnRzW2krK107XG4gICAgcmV0dXJuIG5ldyAodHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGUpKGZ1bmN0aW9uIChvYnNlcnZlcikge1xuICAgICAgdmFyIGRvbmUgPSBmYWxzZTtcbiAgICAgIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaXRlbXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXRlbXNbal0pO1xuICAgICAgICAgICAgaWYgKGRvbmUpIHJldHVybjtcbiAgICAgICAgICB9IG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgZG9uZSA9IHRydWU7IH07XG4gICAgfSk7XG4gIH1cbn0pO1xuXG5oaWRlKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwgT0JTRVJWQUJMRSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSk7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7IE9ic2VydmFibGU6ICRPYnNlcnZhYmxlIH0pO1xuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdPYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLWZpbmFsbHlcbid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY29yZSA9IHJlcXVpcmUoJy4vX2NvcmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgcHJvbWlzZVJlc29sdmUgPSByZXF1aXJlKCcuL19wcm9taXNlLXJlc29sdmUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LlIsICdQcm9taXNlJywgeyAnZmluYWxseSc6IGZ1bmN0aW9uIChvbkZpbmFsbHkpIHtcbiAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgY29yZS5Qcm9taXNlIHx8IGdsb2JhbC5Qcm9taXNlKTtcbiAgdmFyIGlzRnVuY3Rpb24gPSB0eXBlb2Ygb25GaW5hbGx5ID09ICdmdW5jdGlvbic7XG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgaXNGdW5jdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gcHJvbWlzZVJlc29sdmUoQywgb25GaW5hbGx5KCkpLnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4geDsgfSk7XG4gICAgfSA6IG9uRmluYWxseSxcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKGUpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHRocm93IGU7IH0pO1xuICAgIH0gOiBvbkZpbmFsbHlcbiAgKTtcbn0gfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1wcm9taXNlLXRyeVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1Byb21pc2UnLCB7ICd0cnknOiBmdW5jdGlvbiAoY2FsbGJhY2tmbikge1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gcGVyZm9ybShjYWxsYmFja2ZuKTtcbiAgKHJlc3VsdC5lID8gcHJvbWlzZUNhcGFiaWxpdHkucmVqZWN0IDogcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZSkocmVzdWx0LnYpO1xuICByZXR1cm4gcHJvbWlzZUNhcGFiaWxpdHkucHJvbWlzZTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5zZXQ7XG5cbm1ldGFkYXRhLmV4cCh7IGRlZmluZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWZpbmVNZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgdGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSwgYW5PYmplY3QodGFyZ2V0KSwgdG9NZXRhS2V5KHRhcmdldEtleSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcCA9IG1ldGFkYXRhLm1hcDtcbnZhciBzdG9yZSA9IG1ldGFkYXRhLnN0b3JlO1xuXG5tZXRhZGF0YS5leHAoeyBkZWxldGVNZXRhZGF0YTogZnVuY3Rpb24gZGVsZXRlTWV0YWRhdGEobWV0YWRhdGFLZXksIHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICB2YXIgdGFyZ2V0S2V5ID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzJdKTtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChhbk9iamVjdCh0YXJnZXQpLCB0YXJnZXRLZXksIGZhbHNlKTtcbiAgaWYgKG1ldGFkYXRhTWFwID09PSB1bmRlZmluZWQgfHwgIW1ldGFkYXRhTWFwWydkZWxldGUnXShtZXRhZGF0YUtleSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKG1ldGFkYXRhTWFwLnNpemUpIHJldHVybiB0cnVlO1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgdGFyZ2V0TWV0YWRhdGFbJ2RlbGV0ZSddKHRhcmdldEtleSk7XG4gIHJldHVybiAhIXRhcmdldE1ldGFkYXRhLnNpemUgfHwgc3RvcmVbJ2RlbGV0ZSddKHRhcmdldCk7XG59IH0pO1xuIiwidmFyIFNldCA9IHJlcXVpcmUoJy4vZXM2LnNldCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuL19hcnJheS1mcm9tLWl0ZXJhYmxlJyk7XG52YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5TWV0YWRhdGFLZXlzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgdmFyIG9LZXlzID0gb3JkaW5hcnlPd25NZXRhZGF0YUtleXMoTywgUCk7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbCkgcmV0dXJuIG9LZXlzO1xuICB2YXIgcEtleXMgPSBvcmRpbmFyeU1ldGFkYXRhS2V5cyhwYXJlbnQsIFApO1xuICByZXR1cm4gcEtleXMubGVuZ3RoID8gb0tleXMubGVuZ3RoID8gZnJvbShuZXcgU2V0KG9LZXlzLmNvbmNhdChwS2V5cykpKSA6IHBLZXlzIDogb0tleXM7XG59O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRNZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5TWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEgPSBtZXRhZGF0YS5nZXQ7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlHZXRNZXRhZGF0YSA9IGZ1bmN0aW9uIChNZXRhZGF0YUtleSwgTywgUCkge1xuICB2YXIgaGFzT3duID0gb3JkaW5hcnlIYXNPd25NZXRhZGF0YShNZXRhZGF0YUtleSwgTywgUCk7XG4gIGlmIChoYXNPd24pIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlHZXRNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IHVuZGVmaW5lZDtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhOiBmdW5jdGlvbiBnZXRNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlPd25NZXRhZGF0YUtleXMgPSBtZXRhZGF0YS5rZXlzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGFLZXlzOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YUtleXModGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMiA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMV0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGdldE93bk1ldGFkYXRhOiBmdW5jdGlvbiBnZXRPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUhhc01ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIHRydWU7XG4gIHZhciBwYXJlbnQgPSBnZXRQcm90b3R5cGVPZihPKTtcbiAgcmV0dXJuIHBhcmVudCAhPT0gbnVsbCA/IG9yZGluYXJ5SGFzTWV0YWRhdGEoTWV0YWRhdGFLZXksIHBhcmVudCwgUCkgOiBmYWxzZTtcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGhhc01ldGFkYXRhOiBmdW5jdGlvbiBoYXNNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgb3JkaW5hcnlIYXNPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmhhcztcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbm1ldGFkYXRhLmV4cCh7IGhhc093bk1ldGFkYXRhOiBmdW5jdGlvbiBoYXNPd25NZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHJldHVybiBvcmRpbmFyeUhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBhbk9iamVjdCh0YXJnZXQpXG4gICAgLCBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pKTtcbn0gfSk7XG4iLCJ2YXIgJG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b01ldGFLZXkgPSAkbWV0YWRhdGEua2V5O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSAkbWV0YWRhdGEuc2V0O1xuXG4kbWV0YWRhdGEuZXhwKHsgbWV0YWRhdGE6IGZ1bmN0aW9uIG1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZWNvcmF0b3IodGFyZ2V0LCB0YXJnZXRLZXkpIHtcbiAgICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKFxuICAgICAgbWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUsXG4gICAgICAodGFyZ2V0S2V5ICE9PSB1bmRlZmluZWQgPyBhbk9iamVjdCA6IGFGdW5jdGlvbikodGFyZ2V0KSxcbiAgICAgIHRvTWV0YUtleSh0YXJnZXRLZXkpXG4gICAgKTtcbiAgfTtcbn0gfSk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy1zZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnU2V0Jyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vRGF2aWRCcnVhbnQvTWFwLVNldC5wcm90b3R5cGUudG9KU09OXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1NldCcsIHsgdG9KU09OOiByZXF1aXJlKCcuL19jb2xsZWN0aW9uLXRvLWpzb24nKSgnU2V0JykgfSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbWF0aGlhc2J5bmVucy9TdHJpbmcucHJvdG90eXBlLmF0XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xudmFyICRmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG5cbnZhciBGT1JDRUQgPSAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ/CgrrcnLmF0KDApICE9PSAn8KCutyc7XG59KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBGT1JDRUQsICdTdHJpbmcnLCB7XG4gIGF0OiBmdW5jdGlvbiBhdChwb3MpIHtcbiAgICByZXR1cm4gJGF0KHRoaXMsIHBvcyk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9TdHJpbmcucHJvdG90eXBlLm1hdGNoQWxsL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuL19pcy1yZWdleHAnKTtcbnZhciBnZXRGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgUmVnRXhwUHJvdG8gPSBSZWdFeHAucHJvdG90eXBlO1xuXG52YXIgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yID0gZnVuY3Rpb24gKHJlZ2V4cCwgc3RyaW5nKSB7XG4gIHRoaXMuX3IgPSByZWdleHA7XG4gIHRoaXMuX3MgPSBzdHJpbmc7XG59O1xuXG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKCRSZWdFeHBTdHJpbmdJdGVyYXRvciwgJ1JlZ0V4cCBTdHJpbmcnLCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgbWF0Y2ggPSB0aGlzLl9yLmV4ZWModGhpcy5fcyk7XG4gIHJldHVybiB7IHZhbHVlOiBtYXRjaCwgZG9uZTogbWF0Y2ggPT09IG51bGwgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgbWF0Y2hBbGw6IGZ1bmN0aW9uIG1hdGNoQWxsKHJlZ2V4cCkge1xuICAgIGRlZmluZWQodGhpcyk7XG4gICAgaWYgKCFpc1JlZ0V4cChyZWdleHApKSB0aHJvdyBUeXBlRXJyb3IocmVnZXhwICsgJyBpcyBub3QgYSByZWdleHAhJyk7XG4gICAgdmFyIFMgPSBTdHJpbmcodGhpcyk7XG4gICAgdmFyIGZsYWdzID0gJ2ZsYWdzJyBpbiBSZWdFeHBQcm90byA/IFN0cmluZyhyZWdleHAuZmxhZ3MpIDogZ2V0RmxhZ3MuY2FsbChyZWdleHApO1xuICAgIHZhciByeCA9IG5ldyBSZWdFeHAocmVnZXhwLnNvdXJjZSwgfmZsYWdzLmluZGV4T2YoJ2cnKSA/IGZsYWdzIDogJ2cnICsgZmxhZ3MpO1xuICAgIHJ4Lmxhc3RJbmRleCA9IHRvTGVuZ3RoKHJlZ2V4cC5sYXN0SW5kZXgpO1xuICAgIHJldHVybiBuZXcgJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yKHJ4LCBTKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFkID0gcmVxdWlyZSgnLi9fc3RyaW5nLXBhZCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzI4MFxudmFyIFdFQktJVF9CVUcgPSAvVmVyc2lvblxcLzEwXFwuXFxkKyhcXC5cXGQrKT8oIE1vYmlsZVxcL1xcdyspPyBTYWZhcmlcXC8vLnRlc3QodXNlckFnZW50KTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBXRUJLSVRfQlVHLCAnU3RyaW5nJywge1xuICBwYWRFbmQ6IGZ1bmN0aW9uIHBhZEVuZChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZFN0YXJ0OiBmdW5jdGlvbiBwYWRTdGFydChtYXhMZW5ndGggLyogLCBmaWxsU3RyaW5nID0gJyAnICovKSB7XG4gICAgcmV0dXJuICRwYWQodGhpcywgbWF4TGVuZ3RoLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbUxlZnQnLCBmdW5jdGlvbiAoJHRyaW0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRyaW1MZWZ0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAxKTtcbiAgfTtcbn0sICd0cmltU3RhcnQnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zZWJtYXJrYmFnZS9lY21hc2NyaXB0LXN0cmluZy1sZWZ0LXJpZ2h0LXRyaW1cbnJlcXVpcmUoJy4vX3N0cmluZy10cmltJykoJ3RyaW1SaWdodCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbVJpZ2h0KCkge1xuICAgIHJldHVybiAkdHJpbSh0aGlzLCAyKTtcbiAgfTtcbn0sICd0cmltRW5kJyk7XG4iLCJyZXF1aXJlKCcuL193a3MtZGVmaW5lJykoJ2FzeW5jSXRlcmF0b3InKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnb2JzZXJ2YWJsZScpO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtZ2xvYmFsXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N5c3RlbScsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrTWFwJyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0LmZyb21cbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLWZyb20nKSgnV2Vha1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha3NldC5vZlxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tb2YnKSgnV2Vha1NldCcpO1xuIiwidmFyICRpdGVyYXRvcnMgPSByZXF1aXJlKCcuL2VzNi5hcnJheS5pdGVyYXRvcicpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xudmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3a3MoJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbnZhciBET01JdGVyYWJsZXMgPSB7XG4gIENTU1J1bGVMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgQ1NTU3R5bGVEZWNsYXJhdGlvbjogZmFsc2UsXG4gIENTU1ZhbHVlTGlzdDogZmFsc2UsXG4gIENsaWVudFJlY3RMaXN0OiBmYWxzZSxcbiAgRE9NUmVjdExpc3Q6IGZhbHNlLFxuICBET01TdHJpbmdMaXN0OiBmYWxzZSxcbiAgRE9NVG9rZW5MaXN0OiB0cnVlLFxuICBEYXRhVHJhbnNmZXJJdGVtTGlzdDogZmFsc2UsXG4gIEZpbGVMaXN0OiBmYWxzZSxcbiAgSFRNTEFsbENvbGxlY3Rpb246IGZhbHNlLFxuICBIVE1MQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxGb3JtRWxlbWVudDogZmFsc2UsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiBmYWxzZSxcbiAgTWVkaWFMaXN0OiB0cnVlLCAvLyBUT0RPOiBOb3Qgc3BlYyBjb21wbGlhbnQsIHNob3VsZCBiZSBmYWxzZS5cbiAgTWltZVR5cGVBcnJheTogZmFsc2UsXG4gIE5hbWVkTm9kZU1hcDogZmFsc2UsXG4gIE5vZGVMaXN0OiB0cnVlLFxuICBQYWludFJlcXVlc3RMaXN0OiBmYWxzZSxcbiAgUGx1Z2luOiBmYWxzZSxcbiAgUGx1Z2luQXJyYXk6IGZhbHNlLFxuICBTVkdMZW5ndGhMaXN0OiBmYWxzZSxcbiAgU1ZHTnVtYmVyTGlzdDogZmFsc2UsXG4gIFNWR1BhdGhTZWdMaXN0OiBmYWxzZSxcbiAgU1ZHUG9pbnRMaXN0OiBmYWxzZSxcbiAgU1ZHU3RyaW5nTGlzdDogZmFsc2UsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IGZhbHNlLFxuICBTb3VyY2VCdWZmZXJMaXN0OiBmYWxzZSxcbiAgU3R5bGVTaGVldExpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBUZXh0VHJhY2tDdWVMaXN0OiBmYWxzZSxcbiAgVGV4dFRyYWNrTGlzdDogZmFsc2UsXG4gIFRvdWNoTGlzdDogZmFsc2Vcbn07XG5cbmZvciAodmFyIGNvbGxlY3Rpb25zID0gZ2V0S2V5cyhET01JdGVyYWJsZXMpLCBpID0gMDsgaSA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG4gIHZhciBOQU1FID0gY29sbGVjdGlvbnNbaV07XG4gIHZhciBleHBsaWNpdCA9IERPTUl0ZXJhYmxlc1tOQU1FXTtcbiAgdmFyIENvbGxlY3Rpb24gPSBnbG9iYWxbTkFNRV07XG4gIHZhciBwcm90byA9IENvbGxlY3Rpb24gJiYgQ29sbGVjdGlvbi5wcm90b3R5cGU7XG4gIHZhciBrZXk7XG4gIGlmIChwcm90bykge1xuICAgIGlmICghcHJvdG9bSVRFUkFUT1JdKSBoaWRlKHByb3RvLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIGlmICghcHJvdG9bVE9fU1RSSU5HX1RBR10pIGhpZGUocHJvdG8sIFRPX1NUUklOR19UQUcsIE5BTUUpO1xuICAgIEl0ZXJhdG9yc1tOQU1FXSA9IEFycmF5VmFsdWVzO1xuICAgIGlmIChleHBsaWNpdCkgZm9yIChrZXkgaW4gJGl0ZXJhdG9ycykgaWYgKCFwcm90b1trZXldKSByZWRlZmluZShwcm90bywga2V5LCAkaXRlcmF0b3JzW2tleV0sIHRydWUpO1xuICB9XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICR0YXNrID0gcmVxdWlyZSgnLi9fdGFzaycpO1xuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkIsIHtcbiAgc2V0SW1tZWRpYXRlOiAkdGFzay5zZXQsXG4gIGNsZWFySW1tZWRpYXRlOiAkdGFzay5jbGVhclxufSk7XG4iLCIvLyBpZTktIHNldFRpbWVvdXQgJiBzZXRJbnRlcnZhbCBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgZml4XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBzbGljZSA9IFtdLnNsaWNlO1xudmFyIE1TSUUgPSAvTVNJRSAuXFwuLy50ZXN0KHVzZXJBZ2VudCk7IC8vIDwtIGRpcnR5IGllOS0gY2hlY2tcbnZhciB3cmFwID0gZnVuY3Rpb24gKHNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gKGZuLCB0aW1lIC8qICwgLi4uYXJncyAqLykge1xuICAgIHZhciBib3VuZEFyZ3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcbiAgICB2YXIgYXJncyA9IGJvdW5kQXJncyA/IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSA6IGZhbHNlO1xuICAgIHJldHVybiBzZXQoYm91bmRBcmdzID8gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gICAgICAodHlwZW9mIGZuID09ICdmdW5jdGlvbicgPyBmbiA6IEZ1bmN0aW9uKGZuKSkuYXBwbHkodGhpcywgYXJncyk7XG4gICAgfSA6IGZuLCB0aW1lKTtcbiAgfTtcbn07XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiArICRleHBvcnQuRiAqIE1TSUUsIHtcbiAgc2V0VGltZW91dDogd3JhcChnbG9iYWwuc2V0VGltZW91dCksXG4gIHNldEludGVydmFsOiB3cmFwKGdsb2JhbC5zZXRJbnRlcnZhbClcbn0pO1xuIiwicmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zeW1ib2wnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmNyZWF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZGVmaW5lLXByb3BlcnR5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydGllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5mcmVlemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNlYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZnJvemVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1zZWFsZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLWV4dGVuc2libGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmFzc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnNldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5iaW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLm5hbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24uaGFzLWluc3RhbmNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wYXJzZS1mbG9hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLWZpeGVkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci50by1wcmVjaXNpb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmVwc2lsb24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLWZpbml0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtbmFuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1heC1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLm1pbi1zYWZlLWludGVnZXInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5wYXJzZS1pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hY29zaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXRhbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jYnJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguY2x6MzInKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5mcm91bmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5oeXBvdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmltdWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cxMCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpZ24nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5zaW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnRydW5jJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJhdycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmNvZGUtcG9pbnQtYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmVuZHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaW5jbHVkZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnJlcGVhdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3RhcnRzLXdpdGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmFuY2hvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYmlnJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ibGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYm9sZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRjb2xvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udHNpemUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLml0YWxpY3MnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmxpbmsnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdHJpa2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN1YicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3VwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUubm93Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLWlzby1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5qb2luJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZm9yLWVhY2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zb21lJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmV2ZXJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkubGFzdC1pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5jb3B5LXdpdGhpbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuZXhlYycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5mbGFncycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAubWF0Y2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnJlcGxhY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLnNlYXJjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc3BsaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucHJvbWlzZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LndlYWstc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmFycmF5LWJ1ZmZlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5kYXRhLXZpZXcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50OC1jbGFtcGVkLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQxNi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC51aW50MzItYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuZmxvYXQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDY0LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0LW1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5hcnJheS5mbGF0dGVuJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcucGFkLXN0YXJ0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy50cmltLWxlZnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tcmlnaHQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLm1hdGNoLWFsbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JqZWN0LnZhbHVlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZGVmaW5lLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLWdldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QubG9va3VwLXNldHRlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQudG8tanNvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstc2V0Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LndlYWstbWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5nbG9iYWwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5lcnJvci5pcy1lcnJvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmNsYW1wJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZGVnLXBlci1yYWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWdyZWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguZnNjYWxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaWFkZGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pc3ViaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmltdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGgucmFkLXBlci1kZWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWRpYW5zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC51bXVsaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnNpZ25iaXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS5maW5hbGx5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnByb21pc2UudHJ5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVmaW5lLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZGVsZXRlLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuZ2V0LW93bi1tZXRhZGF0YS1rZXlzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QuaGFzLW93bi1tZXRhZGF0YScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0Lm1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFzYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi50aW1lcnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuaW1tZWRpYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLmRvbS5pdGVyYWJsZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL21vZHVsZXMvX2NvcmUnKTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qIFZhcnMgKi9cXG46cm9vdCB7XFxuICAvKiBDT0xPUlMgKi9cXG4gIC8qIEFjY2VudCAqL1xcbiAgLS1ibHVlOiAjMThhMGZiO1xcbiAgLS1wdXJwbGU6ICM3YjYxZmY7XFxuICAtLWhvdC1waW5rOiAjZmYwMGZmO1xcbiAgLS1ncmVlbjogIzFiYzQ3ZDtcXG4gIC0tcmVkOiAjZjI0ODIyO1xcbiAgLS15ZWxsb3c6ICNmZmViMDA7XFxuICAvKiBCYXNpYyBmb3JlZ3JvdW5kICovXFxuICAtLWJsYWNrOiAjMDAwMDAwO1xcbiAgLS1ibGFjazg6IHJnYmEoMCwgMCwgMCwgLjgpO1xcbiAgLS1ibGFjazgtb3BhcXVlOiAjMzMzMzMzO1xcbiAgLS1ibGFjazM6IHJnYmEoMCwgMCwgMCwgLjMpO1xcbiAgLS1ibGFjazMtb3BhcXVlOiAjQjNCM0IzO1xcbiAgLS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0td2hpdGU4OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44KTtcXG4gIC0td2hpdGU0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC40KTtcXG4gIC8qIEJhc2ljIGJhY2tncm91bmQgKi9cXG4gIC0tZ3JleTogI2YwZjBmMDtcXG4gIC0tc2lsdmVyOiAjZTVlNWU1O1xcbiAgLS1odWQ6ICMyMjIyMjI7XFxuICAtLXRvb2xiYXI6ICMyYzJjMmM7XFxuICAvKiBTcGVjaWFsICovXFxuICAtLWJsYWNrMTogcmdiYSgwLCAwLCAwLCAuMSk7XFxuICAtLWJsdWUzOiByZ2JhKDI0LCAxNDUsIDI1MSwgLjMpO1xcbiAgLS1wdXJwbGU0OiByZ2JhKDEyMywgOTcsIDI1NSwgLjQpO1xcbiAgLS1ob3Zlci1maWxsOiByZ2JhKDAsIDAsIDAsIC4wNik7XFxuICAtLXNlbGVjdGlvbi1hOiAjZGFlYmY3O1xcbiAgLS1zZWxlY3Rpb24tYjogI2VkZjVmYTtcXG4gIC0td2hpdGUyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4yKTtcXG4gIC8qIFRZUE9HUkFQSFkgKi9cXG4gIC8qIFBvcyA9IHBvc2l0aXZlIGFwcGxpY2F0aW9ucyAoYmxhY2sgb24gd2hpdGUpICovXFxuICAvKiBOZWcgPSBuZWdhdGl2ZSBhcHBsaWNhdGlvbnMgKHdoaXRlIG9uIGJsYWNrKSAqL1xcbiAgLyogRm9udCBzdGFjayAqL1xcbiAgLS1mb250LXN0YWNrOiAnSW50ZXInLCBzYW5zLXNlcmlmO1xcbiAgLyogRm9udCBzaXplcyAqL1xcbiAgLS1mb250LXNpemUteHNtYWxsOiAxMXB4O1xcbiAgLS1mb250LXNpemUtc21hbGw6IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1sYXJnZTogMTNweDtcXG4gIC0tZm9udC1zaXplLXhsYXJnZTogMTRweDtcXG4gIC8qIEZvbnQgd2VpZ2h0cyAqL1xcbiAgLS1mb250LXdlaWdodC1ub3JtYWw6IDQwMDtcXG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWJvbGQ6IDYwMDtcXG4gIC8qIExpbmVoZWlnaHQgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodDogMTZweDtcXG4gIC8qIFVzZSBGb3IgeHNtYWxsLCBzbWFsbCBmb250IHNpemVzICovXFxuICAtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2U6IDI0cHg7XFxuICAvKiBVc2UgRm9yIGxhcmdlLCB4bGFyZ2UgZm9udCBzaXplcyAqL1xcbiAgLyogTGV0dGVyc3BhY2luZyAqL1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsOiAuMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGw6IDA7XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsOiAuMDA1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlOiAtLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctbGFyZ2U6IC4wMDI1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZTogLS4wMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlOiAtLjAwMWVtO1xcbiAgLyogQk9SREVSIFJBRElVUyAqL1xcbiAgLS1ib3JkZXItcmFkaXVzLXNtYWxsOiAycHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbWVkOiA1cHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbGFyZ2U6IDZweDtcXG4gIC8qIFNIQURPV1MgKi9cXG4gIC0tc2hhZG93LWh1ZDogMCA1cHggMTdweCByZ2JhKDAsIDAsIDAsIC4yKSwgMCAycHggN3B4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC0tc2hhZG93LWZsb2F0aW5nLXdpbmRvdzogMCAycHggMTRweCByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuICAvKiBTUEFDSU5HICsgU0laSU5HICovXFxuICAtLXNpemUteHh4c21hbGw6IDRweDtcXG4gIC0tc2l6ZS14eHNtYWxsOiA4cHg7XFxuICAtLXNpemUteHNtYWxsOiAxNnB4O1xcbiAgLS1zaXplLXNtYWxsOiAyNHB4O1xcbiAgLS1zaXplLW1lZGl1bTogMzJweDtcXG4gIC0tc2l6ZS1sYXJnZTogNDBweDtcXG4gIC0tc2l6ZS14bGFyZ2U6IDQ4cHg7XFxuICAtLXNpemUteHhsYXJnZTogNjRweDtcXG4gIC0tc2l6ZS14eHhsYXJnZTogODBweDtcXG59XFxuXFxuLyogR2xvYmFsIHN0eWxlcyAqL1xcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4vKiAgRk9OVFMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1SZWd1bGFyLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItTWVkaXVtLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbi8qIFVUSUxJVElFUyAqL1xcbi8qIHBhZGRpbmcgKi9cXG4ucC14eHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnAteHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucC14c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucC1zbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnAtbWVkaXVtIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnAtbGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wLXhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wLXh4bGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnAtaHVnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyB0b3AgKi9cXG4ucHQteHh4c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnB0LXhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucHQtc21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHQtbWVkaXVtIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wdC1sYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wdC14bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnB0LXh4bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wdC1odWdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyByaWdodCAqL1xcbi5wci14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnByLXh4c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnByLXhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wci1zbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnByLW1lZGl1bSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wci1sYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnByLXhsYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wci14eGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wci1odWdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGJvdHRvbSAqL1xcbi5wYi14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wYi14eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGIteHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wYi1zbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wYi1tZWRpdW0ge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBiLWxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBiLXhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucGIteHhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBiLWh1Z2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGxlZnQgKi9cXG4ucGwteHh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBsLXh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucGwtc21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBsLW1lZGl1bSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBsLWxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wbC14bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wbC14eGxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBsLWh1Z2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luICovXFxuLm0teHh4c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm0teHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tLXhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm0tc21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm0tbWVkaXVtIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubS1sYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubS14bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tLXh4bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubS1odWdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiB0b3AgKi9cXG4ubXQteHh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tdC14eHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tdC14c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXQtc21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tdC1tZWRpdW0ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubXQtbGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tdC14bGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXQteHhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubXQtaHVnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHJpZ2h0ICovXFxuLm1yLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tci14eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1yLXhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1yLXNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tci1tZWRpdW0ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tci1sYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubXIteGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXIteHhsYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tci1odWdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiBib3R0b20gKi9cXG4ubWIteHh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tYi14eHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tYi14c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWItc21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tYi1tZWRpdW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubWItbGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tYi14bGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWIteHhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubWItaHVnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGxlZnQgKi9cXG4ubWwteHh4c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1sLXhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWwtc21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubWwtbWVkaXVtIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tbC1sYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tbC14bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1sLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tbC1odWdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbGF5b3V0IHV0aWxpdGllcyAqL1xcbi5oaWRkZW4ge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmU7XFxufVxcblxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY29sdW1uLXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG5cXG4ucm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5yb3ctcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5mbGV4LXdyYXAge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG5cXG4uZmxleC13cmFwLXJldmVyc2Uge1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcblxcbi5mbGV4LW5vLXdyYXAge1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcblxcbi5mbGV4LXNocmluayB7XFxuICBmbGV4LXNocmluazogMTtcXG59XFxuXFxuLmZsZXgtbm8tc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uZmxleC1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZsZXgtbm8tZ3JvdyB7XFxuICBmbGV4LWdyb3c6IDA7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtc3RhcnQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWVuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1iZXR3ZWVuIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1jZW50ZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LXN0YXJ0IHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWVuZCB7XFxuICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtY2VudGVyIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RyZXRjaCB7XFxuICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdGFydCB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1lbmQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1jZW50ZXIge1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcblxcbi5idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxhcmdlKTtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpIDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeTplbmFibGVkOmZvY3VzLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLXJlZCk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmRpc2FibGVkLCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmUge1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmNoZWNrYm94IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiB1bmNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG5cXHRcXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aGl0ZSk7XFxuXFx0ICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG5cXHR9Ki9cXG4gIC8qIGNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmNoZWNrZWQ6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IC0xcHggMTBweCAwIC04cHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA4JTIwNyUyMiUyMHdpZHRoJTNEJTIyOCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEuMTc2NDclMjAxLjg4MjM2JTIwMS44ODIzNSUyMDEuODgyMzYlMjAzLjc2NDcxLTMuNzY0NzIlMjAxLjE3NjQ3JTIwMS4xNzY0OC00Ljk0MTE4JTIwNC45NDEyLTMuMDU4ODItMy4wNTg4NHolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDFweCAycHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zaWx2ZXIpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgOHB4IDAgMjRweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDhweDtcXG4gIGxlZnQ6IDRweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtMTElMjA4LTQtM3Y2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWw6aG92ZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1zZWN0aW9uIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLWV4cGFuZGVkIC5kaXNjbG9zdXJlX19jb250ZW50IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtOSUyMDEwJTIwMy00aC02eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTJweCAtMXB4O1xcbn1cXG5cXG4uaWNvbi0tc3BpbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcm90YXRpbmcge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG4uaWNvbi0tYmx1ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDU0JSkgc2VwaWEoMTYlKSBzYXR1cmF0ZSg3NDk5JSkgaHVlLXJvdGF0ZSgxNzlkZWcpIGJyaWdodG5lc3MoOTglKSBjb250cmFzdCgxMDElKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG59XFxuXFxuLmljb24tLXB1cnBsZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3MiUpIHNlcGlhKDQwJSkgc2F0dXJhdGUoNjYwJSkgaHVlLXJvdGF0ZSgyMDJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG59XFxuXFxuLmljb24tLWhvdC1waW5rIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG59XFxuXFxuLmljb24tLWdyZWVuIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNjYlKSBzZXBpYSgzOSUpIHNhdHVyYXRlKDUzODIlKSBodWUtcm90YXRlKDExNGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCg3OSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxufVxcblxcbi5pY29uLS1yZWQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDMlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDU2MzIlKSBodWUtcm90YXRlKDM0OWRlZykgYnJpZ2h0bmVzcyg5NyUpIGNvbnRyYXN0KDk1JSk7XFxufVxcblxcbi5pY29uLS15ZWxsb3cge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzglKSBzZXBpYSg4NiUpIHNhdHVyYXRlKDE2MDglKSBodWUtcm90YXRlKDFkZWcpIGJyaWdodG5lc3MoMTA3JSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pY29uLS1ibGFjayB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDI1JSkgaHVlLXJvdGF0ZSgxMzdkZWcpIGJyaWdodG5lc3MoMTA1JSkgY29udHJhc3QoNjAlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2szIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg2OTglKSBodWUtcm90YXRlKDIxOWRlZykgYnJpZ2h0bmVzcyg2NiUpIGNvbnRyYXN0KDEyNyUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLXdoaXRlOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbn1cXG5cXG4uaWNvbi0tYWRqdXN0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEyIDE2LjA1VjloMXY3LjA1YTIuNSAyLjUgMCAwMTAgNC45VjIzaC0xdi0yLjA1YTIuNSAyLjUgMCAwMTAtNC45em0yIDIuNDVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTE5IDIzaDF2LTcuMDVhMi41IDIuNSAwIDAwMC00LjlWOWgtMXYyLjA1YTIuNSAyLjUgMCAwMDAgNC45em0yLTkuNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxlcnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjI1IDE3LjM5M2ExLjc1IDEuNzUgMCAwMDEuNzUgMS43NVYyMEg5di0uODU3YTEuNzUgMS43NSAwIDAwMS43NS0xLjc1VjE0YzAtMy4zMTQgMi4zNS02IDUuMjUtNnM1LjI1IDIuNjg2IDUuMjUgNnptLTEtMy4zOTN2My4zOTNjMCAuNi4xOTIgMS4xNTUuNTE4IDEuNjA3aC05LjUzNmEyLjczOCAyLjczOCAwIDAwLjUxOC0xLjYwN1YxNGMwLTIuODkxIDIuMDI0LTUgNC4yNS01czQuMjUgMi4xMDkgNC4yNSA1eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xNiAyM2EyIDIgMCAwMS0yLTJoLTFhMyAzIDAgMTA2IDBoLTFhMiAyIDAgMDEtMiAyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbmdsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIgMTJ2OGg4di0xaC0zYTQgNCAwIDAwLTQtNHYtM3ptMSA0djNoM2EzIDMgMCAwMC0zLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXJyb3ctbGVmdC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyLjIwNyAxNi41bDEuNjQ3IDEuNjQ2LS43MDcuNzA4TDEwLjI5MyAxNmwyLjg1NC0yLjg1NC43MDcuNzA4LTEuNjQ3IDEuNjQ2aDcuNTg2bC0xLjY0Ni0xLjY0Ni43MDctLjcwOEwyMS43MDcgMTZsLTIuODUzIDIuODU0LS43MDctLjcwOCAxLjY0Ni0xLjY0NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdXAtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDEwLjI5MmwyLjg1NCAyLjg1NC0uNzA3LjcwNy0xLjY0Ni0xLjY0NnY3LjU4NWwxLjY0Ni0xLjY0Ni43MDcuNzA3LTIuODUzIDIuODU0LTIuODU0LTIuODU0LjcwNy0uNzA3IDEuNjQ3IDEuNjQ2di03LjU4NWwtMS42NDcgMS42NDYtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hdXRvLWxheW91dC1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGg1djEyaC01em0xIDFoM3YxMGgtM3ptNi0xaDV2MTJoLTV6bTEgMWgzdjEwaC0zeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnY1SDEwem0xIDFoMTB2M0gxMXptLTEgNmgxMnY1SDEwem0xIDFoMTB2M0gxMXonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1iYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy43MDcgMTZsNC42NDYtNC42NDYtLjcwNy0uNzA3TDEyLjI5MyAxNmw1LjM1MyA1LjM1NC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ibGVuZC1lbXB0eSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYuNjk1IDExLjcybC0uNjkzLS43MThMMTYgMTFsLS4wMDEuMDAyLS42OTQuNzE4QzEzLjEwMiAxNC4wMTIgMTIgMTUuMjk0IDEyIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAwMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMDUuNjU2IDBBNC4xOTkgNC4xOTkgMCAwMDIwIDE2Ljg1MmMwLTEuNTU4LTEuMTAyLTIuODQtMy4zMDUtNS4xMzJ6bS0uNjk1LjcyYy0uOTc3IDEuMDE3LTEuNjkzIDEuNzktMi4xOTUgMi40NzEtLjYuODE0LS44MDUgMS4zOC0uODA1IDEuOTR2LjAwM2EzLjIgMy4yIDAgMDAuODkgMi4yMzkgMi45MDYgMi45MDYgMCAwMDQuMjIgMCAzLjIgMy4yIDAgMDAuODktMi4yMzl2LS4wMDJjMC0uNTYtLjIwNS0xLjEyNy0uODA1LTEuOTQtLjUwMi0uNjgxLTEuMjE5LTEuNDU1LTIuMTk1LTIuNDcyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi4wMDIgMTEuMDAybC42OTMuNzE4QzE4Ljg5OCAxNC4wMTIgMjAgMTUuMjk0IDIwIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAxLTEuMTcyIDIuOTM2IDMuOTA2IDMuOTA2IDAgMDEtNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAxMTIgMTYuODUyYzAtMS41NTggMS4xMDItMi44NCAzLjMwNS01LjEzMmwuNjk0LS43MTl6bS0yLjE5NyAzLjkxYy41MDItLjY4MSAxLjIxOS0xLjQ1NSAyLjE5NS0yLjQ3Mi45NzYgMS4wMTcgMS42OTMgMS43OSAyLjE5NSAyLjQ3MS42LjgxNC44MDUgMS4zOC44MDUgMS45NHYuMDAzYzAgLjA0OSAwIC4wOTgtLjAwMy4xNDZoLTUuOTk0YTMuMzcgMy4zNyAwIDAxLS4wMDMtLjE0NnYtLjAwMmMwLS41Ni4yMDUtMS4xMjcuODA1LTEuOTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYnJlYWsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgb3BhY2l0eT0nLjknJTNFJTNDcGF0aCBkPSdNMTMgOXYzaDFWOXpNMjIuMTAzIDkuODk2YTIuOTc1IDIuOTc1IDAgMDAtNC4yMDcgMGwtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTEuOTc1IDEuOTc1IDAgMDEyLjc5MyAyLjc5M2wtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTIuOTc1IDIuOTc1IDAgMDAwLTQuMjA3ek05Ljg5NiAyMi4xMDRhMi45NzUgMi45NzUgMCAwMTAtNC4yMDhsMi43NS0yLjc1LjcwNy43MDctMi43NSAyLjc1YTEuOTc1IDEuOTc1IDAgMDAyLjc5MyAyLjc5M2wyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMi45NzUgMi45NzUgMCAwMS00LjIwNyAwek0yMyAxOWgtM3YtMWgzek0xOSAyMHYzaC0xdi0zek0xMiAxM0g5djFoM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE4bDMtNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzIDE2bDQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE5IDE2bC00LTN2NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNGwzIDRoLTZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNoZWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS4yMDcgMTMuNzA3TDE1IDE5LjkxNGwtMy43MDctMy43MDcgMS40MTQtMS40MTRMMTUgMTcuMDg2bDQuNzkzLTQuNzkzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNsb3NlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTUuMjkzbDQuNjQ2LTQuNjQ2LjcwOC43MDdMMTYuNzA3IDE2bDQuNjQ3IDQuNjQ3LS43MDcuNzA3TDE2IDE2LjcwN2wtNC42NDYgNC42NDctLjcwNy0uNzA3TDE1LjI5MyAxNmwtNC42NDYtNC42NDYuNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvbXBvbmVudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIuMDYzIDEwLjkzOEwxNiAxNC44NzRsMy45MzgtMy45MzhMMTYgN3ptNi40NiAwTDE2IDEzLjQ2bC0yLjUyMy0yLjUyNEwxNiA4LjQxNXptLTYuNDYgMTAuMTI0TDE2IDI1bDMuOTM4LTMuOTM4TDE2IDE3LjEyNXptNi40NiAwTDE2IDIzLjU4N2wtMi41MjMtMi41MjNMMTYgMTguNTM4ek03IDE2bDMuOTM3LTMuOTM4TDE0Ljg3NSAxNmwtMy45MzggMy45Mzh6bTMuOTM3IDIuNTIzTDEzLjQ2MSAxNmwtMi41MjQtMi41MjNMOC40MTUgMTZ6TTE3LjEyNSAxNmwzLjkzOCAzLjkzOEwyNSAxNmwtMy45MzgtMy45Mzh6bTYuNDYgMGwtMi41MjMgMi41MjNMMTguNTQgMTZsMi41MjMtMi41MjN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29ybmVyLXJhZGl1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEgMTNoLTRhNCA0IDAgMDAtNCA0djRoLTF2LTRhNSA1IDAgMDE1LTVoNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAxMWgzdjFoLTJ2MmgtMXptNyAwaDN2M2gtMXYtMmgtMnptLTYgOXYtMmgtMXYzaDN2LTF6bTktMnYzaC0zdi0xaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZGlzdHJpYnV0ZS1ob3Jpem9udGFsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMSAyMi41di0xM2gtMXYxM3pNMjIgOS41djEzaC0xdi0xM3pNMTcgMTIuNXY3aC0ydi03eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLXZlcnRpY2FsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005LjUgMTBoMTN2MWgtMTN6TTEyLjUgMTVoN3YyaC03ek0yMi41IDIxaC0xM3YxaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kcmFmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgOC41aDcuNzA3TDIyIDEyLjc5M1YyMy41SDEwem0xIDF2MTNoMTB2LTloLTR2LTR6bTcgLjcwN2wyLjI5MyAyLjI5M0gxOHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1lZmZlY3RzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYuNSA4LjVoLTF2M2gxek0xMS4wNSAxMC4zNDNsLS43MDcuNzA3IDIuMTIxIDIuMTIyLjcwOC0uNzA4ek0yMS42NTcgMTEuMDVsLS43MDctLjcwNy0yLjEyMSAyLjEyMS43MDcuNzA4ek04LjUgMTUuNXYxaDN2LTF6TTIwLjUgMTUuNXYxaDN2LTF6TTEzLjE3MiAxOS41MzVsLS43MDgtLjcwNy0yLjEyIDIuMTIyLjcwNi43MDd6TTE5LjUzNSAxOC44MjhsLS43MDcuNzA3IDIuMTIyIDIuMTIyLjcwNy0uNzA3ek0xNi41IDIwLjVoLTF2M2gxeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC40OTggMTUuOTk4YTIuNSAyLjUgMCAxMS01IDAgMi41IDIuNSAwIDAxNSAwem0tMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVsbGlwc2VzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS41IDE2YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwem02IDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTQuNSAxLjVhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1leWVkcm9wcGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIuNDQ3IDkuNmMtLjgtLjgtMi0uOC0yLjggMGwtMi44IDIuOC0uOC0uN2MtLjQtLjQtMS0uNC0xLjQgMHMtLjQgMSAwIDEuNGwuNy43LTUuOCA1LjhjLS40LjQtMSAxLjkgMCAyLjlzMi41LjQgMi45IDBsNS44LTUuOC43LjdjLjQuNCAxIC40IDEuNCAwcy40LTEgMC0xLjRsLS43LS43IDIuOC0yLjhjLjgtLjkuOC0yLjEgMC0yLjl6bS0xMC45IDExLjloLTF2LTFsNS44LTUuOCAxIDFjLS4xIDAtNS44IDUuOC01LjggNS44eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1mb3J3YXJkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNy45NCAxNmwtNC42NDctNC42NDYuNzA3LS43MDdMMTkuMzU0IDE2IDE0IDIxLjM1NGwtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZyYW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAyNHYtM0g4di0xaDN2LThIOHYtMWgzVjhoMXYzaDhWOGgxdjNoM3YxaC0zdjhoM3YxaC0zdjNoLTF2LTNoLTh2M3ptOS00di04aC04djh6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZ3JvdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNy40IDloLTIuOHYxaDIuOHpNMjAuOSAyMkgyMnYtMS4xaDFWMjNoLTIuMXpNMTAgMTQuNnYyLjhIOXYtMi44ek0yMiAxMS4xVjEwaC0xLjFWOUgyM3YyLjF6TTIyIDE0LjZ2Mi44aDF2LTIuOHpNMTAgMTEuMVYxMGgxLjFWOUg5djIuMXpNOSAyMC45aDFWMjJoMS4xdjFIOXpNMTcuNCAyMmgtMi44djFoMi44eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oaWRkZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjUwOSAxNS44MDFBOC4wMzMgOC4wMzMgMCAwMDIyLjkyOCAxNGgtMS4xODRBNi45OTIgNi45OTIgMCAwMTE2IDE3YTYuOTkyIDYuOTkyIDAgMDEtNS43NDUtM0g5LjA3YTguMDMzIDguMDMzIDAgMDAxLjQyMSAxLjgwMWwtMS41OTUgMS41OTUuNzA4LjcwNyAxLjY1Ny0xLjY1N2MuNzEuNTIzIDEuNTExLjkzMiAyLjM3NCAxLjE5OWwtLjYxNyAyLjIyMS45NjQuMjY4LjYyNi0yLjI1NWE4LjA1MSA4LjA1MSAwIDAwMi43ODQgMGwuNjI2IDIuMjU1Ljk2NC0uMjY4LS42MTctMi4yMjFhNy45NzEgNy45NzEgMCAwMDIuMzc0LTEuMmwxLjY1OCAxLjY1OC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ob3Jpem9udGFsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDl2MTRoMVY5em0xMyAwdjE0aDFWOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTl2LTZoNnY2em0tMS03aDh2OGgtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oeXBlcmxpbmsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMC44MjQgMTQuNDkybC0xLjY1NyAxLjY1Ny44MjguODI5IDEuNjU4LTEuNjU3YTMuNTE3IDMuNTE3IDAgMDAtNC45NzMtNC45NzNsLTEuNjU3IDEuNjU4LjgyOS44MjggMS42NTctMS42NTdhMi4zNDUgMi4zNDUgMCAwMTMuMzE1IDMuMzE1em0tNC45NzQgNC45NzJsLjgyOS44MjktMS42NTggMS42NTdhMy41MTYgMy41MTYgMCAxMS00Ljk3Mi00Ljk3MmwxLjY1OS0xLjY1OC44MjguODI5LTEuNjU2IDEuNjU3YTIuMzQzIDIuMzQzIDAgMTAzLjMxNSAzLjMxNWwxLjY1Ny0xLjY1N3ptMi4wNzItNi4yMTZsLTQuOTcyIDQuOTczLjgyOC44MjkgNC45NzMtNC45NzN6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWltYWdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMiAxMEgxMHY3Ljc5M2wzLjA4My0zLjA4MyA3LjI5IDcuMjlIMjJ6TTEwIDIydi0yLjc5M2wzLjA4My0zLjA4M0wxOC45NiAyMnptMC0xM2ExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xem05LjY2NyA0LjY2N2ExLjMzMyAxLjMzMyAwIDExLTIuNjY3IDAgMS4zMzMgMS4zMzMgMCAwMTIuNjY3IDB6bTEgMGEyLjMzMyAyLjMzMyAwIDExLTQuNjY3IDAgMi4zMzMgMi4zMzMgMCAwMTQuNjY3IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW5zdGFuY2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDdsOSA5LTkgOS05LTl6bS03LjU4NiA5TDE2IDIzLjU4NiAyMy41ODYgMTYgMTYgOC40MTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0ta2V5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNCAyMC4xNGEzLjAxNCAzLjAxNCAwIDAwLjMzMS0zLjg2OGwyLjA0Ny0yLjA0NyAxLjc2NyAxLjc2N2EuNS41IDAgMTAuNzA3LS43MDdsLTEuNzY3LTEuNzY3IDEuMjkzLTEuMjkzIDEuNzg0IDEuNzg0YS41LjUgMCAxMC43MDctLjcwN2wtMS43ODQtMS43ODQuNzYyLS43NjFhLjUuNSAwIDAwLS43MDctLjcwOGwtNS41MTMgNS41MTNhMy4wMTQgMy4wMTQgMCAxMC4zNzMgNC41Nzh6bS0uNzEyLS43MTJhMi4wMDYgMi4wMDYgMCAxMC0yLjgzNy0yLjgzNyAyLjAwNiAyLjAwNiAwIDAwMi44MzcgMi44Mzd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWFsaWduLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNSAxMHYxMGgtMlYxMHptOCAxMnYxaC0xM3YtMXptLTMtMnYtNmgtMnY2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWhvcml6b250YWwtY2VudGVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2LjUgOS41aC0xdjNoLTV2Mmg1djNoLTN2MmgzdjNoMXYtM2gzdi0yaC0zdi0zaDV2LTJoLTV6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41SDl2LTEzaDF6TTIyIDE0LjVIMTJ2LTJoMTB6TTEyIDE5LjVoNnYtMmgtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMiAyMi41aDF2LTEzaC0xek0xMCAxNC41aDEwdi0ySDEwek0yMCAxOS41aC02di0yaDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXRvcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0LjUgMjJWMTJoLTJ2MTB6TTIyLjUgMTBWOWgtMTN2MXpNMTkuNSAxMnY2aC0ydi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi12ZXJ0aWNhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuNSAxNS41di01aDJ2NWgzdi0zaDJ2M2gzdjFoLTN2M2gtMnYtM2gtM3Y1aC0ydi01aC0zdi0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1jb2x1bW5zIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2MTRIOXpNMTQuNSA5aDN2MTRoLTN6TTIwIDloM3YxNGgtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtcm93cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYzSDl6TTkgMTQuNWgxNHYzSDl6TTkgMjBoMTR2M0g5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC11bmlmb3JtIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2M0g5ek0yMCA5aDN2M2gtM3pNMTQuNSA5aDN2M2gtM3pNOSAxNC41aDN2M0g5ek0yMCAxNC41aDN2M2gtM3pNMTQuNSAxNC41aDN2M2gtM3pNOSAyMGgzdjNIOXpNMjAgMjBoM3YzaC0zek0xNC41IDIwaDN2M2gtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlicmFyeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMzczIDIyaDEuMjU4Yy4yOC0uMzIuNjE2LS41OTcuOTk1LS44MTkgMS40NzgtLjg2MiA0LjAwNS0uOTA5IDUuMzg2LjEwOUgyNC41di05LjJzLS43OTctMi4yNS00LjQyLTIuMjVjLTEuODc1IDAtMi45MDIuNjAyLTMuNDU2IDEuMTg0YTIuNTY4IDIuNTY4IDAgMDAtLjYuOTc2aC0uMDQ4YTIuNTY5IDIuNTY5IDAgMDAtLjYtLjk3NmMtLjU1NC0uNTgyLTEuNTgxLTEuMTg0LTMuNDU2LTEuMTg0LTMuNjIzIDAtNC40MiAyLjI1LTQuNDIgMi4yNXY5LjE5aDEuNDg4YzEuMzgyLTEuMDE5IDMuOTEtLjk3IDUuMzg4LS4xMDUuMzguMjIzLjcxNy41MDMuOTk3LjgyNXptMS4xMjctOS43MTF2OC40NTdjLjE5NS0uMTU3LjQwMy0uMy42MjItLjQyOC45MjctLjU0MSAyLjExNS0uNzk2IDMuMjQxLS43ODcgMS4wMDYuMDA4IDIuMDgxLjIyNyAyLjk1Mi43NTloLjE4NXYtNy45NzNhMi40MTQgMi40MTQgMCAwMC0uNTA1LS41OTVjLS40Ni0uMzk3LTEuMzMtLjg4Mi0yLjkxNS0uODgyLTEuNTg2IDAtMi4zNC40ODMtMi42OTUuODM1YTEuNzQ5IDEuNzQ5IDAgMDAtLjM1My40OSAxLjA3NiAxLjA3NiAwIDAwLS4wNTIuMTMxbC0uMDA1LjAxNy4wMDEtLjAwNi4wMDItLjAwOHYtLjAwNWwuMDAxLS4wMDJ2LS4wMDJsLS4wMDUtLjAwMXptLTEgMGgtLjQ3NGwtLjAwNi4wMDF2LjAwMmwuMDAxLjAwMi4wMDEuMDA1LjAwMi4wMDguMDAxLjAwNi0uMDA1LS4wMTdhMS4wNzYgMS4wNzYgMCAwMC0uMDUzLS4xMzEgMS43NDkgMS43NDkgMCAwMC0uMzUzLS40OWMtLjM1NC0uMzUxLTEuMTA4LS44MzUtMi42OTQtLjgzNS0xLjU4NSAwLTIuNDU1LjQ4NS0yLjkxNi44ODJhMi40MTEgMi40MTEgMCAwMC0uNTA0LjU5NXY3Ljk2M2guMTg1Yy44NzItLjUzMiAxLjk0OC0uNzUyIDIuOTU0LS43NTkgMS4xMjgtLjAwOCAyLjMxNi4yNDkgMy4yNDMuNzkyLjIxNy4xMjcuNDI0LjI3LjYxOC40MjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGluay1icm9rZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOCAxNHYtMmEyIDIgMCAxMC00IDB2MmgtMXYtMmEzIDMgMCAxMTYgMHYyek0xOSAxOGgtMXYyYTIgMiAwIDExLTQgMHYtMmgtMXYyYTMgMyAwIDEwNiAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWNvbm5lY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDEwYTIgMiAwIDAxMiAydjJoMXYtMmEzIDMgMCAxMC02IDB2Mmgxdi0yYTIgMiAwIDAxMi0yek0xOCAxOGgxdjJhMyAzIDAgMTEtNiAwdi0yaDF2MmEyIDIgMCAxMDQgMHonLyUzRSUzQ3BhdGggZD0nTTE1LjUgMTN2Nmgxdi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LWRldGFpbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTIgMTBoLTJ2MWgyek0xMiAyMGgtMnYxaDJ6TTEwIDE1aDJ2MWgtMnpNMjIgMTBoLTh2MWg4ek0xNCAyMGg4djFoLTh6TTIyIDE1aC04djFoOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdC10aWxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNCAxMWgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6bS0zIDhoLTN2M2gzem0tNC0xdjVoNXYtNXptMTEgMWgtM3YzaDN6bS00LTF2NWg1di01eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgZmlsbC1vcGFjaXR5PScuOCclM0UlM0NwYXRoIGQ9J00yMyAxMEg5djFoMTR6TTkgMTUuNWgxNHYxSDl6TTkgMjFoMTR2MUg5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE4IDE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjVIMTd2LTIuNWEyLjUgMi41IDAgMDE1IDBWMTRoLTF2LTEuNWExLjUgMS41IDAgMDAtMyAweicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy41IDE1di0xLjVhMi41IDIuNSAwIDAxNSAwVjE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjV6bTQtMS41VjE1aC0zdi0xLjVhMS41IDEuNSAwIDAxMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLW1pbnVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjEuNSAxNi41aC0xMXYtMWgxMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGxheSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTAuMDk4TDIyLjQ0MyAxNiAxMyAyMS45MDJ6bTEgMS44MDR2OC4xOTZMMjAuNTU3IDE2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXBsdXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNS41IDE1LjV2LTVoMXY1aDV2MWgtNXY1aC0xdi01aC01di0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yYW5kb20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjExOCAxMWEyLjUgMi41IDAgMDAtMS4zMzUuMzg2TDExLjIyOCAxM0gxOC41djFoLTguNDk3YS41MTIuNTEyIDAgMDAtLjAwMy4wNTFWMjAuNWMwIC4yNzguMjIzLjUuNDk3LjVoNy42MjhhLjQ5OC40OTggMCAwMC4zMjgtLjEyM2wzLjIwNi0yLjgwNWExIDEgMCAwMC4zNDEtLjc1M1YxMS41YS41LjUgMCAwMC0uNS0uNXptLTEuODY5LS40NmEzLjUgMy41IDAgMDExLjg3LS41NEgyMS41YTEuNSAxLjUgMCAwMTEuNSAxLjV2NS44MmEyIDIgMCAwMS0uNjgzIDEuNTA0bC0zLjIwNSAyLjgwNWMtLjI3NC4yNC0uNjI0LjM3MS0uOTg3LjM3MWgtNy42MjdDOS42NjggMjIgOSAyMS4zMjcgOSAyMC41di02LjQ0OWExLjUgMS41IDAgMDEuNjk5LTEuMjY4eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMyAxNmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTE3IDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTlhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xMyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6Jy8lM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTIyLjQwNyAxMC43MWEuNS41IDAgMDEtLjExNi42OTdsLTMuNSAyLjVhLjUuNSAwIDAxLS41ODItLjgxNGwzLjUtMi41YS41LjUgMCAwMS42OTguMTE2eicvJTNFJTNDcGF0aCBkPSdNMTggMjF2LThoMXY4eicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlY2VudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE1IDEydjVoNXYtMWgtNHYtNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzaXplLXRvLWZpdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTguNjQ2IDkuMzU0TDEyLjI5MyAxM0gxMHYxaDR2LTRoLTF2Mi4yOTNMOS4zNTQgOC42NDZ6TTE5LjcwNyAxM2wzLjY0Ny0zLjY0Ni0uNzA3LS43MDhMMTkgMTIuMjkzVjEwaC0xdjRoNHYtMXpNMTkuNzA3IDE5bDMuNjQ3IDMuNjQ2LS43MDcuNzA4TDE5IDE5LjcwN1YyMmgtMXYtNGg0djF6TTEyLjI5MyAxOWwtMy42NDcgMy42NDYuNzA4LjcwOEwxMyAxOS43MDdWMjJoMXYtNGgtNHYxeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNvbHZlLWZpbGxlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMjRhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy45MTEtOS42MzVsLS44MjItLjczLTMuNjEzIDQuMDY0LTIuNTg3LTIuNTg4LS43NzguNzc4IDMuNDEzIDMuNDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOS45MTEgMTQuMzY1bC0uODIyLS43My0zLjYxMyA0LjA2My0yLjU4Ny0yLjU4Ny0uNzc4Ljc3OCAzLjQxMyAzLjQxMnonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmV2ZXJzZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuODU0IDguNjQ2TDE4LjIwNyAxMWwtMi4zNTMgMi4zNTQtLjcwOC0uNzA4IDEuMTQ3LTEuMTQ2SDE0Yy0uNTAzIDAtMS4yNy4xNTUtMS44OTUuNjA2LS42LjQzMi0xLjEwNSAxLjE1Ny0xLjEwNSAyLjM5NHY3LjI1aC0xVjE0LjVjMC0xLjU2My42NjItMi41ODggMS41Mi0zLjIwNi44MzMtLjYgMS44MTctLjc5NCAyLjQ4LS43OTRoMi4yOTNsLTEuMTQ3LTEuMTQ2ek0yMiAxMHY3LjI1YzAgMS41NjMtLjY2MiAyLjU4OC0xLjUyIDMuMjA2LS44MzMuNi0xLjgxNy43OTQtMi40OC43OTRoLTIuMjkzbDEuMTQ3IDEuMTQ2LS43MDguNzA4LTIuMzUzLTIuMzU0IDIuMzUzLTIuMzU0LjcwOC43MDgtMS4xNDcgMS4xNDZIMThjLjUwMyAwIDEuMjctLjE1NSAxLjg5NS0uNjA2LjYtLjQzMiAxLjEwNS0xLjE1NyAxLjEwNS0yLjM5NFYxMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZWFyY2gtbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4Ljg3NCAxOS41ODFhNiA2IDAgMTEuNzA3LS43MDdsNC4yNzMgNC4yNzItLjcwOC43MDh6TTIwIDE1YTUgNSAwIDExLTEwIDAgNSA1IDAgMDExMCAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguMzk3IDE4LjYwNWE0LjU1MiA0LjU1MiAwIDExLjcwNy0uNzA3bDMuMjUgMy4yNDktLjcwOC43MDd6bS43MDYtMy41NTNhMy41NTIgMy41NTIgMCAxMS03LjEwMyAwIDMuNTUyIDMuNTUyIDAgMDE3LjEwMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNldHRpbmdzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTE2Ljk1NCA5LjkyOGwtLjEzOS0uMzMxQzE2LjYzNSA5LjE2NSAxNi4zMDEgOSAxNiA5cy0uNjM1LjE2NS0uODE1LjU5N2wtLjEzOS4zMzFjLS41NiAxLjM0My0xLjk5MiAyLjEzLTMuNDI1IDEuNzJsLS41LS4xNDRjLS4zMDktLjA4OC0uNjA2LjAyNS0uODE1LjMyN2ExLjA1IDEuMDUgMCAwMC0uMDQ5IDEuMTIzYy43NDMgMS4zMjMuNDAyIDMuMDY4LS44NiAzLjk1LS4zMTguMjIyLS40NTYuNjE0LS4zNzUgMS4wMjQuMDgxLjQwOS4zNDIuNjY4LjY3My43MjNsLjE5NS4wMzNjMS41MjUuMjUzIDIuNTEgMS42ODcgMi40MjMgMy4xOC0uMDMuNTAzLjIyLjg2MS41MiAxLjAyOC4yODguMTYxLjYyMy4xNTUuOTIxLS4xMDhsLjM3My0uMzNhMi44IDIuOCAwIDAxMy43NDYgMGwuMzczLjMzYy4yOTguMjY0LjYzMy4yNy45MjIuMTA4LjMtLjE2Ny41NDktLjUyNS41Mi0xLjAyOC0uMDg4LTEuNDkzLjg5Ny0yLjkyNyAyLjQyMy0zLjE4bC4xOTQtLjAzM2MuMzMtLjA1NS41OTItLjMxNC42NzMtLjcyMy4wODEtLjQxLS4wNTctLjgwMi0uMzc1LTEuMDI0LTEuMjYyLS44ODItMS42MDMtMi42MjctLjg2LTMuOTVhMS4wNSAxLjA1IDAgMDAtLjA1LTEuMTIzYy0uMjA4LS4zMDItLjUwNS0uNDE1LS44MTUtLjMyN2wtLjQ5OS4xNDNjLTEuNDMzLjQxLTIuODY1LS4zNzYtMy40MjUtMS43MTl6bS43ODQtLjcxN2MtLjY3NC0xLjYxNS0yLjgwMi0xLjYxNS0zLjQ3NiAwbC0uMTM4LjMzMmMtLjM4My45MTctMS4zMjYgMS40MDEtMi4yMjggMS4xNDNsLS40OTktLjE0M2MtMS41NzUtLjQ1LTIuODU1IDEuMzk4LTIuMDEyIDIuOS41MDUuOS4yNTcgMi4wNy0uNTYgMi42NC0xLjM5Mi45NzMtLjkzMyAzLjI4Mi43MDYgMy41NTVsLjE5NS4wMzJjLjk2LjE2IDEuNjUgMS4wOSAxLjU4OCAyLjEzNS0uMTA0IDEuNzg4IDEuODIgMi44NjQgMy4xMDMgMS43MjdsLjM3My0uMzNhMS44IDEuOCAwIDAxMi40MiAwbC4zNzMuMzNjMS4yODQgMS4xMzcgMy4yMDcuMDYxIDMuMTAzLTEuNzI3LS4wNjEtMS4wNDYuNjI4LTEuOTc1IDEuNTg5LTIuMTM1bC4xOTQtLjAzMmMxLjYzOS0uMjczIDIuMDk4LTIuNTgyLjcwNy0zLjU1NC0uODE4LS41NzItMS4wNjYtMS43NDItLjU2MS0yLjY0Ljg0My0xLjUwMy0uNDM3LTMuMzUyLTIuMDEyLTIuOTAxbC0uNS4xNDNjLS45LjI1OC0xLjg0NC0uMjI2LTIuMjI2LTEuMTQzeicvJTNFJTNDcGF0aCBkPSdNMTYgMTguNWEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHptMCAxYTMgMyAwIDEwMC02IDMgMyAwIDAwMCA2eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zaGFyZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAgOS41YTMuNSAzLjUgMCAwMC0xLjM4MyA2LjcxNkE0LjUxMyA0LjUxMyAwIDAwMTYgMTguNDM2YTQuNTEzIDQuNTEzIDAgMDAtMi42MTgtMi4yMiAzLjUwMSAzLjUwMSAwIDEwLTIuNzY0IDBBNC41MDIgNC41MDIgMCAwMDcuNSAyMC41VjIyaDE3di0xLjVjMC0yLjAwMy0xLjMwOS0zLjctMy4xMTgtNC4yODRBMy41MDEgMy41MDEgMCAwMDIwIDkuNXpNMTcuNSAxM2EyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHptLTEgOHYtLjVhMy41IDMuNSAwIDExNyAwdi41em0tMS0uNXYuNWgtN3YtLjVhMy41IDMuNSAwIDExNyAwem0tNi03LjVhMi41IDIuNSAwIDExNSAwIDIuNSAyLjUgMCAwMS01IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc21pbGV5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMjBhNC4wMDIgNC4wMDIgMCAwMS0zLjg3NC0zaDEuMDQ1YTMuMDAxIDMuMDAxIDAgMDA1LjY1OCAwaDEuMDQ1QTQuMDAyIDQuMDAyIDAgMDExNiAyMHpNMTkuNSAxNC4xMjVhLjg3NS44NzUgMCAxMS0xLjc1IDAgLjg3NS44NzUgMCAwMTEuNzUgMHpNMTMuMTI1IDE1YS44NzUuODc1IDAgMTAwLTEuNzUuODc1Ljg3NSAwIDAwMCAxLjc1eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LWFscGhhLWFzYyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMC44OTcgOUw5IDE0aDEuMDdsLjM3OS0xaDIuMTMzbC4zMzggMWgxLjA1NmwtMS42OS01em0xLjM0NyAzbC0uNjY3LTEuOTczTDEwLjgyOCAxMnpNMTIuNTUzIDE5SDkuNXYtMUgxNHYuOTc5TDEwLjkzMiAyMkgxNHYxSDkuNXYtLjk5M3pNMjAuNSA4LjI5M2wzLjM1NCAzLjM1My0uNzA4LjcwOEwyMSAxMC4yMDdWMjNoLTFWMTAuMjA3bC0yLjE0NiAyLjE0Ny0uNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtZHNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMCAyMS43OTNWOWgxdjEyLjc5M2wyLjE0Ni0yLjE0Ny43MDguNzA4LTMuMzU0IDMuMzUzLTMuMzU0LTMuMzUzLjcwOC0uNzA4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LXRvcC1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIwLjQ1IDEySDEwdi0xaDEwLjQ1Yy45NyAwIDEuMzcyIDEuMjQ0LjU4NCAxLjgxMkwxMS4wNSAyMGg5LjI0M2wtMS42NDctMS42NDYuNzA4LS43MDggMi44NTMgMi44NTQtMi44NTMgMi44NTQtLjcwOC0uNzA4TDIwLjI5MyAyMUgxMS4wNWMtLjk3IDAtMS4zNzItMS4yNDQtLjU4NC0xLjgxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIgMTFoLTJ2MTBoMnYxaC0zVjEwaDN6bS0xMC0xdjEySDl2LTFoMlYxMUg5di0xem00IDNoLTF2NmgxeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNjUgOC41M2EuNS41IDAgMDEtLjQwNC41OEE3IDcgMCAxMDIzIDE2YS41LjUgMCAwMTEgMCA4IDggMCAxMS05LjQxNi03Ljg3NC41LjUgMCAwMS41OC40MDR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vZmYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4IDE0LjAwNEwxNiA4bC0yIDYuMDA0SDhMMTIuOTYgMThsLTEuOTA0IDZMMTYgMjBsNC45NDQgNC0xLjkwNC02TDI0IDE0em0zLjE2NS45OThsLTMuODg2LjAwMkwxNiAxMS4xNjRsLTEuMjggMy44NGgtMy44ODVsMy4yODUgMi42NDYtMS4xMDMgMy40NzdMMTYgMTguNzE0bDIuOTgzIDIuNDEzLTEuMTAzLTMuNDc2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0YXItb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiA4bDIgNi4wMDRMMjQgMTRsLTQuOTYgNCAxLjkwNCA2TDE2IDIwbC00Ljk0NCA0IDEuOTA0LTZMOCAxNC4wMDRoNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Ryb2tlLXdlaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoMTJ2MUgxMHptMCA0aDEydjJIMTB6bTEyIDVIMTB2M2gxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHlsZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMS41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xNy41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xOSAyMC41YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6TTExLjUgMTlhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN3YXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMyAxMy4xODhsLTEuMTc1IDEuNDY4YTUuNSA1LjUgMCAwMC0xMC4wMDMtMi4yMTlsLjgzLjU1N2E0LjUgNC41IDAgMDE4LjIxNiAyLjA1N2wtMi4yLTEuNDY3LS41NTUuODMyIDMuMzgxIDIuMjU0IDIuMjg3LTIuODU4ek05IDE3LjE4OGwuNzguNjI0IDEuMTc2LTEuNDY4LjAyNi4xNTZhNS41IDUuNSAwIDAwOS45NzYgMi4wNjV2LS4wMDJsLS44My0uNTU3LS4wMDEuMDAxYTQuNSA0LjUgMCAwMS04LjIxNC0yLjA1OGwyLjIgMS40NjcuNTU1LS44MzItMy4zODItMi4yNTR6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRoZW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMGgtM3YxMmgzem0tMy0xYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xVjEwYTEgMSAwIDAwLTEtMXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTAuNzUgMjAuNWEuNzUuNzUgMCAxMTEuNSAwIC43NS43NSAwIDAxLTEuNSAwek0yMiAxOGExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMWgtN3YtMWg3di0zaC03di0xek0xOC4zODUgMTdsMi43NTctMi43NTdhMSAxIDAgMDAwLTEuNDE1bC0yLjEyMS0yLjEyYTEgMSAwIDAwLTEuNDE0IDBMMTUgMTMuMzEzdjEuNDE0bDMuMzE0LTMuMzE0IDIuMTIxIDIuMTIyTDE2Ljk3MSAxN3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1ncmlkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMTBoMnYyaC0yek0yMCAxMGgydjJoLTJ6TTEyIDE1aC0ydjJoMnpNMjAgMTVoMnYyaC0yek0xMiAyMGgtMnYyaDJ6TTIwIDIwaDJ2MmgtMnpNMTcgMTBoLTJ2Mmgyek0xNSAxNWgydjJoLTJ6TTE3IDIwaC0ydjJoMnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41di0xM2gydjEzek0xNSAyMi41di0xM2gydjEzek0yMCA5LjV2MTNoMnYtMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtbGlzdC12ZXJ0aWNhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YyaC0xM3pNOS41IDE1aDEzdjJoLTEzek0yMi41IDIwaC0xM3YyaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aW1lciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5IDhoLTZWN2g2ek0xNi41IDE3di01aC0xdjVhLjUuNSAwIDAwMSAweicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMi43MTUgMTIuNjVsMS41MjctMS41MjlMMjIuMTIyIDlsLTEuNDgzIDEuNDgyYTggOCAwIDEwMi4wNzUgMi4xNjd6TTIzIDE3YTcgNyAwIDExLTIuMzg0LTUuMjYzbC42NDcuNjQ3QTYuOTc0IDYuOTc0IDAgMDEyMyAxN3ptLTEuMDA4LTUuM2wuMTMuMTI4LjcwNi0uNzA3LS43MDctLjcwNy0uNzAxLjcwMWMuMi4xODUuMzkxLjM4LjU3Mi41ODV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdHJhc2gge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNCAxOC41di00aDF2NHpNMTcgMTguNXYtNGgxdjR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE5IDEwLjVhMiAyIDAgMDAtMi0yaC0yYTIgMiAwIDAwLTIgMmgtM3YxaDF2MTBhMiAyIDAgMDAyIDJoNmEyIDIgMCAwMDItMnYtMTBoMXYtMXptLTQtMWExIDEgMCAwMC0xIDFoNGExIDEgMCAwMC0xLTF6bTUgMmgtOHYxMGExIDEgMCAwMDEgMWg2YTEgMSAwIDAwMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZlcnRpY2FsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloMTR2MUg5em0wIDEzaDE0djFIOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTNoLTZ2Nmg2em0tNy0xdjhoOHYtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS12aXNpYmxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMThhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDEyYTcuNDk5IDcuNDk5IDAgMDE2LjYzNSA0QTcuNDk5IDcuNDk5IDAgMDExNiAyMGE3LjQ5OSA3LjQ5OSAwIDAxLTYuNjM1LTRBNy40OTkgNy40OTkgMCAwMTE2IDEyem0wIDdhNi40OTUgNi40OTUgMCAwMS01LjQ3OC0zQTYuNDk1IDYuNDk1IDAgMDExNiAxM2MyLjMgMCA0LjMyMiAxLjE5NCA1LjQ3OCAzQTYuNDk1IDYuNDk1IDAgMDExNiAxOXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nLWxhcmdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA2bDEwIDE4SDZ6bS0xIDExdi00aDJ2NHptMCAydjJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA5bDggMTRIOHptLTEgOC41VjE0aDJ2My41em0wIDEuNXYyaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pY29uLWJ1dHRvbiAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b246aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0taG92ZXItZmlsbCk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjphY3RpdmUsIC5pY29uLWJ1dHRvbjpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6YWN0aXZlLCAuaWNvbi1idXR0b24tLXNlbGVjdGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQgKiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaW5wdXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMzBweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6aG92ZXIsIC5pbnB1dF9fZmllbGQ6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6c2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6YWN0aXZlLCAuaW5wdXRfX2ZpZWxkOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmlucHV0LS13aXRoLWljb24gLmlucHV0X19maWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcblxcbi5pbnB1dCAuaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDBweDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB6LWluZGV4OiAxO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ubGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IHRvcDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgMDtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIC5pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwX19tc2cge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4ucmFkaW8ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJhZGlvX19idXR0b24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiB2aWV3Qm94PVxcXCIwIDAgNiA2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiJTNFJTNDcmVjdCB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiByeD1cXFwiM1xcXCIgZmlsbD1cXFwiYmxhY2tcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC44XFxcIi8lM0UlM0Mvc3ZnJTNFJTBBJyk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IDJweDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246ZGlzYWJsZWQgKyAucmFkaW9fX2xhYmVsIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZDpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrKTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUtc21hbGwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAycHggMTBweCAwIC04cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5zZWN0aW9uLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIGNhbGModmFyKC0tc2l6ZS14eHNtYWxsKSAvIDIpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuc2VsZWN0LnNlbGVjdC1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uICoge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQsIC5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMS4wO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZCAuc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMzBweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLXRvcDogLTFweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIzMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDMwJTIwMzAlMjIlMjB3aWR0aCUzRCUyMjMwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMTUlMjAxNi43MDcxLTMtMyUyMC43MDcxLS43MDcxJTIwMi42NDY1JTIwMi42NDY0JTIwMi42NDY0LTIuNjQ2NC43MDcxLjcwNzEtMyUyMDMtLjM1MzUuMzUzNnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudSAuaWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taHVkKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1odWQpO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgbWFyZ2luOiAwO1xcbiAgei1pbmRleDogMTAwMDtcXG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XFxuICB3aWR0aDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gIGJvcmRlcjogc29saWQgM3B4IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXhzbWFsbCkgMHB4IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZCAuc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICBvcGFjaXR5OiAxLjA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS1sYWJlbCB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWljb24ge1xcbiAgd2lkdGg6IHZhcigtLXNpemUteHNtYWxsKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xMy4yMDY5JTIwNS4yMDcyNC01LjUwMDAyJTIwNS40OTk5Ni0uNzA3MTEuNzA3Mi0uNzA3MTEtLjcwNzItMy0yLjk5OTk2JTIwMS40MTQyMi0xLjQxNDIxJTIwMi4yOTI4OSUyMDIuMjkyODklMjA0Ljc5MjkzLTQuNzkyODl6JTIyJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUtLWhpZ2hsaWdodCwgLnNlbGVjdC1tZW51X19pdGVtOmhvdmVyLCAuc2VsZWN0LW1lbnVfX2l0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlci1sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlNCk7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2RpdmlkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUyKTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW46IDhweCAwIDdweCAwO1xcbn1cXG5cXG4uc3dpdGNoIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKlxcbiAgICAmX190b2dnbGU6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcbiAgICB9XFxuICAgICovXFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQ6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIGNhbGModmFyKC0tc2l6ZS14bGFyZ2UpIC0gMnB4KTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAgMC4ycztcXG4gIHdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbDphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG5cXG4udGV4dGFyZWEge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogNjJweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi50ZXh0YXJlYTpob3ZlciwgLnRleHRhcmVhOnBsYWNlaG9sZGVyLXNob3duOmhvdmVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi50ZXh0YXJlYTphY3RpdmUsIC50ZXh0YXJlYTpmb2N1cyB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkLCAudGV4dGFyZWE6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4udHlwZSB7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIC8qIHNpemVzICovXFxuICAvKiB3ZWlnaHRzICovXFxuICAvKiBsZXR0ZXIgc3BhY2luZyBhZGp1c3RtZW50cyBiYXNlZCBwb3MvbmVnIGFwcGxpY2F0aW9uICovXFxufVxcblxcbi50eXBlLS1zbWFsbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4udHlwZS0tbGFyZ2Uge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLXhsYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZSk7XFxufVxcblxcbi50eXBlLS1tZWRpdW0ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxufVxcblxcbi50eXBlLS1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXNtYWxsIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLWxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZSk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXhsYXJnZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZmlnbWEtcGx1Z2luLWRzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSxTQUFTO0FBQ1Q7RUFDRSxXQUFXO0VBQ1gsV0FBVztFQUNYLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsbUJBQW1CO0VBQ25CLGdCQUFnQjtFQUNoQixjQUFjO0VBQ2QsaUJBQWlCO0VBQ2pCLHFCQUFxQjtFQUNyQixnQkFBZ0I7RUFDaEIsMkJBQTJCO0VBQzNCLHdCQUF3QjtFQUN4QiwyQkFBMkI7RUFDM0Isd0JBQXdCO0VBQ3hCLGdCQUFnQjtFQUNoQixpQ0FBaUM7RUFDakMsaUNBQWlDO0VBQ2pDLHFCQUFxQjtFQUNyQixlQUFlO0VBQ2YsaUJBQWlCO0VBQ2pCLGNBQWM7RUFDZCxrQkFBa0I7RUFDbEIsWUFBWTtFQUNaLDJCQUEyQjtFQUMzQiwrQkFBK0I7RUFDL0IsaUNBQWlDO0VBQ2pDLGdDQUFnQztFQUNoQyxzQkFBc0I7RUFDdEIsc0JBQXNCO0VBQ3RCLGlDQUFpQztFQUNqQyxlQUFlO0VBQ2YsaURBQWlEO0VBQ2pELGlEQUFpRDtFQUNqRCxlQUFlO0VBQ2YsaUNBQWlDO0VBQ2pDLGVBQWU7RUFDZix3QkFBd0I7RUFDeEIsdUJBQXVCO0VBQ3ZCLHVCQUF1QjtFQUN2Qix3QkFBd0I7RUFDeEIsaUJBQWlCO0VBQ2pCLHlCQUF5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QjtFQUNwQiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsNkJBQTZCO0VBQzdCLDhCQUE4QjtFQUM5QixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxtQkFBbUI7RUFDbkIsNkJBQTZCO0VBQzdCLDhCQUE4QjtFQUM5QixvQkFBb0I7QUFDdEI7O0FBRUE7RUFDRSxrQkFBa0I7RUFDbEIsb0JBQW9CO0VBQ3BCLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLGFBQWE7QUFDZjs7QUFFQTtFQUNFLDhCQUE4QjtFQUM5QixrQ0FBa0M7RUFDbEMsc0NBQXNDO0VBQ3RDLG9DQUFvQztFQUNwQyxxREFBcUQ7RUFDckQsVUFBVTtFQUNWLFlBQVk7RUFDWix5REFBeUQ7QUFDM0Q7O0FBRUE7RUFDRSxpQ0FBaUM7RUFDakMsb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0UsaUNBQWlDO0VBQ2pDLDBDQUEwQztFQUMxQyxvREFBb0Q7QUFDdEQ7O0FBRUE7RUFDRSxrQ0FBa0M7RUFDbEMsMENBQTBDO0VBQzFDLHFEQUFxRDtBQUN2RDs7QUFFQTtFQUNFLHNDQUFzQztBQUN4Qzs7QUFFQTtFQUNFLG9DQUFvQztBQUN0Qzs7QUFFQTtFQUNFLHFEQUFxRDtBQUN2RDs7QUFFQTtFQUNFLG9EQUFvRDtBQUN0RDs7QUFFQTtFQUNFLG9EQUFvRDtBQUN0RDs7QUFFQTtFQUNFLHFEQUFxRDtBQUN2RDs7QUFFQTtFQUNFLHFCQUFxQjtBQUN2QlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIvKiBWYXJzICovXFxuOnJvb3Qge1xcbiAgLyogQ09MT1JTICovXFxuICAvKiBBY2NlbnQgKi9cXG4gIC0tYmx1ZTogIzE4YTBmYjtcXG4gIC0tcHVycGxlOiAjN2I2MWZmO1xcbiAgLS1ob3QtcGluazogI2ZmMDBmZjtcXG4gIC0tZ3JlZW46ICMxYmM0N2Q7XFxuICAtLXJlZDogI2YyNDgyMjtcXG4gIC0teWVsbG93OiAjZmZlYjAwO1xcbiAgLyogQmFzaWMgZm9yZWdyb3VuZCAqL1xcbiAgLS1ibGFjazogIzAwMDAwMDtcXG4gIC0tYmxhY2s4OiByZ2JhKDAsIDAsIDAsIC44KTtcXG4gIC0tYmxhY2s4LW9wYXF1ZTogIzMzMzMzMztcXG4gIC0tYmxhY2szOiByZ2JhKDAsIDAsIDAsIC4zKTtcXG4gIC0tYmxhY2szLW9wYXF1ZTogI0IzQjNCMztcXG4gIC0td2hpdGU6ICNmZmZmZmY7XFxuICAtLXdoaXRlODogcmdiYSgyNTUsIDI1NSwgMjU1LCAuOCk7XFxuICAtLXdoaXRlNDogcmdiYSgyNTUsIDI1NSwgMjU1LCAuNCk7XFxuICAvKiBCYXNpYyBiYWNrZ3JvdW5kICovXFxuICAtLWdyZXk6ICNmMGYwZjA7XFxuICAtLXNpbHZlcjogI2U1ZTVlNTtcXG4gIC0taHVkOiAjMjIyMjIyO1xcbiAgLS10b29sYmFyOiAjMmMyYzJjO1xcbiAgLyogU3BlY2lhbCAqL1xcbiAgLS1ibGFjazE6IHJnYmEoMCwgMCwgMCwgLjEpO1xcbiAgLS1ibHVlMzogcmdiYSgyNCwgMTQ1LCAyNTEsIC4zKTtcXG4gIC0tcHVycGxlNDogcmdiYSgxMjMsIDk3LCAyNTUsIC40KTtcXG4gIC0taG92ZXItZmlsbDogcmdiYSgwLCAwLCAwLCAuMDYpO1xcbiAgLS1zZWxlY3Rpb24tYTogI2RhZWJmNztcXG4gIC0tc2VsZWN0aW9uLWI6ICNlZGY1ZmE7XFxuICAtLXdoaXRlMjogcmdiYSgyNTUsIDI1NSwgMjU1LCAuMik7XFxuICAvKiBUWVBPR1JBUEhZICovXFxuICAvKiBQb3MgPSBwb3NpdGl2ZSBhcHBsaWNhdGlvbnMgKGJsYWNrIG9uIHdoaXRlKSAqL1xcbiAgLyogTmVnID0gbmVnYXRpdmUgYXBwbGljYXRpb25zICh3aGl0ZSBvbiBibGFjaykgKi9cXG4gIC8qIEZvbnQgc3RhY2sgKi9cXG4gIC0tZm9udC1zdGFjazogJ0ludGVyJywgc2Fucy1zZXJpZjtcXG4gIC8qIEZvbnQgc2l6ZXMgKi9cXG4gIC0tZm9udC1zaXplLXhzbWFsbDogMTFweDtcXG4gIC0tZm9udC1zaXplLXNtYWxsOiAxMnB4O1xcbiAgLS1mb250LXNpemUtbGFyZ2U6IDEzcHg7XFxuICAtLWZvbnQtc2l6ZS14bGFyZ2U6IDE0cHg7XFxuICAvKiBGb250IHdlaWdodHMgKi9cXG4gIC0tZm9udC13ZWlnaHQtbm9ybWFsOiA0MDA7XFxuICAtLWZvbnQtd2VpZ2h0LW1lZGl1bTogNTAwO1xcbiAgLS1mb250LXdlaWdodC1ib2xkOiA2MDA7XFxuICAvKiBMaW5laGVpZ2h0ICovXFxuICAtLWZvbnQtbGluZS1oZWlnaHQ6IDE2cHg7XFxuICAvKiBVc2UgRm9yIHhzbWFsbCwgc21hbGwgZm9udCBzaXplcyAqL1xcbiAgLS1mb250LWxpbmUtaGVpZ2h0LWxhcmdlOiAyNHB4O1xcbiAgLyogVXNlIEZvciBsYXJnZSwgeGxhcmdlIGZvbnQgc2l6ZXMgKi9cXG4gIC8qIExldHRlcnNwYWNpbmcgKi9cXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsOiAuMDA1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbDogLjAxZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsOiAwO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbDogLjAwNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1sYXJnZTogLS4wMDI1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLWxhcmdlOiAuMDAyNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14bGFyZ2U6IC0uMDAxZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhsYXJnZTogLS4wMDFlbTtcXG4gIC8qIEJPUkRFUiBSQURJVVMgKi9cXG4gIC0tYm9yZGVyLXJhZGl1cy1zbWFsbDogMnB4O1xcbiAgLS1ib3JkZXItcmFkaXVzLW1lZDogNXB4O1xcbiAgLS1ib3JkZXItcmFkaXVzLWxhcmdlOiA2cHg7XFxuICAvKiBTSEFET1dTICovXFxuICAtLXNoYWRvdy1odWQ6IDAgNXB4IDE3cHggcmdiYSgwLCAwLCAwLCAuMiksIDAgMnB4IDdweCByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuICAtLXNoYWRvdy1mbG9hdGluZy13aW5kb3c6IDAgMnB4IDE0cHggcmdiYSgwLCAwLCAwLCAuMTUpO1xcbiAgLyogU1BBQ0lORyArIFNJWklORyAqL1xcbiAgLS1zaXplLXh4eHNtYWxsOiA0cHg7XFxuICAtLXNpemUteHhzbWFsbDogOHB4O1xcbiAgLS1zaXplLXhzbWFsbDogMTZweDtcXG4gIC0tc2l6ZS1zbWFsbDogMjRweDtcXG4gIC0tc2l6ZS1tZWRpdW06IDMycHg7XFxuICAtLXNpemUtbGFyZ2U6IDQwcHg7XFxuICAtLXNpemUteGxhcmdlOiA0OHB4O1xcbiAgLS1zaXplLXh4bGFyZ2U6IDY0cHg7XFxuICAtLXNpemUteHh4bGFyZ2U6IDgwcHg7XFxufVxcblxcbi8qIEdsb2JhbCBzdHlsZXMgKi9cXG4qIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmJvZHkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInLCBzYW5zLXNlcmlmO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLyogIEZPTlRTICovXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ0ludGVyJztcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBzcmM6IHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItUmVndWxhci53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1SZWd1bGFyLndvZmY/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ0ludGVyJztcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBzcmM6IHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItTWVkaXVtLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLU1lZGl1bS53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1TZW1pQm9sZC53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1TZW1pQm9sZC53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG4vKiBVVElMSVRJRVMgKi9cXG4vKiBwYWRkaW5nICovXFxuLnAteHh4c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wLXh4c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnAteHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnAtc21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wLW1lZGl1bSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wLWxhcmdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucC14bGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucC14eGxhcmdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wLWh1Z2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgdG9wICovXFxuLnB0LXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnB0LXh4c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wdC14c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnB0LXNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnB0LW1lZGl1bSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucHQtbGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucHQteGxhcmdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wdC14eGxhcmdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucHQtaHVnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgcmlnaHQgKi9cXG4ucHIteHh4c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wci14eHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wci14c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucHItc21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wci1tZWRpdW0ge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucHItbGFyZ2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wci14bGFyZ2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucHIteHhsYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucHItaHVnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyBib3R0b20gKi9cXG4ucGIteHh4c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucGIteHhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnBiLXhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucGItc21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucGItbWVkaXVtIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wYi1sYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wYi14bGFyZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnBiLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wYi1odWdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyBsZWZ0ICovXFxuLnBsLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wbC14eHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnBsLXhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnBsLXNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wbC1tZWRpdW0ge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wbC1sYXJnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucGwteGxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucGwteHhsYXJnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wbC1odWdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiAqL1xcbi5tLXh4eHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tLXh4c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubS14c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tLXNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tLW1lZGl1bSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm0tbGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm0teGxhcmdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubS14eGxhcmdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm0taHVnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gdG9wICovXFxuLm10LXh4eHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubXQteHhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubXQteHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm10LXNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubXQtbWVkaXVtIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm10LWxhcmdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubXQteGxhcmdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm10LXh4bGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm10LWh1Z2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiByaWdodCAqL1xcbi5tci14eHhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubXIteHhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tci14c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tci1zbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubXItbWVkaXVtIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubXItbGFyZ2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1yLXhsYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1yLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubXItaHVnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gYm90dG9tICovXFxuLm1iLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubWIteHhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubWIteHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1iLXNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubWItbWVkaXVtIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1iLWxhcmdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubWIteGxhcmdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1iLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1iLWh1Z2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiBsZWZ0ICovXFxuLm1sLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1sLXh4c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tbC14c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1sLXNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1sLW1lZGl1bSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubWwtbGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubWwteGxhcmdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tbC14eGxhcmdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubWwtaHVnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIGxheW91dCB1dGlsaXRpZXMgKi9cXG4uaGlkZGVuIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lO1xcbn1cXG5cXG4uYmxvY2sge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5pbmxpbmUtYmxvY2sge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cXG4uZmxleCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uaW5saW5lLWZsZXgge1xcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XFxufVxcblxcbi5jb2x1bW4ge1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmNvbHVtbi1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW4tcmV2ZXJzZTtcXG59XFxuXFxuLnJvdyB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4ucm93LXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xcbn1cXG5cXG4uZmxleC13cmFwIHtcXG4gIGZsZXgtd3JhcDogd3JhcDtcXG59XFxuXFxuLmZsZXgtd3JhcC1yZXZlcnNlIHtcXG4gIGZsZXgtd3JhcDogd3JhcC1yZXZlcnNlO1xcbn1cXG5cXG4uZmxleC1uby13cmFwIHtcXG4gIGZsZXgtd3JhcDogbm93cmFwO1xcbn1cXG5cXG4uZmxleC1zaHJpbmsge1xcbiAgZmxleC1zaHJpbms6IDE7XFxufVxcblxcbi5mbGV4LW5vLXNocmluayB7XFxuICBmbGV4LXNocmluazogMDtcXG59XFxuXFxuLmZsZXgtZ3JvdyB7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5mbGV4LW5vLWdyb3cge1xcbiAgZmxleC1ncm93OiAwO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LXN0YXJ0IHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1lbmQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1jZW50ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtYXJvdW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYXJvdW5kO1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RhcnQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1lbmQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtY2VudGVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1zdHJldGNoIHtcXG4gIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdGFydCB7XFxuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1lbmQge1xcbiAgYWxpZ24tY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWNlbnRlciB7XFxuICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LXN0cmV0Y2gge1xcbiAgYWxpZ24tY29udGVudDogc3RyZXRjaDtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RhcnQge1xcbiAgYWxpZ24tc2VsZjogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLXNlbGYtZW5kIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLXNlbGYtY2VudGVyIHtcXG4gIGFsaWduLXNlbGY6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLXNlbGYtc3RyZXRjaCB7XFxuICBhbGlnbi1zZWxmOiBzdHJldGNoO1xcbn1cXG5cXG4uYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1sYXJnZSk7XFxuICBjb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUteHNtYWxsKTtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnk6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXByaW1hcnk6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5OmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnksIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiAwIGNhbGModmFyKC0tc2l6ZS14c21hbGwpICsgMXB4KSAwIGNhbGModmFyKC0tc2l6ZS14c21hbGwpICsgMXB4KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnk6ZW5hYmxlZDpmb2N1cywgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmRpc2FibGVkLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2szKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmUge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1yZWQpO1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcmVkKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tcmVkKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeSwgLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBjb2xvcjogdmFyKC0tYmx1ZSk7XFxuICBwYWRkaW5nOiAwO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeTplbmFibGVkOmZvY3VzLCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeTpkaXNhYmxlZCwgLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi5jaGVja2JveCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLyogdW5jaGVja2VkICovXFxuICAvKlxcblxcdCZfX2JveDpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuXFx0XFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0td2hpdGUpO1xcblxcdCAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuXFx0fSovXFxuICAvKiBjaGVja2VkICovXFxuICAvKlxcblxcdCZfX2JveDpjaGVja2VkOmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG5cXHRcXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aGl0ZSk7XFxuXFx0ICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG5cXHR9Ki9cXG59XFxuXFxuLmNoZWNrYm94X19ib3gge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLmNoZWNrYm94X19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUtc21hbGwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAtMXB4IDEwcHggMCAtOHB4O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6ZGlzYWJsZWQgKyAuY2hlY2tib3hfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5jaGVja2JveF9fYm94OmNoZWNrZWQgKyAuY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjI3JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwOCUyMDclMjIlMjB3aWR0aCUzRCUyMjglMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xLjE3NjQ3JTIwMS44ODIzNiUyMDEuODgyMzUlMjAxLjg4MjM2JTIwMy43NjQ3MS0zLjc2NDcyJTIwMS4xNzY0NyUyMDEuMTc2NDgtNC45NDExOCUyMDQuOTQxMi0zLjA1ODgyLTMuMDU4ODR6JTIyJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAxcHggMnB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5jaGVja2JveF9fYm94OmNoZWNrZWQ6ZGlzYWJsZWQgKyAuY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrOCk7XFxufVxcblxcbi5kaXNjbG9zdXJlIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2l0ZW0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tc2lsdmVyKTtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2l0ZW06bGFzdC1jaGlsZCB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiAwIDhweCAwIDI0cHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWw6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA4cHg7XFxuICBsZWZ0OiA0cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIybTExJTIwOC00LTN2NnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsOmhvdmVyOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwLjg7XFxufVxcblxcbi5kaXNjbG9zdXJlX19jb250ZW50IHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tc2VjdGlvbiB7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1leHBhbmRlZCAuZGlzY2xvc3VyZV9fY29udGVudCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLWV4cGFuZGVkIC5kaXNjbG9zdXJlX19sYWJlbDpiZWZvcmUge1xcbiAgb3BhY2l0eTogMC44O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBkJTNEJTIybTklMjAxMCUyMDMtNGgtNnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IC0ycHggLTFweDtcXG59XFxuXFxuLmljb24tLXNwaW4ge1xcbiAgLXdlYmtpdC1hbmltYXRpb246IHJvdGF0aW5nIDEuMHMgbGluZWFyIGluZmluaXRlO1xcbiAgICAgICAgICBhbmltYXRpb246IHJvdGF0aW5nIDEuMHMgbGluZWFyIGluZmluaXRlO1xcbn1cXG5cXG5ALXdlYmtpdC1rZXlmcmFtZXMgcm90YXRpbmcge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG5Aa2V5ZnJhbWVzIHJvdGF0aW5nIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuXFxuLmljb24tLWJsdWUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg1NCUpIHNlcGlhKDE2JSkgc2F0dXJhdGUoNzQ5OSUpIGh1ZS1yb3RhdGUoMTc5ZGVnKSBicmlnaHRuZXNzKDk4JSkgY29udHJhc3QoMTAxJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDU0JSkgc2VwaWEoMTYlKSBzYXR1cmF0ZSg3NDk5JSkgaHVlLXJvdGF0ZSgxNzlkZWcpIGJyaWdodG5lc3MoOTglKSBjb250cmFzdCgxMDElKTtcXG59XFxuXFxuLmljb24tLXB1cnBsZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDQwJSkgc2VwaWEoNTklKSBzYXR1cmF0ZSg0MDAxJSkgaHVlLXJvdGF0ZSgyMzJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAyJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDQwJSkgc2VwaWEoNTklKSBzYXR1cmF0ZSg0MDAxJSkgaHVlLXJvdGF0ZSgyMzJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAyJSk7XFxufVxcblxcbi5pY29uLS1wdXJwbGU0IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNzIlKSBzZXBpYSg0MCUpIHNhdHVyYXRlKDY2MCUpIGh1ZS1yb3RhdGUoMjAyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg3MiUpIHNlcGlhKDQwJSkgc2F0dXJhdGUoNjYwJSkgaHVlLXJvdGF0ZSgyMDJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAzJSk7XFxufVxcblxcbi5pY29uLS1ob3QtcGluayB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDE4JSkgc2VwaWEoOTAlKSBzYXR1cmF0ZSgzMzQ3JSkgaHVlLXJvdGF0ZSgyOTNkZWcpIGJyaWdodG5lc3MoMTE2JSkgY29udHJhc3QoMTMyJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDE4JSkgc2VwaWEoOTAlKSBzYXR1cmF0ZSgzMzQ3JSkgaHVlLXJvdGF0ZSgyOTNkZWcpIGJyaWdodG5lc3MoMTE2JSkgY29udHJhc3QoMTMyJSk7XFxufVxcblxcbi5pY29uLS1ncmVlbiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDY2JSkgc2VwaWEoMzklKSBzYXR1cmF0ZSg1MzgyJSkgaHVlLXJvdGF0ZSgxMTRkZWcpIGJyaWdodG5lc3MoMTAyJSkgY29udHJhc3QoNzklKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNjYlKSBzZXBpYSgzOSUpIHNhdHVyYXRlKDUzODIlKSBodWUtcm90YXRlKDExNGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCg3OSUpO1xcbn1cXG5cXG4uaWNvbi0tcmVkIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNDMlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDU2MzIlKSBodWUtcm90YXRlKDM0OWRlZykgYnJpZ2h0bmVzcyg5NyUpIGNvbnRyYXN0KDk1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDQzJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSg1NjMyJSkgaHVlLXJvdGF0ZSgzNDlkZWcpIGJyaWdodG5lc3MoOTclKSBjb250cmFzdCg5NSUpO1xcbn1cXG5cXG4uaWNvbi0teWVsbG93IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNzglKSBzZXBpYSg4NiUpIHNhdHVyYXRlKDE2MDglKSBodWUtcm90YXRlKDFkZWcpIGJyaWdodG5lc3MoMTA3JSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDc4JSkgc2VwaWEoODYlKSBzYXR1cmF0ZSgxNjA4JSkgaHVlLXJvdGF0ZSgxZGVnKSBicmlnaHRuZXNzKDEwNyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2sge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxufVxcblxcbi5pY29uLS1ibGFjazgge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSgyNSUpIGh1ZS1yb3RhdGUoMTM3ZGVnKSBicmlnaHRuZXNzKDEwNSUpIGNvbnRyYXN0KDYwJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDI1JSkgaHVlLXJvdGF0ZSgxMzdkZWcpIGJyaWdodG5lc3MoMTA1JSkgY29udHJhc3QoNjAlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrMyB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg2OTglKSBodWUtcm90YXRlKDIxOWRlZykgYnJpZ2h0bmVzcyg2NiUpIGNvbnRyYXN0KDEyNyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNjk4JSkgaHVlLXJvdGF0ZSgyMTlkZWcpIGJyaWdodG5lc3MoNjYlKSBjb250cmFzdCgxMjclKTtcXG59XFxuXFxuLmljb24tLXdoaXRlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZTgge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg1JSkgaHVlLXJvdGF0ZSg1NWRlZykgYnJpZ2h0bmVzcygxMDQlKSBjb250cmFzdCg5OCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg1JSkgaHVlLXJvdGF0ZSg1NWRlZykgYnJpZ2h0bmVzcygxMDQlKSBjb250cmFzdCg5OCUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGU0IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoODk3JSkgaHVlLXJvdGF0ZSgyNDVkZWcpIGJyaWdodG5lc3MoMTE3JSkgY29udHJhc3QoOTMlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoODk3JSkgaHVlLXJvdGF0ZSgyNDVkZWcpIGJyaWdodG5lc3MoMTE3JSkgY29udHJhc3QoOTMlKTtcXG59XFxuXFxuLmljb24tLWFkanVzdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMiAxNi4wNVY5aDF2Ny4wNWEyLjUgMi41IDAgMDEwIDQuOVYyM2gtMXYtMi4wNWEyLjUgMi41IDAgMDEwLTQuOXptMiAyLjQ1YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwek0xOSAyM2gxdi03LjA1YTIuNSAyLjUgMCAwMDAtNC45VjloLTF2Mi4wNWEyLjUgMi41IDAgMDAwIDQuOXptMi05LjVhMS41IDEuNSAwIDEwLTMgMCAxLjUgMS41IDAgMDAzIDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsZXJ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS4yNSAxNy4zOTNhMS43NSAxLjc1IDAgMDAxLjc1IDEuNzVWMjBIOXYtLjg1N2ExLjc1IDEuNzUgMCAwMDEuNzUtMS43NVYxNGMwLTMuMzE0IDIuMzUtNiA1LjI1LTZzNS4yNSAyLjY4NiA1LjI1IDZ6bS0xLTMuMzkzdjMuMzkzYzAgLjYuMTkyIDEuMTU1LjUxOCAxLjYwN2gtOS41MzZhMi43MzggMi43MzggMCAwMC41MTgtMS42MDdWMTRjMC0yLjg5MSAyLjAyNC01IDQuMjUtNXM0LjI1IDIuMTA5IDQuMjUgNXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTYgMjNhMiAyIDAgMDEtMi0yaC0xYTMgMyAwIDEwNiAwaC0xYTIgMiAwIDAxLTIgMnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYW5nbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEyIDEydjhoOHYtMWgtM2E0IDQgMCAwMC00LTR2LTN6bTEgNHYzaDNhMyAzIDAgMDAtMy0zeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFycm93LWxlZnQtcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMi4yMDcgMTYuNWwxLjY0NyAxLjY0Ni0uNzA3LjcwOEwxMC4yOTMgMTZsMi44NTQtMi44NTQuNzA3LjcwOC0xLjY0NyAxLjY0Nmg3LjU4NmwtMS42NDYtMS42NDYuNzA3LS43MDhMMjEuNzA3IDE2bC0yLjg1MyAyLjg1NC0uNzA3LS43MDggMS42NDYtMS42NDZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXVwLWRvd24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxMC4yOTJsMi44NTQgMi44NTQtLjcwNy43MDctMS42NDYtMS42NDZ2Ny41ODVsMS42NDYtMS42NDYuNzA3LjcwNy0yLjg1MyAyLjg1NC0yLjg1NC0yLjg1NC43MDctLjcwNyAxLjY0NyAxLjY0NnYtNy41ODVsLTEuNjQ3IDEuNjQ2LS43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXV0by1sYXlvdXQtaG9yaXpvbnRhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoNXYxMmgtNXptMSAxaDN2MTBoLTN6bTYtMWg1djEyaC01em0xIDFoM3YxMGgtM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hdXRvLWxheW91dC12ZXJ0aWNhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoMTJ2NUgxMHptMSAxaDEwdjNIMTF6bS0xIDZoMTJ2NUgxMHptMSAxaDEwdjNIMTF6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYmFjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMuNzA3IDE2bDQuNjQ2LTQuNjQ2LS43MDctLjcwN0wxMi4yOTMgMTZsNS4zNTMgNS4zNTQuNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYmxlbmQtZW1wdHkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2LjY5NSAxMS43MmwtLjY5My0uNzE4TDE2IDExbC0uMDAxLjAwMi0uNjk0LjcxOEMxMy4xMDIgMTQuMDEyIDEyIDE1LjI5NCAxMiAxNi44NTJhNC4xOTkgNC4xOTkgMCAwMDEuMTcyIDIuOTM2IDMuOTA2IDMuOTA2IDAgMDA1LjY1NiAwQTQuMTk5IDQuMTk5IDAgMDAyMCAxNi44NTJjMC0xLjU1OC0xLjEwMi0yLjg0LTMuMzA1LTUuMTMyem0tLjY5NS43MmMtLjk3NyAxLjAxNy0xLjY5MyAxLjc5LTIuMTk1IDIuNDcxLS42LjgxNC0uODA1IDEuMzgtLjgwNSAxLjk0di4wMDNhMy4yIDMuMiAwIDAwLjg5IDIuMjM5IDIuOTA2IDIuOTA2IDAgMDA0LjIyIDAgMy4yIDMuMiAwIDAwLjg5LTIuMjM5di0uMDAyYzAtLjU2LS4yMDUtMS4xMjctLjgwNS0xLjk0LS41MDItLjY4MS0xLjIxOS0xLjQ1NS0yLjE5NS0yLjQ3MnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ibGVuZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYuMDAyIDExLjAwMmwuNjkzLjcxOEMxOC44OTggMTQuMDEyIDIwIDE1LjI5NCAyMCAxNi44NTJhNC4xOTkgNC4xOTkgMCAwMS0xLjE3MiAyLjkzNiAzLjkwNiAzLjkwNiAwIDAxLTUuNjU2IDBBNC4xOTkgNC4xOTkgMCAwMTEyIDE2Ljg1MmMwLTEuNTU4IDEuMTAyLTIuODQgMy4zMDUtNS4xMzJsLjY5NC0uNzE5em0tMi4xOTcgMy45MWMuNTAyLS42ODEgMS4yMTktMS40NTUgMi4xOTUtMi40NzIuOTc2IDEuMDE3IDEuNjkzIDEuNzkgMi4xOTUgMi40NzEuNi44MTQuODA1IDEuMzguODA1IDEuOTR2LjAwM2MwIC4wNDkgMCAuMDk4LS4wMDMuMTQ2aC01Ljk5NGEzLjM3IDMuMzcgMCAwMS0uMDAzLS4xNDZ2LS4wMDJjMC0uNTYuMjA1LTEuMTI3LjgwNS0xLjk0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJyZWFrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnIG9wYWNpdHk9Jy45JyUzRSUzQ3BhdGggZD0nTTEzIDl2M2gxVjl6TTIyLjEwMyA5Ljg5NmEyLjk3NSAyLjk3NSAwIDAwLTQuMjA3IDBsLTIuNzUgMi43NS43MDcuNzA3IDIuNzUtMi43NWExLjk3NSAxLjk3NSAwIDAxMi43OTMgMi43OTNsLTIuNzUgMi43NS43MDcuNzA3IDIuNzUtMi43NWEyLjk3NSAyLjk3NSAwIDAwMC00LjIwN3pNOS44OTYgMjIuMTA0YTIuOTc1IDIuOTc1IDAgMDEwLTQuMjA4bDIuNzUtMi43NS43MDcuNzA3LTIuNzUgMi43NWExLjk3NSAxLjk3NSAwIDAwMi43OTMgMi43OTNsMi43NS0yLjc1LjcwNy43MDctMi43NSAyLjc1YTIuOTc1IDIuOTc1IDAgMDEtNC4yMDcgMHpNMjMgMTloLTN2LTFoM3pNMTkgMjB2M2gtMXYtM3pNMTIgMTNIOXYxaDN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LWRvd24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxOGwzLTRoLTZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMyAxNmw0LTN2NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xOSAxNmwtNC0zdjZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LXVwIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTRsMyA0aC02eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jaGVjayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuMjA3IDEzLjcwN0wxNSAxOS45MTRsLTMuNzA3LTMuNzA3IDEuNDE0LTEuNDE0TDE1IDE3LjA4Nmw0Ljc5My00Ljc5M3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jbG9zZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE1LjI5M2w0LjY0Ni00LjY0Ni43MDguNzA3TDE2LjcwNyAxNmw0LjY0NyA0LjY0Ny0uNzA3LjcwN0wxNiAxNi43MDdsLTQuNjQ2IDQuNjQ3LS43MDctLjcwN0wxNS4yOTMgMTZsLTQuNjQ2LTQuNjQ2LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb21wb25lbnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEyLjA2MyAxMC45MzhMMTYgMTQuODc0bDMuOTM4LTMuOTM4TDE2IDd6bTYuNDYgMEwxNiAxMy40NmwtMi41MjMtMi41MjRMMTYgOC40MTV6bS02LjQ2IDEwLjEyNEwxNiAyNWwzLjkzOC0zLjkzOEwxNiAxNy4xMjV6bTYuNDYgMEwxNiAyMy41ODdsLTIuNTIzLTIuNTIzTDE2IDE4LjUzOHpNNyAxNmwzLjkzNy0zLjkzOEwxNC44NzUgMTZsLTMuOTM4IDMuOTM4em0zLjkzNyAyLjUyM0wxMy40NjEgMTZsLTIuNTI0LTIuNTIzTDguNDE1IDE2ek0xNy4xMjUgMTZsMy45MzggMy45MzhMMjUgMTZsLTMuOTM4LTMuOTM4em02LjQ2IDBsLTIuNTIzIDIuNTIzTDE4LjU0IDE2bDIuNTIzLTIuNTIzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvcm5lci1yYWRpdXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxIDEzaC00YTQgNCAwIDAwLTQgNHY0aC0xdi00YTUgNSAwIDAxNS01aDR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29ybmVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEgMTFoM3YxaC0ydjJoLTF6bTcgMGgzdjNoLTF2LTJoLTJ6bS02IDl2LTJoLTF2M2gzdi0xem05LTJ2M2gtM3YtMWgydi0yeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRpc3RyaWJ1dGUtaG9yaXpvbnRhbC1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTEgMjIuNXYtMTNoLTF2MTN6TTIyIDkuNXYxM2gtMXYtMTN6TTE3IDEyLjV2N2gtMnYtN3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZGlzdHJpYnV0ZS12ZXJ0aWNhbC1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOS41IDEwaDEzdjFoLTEzek0xMi41IDE1aDd2MmgtN3pNMjIuNSAyMWgtMTN2MWgxM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZHJhZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDguNWg3LjcwN0wyMiAxMi43OTNWMjMuNUgxMHptMSAxdjEzaDEwdi05aC00di00em03IC43MDdsMi4yOTMgMi4yOTNIMTh6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZWZmZWN0cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2LjUgOC41aC0xdjNoMXpNMTEuMDUgMTAuMzQzbC0uNzA3LjcwNyAyLjEyMSAyLjEyMi43MDgtLjcwOHpNMjEuNjU3IDExLjA1bC0uNzA3LS43MDctMi4xMjEgMi4xMjEuNzA3LjcwOHpNOC41IDE1LjV2MWgzdi0xek0yMC41IDE1LjV2MWgzdi0xek0xMy4xNzIgMTkuNTM1bC0uNzA4LS43MDctMi4xMiAyLjEyMi43MDYuNzA3ek0xOS41MzUgMTguODI4bC0uNzA3LjcwNyAyLjEyMiAyLjEyMi43MDctLjcwN3pNMTYuNSAyMC41aC0xdjNoMXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguNDk4IDE1Ljk5OGEyLjUgMi41IDAgMTEtNSAwIDIuNSAyLjUgMCAwMTUgMHptLTEgMGExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1lbGxpcHNlcyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEuNSAxNmExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHptNiAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwem00LjUgMS41YTEuNSAxLjUgMCAxMDAtMyAxLjUgMS41IDAgMDAwIDN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZXllZHJvcHBlciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIyLjQ0NyA5LjZjLS44LS44LTItLjgtMi44IDBsLTIuOCAyLjgtLjgtLjdjLS40LS40LTEtLjQtMS40IDBzLS40IDEgMCAxLjRsLjcuNy01LjggNS44Yy0uNC40LTEgMS45IDAgMi45czIuNS40IDIuOSAwbDUuOC01LjguNy43Yy40LjQgMSAuNCAxLjQgMHMuNC0xIDAtMS40bC0uNy0uNyAyLjgtMi44Yy44LS45LjgtMi4xIDAtMi45em0tMTAuOSAxMS45aC0xdi0xbDUuOC01LjggMSAxYy0uMSAwLTUuOCA1LjgtNS44IDUuOHonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZm9yd2FyZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTcuOTQgMTZsLTQuNjQ3LTQuNjQ2LjcwNy0uNzA3TDE5LjM1NCAxNiAxNCAyMS4zNTRsLS43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1mcmFtZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTEgMjR2LTNIOHYtMWgzdi04SDh2LTFoM1Y4aDF2M2g4VjhoMXYzaDN2MWgtM3Y4aDN2MWgtM3YzaC0xdi0zaC04djN6bTktNHYtOGgtOHY4eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWdyb3VwIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTcuNCA5aC0yLjh2MWgyLjh6TTIwLjkgMjJIMjJ2LTEuMWgxVjIzaC0yLjF6TTEwIDE0LjZ2Mi44SDl2LTIuOHpNMjIgMTEuMVYxMGgtMS4xVjlIMjN2Mi4xek0yMiAxNC42djIuOGgxdi0yLjh6TTEwIDExLjFWMTBoMS4xVjlIOXYyLjF6TTkgMjAuOWgxVjIyaDEuMXYxSDl6TTE3LjQgMjJoLTIuOHYxaDIuOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taGlkZGVuIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS41MDkgMTUuODAxQTguMDMzIDguMDMzIDAgMDAyMi45MjggMTRoLTEuMTg0QTYuOTkyIDYuOTkyIDAgMDExNiAxN2E2Ljk5MiA2Ljk5MiAwIDAxLTUuNzQ1LTNIOS4wN2E4LjAzMyA4LjAzMyAwIDAwMS40MjEgMS44MDFsLTEuNTk1IDEuNTk1LjcwOC43MDcgMS42NTctMS42NTdjLjcxLjUyMyAxLjUxMS45MzIgMi4zNzQgMS4xOTlsLS42MTcgMi4yMjEuOTY0LjI2OC42MjYtMi4yNTVhOC4wNTEgOC4wNTEgMCAwMDIuNzg0IDBsLjYyNiAyLjI1NS45NjQtLjI2OC0uNjE3LTIuMjIxYTcuOTcxIDcuOTcxIDAgMDAyLjM3NC0xLjJsMS42NTggMS42NTguNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taG9yaXpvbnRhbC1wYWRkaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5djE0aDFWOXptMTMgMHYxNGgxVjl6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzIDE5di02aDZ2NnptLTEtN2g4djhoLTh6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taHlwZXJsaW5rIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjAuODI0IDE0LjQ5MmwtMS42NTcgMS42NTcuODI4LjgyOSAxLjY1OC0xLjY1N2EzLjUxNyAzLjUxNyAwIDAwLTQuOTczLTQuOTczbC0xLjY1NyAxLjY1OC44MjkuODI4IDEuNjU3LTEuNjU3YTIuMzQ1IDIuMzQ1IDAgMDEzLjMxNSAzLjMxNXptLTQuOTc0IDQuOTcybC44MjkuODI5LTEuNjU4IDEuNjU3YTMuNTE2IDMuNTE2IDAgMTEtNC45NzItNC45NzJsMS42NTktMS42NTguODI4LjgyOS0xLjY1NiAxLjY1N2EyLjM0MyAyLjM0MyAwIDEwMy4zMTUgMy4zMTVsMS42NTctMS42NTd6bTIuMDcyLTYuMjE2bC00Ljk3MiA0Ljk3My44MjguODI5IDQuOTczLTQuOTczeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1pbWFnZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjIgMTBIMTB2Ny43OTNsMy4wODMtMy4wODMgNy4yOSA3LjI5SDIyek0xMCAyMnYtMi43OTNsMy4wODMtMy4wODNMMTguOTYgMjJ6bTAtMTNhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDEyYTEgMSAwIDAwMS0xVjEwYTEgMSAwIDAwLTEtMXptOS42NjcgNC42NjdhMS4zMzMgMS4zMzMgMCAxMS0yLjY2NyAwIDEuMzMzIDEuMzMzIDAgMDEyLjY2NyAwem0xIDBhMi4zMzMgMi4zMzMgMCAxMS00LjY2NyAwIDIuMzMzIDIuMzMzIDAgMDE0LjY2NyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWluc3RhbmNlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA3bDkgOS05IDktOS05em0tNy41ODYgOUwxNiAyMy41ODYgMjMuNTg2IDE2IDE2IDguNDE0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWtleSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMTQgMjAuMTRhMy4wMTQgMy4wMTQgMCAwMC4zMzEtMy44NjhsMi4wNDctMi4wNDcgMS43NjcgMS43NjdhLjUuNSAwIDEwLjcwNy0uNzA3bC0xLjc2Ny0xLjc2NyAxLjI5My0xLjI5MyAxLjc4NCAxLjc4NGEuNS41IDAgMTAuNzA3LS43MDdsLTEuNzg0LTEuNzg0Ljc2Mi0uNzYxYS41LjUgMCAwMC0uNzA3LS43MDhsLTUuNTEzIDUuNTEzYTMuMDE0IDMuMDE0IDAgMTAuMzczIDQuNTc4em0tLjcxMi0uNzEyYTIuMDA2IDIuMDA2IDAgMTAtMi44MzctMi44MzcgMi4wMDYgMi4wMDYgMCAwMDIuODM3IDIuODM3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1hbGlnbi1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0LjUgMTB2MTBoLTJWMTB6bTggMTJ2MWgtMTN2LTF6bS0zLTJ2LTZoLTJ2NnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi1ob3Jpem9udGFsLWNlbnRlcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNi41IDkuNWgtMXYzaC01djJoNXYzaC0zdjJoM3YzaDF2LTNoM3YtMmgtM3YtM2g1di0yaC01eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi1sZWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMjIuNUg5di0xM2gxek0yMiAxNC41SDEydi0yaDEwek0xMiAxOS41aDZ2LTJoLTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMjIgMjIuNWgxdi0xM2gtMXpNMTAgMTQuNWgxMHYtMkgxMHpNMjAgMTkuNWgtNnYtMmg2eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi10b3Age1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNC41IDIyVjEyaC0ydjEwek0yMi41IDEwVjloLTEzdjF6TTE5LjUgMTJ2NmgtMnYtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tdmVydGljYWwtY2VudGVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyLjUgMTUuNXYtNWgydjVoM3YtM2gydjNoM3YxaC0zdjNoLTJ2LTNoLTN2NWgtMnYtNWgtM3YtMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtY29sdW1ucyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgzdjE0SDl6TTE0LjUgOWgzdjE0aC0zek0yMCA5aDN2MTRoLTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLXJvd3Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloMTR2M0g5ek05IDE0LjVoMTR2M0g5ek05IDIwaDE0djNIOXonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtdW5pZm9ybSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgzdjNIOXpNMjAgOWgzdjNoLTN6TTE0LjUgOWgzdjNoLTN6TTkgMTQuNWgzdjNIOXpNMjAgMTQuNWgzdjNoLTN6TTE0LjUgMTQuNWgzdjNoLTN6TTkgMjBoM3YzSDl6TTIwIDIwaDN2M2gtM3pNMTQuNSAyMGgzdjNoLTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpYnJhcnkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjM3MyAyMmgxLjI1OGMuMjgtLjMyLjYxNi0uNTk3Ljk5NS0uODE5IDEuNDc4LS44NjIgNC4wMDUtLjkwOSA1LjM4Ni4xMDlIMjQuNXYtOS4ycy0uNzk3LTIuMjUtNC40Mi0yLjI1Yy0xLjg3NSAwLTIuOTAyLjYwMi0zLjQ1NiAxLjE4NGEyLjU2OCAyLjU2OCAwIDAwLS42Ljk3NmgtLjA0OGEyLjU2OSAyLjU2OSAwIDAwLS42LS45NzZjLS41NTQtLjU4Mi0xLjU4MS0xLjE4NC0zLjQ1Ni0xLjE4NC0zLjYyMyAwLTQuNDIgMi4yNS00LjQyIDIuMjV2OS4xOWgxLjQ4OGMxLjM4Mi0xLjAxOSAzLjkxLS45NyA1LjM4OC0uMTA1LjM4LjIyMy43MTcuNTAzLjk5Ny44MjV6bTEuMTI3LTkuNzExdjguNDU3Yy4xOTUtLjE1Ny40MDMtLjMuNjIyLS40MjguOTI3LS41NDEgMi4xMTUtLjc5NiAzLjI0MS0uNzg3IDEuMDA2LjAwOCAyLjA4MS4yMjcgMi45NTIuNzU5aC4xODV2LTcuOTczYTIuNDE0IDIuNDE0IDAgMDAtLjUwNS0uNTk1Yy0uNDYtLjM5Ny0xLjMzLS44ODItMi45MTUtLjg4Mi0xLjU4NiAwLTIuMzQuNDgzLTIuNjk1LjgzNWExLjc0OSAxLjc0OSAwIDAwLS4zNTMuNDkgMS4wNzYgMS4wNzYgMCAwMC0uMDUyLjEzMWwtLjAwNS4wMTcuMDAxLS4wMDYuMDAyLS4wMDh2LS4wMDVsLjAwMS0uMDAydi0uMDAybC0uMDA1LS4wMDF6bS0xIDBoLS40NzRsLS4wMDYuMDAxdi4wMDJsLjAwMS4wMDIuMDAxLjAwNS4wMDIuMDA4LjAwMS4wMDYtLjAwNS0uMDE3YTEuMDc2IDEuMDc2IDAgMDAtLjA1My0uMTMxIDEuNzQ5IDEuNzQ5IDAgMDAtLjM1My0uNDljLS4zNTQtLjM1MS0xLjEwOC0uODM1LTIuNjk0LS44MzUtMS41ODUgMC0yLjQ1NS40ODUtMi45MTYuODgyYTIuNDExIDIuNDExIDAgMDAtLjUwNC41OTV2Ny45NjNoLjE4NWMuODcyLS41MzIgMS45NDgtLjc1MiAyLjk1NC0uNzU5IDEuMTI4LS4wMDggMi4zMTYuMjQ5IDMuMjQzLjc5Mi4yMTcuMTI3LjQyNC4yNy42MTguNDI2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpbmstYnJva2VuIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTggMTR2LTJhMiAyIDAgMTAtNCAwdjJoLTF2LTJhMyAzIDAgMTE2IDB2MnpNMTkgMThoLTF2MmEyIDIgMCAxMS00IDB2LTJoLTF2MmEzIDMgMCAxMDYgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGluay1jb25uZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAxMGEyIDIgMCAwMTIgMnYyaDF2LTJhMyAzIDAgMTAtNiAwdjJoMXYtMmEyIDIgMCAwMTItMnpNMTggMThoMXYyYTMgMyAwIDExLTYgMHYtMmgxdjJhMiAyIDAgMTA0IDB6Jy8lM0UlM0NwYXRoIGQ9J00xNS41IDEzdjZoMXYtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdC1kZXRhaWxlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEyIDEwaC0ydjFoMnpNMTIgMjBoLTJ2MWgyek0xMCAxNWgydjFoLTJ6TTIyIDEwaC04djFoOHpNMTQgMjBoOHYxaC04ek0yMiAxNWgtOHYxaDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3QtdGlsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQgMTFoLTN2M2gzem0tNC0xdjVoNXYtNXptMTEgMWgtM3YzaDN6bS00LTF2NWg1di01em0tMyA4aC0zdjNoM3ptLTQtMXY1aDV2LTV6bTExIDFoLTN2M2gzem0tNC0xdjVoNXYtNXonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnIGZpbGwtb3BhY2l0eT0nLjgnJTNFJTNDcGF0aCBkPSdNMjMgMTBIOXYxaDE0ek05IDE1LjVoMTR2MUg5ek05IDIxaDE0djFIOXonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbG9jay1vZmYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xOCAxNWguNWEuNS41IDAgMDEuNS41djVhLjUuNSAwIDAxLS41LjVoLTZhLjUuNSAwIDAxLS41LS41di01YS41LjUgMCAwMS41LS41SDE3di0yLjVhMi41IDIuNSAwIDAxNSAwVjE0aC0xdi0xLjVhMS41IDEuNSAwIDAwLTMgMHonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbG9jay1vbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMuNSAxNXYtMS41YTIuNSAyLjUgMCAwMTUgMFYxNWguNWEuNS41IDAgMDEuNS41djVhLjUuNSAwIDAxLS41LjVoLTZhLjUuNSAwIDAxLS41LS41di01YS41LjUgMCAwMS41LS41em00LTEuNVYxNWgtM3YtMS41YTEuNSAxLjUgMCAwMTMgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1taW51cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIxLjUgMTYuNWgtMTF2LTFoMTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXBsYXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzIDEwLjA5OEwyMi40NDMgMTYgMTMgMjEuOTAyem0xIDEuODA0djguMTk2TDIwLjU1NyAxNnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1wbHVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTUuNSAxNS41di01aDF2NWg1djFoLTV2NWgtMXYtNWgtNXYtMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmFuZG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xMTggMTFhMi41IDIuNSAwIDAwLTEuMzM1LjM4NkwxMS4yMjggMTNIMTguNXYxaC04LjQ5N2EuNTEyLjUxMiAwIDAwLS4wMDMuMDUxVjIwLjVjMCAuMjc4LjIyMy41LjQ5Ny41aDcuNjI4YS40OTguNDk4IDAgMDAuMzI4LS4xMjNsMy4yMDYtMi44MDVhMSAxIDAgMDAuMzQxLS43NTNWMTEuNWEuNS41IDAgMDAtLjUtLjV6bS0xLjg2OS0uNDZhMy41IDMuNSAwIDAxMS44Ny0uNTRIMjEuNWExLjUgMS41IDAgMDExLjUgMS41djUuODJhMiAyIDAgMDEtLjY4MyAxLjUwNGwtMy4yMDUgMi44MDVjLS4yNzQuMjQtLjYyNC4zNzEtLjk4Ny4zNzFoLTcuNjI3QzkuNjY4IDIyIDkgMjEuMzI3IDkgMjAuNXYtNi40NDlhMS41IDEuNSAwIDAxLjY5OS0xLjI2OHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTMgMTZhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xNyAxNmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTE3IDE5YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTMgMTlhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAweicvJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00yMi40MDcgMTAuNzFhLjUuNSAwIDAxLS4xMTYuNjk3bC0zLjUgMi41YS41LjUgMCAwMS0uNTgyLS44MTRsMy41LTIuNWEuNS41IDAgMDEuNjk4LjExNnonLyUzRSUzQ3BhdGggZD0nTTE4IDIxdi04aDF2OHonLyUzRSUzQy9nJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZWNlbnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNSAxMnY1aDV2LTFoLTR2LTR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTI0IDE2YTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tMSAwYTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc2l6ZS10by1maXQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J004LjY0NiA5LjM1NEwxMi4yOTMgMTNIMTB2MWg0di00aC0xdjIuMjkzTDkuMzU0IDguNjQ2ek0xOS43MDcgMTNsMy42NDctMy42NDYtLjcwNy0uNzA4TDE5IDEyLjI5M1YxMGgtMXY0aDR2LTF6TTE5LjcwNyAxOWwzLjY0NyAzLjY0Ni0uNzA3LjcwOEwxOSAxOS43MDdWMjJoLTF2LTRoNHYxek0xMi4yOTMgMTlsLTMuNjQ3IDMuNjQ2LjcwOC43MDhMMTMgMTkuNzA3VjIyaDF2LTRoLTR2MXonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzb2x2ZS1maWxsZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDI0YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuOTExLTkuNjM1bC0uODIyLS43My0zLjYxMyA0LjA2NC0yLjU4Ny0yLjU4OC0uNzc4Ljc3OCAzLjQxMyAzLjQxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNvbHZlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTkuOTExIDE0LjM2NWwtLjgyMi0uNzMtMy42MTMgNC4wNjMtMi41ODctMi41ODctLjc3OC43NzggMy40MTMgMy40MTJ6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTI0IDE2YTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tMSAwYTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJldmVyc2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1Ljg1NCA4LjY0NkwxOC4yMDcgMTFsLTIuMzUzIDIuMzU0LS43MDgtLjcwOCAxLjE0Ny0xLjE0NkgxNGMtLjUwMyAwLTEuMjcuMTU1LTEuODk1LjYwNi0uNi40MzItMS4xMDUgMS4xNTctMS4xMDUgMi4zOTR2Ny4yNWgtMVYxNC41YzAtMS41NjMuNjYyLTIuNTg4IDEuNTItMy4yMDYuODMzLS42IDEuODE3LS43OTQgMi40OC0uNzk0aDIuMjkzbC0xLjE0Ny0xLjE0NnpNMjIgMTB2Ny4yNWMwIDEuNTYzLS42NjIgMi41ODgtMS41MiAzLjIwNi0uODMzLjYtMS44MTcuNzk0LTIuNDguNzk0aC0yLjI5M2wxLjE0NyAxLjE0Ni0uNzA4LjcwOC0yLjM1My0yLjM1NCAyLjM1My0yLjM1NC43MDguNzA4LTEuMTQ3IDEuMTQ2SDE4Yy41MDMgMCAxLjI3LS4xNTUgMS44OTUtLjYwNi42LS40MzIgMS4xMDUtMS4xNTcgMS4xMDUtMi4zOTRWMTB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2VhcmNoLWxhcmdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC44NzQgMTkuNTgxYTYgNiAwIDExLjcwNy0uNzA3bDQuMjczIDQuMjcyLS43MDguNzA4ek0yMCAxNWE1IDUgMCAxMS0xMCAwIDUgNSAwIDAxMTAgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZWFyY2gge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjM5NyAxOC42MDVhNC41NTIgNC41NTIgMCAxMS43MDctLjcwN2wzLjI1IDMuMjQ5LS43MDguNzA3em0uNzA2LTMuNTUzYTMuNTUyIDMuNTUyIDAgMTEtNy4xMDMgMCAzLjU1MiAzLjU1MiAwIDAxNy4xMDMgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZXR0aW5ncyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xNi45NTQgOS45MjhsLS4xMzktLjMzMUMxNi42MzUgOS4xNjUgMTYuMzAxIDkgMTYgOXMtLjYzNS4xNjUtLjgxNS41OTdsLS4xMzkuMzMxYy0uNTYgMS4zNDMtMS45OTIgMi4xMy0zLjQyNSAxLjcybC0uNS0uMTQ0Yy0uMzA5LS4wODgtLjYwNi4wMjUtLjgxNS4zMjdhMS4wNSAxLjA1IDAgMDAtLjA0OSAxLjEyM2MuNzQzIDEuMzIzLjQwMiAzLjA2OC0uODYgMy45NS0uMzE4LjIyMi0uNDU2LjYxNC0uMzc1IDEuMDI0LjA4MS40MDkuMzQyLjY2OC42NzMuNzIzbC4xOTUuMDMzYzEuNTI1LjI1MyAyLjUxIDEuNjg3IDIuNDIzIDMuMTgtLjAzLjUwMy4yMi44NjEuNTIgMS4wMjguMjg4LjE2MS42MjMuMTU1LjkyMS0uMTA4bC4zNzMtLjMzYTIuOCAyLjggMCAwMTMuNzQ2IDBsLjM3My4zM2MuMjk4LjI2NC42MzMuMjcuOTIyLjEwOC4zLS4xNjcuNTQ5LS41MjUuNTItMS4wMjgtLjA4OC0xLjQ5My44OTctMi45MjcgMi40MjMtMy4xOGwuMTk0LS4wMzNjLjMzLS4wNTUuNTkyLS4zMTQuNjczLS43MjMuMDgxLS40MS0uMDU3LS44MDItLjM3NS0xLjAyNC0xLjI2Mi0uODgyLTEuNjAzLTIuNjI3LS44Ni0zLjk1YTEuMDUgMS4wNSAwIDAwLS4wNS0xLjEyM2MtLjIwOC0uMzAyLS41MDUtLjQxNS0uODE1LS4zMjdsLS40OTkuMTQzYy0xLjQzMy40MS0yLjg2NS0uMzc2LTMuNDI1LTEuNzE5em0uNzg0LS43MTdjLS42NzQtMS42MTUtMi44MDItMS42MTUtMy40NzYgMGwtLjEzOC4zMzJjLS4zODMuOTE3LTEuMzI2IDEuNDAxLTIuMjI4IDEuMTQzbC0uNDk5LS4xNDNjLTEuNTc1LS40NS0yLjg1NSAxLjM5OC0yLjAxMiAyLjkuNTA1LjkuMjU3IDIuMDctLjU2IDIuNjQtMS4zOTIuOTczLS45MzMgMy4yODIuNzA2IDMuNTU1bC4xOTUuMDMyYy45Ni4xNiAxLjY1IDEuMDkgMS41ODggMi4xMzUtLjEwNCAxLjc4OCAxLjgyIDIuODY0IDMuMTAzIDEuNzI3bC4zNzMtLjMzYTEuOCAxLjggMCAwMTIuNDIgMGwuMzczLjMzYzEuMjg0IDEuMTM3IDMuMjA3LjA2MSAzLjEwMy0xLjcyNy0uMDYxLTEuMDQ2LjYyOC0xLjk3NSAxLjU4OS0yLjEzNWwuMTk0LS4wMzJjMS42MzktLjI3MyAyLjA5OC0yLjU4Mi43MDctMy41NTQtLjgxOC0uNTcyLTEuMDY2LTEuNzQyLS41NjEtMi42NC44NDMtMS41MDMtLjQzNy0zLjM1Mi0yLjAxMi0yLjkwMWwtLjUuMTQzYy0uOS4yNTgtMS44NDQtLjIyNi0yLjIyNi0xLjE0M3onLyUzRSUzQ3BhdGggZD0nTTE2IDE4LjVhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6bTAgMWEzIDMgMCAxMDAtNiAzIDMgMCAwMDAgNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2hhcmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIwIDkuNWEzLjUgMy41IDAgMDAtMS4zODMgNi43MTZBNC41MTMgNC41MTMgMCAwMDE2IDE4LjQzNmE0LjUxMyA0LjUxMyAwIDAwLTIuNjE4LTIuMjIgMy41MDEgMy41MDEgMCAxMC0yLjc2NCAwQTQuNTAyIDQuNTAyIDAgMDA3LjUgMjAuNVYyMmgxN3YtMS41YzAtMi4wMDMtMS4zMDktMy43LTMuMTE4LTQuMjg0QTMuNTAxIDMuNTAxIDAgMDAyMCA5LjV6TTE3LjUgMTNhMi41IDIuNSAwIDExNSAwIDIuNSAyLjUgMCAwMS01IDB6bS0xIDh2LS41YTMuNSAzLjUgMCAxMTcgMHYuNXptLTEtLjV2LjVoLTd2LS41YTMuNSAzLjUgMCAxMTcgMHptLTYtNy41YTIuNSAyLjUgMCAxMTUgMCAyLjUgMi41IDAgMDEtNSAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNtaWxleSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDIwYTQuMDAyIDQuMDAyIDAgMDEtMy44NzQtM2gxLjA0NWEzLjAwMSAzLjAwMSAwIDAwNS42NTggMGgxLjA0NUE0LjAwMiA0LjAwMiAwIDAxMTYgMjB6TTE5LjUgMTQuMTI1YS44NzUuODc1IDAgMTEtMS43NSAwIC44NzUuODc1IDAgMDExLjc1IDB6TTEzLjEyNSAxNWEuODc1Ljg3NSAwIDEwMC0xLjc1Ljg3NS44NzUgMCAwMDAgMS43NXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc29ydC1hbHBoYS1hc2Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTAuODk3IDlMOSAxNGgxLjA3bC4zNzktMWgyLjEzM2wuMzM4IDFoMS4wNTZsLTEuNjktNXptMS4zNDcgM2wtLjY2Ny0xLjk3M0wxMC44MjggMTJ6TTEyLjU1MyAxOUg5LjV2LTFIMTR2Ljk3OUwxMC45MzIgMjJIMTR2MUg5LjV2LS45OTN6TTIwLjUgOC4yOTNsMy4zNTQgMy4zNTMtLjcwOC43MDhMMjEgMTAuMjA3VjIzaC0xVjEwLjIwN2wtMi4xNDYgMi4xNDctLjcwOC0uNzA4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LWFscGhhLWRzYyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMC44OTcgOUw5IDE0aDEuMDdsLjM3OS0xaDIuMTMzbC4zMzggMWgxLjA1NmwtMS42OS01em0xLjM0NyAzbC0uNjY3LTEuOTczTDEwLjgyOCAxMnpNMTIuNTUzIDE5SDkuNXYtMUgxNHYuOTc5TDEwLjkzMiAyMkgxNHYxSDkuNXYtLjk5M3pNMjAgMjEuNzkzVjloMXYxMi43OTNsMi4xNDYtMi4xNDcuNzA4LjcwOC0zLjM1NCAzLjM1My0zLjM1NC0zLjM1My43MDgtLjcwOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc29ydC10b3AtYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMC40NSAxMkgxMHYtMWgxMC40NWMuOTcgMCAxLjM3MiAxLjI0NC41ODQgMS44MTJMMTEuMDUgMjBoOS4yNDNsLTEuNjQ3LTEuNjQ2LjcwOC0uNzA4IDIuODUzIDIuODU0LTIuODUzIDIuODU0LS43MDgtLjcwOEwyMC4yOTMgMjFIMTEuMDVjLS45NyAwLTEuMzcyLTEuMjQ0LS41ODQtMS44MTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIyIDExaC0ydjEwaDJ2MWgtM1YxMGgzem0tMTAtMXYxMkg5di0xaDJWMTFIOXYtMXptNCAzaC0xdjZoMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Bpbm5lciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMTY1IDguNTNhLjUuNSAwIDAxLS40MDQuNThBNyA3IDAgMTAyMyAxNmEuNS41IDAgMDExIDAgOCA4IDAgMTEtOS40MTYtNy44NzQuNS41IDAgMDEuNTguNDA0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0YXItb2ZmIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOCAxNC4wMDRMMTYgOGwtMiA2LjAwNEg4TDEyLjk2IDE4bC0xLjkwNCA2TDE2IDIwbDQuOTQ0IDQtMS45MDQtNkwyNCAxNHptMy4xNjUuOTk4bC0zLjg4Ni4wMDJMMTYgMTEuMTY0bC0xLjI4IDMuODRoLTMuODg1bDMuMjg1IDIuNjQ2LTEuMTAzIDMuNDc3TDE2IDE4LjcxNGwyLjk4MyAyLjQxMy0xLjEwMy0zLjQ3NnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdGFyLW9uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgOGwyIDYuMDA0TDI0IDE0bC00Ljk2IDQgMS45MDQgNkwxNiAyMGwtNC45NDQgNCAxLjkwNC02TDggMTQuMDA0aDZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0cm9rZS13ZWlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDEydjFIMTB6bTAgNGgxMnYySDEwem0xMiA1SDEwdjNoMTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3R5bGVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTEuNSAxM2ExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHpNMTcuNSAxM2ExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHpNMTkgMjAuNWExLjUgMS41IDAgMTEwLTMgMS41IDEuNSAwIDAxMCAzek0xMS41IDE5YTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zd2FwIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMjMgMTMuMTg4bC0xLjE3NSAxLjQ2OGE1LjUgNS41IDAgMDAtMTAuMDAzLTIuMjE5bC44My41NTdhNC41IDQuNSAwIDAxOC4yMTYgMi4wNTdsLTIuMi0xLjQ2Ny0uNTU1LjgzMiAzLjM4MSAyLjI1NCAyLjI4Ny0yLjg1OHpNOSAxNy4xODhsLjc4LjYyNCAxLjE3Ni0xLjQ2OC4wMjYuMTU2YTUuNSA1LjUgMCAwMDkuOTc2IDIuMDY1di0uMDAybC0uODMtLjU1Ny0uMDAxLjAwMWE0LjUgNC41IDAgMDEtOC4yMTQtMi4wNThsMi4yIDEuNDY3LjU1NS0uODMyLTMuMzgyLTIuMjU0eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aGVtZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTBoLTN2MTJoM3ptLTMtMWExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoM2ExIDEgMCAwMDEtMVYxMGExIDEgMCAwMC0xLTF6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTEwLjc1IDIwLjVhLjc1Ljc1IDAgMTExLjUgMCAuNzUuNzUgMCAwMS0xLjUgMHpNMjIgMThhMSAxIDAgMDExIDF2M2ExIDEgMCAwMS0xIDFoLTd2LTFoN3YtM2gtN3YtMXpNMTguMzg1IDE3bDIuNzU3LTIuNzU3YTEgMSAwIDAwMC0xLjQxNWwtMi4xMjEtMi4xMmExIDEgMCAwMC0xLjQxNCAwTDE1IDEzLjMxM3YxLjQxNGwzLjMxNC0zLjMxNCAyLjEyMSAyLjEyMkwxNi45NzEgMTd6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtZ3JpZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDEwaDJ2MmgtMnpNMjAgMTBoMnYyaC0yek0xMiAxNWgtMnYyaDJ6TTIwIDE1aDJ2MmgtMnpNMTIgMjBoLTJ2Mmgyek0yMCAyMGgydjJoLTJ6TTE3IDEwaC0ydjJoMnpNMTUgMTVoMnYyaC0yek0xNyAyMGgtMnYyaDJ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtbGlzdC1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMjIuNXYtMTNoMnYxM3pNMTUgMjIuNXYtMTNoMnYxM3pNMjAgOS41djEzaDJ2LTEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWxpc3QtdmVydGljYWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005LjUgMTBoMTN2MmgtMTN6TTkuNSAxNWgxM3YyaC0xM3pNMjIuNSAyMGgtMTN2MmgxM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGltZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOSA4aC02VjdoNnpNMTYuNSAxN3YtNWgtMXY1YS41LjUgMCAwMDEgMHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjIuNzE1IDEyLjY1bDEuNTI3LTEuNTI5TDIyLjEyMiA5bC0xLjQ4MyAxLjQ4MmE4IDggMCAxMDIuMDc1IDIuMTY3ek0yMyAxN2E3IDcgMCAxMS0yLjM4NC01LjI2M2wuNjQ3LjY0N0E2Ljk3NCA2Ljk3NCAwIDAxMjMgMTd6bS0xLjAwOC01LjNsLjEzLjEyOC43MDYtLjcwNy0uNzA3LS43MDctLjcwMS43MDFjLjIuMTg1LjM5MS4zOC41NzIuNTg1eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRyYXNoIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTQgMTguNXYtNGgxdjR6TTE3IDE4LjV2LTRoMXY0eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOSAxMC41YTIgMiAwIDAwLTItMmgtMmEyIDIgMCAwMC0yIDJoLTN2MWgxdjEwYTIgMiAwIDAwMiAyaDZhMiAyIDAgMDAyLTJ2LTEwaDF2LTF6bS00LTFhMSAxIDAgMDAtMSAxaDRhMSAxIDAgMDAtMS0xem01IDJoLTh2MTBhMSAxIDAgMDAxIDFoNmExIDEgMCAwMDEtMXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS12ZXJ0aWNhbC1wYWRkaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDE0djFIOXptMCAxM2gxNHYxSDl6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE5IDEzaC02djZoNnptLTctMXY4aDh2LTh6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdmlzaWJsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDE4YTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiAxMmE3LjQ5OSA3LjQ5OSAwIDAxNi42MzUgNEE3LjQ5OSA3LjQ5OSAwIDAxMTYgMjBhNy40OTkgNy40OTkgMCAwMS02LjYzNS00QTcuNDk5IDcuNDk5IDAgMDExNiAxMnptMCA3YTYuNDk1IDYuNDk1IDAgMDEtNS40NzgtM0E2LjQ5NSA2LjQ5NSAwIDAxMTYgMTNjMi4zIDAgNC4zMjIgMS4xOTQgNS40NzggM0E2LjQ5NSA2LjQ5NSAwIDAxMTYgMTl6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0td2FybmluZy1sYXJnZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgNmwxMCAxOEg2em0tMSAxMXYtNGgydjR6bTAgMnYyaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0td2FybmluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgOWw4IDE0SDh6bS0xIDguNVYxNGgydjMuNXptMCAxLjV2Mmgydi0yeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaWNvbi1idXR0b24gKiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWhvdmVyLWZpbGwpO1xcbn1cXG5cXG4uaWNvbi1idXR0b246YWN0aXZlLCAuaWNvbi1idXR0b246Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uaWNvbi1idXR0b24tLXNlbGVjdGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24tLXNlbGVjdGVkOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24tLXNlbGVjdGVkOmFjdGl2ZSwgLmljb24tYnV0dG9uLS1zZWxlY3RlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24tLXNlbGVjdGVkICoge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmlucHV0IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLmlucHV0X19maWVsZCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICBtYXJnaW46IDFweCAwIDFweCAwO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmhvdmVyLCAuaW5wdXRfX2ZpZWxkOnBsYWNlaG9sZGVyLXNob3duOmhvdmVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi1tb3otc2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpmb2N1czpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmFjdGl2ZSwgLmlucHV0X19maWVsZDpmb2N1cyB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQ6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5pbnB1dC0td2l0aC1pY29uIC5pbnB1dF9fZmllbGQge1xcbiAgcGFkZGluZy1sZWZ0OiAzMnB4O1xcbn1cXG5cXG4uaW5wdXQgLmljb24ge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwcHg7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgei1pbmRleDogMTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14eHhzbWFsbCkgMCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXAge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiB0b3A7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIDA7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcCAuaWNvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcF9fbXNnIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgMCB2YXIoLS1zaXplLXh4c21hbGwpIDA7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLnJhZGlvIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5yYWRpb19fYnV0dG9uIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5yYWRpb19fYnV0dG9uOmNoZWNrZWQgKyAucmFkaW9fX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJ2RhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgd2lkdGg9XFxcIjZcXFwiIGhlaWdodD1cXFwiNlxcXCIgdmlld0JveD1cXFwiMCAwIDYgNlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIiUzRSUzQ3JlY3Qgd2lkdGg9XFxcIjZcXFwiIGhlaWdodD1cXFwiNlxcXCIgcng9XFxcIjNcXFwiIGZpbGw9XFxcImJsYWNrXFxcIiBmaWxsLW9wYWNpdHk9XFxcIjAuOFxcXCIvJTNFJTNDL3N2ZyUzRSUwQScpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDJweCAycHg7XFxufVxcblxcbi5yYWRpb19fYnV0dG9uOmRpc2FibGVkICsgLnJhZGlvX19sYWJlbCB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5yYWRpb19fYnV0dG9uOmNoZWNrZWQ6ZGlzYWJsZWQgKyAucmFkaW9fX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjayk7XFxufVxcblxcbi5yYWRpb19fbGFiZWwge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogMnB4IDEwcHggMCAtOHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4uc2VjdGlvbi10aXRsZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCBjYWxjKHZhcigtLXNpemUteHhzbWFsbCkgLyAyKSAwIHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbnNlbGVjdC5zZWxlY3QtbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDFweCAwIDFweCAwO1xcbiAgcGFkZGluZzogMHB4IHZhcigtLXNpemUteHhzbWFsbCkgMHB4IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBvdmVyZmxvdy15OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ibGFjazEpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZDpob3ZlciB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbiAqIHtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciAuc2VsZWN0LW1lbnVfX2NhcmV0LCAuc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyAuc2VsZWN0LW1lbnVfX2NhcmV0IHtcXG4gIG9wYWNpdHk6IDEuMDtcXG4gIG1hcmdpbi1sZWZ0OiBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZDpob3ZlciAuc2VsZWN0LW1lbnVfX2NhcmV0IHtcXG4gIG9wYWNpdHk6IDAuMztcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQgLnNlbGVjdC1tZW51X19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbiAgbWFyZ2luLXRvcDogLTJweDtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgd2lkdGg6IDMwcHg7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbi10b3A6IC0xcHg7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMzAlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAzMCUyMDMwJTIyJTIwd2lkdGglM0QlMjIzMCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTE1JTIwMTYuNzA3MS0zLTMlMjAuNzA3MS0uNzA3MSUyMDIuNjQ2NSUyMDIuNjQ2NCUyMDIuNjQ2NC0yLjY0NjQuNzA3MS43MDcxLTMlMjAzLS4zNTM1LjM1MzZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUgLmljb24ge1xcbiAgbWFyZ2luLWxlZnQ6IC04cHg7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgbWFyZ2luLXJpZ2h0OiAwO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWh1ZCk7XFxuICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctaHVkKTtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgMCB2YXIoLS1zaXplLXh4c21hbGwpIDA7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG1hcmdpbjogMDtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICBvdmVyZmxvdy14OiBvdmVybGF5O1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51LS1hY3RpdmUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXIge1xcbiAgd2lkdGg6IDEycHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUJDQVFBQUFDMUhBd0NBQUFBQzBsRVFWUjQybU5rWUFBQUFBWUFBakNCMEM4QUFBQUFTVVZPUks1Q1lJST0pO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcXG4gIGJhY2tncm91bmQtc2l6ZTogMTAwJSBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcXG4gIGJvcmRlcjogc29saWQgM3B4IHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggMTBweCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XFxuICBib3JkZXI6IHNvbGlkIDNweCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IDEwcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBwYWRkaW5nOiAwcHggdmFyKC0tc2l6ZS14c21hbGwpIDBweCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS0tc2VsZWN0ZWQgLnNlbGVjdC1tZW51X19pdGVtLWljb24ge1xcbiAgb3BhY2l0eTogMS4wO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0tbGFiZWwge1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS1pY29uIHtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIG9wYWNpdHk6IDA7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMTMuMjA2OSUyMDUuMjA3MjQtNS41MDAwMiUyMDUuNDk5OTYtLjcwNzExLjcwNzItLjcwNzExLS43MDcyLTMtMi45OTk5NiUyMDEuNDE0MjItMS40MTQyMSUyMDIuMjkyODklMjAyLjI5Mjg5JTIwNC43OTI5My00Ljc5Mjg5eiUyMiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcXG59XFxuXFxuLnNlbGVjdC1tZW51LS1oaWdobGlnaHQsIC5zZWxlY3QtbWVudV9faXRlbTpob3ZlciwgLnNlbGVjdC1tZW51X19pdGVtOmZvY3VzIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2RpdmlkZXItbGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZTQpO1xcbiAgbWFyZ2luLXRvcDogMDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19kaXZpZGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlMik7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMXB4O1xcbiAgbWFyZ2luOiA4cHggMCA3cHggMDtcXG59XFxuXFxuLnN3aXRjaCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLypcXG4gICAgJl9fdG9nZ2xlOmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG4gICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG4gICAgfVxcbiAgICAqL1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGUge1xcbiAgb3BhY2l0eTogMDtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQgKyAuc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQgKyAuc3dpdGNoX19sYWJlbDphZnRlciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTJweCk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkOmRpc2FibGVkICsgLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrKTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmRpc2FibGVkICsgLnN3aXRjaF9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnN3aXRjaF9fbGFiZWwge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCBjYWxjKHZhcigtLXNpemUteGxhcmdlKSAtIDJweCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4LW9wYXF1ZSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbGVmdDogOHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwIDAuMnM7XFxuICB3aWR0aDogMjJweDtcXG59XFxuXFxuLnN3aXRjaF9fbGFiZWw6YWZ0ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4LW9wYXF1ZSk7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbGVmdDogOHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAxMHB4O1xcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnM7XFxuICB3aWR0aDogMTBweDtcXG59XFxuXFxuLnRleHRhcmVhIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1pbi1oZWlnaHQ6IDYycHg7XFxuICBtYXJnaW46IDFweCAwIDFweCAwO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICByZXNpemU6IG5vbmU7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4udGV4dGFyZWE6aG92ZXIsIC50ZXh0YXJlYTpwbGFjZWhvbGRlci1zaG93bjpob3ZlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4udGV4dGFyZWE6Oi1tb3otc2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi50ZXh0YXJlYTo6c2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi50ZXh0YXJlYTo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTpmb2N1czpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4udGV4dGFyZWE6YWN0aXZlLCAudGV4dGFyZWE6Zm9jdXMge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi50ZXh0YXJlYTpkaXNhYmxlZCwgLnRleHRhcmVhOmRpc2FibGVkOmhvdmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTpkaXNhYmxlZDphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnR5cGUge1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICAvKiBzaXplcyAqL1xcbiAgLyogd2VpZ2h0cyAqL1xcbiAgLyogbGV0dGVyIHNwYWNpbmcgYWRqdXN0bWVudHMgYmFzZWQgcG9zL25lZyBhcHBsaWNhdGlvbiAqL1xcbn1cXG5cXG4udHlwZS0tc21hbGwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtc21hbGwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWxhcmdlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLWxhcmdlKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWxhcmdlKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1sYXJnZSk7XFxufVxcblxcbi50eXBlLS14bGFyZ2Uge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteGxhcmdlKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0LWxhcmdlKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14bGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0tbWVkaXVtIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbn1cXG5cXG4udHlwZS0tYm9sZCB7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSArIC50eXBlLS1zbWFsbCB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGwpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSArIC50eXBlLS1sYXJnZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctbGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSArIC50eXBlLS14bGFyZ2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhsYXJnZSk7XFxufVxcblxcbi50eXBlLS1pbmxpbmUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi1pbmZvLnN2Z1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi10YWJsZS1jcmVhdG9yLnN2Z1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRhYmxlLWNyZWF0b3Iuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLXRoZW1lLXN3aXRjaGVyLnN2Z1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF80X19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi1kYXJrLXRoZW1lLXN3aXRjaGVyLnN2Z1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF81X19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi1kZXNpZ24tbGludGVyLnN2Z1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF82X19fIGZyb20gXCIuLi9hc3NldHMvaWNvbi1kYXJrLWRlc2lnbi1saW50ZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLW1vcmUuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzhfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWhlbHAuc3ZnXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzNfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF80X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF81X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNV9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNl9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzZfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzdfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF83X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF84X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfOF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJib2R5IHtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIFxcXCJTZWdvZSBVSVxcXCIsIFJvYm90bywgSGVsdmV0aWNhLFxcbiAgICBBcmlhbCwgc2Fucy1zZXJpZiwgXFxcIkFwcGxlIENvbG9yIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIEVtb2ppXFxcIiwgXFxcIlNlZ29lIFVJIFN5bWJvbFxcXCI7XFxufVxcblxcbi5maWdtYS1saWdodCB7XFxuICBjb2xvci1zY2hlbWU6IGxpZ2h0O1xcbn1cXG5cXG4uZmlnbWEtZGFyayB7XFxuICBjb2xvci1zY2hlbWU6IGRhcms7XFxufVxcblxcbi5hcHAge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBDaHJvbWUvT3BlcmEvU2FmYXJpICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcbjo6LW1vei1wbGFjZWhvbGRlciB7XFxuICAvKiBGaXJlZm94IDE5KyAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIC8qIElFIDEwKyAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46LW1vei1wbGFjZWhvbGRlciB7XFxuICAvKiBGaXJlZm94IDE4LSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG5cXG5oNCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBtYXJnaW4tdG9wOiA0cHg7XFxuICBtYXJnaW4tYm90dG9tOiA0cHg7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBmb250LXdlaWdodDogNzAwO1xcbn1cXG5cXG5oNiB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIG1hcmdpbjogMCAwIDEwcHg7XFxuICBsaW5lLWhlaWdodDogMTRweDtcXG59XFxuXFxuc2VsZWN0IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBwYWRkaW5nOiAwIDMycHggMCA4cHg7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxufVxcblxcbmEge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbn1cXG5cXG5zZWxlY3Q6Zm9jdXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgIzE4YTBmYjtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMThhMGZiO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuaHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG50YWJsZSB0ciB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG50YWJsZSB0ZCB7XFxuICBwYWRkaW5nOiB1bnNldDtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgaGVpZ2h0OiAyNnB4O1xcbiAgcGFkZGluZy1yaWdodDogNnB4O1xcbiAgcGFkZGluZy1ib3R0b206IDZweDtcXG4gIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xcbn1cXG5cXG4ucmVzaXplciB7XFxuICB6LWluZGV4OiA5OTtcXG4gIGN1cnNvcjogbndzZS1yZXNpemU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDA7XFxuICByaWdodDogMDtcXG4gIGhlaWdodDogMTRweDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZTtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uIHtcXG4gIGhlaWdodDogNDBweDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBwYWRkaW5nOiAwO1xcbiAgbWFyZ2luOiAwO1xcbiAgcG9zaXRpb246IHN0aWNreTtcXG4gIHotaW5kZXg6IDEwMDtcXG4gIHRvcDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbiAgZ2FwOiAwcHg7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbjpob3ZlciAubGFuZ3VhZ2UtYmV0YS10YWIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYiB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDEwcHg7XFxuICBtaW4td2lkdGg6IDM1cHg7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuNzUgZWFzZS1vdXQ7XFxufVxcblxcbi5iYWNrLXRhYiB7XFxuICBvcGFjaXR5OiAwLjU1O1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuYmFjay10YWIge1xcbiAgZmlsdGVyOiBpbnZlcnQoMSk7XFxufVxcblxcbi5iYWNrLXRhYjpob3ZlciB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiOm5vdCguYWN0aXZlKSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIuYWN0aXZlIHtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5kaW1lbnNpb25zLXNlbGVjdGlvbi1jb250YWluZXIsXFxuLmxhbmd1YWdlLWxpbnRlci1jb250YWluZXIge1xcbiAgcGFkZGluZzogMjNweDtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmlucHV0X19yYWRpbyBpbnB1dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgaGVpZ2h0OiAwO1xcbiAgd2lkdGg6IDA7XFxufVxcblxcbnRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbCB7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjY2RkM2Q1O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG5cXG4uZmlnbWEtZGFyayB0YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxufVxcblxcbnRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMzE1KTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA0MDQwO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICM3YjgzOGE7XFxufVxcblxcbnRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayB0YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG59XFxuXFxudGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2UxZWRmZjtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayB0YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTAzMTU2O1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nLXJpZ2h0OiA4cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMjhweDtcXG4gIG1hcmdpbjogMXB4IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5cXG4uY29sdW1uLWNvbmZpZ3VyYXRpb24tYm9keSAuaW5wdXQtY29udGFpbmVyIHtcXG4gIHBhZGRpbmctcmlnaHQ6IDA7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIHBhZGRpbmctbGVmdDogOHB4O1xcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDQ7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5pbnB1dC1jb250YWluZXIgLmxhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAzMnB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkO1xcbiAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgZm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgcGFkZGluZzogMCAwIDAgN3B4O1xcbiAgcGFkZGluZy1sZWZ0OiA3cHg7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgbWluLXdpZHRoOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaDUubGFiZWwge1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICB3aWR0aDogY2FsYygxMDAlICsgOHB4KTtcXG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICByaWdodDogOHB4O1xcbiAgZ2FwOiA4cHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzLFxcbi5udW1iZXItb2Ytcm93cyB7XFxuICBib3JkZXI6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29sczpmb2N1cyxcXG4ubnVtYmVyLW9mLXJvd3M6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmN0YS1jb250YWluZXIge1xcbiAgd2lkdGg6IDg0JTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICByaWdodDogMjNweDtcXG4gIGJvdHRvbTogMjNweDtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciBoNiB7XFxuICBtYXJnaW46IDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXSB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICB3aWR0aDogYXV0bztcXG4gIG1hcmdpbjogMDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciA6d2hlcmUoaW5wdXRbdHlwZT1cXFwiY2hlY2tib3hcXFwiXTpob3ZlciwgbGFiZWxbZm9yXTpob3Zlcikge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1jdGEtY29udGFpbmVyIC5pbnB1dC1jb250YWluZXIge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgZ2FwOiA0cHg7XFxufVxcblxcbi50b29sdGlwLXRyaWdnZXIge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIG1hcmdpbi1sZWZ0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fICsgXCIpO1xcbn1cXG5cXG4udG9vbHRpcC10cmlnZ2VyOmhvdmVyIH4gLnRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHdpZHRoOiAyMDFweDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI1cHg7XFxuICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gOTAlKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigwIDAgMCAvIDc1JSk7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBwYWRkaW5nLWlubGluZTogMTBweDtcXG4gIGxlZnQ6IDI1cHg7XFxuICBsaW5lLWhlaWdodDogMTM1JTtcXG4gIHBhZGRpbmctYmxvY2s6IDZweDtcXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4udG9vbHRpcDphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA0MXB4O1xcbiAgbGVmdDogOTdweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHJnYigwIDAgMCAvIDgwJSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiAxMDZweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLnNlbGVjdC1pbnB1dC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IGNhbGMoNXB4ICsgOHB4KTtcXG4gIHRvcDogMTJweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg4cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctZGlzYWJsZWQpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4uY29sdW1uLWNvbmZpZ3VyYXRpb24taW5wdXRbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi8qLS0gVG9nZ2xlIHN0eWxlcyAtLSovXFxuLyogVGhlIHN3aXRjaCAtIHRoZSBib3ggYXJvdW5kIHRoZSBzbGlkZXIgKi9cXG4udWktc3dpdGNoIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAyNHB4O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNkMWQ0ZDQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXI6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tZGlzYWJsZWQpO1xcbn1cXG5cXG4vKiBIaWRlIGRlZmF1bHQgSFRNTCBjaGVja2JveCAqL1xcbi51aS1zd2l0Y2ggaW5wdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG5cXG4vKiBUaGUgc2xpZGVyICovXFxuLnNsaWRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXRlcnRpYXJ5KTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbi5zbGlkZXI6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBsZWZ0OiAxcHg7XFxuICBib3R0b206IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tb25icmFuZCk7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5cXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyOmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTJweCk7XFxufVxcblxcbi8qIFJvdW5kZWQgc2xpZGVycyAqL1xcbi5zbGlkZXIucm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogMzRweDtcXG59XFxuXFxuLnNsaWRlci5yb3VuZDpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4vKi0tIExhbmd1YWdlIGxpbnRlciAtLSovXFxuXFxuLmxhbmd1YWdlLWxpbnRlci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5zZWxlY3Rpb24taGFzLWNoYW5nZWQge1xcbiAgcGFkZGluZy1ib3R0b206IDcwcHg7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZSxcXG4uc3VnZ2VzdGlvbi1saXN0IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRleHQtbGF5ZXItbmF2IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDQ3cHg7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG59XFxuXFxuLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwLjA1cyBvcGFjaXR5IGVhc2Utb3V0O1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIuYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi8qLS0gSG9tZSAtLSovXFxuXFxuLmhvbWUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgZ2FwOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiAxNHB4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDFkNGQ0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMjUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCAwIDAgLyAzMCUpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDQ1JSk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBmbGV4LXNocmluazogMDtcXG4gIHdpZHRoOiAzNHB4O1xcbiAgaGVpZ2h0OiAzNHB4O1xcbn1cXG5cXG4udGFibGUtY3JlYXRvciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAudGFibGUtY3JlYXRvciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fICsgXCIpO1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfM19fXyArIFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRoZW1lLXN3aXRjaGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzRfX18gKyBcIik7XFxufVxcblxcbi5kZXNpZ24tbGludGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gKyBcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC5kZXNpZ24tbGludGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzZfX18gKyBcIik7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb3B5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAzcHg7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5ob21lLXN1cHBvcnQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAyNHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgd2lkdGg6IGNhbGMoMTAwJSAtIDQ4cHgpO1xcbn1cXG5cXG4uaG9tZS1zdXBwb3J0IGEge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbn1cXG5cXG4vKi0tIENvbG9yIGxpbnRlciAtLSovXFxuXFxuLmNvbG9yLWxpbnRlci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDI0cHg7XFxuICBmbGV4LWdyb3c6IDE7XFxuICBwYWRkaW5nOiAyNHB4O1xcbiAgb3ZlcmZsb3c6IGF1dG87XFxuICBtYXgtaGVpZ2h0OiBjYWxjKDEwMCUgLSAxMDVweCk7XFxufVxcblxcbi5zdW1tYXJ5LWlzLWxvYWRpbmcsXFxuLm5vLXNlbGVjdGlvbi1tYWRlIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBwbGFjZS1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1zdW1tYXJ5LWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwIDAgOHB4O1xcbiAgZm9udC1zaXplOiAxOHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctc3VtbWFyeS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBsaW5lLWhlaWdodDogMTQ1JTtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5jb2xvci10aWxlcy1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE1MCAxNTAgMTUwIC8gNDUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA5NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5leHBhbmRlZCB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tZmlnbWEtY29sb3ItYmctYnJhbmQtdGVydGlhcnkpO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25icmFuZCk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5leHBhbmRlZDpob3ZlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tZmlnbWEtY29sb3ItYmctYnJhbmQtdGVydGlhcnkpO1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25icmFuZCk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYigwIDEyNSA1MCAvIDglKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkLmV4cGFuZGVkLFxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZC5leHBhbmRlZDpob3ZlciB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiKDAgMTI1IDUwIC8gOCUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHJnYigxNTAgMTUwIDE1MCAvIDYwJSk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3gtc2hhZG93OiAwIDJweCAwIHJnYigwIDAgMCAvIDMlKSwgMCAxcHggM3B4IHJnYmEoMCAwIDAgLyAxJSksXFxuICAgIDAgOHB4IDdweCByZ2JhKDAgMCAwIC8gMiUpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgei1pbmRleDogMTA7XFxufVxcblxcbi5jb2xvci10aWxlLWhvdmVyLXN0YXRlLWRpc2FibGVkLmNvbG9yLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1kaXNhYmxlZCk7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lcjphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxuICBib3gtc2hhZG93OiAwIDFweCAwIHJnYigwIDAgMCAvIDUlKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZzogMTBweCAxNnB4IDEycHg7XFxuICBnYXA6IDdweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtdGl0bGUtc2VjdGlvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLmN1c3RvbS1sYXllci1pY29uIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiA3cHg7XFxuICBvcGFjaXR5OiAwLjU7XFxufVxcblxcbi5maWdtYS1kYXJrIC5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIGltZyxcXG4uZmlnbWEtZGFyayAuY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSAuaWNvbiB7XFxuICBmaWx0ZXI6IGludmVydCgxKTtcXG59XFxuXFxuLmljb24ubGF5ZXItaWNvbiB7XFxuICBtYXJnaW4tcmlnaHQ6IDdweDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGhlaWdodDogMTdweDtcXG4gIHdpZHRoOiAxN3B4O1xcbiAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KTtcXG4gIG1hcmdpbi1sZWZ0OiAtMnB4O1xcbiAgb3BhY2l0eTogMC42NTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogNnB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLWhlYWRpbmcge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcyk7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGlzdCB7XFxuICBwYWRkaW5nOiAwO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBnYXA6IDE0cHg7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzLXNlY29uZGFyeSk7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIi9cXFwiO1xcbiAgbWFyZ2luLWxlZnQ6IDE0cHg7XFxuICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzLXRlcnRpYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZSB7XFxuICBmbGV4LXNocmluazogMDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1jb2xvciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbG9yLXNhbXBsZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyAxMDAlKTtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYigxNTAgMTUwIDE1MCAvIDI1JSk7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5idG4tY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDIzcHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBsZWZ0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF83X19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcblxcbiAgdGV4dC1pbmRlbnQ6IDIwMCU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLm1lbnUtYWN0aXZlIC5idG4tY29sb3ItdGlsZS1tZW51IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXNlY29uZGFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idG4tY29sb3ItdGlsZS1tZW51OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXRlcnRpYXJ5KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgcGFkZGluZzogMTJweCAxNnB4O1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IDAgMCAzcHggM3B4O1xcbiAgYm9yZGVyLXRvcDogMXB4IGRvdHRlZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlcy1jb250YWluZXI6aG92ZXIge1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbn1cXG5cXG4uZXhwYW5kZWQgLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGdhcDogNHB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVscCB7XFxuICB3aWR0aDogMThweDtcXG4gIGhlaWdodDogMThweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzhfX18gKyBcIik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBvcGFjaXR5OiAwLjk7XFxuXFxuICB0ZXh0LWluZGVudDogMjAwJTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWxwOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogOXB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1wcmltYXJ5LWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB3aWR0aDogMTAwJTtcXG4gIGdhcDogMnB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiA2cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHBhZGRpbmc6IDAgMTZweCAwIDI0cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBvcGFjaXR5OiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgIHRvIHJpZ2h0LFxcbiAgICB0cmFuc3BhcmVudCxcXG4gICAgdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KSAyMCVcXG4gICk7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDc1cyBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIgLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXNhbXBsZSB7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYigxNTAgMTUwIDE1MCAvIDI1JSk7XFxufVxcblxcbi5jb2xvci1saW50aW5nLWZvb3RlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIHBhZGRpbmc6IDE2cHggMjRweDtcXG4gIGdhcDogOHB4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtaW4td2lkdGg6IDEyNXB4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMjBweDtcXG4gIHJpZ2h0OiAtN3B4O1xcbiAgei1pbmRleDogMTAwMDtcXG4gIHBhZGRpbmc6IDhweCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjMyMztcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZ2FwOiA4cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbXMge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZzogNXB4IDE0cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4YTBmYjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudSBociB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDE0NjQ2O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXgtd2lkdGg6IDkwJTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWhlYWRpbmcge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIgLmJ0biB7XFxuICBtYXJnaW4tdG9wOiAxMHB4O1xcbn1cXG5cXG4uY29sb3ItbG9hZGVyLFxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3JkZXI6IDJweCBzb2xpZDtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctdGVydGlhcnkpO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXNlY29uZGFyeSk7XFxuICBhbmltYXRpb246IHNwaW4gMXMgaW5maW5pdGUgbGluZWFyO1xcblxcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG59XFxuXFxuQGtleWZyYW1lcyBzcGluIHtcXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMXR1cm4pO1xcbiAgfVxcbn1cXG5cXG4vKi0tIFRoZW1lIHN3aXRjaGVyIHN0eWxlcyAtLSovXFxuLnRoZW1lLXN3aXRjaGVyLWNvbnRhaW5lciB7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXItaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCAzcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTZweDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNzVzIGVhc2Utb3V0O1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciAudGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBhY2NlbnQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDlweDtcXG4gIHJpZ2h0OiA4cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyAzNSUpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHQge1xcbiAgcGFkZGluZzogOHB4IDEwcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG5cXG5bY2xhc3MqPVxcXCJtb2RhbC0tZnJhbWVcXFwiXSB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IC0ycHg7XFxuICByaWdodDogMTBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGFuaW1hdGlvbjogc3BpbiAwLjVzIGluZmluaXRlIGxpbmVhcjtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL2FwcC9zdHlsZXMvdWkuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UsWUFBWTtFQUNaLFNBQVM7RUFDVDsrRUFDNkU7QUFDL0U7O0FBRUE7RUFDRSxtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxrQkFBa0I7QUFDcEI7O0FBRUE7RUFDRSxhQUFhO0VBQ2Isc0JBQXNCO0VBQ3RCLFlBQVk7RUFDWix1Q0FBdUM7QUFDekM7O0FBRUE7RUFDRSx3QkFBd0I7RUFDeEIsdUNBQXVDO0FBQ3pDO0FBQ0E7RUFDRSxnQkFBZ0I7RUFDaEIsdUNBQXVDO0FBQ3pDO0FBQ0E7RUFDRSxXQUFXO0VBQ1gsdUNBQXVDO0FBQ3pDO0FBQ0E7RUFDRSxnQkFBZ0I7RUFDaEIsdUNBQXVDO0FBQ3pDOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCLGVBQWU7RUFDZixrQkFBa0I7RUFDbEIsZUFBZTtFQUNmLGdCQUFnQjtBQUNsQjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQix3Q0FBd0M7RUFDeEMsZ0JBQWdCO0VBQ2hCLGlCQUFpQjtBQUNuQjs7QUFFQTtFQUNFLGFBQWE7RUFDYixtQkFBbUI7RUFDbkIsNkJBQTZCO0VBQzdCLFlBQVk7RUFDWixxQkFBcUI7RUFDckIsc0JBQXNCO0VBQ3RCLGtCQUFrQjtFQUNsQiwyQ0FBMkM7RUFDM0MsdUNBQXVDO0VBQ3ZDLGVBQWU7RUFDZiw4QkFBOEI7RUFDOUIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0Usb0NBQW9DO0FBQ3RDOztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLDZCQUE2QjtFQUM3QixhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxZQUFZO0VB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QUFZO0VBQ1osV0FBVztFQUNYLHVDQUF1QztFQUN2QyxvQ0FBb0M7QUFDdENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiYm9keSB7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBcXFwiU2Vnb2UgVUlcXFwiLCBSb2JvdG8sIEhlbHZldGljYSxcXG4gICAgQXJpYWwsIHNhbnMtc2VyaWYsIFxcXCJBcHBsZSBDb2xvciBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBFbW9qaVxcXCIsIFxcXCJTZWdvZSBVSSBTeW1ib2xcXFwiO1xcbn1cXG5cXG4uZmlnbWEtbGlnaHQge1xcbiAgY29sb3Itc2NoZW1lOiBsaWdodDtcXG59XFxuXFxuLmZpZ21hLWRhcmsge1xcbiAgY29sb3Itc2NoZW1lOiBkYXJrO1xcbn1cXG5cXG4uYXBwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG46Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogQ2hyb21lL09wZXJhL1NhZmFyaSAqL1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG46Oi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOSsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICAvKiBJRSAxMCsgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOi1tb3otcGxhY2Vob2xkZXIge1xcbiAgLyogRmlyZWZveCAxOC0gKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuaDQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgbWFyZ2luLXRvcDogNHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogNHB4O1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG59XFxuXFxuaDYge1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICBtYXJnaW46IDAgMCAxMHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0cHg7XFxufVxcblxcbnNlbGVjdCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgcGFkZGluZzogMCAzMnB4IDAgOHB4O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbn1cXG5cXG5hIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuc2VsZWN0OmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkICMxOGEwZmI7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzE4YTBmYjtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbmhyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGhlaWdodDogMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxudGFibGUgdHIge1xcbiAgYm9yZGVyOiBub25lO1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxudGFibGUgdGQge1xcbiAgcGFkZGluZzogdW5zZXQ7XFxuICB3aWR0aDogMjZweDtcXG4gIGhlaWdodDogMjZweDtcXG4gIHBhZGRpbmctcmlnaHQ6IDZweDtcXG4gIHBhZGRpbmctYm90dG9tOiA2cHg7XFxuICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcXG59XFxuXFxuLnJlc2l6ZXIge1xcbiAgei1pbmRleDogOTk7XFxuICBjdXJzb3I6IG53c2UtcmVzaXplO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBoZWlnaHQ6IDE0cHg7XFxuICB3aWR0aDogMTRweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjFzIGVhc2U7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbiB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcGFkZGluZzogMDtcXG4gIG1hcmdpbjogMDtcXG4gIHBvc2l0aW9uOiBzdGlja3k7XFxuICB6LWluZGV4OiAxMDA7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGdhcDogMHB4O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb246aG92ZXIgLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4O1xcbiAgbWluLXdpZHRoOiAzNXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjc1IGVhc2Utb3V0O1xcbn1cXG5cXG4uYmFjay10YWIge1xcbiAgb3BhY2l0eTogMC41NTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmJhY2stdGFiIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uYmFjay10YWI6aG92ZXIge1xcbiAgb3BhY2l0eTogMTtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYjpub3QoLmFjdGl2ZSkge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiLmFjdGl2ZSB7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1zZWxlY3Rpb24tY29udGFpbmVyLFxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIHBhZGRpbmc6IDIzcHg7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi5pbnB1dF9fcmFkaW8gaW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgb3BhY2l0eTogMDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGhlaWdodDogMDtcXG4gIHdpZHRoOiAwO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwge1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggI2NkZDNkNTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWw6aG92ZXIge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiYSgwLCAwLCAwLCAwLjMxNSk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQwNDA0MDtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjN2I4MzhhO1xcbn1cXG5cXG50YWJsZSBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxufVxcblxcbnRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICNlMWVkZmY7XFxuICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgdGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuYWN0aXZlLmhvdmVyZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzEwMzE1NjtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZy1yaWdodDogOHB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDI4cHg7XFxuICBtYXJnaW46IDFweCAwO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLXJpZ2h0OiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBwYWRkaW5nLWxlZnQ6IDhweDtcXG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uaW5wdXQtY29udGFpbmVyIC5sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMzJweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciBpbnB1dCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0LWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtcXG4gIGJvcmRlci1sZWZ0LXdpZHRoOiAxcHg7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGZvY3VzIHtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaW5wdXQge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgMCAwIDdweDtcXG4gIHBhZGRpbmctbGVmdDogN3B4O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIG1pbi13aWR0aDogMDtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItc2VsZWN0ZWQpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGg1LmxhYmVsIHtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgd2lkdGg6IGNhbGMoMTAwJSArIDhweCk7XFxuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcmlnaHQ6IDhweDtcXG4gIGdhcDogOHB4O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciB7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi50YWJsZS1kaW1lbnNpb25zLWNvbmZpZyAuaW5wdXQtY29udGFpbmVyIGlucHV0OmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbi5udW1iZXItb2YtY29scyxcXG4ubnVtYmVyLW9mLXJvd3Mge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4ubnVtYmVyLW9mLWNvbHM6Zm9jdXMsXFxuLm51bWJlci1vZi1yb3dzOmZvY3VzIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5jdGEtY29udGFpbmVyIHtcXG4gIHdpZHRoOiA4NCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgcmlnaHQ6IDIzcHg7XFxuICBib3R0b206IDIzcHg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1jdGEtY29udGFpbmVyIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIgaDYge1xcbiAgbWFyZ2luOiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl0ge1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgd2lkdGg6IGF1dG87XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgOndoZXJlKGlucHV0W3R5cGU9XFxcImNoZWNrYm94XFxcIl06aG92ZXIsIGxhYmVsW2Zvcl06aG92ZXIpIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciAuaW5wdXQtY29udGFpbmVyIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIGdhcDogNHB4O1xcbn1cXG5cXG4udG9vbHRpcC10cmlnZ2VyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBtYXJnaW4tbGVmdDogNnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1pbmZvLnN2Z1xcXCIpO1xcbn1cXG5cXG4udG9vbHRpcC10cmlnZ2VyOmhvdmVyIH4gLnRvb2x0aXAge1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcblxcbi50b29sdGlwIHtcXG4gIHdpZHRoOiAyMDFweDtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI1cHg7XFxuICBjb2xvcjogcmdiKDI1NSAyNTUgMjU1IC8gOTAlKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigwIDAgMCAvIDc1JSk7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBwYWRkaW5nLWlubGluZTogMTBweDtcXG4gIGxlZnQ6IDI1cHg7XFxuICBsaW5lLWhlaWdodDogMTM1JTtcXG4gIHBhZGRpbmctYmxvY2s6IDZweDtcXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG5cXG4udG9vbHRpcDphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiA0MXB4O1xcbiAgbGVmdDogOTdweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHJnYigwIDAgMCAvIDgwJSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiAxMDZweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLnNlbGVjdC1pbnB1dC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IGNhbGMoNXB4ICsgOHB4KTtcXG4gIHRvcDogMTJweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg4cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctZGlzYWJsZWQpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4uY29sdW1uLWNvbmZpZ3VyYXRpb24taW5wdXRbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi8qLS0gVG9nZ2xlIHN0eWxlcyAtLSovXFxuLyogVGhlIHN3aXRjaCAtIHRoZSBib3ggYXJvdW5kIHRoZSBzbGlkZXIgKi9cXG4udWktc3dpdGNoIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAyNHB4O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNkMWQ0ZDQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXI6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tZGlzYWJsZWQpO1xcbn1cXG5cXG4vKiBIaWRlIGRlZmF1bHQgSFRNTCBjaGVja2JveCAqL1xcbi51aS1zd2l0Y2ggaW5wdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG5cXG4vKiBUaGUgc2xpZGVyICovXFxuLnNsaWRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXRlcnRpYXJ5KTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbi5zbGlkZXI6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBsZWZ0OiAxcHg7XFxuICBib3R0b206IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tb25icmFuZCk7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5cXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyOmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTJweCk7XFxufVxcblxcbi8qIFJvdW5kZWQgc2xpZGVycyAqL1xcbi5zbGlkZXIucm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogMzRweDtcXG59XFxuXFxuLnNsaWRlci5yb3VuZDpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4vKi0tIExhbmd1YWdlIGxpbnRlciAtLSovXFxuXFxuLmxhbmd1YWdlLWxpbnRlci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5zZWxlY3Rpb24taGFzLWNoYW5nZWQge1xcbiAgcGFkZGluZy1ib3R0b206IDcwcHg7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZSxcXG4uc3VnZ2VzdGlvbi1saXN0IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRleHQtbGF5ZXItbmF2IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDQ3cHg7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG59XFxuXFxuLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwLjA1cyBvcGFjaXR5IGVhc2Utb3V0O1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIuYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi8qLS0gSG9tZSAtLSovXFxuXFxuLmhvbWUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgZ2FwOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiAxNHB4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDFkNGQ0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMjUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCAwIDAgLyAzMCUpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDQ1JSk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBmbGV4LXNocmluazogMDtcXG4gIHdpZHRoOiAzNHB4O1xcbiAgaGVpZ2h0OiAzNHB4O1xcbn1cXG5cXG4udGFibGUtY3JlYXRvciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLXRhYmxlLWNyZWF0b3Iuc3ZnXFxcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2Z1xcXCIpO1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi10aGVtZS1zd2l0Y2hlci5zdmdcXFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRoZW1lLXN3aXRjaGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay10aGVtZS1zd2l0Y2hlci5zdmdcXFwiKTtcXG59XFxuXFxuLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kZXNpZ24tbGludGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWRhcmstZGVzaWduLWxpbnRlci5zdmdcXFwiKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvcHkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDNweDtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNDhweCk7XFxufVxcblxcbi5ob21lLXN1cHBvcnQgYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi8qLS0gQ29sb3IgbGludGVyIC0tKi9cXG5cXG4uY29sb3ItbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMjRweDtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEwNXB4KTtcXG59XFxuXFxuLnN1bW1hcnktaXMtbG9hZGluZyxcXG4ubm8tc2VsZWN0aW9uLW1hZGUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCA4cHg7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDUlO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTUwIDE1MCAxNTAgLyA0NSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDk1cyBlYXNlLW91dDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiKDAgMTI1IDUwIC8gOCUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQsXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiKDE1MCAxNTAgMTUwIC8gNjAlKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDAgcmdiKDAgMCAwIC8gMyUpLCAwIDFweCAzcHggcmdiYSgwIDAgMCAvIDElKSxcXG4gICAgMCA4cHggN3B4IHJnYmEoMCAwIDAgLyAyJSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWQuY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiKDAgMCAwIC8gNSUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxMHB4IDE2cHggMTJweDtcXG4gIGdhcDogN3B4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS10aXRsZS1zZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY3VzdG9tLWxheWVyLWljb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tcmlnaHQ6IDdweDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gaW1nLFxcbi5maWdtYS1kYXJrIC5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIC5pY29uIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uaWNvbi5sYXllci1pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgaGVpZ2h0OiAxN3B4O1xcbiAgd2lkdGg6IDE3cHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XFxuICBvcGFjaXR5OiAwLjY1O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtaGVhZGluZyB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0IHtcXG4gIHBhZGRpbmc6IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTRweDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3Mtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxuICBtYXJnaW4tbGVmdDogMTRweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MtdGVydGlhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWNvbG9yIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29sb3Itc2FtcGxlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDEwMCUpO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMjNweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tbW9yZS5zdmdcXFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIHBhZGRpbmc6IDEycHggMTZweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDtcXG4gIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyOmhvdmVyIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmV4cGFuZGVkIC5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHAge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWhlbHAuc3ZnXFxcIik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBvcGFjaXR5OiAwLjk7XFxuXFxuICB0ZXh0LWluZGVudDogMjAwJTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWxwOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogOXB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1wcmltYXJ5LWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB3aWR0aDogMTAwJTtcXG4gIGdhcDogMnB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiA2cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHBhZGRpbmc6IDAgMTZweCAwIDI0cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBvcGFjaXR5OiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgIHRvIHJpZ2h0LFxcbiAgICB0cmFuc3BhcmVudCxcXG4gICAgdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KSAyMCVcXG4gICk7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDc1cyBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIgLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXNhbXBsZSB7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYigxNTAgMTUwIDE1MCAvIDI1JSk7XFxufVxcblxcbi5jb2xvci1saW50aW5nLWZvb3RlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIHBhZGRpbmc6IDE2cHggMjRweDtcXG4gIGdhcDogOHB4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtaW4td2lkdGg6IDEyNXB4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMjBweDtcXG4gIHJpZ2h0OiAtN3B4O1xcbiAgei1pbmRleDogMTAwMDtcXG4gIHBhZGRpbmc6IDhweCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjMyMztcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZ2FwOiA4cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbXMge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZzogNXB4IDE0cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4YTBmYjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudSBociB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDE0NjQ2O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXgtd2lkdGg6IDkwJTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWhlYWRpbmcge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIgLmJ0biB7XFxuICBtYXJnaW4tdG9wOiAxMHB4O1xcbn1cXG5cXG4uY29sb3ItbG9hZGVyLFxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3JkZXI6IDJweCBzb2xpZDtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctdGVydGlhcnkpO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXNlY29uZGFyeSk7XFxuICBhbmltYXRpb246IHNwaW4gMXMgaW5maW5pdGUgbGluZWFyO1xcblxcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG59XFxuXFxuQGtleWZyYW1lcyBzcGluIHtcXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMXR1cm4pO1xcbiAgfVxcbn1cXG5cXG4vKi0tIFRoZW1lIHN3aXRjaGVyIHN0eWxlcyAtLSovXFxuLnRoZW1lLXN3aXRjaGVyLWNvbnRhaW5lciB7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXItaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCAzcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTZweDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNzVzIGVhc2Utb3V0O1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciAudGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBhY2NlbnQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDlweDtcXG4gIHJpZ2h0OiA4cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyAzNSUpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHQge1xcbiAgcGFkZGluZzogOHB4IDEwcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG5cXG5bY2xhc3MqPVxcXCJtb2RhbC0tZnJhbWVcXFwiXSB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IC0ycHg7XFxuICByaWdodDogMTBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGFuaW1hdGlvbjogc3BpbiAwLjVzIGluZmluaXRlIGxpbmVhcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciAmJiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdKTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGUsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICB1cmwgPSB1cmwgJiYgdXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybDtcblxuICBpZiAodHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1cmw7XG4gIH0gLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG5cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5cyA9IHJlcXVpcmUoJ29iamVjdC1rZXlzJyk7XG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbCgnZm9vJykgPT09ICdzeW1ib2wnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgb3JpZ0RlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIChmbikge1xuXHRyZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHRvU3RyLmNhbGwoZm4pID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxudmFyIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBvYmogPSB7fTtcblx0dHJ5IHtcblx0XHRvcmlnRGVmaW5lUHJvcGVydHkob2JqLCAneCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiBvYmogfSk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGZvciAodmFyIF8gaW4gb2JqKSB7IC8vIGpzY3M6aWdub3JlIGRpc2FsbG93VW51c2VkVmFyaWFibGVzXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBvYmoueCA9PT0gb2JqO1xuXHR9IGNhdGNoIChlKSB7IC8qIHRoaXMgaXMgSUUgOC4gKi9cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IG9yaWdEZWZpbmVQcm9wZXJ0eSAmJiBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkKCk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWUsIHZhbHVlLCBwcmVkaWNhdGUpIHtcblx0aWYgKG5hbWUgaW4gb2JqZWN0ICYmICghaXNGdW5jdGlvbihwcmVkaWNhdGUpIHx8ICFwcmVkaWNhdGUoKSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHN1cHBvcnRzRGVzY3JpcHRvcnMpIHtcblx0XHRvcmlnRGVmaW5lUHJvcGVydHkob2JqZWN0LCBuYW1lLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0W25hbWVdID0gdmFsdWU7XG5cdH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9iamVjdCwgbWFwKSB7XG5cdHZhciBwcmVkaWNhdGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB7fTtcblx0dmFyIHByb3BzID0ga2V5cyhtYXApO1xuXHRpZiAoaGFzU3ltYm9scykge1xuXHRcdHByb3BzID0gY29uY2F0LmNhbGwocHJvcHMsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobWFwKSk7XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcHNbaV0sIG1hcFtwcm9wc1tpXV0sIHByZWRpY2F0ZXNbcHJvcHNbaV1dKTtcblx0fVxufTtcblxuZGVmaW5lUHJvcGVydGllcy5zdXBwb3J0c0Rlc2NyaXB0b3JzID0gISFzdXBwb3J0c0Rlc2NyaXB0b3JzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnRpZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29udGFpbnMob3RoZXIpIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdGlmICh0eXBlb2Ygb3RoZXIgIT09ICdvYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSAo4oCdb3RoZXLigJwpIHRvIE5vZGUuY29udGFpbnMgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBOb2RlJyk7XG5cdH1cblxuXHR2YXIgbm9kZSA9IG90aGVyO1xuXHRkbyB7XG5cdFx0aWYgKHRoaXMgPT09IG5vZGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHR9XG5cdH0gd2hpbGUgKG5vZGUpO1xuXG5cdHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kQ29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhub2RlLCBvdGhlcikge1xuXHRyZXR1cm4gcG9seWZpbGwuYXBwbHkobm9kZSwgW290aGVyXSk7XG59O1xuXG5kZWZpbmUoYm91bmRDb250YWlucywge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRDb250YWlucztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdGlmIChkb2N1bWVudC5jb250YWlucykge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNvbnRhaW5zO1xuXHRcdH1cblx0XHRpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuY29udGFpbnMuY2FsbChkb2N1bWVudCwgJycpID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuYm9keS5jb250YWlucztcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkgeyAvKiovIH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUNvbnRhaW5zKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdGRlZmluZShcblx0XHRcdGRvY3VtZW50LFxuXHRcdFx0eyBjb250YWluczogcG9seWZpbGwgfSxcblx0XHRcdHsgY29udGFpbnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LmNvbnRhaW5zICE9PSBwb2x5ZmlsbDsgfSB9XG5cdFx0KTtcblx0XHRpZiAodHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRkZWZpbmUoXG5cdFx0XHRcdEVsZW1lbnQucHJvdG90eXBlLFxuXHRcdFx0XHR7IGNvbnRhaW5zOiBwb2x5ZmlsbCB9LFxuXHRcdFx0XHR7IGNvbnRhaW5zOiBmdW5jdGlvbiAoKSB7IHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5jb250YWlucyAhPT0gcG9seWZpbGw7IH0gfVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLzUvQ2hlY2tPYmplY3RDb2VyY2libGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gcmVxdWlyZSgnLi4vaGVscGVycy9tYXhTYWZlSW50ZWdlcicpO1xuXG52YXIgVG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4vVG9JbnRlZ2VyT3JJbmZpbml0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTGVuZ3RoKGFyZ3VtZW50KSB7XG5cdHZhciBsZW4gPSBUb0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcblx0aWYgKGxlbiA8PSAwKSB7IHJldHVybiAwOyB9IC8vIGluY2x1ZGVzIGNvbnZlcnRpbmcgLTAgdG8gKzBcblx0aWYgKGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHsgcmV0dXJuIE1BWF9TQUZFX0lOVEVHRVI7IH1cblx0cmV0dXJuIGxlbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG52YXIgJFJlZ0V4cCA9IEdldEludHJpbnNpYygnJVJlZ0V4cCUnKTtcbnZhciAkcGFyc2VJbnRlZ2VyID0gR2V0SW50cmluc2ljKCclcGFyc2VJbnQlJyk7XG5cbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgcmVnZXhUZXN0ZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3JlZ2V4VGVzdGVyJyk7XG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciAkc3RyU2xpY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuc2xpY2UnKTtcbnZhciBpc0JpbmFyeSA9IHJlZ2V4VGVzdGVyKC9eMGJbMDFdKyQvaSk7XG52YXIgaXNPY3RhbCA9IHJlZ2V4VGVzdGVyKC9eMG9bMC03XSskL2kpO1xudmFyIGlzSW52YWxpZEhleExpdGVyYWwgPSByZWdleFRlc3RlcigvXlstK10weFswLTlhLWZdKyQvaSk7XG52YXIgbm9uV1MgPSBbJ1xcdTAwODUnLCAnXFx1MjAwYicsICdcXHVmZmZlJ10uam9pbignJyk7XG52YXIgbm9uV1NyZWdleCA9IG5ldyAkUmVnRXhwKCdbJyArIG5vbldTICsgJ10nLCAnZycpO1xudmFyIGhhc05vbldTID0gcmVnZXhUZXN0ZXIobm9uV1NyZWdleCk7XG5cbi8vIHdoaXRlc3BhY2UgZnJvbTogaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNS40LjIwXG4vLyBpbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9ibG9iL3YzLjQuMC9lczUtc2hpbS5qcyNMMTMwNC1MMTMyNFxudmFyIHdzID0gW1xuXHQnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnLFxuXHQnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjgnLFxuXHQnXFx1MjAyOVxcdUZFRkYnXG5dLmpvaW4oJycpO1xudmFyIHRyaW1SZWdleCA9IG5ldyBSZWdFeHAoJyheWycgKyB3cyArICddKyl8KFsnICsgd3MgKyAnXSskKScsICdnJyk7XG52YXIgJHJlcGxhY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUucmVwbGFjZScpO1xudmFyICR0cmltID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiAkcmVwbGFjZSh2YWx1ZSwgdHJpbVJlZ2V4LCAnJyk7XG59O1xuXG52YXIgVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL1RvUHJpbWl0aXZlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b251bWJlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKGFyZ3VtZW50KSB7XG5cdHZhciB2YWx1ZSA9IGlzUHJpbWl0aXZlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogVG9QcmltaXRpdmUoYXJndW1lbnQsICROdW1iZXIpO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0NvbnZlcnNpb24gZnJvbSBcXCdCaWdJbnRcXCcgdG8gXFwnbnVtYmVyXFwnIGlzIG5vdCBhbGxvd2VkLicpO1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aWYgKGlzQmluYXJ5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgMikpO1xuXHRcdH0gZWxzZSBpZiAoaXNPY3RhbCh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBUb051bWJlcigkcGFyc2VJbnRlZ2VyKCRzdHJTbGljZSh2YWx1ZSwgMiksIDgpKTtcblx0XHR9IGVsc2UgaWYgKGhhc05vbldTKHZhbHVlKSB8fCBpc0ludmFsaWRIZXhMaXRlcmFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIE5hTjtcblx0XHR9XG5cdFx0dmFyIHRyaW1tZWQgPSAkdHJpbSh2YWx1ZSk7XG5cdFx0aWYgKHRyaW1tZWQgIT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIodHJpbW1lZCk7XG5cdFx0fVxuXG5cdH1cblx0cmV0dXJuICROdW1iZXIodmFsdWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjEwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ2hlY2tPYmplY3RDb2VyY2libGUodmFsdWUsIG9wdE1lc3NhZ2UpIHtcblx0aWYgKHZhbHVlID09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICgnQ2Fubm90IGNhbGwgbWV0aG9kIG9uICcgKyB2YWx1ZSkpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhYnMgPSByZXF1aXJlKCcuL2FicycpO1xudmFyIGZsb29yID0gcmVxdWlyZSgnLi9mbG9vcicpO1xudmFyIFRvTnVtYmVyID0gcmVxdWlyZSgnLi9Ub051bWJlcicpO1xuXG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc05hTicpO1xudmFyICRpc0Zpbml0ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNGaW5pdGUnKTtcbnZhciAkc2lnbiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvc2lnbicpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS40XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmICgkaXNOYU4obnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdHJldHVybiAkc2lnbihudW1iZXIpICogZmxvb3IoYWJzKG51bWJlcikpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9Ub1ByaW1pdGl2ZScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4zXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIodmFsdWUpIHtcblx0dmFyIHByaW0gPSBUb1ByaW1pdGl2ZSh2YWx1ZSwgTnVtYmVyKTtcblx0aWYgKHR5cGVvZiBwcmltICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiArcHJpbTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblx0dmFyIHRyaW1tZWQgPSBwcmltLnJlcGxhY2UoL15bIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rfFsgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUwMDg1XSskL2csICcnKTtcblx0aWYgKCgvXjBbb2JdfF5bKy1dMHgvKS50ZXN0KHRyaW1tZWQpKSB7XG5cdFx0cmV0dXJuIE5hTjtcblx0fVxuXG5cdHJldHVybiArdHJpbW1lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhYnMgPSBHZXRJbnRyaW5zaWMoJyVNYXRoLmFicyUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTUuMlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFicyh4KSB7XG5cdHJldHVybiAkYWJzKHgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gdmFyIG1vZHVsbyA9IHJlcXVpcmUoJy4vbW9kdWxvJyk7XG52YXIgJGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTUuMlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsb29yKHgpIHtcblx0Ly8gcmV0dXJuIHggLSBtb2R1bG8oeCwgMSk7XG5cdHJldHVybiAkZmxvb3IoeCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhICE9PSBhOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmICEkaXNOYU4oeCkgJiYgeCAhPT0gSW5maW5pdHkgJiYgeCAhPT0gLUluZmluaXR5OyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBpc05hTihhKSB7XG5cdHJldHVybiBhICE9PSBhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkTWF0aCA9IEdldEludHJpbnNpYygnJU1hdGglJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAkTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgJE1hdGgucG93KDIsIDUzKSAtIDE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1ByaW1pdGl2ZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xudmFyIGlzRGF0ZSA9IHJlcXVpcmUoJ2lzLWRhdGUtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcblxudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSBmdW5jdGlvbiBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpIHtcblx0aWYgKHR5cGVvZiBPID09PSAndW5kZWZpbmVkJyB8fCBPID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgbWV0aG9kIG9uICcgKyBPKTtcblx0fVxuXHRpZiAodHlwZW9mIGhpbnQgIT09ICdzdHJpbmcnIHx8IChoaW50ICE9PSAnbnVtYmVyJyAmJiBoaW50ICE9PSAnc3RyaW5nJykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdoaW50IG11c3QgYmUgXCJzdHJpbmdcIiBvciBcIm51bWJlclwiJyk7XG5cdH1cblx0dmFyIG1ldGhvZE5hbWVzID0gaGludCA9PT0gJ3N0cmluZycgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHR2YXIgbWV0aG9kLCByZXN1bHQsIGk7XG5cdGZvciAoaSA9IDA7IGkgPCBtZXRob2ROYW1lcy5sZW5ndGg7ICsraSkge1xuXHRcdG1ldGhvZCA9IE9bbWV0aG9kTmFtZXNbaV1dO1xuXHRcdGlmIChpc0NhbGxhYmxlKG1ldGhvZCkpIHtcblx0XHRcdHJlc3VsdCA9IG1ldGhvZC5jYWxsKE8pO1xuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0dGhyb3cgbmV3IFR5cGVFcnJvcignTm8gZGVmYXVsdCB2YWx1ZScpO1xufTtcblxudmFyIEdldE1ldGhvZCA9IGZ1bmN0aW9uIEdldE1ldGhvZChPLCBQKSB7XG5cdHZhciBmdW5jID0gT1tQXTtcblx0aWYgKGZ1bmMgIT09IG51bGwgJiYgdHlwZW9mIGZ1bmMgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0aWYgKCFpc0NhbGxhYmxlKGZ1bmMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bmMgKyAnIHJldHVybmVkIGZvciBwcm9wZXJ0eSAnICsgUCArICcgb2Ygb2JqZWN0ICcgKyBPICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHRcdH1cblx0XHRyZXR1cm4gZnVuYztcblx0fVxuXHRyZXR1cm4gdm9pZCAwO1xufTtcblxuLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0dmFyIGhpbnQgPSAnZGVmYXVsdCc7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdGlmIChhcmd1bWVudHNbMV0gPT09IFN0cmluZykge1xuXHRcdFx0aGludCA9ICdzdHJpbmcnO1xuXHRcdH0gZWxzZSBpZiAoYXJndW1lbnRzWzFdID09PSBOdW1iZXIpIHtcblx0XHRcdGhpbnQgPSAnbnVtYmVyJztcblx0XHR9XG5cdH1cblxuXHR2YXIgZXhvdGljVG9QcmltO1xuXHRpZiAoaGFzU3ltYm9scykge1xuXHRcdGlmIChTeW1ib2wudG9QcmltaXRpdmUpIHtcblx0XHRcdGV4b3RpY1RvUHJpbSA9IEdldE1ldGhvZChpbnB1dCwgU3ltYm9sLnRvUHJpbWl0aXZlKTtcblx0XHR9IGVsc2UgaWYgKGlzU3ltYm9sKGlucHV0KSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mO1xuXHRcdH1cblx0fVxuXHRpZiAodHlwZW9mIGV4b3RpY1RvUHJpbSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHR2YXIgcmVzdWx0ID0gZXhvdGljVG9QcmltLmNhbGwoaW5wdXQsIGhpbnQpO1xuXHRcdGlmIChpc1ByaW1pdGl2ZShyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmFibGUgdG8gY29udmVydCBleG90aWMgb2JqZWN0IHRvIHByaW1pdGl2ZScpO1xuXHR9XG5cdGlmIChoaW50ID09PSAnZGVmYXVsdCcgJiYgKGlzRGF0ZShpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSkge1xuXHRcdGhpbnQgPSAnc3RyaW5nJztcblx0fVxuXHRyZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgaGludCA9PT0gJ2RlZmF1bHQnID8gJ251bWJlcicgOiBoaW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1ByaW1pdGl2ZScpO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTIuOFxudmFyIEVTNWludGVybmFsU2xvdHMgPSB7XG5cdCdbW0RlZmF1bHRWYWx1ZV1dJzogZnVuY3Rpb24gKE8pIHtcblx0XHR2YXIgYWN0dWFsSGludDtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFjdHVhbEhpbnQgPSBhcmd1bWVudHNbMV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdHVhbEhpbnQgPSB0b1N0ci5jYWxsKE8pID09PSAnW29iamVjdCBEYXRlXScgPyBTdHJpbmcgOiBOdW1iZXI7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdHVhbEhpbnQgPT09IFN0cmluZyB8fCBhY3R1YWxIaW50ID09PSBOdW1iZXIpIHtcblx0XHRcdHZhciBtZXRob2RzID0gYWN0dWFsSGludCA9PT0gU3RyaW5nID8gWyd0b1N0cmluZycsICd2YWx1ZU9mJ10gOiBbJ3ZhbHVlT2YnLCAndG9TdHJpbmcnXTtcblx0XHRcdHZhciB2YWx1ZSwgaTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGlmIChpc0NhbGxhYmxlKE9bbWV0aG9kc1tpXV0pKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPW21ldGhvZHNbaV1dKCk7XG5cdFx0XHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignTm8gZGVmYXVsdCB2YWx1ZScpO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIFtbRGVmYXVsdFZhbHVlXV0gaGludCBzdXBwbGllZCcpO1xuXHR9XG59O1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy05LjFcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0LCBhcmd1bWVudHNbMV0pO1xuXHR9XG5cdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSByZXF1aXJlKCdmdW5jdGlvbnMtaGF2ZS1uYW1lcycpKCk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyICRmdW5jdGlvblRvU3RyaW5nID0gY2FsbEJvdW5kKCdGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciAkc3RyaW5nTWF0Y2ggPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUubWF0Y2gnKTtcblxudmFyIGNsYXNzUmVnZXggPSAvXmNsYXNzIC87XG5cbnZhciBpc0NsYXNzID0gZnVuY3Rpb24gaXNDbGFzc0NvbnN0cnVjdG9yKGZuKSB7XG5cdGlmIChJc0NhbGxhYmxlKGZuKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHRyeSB7XG5cdFx0dmFyIG1hdGNoID0gJHN0cmluZ01hdGNoKCRmdW5jdGlvblRvU3RyaW5nKGZuKSwgY2xhc3NSZWdleCk7XG5cdFx0cmV0dXJuICEhbWF0Y2g7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteKFxcc10qKVxccyovO1xuXG52YXIgZnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXROYW1lKCkge1xuXHRpZiAoIWlzQ2xhc3ModGhpcykgJiYgIUlzQ2FsbGFibGUodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUubmFtZSBzaGFtIGdldHRlciBjYWxsZWQgb24gbm9uLWZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKGZ1bmN0aW9uc0hhdmVOYW1lcykge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cblx0aWYgKHRoaXMgPT09IGZ1bmN0aW9uUHJvdG8pIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0dmFyIHN0ciA9ICRmdW5jdGlvblRvU3RyaW5nKHRoaXMpO1xuXHR2YXIgbWF0Y2ggPSAkc3RyaW5nTWF0Y2goc3RyLCByZWdleCk7XG5cdHZhciBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG5cdHJldHVybiBuYW1lO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kID0gY2FsbEJpbmQoaW1wbGVtZW50YXRpb24pO1xuXG5kZWZpbmUoYm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IHJlcXVpcmUoJ2Z1bmN0aW9ucy1oYXZlLW5hbWVzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBUeXBlRXJyID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1OYW1lKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG5cdFx0cmV0dXJuIHBvbHlmaWxsO1xuXHR9XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdTaGltbWluZyBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSBzdXBwb3J0IHJlcXVpcmVzIEVTNSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHN1cHBvcnQuJyk7XG5cdH1cblx0dmFyIGZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uUHJvdG8sICduYW1lJywge1xuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBuYW1lID0gcG9seWZpbGwuY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzICE9PSBmdW5jdGlvblByb3RvKSB7XG5cdFx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHR2YWx1ZTogbmFtZSxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gZnVuY3Rpb24gZnVuY3Rpb25zSGF2ZU5hbWVzKCkge1xuXHRyZXR1cm4gdHlwZW9mIGZ1bmN0aW9uIGYoKSB7fS5uYW1lID09PSAnc3RyaW5nJztcbn07XG5cbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmIChnT1BEKSB7XG5cdHRyeSB7XG5cdFx0Z09QRChbXSwgJ2xlbmd0aCcpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZ09QRFxuXHRcdGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbmZ1bmN0aW9uc0hhdmVOYW1lcy5mdW5jdGlvbnNIYXZlQ29uZmlndXJhYmxlTmFtZXMgPSBmdW5jdGlvbiBmdW5jdGlvbnNIYXZlQ29uZmlndXJhYmxlTmFtZXMoKSB7XG5cdHJldHVybiBmdW5jdGlvbnNIYXZlTmFtZXMoKSAmJiBnT1BEICYmICEhZ09QRChmdW5jdGlvbiAoKSB7fSwgJ25hbWUnKS5jb25maWd1cmFibGU7XG59O1xuXG52YXIgJGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcblxuZnVuY3Rpb25zSGF2ZU5hbWVzLmJvdW5kRnVuY3Rpb25zSGF2ZU5hbWVzID0gZnVuY3Rpb24gYm91bmRGdW5jdGlvbnNIYXZlTmFtZXMoKSB7XG5cdHJldHVybiBmdW5jdGlvbnNIYXZlTmFtZXMoKSAmJiB0eXBlb2YgJGJpbmQgPT09ICdmdW5jdGlvbicgJiYgZnVuY3Rpb24gZigpIHt9LmJpbmQoKS5uYW1lICE9PSAnJztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb25zSGF2ZU5hbWVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJFN5bnRheEVycm9yID0gU3ludGF4RXJyb3I7XG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbikge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhcycpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzVG9TdHJpbmdUYWdTaGFtcygpIHtcblx0cmV0dXJuIGhhc1N5bWJvbHMoKSAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSByZXF1aXJlKCdoYXMtdG9zdHJpbmd0YWcvc2hhbXMnKSgpO1xudmFyIGhhcztcbnZhciAkZXhlYztcbnZhciBpc1JlZ2V4TWFya2VyO1xudmFyIGJhZFN0cmluZ2lmaWVyO1xuXG5pZiAoaGFzVG9TdHJpbmdUYWcpIHtcblx0aGFzID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5Jyk7XG5cdCRleGVjID0gY2FsbEJvdW5kKCdSZWdFeHAucHJvdG90eXBlLmV4ZWMnKTtcblx0aXNSZWdleE1hcmtlciA9IHt9O1xuXG5cdHZhciB0aHJvd1JlZ2V4TWFya2VyID0gZnVuY3Rpb24gKCkge1xuXHRcdHRocm93IGlzUmVnZXhNYXJrZXI7XG5cdH07XG5cdGJhZFN0cmluZ2lmaWVyID0ge1xuXHRcdHRvU3RyaW5nOiB0aHJvd1JlZ2V4TWFya2VyLFxuXHRcdHZhbHVlT2Y6IHRocm93UmVnZXhNYXJrZXJcblx0fTtcblxuXHRpZiAodHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRiYWRTdHJpbmdpZmllcltTeW1ib2wudG9QcmltaXRpdmVdID0gdGhyb3dSZWdleE1hcmtlcjtcblx0fVxufVxuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgcmVnZXhDbGFzcyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1RvU3RyaW5nVGFnXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQ/IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgZGVzY3JpcHRvciA9IGdPUEQodmFsdWUsICdsYXN0SW5kZXgnKTtcblx0XHR2YXIgaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBoYXMoZGVzY3JpcHRvciwgJ3ZhbHVlJyk7XG5cdFx0aWYgKCFoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0JGV4ZWModmFsdWUsIGJhZFN0cmluZ2lmaWVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZSA9PT0gaXNSZWdleE1hcmtlcjtcblx0XHR9XG5cdH1cblx0OiBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0Ly8gSW4gb2xkZXIgYnJvd3NlcnMsIHR5cGVvZiByZWdleCBpbmNvcnJlY3RseSByZXR1cm5zICdmdW5jdGlvbidcblx0XHRpZiAoIXZhbHVlIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJHRvU3RyaW5nKHZhbHVlKSA9PT0gcmVnZXhDbGFzcztcblx0fTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHR2YXIgc3ltVG9TdHIgPSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nO1xuXHR2YXIgc3ltU3RyaW5nUmVnZXggPSAvXlN5bWJvbFxcKC4qXFwpJC87XG5cdHZhciBpc1N5bWJvbE9iamVjdCA9IGZ1bmN0aW9uIGlzUmVhbFN5bWJvbE9iamVjdCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZigpICE9PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3ltU3RyaW5nUmVnZXgudGVzdChzeW1Ub1N0ci5jYWxsKHZhbHVlKSk7XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRvU3RyLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBTeW1ib2xdJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGlzU3ltYm9sT2JqZWN0KHZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG5cdFx0Ly8gdGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IFN5bWJvbHMuXG5cdFx0cmV0dXJuIGZhbHNlICYmIHZhbHVlO1xuXHR9O1xufVxuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgTGFuZ3VhZ2VMaW50ZXIuanMuTElDRU5TRS50eHQgKi9cbigoKT0+e3ZhciBuPXsxMTQ6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGEsaSl7dmFyIHIsdD0tMTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJdGVyYXRlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBcIituKTtpZighZS5jYWxsKG4sXCJsZW5ndGhcIikpdGhyb3cgbmV3IEVycm9yKFwiSXRlcmF0ZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBoYXMgYSBgbGVuZ3RoYFwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihcImBjYWxsYmFja2AgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2Zvcig7Kyt0PG4ubGVuZ3RoOyl0IGluIG4mJlwibnVtYmVyXCI9PXR5cGVvZihyPWEuY2FsbChpLG5bdF0sdCxuKSkmJihyPDAmJih0PTApLHQ9ci0xKX07dmFyIGU9e30uaGFzT3duUHJvcGVydHl9LDc4MDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7YS5kKGUse1o6KCk9Pk19KTt2YXIgaT1hKDgxKSxyPWEubihpKSx0PWEoNjQ1KSxvPWEubih0KSgpKHIoKSk7by5wdXNoKFtuLmlkLCcqIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDY0Yzk7XFxufVxcblxcbi8qLmxvYWRpbmctc3Bpbm5lciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xcbn0qL1xcblxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDEwcHg7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAgMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDEwcHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZzogMTRweCAxNnB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XFxuICBib3gtc2hhZG93OiAwcHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgdHJhbnNpdGlvbjogMC4wODVzIGFsbCBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24pOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogIHRyYW5zbGF0ZVkoLTFweCk7XFxuICBib3gtc2hhZG93OiBcXG4gICAgMHB4IDIuNXB4IDJweCByZ2JhKDAgMCAwIC8gLjAzKSxcXG4gICAgMHB4IDZweCA4cHggcmdiYSgwIDAgMCAvIC4wMik7XFxuXFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAgMCAwIC8gMjAlKTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24pOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06ICB0cmFuc2xhdGVZKDFweCk7XFxuICBib3gtc2hhZG93OiAwcHggMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb24ge1xcbiAgcGFkZGluZzogMTZweCAxNnB4IDEwcHg7XFxuICBjdXJzb3I6ICBkZWZhdWx0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb246aG92ZXIsXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLmFjdGl2ZS1zdWdnZXN0aW9uOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06ICBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbikgPiAqOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSkge1xcbiAgZGlzcGxheTogIG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lciAuYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiA4cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWFjdHVhbCB7XFxuICBmb250LXNpemU6ICAxM3B4O1xcbiAgY29sb3I6ICMyODM2MzY7XFxuICBtYXJnaW46ICAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLmFjdGl2ZS1zdWdnZXN0aW9uIC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6ICBub25lO1xcbn1cXG5cXG4uYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSAuc3VnZ2VzdGlvbi1ydWxlLWxhYmVsIHtcXG4gIGNvbG9yOiAgcmdiYSgwIDAgMCAvIDUwJSk7XFxufVxcblxcbi5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IC5zdWdnZXN0aW9uLXJ1bGUtbGFiZWw6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFwi4oCiXCI7XFxuICBtYXJnaW4tcmlnaHQ6ICA4cHg7XFxuICBjb2xvcjogIHJnYmEoMCAwIDAgLyA0MCUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuc3VnZ2VzdGlvbi1kaXNtaXNzZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLnN1Z2dlc3Rpb24tYWNjZXB0ZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogNnB4O1xcbiAgaGVpZ2h0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTE5Nzk3O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eS5zZXZlcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmMmQyNDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eS5tb2RlcmF0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGM3NGRmO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWxhYmVsIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBmb250LXNpemU6IDEwcHg7XFxuICBsaW5lLWhlaWdodDogMTM1JTtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjc1cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgY29sb3I6ICM2ZTc1NzU7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDEycHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VtbWFyeS1iYXNpYyB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBnYXA6IDZweDtcXG59XFxuXFxuLmJhc2ljLXN1bW1hcnktZXhhbXBsZSB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XFxuICBjb2xvcjogI2RmMmQyNDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dCB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1hcnJvdyB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50IHtcXG4gIHBhZGRpbmc6IDVweCA3cHggNnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYyZDI0O1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IHJnYigwIDAgMCAvIDEwJSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNjVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uc3VtbWFyeS1yZW1vdmFsIC5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM1MTQ4O1xcbn1cXG5cXG4uc3VtbWFyeS1yZW1vdmFsIC5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudDphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50LXRleHQge1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQge1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM4N2RkO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNjVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50OmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0YzliZWI7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQ6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogNnB4O1xcbiAgcGFkZGluZzogMXB4IDAgMThweDtcXG4gIG1hcmdpbi1ib3R0b206ICAtMTlweDtcXG4gIG92ZXJmbG93OiBzY3JvbGw7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm90dG9tOiAxcHg7XFxufVxcblxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBkaXNwbGF5OiAgbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMubm8tcmVwbGFjZW1lbnQge1xcbiAgbWFyZ2luLWJvdHRvbTogIDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyIHtcXG4gIHdpZHRoOiAgMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogIHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMXB4IDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLWNvbnRhaW5lcjphZnRlciB7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgaGVpZ2h0OiAxMTAlO1xcbiAgd2lkdGg6IDMwcHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1IDI1NSAyNTUgLyAwKSwgICNmZmYgKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAtMXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMDc1cyBlYXNlLW91dDtcXG4gIHotaW5kZXg6ICAxMDtcXG59XFxuXFxuLnNjcm9sbC1wb3NpdGlvbi1zdGFydDphZnRlcixcXG4uc2Nyb2xsLXBvc2l0aW9uLW1pZGRsZTphZnRlciB7XFxuICBvcGFjaXR5OiAgMTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgaGVpZ2h0OiAxMTAlO1xcbiAgd2lkdGg6IDMwcHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUgMjU1IDI1NSAvIDApLCAgI2ZmZiApO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogLTFweDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjFzIGVhc2Utb3V0O1xcbiAgei1pbmRleDogIDEwO1xcbn1cXG5cXG4uc2Nyb2xsLXBvc2l0aW9uLWVuZDpiZWZvcmUsXFxuLnNjcm9sbC1wb3NpdGlvbi1taWRkbGU6YmVmb3JlIHtcXG4gIG9wYWNpdHk6ICAxO1xcbn1cXG5cXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyOmJlZm9yZSxcXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyOmFmdGVyIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLm5vLXJlcGxhY2VtZW50IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmc6IDVweCA3cHggNnB4O1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMCAwIDAgLyAxNSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tZGVzY3JpcHRpb24tdGV4dCB7XFxuICBtYXJnaW46IDJweCAwIDRweDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6ICMyODM2MzY7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbnMtY3RhcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luOiAtNHB4IC04cHggMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogNnB4IDEwcHg7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiAjNmU3NTc1O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1vdXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeS5kZWxldGUtaXMtaG92ZXJlZDpiZWZvcmUge1xcbiAgY29udGVudDogXCJEaXNtaXNzXCI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0zMHB4O1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgcGFkZGluZzogNHB4IDhweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwIDAgMCAvIDgwJSk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnkuZGVsZXRlLWlzLWhvdmVyZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogXCJcIjtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOHB4O1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgYm9yZGVyLXRvcDogM3B4IHNvbGlkIHJnYmEoMCAwIDAgLyA4MCUpO1xcbiAgYm9yZGVyLXJpZ2h0OiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbnMtZW1wdHktc3RhdGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc2KTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5lbXB0eS1zdGF0ZS1oZWFkaW5nIHtcXG4gIGNvbG9yOiByZ2JhKDAgMCAwIC8gNzAlKTtcXG4gIG1hcmdpbjogMCAwIDZweDtcXG4gIG1heC13aWR0aDogIDgwJTtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG59XFxuXFxuLmVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcXG4gIGNvbG9yOiByZ2JhKDAgMCAwIC8gNjAlKTtcXG4gIG1hcmdpbjogMDtcXG4gIG1heC13aWR0aDogIDgwJTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAgMTQwJTtcXG59XFxuJyxcIlwiXSk7Y29uc3QgTT1vfSw2NDU6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1bXTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIGE9XCJcIixpPXZvaWQgMCE9PWVbNV07cmV0dXJuIGVbNF0mJihhKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGVbNF0sXCIpIHtcIikpLGVbMl0mJihhKz1cIkBtZWRpYSBcIi5jb25jYXQoZVsyXSxcIiB7XCIpKSxpJiYoYSs9XCJAbGF5ZXJcIi5jb25jYXQoZVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQoZVs1XSk6XCJcIixcIiB7XCIpKSxhKz1uKGUpLGkmJihhKz1cIn1cIiksZVsyXSYmKGErPVwifVwiKSxlWzRdJiYoYSs9XCJ9XCIpLGF9KSkuam9pbihcIlwiKX0sZS5pPWZ1bmN0aW9uKG4sYSxpLHIsdCl7XCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPVtbbnVsbCxuLHZvaWQgMF1dKTt2YXIgbz17fTtpZihpKWZvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgcz10aGlzW01dWzBdO251bGwhPXMmJihvW3NdPSEwKX1mb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9W10uY29uY2F0KG5bbF0pO2kmJm9bY1swXV18fCh2b2lkIDAhPT10JiYodm9pZCAwPT09Y1s1XXx8KGNbMV09XCJAbGF5ZXJcIi5jb25jYXQoY1s1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQoY1s1XSk6XCJcIixcIiB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSksY1s1XT10KSxhJiYoY1syXT8oY1sxXT1cIkBtZWRpYSBcIi5jb25jYXQoY1syXSxcIiB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSxjWzJdPWEpOmNbMl09YSksciYmKGNbNF0/KGNbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdChjWzRdLFwiKSB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSxjWzRdPXIpOmNbNF09XCJcIi5jb25jYXQocikpLGUucHVzaChjKSl9fSxlfX0sODE6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gblsxXX19LDQ3MDpuPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1PYmplY3QuZGVmaW5lUHJvcGVydHkscj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9ZnVuY3Rpb24obil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KG4pOlwiW29iamVjdCBBcnJheV1cIj09PWEuY2FsbChuKX0sbz1mdW5jdGlvbihuKXtpZighbnx8XCJbb2JqZWN0IE9iamVjdF1cIiE9PWEuY2FsbChuKSlyZXR1cm4hMTt2YXIgaSxyPWUuY2FsbChuLFwiY29uc3RydWN0b3JcIiksdD1uLmNvbnN0cnVjdG9yJiZuLmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmZS5jYWxsKG4uY29uc3RydWN0b3IucHJvdG90eXBlLFwiaXNQcm90b3R5cGVPZlwiKTtpZihuLmNvbnN0cnVjdG9yJiYhciYmIXQpcmV0dXJuITE7Zm9yKGkgaW4gbik7cmV0dXJuIHZvaWQgMD09PWl8fGUuY2FsbChuLGkpfSxNPWZ1bmN0aW9uKG4sZSl7aSYmXCJfX3Byb3RvX19cIj09PWUubmFtZT9pKG4sZS5uYW1lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTplLm5ld1ZhbHVlLHdyaXRhYmxlOiEwfSk6bltlLm5hbWVdPWUubmV3VmFsdWV9LHM9ZnVuY3Rpb24obixhKXtpZihcIl9fcHJvdG9fX1wiPT09YSl7aWYoIWUuY2FsbChuLGEpKXJldHVybjtpZihyKXJldHVybiByKG4sYSkudmFsdWV9cmV0dXJuIG5bYV19O24uZXhwb3J0cz1mdW5jdGlvbiBuKCl7dmFyIGUsYSxpLHIsbCxjLFM9YXJndW1lbnRzWzBdLHU9MSxkPWFyZ3VtZW50cy5sZW5ndGgsbT0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBTJiYobT1TLFM9YXJndW1lbnRzWzFdfHx7fSx1PTIpLChudWxsPT1TfHxcIm9iamVjdFwiIT10eXBlb2YgUyYmXCJmdW5jdGlvblwiIT10eXBlb2YgUykmJihTPXt9KTt1PGQ7Kyt1KWlmKG51bGwhPShlPWFyZ3VtZW50c1t1XSkpZm9yKGEgaW4gZSlpPXMoUyxhKSxTIT09KHI9cyhlLGEpKSYmKG0mJnImJihvKHIpfHwobD10KHIpKSk/KGw/KGw9ITEsYz1pJiZ0KGkpP2k6W10pOmM9aSYmbyhpKT9pOnt9LE0oUyx7bmFtZTphLG5ld1ZhbHVlOm4obSxjLHIpfSkpOnZvaWQgMCE9PXImJk0oUyx7bmFtZTphLG5ld1ZhbHVlOnJ9KSk7cmV0dXJuIFN9fSwyOTE6bj0+eyFmdW5jdGlvbigpe3ZhciBlO2Z1bmN0aW9uIGEobil7Zm9yKHZhciBlLGEsaSxyLHQ9MSxvPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxNPTAscz1uLmxlbmd0aCxsPVwiXCIsYz0hMSxTPSExLHU9ZnVuY3Rpb24oKXtyZXR1cm4gb1t0KytdfSxkPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVwiXCI7L1xcZC8udGVzdChuW01dKTspYSs9bltNKytdLGU9bltNXTtyZXR1cm4gYS5sZW5ndGg+MD9wYXJzZUludChhKTpudWxsfTtNPHM7KytNKWlmKGU9bltNXSxjKXN3aXRjaChjPSExLFwiLlwiPT1lPyhTPSExLGU9blsrK01dKTpcIjBcIj09ZSYmXCIuXCI9PW5bTSsxXT8oUz0hMCxlPW5bTSs9Ml0pOlM9ITAscj1kKCksZSl7Y2FzZVwiYlwiOmwrPXBhcnNlSW50KHUoKSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZVwiY1wiOmwrPVwic3RyaW5nXCI9PXR5cGVvZihhPXUoKSl8fGEgaW5zdGFuY2VvZiBTdHJpbmc/YTpTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEsMTApKTticmVhaztjYXNlXCJkXCI6bCs9cGFyc2VJbnQodSgpLDEwKTticmVhaztjYXNlXCJmXCI6aT1TdHJpbmcocGFyc2VGbG9hdCh1KCkpLnRvRml4ZWQocnx8NikpLGwrPVM/aTppLnJlcGxhY2UoL14wLyxcIlwiKTticmVhaztjYXNlXCJqXCI6bCs9SlNPTi5zdHJpbmdpZnkodSgpKTticmVhaztjYXNlXCJvXCI6bCs9XCIwXCIrcGFyc2VJbnQodSgpLDEwKS50b1N0cmluZyg4KTticmVhaztjYXNlXCJzXCI6bCs9dSgpO2JyZWFrO2Nhc2VcInhcIjpsKz1cIjB4XCIrcGFyc2VJbnQodSgpLDEwKS50b1N0cmluZygxNik7YnJlYWs7Y2FzZVwiWFwiOmwrPVwiMHhcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2JyZWFrO2RlZmF1bHQ6bCs9ZX1lbHNlXCIlXCI9PT1lP2M9ITA6bCs9ZTtyZXR1cm4gbH0oZT1uLmV4cG9ydHM9YSkuZm9ybWF0PWEsZS52c3ByaW50Zj1mdW5jdGlvbihuLGUpe3JldHVybiBhLmFwcGx5KG51bGwsW25dLmNvbmNhdChlKSl9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjb25zb2xlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjb25zb2xlLmxvZyYmKGUucHJpbnRmPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coYS5hcHBseShudWxsLGFyZ3VtZW50cykpfSl9KCl9LDczODpuPT57bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZudWxsIT1uLmNvbnN0cnVjdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZuLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG4pfX0sNTpmdW5jdGlvbihuLGUsYSl7dmFyIGkscjtyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsdm9pZCAwPT09KGk9ZnVuY3Rpb24oKXtyZXR1cm4gci5kb2N1bWVudCxpPWEoNzYxKSx0PW51bGwsZnVuY3Rpb24oYSxyKXtyZXR1cm4gZT1uLG49cnx8aSx0PXQmJmU9PT1uP3Q6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSZWdFeHAoXCJbXCIrT2JqZWN0LmtleXMobikubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pKS5qb2luKFwiIFwiKStcIl1cIixcImdcIil9KG4pLGEucmVwbGFjZSh0LChmdW5jdGlvbihlKXtyZXR1cm4gbltlLmNoYXJDb2RlQXQoMCldfHxlfSkpfTt2YXIgbixlLGksdH0uY2FsbChlLGEsZSxuKSl8fChuLmV4cG9ydHM9aSl9LDQ5NToobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg1MzQpO24uZXhwb3J0cz1mdW5jdGlvbihuLGUpe3ZhciBhPXRoaXM7cmV0dXJuIGkoYS5kYXRhLG4sYS5kYXRhW2VdfHxyLGEpLGF9O3ZhciByPVtdfSw1OTY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTApO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihpKHRoaXMsbikpfX0sNzY5OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDExMCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEscix0LG89dGhpcyxNPS0xO2ZvcihpKG4sbyxvLmRhdGEpOysrTTxvLmNvbXBvdW5kUnVsZXMubGVuZ3RoOyl7Zm9yKGU9by5jb21wb3VuZFJ1bGVzW01dLGE9XCJcIix0PS0xOysrdDxlLmxlbmd0aDspcj1lLmNoYXJBdCh0KSxhKz1vLmNvbXBvdW5kUnVsZUNvZGVzW3JdLmxlbmd0aD9cIig/OlwiK28uY29tcG91bmRSdWxlQ29kZXNbcl0uam9pbihcInxcIikrXCIpXCI6cjtvLmNvbXBvdW5kUnVsZXNbTV09bmV3IFJlZ0V4cChhLFwiaVwiKX1yZXR1cm4gb319LDQyNzoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg3MzgpLHI9YSg5MTYpO24uZXhwb3J0cz1vO3ZhciB0PW8ucHJvdG90eXBlO2Z1bmN0aW9uIG8obixlKXt2YXIgYSx0PS0xO2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhuLGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBufHxpKG4pPyhcInN0cmluZ1wiPT10eXBlb2YgZXx8aShlKSkmJihhPVt7ZGljOmV9XSk6biYmKFwibGVuZ3RoXCJpbiBuPyhhPW4sbj1uWzBdJiZuWzBdLmFmZik6KG4uZGljJiYoYT1bbl0pLG49bi5hZmYpKSwhbil0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGBhZmZgIGluIGRpY3Rpb25hcnlcIik7aWYobj1yKG4pLHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcG91bmRSdWxlQ29kZXM9bi5jb21wb3VuZFJ1bGVDb2Rlcyx0aGlzLnJlcGxhY2VtZW50VGFibGU9bi5yZXBsYWNlbWVudFRhYmxlLHRoaXMuY29udmVyc2lvbj1uLmNvbnZlcnNpb24sdGhpcy5jb21wb3VuZFJ1bGVzPW4uY29tcG91bmRSdWxlcyx0aGlzLnJ1bGVzPW4ucnVsZXMsdGhpcy5mbGFncz1uLmZsYWdzLGEpZm9yKDsrK3Q8YS5sZW5ndGg7KWFbdF0uZGljJiZ0aGlzLmRpY3Rpb25hcnkoYVt0XS5kaWMpfXQuY29ycmVjdD1hKDU5NiksdC5zdWdnZXN0PWEoMTMyKSx0LnNwZWxsPWEoNTAxKSx0LmFkZD1hKDQ5NSksdC5yZW1vdmU9YSg0NzUpLHQud29yZENoYXJhY3RlcnM9YSg0OTIpLHQuZGljdGlvbmFyeT1hKDc2OSksdC5wZXJzb25hbD1hKDIxOSl9LDIxOTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEsaSxyLHQ9dGhpcyxvPW4udG9TdHJpbmcoXCJ1dGY4XCIpLnNwbGl0KFwiXFxuXCIpLE09LTE7Zm9yKHZvaWQgMD09PXQuZmxhZ3MuRk9SQklEREVOV09SRCYmKHQuZmxhZ3MuRk9SQklEREVOV09SRD0hMSkscj10LmZsYWdzLkZPUkJJRERFTldPUkQ7KytNPG8ubGVuZ3RoOykoZT1vW01dLnRyaW0oKSkmJigoYT1cIipcIj09PShpPShlPWUuc3BsaXQoXCIvXCIpKVswXSkuY2hhckF0KDApKSYmKGk9aS5zbGljZSgxKSksdC5hZGQoaSxlWzFdKSxhJiZ0LmRhdGFbaV0ucHVzaChyKSk7cmV0dXJuIHR9fSw0NzU6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gZGVsZXRlIHRoaXMuZGF0YVtuXSx0aGlzfX0sNTAxOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEwKSxyPWEoMzYwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGU9dGhpcyxhPWkoZSxuLCEwKTtyZXR1cm57Y29ycmVjdDplLmNvcnJlY3QobiksZm9yYmlkZGVuOkJvb2xlYW4oYSYmcihlLmZsYWdzLFwiRk9SQklEREVOV09SRFwiLGUuZGF0YVthXSkpLHdhcm46Qm9vbGVhbihhJiZyKGUuZmxhZ3MsXCJXQVJOXCIsZS5kYXRhW2FdKSl9fX0sMTMyOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDgzMikscj1hKDU3NyksdD1hKDM2MCksbz1hKDEwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSx0LG8sbCxjLFMsdSxkLG0scCxoLGcseSxiLEQsZixHLHcsdixrLFIsWSxBLFAsQz10aGlzLFQ9e30seD1bXSx6PXt9LEU9W107aWYoIShuPXIobi50cmltKCksQy5jb252ZXJzaW9uLmluKSl8fEMuY29ycmVjdChuKSlyZXR1cm5bXTtmb3IoUD1pKG4pLG89LTE7KytvPEMucmVwbGFjZW1lbnRUYWJsZS5sZW5ndGg7KWZvcihhPUMucmVwbGFjZW1lbnRUYWJsZVtvXSxsPW4uaW5kZXhPZihhWzBdKTtsPi0xOylFLnB1c2gobi5yZXBsYWNlKGFbMF0sYVsxXSkpLGw9bi5pbmRleE9mKGFbMF0sbCsxKTtmb3Iobz0tMTsrK288bi5sZW5ndGg7KWZvcihtPW4uY2hhckF0KG8pLGg9bi5zbGljZSgwLG8pLGc9bi5zbGljZShvKzEpLHk9KGI9bS50b0xvd2VyQ2FzZSgpKSE9PW0sVD17fSxsPS0xOysrbDxDLmZsYWdzLktFWS5sZW5ndGg7KWlmKCEoKGM9KHA9Qy5mbGFncy5LRVlbbF0pLmluZGV4T2YoYikpPDApKWZvcih1PS0xOysrdTxwLmxlbmd0aDspaWYodSE9PWMpe2lmKFRbZD1wLmNoYXJBdCh1KV0pY29udGludWU7VFtkXT0hMCx5JiYoZD1kLnRvVXBwZXJDYXNlKCkpLEUucHVzaChoK2QrZyl9Zm9yKG89LTEsdz1uLmNoYXJBdCgwKSx0PVtcIlwiXSx2PTEsaz0wOysrbzxuLmxlbmd0aDspe2ZvcihtPXcsdz1uLmNoYXJBdChvKzEpLGg9bi5zbGljZSgwLG8pLGE9bT09PXc/XCJcIjptK20sbD0tMSxTPXQubGVuZ3RoOysrbDxTOylsPD12JiZ0LnB1c2godFtsXSthKSx0W2xdKz1tOysrazwzJiYodj10Lmxlbmd0aCl9Zm9yKE0uYXBwbHkoRSx0KSx0PVtuXSxhPW4udG9Mb3dlckNhc2UoKSwobj09PWF8fG51bGw9PT1QKSYmdC5wdXNoKG4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSksYT1uLnRvVXBwZXJDYXNlKCksbiE9PWEmJnQucHVzaChhKSxEPXMoQyxlPXtzdGF0ZTp7fSx3ZWlnaHRlZDp6LHN1Z2dlc3Rpb25zOnh9LHQsRSksZj0wLHY9TWF0aC5taW4oRC5sZW5ndGgsTWF0aC5wb3coTWF0aC5tYXgoMTUtbi5sZW5ndGgsMyksMykpLFI9TWF0aC5tYXgoTWF0aC5wb3coMTAtbi5sZW5ndGgsMyksMSk7IXgubGVuZ3RoJiZmPHY7KUc9ZitSLHMoQyxlLEQuc2xpY2UoZixHKSksZj1HO2Zvcih4LnNvcnQoKGZ1bmN0aW9uKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHpbbl09PT16W2VdPzA6eltuXT56W2VdPy0xOjF9KG4sZSl8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9aShuKSxyPWkoZSk7cmV0dXJuIGE9PT1yPzA6YT09PVA/LTE6cj09PVA/MTp2b2lkIDB9KG4sZSl8fGZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4ubG9jYWxlQ29tcGFyZShlKX0obixlKX0pKSx0PVtdLFk9W10sbz0tMTsrK288eC5sZW5ndGg7KWE9KEE9cih4W29dLEMuY29udmVyc2lvbi5vdXQpKS50b0xvd2VyQ2FzZSgpLFkuaW5kZXhPZihhKTwwJiYodC5wdXNoKEEpLFkucHVzaChhKSk7cmV0dXJuIHR9O3ZhciBNPVtdLnB1c2g7ZnVuY3Rpb24gcyhuLGUsYSxyKXt2YXIgTSxzLGwsYyxTLHUsZCxtLHAsaCxnLHksYixEPW4uZmxhZ3MuVFJZLGY9bi5kYXRhLEc9bi5mbGFncyx3PVtdLHY9LTE7aWYocilmb3IoOysrdjxyLmxlbmd0aDspayhyW3ZdLCEwKTtmb3Iodj0tMTsrK3Y8YS5sZW5ndGg7KWZvcihzPVwiXCIsbD1cIlwiLGM9KE09YVt2XSkuY2hhckF0KDApLFM9TSx1PU0uc2xpY2UoMSksZD1jLnRvTG93ZXJDYXNlKCkhPT1jLG09aShNKSxwPS0xOysrcDw9TS5sZW5ndGg7KWZvcihzKz1sLGg9Uyx1PShTPXUpLnNsaWNlKDEpLGw9YyxnPWQsKGM9TS5jaGFyQXQocCsxKSkmJihkPWMudG9Mb3dlckNhc2UoKSE9PWMpLFMmJmchPT1kJiYoayhzK1IoUykpLGsocytSKGMpK1IobCkrdSkpLGsocytTKSxTJiZrKHMrYytsK3UpLGI9LTE7KytiPEQubGVuZ3RoOyl5PURbYl0sZyYmeSE9PXkudG9VcHBlckNhc2UoKT8oXCJzXCIhPT1tJiYoayhzK3kraCksayhzK3krUykpLGsocysoeT15LnRvVXBwZXJDYXNlKCkpK2gpLGsocyt5K1MpKTooayhzK3kraCksayhzK3krUykpO3JldHVybiB3O2Z1bmN0aW9uIGsoYSxpKXt2YXIgcixNPWUuc3RhdGVbYV07TSE9PUJvb2xlYW4oTSkmJih3LnB1c2goYSksTT0ocj1vKG4sYSkpJiYhdChHLFwiTk9TVUdHRVNUXCIsZltyXSksZS5zdGF0ZVthXT1NLE0mJihlLndlaWdodGVkW2FdPWk/MTA6MCxlLnN1Z2dlc3Rpb25zLnB1c2goYSkpKSxNJiZlLndlaWdodGVkW2FdKyt9ZnVuY3Rpb24gUihuKXt2YXIgZT1uLmNoYXJBdCgwKTtyZXR1cm4oZS50b0xvd2VyQ2FzZSgpPT09ZT9lLnRvVXBwZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpKStuLnNsaWNlKDEpfX19LDUzNDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg5MTQpO24uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSxvKXt2YXIgTSxzLGwsYyxTLHUsZCxtPS0xOyghKFwiTkVFREFGRklYXCJpbiBvLmZsYWdzKXx8YS5pbmRleE9mKG8uZmxhZ3MuTkVFREFGRklYKTwwKSYmZnVuY3Rpb24obixlLGEpe3ZhciBpPW5bZV07ZSBpbiBuP2k9PT10P25bZV09YS5jb25jYXQoKTpyLmFwcGx5KGksYSk6bltlXT1hLmNvbmNhdCgpfShuLGUsYSk7Zm9yKDsrK208YS5sZW5ndGg7KWlmKE09by5ydWxlc1thW21dXSxhW21daW4gby5jb21wb3VuZFJ1bGVDb2RlcyYmby5jb21wb3VuZFJ1bGVDb2Rlc1thW21dXS5wdXNoKGUpLE0pZm9yKHU9aShlLE0sby5ydWxlcyxbXSkscz0tMTsrK3M8dS5sZW5ndGg7KWlmKHVbc11pbiBufHwoblt1W3NdXT10KSxNLmNvbWJpbmVhYmxlKWZvcihsPW07KytsPGEubGVuZ3RoOylpZigoUz1vLnJ1bGVzW2FbbF1dKSYmUy5jb21iaW5lYWJsZSYmTS50eXBlIT09Uy50eXBlKWZvcihkPWkodVtzXSxTLG8ucnVsZXMsW10pLGM9LTE7KytjPGQubGVuZ3RoOylkW2NdaW4gbnx8KG5bZFtjXV09dCl9O3ZhciByPVtdLnB1c2gsdD1bXX0sOTE2OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEyOSk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEsYyxTLHUsZCxtLHAsaCxnLHksYixEPU9iamVjdC5jcmVhdGUobnVsbCksZj1PYmplY3QuY3JlYXRlKG51bGwpLEc9T2JqZWN0LmNyZWF0ZShudWxsKSx3PVtdLHY9e2luOltdLG91dDpbXX0saz1bXSxSPW4udG9TdHJpbmcoXCJ1dGY4XCIpLFk9W10sQT0wLFA9Ui5pbmRleE9mKFwiXFxuXCIpO2ZvcihHLktFWT1bXTtQPi0xOylDKFIuc2xpY2UoQSxQKSksQT1QKzEsUD1SLmluZGV4T2YoXCJcXG5cIixBKTtmb3IoQyhSLnNsaWNlKEEpKSxQPS0xOysrUDxZLmxlbmd0aDspaWYoXCJSRVBcIj09PShhPShlPVlbUF0uc3BsaXQobykpWzBdKSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKTsrK1A8PWM7KWU9WVtQXS5zcGxpdChvKSx3LnB1c2goW2VbMV0sZVsyXV0pO1AtLX1lbHNlIGlmKFwiSUNPTlZcIj09PWF8fFwiT0NPTlZcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVsxXSwxMCksbT12W1wiSUNPTlZcIj09PWE/XCJpblwiOlwib3V0XCJdOysrUDw9YzspZT1ZW1BdLnNwbGl0KG8pLG0ucHVzaChbbmV3IFJlZ0V4cChlWzFdLFwiZ1wiKSxlWzJdXSk7UC0tfWVsc2UgaWYoXCJDT01QT1VORFJVTEVcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVsxXSwxMCk7KytQPD1jOylmb3IoaD1ZW1BdLnNwbGl0KG8pWzFdLHA9LTEsay5wdXNoKGgpOysrcDxoLmxlbmd0aDspZltoLmNoYXJBdChwKV09W107UC0tfWVsc2UgaWYoXCJQRlhcIj09PWF8fFwiU0ZYXCI9PT1hKXtmb3IoYz1QK3BhcnNlSW50KGVbM10sMTApLGg9e3R5cGU6YSxjb21iaW5lYWJsZTpcIllcIj09PWVbMl0sZW50cmllczpbXX0sRFtlWzFdXT1oOysrUDw9Yzspe1M9KGU9WVtQXS5zcGxpdChvKSlbMl0sdT1lWzNdLnNwbGl0KFwiL1wiKSxkPWVbNF0sbT17YWRkOlwiXCIscmVtb3ZlOlwiXCIsbWF0Y2g6XCJcIixjb250aW51YXRpb246aShHLHVbMV0pfSx1JiZcIjBcIiE9PXVbMF0mJihtLmFkZD11WzBdKTt0cnl7XCIwXCIhPT1TJiYobS5yZW1vdmU9XCJTRlhcIj09PWE/cyhTKTpTKSxkJiZcIi5cIiE9PWQmJihtLm1hdGNoPVwiU0ZYXCI9PT1hP3MoZCk6bChkKSl9Y2F0Y2gobil7bT1udWxsfW0mJmguZW50cmllcy5wdXNoKG0pfVAtLX1lbHNlIGlmKFwiVFJZXCI9PT1hKXtmb3IoZD1lWzFdLHk9LTEsZz1bXTsrK3k8ZC5sZW5ndGg7KShiPWQuY2hhckF0KHkpKS50b0xvd2VyQ2FzZSgpPT09YiYmZy5wdXNoKGIpO2Zvcih5PS0xOysreTx0Lmxlbmd0aDspZC5pbmRleE9mKHRbeV0pPDAmJmcucHVzaCh0W3ldKTtHW2FdPWd9ZWxzZVwiS0VZXCI9PT1hP3IuYXBwbHkoR1thXSxlWzFdLnNwbGl0KFwifFwiKSk6XCJDT01QT1VORE1JTlwiPT09YT9HW2FdPU51bWJlcihlWzFdKTpcIk9OTFlJTkNPTVBPVU5EXCI9PT1hPyhHW2FdPWVbMV0sZltlWzFdXT1bXSk6R1thXT1lWzFdO3JldHVybiBpc05hTihHLkNPTVBPVU5ETUlOKSYmKEcuQ09NUE9VTkRNSU49MyksRy5LRVkubGVuZ3RofHwoRy5LRVk9TSksRy5UUll8fChHLlRSWT10LmNvbmNhdCgpKSxHLktFRVBDQVNFfHwoRy5LRUVQQ0FTRT0hMSkse2NvbXBvdW5kUnVsZUNvZGVzOmYscmVwbGFjZW1lbnRUYWJsZTp3LGNvbnZlcnNpb246dixjb21wb3VuZFJ1bGVzOmsscnVsZXM6RCxmbGFnczpHfTtmdW5jdGlvbiBDKG4peyhuPW4udHJpbSgpKSYmMzUhPT1uLmNoYXJDb2RlQXQoMCkmJlkucHVzaChuKX19O3ZhciByPVtdLnB1c2gsdD1cImV0YW9pbnNocmRsY3Vtd2ZneXBidmtqeHF6XCIuc3BsaXQoXCJcIiksbz0vXFxzKy8sTT1bXCJxd2VydHp1b3BcIixcInl4Y3Zibm1cIixcInFhd1wiLFwic2F5XCIsXCJ3c2VcIixcImRzeFwiLFwic3lcIixcImVkclwiLFwiZmRjXCIsXCJkeFwiLFwicmZ0XCIsXCJnZnZcIixcImZjXCIsXCJ0Z3pcIixcImhnYlwiLFwiZ3ZcIixcInpodVwiLFwiamhuXCIsXCJoYlwiLFwidWppXCIsXCJram1cIixcImpuXCIsXCJpa29cIixcImxrbVwiXTtmdW5jdGlvbiBzKG4pe3JldHVybiBuZXcgUmVnRXhwKG4rXCIkXCIpfWZ1bmN0aW9uIGwobil7cmV0dXJuIG5ldyBSZWdFeHAoXCJeXCIrbil9fSw5MTQ6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbiBuKGUsYSxpLHIpe2Zvcih2YXIgdCxvLE0scyxsLGM9LTE7KytjPGEuZW50cmllcy5sZW5ndGg7KWlmKHM9KHQ9YS5lbnRyaWVzW2NdKS5jb250aW51YXRpb24sbD0tMSwoIXQubWF0Y2h8fHQubWF0Y2gudGVzdChlKSkmJihvPXQucmVtb3ZlP2UucmVwbGFjZSh0LnJlbW92ZSxcIlwiKTplLG89XCJTRlhcIj09PWEudHlwZT9vK3QuYWRkOnQuYWRkK28sci5wdXNoKG8pLHMmJnMubGVuZ3RoKSlmb3IoOysrbDxzLmxlbmd0aDspKE09aVtzW2xdXSkmJm4obyxNLGkscik7cmV0dXJuIHJ9fSw4MzI6bj0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7cmV0dXJuIG49PT1uLnRvTG93ZXJDYXNlKCk/XCJsXCI6bj09PW4udG9VcHBlckNhc2UoKT9cInVcIjpudWxsfW4uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgYT1lKG4uY2hhckF0KDApKSxpPW4uc2xpY2UoMSk7cmV0dXJuIGk/YT09PShpPWUoaSkpP2E6XCJ1XCI9PT1hJiZcImxcIj09PWk/XCJzXCI6bnVsbDphfX0sMTEwOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEyOSkscj1hKDUzNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXtmb3IodmFyIGk9bi50b1N0cmluZyhcInV0ZjhcIikscj1pLmluZGV4T2YoXCJcXG5cIikrMSx0PWkuaW5kZXhPZihcIlxcblwiLHIpO3Q+LTE7KTkhPT1pLmNoYXJDb2RlQXQocikmJm8oaS5zbGljZShyLHQpLGUsYSkscj10KzEsdD1pLmluZGV4T2YoXCJcXG5cIixyKTtvKGkuc2xpY2UociksZSxhKX07dmFyIHQ9L1xccy9nO2Z1bmN0aW9uIG8obixlLGEpe2Zvcih2YXIgbyxNLHM9bi5pbmRleE9mKFwiL1wiKSxsPW4uaW5kZXhPZihcIiNcIiksYz1cIlwiO3M+LTEmJjkyPT09bi5jaGFyQ29kZUF0KHMtMSk7KXM9KG49bi5zbGljZSgwLHMtMSkrbi5zbGljZShzKSkuaW5kZXhPZihcIi9cIixzKTtsPi0xP3M+LTEmJnM8bD8obz1uLnNsaWNlKDAscyksdC5sYXN0SW5kZXg9cysxLE09dC5leGVjKG4pLGM9bi5zbGljZShzKzEsTT9NLmluZGV4OnZvaWQgMCkpOm89bi5zbGljZSgwLGwpOnM+LTE/KG89bi5zbGljZSgwLHMpLGM9bi5zbGljZShzKzEpKTpvPW4sKG89by50cmltKCkpJiZyKGEsbyxpKGUuZmxhZ3MsYy50cmltKCkpLGUpfX0sMjM2OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDM2MCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7dmFyIGE9LTE7aWYobi5kYXRhW2VdKXJldHVybiFpKG4uZmxhZ3MsXCJPTkxZSU5DT01QT1VORFwiLG4uZGF0YVtlXSk7aWYoZS5sZW5ndGg+PW4uZmxhZ3MuQ09NUE9VTkRNSU4pZm9yKDsrK2E8bi5jb21wb3VuZFJ1bGVzLmxlbmd0aDspaWYobi5jb21wb3VuZFJ1bGVzW2FdLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9fSwzNjA6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSl7cmV0dXJuIGEmJmUgaW4gbiYmYS5pbmRleE9mKG5bZV0pPi0xfX0sMTA6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoNTc3KSxyPWEoMjM2KSx0PWEoMzYwKTtmdW5jdGlvbiBvKG4sZSxhKXtyZXR1cm4gdChuLFwiS0VFUENBU0VcIixlKXx8YXx8dChuLFwiRk9SQklEREVOV09SRFwiLGUpfW4uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSl7dmFyIE0scz1lLnRyaW0oKTtpZighcylyZXR1cm4gbnVsbDtpZihzPWkocyxuLmNvbnZlcnNpb24uaW4pLHIobixzKSlyZXR1cm4hYSYmdChuLmZsYWdzLFwiRk9SQklEREVOV09SRFwiLG4uZGF0YVtzXSk/bnVsbDpzO2lmKHMudG9VcHBlckNhc2UoKT09PXMpe2lmKE09cy5jaGFyQXQoMCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpLG8obi5mbGFncyxuLmRhdGFbTV0sYSkpcmV0dXJuIG51bGw7aWYocihuLE0pKXJldHVybiBNfWlmKChNPXMudG9Mb3dlckNhc2UoKSkhPT1zKXtpZihvKG4uZmxhZ3Msbi5kYXRhW01dLGEpKXJldHVybiBudWxsO2lmKHIobixNKSlyZXR1cm4gTX1yZXR1cm4gbnVsbH19LDU3NzpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7Zm9yKHZhciBhPS0xOysrYTxlLmxlbmd0aDspbj1uLnJlcGxhY2UoZVthXVswXSxlW2FdWzFdKTtyZXR1cm4gbn19LDEyOTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSl7dmFyIGkscj0wO2lmKCFhKXJldHVybiBlO2lmKFwibG9uZ1wiPT09bi5GTEFHKXtmb3IoaT1uZXcgQXJyYXkoTWF0aC5jZWlsKGEubGVuZ3RoLzIpKTtyPGEubGVuZ3RoOylpW3IvMl09YS5zbGljZShyLHIrMikscis9MjtyZXR1cm4gaX1yZXR1cm4gYS5zcGxpdChcIm51bVwiPT09bi5GTEFHP1wiLFwiOlwiXCIpfTt2YXIgZT1bXX0sNDkyOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbGFncy5XT1JEQ0hBUlN8fG51bGx9fSw0MzI6KG4sZSxhKT0+eyFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkobil7cmV0dXJuIShcIm51bWJlclwiIT10eXBlb2Ygbnx8biE9bnx8bj09PTEvMHx8bj09PS0xLzApfWZ1bmN0aW9uIHIobil7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIG4mJk1hdGguYWJzKG4pPD05MDA3MTk5MjU0NzQwOTkxfVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLnNlbGY9PT1zZWxmJiZzZWxmfHxcIm9iamVjdFwiPT10eXBlb2YgYS5nJiZhLmcuZ2xvYmFsPT09YS5nJiZhLmc7dmFyIHQ9LyhodW5kcmVkfHRob3VzYW5kfChtfGJ8dHJ8cXVhZHIpaWxsaW9uKSQvLG89L3RlZW4kLyxNPS95JC8scz0vKHplcm98b25lfHR3b3x0aHJlZXxmb3VyfGZpdmV8c2l4fHNldmVufGVpZ2h0fG5pbmV8dGVufGVsZXZlbnx0d2VsdmUpJC8sbD17emVybzpcInplcm90aFwiLG9uZTpcImZpcnN0XCIsdHdvOlwic2Vjb25kXCIsdGhyZWU6XCJ0aGlyZFwiLGZvdXI6XCJmb3VydGhcIixmaXZlOlwiZmlmdGhcIixzaXg6XCJzaXh0aFwiLHNldmVuOlwic2V2ZW50aFwiLGVpZ2h0OlwiZWlnaHRoXCIsbmluZTpcIm5pbnRoXCIsdGVuOlwidGVudGhcIixlbGV2ZW46XCJlbGV2ZW50aFwiLHR3ZWx2ZTpcInR3ZWxmdGhcIn07ZnVuY3Rpb24gYyhuKXtyZXR1cm4gdC50ZXN0KG4pfHxvLnRlc3Qobik/bitcInRoXCI6TS50ZXN0KG4pP24ucmVwbGFjZShNLFwiaWV0aFwiKTpzLnRlc3Qobik/bi5yZXBsYWNlKHMsUyk6bn1mdW5jdGlvbiBTKG4sZSl7cmV0dXJuIGxbZV19dmFyIHU9MTAwLGQ9MWUzLG09MWU2LHA9MWU5LGg9MWUxMixnPTFlMTUseT05MDA3MTk5MjU0NzQwOTkyLGI9W1wiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwidGVuXCIsXCJlbGV2ZW5cIixcInR3ZWx2ZVwiLFwidGhpcnRlZW5cIixcImZvdXJ0ZWVuXCIsXCJmaWZ0ZWVuXCIsXCJzaXh0ZWVuXCIsXCJzZXZlbnRlZW5cIixcImVpZ2h0ZWVuXCIsXCJuaW5ldGVlblwiXSxEPVtcInplcm9cIixcInRlblwiLFwidHdlbnR5XCIsXCJ0aGlydHlcIixcImZvcnR5XCIsXCJmaWZ0eVwiLFwic2l4dHlcIixcInNldmVudHlcIixcImVpZ2h0eVwiLFwibmluZXR5XCJdO2Z1bmN0aW9uIGYobixlKXt2YXIgYSx0PXBhcnNlSW50KG4sMTApO2lmKCFpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYSBmaW5pdGUgbnVtYmVyOiBcIituK1wiIChcIit0eXBlb2YgbitcIilcIik7aWYoIXIodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnB1dCBpcyBub3QgYSBzYWZlIG51bWJlciwgaXTigJlzIGVpdGhlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLlwiKTtyZXR1cm4gYT1mdW5jdGlvbiBuKGUpe3ZhciBhLGkscj1hcmd1bWVudHNbMV07cmV0dXJuIDA9PT1lP3I/ci5qb2luKFwiIFwiKS5yZXBsYWNlKC8sJC8sXCJcIik6XCJ6ZXJvXCI6KHJ8fChyPVtdKSxlPDAmJihyLnB1c2goXCJtaW51c1wiKSxlPU1hdGguYWJzKGUpKSxlPDIwPyhhPTAsaT1iW2VdKTplPHU/KGE9ZSUxMCxpPURbTWF0aC5mbG9vcihlLzEwKV0sYSYmKGkrPVwiLVwiK2JbYV0sYT0wKSk6ZTxkPyhhPWUldSxpPW4oTWF0aC5mbG9vcihlL3UpKStcIiBodW5kcmVkXCIpOmU8bT8oYT1lJWQsaT1uKE1hdGguZmxvb3IoZS9kKSkrXCIgdGhvdXNhbmQsXCIpOmU8cD8oYT1lJW0saT1uKE1hdGguZmxvb3IoZS9tKSkrXCIgbWlsbGlvbixcIik6ZTxoPyhhPWUlcCxpPW4oTWF0aC5mbG9vcihlL3ApKStcIiBiaWxsaW9uLFwiKTplPGc/KGE9ZSVoLGk9bihNYXRoLmZsb29yKGUvaCkpK1wiIHRyaWxsaW9uLFwiKTplPD15JiYoYT1lJWcsaT1uKE1hdGguZmxvb3IoZS9nKSkrXCIgcXVhZHJpbGxpb24sXCIpLHIucHVzaChpKSxuKGEscikpfSh0KSxlP2MoYSk6YX12YXIgRz17dG9PcmRpbmFsOmZ1bmN0aW9uKG4pe3ZhciBlPXBhcnNlSW50KG4sMTApO2lmKCFpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYSBmaW5pdGUgbnVtYmVyOiBcIituK1wiIChcIit0eXBlb2YgbitcIilcIik7aWYoIXIoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnB1dCBpcyBub3QgYSBzYWZlIG51bWJlciwgaXTigJlzIGVpdGhlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLlwiKTt2YXIgYT1TdHJpbmcoZSksdD1NYXRoLmFicyhlJTEwMCksbz0xMTw9dCYmdDw9MTMsTT1hLmNoYXJBdChhLmxlbmd0aC0xKTtyZXR1cm4gYSsobz9cInRoXCI6XCIxXCI9PT1NP1wic3RcIjpcIjJcIj09PU0/XCJuZFwiOlwiM1wiPT09TT9cInJkXCI6XCJ0aFwiKX0sdG9Xb3JkczpmLHRvV29yZHNPcmRpbmFsOmZ1bmN0aW9uKG4pe3JldHVybiBjKGYobikpfX07bi5leHBvcnRzJiYoZT1uLmV4cG9ydHM9RyksZS5udW1iZXJUb1dvcmRzPUd9KCl9LDgwMjpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uIG4oZSxhKXt2YXIgaSxyLHQsbz1hfHxcIlwiO2lmKCFlfHwhKFwibGVuZ3RoXCJpbiBlKSYmIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBub3QgYFwiK2UrXCJgXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlLnZhbHVlKXJldHVybiBlLnZhbHVlO2lmKDE9PT0ocj0odD1cImxlbmd0aFwiaW4gZT9lOmUuY2hpbGRyZW4pLmxlbmd0aCkmJlwidmFsdWVcImluIHRbMF0pcmV0dXJuIHRbMF0udmFsdWU7Zm9yKGk9W107ci0tOylpW3JdPW4odFtyXSxvKTtyZXR1cm4gaS5qb2luKG8pfX0sNDUwOmZ1bmN0aW9uKG4pe24uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBuPVtdLGU9W10sYT17fSxpPXt9LHI9e307ZnVuY3Rpb24gdChuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygbj9uZXcgUmVnRXhwKFwiXlwiK24rXCIkXCIsXCJpXCIpOm59ZnVuY3Rpb24gbyhuLGUpe3JldHVybiBuPT09ZT9lOm49PT1uLnRvTG93ZXJDYXNlKCk/ZS50b0xvd2VyQ2FzZSgpOm49PT1uLnRvVXBwZXJDYXNlKCk/ZS50b1VwcGVyQ2FzZSgpOm5bMF09PT1uWzBdLnRvVXBwZXJDYXNlKCk/ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpOmUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBNKG4sZSl7cmV0dXJuIG4ucmVwbGFjZSgvXFwkKFxcZHsxLDJ9KS9nLChmdW5jdGlvbihuLGEpe3JldHVybiBlW2FdfHxcIlwifSkpfWZ1bmN0aW9uIHMobixlKXtyZXR1cm4gbi5yZXBsYWNlKGVbMF0sKGZ1bmN0aW9uKGEsaSl7dmFyIHI9TShlWzFdLGFyZ3VtZW50cyk7cmV0dXJuIG8oXCJcIj09PWE/bltpLTFdOmEscil9KSl9ZnVuY3Rpb24gbChuLGUsaSl7aWYoIW4ubGVuZ3RofHxhLmhhc093blByb3BlcnR5KG4pKXJldHVybiBlO2Zvcih2YXIgcj1pLmxlbmd0aDtyLS07KXt2YXIgdD1pW3JdO2lmKHRbMF0udGVzdChlKSlyZXR1cm4gcyhlLHQpfXJldHVybiBlfWZ1bmN0aW9uIGMobixlLGEpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1pLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkocik/byhpLHIpOm4uaGFzT3duUHJvcGVydHkocik/byhpLG5bcl0pOmwocixpLGEpfX1mdW5jdGlvbiBTKG4sZSxhLGkpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1pLnRvTG93ZXJDYXNlKCk7cmV0dXJuISFlLmhhc093blByb3BlcnR5KHIpfHwhbi5oYXNPd25Qcm9wZXJ0eShyKSYmbChyLHIsYSk9PT1yfX1mdW5jdGlvbiB1KG4sZSxhKXtyZXR1cm4oYT9lK1wiIFwiOlwiXCIpKygxPT09ZT91LnNpbmd1bGFyKG4pOnUucGx1cmFsKG4pKX1yZXR1cm4gdS5wbHVyYWw9YyhyLGksbiksdS5pc1BsdXJhbD1TKHIsaSxuKSx1LnNpbmd1bGFyPWMoaSxyLGUpLHUuaXNTaW5ndWxhcj1TKGkscixlKSx1LmFkZFBsdXJhbFJ1bGU9ZnVuY3Rpb24oZSxhKXtuLnB1c2goW3QoZSksYV0pfSx1LmFkZFNpbmd1bGFyUnVsZT1mdW5jdGlvbihuLGEpe2UucHVzaChbdChuKSxhXSl9LHUuYWRkVW5jb3VudGFibGVSdWxlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCIhPXR5cGVvZiBuPyh1LmFkZFBsdXJhbFJ1bGUobixcIiQwXCIpLHUuYWRkU2luZ3VsYXJSdWxlKG4sXCIkMFwiKSk6YVtuLnRvTG93ZXJDYXNlKCldPSEwfSx1LmFkZElycmVndWxhclJ1bGU9ZnVuY3Rpb24obixlKXtlPWUudG9Mb3dlckNhc2UoKSxuPW4udG9Mb3dlckNhc2UoKSxyW25dPWUsaVtlXT1ufSxbW1wiSVwiLFwid2VcIl0sW1wibWVcIixcInVzXCJdLFtcImhlXCIsXCJ0aGV5XCJdLFtcInNoZVwiLFwidGhleVwiXSxbXCJ0aGVtXCIsXCJ0aGVtXCJdLFtcIm15c2VsZlwiLFwib3Vyc2VsdmVzXCJdLFtcInlvdXJzZWxmXCIsXCJ5b3Vyc2VsdmVzXCJdLFtcIml0c2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJoZXJzZWxmXCIsXCJ0aGVtc2VsdmVzXCJdLFtcImhpbXNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1widGhlbXNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1wiaXNcIixcImFyZVwiXSxbXCJ3YXNcIixcIndlcmVcIl0sW1wiaGFzXCIsXCJoYXZlXCJdLFtcInRoaXNcIixcInRoZXNlXCJdLFtcInRoYXRcIixcInRob3NlXCJdLFtcImVjaG9cIixcImVjaG9lc1wiXSxbXCJkaW5nb1wiLFwiZGluZ29lc1wiXSxbXCJ2b2xjYW5vXCIsXCJ2b2xjYW5vZXNcIl0sW1widG9ybmFkb1wiLFwidG9ybmFkb2VzXCJdLFtcInRvcnBlZG9cIixcInRvcnBlZG9lc1wiXSxbXCJnZW51c1wiLFwiZ2VuZXJhXCJdLFtcInZpc2N1c1wiLFwidmlzY2VyYVwiXSxbXCJzdGlnbWFcIixcInN0aWdtYXRhXCJdLFtcInN0b21hXCIsXCJzdG9tYXRhXCJdLFtcImRvZ21hXCIsXCJkb2dtYXRhXCJdLFtcImxlbW1hXCIsXCJsZW1tYXRhXCJdLFtcInNjaGVtYVwiLFwic2NoZW1hdGFcIl0sW1wiYW5hdGhlbWFcIixcImFuYXRoZW1hdGFcIl0sW1wib3hcIixcIm94ZW5cIl0sW1wiYXhlXCIsXCJheGVzXCJdLFtcImRpZVwiLFwiZGljZVwiXSxbXCJ5ZXNcIixcInllc2VzXCJdLFtcImZvb3RcIixcImZlZXRcIl0sW1wiZWF2ZVwiLFwiZWF2ZXNcIl0sW1wiZ29vc2VcIixcImdlZXNlXCJdLFtcInRvb3RoXCIsXCJ0ZWV0aFwiXSxbXCJxdWl6XCIsXCJxdWl6emVzXCJdLFtcImh1bWFuXCIsXCJodW1hbnNcIl0sW1wicHJvb2ZcIixcInByb29mc1wiXSxbXCJjYXJ2ZVwiLFwiY2FydmVzXCJdLFtcInZhbHZlXCIsXCJ2YWx2ZXNcIl0sW1wibG9vZXlcIixcImxvb2llc1wiXSxbXCJ0aGllZlwiLFwidGhpZXZlc1wiXSxbXCJncm9vdmVcIixcImdyb292ZXNcIl0sW1wicGlja2F4ZVwiLFwicGlja2F4ZXNcIl0sW1wicGFzc2VyYnlcIixcInBhc3NlcnNieVwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkSXJyZWd1bGFyUnVsZShuWzBdLG5bMV0pfSkpLFtbL3M/JC9pLFwic1wiXSxbL1teXFx1MDAwMC1cXHUwMDdGXSQvaSxcIiQwXCJdLFsvKFteYWVpb3VdZXNlKSQvaSxcIiQxXCJdLFsvKGF4fHRlc3QpaXMkL2ksXCIkMWVzXCJdLFsvKGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfHJpcykkL2ksXCIkMWVzXCJdLFsvKGVbbW5ddSlzPyQvaSxcIiQxc1wiXSxbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSxcIiQxXCJdLFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLFwiJDFpXCJdLFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKSg/OmF8YWUpJC9pLFwiJDFhZVwiXSxbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksXCIkMWltXCJdLFsvKGhlcnxhdHxncilvJC9pLFwiJDFvZXNcIl0sWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8YXV0b21hdHxxdW9yKSg/OmF8dW0pJC9pLFwiJDFhXCJdLFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLFwiJDFhXCJdLFsvc2lzJC9pLFwic2VzXCJdLFsvKD86KGtuaXx3aXxsaSlmZXwoYXJ8bHxlYXxlb3xvYXxob28pZikkL2ksXCIkMSQydmVzXCJdLFsvKFteYWVpb3V5XXxxdSl5JC9pLFwiJDFpZXNcIl0sWy8oW15jaF1baWVvXVtsbl0pZXkkL2ksXCIkMWllc1wiXSxbLyh4fGNofHNzfHNofHp6KSQvaSxcIiQxZXNcIl0sWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLFwiJDFpY2VzXCJdLFsvXFxiKCg/OnRpdCk/bXxsKSg/OmljZXxvdXNlKSQvaSxcIiQxaWNlXCJdLFsvKHBlKSg/OnJzb258b3BsZSkkL2ksXCIkMW9wbGVcIl0sWy8oY2hpbGQpKD86cmVuKT8kL2ksXCIkMXJlblwiXSxbL2VhdXgkL2ksXCIkMFwiXSxbL21bYWVdbiQvaSxcIm1lblwiXSxbXCJ0aG91XCIsXCJ5b3VcIl1dLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiB1LmFkZFBsdXJhbFJ1bGUoblswXSxuWzFdKX0pKSxbWy9zJC9pLFwiXCJdLFsvKHNzKSQvaSxcIiQxXCJdLFsvKHdpfGtuaXwoPzphZnRlcnxoYWxmfGhpZ2h8bG93fG1pZHxub258bmlnaHR8W15cXHddfF4pbGkpdmVzJC9pLFwiJDFmZVwiXSxbLyhhcnwoPzp3b3xbYWVdKWx8W2VvXVthb10pdmVzJC9pLFwiJDFmXCJdLFsvaWVzJC9pLFwieVwiXSxbL1xcYihbcGxdfHpvbWJ8KD86bmVja3xjcm9zcyk/dHxjb2xsfGZhZXJ8Zm9vZHxnZW58Z29vbnxncm91cHxsYXNzfHRhbGt8Z29hbHxjdXQpaWVzJC9pLFwiJDFpZVwiXSxbL1xcYihtb258c21pbClpZXMkL2ksXCIkMWV5XCJdLFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSxcIiQxb3VzZVwiXSxbLyhzZXJhcGh8Y2hlcnViKWltJC9pLFwiJDFcIl0sWy8oeHxjaHxzc3xzaHx6enx0dG98Z298Y2hvfGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfCg/OmhlcnxhdHxncilvfFthZWlvdV1yaXMpKD86ZXMpPyQvaSxcIiQxXCJdLFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSxcIiQxc2lzXCJdLFsvKG1vdmllfHR3ZWx2ZXxhYnVzZXxlW21uXXUpcyQvaSxcIiQxXCJdLFsvKHRlc3QpKD86aXN8ZXMpJC9pLFwiJDFpc1wiXSxbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSxcIiQxdXNcIl0sWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8cXVvcilhJC9pLFwiJDF1bVwiXSxbLyhhcGhlbGl8aHlwZXJiYXR8cGVyaWhlbGl8YXN5bmRldHxub3VtZW58cGhlbm9tZW58Y3JpdGVyaXxvcmdhbnxwcm9sZWdvbWVufGhlZHJ8YXV0b21hdClhJC9pLFwiJDFvblwiXSxbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSxcIiQxYVwiXSxbLyhjb2R8bXVyfHNpbHx2ZXJ0fGluZClpY2VzJC9pLFwiJDFleFwiXSxbLyhtYXRyfGFwcGVuZClpY2VzJC9pLFwiJDFpeFwiXSxbLyhwZSkocnNvbnxvcGxlKSQvaSxcIiQxcnNvblwiXSxbLyhjaGlsZClyZW4kL2ksXCIkMVwiXSxbLyhlYXUpeD8kL2ksXCIkMVwiXSxbL21lbiQvaSxcIm1hblwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkU2luZ3VsYXJSdWxlKG5bMF0sblsxXSl9KSksW1wiYWR1bHRob29kXCIsXCJhZHZpY2VcIixcImFnZW5kYVwiLFwiYWlkXCIsXCJhaXJjcmFmdFwiLFwiYWxjb2hvbFwiLFwiYW1tb1wiLFwiYW5hbHl0aWNzXCIsXCJhbmltZVwiLFwiYXRobGV0aWNzXCIsXCJhdWRpb1wiLFwiYmlzb25cIixcImJsb29kXCIsXCJicmVhbVwiLFwiYnVmZmFsb1wiLFwiYnV0dGVyXCIsXCJjYXJwXCIsXCJjYXNoXCIsXCJjaGFzc2lzXCIsXCJjaGVzc1wiLFwiY2xvdGhpbmdcIixcImNvZFwiLFwiY29tbWVyY2VcIixcImNvb3BlcmF0aW9uXCIsXCJjb3Jwc1wiLFwiZGVicmlzXCIsXCJkaWFiZXRlc1wiLFwiZGlnZXN0aW9uXCIsXCJlbGtcIixcImVuZXJneVwiLFwiZXF1aXBtZW50XCIsXCJleGNyZXRpb25cIixcImV4cGVydGlzZVwiLFwiZmlybXdhcmVcIixcImZsb3VuZGVyXCIsXCJmdW5cIixcImdhbGxvd3NcIixcImdhcmJhZ2VcIixcImdyYWZmaXRpXCIsXCJoYXJkd2FyZVwiLFwiaGVhZHF1YXJ0ZXJzXCIsXCJoZWFsdGhcIixcImhlcnBlc1wiLFwiaGlnaGppbmtzXCIsXCJob21ld29ya1wiLFwiaG91c2V3b3JrXCIsXCJpbmZvcm1hdGlvblwiLFwiamVhbnNcIixcImp1c3RpY2VcIixcImt1ZG9zXCIsXCJsYWJvdXJcIixcImxpdGVyYXR1cmVcIixcIm1hY2hpbmVyeVwiLFwibWFja2VyZWxcIixcIm1haWxcIixcIm1lZGlhXCIsXCJtZXdzXCIsXCJtb29zZVwiLFwibXVzaWNcIixcIm11ZFwiLFwibWFuZ2FcIixcIm5ld3NcIixcIm9ubHlcIixcInBlcnNvbm5lbFwiLFwicGlrZVwiLFwicGxhbmt0b25cIixcInBsaWVyc1wiLFwicG9saWNlXCIsXCJwb2xsdXRpb25cIixcInByZW1pc2VzXCIsXCJyYWluXCIsXCJyZXNlYXJjaFwiLFwicmljZVwiLFwic2FsbW9uXCIsXCJzY2lzc29yc1wiLFwic2VyaWVzXCIsXCJzZXdhZ2VcIixcInNoYW1ibGVzXCIsXCJzaHJpbXBcIixcInNvZnR3YXJlXCIsXCJzcGVjaWVzXCIsXCJzdGFmZlwiLFwic3dpbmVcIixcInRlbm5pc1wiLFwidHJhZmZpY1wiLFwidHJhbnNwb3J0YXRpb25cIixcInRyb3V0XCIsXCJ0dW5hXCIsXCJ3ZWFsdGhcIixcIndlbGZhcmVcIixcIndoaXRpbmdcIixcIndpbGRlYmVlc3RcIixcIndpbGRsaWZlXCIsXCJ5b3VcIiwvcG9rW2XDqV1tb24kL2ksL1teYWVpb3VdZXNlJC9pLC9kZWVyJC9pLC9maXNoJC9pLC9tZWFzbGVzJC9pLC9vW2l1XXMkL2ksL3BveCQvaSwvc2hlZXAkL2ldLmZvckVhY2godS5hZGRVbmNvdW50YWJsZVJ1bGUpLHV9KCl9LDcwMzoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg0MTQpO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gdCgpe310LnJlc2V0V2FybmluZ0NhY2hlPXIsbi5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGUsYSxyLHQsbyl7aWYobyE9PWkpe3ZhciBNPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgTS5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLE19fWZ1bmN0aW9uIGUoKXtyZXR1cm4gbn1uLmlzUmVxdWlyZWQ9bjt2YXIgYT17YXJyYXk6bixiaWdpbnQ6bixib29sOm4sZnVuYzpuLG51bWJlcjpuLG9iamVjdDpuLHN0cmluZzpuLHN5bWJvbDpuLGFueTpuLGFycmF5T2Y6ZSxlbGVtZW50Om4sZWxlbWVudFR5cGU6bixpbnN0YW5jZU9mOmUsbm9kZTpuLG9iamVjdE9mOmUsb25lT2Y6ZSxvbmVPZlR5cGU6ZSxzaGFwZTplLGV4YWN0OmUsY2hlY2tQcm9wVHlwZXM6dCxyZXNldFdhcm5pbmdDYWNoZTpyfTtyZXR1cm4gYS5Qcm9wVHlwZXM9YSxhfX0sNjk3OihuLGUsYSk9PntuLmV4cG9ydHM9YSg3MDMpKCl9LDQxNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPVwiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRURcIn0sMzc5Om49PntcInVzZSBzdHJpY3RcIjt2YXIgZT1bXTtmdW5jdGlvbiBhKG4pe2Zvcih2YXIgYT0tMSxpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5pZGVudGlmaWVyPT09bil7YT1pO2JyZWFrfXJldHVybiBhfWZ1bmN0aW9uIGkobixpKXtmb3IodmFyIHQ9e30sbz1bXSxNPTA7TTxuLmxlbmd0aDtNKyspe3ZhciBzPW5bTV0sbD1pLmJhc2U/c1swXStpLmJhc2U6c1swXSxjPXRbbF18fDAsUz1cIlwiLmNvbmNhdChsLFwiIFwiKS5jb25jYXQoYyk7dFtsXT1jKzE7dmFyIHU9YShTKSxkPXtjc3M6c1sxXSxtZWRpYTpzWzJdLHNvdXJjZU1hcDpzWzNdLHN1cHBvcnRzOnNbNF0sbGF5ZXI6c1s1XX07aWYoLTEhPT11KWVbdV0ucmVmZXJlbmNlcysrLGVbdV0udXBkYXRlcihkKTtlbHNle3ZhciBtPXIoZCxpKTtpLmJ5SW5kZXg9TSxlLnNwbGljZShNLDAse2lkZW50aWZpZXI6Uyx1cGRhdGVyOm0scmVmZXJlbmNlczoxfSl9by5wdXNoKFMpfXJldHVybiBvfWZ1bmN0aW9uIHIobixlKXt2YXIgYT1lLmRvbUFQSShlKTtyZXR1cm4gYS51cGRhdGUobiksZnVuY3Rpb24oZSl7aWYoZSl7aWYoZS5jc3M9PT1uLmNzcyYmZS5tZWRpYT09PW4ubWVkaWEmJmUuc291cmNlTWFwPT09bi5zb3VyY2VNYXAmJmUuc3VwcG9ydHM9PT1uLnN1cHBvcnRzJiZlLmxheWVyPT09bi5sYXllcilyZXR1cm47YS51cGRhdGUobj1lKX1lbHNlIGEucmVtb3ZlKCl9fW4uZXhwb3J0cz1mdW5jdGlvbihuLHIpe3ZhciB0PWkobj1ufHxbXSxyPXJ8fHt9KTtyZXR1cm4gZnVuY3Rpb24obil7bj1ufHxbXTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIE09YSh0W29dKTtlW01dLnJlZmVyZW5jZXMtLX1mb3IodmFyIHM9aShuLHIpLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9YSh0W2xdKTswPT09ZVtjXS5yZWZlcmVuY2VzJiYoZVtjXS51cGRhdGVyKCksZS5zcGxpY2UoYywxKSl9dD1zfX19LDU2OTpuPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9e307bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSl7dmFyIGk9ZnVuY3Rpb24obil7aWYodm9pZCAwPT09ZVtuXSl7dmFyIGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTtpZih3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQmJmEgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpdHJ5e2E9YS5jb250ZW50RG9jdW1lbnQuaGVhZH1jYXRjaChuKXthPW51bGx9ZVtuXT1hfXJldHVybiBlW25dfShuKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO2kuYXBwZW5kQ2hpbGQoYSl9fSwyMTY6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIG4uc2V0QXR0cmlidXRlcyhlLG4uYXR0cmlidXRlcyksbi5pbnNlcnQoZSxuLm9wdGlvbnMpLGV9fSw1NjU6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1hLm5jO2UmJm4uc2V0QXR0cmlidXRlKFwibm9uY2VcIixlKX19LDc5NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPW4uaW5zZXJ0U3R5bGVFbGVtZW50KG4pO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7IWZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1cIlwiO2Euc3VwcG9ydHMmJihpKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGEuc3VwcG9ydHMsXCIpIHtcIikpLGEubWVkaWEmJihpKz1cIkBtZWRpYSBcIi5jb25jYXQoYS5tZWRpYSxcIiB7XCIpKTt2YXIgcj12b2lkIDAhPT1hLmxheWVyO3ImJihpKz1cIkBsYXllclwiLmNvbmNhdChhLmxheWVyLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChhLmxheWVyKTpcIlwiLFwiIHtcIikpLGkrPWEuY3NzLHImJihpKz1cIn1cIiksYS5tZWRpYSYmKGkrPVwifVwiKSxhLnN1cHBvcnRzJiYoaSs9XCJ9XCIpO3ZhciB0PWEuc291cmNlTWFwO3QmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBidG9hJiYoaSs9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0KSkpKSxcIiAqL1wiKSksZS5zdHlsZVRhZ1RyYW5zZm9ybShpLG4sZS5vcHRpb25zKX0oZSxuLGEpfSxyZW1vdmU6ZnVuY3Rpb24oKXshZnVuY3Rpb24obil7aWYobnVsbD09PW4ucGFyZW50Tm9kZSlyZXR1cm4hMTtuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9KGUpfX19fSw1ODk6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGUpe2lmKGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1uO2Vsc2V7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKX19fSw3NjY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTE0KTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT1lJiZlLmNoaWxkcmVuO2lmKCFhKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgY2hpbGRyZW4gaW4gYHBhcmVudGAgZm9yIGBtb2RpZmllcmBcIik7aShhLG4sZSl9fShmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oZSxhKXtyZXR1cm4gbihlLGEsdGhpcyl9fShuKSl9fSwyMDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT0tMSxpPWUmJmUuY2hpbGRyZW47aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBjaGlsZHJlbiBpbiBgcGFyZW50YCBmb3IgYHZpc2l0b3JgXCIpO2Zvcig7KythIGluIGk7KW4oaVthXSxhLGUpfX19LDc2MTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPUpTT04ucGFyc2UoJ3tcIjEwNVwiOlwiaVwiLFwiMTkyXCI6XCJBXCIsXCIxOTNcIjpcIkFcIixcIjE5NFwiOlwiQVwiLFwiMTk1XCI6XCJBXCIsXCIxOTZcIjpcIkFcIixcIjE5N1wiOlwiQVwiLFwiMTk5XCI6XCJDXCIsXCIyMDBcIjpcIkVcIixcIjIwMVwiOlwiRVwiLFwiMjAyXCI6XCJFXCIsXCIyMDNcIjpcIkVcIixcIjIwNFwiOlwiSVwiLFwiMjA1XCI6XCJJXCIsXCIyMDZcIjpcIklcIixcIjIwN1wiOlwiSVwiLFwiMjA5XCI6XCJOXCIsXCIyMTBcIjpcIk9cIixcIjIxMVwiOlwiT1wiLFwiMjEyXCI6XCJPXCIsXCIyMTNcIjpcIk9cIixcIjIxNFwiOlwiT1wiLFwiMjE2XCI6XCJPXCIsXCIyMTdcIjpcIlVcIixcIjIxOFwiOlwiVVwiLFwiMjE5XCI6XCJVXCIsXCIyMjBcIjpcIlVcIixcIjIyMVwiOlwiWVwiLFwiMjI0XCI6XCJhXCIsXCIyMjVcIjpcImFcIixcIjIyNlwiOlwiYVwiLFwiMjI3XCI6XCJhXCIsXCIyMjhcIjpcImFcIixcIjIyOVwiOlwiYVwiLFwiMjMxXCI6XCJjXCIsXCIyMzJcIjpcImVcIixcIjIzM1wiOlwiZVwiLFwiMjM0XCI6XCJlXCIsXCIyMzVcIjpcImVcIixcIjIzNlwiOlwiaVwiLFwiMjM3XCI6XCJpXCIsXCIyMzhcIjpcImlcIixcIjIzOVwiOlwiaVwiLFwiMjQxXCI6XCJuXCIsXCIyNDJcIjpcIm9cIixcIjI0M1wiOlwib1wiLFwiMjQ0XCI6XCJvXCIsXCIyNDVcIjpcIm9cIixcIjI0NlwiOlwib1wiLFwiMjQ4XCI6XCJvXCIsXCIyNDlcIjpcInVcIixcIjI1MFwiOlwidVwiLFwiMjUxXCI6XCJ1XCIsXCIyNTJcIjpcInVcIixcIjI1M1wiOlwieVwiLFwiMjU1XCI6XCJ5XCIsXCIyNTZcIjpcIkFcIixcIjI1N1wiOlwiYVwiLFwiMjU4XCI6XCJBXCIsXCIyNTlcIjpcImFcIixcIjI2MFwiOlwiQVwiLFwiMjYxXCI6XCJhXCIsXCIyNjJcIjpcIkNcIixcIjI2M1wiOlwiY1wiLFwiMjY0XCI6XCJDXCIsXCIyNjVcIjpcImNcIixcIjI2NlwiOlwiQ1wiLFwiMjY3XCI6XCJjXCIsXCIyNjhcIjpcIkNcIixcIjI2OVwiOlwiY1wiLFwiMjcwXCI6XCJEXCIsXCIyNzFcIjpcImRcIixcIjI3MlwiOlwiRFwiLFwiMjczXCI6XCJkXCIsXCIyNzRcIjpcIkVcIixcIjI3NVwiOlwiZVwiLFwiMjc2XCI6XCJFXCIsXCIyNzdcIjpcImVcIixcIjI3OFwiOlwiRVwiLFwiMjc5XCI6XCJlXCIsXCIyODBcIjpcIkVcIixcIjI4MVwiOlwiZVwiLFwiMjgyXCI6XCJFXCIsXCIyODNcIjpcImVcIixcIjI4NFwiOlwiR1wiLFwiMjg1XCI6XCJnXCIsXCIyODZcIjpcIkdcIixcIjI4N1wiOlwiZ1wiLFwiMjg4XCI6XCJHXCIsXCIyODlcIjpcImdcIixcIjI5MFwiOlwiR1wiLFwiMjkxXCI6XCJnXCIsXCIyOTJcIjpcIkhcIixcIjI5M1wiOlwiaFwiLFwiMjk0XCI6XCJIXCIsXCIyOTVcIjpcImhcIixcIjI5NlwiOlwiSVwiLFwiMjk3XCI6XCJpXCIsXCIyOThcIjpcIklcIixcIjI5OVwiOlwiaVwiLFwiMzAwXCI6XCJJXCIsXCIzMDFcIjpcImlcIixcIjMwMlwiOlwiSVwiLFwiMzAzXCI6XCJpXCIsXCIzMDRcIjpcIklcIixcIjMwOFwiOlwiSlwiLFwiMzA5XCI6XCJqXCIsXCIzMTBcIjpcIktcIixcIjMxMVwiOlwia1wiLFwiMzEzXCI6XCJMXCIsXCIzMTRcIjpcImxcIixcIjMxNVwiOlwiTFwiLFwiMzE2XCI6XCJsXCIsXCIzMTdcIjpcIkxcIixcIjMxOFwiOlwibFwiLFwiMzE5XCI6XCJMXCIsXCIzMjBcIjpcImxcIixcIjMyMVwiOlwiTFwiLFwiMzIyXCI6XCJsXCIsXCIzMjNcIjpcIk5cIixcIjMyNFwiOlwiblwiLFwiMzI1XCI6XCJOXCIsXCIzMjZcIjpcIm5cIixcIjMyN1wiOlwiTlwiLFwiMzI4XCI6XCJuXCIsXCIzMzJcIjpcIk9cIixcIjMzM1wiOlwib1wiLFwiMzM0XCI6XCJPXCIsXCIzMzVcIjpcIm9cIixcIjMzNlwiOlwiT1wiLFwiMzM3XCI6XCJvXCIsXCIzMzhcIjpcIk9cIixcIjMzOVwiOlwib1wiLFwiMzQwXCI6XCJSXCIsXCIzNDFcIjpcInJcIixcIjM0MlwiOlwiUlwiLFwiMzQzXCI6XCJyXCIsXCIzNDRcIjpcIlJcIixcIjM0NVwiOlwiclwiLFwiMzQ2XCI6XCJTXCIsXCIzNDdcIjpcInNcIixcIjM0OFwiOlwiU1wiLFwiMzQ5XCI6XCJzXCIsXCIzNTBcIjpcIlNcIixcIjM1MVwiOlwic1wiLFwiMzUyXCI6XCJTXCIsXCIzNTNcIjpcInNcIixcIjM1NFwiOlwiVFwiLFwiMzU1XCI6XCJ0XCIsXCIzNTZcIjpcIlRcIixcIjM1N1wiOlwidFwiLFwiMzU4XCI6XCJUXCIsXCIzNTlcIjpcInRcIixcIjM2MFwiOlwiVVwiLFwiMzYxXCI6XCJ1XCIsXCIzNjJcIjpcIlVcIixcIjM2M1wiOlwidVwiLFwiMzY0XCI6XCJVXCIsXCIzNjVcIjpcInVcIixcIjM2NlwiOlwiVVwiLFwiMzY3XCI6XCJ1XCIsXCIzNjhcIjpcIlVcIixcIjM2OVwiOlwidVwiLFwiMzcwXCI6XCJVXCIsXCIzNzFcIjpcInVcIixcIjM3MlwiOlwiV1wiLFwiMzczXCI6XCJ3XCIsXCIzNzRcIjpcIllcIixcIjM3NVwiOlwieVwiLFwiMzc2XCI6XCJZXCIsXCIzNzdcIjpcIlpcIixcIjM3OFwiOlwielwiLFwiMzc5XCI6XCJaXCIsXCIzODBcIjpcInpcIixcIjM4MVwiOlwiWlwiLFwiMzgyXCI6XCJ6XCIsXCIzODRcIjpcImJcIixcIjM4NVwiOlwiQlwiLFwiMzg2XCI6XCJCXCIsXCIzODdcIjpcImJcIixcIjM5MFwiOlwiT1wiLFwiMzkxXCI6XCJDXCIsXCIzOTJcIjpcImNcIixcIjM5M1wiOlwiRFwiLFwiMzk0XCI6XCJEXCIsXCIzOTVcIjpcIkRcIixcIjM5NlwiOlwiZFwiLFwiMzk4XCI6XCJFXCIsXCI0MDBcIjpcIkVcIixcIjQwMVwiOlwiRlwiLFwiNDAyXCI6XCJmXCIsXCI0MDNcIjpcIkdcIixcIjQwN1wiOlwiSVwiLFwiNDA4XCI6XCJLXCIsXCI0MDlcIjpcImtcIixcIjQxMFwiOlwibFwiLFwiNDEyXCI6XCJNXCIsXCI0MTNcIjpcIk5cIixcIjQxNFwiOlwiblwiLFwiNDE1XCI6XCJPXCIsXCI0MTZcIjpcIk9cIixcIjQxN1wiOlwib1wiLFwiNDIwXCI6XCJQXCIsXCI0MjFcIjpcInBcIixcIjQyMlwiOlwiUlwiLFwiNDI3XCI6XCJ0XCIsXCI0MjhcIjpcIlRcIixcIjQyOVwiOlwidFwiLFwiNDMwXCI6XCJUXCIsXCI0MzFcIjpcIlVcIixcIjQzMlwiOlwidVwiLFwiNDM0XCI6XCJWXCIsXCI0MzVcIjpcIllcIixcIjQzNlwiOlwieVwiLFwiNDM3XCI6XCJaXCIsXCI0MzhcIjpcInpcIixcIjQ2MVwiOlwiQVwiLFwiNDYyXCI6XCJhXCIsXCI0NjNcIjpcIklcIixcIjQ2NFwiOlwiaVwiLFwiNDY1XCI6XCJPXCIsXCI0NjZcIjpcIm9cIixcIjQ2N1wiOlwiVVwiLFwiNDY4XCI6XCJ1XCIsXCI0NzdcIjpcImVcIixcIjQ4NFwiOlwiR1wiLFwiNDg1XCI6XCJnXCIsXCI0ODZcIjpcIkdcIixcIjQ4N1wiOlwiZ1wiLFwiNDg4XCI6XCJLXCIsXCI0ODlcIjpcImtcIixcIjQ5MFwiOlwiT1wiLFwiNDkxXCI6XCJvXCIsXCI1MDBcIjpcIkdcIixcIjUwMVwiOlwiZ1wiLFwiNTA0XCI6XCJOXCIsXCI1MDVcIjpcIm5cIixcIjUxMlwiOlwiQVwiLFwiNTEzXCI6XCJhXCIsXCI1MTRcIjpcIkFcIixcIjUxNVwiOlwiYVwiLFwiNTE2XCI6XCJFXCIsXCI1MTdcIjpcImVcIixcIjUxOFwiOlwiRVwiLFwiNTE5XCI6XCJlXCIsXCI1MjBcIjpcIklcIixcIjUyMVwiOlwiaVwiLFwiNTIyXCI6XCJJXCIsXCI1MjNcIjpcImlcIixcIjUyNFwiOlwiT1wiLFwiNTI1XCI6XCJvXCIsXCI1MjZcIjpcIk9cIixcIjUyN1wiOlwib1wiLFwiNTI4XCI6XCJSXCIsXCI1MjlcIjpcInJcIixcIjUzMFwiOlwiUlwiLFwiNTMxXCI6XCJyXCIsXCI1MzJcIjpcIlVcIixcIjUzM1wiOlwidVwiLFwiNTM0XCI6XCJVXCIsXCI1MzVcIjpcInVcIixcIjUzNlwiOlwiU1wiLFwiNTM3XCI6XCJzXCIsXCI1MzhcIjpcIlRcIixcIjUzOVwiOlwidFwiLFwiNTQyXCI6XCJIXCIsXCI1NDNcIjpcImhcIixcIjU0NFwiOlwiTlwiLFwiNTQ1XCI6XCJkXCIsXCI1NDhcIjpcIlpcIixcIjU0OVwiOlwielwiLFwiNTUwXCI6XCJBXCIsXCI1NTFcIjpcImFcIixcIjU1MlwiOlwiRVwiLFwiNTUzXCI6XCJlXCIsXCI1NThcIjpcIk9cIixcIjU1OVwiOlwib1wiLFwiNTYyXCI6XCJZXCIsXCI1NjNcIjpcInlcIixcIjU2NFwiOlwibFwiLFwiNTY1XCI6XCJuXCIsXCI1NjZcIjpcInRcIixcIjU2N1wiOlwialwiLFwiNTcwXCI6XCJBXCIsXCI1NzFcIjpcIkNcIixcIjU3MlwiOlwiY1wiLFwiNTczXCI6XCJMXCIsXCI1NzRcIjpcIlRcIixcIjU3NVwiOlwic1wiLFwiNTc2XCI6XCJ6XCIsXCI1NzlcIjpcIkJcIixcIjU4MFwiOlwiVVwiLFwiNTgxXCI6XCJWXCIsXCI1ODJcIjpcIkVcIixcIjU4M1wiOlwiZVwiLFwiNTg0XCI6XCJKXCIsXCI1ODVcIjpcImpcIixcIjU4NlwiOlwiUVwiLFwiNTg3XCI6XCJxXCIsXCI1ODhcIjpcIlJcIixcIjU4OVwiOlwiclwiLFwiNTkwXCI6XCJZXCIsXCI1OTFcIjpcInlcIixcIjU5MlwiOlwiYVwiLFwiNTkzXCI6XCJhXCIsXCI1OTVcIjpcImJcIixcIjU5NlwiOlwib1wiLFwiNTk3XCI6XCJjXCIsXCI1OThcIjpcImRcIixcIjU5OVwiOlwiZFwiLFwiNjAwXCI6XCJlXCIsXCI2MDNcIjpcImVcIixcIjYwNFwiOlwiZVwiLFwiNjA1XCI6XCJlXCIsXCI2MDZcIjpcImVcIixcIjYwN1wiOlwialwiLFwiNjA4XCI6XCJnXCIsXCI2MDlcIjpcImdcIixcIjYxMFwiOlwiZ1wiLFwiNjEzXCI6XCJoXCIsXCI2MTRcIjpcImhcIixcIjYxNlwiOlwiaVwiLFwiNjE4XCI6XCJpXCIsXCI2MTlcIjpcImxcIixcIjYyMFwiOlwibFwiLFwiNjIxXCI6XCJsXCIsXCI2MjNcIjpcIm1cIixcIjYyNFwiOlwibVwiLFwiNjI1XCI6XCJtXCIsXCI2MjZcIjpcIm5cIixcIjYyN1wiOlwiblwiLFwiNjI4XCI6XCJuXCIsXCI2MjlcIjpcIm9cIixcIjYzM1wiOlwiclwiLFwiNjM0XCI6XCJyXCIsXCI2MzVcIjpcInJcIixcIjYzNlwiOlwiclwiLFwiNjM3XCI6XCJyXCIsXCI2MzhcIjpcInJcIixcIjYzOVwiOlwiclwiLFwiNjQwXCI6XCJyXCIsXCI2NDFcIjpcInJcIixcIjY0MlwiOlwic1wiLFwiNjQ3XCI6XCJ0XCIsXCI2NDhcIjpcInRcIixcIjY0OVwiOlwidVwiLFwiNjUxXCI6XCJ2XCIsXCI2NTJcIjpcInZcIixcIjY1M1wiOlwid1wiLFwiNjU0XCI6XCJ5XCIsXCI2NTVcIjpcInlcIixcIjY1NlwiOlwielwiLFwiNjU3XCI6XCJ6XCIsXCI2NjNcIjpcImNcIixcIjY2NVwiOlwiYlwiLFwiNjY2XCI6XCJlXCIsXCI2NjdcIjpcImdcIixcIjY2OFwiOlwiaFwiLFwiNjY5XCI6XCJqXCIsXCI2NzBcIjpcImtcIixcIjY3MVwiOlwibFwiLFwiNjcyXCI6XCJxXCIsXCI2ODZcIjpcImhcIixcIjY4OFwiOlwiaFwiLFwiNjkwXCI6XCJqXCIsXCI2OTFcIjpcInJcIixcIjY5MlwiOlwiclwiLFwiNjk0XCI6XCJyXCIsXCI2OTVcIjpcIndcIixcIjY5NlwiOlwieVwiLFwiNzM3XCI6XCJsXCIsXCI3MzhcIjpcInNcIixcIjczOVwiOlwieFwiLFwiNzgwXCI6XCJ2XCIsXCI4MjlcIjpcInhcIixcIjg1MVwiOlwieFwiLFwiODY3XCI6XCJhXCIsXCI4NjhcIjpcImVcIixcIjg2OVwiOlwiaVwiLFwiODcwXCI6XCJvXCIsXCI4NzFcIjpcInVcIixcIjg3MlwiOlwiY1wiLFwiODczXCI6XCJkXCIsXCI4NzRcIjpcImhcIixcIjg3NVwiOlwibVwiLFwiODc2XCI6XCJyXCIsXCI4NzdcIjpcInRcIixcIjg3OFwiOlwidlwiLFwiODc5XCI6XCJ4XCIsXCI3NDI0XCI6XCJhXCIsXCI3NDI3XCI6XCJiXCIsXCI3NDI4XCI6XCJjXCIsXCI3NDI5XCI6XCJkXCIsXCI3NDMxXCI6XCJlXCIsXCI3NDMyXCI6XCJlXCIsXCI3NDMzXCI6XCJpXCIsXCI3NDM0XCI6XCJqXCIsXCI3NDM1XCI6XCJrXCIsXCI3NDM2XCI6XCJsXCIsXCI3NDM3XCI6XCJtXCIsXCI3NDM4XCI6XCJuXCIsXCI3NDM5XCI6XCJvXCIsXCI3NDQwXCI6XCJvXCIsXCI3NDQxXCI6XCJvXCIsXCI3NDQyXCI6XCJvXCIsXCI3NDQzXCI6XCJvXCIsXCI3NDQ2XCI6XCJvXCIsXCI3NDQ3XCI6XCJvXCIsXCI3NDQ4XCI6XCJwXCIsXCI3NDQ5XCI6XCJyXCIsXCI3NDUwXCI6XCJyXCIsXCI3NDUxXCI6XCJ0XCIsXCI3NDUyXCI6XCJ1XCIsXCI3NDUzXCI6XCJ1XCIsXCI3NDU0XCI6XCJ1XCIsXCI3NDU1XCI6XCJtXCIsXCI3NDU2XCI6XCJ2XCIsXCI3NDU3XCI6XCJ3XCIsXCI3NDU4XCI6XCJ6XCIsXCI3NTIyXCI6XCJpXCIsXCI3NTIzXCI6XCJyXCIsXCI3NTI0XCI6XCJ1XCIsXCI3NTI1XCI6XCJ2XCIsXCI3NjgwXCI6XCJBXCIsXCI3NjgxXCI6XCJhXCIsXCI3NjgyXCI6XCJCXCIsXCI3NjgzXCI6XCJiXCIsXCI3Njg0XCI6XCJCXCIsXCI3Njg1XCI6XCJiXCIsXCI3Njg2XCI6XCJCXCIsXCI3Njg3XCI6XCJiXCIsXCI3NjkwXCI6XCJEXCIsXCI3NjkxXCI6XCJkXCIsXCI3NjkyXCI6XCJEXCIsXCI3NjkzXCI6XCJkXCIsXCI3Njk0XCI6XCJEXCIsXCI3Njk1XCI6XCJkXCIsXCI3Njk2XCI6XCJEXCIsXCI3Njk3XCI6XCJkXCIsXCI3Njk4XCI6XCJEXCIsXCI3Njk5XCI6XCJkXCIsXCI3NzA0XCI6XCJFXCIsXCI3NzA1XCI6XCJlXCIsXCI3NzA2XCI6XCJFXCIsXCI3NzA3XCI6XCJlXCIsXCI3NzEwXCI6XCJGXCIsXCI3NzExXCI6XCJmXCIsXCI3NzEyXCI6XCJHXCIsXCI3NzEzXCI6XCJnXCIsXCI3NzE0XCI6XCJIXCIsXCI3NzE1XCI6XCJoXCIsXCI3NzE2XCI6XCJIXCIsXCI3NzE3XCI6XCJoXCIsXCI3NzE4XCI6XCJIXCIsXCI3NzE5XCI6XCJoXCIsXCI3NzIwXCI6XCJIXCIsXCI3NzIxXCI6XCJoXCIsXCI3NzIyXCI6XCJIXCIsXCI3NzIzXCI6XCJoXCIsXCI3NzI0XCI6XCJJXCIsXCI3NzI1XCI6XCJpXCIsXCI3NzI4XCI6XCJLXCIsXCI3NzI5XCI6XCJrXCIsXCI3NzMwXCI6XCJLXCIsXCI3NzMxXCI6XCJrXCIsXCI3NzMyXCI6XCJLXCIsXCI3NzMzXCI6XCJrXCIsXCI3NzM0XCI6XCJMXCIsXCI3NzM1XCI6XCJsXCIsXCI3NzM4XCI6XCJMXCIsXCI3NzM5XCI6XCJsXCIsXCI3NzQwXCI6XCJMXCIsXCI3NzQxXCI6XCJsXCIsXCI3NzQyXCI6XCJNXCIsXCI3NzQzXCI6XCJtXCIsXCI3NzQ0XCI6XCJNXCIsXCI3NzQ1XCI6XCJtXCIsXCI3NzQ2XCI6XCJNXCIsXCI3NzQ3XCI6XCJtXCIsXCI3NzQ4XCI6XCJOXCIsXCI3NzQ5XCI6XCJuXCIsXCI3NzUwXCI6XCJOXCIsXCI3NzUxXCI6XCJuXCIsXCI3NzUyXCI6XCJOXCIsXCI3NzUzXCI6XCJuXCIsXCI3NzU0XCI6XCJOXCIsXCI3NzU1XCI6XCJuXCIsXCI3NzY0XCI6XCJQXCIsXCI3NzY1XCI6XCJwXCIsXCI3NzY2XCI6XCJQXCIsXCI3NzY3XCI6XCJwXCIsXCI3NzY4XCI6XCJSXCIsXCI3NzY5XCI6XCJyXCIsXCI3NzcwXCI6XCJSXCIsXCI3NzcxXCI6XCJyXCIsXCI3Nzc0XCI6XCJSXCIsXCI3Nzc1XCI6XCJyXCIsXCI3Nzc2XCI6XCJTXCIsXCI3Nzc3XCI6XCJzXCIsXCI3Nzc4XCI6XCJTXCIsXCI3Nzc5XCI6XCJzXCIsXCI3Nzg2XCI6XCJUXCIsXCI3Nzg3XCI6XCJ0XCIsXCI3Nzg4XCI6XCJUXCIsXCI3Nzg5XCI6XCJ0XCIsXCI3NzkwXCI6XCJUXCIsXCI3NzkxXCI6XCJ0XCIsXCI3NzkyXCI6XCJUXCIsXCI3NzkzXCI6XCJ0XCIsXCI3Nzk0XCI6XCJVXCIsXCI3Nzk1XCI6XCJ1XCIsXCI3Nzk2XCI6XCJVXCIsXCI3Nzk3XCI6XCJ1XCIsXCI3Nzk4XCI6XCJVXCIsXCI3Nzk5XCI6XCJ1XCIsXCI3ODA0XCI6XCJWXCIsXCI3ODA1XCI6XCJ2XCIsXCI3ODA2XCI6XCJWXCIsXCI3ODA3XCI6XCJ2XCIsXCI3ODA4XCI6XCJXXCIsXCI3ODA5XCI6XCJ3XCIsXCI3ODEwXCI6XCJXXCIsXCI3ODExXCI6XCJ3XCIsXCI3ODEyXCI6XCJXXCIsXCI3ODEzXCI6XCJ3XCIsXCI3ODE0XCI6XCJXXCIsXCI3ODE1XCI6XCJ3XCIsXCI3ODE2XCI6XCJXXCIsXCI3ODE3XCI6XCJ3XCIsXCI3ODE4XCI6XCJYXCIsXCI3ODE5XCI6XCJ4XCIsXCI3ODIwXCI6XCJYXCIsXCI3ODIxXCI6XCJ4XCIsXCI3ODIyXCI6XCJZXCIsXCI3ODIzXCI6XCJ5XCIsXCI3ODI0XCI6XCJaXCIsXCI3ODI1XCI6XCJ6XCIsXCI3ODI2XCI6XCJaXCIsXCI3ODI3XCI6XCJ6XCIsXCI3ODI4XCI6XCJaXCIsXCI3ODI5XCI6XCJ6XCIsXCI3ODM1XCI6XCJzXCIsXCI3ODQwXCI6XCJBXCIsXCI3ODQxXCI6XCJhXCIsXCI3ODQyXCI6XCJBXCIsXCI3ODQzXCI6XCJhXCIsXCI3ODY0XCI6XCJFXCIsXCI3ODY1XCI6XCJlXCIsXCI3ODY2XCI6XCJFXCIsXCI3ODY3XCI6XCJlXCIsXCI3ODY4XCI6XCJFXCIsXCI3ODY5XCI6XCJlXCIsXCI3ODgwXCI6XCJJXCIsXCI3ODgxXCI6XCJpXCIsXCI3ODgyXCI6XCJJXCIsXCI3ODgzXCI6XCJpXCIsXCI3ODg0XCI6XCJPXCIsXCI3ODg1XCI6XCJvXCIsXCI3ODg2XCI6XCJPXCIsXCI3ODg3XCI6XCJvXCIsXCI3OTA4XCI6XCJVXCIsXCI3OTA5XCI6XCJ1XCIsXCI3OTEwXCI6XCJVXCIsXCI3OTExXCI6XCJ1XCIsXCI3OTIyXCI6XCJZXCIsXCI3OTIzXCI6XCJ5XCIsXCI3OTI0XCI6XCJZXCIsXCI3OTI1XCI6XCJ5XCIsXCI3OTI2XCI6XCJZXCIsXCI3OTI3XCI6XCJ5XCIsXCI3OTI4XCI6XCJZXCIsXCI3OTI5XCI6XCJ5XCIsXCI4MzA1XCI6XCJpXCIsXCI4MzQxXCI6XCJoXCIsXCI4MzQyXCI6XCJrXCIsXCI4MzQzXCI6XCJsXCIsXCI4MzQ0XCI6XCJtXCIsXCI4MzQ1XCI6XCJuXCIsXCI4MzQ2XCI6XCJwXCIsXCI4MzQ3XCI6XCJzXCIsXCI4MzQ4XCI6XCJ0XCIsXCI4NDUwXCI6XCJjXCIsXCI4NDU4XCI6XCJnXCIsXCI4NDU5XCI6XCJoXCIsXCI4NDYwXCI6XCJoXCIsXCI4NDYxXCI6XCJoXCIsXCI4NDY0XCI6XCJpXCIsXCI4NDY1XCI6XCJpXCIsXCI4NDY2XCI6XCJsXCIsXCI4NDY3XCI6XCJsXCIsXCI4NDY4XCI6XCJsXCIsXCI4NDY5XCI6XCJuXCIsXCI4NDcyXCI6XCJwXCIsXCI4NDczXCI6XCJwXCIsXCI4NDc0XCI6XCJxXCIsXCI4NDc1XCI6XCJyXCIsXCI4NDc2XCI6XCJyXCIsXCI4NDc3XCI6XCJyXCIsXCI4NDg0XCI6XCJ6XCIsXCI4NDg4XCI6XCJ6XCIsXCI4NDkyXCI6XCJiXCIsXCI4NDkzXCI6XCJjXCIsXCI4NDk1XCI6XCJlXCIsXCI4NDk2XCI6XCJlXCIsXCI4NDk3XCI6XCJmXCIsXCI4NDk4XCI6XCJGXCIsXCI4NDk5XCI6XCJtXCIsXCI4NTAwXCI6XCJvXCIsXCI4NTA2XCI6XCJxXCIsXCI4NTEzXCI6XCJnXCIsXCI4NTE0XCI6XCJsXCIsXCI4NTE1XCI6XCJsXCIsXCI4NTE2XCI6XCJ5XCIsXCI4NTE3XCI6XCJkXCIsXCI4NTE4XCI6XCJkXCIsXCI4NTE5XCI6XCJlXCIsXCI4NTIwXCI6XCJpXCIsXCI4NTIxXCI6XCJqXCIsXCI4NTI2XCI6XCJmXCIsXCI4NTc5XCI6XCJDXCIsXCI4NTgwXCI6XCJjXCIsXCI4NzY1XCI6XCJzXCIsXCI4NzY2XCI6XCJzXCIsXCI4OTU5XCI6XCJ6XCIsXCI4OTk5XCI6XCJ4XCIsXCI5NzQ2XCI6XCJ4XCIsXCI5Nzc2XCI6XCJpXCIsXCI5ODY2XCI6XCJpXCIsXCIxMDAwNVwiOlwieFwiLFwiMTAwMDZcIjpcInhcIixcIjEwMDA3XCI6XCJ4XCIsXCIxMDAwOFwiOlwieFwiLFwiMTA2MjVcIjpcInpcIixcIjEwNjI2XCI6XCJ6XCIsXCIxMTM2MlwiOlwiTFwiLFwiMTEzNjRcIjpcIlJcIixcIjExMzY1XCI6XCJhXCIsXCIxMTM2NlwiOlwidFwiLFwiMTEzNzNcIjpcIkFcIixcIjExMzc0XCI6XCJNXCIsXCIxMTM3NVwiOlwiQVwiLFwiMTEzOTBcIjpcIlNcIixcIjExMzkxXCI6XCJaXCIsXCIxOTkwNFwiOlwiaVwiLFwiNDI4OTNcIjpcIkhcIixcIjQyOTIyXCI6XCJIXCIsXCI0MjkyM1wiOlwiRVwiLFwiNDI5MjRcIjpcIkdcIixcIjQyOTI1XCI6XCJMXCIsXCI0MjkyOFwiOlwiS1wiLFwiNDI5MjlcIjpcIlRcIixcIjYyOTM3XCI6XCJ4XCJ9Jyl9fSxlPXt9O2Z1bmN0aW9uIGEoaSl7dmFyIHI9ZVtpXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIHQ9ZVtpXT17aWQ6aSxleHBvcnRzOnt9fTtyZXR1cm4gbltpXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxhKSx0LmV4cG9ydHN9YS5uPW49Pnt2YXIgZT1uJiZuLl9fZXNNb2R1bGU/KCk9Pm4uZGVmYXVsdDooKT0+bjtyZXR1cm4gYS5kKGUse2E6ZX0pLGV9LGEuZD0obixlKT0+e2Zvcih2YXIgaSBpbiBlKWEubyhlLGkpJiYhYS5vKG4saSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2VudW1lcmFibGU6ITAsZ2V0OmVbaV19KX0sYS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKG4pe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksYS5vPShuLGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixlKSxhLnI9bj0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9O3ZhciBpPXt9OygoKT0+e1widXNlIHN0cmljdFwiO2EucihpKSxhLmQoaSx7ZGVmYXVsdDooKT0+cWEsbGludE15VGV4dDooKT0+amF9KTtjb25zdCBuPXJlcXVpcmUoXCJyZWFjdFwiKTt2YXIgZT1hKDY5Nykscj1hLm4oZSksdD1hKDM3OSksbz1hLm4odCksTT1hKDc5NSkscz1hLm4oTSksbD1hKDU2OSksYz1hLm4obCksUz1hKDU2NSksdT1hLm4oUyksZD1hKDIxNiksbT1hLm4oZCkscD1hKDU4OSksaD1hLm4ocCksZz1hKDc4MCkseT17fTtmdW5jdGlvbiBiKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG59KG4pfHxmdW5jdGlvbihuLGUpe3ZhciBhPW51bGw9PW4/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl18fG5bXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWEpe3ZhciBpLHIsdD1bXSxvPSEwLE09ITE7dHJ5e2ZvcihhPWEuY2FsbChuKTshKG89KGk9YS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKGkudmFsdWUpLCFlfHx0Lmxlbmd0aCE9PWUpO289ITApO31jYXRjaChuKXtNPSEwLHI9bn1maW5hbGx5e3RyeXtvfHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKE0pdGhyb3cgcn19cmV0dXJuIHR9fShuLGUpfHxmdW5jdGlvbihuLGUpe2lmKG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBEKG4sZSk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1hJiZuLmNvbnN0cnVjdG9yJiYoYT1uLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1hfHxcIlNldFwiPT09YT9BcnJheS5mcm9tKG4pOlwiQXJndW1lbnRzXCI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKT9EKG4sZSk6dm9pZCAwfX0obixlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIEQobixlKXsobnVsbD09ZXx8ZT5uLmxlbmd0aCkmJihlPW4ubGVuZ3RoKTtmb3IodmFyIGE9MCxpPW5ldyBBcnJheShlKTthPGU7YSsrKWlbYV09blthXTtyZXR1cm4gaX15LnN0eWxlVGFnVHJhbnNmb3JtPWgoKSx5LnNldEF0dHJpYnV0ZXM9dSgpLHkuaW5zZXJ0PWMoKS5iaW5kKG51bGwsXCJoZWFkXCIpLHkuZG9tQVBJPXMoKSx5Lmluc2VydFN0eWxlRWxlbWVudD1tKCksbygpKGcuWix5KSxnLlomJmcuWi5sb2NhbHMmJmcuWi5sb2NhbHM7Y29uc3QgZj1mdW5jdGlvbihlKXt2YXIgYSxpLHI9ZS5zdWdnZXN0aW9uLHQ9ZS5zb3VyY2VUZXh0LG89ZS5zYW1wbGVUZXh0LE09ZS5zZXRTYW1wbGVUZXh0LHM9ZS5yZW1vdmVTdWdnZXN0aW9uLGw9ZS5kaXNtaXNzZWRTdWdnZXN0aW9ucyxjPWUub25DbGljayxTPWUuaXNBY3RpdmUsdT1lLmFkZFRvRGljdGlvbmFyeSxkPWUub3BlbkxpbmtzSW5OZXdUYWIsbT1iKCgwLG4udXNlU3RhdGUpKCExKSwyKSxwPW1bMF0saD1tWzFdLGc9YigoMCxuLnVzZVN0YXRlKSgpLDIpLHk9Z1swXSxEPWdbMV0sZj1iKCgwLG4udXNlU3RhdGUpKFwic2Nyb2xsLXBvc2l0aW9uLXN0YXJ0XCIpLDIpLEc9ZlswXSx3PWZbMV0sdj0oMCxuLnVzZVJlZikoKSxrPSEobnVsbD09cnx8IXIuZXhwZWN0ZWQpLFI9ZnVuY3Rpb24oKXt2YXIgbj1cInJlcGxhY2VtZW50XCI7cmV0dXJuXCJyZXRleHQtc3BlbGxcIj09PXIuc291cmNlfHxcInJldGV4dC1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIj09PXIuc291cmNlfHxcInJldGV4dC1lcXVhbGl0eVwiPT09ci5zb3VyY2UmJms/bjpcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcGFzc2l2ZVwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXJlYWRhYmlsaXR5XCI9PT1yLnNvdXJjZT9cImJhc2ljXCI6KChcInJldGV4dC1lcXVhbGl0eVwiPT09ci5zb3VyY2UmJiFrfHxcInJldGV4dC1uby1lbW9qaXNcIj09PXIuc291cmNlKSYmKG49XCJyZW1vdmFsXCIpLG4pfSxZPWZ1bmN0aW9uKCl7dmFyIG49XCJzZXZlcmVcIjtyZXR1cm5cInJldGV4dC1zcGVsbFwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtY29udHJhY3Rpb25zXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiIT09ci5zb3VyY2UmJlwicmV0ZXh0LWVxdWFsaXR5XCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtcmVhZGFiaWxpdHlcIiE9PXIuc291cmNlJiZcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtbm8tZW1vamlzXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtcGFzc2l2ZVwiIT09ci5zb3VyY2V8fChuPVwibW9kZXJhdGVcIiksbn0sQT1mdW5jdGlvbigpe3ZhciBuPVwiU3VnZ2VzdGlvblwiO3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXNwZWxsXCI6bj1cIlNwZWxsaW5nXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiOmNhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6bj1cIkNvbnRyYWN0aW9uc1wiO2JyZWFrO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOm49XCJSZXBlYXRlZCB3b3Jkc1wiO2JyZWFrO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOm49XCJDb25zaXN0ZW50IHN0eWxlXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOm49XCJHcmFtbWFyXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWVxdWFsaXR5XCI6bj1cIkluc2Vuc2l0aXZlIGxhbmd1YWdlXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpuPVwiQ2xhcml0eVwiO2JyZWFrO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOm49XCJDYXBpdGFsaXphdGlvblwiO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG59cmV0dXJuIG59O3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWNvbnRhaW5lciBcIi5jb25jYXQobC5zb21lKChmdW5jdGlvbihuKXtyZXR1cm4gbj09PXIubmFtZX0pKT9cInN1Z2dlc3Rpb24tZGlzbWlzc2VkXCI6XCJcIixcIiBcIikuY29uY2F0KFM/XCJhY3RpdmUtc3VnZ2VzdGlvblwiOlwiXCIpLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYygpfX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcImFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnlcIn0sbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtc2V2ZXJpdHkgXCIuY29uY2F0KFkoKSl9KSxuLmNyZWF0ZUVsZW1lbnQoXCJoNVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtYWN0dWFsXCJ9LHIuYWN0dWFsLmxlbmd0aD4zMD9yLmFjdHVhbC5zdWJzdHJpbmcoMCwzMCkrXCIuLi5cIjpyLmFjdHVhbCksbi5jcmVhdGVFbGVtZW50KFwiaDZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLWxhYmVsXCJ9LEEoKSkpLG4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtY29udGFpbmVyXCJ9LG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5IFwiLmNvbmNhdChZKCkpfSksbi5jcmVhdGVFbGVtZW50KFwiaDZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLWxhYmVsXCJ9LEEoKSkpLChpPWZ1bmN0aW9uKCl7dmFyIGU9XCJyZW1vdmFsXCI9PT1SKCk/ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxlPXIucG9zaXRpb24uZW5kLm9mZnNldCxhPW8uc3Vic3RyaW5nKDAsbiksaT1vLnN1YnN0cmluZyhlKSx0PWEuc3Vic3RyaW5nKGEubGVuZ3RoLTEsYS5sZW5ndGgpO1wiIFwiPT09aS5zdWJzdHJpbmcoMCwxKT9pPWkuc3Vic3RyaW5nKDEpOlwiIFwiPT09dCYmKGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC0xKSk7dmFyIHM9W2EsaV07cz1zLmpvaW4oXCJcIiksTShzKX0oKX06bnVsbDtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50XCIsb25DbGljazplfSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50LXRleHRcIn0sci5hY3R1YWwpKX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgc3VnZ2VzdGlvbi1zdW1tYXJ5LWNvbnRhaW5lciBcXG4gICAgICAgIHN1bW1hcnktXCIuY29uY2F0KFIoKSxcIlxcbiAgICAgIFwiKX0sXCJyZXBsYWNlbWVudFwiPT09UigpJiZpKCksXCJyZW1vdmFsXCI9PT1SKCkmJmkoKSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJm4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFVpSUdobGFXZG9kRDBpTVRNaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TlNBeE15SWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRFZ05TNDNOVU13TGpVNE5UYzROaUExTGpjMUlEQXVNalVnTmk0d09EVTNPU0F3TGpJMUlEWXVOVU13TGpJMUlEWXVPVEUwTWpFZ01DNDFPRFUzT0RZZ055NHlOU0F4SURjdU1qVldOUzQzTlZwTk1UUXVOVE13TXlBM0xqQXpNRE16UXpFMExqZ3lNeklnTmk0M016YzBOQ0F4TkM0NE1qTXlJRFl1TWpZeU5UWWdNVFF1TlRNd015QTFMamsyT1RZM1REa3VOelUzTXpZZ01TNHhPVFkzUXprdU5EWTBORGNnTUM0NU1ETTRNRFlnT0M0NU9EazFPU0F3TGprd016Z3dOaUE0TGpZNU5qY2dNUzR4T1RZM1F6Z3VOREF6T0RFZ01TNDBPRGsxT1NBNExqUXdNemd4SURFdU9UWTBORGNnT0M0Mk9UWTNJREl1TWpVM016Wk1NVEl1T1RNNU15QTJMalZNT0M0Mk9UWTNJREV3TGpjME1qWkRPQzQwTURNNE1TQXhNUzR3TXpVMUlEZ3VOREF6T0RFZ01URXVOVEV3TkNBNExqWTVOamNnTVRFdU9EQXpNME00TGprNE9UVTVJREV5TGpBNU5qSWdPUzQwTmpRME55QXhNaTR3T1RZeUlEa3VOelUzTXpZZ01URXVPREF6TTB3eE5DNDFNekF6SURjdU1ETXdNek5hVFRFZ055NHlOVWd4TkZZMUxqYzFTREZXTnk0eU5Wb2lJR1pwYkd3OUlpTTVSa0UxUVRVaUx6NEtQQzl6ZG1jK0NnPT1cIixhbHQ6XCJhcnJvdyBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWFycm93XCJ9KSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJm4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcXG4gICAgICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLWNvbnRhaW5lclxcbiAgICAgICAgICAgIFwiLmNvbmNhdChHLFwiXFxuICAgICAgICAgICAgXCIpLmNvbmNhdCgwPT09ci5leHBlY3RlZC5sZW5ndGg/XCJuby1yZXBsYWNlbWVudC1jb250YWluZXJcIjpcIlwiLFwiXFxuICAgICAgICAgIFwiKX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzIFxcbiAgICAgICAgICAgICAgICBcIi5jb25jYXQoMD09PXIuZXhwZWN0ZWQubGVuZ3RoP1wibm8tcmVwbGFjZW1lbnRcIjpcIlwiLFwiXFxuICAgICAgICAgICAgICBcIiksb25TY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2LmN1cnJlbnQpe3ZhciBuPXYuY3VycmVudCxlPW4uc2Nyb2xsTGVmdCxhPW4uc2Nyb2xsV2lkdGgsaT1uLmNsaWVudFdpZHRoO3coMD09PWU/XCJzY3JvbGwtcG9zaXRpb24tc3RhcnRcIjplK2k+PWE/XCJzY3JvbGwtcG9zaXRpb24tZW5kXCI6XCJzY3JvbGwtcG9zaXRpb24tbWlkZGxlXCIpfX0oKX0scmVmOnZ9LChyLmFjdHVhbC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpLG51bGw9PXJ8fG51bGw9PT0oYT1yLmV4cGVjdGVkKXx8dm9pZCAwPT09YT92b2lkIDA6YS5tYXAoKGZ1bmN0aW9uKGUsYSl7dmFyIGk9XCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIj09PXIuc291cmNlP3IuZXhwZWN0ZWRbYV06ZnVuY3Rpb24obixlKXtsZXQgYT0tMSxpPSExO2lmKGUudG9VcHBlckNhc2UoKT09PWUpcmV0dXJuIG4udG9VcHBlckNhc2UoKTtpZihlLnRvTG93ZXJDYXNlKCk9PT1lKXJldHVybiBuLnRvTG93ZXJDYXNlKCk7Zm9yKDsrK2E8ZS5sZW5ndGg7KXtjb25zdCBuPWUuY2hhckF0KGEpO2lmKG4udG9VcHBlckNhc2UoKSE9PW4udG9Mb3dlckNhc2UoKSl7Y29uc3Qgcj1lLnNsaWNlKGErMSk7aT1uPT09bi50b1VwcGVyQ2FzZSgpJiZyPT09ci50b0xvd2VyQ2FzZSgpO2JyZWFrfX1pZihpKWZvcihhPS0xOysrYTxuLmxlbmd0aDspe2NvbnN0IGU9bi5jaGFyQXQoYSkudG9VcHBlckNhc2UoKTtpZihlIT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiBuLnNsaWNlKDAsYSkrZStuLnNsaWNlKGErMSkudG9Mb3dlckNhc2UoKX1yZXR1cm4gbn0oZSxyLmFjdHVhbCk7cmV0dXJuIGE8NT9uLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudFwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbj1lLGE9ci5wb3NpdGlvbi5zdGFydC5vZmZzZXQsaT1yLnBvc2l0aW9uLmVuZC5vZmZzZXQsdD0odD1bby5zdWJzdHJpbmcoMCxhKSxuLG8uc3Vic3RyaW5nKGkpXSkuam9pbihcIlwiKSx2b2lkIE0odCk7dmFyIG4sYSxpLHR9LGtleTphfSxpKTpcIlwifSkpKSwwPT09ci5leHBlY3RlZC5sZW5ndGgmJlwiP1wiKSksXCJiYXNpY1wiPT09UigpJiZmdW5jdGlvbigpe3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoZSBwYXNzaXZlIHZvaWNlOiBcIixcIiBcIixuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcImJhc2ljLXN1bW1hcnktZXhhbXBsZVwifSwnXCIuLi4nLChlPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LGE9ci5wb3NpdGlvbi5lbmQub2Zmc2V0LHQuc3Vic3RyaW5nKGUtMTAsYSkpLCdcIicpKTtjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOnJldHVyblwiU2VudGVuY2Ugc3BhY2luZ1wiO2Nhc2VcInJldGV4dC1yZWFkYWJpbGl0eVwiOnJldHVyblwiRGlmZmljdWx0IHNlbnRlbmNlIHRvIHJlYWRcIjtkZWZhdWx0OnJldHVyblwiU3VnZ2VzdGlvblwifXZhciBlLGF9KCkpKSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1kZXNjcmlwdGlvblwifSxuLmNyZWF0ZUVsZW1lbnQoXCJwXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tZGVzY3JpcHRpb24tdGV4dFwifSxmdW5jdGlvbigpe3ZhciBlLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLG51bGwsbi5jcmVhdGVFbGVtZW50KFwiZW1cIixudWxsLGUpKX07c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoZSB3b3JkIFwiLGEoci5hY3R1YWwpLFwiIGlzIG5vdCBpbiBvdXIgZGljdGlvbmFyeS4gSWYgeW914oCZcmUgc3VyZSB0aGlzIHNwZWxsaW5nIGlzIGNvcnJlY3QsIHlvdSBjYW4gc3VnZ2VzdCB3ZSBhZGQgaXQgdG8gdGhlIGRpY2l0b25hcnkgdG8gcHJldmVudCBmdXR1cmUgYWxlcnRzLlwiKTtjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6cmV0dXJuXCJtaXNzaW5nLXNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlkP24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBhcHBlYXJzIHlvdXIgbWlzc2luZyBhbiBhcG9zdHJvcGhlIGluXCIsXCIgXCIsYShyLmFjdHVhbCksXCIuXCIpOlwic21hcnQtYXBvc3Ryb3BoZVwiPT09ci5ydWxlSWQ/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkl0IGFwcGVhcnMgeW91ciB1c2luZyB0aGUgd3Jvbmcga2luZCBvZiBhcG9zdHJvcGhlIGluIFwiLFwiIFwiLGEoci5hY3R1YWwpLFwiLiBDb25zaWRlciBjaGFuZ2luZyBpdCB0byBhIHNtYXJ0IGFwb3N0cm9waGUgbGlrZSB0aGlzOiBcIixhKHIuZXhwZWN0ZWQpLFwiLlwiKTpyLnJlYXNvbjtjYXNlXCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIk9vcHMhIEl0IGFwcGVhcnMgdGhhdCB5b3UgdHlwZWQgXCIsXCIgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiB0d2ljZSBpbiBhIHJvdy4gQ29uc2lkZXIgZGVsZXRlaW5nIG9uZSBvZiB0aGVtLlwiKTtjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgYXBwZWFycyB0aGF0IHlvdSB1c2VkIFwiLGEoci5hY3R1YWwubGVuZ3RoKSxcIiBcIixcIiBzcGFjZXMgYmVmb3JlIHlvdXIgc2VudGVuY2UuIEF0IE5ldyBSZWxpYywgd2UgdXNlIDEgc3BhY2UuXCIpO2Nhc2VcInJldGV4dC1wYXNzaXZlXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJUaGlzIHNlbnRlbmNlIGFwcGVhcnMgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcGFzc2l2ZSB2b2ljZS4gQ29uc2lkZXIgcmV3cml0aW5nIHRoaXMgaW4gdGhlIGFjdGl2ZSB2b2ljZS5cIik7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIGFydGljbGUgXCIsYShyLmFjdHVhbCksXCIgXCIsXCIgXCIsXCIgbWF5IGJlIGluY29ycmVjdC4gQ29uc2lkZXIgY2hhbmdpbmcgaXQgdG8gXCIsXCIgXCIsYShyLmV4cGVjdGVkKSxcIiBzbyB0aGF0IGl0IGFncmVlcyB3aXRoIHRoZSBiZWdpbm5pbmcgc291bmQgb2YgdGhlIGZvbGxvd2luZyB3b3JkLlwiKTtjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjp2YXIgaT1rP24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJDb25zaWRlciB1c2luZyBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIGluc3RlYWQuXCIpOlwiVHJ5IG5vdCB0byB1c2UgaXQuXCI7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsYShyLmFjdHVhbCksXCIgXCIsXCIgXCIsXCIgbWF5IGJlIGluc2Vuc2l0aXZlLlwiLFwiIFwiLGkpO2Nhc2VcInJldGV4dC1yZWFkYWJpbGl0eVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiV2UncmUgXCIsTWF0aC5yb3VuZCgxMDAqci5jb25maWRlbmNlKSxcIiUgc3VyZSB0aGUgc2VudGVuY2UgYmVnaW5uaW5nIHdpdGggXCIsYSgoZT1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCx0LnN1YnN0cmluZyhlLGUrMjApKSksXCIuLi4gaXMgZGlmZmljdWx0IHRvIHJlYWQuIENvbnNpZGVyIHJld3JpdGluZyBpdCB0byBtYWtlIGl0IGVhc2llciB0byByZWFkLlwiKTtjYXNlXCJyZXRleHQtdXNlLWNvbnRyYWN0aW9uc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiQ29uc2lkZXIgY2hhbmdpbmcgXCIsYShyLmFjdHVhbCksXCIgdG8gXCIsXCIgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiB0byBnaXZlIHlvdXIgd3JpdGluZyBhIG1vcmUgY29udmVyc2F0aW9uYWwgYW5kIHBlcnNvbmFsIGZlZWwuXCIpO2Nhc2VcInJldGV4dC1uby1lbW9qaXNcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkF2b2lkIHVzaW5nIGVtb2ppcyBpbiBVSSB0ZXh0LiBJZiB5b3UgaGF2ZSB0aGUgdXJnZSB0byB1c2UgYW4gZW1vamkgLCBjb25zdWx0IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcImFcIix7aHJlZjpcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vd3JpdGluZy9cIix0YXJnZXQ6ZD9cIl9ibGFua1wiOlwiX3NlbGZcIn0sXCJvdXIgZG9jcyBmb3Igdm9pY2UgYW5kIHRvbmVcIiksXCIgXCIsXCJ0byByZXdyaXRlIHlvdXIgbWVzc2FnZSB1bnRpbCBpdCBhY2hpZXZlcyB5b3VyIGdvYWwuXCIpO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgbG9va3MgbGlrZSBcIixhKHIuYWN0dWFsKSxcIiBpc24ndCBwcm9wZXJseSBjYXBpdGFsaXplZC4gVHJ5IFwiLGEoci5leHBlY3RlZFswXSksXCIgaW5zdGVhZC5cIik7ZGVmYXVsdDpyZXR1cm5cIlVoIG9oXCJ9fSgpKSksbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb25zLWN0YXNcIn0sZnVuY3Rpb24oKXt2YXIgZT1cIlwiO3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXNwZWxsXCI6ZT1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FtZXJpY2FuX0VuZ2xpc2hcIjticmVhaztjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6ZT1cImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtY29udHJhY3Rpb25zI3VzZVwiLFwibWlzc2luZy1zbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJRD9lPVwiaHR0cHM6Ly93d3cuZ3JhbW1hcmJvb2suY29tL3B1bmN0dWF0aW9uL2Fwb3N0cm8uYXNwXCI6XCJzbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJRCYmKGU9XCJodHRwczovL3ByYWN0aWNhbHR5cG9ncmFwaHkuY29tL3N0cmFpZ2h0LWFuZC1jdXJseS1xdW90ZXMuaHRtbFwiKTticmVhaztjYXNlXCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZXBlYXRlZC13b3JkcyNyZWFkbWVcIjticmVhaztjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOmU9XCJodHRwczovL3ByYWN0aWNhbHR5cG9ncmFwaHkuY29tL29uZS1zcGFjZS1iZXR3ZWVuLXNlbnRlbmNlcy5odG1sXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOmU9XCJodHRwczovL3d3dy5lZi5lZHUvZW5nbGlzaC1yZXNvdXJjZXMvZW5nbGlzaC1ncmFtbWFyL2luZGVmaW5pdGUtYXJ0aWNsZXMvXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWVxdWFsaXR5XCI6ZT1cImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtZXF1YWxpdHkvYmxvYi9tYWluL3J1bGVzLm1kXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6ZT1cImh0dHBzOi8vd3d3LmRvcmlzYW5kYmVydGllLmNvbS9nb29kY29weWJhZGNvcHkvMjAxNy8wMi8xNC9zZW50ZW5jZS1zdHJ1Y3R1cmUtaG93LXRvLW1ha2UteW91ci1zZW50ZW5jZXMtbXVjaC1lYXNpZXItdG8tcmVhZFwiO2JyZWFrO2Nhc2VcInJldGV4dC1wYXNzaXZlXCI6ZT1cImh0dHBzOi8vd3d3LmdyYW1tYXJseS5jb20vYmxvZy9hY3RpdmUtdnMtcGFzc2l2ZS12b2ljZS9cIjticmVhaztjYXNlXCJyZXRleHQtdXNlLWNvbnRyYWN0aW9uc1wiOmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvY29udHJhY3Rpb25zL1wiO2JyZWFrO2Nhc2VcInJldGV4dC1uby1lbW9qaXNcIjplPVwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2Vtb2ppcy9cIjticmVhaztjYXNlXCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIjplPVwiaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL3N0eWxlLWd1aWRlL2NhcGl0YWxpemF0aW9uL3Byb2R1Y3QtY2FwYWJpbGl0eS1mZWF0dXJlLXVzYWdlLyN3aGVuLXRvLXVzZS10aXRsZS1jYXNlXCI7YnJlYWs7ZGVmYXVsdDplPVwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9ucjEtcHJvZHVjdC9kZXNpZ24vd3JpdGluZ1wifXJldHVyblwicmV0ZXh0LXNwZWxsXCI9PT1yLnNvdXJjZT9uLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5XCJ9LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlPU0lnYUdWcFoyaDBQU0k1SWlCMmFXVjNRbTk0UFNJd0lEQWdPU0E1SWlCbWFXeHNQU0p1YjI1bElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRrZ05FZzFWakJJTkZZMFNEQldOVWcwVmpsSU5WWTFTRGxXTkZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcInBsdXMgaWNvblwiLGNsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1wbHVzLWljb25cIn0pLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtbGFiZWxcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHUoci5hY3R1YWwsci5uYW1lKSx2b2lkIHMoci5uYW1lKX19LFwiQWRkIHRvIGRpY3Rpb25hcnlcIikpOm4uY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5XCIsaHJlZjplLHRhcmdldDpkP1wiX2JsYW5rXCI6XCJfc2VsZlwifSxuLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7c3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRVaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5TQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnYjNCaFkybDBlVDBpTUM0NElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRUQWdOeTQxUXpBZ015NDBJRE11TkNBd0lEY3VOU0F3UXpFeExqWWdNQ0F4TlNBekxqUWdNVFVnTnk0MVF6RTFJREV4TGpZZ01URXVOaUF4TlNBM0xqVWdNVFZETXk0MElERTFJREFnTVRFdU5pQXdJRGN1TlZwTk1TQTNMalZETVNBeE1TNHhJRE11T1NBeE5DQTNMalVnTVRSRE1URXVNU0F4TkNBeE5DQXhNUzR4SURFMElEY3VOVU14TkNBekxqa2dNVEV1TVNBeElEY3VOU0F4UXpNdU9TQXhJREVnTXk0NUlERWdOeTQxV2swNElERXhWakV5U0RkV01URklPRnBOTlNBMUxqVkROU0EwTGpFZ05pNHhJRE1nTnk0MUlETkRPQzQ1SURNZ01UQWdOQzR4SURFd0lEVXVOVU14TUNBMkxqY3lPREF5SURrdU16ZzBORGdnTnk0eE9EWTJNeUE0TGpnNU5UZ3hJRGN1TlRVd056TkRPQzQ0TWpjek55QTNMall3TVRjeUlEZ3VOell4TkRJZ055NDJOVEE0TmlBNExqY2dOeTQzUXpndU5qYzJOak1nTnk0M01UUXdNaUE0TGpZMU16a3hJRGN1TnpJM05qRWdPQzQyTXpFNE5DQTNMamMwTURneFF6Z3VNVGd4TnpRZ09DNHdNU0E0SURndU1URTROeUE0SURndU5WWTVWakV3U0RkV09WWTRMalZETnlBM0xqVTVOVFEwSURjdU5UY3lOelVnTnk0eE9ERTRNaUEzTGprM09ERTBJRFl1T0RnNU1EZERPQzR3TWpBNU1TQTJMamcxT0RFNElEZ3VNRFl4T0RJZ05pNDRNamcyTXlBNExqRWdOaTQ0UXpndU1USXlPVGNnTmk0M09EWXlNaUE0TGpFME5UY3lJRFl1TnpjeU5qVWdPQzR4TmpneU5DQTJMamMxT1RJeVF6Z3VOak0xT1NBMkxqUTRNRE0ySURrZ05pNHlOak15TlNBNUlEVXVOVU01SURRdU55QTRMak1nTkNBM0xqVWdORU0yTGpjZ05DQTJJRFF1TnlBMklEVXVOVlkyU0RWV05TNDFXaUlnWm1sc2JEMGlJelpGTnpVM05TSXZQZ284TDNOMlp6NEtcIixhbHQ6XCJIZWxwIGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktaGVscC1pY29uXCJ9KSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY3RhLWxhYmVsXCJ9LFwiTGVhcm4gbW9yZVwiKSl9KCksbi5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeSBzdWdnZXN0aW9uLWN0YS1pY29uLW9ubHkgXCIuY29uY2F0KHA/XCJkZWxldGUtaXMtaG92ZXJlZFwiOlwiXCIpLG9uTW91c2VFbnRlcjpmdW5jdGlvbigpe3JldHVybiBEKHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aCghMCl9KSw1MDApKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoeSl9fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHkpLHZvaWQgaCghMSl9LG9uQ2xpY2s6ZnVuY3Rpb24oKXtzKHIubmFtZSl9fSxuLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7c3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRJaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE1pQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnYjNCaFkybDBlVDBpTUM0NElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRUa2dNRWd6VmpKSU1GWXpTREZXTVRWSU1URldNMGd4TWxZeVNEbFdNRnBOTkNBeFNEaFdNa2cwVmpGYVRUSWdNVFJJTVRCV00wZ3lWakUwV2swMElEVklOVll4TWtnMFZqVmFUVGdnTlVnM1ZqRXlTRGhXTlZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcIkRlbGV0ZSBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXRyYXNoLWljb25cIn0pKSkpfTtmdW5jdGlvbiBHKG4pe2lmKG4pdGhyb3cgbn12YXIgdz1hKDczOCksdj1hKDQ3MCk7ZnVuY3Rpb24gayhuKXtpZihcIltvYmplY3QgT2JqZWN0XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKXJldHVybiExO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBudWxsPT09ZXx8ZT09PU9iamVjdC5wcm90b3R5cGV9dmFyIFI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWShuKXtyZXR1cm4gbiYmXCJvYmplY3RcIj09dHlwZW9mIG4/Ui5jYWxsKG4sXCJwb3NpdGlvblwiKXx8Ui5jYWxsKG4sXCJ0eXBlXCIpP1Aobi5wb3NpdGlvbik6Ui5jYWxsKG4sXCJzdGFydFwiKXx8Ui5jYWxsKG4sXCJlbmRcIik/UChuKTpSLmNhbGwobixcImxpbmVcIil8fFIuY2FsbChuLFwiY29sdW1uXCIpP0Eobik6XCJcIjpcIlwifWZ1bmN0aW9uIEEobil7cmV0dXJuIEMobiYmbi5saW5lKStcIjpcIitDKG4mJm4uY29sdW1uKX1mdW5jdGlvbiBQKG4pe3JldHVybiBBKG4mJm4uc3RhcnQpK1wiLVwiK0EobiYmbi5lbmQpfWZ1bmN0aW9uIEMobil7cmV0dXJuIG4mJlwibnVtYmVyXCI9PXR5cGVvZiBuP246MX1jbGFzcyBUIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IobixlLGEpe3ZhciBpLHI9W251bGwsbnVsbF0sdD17c3RhcnQ6e2xpbmU6bnVsbCxjb2x1bW46bnVsbH0sZW5kOntsaW5lOm51bGwsY29sdW1uOm51bGx9fTtzdXBlcigpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoYT1lLGU9bnVsbCksXCJzdHJpbmdcIj09dHlwZW9mIGEmJigtMT09PShpPWEuaW5kZXhPZihcIjpcIikpP3JbMV09YTooclswXT1hLnNsaWNlKDAsaSksclsxXT1hLnNsaWNlKGkrMSkpKSxlJiYoXCJ0eXBlXCJpbiBlfHxcInBvc2l0aW9uXCJpbiBlP2UucG9zaXRpb24mJih0PWUucG9zaXRpb24pOlwic3RhcnRcImluIGV8fFwiZW5kXCJpbiBlP3Q9ZTooXCJsaW5lXCJpbiBlfHxcImNvbHVtblwiaW4gZSkmJih0LnN0YXJ0PWUpKSx0aGlzLm5hbWU9WShlKXx8XCIxOjFcIix0aGlzLm1lc3NhZ2U9XCJvYmplY3RcIj09dHlwZW9mIG4/bi5tZXNzYWdlOm4sdGhpcy5zdGFjaz1cIm9iamVjdFwiPT10eXBlb2Ygbj9uLnN0YWNrOlwiXCIsdGhpcy5yZWFzb249dGhpcy5tZXNzYWdlLHRoaXMuZmF0YWwsdGhpcy5saW5lPXQuc3RhcnQubGluZSx0aGlzLmNvbHVtbj10LnN0YXJ0LmNvbHVtbix0aGlzLnNvdXJjZT1yWzBdLHRoaXMucnVsZUlkPXJbMV0sdGhpcy5wb3NpdGlvbj10LHRoaXMuYWN0dWFsLHRoaXMuZXhwZWN0ZWQsdGhpcy5maWxlLHRoaXMudXJsLHRoaXMubm90ZX19VC5wcm90b3R5cGUuZmlsZT1cIlwiLFQucHJvdG90eXBlLm5hbWU9XCJcIixULnByb3RvdHlwZS5yZWFzb249XCJcIixULnByb3RvdHlwZS5tZXNzYWdlPVwiXCIsVC5wcm90b3R5cGUuc3RhY2s9XCJcIixULnByb3RvdHlwZS5mYXRhbD1udWxsLFQucHJvdG90eXBlLmNvbHVtbj1udWxsLFQucHJvdG90eXBlLmxpbmU9bnVsbCxULnByb3RvdHlwZS5zb3VyY2U9bnVsbCxULnByb3RvdHlwZS5ydWxlSWQ9bnVsbCxULnByb3RvdHlwZS5wb3NpdGlvbj1udWxsO2NvbnN0IHg9ZnVuY3Rpb24obixlKXtpZih2b2lkIDAhPT1lJiZcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtaKG4pO2xldCBhLGk9MCxyPS0xLHQ9bi5sZW5ndGg7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RofHxlLmxlbmd0aD5uLmxlbmd0aCl7Zm9yKDt0LS07KWlmKDQ3PT09bi5jaGFyQ29kZUF0KHQpKXtpZihhKXtpPXQrMTticmVha319ZWxzZSByPDAmJihhPSEwLHI9dCsxKTtyZXR1cm4gcjwwP1wiXCI6bi5zbGljZShpLHIpfWlmKGU9PT1uKXJldHVyblwiXCI7bGV0IG89LTEsTT1lLmxlbmd0aC0xO2Zvcig7dC0tOylpZig0Nz09PW4uY2hhckNvZGVBdCh0KSl7aWYoYSl7aT10KzE7YnJlYWt9fWVsc2UgbzwwJiYoYT0hMCxvPXQrMSksTT4tMSYmKG4uY2hhckNvZGVBdCh0KT09PWUuY2hhckNvZGVBdChNLS0pP008MCYmKHI9dCk6KE09LTEscj1vKSk7cmV0dXJuIGk9PT1yP3I9bzpyPDAmJihyPW4ubGVuZ3RoKSxuLnNsaWNlKGkscil9LHo9ZnVuY3Rpb24obil7aWYoWihuKSwwPT09bi5sZW5ndGgpcmV0dXJuXCIuXCI7bGV0IGUsYT0tMSxpPW4ubGVuZ3RoO2Zvcig7LS1pOylpZig0Nz09PW4uY2hhckNvZGVBdChpKSl7aWYoZSl7YT1pO2JyZWFrfX1lbHNlIGV8fChlPSEwKTtyZXR1cm4gYTwwPzQ3PT09bi5jaGFyQ29kZUF0KDApP1wiL1wiOlwiLlwiOjE9PT1hJiY0Nz09PW4uY2hhckNvZGVBdCgwKT9cIi8vXCI6bi5zbGljZSgwLGEpfSxFPWZ1bmN0aW9uKG4pe1oobik7bGV0IGUsYT1uLmxlbmd0aCxpPS0xLHI9MCx0PS0xLG89MDtmb3IoO2EtLTspe2NvbnN0IE09bi5jaGFyQ29kZUF0KGEpO2lmKDQ3IT09TSlpPDAmJihlPSEwLGk9YSsxKSw0Nj09PU0/dDwwP3Q9YToxIT09byYmKG89MSk6dD4tMSYmKG89LTEpO2Vsc2UgaWYoZSl7cj1hKzE7YnJlYWt9fXJldHVybiB0PDB8fGk8MHx8MD09PW98fDE9PT1vJiZ0PT09aS0xJiZ0PT09cisxP1wiXCI6bi5zbGljZSh0LGkpfSxCPWZ1bmN0aW9uKC4uLm4pe2xldCBlLGE9LTE7Zm9yKDsrK2E8bi5sZW5ndGg7KVooblthXSksblthXSYmKGU9dm9pZCAwPT09ZT9uW2FdOmUrXCIvXCIrblthXSk7cmV0dXJuIHZvaWQgMD09PWU/XCIuXCI6ZnVuY3Rpb24obil7WihuKTtjb25zdCBlPTQ3PT09bi5jaGFyQ29kZUF0KDApO2xldCBhPWZ1bmN0aW9uKG4sZSl7bGV0IGEsaSxyPVwiXCIsdD0wLG89LTEsTT0wLHM9LTE7Zm9yKDsrK3M8PW4ubGVuZ3RoOyl7aWYoczxuLmxlbmd0aClhPW4uY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09YSlicmVhazthPTQ3fWlmKDQ3PT09YSl7aWYobz09PXMtMXx8MT09PU0pO2Vsc2UgaWYobyE9PXMtMSYmMj09PU0pe2lmKHIubGVuZ3RoPDJ8fDIhPT10fHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMikpaWYoci5sZW5ndGg+Mil7aWYoaT1yLmxhc3RJbmRleE9mKFwiL1wiKSxpIT09ci5sZW5ndGgtMSl7aTwwPyhyPVwiXCIsdD0wKToocj1yLnNsaWNlKDAsaSksdD1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoXCIvXCIpKSxvPXMsTT0wO2NvbnRpbnVlfX1lbHNlIGlmKHIubGVuZ3RoPjApe3I9XCJcIix0PTAsbz1zLE09MDtjb250aW51ZX1lJiYocj1yLmxlbmd0aD4wP3IrXCIvLi5cIjpcIi4uXCIsdD0yKX1lbHNlIHIubGVuZ3RoPjA/cis9XCIvXCIrbi5zbGljZShvKzEscyk6cj1uLnNsaWNlKG8rMSxzKSx0PXMtby0xO289cyxNPTB9ZWxzZSA0Nj09PWEmJk0+LTE/TSsrOk09LTF9cmV0dXJuIHJ9KG4sIWUpO3JldHVybiAwIT09YS5sZW5ndGh8fGV8fChhPVwiLlwiKSxhLmxlbmd0aD4wJiY0Nz09PW4uY2hhckNvZGVBdChuLmxlbmd0aC0xKSYmKGErPVwiL1wiKSxlP1wiL1wiK2E6YX0oZSl9LE49XCIvXCI7ZnVuY3Rpb24gWihuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCBcIitKU09OLnN0cmluZ2lmeShuKSl9Y29uc3QgRj1mdW5jdGlvbigpe3JldHVyblwiL1wifTtmdW5jdGlvbiBJKG4pe3JldHVybiBudWxsIT09biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJm4uaHJlZiYmbi5vcmlnaW59Y29uc3QgVT1bXCJoaXN0b3J5XCIsXCJwYXRoXCIsXCJiYXNlbmFtZVwiLFwic3RlbVwiLFwiZXh0bmFtZVwiLFwiZGlybmFtZVwiXTtjbGFzcyBqe2NvbnN0cnVjdG9yKG4pe2xldCBlO2U9bj9cInN0cmluZ1wiPT10eXBlb2Ygbnx8dyhuKT97dmFsdWU6bn06SShuKT97cGF0aDpufTpuOnt9LHRoaXMuZGF0YT17fSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMuaGlzdG9yeT1bXSx0aGlzLmN3ZD1GKCksdGhpcy52YWx1ZSx0aGlzLnN0b3JlZCx0aGlzLnJlc3VsdCx0aGlzLm1hcDtsZXQgYSxpPS0xO2Zvcig7KytpPFUubGVuZ3RoOyl7Y29uc3Qgbj1VW2ldO24gaW4gZSYmdm9pZCAwIT09ZVtuXSYmKHRoaXNbbl09XCJoaXN0b3J5XCI9PT1uP1suLi5lW25dXTplW25dKX1mb3IoYSBpbiBlKVUuaW5jbHVkZXMoYSl8fCh0aGlzW2FdPWVbYV0pfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoLTFdfXNldCBwYXRoKG4pe0kobikmJihuPWZ1bmN0aW9uKG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKW49bmV3IFVSTChuKTtlbHNlIGlmKCFJKG4pKXtjb25zdCBlPW5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIFVSTC4gUmVjZWl2ZWQgYCcrbitcImBcIik7dGhyb3cgZS5jb2RlPVwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIixlfWlmKFwiZmlsZTpcIiE9PW4ucHJvdG9jb2wpe2NvbnN0IG49bmV3IFR5cGVFcnJvcihcIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZVwiKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FXCIsbn1yZXR1cm4gZnVuY3Rpb24obil7aWYoXCJcIiE9PW4uaG9zdG5hbWUpe2NvbnN0IG49bmV3IFR5cGVFcnJvcignRmlsZSBVUkwgaG9zdCBtdXN0IGJlIFwibG9jYWxob3N0XCIgb3IgZW1wdHkgb24gZGFyd2luJyk7dGhyb3cgbi5jb2RlPVwiRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVFwiLG59Y29uc3QgZT1uLnBhdGhuYW1lO2xldCBhPS0xO2Zvcig7KythPGUubGVuZ3RoOylpZigzNz09PWUuY2hhckNvZGVBdChhKSYmNTA9PT1lLmNoYXJDb2RlQXQoYSsxKSl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoYSsyKTtpZig3MD09PW58fDEwMj09PW4pe2NvbnN0IG49bmV3IFR5cGVFcnJvcihcIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVyc1wiKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIXCIsbn19cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX0obil9KG4pKSxxKG4sXCJwYXRoXCIpLHRoaXMucGF0aCE9PW4mJnRoaXMuaGlzdG9yeS5wdXNoKG4pfWdldCBkaXJuYW1lKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD96KHRoaXMucGF0aCk6dm9pZCAwfXNldCBkaXJuYW1lKG4pe0godGhpcy5iYXNlbmFtZSxcImRpcm5hbWVcIiksdGhpcy5wYXRoPUIobnx8XCJcIix0aGlzLmJhc2VuYW1lKX1nZXQgYmFzZW5hbWUoKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5wYXRoP3godGhpcy5wYXRoKTp2b2lkIDB9c2V0IGJhc2VuYW1lKG4pe3EobixcImJhc2VuYW1lXCIpLEwobixcImJhc2VuYW1lXCIpLHRoaXMucGF0aD1CKHRoaXMuZGlybmFtZXx8XCJcIixuKX1nZXQgZXh0bmFtZSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/RSh0aGlzLnBhdGgpOnZvaWQgMH1zZXQgZXh0bmFtZShuKXtpZihMKG4sXCJleHRuYW1lXCIpLEgodGhpcy5kaXJuYW1lLFwiZXh0bmFtZVwiKSxuKXtpZig0NiE9PW4uY2hhckNvZGVBdCgwKSl0aHJvdyBuZXcgRXJyb3IoXCJgZXh0bmFtZWAgbXVzdCBzdGFydCB3aXRoIGAuYFwiKTtpZihuLmluY2x1ZGVzKFwiLlwiLDEpKXRocm93IG5ldyBFcnJvcihcImBleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzXCIpfXRoaXMucGF0aD1CKHRoaXMuZGlybmFtZSx0aGlzLnN0ZW0rKG58fFwiXCIpKX1nZXQgc3RlbSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/eCh0aGlzLnBhdGgsdGhpcy5leHRuYW1lKTp2b2lkIDB9c2V0IHN0ZW0obil7cShuLFwic3RlbVwiKSxMKG4sXCJzdGVtXCIpLHRoaXMucGF0aD1CKHRoaXMuZGlybmFtZXx8XCJcIixuKyh0aGlzLmV4dG5hbWV8fFwiXCIpKX10b1N0cmluZyhuKXtyZXR1cm4odGhpcy52YWx1ZXx8XCJcIikudG9TdHJpbmcobil9bWVzc2FnZShuLGUsYSl7Y29uc3QgaT1uZXcgVChuLGUsYSk7cmV0dXJuIHRoaXMucGF0aCYmKGkubmFtZT10aGlzLnBhdGgrXCI6XCIraS5uYW1lLGkuZmlsZT10aGlzLnBhdGgpLGkuZmF0YWw9ITEsdGhpcy5tZXNzYWdlcy5wdXNoKGkpLGl9aW5mbyhuLGUsYSl7Y29uc3QgaT10aGlzLm1lc3NhZ2UobixlLGEpO3JldHVybiBpLmZhdGFsPW51bGwsaX1mYWlsKG4sZSxhKXtjb25zdCBpPXRoaXMubWVzc2FnZShuLGUsYSk7dGhyb3cgaS5mYXRhbD0hMCxpfX1mdW5jdGlvbiBMKG4sZSl7aWYobiYmbi5pbmNsdWRlcyhOKSl0aHJvdyBuZXcgRXJyb3IoXCJgXCIrZStcImAgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYFwiK04rXCJgXCIpfWZ1bmN0aW9uIHEobixlKXtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJgXCIrZStcImAgY2Fubm90IGJlIGVtcHR5XCIpfWZ1bmN0aW9uIEgobixlKXtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJTZXR0aW5nIGBcIitlK1wiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvb1wiKX1jb25zdCBKPWZ1bmN0aW9uIG4oKXtjb25zdCBlPWZ1bmN0aW9uKCl7Y29uc3Qgbj1bXSxlPXtydW46ZnVuY3Rpb24oLi4uZSl7bGV0IGE9LTE7Y29uc3QgaT1lLnBvcCgpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGZ1bmN0aW9uIGFzIGxhc3QgYXJndW1lbnQsIG5vdCBcIitpKTshZnVuY3Rpb24gcih0LC4uLm8pe2NvbnN0IE09blsrK2FdO2xldCBzPS0xO2lmKHQpaSh0KTtlbHNle2Zvcig7KytzPGUubGVuZ3RoOyludWxsIT09b1tzXSYmdm9pZCAwIT09b1tzXXx8KG9bc109ZVtzXSk7ZT1vLE0/ZnVuY3Rpb24obixlKXtsZXQgYTtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1uLmxlbmd0aD5lLmxlbmd0aDtsZXQgbzt0JiZlLnB1c2goaSk7dHJ5e289biguLi5lKX1jYXRjaChuKXtjb25zdCBlPW47aWYodCYmYSl0aHJvdyBlO3JldHVybiBpKGUpfXR8fChvIGluc3RhbmNlb2YgUHJvbWlzZT9vLnRoZW4ocixpKTpvIGluc3RhbmNlb2YgRXJyb3I/aShvKTpyKG8pKX07ZnVuY3Rpb24gaShuLC4uLmkpe2F8fChhPSEwLGUobiwuLi5pKSl9ZnVuY3Rpb24gcihuKXtpKG51bGwsbil9fShNLHIpKC4uLm8pOmkobnVsbCwuLi5vKX19KG51bGwsLi4uZSl9LHVzZTpmdW5jdGlvbihhKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBgbWlkZGVsd2FyZWAgdG8gYmUgYSBmdW5jdGlvbiwgbm90IFwiK2EpO3JldHVybiBuLnB1c2goYSksZX19O3JldHVybiBlfSgpLGE9W107bGV0IGkscj17fSx0PS0xO3JldHVybiBvLmRhdGE9ZnVuY3Rpb24obixlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygbj8yPT09YXJndW1lbnRzLmxlbmd0aD8oSyhcImRhdGFcIixpKSxyW25dPWUsbyk6Ty5jYWxsKHIsbikmJnJbbl18fG51bGw6bj8oSyhcImRhdGFcIixpKSxyPW4sbyk6cn0sby5QYXJzZXI9dm9pZCAwLG8uQ29tcGlsZXI9dm9pZCAwLG8uZnJlZXplPWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4gbztmb3IoOysrdDxhLmxlbmd0aDspe2NvbnN0W24sLi4uaV09YVt0XTtpZighMT09PWlbMF0pY29udGludWU7ITA9PT1pWzBdJiYoaVsxXT12b2lkIDApO2NvbnN0IHI9bi5jYWxsKG8sLi4uaSk7XCJmdW5jdGlvblwiPT10eXBlb2YgciYmZS51c2Uocil9cmV0dXJuIGk9ITAsdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksb30sby5hdHRhY2hlcnM9YSxvLnVzZT1mdW5jdGlvbihuLC4uLmUpe2xldCB0O2lmKEsoXCJ1c2VcIixpKSxudWxsPT1uKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pYyhuLC4uLmUpO2Vsc2V7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGBcIituK1wiYFwiKTtBcnJheS5pc0FycmF5KG4pP2wobik6cyhuKX1yZXR1cm4gdCYmKHIuc2V0dGluZ3M9T2JqZWN0LmFzc2lnbihyLnNldHRpbmdzfHx7fSx0KSksbztmdW5jdGlvbiBNKG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pYyhuKTtlbHNle2lmKFwib2JqZWN0XCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgXCIrbitcImBcIik7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3RbZSwuLi5hXT1uO2MoZSwuLi5hKX1lbHNlIHMobil9fWZ1bmN0aW9uIHMobil7bChuLnBsdWdpbnMpLG4uc2V0dGluZ3MmJih0PU9iamVjdC5hc3NpZ24odHx8e30sbi5zZXR0aW5ncykpfWZ1bmN0aW9uIGwobil7bGV0IGU9LTE7aWYobnVsbD09bik7ZWxzZXtpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgXCIrbitcImBcIik7Zm9yKDsrK2U8bi5sZW5ndGg7KU0obltlXSl9fWZ1bmN0aW9uIGMobixlKXtsZXQgaSxyPS0xO2Zvcig7KytyPGEubGVuZ3RoOylpZihhW3JdWzBdPT09bil7aT1hW3JdO2JyZWFrfWk/KGsoaVsxXSkmJmsoZSkmJihlPXYoITAsaVsxXSxlKSksaVsxXT1lKTphLnB1c2goWy4uLmFyZ3VtZW50c10pfX0sby5wYXJzZT1mdW5jdGlvbihuKXtvLmZyZWV6ZSgpO2NvbnN0IGU9XyhuKSxhPW8uUGFyc2VyO3JldHVybiBWKFwicGFyc2VcIixhKSxYKGEsXCJwYXJzZVwiKT9uZXcgYShTdHJpbmcoZSksZSkucGFyc2UoKTphKFN0cmluZyhlKSxlKX0sby5zdHJpbmdpZnk9ZnVuY3Rpb24obixlKXtvLmZyZWV6ZSgpO2NvbnN0IGE9XyhlKSxpPW8uQ29tcGlsZXI7cmV0dXJuIFcoXCJzdHJpbmdpZnlcIixpKSwkKG4pLFgoaSxcImNvbXBpbGVcIik/bmV3IGkobixhKS5jb21waWxlKCk6aShuLGEpfSxvLnJ1bj1mdW5jdGlvbihuLGEsaSl7aWYoJChuKSxvLmZyZWV6ZSgpLGl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGF8fChpPWEsYT12b2lkIDApLCFpKXJldHVybiBuZXcgUHJvbWlzZShyKTtmdW5jdGlvbiByKHIsdCl7ZS5ydW4obixfKGEpLChmdW5jdGlvbihlLGEsbyl7YT1hfHxuLGU/dChlKTpyP3IoYSk6aShudWxsLGEsbyl9KSl9cihudWxsLGkpfSxvLnJ1blN5bmM9ZnVuY3Rpb24obixlKXtsZXQgYSxpO3JldHVybiBvLnJ1bihuLGUsKGZ1bmN0aW9uKG4sZSl7RyhuKSxhPWUsaT0hMH0pKSxRKFwicnVuU3luY1wiLFwicnVuXCIsaSksYX0sby5wcm9jZXNzPWZ1bmN0aW9uKG4sZSl7aWYoby5mcmVlemUoKSxWKFwicHJvY2Vzc1wiLG8uUGFyc2VyKSxXKFwicHJvY2Vzc1wiLG8uQ29tcGlsZXIpLCFlKXJldHVybiBuZXcgUHJvbWlzZShhKTtmdW5jdGlvbiBhKGEsaSl7Y29uc3Qgcj1fKG4pO2Z1bmN0aW9uIHQobixyKXtufHwhcj9pKG4pOmE/YShyKTplKG51bGwscil9by5ydW4oby5wYXJzZShyKSxyLCgobixlLGEpPT57aWYoIW4mJmUmJmEpe2NvbnN0IHI9by5zdHJpbmdpZnkoZSxhKTtudWxsPT1yfHwoXCJzdHJpbmdcIj09dHlwZW9mKGk9cil8fHcoaSk/YS52YWx1ZT1yOmEucmVzdWx0PXIpLHQobixhKX1lbHNlIHQobik7dmFyIGl9KSl9YShudWxsLGUpfSxvLnByb2Nlc3NTeW5jPWZ1bmN0aW9uKG4pe2xldCBlO28uZnJlZXplKCksVihcInByb2Nlc3NTeW5jXCIsby5QYXJzZXIpLFcoXCJwcm9jZXNzU3luY1wiLG8uQ29tcGlsZXIpO2NvbnN0IGE9XyhuKTtyZXR1cm4gby5wcm9jZXNzKGEsKGZ1bmN0aW9uKG4pe2U9ITAsRyhuKX0pKSxRKFwicHJvY2Vzc1N5bmNcIixcInByb2Nlc3NcIixlKSxhfSxvO2Z1bmN0aW9uIG8oKXtjb25zdCBlPW4oKTtsZXQgaT0tMTtmb3IoOysraTxhLmxlbmd0aDspZS51c2UoLi4uYVtpXSk7cmV0dXJuIGUuZGF0YSh2KCEwLHt9LHIpKSxlfX0oKS5mcmVlemUoKSxPPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFgobixlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuLnByb3RvdHlwZSYmKGZ1bmN0aW9uKG4pe2xldCBlO2ZvcihlIGluIG4paWYoTy5jYWxsKG4sZSkpcmV0dXJuITA7cmV0dXJuITF9KG4ucHJvdG90eXBlKXx8ZSBpbiBuLnByb3RvdHlwZSl9ZnVuY3Rpb24gVihuLGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBgXCIrbitcImAgd2l0aG91dCBgUGFyc2VyYFwiKX1mdW5jdGlvbiBXKG4sZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGBcIituK1wiYCB3aXRob3V0IGBDb21waWxlcmBcIil9ZnVuY3Rpb24gSyhuLGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNhbGwgYFwiK24rXCJgIG9uIGEgZnJvemVuIHByb2Nlc3Nvci5cXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLlwiKX1mdW5jdGlvbiAkKG4pe2lmKCFrKG4pfHxcInN0cmluZ1wiIT10eXBlb2Ygbi50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBnb3QgYFwiK24rXCJgXCIpfWZ1bmN0aW9uIFEobixlLGEpe2lmKCFhKXRocm93IG5ldyBFcnJvcihcImBcIituK1wiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGBcIitlK1wiYCBpbnN0ZWFkXCIpfWZ1bmN0aW9uIF8obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKG4mJlwib2JqZWN0XCI9PXR5cGVvZiBuJiZcIm1lc3NhZ2VcImluIG4mJlwibWVzc2FnZXNcImluIG4pfShuKT9uOm5ldyBqKG4pfWZ1bmN0aW9uIG5uKG4pe2NvbnN0IGU9Y2xhc3MgZXh0ZW5kcyBue30sYT1lLnByb3RvdHlwZTtsZXQgaTtmb3IoaSBpbiBhKXtjb25zdCBuPWFbaV07biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJihhW2ldPVwiY29uY2F0XCJpbiBuP24uY29uY2F0KCk6T2JqZWN0LmFzc2lnbih7fSxuKSl9cmV0dXJuIGV9dmFyIGVuPWEoODAyKSxhbj1hKDc2Nikscm49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyO2lmKChcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJlwiJlwiPT09ZW4obikmJihyPShpPWEuY2hpbGRyZW4pW2UrMV0sIShlPjAmJlwiV29yZE5vZGVcIj09PWlbZS0xXS50eXBlKSYmciYmXCJXb3JkTm9kZVwiPT09ci50eXBlKSlyZXR1cm4gaS5zcGxpY2UoZSwxKSxyLmNoaWxkcmVuLnVuc2hpZnQobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uc3RhcnQ9bi5wb3NpdGlvbi5zdGFydCksZS0xfSkpLHRuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0O2lmKGU+MCYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCItXCI9PT1lbihuKSYmKHI9KGk9YS5jaGlsZHJlbilbZS0xXSwoISh0PWlbZSsxXSl8fFwiV29yZE5vZGVcIiE9PXQudHlwZSkmJnImJlwiV29yZE5vZGVcIj09PXIudHlwZSkpcmV0dXJuIGkuc3BsaWNlKGUsMSksci5jaGlsZHJlbi5wdXNoKG4pLHIucG9zaXRpb24mJm4ucG9zaXRpb24mJihyLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX0pKSxvbj0vXihbIVwiJykuP1xcdTAwQkJcXHUwRjNCXFx1MEYzRFxcdTE2OUNcXHUyMDE5XFx1MjAxRFxcdTIwMjZcXHUyMDNBXFx1MjAzRFxcdTIwNDZcXHUyMDdFXFx1MjA4RVxcdTIzMDlcXHUyMzBCXFx1MjMyQVxcdTI3NjlcXHUyNzZCXFx1Mjc2RFxcdTI3NkZcXHUyNzcxXFx1Mjc3M1xcdTI3NzVcXHUyN0M2XFx1MjdFN1xcdTI3RTlcXHUyN0VCXFx1MjdFRFxcdTI3RUZcXHUyOTg0XFx1Mjk4NlxcdTI5ODhcXHUyOThBXFx1Mjk4Q1xcdTI5OEVcXHUyOTkwXFx1Mjk5MlxcdTI5OTRcXHUyOTk2XFx1Mjk5OFxcdTI5RDlcXHUyOURCXFx1MjlGRFxcdTJFMDNcXHUyRTA1XFx1MkUwQVxcdTJFMERcXHUyRTFEXFx1MkUyMVxcdTJFMjNcXHUyRTI1XFx1MkUyN1xcdTJFMjlcXHUzMDA5XFx1MzAwQlxcdTMwMERcXHUzMDBGXFx1MzAxMVxcdTMwMTVcXHUzMDE3XFx1MzAxOVxcdTMwMUJcXHUzMDFFXFx1MzAxRlxcdUZEM0VcXHVGRTE4XFx1RkUzNlxcdUZFMzhcXHVGRTNBXFx1RkUzQ1xcdUZFM0VcXHVGRTQwXFx1RkU0MlxcdUZFNDRcXHVGRTQ4XFx1RkU1QVxcdUZFNUNcXHVGRTVFXFx1RkYwOVxcdUZGM0RcXHVGRjVEXFx1RkY2MFxcdUZGNjNcXF19XSlcXDEqJC8sTW49L15bIFxcdF0qKChcXHI/XFxufFxccilbXFx0IF0qKXsyLH0kLyxzbj0vXihbIS4/XFx1MjAyNlxcdTIwM0RdKykkLyxsbj0vXihbJidcXC0uOj0/QFxcdTAwQURcXHUwMEI3XFx1MjAxMFxcdTIwMTFcXHUyMDE5XFx1MjAyN118XyspJC8sY249L14oPzpbXFxkXFx1MDBCMlxcdTAwQjNcXHUwMEI5XFx1MDBCQy1cXHUwMEJFXFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XFx1MDdDMC1cXHUwN0M5XFx1MDk2Ni1cXHUwOTZGXFx1MDlFNi1cXHUwOUVGXFx1MDlGNC1cXHUwOUY5XFx1MEE2Ni1cXHUwQTZGXFx1MEFFNi1cXHUwQUVGXFx1MEI2Ni1cXHUwQjZGXFx1MEI3Mi1cXHUwQjc3XFx1MEJFNi1cXHUwQkYyXFx1MEM2Ni1cXHUwQzZGXFx1MEM3OC1cXHUwQzdFXFx1MENFNi1cXHUwQ0VGXFx1MEQ1OC1cXHUwRDVFXFx1MEQ2Ni1cXHUwRDc4XFx1MERFNi1cXHUwREVGXFx1MEU1MC1cXHUwRTU5XFx1MEVEMC1cXHUwRUQ5XFx1MEYyMC1cXHUwRjMzXFx1MTA0MC1cXHUxMDQ5XFx1MTA5MC1cXHUxMDk5XFx1MTM2OS1cXHUxMzdDXFx1MTZFRS1cXHUxNkYwXFx1MTdFMC1cXHUxN0U5XFx1MTdGMC1cXHUxN0Y5XFx1MTgxMC1cXHUxODE5XFx1MTk0Ni1cXHUxOTRGXFx1MTlEMC1cXHUxOURBXFx1MUE4MC1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUI1MC1cXHUxQjU5XFx1MUJCMC1cXHUxQkI5XFx1MUM0MC1cXHUxQzQ5XFx1MUM1MC1cXHUxQzU5XFx1MjA3MFxcdTIwNzQtXFx1MjA3OVxcdTIwODAtXFx1MjA4OVxcdTIxNTAtXFx1MjE4MlxcdTIxODUtXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDRkRcXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzOC1cXHUzMDNBXFx1MzE5Mi1cXHUzMTk1XFx1MzIyMC1cXHUzMjI5XFx1MzI0OC1cXHUzMjRGXFx1MzI1MS1cXHUzMjVGXFx1MzI4MC1cXHUzMjg5XFx1MzJCMS1cXHUzMkJGXFx1QTYyMC1cXHVBNjI5XFx1QTZFNi1cXHVBNkVGXFx1QTgzMC1cXHVBODM1XFx1QThEMC1cXHVBOEQ5XFx1QTkwMC1cXHVBOTA5XFx1QTlEMC1cXHVBOUQ5XFx1QTlGMC1cXHVBOUY5XFx1QUE1MC1cXHVBQTU5XFx1QUJGMC1cXHVBQkY5XFx1RkYxMC1cXHVGRjE5XXxcXHVEODAwW1xcdUREMDctXFx1REQzM1xcdURENDAtXFx1REQ3OFxcdUREOEFcXHVERDhCXFx1REVFMS1cXHVERUZCXFx1REYyMC1cXHVERjIzXFx1REY0MVxcdURGNEFcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1RENBMC1cXHVEQ0E5XXxcXHVEODAyW1xcdURDNTgtXFx1REM1RlxcdURDNzktXFx1REM3RlxcdURDQTctXFx1RENBRlxcdURDRkItXFx1RENGRlxcdUREMTYtXFx1REQxQlxcdUREQkNcXHVEREJEXFx1RERDMC1cXHVERENGXFx1REREMi1cXHVEREZGXFx1REU0MC1cXHVERTQ4XFx1REU3RFxcdURFN0VcXHVERTlELVxcdURFOUZcXHVERUVCLVxcdURFRUZcXHVERjU4LVxcdURGNUZcXHVERjc4LVxcdURGN0ZcXHVERkE5LVxcdURGQUZdfFxcdUQ4MDNbXFx1RENGQS1cXHVEQ0ZGXFx1REQzMC1cXHVERDM5XFx1REU2MC1cXHVERTdFXFx1REYxRC1cXHVERjI2XFx1REY1MS1cXHVERjU0XFx1REZDNS1cXHVERkNCXXxcXHVEODA0W1xcdURDNTItXFx1REM2RlxcdURDRjAtXFx1RENGOVxcdUREMzYtXFx1REQzRlxcdURERDAtXFx1REREOVxcdURERTEtXFx1RERGNFxcdURFRjAtXFx1REVGOV18XFx1RDgwNVtcXHVEQzUwLVxcdURDNTlcXHVEQ0QwLVxcdURDRDlcXHVERTUwLVxcdURFNTlcXHVERUMwLVxcdURFQzlcXHVERjMwLVxcdURGM0JdfFxcdUQ4MDZbXFx1RENFMC1cXHVEQ0YyXFx1REQ1MC1cXHVERDU5XXxcXHVEODA3W1xcdURDNTAtXFx1REM2Q1xcdURENTAtXFx1REQ1OVxcdUREQTAtXFx1RERBOVxcdURGQzAtXFx1REZENF18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVdfFxcdUQ4MUFbXFx1REU2MC1cXHVERTY5XFx1REY1MC1cXHVERjU5XFx1REY1Qi1cXHVERjYxXXxcXHVEODFCW1xcdURFODAtXFx1REU5Nl18XFx1RDgzNFtcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4MzVbXFx1REZDRS1cXHVERkZGXXxcXHVEODM4W1xcdURENDAtXFx1REQ0OVxcdURFRjAtXFx1REVGOV18XFx1RDgzQVtcXHVEQ0M3LVxcdURDQ0ZcXHVERDUwLVxcdURENTldfFxcdUQ4M0JbXFx1REM3MS1cXHVEQ0FCXFx1RENBRC1cXHVEQ0FGXFx1RENCMS1cXHVEQ0I0XFx1REQwMS1cXHVERDJEXFx1REQyRi1cXHVERDNEXXxcXHVEODNDW1xcdUREMDAtXFx1REQwQ118XFx1RDgzRVtcXHVERkYwLVxcdURGRjldKSskLyxTbj0vXlxcZC8sdW49L14oPzpbYS16XFx1MDBCNVxcdTAwREYtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzdcXHUwMTM4XFx1MDEzQVxcdTAxM0NcXHUwMTNFXFx1MDE0MFxcdTAxNDJcXHUwMTQ0XFx1MDE0NlxcdTAxNDhcXHUwMTQ5XFx1MDE0QlxcdTAxNERcXHUwMTRGXFx1MDE1MVxcdTAxNTNcXHUwMTU1XFx1MDE1N1xcdTAxNTlcXHUwMTVCXFx1MDE1RFxcdTAxNUZcXHUwMTYxXFx1MDE2M1xcdTAxNjVcXHUwMTY3XFx1MDE2OVxcdTAxNkJcXHUwMTZEXFx1MDE2RlxcdTAxNzFcXHUwMTczXFx1MDE3NVxcdTAxNzdcXHUwMTdBXFx1MDE3Q1xcdTAxN0UtXFx1MDE4MFxcdTAxODNcXHUwMTg1XFx1MDE4OFxcdTAxOENcXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUFcXHUwMUFCXFx1MDFBRFxcdTAxQjBcXHUwMUI0XFx1MDFCNlxcdTAxQjlcXHUwMUJBXFx1MDFCRC1cXHUwMUJGXFx1MDFDNlxcdTAxQzlcXHUwMUNDXFx1MDFDRVxcdTAxRDBcXHUwMUQyXFx1MDFENFxcdTAxRDZcXHUwMUQ4XFx1MDFEQVxcdTAxRENcXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGXFx1MDFGMFxcdTAxRjNcXHUwMUY1XFx1MDFGOVxcdTAxRkJcXHUwMUZEXFx1MDFGRlxcdTAyMDFcXHUwMjAzXFx1MDIwNVxcdTAyMDdcXHUwMjA5XFx1MDIwQlxcdTAyMERcXHUwMjBGXFx1MDIxMVxcdTAyMTNcXHUwMjE1XFx1MDIxN1xcdTAyMTlcXHUwMjFCXFx1MDIxRFxcdTAyMUZcXHUwMjIxXFx1MDIyM1xcdTAyMjVcXHUwMjI3XFx1MDIyOVxcdTAyMkJcXHUwMjJEXFx1MDIyRlxcdTAyMzFcXHUwMjMzLVxcdTAyMzlcXHUwMjNDXFx1MDIzRlxcdTAyNDBcXHUwMjQyXFx1MDI0N1xcdTAyNDlcXHUwMjRCXFx1MDI0RFxcdTAyNEYtXFx1MDI5M1xcdTAyOTUtXFx1MDJBRlxcdTAzNzFcXHUwMzczXFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzOTBcXHUwM0FDLVxcdTAzQ0VcXHUwM0QwXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCXFx1MDNGQ1xcdTA0MzAtXFx1MDQ1RlxcdTA0NjFcXHUwNDYzXFx1MDQ2NVxcdTA0NjdcXHUwNDY5XFx1MDQ2QlxcdTA0NkRcXHUwNDZGXFx1MDQ3MVxcdTA0NzNcXHUwNDc1XFx1MDQ3N1xcdTA0NzlcXHUwNDdCXFx1MDQ3RFxcdTA0N0ZcXHUwNDgxXFx1MDQ4QlxcdTA0OERcXHUwNDhGXFx1MDQ5MVxcdTA0OTNcXHUwNDk1XFx1MDQ5N1xcdTA0OTlcXHUwNDlCXFx1MDQ5RFxcdTA0OUZcXHUwNEExXFx1MDRBM1xcdTA0QTVcXHUwNEE3XFx1MDRBOVxcdTA0QUJcXHUwNEFEXFx1MDRBRlxcdTA0QjFcXHUwNEIzXFx1MDRCNVxcdTA0QjdcXHUwNEI5XFx1MDRCQlxcdTA0QkRcXHUwNEJGXFx1MDRDMlxcdTA0QzRcXHUwNEM2XFx1MDRDOFxcdTA0Q0FcXHUwNENDXFx1MDRDRVxcdTA0Q0ZcXHUwNEQxXFx1MDREM1xcdTA0RDVcXHUwNEQ3XFx1MDREOVxcdTA0REJcXHUwNEREXFx1MDRERlxcdTA0RTFcXHUwNEUzXFx1MDRFNVxcdTA0RTdcXHUwNEU5XFx1MDRFQlxcdTA0RURcXHUwNEVGXFx1MDRGMVxcdTA0RjNcXHUwNEY1XFx1MDRGN1xcdTA0RjlcXHUwNEZCXFx1MDRGRFxcdTA0RkZcXHUwNTAxXFx1MDUwM1xcdTA1MDVcXHUwNTA3XFx1MDUwOVxcdTA1MEJcXHUwNTBEXFx1MDUwRlxcdTA1MTFcXHUwNTEzXFx1MDUxNVxcdTA1MTdcXHUwNTE5XFx1MDUxQlxcdTA1MURcXHUwNTFGXFx1MDUyMVxcdTA1MjNcXHUwNTI1XFx1MDUyN1xcdTA1MjlcXHUwNTJCXFx1MDUyRFxcdTA1MkZcXHUwNTYwLVxcdTA1ODhcXHUxMEQwLVxcdTEwRkFcXHUxMEZELVxcdTEwRkZcXHUxM0Y4LVxcdTEzRkRcXHUxQzgwLVxcdTFDODhcXHUxRDAwLVxcdTFEMkJcXHUxRDZCLVxcdTFENzdcXHUxRDc5LVxcdTFEOUFcXHUxRTAxXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MUUwOVxcdTFFMEJcXHUxRTBEXFx1MUUwRlxcdTFFMTFcXHUxRTEzXFx1MUUxNVxcdTFFMTdcXHUxRTE5XFx1MUUxQlxcdTFFMURcXHUxRTFGXFx1MUUyMVxcdTFFMjNcXHUxRTI1XFx1MUUyN1xcdTFFMjlcXHUxRTJCXFx1MUUyRFxcdTFFMkZcXHUxRTMxXFx1MUUzM1xcdTFFMzVcXHUxRTM3XFx1MUUzOVxcdTFFM0JcXHUxRTNEXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MUU0NVxcdTFFNDdcXHUxRTQ5XFx1MUU0QlxcdTFFNERcXHUxRTRGXFx1MUU1MVxcdTFFNTNcXHUxRTU1XFx1MUU1N1xcdTFFNTlcXHUxRTVCXFx1MUU1RFxcdTFFNUZcXHUxRTYxXFx1MUU2M1xcdTFFNjVcXHUxRTY3XFx1MUU2OVxcdTFFNkJcXHUxRTZEXFx1MUU2RlxcdTFFNzFcXHUxRTczXFx1MUU3NVxcdTFFNzdcXHUxRTc5XFx1MUU3QlxcdTFFN0RcXHUxRTdGXFx1MUU4MVxcdTFFODNcXHUxRTg1XFx1MUU4N1xcdTFFODlcXHUxRThCXFx1MUU4RFxcdTFFOEZcXHUxRTkxXFx1MUU5M1xcdTFFOTUtXFx1MUU5RFxcdTFFOUZcXHUxRUExXFx1MUVBM1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUFEXFx1MUVBRlxcdTFFQjFcXHUxRUIzXFx1MUVCNVxcdTFFQjdcXHUxRUI5XFx1MUVCQlxcdTFFQkRcXHUxRUJGXFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVDN1xcdTFFQzlcXHUxRUNCXFx1MUVDRFxcdTFFQ0ZcXHUxRUQxXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEOVxcdTFFREJcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRUUzXFx1MUVFNVxcdTFFRTdcXHUxRUU5XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVGMVxcdTFFRjNcXHUxRUY1XFx1MUVGN1xcdTFFRjlcXHUxRUZCXFx1MUVGRFxcdTFFRkYtXFx1MUYwN1xcdTFGMTAtXFx1MUYxNVxcdTFGMjAtXFx1MUYyN1xcdTFGMzAtXFx1MUYzN1xcdTFGNDAtXFx1MUY0NVxcdTFGNTAtXFx1MUY1N1xcdTFGNjAtXFx1MUY2N1xcdTFGNzAtXFx1MUY3RFxcdTFGODAtXFx1MUY4N1xcdTFGOTAtXFx1MUY5N1xcdTFGQTAtXFx1MUZBN1xcdTFGQjAtXFx1MUZCNFxcdTFGQjZcXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzZcXHUxRkM3XFx1MUZEMC1cXHUxRkQzXFx1MUZENlxcdTFGRDdcXHUxRkUwLVxcdTFGRTdcXHUxRkYyLVxcdTFGRjRcXHUxRkY2XFx1MUZGN1xcdTIxMEFcXHUyMTBFXFx1MjEwRlxcdTIxMTNcXHUyMTJGXFx1MjEzNFxcdTIxMzlcXHUyMTNDXFx1MjEzRFxcdTIxNDYtXFx1MjE0OVxcdTIxNEVcXHUyMTg0XFx1MkMzMC1cXHUyQzVFXFx1MkM2MVxcdTJDNjVcXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzNcXHUyQzc0XFx1MkM3Ni1cXHUyQzdCXFx1MkM4MVxcdTJDODNcXHUyQzg1XFx1MkM4N1xcdTJDODlcXHUyQzhCXFx1MkM4RFxcdTJDOEZcXHUyQzkxXFx1MkM5M1xcdTJDOTVcXHUyQzk3XFx1MkM5OVxcdTJDOUJcXHUyQzlEXFx1MkM5RlxcdTJDQTFcXHUyQ0EzXFx1MkNBNVxcdTJDQTdcXHUyQ0E5XFx1MkNBQlxcdTJDQURcXHUyQ0FGXFx1MkNCMVxcdTJDQjNcXHUyQ0I1XFx1MkNCN1xcdTJDQjlcXHUyQ0JCXFx1MkNCRFxcdTJDQkZcXHUyQ0MxXFx1MkNDM1xcdTJDQzVcXHUyQ0M3XFx1MkNDOVxcdTJDQ0JcXHUyQ0NEXFx1MkNDRlxcdTJDRDFcXHUyQ0QzXFx1MkNENVxcdTJDRDdcXHUyQ0Q5XFx1MkNEQlxcdTJDRERcXHUyQ0RGXFx1MkNFMVxcdTJDRTNcXHUyQ0U0XFx1MkNFQ1xcdTJDRUVcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHVBNjQxXFx1QTY0M1xcdUE2NDVcXHVBNjQ3XFx1QTY0OVxcdUE2NEJcXHVBNjREXFx1QTY0RlxcdUE2NTFcXHVBNjUzXFx1QTY1NVxcdUE2NTdcXHVBNjU5XFx1QTY1QlxcdUE2NURcXHVBNjVGXFx1QTY2MVxcdUE2NjNcXHVBNjY1XFx1QTY2N1xcdUE2NjlcXHVBNjZCXFx1QTY2RFxcdUE2ODFcXHVBNjgzXFx1QTY4NVxcdUE2ODdcXHVBNjg5XFx1QTY4QlxcdUE2OERcXHVBNjhGXFx1QTY5MVxcdUE2OTNcXHVBNjk1XFx1QTY5N1xcdUE2OTlcXHVBNjlCXFx1QTcyM1xcdUE3MjVcXHVBNzI3XFx1QTcyOVxcdUE3MkJcXHVBNzJEXFx1QTcyRi1cXHVBNzMxXFx1QTczM1xcdUE3MzVcXHVBNzM3XFx1QTczOVxcdUE3M0JcXHVBNzNEXFx1QTczRlxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3NDdcXHVBNzQ5XFx1QTc0QlxcdUE3NERcXHVBNzRGXFx1QTc1MVxcdUE3NTNcXHVBNzU1XFx1QTc1N1xcdUE3NTlcXHVBNzVCXFx1QTc1RFxcdUE3NUZcXHVBNzYxXFx1QTc2M1xcdUE3NjVcXHVBNzY3XFx1QTc2OVxcdUE3NkJcXHVBNzZEXFx1QTc2RlxcdUE3NzEtXFx1QTc3OFxcdUE3N0FcXHVBNzdDXFx1QTc3RlxcdUE3ODFcXHVBNzgzXFx1QTc4NVxcdUE3ODdcXHVBNzhDXFx1QTc4RVxcdUE3OTFcXHVBNzkzLVxcdUE3OTVcXHVBNzk3XFx1QTc5OVxcdUE3OUJcXHVBNzlEXFx1QTc5RlxcdUE3QTFcXHVBN0EzXFx1QTdBNVxcdUE3QTdcXHVBN0E5XFx1QTdBRlxcdUE3QjVcXHVBN0I3XFx1QTdCOVxcdUE3QkJcXHVBN0JEXFx1QTdCRlxcdUE3QzNcXHVBN0M4XFx1QTdDQVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkY0MS1cXHVGRjVBXXxcXHVEODAxW1xcdURDMjgtXFx1REM0RlxcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENDMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNjAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzFBLVxcdURDMzNcXHVEQzRFLVxcdURDNTRcXHVEQzU2LVxcdURDNjdcXHVEQzgyLVxcdURDOUJcXHVEQ0I2LVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1RENFQS1cXHVERDAzXFx1REQxRS1cXHVERDM3XFx1REQ1Mi1cXHVERDZCXFx1REQ4Ni1cXHVERDlGXFx1RERCQS1cXHVEREQzXFx1RERFRS1cXHVERTA3XFx1REUyMi1cXHVERTNCXFx1REU1Ni1cXHVERTZGXFx1REU4QS1cXHVERUE1XFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUUxXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjFCXFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjU1XFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERjhGXFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkM5XFx1REZDQl18XFx1RDgzQVtcXHVERDIyLVxcdURENDNdKS8sZG49L1tcXHVEODAwLVxcdURGRkZdLyxtbj0vWyFcIictKSwtLzo7P1stXFxdX3t9XFx1MDBBMVxcdTAwQTdcXHUwMEFCXFx1MDBCNlxcdTAwQjdcXHUwMEJCXFx1MDBCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwOUZEXFx1MEE3NlxcdTBBRjBcXHUwQzc3XFx1MEM4NFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMUZcXHUyMDIyLVxcdTIwMjdcXHUyMDMyLVxcdTIwM0FcXHUyMDNDLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTRGXFx1MkU1MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwM1tcXHVERUFEXFx1REY1NS1cXHVERjU5XXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzhcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1REM0Qi1cXHVEQzRGXFx1REM1QVxcdURDNUJcXHVEQzVEXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURFNjAtXFx1REU2Q1xcdURGM0MtXFx1REYzRV18XFx1RDgwNltcXHVEQzNCXFx1REQ0NC1cXHVERDQ2XFx1RERFMlxcdURFM0YtXFx1REU0NlxcdURFOUEtXFx1REU5Q1xcdURFOUUtXFx1REVBMl18XFx1RDgwN1tcXHVEQzQxLVxcdURDNDVcXHVEQzcwXFx1REM3MVxcdURFRjdcXHVERUY4XFx1REZGRl18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgxQltcXHVERTk3LVxcdURFOUFcXHVERkUyXXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql18XFx1RDgzQVtcXHVERDVFXFx1REQ1Rl0vLHBuPS9bXFxkQS1aYS16XFx1MDBBQVxcdTAwQjJcXHUwMEIzXFx1MDBCNVxcdTAwQjlcXHUwMEJBXFx1MDBCQy1cXHUwMEJFXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzAwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA3RkRcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QzdcXHUwOEQzLVxcdTA4RTFcXHUwOEUzLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTA5RjQtXFx1MDlGOVxcdTA5RkNcXHUwOUZFXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBBRjktXFx1MEFGRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTUtXFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MS1cXHUwQjc3XFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRjJcXHUwQzAwLVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNTgtXFx1MEM1QVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDNzgtXFx1MEM3RVxcdTBDODAtXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1NC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDc4XFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MS1cXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERFNi1cXHUwREVGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYzM1xcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM2OS1cXHUxMzdDXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5REFcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUMwXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0ZBXFx1MUQwMC1cXHUxREY5XFx1MURGQi1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzBcXHUyMDcxXFx1MjA3NC1cXHUyMDc5XFx1MjA3Ri1cXHUyMDg5XFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNTAtXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJDRkRcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OVxcdTMwOUFcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMTkyLVxcdTMxOTVcXHUzMUEwLVxcdTMxQkZcXHUzMUYwLVxcdTMxRkZcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHUzNDAwLVxcdTREQkZcXHU0RTAwLVxcdTlGRkNcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3Q0FcXHVBN0Y1LVxcdUE4MjdcXHVBODJDXFx1QTgzMC1cXHVBODM1XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM1XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE4RkQtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUE5RTAtXFx1QTlGRVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0EtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2OVxcdUFCNzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERDA3LVxcdUREMzNcXHVERDQwLVxcdURENzhcXHVERDhBXFx1REQ4QlxcdURERkRcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERUUwLVxcdURFRkJcXHVERjAwLVxcdURGMjNcXHVERjJELVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzU4LVxcdURDNzZcXHVEQzc5LVxcdURDOUVcXHVEQ0E3LVxcdURDQUZcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdURDRkItXFx1REQxQlxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkMtXFx1RERDRlxcdURERDItXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REUzOC1cXHVERTNBXFx1REUzRi1cXHVERTQ4XFx1REU2MC1cXHVERTdFXFx1REU4MC1cXHVERTlGXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU2XFx1REVFQi1cXHVERUVGXFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY1OC1cXHVERjcyXFx1REY3OC1cXHVERjkxXFx1REZBOS1cXHVERkFGXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdURDRkEtXFx1REQyN1xcdUREMzAtXFx1REQzOVxcdURFNjAtXFx1REU3RVxcdURFODAtXFx1REVBOVxcdURFQUJcXHVERUFDXFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMjdcXHVERjMwLVxcdURGNTRcXHVERkIwLVxcdURGQ0JcXHVERkUwLVxcdURGRjZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzQ2XFx1REM1Mi1cXHVEQzZGXFx1REM3Ri1cXHVEQ0JBXFx1RENEMC1cXHVEQ0U4XFx1RENGMC1cXHVEQ0Y5XFx1REQwMC1cXHVERDM0XFx1REQzNi1cXHVERDNGXFx1REQ0NC1cXHVERDQ3XFx1REQ1MC1cXHVERDczXFx1REQ3NlxcdUREODAtXFx1RERDNFxcdUREQzktXFx1RERDQ1xcdUREQ0UtXFx1REREQVxcdURERENcXHVEREUxLVxcdURERjRcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMzdcXHVERTNFXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVFQVxcdURFRjAtXFx1REVGOVxcdURGMDAtXFx1REYwM1xcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNCLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTBcXHVERjU3XFx1REY1RC1cXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDMDAtXFx1REM0QVxcdURDNTAtXFx1REM1OVxcdURDNUUtXFx1REM2MVxcdURDODAtXFx1RENDNVxcdURDQzdcXHVEQ0QwLVxcdURDRDlcXHVERDgwLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVEREQ4LVxcdURERERcXHVERTAwLVxcdURFNDBcXHVERTQ0XFx1REU1MC1cXHVERTU5XFx1REU4MC1cXHVERUI4XFx1REVDMC1cXHVERUM5XFx1REYwMC1cXHVERjFBXFx1REYxRC1cXHVERjJCXFx1REYzMC1cXHVERjNCXXxcXHVEODA2W1xcdURDMDAtXFx1REMzQVxcdURDQTAtXFx1RENGMlxcdURDRkYtXFx1REQwNlxcdUREMDlcXHVERDBDLVxcdUREMTNcXHVERDE1XFx1REQxNlxcdUREMTgtXFx1REQzNVxcdUREMzdcXHVERDM4XFx1REQzQi1cXHVERDQzXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQ3XFx1REREQS1cXHVEREUxXFx1RERFM1xcdURERTRcXHVERTAwLVxcdURFM0VcXHVERTQ3XFx1REU1MC1cXHVERTk5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMzZcXHVEQzM4LVxcdURDNDBcXHVEQzUwLVxcdURDNkNcXHVEQzcyLVxcdURDOEZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzNlxcdUREM0FcXHVERDNDXFx1REQzRFxcdUREM0YtXFx1REQ0N1xcdURENTAtXFx1REQ1OVxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDhFXFx1REQ5MFxcdUREOTFcXHVERDkzLVxcdUREOThcXHVEREEwLVxcdUREQTlcXHVERUUwLVxcdURFRjZcXHVERkIwXFx1REZDMC1cXHVERkQ0XXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDgyMlxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OVxcdUQ4ODAtXFx1RDg4M11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU2MC1cXHVERTY5XFx1REVEMC1cXHVERUVEXFx1REVGMC1cXHVERUY0XFx1REYwMC1cXHVERjM2XFx1REY0MC1cXHVERjQzXFx1REY1MC1cXHVERjU5XFx1REY1Qi1cXHVERjYxXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU5NlxcdURGMDAtXFx1REY0QVxcdURGNEYtXFx1REY4N1xcdURGOEYtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM1xcdURGRTRcXHVERkYwXFx1REZGMV18XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTlcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQlxcdURGQ0UtXFx1REZGRl18XFx1RDgzNltcXHVERTAwLVxcdURFMzZcXHVERTNCLVxcdURFNkNcXHVERTc1XFx1REU4NFxcdURFOUItXFx1REU5RlxcdURFQTEtXFx1REVBRl18XFx1RDgzOFtcXHVEQzAwLVxcdURDMDZcXHVEQzA4LVxcdURDMThcXHVEQzFCLVxcdURDMjFcXHVEQzIzXFx1REMyNFxcdURDMjYtXFx1REMyQVxcdUREMDAtXFx1REQyQ1xcdUREMzAtXFx1REQzRFxcdURENDAtXFx1REQ0OVxcdURENEVcXHVERUMwLVxcdURFRjldfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1RENDNy1cXHVEQ0Q2XFx1REQwMC1cXHVERDRCXFx1REQ1MC1cXHVERDU5XXxcXHVEODNCW1xcdURDNzEtXFx1RENBQlxcdURDQUQtXFx1RENBRlxcdURDQjEtXFx1RENCNFxcdUREMDEtXFx1REQyRFxcdUREMkYtXFx1REQzRFxcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV18XFx1RDg2OVtcXHVEQzAwLVxcdURFRERcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1RDg4NFtcXHVEQzAwLVxcdURGNEFdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS8saG49L1tcXHQtXFxyIFxcdTAwODVcXHUwMEEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwQVxcdTIwMjhcXHUyMDI5XFx1MjAyRlxcdTIwNUZcXHUzMDAwXS8sZ249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNLHMsbDtpZihlPjAmJihcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJih0PShpPWEuY2hpbGRyZW4pW2UtMV0pJiZcIldvcmROb2RlXCI9PT10LnR5cGUpe2ZvcihNPWUtMSxzPVtdLGw9W107aVsrK01dOylpZihcIldvcmROb2RlXCI9PT0ocj1pW01dKS50eXBlKXM9cy5jb25jYXQobCxyLmNoaWxkcmVuKSxsPVtdO2Vsc2V7aWYoXCJTeW1ib2xOb2RlXCIhPT1yLnR5cGUmJlwiUHVuY3R1YXRpb25Ob2RlXCIhPT1yLnR5cGV8fCFsbi50ZXN0KGVuKHIpKSlicmVhaztsLnB1c2gocil9aWYocy5sZW5ndGg+MClyZXR1cm4gbC5sZW5ndGg+MCYmKE0tPWwubGVuZ3RoKSxpLnNwbGljZShlLE0tZSksdC5jaGlsZHJlbj10LmNoaWxkcmVuLmNvbmNhdChzKSxvPXNbcy5sZW5ndGgtMV0sdC5wb3NpdGlvbiYmby5wb3NpdGlvbiYmKHQucG9zaXRpb24uZW5kPW8ucG9zaXRpb24uZW5kKSxlfX0pKSx5bj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsLGM9YS5jaGlsZHJlbjtpZihpPWNbZS0xXSxyPWNbZSsxXSxpJiZcIldvcmROb2RlXCI9PT1pLnR5cGUmJihcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJlwiL1wiPT09ZW4obikmJih0PWVuKGkpLHM9bixNPVtuXSxsPTEsciYmXCJXb3JkTm9kZVwiPT09ci50eXBlJiYobz1lbihyKSxzPXIsTT1NLmNvbmNhdChyLmNoaWxkcmVuKSxsKyspLHQubGVuZ3RoPDMmJighb3x8by5sZW5ndGg8MykpKXJldHVybiBpLmNoaWxkcmVuPWkuY2hpbGRyZW4uY29uY2F0KE0pLGMuc3BsaWNlKGUsbCksaS5wb3NpdGlvbiYmcy5wb3NpdGlvbiYmKGkucG9zaXRpb24uZW5kPXMucG9zaXRpb24uZW5kKSxlfSkpLGJuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGw7aWYoZT4wJiZcIi5cIj09PWVuKG4pJiYodD0ocj0oaT1hLmNoaWxkcmVuKVtlLTFdKS5jaGlsZHJlbixcIldvcmROb2RlXCI9PT1yLnR5cGUmJnQmJjEhPT10Lmxlbmd0aCYmdC5sZW5ndGglMiE9MCkpe2ZvcihvPXQubGVuZ3RoLHM9ITA7dFstLW9dOylpZihNPXRbb10sbD1lbihNKSxvJTI9PTApe2lmKGwubGVuZ3RoPjEpcmV0dXJuO2NuLnRlc3QobCl8fChzPSExKX1lbHNlIGlmKFwiLlwiIT09bCl7aWYobzx0Lmxlbmd0aC0yKWJyZWFrO3JldHVybn1pZighcylyZXR1cm4gaS5zcGxpY2UoZSwxKSx0LnB1c2gobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfX0pKSxEbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI9YS5jaGlsZHJlbjtpZihcIldvcmROb2RlXCI9PT1uLnR5cGUmJihpPXJbZSsxXSkmJlwiV29yZE5vZGVcIj09PWkudHlwZSlyZXR1cm4gci5zcGxpY2UoZSsxLDEpLG4uY2hpbGRyZW49bi5jaGlsZHJlbi5jb25jYXQoaS5jaGlsZHJlbiksaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPWkucG9zaXRpb24uZW5kKSxlfSkpLGZuPWEoMjApLEduPWZuKChmdW5jdGlvbihuLGUsYSl7dmFyIGk9YS5jaGlsZHJlbjtuLnBvc2l0aW9uJiYoIShlPDEpfHxhLnBvc2l0aW9uJiZhLnBvc2l0aW9uLnN0YXJ0fHwod24oYSksYS5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxlIT09aS5sZW5ndGgtMXx8YS5wb3NpdGlvbiYmYS5wb3NpdGlvbi5lbmR8fCh3bihhKSxhLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCkpfSkpO2Z1bmN0aW9uIHduKG4pe24ucG9zaXRpb258fChuLnBvc2l0aW9uPXt9KX12YXIgdm49YW4oKGZ1bmN0aW9uKG4sZSxhKXtmb3IodmFyIGkscix0PW4uY2hpbGRyZW4sbz0tMTt0Wysrb107KWlmKFwiV29yZE5vZGVcIj09PXRbb10udHlwZSlyZXR1cm47aWYoaT1hLmNoaWxkcmVuW2UtMV0pcmV0dXJuIGkuY2hpbGRyZW49aS5jaGlsZHJlbi5jb25jYXQodCksYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSxpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGU7KHI9YS5jaGlsZHJlbltlKzFdKSYmKHIuY2hpbGRyZW49dC5jb25jYXQoci5jaGlsZHJlbiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uc3RhcnQ9bi5wb3NpdGlvbi5zdGFydCksYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSl9KSksa249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbz1uLmNoaWxkcmVuO2lmKG8mJm8ubGVuZ3RoPjAmJmU+MCYmKGk9b1swXSxyPW9bMV0sdD1hLmNoaWxkcmVuW2UtMV0sKFwiU3ltYm9sTm9kZVwiPT09aS50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09aS50eXBlKSYmb24udGVzdChlbihpKSkpKXJldHVybiB0LmNoaWxkcmVuLnB1c2goby5zaGlmdCgpKSxpLnBvc2l0aW9uJiZ0LnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLHImJnIucG9zaXRpb24mJm4ucG9zaXRpb24mJihuLnBvc2l0aW9uLnN0YXJ0PXIucG9zaXRpb24uc3RhcnQpLGUtMX0pKSxSbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE09bi5jaGlsZHJlbjtpZihNJiZNLmxlbmd0aD4wJiZlPjApZm9yKGk9LTE7TVsrK2ldOyl7aWYoXCJXb3JkTm9kZVwiPT09KHI9TVtpXSkudHlwZSl7aWYoIXVuLnRlc3QoZW4ocikpKXJldHVybjtyZXR1cm4obz0odD1hLmNoaWxkcmVuKVtlLTFdKS5jaGlsZHJlbj1vLmNoaWxkcmVuLmNvbmNhdChNKSx0LnNwbGljZShlLDEpLG8ucG9zaXRpb24mJm4ucG9zaXRpb24mJihvLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX1pZihcIlN5bWJvbE5vZGVcIj09PXIudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PXIudHlwZSlyZXR1cm59fSkpLFluPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGk9bi5jaGlsZHJlbixyPWEuY2hpbGRyZW4sdD1yW2UtMV0sbz1pWzBdO2lmKHQmJm8mJlwiV29yZE5vZGVcIj09PW8udHlwZSYmU24udGVzdChlbihvKSkpcmV0dXJuIHQuY2hpbGRyZW49dC5jaGlsZHJlbi5jb25jYXQoaSksci5zcGxpY2UoZSwxKSx0LnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGV9KSksQW49bmV3IFJlZ0V4cChcIl4oWzAtOV17MSwzfXxbYS16XXxhbHxjYXxjYXB8Y2NhfGNlbnR8Y2Z8Y2l0fGNvbnxjcHxjd3R8ZWFkfGV0Y3xmZnxmbHxpYmlkfGlkfG5lbXxvcHxwcm98c2VxfHNpY3xzdGF0fHRlbXx2aXopJFwiKSxQbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvPW4uY2hpbGRyZW47aWYobyYmby5sZW5ndGg+MSYmKGk9b1tvLmxlbmd0aC0xXSkmJlwiLlwiPT09ZW4oaSkmJihyPW9bby5sZW5ndGgtMl0pJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJkFuLnRlc3QoZW4ocikudG9Mb3dlckNhc2UoKSkmJihyLmNoaWxkcmVuLnB1c2goaSksby5wb3AoKSxpLnBvc2l0aW9uJiZyLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLHQ9YS5jaGlsZHJlbltlKzFdKSlyZXR1cm4gbi5jaGlsZHJlbj1vLmNvbmNhdCh0LmNoaWxkcmVuKSxhLmNoaWxkcmVuLnNwbGljZShlKzEsMSksdC5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPXQucG9zaXRpb24uZW5kKSxlLTF9KSksQ249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNPW4uY2hpbGRyZW47aWYoTSYmMCE9PU0ubGVuZ3RoJiYhKGU8MSkpZm9yKHI9LTE7TVsrK3JdOyl7aWYoXCJXb3JkTm9kZVwiPT09KGk9TVtyXSkudHlwZSlyZXR1cm47aWYoXCJTeW1ib2xOb2RlXCI9PT1pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1pLnR5cGUpe2lmKFwiLFwiIT09KHQ9ZW4oaSkpJiZcIjtcIiE9PXQpcmV0dXJuO3JldHVybihvPWEuY2hpbGRyZW5bZS0xXSkuY2hpbGRyZW49by5jaGlsZHJlbi5jb25jYXQoTSksby5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG8ucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxhLmNoaWxkcmVuLnNwbGljZShlLDEpLGV9fX0pKSxUbj1mbigoZnVuY3Rpb24obil7Zm9yKHZhciBlLGEsaSxyLHQ9bi5jaGlsZHJlbixvPXQubGVuZ3RoLE09ITE7dFstLW9dOylpZihcIlN5bWJvbE5vZGVcIj09PShlPXRbb10pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1lLnR5cGUpe2lmKHNuLnRlc3QoZW4oZSkpKWlmKE0pe2lmKFwiLlwiPT09ZW4oZSkpaWYoYT10W28tMV0saT10W28rMV0sYSYmXCJXb3JkTm9kZVwiPT09YS50eXBlKXtpZihyPXRbbysyXSxpJiZyJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1pLnR5cGUmJlwiLlwiPT09ZW4ocikpY29udGludWU7dC5zcGxpY2UobywxKSxhLmNoaWxkcmVuLnB1c2goZSksZS5wb3NpdGlvbiYmYS5wb3NpdGlvbiYmKGEucG9zaXRpb24uZW5kPWUucG9zaXRpb24uZW5kKSxvLS19ZWxzZSBpJiZcIldvcmROb2RlXCI9PT1pLnR5cGUmJih0LnNwbGljZShvLDEpLGkuY2hpbGRyZW4udW5zaGlmdChlKSxlLnBvc2l0aW9uJiZpLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5zdGFydD1lLnBvc2l0aW9uLnN0YXJ0KSl9ZWxzZSBNPSEwfWVsc2VcIldvcmROb2RlXCI9PT1lLnR5cGUmJihNPSEwKX0pKSx4bj1mbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI9bi5jaGlsZHJlbjtyJiZyLmxlbmd0aD4wJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1yWzBdLnR5cGUmJihhLmNoaWxkcmVuLnNwbGljZShlLDAsci5zaGlmdCgpKSwoaT1yWzBdKSYmaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uc3RhcnQ9aS5wb3NpdGlvbi5zdGFydCkpfSkpLHpuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1uLmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoPjAmJlwiV2hpdGVTcGFjZU5vZGVcIj09PXJbci5sZW5ndGgtMV0udHlwZSlyZXR1cm4gYS5jaGlsZHJlbi5zcGxpY2UoZSsxLDAsbi5jaGlsZHJlbi5wb3AoKSksKGk9cltyLmxlbmd0aC0xXSkmJmkucG9zaXRpb24mJm4ucG9zaXRpb24mJihuLnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksZX0pKSxFbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsO2lmKFwiU2VudGVuY2VOb2RlXCI9PT1uLnR5cGUpZm9yKGk9bi5jaGlsZHJlbixyPTA7KytyPGkubGVuZ3RoLTE7KWlmKFwiV2hpdGVTcGFjZU5vZGVcIj09PShsPWlbcl0pLnR5cGUmJk1uLnRlc3QoZW4obCkpKXJldHVybiBuLmNoaWxkcmVuPWkuc2xpY2UoMCxyKSxzPXt0eXBlOlwiU2VudGVuY2VOb2RlXCIsY2hpbGRyZW46aS5zbGljZShyKzEpfSx0PWlbci0xXSxvPWlbcisxXSxhLmNoaWxkcmVuLnNwbGljZShlKzEsMCxsLHMpLG4ucG9zaXRpb24mJnQucG9zaXRpb24mJm8ucG9zaXRpb24mJihNPW4ucG9zaXRpb24uZW5kLG4ucG9zaXRpb24uZW5kPXQucG9zaXRpb24uZW5kLHMucG9zaXRpb249e3N0YXJ0Om8ucG9zaXRpb24uc3RhcnQsZW5kOk19KSxlKzF9KSksQm49YW4oKGZ1bmN0aW9uKG4sZSxhKXtpZihcImNoaWxkcmVuXCJpbiBuJiYwPT09bi5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIGEuY2hpbGRyZW4uc3BsaWNlKGUsMSksZX0pKTtmdW5jdGlvbiBObihuKXt2YXIgZSxhLGk9bi50eXBlLHI9bi50b2tlbml6ZXIsdD1uLmRlbGltaXRlcixvPXQmJihlPW4uZGVsaW1pdGVyVHlwZSxhPXQsZnVuY3Rpb24obil7Zm9yKHZhciBpLHIsdCxvPVtdLE09bi5jaGlsZHJlbixzPW4udHlwZSxsPS0xLGM9TS5sZW5ndGgtMSxTPTA7KytsPE0ubGVuZ3RoOykobD09PWN8fE1bbF0udHlwZT09PWUmJmEudGVzdChlbihNW2xdKSkpJiYoaT1NW1NdLHI9TVtsXSx0PXt0eXBlOnMsY2hpbGRyZW46TS5zbGljZShTLGwrMSl9LGkucG9zaXRpb24mJnIucG9zaXRpb24mJih0LnBvc2l0aW9uPXtzdGFydDppLnBvc2l0aW9uLnN0YXJ0LGVuZDpyLnBvc2l0aW9uLmVuZH0pLG8ucHVzaCh0KSxTPWwrMSk7cmV0dXJuIG99KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9dGhpc1tyXShuKTtyZXR1cm57dHlwZTppLGNoaWxkcmVuOm8/byhlKTplfX19Y2xhc3MgWm57Y29uc3RydWN0b3IobixlKXt2YXIgYT1lfHxuO3RoaXMuZG9jPWE/U3RyaW5nKGEpOm51bGx9cnVuKG4sZSl7dmFyIGE9dGhpc1tuK1wiUGx1Z2luc1wiXSxpPS0xO2lmKGEpZm9yKDthWysraV07KWFbaV0oZSk7cmV0dXJuIGV9cGFyc2Uobil7cmV0dXJuIHRoaXMudG9rZW5pemVSb290KG58fHRoaXMuZG9jKX10b2tlbml6ZShuKXt2YXIgZSxhLGkscix0LG8sTT10aGlzLHM9W10sbD0wLGM9MCxTPTEsdT0xO2lmKG51bGw9PW4/bj1cIlwiOm4gaW5zdGFuY2VvZiBTdHJpbmcmJihuPW4udG9TdHJpbmcoKSksXCJzdHJpbmdcIiE9dHlwZW9mIG4pe2lmKFwibGVuZ3RoXCJpbiBuJiYoIW5bMF18fG5bMF0udHlwZSkpcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uOiAnXCIrbitcIicgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yICdQYXJzZUxhdGluJ1wiKX1pZighbilyZXR1cm4gcztmb3Iobz10aGlzLnBvc2l0aW9uP2Z1bmN0aW9uKG4pe3ZhciBlLGE9KGU9aCgpLGZ1bmN0aW9uKG4pe3JldHVybiBuLnBvc2l0aW9uPW5ldyBwKGUpLG59KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9LTEsYT0tMTtmb3IoYys9bi5sZW5ndGg7KytlPG4ubGVuZ3RoOylcIlxcblwiPT09bi5jaGFyQXQoZSkmJihhPWUsUysrKTthPDA/dSs9bi5sZW5ndGg6dT1uLmxlbmd0aC1hfShuKSxmdW5jdGlvbiguLi5uKXtyZXR1cm4gYShtKC4uLm4pKX19OmZ1bmN0aW9uKCl7cmV0dXJuIG19LGk9XCJcIixhPVwiXCI7bDxuLmxlbmd0aDspZT1uLmNoYXJBdChsKSx0PWhuLnRlc3QoZSk/XCJXaGl0ZVNwYWNlXCI6bW4udGVzdChlKT9cIlB1bmN0dWF0aW9uXCI6cG4udGVzdChlKT9cIldvcmRcIjpcIlN5bWJvbFwiLGQoKSxpPWUsZT1cIlwiLHI9dCx0PW51bGwsbCsrO3JldHVybiBkKCkscztmdW5jdGlvbiBkKCl7ciE9PXR8fFwiV29yZFwiIT09ciYmXCJXaGl0ZVNwYWNlXCIhPT1yJiZlIT09aSYmIWRuLnRlc3QoZSk/KGEmJk1bXCJ0b2tlbml6ZVwiK3JdKGEsbyksYT1lKTphKz1lfWZ1bmN0aW9uIG0obixlKXtyZXR1cm4gZT9lLmNoaWxkcmVuLnB1c2gobik6cy5wdXNoKG4pLG59ZnVuY3Rpb24gcChuKXt0aGlzLnN0YXJ0PW4sdGhpcy5lbmQ9aCgpfWZ1bmN0aW9uIGgoKXtyZXR1cm57bGluZTpTLGNvbHVtbjp1LG9mZnNldDpjfX19fWZ1bmN0aW9uIEZuKG4pe3JldHVybiBuKz1cIk5vZGVcIixmdW5jdGlvbihlLGEsaSl7cmV0dXJuIG51bGw9PWUmJihlPVwiXCIpLChhfHxMbikoZSkoe3R5cGU6bix2YWx1ZTpTdHJpbmcoZSl9LGkpfX1mdW5jdGlvbiBJbihuLGUsYSl7bi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oLi4ubil7cmV0dXJuIHRoaXMucnVuKGUsYS5hcHBseSh0aGlzLG4pKX19ZnVuY3Rpb24gVW4obil7cmV0dXJuIGZ1bmN0aW9uKGUsYSl7dmFyIGk7aWYoIShlIGluIHRoaXMpKXRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgSW52b2NhdGlvbjogVW5zdXBwb3J0ZWQgYGtleWAgZm9yIGB1c2Uoa2V5LCBwbHVnaW5zKWAuIE1ha2Ugc3VyZSBga2V5YCBpcyBhIHN1cHBvcnRlZCBmdW5jdGlvblwiKTthJiYoaT1lK1wiUGx1Z2luc1wiLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgYT9bYV06YS5jb25jYXQoKSx0aGlzW2ldfHwodGhpc1tpXT1bXSksbih0aGlzLGksYSkpfX1mdW5jdGlvbiBqbihuLGUpe3JldHVybiBlJiZlLmNoaWxkcmVuLnB1c2gobiksbn1mdW5jdGlvbiBMbigpe3JldHVybiBqbn1abi5wcm90b3R5cGUucG9zaXRpb249ITAsWm4ucHJvdG90eXBlLnRva2VuaXplU3ltYm9sPUZuKFwiU3ltYm9sXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVdoaXRlU3BhY2U9Rm4oXCJXaGl0ZVNwYWNlXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVB1bmN0dWF0aW9uPUZuKFwiUHVuY3R1YXRpb25cIiksWm4ucHJvdG90eXBlLnRva2VuaXplU291cmNlPUZuKFwiU291cmNlXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVRleHQ9Rm4oXCJUZXh0XCIpLFpuLnByb3RvdHlwZS51c2U9VW4oKGZ1bmN0aW9uKG4sZSxhKXtuW2VdPW5bZV0uY29uY2F0KGEpfSkpLFpuLnByb3RvdHlwZS51c2VGaXJzdD1VbigoZnVuY3Rpb24obixlLGEpe25bZV09YS5jb25jYXQobltlXSl9KSksSW4oWm4sXCJ0b2tlbml6ZVdvcmRcIiwoZnVuY3Rpb24obixlKXt2YXIgYT0oZXx8TG4pKFwiXCIpLGk9e3R5cGU6XCJXb3JkTm9kZVwiLGNoaWxkcmVuOltdfTtyZXR1cm4gdGhpcy50b2tlbml6ZVRleHQobixlLGkpLGEoaSl9KSksSW4oWm4sXCJ0b2tlbml6ZVNlbnRlbmNlXCIsTm4oe3R5cGU6XCJTZW50ZW5jZU5vZGVcIix0b2tlbml6ZXI6XCJ0b2tlbml6ZVwifSkpLEluKFpuLFwidG9rZW5pemVQYXJhZ3JhcGhcIixObih7dHlwZTpcIlBhcmFncmFwaE5vZGVcIixkZWxpbWl0ZXI6c24sZGVsaW1pdGVyVHlwZTpcIlB1bmN0dWF0aW9uTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplU2VudGVuY2VcIn0pKSxJbihabixcInRva2VuaXplUm9vdFwiLE5uKHt0eXBlOlwiUm9vdE5vZGVcIixkZWxpbWl0ZXI6L15bIFxcdF0qKChcXHI/XFxufFxccilbXFx0IF0qKSskLyxkZWxpbWl0ZXJUeXBlOlwiV2hpdGVTcGFjZU5vZGVcIix0b2tlbml6ZXI6XCJ0b2tlbml6ZVBhcmFncmFwaFwifSkpLFpuLnByb3RvdHlwZS51c2UoXCJ0b2tlbml6ZVNlbnRlbmNlXCIsW3JuLHRuLGduLHluLGJuLERuLEduXSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplUGFyYWdyYXBoXCIsW3ZuLGtuLFJuLFluLFBuLENuLFRuLHhuLHpuLEVuLEJuLEduXSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplUm9vdFwiLFt4bix6bixCbixHbl0pO2Z1bmN0aW9uIHFuKG4sZT1cIlwiKXtsZXQgYT0tMTtpZighbnx8IUFycmF5LmlzQXJyYXkobikmJiFuLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSwgbm90IGBcIituK1wiYFwiKTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi52YWx1ZSlyZXR1cm4gbi52YWx1ZTtjb25zdCBpPShBcnJheS5pc0FycmF5KG4pP246bi5jaGlsZHJlbil8fFtdO2lmKDE9PT1pLmxlbmd0aCYmXCJ2YWx1ZVwiaW4gaVswXSlyZXR1cm4gaVswXS52YWx1ZTtjb25zdCByPVtdO2Zvcig7KythPGkubGVuZ3RoOylyW2FdPXFuKGlbYV0sZSk7cmV0dXJuIHIuam9pbihlKX1mdW5jdGlvbiBIbihuKXtyZXR1cm4gcW4obil9Y29uc3QgSm49ZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduKHRoaXMse0NvbXBpbGVyOkhufSl9LE9uPUooKS51c2UoKGZ1bmN0aW9uKCl7T2JqZWN0LmFzc2lnbih0aGlzLHtQYXJzZXI6bm4oWm4pfSl9KSkudXNlKEpuKS5mcmVlemUoKTt2YXIgWG49YSgyOTEpO2NvbnN0IFZuPWZ1bmN0aW9uIG4oZSxhLGkscix0KXtjb25zdCBvPVduKGEpO2lmKG51bGwhPWkmJihcIm51bWJlclwiIT10eXBlb2YgaXx8aTwwfHxpPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXhcIik7aWYoIShudWxsPT1yfHxuKHIpJiZyLmNoaWxkcmVuKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgbm9kZVwiKTtpZihudWxsPT1yIT0obnVsbD09aSkpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYm90aCBwYXJlbnQgYW5kIGluZGV4XCIpO3JldHVybiEoIWV8fCFlLnR5cGV8fFwic3RyaW5nXCIhPXR5cGVvZiBlLnR5cGUpJiZCb29sZWFuKG8uY2FsbCh0LGUsaSxyKSl9LFduPWZ1bmN0aW9uKG4pe2lmKG51bGw9PW4pcmV0dXJuICRuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBlPW4sS24oKGZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLnR5cGU9PT1lfSkpO3ZhciBlO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBuKXJldHVybiBBcnJheS5pc0FycmF5KG4pP2Z1bmN0aW9uKG4pe2NvbnN0IGU9W107bGV0IGE9LTE7Zm9yKDsrK2E8bi5sZW5ndGg7KWVbYV09V24oblthXSk7cmV0dXJuIEtuKChmdW5jdGlvbiguLi5uKXtsZXQgYT0tMTtmb3IoOysrYTxlLmxlbmd0aDspaWYoZVthXS5jYWxsKHRoaXMsLi4ubikpcmV0dXJuITA7cmV0dXJuITF9KSl9KG4pOmZ1bmN0aW9uKG4pe3JldHVybiBLbigoZnVuY3Rpb24oZSl7bGV0IGE7Zm9yKGEgaW4gbilpZihlW2FdIT09blthXSlyZXR1cm4hMTtyZXR1cm4hMH0pKX0obik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gS24obik7dGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3RcIil9O2Z1bmN0aW9uIEtuKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtyZXR1cm4gQm9vbGVhbihuLmNhbGwodGhpcywuLi5lKSl9fWZ1bmN0aW9uICRuKCl7cmV0dXJuITB9Y29uc3QgUW49XCJza2lwXCIsX249ZnVuY3Rpb24obixlLGEsaSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmKGk9YSxhPWUsZT1udWxsKSxmdW5jdGlvbihuLGUsYSxpKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoaT1hLGE9ZSxlPW51bGwpO2NvbnN0IHI9V24oZSksdD1pPy0xOjE7IWZ1bmN0aW9uIG4obyxNLHMpe2NvbnN0IGw9XCJvYmplY3RcIj09dHlwZW9mIG8mJm51bGwhPT1vP286e307bGV0IGM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGwudHlwZSYmKGM9XCJzdHJpbmdcIj09dHlwZW9mIGwudGFnTmFtZT9sLnRhZ05hbWU6XCJzdHJpbmdcIj09dHlwZW9mIGwubmFtZT9sLm5hbWU6dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLFwibmFtZVwiLHt2YWx1ZTpcIm5vZGUgKFwiK2wudHlwZSsoYz9cIjxcIitjK1wiPlwiOlwiXCIpK1wiKVwifSkpLFM7ZnVuY3Rpb24gUygpe2xldCBsLGMsUyx1PVtdO2lmKCghZXx8cihvLE0sc1tzLmxlbmd0aC0xXXx8bnVsbCkpJiYodT1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOlwibnVtYmVyXCI9PXR5cGVvZiBuP1shMCxuXTpbbl19KGEobyxzKSksITE9PT11WzBdKSlyZXR1cm4gdTtpZihvLmNoaWxkcmVuJiZ1WzBdIT09UW4pZm9yKGM9KGk/by5jaGlsZHJlbi5sZW5ndGg6LTEpK3QsUz1zLmNvbmNhdChvKTtjPi0xJiZjPG8uY2hpbGRyZW4ubGVuZ3RoOyl7aWYobD1uKG8uY2hpbGRyZW5bY10sYyxTKSgpLCExPT09bFswXSlyZXR1cm4gbDtjPVwibnVtYmVyXCI9PXR5cGVvZiBsWzFdP2xbMV06Yyt0fXJldHVybiB1fX0obixudWxsLFtdKSgpfShuLGUsKGZ1bmN0aW9uKG4sZSl7Y29uc3QgaT1lW2UubGVuZ3RoLTFdO3JldHVybiBhKG4saT9pLmNoaWxkcmVuLmluZGV4T2Yobik6bnVsbCxpKX0pLGkpfTt2YXIgbmU9YSg0MzIpO2NvbnN0IGVlPXJlKFtcInVuaXN0XCIsXCJVXCIsXCJVRUZBXCIsXCJVS1wiLFwiVU5cIixcIlVOSENSXCIsXCJVU1wiLFwiVVNCXCIsXCJldWNhbHlwdCpcIixcImV1Y2hhKlwiLFwiZXVjaHIqXCIsXCJldWNsaWQqXCIsXCJldWNyaXRlXCIsXCJldWNyeXBoaWFcIixcImV1Z2VuKlwiLFwiZXVrYXIqXCIsXCJldWxvZypcIixcImV1bmljZVwiLFwiZXVudWNoXCIsXCJldXBoKlwiLFwiZXVyYSpcIixcImV1cmUqXCIsXCJldXJvKlwiLFwiZXVyeSpcIixcImV1dGhhKlwiLFwiZXdlXCIsXCJld2VyXCIsXCJoYWJpdHVhbFwiLFwiaGFsbHVjaW4qXCIsXCJoZXJiKlwiLFwiaGVyZWRpdCpcIixcImhpc3RvcipcIixcImhpbGFyaW91cypcIixcImhvcnJlbmQqXCIsXCJob3JyaWYqXCIsXCJob3RlbCpcIixcIm1zXCIsXCJvbmNlXCIsXCJvbmVcIixcIm9uZS9cIixcIm9uZS0qXCIsXCJvbmVhbm90aGVyXCIsXCJvbmViZXJyeVwiLFwib25lZm9sZCpcIixcIm9uZWhlYXJ0KlwiLFwib25lbmVzcypcIixcIm9uZXNlbGYqXCIsXCJvbmV0aW1lKlwiLFwib25ld2F5XCIsXCJvbmV3aGVyZSpcIixcIm9uZXllYXJcIixcInViaXEqXCIsXCJ1Z2FuZGFuXCIsXCJ1a2FzZVwiLFwidWtyYWluKlwiLFwidWt1bGVsZVwiLFwidWx1bGF0ZWRcIixcInVsdWxhdGlvblwiLFwidW5hbmltKlwiLFwidW5hcnlcIixcInVuZXNjb1wiLFwidW5pYW0qXCIsXCJ1bmlhcnQqXCIsXCJ1bmlhdCpcIixcInVuaWF1cipcIixcInVuaWF4KlwiLFwidW5pYmFzKlwiLFwidW5pYmxlXCIsXCJ1bmljeWNsKlwiLFwidW5pZGlyZWN0KlwiLFwidW5pb24qXCIsXCJ1bml0KlwiLFwidW5pdipcIixcInVuaWYqXCIsXCJ1bmlxKlwiLFwidXJhbipcIixcInVyYXRlXCIsXCJ1cmkqXCIsXCJ1cm9sb2dpc3RcIixcInVydWd1YXlcIixcInVydWd1YXlhblwiLFwidXJ1Z3VheWFuc1wiLFwidXNhYipcIixcInVzYWdlXCIsXCJ1c2UqXCIsXCJ1c2luZ1wiLFwidXN1KlwiLFwidXRhaFwiLFwidXRlbipcIixcInV0ZXIqXCIsXCJ1dGlsKlwiLFwidXRvcCpcIixcInV0cmVjaHRcIixcInV0dG94ZXRlclwiLFwidXZ1bGFcIixcInV2dWxhclwiLFwidXlnaHVyXCJdKSxhZT1yZShbXCJtZGFzdFwiLFwizrFcIixcImZcIixcImZiaVwiLFwiZm1cIixcImZkYVwiLFwibFwiLFwibVwiLFwiblwiLFwibmZsXCIsXCJuYmFcIixcIm5iY1wiLFwibmhsXCIsXCJuZ29cIixcIm5wbVwiLFwibnZpZGlhXCIsXCJzXCIsXCJyXCIsXCJoXCIsXCJoYWJpdHVhbFwiLFwiaGFsbHVjaW4qXCIsXCJoYXV0ZXVyXCIsXCJoZWlyKlwiLFwiaGVyYipcIixcImhlcmVkaXQqXCIsXCJoaWxhcmlvdXMqXCIsXCJoaXN0b3IqXCIsXCJob21hZ2VcIixcImhvbmVzdCpcIixcImhvbm9yKlwiLFwiaG9ub3VyKlwiLFwiaG9ycmVuZCpcIixcImhvcnJpZipcIixcImhvdGVsKlwiLFwiaG91cipcIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhpdlwiLFwibGJ3XCIsXCJsY2RcIixcIm1wZ1wiLFwibXBoXCIsXCJNQkFcIixcIk1BXCIsXCJNUklcIixcIm1zY1wiLFwiTVNcIixcIk1UVlwiLFwiaHRtbFwiLFwiciZkXCIsXCJTR01MXCIsXCJTT1NcIixcIlNNU1wiLFwieFwiLFwiWE1MXCIsXCJ4bWFzXCIsXCJ4LXJheVwiLFwieC1yYXlzXCIsXCJ4Ym94XCIsXCJTVVZcIixcIlNURFwiLFwiU1BGXCIsXCJIQlwiLFwiUkFGXCIsXCJJT1VcIl0pO2Z1bmN0aW9uIGllKCl7cmV0dXJuKG4sZSk9PntfbihuLFwiV29yZE5vZGVcIiwoKG4sYSxpKT0+e2NvbnN0IHI9aSx0PXFuKG4pLG89dC50b0xvd2VyQ2FzZSgpO2lmKFwiYVwiIT09byYmXCJhblwiIT09b3x8IXJ8fG51bGw9PT1hKXJldHVybjtjb25zdCBNPWZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1uLmNoaWxkcmVuO2xldCBpLHI9YVsrK2VdO3JldHVybiByJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1yLnR5cGUmJihyPWFbKytlXSxyJiZcIlB1bmN0dWF0aW9uTm9kZVwiPT09ci50eXBlJiYvXlvigJzigJ3igJjigJknXCIoKVtcXF1dJC8udGVzdChxbihyKSkmJihyPWFbKytlXSksciYmXCJXb3JkTm9kZVwiPT09ci50eXBlJiYoaT1yKSksaX0ocixhKTtpZighTSlyZXR1cm47Y29uc3Qgcz0xIT09dC5sZW5ndGgsbD1xbihNKTtpZihvIT09dCYmIXMmJiFmdW5jdGlvbihuLGUpe2NvbnN0IGE9bi5jaGlsZHJlbjtmb3IoO2UtLTspaWYoXCJXb3JkTm9kZVwiPT09YVtlXS50eXBlKXJldHVybiExO3JldHVybiEwfShyLGEpKXJldHVybjtpZihvPT09dCYmIXMmJi9eKGFuZHxvcnxub3IpJC9pLnRlc3QobCkpcmV0dXJuO2xldCBjPWZ1bmN0aW9uKG4pe2NvbnN0IGU9bi5yZXBsYWNlKC9eXFxkKy8sKG49Pm5lLnRvV29yZHMobikrXCIgXCIpKS5zcGxpdCgvWyfigJkgLV0vLDEpWzBdLGE9ZS50b0xvd2VyQ2FzZSgpO2xldCBpO3JldHVybiBlZShlKSYmKGk9XCJhXCIpLGFlKGUpJiYoaT1cImFcIj09PWk/XCJhLW9yLWFuXCI6XCJhblwiKSxpfHxhIT09ZXx8KGk9L1thZWlvdV0vLnRlc3QoYS5jaGFyQXQoMCkpP1wiYW5cIjpcImFcIiksaX0obCk7KFwiYW5cIj09PWMmJiFzfHxcImFcIj09PWMmJnMpJiYobyE9PXQmJihjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKSksT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoWG4oXCJVc2UgYCVzYCBiZWZvcmUgYCVzYCwgbm90IGAlc2BcIixjLGwsdCksbixcInJldGV4dC1pbmRlZmluaXRlLWFydGljbGU6cmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6W2NdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlI3JlYWRtZVwifSkpfSkpfX1mdW5jdGlvbiByZShuKXtjb25zdCBlPVtdLGE9W10saT1bXTtsZXQgcj0tMTtmb3IoOysrcjxuLmxlbmd0aDspe2NvbnN0IHQ9bltyXTtcIipcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP2UucHVzaChuZXcgUmVnRXhwKFwiXlwiK3Quc2xpY2UoMCwtMSksXCJpXCIpKTp0PT09dC50b0xvd2VyQ2FzZSgpP2kucHVzaCh0KTphLnB1c2godCl9cmV0dXJuIGZ1bmN0aW9uKG4pe2NvbnN0IHI9bi50b0xvd2VyQ2FzZSgpO2lmKGEuaW5jbHVkZXMobil8fGkuaW5jbHVkZXMocikpcmV0dXJuITA7bGV0IHQ9LTE7Zm9yKDsrK3Q8ZS5sZW5ndGg7KWlmKGVbdF0udGVzdChuKSlyZXR1cm4hMDtyZXR1cm4hMX19dmFyIHRlPU1lKFwic3RhcnRcIiksb2U9TWUoXCJlbmRcIik7ZnVuY3Rpb24gTWUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPWUmJmUucG9zaXRpb24mJmUucG9zaXRpb25bbl18fHt9O3JldHVybntsaW5lOmEubGluZXx8bnVsbCxjb2x1bW46YS5jb2x1bW58fG51bGwsb2Zmc2V0OmEub2Zmc2V0Pi0xP2Eub2Zmc2V0Om51bGx9fX1jb25zdCBzZT1cInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiLGxlPW5ldyBTZXQoW1wiaGFkXCIsXCJ0aGF0XCIsXCJjYW5cIixcImJsYWhcIixcImJlZXBcIixcInlhZGRhXCIsXCJzYXBpZW5zXCIsXCJ0c2VcIixcIm1hdVwiXSk7ZnVuY3Rpb24gY2UoKXtyZXR1cm4obixlKT0+e19uKG4sXCJTZW50ZW5jZU5vZGVcIiwobj0+e2xldCBhLGkscj0tMTtmb3IoOysrcjxuLmNoaWxkcmVuLmxlbmd0aDspe2NvbnN0IHQ9bi5jaGlsZHJlbltyXTtpZihcIldvcmROb2RlXCI9PT10LnR5cGUpe2NvbnN0IG89cW4odCk7aT17Y2hpbGQ6dCxpbmRleDpyLHZhbHVlOm99LGEmJmEudmFsdWUudG9Mb3dlckNhc2UoKT09PW8udG9Mb3dlckNhc2UoKSYmIVNlKG8pJiZPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIkV4cGVjdGVkIGBcIitvK1wiYCBvbmNlLCBub3QgdHdpY2VcIix7c3RhcnQ6dGUoYS5jaGlsZCksZW5kOm9lKHQpfSxbc2Usby50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcVysvZyxcIi1cIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnFuKG4uY2hpbGRyZW4uc2xpY2UoYS5pbmRleCxyKzEpKSxleHBlY3RlZDpbb10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZXBlYXRlZC13b3JkcyNyZWFkbWVcIn0pfWVsc2VcIldoaXRlU3BhY2VOb2RlXCI9PT10LnR5cGU/KGE9aSxpPXZvaWQgMCk6KGE9dm9pZCAwLGk9dm9pZCAwKX1yZXR1cm4gUW59KSl9fWZ1bmN0aW9uIFNlKG4pe2lmKGxlLmhhcyhuLnRvTG93ZXJDYXNlKCkpKXJldHVybiEwO2NvbnN0IGU9bi5jaGFyQXQoMCk7aWYoZT09PWUudG9VcHBlckNhc2UoKSl7aWYoMj09PW4ubGVuZ3RoJiZcIi5cIj09PW4uY2hhckF0KDEpKXJldHVybiEwO2NvbnN0IGU9bi5zbGljZSgxKTtpZihlPT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHVlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQmJm4uY2hhcmFjdGVyP24uY2hhcmFjdGVyL24ud29yZCo0LjcxK24ud29yZC9uLnNlbnRlbmNlKi41LTIxLjQzOk51bWJlci5OYU59ZnVuY3Rpb24gZGUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5sZXR0ZXI/bi5sZXR0ZXIvbi53b3JkKjEwMCouMDU4OC1uLnNlbnRlbmNlL24ud29yZCoxMDAqLjI5Ni0xNS44Ok51bWJlci5OYU59dmFyIG1lPVtcImFcIixcImFibGVcIixcImFib2FyZFwiLFwiYWJvdXRcIixcImFib3ZlXCIsXCJhYnNlbnRcIixcImFjY2VwdFwiLFwiYWNjaWRlbnRcIixcImFjY291bnRcIixcImFjaGVcIixcImFjaGluZ1wiLFwiYWNvcm5cIixcImFjcmVcIixcImFjcm9zc1wiLFwiYWN0XCIsXCJhY3RzXCIsXCJhZGRcIixcImFkZHJlc3NcIixcImFkbWlyZVwiLFwiYWR2ZW50dXJlXCIsXCJhZmFyXCIsXCJhZnJhaWRcIixcImFmdGVyXCIsXCJhZnRlcm5vb25cIixcImFmdGVyd2FyZFwiLFwiYWZ0ZXJ3YXJkc1wiLFwiYWdhaW5cIixcImFnYWluc3RcIixcImFnZVwiLFwiYWdlZFwiLFwiYWdvXCIsXCJhZ3JlZVwiLFwiYWhcIixcImFoZWFkXCIsXCJhaWRcIixcImFpbVwiLFwiYWlyXCIsXCJhaXJmaWVsZFwiLFwiYWlycGxhbmVcIixcImFpcnBvcnRcIixcImFpcnNoaXBcIixcImFpcnlcIixcImFsYXJtXCIsXCJhbGlrZVwiLFwiYWxpdmVcIixcImFsbFwiLFwiYWxsZXlcIixcImFsbGlnYXRvclwiLFwiYWxsb3dcIixcImFsbW9zdFwiLFwiYWxvbmVcIixcImFsb25nXCIsXCJhbG91ZFwiLFwiYWxyZWFkeVwiLFwiYWxzb1wiLFwiYWx3YXlzXCIsXCJhbVwiLFwiYW1lcmljYVwiLFwiYW1lcmljYW5cIixcImFtb25nXCIsXCJhbW91bnRcIixcImFuXCIsXCJhbmRcIixcImFuZ2VsXCIsXCJhbmdlclwiLFwiYW5ncnlcIixcImFuaW1hbFwiLFwiYW5vdGhlclwiLFwiYW5zd2VyXCIsXCJhbnRcIixcImFueVwiLFwiYW55Ym9keVwiLFwiYW55aG93XCIsXCJhbnlvbmVcIixcImFueXRoaW5nXCIsXCJhbnl3YXlcIixcImFueXdoZXJlXCIsXCJhcGFydFwiLFwiYXBhcnRtZW50XCIsXCJhcGVcIixcImFwaWVjZVwiLFwiYXBwZWFyXCIsXCJhcHBsZVwiLFwiYXByaWxcIixcImFwcm9uXCIsXCJhcmVcIixcImFyZW4ndFwiLFwiYXJpc2VcIixcImFyaXRobWV0aWNcIixcImFybVwiLFwiYXJtZnVsXCIsXCJhcm15XCIsXCJhcm9zZVwiLFwiYXJvdW5kXCIsXCJhcnJhbmdlXCIsXCJhcnJpdmVcIixcImFycml2ZWRcIixcImFycm93XCIsXCJhcnRcIixcImFydGlzdFwiLFwiYXNcIixcImFzaFwiLFwiYXNoZXNcIixcImFzaWRlXCIsXCJhc2tcIixcImFzbGVlcFwiLFwiYXRcIixcImF0ZVwiLFwiYXR0YWNrXCIsXCJhdHRlbmRcIixcImF0dGVudGlvblwiLFwiYXVndXN0XCIsXCJhdW50XCIsXCJhdXRob3JcIixcImF1dG9cIixcImF1dG9tb2JpbGVcIixcImF1dHVtblwiLFwiYXZlbnVlXCIsXCJhd2FrZVwiLFwiYXdha2VuXCIsXCJhd2F5XCIsXCJhd2Z1bFwiLFwiYXdmdWxseVwiLFwiYXdoaWxlXCIsXCJheFwiLFwiYXhlXCIsXCJiYWFcIixcImJhYmVcIixcImJhYmllc1wiLFwiYmFja1wiLFwiYmFja2dyb3VuZFwiLFwiYmFja3dhcmRcIixcImJhY2t3YXJkc1wiLFwiYmFjb25cIixcImJhZFwiLFwiYmFkZ2VcIixcImJhZGx5XCIsXCJiYWdcIixcImJha2VcIixcImJha2VyXCIsXCJiYWtlcnlcIixcImJha2luZ1wiLFwiYmFsbFwiLFwiYmFsbG9vblwiLFwiYmFuYW5hXCIsXCJiYW5kXCIsXCJiYW5kYWdlXCIsXCJiYW5nXCIsXCJiYW5qb1wiLFwiYmFua1wiLFwiYmFua2VyXCIsXCJiYXJcIixcImJhcmJlclwiLFwiYmFyZVwiLFwiYmFyZWZvb3RcIixcImJhcmVseVwiLFwiYmFya1wiLFwiYmFyblwiLFwiYmFycmVsXCIsXCJiYXNlXCIsXCJiYXNlYmFsbFwiLFwiYmFzZW1lbnRcIixcImJhc2tldFwiLFwiYmF0XCIsXCJiYXRjaFwiLFwiYmF0aFwiLFwiYmF0aGVcIixcImJhdGhpbmdcIixcImJhdGhyb29tXCIsXCJiYXRodHViXCIsXCJiYXR0bGVcIixcImJhdHRsZXNoaXBcIixcImJheVwiLFwiYmVcIixcImJlYWNoXCIsXCJiZWFkXCIsXCJiZWFtXCIsXCJiZWFuXCIsXCJiZWFyXCIsXCJiZWFyZFwiLFwiYmVhc3RcIixcImJlYXRcIixcImJlYXRpbmdcIixcImJlYXV0aWZ1bFwiLFwiYmVhdXRpZnlcIixcImJlYXV0eVwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlY29taW5nXCIsXCJiZWRcIixcImJlZGJ1Z1wiLFwiYmVkcm9vbVwiLFwiYmVkc3ByZWFkXCIsXCJiZWR0aW1lXCIsXCJiZWVcIixcImJlZWNoXCIsXCJiZWVmXCIsXCJiZWVmc3RlYWtcIixcImJlZWhpdmVcIixcImJlZW5cIixcImJlZXJcIixcImJlZXRcIixcImJlZm9yZVwiLFwiYmVnXCIsXCJiZWdhblwiLFwiYmVnZ2FyXCIsXCJiZWdnZWRcIixcImJlZ2luXCIsXCJiZWdpbm5pbmdcIixcImJlZ3VuXCIsXCJiZWhhdmVcIixcImJlaGluZFwiLFwiYmVpbmdcIixcImJlbGlldmVcIixcImJlbGxcIixcImJlbG9uZ1wiLFwiYmVsb3dcIixcImJlbHRcIixcImJlbmNoXCIsXCJiZW5kXCIsXCJiZW5lYXRoXCIsXCJiZW50XCIsXCJiZXJyaWVzXCIsXCJiZXJyeVwiLFwiYmVzaWRlXCIsXCJiZXNpZGVzXCIsXCJiZXN0XCIsXCJiZXRcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmliXCIsXCJiaWJsZVwiLFwiYmljeWNsZVwiLFwiYmlkXCIsXCJiaWdcIixcImJpZ2dlclwiLFwiYmlsbFwiLFwiYmlsbGJvYXJkXCIsXCJiaW5cIixcImJpbmRcIixcImJpcmRcIixcImJpcnRoXCIsXCJiaXJ0aGRheVwiLFwiYmlzY3VpdFwiLFwiYml0XCIsXCJiaXRlXCIsXCJiaXRpbmdcIixcImJpdHRlclwiLFwiYmxhY2tcIixcImJsYWNrYmVycnlcIixcImJsYWNrYmlyZFwiLFwiYmxhY2tib2FyZFwiLFwiYmxhY2tuZXNzXCIsXCJibGFja3NtaXRoXCIsXCJibGFtZVwiLFwiYmxhbmtcIixcImJsYW5rZXRcIixcImJsYXN0XCIsXCJibGF6ZVwiLFwiYmxlZWRcIixcImJsZXNzXCIsXCJibGVzc2luZ1wiLFwiYmxld1wiLFwiYmxpbmRcIixcImJsaW5kZm9sZFwiLFwiYmxpbmRzXCIsXCJibG9ja1wiLFwiYmxvb2RcIixcImJsb29tXCIsXCJibG9zc29tXCIsXCJibG90XCIsXCJibG93XCIsXCJibHVlXCIsXCJibHVlYmVycnlcIixcImJsdWViaXJkXCIsXCJibHVzaFwiLFwiYm9hcmRcIixcImJvYXN0XCIsXCJib2F0XCIsXCJib2JcIixcImJvYndoaXRlXCIsXCJib2RpZXNcIixcImJvZHlcIixcImJvaWxcIixcImJvaWxlclwiLFwiYm9sZFwiLFwiYm9uZVwiLFwiYm9ubmV0XCIsXCJib29cIixcImJvb2tcIixcImJvb2tjYXNlXCIsXCJib29ra2VlcGVyXCIsXCJib29tXCIsXCJib290XCIsXCJib3JuXCIsXCJib3Jyb3dcIixcImJvc3NcIixcImJvdGhcIixcImJvdGhlclwiLFwiYm90dGxlXCIsXCJib3R0b21cIixcImJvdWdodFwiLFwiYm91bmNlXCIsXCJib3dcIixcImJvdy13b3dcIixcImJvd2xcIixcImJveFwiLFwiYm94Y2FyXCIsXCJib3hlclwiLFwiYm94ZXNcIixcImJveVwiLFwiYm95aG9vZFwiLFwiYnJhY2VsZXRcIixcImJyYWluXCIsXCJicmFrZVwiLFwiYnJhblwiLFwiYnJhbmNoXCIsXCJicmFzc1wiLFwiYnJhdmVcIixcImJyZWFkXCIsXCJicmVha1wiLFwiYnJlYWtmYXN0XCIsXCJicmVhc3RcIixcImJyZWF0aFwiLFwiYnJlYXRoZVwiLFwiYnJlZXplXCIsXCJicmlja1wiLFwiYnJpZGVcIixcImJyaWRnZVwiLFwiYnJpZ2h0XCIsXCJicmlnaHRuZXNzXCIsXCJicmluZ1wiLFwiYnJvYWRcIixcImJyb2FkY2FzdFwiLFwiYnJva2VcIixcImJyb2tlblwiLFwiYnJvb2tcIixcImJyb29tXCIsXCJicm90aGVyXCIsXCJicm91Z2h0XCIsXCJicm93blwiLFwiYnJ1c2hcIixcImJ1YmJsZVwiLFwiYnVja2V0XCIsXCJidWNrbGVcIixcImJ1ZFwiLFwiYnVmZmFsb1wiLFwiYnVnXCIsXCJidWdneVwiLFwiYnVpbGRcIixcImJ1aWxkaW5nXCIsXCJidWlsdFwiLFwiYnVsYlwiLFwiYnVsbFwiLFwiYnVsbGV0XCIsXCJidW1cIixcImJ1bWJsZWJlZVwiLFwiYnVtcFwiLFwiYnVuXCIsXCJidW5jaFwiLFwiYnVuZGxlXCIsXCJidW5ueVwiLFwiYnVyblwiLFwiYnVyc3RcIixcImJ1cnlcIixcImJ1c1wiLFwiYnVzaFwiLFwiYnVzaGVsXCIsXCJidXNpbmVzc1wiLFwiYnVzeVwiLFwiYnV0XCIsXCJidXRjaGVyXCIsXCJidXR0XCIsXCJidXR0ZXJcIixcImJ1dHRlcmN1cFwiLFwiYnV0dGVyZmx5XCIsXCJidXR0ZXJtaWxrXCIsXCJidXR0ZXJzY290Y2hcIixcImJ1dHRvblwiLFwiYnV0dG9uaG9sZVwiLFwiYnV5XCIsXCJidXp6XCIsXCJieVwiLFwiYnllXCIsXCJjYWJcIixcImNhYmJhZ2VcIixcImNhYmluXCIsXCJjYWJpbmV0XCIsXCJjYWNrbGVcIixcImNhZ2VcIixcImNha2VcIixcImNhbGVuZGFyXCIsXCJjYWxmXCIsXCJjYWxsXCIsXCJjYWxsZXJcIixcImNhbGxpbmdcIixcImNhbWVcIixcImNhbWVsXCIsXCJjYW1wXCIsXCJjYW1wZmlyZVwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2FuYWxcIixcImNhbmFyeVwiLFwiY2FuZGxlXCIsXCJjYW5kbGVzdGlja1wiLFwiY2FuZHlcIixcImNhbmVcIixcImNhbm5vblwiLFwiY2Fubm90XCIsXCJjYW5vZVwiLFwiY2FueW9uXCIsXCJjYXBcIixcImNhcGVcIixcImNhcGl0YWxcIixcImNhcHRhaW5cIixcImNhclwiLFwiY2FyZFwiLFwiY2FyZGJvYXJkXCIsXCJjYXJlXCIsXCJjYXJlZnVsXCIsXCJjYXJlbGVzc1wiLFwiY2FyZWxlc3NuZXNzXCIsXCJjYXJsb2FkXCIsXCJjYXJwZW50ZXJcIixcImNhcnBldFwiLFwiY2FycmlhZ2VcIixcImNhcnJvdFwiLFwiY2FycnlcIixcImNhcnRcIixcImNhcnZlXCIsXCJjYXNlXCIsXCJjYXNoXCIsXCJjYXNoaWVyXCIsXCJjYXN0bGVcIixcImNhdFwiLFwiY2F0YmlyZFwiLFwiY2F0Y2hcIixcImNhdGNoZXJcIixcImNhdGVycGlsbGFyXCIsXCJjYXRmaXNoXCIsXCJjYXRzdXBcIixcImNhdHRsZVwiLFwiY2F1Z2h0XCIsXCJjYXVzZVwiLFwiY2F2ZVwiLFwiY2VpbGluZ1wiLFwiY2VsbFwiLFwiY2VsbGFyXCIsXCJjZW50XCIsXCJjZW50ZXJcIixcImNlcmVhbFwiLFwiY2VydGFpblwiLFwiY2VydGFpbmx5XCIsXCJjaGFpblwiLFwiY2hhaXJcIixcImNoYWxrXCIsXCJjaGFtcGlvblwiLFwiY2hhbmNlXCIsXCJjaGFuZ2VcIixcImNoYXBcIixcImNoYXJnZVwiLFwiY2hhcm1cIixcImNoYXJ0XCIsXCJjaGFzZVwiLFwiY2hhdHRlclwiLFwiY2hlYXBcIixcImNoZWF0XCIsXCJjaGVja1wiLFwiY2hlY2tlcnNcIixcImNoZWVrXCIsXCJjaGVlclwiLFwiY2hlZXNlXCIsXCJjaGVycnlcIixcImNoZXN0XCIsXCJjaGV3XCIsXCJjaGlja1wiLFwiY2hpY2tlblwiLFwiY2hpZWZcIixcImNoaWxkXCIsXCJjaGlsZGhvb2RcIixcImNoaWxkcmVuXCIsXCJjaGlsbFwiLFwiY2hpbGx5XCIsXCJjaGltbmV5XCIsXCJjaGluXCIsXCJjaGluYVwiLFwiY2hpcFwiLFwiY2hpcG11bmtcIixcImNob2NvbGF0ZVwiLFwiY2hvaWNlXCIsXCJjaG9vc2VcIixcImNob3BcIixcImNob3J1c1wiLFwiY2hvc2VcIixcImNob3NlblwiLFwiY2hyaXN0ZW5cIixcImNocmlzdG1hc1wiLFwiY2h1cmNoXCIsXCJjaHVyblwiLFwiY2lnYXJldHRlXCIsXCJjaXJjbGVcIixcImNpcmN1c1wiLFwiY2l0aXplblwiLFwiY2l0eVwiLFwiY2xhbmdcIixcImNsYXBcIixcImNsYXNzXCIsXCJjbGFzc21hdGVcIixcImNsYXNzcm9vbVwiLFwiY2xhd1wiLFwiY2xheVwiLFwiY2xlYW5cIixcImNsZWFuZXJcIixcImNsZWFyXCIsXCJjbGVya1wiLFwiY2xldmVyXCIsXCJjbGlja1wiLFwiY2xpZmZcIixcImNsaW1iXCIsXCJjbGlwXCIsXCJjbG9ha1wiLFwiY2xvY2tcIixcImNsb3NlXCIsXCJjbG9zZXRcIixcImNsb3RoXCIsXCJjbG90aGVzXCIsXCJjbG90aGluZ1wiLFwiY2xvdWRcIixcImNsb3VkeVwiLFwiY2xvdmVyXCIsXCJjbG93blwiLFwiY2x1YlwiLFwiY2x1Y2tcIixcImNsdW1wXCIsXCJjb2FjaFwiLFwiY29hbFwiLFwiY29hc3RcIixcImNvYXRcIixcImNvYlwiLFwiY29iYmxlclwiLFwiY29jb2FcIixcImNvY29udXRcIixcImNvY29vblwiLFwiY29kXCIsXCJjb2RmaXNoXCIsXCJjb2ZmZWVcIixcImNvZmZlZXBvdFwiLFwiY29pblwiLFwiY29sZFwiLFwiY29sbGFyXCIsXCJjb2xsZWdlXCIsXCJjb2xvclwiLFwiY29sb3JlZFwiLFwiY29sdFwiLFwiY29sdW1uXCIsXCJjb21iXCIsXCJjb21lXCIsXCJjb21mb3J0XCIsXCJjb21pY1wiLFwiY29taW5nXCIsXCJjb21wYW55XCIsXCJjb21wYXJlXCIsXCJjb25kdWN0b3JcIixcImNvbmVcIixcImNvbm5lY3RcIixcImNvb1wiLFwiY29va1wiLFwiY29va2VkXCIsXCJjb29raWVcIixcImNvb2tpZXNcIixcImNvb2tpbmdcIixcImNvb2xcIixcImNvb2xlclwiLFwiY29vcFwiLFwiY29wcGVyXCIsXCJjb3B5XCIsXCJjb3JkXCIsXCJjb3JrXCIsXCJjb3JuXCIsXCJjb3JuZXJcIixcImNvcnJlY3RcIixcImNvc3RcIixcImNvdFwiLFwiY290dGFnZVwiLFwiY290dG9uXCIsXCJjb3VjaFwiLFwiY291Z2hcIixcImNvdWxkXCIsXCJjb3VsZG4ndFwiLFwiY291bnRcIixcImNvdW50ZXJcIixcImNvdW50cnlcIixcImNvdW50eVwiLFwiY291cnNlXCIsXCJjb3VydFwiLFwiY291c2luXCIsXCJjb3ZlclwiLFwiY293XCIsXCJjb3dhcmRcIixcImNvd2FyZGx5XCIsXCJjb3dib3lcIixcImNvenlcIixcImNyYWJcIixcImNyYWNrXCIsXCJjcmFja2VyXCIsXCJjcmFkbGVcIixcImNyYW1wc1wiLFwiY3JhbmJlcnJ5XCIsXCJjcmFua1wiLFwiY3Jhbmt5XCIsXCJjcmFzaFwiLFwiY3Jhd2xcIixcImNyYXp5XCIsXCJjcmVhbVwiLFwiY3JlYW15XCIsXCJjcmVla1wiLFwiY3JlZXBcIixcImNyZXB0XCIsXCJjcmllZFwiLFwiY3JpZXNcIixcImNyb2FrXCIsXCJjcm9va1wiLFwiY3Jvb2tlZFwiLFwiY3JvcFwiLFwiY3Jvc3NcIixcImNyb3NzLWV5ZWRcIixcImNyb3NzaW5nXCIsXCJjcm93XCIsXCJjcm93ZFwiLFwiY3Jvd2RlZFwiLFwiY3Jvd25cIixcImNydWVsXCIsXCJjcnVtYlwiLFwiY3J1bWJsZVwiLFwiY3J1c2hcIixcImNydXN0XCIsXCJjcnlcIixcImN1YlwiLFwiY3VmZlwiLFwiY3VwXCIsXCJjdXBib2FyZFwiLFwiY3VwZnVsXCIsXCJjdXJlXCIsXCJjdXJsXCIsXCJjdXJseVwiLFwiY3VydGFpblwiLFwiY3VydmVcIixcImN1c2hpb25cIixcImN1c3RhcmRcIixcImN1c3RvbWVyXCIsXCJjdXRcIixcImN1dGVcIixcImN1dHRpbmdcIixcImRhYlwiLFwiZGFkXCIsXCJkYWRkeVwiLFwiZGFpbHlcIixcImRhaXJ5XCIsXCJkYWlzeVwiLFwiZGFtXCIsXCJkYW1hZ2VcIixcImRhbWVcIixcImRhbXBcIixcImRhbmNlXCIsXCJkYW5jZXJcIixcImRhbmNpbmdcIixcImRhbmR5XCIsXCJkYW5nZXJcIixcImRhbmdlcm91c1wiLFwiZGFyZVwiLFwiZGFya1wiLFwiZGFya25lc3NcIixcImRhcmxpbmdcIixcImRhcm5cIixcImRhcnRcIixcImRhc2hcIixcImRhdGVcIixcImRhdWdodGVyXCIsXCJkYXduXCIsXCJkYXlcIixcImRheWJyZWFrXCIsXCJkYXl0aW1lXCIsXCJkZWFkXCIsXCJkZWFmXCIsXCJkZWFsXCIsXCJkZWFyXCIsXCJkZWF0aFwiLFwiZGVjZW1iZXJcIixcImRlY2lkZVwiLFwiZGVja1wiLFwiZGVlZFwiLFwiZGVlcFwiLFwiZGVlclwiLFwiZGVmZWF0XCIsXCJkZWZlbmRcIixcImRlZmVuc2VcIixcImRlbGlnaHRcIixcImRlblwiLFwiZGVudGlzdFwiLFwiZGVwZW5kXCIsXCJkZXBvc2l0XCIsXCJkZXNjcmliZVwiLFwiZGVzZXJ0XCIsXCJkZXNlcnZlXCIsXCJkZXNpcmVcIixcImRlc2tcIixcImRlc3Ryb3lcIixcImRldmlsXCIsXCJkZXdcIixcImRpYW1vbmRcIixcImRpZFwiLFwiZGlkbid0XCIsXCJkaWVcIixcImRpZWRcIixcImRpZXNcIixcImRpZmZlcmVuY2VcIixcImRpZmZlcmVudFwiLFwiZGlnXCIsXCJkaW1cIixcImRpbWVcIixcImRpbmVcIixcImRpbmctZG9uZ1wiLFwiZGlubmVyXCIsXCJkaXBcIixcImRpcmVjdFwiLFwiZGlyZWN0aW9uXCIsXCJkaXJ0XCIsXCJkaXJ0eVwiLFwiZGlzY292ZXJcIixcImRpc2hcIixcImRpc2xpa2VcIixcImRpc21pc3NcIixcImRpdGNoXCIsXCJkaXZlXCIsXCJkaXZlclwiLFwiZGl2aWRlXCIsXCJkb1wiLFwiZG9ja1wiLFwiZG9jdG9yXCIsXCJkb2VzXCIsXCJkb2Vzbid0XCIsXCJkb2dcIixcImRvbGxcIixcImRvbGxhclwiLFwiZG9sbHlcIixcImRvbid0XCIsXCJkb25lXCIsXCJkb25rZXlcIixcImRvb3JcIixcImRvb3JiZWxsXCIsXCJkb29ya25vYlwiLFwiZG9vcnN0ZXBcIixcImRvcGVcIixcImRvdFwiLFwiZG91YmxlXCIsXCJkb3VnaFwiLFwiZG92ZVwiLFwiZG93blwiLFwiZG93bnN0YWlyc1wiLFwiZG93bnRvd25cIixcImRvemVuXCIsXCJkcmFnXCIsXCJkcmFpblwiLFwiZHJhbmtcIixcImRyYXdcIixcImRyYXdlclwiLFwiZHJhd2luZ1wiLFwiZHJlYW1cIixcImRyZXNzXCIsXCJkcmVzc2VyXCIsXCJkcmVzc21ha2VyXCIsXCJkcmV3XCIsXCJkcmllZFwiLFwiZHJpZnRcIixcImRyaWxsXCIsXCJkcmlua1wiLFwiZHJpcFwiLFwiZHJpdmVcIixcImRyaXZlblwiLFwiZHJpdmVyXCIsXCJkcm9wXCIsXCJkcm92ZVwiLFwiZHJvd25cIixcImRyb3dzeVwiLFwiZHJ1YlwiLFwiZHJ1bVwiLFwiZHJ1bmtcIixcImRyeVwiLFwiZHVja1wiLFwiZHVlXCIsXCJkdWdcIixcImR1bGxcIixcImR1bWJcIixcImR1bXBcIixcImR1cmluZ1wiLFwiZHVzdFwiLFwiZHVzdHlcIixcImR1dHlcIixcImR3YXJmXCIsXCJkd2VsbFwiLFwiZHdlbHRcIixcImR5aW5nXCIsXCJlYWNoXCIsXCJlYWdlclwiLFwiZWFnbGVcIixcImVhclwiLFwiZWFybHlcIixcImVhcm5cIixcImVhcnRoXCIsXCJlYXN0XCIsXCJlYXN0ZXJuXCIsXCJlYXN5XCIsXCJlYXRcIixcImVhdGVuXCIsXCJlZGdlXCIsXCJlZ2dcIixcImVoXCIsXCJlaWdodFwiLFwiZWlnaHRlZW5cIixcImVpZ2h0aFwiLFwiZWlnaHR5XCIsXCJlaXRoZXJcIixcImVsYm93XCIsXCJlbGRlclwiLFwiZWxkZXN0XCIsXCJlbGVjdHJpY1wiLFwiZWxlY3RyaWNpdHlcIixcImVsZXBoYW50XCIsXCJlbGV2ZW5cIixcImVsZlwiLFwiZWxtXCIsXCJlbHNlXCIsXCJlbHNld2hlcmVcIixcImVtcHR5XCIsXCJlbmRcIixcImVuZGluZ1wiLFwiZW5lbXlcIixcImVuZ2luZVwiLFwiZW5naW5lZXJcIixcImVuZ2xpc2hcIixcImVuam95XCIsXCJlbm91Z2hcIixcImVudGVyXCIsXCJlbnZlbG9wZVwiLFwiZXF1YWxcIixcImVyYXNlXCIsXCJlcmFzZXJcIixcImVycmFuZFwiLFwiZXNjYXBlXCIsXCJldmVcIixcImV2ZW5cIixcImV2ZW5pbmdcIixcImV2ZXJcIixcImV2ZXJ5XCIsXCJldmVyeWJvZHlcIixcImV2ZXJ5ZGF5XCIsXCJldmVyeW9uZVwiLFwiZXZlcnl0aGluZ1wiLFwiZXZlcnl3aGVyZVwiLFwiZXZpbFwiLFwiZXhhY3RcIixcImV4Y2VwdFwiLFwiZXhjaGFuZ2VcIixcImV4Y2l0ZWRcIixcImV4Y2l0aW5nXCIsXCJleGN1c2VcIixcImV4aXRcIixcImV4cGVjdFwiLFwiZXhwbGFpblwiLFwiZXh0cmFcIixcImV5ZVwiLFwiZXllYnJvd1wiLFwiZmFibGVcIixcImZhY2VcIixcImZhY2luZ1wiLFwiZmFjdFwiLFwiZmFjdG9yeVwiLFwiZmFpbFwiLFwiZmFpbnRcIixcImZhaXJcIixcImZhaXJ5XCIsXCJmYWl0aFwiLFwiZmFrZVwiLFwiZmFsbFwiLFwiZmFsc2VcIixcImZhbWlseVwiLFwiZmFuXCIsXCJmYW5jeVwiLFwiZmFyXCIsXCJmYXItb2ZmXCIsXCJmYXJhd2F5XCIsXCJmYXJlXCIsXCJmYXJtXCIsXCJmYXJtZXJcIixcImZhcm1pbmdcIixcImZhcnRoZXJcIixcImZhc2hpb25cIixcImZhc3RcIixcImZhc3RlblwiLFwiZmF0XCIsXCJmYXRoZXJcIixcImZhdWx0XCIsXCJmYXZvclwiLFwiZmF2b3JpdGVcIixcImZlYXJcIixcImZlYXN0XCIsXCJmZWF0aGVyXCIsXCJmZWJydWFyeVwiLFwiZmVkXCIsXCJmZWVkXCIsXCJmZWVsXCIsXCJmZWV0XCIsXCJmZWxsXCIsXCJmZWxsb3dcIixcImZlbHRcIixcImZlbmNlXCIsXCJmZXZlclwiLFwiZmV3XCIsXCJmaWJcIixcImZpZGRsZVwiLFwiZmllbGRcIixcImZpZmVcIixcImZpZnRlZW5cIixcImZpZnRoXCIsXCJmaWZ0eVwiLFwiZmlnXCIsXCJmaWdodFwiLFwiZmlndXJlXCIsXCJmaWxlXCIsXCJmaWxsXCIsXCJmaWxtXCIsXCJmaW5hbGx5XCIsXCJmaW5kXCIsXCJmaW5lXCIsXCJmaW5nZXJcIixcImZpbmlzaFwiLFwiZmlyZVwiLFwiZmlyZWFybVwiLFwiZmlyZWNyYWNrZXJcIixcImZpcmVwbGFjZVwiLFwiZmlyZXdvcmtzXCIsXCJmaXJpbmdcIixcImZpcnN0XCIsXCJmaXNoXCIsXCJmaXNoZXJtYW5cIixcImZpc3RcIixcImZpdFwiLFwiZml0c1wiLFwiZml2ZVwiLFwiZml4XCIsXCJmbGFnXCIsXCJmbGFrZVwiLFwiZmxhbWVcIixcImZsYXBcIixcImZsYXNoXCIsXCJmbGFzaGxpZ2h0XCIsXCJmbGF0XCIsXCJmbGVhXCIsXCJmbGVzaFwiLFwiZmxld1wiLFwiZmxpZXNcIixcImZsaWdodFwiLFwiZmxpcFwiLFwiZmxpcC1mbG9wXCIsXCJmbG9hdFwiLFwiZmxvY2tcIixcImZsb29kXCIsXCJmbG9vclwiLFwiZmxvcFwiLFwiZmxvdXJcIixcImZsb3dcIixcImZsb3dlclwiLFwiZmxvd2VyeVwiLFwiZmx1dHRlclwiLFwiZmx5XCIsXCJmb2FtXCIsXCJmb2dcIixcImZvZ2d5XCIsXCJmb2xkXCIsXCJmb2xrc1wiLFwiZm9sbG93XCIsXCJmb2xsb3dpbmdcIixcImZvbmRcIixcImZvb2RcIixcImZvb2xcIixcImZvb2xpc2hcIixcImZvb3RcIixcImZvb3RiYWxsXCIsXCJmb290cHJpbnRcIixcImZvclwiLFwiZm9yZWhlYWRcIixcImZvcmVzdFwiLFwiZm9yZ2V0XCIsXCJmb3JnaXZlXCIsXCJmb3Jnb3RcIixcImZvcmdvdHRlblwiLFwiZm9ya1wiLFwiZm9ybVwiLFwiZm9ydFwiLFwiZm9ydGhcIixcImZvcnR1bmVcIixcImZvcnR5XCIsXCJmb3J3YXJkXCIsXCJmb3VnaHRcIixcImZvdW5kXCIsXCJmb3VudGFpblwiLFwiZm91clwiLFwiZm91cnRlZW5cIixcImZvdXJ0aFwiLFwiZm94XCIsXCJmcmFtZVwiLFwiZnJlZVwiLFwiZnJlZWRvbVwiLFwiZnJlZXplXCIsXCJmcmVpZ2h0XCIsXCJmcmVuY2hcIixcImZyZXNoXCIsXCJmcmV0XCIsXCJmcmlkYXlcIixcImZyaWVkXCIsXCJmcmllbmRcIixcImZyaWVuZGx5XCIsXCJmcmllbmRzaGlwXCIsXCJmcmlnaHRlblwiLFwiZnJvZ1wiLFwiZnJvbVwiLFwiZnJvbnRcIixcImZyb3N0XCIsXCJmcm93blwiLFwiZnJvemVcIixcImZydWl0XCIsXCJmcnlcIixcImZ1ZGdlXCIsXCJmdWVsXCIsXCJmdWxsXCIsXCJmdWxseVwiLFwiZnVuXCIsXCJmdW5ueVwiLFwiZnVyXCIsXCJmdXJuaXR1cmVcIixcImZ1cnRoZXJcIixcImZ1enp5XCIsXCJnYWluXCIsXCJnYWxsb25cIixcImdhbGxvcFwiLFwiZ2FtZVwiLFwiZ2FuZ1wiLFwiZ2FyYWdlXCIsXCJnYXJiYWdlXCIsXCJnYXJkZW5cIixcImdhc1wiLFwiZ2Fzb2xpbmVcIixcImdhdGVcIixcImdhdGhlclwiLFwiZ2F2ZVwiLFwiZ2F5XCIsXCJnZWFyXCIsXCJnZWVzZVwiLFwiZ2VuZXJhbFwiLFwiZ2VudGxlXCIsXCJnZW50bGVtYW5cIixcImdlbnRsZW1lblwiLFwiZ2VvZ3JhcGh5XCIsXCJnZXRcIixcImdldHRpbmdcIixcImdpYW50XCIsXCJnaWZ0XCIsXCJnaW5nZXJicmVhZFwiLFwiZ2lybFwiLFwiZ2l2ZVwiLFwiZ2l2ZW5cIixcImdpdmluZ1wiLFwiZ2xhZFwiLFwiZ2xhZGx5XCIsXCJnbGFuY2VcIixcImdsYXNzXCIsXCJnbGFzc2VzXCIsXCJnbGVhbVwiLFwiZ2xpZGVcIixcImdsb3J5XCIsXCJnbG92ZVwiLFwiZ2xvd1wiLFwiZ2x1ZVwiLFwiZ29cIixcImdvYWxcIixcImdvYXRcIixcImdvYmJsZVwiLFwiZ29kXCIsXCJnb2Rtb3RoZXJcIixcImdvZXNcIixcImdvaW5nXCIsXCJnb2xkXCIsXCJnb2xkZW5cIixcImdvbGRmaXNoXCIsXCJnb2xmXCIsXCJnb25lXCIsXCJnb29kXCIsXCJnb29kLWJ5XCIsXCJnb29kLWJ5ZVwiLFwiZ29vZC1sb29raW5nXCIsXCJnb29kYnllXCIsXCJnb29kbmVzc1wiLFwiZ29vZHNcIixcImdvb2R5XCIsXCJnb29zZVwiLFwiZ29vc2ViZXJyeVwiLFwiZ290XCIsXCJnb3Zlcm5cIixcImdvdmVybm1lbnRcIixcImdvd25cIixcImdyYWJcIixcImdyYWNpb3VzXCIsXCJncmFkZVwiLFwiZ3JhaW5cIixcImdyYW5kXCIsXCJncmFuZGNoaWxkXCIsXCJncmFuZGNoaWxkcmVuXCIsXCJncmFuZGRhdWdodGVyXCIsXCJncmFuZGZhdGhlclwiLFwiZ3JhbmRtYVwiLFwiZ3JhbmRtb3RoZXJcIixcImdyYW5kcGFcIixcImdyYW5kc29uXCIsXCJncmFuZHN0YW5kXCIsXCJncmFwZVwiLFwiZ3JhcGVmcnVpdFwiLFwiZ3JhcGVzXCIsXCJncmFzc1wiLFwiZ3Jhc3Nob3BwZXJcIixcImdyYXRlZnVsXCIsXCJncmF2ZVwiLFwiZ3JhdmVsXCIsXCJncmF2ZXlhcmRcIixcImdyYXZ5XCIsXCJncmF5XCIsXCJncmF6ZVwiLFwiZ3JlYXNlXCIsXCJncmVhdFwiLFwiZ3JlZW5cIixcImdyZWV0XCIsXCJncmV3XCIsXCJncmluZFwiLFwiZ3JvYW5cIixcImdyb2NlcnlcIixcImdyb3VuZFwiLFwiZ3JvdXBcIixcImdyb3ZlXCIsXCJncm93XCIsXCJndWFyZFwiLFwiZ3Vlc3NcIixcImd1ZXN0XCIsXCJndWlkZVwiLFwiZ3VsZlwiLFwiZ3VtXCIsXCJndW5cIixcImd1bnBvd2RlclwiLFwiZ3V5XCIsXCJoYVwiLFwiaGFiaXRcIixcImhhZFwiLFwiaGFkbid0XCIsXCJoYWlsXCIsXCJoYWlyXCIsXCJoYWlyY3V0XCIsXCJoYWlycGluXCIsXCJoYWxmXCIsXCJoYWxsXCIsXCJoYWx0XCIsXCJoYW1cIixcImhhbW1lclwiLFwiaGFuZFwiLFwiaGFuZGZ1bFwiLFwiaGFuZGtlcmNoaWVmXCIsXCJoYW5kbGVcIixcImhhbmR3cml0aW5nXCIsXCJoYW5nXCIsXCJoYXBwZW5cIixcImhhcHBpbHlcIixcImhhcHBpbmVzc1wiLFwiaGFwcHlcIixcImhhcmJvclwiLFwiaGFyZFwiLFwiaGFyZGx5XCIsXCJoYXJkc2hpcFwiLFwiaGFyZHdhcmVcIixcImhhcmVcIixcImhhcmtcIixcImhhcm1cIixcImhhcm5lc3NcIixcImhhcnBcIixcImhhcnZlc3RcIixcImhhc1wiLFwiaGFzbid0XCIsXCJoYXN0ZVwiLFwiaGFzdGVuXCIsXCJoYXN0eVwiLFwiaGF0XCIsXCJoYXRjaFwiLFwiaGF0Y2hldFwiLFwiaGF0ZVwiLFwiaGF1bFwiLFwiaGF2ZVwiLFwiaGF2ZW4ndFwiLFwiaGF2aW5nXCIsXCJoYXdrXCIsXCJoYXlcIixcImhheWZpZWxkXCIsXCJoYXlzdGFja1wiLFwiaGVcIixcImhlJ2RcIixcImhlJ2xsXCIsXCJoZSdzXCIsXCJoZWFkXCIsXCJoZWFkYWNoZVwiLFwiaGVhbFwiLFwiaGVhbHRoXCIsXCJoZWFsdGh5XCIsXCJoZWFwXCIsXCJoZWFyXCIsXCJoZWFyZFwiLFwiaGVhcmluZ1wiLFwiaGVhcnRcIixcImhlYXRcIixcImhlYXRlclwiLFwiaGVhdmVuXCIsXCJoZWF2eVwiLFwiaGVlbFwiLFwiaGVpZ2h0XCIsXCJoZWxkXCIsXCJoZWxsXCIsXCJoZWxsb1wiLFwiaGVsbWV0XCIsXCJoZWxwXCIsXCJoZWxwZXJcIixcImhlbHBmdWxcIixcImhlbVwiLFwiaGVuXCIsXCJoZW5ob3VzZVwiLFwiaGVyXCIsXCJoZXJkXCIsXCJoZXJlXCIsXCJoZXJlJ3NcIixcImhlcm9cIixcImhlcnNcIixcImhlcnNlbGZcIixcImhleVwiLFwiaGlja29yeVwiLFwiaGlkXCIsXCJoaWRkZW5cIixcImhpZGVcIixcImhpZ2hcIixcImhpZ2h3YXlcIixcImhpbGxcIixcImhpbGxzaWRlXCIsXCJoaWxsdG9wXCIsXCJoaWxseVwiLFwiaGltXCIsXCJoaW1zZWxmXCIsXCJoaW5kXCIsXCJoaW50XCIsXCJoaXBcIixcImhpcmVcIixcImhpc1wiLFwiaGlzc1wiLFwiaGlzdG9yeVwiLFwiaGl0XCIsXCJoaXRjaFwiLFwiaGl2ZVwiLFwiaG9cIixcImhvZVwiLFwiaG9nXCIsXCJob2xkXCIsXCJob2xkZXJcIixcImhvbGVcIixcImhvbGlkYXlcIixcImhvbGxvd1wiLFwiaG9seVwiLFwiaG9tZVwiLFwiaG9tZWx5XCIsXCJob21lc2lja1wiLFwiaG9uZXN0XCIsXCJob25leVwiLFwiaG9uZXliZWVcIixcImhvbmV5bW9vblwiLFwiaG9ua1wiLFwiaG9ub3JcIixcImhvb2RcIixcImhvb2ZcIixcImhvb2tcIixcImhvb3BcIixcImhvcFwiLFwiaG9wZVwiLFwiaG9wZWZ1bFwiLFwiaG9wZWxlc3NcIixcImhvcm5cIixcImhvcnNlXCIsXCJob3JzZWJhY2tcIixcImhvcnNlc2hvZVwiLFwiaG9zZVwiLFwiaG9zcGl0YWxcIixcImhvc3RcIixcImhvdFwiLFwiaG90ZWxcIixcImhvdW5kXCIsXCJob3VyXCIsXCJob3VzZVwiLFwiaG91c2V0b3BcIixcImhvdXNld2lmZVwiLFwiaG91c2V3b3JrXCIsXCJob3dcIixcImhvd2V2ZXJcIixcImhvd2xcIixcImh1Z1wiLFwiaHVnZVwiLFwiaHVtXCIsXCJodW1ibGVcIixcImh1bXBcIixcImh1bmRyZWRcIixcImh1bmdcIixcImh1bmdlclwiLFwiaHVuZ3J5XCIsXCJodW5rXCIsXCJodW50XCIsXCJodW50ZXJcIixcImh1cnJhaFwiLFwiaHVycmllZFwiLFwiaHVycnlcIixcImh1cnRcIixcImh1c2JhbmRcIixcImh1c2hcIixcImh1dFwiLFwiaHltblwiLFwiaVwiLFwiaSdkXCIsXCJpJ2xsXCIsXCJpJ21cIixcImkndmVcIixcImljZVwiLFwiaWN5XCIsXCJpZGVhXCIsXCJpZGVhbFwiLFwiaWZcIixcImlsbFwiLFwiaW1wb3J0YW50XCIsXCJpbXBvc3NpYmxlXCIsXCJpbXByb3ZlXCIsXCJpblwiLFwiaW5jaFwiLFwiaW5jaGVzXCIsXCJpbmNvbWVcIixcImluZGVlZFwiLFwiaW5kaWFuXCIsXCJpbmRvb3JzXCIsXCJpbmtcIixcImlublwiLFwiaW5zZWN0XCIsXCJpbnNpZGVcIixcImluc3RhbnRcIixcImluc3RlYWRcIixcImluc3VsdFwiLFwiaW50ZW5kXCIsXCJpbnRlcmVzdGVkXCIsXCJpbnRlcmVzdGluZ1wiLFwiaW50b1wiLFwiaW52aXRlXCIsXCJpcm9uXCIsXCJpc1wiLFwiaXNsYW5kXCIsXCJpc24ndFwiLFwiaXRcIixcIml0J3NcIixcIml0c1wiLFwiaXRzZWxmXCIsXCJpdm9yeVwiLFwiaXZ5XCIsXCJqYWNrZXRcIixcImphY2tzXCIsXCJqYWlsXCIsXCJqYW1cIixcImphbnVhcnlcIixcImphclwiLFwiamF3XCIsXCJqYXlcIixcImplbGx5XCIsXCJqZWxseWZpc2hcIixcImplcmtcIixcImppZ1wiLFwiam9iXCIsXCJqb2NrZXlcIixcImpvaW5cIixcImpva2VcIixcImpva2luZ1wiLFwiam9sbHlcIixcImpvdXJuZXlcIixcImpveVwiLFwiam95ZnVsXCIsXCJqb3lvdXNcIixcImp1ZGdlXCIsXCJqdWdcIixcImp1aWNlXCIsXCJqdWljeVwiLFwianVseVwiLFwianVtcFwiLFwianVuZVwiLFwianVuaW9yXCIsXCJqdW5rXCIsXCJqdXN0XCIsXCJrZWVuXCIsXCJrZWVwXCIsXCJrZXB0XCIsXCJrZXR0bGVcIixcImtleVwiLFwia2lja1wiLFwia2lkXCIsXCJraWxsXCIsXCJraWxsZWRcIixcImtpbmRcIixcImtpbmRseVwiLFwia2luZG5lc3NcIixcImtpbmdcIixcImtpbmdkb21cIixcImtpc3NcIixcImtpdGNoZW5cIixcImtpdGVcIixcImtpdHRlblwiLFwia2l0dHlcIixcImtuZWVcIixcImtuZWVsXCIsXCJrbmV3XCIsXCJrbmlmZVwiLFwia25pdFwiLFwia25pdmVzXCIsXCJrbm9iXCIsXCJrbm9ja1wiLFwia25vdFwiLFwia25vd1wiLFwia25vd25cIixcImxhY2VcIixcImxhZFwiLFwibGFkZGVyXCIsXCJsYWRpZXNcIixcImxhZHlcIixcImxhaWRcIixcImxha2VcIixcImxhbWJcIixcImxhbWVcIixcImxhbXBcIixcImxhbmRcIixcImxhbmVcIixcImxhbmd1YWdlXCIsXCJsYW50ZXJuXCIsXCJsYXBcIixcImxhcmRcIixcImxhcmdlXCIsXCJsYXNoXCIsXCJsYXNzXCIsXCJsYXN0XCIsXCJsYXRlXCIsXCJsYXVnaFwiLFwibGF1bmRyeVwiLFwibGF3XCIsXCJsYXduXCIsXCJsYXd5ZXJcIixcImxheVwiLFwibGF6eVwiLFwibGVhZFwiLFwibGVhZGVyXCIsXCJsZWFmXCIsXCJsZWFrXCIsXCJsZWFuXCIsXCJsZWFwXCIsXCJsZWFyblwiLFwibGVhcm5lZFwiLFwibGVhc3RcIixcImxlYXRoZXJcIixcImxlYXZlXCIsXCJsZWF2aW5nXCIsXCJsZWRcIixcImxlZnRcIixcImxlZ1wiLFwibGVtb25cIixcImxlbW9uYWRlXCIsXCJsZW5kXCIsXCJsZW5ndGhcIixcImxlc3NcIixcImxlc3NvblwiLFwibGV0XCIsXCJsZXQnc1wiLFwibGV0dGVyXCIsXCJsZXR0aW5nXCIsXCJsZXR0dWNlXCIsXCJsZXZlbFwiLFwibGliZXJ0eVwiLFwibGlicmFyeVwiLFwibGljZVwiLFwibGlja1wiLFwibGlkXCIsXCJsaWVcIixcImxpZmVcIixcImxpZnRcIixcImxpZ2h0XCIsXCJsaWdodG5lc3NcIixcImxpZ2h0bmluZ1wiLFwibGlrZVwiLFwibGlrZWx5XCIsXCJsaWtpbmdcIixcImxpbHlcIixcImxpbWJcIixcImxpbWVcIixcImxpbXBcIixcImxpbmVcIixcImxpbmVuXCIsXCJsaW9uXCIsXCJsaXBcIixcImxpc3RcIixcImxpc3RlblwiLFwibGl0XCIsXCJsaXR0bGVcIixcImxpdmVcIixcImxpdmVseVwiLFwibGl2ZXJcIixcImxpdmVzXCIsXCJsaXZpbmdcIixcImxpemFyZFwiLFwibG9hZFwiLFwibG9hZlwiLFwibG9hblwiLFwibG9hdmVzXCIsXCJsb2NrXCIsXCJsb2NvbW90aXZlXCIsXCJsb2dcIixcImxvbmVcIixcImxvbmVseVwiLFwibG9uZXNvbWVcIixcImxvbmdcIixcImxvb2tcIixcImxvb2tvdXRcIixcImxvb3BcIixcImxvb3NlXCIsXCJsb3JkXCIsXCJsb3NlXCIsXCJsb3NlclwiLFwibG9zc1wiLFwibG9zdFwiLFwibG90XCIsXCJsb3VkXCIsXCJsb3ZlXCIsXCJsb3ZlbHlcIixcImxvdmVyXCIsXCJsb3dcIixcImx1Y2tcIixcImx1Y2t5XCIsXCJsdW1iZXJcIixcImx1bXBcIixcImx1bmNoXCIsXCJseWluZ1wiLFwibWFcIixcIm1hY2hpbmVcIixcIm1hY2hpbmVyeVwiLFwibWFkXCIsXCJtYWRlXCIsXCJtYWdhemluZVwiLFwibWFnaWNcIixcIm1haWRcIixcIm1haWxcIixcIm1haWxib3hcIixcIm1haWxtYW5cIixcIm1ham9yXCIsXCJtYWtlXCIsXCJtYWtpbmdcIixcIm1hbGVcIixcIm1hbWFcIixcIm1hbW1hXCIsXCJtYW5cIixcIm1hbmFnZXJcIixcIm1hbmVcIixcIm1hbmdlclwiLFwibWFueVwiLFwibWFwXCIsXCJtYXBsZVwiLFwibWFyYmxlXCIsXCJtYXJjaFwiLFwibWFyZVwiLFwibWFya1wiLFwibWFya2V0XCIsXCJtYXJyaWFnZVwiLFwibWFycmllZFwiLFwibWFycnlcIixcIm1hc2tcIixcIm1hc3RcIixcIm1hc3RlclwiLFwibWF0XCIsXCJtYXRjaFwiLFwibWF0dGVyXCIsXCJtYXR0cmVzc1wiLFwibWF5XCIsXCJtYXliZVwiLFwibWF5b3JcIixcIm1heXBvbGVcIixcIm1lXCIsXCJtZWFkb3dcIixcIm1lYWxcIixcIm1lYW5cIixcIm1lYW5zXCIsXCJtZWFudFwiLFwibWVhc3VyZVwiLFwibWVhdFwiLFwibWVkaWNpbmVcIixcIm1lZXRcIixcIm1lZXRpbmdcIixcIm1lbHRcIixcIm1lbWJlclwiLFwibWVuXCIsXCJtZW5kXCIsXCJtZW93XCIsXCJtZXJyeVwiLFwibWVzc1wiLFwibWVzc2FnZVwiLFwibWV0XCIsXCJtZXRhbFwiLFwibWV3XCIsXCJtaWNlXCIsXCJtaWRkbGVcIixcIm1pZG5pZ2h0XCIsXCJtaWdodFwiLFwibWlnaHR5XCIsXCJtaWxlXCIsXCJtaWxlclwiLFwibWlsa1wiLFwibWlsa21hblwiLFwibWlsbFwiLFwibWlsbGlvblwiLFwibWluZFwiLFwibWluZVwiLFwibWluZXJcIixcIm1pbnRcIixcIm1pbnV0ZVwiLFwibWlycm9yXCIsXCJtaXNjaGllZlwiLFwibWlzc1wiLFwibWlzc3BlbGxcIixcIm1pc3Rha2VcIixcIm1pc3R5XCIsXCJtaXR0XCIsXCJtaXR0ZW5cIixcIm1peFwiLFwibW9tZW50XCIsXCJtb25kYXlcIixcIm1vbmV5XCIsXCJtb25rZXlcIixcIm1vbnRoXCIsXCJtb29cIixcIm1vb25cIixcIm1vb25saWdodFwiLFwibW9vc2VcIixcIm1vcFwiLFwibW9yZVwiLFwibW9ybmluZ1wiLFwibW9ycm93XCIsXCJtb3NzXCIsXCJtb3N0XCIsXCJtb3N0bHlcIixcIm1vdGhlclwiLFwibW90b3JcIixcIm1vdW50XCIsXCJtb3VudGFpblwiLFwibW91c2VcIixcIm1vdXRoXCIsXCJtb3ZlXCIsXCJtb3ZpZVwiLFwibW92aWVzXCIsXCJtb3ZpbmdcIixcIm1vd1wiLFwibXIuXCIsXCJtcnMuXCIsXCJtdWNoXCIsXCJtdWRcIixcIm11ZGR5XCIsXCJtdWdcIixcIm11bGVcIixcIm11bHRpcGx5XCIsXCJtdXJkZXJcIixcIm11c2ljXCIsXCJtdXN0XCIsXCJteVwiLFwibXlzZWxmXCIsXCJuYWlsXCIsXCJuYW1lXCIsXCJuYXBcIixcIm5hcGtpblwiLFwibmFycm93XCIsXCJuYXN0eVwiLFwibmF1Z2h0eVwiLFwibmF2eVwiLFwibmVhclwiLFwibmVhcmJ5XCIsXCJuZWFybHlcIixcIm5lYXRcIixcIm5lY2tcIixcIm5lY2t0aWVcIixcIm5lZWRcIixcIm5lZWRsZVwiLFwibmVlZG4ndFwiLFwibmVncm9cIixcIm5laWdoYm9yXCIsXCJuZWlnaGJvcmhvb2RcIixcIm5laXRoZXJcIixcIm5lcnZlXCIsXCJuZXN0XCIsXCJuZXRcIixcIm5ldmVyXCIsXCJuZXZlcm1vcmVcIixcIm5ld1wiLFwibmV3c1wiLFwibmV3c3BhcGVyXCIsXCJuZXh0XCIsXCJuaWJibGVcIixcIm5pY2VcIixcIm5pY2tlbFwiLFwibmlnaHRcIixcIm5pZ2h0Z293blwiLFwibmluZVwiLFwibmluZXRlZW5cIixcIm5pbmV0eVwiLFwibm9cIixcIm5vYm9keVwiLFwibm9kXCIsXCJub2lzZVwiLFwibm9pc3lcIixcIm5vbmVcIixcIm5vb25cIixcIm5vclwiLFwibm9ydGhcIixcIm5vcnRoZXJuXCIsXCJub3NlXCIsXCJub3RcIixcIm5vdGVcIixcIm5vdGhpbmdcIixcIm5vdGljZVwiLFwibm92ZW1iZXJcIixcIm5vd1wiLFwibm93aGVyZVwiLFwibnVtYmVyXCIsXCJudXJzZVwiLFwibnV0XCIsXCJvJ2Nsb2NrXCIsXCJvYWtcIixcIm9hclwiLFwib2F0bWVhbFwiLFwib2F0c1wiLFwib2JleVwiLFwib2NlYW5cIixcIm9jdG9iZXJcIixcIm9kZFwiLFwib2ZcIixcIm9mZlwiLFwib2ZmZXJcIixcIm9mZmljZVwiLFwib2ZmaWNlclwiLFwib2Z0ZW5cIixcIm9oXCIsXCJvaWxcIixcIm9sZFwiLFwib2xkLWZhc2hpb25lZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25pb25cIixcIm9ubHlcIixcIm9ud2FyZFwiLFwib3BlblwiLFwib3JcIixcIm9yYW5nZVwiLFwib3JjaGFyZFwiLFwib3JkZXJcIixcIm9yZVwiLFwib3JnYW5cIixcIm90aGVyXCIsXCJvdGhlcndpc2VcIixcIm91Y2hcIixcIm91Z2h0XCIsXCJvdXJcIixcIm91cnNcIixcIm91cnNlbHZlc1wiLFwib3V0XCIsXCJvdXRkb29yc1wiLFwib3V0Zml0XCIsXCJvdXRsYXdcIixcIm91dGxpbmVcIixcIm91dHNpZGVcIixcIm91dHdhcmRcIixcIm92ZW5cIixcIm92ZXJcIixcIm92ZXJhbGxzXCIsXCJvdmVyY29hdFwiLFwib3ZlcmVhdFwiLFwib3ZlcmhlYWRcIixcIm92ZXJoZWFyXCIsXCJvdmVybmlnaHRcIixcIm92ZXJ0dXJuXCIsXCJvd2VcIixcIm93aW5nXCIsXCJvd2xcIixcIm93blwiLFwib3duZXJcIixcIm94XCIsXCJwYVwiLFwicGFjZVwiLFwicGFja1wiLFwicGFja2FnZVwiLFwicGFkXCIsXCJwYWdlXCIsXCJwYWlkXCIsXCJwYWlsXCIsXCJwYWluXCIsXCJwYWluZnVsXCIsXCJwYWludFwiLFwicGFpbnRlclwiLFwicGFpbnRpbmdcIixcInBhaXJcIixcInBhbFwiLFwicGFsYWNlXCIsXCJwYWxlXCIsXCJwYW5cIixcInBhbmNha2VcIixcInBhbmVcIixcInBhbnN5XCIsXCJwYW50c1wiLFwicGFwYVwiLFwicGFwZXJcIixcInBhcmFkZVwiLFwicGFyZG9uXCIsXCJwYXJlbnRcIixcInBhcmtcIixcInBhcnRcIixcInBhcnRseVwiLFwicGFydG5lclwiLFwicGFydHlcIixcInBhc3NcIixcInBhc3NlbmdlclwiLFwicGFzdFwiLFwicGFzdGVcIixcInBhc3R1cmVcIixcInBhdFwiLFwicGF0Y2hcIixcInBhdGhcIixcInBhdHRlclwiLFwicGF2ZVwiLFwicGF2ZW1lbnRcIixcInBhd1wiLFwicGF5XCIsXCJwYXltZW50XCIsXCJwZWFcIixcInBlYWNlXCIsXCJwZWFjZWZ1bFwiLFwicGVhY2hcIixcInBlYWNoZXNcIixcInBlYWtcIixcInBlYW51dFwiLFwicGVhclwiLFwicGVhcmxcIixcInBlYXNcIixcInBlY2tcIixcInBlZWtcIixcInBlZWxcIixcInBlZXBcIixcInBlZ1wiLFwicGVuXCIsXCJwZW5jaWxcIixcInBlbm55XCIsXCJwZW9wbGVcIixcInBlcHBlclwiLFwicGVwcGVybWludFwiLFwicGVyZnVtZVwiLFwicGVyaGFwc1wiLFwicGVyc29uXCIsXCJwZXRcIixcInBob25lXCIsXCJwaWFub1wiLFwicGlja1wiLFwicGlja2xlXCIsXCJwaWNuaWNcIixcInBpY3R1cmVcIixcInBpZVwiLFwicGllY2VcIixcInBpZ1wiLFwicGlnZW9uXCIsXCJwaWdneVwiLFwicGlsZVwiLFwicGlsbFwiLFwicGlsbG93XCIsXCJwaW5cIixcInBpbmVcIixcInBpbmVhcHBsZVwiLFwicGlua1wiLFwicGludFwiLFwicGlwZVwiLFwicGlzdG9sXCIsXCJwaXRcIixcInBpdGNoXCIsXCJwaXRjaGVyXCIsXCJwaXR5XCIsXCJwbGFjZVwiLFwicGxhaW5cIixcInBsYW5cIixcInBsYW5lXCIsXCJwbGFudFwiLFwicGxhdGVcIixcInBsYXRmb3JtXCIsXCJwbGF0dGVyXCIsXCJwbGF5XCIsXCJwbGF5ZXJcIixcInBsYXlncm91bmRcIixcInBsYXlob3VzZVwiLFwicGxheW1hdGVcIixcInBsYXl0aGluZ1wiLFwicGxlYXNhbnRcIixcInBsZWFzZVwiLFwicGxlYXN1cmVcIixcInBsZW50eVwiLFwicGxvd1wiLFwicGx1Z1wiLFwicGx1bVwiLFwicG9ja2V0XCIsXCJwb2NrZXRib29rXCIsXCJwb2VtXCIsXCJwb2ludFwiLFwicG9pc29uXCIsXCJwb2tlXCIsXCJwb2xlXCIsXCJwb2xpY2VcIixcInBvbGljZW1hblwiLFwicG9saXNoXCIsXCJwb2xpdGVcIixcInBvbmRcIixcInBvbmllc1wiLFwicG9ueVwiLFwicG9vbFwiLFwicG9vclwiLFwicG9wXCIsXCJwb3Bjb3JuXCIsXCJwb3BwZWRcIixcInBvcmNoXCIsXCJwb3JrXCIsXCJwb3NzaWJsZVwiLFwicG9zdFwiLFwicG9zdGFnZVwiLFwicG9zdG1hblwiLFwicG90XCIsXCJwb3RhdG9cIixcInBvdGF0b2VzXCIsXCJwb3VuZFwiLFwicG91clwiLFwicG93ZGVyXCIsXCJwb3dlclwiLFwicG93ZXJmdWxcIixcInByYWlzZVwiLFwicHJheVwiLFwicHJheWVyXCIsXCJwcmVwYXJlXCIsXCJwcmVzZW50XCIsXCJwcmV0dHlcIixcInByaWNlXCIsXCJwcmlja1wiLFwicHJpbmNlXCIsXCJwcmluY2Vzc1wiLFwicHJpbnRcIixcInByaXNvblwiLFwicHJpemVcIixcInByb21pc2VcIixcInByb3BlclwiLFwicHJvdGVjdFwiLFwicHJvdWRcIixcInByb3ZlXCIsXCJwcnVuZVwiLFwicHVibGljXCIsXCJwdWRkbGVcIixcInB1ZmZcIixcInB1bGxcIixcInB1bXBcIixcInB1bXBraW5cIixcInB1bmNoXCIsXCJwdW5pc2hcIixcInB1cFwiLFwicHVwaWxcIixcInB1cHB5XCIsXCJwdXJlXCIsXCJwdXJwbGVcIixcInB1cnNlXCIsXCJwdXNoXCIsXCJwdXNzXCIsXCJwdXNzeVwiLFwicHVzc3ljYXRcIixcInB1dFwiLFwicHV0dGluZ1wiLFwicHV6emxlXCIsXCJxdWFja1wiLFwicXVhcnRcIixcInF1YXJ0ZXJcIixcInF1ZWVuXCIsXCJxdWVlclwiLFwicXVlc3Rpb25cIixcInF1aWNrXCIsXCJxdWlja2x5XCIsXCJxdWlldFwiLFwicXVpbHRcIixcInF1aXRcIixcInF1aXRlXCIsXCJyYWJiaXRcIixcInJhY2VcIixcInJhY2tcIixcInJhZGlvXCIsXCJyYWRpc2hcIixcInJhZ1wiLFwicmFpbFwiLFwicmFpbHJvYWRcIixcInJhaWx3YXlcIixcInJhaW5cIixcInJhaW5ib3dcIixcInJhaW55XCIsXCJyYWlzZVwiLFwicmFpc2luXCIsXCJyYWtlXCIsXCJyYW1cIixcInJhblwiLFwicmFuY2hcIixcInJhbmdcIixcInJhcFwiLFwicmFwaWRseVwiLFwicmF0XCIsXCJyYXRlXCIsXCJyYXRoZXJcIixcInJhdHRsZVwiLFwicmF3XCIsXCJyYXlcIixcInJlYWNoXCIsXCJyZWFkXCIsXCJyZWFkZXJcIixcInJlYWRpbmdcIixcInJlYWR5XCIsXCJyZWFsXCIsXCJyZWFsbHlcIixcInJlYXBcIixcInJlYXJcIixcInJlYXNvblwiLFwicmVidWlsZFwiLFwicmVjZWl2ZVwiLFwicmVjZXNzXCIsXCJyZWNvcmRcIixcInJlZFwiLFwicmVkYmlyZFwiLFwicmVkYnJlYXN0XCIsXCJyZWZ1c2VcIixcInJlaW5kZWVyXCIsXCJyZWpvaWNlXCIsXCJyZW1haW5cIixcInJlbWVtYmVyXCIsXCJyZW1pbmRcIixcInJlbW92ZVwiLFwicmVudFwiLFwicmVwYWlyXCIsXCJyZXBheVwiLFwicmVwZWF0XCIsXCJyZXBvcnRcIixcInJlc3RcIixcInJldHVyblwiLFwicmV2aWV3XCIsXCJyZXdhcmRcIixcInJpYlwiLFwicmliYm9uXCIsXCJyaWNlXCIsXCJyaWNoXCIsXCJyaWRcIixcInJpZGRsZVwiLFwicmlkZVwiLFwicmlkZXJcIixcInJpZGluZ1wiLFwicmlnaHRcIixcInJpbVwiLFwicmluZ1wiLFwicmlwXCIsXCJyaXBlXCIsXCJyaXNlXCIsXCJyaXNpbmdcIixcInJpdmVyXCIsXCJyb2FkXCIsXCJyb2Fkc2lkZVwiLFwicm9hclwiLFwicm9hc3RcIixcInJvYlwiLFwicm9iYmVyXCIsXCJyb2JlXCIsXCJyb2JpblwiLFwicm9ja1wiLFwicm9ja2V0XCIsXCJyb2NreVwiLFwicm9kZVwiLFwicm9sbFwiLFwicm9sbGVyXCIsXCJyb29mXCIsXCJyb29tXCIsXCJyb29zdGVyXCIsXCJyb290XCIsXCJyb3BlXCIsXCJyb3NlXCIsXCJyb3NlYnVkXCIsXCJyb3RcIixcInJvdHRlblwiLFwicm91Z2hcIixcInJvdW5kXCIsXCJyb3V0ZVwiLFwicm93XCIsXCJyb3dib2F0XCIsXCJyb3lhbFwiLFwicnViXCIsXCJydWJiZWRcIixcInJ1YmJlclwiLFwicnViYmlzaFwiLFwicnVnXCIsXCJydWxlXCIsXCJydWxlclwiLFwicnVtYmxlXCIsXCJydW5cIixcInJ1bmdcIixcInJ1bm5lclwiLFwicnVubmluZ1wiLFwicnVzaFwiLFwicnVzdFwiLFwicnVzdHlcIixcInJ5ZVwiLFwic2Fja1wiLFwic2FkXCIsXCJzYWRkbGVcIixcInNhZG5lc3NcIixcInNhZmVcIixcInNhZmV0eVwiLFwic2FpZFwiLFwic2FpbFwiLFwic2FpbGJvYXRcIixcInNhaWxvclwiLFwic2FpbnRcIixcInNhbGFkXCIsXCJzYWxlXCIsXCJzYWx0XCIsXCJzYW1lXCIsXCJzYW5kXCIsXCJzYW5kd2ljaFwiLFwic2FuZHlcIixcInNhbmdcIixcInNhbmtcIixcInNhcFwiLFwic2FzaFwiLFwic2F0XCIsXCJzYXRpblwiLFwic2F0aXNmYWN0b3J5XCIsXCJzYXR1cmRheVwiLFwic2F1c2FnZVwiLFwic2F2YWdlXCIsXCJzYXZlXCIsXCJzYXZpbmdzXCIsXCJzYXdcIixcInNheVwiLFwic2NhYlwiLFwic2NhbGVzXCIsXCJzY2FyZVwiLFwic2NhcmZcIixcInNjaG9vbFwiLFwic2Nob29sYm95XCIsXCJzY2hvb2xob3VzZVwiLFwic2Nob29sbWFzdGVyXCIsXCJzY2hvb2xyb29tXCIsXCJzY29yY2hcIixcInNjb3JlXCIsXCJzY3JhcFwiLFwic2NyYXBlXCIsXCJzY3JhdGNoXCIsXCJzY3JlYW1cIixcInNjcmVlblwiLFwic2NyZXdcIixcInNjcnViXCIsXCJzZWFcIixcInNlYWxcIixcInNlYW1cIixcInNlYXJjaFwiLFwic2Vhc29uXCIsXCJzZWF0XCIsXCJzZWNvbmRcIixcInNlY3JldFwiLFwic2VlXCIsXCJzZWVkXCIsXCJzZWVpbmdcIixcInNlZWtcIixcInNlZW1cIixcInNlZW5cIixcInNlZXNhd1wiLFwic2VsZWN0XCIsXCJzZWxmXCIsXCJzZWxmaXNoXCIsXCJzZWxsXCIsXCJzZW5kXCIsXCJzZW5zZVwiLFwic2VudFwiLFwic2VudGVuY2VcIixcInNlcGFyYXRlXCIsXCJzZXB0ZW1iZXJcIixcInNlcnZhbnRcIixcInNlcnZlXCIsXCJzZXJ2aWNlXCIsXCJzZXRcIixcInNldHRpbmdcIixcInNldHRsZVwiLFwic2V0dGxlbWVudFwiLFwic2V2ZW5cIixcInNldmVudGVlblwiLFwic2V2ZW50aFwiLFwic2V2ZW50eVwiLFwic2V2ZXJhbFwiLFwic2V3XCIsXCJzaGFkZVwiLFwic2hhZG93XCIsXCJzaGFkeVwiLFwic2hha2VcIixcInNoYWtlclwiLFwic2hha2luZ1wiLFwic2hhbGxcIixcInNoYW1lXCIsXCJzaGFuJ3RcIixcInNoYXBlXCIsXCJzaGFyZVwiLFwic2hhcnBcIixcInNoYXZlXCIsXCJzaGVcIixcInNoZSdkXCIsXCJzaGUnbGxcIixcInNoZSdzXCIsXCJzaGVhclwiLFwic2hlYXJzXCIsXCJzaGVkXCIsXCJzaGVlcFwiLFwic2hlZXRcIixcInNoZWxmXCIsXCJzaGVsbFwiLFwic2hlcGhlcmRcIixcInNoaW5lXCIsXCJzaGluaW5nXCIsXCJzaGlueVwiLFwic2hpcFwiLFwic2hpcnRcIixcInNob2NrXCIsXCJzaG9lXCIsXCJzaG9lbWFrZXJcIixcInNob25lXCIsXCJzaG9va1wiLFwic2hvb3RcIixcInNob3BcIixcInNob3BwaW5nXCIsXCJzaG9yZVwiLFwic2hvcnRcIixcInNob3RcIixcInNob3VsZFwiLFwic2hvdWxkZXJcIixcInNob3VsZG4ndFwiLFwic2hvdXRcIixcInNob3ZlbFwiLFwic2hvd1wiLFwic2hvd2VyXCIsXCJzaHV0XCIsXCJzaHlcIixcInNpY2tcIixcInNpY2tuZXNzXCIsXCJzaWRlXCIsXCJzaWRld2Fsa1wiLFwic2lkZXdheXNcIixcInNpZ2hcIixcInNpZ2h0XCIsXCJzaWduXCIsXCJzaWxlbmNlXCIsXCJzaWxlbnRcIixcInNpbGtcIixcInNpbGxcIixcInNpbGx5XCIsXCJzaWx2ZXJcIixcInNpbXBsZVwiLFwic2luXCIsXCJzaW5jZVwiLFwic2luZ1wiLFwic2luZ2VyXCIsXCJzaW5nbGVcIixcInNpbmtcIixcInNpcFwiLFwic2lyXCIsXCJzaXNcIixcInNpc3N5XCIsXCJzaXN0ZXJcIixcInNpdFwiLFwic2l0dGluZ1wiLFwic2l4XCIsXCJzaXh0ZWVuXCIsXCJzaXh0aFwiLFwic2l4dHlcIixcInNpemVcIixcInNrYXRlXCIsXCJza2F0ZXJcIixcInNraVwiLFwic2tpblwiLFwic2tpcFwiLFwic2tpcnRcIixcInNreVwiLFwic2xhbVwiLFwic2xhcFwiLFwic2xhdGVcIixcInNsYXZlXCIsXCJzbGVkXCIsXCJzbGVlcFwiLFwic2xlZXB5XCIsXCJzbGVldmVcIixcInNsZWlnaFwiLFwic2xlcHRcIixcInNsaWNlXCIsXCJzbGlkXCIsXCJzbGlkZVwiLFwic2xpbmdcIixcInNsaXBcIixcInNsaXBwZWRcIixcInNsaXBwZXJcIixcInNsaXBwZXJ5XCIsXCJzbGl0XCIsXCJzbG93XCIsXCJzbG93bHlcIixcInNseVwiLFwic21hY2tcIixcInNtYWxsXCIsXCJzbWFydFwiLFwic21lbGxcIixcInNtaWxlXCIsXCJzbW9rZVwiLFwic21vb3RoXCIsXCJzbmFpbFwiLFwic25ha2VcIixcInNuYXBcIixcInNuYXBwaW5nXCIsXCJzbmVlemVcIixcInNub3dcIixcInNub3diYWxsXCIsXCJzbm93Zmxha2VcIixcInNub3d5XCIsXCJzbnVmZlwiLFwic251Z1wiLFwic29cIixcInNvYWtcIixcInNvYXBcIixcInNvYlwiLFwic29ja3NcIixcInNvZFwiLFwic29kYVwiLFwic29mYVwiLFwic29mdFwiLFwic29pbFwiLFwic29sZFwiLFwic29sZGllclwiLFwic29sZVwiLFwic29tZVwiLFwic29tZWJvZHlcIixcInNvbWVob3dcIixcInNvbWVvbmVcIixcInNvbWV0aGluZ1wiLFwic29tZXRpbWVcIixcInNvbWV0aW1lc1wiLFwic29tZXdoZXJlXCIsXCJzb25cIixcInNvbmdcIixcInNvb25cIixcInNvcmVcIixcInNvcnJvd1wiLFwic29ycnlcIixcInNvcnRcIixcInNvdWxcIixcInNvdW5kXCIsXCJzb3VwXCIsXCJzb3VyXCIsXCJzb3V0aFwiLFwic291dGhlcm5cIixcInNwYWNlXCIsXCJzcGFkZVwiLFwic3BhbmtcIixcInNwYXJyb3dcIixcInNwZWFrXCIsXCJzcGVha2VyXCIsXCJzcGVhclwiLFwic3BlZWNoXCIsXCJzcGVlZFwiLFwic3BlbGxcIixcInNwZWxsaW5nXCIsXCJzcGVuZFwiLFwic3BlbnRcIixcInNwaWRlclwiLFwic3Bpa2VcIixcInNwaWxsXCIsXCJzcGluXCIsXCJzcGluYWNoXCIsXCJzcGlyaXRcIixcInNwaXRcIixcInNwbGFzaFwiLFwic3BvaWxcIixcInNwb2tlXCIsXCJzcG9va1wiLFwic3Bvb25cIixcInNwb3J0XCIsXCJzcG90XCIsXCJzcHJlYWRcIixcInNwcmluZ1wiLFwic3ByaW5ndGltZVwiLFwic3ByaW5rbGVcIixcInNxdWFyZVwiLFwic3F1YXNoXCIsXCJzcXVlYWtcIixcInNxdWVlemVcIixcInNxdWlycmVsXCIsXCJzdGFibGVcIixcInN0YWNrXCIsXCJzdGFnZVwiLFwic3RhaXJcIixcInN0YWxsXCIsXCJzdGFtcFwiLFwic3RhbmRcIixcInN0YXJcIixcInN0YXJlXCIsXCJzdGFydFwiLFwic3RhcnZlXCIsXCJzdGF0ZVwiLFwic3RhdGVzXCIsXCJzdGF0aW9uXCIsXCJzdGF5XCIsXCJzdGVha1wiLFwic3RlYWxcIixcInN0ZWFtXCIsXCJzdGVhbWJvYXRcIixcInN0ZWFtZXJcIixcInN0ZWVsXCIsXCJzdGVlcFwiLFwic3RlZXBsZVwiLFwic3RlZXJcIixcInN0ZW1cIixcInN0ZXBcIixcInN0ZXBwaW5nXCIsXCJzdGlja1wiLFwic3RpY2t5XCIsXCJzdGlmZlwiLFwic3RpbGxcIixcInN0aWxsbmVzc1wiLFwic3RpbmdcIixcInN0aXJcIixcInN0aXRjaFwiLFwic3RvY2tcIixcInN0b2NraW5nXCIsXCJzdG9sZVwiLFwic3RvbmVcIixcInN0b29kXCIsXCJzdG9vbFwiLFwic3Rvb3BcIixcInN0b3BcIixcInN0b3BwZWRcIixcInN0b3BwaW5nXCIsXCJzdG9yZVwiLFwic3Rvcmllc1wiLFwic3RvcmtcIixcInN0b3JtXCIsXCJzdG9ybXlcIixcInN0b3J5XCIsXCJzdG92ZVwiLFwic3RyYWlnaHRcIixcInN0cmFuZ2VcIixcInN0cmFuZ2VyXCIsXCJzdHJhcFwiLFwic3RyYXdcIixcInN0cmF3YmVycnlcIixcInN0cmVhbVwiLFwic3RyZWV0XCIsXCJzdHJldGNoXCIsXCJzdHJpbmdcIixcInN0cmlwXCIsXCJzdHJpcGVzXCIsXCJzdHJvbmdcIixcInN0dWNrXCIsXCJzdHVkeVwiLFwic3R1ZmZcIixcInN0dW1wXCIsXCJzdHVuZ1wiLFwic3ViamVjdFwiLFwic3VjaFwiLFwic3Vja1wiLFwic3VkZGVuXCIsXCJzdWZmZXJcIixcInN1Z2FyXCIsXCJzdWl0XCIsXCJzdW1cIixcInN1bW1lclwiLFwic3VuXCIsXCJzdW5kYXlcIixcInN1bmZsb3dlclwiLFwic3VuZ1wiLFwic3Vua1wiLFwic3VubGlnaHRcIixcInN1bm55XCIsXCJzdW5yaXNlXCIsXCJzdW5zZXRcIixcInN1bnNoaW5lXCIsXCJzdXBwZXJcIixcInN1cHBvc2VcIixcInN1cmVcIixcInN1cmVseVwiLFwic3VyZmFjZVwiLFwic3VycHJpc2VcIixcInN3YWxsb3dcIixcInN3YW1cIixcInN3YW1wXCIsXCJzd2FuXCIsXCJzd2F0XCIsXCJzd2VhclwiLFwic3dlYXRcIixcInN3ZWF0ZXJcIixcInN3ZWVwXCIsXCJzd2VldFwiLFwic3dlZXRoZWFydFwiLFwic3dlZXRuZXNzXCIsXCJzd2VsbFwiLFwic3dlcHRcIixcInN3aWZ0XCIsXCJzd2ltXCIsXCJzd2ltbWluZ1wiLFwic3dpbmdcIixcInN3aXRjaFwiLFwic3dvcmRcIixcInN3b3JlXCIsXCJ0YWJsZVwiLFwidGFibGVjbG90aFwiLFwidGFibGVzcG9vblwiLFwidGFibGV0XCIsXCJ0YWNrXCIsXCJ0YWdcIixcInRhaWxcIixcInRhaWxvclwiLFwidGFrZVwiLFwidGFrZW5cIixcInRha2luZ1wiLFwidGFsZVwiLFwidGFsa1wiLFwidGFsa2VyXCIsXCJ0YWxsXCIsXCJ0YW1lXCIsXCJ0YW5cIixcInRhbmtcIixcInRhcFwiLFwidGFwZVwiLFwidGFyXCIsXCJ0YXJkeVwiLFwidGFza1wiLFwidGFzdGVcIixcInRhdWdodFwiLFwidGF4XCIsXCJ0ZWFcIixcInRlYWNoXCIsXCJ0ZWFjaGVyXCIsXCJ0ZWFtXCIsXCJ0ZWFyXCIsXCJ0ZWFzZVwiLFwidGVhc3Bvb25cIixcInRlZXRoXCIsXCJ0ZWxlcGhvbmVcIixcInRlbGxcIixcInRlbXBlclwiLFwidGVuXCIsXCJ0ZW5uaXNcIixcInRlbnRcIixcInRlcm1cIixcInRlcnJpYmxlXCIsXCJ0ZXN0XCIsXCJ0aGFuXCIsXCJ0aGFua1wiLFwidGhhbmtmdWxcIixcInRoYW5rc1wiLFwidGhhbmtzZ2l2aW5nXCIsXCJ0aGF0XCIsXCJ0aGF0J3NcIixcInRoZVwiLFwidGhlYXRlclwiLFwidGhlZVwiLFwidGhlaXJcIixcInRoZW1cIixcInRoZW5cIixcInRoZXJlXCIsXCJ0aGVzZVwiLFwidGhleVwiLFwidGhleSdkXCIsXCJ0aGV5J2xsXCIsXCJ0aGV5J3JlXCIsXCJ0aGV5J3ZlXCIsXCJ0aGlja1wiLFwidGhpZWZcIixcInRoaW1ibGVcIixcInRoaW5cIixcInRoaW5nXCIsXCJ0aGlua1wiLFwidGhpcmRcIixcInRoaXJzdHlcIixcInRoaXJ0ZWVuXCIsXCJ0aGlydHlcIixcInRoaXNcIixcInRob3JuXCIsXCJ0aG9zZVwiLFwidGhvdWdoXCIsXCJ0aG91Z2h0XCIsXCJ0aG91c2FuZFwiLFwidGhyZWFkXCIsXCJ0aHJlZVwiLFwidGhyZXdcIixcInRocm9hdFwiLFwidGhyb25lXCIsXCJ0aHJvdWdoXCIsXCJ0aHJvd1wiLFwidGhyb3duXCIsXCJ0aHVtYlwiLFwidGh1bmRlclwiLFwidGh1cnNkYXlcIixcInRoeVwiLFwidGlja1wiLFwidGlja2V0XCIsXCJ0aWNrbGVcIixcInRpZVwiLFwidGlnZXJcIixcInRpZ2h0XCIsXCJ0aWxsXCIsXCJ0aW1lXCIsXCJ0aW5cIixcInRpbmtsZVwiLFwidGlueVwiLFwidGlwXCIsXCJ0aXB0b2VcIixcInRpcmVcIixcInRpcmVkXCIsXCJ0aXRsZVwiLFwidG9cIixcInRvYWRcIixcInRvYWRzdG9vbFwiLFwidG9hc3RcIixcInRvYmFjY29cIixcInRvZGF5XCIsXCJ0b2VcIixcInRvZ2V0aGVyXCIsXCJ0b2lsZXRcIixcInRvbGRcIixcInRvbWF0b1wiLFwidG9tb3Jyb3dcIixcInRvblwiLFwidG9uZVwiLFwidG9uZ3VlXCIsXCJ0b25pZ2h0XCIsXCJ0b29cIixcInRvb2tcIixcInRvb2xcIixcInRvb3RcIixcInRvb3RoXCIsXCJ0b290aGJydXNoXCIsXCJ0b290aHBpY2tcIixcInRvcFwiLFwidG9yZVwiLFwidG9yblwiLFwidG9zc1wiLFwidG91Y2hcIixcInRvd1wiLFwidG93YXJkXCIsXCJ0b3dhcmRzXCIsXCJ0b3dlbFwiLFwidG93ZXJcIixcInRvd25cIixcInRveVwiLFwidHJhY2VcIixcInRyYWNrXCIsXCJ0cmFkZVwiLFwidHJhaW5cIixcInRyYW1wXCIsXCJ0cmFwXCIsXCJ0cmF5XCIsXCJ0cmVhc3VyZVwiLFwidHJlYXRcIixcInRyZWVcIixcInRyaWNrXCIsXCJ0cmljeWNsZVwiLFwidHJpZWRcIixcInRyaW1cIixcInRyaXBcIixcInRyb2xsZXlcIixcInRyb3VibGVcIixcInRydWNrXCIsXCJ0cnVlXCIsXCJ0cnVseVwiLFwidHJ1bmtcIixcInRydXN0XCIsXCJ0cnV0aFwiLFwidHJ5XCIsXCJ0dWJcIixcInR1ZXNkYXlcIixcInR1Z1wiLFwidHVsaXBcIixcInR1bWJsZVwiLFwidHVuZVwiLFwidHVubmVsXCIsXCJ0dXJrZXlcIixcInR1cm5cIixcInR1cnRsZVwiLFwidHdlbHZlXCIsXCJ0d2VudHlcIixcInR3aWNlXCIsXCJ0d2lnXCIsXCJ0d2luXCIsXCJ0d29cIixcInVnbHlcIixcInVtYnJlbGxhXCIsXCJ1bmNsZVwiLFwidW5kZXJcIixcInVuZGVyc3RhbmRcIixcInVuZGVyd2VhclwiLFwidW5kcmVzc1wiLFwidW5mYWlyXCIsXCJ1bmZpbmlzaGVkXCIsXCJ1bmZvbGRcIixcInVuZnJpZW5kbHlcIixcInVuaGFwcHlcIixcInVuaHVydFwiLFwidW5pZm9ybVwiLFwidW5pdGVkXCIsXCJ1bmtpbmRcIixcInVua25vd25cIixcInVubGVzc1wiLFwidW5wbGVhc2FudFwiLFwidW50aWxcIixcInVud2lsbGluZ1wiLFwidXBcIixcInVwb25cIixcInVwcGVyXCIsXCJ1cHNldFwiLFwidXBzaWRlXCIsXCJ1cHN0YWlyc1wiLFwidXB0b3duXCIsXCJ1cHdhcmRcIixcInVzXCIsXCJ1c2VcIixcInVzZWRcIixcInVzZWZ1bFwiLFwidmFsZW50aW5lXCIsXCJ2YWxsZXlcIixcInZhbHVhYmxlXCIsXCJ2YWx1ZVwiLFwidmFzZVwiLFwidmVnZXRhYmxlXCIsXCJ2ZWx2ZXRcIixcInZlcnlcIixcInZlc3NlbFwiLFwidmljdG9yeVwiLFwidmlld1wiLFwidmlsbGFnZVwiLFwidmluZVwiLFwidmlvbGV0XCIsXCJ2aXNpdFwiLFwidmlzaXRvclwiLFwidm9pY2VcIixcInZvdGVcIixcIndhZ1wiLFwid2Fnb25cIixcIndhaXN0XCIsXCJ3YWl0XCIsXCJ3YWtlXCIsXCJ3YWtlblwiLFwid2Fsa1wiLFwid2FsbFwiLFwid2FsbnV0XCIsXCJ3YW50XCIsXCJ3YXJcIixcIndhcm1cIixcIndhcm5cIixcIndhc1wiLFwid2FzaFwiLFwid2FzaGVyXCIsXCJ3YXNodHViXCIsXCJ3YXNuJ3RcIixcIndhc3RlXCIsXCJ3YXRjaFwiLFwid2F0Y2htYW5cIixcIndhdGVyXCIsXCJ3YXRlcm1lbG9uXCIsXCJ3YXRlcnByb29mXCIsXCJ3YXZlXCIsXCJ3YXhcIixcIndheVwiLFwid2F5c2lkZVwiLFwid2VcIixcIndlJ2RcIixcIndlJ2xsXCIsXCJ3ZSdyZVwiLFwid2UndmVcIixcIndlYWtcIixcIndlYWtlblwiLFwid2Vha25lc3NcIixcIndlYWx0aFwiLFwid2VhcG9uXCIsXCJ3ZWFyXCIsXCJ3ZWFyeVwiLFwid2VhdGhlclwiLFwid2VhdmVcIixcIndlYlwiLFwid2VkZGluZ1wiLFwid2VkbmVzZGF5XCIsXCJ3ZWVcIixcIndlZWRcIixcIndlZWtcIixcIndlZXBcIixcIndlaWdoXCIsXCJ3ZWxjb21lXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXN0XCIsXCJ3ZXN0ZXJuXCIsXCJ3ZXRcIixcIndoYWxlXCIsXCJ3aGF0XCIsXCJ3aGF0J3NcIixcIndoZWF0XCIsXCJ3aGVlbFwiLFwid2hlblwiLFwid2hlbmV2ZXJcIixcIndoZXJlXCIsXCJ3aGljaFwiLFwid2hpbGVcIixcIndoaXBcIixcIndoaXBwZWRcIixcIndoaXJsXCIsXCJ3aGlza2V5XCIsXCJ3aGlza3lcIixcIndoaXNwZXJcIixcIndoaXN0bGVcIixcIndoaXRlXCIsXCJ3aG9cIixcIndobydkXCIsXCJ3aG8nbGxcIixcIndobydzXCIsXCJ3aG9sZVwiLFwid2hvbVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lja2VkXCIsXCJ3aWRlXCIsXCJ3aWZlXCIsXCJ3aWdnbGVcIixcIndpbGRcIixcIndpbGRjYXRcIixcIndpbGxcIixcIndpbGxpbmdcIixcIndpbGxvd1wiLFwid2luXCIsXCJ3aW5kXCIsXCJ3aW5kbWlsbFwiLFwid2luZG93XCIsXCJ3aW5keVwiLFwid2luZVwiLFwid2luZ1wiLFwid2lua1wiLFwid2lubmVyXCIsXCJ3aW50ZXJcIixcIndpcGVcIixcIndpcmVcIixcIndpc2VcIixcIndpc2hcIixcIndpdFwiLFwid2l0Y2hcIixcIndpdGhcIixcIndpdGhvdXRcIixcIndva2VcIixcIndvbGZcIixcIndvbWFuXCIsXCJ3b21lblwiLFwid29uXCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b25kZXJmdWxcIixcIndvb2RcIixcIndvb2RlblwiLFwid29vZHBlY2tlclwiLFwid29vZHNcIixcIndvb2xcIixcIndvb2xlblwiLFwid29yZFwiLFwid29yZVwiLFwid29ya1wiLFwid29ya2VyXCIsXCJ3b3JrbWFuXCIsXCJ3b3JsZFwiLFwid29ybVwiLFwid29yblwiLFwid29ycnlcIixcIndvcnNlXCIsXCJ3b3JzdFwiLFwid29ydGhcIixcIndvdWxkXCIsXCJ3b3VsZG4ndFwiLFwid291bmRcIixcIndvdmVcIixcIndyYXBcIixcIndyYXBwZWRcIixcIndyZWNrXCIsXCJ3cmVuXCIsXCJ3cmluZ1wiLFwid3JpdGVcIixcIndyaXRpbmdcIixcIndyaXR0ZW5cIixcIndyb25nXCIsXCJ3cm90ZVwiLFwid3J1bmdcIixcInlhcmRcIixcInlhcm5cIixcInllYXJcIixcInllbGxcIixcInllbGxvd1wiLFwieWVzXCIsXCJ5ZXN0ZXJkYXlcIixcInlldFwiLFwieW9sa1wiLFwieW9uZGVyXCIsXCJ5b3VcIixcInlvdSdkXCIsXCJ5b3UnbGxcIixcInlvdSdyZVwiLFwieW91J3ZlXCIsXCJ5b3VuZ1wiLFwieW91bmdzdGVyXCIsXCJ5b3VyXCIsXCJ5b3Vyc1wiLFwieW91cnNlbGZcIixcInlvdXJzZWx2ZXNcIixcInlvdXRoXCJdLHBlPXs0OlswLDRdLDU6WzUsNl0sNjpbNyw4XSw3Ols5LDEwXSw4OlsxMSwxMl0sOTpbMTMsMTVdLDEwOlsxNixOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldLE5hTjpbTnVtYmVyLk5hTixOdW1iZXIuTmFOXX07ZnVuY3Rpb24gaGUobil7dmFyIGUsYTtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPyhhPS4xNTc5KihlPShuLmRpZmZpY3VsdFdvcmR8fDApL24ud29yZCkqMTAwKy4wNDk2Km4ud29yZC9uLnNlbnRlbmNlLGU+LjA1JiYoYSs9My42MzY1KSxhKTpOdW1iZXIuTmFOfWZ1bmN0aW9uIGdlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQmJm4uc3lsbGFibGU/MjA2LjgzNS1uLndvcmQvbi5zZW50ZW5jZSoxLjAxNS1uLnN5bGxhYmxlL24ud29yZCo4NC42Ok51bWJlci5OYU59ZnVuY3Rpb24geWUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZD8uNCoobi53b3JkL24uc2VudGVuY2UrKG4uY29tcGxleFBvbHlzaWxsYWJpY1dvcmR8fDApL24ud29yZCoxMDApOk51bWJlci5OYU59ZnVuY3Rpb24gYmUobil7cmV0dXJuIG4mJm4uc2VudGVuY2U/My4xMjkxKzEuMDQzKk1hdGguc3FydCgobi5wb2x5c2lsbGFiaWNXb3JkfHwwKSooMzAvbi5zZW50ZW5jZSkpOk51bWJlci5OYU59dmFyIERlPVtcImFcIixcImFibGVcIixcImFib3V0XCIsXCJhYm92ZVwiLFwiYWNyb3NzXCIsXCJhY3RcIixcImFkZFwiLFwiYWZyYWlkXCIsXCJhZnRlclwiLFwiYWZ0ZXJub29uXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWdvXCIsXCJhaXJcIixcImFpcnBsYW5lXCIsXCJhbGFybVwiLFwiYWxsXCIsXCJhbG1vc3RcIixcImFsb25lXCIsXCJhbG9uZ1wiLFwiYWxyZWFkeVwiLFwiYWxzb1wiLFwiYWx3YXlzXCIsXCJhbVwiLFwiYW1vbmdcIixcImFuXCIsXCJhbmRcIixcImFuZ3J5XCIsXCJhbmltYWxcIixcImFub3RoZXJcIixcImFuc3dlclwiLFwiYW55XCIsXCJhbnlvbmVcIixcImFwcGVhclwiLFwiYXBwbGVcIixcImFyZVwiLFwiYXJtXCIsXCJhcm91bmRcIixcImFycm93XCIsXCJhc1wiLFwiYXNrXCIsXCJhc2xlZXBcIixcImF0XCIsXCJhdGVcIixcImF0dGVudGlvblwiLFwiYXVudFwiLFwiYXdha2VcIixcImF3YXlcIixcImJcIixcImJhYnlcIixcImJhY2tcIixcImJhZFwiLFwiYmFnXCIsXCJiYWxsXCIsXCJiYWxsb29uXCIsXCJiYW5nXCIsXCJiYW5rXCIsXCJiYXJrXCIsXCJiYXJuXCIsXCJiYXNrZXRcIixcImJlXCIsXCJiZWFuXCIsXCJiZWFyXCIsXCJiZWF0XCIsXCJiZWF1dGlmdWxcIixcImJlY2FtZVwiLFwiYmVjYXVzZVwiLFwiYmVjb21lXCIsXCJiZWRcIixcImJlZVwiLFwiYmVlblwiLFwiYmVmb3JlXCIsXCJiZWdhblwiLFwiYmVnaW5cIixcImJlaGluZFwiLFwiYmVsaWV2ZVwiLFwiYmVsbFwiLFwiYmVsb25nXCIsXCJiZW5kXCIsXCJiZW50XCIsXCJiZXNpZGVcIixcImJlc3RcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmlnXCIsXCJiaXJkXCIsXCJiaXJ0aGRheVwiLFwiYml0XCIsXCJiaXRlXCIsXCJibGFja1wiLFwiYmxhbmtldFwiLFwiYmxld1wiLFwiYmxvY2tcIixcImJsb3dcIixcImJsdWVcIixcImJvYXJkXCIsXCJib2F0XCIsXCJib29rXCIsXCJib290XCIsXCJib3JuXCIsXCJib3Jyb3dcIixcImJvdGhcIixcImJvdGhlclwiLFwiYm90dGxlXCIsXCJib3R0b21cIixcImJvdWdodFwiLFwiYm93XCIsXCJib3hcIixcImJveVwiLFwiYnJhbmNoXCIsXCJicmF2ZVwiLFwiYnJlYWRcIixcImJyZWFrXCIsXCJicmVha2Zhc3RcIixcImJyZWF0aFwiLFwiYnJpY2tcIixcImJyaWRnZVwiLFwiYnJpZ2h0XCIsXCJicmluZ1wiLFwiYnJva2VcIixcImJyb2tlblwiLFwiYnJvdGhlclwiLFwiYnJvdWdodFwiLFwiYnJvd25cIixcImJydXNoXCIsXCJidWlsZFwiLFwiYnVtcFwiLFwiYnVyblwiLFwiYnVzXCIsXCJidXN5XCIsXCJidXRcIixcImJ1dHRlclwiLFwiYnV0dG9uXCIsXCJidXlcIixcImJ5XCIsXCJjXCIsXCJjYWJpblwiLFwiY2FnZVwiLFwiY2FrZVwiLFwiY2FsbFwiLFwiY2FtZVwiLFwiY2FtcFwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2FuZGxlXCIsXCJjYW5keVwiLFwiY2FwXCIsXCJjYXB0YWluXCIsXCJjYXJcIixcImNhcmRcIixcImNhcmVcIixcImNhcmVmdWxcIixcImNhcnJvdFwiLFwiY2FycnlcIixcImNhc2VcIixcImNhc3RsZVwiLFwiY2F0XCIsXCJjYXRjaFwiLFwiY2F0dGxlXCIsXCJjYXVnaHRcIixcImNhdXNlXCIsXCJjZW50XCIsXCJjZXJ0YWluXCIsXCJjaGFpclwiLFwiY2hhbmNlXCIsXCJjaGFuZ2VcIixcImNoYXNlXCIsXCJjaGlja2VuXCIsXCJjaGllZlwiLFwiY2hpbGRcIixcImNoaWxkcmVuXCIsXCJjaHVyY2hcIixcImNpcmNsZVwiLFwiY2lyY3VzXCIsXCJjaXR5XCIsXCJjbGFwXCIsXCJjbGVhblwiLFwiY2xldmVyXCIsXCJjbGlmZlwiLFwiY2xpbWJcIixcImNsb2NrXCIsXCJjbG9zZVwiLFwiY2xvdGhcIixcImNsb3RoZXNcIixcImNsb3duXCIsXCJjb2F0XCIsXCJjb2xkXCIsXCJjb2xvclwiLFwiY29tZVwiLFwiY29tZm9ydGFibGVcIixcImNvbXBhbnlcIixcImNvbnRlc3RcIixcImNvbnRpbnVlXCIsXCJjb29rXCIsXCJjb29sXCIsXCJjb3JuZXJcIixcImNvdWxkXCIsXCJjb3VudFwiLFwiY291bnRyeVwiLFwiY291cnNlXCIsXCJjb3ZlclwiLFwiY293XCIsXCJjcmF3bFwiLFwiY3JlYW1cIixcImNyeVwiLFwiY3VwXCIsXCJjdXJ0YWluXCIsXCJjdXRcIixcImRcIixcImRhZFwiLFwiZGFuY2VcIixcImRhbmdlclwiLFwiZGFuZ2Vyb3VzXCIsXCJkYXJrXCIsXCJkYXNoXCIsXCJkYXVnaHRlclwiLFwiZGF5XCIsXCJkZWFyXCIsXCJkZWNpZGVcIixcImRlZXBcIixcImRlc2tcIixcImRpZFwiLFwiZGlkbid0XCIsXCJkaWVcIixcImRpZmZlcmVudFwiLFwiZGlnXCIsXCJkaW5uZXJcIixcImRpcmVjdGlvblwiLFwiZGlzYXBwZWFyXCIsXCJkaXNhcHBvaW50XCIsXCJkaXNjb3ZlclwiLFwiZGlzdGFuY2VcIixcImRvXCIsXCJkb2N0b3JcIixcImRvZXNcIixcImRvZ1wiLFwiZG9sbGFyXCIsXCJkb24ndFwiLFwiZG9uZVwiLFwiZG9vclwiLFwiZG93blwiLFwiZHJhZ29uXCIsXCJkcmVhbVwiLFwiZHJlc3NcIixcImRyaW5rXCIsXCJkcml2ZVwiLFwiZHJvcFwiLFwiZHJvdmVcIixcImRyeVwiLFwiZHVja1wiLFwiZHVyaW5nXCIsXCJkdXN0XCIsXCJlXCIsXCJlYWNoXCIsXCJlYWdlclwiLFwiZWFyXCIsXCJlYXJseVwiLFwiZWFyblwiLFwiZWFydGhcIixcImVhc3lcIixcImVhdFwiLFwiZWRnZVwiLFwiZWdnXCIsXCJlaWdodFwiLFwiZWlnaHRlZW5cIixcImVpdGhlclwiLFwiZWxlcGhhbnRcIixcImVsc2VcIixcImVtcHR5XCIsXCJlbmRcIixcImVuZW15XCIsXCJlbm91Z2hcIixcImVudGVyXCIsXCJldmVuXCIsXCJldmVyXCIsXCJldmVyeVwiLFwiZXZlcnl0aGluZ1wiLFwiZXhhY3RcIixcImV4Y2VwdFwiLFwiZXhjaXRlXCIsXCJleGNsYWltXCIsXCJleHBsYWluXCIsXCJleWVcIixcImZhY2VcIixcImZhY3RcIixcImZhaXJcIixcImZhbGxcIixcImZhbWlseVwiLFwiZmFyXCIsXCJmYXJtXCIsXCJmYXJtZXJcIixcImZhcnRoZXJcIixcImZhc3RcIixcImZhdFwiLFwiZmF0aGVyXCIsXCJmZWF0aGVyXCIsXCJmZWVkXCIsXCJmZWVsXCIsXCJmZWV0XCIsXCJmZWxsXCIsXCJmZWxsb3dcIixcImZlbHRcIixcImZlbmNlXCIsXCJmZXdcIixcImZpZWxkXCIsXCJmaWVyY2VcIixcImZpZ2h0XCIsXCJmaWd1cmVcIixcImZpbGxcIixcImZpbmFsXCIsXCJmaW5kXCIsXCJmaW5lXCIsXCJmaW5nZXJcIixcImZpbmlzaFwiLFwiZmlyZVwiLFwiZmlyc3RcIixcImZpc2hcIixcImZpdmVcIixcImZsYWdcIixcImZsYXNoXCIsXCJmbGF0XCIsXCJmbGV3XCIsXCJmbG9vclwiLFwiZmxvd2VyXCIsXCJmbHlcIixcImZvbGxvd1wiLFwiZm9vZFwiLFwiZm9yXCIsXCJmb3Jlc3RcIixcImZvcmdldFwiLFwiZm9ydGhcIixcImZvdW5kXCIsXCJmb3VyXCIsXCJmb3VydGhcIixcImZveFwiLFwiZnJlc2hcIixcImZyaWVuZFwiLFwiZnJpZ2h0ZW5cIixcImZyb2dcIixcImZyb21cIixcImZyb250XCIsXCJmcnVpdFwiLFwiZnVsbFwiLFwiZnVuXCIsXCJmdW5ueVwiLFwiZnVyXCIsXCJnXCIsXCJnYW1lXCIsXCJnYXJkZW5cIixcImdhc3BcIixcImdhdGVcIixcImdhdmVcIixcImdldFwiLFwiZ2lhbnRcIixcImdpZnRcIixcImdpcmxcIixcImdpdmVcIixcImdsYWRcIixcImdsYXNzXCIsXCJnb1wiLFwiZ29hdFwiLFwiZ29uZVwiLFwiZ29vZFwiLFwiZ290XCIsXCJncmFuZGZhdGhlclwiLFwiZ3JhbmRtb3RoZXJcIixcImdyYXNzXCIsXCJncmF5XCIsXCJncmVhdFwiLFwiZ3JlZW5cIixcImdyZXdcIixcImdyaW5cIixcImdyb3VuZFwiLFwiZ3JvdXBcIixcImdyb3dcIixcImdyb3dsXCIsXCJndWVzc1wiLFwiZ3VuXCIsXCJoXCIsXCJoYWRcIixcImhhaXJcIixcImhhbGZcIixcImhhbGxcIixcImhhbmRcIixcImhhbmRsZVwiLFwiaGFuZ1wiLFwiaGFwcGVuXCIsXCJoYXBwaW5lc3NcIixcImhhcHB5XCIsXCJoYXJkXCIsXCJoYXJtXCIsXCJoYXNcIixcImhhdFwiLFwiaGF0ZVwiLFwiaGF2ZVwiLFwiaGVcIixcImhlJ3NcIixcImhlYWRcIixcImhlYXJcIixcImhlYXJkXCIsXCJoZWF2eVwiLFwiaGVsZFwiLFwiaGVsbG9cIixcImhlbHBcIixcImhlblwiLFwiaGVyXCIsXCJoZXJlXCIsXCJoZXJzZWxmXCIsXCJoaWRcIixcImhpZGVcIixcImhpZ2hcIixcImhpbGxcIixcImhpbVwiLFwiaGltc2VsZlwiLFwiaGlzXCIsXCJoaXRcIixcImhvbGRcIixcImhvbGVcIixcImhvbGlkYXlcIixcImhvbWVcIixcImhvbmV5XCIsXCJob3BcIixcImhvcm5cIixcImhvcnNlXCIsXCJob3RcIixcImhvdXJcIixcImhvdXNlXCIsXCJob3dcIixcImhvd2xcIixcImh1bVwiLFwiaHVuZHJlZFwiLFwiaHVuZ1wiLFwiaHVuZ3J5XCIsXCJodW50XCIsXCJodXJyeVwiLFwiaHVydFwiLFwiaHVzYmFuZFwiLFwiaVwiLFwiaSdsbFwiLFwiaSdtXCIsXCJpY2VcIixcImlkZWFcIixcImlmXCIsXCJpbWFnaW5lXCIsXCJpbXBvcnRhbnRcIixcImluXCIsXCJpbmNoXCIsXCJpbmRlZWRcIixcImluc2lkZVwiLFwiaW5zdGVhZFwiLFwiaW50b1wiLFwiaW52aXRlXCIsXCJpc1wiLFwiaXRcIixcIml0J3NcIixcIml0c1wiLFwialwiLFwiamFja2V0XCIsXCJqYXJcIixcImpldFwiLFwiam9iXCIsXCJqb2luXCIsXCJqb2tlXCIsXCJqb3lcIixcImp1bXBcIixcImp1c3RcIixcImtcIixcImtlZXBcIixcImtlcHRcIixcImtleVwiLFwia2lja1wiLFwia2lsbFwiLFwia2luZFwiLFwia2luZ1wiLFwia2l0Y2hlblwiLFwia2l0dGVuXCIsXCJrbmVlXCIsXCJrbmV3XCIsXCJrbm9ja1wiLFwia25vd1wiLFwibFwiLFwibGFkZGVyXCIsXCJsYWR5XCIsXCJsYWlkXCIsXCJsYWtlXCIsXCJsYW5kXCIsXCJsYXJnZVwiLFwibGFzdFwiLFwibGF0ZVwiLFwibGF1Z2hcIixcImxheVwiLFwibGF6eVwiLFwibGVhZFwiLFwibGVhcFwiLFwibGVhcm5cIixcImxlYXN0XCIsXCJsZWF2ZVwiLFwibGVmdFwiLFwibGVnXCIsXCJsZXNzXCIsXCJsZXRcIixcImxldCdzXCIsXCJsZXR0ZXJcIixcImxpY2tcIixcImxpZnRcIixcImxpZ2h0XCIsXCJsaWtlXCIsXCJsaW5lXCIsXCJsaW9uXCIsXCJsaXN0XCIsXCJsaXN0ZW5cIixcImxpdHRsZVwiLFwibGl2ZVwiLFwibG9hZFwiLFwibG9uZ1wiLFwibG9va1wiLFwibG9zdFwiLFwibG90XCIsXCJsb3VkXCIsXCJsb3ZlXCIsXCJsb3dcIixcImx1Y2tcIixcImx1bXBcIixcImx1bmNoXCIsXCJtXCIsXCJtYWNoaW5lXCIsXCJtYWRlXCIsXCJtYWdpY1wiLFwibWFpbFwiLFwibWFrZVwiLFwibWFuXCIsXCJtYW55XCIsXCJtYXJjaFwiLFwibWFya1wiLFwibWFya2V0XCIsXCJtYXN0ZXJcIixcIm1hdHRlclwiLFwibWF5XCIsXCJtYXliZVwiLFwibWVcIixcIm1lYW5cIixcIm1lYW50XCIsXCJtZWF0XCIsXCJtZWV0XCIsXCJtZWx0XCIsXCJtZW5cIixcIm1lcnJ5XCIsXCJtZXRcIixcIm1pZGRsZVwiLFwibWlnaHRcIixcIm1pbGVcIixcIm1pbGtcIixcIm1pbGttYW5cIixcIm1pbmRcIixcIm1pbmVcIixcIm1pbnV0ZVwiLFwibWlzc1wiLFwibWlzdGFrZVwiLFwibW9tZW50XCIsXCJtb25leVwiLFwibW9ua2V5XCIsXCJtb250aFwiLFwibW9yZVwiLFwibW9ybmluZ1wiLFwibW9zdFwiLFwibW90aGVyXCIsXCJtb3VudGFpblwiLFwibW91c2VcIixcIm1vdXRoXCIsXCJtb3ZlXCIsXCJtdWNoXCIsXCJtdWRcIixcIm11c2ljXCIsXCJtdXN0XCIsXCJteVwiLFwiblwiLFwibmFtZVwiLFwibmVhclwiLFwibmVja1wiLFwibmVlZFwiLFwibmVlZGxlXCIsXCJuZWlnaGJvclwiLFwibmVpZ2hib3Job29kXCIsXCJuZXN0XCIsXCJuZXZlclwiLFwibmV3XCIsXCJuZXh0XCIsXCJuaWJibGVcIixcIm5pY2VcIixcIm5pZ2h0XCIsXCJuaW5lXCIsXCJub1wiLFwibm9kXCIsXCJub2lzZVwiLFwibm9uZVwiLFwibm9ydGhcIixcIm5vc2VcIixcIm5vdFwiLFwibm90ZVwiLFwibm90aGluZ1wiLFwibm90aWNlXCIsXCJub3dcIixcIm51bWJlclwiLFwib1wiLFwib2NlYW5cIixcIm9mXCIsXCJvZmZcIixcIm9mZmVyXCIsXCJvZnRlblwiLFwib2hcIixcIm9sZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25seVwiLFwib3BlblwiLFwib3JcIixcIm9yYW5nZVwiLFwib3JkZXJcIixcIm90aGVyXCIsXCJvdXJcIixcIm91dFwiLFwib3V0c2lkZVwiLFwib3ZlclwiLFwib3dsXCIsXCJvd25cIixcInBcIixcInBhY2tcIixcInBhaWRcIixcInBhaWxcIixcInBhaW50XCIsXCJwYWlyXCIsXCJwYWxhY2VcIixcInBhblwiLFwicGFwZXJcIixcInBhcmFkZVwiLFwicGFyZW50XCIsXCJwYXJrXCIsXCJwYXJ0XCIsXCJwYXJ0eVwiLFwicGFzc1wiLFwicGFzdFwiLFwicGFzdHVyZVwiLFwicGF0aFwiLFwicGF3XCIsXCJwYXlcIixcInBlYW51dFwiLFwicGVla1wiLFwicGVuXCIsXCJwZW5ueVwiLFwicGVvcGxlXCIsXCJwZXJmZWN0XCIsXCJwZXJoYXBzXCIsXCJwZXJzb25cIixcInBldFwiLFwicGlja1wiLFwicGlja2V0XCIsXCJwaWNuaWNcIixcInBpY3R1cmVcIixcInBpZVwiLFwicGllY2VcIixcInBpZ1wiLFwicGlsZVwiLFwicGluXCIsXCJwbGFjZVwiLFwicGxhblwiLFwicGxhbnRcIixcInBsYXlcIixcInBsZWFzYW50XCIsXCJwbGVhc2VcIixcInBsZW50eVwiLFwicGxvd1wiLFwicG9pbnRcIixcInBva2VcIixcInBvbGVcIixcInBvbGljZW1hblwiLFwicG9uZFwiLFwicG9vclwiLFwicG9wXCIsXCJwb3N0bWFuXCIsXCJwb3RcIixcInBvdGF0b1wiLFwicG91bmRcIixcInBvdXJcIixcInByYWN0aWNlXCIsXCJwcmVwYXJlXCIsXCJwcmVzZW50XCIsXCJwcmV0ZW5kXCIsXCJwcmV0dHlcIixcInByaW5jZXNzXCIsXCJwcml6ZVwiLFwicHJvYmFibHlcIixcInByb2JsZW1cIixcInByb21pc2VcIixcInByb3RlY3RcIixcInByb3VkXCIsXCJwdWZmXCIsXCJwdWxsXCIsXCJwdXBweVwiLFwicHVzaFwiLFwicHV0XCIsXCJxXCIsXCJxdWVlblwiLFwicXVlZXJcIixcInF1aWNrXCIsXCJxdWlldFwiLFwicXVpdGVcIixcInJcIixcInJhYmJpdFwiLFwicmFjY29vblwiLFwicmFjZVwiLFwicmFkaW9cIixcInJhZ1wiLFwicmFpblwiLFwicmFpc2VcIixcInJhblwiLFwicmFuY2hcIixcInJhbmdcIixcInJlYWNoXCIsXCJyZWFkXCIsXCJyZWFkeVwiLFwicmVhbFwiLFwicmVkXCIsXCJyZWZ1c2VcIixcInJlbWVtYmVyXCIsXCJyZXBseVwiLFwicmVzdFwiLFwicmV0dXJuXCIsXCJyZXdhcmRcIixcInJpY2hcIixcInJpZGVcIixcInJpZ2h0XCIsXCJyaW5nXCIsXCJyaXZlclwiLFwicm9hZFwiLFwicm9hclwiLFwicm9ja1wiLFwicm9kZVwiLFwicm9sbFwiLFwicm9vZlwiLFwicm9vbVwiLFwicm9wZVwiLFwicm91bmRcIixcInJvd1wiLFwicnViXCIsXCJydWxlXCIsXCJydW5cIixcInJ1c2hcIixcInNcIixcInNhZFwiLFwic2FmZVwiLFwic2FpZFwiLFwic2FpbFwiLFwic2FsZVwiLFwic2FsdFwiLFwic2FtZVwiLFwic2FuZFwiLFwic2FuZ1wiLFwic2F0XCIsXCJzYXZlXCIsXCJzYXdcIixcInNheVwiLFwic2NhcmVcIixcInNjaG9vbFwiLFwic2NvbGRcIixcInNjcmF0Y2hcIixcInNjcmVhbVwiLFwic2VhXCIsXCJzZWF0XCIsXCJzZWNvbmRcIixcInNlY3JldFwiLFwic2VlXCIsXCJzZWVkXCIsXCJzZWVtXCIsXCJzZWVuXCIsXCJzZWxsXCIsXCJzZW5kXCIsXCJzZW50XCIsXCJzZXZlblwiLFwic2V2ZXJhbFwiLFwic2V3XCIsXCJzaGFkb3dcIixcInNoYWtlXCIsXCJzaGFsbFwiLFwic2hhcGVcIixcInNoZVwiLFwic2hlZXBcIixcInNoZWxsXCIsXCJzaGluZVwiLFwic2hpcFwiLFwic2hvZVwiLFwic2hvbmVcIixcInNob29rXCIsXCJzaG9vdFwiLFwic2hvcFwiLFwic2hvcmVcIixcInNob3J0XCIsXCJzaG90XCIsXCJzaG91bGRcIixcInNob3dcIixcInNpY2tcIixcInNpZGVcIixcInNpZ2h0XCIsXCJzaWduXCIsXCJzaWduYWxcIixcInNpbGVudFwiLFwic2lsbHlcIixcInNpbHZlclwiLFwic2luY2VcIixcInNpbmdcIixcInNpc3RlclwiLFwic2l0XCIsXCJzaXhcIixcInNpemVcIixcInNraXBcIixcInNreVwiLFwic2xlZFwiLFwic2xlZXBcIixcInNsaWRcIixcInNsaWRlXCIsXCJzbG93XCIsXCJzbWFsbFwiLFwic21hcnRcIixcInNtZWxsXCIsXCJzbWlsZVwiLFwic21va2VcIixcInNuYXBcIixcInNuaWZmXCIsXCJzbm93XCIsXCJzb1wiLFwic29mdFwiLFwic29sZFwiLFwic29tZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZXNcIixcInNvblwiLFwic29uZ1wiLFwic29vblwiLFwic29ycnlcIixcInNvdW5kXCIsXCJzcGVha1wiLFwic3BlY2lhbFwiLFwic3BlbmRcIixcInNwaWxsXCIsXCJzcGxhc2hcIixcInNwb2tlXCIsXCJzcG90XCIsXCJzcHJlYWRcIixcInNwcmluZ1wiLFwic3F1aXJyZWxcIixcInN0YW5kXCIsXCJzdGFyXCIsXCJzdGFydFwiLFwic3RhdGlvblwiLFwic3RheVwiLFwic3RlcFwiLFwic3RpY2tcIixcInN0aWxsXCIsXCJzdG9uZVwiLFwic3Rvb2RcIixcInN0b3BcIixcInN0b3JlXCIsXCJzdG9yeVwiLFwic3RyYWlnaHRcIixcInN0cmFuZ2VcIixcInN0cmVldFwiLFwic3RyZXRjaFwiLFwic3RyaWtlXCIsXCJzdHJvbmdcIixcInN1Y2hcIixcInN1ZGRlblwiLFwic3VnYXJcIixcInN1aXRcIixcInN1bW1lclwiLFwic3VuXCIsXCJzdXBwZXJcIixcInN1cHBvc2VcIixcInN1cmVcIixcInN1cnByaXNlXCIsXCJzd2FsbG93XCIsXCJzd2VldFwiLFwic3dpbVwiLFwic3dpbmdcIixcInRcIixcInRhYmxlXCIsXCJ0YWlsXCIsXCJ0YWtlXCIsXCJ0YWxrXCIsXCJ0YWxsXCIsXCJ0YXBcIixcInRhc3RlXCIsXCJ0ZWFjaFwiLFwidGVhY2hlclwiLFwidGVhbVwiLFwidGVhclwiLFwidGVldGhcIixcInRlbGVwaG9uZVwiLFwidGVsbFwiLFwidGVuXCIsXCJ0ZW50XCIsXCJ0aGFuXCIsXCJ0aGFua1wiLFwidGhhdFwiLFwidGhhdCdzXCIsXCJ0aGVcIixcInRoZWlyXCIsXCJ0aGVtXCIsXCJ0aGVuXCIsXCJ0aGVyZVwiLFwidGhlc2VcIixcInRoZXlcIixcInRoaWNrXCIsXCJ0aGluXCIsXCJ0aGluZ1wiLFwidGhpbmtcIixcInRoaXJkXCIsXCJ0aGlzXCIsXCJ0aG9zZVwiLFwidGhvdWdoXCIsXCJ0aG91Z2h0XCIsXCJ0aHJlZVwiLFwidGhyZXdcIixcInRocm91Z2hcIixcInRocm93XCIsXCJ0aWVcIixcInRpZ2VyXCIsXCJ0aWdodFwiLFwidGltZVwiLFwidGlueVwiLFwidGlwXCIsXCJ0aXJlXCIsXCJ0b1wiLFwidG9kYXlcIixcInRvZVwiLFwidG9nZXRoZXJcIixcInRvbGRcIixcInRvbW9ycm93XCIsXCJ0b29cIixcInRvb2tcIixcInRvb3RoXCIsXCJ0b3BcIixcInRvdWNoXCIsXCJ0b3dhcmRcIixcInRvd2VyXCIsXCJ0b3duXCIsXCJ0b3lcIixcInRyYWNrXCIsXCJ0cmFmZmljXCIsXCJ0cmFpblwiLFwidHJhcFwiLFwidHJlZVwiLFwidHJpY2tcIixcInRyaXBcIixcInRyb3RcIixcInRydWNrXCIsXCJ0cnVlXCIsXCJ0cnVua1wiLFwidHJ5XCIsXCJ0dXJrZXlcIixcInR1cm5cIixcInR1cnRsZVwiLFwidHdlbHZlXCIsXCJ0d2luXCIsXCJ0d29cIixcInVcIixcInVnbHlcIixcInVuY2xlXCIsXCJ1bmRlclwiLFwidW5oYXBweVwiLFwidW50aWxcIixcInVwXCIsXCJ1cG9uXCIsXCJ1cHN0YWlyc1wiLFwidXNcIixcInVzZVwiLFwidXN1YWxcIixcInZcIixcInZhbGxleVwiLFwidmVnZXRhYmxlXCIsXCJ2ZXJ5XCIsXCJ2aWxsYWdlXCIsXCJ2aXNpdFwiLFwidm9pY2VcIixcIndcIixcIndhZ1wiLFwid2Fnb25cIixcIndhaXRcIixcIndha2VcIixcIndhbGtcIixcIndhbnRcIixcIndhclwiLFwid2FybVwiLFwid2FzXCIsXCJ3YXNoXCIsXCJ3YXN0ZVwiLFwid2F0Y2hcIixcIndhdGVyXCIsXCJ3YXZlXCIsXCJ3YXlcIixcIndlXCIsXCJ3ZWFyXCIsXCJ3ZWF0aGVyXCIsXCJ3ZWVrXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXRcIixcIndoYXRcIixcIndoZWVsXCIsXCJ3aGVuXCIsXCJ3aGVyZVwiLFwid2hpY2hcIixcIndoaWxlXCIsXCJ3aGlzcGVyXCIsXCJ3aGlzdGxlXCIsXCJ3aGl0ZVwiLFwid2hvXCIsXCJ3aG9sZVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lkZVwiLFwid2lmZVwiLFwid2lsbFwiLFwid2luXCIsXCJ3aW5kXCIsXCJ3aW5kb3dcIixcIndpbmdcIixcIndpbmtcIixcIndpbnRlclwiLFwid2lyZVwiLFwid2lzZVwiLFwid2lzaFwiLFwid2l0aFwiLFwid2l0aG91dFwiLFwid29rZVwiLFwid29sZlwiLFwid29tYW5cIixcIndvbWVuXCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b29kXCIsXCJ3b3JkXCIsXCJ3b3JlXCIsXCJ3b3JrXCIsXCJ3b3JsZFwiLFwid29ybVwiLFwid29ycnlcIixcIndvcnRoXCIsXCJ3b3VsZFwiLFwid3JvbmdcIixcInhcIixcInlcIixcInlhcmRcIixcInllYXJcIixcInllbGxcIixcInllbGxvd1wiLFwieWVzXCIsXCJ5ZXRcIixcInlvdVwiLFwieW91bmdcIixcInlvdXJcIixcInpcIixcInpvb1wiXTtmdW5jdGlvbiBmZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPy42NTkrLjEyMSpuLndvcmQvbi5zZW50ZW5jZSsuMDgyKihuLnVuZmFtaWxpYXJXb3JkfHwwKS9uLndvcmQqMTAwOk51bWJlci5OYU59dmFyIEdlPWEoNDUwKSx3ZT1hKDUpLHZlPXthYmFsb25lOjQsYWJhcmU6MyxhYmJydXp6ZXNlOjQsYWJlZDoyLGFib3JpZ2luZTo1LGFicnV6emVzZTo0LGFjcmVhZ2U6MyxhZGFtZTozLGFkaWV1OjIsYWRvYmU6MyxhbmVtb25lOjQsYW55b25lOjMsYXBhY2hlOjMsYXBocm9kaXRlOjQsYXBvc3Ryb3BoZTo0LGFyaWFkbmU6NCxjYWZlOjIsY2FsbGlvcGU6NCxjYXRhc3Ryb3BoZTo0LGNoaWxlOjIsY2hsb2U6MixjaXJjZToyLGNveW90ZTozLGRhcGhuZToyLGVwaXRvbWU6NCxldXJ5ZGljZTo0LGV1dGVycGU6MyxldmVyeToyLGV2ZXJ5d2hlcmU6Myxmb3JldmVyOjMsZ2V0aHNlbWFuZTo0LGd1YWNhbW9sZTo0LGhlcm1pb25lOjQsaHlwZXJib2xlOjQsamVzc2U6MixqdWtlYm94OjIsa2FyYXRlOjMsbWFjaGV0ZTozLG1heWJlOjIsbmFpdmU6MixuZXdseXdlZDozLHBlbmVsb3BlOjQscGVvcGxlOjIscGVyc2VwaG9uZTo0LHBob2ViZToyLHB1bHNlOjEscXVldWU6MSxyZWNpcGU6MyxyaXZlcmJlZDozLHNlc2FtZTozLHNob3JlbGluZToyLHNpbWlsZTozLHNudWZmbGV1cGFndXM6NSxzb21ldGltZXM6MixzeW5jb3BlOjMsdGFtYWxlOjMsd2F0ZXJiZWQ6Myx3ZWRuZXNkYXk6Mix5b3NlbWl0ZTo0LHpvZToyfSxrZT17fS5oYXNPd25Qcm9wZXJ0eSxSZT1uZXcgUmVnRXhwKFtcImF3ZSgkfGR8c28pXCIsXCJjaWEoPzpsfCQpXCIsXCJ0aWFcIixcImNpdXNcIixcImNpb3VzXCIsXCJbXmFlaW91XWdpdVwiLFwiW2FlaW91eV1bXmFlaW91eV1pb25cIixcImlvdVwiLFwic2lhJFwiLFwiZW91cyRcIixcIltvYV1ndWUkXCIsXCIuW15hZWl1b3ljZ2x0ZGJdezIsfWVkJFwiLFwiLmVseSRcIixcIl5qdWFcIixcInVhaVwiLFwiZWF1XCIsXCJeYnVzaSRcIixcIig/OlthZWlvdXldKD86XCIrW1wiW2JjZmdrbG1ucHJzdnd4eXpdXCIsXCJjaFwiLFwiZGdcIixcImdbaG5dXCIsXCJsY2hcIixcImxbbHZdXCIsXCJtbVwiLFwibmNoXCIsXCJuW2Nnbl1cIixcInJbYmNuc3ZdXCIsXCJzcXVcIixcInNbY2hrbHNdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillZCQpXCIsXCIoPzpbYWVpb3V5XSg/OlwiK1tcIltiZGZrbG1ucHJzdHZ5XVwiLFwiY2hcIixcImdbaG5dXCIsXCJsY2hcIixcImxbbHZdXCIsXCJtbVwiLFwibmNoXCIsXCJublwiLFwicltuc3ZdXCIsXCJzcXVcIixcInNbY2tsc3RdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillcyQpXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxZZT1uZXcgUmVnRXhwKFwiW2FlaW91eV0oPzpcIitbXCJbYmNkZmdrbG1ucHJzdHZ5el1cIixcImNoXCIsXCJkZ1wiLFwiZ1tobl1cIixcImxbbHZdXCIsXCJtbVwiLFwibltjZ25zXVwiLFwicltjbnN2XVwiLFwic3F1XCIsXCJzW2NrbHN0XVwiLFwidGhcIl0uam9pbihcInxcIikrXCIpZSRcIixcImdcIiksQWU9bmV3IFJlZ0V4cChcIig/OlwiK1tcIihbXmFlaW91eV0pXFxcXDFsXCIsXCJbXmFlaW91eV1pZSg/OnJ8cz90KVwiLFwiW2FlaW91eW1dYmxcIixcImVvXCIsXCJpc21cIixcImFzbVwiLFwidGhtXCIsXCJkbnRcIixcInNudFwiLFwidWl0eVwiLFwiZGVhXCIsXCJnZWFuXCIsXCJvYVwiLFwidWFcIixcInJlYWN0P1wiLFwib3JiZWRcIixcInNocmVkXCIsXCJlaW5ncz9cIixcIlthZWlvdXldc2g/ZVtyc11cIl0uam9pbihcInxcIikrXCIpJFwiLFwiZ1wiKSxQZT1uZXcgUmVnRXhwKFtcImNyZWF0KD8hdSlcIixcIlteZ3FddWFbXmF1aWVvXVwiLFwiW2FlaW91XXszfVwiLFwiXig/OmlhfG1jfGNvYVtkZ2x4XS4pXCIsXCJecmUoYXBwfGVzfGltfHVzKVwiLFwiKHRofGQpZWlzdFwiXS5qb2luKFwifFwiKSxcImdcIiksQ2U9bmV3IFJlZ0V4cChbXCJbXmFlaW91XXlbYWVdXCIsXCJbXmxdbGllblwiLFwicmlldFwiLFwiZGllblwiLFwiaXVcIixcImlvXCIsXCJpaVwiLFwidWVuXCIsXCJbYWVpbG90dV1yZWFsXCIsXCJyZWFsW2FlaWxvdHVdXCIsXCJpZWxsXCIsXCJlb1teYWVpb3VdXCIsXCJbYWVpb3VdeVthZWlvdV1cIl0uam9pbihcInxcIiksXCJnXCIpLFRlPS9bXnNdaWEvLHhlPW5ldyBSZWdFeHAoW1wiXig/OlwiK1tcInVuXCIsXCJmb3JlXCIsXCJ3YXJlXCIsXCJub25lP1wiLFwib3V0XCIsXCJwb3N0XCIsXCJzdWJcIixcInByZVwiLFwicHJvXCIsXCJkaXNcIixcInNpZGVcIixcInNvbWVcIl0uam9pbihcInxcIikrXCIpXCIsXCIoPzpcIitbXCJseVwiLFwibGVzc1wiLFwic29tZVwiLFwiZnVsXCIsXCJlcnM/XCIsXCJuZXNzXCIsXCJjaWFucz9cIixcIm1lbnRzP1wiLFwiZXR0ZXM/XCIsXCJ2aWxsZXM/XCIsXCJzaGlwcz9cIixcInNpZGVzP1wiLFwicG9ydHM/XCIsXCJzaGlyZXM/XCIsXCJbZ25zdF1pb24oPzplZHxzKT9cIl0uam9pbihcInxcIikrXCIpJFwiXS5qb2luKFwifFwiKSxcImdcIiksemU9bmV3IFJlZ0V4cChbXCJeKD86XCIrW1wiYWJvdmVcIixcImFudGlcIixcImFudGVcIixcImNvdW50ZXJcIixcImh5cGVyXCIsXCJhZm9yZVwiLFwiYWdyaVwiLFwiaW5mcmFcIixcImludHJhXCIsXCJpbnRlclwiLFwib3ZlclwiLFwic2VtaVwiLFwidWx0cmFcIixcInVuZGVyXCIsXCJleHRyYVwiLFwiZGlhXCIsXCJtaWNyb1wiLFwibWVnYVwiLFwia2lsb1wiLFwicGljb1wiLFwibmFub1wiLFwibWFjcm9cIixcInNvbWVyXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLFwiKD86ZnVsbHl8YmVycnl8d29tYW58d29tZW58ZWRseXx1bmlvbnwoKD86W2JjZGZnaGprbG1ucHFyc3R2d3h6XSl8W2FlaW91XSl5ZT9pbmcpJFwiXS5qb2luKFwifFwiKSxcImdcIiksRWU9LyhjcmVhdGlvbnM/fG9sb2d5fG9sb2dpc3R8b25vbXl8b25vbWlzdCkkL2c7ZnVuY3Rpb24gQmUobil7dmFyIGUsYSxpLHIsdCxvPTA7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBvO2lmKG4ubGVuZ3RoPDMpcmV0dXJuIDE7aWYoa2UuY2FsbCh2ZSxuKSlyZXR1cm4gdmVbbl07aWYoYT1HZShuLDEpLGtlLmNhbGwodmUsYSkpcmV0dXJuIHZlW2FdO2ZvcihyPXMoMSksdD1zKC0xKSxpPShuPW4ucmVwbGFjZShFZSxNKDMpKS5yZXBsYWNlKHplLE0oMikpLnJlcGxhY2UoeGUsTSgxKSkpLnNwbGl0KC9bXmFlaW91eV0rLyksZT0tMTsrK2U8aS5sZW5ndGg7KVwiXCIhPT1pW2VdJiZvKys7cmV0dXJuIG4ucmVwbGFjZShSZSx0KS5yZXBsYWNlKFllLHQpLG4ucmVwbGFjZShBZSxyKS5yZXBsYWNlKFBlLHIpLnJlcGxhY2UoQ2UscikucmVwbGFjZShUZSxyKSxvfHwxO2Z1bmN0aW9uIE0obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8rPW4sXCJcIn19ZnVuY3Rpb24gcyhuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG8rPW4sZX19fWNvbnN0IE5lPXt9Lmhhc093blByb3BlcnR5LFplPU1hdGguZmxvb3IsRmU9TWF0aC5yb3VuZCxJZT1NYXRoLmNlaWwsVWU9TWF0aC5zcXJ0O2Z1bmN0aW9uIGplKG49e30pe2NvbnN0IGU9bi5hZ2V8fDE2LGE9bi50aHJlc2hvbGR8fC41NzE0Mjg1NzE0Mjg1NzE0LGk9bnVsbD09PW4ubWluV29yZHN8fHZvaWQgMD09PW4ubWluV29yZHM/NTpuLm1pbldvcmRzO3JldHVybihuLHIpPT57X24obixcIlNlbnRlbmNlTm9kZVwiLChuPT57Y29uc3QgdD17fSxvPXt9O2xldCBNPTAscz0wLGw9MCxjPTAsUz0wLHU9MCxkPTA7aWYoX24obixcIldvcmROb2RlXCIsKG49Pntjb25zdCBlPXFuKG4pLGE9ZS50b0xvd2VyQ2FzZSgpLGk9ZnVuY3Rpb24obil7Zm9yKHZhciBlPXdlKFN0cmluZyhuKSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bJ+KAmV0vZyxcIlwiKS5zcGxpdCgvXFxiL2cpLGE9LTEsaT0wOysrYTxlLmxlbmd0aDspaSs9QmUoZVthXS5yZXBsYWNlKC9bXmEtel0vZyxcIlwiKSk7cmV0dXJuIGl9KGUpO3UrKyxjKz1pLGQrPWUubGVuZ3RoLGk+PTMmJihsKyssZS5jaGFyQ29kZUF0KDApPT09YS5jaGFyQ29kZUF0KDApJiZNKyspLERlLmluY2x1ZGVzKGEpJiYhTmUuY2FsbCh0LGEpJiYodFthXT0hMCxzKyspLG1lLmluY2x1ZGVzKGEpJiYhTmUuY2FsbChvLGEpJiYob1thXT0hMCxTKyspfSkpLHU+PWkpe2NvbnN0IGk9e2NvbXBsZXhQb2x5c2lsbGFiaWNXb3JkOk0scG9seXNpbGxhYmljV29yZDpsLHVuZmFtaWxpYXJXb3JkOnUtcyxkaWZmaWN1bHRXb3JkOnUtUyxzeWxsYWJsZTpjLHNlbnRlbmNlOjEsd29yZDp1LGNoYXJhY3RlcjpkLGxldHRlcjpkfSx0PVtMZSgocD1oZShpKSxoPU1hdGguZmxvb3IocCksaDw1P2g9NDpoPjkmJihoPTEwKSxwZVtoXS5jb25jYXQoKSlbMV0pLExlKHVlKGkpKSxMZShkZShpKSksKG09Z2UoaSksMjAtWmUobS8xMCkpLHFlKGJlKGkpKSxMZSh5ZShpKSksTGUoZmUoaSkpXTtsZXQgbz0tMSxnPTA7Zm9yKDsrK288dC5sZW5ndGg7KXRbb10+ZSYmZysrO2NvbnN0IHk9Zy90Lmxlbmd0aDtpZih5Pj1hKXtjb25zdCBlPWcrXCIvXCIrdC5sZW5ndGg7T2JqZWN0LmFzc2lnbihyLm1lc3NhZ2UoXCJIYXJkIHRvIHJlYWQgc2VudGVuY2UgKGNvbmZpZGVuY2U6IFwiK2UrXCIpXCIsbixcInJldGV4dC1yZWFkYWJpbGl0eTpyZWFkYWJpbGl0eVwiKSx7YWN0dWFsOnFuKG4pLGV4cGVjdGVkOltdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtcmVhZGFiaWxpdHkjcmVhZG1lXCIsY29uZmlkZW5jZTp5LGNvbmZpZGVuY2VMYWJlbDplfSl9fXZhciBtLHAsaDtyZXR1cm4gUW59KSl9fWZ1bmN0aW9uIExlKG4pe3JldHVybiBGZShuKzUpfWZ1bmN0aW9uIHFlKG4pe3JldHVybiBJZShVZShuKSsyLjUpfWNvbnN0IEhlPVduKFwiU2VudGVuY2VOb2RlXCIpLEplPVduKFwiV2hpdGVTcGFjZU5vZGVcIiksT2U9XCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiO2Z1bmN0aW9uIFhlKG49e30pe2xldCBlPW4ucHJlZmVycmVkO2lmKFwibmV3bGluZVwiPT09ZSYmKGU9MCksbnVsbCE9ZSYmXCJzcGFjZVwiIT09ZXx8KGU9MSksXCJkb3VibGUtc3BhY2VcIj09PWUmJihlPTIpLFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBgb3B0aW9ucy5wcmVmZXJyZWRgIHRvIGJlIGAnc3BhY2UnYCwgYCduZXdsaW5lJ2AsIG9yIGEgYG51bWJlcmBcIik7aWYoZTwwfHxlPjIpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYG9wdGlvbnMucHJlZmVycmVkYCB0byBiZSBgJ3NwYWNlJ2AsIGAnbmV3bGluZSdgLCBvciBhIGBudW1iZXJgIGJldHdlZW4gKGluY2x1ZGluZykgYDBgIGFuZCBgMmBcIik7cmV0dXJuKG4sYSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57bGV0IGk9LTE7Zm9yKDsrK2k8bi5jaGlsZHJlbi5sZW5ndGg7KXtjb25zdCByPW4uY2hpbGRyZW5baV07aWYoIUhlKG4uY2hpbGRyZW5baS0xXSl8fCFKZShyKXx8IUhlKG4uY2hpbGRyZW5baSsxXSkpY29udGludWU7Y29uc3QgdD1xbihyKTtpZighL14gKyQvLnRlc3QodCkpY29udGludWU7Y29uc3Qgbz10Lmxlbmd0aDtsZXQgTTtpZigwPT09ZSlNPVwiRXhwZWN0ZWQgYSBuZXdsaW5lIGJldHdlZW4gc2VudGVuY2VzLCBub3QgYFwiK28rXCJgIHNwYWNlXCIrKDE9PT1vP1wiXCI6XCJzXCIpO2Vsc2V7aWYobz09PWUpY29udGludWU7TT1cIkV4cGVjdGVkIGBcIitlK1wiYCBzcGFjZVwiKygxPT09ZT9cIlwiOlwic1wiKStcIiBiZXR3ZWVuIHNlbnRlbmNlcywgbm90IGBcIitvK1wiYFwifU9iamVjdC5hc3NpZ24oYS5tZXNzYWdlKE0scixbT2UsMD09PWU/XCJuZXdsaW5lXCI6MT09PWU/XCJzcGFjZVwiOlwiZG91YmxlLXNwYWNlXCJdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6WzA9PT1lP1wiXFxuXCI6MT09PWU/XCIgXCI6XCIgIFwiXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmcjcmVhZG1lXCJ9KX19KSl9fWZ1bmN0aW9uIFZlKG4sZSl7bGV0IGE9KFwic3RyaW5nXCI9PXR5cGVvZiBuP246cW4obikpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgv4oCZL2csXCInXCIpO3JldHVybiBlJiZlLmFsbG93RGFzaGVzfHwoYT1hLnJlcGxhY2UoLy0vZyxcIlwiKSksZSYmZS5hbGxvd0Fwb3N0cm9waGVzfHwoYT1hLnJlcGxhY2UoLycvZyxcIlwiKSksYX1jb25zdCBXZT1bXCItXCIsXCLigJNcIixcIuKAlFwiLFwiOlwiLFwiO1wiXSxLZT17XCIsXCI6W1wiLFwiXSxcIi1cIjpbXCItXCJdLFwi4oCTXCI6W1wi4oCTXCJdLFwi4oCUXCI6W1wi4oCUXCJdLCdcIic6WydcIiddLFwiJ1wiOltcIidcIl0sXCLigJhcIjpbXCLigJlcIl0sXCLigJpcIjpbXCLigJlcIl0sXCLigJlcIjpbXCLigJlcIixcIuKAmlwiXSxcIuKAnFwiOltcIuKAnVwiXSxcIuKAnVwiOltcIuKAnVwiXSxcIuKAnlwiOltcIuKAnVwiLFwi4oCcXCJdLFwiwqtcIjpbXCLCu1wiXSxcIsK7XCI6W1wiwqtcIl0sXCLigLlcIjpbXCLigLpcIl0sXCLigLpcIjpbXCLigLlcIl0sXCIoXCI6W1wiKVwiXSxcIltcIjpbXCJdXCJdLFwie1wiOltcIn1cIl0sXCLin6hcIjpbXCLin6lcIl0sXCLjgIxcIjpbXCLjgI1cIl19LCRlPU9iamVjdC5rZXlzKEtlKTtmdW5jdGlvbiBRZShuLGUpe2lmKCFufHwhbi5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoXCJQYXJlbnQgbXVzdCBiZSBhIG5vZGVcIik7aWYobnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcInR5cGVcImluIGUmJi0xPT09KGU9bi5jaGlsZHJlbi5pbmRleE9mKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJOb2RlIG11c3QgYmUgYSBjaGlsZCBvZiBgcGFyZW50YFwiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8TnVtYmVyLmlzTmFOKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbmRleCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiBCb29sZWFuKCFuYShuLC0xLGUpJiZfZShuLGUsMSxXZSl8fCFuYShuLGUsbi5jaGlsZHJlbi5sZW5ndGgpJiZfZShuLGUsLTEsV2UpfHxmdW5jdGlvbihuLGUpe2NvbnN0IGE9X2UobixlLC0xLCRlKTtpZihhKXJldHVybiBfZShuLGUsMSxLZVtxbihhKV0pfShuLGUpKX1mdW5jdGlvbiBfZShuLGUsYSxpKXtsZXQgcj1lK2E7Zm9yKDtyPi0xJiZyPG4uY2hpbGRyZW4ubGVuZ3RoOyl7Y29uc3QgZT1uLmNoaWxkcmVuW3JdO2lmKFwiV29yZE5vZGVcIj09PWUudHlwZXx8XCJTb3VyY2VOb2RlXCI9PT1lLnR5cGUpcmV0dXJuO2lmKFwiV2hpdGVTcGFjZU5vZGVcIiE9PWUudHlwZSlyZXR1cm4gaS5pbmNsdWRlcyhxbihlKSk/ZTp2b2lkIDA7cis9YX19ZnVuY3Rpb24gbmEobixlLGEpe2Zvcig7KytlPGE7KWlmKFwiV29yZE5vZGVcIj09PW4uY2hpbGRyZW5bZV0udHlwZSlyZXR1cm4hMH1jb25zdCBlYT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhYShuLGUsYSxpKXtjb25zdCByPXtcIipcIjpbXX07bGV0IHQsbyxNPS0xO2lmKG89XCJib29sZWFuXCI9PXR5cGVvZiBpP2k/e2FsbG93QXBvc3Ryb3BoZXM6ITB9Ont9Oml8fHt9LCFufHwhbi50eXBlKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGVcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG9iamVjdCBmb3IgcGhyYXNlc1wiKTtpZihBcnJheS5pc0FycmF5KGUpKWZvcig7KytNPGUubGVuZ3RoOylsKGVbTV0pO2Vsc2UgZm9yKHQgaW4gZSllYS5jYWxsKGUsdCkmJmwodCk7ZnVuY3Rpb24gcyhuLGUsYSl7Y29uc3QgaT1hLmNoaWxkcmVuLHI9ZSx0PW4uc3BsaXQoXCIgXCIpLnNsaWNlKDEpO2xldCBNPS0xO2ZvcihlKys7KytNPHQubGVuZ3RoOyl7Zm9yKDtlPGkubGVuZ3RoJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1pW2VdLnR5cGU7KWUrKztpZighaVtlXXx8XCJXb3JkTm9kZVwiIT09aVtlXS50eXBlfHxcIipcIiE9PXRbTV0mJlZlKHRbTV0sbykhPT1WZShpW2VdLG8pKXJldHVybjtlKyt9cmV0dXJuIGkuc2xpY2UocixlKX1mdW5jdGlvbiBsKG4pe2NvbnN0IGU9VmUobi5zcGxpdChcIiBcIiwxKVswXSxvKTtlYS5jYWxsKHIsZSk/cltlXS5wdXNoKG4pOnJbZV09W25dfV9uKG4sXCJXb3JkTm9kZVwiLCgobixlLGkpPT57Y29uc3QgdD1pO2lmKCF0fHxudWxsPT09ZXx8IW8uYWxsb3dMaXRlcmFscyYmUWUodCxlKSlyZXR1cm47Y29uc3QgTT1WZShuLG8pLGw9cltcIipcIl0uY29uY2F0KGVhLmNhbGwocixNKT9yW01dOltdKTtsZXQgYz0tMTtmb3IoOysrYzxsLmxlbmd0aDspe2NvbnN0IG49cyhsW2NdLGUsdCk7biYmYShuLGUsdCxsW2NdKX19KSl9Y29uc3QgaWE9W1wiYXdva2VuXCIsXCJhd29rZVwiLFwiYmVhdGVuXCIsXCJiZWF0XCIsXCJiZWd1blwiLFwiYmVnYW5cIixcImJlbnRcIixcImJpdHRlblwiLFwiYml0XCIsXCJibGVkXCIsXCJibG93blwiLFwiYmxld1wiLFwiYnJva2VuXCIsXCJicm9rZVwiLFwiYnJvdWdodFwiLFwiYnVpbHRcIixcImJvdWdodFwiLFwiY2F1Z2h0XCIsXCJjaG9zZW5cIixcImNob3NlXCIsXCJkZWFsdFwiLFwiZG9uZVwiLFwiZGlkXCIsXCJkcmF3blwiLFwiZHJld1wiLFwiZHJpdmVuXCIsXCJkcm92ZVwiLFwiZWF0ZW5cIixcImF0ZVwiLFwiZmVkXCIsXCJmZWx0XCIsXCJmb3VnaHRcIixcImZvdW5kXCIsXCJmb3JiaWRkZW5cIixcImZvcmJhZGVcIixcImZvcmdvdHRlblwiLFwiZm9yZ290XCIsXCJmb3JnaXZlblwiLFwiZm9yZ2F2ZVwiLFwiZnJvemVuXCIsXCJmcm96ZVwiLFwiZ290dGVuXCIsXCJnb3RcIixcImdpdmVuXCIsXCJnYXZlXCIsXCJncm91bmRcIixcImdyaW5kZWRcIixcImh1bmdcIixcImhlYXJkXCIsXCJoaWRkZW5cIixcImhpZFwiLFwiaGl0XCIsXCJoZWxkXCIsXCJodXJ0XCIsXCJrZXB0XCIsXCJrbm93blwiLFwia25ld1wiLFwibGFpZFwiLFwibGVkXCIsXCJsZXRcIixcImxvc3RcIixcIm1hZGVcIixcIm1lYW50XCIsXCJtZXRcIixcInBhaWRcIixcInByb3ZlblwiLFwicHJvdmVkXCIsXCJwdXRcIixcInJlYWRcIixcInJpZGRlblwiLFwicm9kZVwiLFwicnVuZ1wiLFwicmFuZ1wiLFwicnVuXCIsXCJyYW5cIixcInNhaWRcIixcInNlZW5cIixcInNhd1wiLFwic29sZFwiLFwic2VudFwiLFwic2hha2VuXCIsXCJzaG9va1wiLFwic2hhdmVkXCIsXCJzaG90XCIsXCJzaG93blwiLFwic2h1dFwiLFwic3VuZ1wiLFwic3Vua1wiLFwic2xhaW5cIixcInNsZXdcIixcInNsaWRcIixcInNwb2tlblwiLFwic3Bva2VcIixcInNwZW50XCIsXCJzcHVuXCIsXCJzcGxpdFwiLFwic3ByZWFkXCIsXCJzdG9sZW5cIixcInN0b2xlXCIsXCJzdHJ1Y2tcIixcInN3ZXB0XCIsXCJzd3VuZ1wiLFwidGFrZW5cIixcInRvb2tcIixcInRhdWdodFwiLFwidG9yblwiLFwidG9yZVwiLFwidG9sZFwiLFwidGhvdWdodFwiLFwidGhyb3duXCIsXCJ0aHJld1wiLFwidW5kZXJnb25lXCIsXCJ1bmRlcndlbnRcIixcInVuZGVyc3Rvb2RcIixcInVwc2V0XCIsXCJ3b2tlblwiLFwid29rZVwiLFwid29yblwiLFwid29yZVwiLFwid29uXCIsXCJ3aXRoZHJhd25cIixcIndpdGhkcmV3XCIsXCJ3cml0dGVuXCIsXCJ3cm90ZVwiLFwiYmVlblwiLFwiYm9yblwiLFwiYmVjb21lXCIsXCJiZXNldFwiLFwiYmV0XCIsXCJiaWRcIixcImJpZGRlblwiLFwiYm91bmRcIixcImJyZWRcIixcImJyb2FkY2FzdFwiLFwiYnVybnRcIixcImJ1cnN0XCIsXCJjYXN0XCIsXCJjbHVuZ1wiLFwiY29tZVwiLFwiY29zdFwiLFwiY3JlcHRcIixcImN1dFwiLFwiZHVnXCIsXCJkaXZlZFwiLFwiZHJlYW10XCIsXCJkcnVua1wiLFwiZmFsbGVuXCIsXCJmaXRcIixcImZsZWRcIixcImZsdW5nXCIsXCJmbG93blwiLFwiZm9yZWdvbmVcIixcImZvcnNha2VuXCIsXCJnb25lXCIsXCJncm93blwiLFwia25lbHRcIixcImtuaXRcIixcImxlYXB0XCIsXCJsZWFybnRcIixcImxlZnRcIixcImxlbnRcIixcImxhaW5cIixcImxpZ2h0ZWRcIixcIm1pc3NwZWx0XCIsXCJtaXN0YWtlblwiLFwibW93blwiLFwib3ZlcmNvbWVcIixcIm92ZXJkb25lXCIsXCJvdmVydGFrZW5cIixcIm92ZXJ0aHJvd25cIixcInBsZWRcIixcInF1aXRcIixcInJpZFwiLFwicmlzZW5cIixcInNhd25cIixcInNvdWdodFwiLFwic2V0XCIsXCJzZXduXCIsXCJzaGF2ZW5cIixcInNob3JuXCIsXCJzaGVkXCIsXCJzaG9uZVwiLFwic2hvZFwiLFwic2hydW5rXCIsXCJzYXRcIixcInNsZXB0XCIsXCJzbHVuZ1wiLFwic2xpdFwiLFwic21pdHRlblwiLFwic293blwiLFwic3BlZFwiLFwic3BpbHRcIixcInNwaXRcIixcInNwcnVuZ1wiLFwic3Rvb2RcIixcInN0dWNrXCIsXCJzdHVuZ1wiLFwic3R1bmtcIixcInN0cmlkZGVuXCIsXCJzdHJ1bmdcIixcInN0cml2ZW5cIixcInN3b3JuXCIsXCJzd29sbGVuXCIsXCJzd3VtXCIsXCJ0aHJpdmVkXCIsXCJ0aHJ1c3RcIixcInRyb2RkZW5cIixcInVwaGVsZFwiLFwid292ZW5cIixcIndlZFwiLFwid2VwdFwiLFwid291bmRcIixcIndpdGhoZWxkXCIsXCJ3aXRoc3Rvb2RcIixcIndydW5nXCJdLHJhPVwicmV0ZXh0LXBhc3NpdmVcIix0YT1uZXcgU2V0KFtcImFtXCIsXCJhcmVcIixcIndlcmVcIixcImJlaW5nXCIsXCJpc1wiLFwiYmVlblwiLFwid2FzXCIsXCJiZVwiXSk7ZnVuY3Rpb24gb2Eobj17fSl7Y29uc3QgZT1uLmlnbm9yZXx8W10sYT1lLmxlbmd0aD4wP2lhLmZpbHRlcigobj0+IWUuaW5jbHVkZXMobikpKTppYTtyZXR1cm4obixlKT0+e2FhKG4sYSwoKG4sYSxpLHIpPT57Y29uc3QgdD1mdW5jdGlvbihuLGUsYSl7dmFyIGk9V24oXCJXb3JkTm9kZVwiKTtpZighbnx8IW4udHlwZXx8IW4uY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGFyZW50IG5vZGVcIik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKGU8MHx8ZT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgbnVtYmVyIGFzIGluZGV4XCIpfWVsc2UgaWYoKGU9bi5jaGlsZHJlbi5pbmRleE9mKGUpKTwwKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNoaWxkIG5vZGUgb3IgaW5kZXhcIik7Zm9yKGU+bi5jaGlsZHJlbi5sZW5ndGgmJihlPW4uY2hpbGRyZW4ubGVuZ3RoKTtlLS07KWlmKGkobi5jaGlsZHJlbltlXSxlLG4pKXJldHVybiBuLmNoaWxkcmVuW2VdO3JldHVybiBudWxsfShpLGEpO3QmJnRhLmhhcyhxbih0KS50b0xvd2VyQ2FzZSgpKSYmT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoXCJEb27igJl0IHVzZSB0aGUgcGFzc2l2ZSB2b2ljZVwiLHtzdGFydDp0ZShuWzBdKSxlbmQ6b2UobltuLmxlbmd0aC0xXSl9LFtyYSxyLnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKV0uam9pbihcIjpcIikpLHthY3R1YWw6cW4obiksZXhwZWN0ZWQ6W10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1wYXNzaXZlI3JlYWRtZVwifSl9KSl9fWNvbnN0IE1hPXthaW50OlwiYWluJ3RcIixhcmVudDpcImFyZW4ndFwiLGNvdWxkbnQ6XCJjb3VsZG4ndFwiLGRpZG50OlwiZGlkbid0XCIsZG9lc250OlwiZG9lc24ndFwiLGRvbnQ6XCJkb24ndFwiLGhhZG50OlwiaGFkbid0XCIsaGFzbnQ6XCJoYXNuJ3RcIixoYXZlbnQ6XCJoYXZlbid0XCIsaGVkOlwiaGUnZFwiLGhlczpcImhlJ3NcIixob3dkOlwiaG93J2RcIixob3dzOlwiaG93J3NcIixob3dsbDpcImhvdydsbFwiLElkOlwiSSdkXCIsSW06XCJJJ21cIixJdmU6XCJJJ3ZlXCIsaXNudDpcImlzbid0XCIsbWlnaHRudDpcIm1pZ2h0bid0XCIsbXVzdHZlOlwibXVzdCd2ZVwiLG11c3RudDpcIm11c3RuJ3RcIixuZWVkbnQ6XCJuZWVkbid0XCIsb2Nsb2NrOlwibydjbG9ja1wiLHNoYW50Olwic2hhbid0XCIsc2hlczpcInNoZSdzXCIsc2hvdWxkdmU6XCJzaG91bGQndmVcIixzaG91bGRudDpcInNob3VsZG4ndFwiLHRoYXRkOlwidGhhdCdkXCIsdGhhdHM6XCJ0aGF0J3NcIix0aGVyZWQ6XCJ0aGVyZSdkXCIsdGhlcmVzOlwidGhlcmUnc1wiLHRoZXJlcmU6XCJ0aGVyZSdyZVwiLHRoZXlkOlwidGhleSdkXCIsdGhleWxsOlwidGhleSdsbFwiLHRoZXlyZTpcInRoZXkncmVcIix0aGV5dmU6XCJ0aGV5J3ZlXCIsdGlzOlwiJ3Rpc1wiLHR3YXM6XCIndHdhc1wiLHR3ZXJlOlwiJ3R3ZXJlXCIsd2FzbnQ6XCJ3YXNuJ3RcIix3ZXZlOlwid2UndmVcIix3ZXJlbnQ6XCJ3ZXJlbid0XCIsd2hhdGxsOlwid2hhdCdsbFwiLHdoYXRyZTpcIndoYXQncmVcIix3aGF0czpcIndoYXQnc1wiLHdoYXR2ZTpcIndoYXQndmVcIix3aGVuczpcIndoZW4nc1wiLHdoZXJlczpcIndoZXJlJ3NcIix3aGVyZXZlOlwid2hlcmUndmVcIix3aG9kOlwid2hvJ2RcIix3aG9sbDpcIndobydsbFwiLHdob3M6XCJ3aG8nc1wiLHdob3ZlOlwid2hvJ3ZlXCIsd2h5czpcIndoeSdzXCIsd291bGR2ZTpcIndvdWxkJ3ZlXCIsd291bGRudDpcIndvdWxkbid0XCIseWFsbDpcInknYWxsXCIseW91ZDpcInlvdSdkXCIseW91bGw6XCJ5b3UnbGxcIix5b3VyZTpcInlvdSdyZVwiLHlvdXZlOlwieW91J3ZlXCJ9LHNhPVwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiLGxhPXt9Lmhhc093blByb3BlcnR5LGNhPWZ1bmN0aW9uKCl7Y29uc3Qgbj17fTtsZXQgZTtmb3IoZSBpbiBNYSlpZihsYS5jYWxsKE1hLGUpKXtjb25zdCBhPU1hW2VdO25bZV09YSxlPT09ZS50b0xvd2VyQ2FzZSgpJiYobltlLnRvVXBwZXJDYXNlKCldPWEudG9VcHBlckNhc2UoKSxuW2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKV09YS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnNsaWNlKDEpKX1yZXR1cm4gbn0oKTtmdW5jdGlvbiBTYShuPXt9KXtjb25zdCBlPW4uYWxsb3dMaXRlcmFscyxhPW4uc3RyYWlnaHQ7cmV0dXJuKG4saSk9PntfbihuLFwiV29yZE5vZGVcIiwoKG4scix0KT0+e2NvbnN0IG89dCxNPXFuKG4pLHM9TS5yZXBsYWNlKC9bJ+KAmV0vZyxcIlwiKTtpZihsYS5jYWxsKGNhLHMpKXtsZXQgdD1jYVtzXTtpZihhfHwodD10LnJlcGxhY2UoLycvZyxcIuKAmVwiKSksTT09PXR8fG8mJm51bGwhPT1yJiYhZSYmUWUobyxyKSlyZXR1cm47T2JqZWN0LmFzc2lnbihpLm1lc3NhZ2Uocz09PU0/XCJFeHBlY3RlZCBhbiBhcG9zdHJvcGhlIGluIGBcIitNK1wiYCwgbGlrZSB0aGlzOiBgXCIrdCtcImBcIjpcIkV4cGVjdGVkIHRoZSBhcG9zdHJvcGhlIGluIGBcIitNK1wiYCB0byBiZSBsaWtlIHRoaXM6IGBcIit0K1wiYFwiLG4sW3NhLChzPT09TT9cIm1pc3NpbmctXCI6XCJcIikrKGE/XCJzdHJhaWdodC1hcG9zdHJvcGhlXCI6XCJzbWFydC1hcG9zdHJvcGhlXCIpXS5qb2luKFwiOlwiKSkse2FjdHVhbDpNLGV4cGVjdGVkOlt0XSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWNvbnRyYWN0aW9ucyNyZWFkbWVcIn0pfX0pKX19Y29uc3QgdWE9ZnVuY3Rpb24obixlLGEpe2NvbnN0IGk9ZXx8J1wiJyxyPWF8fGksdD1bXTtsZXQgbz0tMTtpZihBcnJheS5pc0FycmF5KG4pKXtmb3IoOysrbzxuLmxlbmd0aDspdFtvXT1pK25bb10rcjtyZXR1cm4gdH1pZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gaStuK3I7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzXCIpfSxkYT17fS5oYXNPd25Qcm9wZXJ0eSxtYT1XbihcIldvcmROb2RlXCIpLHBhPVduKFwiV2hpdGVTcGFjZU5vZGVcIiksaGE9V24oXCJQdW5jdHVhdGlvbk5vZGVcIiksZ2E9ZnVuY3Rpb24obixlKXtjb25zdCBhPVwicmV0ZXh0LWVxdWFsaXR5XCIsaT17b3I6ZnVuY3Rpb24obixlLGEpe2xldCBpPS0xO2Zvcig7KytpPG4ubGVuZ3RoOyl7Y29uc3Qgcj1uW2ldLHQ9ci5wYXJlbnQuY2hpbGRyZW4sbz1uW2krMV07aWYobyYmby5wYXJlbnQ9PT1yLnBhcmVudCYmby50eXBlIT09ci50eXBlKXtsZXQgbj1yLmVuZDtmb3IoOysrbjxvLnN0YXJ0Oyl7Y29uc3QgZT10W25dO2lmKCEocGEoZSl8fG1hKGUpJiYvKGFuZHxvcikvLnRlc3QoVmUoZSkpfHxoYShlKSYmXCIvXCI9PT1WZShlKSkpYnJlYWt9aWYobj09PW8uc3RhcnQpe2krKztjb250aW51ZX19cyhhLHIsZSl9fSxiYXNpYzpmdW5jdGlvbihuLGUsYSl7bGV0IGk9LTE7Zm9yKDsrK2k8bi5sZW5ndGg7KXMoYSxuW2ldLGUpfX0scj17fSx0PVtdLG89W10sTT1bXTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZT0tMTtmb3IoOysrZTxuLmxlbmd0aDspe2NvbnN0IGE9bltlXTtsZXQgaTtmb3IoaSBpbiByW2EuaWRdPWEsYS5pbmNvbnNpZGVyYXRlKWRhLmNhbGwoYS5pbmNvbnNpZGVyYXRlLGkpJiYoTS5wdXNoKGkpLHQucHVzaChhKSxhLmFwb3N0cm9waGUmJm8ucHVzaChpKSl9fSgpLChuPXt9KT0+e2NvbnN0IGU9bi5pZ25vcmV8fFtdLGE9bi5ub0JpbmFyeTtsZXQgcz0tMTtjb25zdCBsPVtdLGM9W107Zm9yKDsrK3M8TS5sZW5ndGg7KXtjb25zdCBuPU1bc107ZS5pbmNsdWRlcyhuKXx8KG8uaW5jbHVkZXMobik/bC5wdXNoKG4pOmMucHVzaChuKSl9cmV0dXJuKG4sZSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57Y29uc3Qgbz17fTtsZXQgcztmb3IocyBpbiBhYShuLGMsUyksYWEobixsLFMsITApLG8paWYoZGEuY2FsbChvLHMpKXtjb25zdCBuPXJbc107aVtcIm9yXCI9PT1uLnR5cGUmJmE/XCJiYXNpY1wiOm4udHlwZV0ob1tzXSxuLGUpfXJldHVybiBRbjtmdW5jdGlvbiBTKG4sZSxhLGkpe2NvbnN0IHI9TS5pbmRleE9mKGkpLHM9dFtyXSxsPXMuaWQ7aSE9PWkudG9Mb3dlckNhc2UoKSYmcW4obikhPT1pfHwobCBpbiBvfHwob1tsXT1bXSksb1tsXS5wdXNoKHt0eXBlOnMuaW5jb25zaWRlcmF0ZVtpXSxwYXJlbnQ6YSxub2RlczpuLHN0YXJ0OmUsZW5kOmUrbi5sZW5ndGgtMX0pKX19KSl9fTtmdW5jdGlvbiBzKG4sZSxpKXtjb25zdCByPXFuKGUubm9kZXMpO2xldCB0O2lmKGkuY29uc2lkZXJhdGUmJih0PU9iamVjdC5rZXlzKGkuY29uc2lkZXJhdGUpLHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk9PT1yLmNoYXJBdCgwKSkpe2xldCBuPS0xO2Zvcig7KytuPHQubGVuZ3RoOyl0W25dPXRbbl0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdFtuXS5zbGljZSgxKX1PYmplY3QuYXNzaWduKG4ubWVzc2FnZSh1YShyLFwiYFwiKStcIiBtYXkgYmUgaW5zZW5zaXRpdmVcIisoaS5jb25kaXRpb24/XCIsIFwiK2kuY29uZGl0aW9uOlwiXCIpK1wiLCBcIisodD9cInVzZSBcIit1YSh0LFwiYFwiKS5qb2luKFwiLCBcIikrXCIgaW5zdGVhZFwiOlwidHJ5IG5vdCB0byB1c2UgaXRcIiksZS5ub2Rlc1swXSxbYSxpLmlkXS5qb2luKFwiOlwiKSkse2FjdHVhbDpyLGV4cGVjdGVkOnQsbm90ZTppLm5vdGUsdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1lcXVhbGl0eSNyZWFkbWVcIn0pfX0oW3tpZDpcImxlYXJuaW5nLWRpc2FibGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGxlYXJuaW5nIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxlYXJuaW5nIGRpc2FibGVkXCI6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgcGVyc29uLCByYXRoZXIgdGhhbiB0aGUgZGlzYWJpbGl0eSwgZmlyc3QuXCJ9LHtpZDpcImludmFsaWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHVybmVkIG9mZlwiOlwiYVwiLFwiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGlzYWJsZWQ6XCJhXCIsaW52YWxpZDpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC5cIn0se2lkOlwiYmlydGgtZGVmZWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcyBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmlydGggZGVmZWN0XCI6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzL2ltcGxpZXMgdGhhdCBhIHBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eSBpcyBkZWZpY2llbnQgb3IgaW5mZXJpb3IgdG8gb3RoZXJzLiBXaGVuIHBvc3NpYmxlLCBzcGVjaWZ5IHRoZSBmdW5jdGlvbmFsIGFiaWxpdHkgb3IgaXRzIHJlc3RyaWN0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic3VmZmVycy1mcm9tLWRpc2FiaWxpdGllc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBkaXNhYmlsaXRpZXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwifSxub3RlOlwiQXNzdW1lcyB0aGF0IGEgcGVyc29uIHdpdGggYSBkaXNhYmlsaXR5IGhhcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaW50ZWxsZWN0dWFsbHktZGlzYWJsZWQtcGVvcGxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aXRoIGludGVsbGVjdHVhbCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnRlbGxlY3R1YWxseSBkaXNhYmxlZCBwZW9wbGVcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImludGVsbGVjdHVhbGx5LWRpc2FibGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGFuIGludGVsbGVjdHVhbCBkaXNhYmlsaXR5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW50ZWxsZWN0dWFsbHkgZGlzYWJsZWRcIjpcImFcIixcImhhcyBpbnRlbGxlY3R1YWwgaXNzdWVzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGludGVsbGVjdHVhbCBkaXNhYmlsaXRpZXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIn0sbm90ZTpcIkFzc3VtZXMgdGhhdCBhIHBlcnNvbiB3aXRoIGFuIGludGVsbGVjdHVhbCBkaXNhYmlsaXR5IGhhcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwibnV0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cnVkZTpcImFcIixtYWxpY2lvdXM6XCJhXCIsbWVhbjpcImFcIixkaXNndXN0aW5nOlwiYVwiLGluY3JlZGlibGU6XCJhXCIsdmlsZTpcImFcIixcInBlcnNvbiB3aXRoIHN5bXB0b21zIG9mIG1lbnRhbCBpbGxuZXNzXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBtZW50YWwgaWxsbmVzc1wiOlwiYVwiLFwicGVyc29uIHdpdGggc3ltcHRvbXMgb2YgYSBtZW50YWwgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgbWVudGFsIGRpc29yZGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JhdHNoaXQ6XCJhXCIscHN5Y2hvOlwiYVwiLGNyYXp5OlwiYVwiLGRlbGlyaW91czpcImFcIixpbnNhbmU6XCJhXCIsaW5zYW5pdHk6XCJhXCIsbG9vbnk6XCJhXCIsbHVuYWN5OlwiYVwiLGx1bmF0aWM6XCJhXCIsXCJtZW50YWxseSBpbGxcIjpcImFcIixwc3ljaG9wYXRob2xvZ3k6XCJhXCIsXCJtZW50YWwgZGVmZWN0aXZlXCI6XCJhXCIsbW9yb246XCJhXCIsbW9yb25pYzpcImFcIixudXRzOlwiYVwiLFwibWVudGFsIGNhc2VcIjpcImFcIixtZW50YWw6XCJhXCJ9LG5vdGU6XCJEZXNjcmliZSB0aGUgYmVoYXZpb3Igb3IgaWxsbmVzcyB3aXRob3V0IGRlcm9nYXRvcnkgd29yZHMuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJpbnNhbmVseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW5jcmVkaWJseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zYW5lbHk6XCJhXCJ9LG5vdGU6XCJEZXNjcmliZSB0aGUgYmVoYXZpb3Igb3IgaWxsbmVzcyB3aXRob3V0IGRlcm9nYXRvcnkgd29yZHMuXCJ9LHtpZDpcInNhbmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NvcnJlY3Q6XCJhXCIsYWRlcXVhdGU6XCJhXCIsc3VmZmljaWVudDpcImFcIixjb25zaXN0ZW50OlwiYVwiLHZhbGlkOlwiYVwiLGNvaGVyZW50OlwiYVwiLHNlbnNpYmxlOlwiYVwiLHJlYXNvbmFibGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbmU6XCJhXCJ9LG5vdGU6XCJXaGVuIGRlc2NyaWJpbmcgYSBtYXRoZW1hdGljYWwgb3IgcHJvZ3JhbW1hdGljIHZhbHVlLCB1c2luZyB0aGUgd29yZCDigJxzYW5l4oCdIG5lZWRsZXNzbHkgaW52b2tlcyB0aGUgdG9waWMgb2YgbWVudGFsIGhlYWx0aC4gIENvbnNpZGVyIHVzaW5nIGEgZG9tYWluLXNwZWNpZmljIG9yIG5ldXRyYWwgdGVybSBpbnN0ZWFkLlwifSx7aWQ6XCJzYW5pdHktY2hlY2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NoZWNrOlwiYVwiLGFzc2VydGlvbjpcImFcIix2YWxpZGF0aW9uOlwiYVwiLFwic21va2UgdGVzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNhbml0eSBjaGVja1wiOlwiYVwifSxub3RlOlwiV2hlbiBkZXNjcmliaW5nIGEgbWF0aGVtYXRpY2FsIG9yIHByb2dyYW1tYXRpYyB2YWx1ZSwgdXNpbmcgdGhlIHBocmFzZSDigJxzYW5pdHkgY2hlY2vigJ0gbmVlZGxlc3NseSBpbnZva2VzIHRoZSB0b3BpYyBvZiBtZW50YWwgaGVhbHRoLiAgQ29uc2lkZXIgdXNpbmcgc2ltcGx5IOKAnGNoZWNr4oCdLCBvciBhIGRvbWFpbi1zcGVjaWZpYyBvciBuZXV0cmFsIHRlcm0sIGluc3RlYWQuXCJ9LHtpZDpcImJpcG9sYXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZsdWN0dWF0aW5nOlwiYVwiLFwicGVyc29uIHdpdGggYmlwb2xhciBkaXNvcmRlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaXBvbGFyOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcInNjaGl6b1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBzY2hpem9waHJlbmlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NjaGl6b3BocmVuaWM6XCJhXCIsc2NoaXpvOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcIm1hbmljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJzIGZyb20gc2NoaXpvcGhyZW5pYVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gc2NoaXpvcGhyZW5pYVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggc2NoaXpvcGhyZW5pYVwiOlwiYVwiLG1hbmljOlwiYVwifSxub3RlOlwiQXNzdW1lcyBhIHBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWEgZXhwZXJpZW5jZXMgYSByZWR1Y2VkIHF1YWxpdHkgb2YgbGlmZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImhhbmRpY2FwcGVkLXBhcmtpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYWNjZXNzaWJsZSBwYXJraW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaGFuZGljYXBwZWQgcGFya2luZ1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJoYW5kaWNhcHBlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIGhhbmRpY2FwXCI6XCJhXCIsYWNjZXNzaWJsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZGljYXBwZWQ6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgcGVyc29uLCByYXRoZXIgdGhhbiB0aGUgZGlzYWJpbGl0eSwgZmlyc3QuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhbXB1dGVlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGFuIGFtcHV0YXRpb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YW1wdXRlZTpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBjb25kaXRpb24sIGZpcnN0LiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiZ2ltcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIGxpbXBcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y3JpcHBsZTpcImFcIixjcmlwcGxlZDpcImFcIixnaW1wOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHNwZWNpZmljIGRpc2FiaWxpdHkuXCJ9LHtpZDpcIm1vbmdvbG9pZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBEb3duIFN5bmRyb21lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vbmdvbG9pZDpcImFcIn19LHtpZDpcInN0cm9rZS12aWN0aW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaW5kaXZpZHVhbCB3aG8gaGFzIGhhZCBhIHN0cm9rZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN0cm9rZSB2aWN0aW1cIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGEgc3Ryb2tlXCI6XCJhXCIsXCJ2aWN0aW0gb2YgYSBzdHJva2VcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBjb25kaXRpb24sIGZpcnN0LlwifSx7aWQ6XCJtdWx0aXBsZS1zY2xlcm9zaXMtdmljdGltXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aG8gaGFzIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBtdWx0aXBsZSBzY2xlcm9zaXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwidmljdGltIG9mIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwibXVsdGlwbGUgc2NsZXJvc2lzIHZpY3RpbVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCJ9fSx7aWQ6XCJzdWZmZXJzLWZyb20tbWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIG11c2N1bGFyIGR5c3Ryb3BoeVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gTURcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIE1EXCI6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byBhIHBlcnNvbidzIGNvbmRpdGlvbiBhcyBhIHN0YXRlLCBub3QgYXMgYW4gYWZmbGljdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZSlcIn0se2lkOlwiZmFtaWx5LWJ1cmRlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ3aXRoIGZhbWlseSBzdXBwb3J0IG5lZWRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZmFtaWx5IGJ1cmRlblwiOlwiYVwifX0se2lkOlwiYXN5bHVtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBzeWNoaWF0cmljIGhvc3BpdGFsXCI6XCJhXCIsXCJtZW50YWwgaGVhbHRoIGhvc3BpdGFsXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FzeWx1bTpcImFcIn19LHtpZDpcImJlZGxhbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2hhb3M6XCJhXCIsaGVjdGljOlwiYVwiLHBhbmRlbW9uaXVtOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiZWRsYW06XCJhXCIsbWFkaG91c2U6XCJhXCIsXCJsb29ueSBiaW5cIjpcImFcIn19LHtpZDpcImRvd25zLXN5bmRyb21lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkRvd24gU3luZHJvbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJkb3ducyBzeW5kcm9tZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL21lZGlhLnNwZWNpYWxvbHltcGljcy5vcmcvc29pL2ZpbGVzL3ByZXNzLWtpdC8yMDE0X0ZhY3RTaGVldF9GaW5hbC5wZGZcIn0se2lkOlwicmV0YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzaWxseTpcImFcIixkdWxsYXJkOlwiYVwiLFwicGVyc29uIHdpdGggRG93biBTeW5kcm9tZVwiOlwiYVwiLFwicGVyc29uIHdpdGggZGV2ZWxvcG1lbnRhbCBkaXNhYmlsaXRpZXNcIjpcImFcIixkZWxheTpcImFcIixcImhvbGQgYmFja1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXRhcmQ6XCJhXCIscmV0YXJkZWQ6XCJhXCIsXCJzaG9ydCBidXNcIjpcImFcIn19LHtpZDpcInJldGFyZHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbGxpZXM6XCJhXCIsZHVsbGFyZHM6XCJhXCIsXCJwZW9wbGUgd2l0aCBkZXZlbG9wbWVudGFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwicGVvcGxlIHdpdGggRG93buKAmXMgU3luZHJvbWVcIjpcImFcIixkZWxheXM6XCJhXCIsXCJob2xkcyBiYWNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JldGFyZHM6XCJhXCJ9fSx7aWQ6XCJwc3ljaG90aWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBwc3ljaG90aWMgY29uZGl0aW9uXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwc3ljaG9zaXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHN5Y2hvdGljOlwiYVwiLFwic3VmZmVycyBmcm9tIHBzeWNob3Npc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gcHN5Y2hvc2lzXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBwc3ljaG9zaXNcIjpcImFcIixcInZpY3RpbSBvZiBwc3ljaG9zaXNcIjpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uXCJ9LHtpZDpcImxhbWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2JvcmluZzpcImFcIixkdWxsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYW1lOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJhaWRzLXZpY3RpbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBBSURTXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVyaW5nIGZyb20gYWlkc1wiOlwiYVwiLFwic3VmZmVyIGZyb20gYWlkc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIGFpZHNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGFpZHNcIjpcImFcIixcInZpY3RpbSBvZiBhaWRzXCI6XCJhXCIsXCJhaWRzIHZpY3RpbVwiOlwiYVwifX0se2lkOlwid2hlZWxjaGFpci1ib3VuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ1c2VzIGEgd2hlZWxjaGFpclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNvbmZpbmVkIHRvIGEgd2hlZWxjaGFpclwiOlwiYVwiLFwiYm91bmQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJyZXN0cmljdGVkIHRvIGEgd2hlZWxjaGFpclwiOlwiYVwiLFwid2hlZWxjaGFpciBib3VuZFwiOlwiYVwifX0se2lkOlwic3BlY2lhbC1vbHltcGlhbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2F0aGxldGVzOlwiYVwiLFwiU3BlY2lhbCBPbHltcGljcyBhdGhsZXRlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNwZWNpYWwgb2x5bXBpYW5zXCI6XCJhXCIsXCJzcGVjaWFsIG9seW1waWMgYXRobGV0ZXNcIjpcImFcIn0sbm90ZTpcIldoZW4gcG9zc2libGUsIHVzZSB0aGUgZXhhY3QgZGlzY2lwbGluZSBvZiBzcG9ydC4gKHNvdXJjZTogaHR0cHM6Ly9tZWRpYS5zcGVjaWFsb2x5bXBpY3Mub3JnL3NvaS9maWxlcy9wcmVzcy1raXQvMjAxNF9GYWN0U2hlZXRfRmluYWwucGRmKVwifSx7aWQ6XCJhYmxlYm9kaWVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm5vbi1kaXNhYmxlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthYmxlYm9kaWVkOlwiYVwifSxub3RlOlwiQ2FuIGltcGx5IHRoYXQgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGxhY2sgdGhlIGFiaWxpdHkgdG8gdXNlIHRoZWlyIGJvZGllcyB3ZWxsLiBTb21ldGltZXMgYHR5cGljYWxgIGNhbiBiZSB1c2VkLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiYWRkaWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgZHJ1ZyBhZGRpY3Rpb25cIjpcImFcIixcInBlcnNvbiByZWNvdmVyaW5nIGZyb20gYSBkcnVnIGFkZGljdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthZGRpY3Q6XCJhXCIsanVua2llOlwiYVwifSxub3RlOlwiQWRkaWN0aW9uIGlzIGEgbmV1cm9iaW9sb2dpY2FsIGRpc2Vhc2UuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhZGRpY3RzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aXRoIGEgZHJ1ZyBhZGRpY3Rpb25cIjpcImFcIixcInBlb3BsZSByZWNvdmVyaW5nIGZyb20gYSBkcnVnIGFkZGljdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthZGRpY3RzOlwiYVwiLGp1bmtpZXM6XCJhXCJ9LG5vdGU6XCJBZGRpY3Rpb24gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFsY29ob2xpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzb21lb25lIHdpdGggYW4gYWxjb2hvbCBwcm9ibGVtXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FsY29ob2xpYzpcImFcIixcImFsY29ob2wgYWJ1c2VyXCI6XCJhXCJ9LG5vdGU6XCJBbGNvaG9saXNtIGlzIGEgbmV1cm9iaW9sb2dpY2FsIGRpc2Vhc2UuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJkZWFmbXV0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVhZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJkZWFmIGFuZCBkdW1iXCI6XCJhXCIsZGVhZm11dGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNlbmlsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkZW1lbnRpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkZW1lbnRlZDpcImFcIixzZW5pbGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImRlcHJlc3NlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2FkOlwiYVwiLGJsdWU6XCJhXCIsXCJidW1tZWQgb3V0XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBzZWFzb25hbCBhZmZlY3RpdmUgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3RpYyBkZXByZXNzaW9uXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwb3N0cGFydHVtIGRlcHJlc3Npb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGVwcmVzc2VkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJkd2FyZlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkd2FyZmlzbVwiOlwiYVwiLFwibGl0dGxlIHBlcnNvblwiOlwiYVwiLFwibGl0dGxlIHBlb3BsZVwiOlwiYVwiLExQOlwiYVwiLFwicGVyc29uIG9mIHNob3J0IHN0YXR1cmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ2ZXJ0aWNhbGx5IGNoYWxsZW5nZWRcIjpcImFcIixtaWRnZXQ6XCJhXCIsXCJzbWFsbCBwZXJzb25cIjpcImFcIixkd2FyZjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8saHR0cHM6Ly93d3cubHBhb25saW5lLm9yZy9mYXEtI01pZGdldFwifSx7aWQ6XCJkeXNsZXhpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkeXNsZXhpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkeXNsZXhpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiZXBpbGVwdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGVwaWxlcHN5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2VwaWxlcHRpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiaGVhcmluZy1pbXBhaXJlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXJkIG9mIGhlYXJpbmdcIjpcImFcIixcInBhcnRpYWxseSBkZWFmXCI6XCJhXCIsXCJwYXJ0aWFsIGhlYXJpbmcgbG9zc1wiOlwiYVwiLGRlYWY6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaGVhcmluZyBpbXBhaXJlZFwiOlwiYVwiLFwiaGVhcmluZyBpbXBhaXJtZW50XCI6XCJhXCJ9LG5vdGU6XCJXaGVuIHBvc3NpYmxlLCBhc2sgdGhlIHBlcnNvbiB3aGF0IHRoZXkgcHJlZmVyLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwidmljdGltLW9mLXBvbGlvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwb2xpbzpcImFcIixcInBlcnNvbiB3aG8gaGFkIHBvbGlvXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5mYW50aWxlIHBhcmFseXNpc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIHBvbGlvXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBwb2xpb1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBwb2xpb1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggcG9saW9cIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgcG9saW9cIjpcImFcIixcInZpY3RpbSBvZiBwb2xpb1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJ2aWN0aW0tb2YtYW4taW5qdXJ5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1c3RhaW4gYW4gaW5qdXJ5XCI6XCJhXCIsXCJyZWNlaXZlIGFuIGluanVyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlciBmcm9tIGFuIGluanVyeVwiOlwiYVwiLFwic3VmZmVycyBmcm9tIGFuIGluanVyeVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBhbiBpbmp1cnlcIjpcImFcIixcInZpY3RpbSBvZiBhbiBpbmp1cnlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwidmljdGltLW9mLWluanVyaWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1c3RhaW4gaW5qdXJpZXNcIjpcImFcIixcInJlY2VpdmUgaW5qdXJpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXIgZnJvbSBpbmp1cmllc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBpbmp1cmllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggaW5qdXJpZXNcIjpcImFcIixcInZpY3RpbSBvZiBpbmp1cmllc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJwYXJhcGxlZ2ljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHBhcmFwbGVnaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cGFyYXBsZWdpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicXVhZHJpcGxlZ2ljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHF1YWRyaXBsZWdpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntxdWFkcmlwbGVnaWM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNwYXpcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggY2VyZWJyYWwgcGFsc3lcIjpcImFcIix0d2l0Y2g6XCJhXCIsZmxpbmNoOlwiYVwiLGhlY3RpYzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhejpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3Bhc3RpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBjZXJlYnJhbCBwYWxzeVwiOlwiYVwiLHR3aXRjaDpcImFcIixmbGluY2g6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NwYXN0aWM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInN0YW1tZXJpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3N0dXR0ZXJpbmc6XCJhXCIsXCJkaXNmbHVlbmN5IG9mIHNwZWVjaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGFtbWVyaW5nOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJzdHV0dGVyZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBzdHV0dGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdHV0dGVyZXI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInRvdXJldHRlcy1zeW5kcm9tZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJUb3VyZXR0ZSBzeW5kcm9tZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRvdXJldHRlcyBzeW5kcm9tZVwiOlwiYVwiLFwidG91cmV0dGVzIGRpc29yZGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInJlaGFiLWNlbnRlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0cmVhdG1lbnQgY2VudGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicmVoYWIgY2VudGVyXCI6XCJhXCIsXCJkZXRveCBjZW50ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicmVoYWJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RyZWF0bWVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmVoYWI6XCJhXCIsZGV0b3g6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNvY2lvcGF0aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIHBlcnNvbmFsaXR5IGRpc29yZGVyXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwc3ljaG9wYXRoaWMgcGVyc29uYWxpdHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c29jaW9wYXRoOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcInNvY2lvcGF0aHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggcHN5Y2hvcGF0aGljIHBlcnNvbmFsaXRpZXNcIjpcImFcIixcInBlb3BsZSB3aXRoIGEgcGVyc29uYWxpdHkgZGlzb3JkZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c29jaW9wYXRoczpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJkdW1iXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIixzcGVlY2hsZXNzOlwiYVwiLHNpbGVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZHVtYjpcImFcIn0sbm90ZTpcIkR1bWIgaGVyZSBpcyB1c2VkIGluIDIgZGlmZmVyZW50IGNvbnRleHRzICwgdGhlIGluYWJpbGl0eSB0byB0YWxrIG9yIGFzIGEgY3Vyc2Ugd29yZC4gKHNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWwpXCJ9LHtpZDpcIndhY2tvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIix1bmludGVsbGlnZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaW1wbGV0b246XCJhXCIsc3R1cGlkOlwiYVwiLHdhY2tvOlwiYVwiLHdoYWNrbzpcImFcIixcImxvdyBpcVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwOi8vd3d3Lm1tb25qZWpyLmNvbS8yMDE0LzAyL2RlY29uc3RydWN0aW5nLXN0dXBpZC5odG1sXCJ9LHtpZDpcInBhbmljLWF0dGFja1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmaXQgb2YgdGVycm9yXCI6XCJhXCIsc2NhcmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicGFuaWMgYXR0YWNrXCI6XCJhXCJ9fSx7aWQ6XCJib255XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0aGluOlwiYVwiLHNsaW06XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Fub3JleGljOlwiYVwiLGJvbnk6XCJhXCJ9fSx7aWQ6XCJvY2RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGFuIGFueGlldHkgZGlzb3JkZXJcIjpcImFcIixvYnNlc3NpdmU6XCJhXCIscGVkYW50aWM6XCJhXCIsbmlnZ2x5OlwiYVwiLHBpY2t5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXVyb3RpYzpcImFcIixvY2Q6XCJhXCIsXCJvLmMuZFwiOlwiYVwiLFwiby5jLmQuXCI6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL2VuZ2xpc2guc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzI0NzU1MC8pXCJ9LHtpZDpcImluc29tbmlhXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyZXN0bGVzc25lc3M6XCJhXCIsc2xlZXBsZXNzbmVzczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWE6XCJhXCJ9fSx7aWQ6XCJpbnNvbW5pYWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgaW5zb21uaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWFjOlwiYVwifX0se2lkOlwiaW5zb21uaWFjc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZW9wbGUgd2hvIGhhdmUgaW5zb21uaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWFjczpcImFcIn19LHtpZDpcImJhcnJlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZW1wdHk6XCJhXCIsc3RlcmlsZTpcImFcIixpbmZlcnRpbGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JhcnJlbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiZGVhZi10b1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2FyZWxlc3M6XCJhXCIsaGVhcnRsZXNzOlwiYVwiLGluZGlmZmVyZW50OlwiYVwiLGluc2Vuc2l0aXZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJsaW5kIHRvXCI6XCJhXCIsXCJibGluZCBleWUgdG9cIjpcImFcIixcImJsaW5kZWQgYnlcIjpcImFcIixcImRlYWYgdG9cIjpcImFcIixcImRlYWYgZWFyIHRvXCI6XCJhXCIsXCJkZWFmZW5lZCBieVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJjcmV0aW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NyZWVwOlwiYVwiLGZvb2w6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NyZXRpbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiZGFmdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YWJzdXJkOlwiYVwiLGZvb2xpc2g6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhZnQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImlkaW90XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIixzaWxseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVlYmxlbWluZGVkOlwiYVwiLFwiZmVlYmxlIG1pbmRlZFwiOlwiYVwiLGlkaW90OlwiYVwiLGltYmVjaWxlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJoYXJlbGlwcGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgY2xlZnQtbGlwIGFuZCBwYWxhdGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFyZWxpcHBlZDpcImFcIixjbGVmdGxpcHBlZDpcImFcIn0sbm90ZTpcIlNvbWV0aW1lcyBpdCdzIGNsZWZ0IGxpcCBvciBwYWxhdGUsIG5vdCBib3RoLiBTcGVjaWZ5IHdoZW4gcG9zc2libGUuIChzb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sKVwifSx7aWQ6XCJoYXJlbGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNsZWZ0LWxpcCBhbmQgcGFsYXRlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhcmVsaXA6XCJhXCIsXCJoYXJlIGxpcFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJtYW5pYWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZhbmF0aWM6XCJhXCIsemVhbG90OlwiYVwiLGVudGh1c2lhc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmlhYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiYnVja3RlZXRoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHByb21pbmVudCB0ZWV0aFwiOlwiYVwiLFwicHJvbWluZW50IHRlZXRoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2J1Y2t0b290aGVkOlwiYVwiLGJ1Y2t0ZWV0aDpcImFcIn19LHtpZDpcInNwZWNpYWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhbGxlbmdlZDpcImFcIixkaWZmYWJpbGl0eTpcImFcIixcImRpZmZlcmVudGx5IGFibGVkXCI6XCJhXCIsaGFuZGljYXBhYmxlOlwiYVwiLHNwZWNpYWw6XCJhXCIsXCJzcGVjaWFsIG5lZWRzXCI6XCJhXCIsXCJzcGVjaWFsbHkgYWJsZWRcIjpcImFcIn0sbm90ZTpcIkV1cGhlbWlzbXMgZm9yIGRpc2FiaWxpdGllcyBjYW4gYmUgaW5mYW50aWxpemluZy4gKHNvdXJjZTogaHR0cDovL2Nkcm55cy5vcmcvYmxvZy9kaXNhYmlsaXR5LWRpYWxvZ3VlL3RoZS1kaXNhYmlsaXR5LWRpYWxvZ3VlLTQtZGlzYWJpbGl0eS1ldXBoZW1pc21zLXRoYXQtbmVlZC10by1iaXRlLXRoZS1kdXN0LyxodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbClcIn0se2lkOlwibGlidGFyZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzYWdyZWVhYmxlOlwiYVwiLHVuZWR1Y2F0ZWQ6XCJhXCIsaWdub3JhbnQ6XCJhXCIsbmFpdmU6XCJhXCIsaW5jb25zaWRlcmF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnVja3RhcmQ6XCJhXCIsbGlidGFyZDpcImFcIixjb250YXJkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJhZGRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Rpc29yZ2FuaXplZDpcImFcIixkaXN0cmFjdGVkOlwiYVwiLGVuZXJnZXRpYzpcImFcIixoeXBlcmFjdGl2ZTpcImFcIixpbXBldHVvdXM6XCJhXCIsaW1wdWxzaXZlOlwiYVwiLGluYXR0ZW50aXZlOlwiYVwiLHJlc3RsZXNzOlwiYVwiLHVuZm9jdXNlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7QUREOlwiYVwiLGFkaGQ6XCJhXCIsXCJhLmQuZC5cIjpcImFcIixcImEuZC5oLmQuXCI6XCJhXCJ9fSx7aWQ6XCJkdW1teVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0ZXN0IGRvdWJsZVwiOlwiYVwiLHBsYWNlaG9sZGVyOlwiYVwiLGZha2U6XCJhXCIsc3R1YjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZHVtbXl2YXJpYWJsZTpcImFcIixkdW1teXZhbHVlOlwiYVwiLGR1bW15b2JqZWN0OlwiYVwiLGR1bW15OlwiYVwifSxub3RlOlwiRHVtbXkgY2FuIHJlZmVyIHRvIHRoZSBpbmFiaWxpdHkgdG8gdGFsayBvciBiZSB1c2VkIGFzIGEgZGVyb2dhdG9yeSB3b3JkIG1lYW5pbmcgc3R1cGlkLiBJbiBjb21wdXRlciBwcm9ncmFtbWluZyBpdCBpcyB1c2VkIHdoZXJlIGEgdmFsdWUgb3IgYmVoYXZpb3IgaXMgdW5pbXBvcnRhbnQuIFRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciB1c2UgY2FzZXMgYWxzby5cIn0se2lkOlwiYmluZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2VudGh1c2lhc3RpYzpcImFcIixzcHJlZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmluZ2U6XCJhXCJ9LG5vdGU6XCJCaW5nZSBtaWdodCBiZSBpbnNlbnNpdGl2ZSB0b3dhcmRzIGZvbGtzIHdpdGggZWF0aW5nIG9yIGRyaW5raW5nIGRpc29yZGVycyAoc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWVxdWFsaXR5L2lzc3Vlcy8xMTApXCJ9LHtpZDpcIm9idmlvdXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7b2J2aW91czpcImFcIixvYnZpb3VzbHk6XCJhXCJ9LG5vdGU6XCJOb3QgZXZlcnl0aGluZyBpcyBhcyBvYnZpb3VzIGFzIHlvdSBtaWdodCB0aGluay4gQW5kIGlmIGl0IGlzbuKAmXQgb2J2aW91cyB0byB0aGUgcmVhZGVyLCBpdCBjYW4gaHVydC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwianVzdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntqdXN0OlwiYVwifSxub3RlOlwiTm90IGV2ZXJ5dGhpbmcgaXMgYXMgZWFzeSBhcyB5b3UgbWlnaHQgdGhpbmsuIEFuZCBpZiBpdCBpc27igJl0IGVhc3kgZm9yIHRoZSByZWFkZXIsIGl0IGNhbiBodXJ0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJiYXNpY2FsbHlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7YmFzaWNhbGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IGJhc2ljLiBJZiB5b3XigJlyZSBnb2luZyB0byBleHBsYWluIGEgY29uZnVzaW5nIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggYSBjbGVhcmVyIG5leHQgc2VudGVuY2UsIHdoeSBub3QgZHJvcCB0aGUgZm9ybWVyIGFuZCBvbmx5IHVzZSB0aGUgbGF0dGVyPyAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJzaW1wbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7c2ltcGxlOlwiYVwiLHNpbXBseTpcImFcIn0sbm90ZTpcIkl04oCZcyBwcm9iYWJseSBub3QgdGhhdCBzaW1wbGUuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwiZWFzeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntlYXN5OlwiYVwiLGVhc2lseTpcImFcIn0sbm90ZTpcIkl04oCZcyBwcm9iYWJseSBub3QgdGhhdCBlYXN5LiBFdmVuIGlmIGl0IGlzLCB5b3UgcHJvYmFibHkgZG9u4oCZdCBuZWVkIHRvIHNwZWNpZmljYWxseSBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcIm9mLWNvdXJzZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntcIm9mIGNvdXJzZVwiOlwiYVwifSxub3RlOlwiSWYgaXTigJlzIHNlbGYtZXZpZGVudCB0aGVuIG1heWJlIHlvdSBkb27igJl0IG5lZWQgdG8gZGVzY3JpYmUgaXQuIElmIGl0IGlzbuKAmXQsIGRvbuKAmXQgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJjbGVhcmx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2NsZWFybHk6XCJhXCJ9LG5vdGU6XCJJZiBpdOKAmXMgc2VsZi1ldmlkZW50IHRoZW4gbWF5YmUgeW91IGRvbuKAmXQgbmVlZCB0byBkZXNjcmliZSBpdC4gSWYgaXQgaXNu4oCZdCwgZG9u4oCZdCBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImV2ZXJ5b25lLWtub3dzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wiZXZlcnlvbmUga25vd3NcIjpcImFcIn0sbm90ZTpcIklmIGl04oCZcyBzZWxmLWV2aWRlbnQgdGhlbiBtYXliZSB5b3UgZG9u4oCZdCBuZWVkIHRvIGRlc2NyaWJlIGl0LiBJZiBpdCBpc27igJl0LCBkb27igJl0IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwic3RyYWlnaHRmb3J3YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wic3RyYWlnaHQgZm9yd2FyZFwiOlwiYVwiLHN0cmFpZ2h0Zm9yd2FyZDpcImFcIixcInN0cmFpZ2h0IGZvcndhcmRseVwiOlwiYVwiLHN0cmFpZ2h0Zm9yd2FyZGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IHN0cmFpZ2h0IGZvcndhcmQuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC5cIn0se2lkOlwiaGVyLWhpbVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0aGVpcjpcImFcIix0aGVpcnM6XCJhXCIsdGhlbTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyOlwiZmVtYWxlXCIsaGVyczpcImZlbWFsZVwiLGhpbTpcIm1hbGVcIixoaXM6XCJtYWxlXCJ9LGNvbmRpdGlvbjpcIndoZW4gcmVmZXJyaW5nIHRvIGEgcGVyc29uXCJ9LHtpZDpcImhlLXNoZVwiLHR5cGU6XCJvclwiLGFwb3N0cm9waGU6ITAsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RoZXk6XCJhXCIsaXQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NoZTpcImZlbWFsZVwiLGhlOlwibWFsZVwiLFwic2hlJ2RcIjpcImZlbWFsZVwiLFwiaGUnZFwiOlwibWFsZVwiLFwic2hlJ2xsXCI6XCJmZW1hbGVcIixcImhlJ2xsXCI6XCJtYWxlXCIsXCJzaGUnc1wiOlwiZmVtYWxlXCIsXCJoZSdzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJoZXJzZWxmLWhpbXNlbGZcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGhlbXNlbHZlczpcImFcIix0aGVpcnNlbGY6XCJhXCIsc2VsZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyc2VsZjpcImZlbWFsZVwiLGhpbXNlbGY6XCJtYWxlXCJ9fSx7aWQ6XCJib3ktZ2lybFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntraWQ6XCJhXCIsY2hpbGQ6XCJhXCIseW91dGg6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmw6XCJmZW1hbGVcIixib3k6XCJtYWxlXCJ9LGNvbmRpdGlvbjpcIndoZW4gcmVmZXJyaW5nIHRvIGEgcGVyc29uXCJ9LHtpZDpcImdhbHMtbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Blb3BsZTpcImFcIixwZXJzb25zOlwiYVwiLGZvbGtzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21lbjpcImZlbWFsZVwiLGdpcmxzOlwiZmVtYWxlXCIsZ2FsczpcImZlbWFsZVwiLGxhZGllczpcImZlbWFsZVwiLG1hbjpcIm1hbGVcIixib3lzOlwibWFsZVwiLG1lbjpcIm1hbGVcIixndXlzOlwibWFsZVwiLGR1ZGVzOlwibWFsZVwiLGdlbnRzOlwibWFsZVwiLGdlbnRsZW1lbjpcIm1hbGVcIn19LHtpZDpcImdhbC1ndXlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVyc29uOlwiYVwiLGZyaWVuZDpcImFcIixwYWw6XCJhXCIsZm9sazpcImFcIixpbmRpdmlkdWFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21hbjpcImZlbWFsZVwiLGdhbDpcImZlbWFsZVwiLGxhZHk6XCJmZW1hbGVcIixiYWJlOlwiZmVtYWxlXCIsYmltYm86XCJmZW1hbGVcIixjaGljazpcImZlbWFsZVwiLGd1eTpcIm1hbGVcIixsYWQ6XCJtYWxlXCIsZmVsbG93OlwibWFsZVwiLGR1ZGU6XCJtYWxlXCIsYnJvOlwibWFsZVwiLGdlbnRsZW1hbjpcIm1hbGVcIn19LHtpZDpcImZhdGhlcmxhbmQtbW90aGVybGFuZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm5hdGl2ZSBsYW5kXCI6XCJhXCIsaG9tZWxhbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vdGhlcmxhbmQ6XCJmZW1hbGVcIixmYXRoZXJsYW5kOlwibWFsZVwifX0se2lkOlwiZmF0aGVyLXRvbmd1ZS1tb3RoZXItdG9uZ3VlXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibmF0aXZlIHRvbmd1ZVwiOlwiYVwiLFwibmF0aXZlIGxhbmd1YWdlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibW90aGVyIHRvbmd1ZVwiOlwiZmVtYWxlXCIsXCJmYXRoZXIgdG9uZ3VlXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcmVzaG1lbi1mcmVzaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QteWVhciBzdHVkZW50c1wiOlwiYVwiLGZyZXNoZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmcmVzaHdvbWVuOlwiZmVtYWxlXCIsZnJlc2htZW46XCJtYWxlXCJ9fSx7aWQ6XCJnYXJiYWdlbWFuLWdhcmJhZ2V3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImdhcmJhZ2UgY29sbGVjdG9yXCI6XCJhXCIsXCJ3YXN0ZSBjb2xsZWN0b3JcIjpcImFcIixcInRyYXNoIGNvbGxlY3RvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnYXJiYWdld29tYW46XCJmZW1hbGVcIixnYXJiYWdlbWFuOlwibWFsZVwifX0se2lkOlwiZ2FyYmFnZW1lbi1nYXJiYWdld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJnYXJiYWdlIGNvbGxlY3RvcnNcIjpcImFcIixcIndhc3RlIGNvbGxlY3RvcnNcIjpcImFcIixcInRyYXNoIGNvbGxlY3RvcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2FyYmFnZXdvbWVuOlwiZmVtYWxlXCIsZ2FyYmFnZW1lbjpcIm1hbGVcIn19LHtpZDpcImNoYWlybWFuLWNoYWlyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hhaXI6XCJhXCIsaGVhZDpcImFcIixjaGFpcnBlcnNvbjpcImFcIixjb29yZGluYXRvcjpcImFcIixcImNvbW1pdHRlZSBoZWFkXCI6XCJhXCIsbW9kZXJhdG9yOlwiYVwiLFwicHJlc2lkaW5nIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhaXJ3b21hbjpcImZlbWFsZVwiLGNoYWlybWFuOlwibWFsZVwifX0se2lkOlwiY29tbWl0dGVlLW1hbi1jb21taXR0ZWUtd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb21taXR0ZWUgbWVtYmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbWl0dGVlIHdvbWFuXCI6XCJmZW1hbGVcIixcImNvbW1pdHRlZSBtYW5cIjpcIm1hbGVcIn19LHtpZDpcImNvd2JveS1jb3dnaXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Nvd2hhbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Nvd2dpcmw6XCJmZW1hbGVcIixjb3dib3k6XCJtYWxlXCJ9fSx7aWQ6XCJjb3dib3lzLWNvd2dpcmxzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Nvd2hhbmRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3dnaXJsczpcImZlbWFsZVwiLGNvd2JveXM6XCJtYWxlXCJ9fSx7aWQ6XCJjYXR0bGVtYW4tY2F0dGxld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYXR0bGUgcmFuY2hlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXR0bGV3b21hbjpcImZlbWFsZVwiLGNhdHRsZW1hbjpcIm1hbGVcIn19LHtpZDpcImNhdHRsZW1lbi1jYXR0bGV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSByYW5jaGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXR0bGV3b21lbjpcImZlbWFsZVwiLGNhdHRsZW1lbjpcIm1hbGVcIn19LHtpZDpcImNoYWlybWVuLWNoYWlyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hhaXJzOlwiYVwiLGNoYWlycGVyc29uczpcImFcIixjb29yZGluYXRvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NoYWlyd29tZW46XCJmZW1hbGVcIixjaGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcInBvc3RtYW4tcG9zdHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWFpbCBjYXJyaWVyXCI6XCJhXCIsXCJsZXR0ZXIgY2FycmllclwiOlwiYVwiLFwicG9zdGFsIHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb3N0d29tYW46XCJmZW1hbGVcIixtYWlsd29tYW46XCJmZW1hbGVcIixwb3N0bWFuOlwibWFsZVwiLG1haWxtYW46XCJtYWxlXCJ9fSx7aWQ6XCJwb3N0bWVuLXBvc3R3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1haWwgY2FycmllcnNcIjpcImFcIixcImxldHRlciBjYXJyaWVyc1wiOlwiYVwiLFwicG9zdGFsIHdvcmtlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9zdHdvbWVuOlwiZmVtYWxlXCIsbWFpbHdvbWVuOlwiZmVtYWxlXCIscG9zdG1lbjpcIm1hbGVcIixtYWlsbWVuOlwibWFsZVwifX0se2lkOlwiY2hpY2stY29wLXBvbGljZW1hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntvZmZpY2VyOlwiYVwiLFwicG9saWNlIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9saWNld29tYW46XCJmZW1hbGVcIixwb2xpY2VtYW46XCJtYWxlXCIsXCJjaGljayBjb3BcIjpcImZlbWFsZVwifX0se2lkOlwicG9saWNlbWVuLXBvbGljZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljZXJzOlwiYVwiLFwicG9saWNlIG9mZmljZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3BvbGljZXdvbWVuOlwiZmVtYWxlXCIscG9saWNlbWVuOlwibWFsZVwifX0se2lkOlwic3Rld2FyZC1zdGV3YXJkZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmxpZ2h0IGF0dGVuZGFudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGV3YXJkZXNzOlwiZmVtYWxlXCIsc3Rld2FyZDpcIm1hbGVcIn19LHtpZDpcInN0ZXdhcmRlc3Nlcy1zdGV3YXJkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImZsaWdodCBhdHRlbmRhbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXdhcmRlc3NlczpcImZlbWFsZVwiLHN0ZXdhcmRzOlwibWFsZVwifX0se2lkOlwiY29uZ3Jlc3NtYW4tY29uZ3Jlc3N3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1lbWJlciBvZiBjb25ncmVzc1wiOlwiYVwiLFwiY29uZ3Jlc3MgcGVyc29uXCI6XCJhXCIsbGVnaXNsYXRvcjpcImFcIixyZXByZXNlbnRhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y29uZ3Jlc3N3b21hbjpcImZlbWFsZVwiLGNvbmdyZXNzbWFuOlwibWFsZVwifX0se2lkOlwiY29uZ3Jlc3NtZW4tY29uZ3Jlc3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1lbWJlcnMgb2YgY29uZ3Jlc3NcIjpcImFcIixcImNvbmdyZXNzIHBlcnNvbnNcIjpcImFcIixsZWdpc2xhdG9yczpcImFcIixyZXByZXNlbnRhdGl2ZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvbmdyZXNzd29tZW46XCJmZW1hbGVcIixjb25ncmVzc21lbjpcIm1hbGVcIn19LHtpZDpcImZpcmVtYW4tZmlyZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyZSBmaWdodGVyXCI6XCJhXCIsXCJmaXJlIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlyZXdvbWFuOlwiZmVtYWxlXCIsZmlyZW1hbjpcIm1hbGVcIn19LHtpZDpcImZpcmVtZW4tZmlyZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyZSBmaWdodGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmaXJld29tZW46XCJmZW1hbGVcIixmaXJlbWVuOlwibWFsZVwifX0se2lkOlwiZmlzaGVybWFuLWZpc2hlcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Zpc2hlcjpcImFcIixcImNyZXcgbWVtYmVyXCI6XCJhXCIsZmlzaGVyZm9sazpcImFcIixhbmdsZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Zpc2hlcndvbWFuOlwiZmVtYWxlXCIsZmlzaGVybWFuOlwibWFsZVwifX0se2lkOlwiZmlzaGVybWVuLWZpc2hlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Zpc2hlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Zpc2hlcndvbWVuOlwiZmVtYWxlXCIsZmlzaGVybWVuOlwibWFsZVwifX0se2lkOlwiYnJvdGhlcmhvb2Qtc2lzdGVyaG9vZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntraW5zaGlwOlwiYVwiLGNvbW11bml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2lzdGVyaG9vZDpcImZlbWFsZVwiLGJyb3RoZXJob29kOlwibWFsZVwifX0se2lkOlwiY29tbW9uLWdpcmwtY29tbW9uLW1hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvbW1vbiBwZXJzb25cIjpcImFcIixcImF2ZXJhZ2UgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbW9uIGdpcmxcIjpcImZlbWFsZVwiLFwiY29tbW9uIG1hblwiOlwibWFsZVwifX0se2lkOlwic2FsYXJ5bWFuLXNhbGFyeXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYnVzaW5lc3MgZXhlY3V0aXZlXCI6XCJhXCIsZW50cmVwcmVuZXVyOlwiYVwiLFwiYnVzaW5lc3MgcGVyc29uXCI6XCJhXCIscHJvZmVzc2lvbmFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntidXNpbmVzc3dvbWFuOlwiZmVtYWxlXCIsc2FsYXJ5d29tYW46XCJmZW1hbGVcIixidXNpbmVzc21hbjpcIm1hbGVcIixzYWxhcnltYW46XCJtYWxlXCJ9fSx7aWQ6XCJzYWxhcnltZW4tc2FsYXJ5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJidXNpbmVzcyBleGVjdXRpdmVzXCI6XCJhXCIsZW50cmVwcmVuZXVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVzaW5lc3N3b21lbjpcImZlbWFsZVwiLHNhbGFyeXdvbWVuOlwiZmVtYWxlXCIsXCJjYXJlZXIgZ2lybFwiOlwiZmVtYWxlXCIsXCJjYXJlZXIgd29tYW5cIjpcImZlbWFsZVwiLGJ1c2luZXNzbWVuOlwibWFsZVwiLHNhbGFyeW1lbjpcIm1hbGVcIn19LHtpZDpcImphbml0b3ItamFuaXRyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZWFuZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY2xlYW5pbmcgbGFkeVwiOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBnaXJsXCI6XCJmZW1hbGVcIixcImNsZWFuaW5nIHdvbWFuXCI6XCJmZW1hbGVcIixqYW5pdHJlc3M6XCJmZW1hbGVcIixcImNsZWFuaW5nIG1hblwiOlwibWFsZVwiLFwiY2xlYW5pbmcgYm95XCI6XCJtYWxlXCIsamFuaXRvcjpcIm1hbGVcIn19LHtpZDpcImphbml0b3JzLWphbml0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZWFuZXJzOlwiYVwiLGhvdXNla2VlcGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjbGVhbmluZyBsYWRpZXNcIjpcImZlbWFsZVwiLFwiY2xlYW5pbmcgZ2lybHNcIjpcImZlbWFsZVwiLGphbml0cmVzc2VzOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBtZW5cIjpcIm1hbGVcIixqYW5pdG9yczpcIm1hbGVcIn19LHtpZDpcImRlbGl2ZXJ5LWJveS1kZWxpdmVyeS1naXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NvdXJpZXI6XCJhXCIsbWVzc2VuZ2VyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRlbGl2ZXJ5IGdpcmxcIjpcImZlbWFsZVwiLFwiZGVsaXZlcnkgYm95XCI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlbWFuLWZvcmV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzdXBlcnZpc29yOlwiYVwiLFwic2hpZnQgYm9zc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3Jld29tYW46XCJmZW1hbGVcIixmb3JlbWFuOlwibWFsZVwifX0se2lkOlwiZnJvbnRtYW4sLWZyb250LW1hbi1mcm9udHdvbWFuLC1mcm9udC13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntsZWFkOlwiYVwiLGZyb250OlwiYVwiLGZpZ3VyZWhlYWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZnJvbnR3b21hbiwgZnJvbnQgd29tYW5cIjpcImZlbWFsZVwiLFwiZnJvbnRtYW4sIGZyb250IG1hblwiOlwibWFsZVwifX0se2lkOlwiZnJvbnQtbWVuLC1mcm9udG1lbi1mcm9udC13b21lbiwtZnJvbnR3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmaWd1cmVoZWFkczpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmcm9udCB3b21lbiwgZnJvbnR3b21lblwiOlwiZmVtYWxlXCIsXCJmcm9udCBtZW4sIGZyb250bWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlbWVuLWZvcmV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzdXBlcnZpc29yczpcImFcIixcInNoaWZ0IGJvc3Nlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3Jld29tZW46XCJmZW1hbGVcIixmb3JlbWVuOlwibWFsZVwifX0se2lkOlwiaW5zdXJhbmNlLW1hbi1pbnN1cmFuY2Utd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2UgYWdlbnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2Ugd29tYW5cIjpcImZlbWFsZVwiLFwiaW5zdXJhbmNlIG1hblwiOlwibWFsZVwifX0se2lkOlwiaW5zdXJhbmNlLW1lbi1pbnN1cmFuY2Utd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2UgYWdlbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5zdXJhbmNlIHdvbWVuXCI6XCJmZW1hbGVcIixcImluc3VyYW5jZSBtZW5cIjpcIm1hbGVcIn19LHtpZDpcImxhbmRsYWR5LWxhbmRsb3JkXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb3ByaWV0b3I6XCJhXCIsXCJidWlsZGluZyBtYW5hZ2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbmRsYWR5OlwiZmVtYWxlXCIsbGFuZGxvcmQ6XCJtYWxlXCJ9fSx7aWQ6XCJsYW5kbGFkaWVzLWxhbmRsb3Jkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcm9wcmlldG9yczpcImFcIixcImJ1aWxkaW5nIG1hbmFnZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbmRsYWRpZXM6XCJmZW1hbGVcIixsYW5kbG9yZHM6XCJtYWxlXCJ9fSx7aWQ6XCJhbHVtbmEtYWx1bW51c1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntncmFkdWF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWx1bW5hOlwiZmVtYWxlXCIsYWx1bW51czpcIm1hbGVcIn19LHtpZDpcImFsdW1uYWUtYWx1bW5pXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYWR1YXRlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWx1bW5hZTpcImZlbWFsZVwiLGFsdW1uaTpcIm1hbGVcIn19LHtpZDpcIm5ld3NtYW4tbmV3c3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2hvcjpcImFcIixqb3VybmFsaXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXdzd29tYW46XCJmZW1hbGVcIixuZXdzcGFwZXJ3b21hbjpcImZlbWFsZVwiLGFuY2hvcndvbWFuOlwiZmVtYWxlXCIsbmV3c21hbjpcIm1hbGVcIixuZXdzcGFwZXJtYW46XCJtYWxlXCIsYW5jaG9ybWFuOlwibWFsZVwifX0se2lkOlwibmV3c21lbi1uZXdzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YW5jaG9yczpcImFcIixqb3VybmFsaXN0czpcImFcIn0saW5jb25zaWRlcmF0ZTp7bmV3c3dvbWVuOlwiZmVtYWxlXCIsbmV3c3BhcGVyd29tZW46XCJmZW1hbGVcIixhbmNob3J3b21lbjpcImZlbWFsZVwiLG5ld3NtZW46XCJtYWxlXCIsbmV3c3BhcGVybWVuOlwibWFsZVwiLGFuY2hvcm1lbjpcIm1hbGVcIn19LHtpZDpcInJlcGFpcm1hbi1yZXBhaXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntyZXBhaXJlcjpcImFcIix0ZWNobmljaWFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXBhaXJ3b21hbjpcImZlbWFsZVwiLHJlcGFpcm1hbjpcIm1hbGVcIn19LHtpZDpcInJlcGFpcm1lbi1yZXBhaXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0ZWNobmljaWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmVwYWlyd29tZW46XCJmZW1hbGVcIixyZXBhaXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzYWxlc2xhZHktc2FsZXNtYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2FsZXNwZXJzb246XCJhXCIsXCJzYWxlcyBjbGVya1wiOlwiYVwiLFwic2FsZXMgcmVwXCI6XCJhXCIsXCJzYWxlcyBhZ2VudFwiOlwiYVwiLFwic2FsZXMgYXR0ZW5kYW50XCI6XCJhXCIsc2VsbGVyOlwiYVwiLFwic2hvcCBhc3Npc3RhbnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FsZXN3b21hbjpcImZlbWFsZVwiLFwic2FsZXMgd29tYW5cIjpcImZlbWFsZVwiLHNhbGVzbGFkeTpcImZlbWFsZVwiLHNhbGVzbWFuOlwibWFsZVwiLFwic2FsZXMgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzYWxlc21lbi1zYWxlc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic2FsZXMgY2xlcmtzXCI6XCJhXCIsXCJzYWxlcyByZXBzXCI6XCJhXCIsXCJzYWxlcyBhZ2VudHNcIjpcImFcIixzZWxsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYWxlc3dvbWVuOlwiZmVtYWxlXCIsXCJzYWxlcyB3b21lblwiOlwiZmVtYWxlXCIsc2FsZXNsYWRpZXM6XCJmZW1hbGVcIixzYWxlc21lbjpcIm1hbGVcIixcInNhbGVzIG1lblwiOlwibWFsZVwifX0se2lkOlwic2VydmljZW1hbi1zZXJ2aWNld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c29sZGllcjpcImFcIixcInNlcnZpY2UgcmVwcmVzZW50YXRpdmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2VydmljZXdvbWFuOlwiZmVtYWxlXCIsc2VydmljZW1hbjpcIm1hbGVcIn19LHtpZDpcInNlcnZpY2VtZW4tc2VydmljZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NvbGRpZXJzOlwiYVwiLFwic2VydmljZSByZXByZXNlbnRhdGl2ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2VydmljZXdvbWVuOlwiZmVtYWxlXCIsc2VydmljZW1lbjpcIm1hbGVcIn19LHtpZDpcIndhaXRlci13YWl0cmVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzZXJ2ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dhaXRyZXNzOlwiZmVtYWxlXCIsd2FpdGVyOlwibWFsZVwifX0se2lkOlwid2FpdGVycy13YWl0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NlcnZlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dhaXRyZXNzZXM6XCJmZW1hbGVcIix3YWl0ZXJzOlwibWFsZVwifX0se2lkOlwid29ya21hbi13b3Jrd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d29ya2VyOlwiYVwiLFwid2FnZSBlYXJuZXJcIjpcImFcIix0YXhwYXllcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya3dvbWFuOlwiZmVtYWxlXCIsXCJ3b3JraW5nIHdvbWFuXCI6XCJmZW1hbGVcIix3b3JrbWFuOlwibWFsZVwiLFwid29ya2luZyBtYW5cIjpcIm1hbGVcIn19LHtpZDpcIndvcmttZW4td29ya3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3dvcmtlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvcmt3b21lbjpcImZlbWFsZVwiLHdvcmttZW46XCJtYWxlXCJ9fSx7aWQ6XCJhY3Rvci1hY3RyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BlcmZvcm1lcjpcImFcIixzdGFyOlwiYVwiLGFydGlzdDpcImFcIixlbnRlcnRhaW5lcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWN0cmVzczpcImZlbWFsZVwiLGFjdG9yOlwibWFsZVwifX0se2lkOlwiYWN0b3JzLWFjdHJlc3Nlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwZXJmb3JtZXJzOlwiYVwiLHN0YXJzOlwiYVwiLGFydGlzdHM6XCJhXCIsZW50ZXJ0YWluZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthY3RyZXNzZXM6XCJmZW1hbGVcIixhY3RvcnM6XCJtYWxlXCJ9fSx7aWQ6XCJhaXJjcmV3d29tYW4tYWlybWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BpbG90OlwiYVwiLGF2aWF0b3I6XCJhXCIsYWlyc3RhZmY6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FpcmNyZXd3b21hbjpcImZlbWFsZVwiLFwiYWlyY3JldyB3b21hblwiOlwiZmVtYWxlXCIsYWlyY3Jld21hbjpcIm1hbGVcIixhaXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJhaXJjcmV3d29tZW4tYWlybWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BpbG90czpcImFcIixhdmlhdG9yczpcImFcIixhaXJzdGFmZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWlyY3Jld3dvbWVuOlwiZmVtYWxlXCIsXCJhaXJjcmV3IHdvbWVuXCI6XCJmZW1hbGVcIixhaXJjcmV3bWVuOlwibWFsZVwiLGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcImFsZGVybWFuLWFsZGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYWJpbmV0IG1lbWJlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbGRlcndvbWFuOlwiZmVtYWxlXCIsYWxkZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJhbGRlcm1lbi1hbGRlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NhYmluZXQ6XCJhXCIsXCJjYWJpbmV0IG1lbWJlcnNcIjpcImFcIixhbGRlcnBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWxkZXJ3b21lbjpcImZlbWFsZVwiLGFsZGVybWVuOlwibWFsZVwifX0se2lkOlwiYXNzZW1ibHltYW4tYXNzZW1ibHl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImFzc2VtYmx5IHBlcnNvblwiOlwiYVwiLFwiYXNzZW1ibHkgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Fzc2VtYmx5d29tYW46XCJmZW1hbGVcIixhc3NlbWJseW1hbjpcIm1hbGVcIn19LHtpZDpcImF1bnQtdW5jbGVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVsYXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2tpbnN3b21hbjpcImZlbWFsZVwiLGF1bnQ6XCJmZW1hbGVcIixraW5zbWFuOlwibWFsZVwiLHVuY2xlOlwibWFsZVwifX0se2lkOlwiYXVudHMtdW5jbGVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3JlbGF0aXZlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7a2luc3dvbWVuOlwiZmVtYWxlXCIsYXVudHM6XCJmZW1hbGVcIixraW5zbWVuOlwibWFsZVwiLHVuY2xlczpcIm1hbGVcIn19LHtpZDpcImJvb2dleW1hbi1ib29nZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib29nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29nZXl3b21hbjpcImZlbWFsZVwiLGJvb2dleW1hbjpcIm1hbGVcIn19LHtpZDpcImJvb2dpZW1hbi1ib29naWV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib29nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29naWV3b21hbjpcImZlbWFsZVwiLGJvb2dpZW1hbjpcIm1hbGVcIn19LHtpZDpcImJvZ2V5bWFuLWJvZ2V5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dleXdvbWFuOlwiZmVtYWxlXCIsYm9nZXltYW46XCJtYWxlXCJ9fSx7aWQ6XCJib2dpZW1hbi1ib2dpZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JvZ2V5bW9uc3RlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9naWV3b21hbjpcImZlbWFsZVwiLGJvZ2llbWFuOlwibWFsZVwifX0se2lkOlwiYm9vZ2llbWVuLWJvb2dpZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29naWV3b21lbjpcImZlbWFsZVwiLGJvb2dpZW1lbjpcIm1hbGVcIn19LHtpZDpcImJvZ2llbWVuLWJvZ2lld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9naWV3b21lbjpcImZlbWFsZVwiLGJvZ2llbWVuOlwibWFsZVwifX0se2lkOlwiYm9uZHNtYW4tYm9uZHN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib25kZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JvbmRzd29tYW46XCJmZW1hbGVcIixib25kc21hbjpcIm1hbGVcIn19LHtpZDpcImJvbmRzbWVuLWJvbmRzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9uZGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9uZHN3b21lbjpcImZlbWFsZVwiLGJvbmRzbWVuOlwibWFsZVwifX0se2lkOlwiaHVzYmFuZC13aWZlXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXI6XCJhXCIsXCJzaWduaWZpY2FudCBvdGhlclwiOlwiYVwiLHNwb3VzZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2lmZTpcImZlbWFsZVwiLGh1c2JhbmQ6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJodXNiYW5kcy13aXZlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJ0bmVyczpcImFcIixcInNpZ25pZmljYW50IG90aGVyc1wiOlwiYVwiLHNwb3VzZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dpdmVzOlwiZmVtYWxlXCIsaHVzYmFuZHM6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lmcmllbmQtZ2lybGZyaWVuZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJ0bmVyOlwiYVwiLGZyaWVuZDpcImFcIixcInNpZ25pZmljYW50IG90aGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmxmcmllbmQ6XCJmZW1hbGVcIixib3lmcmllbmQ6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lmcmllbmRzLWdpcmxmcmllbmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXJzOlwiYVwiLGZyaWVuZHM6XCJhXCIsXCJzaWduaWZpY2FudCBvdGhlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGZyaWVuZHM6XCJmZW1hbGVcIixib3lmcmllbmRzOlwibWFsZVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5idXN0bGUuY29tL2FydGljbGVzLzEwODMyMS02LXJlYXNvbnMtdG8tcmVmZXItdG8teW91ci1zaWduaWZpY2FudC1vdGhlci1hcy15b3VyLXBhcnRuZXJcIn0se2lkOlwiYm95aG9vZC1naXJsaG9vZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGlsZGhvb2Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmxob29kOlwiZmVtYWxlXCIsYm95aG9vZDpcIm1hbGVcIn19LHtpZDpcImJveWlzaC1naXJseVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGlsZGlzaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybHk6XCJmZW1hbGVcIixnaXJsaXNoOlwiZmVtYWxlXCIsYm95aXNoOlwibWFsZVwifX0se2lkOlwiam91cm5leW1hbi1qb3VybmV5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7am91cm5leXBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7am91cm5leXdvbWFuOlwiZmVtYWxlXCIsam91cm5leW1hbjpcIm1hbGVcIn19LHtpZDpcImpvdXJuZXltZW4tam91cm5leXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2pvdXJuZXlwZXJzb25zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqb3VybmV5d29tZW46XCJmZW1hbGVcIixqb3VybmV5bWVuOlwibWFsZVwifX0se2lkOlwiZ29kZmF0aGVyLWdvZG1vdGhlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntnb2RwYXJlbnQ6XCJhXCIsZWxkZXI6XCJhXCIscGF0cm9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnb2Rtb3RoZXI6XCJmZW1hbGVcIixwYXRyb25lc3M6XCJmZW1hbGVcIixnb2RmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJncmFuZGRhdWdodGVyLWdyYW5kc29uXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kY2hpbGQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kZGF1Z2h0ZXI6XCJmZW1hbGVcIixncmFuZHNvbjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZGF1Z2h0ZXJzLWdyYW5kc29uc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntncmFuZGNoaWxkcmVuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGRhdWdodGVyczpcImZlbWFsZVwiLGdyYW5kc29uczpcIm1hbGVcIn19LHtpZDpcImZvcmVmYXRoZXItZm9yZW1vdGhlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNlc3RvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Zm9yZW1vdGhlcjpcImZlbWFsZVwiLGZvcmVmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlZmF0aGVycy1mb3JlbW90aGVyc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNlc3RvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmVtb3RoZXJzOlwiZmVtYWxlXCIsZm9yZWZhdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJncmFtcHMtZ3Jhbm55XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kcGFyZW50OlwiYVwiLGFuY2VzdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFubnk6XCJmZW1hbGVcIixncmFuZG1hOlwiZmVtYWxlXCIsZ3JhbmRtb3RoZXI6XCJmZW1hbGVcIixncmFuZHBhcHB5OlwibWFsZVwiLGdyYW5kZGFkZHk6XCJtYWxlXCIsZ3JhbXBzOlwibWFsZVwiLGdyYW5kcGE6XCJtYWxlXCIsZ3JhbmRmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJncmFuZGZhdGhlcnMtZ3JhbmRtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kcGFyZW50czpcImFcIixhbmNlc3RvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kbW90aGVyczpcImZlbWFsZVwiLGdyYW5kZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcImJyaWRlLWdyb29tXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Nwb3VzZTpcImFcIixuZXdseXdlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnJpZGU6XCJmZW1hbGVcIixncm9vbTpcIm1hbGVcIn19LHtpZDpcImJyb3RoZXItc2lzdGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpYmxpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Npc3RlcjpcImZlbWFsZVwiLGJyb3RoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJicm90aGVycy1zaXN0ZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpYmxpbmdzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaXN0ZXJzOlwiZmVtYWxlXCIsYnJvdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJjYW1lcmFtYW4tY2FtZXJhd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYW1lcmEgb3BlcmF0b3JcIjpcImFcIixcImNhbWVyYSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2FtZXJhd29tYW46XCJmZW1hbGVcIixjYW1lcmFtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjYW1lcmFtZW4tY2FtZXJhd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYW1lcmEgb3BlcmF0b3JzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhbWVyYXdvbWVuOlwiZmVtYWxlXCIsY2FtZXJhbWVuOlwibWFsZVwifX0se2lkOlwiY2F2ZW1hbi1jYXZld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dHJvZ2xvZHl0ZTpcImFcIixob21pbmlkYWU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdmV3b21hbjpcImZlbWFsZVwiLGNhdmVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjYXZlbWVuLWNhdmV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0cm9nbG9keXRhZTpcImFcIix0cm9nbG9keXRpOlwiYVwiLHRyb2dsb2R5dGVzOlwiYVwiLGhvbWluaWRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXZld29tZW46XCJmZW1hbGVcIixjYXZlbWVuOlwibWFsZVwifX0se2lkOlwiY2xlcmd5bWFuLWNsZXJneXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZXJneXBlcnNvbjpcImFcIixjbGVyZ3k6XCJhXCIsY2xlcmljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjbGVyZ3l3b21hbjpcImZlbWFsZVwiLGNsZXJneW1hbjpcIm1hbGVcIn19LHtpZDpcImNsZXJneW1lbi1jbGVyZ3l3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjbGVyZ2llczpcImFcIixjbGVyaWNzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjbGVyZ3l3b21lbjpcImZlbWFsZVwiLGNsZXJneW1lbjpcIm1hbGVcIn19LHtpZDpcImNvdW5jaWxtYW4tY291bmNpbHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bmNpbCBtZW1iZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bmNpbHdvbWFuOlwiZmVtYWxlXCIsY291bmNpbG1hbjpcIm1hbGVcIn19LHtpZDpcImNvdW5jaWxtZW4tY291bmNpbHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bmNpbCBtZW1iZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW5jaWx3b21lbjpcImZlbWFsZVwiLGNvdW5jaWxtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjb3VudHJ5bWFuLWNvdW50cnl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvdW50cnkgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW50cnl3b21hbjpcImZlbWFsZVwiLGNvdW50cnltYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb3VudHJ5bWVuLWNvdW50cnl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvdW50cnkgZm9sa1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3VudHJ5d29tZW46XCJmZW1hbGVcIixjb3VudHJ5bWVuOlwibWFsZVwifX0se2lkOlwiaGFuZHltYW4taGFuZHl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthcnRpc2FuOlwiYVwiLGNyYWZ0c3BlcnNvbjpcImFcIixcInNraWxsZWQgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmR5d29tYW46XCJmZW1hbGVcIixjcmFmdHN3b21hbjpcImZlbWFsZVwiLGhhbmR5bWFuOlwibWFsZVwiLGNyYWZ0c21hbjpcIm1hbGVcIn19LHtpZDpcImhvc3QtaG9zdGVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcmVzZW50ZXI6XCJhXCIsZW50ZXJ0YWluZXI6XCJhXCIsZW1jZWU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvc3Rlc3M6XCJmZW1hbGVcIixob3N0OlwibWFsZVwifX0se2lkOlwiaG9zdGVzc2VzLWhvc3RzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3ByZXNlbnRlcnM6XCJhXCIsZW50ZXJ0YWluZXJzOlwiYVwiLGVtY2VlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG9zdGVzc2VzOlwiZmVtYWxlXCIsaG9zdHM6XCJtYWxlXCJ9fSx7aWQ6XCJoYW5keW1lbi1oYW5keXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FydGlzYW5zOlwiYVwiLGNyYWZ0c3BlcnNvbnM6XCJhXCIsXCJza2lsbGVkIHdvcmtlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZHl3b21lbjpcImZlbWFsZVwiLGNyYWZ0c3dvbWVuOlwiZmVtYWxlXCIsaGFuZHltZW46XCJtYWxlXCIsY3JhZnRzbWVuOlwibWFsZVwifX0se2lkOlwiaGFuZ21hbi1oYW5nd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3VpbGxvdGluZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZ3dvbWFuOlwiZmVtYWxlXCIsaGFuZ21hbjpcIm1hbGVcIn19LHtpZDpcImhhbmdtZW4taGFuZ3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2d1aWxsb3RpbmVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nd29tZW46XCJmZW1hbGVcIixoYW5nbWVuOlwibWFsZVwifX0se2lkOlwiaGVuY2htYW4taGVuY2h3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaWRla2ljazpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVuY2h3b21hbjpcImZlbWFsZVwiLGhlbmNobWFuOlwibWFsZVwifX0se2lkOlwiaGVuY2htZW4taGVuY2h3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaWRla2lja3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlbmNod29tZW46XCJmZW1hbGVcIixoZW5jaG1lbjpcIm1hbGVcIn19LHtpZDpcImhlcm8taGVyb2luZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInJvbGUtbW9kZWxcIjpcImFcIixtZW50b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm9pbmU6XCJmZW1hbGVcIixoZXJvOlwibWFsZVwifX0se2lkOlwiaGVyb2VzLWhlcm9pbmVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wicm9sZS1tb2RlbHNcIjpcImFcIixtZW50b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm9pbmVzOlwiZmVtYWxlXCIsaGVyb2VzOlwibWFsZVwifX0se2lkOlwibWF0ZXJuYWwtcGF0ZXJuYWxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50YWw6XCJhXCIsd2FybTpcImFcIixpbnRpbWF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWF0ZXJuYWw6XCJmZW1hbGVcIixwYXRlcm5hbDpcIm1hbGVcIixmcmF0ZXJuYWw6XCJtYWxlXCJ9fSx7aWQ6XCJtYXRlcm5pdHktcGF0ZXJuaXR5XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcmVudGFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXRlcm5pdHk6XCJmZW1hbGVcIixwYXRlcm5pdHk6XCJtYWxlXCJ9fSx7aWQ6XCJkYWRzLW1vbXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50czpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFtYXM6XCJmZW1hbGVcIixtb3RoZXJzOlwiZmVtYWxlXCIsbW9tczpcImZlbWFsZVwiLG11bXM6XCJmZW1hbGVcIixtb21tYXM6XCJmZW1hbGVcIixtb21taWVzOlwiZmVtYWxlXCIscGFwYXM6XCJtYWxlXCIsZmF0aGVyczpcIm1hbGVcIixkYWRzOlwibWFsZVwiLGRhZGRpZXM6XCJtYWxlXCJ9fSx7aWQ6XCJkYWQtbW9tXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcmVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFtYTpcImZlbWFsZVwiLG1vdGhlcjpcImZlbWFsZVwiLG1vbTpcImZlbWFsZVwiLG11bTpcImZlbWFsZVwiLG1vbW1hOlwiZmVtYWxlXCIsbW9tbXk6XCJmZW1hbGVcIixwYXBhOlwibWFsZVwiLGZhdGhlcjpcIm1hbGVcIixkYWQ6XCJtYWxlXCIscG9wOlwibWFsZVwiLGRhZGR5OlwibWFsZVwifX0se2lkOlwiZGF1Z2h0ZXItc29uXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYXVnaHRlcjpcImZlbWFsZVwiLHNvbjpcIm1hbGVcIn19LHtpZDpcImRhdWdodGVycy1zb25zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkcmVuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYXVnaHRlcnM6XCJmZW1hbGVcIixzb25zOlwibWFsZVwifX0se2lkOlwiZG9vcm1hbi1kb29yd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y29uY2llcmdlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkb29yd29tYW46XCJmZW1hbGVcIixkb29ybWFuOlwibWFsZVwifX0se2lkOlwiZG9vcm1lbi1kb29yd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y29uY2llcmdlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZG9vcndvbWVuOlwiZmVtYWxlXCIsZG9vcm1lbjpcIm1hbGVcIn19LHtpZDpcImZlbWluaW4tbWFubHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5seTpcImFcIixtYXR1cmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZlbWluaW46XCJmZW1hbGVcIixkdWRlbHk6XCJtYWxlXCIsbWFubHk6XCJtYWxlXCJ9fSx7aWQ6XCJmZW1hbGVzLW1hbGVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2h1bWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtYWxlczpcImZlbWFsZVwiLG1hbGVzOlwibWFsZVwifX0se2lkOlwia2luZy1xdWVlblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntydWxlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZW1wcmVzczpcImZlbWFsZVwiLHF1ZWVuOlwiZmVtYWxlXCIsZW1wZXJvcjpcIm1hbGVcIixraW5nOlwibWFsZVwifX0se2lkOlwia2luZ3MtcXVlZW5zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3J1bGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZW1wcmVzc2VzOlwiZmVtYWxlXCIscXVlZW5zOlwiZmVtYWxlXCIsZW1wZXJvcnM6XCJtYWxlXCIsa2luZ3M6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nc2l6ZS1xdWVlbnNpemVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7anVtYm86XCJhXCIsZ2lnYW50aWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1ZWVuc2l6ZTpcImZlbWFsZVwiLGtpbmdzaXplOlwibWFsZVwifX0se2lkOlwia2luZ21ha2VyLXF1ZWVubWFrZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJwb3dlciBiZWhpbmQgdGhlIHRocm9uZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntxdWVlbm1ha2VyOlwiZmVtYWxlXCIsa2luZ21ha2VyOlwibWFsZVwifX0se2lkOlwibGF5bWFuLWxheXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NpdmlsaWFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYXl3b21hbjpcImZlbWFsZVwiLGxheW1hbjpcIm1hbGVcIn19LHtpZDpcImxheW1lbi1sYXl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaXZpbGlhbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xheXdvbWVuOlwiZmVtYWxlXCIsbGF5bWVuOlwibWFsZVwifX0se2lkOlwiZGFtZS1sb3JkXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljaWFsOlwiYVwiLG93bmVyOlwiYVwiLGV4cGVydDpcImFcIixzdXBlcmlvcjpcImFcIixjaGllZjpcImFcIixydWxlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFtZTpcImZlbWFsZVwiLGxvcmQ6XCJtYWxlXCJ9fSx7aWQ6XCJkYW1lcy1sb3Jkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntvZmZpY2lhbHM6XCJhXCIsY2hpZWZzOlwiYVwiLHJ1bGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFtZXM6XCJmZW1hbGVcIixsb3JkczpcIm1hbGVcIn19LHtpZDpcIm1hbmhvb2Qtd29tYW5ob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FkdWx0aG9vZDpcImFcIixwZXJzb25ob29kOlwiYVwiLG1hdHVyaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21hbmhvb2Q6XCJmZW1hbGVcIixtYXNjdWxpbml0eTpcIm1hbGVcIixtYW5ob29kOlwibWFsZVwifX0se2lkOlwiZmVtaW5pbml0eS1tYW5saW5lc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5pdHk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZlbWluaW5pdHk6XCJmZW1hbGVcIixtYW5saW5lc3M6XCJtYWxlXCJ9fSx7aWQ6XCJtYXJrc21hbi1tYXJrc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Nob290ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hcmtzd29tYW46XCJmZW1hbGVcIixtYXJrc21hbjpcIm1hbGVcIn19LHtpZDpcIm1hcmtzbWVuLW1hcmtzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2hvb3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hcmtzd29tZW46XCJmZW1hbGVcIixtYXJrc21lbjpcIm1hbGVcIn19LHtpZDpcIm1pZGRsZW1hbi1taWRkbGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntpbnRlcm1lZGlhcnk6XCJhXCIsXCJnby1iZXR3ZWVuXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pZGRsZXdvbWFuOlwiZmVtYWxlXCIsbWlkZGxlbWFuOlwibWFsZVwifX0se2lkOlwibWlkZGxlbWVuLW1pZGRsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ludGVybWVkaWFyaWVzOlwiYVwiLFwiZ28tYmV0d2VlbnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlkZGxld29tZW46XCJmZW1hbGVcIixtaWRkbGVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWxrbWFuLW1pbGt3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1pbGsgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pbGt3b21hbjpcImZlbWFsZVwiLG1pbGttYW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWxrbWVuLW1pbGt3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1pbGsgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pbGt3b21lbjpcImZlbWFsZVwiLG1pbGttZW46XCJtYWxlXCJ9fSx7aWQ6XCJuZXBoZXctbmllY2VcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7bmlibGluZzpcImFcIixcInNpYmxpbmfigJlzIGNoaWxkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25pZWNlOlwiZmVtYWxlXCIsbmVwaGV3OlwibWFsZVwifX0se2lkOlwibmVwaGV3cy1uaWVjZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7bmlibGluZ3M6XCJhXCIsXCJzaWJsaW5n4oCZcyBjaGlsZHJlblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntuaWVjZXM6XCJmZW1hbGVcIixuZXBoZXdzOlwibWFsZVwifX0se2lkOlwibm9ibGVtYW4tbm9ibGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub2JsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bm9ibGV3b21hbjpcImZlbWFsZVwiLG5vYmxlbWFuOlwibWFsZVwifX0se2lkOlwibm9ibGVtZW4tbm9ibGV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub2JsZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25vYmxld29tZW46XCJmZW1hbGVcIixub2JsZW1lbjpcIm1hbGVcIn19LHtpZDpcIm9tYnVkc21hbi1vbWJ1ZHN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub3Rhcnk6XCJhXCIsXCJjb25zdW1lciBhZHZvY2F0ZVwiOlwiYVwiLFwidHJvdWJsZSBzaG9vdGVyXCI6XCJhXCIsb21zYnVkcGVyc29uOlwiYVwiLG1lZGlhdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntvbWJ1ZHN3b21hbjpcImZlbWFsZVwiLG9tYnVkc21hbjpcIm1hbGVcIn19LHtpZDpcIm9tYnVkc21lbi1vbWJ1ZHN3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub3RhcmllczpcImFcIixvbXNidWRwZXJzb25zOlwiYVwiLG9tc2J1ZHBlb3BsZTpcImFcIixtZWRpYXRvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29tYnVkc3dvbWVuOlwiZmVtYWxlXCIsb21idWRzbWVuOlwibWFsZVwifX0se2lkOlwicHJpbmNlLXByaW5jZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2hlaXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW5jZXNzOlwiZmVtYWxlXCIscHJpbmNlOlwibWFsZVwifX0se2lkOlwicHJpbmNlcy1wcmluY2Vzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2hlaXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwcmluY2Vzc2VzOlwiZmVtYWxlXCIscHJpbmNlczpcIm1hbGVcIn19LHtpZDpcInNhbmRtYW4tc2FuZHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZhaXJ5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYW5kd29tYW46XCJmZW1hbGVcIixzYW5kbWFuOlwibWFsZVwifX0se2lkOlwic2FuZG1lbi1zYW5kd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFpcmllczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FuZHdvbWVuOlwiZmVtYWxlXCIsc2FuZG1lbjpcIm1hbGVcIn19LHtpZDpcInNob3dtYW4tc2hvd3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb21vdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaG93d29tYW46XCJmZW1hbGVcIixzaG93bWFuOlwibWFsZVwifX0se2lkOlwic2hvd21lbi1zaG93d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvbW90ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaG93d29tZW46XCJmZW1hbGVcIixcInNob3cgd29tZW5cIjpcImZlbWFsZVwiLHNob3dtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcGFjZW1hbi1zcGFjZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FzdHJvbmF1dDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhY2V3b21hbjpcImZlbWFsZVwiLHNwYWNlbWFuOlwibWFsZVwifX0se2lkOlwic3BhY2VtZW4tc3BhY2V3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthc3Ryb25hdXRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFjZXdvbWVuOlwiZmVtYWxlXCIsc3BhY2VtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9rZXNtYW4tc3Bva2Vzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BlYWtlcjpcImFcIixzcG9rZXNwZXJzb246XCJhXCIscmVwcmVzZW50YXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb2tlc3dvbWFuOlwiZmVtYWxlXCIsc3Bva2VzbWFuOlwibWFsZVwifX0se2lkOlwic3Bva2VzbWVuLXNwb2tlc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NwZWFrZXJzOlwiYVwiLHNwb2tlc3BlcnNvbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb2tlc3dvbWVuOlwiZmVtYWxlXCIsc3Bva2VzbWVuOlwibWFsZVwifX0se2lkOlwic3BvcnRzbWFuLXNwb3J0c3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2F0aGxldGU6XCJhXCIsXCJzcG9ydHMgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb3J0c3dvbWFuOlwiZmVtYWxlXCIsc3BvcnRzbWFuOlwibWFsZVwifX0se2lkOlwic3BvcnRzbWVuLXNwb3J0c3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2F0aGxldGVzOlwiYVwiLFwic3BvcnRzIHBlcnNvbnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzd29tZW46XCJmZW1hbGVcIixzcG9ydHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGF0ZXNtYW4tc3RhdGVzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2VuYXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RhdGVzd29tYW46XCJmZW1hbGVcIixzdGF0ZXNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGVwYnJvdGhlci1zdGVwc2lzdGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1zaWJsaW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBzaXN0ZXI6XCJmZW1hbGVcIixzdGVwYnJvdGhlcjpcIm1hbGVcIn19LHtpZDpcInN0ZXBicm90aGVycy1zdGVwc2lzdGVyc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0ZXAtc2libGluZ3NcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcHNpc3RlcnM6XCJmZW1hbGVcIixzdGVwYnJvdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJzdGVwZGFkLXN0ZXBtb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXBhcmVudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGVwbW9tOlwiZmVtYWxlXCIsc3RlcG1vdGhlcjpcImZlbWFsZVwiLHN0ZXBkYWQ6XCJtYWxlXCIsc3RlcGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcInN0ZXBmYXRoZXJzLXN0ZXBtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1wYXJlbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBtb3RoZXJzOlwiZmVtYWxlXCIsc3RlcGZhdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJzdXBlcm1hbi1zdXBlcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RpdGFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdXBlcndvbWFuOlwiZmVtYWxlXCIsc3VwZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzdXBlcm1lbi1zdXBlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RpdGFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3VwZXJ3b21lbjpcImZlbWFsZVwiLHN1cGVybWVuOlwibWFsZVwifX0se2lkOlwidW5tYW5seS11bndvbWFubHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aW5odW1hbmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Vud29tYW5seTpcImZlbWFsZVwiLHVud29tZW5seTpcImZlbWFsZVwiLHVubWFubHk6XCJtYWxlXCIsdW5tZW5seTpcIm1hbGVcIn19LHtpZDpcIndhdGNobWFuLXdhdGNod29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d2F0Y2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2F0Y2h3b21hbjpcImZlbWFsZVwiLHdhdGNobWFuOlwibWFsZVwifX0se2lkOlwid2F0Y2htZW4td2F0Y2h3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3YXRjaGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2F0Y2h3b21lbjpcImZlbWFsZVwiLHdhdGNobWVuOlwibWFsZVwifX0se2lkOlwid2VhdGhlcm1hbi13ZWF0aGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ3ZWF0aGVyIGZvcmVjYXN0ZXJcIjpcImFcIixtZXRlb3JvbG9naXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3ZWF0aGVyd29tYW46XCJmZW1hbGVcIix3ZWF0aGVybWFuOlwibWFsZVwifX0se2lkOlwid2VhdGhlcm1lbi13ZWF0aGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ3ZWF0aGVyIGZvcmVjYXN0ZXJzXCI6XCJhXCIsbWV0ZW9yb2xvZ2lzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dlYXRoZXJ3b21lbjpcImZlbWFsZVwiLHdlYXRoZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJ3aWRvdy13aWRvd2VyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JlcmVhdmVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aWRvdzpcImZlbWFsZVwiLHdpZG93czpcImZlbWFsZVwiLHdpZG93ZXI6XCJtYWxlXCIsd2lkb3dlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJvd24tbWFuLW93bi13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm93biBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJvd24gd29tYW5cIjpcImZlbWFsZVwiLFwib3duIG1hblwiOlwibWFsZVwifX0se2lkOlwiZnJlbmNobWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmcmVuY2g6XCJhXCIsXCJ0aGUgZnJlbmNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZW5jaG1lbjpcIm1hbGVcIn19LHtpZDpcImxhZHlsaWtlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2NvdXJ0ZW91czpcImFcIixjdWx0dXJlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFkeWxpa2U6XCJmZW1hbGVcIn19LHtpZDpcImxpa2UtYS1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Jlc29sdXRlbHk6XCJhXCIsYnJhdmVseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsaWtlIGEgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tbmFtZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntcImJpcnRoIG5hbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gbmFtZVwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tdm95YWdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3Qgdm95YWdlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIHZveWFnZVwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tZmxpZ2h0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QgZmxpZ2h0XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIGZsaWdodFwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYW4tZW5vdWdoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0cm9uZyBlbm91Z2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gZW5vdWdoXCI6XCJtYWxlXCJ9fSx7aWQ6XCJvbmV1cG1hbnNoaXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Vwc3RhZ2luZzpcImFcIixjb21wZXRpdGl2ZW5lc3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29uZXVwbWFuc2hpcDpcIm1hbGVcIn19LHtpZDpcIm1ycy1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJtcy5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtaXNzLlwiOlwiZmVtYWxlXCIsXCJtcnMuXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1hbm1hZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e21hbnVmYWN0dXJlZDpcImFcIixhcnRpZmljaWFsOlwiYVwiLHN5bnRoZXRpYzpcImFcIixcIm1hY2hpbmUtbWFkZVwiOlwiYVwiLGNvbnN0cnVjdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5tYWRlOlwibWFsZVwifX0se2lkOlwibWFuLW9mLWFjdGlvblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZHluYW1vOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiBhY3Rpb25cIjpcIm1hbGVcIn19LHtpZDpcIm1hbi1vZi1sZXR0ZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzY2hvbGFyOlwiYVwiLHdyaXRlcjpcImFcIixcImxpdGVyYXJ5IGZpZ3VyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiBsZXR0ZXJzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW4tb2YtdGhlLXdvcmxkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzb3BoaXN0aWNhdGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIHRoZSB3b3JsZFwiOlwibWFsZVwifX0se2lkOlwiZmVsbG93c2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2FtYXJhZGVyaWU6XCJhXCIsY29tbXVuaXR5OlwiYVwiLG9yZ2FuaXphdGlvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVsbG93c2hpcDpcIm1hbGVcIn19LHtpZDpcImZyZXNobWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImZpcnN0LXllYXIgc3R1ZGVudFwiOlwiYVwiLGZyZXNoZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZXNobWFuOlwibWFsZVwiLGZyZXNod29tYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3b3JrbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJxdWFsaXR5IGNvbnN0cnVjdGlvblwiOlwiYVwiLGV4cGVydGlzZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya21hbnNoaXA6XCJtYWxlXCJ9fSx7aWQ6XCJob3VzZXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7aG9tZW1ha2VyOlwiYVwiLGhvbWV3b3JrZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvdXNld2lmZTpcImZlbWFsZVwifX0se2lkOlwiaG91c2V3aXZlc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntob21lbWFrZXJzOlwiYVwiLGhvbWV3b3JrZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3VzZXdpdmVzOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtb3RoZXJseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntsb3Zpbmc6XCJhXCIsd2FybTpcImFcIixudXJ0dXJpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vdGhlcmx5OlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYW5wb3dlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJodW1hbiByZXNvdXJjZXNcIjpcImFcIix3b3JrZm9yY2U6XCJhXCIscGVyc29ubmVsOlwiYVwiLHN0YWZmOlwiYVwiLGxhYm9yOlwiYVwiLFwibGFib3IgZm9yY2VcIjpcImFcIixzdGFmZmluZzpcImFcIixcImNvbWJhdCBwZXJzb25uZWxcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFucG93ZXI6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXItb2YtY2VyZW1vbmllc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZW1jZWU6XCJhXCIsbW9kZXJhdG9yOlwiYVwiLGNvbnZlbm9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciBvZiBjZXJlbW9uaWVzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJmdWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NraWxsZWQ6XCJhXCIsYXV0aG9yaXRhdGl2ZTpcImFcIixjb21tYW5kaW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJmdWw6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJtaW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntnZW5pdXM6XCJhXCIsY3JlYXRvcjpcImFcIixpbnN0aWdhdG9yOlwiYVwiLG92ZXJzZWU6XCJhXCIsbGF1bmNoOlwiYVwiLG9yaWdpbmF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVybWluZDpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnBpZWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndvcmsgb2YgZ2VuaXVzXCI6XCJhXCIsXCJjaGVmIGTigJlvZXV2cmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVycGllY2U6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJwbGFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt2aXNpb246XCJhXCIsXCJjb21wcmVoZW5zaXZlIHBsYW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVycGxhbjpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnN0cm9rZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ0cnVtcCBjYXJkXCI6XCJhXCIsXCJzdHJva2Ugb2YgZ2VuaXVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcnN0cm9rZTpcIm1hbGVcIn19LHtpZDpcIm1hZG1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsZW50aHVzaWFzdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFkbWFuOlwibWFsZVwiLFwibWFkIG1hblwiOlwibWFsZVwifX0se2lkOlwibWFkbWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYW5hdGljczpcImFcIix6ZWFsb3RzOlwiYVwiLGVudGh1c2lhc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWRtZW46XCJtYWxlXCIsXCJtYWQgbWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5raW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbmtpbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmtpbmQ6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5ob3VyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIGhvdXJcIjpcImFcIixcImhvdXIgb2Ygd29ya1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5ob3VyOlwibWFsZVwiLFwibWFuIGhvdXJcIjpcIm1hbGVcIn19LHtpZDpcIm1hbmhvdXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIGhvdXJzXCI6XCJhXCIsXCJob3VycyBvZiB3b3JrXCI6XCJhXCIsXCJob3VycyBvZiBsYWJvclwiOlwiYVwiLGhvdXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5ob3VyczpcIm1hbGVcIixcIm1hbiBob3Vyc1wiOlwibWFsZVwifX0se2lkOlwibWFubmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzdGFmZmVkOlwiYVwiLGNyZXdlZDpcImFcIixwaWxvdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5uZWQ6XCJhXCJ9LG5vdGU6XCJVc2luZyBnZW5kZXIgbmV1dHJhbCBsYW5ndWFnZSBtZWFucyB1c2VycyB3aWxsIGhlbHAgdG8gYnJlYWsgdXAgZ2VuZGVyIHN0ZXJlb3R5cGVzLlwifSx7aWQ6XCJ1bm1hbm5lZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cm9ib3RpYzpcImFcIixhdXRvbWF0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3VubWFubmVkOlwiYVwifSxub3RlOlwiVXNpbmcgZ2VuZGVyIG5ldXRyYWwgbGFuZ3VhZ2UgbWVhbnMgdXNlcnMgd2lsbCBoZWxwIHRvIGJyZWFrIHVwIGdlbmRlciBzdGVyZW90eXBlcy5cIn0se2lkOlwibW9hbmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7d2hpbmluZzpcImFcIixjb21wbGFpbmluZzpcImFcIixjcnlpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpdGNoaW5nOlwiYVwiLG1vYW5pbmc6XCJhXCJ9fSx7aWQ6XCJtb2FuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt3aGluZTpcImFcIixjb21wbGFpbjpcImFcIixjcnk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpdGNoOlwiYVwiLG1vYW46XCJhXCJ9fSx7aWQ6XCJ3aWZlYmVhdGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRhbmsgdG9wXCI6XCJhXCIsXCJzbGVldmVsZXNzIHVuZGVyc2hpcnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3aWZlIGJlYXRlclwiOlwiYVwiLHdpZmViZWF0ZXI6XCJhXCJ9fSx7aWQ6XCJhbmNpZW50LW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhbmNpZW50IGNpdmlsaXphdGlvblwiOlwiYVwiLFwiYW5jaWVudCBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJhbmNpZW50IG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF1dGhvcmVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXV0aG9yOlwiYVwiLHdyaXRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXV0aG9yZXNzOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2ZXJhZ2UtaG91c2V3aWZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgY29uc3VtZXJcIjpcImFcIixcImF2ZXJhZ2UgaG91c2Vob2xkXCI6XCJhXCIsXCJhdmVyYWdlIGhvbWVtYWtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgaG91c2V3aWZlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJhdmVyYWdlIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2ZXJhZ2Utd29ya2luZy1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSB3YWdlIGVhcm5lclwiOlwiYVwiLFwiYXZlcmFnZSB0YXhwYXllclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2Ugd29ya2luZyBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJhdmlhdHJpeFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXZpYXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXZpYXRyaXg6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYnJvdGhlcmhvb2Qtb2YtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBodW1hbiBmYW1pbHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJicm90aGVyaG9vZCBvZiBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjYWxlbmRhci1naXJsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttb2RlbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjYWxlbmRhciBnaXJsXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiY2FsbC1naXJsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntlc2NvcnQ6XCJhXCIscHJvc3RpdHV0ZTpcImFcIixcInNleCB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjYWxsIGdpcmxcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjaHVyY2htYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NsZXJpYzpcImFcIixcInByYWN0aWNpbmcgQ2hyaXN0aWFuXCI6XCJhXCIsXCJwaWxsYXIgb2YgdGhlIENodXJjaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaHVyY2htYW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZW5nbGlzaC1tYXN0ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZW5nbGlzaCBjb29yZGluYXRvclwiOlwiYVwiLFwic2VuaW9yIHRlYWNoZXIgb2YgZW5nbGlzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImVuZ2xpc2ggbWFzdGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZW5nbGlzaG1lblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0aGUgZW5nbGlzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbmdsaXNobWVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImV4ZWN1dHJpeFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZXhlY3V0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2V4ZWN1dHJpeDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJmYXRoZXItb2YtKlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmb3VuZGVyIG9mXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZmF0aGVyIG9mICpcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJmb3VuZGluZy1mYXRoZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGZvdW5kZXJzXCI6XCJhXCIsXCJmb3VuZGluZyBsZWFkZXJzXCI6XCJhXCIsZm9yZWJlYXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZvdW5kaW5nIGZhdGhlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImhvdXNlbWFpZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJob3VzZSB3b3JrZXJcIjpcImFcIixcImRvbWVzdGljIGhlbHBcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG91c2VtYWlkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImluZHVzdHJpYWwtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImluZHVzdHJpYWwgY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJpbmR1c3RyaWFsIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluZHVzdHJpYWwgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibGFkeS1kb2N0b3JcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RvY3RvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsYWR5IGRvY3RvclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImxlYWRpbmctbGFkeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bGVhZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsZWFkaW5nIGxhZHlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYWlkZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3ZpcmdpbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFpZGVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlbi1yYWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZpcnN0IHJhY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gcmFjZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlbi1zcGVlY2hcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3Qgc3BlZWNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIHNwZWVjaFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbi1hLWRlc2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgYSBkZXNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIGEgZGVza1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbi1pbi10aGUtc3RyZWV0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm9yZGluYXJ5IGNpdGl6ZW5cIjpcImFcIixcInR5cGljYWwgcGVyc29uXCI6XCJhXCIsXCJhdmVyYWdlIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBpbiB0aGUgc3RyZWV0XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLW9mLXRoZS1sYW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYXJtZXI6XCJhXCIsXCJydXJhbCB3b3JrZXJcIjpcImFcIixncmF6aWVyOlwiYVwiLGxhbmRvd25lcjpcImFcIixcInJ1cmFsIGNvbW11bml0eVwiOlwiYVwiLFwiY291bnRyeSBwZW9wbGVcIjpcImFcIixcImNvdW50cnkgZm9sa1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiB0aGUgbGFuZFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbnMtYmVzdC1mcmllbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBmYWl0aGZ1bCBkb2dcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW5zIGJlc3QgZnJpZW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLXRoZS1ib290aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzdGFmZiB0aGUgYm9vdGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gdGhlIGJvb3RoXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLXRoZS1waG9uZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYW5zd2VyIHRoZSBwaG9uZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gdGhlIHBob25lc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbnNpemVkLXRhc2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBkZW1hbmRpbmcgdGFza1wiOlwiYVwiLFwiYSBiaWcgam9iXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuc2l6ZWQgdGFza1wiOlwiYVwiLFwibWFuIHNpemVkIHRhc2tcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXIta2V5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBhc3Mga2V5XCI6XCJhXCIsb3JpZ2luYWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIGtleVwiOlwiYVwiLFwibWFzdGVyIGNvcHlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXItcGxhblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJncmFuZCBzY2hlbWVcIjpcImFcIixcImd1aWRpbmcgcHJpbmNpcGxlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciBwbGFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFzdGVyLXRoZS1hcnRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYmVjb21lIHNraWxsZWRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYXN0ZXIgdGhlIGFydFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1lbi1vZi1zY2llbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzY2llbnRpc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1lbiBvZiBzY2llbmNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWlkd2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiaXJ0aGluZyBudXJzZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttaWR3aWZlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1vZGVybi1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wibW9kZXJuIGNpdmlsaXphdGlvblwiOlwiYVwiLFwibW9kZXJuIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1vZGVybiBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJuby1tYW5zLWxhbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widW5vY2N1cGllZCB0ZXJyaXRvcnlcIjpcImFcIix3YXN0ZWxhbmQ6XCJhXCIsZGVhdGh0cmFwOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm5vIG1hbnMgbGFuZFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm9mZmljZS1naXJsc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhZG1pbmlzdHJhdGl2ZSBzdGFmZlwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm9mZmljZSBnaXJsc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInBvZXRlc3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BvZXQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3BvZXRlc3M6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwicmFpbHdheW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJyYWlsd2F5IHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyYWlsd2F5bWFuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInNwb3J0c21hbmxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZhaXI6XCJhXCIsc3BvcnRpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb3J0c21hbmxpa2U6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwic3BvcnRzbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFpcm5lc3M6XCJhXCIsXCJnb29kIGh1bW9yXCI6XCJhXCIsXCJzZW5zZSBvZiBmYWlyIHBsYXlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzbWFuc2hpcDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzdGF0ZXNtYW5saWtlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXBsb21hdGljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGF0ZXNtYW5saWtlOlwiYVwiLFwic3RhdGVzbWFuIGxpa2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzdG9ja21hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJjYXR0bGUgd29ya2VyXCI6XCJhXCIsZmFybWhhbmQ6XCJhXCIsZHJvdmVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdG9ja21hbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ0cmFkZXNtYW5zLWVudHJhbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNlcnZpY2UgZW50cmFuY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ0cmFkZXNtYW5zIGVudHJhbmNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwidGF4LW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0YXggY29tbWlzc2lvbmVyXCI6XCJhXCIsXCJ0YXggb2ZmaWNlXCI6XCJhXCIsXCJ0YXggY29sbGVjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widGF4IG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInVzaGVyZXR0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dXNoZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3VzaGVyZXR0ZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b21hbi1sYXd5ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2xhd3llcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3b21hbiBsYXd5ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b21hbi1wYWludGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYWludGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvbWFuIHBhaW50ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b3JraW5nLXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wid2FnZSBvciBzYWxhcnkgZWFybmluZyB3b21hblwiOlwiYVwiLFwidHdvLWluY29tZSBmYW1pbHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3b3JraW5nIG1vdGhlclwiOlwiYVwiLFwid29ya2luZyB3aWZlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaG9tb3NleHVhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Z2F5OlwiYVwiLFwiZ2F5IG1hblwiOlwiYVwiLGxlc2JpYW46XCJhXCIsXCJnYXkgcGVyc29uL3Blb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob21vc2V4dWFsOlwiYVwifSxub3RlOlwiVGhpcyB0ZXJtIGhhcyBhIGNsaW5pY2FsIGhpc3RvcnkgYW5kIGlzIHVzZWQgdG8gaW1wbHkgTEdCVFErIHBlb3BsZSBhcmUgZGlzZWFzZWQgb3IgcHN5Y2hvbG9naWNhbGx5L2Vtb3Rpb25hbGx5IGRpc29yZGVyZWQgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImhvbW9zZXh1YWwtcmVsYXRpb25zXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyZWxhdGlvbnNoaXA6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaG9tb3NleHVhbCByZWxhdGlvbnNcIjpcImFcIixcImhvbW9zZXh1YWwgcmVsYXRpb25zaGlwXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBsYWJlbGluZyBzb21ldGhpbmcgYXMgTEdCVFErIHVubGVzcyB5b3Ugd291bGQgY2FsbCB0aGUgc2FtZSB0aGluZyDigJxzdHJhaWdodOKAnSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiaG9tb3NleHVhbC1jb3VwbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NvdXBsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIGNvdXBsZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgbGFiZWxpbmcgc29tZXRoaW5nIGFzIExHQlRRKyB1bmxlc3MgeW91IHdvdWxkIGNhbGwgdGhlIHNhbWUgdGhpbmcg4oCcc3RyYWlnaHTigJ0gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcInNleHVhbC1wcmVmZXJlbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNleHVhbCBvcmllbnRhdGlvblwiOlwiYVwiLG9yaWVudGF0aW9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNleHVhbCBwcmVmZXJlbmNlXCI6XCJhXCJ9LG5vdGU6XCJJbXBsaWVzIHRoYXQgYmVpbmcgTEdCVFErIGlzIGEgY2hvaWNlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJnYXktbGlmZXN0eWxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBsaXZlc1wiOlwiYVwiLFwiZ2F5L2xlc2JpYW4gbGl2ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJnYXkgbGlmZXN0eWxlXCI6XCJhXCIsXCJob21vc2V4dWFsIGxpZmVzdHlsZVwiOlwiYVwifSxub3RlOlwiSW1wbGllcyB0aGF0IGJlaW5nIExHQlRRKyBpcyBhIGNob2ljZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiZ2F5LWFnZW5kYVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJnYXkgaXNzdWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZ2F5IGFnZW5kYVwiOlwiYVwiLFwiaG9tb3NleHVhbCBhZ2VuZGFcIjpcImFcIn0sbm90ZTpcIlVzZWQgYnkgYW50aS1MR0JUUSsgZXh0cmVtaXN0cyB0byBjcmVhdGUgYSBjbGltYXRlIG9mIGZlYXIgYXJvdW5kIExHQlRRKyBpc3N1ZXMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImdheS1yaWdodHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZXF1YWwgcmlnaHRzXCI6XCJhXCIsXCJjaXZpbCByaWdodHMgZm9yIGdheSBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzcGVjaWFsIHJpZ2h0c1wiOlwiYVwiLFwiZ2F5IHJpZ2h0c1wiOlwiYVwifSxub3RlOlwiTEdCVFErIHJpZ2h0cyBhcmUgaHVtYW4gcmlnaHRzIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcImZhZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Z2F5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntmYWc6XCJhXCIsZmFnZ290OlwiYVwiLGR5a2U6XCJhXCIsaG9tbzpcImFcIixzb2RvbWl0ZTpcImFcIn0sbm90ZTpcIkRlcm9nYXRvcnkgdGVybXMgZm9yIExHQlRRKyBwZW9wbGUgYXJlIG9mZmVuc2l2ZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiYmlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jpc2V4dWFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHNsYW5nIHNob3J0aGFuZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3N0eWxlKVwifSx7aWQ6XCJob21vc2V4dWFsLW1hcnJpYWdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBtYXJyaWFnZVwiOlwiYVwiLFwic2FtZS1zZXggbWFycmlhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIG1hcnJpYWdlXCI6XCJhXCJ9LG5vdGU6XCJIb21vc2V4dWFsIGhhcyBhIGNsaW5pY2FsIGhpc3RvcnkgYW5kIGlzIHVzZWQgdG8gaW1wbHkgTEdCVFErIHBlb3BsZSBhcmUgZGlzZWFzZWQgb3IgcHN5Y2hvbG9naWNhbGx5L2Vtb3Rpb25hbGx5IGRpc29yZGVyZWQgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwidHJhbm55XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbm55OlwiYVwifSxub3RlOlwiRGVyb2dhdG9yeSB0ZXJtcyBmb3IgTEdCVFErIHBlb3BsZSBhcmUgb2ZmZW5zaXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcInRyYW5zdmVzdGl0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJjcm9zcy1kcmVzc2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zdmVzdGl0ZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIG91dGRhdGVkIC8gb2ZmZW5zaXZlIHRlcm1zIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInNleGNoYW5nZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJhbnNpdGlvbjpcImFcIixcImdlbmRlciBjb25maXJtYXRpb24gc3VyZ2VyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXhjaGFuZ2U6XCJhXCIsXCJzZXggY2hhbmdlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBvdmVyZW1waGFzaXppbmcgc3VyZ2VyeSB3aGVuIGRpc2N1c3NpbmcgdHJhbnNnZW5kZXIgcGVvcGxlIG9yIHRoZSBwcm9jZXNzIG9mIHRyYW5zaXRpb24gLSBpdOKAmXMgbm90IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJzZXgtY2hhbmdlLW9wZXJhdGlvblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzZXggcmVhc3NpZ25tZW50IHN1cmdlcnlcIjpcImFcIixcImdlbmRlciBjb25maXJtYXRpb24gc3VyZ2VyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNleCBjaGFuZ2Ugb3BlcmF0aW9uXCI6XCJhXCJ9LG5vdGU6XCJTaGlmdCBmb2N1cyBhd2F5IGZyb20gdGhlIGFzc2lnbmVkIHNleCBhbmQgdG93YXJkcyB0aGUgaWRlbnRpZmllZCBnZW5kZXIgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwidHJhbnNnZW5kZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyYW5zZ2VuZGVyIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcnM6XCJhXCJ9LG5vdGU6XCJUcmFuc2dlbmRlciBzaG91bGQgYmUgdXNlZCBhcyBhbiBhZGplY3RpdmUsIG5vdCBhcyBhIG5vdW4gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwidHJhbnNnZW5kZXJlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJhbnNnZW5kZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyZWQ6XCJhXCJ9LG5vdGU6XCJUcmFuc2dlbmRlciBpcyBhbHJlYWR5IGFuIGFkamVjdGl2ZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcmlzbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiZWluZyB0cmFuc2dlbmRlclwiOlwiYVwiLFwidGhlIG1vdmVtZW50IGZvciB0cmFuc2dlbmRlciBlcXVhbGl0eVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcmlzbTpcImFcIn0sbm90ZTpcIlRoaXMgaXMgYSB0ZXJtIHVzZWQgYnkgYW50aS10cmFuc2dlbmRlciBhY3RpdmlzdHMgdG8gZGVodW1hbml6ZSB0cmFuc2dlbmRlciBwZW9wbGUgYW5kIHJlZHVjZSB3aG8gdGhleSBhcmUgdG8gYSBjb25kaXRpb24gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwiYm9ybi1hLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhc3NpZ25lZCBtYWxlIGF0IGJpcnRoXCI6XCJhXCIsXCJkZXNpZ25hdGVkIG1hbGUgYXQgYmlydGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaW9sb2dpY2FsbHkgbWFsZVwiOlwiYVwiLFwiYm9ybiBhIG1hblwiOlwiYVwiLFwiZ2VuZXRpY2FsbHkgbWFsZVwiOlwiYVwifSxub3RlOlwiQXNzaWduZWQgYmlydGggZ2VuZGVyIGlzIGNvbXBsaWNhdGVkOyBnZW5kZXIgaWRlbnRpdHkgaXMgbW9yZSB0aGFuIHdoYXQgeW91ciBwYXJlbnRzIGRlY2lkZWQgeW91IHdlcmUgYXQgYmlydGhcIn0se2lkOlwiYm9ybi1hLXdvbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFzc2lnbmVkIGZlbWFsZSBhdCBiaXJ0aFwiOlwiYVwiLFwiZGVzaWduYXRlZCBmZW1hbGUgYXQgYmlydGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaW9sb2dpY2FsbHkgZmVtYWxlXCI6XCJhXCIsXCJib3JuIGEgd29tYW5cIjpcImFcIixcImdlbmV0aWNhbGx5IGZlbWFsZVwiOlwiYVwifSxub3RlOlwiQXNzaWduZWQgYmlydGggZ2VuZGVyIGlzIGNvbXBsaWNhdGVkOyBnZW5kZXIgaWRlbnRpdHkgaXMgbW9yZSB0aGFuIHdoYXQgeW91ciBwYXJlbnRzIGRlY2lkZWQgeW91IHdlcmUgYXQgYmlydGhcIn0se2lkOlwiYmF0aHJvb20tYmlsbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJub24tZGlzY3JpbWluYXRpb24gbGF3XCI6XCJhXCIsXCJub24tZGlzY3JpbWluYXRpb24gb3JkaW5hbmNlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmF0aHJvb20gYmlsbFwiOlwiYVwifSxub3RlOlwiQSB0ZXJtIGNyZWF0ZWQgYW5kIHVzZWQgYnkgZmFyLXJpZ2h0IGV4dHJlbWlzdHMgdG8gb3Bwb3NlIG5vbmRpc2NyaW1pbmF0aW9uIGxhd3MgdGhhdCBwcm90ZWN0IHRyYW5zZ2VuZGVyIHBlb3BsZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJoZXJtYXBocm9kaXRpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW50ZXJzZXg6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm1hcGhyb2RpdGljOlwiYVwiLHBzZXVkb2hlcm1hcGhyb2RpdGljOlwiYVwiLFwicHNldWRvIGhlcm1hcGhyb2RpdGljXCI6XCJhXCJ9LG5vdGU6XCJUaGVzZSB0ZXJtcyBhcmUgc3RpZ21hdGl6aW5nIHRvIHBhdGllbnRzIGFuZCB0aGVpciBmYW1pbGllcyBiZWNhdXNlIGludGVyc2V4IHN0YXR1cyBpcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhlIG1lcmUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBjZXJ0YWluIGdvbmFkYWwgdGlzc3VlcyAoc291cmNlOiBodHRwOi8vd3d3LmlzbmEub3JnL25vZGUvOTc5KVwifSx7aWQ6XCJoZXJtYXBocm9kaXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aG8gaXMgaW50ZXJzZXhcIjpcImFcIixwZXJzb246XCJhXCIsXCJpbnRlcnNleCBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVybWFwaHJvZGl0ZTpcImFcIixwc2V1ZG9oZXJtYXBocm9kaXRlOlwiYVwiLFwicHNldWRvIGhlcm1hcGhyb2RpdGVcIjpcImFcIn0sbm90ZTpcIlRoZXNlIHRlcm1zIGFyZSBzdGlnbWF0aXppbmcgdG8gcGF0aWVudHMgYW5kIHRoZWlyIGZhbWlsaWVzIGJlY2F1c2UgaW50ZXJzZXggc3RhdHVzIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgbWVyZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGNlcnRhaW4gZ29uYWRhbCB0aXNzdWVzIChzb3VyY2U6IGh0dHA6Ly93d3cuaXNuYS5vcmcvbm9kZS85NzkpXCJ9LHtpZDpcImhlc2hlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyYW5zZ2VuZGVyIHBlcnNvblwiOlwiYVwiLHBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hlbWFsZTpcImFcIixcInNoZSBtYWxlXCI6XCJhXCIsaGVzaGU6XCJhXCIsc2hlaGU6XCJhXCJ9LG5vdGU6XCJUaGlzIHdvcmQgZGVodW1hbml6ZXMgdHJhbnNnZW5kZXIgcGVvcGxlIChzb3VyY2U6IGh0dHBzOi8vd3d3LnJlZGRpdC5jb20vci9hc2t0cmFuc2dlbmRlci9jb21tZW50cy8yM3dicTEvaXNfdGhlX3Rlcm1fc2hlbWFsZV9zZWVuX2FzX29mZmVuc2l2ZS8pXCJ9LHtpZDpcImdlbmRlci1wcm9ub3VuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcm9ub3VuOlwiYVwiLHByb25vdW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInByZWZlcnJlZCBwcm9ub3VuXCI6XCJhXCIsXCJwcmVmZXJyZWQgcHJvbm91bnNcIjpcImFcIixcImdlbmRlciBwcm9ub3VuXCI6XCJhXCIsXCJnZW5kZXIgcHJvbm91bnNcIjpcImFcIn0sbm90ZTpcIlByZWZlcnJlZCBwcm9ub3VuIHNvdW5kcyBsaWtlIGl0IGlzIG9wdGlvbmFsIHRvIHVzZSBzb21lb25lJ3MgY29ycmVjdCBwcm9ub3VuIChzb3VyY2U6IGh0dHBzOi8vd3d3LnNlbGZkZWZpbmVkLmFwcC9kZWZpbml0aW9ucy9wcm9ub3Vucy8pXCJ9LHtpZDpcImlzbGFtaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttdXNsaW06XCJhXCIsXCJwZXJzb24gb2YgSXNsYW1pYyBmYWl0aFwiOlwiYVwiLGZhbmF0aWM6XCJhXCIsemVhbG90OlwiYVwiLFwiZm9sbG93ZXIgb2YgaXNsYW1cIjpcImFcIixcImZvbGxvd2VyIG9mIHRoZSBpc2xhbWljIGZhaXRoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2lzbGFtaXN0OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy51c25ld3MuY29tL25ld3MvbmV3c2dyYW0vYXJ0aWNsZXMvMjAxMy8wNC8wNC90aGUtYXNzb2NpYXRlZC1wcmVzcy1yZXZpc2VzLWlzbGFtaXN0LWFub3RoZXItcG9saXRpY2FsbHktY2hhcmdlZC10ZXJtXCJ9LHtpZDpcImlzbGFtaXN0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bXVzbGltczpcImFcIixcInBlb3BsZSBvZiBJc2xhbWljIGZhaXRoXCI6XCJhXCIsZmFuYXRpY3M6XCJhXCIsemVhbG90czpcImFcIn0saW5jb25zaWRlcmF0ZTp7aXNsYW1pc3RzOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy51c25ld3MuY29tL25ld3MvbmV3c2dyYW0vYXJ0aWNsZXMvMjAxMy8wNC8wNC90aGUtYXNzb2NpYXRlZC1wcmVzcy1yZXZpc2VzLWlzbGFtaXN0LWFub3RoZXItcG9saXRpY2FsbHktY2hhcmdlZC10ZXJtXCJ9LHtpZDpcIm1hc3RlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cHJpbWFyeTpcImFcIixsZWFkOlwiYVwiLGh1YjpcImFcIixyZWZlcmVuY2U6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBtYXN0ZXJgOyB0aGVzZSBzdWdnZXN0aW9ucyBhcmUgZm9yIHRoZSBjb21wdXRlciB0ZXJtLCBidXQgdGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIGNhc2VzIHRvb1wifSx7aWQ6XCJtYXN0ZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcmltYXJpZXM6XCJhXCIsaHViczpcImFcIixyZWZlcmVuY2VzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJzOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYG1hc3RlcmA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcInNsYXZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzZWNvbmRhcnk6XCJhXCIsd29ya2VyOlwiYVwiLHJlcGxpY2E6XCJhXCIsbm9kZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2xhdmU6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0aGUgdGVybSBgc2xhdmVgOyB0aGVzZSBzdWdnZXN0aW9ucyBhcmUgZm9yIHRoZSBjb21wdXRlciB0ZXJtLCBidXQgdGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIGNhc2VzIHRvb1wifSx7aWQ6XCJzbGF2ZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NlY29uZGFyaWVzOlwiYVwiLHdvcmtlcnM6XCJhXCIscmVwbGljYXM6XCJhXCIsbm9kZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NsYXZlczpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBzbGF2ZWA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcImJsYWNraGF0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInVuZXRoaWNhbCBoYWNrZXJcIjpcImFcIixcIm1hbGljaW91cyBhY3RvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2hhdDpcImFcIn19LHtpZDpcIndoaXRlaGF0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImV0aGljYWwgaGFja2VyXCI6XCJhXCIsXCJzZWN1cml0eSByZXNlYXJjaGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlaGF0OlwiYVwifX0se2lkOlwiZXNraW1vXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntJbnVpdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXNraW1vOlwiYVwifX0se2lkOlwiZXNraW1vc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7SW51aXRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlc2tpbW9zOlwiYVwifX0se2lkOlwib3JpZW50YWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiQXNpYW4gcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29yaWVudGFsOlwiYVwifX0se2lkOlwib3JpZW50YWxzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkFzaWFuIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntvcmllbnRhbHM6XCJhXCJ9fSx7aWQ6XCJub253aGl0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gb2YgY29sb3JcIjpcImFcIixcInBlb3BsZSBvZiBjb2xvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntub253aGl0ZTpcImFcIixcIm5vbiB3aGl0ZVwiOlwiYVwifX0se2lkOlwiZ2hldHRvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcm9qZWN0czpcImFcIix1cmJhbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2hldHRvOlwiYVwifX0se2lkOlwicmVkc2tpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJOYXRpdmUgQW1lcmljYW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJyZWQgaW5kaWFuXCI6XCJhXCIscG9jYWhvbnRhczpcImFcIixyZWRza2luOlwiYVwifX0se2lkOlwicmVkc2tpbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiTmF0aXZlIEFtZXJpY2FuIFBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInJlZCBpbmRpYW5zXCI6XCJhXCIscmVkc2tpbnM6XCJhXCJ9fSx7aWQ6XCJ0b3RlbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmF2b3JpdGU6XCJhXCIsaW5zcGlyYXRpb246XCJhXCIsXCJwZXJzb25hbCBpbnRlcmVzdFwiOlwiYVwiLFwicGVyc29uYWxpdHkgdHlwZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImFuaW1hbCBzcGlyaXRcIjpcImFcIixcImRyZWFtIGNhdGNoZXJcIjpcImFcIixcInNwaXJpdCBhbmltYWxcIjpcImFcIix0b3RlbTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgb3ZlcnNpbXBsaWZ5IHRoZSBjb21wbGV4IGFuZCB2YXJpZWQgYmVsaWVmcyBvZiBpbmRpZ2Vub3VzIHJlbGlnaW9ucy4gKHNvdXJjZTogaHR0cHM6Ly93d3cud29ybGRyZWxpZ2lvbm5ld3MuY29tL29waW5pb24vc3Bpcml0LWFuaW1hbC1ub3Qtam9rZS1vcHByZXNzaW9uLGh0dHBzOi8vd3d3LnNwaXJhbG5hdHVyZS5jb20vc3Bpcml0dWFsaXR5L3NwaXJpdC1hbmltYWwtY3VsdHVyYWwtYXBwcm9wcmlhdGlvbilcIn0se2lkOlwibG9uZy10aW1lLW5vLXNlZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJJIGhhdmVu4oCZdCBzZWVuIHlvdSBpbiBhIGxvbmcgdGltZVwiOlwiYVwiLFwiaXTigJlzIGJlZW4gYSBsb25nIHRpbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsb25nIHRpbWUgbm8gaGVhclwiOlwiYVwiLFwibG9uZyB0aW1lIG5vIHNlZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyB0aGF0IGltcGxpY2l0bHkgbW9jayBwZW9wbGUgd2l0aCBsaW1pdGVkIGtub3dsZWRnZSBvZiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gKHNvdXJjZTogaHR0cHM6Ly93d3cubnByLm9yZy9zZWN0aW9ucy9jb2Rlc3dpdGNoLzIwMTQvMDMvMDkvMjg4MzAwMzAzL3doby1maXJzdC1zYWlkLWxvbmctdGltZS1uby1zZWUtYW5kLWluLXdoaWNoLWxhbmd1YWdlKVwifSx7aWQ6XCJpbmRpYW4tY291bnRyeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlbmVteSB0ZXJyaXRvcnlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJJbmRpYW4gY291bnRyeVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gdGhlIGdlbm9jaWRhbCBVbml0ZWQgU3RhdGVzIOKAnEluZGlhbiBSZW1vdmFs4oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vbmV3c21hdmVuLmlvL2luZGlhbmNvdW50cnl0b2RheS9hcmNoaXZlL29mZi10aGUtcmVzZXJ2YXRpb24tYS10ZWFjaGFibGUtbW9tZW50LW5XMWQ3VTBKUmtPc3podGc4TjFWMUEvKVwifSx7aWQ6XCJvZmYtcmVzZXJ2ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzb2JleTpcImFcIixlbmR1cmU6XCJhXCIsXCJvYmplY3QgdG9cIjpcImFcIixvcHBvc2U6XCJhXCIscmVzaXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImp1bXAgdGhlIHJlc2VydmF0aW9uXCI6XCJhXCIsXCJvZmYgcmVzZXJ2ZVwiOlwiYVwiLFwib2ZmIHRoZSByZXNlcnZhdGlvblwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gdGhlIGdlbm9jaWRhbCBVbml0ZWQgU3RhdGVzIOKAnEluZGlhbiBSZW1vdmFs4oCdIGxhd3MuIChzb3VyY2U6IGh0dHA6Ly9ibG9nLm5hdGl2ZXBhcnRuZXJzaGlwLm9yZy9vZmYtdGhlLXJlc2VydmF0aW9uLyxodHRwczovL3d3dy53c2ouY29tL2FydGljbGVzL29mZi10aGUtcmVzZXJ2YXRpb24taXMtYS1waHJhc2Utd2l0aC1hLWRhcmstcGFzdC0xNDYyNTUyODM3LGh0dHBzOi8vd3d3Lm5wci5vcmcvc2VjdGlvbnMvY29kZXN3aXRjaC8yMDE0LzA2LzI5LzMyNjY5MDk0Ny9zaG91bGQtc2F5aW5nLXNvbWVvbmUtaXMtb2ZmLXRoZS1yZXNlcnZhdGlvbi1iZS1vZmYtbGltaXRzLGh0dHBzOi8vbm93dG9yb250by5jb20vbmV3cy9uYXRpdmUtcmVmZXJlbmNlcy1hbmQtdGVybXMtdGhhdC1hcmUtb2ZmZW5zaXZlLXRvLWluZGlnZW5vdXMtcGVvcGxlLylcIn0se2lkOlwib24tdGhlLXdhcnBhdGhcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlZmVuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjaXJjbGUgdGhlIHdhZ29uc1wiOlwiYVwiLFwib24gdGhlIHdhcnBhdGhcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIGNvbG9uaWFsIHN0ZXJlb3R5cGVzIHJlZ2FyZGluZyBOYXRpdmUgQW1lcmljYW5zLiAoc291cmNlOiBodHRwczovL2lkaW9tcy50aGVmcmVlZGljdGlvbmFyeS5jb20vY2lyY2xlK3RoZSt3YWdvbnMsaHR0cHM6Ly9pZGlvbXMudGhlZnJlZWRpY3Rpb25hcnkuY29tL2dvK29uK3RoZSt3YXJwYXRoKVwifSx7aWQ6XCJ0b28tbWFueS1jaGllZnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widG9vIG1hbnkgY2hlZnMgaW4gdGhlIGtpdGNoZW5cIjpcImFcIixcInRvbyBtYW55IGNvb2tzIHNwb2lsIHRoZSBicm90aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRvbyBtYW55IGNoaWVmc1wiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuIChzb3VyY2U6IGh0dHBzOi8vaWRpb21zLnRoZWZyZWVkaWN0aW9uYXJ5LmNvbS90b28rbWFueStjaGllZnMrYW5kK25vdCtlbm91Z2grSW5kaWFucylcIn0se2lkOlwibmF0aXZlcy1hcmUtcmVzdGxlc3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Rpc3NhdGlzZmllZDpcImFcIixmcnVzdHJhdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm5hdGl2ZXMgYXJlIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBiZWNvbWluZyByZXN0bGVzc1wiOlwiYVwiLFwibmF0aXZlcyBhcmUgZ2V0dGluZyByZXN0bGVzc1wiOlwiYVwiLFwibmF0aXZlcyBhcmUgZ3Jvd2luZyByZXN0bGVzc1wiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIGluZGlnZW5vdXMgcGVvcGxlcy4gKHNvdXJjZTogaHR0cHM6Ly90dnRyb3Blcy5vcmcvcG13aWtpL3Btd2lraS5waHAvTWFpbi9UaGVOYXRpdmVzQXJlUmVzdGxlc3MpXCJ9LHtpZDpcInBvd3dvd1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y29uZmVyZW5jZTpcImFcIixnYXRoZXJpbmc6XCJhXCIsbWVldGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJwb3cgd293XCI6XCJhXCIscG93d293OlwiYVwifSxub3RlOlwiQXZvaWQgY2FzdWFsbHkgdXNpbmcgdGhpcyB0ZXJtLCB3aGljaCByZWZlcnMgdG8gdHJhZGl0aW9uYWwgaW5kaWdlbm91cyBjZWxlYnJhdGlvbiBjZXJlbW9uaWVzIHRoYXQgd2VyZSBiYW5uZWQgYnkgZ2Vub2NpZGFsIGxhd3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIENhbmFkYSDigJQgTmF0aXZlIHBlb3BsZSBkaWVkIGZpZ2h0aW5nIGZvciB0aGlzIHJpZ2h0LiAoc291cmNlOiBodHRwczovL3R3aXR0ZXIuY29tL2NoYWRsb2Rlci9zdGF0dXMvMTIwMzUwNzA3MDc3Mjc5MzM0NSxodHRwOi8vbmF0aXZlYXBwcm9wcmlhdGlvbnMuY29tLzIwMTIvMDkvcGF1bC1mcmFuay1vZmZlbmRzLWV2ZXJ5LW5hdGl2ZS1wZXJzb24tb24tdGhlLXBsYW5ldC13aXRoLWZhc2hpb24tbmlnaHQtb3V0LWRyZWFtLWNhdGNoaW4tcG93LXdvdy5odG1sLGh0dHBzOi8vd3d3LmJyaXRhbm5pY2EuY29tL3RvcGljL3Bvd3dvdyxodHRwczovL25vd3Rvcm9udG8uY29tL25ld3MvbmF0aXZlLXJlZmVyZW5jZXMtYW5kLXRlcm1zLXRoYXQtYXJlLW9mZmVuc2l2ZS10by1pbmRpZ2Vub3VzLXBlb3BsZS8pXCJ9LHtpZDpcImluZGlhbi1naXZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdvIGJhY2sgb24gb25l4oCZcyBvZmZlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluZGlhbiBnaXZlXCI6XCJhXCIsXCJpbmRpYW4gZ2l2ZXJcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIGNvbG9uaWFsIHN0ZXJlb3R5cGVzIHJlZ2FyZGluZyBOYXRpdmUgQW1lcmljYW5zLlwifSx7aWQ6XCJwaW5veXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0ZpbGlwaW5vczpcImFcIixcIkZpbGlwaW5vIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwaW5veXM6XCJhXCIscGluYXlzOlwiYVwifX0se2lkOlwidG93ZWwtaGVhZHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0FyYWJzOlwiYVwiLFwiTWlkZGxlIEVhc3Rlcm4gUGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2FuZCBuaWdnZXJzXCI6XCJhXCIsXCJ0b3dlbCBoZWFkc1wiOlwiYVwifX0se2lkOlwibGF0aW5vXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntMYXRpbng6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhdGlubzpcImFcIixsYXRpbmE6XCJhXCJ9LG5vdGU6XCJXaGVuZXZlciBwb3NzaWJsZSwgdHJ5IHRvIGJlIGdlbmRlciBpbmNsdXNpdmUuXCJ9LHtpZDpcImphcHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiSmFwYW5lc2UgcGVyc29uXCI6XCJhXCIsXCJKYXBhbmVzZSBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7amFwczpcImFcIn19LHtpZDpcImh5bWllXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkpld2lzaCBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hsb21vOlwiYVwiLHNoeXN0ZXI6XCJhXCIsaHltaWU6XCJhXCJ9fSx7aWQ6XCJnb3lcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBwZXJzb24gd2hvIGlzIG5vdCBKZXdpc2hcIjpcImFcIixcIm5vdCBKZXdpc2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z295aW06XCJhXCIsZ295dW06XCJhXCIsZ295OlwiYVwifX0se2lkOlwic3BhZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBCbGFjayBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhZGU6XCJhXCJ9fSx7aWQ6XCJneXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e05vbWFkOlwiYVwiLFRyYXZlbGVyOlwiYVwiLFJvbWE6XCJhXCIsUm9tYW5pOlwiYVwifSxpbmNvbnNpZGVyYXRlOntneXBwbzpcImFcIixneXBzeTpcImFcIixHaXBzeTpcImFcIixneXA6XCJhXCJ9LG5vdGU6XCJHeXBzeSBpcyBpbnNlbnNpdGl2ZSwgdXNlIFJvbWEgb3IgUm9tYW5pLiBUaGV54oCZcmUgbm90IEVneXB0aWFuIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLiAoc291cmNlOiBlbi53aWtpcGVkaWEub3JnL3dpa2kvUm9tYW5pX3Blb3BsZSNjaXRlX3JlZi04MClcIn0se2lkOlwiYmxhY2tsaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntibG9ja2xpc3Q6XCJhXCIsd3JvbmdsaXN0OlwiYVwiLGJhbmxpc3Q6XCJhXCIsXCJkZW55IGxpc3RcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmxhY2tsaXN0OlwiYVwiLFwiYmxhY2sgbGlzdFwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcImJsYWNrbGlzdGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntibG9ja2xpc3RlZDpcImFcIix3cm9uZ2xpc3RlZDpcImFcIixiYW5saXN0ZWQ6XCJhXCIsXCJkZW55LWxpc3RlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3RlZDpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJibGFja2xpc3RpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdGluZzpcImFcIix3cm9uZ2xpc3Rpbmc6XCJhXCIsYmFubGlzdGluZzpcImFcIixcImRlbnktbGlzdGluZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3Rpbmc6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVsaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYXNzbGlzdDpcImFcIixhbHJpZ2h0bGlzdDpcImFcIixzYWZlbGlzdDpcImFcIixcImFsbG93IGxpc3RcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVsaXN0OlwiYVwiLFwid2hpdGUgbGlzdFwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlbGlzdGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYXNzbGlzdGVkOlwiYVwiLGFscmlnaHRsaXN0ZWQ6XCJhXCIsc2FmZWxpc3RlZDpcImFcIixcImFsbG93LWxpc3RlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3RlZDpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZWxpc3RpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0aW5nOlwiYVwiLGFscmlnaHRsaXN0aW5nOlwiYVwiLHNhZmVsaXN0aW5nOlwiYVwiLFwiYWxsb3ctbGlzdGluZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3Rpbmc6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVzcGFjZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c3BhY2U6XCJhXCIsYmxhbms6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlc3BhY2U6XCJhXCIsXCJ3aGl0ZSBzcGFjZVwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlc3BhY2VzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzcGFjZTpcImFcIixibGFuazpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVzcGFjZXM6XCJhXCIsXCJ3aGl0ZSBzcGFjZXNcIjpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJzYXZhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbXBsZTpcImFcIixpbmRpZ2Vub3VzOlwiYVwiLFwiaHVudGVyLWdhdGhlcmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW1pdGl2ZTpcImFcIixzYXZhZ2U6XCJhXCIsXCJzdG9uZSBhZ2VcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgaW1wbHkgYSBncm91cCBoYXMgbm90IGNoYW5nZWQgb3ZlciB0aW1lIGFuZCB0aGF0IHRoZXkgYXJlIGluZmVyaW9yXCJ9LHtpZDpcInRyaWJlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzb2NpZXR5OlwiYVwiLGNvbW11bml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJpYmU6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3JcIn0se2lkOlwic29waGlzdGljYXRlZC1jdWx0dXJlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNvbXBsZXggY3VsdHVyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNvcGhpc3RpY2F0ZWQgY3VsdHVyZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBtYWtlIHNvbWUgZ3JvdXBzIHNvdW5kIGluZmVyaW9yLiBSZXBsYWNlIOKAnHNvcGhpc3RpY2F0ZWTigJ0gd2l0aCBhIG5ldXRyYWwgdGVybSBzdWNoIGFzIOKAnGNvbXBsZXjigJ1cIn0se2lkOlwic29waGlzdGljYXRlZC10ZWNobm9sb2d5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNvbXBsZXggdGVjaG5vbG9neVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNvcGhpc3RpY2F0ZWQgdGVjaG5vbG9neVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBtYWtlIHNvbWUgZ3JvdXBzIHNvdW5kIGluZmVyaW9yLiBSZXBsYWNlIOKAnHNvcGhpc3RpY2F0ZWTigJ0gd2l0aCBhIG5ldXRyYWwgdGVybSBzdWNoIGFzIOKAnGNvbXBsZXjigJ1cIn0se2lkOlwiYnVncmVwb3J0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJ1ZyByZXBvcnRcIjpcImFcIixzbmFwc2hvdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVncmVwb3J0OlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgYGJ1Z3JlcG9ydGAsIGFzIHRoZSB3b3JkIGBidWdyZWAgaXMgYSBzbHVyIGluIEJyYXppbGlhbiBQb3J0dWd1ZXNlXCJ9LHtpZDpcImdyYW5kZmF0aGVyLWNsYXVzZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJsZWdhY3kgcG9saWN5XCI6XCJhXCIsXCJsZWdhY3kgY2xhdXNlXCI6XCJhXCIsXCJkZXByZWNhdGlvbiBwb2xpY3lcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJncmFuZGZhdGhlciBjbGF1c2VcIjpcImFcIixcImdyYW5kZmF0aGVyIHBvbGljeVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gcmFjaXN0IFVuaXRlZCBTdGF0ZXMg4oCcSmltIENyb3figJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbmRmYXRoZXJfY2xhdXNlI09yaWdpbilcIn0se2lkOlwiZ3JhbmRmYXRoZXJpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlcHJlY2F0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRmYXRoZXJpbmc6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byByYWNpc3QgVW5pdGVkIFN0YXRlcyDigJxKaW0gQ3Jvd+KAnSBsYXdzLiAoc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFuZGZhdGhlcl9jbGF1c2UjT3JpZ2luKVwifSx7aWQ6XCJncmFuZGZhdGhlcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkZXByZWNhdGVkOlwiYVwiLGxlZ2FjeTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRmYXRoZXJlZDpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIHJhY2lzdCBVbml0ZWQgU3RhdGVzIOKAnEppbSBDcm934oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW5kZmF0aGVyX2NsYXVzZSNPcmlnaW4pXCJ9LHtpZDpcIm1ha2UtKi1ncmVhdC1hZ2FpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW1wcm92ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWtlICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqIGdyZWF0IGFnYWluXCI6XCJhXCIsXCJtYWtlICogKiAqIGdyZWF0IGFnYWluXCI6XCJhXCIsXCJtYWtlICogKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogKiAqIGdyZWF0IGFnYWluXCI6XCJhXCJ9fSx7aWQ6XCJjb21taXR0ZWQtc3VpY2lkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJkaWVkIGJ5IHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXR0ZWQgc3VpY2lkZVwiOlwiYVwiLFwiY29tcGxldGVkIHN1aWNpZGVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSwgaHR0cHM6Ly93d3cuc3BlYWtpbmdvZnN1aWNpZGUuY29tLzIwMTMvMDQvMTMvbGFuZ3VhZ2UvXCJ9LHtpZDpcImNvbW1pdC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImRpZSBieSBzdWljaWRlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbWl0IHN1aWNpZGVcIjpcImFcIixcImNvbXBsZXRlIHN1aWNpZGVcIjpcImFcIixcInN1Y2Nlc3NmdWwgc3VpY2lkZVwiOlwiYVwifSxub3RlOlwiQ29tbWl0dGluZyBzdWljaWRlIGlzIG5vdCBzdWNjZXNzZnVsL3Vuc3VjY2Vzc2Z1bCwgdGhhdCBzZW5kcyB0aGUgd3JvbmcgbWVzc2FnZSAoc291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlLCBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZS8pXCJ9LHtpZDpcInN1aWNpZGUtcGFjdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJyaXNlIGluIHN1aWNpZGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VpY2lkZSBlcGlkZW1pY1wiOlwiYVwiLFwiZXBpZGVtaWMgb2Ygc3VpY2lkZXNcIjpcImFcIixcInN1aWNpZGUgcGFjdFwiOlwiYVwifSxub3RlOlwiVXNpbmcgc2Vuc2F0aW9uYWwgd29yZHMgY2FuIGNhdXNlIGNvcHljYXQgc3VpY2lkZXMgb3IgY29udGFnaW9uIChzb3VyY2U6IGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUpXCJ9LHtpZDpcImZhaWxlZC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1aWNpZGUgYXR0ZW1wdFwiOlwiYVwiLFwiYXR0ZW1wdGVkIHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYWlsZWQgc3VpY2lkZVwiOlwiYVwiLFwiZmFpbGVkIGF0dGVtcHRcIjpcImFcIixcInN1aWNpZGUgZmFpbHVyZVwiOlwiYVwifSxub3RlOlwiQXR0ZW1wdGVkIHN1aWNpZGUgc2hvdWxkIG5vdCBiZSBkZXBpY3RlZCBhcyBhIGZhaWx1cmUgKHNvdXJjZTogaHR0cHM6Ly93d3cuc3BlYWtpbmdvZnN1aWNpZGUuY29tLzIwMTMvMDQvMTMvbGFuZ3VhZ2UsIGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUpXCJ9LHtpZDpcInN1aWNpZGUtbm90ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIG5vdGUgZnJvbSB0aGUgZGVjZWFzZWRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWljaWRlIG5vdGVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZVwifSx7aWQ6XCJoYW5nXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBhcHAgZnJvemVcIjpcImFcIixcInRoZSBhcHAgc3RvcHBlZCByZXNwb25kaW5nXCI6XCJhXCIsXCJ0aGUgYXBwIHN0b3BwZWQgcmVzcG9uZGluZyB0byBldmVudHNcIjpcImFcIixcInRoZSBhcHAgYmVjYW1lIHVucmVzcG9uc2l2ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nOlwiYVwiLGhhbmdlZDpcImFcIn0sbm90ZTpcIldoZW4gZGVzY3JpYmluZyB0aGUgYmVoYXZpb3Igb2YgY29tcHV0ZXIgc29mdHdhcmUsIHVzaW5nIHRoZSB3b3JkIOKAnGhhbmdlZOKAnSBuZWVkbGVzc2x5IGludm9rZXMgdGhlIHRvcGljIG9mIGRlYXRoIGJ5IHNlbGYtaGFybSBvciBseW5jaGluZy4gIENvbnNpZGVyIHVzaW5nIHRoZSB3b3JkIOKAnGZyb3pl4oCdIG9yIHRoZSBwaHJhc2Ug4oCcc3RvcHBlZCByZXNwb25kaW5nIHRvIGV2ZW50c+KAnSBvciDigJxiZWNhbWUgdW5yZXNwb25zaXZl4oCdIGluc3RlYWQuXCJ9XSkseWE9Z2E7dmFyIGJhPWEoNDI3KTtjb25zdCBEYT17fS5oYXNPd25Qcm9wZXJ0eSxmYT1cInJldGV4dC1zcGVsbFwiO2Z1bmN0aW9uIEdhKG49e30pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtkaWN0aW9uYXJ5Om59KTtjb25zdHtkaWN0aW9uYXJ5OmUsaWdub3JlOmEsbWF4OmksaWdub3JlTGl0ZXJhbDpyLGlnbm9yZURpZ2l0czp0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm8scGVyc29uYWw6TX09bixzPVtdO2xldCBsO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBPYmplY3RgLCBnb3QgYFwiK2UrXCJgXCIpO2NvbnN0IGM9e2lnbm9yZUxpdGVyYWw6bnVsbD09cnx8cixpZ25vcmVEaWdpdHM6bnVsbD09dHx8dCxub3JtYWxpemVBcG9zdHJvcGhlczpudWxsPT1vfHxvLGlnbm9yZTphfHxbXSxtYXg6aXx8MzAsY291bnQ6MCxjYWNoZTp7fSxjaGVja2VyOnZvaWQgMH07cmV0dXJuIGUoKChuLGUpPT57bGV0IGE9LTE7Zm9yKGw9bixlJiYoYy5jaGVja2VyPWJhKGUpLE0mJmMuY2hlY2tlci5wZXJzb25hbChNKSk7KythPHMubGVuZ3RoOyl7Y29uc3QgZT1zW2FdLnNsaWNlKDAsMyk7bnx8d2EoLi4uZSksc1thXVszXShuKX1zLmxlbmd0aD0wfSkpLChuLGUsYSk9PntsP2EobCk6Yy5jaGVja2VyPyh3YShuLGUsYyksYSgpKTpzLnB1c2goW24sZSxjLGFdKX19ZnVuY3Rpb24gd2EobixlLGEpe2NvbnN0e2lnbm9yZTppLGlnbm9yZUxpdGVyYWw6cixpZ25vcmVEaWdpdHM6dCxub3JtYWxpemVBcG9zdHJvcGhlczpvLGNoZWNrZXI6TSxjYWNoZTpzfT1hO2Z1bmN0aW9uIGwobixlKXtyZXR1cm4gbitcIjsgZGlkIHlvdSBtZWFuIFwiK3VhKGUsXCJgXCIpLmpvaW4oXCIsIFwiKStcIj9cIn1mdW5jdGlvbiBjKG4pe3JldHVybiBpLmluY2x1ZGVzKG4pfHx0JiYvXlxcZCskLy50ZXN0KG4pfV9uKG4sXCJXb3JkTm9kZVwiLCgobixpLHQpPT57Y29uc3QgUz10LHU9bi5jaGlsZHJlbjtpZighU3x8bnVsbD09PWl8fHImJlFlKFMsaSkpcmV0dXJuO2xldCBkPXFuKG4pO2lmKG8mJihkPWQucmVwbGFjZSgv4oCZL2csXCInXCIpKSxjKGQpKXJldHVybjtsZXQgbT1NLmNvcnJlY3QoZCk7aWYoIW0mJnUubGVuZ3RoPjEpe2xldCBuPS0xO2ZvcihtPSEwOysrbjx1Lmxlbmd0aDspe2NvbnN0IGU9dVtuXTtcIlRleHROb2RlXCIhPT1lLnR5cGV8fGMoZS52YWx1ZSl8fE0uY29ycmVjdChlLnZhbHVlKXx8KG09ITEpfX1pZighbSl7bGV0IGkscj11YShkLFwiYFwiKStcIiBpcyBtaXNzcGVsdFwiO0RhLmNhbGwocyxkKT8oaT1zW2RdLHI9bChyLGkpKTooYS5jb3VudD09PWEubWF4JiZlLm1lc3NhZ2UoXCJUb28gbWFueSBtaXNzcGVsbGluZ3M7IG5vIGZ1cnRoZXIgc3BlbGwgc3VnZ2VzdGlvbnMgYXJlIGdpdmVuXCIsbixbZmEsXCJvdmVyZmxvd1wiXS5qb2luKFwiOlwiKSksYS5jb3VudCsrLGEuY291bnQ8YS5tYXgmJihpPU0uc3VnZ2VzdChkKSxpLmxlbmd0aD4wJiYocj1sKHIsaSkpKSxzW2RdPWl8fFtdKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShyLG4sW2ZhLGQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFcrLyxcIi1cIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOmQsZXhwZWN0ZWQ6aXx8W119KX19KSl9Y29uc3QgdmE9W3tpZDpcImFyZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJhcmVuJ3RcIixjdXJseTpcImFyZW7igJl0XCJ9LGV4cGFuZGVkOltcImFyZSBub3RcIl19LHtpZDpcImNhbi1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjYW4ndFwiLGN1cmx5OlwiY2Fu4oCZdFwifSxleHBhbmRlZDpbXCJjYW4gbm90XCIsXCJjYW5ub3RcIl19LHtpZDpcImNvdWxkLWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjb3VsZCd2ZVwiLGN1cmx5OlwiY291bGTigJl2ZVwifSxleHBhbmRlZDpbXCJjb3VsZCBoYXZlXCJdfSx7aWQ6XCJjb3VsZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjb3VsZG4ndFwiLGN1cmx5OlwiY291bGRu4oCZdFwifSxleHBhbmRlZDpbXCJjb3VsZCBub3RcIl19LHtpZDpcImRpZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkaWRuJ3RcIixjdXJseTpcImRpZG7igJl0XCJ9LGV4cGFuZGVkOltcImRpZCBub3RcIl19LHtpZDpcImRvZXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiZG9lc24ndFwiLGN1cmx5OlwiZG9lc27igJl0XCJ9LGV4cGFuZGVkOltcImRvZXMgbm90XCJdfSx7aWQ6XCJkby1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkb24ndFwiLGN1cmx5OlwiZG9u4oCZdFwifSxleHBhbmRlZDpbXCJkbyBub3RcIl19LHtpZDpcImV2ZXJ5Ym9keS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImV2ZXJ5Ym9keSdzXCIsY3VybHk6XCJldmVyeWJvZHnigJlzXCJ9LGV4cGFuZGVkOltcImV2ZXJ5Ym9keSBpc1wiXX0se2lkOlwiZXZlcnlvbmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJldmVyeW9uZSdzXCIsY3VybHk6XCJldmVyeW9uZeKAmXNcIn0sZXhwYW5kZWQ6W1wiZXZlcnlvbmUgaXNcIl19LHtpZDpcImhhZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYWRuJ3RcIixjdXJseTpcImhhZG7igJl0XCJ9LGV4cGFuZGVkOltcImhhZCBub3RcIl19LHtpZDpcImhhcy1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYXNuJ3RcIixjdXJseTpcImhhc27igJl0XCJ9LGV4cGFuZGVkOltcImhhcyBub3RcIl19LHtpZDpcImhhdmUtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGF2ZW4ndFwiLGN1cmx5OlwiaGF2ZW7igJl0XCJ9LGV4cGFuZGVkOltcImhhdmUgbm90XCJdfSx7aWQ6XCJoZS1oYWQtd291bGRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoZSdkXCIsY3VybHk6XCJoZeKAmWRcIn0sZXhwYW5kZWQ6W1wiaGUgaGFkXCIsXCJoZSB3b3VsZFwiXX0se2lkOlwiaGUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ2xsXCIsY3VybHk6XCJoZeKAmWxsXCJ9LGV4cGFuZGVkOltcImhlIHdpbGxcIl19LHtpZDpcImhlLWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ3NcIixjdXJseTpcImhl4oCZc1wifSxleHBhbmRlZDpbXCJoZSBoYXNcIixcImhlIGlzXCJdfSx7aWQ6XCJoZXJlLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGVyZSdzXCIsY3VybHk6XCJoZXJl4oCZc1wifSxleHBhbmRlZDpbXCJoZXJlIGlzXCJdfSx7aWQ6XCJpLWhhZC13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknZFwiLGN1cmx5OlwiSeKAmWRcIn0sZXhwYW5kZWQ6W1wiSSBoYWRcIixcIkkgd291bGRcIl19LHtpZDpcImktd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknbGxcIixjdXJseTpcIknigJlsbFwifSxleHBhbmRlZDpbXCJJIHdpbGxcIl19LHtpZDpcImktYW1cIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJJJ21cIixjdXJseTpcIknigJltXCJ9LGV4cGFuZGVkOltcIkkgYW1cIl19LHtpZDpcImktaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkkndmVcIixjdXJseTpcIknigJl2ZVwifSxleHBhbmRlZDpbXCJJIGhhdmVcIl19LHtpZDpcImlzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImlzbid0XCIsY3VybHk6XCJpc27igJl0XCJ9LGV4cGFuZGVkOltcImlzIG5vdFwiXX0se2lkOlwiaXQtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIml0J2xsXCIsY3VybHk6XCJpdOKAmWxsXCJ9LGV4cGFuZGVkOltcIml0IHdpbGxcIl19LHtpZDpcIml0LWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIml0J3NcIixjdXJseTpcIml04oCZc1wifSxleHBhbmRlZDpbXCJpdCBoYXNcIixcIml0IGlzXCJdfSx7aWQ6XCJsZXQtdXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJsZXQnc1wiLGN1cmx5OlwibGV04oCZc1wifSxleHBhbmRlZDpbXCJsZXQgdXNcIl19LHtpZDpcIm1pZ2h0LWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJtaWdodCd2ZVwiLGN1cmx5OlwibWlnaHTigJl2ZVwifSxleHBhbmRlZDpbXCJtaWdodCBoYXZlXCJdfSx7aWQ6XCJtdXN0LWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJtdXN0J3ZlXCIsY3VybHk6XCJtdXN04oCZdmVcIn0sZXhwYW5kZWQ6W1wibXVzdCBoYXZlXCJdfSx7aWQ6XCJzaGUtaGFkLXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hlJ2RcIixjdXJseTpcInNoZeKAmWRcIn0sZXhwYW5kZWQ6W1wic2hlIGhhZFwiLFwic2hlIHdvdWxkXCJdfSx7aWQ6XCJzaGUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNoZSdsbFwiLGN1cmx5Olwic2hl4oCZbGxcIn0sZXhwYW5kZWQ6W1wic2hlIHdpbGxcIl19LHtpZDpcInNoZS1oYXMtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaGUnc1wiLGN1cmx5Olwic2hl4oCZc1wifSxleHBhbmRlZDpbXCJzaGUgaGFzXCIsXCJzaGUgaXNcIl19LHtpZDpcInNob3VsZC1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hvdWxkJ3ZlXCIsY3VybHk6XCJzaG91bGTigJl2ZVwifSxleHBhbmRlZDpbXCJzaG91bGQgaGF2ZVwiXX0se2lkOlwic2hvdWxkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNob3VsZG4ndFwiLGN1cmx5Olwic2hvdWxkbuKAmXRcIn0sZXhwYW5kZWQ6W1wic2hvdWxkIG5vdFwiXX0se2lkOlwic29tZWJvZHktaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZWJvZHknc1wiLGN1cmx5Olwic29tZWJvZHnigJlzXCJ9LGV4cGFuZGVkOltcInNvbWVib2R5IGhhc1wiLFwic29tZWJvZHkgaXNcIl19LHtpZDpcInNvbWVvbmUtaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZW9uZSdzXCIsY3VybHk6XCJzb21lb25l4oCZc1wifSxleHBhbmRlZDpbXCJzb21lb25lIGhhc1wiLFwic29tZW9uZSBpc1wiXX0se2lkOlwic29tZXRoaW5nLWhhc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNvbWV0aGluZydzXCIsY3VybHk6XCJzb21ldGhpbmfigJlzXCJ9LGV4cGFuZGVkOltcInNvbWV0aGluZyBoYXNcIixcInNvbWV0aGluZyBpc1wiXX0se2lkOlwidGhhdC13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhhdCdsbFwiLGN1cmx5OlwidGhhdOKAmWxsXCJ9LGV4cGFuZGVkOltcInRoYXQgd2lsbFwiXX0se2lkOlwidGhhdC1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoYXQnc1wiLGN1cmx5OlwidGhhdOKAmXNcIn0sZXhwYW5kZWQ6W1widGhhdCBpc1wiXX0se2lkOlwidGhlcmUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXJlJ2xsXCIsY3VybHk6XCJ0aGVyZeKAmWxsXCJ9LGV4cGFuZGVkOltcInRoZXJlIHdpbGxcIl19LHtpZDpcInRoZXJlLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhlcmUnc1wiLGN1cmx5OlwidGhlcmXigJlzXCJ9LGV4cGFuZGVkOltcInRoZXJlIGlzXCJdfSx7aWQ6XCJ0aGV5LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGV5J2xsXCIsY3VybHk6XCJ0aGV54oCZbGxcIn0sZXhwYW5kZWQ6W1widGhleSB3aWxsXCJdfSx7aWQ6XCJ0aGV5LWFyZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXkncmVcIixjdXJseTpcInRoZXnigJlyZVwifSxleHBhbmRlZDpbXCJ0aGV5IGFyZVwiXX0se2lkOlwid2FzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndhc24ndFwiLGN1cmx5Olwid2FzbuKAmXRcIn0sZXhwYW5kZWQ6W1wid2FzIG5vdFwiXX0se2lkOlwid2UtaGFkLXdvdWxkLWRpZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ2RcIixjdXJseTpcIndl4oCZZFwifSxleHBhbmRlZDpbXCJ3ZSBoYWRcIixcIndlIHdvdWxkXCIsXCJ3ZSBkaWRcIl19LHtpZDpcIndlLXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZSdsbFwiLGN1cmx5Olwid2XigJlsbFwifSxleHBhbmRlZDpbXCJ3ZSB3aWxsXCJdfSx7aWQ6XCJ3ZS1hcmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZSdyZVwiLGN1cmx5Olwid2XigJlyZVwifSxleHBhbmRlZDpbXCJ3ZSBhcmVcIl19LHtpZDpcIndlcmUtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2VyZW4ndFwiLGN1cmx5Olwid2VyZW7igJl0XCJ9LGV4cGFuZGVkOltcIndlcmUgbm90XCJdfSx7aWQ6XCJ3aGF0LWlzLWRvZXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aGF0J3NcIixjdXJseTpcIndoYXTigJlzXCJ9LGV4cGFuZGVkOltcIndoYXQgaXNcIixcIndoYXQgZG9lc1wiXX0se2lkOlwid2hlbi1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoZW4nc1wiLGN1cmx5Olwid2hlbuKAmXNcIn0sZXhwYW5kZWQ6W1wid2hlbiBpc1wiXX0se2lkOlwid2hlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aGVyZSdzXCIsY3VybHk6XCJ3aGVyZeKAmXNcIn0sZXhwYW5kZWQ6W1wid2hlcmUgaXNcIl19LHtpZDpcIndoby13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hvJ2xsXCIsY3VybHk6XCJ3aG/igJlsbFwifSxleHBhbmRlZDpbXCJ3aG8gd2lsbFwiXX0se2lkOlwid2hvLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hvJ3NcIixjdXJseTpcIndob+KAmXNcIn0sZXhwYW5kZWQ6W1wid2hvIGlzXCJdfSx7aWQ6XCJ3aHktZGlkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2h5J2RcIixjdXJseTpcIndoeeKAmWRcIn0sZXhwYW5kZWQ6W1wid2h5IGRpZFwiXX0se2lkOlwid2lsbC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3b24ndFwiLGN1cmx5Olwid29u4oCZdFwifSxleHBhbmRlZDpbXCJ3aWxsIG5vdFwiXX0se2lkOlwid291bGQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndvdWxkJ3ZlXCIsY3VybHk6XCJ3b3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcIndvdWxkIGhhdmVcIl19LHtpZDpcInlvdS13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInlvdSdkXCIsY3VybHk6XCJ5b3XigJlkXCJ9LGV4cGFuZGVkOltcInlvdSB3b3VsZFwiXX0se2lkOlwieW91LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ5b3UnbGxcIixjdXJseTpcInlvdeKAmWxsXCJ9LGV4cGFuZGVkOltcInlvdSB3aWxsXCJdfSx7aWQ6XCJ5b3UtYXJlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwieW91J3JlXCIsY3VybHk6XCJ5b3XigJlyZVwifSxleHBhbmRlZDpbXCJ5b3UgYXJlXCJdfV07ZnVuY3Rpb24ga2EoKXtyZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBhPW4uY2hpbGRyZW4saT1cInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI7YS5mb3JFYWNoKCgobixhKT0+e1ZuKG4sXCJTZW50ZW5jZU5vZGVcIikmJm4uY2hpbGRyZW4uZm9yRWFjaCgoKGEscik9Pntjb25zdCB0PW4uY2hpbGRyZW47aWYoVm4odFtyLTFdLFwiV29yZE5vZGVcIikmJlZuKGEsXCJXaGl0ZVNwYWNlTm9kZVwiKSYmVm4odFtyKzFdLFwiV29yZE5vZGVcIikpe2NvbnN0IG49cW4odFtyLTFdLmNoaWxkcmVuWzBdKStcIiBcIitxbih0W3IrMV0uY2hpbGRyZW5bMF0pO2xldCBvPVwiXCIsTT1cIlwiO2lmKHZhLnNvbWUoKGU9Pntjb25zdCBhPWUuZXhwYW5kZWQuc29tZSgoZT0+ZS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIG89W2UuY29udHJhY3Rpb24uY3VybHldLE09ZS5pZCxhfSkpKXtjb25zdCBuPXFuKHRbci0xXSkrcW4oYSkrcW4odFtyKzFdKTtyZXR1cm4gY29uc29sZS5sb2codFtyXSksT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoYEV4cGVjdGVkIFwiJHtvfVwiIG5vdCBcIiR7bn1cImAse3N0YXJ0OnRlKHRbci0xXSksZW5kOm9lKHRbcisxXSl9LFtpLE1dLmpvaW4oXCI6XCIpKSx7YWN0dWFsOm4sZXhwZWN0ZWQ6byxub3RlOlwiXCIsdXJsOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2NvbnRyYWN0aW9ucy9cIn0pLGV9fX0pKX0pKX0pKX19V24oXCJTZW50ZW5jZU5vZGVcIiksV24oXCJXaGl0ZVNwYWNlTm9kZVwiKTtjb25zdCBSYT17bmV3UmVsaWM6W1wiTmV3IFJlbGljXCIsXCJ3ZVwiXSxuZXdSZWxpY09uZTpbXCJOZXcgUmVsaWMgT25lXCIsXCJOZXcgUmVsaWMgT25lIHBsYXRmb3JtXCJdLGZ1dHVyZVN0YWNrOltcIkZ1dHVyZVN0YWNrXCIsXCJ7RnV0dXJlfVN0YWNrXCJdLGNvZGVTdHJlYW06W1wiQ29kZVN0cmVhbVwiLFwiTmV3IFJlbGljIENvZGVTdHJlYW1cIl0sZXhwbG9yZXI6W1wiRXhwbG9yZXJcIixcIk5ldyBSZWxpYyBFeHBsb3JlclwiXSxpbnN0YW50T2JzZXJ2YWJpbGl0eTpbXCJJbnN0YW50IE9ic2VydmFiaWxpdHlcIixcIk5ldyBSZWxpYyBJL09cIixcIk5ldyBSZWxpYyBJbnN0YW50IE9ic2VydmFiaWxpdHlcIixcIk5ldyBSZWxpYyBJbnN0YW50IE9ic2VydmFiaWxpdHkgKEkvTylcIl0sbG9va291dDpbXCJOZXcgUmVsaWMgTG9va291dFwiLFwiTG9va291dFwiXSxsb29rb3V0OltcIk5ldyBSZWxpYyBOYXZpZ2F0b3JcIixcIk5hdmlnYXRvclwiXSxhcG06W1wiYXBwbGljYXRpb24gcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiYXBwbGljYXRpb24gbW9uaXRvcmluZ1wiLFwiQVBNXCJdLHBpeGllOltcImF1dG8tdGVsZW1ldHJ5IHdpdGggUGl4aWVcIixcInRoZSBQaXhpZSBpbnRlZ3JhdGlvbiB3aXRoIE5ldyBSZWxpYyBPbmVcIixcIm91ciBQaXhpZSBpbnRlZ3JhdGlvblwiLFwidGhlIGludGVncmF0aW9uIHdpdGggUGl4aWVcIixcIlBpeGllXCJdLGRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZzpbXCJkaWdpdGFsIGV4cGVyaWVuY2UgbW9uaXRvcmluZyAoREVNKVwiLFwiZGlnaXRhbCBleHBlcmllbmNlIG1vbml0b3JpbmdcIixcIkRFTVwiXSxpbmZyYXN0cnVjdHVyZU1vbml0b3Jpbmc6W1wiaW5mcmFzdHJ1Y3R1cmUgbW9uaXRvcmluZ1wiLFwiaW5mcmEgbW9uaXRvcmluZ1wiLFwiaW5mcmFcIl0sbG9nTWFuYWdlbWVudDpbXCJsb2cgbWFuYWdlbWVudFwiLFwibG9nc1wiXSxtZWx0OltcIm1ldHJpY3MsIGV2ZW50cywgbG9ncywgYW5kIHRyYWNlcyAoTUVMVClcIixcIm1ldHJpY3MsIGV2ZW50cywgbG9ncywgYW5kIHRyYWNlc1wiLFwiTUVMVFwiXSxuZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nOltcIm5ldHdvcmsgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyAoTlBNKVwiLFwibmV0d29yayBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJOUE1cIixcIm5ldHdvcmsgbW9uaXRvcmluZ1wiXSxvYnNlcnZhYmlsaXR5OltcIm9ic2VydmFiaWxpdHkgKG8xMXkpXCIsXCJvYnNlcnZhYmlsaXR5XCIsXCJmdWxsLXN0YWNrIG9ic2VydmFiaWxpdHlcIixcImVuZC10by1lbmQgb2JzZXJ2YWJpbGl0eVwiXSxxdWVyeTpbXCJxdWVyeVwiLFwicXVlcmllc1wiLFwicXVlcnlpbmdcIl0sc3ludGhldGljTW9uaXRvcmluZzpbXCJzeW50aGV0aWMgbW9uaXRvcmluZ1wiLFwic3ludGhldGljc1wiLFwic3ludGhldGljIG1vbml0b3JzXCJdfSxZYT17XCJOZXcgUmVsaWMnc1wiOlJhLm5ld1JlbGljLFwibmV3IHJlbGljXCI6UmEubmV3UmVsaWMsTlI6UmEubmV3UmVsaWMsXCJOZXcgUmVsaWMgT25lJ3NcIjpSYS5uZXdSZWxpY09uZSxcIk5ldyBSZWxpYyBvbmVcIjpSYS5uZXdSZWxpY09uZSxOUjE6UmEubmV3UmVsaWNPbmUsXCJGdXR1cmUgU3RhY2tcIjpSYS5mdXR1cmVTdGFjayxGdXR1cmVzdGFjazpSYS5mdXR1cmVTdGFjayxcIk5lcmQgR3JhcGhcIjpcIk5lcmRHcmFwaFwiLE5lcmRncmFwaDpcIk5lcmRHcmFwaFwiLFwiTmVyZCBHcmFwaFwiOlwiTmVyZEdyYXBoXCIsbmVyZGxldDpcIk5lcmRsZXRcIixuZXJkcGFjazpcIk5lcmRwYWNrXCIsXCJOZXJkIFBhY2tcIjpcIk5lcmRwYWNrXCIsTmVyZHN0b3JhZ2U6XCJOZXJkU3RvcmFnZVwiLFwiTmVyZCBTdG9yYWdlXCI6XCJOZXJkU3RvcmFnZVwiLFwiTmV3IFJlbGljIENvZGVTdHJlYW0nc1wiOlJhLmNvZGVTdHJlYW0sXCJOZXcgUmVsaWMgQ29kZSBTdHJlYW1cIjpSYS5jb2RlU3RyZWFtLFwiQ29kZSBTdHJlYW1cIjpSYS5jb2RlU3RyZWFtLGNvZGVzdHJlYW06UmEuY29kZVN0cmVhbSxcIk5ldyBSZWxpYyBFeHBsb3JlcidzXCI6UmEuZXhwbG9yZXIsZXhwbG9yZXI6UmEuZXhwbG9yZXIsXCJJbmZpbml0ZSB0cmFjaW5nXCI6XCJJbmZpbml0ZSBUcmFjaW5nXCIsXCJOZXcgUmVsaWMgaW5zdGFudCBvYnNlcnZhYmlsaXR5XCI6UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJpbnN0YW50IE9ic2VydmFiaWxpdHlcIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxOUklPOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LElPOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LFwiSS9PXCI6UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJOZXcgUmVsaWMgTG9va291dCdzXCI6UmEubG9va291dCxsb29rb3V0OlJhLmxvb2tvdXQsXCJOZXcgUmVsaWMgTmF2aWdhdG9yJ3NcIjpSYS5uYXZpZ2F0b3IsbmF2aWdhdG9yOlJhLm5hdmlnYXRvcixBbGVydHM6XCJhbGVydHNcIixcIkFub21hbHkgRGV0ZWN0aW9uXCI6XCJhbm9tYWx5IGRldGVjdGlvblwiLFwiQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgTWFuYWdlbWVudFwiOlJhLmFwbSxcIkFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpSYS5hcG0sXCJBcHBsaWNhdGlvbiBNb25pdG9yaW5nXCI6UmEuYXBtLFwiQXBwbGllZCBJbnRlbGxpZ2VuY2VcIjpcImFwcGxpZWQgaW50ZWxsaWdlbmNlXCIsQUk6XCJhcHBsaWVkIGludGVsbGlnZW5jZVwiLEFJT3BzOlwiYXBwbGllZCBpbnRlbGxpZ2VuY2VcIixcIkF1dG8gbWFwXCI6XCJhdXRvbWFwXCIsXCJQaXhpZSdzXCI6UmEucGl4aWUscGl4aWU6UmEucGl4aWUsXCJBdXRvLXRlbGVtZXRyeSB3aXRoIFBpeGllXCI6UmEucGl4aWUsXCJCcm93c2VyIE1vbml0b3JpbmdcIjpcImJyb3dzZXIgbW9uaXRvcmluZ1wiLENvbnRhaW5lcnM6XCJjb250YWluZXJzXCIsRGFzaGJvYXJkOlwiZGFzaGJvYXJkXCIsRGFzaGJvYXJkczpcImRhc2hib2FyZHNcIixcIkRhdGEgRXhwbG9yZXJcIjpcImRhdGEgZXhwbG9yZXJcIixcIkRhdGEgaW5nZXN0XCI6XCJkYXRhIGluZ2VzdFwiLFwiRGlnaXRhbCBFeHBlcmllbmNlIE1vbml0b3JpbmdcIjpSYS5kaWdpdGFsRXhwZXJpZW5jZU1vbml0b3JpbmcsXCJkaWdpdGFsIG1vbml0b3JpbmdcIjpSYS5kaWdpdGFsRXhwZXJpZW5jZU1vbml0b3JpbmcsXCJEaXN0cmlidXRlZCBUcmFjaW5nXCI6XCJkaXN0cmlidXRlZCB0cmFjaW5nXCIsXCJFcnJvcnMgaW5ib3hcIjpcImVycm9ycyBpbmJveFwiLFwiRXZlbnQgQ29ycmVsYXRpb25cIjpcImV2ZW50IGNvcnJlbGF0aW9uXCIsXCJJbmNpZGVudCBJbnRlbGxpZ2VuY2VcIjpcImluY2lkZW50IGludGVsbGlnZW5jZVwiLFwiSW5mcmFzdHJ1Y3R1cmUgTW9uaXRvcmluZ1wiOlJhLmluZnJhc3RydWN0dXJlTW9uaXRvcmluZyxcIkt1YmVybmV0ZXMgQ2x1c3RlciBFeHBsb3JlclwiOlwiS3ViZXJuZXRlcyBjbHVzdGVyIGV4cGxvcmVyXCIsXCJLdWJlcm5ldGVzIE1vbml0b3JpbmdcIjpcIkt1YmVybmV0ZXMgbW9uaXRvcmluZ1wiLFwibWljcm8gc2VydmljZXNcIjpcIm1pY3Jvc2VydmljZXNcIixNaWNyb3NlcnZpY2VzOlwibWljcm9zZXJ2aWNlc1wiLEludGVncmF0aW9uczpcImludGVncmF0aW9uc1wiLFwiTG9nIE1hbmFnZW1lbnRcIjpSYS5sb2dNYW5hZ2VtZW50LExvZ3M6UmEubG9nTWFuYWdlbWVudCxcIk1ldHJpY3MsIEV2ZW50cywgTG9ncywgYW5kIFRyYWNlc1wiOlJhLm1lbHQsXCJNb2JpbGUgTW9uaXRvcmluZ1wiOlwibW9iaWxlIG1vbml0b3JpbmdcIixcIk1vZGVsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk1MIG1vZGVsIG1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk1MIG1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixNUE06XCJtb2RlbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJOZXR3b3JrIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpSYS5uZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nLFwiTmV0d29yayBNb25pdG9yaW5nXCI6UmEubmV0d29ya1BlcmZvcm1hbmNlTW9uaXRvcmluZyxPYnNlcnZhYmlsaXR5OlJhLm9ic2VydmFiaWxpdHksTzExeTpSYS5vYnNlcnZhYmlsaXR5LFwiRnVsbC1TdGFjayBPYnNlcnZhYmlsaXR5XCI6UmEub2JzZXJ2YWJpbGl0eSxRdWVyeTpSYS5xdWVyeSxRdWVyaWVzOlJhLnF1ZXJ5LFF1ZXJ5aW5nOlJhLnF1ZXJ5LFwiUXVlcnkgQnVpbGRlclwiOlwicXVlcnkgYnVpbGRlclwiLFwicXVpY2sgc3RhcnRzXCI6XCJxdWlja3N0YXJ0c1wiLFF1aWNrU3RhcnRzOlwicXVpY2tzdGFydHNcIixcIlNlcnZlcmxlc3MgbW9uaXRvcmluZ1wiOlwic2VydmVybGVzcyBtb25pdG9yaW5nXCIsXCJzeW50aGV0aWNzIG1vbml0b3JpbmdcIjpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFwiU3ludGhldGljIG1vbml0b3JpbmdcIjpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFN5bnRoZXRpY3M6UmEuc3ludGhldGljTW9uaXRvcmluZyxcIkZ1bGwtc3RhY2sgT2JzZXJ2YWJpbGl0eVwiOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsXCJmdWxsIHN0YWNrIG9ic2VydmFiaWxpdHlcIjpcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLEZTTzpcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLFwiVGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIjpcInRlbGVtZXRyeSBkYXRhIHBsYXRmb3JtXCIsVERQOlwidGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIn0sQWE9T2JqZWN0LmtleXMoWWEpLFBhPVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI7ZnVuY3Rpb24gQ2EoKXtyZXR1cm4obixlKT0+e2FhKG4sQWEsKChuLGEsaSxyKT0+e2NvbnN0IHQ9cW4obik7bGV0IG89WWFbcl0sTT1cIlwiO2lmKCEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuc29tZSgobj0+bj09PXQpKSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSksTT0oZSxhLHIpPT57Y29uc3Qgbz1cInN0cmluZ1wiPT10eXBlb2YgcixNPUFycmF5LmlzQXJyYXkocik7aWYoIW8mJiFNKXJldHVybiBjb25zb2xlLmVycm9yKCdcImNoZWNrQ29udGV4dFwiIGV4cGVjdHMgdGhlIGFyZ3VtZW50IFwibWF0Y2hlc1RvQ2hlY2tcIiB0byBiZSBhbiBhcnJheSBvciBzdHJpbmdcXCcnKSxjb25zb2xlLmxvZyh0eXBlb2YgciksbnVsbDtpZihlIT09dClyZXR1cm4gbnVsbDtsZXQgcz1pLmNoaWxkcmVuLm1hcCgoKGUsaSxyKT0+e2lmKGU9PT1uWzBdKXtsZXQgbj1bXTtyZXR1cm5bLi4uQXJyYXkoMiphKV0uZm9yRWFjaCgoKGUsYSk9PntuLnVuc2hpZnQocltpLShhKzEpXSl9KSksbi5wdXNoKGUpLG59cmV0dXJuITF9KSkuZmlsdGVyKChuPT5uKSlbMF07cmV0dXJuIG8/cj09PXFuKHMpOk0/ci5zb21lKChuPT5uPT09cW4ocykpKTp2b2lkIDB9LE0oXCJPYnNlcnZhYmlsaXR5XCIsMSxcIkluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiKXx8TShcIkkvT1wiLDEsXCJSZWxpYyBJL09cIikpcmV0dXJuIG51bGw7T2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoXCJSZXBsYWNlIFwiK3VhKHQsXCJgXCIpK1wiIHdpdGggXCIrdWEobyxcImBcIikse3N0YXJ0OnRlKG5bMF0pLGVuZDpvZShuW24ubGVuZ3RoLTFdKX0sW1BhLHIucmVwbGFjZSgvXFxzKy9nLFwiLVwiKS50b0xvd2VyQ2FzZSgpXS5qb2luKFwiOlwiKSkse2FjdHVhbDp0LGV4cGVjdGVkOm8sdXJsOlwiaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL3N0eWxlLWd1aWRlL2NhcGl0YWxpemF0aW9uL3Byb2R1Y3QtY2FwYWJpbGl0eS1mZWF0dXJlLXVzYWdlLyN3aGVuLXRvLXVzZS10aXRsZS1jYXNlXCJ9KX19KSl9fWZ1bmN0aW9uIFRhKCl7cmV0dXJuKG4sZSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57Y29uc3QgYT1uLmNoaWxkcmVuLGk9XCJyZXRleHQtbm8tZW1vamlzXCIscj1bXCJcIl07YS5mb3JFYWNoKCgobixhKT0+e1ZuKG4sXCJTZW50ZW5jZU5vZGVcIikmJm4uY2hpbGRyZW4uZm9yRWFjaCgoKGEsdCk9PntpZihuLmNoaWxkcmVuLFZuKGEsXCJTeW1ib2xOb2RlXCIpJiYvXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY30vdS50ZXN0KGEudmFsdWUpKXtjb25zdCBuPWEudmFsdWU7cmV0dXJuIE9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKGBFeHBlY3RlZCBub3RoaW5nLCBub3QgXCIke259XCJgLHtzdGFydDp0ZShhKSxlbmQ6b2UoYSl9LFtpLGEudmFsdWVdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOm4sZXhwZWN0ZWQ6cixub3RlOlwiXCIsdXJsOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2Vtb2ppcy9cIn0pLGV9fSkpfSkpfSkpfX12YXIgeGE9W1wiTmV3IFJlbGljXCIsXCJOZXcgUmVsaWMgT25lXCIsXCJuZXJkZ3JhcGhcIixcImdyYXBocWwtZm9ybWF0XCIsXCJncmFwaHFsXCIsXCJncmFwaGlxbFwiLFwiRmlnbWFcIixcIlVJXCIsXCJOb2RlLmpzXCIsXCJBUE1cIixcInNlcnZlcmxlc3NcIixcImt1YmVybmV0ZXNcIixcIkFXU1wiLFwibGFtYmRhXCIsXCJBSVwiLFwib2JzZXJ2YWJpbGl0eVwiLFwibmVyZHBhY2tcIixcIm5lcmRsZXRcIixcIkNMSVwiLFwibGludXhcIixcInVidW50dVwiLFwiT1NcIixcIlNMT1wiLFwiU0xBXCIsXCJTTElcIixcIlNMTVwiLFwiTlIxXCIsXCJkZXZvcHNcIixcIm5ycWwvUEhQXCIsXCJwaS1ob2xlXCIsXCJETlNcIixcInJlZGlzXCIsXCJTREtcIixcIkFQSVwiLFwia2Fma2FcIixcIlMzXCIsXCJ2cG4vcGhwXCIsXCJwb3N0cmdyZXNxbFwiLFwibXlzcWxcIixcInByb21xbFwiLFwiVk1cIixcImZpcmViYXNlXCIsXCJrZW50aWtcIixcInZwY1wiLFwiZW5kcG9pbnRcIixcInBlcm1hbGlua1wiLFwiYXp1cmVcIixcIm9wc1wiLFwiY29kZXN0cmVhbVwiLFwiZmFzdGx5XCIsXCJnYXRzYnlcIixcImxhY2V3b3JrXCIsXCJtb25nb2RiXCIsXCJjcmlibFwiLFwiZGV2XCIsXCJnaWdhbW9uXCIsXCJzeXNsb2dcIixcImFra2FcIixcImFsZ29yaXRobWFcIixcImFuc2libGVcIixcIm1hY29zXCIsXCJjZW50b3NcIixcImFwaWdlZVwiLFwiamlyYVwiLFwiQysrXCIsXCJDXCIsXCJjb3VjaGJhc2VcIixcImNvbnN1bFwiLFwiY29yZG92YVwiLFwiZGphbmdvXCIsXCJmNVwiLFwiZmx1ZW50ZFwiLFwiR0NQXCIsXCJUQ1BcIixcInd3d1wiLFwieW1sXCIsXCJ3Z2V0XCIsXCJtZHhcIixcIm1hcmtkb3duXCIsXCJHcmFmYW5hXCIsXCJIZXJva3VcIixcImhhcHJveHlcIixcIkhUVFBTXCIsXCJxdWlja3N0YXJ0L2Nvd1wiLFwiZnJvbnRlbmRcIixcImJhY2tlbmRcIixcImJpdGJ1Y2tldFwiLFwiZ2l0bGFiXCIsXCJnaXRodWJcIixcInRyZWxsb1wiLFwiYXNhbmFcIixcImludGVncmF0aW9uc1wiXTtmdW5jdGlvbiB6YShuLGUpe3ZhciBhPU9iamVjdC5rZXlzKG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7ZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksYS5wdXNoLmFwcGx5KGEsaSl9cmV0dXJuIGF9ZnVuY3Rpb24gRWEobixlLGEpe3JldHVybiBlIGluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bZV09YSxufWZ1bmN0aW9uIEJhKG4sZSxhLGkscix0LG8pe3RyeXt2YXIgTT1uW3RdKG8pLHM9TS52YWx1ZX1jYXRjaChuKXtyZXR1cm4gdm9pZCBhKG4pfU0uZG9uZT9lKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKGkscil9ZnVuY3Rpb24gTmEobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxhPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkscil7dmFyIHQ9bi5hcHBseShlLGEpO2Z1bmN0aW9uIG8obil7QmEodCxpLHIsbyxNLFwibmV4dFwiLG4pfWZ1bmN0aW9uIE0obil7QmEodCxpLHIsbyxNLFwidGhyb3dcIixuKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFphKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG59KG4pfHxmdW5jdGlvbihuLGUpe3ZhciBhPW51bGw9PW4/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl18fG5bXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWEpe3ZhciBpLHIsdD1bXSxvPSEwLE09ITE7dHJ5e2ZvcihhPWEuY2FsbChuKTshKG89KGk9YS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKGkudmFsdWUpLCFlfHx0Lmxlbmd0aCE9PWUpO289ITApO31jYXRjaChuKXtNPSEwLHI9bn1maW5hbGx5e3RyeXtvfHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKE0pdGhyb3cgcn19cmV0dXJuIHR9fShuLGUpfHxJYShuLGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gRmEobil7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIFVhKG4pfShuKXx8ZnVuY3Rpb24obil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9bltTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1uW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShuKX0obil8fElhKG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIElhKG4sZSl7aWYobil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIFVhKG4sZSk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1hJiZuLmNvbnN0cnVjdG9yJiYoYT1uLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1hfHxcIlNldFwiPT09YT9BcnJheS5mcm9tKG4pOlwiQXJndW1lbnRzXCI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKT9VYShuLGUpOnZvaWQgMH19ZnVuY3Rpb24gVWEobixlKXsobnVsbD09ZXx8ZT5uLmxlbmd0aCkmJihlPW4ubGVuZ3RoKTtmb3IodmFyIGE9MCxpPW5ldyBBcnJheShlKTthPGU7YSsrKWlbYV09blthXTtyZXR1cm4gaX1mdW5jdGlvbiBqYShuLGUpe3ZhciBhLGkscix0PXhhO2V8fChlPW51bGwhPT0oYT13aW5kb3cpJiZ2b2lkIDAhPT1hJiZudWxsIT09KGk9YS5sb2NhbFN0b3JhZ2UpJiZ2b2lkIDAhPT1pJiZpLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeT9KU09OLnBhcnNlKG51bGw9PT0ocj13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpOltdKSx0LnB1c2guYXBwbHkodCxGYShlKSk7dmFyIG89e2RpY3Rpb25hcnk6ZnVuY3Rpb24obil7bihudWxsLHthZmY6XCJTRVQgVVRGLThcXG5UUlkgZXNpYW5ydG9sY2R1Z21waGJ5ZnZrd3pFU0lBTlJUT0xDRFVHTVBIQllGVktXWidcXG5JQ09OViAxXFxuSUNPTlYg4oCZICdcXG5OT1NVR0dFU1QgIVxcblxcbiMgb3JkaW5hbCBudW1iZXJzXFxuQ09NUE9VTkRNSU4gMVxcbiMgb25seSBpbiBjb21wb3VuZHM6IDF0aCwgMnRoLCAzdGhcXG5PTkxZSU5DT01QT1VORCBjXFxuIyBjb21wb3VuZCBydWxlczpcXG4jIDEuIFswLTldKjFbMC05XXRoICgxMHRoLCAxMXRoLCAxMnRoLCA1NjcxNHRoLCBldGMuKVxcbiMgMi4gWzAtOV0qWzAyLTldKDFzdHwybmR8M3JkfFs0LTlddGgpICgyMXN0LCAyMm5kLCAxMjNyZCwgMTIzNHRoLCBldGMuKVxcbkNPTVBPVU5EUlVMRSAyXFxuQ09NUE9VTkRSVUxFIG4qMXRcXG5DT01QT1VORFJVTEUgbiptcFxcbldPUkRDSEFSUyAwMTIzNDU2Nzg5XFxuXFxuUEZYIEEgWSAxXFxuUEZYIEEgICAwICAgICByZSAgICAgICAgIC5cXG5cXG5QRlggSSBZIDFcXG5QRlggSSAgIDAgICAgIGluICAgICAgICAgLlxcblxcblBGWCBVIFkgMVxcblBGWCBVICAgMCAgICAgdW4gICAgICAgICAuXFxuXFxuUEZYIEMgWSAxXFxuUEZYIEMgICAwICAgICBkZSAgICAgICAgICAuXFxuXFxuUEZYIEUgWSAxXFxuUEZYIEUgICAwICAgICBkaXMgICAgICAgICAuXFxuXFxuUEZYIEYgWSAxXFxuUEZYIEYgICAwICAgICBjb24gICAgICAgICAuXFxuXFxuUEZYIEsgWSAxXFxuUEZYIEsgICAwICAgICBwcm8gICAgICAgICAuXFxuXFxuU0ZYIFYgTiAyXFxuU0ZYIFYgICBlICAgICBpdmUgICAgICAgIGVcXG5TRlggViAgIDAgICAgIGl2ZSAgICAgICAgW15lXVxcblxcblNGWCBOIFkgM1xcblNGWCBOICAgZSAgICAgaW9uICAgICAgICBlXFxuU0ZYIE4gICB5ICAgICBpY2F0aW9uICAgIHlcXG5TRlggTiAgIDAgICAgIGVuICAgICAgICAgW15leV1cXG5cXG5TRlggWCBZIDNcXG5TRlggWCAgIGUgICAgIGlvbnMgICAgICAgZVxcblNGWCBYICAgeSAgICAgaWNhdGlvbnMgICB5XFxuU0ZYIFggICAwICAgICBlbnMgICAgICAgIFteZXldXFxuXFxuU0ZYIEggTiAyXFxuU0ZYIEggICB5ICAgICBpZXRoICAgICAgIHlcXG5TRlggSCAgIDAgICAgIHRoICAgICAgICAgW155XVxcblxcblNGWCBZIFkgMVxcblNGWCBZICAgMCAgICAgbHkgICAgICAgICAuXFxuXFxuU0ZYIEcgWSAyXFxuU0ZYIEcgICBlICAgICBpbmcgICAgICAgIGVcXG5TRlggRyAgIDAgICAgIGluZyAgICAgICAgW15lXVxcblxcblNGWCBKIFkgMlxcblNGWCBKICAgZSAgICAgaW5ncyAgICAgICBlXFxuU0ZYIEogICAwICAgICBpbmdzICAgICAgIFteZV1cXG5cXG5TRlggRCBZIDRcXG5TRlggRCAgIDAgICAgIGQgICAgICAgICAgZVxcblNGWCBEICAgeSAgICAgaWVkICAgICAgICBbXmFlaW91XXlcXG5TRlggRCAgIDAgICAgIGVkICAgICAgICAgW15leV1cXG5TRlggRCAgIDAgICAgIGVkICAgICAgICAgW2FlaW91XXlcXG5cXG5TRlggVCBOIDRcXG5TRlggVCAgIDAgICAgIHN0ICAgICAgICAgZVxcblNGWCBUICAgeSAgICAgaWVzdCAgICAgICBbXmFlaW91XXlcXG5TRlggVCAgIDAgICAgIGVzdCAgICAgICAgW2FlaW91XXlcXG5TRlggVCAgIDAgICAgIGVzdCAgICAgICAgW15leV1cXG5cXG5TRlggUiBZIDRcXG5TRlggUiAgIDAgICAgIHIgICAgICAgICAgZVxcblNGWCBSICAgeSAgICAgaWVyICAgICAgICBbXmFlaW91XXlcXG5TRlggUiAgIDAgICAgIGVyICAgICAgICAgW2FlaW91XXlcXG5TRlggUiAgIDAgICAgIGVyICAgICAgICAgW15leV1cXG5cXG5TRlggWiBZIDRcXG5TRlggWiAgIDAgICAgIHJzICAgICAgICAgZVxcblNGWCBaICAgeSAgICAgaWVycyAgICAgICBbXmFlaW91XXlcXG5TRlggWiAgIDAgICAgIGVycyAgICAgICAgW2FlaW91XXlcXG5TRlggWiAgIDAgICAgIGVycyAgICAgICAgW15leV1cXG5cXG5TRlggUyBZIDRcXG5TRlggUyAgIHkgICAgIGllcyAgICAgICAgW15hZWlvdV15XFxuU0ZYIFMgICAwICAgICBzICAgICAgICAgIFthZWlvdV15XFxuU0ZYIFMgICAwICAgICBlcyAgICAgICAgIFtzeHpoXVxcblNGWCBTICAgMCAgICAgcyAgICAgICAgICBbXnN4emh5XVxcblxcblNGWCBQIFkgM1xcblNGWCBQICAgeSAgICAgaW5lc3MgICAgICBbXmFlaW91XXlcXG5TRlggUCAgIDAgICAgIG5lc3MgICAgICAgW2FlaW91XXlcXG5TRlggUCAgIDAgICAgIG5lc3MgICAgICAgW155XVxcblxcblNGWCBNIFkgMVxcblNGWCBNICAgMCAgICAgJ3MgICAgICAgICAuXFxuXFxuU0ZYIEIgWSAzXFxuU0ZYIEIgICAwICAgICBhYmxlICAgICAgIFteYWVpb3VdXFxuU0ZYIEIgICAwICAgICBhYmxlICAgICAgIGVlXFxuU0ZYIEIgICBlICAgICBhYmxlICAgICAgIFteYWVpb3VdZVxcblxcblNGWCBMIFkgMVxcblNGWCBMICAgMCAgICAgbWVudCAgICAgICAuXFxuXFxuUkVQIDkwXFxuUkVQIGEgZWlcXG5SRVAgZWkgYVxcblJFUCBhIGV5XFxuUkVQIGV5IGFcXG5SRVAgYWkgaWVcXG5SRVAgaWUgYWlcXG5SRVAgYWxvdCBhX2xvdFxcblJFUCBhcmUgYWlyXFxuUkVQIGFyZSBlYXJcXG5SRVAgYXJlIGVpclxcblJFUCBhaXIgYXJlXFxuUkVQIGFpciBlcmVcXG5SRVAgZXJlIGFpclxcblJFUCBlcmUgZWFyXFxuUkVQIGVyZSBlaXJcXG5SRVAgZWFyIGFyZVxcblJFUCBlYXIgYWlyXFxuUkVQIGVhciBlcmVcXG5SRVAgZWlyIGFyZVxcblJFUCBlaXIgZXJlXFxuUkVQIGNoIHRlXFxuUkVQIHRlIGNoXFxuUkVQIGNoIHRpXFxuUkVQIHRpIGNoXFxuUkVQIGNoIHR1XFxuUkVQIHR1IGNoXFxuUkVQIGNoIHNcXG5SRVAgcyBjaFxcblJFUCBjaCBrXFxuUkVQIGsgY2hcXG5SRVAgZiBwaFxcblJFUCBwaCBmXFxuUkVQIGdoIGZcXG5SRVAgZiBnaFxcblJFUCBpIGlnaFxcblJFUCBpZ2ggaVxcblJFUCBpIHV5XFxuUkVQIHV5IGlcXG5SRVAgaSBlZVxcblJFUCBlZSBpXFxuUkVQIGogZGlcXG5SRVAgZGkgalxcblJFUCBqIGdnXFxuUkVQIGdnIGpcXG5SRVAgaiBnZVxcblJFUCBnZSBqXFxuUkVQIHMgdGlcXG5SRVAgdGkgc1xcblJFUCBzIGNpXFxuUkVQIGNpIHNcXG5SRVAgayBjY1xcblJFUCBjYyBrXFxuUkVQIGsgcXVcXG5SRVAgcXUga1xcblJFUCBrdyBxdVxcblJFUCBvIGVhdVxcblJFUCBlYXUgb1xcblJFUCBvIGV3XFxuUkVQIGV3IG9cXG5SRVAgb28gZXdcXG5SRVAgZXcgb29cXG5SRVAgZXcgdWlcXG5SRVAgdWkgZXdcXG5SRVAgb28gdWlcXG5SRVAgdWkgb29cXG5SRVAgZXcgdVxcblJFUCB1IGV3XFxuUkVQIG9vIHVcXG5SRVAgdSBvb1xcblJFUCB1IG9lXFxuUkVQIG9lIHVcXG5SRVAgdSBpZXVcXG5SRVAgaWV1IHVcXG5SRVAgdWUgZXdcXG5SRVAgZXcgdWVcXG5SRVAgdWZmIG91Z2hcXG5SRVAgb28gaWV1XFxuUkVQIGlldSBvb1xcblJFUCBpZXIgZWFyXFxuUkVQIGVhciBpZXJcXG5SRVAgZWFyIGFpclxcblJFUCBhaXIgZWFyXFxuUkVQIHcgcXVcXG5SRVAgcXUgd1xcblJFUCB6IHNzXFxuUkVQIHNzIHpcXG5SRVAgc2h1biB0aW9uXFxuUkVQIHNodW4gc2lvblxcblJFUCBzaHVuIGNpb25cXG5SRVAgc2l6ZSBjaXNlXCIsZGljOlwiNDk1NjhcXG4wL25tXFxuMHRoL3B0XFxuMS9uMVxcbjFzdC9wXFxuMXRoL3RjXFxuMi9ubVxcbjJuZC9wXFxuMnRoL3RjXFxuMy9ubVxcbjNyZC9wXFxuM3RoL3RjXFxuNC9ubVxcbjR0aC9wdFxcbjUvbm1cXG41dGgvcHRcXG42L25tXFxuNnRoL3B0XFxuNy9ubVxcbjd0aC9wdFxcbjgvbm1cXG44dGgvcHRcXG45L25tXFxuOXRoL3B0XFxuQS9TTVxcbkFBL01cXG5BQUFcXG5BQi9NXFxuQUJBXFxuQUJDL1NNXFxuQUJNL1NNXFxuQUJTXFxuQUMvTVxcbkFDTFUvTVxcbkFDVFxcbkFDVEgvTVxcbkFEL01cXG5BRENcXG5BRERcXG5BRE1cXG5BRFAvTVxcbkFGXFxuQUZBSUtcXG5BRkJcXG5BRkMvTVxcbkFGRENcXG5BRk5cXG5BRlRcXG5BSS9TTVxcbkFJRFMvTVxcbkFLXFxuQUxcXG5BTS9NXFxuQU1BXFxuQU1EL01cXG5BTlNJL1NcXG5BTlpVUy9NXFxuQU9ML01cXG5BUC9NXFxuQVBCXFxuQVBDXFxuQVBJXFxuQVBPXFxuQVBSXFxuQVJcXG5BUkNcXG5BU0FQXFxuQVNDSUkvU01cXG5BU0wvTVxcbkFTUENBXFxuQVRNL01cXG5BVFAvTVxcbkFUVlxcbkFWXFxuQVZJXFxuQVdBQ1MvTVxcbkFXT0wvTVxcbkFXUy9NXFxuQVovTVxcbkFaVC9NXFxuQWFjaGVuL01cXG5BYWxpeWFoL01cXG5BYXJvbi9NXFxuQWJiYXMvTVxcbkFiYmFzaWQvTVxcbkFiYm90dC9NXFxuQWJieS9NXFxuQWJkdWwvTVxcbkFiZS9NXFxuQWJlbC9NXFxuQWJlbGFyZC9NXFxuQWJlbHNvbi9NXFxuQWJlcmRlZW4vTVxcbkFiZXJuYXRoeS9NXFxuQWJpZGphbi9NXFxuQWJpZ2FpbC9NXFxuQWJpbGVuZS9NXFxuQWJuZXIvTVxcbkFib3JpZ2luZS9NU1xcbkFicmFoYW0vTVxcbkFicmFtL01TXFxuQWJyYW1zL01cXG5BYnNhbG9tL01cXG5BYnVqYS9NXFxuQWJ5c3NpbmlhL01cXG5BYnlzc2luaWFuL01cXG5BYy9NXFxuQWNhZGlhL01cXG5BY2FwdWxjby9NXFxuQWNjZW50dXJlL01cXG5BY2NyYS9NXFxuQWNldmVkby9NXFxuQWNoYWVhbi9NXFxuQWNoZWJlL01cXG5BY2hlcm5hci9NXFxuQWNoZXNvbi9NXFxuQWNoaWxsZXMvTVxcbkFjb25jYWd1YS9NXFxuQWNvc3RhL01cXG5BY3JvcG9saXNcXG5BY3J1eC9NXFxuQWN0YWVvbi9NXFxuQWN0b24vTVxcbkFjdHMvTVxcbkFjdWZmL01cXG5BZGEvU01cXG5BZGFtL1NNXFxuQWRhbXMvTVxcbkFkYW4vTVxcbkFkYW5hL01cXG5BZGFyL01cXG5BZGRhbXMvTVxcbkFkZGVybGV5L01cXG5BZGRpZS9NXFxuQWRkaXNvbi9NXFxuQWRlbGEvTVxcbkFkZWxhaWRlL01cXG5BZGVsZS9NXFxuQWRlbGluZS9NXFxuQWRlbi9NXFxuQWRlbmF1ZXIvTVxcbkFkaGFyYS9NXFxuQWRpZGFzL01cXG5BZGlyb25kYWNrL1NNXFxuQWRpcm9uZGFja3MvTVxcbkFka2lucy9NXFxuQWRsZXIvTVxcbkFkbVxcbkFkbWlyYWx0eVxcbkFkb2xmL01cXG5BZG9sZm8vTVxcbkFkb2xwaC9NXFxuQWRvbmlzL01TXFxuQWRyZW5hbGluL01TXFxuQWRyaWFuL01cXG5BZHJpYW5hL01cXG5BZHJpYXRpYy9NXFxuQWRyaWVubmUvTVxcbkFkdmVudC9NU1xcbkFkdmVudGlzdC9NU1xcbkFkdmlsL01cXG5BZWdlYW4vTVxcbkFlbGZyaWMvTVxcbkFlbmVhcy9NXFxuQWVuZWlkL01cXG5BZW9sdXMvTVxcbkFlcm9mbG90L01cXG5BZXNjaHlsdXMvTVxcbkFlc2N1bGFwaXVzL01cXG5BZXNvcC9NXFxuQWZnaGFuL1NNXFxuQWZnaGFuaS9NXFxuQWZnaGFuaXN0YW4vTVxcbkFmclxcbkFmcmljYS9NXFxuQWZyaWNhbi9TTVxcbkFmcmlrYWFucy9NXFxuQWZyaWthbmVyL1NNXFxuQWZyby9TTVxcbkFmcm9jZW50cmljXFxuQWZyb2NlbnRyaXNtL01cXG5BZy9NXFxuQWdhbWVtbm9uL01cXG5BZ2FuYVxcbkFnYXNzaS9NXFxuQWdhc3Npei9NXFxuQWdhdGhhL01cXG5BZ2dpZS9NXFxuQWdsYWlhL01cXG5BZ25lcy9NXFxuQWduZXcvTVxcbkFnbmkvTVxcbkFncmEvTVxcbkFncmljb2xhL01cXG5BZ3JpcHBhL01cXG5BZ3JpcHBpbmEvTVxcbkFndWFkaWxsYS9NXFxuQWd1YXNjYWxpZW50ZXNcXG5BZ3VpbGFyL01cXG5BZ3VpbmFsZG8vTVxcbkFndWlycmUvTVxcbkFndXN0aW4vTVxcbkFoYWIvTVxcbkFobWFkL01cXG5BaG1hZGFiYWQvTVxcbkFobWFkaW5lamFkL01cXG5BaG1lZC9NXFxuQWhyaW1hbi9NXFxuQWlkYS9NXFxuQWlrZW4vTVxcbkFpbGVlbi9NXFxuQWltZWUvTVxcbkFpbnUvTVxcbkFpcmVkYWxlL01TXFxuQWlyZXMvTVxcbkFpc2hhL01cXG5BamF4L01cXG5Ba2Jhci9NXFxuQWtobWF0b3ZhL01cXG5Ba2loaXRvL01cXG5Ba2l0YS9NXFxuQWtpdmEvTVxcbkFra2FkL01cXG5Ba3Jvbi9NXFxuQWwvTVxcbkFsYS9TXFxuQWxhYmFtYS9NXFxuQWxhYmFtYW4vTVNcXG5BbGFiYW1pYW4vU01cXG5BbGFkZGluL01cXG5BbGFtby9NXFxuQWxhbW9nb3Jkby9NXFxuQWxhbi9NXFxuQWxhbmEvTVxcbkFsYXIvTVxcbkFsYXJpYy9NXFxuQWxhc2thL01cXG5BbGFza2FuL01TXFxuQWxiYS9NXFxuQWxiYW5pYS9NXFxuQWxiYW5pYW4vTVNcXG5BbGJhbnkvTVxcbkFsYmVlL01cXG5BbGJlcmlvL01cXG5BbGJlcnQvTVxcbkFsYmVydGEvTVxcbkFsYmVydGFuXFxuQWxiZXJ0by9NXFxuQWxiaWdlbnNpYW4vTVxcbkFsYmlvbi9NXFxuQWxiaXJlby9NXFxuQWxidXF1ZXJxdWUvTVxcbkFsY2F0cmF6L01cXG5BbGNlc3Rpcy9NXFxuQWxjaWJpYWRlcy9NXFxuQWxjaW5kb3IvTVxcbkFsY21lbmEvTVxcbkFsY29hL01cXG5BbGNvdHQvTVxcbkFsY3Vpbi9NXFxuQWxjeW9uZS9NXFxuQWxkYW4vTVxcbkFsZGViYXJhbi9NXFxuQWxkZW4vTVxcbkFsZGVyYW1pbi9NXFxuQWxkby9NXFxuQWxkcmluL01cXG5BbGVjL01cXG5BbGVpY2hlbS9NXFxuQWxlamFuZHJhL01cXG5BbGVqYW5kcm8vTVxcbkFsZW1iZXJ0L01cXG5BbGVwcG8vTVxcbkFsZXV0L01TXFxuQWxldXRpYW4vU01cXG5BbGV4L01cXG5BbGV4YW5kZXIvTVNcXG5BbGV4YW5kcmEvTVxcbkFsZXhhbmRyaWEvTVxcbkFsZXhhbmRyaWFuXFxuQWxleGVpL01cXG5BbGV4aXMvTVxcbkFsZm9uc28vTVxcbkFsZm9uem8vTVxcbkFsZm9yZC9NXFxuQWxmcmVkL01cXG5BbGZyZWRhL01cXG5BbGZyZWRvL01cXG5BbGdlbmliL01cXG5BbGdlci9NXFxuQWxnZXJpYS9NXFxuQWxnZXJpYW4vU01cXG5BbGdpZWJhL01cXG5BbGdpZXJzL01cXG5BbGdvbC9NXFxuQWxnb25xdWlhbi9TTVxcbkFsZ29ucXVpbi9NU1xcbkFsaGFtYnJhL01cXG5BbGhlbmEvTVxcbkFsaS9NXFxuQWxpY2UvTVxcbkFsaWNpYS9NXFxuQWxpZ2hpZXJpL01cXG5BbGluZS9NXFxuQWxpb3RoL01cXG5BbGlzYS9NXFxuQWxpc2hhL01cXG5BbGlzb24vTVxcbkFsaXNzYS9NXFxuQWxpc3RhaXIvTVxcbkFsa2FpZC9NXFxuQWxsYWgvTVxcbkFsbGFoYWJhZC9NXFxuQWxsYW4vTVxcbkFsbGVnaGVuaWVzL01cXG5BbGxlZ2hlbnkvU01cXG5BbGxlZ3JhL01cXG5BbGxlbi9NXFxuQWxsZW5kZS9NXFxuQWxsZW50b3duL01cXG5BbGxoYWxsb3dzL01cXG5BbGxpZS9NU1xcbkFsbGlzb24vTVxcbkFsbHN0YXRlL01cXG5BbGx5c29uL01cXG5BbG1hL01cXG5BbG1hY2gvTVxcbkFsbWF0eS9NXFxuQWxtaWdodHkvTVxcbkFsbW9oYWQvTVxcbkFsbW9yYXZpZC9NXFxuQWxuaWxhbS9NXFxuQWxuaXRhay9NXFxuQWxvbnpvL01cXG5BbHBlcnQvTVxcbkFscGhhcmQvTVxcbkFscGhlY2NhL01cXG5BbHBoZXJhdHovTVxcbkFscGhvbnNlL01cXG5BbHBob25zby9NXFxuQWxwaW5lL01cXG5BbHBvL01cXG5BbHBzL01cXG5BbHNhY2UvTVxcbkFsc2F0aWFuL1NNXFxuQWxzb3AvTVxcbkFsc3Rvbi9NXFxuQWx0YS9NXFxuQWx0YWJhL01cXG5BbHRhaS9NXFxuQWx0YWljL01cXG5BbHRhaXIvTVxcbkFsdGFtaXJhL01cXG5BbHRoZWEvTVxcbkFsdGlwbGFuby9NXFxuQWx0bWFuL01cXG5BbHRvaWRzL01cXG5BbHRvbi9NXFxuQWx0b29uYS9NXFxuQWx1ZHJhL01cXG5BbHZhL01cXG5BbHZhcmFkby9NXFxuQWx2YXJlei9NXFxuQWx2YXJvL01cXG5BbHZpbi9NXFxuQWx5Y2UvTVxcbkFseXNvbi9NXFxuQWx5c3NhL01cXG5BbHpoZWltZXIvTVxcbkFtL01OUlxcbkFtYWRldXMvTVxcbkFtYWRvL01cXG5BbWFsaWEvTVxcbkFtYW5kYS9NXFxuQW1hcmlsbG8vTVxcbkFtYXJ1L01cXG5BbWF0ZXJhc3UvTVxcbkFtYXRpL01cXG5BbWF6b24vU01cXG5BbWF6b25pYW5cXG5BbWJlci9NXFxuQW1lbGlhL01cXG5BbWVuL01cXG5BbWVuaG90ZXAvTVxcbkFtZXJhc2lhbi9NXFxuQW1lcmljYS9TTVxcbkFtZXJpY2FuL01TXFxuQW1lcmljYW5hL01cXG5BbWVyaWNhbmlzbS9NU1xcbkFtZXJpY2FuaXphdGlvbi9NU1xcbkFtZXJpY2FuaXplL0dEU1xcbkFtZXJpbmQvU01cXG5BbWVyaW5kaWFuL01TXFxuQW1lcy9NXFxuQW1lc2xhbi9NXFxuQW1nZW4vTVxcbkFtaGFyaWMvTVxcbkFtaGVyc3QvTVxcbkFtaWUvTVxcbkFtaWdhL01cXG5BbWlzaC9NXFxuQW1tYW4vTVxcbkFtb2NvL01cXG5BbW9zL01cXG5BbXBhcm8vTVxcbkFtcGVyZS9NXFxuQW1yaXRzYXIvTVxcbkFtc3RlcmRhbS9NXFxuQW10cmFrL01cXG5BbXVuZHNlbi9NXFxuQW11ci9NXFxuQW13YXkvTVxcbkFteS9NXFxuQW5hL01cXG5BbmFiYXB0aXN0L01cXG5BbmFiZWwvTVxcbkFuYWNpbi9NXFxuQW5hY3Jlb24vTVxcbkFuYWhlaW0vTVxcbkFuYWxlY3RzL01cXG5BbmFuaWFzL01cXG5BbmFzYXppL01cXG5BbmFzdGFzaWEvTVxcbkFuYXRvbGUvTVxcbkFuYXRvbGlhL01cXG5BbmF0b2xpYW4vTVxcbkFuYXhhZ29yYXMvTVxcbkFuY2hvcmFnZS9NXFxuQW5kYWx1c2lhL01cXG5BbmRhbHVzaWFuL01cXG5BbmRhbWFuL01cXG5BbmRlYW4vTVxcbkFuZGVyc2VuL01cXG5BbmRlcnNvbi9NXFxuQW5kZXMvTVxcbkFuZG9ycmEvTVxcbkFuZG9ycmFuL1NNXFxuQW5kcmUvTVNcXG5BbmRyZWEvTVxcbkFuZHJlaS9NXFxuQW5kcmVzL01cXG5BbmRyZXR0aS9NXFxuQW5kcmV3L1NNXFxuQW5kcmV3cy9NXFxuQW5kcmlhbmFtcG9pbmltZXJpbmEvTVxcbkFuZHJvaWQvTVxcbkFuZHJvbWFjaGUvTVxcbkFuZHJvbWVkYS9NXFxuQW5kcm9wb3YvTVxcbkFuZHkvTVxcbkFuZ2FyYS9NXFxuQW5nZWwvTVxcbkFuZ2VsYS9NXFxuQW5nZWxlcy9NXFxuQW5nZWxpYS9NXFxuQW5nZWxpY2EvTVxcbkFuZ2VsaWNvL01cXG5BbmdlbGluYS9NXFxuQW5nZWxpbmUvTVxcbkFuZ2VsaXF1ZS9NXFxuQW5nZWxpdGEvTVxcbkFuZ2Vsby9NXFxuQW5nZWxvdS9NXFxuQW5nZXZpbi9NXFxuQW5naWUvTVxcbkFuZ2tvci9NXFxuQW5nbGUvTVNcXG5BbmdsZXRvbi9NXFxuQW5nbGlhL01cXG5BbmdsaWNhbi9TTVxcbkFuZ2xpY2FuaXNtL01TXFxuQW5nbGljaXNtL01TXFxuQW5nbGljaXphdGlvblxcbkFuZ2xpY2l6ZVxcbkFuZ2xvL01cXG5Bbmdsb3BoaWxlL01cXG5Bbmdsb3Bob2JlXFxuQW5nb2xhL01cXG5BbmdvbGFuL01TXFxuQW5nb3JhL1NNXFxuQW5nc3Ryb20vTVxcbkFuZ3VpbGxhL01cXG5Bbmd1cy9NXFxuQW5odWkvTVxcbkFuaWFrY2hhay9NXFxuQW5pYmFsL01cXG5Bbml0YS9NXFxuQW5rYXJhL01cXG5Bbm4vTVxcbkFubmEvTVxcbkFubmFiZWwvTVxcbkFubmFiZWxsZS9NXFxuQW5uYW0vTVxcbkFubmFwb2xpcy9NXFxuQW5uYXB1cm5hL01cXG5Bbm5lL01cXG5Bbm5ldHRlL01cXG5Bbm5pZS9NXFxuQW5uaXN0b24vTVxcbkFubm1hcmllL01cXG5Bbm51bmNpYXRpb24vU01cXG5Bbm91aWxoL01cXG5BbnNlbG0vTVxcbkFuc2VsbW8vTVxcbkFuc2hhbi9NXFxuQW50YWV1cy9NXFxuQW50YW5hbmFyaXZvL01cXG5BbnRhcmN0aWMvTVxcbkFudGFyY3RpY2EvTVxcbkFudGFyZXMvTVxcbkFudGhvbnkvTVxcbkFudGhyb3BvY2VuZVxcbkFudGljaHJpc3QvU01cXG5BbnRpZXRhbS9NXFxuQW50aWZhL01cXG5BbnRpZ29uZS9NXFxuQW50aWd1YS9NXFxuQW50aWxsZWFuXFxuQW50aWxsZXMvTVxcbkFudGlvY2gvTVxcbkFudGlwYXMvTVxcbkFudGlwb2Rlc1xcbkFudG9mYWdhc3RhL01cXG5BbnRvaW5lL01cXG5BbnRvaW5ldHRlL01cXG5BbnRvbi9NXFxuQW50b25lL01cXG5BbnRvbmlhL01cXG5BbnRvbmludXMvTVxcbkFudG9uaW8vTVxcbkFudG9uaXVzL01cXG5BbnRvbnkvTVxcbkFudHdhbi9NXFxuQW50d2VycC9NXFxuQW51YmlzL01cXG5BbnphYy9NXFxuQXBhY2hlL1NNXFxuQXBhbGFjaGljb2xhL01cXG5BcGF0b3NhdXJ1c1xcbkFwZW5uaW5lcy9NXFxuQXBocm9kaXRlL01cXG5BcGlhL01cXG5BcG9jYWx5cHNlL01cXG5BcG9jcnlwaGEvTVxcbkFwb2xsaW5haXJlL01cXG5BcG9sbG8vU01cXG5BcG9sbG9uaWFuL01cXG5BcG9zdGxlL01cXG5BcHBhbGFjaGlhL01cXG5BcHBhbGFjaGlhbi9TTVxcbkFwcGFsYWNoaWFucy9NXFxuQXBwYWxvb3NhL1NNXFxuQXBwbGUvTVxcbkFwcGxlc2VlZC9NXFxuQXBwbGV0b24vTVxcbkFwcG9tYXR0b3gvTVxcbkFwci9NXFxuQXByaWwvTVNcXG5BcHVsZWl1cy9NXFxuQXF1YWZyZXNoL01cXG5BcXVhcmlhblxcbkFxdWFyaXVzL01TXFxuQXF1aWxhL01cXG5BcXVpbmFzL01cXG5BcXVpbm8vTVxcbkFxdWl0YWluZS9NXFxuQXIvTVxcbkFyYS9NXFxuQXJhYi9TTVxcbkFyYWJpYS9NXFxuQXJhYmlhbi9NU1xcbkFyYWJpYy9NXFxuQXJhYmlzdC9NU1xcbkFyYWJ5L01cXG5BcmFjZWxpL01cXG5BcmFmYXQvTVxcbkFyYWdvblxcbkFyYWd1YXlhL01cXG5BcmFsL01cXG5BcmFtYWljL01cXG5BcmFtY28vTVxcbkFyYXBhaG8vTVNcXG5BcmFwYWhvZXNcXG5BcmFyYXQvTVxcbkFyYXVjYW5pYW4vTVxcbkFyYXdhay9NXFxuQXJhd2FrYW4vTVxcbkFyYml0cm9uL01cXG5BcmNhZGlhL01cXG5BcmNhZGlhbi9NXFxuQXJjaGVhbi9NXFxuQXJjaGliYWxkL01cXG5BcmNoaWUvTVxcbkFyY2hpbWVkZXMvTVxcbkFyY3RpYy9NXFxuQXJjdHVydXMvTVxcbkFyZGFiaWxcXG5BcmRlbi9NXFxuQXJkdWluby9NXFxuQXJlY2liby9NXFxuQXJlcXVpcGEvTVxcbkFyZXMvTVxcbkFyZ2VudGluYS9NXFxuQXJnZW50aW5lL01cXG5BcmdlbnRpbmVhblxcbkFyZ2VudGluaWFuL01TXFxuQXJnby9TTVxcbkFyZ29uYXV0L01TXFxuQXJnb25uZS9NXFxuQXJnb3MvTVxcbkFyZ3VzL01cXG5BcmlhZG5lL01cXG5BcmlhbmlzbS9NXFxuQXJpZWwvTVxcbkFyaWVzL01TXFxuQXJpb3N0by9NXFxuQXJpc3RhcmNodXMvTVxcbkFyaXN0aWRlcy9NXFxuQXJpc3RvcGhhbmVzL01cXG5BcmlzdG90ZWxpYW4vTVxcbkFyaXN0b3RsZS9NXFxuQXJpdXMvTVxcbkFyaXpcXG5Bcml6b25hL01cXG5Bcml6b25hbi9TTVxcbkFyaXpvbmlhbi9NU1xcbkFyanVuYS9NXFxuQXJrL01cXG5BcmthbnNhbi9NU1xcbkFya2Fuc2FzL01cXG5BcmtoYW5nZWxzay9NXFxuQXJrd3JpZ2h0L01cXG5BcmxlbmUvTVxcbkFybGluZS9NXFxuQXJsaW5ndG9uL01cXG5Bcm1hZ2VkZG9uL1NNXFxuQXJtYWduYWMvTVxcbkFybWFuZC9NXFxuQXJtYW5kby9NXFxuQXJtYW5pL01cXG5Bcm1lbmlhL01cXG5Bcm1lbmlhbi9TTVxcbkFybWluaXVzL01cXG5Bcm1vbmsvTVxcbkFybW91ci9NXFxuQXJtc3Ryb25nL01cXG5Bcm5lYi9NXFxuQXJuaGVtL01cXG5Bcm5vL01cXG5Bcm5vbGQvTVxcbkFybnVsZm8vTVxcbkFyb24vTVxcbkFycmhlbml1cy9NXFxuQXJyb24vTVxcbkFydC9NXFxuQXJ0YXhlcnhlcy9NXFxuQXJ0ZW1pcy9NXFxuQXJ0aHVyL01cXG5BcnRodXJpYW4vTVxcbkFydGllL01cXG5BcnR1cm8vTVxcbkFydWJhL01cXG5Bcnlhbi9NU1xcbkFzL01cXG5Bc2FtYS9NXFxuQXNjZWxsYS9NXFxuQXNjZW5zaW9uL01cXG5Bc2dhcmQvTVxcbkFzaGFudGkvTVxcbkFzaGNyb2Z0L01cXG5Bc2hlL01cXG5Bc2hldmlsbGUvTVxcbkFzaGdhYmF0XFxuQXNoaWthZ2EvTVxcbkFzaGtlbmF6aW0vTVxcbkFzaGtoYWJhZC9NXFxuQXNobGVlL01cXG5Bc2hsZXkvTVxcbkFzaG1vbGVhbi9NXFxuQXNodXJiYW5pcGFsL01cXG5Bc2lhL01cXG5Bc2lhZ29cXG5Bc2lhbi9NU1xcbkFzaWF0aWMvU01cXG5Bc2ltb3YvTVxcbkFzbWFyYS9NXFxuQXNva2EvTVxcbkFzcGVsbC9NXFxuQXNwZW4vTVxcbkFzcGVyZ2VyL01cXG5Bc3BpZGlza2UvTVxcbkFzcXVpdGgvTVxcbkFzc2FkL01cXG5Bc3NhbS9NXFxuQXNzYW1lc2UvTVxcbkFzc2VtYmx5XFxuQXNzaXNpL01cXG5Bc3N5cmlhL01cXG5Bc3N5cmlhbi9TTVxcbkFzdGFpcmUvTVxcbkFzdGFuYS9NXFxuQXN0YXJ0ZS9NXFxuQXN0b24vTVxcbkFzdG9yL01cXG5Bc3RvcmlhL01cXG5Bc3RyYWtoYW4vTVxcbkFzdHJvVHVyZi9NXFxuQXN0dXJpYXMvTVxcbkFzdW5jaW9uL01cXG5Bc3dhbi9NXFxuQXQvU01cXG5BdGFjYW1hL01cXG5BdGFodWFscGEvTVxcbkF0YWxhbnRhL01cXG5BdGFyaS9NXFxuQXRhc2NhZGVyby9NXFxuQXRhdHVyay9NXFxuQXRoYWJhc2NhL01cXG5BdGhhYmFza2FuL1NNXFxuQXRoYW5hc2l1c1xcbkF0aGVuYS9NXFxuQXRoZW5lL01cXG5BdGhlbmlhbi9TTVxcbkF0aGVucy9NXFxuQXRraW5zL01cXG5BdGtpbnNvbi9NXFxuQXRsYW50YS9NXFxuQXRsYW50ZXNcXG5BdGxhbnRpYy9NXFxuQXRsYW50aXMvTVxcbkF0bGFzL01TXFxuQXRtYW4vTVxcbkF0b25lbWVudFxcbkF0cmV1cy9NXFxuQXRyaWEvTVxcbkF0cm9wb3MvTVxcbkF0dGljL01cXG5BdHRpY2EvTVxcbkF0dGlsYS9NXFxuQXR0bGVlL01cXG5BdHRuXFxuQXR0dWNrcy9NXFxuQXR3b29kL01cXG5BdS9NXFxuQXVicmV5L01cXG5BdWJ1cm4vTVxcbkF1Y2tsYW5kL01cXG5BdWRlbi9NXFxuQXVkaS9NXFxuQXVkaW9uL01cXG5BdWRyYS9NXFxuQXVkcmV5L01cXG5BdWR1Ym9uL01cXG5BdWcvTVxcbkF1Z2Vhbi9NXFxuQXVnc2J1cmcvTVxcbkF1Z3VzdC9NU1xcbkF1Z3VzdGEvTVxcbkF1Z3VzdGFuL01cXG5BdWd1c3RpbmUvTVxcbkF1Z3VzdGluaWFuL01TXFxuQXVndXN0dXMvTVxcbkF1cmFuZ3plYi9NXFxuQXVyZWxpYS9NXFxuQXVyZWxpby9NXFxuQXVyZWxpdXMvTVxcbkF1cmVvbXljaW4vTVxcbkF1cmlnYS9NXFxuQXVyb3JhL01cXG5BdXNjaHdpdHovTVxcbkF1c3NpZS9NU1xcbkF1c3Rlbi9NXFxuQXVzdGVybGl0ei9NXFxuQXVzdGluL01TXFxuQXVzdHJhbGFzaWEvTVxcbkF1c3RyYWxhc2lhblxcbkF1c3RyYWxpYS9NXFxuQXVzdHJhbGlhbi9TTVxcbkF1c3RyYWxvaWQvTVxcbkF1c3RyYWxvcGl0aGVjdXMvTVxcbkF1c3RyaWEvTVxcbkF1c3RyaWFuL1NNXFxuQXVzdHJvbmVzaWFuL01cXG5BdXR1bW4vTVxcbkF2L01cXG5BdmEvTVxcbkF2YWxvbi9NXFxuQXZlL01cXG5BdmVudGluZS9NXFxuQXZlcm51cy9NXFxuQXZlcnJvZXMvTVxcbkF2ZXJ5L01cXG5BdmVzdGEvTVxcbkF2aWNlbm5hL01cXG5Bdmlnbm9uL01cXG5BdmlsYS9NXFxuQXZpb3IvTVxcbkF2aXMvTVxcbkF2b2dhZHJvL01cXG5Bdm9uL01cXG5Bdm9uZGFsZS9NXFxuQXhpc1xcbkF4dW0vTVxcbkF5YWxhL01cXG5BeWVycy9NXFxuQXltYXJhL01cXG5BeXJzaGlyZS9NXFxuQXl1cnZlZGEvTVxcbkF5eXViaWQvTVxcbkF6YW5hL01cXG5BemFuaWEvTVxcbkF6YXplbC9NXFxuQXplcmJhaWphbi9NXFxuQXplcmJhaWphbmkvTVNcXG5Bem9yZXMvTVxcbkF6b3YvTVxcbkF6dGVjL1NNXFxuQXp0ZWNhbi9NXFxuQXp0bGFuL01cXG5CL01OVFxcbkJBL01cXG5CQVNJQy9TTVxcbkJCL01cXG5CQkIvTVxcbkJCQy9NXFxuQkJRXFxuQkJTXFxuQkJTZXNcXG5CQy9NXFxuQkZGXFxuQklBXFxuQklPU1xcbkJJVE5FVFxcbkJMVC9TTVxcbkJNL01cXG5CTVcvTVxcbkJPXFxuQlAvTVxcbkJQT0VcXG5CUlxcbkJTL01cXG5CU0FcXG5CU0QvU01cXG5CVFVcXG5CVFdcXG5CWU9CXFxuQmEvTVxcbkJhYWwvU01cXG5CYWF0aC9NXFxuQmFhdGhpc3QvTVxcbkJhYmJhZ2UvTVxcbkJhYmJpdHQvTVxcbkJhYmVsL01TXFxuQmFieWxvbi9NU1xcbkJhYnlsb25pYS9NXFxuQmFieWxvbmlhbi9TTVxcbkJhY2FsbC9NXFxuQmFjYXJkaS9NXFxuQmFjY2hhbmFsaWEvTVxcbkJhY2NoaWNcXG5CYWNjaHVzL01cXG5CYWNoL01cXG5CYWNrdXMvTVxcbkJhY29uL01cXG5CYWN0cmlhL01cXG5CYWRlbi9NXFxuQmFkbGFuZHMvTVxcbkJhZWRla2VyL01TXFxuQmFlei9NXFxuQmFmZmluL01cXG5CYWdnaWVzL01cXG5CYWdoZGFkL01cXG5CYWd1aW8vTVxcbkJhaGEnaS9NXFxuQmFoYSd1bGxhaC9NXFxuQmFoYW1hL1NNXFxuQmFoYW1hbmlhblxcbkJhaGFtYXMvTVxcbkJhaGFtaWFuL01TXFxuQmFoaWEvTVxcbkJhaHJhaW4vTVxcbkJhaWR1L01cXG5CYWlrYWwvTVxcbkJhaWxleS9NXFxuQmFpcmQvTVxcbkJha2VsaXRlL01cXG5CYWtlci9NXFxuQmFrZXJzZmllbGQvTVxcbkJha3UvTVxcbkJha3VuaW4vTVxcbkJhbGFuY2hpbmUvTVxcbkJhbGF0b24vTVxcbkJhbGJvYS9NXFxuQmFsZGVyL01cXG5CYWxkd2luL1NNXFxuQmFsZWFyaWMvTVxcbkJhbGZvdXIvTVxcbkJhbGkvTVxcbkJhbGluZXNlL01cXG5CYWxrYW4vTVNcXG5CYWxrYW5zL01cXG5CYWxraGFzaC9NXFxuQmFsbC9NXFxuQmFsbGFyZC9NXFxuQmFsdGhhemFyL01cXG5CYWx0aWMvTVxcbkJhbHRpbW9yZS9NXFxuQmFsdWNoaXN0YW4vTVxcbkJhbHphYy9NXFxuQmFtYWtvL01cXG5CYW1iaS9NXFxuQmFuYWNoL01cXG5CYW5jcm9mdC9NXFxuQmFuZHVuZy9NXFxuQmFuZ2Fsb3JlL01cXG5CYW5na29rL01cXG5CYW5nbGFkZXNoL01cXG5CYW5nbGFkZXNoaS9TTVxcbkJhbmdvci9NXFxuQmFuZ3VpL01cXG5CYW5qYXJtYXNpbi9NXFxuQmFuanVsL01cXG5CYW5rcy9NXFxuQmFubmVrZXIvTVxcbkJhbm5pc3Rlci9NXFxuQmFudGluZy9NXFxuQmFudHUvTVNcXG5CYW90b3UvTVxcbkJhcHRpc3QvU01cXG5CYXB0aXN0ZS9NXFxuQmFyYWJiYXMvTVxcbkJhcmFjay9NXFxuQmFyYmFkaWFuL1NNXFxuQmFyYmFkb3MvTVxcbkJhcmJhcmEvTVxcbkJhcmJhcmVsbGEvTVxcbkJhcmJhcm9zc2EvTVxcbkJhcmJhcnkvTVxcbkJhcmJlci9NXFxuQmFyYmllL01cXG5CYXJib3VyL01cXG5CYXJicmEvTVxcbkJhcmJ1ZGEvTVxcbkJhcmNlbG9uYS9NXFxuQmFyY2Vsb25ldGEvTVxcbkJhcmNsYXkvU01cXG5CYXJjbGF5cy9NXFxuQmFyZGVlbi9NXFxuQmFyZW50cy9NXFxuQmFya2VyL01cXG5CYXJrbGV5L01cXG5CYXJsb3cvTVxcbkJhcm5hYmFzL01cXG5CYXJuYWJ5L01cXG5CYXJuYXJkL01cXG5CYXJuYXVsL01cXG5CYXJuZXMvTVxcbkJhcm5ldHQvTVxcbkJhcm5leS9NXFxuQmFybnVtL01cXG5CYXJvZGEvTVxcbkJhcnF1aXNpbWV0by9NXFxuQmFyci9NXFxuQmFycmFucXVpbGxhL01cXG5CYXJyZXJhL01cXG5CYXJyZXR0L01cXG5CYXJyaWUvTVxcbkJhcnJvbi9NXFxuQmFycnkvTVxcbkJhcnJ5bW9yZS9NXFxuQmFydC9NXFxuQmFydGgvTVNcXG5CYXJ0aG9sZGkvTVxcbkJhcnRob2xvbWV3L01cXG5CYXJ0bGV0dC9NXFxuQmFydG9rL01cXG5CYXJ0b24vTVxcbkJhcnVjaC9NXFxuQmFyeXNobmlrb3YvTVxcbkJhc2VsL01cXG5CYXNoby9NXFxuQmFzaWUvTVxcbkJhc2lsL01cXG5CYXNxdWUvTVNcXG5CYXNyYS9NXFxuQmFzcy9NXFxuQmFzc2V0ZXJyZS9NXFxuQmFzdGlsbGUvTVxcbkJhc3V0b2xhbmQvTVxcbkJhdGFhbi9NXFxuQmF0ZXMvTVxcbkJhdGhzaGViYS9NXFxuQmF0aXN0YS9NXFxuQmF0bWFuL01cXG5CYXR0bGUvTVxcbkJhdHUvTVxcbkJhdWRlbGFpcmUvTVxcbkJhdWRvdWluL01cXG5CYXVkcmlsbGFyZC9NXFxuQmF1ZXIvTVxcbkJhdWhhdXMvTVxcbkJhdW0vTVxcbkJhdmFyaWEvTVxcbkJhdmFyaWFuL01cXG5CYXh0ZXIvTVxcbkJheWFtb25cXG5CYXllci9NXFxuQmF5ZXMvTVxcbkJheWVzaWFuL01cXG5CYXlldXgvTVxcbkJheWxvci9NXFxuQmF5b25uZS9NXFxuQmF5cmV1dGgvTVxcbkJheXdhdGNoL01cXG5CZS9NSFxcbkJlYWNoL01cXG5CZWFkbGUvTVxcbkJlYW4vTVxcbkJlYXJkL01cXG5CZWFyZG1vcmUvTVxcbkJlYXJkc2xleS9NXFxuQmVhcm5haXNlL01cXG5CZWFzbGV5L01cXG5CZWF0bGVtYW5pYS9NXFxuQmVhdGxlcy9NXFxuQmVhdHJpY2UvTVxcbkJlYXRyaXgvTVxcbkJlYXRyaXovTVxcbkJlYXR0eS9NXFxuQmVhdS9NXFxuQmVhdWZvcnQvTVxcbkJlYXVqb2xhaXMvTVxcbkJlYXVtYXJjaGFpcy9NXFxuQmVhdW1vbnQvTVxcbkJlYXVyZWdhcmQvTVxcbkJlYXV2b2lyL01cXG5CZWNodGVsL01cXG5CZWNrL01SXFxuQmVja2VyL01cXG5CZWNrZXQvTVxcbkJlY2tldHQvTVxcbkJlY2tsZXkvTVxcbkJlY2ttYW5cXG5CZWNreS9NXFxuQmVjcXVlcmVsL01cXG5CZWRlL01cXG5CZWRvdWluL1NNXFxuQmVlYmUvTVxcbkJlZWNoZXIvTVxcbkJlZWZhcm9uaS9NXFxuQmVlbHplYnViL01cXG5CZWVyYm9obS9NXFxuQmVldGhvdmVuL01cXG5CZWV0b24vTVxcbkJlZ2luL01cXG5CZWhhbi9NXFxuQmVocmluZy9NXFxuQmVpZGVyYmVja2UvTVxcbkJlaWppbmcvTVxcbkJlaXJ1dC9NXFxuQmVrZXN5L01cXG5CZWxhL01cXG5CZWxhcnVzL01cXG5CZWxhcnVzaWFuXFxuQmVsYXUvTVxcbkJlbGVtL01cXG5CZWxmYXN0L01cXG5CZWxnXFxuQmVsZ2lhbi9TTVxcbkJlbGdpdW0vTVxcbkJlbGdyYWRlL01cXG5CZWxpbmRhL01cXG5CZWxpemUvTVxcbkJlbGwvTVxcbkJlbGxhL01cXG5CZWxsYW15L01cXG5CZWxsYXRyaXgvTVxcbkJlbGxlZWsvTVxcbkJlbGxpbmdoYW0vTVxcbkJlbGxpbmkvTVxcbkJlbGxvdy9NXFxuQmVsbW9udC9NXFxuQmVsbW9wYW4vTVxcbkJlbG9pdC9NXFxuQmVsb3J1c3NpYW4vTVNcXG5CZWxzaGF6emFyL01cXG5CZWx0YW5lL01cXG5CZWx1c2hpL01cXG5CZW4vTVxcbkJlbmFjZXJyYWYvTVxcbkJlbmNobGV5L01cXG5CZW5kL01SXFxuQmVuZGVyL01cXG5CZW5kaWN0dXNcXG5CZW5kaXgvTVxcbkJlbmVkaWN0L01cXG5CZW5lZGljdGluZS9NU1xcbkJlbmVsdXgvTVxcbkJlbmV0L01cXG5CZW5ldHRvbi9NXFxuQmVuZ2FsL1NNXFxuQmVuZ2FsaS9NXFxuQmVuZ2hhemkvTVxcbkJlbmluL01cXG5CZW5pbmVzZS9NXFxuQmVuaXRhL01cXG5CZW5pdG8vTVxcbkJlbmphbWluL01cXG5CZW5uZXR0L01cXG5CZW5uaWUvTVxcbkJlbm55L01cXG5CZW5zb24vTVxcbkJlbnRoYW0vTVxcbkJlbnRsZXkvTVxcbkJlbnRvbi9NXFxuQmVuei9NXFxuQmVuemVkcmluZS9NXFxuQmVvd3VsZi9NXFxuQmVyYmVyL1NNXFxuQmVyZW5pY2UvTVxcbkJlcmV0dGEvTVxcbkJlcmcvTU5SXFxuQmVyZ2VuL01cXG5CZXJnZXIvTVxcbkJlcmdlcmFjL01cXG5CZXJnbWFuL01cXG5CZXJnc29uL01cXG5CZXJpYS9NXFxuQmVyaW5nL01cXG5CZXJrZWxleS9NXFxuQmVya3NoaXJlL1NNXFxuQmVya3NoaXJlcy9NXFxuQmVybGUvTVxcbkJlcmxpbi9TWk1SXFxuQmVybGluZXIvTVxcbkJlcmxpb3ovTVxcbkJlcmxpdHovTVxcbkJlcm11ZGEvU01cXG5CZXJtdWRhbi9TTVxcbkJlcm11ZGlhbi9TTVxcbkJlcm4vTVxcbkJlcm5hZGV0dGUvTVxcbkJlcm5hZGluZS9NXFxuQmVybmFua2UvTVxcbkJlcm5hcmQvTVxcbkJlcm5hcmRvL01cXG5CZXJuYXlzL01cXG5CZXJuYmFjaC9NXFxuQmVybmVzZVxcbkJlcm5oYXJkdC9NXFxuQmVybmljZS9NXFxuQmVybmllL01cXG5CZXJuaW5pL01cXG5CZXJub3VsbGkvTVxcbkJlcm5zdGVpbi9NXFxuQmVycmEvTVxcbkJlcnJ5L01cXG5CZXJ0L01cXG5CZXJ0YS9NXFxuQmVydGVsc21hbm4vTVxcbkJlcnRoYS9NXFxuQmVydGllL01cXG5CZXJ0aWxsb24vTVxcbkJlcnRyYW0vTVxcbkJlcnRyYW5kL01cXG5CZXJ3aWNrL01cXG5CZXJ5bC9NXFxuQmVyemVsaXVzL01cXG5CZXNzL01cXG5CZXNzZWwvTVxcbkJlc3NlbWVyL01cXG5CZXNzaWUvTVxcbkJlc3QvTVxcbkJldGVsZ2V1c2UvTVxcbkJldGgvTVxcbkJldGhhbnkvTVxcbkJldGhlL01cXG5CZXRoZXNkYS9NXFxuQmV0aGxlaGVtL01cXG5CZXRodW5lL01cXG5CZXRzeS9NXFxuQmV0dGUvTVxcbkJldHRpZS9NXFxuQmV0dHkvTVxcbkJldHR5ZS9NXFxuQmV1bGFoL01cXG5CZXZlcmlkZ2VcXG5CZXZlcmxleS9NXFxuQmV2ZXJseS9NXFxuQmV5ZXIvTVxcbkJoYXJhdC9NXFxuQmhvcGFsL01cXG5CaHV0YW4vTVxcbkJodXRhbmVzZS9NXFxuQmh1dHRvL01cXG5CaS9NXFxuQmlhbHlzdG9rL01cXG5CaWFuY2EvTVxcbkJpYlxcbkJpYmxlL01TXFxuQmljL01cXG5CaWRkbGUvTVxcbkJpZGVuL01cXG5CaWVyY2UvTVxcbkJpZ1F1ZXJ5L01cXG5CaWdmb290L01cXG5CaWdnbGVzL01cXG5CaWtvL01cXG5CaWxiYW8vTVxcbkJpbGJvL01cXG5CaWxsL01KXFxuQmlsbGllL01cXG5CaWxsaW5ncy9NXFxuQmlsbHkvTVxcbkJpbWluaS9NXFxuQmluZ2hhbXRvbi9NXFxuQmlvZ2VuL01cXG5CaW9rby9NXFxuQmlyZC9NXFxuQmlyZHNleWUvTVxcbkJpcmtlbnN0b2NrL01cXG5CaXJtaW5naGFtL01cXG5CaXJvL01cXG5CaXNjYXkvTVxcbkJpc2NheW5lL01cXG5CaXNoa2VrL01cXG5CaXNob3AvTVxcbkJpc21hcmNrL01cXG5CaXNtYXJrL01cXG5CaXNxdWljay9NXFxuQmlzc2F1L01cXG5CaXRUb3JyZW50L01cXG5CaXpldC9NXFxuQmplcmtuZXMvTVxcbkJqb3JrL01cXG5Cay9NXFxuQmxhY2tCZXJyeS9NXFxuQmxhY2tiZWFyZC9NXFxuQmxhY2tidXJuL01cXG5CbGFja2ZlZXQvTVxcbkJsYWNrZm9vdC9NXFxuQmxhY2twb29sL01cXG5CbGFja3NidXJnL01cXG5CbGFja3NoaXJ0L01cXG5CbGFja3N0b25lL01cXG5CbGFja3dlbGwvTVxcbkJsYWluZS9NXFxuQmxhaXIvTVxcbkJsYWtlL01cXG5CbGFuY2EvTVxcbkJsYW5jaGFyZC9NXFxuQmxhbmNoZS9NXFxuQmxhbmtlbnNoaXAvTVxcbkJsYW50eXJlL01cXG5CbGF0ei9NXFxuQmxhdmF0c2t5L01cXG5CbGVuaGVpbS9NXFxuQmxldmlucy9NXFxuQmxpZ2gvTVxcbkJsb2NoL01cXG5CbG9ja2J1c3Rlci9NXFxuQmxvZW1mb250ZWluL01cXG5CbG9uZGVsL01cXG5CbG9uZGllL01cXG5CbG9vbS9NUlxcbkJsb29tZXIvTVxcbkJsb29tZmllbGQvTVxcbkJsb29taW5nZGFsZS9NXFxuQmxvb21pbmd0b24vTVxcbkJsb29tc2J1cmcvTVxcbkJsb29tc2J1cnkvTVxcbkJsdVxcbkJsdWNoZXIvTVxcbkJsdWViZWFyZC9NXFxuQmx1ZXRvb3RoL01cXG5CbHZkXFxuQmx5dGhlL01cXG5Cb2FkaWNlYVxcbkJvYXMvTVxcbkJvYi9NXFxuQm9iYmkvTVxcbkJvYmJpZS9NXFxuQm9iYml0dC9NXFxuQm9iYnkvTVxcbkJvY2NhY2Npby9NXFxuQm9kaGlkaGFybWEvTVxcbkJvZGhpc2F0dHZhL01cXG5Cb2RsZWlhblxcbkJvZWluZy9NXFxuQm9lb3RpYS9NXFxuQm9lb3RpYW4vTVxcbkJvZXIvU01cXG5Cb2V0aGl1cy9NXFxuQm9nYXJ0L01cXG5Cb2dvdGEvTVxcbkJvaGVtaWEvTVxcbkJvaGVtaWFuL1NNXFxuQm9oci9NXFxuQm9pc2UvTVxcbkJvamFuZ2xlcy9NXFxuQm9sZXluL01cXG5Cb2xpdmFyL01cXG5Cb2xpdmlhL01cXG5Cb2xpdmlhbi9NU1xcbkJvbGx5d29vZC9NXFxuQm9sb2duYS9NXFxuQm9sc2hldmlrL1NNXFxuQm9sc2hldmlraVxcbkJvbHNoZXZpc20vTVxcbkJvbHNoZXZpc3QvTVxcbkJvbHNob2kvTVxcbkJvbHRvbi9NXFxuQm9sdHptYW5uL01cXG5Cb21iYXkvTVxcbkJvbmFwYXJ0ZS9NXFxuQm9uYXZlbnR1cmUvTVxcbkJvbmQvTVxcbkJvbmhvZWZmZXIvTVxcbkJvbmlmYWNlL01cXG5Cb25pdGEvTVxcbkJvbm4vTVJcXG5Cb25uZXIvTVxcbkJvbm5ldmlsbGUvTVxcbkJvbm5pZS9NXFxuQm9uby9NXFxuQm9va2VyL01cXG5Cb29sZS9NXFxuQm9vbGVhbi9NXFxuQm9vbmUvTVxcbkJvb3Rlcy9NXFxuQm9vdGgvTVxcbkJvcmRlYXV4L01cXG5Cb3JkZW4vTVxcbkJvcmRvbi9NXFxuQm9yZWFzL01cXG5Cb3JnL1NNXFxuQm9yZ2VzL01cXG5Cb3JnaWEvTVxcbkJvcmdsdW0vTVxcbkJvcmlzL01cXG5Cb3JrL01cXG5Cb3JsYXVnL01cXG5Cb3JuL01cXG5Cb3JuZW8vTVxcbkJvcm9idWR1ci9NXFxuQm9yb2Rpbi9NXFxuQm9ydS9NXFxuQm9zY2gvTVxcbkJvc2UvTVxcbkJvc25pYS9NXFxuQm9zbmlhblxcbkJvc3BvcnVzL01cXG5Cb3N0b24vTVNcXG5Cb3N0b25pYW4vTVxcbkJvc3dlbGwvTVxcbkJvdGhhXFxuQm90b3hcXG5Cb3Rzd2FuYS9NXFxuQm90dGljZWxsaS9NXFxuQm91bGRlci9NXFxuQm91bGV6L01cXG5Cb3VyYmFraS9NXFxuQm91cmJvbi9TTVxcbkJvdXJuZW1vdXRoL01cXG5Cb3ZhcnkvTVxcbkJvd2RpdGNoL01cXG5Cb3dlbGwvTVxcbkJvd2VuL01cXG5Cb3dlcnMvTVxcbkJvd2VyeS9NXFxuQm93aWUvTVxcbkJvd21hbi9NXFxuQm95ZC9NXFxuQm95ZXIvTVxcbkJveWxlL01cXG5Cci9NVFxcbkJyYWQvTVlcXG5CcmFkYnVyeS9NXFxuQnJhZGRvY2svTVxcbkJyYWRlbnRvbi9NXFxuQnJhZGZvcmQvTVxcbkJyYWRsZXkvTVxcbkJyYWRseS9NXFxuQnJhZHNoYXcvTVxcbkJyYWRzdHJlZXQvTVxcbkJyYWR5L01cXG5CcmFnZy9NXFxuQnJhaGUvTVxcbkJyYWhtYS9NU1xcbkJyYWhtYWd1cHRhL01cXG5CcmFobWFuL01TXFxuQnJhaG1hbmlcXG5CcmFobWFuaXNtL1NNXFxuQnJhaG1hcHV0cmEvTVxcbkJyYWhtcy9NXFxuQnJhaWxsZS9NU1xcbkJyYWluL01cXG5CcmFtcHRvbi9NXFxuQnJhbi9NXFxuQnJhbmNoL01cXG5CcmFuZGVpcy9NXFxuQnJhbmRlbi9NXFxuQnJhbmRlbmJ1cmcvTVxcbkJyYW5kaS9NXFxuQnJhbmRpZS9NXFxuQnJhbmRvL01cXG5CcmFuZG9uL01cXG5CcmFuZHQvTVxcbkJyYW5keS9NXFxuQnJhbnQvTVxcbkJyYXF1ZS9NXFxuQnJhc2lsaWEvTVxcbkJyYXRpc2xhdmEvTVxcbkJyYXR0YWluL01cXG5CcmF5L01cXG5CcmF6aWwvTVxcbkJyYXppbGlhbi9NU1xcbkJyYXpvcy9NXFxuQnJhenphdmlsbGUvTVxcbkJyZWFrc3BlYXIvTVxcbkJyZWF0aGFseXplclxcbkJyZWNodC9NXFxuQnJlY2tlbnJpZGdlL01cXG5CcmVtZW4vTVxcbkJyZW1lcnRvbi9NXFxuQnJlbmRhL01cXG5CcmVuZGFuL01cXG5CcmVubmFuL01cXG5CcmVubmVyL01cXG5CcmVudC9NXFxuQnJlbnRvbi9NXFxuQnJlc3QvTVxcbkJyZXQvTVxcbkJyZXRvbi9NXFxuQnJldHQvTVxcbkJyZXdlci9NXFxuQnJld3N0ZXIvTVxcbkJyZXhpdFxcbkJyZXpobmV2L01cXG5Ccmlhbi9NXFxuQnJpYW5hL01cXG5Ccmlhbm5hL01cXG5CcmljZS9NXFxuQnJpZGFsdmVpbC9NXFxuQnJpZGdlcG9ydC9NXFxuQnJpZGdlci9NXFxuQnJpZGdlcy9NXFxuQnJpZGdldC9NXFxuQnJpZGdldG93bi9NXFxuQnJpZGdldHQvTVxcbkJyaWRnZXR0ZS9NXFxuQnJpZGdtYW4vTVxcbkJyaWUvU01cXG5CcmlnYWRvb24vTVxcbkJyaWdncy9NXFxuQnJpZ2hhbS9NXFxuQnJpZ2h0L01cXG5CcmlnaHRvbi9NXFxuQnJpZ2lkL01cXG5CcmlnaXR0ZS9NXFxuQnJpbGxvL01cXG5CcmlsbG91aW5cXG5Ccmlua2xleS9NXFxuQnJpc2JhbmUvTVxcbkJyaXN0b2wvTVxcbkJyaXQvU01cXG5Ccml0YWluL01cXG5Ccml0YW5uaWEvTVxcbkJyaXRhbm5pYy9NXFxuQnJpdGFubmljYS9NXFxuQnJpdGljaXNtL1NNXFxuQnJpdGlzaC9NUlpcXG5Ccml0aXNoZXIvTVxcbkJyaXRuZXkvTVxcbkJyaXRvbi9NU1xcbkJyaXR0L01OXFxuQnJpdHRhbnkvU01cXG5Ccml0dGVuL01cXG5Ccml0dG5leS9NXFxuQnJuby9NXFxuQnJvYWR3YXkvU01cXG5Ccm9iZGluZ25hZy9NXFxuQnJvYmRpbmduYWdpYW4vTVxcbkJyb2NrL01cXG5Ccm9rYXcvTVxcbkJyb25zb24vTVxcbkJyb250ZS9NXFxuQnJvbnRvc2F1cnVzXFxuQnJvbngvTVxcbkJyb29rZS9NU1xcbkJyb29rbHluL01cXG5Ccm9va3MvTVxcbkJyb3NcXG5Ccm93bi9NR1xcbkJyb3duZS9NXFxuQnJvd25pYW4vTVxcbkJyb3duaWUvU1xcbkJyb3duaW5nL01cXG5Ccm93bnNoaXJ0L01cXG5Ccm93bnN2aWxsZS9NXFxuQnJ1YmVjay9NXFxuQnJ1Y2UvTVxcbkJydWNrbmVyL01cXG5CcnVlZ2VsXFxuQnJ1bW1lbC9NXFxuQnJ1bmVpL01cXG5CcnVuZWlhbi9NU1xcbkJydW5lbGxlc2NoaS9NXFxuQnJ1bmhpbGRlL01cXG5CcnVuby9NXFxuQnJ1bnN3aWNrL01cXG5CcnVzc2Vscy9NXFxuQnJ1dC9NXFxuQnJ1dHVzL01cXG5Ccnlhbi9NXFxuQnJ5YW50L01cXG5CcnljZS9NXFxuQnJ5bm5lci9NXFxuQnJ5b24vTVxcbkJyemV6aW5za2kvTVxcbkJ0dS9NXFxuQnViZXIvTVxcbkJ1Y2hhbmFuL01cXG5CdWNoYXJlc3QvTVxcbkJ1Y2hlbndhbGQvTVxcbkJ1Y2h3YWxkL01cXG5CdWNrL01cXG5CdWNraW5naGFtL01cXG5CdWNrbGV5L01cXG5CdWNrbmVyL01cXG5CdWQvTVxcbkJ1ZGFwZXN0L01cXG5CdWRkaGEvU01cXG5CdWRkaGlzbS9TTVxcbkJ1ZGRoaXN0L1NNXFxuQnVkZHkvTVxcbkJ1ZHdlaXNlci9NXFxuQnVmZmFsby9NXFxuQnVmZnkvTVxcbkJ1Zm9yZC9NXFxuQnVnYXR0aS9NXFxuQnVnemlsbGEvTVxcbkJ1aWNrL01cXG5CdWp1bWJ1cmEvTVxcbkJ1a2hhcmEvTVxcbkJ1a2hhcmluL01cXG5CdWxhd2F5by9NXFxuQnVsZmluY2gvTVxcbkJ1bGdhbmluL01cXG5CdWxnYXIvTVxcbkJ1bGdhcmkvTVxcbkJ1bGdhcmlhL01cXG5CdWxnYXJpYW4vU01cXG5CdWxsb2NrL01cXG5CdWxsd2lua2xlL01cXG5CdWx0bWFubi9NXFxuQnVtcHBvL01cXG5CdW5jaGUvTVxcbkJ1bmRlc2JhbmsvTVxcbkJ1bmRlc3RhZy9NXFxuQnVuaW4vTVxcbkJ1bmtlci9NXFxuQnVuc2VuL01cXG5CdW51ZWwvTVxcbkJ1bnlhbi9NXFxuQnVyYmFuay9NXFxuQnVyYmVycnkvTVxcbkJ1cmNoL01cXG5CdXJnZXIvTVxcbkJ1cmdlc3MvTVxcbkJ1cmdveW5lL01cXG5CdXJndW5kaWFuL01cXG5CdXJndW5keS9TTVxcbkJ1cmtlL01cXG5CdXJrcy9NXFxuQnVybC9NXFxuQnVybGluZ3Rvbi9NXFxuQnVybWEvTVxcbkJ1cm1lc2UvTVxcbkJ1cm5ldHQvTVxcbkJ1cm5zL01cXG5CdXJuc2lkZS9NXFxuQnVyci9NXFxuQnVycmlzL01cXG5CdXJyb3VnaHMvTVxcbkJ1cnNhL01cXG5CdXJ0L01cXG5CdXJ0b24vTVxcbkJ1cnVuZGkvTVxcbkJ1cnVuZGlhbi9NU1xcbkJ1c2NoL01cXG5CdXNoL01cXG5CdXNoaWRvL01cXG5CdXNobmVsbC9NXFxuQnV0bGVyL01cXG5CdXR0ZXJmaW5nZXJzL01cXG5CdXh0ZWh1ZGUvTVxcbkJ5Ymxvcy9NXFxuQnllcnMvTVxcbkJ5cmQvTVxcbkJ5cm9uL01cXG5CeXJvbmljL01cXG5CeXphbnRpbmUvTVNcXG5CeXphbnRpdW0vTVxcbkMvU01cXG5DQVxcbkNBRC9NXFxuQ0FJXFxuQ0FNXFxuQ0FQXFxuQ0FSRVxcbkNBVFZcXG5DQlxcbkNCQy9NXFxuQ0JTL01cXG5DQ1RWXFxuQ0NVXFxuQ0QvU01cXG5DRENcXG5DRFRcXG5DRU8vTVxcbkNGXFxuQ0ZDL01cXG5DRk9cXG5DR0lcXG5DSUEvTVxcbkNJRFxcbkNOTi9NXFxuQ05TL01cXG5DTy9NXFxuQ09CT0wvU01cXG5DT0RcXG5DT0xcXG5DT0xBXFxuQ09WSURcXG5DUEEvTVxcbkNQSS9NXFxuQ1BPXFxuQ1BSL01cXG5DUFUvTVxcbkNSVC9TTVxcbkNTUy9NXFxuQ1NUL01cXG5DVC9NXFxuQ1ZcXG5DVlMvTVxcbkNaXFxuQ2EvTVxcbkNhYmVybmV0L01cXG5DYWJvdC9NXFxuQ2FicmFsL01cXG5DYWJyZXJhL01cXG5DYWJyaW5pL01cXG5DYWRldHRlXFxuQ2FkaWxsYWMvTVxcbkNhZGl6L01cXG5DYWVkbW9uL01cXG5DYWVycGhpbGx5L01cXG5DYWVzYXIvU01cXG5DYWdlL01cXG5DYWduZXkvTVxcbkNhaG9raWEvTVxcbkNhaWFwaGFzL01cXG5DYWluL1NNXFxuQ2Fpcm8vTVxcbkNhaXRsaW4vTVxcbkNhanVuL01TXFxuQ2FsL01cXG5DYWxhaXMvTVxcbkNhbGN1dHRhL01cXG5DYWxkZXIvTVxcbkNhbGRlcm9uL01cXG5DYWxkd2VsbC9NXFxuQ2FsZWIvTVxcbkNhbGVkb25pYS9NXFxuQ2FsZXhpY28vTVxcbkNhbGdhcnkvTVxcbkNhbGhvdW4vTVxcbkNhbGkvTVxcbkNhbGliYW4vTVxcbkNhbGlmXFxuQ2FsaWZvcm5pYS9NXFxuQ2FsaWZvcm5pYW4vU01cXG5DYWxpZ3VsYS9NXFxuQ2FsbGFnaGFuL01cXG5DYWxsYWhhbi9NXFxuQ2FsbGFvL01cXG5DYWxsYXMvTVxcbkNhbGxpZS9NXFxuQ2FsbGlvcGUvTVxcbkNhbGxpc3RvL01cXG5DYWxvb2Nhbi9NXFxuQ2FsdmFyeS9NXFxuQ2FsdmVydC9NXFxuQ2FsdmluL01cXG5DYWx2aW5pc20vTVNcXG5DYWx2aW5pc3QvTVNcXG5DYWx2aW5pc3RpY1xcbkNhbWFjaG8vTVxcbkNhbWFyaWxsby9NXFxuQ2FtYm9kaWEvTVxcbkNhbWJvZGlhbi9TTVxcbkNhbWJyaWFuL1NNXFxuQ2FtYnJpZGdlL01cXG5DYW1kZW4vTVxcbkNhbWVsL01cXG5DYW1lbG9wYXJkYWxpcy9NXFxuQ2FtZWxvdC9NU1xcbkNhbWVtYmVydC9NU1xcbkNhbWVyb24vTVxcbkNhbWVyb29uL1NNXFxuQ2FtZXJvb25pYW4vTVNcXG5DYW1pbGxhL01cXG5DYW1pbGxlL01cXG5DYW1vZW5zL01cXG5DYW1wYW5lbGxhL01cXG5DYW1wYmVsbC9NXFxuQ2FtcGluYXMvTVxcbkNhbXBvcy9NXFxuQ2FtcnkvTVxcbkNhbXVzL01cXG5DYW4vTVxcbkNhbmFhbi9NXFxuQ2FuYWFuaXRlL01TXFxuQ2FuYWRcXG5DYW5hZGEvTVxcbkNhbmFkaWFuL1NNXFxuQ2FuYWRpYW5pc21cXG5DYW5hbGV0dG8vTVxcbkNhbmFyaWVzL01cXG5DYW5hdmVyYWwvTVxcbkNhbmJlcnJhL01cXG5DYW5jZXIvU01cXG5DYW5jdW4vTVxcbkNhbmRhY2UvTVxcbkNhbmRpY2UvTVxcbkNhbmRpZGUvTVxcbkNhbmR5L01cXG5DYW5uZXMvTVxcbkNhbm5vbi9NXFxuQ2Fub24vTVxcbkNhbm9wdXMvTVxcbkNhbnRhYnJpZ2lhbi9NXFxuQ2FudGVyYnVyeS9NXFxuQ2FudG9uL01cXG5DYW50b25lc2UvTVxcbkNhbnRvci9NXFxuQ2FudHJlbGwvTVxcbkNhbnR1L01cXG5DYW51dGUvTVxcbkNhcGFibGFuY2EvTVxcbkNhcGVrL01cXG5DYXBlbGxhL01cXG5DYXBldC9NXFxuQ2FwZXRpYW4vTVxcbkNhcGV0b3duL01cXG5DYXBoL01cXG5DYXBpc3RyYW5vL01cXG5DYXBpdG9sL1NNXFxuQ2FwaXRvbGluZS9NXFxuQ2Fwb25lL01cXG5DYXBvdGUvTVxcbkNhcHJhL01cXG5DYXByaS9NXFxuQ2Fwcmljb3JuL01TXFxuQ2FwdFxcbkNhcHVjaGluL01cXG5DYXB1bGV0L01cXG5DYXJhL01cXG5DYXJhY2FsbGEvTVxcbkNhcmFjYXMvTVxcbkNhcmF2YWdnaW8vTVxcbkNhcmJvbG95L01cXG5DYXJib25kYWxlL01cXG5DYXJib25pZmVyb3VzL01cXG5DYXJib3J1bmR1bS9NXFxuQ2FyZGVuYXMvTVxcbkNhcmRpZmYvTVxcbkNhcmRpbi9NXFxuQ2FyZG96by9NXFxuQ2FyZXkvTVxcbkNhcmliL01TXFxuQ2FyaWJiZWFuL01TXFxuQ2FyaW5hL01cXG5DYXJpc3NhL01cXG5DYXJsL01cXG5DYXJsYS9NXFxuQ2FybGVuZS9NXFxuQ2FybGluL01cXG5DYXJsby9NU1xcbkNhcmxvcy9NXFxuQ2FybHNiYWQvTVxcbkNhcmxzb24vTVxcbkNhcmx0b24vTVxcbkNhcmx5L01cXG5DYXJseWxlL01cXG5DYXJtZWxhL01cXG5DYXJtZWxsYS9NXFxuQ2FybWVsby9NXFxuQ2FybWVuL01cXG5DYXJtaWNoYWVsL01cXG5DYXJtaW5lL01cXG5DYXJuYXAvTVxcbkNhcm5hdGlvbi9NXFxuQ2FybmVnaWUvTVxcbkNhcm5leS9NXFxuQ2Fybm90L01cXG5DYXJvbC9NXFxuQ2Fyb2xlL01cXG5DYXJvbGluYS9NXFxuQ2Fyb2xpbmUvTVxcbkNhcm9saW5naWFuL01cXG5DYXJvbGluaWFuL01cXG5DYXJvbHluL01cXG5DYXJwYXRoaWFuL1NNXFxuQ2FycGF0aGlhbnMvTVxcbkNhcnBlbnRlci9NXFxuQ2Fyci9NXFxuQ2FycmFuemEvTVxcbkNhcnJpZS9STVxcbkNhcnJpZXIvTVxcbkNhcnJpbGxvL01cXG5DYXJyb2xsL01cXG5DYXJzb24vTVxcbkNhcnRlci9NXFxuQ2FydGVyc3ZpbGxlL01cXG5DYXJ0ZXNpYW4vTVxcbkNhcnRoYWdlL01cXG5DYXJ0aGFnaW5pYW4vTVNcXG5DYXJ0aWVyL01cXG5DYXJ0d3JpZ2h0L01cXG5DYXJ1c28vTVxcbkNhcnZlci9NXFxuQ2FyeS9NXFxuQ2FzYWJsYW5jYS9NXFxuQ2FzYWxzL01cXG5DYXNhbmRyYS9NXFxuQ2FzYW5vdmEvU01cXG5DYXNjYWRlcy9NXFxuQ2FzZS9NXFxuQ2FzZXkvTVxcbkNhc2gvTVxcbkNhc2lvL01cXG5DYXNwYXIvTVxcbkNhc3Blci9NXFxuQ2FzcGlhbi9NXFxuQ2Fzc2FuZHJhL1NNXFxuQ2Fzc2F0dC9NXFxuQ2Fzc2lkeS9NXFxuQ2Fzc2llL01cXG5DYXNzaW9wZWlhL01cXG5DYXNzaXVzL01cXG5DYXN0YW5lZGEvTVxcbkNhc3RpbGlhblxcbkNhc3RpbGxvL01cXG5DYXN0bGVyZWFnaC9NXFxuQ2FzdG9yL01cXG5DYXN0cmllcy9NXFxuQ2FzdHJvL01cXG5DYXRhbGFuL1NNXFxuQ2F0YWxpbmEvTVxcbkNhdGFsb25pYS9NXFxuQ2F0YXdiYS9NXFxuQ2F0ZXJwaWxsYXIvTVxcbkNhdGhheS9NXFxuQ2F0aGVyL01cXG5DYXRoZXJpbmUvTVxcbkNhdGhsZWVuL01cXG5DYXRob2xpYy9NU1xcbkNhdGhvbGljaXNtL01TXFxuQ2F0aHJ5bi9NXFxuQ2F0aHkvTVxcbkNhdGlsaW5lL01cXG5DYXRvL01cXG5DYXRza2lsbC9TTVxcbkNhdHNraWxscy9NXFxuQ2F0dC9NXFxuQ2F0dWxsdXMvTVxcbkNhdWNhc2lhbi9NU1xcbkNhdWNhc29pZFxcbkNhdWNhc3VzL01cXG5DYXVjaHkvTVxcbkNhdmVuZGlzaC9NXFxuQ2F2b3VyL01cXG5DYXh0b24vTVxcbkNheWVubmUvTVxcbkNheW1hbi9NXFxuQ2F5dWdhL1NNXFxuQ2F5dXNlXFxuQ2JcXG5DZC9NXFxuQ2UvTVxcbkNlYXVzZXNjdS9NXFxuQ2VidS9NXFxuQ2VidWFuby9NXFxuQ2VjZWxpYS9NXFxuQ2VjaWwvTVxcbkNlY2lsZS9NXFxuQ2VjaWxpYS9NXFxuQ2VjaWx5L01cXG5DZWRyaWMvTVxcbkNlbGVzdGUvTVxcbkNlbGdlbmUvTVxcbkNlbGlhL01cXG5DZWxpbmEvTVxcbkNlbGxpbmkvTVxcbkNlbHNpdXMvTVxcbkNlbHQvU01cXG5DZWx0aWMvU01cXG5DZW5vem9pYy9NXFxuQ2VudGF1cnVzL01cXG5DZW50aWdyYWRlXFxuQ2VudHJhbFxcbkNlcGhlaWQvTVxcbkNlcGhldXMvTVxcbkNlcmJlcnVzL01cXG5DZXJlbmtvdi9NXFxuQ2VyZXMvTVxcbkNlcmYvTVxcbkNlcnZhbnRlcy9NXFxuQ2VzYXIvTVxcbkNlc2FyZWFuL01cXG5DZXNzbmEvTVxcbkNldHVzL01cXG5DZXlsb24vTVxcbkNleWxvbmVzZVxcbkNlemFubmUvTVxcbkNmL01cXG5DaCdpbi9NXFxuQ2gvTlxcbkNoYWJsaXMvTVxcbkNoYWQvTVxcbkNoYWRpYW4vTVNcXG5DaGFkd2ljay9NXFxuQ2hhZ2FsbC9NXFxuQ2hhaXRhbnlhL01cXG5DaGFpdGluL01cXG5DaGFsZGVhXFxuQ2hhbGRlYW4vTVxcbkNoYWxsZW5nZXIvTVxcbkNoYWxtZXJzXFxuQ2hhbWJlcmxhaW4vTVxcbkNoYW1iZXJzL01cXG5DaGFtYmVyc2J1cmcvTVxcbkNoYW1wYWlnbi9NXFxuQ2hhbXBsYWluL01cXG5DaGFtcG9sbGlvbi9NXFxuQ2hhbi9NXFxuQ2hhbmNlL01cXG5DaGFuY2VsbG9yc3ZpbGxlL01cXG5DaGFuZGlnYXJoL01cXG5DaGFuZGxlci9NXFxuQ2hhbmRvbi9NXFxuQ2hhbmRyYS9NXFxuQ2hhbmRyYWd1cHRhL01cXG5DaGFuZHJhc2VraGFyL01cXG5DaGFuZWwvTVxcbkNoYW5leS9NXFxuQ2hhbmcvTVxcbkNoYW5nY2h1bi9NXFxuQ2hhbmdzaGEvTVxcbkNoYW50aWxseS9NXFxuQ2hhcGxpbi9NXFxuQ2hhcGxpbmVzcXVlXFxuQ2hhcG1hbi9NXFxuQ2hhcHBhcXVpZGRpY2svTVxcbkNoYXB1bHRlcGVjL01cXG5DaGFyYnJheS9NXFxuQ2hhcmRvbm5heS9NXFxuQ2hhcml0eS9NXFxuQ2hhcmxlbWFnbmUvTVxcbkNoYXJsZW5lL01cXG5DaGFybGVzL01cXG5DaGFybGVzdG9uL01TXFxuQ2hhcmxleS9NXFxuQ2hhcmxpZS9NXFxuQ2hhcmxvdHRlL01cXG5DaGFybG90dGVzdmlsbGUvTVxcbkNoYXJsb3R0ZXRvd24vTVxcbkNoYXJtYWluZS9NXFxuQ2hhcm1pbi9NXFxuQ2hhcm9sYWlzL01cXG5DaGFyb24vTVxcbkNoYXJ0aXNtL01cXG5DaGFydHJlcy9NXFxuQ2hhcnliZGlzL01cXG5DaGFzZS9NXFxuQ2hhc2l0eS9NXFxuQ2hhdGVhdWJyaWFuZC9NXFxuQ2hhdHRhaG9vY2hlZS9NXFxuQ2hhdHRhbm9vZ2EvTVxcbkNoYXR0ZXJsZXkvTVxcbkNoYXR0ZXJ0b24vTVxcbkNoYXVjZXIvTVxcbkNoYXVuY2V5L01cXG5DaGF1dGF1cXVhL01cXG5DaGF2ZXovTVxcbkNoYXllZnNreS9NXFxuQ2hlL01cXG5DaGVjaGVuL01cXG5DaGVjaG55YS9NXFxuQ2hlZGRhci9NXFxuQ2hlZXIvTVxcbkNoZWVyaW9zL01cXG5DaGVldG9zL01cXG5DaGVldmVyL01cXG5DaGVraG92L01cXG5DaGVraG92aWFuXFxuQ2hlbHNlYS9NXFxuQ2hlbHlhYmluc2svTVxcbkNoZW4vTVxcbkNoZW5leS9NXFxuQ2hlbmdkdS9NXFxuQ2hlbm5haS9NXFxuQ2hlb3BzL01cXG5DaGVyaS9NXFxuQ2hlcmllL01cXG5DaGVybmVua28vTVxcbkNoZXJub2J5bC9NXFxuQ2hlcm5vbXlyZGluL01cXG5DaGVyb2tlZS9NU1xcbkNoZXJyeS9NXFxuQ2hlcnlsL01cXG5DaGVzYXBlYWtlL01cXG5DaGVzaGlyZS9NXFxuQ2hlc3Rlci9NXFxuQ2hlc3RlcmZpZWxkL01cXG5DaGVzdGVydG9uL01cXG5DaGV2YWxpZXIvTVxcbkNoZXZpb3QvTVxcbkNoZXZyb2xldC9NXFxuQ2hldnJvbi9NXFxuQ2hldnkvTVxcbkNoZXllbm5lL1NNXFxuQ2hpL01cXG5DaGlhbnRpL01TXFxuQ2hpYmEvTVxcbkNoaWJjaGEvTVxcbkNoaWNhZ28vTVxcbkNoaWNhZ29hbi9NXFxuQ2hpY2FuYS9NXFxuQ2hpY2Fuby9NXFxuQ2hpY2thc2F3L01TXFxuQ2hpY2xldHMvTVxcbkNoaWNvL01cXG5DaGlodWFodWEvTVNcXG5DaGlsZS9NXFxuQ2hpbGVhbi9NU1xcbkNoaW1ib3Jhem8vTVxcbkNoaW1lcmEvTVNcXG5DaGltdS9NXFxuQ2hpbi9NXFxuQ2hpbmEvTVxcbkNoaW5hdG93bi9NXFxuQ2hpbmVzZS9NXFxuQ2hpbm9vay9NU1xcbkNoaXBld3lhbi9NXFxuQ2hpcHBlbmRhbGUvTVxcbkNoaXBwZXdhL1NNXFxuQ2hpcXVpdGEvTVxcbkNoaXJpY28vTVxcbkNoaXNob2xtL01cXG5DaGlzaW5hdS9NXFxuQ2hpdHRhZ29uZy9NXFxuQ2hpdmFzL01cXG5DaGxvZS9NXFxuQ2hvY3Rhdy9TTVxcbkNob21za3kvTVxcbkNob25ncWluZy9NXFxuQ2hvcGluL01cXG5DaG9wcmEvTVxcbkNob3UvTVxcbkNocmV0aWVuL01cXG5DaHJpcy9NXFxuQ2hyaXN0L01TXFxuQ2hyaXN0YS9NXFxuQ2hyaXN0Y2h1cmNoL01cXG5DaHJpc3RlbmRvbS9NU1xcbkNocmlzdGVuc2VuL01cXG5DaHJpc3RpL01cXG5DaHJpc3RpYW4vU01cXG5DaHJpc3RpYW5pdHkvU01cXG5DaHJpc3RpYW5pemVcXG5DaHJpc3RpZS9NXFxuQ2hyaXN0aW5hL01cXG5DaHJpc3RpbmUvTVxcbkNocmlzdGxpa2VcXG5DaHJpc3RtYXMvTVNcXG5DaHJpc3RtYXN0aWRlL01TXFxuQ2hyaXN0bWFzdGltZS9NU1xcbkNocmlzdG9wZXIvTVxcbkNocmlzdG9waGVyL01cXG5DaHJvbWVib29rL01TXFxuQ2hyb25pY2xlc1xcbkNocnlzbGVyL01cXG5DaHJ5c29zdG9tL01cXG5DaHJ5c3RhbC9NXFxuQ2h1Y2svTVxcbkNodWtjaGkvTVxcbkNodW1hc2gvTVxcbkNodW5nL01cXG5DaHVyY2gvTVxcbkNodXJjaGlsbC9NXFxuQ2h1cnJpZ3VlcmEvTVxcbkNodXZhc2gvTVxcbkNpL01cXG5DaWNlcm8vTVxcbkNpZC9NXFxuQ2ltYWJ1ZS9NXFxuQ2luY2lubmF0aS9NXFxuQ2luZGVyZWxsYS9NU1xcbkNpbmR5L01cXG5DaW5lbWFTY29wZS9NXFxuQ2luZXJhbWEvTVxcbkNpcHJvL01cXG5DaXJjZS9NXFxuQ2lzY28vTVxcbkNpdGliYW5rL01cXG5DaXRpZ3JvdXAvTVxcbkNpdHJvZW4vTVxcbkNsL01WXFxuQ2xhaWJvcm5lL01cXG5DbGFpci9NXFxuQ2xhaXJlL01cXG5DbGFpcm9sL01cXG5DbGFuY3kvTVxcbkNsYXBleXJvbi9NXFxuQ2xhcHRvbi9NXFxuQ2xhcmEvTVxcbkNsYXJlL01cXG5DbGFyZW5jZS9NXFxuQ2xhcmVuZG9uL01cXG5DbGFyaWNlL01cXG5DbGFyaXNzYS9NXFxuQ2xhcmsvTVxcbkNsYXJrZS9NXFxuQ2xhcmtzdmlsbGUvTVxcbkNsYXVkZS9NXFxuQ2xhdWRldHRlL01cXG5DbGF1ZGlhL01cXG5DbGF1ZGluZS9NXFxuQ2xhdWRpby9NXFxuQ2xhdWRpdXMvTVxcbkNsYXVzL01cXG5DbGF1c2V3aXR6L01cXG5DbGF1c2l1cy9NXFxuQ2xheS9NXFxuQ2xheXRvbi9NXFxuQ2xlYXJhc2lsL01cXG5DbGVtL1hNXFxuQ2xlbWVuY2VhdS9NXFxuQ2xlbWVucy9NXFxuQ2xlbWVudC9NU1xcbkNsZW1lbnRpbmUvTVxcbkNsZW1lbnRzL01cXG5DbGVtb25zL01cXG5DbGVtc29uL01cXG5DbGVvL01cXG5DbGVvcGF0cmEvTVxcbkNsZXZlbGFuZC9NXFxuQ2xpYnVybi9NXFxuQ2xpZmYvTVxcbkNsaWZmb3JkL01cXG5DbGlmdG9uL01cXG5DbGluZS9NXFxuQ2xpbnQvTVxcbkNsaW50b24vTVxcbkNsaW8vTVxcbkNsaXZlL01cXG5DbG9qdXJlL01cXG5DbG9yZXRzL01cXG5DbG9yb3gvTVxcbkNsb3N1cmUvTVxcbkNsb3Roby9NXFxuQ2xvdXNlYXUvTVxcbkNsb3Zpcy9NXFxuQ2x5ZGUvTVxcbkNseWRlc2RhbGUvTVxcbkNseXRlbW5lc3RyYS9NXFxuQ20vTVxcbkNtZHJcXG5Dby9NXFxuQ29iYWluL01cXG5Db2JiL01cXG5Db2NoYWJhbWJhL01cXG5Db2NoaW4vTVxcbkNvY2hpc2UvTVxcbkNvY2hyYW4vTVxcbkNvY2tuZXkvTVxcbkNvY3RlYXUvTVxcbkNvZFxcbkNvZHkvTVxcbkNvZmZleS9NXFxuQ29nbmFjL01cXG5Db2hhbi9NXFxuQ29oZW4vTVxcbkNvaW1iYXRvcmUvTVxcbkNvaW50cmVhdS9NXFxuQ29rZS9TTVxcbkNvbC9NXFxuQ29sYmVydC9NXFxuQ29sYnkvTVxcbkNvbGUvTVxcbkNvbGVlbi9NXFxuQ29sZW1hbi9NXFxuQ29sZXJpZGdlL01cXG5Db2xldHRlL01cXG5Db2xmYXgvTVxcbkNvbGdhdGUvTVxcbkNvbGluL01cXG5Db2xsZWVuL01cXG5Db2xsaWVyL01cXG5Db2xsaW4vU01cXG5Db2xsaW5zL01cXG5Db2xvXFxuQ29sb2duZS9NXFxuQ29sb21iaWEvTVxcbkNvbG9tYmlhbi9NU1xcbkNvbG9tYm8vTVxcbkNvbG9uL01cXG5Db2xvcmFkYW4vU01cXG5Db2xvcmFkby9NXFxuQ29sb3JhZG9hblxcbkNvbG9zc2V1bS9NXFxuQ29sdC9NXFxuQ29sdHJhbmUvTVxcbkNvbHVtYmlhL01cXG5Db2x1bWJpbmUvTVxcbkNvbHVtYnVzL01cXG5Db21cXG5Db21hbmNoZS9NU1xcbkNvbWJzL01cXG5Db21kclxcbkNvbWludGVybi9NXFxuQ29tbWFuZG1lbnRcXG5Db21tb25zL01cXG5Db21tb253ZWFsdGhcXG5Db21tdW5pb24vU01cXG5Db21tdW5pc21cXG5Db21tdW5pc3QvU01cXG5Db21vL01cXG5Db21vcmFuXFxuQ29tb3Jvcy9NXFxuQ29tcGFxL01cXG5Db21wdG9uL01cXG5Db21wdVNlcnZlL01cXG5Db210ZS9NXFxuQ29uYWtyeS9NXFxuQ29uYW4vTVxcbkNvbmNlcGNpb24vTVxcbkNvbmNldHRhL01cXG5Db25jb3JkL1NNXFxuQ29uY29yZGUvTVxcbkNvbmRpbGxhYy9NXFxuQ29uZG9yY2V0L01cXG5Db25lc3RvZ2EvTVxcbkNvbmZlZGVyYWN5L01cXG5Db25mZWRlcmF0ZS9NU1xcbkNvbmZ1Y2lhbi9TTVxcbkNvbmZ1Y2lhbmlzbS9NU1xcbkNvbmZ1Y2l1cy9NXFxuQ29uZy9NXFxuQ29uZ28vTVxcbkNvbmdvbGVzZS9NXFxuQ29uZ3JlZ2F0aW9uYWxcXG5Db25ncmVnYXRpb25hbGlzdC9NU1xcbkNvbmdyZXNzL01TXFxuQ29uZ3Jlc3Npb25hbFxcbkNvbmdyZXZlL01cXG5Db25sZXkvTVxcbkNvbm4vTVJcXG5Db25uZWN0aWN1dC9NXFxuQ29ubmVsbHN2aWxsZS9NXFxuQ29ubmVtYXJhL01cXG5Db25uZXIvTVxcbkNvbm5lcnkvTVxcbkNvbm5pZS9NXFxuQ29ubm9sbHkvTVxcbkNvbm5vcnMvTVxcbkNvbnJhZC9NXFxuQ29ucmFpbC9NXFxuQ29ucm9lL01cXG5Db25zZXJ2YXRpdmVcXG5Db25zdGFibGUvTVxcbkNvbnN0YW5jZS9NXFxuQ29uc3RhbnRpbmUvTVxcbkNvbnN0YW50aW5vcGxlL01cXG5Db25zdGl0dXRpb25cXG5Db25zdWVsby9NXFxuQ29udGluZW50L01cXG5Db250aW5lbnRhbC9NXFxuQ29udHJlcmFzL01cXG5Db253YXkvTVxcbkNvb2svTVxcbkNvb2tlL01cXG5Db29sZXkvTVxcbkNvb2xpZGdlL01cXG5Db29wZXIvTVxcbkNvb3BlcnN0b3duL01cXG5Db29ycy9NXFxuQ29wYWNhYmFuYS9NXFxuQ29wZWxhbmQvTVxcbkNvcGVuaGFnZW4vTVxcbkNvcGVybmljYW4vTVxcbkNvcGVybmljdXMvTVxcbkNvcGxhbmQvTVxcbkNvcGxleS9NXFxuQ29wcGVyZmllbGQvTVxcbkNvcHBlcnRvbmUvTVxcbkNvcHBvbGEvTVxcbkNvcHRpYy9NXFxuQ29yYS9NXFxuQ29yZGVsaWEvTVxcbkNvcmRpbGxlcmFzL01cXG5Db3Jkb2JhL01cXG5Db3JleS9NXFxuQ29yZnUvTVxcbkNvcmluYS9NXFxuQ29yaW5lL01cXG5Db3Jpbm5lL01cXG5Db3JpbnRoL01cXG5Db3JpbnRoaWFuL01TXFxuQ29yaW50aGlhbnMvTVxcbkNvcmlvbGFudXMvTVxcbkNvcmlvbGlzL01cXG5Db3JrXFxuQ29ybGVvbmUvTVxcbkNvcm1hY2svTVxcbkNvcm5laWxsZS9NXFxuQ29ybmVsaWEvTVxcbkNvcm5lbGl1cy9NXFxuQ29ybmVsbC9NXFxuQ29ybmluZy9NXFxuQ29ybmlzaC9NU1xcbkNvcm53YWxsL01cXG5Db3Jud2FsbGlzL01cXG5Db3JvbmFkby9NXFxuQ29yb3QvTVxcbkNvcnBcXG5Db3JyZWdnaW8vTVxcbkNvcnJpbmUvTVxcbkNvcnNpY2EvTVxcbkNvcnNpY2FuL01cXG5Db3J0ZXMvTVNcXG5Db3J0bGFuZC9NXFxuQ29ydmFsbGlzL01cXG5Db3J2ZXR0ZS9NXFxuQ29ydnVzL01cXG5Db3J5L01cXG5Db3NieS9NXFxuQ29zbW9zREIvTVxcbkNvc3NhY2svTVxcbkNvc3Rjby9NXFxuQ29zdGVsbG8vTVxcbkNvc3RuZXIvTVxcbkNvdGUvTVxcbkNvdG9ub3UvTVxcbkNvdG9wYXhpL01cXG5Db3Rzd29sZC9NXFxuQ290dG9uL01cXG5Db3Vsb21iL01cXG5Db3VsdGVyL01cXG5Db3VwZXJpbi9NXFxuQ291cmJldC9NXFxuQ291cnRuZXkvTVxcbkNvdXN0ZWF1L01cXG5Db3ZlbnRyeS9TTVxcbkNvdmluZ3Rvbi9NXFxuQ293YXJkL01cXG5Db3dlbGwvTVxcbkNvd2xleS9NXFxuQ293cGVyL01cXG5Db3gvTVxcbkNveS9NXFxuQ295bGUvTVxcbkNvenVtZWwvTVxcbkNwbFxcbkNyL01UXFxuQ3JhYmJlL01cXG5DcmFmdC9NXFxuQ3JhaWcvTVxcbkNyYW5hY2gvTVxcbkNyYW5lL01cXG5DcmFubWVyL01cXG5DcmF0ZXIvTVxcbkNyYXdmb3JkL01cXG5DcmF5L01cXG5DcmF5b2xhL01cXG5DcmVhdGlvbi9NXFxuQ3JlYXRvci9NXFxuQ3JlY3kvTVxcbkNyZWUvRFNNXFxuQ3JlZWsvU01cXG5DcmVpZ2h0b24vTVxcbkNyZW9sZS9TTVxcbkNyZW9uL01cXG5DcmVzc2lkYS9NXFxuQ3Jlc3QvTVxcbkNyZXRhY2VvdXMvTVxcbkNyZXRhbi9TTVxcbkNyZXRlL01cXG5DcmljaHRvbi9NXFxuQ3JpY2svTVxcbkNyaW1lYS9NXFxuQ3JpbWVhbi9NXFxuQ3Jpb2xsby9NXFxuQ3Jpc2NvL01cXG5DcmlzdGluYS9NXFxuQ3JvYXQvU01cXG5Dcm9hdGlhL01cXG5Dcm9hdGlhbi9NU1xcbkNyb2NlL01cXG5Dcm9ja2V0dC9NXFxuQ3JvZXN1cy9NXFxuQ3JvbXdlbGwvTVxcbkNyb213ZWxsaWFuL01cXG5Dcm9uaW4vTVxcbkNyb25raXRlL01cXG5Dcm9udXMvTVxcbkNyb29rZXMvTVxcbkNyb3NieS9NXFxuQ3Jvc3MvTVxcbkNyb3cvU01cXG5Dcm93bGV5L01cXG5DcnVjaWZpeGlvbi9NU1xcbkNydWlrc2hhbmsvTVxcbkNydWlzZS9NXFxuQ3J1c2FkZXMnc1xcbkNydXNvZS9NXFxuQ3J1eC9NXFxuQ3J1ei9NXFxuQ3J5cHRvem9pYy9NXFxuQ3J5c3RhbC9NXFxuQ3NvbmthL01cXG5DdFxcbkN0ZXNpcGhvbi9NXFxuQ3RodWxodS9NXFxuQ3UvTVxcbkN1YmEvTVxcbkN1YmFuL1NNXFxuQ3VjaHVsYWluL01cXG5DdWlzaW5hcnQvTVxcbkN1bGJlcnRzb24vTVxcbkN1bGxlbi9NXFxuQ3VtYmVybGFuZC9NXFxuQ3VtbWluZ3MvTVxcbkN1bmFyZC9NXFxuQ3VubmluZ2hhbS9NXFxuQ3VwaWQvTVxcbkN1cmFjYW8vTVxcbkN1cmllL01cXG5DdXJpdGliYS9NXFxuQ3Vycmllci9NXFxuQ3VycnkvUk1cXG5DdXJ0L01cXG5DdXJ0aXMvTVxcbkN1c3Rlci9NXFxuQ3V2aWVyL01cXG5DdXpjby9NXFxuQ3liZWxlL01cXG5DeWNsYWRlcy9NXFxuQ3ljbG9wZXMvTVxcbkN5Y2xvcHMvTVxcbkN5Z251cy9NXFxuQ3ltYmVsaW5lL01cXG5DeW50aGlhL01cXG5DeXByaWFuL01cXG5DeXByaW90L01TXFxuQ3lwcnVzL01cXG5DeXJhbm8vTVxcbkN5cmlsL01cXG5DeXJpbGxpYy9NXFxuQ3lydXMvTVxcbkN6ZWNoL01cXG5DemVjaGlhL01cXG5DemVjaG9zbG92YWtcXG5DemVjaG9zbG92YWtpYS9NXFxuQ3plY2hvc2xvdmFraWFuL1NNXFxuQ3plY2hzXFxuQ3plcm55L01cXG5EL01cXG5EQS9NXFxuREFSXFxuREFUL01cXG5EQk1TL01cXG5EQy9NXFxuREQvTVxcbkREUy9NXFxuRERUL1NcXG5ERVxcbkRFQVxcbkRFQy9TRFxcbkRIXFxuREhTXFxuRElcXG5ESlxcbkRNQ0FcXG5ETUQvTVxcbkRNWlxcbkROQS9NXFxuRE9BXFxuRE9CXFxuRE9EXFxuRE9FXFxuRE9TL01cXG5ET1RcXG5EUC9TTVxcbkRQVFxcbkRTVFxcbkRUUFxcbkRVSVxcbkRWRC9TXFxuRFZSL1NNXFxuRFdJXFxuRGFjaGF1L01cXG5EYWNyb24vU01cXG5EYWRhL01cXG5EYWRhaXNtL01cXG5EYWVkYWx1cy9NXFxuRGFndWVycmUvTVxcbkRhZ3dvb2QvTVxcbkRhaG9tZXkvTVxcbkRhaW1sZXIvTVxcbkRhaXN5L01cXG5EYWthci9NXFxuRGFrb3RhL1NNXFxuRGFrb3Rhbi9NXFxuRGFsYWlcXG5EYWxlL01cXG5EYWxleS9NXFxuRGFsaS9NXFxuRGFsaWFuL01cXG5EYWxsYXMvTVxcbkRhbG1hdGlhL01cXG5EYWxtYXRpYW4vU01cXG5EYWx0b24vTVxcbkRhbWFzY3VzL01cXG5EYW1lL01OXFxuRGFtaWFuL01cXG5EYW1pZW4vTVxcbkRhbWlvbi9NXFxuRGFtb2NsZXMvTVxcbkRhbW9uL01cXG5EYW4vTVxcbkRhbmEvTVxcbkRhbmFlL01cXG5EYW5idXJ5L01cXG5EYW5lL1NNXFxuRGFuZWxhdy9NXFxuRGFuZ2VyZmllbGQvTVxcbkRhbmlhbC9NXFxuRGFuaWVsL1NNXFxuRGFuaWVsbGUvTVxcbkRhbmllbHMvTVxcbkRhbmlzaC9NXFxuRGFubmllL01cXG5EYW5ueS9NXFxuRGFub25lL01cXG5EYW50ZS9NXFxuRGFudG9uL01cXG5EYW51YmUvTVxcbkRhbnViaWFuL01cXG5EYW52aWxsZS9NXFxuRGFwaG5lL01cXG5EYXJieS9NXFxuRGFyY3kvTVxcbkRhcmRhbmVsbGVzL01cXG5EYXJlL01cXG5EYXJlbi9NXFxuRGFyZnVyL01cXG5EYXJpbi9NXFxuRGFyaW8vTVxcbkRhcml1cy9NXFxuRGFyamVlbGluZy9NXFxuRGFybGEvTVxcbkRhcmxlbmUvTVxcbkRhcmxpbmcvTVxcbkRhcm5lbGwvTVxcbkRhcnJlbC9NXFxuRGFycmVsbC9NXFxuRGFycmVuL01cXG5EYXJyaW4vTVxcbkRhcnJvdy9NXFxuRGFycnlsL01cXG5EYXJ0aC9NXFxuRGFydG1vb3IvTVxcbkRhcnRtb3V0aC9NXFxuRGFydm9uL01cXG5EYXJ3aW4vTVxcbkRhcndpbmlhbi9NXFxuRGFyd2luaXNtL1NNXFxuRGFyd2luaXN0XFxuRGFyeWwvTVxcbkRhdGFtYXRpb25cXG5EYXVnaGVydHkvTVxcbkRhdW1pZXIvTVxcbkRhdmFvL01cXG5EYXZlL01cXG5EYXZlbnBvcnQvTVxcbkRhdmlkL01TXFxuRGF2aWRzb24vTVxcbkRhdmllcy9NXFxuRGF2aXMvTVxcbkRhdnkvU01cXG5EYXdlcy9NXFxuRGF3a2luc1xcbkRhd24vTVxcbkRhd3Nvbi9NXFxuRGF5L01cXG5EYXlhblxcbkRheXRvbi9NXFxuRGVHZW5lcmVzL01cXG5EZUthbGIvTVxcbkRlYWRoZWFkL01cXG5EZWFuL01cXG5EZWFuYS9NXFxuRGVhbmRyZS9NXFxuRGVhbm4vTVxcbkRlYW5uYS9NXFxuRGVhbm5lL01cXG5EZWF0aC9NXFxuRGViYmllL01cXG5EZWJieS9NXFxuRGViaWFuL01cXG5EZWJvcmEvTVxcbkRlYm9yYWgvTVxcbkRlYm91aWxsZXQvTVxcbkRlYnJhL01cXG5EZWJzL01cXG5EZWJ1c3N5L01cXG5EZWMvTVxcbkRlY2Fsb2d1ZS9NXFxuRGVjYXR1ci9NXFxuRGVjY2EvTVxcbkRlY2Nhbi9NXFxuRGVjZW1iZXIvU01cXG5EZWNrZXIvTVxcbkRlZGVraW5kL01cXG5EZWUvTVxcbkRlZW5hL01cXG5EZWVyZS9NXFxuRGVmb2UvTVxcbkRlZ2FzL01cXG5EZWlkcmUvTVxcbkRlaW1vcy9NXFxuRGVpcmRyZS9NXFxuRGVpdHlcXG5EZWplc3VzL01cXG5EZWwvTVxcbkRlbGFjcm9peC9NXFxuRGVsYWNydXovTVxcbkRlbGFuZXkvTVxcbkRlbGFuby9NXFxuRGVsYXdhcmUvTVNcXG5EZWxhd2FyZWFuL1NNXFxuRGVsYmVydC9NXFxuRGVsZW9uL01cXG5EZWxnYWRvL01cXG5EZWxoaS9NXFxuRGVsaWEvTVxcbkRlbGliZXMvTVxcbkRlbGljaW91cy9NXFxuRGVsaWxhaC9NXFxuRGVsaWxhaHNcXG5EZWxpdXMvTVxcbkRlbGwvTVxcbkRlbGxhL01cXG5EZWxtYXIvTVxcbkRlbG1hcnZhL01cXG5EZWxtZXIvTVxcbkRlbG1vbmljby9NXFxuRGVsb3Jlcy9NXFxuRGVsb3Jpcy9NXFxuRGVscGhpL01cXG5EZWxwaGljL01cXG5EZWxwaGludXMvTVxcbkRlbHRhL01cXG5EZWx0b25hL01cXG5EZW0vR1xcbkRlbWF2ZW5kL01cXG5EZW1lcm9sL01cXG5EZW1ldGVyL01cXG5EZW1ldHJpdXMvTVxcbkRlbWluZy9NXFxuRGVtb2NyYXQvU01cXG5EZW1vY3JhdGljXFxuRGVtb2NyaXR1cy9NXFxuRGVtb3N0aGVuZXMvTVxcbkRlbXBzZXkvTVxcbkRlbmEvTVxcbkRlbmFsaVxcbkRlbmViL01cXG5EZW5lYm9sYS9NXFxuRGVuZy9NXFxuRGVuaXMvTVxcbkRlbmlzZS9NXFxuRGVubWFyay9NXFxuRGVubmlzL01cXG5EZW5ueS9NXFxuRGVudG9uL01cXG5EZW52ZXIvTVxcbkRlb24vTVxcbkRlcHAvTVxcbkRlcmJ5L01cXG5EZXJlay9NXFxuRGVyaWNrL01cXG5EZXJtb3QvTVxcbkRlcnJpY2svTVxcbkRlcnJpZGEvTVxcbkRlc2NhcnRlcy9NXFxuRGVzZGVtb25hL01cXG5EZXNpcmVlL01cXG5EZXNtb25kL01cXG5EZXRyb2l0L01cXG5EZXV0ZXJvbm9teS9NXFxuRGV2YW5hZ2FyaS9NXFxuRGV2aS9NXFxuRGV2aW4vTVxcbkRldm9uL01cXG5EZXZvbmlhbi9NXFxuRGV3YXIvTVxcbkRld2F5bmUvTVxcbkRld2V5L01cXG5EZXdpdHQvTVxcbkRleGVkcmluZS9NXFxuRGV4dGVyL01cXG5EaGFrYS9NXFxuRGhhdWxhZ2lyaS9NXFxuRGkvU01cXG5EaUNhcHJpby9NXFxuRGlNYWdnaW8vTVxcbkRpYWdoaWxldi9NXFxuRGlhbC9NXFxuRGlhbmEvTVxcbkRpYW5lL01cXG5EaWFubi9NXFxuRGlhbm5hL01cXG5EaWFubmUvTVxcbkRpYXNcXG5EaWFzcG9yYS9NU1xcbkRpY2svWE1cXG5EaWNrZW5zL01cXG5EaWNrZW5zaWFuXFxuRGlja2Vyc29uL01cXG5EaWNraW5zb24vTVxcbkRpY2tzb24vTVxcbkRpY3RhcGhvbmUvU01cXG5EaWRlcm90L01cXG5EaWRvL01cXG5EaWRyaWtzb24vTVxcbkRpZWZlbmJha2VyL01cXG5EaWVnby9NXFxuRGllbS9NXFxuRGlldHJpY2gvTVxcbkRpamtzdHJhL01cXG5EaWpvbi9NXFxuRGlsYmVydC9NU1xcbkRpbGxhcmQvTVxcbkRpbGxpbmdlci9NXFxuRGlsbG9uL01cXG5EaW5hL01cXG5EaW5haC9NXFxuRGluby9NXFxuRGlvY2xldGlhbi9NXFxuRGlvZ2VuZXMvTVxcbkRpb24vTVxcbkRpb25uZS9NXFxuRGlvbnlzaWFuL01cXG5EaW9ueXN1cy9NXFxuRGlvcGhhbnRpbmUvTVxcbkRpb3IvTVxcbkRpcHBlci9NXFxuRGlyXFxuRGlyYWMvTVxcbkRpcmljaGxldC9NXFxuRGlyay9NXFxuRGlzL01cXG5EaXNuZXkvTVxcbkRpc25leWxhbmQvTVxcbkRpc3JhZWxpL01cXG5EaXZpbmUvTVxcbkRpd2FsaS9NXFxuRGl4L01cXG5EaXhpZS9NXFxuRGl4aWVjcmF0L01cXG5EaXhpZWxhbmQvU01cXG5EaXhvbi9NXFxuRGphbmdvL01cXG5Eamlib3V0aS9NXFxuRG1pdHJpL01cXG5EbmVwcm9wZXRyb3Zzay9NXFxuRG5pZXN0ZXIvTVxcbkRvYmJpbi9NXFxuRG9iZXJtYW4vTVxcbkRvYnJvL01cXG5Eb2N0b3JcXG5Eb2N0b3Jvdy9NXFxuRG9kZ2UvTVxcbkRvZGdzb24vTVxcbkRvZG9tYS9NXFxuRG9kc29uL01cXG5Eb2UvTVxcbkRvaGEvTVxcbkRvbGJ5L01cXG5Eb2xlL01cXG5Eb2xsaWUvTVxcbkRvbGx5L01cXG5Eb2xvcmVzL01cXG5Eb21lc2RheS9NXFxuRG9taW5nby9NXFxuRG9taW5ndWV6L01cXG5Eb21pbmljL01cXG5Eb21pbmljYS9NXFxuRG9taW5pY2FuL01TXFxuRG9taW5pY2svTVxcbkRvbWluaW9uXFxuRG9taW5pcXVlL01cXG5Eb21pdGlhbi9NXFxuRG9uL1NNXFxuRG9uYS9NXFxuRG9uYWh1ZS9NXFxuRG9uYWxkL01cXG5Eb25hbGRzb24vTVxcbkRvbmF0ZWxsby9NXFxuRG9uZXRzay9NXFxuRG9uaXpldHRpL01cXG5Eb25uL01SXFxuRG9ubmEvTVxcbkRvbm5lL01cXG5Eb25uZWxsL01cXG5Eb25uZXIvTVxcbkRvbm5pZS9NXFxuRG9ubnkvTVxcbkRvbm92YW4vTVxcbkRvb2xleS9NXFxuRG9vbGl0dGxlL01cXG5Eb29uZXNidXJ5L01cXG5Eb3BwbGVyL01cXG5Eb3JhL01cXG5Eb3JjYXMvTVxcbkRvcmVlbi9NXFxuRG9yaWFuL01cXG5Eb3JpYy9NXFxuRG9yaXMvTVxcbkRvcml0b3MvTVxcbkRvcm90aGVhL01cXG5Eb3JvdGh5L01cXG5Eb3JzZXQvTVxcbkRvcnNleS9NXFxuRG9ydGh5L01cXG5Eb3J0bXVuZC9NXFxuRG9zdG9ldnNreS9NXFxuRG90L01cXG5Eb3RoYW4vTVxcbkRvdHNvbi9NXFxuRG91YWxhL01cXG5Eb3VheS9NXFxuRG91YmxlZGF5L01cXG5Eb3VnL01cXG5Eb3VnbGFzL01cXG5Eb3VnbGFzcy9NXFxuRG91cm8vTVxcbkRvdmVyL01cXG5Eb3cvTVxcbkRvd25zL01cXG5Eb3dueS9NXFxuRG95bGUvTVxcbkRyXFxuRHJhY28vTVxcbkRyYWNvbmlhbi9NXFxuRHJhY3VsYS9NXFxuRHJha2UvTVxcbkRyYW1hbWluZS9TTVxcbkRyYW1idWllL01cXG5EcmFuby9NXFxuRHJhdmlkaWFuL01cXG5EcmVpc2VyL01cXG5EcmVzZGVuL01cXG5EcmV3L01cXG5EcmV5ZnVzL01cXG5EcmlzdGFuL01cXG5Ecm9wYm94L01cXG5EcnVkZ2UvTVxcbkRydXBhbC9NXFxuRHJ5ZGVuL01cXG5Ec2NodWJiYS9NXFxuRHVcXG5EdVBvbnQvTVxcbkR1YW5lL01cXG5EdWJhaS9NXFxuRHViY2VrL01cXG5EdWJoZS9NXFxuRHVibGluL01cXG5EdWJyb3ZuaWsvTVxcbkR1YnVxdWUvTVxcbkR1Y2hhbXAvTVxcbkR1ZGxleS9NXFxuRHVmZnkvTVxcbkR1aXNidXJnL01cXG5EdWtlL01cXG5EdWxsZXMvTVxcbkR1bHV0aC9NXFxuRHVtYXMvTVxcbkR1bWJsZWRvcmUvTVxcbkR1bWJvL01cXG5EdW5hbnQvTVxcbkR1bmJhci9NXFxuRHVuY2FuL01cXG5EdW5kZWVcXG5EdW5lZGluL01cXG5EdW5raXJrL01cXG5EdW5sYXAvTVxcbkR1bm4vTVxcbkR1bm5lL01cXG5EdXJhY2VsbC9NXFxuRHVyYW4vTVxcbkR1cmFudC9NXFxuRHVyYW50ZS9NXFxuRHVyYmFuL01cXG5EdXJlci9NXFxuRHVyZXgvTVxcbkR1cmhhbS9NU1xcbkR1cmtoZWltL01cXG5EdXJvYy9NXFxuRHVyb2NoZXIvTVxcbkR1c2UvTVxcbkR1c2hhbmJlL01cXG5EdXNzZWxkb3JmL01cXG5EdXN0YnVzdGVyL01cXG5EdXN0aW4vTVxcbkR1c3R5L01cXG5EdXRjaC9NXFxuRHV0Y2htYW4vTVxcbkR1dGNobWVuL01cXG5EdXRjaHdvbWFuXFxuRHV2YWxpZXIvTVxcbkR2aW5hL01cXG5Edm9yYWsvTVxcbkR3YXluZS9NXFxuRHdpZ2h0L01cXG5EeS9NXFxuRHllci9NXFxuRHlsYW4vTVxcbkR5bmFtb0RCL01cXG5EeXNvbi9NXFxuRHplcnpoaW5za3kvTVxcbkR6dW5nYXJpYS9NXFxuRS9TTVxcbkVDXFxuRUNHL01cXG5FQ01BU2NyaXB0L01cXG5FRFAvTVxcbkVEVFxcbkVFQy9NXFxuRUVHL01cXG5FRU9cXG5FRU9DXFxuRUZMXFxuRUZUXFxuRUtHL01cXG5FTEYvTVxcbkVNXFxuRU1UXFxuRU5FL01cXG5FT0VcXG5FUEEvTVxcbkVSXFxuRVJBXFxuRVNFL01cXG5FU0xcXG5FU1AvTVxcbkVTUE4vTVxcbkVTUlxcbkVTVC9NXFxuRVRcXG5FVEFcXG5FVERcXG5FVVxcbkVVTEEvU1xcbkVha2lucy9NXFxuRWFyaGFydC9NXFxuRWFybC9NXFxuRWFybGUvTVxcbkVhcmxlbmUvTVxcbkVhcmxpbmUvTVxcbkVhcm5lc3QvTVxcbkVhcm5lc3RpbmUvTVxcbkVhcm5oYXJkdC9NXFxuRWFycC9NXFxuRWFzdC9TWk1SXFxuRWFzdGVyL01cXG5FYXN0ZXJuL1JcXG5FYXN0bWFuL01cXG5FYXN0d29vZC9NXFxuRWF0b24vTVxcbkViZW4vTVxcbkViZW5lZXplci9NXFxuRWJlcnQvTVxcbkVib2xhL01cXG5FYm9uaWNzL01cXG5FYm9ueS9NXFxuRWJyby9NXFxuRWNjbGVzaWFzdGVzL01cXG5FY28vTVxcbkVjc3Rhc3lcXG5FY3VhZG9yL01cXG5FY3VhZG9yYW4vU01cXG5FY3VhZG9yZWFuXFxuRWN1YWRvcmlhbi9TTVxcbkVkL01OWFxcbkVkYW0vU01cXG5FZGRhL01cXG5FZGRpZS9NXFxuRWRkaW5ndG9uL01cXG5FZGR5L01cXG5FZGVuL01cXG5FZGdhci9NXFxuRWRnYXJkby9NXFxuRWRpbmJ1cmdoL01cXG5FZGlzb24vTVxcbkVkaXRoL01cXG5FZG1vbmQvTVxcbkVkbW9udG9uL01cXG5FZG11bmQvTVxcbkVkbmEvTVxcbkVkc2VsL01cXG5FZHVhcmRvL01cXG5FZHdhcmQvU01cXG5FZHdhcmRpYW4vTVxcbkVkd2FyZG8vTVxcbkVkd2FyZHMvTVxcbkVkd2luL01cXG5FZHdpbmEvTVxcbkVleW9yZS9NXFxuRWZmaWUvTVxcbkVmcmFpbi9NXFxuRWZyZW4vTVxcbkVnZ28vTVxcbkVneXB0L01cXG5FZ3lwdGlhbi9NU1xcbkVneXB0b2xvZ3kvTVxcbkVocmVuYmVyZy9NXFxuRWhybGljaC9NXFxuRWljaG1hbm4vTVxcbkVpZmZlbC9NXFxuRWlsZWVuL01cXG5FaW5zdGVpbi9NU1xcbkVpcmUvTVxcbkVpc2VuaG93ZXIvTVxcbkVpc2Vuc3RlaW4vTVxcbkVpc25lci9NXFxuRWxhaW5lL01cXG5FbGFtL01cXG5FbGFub3IvTVxcbkVsYXN0aWNzZWFyY2gvTVxcbkVsYXN0b3BsYXN0L01cXG5FbGJhL01cXG5FbGJlL01cXG5FbGJlcnQvTVxcbkVsYnJ1cy9NXFxuRWxkZXJzYnVyZy9NXFxuRWxkb24vTVxcbkVsZWFub3IvTVxcbkVsZWF6YXIvTVxcbkVsZWN0cmEvTVxcbkVsZW5hL01cXG5FbGdhci9NXFxuRWxpL01cXG5FbGlhcy9NXFxuRWxpamFoL01cXG5FbGlub3IvTVxcbkVsaW90L01cXG5FbGlzYS9NXFxuRWxpc2FiZXRoL01cXG5FbGlzZS9NXFxuRWxpc2VvL01cXG5FbGlzaGEvTVxcbkVsaXphL01cXG5FbGl6YWJldGgvTVxcbkVsaXphYmV0aGFuL1NNXFxuRWxpemFiZXRodG93bi9NXFxuRWxraGFydC9NXFxuRWxsYS9NXFxuRWxsZW4vTVxcbkVsbGVzbWVyZS9NXFxuRWxsaWUvTVxcbkVsbGluZ3Rvbi9NXFxuRWxsaW90L01cXG5FbGxpb3R0L01cXG5FbGxpcy9NXFxuRWxsaXNvbi9NXFxuRWxtYS9NXFxuRWxtZXIvTVxcbkVsbWlyYS9NXFxuRWxtby9NXFxuRWxuYXRoL01cXG5FbG5vcmEvTVxcbkVsb2hpbS9NXFxuRWxvaXNlL01cXG5FbG95L01cXG5FbHJveS9NXFxuRWxzYS9NXFxuRWxzaWUvTVxcbkVsc2lub3JlL01cXG5FbHRhbmluL01cXG5FbHRvbi9NXFxuRWx1bC9NXFxuRWx2YS9NXFxuRWx2aWEvTVxcbkVsdmluL01cXG5FbHZpcmEvTVxcbkVsdmlzL01cXG5FbHdheS9NXFxuRWx3b29kL01cXG5FbHlyaWEvTVxcbkVseXNlZS9NXFxuRWx5c2lhbi9NXFxuRWx5c2l1bS9TTVxcbkVtYWNzL01cXG5FbWFudWVsL01cXG5FbWVyc29uL01cXG5FbWVyeS9NXFxuRW1pbC9NXFxuRW1pbGUvTVxcbkVtaWxpYS9NXFxuRW1pbGlvL01cXG5FbWlseS9NXFxuRW1pbmVtL01cXG5FbWluZW5jZVxcbkVtbWEvTVxcbkVtbWFudWVsL01cXG5FbW1ldHQvTVxcbkVtbXkvTVxcbkVtb3J5L01cXG5FbmNhcnRhL01cXG5FbmR5bWlvbi9NXFxuRW5nL01cXG5FbmdlbHMvTVxcbkVuZ2xhbmQvTVxcbkVuZ2xpc2gvTVJTXFxuRW5nbGlzaG1hbi9NXFxuRW5nbGlzaG1lbi9NXFxuRW5nbGlzaHdvbWFuL01cXG5FbmdsaXNod29tZW4vTVxcbkVuaWQvTVxcbkVuaWYvTVxcbkVuaXdldG9rL01cXG5FbmtpZHUvTVxcbkVub2NoL01cXG5Fbm9zL01cXG5FbnJpY28vTVxcbkVucmlxdWUvTVxcbkVucm9uL01cXG5FbnRlcnByaXNlL01cXG5Fb2NlbmUvTVxcbkVwY290L01cXG5FcGhlc2lhbi9NU1xcbkVwaGVzdXMvTVxcbkVwaHJhaW0vTVxcbkVwaWN0ZXR1cy9NXFxuRXBpY3VyZWFuL01cXG5FcGljdXJ1cy9NXFxuRXBpbWV0aGl1cy9NXFxuRXBpcGhhbnkvU01cXG5FcGlzY29wYWxcXG5FcGlzY29wYWxpYW4vTVNcXG5FcGlzdGxlXFxuRXBzb20vTVxcbkVwc29uL01cXG5FcHN0ZWluL01cXG5FcXV1bGV1cy9NXFxuRXIvTVxcbkVyYXNtdXMvTVxcbkVyYXRvL01cXG5FcmF0b3N0aGVuZXMvTVxcbkVyZWJ1cy9NXFxuRXJlY3Rvci9NXFxuRXJld2hvbi9NXFxuRXJoYXJkL01cXG5FcmljL01cXG5FcmljYS9NXFxuRXJpY2gvTVxcbkVyaWNrL01cXG5Fcmlja2EvTVxcbkVyaWNrc29uL01cXG5FcmlkYW51cy9NXFxuRXJpZS9NXFxuRXJpay9NXFxuRXJpa2EvTVxcbkVyaW4vTVxcbkVyaXMvTVNcXG5Fcml0cmVhL01cXG5Fcml0cmVhbi9TTVxcbkVybGFuZy9NXFxuRXJsZW5tZXllci9NXFxuRXJtYS9NXFxuRXJuYS9NXFxuRXJuZXN0L01cXG5Fcm5lc3RpbmUvTVxcbkVybmVzdG8vTVxcbkVybmllL01cXG5Fcm5zdC9NXFxuRXJvcy9NU1xcbkVycm9sL01cXG5FcnNlL01cXG5FcnZJbi9NXFxuRXJ3aW4vTVxcbkVzYXUvTVxcbkVzY2hlci9NXFxuRXNjaGVyaWNoaWEvTVxcbkVzY29uZGlkb1xcbkVza2ltby9NU1xcbkVzbWVyYWxkYS9NXFxuRXNwZXJhbnRvL01cXG5Fc3BlcmFuemEvTVxcbkVzcGlub3phL01cXG5Fc3EvTVxcbkVzcXVpcmUvTVNcXG5Fc3Nlbi9NXFxuRXNzZW5lL01cXG5Fc3NlcXVpYm8vTVxcbkVzc2V4L01cXG5Fc3NpZS9NXFxuRXN0YWJsaXNobWVudFxcbkVzdGViYW4vTVxcbkVzdGVsYS9NXFxuRXN0ZWxsYS9NXFxuRXN0ZWxsZS9NXFxuRXN0ZXIvTVxcbkVzdGVyaGF6eS9NXFxuRXN0ZXMvTVxcbkVzdGhlci9NXFxuRXN0b25pYS9NXFxuRXN0b25pYW4vU01cXG5Fc3RyYWRhL01cXG5FdGhhbi9NXFxuRXRoZWwvTVxcbkV0aGVscmVkL01cXG5FdGhlcm5ldC9NXFxuRXRoaW9waWEvTVxcbkV0aGlvcGlhbi9TTVxcbkV0bmEvTVxcbkV0b24vTVxcbkV0cnVyaWEvTVxcbkV0cnVzY2FuL01cXG5FdHRhL01cXG5FdS9NXFxuRXVjaGFyaXN0L01TXFxuRXVjaGFyaXN0aWNcXG5FdWNsaWQvTVxcbkV1Z2VuZS9NXFxuRXVnZW5pYS9NXFxuRXVnZW5pZS9NXFxuRXVnZW5pby9NXFxuRXVsYS9NXFxuRXVsZXIvTVxcbkV1bWVuaWRlcy9NXFxuRXVuaWNlL01cXG5FdXBocmF0ZXMvTVxcbkV1clxcbkV1cmFzaWEvTVxcbkV1cmFzaWFuL01TXFxuRXVyaXBpZGVzL01cXG5FdXJvZG9sbGFyL1NNXFxuRXVyb3BhL01cXG5FdXJvcGUvTVxcbkV1cm9wZWFuL01TXFxuRXVyeWRpY2UvTVxcbkV1c3RhY2hpYW4vTVxcbkV1c3Rpcy9NXFxuRXV0ZXJwZS9NXFxuRXZhL01cXG5FdmFuL1NNXFxuRXZhbmdlbGljYWxcXG5FdmFuZ2VsaW5hL01cXG5FdmFuZ2VsaW5lL01cXG5FdmFuZ2VsaXN0L01cXG5FdmFucy9NXFxuRXZhbnN2aWxsZS9NXFxuRXZlL01cXG5FdmVseW4vTVxcbkV2ZW5raS9NXFxuRXZlclJlYWR5L01cXG5FdmVyZXN0L01cXG5FdmVyZXR0L01cXG5FdmVyZXR0ZS9NXFxuRXZlcmdsYWRlcy9NXFxuRXZlcnQvTVxcbkV2aWFuL01cXG5Fdml0YS9NXFxuRXdpbmcvTVxcbkV4Y2FsaWJ1ci9NXFxuRXhjZWRyaW4vTVxcbkV4Y2VsbGVuY3kvU01cXG5FeGNoZXF1ZXJcXG5FeGVyY3ljbGUvTVxcbkV4b2NldC9NXFxuRXhvZHVzL01cXG5FeHhvbi9NXFxuRXljay9NXFxuRXlyZS9NXFxuRXlzZW5jay9NXFxuRXpla2llbC9NXFxuRXpyYS9NXFxuRi9NRFxcbkZBQVxcbkZBUS9TTVxcbkZCSS9NXFxuRkNDXFxuRkRcXG5GREFcXG5GRElDL01cXG5GRFIvTVxcbkZIQS9NXFxuRklDQS9NXFxuRklGT1xcbkZMXFxuRk0vU01cXG5GTk1BL01cXG5GT0ZMXFxuRk9SVFJBTi9NXFxuRlBPXFxuRlNGL01cXG5GU0xJQ1xcbkZUQ1xcbkZVRC9TXFxuRldEXFxuRldJV1xcbkZZXFxuRllJXFxuRmFiZXJnZS9NXFxuRmFiaWFuL01TXFxuRmFjZWJvb2svTVxcbkZhZXJvZS9NXFxuRmFmbmlyL01cXG5GYWdpbi9NXFxuRmFoZC9NXFxuRmFocmVuaGVpdC9NXFxuRmFpcmJhbmtzL01cXG5GYWlyZmllbGQvTVxcbkZhaXJob3BlL01cXG5GYWlzYWwvTVxcbkZhaXNhbGFiYWQvTVxcbkZhaXRoL01cXG5GYWphcmRvL01cXG5GYWxhc2hhL01cXG5GYWxrbGFuZC9TTVxcbkZhbGtsYW5kcy9NXFxuRmFsbG9waWFuL01cXG5GYWxzdGFmZi9NXFxuRmFsd2VsbC9NXFxuRmFubmllL01cXG5GYW5ueS9NXFxuRmFyYWRheS9NXFxuRmFyZ28vTVxcbkZhcmxleS9NXFxuRmFybWVyL01cXG5GYXJtaW5ndG9uL01cXG5GYXJyYWd1dC9NXFxuRmFycmFraGFuL01cXG5GYXJyZWxsL01cXG5GYXJyb3cvTVxcbkZhcnNpL01cXG5GYXNzYmluZGVyL01cXG5GYXRhaC9NXFxuRmF0ZXMvTVxcbkZhdGhlci9TTVxcbkZhdGltYS9NXFxuRmF0aW1pZC9NXFxuRmF1bGtuZXIvTVxcbkZhdWxrbmVyaWFuL01cXG5GYXVudGxlcm95L01cXG5GYXVzdC9NXFxuRmF1c3RpYW4vTVxcbkZhdXN0aW5vL01cXG5GYXVzdHVzL01cXG5GYXdrZXMvTVxcbkZheS9NXFxuRmF5ZS9NXFxuRmF5ZXR0ZXZpbGxlL01cXG5GZS9NXFxuRmViL01cXG5GZWJydWFyeS9TTVxcbkZlZC9TTVxcbkZlZEV4L01cXG5GZWRlcmFsL01TXFxuRmVkZXJhbGlzdC9NXFxuRmVkZXJpY28vTVxcbkZlZHMvTVxcbkZlbGVjaWEvTVxcbkZlbGljZS9NXFxuRmVsaWNpYS9NXFxuRmVsaWNpdHkvTVxcbkZlbGlwZS9NXFxuRmVsaXgvTVxcbkZlbGxpbmkvTVxcbkZlbmlhbi9NXFxuRmVyYmVyL01cXG5GZXJkaW5hbmQvTVxcbkZlcmd1cy9NXFxuRmVyZ3Vzb24vTVxcbkZlcmxpbmdoZXR0aS9NXFxuRmVybWF0L01cXG5GZXJtaS9NXFxuRmVybi9NXFxuRmVybmFuZGV6L01cXG5GZXJuYW5kby9NXFxuRmVycmFyaS9NXFxuRmVycmFyby9NXFxuRmVycmVsbC9NXFxuRmVycmlzL01cXG5GZXlubWFuL01cXG5GZXovTVxcbkZpYXQvTVxcbkZpYmVyZ2xhcy9NXFxuRmlib25hY2NpL01cXG5GaWNodGUvTVxcbkZpZGVsL01cXG5GaWRvL01cXG5GaWVsZGluZy9NXFxuRmllbGRzL01cXG5GaWdhcm8vTVxcbkZpZ3Vlcm9hL01cXG5GaWppL01cXG5GaWppYW4vTVNcXG5GaWxpcGluby9NU1xcbkZpbGxtb3JlL01cXG5GaWxvZmF4L01cXG5GaW5jaC9NXFxuRmlubGFuZC9NXFxuRmlubGF5L01cXG5GaW5sZXkvTVxcbkZpbm4vU01cXG5GaW5uYm9nYWRvdHRpci9NXFxuRmlubmVnYW4vTVxcbkZpbm5pc2gvTVxcbkZpb25hL01cXG5GaXJlYmFzZS9NXFxuRmlyZWZveC9NXFxuRmlyZXN0b25lL01cXG5GaXNjaGVyL01cXG5GaXNoZXIvTVxcbkZpc2svTVxcbkZpdGNoL01cXG5GaXRjaGJ1cmcvTVxcbkZpdHpnZXJhbGQvTVxcbkZpdHpwYXRyaWNrL01cXG5GaXR6cm95L01cXG5GaXplYXUvTVxcbkZsYVxcbkZsYWdzdGFmZi9NXFxuRmxhbmFnYW4vTVxcbkZsYW5kZXJzL01cXG5GbGF0aGVhZFxcbkZsYXR0L01cXG5GbGF1YmVydC9NXFxuRmxlaXNjaGVyL01cXG5GbGVtaW5nL01cXG5GbGVtaXNoL01cXG5GbGV0Y2hlci9NXFxuRmxpbnQvTVxcbkZsaW50c3RvbmVzL01cXG5GbG8vTVxcbkZsb3JhL01cXG5GbG9yZW5jZS9NXFxuRmxvcmVudGluZS9NXFxuRmxvcmVzL01cXG5GbG9yaWRhL01cXG5GbG9yaWRhbi9NXFxuRmxvcmlkaWFuL1NNXFxuRmxvcmluZS9NXFxuRmxvcnNoZWltL01cXG5GbG9yeS9NXFxuRmxvc3NpZS9NXFxuRmxvd2Vycy9NXFxuRmxveWQvTVxcbkZseW5uL01cXG5GbS9NXFxuRm9jaC9NXFxuRm9ra2VyL01cXG5Gb2xleS9NXFxuRm9sZ2Vycy9NXFxuRm9sc29tL01cXG5Gb21hbGhhdXQvTVxcbkZvbmRhL01cXG5Gb29zYmFsbC9NXFxuRm9yYmVzL01cXG5Gb3JkL01cXG5Gb3JlbWFuL01cXG5Gb3Jlc3QvTVJcXG5Gb3Jlc3Rlci9NXFxuRm9ybWljYS9NU1xcbkZvcm1vc2EvTVxcbkZvcm1vc2FuL01cXG5Gb3JyZXN0L01cXG5Gb3JzdGVyL01cXG5Gb3J0YWxlemEvTVxcbkZvc3NlL01cXG5Gb3N0ZXIvTVxcbkZvdG9tYXQvTVxcbkZvdWNhdWx0L01cXG5Gb3VyaWVyL01cXG5Gb3VybmV5cm9uL01cXG5Gb3VydGhcXG5Gb3dsZXIvTVxcbkZveC9NU1xcbkZyL01EXFxuRnJhZ29uYXJkL01cXG5GcmFuL01cXG5GcmFuY2UvU01cXG5GcmFuY2VzL01cXG5GcmFuY2VzY2EvTVxcbkZyYW5jaW5lL01cXG5GcmFuY2lzL01cXG5GcmFuY2lzY2EvTVxcbkZyYW5jaXNjYW4vTVNcXG5GcmFuY2lzY28vTVxcbkZyYW5jay9NXFxuRnJhbmNvL01cXG5GcmFuY29pcy9NXFxuRnJhbmNvaXNlL01cXG5GcmFuY29waGlsZVxcbkZyYW5nbGFpcy9NXFxuRnJhbmsvU01cXG5GcmFua2VsL01cXG5GcmFua2Vuc3RlaW4vTVxcbkZyYW5rZm9ydC9NXFxuRnJhbmtmdXJ0L01SXFxuRnJhbmtmdXJ0ZXIvTVxcbkZyYW5raWUvTVxcbkZyYW5raXNoXFxuRnJhbmtsaW4vTVxcbkZyYW5rcy9NXFxuRnJhbm55L01cXG5GcmFuei9NXFxuRnJhc2VyL01cXG5GcmF1L01OXFxuRnJhdWxlaW5cXG5GcmF6aWVyL01cXG5GcmVkL01cXG5GcmVkYS9NXFxuRnJlZGRpZS9NXFxuRnJlZGR5L01cXG5GcmVkZXJpYy9NXFxuRnJlZGVyaWNrL01cXG5GcmVkZXJpY2tzYnVyZy9NXFxuRnJlZGVyaWN0b24vTVxcbkZyZWRyaWMvTVxcbkZyZWRyaWNrL01cXG5GcmVlbWFuL01cXG5GcmVlbWFzb24vU01cXG5GcmVlbWFzb25yeS9TTVxcbkZyZWV0b3duL01cXG5GcmVpZGEvTVxcbkZyZW1vbnQvTVxcbkZyZW5jaC9NU1xcbkZyZW5jaG1hbi9NXFxuRnJlbmNobWVuL01cXG5GcmVuY2h3b21hbi9NXFxuRnJlbmNod29tZW4vTVxcbkZyZW9uL01cXG5GcmVzbmVsL01cXG5GcmVzbm8vTVxcbkZyZXVkL01cXG5GcmV1ZGlhbi9NXFxuRnJleS9NXFxuRnJleWEvTVxcbkZyaS9NXFxuRnJpZGF5L1NNXFxuRnJpZWRhL01cXG5GcmllZGFuL01cXG5GcmllZG1hbi9NXFxuRnJpZWRtYW5uL01cXG5GcmllbmQvU01cXG5GcmlnZ2EvTVxcbkZyaWdpZGFpcmUvTVxcbkZyaXNiZWUvTVxcbkZyaXNjby9NXFxuRnJpc2lhbi9NU1xcbkZyaXRvL01cXG5Gcml0ei9NXFxuRnJvYmlzaGVyL01cXG5Gcm9kby9NXFxuRnJvaXNzYXJ0L01cXG5Gcm9tbS9NXFxuRnJvbmRlL01cXG5Gcm9udGVuYWMvTVxcbkZyb3N0L01cXG5Gcm9zdGJlbHQvTVxcbkZydW56ZS9NXFxuRnJ5L01cXG5GcnllL01cXG5GdWNocy9NXFxuRnVlbnRlcy9NXFxuRnVnZ2VyL01cXG5GdWppL01cXG5GdWppYW4vTVxcbkZ1aml0c3UvTVxcbkZ1aml3YXJhL01cXG5GdWppeWFtYS9NXFxuRnVrdW9rYS9NXFxuRnVrdXlhbWEvTVxcbkZ1bGFuaS9NXFxuRnVsYnJpZ2h0L01cXG5GdWxsZXIvTVxcbkZ1bGxlcnRvbi9NXFxuRnVsdG9uL01cXG5GdW5hZnV0aS9NXFxuRnVuZHkvTVxcbkZ1cmllcy9NXFxuRnVybWFuL01cXG5GdXJ0d2FuZ2xlci9NXFxuRnVzaHVuL01cXG5GdXpob3UvTVxcbkZ1enpidXN0ZXIvTVxcbkcvTU5SQlxcbkdBXFxuR0FPXFxuR0FUVC9NXFxuR0IvTVxcbkdDQy9NXFxuR0RQL01cXG5HRS9NXFxuR0VEXFxuR0hRL01cXG5HSHpcXG5HSVxcbkdJRlxcbkdJR09cXG5HTS9NXFxuR01BVFxcbkdNT1xcbkdNVC9NXFxuR05QL01cXG5HTlUvTVxcbkdPUC9NXFxuR1AvTVxcbkdQQVxcbkdQT1xcbkdQU1xcbkdQVVxcbkdTQVxcbkdURS9NXFxuR1VcXG5HVUkvTVxcbkdhL01cXG5HYWJsZS9NXFxuR2Fib24vTVxcbkdhYm9uZXNlL01cXG5HYWJvcm9uZS9NXFxuR2FicmllbC9NXFxuR2FicmllbGEvTVxcbkdhYnJpZWxsZS9NXFxuR2FjcnV4L01cXG5HYWRzZGVuL01cXG5HYWVhL01cXG5HYWVsL1NNXFxuR2FlbGljL01cXG5HYWdhcmluL01cXG5HYWdlL01cXG5HYWlhL01cXG5HYWlsL01cXG5HYWltYW4vTVxcbkdhaW5lcy9NXFxuR2FpbmVzdmlsbGUvTVxcbkdhaW5zYm9yb3VnaC9NXFxuR2FsYWhhZC9TTVxcbkdhbGFwYWdvcy9NXFxuR2FsYXRlYS9NXFxuR2FsYXRpYS9NXFxuR2FsYXRpYW5zL01cXG5HYWxheHlcXG5HYWxicmFpdGgvTVxcbkdhbGUvTVxcbkdhbGVuL01cXG5HYWxpYmkvTVxcbkdhbGlsZWFuL1NNXFxuR2FsaWxlZS9NXFxuR2FsaWxlby9NXFxuR2FsbC9NXFxuR2FsbGFnaGVyL01cXG5HYWxsZWdvcy9NXFxuR2FsbGljL01cXG5HYWxsaWNpc20vU01cXG5HYWxsby9NXFxuR2FsbG93YXkvTVxcbkdhbGx1cC9NXFxuR2Fsb2lzL01cXG5HYWxzd29ydGh5L01cXG5HYWx2YW5pL01cXG5HYWx2ZXN0b24vTVxcbkdhbWFcXG5HYW1heS9NXFxuR2FtYmlhL01cXG5HYW1iaWFuL1NNXFxuR2FtYmxlL01cXG5HYW1vdy9NXFxuR2FuZGFsZi9NXFxuR2FuZGhpL01cXG5HYW5kaGlhbi9NXFxuR2FuZXNoYS9NXFxuR2FuZ2VzL01cXG5HYW5ndG9rL01cXG5HYW5zdS9NXFxuR2FudHJ5L01cXG5HYW55bWVkZS9NXFxuR2FwL01cXG5HYXJiby9NXFxuR2FyY2lhL01cXG5HYXJkbmVyL01cXG5HYXJldGgvTVxcbkdhcmZpZWxkL01cXG5HYXJmdW5rZWwvTVxcbkdhcmdhbnR1YS9NXFxuR2FyaWJhbGRpL01cXG5HYXJsYW5kL01cXG5HYXJuZXIvTVxcbkdhcnJldHQvTVxcbkdhcnJpY2svTVxcbkdhcnJpc29uL01cXG5HYXJyeS9NXFxuR2FydGgvTVxcbkdhcnZleS9NXFxuR2FyeS9NXFxuR2FyemEvTVxcbkdhc2NvbnkvTVxcbkdhc3Nlci9NXFxuR2FzdG9uaWEvTVxcbkdhc3Ryb2VudGVyb2xvZ3lcXG5HYXRlcy9NXFxuR2F0bGluZy9NXFxuR2F0b3JhZGUvTVxcbkdhdHNieS9NXFxuR2F0dW4vTVxcbkdhdWd1aW4vTVxcbkdhdWwvU01cXG5HYXVsaXNoXFxuR2F1c3MvTVxcbkdhdXNzaWFuL01cXG5HYXV0YW1hL01cXG5HYXV0aWVyL01cXG5HYXZpbi9NXFxuR2F3YWluL01cXG5HYXkvTVxcbkdheWxlL01cXG5HYXphL01cXG5HYXppYW50ZXAvTVxcbkdkL01cXG5HZGFuc2svTVxcbkdlL01cXG5HZWZmZW4vTVxcbkdlaGVubmEvTVxcbkdlaHJpZy9NXFxuR2VpZ2VyL01cXG5HZWxidmllaC9NXFxuR2VsbGVyL01cXG5HZW1pbmkvTVNcXG5HZW4vTVxcbkdlbmEvTVxcbkdlbmFyby9NXFxuR2VuZS9NXFxuR2VuZXNpcy9NXFxuR2VuZXQvTVxcbkdlbmV2YS9NXFxuR2VuZXZpZXZlL01cXG5HZW5naGlzL01cXG5HZW5vYS9TTVxcbkdlbnRvby9NXFxuR2VudHJ5L01cXG5HZW8vTVxcbkdlb2ZmcmV5L01cXG5HZW9yZ2UvTVNcXG5HZW9yZ2V0b3duL01cXG5HZW9yZ2V0dGUvTVxcbkdlb3JnaWEvTVxcbkdlb3JnaWFuL01TXFxuR2VvcmdpbmEvTVxcbkdlci9NXFxuR2VyYWxkL01cXG5HZXJhbGRpbmUvTVxcbkdlcmFyZC9NXFxuR2VyYXJkby9NXFxuR2VyYmVyL01cXG5HZXJlL01cXG5HZXJpdG9sL01cXG5HZXJtYW4vTVNcXG5HZXJtYW5pYy9NXFxuR2VybWFueS9NXFxuR2Vyb25pbW8vTVxcbkdlcnJ5L01cXG5HZXJzaHdpbi9NXFxuR2VydHJ1ZGUvTVxcbkdlc3RhcG8vU01cXG5HZXRoc2VtYW5lL01cXG5HZXR0eS9NXFxuR2V0dHlzYnVyZy9NXFxuR2V3dXJ6dHJhbWluZXIvTVxcbkdoYW5hL01cXG5HaGFuYWlhblxcbkdoYXRzL01cXG5HaGF6dmFuaWQvTVxcbkdoZW50L01cXG5HaGliZWxsaW5lL01cXG5HaWFjb21ldHRpL01cXG5HaWFubmluaS9NXFxuR2lhdXF1ZS9NXFxuR2liYm9uL01cXG5HaWJicy9NXFxuR2licmFsdGFyL01TXFxuR2lic29uL01cXG5HaWRlL01cXG5HaWRlb24vTVxcbkdpZWxndWQvTVxcbkdpZW5haC9NXFxuR2lsL01cXG5HaWxhL01cXG5HaWxiZXJ0L01cXG5HaWxiZXJ0by9NXFxuR2lsY2hyaXN0L01cXG5HaWxkYS9NXFxuR2lsZWFkL01cXG5HaWxlcy9NXFxuR2lsZ2FtZXNoL01cXG5HaWxsL01cXG5HaWxsZXNwaWUvTVxcbkdpbGxldHRlL01cXG5HaWxsaWFtL01cXG5HaWxsaWFuL01cXG5HaWxsaWdhbi9NXFxuR2lsbWFuXFxuR2lsbW9yZS9NXFxuR2lscm95L01cXG5HaW5hL01cXG5HaW5nZXIvTVxcbkdpbmdyaWNoL01cXG5HaW5ueS9NXFxuR2luby9NXFxuR2luc2JlcmcvTVxcbkdpbnNidXJnL01cXG5HaW5zdS9NXFxuR2lvcmdpb25lL01cXG5HaW90dG8vTVxcbkdpb3Zhbm5pL01cXG5HaXJhdWRvdXgvTVxcbkdpc2VsbGUvTVxcbkdpc2gvTVxcbkdpdEh1Yi9NXFxuR2l1bGlhbmkvTVxcbkdpdXNlcHBlL01cXG5HaXphL01cXG5Ha1xcbkdsYWRzdG9uZS9NU1xcbkdsYWR5cy9NXFxuR2xhc2VyL01cXG5HbGFzZ293L01cXG5HbGFzcy9NXFxuR2xhc3RvbmJ1cnkvTVxcbkdsYXN3ZWdpYW4vU01cXG5HbGF4by9NXFxuR2xlYXNvbi9NXFxuR2xlbi9NXFxuR2xlbmRhL01cXG5HbGVuZGFsZVxcbkdsZW5saXZldC9NXFxuR2xlbm4vTVxcbkdsZW5uYS9NXFxuR2xvcmlhL01cXG5HbG91Y2VzdGVyL01cXG5HbG92ZXIvTVxcbkdub3N0aWMvTVxcbkdub3N0aWNpc20vTVxcbkdudVBHXFxuR29hL01cXG5Hb2JpL01cXG5Hb2QvTVxcbkdvZGFyZC9NXFxuR29kZGFyZC9NXFxuR29kZWwvTVxcbkdvZGhlYWQvTVxcbkdvZGl2YS9NXFxuR29kb3QvTVxcbkdvZHNwZWVkL1NNXFxuR29kdGhhYWIvTVxcbkdvZHVub3YvTVxcbkdvZHppbGxhL01cXG5Hb2ViYmVscy9NXFxuR29lcmluZy9NXFxuR29ldGhhbHMvTVxcbkdvZXRoZS9NXFxuR29mZi9NXFxuR29nL01cXG5Hb2dvbC9NXFxuR29pYW5pYS9NXFxuR29sYW4vTVxcbkdvbGNvbmRhL01cXG5Hb2xkYS9NXFxuR29sZGJlcmcvTVxcbkdvbGRlbi9NXFxuR29sZGllL01cXG5Hb2xkaWxvY2tzL01cXG5Hb2xkaW5nL01cXG5Hb2xkbWFuL01cXG5Hb2xkc2Jvcm8vTVxcbkdvbGRzbWl0aC9NXFxuR29sZHdhdGVyL01cXG5Hb2xkd3luL01cXG5Hb2xnaS9NXFxuR29sZ290aGEvTVxcbkdvbGlhdGgvTVxcbkdvbWV6L01cXG5Hb21vcnJhaC9NXFxuR29tcGVycy9NXFxuR29tdWxrYS9NXFxuR29uZHdhbmFsYW5kL01cXG5Hb256YWxlcy9NXFxuR29uemFsZXovTVxcbkdvbnphbG8vTVxcbkdvb2QvTVxcbkdvb2RhbGwvTVxcbkdvb2RlL01cXG5Hb29kbWFuL01cXG5Hb29kcmljaC9NXFxuR29vZHdpbGwvTVxcbkdvb2R3aW4vTVxcbkdvb2R5ZWFyL01cXG5Hb29nbGUvTVxcbkdvb2xhZ29uZy9NXFxuR29waGVyXFxuR29yYmFjaGV2L01cXG5Hb3JkaWFuL01cXG5Hb3JkaW1lci9NXFxuR29yZG9uL01cXG5Hb3JlL01cXG5Hb3Jlbi9NXFxuR29yZXkvTVxcbkdvcmdhcy9NXFxuR29yZ29uL01cXG5Hb3Jnb256b2xhL01cXG5Hb3JreS9NXFxuR29zcGVsL01TXFxuR290ZWJvcmcvTVxcbkdvdGgvTVxcbkdvdGhhbS9NXFxuR290aGljL01TXFxuR290aHNcXG5Hb3VkYS9TTVxcbkdvdWxkL01cXG5Hb3Vub2QvTVxcbkdvdmVybm9yXFxuR295YS9NXFxuR3IvQlxcbkdyYWJsZS9NXFxuR3JhY2NodXMvTVxcbkdyYWNlL01cXG5HcmFjZWxhbmQvTVxcbkdyYWNpZS9NXFxuR3JhY2llbGEvTVxcbkdyYWR5L01cXG5HcmFmZmlhcy9NXFxuR3JhZnRvbi9NXFxuR3JhaGFtL01cXG5HcmFoYW1lL01cXG5HcmFpbC9NXFxuR3JhbW15L01cXG5HcmFtcGlhbnMvTVxcbkdyYW5hZGEvTVxcbkdyYW50L01cXG5HcmFzcy9NXFxuR3JhdmVzL01cXG5HcmF5L01cXG5HcmF5c2xha2UvTVxcbkdyZWNpYW4vTVxcbkdyZWVjZS9NXFxuR3JlZWsvU01cXG5HcmVlbGV5L01cXG5HcmVlbi9TTVxcbkdyZWVuZS9NXFxuR3JlZW5sYW5kL01cXG5HcmVlbmxhbmRpY1xcbkdyZWVucGVhY2UvTVxcbkdyZWVuc2Jvcm8vTVxcbkdyZWVuc2xlZXZlcy9NXFxuR3JlZW5zcGFuL01cXG5HcmVlbnZpbGxlL01cXG5HcmVlbndpY2gvTVxcbkdyZWVyL01cXG5HcmVnL01cXG5HcmVnZy9NXFxuR3JlZ29yaWFuL01cXG5HcmVnb3Jpby9NXFxuR3JlZ29yeS9NXFxuR3JlbmFkYS9NXFxuR3JlbmFkaWFuL01TXFxuR3JlbmFkaW5lcy9NXFxuR3JlbmRlbC9NXFxuR3Jlbm9ibGUvTVxcbkdyZXNoYW0vTVxcbkdyZXRhL01cXG5HcmV0Y2hlbi9NXFxuR3JldGVsL01cXG5HcmV0emt5L01cXG5HcmV5L01cXG5HcmllZy9NXFxuR3JpZmZpbi9NXFxuR3JpZmZpdGgvTVxcbkdyaW1lcy9NXFxuR3JpbW0vTVxcbkdyaW5jaC9NXFxuR3Jpcy9NXFxuR3JvbXlrby9NXFxuR3JvcGl1cy9NXFxuR3Jvc3MvTVxcbkdyb3N6L01cXG5Hcm90aXVzL01cXG5Hcm92ZXIvTVxcbkdyb3pueVxcbkdydW1tYW4vTVxcbkdydW5keS9NXFxuR3J1bmV3YWxkL01cXG5HcnVzL01cXG5HcnV5ZXJlL1NNXFxuR3VhZGFsYWphcmEvTVxcbkd1YWRhbGNhbmFsL01cXG5HdWFkYWxxdWl2aXIvTVxcbkd1YWRhbHVwZS9NXFxuR3VhZGVsb3VwZS9NXFxuR3VhbGxhdGlyaS9NXFxuR3VhbS9NXFxuR3VhbWFuaWFuXFxuR3Vhbmdkb25nL01cXG5HdWFuZ3pob3UvTVxcbkd1YW50YW5hbW8vTVxcbkd1YXJhbmkvTVxcbkd1YXJuaWVyaS9NXFxuR3VhdGVtYWxhL01cXG5HdWF0ZW1hbGFuL01TXFxuR3VheWFtYS9NXFxuR3VheWFxdWlsL01cXG5HdWNjaS9NXFxuR3VlbHBoL01cXG5HdWVybnNleS9NU1xcbkd1ZXJyYS9NXFxuR3VlcnJlcm8vTVxcbkd1ZXZhcmEvTVxcbkd1Z2dlbmhlaW0vTVxcbkd1aWFuYS9NXFxuR3VpZG9cXG5HdWlsbGVybW8vTVxcbkd1aW5lYS9NXFxuR3VpbmVhbi9NU1xcbkd1aW5ldmVyZS9NXFxuR3Vpbm5lc3MvTVxcbkd1aXlhbmcvTVxcbkd1aXpob3UvTVxcbkd1aXpvdC9NXFxuR3VqYXJhdC9NXFxuR3VqYXJhdGkvTVxcbkd1anJhbndhbGEvTVxcbkd1bGZwb3J0L01cXG5HdWxsYWgvTVxcbkd1bGxpdmVyL01cXG5HdW1iZWwvTVxcbkd1bnRoZXIvTVxcbkd1b2ZlbmcvTVxcbkd1cHRhL01cXG5HdXJraGEvTVxcbkd1cy9NXFxuR3VzdGF2L01cXG5HdXN0YXZvL01cXG5HdXN0YXZ1cy9NXFxuR3V0ZW5iZXJnL01cXG5HdXRocmllL01cXG5HdXRpZXJyZXovTVxcbkd1eS9NXFxuR3V5YW5hL01cXG5HdXlhbmVzZS9NXFxuR3V6bWFuL01cXG5Hd2FsaW9yL01cXG5Hd2VuL01cXG5Hd2VuZG9saW5lL01cXG5Hd2VuZG9seW4vTVxcbkd3eW4vTVxcbkd5cHN5L1NNXFxuSC9NXFxuSEJPL01cXG5IQmFzZS9NXFxuSEREXFxuSERNSVxcbkhEVFZcXG5IRi9NXFxuSEhTXFxuSElcXG5ISVYvTVxcbkhNXFxuSE1PL01cXG5ITVNcXG5IT1ZcXG5IUC9NXFxuSFBWXFxuSFEvTVxcbkhSXFxuSFJIXFxuSFNcXG5IU0JDL01cXG5IU1RcXG5IVFxcbkhUTUwvTVxcbkhUVFBcXG5IVUQvTVxcbkhhL01cXG5IYWFzL01cXG5IYWJha2t1ay9NXFxuSGFiZXIvTVxcbkhhZGFyL01cXG5IYWRlcy9NXFxuSGFkb29wL01cXG5IYWRyaWFuL01cXG5IYWZpei9NXFxuSGFnYXIvTVxcbkhhZ2Vyc3Rvd24vTVxcbkhhZ2dhaS9NXFxuSGFnaW9ncmFwaGEvTVxcbkhhZ3VlL01cXG5IYWhuL01cXG5IYWlkYS9TTVxcbkhhaWZhL01cXG5IYWluYW4vTVxcbkhhaXBob25nL01cXG5IYWl0aS9NXFxuSGFpdGlhbi9NU1xcbkhha2thL01cXG5IYWtsdXl0L01cXG5IYWwvU01cXG5IYWxkYW5lL01cXG5IYWxlL01cXG5IYWxlYWthbGEvTVxcbkhhbGV5L01cXG5IYWxpZmF4L01cXG5IYWxsL01cXG5IYWxsZXkvTVxcbkhhbGxpYnVydG9uL01cXG5IYWxsaWUvTVxcbkhhbGxtYXJrL01cXG5IYWxsb3dlZW4vTVNcXG5IYWxsc3RhdHQvTVxcbkhhbG9uL01cXG5IYWxzL01cXG5IYWxzZXkvTVxcbkhhbS9NXFxuSGFtYW4vTVxcbkhhbWJ1cmcvTVNcXG5IYW1odW5nL01cXG5IYW1pbGNhci9NXFxuSGFtaWxsL01cXG5IYW1pbHRvbi9NXFxuSGFtaWx0b25pYW4vTVxcbkhhbWl0aWMvTVxcbkhhbWxldC9NXFxuSGFtbGluL01cXG5IYW1tYXJza2pvbGQvTVxcbkhhbW1lcnN0ZWluL01cXG5IYW1tZXR0L01cXG5IYW1tb25kL01cXG5IYW1tdXJhYmkvTVxcbkhhbXBzaGlyZS9NXFxuSGFtcHRvbi9NXFxuSGFtc3VuL01cXG5IYW4vU01cXG5IYW5jb2NrL01cXG5IYW5kZWwvTVxcbkhhbmR5L01cXG5IYW5leS9NXFxuSGFuZm9yZC9NXFxuSGFuZ3VsL01cXG5IYW5nemhvdS9NXFxuSGFuay9NXFxuSGFubmEvTVxcbkhhbm5haC9NXFxuSGFubmliYWwvTVxcbkhhbm9pL01cXG5IYW5vdmVyL01cXG5IYW5vdmVyaWFuL01cXG5IYW5zL01OXFxuSGFuc2VsL01cXG5IYW5zZW4vTVxcbkhhbnNvbi9NXFxuSGFudWthXFxuSGFudWtrYWgvTVxcbkhhbnVra2Foc1xcbkhhcHNidXJnL01cXG5IYXJhcmUvTVxcbkhhcmJpbi9NXFxuSGFyZGluL01cXG5IYXJkaW5nL01cXG5IYXJkeS9NXFxuSGFyZ3JlYXZlcy9NXFxuSGFybGFuL01cXG5IYXJsZW0vTVxcbkhhcmxlcXVpbi9NXFxuSGFybGV5L01cXG5IYXJsaW5nZW4vTVxcbkhhcmxvdy9NXFxuSGFybW9uL01cXG5IYXJvbGQvTVxcbkhhcnBlci9NXFxuSGFycHkvU01cXG5IYXJyZWxsL01cXG5IYXJyaWV0L01cXG5IYXJyaWV0dC9NXFxuSGFycmluZ3Rvbi9NXFxuSGFycmlzL01cXG5IYXJyaXNidXJnL01cXG5IYXJyaXNvbi9NXFxuSGFycmlzb25idXJnL01cXG5IYXJyb2RzL01cXG5IYXJyeS9NXFxuSGFydC9NXFxuSGFydGUvTVxcbkhhcnRmb3JkL01cXG5IYXJ0bGluZS9NXFxuSGFydG1hbi9NXFxuSGFydmFyZC9NXFxuSGFydmV5L01cXG5IYXNicm8vTVxcbkhhc2lkaW0vTVxcbkhhc2tlbGwvTVxcbkhhc3RpbmdzL01cXG5IYXRmaWVsZC9NXFxuSGF0aGF3YXkvTVxcbkhhdHNoZXB1dC9NXFxuSGF0dGVyYXMvTVxcbkhhdHRpZS9NXFxuSGF0dGllc2J1cmcvTVxcbkhhdXB0bWFubi9NXFxuSGF1c2EvTVxcbkhhdXNkb3JmZi9NXFxuSGF2YW5hL01TXFxuSGF2YXJ0aS9NXFxuSGF2ZWwvTVxcbkhhdm9saW5lL01cXG5IYXdcXG5IYXdhaWkvTVxcbkhhd2FpaWFuL1NNXFxuSGF3a2luZy9NXFxuSGF3a2lucy9NXFxuSGF3a3NcXG5IYXd0aG9ybmUvTVxcbkhheS9TTVxcbkhheWRlbi9NXFxuSGF5ZG4vTVxcbkhheWVrL01cXG5IYXllcy9NXFxuSGF5bmVzL01cXG5IYXlzL01cXG5IYXl3YXJkL01cXG5IYXl3b29kL01cXG5IYXl3b3J0aC9NXFxuSGF6ZWwvTVxcbkhhemxldG9uL01cXG5IYXpsaXR0L01cXG5IZS9NXFxuSGVhZC9NXFxuSGVhcnN0L01cXG5IZWF0aC9NUlxcbkhlYXRoZXIvTVxcbkhlYXZpc2lkZS9NXFxuSGViXFxuSGViZS9NXFxuSGViZWkvTVxcbkhlYmVydC9NXFxuSGVicmFpYy9NXFxuSGVicmFpc20vU01cXG5IZWJyZXcvTVNcXG5IZWJyZXdzL01cXG5IZWJyaWRlcy9NXFxuSGVjYXRlL01cXG5IZWN0b3IvTVxcbkhlY3ViYS9NXFxuSGVlcC9NXFxuSGVmbmVyL01cXG5IZWdlbC9NXFxuSGVnZWxpYW4vTVxcbkhlZ2lyYS9NXFxuSGVpZGVnZ2VyL01cXG5IZWlkZWxiZXJnL01cXG5IZWlkaS9NXFxuSGVpZmV0ei9NXFxuSGVpbG9uZ2ppYW5nL01cXG5IZWltbGljaC9NXFxuSGVpbmUvTVxcbkhlaW5la2VuL01cXG5IZWlubGVpbi9NXFxuSGVpbnJpY2gvTVxcbkhlaW56L01cXG5IZWlzZW5iZXJnL01cXG5IZWlzbWFuL01cXG5IZWxlbi9NXFxuSGVsZW5hL01cXG5IZWxlbmUvTVxcbkhlbGdhL01cXG5IZWxpY29iYWN0ZXJcXG5IZWxpY29uL01cXG5IZWxpb3BvbGlzL01cXG5IZWxpb3MvTVxcbkhlbGxlbmUvU01cXG5IZWxsZW5pYy9NXFxuSGVsbGVuaXNtL01TXFxuSGVsbGVuaXN0XFxuSGVsbGVuaXN0aWMvTVxcbkhlbGxlbml6YXRpb24vTVxcbkhlbGxlbml6ZS9NXFxuSGVsbGVyL01cXG5IZWxsZXNwb250L01cXG5IZWxsbWFuL01cXG5IZWxtaG9sdHovTVxcbkhlbG9pc2UvTVxcbkhlbHNpbmtpL01cXG5IZWx2ZXRpYW5cXG5IZWx2ZXRpdXMvTVxcbkhlbWV0L01cXG5IZW1pbmd3YXkvTVxcbkhlbmFuL01cXG5IZW5jaC9NXFxuSGVuZGVyc29uL01cXG5IZW5kcmljay9NU1xcbkhlbmRyaWNrcy9NXFxuSGVuZHJpeC9NXFxuSGVubGV5L01cXG5IZW5uZXNzeS9NXFxuSGVucmkvTVxcbkhlbnJpZXR0YS9NXFxuSGVucmlrL01cXG5IZW5yeS9NXFxuSGVuc2xleS9NXFxuSGVuc29uL01cXG5IZXBidXJuL01cXG5IZXBoYWVzdHVzL01cXG5IZXBwbGV3aGl0ZS9NXFxuSGVyYS9NXFxuSGVyYWNsZXMvTVxcbkhlcmFjbGl0dXMvTVxcbkhlcmFrbGVzL01cXG5IZXJiYXJ0L01cXG5IZXJiZXJ0L01cXG5IZXJjdWxhbmV1bS9NXFxuSGVyY3VsZWFuXFxuSGVyY3VsZXMvTVxcbkhlcmRlci9NXFxuSGVyZWZvcmQvU01cXG5IZXJlcm8vTVxcbkhlcmliZXJ0by9NXFxuSGVybWFuL01cXG5IZXJtYXBocm9kaXR1cy9NXFxuSGVybWVzL01cXG5IZXJtaW5pYS9NXFxuSGVybWl0YWdlL01cXG5IZXJtaXRlL01cXG5IZXJtb3NpbGxvL01cXG5IZXJuYW5kZXovTVxcbkhlcm9kL01cXG5IZXJvZG90dXMvTVxcbkhlcm9rdS9NXFxuSGVyci9NR1xcbkhlcnJlcmEvTVxcbkhlcnJpY2svTVxcbkhlcnJpbmcvTVxcbkhlcnNjaGVsL01cXG5IZXJzZXkvTVxcbkhlcnNoZWwvTVxcbkhlcnNoZXkvTVxcbkhlcnR6L01cXG5IZXJ0enNwcnVuZy9NXFxuSGVyemVnb3ZpbmEvTVxcbkhlcnpsL01cXG5IZXNodmFuL01cXG5IZXNpb2QvTVxcbkhlc3BlcmlhL01cXG5IZXNwZXJ1cy9NXFxuSGVzcy9NXFxuSGVzc2UvTVxcbkhlc3NpYW4vTVxcbkhlc3Rlci9NXFxuSGVzdG9uL01cXG5IZXR0aWUvTVxcbkhld2l0dC9NXFxuSGV3bGV0dC9NXFxuSGV5ZXJkYWhsL01cXG5IZXl3b29kL01cXG5IZXpib2xsYWgvTVxcbkhlemVraWFoL01cXG5IZi9NXFxuSGcvTVxcbkhpYWxlYWgvTVxcbkhpYXdhdGhhL01cXG5IaWJlcm5pYS9NXFxuSGliZXJuaWFuXFxuSGlja21hbi9NXFxuSGlja29rL01cXG5IaWNrb3J5L01cXG5IaWNrcy9NXFxuSGllcm9ueW11cy9NXFxuSGlnYXNoaW9zYWthXFxuSGlnZ2lucy9NXFxuSGlnaGxhbmRlci9TTVxcbkhpZ2hsYW5kc1xcbkhpZ2huZXNzL01cXG5IaWdodHN0b3duL01cXG5IaWxhcmlvL01cXG5IaWxhcnkvTVxcbkhpbGJlcnQvTVxcbkhpbGRhL01cXG5IaWxkZWJyYW5kL01cXG5IaWxmaWdlci9NXFxuSGlsbC9NXFxuSGlsbGFyeS9NXFxuSGlsbGVsL01cXG5IaWx0b24vTVxcbkhpbWFsYXlhL1NNXFxuSGltYWxheWFuXFxuSGltYWxheWFzL01cXG5IaW1tbGVyL01cXG5IaW5heWFuYS9NXFxuSGluZGVtaXRoL01cXG5IaW5kZW5idXJnL01cXG5IaW5kaS9NXFxuSGluZHUvU01cXG5IaW5kdWlzbS9TTVxcbkhpbmR1c3Rhbi9NXFxuSGluZHVzdGFuaS9TTVxcbkhpbmVzL01cXG5IaW5lc3ZpbGxlL01cXG5IaW50b24vTVxcbkhpcHBhcmNodXMvTVxcbkhpcHBvY3JhdGVzL01cXG5IaXBwb2NyYXRpYy9NXFxuSGlyYW0vTVxcbkhpcm9idW1pL01cXG5IaXJvaGl0by9NXFxuSGlyb3NoaW1hL01cXG5IaXNwYW5pYy9TTVxcbkhpc3BhbmlvbGEvTVxcbkhpc3MvTVxcbkhpdGFjaGkvTVxcbkhpdGNoY29jay9NXFxuSGl0bGVyL01TXFxuSGl0dGl0ZS9TTVxcbkhtb25nL01cXG5Iby9NXFxuSG9iYXJ0L01cXG5Ib2JiZXMvTVxcbkhvYmJzL01cXG5Ib2NrbmV5L01cXG5Ib2RnZS9TTVxcbkhvZGdlcy9NXFxuSG9kZ2tpbi9NXFxuSG9mZi9NXFxuSG9mZmEvTVxcbkhvZmZtYW4vTVxcbkhvZnN0YWR0ZXIvTVxcbkhvZ2FuL01cXG5Ib2dhcnRoL01cXG5Ib2d3YXJ0cy9NXFxuSG9oZW5sb2hlL01cXG5Ib2hlbnN0YXVmZW4vTVxcbkhvaGVuem9sbGVybi9NXFxuSG9oaG90L01cXG5Ib2hva2FtL01cXG5Ib2trYWlkby9NXFxuSG9rdXNhaS9NXFxuSG9sYmVpbi9NXFxuSG9sY29tYi9NXFxuSG9sZGVuL01cXG5Ib2xkZXIvTVxcbkhvbGlkYXkvTVxcbkhvbGluZXNzXFxuSG9sbGFuZC9aU01SXFxuSG9sbGFuZGVyL01cXG5Ib2xsZXJpdGgvTVxcbkhvbGxleS9NXFxuSG9sbGllL01cXG5Ib2xsaXMvTVxcbkhvbGxvd2F5L01cXG5Ib2xseS9NXFxuSG9sbHl3b29kL01cXG5Ib2xtYW4vTVxcbkhvbG1lcy9NXFxuSG9sb2NhdXN0L01cXG5Ib2xvY2VuZS9NXFxuSG9sc3QvTVxcbkhvbHN0ZWluL1NNXFxuSG9sdC9NXFxuSG9tZXIvTVxcbkhvbWVyaWMvTVxcbkhvblxcbkhvbmRhL01cXG5Ib25kdXJhbi9NU1xcbkhvbmR1cmFzL01cXG5Ib25lY2tlci9NXFxuSG9uZXl3ZWxsL01cXG5Ib25nXFxuSG9uaWFyYS9NXFxuSG9ub2x1bHUvTVxcbkhvbm9yYWJsZVxcbkhvbnNodS9NXFxuSG9vZC9NXFxuSG9va2UvUk1cXG5Ib29rZXIvTVxcbkhvb3Blci9NXFxuSG9vc2llci9NU1xcbkhvb3RlcnMvTVxcbkhvb3Zlci9NU1xcbkhvcGUvTVxcbkhvcGV3ZWxsL01cXG5Ib3BpL1NNXFxuSG9wa2lucy9NXFxuSG9wcGVyL01cXG5Ib3JhY2UvTVxcbkhvcmFjaW8vTVxcbkhvcmF0aW8vTVxcbkhvcm1lbC9NXFxuSG9ybXV6L01cXG5Ib3JuL01cXG5Ib3JuYmxvd2VyL01cXG5Ib3JuZS9NXFxuSG9yb3dpdHovTVxcbkhvcnRoeS9NXFxuSG9ydG9uL01cXG5Ib3J1cy9NXFxuSG9zZWEvTVxcbkhvc3QvU01cXG5Ib3Rwb2ludC9NXFxuSG90dGVudG90L1NNXFxuSG91ZGluaS9NXFxuSG91bWEvTVxcbkhvdXNlL01cXG5Ib3VzbWFuL01cXG5Ib3VzdG9uL01cXG5Ib3V5aG5obm0vTVxcbkhvdmhhbmVzcy9NXFxuSG93YXJkL01cXG5Ib3dlL01cXG5Ib3dlbGwvTVNcXG5Ib3dlbGxzL01cXG5Ib3dyYWhcXG5Ib3lsZS9NXFxuSHJvdGhnYXIvTVxcbkh0c1xcbkh1YW5nL01cXG5IdWJiYXJkL01cXG5IdWJibGUvTVxcbkh1YmVpL01cXG5IdWJlci9NXFxuSHViZXJ0L01cXG5IdWNrL01cXG5IdWRkZXJzZmllbGRcXG5IdWRzb24vTVxcbkh1ZXJ0YS9NXFxuSHVleS9NXFxuSHVmZi9NXFxuSHVmZm1hbi9NXFxuSHVnZ2lucy9NXFxuSHVnaC9NU1xcbkh1Z2hlcy9NXFxuSHVnby9NXFxuSHVndWVub3QvTVNcXG5IdWkvTVxcbkh1aXR6aWxvcG90Y2hsaS9NXFxuSHVsbC9NXFxuSHVtYmVydG8vTVxcbkh1bWJvbGR0L01cXG5IdW1lL01cXG5IdW1tZWwvTVxcbkh1bW1lci9NXFxuSHVtcGhyZXkvU01cXG5IdW12ZWUvTVxcbkh1bi9TTVxcbkh1bmFuL01cXG5IdW5nL01cXG5IdW5nYXJpYW4vU01cXG5IdW5nYXJ5L01cXG5IdW5zcGVsbC9NXFxuSHVudC9NUlxcbkh1bnRlci9NXFxuSHVudGluZ3Rvbi9NXFxuSHVudGxleS9NXFxuSHVudHN2aWxsZS9NXFxuSHVyZC9NXFxuSHVybGV5L01cXG5IdXJvbi9NXFxuSHVyc3QvTVxcbkh1cy9NXFxuSHVzc2Vpbi9NXFxuSHVzc2VybC9NXFxuSHVzc2l0ZS9NXFxuSHVzdG9uL01cXG5IdXRjaGluc29uL01cXG5IdXR0b24vTVxcbkh1dHUvTVxcbkh1eGxleS9NXFxuSHV5Z2Vucy9NXFxuSHlhZGVzL01cXG5IeWRlL01cXG5IeWRlcmFiYWQvTVxcbkh5ZHJhL01cXG5IeW1lbi9NXFxuSHlwZXJpb24vTVxcbkh5dW5kYWkvTVxcbkh6L01cXG5JJ2RcXG5JJ2xsXFxuSSdtXFxuSSd2ZVxcbkkvTVxcbklBXFxuSUJNL01cXG5JQ0JNL1NNXFxuSUNDXFxuSUNVXFxuSUQvU01cXG5JREVcXG5JRVxcbklFRFxcbklFRUVcXG5JS0VBL01cXG5JTFxcbklNRi9NXFxuSU1IT1xcbklNTlNIT1xcbklNT1xcbklOXFxuSU5HL01cXG5JTlJJXFxuSU5TXFxuSU9VL01cXG5JUFxcbklQQVxcbklQT1xcbklRL01cXG5JUkEvU01cXG5JUkNcXG5JUlMvTVxcbklTQk5cXG5JU0lTXFxuSVNPL01cXG5JU1BcXG5JU1NcXG5JVFxcbklVRFxcbklWL1NNXFxuSVZGXFxuSWFcXG5JYWNjb2NhL01cXG5JYWdvL01cXG5JYW4vTVxcbklhcGV0dXMvTVxcbkliYWRhbi9NXFxuSWJlcmlhL01cXG5JYmVyaWFuL01cXG5JYml6YS9NXFxuSWJsaXMvTVxcbkliby9NXFxuSWJzZW4vTVxcbkljYWhuL01cXG5JY2FydXMvTVxcbkljZVxcbkljZWxhbmQvTVJaXFxuSWNlbGFuZGVyL01cXG5JY2VsYW5kaWMvTVxcbklkYS9NXFxuSWRhaG8vU01cXG5JZGFob2FuL01TXFxuSWRhaG9lc1xcbklleWFzdS9NXFxuSWduYWNpby9NXFxuSWduYXRpdXMvTVxcbklnb3IvTVxcbklndWFzc3UvTVxcbklqc3NlbG1lZXIvTVxcbklrZS9NXFxuSWtobmF0b24vTVxcbklsYS9NXFxuSWxlbmUvTVxcbklsaWFkL1NNXFxuSWxsXFxuSWxsaW5vaXMvTVxcbklsbGlub2lzYW4vTVNcXG5JbGx1bWluYXRpL01cXG5JbHl1c2hpbi9NXFxuSW1lbGRhL01cXG5JbWhvdGVwL01cXG5JbW9kaXVtL01cXG5JbW9nZW5lL01cXG5JbXVzL01cXG5Jbi9NXFxuSW5hL01cXG5JbmNcXG5JbmNhL1NNXFxuSW5jaG9uL01cXG5JbmNvcnBvcmF0ZWRcXG5JbmRcXG5JbmRlcGVuZGVuY2UvTVxcbkluZGlhL01cXG5JbmRpYW4vTVNcXG5JbmRpYW5hL01cXG5JbmRpYW5hbi9TTVxcbkluZGlhbmFwb2xpcy9NXFxuSW5kaWFuaWFuXFxuSW5kaWVzL01cXG5JbmRpby9NXFxuSW5kaXJhL01cXG5JbmRvY2hpbmEvTVxcbkluZG9jaGluZXNlL01cXG5JbmRvbmVzaWEvTVxcbkluZG9uZXNpYW4vU01cXG5JbmRvcmUvTVxcbkluZHJhL01cXG5JbmR1cy9NXFxuSW5keS9TTVxcbkluZXMvTVxcbkluZXovTVxcbkluZ2UvTVxcbkluZ2xld29vZFxcbkluZ3JhbS9NXFxuSW5ncmVzL01cXG5JbmdyaWQvTVxcbklubm9jZW50L01cXG5Jbm5zYnJ1Y2tcXG5Jbm9udS9NXFxuSW5xdWlzaXRpb24vTVxcbkluc3RcXG5JbnN0YWdyYW0vTVxcbkluc3RhbWF0aWMvTVxcbkludGVsL01cXG5JbnRlbHNhdC9NXFxuSW50ZXJuYXRpb25hbGUvTVxcbkludGVybmV0L1NNXFxuSW50ZXJwb2wvTVxcbkludWl0L01TXFxuSW51a3RpdHV0L01cXG5JbnZhci9NXFxuSW8vTVxcbklvbmVzY28vTVxcbklvbmlhbi9NU1xcbklvbmljL1NNXFxuSW93YS9TTVxcbklvd2FuL01TXFxuSXBoaWdlbmlhL01cXG5JcHN3aWNoXFxuSXFhbHVpdC9NXFxuSXFiYWwvTVxcbklxdWl0b3MvTVxcbklyL01cXG5JcmEvTVxcbklyYW4vTVxcbklyYW5pYW4vU01cXG5JcmFxL01cXG5JcmFxaS9NU1xcbklyZWxhbmQvTVxcbklyZW5lL01cXG5JcmlzL01cXG5JcmlzaC9NUlxcbklyaXNobWFuL01cXG5JcmlzaG1lbi9NXFxuSXJpc2h3b21hbi9NXFxuSXJpc2h3b21lbi9NXFxuSXJrdXRzay9NXFxuSXJtYS9NXFxuSXJvcXVvaWFuL1NNXFxuSXJvcXVvaXMvTVxcbklycmF3YWRkeS9NXFxuSXJ0aXNoL01cXG5JcnZpbi9NXFxuSXJ2aW5lL01cXG5JcnZpbmcvTVxcbklyd2luL01cXG5Jc2FhYy9NXFxuSXNhYmVsL01cXG5Jc2FiZWxhL01cXG5Jc2FiZWxsYS9NXFxuSXNhYmVsbGUvTVxcbklzYWlhaC9NXFxuSXNjYXJpb3QvTVxcbklzZmFoYW4vTVxcbklzaGVyd29vZC9NXFxuSXNoaW0vTVxcbklzaG1hZWwvTVxcbklzaHRhci9NXFxuSXNpYWgvTVxcbklzaWRyby9NXFxuSXNpcy9NXFxuSXNsYW0vTVNcXG5Jc2xhbWFiYWQvTVxcbklzbGFtaWMvTVxcbklzbGFtaXNtL01cXG5Jc2xhbWlzdC9NXFxuSXNsYW1vcGhvYmlhXFxuSXNsYW1vcGhvYmljXFxuSXNtYWVsL01cXG5Jc21haWwvTVxcbklzb2xkZS9NXFxuSXNwZWxsL01cXG5Jc3JhZWwvU01cXG5Jc3JhZWxpL1NNXFxuSXNyYWVsaXRlL01cXG5Jc3NhYy9NXFxuSXNzYWNoYXIvTVxcbklzdGFuYnVsL01cXG5Jc3V6dS9NXFxuSXRcXG5JdGFpcHUvTVxcbkl0YWxcXG5JdGFsaWFuL1NNXFxuSXRhbGlhbmF0ZVxcbkl0YWx5L01cXG5JdGFzY2EvTVxcbkl0aGFjYS9NXFxuSXRoYWNhbi9NXFxuSXRvL01cXG5JdmEvTVxcbkl2YW4vTVxcbkl2YW5ob2UvTVxcbkl2ZXMvTVxcbkl2b3JpYW5cXG5Jdm9yeS9NXFxuSXZ5L01cXG5JeWFyL01cXG5JemFhay9NXFxuSXphbmFnaS9NXFxuSXphbmFtaS9NXFxuSXpoZXZzay9NXFxuSXptaXIvTVxcbkl6b2QvTVxcbkl6dmVzdGlhL01cXG5KL01EXFxuSkNTXFxuSkRcXG5KRksvTVxcbkpQXFxuSlBFR1xcbkpWXFxuSmFjay9NXFxuSmFja2llL01cXG5KYWNrbHluL01cXG5KYWNrc29uL01cXG5KYWNrc29uaWFuL01cXG5KYWNrc29udmlsbGUvTVxcbkphY2t5L01cXG5KYWNseW4vTVxcbkphY29iL1NNXFxuSmFjb2JlYW4vTVxcbkphY29iaS9NXFxuSmFjb2Jpbi9NXFxuSmFjb2JpdGUvTVxcbkphY29icy9NXFxuSmFjb2Jzb24vTVxcbkphY3F1YXJkL01cXG5KYWNxdWVsaW5lL01cXG5KYWNxdWVseW4vTVxcbkphY3F1ZXMvTVxcbkphY3V6emkvTVxcbkphZ2dlci9NXFxuSmFnaWVsbG9uL01cXG5KYWd1YXIvTVxcbkphaGFuZ2lyL01cXG5KYWltZS9NXFxuSmFpbi9NXFxuSmFpbmlzbS9NXFxuSmFpcHVyL01cXG5KYWthcnRhL01cXG5KYWtlL01cXG5KYW1hYWwvTVxcbkphbWFpY2EvTVxcbkphbWFpY2FuL1NNXFxuSmFtYWwvTVxcbkphbWFyL01cXG5KYW1lL1NNXFxuSmFtZWwvTVxcbkphbWVzL01cXG5KYW1lc3Rvd24vTVxcbkphbWkvTVxcbkphbWllL01cXG5KYW4vTVxcbkphbmEvTVxcbkphbmFjZWsvTVxcbkphbmUvTVxcbkphbmVsbC9NXFxuSmFuZWxsZS9NXFxuSmFuZXN2aWxsZS9NXFxuSmFuZXQvTVxcbkphbmV0dGUvTVxcbkphbmljZS9NXFxuSmFuaWUvTVxcbkphbmluZS9NXFxuSmFuaXMvTVxcbkphbmlzc2FyeS9NXFxuSmFuamF3ZWVkL01cXG5KYW5uYS9NXFxuSmFubmllL01cXG5KYW5zZW4vTVxcbkphbnNlbmlzdC9NXFxuSmFudWFyeS9TTVxcbkphbnVzL01cXG5KYXAvU01cXG5KYXBhbi9NXFxuSmFwYW5lc2UvTVNcXG5KYXB1cmEvTVxcbkphcmVkL01cXG5KYXJsc2JlcmcvTVxcbkphcnJlZC9NXFxuSmFycmV0dC9NXFxuSmFycm9kL01cXG5KYXJ2aXMvTVxcbkphc21pbmUvTVxcbkphc29uL01cXG5KYXNwZXIvTVxcbkphdGFrYS9NXFxuSmF2YS9TTVxcbkphdmFTY3JpcHQvTVxcbkphdmFuZXNlL01cXG5KYXZpZXIvTVxcbkpheGFydGVzL01cXG5KYXkvTVxcbkpheWFwdXJhL01cXG5KYXlhd2FyZGVuZS9NXFxuSmF5Y2VlL01TXFxuSmF5Y2Vlcy9NXFxuSmF5bmUvTVxcbkpheXNvbi9NXFxuSmVhbi9NXFxuSmVhbmV0dGUvTVxcbkplYW5pZS9NXFxuSmVhbmluZS9NXFxuSmVhbm5lL01cXG5KZWFubmV0dGUvTVxcbkplYW5uaWUvTVxcbkplYW5uaW5lL01cXG5KZWQvTVxcbkplZGkvTVxcbkplZXAvTVxcbkplZXZlcy9NXFxuSmVmZi9NXFxuSmVmZmVyZXkvTVxcbkplZmZlcnNvbi9NXFxuSmVmZmVyc29uaWFuL01cXG5KZWZmZXJ5L01cXG5KZWZmcmV5L01cXG5KZWZmcnkvTVxcbkplaG9zaGFwaGF0L01cXG5KZWhvdmFoL01cXG5KZWt5bGwvTVxcbkplbmlmZXIvTVxcbkplbmtpbnMvTVxcbkplbm5hL01cXG5KZW5uZXIvTVxcbkplbm5pZS9NXFxuSmVubmlmZXIvTVxcbkplbm5pbmdzL01cXG5KZW5ueS9NXFxuSmVuc2VuL01cXG5KZXBodGhhaC9NXFxuSmVyYWxkL01cXG5KZXJlbWlhaC9NXFxuSmVyZW1pYWhzXFxuSmVyZW15L01cXG5KZXJpL01cXG5KZXJpY2hvL01cXG5KZXJtYWluZS9NXFxuSmVyb2JvYW0vTVxcbkplcm9sZC9NXFxuSmVyb21lL01cXG5KZXJyaS9NXFxuSmVycm9kL01cXG5KZXJyb2xkL01cXG5KZXJyeS9NXFxuSmVyc2V5L01TXFxuSmVydXNhbGVtL01cXG5KZXNzL01cXG5KZXNzZS9NXFxuSmVzc2ljYS9NXFxuSmVzc2llL01cXG5KZXN1aXQvTVNcXG5KZXN1cy9NXFxuSmV0d2F5L01cXG5KZXcvU01cXG5KZXdlbC9NXFxuSmV3ZWxsL01cXG5KZXdlc3MvTVNcXG5KZXdpc2gvUE1cXG5KZXdyeS9NXFxuSmV6ZWJlbC9TTVxcbkppYW5nc3UvTVxcbkppYW5neGkvTVxcbkppZGRhL01cXG5KaWxpbi9NXFxuSmlsbC9NXFxuSmlsbGlhbi9NXFxuSmltL01cXG5KaW1lbmV6L01cXG5KaW1taWUvTVxcbkppbW15L01cXG5KaW5hbi9NXFxuSmlubmFoL01cXG5KaW5ueS9NXFxuSml2YXJvL01cXG5Kby9NXFxuSm9hbi9NXFxuSm9hbm4vTVxcbkpvYW5uYS9NXFxuSm9hbm5lL01cXG5Kb2FxdWluL01cXG5Kb2IvU01cXG5Kb2JzL01cXG5Kb2Nhc3RhL01cXG5Kb2NlbHluL01cXG5Kb2NrL01cXG5Kb2NrZXkvTVxcbkpvZGkvTVxcbkpvZGllL01cXG5Kb2R5L01cXG5Kb2UvTVxcbkpvZWwvTVxcbkpvZXkvTVxcbkpvZ2pha2FydGEvTVxcbkpvaGFubi9NXFxuSm9oYW5uYS9NXFxuSm9oYW5uZXMvTVxcbkpvaGFubmVzYnVyZy9NXFxuSm9obi9TTVxcbkpvaG5hdGhhbi9NXFxuSm9obmF0aG9uL01cXG5Kb2huaWUvTVxcbkpvaG5uaWUvTVxcbkpvaG5ueS9NXFxuSm9obnMvTVxcbkpvaG5zb24vTVxcbkpvaG5zdG9uL01cXG5Kb2huc3Rvd24vTVxcbkpvbGVuZS9NXFxuSm9sc29uL01cXG5Kb24vTVxcbkpvbmFoL01cXG5Kb25haHNcXG5Kb25hcy9NXFxuSm9uYXRoYW4vTVxcbkpvbmF0aG9uL01cXG5Kb25lcy9NXFxuSm9uZXNib3JvL01cXG5Kb25pL01cXG5Kb25zb24vTVxcbkpvcGxpbi9NXFxuSm9yZGFuL01cXG5Kb3JkYW5pYW4vTVNcXG5Kb3JnZS9NXFxuSm9zZS9NXFxuSm9zZWYvTVxcbkpvc2VmYS9NXFxuSm9zZWZpbmEvTVxcbkpvc2VwaC9NXFxuSm9zZXBoaW5lL01cXG5Kb3NlcGhzXFxuSm9zZXBoc29uL01cXG5Kb3NlcGh1cy9NXFxuSm9zaC9NXFxuSm9zaHVhL01cXG5Kb3NpYWgvTVxcbkpvc2llL01cXG5Kb3N1ZS9NXFxuSm91bGUvTVxcbkpvdmUvTVxcbkpvdmlhbi9NXFxuSm95L01cXG5Kb3ljZS9NXFxuSm95Y2Vhbi9NXFxuSm95bmVyL01cXG5KcG5cXG5Kci9NXFxuSnVhbi9NXFxuSnVhbmEvTVxcbkp1YW5pdGEvTVxcbkp1YXJlei9NXFxuSnViYWwvTVxcbkp1ZGFlb1xcbkp1ZGFoL01cXG5KdWRhaWNcXG5KdWRhaWNhbFxcbkp1ZGFpc20vTVNcXG5KdWRhcy9NU1xcbkp1ZGQvTVxcbkp1ZGUvTVxcbkp1ZGVhL01cXG5KdWRnZXNcXG5KdWRpdGgvTVxcbkp1ZHNvbi9NXFxuSnVkeS9NXFxuSnVnZ2VybmF1dC9NXFxuSnVsXFxuSnVsZXMvTVxcbkp1bGlhL01cXG5KdWxpYW4vTVxcbkp1bGlhbmEvTVxcbkp1bGlhbm5lL01cXG5KdWxpZS9NXFxuSnVsaWV0L01cXG5KdWxpZXR0ZS9NXFxuSnVsaW8vTVxcbkp1bGl1cy9NXFxuSnVsbGlhcmQvTVxcbkp1bHkvU01cXG5KdW4vTVxcbkp1bmUvU01cXG5KdW5lYXUvTVxcbkp1bmcvTVxcbkp1bmdmcmF1L01cXG5KdW5naWFuL01cXG5KdW5pb3IvU01cXG5KdW5rZXIvU01cXG5KdW5vL01cXG5KdXBpdGVyL01cXG5KdXJhc3NpYy9NXFxuSnVydWEvTVxcbkp1c3RpY2UvTVxcbkp1c3Rpbi9NXFxuSnVzdGluZS9NXFxuSnVzdGluaWFuL01cXG5KdXRsYW5kL01cXG5KdXZlbmFsL01cXG5LL1NNTkdKXFxuS0IvTVxcbktDXFxuS0ZDL01cXG5LR0IvTVxcbktJQVxcbktLSy9NXFxuS08vTVxcbktQXFxuS1NcXG5LWVxcbkthYWJhL01cXG5LYWJ1bC9NXFxuS2Fma2EvTVxcbkthZmthZXNxdWUvTVxcbkthZ29zaGltYS9NXFxuS2FobHVhL01cXG5LYWh1bHVpL01cXG5LYWlmZW5nL01cXG5LYWlsdWEvTVxcbkthaXNlci9NU1xcbkthaXRsaW4vTVxcbkthbGFoYXJpL01cXG5LYWxhbWF6b28vTVxcbkthbGFzaG5pa292L01cXG5LYWxiL01cXG5LYWxldmFsYS9NXFxuS2FsZ29vcmxpZS9NXFxuS2FsaS9NXFxuS2FsbXlrL01cXG5LYW1hL01cXG5LYW1jaGF0a2EvTVxcbkthbWVoYW1laGEvTVxcbkthbXBhbGEvTVxcbkthbXB1Y2hlYS9NXFxuS2FuL1NNXFxuS2FuY2hlbmp1bmdhL01cXG5LYW5kYWhhci9NXFxuS2FuZGluc2t5L01cXG5LYW5lL01cXG5LYW5lb2hlL01cXG5LYW5rYWtlZS9NXFxuS2FubmFkYS9NXFxuS2Fuby9NXFxuS2FucHVyL01cXG5LYW5zYW4vTVNcXG5LYW5zYXMvTVxcbkthbnQvTVxcbkthbnRpYW4vTVxcbkthb2hzaXVuZy9NXFxuS2Fwb3NpL01cXG5LYXJhL01cXG5LYXJhY2hpL01cXG5LYXJhZ2FuZGEvTVxcbkthcmFrb3J1bS9NXFxuS2FyYW1hem92L01cXG5LYXJlZW0vTVxcbkthcmVuL01cXG5LYXJlbmluYS9NXFxuS2FyaS9NXFxuS2FyaW4vTVxcbkthcmluYS9NXFxuS2FybC9NXFxuS2FybGEvTVxcbkthcmxvZmYvTVxcbkthcm8vTVxcbkthcm9sL01cXG5LYXJyb28vTVxcbkthcnluL01cXG5LYXNhaS9NXFxuS2FzZXkvTVxcbkthc2htaXIvU01cXG5LYXNwYXJvdi9NXFxuS2F0ZS9NXFxuS2F0ZWx5bi9NXFxuS2F0aGFyaW5lL01cXG5LYXRoZXJpbmUvTVxcbkthdGhlcnluL01cXG5LYXRoaWF3YXIvTVxcbkthdGhpZS9NXFxuS2F0aGxlZW4vTVxcbkthdGhtYW5kdS9NXFxuS2F0aHJpbmUvTVxcbkthdGhyeW4vTVxcbkthdGh5L01cXG5LYXRpZS9NXFxuS2F0aW5hL01cXG5LYXRtYWkvTVxcbkthdG93aWNlL01cXG5LYXRyaW5hL01cXG5LYXR5L01cXG5LYXVhaS9NXFxuS2F1Zm1hbi9NXFxuS2F1bmFzL01cXG5LYXVuZGEvTVxcbkthd2FiYXRhL01cXG5LYXdhc2FraS9NXFxuS2F5L01cXG5LYXllL01cXG5LYXlsYS9NXFxuS2F6YWtoL01cXG5LYXpha2hzXFxuS2F6YWtoc3Rhbi9NXFxuS2F6YW4vTVxcbkthemFudHpha2lzL01cXG5LYi9NXFxuS2VhdG9uL01cXG5LZWF0cy9NXFxuS2Vjay9NXFxuS2VlbmFuL01cXG5LZWV3YXRpbi9NXFxuS2VpbGxvci9NXFxuS2Vpc2hhL01cXG5LZWl0aC9NXFxuS2VsbGVyL01cXG5LZWxsZXkvTVxcbktlbGxpL01cXG5LZWxsaWUvTVxcbktlbGxvZ2cvTVxcbktlbGx5L01cXG5LZWxzZXkvTVxcbktlbHZpbi9NXFxuS2VtZXJvdm8vTVxcbktlbXAvTVxcbktlbXBpcy9NXFxuS2VuL01cXG5LZW5kYWxsL01cXG5LZW5kcmEvTVxcbktlbmRyaWNrL01cXG5LZW5tb3JlL01cXG5LZW5uYW4vTVxcbktlbm5lZHkvTVxcbktlbm5ldGgvTVxcbktlbm5ld2ljay9NXFxuS2Vubml0aC9NXFxuS2VubnkvTVxcbktlbm9zaGEvTVxcbktlbnQvTVxcbktlbnRvbi9NXFxuS2VudHVja2lhbi9NU1xcbktlbnR1Y2t5L01cXG5LZW55YS9NXFxuS2VueWFuL1NNXFxuS2VueWF0dGEvTVxcbktlbnlvbi9NXFxuS2VvZ2gvTVxcbktlb2t1ay9NXFxuS2VwbGVyL01cXG5LZXJlbnNreS9NXFxuS2VyaS9NXFxuS2VybWl0L01cXG5LZXJuL01cXG5LZXJvdWFjL01cXG5LZXJyL01cXG5LZXJyaS9NXFxuS2VycnkvTVxcbktldHRlcmluZy9NXFxuS2V2ZW4vTVxcbktldmluL01cXG5LZXZsYXIvTVxcbktldm9ya2lhbi9NXFxuS2V3cGllL01cXG5LZXkvTVxcbktleW5lcy9NXFxuS2V5bmVzaWFuL01cXG5LaGFiYXJvdnNrL01cXG5LaGFjaGF0dXJpYW4vTVxcbktoYWxpZC9NXFxuS2hhbi9NXFxuS2hhcmtvdi9NXFxuS2hhcnRvdW0vTVxcbktoYXl5YW0vTVxcbktoYXphci9NXFxuS2htZXIvTVxcbktob2lraG9pL01cXG5LaG9pc2FuL01cXG5LaG9tZWluaS9NXFxuS2hvcmFuYS9NXFxuS2hydXNoY2hldi9NXFxuS2h1ZnUvTVxcbktodWxuYS9NXFxuS2h3YXJpem1pL01cXG5LaHliZXIvTVxcbktpY2thcG9vL01cXG5LaWRkL01cXG5LaWVsL01cXG5LaWVya2VnYWFyZC9NXFxuS2lldGgvTVxcbktpZXYvTVxcbktpZ2FsaS9NXFxuS2lrdXl1L01cXG5LaWxhdWVhL01cXG5LaWxpbWFuamFyby9NXFxuS2lsbGVlbi9NXFxuS2lscm95L01cXG5LaW0vTVxcbktpbWJlcmxleS9NXFxuS2ltYmVybHkvTVxcbktpbmcvTVxcbktpbmdzcG9ydC9NXFxuS2luZ3N0b24vTVxcbktpbmdzdG93bi9NXFxuS2lua28nc1xcbktpbm5leS9NXFxuS2luc2V5L01cXG5LaW5zaGFzYS9NXFxuS2lvd2EvTVNcXG5LaXAvTVxcbktpcGxpbmcvTVxcbktpcmJ5L01cXG5LaXJjaGhvZmYvTVxcbktpcmNobmVyL01cXG5LaXJnaGlzdGFuL01cXG5LaXJnaGl6L01cXG5LaXJnaGl6aWEvTVxcbktpcmliYXRpL01cXG5LaXJpbnlhZ2EvTVxcbktpcmsvTVxcbktpcmtsYW5kL01cXG5LaXJrcGF0cmljay9NXFxuS2lyb3YvTVxcbktpcnN0ZW4vTVxcbktpc2FuZ2FuaS9NXFxuS2lzaGluZXYvTVxcbktpc2xldi9NXFxuS2lzc2ltbWVlL01cXG5LaXNzaW5nZXIvTVxcbktpdC9NXFxuS2l0YWt5dXNodS9NXFxuS2l0Y2hlbmVyL01cXG5LaXR0eS9NXFxuS2l3YW5pcy9NXFxuS2xhbi9NXFxuS2xhbnNtYW4vTVxcbktsYXVzL01cXG5LbGVlL01cXG5LbGVlbmV4L01TXFxuS2xlaW4vTVxcbktsaW10L01cXG5LbGluZS9NXFxuS2xpbmdvbi9NXFxuS2xvbmRpa2UvTVNcXG5LbWFydC9NXFxuS25hcHAvTVxcbktuZXNzZXQvTVxcbktuZ3dhcnJleWUvTVxcbktuaWNrZXJib2NrZXIvTVxcbktuaWV2ZWwvTVxcbktuaWdodC9NXFxuS25vcGYvTVxcbktub3Nzb3MvTVxcbktub3dsZXMvTVxcbktub3gvTVxcbktub3h2aWxsZS9NXFxuS251ZHNlbi9NXFxuS251dGgvTVxcbktudXRoc1xcbktvYmUvTVxcbktvY2gvTVxcbktvY2hhYi9NXFxuS29kYWNocm9tZS9NXFxuS29kYWsvTVxcbktvZGFseS9NXFxuS29kaWFrL01cXG5Lb2VzdGxlci9NXFxuS29oaW5vb3IvTVxcbktvaGwvTVxcbktvaXp1bWkvTVxcbktvamFrL01cXG5Lb2tvbW8vTVxcbktvbHltYS9NXFxuS29tbXVuaXptYS9NXFxuS29uZy9NXFxuS29uZ28vTVxcbktvbnJhZC9NXFxuS29vbnR6L01cXG5Lb3BwZWwvTVxcbktvcmVhL01cXG5Lb3JlYW4vU01cXG5Lb3JuYmVyZy9NXFxuS29yeS9NXFxuS29yenlic2tpL01cXG5Lb3NjaXVza28vTVxcbktvc3N1dGgvTVxcbktvc3lnaW4vTVxcbktvdGxpbi9NXFxuS291ZmF4L01cXG5Lb3dsb29uL01cXG5Lci9NXFxuS3JhZnQvTVxcbktyYWthdG9hL01cXG5LcmFrb3cvTVxcbktyYW1lci9NXFxuS3Jhc25vZGFyL01cXG5LcmFzbm95YXJzay9NXFxuS3JlYnMvTVxcbktyZW1saW4vTVxcbktyZW1saW5vbG9naXN0XFxuS3JlbWxpbm9sb2d5XFxuS3Jlc2dlL01cXG5LcmluZ2xlL01cXG5LcmlzL01cXG5LcmlzaG5hL01cXG5LcmlzaG5hbXVydGkvTVxcbktyaXN0YS9NXFxuS3Jpc3Rlbi9NXFxuS3Jpc3RpL01cXG5LcmlzdGllL01cXG5LcmlzdGluL01cXG5LcmlzdGluYS9NXFxuS3Jpc3RpbmUvTVxcbktyaXN0b3BoZXIvTVxcbktyaXN0eS9NXFxuS3JvYy9NXFxuS3JvZ2VyL01cXG5Lcm9uZWNrZXIvTVxcbktyb3BvdGtpbi9NXFxuS3J1Z2VyL01cXG5LcnVnZXJyYW5kL01cXG5LcnVwcC9NXFxuS3J5c3RhbC9NXFxuS3NoYXRyaXlhL01cXG5LdWJsYWkvTVxcbkt1YnJpY2svTVxcbkt1aG4vTVxcbkt1aWJ5c2hldi9NXFxuS3VsdGh1bW0vTVxcbkt1bm1pbmcvTVxcbkt1b21pbnRhbmcvTVxcbkt1cmQvTVxcbkt1cmRpc2gvTVxcbkt1cmRpc3Rhbi9NXFxuS3Vyb3Nhd2EvTVxcbkt1cnQvTVxcbkt1cnRpcy9NXFxuS3VzY2gvTVxcbkt1dHV6b3YvTVxcbkt1d2FpdC9NXFxuS3V3YWl0aS9TTVxcbkt1em5ldHMvTVxcbkt1em5ldHNrL01cXG5Ld2FraXV0bC9NXFxuS3dhbi9NXFxuS3dhbmdqdS9NXFxuS3dhbnphYS9NU1xcbkt5L01IXFxuS3lsZS9NXFxuS3lvdG8vTVxcbkt5cmd5enN0YW4vTVxcbkt5dXNodS9NXFxuTCdBbW91ci9NXFxuTCdFbmZhbnRcXG5MJ09yZWFsL01cXG5MJ091dmVydHVyZS9NXFxuTC9NTlxcbkxBXFxuTEFOL01cXG5MQkovTVxcbkxDXFxuTENEL01cXG5MQ01cXG5MRENcXG5MRUQvTVxcbkxHL01cXG5MR0JUXFxuTElGT1xcbkxMXFxuTExCL01cXG5MTEQvTVxcbkxOR1xcbkxPR09cXG5MUC9NXFxuTFBHXFxuTFBOL1NNXFxuTFNBVFxcbkxTRC9NXFxuTFZOXFxuTGEvU01cXG5MYWJcXG5MYWJhbi9NXFxuTGFicmFkb3IvU01cXG5MYWJyYWRvcmVhblxcbkxhY2V5L01cXG5MYWNoZXNpcy9NXFxuTGFjdG9iYWNpbGx1c1xcbkxhY3kvTVxcbkxhZG9nYS9NXFxuTGFkb25uYS9NXFxuTGFkeS9NXFxuTGFkeXNoaXAvTVNcXG5MYWZheWV0dGUvTVxcbkxhZml0dGUvTVxcbkxhZ29zL01cXG5MYWdyYW5nZS9NXFxuTGFncmFuZ2lhbi9NXFxuTGFob3JlL01cXG5MYWl1cy9NXFxuTGFqb3MvTVxcbkxha2Vpc2hhL01cXG5MYWtlbGFuZC9NXFxuTGFrZXdvb2RcXG5MYWtpc2hhL01cXG5MYWtvdGEvTVxcbkxha3NobWkvTVxcbkxhbWFpc20vU01cXG5MYW1hci9NXFxuTGFtYXJjay9NXFxuTGFtYXplL01cXG5MYW1iL01cXG5MYW1iZXJ0L01cXG5MYW1ib3JnaGluaS9NXFxuTGFtYnJ1c2NvL01cXG5MYW1lbnRhdGlvbnNcXG5MYW1vbnQvTVxcbkxhbmEvTVxcbkxhbmFpL01cXG5MYW5jYXNoaXJlL01cXG5MYW5jYXN0ZXIvTVxcbkxhbmNlL01cXG5MYW5jZWxvdC9NXFxuTGFuZC9NXFxuTGFuZG9uL01cXG5MYW5kcnkvTVxcbkxhbmRzYXQvTVxcbkxhbmRzdGVpbmVyL01cXG5MYW5lL01cXG5MYW5nL01cXG5MYW5nZXJoYW5zL01cXG5MYW5nbGFuZC9NXFxuTGFuZ2xleS9NXFxuTGFuZ211aXIvTVxcbkxhbmthL01cXG5MYW5rYW4vTVxcbkxhbm55L01cXG5MYW5zaW5nL01cXG5MYW56aG91L01cXG5MYW8vU01cXG5MYW9jb29uL01cXG5MYW9zL01cXG5MYW90aWFuL1NNXFxuTGFwbGFjZS9NXFxuTGFwbGFjaWFuXFxuTGFwbGFuZC9NUlxcbkxhcHAvU01cXG5MYXJhL01cXG5MYXJhbWllL01cXG5MYXJkbmVyL01cXG5MYXJlZG8vTVxcbkxhcm91c3NlL01cXG5MYXJyeS9NXFxuTGFycy9NTlxcbkxhcnNlbi9NXFxuTGFyc29uL01cXG5MYXNjYXV4L01cXG5MYXNzYS9NXFxuTGFzc2VuL01cXG5MYXNzaWUvTVxcbkxhdC9NXFxuTGF0YXNoYS9NXFxuTGF0ZXJhbi9NXFxuTGF0aGFtL01cXG5MYXRpbi9NUlNcXG5MYXRpbmFcXG5MYXRpbm8vU01cXG5MYXRpbnhcXG5MYXRpc2hhL01cXG5MYXRvbnlhL01cXG5MYXRveWEvTVxcbkxhdHJvYmUvTVxcbkxhdHZpYS9NXFxuTGF0dmlhbi9NU1xcbkxhdWQvTVJcXG5MYXVkZXIvTVxcbkxhdWUvTVxcbkxhdW5kcm9tYXQvTVxcbkxhdXJhL01cXG5MYXVyYXNpYS9NXFxuTGF1cmVsL01cXG5MYXVyZW4vTVxcbkxhdXJlbmNlL01cXG5MYXVyZW50L01cXG5MYXVyaS9NXFxuTGF1cmllL01cXG5MYXZhbC9NXFxuTGF2ZXJuL01cXG5MYXZlcm5lL01cXG5MYXZvaXNpZXIvTVxcbkxhdm9ubmUvTVxcbkxhd2FuZGEvTVxcbkxhd3JlbmNlL01cXG5MYXdzb24vTVxcbkxhd3Rvbi9NXFxuTGF5YW1vbi9NXFxuTGF5bGEvTVxcbkxheXRvbi9NXFxuTGF6YXJvL01cXG5MYXphcnVzL01cXG5MZS9TTVxcbkxlYS9NXFxuTGVhY2gvTVxcbkxlYWRiZWxseS9NXFxuTGVhaC9NXFxuTGVha2V5L01cXG5MZWFuL01cXG5MZWFuZGVyL01cXG5MZWFubi9NXFxuTGVhbm5hL01cXG5MZWFubmUvTVxcbkxlYXIvTVxcbkxlYXJqZXQvTVxcbkxlYXJ5L01cXG5MZWF2ZW53b3J0aC9NXFxuTGViYW5lc2UvTVxcbkxlYmFub24vTVxcbkxlYmVzZ3VlL01cXG5MZWJsYW5jL01cXG5MZWRhL01cXG5MZWRlcmJlcmcvTVxcbkxlZS9NXFxuTGVlZHMvTVxcbkxlZXNidXJnL01cXG5MZWV1d2VuaG9lay9NXFxuTGVld2FyZC9NXFxuTGVmdFxcbkxlZ2VuZHJlL01cXG5MZWdlci9NXFxuTGVnaG9ybi9NXFxuTGVnby9NXFxuTGVncmVlL01cXG5MZWhtYW4vTVxcbkxlaWJuaXovTVxcbkxlaWNlc3Rlci9TTVxcbkxlaWRlbi9NXFxuTGVpZi9NXFxuTGVpZ2gvTVxcbkxlaWxhL01cXG5MZWlwemlnL01cXG5MZWxhL01cXG5MZWxhbmQvTVxcbkxlbGlhL01cXG5MZW1haXRyZS9NXFxuTGVtdWVsL01cXG5MZW11cmlhL01cXG5MZW4vTVxcbkxlbmEvTVxcbkxlbmFyZC9NXFxuTGVuaW4vTVxcbkxlbmluZ3JhZC9NXFxuTGVuaW5pc20vTVxcbkxlbmluaXN0L01cXG5MZW5ub24vTVxcbkxlbm55L01cXG5MZW5vL01cXG5MZW5vaXIvTVxcbkxlbm9yYS9NXFxuTGVub3JlL01cXG5MZW50L1NNTlxcbkxlbnRlbi9NXFxuTGVvL1NNXFxuTGVvbGEvTVxcbkxlb21pbnN0ZXIvTVxcbkxlb24vTVxcbkxlb25hL01cXG5MZW9uYXJkL01cXG5MZW9uYXJkby9NXFxuTGVvbmNhdmFsbG8vTVxcbkxlb25lbC9NXFxuTGVvbmlkL01cXG5MZW9uaWRhcy9NXFxuTGVvbm9yL01cXG5MZW9wb2xkL01cXG5MZW9wb2xkby9NXFxuTGVwaWR1cy9NXFxuTGVwa2UvTVxcbkxlcHVzL01cXG5MZXJuZXIvTVxcbkxlcm95L01cXG5MZXMvTVxcbkxlc2EvTVxcbkxlc2xleS9NXFxuTGVzbGllL01cXG5MZXNvdGhvL01cXG5MZXNzZXBzL01cXG5MZXNzaWUvTVxcbkxlc3Rlci9NXFxuTGVzdHJhZGUvTVxcbkxldGEvTVxcbkxldGhhL01cXG5MZXRoZS9NXFxuTGV0aWNpYS9NXFxuTGV0aXRpYS9NXFxuTGV0dGVybWFuL01cXG5MZXZhbnQvTVxcbkxldmVzcXVlL01cXG5MZXZpL1NNXFxuTGV2aWF0aGFuL01cXG5MZXZpbmUvTVxcbkxldml0aWN1cy9NXFxuTGV2aXR0L01cXG5MZXZ5L01cXG5MZXcvTVxcbkxld2luc2t5L01cXG5MZXdpcy9NXFxuTGV3aXN0b24vTVxcbkxld2lzdmlsbGUvTVxcbkxleGluZ3Rvbi9NXFxuTGV4dXMvTVxcbkxoYXNhL01TXFxuTGhvdHNlL01cXG5MaS9NWVxcbkxpYW9uaW5nL01cXG5MaWJieS9NXFxuTGliZXJhY2UvTVxcbkxpYmVyYWxcXG5MaWJlcmlhL01cXG5MaWJlcmlhbi9TTVxcbkxpYnJhL01TXFxuTGlicmVPZmZpY2UvTVxcbkxpYnJldmlsbGUvTVxcbkxpYnJpdW0vTVxcbkxpYnlhL01cXG5MaWJ5YW4vU01cXG5MaWNodGVuc3RlaW4vTVxcbkxpZGlhL01cXG5MaWUvTVxcbkxpZWJlcm1hbi9NXFxuTGllYmZyYXVtaWxjaC9NXFxuTGllY2h0ZW5zdGVpbi9aTVJcXG5MaWVjaHRlbnN0ZWluZXIvTVxcbkxpZWdlL01cXG5MaWV1dFxcbkxpbGEvTVxcbkxpbGlhL01cXG5MaWxpYW4vTVxcbkxpbGlhbmEvTVxcbkxpbGl0aC9NXFxuTGlsaXVva2FsYW5pL01cXG5MaWxsZS9NXFxuTGlsbGlhbi9NXFxuTGlsbGllL01cXG5MaWxsaXB1dC9NXFxuTGlsbGlwdXRpYW4vTVNcXG5MaWxseS9NXFxuTGlsb25nd2UvTVxcbkxpbHkvTVxcbkxpbWEvTVxcbkxpbWJhdWdoL01cXG5MaW1ib1xcbkxpbWJ1cmdlci9NXFxuTGltb2dlcy9NXFxuTGltb3VzaW4vTVxcbkxpbXBvcG8vTVxcbkxpbi9NXFxuTGluYS9NXFxuTGluY29sbi9NU1xcbkxpbmQvTVxcbkxpbmRhL01cXG5MaW5kYmVyZ2gvTVxcbkxpbmRzYXkvTVxcbkxpbmRzZXkvTVxcbkxpbmR5L01cXG5MaW5uYWV1cy9NXFxuTGlub3R5cGUvTVxcbkxpbnRvbi9NXFxuTGludXMvTVxcbkxpbnV4L01TXFxuTGlud29vZC9NXFxuTGlvbmVsL01cXG5MaXBpenphbmVyL01cXG5MaXBwaS9NXFxuTGlwcG1hbm4vTVxcbkxpcHNjb21iL01cXG5MaXB0b24vTVxcbkxpc2EvTVxcbkxpc2Jvbi9NXFxuTGlzc2Fqb3VzL01cXG5MaXN0ZXIvTVxcbkxpc3RlcmluZS9NXFxuTGlzdG9uL01cXG5MaXN6dC9NXFxuTGl0aHVhbmlhL01cXG5MaXRodWFuaWFuL01TXFxuTGl0dGxlL01cXG5MaXR0b24vTVxcbkxpdmVybW9yZS9NXFxuTGl2ZXJwb29sL01cXG5MaXZlcnB1ZGxpYW4vU01cXG5MaXZpYS9NXFxuTGl2aW5nc3Rvbi9NXFxuTGl2aW5nc3RvbmUvTVxcbkxpdm9uaWEvTVxcbkxpdnkvTVxcbkxpei9NXFxuTGl6YS9NXFxuTGl6emllL01cXG5MaXp6eS9NXFxuTGp1YmxqYW5hL01cXG5MbGV3ZWxseW4vTVxcbkxsb3lkL01cXG5MblxcbkxvYWZlci9TTVxcbkxvYmFjaGV2c2t5L01cXG5Mb2NoaW52YXIvTVxcbkxvY2tlL01cXG5Mb2NrZWFuL01cXG5Mb2NraGVlZC9NXFxuTG9ja3dvb2QvTVxcbkxvZGdlL01cXG5Mb2RpL01cXG5Mb2R6L01cXG5Mb2V3ZS9NXFxuTG9ld2kvTVxcbkxvZXdzL01cXG5Mb2dhbi9NXFxuTG9oZW5ncmluL01cXG5Mb2lyZS9NXFxuTG9pcy9NXFxuTG9raS9NXFxuTG9sYS9NXFxuTG9saXRhL01cXG5Mb2xsYXJkL01cXG5Mb2xsb2JyaWdpZGEvTVxcbkxvbWJhcmQvTVxcbkxvbWJhcmRpL01cXG5Mb21iYXJkeS9NXFxuTG9tZS9NXFxuTG9tcG9jL01cXG5Mb24vTVxcbkxvbmRvbi9NUlpcXG5Mb25kb25lci9NXFxuTG9uZy9NXFxuTG9uZ2ZlbGxvdy9NXFxuTG9uZ21vbnQvTVxcbkxvbmdzdHJlZXQvTVxcbkxvbmd1ZXVpbFxcbkxvbmd2aWV3L01cXG5Mb25uaWUvTVxcbkxvcGV6L01cXG5Mb3JhL01cXG5Mb3JhaW4vTVxcbkxvcmFpbmUvTVxcbkxvcmQvU01cXG5Mb3Jkc2hpcC9TTVxcbkxvcmVsZWkvTVxcbkxvcmVuL01cXG5Mb3JlbmEvTVxcbkxvcmVuZS9NXFxuTG9yZW50ei9NXFxuTG9yZW50emlhblxcbkxvcmVuei9NXFxuTG9yZW56by9NXFxuTG9yZXR0YS9NXFxuTG9yaS9NXFxuTG9yaWUvTVxcbkxvcm5hL01cXG5Mb3JyYWluZS9NXFxuTG9ycmUvTVxcbkxvcnJpZS9NXFxuTG9zXFxuTG90L01cXG5Mb3RoYXJpby9TTVxcbkxvdHQvTVxcbkxvdHRpZS9NXFxuTG91L01cXG5Mb3VlbGxhL01cXG5Mb3VpZS9NXFxuTG91aXMvTVxcbkxvdWlzYS9NXFxuTG91aXNlL01cXG5Mb3Vpc2lhbmEvTVxcbkxvdWlzaWFuYW4vTVNcXG5Mb3Vpc2lhbmlhbi9NU1xcbkxvdWlzdmlsbGUvTVxcbkxvdXJkZXMvTVxcbkxvdXZyZS9NXFxuTG92ZS9NXFxuTG92ZWNyYWZ0L01cXG5Mb3ZlbGFjZS9NXFxuTG93ZS9NXFxuTG93ZWxsL01cXG5Mb3dlbmJyYXUvTVxcbkxvd2VyeS9NXFxuTG93bGFuZHNcXG5Mb3lhbmcvTVxcbkxveWQvTVxcbkxveW9sYS9NXFxuTHJcXG5MdFxcbkx0ZFxcbkx1L01cXG5MdWFuZGEvTVxcbkx1YW5uL01cXG5MdWJhdml0Y2hlci9NXFxuTHViYm9jay9NXFxuTHVidW1iYXNoaS9NXFxuTHVjYXMvTVxcbkx1Y2UvTVxcbkx1Y2lhL01cXG5MdWNpYW4vTVxcbkx1Y2lhbm8vTVxcbkx1Y2llbi9NXFxuTHVjaWZlci9NXFxuTHVjaWxlL01cXG5MdWNpbGxlL01cXG5MdWNpbmRhL01cXG5MdWNpby9NXFxuTHVjaXRlL1NNXFxuTHVjaXVzL01cXG5MdWNrbm93L01cXG5MdWNyZXRpYS9NXFxuTHVjcmV0aXVzL01cXG5MdWN5L01cXG5MdWRkaXRlL01TXFxuTHVkaGlhbmEvTVxcbkx1ZHdpZy9NXFxuTHVlbGxhL01cXG5MdWZ0aGFuc2EvTVxcbkx1ZnR3YWZmZS9NXFxuTHVnZXIvTVxcbkx1Z29zaS9NXFxuTHVpZ2kvTVxcbkx1aXMvTVxcbkx1aXNhL01cXG5MdWtlL01cXG5MdWxhL01cXG5MdWxseS9NXFxuTHVsdS9NXFxuTHVtaWVyZS9NXFxuTHVuYS9NXFxuTHVwZS9NXFxuTHVwZXJjYWxpYS9NXFxuTHVwdXMvTVxcbkx1cmlhL01cXG5MdXNha2EvTVxcbkx1c2l0YW5pYS9NXFxuTHV0aGVyL01cXG5MdXRoZXJhbi9TTVxcbkx1dGhlcmFuaXNtL01TXFxuTHV2cy9NXFxuTHV4ZW1ib3VyZy9aTVJcXG5MdXhlbWJvdXJnZXIvTVxcbkx1eGVtYm91cmdpYW5cXG5MdXovTVxcbkx1em9uL01cXG5Mdm92L01cXG5MeVgvTVxcbkx5YWxscHVyXFxuTHljcmEvTVxcbkx5Y3VyZ3VzL01cXG5MeWRpYS9NXFxuTHlkaWFuL1NNXFxuTHllbGwvTVxcbkx5bGUvTVxcbkx5bHkvTVxcbkx5bWFuL01cXG5MeW1lL01cXG5MeW5jaC9NXFxuTHluY2hidXJnL01cXG5MeW5kYS9NXFxuTHluZG9uL01cXG5MeW5ldHRlL01cXG5MeW5uL01cXG5MeW5uZS9NXFxuTHlubmV0dGUvTVxcbkx5b24vU01cXG5MeW9ucy9NXFxuTHlyYS9NXFxuTHlzZW5rby9NXFxuTHlzaXN0cmF0YS9NXFxuTHlzb2wvTVxcbk0vU01HQlxcbk1BL01cXG5NQVNIXFxuTUIvTVxcbk1CQS9NXFxuTUNcXG5NQ0kvTVxcbk1EL01cXG5NRFRcXG5NRVxcbk1FR08vU1xcbk1GQS9NXFxuTUdNL01cXG5NSHpcXG5NSS9NXFxuTUlBXFxuTUlESS9NXFxuTUlQU1xcbk1JUlZcXG5NSVQvTVxcbk1NXFxuTU5cXG5NT1xcbk1PT0NcXG5NUC9NXFxuTVBFR1xcbk1SSS9NXFxuTVMvTVxcbk1TRy9NXFxuTVNUL01cXG5NU1dcXG5NVC9NXFxuTVRWL01cXG5NVlAvTVxcbk1XXFxuTWFhbG94L01cXG5NYWJlbC9NXFxuTWFibGUvTVxcbk1hYy9NXFxuTWFjQXJ0aHVyL01cXG5NYWNCcmlkZS9NXFxuTWFjRG9uYWxkL01cXG5NYWNMZWlzaC9NXFxuTWFjYW8vTVxcbk1hY2F1bGF5L01cXG5NYWNiZXRoL01cXG5NYWNjYWJlZXNcXG5NYWNjYWJldXMvTVxcbk1hY2UvTVxcbk1hY2Vkb24vTVxcbk1hY2Vkb25pYS9NXFxuTWFjZWRvbmlhbi9TTVxcbk1hY2gvTVxcbk1hY2hpYXZlbGxpL01cXG5NYWNoaWF2ZWxsaWFuL01cXG5NYWNpYXMvTVxcbk1hY2ludG9zaC9NXFxuTWFjay9NXFxuTWFja2VuemllL01cXG5NYWNraW5hYy9NXFxuTWFja2luYXcvTVxcbk1hY21pbGxhbi9NXFxuTWFjb24vTVxcbk1hY3VtYmEvTVxcbk1hY3kvTVxcbk1hZGFnYXNjYW4vU01cXG5NYWRhZ2FzY2FyL01cXG5NYWRhbVxcbk1hZGRlbi9NXFxuTWFkZG94L01cXG5NYWRlaXJhL1NNXFxuTWFkZWxlaW5lL01cXG5NYWRlbGluZS9NXFxuTWFkZWx5bi9NXFxuTWFkZXJhL01cXG5NYWRnZS9NXFxuTWFkaXNvbi9NXFxuTWFkb25uYS9TTVxcbk1hZHJhcy9NXFxuTWFkcmlkL01cXG5NYWR1cmFpL01cXG5NYWUvTVxcbk1hZXRlcmxpbmNrL01cXG5NYWZpYS9NU1xcbk1hZmlvc28vTVxcbk1hZ2RhbGVuYS9NXFxuTWFnZGFsZW5lL01cXG5NYWdlbGxhbi9NXFxuTWFnZWxsYW5pYy9NXFxuTWFnZ2llL01cXG5NYWdocmViL01cXG5NYWdpXFxuTWFnaW5vdC9NXFxuTWFnbmlmaWNhdFxcbk1hZ25pdG9nb3Jzay9NXFxuTWFnb2cvTVxcbk1hZ29vL01cXG5NYWdyaXR0ZS9NXFxuTWFnc2F5c2F5L01cXG5NYWd1c1xcbk1hZ3lhci9TTVxcbk1haGFiaGFyYXRhL01cXG5NYWhhcmFzaHRyYS9NXFxuTWFoYXZpcmEvTVxcbk1haGF5YW5hL01cXG5NYWhheWFuaXN0L01cXG5NYWhkaS9NXFxuTWFoZm91ei9NXFxuTWFoaWNhbi9TTVxcbk1haGxlci9NXFxuTWFpL01cXG5NYWlkZW5mb3JtL01cXG5NYWlncmV0L01cXG5NYWlsZXIvTVxcbk1haWxsb2wvTVxcbk1haW1hbi9NXFxuTWFpbW9uaWRlcy9NXFxuTWFpbmUvTVpSXFxuTWFpbmVyL01cXG5NYWlzaWUvTVxcbk1haXRyZXlhL01cXG5NYWpcXG5NYWplc3R5XFxuTWFqb3IvTVxcbk1ham9yY2EvTVxcbk1hanVyby9NXFxuTWFrYXJpb3MvTVxcbk1ha2VyL01cXG5NYWxhYmFyL01cXG5NYWxhYm8vTVxcbk1hbGFjY2EvTVxcbk1hbGFjaGkvTVxcbk1hbGFnYXN5L01cXG5NYWxhbXVkL01cXG5NYWxhcHJvcC9NXFxuTWFsYXdpL01cXG5NYWxhd2lhbi9TTVxcbk1hbGF5L01TXFxuTWFsYXlhL01cXG5NYWxheWFsYW0vTVxcbk1hbGF5YW4vTVNcXG5NYWxheXNpYS9NXFxuTWFsYXlzaWFuL01TXFxuTWFsY29sbS9NXFxuTWFsZGl2ZS9NU1xcbk1hbGRpdmVzL01cXG5NYWxkaXZpYW4vTVNcXG5NYWxkb25hZG8vTVxcbk1hbGUvTVxcbk1hbGkvTVxcbk1hbGlhbi9TTVxcbk1hbGlidS9NXFxuTWFsaW5kYS9NXFxuTWFsaW5vd3NraS9NXFxuTWFsbGFybWUvTVxcbk1hbGxvbWFycy9NXFxuTWFsbG9yeS9NXFxuTWFsb25lL01cXG5NYWxvcnkvTVxcbk1hbHBsYXF1ZXQvTVxcbk1hbHJhdXgvTVxcbk1hbHRhL01cXG5NYWx0ZXNlL01cXG5NYWx0aHVzL01cXG5NYWx0aHVzaWFuL1NNXFxuTWFtZWx1a2UvTVxcbk1hbWV0L01cXG5NYW1pZS9NXFxuTWFtb3JlL01cXG5NYW4vTVxcbk1hbmFndWEvTVxcbk1hbmFtYS9NXFxuTWFuYXNzZWgvTVxcbk1hbmNoZXN0ZXIvTVxcbk1hbmNodS9TTVxcbk1hbmNodXJpYS9NXFxuTWFuY2h1cmlhbi9NXFxuTWFuY2luaS9NXFxuTWFuY3VuaWFuL01TXFxuTWFuZGFsYXkvTVxcbk1hbmRhcmluL01cXG5NYW5kZWxhL01cXG5NYW5kZWxicm90L01cXG5NYW5kZXZpbGxlL01cXG5NYW5kaW5nby9NXFxuTWFuZHJlbGwvTVxcbk1hbmR5L01cXG5NYW5ldC9NXFxuTWFuZnJlZC9NXFxuTWFuaGF0dGFuL1NNXFxuTWFuaS9NXFxuTWFuaWNoZWFuL01cXG5NYW5pbGEvU01cXG5NYW5pdG9iYS9NXFxuTWFuaXRvdWxpbi9NXFxuTWFua2F0by9NXFxuTWFubGV5L01cXG5NYW5uL0dNXFxuTWFubmhlaW0vTVxcbk1hbm5pbmcvTVxcbk1hbnNmaWVsZC9NXFxuTWFuc29uL01cXG5NYW50ZWNhL01cXG5NYW50ZWduYS9NXFxuTWFudGxlL01cXG5NYW51ZWwvTVxcbk1hbnVlbGEvTVxcbk1hbngvTVxcbk1hby9NXFxuTWFvaXNtL1NNXFxuTWFvaXN0L1NNXFxuTWFvcmkvTVNcXG5NYXBwbGV0aG9ycGUvTVxcbk1hcHV0by9NXFxuTWFyL1NNXFxuTWFyYS9NXFxuTWFyYWNhaWJvL01cXG5NYXJhdC9NXFxuTWFyYXRoYS9NXFxuTWFyYXRoaS9NXFxuTWFyYXRob24vTVxcbk1hcmMvTVxcbk1hcmNlYXUvTVxcbk1hcmNlbC9NXFxuTWFyY2VsaW5vL01cXG5NYXJjZWxsYS9NXFxuTWFyY2Vsby9NXFxuTWFyY2gvTVNcXG5NYXJjaS9NXFxuTWFyY2lhL01cXG5NYXJjaWFuby9NXFxuTWFyY2llL01cXG5NYXJjby9NU1xcbk1hcmNvbmkvTVxcbk1hcmNvcy9NXFxuTWFyY3VzL01cXG5NYXJjdXNlXFxuTWFyY3kvTVxcbk1hcmR1ay9NXFxuTWFyZ2FyZXQvTVxcbk1hcmdhcml0YS9NXFxuTWFyZ2FyaXRvL01cXG5NYXJnZS9NXFxuTWFyZ2VyeS9NXFxuTWFyZ2llL01cXG5NYXJnby9NXFxuTWFyZ290XFxuTWFyZ3JldC9NXFxuTWFyZ3JldGhlL01cXG5NYXJndWVyaXRlL01cXG5NYXJpL1NNXFxuTWFyaWEvTVxcbk1hcmlhREIvTVxcbk1hcmlhbi9NXFxuTWFyaWFuYS9TTVxcbk1hcmlhbmFzL01cXG5NYXJpYW5uZS9NXFxuTWFyaWFuby9NXFxuTWFyaWJlbC9NXFxuTWFyaWNlbGEvTVxcbk1hcmllL01cXG5NYXJpZXR0YS9NXFxuTWFyaWx5bi9NXFxuTWFyaW4vTVxcbk1hcmluYS9NXFxuTWFyaW5lL1NNXFxuTWFyaW8vTVxcbk1hcmlvbi9NXFxuTWFyaXMvTVxcbk1hcmlzYS9NXFxuTWFyaXNvbC9NXFxuTWFyaXNzYS9NXFxuTWFyaXRhaW4vTVxcbk1hcml0emEvTVxcbk1hcml1cG9sXFxuTWFyaXVzL01cXG5NYXJqb3JpZS9NXFxuTWFyam9yeS9NXFxuTWFyay9TTVxcbk1hcmthYi9NXFxuTWFya2hhbS9NXFxuTWFya292L01cXG5NYXJrcy9NXFxuTWFybGEvTVxcbk1hcmxib3JvL01cXG5NYXJsYm9yb3VnaC9NXFxuTWFybGVuZS9NXFxuTWFybGV5L01cXG5NYXJsaW4vTVxcbk1hcmxvbi9NXFxuTWFybG93ZS9NXFxuTWFybWFyYS9NXFxuTWFybmUvTVxcbk1hcm9uaXRlL01cXG5NYXJwbGUvTVxcbk1hcnF1ZXNhcy9NXFxuTWFycXVldHRlL01cXG5NYXJxdWV6L01cXG5NYXJxdWlzL01cXG5NYXJxdWl0YS9NXFxuTWFycmFrZXNoL01cXG5NYXJyaW90dC9NXFxuTWFycy9NU1xcbk1hcnNhbGEvTVxcbk1hcnNlaWxsYWlzZS9NU1xcbk1hcnNlaWxsZXMvTVxcbk1hcnNoL01cXG5NYXJzaGEvTVxcbk1hcnNoYWxsL01cXG5NYXJ0YS9NXFxuTWFydGVsL01cXG5NYXJ0aGEvTVxcbk1hcnRpYWwvTVxcbk1hcnRpYW4vU01cXG5NYXJ0aW4vTVxcbk1hcnRpbmEvTVxcbk1hcnRpbmV6L01cXG5NYXJ0aW5pcXVlL01cXG5NYXJ0eS9NXFxuTWFydmEvTVxcbk1hcnZlbGwvTVxcbk1hcnZpbi9NXFxuTWFyeC9NXFxuTWFyeGlhblxcbk1hcnhpc20vU01cXG5NYXJ4aXN0L1NNXFxuTWFyeS9NXFxuTWFyeWFubi9NXFxuTWFyeWFubmUvTVxcbk1hcnllbGxlbi9NXFxuTWFyeWxhbmQvTVJcXG5NYXJ5bGFuZGVyL01cXG5NYXJ5bG91L01cXG5NYXJ5c3ZpbGxlL01cXG5NYXNhZGEvTVxcbk1hc2FpL01cXG5NYXNhcnlrL01cXG5NYXNjYWduaS9NXFxuTWFzZWZpZWxkL01cXG5NYXNlcmF0aS9NXFxuTWFzZXJ1L01cXG5NYXNoaGFkL01cXG5NYXNvbi9NU1xcbk1hc29uaWMvTVxcbk1hc29uaXRlL01cXG5NYXNzL01TXFxuTWFzc2FjaHVzZXR0cy9NXFxuTWFzc2Fzb2l0L01cXG5NYXNzZW5ldC9NXFxuTWFzc2V5L01cXG5NYXN0ZXIvU1xcbk1hc3RlckNhcmQvTVxcbk1hc3RlcnMvTVxcbk1hdGhlci9NXFxuTWF0aGVzb24vTVxcbk1hdGhldy9TTVxcbk1hdGhld3MvTVxcbk1hdGhld3Nvbi9NXFxuTWF0aGlhcy9NXFxuTWF0aGlzL01cXG5NYXRpbGRhL01cXG5NYXRpc3NlL01cXG5NYXRsYWIvTVxcbk1hdHQvTVxcbk1hdHRlbC9NXFxuTWF0dGVyaG9ybi9NXFxuTWF0dGhldy9TTVxcbk1hdHRoZXdzL01cXG5NYXR0aGlhcy9NXFxuTWF0dGllL01cXG5NYXVkL01cXG5NYXVkZS9NXFxuTWF1Z2hhbS9NXFxuTWF1aS9NXFxuTWF1bGRpbi9NXFxuTWF1cGFzc2FudC9NXFxuTWF1cmEvTVxcbk1hdXJlZW4vTVxcbk1hdXJpYWMvTVxcbk1hdXJpY2UvTVxcbk1hdXJpY2lvL01cXG5NYXVyaW5lL01cXG5NYXVyaXRhbmlhL01cXG5NYXVyaXRhbmlhbi9TTVxcbk1hdXJpdGlhbi9TTVxcbk1hdXJpdGl1cy9NXFxuTWF1cm8vTVxcbk1hdXJvaXMvTVxcbk1hdXJ5YW4vTVxcbk1hdXNlci9NXFxuTWF2aXMvTVxcbk1heC9NXFxuTWF4aW1pbGlhbi9NXFxuTWF4aW5lL01cXG5NYXh3ZWxsL01cXG5NYXkvU01SXFxuTWF5YS9TTVxcbk1heWFuL01TXFxuTWF5ZXIvTVxcbk1heWZhaXIvTVxcbk1heWZsb3dlci9NXFxuTWF5bmFyZC9NXFxuTWF5by9NXFxuTWF5cG9sZVxcbk1heXJhL01cXG5NYXlzL01cXG5NYXl0YWcvTVxcbk1hemFtYS9NXFxuTWF6YXJpbi9NXFxuTWF6YXRsYW4vTVxcbk1hemRhL01cXG5NYXpvbGEvTVxcbk1henppbmkvTVxcbk1iL01cXG5NYmFiYW5lL01cXG5NYmluaS9NXFxuTWNBZGFtL01cXG5NY0FsbGVuL01cXG5NY0JyaWRlL01cXG5NY0NhaW4vTVxcbk1jQ2FsbC9NXFxuTWNDYXJ0aHkvTVxcbk1jQ2FydGh5aXNtL01cXG5NY0NhcnRuZXkvTVxcbk1jQ2FydHkvTVxcbk1jQ2xhaW4vTVxcbk1jQ2xlbGxhbi9NXFxuTWNDbHVyZS9NXFxuTWNDb25uZWxsL01cXG5NY0Nvcm1pY2svTVxcbk1jQ295L01cXG5NY0NyYXkvTVxcbk1jQ3VsbG91Z2gvTVxcbk1jRGFuaWVsL01cXG5NY0RvbmFsZC9NXFxuTWNEb25uZWxsL01cXG5NY0Rvd2VsbC9NXFxuTWNFbnJvZS9NXFxuTWNGYWRkZW4vTVxcbk1jRmFybGFuZC9NXFxuTWNHZWUvTVxcbk1jR292ZXJuL01cXG5NY0dvd2FuL01cXG5NY0d1ZmZleS9NXFxuTWNHdWlyZS9NXFxuTWNIZW5yeS9NXFxuTWNJbnRvc2gvTVxcbk1jSW50eXJlL01cXG5NY0pvYlxcbk1jS2F5L01cXG5NY0tlZS9NXFxuTWNLZW56aWUvTVxcbk1jS2lubGV5L01cXG5NY0tpbm5leS9NXFxuTWNLbmlnaHQvTVxcbk1jTGF1Z2hsaW4vTVxcbk1jTGVhbi9NXFxuTWNMZW9kL01cXG5NY0x1aGFuL01cXG5NY01haG9uL01cXG5NY01pbGxhbi9NXFxuTWNOYW1hcmEvTVxcbk1jTmF1Z2h0b24vTVxcbk1jTmVpbC9NXFxuTWNQaGVyc29uL01cXG5NY1F1ZWVuL01cXG5NY1ZlaWdoL01cXG5NZC9NXFxuTWVcXG5NZWFkL01cXG5NZWFkZS9NXFxuTWVhZG93cy9NXFxuTWVhZ2FuL01cXG5NZWFueS9NXFxuTWVjY2EvTVNcXG5NZWRhbi9NXFxuTWVkZWEvTVxcbk1lZGVsbGluL01cXG5NZWRmb3JkL01cXG5NZWRpYS9NXFxuTWVkaWNhaWQvU01cXG5NZWRpY2FyZS9TTVxcbk1lZGljaS9NXFxuTWVkaW5hL01cXG5NZWRpdGVycmFuZWFuL01TXFxuTWVkdXNhL01cXG5NZWcvTVxcbk1lZ2FuL01cXG5NZWdoYW4vTVxcbk1laWVyL01cXG5NZWlnaGVuL01cXG5NZWlqaS9NXFxuTWVpci9NXFxuTWVqaWEvTVxcbk1la29uZy9NXFxuTWVsL01cXG5NZWxhbmVzaWEvTVxcbk1lbGFuZXNpYW4vTVxcbk1lbGFuaWUvTVxcbk1lbGJhL01cXG5NZWxib3VybmUvTVxcbk1lbGNoaW9yL01cXG5NZWxjaGl6ZWRlay9NXFxuTWVsZW5kZXovTVxcbk1lbGluZGEvTVxcbk1lbGlzYS9NXFxuTWVsaXNhbmRlL01cXG5NZWxpc3NhL01cXG5NZWxsb24vTVxcbk1lbG9keS9NXFxuTWVscG9tZW5lL01cXG5NZWx0b24vTVxcbk1lbHZhL01cXG5NZWx2aWxsZS9NXFxuTWVsdmluL01cXG5NZW1jYWNoZWQvTVxcbk1lbWxpbmcvTVxcbk1lbXBoaXMvTVxcbk1lbmFuZGVyL01cXG5NZW5jaXVzL01cXG5NZW5ja2VuL01cXG5NZW5kZWwvTVxcbk1lbmRlbGVldi9NXFxuTWVuZGVsaWFuL01cXG5NZW5kZWxzc29obi9NXFxuTWVuZGV6L01cXG5NZW5kb2Npbm8vTVxcbk1lbmRvemEvTVxcbk1lbmVsYXVzL01cXG5NZW5lbGlrL01cXG5NZW5lcy9NXFxuTWVuZ3ppXFxuTWVuaWZlZS9NXFxuTWVua2FsaW5hbi9NXFxuTWVua2FyL01cXG5NZW5rZW50L01cXG5NZW5uZW4vTVxcbk1lbm5vbml0ZS9NU1xcbk1lbm9taW5lZS9NXFxuTWVub3R0aS9NXFxuTWVuc2EvTVxcbk1lbnRob2xhdHVtL01cXG5NZW51aGluL01cXG5NZW56aWVzL01cXG5NZXBoaXN0b1xcbk1lcGhpc3RvcGhlbGVzL01cXG5NZXJhay9NXFxuTWVyY2Fkby9NXFxuTWVyY2F0b3IvTVxcbk1lcmNlZC9NXFxuTWVyY2VkZXMvTVxcbk1lcmNlci9NXFxuTWVyY2lhL01cXG5NZXJjay9NXFxuTWVyY3Vyb2Nocm9tZS9NXFxuTWVyY3VyeS9TTVxcbk1lcmVkaXRoL01cXG5NZXJpbm8vTVxcbk1lcmxlL01cXG5NZXJsaW4vTVxcbk1lcmxvdC9NXFxuTWVyb3ZpbmdpYW4vTVxcbk1lcnJpYW0vTVxcbk1lcnJpY2svTVxcbk1lcnJpbGwvTVxcbk1lcnJpbWFjay9NXFxuTWVycml0dC9NXFxuTWVydGhpb2xhdGUvTVxcbk1lcnRvbi9NXFxuTWVydmluL01cXG5NZXNhL01cXG5NZXNhYmkvTVxcbk1lc21lci9NXFxuTWVzb2xpdGhpYy9NXFxuTWVzb3BvdGFtaWEvTVxcbk1lc29wb3RhbWlhblxcbk1lc296b2ljL01cXG5NZXNzZXJzY2htaWR0L01cXG5NZXNzaWFlbi9NXFxuTWVzc2lhaC9NXFxuTWVzc2lhaHNcXG5NZXNzaWFuaWNcXG5NZXNzaWV1cnNcXG5NZXRhbGxpY2EvTVxcbk1ldGFtdWNpbC9NXFxuTWV0aG9kaXNtL1NNXFxuTWV0aG9kaXN0L1NNXFxuTWV0aHVzZWxhaC9NXFxuTWV0dGVybmljaC9NXFxuTWV1c2UvTVxcbk1leFxcbk1leGljYWxpL01cXG5NZXhpY2FuL01TXFxuTWV4aWNvL01cXG5NZXllci9NU1xcbk1leWVyYmVlci9NXFxuTWV5ZXJzL01cXG5NZnVtZS9NXFxuTWcvTVxcbk1nclxcbk1pRy9NXFxuTWlhL01cXG5NaWFtaS9NU1xcbk1pYXBsYWNpZHVzL01cXG5NaWNhaC9NXFxuTWljYXdiZXIvTVxcbk1pY2gvTVxcbk1pY2hhZWwvTVxcbk1pY2hhZWxtYXMvTVNcXG5NaWNoZWFsL01cXG5NaWNoZWwvTVxcbk1pY2hlbGFuZ2Vsby9NXFxuTWljaGVsZS9NXFxuTWljaGVsaW4vTVxcbk1pY2hlbGxlL01cXG5NaWNoZWxvYi9NXFxuTWljaGVsc29uL01cXG5NaWNoaWdhbi9NXFxuTWljaGlnYW5kZXIvTVNcXG5NaWNoaWdhbml0ZVxcbk1pY2svTVxcbk1pY2tleS9NXFxuTWlja2llL01cXG5NaWNreS9NXFxuTWljbWFjL1NNXFxuTWljcm9uZXNpYS9NXFxuTWljcm9uZXNpYW4vTVxcbk1pY3Jvc29mdC9NXFxuTWlkYXMvTVxcbk1pZGRsZXRvbi9NXFxuTWlkZGxldG93bi9NXFxuTWlkZWFzdFxcbk1pZGVhc3Rlcm5cXG5NaWRsYW5kL01TXFxuTWlkd2F5L01cXG5NaWR3ZXN0L01cXG5NaWR3ZXN0ZXJuL01SXFxuTWlndWVsL01cXG5NaWtlL01cXG5NaWtoYWlsL01cXG5NaWtveWFuL01cXG5NaWxhZ3Jvcy9NXFxuTWlsYW4vTVxcbk1pbGFuZXNlXFxuTWlsZHJlZC9NXFxuTWlsZXMvTVxcbk1pbGZvcmQvTVxcbk1pbGtlbi9NXFxuTWlsbC9TTVJcXG5NaWxsYXJkL01cXG5NaWxsYXkvTVxcbk1pbGxlci9NXFxuTWlsbGV0L01cXG5NaWxsaWNlbnQvTVxcbk1pbGxpZS9NXFxuTWlsbGlrYW4vTVxcbk1pbGxzL01cXG5NaWxuZS9NXFxuTWlsby9NXFxuTWlsb3NldmljL01cXG5NaWxxdWV0b2FzdC9NXFxuTWlsdGlhZGVzL01cXG5NaWx0b24vTVxcbk1pbHRvbmlhblxcbk1pbHRvbmljL01cXG5NaWx0b3duL01cXG5NaWx3YXVrZWUvTVxcbk1pbWkvTVxcbk1pbW9zYS9NXFxuTWluL01cXG5NaW5hbW90by9NXFxuTWluZGFuYW8vTVxcbk1pbmRvcm8vTVxcbk1pbmR5L01cXG5NaW5lcnZhL01cXG5NaW5nL01cXG5NaW5ndXMvTVxcbk1pbm5cXG5NaW5uZWFwb2xpcy9NXFxuTWlubmVsbGkvTVxcbk1pbm5lc290YS9NXFxuTWlubmVzb3Rhbi9TTVxcbk1pbm5pZS9NXFxuTWlub2FuL01TXFxuTWlub2x0YS9NXFxuTWlub3MvTVxcbk1pbm90L01cXG5NaW5vdGF1ci9NXFxuTWluc2svTVxcbk1pbnNreS9NXFxuTWludGFrYS9NXFxuTWludWl0L01cXG5NaW51dGVtYW4vTVxcbk1pb2NlbmUvTVxcbk1pci9NXFxuTWlyYS9NXFxuTWlyYWJlYXUvTVxcbk1pcmFjaC9NXFxuTWlyYW5kYS9NXFxuTWlyZmFrL01cXG5NaXJpYW0vTVxcbk1pcm8vTVxcbk1pcnphbS9NXFxuTWlza2l0by9NXFxuTWlzc1xcbk1pc3Npc3NhdWdhL01cXG5NaXNzaXNzaXBwaS9NXFxuTWlzc2lzc2lwcGlhbi9TTVxcbk1pc3NvdWxhL01cXG5NaXNzb3VyaS9NXFxuTWlzc291cmlhbi9NU1xcbk1pc3N5L01cXG5NaXN0YXNzaW5pL01cXG5NaXN0ZXJcXG5NaXN0cmVzc1xcbk1pc3R5L01cXG5NaXRjaC9NXFxuTWl0Y2hlbC9NXFxuTWl0Y2hlbGwvTVxcbk1pdGZvcmQvTVxcbk1pdGhyYS9NXFxuTWl0aHJpZGF0ZXMvTVxcbk1pdHN1YmlzaGkvTVxcbk1pdHRlcnJhbmQvTVxcbk1pdHR5L01cXG5NaXR6aS9NXFxuTWl4dGVjL01cXG5NaXphci9NXFxuTWtcXG5NbGxlXFxuTW1lL1NcXG5Nbi9NXFxuTW5lbW9zeW5lL01cXG5Nby9NXFxuTW9iaWwvTVxcbk1vYmlsZS9NXFxuTW9idXR1L01cXG5Nb2Rlc3RvL01cXG5Nb2RpZ2xpYW5pL01cXG5Nb2UvTVxcbk1vZXQvTVxcbk1vZ2FkaXNodS9NXFxuTW9ndWwvTVNcXG5Nb2hhY3MvTVxcbk1vaGFtZWQvTVxcbk1vaGFtbWFkL01cXG5Nb2hhbW1lZGFuL1NNXFxuTW9oYW1tZWRhbmlzbS9TTVxcbk1vaGF2ZS9TTVxcbk1vaGF3ay9TTVxcbk1vaGVnYW5cXG5Nb2hvL01cXG5Nb2hvcm92aWNpYy9NXFxuTW9pcmEvTVxcbk1vaXNlcy9NXFxuTW9pc2V5ZXYvTVxcbk1vamF2ZS9TTVxcbk1vbGRhdmlhL01cXG5Nb2xkYXZpYW5cXG5Nb2xkb3ZhL01cXG5Nb2xkb3Zhblxcbk1vbGllcmUvTVxcbk1vbGluYS9NXFxuTW9sbC9NXFxuTW9sbGllL01cXG5Nb2xseS9NXFxuTW9sbmFyL01cXG5Nb2xvY2gvTVxcbk1vbG9rYWkvTVxcbk1vbG90b3YvTVxcbk1vbHVjY2FzL01cXG5Nb21iYXNhL01cXG5Nb24vU01cXG5Nb25hL01cXG5Nb25hY2FuXFxuTW9uYWNvL01cXG5Nb25kYWxlL01cXG5Nb25kYXkvU01cXG5Nb25kcmlhbi9NXFxuTW9uZWdhc3F1ZS9TTVxcbk1vbmVyYS9NXFxuTW9uZXNzZW4vTVxcbk1vbmV0L01cXG5Nb25nb0RCL01cXG5Nb25nb2wvU01cXG5Nb25nb2xpYS9NXFxuTW9uZ29saWFuL1NNXFxuTW9uZ29saWMvTVxcbk1vbmdvbG9pZFxcbk1vbmljYS9NXFxuTW9uaXF1ZS9NXFxuTW9uay9NXFxuTW9ubW91dGgvTVxcbk1vbm9uZ2FoZWxhL01cXG5Nb25yb2UvTVxcbk1vbnJvdmlhL01cXG5Nb25zYW50by9NXFxuTW9uc2lldXIvTVxcbk1vbnNpZ25vci9TTVxcbk1vbnQvTVxcbk1vbnRhZ3VlL01cXG5Nb250YWlnbmUvTVxcbk1vbnRhbmEvTVxcbk1vbnRhbmFuL1NNXFxuTW9udGNhbG0vTVxcbk1vbnRlL01cXG5Nb250ZW5lZ3Jpbi9NXFxuTW9udGVuZWdyby9NXFxuTW9udGVyZXkvTVxcbk1vbnRlcnJleS9NXFxuTW9udGVzcXVpZXUvTVxcbk1vbnRlc3NvcmkvTVxcbk1vbnRldmVyZGkvTVxcbk1vbnRldmlkZW8vTVxcbk1vbnRlenVtYS9NXFxuTW9udGdvbGZpZXIvTVxcbk1vbnRnb21lcnkvTVxcbk1vbnRpY2VsbG8vTVxcbk1vbnRveWEvTVxcbk1vbnRwZWxpZXIvTVxcbk1vbnRyYWNoZXQvTVxcbk1vbnRyZWFsL01cXG5Nb250c2VycmF0L01cXG5Nb250eS9NXFxuTW9vZHkvTVxcbk1vb2cvTVxcbk1vb24vTVxcbk1vb25leS9NXFxuTW9vci9TTVxcbk1vb3JlL01cXG5Nb29yaXNoL01cXG5Nb3JhbGVzL01cXG5Nb3Jhbi9NXFxuTW9yYXZpYS9NXFxuTW9yYXZpYW4vTVxcbk1vcmRyZWQvTVxcbk1vcmUvTVxcbk1vcmVuby9NXFxuTW9yZ2FuL1NNXFxuTW9yZ2FudG93bi9NXFxuTW9yaWFydHkvTVxcbk1vcmluL01cXG5Nb3Jpc29uL01cXG5Nb3JpdGEvTVxcbk1vcmxleS9NXFxuTW9ybW9uL1NNXFxuTW9ybW9uaXNtL1NNXFxuTW9yby9NXFxuTW9yb2NjYW4vU01cXG5Nb3JvY2NvL01cXG5Nb3JvbmkvTVxcbk1vcnBoZXVzL01cXG5Nb3JwaHkvTVxcbk1vcnJpcy9NXFxuTW9ycmlzb24vTVxcbk1vcnJpc3Rvd24vTVxcbk1vcnJvdy9NXFxuTW9yc2UvTVxcbk1vcnQvTVxcbk1vcnRpbWVyL01cXG5Nb3J0b24vTVxcbk1vc2FpYy9NXFxuTW9zY293L01cXG5Nb3NlbGV5L01cXG5Nb3NlbGxlL01cXG5Nb3Nlcy9NXFxuTW9zbGV5L01cXG5Nb3NzL01cXG5Nb3N1bC9NXFxuTW90b3JvbGEvTVxcbk1vdG93bi9NXFxuTW90cmluL01cXG5Nb3R0L01cXG5Nb3VsdG9uL01cXG5Nb3VudC9NXFxuTW91bnRiYXR0ZW4vTVxcbk1vdW50aWUvTVNcXG5Nb3Vzc29yZ3NreS9NXFxuTW91dGhlL01cXG5Nb3V0b24vTVxcbk1vd2dsaS9NXFxuTW96YW1iaWNhbi9TTVxcbk1vemFtYmlxdWUvTVxcbk1vemFydC9NXFxuTW96aWxsYS9NXFxuTXIvU01cXG5Ncy9TXFxuTXNnclxcbk10XFxuTXVhd2l5YS9NXFxuTXViYXJhay9NXFxuTXVlbGxlci9NXFxuTXVlbnN0ZXIvTVNcXG5NdWdhYmUvTVxcbk11aGFtbWFkL01cXG5NdWhhbW1hZGFuL01TXFxuTXVoYW1tYWRhbmlzbS9TTVxcbk11aXIvTVxcbk11amliL01cXG5NdWxkZXIvTVxcbk11bGxlbi9NXFxuTXVsbGVyL01cXG5NdWxsaWdhbi9NXFxuTXVsbGlrYW4vTVxcbk11bGxpbnMvTVxcbk11bHJvbmV5L01cXG5NdWx0YW4vTVxcbk11bHRpY3NcXG5NdW1iYWkvTVxcbk11bWZvcmQvTVxcbk11bmNoL01cXG5NdW5jaGhhdXNlbi9NXFxuTXVuY2llL01cXG5NdW5pY2gvTVxcbk11bm96L01cXG5NdW5yby9NXFxuTXVuc3Rlci9NXFxuTXVwcGV0L01cXG5NdXJhc2FraS9NXFxuTXVyYXQvTVxcbk11cmNoaXNvbi9NXFxuTXVyY2lhXFxuTXVyZG9jaC9NXFxuTXVyZnJlZXNib3JvL01cXG5NdXJpZWwvTVxcbk11cmlsbG8vTVxcbk11cmluZS9NXFxuTXVybWFuc2svTVxcbk11cnBoeS9NXFxuTXVycmF5L01cXG5NdXJyaWV0YS9NXFxuTXVycm93L01cXG5NdXJydW1iaWRnZWUvTVxcbk11c2NhdC9NXFxuTXVzY292aXRlL01cXG5NdXNjb3Z5L01cXG5NdXNlL01cXG5NdXNoYXJyYWYvTVxcbk11c2lhbC9NXFxuTXVza2Vnb24vTVxcbk11c2tvZ2VlL01cXG5NdXNsaW0vTVNcXG5NdXNzb2xpbmkvTVxcbk11c3Nvcmdza3kvTVxcbk11dHN1aGl0by9NXFxuTXV6YWsvTVxcbk15U1FML01cXG5NeVNwYWNlL01cXG5NeWFubWFyL01cXG5NeWNlbmFlL01cXG5NeWNlbmFlYW4vTVxcbk15ZXJzL01cXG5NeWxhci9NU1xcbk15bGVzL01cXG5NeXJhL01cXG5NeXJkYWwvTVxcbk15cm5hL01cXG5NeXJvbi9NXFxuTXlydGxlL01cXG5NeXNvcmUvTVxcbk15c3QvTVxcbk4nRGphbWVuYVxcbk4vTURcXG5OQUFDUC9NXFxuTkFGVEEvTVxcbk5BU0EvTVxcbk5BU0NBUi9NXFxuTkFTREFRL01cXG5OQVRPL01cXG5OQlxcbk5CQS9NXFxuTkJDL01cXG5OQlNcXG5OQ1xcbk5DQUEvTVxcbk5DT1xcbk5EXFxuTkUvTVxcbk5FSFxcbk5GXFxuTkZDXFxuTkZML01cXG5OSFxcbk5ITC9NXFxuTklIXFxuTklNQllcXG5OSlxcbk5MUkJcXG5OTVxcbk5PUkFEL01cXG5OT1dcXG5OUFxcbk5QUi9NXFxuTlJcXG5OUkFcXG5OUkNcXG5OU1xcbk5TQS9NXFxuTlNDXFxuTlNGXFxuTlNGV1xcbk5UXFxuTlZcXG5OVklESUEvTVxcbk5XL01cXG5OV1RcXG5OWVxcbk5ZQ1xcbk5ZU0VcXG5OWlxcbk5hL01cXG5OYWJpc2NvL01cXG5OYWJva292L01cXG5OYWRlci9NXFxuTmFkaWEvTVxcbk5hZGluZS9NXFxuTmFnYXNha2kvTVxcbk5hZ295YS9NXFxuTmFncHVyL01cXG5OYWd5L01cXG5OYWh1YXRsL01TXFxuTmFodW0vTVxcbk5haXBhdWwvTVxcbk5haXIvTVxcbk5haXJvYmkvTVxcbk5haXNtaXRoL01cXG5OYW0vTVxcbk5hbWF0aC9NXFxuTmFtaWJpYS9NXFxuTmFtaWJpYW4vTVNcXG5OYW1wYS9NXFxuTmFuL01cXG5OYW5hay9NXFxuTmFuY2hhbmcvTVxcbk5hbmN5L01cXG5OYW5ldHRlL01cXG5OYW5qaW5nL01cXG5OYW5uaWUvTVxcbk5hbm9vay9NXFxuTmFuc2VuL01cXG5OYW50ZXMvTVxcbk5hbnR1Y2tldC9NXFxuTmFvbWkvTVxcbk5hcGEvTVxcbk5hcGh0YWxpL01cXG5OYXBpZXIvTVxcbk5hcGxlcy9NXFxuTmFwb2xlb24vTVNcXG5OYXBvbGVvbmljL01cXG5OYXBzdGVyL01cXG5OYXJjaXNzdXMvTVxcbk5hcm1hZGEvTVxcbk5hcm5pYS9NXFxuTmFycmFnYW5zZXRcXG5OYXJyYWdhbnNldHQvTVxcbk5hc2gvTVxcbk5hc2h1YS9NXFxuTmFzaHZpbGxlL01cXG5OYXNzYXUvTVxcbk5hc3Nlci9NXFxuTmF0L01cXG5OYXRhbGlhL01cXG5OYXRhbGllL01cXG5OYXRhc2hhL01cXG5OYXRjaGV6L01cXG5OYXRlL01OXFxuTmF0aGFuL1NNXFxuTmF0aGFuaWVsL01cXG5OYXRoYW5zL01cXG5OYXRpb24vTVxcbk5hdGlvbndpZGUvTVxcbk5hdGl2aXR5L01cXG5OYXVnYWh5ZGUvTVxcbk5hdXJ1L01cXG5OYXV0aWx1cy9NXFxuTmF2YWpvL1NNXFxuTmF2YWpvZXNcXG5OYXZhcnJlL01cXG5OYXZhcnJvL01cXG5OYXZyYXRpbG92YS9NXFxuTmF2eVxcbk5hemFyZW5lL01cXG5OYXphcmV0aC9NXFxuTmF6Y2EvTVxcbk5hemkvU01cXG5OYXppc20vTVNcXG5OYi9NXFxuTmQvTVxcbk5kamFtZW5hL01cXG5OZS9NXFxuTmVXU1xcbk5lV1Nlc1xcbk5lYWwvTVxcbk5lYW5kZXJ0aGFsL1NNXFxuTmVhcG9saXRhbi9NXFxuTmViXFxuTmViclxcbk5lYnJhc2thL01cXG5OZWJyYXNrYW4vTVNcXG5OZWJ1Y2hhZG5lenphci9NXFxuTmVkL01cXG5OZWZlcnRpdGkvTVxcbk5lZ2V2L01cXG5OZWdyZXNzL01TXFxuTmVncml0dWRlXFxuTmVncm8vTVNcXG5OZWdyb2VzXFxuTmVncm9pZC9TTVxcbk5lZ3Jvcy9NXFxuTmVoZW1pYWgvTVxcbk5laHJ1L01cXG5OZWlsL01cXG5OZWxkYS9NXFxuTmVsbC9NXFxuTmVsbGllL01cXG5OZWxseS9NXFxuTmVsc2VuL01cXG5OZWxzb24vTVxcbk5lbWJ1dGFsL01cXG5OZW1lc2lzL01cXG5OZW8vTVxcbk5lb2dlbmUvTVxcbk5lb2xpdGhpY1xcbk5lcGFsL01cXG5OZXBhbGVzZS9NXFxuTmVwYWxpL01TXFxuTmVwdHVuZS9NXFxuTmVyZWlkL01cXG5OZXJmL01cXG5OZXJvL01cXG5OZXJ1ZGEvTVxcbk5lc2NhZmUvTVxcbk5lc3NlbHJvZGUvTVxcbk5lc3RsZS9NXFxuTmVzdG9yL01cXG5OZXN0b3JpdXMvTVxcbk5ldGZsaXgvTVxcbk5ldGhlcmxhbmRlci9TTVxcbk5ldGhlcmxhbmRzL01cXG5OZXRzY2FwZS9NXFxuTmV0dGllL01cXG5OZXR6YWh1YWxjb3lvdGwvTVxcbk5ldi9NXFxuTmV2YS9NXFxuTmV2YWRhL01cXG5OZXZhZGFuL1NNXFxuTmV2YWRpYW5cXG5OZXZpcy9NXFxuTmV2c2t5L01cXG5OZXdhcmsvTVxcbk5ld2J1cmdoL01cXG5OZXdjYXN0bGUvTVxcbk5ld2ZvdW5kbGFuZC9NUlNcXG5OZXdtYW4vTVxcbk5ld3BvcnQvTVxcbk5ld3N3ZWVrL01cXG5OZXd0b24vTVxcbk5ld3Rvbmlhbi9NXFxuTmV4aXMvTVxcbk5nYWxpZW1hL01cXG5OZ3V5ZW4vTVxcbk5pL01cXG5OaWFnYXJhL01cXG5OaWFtZXkvTVxcbk5pYmVsdW5nL01cXG5OaWNhZWEvTVxcbk5pY2FyYWd1YS9NXFxuTmljYXJhZ3Vhbi9TTVxcbk5pY2NvbG8vTVxcbk5pY2UvTVxcbk5pY2VuZS9NXFxuTmljaGlyZW4vTVxcbk5pY2hvbGFzL01cXG5OaWNob2xlL01cXG5OaWNob2xzL01cXG5OaWNob2xzb24vTVxcbk5pY2svTVxcbk5pY2tlbG9kZW9uL01cXG5OaWNrbGF1cy9NXFxuTmlja29sYXMvTVxcbk5pY29iYXIvTVxcbk5pY29kZW11cy9NXFxuTmljb2xhL1NNXFxuTmljb2xhcy9NXFxuTmljb2xlL01cXG5OaWNvc2lhL01cXG5OaWVidWhyL01cXG5OaWVsc2VuL01cXG5OaWV0enNjaGUvTVxcbk5pZXZlcy9NXFxuTmlnZWwvTVxcbk5pZ2VyL01cXG5OaWdlcmlhL01cXG5OaWdlcmlhbi9NU1xcbk5pZ2VyaWVuL01cXG5OaWdodGluZ2FsZS9NXFxuTmlqaW5za3kvTVxcbk5pa2UvTVxcbk5pa2l0YS9NXFxuTmlra2VpL01cXG5OaWtraS9NXFxuTmlrb2xhaS9NXFxuTmlrb24vTVxcbk5pbGUvTVxcbk5pbWl0ei9NXFxuTmltcm9kL01cXG5OaW5hL01cXG5OaW5ldmVoL01cXG5OaW50ZW5kby9NXFxuTmlvYmUvTVxcbk5pcHBvbi9NXFxuTmlwcG9uZXNlL01cXG5OaXJlbmJlcmcvTVxcbk5pcnZhbmEvTVxcbk5pc2FuL01cXG5OaXNlaS9NXFxuTmlzc2FuL01cXG5OaXRhL01cXG5OaXZlYS9NXFxuTml4b24vTVxcbk5rcnVtYWgvTVxcbk5vL1NNXFxuTm9Eb3ovTVxcbk5vYWgvTVxcbk5vYmVsL01cXG5Ob2JlbGlzdC9NU1xcbk5vYmxlL01cXG5Ob2UvTVxcbk5vZWwvU01cXG5Ob2VsbGUvTVxcbk5vZW1pL01cXG5Ob2tpYS9NXFxuTm9sYS9NXFxuTm9sYW4vTVxcbk5vbWUvTVxcbk5vbmEvTVxcbk5vb3RrYS9NXFxuTm9yYS9NXFxuTm9yYmVydC9NXFxuTm9yYmVydG8vTVxcbk5vcmRpYy9NU1xcbk5vcmVlbi9NXFxuTm9yZm9say9NXFxuTm9yaWVnYS9NXFxuTm9ybWEvTVxcbk5vcm1hbC9NXFxuTm9ybWFuL01TXFxuTm9ybWFuZC9NXFxuTm9ybWFuZHkvTVxcbk5vcnBsYW50L01cXG5Ob3JyaXMvTVxcbk5vcnNlL01cXG5Ob3JzZW1hbi9NXFxuTm9yc2VtZW4vTVxcbk5vcnRoL01cXG5Ob3J0aGFtcHRvbi9NXFxuTm9ydGhlYXN0L01TXFxuTm9ydGhlcm5lci9NXFxuTm9ydGhyb3AvTVxcbk5vcnRocnVwL01cXG5Ob3J0aHNcXG5Ob3J0aHdlc3QvU01cXG5Ob3J0b24vTVxcbk5vcndcXG5Ob3J3YXkvTVxcbk5vcndlZ2lhbi9TTVxcbk5vcndpY2gvTVxcbk5vc2ZlcmF0dS9NXFxuTm9zdHJhZGFtdXMvTVxcbk5vdHRpbmdoYW0vTVxcbk5vdWFrY2hvdHQvTVxcbk5vdW1lYS9NXFxuTm92L01cXG5Ob3ZhL01cXG5Ob3ZhcnRpcy9NXFxuTm92ZW1iZXIvTVNcXG5Ob3Znb3JvZC9NXFxuTm92b2NhaW4vTVNcXG5Ob3ZvY2FpbmVcXG5Ob3Zva3V6bmV0c2svTVxcbk5vdm9zaWJpcnNrL01cXG5Ob3h6ZW1hL01cXG5Ob3ljZS9NXFxuTm95ZXMvTVxcbk5wL01cXG5OdWJpYS9NXFxuTnViaWFuL01cXG5OdWt1YWxvZmEvTVxcbk51bWJlcnMvTVxcbk51bmF2dXQvTVxcbk51bmV6L01cXG5OdW5raS9NXFxuTnVyZW1iZXJnL01cXG5OdXJleWV2L01cXG5OdXRyYVN3ZWV0L01cXG5OeVF1aWwvTVxcbk55YXNhL01cXG5OeWVyZXJlL01cXG5PJ0JyaWVuL01cXG5PJ0Nhc2V5L01cXG5PJ0Nvbm5lbGwvTVxcbk8nQ29ubm9yL01cXG5PJ0Rvbm5lbGwvTVxcbk8nSGFyYS9NXFxuTydIaWdnaW5zL01cXG5PJ0tlZWZmZS9NXFxuTydOZWlsL01cXG5PJ05laWxsL01cXG5PJ1JvdXJrZS9NXFxuTydUb29sZS9NXFxuTy9TTVxcbk9BUy9NXFxuT0JcXG5PQ1JcXG5PRC9TTVxcbk9FXFxuT0VEXFxuT0hcXG5PSFNBL01cXG5PSlxcbk9LL1NNREdcXG5PTUIvTVxcbk9OXFxuT1BFQy9NXFxuT1JcXG5PUy9NXFxuT1NIQS9NXFxuT1Nlc1xcbk9UXFxuT1RCXFxuT1RDXFxuT1RPSFxcbk9haHUvTVxcbk9ha2xhbmQvTVxcbk9ha2xleS9NXFxuT2F0ZXMvTVxcbk9heGFjYS9NXFxuT2IvTVxcbk9iYWRpYWgvTVxcbk9iYW1hL01cXG5PYmFtYWNhcmVcXG5PYmVybGluL01cXG5PYmVyb24vTVxcbk9jYWxhL01cXG5PY2FtbC9NXFxuT2NjYW0vTVxcbk9jY2lkZW50XFxuT2NjaWRlbnRhbC9NU1xcbk9jZWFuaWEvTVxcbk9jZWFuc2lkZVxcbk9jZWFudXMvTVxcbk9jaG9hL01cXG5PY3QvTVxcbk9jdGF2aWEvTVxcbk9jdGF2aWFuL01cXG5PY3RhdmlvL01cXG5PY3RvYmVyL1NNXFxuT2RlbGwvTVxcbk9kZXIvTVxcbk9kZXNzYS9NXFxuT2RldHMvTVxcbk9kaW4vTVxcbk9kaXMvTVxcbk9kb20vTVxcbk9keXNzZXVzL01cXG5PZHlzc2V5L01cXG5PZWRpcGFsL01cXG5PZWRpcHVzL01cXG5PZXJzdGVkL01cXG5PZmVsaWEvTVxcbk9mZmVuYmFjaC9NXFxuT2ZmaWNlTWF4L01cXG5PZ2JvbW9zaG8vTVxcbk9nZGVuL01cXG5PZ2lsdnkvTVxcbk9nbGV0aG9ycGUvTVxcbk9oaW8vTVxcbk9oaW9hbi9TTVxcbk9pc2UvTVxcbk9qaWJ3YS9TTVxcbk9rYXlhbWFcXG5Pa2VlY2hvYmVlL01cXG5Pa2VmZW5va2VlL01cXG5Pa2hvdHNrL01cXG5Pa2luYXdhL01cXG5Pa2luYXdhblxcbk9rbGFcXG5Pa2xhaG9tYS9NXFxuT2tsYWhvbWFuL01cXG5Pa3RvYmVyZmVzdC9NXFxuT2xhL01cXG5PbGFmL01cXG5PbGFqdXdvbi9NXFxuT2xhdi9NXFxuT2xkZW5idXJnL01cXG5PbGRmaWVsZC9NXFxuT2xkc21vYmlsZS9NXFxuT2xkdXZhaS9NXFxuT2xlbi9NXFxuT2xlbmVrL01cXG5PbGdhL01cXG5PbGlnb2NlbmUvTVxcbk9saW4vTVxcbk9saXZlL01SXFxuT2xpdmVyL01cXG5PbGl2ZXR0aS9NXFxuT2xpdmlhL01cXG5PbGl2aWVyL01cXG5PbGxpZS9NXFxuT2xtZWMvTVxcbk9sbXN0ZWQvTVxcbk9sc2VuL01cXG5PbHNvbi9NXFxuT2x5bXBpYS9TTVxcbk9seW1waWFkL01TXFxuT2x5bXBpYW4vTVNcXG5PbHltcGljL1NNXFxuT2x5bXBpY3MvTVxcbk9seW1wdXMvTVxcbk9tYWhhL01TXFxuT21hbi9NXFxuT21hbmkvTVNcXG5PbWFyL01cXG5PbWF5eWFkL01cXG5PbWR1cm1hbi9NXFxuT21uaXBvdGVudFxcbk9tc2svTVxcbk9uYXNzaXMvTVxcbk9uZWFsL01cXG5PbmVnYS9NXFxuT25lZ2luL01cXG5PbmVpZGEvTVNcXG5Pbmlvbi9NXFxuT25vL01cXG5Pbm9uZGFnYS9NU1xcbk9uc2FnZXIvTVxcbk9udFxcbk9udGFyaWFuXFxuT250YXJpby9NXFxuT29ydC9NXFxuT3BhbC9NXFxuT3BlbC9NXFxuT3Blbk9mZmljZS9NXFxuT3BoZWxpYS9NXFxuT3BoaXVjaHVzL01cXG5PcHBlbmhlaW1lci9NXFxuT3Bwb3NpdGlvblxcbk9wcmFoL01cXG5PcmEvTVxcbk9yYWNsZS9NXFxuT3Jhbi9NXFxuT3JhbmdlL01cXG5PcmFuamVzdGFkL01cXG5PcmJpc29uL01cXG5PcmRvdmljaWFuL01cXG5PcmUvTlxcbk9yZWdcXG5PcmVnb24vTVxcbk9yZWdvbmlhbi9TTVxcbk9yZW0vTVxcbk9yZW8vTVxcbk9yZXN0ZXMvTVxcbk9yaWVudC9NXFxuT3JpZW50YWwvTVNcXG5PcmllbnRhbGlzbVxcbk9yaW4vTVxcbk9yaW5vY28vTVxcbk9yaW9uL01cXG5Pcml5YS9NXFxuT3JpemFiYS9NXFxuT3JrbmV5L01cXG5PcmxhbmRvL01cXG5PcmxlYW5zL01cXG5Pcmxvbi9NU1xcbk9ybHkvTVxcbk9ycGhldXMvTVxcbk9ycGhpYy9NXFxuT3JyL01cXG5PcnRlZ2EvTVxcbk9ydGhvZG94XFxuT3J0aXovTVxcbk9ydmFsL01cXG5PcnZpbGxlL01cXG5PcndlbGwvTVxcbk9yd2VsbGlhbi9NXFxuT3MvTVxcbk9zYWdlL01TXFxuT3Nha2EvTVxcbk9zYmVydC9NXFxuT3Nib3JuL01cXG5Pc2Jvcm5lL01cXG5Pc2Nhci9NU1xcbk9zY2VvbGEvTVxcbk9zZ29vZC9NXFxuT3NoYXdhL01cXG5Pc2hrb3NoL01cXG5Pc2lyaXMvTVxcbk9zbG8vTVxcbk9zbWFuL01cXG5Pc3Ryb2dvdGgvTVxcbk9zdHdhbGQvTVxcbk9zdmFsZG8vTVxcbk9zd2FsZC9NXFxuT3RoZWxsby9NXFxuT3Rpcy9NXFxuT3R0YXdhL1NNXFxuT3R0by9NXFxuT3R0b21hbi9NXFxuT3VhZ2Fkb3Vnb3UvTVxcbk91aWphL01TXFxuT3ZpZC9NXFxuT3dlbi9TTVxcbk93ZW5zL01cXG5Pd2Vuc2Jvcm8vTVxcbk94Zm9yZC9TTVxcbk94bmFyZC9NXFxuT3hvbmlhbi9NXFxuT3h1cy9NXFxuT3h5Y29udGluL01cXG5Pei9NXFxuT3phcmsvTVNcXG5PemFya3MvTVxcbk96eW1hbmRpYXMvTVxcbk96emllL01cXG5QL01OXFxuUEEvTVxcblBBQy9NXFxuUEFSQy9TXFxuUEFTQ0FMXFxuUEJTL01cXG5QQlhcXG5QQy9TTVxcblBDQlxcblBDTUNJQVxcblBDUC9NXFxuUERcXG5QREZcXG5QRFFcXG5QRFRcXG5QRVxcblBFVC9NXFxuUEZDXFxuUEdcXG5QR1BcXG5QSFAvTVxcblBJTlxcblBKJ3NcXG5QTE8vTVxcblBNL1NNREdcXG5QTVMvTVxcblBPXFxuUE9XL01cXG5QUFxcblBQU1xcblBSXFxuUFJDL01cXG5QUk9cXG5QUy9NXFxuUFNUL01cXG5QVFxcblBUQS9NXFxuUFRPXFxuUFZDL01cXG5QV1xcblBYXFxuUGEvTVxcblBhYXIvTVxcblBhYmxvL01cXG5QYWJsdW0vTVxcblBhYnN0L01cXG5QYWNlL01cXG5QYWNoZWNvL01cXG5QYWNpZmljL01cXG5QYWNpbm8vTVxcblBhY2thcmQvTVxcblBhZGFuZ1xcblBhZGVyZXdza2kvTVxcblBhZGlsbGEvTVxcblBhZ2FuaW5pL01cXG5QYWdlL01cXG5QYWdsaWEvTVxcblBhaGxhdmkvTVxcblBhaWdlL01cXG5QYWluZS9NXFxuUGFpdXRlL1NNXFxuUGFraXN0YW4vTVxcblBha2lzdGFuaS9TTVxcblBhbGVtYmFuZy9NXFxuUGFsZW9jZW5lL01cXG5QYWxlb2dlbmUvTVxcblBhbGVvbGl0aGljL01cXG5QYWxlb3pvaWMvTVxcblBhbGVybW8vTVxcblBhbGVzdGluZS9NXFxuUGFsZXN0aW5pYW4vU01cXG5QYWxlc3RyaW5hL01cXG5QYWxleS9NXFxuUGFsaWtpci9NXFxuUGFsaXNhZGVzL01cXG5QYWxsYWRpby9NXFxuUGFsbWRhbGUvTVxcblBhbG1lci9NXFxuUGFsbWVyc3Rvbi9NXFxuUGFsbW9saXZlL01cXG5QYWxteXJhL01cXG5QYWxvbWFyL01cXG5QYW0vTVxcblBhbWVsYS9NXFxuUGFtaXJzL01cXG5QYW1wZXJzL01cXG5QYW4vTVxcblBhbmFtYS9TTVxcblBhbmFtYW5pYW4vTVNcXG5QYW5hc29uaWMvTVxcblBhbmRvcmEvTVxcblBhbmdhZWEvTVxcblBhbmtodXJzdC9NXFxuUGFubXVuam9tL01cXG5QYW5zeS9NXFxuUGFudGFncnVlbC9NXFxuUGFudGFsb29uL01cXG5QYW50aGVvbi9NXFxuUGFuemEvTVxcblBhcmFjZWxzdXMvTVxcblBhcmFjbGV0ZS9NXFxuUGFyYWRpc2VcXG5QYXJhZ3VheS9NXFxuUGFyYWd1YXlhbi9NU1xcblBhcmFseW1waWMvU1xcblBhcmFtYXJpYm8vTVxcblBhcmFtb3VudC9NXFxuUGFyYW5hL01cXG5QYXJjaGVlc2kvTVxcblBhcmV0by9NXFxuUGFyaXMvTVxcblBhcmlzaWFuL01TXFxuUGFyay9TTVJcXG5QYXJrZXIvTVxcblBhcmtlcnNidXJnL01cXG5QYXJraW5zb24vTVxcblBhcmtpbnNvbmlzbVxcblBhcmttYW4vTVxcblBhcmtzL01cXG5QYXJsaWFtZW50L01cXG5QYXJtZW5pZGVzXFxuUGFybWVzYW4vTVNcXG5QYXJuYXNzdXMvTVNcXG5QYXJuZWxsL01cXG5QYXJyL01cXG5QYXJyaXNoL01cXG5QYXJzaWZhbC9NXFxuUGFyc29ucy9NXFxuUGFydGhlbm9uL01cXG5QYXJ0aGlhL01cXG5QYXNhZGVuYS9NXFxuUGFzY2Fnb3VsYS9NXFxuUGFzY2FsL1NNXFxuUGFzY28vTVxcblBhc3F1YWxlL01cXG5QYXNzaW9uL1NNXFxuUGFzc292ZXIvTVNcXG5QYXN0ZXJuYWsvTVxcblBhc3RldXIvTVxcblBhdC9NXFxuUGF0YWdvbmlhL01cXG5QYXRhZ29uaWFuL01cXG5QYXRlL01cXG5QYXRlbC9NXFxuUGF0ZXJzb24vTVxcblBhdG5hL01cXG5QYXRyaWNhL01cXG5QYXRyaWNlL01cXG5QYXRyaWNpYS9NXFxuUGF0cmljay9NXFxuUGF0c3kvTVxcblBhdHRlcnNvbi9NXFxuUGF0dGkvTVxcblBhdHRvbi9NXFxuUGF0dHkvTVxcblBhdWwvR01cXG5QYXVsYS9NXFxuUGF1bGV0dGUvTVxcblBhdWxpL01cXG5QYXVsaW5lL01cXG5QYXVsaW5nL01cXG5QYXZhcm90dGkvTVxcblBhdmxvdi9NXFxuUGF2bG92YS9NXFxuUGF2bG92aWFuL01cXG5QYXduZWUvU01cXG5QYXlQYWwvTVxcblBheW5lL01cXG5QYi9NXFxuUGQvTVxcblBlYWJvZHkvTVxcblBlYWNlL01cXG5QZWFsZS9NXFxuUGVhcmwvTVxcblBlYXJsaWUvTVxcblBlYXJzb24vTVxcblBlYXJ5L01cXG5QZWNob3JhL01cXG5QZWNrL01cXG5QZWNraW5wYWgvTVxcblBlY29zL01cXG5QZWRyby9NXFxuUGVlbC9NXFxuUGVnL01cXG5QZWdhc3VzL01TXFxuUGVnZ3kvTVxcblBlaS9NXFxuUGVpcGluZy9NXFxuUGVraW5nL1NNXFxuUGVraW5nZXNlL1NNXFxuUGVsZS9NXFxuUGVsZWUvTVxcblBlbG9wb25uZXNlL01cXG5QZW1icm9rZS9NXFxuUGVuL01cXG5QZW5hL01cXG5QZW5kZXJlY2tpL01cXG5QZW5lbG9wZS9NXFxuUGVubi9NXFxuUGVubmFcXG5QZW5uZXkvTVxcblBlbm5pbmd0b24vTVxcblBlbm5zeWx2YW5pYS9NXFxuUGVubnN5bHZhbmlhbi9NU1xcblBlbm55L01cXG5QZW5uem9pbC9NXFxuUGVuc2Fjb2xhL01cXG5QZW50YWdvbi9NXFxuUGVudGF0ZXVjaC9NXFxuUGVudGF4L01cXG5QZW50ZWNvc3QvU01cXG5QZW50ZWNvc3RhbC9NU1xcblBlbnRlY29zdGFsaXNtXFxuUGVudGl1bS9TTVxcblBlb3JpYS9NXFxuUGVwaW4vTVxcblBlcHNpL01cXG5QZXB5cy9NXFxuUGVxdW90L01cXG5QZXJjaGVyb24vTVxcblBlcmNpdmFsL01cXG5QZXJjeS9NXFxuUGVyZWxtYW4vTVxcblBlcmV6L01cXG5QZXJpY2xlYW4vTVxcblBlcmljbGVzL01cXG5QZXJraW5zL01cXG5QZXJsL1NNXFxuUGVybS9NXFxuUGVybWFsbG95L01cXG5QZXJtaWFuL01cXG5QZXJub2QvTVxcblBlcm9uL01cXG5QZXJvdC9NXFxuUGVycmllci9NXFxuUGVycnkvUk1cXG5QZXJzZWlkL01cXG5QZXJzZXBob25lL01cXG5QZXJzZXBvbGlzL01cXG5QZXJzZXVzL01cXG5QZXJzaGluZy9NXFxuUGVyc2lhL01cXG5QZXJzaWFuL1NNXFxuUGVydGgvTVxcblBlcnUvTVxcblBlcnV2aWFuL01TXFxuUGVzaGF3YXIvTVxcblBldGFpbi9NXFxuUGV0YWx1bWEvTVxcblBldGUvUk1aXFxuUGV0ZXIvTVxcblBldGVycy9NTlxcblBldGVyc2VuL01cXG5QZXRlcnNvbi9NXFxuUGV0cmEvTVxcblBldHJhcmNoL01cXG5QZXR0eS9NXFxuUGV1Z2VvdC9NXFxuUGZjXFxuUGZpemVyL01cXG5QaEQvTVxcblBoYWVkcmEvTVxcblBoYWV0aG9uL01cXG5QaGFuZXJvem9pYy9NXFxuUGhhcmFvaC9NXFxuUGhhcmFvaHNcXG5QaGFyaXNhaWNcXG5QaGFyaXNhaWNhbFxcblBoYXJpc2VlL01TXFxuUGhla2RhL01cXG5QaGVscHMvTVxcblBoaWRpYXMvTVxcblBoaWwvTVlcXG5QaGlsYWRlbHBoaWEvTVxcblBoaWxieS9NXFxuUGhpbGVtb24vTVxcblBoaWxpcC9NU1xcblBoaWxpcHBlL01cXG5QaGlsaXBwaWFucy9NXFxuUGhpbGlwcGluZS9TTVxcblBoaWxpcHBpbmVzL01cXG5QaGlsaXBzL01cXG5QaGlsaXN0aW5lL01cXG5QaGlsbGlwL1NNXFxuUGhpbGxpcGEvTVxcblBoaWxsaXBzL01cXG5QaGlsbHkvTVxcblBoaXBwcy9NXFxuUGhvYm9zL01cXG5QaG9lYmUvTVxcblBob2VuaWNpYS9NXFxuUGhvZW5pY2lhbi9TTVxcblBob2VuaXgvTVxcblBob3Rvc3RhdC9NU1xcblBob3Rvc3RhdHRlZFxcblBob3Rvc3RhdHRpbmdcXG5QaHJ5Z2lhL01cXG5QaHlsbGlzL01cXG5QaWFmL01cXG5QaWFnZXQvTVxcblBpYW5vbGEvTVxcblBpY2Fzc28vTVxcblBpY2NhZGlsbHkvTVxcblBpY2tlcmluZy9NXFxuUGlja2V0dC9NXFxuUGlja2ZvcmQvTVxcblBpY2t3aWNrL01cXG5QaWN0L01cXG5QaWVkbW9udC9NXFxuUGllcmNlL01cXG5QaWVycmUvTVxcblBpZXJyb3QvTVxcblBpa2UvTVxcblBpbGF0ZS9NU1xcblBpbGF0ZXMvTVxcblBpbGNvbWF5by9NXFxuUGlsZ3JpbS9TTVxcblBpbGxzYnVyeS9NXFxuUGluYXR1Ym8vTVxcblBpbmN1cy9NXFxuUGluZGFyL01cXG5QaW5rZXJ0b24vTVxcblBpbm9jY2hpby9NXFxuUGlub2NoZXQvTVxcblBpbnRlci9NXFxuUGlueWluXFxuUGlwcGluL01cXG5QaXJhZXVzL01cXG5QaXJhbmRlbGxvL01cXG5QaXNhL01cXG5QaXNjZXMvTVxcblBpc2lzdHJhdHVzL01cXG5QaXNzYXJvL01cXG5QaXRjYWlybi9NXFxuUGl0dC9TTVxcblBpdHRtYW4vTVxcblBpdHRzL01cXG5QaXR0c2J1cmdoL01cXG5QaXR0c2ZpZWxkL01cXG5QaXVzL01cXG5QaXphcnJvL01cXG5Qa3d5XFxuUGxcXG5QbGFuY2svTVxcblBsYW5vXFxuUGxhbnRhZ2VuZXQvTVxcblBsYXN0aWNpbmUvTVxcblBsYXRhZWEvTVxcblBsYXRoL01cXG5QbGF0by9NXFxuUGxhdG9uaWNcXG5QbGF0b25pc20vTVxcblBsYXRvbmlzdC9NXFxuUGxhdHRlL01cXG5QbGF1dHVzL01cXG5QbGF5U3RhdGlvbi9NXFxuUGxheWJveS9NXFxuUGxheXRleC9NXFxuUGxlaWFkZXMvTVxcblBsZWlzdG9jZW5lL01cXG5QbGV4aWdsYXMvTVNcXG5QbGlueS9NXFxuUGxpb2NlbmUvU01cXG5QbHV0YXJjaC9NXFxuUGx1dG8vTVxcblBseW1vdXRoL01cXG5QbS9NXFxuUG8vTVxcblBvY2Fob250YXMvTVxcblBvY2F0ZWxsby9NXFxuUG9jb25vL1NNXFxuUG9jb25vcy9NXFxuUG9kZ29yaWNhL01cXG5Qb2Rob3JldHovTVxcblBvZHVuay9NXFxuUG9lL01cXG5Qb2dvL01cXG5Qb2luY2FyZS9NXFxuUG9pcmV0L01cXG5Qb2lyb3QvTVxcblBvaXNzb24vTVxcblBvaXRpZXIvTVxcblBva2Vtb24vTVxcblBvbC9NWVxcblBvbGFuZC9NXFxuUG9sYW5za2kvTVxcblBvbGFyaXMvTVxcblBvbGFyb2lkL01TXFxuUG9sZS9TTVxcblBvbGlzaC9NXFxuUG9saXRidXJvL01cXG5Qb2xrL01cXG5Qb2xsYXJkL01cXG5Qb2xsb2NrL01cXG5Qb2xsdXgvTVxcblBvbGx5L01cXG5Qb2xseWFubmEvTVxcblBvbG8vTVxcblBvbHRhdmEvTVxcblBvbHloeW1uaWEvTVxcblBvbHluZXNpYS9NXFxuUG9seW5lc2lhbi9NU1xcblBvbHlwaGVtdXMvTVxcblBvbWVyYW5pYS9NXFxuUG9tZXJhbmlhbi9NXFxuUG9tb25hL01cXG5Qb21wYWRvdXIvTVxcblBvbXBlaWFuXFxuUG9tcGVpaS9NXFxuUG9tcGV5L01cXG5Qb25jZS9NXFxuUG9udGNoYXJ0cmFpbi9NXFxuUG9udGlhYy9NXFxuUG9udGlhbmFrL01cXG5Qb29oL01cXG5Qb29sZS9NXFxuUG9vbmEvTVxcblBvcGUvTVxcblBvcGV5ZS9NXFxuUG9wb2NhdGVwZXRsL01cXG5Qb3BwZXIvTVxcblBvcHBpbnMvTVxcblBvcHNpY2xlL01cXG5Qb3JmaXJpby9NXFxuUG9ycmltYS9NXFxuUG9yc2NoZS9NXFxuUG9ydC9NUlxcblBvcnRlci9NXFxuUG9ydGVydmlsbGUvTVxcblBvcnRpYS9NXFxuUG9ydGxhbmQvTVxcblBvcnRvL01cXG5Qb3J0c21vdXRoL01cXG5Qb3J0dWdhbC9NXFxuUG9ydHVndWVzZS9NXFxuUG9zZWlkb24vTVxcblBvc3QvTVxcblBvc3RncmVTUUwvTVxcblBvdGVta2luL01cXG5Qb3RvbWFjL01cXG5Qb3RzZGFtL01cXG5Qb3R0YXdhdG9taWUvTVxcblBvdHRlci9NXFxuUG90dHMvTVxcblBvdHRzdG93bi9NXFxuUG91Z2hrZWVwc2llL01cXG5Qb3VuZC9NXFxuUG91c3Npbi9NXFxuUG93ZWxsL01cXG5Qb3dlclBDL01cXG5Qb3dlclBvaW50L01cXG5Qb3dlcnMvTVxcblBvd2hhdGFuL01cXG5Qb3puYW4vTVxcblByL01cXG5QcmFkYS9NXFxuUHJhZG8vTVxcblByYWV0b3JpYW4vTVxcblByYWd1ZS9NXFxuUHJhaWEvTVxcblByYWtyaXQvTVxcblByYXRjaGV0dC9NXFxuUHJhdHQvTVxcblByYXZkYS9NXFxuUHJheGl0ZWxlcy9NXFxuUHJlYWtuZXNzL01cXG5QcmVjYW1icmlhbi9NXFxuUHJlbWluZ2VyL01cXG5QcmVteXNsaWQvTVxcblByZW5zYS9NXFxuUHJlbnRpY2UvTVxcblByZXNcXG5QcmVzYnl0ZXJpYW4vU01cXG5QcmVzYnl0ZXJpYW5pc20vTVNcXG5QcmVzY290dC9NXFxuUHJlc2xleS9NXFxuUHJlc3Rvbi9NXFxuUHJldG9yaWEvTVxcblByaWFtL01cXG5QcmliaWxvZi9NXFxuUHJpY2UvTVxcblByaWNlbGluZS9NXFxuUHJpZXN0bGV5L01cXG5QcmluY2UvTVxcblByaW5jZXRvbi9NXFxuUHJpbmNpcGUvTVxcblByaXNjaWxsYS9NXFxuUHJpdXMvTVxcblByaXZhdGVcXG5Qcm9jcnVzdGVhbi9NXFxuUHJvY3J1c3Rlcy9NXFxuUHJvY3Rlci9NXFxuUHJvY3lvbi9NXFxuUHJvZlxcblByb2hpYml0aW9uXFxuUHJva29maWV2L01cXG5Qcm9tZXRoZWFuL01cXG5Qcm9tZXRoZXVzL01cXG5Qcm9waGV0c1xcblByb3NlcnBpbmEvTVxcblByb3NlcnBpbmUvTVxcblByb3RhZ29yYXMvTVxcblByb3Rlcm96b2ljL01cXG5Qcm90ZXN0YW50L01TXFxuUHJvdGVzdGFudGlzbS9TTVxcblByb3RldXMvTVxcblByb3VkaG9uL01cXG5Qcm91c3QvTVxcblByb3ZlbmNhbC9NU1xcblByb3ZlbmNlL01cXG5Qcm92ZXJic1xcblByb3ZpZGVuY2UvU01cXG5Qcm92by9NXFxuUHJvemFjL01TXFxuUHJ1ZGVuY2UvTVxcblBydWRlbnRpYWwvTVxcblBydWl0dC9NXFxuUHJ1c3NpYS9NXFxuUHJ1c3NpYW4vTVNcXG5QcnV0L01cXG5Qcnlvci9NXFxuUHNhbG1zL01cXG5Qc2FsdGVyL01TXFxuUHN5Y2hlL01cXG5QdC9NXFxuUHRhaC9NXFxuUHRvbGVtYWljL01cXG5QdG9sZW15L1NNXFxuUHUvTVxcblB1Y2NpbmkvTVxcblB1Y2svTVxcblB1Y2tldHQvTVxcblB1ZWJsYS9NXFxuUHVlYmxvL01cXG5QdWVydG9cXG5QdWdldC9NXFxuUHVnaC9NXFxuUHVsYXNraS9NXFxuUHVsaXR6ZXIvTVxcblB1bGxtYW4vTVNcXG5QdW5jaC9NXFxuUHVuaWMvTVxcblB1bmphYi9NXFxuUHVuamFiaS9NXFxuUHVyYW5hL01cXG5QdXJjZWxsL01cXG5QdXJkdWUvTVxcblB1cmltL01TXFxuUHVyaW5hL01cXG5QdXJpdGFuL01cXG5QdXJpdGFuaXNtL01TXFxuUHVydXMvTVxcblB1c2FuL01cXG5QdXNleS9NXFxuUHVzaGtpbi9NXFxuUHVzaHR1L01cXG5QdXRpbi9NXFxuUHV0bmFtL01cXG5QdXpvL01cXG5QdnRcXG5QeVRvcmNoL01cXG5QeWdtYWxpb24vTVxcblB5Z215L1NNXFxuUHlsZS9NXFxuUHltL01cXG5QeW5jaG9uL01cXG5QeW9uZ3lhbmcvTVxcblB5b3RyL01cXG5QeXJlbmVlcy9NXFxuUHlyZXgvTVNcXG5QeXJyaGljL01cXG5QeXRoYWdvcmFzL01cXG5QeXRoYWdvcmVhbi9NXFxuUHl0aGlhcy9NXFxuUHl0aG9uL01cXG5RXFxuUUFcXG5RQlxcblFDXFxuUUVEXFxuUU1cXG5RV0VSVFlcXG5RYWRkYWZpL01cXG5RYW50YXMvTVxcblFhdGFyL01cXG5RYXRhcmkvTVNcXG5RaW5nZGFvL01cXG5RaW5naGFpL01cXG5RaXFpaGFyL01cXG5Rb20vTVxcblF1YWFsdWRlL01cXG5RdWFrZXIvTVNcXG5RdWFrZXJpc20vU01cXG5RdWFsY29tbS9NXFxuUXVhb2FyL01cXG5RdWFzaW1vZG8vTVxcblF1YXRlcm5hcnkvTVxcblF1YXlsZS9NXFxuUXVlXFxuUXVlYmVjL01cXG5RdWViZWNvaXMvTVxcblF1ZWNodWEvTVxcblF1ZWVuL01TXFxuUXVlZW5zL01cXG5RdWVlbnNsYW5kL01cXG5RdWVudGluL01cXG5RdWV0emFsY29hdGwvTVxcblF1ZXpvbi9NXFxuUXVpbmN5L01cXG5RdWlubi9NXFxuUXVpbnRpbGlhbi9NXFxuUXVpbnRvbi9NXFxuUXVpcmluYWwvTVxcblF1aXNsaW5nL01cXG5RdWl0by9NXFxuUXVpeG90ZS9NXFxuUXVpeG90aXNtL01cXG5RdW1yYW4vTVxcblF1b25zZXQvTVxcblF1cmFuXFxuUXVyYW5pY1xcblIvTVxcblJBRi9NXFxuUkFNL1NNXFxuUkJJXFxuUkNcXG5SQ0EvTVxcblJDTVBcXG5SRFxcblJEQVxcblJEUy9NXFxuUkVJVFxcblJFTS9TTVxcblJGXFxuUkZDL1NcXG5SRkRcXG5SSVxcblJJRlxcblJJUFxcblJJU0NcXG5STi9NXFxuUk5BL01cXG5ST0ZMXFxuUk9NL01cXG5ST1RDL01cXG5SUFxcblJSXFxuUlNGU1JcXG5SU0lcXG5SU1ZcXG5SU1ZQXFxuUlRGTVxcblJWL1NNXFxuUmEvTVxcblJhYmF0L01cXG5SYWJlbGFpcy9NXFxuUmFiZWxhaXNpYW4vTVxcblJhYmluL01cXG5SYWNoYWVsL01cXG5SYWNoZWwvTVxcblJhY2hlbGxlL01cXG5SYWNobWFuaW5vZmYvTVxcblJhY2luZS9NXFxuUmFkY2xpZmYvTVxcblJhZGNsaWZmZS9NXFxuUmFlL01cXG5SYWZhZWwvTVxcblJhZmZsZXMvTVxcblJhZ25hcm9rL01cXG5SYWluaWVyL01cXG5SYWxlaWdoL01cXG5SYWxwaC9NXFxuUmFtYS9NXFxuUmFtYWRhL01cXG5SYW1hZGFuL01TXFxuUmFtYWtyaXNobmEvTVxcblJhbWFudWphbi9NXFxuUmFtYXlhbmEvTVxcblJhbWJvL01cXG5SYW1pcmV6L01cXG5SYW1pcm8vTVxcblJhbW9uL01cXG5SYW1vbmEvTVxcblJhbW9zL01cXG5SYW1zYXkvTVxcblJhbXNlcy9NXFxuUmFtc2V5L01cXG5SYW5kL01cXG5SYW5kYWwvTVxcblJhbmRhbGwvTVxcblJhbmRlbGwvTVxcblJhbmRpL01cXG5SYW5kb2xwaC9NXFxuUmFuZHkvTVxcblJhbmdvb24vTVxcblJhbmtpbi9NXFxuUmFua2luZS9NXFxuUmFvdWwvTVxcblJhcGhhZWwvTVxcblJhcHBhcG9ydC9NXFxuUmFwdW56ZWwvTVxcblJhcXVlbC9NXFxuUmFzYWxnZXRoaS9NXFxuUmFzYWxoYWd1ZS9NXFxuUmFzbXVzc2VuL01cXG5SYXNwdXRpbi9NXFxuUmFzdGFcXG5SYXN0YWJhbi9NXFxuUmFzdGFmYXJpYW4vTVNcXG5SYXN0YWZhcmlhbmlzbVxcblJhdGhlci9NXFxuUmF0bGlmZi9NXFxuUmF1bC9NXFxuUmF2ZWwvTVxcblJhd2FscGluZGkvTVxcblJheS9NXFxuUmF5QmFuL01cXG5SYXlidXJuL01cXG5SYXlsZWlnaC9NXFxuUmF5bW9uZC9NXFxuUmF5bXVuZG8vTVxcblJiL01cXG5SZFxcblJlL01cXG5SZWFkaW5nL01cXG5SZWFnYW4vTVxcblJlYWdhbm9taWNzL01cXG5SZWFsdG9yL01cXG5SZWFzb25lci9NXFxuUmViYS9NXFxuUmViZWthaC9NXFxuUmVjaWZlL01cXG5SZWNvbnN0cnVjdGlvbi9NXFxuUmVkZGluZy9NXFxuUmVkZWVtZXIvTVxcblJlZGZvcmQvTVxcblJlZGdyYXZlL01cXG5SZWRpcy9NXFxuUmVkbW9uZC9NXFxuUmVkc2hpZnQvTVxcblJlZWJvay9NXFxuUmVlZC9NXFxuUmVlc2UvTVxcblJlZXZlcy9NXFxuUmVmb3JtYXRpb24vTVNcXG5SZWZ1Z2lvL01cXG5SZWdnaWUvTVxcblJlZ2luYS9NXFxuUmVnaW5hZS9NXFxuUmVnaW5hbGQvTVxcblJlZ29yL01cXG5SZWd1bHVzL01cXG5SZWhucXVpc3QvTVxcblJlaWNoL01cXG5SZWljaHN0YWcnc1xcblJlaWQvTVxcblJlaWxseS9NXFxuUmVpbmFsZG8vTVxcblJlaW5oYXJkdC9NXFxuUmVpbmhvbGQvTVxcblJlbWFycXVlL01cXG5SZW1icmFuZHQvTVxcblJlbWluZ3Rvbi9NXFxuUmVtdXMvTVxcblJlbmEvTVxcblJlbmFpc3NhbmNlL1NNXFxuUmVuYXNjZW5jZVxcblJlbmF1bHQvTVxcblJlbmUvTVxcblJlbmVlL01cXG5SZW5vL01cXG5SZW5vaXIvTVxcblJlcFxcblJlcHJlc2VudGF0aXZlXFxuUmVwdWJsaWNhbi9TTVxcblJlcHVibGljYW5pc21cXG5SZXF1aWVtL01TXFxuUmVzaXN0YW5jZVxcblJlc3RvcmF0aW9uL01cXG5SZXN1cnJlY3Rpb25cXG5SZXViZW4vTVxcblJldW5pb24vTVxcblJldXRlcnMvTVxcblJldXRoZXIvTVxcblJldlxcblJldmEvTVxcblJldmVsYXRpb24vU01cXG5SZXZlbGF0aW9ucy9NXFxuUmV2ZXJlL01cXG5SZXZlcmVuZC9NXFxuUmV2bG9uL01cXG5SZXgvTVxcblJleWVzL01cXG5SZXlramF2aWsvTVxcblJleW5hL01cXG5SZXluYWxkby9NXFxuUmV5bm9sZHMvTVxcblJmL01cXG5SaC9NXFxuUmhlYS9NXFxuUmhlZS9NXFxuUmhlaW5nYXUvTVxcblJoZW5pc2gvTVxcblJoaWFubm9uL01cXG5SaGluZS9NXFxuUmhpbmVsYW5kL01cXG5SaG9kYS9NXFxuUmhvZGUvU1xcblJob2Rlcy9NXFxuUmhvZGVzaWEvTVxcblJob2Rlc2lhblxcblJob25kYS9NXFxuUmhvbmUvTVxcblJpYmJlbnRyb3AvTVxcblJpY2FyZG8vTVxcblJpY2UvTVxcblJpY2gvTVxcblJpY2hhcmQvTVNcXG5SaWNoYXJkcy9NXFxuUmljaGFyZHNvbi9NXFxuUmljaGVsaWV1L01cXG5SaWNoaWUvTVxcblJpY2htb25kL01cXG5SaWNodGVyL01cXG5SaWNodGhvZmVuL01cXG5SaWNrL01cXG5SaWNrZW5iYWNrZXIvTVxcblJpY2tleS9NXFxuUmlja2llL01cXG5SaWNrb3Zlci9NXFxuUmlja3kvTVxcblJpY28vTVxcblJpZGRsZS9NXFxuUmlkZS9NXFxuUmllZmVuc3RhaGwvTVxcblJpZWwvTVxcblJpZW1hbm4vTVxcblJpZXNsaW5nL01TXFxuUmlnYS9NXFxuUmlnZWwvTVxcblJpZ2dzL01cXG5SaWdodFxcblJpZ29iZXJ0by9NXFxuUmlnb2xldHRvL01cXG5SaWxleS9NXFxuUmlsa2UvTVxcblJpbWJhdWQvTVxcblJpbmdsaW5nL01cXG5SaW5nby9NXFxuUmlvL1NNXFxuUmlvcy9NXFxuUmlwbGV5L01cXG5SaXNvcmdpbWVudG8vTVxcblJpdGEvTVxcblJpdGFsaW4vTVxcblJpdHovTVxcblJpdmFzL01cXG5SaXZlcmEvTVxcblJpdmVycy9NXFxuUml2ZXJzaWRlL01cXG5SaXZpZXJhL01TXFxuUml5YWRoL01cXG5SaXphbC9NXFxuUm4vTVxcblJvYWNoL01cXG5Sb2Fub2tlL01cXG5Sb2IvTVxcblJvYmJpZS9NXFxuUm9iYmluL01TXFxuUm9iYmlucy9NXFxuUm9iYnkvTVxcblJvYmVyc29uL01cXG5Sb2JlcnQvTVNcXG5Sb2JlcnRhL01cXG5Sb2JlcnRvL01cXG5Sb2JlcnRzL01cXG5Sb2JlcnRzb24vTVxcblJvYmVzb24vTVxcblJvYmVzcGllcnJlL01cXG5Sb2Jpbi9NXFxuUm9iaW5zb24vTVxcblJvYml0dXNzaW4vTVxcblJvYmxlcy9NXFxuUm9ic29uL01cXG5Sb2J0L01cXG5Sb2J5bi9NXFxuUm9jY28vTVxcblJvY2hhL01cXG5Sb2NoYW1iZWF1L01cXG5Sb2NoZS9NXFxuUm9jaGVsbGUvTVxcblJvY2hlc3Rlci9NXFxuUm9jay9NXFxuUm9ja2VmZWxsZXIvTVxcblJvY2tmb3JkL01cXG5Sb2NraWVzL01cXG5Sb2NrbmUvTVxcblJvY2t3ZWxsL01cXG5Sb2NreS9TTVxcblJvZC9NXFxuUm9kZGVuYmVycnkvTVxcblJvZGVyaWNrL01cXG5Sb2RnZXIvTVNcXG5Sb2RnZXJzL01cXG5Sb2Rpbi9NXFxuUm9kbmV5L01cXG5Sb2RvbGZvL01cXG5Sb2RyaWNrL01cXG5Sb2RyaWdvL01cXG5Sb2RyaWd1ZXovTVxcblJvZHJpcXVlei9NXFxuUm9lZy9NXFxuUm9lbnRnZW5cXG5Sb2dlbGlvL01cXG5Sb2dlci9NU1xcblJvZ2Vycy9NXFxuUm9nZXQvTVxcblJvamFzL01cXG5Sb2t1L01cXG5Sb2xhaWRzL01cXG5Sb2xhbmQvTVxcblJvbGFuZG8vTVxcblJvbGV4L01cXG5Sb2xsYW5kL01cXG5Sb2xsZXJibGFkZS9NXFxuUm9sbGlucy9NXFxuUm9sb2RleC9NXFxuUm9sdmFhZy9NXFxuUm9tXFxuUm9tYW4vTVNcXG5Sb21hbmVzcXVlL01TXFxuUm9tYW5pYS9NXFxuUm9tYW5pYW4vTVNcXG5Sb21hbm8vTVxcblJvbWFub3YvTVxcblJvbWFucy9NXFxuUm9tYW5zaC9NXFxuUm9tYW50aWNpc21cXG5Sb21hbnkvU01cXG5Sb21lL1NNXFxuUm9tZW8vTVxcblJvbWVyby9NXFxuUm9tbWVsL01cXG5Sb21uZXkvTVxcblJvbXVsdXMvTVxcblJvbi9NXFxuUm9uYWxkL01cXG5Sb25kYS9NXFxuUm9ubmllL01cXG5Sb25ueS9NXFxuUm9uc3RhZHQvTVxcblJvbnRnZW5cXG5Sb29uZXkvTVxcblJvb3NldmVsdC9NXFxuUm9vdC9NXFxuUm9xdWVmb3J0L1NNXFxuUm9yc2NoYWNoL01cXG5Sb3J5L01cXG5Sb3NhL01cXG5Sb3NhbGVzL01cXG5Sb3NhbGllL01cXG5Sb3NhbGluZC9NXFxuUm9zYWxpbmRhL01cXG5Sb3NhbHluL01cXG5Sb3Nhbm5hL01cXG5Sb3Nhbm5lL01cXG5Sb3NhcmlvL01cXG5Sb3Njb2UvTVxcblJvc2UvTVxcblJvc2Vhbm4vTVxcblJvc2VhdS9NXFxuUm9zZWNyYW5zL01cXG5Sb3NlbGxhL01cXG5Sb3NlbWFyaWUvTVxcblJvc2VtYXJ5L01cXG5Sb3NlbmJlcmcvTVxcblJvc2VuZG8vTVxcblJvc2VuendlaWcvTVxcblJvc2V0dGEvTVxcblJvc2ljcnVjaWFuL01cXG5Sb3NpZS9NXFxuUm9zbHluL01cXG5Sb3NzL01cXG5Sb3NzZXR0aS9NXFxuUm9zc2luaS9NXFxuUm9zdGFuZC9NXFxuUm9zdG92L01cXG5Sb3N0cm9wb3ZpY2gvTVxcblJvc3dlbGwvTVxcblJvdGFyaWFuL01cXG5Sb3RoL01cXG5Sb3Roa28vTVxcblJvdGhzY2hpbGQvTVxcblJvdHRlcmRhbS9NXFxuUm90dHdlaWxlci9NXFxuUm91YXVsdC9NXFxuUm91cmtlL01cXG5Sb3Vzc2VhdS9NXFxuUm92ZS9STVxcblJvdmVyL01cXG5Sb3dlL01cXG5Sb3dlbmEvTVxcblJvd2xhbmQvTVxcblJvd2xpbmcvTVxcblJveGFubmUvTVxcblJveGllL01cXG5Sb3h5L01cXG5Sb3kvTVxcblJveWFsL01cXG5Sb3ljZS9NXFxuUm96ZWxsZS9NXFxuUnRlXFxuUnUvTUhcXG5SdWJhaXlhdC9NXFxuUnViYmVybWFpZC9NXFxuUnViZW4vU01cXG5SdWJlbnMvTVxcblJ1Ymljb24vTVNcXG5SdWJpay9NXFxuUnViaW4vTVxcblJ1Ymluc3RlaW4vTVxcblJ1YnkvTVxcblJ1Y2hiYWgvTVxcblJ1ZG9sZi9NXFxuUnVkb2xwaC9NXFxuUnVkeS9NXFxuUnVkeWFyZC9NXFxuUnVmdXMvTVxcblJ1aHIvTVxcblJ1aXovTVxcblJ1a2V5c2VyL01cXG5SdW1wZWxzdGlsdHNraW4vTVxcblJ1bXNmZWxkL01cXG5SdW5ueW1lZGUvTVxcblJ1bnlvbi9NXFxuUnVwZXJ0L01cXG5SdXNoL01cXG5SdXNoZGllL01cXG5SdXNobW9yZS9NXFxuUnVza2luL01cXG5SdXNzL01cXG5SdXNzZWwvTVxcblJ1c3NlbGwvTVxcblJ1c3NpYS9NXFxuUnVzc2lhbi9TTVxcblJ1c3NvL01cXG5SdXN0YmVsdC9NXFxuUnVzdHkvTVxcblJ1dGFuL01cXG5SdXRnZXJzL01cXG5SdXRoL01cXG5SdXRoZXJmb3JkL01cXG5SdXRoaWUvTVxcblJ1dGxlZGdlL01cXG5Sd2FuZGEvTVNcXG5Sd2FuZGFuL1NNXFxuUnd5XFxuUnhcXG5SeVxcblJ5YW4vTVxcblJ5ZGJlcmcvTVxcblJ5ZGVyL01cXG5SeXVreXUvTVxcblMvTU5cXG5TQVxcblNBQ1xcblNBTFQvTVxcblNBTS9NXFxuU0FQL01cXG5TQVJTL01cXG5TQVNFXFxuU0FUXFxuU0JBXFxuU0MvTVxcblNDU0kvTVxcblNEXFxuU0RJXFxuU0UvTVxcblNFQVRPXFxuU0VDL01cXG5TRlxcblNHTUwvTVxcblNJRFMvTVxcblNKXFxuU0pXXFxuU0tcXG5TTFJcXG5TTy9TXFxuU09CL01cXG5TT1AvTVxcblNPUy9NXFxuU09TZXNcXG5TUENBXFxuU1BGXFxuU1FMXFxuU1FMaXRlL01cXG5TUk9cXG5TU1xcblNTQVxcblNTRS9NXFxuU1NTXFxuU1NUXFxuU1NXL01cXG5TVFxcblNURFxcblNUT0xcXG5TVVNFL01cXG5TVVZcXG5TVk4vTVxcblNXL01cXG5TV0FLXFxuU1dBVFxcblNhYWIvTVxcblNhYXIvTVxcblNhYXJpbmVuL01cXG5TYWF0Y2hpL01cXG5TYWJiYXRoL01cXG5TYWJiYXRoc1xcblNhYmlrL01cXG5TYWJpbi9NXFxuU2FiaW5hL01cXG5TYWJpbmUvTVxcblNhYnJlL01cXG5TYWJyaW5hL01cXG5TYWNhamF3ZWEvTVxcblNhY2NvL01cXG5TYWNocy9NXFxuU2FjcmFtZW50by9NXFxuU2FkYXQvTVxcblNhZGRhbS9NXFxuU2FkZHVjZWUvTVxcblNhZGUvTVxcblNhZGllL01cXG5TYWRyL01cXG5TYWZhdmlkL01cXG5TYWZld2F5L01cXG5TYWdhbi9NXFxuU2FnaW5hdy9NXFxuU2FnaXR0YXJpdXMvTVNcXG5TYWhhcmEvTVxcblNhaGFyYW4vTVxcblNhaGVsL01cXG5TYWlnb24vTVxcblNhaXBoL01cXG5TYWthaS9NXFxuU2FraGEvTVxcblNha2hhbGluL01cXG5TYWtoYXJvdi9NXFxuU2FraS9NXFxuU2Frcy9NXFxuU2FsL01ZXFxuU2FsYWRpbi9NXFxuU2FsYWRvL01cXG5TYWxhbWlzL01cXG5TYWxhcy9NXFxuU2FsYXphci9NXFxuU2FsZW0vTVxcblNhbGVybm8vTVxcblNhbGVzZm9yY2UvTVxcblNhbGluYXMvTVxcblNhbGluZ2VyL01cXG5TYWxpc2J1cnkvTVxcblNhbGlzaC9NXFxuU2Fsay9NXFxuU2FsbGllL01cXG5TYWxsdXN0L01cXG5TYWxseS9NXFxuU2Fsb21lL01cXG5TYWxvbmlrYS9NXFxuU2FsdG9uL01cXG5TYWx2YWRvci9NXFxuU2FsdmFkb3Jhbi9TTVxcblNhbHZhZG9yZWFuL01TXFxuU2FsdmFkb3JpYW4vTVNcXG5TYWx2YXRvcmUvTVxcblNhbHdlZW4vTVxcblNhbHl1dC9NXFxuU2FtL01cXG5TYW1hbnRoYS9NXFxuU2FtYXIvTVxcblNhbWFyYS9NXFxuU2FtYXJpdGFuL01TXFxuU2FtYXJrYW5kL01cXG5TYW1taWUvTVxcblNhbW15L01cXG5TYW1vYS9NXFxuU2Ftb2FuL1NNXFxuU2Ftb3NldC9NXFxuU2Ftb3llZC9NXFxuU2FtcHNvbi9NXFxuU2Ftc29uL01cXG5TYW1zb25pdGUvTVxcblNhbXN1bmcvTVxcblNhbXVlbC9NXFxuU2FtdWVsc29uL01cXG5TYW4nYVxcblNhbi9NXFxuU2FuYS9NXFxuU2FuY2hlei9NXFxuU2FuY2hvL01cXG5TYW5kL1pNXFxuU2FuZGJ1cmcvTVxcblNhbmRlcnMvTVxcblNhbmRpbmlzdGEvTVxcblNhbmRvdmFsL01cXG5TYW5kcmEvTVxcblNhbmR5L01cXG5TYW5mb3JkL01cXG5TYW5mb3JpemVkL01cXG5TYW5nL01SXFxuU2FuZ2VyL01cXG5TYW5oZWRyaW4vTVxcblNhbmthL01cXG5TYW5rYXJhL01cXG5TYW5za3JpdC9NXFxuU2FudGEvTVxcblNhbnRhbmEvTVxcblNhbnRheWFuYS9NXFxuU2FudGVyaWEvTVxcblNhbnRpYWdvL01cXG5TYW50b3MvTVxcblNhcHBoby9NXFxuU2FwcG9yby9NXFxuU2FyYS9NXFxuU2FyYWNlbi9NU1xcblNhcmFnb3NzYS9NXFxuU2FyYWgvTVxcblNhcmFqZXZvL01cXG5TYXJhbi9NXFxuU2FyYXNvdGEvTVxcblNhcmF0b3YvTVxcblNhcmF3YWsvTVxcblNhcmRpbmlhL01cXG5TYXJnYXNzby9NXFxuU2FyZ2VudC9NXFxuU2FyZ29uL01cXG5TYXJub2ZmL01cXG5TYXJveWFuL01cXG5TYXJ0by9NXFxuU2FydHJlL01cXG5TYXNoYS9NXFxuU2Fza1xcblNhc2thdGNoZXdhbi9NXFxuU2Fza2F0b29uL01cXG5TYXNxdWF0Y2gvTVNcXG5TYXNzYW5pYW4vTVxcblNhc3Nvb24vTVxcblNhdC9NXFxuU2F0YW4vTVxcblNhdGFuaXNtL01cXG5TYXRhbmlzdC9NXFxuU2F0dXJkYXkvTVNcXG5TYXR1cm4vTVxcblNhdHVybmFsaWEvTVxcblNhdWRpL01TXFxuU2F1bC9NXFxuU2F1bmRlcnMvTVxcblNhdW5kcmEvTVxcblNhdXNzdXJlL01cXG5TYXV0ZXJuZXNcXG5TYXZhZ2UvTVxcblNhdmFubmFoL01cXG5TYXZpb3IvTVxcblNhdm9uYXJvbGEvTVxcblNhdm95L01cXG5TYXZveWFyZC9NXFxuU2F3eWVyL01cXG5TYXhvbi9NU1xcblNheG9ueS9NXFxuU2F5ZXJzL01cXG5TYi9NXFxuU2MvTVxcblNjYWxhL01cXG5TY2FuXFxuU2NhbmRpbmF2aWEvTVxcblNjYW5kaW5hdmlhbi9NU1xcblNjYXJhbW91Y2gvTVxcblNjYXJib3JvdWdoL01cXG5TY2FybGF0dGkvTVxcblNjaGVhdC9NXFxuU2NoZWRhci9NXFxuU2NoZWhlcmF6YWRlL01cXG5TY2hlbGxpbmcvTVxcblNjaGVuZWN0YWR5L01cXG5TY2hpYXBhcmVsbGkvTVxcblNjaGljay9NXFxuU2NoaWxsZXIvTVxcblNjaGluZGxlci9NXFxuU2NobGVzaW5nZXIvTVxcblNjaGxpZW1hbm4vTVxcblNjaGxpdHovTVxcblNjaGxvc3MvTVxcblNjaG1pZHQvTVxcblNjaG5hYmVsL01cXG5TY2huYXV6ZXIvTVxcblNjaG5laWRlci9NXFxuU2Nob2VuYmVyZy9NXFxuU2Nob3BlbmhhdWVyL01cXG5TY2hyaWVmZmVyL01cXG5TY2hyb2Rpbmdlci9NXFxuU2Nocm9lZGVyL01cXG5TY2h1YmVydC9NXFxuU2NodWx0ei9NXFxuU2NodWx6L01cXG5TY2h1bWFubi9NXFxuU2NodW1wZXRlci9NXFxuU2NodXlsZXIvTVxcblNjaHV5bGtpbGwvTVxcblNjaHdhcnR6L01cXG5TY2h3YXJ6ZW5lZ2dlci9NXFxuU2Nod2FyemtvcGYvTVxcblNjaHdlaXR6ZXIvTVxcblNjaHdlcHBlcy9NXFxuU2Nod2luZ2VyL01cXG5TY2h3aW5uL01cXG5TY2llbnRvbG9naXN0L1NNXFxuU2NpZW50b2xvZ3kvTVxcblNjaXBpby9NXFxuU2NvcGVzL01cXG5TY29ycGlvL1NNXFxuU2NvcnBpdXMvTVxcblNjb3JzZXNlL01cXG5TY290L1NNXFxuU2NvdGNoL01TXFxuU2NvdGNobWFuL01cXG5TY290Y2htZW4vTVxcblNjb3RjaHdvbWFuL01cXG5TY290Y2h3b21lbi9NXFxuU2NvdGlhL01cXG5TY290bGFuZC9NXFxuU2NvdHNtYW4vTVxcblNjb3RzbWVuL01cXG5TY290c3dvbWFuL01cXG5TY290c3dvbWVuL01cXG5TY290dC9NXFxuU2NvdHRpZS9TTVxcblNjb3R0aXNoL01cXG5TY290dHNkYWxlL01cXG5TY3JhYmJsZS9NU1xcblNjcmFudG9uL01cXG5TY3JpYWJpbi9NXFxuU2NyaWJuZXIvTVxcblNjcmlwdHVyZS9TTVxcblNjcm9vZ2UvTVxcblNjcnVnZ3MvTVxcblNjdWQvTVxcblNjdWxsZXkvTVxcblNjeWxsYS9NXFxuU2N5dGhpYS9NXFxuU2N5dGhpYW4vTVxcblNlL01IXFxuU2VhYm9yZy9NXFxuU2VhZ3JhbS9NXFxuU2Vhbi9NXFxuU2VhcnMvTVxcblNlYXNpZGUvTVxcblNlYXR0bGUvTVxcblNlYmFzdGlhbi9NXFxuU2VicmluZy9NXFxuU2VjXFxuU2Vjb25hbC9NXFxuU2VjcmV0YXJpYXQvTVxcblNlY3JldGFyeVxcblNlZGVyL01TXFxuU2VkbmEvTVxcblNlZWJlY2svTVxcblNlZWdlci9NXFxuU2VnYS9NXFxuU2Vnb3ZpYS9NXFxuU2VncmUvTVxcblNlZ3VuZG8vTVxcblNlZ3dheS9TXFxuU2Vpa28vTVxcblNlaW5lL01cXG5TZWluZmVsZC9NXFxuU2Vqb25nL01cXG5TZWxhc3NpZS9NXFxuU2VsZWN0cmljL01cXG5TZWxlbmEvTVxcblNlbGV1Y2lkL01cXG5TZWxldWN1cy9NXFxuU2VsaW0vTVxcblNlbGp1ay9NXFxuU2Vsa2lyay9NXFxuU2VsbGVycy9NXFxuU2VsbWEvTVxcblNlbHpuaWNrL01cXG5TZW1hcmFuZy9NXFxuU2VtaW5vbGUvTVNcXG5TZW1pcmFtaXMvTVxcblNlbWl0ZS9NU1xcblNlbWl0aWMvU01cXG5TZW10ZXgvTVxcblNlbmF0ZS9NU1xcblNlbmRhaS9NXFxuU2VuZWNhL01TXFxuU2VuZWdhbC9NXFxuU2VuZWdhbGVzZS9NXFxuU2VuZ2hvci9NXFxuU2VuaW9yL01cXG5TZW5uYWNoZXJpYi9NXFxuU2VubmV0dC9NXFxuU2Vuc3Vycm91bmQvTVxcblNlb3VsL01cXG5TZXBcXG5TZXBoYXJkaS9NXFxuU2Vwb3kvTVxcblNlcHQvTVxcblNlcHRlbWJlci9NU1xcblNlcHR1YWdpbnQvTVNcXG5TZXF1b3lhL01cXG5TZXJiL1NNXFxuU2VyYmlhL01cXG5TZXJiaWFuL01TXFxuU2VyZW5hL01cXG5TZXJlbmdldGkvTVxcblNlcmdlaS9NXFxuU2VyZ2lvL01cXG5TZXJwZW5zL01cXG5TZXJyYS9NXFxuU2VycmFuby9NXFxuU2V0L01cXG5TZXRoL01cXG5TZXRvbi9NXFxuU2V1cmF0L01cXG5TZXVzcy9NXFxuU2V2YXN0b3BvbC9NXFxuU2V2ZXJuL01cXG5TZXZlcnVzL01cXG5TZXZpbGxlL01cXG5TZXZyZXMvTVxcblNld2FyZC9NXFxuU2V4dGFucy9NXFxuU2V4dG9uL01cXG5TZXljaGVsbGVzL01cXG5TZXlmZXJ0L01cXG5TZXltb3VyL01cXG5TZ3RcXG5TaGFhbnhpL01cXG5TaGFja2xldG9uL01cXG5TaGFmZmVyL01cXG5TaGFoL01cXG5TaGFrYS9NXFxuU2hha2VyXFxuU2hha2VzcGVhcmUvTVxcblNoYWtlc3BlYXJlYW4vTVxcblNoYW5hL01cXG5TaGFuZG9uZy9NXFxuU2hhbmUvTVxcblNoYW5naGFpL01cXG5TaGFua2FyYS9NXFxuU2hhbm5hL01cXG5TaGFubm9uL01cXG5TaGFudHVuZy9NXFxuU2hhbnhpL01cXG5TaGFwaXJvL01cXG5TaGFyZVBvaW50L01cXG5TaGFyaSdhL01cXG5TaGFyaS9NXFxuU2hhcmlmL01cXG5TaGFybGVuZS9NXFxuU2hhcm9uL01cXG5TaGFycC9NXFxuU2hhcnBlL01cXG5TaGFycm9uL01cXG5TaGFzdGEvTVxcblNoYXVsYS9NXFxuU2hhdW4vTVxcblNoYXVuYS9NXFxuU2hhdmlhbi9NXFxuU2hhdnVvdC9NXFxuU2hhdy9NXFxuU2hhd24vTVxcblNoYXduYS9NXFxuU2hhd25lZS9TTVxcblNoY2hhcmFuc2t5L01cXG5TaGVhL01cXG5TaGViYS9NXFxuU2hlYmVsaS9NXFxuU2hlYm95Z2FuL01cXG5TaGVlbmEvTVxcblNoZWV0cm9jay9NXFxuU2hlZmZpZWxkL01cXG5TaGVpbGEvTVxcblNoZWxieS9NXFxuU2hlbGRvbi9NXFxuU2hlbGlhL01cXG5TaGVsbC9NXFxuU2hlbGxleS9NXFxuU2hlbGx5L01cXG5TaGVsdG9uL01cXG5TaGVuYW5kb2FoL01cXG5TaGVueWFuZy9NXFxuU2hlb2wvTVxcblNoZXBhcmQvTVxcblNoZXBoZXJkL01cXG5TaGVwcGFyZC9NXFxuU2hlcmF0YW4vTVxcblNoZXJhdG9uL01cXG5TaGVyZWUvTVxcblNoZXJpL01cXG5TaGVyaWRhbi9NXFxuU2hlcmxvY2svTVxcblNoZXJtYW4vTVxcblNoZXJwYS9NXFxuU2hlcnJpL01cXG5TaGVycmllL01cXG5TaGVycnkvTVxcblNoZXJ3b29kL01cXG5TaGVyeWwvTVxcblNoZXRsYW5kL1NNXFxuU2hldGxhbmRzL01cXG5TaGV2YXJkbmFkemUvTVxcblNoZXZhdC9NXFxuU2hpJ2l0ZS9NXFxuU2hpZWxkcy9NXFxuU2hpaXRlL01TXFxuU2hpamlhemh1YW5nL01cXG5TaGlrb2t1L01cXG5TaGlsbG9uZy9NXFxuU2hpbG9oL01cXG5TaGludG8vTVNcXG5TaGludG9pc20vTVNcXG5TaGludG9pc3QvTVNcXG5TaGlyYXovTVxcblNoaXJsZXkvTVxcblNoaXZhL01cXG5TaG9ja2xleS9NXFxuU2hvcnQvTVxcblNob3J0aG9ybi9NXFxuU2hvc2hvbmUvU01cXG5TaG9zdGFrb3ZpdGNoL01cXG5TaHJlay9NXFxuU2hyZXZlcG9ydC9NXFxuU2hyaW5lci9NXFxuU2hyb3BzaGlyZS9NXFxuU2h1bGEvTVxcblNoeWxvY2svTVxcblNoeWxvY2tpYW4vTVxcblNpL01cXG5TaWFtL01cXG5TaWFtZXNlL01cXG5TaWJlbGl1cy9NXFxuU2liZXJpYS9NXFxuU2liZXJpYW4vTVNcXG5TaWJ5bC9NXFxuU2ljaHVhbi9NXFxuU2ljaWxpYW4vU01cXG5TaWNpbHkvTVxcblNpZC9NXFxuU2lkZGhhcnRoYS9NXFxuU2lkbmV5L01cXG5TaWVnZnJpZWQvTVxcblNpZW1lbnMvTVxcblNpZXJwaW5za2kvTVxcblNpZXJyYXNcXG5TaWdpc211bmQvTVxcblNpZ211bmQvTVxcblNpZ3VyZC9NXFxuU2loYW5vdWsvTVxcblNpa2gvTVxcblNpa2hpc21cXG5TaWtoc1xcblNpa2tpbS9NXFxuU2lra2ltZXNlL01cXG5TaWtvcnNreS9NXFxuU2lsYXMvTVxcblNpbGVzaWEvTVxcblNpbHVyaWFuL1NNXFxuU2lsdmEvTVxcblNpbHZpYS9NXFxuU2ltZW5vbi9NXFxuU2ltbWVudGFsL01cXG5TaW1tb25zL01cXG5TaW1vbi9NXFxuU2ltb25lL01cXG5TaW1wc29uL1NNXFxuU2ltcHNvbnMvTVxcblNpbXBzb252aWxsZS9NXFxuU2ltcy9NXFxuU2luYWkvTVxcblNpbmF0cmEvTVxcblNpbmJhZC9NXFxuU2luY2xhaXIvTVxcblNpbmRiYWQvTVxcblNpbmRoaS9NXFxuU2luZ2Fwb3JlL01cXG5TaW5nYXBvcmVhbi9TTVxcblNpbmdlci9NXFxuU2luZ2gvTVxcblNpbmdsZXRvbi9NXFxuU2luaGFsZXNlL01cXG5TaW5raWFuZy9NXFxuU2lvdXgvTVxcblNpci9TTVxcblNpcml1cy9NXFxuU2lzdGluZS9NXFxuU2lzeXBoZWFuL01cXG5TaXN5cGh1cy9NXFxuU2l2YS9NXFxuU2l2YW4vTVxcblNqYWVsbGFuZC9NXFxuU2tpbm5lci9NXFxuU2tpcHB5L01cXG5Ta29wamUvTVxcblNreWUvTVxcblNreWxhYi9NXFxuU2t5cGUvTVxcblNsYWNrd2FyZS9NXFxuU2xhc2hkb3QvTVxcblNsYXRlci9NXFxuU2xhdi9TTVxcblNsYXZpYy9NXFxuU2xhdm9uaWMvTVxcblNsaWRlbGwvTVxcblNsaW5reS9NXFxuU2xvYW4vTVxcblNsb2FuZS9NXFxuU2xvY3VtL01cXG5TbG92YWsvU01cXG5TbG92YWtpYS9NXFxuU2xvdmFraWFuXFxuU2xvdmVuZS9TTVxcblNsb3ZlbmlhL01cXG5TbG92ZW5pYW4vTVNcXG5TbHVycGVlL01cXG5TbS9NXFxuU21hbGwvTVxcblNtZXRhbmEvTVxcblNtaXJub2ZmL01cXG5TbWl0aC9NXFxuU21pdGhzb24vTVxcblNtaXRoc29uaWFuL01cXG5TbW9rZXkvTVxcblNtb2xlbnNrL01cXG5TbW9sbGV0dC9NXFxuU211dHMvTVxcblNteXJuYVxcblNuL01cXG5TbmFrZS9NXFxuU25hcHBsZS9NXFxuU25lYWQvTVxcblNuZWxsL01cXG5Tbmlja2Vycy9NXFxuU25pZGVyL01cXG5Tbm9vcHkvTVxcblNub3cvTVxcblNub3diZWx0L01cXG5TbnlkZXIvTVxcblNvYXZlL01cXG5Tb2NcXG5Tb2Nhc3RlZS9NXFxuU29jb3Jyby9NXFxuU29jcmF0ZXMvTVxcblNvY3JhdGljL01cXG5Tb2RkeS9NXFxuU29kb20vTVxcblNvZmlhL01cXG5Tb2hvL01cXG5Tb2wvTVxcblNvbGlzL01cXG5Tb2xvbW9uL01cXG5Tb2xvbi9NXFxuU29semhlbml0c3luL01cXG5Tb21hbGkvU01cXG5Tb21hbGlhL01cXG5Tb21hbGlhbi9NU1xcblNvbW1lL01cXG5Tb21vemEvTVxcblNvbi9NXFxuU29uZGhlaW0vTVxcblNvbmRyYS9NXFxuU29uZ2hhaS9NXFxuU29uZ2h1YS9NXFxuU29uaWEvTVxcblNvbmphL01cXG5Tb25ueS9NXFxuU29ub3JhL01cXG5Tb250YWcvTVxcblNvbnkvTVxcblNvbnlhL01cXG5Tb3BoaWEvTVxcblNvcGhpZS9NXFxuU29waG9jbGVhbi9NXFxuU29waG9jbGVzL01cXG5Tb3B3aXRoL01cXG5Tb3Jib25uZS9NXFxuU29zYS9NXFxuU290by9NXFxuU291cGhhbm91dm9uZy9NXFxuU291cmNlZm9yZ2UvTVxcblNvdXNhL01cXG5Tb3V0aC9NXFxuU291dGhhbXB0b24vTVxcblNvdXRoZWFzdC9NU1xcblNvdXRoZXJuZXIvU01cXG5Tb3V0aGV5L01cXG5Tb3V0aHNcXG5Tb3V0aHdlc3QvTVNcXG5Tb3ZpZXQvTVxcblNvd2V0by9NXFxuU295aW5rYS9NXFxuU295dXovTVxcblNwXFxuU3BhYXR6L01cXG5TcGFja2xlL01cXG5TcGFobi9NXFxuU3BhaW4vTVxcblNwYW0vTVxcblNwYW5cXG5TcGFuZ2xpc2hcXG5TcGFuaWFyZC9TTVxcblNwYW5pc2gvTVxcblNwYXJrcy9NXFxuU3BhcnRhL01cXG5TcGFydGFjdXMvTVxcblNwYXJ0YW4vTVNcXG5TcGFydGFuYnVyZy9NXFxuU3BlYXJzL01cXG5TcGVlci9NXFxuU3BlbmNlL1JNXFxuU3BlbmNlci9NXFxuU3BlbmNlcmlhbi9NXFxuU3BlbmdsZXIvTVxcblNwZW5nbGVyaWFuL01cXG5TcGVuc2VyL01cXG5TcGVuc2VyaWFuL01cXG5TcGVycnkvTVxcblNwaGlueC9NXFxuU3BpY2EvTVxcblNwaWVsYmVyZy9NXFxuU3BpbGxhbmUvTVxcblNwaW5vemEvTVxcblNwaW54L01cXG5TcGlyby9NXFxuU3Bpcm9ncmFwaC9NXFxuU3BpdHNiZXJnZW4vTVxcblNwaXR6L01cXG5TcG9jay9NXFxuU3Bva2FuZS9NXFxuU3ByaW5nZGFsZS9NXFxuU3ByaW5nZmllbGQvTVxcblNwcmluZ3N0ZWVuL01cXG5TcHJpbnQvTVxcblNwcml0ZS9NXFxuU3B1dG5pay9NXFxuU3FcXG5TcXVhbnRvL01cXG5TcXVpYmIvTVxcblNyL01cXG5TcmluYWdhci9NXFxuU3JpdmlqYXlhL01cXG5TdFxcblN0YVxcblN0YWNleS9NXFxuU3RhY2kvTVxcblN0YWNpZS9NXFxuU3RhY3kvTVxcblN0YWVsL01cXG5TdGFmZm9yZC9NXFxuU3RhaXJNYXN0ZXIvTVxcblN0YWxpbi9NXFxuU3RhbGluZ3JhZC9NXFxuU3RhbGluaXN0L01cXG5TdGFsbG9uZS9NXFxuU3RhbWZvcmQvTVxcblN0YW4vTVxcblN0YW5kaXNoL01cXG5TdGFuZm9yZC9NXFxuU3RhbmlzbGF2c2t5L01cXG5TdGFubGV5L01cXG5TdGFudG9uL01cXG5TdGFwbGVzL01cXG5TdGFyYnVja3MvTVxcblN0YXJrL01cXG5TdGFya2V5L01cXG5TdGFyci9NXFxuU3RhdGVuL01cXG5TdGF0ZXNcXG5TdGF1YmFjaC9NXFxuU3RhdW50b24vTVxcblN0ZVxcblN0ZWFkaWNhbS9NXFxuU3RlZWxlL01cXG5TdGVmYW4vTVxcblN0ZWZhbmllL01cXG5TdGVpbi9NUlxcblN0ZWluYmVjay9NXFxuU3RlaW5lbS9NXFxuU3RlaW5lci9NXFxuU3RlaW5tZXR6L01cXG5TdGVpbndheS9NXFxuU3RlbGxhL01cXG5TdGVuZGhhbC9NXFxuU3RlbmdlbC9NXFxuU3RlcGhhbi9NXFxuU3RlcGhhbmllL01cXG5TdGVwaGVuL01TXFxuU3RlcGhlbnMvTVxcblN0ZXBoZW5zb24vTVxcblN0ZXJsaW5nL01cXG5TdGVybi9NXFxuU3Rlcm5lL01cXG5TdGVybm8vTVxcblN0ZXRzb24vTVxcblN0ZXViZW4vTVxcblN0ZXViZW52aWxsZS9NXFxuU3RldmUvTVxcblN0ZXZlbi9NU1xcblN0ZXZlbnMvTVxcblN0ZXZlbnNvbi9NXFxuU3RldmllL01cXG5TdGV3YXJ0L01cXG5TdGllZ2xpdHovTVxcblN0aWx0b24vU01cXG5TdGltc29uL01cXG5TdGluZS9NXFxuU3RpcmxpbmcvTVxcblN0b2NraGF1c2VuL01cXG5TdG9ja2hvbG0vTVxcblN0b2NrdG9uL01cXG5TdG9pYy9TTVxcblN0b2ljaXNtL01TXFxuU3Rva2VzL01cXG5TdG9saWNobmF5YS9NXFxuU3RvbHlwaW4vTVxcblN0b25lL01cXG5TdG9uZWhlbmdlL01cXG5TdG9wcGFyZC9NXFxuU3RvdXQvTVxcblN0b3dlL01cXG5TdHJhYm8vTVxcblN0cmFkaXZhcmlcXG5TdHJhZGl2YXJpdXMvTVxcblN0cmFzYm91cmcvTVxcblN0cmF1c3MvTVxcblN0cmF2aW5za3kvTVxcblN0cmVpc2FuZC9NXFxuU3RyaWNrbGFuZC9NXFxuU3RyaW5kYmVyZy9NXFxuU3Ryb21ib2xpL01cXG5TdHJvbmcvTVxcblN0dS9NXFxuU3R1YXJ0L01TXFxuU3R1ZGViYWtlci9NXFxuU3R1dHRnYXJ0L01cXG5TdHV5dmVzYW50L01cXG5TdHlnaWFuL01cXG5TdHlyb2ZvYW0vU01cXG5TdHlyb24vTVxcblN0eXgvTVxcblN1YXJlei9NXFxuU3ViYXJ1L01cXG5TdWNyZS9NXFxuU3VjcmV0cy9NXFxuU3VkYW4vTVxcblN1ZGFuZXNlL01cXG5TdWRldGVubGFuZC9NXFxuU3Vkb2t1L01cXG5TdWRyYS9NXFxuU3VlL01cXG5TdWV0b25pdXMvTVxcblN1ZXovTVxcblN1ZmZvbGsvTVxcblN1ZmkvTVxcblN1ZmlzbS9NXFxuU3VoYXJ0by9NXFxuU3VpL01cXG5TdWthcm5vL01cXG5TdWtrb3RcXG5TdWxhd2VzaS9NXFxuU3VsZWltYW4vTVxcblN1bGxhL01cXG5TdWxsaXZhbi9NXFxuU3VtYXRyYS9NXFxuU3VtYXRyYW4vU01cXG5TdW1lcmlhL01cXG5TdW1lcmlhbi9TTVxcblN1bW1lci9NU1xcblN1bW1lcnMvTVxcblN1bW5lci9NXFxuU3VtdGVyL01cXG5TdW4vU01cXG5TdW5iZWFtL01cXG5TdW5iZWx0L01cXG5TdW5kYW5lc2UvTVxcblN1bmRhcy9NXFxuU3VuZGF5L01TXFxuU3VuZy9NXFxuU3Vua2lzdC9NXFxuU3VubmkvU01cXG5TdW5uaXRlL01TXFxuU3Vubnl2YWxlL01cXG5TdXBlcmJvd2wvTVxcblN1cGVyZnVuZC9NXFxuU3VwZXJnbHVlL01cXG5TdXBlcmlvci9NXFxuU3VwZXJtYW4vTVxcblN1cHRcXG5TdXJhYmF5YS9NXFxuU3VyYXQvTVxcblN1cmluYW1lL01cXG5TdXJpbmFtZXNlXFxuU3VyeWEvTVxcblN1c2FuL01cXG5TdXNhbmEvTVxcblN1c2FubmEvTVxcblN1c2FubmUvTVxcblN1c2llL01cXG5TdXNxdWVoYW5uYS9NXFxuU3Vzc2V4L01cXG5TdXRoZXJsYW5kL01cXG5TdXR0b24vTVxcblN1dmEvTVxcblN1d2FuZWUvTVxcblN1emFubmUvTVxcblN1emV0dGUvTVxcblN1emhvdS9NXFxuU3V6dWtpL01cXG5TdXp5L01cXG5TdmFsYmFyZC9NXFxuU3Zlbi9NXFxuU3ZlbmdhbGkvTVxcblN2ZXJkbG92c2tcXG5Td2FoaWxpL1NNXFxuU3dhbW1lcmRhbS9NXFxuU3dhbmVlL01cXG5Td2Fuc2VhL01cXG5Td2Fuc29uL01cXG5Td2F6aS9TTVxcblN3YXppbGFuZC9NXFxuU3dlZC9OXFxuU3dlZGUvU01cXG5Td2VkZW4vTVxcblN3ZWRlbmJvcmcvTVxcblN3ZWRpc2gvTVxcblN3ZWVuZXkvTVxcblN3ZWV0L01cXG5Td2lmdC9NXFxuU3dpbmJ1cm5lL01cXG5Td2lzcy9NU1xcblN3aXNzYWlyL01cXG5Td2l0elxcblN3aXR6ZXJsYW5kL01cXG5TeWJpbC9NXFxuU3lkbmV5L01cXG5TeWtlcy9NXFxuU3lsdmVzdGVyL01cXG5TeWx2aWEvTVxcblN5bHZpZS9NXFxuU3luZ2UvTVxcblN5cmFjdXNlL01cXG5TeXJpYS9NXFxuU3lyaWFjL01cXG5TeXJpYW4vTVNcXG5TemlsYXJkL01cXG5TenltYm9yc2thL01cXG5UJ2FuZy9NXFxuVC9NREdcXG5UQVxcblRBUlBcXG5UQi9NXFxuVEJBXFxuVERcXG5URERcXG5URUZMXFxuVEVMTkVUL1NcXG5URUxORVRUZWRcXG5URUxORVRUaW5nXFxuVEVTTFxcblRFU09MXFxuVEdJRlxcblRIQ1xcblRLTy9NXFxuVExDL01cXG5UTVxcblROXFxuVE5UL01cXG5UT0VGTFxcblRRTVxcblRWL1NNXFxuVFZBXFxuVFdBL01cXG5UV1hcXG5UWFxcblRhL01cXG5UYWJhc2NvL1NNXFxuVGFiYXRoYS9NXFxuVGFiZXJuYWNsZS9NU1xcblRhYml0aGEvTVxcblRhYnJpei9NU1xcblRhY2l0dXMvTVxcblRhY29tYS9NXFxuVGFkL01cXG5UYWR6aGlrL01cXG5UYWVndS9NXFxuVGFlam9uL01cXG5UYWZ0L01cXG5UYWdhbG9nL1NNXFxuVGFnb3JlL01cXG5UYWd1cy9NXFxuVGFoaXRpL01cXG5UYWhpdGlhbi9NU1xcblRhaG9lL01cXG5UYWljaHVuZy9NXFxuVGFpbmFuXFxuVGFpbmUvTVxcblRhaXBlaS9NXFxuVGFpcGluZy9NXFxuVGFpd2FuL01cXG5UYWl3YW5lc2UvTVxcblRhaXl1YW4vTVxcblRhamlraXN0YW4vTVxcblRha2xhbWFrYW4vTVxcblRhbGJvdC9NXFxuVGFsaWJhbi9NXFxuVGFsaWVzaW4vTVxcblRhbGxhaGFzc2VlL01cXG5UYWxsY2hpZWYvTVxcblRhbGxleS9NXFxuVGFsbGV5cmFuZC9NXFxuVGFsbGlubi9NXFxuVGFsbXVkL01TXFxuVGFsbXVkaWNcXG5UYWxtdWRpc3RcXG5UYW1hcmEvTVxcblRhbWVrYS9NXFxuVGFtZXJhL01cXG5UYW1lcmxhbmUvTVxcblRhbWkvTVxcblRhbWlrYS9NXFxuVGFtaWwvTVNcXG5UYW1tYW55L01cXG5UYW1taS9NXFxuVGFtbWllL01cXG5UYW1tdXovTVxcblRhbW15L01cXG5UYW1wYS9NXFxuVGFtcGF4L01cXG5UYW1yYS9NXFxuVGFtd29ydGgvTVxcblRhbmNyZWQvTVxcblRhbmV5L01cXG5UYW5nYW55aWthL01cXG5UYW5naWVyL01TXFxuVGFuZ3NoYW4vTVxcblRhbmlhL01cXG5UYW5pc2hhL01cXG5UYW5uZXIvTVxcblRhbm5oYXVzZXIvTVxcblRhbnRhbHVzL01cXG5UYW55YS9NXFxuVGFuemFuaWEvTVxcblRhbnphbmlhbi9TTVxcblRhby9NXFxuVGFvaXNtL01TXFxuVGFvaXN0L01TXFxuVGFyYS9NXFxuVGFyYW50aW5vL01cXG5UYXJhd2EvTVxcblRhcmF6ZWQvTVxcblRhcmJlbGwvTVxcblRhcmdldC9NXFxuVGFyaW0vTVxcblRhcmtlbnRvbi9NXFxuVGFya2luZ3Rvbi9NXFxuVGFydGFyeS9NXFxuVGFydHVmZmUvTVxcblRhcnphbi9NXFxuVGFzaGEvTVxcblRhc2hrZW50L01cXG5UYXNtYW4vTVxcblRhc21hbmlhL01cXG5UYXNtYW5pYW4vTVxcblRhc3MvTVxcblRhdGFyL01TXFxuVGF0ZS9NXFxuVGF0dW0vTVxcblRhdXJ1cy9NU1xcblRhdmFyZXMvTVxcblRhd25leS9NXFxuVGF5bG9yL01cXG5UYi9NXFxuVGJpbGlzaS9NXFxuVGMvTVxcblRjaGFpa292c2t5L01cXG5UZS9NXFxuVGVYXFxuVGVYZXNcXG5UZWFzZGFsZS9NXFxuVGVjaG5pY29sb3IvTVxcblRlY3Vtc2VoL01cXG5UZWQvTVxcblRlZGR5L01cXG5UZWZsb24vTVNcXG5UZWd1Y2lnYWxwYS9NXFxuVGVocmFuXFxuVGVsZVByb21wVGVyXFxuVGVsZVByb21wdGVyL01cXG5UZWxlbWFjaHVzL01cXG5UZWxlbWFubi9NXFxuVGVsZXR5cGVcXG5UZWxsL01SXFxuVGVsbGVyL01cXG5UZWx1Z3UvTVxcblRlbWVjdWxhL01cXG5UZW1wZVxcblRlbXBsYXIvTVxcblRlbXBsZS9NXFxuVGVubi9NXFxuVGVubmVzc2Vhbi9TTVxcblRlbm5lc3NlZS9NXFxuVGVubnlzb24vTVxcblRlbm55c29uaWFuXFxuVGVub2NodGl0bGFuL01cXG5UZW5zb3JGbG93L01cXG5UZW90aWh1YWNhbi9NXFxuVGVyZW5jZS9NXFxuVGVyZXNhL01cXG5UZXJlc2hrb3ZhL01cXG5UZXJpL01cXG5UZXJrZWwvTVxcblRlcnBzaWNob3JlL01cXG5UZXJyL01cXG5UZXJyYS9NXFxuVGVycmFuL01cXG5UZXJyYW5jZS9NXFxuVGVycmVsbC9NXFxuVGVycmVuY2UvTVxcblRlcnJpL01cXG5UZXJyaWUvTVxcblRlcnJ5L01cXG5UZXJ0aWFyeS9NXFxuVGVzbGEvTVxcblRlc3MvTVxcblRlc3NhL01cXG5UZXNzaWUvTVxcblRldC9NXFxuVGV0aHlzL01cXG5UZXRvbnMvTVxcblRldXRvbi9NU1xcblRldXRvbmljL01cXG5UZXZldC9NXFxuVGV4L01cXG5UZXhhY28vTVxcblRleGFuL01TXFxuVGV4YXJrYW5hL01cXG5UZXhhcy9NXFxuVGgvTVxcblRoYWNrZXJheS9NXFxuVGhhZC9NXFxuVGhhZGRldXMvTVxcblRoYWkvU01cXG5UaGFpbGFuZC9NXFxuVGhhbGVzL01cXG5UaGFsaWEvTVxcblRoYW1lcy9NXFxuVGhhbmgvTVxcblRoYW5rc2dpdmluZy9NU1xcblRoYW50L01cXG5UaGFyL01cXG5UaGFycC9NXFxuVGhhdGNoZXIvTVxcblRoZWEvTVxcblRoZWJlcy9NXFxuVGhlaWxlci9NXFxuVGhlbG1hL01cXG5UaGVtaXN0b2NsZXMvTVxcblRoZW9jcml0dXMvTVxcblRoZW9kb3JhL01cXG5UaGVvZG9yZS9NXFxuVGhlb2RvcmljL01cXG5UaGVvZG9zaXVzL01cXG5UaGVvc29waHkvTVxcblRoZXJhdmFkYS9NXFxuVGhlcmVzYS9NXFxuVGhlcmVzZS9NXFxuVGhlcm1vcHlsYWUvTVxcblRoZXJtb3NcXG5UaGVyb24vTVxcblRoZXNldXMvTVxcblRoZXNwaWFuL01cXG5UaGVzcGlzL01cXG5UaGVzc2Fsb25pYW4vU01cXG5UaGVzc2Fsb25pa2kvTVxcblRoZXNzYWx5L01cXG5UaGlldS9NXFxuVGhpbWJ1L01cXG5UaGltcGh1XFxuVGhvbWFzL01cXG5UaG9taXNtL01cXG5UaG9taXN0aWMvTVxcblRob21wc29uL01cXG5UaG9tc29uL01cXG5UaG9yL01cXG5UaG9yYXppbmUvTVxcblRob3JlYXUvTVxcblRob3JudG9uL01cXG5UaG9yb3VnaGJyZWQvTVxcblRob3JwZS9NXFxuVGhvdGgvTVxcblRocmFjZS9NXFxuVGhyYWNpYW4vTVxcblRodVxcblRodWN5ZGlkZXMvTVxcblRodWxlL01cXG5UaHVuZGVyYmlyZC9NXFxuVGh1ci9TXFxuVGh1cmJlci9NXFxuVGh1cm1hbi9NXFxuVGh1cm1vbmQvTVxcblRodXJzZGF5L1NNXFxuVGh1dG1vc2UvTVxcblRpL01cXG5UaWEvTVxcblRpYW5qaW4vTVxcblRpYmVyL01cXG5UaWJlcml1cy9NXFxuVGliZXQvTVxcblRpYmV0YW4vTVNcXG5UaWNrZXRtYXN0ZXIvTVxcblRpY29uZGVyb2dhL01cXG5UaWRlL01cXG5UaWVuYW5tZW4vTVxcblRpZmZhbnkvTVxcblRpZ3Jpcy9NXFxuVGlqdWFuYS9NXFxuVGlsbGljaC9NXFxuVGlsbG1hbi9NXFxuVGlsc2l0L01cXG5UaW0vTVxcblRpbWJ1a3R1L01cXG5UaW1leC9NXFxuVGltbXkvTVxcblRpbW9uL01cXG5UaW1vci9NXFxuVGltb3RoeS9NXFxuVGltdXIvTVxcblRpbXVyaWQvTVxcblRpbmEvTVxcblRpbmcvTVxcblRpbmtlcmJlbGwvTVxcblRpbmtlcnRveS9NXFxuVGluc2VsdG93bi9NXFxuVGludG9yZXR0by9NXFxuVGlwcGVjYW5vZS9NXFxuVGlwcGVyYXJ5L01cXG5UaXJhbmVcXG5UaXJlc2lhcy9NXFxuVGlyb2wvTVxcblRpcm9sZWFuXFxuVGlzaGEvTVxcblRpc2hyaS9NXFxuVGl0YW4vU01cXG5UaXRhbmlhL01cXG5UaXRhbmljL01cXG5UaXRpYW4vTVxcblRpdGljYWNhL01cXG5UaXRvL01cXG5UaXR1cy9NXFxuVGl0dXN2aWxsZS9NXFxuVGwvTVxcblRsYWxvYy9NXFxuVGxpbmdpdC9NXFxuVG0vTVxcblRvYmFnby9NXFxuVG9iaXQvTVxcblRvYnkvTVxcblRvY2FudGlucy9NXFxuVG9jcXVldmlsbGUvTVxcblRvZC9NXFxuVG9kZC9NXFxuVG9nby9NXFxuVG9nb2xlc2UvTVxcblRvam8vTVxcblRva2F5L01cXG5Ub2t1Z2F3YS9NXFxuVG9reW8vTVxcblRva3lvaXRlXFxuVG9sZWRvL01TXFxuVG9sa2llbi9NXFxuVG9sc3RveS9NXFxuVG9sdGVjL01cXG5Ub2x5YXR0aS9NXFxuVG9tL01cXG5Ub21hcy9NXFxuVG9tYmF1Z2gvTVxcblRvbWxpbi9NXFxuVG9tbWllL01cXG5Ub21teS9NXFxuVG9tcGtpbnMvTVxcblRvbXNrL01cXG5Ub25nYS9NXFxuVG9uZ2FuL01TXFxuVG9uaS9NXFxuVG9uaWEvTVxcblRvbnRvL01cXG5Ub255L01cXG5Ub255YS9NXFxuVG9wZWthL01cXG5Ub3BzeS9NXFxuVG9yYWgvTVxcblRvcmFoc1xcblRvcm9udG8vTVxcblRvcnF1ZW1hZGEvTVxcblRvcnJhbmNlL01cXG5Ub3JyZW5zL01cXG5Ub3JyZXMvTVxcblRvcnJpY2VsbGkvTVxcblRvcnRvbGEvTVxcblRvcnR1Z2EvTVxcblRvcnZhbGRzL01cXG5Ub3J5L1NNXFxuVG9zY2EvTVxcblRvc2NhbmluaS9NXFxuVG9zaGliYS9NXFxuVG90by9NXFxuVG91bG91c2UvTVxcblRvd25lcy9NXFxuVG93bnNlbmQvTVxcblRveW5iZWUvTVxcblRveW9kYS9NXFxuVG95b3RhL01cXG5UcmFjZXkvTVxcblRyYWNpL01cXG5UcmFjaWUvTVxcblRyYWN5L01cXG5UcmFmYWxnYXIvTVxcblRyYWlsd2F5cy9NXFxuVHJhamFuL01cXG5UcmFuL01cXG5UcmFuc2NhdWNhc2lhL01cXG5UcmFuc3ZhYWwvTVxcblRyYW5zeWx2YW5pYS9NXFxuVHJhbnN5bHZhbmlhbi9NXFxuVHJhcHBpc3QvU01cXG5UcmF2aXMvTVxcblRyYXZvbHRhL01cXG5UcmVhc3VyeS9TTVxcblRyZWJsaW5rYS9NXFxuVHJla2tpZS9NXFxuVHJlbnQvTVxcblRyZW50b24vTVxcblRyZXZlbHlhbi9NXFxuVHJldmluby9NXFxuVHJldm9yL01cXG5UcmV5L01cXG5Ucmlhbmd1bHVtL01cXG5Ucmlhc3NpYy9NXFxuVHJpY2lhL01cXG5UcmlkZW50L01cXG5Ucmllc3RlL01cXG5UcmltdXJ0aS9NXFxuVHJpbmEvTVxcblRyaW5pZGFkL01cXG5UcmluaWRhZGlhbi9NU1xcblRyaW5pdHkvU01cXG5UcmlwaXRha2EvTVxcblRyaXBvbGkvTVxcblRyaXBwZS9NXFxuVHJpc2hhL01cXG5UcmlzdGFuL01cXG5Ucml0b24vTVxcblRyb2JyaWFuZC9NXFxuVHJvaWx1cy9NXFxuVHJvamFuL01TXFxuVHJvbGxvcGUvTVxcblRyb25kaGVpbS9NXFxuVHJvcGljYW5hL01cXG5Ucm90c2t5L01cXG5Ucm95L01cXG5Ucm95ZXNcXG5UcnVja2VlL01cXG5UcnVkZWF1L01cXG5UcnVkeS9NXFxuVHJ1ZmZhdXQvTVxcblRydWppbGxvL01cXG5UcnVtYW4vTVxcblRydW1idWxsL01cXG5UcnVtcC9NXFxuVHJ1dGgvTVxcblRzaW1zaGlhbi9NXFxuVHNpb2xrb3Zza3kvTVxcblRzaXRzaWhhci9NXFxuVHNvbmdraGFwYS9NXFxuVHN3YW5hL01cXG5UdS9NXFxuVHVhbW90dS9NXFxuVHVhcmVnL01cXG5UdWJtYW4vTVxcblR1Y2tlci9NXFxuVHVjc29uL01cXG5UdWN1bWFuL01cXG5UdWRvci9TTVxcblR1ZS9TXFxuVHVlcy9NXFxuVHVlc2RheS9NU1xcblR1bGFuZS9NXFxuVHVsbC9NXFxuVHVsc2EvTVxcblR1bHNpZGFzL01cXG5UdW1zL01cXG5UdW5ndXMvTVxcblR1bmd1c2thL01cXG5UdW5pcy9NXFxuVHVuaXNpYS9NXFxuVHVuaXNpYW4vTVNcXG5UdW5uZXkvTVxcblR1cGkvTVxcblR1cHBlcndhcmUvTVxcblR1cHVuZ2F0by9NXFxuVHVyZ2VuZXYvTVxcblR1cmluL01cXG5UdXJpbmcvTVxcblR1cmsvU01cXG5UdXJrZXN0YW4vTVxcblR1cmtleS9NXFxuVHVya2ljL01TXFxuVHVya2lzaC9NXFxuVHVya21lbmlzdGFuL01cXG5UdXJsb2NrL01cXG5UdXJuZXIvTVxcblR1cnBpbi9NXFxuVHVzY2Fsb29zYS9NXFxuVHVzY2FuL01cXG5UdXNjYW55L01cXG5UdXNjYXJvcmEvTVNcXG5UdXNjb24vTVxcblR1c2tlZ2VlL01cXG5UdXNzYXVkL01cXG5UdXQvTVxcblR1dGFua2hhbWVuL01cXG5UdXRzaS9NXFxuVHV0dS9NXFxuVHV2YWx1L01cXG5UdXZhbHVhblxcblR3YWluL01cXG5Ud2VlZC9NXFxuVHdlZWRsZWRlZS9NXFxuVHdlZWRsZWR1bS9NXFxuVHdpbGEvTVxcblR3aW5raWVzL01cXG5Ud2l0dGVyL01cXG5Ud2l6emxlcnMvTVxcblR3cFxcblR5L01cXG5UeWNoby9NXFxuVHlsZW5vbC9NXFxuVHlsZXIvTVxcblR5bmRhbGUvTVxcblR5bmRhbGwvTVxcblR5cmUvTVxcblR5cmVlL01cXG5UeXJvbGVhblxcblR5cm9uZS9NXFxuVHlzb24vTVxcblUvTVxcblVBUlxcblVBV1xcblVCUy9NXFxuVUNMQS9NXFxuVUZPL1NNXFxuVUhGL01cXG5VSy9NXFxuVUxcXG5VTi9NXFxuVU5FU0NPL01cXG5VTklDRUYvTVxcblVOSVgvTVxcblVQQ1xcblVQSS9NXFxuVVBTL01cXG5VUkwvU1xcblVTL01cXG5VU0EvTVxcblVTQUZcXG5VU0JcXG5VU0NHXFxuVVNEQS9NXFxuVVNJQVxcblVTTUNcXG5VU05cXG5VU09cXG5VU1BcXG5VU1BTXFxuVVNTXFxuVVNTUi9NXFxuVVQvTVxcblVUQ1xcblVWL01cXG5VYmFuZ2kvTVxcblVidW50dS9NXFxuVWNheWFsaS9NXFxuVWNjZWxsby9NXFxuVWRhbGwvTVxcblVmYS9NXFxuVWdhbmRhL01cXG5VZ2FuZGFuL01TXFxuVWlnaHVyL01cXG5VanVuZ3BhbmRhbmcvTVxcblVrcmFpbmUvTVxcblVrcmFpbmlhbi9TTVxcblVsc3Rlci9NXFxuVWx0cmFzdWVkZS9NXFxuVWx5YW5vdnNrL01cXG5VbHlzc2VzL01cXG5VbWJyaWVsL01cXG5VbmRlcndvb2QvTVxcblVuZ2F2YS9NXFxuVW5pY29kZS9NXFxuVW5pbGV2ZXIvTVxcblVuaW9uL1NNXFxuVW5pb25pc3RcXG5VbmlvbnRvd24vTVxcblVuaXJveWFsL01cXG5Vbml0YXJpYW4vTVNcXG5Vbml0YXJpYW5pc20vTVNcXG5Vbml0YXMvTVxcblVuaXgvU1xcblVudWthbGhhaS9NXFxuVXBhbmlzaGFkcy9NXFxuVXBkaWtlL01cXG5VcGpvaG4vTVxcblVwdG9uL01cXG5Vci9NXFxuVXJhbC9TTVxcblVyYWxzL01cXG5VcmFuaWEvTVxcblVyYW51cy9NXFxuVXJiYW4vTVxcblVyZHUvTVxcblVyZXkvTVxcblVyaWFoL01cXG5VcmllbC9NXFxuVXJpcy9NXFxuVXJxdWhhcnQvTVxcblVyc2EvTVxcblVyc3VsYS9NXFxuVXJzdWxpbmUvTVxcblVydWd1YXkvTVxcblVydWd1YXlhbi9NU1xcblVydW1xaS9NXFxuVXNlbmV0L01TXFxuVXN0aW5vdi9NXFxuVXRcXG5VdGFoL01cXG5VdGFoYW4vTVNcXG5VdGUvU01cXG5VdGljYS9NXFxuVXRvcGlhL1NNXFxuVXRvcGlhbi9TTVxcblV0cmVjaHQvTVxcblV0cmlsbG8vTVxcblV6YmVrL01cXG5VemJla2lzdGFuL01cXG5VemkvU01cXG5WL01cXG5WQVxcblZBVC9NXFxuVkFYXFxuVkFYZXNcXG5WQkEvTVxcblZDUi9NXFxuVkQvTVxcblZEVFxcblZEVVxcblZGXFxuVkZXL01cXG5WR1xcblZHQVxcblZIRi9NXFxuVkhTXFxuVkkvTVxcblZJUC9TTVxcblZJU1RBXFxuVkpcXG5WTEYvTVxcblZPQVxcblZQXFxuVlRcXG5WVE9MXFxuVmEvTVxcblZhY2F2aWxsZS9NXFxuVmFkZXIvTVxcblZhZHV6L01cXG5WYWwvTVxcblZhbGFyaWUvTVxcblZhbGRlei9NXFxuVmFsZG9zdGEvTVxcblZhbGVuY2lhL1NNXFxuVmFsZW50aS9NXFxuVmFsZW50aW4vTVxcblZhbGVudGluZS9NXFxuVmFsZW50aW5vL01cXG5WYWxlbnp1ZWxhL01cXG5WYWxlcmlhL01cXG5WYWxlcmlhbi9NXFxuVmFsZXJpZS9NXFxuVmFsZXJ5L01cXG5WYWxoYWxsYS9NXFxuVmFsaXVtL01TXFxuVmFsa3lyaWUvU01cXG5WYWxsZWpvL01cXG5WYWxsZXR0YS9NXFxuVmFsb2lzL01cXG5WYWxwYXJhaXNvL01cXG5WYWx2b2xpbmUvTVxcblZhbi9NXFxuVmFuY2UvTVxcblZhbmNvdXZlci9NXFxuVmFuZGFsL01TXFxuVmFuZGVyYmlsdC9NXFxuVmFuZHlrZS9NXFxuVmFuZXNzYS9NXFxuVmFuZy9NXFxuVmFudWF0dS9NXFxuVmFuemV0dGkvTVxcblZhcmFuYXNpL01cXG5WYXJlc2UvTVxcblZhcmdhcy9NXFxuVmFzZWxpbmUvU01cXG5WYXNxdWV6L01cXG5WYXNzYXIvTVxcblZhdGljYW4vTVxcblZhdWJhbi9NXFxuVmF1Z2hhbi9NXFxuVmF1Z2huL01cXG5WYXpxdWV6L01cXG5WZWJsZW4vTVxcblZlZGEvU01cXG5WZWRhbnRhL01cXG5WZWdhL1NNXFxuVmVnYXMvTVxcblZlZ2VtaXRlL01cXG5WZWxhL01cXG5WZWxhc3F1ZXovTVxcblZlbGF6cXVlei9NXFxuVmVsY3JvL01TXFxuVmVsZXovTVxcblZlbG1hL01cXG5WZWx2ZWV0YS9NXFxuVmVuZXRpYW4vU01cXG5WZW5lenVlbGEvTVxcblZlbmV6dWVsYW4vU01cXG5WZW5pY2UvTVxcblZlbm4vTVxcblZlbnRvbGluL01cXG5WZW51cy9NU1xcblZlbnVzaWFuL01cXG5WZXJhL01cXG5WZXJhY3J1ei9NXFxuVmVyZGUvTVxcblZlcmRpL01cXG5WZXJkdW4vTVxcblZlcml6b24vTVxcblZlcmxhaW5lL01cXG5WZXJtZWVyL01cXG5WZXJtb250L1pNUlxcblZlcm1vbnRlci9NXFxuVmVybi9NXFxuVmVybmEvTVxcblZlcm5lL01cXG5WZXJub24vTVxcblZlcm9uYS9NXFxuVmVyb25lc2UvTVxcblZlcm9uaWNhL01cXG5WZXJzYWlsbGVzL01cXG5WZXNhbGl1cy9NXFxuVmVzcGFzaWFuL01cXG5WZXNwdWNjaS9NXFxuVmVzdGEvTVxcblZlc3V2aXVzL01cXG5WaWFjb20vTVxcblZpYWdyYS9NXFxuVmljL01cXG5WaWNlbnRlL01cXG5WaWNoeS9NXFxuVmlja2kvTVxcblZpY2tpZS9NXFxuVmlja3NidXJnL01cXG5WaWNreS9NXFxuVmljdG9yL01cXG5WaWN0b3JpYS9NXFxuVmljdG9yaWFuL01TXFxuVmljdG9yaWFuaXNtXFxuVmljdG9ydmlsbGUvTVxcblZpY3Ryb2xhL01cXG5WaWRhbC9NXFxuVmllbm5hL01cXG5WaWVubmVzZS9NXFxuVmllbnRpYW5lL01cXG5WaWV0Y29uZy9NXFxuVmlldG1pbmgvTVxcblZpZXRuYW0vTVxcblZpZXRuYW1lc2UvTVxcblZpamF5YW5hZ2FyL01cXG5WaWpheWF3YWRhL01cXG5WaWtpbmcvTVNcXG5WaWxhL01cXG5WaWxsYS9TTVxcblZpbGxhcnJlYWwvTVxcblZpbGxhcy9NXFxuVmlsbG9uL01cXG5WaWxtYS9NXFxuVmlsbml1cy9NXFxuVmlseXVpL01cXG5WaW5jZS9NXFxuVmluY2VudC9NXFxuVmluZGVtaWF0cml4L01cXG5WaW5lbGFuZC9NXFxuVmluc29uL01cXG5WaW9sYS9NXFxuVmlvbGV0L01cXG5WaXJnaWUvTVxcblZpcmdpbC9NXFxuVmlyZ2luaWEvTVxcblZpcmdpbmlhbi9TTVxcblZpcmdvL1NNXFxuVmlzYS9NXFxuVmlzYWxpYS9NXFxuVmlzYXlhbnMvTVxcblZpc2hudS9NXFxuVmlzaWdvdGgvTVxcblZpc2lnb3Roc1xcblZpc3R1bGEvTVxcblZpdGltL01cXG5WaXRvL01cXG5WaXR1cy9NXFxuVml2YWxkaS9NXFxuVml2ZWthbmFuZGEvTVxcblZpdmlhbi9NXFxuVml2aWVubmUvTVxcblZsYWQvTVxcblZsYWRpbWlyL01cXG5WbGFkaXZvc3Rvay9NXFxuVmxhbWluY2svTVxcblZsYXNpYy9NXFxuVm9JUFxcblZvZ3VlL01cXG5Wb2xja2VyL01cXG5Wb2xkZW1vcnQvTVxcblZvbGdhL01cXG5Wb2xnb2dyYWQvTVxcblZvbGtzd2FnZW4vTVxcblZvbHN0ZWFkL01cXG5Wb2x0YS9NXFxuVm9sdGFpcmUvTVxcblZvbHZvL01cXG5Wb25kYS9NXFxuVm9ubmVndXQvTVxcblZvcm9uZXpoL01cXG5Wb3JzdGVyL01cXG5Wb3lhZ2VyL01cXG5WdFxcblZ1aXR0b24vTVxcblZ1bGNhbi9NXFxuVnVsZ1xcblZ1bGdhdGUvU01cXG5XL01EVFxcbldBXFxuV0FDXFxuV0FTUC9NXFxuV0FUUy9NXFxuV0NcXG5XSE8vTVxcbldJXFxuV01EXFxuV05XL01cXG5XUFxcbldTVy9NXFxuV1RPXFxuV1ZcXG5XV1xcbldXSVxcbldXSUlcXG5XV1cvTVxcbldZXFxuV1lTSVdZR1xcbldhYmFzaC9NXFxuV2FjXFxuV2Fjby9NXFxuV2FkZS9NXFxuV2FnbmVyL01cXG5XYWduZXJpYW4vTVxcbldhaGhhYmkvTVxcbldhaWtpa2kvTVxcbldhaXRlL01cXG5XYWtlL01cXG5XYWtzbWFuL01cXG5XYWxkL01OXFxuV2FsZGVtYXIvTVxcbldhbGRlbi9NXFxuV2FsZGVuc2lhbi9NXFxuV2FsZGhlaW0vTVxcbldhbGRvL01cXG5XYWxkb3JmL01cXG5XYWxlcy9NXFxuV2FsZXNhL01cXG5XYWxncmVlbi9TTVxcbldhbGdyZWVucy9NXFxuV2Fsa2VyL01cXG5XYWxrbWFuL01cXG5XYWxsL1NNUlxcbldhbGxhY2UvTVxcbldhbGxlbnN0ZWluL01cXG5XYWxsZXIvTVxcbldhbGxpcy9NXFxuV2FsbG9vbi9NXFxuV2FsbHMvTVxcbldhbG1hcnQvTVxcbldhbHBvbGUvTVxcbldhbHB1cmdpc25hY2h0L01cXG5XYWxzaC9NXFxuV2FsdC9NUlpcXG5XYWx0ZXIvTVxcbldhbHRlcnMvTVxcbldhbHRvbi9NXFxuV2FuYW1ha2VyL01cXG5XYW5kYS9NXFxuV2FuZy9NXFxuV2Fua2VsL01cXG5XYXJkL01cXG5XYXJlL01HXFxuV2FyaG9sL01cXG5XYXJpbmcvTVxcbldhcm5lci9NXFxuV2FycmVuL01cXG5XYXJzYXcvTVxcbldhcndpY2svTVxcbldhc2F0Y2gvTVxcbldhc2gvTVxcbldhc2hpbmd0b24vTVxcbldhc2hpbmd0b25pYW4vTVNcXG5XYXNzZXJtYW5uL01cXG5XYXRlcmJ1cnkvTVxcbldhdGVyZm9yZC9NXFxuV2F0ZXJnYXRlL01cXG5XYXRlcmxvby9NU1xcbldhdGVycy9NXFxuV2F0ZXJ0b3duL01cXG5XYXRraW5zL01cXG5XYXRzb24vTVxcbldhdHNvbnZpbGxlL01cXG5XYXR0L1NNXFxuV2F0dGVhdS9NXFxuV2F0dHMvTVxcbldhdHVzaS9NXFxuV2F1Z2gvTVxcbldhdXNhdS9NXFxuV2F2ZVxcbldheW5lL01cXG5XYXluZXNib3JvL01cXG5XZWF2ZXIvTVxcbldlYi9NUlxcbldlYmIvTVxcbldlYmVyL01cXG5XZWJlcm4vTVxcbldlYnN0ZXIvTVNcXG5XZWQvTVxcbldlZGRlbGwvTVxcbldlZGd3b29kL01cXG5XZWRuZXNkYXkvTVNcXG5XZWVrcy9NXFxuV2Vocm1hY2h0L01cXG5XZWkvTVxcbldlaWVyc3RyYXNzL01cXG5XZWlsbC9NXFxuV2VpbmJlcmcvTVxcbldlaXJ0b24vTVxcbldlaXNzL01cXG5XZWlzc211bGxlci9NXFxuV2Vpem1hbm4vTVxcbldlbGRvbi9NXFxuV2VsbGFuZC9NXFxuV2VsbGVyL01cXG5XZWxsZXMvTVxcbldlbGxpbmd0b24vU01cXG5XZWxscy9NXFxuV2Vsc2gvTVxcbldlbHNobWFuL01cXG5XZWxzaG1lbi9NXFxuV2Vsc2h3b21hblxcbldlbmF0Y2hlZS9NXFxuV2VuZGVsbC9NXFxuV2VuZGkvTVxcbldlbmR5L01cXG5XZXNhay9NXFxuV2VzbGV5L01cXG5XZXNsZXlhbi9NXFxuV2Vzc2V4L01cXG5XZXNzb24vTVxcbldlc3QvU01cXG5XZXN0ZXJuL01SU1xcbldlc3Rpbmdob3VzZS9NXFxuV2VzdG1pbnN0ZXIvTVxcbldlc3Rvbi9NXFxuV2VzdHBoYWxpYS9NXFxuV2V5ZGVuL01cXG5XZXplbi9NXFxuV2hhcnRvbi9NXFxuV2hlYXRpZXMvTVxcbldoZWF0c3RvbmUvTVxcbldoZWVsZXIvTVxcbldoZWVsaW5nL01cXG5XaGlnL1NNXFxuV2hpcHBsZS9NXFxuV2hpcmxwb29sL01cXG5XaGlzdGxlci9NXFxuV2hpdGFrZXIvTVxcbldoaXRlL1NNXFxuV2hpdGVmaWVsZC9NXFxuV2hpdGVoYWxsL01cXG5XaGl0ZWhlYWQvTVxcbldoaXRlaG9yc2UvTVxcbldoaXRlbGV5L01cXG5XaGl0ZmllbGQvTVxcbldoaXRsZXkvTVxcbldoaXRtYW4vTVxcbldoaXRuZXkvTVxcbldoaXRzdW5kYXkvTVNcXG5XaGl0dGllci9NXFxuV2lGaVxcbldpY2NhL01cXG5XaWNoaXRhL01cXG5XaWVtYXIvTVxcbldpZXNlbC9NXFxuV2llc2VudGhhbC9NXFxuV2lnZ2lucy9NXFxuV2lnbmVyL01cXG5XaWkvTVxcbldpa2lsZWFrc1xcbldpa2lwZWRpYS9NXFxuV2lsYmVyZm9yY2UvTVxcbldpbGJlcnQvTVxcbldpbGJ1ci9NXFxuV2lsYnVybi9NXFxuV2lsY294L01cXG5XaWxkYS9NXFxuV2lsZGUvTVJcXG5XaWxkZXIvTVxcbldpbGVzL01cXG5XaWxleS9NXFxuV2lsZm9yZC9NXFxuV2lsZnJlZC9NXFxuV2lsZnJlZG8vTVxcbldpbGhlbG0vTVxcbldpbGhlbG1pbmEvTVxcbldpbGtlcnNvbi9NXFxuV2lsa2VzL01cXG5XaWxraW5zL01cXG5XaWxraW5zb24vTVxcbldpbGwvTVxcbldpbGxhL01cXG5XaWxsYW1ldHRlL01cXG5XaWxsYXJkL01cXG5XaWxsZW1zdGFkL01cXG5XaWxsaWFtL1NNXFxuV2lsbGlhbXMvTVxcbldpbGxpYW1zYnVyZy9NXFxuV2lsbGlhbXNvbi9NXFxuV2lsbGlhbXNwb3J0L01cXG5XaWxsaWUvTVxcbldpbGxpcy9NXFxuV2lsbHkvTVxcbldpbG1hL01cXG5XaWxtZXIvTVxcbldpbG1pbmd0b24vTVxcbldpbHNvbi9NXFxuV2lsc29uaWFuL01cXG5XaWx0b24vTVxcbldpbWJsZWRvbi9NXFxuV2ltc2V5L01cXG5XaW5jaGVsbC9NXFxuV2luY2hlc3Rlci9NU1xcbldpbmRicmVha2VyL01cXG5XaW5kZXgvTVxcbldpbmRob2VrL01cXG5XaW5kb3dzL01cXG5XaW5kc29yL1NNXFxuV2luZHdhcmQvTVxcbldpbmVzYXAvTVxcbldpbmZyZWQvTVxcbldpbmZyZXkvTVxcbldpbmlmcmVkL01cXG5XaW5rbGUvTVxcbldpbm5lYmFnby9NXFxuV2lubmllL01cXG5XaW5uaXBlZy9NXFxuV2luc3Rvbi9NXFxuV2ludGVycy9NXFxuV2ludGhyb3AvTVxcbldpc1xcbldpc2NcXG5XaXNjb25zaW4vTVxcbldpc2NvbnNpbml0ZS9NU1xcbldpc2UvTVxcbldpdHQvTVxcbldpdHRnZW5zdGVpbi9NXFxuV2l0d2F0ZXJzcmFuZC9NXFxuV20vTVxcbldvYmVnb24vTVxcbldvZGVob3VzZS9NXFxuV29sZi9NXFxuV29sZmUvTVxcbldvbGZmL01cXG5Xb2xmZ2FuZy9NXFxuV29sbG9uZ29uZy9NXFxuV29sbHN0b25lY3JhZnQvTVxcbldvbHNleS9NXFxuV29sdmVyaGFtcHRvblxcbldvbmRlci9NXFxuV29uZGVyYnJhL01cXG5Xb25nL01cXG5Xb29kL1NNXFxuV29vZGFyZC9NXFxuV29vZGh1bGwvTVxcbldvb2RsYW5kL01cXG5Xb29kcm93L01cXG5Xb29kcy9NXFxuV29vZHN0b2NrL01cXG5Xb29kd2FyZC9NXFxuV29vbGYvTVxcbldvb2xpdGUvTVxcbldvb2xvbmdvbmcvTVxcbldvb2x3b3J0aC9NXFxuV29vc3Rlci9NXFxuV29vdGVuL01cXG5Xb3JjZXN0ZXIvU01cXG5Xb3JjZXN0ZXJzaGlyZS9NXFxuV29yZFByZXNzL01cXG5Xb3Jkc3dvcnRoL01cXG5Xb3JrbWFuL01cXG5Xb3Jtcy9NXFxuV290YW4vTVxcbldvdm9rYS9NXFxuV296bmlhay9NXFxuV296emVjay9NXFxuV3JhbmdlbGwvTVxcbldyZW4vTVxcbldyaWdodC9NXFxuV3JpZ2xleS9NXFxuV3JvY2xhdy9NXFxuV3UvTVxcbld1aGFuL01cXG5XdXJsaXR6ZXIvTVxcbld5YXR0L01cXG5XeWNoZXJsZXkvTVxcbld5Y2xpZmZlL01cXG5XeWV0aC9NXFxuV3lsaWUvTVxcbld5bm4vTVxcbld5b1xcbld5b21pbmcvTVxcbld5b21pbmdpdGUvU01cXG5YL01cXG5YRW1hY3MvTVxcblhML01cXG5YTUxcXG5YU1xcblhYTFxcblhhbWFyaW4vTVxcblhhbmFkdS9NXFxuWGFudGhpcHBlL01cXG5YYXZpZXIvTVxcblhlL1NNXFxuWGVuYWtpcy9NXFxuWGVuaWEvTVxcblhlbm9waG9uL01cXG5YZXJveC9NU1xcblhlcnhlcy9NXFxuWGhvc2EvTVxcblhpJ2FuL01cXG5YaWFuL1NNXFxuWGlhb3BpbmcvTVxcblhpbWVuZXMvTVxcblhpbmd1L01cXG5YaW5qaWFuZy9NXFxuWGlvbmdudS9NXFxuWGl6YW5nL01cXG5YbWFzL01TXFxuWG9jaGlwaWxsaS9NXFxuWHV6aG91L01cXG5ZL01cXG5ZTUNBL01cXG5ZTUhBXFxuWU1NVlxcbllUXFxuWVdDQS9NXFxuWVdIQVxcbllhY2MvTVxcbllhaG9vL01cXG5ZYWh0emVlL01cXG5ZYWh3ZWgvTVxcbllha2ltYS9NXFxuWWFrdXQvTVxcbllha3V0c2svTVxcbllhbGUvTVxcbllhbG93L01cXG5ZYWx0YS9NXFxuWWFsdS9NXFxuWWFtYWdhdGEvTVxcbllhbWFoYS9NXFxuWWFtb3Vzc291a3JvL01cXG5ZYW5nL01cXG5ZYW5nb24vTVxcbllhbmd0emUvTVxcbllhbmsvU01cXG5ZYW5rZWUvU01cXG5ZYW9iYW5nL01cXG5ZYW91bmRlL01cXG5ZYXF1aS9NXFxuWWFyZW5cXG5ZYXJvc2xhdmwvTVxcbllhdGFyby9NXFxuWWF0ZXMvTVxcbllhdWNvL01cXG5ZYi9NXFxuWWVhZ2VyL01cXG5ZZWF0cy9NXFxuWWVrYXRlcmluYnVyZy9NXFxuWWVsbG93a25pZmUvTVxcblllbGxvd3N0b25lL01cXG5ZZWx0c2luL01cXG5ZZW1lbi9NXFxuWWVtZW5pL1NNXFxuWWVtZW5pdGVcXG5ZZW5pc2VpL01cXG5ZZXJldmFuL01cXG5ZZXJrZXMvTVxcblllc2VuaWEvTVxcbllldnR1c2hlbmtvL01cXG5ZZ2dkcmFzaWwvTVxcbllpZGRpc2gvTVxcblltaXIvTVxcbllvZGEvTVxcbllva25hcGF0YXdwaGEvTVxcbllva28vTVxcbllva29oYW1hL01cXG5Zb2xhbmRhL01cXG5Zb25nL01cXG5Zb25rZXJzL01cXG5Zb3JrL01cXG5Zb3JraWUvTVxcbllvcmtzaGlyZS9NU1xcbllvcmt0b3duL01cXG5Zb3J1YmEvTVxcbllvc2VtaXRlL01cXG5Zb3NzYXJpYW4vTVxcbllvdVR1YmUvTVxcbllvdW5nL01cXG5Zb3VuZ3N0b3duL01cXG5ZcHJlcy9NXFxuWXBzaWxhbnRpL01cXG5ZdWFuL01cXG5ZdWNhdGFuL01cXG5ZdWdvL01cXG5ZdWdvc2xhdi9NU1xcbll1Z29zbGF2aWEvTVxcbll1Z29zbGF2aWFuL1NNXFxuWXVrb24vTVxcbll1bGUvU01cXG5ZdWxldGlkZS9NU1xcbll1bWEvU01cXG5ZdW5uYW4vTVxcbll1cmkvTVxcbll2ZXMvTVxcbll2ZXR0ZS9NXFxuWXZvbm5lL01cXG5aL1NNTlhUXFxuWmFjaGFyaWFoL01cXG5aYWNoYXJ5L01cXG5aYWNoZXJ5L01cXG5aYWdyZWIvTVxcblphaXJlL01cXG5aYWlyaWFuXFxuWmFtYmV6aS9NXFxuWmFtYmlhL01cXG5aYW1iaWFuL1NNXFxuWmFtYm9uaS9NXFxuWmFtZW5ob2YvTVxcblphbW9yYS9NXFxuWmFuZS9NXFxuWmFudWNrL01cXG5aYW56aWJhci9NXFxuWmFwYXRhL01cXG5aYXBvcm96aHllL01cXG5aYXBvdGVjL01cXG5aYXBwYS9NXFxuWmFyYS9NXFxuWmFyYXRodXN0cmEvTVxcblplYWxhbmQvTVxcblplYmVkZWUvTVxcblplY2hhcmlhaC9NXFxuWmVkZWtpYWgvTVxcblplZG9uZy9NXFxuWmVmZmlyZWxsaS9NXFxuWmVrZS9NXFxuWmVsaWcvTVxcblplbG1hL01cXG5aZW4vTVxcblplbmdlci9NXFxuWmVuby9NXFxuWmVwaGFuaWFoL01cXG5aZXBoeXJoaWxscy9NXFxuWmVwaHlydXMvTVxcblplc3QvTVxcblpldXMvTVxcblpoZGFub3ZcXG5aaGVqaWFuZy9NXFxuWmhlbmd6aG91L01cXG5aaGl2YWdvL01cXG5aaHVrb3YvTVxcblppYm8vTVxcblppZWdmZWxkL01cXG5aaWVnbGVyL01cXG5aaWdneS9NXFxuWmlrYVxcblppbWJhYndlL01cXG5aaW1iYWJ3ZWFuL1NNXFxuWmltbWVybWFuL01cXG5aaW5mYW5kZWwvTVxcblppb24vU01cXG5aaW9uaXNtL1NNXFxuWmlvbmlzdC9TTVxcblppcGxvYy9NXFxuWm4vTVxcblpvZS9NXFxuWm9sYS9NXFxuWm9sbHZlcmVpbi9NXFxuWm9sb2Z0L01cXG5ab21iYS9NXFxuWm9ybi9NXFxuWm9yb2FzdGVyL01cXG5ab3JvYXN0cmlhbi9NU1xcblpvcm9hc3RyaWFuaXNtL1NNXFxuWm9ycm8vTVxcblpvc21hL01cXG5aci9NXFxuWnNpZ21vbmR5L01cXG5adWJlbmVsZ2VudWJpL01cXG5adWJlbmVzY2hhbWFsaS9NXFxuWnVrb3IvTVxcblp1bHUvU01cXG5adWx1bGFuZFxcblp1bmkvTVxcblp1cmljaC9NXFxuWndpbmdsaS9NXFxuWndvcnlraW4vTVxcblp5cnRlYy9NXFxuWnl1Z2Fub3YvTVxcblp6elxcbmEvU1xcbmFhaFxcbmFhcmR2YXJrL1NNXFxuYWIvU0RZXFxuYWJhY2tcXG5hYmFjdXMvTVNcXG5hYmFmdFxcbmFiYWxvbmUvU01cXG5hYmFuZG9uL0xTREdcXG5hYmFuZG9ubWVudC9NXFxuYWJhc2UvTEdEU1xcbmFiYXNlbWVudC9NXFxuYWJhc2gvR0xEU1xcbmFiYXNoZWQvVVlcXG5hYmFzaG1lbnQvTVxcbmFiYXRlL0xHRFNcXG5hYmF0ZWQvVVxcbmFiYXRlbWVudC9NXFxuYWJhdHRvaXIvTVNcXG5hYmJlL1NNXFxuYWJiZXNzL01TXFxuYWJiZXkvTVNcXG5hYmJvdC9NU1xcbmFiYnJcXG5hYmJyZXYvU1xcbmFiYnJldmlhdGUvRFNHTlhcXG5hYmJyZXZpYXRpb24vTVxcbmFiZGljYXRlL0dORFNYXFxuYWJkaWNhdGlvbi9NXFxuYWJkb21lbi9TTVxcbmFiZG9taW5hbFxcbmFiZHVjdC9EU0dcXG5hYmR1Y3RlZS9NU1xcbmFiZHVjdGlvbi9TTVxcbmFiZHVjdG9yL01TXFxuYWJlYW1cXG5hYmVycmFudFxcbmFiZXJyYXRpb24vTVNcXG5hYmVycmF0aW9uYWxcXG5hYmV0L1NcXG5hYmV0dGVkXFxuYWJldHRpbmdcXG5hYmV0dG9yL1NNXFxuYWJleWFuY2UvTVxcbmFiaG9yL1NcXG5hYmhvcnJlZFxcbmFiaG9ycmVuY2UvTVxcbmFiaG9ycmVudC9ZXFxuYWJob3JyaW5nXFxuYWJpZGFuY2UvTVxcbmFiaWRlL0dTXFxuYWJpZGluZy9ZXFxuYWJpbGl0eS9JRU1TXFxuYWJqZWN0L1lQXFxuYWJqZWN0aW9uL01cXG5hYmplY3RuZXNzL01cXG5hYmp1cmF0aW9uL1NNXFxuYWJqdXJhdG9yeVxcbmFianVyZS9aR0RSU1xcbmFianVyZXIvTVxcbmFibGF0ZS9YR05WRFNcXG5hYmxhdGlvbi9NXFxuYWJsYXRpdmUvTVNcXG5hYmxhemVcXG5hYmxlL1VUXFxuYWJsZXJcXG5hYmxvb21cXG5hYmx1dGlvbi9TTVxcbmFibmVnYXRlL0dORFNcXG5hYm5lZ2F0aW9uL01cXG5hYm5vcm1hbC9ZXFxuYWJub3JtYWxpdHkvU01cXG5hYm9hcmRcXG5hYm9kZS9NU1xcbmFib2xpc2gvR0RTXFxuYWJvbGl0aW9uL01cXG5hYm9saXRpb25pc20vTVxcbmFib2xpdGlvbmlzdC9TTVxcbmFib21pbmFibGVcXG5hYm9taW5hYmx5XFxuYWJvbWluYXRlL0RTR05YXFxuYWJvbWluYXRpb24vTVxcbmFib3JpZ2luYWwvTVNcXG5hYm9yaWdpbmUvU01cXG5hYm9ybmluZ1xcbmFib3J0L0dWRFNcXG5hYm9ydGlvbi9NU1xcbmFib3J0aW9uaXN0L01TXFxuYWJvcnRpdmUvWVxcbmFib3VuZC9EU0dcXG5hYm91dFxcbmFib3ZlL01cXG5hYm92ZWJvYXJkXFxuYWJyYWNhZGFicmEvTVxcbmFicmFkZS9HRFNcXG5hYnJhc2lvbi9NU1xcbmFicmFzaXZlL01ZUFNcXG5hYnJhc2l2ZW5lc3MvTVxcbmFicmVhc3RcXG5hYnJpZGdlL0RTR1xcbmFicmlkZ21lbnQvTVNcXG5hYnJvYWRcXG5hYnJvZ2F0ZS9YR05EU1xcbmFicm9nYXRpb24vTVxcbmFicm9nYXRvci9NU1xcbmFicnVwdC9UUFJZXFxuYWJydXB0bmVzcy9NXFxuYWJzL01cXG5hYnNjZXNzL01EU0dcXG5hYnNjaXNzYS9TTVxcbmFic2Npc3Npb24vTVxcbmFic2NvbmQvWkdTRFJcXG5hYnNjb25kZXIvTVxcbmFic2VpbC9NRFNHXFxuYWJzZW5jZS9TTVxcbmFic2VudC9EWVNHXFxuYWJzZW50ZWUvTVNcXG5hYnNlbnRlZWlzbS9NXFxuYWJzZW50bWluZGVkL1lQXFxuYWJzZW50bWluZGVkbmVzcy9NXFxuYWJzaW50aGUvTVxcbmFic29sdXRlL1BNWVROU1xcbmFic29sdXRlbmVzcy9NXFxuYWJzb2x1dGlvbi9NXFxuYWJzb2x1dGlzbS9NXFxuYWJzb2x1dGlzdC9NU1xcbmFic29sdmUvRFNHXFxuYWJzb3JiL0FHRFNcXG5hYnNvcmJhbmNlXFxuYWJzb3JiZW5jeS9NXFxuYWJzb3JiZW50L1NNXFxuYWJzb3JiaW5nL1lcXG5hYnNvcnB0aW9uL01cXG5hYnNvcnB0aXZlXFxuYWJzdGFpbi9EUlpHU1xcbmFic3RhaW5lci9NXFxuYWJzdGVtaW91cy9QWVxcbmFic3RlbWlvdXNuZXNzL01cXG5hYnN0ZW50aW9uL01TXFxuYWJzdGluZW5jZS9NXFxuYWJzdGluZW50XFxuYWJzdHJhY3QvR1NQTURZXFxuYWJzdHJhY3RlZC9ZUFxcbmFic3RyYWN0ZWRuZXNzL01cXG5hYnN0cmFjdGlvbi9TTVxcbmFic3RyYWN0bmVzcy9NU1xcbmFic3RydXNlL1lQXFxuYWJzdHJ1c2VuZXNzL01cXG5hYnN1cmQvVFBSWVxcbmFic3VyZGlzdC9NU1xcbmFic3VyZGl0eS9TTVxcbmFic3VyZG5lc3MvTVxcbmFidW5kYW5jZS9TTVxcbmFidW5kYW50L1lcXG5hYnVzZSdzXFxuYWJ1c2UvRUdWRFNcXG5hYnVzZXIvTVNcXG5hYnVzaXZlL1lQXFxuYWJ1c2l2ZW5lc3MvTVxcbmFidXQvU0xcXG5hYnV0bWVudC9NU1xcbmFidXR0ZWRcXG5hYnV0dGluZ1xcbmFidXp6XFxuYWJ5c21hbC9ZXFxuYWJ5c3MvTVNcXG5hYnlzc2FsXFxuYWNcXG5hY2FjaWEvTVNcXG5hY2FkZW1lL01cXG5hY2FkZW1pYS9NXFxuYWNhZGVtaWMvU01cXG5hY2FkZW1pY2FsL1lcXG5hY2FkZW1pY2lhbi9NU1xcbmFjYWRlbXkvU01cXG5hY2FudGh1cy9NU1xcbmFjY2VkZS9HRFNcXG5hY2NlbGVyYXRlL0dOWERTXFxuYWNjZWxlcmF0aW9uL01cXG5hY2NlbGVyYXRvci9TTVxcbmFjY2VudC9NRFNHXFxuYWNjZW50ZWQvVVxcbmFjY2VudHVhbFxcbmFjY2VudHVhdGUvR05EU1xcbmFjY2VudHVhdGlvbi9NXFxuYWNjZXB0L0RTQkdcXG5hY2NlcHRhYmlsaXR5L01cXG5hY2NlcHRhYmxlbmVzcy9NXFxuYWNjZXB0YWJseS9VXFxuYWNjZXB0YW5jZS9TTVxcbmFjY2VwdGF0aW9uL01TXFxuYWNjZXB0ZWQvVVxcbmFjY2Vzcy9NRFNHXFxuYWNjZXNzaWJpbGl0eS9JTVxcbmFjY2Vzc2libGUvSVxcbmFjY2Vzc2libHkvSVxcbmFjY2Vzc2lvbi9NREdTXFxuYWNjZXNzb3JpemUvRFNHXFxuYWNjZXNzb3J5L1NNXFxuYWNjaWRlbnQvTVNcXG5hY2NpZGVudGFsL1NNWVxcbmFjY2xhaW0vTURHU1xcbmFjY2xhbWF0aW9uL01cXG5hY2NsaW1hdGUvRFNHTlxcbmFjY2xpbWF0aW9uL01cXG5hY2NsaW1hdGl6YXRpb24vTVxcbmFjY2xpbWF0aXplL0RTR1xcbmFjY2xpdml0eS9TTVxcbmFjY29sYWRlL1NNXFxuYWNjb21tb2RhdGUvWEdORFNcXG5hY2NvbW1vZGF0aW5nL1lcXG5hY2NvbW1vZGF0aW9uL01cXG5hY2NvbXBhbmllZC9VXFxuYWNjb21wYW5pbWVudC9NU1xcbmFjY29tcGFuaXN0L1NNXFxuYWNjb21wYW55L0RTR1xcbmFjY29tcGxpY2UvU01cXG5hY2NvbXBsaXNoL0RTTEdcXG5hY2NvbXBsaXNoZWQvVVxcbmFjY29tcGxpc2htZW50L01TXFxuYWNjb3JkL0dNRFNcXG5hY2NvcmRhbmNlL01cXG5hY2NvcmRhbnRcXG5hY2NvcmRpbmcvWVxcbmFjY29yZGlvbi9NU1xcbmFjY29yZGlvbmlzdC9NU1xcbmFjY29zdC9HTURTXFxuYWNjb3VudC9NRFNCR1xcbmFjY291bnRhYmlsaXR5L01cXG5hY2NvdW50YWJsZS9VXFxuYWNjb3VudGFuY3kvTVxcbmFjY291bnRhbnQvTVNcXG5hY2NvdW50ZWQvVVxcbmFjY291bnRpbmcvTVxcbmFjY291dGVyL1NHRFxcbmFjY291dGVybWVudHMvTVxcbmFjY3JlZGl0L1NHRFxcbmFjY3JlZGl0YXRpb24vTVxcbmFjY3JlZGl0ZWQvVVxcbmFjY3JldGlvbi9NU1xcbmFjY3J1YWwvTVNcXG5hY2NydWUvR0RTXFxuYWNjdFxcbmFjY3VsdHVyYXRlL0RTR05cXG5hY2N1bHR1cmF0aW9uL01cXG5hY2N1bXVsYXRlL1hHTlZEU1xcbmFjY3VtdWxhdGlvbi9NXFxuYWNjdW11bGF0b3IvTVNcXG5hY2N1cmFjeS9JTVxcbmFjY3VyYXRlL0lZXFxuYWNjdXJhdGVuZXNzL01cXG5hY2N1cnNlZC9QXFxuYWNjdXJzZWRuZXNzL01cXG5hY2N1c2F0aW9uL01TXFxuYWNjdXNhdGl2ZS9NU1xcbmFjY3VzYXRvcnlcXG5hY2N1c2UvWkdEUlNcXG5hY2N1c2VyL01cXG5hY2N1c2luZy9ZXFxuYWNjdXN0b20vRFNHXFxuYWNjdXN0b21lZC9VXFxuYWNlL0RTTUdcXG5hY2VyYmF0ZS9EU0dcXG5hY2VyYmljXFxuYWNlcmJpY2FsbHlcXG5hY2VyYml0eS9NXFxuYWNldGFtaW5vcGhlbi9NXFxuYWNldGF0ZS9NU1xcbmFjZXRpY1xcbmFjZXRvbmUvTVxcbmFjZXRvbmljXFxuYWNldHlsXFxuYWNldHlsZW5lL01cXG5hY2hlL0RTTUdcXG5hY2hlbmUvTVNcXG5hY2hpZXZhYmxlL1VcXG5hY2hpZXZlL0JMWkdEUlNcXG5hY2hpZXZlbWVudC9TTVxcbmFjaGlldmVyL01cXG5hY2hpbmcvWVxcbmFjaG9vL01cXG5hY2hyb21hdGljXFxuYWNoeS9UUlxcbmFjaWQvU01ZXFxuYWNpZGljXFxuYWNpZGlmeS9HRFNcXG5hY2lkaXR5L01cXG5hY2lkb3Npcy9NXFxuYWNpZHVsb3VzXFxuYWNrbm93bGVkZ2UvRFNHXFxuYWNrbm93bGVkZ2VkL1VcXG5hY2tub3dsZWRnbWVudC9TTVxcbmFjbWUvU01cXG5hY25lL01cXG5hY29seXRlL01TXFxuYWNvbml0ZS9NU1xcbmFjb3JuL01TXFxuYWNvdXN0aWMvU1xcbmFjb3VzdGljYWwvWVxcbmFjb3VzdGljcy9NXFxuYWNxdWFpbnQvQUdTRFxcbmFjcXVhaW50YW5jZS9TTVxcbmFjcXVhaW50YW5jZXNoaXAvTVxcbmFjcXVhaW50ZWQvVVxcbmFjcXVpZXNjZS9EU0dcXG5hY3F1aWVzY2VuY2UvTVxcbmFjcXVpZXNjZW50L1lcXG5hY3F1aXJlL1pHQkRSU0xcXG5hY3F1aXJlbWVudC9NXFxuYWNxdWlzaXRpb24vTVNcXG5hY3F1aXNpdGl2ZS9ZUFxcbmFjcXVpc2l0aXZlbmVzcy9NXFxuYWNxdWl0L1NcXG5hY3F1aXR0YWwvTVNcXG5hY3F1aXR0ZWRcXG5hY3F1aXR0aW5nXFxuYWNyZS9TTVxcbmFjcmVhZ2UvTVNcXG5hY3JpZC9QVFJZXFxuYWNyaWRpdHkvTVxcbmFjcmlkbmVzcy9NXFxuYWNyaW1vbmlvdXMvWVBcXG5hY3JpbW9uaW91c25lc3MvTVxcbmFjcmltb255L01cXG5hY3JvYmF0L01TXFxuYWNyb2JhdGljL1NcXG5hY3JvYmF0aWNhbGx5XFxuYWNyb2JhdGljcy9NXFxuYWNyb255bS9NU1xcbmFjcm9waG9iaWEvTVxcbmFjcm9wb2xpcy9NU1xcbmFjcm9zc1xcbmFjcm9zdGljL1NNXFxuYWNyeWxhbWlkZVxcbmFjcnlsaWMvTVNcXG5hY3Qnc1xcbmFjdC9BU0RHVlxcbmFjdGluZy9NXFxuYWN0aW5pdW0vTVxcbmFjdGlvbi9BU01cXG5hY3Rpb25hYmxlXFxuYWN0aXZhdGUvSUNBTkdTRFxcbmFjdGl2YXRpb24vSUNBTVxcbmFjdGl2YXRvci9NU1xcbmFjdGl2ZSdzXFxuYWN0aXZlL0lLWVxcbmFjdGl2ZW5lc3MvTVxcbmFjdGl2ZXNcXG5hY3RpdmlzbS9NXFxuYWN0aXZpc3QvTVNcXG5hY3Rpdml0aWVzXFxuYWN0aXZpdHkvSU1cXG5hY3Rvci9BTVNcXG5hY3RyZXNzL01TXFxuYWN0dWFsL1lcXG5hY3R1YWxpdHkvU01cXG5hY3R1YWxpemF0aW9uL01cXG5hY3R1YWxpemUvR0RTXFxuYWN0dWFyaWFsXFxuYWN0dWFyeS9TTVxcbmFjdHVhdGUvR05EU1xcbmFjdHVhdGlvbi9NXFxuYWN0dWF0b3IvU01cXG5hY3VpdHkvTVxcbmFjdW1lbi9NXFxuYWN1cHJlc3N1cmUvTVxcbmFjdXB1bmN0dXJlL01cXG5hY3VwdW5jdHVyaXN0L1NNXFxuYWN1dGUvUE1ZVFJTXFxuYWN1dGVuZXNzL01cXG5hY3ljbG92aXIvTVxcbmFjeWxcXG5hZC9TTVxcbmFkYWdlL01TXFxuYWRhZ2lvL01TXFxuYWRhbWFudC9NWVxcbmFkYXB0L0JaR1ZEUlNcXG5hZGFwdGFiaWxpdHkvTVxcbmFkYXB0YXRpb24vTVNcXG5hZGFwdGVyL01cXG5hZGFwdGlvbi9TXFxuYWRkL1NEUkJaR1xcbmFkZGVuZC9NU1xcbmFkZGVuZGFcXG5hZGRlbmR1bS9NXFxuYWRkZXIvTVxcbmFkZGljdC9HVk1EU1xcbmFkZGljdGlvbi9TTVxcbmFkZGl0aW9uL1NNXFxuYWRkaXRpb25hbC9ZXFxuYWRkaXRpdmUvU01cXG5hZGRsZS9HRFNcXG5hZGRyZXNzJ3NcXG5hZGRyZXNzL0FHRFNcXG5hZGRyZXNzYWJsZVxcbmFkZHJlc3NlZC9VXFxuYWRkcmVzc2VlL1NNXFxuYWRkdWNlL0dEU1xcbmFkZW5pbmUvTVxcbmFkZW5vY2FyY2lub21hXFxuYWRlbm9pZC9TTVxcbmFkZW5vaWRhbFxcbmFkZXB0L01ZUFNcXG5hZGVwdG5lc3MvTVxcbmFkZXF1YWN5L0lNXFxuYWRlcXVhdGUvSVlcXG5hZGVxdWF0ZW5lc3MvTVxcbmFkaGVyZS9HRFNcXG5hZGhlcmVuY2UvTVxcbmFkaGVyZW50L1NNXFxuYWRoZXNpb24vTVxcbmFkaGVzaXZlL1BTTVxcbmFkaGVzaXZlbmVzcy9NXFxuYWRpYWJhdGljXFxuYWRpZXUvTVNcXG5hZGlvc1xcbmFkaXBvc2VcXG5hZGpcXG5hZGphY2VuY3kvTVxcbmFkamFjZW50L1lcXG5hZGplY3RpdmFsL1lcXG5hZGplY3RpdmUvTVNcXG5hZGpvaW4vR0RTXFxuYWRqb3Vybi9ER0xTXFxuYWRqb3Vybm1lbnQvU01cXG5hZGp1ZGdlL0dEU1xcbmFkanVkaWNhdGUvR05WWERTXFxuYWRqdWRpY2F0aW9uL01cXG5hZGp1ZGljYXRvci9TTVxcbmFkanVkaWNhdG9yeVxcbmFkanVuY3QvTVNcXG5hZGp1cmF0aW9uL01TXFxuYWRqdXJlL0dEU1xcbmFkanVzdC9BR0RTTFxcbmFkanVzdGFibGVcXG5hZGp1c3Rlci9TTVxcbmFkanVzdG1lbnQvQU1TXFxuYWRqdXRhbnQvU01cXG5hZG1hbi9NXFxuYWRtZW5cXG5hZG1pbi9TXFxuYWRtaW5pc3Rlci9ER1NcXG5hZG1pbmlzdHJhdGUvWERTR05WXFxuYWRtaW5pc3RyYXRpb24vTVxcbmFkbWluaXN0cmF0aXZlL1lcXG5hZG1pbmlzdHJhdG9yL01TXFxuYWRtaXJhYmx5XFxuYWRtaXJhbC9NU1xcbmFkbWlyYWx0eS9NXFxuYWRtaXJhdGlvbi9NXFxuYWRtaXJlL0JaR0RSU1xcbmFkbWlyZXIvTVxcbmFkbWlyaW5nL1lcXG5hZG1pc3NpYmlsaXR5L0lNXFxuYWRtaXNzaWJsZS9JXFxuYWRtaXNzaWJseVxcbmFkbWlzc2lvbi9BTVxcbmFkbWlzc2lvbnNcXG5hZG1pdC9BU1xcbmFkbWl0dGFuY2UvTVxcbmFkbWl0dGVkL1lcXG5hZG1pdHRpbmcvQVxcbmFkbWl4L0dEU1xcbmFkbWl4dHVyZS9TTVxcbmFkbW9uaXNoL0xEU0dcXG5hZG1vbmlzaG1lbnQvTVNcXG5hZG1vbml0aW9uL01TXFxuYWRtb25pdG9yeVxcbmFkby9NXFxuYWRvYmUvTVNcXG5hZG9sZXNjZW5jZS9TTVxcbmFkb2xlc2NlbnQvU01cXG5hZG9wdC9BR1ZEU1xcbmFkb3B0YWJsZVxcbmFkb3B0ZXIvTVNcXG5hZG9wdGlvbi9TTVxcbmFkb3JhYmxlbmVzcy9NXFxuYWRvcmFibHlcXG5hZG9yYXRpb24vTVxcbmFkb3JlL0JaR0RSU1xcbmFkb3Jlci9NXFxuYWRvcmluZy9ZXFxuYWRvcm4vTEdEU1xcbmFkb3JuZWQvVVxcbmFkb3JubWVudC9NU1xcbmFkcmVuYWwvTVNcXG5hZHJlbmFsaW4nc1xcbmFkcmVuYWxpbmUvTVxcbmFkcmVuZXJnaWNcXG5hZHJpZnRcXG5hZHJvaXQvUFlcXG5hZHJvaXRuZXNzL01cXG5hZHNvcmIvU0RHXFxuYWRzb3JiZW50L01TXFxuYWRzb3JwdGlvbi9TTVxcbmFkdWxhdGUvRFNHTlxcbmFkdWxhdGlvbi9NXFxuYWR1bGF0b3IvTVNcXG5hZHVsYXRvcnlcXG5hZHVsdC9NU1xcbmFkdWx0ZXJhbnQvTVNcXG5hZHVsdGVyYXRlL0dORFNcXG5hZHVsdGVyYXRlZC9VXFxuYWR1bHRlcmF0aW9uL01cXG5hZHVsdGVyZXIvU01cXG5hZHVsdGVyZXNzL01TXFxuYWR1bHRlcm91c1xcbmFkdWx0ZXJ5L1NNXFxuYWR1bHRob29kL01cXG5hZHVtYnJhdGUvR05EU1xcbmFkdW1icmF0aW9uL01cXG5hZHZcXG5hZHZhbmNlL0xEU01HXFxuYWR2YW5jZW1lbnQvU01cXG5hZHZhbnRhZ2UvRURTTUdcXG5hZHZhbnRhZ2VvdXMvRVlcXG5hZHZlbnQvU01cXG5hZHZlbnRpdGlvdXMvWVxcbmFkdmVudHVyZS9EUlNNWkdcXG5hZHZlbnR1cmVyL01cXG5hZHZlbnR1cmVzb21lXFxuYWR2ZW50dXJlc3MvTVNcXG5hZHZlbnR1cmlzbVxcbmFkdmVudHVyaXN0L1NcXG5hZHZlbnR1cm91cy9ZUFxcbmFkdmVudHVyb3VzbmVzcy9NXFxuYWR2ZXJiL1NNXFxuYWR2ZXJiaWFsL1NNWVxcbmFkdmVyc2FyaWFsXFxuYWR2ZXJzYXJ5L1NNXFxuYWR2ZXJzZS9QUllUXFxuYWR2ZXJzZW5lc3MvTVxcbmFkdmVyc2l0eS9TTVxcbmFkdmVydC9TTURHXFxuYWR2ZXJ0aXNlL0xaR0RSU1xcbmFkdmVydGlzZWQvVVxcbmFkdmVydGlzZW1lbnQvTVNcXG5hZHZlcnRpc2VyL01cXG5hZHZlcnRpc2luZy9NXFxuYWR2ZXJ0b3JpYWwvU01cXG5hZHZpY2UvTVxcbmFkdmlzYWJpbGl0eS9JTVxcbmFkdmlzYWJsZS9JXFxuYWR2aXNhYmx5XFxuYWR2aXNlL0xEUlNaR0JcXG5hZHZpc2VkL1VZXFxuYWR2aXNlbWVudC9NXFxuYWR2aXNlci9NXFxuYWR2aXNvci9TTVxcbmFkdmlzb3J5L1NNXFxuYWR2b2NhY3kvTVxcbmFkdm9jYXRlL01HRFNcXG5hZHZ0XFxuYWR3YXJlXFxuYWR6ZS9TTVxcbmFlZ2lzL01cXG5hZXJhdGUvRFNHTlxcbmFlcmF0aW9uL01cXG5hZXJhdG9yL1NNXFxuYWVyaWFsL1NNWVxcbmFlcmlhbGlzdC9NU1xcbmFlcmllL01TXFxuYWVyb2JhdGljL1NcXG5hZXJvYmF0aWNzL01cXG5hZXJvYmljL1NcXG5hZXJvYmljYWxseVxcbmFlcm9iaWNzL01cXG5hZXJvZHJvbWUvTVNcXG5hZXJvZHluYW1pYy9TXFxuYWVyb2R5bmFtaWNhbGx5XFxuYWVyb2R5bmFtaWNzL01cXG5hZXJvZ3JhbS9TXFxuYWVyb25hdXRpYy9TXFxuYWVyb25hdXRpY2FsXFxuYWVyb25hdXRpY3MvTVxcbmFlcm9zb2wvTVNcXG5hZXJvc3BhY2UvTVxcbmFlcnlcXG5hZXN0aGV0ZS9NU1xcbmFlc3RoZXRpYy9TXFxuYWVzdGhldGljYWxseVxcbmFlc3RoZXRpY2lzbS9NXFxuYWVzdGhldGljcy9NXFxuYWZhclxcbmFmZmFiaWxpdHkvTVxcbmFmZmFibGVcXG5hZmZhYmx5XFxuYWZmYWlyL01TXFxuYWZmZWN0J3NcXG5hZmZlY3QvRUdEU1xcbmFmZmVjdGF0aW9uL1NNXFxuYWZmZWN0ZWQvVVlcXG5hZmZlY3RpbmcvWVxcbmFmZmVjdGlvbi9FTVxcbmFmZmVjdGlvbmF0ZS9ZXFxuYWZmZWN0aW9uc1xcbmFmZmVyZW50XFxuYWZmaWFuY2UvR0RTXFxuYWZmaWRhdml0L1NNXFxuYWZmaWxpYXRlJ3NcXG5hZmZpbGlhdGUvRUdORFNcXG5hZmZpbGlhdGVkL1VcXG5hZmZpbGlhdGlvbi9FTVxcbmFmZmlsaWF0aW9uc1xcbmFmZmluZVxcbmFmZmluaXR5L1NNXFxuYWZmaXJtL0FHRFNcXG5hZmZpcm1hdGlvbi9BTVNcXG5hZmZpcm1hdGl2ZS9NWVNcXG5hZmZpeC9HTURTXFxuYWZmbGF0dXMvTVxcbmFmZmxpY3QvR0RTXFxuYWZmbGljdGlvbi9TTVxcbmFmZmx1ZW5jZS9NXFxuYWZmbHVlbnQvWVxcbmFmZm9yZC9HRFNCXFxuYWZmb3JkYWJpbGl0eVxcbmFmZm9yZGFibHlcXG5hZmZvcmVzdC9FR1NEXFxuYWZmb3Jlc3RhdGlvbi9NXFxuYWZmcmF5L01TXFxuYWZmcm9udC9HTURTXFxuYWZnaGFuL01TXFxuYWZpY2lvbmFkby9NU1xcbmFmaWVsZFxcbmFmaXJlXFxuYWZsYW1lXFxuYWZsb2F0XFxuYWZsdXR0ZXJcXG5hZm9vdFxcbmFmb3JlbWVudGlvbmVkXFxuYWZvcmVzYWlkXFxuYWZvcmV0aG91Z2h0XFxuYWZvdWxcXG5hZnJhaWQvVVxcbmFmcmVzaFxcbmFmdC9SWlxcbmFmdGVyYmlydGgvTVxcbmFmdGVyYmlydGhzXFxuYWZ0ZXJidXJuZXIvTVNcXG5hZnRlcmNhcmUvTVxcbmFmdGVyZWZmZWN0L01TXFxuYWZ0ZXJnbG93L1NNXFxuYWZ0ZXJpbWFnZS9NU1xcbmFmdGVybGlmZS9NXFxuYWZ0ZXJsaXZlc1xcbmFmdGVybWFya2V0L01TXFxuYWZ0ZXJtYXRoL01cXG5hZnRlcm1hdGhzXFxuYWZ0ZXJub29uL01TXFxuYWZ0ZXJzaGF2ZS9TTVxcbmFmdGVyc2hvY2svU01cXG5hZnRlcnRhc3RlL1NNXFxuYWZ0ZXJ0aG91Z2h0L1NNXFxuYWZ0ZXJ3YXJkL1NcXG5hZnRlcndvcmQvTVNcXG5hZ2FpblxcbmFnYWluc3RcXG5hZ2FwZS9NXFxuYWdhci9NXFxuYWdhdGUvTVNcXG5hZ2F2ZS9NXFxuYWdlL0RTTUdKXFxuYWdlaXNtL01cXG5hZ2Vpc3QvU01cXG5hZ2VsZXNzL1lQXFxuYWdlbGVzc25lc3MvTVxcbmFnZW5jeS9TTVxcbmFnZW5kYS9TTVxcbmFnZW5lc2lzXFxuYWdlbnQvQU1TXFxuYWdlcmF0dW0vTVxcbmFnZ2xvbWVyYXRlL0RTTUdOWFxcbmFnZ2xvbWVyYXRpb24vTVxcbmFnZ2x1dGluYXRlL0RTWEdOXFxuYWdnbHV0aW5hdGlvbi9NXFxuYWdncmFuZGl6ZS9HTERTXFxuYWdncmFuZGl6ZW1lbnQvTVxcbmFnZ3JhdmF0ZS9HTlhEU1xcbmFnZ3JhdmF0aW5nL1lcXG5hZ2dyYXZhdGlvbi9NXFxuYWdncmVnYXRlL01HTkRTWFxcbmFnZ3JlZ2F0aW9uL01cXG5hZ2dyZWdhdG9yL1NNXFxuYWdncmVzc2lvbi9NXFxuYWdncmVzc2l2ZS9QWVxcbmFnZ3Jlc3NpdmVuZXNzL01cXG5hZ2dyZXNzb3IvU01cXG5hZ2dyaWV2ZS9EU0dcXG5hZ2dyb1xcbmFnaGFzdFxcbmFnaWxlL1lcXG5hZ2lsaXR5L01cXG5hZ2luZy9NXFxuYWdpdGF0ZS9YR05EU1xcbmFnaXRhdGlvbi9NXFxuYWdpdGF0b3IvTVNcXG5hZ2l0cHJvcC9NXFxuYWdsZWFtXFxuYWdsaXR0ZXJcXG5hZ2xvd1xcbmFnbm9zdGljL01TXFxuYWdub3N0aWNpc20vTVxcbmFnb1xcbmFnb2dcXG5hZ29uaXN0L1NcXG5hZ29uaXplL0dEU1xcbmFnb25pemluZy9ZXFxuYWdvbnkvU01cXG5hZ29yYXBob2JpYS9NXFxuYWdvcmFwaG9iaWMvTVNcXG5hZ3Jhcmlhbi9NU1xcbmFncmFyaWFuaXNtL01cXG5hZ3JlZS9FQkxEU1xcbmFncmVlYWJsZW5lc3MvRU1cXG5hZ3JlZWFibHkvRVxcbmFncmVlaW5nL0VcXG5hZ3JlZW1lbnQvRVNNXFxuYWdyaWJ1c2luZXNzL01TXFxuYWdyaWN1bHR1cmFsL1lcXG5hZ3JpY3VsdHVyYWxpc3QvTVNcXG5hZ3JpY3VsdHVyZS9NXFxuYWdyaWN1bHR1cmlzdC9NU1xcbmFncm9ub21pY1xcbmFncm9ub21pc3QvTVNcXG5hZ3Jvbm9teS9NXFxuYWdyb3VuZFxcbmFndWUvTVxcbmFoXFxuYWhhXFxuYWhjaG9vXFxuYWhlYWRcXG5haGVtXFxuYWhveVxcbmFpZC9TTURHXFxuYWlkZS9TTVxcbmFpZGVkL1VcXG5haWdyZXR0ZS9NU1xcbmFpbC9TRExHXFxuYWlsZXJvbi9TTVxcbmFpbG1lbnQvU01cXG5haW0vU01ER1xcbmFpbWxlc3MvWVBcXG5haW1sZXNzbmVzcy9NXFxuYWluJ3RcXG5haXIvU01ESkdcXG5haXJiYWcvTVNcXG5haXJiYXNlL1NNXFxuYWlyYmVkL1NcXG5haXJib3JuZVxcbmFpcmJydXNoL01EU0dcXG5haXJidXMvTVNcXG5haXJjcmFmdC9NXFxuYWlyY3JhZnRtYW5cXG5haXJjcmFmdG1lblxcbmFpcmNyZXcvU1xcbmFpcmRyb21lL1NcXG5haXJkcm9wL1NNXFxuYWlyZHJvcHBlZFxcbmFpcmRyb3BwaW5nXFxuYWlyZmFyZS9TTVxcbmFpcmZpZWxkL1NNXFxuYWlyZmxvdy9NXFxuYWlyZm9pbC9TTVxcbmFpcmZyZWlnaHQvTVxcbmFpcmd1bnNcXG5haXJoZWFkL1NNXFxuYWlyaWx5XFxuYWlyaW5lc3MvTVxcbmFpcmluZy9NXFxuYWlybGVzcy9QXFxuYWlybGVzc25lc3MvTVxcbmFpcmxldHRlcnNcXG5haXJsaWZ0L1NHTURcXG5haXJsaW5lL1JTTVpcXG5haXJsaW5lci9NXFxuYWlybG9jay9TTVxcbmFpcm1haWwvR1NNRFxcbmFpcm1hbi9NXFxuYWlybWVuXFxuYWlycGxhbmUvTVNcXG5haXJwbGF5L01cXG5haXJwb3J0L1NNXFxuYWlyc2hpcC9TTVxcbmFpcnNob3cvU1xcbmFpcnNpY2svUFxcbmFpcnNpY2tuZXNzL01cXG5haXJzcGFjZS9NXFxuYWlyc3BlZWRcXG5haXJzdHJpa2UvTVNcXG5haXJzdHJpcC9TTVxcbmFpcnRpZ2h0XFxuYWlydGltZS9NXFxuYWlyd2F2ZXMvTVxcbmFpcndheS9NU1xcbmFpcndvbWFuXFxuYWlyd29tZW5cXG5haXJ3b3J0aGluZXNzL01cXG5haXJ3b3J0aHkvUFxcbmFpcnkvUFRSXFxuYWlzbGUvTVNcXG5haXRjaC9NU1xcbmFqYXJcXG5ha2FcXG5ha2ltYm9cXG5ha2luXFxuYWxhYmFzdGVyL01cXG5hbGFja1xcbmFsYWNyaXR5L01cXG5hbGFybS9HTURTXFxuYWxhcm1pbmcvWVxcbmFsYXJtaXN0L1NNXFxuYWxhc1xcbmFsYi9TTVxcbmFsYmFjb3JlL1NNXFxuYWxiYXRyb3NzL01TXFxuYWxiZWl0XFxuYWxiaW5pc20vTVxcbmFsYmluby9NU1xcbmFsYnVtL01OU1xcbmFsYnVtZW4vTVxcbmFsYnVtaW4vTVxcbmFsYnVtaW5vdXNcXG5hbGNoZW1pc3QvU01cXG5hbGNoZW15L01cXG5hbGNvaG9sL1NNXFxuYWxjb2hvbGljL01TXFxuYWxjb2hvbGljYWxseVxcbmFsY29ob2xpc20vTVxcbmFsY292ZS9NU1xcbmFsZGVyL01TXFxuYWxkZXJtYW4vTVxcbmFsZGVybWVuXFxuYWxkZXJ3b21hbi9NXFxuYWxkZXJ3b21lblxcbmFsZS9TTVZcXG5hbGVhdG9yeVxcbmFsZWhvdXNlL1NNXFxuYWxlbWJpYy9TTVxcbmFsZXJ0L0dNRFlQU1xcbmFsZXJ0bmVzcy9NXFxuYWxld2lmZS9NXFxuYWxld2l2ZXNcXG5hbGZhbGZhL01cXG5hbGZyZXNjb1xcbmFsZ2EvTVxcbmFsZ2FlXFxuYWxnYWxcXG5hbGdlYnJhL1NNXFxuYWxnZWJyYWljXFxuYWxnZWJyYWljYWxseVxcbmFsZ29yaXRobS9TTVxcbmFsZ29yaXRobWljXFxuYWxpYXMvR01EU1xcbmFsaWJpL0dNRFNcXG5hbGllbi9CR01EU1xcbmFsaWVuYWJsZS9JVVxcbmFsaWVuYXRlL0RTR05cXG5hbGllbmF0aW9uL01cXG5hbGllbmlzdC9TTVxcbmFsaWdodC9HRFNcXG5hbGlnbi9BTEdEU1xcbmFsaWduZWQvVVxcbmFsaWduZXIvTVNcXG5hbGlnbm1lbnQvQU1TXFxuYWxpa2UvVVxcbmFsaW1lbnQvTURTR1xcbmFsaW1lbnRhcnlcXG5hbGltb255L01cXG5hbGl2ZW5lc3MvTVxcbmFsaXlhaC9NXFxuYWxpeWFoc1xcbmFsa2FsaS9NXFxuYWxrYWxpZXNcXG5hbGthbGluZVxcbmFsa2FsaW5pdHkvTVxcbmFsa2FsaXplL0RTR1xcbmFsa2Fsb2lkL1NNXFxuYWxreWQvTVNcXG5hbGwvTVxcbmFsbGF5L0dEU1xcbmFsbGVnYXRpb24vTVNcXG5hbGxlZ2UvR0RTXFxuYWxsZWdlZC9ZXFxuYWxsZWdpYW5jZS9NU1xcbmFsbGVnb3JpY1xcbmFsbGVnb3JpY2FsL1lcXG5hbGxlZ29yaXN0L01TXFxuYWxsZWdvcnkvU01cXG5hbGxlZ3JldHRvL01TXFxuYWxsZWdyby9NU1xcbmFsbGVsZS9NU1xcbmFsbGVsdWlhL1NNXFxuYWxsZXJnZW4vU01cXG5hbGxlcmdlbmljXFxuYWxsZXJnaWNcXG5hbGxlcmdpY2FsbHlcXG5hbGxlcmdpc3QvU01cXG5hbGxlcmd5L1NNXFxuYWxsZXZpYXRlL0RTR05cXG5hbGxldmlhdGlvbi9NXFxuYWxsZXkvTVNcXG5hbGxleXdheS9TTVxcbmFsbGlhbmNlL1NNXFxuYWxsaWdhdG9yL01TXFxuYWxsaXRlcmF0ZS9EU1hHTlZcXG5hbGxpdGVyYXRpb24vTVxcbmFsbGl0ZXJhdGl2ZS9ZXFxuYWxsb2NhdGUvQURTR05cXG5hbGxvY2F0aW9uL0FNXFxuYWxsb2NhdGlvbnNcXG5hbGxvdC9MU1xcbmFsbG90bWVudC9TTVxcbmFsbG90dGVkXFxuYWxsb3R0aW5nXFxuYWxsb3ZlclxcbmFsbG93L0VHRFNcXG5hbGxvd2FibGUvVVxcbmFsbG93YWJseVxcbmFsbG93YW5jZS9TTVxcbmFsbG95L0dNRFNcXG5hbGxveWVkL1VcXG5hbGxzcGljZS9NXFxuYWxsdWRlL0dEU1xcbmFsbHVyZS9NR0xEU1xcbmFsbHVyZW1lbnQvTVNcXG5hbGx1cmluZy9ZXFxuYWxsdXNpb24vU01cXG5hbGx1c2l2ZS9QWVxcbmFsbHVzaXZlbmVzcy9NXFxuYWxsdXZpYWwvTVxcbmFsbHV2aXVtL1NNXFxuYWxseS9HRFNNXFxuYWxtYW5hYy9TTVxcbmFsbWlnaHR5XFxuYWxtb25kL01TXFxuYWxtb25lci9TTVxcbmFsbW9zdFxcbmFsbXMvTVxcbmFsbXNob3VzZS9NU1xcbmFsb2UvU01cXG5hbG9mdFxcbmFsb2hhL01TXFxuYWxvbmVcXG5hbG9uZ1xcbmFsb25nc2hvcmVcXG5hbG9uZ3NpZGVcXG5hbG9vZi9QWVxcbmFsb29mbmVzcy9NXFxuYWxvdWRcXG5hbHAvU01cXG5hbHBhY2EvTVNcXG5hbHBoYS9NU1xcbmFscGhhYmV0L1NNXFxuYWxwaGFiZXRpY1xcbmFscGhhYmV0aWNhbC9ZXFxuYWxwaGFiZXRpemF0aW9uL1NNXFxuYWxwaGFiZXRpemUvWkdEUlNcXG5hbHBoYWJldGl6ZXIvTVxcbmFscGhhbnVtZXJpY1xcbmFscGhhbnVtZXJpY2FsL1lcXG5hbHBpbmUvU1xcbmFscmVhZHlcXG5hbHJpZ2h0XFxuYWxzb1xcbmFsdC9TXFxuYWx0YXIvTVNcXG5hbHRhcnBpZWNlL1NNXFxuYWx0ZXIvR0RCU1xcbmFsdGVyYWJsZS9VXFxuYWx0ZXJhdGlvbi9NU1xcbmFsdGVyY2F0aW9uL1NNXFxuYWx0ZXJlZC9VXFxuYWx0ZXJuYXRlL0RTTVlHTlZYXFxuYWx0ZXJuYXRpb24vTVxcbmFsdGVybmF0aXZlL01ZU1xcbmFsdGVybmF0b3IvU01cXG5hbHRob3VnaFxcbmFsdGltZXRlci9NU1xcbmFsdGl0dWRlL01TXFxuYWx0by9TTVxcbmFsdG9nZXRoZXJcXG5hbHRydWlzbS9NXFxuYWx0cnVpc3QvU01cXG5hbHRydWlzdGljXFxuYWx0cnVpc3RpY2FsbHlcXG5hbHVtL1NNXFxuYWx1bWluYS9NXFxuYWx1bWludW0vTVxcbmFsdW1uYS9NXFxuYWx1bW5hZVxcbmFsdW1uaVxcbmFsdW1udXMvTVxcbmFsdmVvbGFyL1NcXG5hbHdheXNcXG5hbS9OXFxuYW1hbGdhbS9TTVxcbmFtYWxnYW1hdGUvWEdORFNcXG5hbWFsZ2FtYXRpb24vTVxcbmFtYW51ZW5zZXNcXG5hbWFudWVuc2lzL01cXG5hbWFyYW50aC9NXFxuYW1hcmFudGhzXFxuYW1hcmV0dG8vTVxcbmFtYXJ5bGxpcy9NU1xcbmFtYXNzL0dEU1xcbmFtYXRldXIvU01cXG5hbWF0ZXVyaXNoL1lQXFxuYW1hdGV1cmlzaG5lc3MvTVxcbmFtYXRldXJpc20vTVxcbmFtYXRvcnlcXG5hbWF6ZS9MTUdEU1xcbmFtYXplbWVudC9NXFxuYW1hemluZy9ZXFxuYW1hem9uL01TXFxuYW1hem9uaWFuXFxuYW1iYXNzYWRvci9TTVxcbmFtYmFzc2Fkb3JpYWxcXG5hbWJhc3NhZG9yc2hpcC9NU1xcbmFtYmFzc2FkcmVzcy9NU1xcbmFtYmVyL01cXG5hbWJlcmdyaXMvTVxcbmFtYmlhbmNlL01TXFxuYW1iaWRleHRlcml0eS9NXFxuYW1iaWRleHRyb3VzL1lcXG5hbWJpZW50XFxuYW1iaWd1aXR5L1NNXFxuYW1iaWd1b3VzL1VZXFxuYW1iaXRcXG5hbWJpdGlvbi9NU1xcbmFtYml0aW91cy9ZUFxcbmFtYml0aW91c25lc3MvTVxcbmFtYml2YWxlbmNlL01cXG5hbWJpdmFsZW50L1lcXG5hbWJsZS9NWkdEUlNcXG5hbWJsZXIvTVxcbmFtYnJvc2lhL01cXG5hbWJyb3NpYWxcXG5hbWJ1bGFuY2UvTVNcXG5hbWJ1bGFuY2VtYW5cXG5hbWJ1bGFuY2VtZW5cXG5hbWJ1bGFuY2V3b21hblxcbmFtYnVsYW5jZXdvbWVuXFxuYW1idWxhbnRcXG5hbWJ1bGF0ZS9EU1hHTlxcbmFtYnVsYXRpb24vTVxcbmFtYnVsYXRvcnkvU01cXG5hbWJ1c2NhZGUvTUdEU1xcbmFtYnVzaC9HTURTXFxuYW1lbGlvcmF0ZS9HTlZEU1xcbmFtZWxpb3JhdGlvbi9NXFxuYW1lbi9CXFxuYW1lbmFiaWxpdHkvTVxcbmFtZW5hYmx5XFxuYW1lbmQvQkxHRFNcXG5hbWVuZG1lbnQvU01cXG5hbWVuaXR5L1NNXFxuYW1lcmNlL0dMRFNcXG5hbWVyY2VtZW50L1NNXFxuYW1lcmljaXVtL01cXG5hbWV0aHlzdC9TTVxcbmFtaWFiaWxpdHkvTVxcbmFtaWFibGVcXG5hbWlhYmx5XFxuYW1pY2FiaWxpdHkvTVxcbmFtaWNhYmxlXFxuYW1pY2FibHlcXG5hbWlkXFxuYW1pZGUvTVNcXG5hbWlkc2hpcC9TXFxuYW1pZ28vTVNcXG5hbWluZS9TXFxuYW1pbm9cXG5hbWlzc1xcbmFtaXRyaXB0eWxpbmVcXG5hbWl0eS9NXFxuYW1tZXRlci9TTVxcbmFtbW8vTVxcbmFtbW9uaWEvTVxcbmFtbW9uaXVtXFxuYW1tdW5pdGlvbi9NXFxuYW1uZXNpYS9NXFxuYW1uZXNpYWMvTVNcXG5hbW5lc2ljL1NNXFxuYW1uZXN0eS9HRFNNXFxuYW1uaW9jZW50ZXNlc1xcbmFtbmlvY2VudGVzaXMvTVxcbmFtbmlvbi9NU1xcbmFtbmlvdGljXFxuYW1vZWJhL01TXFxuYW1vZWJhZVxcbmFtb2ViaWNcXG5hbW9rXFxuYW1vbmdcXG5hbW9udGlsbGFkby9TTVxcbmFtb3JhbC9ZXFxuYW1vcmFsaXR5L01cXG5hbW9yb3VzL1lQXFxuYW1vcm91c25lc3MvTVxcbmFtb3JwaG91cy9QWVxcbmFtb3JwaG91c25lc3MvTVxcbmFtb3J0aXphdGlvbi9TTVxcbmFtb3J0aXplL0RTR0JcXG5hbW91bnQvR01EU1xcbmFtb3VyL01TXFxuYW1veGljaWxsaW5cXG5hbXAvU01ZXFxuYW1wZXJhZ2UvTVxcbmFtcGVyZS9NU1xcbmFtcGVyc2FuZC9NU1xcbmFtcGhldGFtaW5lL1NNXFxuYW1waGliaWFuL01TXFxuYW1waGliaW91cy9ZXFxuYW1waGl0aGVhdGVyL1NNXFxuYW1waG9yYS9NXFxuYW1waG9yYWVcXG5hbXBpY2lsbGluXFxuYW1wbGUvVFJcXG5hbXBsaWZpY2F0aW9uL01cXG5hbXBsaWZpZXIvTVxcbmFtcGxpZnkvTkRSU1haR1xcbmFtcGxpdHVkZS9TTVxcbmFtcHVsZS9NU1xcbmFtcHV0YXRlL0dORFNYXFxuYW1wdXRhdGlvbi9NXFxuYW1wdXRlZS9NU1xcbmFtdFxcbmFtdWxldC9NU1xcbmFtdXNlL0xHRFNcXG5hbXVzZW1lbnQvTVNcXG5hbXVzaW5nL1lcXG5hbXlnZGFsYVxcbmFteWxhc2UvTVxcbmFteWxvaWRcXG5hbi9DU1xcbmFuYWJvbGlzbS9NXFxuYW5hY2hyb25pc20vU01cXG5hbmFjaHJvbmlzdGljXFxuYW5hY2hyb25pc3RpY2FsbHlcXG5hbmFjb25kYS9TTVxcbmFuYWVyb2JlL1NNXFxuYW5hZXJvYmljXFxuYW5hZXJvYmljYWxseVxcbmFuYWdyYW0vTVNcXG5hbmFsL1lcXG5hbmFsZ2VzaWEvTVxcbmFuYWxnZXNpYy9TTVxcbmFuYWxvZy9NU1xcbmFuYWxvZ2ljYWwvWVxcbmFuYWxvZ2l6ZS9HRFNcXG5hbmFsb2dvdXMvWVBcXG5hbmFsb2dvdXNuZXNzL01cXG5hbmFsb2d1ZS9TTVxcbmFuYWxvZ3kvU01cXG5hbmFseXNhbmQvTVNcXG5hbmFseXNlcy9BXFxuYW5hbHlzaXMvQU1cXG5hbmFseXN0L1NNXFxuYW5hbHl0aWMvU1xcbmFuYWx5dGljYWwvWVxcbmFuYWx5emFibGVcXG5hbmFseXplL0FEU0dcXG5hbmFseXplci9TTVxcbmFuYXBlc3QvU01cXG5hbmFwZXN0aWMvTVNcXG5hbmFyY2hpY1xcbmFuYXJjaGljYWxseVxcbmFuYXJjaGlzbS9NXFxuYW5hcmNoaXN0L01TXFxuYW5hcmNoaXN0aWNcXG5hbmFyY2h5L01cXG5hbmF0aGVtYS9TTVxcbmFuYXRoZW1hdGl6ZS9EU0dcXG5hbmF0b21pY1xcbmFuYXRvbWljYWwvWVxcbmFuYXRvbWlzdC9TTVxcbmFuYXRvbWl6ZS9EU0dcXG5hbmF0b215L1NNXFxuYW5jZXN0b3IvU01cXG5hbmNlc3RyYWwvWVxcbmFuY2VzdHJlc3MvTVNcXG5hbmNlc3RyeS9TTVxcbmFuY2hvci9NREdTXFxuYW5jaG9yYWdlL01TXFxuYW5jaG9yaXRlL01TXFxuYW5jaG9ybWFuL01cXG5hbmNob3JtZW5cXG5hbmNob3JwZW9wbGVcXG5hbmNob3JwZXJzb24vU01cXG5hbmNob3J3b21hbi9NXFxuYW5jaG9yd29tZW5cXG5hbmNob3Z5L1NNXFxuYW5jaWVudC9TUE1SWVRcXG5hbmNpZW50bmVzcy9NXFxuYW5jaWxsYXJ5L1NNXFxuYW5kXFxuYW5kYW50ZS9TTVxcbmFuZGlyb24vU01cXG5hbmRyb2dlbi9NXFxuYW5kcm9nZW5pY1xcbmFuZHJvZ3lub3VzXFxuYW5kcm9neW55L01cXG5hbmRyb2lkL1NNXFxuYW5lY2RvdGFsL1lcXG5hbmVjZG90ZS9NU1xcbmFuZW1pYS9NXFxuYW5lbWljXFxuYW5lbWljYWxseVxcbmFuZW1vbWV0ZXIvU01cXG5hbmVtb25lL1NNXFxuYW5lbnRcXG5hbmVzdGhlc2lhL01cXG5hbmVzdGhlc2lvbG9naXN0L1NNXFxuYW5lc3RoZXNpb2xvZ3kvTVxcbmFuZXN0aGV0aWMvU01cXG5hbmVzdGhldGlzdC9NU1xcbmFuZXN0aGV0aXphdGlvbi9NXFxuYW5lc3RoZXRpemUvR0RTXFxuYW5ldXJ5c20vU01cXG5hbmV3XFxuYW5nZWwvTVNcXG5hbmdlbGZpc2gvTVNcXG5hbmdlbGljXFxuYW5nZWxpY2EvTVxcbmFuZ2VsaWNhbC9ZXFxuYW5nZXIvR01EU1xcbmFuZ2luYS9NXFxuYW5naW9wbGFzdHkvU01cXG5hbmdpb3NwZXJtL1NNXFxuYW5nbGUvTVpHRFJTXFxuYW5nbGVyL01cXG5hbmdsZXdvcm0vTVNcXG5hbmdsaWNpc20vU1xcbmFuZ2xpY2l6ZS9HRFNcXG5hbmdsaW5nL01cXG5hbmdsb3BoaWxlL1NcXG5hbmdsb3Bob25lL1NcXG5hbmdvcmEvTVNcXG5hbmdvc3R1cmFcXG5hbmdyaWx5XFxuYW5ncnkvVFJcXG5hbmdzdC9NXFxuYW5nc3Ryb20vTVNcXG5hbmd1aXNoL0dNRFNcXG5hbmd1bGFyXFxuYW5ndWxhcml0eS9TTVxcbmFuZ3VsYXRpb25cXG5hbmh5ZHJvdXNcXG5hbmlsaW5lL01cXG5hbmlsaW5ndXNcXG5hbmltYWR2ZXJzaW9uL01TXFxuYW5pbWFkdmVydC9HU0RcXG5hbmltYWwvTVNcXG5hbmltYWxjdWxlL1NNXFxuYW5pbWF0ZS9BRFNHTlxcbmFuaW1hdGVkL1lcXG5hbmltYXRpb24vQU1cXG5hbmltYXRpb25zXFxuYW5pbWF0b3IvTVNcXG5hbmltZS9NXFxuYW5pbWlzbS9NXFxuYW5pbWlzdC9TTVxcbmFuaW1pc3RpY1xcbmFuaW1vc2l0eS9TTVxcbmFuaW11cy9NXFxuYW5pb24vTVNcXG5hbmlvbmljXFxuYW5pc2UvTVxcbmFuaXNlZWQvTVxcbmFuaXNldHRlL01cXG5hbmtoL01cXG5hbmtoc1xcbmFua2xlL01TXFxuYW5rbGVib25lL01TXFxuYW5rbGV0L01TXFxuYW5uYWxpc3QvU01cXG5hbm5hbHMvTVxcbmFubmVhbC9HRFNcXG5hbm5lbGlkL01TXFxuYW5uZXgvR01EU1xcbmFubmV4YXRpb24vTVNcXG5hbm5paGlsYXRlL0RTR05cXG5hbm5paGlsYXRpb24vTVxcbmFubmloaWxhdG9yL1NNXFxuYW5uaXZlcnNhcnkvU01cXG5hbm5vdGF0ZS9EU1hHTlZcXG5hbm5vdGF0aW9uL01cXG5hbm5vdGF0b3IvTVNcXG5hbm5vdW5jZS9EUlNMWkdcXG5hbm5vdW5jZWQvVVxcbmFubm91bmNlbWVudC9NU1xcbmFubm91bmNlci9NXFxuYW5ub3kvR0RTXFxuYW5ub3lhbmNlL01TXFxuYW5ub3lpbmcvWVxcbmFubnVhbC9NWVNcXG5hbm51YWxpemVkXFxuYW5udWl0YW50L1NNXFxuYW5udWl0eS9TTVxcbmFubnVsL0xTXFxuYW5udWxhclxcbmFubnVsbGVkXFxuYW5udWxsaW5nXFxuYW5udWxtZW50L1NNXFxuYW5udWx1c1xcbmFubnVuY2lhdGlvbi9TTVxcbmFub2RlL01TXFxuYW5vZGl6ZS9HRFNcXG5hbm9keW5lL01TXFxuYW5vaW50L0dETFNcXG5hbm9pbnRtZW50L01cXG5hbm9tYWxvdXMvWVxcbmFub21hbHkvU01cXG5hbm9uL1NcXG5hbm9ueW1pdHkvTVxcbmFub255bW91cy9ZXFxuYW5vcGhlbGVzL01cXG5hbm9yYWsvTVNcXG5hbm9yZWN0aWMvU01cXG5hbm9yZXhpYS9NXFxuYW5vcmV4aWMvTVNcXG5hbm90aGVyXFxuYW5zd2VyL0JNREdTXFxuYW5zd2VyYWJsZS9VXFxuYW5zd2VyZWQvVVxcbmFuc3dlcnBob25lL1NcXG5hbnQvU01EXFxuYW50YWNpZC9TTVxcbmFudGFnb25pc20vU01cXG5hbnRhZ29uaXN0L1NNXFxuYW50YWdvbmlzdGljXFxuYW50YWdvbmlzdGljYWxseVxcbmFudGFnb25pemUvRFNHXFxuYW50YXJjdGljXFxuYW50ZS9TTVxcbmFudGVhdGVyL01TXFxuYW50ZWJlbGx1bVxcbmFudGVjZWRlbmNlL01cXG5hbnRlY2VkZW50L1NNXFxuYW50ZWNoYW1iZXIvU01cXG5hbnRlZGF0ZS9HRFNcXG5hbnRlZGlsdXZpYW5cXG5hbnRlaW5nXFxuYW50ZWxvcGUvTVNcXG5hbnRlbmF0YWxcXG5hbnRlbm5hL1NNXFxuYW50ZW5uYWVcXG5hbnRlcmlvclxcbmFudGVyb29tL01TXFxuYW50aGVtL01TXFxuYW50aGVyL01TXFxuYW50aGlsbC9TTVxcbmFudGhvbG9naXN0L1NNXFxuYW50aG9sb2dpemUvRFNHXFxuYW50aG9sb2d5L1NNXFxuYW50aHJhY2l0ZS9NXFxuYW50aHJheC9NXFxuYW50aHJvcG9jZW50cmljXFxuYW50aHJvcG9pZC9NU1xcbmFudGhyb3BvbG9naWNhbC9ZXFxuYW50aHJvcG9sb2dpc3QvU01cXG5hbnRocm9wb2xvZ3kvTVxcbmFudGhyb3BvbW9ycGhpY1xcbmFudGhyb3BvbW9ycGhpY2FsbHlcXG5hbnRocm9wb21vcnBoaXNtL01cXG5hbnRocm9wb21vcnBoaXplXFxuYW50aHJvcG9tb3JwaG91c1xcbmFudGkvU01cXG5hbnRpYWJvcnRpb25cXG5hbnRpYWJvcnRpb25pc3QvTVNcXG5hbnRpYWlyY3JhZnRcXG5hbnRpYmFjdGVyaWFsL01TXFxuYW50aWJpb3RpYy9NU1xcbmFudGlib2R5L1NNXFxuYW50aWMvTVNcXG5hbnRpY2FuY2VyXFxuYW50aWNpcGF0ZS9HTlhEU1xcbmFudGljaXBhdGVkL1VcXG5hbnRpY2lwYXRpb24vTVxcbmFudGljaXBhdG9yeVxcbmFudGlja2VkXFxuYW50aWNraW5nXFxuYW50aWNsZXJpY2FsXFxuYW50aWNsaW1hY3RpY1xcbmFudGljbGltYWN0aWNhbGx5XFxuYW50aWNsaW1heC9NU1xcbmFudGljbGluZS9TTVxcbmFudGljbG9ja3dpc2VcXG5hbnRpY29hZ3VsYW50L01TXFxuYW50aWNvbW11bmlzbS9NXFxuYW50aWNvbW11bmlzdC9TTVxcbmFudGljeWNsb25lL1NNXFxuYW50aWN5Y2xvbmljXFxuYW50aWRlbW9jcmF0aWNcXG5hbnRpZGVwcmVzc2FudC9NU1xcbmFudGlkb3RlL01TXFxuYW50aWZhc2Npc3QvTVNcXG5hbnRpZmVycm9tYWduZXRpY1xcbmFudGlmcmVlemUvTVxcbmFudGlnZW4vU01cXG5hbnRpZ2VuaWNcXG5hbnRpZ2VuaWNpdHkvTVxcbmFudGloZXJvL01cXG5hbnRpaGVyb2VzXFxuYW50aWhpc3RhbWluZS9TTVxcbmFudGlrbm9jay9NXFxuYW50aWxhYm9yXFxuYW50aWxvZ2FyaXRobS9TTVxcbmFudGltYWNhc3Nhci9NU1xcbmFudGltYWxhcmlhbFxcbmFudGltYXR0ZXIvTVxcbmFudGltaWNyb2JpYWxcXG5hbnRpbWlzc2lsZVxcbmFudGltb255L01cXG5hbnRpbmV1dHJpbm8vU01cXG5hbnRpbmV1dHJvbi9NU1xcbmFudGludWNsZWFyXFxuYW50aW94aWRhbnQvTVNcXG5hbnRpcGFydGljbGUvU01cXG5hbnRpcGFzdGlcXG5hbnRpcGFzdG8vTVNcXG5hbnRpcGF0aGV0aWNcXG5hbnRpcGF0aHkvU01cXG5hbnRpcGVyc29ubmVsXFxuYW50aXBlcnNwaXJhbnQvU01cXG5hbnRpcGhvbi9TTVxcbmFudGlwaG9uYWwvTVlTXFxuYW50aXBvZGFsL1NcXG5hbnRpcG9kZWFuL01TXFxuYW50aXBvZGVzL01cXG5hbnRpcG9sbHV0aW9uXFxuYW50aXBvdmVydHlcXG5hbnRpcHJvdG9uL01TXFxuYW50aXF1YXJpYW4vU01cXG5hbnRpcXVhcmlhbmlzbS9NXFxuYW50aXF1YXJ5L1NNXFxuYW50aXF1YXRlL0dEU1xcbmFudGlxdWUvRFNNR1xcbmFudGlxdWl0eS9TTVxcbmFudGlycmhpbnVtL1NcXG5hbnRpc2NpZW5jZVxcbmFudGlzZW1pdGljXFxuYW50aXNlbWl0aXNtL01cXG5hbnRpc2Vwc2lzL01cXG5hbnRpc2VwdGljL1NNXFxuYW50aXNlcHRpY2FsbHlcXG5hbnRpc2VydW0vTVNcXG5hbnRpc2xhdmVyeVxcbmFudGlzb2NpYWwvWVxcbmFudGlzcGFzbW9kaWMvTVNcXG5hbnRpc3VibWFyaW5lXFxuYW50aXRhbmtcXG5hbnRpdGhlc2VzXFxuYW50aXRoZXNpcy9NXFxuYW50aXRoZXRpY1xcbmFudGl0aGV0aWNhbC9ZXFxuYW50aXRveGluL01TXFxuYW50aXRydXN0XFxuYW50aXZlbmluL01TXFxuYW50aXZlbm9tXFxuYW50aXZpcmFsL01TXFxuYW50aXZpcnVzXFxuYW50aXZpdmlzZWN0aW9uaXN0L01TXFxuYW50aXdhclxcbmFudGxlci9NRFNcXG5hbnRvbnltL1NNXFxuYW50b255bW91c1xcbmFudHJ1bVxcbmFudHN5L1RSXFxuYW51cy9NU1xcbmFudmlsL01TXFxuYW54aWV0eS9TTVxcbmFueGlvdXMvWVBcXG5hbnhpb3VzbmVzcy9NXFxuYW55XFxuYW55Ym9keS9TTVxcbmFueWhvd1xcbmFueW1vcmVcXG5hbnlvbmUvTVxcbmFueXBsYWNlXFxuYW55dGhpbmcvU01cXG5hbnl0aW1lXFxuYW55d2F5L1NcXG5hbnl3aGVyZVxcbmFueXdpc2VcXG5hb3J0YS9NU1xcbmFvcnRpY1xcbmFwYWNlXFxuYXBhcnRcXG5hcGFydGhlaWQvTVxcbmFwYXJ0bWVudC9NU1xcbmFwYXRoZXRpY1xcbmFwYXRoZXRpY2FsbHlcXG5hcGF0aHkvTVxcbmFwYXRpdGUvTVxcbmFwZS9EU01HXFxuYXBlbGlrZVxcbmFwZXJpdGlmL01TXFxuYXBlcnR1cmUvU01cXG5hcGV4L01TXFxuYXBoYXNpYS9NXFxuYXBoYXNpYy9NU1xcbmFwaGVsaWFcXG5hcGhlbGlvbi9TTVxcbmFwaGlkL01TXFxuYXBob3Jpc20vTVNcXG5hcGhvcmlzdGljXFxuYXBob3Jpc3RpY2FsbHlcXG5hcGhyb2Rpc2lhYy9TTVxcbmFwaWFyaXN0L1NNXFxuYXBpYXJ5L1NNXFxuYXBpY2FsL1lcXG5hcGllY2VcXG5hcGlzaC9ZXFxuYXBsZW50eVxcbmFwbG9tYi9NXFxuYXBvY2FseXBzZS9TTVxcbmFwb2NhbHlwdGljXFxuYXBvY3J5cGhhL01cXG5hcG9jcnlwaGFsL1lcXG5hcG9nZWUvTVNcXG5hcG9saXRpY2FsL1lcXG5hcG9sb2dldGljL1VcXG5hcG9sb2dldGljYWxseVxcbmFwb2xvZ2lhL1NNXFxuYXBvbG9naXN0L01TXFxuYXBvbG9naXplL0dEU1xcbmFwb2xvZ3kvU01cXG5hcG9wbGVjdGljXFxuYXBvcGxleHkvU01cXG5hcG9wdG9zaXNcXG5hcG9wdG90aWNcXG5hcG9zdGFzeS9TTVxcbmFwb3N0YXRlL1NNXFxuYXBvc3RhdGl6ZS9HRFNcXG5hcG9zdGxlL01TXFxuYXBvc3RsZXNoaXAvTVxcbmFwb3N0b2xpY1xcbmFwb3N0cm9waGUvTVNcXG5hcG90aGVjYXJ5L1NNXFxuYXBvdGhlZ20vU01cXG5hcG90aGVvc2VzXFxuYXBvdGhlb3Npcy9NXFxuYXBwL1NNXFxuYXBwYWxsL0dEU1xcbmFwcGFsbGluZy9ZXFxuYXBwYWxvb3NhL01TXFxuYXBwYXJhdGNoaWsvU1xcbmFwcGFyYXR1cy9NU1xcbmFwcGFyZWwvTURHU1xcbmFwcGFyZW50L1lcXG5hcHBhcml0aW9uL1NNXFxuYXBwZWFsL0dNRFNcXG5hcHBlYWxpbmcvVVlcXG5hcHBlYXIvQUVTREdcXG5hcHBlYXJhbmNlL0VBTVNcXG5hcHBlYXNlL0xaR0RSU1xcbmFwcGVhc2VtZW50L1NNXFxuYXBwZWFzZXIvTVxcbmFwcGVsbGFudC9TTVxcbmFwcGVsbGF0ZS9YTlxcbmFwcGVsbGF0aW9uL01cXG5hcHBlbmQvR0RTXFxuYXBwZW5kYWdlL1NNXFxuYXBwZW5kZWN0b215L1NNXFxuYXBwZW5kaWNlc1xcbmFwcGVuZGljaXRpcy9NXFxuYXBwZW5kaXgvTVNcXG5hcHBlcnRhaW4vR0RTXFxuYXBwZXRpdGUvU01cXG5hcHBldGl6ZXIvTVNcXG5hcHBldGl6aW5nL1lcXG5hcHBsYXVkL1pHRFJTXFxuYXBwbGF1ZGVyL01cXG5hcHBsYXVzZS9NXFxuYXBwbGUvTVNcXG5hcHBsZWphY2svTVxcbmFwcGxlc2F1Y2UvTVxcbmFwcGxldC9NU1xcbmFwcGxpYW5jZS9TTVxcbmFwcGxpY2FiaWxpdHkvTVxcbmFwcGxpY2FibGUvSVxcbmFwcGxpY2FibHlcXG5hcHBsaWNhbnQvU01cXG5hcHBsaWNhdGlvbi9BTVxcbmFwcGxpY2F0b3IvU01cXG5hcHBsaWVyL01TXFxuYXBwbGlxdWUvRFNNXFxuYXBwbGlxdWVpbmdcXG5hcHBseS9BTlhHRFNcXG5hcHBvaW50L0FFTFNWR0RcXG5hcHBvaW50ZWUvU01cXG5hcHBvaW50bWVudCdzL0FcXG5hcHBvaW50bWVudC9FU01cXG5hcHBvcnRpb24vQUdETFNcXG5hcHBvcnRpb25tZW50L0FNXFxuYXBwb3NlL0dEU1xcbmFwcG9zaXRlL1lOVlBcXG5hcHBvc2l0ZW5lc3MvTVxcbmFwcG9zaXRpb24vTVxcbmFwcG9zaXRpdmUvU01cXG5hcHByYWlzYWwvQU1TXFxuYXBwcmFpc2UvQURTR1xcbmFwcHJhaXNlci9NU1xcbmFwcHJlY2lhYmxlL0lcXG5hcHByZWNpYWJseS9JXFxuYXBwcmVjaWF0ZS9EU1hHTlZcXG5hcHByZWNpYXRlZC9VXFxuYXBwcmVjaWF0aW9uL01cXG5hcHByZWNpYXRpdmUvWVxcbmFwcHJlY2lhdG9yL01TXFxuYXBwcmVjaWF0b3J5XFxuYXBwcmVoZW5kL0dEU1xcbmFwcHJlaGVuc2lvbi9NU1xcbmFwcHJlaGVuc2l2ZS9ZUFxcbmFwcHJlaGVuc2l2ZW5lc3MvTVxcbmFwcHJlbnRpY2UvRFNNR1xcbmFwcHJlbnRpY2VzaGlwL01TXFxuYXBwcmlzZS9HRFNcXG5hcHByaXplL0dEU1xcbmFwcHJvYWNoL0dCTURTXFxuYXBwcm9hY2hhYmxlL1VJXFxuYXBwcm9iYXRpb24vRU1cXG5hcHByb2JhdGlvbnNcXG5hcHByb3ByaWF0ZS9QWUdOWERTXFxuYXBwcm9wcmlhdGVkL1VcXG5hcHByb3ByaWF0ZW5lc3MvSU1cXG5hcHByb3ByaWF0aW9uL01cXG5hcHByb3ByaWF0b3IvU01cXG5hcHByb3ZhbC9FTVxcbmFwcHJvdmFsc1xcbmFwcHJvdmUvRUdEU1xcbmFwcHJvdmVkL1VcXG5hcHByb3ZpbmcvRVlcXG5hcHByb3hcXG5hcHByb3hpbWF0ZS9EU1hZR05cXG5hcHByb3hpbWF0aW9uL01cXG5hcHB1cnRlbmFuY2UvU01cXG5hcHB1cnRlbmFudFxcbmFwcmljb3QvTVNcXG5hcHJvbi9NU1xcbmFwcm9wb3NcXG5hcHNlL1NNXFxuYXB0L0lZUFRcXG5hcHRlclxcbmFwdGl0dWRlL1NNXFxuYXB0bmVzcy9JTVxcbmFxdWEvU01cXG5hcXVhY3VsdHVyZS9NXFxuYXF1YWx1bmcvTVNcXG5hcXVhbWFyaW5lL1NNXFxuYXF1YW5hdXQvTVNcXG5hcXVhcGxhbmUvTUdEU1xcbmFxdWFyaXVtL01TXFxuYXF1YXRpYy9TTVxcbmFxdWF0aWNhbGx5XFxuYXF1YXRpY3MvTVxcbmFxdWF0aW50L1NcXG5hcXVhdml0L01cXG5hcXVlZHVjdC9NU1xcbmFxdWVvdXNcXG5hcXVpZmVyL1NNXFxuYXF1aWxpbmVcXG5hcmFiZXNxdWUvTVNcXG5hcmFiaWxpdHkvTVxcbmFyYWNobmlkL01TXFxuYXJhY2hub3Bob2JpYVxcbmFyYml0ZXIvU01cXG5hcmJpdHJhZ2UvTVpHRFJTXFxuYXJiaXRyYWdlci9NXFxuYXJiaXRyYWdldXIvU01cXG5hcmJpdHJhbWVudC9TTVxcbmFyYml0cmFyaWx5XFxuYXJiaXRyYXJpbmVzcy9NXFxuYXJiaXRyYXJ5L1BcXG5hcmJpdHJhdGUvR05EU1xcbmFyYml0cmF0aW9uL01cXG5hcmJpdHJhdG9yL01TXFxuYXJib3IvTVNcXG5hcmJvcmVhbFxcbmFyYm9yZXR1bS9TTVxcbmFyYm9ydml0YWUvU01cXG5hcmJ1dHVzL01TXFxuYXJjL1NNREdcXG5hcmNhZGUvTVNcXG5hcmNhbmVcXG5hcmNoL1BaVEdWTURSU1lcXG5hcmNoYWVvbG9naWNhbC9ZXFxuYXJjaGFlb2xvZ2lzdC9TTVxcbmFyY2hhZW9sb2d5L01cXG5hcmNoYWljXFxuYXJjaGFpY2FsbHlcXG5hcmNoYWlzbS9NU1xcbmFyY2hhaXN0L01TXFxuYXJjaGFuZ2VsL01TXFxuYXJjaGJpc2hvcC9TTVxcbmFyY2hiaXNob3ByaWMvU01cXG5hcmNoZGVhY29uL1NNXFxuYXJjaGRpb2Nlc2FuXFxuYXJjaGRpb2Nlc2UvTVNcXG5hcmNoZHVjaGVzcy9NU1xcbmFyY2hkdWtlL01TXFxuYXJjaGVuZW15L1NNXFxuYXJjaGVyL01cXG5hcmNoZXJ5L01cXG5hcmNoZXR5cGFsXFxuYXJjaGV0eXBlL01TXFxuYXJjaGZpZW5kL01TXFxuYXJjaGllcGlzY29wYWxcXG5hcmNoaXBlbGFnby9NU1xcbmFyY2hpdGVjdC9TTVxcbmFyY2hpdGVjdG9uaWMvU1xcbmFyY2hpdGVjdG9uaWNzL01cXG5hcmNoaXRlY3R1cmFsL1lcXG5hcmNoaXRlY3R1cmUvTVNcXG5hcmNoaXRyYXZlL1NNXFxuYXJjaGl2YWxcXG5hcmNoaXZlL0RTTUdcXG5hcmNoaXZpc3QvTVNcXG5hcmNobmVzcy9NXFxuYXJjaHdheS9TTVxcbmFyY3RpYy9NU1xcbmFyZGVudC9ZXFxuYXJkb3IvTVNcXG5hcmR1b3VzL1lQXFxuYXJkdW91c25lc3MvTVxcbmFyZS9TTUJcXG5hcmVhL1NNXFxuYXJlYWxcXG5hcmVuJ3RcXG5hcmVuYS9NU1xcbmFyZ2VudC9NXFxuYXJnaW5pbmVcXG5hcmdvbi9NXFxuYXJnb3N5L1NNXFxuYXJnb3QvTVNcXG5hcmd1YWJsZS9JVVxcbmFyZ3VhYmx5L1VcXG5hcmd1ZS9aR0RSU1xcbmFyZ3Vlci9NXFxuYXJndW1lbnQvTVNcXG5hcmd1bWVudGF0aW9uL01cXG5hcmd1bWVudGF0aXZlL1BZXFxuYXJndW1lbnRhdGl2ZW5lc3MvTVxcbmFyZ3lsZS9NU1xcbmFyaWEvU01cXG5hcmlkL1lcXG5hcmlkaXR5L01cXG5hcmlnaHRcXG5hcmlzZS9HU1xcbmFyaXNlblxcbmFyaXN0b2NyYWN5L1NNXFxuYXJpc3RvY3JhdC9TTVxcbmFyaXN0b2NyYXRpY1xcbmFyaXN0b2NyYXRpY2FsbHlcXG5hcml0aG1ldGljL01cXG5hcml0aG1ldGljYWwvWVxcbmFyaXRobWV0aWNpYW4vTVNcXG5hcmsvU01cXG5hcm0nc1xcbmFybS9FQUdEU1xcbmFybWFkYS9NU1xcbmFybWFkaWxsby9TTVxcbmFybWFtZW50L0FFTVxcbmFybWFtZW50c1xcbmFybWF0dXJlL01TXFxuYXJtYmFuZC9NU1xcbmFybWNoYWlyL01TXFxuYXJtZWQvVVxcbmFybWZ1bC9NU1xcbmFybWhvbGUvU01cXG5hcm1pc3RpY2UvU01cXG5hcm1sZXQvTVNcXG5hcm1sb2FkL1NcXG5hcm1vci9aR01EUlNcXG5hcm1vcmVkL1VcXG5hcm1vcmVyL01cXG5hcm1vcmlhbFxcbmFybW9yeS9TTVxcbmFybXBpdC9NU1xcbmFybXJlc3QvU01cXG5hcm15L1NNXFxuYXJvbWEvTVNcXG5hcm9tYXRoZXJhcGlzdC9NU1xcbmFyb21hdGhlcmFweS9NXFxuYXJvbWF0aWMvTVNcXG5hcm9tYXRpY2FsbHlcXG5hcm9zZVxcbmFyb3VuZFxcbmFyb3VzYWwvTVxcbmFyb3VzZS9HRFNcXG5hcnBlZ2dpby9NU1xcbmFyclxcbmFycmFpZ24vREdTTFxcbmFycmFpZ25tZW50L1NNXFxuYXJyYW5nZS9BRVNETEdcXG5hcnJhbmdlbWVudCdzL0VcXG5hcnJhbmdlbWVudC9BU01cXG5hcnJhbmdlci9TTVxcbmFycmFudFxcbmFycmFzL01TXFxuYXJyYXkvRUdNRFNcXG5hcnJlYXJzL01cXG5hcnJlc3QvQUdNRFNcXG5hcnJoeXRobWlhL01cXG5hcnJoeXRobWljXFxuYXJyaHl0aG1pY2FsXFxuYXJyaXZhbC9NU1xcbmFycml2ZS9HRFNcXG5hcnJvZ2FuY2UvTVxcbmFycm9nYW50L1lcXG5hcnJvZ2F0ZS9HTkRTXFxuYXJyb2dhdGlvbi9NXFxuYXJyb3cvTVNcXG5hcnJvd2hlYWQvTVNcXG5hcnJvd3Jvb3QvTVxcbmFycm95by9NU1xcbmFyc2VkXFxuYXJzZW5hbC9NU1xcbmFyc2VuaWMvTVxcbmFyc2luZ1xcbmFyc29uL01cXG5hcnNvbmlzdC9TTVxcbmFydC9TTVxcbmFydGVyaWFsXFxuYXJ0ZXJpb2xlL01TXFxuYXJ0ZXJpb3NjbGVyb3Npcy9NXFxuYXJ0ZXJ5L1NNXFxuYXJ0ZnVsL1BZXFxuYXJ0ZnVsbmVzcy9NXFxuYXJ0aHJpdGljL01TXFxuYXJ0aHJpdGlzL01cXG5hcnRocm9wb2QvTVNcXG5hcnRocm9zY29wZS9TTVxcbmFydGhyb3Njb3BpY1xcbmFydGhyb3Njb3B5XFxuYXJ0aWNob2tlL1NNXFxuYXJ0aWNsZS9NRFNcXG5hcnRpY3VsYWN5L0lcXG5hcnRpY3VsYXJcXG5hcnRpY3VsYXRlL1lHTlBEU1hcXG5hcnRpY3VsYXRlbmVzcy9JTVxcbmFydGljdWxhdGlvbi9NXFxuYXJ0aWZhY3QvU01cXG5hcnRpZmljZS9SU01aXFxuYXJ0aWZpY2VyL01cXG5hcnRpZmljaWFsL1lcXG5hcnRpZmljaWFsaXR5L01cXG5hcnRpbGxlcnkvTVxcbmFydGlsbGVyeW1hbi9NXFxuYXJ0aWxsZXJ5bWVuXFxuYXJ0aW5lc3MvTVxcbmFydGlzYW4vTVNcXG5hcnRpc3QvTVNcXG5hcnRpc3RlL01TXFxuYXJ0aXN0aWMvSVxcbmFydGlzdGljYWxseVxcbmFydGlzdHJ5L01cXG5hcnRsZXNzL1BZXFxuYXJ0bGVzc25lc3MvTVxcbmFydHN5L1RSXFxuYXJ0d29yay9NU1xcbmFydHkvUFRSXFxuYXJ1Z3VsYVxcbmFydW0vU01cXG5hc2FwXFxuYXNiZXN0b3MvTVxcbmFzY2VuZC9BR0RTXFxuYXNjZW5kYW5jZS9NXFxuYXNjZW5kYW5jeS9NXFxuYXNjZW5kYW50L1NNXFxuYXNjZW5zaW9uL01TXFxuYXNjZW50L01TXFxuYXNjZXJ0YWluL0dEU0JMXFxuYXNjZXJ0YWlubWVudC9NXFxuYXNjZXRpYy9NU1xcbmFzY2V0aWNhbGx5XFxuYXNjZXRpY2lzbS9NXFxuYXNjb3QvTVNcXG5hc2NyaWJlL0dCRFNcXG5hc2NyaXB0aW9uL01cXG5hc2VwdGljXFxuYXNlcHRpY2FsbHlcXG5hc2V4dWFsL1lcXG5hc2V4dWFsaXR5L01cXG5hc2gvTUROU0dcXG5hc2hhbWVkL1VZXFxuYXNoY2FuL01TXFxuYXNobGFyL01TXFxuYXNob3JlXFxuYXNocmFtL01TXFxuYXNodHJheS9TTVxcbmFzaHkvVFJcXG5hc2lkZS9NU1xcbmFzaW5pbmUvWVxcbmFzaW5pbml0eS9TTVxcbmFzay9TREdcXG5hc2thbmNlXFxuYXNrZWQvVVxcbmFza2V3XFxuYXNsYW50XFxuYXNsZWVwXFxuYXNvY2lhbFxcbmFzcC9TTU5YXFxuYXNwYXJhZ3VzL01cXG5hc3BhcnRhbWUvTVxcbmFzcGVjdC9NU1xcbmFzcGVuL01cXG5hc3Blcml0eS9TTVxcbmFzcGVyc2lvbi9NU1xcbmFzcGhhbHQvTURHU1xcbmFzcGhvZGVsL1NNXFxuYXNwaHl4aWEvTVxcbmFzcGh5eGlhdGUvRFNYR05cXG5hc3BoeXhpYXRpb24vTVxcbmFzcGljL01TXFxuYXNwaWRpc3RyYS9NU1xcbmFzcGlyYW50L01TXFxuYXNwaXJhdGUvTUdORFNYXFxuYXNwaXJhdGlvbi9NXFxuYXNwaXJhdG9yL1NNXFxuYXNwaXJlL0dEU1xcbmFzcGlyaW4vTVNcXG5hc3MvTVNcXG5hc3NhaWwvR0JEU1xcbmFzc2FpbGFibGUvVVxcbmFzc2FpbGFudC9TTVxcbmFzc2Fzc2luL1NNXFxuYXNzYXNzaW5hdGUvR05YRFNcXG5hc3Nhc3NpbmF0aW9uL01cXG5hc3NhdWx0L01EUkdTXFxuYXNzYXkvWkdNRFJTXFxuYXNzYXllci9NXFxuYXNzZW1ibGFnZS9TTVxcbmFzc2VtYmxlL0FFR1NEXFxuYXNzZW1ibGVyL01TXFxuYXNzZW1ibGllc1xcbmFzc2VtYmx5L0FNXFxuYXNzZW1ibHltYW4vTVxcbmFzc2VtYmx5bWVuXFxuYXNzZW1ibHl3b21hbi9NXFxuYXNzZW1ibHl3b21lblxcbmFzc2VudC9HTURTXFxuYXNzZXJ0L0FHVkRTXFxuYXNzZXJ0aW9uL0FNXFxuYXNzZXJ0aW9uc1xcbmFzc2VydGl2ZS9ZUFxcbmFzc2VydGl2ZW5lc3MvTVxcbmFzc2Vzcy9BTEdEU1xcbmFzc2Vzc21lbnQvQVNNXFxuYXNzZXNzb3IvTVNcXG5hc3NldC9NU1xcbmFzc2V2ZXJhdGUvRFNHTlxcbmFzc2V2ZXJhdGlvbi9NXFxuYXNzaG9sZS9NUyFcXG5hc3NpZHVpdHkvTVxcbmFzc2lkdW91cy9QWVxcbmFzc2lkdW91c25lc3MvTVxcbmFzc2lnbidzXFxuYXNzaWduL0FMR0RTXFxuYXNzaWduYWJsZVxcbmFzc2lnbmF0aW9uL01TXFxuYXNzaWduZWQvVVxcbmFzc2lnbmVlL01cXG5hc3NpZ25lci9NU1xcbmFzc2lnbm1lbnQvQU1TXFxuYXNzaWdub3IvTVNcXG5hc3NpbWlsYXRlL0RTR05cXG5hc3NpbWlsYXRlZC9VXFxuYXNzaW1pbGF0aW9uL01cXG5hc3Npc3QvR1ZNRFNcXG5hc3Npc3RhbmNlL01cXG5hc3Npc3RhbnQvU01cXG5hc3Npc3RlZC9VXFxuYXNzaXplL01TXFxuYXNzblxcbmFzc29jXFxuYXNzb2NpYXRlJ3NcXG5hc3NvY2lhdGUvRURTR05WXFxuYXNzb2NpYXRpb24vRU1cXG5hc3NvY2lhdGlvbnNcXG5hc3NvY2lhdGl2aXR5XFxuYXNzb25hbmNlL01cXG5hc3NvbmFudC9NU1xcbmFzc29ydC9HTERTXFxuYXNzb3J0YXRpdmVcXG5hc3NvcnRtZW50L01TXFxuYXNzdFxcbmFzc3VhZ2UvR0RTXFxuYXNzdW1lL0JHRFNcXG5hc3N1bXB0aW9uL1NNXFxuYXNzdW1wdGl2ZVxcbmFzc3VyYW5jZS9BU01cXG5hc3N1cmUvQUdEU1xcbmFzc3VyZWQvTVlTXFxuYXN0YXRpbmUvTVxcbmFzdGVyL0VNU1xcbmFzdGVyaXNrL0dNRFNcXG5hc3Rlcm5cXG5hc3Rlcm9pZC9NU1xcbmFzdGhtYS9NXFxuYXN0aG1hdGljL1NNXFxuYXN0aG1hdGljYWxseVxcbmFzdGlnbWF0aWNcXG5hc3RpZ21hdGlzbS9TTVxcbmFzdGlyXFxuYXN0b25pc2gvRFNMR1xcbmFzdG9uaXNoaW5nL1lcXG5hc3RvbmlzaG1lbnQvTVxcbmFzdG91bmQvR0RTXFxuYXN0b3VuZGluZy9ZXFxuYXN0cmFkZGxlXFxuYXN0cmFraGFuL01cXG5hc3RyYWxcXG5hc3RyYXlcXG5hc3RyaWRlXFxuYXN0cmluZ2VuY3kvTVxcbmFzdHJpbmdlbnQvU01ZXFxuYXN0cm9sYWJlL1NNXFxuYXN0cm9sb2dlci9TTVxcbmFzdHJvbG9naWNhbC9ZXFxuYXN0cm9sb2dpc3QvTVNcXG5hc3Ryb2xvZ3kvTVxcbmFzdHJvbmF1dC9NU1xcbmFzdHJvbmF1dGljL1NcXG5hc3Ryb25hdXRpY2FsXFxuYXN0cm9uYXV0aWNzL01cXG5hc3Ryb25vbWVyL1NNXFxuYXN0cm9ub21pY1xcbmFzdHJvbm9taWNhbC9ZXFxuYXN0cm9ub215L01cXG5hc3Ryb3BoeXNpY2FsXFxuYXN0cm9waHlzaWNpc3QvTVNcXG5hc3Ryb3BoeXNpY3MvTVxcbmFzdHV0ZS9QWVRSXFxuYXN0dXRlbmVzcy9NXFxuYXN1bmRlclxcbmFzeWx1bS9TTVxcbmFzeW1tZXRyaWNcXG5hc3ltbWV0cmljYWwvWVxcbmFzeW1tZXRyeS9TTVxcbmFzeW1wdG9tYXRpY1xcbmFzeW1wdG90aWNcXG5hc3ltcHRvdGljYWxseVxcbmFzeW5jaHJvbm91cy9ZXFxuYXRcXG5hdGF2aXNtL01cXG5hdGF2aXN0L1NNXFxuYXRhdmlzdGljXFxuYXRheGlhL01cXG5hdGF4aWMvTVNcXG5hdGVcXG5hdGVsaWVyL1NNXFxuYXRoZWlzbS9NXFxuYXRoZWlzdC9NU1xcbmF0aGVpc3RpY1xcbmF0aGVyb3NjbGVyb3Npcy9NXFxuYXRoZXJvc2NsZXJvdGljXFxuYXRoaXJzdFxcbmF0aGxldGUvTVNcXG5hdGhsZXRpYy9TXFxuYXRobGV0aWNhbGx5XFxuYXRobGV0aWNpc21cXG5hdGhsZXRpY3MvTVxcbmF0aHdhcnRcXG5hdGlsdFxcbmF0aXNob29cXG5hdGxhcy9NU1xcbmF0bW9zcGhlcmUvTVNcXG5hdG1vc3BoZXJpYy9TXFxuYXRtb3NwaGVyaWNhbGx5XFxuYXRtb3NwaGVyaWNzL01cXG5hdG9sbC9NU1xcbmF0b20vU01cXG5hdG9taWNcXG5hdG9taWNhbGx5XFxuYXRvbWl6ZS9aR0RSU1xcbmF0b21pemVyL01cXG5hdG9uYWwvWVxcbmF0b25hbGl0eS9NXFxuYXRvbmUvTEdEU1xcbmF0b25lbWVudC9NXFxuYXRvcFxcbmF0cmlhXFxuYXRyaWFsXFxuYXRyaW92ZW50cmljdWxhclxcbmF0cml1bS9NXFxuYXRyb2Npb3VzL1BZXFxuYXRyb2Npb3VzbmVzcy9NXFxuYXRyb2NpdHkvU01cXG5hdHJvcGh5L0RTTUdcXG5hdHJvcGluZS9NXFxuYXR0YWNoL0FMR0RTXFxuYXR0YWNoZS9CTVxcbmF0dGFjaGVkL1VcXG5hdHRhY2htZW50L0FNXFxuYXR0YWNobWVudHNcXG5hdHRhY2svWkdNRFJTXFxuYXR0YWNrZXIvTVxcbmF0dGFpbi9BR0RTXFxuYXR0YWluYWJpbGl0eS9NXFxuYXR0YWluYWJsZS9VXFxuYXR0YWluZGVyL01cXG5hdHRhaW5tZW50L1NNXFxuYXR0YXIvTVxcbmF0dGVtcHQnc1xcbmF0dGVtcHQvQVNER1xcbmF0dGVuZC9TRFJaR1xcbmF0dGVuZGFuY2UvU01cXG5hdHRlbmRhbnQvU01cXG5hdHRlbmRlZC9VXFxuYXR0ZW5kZWUvU01cXG5hdHRlbnRpb24vSU1cXG5hdHRlbnRpb25zXFxuYXR0ZW50aXZlL0lQWVxcbmF0dGVudGl2ZW5lc3MvSU1cXG5hdHRlbnVhdGUvRFNHTlxcbmF0dGVudWF0aW9uL01cXG5hdHRlc3QvU0RHXFxuYXR0ZXN0YXRpb24vU01cXG5hdHRlc3RlZC9VXFxuYXR0aWMvU01cXG5hdHRpcmUvRFNNR1xcbmF0dGl0dWRlL1NNXFxuYXR0aXR1ZGluYWxcXG5hdHRpdHVkaW5pemUvR0RTXFxuYXR0blxcbmF0dG9ybmV5L01TXFxuYXR0cmFjdC9TR1ZEQlxcbmF0dHJhY3RhbnQvTVNcXG5hdHRyYWN0aW9uL01TXFxuYXR0cmFjdGl2ZS9VWVxcbmF0dHJhY3RpdmVuZXNzL01cXG5hdHRyaWJ1dGUvRFNNR05WQlhcXG5hdHRyaWJ1dGVkL1VcXG5hdHRyaWJ1dGlvbi9NXFxuYXR0cmlidXRpdmUvTVlTXFxuYXR0cml0aW9uL01cXG5hdHR1bmUvRFNHXFxuYXR0eVxcbmF0d2l0dGVyXFxuYXR5cGljYWwvWVxcbmF1YmVyZ2luZS9TXFxuYXVidXJuL01cXG5hdWN0aW9uL01ER1NcXG5hdWN0aW9uZWVyL1NNXFxuYXVkYWNpb3VzL1lQXFxuYXVkYWNpb3VzbmVzcy9NXFxuYXVkYWNpdHkvTVxcbmF1ZGliaWxpdHkvSU1cXG5hdWRpYmxlL01TXFxuYXVkaWJseS9JXFxuYXVkaWVuY2UvTVNcXG5hdWRpby9NU1xcbmF1ZGlvbG9naWNhbFxcbmF1ZGlvbG9naXN0L1NNXFxuYXVkaW9sb2d5L01cXG5hdWRpb21ldGVyL1NNXFxuYXVkaW9waGlsZS9TTVxcbmF1ZGlvdGFwZS9TTVxcbmF1ZGlvdmlzdWFsL1NcXG5hdWRpb3Zpc3VhbHMvTVxcbmF1ZGl0L0dNRFNcXG5hdWRpdGlvbi9TTURHXFxuYXVkaXRvci9NU1xcbmF1ZGl0b3JpdW0vU01cXG5hdWRpdG9yeVxcbmF1Z2VyL01TXFxuYXVnaHQvTVNcXG5hdWdtZW50L0RSWkdTXFxuYXVnbWVudGF0aW9uL01TXFxuYXVnbWVudGF0aXZlXFxuYXVnbWVudGVyL01cXG5hdWd1ci9HTURTXFxuYXVndXJ5L1NNXFxuYXVndXN0L1BUUllcXG5hdWd1c3RuZXNzL01cXG5hdWsvU01cXG5hdW50L1NNXFxuYXVudGllL1NNXFxuYXVyYS9NU1xcbmF1cmFsL1lcXG5hdXJlb2xlL1NNXFxuYXVyZXVzXFxuYXVyaWNsZS9TTVxcbmF1cmljdWxhclxcbmF1cm9yYS9TTVxcbmF1c2N1bHRhdGUvR05EU1hcXG5hdXNjdWx0YXRpb24vTVxcbmF1c3BpY2UvU01cXG5hdXNwaWNpb3VzL0lZXFxuYXVzcGljaW91c25lc3MvTVxcbmF1c3RlcmUvUllUXFxuYXVzdGVyaXR5L1NNXFxuYXVzdHJhbFxcbmF1dGhlbnRpYy9JVVxcbmF1dGhlbnRpY2FsbHlcXG5hdXRoZW50aWNhdGUvWEdORFNcXG5hdXRoZW50aWNhdGVkL1VcXG5hdXRoZW50aWNhdGlvbi9NXFxuYXV0aGVudGljaXR5L01cXG5hdXRob3IvU01ER1xcbmF1dGhvcmVzcy9NU1xcbmF1dGhvcmlhbFxcbmF1dGhvcml0YXJpYW4vTVNcXG5hdXRob3JpdGFyaWFuaXNtL01cXG5hdXRob3JpdGF0aXZlL1lQXFxuYXV0aG9yaXRhdGl2ZW5lc3MvTVxcbmF1dGhvcml0eS9TTVxcbmF1dGhvcml6YXRpb24vTVNcXG5hdXRob3JpemUvQUdEU1xcbmF1dGhvcml6ZWQvVVxcbmF1dGhvcnNoaXAvTVxcbmF1dGlzbS9NXFxuYXV0aXN0aWNcXG5hdXRvL01TXFxuYXV0b2JhaG4vU01cXG5hdXRvYmlvZ3JhcGhlci9TTVxcbmF1dG9iaW9ncmFwaGljXFxuYXV0b2Jpb2dyYXBoaWNhbC9ZXFxuYXV0b2Jpb2dyYXBoeS9TTVxcbmF1dG9jbGF2ZS9NU1xcbmF1dG9jcmFjeS9TTVxcbmF1dG9jcmF0L1NNXFxuYXV0b2NyYXRpY1xcbmF1dG9jcmF0aWNhbGx5XFxuYXV0b2Nyb3NzXFxuYXV0b2RpZGFjdC9TTVxcbmF1dG9ncmFwaC9NREdcXG5hdXRvZ3JhcGhzXFxuYXV0b2ltbXVuZVxcbmF1dG9pbW11bml0eS9NXFxuYXV0b21ha2VyL1NNXFxuYXV0b21hdGUvR05EU1xcbmF1dG9tYXRpYy9TTVxcbmF1dG9tYXRpY2FsbHlcXG5hdXRvbWF0aW9uL01cXG5hdXRvbWF0aXNtL01cXG5hdXRvbWF0aXplL0dEU1xcbmF1dG9tYXRvbi9TTVxcbmF1dG9tb2JpbGUvRFNNR1xcbmF1dG9tb3RpdmVcXG5hdXRvbm9taWNcXG5hdXRvbm9tb3VzL1lcXG5hdXRvbm9teS9NXFxuYXV0b3BpbG90L1NNXFxuYXV0b3BzeS9HRFNNXFxuYXV0b3N1Z2dlc3Rpb25cXG5hdXRvd29ya2VyL01TXFxuYXV0dW1uL1NNXFxuYXV0dW1uYWxcXG5hdXhcXG5hdXhpbGlhcnkvU01cXG5hdXhpbi9NXFxuYXYvUlpcXG5hdmFpbC9CR01EU1xcbmF2YWlsYWJpbGl0eS9VTVxcbmF2YWlsYWJsZS9VXFxuYXZhbGFuY2hlL1NNXFxuYXZhcmljZS9NXFxuYXZhcmljaW91cy9ZXFxuYXZhc3RcXG5hdmF0YXIvTVNcXG5hdmF1bnRcXG5hdmRwXFxuYXZlXFxuYXZlbmdlL1pHRFJTXFxuYXZlbmdlci9NXFxuYXZlbnVlL01TXFxuYXZlcmFnZS9NWUdEU1xcbmF2ZXJyZWRcXG5hdmVycmluZ1xcbmF2ZXJzZS9YTlxcbmF2ZXJzaW9uL01cXG5hdmVydC9HRFNcXG5hdmdcXG5hdmlhblxcbmF2aWFyeS9TTVxcbmF2aWF0aW9uL01cXG5hdmlhdG9yL01TXFxuYXZpYXRyaWNlc1xcbmF2aWF0cml4L01TXFxuYXZpZC9ZXFxuYXZpZGl0eS9NXFxuYXZpb25pYy9TXFxuYXZpb25pY3MvTVxcbmF2aXRhbWlub3Npcy9NXFxuYXZvY2Fkby9TTVxcbmF2b2NhdGlvbi9NU1xcbmF2b2NhdGlvbmFsXFxuYXZvaWQvU0RHQlxcbmF2b2lkYWJsZS9VXFxuYXZvaWRhYmx5L1VcXG5hdm9pZGFuY2UvTVxcbmF2b2lkYW50XFxuYXZvaXJkdXBvaXMvTVxcbmF2b3VjaC9EU0dcXG5hdm93L0VER1NcXG5hdm93YWwvRVNNXFxuYXZvd2VkL1lcXG5hdnVuY3VsYXIvWVxcbmF3XFxuYXdhaXQvR0RTXFxuYXdha2UvR1NcXG5hd2FrZW4vQUdEU1xcbmF3YWtlbmluZy9TTVxcbmF3YXJkL0dNRFNcXG5hd2FyZGVlL1NcXG5hd2FyZS9VUFxcbmF3YXJlbmVzcy9VTVxcbmF3YXNoXFxuYXdheVxcbmF3ZS9EU01HXFxuYXdlaWdoXFxuYXdlc29tZS9ZUFxcbmF3ZXNvbWVuZXNzL01cXG5hd2VzdHJ1Y2tcXG5hd2Z1bC9ZUFxcbmF3ZnVsbGVyXFxuYXdmdWxsZXN0XFxuYXdmdWxuZXNzL01cXG5hd2hpbGVcXG5hd2t3YXJkL1JZUFRcXG5hd2t3YXJkbmVzcy9NXFxuYXdsL1NNXFxuYXduL0dKU01cXG5hd25pbmcvTVxcbmF3b2tlXFxuYXdva2VuXFxuYXdyeVxcbmF4L01EU0dcXG5heGlhbC9ZXFxuYXhpb20vU01cXG5heGlvbWF0aWNcXG5heGlvbWF0aWNhbGx5XFxuYXhpcy9NXFxuYXhsZS9NU1xcbmF4bGV0cmVlL1NNXFxuYXhvbG90bC9TTVxcbmF4b24vTVNcXG5heWFoL01cXG5heWFoc1xcbmF5YXRvbGxhaC9NXFxuYXlhdG9sbGFoc1xcbmF5ZS9TTVxcbmF6YWxlYS9TTVxcbmF6aW11dGgvTVxcbmF6aW11dGhzXFxuYXp1cmUvU01cXG5iL0tEVFxcbmJhYS9TTURHXFxuYmFiYmxlL01aR0RSU1xcbmJhYmJsZXIvTVxcbmJhYmUvU01cXG5iYWJlbC9NU1xcbmJhYm9vbi9NU1xcbmJhYnVzaGthL1NNXFxuYmFieS9UR0RSU01cXG5iYWJ5aG9vZC9NXFxuYmFieWlzaFxcbmJhYnlzYXRcXG5iYWJ5c2l0L1NcXG5iYWJ5c2l0dGVyL01TXFxuYmFieXNpdHRpbmcvTVxcbmJhY2NhbGF1cmVhdGUvU01cXG5iYWNjYXJhdC9NXFxuYmFjY2hhbmFsL01TXFxuYmFjY2hhbmFsaWEvTVxcbmJhY2NoYW5hbGlhbi9NU1xcbmJhY2N5XFxuYmFjaGVsb3IvU01cXG5iYWNoZWxvcmhvb2QvTVxcbmJhY2lsbGFyeVxcbmJhY2lsbGlcXG5iYWNpbGx1cy9NXFxuYmFjay9TSlpHTURSXFxuYmFja2FjaGUvTVNcXG5iYWNrYmVuY2gvU1xcbmJhY2tiaXRcXG5iYWNrYml0ZS9aR1JTXFxuYmFja2JpdGVyL01cXG5iYWNrYml0dGVuXFxuYmFja2JvYXJkL1NNXFxuYmFja2JvbmUvTVNcXG5iYWNrYnJlYWtpbmdcXG5iYWNrY2hhdFxcbmJhY2tjbG90aFxcbmJhY2tjbG90aHNcXG5iYWNrY29tYi9EU0dcXG5iYWNrZGF0ZS9HRFNcXG5iYWNrZG9vclxcbmJhY2tkcm9wL01TXFxuYmFja2VyL01cXG5iYWNrZmllbGQvU01cXG5iYWNrZmlyZS9NR0RTXFxuYmFja2dhbW1vbi9NXFxuYmFja2dyb3VuZC9NUlpTXFxuYmFja2dyb3VuZGVyL01cXG5iYWNraGFuZC9NRFJTWkdcXG5iYWNraGFuZGVkL1lcXG5iYWNraGFuZGVyL01cXG5iYWNraG9lL01TXFxuYmFja2luZy9NXFxuYmFja2xhc2gvTVNcXG5iYWNrbGVzc1xcbmJhY2tsb2cvTVNcXG5iYWNrbG9nZ2VkXFxuYmFja2xvZ2dpbmdcXG5iYWNrcGFjay9aR01EUlNcXG5iYWNrcGFja2VyL01cXG5iYWNrcGFja2luZy9NXFxuYmFja3BlZGFsL1NER1xcbmJhY2tyZXN0L1NNXFxuYmFja3Jvb20vU1xcbmJhY2tzY3JhdGNoaW5nL01cXG5iYWNrc2VhdC9TTVxcbmJhY2tzaWRlL1NNXFxuYmFja3NsYXBwZXIvU01cXG5iYWNrc2xhcHBpbmcvTVxcbmJhY2tzbGFzaC9NU1xcbmJhY2tzbGlkXFxuYmFja3NsaWRlL1JTWkdcXG5iYWNrc2xpZGVyL01cXG5iYWNrc3BhY2UvRFNNR1xcbmJhY2tzcGluL01cXG5iYWNrc3RhYmJlci9NU1xcbmJhY2tzdGFiYmluZ1xcbmJhY2tzdGFnZS9NXFxuYmFja3N0YWlyL1NcXG5iYWNrc3RvcC9TTVxcbmJhY2tzdG9wcGVkXFxuYmFja3N0b3BwaW5nXFxuYmFja3N0b3J5L1NcXG5iYWNrc3RyZWV0L1NcXG5iYWNrc3RyZXRjaC9NU1xcbmJhY2tzdHJva2UvTUdEU1xcbmJhY2t0YWxrL01cXG5iYWNrdHJhY2svU0RHXFxuYmFja3VwL01TXFxuYmFja3dhcmQvUFNZXFxuYmFja3dhcmRuZXNzL01cXG5iYWNrd2FzaC9NXFxuYmFja3dhdGVyL1NNXFxuYmFja3dvb2RzL01cXG5iYWNrd29vZHNtYW4vTVxcbmJhY2t3b29kc21lblxcbmJhY2t5YXJkL1NNXFxuYmFjb24vTVxcbmJhY3RlcmlhL01cXG5iYWN0ZXJpYWxcXG5iYWN0ZXJpY2lkYWxcXG5iYWN0ZXJpY2lkZS9TTVxcbmJhY3RlcmlvbG9naWNcXG5iYWN0ZXJpb2xvZ2ljYWxcXG5iYWN0ZXJpb2xvZ2lzdC9TTVxcbmJhY3RlcmlvbG9neS9NXFxuYmFjdGVyaXVtL01cXG5iYWQvTVlQXFxuYmFkZGVyXFxuYmFkZGVzdFxcbmJhZGRpZS9NU1xcbmJhZGVcXG5iYWRnZS9NWlJTXFxuYmFkZ2VyL0dNRFxcbmJhZGluYWdlL01cXG5iYWRsYW5kcy9NXFxuYmFkbWFuL01cXG5iYWRtZW5cXG5iYWRtaW50b24vTVxcbmJhZG1vdXRoL0dEXFxuYmFkbW91dGhzXFxuYmFkbmVzcy9NXFxuYmFmZmxlL01aR0RSU0xcXG5iYWZmbGVtZW50L01cXG5iYWZmbGVyL01cXG5iYWcvU01cXG5iYWdhdGVsbGUvU01cXG5iYWdlbC9NU1xcbmJhZ2Z1bC9NU1xcbmJhZ2dhZ2UvTVxcbmJhZ2dlZFxcbmJhZ2dpZS9NXFxuYmFnZ2lseVxcbmJhZ2dpbmVzcy9NXFxuYmFnZ2luZ1xcbmJhZ2d5L1BUUlNcXG5iYWdwaXBlL01aUlNcXG5iYWdwaXBlci9NXFxuYmFndWV0dGUvTVNcXG5iYWhcXG5iYWh0L1NNXFxuYmFpbC9TQkdNRFxcbmJhaWxleS9TXFxuYmFpbGlmZi9TXFxuYmFpbGl3aWNrL01TXFxuYmFpbG91dC9TTVxcbmJhaWxzbWFuL01cXG5iYWlsc21lblxcbmJhaXJuL01TXFxuYmFpdC9TR01EXFxuYmFpemUvTVxcbmJha2UvRFJTTVpHXFxuYmFrZWQvVVxcbmJha2VyL01cXG5iYWtlcnkvU01cXG5iYWtlc2hvcC9NU1xcbmJha2xhdmEvTVxcbmJha3NoZWVzaC9NXFxuYmFsYWNsYXZhL01TXFxuYmFsYWxhaWthL01TXFxuYmFsYW5jZSdzXFxuYmFsYW5jZS9VRFNHXFxuYmFsYm9hL1NNXFxuYmFsY29ueS9TTVxcbmJhbGQvU1RHUERSWVxcbmJhbGRlcmRhc2gvTVxcbmJhbGRmYWNlZFxcbmJhbGRuZXNzL01cXG5iYWxkcmljL1NNXFxuYmFsZHkvU1xcbmJhbGUvRFJTTVpHXFxuYmFsZWVuL01cXG5iYWxlZnVsL1BZXFxuYmFsZWZ1bG5lc3MvTVxcbmJhbGVyL01cXG5iYWxrL1NHTURcXG5iYWxreS9SVFxcbmJhbGwvU0dNRFxcbmJhbGxhZC9TTVxcbmJhbGxhZGVlci9NU1xcbmJhbGxhZHJ5L01cXG5iYWxsYXN0L0dTTURcXG5iYWxsY29jay9NU1xcbmJhbGxlcmluYS9TTVxcbmJhbGxldC9TTVxcbmJhbGxldGljXFxuYmFsbGdhbWUvTVNcXG5iYWxsZ2lybC9TXFxuYmFsbGdvd24vU1xcbmJhbGxpc3RpYy9TXFxuYmFsbGlzdGljcy9NXFxuYmFsbG9vbi9TR01EXFxuYmFsbG9vbmlzdC9NU1xcbmJhbGxvdC9TTURHXFxuYmFsbHBhcmsvTVNcXG5iYWxscGxheWVyL01TXFxuYmFsbHBvaW50L01TXFxuYmFsbHJvb20vTVNcXG5iYWxscy9EU0dcXG5iYWxsc3kvUlRcXG5iYWxseVxcbmJhbGx5aG9vL1NNREdcXG5iYWxtL1NNXFxuYmFsbWluZXNzL01cXG5iYWxteS9SVFBcXG5iYWxvbmV5L01cXG5iYWxzYS9NU1xcbmJhbHNhbS9TTVxcbmJhbHNhbWljXFxuYmFsdXN0ZXIvU01cXG5iYWx1c3RyYWRlL01TXFxuYmFtYm9vL1NNXFxuYmFtYm9vemxlL0RTR1xcbmJhbi9TTVxcbmJhbmFsL1lcXG5iYW5hbGl0eS9TTVxcbmJhbmFuYS9TTVxcbmJhbmQnc1xcbmJhbmQvRVNHRFxcbmJhbmRhZ2UvRFNNR1xcbmJhbmRhbm5hL01TXFxuYmFuZGJveC9NU1xcbmJhbmRlYXUvTVxcbmJhbmRlYXV4XFxuYmFuZGl0L1NNXFxuYmFuZGl0cnkvTVxcbmJhbmRsZWFkZXIvU1xcbmJhbmRtYXN0ZXIvU01cXG5iYW5kb2xlZXIvU01cXG5iYW5kc21hbi9NXFxuYmFuZHNtZW5cXG5iYW5kc3RhbmQvU01cXG5iYW5kd2Fnb24vU01cXG5iYW5kd2lkdGhcXG5iYW5kd2lkdGhzXFxuYmFuZHkvRFJTVEdcXG5iYW5lL1NNXFxuYmFuZWZ1bFxcbmJhbmcvU0dNRFJcXG5iYW5nbGUvU01cXG5iYW5pXFxuYmFuaXNoL0dMRFNcXG5iYW5pc2htZW50L01cXG5iYW5pc3Rlci9TTVxcbmJhbmpvL01TXFxuYmFuam9pc3QvU01cXG5iYW5rL1NaR0JNRFJcXG5iYW5rYm9vay9TTVxcbmJhbmtjYXJkL1NNXFxuYmFua2VyL01cXG5iYW5raW5nL01cXG5iYW5rbm90ZS9TTVxcbmJhbmtyb2xsL1NHTURcXG5iYW5rcnVwdC9TR01EXFxuYmFua3J1cHRjeS9TTVxcbmJhbm5lZFxcbmJhbm5lci9TTVxcbmJhbm5pbmdcXG5iYW5ub2NrL01TXFxuYmFubnMvTVxcbmJhbnF1ZXQvWkdNRFJTXFxuYmFucXVldGVyL01cXG5iYW5xdWV0dGUvU01cXG5iYW5zaGVlL01TXFxuYmFudGFtL1NNXFxuYmFudGFtd2VpZ2h0L1NNXFxuYmFudGVyL0dTTURcXG5iYW50ZXJpbmcvWVxcbmJhbnlhbi9TTVxcbmJhbnphaS9TTVxcbmJhb2JhYi9TTVxcbmJhcC9TXFxuYmFwdGlzbS9NU1xcbmJhcHRpc21hbFxcbmJhcHRpc3QvU1xcbmJhcHRpc3RlcnkvU01cXG5iYXB0aXplL1pHRFJTXFxuYmFwdGl6ZWQvVVxcbmJhcHRpemVyL01cXG5iYXInc1xcbmJhci9FQ1VUU1xcbmJhcmIvU1pHTURSXFxuYmFyYmFjb2FcXG5iYXJiYXJpYW4vU01cXG5iYXJiYXJpYW5pc20vTVNcXG5iYXJiYXJpY1xcbmJhcmJhcmljYWxseVxcbmJhcmJhcmlzbS9TTVxcbmJhcmJhcml0eS9TTVxcbmJhcmJhcml6ZS9EU0dcXG5iYXJiYXJvdXMvWVxcbmJhcmJlY3VlL0RTTUdcXG5iYXJiZWwvU01cXG5iYXJiZWxsL01TXFxuYmFyYmVyL0dNRFxcbmJhcmJlcnJ5L1NNXFxuYmFyYmVyc2hvcC9NU1xcbmJhcmJpZS9TXFxuYmFyYml0dXJhdGUvU01cXG5iYXJid2lyZS9NXFxuYmFyY2Fyb2xlL1NNXFxuYmFyZC9TTVxcbmJhcmRpY1xcbmJhcmUvRFJTUFlHXFxuYmFyZWJhY2svRFxcbmJhcmVmYWNlZC9ZXFxuYmFyZWZvb3QvRFxcbmJhcmVoYW5kZWRcXG5iYXJlaGVhZGVkXFxuYmFyZWxlZ2dlZFxcbmJhcmVuZXNzL01cXG5iYXJmL1NHTURZXFxuYmFyZmx5L1NNXFxuYmFyZ2Fpbi9NRFJaR1NcXG5iYXJnYWluZXIvTVxcbmJhcmdlL01HRFNcXG5iYXJnZW1hbi9NXFxuYmFyZ2VtZW5cXG5iYXJob3AvU1xcbmJhcmhvcHBlZFxcbmJhcmhvcHBpbmdcXG5iYXJpc3RhL01TXFxuYmFyaXRvbmUvTVNcXG5iYXJpdW0vTVxcbmJhcmsnc1xcbmJhcmsvQ1NHRFxcbmJhcmtlZXAvWk1SU1xcbmJhcmtlZXBlci9NXFxuYmFya2VyL1NNXFxuYmFybGV5L01cXG5iYXJtYWlkL01TXFxuYmFybWFuL01cXG5iYXJtZW5cXG5iYXJteS9SVFxcbmJhcm4vU01cXG5iYXJuYWNsZS9NRFNcXG5iYXJuZXkvU1xcbmJhcm5zdG9ybS9TRFJaR1xcbmJhcm5zdG9ybWVyL01cXG5iYXJueWFyZC9TTVxcbmJhcm9tZXRlci9NU1xcbmJhcm9tZXRyaWNcXG5iYXJvbWV0cmljYWxseVxcbmJhcm9uL01TXFxuYmFyb25hZ2UvTVNcXG5iYXJvbmVzcy9NU1xcbmJhcm9uZXQvTVNcXG5iYXJvbmV0Y3kvU01cXG5iYXJvbmlhbFxcbmJhcm9ueS9TTVxcbmJhcm9xdWUvTVxcbmJhcnJhY2svTURHU1xcbmJhcnJhY3VkYS9TTVxcbmJhcnJhZ2UvTUdEU1xcbmJhcnJlL01HSkRTXFxuYmFycmVkL1VFQ1xcbmJhcnJlbC9HU01EXFxuYmFycmVuL1RQU01SXFxuYmFycmVubmVzcy9NXFxuYmFycmV0dGUvU01cXG5iYXJyaWNhZGUvTUdEU1xcbmJhcnJpZXIvTVNcXG5iYXJyaW5nL0VDVVxcbmJhcnJpby9TTVxcbmJhcnJpc3Rlci9NU1xcbmJhcnJvb20vTVNcXG5iYXJyb3cvU01cXG5iYXJ0ZW5kZXIvU01cXG5iYXJ0ZXIvWkdTTURSXFxuYmFydGVyZXIvTVxcbmJhcnlvbi9TTVxcbmJhc2FsL1lcXG5iYXNhbHQvTVxcbmJhc2FsdGljXFxuYmFzZSdzXFxuYmFzZS9DRFNMVEdcXG5iYXNlYmFsbC9TTVxcbmJhc2Vib2FyZC9NU1xcbmJhc2VsZXNzXFxuYmFzZWxpbmUvTVNcXG5iYXNlbHlcXG5iYXNlbWFuL01cXG5iYXNlbWVuXFxuYmFzZW1lbnQvQ01TXFxuYmFzZW5lc3MvTVxcbmJhc2VyXFxuYmFzaC9HTURTXFxuYmFzaGZ1bC9QWVxcbmJhc2hmdWxuZXNzL01cXG5iYXNoaW5nL01cXG5iYXNpYy9NU1xcbmJhc2ljYWxseVxcbmJhc2lsL01cXG5iYXNpbGljYS9NU1xcbmJhc2lsaXNrL01TXFxuYmFzaW4vTVNcXG5iYXNpbmZ1bC9NU1xcbmJhc2lzL01cXG5iYXNrL1NHRFxcbmJhc2tldC9TTVxcbmJhc2tldGJhbGwvTVNcXG5iYXNrZXRyeS9NXFxuYmFza2V0d29yay9NXFxuYmFzcXVlL1NcXG5iYXNzL01TXFxuYmFzc2V0L1NNXFxuYmFzc2luZXQvTVNcXG5iYXNzaXN0L01TXFxuYmFzc28vTVNcXG5iYXNzb29uL01TXFxuYmFzc29vbmlzdC9TTVxcbmJhc3N3b29kL01TXFxuYmFzdC9NXFxuYmFzdGFyZC9NU1xcbmJhc3RhcmRpemF0aW9uL01TXFxuYmFzdGFyZGl6ZS9HRFNcXG5iYXN0YXJkeS9NXFxuYmFzdGUvWkdOWERSU1xcbmJhc3Rlci9NXFxuYmFzdGlvbi9NXFxuYmF0L1NNXFxuYmF0Y2gvTURTR1xcbmJhdGUvS0FDR1NEXFxuYmF0aC9aR01EUlNcXG5iYXRoZS9NXFxuYmF0aGVyL01cXG5iYXRoZXRpY1xcbmJhdGhob3VzZS9NU1xcbmJhdGhpbmcvTVxcbmJhdGhtYXQvTVNcXG5iYXRob3MvTVxcbmJhdGhyb2JlL1NNXFxuYmF0aHJvb20vU01cXG5iYXRoc1xcbmJhdGh0dWIvTVNcXG5iYXRod2F0ZXJcXG5iYXRoeXNjYXBoZS9TTVxcbmJhdGh5c3BoZXJlL01TXFxuYmF0aWsvTVNcXG5iYXRpc3RlL01cXG5iYXRtYW4vTVxcbmJhdG1lblxcbmJhdG9uL01TXFxuYmF0c21hbi9NXFxuYmF0c21lblxcbmJhdHRhbGlvbi9TTVxcbmJhdHRlZFxcbmJhdHRlbi9HU01EXFxuYmF0dGVyL0paR1NNRFJcXG5iYXR0ZXJlci9NXFxuYmF0dGVyeS9TTVxcbmJhdHRpbmcvTVxcbmJhdHRsZS9MRFJTTVpHXFxuYmF0dGxlYXhlL01TXFxuYmF0dGxlZG9yZS9TTVxcbmJhdHRsZWRyZXNzXFxuYmF0dGxlZmllbGQvTVNcXG5iYXR0bGVmcm9udC9NU1xcbmJhdHRsZWdyb3VuZC9NU1xcbmJhdHRsZW1lbnQvU01cXG5iYXR0bGVyL01cXG5iYXR0bGVzaGlwL1NNXFxuYmF0dHkvUlRcXG5iYXVibGUvU01cXG5iYXVkL1NNXFxuYmF1eGl0ZS9NXFxuYmF3ZC9TTVxcbmJhd2RpbHlcXG5iYXdkaW5lc3MvTVxcbmJhd2R5L1BSVFxcbmJhd2wvU0dNRFxcbmJheS9TTURHXFxuYmF5YmVycnkvU01cXG5iYXlvbmV0L1NNREdcXG5iYXlvdS9NU1xcbmJhemFhci9TTVxcbmJhemlsbGlvbi9TXFxuYmF6b29rYS9TTVxcbmJibFxcbmJkcm1cXG5iZVxcbmJlYWNoL01EU0dcXG5iZWFjaGNvbWJlci9TTVxcbmJlYWNoZnJvbnRcXG5iZWFjaGhlYWQvTVNcXG5iZWFjaHdlYXIvTVxcbmJlYWNvbi9TTVxcbmJlYWQvU0dNRFxcbmJlYWRpbmcvTVxcbmJlYWRsZS9TTVxcbmJlYWR5L1JUXFxuYmVhZ2xlL1NNXFxuYmVhay9TWk1EUlxcbmJlYWtlci9NXFxuYmVhbS9TR01EXFxuYmVhbi9TR01EXFxuYmVhbmJhZy9NU1xcbmJlYW5mZWFzdC9TXFxuYmVhbmllL1NNXFxuYmVhbnBvbGUvTVNcXG5iZWFuc3Byb3V0L1NcXG5iZWFuc3RhbGsvTVNcXG5iZWFyL1NaR0JKTVJcXG5iZWFyYWJsZS9VXFxuYmVhcmFibHkvVVxcbmJlYXJkL01ER1NcXG5iZWFyZGxlc3NcXG5iZWFyZXIvTVxcbmJlYXJpbmcvTVxcbmJlYXJpc2gvUFlcXG5iZWFyaXNobmVzcy9NXFxuYmVhcmxpa2VcXG5iZWFyc2tpbi9NU1xcbmJlYXN0L01TXFxuYmVhc3RsaW5lc3MvTVxcbmJlYXN0bHkvVFBSTVxcbmJlYXQvU1pHQk1OUkpcXG5iZWF0YWJsZS9VXFxuYmVhdGVuL1VcXG5iZWF0ZXIvTVxcbmJlYXRpZmljXFxuYmVhdGlmaWNhbGx5XFxuYmVhdGlmaWNhdGlvbi9NXFxuYmVhdGlmeS9HWE5EU1xcbmJlYXRpbmcvTVxcbmJlYXRpdHVkZS9TTVxcbmJlYXRuaWsvTVNcXG5iZWF1L1NNXFxuYmVhdXQvTVNcXG5iZWF1dGVvdXMvWVxcbmJlYXV0aWNpYW4vU01cXG5iZWF1dGlmaWNhdGlvbi9NXFxuYmVhdXRpZmllci9NXFxuYmVhdXRpZnVsL1lcXG5iZWF1dGlmeS9ORFJTWkdcXG5iZWF1dHkvU01cXG5iZWF2ZXIvU0dNRFxcbmJlYm9wL01TXFxuYmVjYWxtL0dTRFxcbmJlY2FtZVxcbmJlY2F1c2VcXG5iZWNrL1NNXFxuYmVja29uL1NHRFxcbmJlY2xvdWQvR0RTXFxuYmVjb21lL1NcXG5iZWNvbWluZy9VWVxcbmJlY3F1ZXJlbC9TXFxuYmVkL1NNXFxuYmVkYXViL0dTRFxcbmJlZGF6emxlL0dEU0xcXG5iZWRhenpsZW1lbnQvTVxcbmJlZGJ1Zy9TTVxcbmJlZGNoYW1iZXIvU1xcbmJlZGNsb3RoZXMvTVxcbmJlZGRlZFxcbmJlZGRlclxcbmJlZGRpbmcvTVxcbmJlZGVjay9HU0RcXG5iZWRldmlsL0xHRFNcXG5iZWRldmlsbWVudC9NXFxuYmVkZmVsbG93L1NNXFxuYmVkaGVhZC9TXFxuYmVkaW0vU1xcbmJlZGltbWVkXFxuYmVkaW1taW5nXFxuYmVkaXplbi9HRFNcXG5iZWRsYW0vU01cXG5iZWRwYW4vU01cXG5iZWRwb3N0L1NNXFxuYmVkcmFnZ2xlL0dEU1xcbmJlZHJpZGRlblxcbmJlZHJvY2svU01cXG5iZWRyb2xsL1NNXFxuYmVkcm9vbS9TTVxcbmJlZHNpZGUvU01cXG5iZWRzaXQvU1xcbmJlZHNpdHRlci9TXFxuYmVkc29yZS9TTVxcbmJlZHNwcmVhZC9TTVxcbmJlZHN0ZWFkL1NNXFxuYmVkdGltZS9TTVxcbmJlZS9SU01aR0pcXG5iZWVicmVhZC9NXFxuYmVlY2gvTVNcXG5iZWVjaG51dC9NU1xcbmJlZWYvU0dNRFxcbmJlZWZidXJnZXIvU01cXG5iZWVmY2FrZS9NU1xcbmJlZWZpbmVzcy9NXFxuYmVlZnN0ZWFrL01TXFxuYmVlZnkvUlBUXFxuYmVlaGl2ZS9NU1xcbmJlZWtlZXBlci9NU1xcbmJlZWtlZXBpbmcvTVxcbmJlZWxpbmUvTVNcXG5iZWVuXFxuYmVlcC9TWkdNRFJcXG5iZWVwZXIvTVxcbmJlZXIvTVxcbmJlZXJ5L1RSXFxuYmVlc3dheC9NXFxuYmVldC9TTVxcbmJlZXRsZS9NR0RTXFxuYmVldHJvb3QvU1xcbmJlZXZlc1xcbmJlZmFsbC9TR05cXG5iZWZlbGxcXG5iZWZpdC9TXFxuYmVmaXR0ZWRcXG5iZWZpdHRpbmcvWVxcbmJlZm9nL1NcXG5iZWZvZ2dlZFxcbmJlZm9nZ2luZ1xcbmJlZm9yZVxcbmJlZm9yZWhhbmRcXG5iZWZvdWwvREdTXFxuYmVmcmllbmQvU0dEXFxuYmVmdWRkbGUvR0xEU1xcbmJlZnVkZGxlbWVudC9NXFxuYmVnL1NcXG5iZWdhblxcbmJlZ2F0XFxuYmVnZXQvU1xcbmJlZ2V0dGVyL1NcXG5iZWdldHRpbmdcXG5iZWdnYXIvTURZR1NcXG5iZWdnYXJ5L01cXG5iZWdnZWRcXG5iZWdnaW5nXFxuYmVnaW4vU1xcbmJlZ2lubmVyL1NNXFxuYmVnaW5uaW5nL01TXFxuYmVnb25lXFxuYmVnb25pYS9TTVxcbmJlZ290XFxuYmVnb3R0ZW5cXG5iZWdyaW1lL0RTR1xcbmJlZ3J1ZGdlL0RTR1xcbmJlZ3J1ZGdpbmcvWVxcbmJlZ3VpbGUvRFJTWkdMXFxuYmVndWlsZW1lbnQvTVxcbmJlZ3VpbGVyL01cXG5iZWd1aWxpbmcvWVxcbmJlZ3VpbmUvU01cXG5iZWd1bS9NU1xcbmJlZ3VuXFxuYmVoYWxmL01cXG5iZWhhbHZlc1xcbmJlaGF2ZS9HRFNcXG5iZWhhdmlvci9TTVxcbmJlaGF2aW9yYWwvWVxcbmJlaGF2aW9yaXNtL01cXG5iZWhhdmlvcmlzdC9NU1xcbmJlaGVhZC9ER1NcXG5iZWhlbGRcXG5iZWhlbW90aC9NXFxuYmVoZW1vdGhzXFxuYmVoZXN0L01TXFxuYmVoaW5kL01TXFxuYmVoaW5kaGFuZFxcbmJlaG9sZC9OUlpHU1xcbmJlaG9sZGVyL01cXG5iZWhvb3ZlL0RTR1xcbmJlaWdlL01cXG5iZWluZy9NXFxuYmVqZXdlbC9TREdcXG5iZWxhYm9yL1NER1xcbmJlbGF0ZWQvWVxcbmJlbGF5L0dEU1xcbmJlbGNoL0dNRFNcXG5iZWxlYWd1ZXIvR1NEXFxuYmVsZnJ5L1NNXFxuYmVsaWUvRFNcXG5iZWxpZWYvRVVNXFxuYmVsaWVmc1xcbmJlbGlldmFibGUvVVxcbmJlbGlldmFibHkvVVxcbmJlbGlldmUvRURSU1pHXFxuYmVsaWV2ZXIvRVVNU1xcbmJlbGlldmluZy9VXFxuYmVsaXR0bGUvTERTR1xcbmJlbGl0dGxlbWVudC9NXFxuYmVsbC9TR01EXFxuYmVsbGFkb25uYS9NXFxuYmVsbGJveS9TTVxcbmJlbGxlL01TXFxuYmVsbGVkL0FcXG5iZWxsZXRyaXN0L01TXFxuYmVsbGV0cmlzdGljXFxuYmVsbGhvcC9TTVxcbmJlbGxpY29zZVxcbmJlbGxpY29zaXR5L01cXG5iZWxsaWdlcmVuY2UvTVxcbmJlbGxpZ2VyZW5jeS9NXFxuYmVsbGlnZXJlbnQvTVlTXFxuYmVsbGluZy9BXFxuYmVsbG1hbi9NXFxuYmVsbG1lblxcbmJlbGxvdy9NREdTXFxuYmVsbHdldGhlci9NU1xcbmJlbGx5L0dEU01cXG5iZWxseWFjaGUvTUdEU1xcbmJlbGx5YnV0dG9uL1NNXFxuYmVsbHlmdWwvTVNcXG5iZWxvbmcvSkRHU1xcbmJlbG9uZ2luZy9NXFxuYmVsb3ZlZC9TTVxcbmJlbG93XFxuYmVsdC9TR01EXFxuYmVsdHdheS9TTVxcbmJlbHVnYS9NU1xcbmJlbHlpbmdcXG5iZW1pcmUvR0RTXFxuYmVtb2FuL0RHU1xcbmJlbXVzZS9MR0RTXFxuYmVtdXNlZC9ZXFxuYmVtdXNlbWVudC9NXFxuYmVuY2gvR01EU1xcbmJlbmNobWFyay9NU1xcbmJlbmQvQlNaR01SXFxuYmVuZGVyL01cXG5iZW5keS9UUlxcbmJlbmVhdGhcXG5iZW5lZGljdGluZVxcbmJlbmVkaWN0aW9uL1NNXFxuYmVuZWRpY3RvcnlcXG5iZW5lZmFjdGlvbi9TTVxcbmJlbmVmYWN0b3IvTVNcXG5iZW5lZmFjdHJlc3MvTVNcXG5iZW5lZmljZS9TTVxcbmJlbmVmaWNlbmNlL01cXG5iZW5lZmljZW50L1lcXG5iZW5lZmljaWFsL1lcXG5iZW5lZmljaWFyeS9TTVxcbmJlbmVmaXQvU01ER1xcbmJlbmV2b2xlbmNlL1NNXFxuYmVuZXZvbGVudC9ZXFxuYmVuaWdodGVkL1lcXG5iZW5pZ24vWVxcbmJlbmlnbmFudFxcbmJlbmlnbml0eS9NXFxuYmVudC9TTVxcbmJlbnRvbml0ZVxcbmJlbnR3b29kL01cXG5iZW51bWIvRFNHXFxuYmVuemVuZS9NXFxuYmVuemluZS9NXFxuYmVuenlsXFxuYmVxdWVhdGgvREdcXG5iZXF1ZWF0aHNcXG5iZXF1ZXN0L01TXFxuYmVyYXRlL0dEU1xcbmJlcmVhdmUvRFNMR1xcbmJlcmVhdmVtZW50L01TXFxuYmVyZWZ0XFxuYmVyZXQvTVNcXG5iZXJnL1NNXFxuYmVyaWJlcmkvTVxcbmJlcmsvU1xcbmJlcmtlbGl1bS9NXFxuYmVybS9TTVxcbmJlcnJ5L0dEU01cXG5iZXJyeWxpa2VcXG5iZXJzZXJrXFxuYmVydGgvR01EXFxuYmVydGhzXFxuYmVyeWwvTVNcXG5iZXJ5bGxpdW0vTVxcbmJlc2VlY2gvWkdSU1xcbmJlc2VlY2hlci9NXFxuYmVzZWVjaGluZy9ZXFxuYmVzZWVtL0RTR1xcbmJlc2V0L1NcXG5iZXNldHRpbmdcXG5iZXNpZGUvU1xcbmJlc2llZ2UvWkdEUlNcXG5iZXNpZWdlci9NXFxuYmVzbWVhci9EU0dcXG5iZXNtaXJjaC9HRFNcXG5iZXNvbS9NU1xcbmJlc290L1NcXG5iZXNvdHRlZFxcbmJlc290dGluZ1xcbmJlc291Z2h0XFxuYmVzcGFuZ2xlL0RTR1xcbmJlc3BhdHRlci9HU0RcXG5iZXNwZWFrL1NHXFxuYmVzcGVjdGFjbGVkXFxuYmVzcG9rZVxcbmJlc3Bva2VuXFxuYmVzdC9TR01EXFxuYmVzdGlhbC9ZXFxuYmVzdGlhbGl0eS9NXFxuYmVzdGlhcnkvU01cXG5iZXN0aXIvU1xcbmJlc3RpcnJlZFxcbmJlc3RpcnJpbmdcXG5iZXN0b3cvREdTXFxuYmVzdG93YWwvU01cXG5iZXN0cmV3L1NER1xcbmJlc3RyZXduXFxuYmVzdHJpZGRlblxcbmJlc3RyaWRlL1NHXFxuYmVzdHJvZGVcXG5iZXN0c2VsbGVyL01TXFxuYmVzdHNlbGxpbmdcXG5iZXQvU01cXG5iZXRhL1NNXFxuYmV0YWtlL0dTXFxuYmV0YWtlblxcbmJldGNoYVxcbmJldGVsL01cXG5iZXRoaW5rL1NHXFxuYmV0aG91Z2h0XFxuYmV0aWRlL0dEU1xcbmJldGltZXNcXG5iZXRva2VuL0dEU1xcbmJldG9va1xcbmJldHJheS9EUlpHU1xcbmJldHJheWFsL1NNXFxuYmV0cmF5ZXIvTVxcbmJldHJvdGgvREdcXG5iZXRyb3RoYWwvU01cXG5iZXRyb3RoZWQvTVxcbmJldHJvdGhzXFxuYmV0dGVyL01ER0xTXFxuYmV0dGVybWVudC9NXFxuYmV0dGluZ1xcbmJldHRvci9NU1xcbmJldHdlZW5cXG5iZXR3aXh0XFxuYmV2ZWwvR01EU1xcbmJldmVyYWdlL1NNXFxuYmV2dnkvU1xcbmJldnkvU01cXG5iZXdhaWwvREdTXFxuYmV3YXJlL0dEU1xcbmJld2hpc2tlcmVkXFxuYmV3aWdnZWRcXG5iZXdpbGRlci9MU0dEXFxuYmV3aWxkZXJpbmcvWVxcbmJld2lsZGVybWVudC9NXFxuYmV3aXRjaC9HTERTXFxuYmV3aXRjaGluZy9ZXFxuYmV3aXRjaG1lbnQvTVxcbmJleS9TTVxcbmJleW9uZFxcbmJlemVsL01TXFxuYmZcXG5iaGFqaVxcbmJpL1NNUlpcXG5iaWFubnVhbC9ZXFxuYmlhcy9HTURTXFxuYmlhc2VkL1VcXG5iaWF0aGxvbi9TTVxcbmJpYi9TTVxcbmJpYmxlL01TXFxuYmlibGljYWxcXG5iaWJsaW9ncmFwaGVyL01TXFxuYmlibGlvZ3JhcGhpY1xcbmJpYmxpb2dyYXBoaWNhbC9ZXFxuYmlibGlvZ3JhcGh5L1NNXFxuYmlibGlvcGhpbGUvU01cXG5iaWJ1bG91c1xcbmJpY2FtZXJhbFxcbmJpY2FtZXJhbGlzbS9NXFxuYmljYXJiL01TXFxuYmljYXJib25hdGUvTVNcXG5iaWNlbnRlbmFyeS9TTVxcbmJpY2VudGVubmlhbC9TTVxcbmJpY2VwL01TXFxuYmljZXBzL01cXG5iaWNrZXIvTURSWkdTXFxuYmlja2VyZXIvTVxcbmJpY29uY2F2ZVxcbmJpY29udmV4XFxuYmljdXNwaWQvTVNcXG5iaWN5Y2xlL0RSU01aR1xcbmJpY3ljbGVyL01cXG5iaWN5Y2xpc3QvU01cXG5iaWQvU01HXFxuYmlkZGFibGVcXG5iaWRkZW4vVVxcbmJpZGRlci9NU1xcbmJpZGRpbmcvTVxcbmJpZGR5L1NNXFxuYmlkZS9TXFxuYmlkZXQvTVNcXG5iaWRpcmVjdGlvbmFsL1lcXG5iaWVubmlhbC9NWVNcXG5iaWVubml1bS9NU1xcbmJpZXIvTVxcbmJpZmYvU0dEXFxuYmlmb2NhbC9TXFxuYmlmb2NhbHMvTVxcbmJpZnVyY2F0ZS9YRFNHTlxcbmJpZnVyY2F0aW9uL01cXG5iaWcvUFxcbmJpZ2FtaXN0L1NNXFxuYmlnYW1vdXNcXG5iaWdhbXkvTVxcbmJpZ2dlclxcbmJpZ2dlc3RcXG5iaWdnaWUvTVNcXG5iaWdnaXNoXFxuYmlnaGVhZC9TTVxcbmJpZ2hlYXJ0ZWQvUFxcbmJpZ2hlYXJ0ZWRuZXNzL01cXG5iaWdob3JuL1NNXFxuYmlnaHQvTVNcXG5iaWdtb3V0aC9NXFxuYmlnbW91dGhzXFxuYmlnbmVzcy9NXFxuYmlnb3QvTURTXFxuYmlnb3RyeS9TTVxcbmJpZ3dpZy9NU1xcbmJpam91L01cXG5iaWpvdXhcXG5iaWtlL0RSU01aR1xcbmJpa2VyL01cXG5iaWtpbmkvTVNcXG5iaWxhYmlhbC9NU1xcbmJpbGF0ZXJhbC9ZXFxuYmlsYmVycnkvU1xcbmJpbGUvTVxcbmJpbGdlL01TXFxuYmlsaW5ndWFsL1NNWVxcbmJpbGluZ3VhbGlzbS9NXFxuYmlsaW91cy9QXFxuYmlsaW91c25lc3MvTVxcbmJpbGlydWJpblxcbmJpbGsvU1pHRFJcXG5iaWxrZXIvTVxcbmJpbGwvU0JKR01EXFxuYmlsbGJvYXJkL01TXFxuYmlsbGV0L0dNRFNcXG5iaWxsZm9sZC9TTVxcbmJpbGxob29rL1NcXG5iaWxsaWFyZC9TXFxuYmlsbGlhcmRzL01cXG5iaWxsaW5nL01cXG5iaWxsaW5nc2dhdGUvTVxcbmJpbGxpb24vTUhTXFxuYmlsbGlvbmFpcmUvU01cXG5iaWxsaW9udGgvTVxcbmJpbGxpb250aHNcXG5iaWxsb3cvR01EU1xcbmJpbGxvd3lcXG5iaWxseS9TTVxcbmJpbGx5Y2FuL1NcXG5iaW1iby9NU1xcbmJpbWV0YWxsaWMvU01cXG5iaW1ldGFsbGlzbS9NXFxuYmltb2RhbFxcbmJpbW9udGhseS9TTVxcbmJpbi9TTVxcbmJpbmFyeS9TTVxcbmJpbmF1cmFsXFxuYmluZCdzXFxuYmluZC9BVUdTXFxuYmluZGVyL01TXFxuYmluZGVyeS9TTVxcbmJpbmRpbmcvTVNcXG5iaW5kd2VlZC9NXFxuYmluZ2UvTURTXFxuYmluZ28vTVxcbmJpbm1hblxcbmJpbm1lblxcbmJpbm5hY2xlL1NNXFxuYmlubmVkXFxuYmlubmluZ1xcbmJpbm9jdWxhci9NU1xcbmJpbm9taWFsL1NNXFxuYmlvL1NNXFxuYmlvY2hlbWljYWwvU01ZXFxuYmlvY2hlbWlzdC9NU1xcbmJpb2NoZW1pc3RyeS9NXFxuYmlvZGVncmFkYWJpbGl0eS9NXFxuYmlvZGVncmFkZS9EU0dCXFxuYmlvZGl2ZXJzaXR5L01cXG5iaW9ldGhpY3MvTVxcbmJpb2ZlZWRiYWNrL01cXG5iaW9maWxtL01TXFxuYmlvZ1xcbmJpb2dyYXBoZXIvU01cXG5iaW9ncmFwaGljXFxuYmlvZ3JhcGhpY2FsL1lcXG5iaW9ncmFwaHkvU01cXG5iaW9sXFxuYmlvbG9naWNcXG5iaW9sb2dpY2FsL1lcXG5iaW9sb2dpc3QvTVNcXG5iaW9sb2d5L01cXG5iaW9tYXJrZXIvTVNcXG5iaW9tYXNzL01cXG5iaW9tZWRpY2FsXFxuYmlvbmljL1NcXG5iaW9uaWNhbGx5XFxuYmlvbmljcy9NXFxuYmlvcGh5c2ljYWxcXG5iaW9waHlzaWNpc3QvTVNcXG5iaW9waHlzaWNzL01cXG5iaW9waWMvTVNcXG5iaW9wc3kvR0RTTVxcbmJpb3JlYWN0b3IvU1xcbmJpb3JoeXRobS9NU1xcbmJpb3NlbnNvci9TXFxuYmlvc3BoZXJlL1NNXFxuYmlvc3ludGhlc2lzXFxuYmlvdGVjaFxcbmJpb3RlY2hub2xvZ2ljYWxcXG5iaW90ZWNobm9sb2d5L01cXG5iaW90aW4vTVxcbmJpcGFydGlzYW5cXG5iaXBhcnRpc2Fuc2hpcC9NXFxuYmlwYXJ0aXRlXFxuYmlwZWQvTVNcXG5iaXBlZGFsXFxuYmlwbGFuZS9NU1xcbmJpcG9sYXJcXG5iaXBvbGFyaXR5L01cXG5iaXJhY2lhbFxcbmJpcmNoL0dNRFNcXG5iaXJkL1NaR01EUlxcbmJpcmRiYXRoL01cXG5iaXJkYmF0aHNcXG5iaXJkYnJhaW4vU01EXFxuYmlyZGNhZ2UvU1xcbmJpcmRlci9NXFxuYmlyZGhvdXNlL01TXFxuYmlyZGllL01EU1xcbmJpcmRpZWluZ1xcbmJpcmRsaWtlXFxuYmlyZGxpbWUvTVxcbmJpcmRzZWVkL01cXG5iaXJkc29uZ1xcbmJpcmR3YXRjaGVyL1NNXFxuYmlyZHlpbmdcXG5iaXJldHRhL1NNXFxuYmlydGgvWkdNRFJcXG5iaXJ0aGRheS9NU1xcbmJpcnRoZXIvTVxcbmJpcnRobWFyay9NU1xcbmJpcnRocGxhY2UvTVNcXG5iaXJ0aHJhdGUvTVNcXG5iaXJ0aHJpZ2h0L01TXFxuYmlydGhzL0FcXG5iaXJ0aHN0b25lL1NNXFxuYmlzY3VpdC9TTVxcbmJpc2VjdC9ER1NcXG5iaXNlY3Rpb24vTVNcXG5iaXNlY3Rvci9TTVxcbmJpc2V4dWFsL01ZU1xcbmJpc2V4dWFsaXR5L01cXG5iaXNob3AvTVNcXG5iaXNob3ByaWMvU01cXG5iaXNtdXRoL01cXG5iaXNvbi9NXFxuYmlzcXVlL01cXG5iaXN0cm8vTVNcXG5iaXQvQ1NNR1xcbmJpdGNoL0dNRFNcXG5iaXRjaGlseVxcbmJpdGNoaW5lc3MvTVxcbmJpdGNoeS9QUlRcXG5iaXRjb2luL1NNXFxuYml0ZS9SU01aXFxuYml0ZXIvTVxcbmJpdGluZy9ZXFxuYml0bWFwL1NcXG5iaXR0ZW5cXG5iaXR0ZXIvUE1SWVRTXFxuYml0dGVybi9TTVxcbmJpdHRlcm5lc3MvTVxcbmJpdHRlcnMvTVxcbmJpdHRlcnN3ZWV0L01TXFxuYml0dHkvVFJcXG5iaXR1bWVuL01cXG5iaXR1bWlub3VzXFxuYml2YWxlbnRcXG5iaXZhbHZlL1NNXFxuYml2b3VhYy9NU1xcbmJpdm91YWNrZWRcXG5iaXZvdWFja2luZ1xcbmJpd2Vla2x5L1NNXFxuYml5ZWFybHlcXG5iaXovTVxcbmJpemFycmUvWVxcbmJrXFxuYmwvREdcXG5ibGFiL1NNXFxuYmxhYmJlZFxcbmJsYWJiZXIvREdTXFxuYmxhYmJlcm1vdXRoL01cXG5ibGFiYmVybW91dGhzXFxuYmxhYmJpbmdcXG5ibGFjay9QWFRHTUROUllTXFxuYmxhY2thbW9vci9NU1xcbmJsYWNrYmFsbC9TR01EXFxuYmxhY2tiZXJyeS9HU01cXG5ibGFja2JpcmQvU01cXG5ibGFja2JvYXJkL01TXFxuYmxhY2tjdXJyYW50L1NcXG5ibGFja2VuL0RHXFxuYmxhY2tmYWNlXFxuYmxhY2tndWFyZC9TTVxcbmJsYWNraGVhZC9NU1xcbmJsYWNraW5nL01cXG5ibGFja2lzaFxcbmJsYWNramFjay9NREdTXFxuYmxhY2tsZWcvU1xcbmJsYWNrbGlzdC9NRFNHXFxuYmxhY2ttYWlsL01EUlNaR1xcbmJsYWNrbWFpbGVyL01cXG5ibGFja25lc3MvTVxcbmJsYWNrb3V0L1NNXFxuYmxhY2tzbWl0aC9NXFxuYmxhY2tzbWl0aHNcXG5ibGFja3NuYWtlL1NNXFxuYmxhY2t0aG9ybi9TTVxcbmJsYWNrdG9wL1NNXFxuYmxhY2t0b3BwZWRcXG5ibGFja3RvcHBpbmdcXG5ibGFkZGVyL01TXFxuYmxhZGUvTURTXFxuYmxhZy9TXFxuYmxhZ2dlZFxcbmJsYWdnaW5nXFxuYmxhaC9NXFxuYmxhaHMvTVxcbmJsYW1lL0JNR0RSU1xcbmJsYW1lbGVzcy9ZUFxcbmJsYW1lbGVzc25lc3MvTVxcbmJsYW1ld29ydGhpbmVzcy9NXFxuYmxhbWV3b3J0aHkvUFxcbmJsYW1tb1xcbmJsYW5jaC9HRFNcXG5ibGFuY21hbmdlL01TXFxuYmxhbmQvUFRSWVxcbmJsYW5kaXNoL0RTTEdcXG5ibGFuZGlzaG1lbnQvU01cXG5ibGFuZG5lc3MvTVxcbmJsYW5rL1RHUE1EUllTXFxuYmxhbmtldC9HTURTXFxuYmxhbmtuZXNzL01cXG5ibGFyZS9NR0RTXFxuYmxhcm5leS9TTURHXFxuYmxhc2VcXG5ibGFzcGhlbWUvWkdEUlNcXG5ibGFzcGhlbWVyL01cXG5ibGFzcGhlbW91cy9ZXFxuYmxhc3BoZW15L1NNXFxuYmxhc3QvWkdNRFJTXFxuYmxhc3Rlci9NXFxuYmxhc3RvZmYvTVNcXG5ibGF0L1NcXG5ibGF0YW5jeS9TTVxcbmJsYXRhbnQvWVxcbmJsYXRoZXIvU01ER1xcbmJsYXplL01aR0RSU1xcbmJsYXplci9NXFxuYmxhem9uL01ER1NcXG5ibGRnXFxuYmxlYWNoL01EUlNaR1xcbmJsZWFjaGVkL1VcXG5ibGVhY2hlci9NXFxuYmxlYWsvVFBSWVxcbmJsZWFrbmVzcy9NXFxuYmxlYXJcXG5ibGVhcmlseVxcbmJsZWFyaW5lc3MvTVxcbmJsZWFyeS9QUlRcXG5ibGVhdC9HTURTXFxuYmxlZWQvWkdSU1xcbmJsZWVkZXIvTVxcbmJsZWVkaW5nL01cXG5ibGVlcC9aR01EUlNcXG5ibGVlcGVyL01cXG5ibGVtaXNoL0dNRFNcXG5ibGVtaXNoZWQvVVxcbmJsZW5jaC9EU0dcXG5ibGVuZC9aR01EUlNcXG5ibGVuZGVyL01cXG5ibGVzcy9HRFNKXFxuYmxlc3NlZC9ZUFxcbmJsZXNzZWRuZXNzL01cXG5ibGVzc2luZy9NXFxuYmxldGNoXFxuYmxld1xcbmJsaWdodC9aR01EUlNcXG5ibGltZXlcXG5ibGltcC9NU1xcbmJsaW1waXNoXFxuYmxpbmQvUFpUR01EUllTXFxuYmxpbmRlci9NXFxuYmxpbmRmb2xkL1NNREdcXG5ibGluZGluZy9ZXFxuYmxpbmRuZXNzL01cXG5ibGluZHNpZGUvRFNHXFxuYmxpbmkvTVNcXG5ibGluay9aR01EUlNcXG5ibGlua2VyL01ER1xcbmJsaW50ei9NU1xcbmJsaW50emUvTVxcbmJsaXAvU01cXG5ibGlzcy9NXFxuYmxpc3NmdWwvWVBcXG5ibGlzc2Z1bG5lc3MvTVxcbmJsaXN0ZXIvR01EU1xcbmJsaXN0ZXJpbmcvWVxcbmJsaXN0ZXJ5XFxuYmxpdGhlL1BZVFJcXG5ibGl0aGVuZXNzL01cXG5ibGl0aGVyL0dcXG5ibGl0aGVzb21lXFxuYmxpdHovR01EU1xcbmJsaXR6a3JpZWcvTVNcXG5ibGl2ZXQvU1xcbmJsaXp6YXJkL1NNXFxuYmxvYXQvWkdEUlNcXG5ibG9hdHdhcmVcXG5ibG9iL1NNXFxuYmxvYmJlZFxcbmJsb2JiaW5nXFxuYmxvYy9TTVxcbmJsb2NrJ3NcXG5ibG9jay9VR0RTXFxuYmxvY2thZGUvTVpHRFJTXFxuYmxvY2thZGVyL01cXG5ibG9ja2FnZS9NU1xcbmJsb2NrYnVzdGVyL1NNXFxuYmxvY2tidXN0aW5nL01cXG5ibG9ja2NoYWluL01TXFxuYmxvY2tlci9NU1xcbmJsb2NraGVhZC9TTVxcbmJsb2NraG91c2UvTVNcXG5ibG9nL1NNXFxuYmxvZ2dlZFxcbmJsb2dnZXIvTVNcXG5ibG9nZ2luZ1xcbmJsb2tlL01TXFxuYmxva2lzaFxcbmJsb25kL1BUTVJTXFxuYmxvbmRlL01TXFxuYmxvbmRpc2hcXG5ibG9uZG5lc3MvTVxcbmJsb29kL0dNRFNcXG5ibG9vZGJhdGgvTVxcbmJsb29kYmF0aHNcXG5ibG9vZGN1cmRsaW5nXFxuYmxvb2Rob3VuZC9TTVxcbmJsb29kaWx5XFxuYmxvb2RpbmVzcy9NXFxuYmxvb2RsZXNzL1lQXFxuYmxvb2RsZXNzbmVzcy9NXFxuYmxvb2RsZXR0aW5nL01cXG5ibG9vZGxpbmUvU01cXG5ibG9vZG1vYmlsZS9NU1xcbmJsb29kc2hlZC9NXFxuYmxvb2RzaG90XFxuYmxvb2RzdGFpbi9TTURcXG5ibG9vZHN0b2NrL01cXG5ibG9vZHN0cmVhbS9TTVxcbmJsb29kc3Vja2VyL1NNXFxuYmxvb2RzdWNraW5nXFxuYmxvb2R0aGlyc3RpbHlcXG5ibG9vZHRoaXJzdGluZXNzL01cXG5ibG9vZHRoaXJzdHkvUlBUXFxuYmxvb2R5L1BUR0RSU1xcbmJsb29tL1pHTURSU1xcbmJsb29tZXIvTVxcbmJsb29wL1pHTURSU1xcbmJsb29wZXIvTVxcbmJsb3Nzb20vR01EU1xcbmJsb3Nzb215XFxuYmxvdC9TTVxcbmJsb3RjaC9HTURTXFxuYmxvdGNoeS9UUlxcbmJsb3R0ZWRcXG5ibG90dGVyL01TXFxuYmxvdHRpbmdcXG5ibG90dG9cXG5ibG91c2UvTUdEU1xcbmJsb3cvU1pHTVJcXG5ibG93ZXIvTVxcbmJsb3dmbHkvU01cXG5ibG93Z3VuL01TXFxuYmxvd2hhcmQvTVNcXG5ibG93aG9sZS9TXFxuYmxvd2pvYi9TTVxcbmJsb3dsYW1wL1NcXG5ibG93blxcbmJsb3dvdXQvU01cXG5ibG93cGlwZS9TTVxcbmJsb3d0b3JjaC9NU1xcbmJsb3d1cC9NU1xcbmJsb3d5L1RSXFxuYmxvd3p5L1JUXFxuYmx1YmJlci9HU01EXFxuYmx1YmJlcnlcXG5ibHVkZ2Vvbi9NREdTXFxuYmx1ZS9EUlNQTVRHXFxuYmx1ZWJlbGwvTVNcXG5ibHVlYmVycnkvU01cXG5ibHVlYmlyZC9NU1xcbmJsdWVib25uZXQvU01cXG5ibHVlYm90dGxlL1NNXFxuYmx1ZWZpc2gvTVNcXG5ibHVlZ2lsbC9NU1xcbmJsdWVncmFzcy9NXFxuYmx1ZWlzaFxcbmJsdWVqYWNrZXQvU01cXG5ibHVlamVhbnMvTVxcbmJsdWVuZXNzL01cXG5ibHVlbm9zZS9NU1xcbmJsdWVwb2ludC9NU1xcbmJsdWVwcmludC9NREdTXFxuYmx1ZXN0b2NraW5nL1NNXFxuYmx1ZXN5L1JUXFxuYmx1ZXQvTVNcXG5ibHVmZi9aVEdQTURSWVNcXG5ibHVmZmVyL01cXG5ibHVmZm5lc3MvTVxcbmJsdWluZy9NXFxuYmx1aXNoXFxuYmx1bmRlci9NRFJaR1NcXG5ibHVuZGVyYnVzcy9NU1xcbmJsdW5kZXJlci9NXFxuYmx1bnQvUFRHRFJZU1xcbmJsdW50bmVzcy9NXFxuYmx1ci9TTVxcbmJsdXJiL01TXFxuYmx1cnJlZFxcbmJsdXJyaW5lc3MvTVxcbmJsdXJyaW5nXFxuYmx1cnJ5L1RSUFxcbmJsdXJ0L0dEU1xcbmJsdXNoL1pHTURSU1xcbmJsdXNoZXIvTVxcbmJsdXN0ZXIvTURSU1pHXFxuYmx1c3RlcmVyL01cXG5ibHVzdGVyb3VzXFxuYmx1c3RlcnlcXG5ibHZkXFxuYm9hL1NNXFxuYm9hci9TTVxcbmJvYXJkL1pHTURSU1xcbmJvYXJkZXIvTVxcbmJvYXJkaW5nL01cXG5ib2FyZGluZ2hvdXNlL01TXFxuYm9hcmRyb29tL01TXFxuYm9hcmR3YWxrL01TXFxuYm9hc3QvWkdNRFJTXFxuYm9hc3Rlci9NXFxuYm9hc3RmdWwvUFlcXG5ib2FzdGZ1bG5lc3MvTVxcbmJvYXQvU1pHTURSXFxuYm9hdGVyL01cXG5ib2F0aG91c2UvTVNcXG5ib2F0aW5nL01cXG5ib2F0bG9hZC9TXFxuYm9hdG1hbi9NXFxuYm9hdG1lblxcbmJvYXRzd2Fpbi9TTVxcbmJvYXR5YXJkL1NcXG5ib2IvU01cXG5ib2JiZWRcXG5ib2JiaW4vTVNcXG5ib2JiaW5nXFxuYm9iYmxlL01HRFNcXG5ib2JieS9TTVxcbmJvYmJ5c294ZXIvU01cXG5ib2JjYXQvTVNcXG5ib2JvbGluay9TTVxcbmJvYnNsZWQvU01cXG5ib2JzbGVkZGVkXFxuYm9ic2xlZGRlci9NU1xcbmJvYnNsZWRkaW5nXFxuYm9ic2xlaWdoL01cXG5ib2JzbGVpZ2hzXFxuYm9idGFpbC9TTVxcbmJvYndoaXRlL01TXFxuYm9jY2llL01cXG5ib2NrL01cXG5ib2QvU01ER1xcbmJvZGFjaW91c1xcbmJvZGUvU1xcbmJvZGVnYS9NU1xcbmJvZGdlL0dEU1xcbmJvZGljZS9NU1xcbmJvZGlseVxcbmJvZGtpbi9NU1xcbmJvZHkvRFNNXFxuYm9keWJ1aWxkZXIvU01cXG5ib2R5YnVpbGRpbmcvTVxcbmJvZHlndWFyZC9NU1xcbmJvZHlzdWl0L1NNXFxuYm9keXdvcmsvTVxcbmJvZmZpbi9TXFxuYm9mZm9cXG5ib2cvU01cXG5ib2dhXFxuYm9nZXkvR01EU1xcbmJvZ2V5bWFuL01cXG5ib2dleW1lblxcbmJvZ2dlZFxcbmJvZ2dpbmdcXG5ib2dnbGUvR0RTXFxuYm9nZ3kvVFJcXG5ib2dpZS9NU1xcbmJvZ29uXFxuYm9nb3NpdHlcXG5ib2d1c1xcbmJvZ3ltYW4vTVxcbmJvZ3ltZW5cXG5ib2hlbWlhbi9TTVxcbmJvaGVtaWFuaXNtL01cXG5ib2lsL1NKWkdNRFJcXG5ib2lsZXIvTVxcbmJvaWxlcm1ha2VyL1NNXFxuYm9pbGVycGxhdGUvTVxcbmJvaW5rL0dEU1xcbmJvaXN0ZXJvdXMvWVBcXG5ib2lzdGVyb3VzbmVzcy9NXFxuYm9sYS9TTVxcbmJvbGQvUFRSWVxcbmJvbGRmYWNlL0RNXFxuYm9sZG5lc3MvTVxcbmJvbGUvU01cXG5ib2xlcm8vTVNcXG5ib2xpdmFyL01TXFxuYm9saXZhcmVzXFxuYm9sbC9TTVxcbmJvbGxhcmQvU1xcbmJvbGxpeC9HTURTXFxuYm9sbG9ja2luZy9TXFxuYm9sbG9ja3NcXG5ib2xvZ25hL01cXG5ib2xzaGllXFxuYm9sc3Rlci9HTURTXFxuYm9sdCdzXFxuYm9sdC9VU0dEXFxuYm9sdGhvbGUvU1xcbmJvbHVzL01TXFxuYm9tYi9TSlpHTURSXFxuYm9tYmFyZC9HRExTXFxuYm9tYmFyZGllci9NU1xcbmJvbWJhcmRtZW50L1NNXFxuYm9tYmFzdC9NXFxuYm9tYmFzdGljXFxuYm9tYmFzdGljYWxseVxcbmJvbWJlci9NXFxuYm9tYnByb29mXFxuYm9tYnNoZWxsL1NNXFxuYm9tYnNpdGUvU1xcbmJvbmFuemEvTVNcXG5ib25ib24vTVNcXG5ib25jZS9TXFxuYm9uZC9TR01EXFxuYm9uZGFnZS9NXFxuYm9uZGhvbGRlci9NU1xcbmJvbmRpbmcvTVxcbmJvbmRtYW4vTVxcbmJvbmRtZW5cXG5ib25kc21hbi9NXFxuYm9uZHNtZW5cXG5ib25kd29tYW4vTVxcbmJvbmR3b21lblxcbmJvbmUvRFJTTVpHXFxuYm9uZWhlYWQvU01EXFxuYm9uZWxlc3NcXG5ib25lci9NXFxuYm9uZXNoYWtlci9TXFxuYm9uZXlhcmRcXG5ib25maXJlL01TXFxuYm9uZy9TR01EXFxuYm9uZ28vTVNcXG5ib25ob21pZS9NXFxuYm9uaW5lc3MvTVxcbmJvbml0by9NU1xcbmJvbmsvU1pHRFxcbmJvbm5ldC9NU1xcbmJvbm55L1RSXFxuYm9ub2JvL01TXFxuYm9uc2FpL01cXG5ib251cy9NU1xcbmJvbnkvUFRSXFxuYm9vL1NNREhHXFxuYm9vYi9TR01EXFxuYm9vYnkvU01cXG5ib29kbGUvTVNcXG5ib29nZXIvU1xcbmJvb2dleW1hbi9NXFxuYm9vZ2V5bWVuXFxuYm9vZ2llL01EU1xcbmJvb2dpZWluZ1xcbmJvb2dpZW1hbi9NXFxuYm9vaG9vL0dNRFNcXG5ib29rL1NCSkdNRFxcbmJvb2tiaW5kZXIvU01cXG5ib29rYmluZGVyeS9TTVxcbmJvb2tiaW5kaW5nL01cXG5ib29rY2FzZS9NU1xcbmJvb2tlbmQvTVNcXG5ib29raWUvTVNcXG5ib29raW5nL01cXG5ib29raXNoXFxuYm9va2tlZXBlci9NU1xcbmJvb2trZWVwaW5nL01cXG5ib29rbGV0L01TXFxuYm9va21ha2VyL1NNXFxuYm9va21ha2luZy9NXFxuYm9va21hcmsvU01ER1xcbmJvb2ttb2JpbGUvU01cXG5ib29rcGxhdGUvTVNcXG5ib29rc2VsbGVyL01TXFxuYm9va3NoZWxmL01cXG5ib29rc2hlbHZlc1xcbmJvb2tzaG9wL1NNXFxuYm9va3N0YWxsL1NcXG5ib29rc3RvcmUvTVNcXG5ib29rd29ybS9TTVxcbmJvb2xlYW5cXG5ib29tL1NaR01EUlxcbmJvb21ib3gvTVNcXG5ib29tZXJhbmcvTURHU1xcbmJvb24vU01cXG5ib29uZG9ja3MvTVxcbmJvb25kb2dnbGUvTVpHRFJTXFxuYm9vbmRvZ2dsZXIvTVxcbmJvb25pZXMvTVxcbmJvb3IvU01cXG5ib29yaXNoL1BZXFxuYm9vcmlzaG5lc3MvTVNcXG5ib29zdC9aR01EUlNcXG5ib29zdGVyL01cXG5ib290J3NcXG5ib290L0FTR0RcXG5ib290YmxhY2svU01cXG5ib290ZWUvTVNcXG5ib290aC9NXFxuYm9vdGhzXFxuYm9vdGxhY2UvU1xcbmJvb3RsZWcvTVNcXG5ib290bGVnZ2VkXFxuYm9vdGxlZ2dlci9NU1xcbmJvb3RsZWdnaW5nL01cXG5ib290bGVzc1xcbmJvb3RzdHJhcC9NU1xcbmJvb3RzdHJhcHBlZFxcbmJvb3RzdHJhcHBpbmdcXG5ib290eS9TTVxcbmJvb3plL01aR0RSU1xcbmJvb3plci9NXFxuYm9venkvVFJcXG5ib3AvU01cXG5ib3BwZWRcXG5ib3BwaW5nXFxuYm9yYXgvTVxcbmJvcmRlbGxvL01TXFxuYm9yZGVyL0dNRFNcXG5ib3JkZXJsYW5kL01TXFxuYm9yZGVybGluZS9NU1xcbmJvcmUvRFJTTVpHXFxuYm9yZWRvbS9NXFxuYm9yZWhvbGUvU1xcbmJvcmVyL01cXG5ib3JpbmcvWVxcbmJvcm4vSUFVXFxuYm9ybmVcXG5ib3Jvbi9NXFxuYm9yb3VnaC9NXFxuYm9yb3VnaHNcXG5ib3Jyb3cvU0RSWkdKXFxuYm9ycm93ZXIvTVxcbmJvcnJvd2luZy9NXFxuYm9yc2NodC9NXFxuYm9yc3RhbC9TXFxuYm9yem9pL1NNXFxuYm9zaC9NXFxuYm9zb20nc1xcbmJvc29tL1VTXFxuYm9zb215XFxuYm9zcy9EU0dNXFxuYm9zc2lseVxcbmJvc3NpbmVzcy9NXFxuYm9zc2lzbS9NXFxuYm9zc3kvUlRQXFxuYm90L1NcXG5ib3RhbmljXFxuYm90YW5pY2FsL1lcXG5ib3RhbmlzdC9TTVxcbmJvdGFueS9NXFxuYm90Y2gvRFJTWkdNXFxuYm90Y2hlci9NXFxuYm90aFxcbmJvdGhlci9TTURHXFxuYm90aGVyYXRpb25cXG5ib3RoZXJlZC9VXFxuYm90aGVyc29tZVxcbmJvdG5ldC9TTVxcbmJvdHRsZS9EUlNNWkdcXG5ib3R0bGVuZWNrL01TXFxuYm90dGxlci9NXFxuYm90dG9tL1NNREdcXG5ib3R0b21sZXNzXFxuYm90dWxpbnVtXFxuYm90dWxpc20vTVxcbmJvdWRvaXIvU01cXG5ib3VmZmFudC9TTVxcbmJvdWdhaW52aWxsZWEvTVNcXG5ib3VnaC9NXFxuYm91Z2hzXFxuYm91Z2h0XFxuYm91aWxsYWJhaXNzZS9TTVxcbmJvdWlsbG9uL01TXFxuYm91bGRlci9TTVxcbmJvdWxlc1xcbmJvdWxldmFyZC9TTVxcbmJvdW5jZS9EUlNNWkdcXG5ib3VuY2VyL01cXG5ib3VuY2lseVxcbmJvdW5jaW5lc3MvTVxcbmJvdW5jeS9SVFBcXG5ib3VuZC9BU01HRFxcbmJvdW5kYXJ5L1NNXFxuYm91bmRlblxcbmJvdW5kZXIvU01cXG5ib3VuZGxlc3MvUFlcXG5ib3VuZGxlc3NuZXNzL01cXG5ib3VudGVvdXMvWVBcXG5ib3VudGVvdXNuZXNzL01cXG5ib3VudGlmdWwvWVBcXG5ib3VudGlmdWxuZXNzL01cXG5ib3VudHkvU01cXG5ib3VxdWV0L1NNXFxuYm91cmJvbi9TTVxcbmJvdXJnZW9pcy9NXFxuYm91cmdlb2lzaWUvTVxcbmJvdXN0cm9waGVkb25cXG5ib3V0L01TXFxuYm91dGlxdWUvU01cXG5ib3V0b25uaWVyZS9NU1xcbmJvdXpvdWtpL01TXFxuYm92aW5lL1NNXFxuYm92dmVyXFxuYm93L1pHU01EUlxcbmJvd2RsZXJpemF0aW9uL01TXFxuYm93ZGxlcml6ZS9EU0dcXG5ib3dlZC9VXFxuYm93ZWwvU01cXG5ib3dlci9NXFxuYm93bC9NRFJaR1NcXG5ib3dsZWcvU01cXG5ib3dsZWdnZWRcXG5ib3dsZXIvTVxcbmJvd2xmdWwvU01cXG5ib3dsaW5lL1NNXFxuYm93bGluZy9NXFxuYm93bWFuL01cXG5ib3dtZW5cXG5ib3dzcHJpdC9TTVxcbmJvd3N0cmluZy9TTVxcbmJvd3dvdy9TTVxcbmJveC9aR01ETlJTXFxuYm94Y2FyL1NNXFxuYm94ZXIvTVxcbmJveGluZy9NXFxuYm94bGlrZVxcbmJveHJvb20vU1xcbmJveHdvb2QvTVxcbmJveHkvUlRcXG5ib3kvU01cXG5ib3ljb3R0L1NHTURcXG5ib3lmcmllbmQvTVNcXG5ib3lob29kL1NNXFxuYm95aXNoL1lQXFxuYm95aXNobmVzcy9NXFxuYm95c2VuYmVycnkvU01cXG5ib3pvL01TXFxuYnBtXFxuYnBzXFxuYnJhL1NNXFxuYnJhY2UvTVpHRFJTXFxuYnJhY2VsZXQvTVNcXG5icmFjZXIvTVxcbmJyYWNlcm8vTVNcXG5icmFja2VuL01cXG5icmFja2V0L0dNRFNcXG5icmFja2lzaC9QXFxuYnJhY2tpc2huZXNzL01cXG5icmFjdC9NU1xcbmJyYWQvU01cXG5icmFkYXdsL1NcXG5icmFkeWNhcmRpYVxcbmJyYWUvU01cXG5icmFnL1NNXFxuYnJhZ2dhZG9jaW8vU01cXG5icmFnZ2FydC9TTVxcbmJyYWdnZWRcXG5icmFnZ2VyL01TXFxuYnJhZ2dpbmdcXG5icmFpZC9HTURTXFxuYnJhaWRpbmcvTVxcbmJyYWlsbGUvTVxcbmJyYWluL0dNRFNcXG5icmFpbmNoaWxkL01cXG5icmFpbmNoaWxkcmVuL01cXG5icmFpbmluZXNzL01cXG5icmFpbmxlc3MvWVxcbmJyYWlucG93ZXJcXG5icmFpbnN0b3JtL1NNREdcXG5icmFpbnN0b3JtaW5nL01cXG5icmFpbnRlYXNlci9TTVxcbmJyYWlud2FzaC9EU0dcXG5icmFpbndhc2hpbmcvTVxcbmJyYWlud2F2ZS9TXFxuYnJhaW55L1BUUlxcbmJyYWlzZS9HRFNcXG5icmFrZS9NR0RTXFxuYnJha2VtYW4vTVxcbmJyYWtlbWVuXFxuYnJhbWJsZS9NU1xcbmJyYW1ibHlcXG5icmFuL01cXG5icmFuY2gvR01EU1xcbmJyYW5jaGxpa2VcXG5icmFuZC9aR01EUlNcXG5icmFuZGVkL1VcXG5icmFuZGVyL01cXG5icmFuZGlzaC9EU0dcXG5icmFuZHkvR0RTTVxcbmJyYXNoL1BUUllcXG5icmFzaG5lc3MvTVxcbmJyYXNzL01TXFxuYnJhc3NlcmllL01TXFxuYnJhc3NpZXJlL01TXFxuYnJhc3NpbHlcXG5icmFzc2luZXNzL01cXG5icmFzc3kvUFRSXFxuYnJhdC9TTVxcbmJyYXR0eS9SVFxcbmJyYXR3dXJzdC9TTVxcbmJyYXZhZG8vTVxcbmJyYXZlL0dQTVlEVFJTXFxuYnJhdmVuZXNzL01cXG5icmF2ZXJ5L01cXG5icmF2by9TTVxcbmJyYXZ1cmEvU01cXG5icmF3bC9TRFJaR01cXG5icmF3bGVyL01cXG5icmF3bi9NXFxuYnJhd25pbmVzcy9NXFxuYnJhd255L1JUUFxcbmJyYXkvREdTTVxcbmJyYXplL0RSU1pHXFxuYnJhemVuL1NEWUdQXFxuYnJhemVubmVzcy9NXFxuYnJhemVyL01cXG5icmF6aWVyL1NNXFxuYnJlYWNoL0dNRFNcXG5icmVhZC9HTURIU1xcbmJyZWFkYmFza2V0L1NNXFxuYnJlYWRib2FyZC9TTVxcbmJyZWFkYm94L01TXFxuYnJlYWRjcnVtYi9NU1xcbmJyZWFkZnJ1aXQvU01cXG5icmVhZGxpbmUvTVNcXG5icmVhZHRoL01cXG5icmVhZHRoc1xcbmJyZWFkd2lubmVyL1NNXFxuYnJlYWsvQk1aR1JTXFxuYnJlYWthYmxlL01TXFxuYnJlYWthZ2UvTVNcXG5icmVha2F3YXkvTVNcXG5icmVha2Rvd24vTVNcXG5icmVha2VyL01cXG5icmVha2Zhc3QvTURHU1xcbmJyZWFrZnJvbnQvTVNcXG5icmVha25lY2tcXG5icmVha291dC9NU1xcbmJyZWFrcG9pbnRzXFxuYnJlYWt0aHJvdWdoL01cXG5icmVha3Rocm91Z2hzXFxuYnJlYWt1cC9TTVxcbmJyZWFrd2F0ZXIvU01cXG5icmVhbS9NU1xcbmJyZWFzdC9TTURHXFxuYnJlYXN0Ym9uZS9NU1xcbmJyZWFzdGZlZFxcbmJyZWFzdGZlZWQvR1NcXG5icmVhc3RwbGF0ZS9TTVxcbmJyZWFzdHN0cm9rZS9TTVxcbmJyZWFzdHdvcmsvTVNcXG5icmVhdGgvTURSU1pHQlxcbmJyZWF0aGFseXplL1pHRFJTXFxuYnJlYXRoZVxcbmJyZWF0aGVyL01cXG5icmVhdGhpbmcvTVxcbmJyZWF0aGxlc3MvUFlcXG5icmVhdGhsZXNzbmVzcy9NXFxuYnJlYXRoc1xcbmJyZWF0aHRha2luZy9ZXFxuYnJlYXRoeS9SVFxcbmJyZWQvSVxcbmJyZWVjaC9NU1xcbmJyZWVkL1NSWkdNXFxuYnJlZWRlci9NXFxuYnJlZWRpbmcvSU1cXG5icmVlemUvRFNNR1xcbmJyZWV6ZXdheS9TTVxcbmJyZWV6aWx5XFxuYnJlZXppbmVzcy9NXFxuYnJlZXp5L1JUUFxcbmJyZXRocmVuXFxuYnJldmUvU01cXG5icmV2ZXQvU01cXG5icmV2ZXR0ZWRcXG5icmV2ZXR0aW5nXFxuYnJldmlhcnkvU01cXG5icmV2aXR5L01cXG5icmV3L01EUlpHU1xcbmJyZXdlci9NXFxuYnJld2VyeS9TTVxcbmJyZXdwdWIvU01cXG5icmliZS9EUlNNWkdcXG5icmliZXIvTVxcbmJyaWJlcnkvTVxcbmJyaWNrL1NNREdcXG5icmlja2JhdC9TTVxcbmJyaWNraWUvU1xcbmJyaWNrbGF5ZXIvTVNcXG5icmlja2xheWluZy9NXFxuYnJpY2t3b3JrL01cXG5icmlja3lhcmQvU1xcbmJyaWRhbC9TTVxcbmJyaWRlL1NNXFxuYnJpZGVncm9vbS9TTVxcbmJyaWRlc21haWQvTVNcXG5icmlkZ2UvRFNNR1xcbmJyaWRnZWFibGUvVVxcbmJyaWRnZWhlYWQvU01cXG5icmlkZ2V3b3JrL01cXG5icmlkbGUvRFNNR1xcbmJyaWRsZWQvVVxcbmJyaWRsZXdheS9TXFxuYnJpZS9NWlJcXG5icmllZidzXFxuYnJpZWYvQ1NEVEdKXFxuYnJpZWZjYXNlL1NNXFxuYnJpZWZlclxcbmJyaWVmaW5nL0NNXFxuYnJpZWZseVxcbmJyaWVmbmVzcy9NXFxuYnJpZXIvTVxcbmJyaWcvTVNcXG5icmlnYWRlL1NNXFxuYnJpZ2FkaWVyL01TXFxuYnJpZ2FuZC9TTVxcbmJyaWdhbmRhZ2UvTVxcbmJyaWdhbnRpbmUvTVNcXG5icmlnaHQvU1BOUllYVFxcbmJyaWdodGVuL0RSWkdcXG5icmlnaHRlbmVyL01cXG5icmlnaHRuZXNzL01cXG5icmlnaHRzL01cXG5icmlsbFxcbmJyaWxsaWFuY2UvTVxcbmJyaWxsaWFuY3kvTVxcbmJyaWxsaWFudC9NWVNcXG5icmlsbGlhbnRpbmUvTVxcbmJyaW0vTVNcXG5icmltZnVsXFxuYnJpbWxlc3NcXG5icmltbWVkXFxuYnJpbW1pbmdcXG5icmltc3RvbmUvTVxcbmJyaW5kbGUvRE1cXG5icmluZS9NXFxuYnJpbmcvU1JaR1xcbmJyaW5nZXIvTVxcbmJyaW5pbmVzcy9NXFxuYnJpbmsvU01cXG5icmlua21hbnNoaXAvTVxcbmJyaW55L1JUUFxcbmJyaW9jaGUvU01cXG5icmlxdWV0dGUvTVNcXG5icmlzay9TRFJZVEdQXFxuYnJpc2tldC9TTVxcbmJyaXNrbmVzcy9NXFxuYnJpc3RsZS9EU01HXFxuYnJpc3RseS9UUlxcbmJyaXRjaGVzL01cXG5icml0dGxlL1BSTVRcXG5icml0dGxlbmVzcy9NXFxuYnJvL1NNSFxcbmJyb2FjaC9NRFNHXFxuYnJvYWQvU01OUllYVFBcXG5icm9hZGJhbmQvTVxcbmJyb2FkY2FzdC9BTUdTXFxuYnJvYWRjYXN0ZXIvTVNcXG5icm9hZGNhc3RpbmcvTVxcbmJyb2FkY2xvdGgvTVxcbmJyb2FkZW4vREdcXG5icm9hZGxvb20vTVxcbmJyb2FkbWluZGVkXFxuYnJvYWRuZXNzL01cXG5icm9hZHNoZWV0L1NNXFxuYnJvYWRzaWRlL01HRFNcXG5icm9hZHN3b3JkL1NNXFxuYnJvY2FkZS9EU01HXFxuYnJvY2NvbGkvTVxcbmJyb2NoZXR0ZS9TTVxcbmJyb2NodXJlL01TXFxuYnJvZ2FuL1NNXFxuYnJvZ3VlL1NNXFxuYnJvaWwvU01EUlpHXFxuYnJvaWxlci9NXFxuYnJva2VcXG5icm9rZW4vWVBcXG5icm9rZW5oZWFydGVkL1lcXG5icm9rZW5uZXNzL01cXG5icm9rZXIvU01ER1xcbmJyb2tlcmFnZS9NU1xcbmJyb2xseS9TXFxuYnJvbWlkZS9TTVxcbmJyb21pZGljXFxuYnJvbWluZS9NXFxuYnJvbmMvU01cXG5icm9uY2hpXFxuYnJvbmNoaWFsXFxuYnJvbmNoaXRpY1xcbmJyb25jaGl0aXMvTVxcbmJyb25jaHVzL01cXG5icm9uY28vU01cXG5icm9uY29idXN0ZXIvU01cXG5icm9udG9zYXVyL01TXFxuYnJvbnRvc2F1cnVzL01TXFxuYnJvbnplL0RTTUdcXG5icm9vY2gvTVNcXG5icm9vZC9TTURSWkdcXG5icm9vZGVyL01cXG5icm9vZGlseVxcbmJyb29kaW5nL01ZXFxuYnJvb2RtYXJlL01TXFxuYnJvb2R5L1JNUFRcXG5icm9vay9TTURHXFxuYnJvb2tsZXQvU01cXG5icm9vbS9TTVxcbmJyb29tc3RpY2svTVNcXG5icm90aC9NUlpcXG5icm90aGVsL01TXFxuYnJvdGhlci9NWVxcbmJyb3RoZXJob29kL01TXFxuYnJvdGhlcmxpbmVzcy9NXFxuYnJvdGhzXFxuYnJvdWdoYW0vU01cXG5icm91Z2h0XFxuYnJvdWhhaGEvU01cXG5icm93L01TXFxuYnJvd2JlYXQvU05HXFxuYnJvd24vU01EUlBUR1xcbmJyb3duZmllbGRcXG5icm93bmllL01TXFxuYnJvd25pc2hcXG5icm93bm5lc3MvTVxcbmJyb3dub3V0L1NNXFxuYnJvd25zdG9uZS9NU1xcbmJyb3dzZS9EUlNNWkdcXG5icm93c2VyL01cXG5icnJcXG5icnVpbi9TTVxcbmJydWlzZS9EUlNNWkdcXG5icnVpc2VyL01cXG5icnVpc2luZy9NXFxuYnJ1aXQvU0RHXFxuYnJ1bmNoL01EU0dcXG5icnVuZXQvU01cXG5icnVuZXR0ZS9NU1xcbmJydW50L01cXG5icnVzaC9NRFNHXFxuYnJ1c2hvZmYvU01cXG5icnVzaHN0cm9rZS9TXFxuYnJ1c2h3b29kL01cXG5icnVzaHdvcmsvTVxcbmJydXNxdWUvUlBZVFxcbmJydXNxdWVuZXNzL01cXG5icnV0YWwvWVxcbmJydXRhbGl0eS9TTVxcbmJydXRhbGl6YXRpb24vTVxcbmJydXRhbGl6ZS9HRFNcXG5icnV0ZS9TTVxcbmJydXRpc2gvUFlcXG5icnV0aXNobmVzcy9NXFxuYnVcXG5idWIvU01cXG5idWJibGUvRFNNR1xcbmJ1YmJsZWd1bS9NXFxuYnViYmx5L1JNVFxcbmJ1Ym8vTVxcbmJ1Ym9lc1xcbmJ1Y2NhbmVlci9TR01EXFxuYnVjay9NREdTXFxuYnVja2Fyb28vU01cXG5idWNrYm9hcmQvTVNcXG5idWNrZXQvU0dNRFxcbmJ1Y2tldGZ1bC9NU1xcbmJ1Y2tleWUvTVNcXG5idWNrbGUnc1xcbmJ1Y2tsZS9VRFNHXFxuYnVja2xlci9NU1xcbmJ1Y2tyYW0vTVxcbmJ1Y2tzYXcvTVNcXG5idWNrc2hvdC9NXFxuYnVja3NraW4vTVNcXG5idWNrdGVldGhcXG5idWNrdG9vdGgvTURcXG5idWNrd2hlYXQvTVxcbmJ1Y2t5YmFsbC9TTVxcbmJ1Y29saWMvTVNcXG5idWNvbGljYWxseVxcbmJ1ZC9TTVxcbmJ1ZGRlZFxcbmJ1ZGRpbmcvU1xcbmJ1ZGR5L1NNXFxuYnVkZ2UvRFNHXFxuYnVkZ2VyaWdhci9NU1xcbmJ1ZGdldC9TR01EXFxuYnVkZ2V0YXJ5XFxuYnVkZ2llL1NNXFxuYnVmZi9BTURHU1xcbmJ1ZmZhbG8vTURHXFxuYnVmZmFsb2VzXFxuYnVmZmVyL1NNREdcXG5idWZmZXQvU01ER0pcXG5idWZmb29uL1NNXFxuYnVmZm9vbmVyeS9NXFxuYnVmZm9vbmlzaFxcbmJ1ZydzXFxuYnVnL0NTXFxuYnVnYWJvby9TTVxcbmJ1Z2JlYXIvU01cXG5idWdnZWQvQ1xcbmJ1Z2dlci9TTURHXFxuYnVnZ2VyeVxcbmJ1Z2dpbmcvQ1xcbmJ1Z2d5L1JTTVRcXG5idWdsZS9EUlNNWkdcXG5idWdsZXIvTVxcbmJ1aWxkL1NNUlpHSlxcbmJ1aWxkZXIvTVxcbmJ1aWxkaW5nL01cXG5idWlsZHVwL1NNXFxuYnVpbHQvQUlcXG5idWlsdGluXFxuYnVsYi9NU1xcbmJ1bGJvdXNcXG5idWxnZS9EU01HXFxuYnVsZ3kvUlRcXG5idWxpbWFyZXhpYS9NXFxuYnVsaW1pYS9NXFxuYnVsaW1pYy9TTVxcbmJ1bGsvTURHU1xcbmJ1bGtoZWFkL01TXFxuYnVsa2luZXNzL01cXG5idWxreS9SVFBcXG5idWxsL01ER1NcXG5idWxsZG9nL1NNXFxuYnVsbGRvZ2dlZFxcbmJ1bGxkb2dnaW5nXFxuYnVsbGRvemUvWkdEUlNcXG5idWxsZG96ZXIvTVxcbmJ1bGxldC9TTURcXG5idWxsZXRpbi9NREdTXFxuYnVsbGV0cHJvb2YvU0RHXFxuYnVsbGZpZ2h0L1NNUlpHXFxuYnVsbGZpZ2h0ZXIvTVxcbmJ1bGxmaWdodGluZy9NXFxuYnVsbGZpbmNoL01TXFxuYnVsbGZyb2cvTVNcXG5idWxsaGVhZC9NRFNcXG5idWxsaGVhZGVkL1BZXFxuYnVsbGhlYWRlZG5lc3MvTVxcbmJ1bGxob3JuL01TXFxuYnVsbGlvbi9NXFxuYnVsbGlzaC9ZUFxcbmJ1bGxpc2huZXNzL01cXG5idWxsb2NrL1NNXFxuYnVsbHBlbi9TTVxcbmJ1bGxyaW5nL01TXFxuYnVsbHNleWVcXG5idWxsc2hpdC9NUyFcXG5idWxsc2hpdHRlZC8hXFxuYnVsbHNoaXR0ZXIvU00hXFxuYnVsbHNoaXR0aW5nLyFcXG5idWxsd2hpcC9TXFxuYnVsbHkvRFNNR1xcbmJ1bHJ1c2gvTVNcXG5idWx3YXJrL01TXFxuYnVtL1NNXFxuYnVtYmFnL1NcXG5idW1ibGUvRFJTWkdcXG5idW1ibGViZWUvU01cXG5idW1ibGVyL01cXG5idW1mXFxuYnVtbWVkXFxuYnVtbWVyL1NNXFxuYnVtbWVzdFxcbmJ1bW1pbmdcXG5idW1wL01EUlpHU1xcbmJ1bXBlci9NXFxuYnVtcGhcXG5idW1waW5lc3MvTVxcbmJ1bXBraW4vTVNcXG5idW1wdGlvdXMvUFlcXG5idW1wdGlvdXNuZXNzL01cXG5idW1weS9QUlRcXG5idW4vU01cXG5idW5jaC9NRFNHXFxuYnVuY2h5L1JUXFxuYnVuY28vU01ER1xcbmJ1bmRsZS9EU01HXFxuYnVuZy9NREdTXFxuYnVuZ2Fsb3cvTVNcXG5idW5nZWUvU01cXG5idW5naG9sZS9NU1xcbmJ1bmdsZS9EUlNNWkdcXG5idW5nbGVyL01cXG5idW5pb24vU01cXG5idW5rJ3NcXG5idW5rL0NER1NcXG5idW5rZXIvU01cXG5idW5raG91c2UvU01cXG5idW5rdW0vTVxcbmJ1bm55L1NNXFxuYnVudC9NREdTSlxcbmJ1bnRpbmcvTVxcbmJ1b3kvTURHU1xcbmJ1b3lhbmN5L01cXG5idW95YW50L1lcXG5idXIvU01ZXFxuYnVyYmxlL0RTTUdcXG5idXJicy9NXFxuYnVyZGVuJ3NcXG5idXJkZW4vVVNHRFxcbmJ1cmRlbnNvbWVcXG5idXJkb2NrL01cXG5idXJlYXUvU01cXG5idXJlYXVjcmFjeS9TTVxcbmJ1cmVhdWNyYXQvTVNcXG5idXJlYXVjcmF0aWNcXG5idXJlYXVjcmF0aWNhbGx5XFxuYnVyZWF1Y3JhdGl6YXRpb24vTVxcbmJ1cmVhdWNyYXRpemUvR0RTXFxuYnVyZy9NUlpTXFxuYnVyZ2Vvbi9EU0dcXG5idXJnZXIvTVxcbmJ1cmdoL01SWlxcbmJ1cmdoZXIvTVxcbmJ1cmdoc1xcbmJ1cmdsYXIvTVNcXG5idXJnbGFyaXplL0dEU1xcbmJ1cmdsYXJwcm9vZlxcbmJ1cmdsYXJ5L1NNXFxuYnVyZ2xlL0RTR1xcbmJ1cmdvbWFzdGVyL1NNXFxuYnVyZ3VuZHkvU01cXG5idXJpYWwvQVNNXFxuYnVya2EvU01cXG5idXJsL01EU1xcbmJ1cmxhcC9NXFxuYnVybGVzcXVlL01HRFNcXG5idXJsaW5lc3MvTVxcbmJ1cmx5L1JQVFxcbmJ1cm4vTURSWkdTQlxcbmJ1cm5hYmxlL1NNXFxuYnVybmVyL01cXG5idXJuaXNoL1pHTURSU1xcbmJ1cm5pc2hlci9NXFxuYnVybm9vc2UvTVNcXG5idXJub3V0L01TXFxuYnVybnRcXG5idXJwL01ER1NcXG5idXJyL01ER1NcXG5idXJyaXRvL01TXFxuYnVycm8vU01cXG5idXJyb3cvU01EUlpHXFxuYnVycm93ZXIvTVxcbmJ1cnNhL01cXG5idXJzYWVcXG5idXJzYXIvU01cXG5idXJzYXJ5L1NNXFxuYnVyc2l0aXMvTVxcbmJ1cnN0L1NNR1xcbmJ1cnkvQURTR1xcbmJ1cy9BTVNcXG5idXNib3kvU01cXG5idXNieS9TTVxcbmJ1c2VkXFxuYnVzZ2lybC9NU1xcbmJ1c2gvTURTR0pcXG5idXNoZWwvU0dNRFxcbmJ1c2hpbmVzcy9NXFxuYnVzaGluZy9NXFxuYnVzaG1hbi9NXFxuYnVzaG1hc3Rlci9TTVxcbmJ1c2htZW5cXG5idXNod2hhY2svRFJTWkdcXG5idXNod2hhY2tlci9NXFxuYnVzaHkvUlBUXFxuYnVzaWx5XFxuYnVzaW5lc3MvTVNcXG5idXNpbmVzc2xpa2VcXG5idXNpbmVzc21hbi9NXFxuYnVzaW5lc3NtZW5cXG5idXNpbmVzc3BlcnNvbi9TTVxcbmJ1c2luZXNzd29tYW4vTVxcbmJ1c2luZXNzd29tZW5cXG5idXNpbmcvTVxcbmJ1c2svRFJaR1NcXG5idXNraW4vU01cXG5idXNsb2FkL1NcXG5idXNzL01EU0dcXG5idXN0L01EUlpHU1xcbmJ1c3Rlci9NXFxuYnVzdGxlL0RTTUdcXG5idXN0eS9SWlRcXG5idXN5L0RSU1RHUFxcbmJ1c3lib2R5L1NNXFxuYnVzeW5lc3MvTVxcbmJ1c3l3b3JrL01cXG5idXQvQUNTXFxuYnV0YW5lL01cXG5idXRjaC9NUlNaXFxuYnV0Y2hlci9NREdcXG5idXRjaGVyeS9TTVxcbmJ1dGxlci9TTVxcbmJ1dHQvTURSWkdTXFxuYnV0dGUvU01cXG5idXR0ZWQvQVxcbmJ1dHRlci9NREdcXG5idXR0ZXJiYWxsL01TXFxuYnV0dGVyY3JlYW1cXG5idXR0ZXJjdXAvU01cXG5idXR0ZXJmYXQvTVxcbmJ1dHRlcmZpbmdlcmVkXFxuYnV0dGVyZmluZ2Vycy9NXFxuYnV0dGVyZmx5L0dEU01cXG5idXR0ZXJtaWxrL01cXG5idXR0ZXJudXQvU01cXG5idXR0ZXJzY290Y2gvTVxcbmJ1dHRlcnkvVFJTTVxcbmJ1dHRpbmcvQVxcbmJ1dHRvY2svU01cXG5idXR0b24nc1xcbmJ1dHRvbi9VU0RHXFxuYnV0dG9uaG9sZS9EU01HXFxuYnV0dG9ud29vZC9NU1xcbmJ1dHRyZXNzL01EU0dcXG5idXR0eS9TXFxuYnV4b21cXG5idXkvWkdTTVJcXG5idXliYWNrL1NNXFxuYnV5ZXIvTVxcbmJ1eW91dC9TTVxcbmJ1enovTURSU1pHXFxuYnV6emFyZC9NU1xcbmJ1enplci9NXFxuYnV6emtpbGwvU01cXG5idXp6d29yZC9TTVxcbmJ4XFxuYnhzXFxuYnkvTVxcbmJ5ZS9TTVxcbmJ5Z29uZS9TTVxcbmJ5bGF3L1NNXFxuYnlsaW5lL1NNXFxuYnlwYXNzL0dNRFNcXG5ieXBhdGgvTVxcbmJ5cGF0aHNcXG5ieXBsYXkvTVxcbmJ5cHJvZHVjdC9NU1xcbmJ5cmUvU1xcbmJ5cm9hZC9TTVxcbmJ5c3RhbmRlci9NU1xcbmJ5dGUvTVNcXG5ieXdheS9TTVxcbmJ5d29yZC9TTVxcbmJ5emFudGluZVxcbmMvSUVTXFxuY2FcXG5jYWIvU01SWlxcbmNhYmFsL01TXFxuY2FiYWxhJ3NcXG5jYWJhbGxlcm8vTVNcXG5jYWJhbmEvU01cXG5jYWJhcmV0L1NNXFxuY2FiYmFnZS9NU1xcbmNhYmJlZFxcbmNhYmJpbmdcXG5jYWJieS9TTVxcbmNhYmRyaXZlci9TTVxcbmNhYmluL01TXFxuY2FiaW5ldC9TTVxcbmNhYmluZXRtYWtlci9NU1xcbmNhYmluZXRtYWtpbmcvTVxcbmNhYmluZXRyeS9NXFxuY2FiaW5ldHdvcmsvTVxcbmNhYmxlL01HRFNcXG5jYWJsZWNhc3QvR01TXFxuY2FibGVncmFtL01TXFxuY2Fib2Nob24vU01cXG5jYWJvb2RsZS9NXFxuY2Fib29zZS9TTVxcbmNhYnJpb2xldC9TTVxcbmNhYnN0YW5kL1NNXFxuY2FjYW8vTVNcXG5jYWNoZS9NR0RTXFxuY2FjaGVwb3QvU01cXG5jYWNoZXQvTVNcXG5jYWNrbGUvTVpHRFJTXFxuY2Fja2xlci9NXFxuY2Fjb3Bob25vdXNcXG5jYWNvcGhvbnkvU01cXG5jYWN0aVxcbmNhY3R1cy9NXFxuY2FkL1NNXFxuY2FkYXZlci9TTVxcbmNhZGF2ZXJvdXNcXG5jYWRkaWUvTURTXFxuY2FkZGlzaC9ZUFxcbmNhZGRpc2huZXNzL01cXG5jYWRkeWluZ1xcbmNhZGVuY2UvRFNNXFxuY2FkZW56YS9TTVxcbmNhZGV0L01TXFxuY2FkZ2UvWkdEUlNcXG5jYWRnZXIvTVxcbmNhZG1pdW0vTVxcbmNhZHJlL01TXFxuY2FkdWNlaVxcbmNhZHVjZXVzL01cXG5jYWVzdXJhL1NNXFxuY2FmZS9TTVxcbmNhZmV0ZXJpYS9NU1xcbmNhZmV0aWVyZS9TXFxuY2FmZi9DU1xcbmNhZmZlaW5hdGVkXFxuY2FmZmVpbmUvTVxcbmNhZnRhbi9NU1xcbmNhZ2UvRFNNR1xcbmNhZ2V5XFxuY2FnaWVyXFxuY2FnaWVzdFxcbmNhZ2lseVxcbmNhZ2luZXNzL01cXG5jYWdvdWxlL1NcXG5jYWhvb3QvTVNcXG5jYWltYW4vTVNcXG5jYWlybi9NU1xcbmNhaXNzb24vU01cXG5jYWl0aWZmL1NNXFxuY2Fqb2xlL1pHTERSU1xcbmNham9sZW1lbnQvTVxcbmNham9sZXIvTVxcbmNham9sZXJ5L01cXG5jYWtlL0RTTUdcXG5jYWtld2Fsay9TTVxcbmNhbFxcbmNhbGFiYXNoL01TXFxuY2FsYWJvb3NlL1NNXFxuY2FsYW1hcmkvU01cXG5jYWxhbWluZS9NXFxuY2FsYW1pdG91cy9ZXFxuY2FsYW1pdHkvU01cXG5jYWxjYXJlb3VzXFxuY2FsY2lmZXJvdXNcXG5jYWxjaWZpY2F0aW9uL01cXG5jYWxjaWZ5L0dORFNcXG5jYWxjaW1pbmUvRFNNR1xcbmNhbGNpbmUvRFNHXFxuY2FsY2l0ZS9NXFxuY2FsY2l1bS9NXFxuY2FsY3VsYWJsZS9JXFxuY2FsY3VsYXRlL0FHTlZEU1hcXG5jYWxjdWxhdGVkL1lcXG5jYWxjdWxhdGluZy9ZXFxuY2FsY3VsYXRpb24vQU1cXG5jYWxjdWxhdG9yL1NNXFxuY2FsY3VsaVxcbmNhbGN1bHVzL01cXG5jYWxkZXJhL1NNXFxuY2FsZW5kYXIvTURHU1xcbmNhbGYvTVxcbmNhbGZza2luL01cXG5jYWxpYmVyL1NNXFxuY2FsaWJyYXRlL0dORFNYXFxuY2FsaWJyYXRpb24vTVxcbmNhbGlicmF0b3IvU01cXG5jYWxpY28vTVxcbmNhbGljb2VzXFxuY2FsaWZvcm5pdW0vTVxcbmNhbGlwZXIvU0dNRFxcbmNhbGlwaC9NXFxuY2FsaXBoYXRlL01TXFxuY2FsaXBoc1xcbmNhbGlzdGhlbmljL1NcXG5jYWxpc3RoZW5pY3MvTVxcbmNhbGsvU0dNRFxcbmNhbGwvQVNHTURcXG5jYWxsYS9NU1xcbmNhbGxhYmxlXFxuY2FsbGJhY2svTVNcXG5jYWxsZWQvVVxcbmNhbGxlci9NU1xcbmNhbGxpZ3JhcGhlci9TTVxcbmNhbGxpZ3JhcGhpY1xcbmNhbGxpZ3JhcGhpc3QvTVNcXG5jYWxsaWdyYXBoeS9NXFxuY2FsbGluZy9TTVxcbmNhbGxpb3BlL01TXFxuY2FsbG9zaXR5L1NNXFxuY2FsbG91cy9QR0RTWVxcbmNhbGxvdXNuZXNzL01cXG5jYWxsb3cvUlBUXFxuY2FsbG93bmVzcy9NXFxuY2FsbHVzL01EU0dcXG5jYWxtL1BTVEdNRFJZXFxuY2FsbW5lc3MvTVxcbmNhbG9yaWNcXG5jYWxvcmllL01TXFxuY2Fsb3JpZmljXFxuY2FsdW1ldC9NU1xcbmNhbHVtbmlhdGUvR05EU1xcbmNhbHVtbmlhdGlvbi9NXFxuY2FsdW1uaWF0b3IvTVNcXG5jYWx1bW5pb3VzXFxuY2FsdW1ueS9TTVxcbmNhbHZlL0dEU1xcbmNhbHlwc28vTVNcXG5jYWx5eC9NU1xcbmNhbS9TTVxcbmNhbWFyYWRlcmllL01cXG5jYW1iZXIvTURTR1xcbmNhbWJpYWxcXG5jYW1iaXVtL1NNXFxuY2FtYnJpYy9NXFxuY2FtY29yZGVyL1NNXFxuY2FtZVxcbmNhbWVsL01TXFxuY2FtZWxoYWlyXFxuY2FtZWxsaWEvTVNcXG5jYW1lby9NU1xcbmNhbWVyYS9NU1xcbmNhbWVyYW1hbi9NXFxuY2FtZXJhbWVuXFxuY2FtZXJhcGVvcGxlXFxuY2FtZXJhcGVyc29uXFxuY2FtZXJhd29tYW4vTVxcbmNhbWVyYXdvbWVuXFxuY2FtZXJhd29ya1xcbmNhbWlrbmlja2Vyc1xcbmNhbWlzb2xlL1NNXFxuY2Ftb3VmbGFnZS9NWkdEUlNcXG5jYW1vdWZsYWdlci9NXFxuY2FtcCdzXFxuY2FtcC9DU0dEXFxuY2FtcGFpZ24vU01EUlpHXFxuY2FtcGFpZ25lci9NXFxuY2FtcGFuaWxlL1NNXFxuY2FtcGFub2xvZ2lzdC9NU1xcbmNhbXBhbm9sb2d5L01cXG5jYW1wZXIvTVNcXG5jYW1wZmlyZS9TTVxcbmNhbXBncm91bmQvU01cXG5jYW1waG9yL01cXG5jYW1waW5nL01cXG5jYW1wc2l0ZS9TTVxcbmNhbXB1cy9NU1xcbmNhbXB5L1RSXFxuY2Ftc2hhZnQvU01cXG5jYW4ndFxcbmNhbi9TTURSWkdcXG5jYW5hbC9NU1xcbmNhbmFsaXphdGlvbi9NXFxuY2FuYWxpemUvR0RTXFxuY2FuYXBlL01TXFxuY2FuYXJkL01TXFxuY2FuYXJ5L1NNXFxuY2FuYXN0YS9NXFxuY2FuY2FuL01TXFxuY2FuY2VsL0RSU1pHXFxuY2FuY2VsZXIvTVxcbmNhbmNlbGxhdGlvbi9TTVxcbmNhbmNlbG91c1xcbmNhbmNlci9NU1xcbmNhbmNlcm91c1xcbmNhbmRlbGFicmEvU01cXG5jYW5kZWxhYnJ1bS9NXFxuY2FuZGlkL1lQXFxuY2FuZGlkYVxcbmNhbmRpZGFjeS9TTVxcbmNhbmRpZGF0ZS9NU1xcbmNhbmRpZGF0dXJlL1NNXFxuY2FuZGlkbmVzcy9NXFxuY2FuZGxlL01aR0RSU1xcbmNhbmRsZWxpZ2h0L01cXG5jYW5kbGVsaXRcXG5jYW5kbGVwb3dlci9NXFxuY2FuZGxlci9NXFxuY2FuZGxlc3RpY2svTVNcXG5jYW5kbGV3aWNrL1NNXFxuY2FuZG9yL01cXG5jYW5keS9HRFNNXFxuY2FuZHlmbG9zc1xcbmNhbmUvU01cXG5jYW5lYnJha2UvTVNcXG5jYW5lci9NXFxuY2FuaW5lL01TXFxuY2FuaXN0ZXIvU01cXG5jYW5rZXIvR01EU1xcbmNhbmtlcm91c1xcbmNhbm5hYmlzL01TXFxuY2FubmVkXFxuY2FubmVsbG9uaS9NXFxuY2FubmVyeS9TTVxcbmNhbm5pYmFsL1NNXFxuY2FubmliYWxpc20vTVxcbmNhbm5pYmFsaXN0aWNcXG5jYW5uaWJhbGl6YXRpb24vTVxcbmNhbm5pYmFsaXplL0dEU1xcbmNhbm5pbHkvVVxcbmNhbm5pbmVzcy9NXFxuY2FubmluZ1xcbmNhbm5vbi9HTURTXFxuY2Fubm9uYWRlL01HRFNcXG5jYW5ub25iYWxsL1NNXFxuY2Fubm90XFxuY2FubnkvVVRSXFxuY2Fub2UvTURTXFxuY2Fub2VpbmdcXG5jYW5vZWlzdC9TTVxcbmNhbm9sYS9NXFxuY2Fub24vTVNcXG5jYW5vbmljYWwvWVxcbmNhbm9uaXphdGlvbi9TTVxcbmNhbm9uaXplL0RTR1xcbmNhbm9vZGxlL0RTR1xcbmNhbm9weS9HRFNNXFxuY2Fuc3RcXG5jYW50J3NcXG5jYW50L0NaUkRHU1xcbmNhbnRhYmlsZVxcbmNhbnRhbG91cGUvU01cXG5jYW50YW5rZXJvdXMvUFlcXG5jYW50YW5rZXJvdXNuZXNzL01cXG5jYW50YXRhL01TXFxuY2FudGVlbi9NU1xcbmNhbnRlci9DTVxcbmNhbnRlcmVkXFxuY2FudGVyaW5nXFxuY2FudGljbGUvTVNcXG5jYW50aWxldmVyL01ER1NcXG5jYW50by9NU1xcbmNhbnRvbi9NTFNcXG5jYW50b25hbFxcbmNhbnRvbm1lbnQvTVNcXG5jYW50b3IvTVNcXG5jYW52YXMvTUdEU1xcbmNhbnZhc2JhY2svU01cXG5jYW52YXNzL01EUlNaR1xcbmNhbnZhc3Nlci9NXFxuY2FueW9uL01HU1xcbmNhcC9TTURSQlpcXG5jYXBhYmlsaXRpZXNcXG5jYXBhYmlsaXR5L0lNXFxuY2FwYWJsZS9JXFxuY2FwYWJseS9JXFxuY2FwYWNpb3VzL1BZXFxuY2FwYWNpb3VzbmVzcy9NXFxuY2FwYWNpdGFuY2UvTVxcbmNhcGFjaXRpZXNcXG5jYXBhY2l0b3IvU01cXG5jYXBhY2l0eS9JTVxcbmNhcGFyaXNvbi9NREdTXFxuY2FwZS9TTVxcbmNhcGVyL0dNRFxcbmNhcGVza2luL01cXG5jYXBpbGxhcml0eS9NXFxuY2FwaWxsYXJ5L1NNXFxuY2FwaXRhbC9NU1lcXG5jYXBpdGFsaXNtL01cXG5jYXBpdGFsaXN0L1NNXFxuY2FwaXRhbGlzdGljXFxuY2FwaXRhbGlzdGljYWxseVxcbmNhcGl0YWxpemF0aW9uL01cXG5jYXBpdGFsaXplL0FEU0dcXG5jYXBpdGF0aW9uL0NTTVxcbmNhcGl0b2wvU01cXG5jYXBpdHVsYXRlL0FEU1hHTlxcbmNhcGl0dWxhdGlvbi9BTVxcbmNhcGxldC9NU1xcbmNhcG8vU01cXG5jYXBvbi9NU1xcbmNhcHBlZC9VQVxcbmNhcHBpbmcvVUFcXG5jYXBwdWNjaW5vL1NNXFxuY2FwcmljZS9TTVxcbmNhcHJpY2lvdXMvUFlcXG5jYXByaWNpb3VzbmVzcy9NXFxuY2Fwc2ljdW0vU01cXG5jYXBzaXplL0RTR1xcbmNhcHN0YW4vU01cXG5jYXBzdG9uZS9NU1xcbmNhcHN1bGFyXFxuY2Fwc3VsZS9EU01HXFxuY2Fwc3VsaXplL0RTR1xcbmNhcHRcXG5jYXB0YWluL1NNREdcXG5jYXB0YWluY3kvU01cXG5jYXB0aW9uL1NNREdcXG5jYXB0aW91cy9ZUFxcbmNhcHRpb3VzbmVzcy9NXFxuY2FwdGl2YXRlL0RTR05cXG5jYXB0aXZhdGlvbi9NXFxuY2FwdGl2YXRvci9TTVxcbmNhcHRpdmUvU01cXG5jYXB0aXZpdHkvU01cXG5jYXB0b3IvTVNcXG5jYXB0dXJlL0FEU01HXFxuY2FyL1NNRFJaR1xcbmNhcmFmZS9NU1xcbmNhcmFtZWwvU01cXG5jYXJhbWVsaXplL0RTR1xcbmNhcmFwYWNlL1NNXFxuY2FyYXQvTVNcXG5jYXJhdmFuL1NNXFxuY2FyYXZhbnNhcnkvU01cXG5jYXJhdmVsL1NNXFxuY2FyYXdheS9TTVxcbmNhcmJpZGUvU01cXG5jYXJiaW5lL1NNXFxuY2FyYm9oeWRyYXRlL1NNXFxuY2FyYm9saWNcXG5jYXJib24vTVNcXG5jYXJib25hY2VvdXNcXG5jYXJib25hdGUvTUdORFNcXG5jYXJib25hdGlvbi9NXFxuY2FyYm9uaWZlcm91c1xcbmNhcmJvbml6ZS9HRFNcXG5jYXJib3J1bmR1bS9NXFxuY2FyYm95L01TXFxuY2FyYnNcXG5jYXJidW5jbGUvU01cXG5jYXJidW5jdWxhclxcbmNhcmJ1cmV0b3IvU01cXG5jYXJjYXNzL01TXFxuY2FyY2lub2dlbi9TTVxcbmNhcmNpbm9nZW5pYy9NU1xcbmNhcmNpbm9nZW5pY2l0eS9NXFxuY2FyY2lub21hL01TXFxuY2FyZC9FU0dNRFxcbmNhcmRhbW9tL1NNXFxuY2FyZGFtb24vU1xcbmNhcmRib2FyZC9NXFxuY2FyZGVyL01TXFxuY2FyZGhvbGRlci9TXFxuY2FyZGlhY1xcbmNhcmRpZS9TXFxuY2FyZGlnYW4vU01cXG5jYXJkaW5hbC9TTVlcXG5jYXJkaW9cXG5jYXJkaW9ncmFtL1NNXFxuY2FyZGlvZ3JhcGgvTVxcbmNhcmRpb2dyYXBoc1xcbmNhcmRpb2xvZ2lzdC9NU1xcbmNhcmRpb2xvZ3kvTVxcbmNhcmRpb215b3BhdGh5XFxuY2FyZGlvcHVsbW9uYXJ5XFxuY2FyZGlvdmFzY3VsYXJcXG5jYXJkc2hhcnAvTVJaU1xcbmNhcmRzaGFycGVyL01cXG5jYXJlL1NNXFxuY2FyZWVuL0RHU1xcbmNhcmVlci9NREdTXFxuY2FyZWVyaXNtXFxuY2FyZWVyaXN0L1NNXFxuY2FyZWZyZWVcXG5jYXJlZnVsL1lQXFxuY2FyZWZ1bGxlclxcbmNhcmVmdWxsZXN0XFxuY2FyZWZ1bG5lc3MvTVxcbmNhcmVnaXZlci9TTVxcbmNhcmVsZXNzL1BZXFxuY2FyZWxlc3NuZXNzL01cXG5jYXJlci9NXFxuY2FyZXNzL01EU0dcXG5jYXJldC9NU1xcbmNhcmV0YWtlci9NU1xcbmNhcmV3b3JuXFxuY2FyZmFyZS9NXFxuY2FyZ28vTVxcbmNhcmdvZXNcXG5jYXJob3AvTVNcXG5jYXJpYm91L1NNXFxuY2FyaWNhdHVyZS9NR0RTXFxuY2FyaWNhdHVyaXN0L1NNXFxuY2FyaWVzL01cXG5jYXJpbGxvbi9TTVxcbmNhcmluZy9NXFxuY2FyaW91c1xcbmNhcmphY2svSlNEUlpHXFxuY2FyamFja2VyL01cXG5jYXJqYWNraW5nL01cXG5jYXJsb2FkL1NNXFxuY2FybWFrZXIvU1xcbmNhcm1pbmUvU01cXG5jYXJuYWdlL01cXG5jYXJuYWwvWVxcbmNhcm5hbGl0eS9NXFxuY2FybmF0aW9uL0lNU1xcbmNhcm5lbGlhbi9NU1xcbmNhcm5pdmFsL01TXFxuY2Fybml2b3JhXFxuY2Fybml2b3JlL1NNXFxuY2Fybml2b3JvdXMvUFlcXG5jYXJuaXZvcm91c25lc3MvTVxcbmNhcm55L1NNXFxuY2Fyb2IvTVNcXG5jYXJvbC9aR01EUlNcXG5jYXJvbGVyL01cXG5jYXJvbS9HTURTXFxuY2Fyb3RlbmUvTVxcbmNhcm90aWQvU01cXG5jYXJvdXNhbC9TTVxcbmNhcm91c2UvRFJTTVpHXFxuY2Fyb3VzZWwvU01cXG5jYXJvdXNlci9NXFxuY2FycC9TWkdNRFJcXG5jYXJwYWwvTVNcXG5jYXJwZWwvTVNcXG5jYXJwZW50ZXIvTURHU1xcbmNhcnBlbnRyeS9NXFxuY2FycGVyL01cXG5jYXJwZXQvTURHU1xcbmNhcnBldGJhZy9NU1xcbmNhcnBldGJhZ2dlZFxcbmNhcnBldGJhZ2dlci9NU1xcbmNhcnBldGJhZ2dpbmdcXG5jYXJwZXRpbmcvTVxcbmNhcnBpXFxuY2FycG9vbC9TTURHXFxuY2FycG9ydC9TTVxcbmNhcnB1cy9NXFxuY2FycmVsL01TXFxuY2FycmlhZ2UvU01cXG5jYXJyaWFnZXdheS9TXFxuY2Fycmllci9NXFxuY2Fycmlvbi9NXFxuY2Fycm90L01TXFxuY2Fycm90eVxcbmNhcnJ5L1pHRFJTTVxcbmNhcnJ5YWxsL1NNXFxuY2Fycnljb3QvU1xcbmNhcnJ5b3V0XFxuY2FycnlvdmVyL01TXFxuY2Fyc2ljay9QXFxuY2Fyc2lja25lc3MvTVxcbmNhcnQvU1pHTURSXFxuY2FydGFnZS9NXFxuY2FydGVsL01TXFxuY2FydGVyL01cXG5jYXJ0aG9yc2UvU01cXG5jYXJ0aWxhZ2UvU01cXG5jYXJ0aWxhZ2lub3VzXFxuY2FydGxvYWQvU01cXG5jYXJ0b2dyYXBoZXIvU01cXG5jYXJ0b2dyYXBoaWNcXG5jYXJ0b2dyYXBoeS9NXFxuY2FydG9uL01TXFxuY2FydG9vbi9TTURHXFxuY2FydG9vbmlzdC9NU1xcbmNhcnRyaWRnZS9NU1xcbmNhcnR3aGVlbC9HTURTXFxuY2FydmUvSlpHRFJTXFxuY2FydmVyL01cXG5jYXJ2ZXJ5L1NcXG5jYXJ2aW5nL01cXG5jYXJ5YXRpZC9NU1xcbmNhc2FiYS9NU1xcbmNhc2NhZGUvRFNNR1xcbmNhc2NhcmEvU01cXG5jYXNlL0xEU0pNR1xcbmNhc2Vib29rL1NcXG5jYXNlZC9VXFxuY2FzZWhhcmRlbi9ER1NcXG5jYXNlaW4vTVxcbmNhc2Vsb2FkL01TXFxuY2FzZW1lbnQvTVNcXG5jYXNld29yay9aTVJcXG5jYXNld29ya2VyL01cXG5jYXNoL0dNRFNcXG5jYXNoYmFjay9NXFxuY2FzaGJvb2svTVNcXG5jYXNoZXcvTVNcXG5jYXNoaWVyL0dTTURcXG5jYXNobGVzc1xcbmNhc2htZXJlL01cXG5jYXNpbmcvTVxcbmNhc2luby9NU1xcbmNhc2svU01cXG5jYXNrZXQvTVNcXG5jYXNzYXZhL1NNXFxuY2Fzc2Vyb2xlL0RTTUdcXG5jYXNzZXR0ZS9NU1xcbmNhc3NpYS9NU1xcbmNhc3NvY2svU01cXG5jYXNzb3dhcnkvU01cXG5jYXN0L0FTR01cXG5jYXN0YW5ldC9NU1xcbmNhc3Rhd2F5L01TXFxuY2FzdGUvSk1aUlNcXG5jYXN0ZWxsYXRlZFxcbmNhc3Rlci9NXFxuY2FzdGlnYXRlL0RTR05cXG5jYXN0aWdhdGlvbi9NXFxuY2FzdGlnYXRvci9TTVxcbmNhc3RpbmcvQU1cXG5jYXN0bGUvTUdEU1xcbmNhc3RvZmYvU01cXG5jYXN0b3IvTVNcXG5jYXN0cmF0ZS9HTlhEU1xcbmNhc3RyYXRpb24vTVxcbmNhc3VhbC9QTVlTXFxuY2FzdWFsbmVzcy9NXFxuY2FzdWFsdHkvU01cXG5jYXN1aXN0L1NNXFxuY2FzdWlzdGljXFxuY2FzdWlzdHJ5L01cXG5jYXQvU01cXG5jYXRhY2x5c20vTVNcXG5jYXRhY2x5c21hbFxcbmNhdGFjbHlzbWljXFxuY2F0YWNvbWIvU01cXG5jYXRhZmFscXVlL01TXFxuY2F0YWxlcHN5L01cXG5jYXRhbGVwdGljL01TXFxuY2F0YWxvZy9aR1NNRFJcXG5jYXRhbG9nZXIvTVxcbmNhdGFscGEvU01cXG5jYXRhbHlzZXNcXG5jYXRhbHlzaXMvTVxcbmNhdGFseXN0L01TXFxuY2F0YWx5dGljL01cXG5jYXRhbHl6ZS9HRFNcXG5jYXRhbWFyYW4vU01cXG5jYXRhcHVsdC9HTURTXFxuY2F0YXJhY3QvTVNcXG5jYXRhcnJoL01cXG5jYXRhc3Ryb3BoZS9NU1xcbmNhdGFzdHJvcGhpY1xcbmNhdGFzdHJvcGhpY2FsbHlcXG5jYXRhdG9uaWEvTVxcbmNhdGF0b25pYy9TTVxcbmNhdGJpcmQvU01cXG5jYXRib2F0L1NNXFxuY2F0Y2FsbC9HU01EXFxuY2F0Y2gvWkdKTE1SU1xcbmNhdGNoYWxsL01TXFxuY2F0Y2hlci9NXFxuY2F0Y2htZW50L01TXFxuY2F0Y2hwZW5ueVxcbmNhdGNocGhyYXNlL1NNXFxuY2F0Y2h3b3JkL01TXFxuY2F0Y2h5L1JUXFxuY2F0ZWNoaXNtL1NNXFxuY2F0ZWNoaXN0L1NNXFxuY2F0ZWNoaXplL0RTR1xcbmNhdGVnb3JpY2FsL1lcXG5jYXRlZ29yaXphdGlvbi9NU1xcbmNhdGVnb3JpemUvR0RTXFxuY2F0ZWdvcnkvU01cXG5jYXRlci9aR0pEUlNcXG5jYXRlcmNvcm5lclxcbmNhdGVyZXIvTVxcbmNhdGVycGlsbGFyL01TXFxuY2F0ZXJ3YXVsL1NNREdcXG5jYXRmaXNoL01TXFxuY2F0Z3V0L01cXG5jYXRoYXJzZXNcXG5jYXRoYXJzaXMvTVxcbmNhdGhhcnRpYy9TTVxcbmNhdGhlZHJhbC9TTVxcbmNhdGhldGVyL1NNXFxuY2F0aGV0ZXJpemUvRFNHXFxuY2F0aG9kZS9TTVxcbmNhdGhvZGljXFxuY2F0aG9saWNcXG5jYXRob2xpY2l0eS9NXFxuY2F0aW9uL01TXFxuY2F0a2luL01TXFxuY2F0bGlrZVxcbmNhdG5hcC9NU1xcbmNhdG5hcHBlZFxcbmNhdG5hcHBpbmdcXG5jYXRuaXAvTVxcbmNhdHN1aXQvU1xcbmNhdHRhaWwvU01cXG5jYXR0ZWRcXG5jYXR0ZXJ5L1NcXG5jYXR0aWx5XFxuY2F0dGluZXNzL01cXG5jYXR0aW5nXFxuY2F0dGxlL01cXG5jYXR0bGVtYW4vTVxcbmNhdHRsZW1lblxcbmNhdHR5L1RQUlxcbmNhdHdhbGsvU01cXG5jYXVjdXMvTURTR1xcbmNhdWRhbC9ZXFxuY2F1Z2h0L1VcXG5jYXVsZHJvbi9NU1xcbmNhdWxpZmxvd2VyL1NNXFxuY2F1bGsvWkdNRFJTXFxuY2F1bGtlci9NXFxuY2F1c2FsL1lcXG5jYXVzYWxpdHkvU01cXG5jYXVzYXRpb24vTVxcbmNhdXNhdGl2ZVxcbmNhdXNlL01aR0RSU1xcbmNhdXNlbGVzc1xcbmNhdXNlci9NXFxuY2F1c2VyaWUvU01cXG5jYXVzZXdheS9TTVxcbmNhdXN0aWMvU01cXG5jYXVzdGljYWxseVxcbmNhdXN0aWNpdHkvTVxcbmNhdXRlcml6YXRpb24vTVxcbmNhdXRlcml6ZS9HRFNcXG5jYXV0aW9uL1NNREdcXG5jYXV0aW9uYXJ5XFxuY2F1dGlvdXMvSVlcXG5jYXV0aW91c25lc3MvTVxcbmNhdmFsY2FkZS9NU1xcbmNhdmFsaWVyL1NNWVxcbmNhdmFscnkvU01cXG5jYXZhbHJ5bWFuL01cXG5jYXZhbHJ5bWVuXFxuY2F2ZS9EUlNNWkdcXG5jYXZlYXQvTVNcXG5jYXZlbWFuL01cXG5jYXZlbWVuXFxuY2F2ZXJuL01TXFxuY2F2ZXJub3VzL1lcXG5jYXZpYXIvTVxcbmNhdmlsL1pHSk1EUlNcXG5jYXZpbGVyL01cXG5jYXZpbmcvTVxcbmNhdml0YXRpb25cXG5jYXZpdHkvRlNNXFxuY2F2b3J0L0RHU1xcbmNhdy9TTURHXFxuY2F5L0NTTVxcbmNheWVubmUvTVxcbmNheXVzZS9NU1xcbmNjXFxuY2Vhc2UvQ01HRFNcXG5jZWFzZWZpcmUvTVNcXG5jZWFzZWxlc3MvWVBcXG5jZWFzZWxlc3NuZXNzL01cXG5jZWNhXFxuY2VjYWxcXG5jZWN1bS9NXFxuY2VkYXIvTVNcXG5jZWRlL0ZBR1NEXFxuY2VkZXIvTVNcXG5jZWRpbGxhL1NNXFxuY2VpbGlkaFxcbmNlaWxpZGhzXFxuY2VpbGluZy9NU1xcbmNlbGFuZGluZS9NXFxuY2VsZWIvU1xcbmNlbGVicmFudC9TTVxcbmNlbGVicmF0ZS9EU0dOWFxcbmNlbGVicmF0aW9uL01cXG5jZWxlYnJhdG9yL1NNXFxuY2VsZWJyYXRvcnlcXG5jZWxlYnJpdHkvU01cXG5jZWxlcmlhY1xcbmNlbGVyaXR5L01cXG5jZWxlcnkvTVxcbmNlbGVzdGEvTVNcXG5jZWxlc3RpYWwvWVxcbmNlbGliYWN5L01cXG5jZWxpYmF0ZS9NU1xcbmNlbGwvU01EXFxuY2VsbGFyL01TXFxuY2VsbGlzdC9TTVxcbmNlbGxtYXRlL1NNXFxuY2VsbG8vTVNcXG5jZWxsb3BoYW5lL01cXG5jZWxscGhvbmUvTVNcXG5jZWxsdWxhci9TTVxcbmNlbGx1bGl0ZS9NXFxuY2VsbHVsaXRpc1xcbmNlbGx1bG9pZC9NXFxuY2VsbHVsb3NlL01cXG5jZW1lbnQvTURSWkdTXFxuY2VtZW50ZXIvTVxcbmNlbWVudHVtL01cXG5jZW1ldGVyeS9TTVxcbmNlbm9iaXRlL01TXFxuY2Vub2JpdGljXFxuY2Vub3RhcGgvTVxcbmNlbm90YXBoc1xcbmNlbnNlci9NU1xcbmNlbnNvci9NREdTXFxuY2Vuc29yZWQvVVxcbmNlbnNvcmlhbFxcbmNlbnNvcmlvdXMvUFlcXG5jZW5zb3Jpb3VzbmVzcy9NXFxuY2Vuc29yc2hpcC9NXFxuY2Vuc3VyZS9CRFJTTVpHXFxuY2Vuc3VyZXIvTVxcbmNlbnN1cy9NRFNHXFxuY2VudC9TWk1SXFxuY2VudGF1ci9TTVxcbmNlbnRhdm8vU01cXG5jZW50ZW5hcmlhbi9NU1xcbmNlbnRlbmFyeS9TTVxcbmNlbnRlbm5pYWwvTVlTXFxuY2VudGVyL01ER1xcbmNlbnRlcmJvYXJkL1NNXFxuY2VudGVyZm9sZC9NU1xcbmNlbnRlcnBpZWNlL01TXFxuY2VudGlncmFkZVxcbmNlbnRpZ3JhbS9TTVxcbmNlbnRpbGl0ZXIvTVNcXG5jZW50aW1lL1NNXFxuY2VudGltZXRlci9NU1xcbmNlbnRpcGVkZS9TTVxcbmNlbnRyYWwvU01ZXFxuY2VudHJhbGlzbVxcbmNlbnRyYWxpc3RcXG5jZW50cmFsaXR5L01cXG5jZW50cmFsaXphdGlvbi9DTVxcbmNlbnRyYWxpemUvQ0dEU1xcbmNlbnRyYWxpemVyL01TXFxuY2VudHJpZnVnYWwvWVxcbmNlbnRyaWZ1Z2UvRFNNR1xcbmNlbnRyaXBldGFsL1lcXG5jZW50cmlzbS9NXFxuY2VudHJpc3QvTVNcXG5jZW50dXJpb24vU01cXG5jZW50dXJ5L1NNXFxuY2VwaGFsaWNcXG5jZXJhbWljL1NNXFxuY2VyYW1pY2lzdC9TTVxcbmNlcmFtaWNzL01cXG5jZXJhbWlzdC9NU1xcbmNlcmVhbC9NU1xcbmNlcmViZWxsYXJcXG5jZXJlYmVsbHVtL1NNXFxuY2VyZWJyYVxcbmNlcmVicmFsXFxuY2VyZWJyYXRlL0dORFNcXG5jZXJlYnJhdGlvbi9NXFxuY2VyZWJyb3Zhc2N1bGFyXFxuY2VyZWJydW0vTVNcXG5jZXJlbWVudC9NU1xcbmNlcmVtb25pYWwvU01ZXFxuY2VyZW1vbmlvdXMvVVlcXG5jZXJlbW9uaW91c25lc3MvTVxcbmNlcmVtb255L1NNXFxuY2VyaXNlL01cXG5jZXJpdW0vTVxcbmNlcm1ldC9NXFxuY2VydC9TXFxuY2VydGFpbi9VWVxcbmNlcnRhaW50eS9VU01cXG5jZXJ0aWZpYWJsZVxcbmNlcnRpZmlhYmx5XFxuY2VydGlmaWNhdGUvTUdOWERTXFxuY2VydGlmaWNhdGlvbi9NXFxuY2VydGlmeS9EU0dcXG5jZXJ0aXR1ZGUvSU1cXG5jZXJ0aXR1ZGVzXFxuY2VydWxlYW4vTVxcbmNlcnZpY2FsXFxuY2VydmljZXNcXG5jZXJ2aXgvTVxcbmNlc2FyZWFuL01TXFxuY2VzaXVtL01cXG5jZXNzYXRpb24vTVNcXG5jZXNzaW9uL0tBRlNNXFxuY2Vzc3BpdC9TXFxuY2Vzc3Bvb2wvTVNcXG5jZXRhY2Vhbi9NU1xcbmNldGVyaXNcXG5jZlxcbmNnXFxuY2gvSUZWVFxcbmNoYWQvU1xcbmNoYWZlL0dEU1xcbmNoYWZmL0dNRFNcXG5jaGFmZmluY2gvTVNcXG5jaGFncmluL0dTTURcXG5jaGFpbidzXFxuY2hhaW4vVUdEU1xcbmNoYWluc2F3L01ER1NcXG5jaGFpci9HTURTXFxuY2hhaXJsaWZ0L01TXFxuY2hhaXJtYW4vTVxcbmNoYWlybWFuc2hpcC9TTVxcbmNoYWlybWVuXFxuY2hhaXJwZXJzb24vU01cXG5jaGFpcndvbWFuL01cXG5jaGFpcndvbWVuXFxuY2hhaXNlL01TXFxuY2hhbGNlZG9ueS9NXFxuY2hhbGV0L01TXFxuY2hhbGljZS9TTVxcbmNoYWxrL0dNRFNcXG5jaGFsa2JvYXJkL1NNXFxuY2hhbGtpbmVzcy9NXFxuY2hhbGt5L1BSVFxcbmNoYWxsZW5nZS9EUlNNWkdcXG5jaGFsbGVuZ2VkL1VcXG5jaGFsbGVuZ2VyL01cXG5jaGFsbGlzL01cXG5jaGFtYmVyL1NNRFxcbmNoYW1iZXJsYWluL01TXFxuY2hhbWJlcm1haWQvTVNcXG5jaGFtYnJheS9NXFxuY2hhbWVsZW9uL1NNXFxuY2hhbW9pcy9NXFxuY2hhbW9taWxlL01TXFxuY2hhbXAvWkdNRFNcXG5jaGFtcGFnbmUvTVNcXG5jaGFtcGlvbi9HTURTXFxuY2hhbXBpb25zaGlwL01TXFxuY2hhbmNlL01HRFNcXG5jaGFuY2VsL1NNXFxuY2hhbmNlbGxlcnkvU01cXG5jaGFuY2VsbG9yL01TXFxuY2hhbmNlbGxvcnNoaXAvTVxcbmNoYW5jZXJ5L1NNXFxuY2hhbmNpbmVzcy9NXFxuY2hhbmNyZS9TTVxcbmNoYW5jeS9QUlRcXG5jaGFuZGVsaWVyL1NNXFxuY2hhbmRsZXIvTVNcXG5jaGFuZ2UvTVpHRFJTXFxuY2hhbmdlYWJpbGl0eS9NXFxuY2hhbmdlYWJsZS9QXFxuY2hhbmdlYWJsZW5lc3MvTVxcbmNoYW5nZWFibHlcXG5jaGFuZ2VkL1VcXG5jaGFuZ2VsZXNzL1lcXG5jaGFuZ2VsaW5nL1NNXFxuY2hhbmdlb3Zlci9TTVxcbmNoYW5nZXIvTVxcbmNoYW5naW5nL1VcXG5jaGFubmVsL0dTTURcXG5jaGFubmVsaXphdGlvbi9NXFxuY2hhbm5lbGl6ZS9EU0dcXG5jaGFuc29uL1NNXFxuY2hhbnQvWkdNRFJTXFxuY2hhbnRlci9NXFxuY2hhbnRldXNlL01TXFxuY2hhbnRleS9TTVxcbmNoYW50aWNsZWVyL01TXFxuY2hhb3MvTVxcbmNoYW90aWNcXG5jaGFvdGljYWxseVxcbmNoYXAvU01cXG5jaGFwYXJyYWwvU01cXG5jaGFwYXRpL1NcXG5jaGFwYXR0aS9TXFxuY2hhcGJvb2svTVNcXG5jaGFwZWF1L1NNXFxuY2hhcGVsL01TXFxuY2hhcGVyb24vTURHU1xcbmNoYXBlcm9uYWdlL01cXG5jaGFwZXJvbmVkL1VcXG5jaGFwbGFpbi9NU1xcbmNoYXBsYWluY3kvU01cXG5jaGFwbGV0L1NNXFxuY2hhcHBlZFxcbmNoYXBwaW5nXFxuY2hhcHB5L1NcXG5jaGFwdGVyL1NNXFxuY2hhci9TTVxcbmNoYXJhYmFuYy9NU1xcbmNoYXJhY3Rlci9NU1xcbmNoYXJhY3RlcmZ1bFxcbmNoYXJhY3RlcmlzdGljL1NNXFxuY2hhcmFjdGVyaXN0aWNhbGx5L1VcXG5jaGFyYWN0ZXJpemF0aW9uL01TXFxuY2hhcmFjdGVyaXplL0RTR1xcbmNoYXJhY3Rlcmxlc3NcXG5jaGFyYWRlL1NNXFxuY2hhcmJyb2lsL0dEU1xcbmNoYXJjb2FsL01TXFxuY2hhcmQvTVxcbmNoYXJkb25uYXkvU01cXG5jaGFyZ2UvQUVTREdNXFxuY2hhcmdlYWJsZS9BXFxuY2hhcmdlZC9VXFxuY2hhcmdlci9TTVxcbmNoYXJpbHlcXG5jaGFyaW5lc3MvTVxcbmNoYXJpb3QvU01cXG5jaGFyaW90ZWVyL01TXFxuY2hhcmlzbWEvTVxcbmNoYXJpc21hdGljL01TXFxuY2hhcml0YWJsZS9QXFxuY2hhcml0YWJsZW5lc3MvTVxcbmNoYXJpdGFibHkvVVxcbmNoYXJpdHkvU01cXG5jaGFybGFkeS9TXFxuY2hhcmxhdGFuL1NNXFxuY2hhcmxhdGFuaXNtL01cXG5jaGFybGF0YW5yeS9NXFxuY2hhcmxpZS9TXFxuY2hhcm0vWkdNRFJTXFxuY2hhcm1lci9NXFxuY2hhcm1pbmcvWVxcbmNoYXJtbGVzc1xcbmNoYXJyZWRcXG5jaGFycmluZ1xcbmNoYXJ0L0dNRFNcXG5jaGFydGVkL1VcXG5jaGFydGVyJ3NcXG5jaGFydGVyL0FTR0RcXG5jaGFydGVyZXIvTVNcXG5jaGFydHJldXNlL01cXG5jaGFyd29tYW4vTVxcbmNoYXJ3b21lblxcbmNoYXJ5L1RSUFxcbmNoYXNlL01aR0RSU1xcbmNoYXNlci9NXFxuY2hhc20vTVNcXG5jaGFzc2lzL01cXG5jaGFzdGUvUFlUUlxcbmNoYXN0ZW4vREdTXFxuY2hhc3RlbmVzcy9NXFxuY2hhc3Rpc2UvRFJTWkdMXFxuY2hhc3Rpc2VtZW50L1NNXFxuY2hhc3Rpc2VyL01cXG5jaGFzdGl0eS9NXFxuY2hhc3VibGUvU01cXG5jaGF0L1NNXFxuY2hhdGVhdS9TTVxcbmNoYXRlYXV4XFxuY2hhdGVsYWluZS9TTVxcbmNoYXRsaW5lL1NcXG5jaGF0cm9vbS9NXFxuY2hhdHRlZFxcbmNoYXR0ZWwvTVNcXG5jaGF0dGVyL01EUlpHU1xcbmNoYXR0ZXJib3gvTVNcXG5jaGF0dGVyZXIvTVxcbmNoYXR0aWx5XFxuY2hhdHRpbmVzcy9NXFxuY2hhdHRpbmdcXG5jaGF0dHkvVFBSXFxuY2hhdWZmZXVyL0dNRFNcXG5jaGF1dmluaXNtL01cXG5jaGF1dmluaXN0L1NNXFxuY2hhdXZpbmlzdGljXFxuY2hhdXZpbmlzdGljYWxseVxcbmNoZWFwL1BYVE5SWVxcbmNoZWFwZW4vREdcXG5jaGVhcG5lc3MvTVxcbmNoZWFwb1xcbmNoZWFwc2thdGUvTVNcXG5jaGVhdC9aR01EUlNcXG5jaGVhdGVyL01cXG5jaGVjay9BR01EU1xcbmNoZWNrYm9vay9TTVxcbmNoZWNrYm94XFxuY2hlY2tlZC9VXFxuY2hlY2tlci9NREdTXFxuY2hlY2tlcmJvYXJkL1NNXFxuY2hlY2tlcnMvTVxcbmNoZWNrbGlzdC9NU1xcbmNoZWNrbWF0ZS9NR0RTXFxuY2hlY2tvZmYvU01cXG5jaGVja291dC9TTVxcbmNoZWNrcG9pbnQvU01cXG5jaGVja3Jvb20vTVNcXG5jaGVja3N1bVxcbmNoZWNrdXAvTVNcXG5jaGVkZGFyL01cXG5jaGVlay9HTURTXFxuY2hlZWtib25lL1NNXFxuY2hlZWtpbHlcXG5jaGVla2luZXNzL01cXG5jaGVla3kvVFBSXFxuY2hlZXAvR01EU1xcbmNoZWVyL1pHTURSU1xcbmNoZWVyZXIvTVxcbmNoZWVyZnVsL1lQXFxuY2hlZXJmdWxsZXJcXG5jaGVlcmZ1bGxlc3RcXG5jaGVlcmZ1bG5lc3MvTVxcbmNoZWVyaWx5XFxuY2hlZXJpbmVzcy9NXFxuY2hlZXJpby9NU1xcbmNoZWVybGVhZGVyL1NNXFxuY2hlZXJsZXNzL1BZXFxuY2hlZXJsZXNzbmVzcy9NXFxuY2hlZXJ5L1RQUlxcbmNoZWVzZS9NR0RTXFxuY2hlZXNlYm9hcmQvU1xcbmNoZWVzZWJ1cmdlci9TTVxcbmNoZWVzZWNha2UvU01cXG5jaGVlc2VjbG90aC9NXFxuY2hlZXNlcGFyaW5nL01cXG5jaGVlc2luZXNzL01cXG5jaGVlc3kvVFBSXFxuY2hlZXRhaC9NXFxuY2hlZXRhaHNcXG5jaGVmL1NNXFxuY2hlbVxcbmNoZW1pY2FsL1NNWVxcbmNoZW1pc2UvTVNcXG5jaGVtaXN0L01TXFxuY2hlbWlzdHJ5L01cXG5jaGVtby9NXFxuY2hlbW90aGVyYXBldXRpY1xcbmNoZW1vdGhlcmFweS9NXFxuY2hlbXVyZ3kvTVxcbmNoZW5pbGxlL01cXG5jaGVyaXNoL0RTR1xcbmNoZXJvb3QvTVNcXG5jaGVycnkvU01cXG5jaGVydC9NXFxuY2hlcnViL01TXFxuY2hlcnViaWNcXG5jaGVydWJpbVxcbmNoZXJ2aWwvTVxcbmNoZXNzL01cXG5jaGVzc2JvYXJkL01TXFxuY2hlc3NtYW4vTVxcbmNoZXNzbWVuXFxuY2hlc3QvTURTXFxuY2hlc3RlcmZpZWxkL1NNXFxuY2hlc3RmdWwvU01cXG5jaGVzdG51dC9TTVxcbmNoZXN0eS9UUlxcbmNoZXZhbGllci9TTVxcbmNoZXZpb3QvTVxcbmNoZXZyb24vTVNcXG5jaGV3L1NaR01EUlxcbmNoZXdlci9NXFxuY2hld2luZXNzL01cXG5jaGV3eS9QVFJcXG5jaGdcXG5jaGdlXFxuY2hpL1NNXFxuY2hpYXJvc2N1cm8vTVxcbmNoaWMvUFRNUlxcbmNoaWNhbmUvTVNcXG5jaGljYW5lcnkvU01cXG5jaGljaGkvTVNcXG5jaGljay9YTU5TXFxuY2hpY2thZGVlL1NNXFxuY2hpY2tlbi9NREdcXG5jaGlja2VuZmVlZC9NXFxuY2hpY2tlbmhlYXJ0ZWRcXG5jaGlja2VucG94L01cXG5jaGlja2Vuc2hpdC9TIVxcbmNoaWNrcGVhL1NNXFxuY2hpY2t3ZWVkL01cXG5jaGljbGUvTVxcbmNoaWNuZXNzL01cXG5jaGljb3J5L1NNXFxuY2hpZGUvR0RTXFxuY2hpZGluZy9ZXFxuY2hpZWYvVE1SWVNcXG5jaGllZmRvbS9NXFxuY2hpZWZ0YWluL01TXFxuY2hpZWZ0YWluc2hpcC9TTVxcbmNoaWZmb24vTVxcbmNoaWZmb25pZXIvTVNcXG5jaGlnZ2VyL01TXFxuY2hpZ25vbi9NU1xcbmNoaWh1YWh1YS9TTVxcbmNoaWxibGFpbi9TTVxcbmNoaWxkL01cXG5jaGlsZGJlYXJpbmcvTVxcbmNoaWxkYmlydGgvTVxcbmNoaWxkYmlydGhzXFxuY2hpbGRjYXJlL01cXG5jaGlsZGhvb2QvU01cXG5jaGlsZGlzaC9ZUFxcbmNoaWxkaXNobmVzcy9NXFxuY2hpbGRsZXNzL1BcXG5jaGlsZGxlc3NuZXNzL01cXG5jaGlsZGxpa2VcXG5jaGlsZG1pbmRlci9TXFxuY2hpbGRtaW5kaW5nXFxuY2hpbGRwcm9vZi9HU0RcXG5jaGlsZHJlbi9NXFxuY2hpbGkvTVxcbmNoaWxpZXNcXG5jaGlsbC9KUFpUR01EUlNcXG5jaGlsbGVyL01cXG5jaGlsbGluZXNzL01cXG5jaGlsbGluZy9ZXFxuY2hpbGxuZXNzL01cXG5jaGlsbHkvVFBSXFxuY2hpbWUvTVpHRFJTXFxuY2hpbWVyL01cXG5jaGltZXJhL01TXFxuY2hpbWVyaWNcXG5jaGltZXJpY2FsXFxuY2hpbW5leS9NU1xcbmNoaW1wL01TXFxuY2hpbXBhbnplZS9TTVxcbmNoaW4vU01cXG5jaGluYS9NXFxuY2hpbmF3YXJlL01cXG5jaGluY2hpbGxhL01TXFxuY2hpbmUvTVNcXG5jaGluay9HTURTXFxuY2hpbmxlc3NcXG5jaGlubmVkXFxuY2hpbm5pbmdcXG5jaGluby9NU1xcbmNoaW5zdHJhcC9NU1xcbmNoaW50ei9NXFxuY2hpbnR6eS9SVFxcbmNoaW53YWcvU1xcbmNoaXAvU01cXG5jaGlwYm9hcmRcXG5jaGlwbXVuay9TTVxcbmNoaXBvbGF0YS9TXFxuY2hpcHBlZFxcbmNoaXBwZXIvTVNcXG5jaGlwcGllXFxuY2hpcHBpbmcvU1xcbmNoaXBweS9TXFxuY2hpcm9ncmFwaHkvTVxcbmNoaXJvcG9kaXN0L01TXFxuY2hpcm9wb2R5L01cXG5jaGlyb3ByYWN0aWMvU01cXG5jaGlyb3ByYWN0b3IvU01cXG5jaGlycC9HTURTXFxuY2hpcnBpbHlcXG5jaGlycHkvUFRSXFxuY2hpcnJ1cC9HTURTXFxuY2hpc2VsL1pHTURSU1xcbmNoaXNlbGVyL01cXG5jaGl0L1NNXFxuY2hpdGNoYXQvU01cXG5jaGl0Y2hhdHRlZFxcbmNoaXRjaGF0dGluZ1xcbmNoaXRpbi9NXFxuY2hpdGlub3VzXFxuY2hpdG9zYW5cXG5jaGl0dGVybGluZ3MvTVxcbmNoaXZhbHJvdXMvUFlcXG5jaGl2YWxyb3VzbmVzcy9NXFxuY2hpdmFscnkvTVxcbmNoaXZlL01TXFxuY2hpdnkvR0RTXFxuY2hsYW15ZGlhL01TXFxuY2hsYW15ZGlhZVxcbmNobG9yYWwvTVxcbmNobG9yZGFuZS9NXFxuY2hsb3JpZGUvTVNcXG5jaGxvcmluYXRlL0dORFNcXG5jaGxvcmluYXRpb24vTVxcbmNobG9yaW5lL01cXG5jaGxvcm9mbHVvcm9jYXJib24vU01cXG5jaGxvcm9mb3JtL1NHTURcXG5jaGxvcm9waHlsbC9NXFxuY2hsb3JvcGxhc3QvTVNcXG5jaG1cXG5jaG9jL1NcXG5jaG9jay9HTURTXFxuY2hvY2thYmxvY2tcXG5jaG9jb2hvbGljL1NNXFxuY2hvY29sYXRlL01TXFxuY2hvY29sYXR5XFxuY2hvaWNlL01UUlNcXG5jaG9pci9NU1xcbmNob2lyYm95L01TXFxuY2hvaXJtYXN0ZXIvU01cXG5jaG9rZS9NWkdEUlNcXG5jaG9rZWNoZXJyeS9TTVxcbmNob2tlci9NXFxuY2hvbGVjeXN0ZWN0b215XFxuY2hvbGVjeXN0aXRpc1xcbmNob2xlci9NXFxuY2hvbGVyYS9NXFxuY2hvbGVyaWNcXG5jaG9sZXN0ZXJvbC9NXFxuY2hvbXAvWkdNRFJTXFxuY2hvb3NlL1pHUlNcXG5jaG9vc2VyL01cXG5jaG9vc2luZXNzL01cXG5jaG9vc3kvVFBSXFxuY2hvcC9TTVxcbmNob3Bob3VzZS9TTVxcbmNob3BwZWRcXG5jaG9wcGVyL01ER1NcXG5jaG9wcGlseVxcbmNob3BwaW5lc3MvTVxcbmNob3BwaW5nXFxuY2hvcHB5L1RQUlxcbmNob3BzdGljay9TTVxcbmNob3JhbC9NWVNcXG5jaG9yYWxlL01TXFxuY2hvcmQvTVNcXG5jaG9yZGFsXFxuY2hvcmRhdGUvU01cXG5jaG9yZS9NU1xcbmNob3JlYS9NXFxuY2hvcmVvZ3JhcGgvRFJaR1xcbmNob3Jlb2dyYXBoZXIvTVxcbmNob3Jlb2dyYXBoaWNcXG5jaG9yZW9ncmFwaGljYWxseVxcbmNob3Jlb2dyYXBoc1xcbmNob3Jlb2dyYXBoeS9NXFxuY2hvcmlzdGVyL1NNXFxuY2hvcm9pZC9NU1xcbmNob3J0bGUvTVpHRFJTXFxuY2hvcnRsZXIvTVxcbmNob3J1cy9HTURTXFxuY2hvc2VcXG5jaG9zZW5cXG5jaG93L1NHTURcXG5jaG93ZGVyL01TXFxuY2hyaXNtL01cXG5jaHJpc3Rlbi9BU0dEXFxuY2hyaXN0ZW5pbmcvTVNcXG5jaHJpc3RpYW4vVVxcbmNocmlzdG9sb2d5XFxuY2hyb21hdGljXFxuY2hyb21hdGljYWxseVxcbmNocm9tYXRpbi9NXFxuY2hyb21hdG9ncmFwaHlcXG5jaHJvbWUvTUdEU1xcbmNocm9taXVtL01cXG5jaHJvbW9zb21hbFxcbmNocm9tb3NvbWUvTVNcXG5jaHJvbmljXFxuY2hyb25pY2FsbHlcXG5jaHJvbmljbGUvRFJTTVpHXFxuY2hyb25pY2xlci9NXFxuY2hyb25vZ3JhcGgvTVxcbmNocm9ub2dyYXBoc1xcbmNocm9ub2xvZ2ljYWwvWVxcbmNocm9ub2xvZ2lzdC9NU1xcbmNocm9ub2xvZ3kvU01cXG5jaHJvbm9tZXRlci9TTVxcbmNocnlzYWxpcy9NU1xcbmNocnlzYW50aGVtdW0vTVNcXG5jaHViL1NNXFxuY2h1YmJpbmVzcy9NXFxuY2h1YmJ5L1RQUlxcbmNodWNrL0dNRFNcXG5jaHVja2hvbGUvU01cXG5jaHVja2xlL01HRFNcXG5jaHVmZmVkXFxuY2h1Zy9TTVxcbmNodWdnZWRcXG5jaHVnZ2luZ1xcbmNodWtrYS9NU1xcbmNodW0vU01cXG5jaHVtbWVkXFxuY2h1bW1pbHlcXG5jaHVtbWluZXNzL01cXG5jaHVtbWluZ1xcbmNodW1teS9QVFJcXG5jaHVtcC9NU1xcbmNodW5kZXIvR0RTXFxuY2h1bmsvR01EU1xcbmNodW5raW5lc3MvTVxcbmNodW5reS9QVFJcXG5jaHVudGVyL0RHU1xcbmNodXJjaC9NU1xcbmNodXJjaGdvZXIvU01cXG5jaHVyY2hnb2luZy9NXFxuY2h1cmNobWFuL01cXG5jaHVyY2htZW5cXG5jaHVyY2h3YXJkZW4vTVNcXG5jaHVyY2h3b21hblxcbmNodXJjaHdvbWVuXFxuY2h1cmNoeWFyZC9TTVxcbmNodXJsL01TXFxuY2h1cmxpc2gvUFlcXG5jaHVybGlzaG5lc3MvTVxcbmNodXJuL1pHTURSU1xcbmNodXJuZXIvTVxcbmNodXRlL01TXFxuY2h1dG5leS9NU1xcbmNodXR6cGFoL01cXG5jaHltZS9NXFxuY2h5cm9uL01TXFxuY2lhYmF0dGEvU01cXG5jaWFvL1NcXG5jaWNhZGEvTVNcXG5jaWNhdHJpY2VzXFxuY2ljYXRyaXgvTVxcbmNpY2Vyb25lL1NNXFxuY2ljZXJvbmlcXG5jaWRlcidzXFxuY2lkZXIvU1xcbmNpZ2FyL01TXFxuY2lnYXJldHRlL01TXFxuY2lnYXJpbGxvL01TXFxuY2lsYW50cm8vTVxcbmNpbGlhXFxuY2lsaXVtL01cXG5jaW5jaC9HTURTXFxuY2luY2hvbmEvU01cXG5jaW5jdHVyZS9TTVxcbmNpbmRlci9HTURTXFxuY2luZVxcbmNpbmVtYS9NU1xcbmNpbmVtYXRpY1xcbmNpbmVtYXRvZ3JhcGhlci9NU1xcbmNpbmVtYXRvZ3JhcGhpY1xcbmNpbmVtYXRvZ3JhcGh5L01cXG5jaW5uYWJhci9NXFxuY2lubmFtb24vTVxcbmNpcGhlcidzXFxuY2lwaGVyL0NHRFNcXG5jaXJcXG5jaXJjYVxcbmNpcmNhZGlhblxcbmNpcmNsZS9NR0RTXFxuY2lyY2xldC9NU1xcbmNpcmN1aXQvTURHU1xcbmNpcmN1aXRhbFxcbmNpcmN1aXRvdXMvWVBcXG5jaXJjdWl0b3VzbmVzcy9NXFxuY2lyY3VpdHJ5L01cXG5jaXJjdWl0eS9NXFxuY2lyY3VsYXIvU01ZXFxuY2lyY3VsYXJpdHkvTVxcbmNpcmN1bGFyaXplL0RTR1xcbmNpcmN1bGF0ZS9BRFNHXFxuY2lyY3VsYXRpb24vU01cXG5jaXJjdWxhdG9yeVxcbmNpcmN1bWNpc2UvWERTR05cXG5jaXJjdW1jaXNlZC9VXFxuY2lyY3VtY2lzaW9uL01cXG5jaXJjdW1mZXJlbmNlL01TXFxuY2lyY3VtZmVyZW50aWFsXFxuY2lyY3VtZmxleC9NU1xcbmNpcmN1bWxvY3V0aW9uL01TXFxuY2lyY3VtbG9jdXRvcnlcXG5jaXJjdW1uYXZpZ2F0ZS9YR05EU1xcbmNpcmN1bW5hdmlnYXRpb24vTVxcbmNpcmN1bXBvbGFyXFxuY2lyY3Vtc2NyaWJlL0dEU1xcbmNpcmN1bXNjcmlwdGlvbi9NU1xcbmNpcmN1bXNwZWN0L1lcXG5jaXJjdW1zcGVjdGlvbi9NXFxuY2lyY3Vtc3RhbmNlL01HRFNcXG5jaXJjdW1zdGFudGlhbC9ZXFxuY2lyY3VtdmVudC9EU0dcXG5jaXJjdW12ZW50aW9uL01cXG5jaXJjdXMvTVNcXG5jaXJxdWUvTVNcXG5jaXJyaG9zaXMvTVxcbmNpcnJob3RpYy9TTVxcbmNpcnJpXFxuY2lycnVzL01cXG5jaXNcXG5jaXNnZW5kZXJcXG5jaXN0ZXJuL01TXFxuY2l0XFxuY2l0YWRlbC9NU1xcbmNpdGF0aW9uL0FNU1xcbmNpdGUnc1xcbmNpdGUvSUFHU0RcXG5jaXRpZmllZFxcbmNpdGl6ZW4vTVNcXG5jaXRpemVucnkvTVxcbmNpdGl6ZW5zaGlwL01cXG5jaXRyaWNcXG5jaXRyb24vTVNcXG5jaXRyb25lbGxhL01cXG5jaXRydXMvTVNcXG5jaXR5L1NNXFxuY2l0eXdpZGVcXG5jaXZldC9NU1xcbmNpdmljL1NcXG5jaXZpY2FsbHlcXG5jaXZpY3MvTVxcbmNpdmlsL1VZXFxuY2l2aWxpYW4vTVNcXG5jaXZpbGl0eS9JU01cXG5jaXZpbGl6YXRpb24vTVNcXG5jaXZpbGl6ZS9HRFNcXG5jaXZpbGl6ZWQvVVxcbmNpdnZpZXMvTVxcbmNrXFxuY2xcXG5jbGFjay9HTURTXFxuY2xhZC9VXFxuY2xhZGRpbmcvTVxcbmNsYWRlXFxuY2xhaW0nc1xcbmNsYWltL0NLRUFHRFNcXG5jbGFpbWFibGUvQVxcbmNsYWltYW50L01TXFxuY2xhaW1lZC9VXFxuY2xhaW1lci9FQ1NNXFxuY2xhaXJ2b3lhbmNlL01cXG5jbGFpcnZveWFudC9NU1xcbmNsYW0vU01cXG5jbGFtYmFrZS9NU1xcbmNsYW1iZXIvWkdNRFJTXFxuY2xhbWJlcmVyL01cXG5jbGFtbWVkXFxuY2xhbW1pbHlcXG5jbGFtbWluZXNzL01cXG5jbGFtbWluZ1xcbmNsYW1teS9QVFJcXG5jbGFtb3IvR01EU1xcbmNsYW1vcm91c1xcbmNsYW1wL0dNRFNcXG5jbGFtcGRvd24vTVNcXG5jbGFuL1NNXFxuY2xhbmRlc3RpbmUvWVxcbmNsYW5nL1pHTURSU1xcbmNsYW5nb3IvTVxcbmNsYW5nb3JvdXMvWVxcbmNsYW5rL0dNRFNcXG5jbGFubmlzaC9QXFxuY2xhbm5pc2huZXNzL01cXG5jbGFuc21hbi9NXFxuY2xhbnNtZW5cXG5jbGFuc3dvbWFuXFxuY2xhbnN3b21lblxcbmNsYXAvU01cXG5jbGFwYm9hcmQvTURHU1xcbmNsYXBwZWRcXG5jbGFwcGVyL01TXFxuY2xhcHBlcmJvYXJkL1NcXG5jbGFwcGluZy9NXFxuY2xhcHRyYXAvTVxcbmNsYXF1ZS9NU1xcbmNsYXJldC9NU1xcbmNsYXJpZmljYXRpb24vTVxcbmNsYXJpZnkvWERTTkdcXG5jbGFyaW5ldC9TTVxcbmNsYXJpbmV0aXN0L1NNXFxuY2xhcmlvbi9NREdTXFxuY2xhcml0eS9NXFxuY2xhc2gvR01EU1xcbmNsYXNwJ3NcXG5jbGFzcC9VR0RTXFxuY2xhc3MvR01EU1xcbmNsYXNzaWMvTVNcXG5jbGFzc2ljYWwvTVlcXG5jbGFzc2ljaXNtL01cXG5jbGFzc2ljaXN0L01TXFxuY2xhc3NpZmlhYmxlXFxuY2xhc3NpZmljYXRpb24vQ0FNXFxuY2xhc3NpZmljYXRpb25zXFxuY2xhc3NpZmllZCdzXFxuY2xhc3NpZmllZC9VXFxuY2xhc3NpZmllZHNcXG5jbGFzc2lmaWVyL01TXFxuY2xhc3NpZnkvQUNTREdOXFxuY2xhc3NpbmVzcy9NXFxuY2xhc3Npc21cXG5jbGFzc2xlc3MvUFxcbmNsYXNzbWF0ZS9NU1xcbmNsYXNzcm9vbS9NU1xcbmNsYXNzd29yay9NXFxuY2xhc3N5L1RSUFxcbmNsYXR0ZXIvR01EU1xcbmNsYXVzYWxcXG5jbGF1c2UvTVNcXG5jbGF1c3Ryb3Bob2JpYS9NXFxuY2xhdXN0cm9waG9iaWNcXG5jbGF2aWNob3JkL1NNXFxuY2xhdmljbGUvTVNcXG5jbGF2aWVyL01TXFxuY2xhdydzXFxuY2xhdy9DU0dEXFxuY2xheS9NXFxuY2xheWV5XFxuY2xheWllclxcbmNsYXlpZXN0XFxuY2xlYW4vQkpQWlRHRFJZU1xcbmNsZWFuZXIvTVxcbmNsZWFuaW5nL01cXG5jbGVhbmxpbmVzcy9VTVxcbmNsZWFubHkvVVRQUlxcbmNsZWFubmVzcy9VTVxcbmNsZWFuc2UvWkdEUlNcXG5jbGVhbnNlci9NXFxuY2xlYW51cC9NU1xcbmNsZWFyL0pQVEdNRFJZU1xcbmNsZWFyYW5jZS9TTVxcbmNsZWFyaGVhZGVkXFxuY2xlYXJpbmcvTVxcbmNsZWFyaW5naG91c2UvU01cXG5jbGVhcm5lc3MvTVxcbmNsZWFyd2F5L1NcXG5jbGVhdC9NU1xcbmNsZWF2YWdlL01TXFxuY2xlYXZlL1pHRFJTXFxuY2xlYXZlci9NXFxuY2xlZi9TTVxcbmNsZWZ0L01TXFxuY2xlbWF0aXMvTVNcXG5jbGVtZW5jeS9JTVxcbmNsZW1lbnQvWVxcbmNsZW1lbnRpbmUvU1xcbmNsZW5jaC9HTURTXFxuY2xlcmVzdG9yeS9TTVxcbmNsZXJneS9TTVxcbmNsZXJneW1hbi9NXFxuY2xlcmd5bWVuXFxuY2xlcmd5d29tYW4vTVxcbmNsZXJneXdvbWVuXFxuY2xlcmljL01TXFxuY2xlcmljYWwvWVxcbmNsZXJpY2FsaXNtL01cXG5jbGVyay9HTURTXFxuY2xlcmtzaGlwL01cXG5jbGV2ZXIvUFRSWVxcbmNsZXZlcm5lc3MvTVxcbmNsZXZpcy9NU1xcbmNsZXcvU0dNRFxcbmNsaWNoZS9NRFNcXG5jbGljay9CWkdNRFJTXFxuY2xpY2tiYWl0XFxuY2xpY2tlci9NXFxuY2xpZW50L01TXFxuY2xpZW50ZWxlL01TXFxuY2xpZmYvTVNcXG5jbGlmZmhhbmdlci9TTVxcbmNsaWZmaGFuZ2luZ1xcbmNsaWZmdG9wL1NcXG5jbGlpXFxuY2xpbWFjdGVyaWMvTVxcbmNsaW1hY3RpY1xcbmNsaW1hdGUvU01cXG5jbGltYXRpY1xcbmNsaW1hdGljYWxseVxcbmNsaW1hdG9sb2dpc3QvU01cXG5jbGltYXRvbG9neS9NXFxuY2xpbWF4L01EU0dcXG5jbGltYi9TTURSWkdCXFxuY2xpbWJlci9NXFxuY2xpbWJpbmcvTVxcbmNsaW1lL1NNXFxuY2xpbmNoL01EUlNaR1xcbmNsaW5jaGVyL01cXG5jbGluZy9TTVJaR1xcbmNsaW5nZXIvTVxcbmNsaW5nZmlsbVxcbmNsaW5neS9SVFxcbmNsaW5pYy9TTVxcbmNsaW5pY2FsL1lcXG5jbGluaWNpYW4vU01cXG5jbGluay9TTURSWkdcXG5jbGlua2VyL01cXG5jbGlvbWV0cmljL1NcXG5jbGlvbWV0cmljaWFuL01TXFxuY2xpb21ldHJpY3MvTVxcbmNsaXAvU01cXG5jbGlwYm9hcmQvTVNcXG5jbGlwcGVkXFxuY2xpcHBlci9TTVxcbmNsaXBwaW5nL1NNXFxuY2xpcXVlL1NNXFxuY2xpcXVleVxcbmNsaXF1aXNoL1lQXFxuY2xpcXVpc2huZXNzL01cXG5jbGl0L1NNXFxuY2xpdG9yYWxcXG5jbGl0b3JpZGVzXFxuY2xpdG9yaXMvTVNcXG5jbGl4XFxuY2xvYWNhL01cXG5jbG9hY2FlXFxuY2xvYWsnc1xcbmNsb2FrL1VTREdcXG5jbG9ha3Jvb20vTVNcXG5jbG9iYmVyL1NNREdcXG5jbG9jaGUvU01cXG5jbG9jay9TTURHXFxuY2xvY2t3aXNlXFxuY2xvY2t3b3JrL1NNXFxuY2xvZC9NU1xcbmNsb2RkaXNoXFxuY2xvZGhvcHBlci9NU1xcbmNsb2cnc1xcbmNsb2cvVVNcXG5jbG9nZ2VkL1VcXG5jbG9nZ2luZy9VXFxuY2xvaXNvbm5lL01cXG5jbG9pc3Rlci9TTURHXFxuY2xvaXN0cmFsXFxuY2xvbXAvU0RHXFxuY2xvbmFsXFxuY2xvbmUvRFNNR1xcbmNsb25pZGluZVxcbmNsb25rL1NNREdcXG5jbG9wL01TXFxuY2xvcHBlZFxcbmNsb3BwaW5nXFxuY2xvc2UvRFJTTVlUR0pQXFxuY2xvc2VmaXN0ZWRcXG5jbG9zZW1vdXRoZWRcXG5jbG9zZW5lc3MvTVxcbmNsb3Nlb3V0L01TXFxuY2xvc2V0L1NNREdcXG5jbG9zZXVwL1NNXFxuY2xvc2luZy9NXFxuY2xvc3VyZS9FU01cXG5jbG90L01TXFxuY2xvdGgvTVxcbmNsb3RoZS9VRFNHXFxuY2xvdGhlc2hvcnNlL01TXFxuY2xvdGhlc2xpbmUvU01cXG5jbG90aGVzcGluL1NNXFxuY2xvdGhpZXIvTVNcXG5jbG90aGluZy9NXFxuY2xvdGhzXFxuY2xvdHRlZFxcbmNsb3R0aW5nXFxuY2xvdHVyZS9TTVxcbmNsb3VkL1NNREdcXG5jbG91ZGJ1cnN0L1NNXFxuY2xvdWRlZC9VXFxuY2xvdWRpbmVzcy9NXFxuY2xvdWRsZXNzXFxuY2xvdWR5L1JQVFxcbmNsb3V0L1NNREdcXG5jbG92ZS9SU01aXFxuY2xvdmVuXFxuY2xvdmVyL01cXG5jbG92ZXJsZWFmL1NNXFxuY2xvdmVybGVhdmVzXFxuY2xvd24vU01ER1xcbmNsb3duaXNoL1lQXFxuY2xvd25pc2huZXNzL01cXG5jbG95L0RHU1xcbmNsb3lpbmcvWVxcbmNsdWIvTVNcXG5jbHViYmFibGVcXG5jbHViYmVkXFxuY2x1YmJlci9TXFxuY2x1YmJpbmdcXG5jbHViZmVldFxcbmNsdWJmb290L01EXFxuY2x1YmhvdXNlL1NNXFxuY2x1YmxhbmRcXG5jbHVjay9TTURHXFxuY2x1ZS9NR0RTXFxuY2x1ZWxlc3NcXG5jbHVtcC9TTURHXFxuY2x1bXB5L1RSXFxuY2x1bXNpbHlcXG5jbHVtc2luZXNzL01cXG5jbHVtc3kvVFJQXFxuY2x1bmdcXG5jbHVuay9TTURSWkdcXG5jbHVua2VyL01cXG5jbHVua3kvVFJcXG5jbHVzdGVyL01EU0dcXG5jbHV0Y2gvR01EU1xcbmNsdXR0ZXInc1xcbmNsdXR0ZXIvVURTR1xcbmNsdmlcXG5jbHZpaVxcbmNseGlcXG5jbHhpaVxcbmNseGl2XFxuY2x4aXhcXG5jbHh2aVxcbmNseHZpaVxcbmNtXFxuY25pZGFyaWFuL01TXFxuY28vRVNEXFxuY29hY2gvTURTR1xcbmNvYWNobG9hZC9TXFxuY29hY2htYW4vTVxcbmNvYWNobWVuXFxuY29hY2h3b3JrXFxuY29hZGp1dG9yL01TXFxuY29hZ3VsYW50L01TXFxuY29hZ3VsYXRlL0dORFNcXG5jb2FndWxhdGlvbi9NXFxuY29hZ3VsYXRvci9NU1xcbmNvYWwvTURHU1xcbmNvYWxlc2NlL0dEU1xcbmNvYWxlc2NlbmNlL01cXG5jb2FsZXNjZW50XFxuY29hbGZhY2UvTVNcXG5jb2FsZmllbGQvU1xcbmNvYWxpdGlvbi9NU1xcbmNvYWxpdGlvbmlzdC9NU1xcbmNvYWxtaW5lL1NcXG5jb2Fyc2UvUllUUFxcbmNvYXJzZW4vU0RHXFxuY29hcnNlbmVzcy9NXFxuY29hc3QvU01EUlpHXFxuY29hc3RhbFxcbmNvYXN0ZXIvTVxcbmNvYXN0Z3VhcmQvU1xcbmNvYXN0bGluZS9NU1xcbmNvYXQvTURHSlNcXG5jb2F0aW5nL01cXG5jb2F0cm9vbS9TXFxuY29hdHRhaWwvU01cXG5jb2F1dGhvci9NREdTXFxuY29heC9EUlNaR1xcbmNvYXhlci9NXFxuY29heGlhbFxcbmNvYXhpbmcvWVxcbmNvYi9TTVxcbmNvYmFsdC9NXFxuY29iYmVyL1NcXG5jb2JibGUvRFJTTVpHXFxuY29iYmxlci9NXFxuY29iYmxlc3RvbmUvU01cXG5jb2JudXQvU1xcbmNvYnJhL1NNXFxuY29id2ViL1NNXFxuY29id2ViYmVkXFxuY29id2ViYnkvUlRcXG5jb2NhL01cXG5jb2NhaW5lL01cXG5jb2NjaS9TXFxuY29jY3VzL01cXG5jb2NjeWdlc1xcbmNvY2N5eC9NXFxuY29jaGluZWFsL01cXG5jb2NobGVhL1NNXFxuY29jaGxlYWVcXG5jb2NobGVhclxcbmNvY2svTURHU1xcbmNvY2thZGUvU01cXG5jb2NrYW1hbWllXFxuY29ja2F0aWVsL01TXFxuY29ja2F0b28vU01cXG5jb2NrYXRyaWNlL1NNXFxuY29ja2NoYWZlci9TXFxuY29ja2Nyb3cvU01cXG5jb2NrZXJlbC9TTVxcbmNvY2tleWVkXFxuY29ja2ZpZ2h0L01HU1xcbmNvY2tmaWdodGluZy9NXFxuY29ja2lseVxcbmNvY2tpbmVzcy9NXFxuY29ja2xlL1NNXFxuY29ja2xlc2hlbGwvU01cXG5jb2NrbmV5L1NNXFxuY29ja3BpdC9TTVxcbmNvY2tyb2FjaC9NU1xcbmNvY2tzY29tYi9TTVxcbmNvY2tzdWNrZXIvTVMhXFxuY29ja3N1cmVcXG5jb2NrdGFpbC9NU1xcbmNvY2t5L1JUUFxcbmNvY28vTVNcXG5jb2NvYS9TTVxcbmNvY29udXQvU01cXG5jb2Nvb24vU01ER1xcbmNvZC9TTVxcbmNvZGEvTVNcXG5jb2RkZWRcXG5jb2RkaW5nXFxuY29kZGxlL0RTR1xcbmNvZGUnc1xcbmNvZGUvQ1pHRFJTXFxuY29kZWluZS9NXFxuY29kZXBlbmRlbmN5L01cXG5jb2RlcGVuZGVudC9TTVxcbmNvZGVyL0NNXFxuY29kZXgvTVxcbmNvZGZpc2gvTVNcXG5jb2RnZXIvU01cXG5jb2RpY2VzXFxuY29kaWNpbC9TTVxcbmNvZGlmaWNhdGlvbi9NXFxuY29kaWZpZXIvTVxcbmNvZGlmeS9YRFJTTlpHXFxuY29kb24vU1xcbmNvZHBpZWNlL01TXFxuY29kc3dhbGxvcFxcbmNvZWQvTVNcXG5jb2VkdWNhdGlvbi9NXFxuY29lZHVjYXRpb25hbFxcbmNvZWZmaWNpZW50L01TXFxuY29lbGVudGVyYXRlL01TXFxuY29lbnp5bWVcXG5jb2VxdWFsL01ZU1xcbmNvZXJjZS9EUlNaR05WXFxuY29lcmNlci9NXFxuY29lcmNpb24vTVxcbmNvZXZhbC9TTVlcXG5jb2V4aXN0L0RTR1xcbmNvZXhpc3RlbmNlL01cXG5jb2V4aXN0ZW50XFxuY29leHRlbnNpdmVcXG5jb2ZmZWUvU01cXG5jb2ZmZWVjYWtlL1NNXFxuY29mZmVlaG91c2UvTVNcXG5jb2ZmZWVtYWtlci9TTVxcbmNvZmZlZXBvdC9NU1xcbmNvZmZlci9TTVxcbmNvZmZlcmRhbS9NU1xcbmNvZmZpbi9TTURHXFxuY29nL1NNXFxuY29nZW5jeS9NXFxuY29nZW50L1lcXG5jb2dpdGF0ZS9EU1hHTlZcXG5jb2dpdGF0aW9uL01cXG5jb2dpdGF0b3IvTVNcXG5jb2duYWMvU01cXG5jb2duYXRlL01TXFxuY29nbml0aW9uL0FNXFxuY29nbml0aW9uYWxcXG5jb2duaXRpdmUvWVxcbmNvZ25pemFibGVcXG5jb2duaXphbmNlL0FNXFxuY29nbml6YW50XFxuY29nbm9tZW4vU01cXG5jb2dub3NjZW50ZS9NXFxuY29nbm9zY2VudGlcXG5jb2d3aGVlbC9TTVxcbmNvaGFiaXQvU0dEXFxuY29oYWJpdGFudC9NU1xcbmNvaGFiaXRhdGlvbi9NXFxuY29oZWlyL1NNXFxuY29oZXJlL0RTR1xcbmNvaGVyZW5jZS9JTVxcbmNvaGVyZW5jeS9NXFxuY29oZXJlbnQvSVlcXG5jb2hlc2lvbi9NXFxuY29oZXNpdmUvWVBcXG5jb2hlc2l2ZW5lc3MvTVxcbmNvaG8vTVNcXG5jb2hvcnQvU01cXG5jb2lmL01TXFxuY29pZmZlZFxcbmNvaWZmaW5nXFxuY29pZmZ1cmUvRFNNR1xcbmNvaWwncy9BXFxuY29pbC9VQURHU1xcbmNvaW4vTURSWkdTXFxuY29pbmFnZS9TTVxcbmNvaW5jaWRlL0RTR1xcbmNvaW5jaWRlbmNlL01TXFxuY29pbmNpZGVudFxcbmNvaW5jaWRlbnRhbC9ZXFxuY29pbmVyL01cXG5jb2luc3VyYW5jZS9NXFxuY29pclxcbmNvaXRhbFxcbmNvaXR1cy9NXFxuY29rZS9NR0RTXFxuY29sL1NcXG5jb2xhL01TXFxuY29sYW5kZXIvU01cXG5jb2xkL01SWVRQU1xcbmNvbGRibG9vZGVkXFxuY29sZG5lc3MvTVxcbmNvbGVzbGF3L01cXG5jb2xldXMvTVNcXG5jb2xleS9TXFxuY29saWMvTVxcbmNvbGlja3lcXG5jb2xpc2V1bS9NU1xcbmNvbGl0aXMvTVxcbmNvbGxcXG5jb2xsYWJvcmF0ZS9EU1hHTlZcXG5jb2xsYWJvcmF0aW9uL01cXG5jb2xsYWJvcmF0aW9uaXN0XFxuY29sbGFib3JhdGl2ZS9ZXFxuY29sbGFib3JhdG9yL01TXFxuY29sbGFnZS9TTVxcbmNvbGxhZ2VuXFxuY29sbGFwc2UvTUdEU1xcbmNvbGxhcHNpYmxlXFxuY29sbGFyL1NNREdcXG5jb2xsYXJib25lL1NNXFxuY29sbGFyZC9TTVxcbmNvbGxhcmxlc3NcXG5jb2xsYXRlL0RTWEdOXFxuY29sbGF0ZXJhbC9NWVxcbmNvbGxhdGVyYWxpemVcXG5jb2xsYXRpb24vTVxcbmNvbGxhdG9yL01TXFxuY29sbGVhZ3VlL01TXFxuY29sbGVjdCdzXFxuY29sbGVjdC9BU0dWRFxcbmNvbGxlY3RlZC9VXFxuY29sbGVjdGVkbHlcXG5jb2xsZWN0aWJsZS9TTVxcbmNvbGxlY3Rpb24vQU1TXFxuY29sbGVjdGl2ZS9NWVNcXG5jb2xsZWN0aXZpc20vTVxcbmNvbGxlY3RpdmlzdC9TTVxcbmNvbGxlY3Rpdml6YXRpb24vTVxcbmNvbGxlY3Rpdml6ZS9EU0dcXG5jb2xsZWN0b3IvTVNcXG5jb2xsZWVuL1NNXFxuY29sbGVnZS9TTVxcbmNvbGxlZ2lhbGl0eS9NXFxuY29sbGVnaWFuL01TXFxuY29sbGVnaWF0ZVxcbmNvbGxpZGUvRFJTWkdcXG5jb2xsaWUvUlNNWlxcbmNvbGxpZXIvTVxcbmNvbGxpZXJ5L1NNXFxuY29sbGlzaW9uL1NNXFxuY29sbG9jYXRlL01HTkRTWFxcbmNvbGxvY2F0aW9uL01cXG5jb2xsb2lkL1NNXFxuY29sbG9pZGFsXFxuY29sbG9xXFxuY29sbG9xdWlhbC9ZXFxuY29sbG9xdWlhbGlzbS9TTVxcbmNvbGxvcXVpZXNcXG5jb2xsb3F1aXVtL01TXFxuY29sbG9xdXkvTVxcbmNvbGx1ZGUvRFNHXFxuY29sbHVzaW9uL01cXG5jb2xsdXNpdmVcXG5jb2xvZ25lL1NNXFxuY29sb24vU01cXG5jb2xvbmVsL1NNXFxuY29sb25lbGN5L01cXG5jb2xvbmVzXFxuY29sb25pYWwvU01ZXFxuY29sb25pYWxpc20vTVxcbmNvbG9uaWFsaXN0L01TXFxuY29sb25pc3QvU01cXG5jb2xvbml6YXRpb24vQUNNXFxuY29sb25pemUvQ0FHU0RcXG5jb2xvbml6ZXIvTVNcXG5jb2xvbm5hZGUvTURTXFxuY29sb25vc2NvcHkvU01cXG5jb2xvbnkvU01cXG5jb2xvcGhvbi9TTVxcbmNvbG9yJ3NcXG5jb2xvci9BRUdEU1xcbmNvbG9yYW50L1NNXFxuY29sb3JhdGlvbi9FTVxcbmNvbG9yYXR1cmEvTVNcXG5jb2xvcmJsaW5kL1BcXG5jb2xvcmJsaW5kbmVzcy9NXFxuY29sb3JlZCdzXFxuY29sb3JlZC9VXFxuY29sb3JlZHNcXG5jb2xvcmZhc3QvUFxcbmNvbG9yZmFzdG5lc3MvTVxcbmNvbG9yZnVsL1BZXFxuY29sb3JmdWxuZXNzL01cXG5jb2xvcmluZydzXFxuY29sb3Jpc3QvU1xcbmNvbG9yaXphdGlvbi9NXFxuY29sb3JpemUvRFNHXFxuY29sb3JsZXNzL1BZXFxuY29sb3JsZXNzbmVzcy9NXFxuY29sb3J3YXkvU1xcbmNvbG9zc2FsL1lcXG5jb2xvc3NpXFxuY29sb3NzdXMvTVxcbmNvbG9zdG9teS9TTVxcbmNvbG9zdHJ1bS9NXFxuY29sdC9NU1xcbmNvbHRpc2hcXG5jb2x1bWJpbmUvU01cXG5jb2x1bW4vU01EXFxuY29sdW1uYXJcXG5jb2x1bW5pc3QvU01cXG5jb20vSkxcXG5jb21hL01TXFxuY29tYWtlci9TTVxcbmNvbWF0b3NlXFxuY29tYi9NRFJaR0pTXFxuY29tYmF0L1NNREdWXFxuY29tYmF0YW50L1NNXFxuY29tYmF0aXZlbmVzcy9NXFxuY29tYmVkL1VcXG5jb21iZXIvTVxcbmNvbWJpbmF0aW9uL1NNXFxuY29tYmluZSdzXFxuY29tYmluZS9BRFNHXFxuY29tYmluZWQvVVxcbmNvbWJpbmVyL01TXFxuY29tYmluZ3MvTVxcbmNvbWJvL1NNXFxuY29tYnVzdC9TR1ZEXFxuY29tYnVzdGliaWxpdHkvTVxcbmNvbWJ1c3RpYmxlL01TXFxuY29tYnVzdGlvbi9NXFxuY29tZS9JTVpHUlNcXG5jb21lYmFjay9NU1xcbmNvbWVkaWFuL01TXFxuY29tZWRpY1xcbmNvbWVkaWVubmUvTVNcXG5jb21lZG93bi9NU1xcbmNvbWVkeS9TTVxcbmNvbWVsaW5lc3MvTVxcbmNvbWVseS9SUFRcXG5jb21lcidzXFxuY29tZXN0aWJsZS9TTVxcbmNvbWV0L1NNXFxuY29tZXVwcGFuY2UvU01cXG5jb21maXQnc1xcbmNvbWZpdC9FU1xcbmNvbWZvcnQvRVNNREdcXG5jb21mb3J0YWJsZS9QXFxuY29tZm9ydGFibGVuZXNzL01cXG5jb21mb3J0YWJseS9VXFxuY29tZm9ydGVyL01TXFxuY29tZm9ydGluZy9ZXFxuY29tZm9ydGxlc3NcXG5jb21meS9SVFxcbmNvbWljL1NNXFxuY29taWNhbC9ZXFxuY29taWNhbGl0eS9NXFxuY29taW5nL01cXG5jb21pdHkvTVxcbmNvbW1cXG5jb21tYS9TTVxcbmNvbW1hbmQvU01EUkxaR1xcbmNvbW1hbmRhbnQvTVNcXG5jb21tYW5kZWVyL0dEU1xcbmNvbW1hbmRlci9NXFxuY29tbWFuZG1lbnQvTVNcXG5jb21tYW5kby9TTVxcbmNvbW1lbW9yYXRlL1hHTlZEU1xcbmNvbW1lbW9yYXRpb24vTVxcbmNvbW1lbW9yYXRvci9NU1xcbmNvbW1lbmNlL0FEU0xHXFxuY29tbWVuY2VtZW50L0FNXFxuY29tbWVuY2VtZW50c1xcbmNvbW1lbmQvQVNEQkdcXG5jb21tZW5kYWJseVxcbmNvbW1lbmRhdGlvbi9BTVNcXG5jb21tZW5kYXRvcnlcXG5jb21tZW5zdXJhYmxlXFxuY29tbWVuc3VyYXRlL0lZXFxuY29tbWVudC9HU01EXFxuY29tbWVudGFyeS9TTVxcbmNvbW1lbnRhdGUvRFNHXFxuY29tbWVudGF0b3IvU01cXG5jb21tZXJjZS9NXFxuY29tbWVyY2lhbC9TTVlcXG5jb21tZXJjaWFsaXNtL01cXG5jb21tZXJjaWFsaXphdGlvbi9NXFxuY29tbWVyY2lhbGl6ZS9HRFNcXG5jb21taWUvU01cXG5jb21taW5nbGUvRFNHXFxuY29tbWlzZXJhdGUvR05WRFNYXFxuY29tbWlzZXJhdGlvbi9NXFxuY29tbWlzc2FyL1NNXFxuY29tbWlzc2FyaWF0L1NNXFxuY29tbWlzc2FyeS9TTVxcbmNvbW1pc3Npb24nc1xcbmNvbW1pc3Npb24vQUNTR0RcXG5jb21taXNzaW9uYWlyZS9TXFxuY29tbWlzc2lvbmVyL1NNXFxuY29tbWl0L0FTXFxuY29tbWl0bWVudC9NU1xcbmNvbW1pdHRhbC9TTVxcbmNvbW1pdHRlZC9BVVxcbmNvbW1pdHRlZS9TTVxcbmNvbW1pdHRlZW1hbi9NXFxuY29tbWl0dGVlbWVuXFxuY29tbWl0dGVld29tYW4vTVxcbmNvbW1pdHRlZXdvbWVuXFxuY29tbWl0dGVyL1NcXG5jb21taXR0aW5nL0FcXG5jb21tb2RlJ3NcXG5jb21tb2RlL0VJU1xcbmNvbW1vZGlmaWNhdGlvblxcbmNvbW1vZGlvdXMvWVxcbmNvbW1vZGl0eS9TTVxcbmNvbW1vZG9yZS9TTVxcbmNvbW1vbidzXFxuY29tbW9uL1VQUllUXFxuY29tbW9uYWxpdHkvU1xcbmNvbW1vbmFsdHkvTVxcbmNvbW1vbmVyL01TXFxuY29tbW9ubmVzcy9VTVxcbmNvbW1vbnBsYWNlL01TXFxuY29tbW9uc1xcbmNvbW1vbnNlbnNlXFxuY29tbW9ud2VhbC9NSFxcbmNvbW1vbndlYWx0aC9NXFxuY29tbW9ud2VhbHRoc1xcbmNvbW1vdGlvbi9TTVxcbmNvbW11bmFsL1lcXG5jb21tdW5lL1hEU01HTlxcbmNvbW11bmljYWJpbGl0eS9NXFxuY29tbXVuaWNhYmxlL0lcXG5jb21tdW5pY2FibHlcXG5jb21tdW5pY2FudC9NU1xcbmNvbW11bmljYXRlL0dOVkRTWFxcbmNvbW11bmljYXRpb24vTVxcbmNvbW11bmljYXRpdmUvVVxcbmNvbW11bmljYXRvci9TTVxcbmNvbW11bmlvbi9NXFxuY29tbXVuaXF1ZS9TTVxcbmNvbW11bmlzbS9NXFxuY29tbXVuaXN0L1NNXFxuY29tbXVuaXN0aWNcXG5jb21tdW5pdHkvU01cXG5jb21tdXRhdGlvbi9NU1xcbmNvbW11dGF0aXZlXFxuY29tbXV0YXRpdml0eVxcbmNvbW11dGF0b3IvU01cXG5jb21tdXRlL0JEUlNNWkdcXG5jb21tdXRlci9NXFxuY29tb3JiaWRpdHlcXG5jb21wL01EWUdTXFxuY29tcGFjdC9UR1NNRFJZUFxcbmNvbXBhY3Rpb25cXG5jb21wYWN0bmVzcy9NXFxuY29tcGFjdG9yL1NNXFxuY29tcGFuaW9uL1NCTVxcbmNvbXBhbmlvbmFibHlcXG5jb21wYW5pb25zaGlwL01cXG5jb21wYW5pb253YXkvTVNcXG5jb21wYW55L1NNXFxuY29tcGFyYWJpbGl0eS9NXFxuY29tcGFyYWJsZS9JXFxuY29tcGFyYWJseS9JXFxuY29tcGFyYXRpdmUvTVlTXFxuY29tcGFyZS9CRFNHXFxuY29tcGFyaXNvbi9NU1xcbmNvbXBhcnRtZW50L1NNXFxuY29tcGFydG1lbnRhbFxcbmNvbXBhcnRtZW50YWxpemF0aW9uL01cXG5jb21wYXJ0bWVudGFsaXplL0RTR1xcbmNvbXBhc3MvR01EU1xcbmNvbXBhc3Npb24vTVxcbmNvbXBhc3Npb25hdGUvWVxcbmNvbXBhdGliaWxpdHkvSU1cXG5jb21wYXRpYmxlL0lNU1xcbmNvbXBhdGlibHkvSVxcbmNvbXBhdHJpb3QvTVNcXG5jb21wZWVyL1NNXFxuY29tcGVsL1NcXG5jb21wZWxsZWRcXG5jb21wZWxsaW5nL1lcXG5jb21wZW5kaW91c1xcbmNvbXBlbmRpdW0vU01cXG5jb21wZW5zYXRlL0RTWEdOXFxuY29tcGVuc2F0ZWQvVVxcbmNvbXBlbnNhdGlvbi9NXFxuY29tcGVuc2F0b3J5XFxuY29tcGVyZS9EU0dcXG5jb21wZXRlL0RTR1xcbmNvbXBldGVuY2UvSU1cXG5jb21wZXRlbmNlc1xcbmNvbXBldGVuY2llc1xcbmNvbXBldGVuY3kvSU1cXG5jb21wZXRlbnQvSVlcXG5jb21wZXRpdGlvbi9TTVxcbmNvbXBldGl0aXZlL1BZXFxuY29tcGV0aXRpdmVuZXNzL01cXG5jb21wZXRpdG9yL1NNXFxuY29tcGlsYXRpb24vU01cXG5jb21waWxlL0RSU1pHXFxuY29tcGlsZXIvTVxcbmNvbXBsYWNlbmNlL01cXG5jb21wbGFjZW5jeS9NXFxuY29tcGxhY2VudC9ZXFxuY29tcGxhaW4vRFJaR1NcXG5jb21wbGFpbmFudC9NU1xcbmNvbXBsYWluZXIvTVxcbmNvbXBsYWludC9TTVxcbmNvbXBsYWlzYW5jZS9NXFxuY29tcGxhaXNhbnQvWVxcbmNvbXBsZWN0ZWRcXG5jb21wbGVtZW50L1NHTURcXG5jb21wbGVtZW50YXJ5XFxuY29tcGxldGUvUFlUR05YRFJTXFxuY29tcGxldGVkL1VcXG5jb21wbGV0ZW5lc3MvSU1cXG5jb21wbGV0aW9uL01cXG5jb21wbGV4L01TWVxcbmNvbXBsZXhpb24vTURTXFxuY29tcGxleGlvbmFsXFxuY29tcGxleGl0eS9TTVxcbmNvbXBsaWFuY2UvTVxcbmNvbXBsaWFudC9ZXFxuY29tcGxpY2F0ZS9HRFNcXG5jb21wbGljYXRlZC9ZXFxuY29tcGxpY2F0aW9uL01cXG5jb21wbGljaXRcXG5jb21wbGljaXR5L01cXG5jb21wbGltZW50L01ER1NcXG5jb21wbGltZW50YXJ5L1VcXG5jb21wbHkvTkRTWEdcXG5jb21wby9TXFxuY29tcG9uZW50L1NNXFxuY29tcG9ydC9MU0dEXFxuY29tcG9ydG1lbnQvTVxcbmNvbXBvc2UvQUVDR1NEXFxuY29tcG9zZWRseVxcbmNvbXBvc2VyL01TXFxuY29tcG9zaXRlL01ZR05YRFNcXG5jb21wb3NpdGlvbi9DTVxcbmNvbXBvc2l0aW9uYWxcXG5jb21wb3NpdG9yL1NNXFxuY29tcG9zdC9TR01EXFxuY29tcG9zdXJlL0VNXFxuY29tcG90ZS9TTVxcbmNvbXBvdW5kL0dNREJTXFxuY29tcG91bmRlZC9VXFxuY29tcHJlaGVuZC9TREdcXG5jb21wcmVoZW5zaWJpbGl0eS9JTVxcbmNvbXByZWhlbnNpYmxlL0lcXG5jb21wcmVoZW5zaWJseS9JXFxuY29tcHJlaGVuc2lvbi9JTVxcbmNvbXByZWhlbnNpb25zXFxuY29tcHJlaGVuc2l2ZS9QTVlTXFxuY29tcHJlaGVuc2l2ZW5lc3MvTVxcbmNvbXByZXNzJ3NcXG5jb21wcmVzcy9DR1ZEU1xcbmNvbXByZXNzZWQvVVxcbmNvbXByZXNzaWJsZVxcbmNvbXByZXNzaW9uL0NNXFxuY29tcHJlc3Nvci9TTVxcbmNvbXByaXNlL0dEU1xcbmNvbXByb21pc2UvTUdEU1xcbmNvbXB0cm9sbGVyL01TXFxuY29tcHVsc2lvbi9NU1xcbmNvbXB1bHNpdmUvWVBcXG5jb21wdWxzaXZlbmVzcy9NXFxuY29tcHVsc29yaWx5XFxuY29tcHVsc29yeS9TTVxcbmNvbXB1bmN0aW9uL1NNXFxuY29tcHV0YXRpb24vU01cXG5jb21wdXRhdGlvbmFsL1lcXG5jb21wdXRlL0FEU0dcXG5jb21wdXRlci9NU1xcbmNvbXB1dGVyYXRlXFxuY29tcHV0ZXJpemF0aW9uL01cXG5jb21wdXRlcml6ZS9HRFNcXG5jb21wdXRpbmcvTVxcbmNvbXJhZGUvU01ZXFxuY29tcmFkZXNoaXAvTVxcbmNvbi9HU01cXG5jb25jYXRlbmF0ZS9YRFNHTlxcbmNvbmNhdGVuYXRpb24vTVxcbmNvbmNhdmUvWVBcXG5jb25jYXZlbmVzcy9NXFxuY29uY2VhbC9TRFJaR0JMXFxuY29uY2VhbGVkL1VcXG5jb25jZWFsZXIvTVxcbmNvbmNlYWxtZW50L01cXG5jb25jZWl0L1NNRFxcbmNvbmNlaXRlZC9QWVxcbmNvbmNlaXRlZG5lc3MvTVxcbmNvbmNlaXZhYmxlL0lcXG5jb25jZWl2YWJseS9JXFxuY29uY2VpdmUvRFNHQlxcbmNvbmNlbnRyYXRlL0RTTUdOWFxcbmNvbmNlbnRyYXRpb24vTVxcbmNvbmNlbnRyaWNcXG5jb25jZW50cmljYWxseVxcbmNvbmNlcHQvU01cXG5jb25jZXB0aW9uL1NNXFxuY29uY2VwdGlvbmFsXFxuY29uY2VwdHVhbC9ZXFxuY29uY2VwdHVhbGl6YXRpb24vTVNcXG5jb25jZXB0dWFsaXplL0RTR1xcbmNvbmNlcm4vVU1EXFxuY29uY2VybmVkL1VZXFxuY29uY2VybmluZ1xcbmNvbmNlcm5zXFxuY29uY2VydCdzXFxuY29uY2VydC9FU0RHXFxuY29uY2VydGVkL1lcXG5jb25jZXJ0Z29lci9TXFxuY29uY2VydGluYS9TR01EXFxuY29uY2VydGl6ZS9EU0dcXG5jb25jZXJ0bWFzdGVyL01TXFxuY29uY2VydG8vU01cXG5jb25jZXNzaW9uYWlyZS9NU1xcbmNvbmNlc3Npb25hbFxcbmNvbmNlc3Npb25hcnlcXG5jb25jaC9NXFxuY29uY2hpZS9TXFxuY29uY2hzXFxuY29uY2llcmdlL01TXFxuY29uY2lsaWF0ZS9EU0dOXFxuY29uY2lsaWF0aW9uL0FNXFxuY29uY2lsaWF0b3IvU01cXG5jb25jaWxpYXRvcnlcXG5jb25jaXNlL1JQWVROXFxuY29uY2lzZW5lc3MvTVxcbmNvbmNpc2lvbi9NXFxuY29uY2xhdmUvU01cXG5jb25jbHVkZS9EU0dcXG5jb25jbHVzaW9uL01TXFxuY29uY2x1c2l2ZS9JWVBcXG5jb25jbHVzaXZlbmVzcy9JTVxcbmNvbmNvY3QvU0RHXFxuY29uY29jdGlvbi9NU1xcbmNvbmNvbWl0YW50L01ZU1xcbmNvbmNvcmQvTVxcbmNvbmNvcmRhbmNlL1NNXFxuY29uY29yZGFudFxcbmNvbmNvcmRhdC9TTVxcbmNvbmNvdXJzZS9TTVxcbmNvbmNyZXRlL0RTUE1ZR05YXFxuY29uY3JldGVuZXNzL01cXG5jb25jcmV0aW9uL01cXG5jb25jdWJpbmFnZS9NXFxuY29uY3ViaW5lL01TXFxuY29uY3VwaXNjZW5jZS9NXFxuY29uY3VwaXNjZW50XFxuY29uY3VyL1NcXG5jb25jdXJyZWRcXG5jb25jdXJyZW5jZS9TTVxcbmNvbmN1cnJlbmN5XFxuY29uY3VycmluZ1xcbmNvbmN1c3MvVlxcbmNvbmN1c3Npb24vU01cXG5jb25kZW1uL1NEUlpHXFxuY29uZGVtbmF0aW9uL01TXFxuY29uZGVtbmF0b3J5XFxuY29uZGVtbmVyL01cXG5jb25kZW5zYXRlL01OWFNcXG5jb25kZW5zYXRpb24vTVxcbmNvbmRlbnNlL0RSU1pHXFxuY29uZGVuc2VyL01cXG5jb25kZXNjZW5kaW5nL1lcXG5jb25kZXNjZW5zaW9uL01cXG5jb25kaWduXFxuY29uZGltZW50L01TXFxuY29uZGl0aW9uJ3NcXG5jb25kaXRpb24vQUdTRFxcbmNvbmRpdGlvbmFsL1NNWVxcbmNvbmRpdGlvbmFsaXR5XFxuY29uZGl0aW9uZWQvVVxcbmNvbmRpdGlvbmVyL1NNXFxuY29uZGl0aW9uaW5nL01cXG5jb25kby9TTVxcbmNvbmRvbGVuY2UvU01cXG5jb25kb20vU01cXG5jb25kb21pbml1bS9NU1xcbmNvbmRvbmUvRFNHXFxuY29uZG9yL1NNXFxuY29uZHVjZS9EU0dWXFxuY29uZHVjdC9NREdWXFxuY29uZHVjdGFuY2UvTVxcbmNvbmR1Y3RpYmlsaXR5L01cXG5jb25kdWN0aWJsZVxcbmNvbmR1Y3Rpb24vTVxcbmNvbmR1Y3Rpdml0eS9NXFxuY29uZHVjdG9yL01TXFxuY29uZHVjdHJlc3MvTVNcXG5jb25kdWl0L1NNXFxuY29uZS9NXFxuY29uZXlzXFxuY29uZmFiL1NNXFxuY29uZmFiYmVkXFxuY29uZmFiYmluZ1xcbmNvbmZhYnVsYXRlL1hEU0dOXFxuY29uZmFidWxhdGlvbi9NXFxuY29uZmVjdGlvbi9TWk1SXFxuY29uZmVjdGlvbmVyL01cXG5jb25mZWN0aW9uZXJ5L1NNXFxuY29uZmVkZXJhY3kvU01cXG5jb25mZWRlcmF0ZS9NXFxuY29uZmVyL1NcXG5jb25mZXJlZS9TTVxcbmNvbmZlcmVuY2UvTUdTXFxuY29uZmVycmFibGVcXG5jb25mZXJyYWwvTVxcbmNvbmZlcnJlZFxcbmNvbmZlcnJlci9NU1xcbmNvbmZlcnJpbmdcXG5jb25mZXNzZWQvWVxcbmNvbmZlc3Npb24vU01cXG5jb25mZXNzaW9uYWwvU01cXG5jb25mZXNzb3IvTVNcXG5jb25mZXR0aS9NXFxuY29uZmlkYW50L01TXFxuY29uZmlkYW50ZS9TTVxcbmNvbmZpZGUvRFJTWkdcXG5jb25maWRlbmNlL1NNXFxuY29uZmlkZW50L1lcXG5jb25maWRlbnRpYWwvWVxcbmNvbmZpZGVudGlhbGl0eS9NXFxuY29uZmlkZXIvTVxcbmNvbmZpZGluZy9ZXFxuY29uZmlndXJhdGlvbi9TXFxuY29uZmlndXJlL0JcXG5jb25maW5lZC9VXFxuY29uZmluZW1lbnQvTVNcXG5jb25maXJtL0FTREdcXG5jb25maXJtYXRpb24vQVNNXFxuY29uZmlybWF0b3J5XFxuY29uZmlybWVkL1VcXG5jb25maXNjYXRlL0RTR05YXFxuY29uZmlzY2F0aW9uL01cXG5jb25maXNjYXRvci9TTVxcbmNvbmZpc2NhdG9yeVxcbmNvbmZsYWdyYXRpb24vTVNcXG5jb25mbGF0ZS9YRFNHTlxcbmNvbmZsYXRpb24vTVxcbmNvbmZsaWN0L1NHTURcXG5jb25mbHVlbmNlL01TXFxuY29uZmx1ZW50XFxuY29uZm9ybS9aQlxcbmNvbmZvcm1hYmxlL1VcXG5jb25mb3JtYWxcXG5jb25mb3JtYW5jZS9NXFxuY29uZm9ybWlzbS9NXFxuY29uZm9ybWlzdC9TTVxcbmNvbmZvcm1pdHkvTVxcbmNvbmZyZXJlL01TXFxuY29uZnJvbnRhdGlvbi9TTVxcbmNvbmZyb250YXRpb25hbFxcbmNvbmZ1c2UvUlpcXG5jb25mdXNlZC9ZXFxuY29uZnVzaW5nL1lcXG5jb25mdXRhdGlvbi9NXFxuY29uZnV0ZS9EU0dcXG5jb25nYS9TTURHXFxuY29uZ2VhbC9TTERHXFxuY29uZ2VhbG1lbnQvTVxcbmNvbmdlci9TTVxcbmNvbmdlcmllcy9NXFxuY29uZ2VzdC9TREdWXFxuY29uZ2VzdGlvbi9NXFxuY29uZ2xvbWVyYXRlL0RTWE1HTlxcbmNvbmdsb21lcmF0aW9uL01cXG5jb25ncmF0cy9NXFxuY29uZ3JhdHVsYXRlL1hHTkRTXFxuY29uZ3JhdHVsYXRpb24vTVxcbmNvbmdyYXR1bGF0b3J5XFxuY29uZ3JlZ2FudC9NU1xcbmNvbmdyZWdhdGUvR05EU1hcXG5jb25ncmVnYXRpb24vTVxcbmNvbmdyZWdhdGlvbmFsXFxuY29uZ3JlZ2F0aW9uYWxpc20vTVxcbmNvbmdyZWdhdGlvbmFsaXN0L01TXFxuY29uZ3Jlc3MvTVNcXG5jb25ncmVzc2lvbmFsXFxuY29uZ3Jlc3NtYW4vTVxcbmNvbmdyZXNzbWVuXFxuY29uZ3Jlc3NwZW9wbGVcXG5jb25ncmVzc3BlcnNvbi9NU1xcbmNvbmdyZXNzd29tYW4vTVxcbmNvbmdyZXNzd29tZW5cXG5jb25ncnVlbmNlL01cXG5jb25ncnVlbnQvWVxcbmNvbmdydWl0eS9JU01cXG5jb25ncnVvdXNcXG5jb25pYy9TTVxcbmNvbmljYWwvWVxcbmNvbmlmZXIvU01cXG5jb25pZmVyb3VzXFxuY29uamVjdHVyYWxcXG5jb25qZWN0dXJlL01HRFNcXG5jb25qb2ludFxcbmNvbmp1Z2FsL1lcXG5jb25qdWdhdGUvRFNYR05cXG5jb25qdWdhdGlvbi9NXFxuY29uanVuY3QvVk1TXFxuY29uanVuY3RpdmEvU01cXG5jb25qdW5jdGl2ZS9TTVxcbmNvbmp1bmN0aXZpdGlzL01cXG5jb25qdXJhdGlvbi9NU1xcbmNvbmp1cmUvRFJTWkdcXG5jb25qdXJlci9NXFxuY29uay9NRFJaXFxuY29ubWFuXFxuY29ubmVjdC9BRURWR1NcXG5jb25uZWN0YWJsZVxcbmNvbm5lY3RlZC9VXFxuY29ubmVjdGlvbi9FTVNcXG5jb25uZWN0aXZlL01TXFxuY29ubmVjdGl2aXR5L01cXG5jb25uZWN0b3IvTVNcXG5jb25uZWRcXG5jb25uaW5nXFxuY29ubmlwdGlvbi9NU1xcbmNvbm5pdmFuY2UvTVxcbmNvbm5pdmUvRFJTWkdcXG5jb25uaXZlci9NXFxuY29ubm9pc3NldXIvU01cXG5jb25ub3RhdGl2ZVxcbmNvbm51YmlhbFxcbmNvbnF1ZXIvQVNER1xcbmNvbnF1ZXJhYmxlL1VcXG5jb25xdWVyZWQvVVxcbmNvbnF1ZXJvci9NU1xcbmNvbnF1ZXN0L0FNXFxuY29ucXVpc3RhZG9yL1NNXFxuY29ucy9EU0dcXG5jb25zYW5ndWluZW91c1xcbmNvbnNhbmd1aW5pdHkvTVxcbmNvbnNjaWVuY2VsZXNzXFxuY29uc2NpZW50aW91cy9QWVxcbmNvbnNjaWVudGlvdXNuZXNzL01cXG5jb25zY2lvdXMvVVlQXFxuY29uc2Npb3VzbmVzcy9VTVxcbmNvbnNjaW91c25lc3Nlc1xcbmNvbnNjcmlwdGlvbi9NXFxuY29uc2VjcmF0ZS9BRFNHTlxcbmNvbnNlY3JhdGVkL1VcXG5jb25zZWNyYXRpb24vQU1cXG5jb25zZWNyYXRpb25zXFxuY29uc2VjdXRpdmUvWVxcbmNvbnNlbnN1YWxcXG5jb25zZW5zdXMvTVNcXG5jb25zZW50L1NNREdcXG5jb25zZXF1ZW5jZS9TTVxcbmNvbnNlcXVlbnQvWVxcbmNvbnNlcXVlbnRpYWwvSVlcXG5jb25zZXJ2YW5jeS9TTVxcbmNvbnNlcnZhdGlvbi9NXFxuY29uc2VydmF0aW9uaXNtL01cXG5jb25zZXJ2YXRpb25pc3QvU01cXG5jb25zZXJ2YXRpc20vTVxcbmNvbnNlcnZhdGl2ZS9NWVNcXG5jb25zZXJ2YXRvaXJlL1NcXG5jb25zZXJ2YXRvci9TTVxcbmNvbnNlcnZhdG9yeS9TTVxcbmNvbnNpZGVyL0FHU0RcXG5jb25zaWRlcmFibGUvSVxcbmNvbnNpZGVyYWJseVxcbmNvbnNpZGVyYXRlL0lQWU5cXG5jb25zaWRlcmF0ZW5lc3MvSU1cXG5jb25zaWRlcmF0aW9uL0FJTVxcbmNvbnNpZGVyYXRpb25zXFxuY29uc2lkZXJlZC9VXFxuY29uc2lnbi9BU0RHXFxuY29uc2lnbmVlL01TXFxuY29uc2lnbm1lbnQvTVNcXG5jb25zaXN0L1NER1xcbmNvbnNpc3RlbmNlL01TXFxuY29uc2lzdGVuY3kvSVNNXFxuY29uc2lzdGVudC9JWVxcbmNvbnNpc3RvcnkvU01cXG5jb25zb2xhYmxlL0lcXG5jb25zb2xhdGlvbi9NU1xcbmNvbnNvbGF0b3J5XFxuY29uc29saWRhdGUvWERTR05cXG5jb25zb2xpZGF0ZWQvVVxcbmNvbnNvbGlkYXRpb24vTVxcbmNvbnNvbGlkYXRvci9NU1xcbmNvbnNvbGluZy9ZXFxuY29uc29tbWUvTVxcbmNvbnNvbmFuY2UvU01cXG5jb25zb25hbnQvU01ZXFxuY29uc29ydGlhXFxuY29uc29ydGl1bS9NXFxuY29uc3BlY3R1cy9NU1xcbmNvbnNwaWN1b3VzL0lQWVxcbmNvbnNwaWN1b3VzbmVzcy9JTVxcbmNvbnNwaXJhY3kvU01cXG5jb25zcGlyYXRvci9NU1xcbmNvbnNwaXJhdG9yaWFsL1lcXG5jb25zcGlyZS9HRFxcbmNvbnN0YWJsZS9TTVxcbmNvbnN0YWJ1bGFyeS9TTVxcbmNvbnN0YW5jeS9JTVxcbmNvbnN0YW50L01ZU1xcbmNvbnN0ZWxsYXRpb24vU01cXG5jb25zdGVybmF0aW9uL01cXG5jb25zdGlwYXRlL0dORFNcXG5jb25zdGlwYXRpb24vTVxcbmNvbnN0aXR1ZW5jeS9TTVxcbmNvbnN0aXR1ZW50L1NNXFxuY29uc3RpdHV0ZS9BRFNHTlZcXG5jb25zdGl0dXRpb24vQU1cXG5jb25zdGl0dXRpb25hbC9NWVNcXG5jb25zdGl0dXRpb25hbGlzbVxcbmNvbnN0aXR1dGlvbmFsaXR5L1VNXFxuY29uc3RpdHV0aW9uc1xcbmNvbnN0cmFpbmVkL1VcXG5jb25zdHJhaW50L1NNXFxuY29uc3RyaWN0L0dWU0RcXG5jb25zdHJpY3Rpb24vU01cXG5jb25zdHJpY3Rvci9TTVxcbmNvbnN0cnVhYmxlXFxuY29uc3RydWN0J3NcXG5jb25zdHJ1Y3QvQ0FEVkdTXFxuY29uc3RydWN0aW9uL0NBTVNcXG5jb25zdHJ1Y3Rpb25hbFxcbmNvbnN0cnVjdGlvbmlzdCdzXFxuY29uc3RydWN0aW9uaXN0L0NTXFxuY29uc3RydWN0aXZlL1lQXFxuY29uc3RydWN0aXZlbmVzcy9NXFxuY29uc3RydWN0b3IvTVNcXG5jb25zdHJ1ZS9HRFNcXG5jb25zdWwvS1NNXFxuY29uc3VsYXIvS1xcbmNvbnN1bGF0ZS9TTVxcbmNvbnN1bHNoaXAvTVxcbmNvbnN1bHQvR1NEXFxuY29uc3VsdGFuY3kvU01cXG5jb25zdWx0YW50L01TXFxuY29uc3VsdGF0aW9uL01TXFxuY29uc3VsdGF0aXZlXFxuY29uc3VtYWJsZS9TTVxcbmNvbnN1bWUvQkRSU1pHXFxuY29uc3VtZWQvVVxcbmNvbnN1bWVyL01cXG5jb25zdW1lcmlzbS9NXFxuY29uc3VtZXJpc3QvTVNcXG5jb25zdW1tYXRlL1lHTlhEU1xcbmNvbnN1bW1hdGVkL1VcXG5jb25zdW1wdGlvbi9NXFxuY29uc3VtcHRpdmUvU01cXG5jb250XFxuY29udGFjdC9BU0RHXFxuY29udGFjdGFibGVcXG5jb250YWN0bGVzc1xcbmNvbnRhZ2lvbi9NU1xcbmNvbnRhZ2lvdXMvUFlcXG5jb250YWdpb3VzbmVzcy9NXFxuY29udGFpbi9TQkxEUlpHXFxuY29udGFpbmVyL01cXG5jb250YWluZXJpemF0aW9uL01cXG5jb250YWluZXJpemUvRFNHXFxuY29udGFpbm1lbnQvTVxcbmNvbnRhbWluYW50L1NNXFxuY29udGFtaW5hdGUvQUNEU0dcXG5jb250YW1pbmF0ZWQvVVxcbmNvbnRhbWluYXRpb24vQ01cXG5jb250YW1pbmF0b3IvU01cXG5jb250ZFxcbmNvbnRlbW4vU0RHXFxuY29udGVtcGxhdGUvRFNHTlZcXG5jb250ZW1wbGF0aW9uL01cXG5jb250ZW1wbGF0aXZlL1NNWVxcbmNvbnRlbXBvcmFuZWl0eS9NXFxuY29udGVtcG9yYW5lb3VzL1lcXG5jb250ZW1wdC9NXFxuY29udGVtcHRpYmxlXFxuY29udGVtcHRpYmx5XFxuY29udGVtcHR1b3VzL1lQXFxuY29udGVtcHR1b3VzbmVzcy9NXFxuY29udGVuZGVyL01TXFxuY29udGVudC9FU0xNREdcXG5jb250ZW50ZWQvRVlcXG5jb250ZW50ZWRuZXNzL01cXG5jb250ZW50aW9uL1NNXFxuY29udGVudGlvdXMvWVBcXG5jb250ZW50aW91c25lc3MvTVxcbmNvbnRlbnRseVxcbmNvbnRlbnRtZW50L0VNXFxuY29udGVybWlub3VzL1lcXG5jb250ZXN0YWJsZS9JXFxuY29udGVzdGFudC9NU1xcbmNvbnRlc3RlZC9VXFxuY29udGV4dHVhbGl6YXRpb25cXG5jb250ZXh0dWFsaXplL0RTR1xcbmNvbnRpZ3VpdHkvTVxcbmNvbnRpZ3VvdXMvWVxcbmNvbnRpbmVuY2UvSU1cXG5jb250aW5lbnQvU01cXG5jb250aW5lbnRhbC9TTVxcbmNvbnRpbmdlbmN5L1NNXFxuY29udGluZ2VudC9TTVlcXG5jb250aW51YVxcbmNvbnRpbnVhbC9ZXFxuY29udGludWFuY2UvRU1TXFxuY29udGludWF0aW9uL0VNU1xcbmNvbnRpbnVlL0VHRFNcXG5jb250aW51aXR5L0VTTVxcbmNvbnRpbnVvdXMvRVlcXG5jb250aW51dW0vTVxcbmNvbnRvcnQvR0RcXG5jb250b3J0aW9uL01TXFxuY29udG9ydGlvbmlzdC9TTVxcbmNvbnRyYVxcbmNvbnRyYWJhbmQvTVxcbmNvbnRyYWJhc3Nvb24vU1xcbmNvbnRyYWNlcHRpb24vTVxcbmNvbnRyYWNlcHRpdmUvU01cXG5jb250cmFjdC9NREdcXG5jb250cmFjdGlibGVcXG5jb250cmFjdGlsZVxcbmNvbnRyYWN0aWxpdHlcXG5jb250cmFjdGlvbi9TXFxuY29udHJhY3R1YWwvWVxcbmNvbnRyYWRpY3QvU0RHXFxuY29udHJhZGljdGlvbi9TTVxcbmNvbnRyYWRpY3RvcnlcXG5jb250cmFkaXN0aW5jdGlvbi9NU1xcbmNvbnRyYWZsb3cvU1xcbmNvbnRyYWlsL01TXFxuY29udHJhaW5kaWNhdGUvR05YRFNcXG5jb250cmFpbmRpY2F0aW9uL01cXG5jb250cmFsdG8vU01cXG5jb250cmFwdGlvbi9TTVxcbmNvbnRyYXB1bnRhbC9ZXFxuY29udHJhcmlhbi9TTVxcbmNvbnRyYXJpYW5pc21cXG5jb250cmFyaWV0eS9NXFxuY29udHJhcmlseVxcbmNvbnRyYXJpbmVzcy9NXFxuY29udHJhcml3aXNlXFxuY29udHJhcnkvUFNNXFxuY29udHJhc3QvTURHU1xcbmNvbnRyYXZlbmUvR0RTXFxuY29udHJhdmVudGlvbi9TTVxcbmNvbnRyZXRlbXBzL01cXG5jb250cmlidXRlL1hHTkRcXG5jb250cmlidXRpb24vTVxcbmNvbnRyaWJ1dG9yL01TXFxuY29udHJpYnV0b3J5XFxuY29udHJpdGlvbi9NXFxuY29udHJpdmFuY2UvTVNcXG5jb250cml2ZS9aR0RSU1xcbmNvbnRyaXZlci9NXFxuY29udHJvbCdzXFxuY29udHJvbC9DU1xcbmNvbnRyb2xsYWJsZS9VXFxuY29udHJvbGxlZC9VQ1xcbmNvbnRyb2xsZXIvTVNcXG5jb250cm9sbGluZy9DXFxuY29udHJvdmVyc2lhbC9ZXFxuY29udHJvdmVyc3kvU01cXG5jb250cm92ZXJ0L0RTR1xcbmNvbnRyb3ZlcnRpYmxlL0lcXG5jb250dW1hY2lvdXMvWVxcbmNvbnR1bWFjeS9NXFxuY29udHVtZWxpb3VzXFxuY29udHVtZWx5L1NNXFxuY29udHVzZS9YRFNHTlxcbmNvbnR1c2lvbi9NXFxuY29udW5kcnVtL1NNXFxuY29udXJiYXRpb24vTVNcXG5jb252YWxlc2NlL0RTR1xcbmNvbnZhbGVzY2VuY2UvTVNcXG5jb252YWxlc2NlbnQvU01cXG5jb252ZWN0aW9uL01cXG5jb252ZWN0aW9uYWxcXG5jb252ZWN0aXZlXFxuY29udmVjdG9yL1NcXG5jb252ZW5lL0FEU0dcXG5jb252ZW5lci9NU1xcbmNvbnZlbmllbmNlL0lNU1xcbmNvbnZlbmllbnQvSVlcXG5jb252ZW50L1NNXFxuY29udmVudGljbGUvTVNcXG5jb252ZW50aW9uL1NNXFxuY29udmVudGlvbmFsL1VZXFxuY29udmVudGlvbmFsaXR5L1VNXFxuY29udmVudGlvbmFsaXplL0dEU1xcbmNvbnZlbnRpb25lZXIvU1xcbmNvbnZlcmdlbmNlL01TXFxuY29udmVyZ2VudFxcbmNvbnZlcnNhbnRcXG5jb252ZXJzYXRpb24vTVNcXG5jb252ZXJzYXRpb25hbC9ZXFxuY29udmVyc2F0aW9uYWxpc3QvU01cXG5jb252ZXJzZS9ZXFxuY29udmVydCdzXFxuY29udmVydC9BR1NEXFxuY29udmVydGVkL1VcXG5jb252ZXJ0ZXIvU01cXG5jb252ZXJ0aWJpbGl0eS9NXFxuY29udmVydGlibGUvU01cXG5jb252ZXgvWVxcbmNvbnZleGl0eS9NXFxuY29udmV5L1NCREdcXG5jb252ZXlhbmNlL01HU1xcbmNvbnZleW9yL01TXFxuY29udmljdC9HU01EXFxuY29udmljdGlvbi9NU1xcbmNvbnZpbmNlL0dEU1xcbmNvbnZpbmNlZC9VXFxuY29udmluY2luZy9VWVxcbmNvbnZpdmlhbC9ZXFxuY29udml2aWFsaXR5L01cXG5jb252b2tlL0RTR1xcbmNvbnZvbHV0ZWRcXG5jb252b2x1dGlvbi9NU1xcbmNvbnZveS9TTURHXFxuY29udnVsc2UvR05WWERTXFxuY29udnVsc2lvbi9NXFxuY29udnVsc2l2ZS9ZXFxuY29ueS9NXFxuY29vL0dTTURcXG5jb29rJ3NcXG5jb29rL0FER1NcXG5jb29rYm9vay9NU1xcbmNvb2tlZC9VXFxuY29va2VyL1NNXFxuY29va2VyeS9TTVxcbmNvb2tob3VzZS9TXFxuY29va2llL1NNXFxuY29va2luZy9NXFxuY29va291dC9TTVxcbmNvb2t3YXJlL1NNXFxuY29vbC9NRFJZWlRHUFNcXG5jb29sYW50L1NNXFxuY29vbGVyL01cXG5jb29saWUvU01cXG5jb29sbmVzcy9NXFxuY29vbi9NUyFcXG5jb29uc2tpbi9NU1xcbmNvb3AvTURSWkdTXFxuY29vcGVyL01ER1xcbmNvb3BlcmFnZS9NXFxuY29vcGVyYXRlL0RTR05WXFxuY29vcGVyYXRpb24vTVxcbmNvb3BlcmF0aXZlL1BNWVNcXG5jb29wZXJhdGl2ZW5lc3MvTVxcbmNvb3BlcmF0b3IvU01cXG5jb29yZGluYXRlL0RTTVlHTlxcbmNvb3JkaW5hdGVkL1VcXG5jb29yZGluYXRpb24vTVxcbmNvb3JkaW5hdG9yL01TXFxuY29vdC9NU1xcbmNvb3RpZS9TTVxcbmNvcC9HSlNNRFxcbmNvcGFjZXRpY1xcbmNvcGF5L01cXG5jb3BlL01TXFxuY29waWVyL1NNXFxuY29waWxvdC9TTVxcbmNvcGluZy9NXFxuY29waW91cy9QWVxcbmNvcGlvdXNuZXNzL01cXG5jb3BwZWRcXG5jb3BwZXIvU01cXG5jb3BwZXJoZWFkL1NNXFxuY29wcGVycGxhdGUvTVxcbmNvcHBlcnlcXG5jb3BwaW5nXFxuY29wcmEvTVxcbmNvcHNlL1NNXFxuY29wdGVyL1NNXFxuY29wdWxhL1NNXFxuY29wdWxhdGUvR05WRFNcXG5jb3B1bGF0aW9uL01cXG5jb3B1bGF0aXZlL1NNXFxuY29weSdzXFxuY29weS9BRFNHXFxuY29weWJvb2svU01cXG5jb3B5Y2F0L01TXFxuY29weWNhdHRlZFxcbmNvcHljYXR0aW5nXFxuY29weWlzdC9NU1xcbmNvcHlsZWZ0XFxuY29weXJpZ2h0L0dTTURcXG5jb3B5d3JpdGVyL01TXFxuY29xdWV0cnkvU01cXG5jb3F1ZXR0ZS9EU01HXFxuY29xdWV0dGlzaC9ZXFxuY29yXFxuY29yYWNsZS9TTVxcbmNvcmFsL1NNXFxuY29yYmVsL1NNXFxuY29yZC9FQVNHRE1cXG5jb3JkYWdlL01cXG5jb3JkaWFsL1NNWVxcbmNvcmRpYWxpdHkvTVxcbmNvcmRpbGxlcmEvTVNcXG5jb3JkaXRlL01cXG5jb3JkbGVzc1xcbmNvcmRvbi9TTURHXFxuY29yZG92YW4vTVxcbmNvcmR1cm95L01TXFxuY29yZHVyb3lzL01cXG5jb3JlL01aR0RSU1xcbmNvcmVsaWdpb25pc3QvU1xcbmNvcmVyL01cXG5jb3Jlc3BvbmRlbnQvTVNcXG5jb3JnaS9TTVxcbmNvcmlhbmRlci9NXFxuY29yaydzXFxuY29yay9VREdTXFxuY29ya2FnZVxcbmNvcmtlci9TTVxcbmNvcmtzY3Jldy9TTURHXFxuY29ybS9NU1xcbmNvcm1vcmFudC9TTVxcbmNvcm4vTURSWkdTXFxuY29ybmJhbGwvTVNcXG5jb3JuYnJlYWQvTVxcbmNvcm5jb2IvTVNcXG5jb3JuY3Jha2UvU1xcbmNvcm5lYS9TTVxcbmNvcm5lYWxcXG5jb3JuZXIvR01EXFxuY29ybmVyc3RvbmUvU01cXG5jb3JuZXQvU01cXG5jb3JuZmllbGQvU1xcbmNvcm5mbGFrZXMvTVxcbmNvcm5mbG91clxcbmNvcm5mbG93ZXIvU01cXG5jb3JuaWNlL01TXFxuY29ybmlseVxcbmNvcm5pbmVzcy9NXFxuY29ybm1lYWwvTVxcbmNvcm5yb3cvTURHU1xcbmNvcm5zdGFsay9TTVxcbmNvcm5zdGFyY2gvTVxcbmNvcm51Y29waWEvTVNcXG5jb3JueS9QUlRcXG5jb3JvbGxhL01TXFxuY29yb2xsYXJ5L1NNXFxuY29yb25hL1NNXFxuY29yb25hbC9NU1xcbmNvcm9uYXJ5L1NNXFxuY29yb25hdGlvbi9TTVxcbmNvcm9uYXZpcnVzL01TXFxuY29yb25lci9NU1xcbmNvcm9uZXQvTVNcXG5jb3JwXFxuY29ycG9yYVxcbmNvcnBvcmFsL1NNXFxuY29ycG9yYXRlL1hZTlxcbmNvcnBvcmF0aW9uL0lNXFxuY29ycG9yYXRpc21cXG5jb3Jwb3JlYWwvWVxcbmNvcnBvcmVhbGl0eS9NXFxuY29ycHMvTVNcXG5jb3Jwc2UvTVxcbmNvcnBzbWFuL01cXG5jb3Jwc21lblxcbmNvcnB1bGVuY2UvTVxcbmNvcnB1bGVudFxcbmNvcnB1cy9NXFxuY29ycHVzY2xlL01TXFxuY29ycHVzY3VsYXJcXG5jb3JyXFxuY29ycmFsL1NNXFxuY29ycmFsbGVkXFxuY29ycmFsbGluZ1xcbmNvcnJlY3QvRFJZVEdWU0JQXFxuY29ycmVjdGVkL1VcXG5jb3JyZWN0aW9uL1NNXFxuY29ycmVjdGlvbmFsXFxuY29ycmVjdGl2ZS9TTVxcbmNvcnJlY3RuZXNzL0lNXFxuY29ycmVjdG9yXFxuY29ycmVsYXRlL1hEU01HTlZcXG5jb3JyZWxhdGVkL1VcXG5jb3JyZWxhdGlvbi9NXFxuY29ycmVsYXRpb25hbFxcbmNvcnJlbGF0aXZlL01TXFxuY29ycmVzcG9uZC9TREdcXG5jb3JyZXNwb25kZW5jZS9TTVxcbmNvcnJlc3BvbmRlbnQvU01cXG5jb3JyZXNwb25kaW5nL1lcXG5jb3JyaWRvci9TTVxcbmNvcnJpZS9TXFxuY29ycm9ib3JhdGUvR05WRFNYXFxuY29ycm9ib3JhdGVkL1VcXG5jb3Jyb2JvcmF0aW9uL01cXG5jb3Jyb2JvcmF0b3IvU01cXG5jb3Jyb2JvcmF0b3J5XFxuY29ycm9kZS9HRFNcXG5jb3Jyb3Npb24vTVxcbmNvcnJvc2l2ZS9TTVlcXG5jb3JydWdhdGUvR05YRFNcXG5jb3JydWdhdGlvbi9NXFxuY29ycnVwdC9EUllQU1RHXFxuY29ycnVwdGliaWxpdHkvSU1cXG5jb3JydXB0aWJsZS9JXFxuY29ycnVwdGlvbi9NU1xcbmNvcnJ1cHRuZXNzL01cXG5jb3JzYWdlL01TXFxuY29yc2Fpci9NU1xcbmNvcnNldC9TR01EXFxuY29ydGVnZS9NU1xcbmNvcnRleC9NXFxuY29ydGljYWxcXG5jb3J0aWNlc1xcbmNvcnRpc29sXFxuY29ydGlzb25lL01cXG5jb3J1bmR1bS9NXFxuY29ydXNjYXRlL0dORFNcXG5jb3J1c2NhdGlvbi9NXFxuY29ydmV0dGUvU01cXG5jb3MvTVxcbmNvc2gvRFNHXFxuY29zaWduL1pHU0RSXFxuY29zaWduYXRvcnkvU01cXG5jb3NpZ25lci9NXFxuY29zaW5lL1NNXFxuY29zbWV0aWMvU01cXG5jb3NtZXRpY2FsbHlcXG5jb3NtZXRpY2lhbi9NU1xcbmNvc21ldG9sb2dpc3QvTVNcXG5jb3NtZXRvbG9neS9NXFxuY29zbWljXFxuY29zbWljYWxseVxcbmNvc21vZ29uaXN0L1NNXFxuY29zbW9nb255L1NNXFxuY29zbW9sb2dpY2FsXFxuY29zbW9sb2dpc3QvU01cXG5jb3Ntb2xvZ3kvU01cXG5jb3Ntb25hdXQvU01cXG5jb3Ntb3BvbGl0YW4vTVNcXG5jb3Ntb3BvbGl0YW5pc20vTVxcbmNvc21vcy9NU1xcbmNvc3BsYXlcXG5jb3Nwb25zb3IvR1NNRFxcbmNvc3NldC9TR0RcXG5jb3NzZXR0ZWRcXG5jb3NzZXR0aW5nXFxuY29zdC9NRFlHU0pcXG5jb3N0YXIvU01cXG5jb3N0YXJyZWRcXG5jb3N0YXJyaW5nXFxuY29zdGxpbmVzcy9NXFxuY29zdGx5L1BUUlxcbmNvc3R1bWUvTVpHRFJTXFxuY29zdHVtZXIvTVxcbmNvc3R1bWllci9TXFxuY290L1NNXFxuY290YW5nZW50L01TXFxuY290ZS9NU1xcbmNvdGVyaWUvTVNcXG5jb3Rlcm1pbm91c1xcbmNvdGlsbGlvbi9TTVxcbmNvdHRhZ2UvTVpHUlNcXG5jb3R0YWdlci9NXFxuY290dGFyL1NNXFxuY290dGVyL1NNXFxuY290dG9uL1NHTURcXG5jb3R0b25tb3V0aC9NXFxuY290dG9ubW91dGhzXFxuY290dG9uc2VlZC9NU1xcbmNvdHRvbnRhaWwvTVNcXG5jb3R0b253b29kL1NNXFxuY290dG9ueVxcbmNvdHlsZWRvbi9NU1xcbmNvdWNoL01EU0dcXG5jb3VjaGV0dGUvU1xcbmNvdWdhci9TTVxcbmNvdWdoL01ER1xcbmNvdWdoc1xcbmNvdWxkXFxuY291bGQndmVcXG5jb3VsZG4ndFxcbmNvdWxlZS9TTVxcbmNvdWxpc1xcbmNvdWxvbWIvTVNcXG5jb3VuY2lsL01TXFxuY291bmNpbG1hbi9NXFxuY291bmNpbG1lblxcbmNvdW5jaWxvci9NU1xcbmNvdW5jaWxwZXJzb24vU01cXG5jb3VuY2lsd29tYW4vTVxcbmNvdW5jaWx3b21lblxcbmNvdW5zZWwvSk1ER1NcXG5jb3Vuc2Vsb3IvTVNcXG5jb3VudC9FQVNNREdcXG5jb3VudGFibGUvVVxcbmNvdW50YWJseVxcbmNvdW50ZG93bi9NU1xcbmNvdW50ZWQvVVxcbmNvdW50ZW5hbmNlJ3NcXG5jb3VudGVuYW5jZS9FR0RTXFxuY291bnRlci9FTVNcXG5jb3VudGVyYWN0L1NHVkRcXG5jb3VudGVyYWN0aW9uL01TXFxuY291bnRlcmFyZ3VtZW50L1NcXG5jb3VudGVyYXR0YWNrL0dNRFNcXG5jb3VudGVyYmFsYW5jZS9NR0RTXFxuY291bnRlcmJsYXN0L1NcXG5jb3VudGVyY2xhaW0vR1NNRFxcbmNvdW50ZXJjbG9ja3dpc2VcXG5jb3VudGVyY3VsdHVyZS9TTVxcbmNvdW50ZXJlZFxcbmNvdW50ZXJlc3Bpb25hZ2UvTVxcbmNvdW50ZXJleGFtcGxlL1NcXG5jb3VudGVyZmFjdHVhbFxcbmNvdW50ZXJmZWl0L1pHTURSU1xcbmNvdW50ZXJmZWl0ZXIvTVxcbmNvdW50ZXJmb2lsL01TXFxuY291bnRlcmluZ1xcbmNvdW50ZXJpbnN1cmdlbmN5L1NNXFxuY291bnRlcmludGVsbGlnZW5jZS9NXFxuY291bnRlcm1hbi9NXFxuY291bnRlcm1hbmQvR01EU1xcbmNvdW50ZXJtZWFzdXJlL1NNXFxuY291bnRlcm1lbG9keS9TXFxuY291bnRlcm1lblxcbmNvdW50ZXJtb3ZlL1NcXG5jb3VudGVyb2ZmZW5zaXZlL1NNXFxuY291bnRlcm9mZmVyL1NNXFxuY291bnRlcnBhbmUvU01cXG5jb3VudGVycGFydC9TTVxcbmNvdW50ZXJwZXRpdGlvblxcbmNvdW50ZXJwb2ludC9NREdTXFxuY291bnRlcnBvaXNlL01HRFNcXG5jb3VudGVycHJvZHVjdGl2ZVxcbmNvdW50ZXJyZXZvbHV0aW9uL1NNXFxuY291bnRlcnJldm9sdXRpb25hcnkvU01cXG5jb3VudGVyc2lnbi9HU01EXFxuY291bnRlcnNpZ25hdHVyZS9NU1xcbmNvdW50ZXJzaW5rL0dTTVxcbmNvdW50ZXJzcHkvU01cXG5jb3VudGVyc3Ryb2tlL1NNXFxuY291bnRlcnN1bmtcXG5jb3VudGVydGVub3IvTVNcXG5jb3VudGVydmFpbC9HU0RcXG5jb3VudGVyd2VpZ2h0L01TXFxuY291bnRlc3MvTVNcXG5jb3VudGxlc3NcXG5jb3VudHJpZmllZFxcbmNvdW50cnkvU01cXG5jb3VudHJ5bWFuL01cXG5jb3VudHJ5bWVuXFxuY291bnRyeXNpZGUvTVNcXG5jb3VudHJ5d2lkZVxcbmNvdW50cnl3b21hbi9NXFxuY291bnRyeXdvbWVuXFxuY291bnR5L1NNXFxuY291bnR5d2lkZVxcbmNvdXAnc1xcbmNvdXAvQVNcXG5jb3VwZS9TTVxcbmNvdXBsZSdzXFxuY291cGxlL1VDR1NEXFxuY291cGxldC9NU1xcbmNvdXBsaW5nL1NNXFxuY291cG9uL1NNXFxuY291cmFnZS9NXFxuY291cmFnZW91cy9ZUFxcbmNvdXJhZ2VvdXNuZXNzL01cXG5jb3VyZ2V0dGUvU1xcbmNvdXJpZXIvTURTR1xcbmNvdXJzZS9FREdNU1xcbmNvdXJzZWJvb2svU1xcbmNvdXJzZXIvTVNcXG5jb3Vyc2V3b3JrXFxuY291cnQvU01EWUdcXG5jb3VydGVvdXMvRVlcXG5jb3VydGVvdXNuZXNzL01cXG5jb3VydGVzYW4vU01cXG5jb3VydGVzeS9FU01cXG5jb3VydGhvdXNlL01TXFxuY291cnRpZXIvU01cXG5jb3VydGxpbmVzcy9NXFxuY291cnRseS9QUlRcXG5jb3VydHJvb20vTVNcXG5jb3VydHNoaXAvTVNcXG5jb3VydHlhcmQvTVNcXG5jb3VzY291cy9NXFxuY291c2luL1NNXFxuY291dHVyZS9NXFxuY291dHVyaWVyL01TXFxuY292YWxlbnRcXG5jb3ZhcmlhbmNlXFxuY292YXJpYW50XFxuY292ZS9NU1xcbmNvdmVuL1NNXFxuY292ZW5hbnQvTURTR1xcbmNvdmVyJ3NcXG5jb3Zlci9BRVVHRFNcXG5jb3ZlcmFnZS9NXFxuY292ZXJhbGwvTVNcXG5jb3ZlcmluZydzXFxuY292ZXJpbmdzXFxuY292ZXJsZXQvTVNcXG5jb3ZlcnQvU1BNWVxcbmNvdmVydG5lc3MvTVxcbmNvdmV0L1NER1xcbmNvdmV0b3VzL1lQXFxuY292ZXRvdXNuZXNzL01cXG5jb3ZleS9TTVxcbmNvdy9aR1NNRFJcXG5jb3dhcmQvU01ZXFxuY293YXJkaWNlL01cXG5jb3dhcmRsaW5lc3MvTVxcbmNvd2JlbGwvTVNcXG5jb3diaXJkL01TXFxuY293Ym95L1NNXFxuY293Y2F0Y2hlci9NU1xcbmNvd2VyL0RHXFxuY293Z2lybC9NU1xcbmNvd2hhbmQvTVNcXG5jb3doZXJkL01TXFxuY293aGlkZS9NU1xcbmNvd2wvTUdTSlxcbmNvd2xpY2svTVNcXG5jb3dsaW5nL01cXG5jb3dtYW4vTVxcbmNvd21lblxcbmNvd29ya2VyL01TXFxuY293cGF0L1NcXG5jb3dwb2tlL01TXFxuY293cG94L01cXG5jb3dwdW5jaGVyL1NNXFxuY293cmllL1NNXFxuY293c2hlZC9TXFxuY293c2xpcC9TTVxcbmNveC9HRFNcXG5jb3hjb21iL01TXFxuY294c3dhaW4vTVNcXG5jb3kvVFBSWVxcbmNveW5lc3MvTVxcbmNveW90ZS9TTVxcbmNveXB1L1NNXFxuY296ZW4vU0RHXFxuY296ZW5hZ2UvTVxcbmNvemlseVxcbmNvemluZXNzL01cXG5jb3p5L1JTTVRQXFxuY3BkXFxuY3BsXFxuY3BzXFxuY3JhYi9NU1xcbmNyYWJiZWRcXG5jcmFiYmVyL1NNXFxuY3JhYmJpbHlcXG5jcmFiYmluZXNzL01cXG5jcmFiYmluZ1xcbmNyYWJieS9QUlRcXG5jcmFiZ3Jhc3MvTVxcbmNyYWJsaWtlXFxuY3JhYndpc2VcXG5jcmFjay9TTURSWVpHSlxcbmNyYWNrZG93bi9NU1xcbmNyYWNrZXIvTVxcbmNyYWNrZXJqYWNrL01TXFxuY3JhY2toZWFkL01TXFxuY3JhY2tsZS9EU0pNR1xcbmNyYWNrbGluZy9NXFxuY3JhY2twb3QvTVNcXG5jcmFja3VwL1NNXFxuY3JhZGxlL0RTTUdcXG5jcmFmdC9TTURHXFxuY3JhZnRpbHlcXG5jcmFmdGluZXNzL01cXG5jcmFmdHNtYW4vTVxcbmNyYWZ0c21hbnNoaXAvTVxcbmNyYWZ0c21lblxcbmNyYWZ0c3Blb3BsZVxcbmNyYWZ0c3dvbWFuL01cXG5jcmFmdHN3b21lblxcbmNyYWZ0eS9SVFBcXG5jcmFnL01TXFxuY3JhZ2dpbmVzcy9NXFxuY3JhZ2d5L1JQVFxcbmNyYW0vU1xcbmNyYW1tZWRcXG5jcmFtbWVyL1NcXG5jcmFtbWluZ1xcbmNyYW1wL1NNREdcXG5jcmFtcGluZy9NXFxuY3JhbXBvbi9TTVxcbmNyYW5iZXJyeS9TTVxcbmNyYW5lL0RTTUdcXG5jcmFuaWFsXFxuY3Jhbml1bS9TTVxcbmNyYW5rL1NNREdcXG5jcmFua2Nhc2UvU01cXG5jcmFua2lseVxcbmNyYW5raW5lc3MvTVxcbmNyYW5rc2hhZnQvTVNcXG5jcmFua3kvUFJUXFxuY3Jhbm55L0RTTVxcbmNyYXAvTVNcXG5jcmFwZS9TTVxcbmNyYXBwZWRcXG5jcmFwcGVyL1NcXG5jcmFwcGllL1JTTVRcXG5jcmFwcGluZ1xcbmNyYXBweVxcbmNyYXBzL01cXG5jcmFwc2hvb3Rlci9NU1xcbmNyYXNoL01EU0dcXG5jcmFzcy9SWVRQXFxuY3Jhc3NuZXNzL01cXG5jcmF0ZS9EUlNNWkdcXG5jcmF0ZXIvTURHXFxuY3JhdmF0L1NNXFxuY3JhdmUvRFNHSlxcbmNyYXZlbi9TTVlQXFxuY3JhdmVubmVzcy9NXFxuY3JhdmluZy9NXFxuY3Jhdy9NU1xcbmNyYXdkYWQvU01cXG5jcmF3bC9TTURSWkdcXG5jcmF3bGVyL01cXG5jcmF3bHNwYWNlL1NNXFxuY3Jhd2x5L1RSU01cXG5jcmF5L1NcXG5jcmF5ZmlzaC9NU1xcbmNyYXlvbGEvU1xcbmNyYXlvbi9HU01EXFxuY3JhemUvRFNNR1xcbmNyYXppbHlcXG5jcmF6aW5lc3MvTVxcbmNyYXp5L1BSU01UXFxuY3JlYWsvU01ER1xcbmNyZWFraWx5XFxuY3JlYWtpbmVzcy9NXFxuY3JlYWt5L1JQVFxcbmNyZWFtL1NNRFJaR1xcbmNyZWFtZXIvTVxcbmNyZWFtZXJ5L1NNXFxuY3JlYW1pbHlcXG5jcmVhbWluZXNzL01cXG5jcmVhbXkvUlBUXFxuY3JlYXNlL0lDR01TRFxcbmNyZWF0ZS9LQURTR05WXFxuY3JlYXRpb24ncy9LXFxuY3JlYXRpb24vQVNNXFxuY3JlYXRpb25pc20vU01cXG5jcmVhdGlvbmlzdC9TTVxcbmNyZWF0aXZlL1NNWVBcXG5jcmVhdGl2ZW5lc3MvTVxcbmNyZWF0aXZpdHkvTVxcbmNyZWF0b3IvTVNcXG5jcmVhdHVyZS9TTVxcbmNyZWNoZS9TTVxcbmNyZWRcXG5jcmVkZW5jZS9NXFxuY3JlZGVudGlhbC9TR01EXFxuY3JlZGVuemEvU01cXG5jcmVkaWJpbGl0eS9JTVxcbmNyZWRpYmxlL0lcXG5jcmVkaWJseS9JXFxuY3JlZGl0L0VHU0JNRFxcbmNyZWRpdGFibHkvRVxcbmNyZWRpdG9yL1NNXFxuY3JlZGl0d29ydGh5L1BcXG5jcmVkby9TTVxcbmNyZWR1bGl0eS9JTVxcbmNyZWR1bG91cy9JWVxcbmNyZWR1bG91c25lc3MvTVxcbmNyZWVkL1NNXFxuY3JlZWsvU01cXG5jcmVlbC9TTVxcbmNyZWVwL1NNUlpHXFxuY3JlZXBlci9NXFxuY3JlZXBpbHlcXG5jcmVlcGluZXNzL01cXG5jcmVlcHkvVFBSXFxuY3JlbWFpbnMvTVxcbmNyZW1hdGUvR05EU1hcXG5jcmVtYXRpb24vTVxcbmNyZW1hdG9yaWFcXG5jcmVtYXRvcml1bS9NU1xcbmNyZW1hdG9yeS9TTVxcbmNyZW1lL1NNXFxuY3JlbmVsYXRlL1hHTkRTXFxuY3JlbmVsYXRpb24vTVxcbmNyZW9sZS9TTVxcbmNyZW9zb3RlL01HRFNcXG5jcmVwZS9TTVxcbmNyZXB0XFxuY3JlcHVzY3VsYXJcXG5jcmVzY2VuZG8vQ1NNXFxuY3Jlc2NlbnQvTVNcXG5jcmVzcy9NXFxuY3Jlc3QvU01ER1xcbmNyZXN0ZmFsbGVuXFxuY3Jlc3RsZXNzXFxuY3JldGFjZW91c1xcbmNyZXRpbi9TTVxcbmNyZXRpbmlzbS9NXFxuY3JldGlub3VzXFxuY3JldG9ubmUvTVxcbmNyZXZhc3NlL1NNXFxuY3JldmljZS9NU1xcbmNyZXcvTURHU1xcbmNyZXdlbC9NXFxuY3Jld2Vsd29yay9NXFxuY3Jld21hbi9NXFxuY3Jld21lblxcbmNyaWIvTVNcXG5jcmliYmFnZS9NXFxuY3JpYmJlZFxcbmNyaWJiZXIvTVNcXG5jcmliYmluZ1xcbmNyaWNrL1NNREdcXG5jcmlja2V0L01SU1pHXFxuY3JpY2tldGVyL01cXG5jcmllci9NXFxuY3Jpa2V5XFxuY3JpbWUvU01cXG5jcmltaW5hbC9NWVNcXG5jcmltaW5hbGl0eS9NXFxuY3JpbWluYWxpemUvQ0dEU1xcbmNyaW1pbm9sb2dpc3QvTVNcXG5jcmltaW5vbG9neS9NXFxuY3JpbXAvU01ER1xcbmNyaW1zb24vU01ER1xcbmNyaW5nZS9EU01HXFxuY3JpbmtsZS9EU01HXFxuY3JpbmtseS9SVFxcbmNyaW5vbGluZS9TTVxcbmNyaXBlc1xcbmNyaXBwbGUvRFJTTVpHXFxuY3JpcHBsZXIvTVxcbmNyaXBwbGV3YXJlXFxuY3JpcHBsaW5nL1lcXG5jcmlzZXNcXG5jcmlzaXMvTVxcbmNyaXNwL1NNRFJZVEdQXFxuY3Jpc3BicmVhZC9TXFxuY3Jpc3BpbmVzcy9NXFxuY3Jpc3BuZXNzL01cXG5jcmlzcHkvUFJUXFxuY3Jpc3Njcm9zcy9HTURTXFxuY3JpdGVyaWFcXG5jcml0ZXJpb24vTVxcbmNyaXRpYy9TTVxcbmNyaXRpY2FsL1VZXFxuY3JpdGljYWxpdHlcXG5jcml0aWNpc20vTVNcXG5jcml0aWNpemUvWkdEUlNcXG5jcml0aWNpemVyL01cXG5jcml0aXF1ZS9NR0RTXFxuY3JpdHRlci9TTVxcbmNyb2FrL1NNREdcXG5jcm9ha3kvUlRcXG5jcm9jaGV0L1NNRFJaR1xcbmNyb2NoZXRlci9NXFxuY3JvY2hldGluZy9NXFxuY3JvY2svU01EXFxuY3JvY2tlcnkvTVxcbmNyb2NvZGlsZS9TTVxcbmNyb2N1cy9NU1xcbmNyb2Z0L1NSWkdcXG5jcm9pc3NhbnQvTVNcXG5jcm9uZS9TTVxcbmNyb255L1NNXFxuY3Jvbnlpc20vTVxcbmNyb29rL1NNREdcXG5jcm9va2VkL1BUUllcXG5jcm9va2VkbmVzcy9NXFxuY3Jvb2tuZWNrL1NNXFxuY3Jvb24vU01EUlpHXFxuY3Jvb25lci9NXFxuY3JvcC9NU1xcbmNyb3BsYW5kL1NNXFxuY3JvcHBlZFxcbmNyb3BwZXIvTVNcXG5jcm9wcGluZ1xcbmNyb3F1ZXQvTVxcbmNyb3F1ZXR0ZS9TTVxcbmNyb3NpZXIvTVNcXG5jcm9zcydzXFxuY3Jvc3MvQVVHVFNEXFxuY3Jvc3NiYXIvU01cXG5jcm9zc2JlYW0vTVNcXG5jcm9zc2JvbmVzL01cXG5jcm9zc2Jvdy9TTVxcbmNyb3NzYm93bWFuL01cXG5jcm9zc2Jvd21lblxcbmNyb3NzYnJlZFxcbmNyb3NzYnJlZWQvU0dNXFxuY3Jvc3NjaGVjay9TTURHXFxuY3Jvc3NjdXJyZW50L01TXFxuY3Jvc3NjdXQvU01cXG5jcm9zc2N1dHRpbmdcXG5jcm9zc2VyXFxuY3Jvc3NmaXJlL01TXFxuY3Jvc3NoYXRjaC9HRFNcXG5jcm9zc2luZy9TTVxcbmNyb3NzbHlcXG5jcm9zc25lc3MvTVxcbmNyb3Nzb3Zlci9NU1xcbmNyb3NzcGF0Y2gvTVNcXG5jcm9zc3BpZWNlL1NNXFxuY3Jvc3Nyb2FkL01TXFxuY3Jvc3Nyb2Fkcy9NXFxuY3Jvc3N0b3duXFxuY3Jvc3N3YWxrL01TXFxuY3Jvc3N3aW5kL01TXFxuY3Jvc3N3aXNlXFxuY3Jvc3N3b3JkL01TXFxuY3JvdGNoL01TXFxuY3JvdGNoZXQvU01cXG5jcm90Y2hldHlcXG5jcm91Y2gvR01EU1xcbmNyb3VwL01cXG5jcm91cGllci9NXFxuY3JvdXB5L1pUUlxcbmNyb3V0b24vTVNcXG5jcm93L01ER1NcXG5jcm93YmFyL01TXFxuY3Jvd2QvU01ER1xcbmNyb3dkZWQvVVxcbmNyb3dkZnVuZC9TREdcXG5jcm93ZmVldFxcbmNyb3dmb290L1NNXFxuY3Jvd24vU01ER1xcbmNyb3duZWQvVVxcbmNydWNpYWwvWVxcbmNydWNpYmxlL1NNXFxuY3J1Y2lmaXgvTVNcXG5jcnVjaWZpeGlvbi9TTVxcbmNydWNpZm9ybS9TTVxcbmNydWNpZnkvRFNHXFxuY3J1ZC9NXFxuY3J1ZGR5L1RSXFxuY3J1ZGUvUk1ZVFBcXG5jcnVkZW5lc3MvTVxcbmNydWRpdGVzL01cXG5jcnVkaXR5L1NNXFxuY3J1ZWwvUllQVFxcbmNydWVsbmVzcy9NXFxuY3J1ZWx0eS9TTVxcbmNydWV0L1NNXFxuY3J1ZnQvU0RcXG5jcnVmdHlcXG5jcnVpc2UvRFJTTVpHXFxuY3J1aXNlci9NXFxuY3J1bGxlci9NU1xcbmNydW1iL1NNRFlHXFxuY3J1bWJsZS9NR0RTXFxuY3J1bWJsaW5lc3MvTVxcbmNydW1ibHkvVFBSXFxuY3J1bWJ5L1RSXFxuY3J1bW1pbmVzcy9NXFxuY3J1bW15L1BUUlxcbmNydW1wZXQvTVNcXG5jcnVtcGxlL01HRFNcXG5jcnVuY2gvR01EUlNcXG5jcnVuY2hpbmVzcy9NXFxuY3J1bmNoeS9UUlBcXG5jcnVwcGVyL01TXFxuY3J1c2FkZS9NWkdEUlNcXG5jcnVzYWRlci9NXFxuY3J1c2UvU01cXG5jcnVzaC9NRFJTWkdcXG5jcnVzaGVyL01cXG5jcnVzaGluZy9ZXFxuY3J1c3QvU01ER1xcbmNydXN0YWNlYW4vU01cXG5jcnVzdGFsXFxuY3J1c3RpbHlcXG5jcnVzdGluZXNzL01cXG5jcnVzdHkvVFJQXFxuY3J1dGNoL01TXFxuY3J1eC9NU1xcbmNyeS9aR0pEUlNNXFxuY3J5YmFieS9TTVxcbmNyeW9nZW5pYy9TXFxuY3J5b2dlbmljcy9NXFxuY3J5b25pY3NcXG5jcnlvc3VyZ2VyeS9NXFxuY3J5cHQvU01cXG5jcnlwdGFuYWx5c2lzXFxuY3J5cHRpY1xcbmNyeXB0aWNhbGx5XFxuY3J5cHRvY3VycmVuY3kvU01cXG5jcnlwdG9ncmFtL1NNXFxuY3J5cHRvZ3JhcGhlci9TTVxcbmNyeXB0b2dyYXBoeS9NXFxuY3J5c3RhbC9TTVxcbmNyeXN0YWxsaW5lXFxuY3J5c3RhbGxpemF0aW9uL01cXG5jcnlzdGFsbGl6ZS9BRFNHXFxuY3J5c3RhbGxvZ3JhcGhpY1xcbmNyeXN0YWxsb2dyYXBoeVxcbmN0XFxuY3RuXFxuY3RyXFxuY3VcXG5jdWIvWkdTTURSXFxuY3ViYnlob2xlL01TXFxuY3ViZS9NU1xcbmN1YmVyL01cXG5jdWJpY1xcbmN1YmljYWxcXG5jdWJpY2xlL01TXFxuY3ViaXNtL01cXG5jdWJpc3QvU01cXG5jdWJpdC9TTVxcbmN1Ym9pZC9TXFxuY3Vja29sZC9NRFNHXFxuY3Vja29sZHJ5L01cXG5jdWNrb28vU01cXG5jdWN1bWJlci9TTVxcbmN1ZC9TTVxcbmN1ZGRsZS9EU01HXFxuY3VkZGx5L1RSXFxuY3VkZ2VsL1NHTURKXFxuY3VlL0RTTUdcXG5jdWZmL01ER1NcXG5jdWlzaW5lL1NNXFxuY3VsaW5hcnlcXG5jdWxsL01ER1NcXG5jdWxtaW5hdGUvWERTR05cXG5jdWxtaW5hdGlvbi9NXFxuY3Vsb3R0ZS9TTVxcbmN1bHBhYmlsaXR5L01cXG5jdWxwYWJsZS9JXFxuY3VscGFibHlcXG5jdWxwcml0L1NNXFxuY3VsdC9NU1xcbmN1bHRpc20vTVxcbmN1bHRpc3QvTVNcXG5jdWx0aXZhYmxlXFxuY3VsdGl2YXIvU01cXG5jdWx0aXZhdGUvQkRTR05cXG5jdWx0aXZhdGVkL1VcXG5jdWx0aXZhdGlvbi9NXFxuY3VsdGl2YXRvci9NU1xcbmN1bHR1cmFsL1lcXG5jdWx0dXJlL01HRFNcXG5jdWx0dXJlZC9VXFxuY3VsdmVydC9NU1xcbmN1bS9TTVxcbmN1bWJlci9TREdcXG5jdW1iZXJzb21lL1BcXG5jdW1iZXJzb21lbmVzcy9NXFxuY3VtYnJvdXNcXG5jdW1pbi9NXFxuY3VtbWVyYnVuZC9NU1xcbmN1bW1pbmdcXG5jdW11bGF0aXZlL1lcXG5jdW11bGlcXG5jdW11bG9uaW1iaVxcbmN1bXVsb25pbWJ1cy9NXFxuY3VtdWx1cy9NXFxuY3VuZWlmb3JtL01cXG5jdW5uaWxpbmd1cy9NXFxuY3VubmluZy9NUllUXFxuY3VudC9NUyFcXG5jdXAvU01cXG5jdXBib2FyZC9TTVxcbmN1cGNha2UvTVNcXG5jdXBmdWwvU01cXG5jdXBpZC9TTVxcbmN1cGlkaXR5L01cXG5jdXBvbGEvU01EXFxuY3VwcGEvU1xcbmN1cHBlZFxcbmN1cHBpbmdcXG5jdXByaWNcXG5jdXIvU01ZXFxuY3VyYWJpbGl0eS9NXFxuY3VyYWNhb1xcbmN1cmFjeS9TTVxcbmN1cmFyZS9NXFxuY3VyYXRlL0RTTUdWXFxuY3VyYXRpdmUvTVNcXG5jdXJhdG9yL0tNU1xcbmN1cmF0b3JpYWxcXG5jdXJiL01ER1NcXG5jdXJiaW5nL01cXG5jdXJic2lkZVxcbmN1cmJzdG9uZS9TTVxcbmN1cmQvTVNcXG5jdXJkbGUvRFNHXFxuY3VyZSdzXFxuY3VyZS9LWkdCRFJTXFxuY3VyZWQvVVxcbmN1cmVyL0tNXFxuY3VyZXR0YWdlL01cXG5jdXJmZXcvU01cXG5jdXJpYS9NXFxuY3VyaWFlXFxuY3VyaWUvU01cXG5jdXJpby9TTVxcbmN1cmlvc2l0eS9TTVxcbmN1cmlvdXMvWVBcXG5jdXJpb3VzbmVzcy9NXFxuY3VyaXVtL01cXG5jdXJsJ3NcXG5jdXJsL1VER1NcXG5jdXJsZXIvU01cXG5jdXJsZXcvU01cXG5jdXJsaWN1ZS9EU01HXFxuY3VybGluZXNzL01cXG5jdXJsaW5nL01cXG5jdXJseS9SUFRcXG5jdXJtdWRnZW9uL01ZU1xcbmN1cnJhbnQvTVNcXG5jdXJyZW5jeS9TTVxcbmN1cnJlbnQnc1xcbmN1cnJlbnQvRkFZXFxuY3VycmVudHNcXG5jdXJyaWN1bGFcXG5jdXJyaWN1bGFyXFxuY3VycmljdWx1bS9NXFxuY3VycnkvRFNNR1xcbmN1cnJ5Y29tYi9TR01EXFxuY3Vyc2UvRFNNR1ZcXG5jdXJzZWQvWVxcbmN1cnNpdmUnc1xcbmN1cnNpdmUvRUFZXFxuY3Vyc29yL1NNXFxuY3Vyc29yaWx5XFxuY3Vyc29yaW5lc3MvTVxcbmN1cnNvcnkvUFxcbmN1cnQvUllUUFxcbmN1cnRhaWwvR0RTTFxcbmN1cnRhaWxtZW50L1NNXFxuY3VydGFpbi9HTURTXFxuY3VydG5lc3MvTVxcbmN1cnRzeS9HRFNNXFxuY3VydmFjZW91cy9QXFxuY3VydmFjZW91c25lc3MvTVxcbmN1cnZhdHVyZS9TTVxcbmN1cnZlL0RTTUdcXG5jdXJ2eS9SVFxcbmN1c2hpb24vTURTR1xcbmN1c2h5L1JUXFxuY3VzcC9NU1xcbmN1c3BpZC9TTVxcbmN1c3BpZG9yL1NNXFxuY3VzcydzXFxuY3Vzcy9GRUdTRFxcbmN1c3NlZC9QWVxcbmN1c3RhcmQvTVNcXG5jdXN0b2RpYWxcXG5jdXN0b2RpYW4vTVNcXG5jdXN0b2RpYW5zaGlwL01cXG5jdXN0b2R5L01cXG5jdXN0b20vU1pNUlxcbmN1c3RvbWFyaWx5XFxuY3VzdG9tYXJ5L1VcXG5jdXN0b21lci9NXFxuY3VzdG9taG91c2UvU01cXG5jdXN0b21pemF0aW9uL01cXG5jdXN0b21pemUvRFNHXFxuY3V0L1RTTVJcXG5jdXRhbmVvdXNcXG5jdXRhd2F5L01TXFxuY3V0YmFjay9NU1xcbmN1dGUvWVBcXG5jdXRlbmVzcy9NXFxuY3V0ZXN5L1RSXFxuY3V0ZXkvU1xcbmN1dGljbGUvTVNcXG5jdXRpZS9TTVxcbmN1dGxhc3MvTVNcXG5jdXRsZXIvU01cXG5jdXRsZXJ5L01cXG5jdXRsZXQvU01cXG5jdXRvZmYvU01cXG5jdXRvdXQvU01cXG5jdXR0ZXIvU01cXG5jdXR0aHJvYXQvU01cXG5jdXR0aW5nL01ZU1xcbmN1dHRsZWZpc2gvTVNcXG5jdXR1cC9TTVxcbmN1dHdvcm0vTVNcXG5jd1xcbmN3dFxcbmN5YW4vTVxcbmN5YW5pZGUvTVxcbmN5YW5vYmFjdGVyaWFcXG5jeWJlcmJ1bGx5L1NNXFxuY3liZXJjYWZlL1NcXG5jeWJlcm5ldGljL1NcXG5jeWJlcm5ldGljcy9NXFxuY3liZXJwdW5rL1NNXFxuY3liZXJzZXhcXG5jeWJlcnNwYWNlL01TXFxuY3lib3JnL1NNXFxuY3ljbGFtZW4vTVNcXG5jeWNsZS9BRFNNR1xcbmN5Y2xpY1xcbmN5Y2xpY2FsL1lcXG5jeWNsaXN0L01TXFxuY3ljbG9tZXRlci9NU1xcbmN5Y2xvbmUvTVNcXG5jeWNsb25pY1xcbmN5Y2xvcGVkaWEvTVNcXG5jeWNsb3Blc1xcbmN5Y2xvcHMvTVxcbmN5Y2xvdHJvbi9NU1xcbmN5Z25ldC9NU1xcbmN5bGluZGVyL01TXFxuY3lsaW5kcmljYWxcXG5jeW1iYWwvTVNcXG5jeW1iYWxpc3QvTVNcXG5jeW5pYy9TTVxcbmN5bmljYWwvWVxcbmN5bmljaXNtL01cXG5jeW5vc3VyZS9NU1xcbmN5cHJlc3MvTVNcXG5jeXN0L01TXFxuY3lzdGljXFxuY3lzdGl0aXNcXG5jeXRva2luZXNcXG5jeXRvbG9naXN0L1NNXFxuY3l0b2xvZ3kvTVxcbmN5dG9wbGFzbS9NXFxuY3l0b3BsYXNtaWNcXG5jeXRvc2luZS9NXFxuY3phci9NU1xcbmN6YXJpbmEvU01cXG5jemFyaXNtXFxuY3phcmlzdC9TTVxcbmQnQXJlenpvL01cXG5kJ0VzdGFpbmcvTVxcbmQvTlhHSlxcbmRCXFxuZGFiL1NNXFxuZGFiYmVkXFxuZGFiYmVyL01TXFxuZGFiYmluZ1xcbmRhYmJsZS9aR0RSU1xcbmRhYmJsZXIvTVxcbmRhY2UvU01cXG5kYWNoYS9NU1xcbmRhY2hzaHVuZC9NU1xcbmRhY3R5bC9NU1xcbmRhY3R5bGljL01TXFxuZGFkL1NNXFxuZGFkYWlzbS9NXFxuZGFkYWlzdC9NU1xcbmRhZGR5L1NNXFxuZGFkby9NXFxuZGFkb2VzXFxuZGFlbW9uL01TXFxuZGFlbW9uaWNcXG5kYWZmaW5lc3MvTVxcbmRhZmZvZGlsL1NNXFxuZGFmZnkvUFRSXFxuZGFmdC9QVFJZXFxuZGFmdG5lc3MvTVxcbmRhZy9TXFxuZGFnZ2VyL01TXFxuZGFnby9TXFxuZGFnb2VzXFxuZGFndWVycmVvdHlwZS9EU01HXFxuZGFobGlhL01TXFxuZGFpbGluZXNzL01cXG5kYWlseS9QU01cXG5kYWludGlseVxcbmRhaW50aW5lc3MvTVxcbmRhaW50eS9SU01UUFxcbmRhaXF1aXJpL01TXFxuZGFpcnkvR1NNXFxuZGFpcnlpbmcvTVxcbmRhaXJ5bWFpZC9NU1xcbmRhaXJ5bWFuL01cXG5kYWlyeW1lblxcbmRhaXJ5d29tYW4vTVxcbmRhaXJ5d29tZW5cXG5kYWlzL01TXFxuZGFpc3kvU01cXG5kYWxlL1NNXFxuZGFsbGlhbmNlL01TXFxuZGFsbGllci9NXFxuZGFsbHkvWkdEUlNcXG5kYWxtYXRpYW4vTVNcXG5kYW0vU01cXG5kYW1hZ2UvTUdEU1xcbmRhbWFnZWFibGVcXG5kYW1hZ2VkL1VcXG5kYW1hZ2VzL01cXG5kYW1hc2svTURHU1xcbmRhbWUvU01cXG5kYW1tZWRcXG5kYW1taW5nXFxuZGFtbWl0XFxuZGFtbi9TQkdNRFxcbmRhbW5hYmx5XFxuZGFtbmF0aW9uL01cXG5kYW1uZWQvVFxcbmRhbXAvU1BYWlRHTUROUllcXG5kYW1wZW4vWkdEUlxcbmRhbXBlbmVyL01cXG5kYW1wZXIvTVxcbmRhbXBuZXNzL01cXG5kYW1zZWwvTVNcXG5kYW1zZWxmbHkvU01cXG5kYW1zb24vTVNcXG5kYW5jZS9NWkdEUlNcXG5kYW5jZXIvTVxcbmRhbmNpbmcvTVxcbmRhbmRlbGlvbi9TTVxcbmRhbmRlci9NXFxuZGFuZGlmeS9HRFNcXG5kYW5kbGUvR0RTXFxuZGFuZHJ1ZmYvTVxcbmRhbmR5L1RSU01cXG5kYW5nL1NaR0RSXFxuZGFuZ2VyL01cXG5kYW5nZXJvdXMvWVxcbmRhbmdsZS9aR0RSU1xcbmRhbmdsZXIvTVxcbmRhbmlzaC9NU1xcbmRhbmsvUFRSWVxcbmRhbmtuZXNzL01cXG5kYW5zZXVzZS9NU1xcbmRhcHBlci9UUlxcbmRhcHBsZS9NR0RTXFxuZGFyZS9EUlNNWkdcXG5kYXJlZGV2aWwvTVNcXG5kYXJlZGV2aWxyeS9NXFxuZGFyZXIvTVxcbmRhcmVzYXlcXG5kYXJpbmcvTVlcXG5kYXJrL1BYVE1OUllcXG5kYXJrZW4vWkdEUlxcbmRhcmtlbmVyL01cXG5kYXJraWUvU1xcbmRhcmtuZXNzL01cXG5kYXJrcm9vbS9NU1xcbmRhcmxpbmcvTVNcXG5kYXJuL1NaR01EUlxcbmRhcm5lZC9UUlxcbmRhcm5lci9NXFxuZGFydC9TWkdNRFJcXG5kYXJ0Ym9hcmQvTVNcXG5kYXJ0ZXIvTVxcbmRhc2gvWkdNRFJTXFxuZGFzaGJvYXJkL1NNXFxuZGFzaGVyL01cXG5kYXNoaWtpL01TXFxuZGFzaGluZy9ZXFxuZGFzdGFyZC9NWVNcXG5kYXN0YXJkbGluZXNzL01cXG5kYXRhXFxuZGF0YWJhc2UvU01cXG5kYXRhc2V0L01TXFxuZGF0YXR5cGVcXG5kYXRlL0RSU01aR1ZcXG5kYXRlYm9vay9TXFxuZGF0ZWQvVVxcbmRhdGVsZXNzXFxuZGF0ZWxpbmUvTUdEU1xcbmRhdGVyL01cXG5kYXRlc2V0XFxuZGF0aXZlL01TXFxuZGF0dW0vTVxcbmRhdWIvU1pHTURSXFxuZGF1YmVyL01cXG5kYXVnaHRlci9TTVlcXG5kYXVudC9HRFNcXG5kYXVudGluZy9ZXFxuZGF1bnRsZXNzL1lQXFxuZGF1bnRsZXNzbmVzcy9NXFxuZGF1cGhpbi9NU1xcbmRhdmVucG9ydC9NU1xcbmRhdml0L01TXFxuZGF3ZGxlL1pHRFJTXFxuZGF3ZGxlci9NXFxuZGF3bi9TR01EXFxuZGF5L1NNXFxuZGF5YmVkL01TXFxuZGF5YnJlYWsvTVxcbmRheWNhcmUvTVxcbmRheWRyZWFtL01EUlpHU1xcbmRheWRyZWFtZXIvTVxcbmRheWxpZ2h0L01TXFxuZGF5bGlnaHRzL01cXG5kYXlsb25nXFxuZGF5dGltZS9NXFxuZGF6ZS9EU01HXFxuZGF6ZWQvWVxcbmRhenpsZS9NWkdEUlNcXG5kYXp6bGVyL01cXG5kYXp6bGluZy9ZXFxuZGJcXG5kYmxcXG5kY1xcbmRkL1NER1xcbmRkZWQvS1xcbmRkaW5nL0tcXG5kZWFjb24vTVNcXG5kZWFjb25lc3MvTVNcXG5kZWFkL1hUTU5SWVxcbmRlYWRiZWF0L01TXFxuZGVhZGJvbHQvU01cXG5kZWFkZW4vR0RcXG5kZWFkaGVhZC9TREdcXG5kZWFkbGluZS9TTVxcbmRlYWRsaW5lc3MvTVxcbmRlYWRsb2NrL0dTTURcXG5kZWFkbHkvVFBSXFxuZGVhZHBhbi9NU1xcbmRlYWRwYW5uZWRcXG5kZWFkcGFubmluZ1xcbmRlYWR3b29kL01cXG5kZWFmL1BYVE5SXFxuZGVhZmVuL0dEXFxuZGVhZmVuaW5nL1lcXG5kZWFmbmVzcy9NXFxuZGVhbC9TSlpHTVJcXG5kZWFsZXIvTVxcbmRlYWxlcnNoaXAvU01cXG5kZWFsaW5nL01cXG5kZWFsdFxcbmRlYW4vTVxcbmRlYW5lcnkvU01cXG5kZWFuc2hpcC9NXFxuZGVhci9TUFRNUllIXFxuZGVhcmVzdC9TXFxuZGVhcm5lc3MvTVxcbmRlYXJ0aC9NXFxuZGVhcnRoc1xcbmRlYXJ5L1NNXFxuZGVhdGgvTVlcXG5kZWF0aGJlZC9TTVxcbmRlYXRoYmxvdy9NU1xcbmRlYXRobGVzcy9ZXFxuZGVhdGhsaWtlXFxuZGVhdGhzXFxuZGVhdGh0cmFwL01TXFxuZGVhdGh3YXRjaC9NU1xcbmRlYXZlc1xcbmRlYi9TTVxcbmRlYmFjbGUvTVNcXG5kZWJhcmthdGlvbi9NXFxuZGViYXJtZW50L01cXG5kZWJhdGUvQk1aUlxcbmRlYmF0ZXIvTVxcbmRlYmF0aW5nL01cXG5kZWJhdWNoL01EU0dcXG5kZWJhdWNoZWUvTVNcXG5kZWJhdWNoZXJ5L1NNXFxuZGViZW50dXJlL01TXFxuZGViaWxpdGF0ZS9EU0dOXFxuZGViaWxpdGF0aW9uL01cXG5kZWJpbGl0eS9TTVxcbmRlYml0L0RcXG5kZWJvbmFpci9QWVxcbmRlYm9uYWlybmVzcy9NXFxuZGVib3VjaC9HRFNcXG5kZWJyaWRlbWVudFxcbmRlYnJpcy9NXFxuZGVidC9TTVxcbmRlYnRvci9NU1xcbmRlYnVnZ2VyL1NcXG5kZWJ1dC9HTURcXG5kZWJ1dGFudGUvU01cXG5kZWNhZGUvTVNcXG5kZWNhZGVuY2UvTVxcbmRlY2FkZW5jeS9NXFxuZGVjYWRlbnQvTVlTXFxuZGVjYWYvTVNcXG5kZWNhZmZlaW5hdGUvRFNHXFxuZGVjYWdvbi9NU1xcbmRlY2FsL01TXFxuZGVjYW1wbWVudC9NXFxuZGVjYXBpdGF0ZS9YR05EU1xcbmRlY2FwaXRhdG9yL01TXFxuZGVjYXRobGV0ZS9TXFxuZGVjYXRobG9uL1NNXFxuZGVjYXkvR0RcXG5kZWNlYXNlZC9NXFxuZGVjZWRlbnQvTVNcXG5kZWNlaXQvTVNcXG5kZWNlaXRmdWwvWVBcXG5kZWNlaXRmdWxuZXNzL01cXG5kZWNlaXZlL1VHRFNcXG5kZWNlaXZlci9NU1xcbmRlY2VpdmluZy9ZXFxuZGVjZWxlcmF0ZS9HTkRTXFxuZGVjZWxlcmF0aW9uL01cXG5kZWNlbGVyYXRvci9TTVxcbmRlY2VuY3kvSVNNXFxuZGVjZW5uaWFsL1NNXFxuZGVjZW50L0lZXFxuZGVjZXB0aW9uL01TXFxuZGVjZXB0aXZlL1lQXFxuZGVjZXB0aXZlbmVzcy9NXFxuZGVjaWJlbC9NU1xcbmRlY2lkYWJsZS9VXFxuZGVjaWRlL0JaR0RSU1xcbmRlY2lkZWQvWVxcbmRlY2lkdW91c1xcbmRlY2lsaXRlci9NU1xcbmRlY2ltYWwvU01cXG5kZWNpbWFsaXphdGlvblxcbmRlY2ltYXRlL0RTR05cXG5kZWNpbWF0aW9uL01cXG5kZWNpbWV0ZXIvTVNcXG5kZWNpcGhlcmFibGUvVUlcXG5kZWNpc2lvbi9JTVxcbmRlY2lzaW9uc1xcbmRlY2lzaXZlL0lQWVxcbmRlY2lzaXZlbmVzcy9JTVxcbmRlY2svU0dNRFxcbmRlY2tjaGFpci9TXFxuZGVja2hhbmQvU01cXG5kZWNrbGUvU1xcbmRlY2xhbWF0aW9uL01TXFxuZGVjbGFtYXRvcnlcXG5kZWNsYXJhdGlvbi9NU1xcbmRlY2xhcmF0aXZlXFxuZGVjbGFyYXRvcnlcXG5kZWNsYXJlL0RSU1pHQlxcbmRlY2xhcmVkL1VcXG5kZWNsYXJlci9NXFxuZGVjbGVuc2lvbi9TTVxcbmRlY2xpbmF0aW9uL01cXG5kZWNsaW5lL0RSU01aR1xcbmRlY2xpbmVyL01cXG5kZWNsaXZpdHkvU01cXG5kZWNvaGVyZW5jZVxcbmRlY29sbGV0YWdlL1NNXFxuZGVjb2xsZXRlXFxuZGVjb25nZXN0YW50L01TXFxuZGVjb25zdHJ1Y3Rpb25pc21cXG5kZWNvci9NU1xcbmRlY29yYXRlL0FHTlZEU1xcbmRlY29yYXRpbmcvTVxcbmRlY29yYXRpb24vQU1cXG5kZWNvcmF0aW9uc1xcbmRlY29yYXRpdmUvWVxcbmRlY29yYXRvci9NU1xcbmRlY29yb3VzL0lZXFxuZGVjb3JvdXNuZXNzL01cXG5kZWNvcnVtL01cXG5kZWNvdXBhZ2UvRFNNR1xcbmRlY295L0dNRFNcXG5kZWNyZWFzaW5nL1lcXG5kZWNyZWUvTURTXFxuZGVjcmVlaW5nXFxuZGVjcmVtZW50L0dEU1xcbmRlY3JlcGl0XFxuZGVjcmVwaXR1ZGUvTVxcbmRlY3JpbWluYWxpemF0aW9uL01cXG5kZWNyeS9HRFNcXG5kZWNyeXB0aW9uXFxuZGVkaWNhdGUvQUdEU1xcbmRlZGljYXRpb24vU01cXG5kZWRpY2F0b3IvU01cXG5kZWRpY2F0b3J5XFxuZGVkdWNlL0dEU1xcbmRlZHVjaWJsZVxcbmRlZHVjdC9HVkRcXG5kZWR1Y3RpYmxlL1NNXFxuZGVkdWN0aW9uL1NNXFxuZGVkdWN0aXZlL1lcXG5kZWVkL0dEXFxuZGVlamF5L01TXFxuZGVlbS9BU0dEXFxuZGVlcC9TUFhUTU5SWVxcbmRlZXBlbi9HRFxcbmRlZXBmYWtlL1NNXFxuZGVlcG5lc3MvTVxcbmRlZXIvTVxcbmRlZXJza2luL01cXG5kZWVyc3RhbGtlci9TXFxuZGVmL1pcXG5kZWZhY2VtZW50L01cXG5kZWZhY2VyL1NNXFxuZGVmYWxjYXRlL0RTWEdOXFxuZGVmYWxjYXRpb24vTVxcbmRlZmFtYXRpb24vTVxcbmRlZmFtYXRvcnlcXG5kZWZhbWUvWkdEUlNcXG5kZWZhbWVyL01cXG5kZWZhdWx0ZXIvU01cXG5kZWZlYXQvTURSWkdTXFxuZGVmZWF0ZWQvVVxcbmRlZmVhdGVyL01cXG5kZWZlYXRpc20vTVxcbmRlZmVhdGlzdC9NU1xcbmRlZmVjYXRlL0dORFNcXG5kZWZlY2F0aW9uL01cXG5kZWZlY3QvTURHVlNcXG5kZWZlY3Rpb24vTVNcXG5kZWZlY3RpdmUvTVBZU1xcbmRlZmVjdGl2ZW5lc3MvTVxcbmRlZmVjdG9yL01TXFxuZGVmZW5kYW50L1NNXFxuZGVmZW5kZWQvVVxcbmRlZmVuZXN0cmF0aW9uL1NcXG5kZWZlbnNlL0RTTUdWXFxuZGVmZW5zZWxlc3MvWVBcXG5kZWZlbnNlbGVzc25lc3MvTVxcbmRlZmVuc2libGUvSVxcbmRlZmVuc2libHkvSVxcbmRlZmVuc2l2ZS9NWVBcXG5kZWZlbnNpdmVuZXNzL01cXG5kZWZlcmVuY2UvTVxcbmRlZmVyZW50aWFsL1lcXG5kZWZlcnJhbC9NU1xcbmRlZmVycmVkXFxuZGVmZXJyaW5nXFxuZGVmZmVyXFxuZGVmZmVzdFxcbmRlZmlhbnQvWVxcbmRlZmlicmlsbGF0aW9uXFxuZGVmaWJyaWxsYXRvci9TXFxuZGVmaWNpZW5jeS9TTVxcbmRlZmljaWVudFxcbmRlZmljaXQvU01cXG5kZWZpbGVtZW50L01cXG5kZWZpbmFibGUvSVVcXG5kZWZpbmUvQUdEU1xcbmRlZmluZWQvVVxcbmRlZmluZXIvTVNcXG5kZWZpbml0ZS9JWVZQXFxuZGVmaW5pdGVuZXNzL0lNXFxuZGVmaW5pdGlvbi9BTVxcbmRlZmluaXRpb25zXFxuZGVmaW5pdGl2ZS9ZXFxuZGVmbGF0ZS9HTkRTXFxuZGVmbGF0aW9uL01cXG5kZWZsYXRpb25hcnlcXG5kZWZsZWN0L0RHVlNcXG5kZWZsZWN0aW9uL01TXFxuZGVmbGVjdG9yL1NNXFxuZGVmb2dnZXIvU01cXG5kZWZvbGlhbnQvU01cXG5kZWZvbGlhdGUvRFNHTlxcbmRlZm9saWF0aW9uL01cXG5kZWZvbGlhdG9yL01TXFxuZGVmb3JtaXR5L1NNXFxuZGVmcmF1ZC9EUlpHU1xcbmRlZnJhdWRlci9NXFxuZGVmcmF5YWwvTVxcbmRlZnJvY2svREdcXG5kZWZyb3N0ZXIvTVNcXG5kZWZ0L1BUUllcXG5kZWZ0bmVzcy9NXFxuZGVmdW5jdFxcbmRlZnkvR0RTXFxuZGVnXFxuZGVnZW5lcmFjeS9NXFxuZGVnZW5lcmF0ZS9NVlxcbmRlZ3JhZGUvQlxcbmRlZ3JlZS9NU1xcbmRlaHlkcmF0b3IvU01cXG5kZWh5ZHJvZ2VuYXNlXFxuZGVpY2VyL01TXFxuZGVpZmljYXRpb24vTVxcbmRlaWZ5L05HRFNcXG5kZWlnbi9HRFNcXG5kZWlzdC9NU1xcbmRlaXN0aWNcXG5kZWl0eS9TTVxcbmRlamVjdC9HRFNcXG5kZWplY3RlZC9ZXFxuZGVqZWN0aW9uL01cXG5kZWxheS9aRFJcXG5kZWxlY3RhYmxlXFxuZGVsZWN0YWJseVxcbmRlbGVjdGF0aW9uL01cXG5kZWxlZ2F0ZS9HRFxcbmRlbGV0ZS9YR05EU1xcbmRlbGV0ZXJpb3VzXFxuZGVsZXRpb24vTVxcbmRlbGZ0L01cXG5kZWxmdHdhcmUvTVxcbmRlbGkvU01cXG5kZWxpYmVyYXRlL1hZVlBcXG5kZWxpYmVyYXRlbmVzcy9NXFxuZGVsaWNhY3kvSVNNXFxuZGVsaWNhdGUvSVlcXG5kZWxpY2F0ZW5lc3MvTVxcbmRlbGljYXRlc3Nlbi9TTVxcbmRlbGljaW91cy9QWVxcbmRlbGljaW91c25lc3MvTVxcbmRlbGlnaHRlZC9ZXFxuZGVsaWdodGZ1bC9ZXFxuZGVsaW1pbmF0b3JcXG5kZWxpbmVhdGUvR05YRFNcXG5kZWxpbmVhdGlvbi9NXFxuZGVsaW5xdWVuY3kvU01cXG5kZWxpbnF1ZW50L1NNWVxcbmRlbGlxdWVzY2UvRFNHXFxuZGVsaXF1ZXNjZW50XFxuZGVsaXJpb3VzL1lQXFxuZGVsaXJpb3VzbmVzcy9NXFxuZGVsaXJpdW0vU01cXG5kZWxpdmVyL0FER1NcXG5kZWxpdmVyYWJsZS9TXFxuZGVsaXZlcmFuY2UvTVxcbmRlbGl2ZXJlZC9VXFxuZGVsaXZlcmVyL1NNXFxuZGVsbC9TTVxcbmRlbHBoaW5pdW0vTVNcXG5kZWx0YS9NU1xcbmRlbHVkZS9HRFNcXG5kZWx1Z2UvTUdEU1xcbmRlbHVzaW9uL01TXFxuZGVsdXNpb25hbFxcbmRlbHVzaXZlL1lcXG5kZWx1eGVcXG5kZWx2ZS9aR0RSU1xcbmRlbHZlci9NXFxuZGVtYWdvZ2ljXFxuZGVtYWdvZ2ljYWxseVxcbmRlbWFnb2d1ZS9TTVxcbmRlbWFnb2d1ZXJ5L01cXG5kZW1hZ29neS9NXFxuZGVtYW5kL0dNRFNcXG5kZW1hbmRpbmcvVVxcbmRlbWFyY2F0ZS9EU0dOWFxcbmRlbWFyY2F0aW9uL01cXG5kZW1lYW4vR0RTXFxuZGVtZWFub3IvTVxcbmRlbWVudGVkL1lcXG5kZW1lbnRpYS9NXFxuZGVtZXNuZS9NU1xcbmRlbWlnb2QvTVNcXG5kZW1pZ29kZGVzcy9NU1xcbmRlbWlqb2huL1NNXFxuZGVtaW1vbmRhaW5lL1NNXFxuZGVtaW1vbmRlL01cXG5kZW1pc2UvTUdEU1xcbmRlbWl0YXNzZS9NU1xcbmRlbW8vR01EXFxuZGVtb2NyYWN5L1NNXFxuZGVtb2NyYXQvTVNcXG5kZW1vY3JhdGljL1VcXG5kZW1vY3JhdGljYWxseVxcbmRlbW9jcmF0aXphdGlvbi9NXFxuZGVtb2NyYXRpemUvR0RTXFxuZGVtb2RlXFxuZGVtb2dyYXBoZXIvU01cXG5kZW1vZ3JhcGhpYy9TTVxcbmRlbW9ncmFwaGljYWxseVxcbmRlbW9ncmFwaGljcy9NXFxuZGVtb2dyYXBoeS9NXFxuZGVtb2xpc2gvRFNHXFxuZGVtb2xpdGlvbi9NU1xcbmRlbW9uL01TXFxuZGVtb25ldGl6YXRpb24vTVxcbmRlbW9uaWFjXFxuZGVtb25pYWNhbC9ZXFxuZGVtb25pY1xcbmRlbW9uaWNhbGx5XFxuZGVtb25pemUvR0RTXFxuZGVtb25vbG9neS9TTVxcbmRlbW9uc3RyYWJpbGl0eVxcbmRlbW9uc3RyYWJsZS9JXFxuZGVtb25zdHJhYmx5XFxuZGVtb25zdHJhdGUvWEdOVkRTXFxuZGVtb25zdHJhdGlvbi9NXFxuZGVtb25zdHJhdGl2ZS9NWVNQXFxuZGVtb25zdHJhdGl2ZW5lc3MvTVxcbmRlbW9uc3RyYXRvci9NU1xcbmRlbW90ZS9HRFxcbmRlbW90aWNcXG5kZW1vdW50XFxuZGVtdWxjZW50L1NNXFxuZGVtdXIvVE1SU1xcbmRlbXVyZS9QWVxcbmRlbXVyZW5lc3MvTVxcbmRlbXVycmFsL1NNXFxuZGVtdXJyZWRcXG5kZW11cnJlci9TTVxcbmRlbXVycmluZ1xcbmRlbi9NXFxuZGVuYXRpb25hbGl6YXRpb25cXG5kZW5hdHVyYXRpb25cXG5kZW5hdHVyZS9ER1xcbmRlbmRyaXRlL1NNXFxuZGVuZ3VlL01cXG5kZW5pYWJpbGl0eVxcbmRlbmlhYmxlL1VcXG5kZW5pYWwvTVNcXG5kZW5pZXIvTVxcbmRlbmlncmF0ZS9EU0dOXFxuZGVuaWdyYXRpb24vTVxcbmRlbmltL01TXFxuZGVuaXRyaWZpY2F0aW9uXFxuZGVuaXplbi9NU1xcbmRlbm9taW5hdGlvbmFsXFxuZGVub3RhdGl2ZVxcbmRlbm91ZW1lbnQvTVNcXG5kZW5vdW5jZS9MRFNHXFxuZGVub3VuY2VtZW50L1NNXFxuZGVuc2UvUFlUUlxcbmRlbnNlbmVzcy9NXFxuZGVuc2l0eS9TTVxcbmRlbnQvSVNHTURcXG5kZW50YWwvWVxcbmRlbnRpZnJpY2UvU01cXG5kZW50aW4vTVxcbmRlbnRpc3QvTVNcXG5kZW50aXN0cnkvTVxcbmRlbnRpdGlvbi9NXFxuZGVudHVyZS9JTVNcXG5kZW51Y2xlYXJpemUvR0RTXFxuZGVudWRhdGlvbi9NXFxuZGVudWRlL0dEU1xcbmRlbnVuY2lhdGlvbi9TTVxcbmRlbnkvWkdEUlNcXG5kZW9kb3JhbnQvU01cXG5kZW9kb3JpemF0aW9uL01cXG5kZW9kb3JpemUvRFJTWkdcXG5kZW9kb3JpemVyL01cXG5kZXBhcnRlZC9NXFxuZGVwYXJ0bWVudC9NU1xcbmRlcGFydG1lbnRhbC9ZXFxuZGVwYXJ0bWVudGFsaXphdGlvbi9NXFxuZGVwYXJ0bWVudGFsaXplL0dEU1xcbmRlcGFydHVyZS9TTVxcbmRlcGVuZGFiaWxpdHkvTVxcbmRlcGVuZGFibGUvVVxcbmRlcGVuZGFibHlcXG5kZXBlbmRlbmNlL0lNXFxuZGVwZW5kZW5jeS9TTVxcbmRlcGVuZGVudC9JTVlTXFxuZGVwaWN0L0dEU1xcbmRlcGljdGlvbi9NU1xcbmRlcGlsYXRvcnkvU01cXG5kZXBsZXRlL0dORFNcXG5kZXBsZXRpb24vTVxcbmRlcGxvcmFibHlcXG5kZXBsb3JlL0JHRFNcXG5kZXBsb3kvQUxHRFNcXG5kZXBsb3ltZW50L0FNXFxuZGVwbG95bWVudHNcXG5kZXBvbmVudC9NU1xcbmRlcG9ydGF0aW9uL01TXFxuZGVwb3J0ZWUvTVNcXG5kZXBvcnRtZW50L01cXG5kZXBvc2l0L0FHTURTXFxuZGVwb3NpdG9yL01TXFxuZGVwb3NpdG9yeS9TTVxcbmRlcHJhdmUvR0RTXFxuZGVwcmF2aXR5L1NNXFxuZGVwcmVjYXRlL0dORFNcXG5kZXByZWNhdGluZy9ZXFxuZGVwcmVjYXRpb24vTVxcbmRlcHJlY2F0b3J5XFxuZGVwcmVjaWF0ZS9EU0dOXFxuZGVwcmVjaWF0aW9uL01cXG5kZXByZWRhdGlvbi9TTVxcbmRlcHJlc3NhbnQvU01cXG5kZXByZXNzaW5nL1lcXG5kZXByZXNzaW9uL1NNXFxuZGVwcmVzc2l2ZS9TTVxcbmRlcHJlc3Nvci9NU1xcbmRlcHJlc3N1cml6YXRpb25cXG5kZXByaXZlL0dEU1xcbmRlcHJvZ3JhbW1pbmdcXG5kZXB0aC9NXFxuZGVwdGhzXFxuZGVwdXRhdGlvbi9NU1xcbmRlcHV0ZS9EU0dcXG5kZXB1dGl6ZS9EU0dcXG5kZXB1dHkvU01cXG5kZXJhaWxsZXVyL1NNXFxuZGVyYWlsbWVudC9TTVxcbmRlcmFuZ2VtZW50L01cXG5kZXJieS9TTVxcbmRlcmVsaWN0L01TXFxuZGVyZWxpY3Rpb24vTVxcbmRlcmlkZS9HRFNcXG5kZXJpc2lvbi9NXFxuZGVyaXNpdmUvUFlcXG5kZXJpc2l2ZW5lc3MvTVxcbmRlcmlzb3J5XFxuZGVyaXZhdGlvbi9NU1xcbmRlcml2YXRpdmUvTVNcXG5kZXJpdmUvQlxcbmRlcm1hbFxcbmRlcm1hdGl0aXMvTVxcbmRlcm1hdG9sb2dpY2FsXFxuZGVybWF0b2xvZ2lzdC9TTVxcbmRlcm1hdG9sb2d5L01cXG5kZXJtaXMvTVxcbmRlcm9nYXRlL0RTR05cXG5kZXJvZ2F0aW9uL01cXG5kZXJvZ2F0b3JpbHlcXG5kZXJvZ2F0b3J5XFxuZGVycmljay9TTVxcbmRlcnJpZXJlL1NNXFxuZGVycmluZ2VyL1NNXFxuZGVydlxcbmRlcnZpc2gvTVNcXG5kZXNhbGluYXRlL0dORFNcXG5kZXNhbGluYXRpb24vTVxcbmRlc2FsaW5pemF0aW9uL01cXG5kZXNhbGluaXplL0dEU1xcbmRlc2NhbnQvTVxcbmRlc2NlbmQvRkdEU1xcbmRlc2NlbmRhbnQvTVNcXG5kZXNjZW5kZXJcXG5kZXNjcmliYWJsZS9JXFxuZGVzY3JpYmUvQlpHRFJcXG5kZXNjcmliZXIvTVxcbmRlc2NyaXB0aW9uL1NNXFxuZGVzY3JpcHRpdmUvUFlcXG5kZXNjcmlwdGl2ZW5lc3MvTVxcbmRlc2NyaXB0b3IvU1xcbmRlc2NyeS9HRFNcXG5kZXNlY3JhdGUvRFNHTlxcbmRlc2VjcmF0aW9uL01cXG5kZXNlbGVjdGlvblxcbmRlc2VydC9TRFJaR01cXG5kZXNlcnRlci9NXFxuZGVzZXJ0aWZpY2F0aW9uXFxuZGVzZXJ0aW9uL1NNXFxuZGVzZXJ2ZWQvVVlcXG5kZXNlcnZpbmcvVVxcbmRlc2ljY2FudC9TTVxcbmRlc2ljY2F0ZS9EU0dOXFxuZGVzaWNjYXRpb24vTVxcbmRlc2ljY2F0b3IvU01cXG5kZXNpZGVyYXRhXFxuZGVzaWRlcmF0dW0vTVxcbmRlc2lnbi9BU0RHXFxuZGVzaWduYXRlL0RTR05YXFxuZGVzaWduYXRpb24vTVxcbmRlc2lyYWJpbGl0eS9VTVxcbmRlc2lyYWJsZW5lc3MvTVxcbmRlc2lyYWJseS9VXFxuZGVzaXJlL0JcXG5kZXNpcmVkL1VcXG5kZXNpcm91c1xcbmRlc2lzdC9TREdcXG5kZXNrL1NNXFxuZGVza2lsbC9HXFxuZGVza3RvcC9TTVxcbmRlc29sYXRlL1BEU1lHTlxcbmRlc29sYXRlbmVzcy9NXFxuZGVzb2xhdGlvbi9NXFxuZGVzcGFpci9TTURHXFxuZGVzcGFpcmluZy9ZXFxuZGVzcGVyYWRvL01cXG5kZXNwZXJhZG9lc1xcbmRlc3BlcmF0ZS9ZTlBcXG5kZXNwZXJhdGVuZXNzL01cXG5kZXNwZXJhdGlvbi9NXFxuZGVzcGljYWJsZVxcbmRlc3BpY2FibHlcXG5kZXNwaXNlL0RTR1xcbmRlc3BpdGVcXG5kZXNwb2lsbWVudC9NXFxuZGVzcG9uZGVuY2UvTVxcbmRlc3BvbmRlbmN5L01cXG5kZXNwb25kZW50L1lcXG5kZXNwb3RpY1xcbmRlc3BvdGljYWxseVxcbmRlc3BvdGlzbS9NXFxuZGVzc2VydC9TTVxcbmRlc3NlcnRzcG9vbi9TXFxuZGVzc2VydHNwb29uZnVsL1NcXG5kZXN0aW5hdGlvbi9TTVxcbmRlc3RpbmUvRFNHXFxuZGVzdGlueS9TTVxcbmRlc3RpdHV0ZS9OXFxuZGVzdGl0dXRpb24vTVxcbmRlc3Ryb3kvU1pHRFJcXG5kZXN0cm95ZXIvTVxcbmRlc3RydWN0L0dWTURTXFxuZGVzdHJ1Y3RpYmlsaXR5L0lNXFxuZGVzdHJ1Y3RpYmxlL0lcXG5kZXN0cnVjdGlvbi9NXFxuZGVzdHJ1Y3RpdmUvUFlcXG5kZXN0cnVjdGl2ZW5lc3MvTVxcbmRlc3VldHVkZS9NXFxuZGVzdWx0b3JpbHlcXG5kZXN1bHRvcnlcXG5kZXRhY2gvQkxHRFNcXG5kZXRhY2htZW50L01TXFxuZGV0YWluL0xHRFNcXG5kZXRhaW5lZS9NU1xcbmRldGFpbm1lbnQvTVxcbmRldGVjdC9TREdWQlxcbmRldGVjdGFibGUvVVxcbmRldGVjdGVkL1VcXG5kZXRlY3Rpb24vTVxcbmRldGVjdGl2ZS9TTVxcbmRldGVjdG9yL1NNXFxuZGV0ZW50ZS9TTU5YXFxuZGV0ZW50aW9uL01cXG5kZXRlci9TTFxcbmRldGVyZ2VudC9TTVxcbmRldGVyaW9yYXRlL0RTR05cXG5kZXRlcmlvcmF0aW9uL01cXG5kZXRlcm1lbnQvTVxcbmRldGVybWluYWJsZS9JXFxuZGV0ZXJtaW5hbnQvU01cXG5kZXRlcm1pbmF0ZVxcbmRldGVybWluZS9BR0RTXFxuZGV0ZXJtaW5lZC9VXFxuZGV0ZXJtaW5lZGx5XFxuZGV0ZXJtaW5lci9TTVxcbmRldGVybWluaXNtL01cXG5kZXRlcm1pbmlzdGljXFxuZGV0ZXJtaW5pc3RpY2FsbHlcXG5kZXRlcnJlZC9VXFxuZGV0ZXJyZW5jZS9NXFxuZGV0ZXJyZW50L01TXFxuZGV0ZXJyaW5nXFxuZGV0ZXN0YWJseVxcbmRldGVzdGF0aW9uL01cXG5kZXRocm9uZS9EU0xHXFxuZGV0aHJvbmVtZW50L01cXG5kZXRvbmF0ZS9HTkRTWFxcbmRldG9uYXRpb24vTVxcbmRldG9uYXRvci9TTVxcbmRldG94L01EU0dcXG5kZXRveGlmaWNhdGlvbi9NXFxuZGV0b3hpZnkvRFNHTlxcbmRldHJhY3QvR0RcXG5kZXRyaW1lbnQvU01cXG5kZXRyaW1lbnRhbC9ZXFxuZGV0cml0dXMvTVxcbmRldWNlL1NNXFxuZGV1dGVyaXVtL01cXG5kZXZhc3RhdGUvR05EU1xcbmRldmFzdGF0aW5nL1lcXG5kZXZhc3RhdGlvbi9NXFxuZGV2YXN0YXRvci9NU1xcbmRldmVsb3AvQVNHRExcXG5kZXZlbG9wZWQvVVxcbmRldmVsb3Blci9TTVxcbmRldmVsb3BtZW50L0FTTVxcbmRldmVsb3BtZW50YWwvWVxcbmRldmlhbmNlL01cXG5kZXZpYW5jeS9NXFxuZGV2aWFudC9TTVxcbmRldmlhdGUvRFNNR05YXFxuZGV2aWF0aW5nL1VcXG5kZXZpYXRpb24vTVxcbmRldmlsL1NNREdMXFxuZGV2aWxpc2gvWVBcXG5kZXZpbGlzaG5lc3MvTVxcbmRldmlsbWVudC9NXFxuZGV2aWxyeS9TTVxcbmRldmlsdHJ5L1NNXFxuZGV2aW91cy9ZUFxcbmRldmlvdXNuZXNzL01cXG5kZXZvaWRcXG5kZXZvbHV0aW9uL01cXG5kZXZvbHZlL0RTR1xcbmRldm90ZWQvWVxcbmRldm90ZWUvU01cXG5kZXZvdGlvbi9NU1xcbmRldm90aW9uYWwvU01cXG5kZXZvdXIvU0RHXFxuZGV2b3V0L1BSWVRcXG5kZXZvdXRuZXNzL01cXG5kZXcvTVxcbmRld2JlcnJ5L1NNXFxuZGV3Y2xhdy9TTVxcbmRld2Ryb3AvU01cXG5kZXdpbmVzcy9NXFxuZGV3bGFwL1NNXFxuZGV3eS9SVFBcXG5kZXh0ZXJpdHkvTVxcbmRleHRlcm91cy9ZUFxcbmRleHRlcm91c25lc3MvTVxcbmRleHRyb3NlL01cXG5kaGFybWFcXG5kaG90aS9TTVxcbmRob3cvTVNcXG5kaWFiZXRlcy9NXFxuZGlhYmV0aWMvU01cXG5kaWFib2xpY1xcbmRpYWJvbGljYWwvWVxcbmRpYWNyaXRpYy9NU1xcbmRpYWNyaXRpY2FsXFxuZGlhZGVtL1NNXFxuZGlhZXJlc2VzXFxuZGlhZXJlc2lzL01cXG5kaWFnbm9zZS9EU0dcXG5kaWFnbm9zaXMvTVxcbmRpYWdub3N0aWMvU1xcbmRpYWdub3N0aWNhbGx5XFxuZGlhZ25vc3RpY2lhbi9TTVxcbmRpYWdub3N0aWNzL01cXG5kaWFnb25hbC9TTVlcXG5kaWFncmFtL1NNXFxuZGlhZ3JhbW1hdGljXFxuZGlhZ3JhbW1hdGljYWxseVxcbmRpYWdyYW1tZWRcXG5kaWFncmFtbWluZ1xcbmRpYWwvQU1ER1NcXG5kaWFsZWN0L1NNXFxuZGlhbGVjdGFsXFxuZGlhbGVjdGljL1NNXFxuZGlhbGVjdGljYWxcXG5kaWFsZWN0aWNzL01cXG5kaWFsaW5nL1NcXG5kaWFsb2dcXG5kaWFsb2d1ZS9TTVxcbmRpYWx5c2VzXFxuZGlhbHlzaXMvTVxcbmRpYWx5emVzXFxuZGlhbVxcbmRpYW1hZ25ldGljXFxuZGlhbWFnbmV0aXNtXFxuZGlhbWFudGVcXG5kaWFtZXRlci9TTVxcbmRpYW1ldHJpY1xcbmRpYW1ldHJpY2FsL1lcXG5kaWFtb25kL1NNXFxuZGlhbW9uZGJhY2svTVNcXG5kaWFwYXNvbi9TTVxcbmRpYXBlci9TTURHXFxuZGlhcGhhbm91c1xcbmRpYXBocmFnbS9TTVxcbmRpYXBocmFnbWF0aWNcXG5kaWFyaXN0L1NNXFxuZGlhcnJoZWEvTVxcbmRpYXJ5L1NNXFxuZGlhc3BvcmEvU01cXG5kaWFzdGFzZS9NXFxuZGlhc3RvbGUvTVxcbmRpYXN0b2xpY1xcbmRpYXRoZXJteS9NXFxuZGlhdG9tL1NNXFxuZGlhdG9taWNcXG5kaWF0b25pY1xcbmRpYXRyaWJlL1NNXFxuZGlhemVwYW1cXG5kaWJibGUvRFNNR1xcbmRpYnMvTVxcbmRpY2UvR0RTXFxuZGljZXMvSVxcbmRpY2V5XFxuZGljaG90b21vdXNcXG5kaWNob3RvbXkvU01cXG5kaWNpZXJcXG5kaWNpZXN0XFxuZGljay9NUlhaU1xcbmRpY2tlci9ER1xcbmRpY2tleS9TTVxcbmRpY2toZWFkL1NcXG5kaWNreWJpcmQvU1xcbmRpY290eWxlZG9uL01TXFxuZGljb3R5bGVkb25vdXNcXG5kaWN0XFxuZGljdGFcXG5kaWN0YXRlL0RTTUdOWFxcbmRpY3RhdGlvbi9NXFxuZGljdGF0b3IvU01cXG5kaWN0YXRvcmlhbC9ZXFxuZGljdGF0b3JzaGlwL1NNXFxuZGljdGlvbi9NXFxuZGljdGlvbmFyeS9TTVxcbmRpY3R1bS9NXFxuZGlkL0FVXFxuZGlkYWN0aWNcXG5kaWRhY3RpY2FsbHlcXG5kaWRkbGUvRFJTWkdcXG5kaWRkbGVyL01cXG5kaWRkbHlcXG5kaWRkbHlzcXVhdFxcbmRpZGR1bXNcXG5kaWRnZXJpZG9vL1NcXG5kaWRuJ3RcXG5kaWRvL01cXG5kaWRvZXNcXG5kaWRzdFxcbmRpZS9EU01cXG5kaWVsZWN0cmljL01TXFxuZGllcmVzZXNcXG5kaWVyZXNpcy9NXFxuZGllc2VsL1NNREdcXG5kaWV0L01EUlpHU1xcbmRpZXRhcnkvU01cXG5kaWV0ZXIvTVxcbmRpZXRldGljL1NcXG5kaWV0ZXRpY3MvTVxcbmRpZXRpdGlhbi9NU1xcbmRpZmYvRFJaR1NcXG5kaWZmZXIvREdcXG5kaWZmZXJlbmNlL0lNXFxuZGlmZmVyZW5jZXNcXG5kaWZmZXJlbnQvSVlcXG5kaWZmZXJlbnRpYWJsZVxcbmRpZmZlcmVudGlhbC9TTVxcbmRpZmZlcmVudGlhdGUvRFNHTlxcbmRpZmZlcmVudGlhdGVkL1VcXG5kaWZmZXJlbnRpYXRpb24vTVxcbmRpZmZpY3VsdC9ZXFxuZGlmZmljdWx0eS9TTVxcbmRpZmZpZGVuY2UvTVxcbmRpZmZpZGVudC9ZXFxuZGlmZnJhY3QvR1NEXFxuZGlmZnJhY3Rpb24vTVxcbmRpZmZ1c2UvRFNZR05WUFxcbmRpZmZ1c2VuZXNzL01cXG5kaWZmdXNpb24vTVxcbmRpZmZ1c2l2aXR5XFxuZGlnL1NNXFxuZGlnZXJhdGkvTVxcbmRpZ2VzdC9TTURHVlxcbmRpZ2VzdGVkL1VcXG5kaWdlc3RpYmlsaXR5L01cXG5kaWdlc3RpYmxlL0lcXG5kaWdlc3Rpb24vSU1cXG5kaWdlc3Rpb25zXFxuZGlnZXN0aXZlL1NcXG5kaWdnZXIvU01cXG5kaWdnaW5nL1NcXG5kaWdnaW5ncy9NXFxuZGlnaWNhbS9TXFxuZGlnaXQvU01cXG5kaWdpdGFsL1lcXG5kaWdpdGFsaXMvTVxcbmRpZ2l0aXphdGlvblxcbmRpZ2l0aXplL0dEU1xcbmRpZ25pZmllZC9VXFxuZGlnbmlmeS9EU0dcXG5kaWduaXRhcnkvU01cXG5kaWduaXR5L0lTTVxcbmRpZ3JhcGgvTVxcbmRpZ3JhcGhzXFxuZGlncmVzcy9HVkRTXFxuZGlncmVzc2lvbi9NU1xcbmRpa2UvTUdEU1xcbmRpa3RhdC9TXFxuZGlsYXBpZGF0ZWRcXG5kaWxhcGlkYXRpb24vTVxcbmRpbGF0YXRpb24vTVxcbmRpbGF0ZS9EU0dOXFxuZGlsYXRpb24vTVxcbmRpbGF0b3IvU01cXG5kaWxhdG9yeVxcbmRpbGRvL1NcXG5kaWxlbW1hL01TXFxuZGlsZXR0YW50ZS9TTVxcbmRpbGV0dGFudGlzaFxcbmRpbGV0dGFudGlzbS9NXFxuZGlsaWdlbmNlL01cXG5kaWxpZ2VudC9ZXFxuZGlsbC9NU1xcbmRpbGx5L1NNXFxuZGlsbHlkYWxseS9EU0dcXG5kaWx1ZW50XFxuZGlsdXRlL0RTR05YXFxuZGlsdXRlZC9VXFxuZGlsdXRpb24vTVxcbmRpbS9QU1JZXFxuZGltZS9NU1xcbmRpbWVuc2lvbi9TTVxcbmRpbWVuc2lvbmFsXFxuZGltZW5zaW9ubGVzc1xcbmRpbWluaXNoL0dEU1xcbmRpbWluaXNoZWQvVVxcbmRpbWludWVuZG8vU01cXG5kaW1pbnV0aW9uL1NNXFxuZGltaW51dGl2ZS9TTVxcbmRpbWl0eS9NXFxuZGltbWVkL1VcXG5kaW1tZXIvU01cXG5kaW1tZXN0XFxuZGltbWluZ1xcbmRpbW5lc3MvTVxcbmRpbXBsZS9EU01HXFxuZGltcGx5XFxuZGltd2l0L1NNXFxuZGltd2l0dGVkXFxuZGluL1pHU01EUlxcbmRpbmFyL1NNXFxuZGluZS9TXFxuZGluZXIvTVxcbmRpbmV0dGUvTVNcXG5kaW5nL01ER1xcbmRpbmdiYXQvTVNcXG5kaW5naHkvU01cXG5kaW5naWx5XFxuZGluZ2luZXNzL01cXG5kaW5nbGUvU01cXG5kaW5nby9NXFxuZGluZ29lc1xcbmRpbmd1cy9NU1xcbmRpbmd5L1JQVFxcbmRpbmsvUlxcbmRpbmt5L1JTTVRcXG5kaW5uZWRcXG5kaW5uZXIvU01ER1xcbmRpbm5lcnRpbWUvTVxcbmRpbm5lcndhcmUvTVxcbmRpbm5pbmdcXG5kaW5vc2F1ci9TTVxcbmRpbnQvTVxcbmRpb2Nlc2FuL01TXFxuZGlvY2VzZS9NU1xcbmRpb2RlL1NNXFxuZGlvcmFtYS9TTVxcbmRpb3hpZGUvU01cXG5kaW94aW4vU01cXG5kaXAvU01cXG5kaXBodGhlcmlhL01cXG5kaXBodGhvbmcvU01cXG5kaXBsb2lkL1NNXFxuZGlwbG9tYS9TTVxcbmRpcGxvbWFjeS9NXFxuZGlwbG9tYXQvTVNcXG5kaXBsb21hdGFcXG5kaXBsb21hdGljL1VcXG5kaXBsb21hdGljYWxseVxcbmRpcGxvbWF0aXN0L01TXFxuZGlwbG9waWFcXG5kaXBvbGUvU01cXG5kaXBwZWRcXG5kaXBwZXIvU01cXG5kaXBwaW5nXFxuZGlwcHkvUlRcXG5kaXBzby9TXFxuZGlwc29tYW5pYS9NXFxuZGlwc29tYW5pYWMvTVNcXG5kaXBzdGljay9TTVxcbmRpcHRlcm91c1xcbmRpcHR5Y2gvTVxcbmRpcHR5Y2hzXFxuZGlyZS9ZVFJcXG5kaXJlY3QvQVNER1ZUXFxuZGlyZWN0ZXJcXG5kaXJlY3Rpb24vSU1cXG5kaXJlY3Rpb25hbFxcbmRpcmVjdGlvbmxlc3NcXG5kaXJlY3Rpb25zXFxuZGlyZWN0aXZlL1NNXFxuZGlyZWN0bHlcXG5kaXJlY3RuZXNzL0lNXFxuZGlyZWN0b3IvTVNcXG5kaXJlY3RvcmF0ZS9TTVxcbmRpcmVjdG9yaWFsXFxuZGlyZWN0b3JzaGlwL1NNXFxuZGlyZWN0b3J5L1NNXFxuZGlyZWZ1bFxcbmRpcmdlL1NNXFxuZGlyaWdpYmxlL01TXFxuZGlyay9NU1xcbmRpcm5kbC9TTVxcbmRpcnQvTVxcbmRpcnRiYWxsL1NcXG5kaXJ0aWx5XFxuZGlydGluZXNzL01cXG5kaXJ0eS9EUlNUR1BcXG5kaXMvTVxcbmRpc2FibGUvRFNHTFxcbmRpc2FibGVtZW50L01cXG5kaXNhbWJpZ3VhdGUvTlxcbmRpc2FwcG9pbnRpbmcvWVxcbmRpc2FybWluZy9ZXFxuZGlzYXNzZW1ibHlcXG5kaXNhc3Ryb3VzL1lcXG5kaXNiYW5kbWVudC9NXFxuZGlzYmFybWVudC9NXFxuZGlzYmVsaWV2aW5nL1lcXG5kaXNidXJzYWwvTVxcbmRpc2J1cnNlL0RTR0xcXG5kaXNidXJzZW1lbnQvTVNcXG5kaXNjL01cXG5kaXNjZXJuL0xTREdcXG5kaXNjZXJuaWJsZS9JXFxuZGlzY2VybmlibHlcXG5kaXNjZXJuaW5nL1lcXG5kaXNjZXJubWVudC9NXFxuZGlzY2hhcmdlZC9VXFxuZGlzY2lwbGUvU01cXG5kaXNjaXBsZXNoaXAvTVxcbmRpc2NpcGxpbmFyaWFuL1NNXFxuZGlzY2lwbGluYXJ5XFxuZGlzY2lwbGluZS9EU01HXFxuZGlzY2lwbGluZWQvVVxcbmRpc2Nsb3NlL0RTR1xcbmRpc2Nsb3NlZC9VXFxuZGlzY28vTUdcXG5kaXNjb2dyYXBoeS9TTVxcbmRpc2NvbG9yYXRpb24vU1xcbmRpc2NvbWJvYnVsYXRlL0RTR05cXG5kaXNjb21ib2J1bGF0aW9uL01cXG5kaXNjb21maXQvREdcXG5kaXNjb21maXR1cmUvTVxcbmRpc2NvbW1vZGUvREdcXG5kaXNjb25jZXJ0aW5nL1lcXG5kaXNjb25uZWN0ZWQvUFlcXG5kaXNjb25uZWN0ZWRuZXNzL01cXG5kaXNjb25zb2xhdGUvWVxcbmRpc2NvcmRhbmNlL01cXG5kaXNjb3JkYW50L1lcXG5kaXNjb3RoZXF1ZS9TTVxcbmRpc2NvdXJhZ2UvTEdEU1xcbmRpc2NvdXJhZ2VtZW50L1NNXFxuZGlzY291cmFnaW5nL1lcXG5kaXNjb3Zlci9BU0RHXFxuZGlzY292ZXJlZC9VXFxuZGlzY292ZXJlci9NU1xcbmRpc2NvdmVyeS9BU01cXG5kaXNjcmVldC9QUllUXFxuZGlzY3JlZXRuZXNzL01cXG5kaXNjcmVwYW5jeS9TTVxcbmRpc2NyZXBhbnRcXG5kaXNjcmV0ZS9QWU5cXG5kaXNjcmV0ZW5lc3MvTVxcbmRpc2NyZXRpb24vSU1cXG5kaXNjcmV0aW9uYXJ5XFxuZGlzY3JpbWluYW50XFxuZGlzY3JpbWluYXRlL0dORFNcXG5kaXNjcmltaW5hdGluZy9VXFxuZGlzY3JpbWluYXRpb24vTVxcbmRpc2NyaW1pbmF0b3IvTVNcXG5kaXNjcmltaW5hdG9yeVxcbmRpc2N1cnNpdmVuZXNzL01cXG5kaXNjdXMvTVNcXG5kaXNjdXNzYW50L1NNXFxuZGlzY3Vzc2lvbi9TTVxcbmRpc2RhaW4vU01ER1xcbmRpc2RhaW5mdWwvWVxcbmRpc2VtYm93ZWwvU0RMR1xcbmRpc2VtYm93ZWxtZW50L01cXG5kaXNmaWd1cmVtZW50L1NNXFxuZGlzZnJhbmNoaXNlbWVudC9NXFxuZGlzZ29yZ2VtZW50L01cXG5kaXNncnVudGxlL0xHRFNcXG5kaXNncnVudGxlbWVudC9NXFxuZGlzZ3Vpc2UvR0RcXG5kaXNndWlzZWQvVVxcbmRpc2d1c3RlZC9ZXFxuZGlzZ3VzdGluZy9ZXFxuZGlzaC9NRFNHXFxuZGlzaGFiaWxsZS9NXFxuZGlzaGFybW9uaW91c1xcbmRpc2hjbG90aC9NXFxuZGlzaGNsb3Roc1xcbmRpc2hlYXJ0ZW5pbmcvWVxcbmRpc2hldmVsL0RHTFNcXG5kaXNoZXZlbG1lbnQvTVxcbmRpc2hwYW4vU01cXG5kaXNocmFnL1NNXFxuZGlzaHRvd2VsL01TXFxuZGlzaHdhcmUvTVxcbmRpc2h3YXNoZXIvTVNcXG5kaXNod2F0ZXIvTVxcbmRpc2h5XFxuZGlzaWxsdXNpb24vR0xEXFxuZGlzaWxsdXNpb25tZW50L01cXG5kaXNpbmZlY3RhbnQvTVNcXG5kaXNpbmZlY3Rpb24vTVxcbmRpc2ludGVyZXN0ZWQvUFlcXG5kaXNpbnRlcmVzdGVkbmVzcy9NXFxuZGlzam9pbnRlZC9ZUFxcbmRpc2pvaW50ZWRuZXNzL01cXG5kaXNqdW5jdGl2ZVxcbmRpc2p1bmN0dXJlXFxuZGlzay9NU1xcbmRpc2tldHRlL01TXFxuZGlzbG9kZ2UvR0RTXFxuZGlzbWFsL1lcXG5kaXNtYW50bGVtZW50L01cXG5kaXNtYXkvU01ER1xcbmRpc21heWVkL1VcXG5kaXNtZW1iZXIvTEdEXFxuZGlzbWVtYmVybWVudC9NXFxuZGlzbWlzc2l2ZS9ZXFxuZGlzb3JkZXIvWVxcbmRpc29yZ2FuaXphdGlvbi9NXFxuZGlzcGFyYWdlL0RTR0xcXG5kaXNwYXJhZ2VtZW50L01cXG5kaXNwYXJhZ2luZy9ZXFxuZGlzcGFyYXRlL1lcXG5kaXNwYXRjaGVyL01TXFxuZGlzcGVsL1NcXG5kaXNwZWxsZWRcXG5kaXNwZWxsaW5nXFxuZGlzcGVuc2FyeS9TTVxcbmRpc3BlbnNhdGlvbi9NU1xcbmRpc3BlbnNlL0JaR0RSU1xcbmRpc3BlbnNlci9NXFxuZGlzcGVyc2FsL01cXG5kaXNwZXJzZS9HTkRTXFxuZGlzcGVyc2lvbi9NXFxuZGlzcGlyaXQvR0RTXFxuZGlzcGxlYXN1cmUvTVxcbmRpc3Bvc2FibGUvU01cXG5kaXNwb3NhbC9TTVxcbmRpc3Bvc2VkL0lcXG5kaXNwb3NpdGlvbi9JU01cXG5kaXNwb3NzZXNzaW9uL01cXG5kaXNwcm9vZi9TTVxcbmRpc3Byb3BvcnRpb25hbFxcbmRpc3Byb3ZlL0JcXG5kaXNwdXRhYmxlL0lcXG5kaXNwdXRhYmx5L0lcXG5kaXNwdXRhbnQvTVNcXG5kaXNwdXRhdGlvbi9TTVxcbmRpc3B1dGF0aW91cy9ZXFxuZGlzcHV0ZS9EUlNNWkdCXFxuZGlzcHV0ZWQvVVxcbmRpc3B1dGVyL01cXG5kaXNxdWlldC9HU01EXFxuZGlzcXVpc2l0aW9uL01TXFxuZGlzcmVnYXJkZnVsXFxuZGlzcmVwYWlyL01cXG5kaXNyZXB1dGUvTUJcXG5kaXNydXB0L0dWU0RcXG5kaXNydXB0aW9uL1NNXFxuZGlzcnVwdGl2ZS9ZXFxuZGlzc2VjdC9TREdcXG5kaXNzZWRcXG5kaXNzZW1ibGFuY2UvTVxcbmRpc3NlbWJsZS9aR0RSU1xcbmRpc3NlbWJsZXIvTVxcbmRpc3NlbWluYXRlL0dORFNcXG5kaXNzZW1pbmF0aW9uL01cXG5kaXNzZW5zaW9uL1NNXFxuZGlzc2VudC9TTURSWkdcXG5kaXNzZW50ZXIvTVxcbmRpc3NlcnRhdGlvbi9TTVxcbmRpc3Nlc1xcbmRpc3NpZGVuY2UvTVxcbmRpc3NpZGVudC9NU1xcbmRpc3NpbWlsYXJcXG5kaXNzaW1pbGl0dWRlL1NcXG5kaXNzaW5nXFxuZGlzc2lwYXRlL0dORFNcXG5kaXNzaXBhdGlvbi9NXFxuZGlzc29jaWF0ZS9HTlZEU1xcbmRpc3NvY2lhdGlvbi9NXFxuZGlzc29sdWJsZS9JXFxuZGlzc29sdXRlL1lOUFxcbmRpc3NvbHV0ZW5lc3MvTVxcbmRpc3NvbHZlL0FHRFNcXG5kaXNzb2x2ZWQvVVxcbmRpc3NvbmFuY2UvU01cXG5kaXNzb25hbnRcXG5kaXNzdWFkZS9HRFNcXG5kaXNzdWFzaXZlXFxuZGlzdFxcbmRpc3RhZmYvU01cXG5kaXN0YWwvWVxcbmRpc3RhbmNlL0RTTUdcXG5kaXN0YW50L1lcXG5kaXN0YXN0ZS9TTVxcbmRpc3RlbXBlci9NXFxuZGlzdGVudGlvbi9TTVxcbmRpc3RpbGxhdGUvU01OWFxcbmRpc3RpbGxhdGlvbi9NXFxuZGlzdGlsbGVyeS9TTVxcbmRpc3RpbmN0L0lZVFZQXFxuZGlzdGluY3RlclxcbmRpc3RpbmN0aW9uL1NNXFxuZGlzdGluY3RpdmUvWVBcXG5kaXN0aW5jdGl2ZW5lc3MvTVxcbmRpc3RpbmN0bmVzcy9JTVxcbmRpc3Rpbmd1aXNoL0dEU0JcXG5kaXN0aW5ndWlzaGFibGUvSVxcbmRpc3Rpbmd1aXNoZWQvVVxcbmRpc3RvcnQvR0RSXFxuZGlzdG9ydGlvbi9NU1xcbmRpc3RyYWN0L0RHXFxuZGlzdHJhY3RlZC9ZXFxuZGlzdHJhY3Rpb24vU1xcbmRpc3RyYWl0XFxuZGlzdHJhdWdodFxcbmRpc3RyZXNzL0RHXFxuZGlzdHJlc3NmdWxcXG5kaXN0cmVzc2luZy9ZXFxuZGlzdHJpYnV0ZS9BR05WRFNcXG5kaXN0cmlidXRlZC9VXFxuZGlzdHJpYnV0aW9uL0FNXFxuZGlzdHJpYnV0aW9uYWxcXG5kaXN0cmlidXRpb25zXFxuZGlzdHJpYnV0aXZlL1lcXG5kaXN0cmlidXRvcidzXFxuZGlzdHJpYnV0b3IvQVNcXG5kaXN0cmlidXRvcnNoaXAvU1xcbmRpc3RyaWN0J3NcXG5kaXN0cmljdC9BU1xcbmRpc3R1cmIvWkdTRFJcXG5kaXN0dXJiYW5jZS9TTVxcbmRpc3R1cmJlZC9VXFxuZGlzdHVyYmVyL01cXG5kaXN0dXJiaW5nL1lcXG5kaXN1bmlvbi9NXFxuZGlzeWxsYWJpY1xcbmRpdGNoL01EU0dcXG5kaXRoZXIvU01EUlpHXFxuZGl0aGVyZXIvTVxcbmRpdHJhbnNpdGl2ZVxcbmRpdHN5XFxuZGl0dG8vU01ER1xcbmRpdHR5L1NNXFxuZGl0ei9NU1xcbmRpdXJldGljL01TXFxuZGl1cm5hbC9ZXFxuZGl2XFxuZGl2YS9NU1xcbmRpdmFsZW50XFxuZGl2YW4vU01cXG5kaXZlL01aVEdEUlNcXG5kaXZlci9NXFxuZGl2ZXJnZS9EU0dcXG5kaXZlcmdlbmNlL01TXFxuZGl2ZXJnZW50XFxuZGl2ZXJzZS9YWU5QXFxuZGl2ZXJzZW5lc3MvTVxcbmRpdmVyc2lmaWNhdGlvbi9NXFxuZGl2ZXJzaWZ5L0dORFNcXG5kaXZlcnNpb24vTVxcbmRpdmVyc2lvbmFyeVxcbmRpdmVyc2l0eS9TTVxcbmRpdmVydC9TREdcXG5kaXZlcnRpY3VsaXRpcy9NXFxuZGl2ZXN0L1NMREdcXG5kaXZlc3RpdHVyZS9NU1xcbmRpdmVzdG1lbnQvTVxcbmRpdmlkZS9EUlNNWkdCXFxuZGl2aWRlZC9VXFxuZGl2aWRlbmQvTVNcXG5kaXZpZGVyL01cXG5kaXZpbmF0aW9uL01cXG5kaXZpbmUvRFJTTVlaVEdcXG5kaXZpbmVyL01cXG5kaXZpbmcvTVxcbmRpdmluaXR5L1NNXFxuZGl2aXNpYmlsaXR5L0lNXFxuZGl2aXNpYmxlL0lcXG5kaXZpc2lvbi9NU1xcbmRpdmlzaW9uYWxcXG5kaXZpc2l2ZS9QWVxcbmRpdmlzaXZlbmVzcy9NXFxuZGl2aXNvci9TTVxcbmRpdm9yY2UvRFNMTUdcXG5kaXZvcmNlZS9NU1xcbmRpdm9yY2VtZW50L01TXFxuZGl2b3QvU01cXG5kaXZ1bGdlL0dEU1xcbmRpdnZ5L0RTTUdcXG5kaXhpZWxhbmQvTVxcbmRpenppbHlcXG5kaXp6aW5lc3MvTVxcbmRpenp5L0RSU1BUR1xcbmRqZWxsYWJhL01TXFxuZG8vU0pNUkhaR1xcbmRvYWJsZVxcbmRvYi9TXFxuZG9iYmVkXFxuZG9iYmluL1NNXFxuZG9iYmluZ1xcbmRvYmVybWFuL01TXFxuZG9icm9cXG5kb2MvU01cXG5kb2NlbnQvU01cXG5kb2NpbGUvWVxcbmRvY2lsaXR5L01cXG5kb2NrL01EUlpHU1xcbmRvY2tldC9TTURHXFxuZG9ja2xhbmQvU1xcbmRvY2tzaWRlXFxuZG9ja3dvcmtlci9NU1xcbmRvY2t5YXJkL01TXFxuZG9jdG9yL1NNREdcXG5kb2N0b3JhbFxcbmRvY3RvcmF0ZS9NU1xcbmRvY3RyaW5haXJlL01TXFxuZG9jdHJpbmFsXFxuZG9jdHJpbmUvTVNcXG5kb2N1ZHJhbWEvU01cXG5kb2N1bWVudC9HTURTXFxuZG9jdW1lbnRhcnkvU01cXG5kb2N1bWVudGF0aW9uL1NNXFxuZG9jdW1lbnRlZC9VXFxuZG9kZGVyL1NNREdcXG5kb2RkZXJ5XFxuZG9kZGxlXFxuZG9kZ2UvRFJTTVpHXFxuZG9kZ2VtL1NcXG5kb2RnZXIvTVxcbmRvZGd5L1JUXFxuZG9kby9NU1xcbmRvZS9TTVxcbmRvZXIvTVxcbmRvZXMvQVVcXG5kb2Vza2luL01TXFxuZG9lc24ndFxcbmRvZmYvREdTXFxuZG9nL1NNXFxuZG9nY2FydC9TTVxcbmRvZ2NhdGNoZXIvU01cXG5kb2dlL01TXFxuZG9nZWFyZWRcXG5kb2dmaWdodC9TTVxcbmRvZ2Zpc2gvTVNcXG5kb2dnZWQvUFlcXG5kb2dnZWRuZXNzL01cXG5kb2dnZXJlbC9NXFxuZG9nZ2luZ1xcbmRvZ2dvbmUvVEdSU1xcbmRvZ2d5L1JTTVRcXG5kb2dob3VzZS9TTVxcbmRvZ2llL1NNXFxuZG9nbGVnL1NNXFxuZG9nbGVnZ2VkXFxuZG9nbGVnZ2luZ1xcbmRvZ2xpa2VcXG5kb2dtYS9TTVxcbmRvZ21hdGljXFxuZG9nbWF0aWNhbGx5XFxuZG9nbWF0aXNtL01cXG5kb2dtYXRpc3QvU01cXG5kb2duYXBwZXJcXG5kb2dzYm9keS9TXFxuZG9nc2xlZC9TXFxuZG9ndHJvdC9NU1xcbmRvZ3Ryb3R0ZWRcXG5kb2d0cm90dGluZ1xcbmRvZ3dvb2QvTVNcXG5kb2lseS9TTVxcbmRvaW5nL1VTTVxcbmRvbGRydW1zL01cXG5kb2xlJ3NcXG5kb2xlL0ZHRFNcXG5kb2xlZnVsL1lQXFxuZG9sZWZ1bG5lc3MvTVxcbmRvbGwvTURHU1xcbmRvbGxhci9TTVxcbmRvbGxob3VzZS9TTVxcbmRvbGxvcC9TR01EXFxuZG9sbHkvU01cXG5kb2xtZW4vU01cXG5kb2xvbWl0ZS9NXFxuZG9sb3IvTVxcbmRvbG9yb3VzL1lcXG5kb2xwaGluL01TXFxuZG9sdC9NU1xcbmRvbHRpc2gvWVBcXG5kb2x0aXNobmVzcy9NXFxuZG9tYWluL1NNXFxuZG9tZS9NR0RTXFxuZG9tZXN0aWMvU01cXG5kb21lc3RpY2FsbHlcXG5kb21lc3RpY2F0ZS9EU0dOXFxuZG9tZXN0aWNhdGVkL1VcXG5kb21lc3RpY2F0aW9uL01cXG5kb21lc3RpY2l0eS9NXFxuZG9taWNpbGUvRFNNR1xcbmRvbWljaWxpYXJ5XFxuZG9taW5hbmNlL01cXG5kb21pbmFudC9TTVlcXG5kb21pbmF0ZS9EU0dOXFxuZG9taW5hdGlvbi9NXFxuZG9taW5hdHJpY2VzXFxuZG9taW5hdHJpeC9NXFxuZG9taW5lZXIvU0dEXFxuZG9taW5lZXJpbmcvWVxcbmRvbWluaW9uL1NNXFxuZG9taW5vL01cXG5kb21pbm9lc1xcbmRvbid0XFxuZG9uL1NNXFxuZG9uYS9NU1xcbmRvbmF0ZS9EU1hHTlxcbmRvbmF0aW9uL01cXG5kb25lL0ZBVVxcbmRvbmcvTURHU1xcbmRvbmdsZS9TTVxcbmRvbmtleS9TTVxcbmRvbm5lZFxcbmRvbm5pbmdcXG5kb25uaXNoXFxuZG9ubnlicm9vay9NU1xcbmRvbm9yL1NNXFxuZG9udXRzXFxuZG9vZGFkL1NNXFxuZG9vZGFoXFxuZG9vZGFoc1xcbmRvb2RsZS9EUlNNWkdcXG5kb29kbGVidWcvU01cXG5kb29kbGVyL01cXG5kb29oaWNrZXkvU01cXG5kb29sYWxseVxcbmRvb20vTURHU1xcbmRvb21zYXllci9NU1xcbmRvb21zZGF5L01cXG5kb29tc3Rlci9TXFxuZG9vcidzXFxuZG9vci9JU1xcbmRvb3JiZWxsL01TXFxuZG9vcmphbWIvU1xcbmRvb3JrZWVwZXIvTVNcXG5kb29ya25vYi9NU1xcbmRvb3Jrbm9ja2VyL1NcXG5kb29ybWFuL01cXG5kb29ybWF0L1NNXFxuZG9vcm1lblxcbmRvb3JwbGF0ZS9TTVxcbmRvb3Jwb3N0L1NcXG5kb29yc3RlcC9NU1xcbmRvb3JzdGVwcGVkXFxuZG9vcnN0ZXBwaW5nXFxuZG9vcnN0b3AvTVNcXG5kb29yd2F5L1NNXFxuZG9vcnlhcmQvTVNcXG5kb3BhL01cXG5kb3BhbWluZVxcbmRvcGUvTVpHRFJTXFxuZG9wZXIvTVxcbmRvcGV5XFxuZG9waWVyXFxuZG9waWVzdFxcbmRvcGluZXNzL01cXG5kb3BpbmcvTVxcbmRvcHBlbGdhbmdlci9TXFxuZG9yay9NU1xcbmRvcmt5L1JUXFxuZG9ybS9NUlpTXFxuZG9ybWFuY3kvTVxcbmRvcm1hbnRcXG5kb3JtZXIvTVxcbmRvcm1pY2VcXG5kb3JtaXRvcnkvU01cXG5kb3Jtb3VzZS9NXFxuZG9yc2FsL1lcXG5kb3J5L1NNXFxuZG9zYWdlL1NNXFxuZG9zZS9NR0RTXFxuZG9zaFxcbmRvc2ltZXRlci9TTVxcbmRvc3MvRFJTWkdcXG5kb3NzaG91c2UvU1xcbmRvc3NpZXIvTVNcXG5kb3N0XFxuZG90L1pHU01EUlxcbmRvdGFnZS9NXFxuZG90YXJkL1NNXFxuZG90Y29tL1NNXFxuZG90ZS9TXFxuZG90ZXIvTVxcbmRvdGluZy9ZXFxuZG90dGVkXFxuZG90dGluZ1xcbmRvdHR5L1JUXFxuZG91YmxlJ3NcXG5kb3VibGUvQURTR1xcbmRvdWJsZWhlYWRlci9NU1xcbmRvdWJsZXNwZWFrL01cXG5kb3VibGV0L01TXFxuZG91Ymxvb24vU01cXG5kb3VibHlcXG5kb3VidC9TTURSWkdcXG5kb3VidGVyL01cXG5kb3VidGZ1bC9QWVxcbmRvdWJ0ZnVsbmVzcy9NXFxuZG91YnRpbmcvWVxcbmRvdWJ0bGVzcy9ZXFxuZG91Y2hlL0RTTUdcXG5kb3VnaC9NXFxuZG91Z2hudXQvU01cXG5kb3VnaHR5L1JUXFxuZG91Z2h5L1RSXFxuZG91ci9SWVRQXFxuZG91cm5lc3MvTVxcbmRvdXNlL0RTR1xcbmRvdmUvTVNcXG5kb3ZlY290L1NcXG5kb3ZlY290ZS9TTVxcbmRvdmV0YWlsL01EU0dcXG5kb3Zpc2hcXG5kb3dhZ2VyL01TXFxuZG93ZGlseVxcbmRvd2RpbmVzcy9NXFxuZG93ZHkvUlNQVFxcbmRvd2VsL1NNREdcXG5kb3dlci9TTURHXFxuZG93bi9NRFJaR1NcXG5kb3duYmVhdC9TTVxcbmRvd25jYXN0XFxuZG93bmRyYWZ0L01TXFxuZG93bmVyL01cXG5kb3duZmFsbC9TTU5cXG5kb3duZmllbGRcXG5kb3duZ3JhZGUvRFNNR1xcbmRvd25oZWFydGVkL1BZXFxuZG93bmhlYXJ0ZWRuZXNzL01cXG5kb3duaGlsbC9NU1xcbmRvd25sb2FkL01EQlNHXFxuZG93bm1hcmtldFxcbmRvd25wbGF5L0RTR1xcbmRvd25wb3VyL01TXFxuZG93bnJhbmdlXFxuZG93bnJpZ2h0XFxuZG93bnJpdmVyXFxuZG93bnNjYWxlXFxuZG93bnNoaWZ0L1NHRFxcbmRvd25zaWRlL01TXFxuZG93bnNpemUvR0RTXFxuZG93bnNpemluZy9NXFxuZG93bnNwb3V0L01TXFxuZG93bnN0YWdlXFxuZG93bnN0YWlycy9NXFxuZG93bnN0YXRlL01cXG5kb3duc3RyZWFtXFxuZG93bnN3aW5nL01TXFxuZG93bnRlbXBvXFxuZG93bnRpbWUvTVxcbmRvd250b3duL01cXG5kb3dudHJlbmQvTVNcXG5kb3dudHJvZGRlblxcbmRvd250dXJuL01TXFxuZG93bndhcmQvU1xcbmRvd253aW5kXFxuZG93bnkvUlRcXG5kb3dyeS9TTVxcbmRvd3NlL0RSU1pHXFxuZG93c2VyL01cXG5kb3hvbG9neS9TTVxcbmRveWVuL1NNXFxuZG95ZW5uZS9NU1xcbmRvei9YR0ROU1xcbmRvemUvTVxcbmRvemVuL01IXFxuZG96aWx5XFxuZG96eS9SVFBcXG5kcGlcXG5kcHRcXG5kcmFiL01ZU1BcXG5kcmFiYmVyXFxuZHJhYmJlc3RcXG5kcmFibmVzcy9NXFxuZHJhY2htYS9NU1xcbmRyYWNvbmlhblxcbmRyYWZ0J3NcXG5kcmFmdC9BU0RHXFxuZHJhZnRlZS9TTVxcbmRyYWZ0ZXIvU01cXG5kcmFmdGlseVxcbmRyYWZ0aW5lc3MvTVxcbmRyYWZ0aW5nL01cXG5kcmFmdHNtYW4vTVxcbmRyYWZ0c21hbnNoaXAvTVxcbmRyYWZ0c21lblxcbmRyYWZ0c3dvbWFuL01cXG5kcmFmdHN3b21lblxcbmRyYWZ0eS9SVFBcXG5kcmFnL01TXFxuZHJhZ2dlZFxcbmRyYWdnaW5nXFxuZHJhZ2d5L1RSXFxuZHJhZ25ldC9TTVxcbmRyYWdvbi9TTVxcbmRyYWdvbmZseS9TTVxcbmRyYWdvb24vU01ER1xcbmRyYWdzdGVyL1NcXG5kcmFpbi9TTURSWkdcXG5kcmFpbmFnZS9NXFxuZHJhaW5ib2FyZC9TTVxcbmRyYWluZXIvTVxcbmRyYWlucGlwZS9NU1xcbmRyYWtlL1NNXFxuZHJhbS9NU1xcbmRyYW1hL1NNXFxuZHJhbWF0aWMvU1xcbmRyYW1hdGljYWxseVxcbmRyYW1hdGljcy9NXFxuZHJhbWF0aXN0L1NNXFxuZHJhbWF0aXphdGlvbi9TTVxcbmRyYW1hdGl6ZS9EU0dcXG5kcmFua1xcbmRyYXBlL0RSU01aR1xcbmRyYXBlci9NXFxuZHJhcGVyeS9TTVxcbmRyYXN0aWNcXG5kcmFzdGljYWxseVxcbmRyYXRcXG5kcmF0dGVkXFxuZHJhdWdodGJvYXJkL1NcXG5kcmF3L01SWkdTSlxcbmRyYXdiYWNrL01TXFxuZHJhd2JyaWRnZS9NU1xcbmRyYXdlci9NXFxuZHJhd2luZy9NXFxuZHJhd2wvU01ER1xcbmRyYXduL0FcXG5kcmF3c3RyaW5nL01TXFxuZHJheS9NU1xcbmRyZWFkL1NNREdcXG5kcmVhZGZ1bC9QWVxcbmRyZWFkZnVsbmVzcy9NXFxuZHJlYWRsb2Nrcy9NXFxuZHJlYWRub3VnaHQvTVNcXG5kcmVhbS9TTURSWkdcXG5kcmVhbWJvYXQvTVNcXG5kcmVhbWVkL1VcXG5kcmVhbWVyL01cXG5kcmVhbWlseVxcbmRyZWFtaW5lc3MvTVxcbmRyZWFtbGFuZC9NXFxuZHJlYW1sZXNzXFxuZHJlYW1saWtlXFxuZHJlYW13b3JsZC9TTVxcbmRyZWFteS9SUFRcXG5kcmVhclxcbmRyZWFyaWx5XFxuZHJlYXJpbmVzcy9NXFxuZHJlYXJ5L1JQVFxcbmRyZWRnZS9EUlNNWkdcXG5kcmVkZ2VyL01cXG5kcmVncy9NXFxuZHJlbmNoL0dEU1xcbmRyZXNzL0FVR1NETVxcbmRyZXNzYWdlL01cXG5kcmVzc2VyL01TXFxuZHJlc3NpbmVzcy9NXFxuZHJlc3NpbmcvU01cXG5kcmVzc21ha2VyL1NNXFxuZHJlc3NtYWtpbmcvTVxcbmRyZXNzeS9UUFJcXG5kcmV3L0FcXG5kcmliYmxlL01aR0RSU1xcbmRyaWJibGVyL01cXG5kcmlibGV0L01TXFxuZHJpZXIvTVxcbmRyaWZ0L1NNRFJaR1xcbmRyaWZ0ZXIvTVxcbmRyaWZ0bmV0L1NcXG5kcmlmdHdvb2QvTVxcbmRyaWxsL1NNRFJaR1xcbmRyaWxsZXIvTVxcbmRyaWxsbWFzdGVyL1NNXFxuZHJpbmsvU01SQkpaR1xcbmRyaW5rYWJsZS9VXFxuZHJpbmtlci9NXFxuZHJpcC9NU1xcbmRyaXBwZWRcXG5kcmlwcGluZy9TTVxcbmRyaXBweS9UUlxcbmRyaXZlL1JTTVpHSlxcbmRyaXZlbC9TWkdNRFJcXG5kcml2ZWxlci9NXFxuZHJpdmVuXFxuZHJpdmVyL01cXG5kcml2ZXNoYWZ0L1NNXFxuZHJpdmV3YXkvTVNcXG5kcml6emxlL01HRFNcXG5kcml6emx5XFxuZHJvZ3VlL1NNXFxuZHJvaWQvU1xcbmRyb2xsL1JQVFxcbmRyb2xsZXJ5L1NNXFxuZHJvbGxuZXNzL01cXG5kcm9sbHlcXG5kcm9tZWRhcnkvU01cXG5kcm9uZS9EU01HXFxuZHJvb2wvU01ER1xcbmRyb29wL0dTTURcXG5kcm9vcGluZXNzL01cXG5kcm9vcHkvVFBSXFxuZHJvcC9NU1xcbmRyb3BraWNrL01TXFxuZHJvcGxldC9TTVxcbmRyb3BvdXQvU01cXG5kcm9wcGVkXFxuZHJvcHBlci9TTVxcbmRyb3BwaW5nL1NcXG5kcm9wcGluZ3MvTVxcbmRyb3BzaWNhbFxcbmRyb3BzeS9NXFxuZHJvc3MvTVxcbmRyb3VnaHQvU01cXG5kcm92ZS9SU01aXFxuZHJvdmVyL01cXG5kcm93bi9HU0pEXFxuZHJvd25pbmcvTVxcbmRyb3dzZS9NR0RTXFxuZHJvd3NpbHlcXG5kcm93c2luZXNzL01cXG5kcm93c3kvUlRQXFxuZHJ1Yi9TXFxuZHJ1YmJlZFxcbmRydWJiZXIvU01cXG5kcnViYmluZy9NU1xcbmRydWRnZS9NR0RTXFxuZHJ1ZGdlcnkvTVxcbmRydWcvTVNcXG5kcnVnZ2VkXFxuZHJ1Z2dpZS9TTVxcbmRydWdnaW5nXFxuZHJ1Z2dpc3QvU01cXG5kcnVnZ3lcXG5kcnVnc3RvcmUvTVNcXG5kcnVpZC9TTVxcbmRydWlkaXNtL01cXG5kcnVtL01TXFxuZHJ1bWJlYXQvU01cXG5kcnVtbGluL1NNXFxuZHJ1bW1lZFxcbmRydW1tZXIvU01cXG5kcnVtbWluZ1xcbmRydW1zdGljay9TTVxcbmRydW5rL1NUTU5SXFxuZHJ1bmthcmQvTVNcXG5kcnVua2VuL1BZXFxuZHJ1bmtlbm5lc3MvTVxcbmRydXBlL1NNXFxuZHJ1dGhlcnMvTVxcbmRyeS9aVEdEUlNNWVxcbmRyeWFkL1NNXFxuZHJ5ZXIvU01cXG5kcnluZXNzL01cXG5kcnlzXFxuZHJ5d2FsbC9NXFxuZHVhbFxcbmR1YWxpc20vTVxcbmR1YWxpdHkvTVxcbmR1Yi9TTVxcbmR1YmJlZFxcbmR1YmJlci9TTVxcbmR1YmJpbi9NXFxuZHViYmluZ1xcbmR1YmlldHkvTVxcbmR1YmlvdXMvWVBcXG5kdWJpb3VzbmVzcy9NXFxuZHVjYWxcXG5kdWNhdC9TTVxcbmR1Y2hlc3MvTVNcXG5kdWNoeS9TTVxcbmR1Y2svTURHU1xcbmR1Y2tiaWxsL1NNXFxuZHVja2JvYXJkc1xcbmR1Y2tsaW5nL1NNXFxuZHVja3BpbnMvTVxcbmR1Y2t3ZWVkL01cXG5kdWNreS9UUlNNXFxuZHVjdCdzL0tcXG5kdWN0L0NLSUZTXFxuZHVjdGlsZVxcbmR1Y3RpbGl0eS9NXFxuZHVjdGluZ1xcbmR1Y3RsZXNzXFxuZHVkL0dTTURcXG5kdWRlL01TXFxuZHVkZ2Vvbi9NXFxuZHVlL1NNXFxuZHVlbC9NRFJKWkdTXFxuZHVlbGVyL01cXG5kdWVsaXN0L1NNXFxuZHVlbm5hL01TXFxuZHVldC9NU1xcbmR1ZmYvTURSWkdTXFxuZHVmZmVyL01cXG5kdWdcXG5kdWdvdXQvTVNcXG5kdWhcXG5kdWtlL01TXFxuZHVrZWRvbS9TTVxcbmR1bGNldFxcbmR1bGNpbWVyL01TXFxuZHVsbC9EUlBUR1NcXG5kdWxsYXJkL1NNXFxuZHVsbG5lc3MvTVxcbmR1bGx5XFxuZHVseS9VXFxuZHVtYi9SWVBUXFxuZHVtYmJlbGwvU01cXG5kdW1iZm91bmQvU0RHXFxuZHVtYm5lc3MvTVxcbmR1bWJvL1NcXG5kdW1ic3RydWNrXFxuZHVtYndhaXRlci9TTVxcbmR1bWR1bS9NU1xcbmR1bW15L1NNXFxuZHVtcC9NRFJaR1NcXG5kdW1waW5lc3MvTVxcbmR1bXBsaW5nL1NNXFxuZHVtcHNpdGUvU1xcbmR1bXBzdGVyL1NNXFxuZHVtcHkvUFRSXFxuZHVuL1NNXFxuZHVuY2UvU01cXG5kdW5kZXJoZWFkL01TXFxuZHVuZS9NU1xcbmR1bmcvTURHU1xcbmR1bmdhcmVlL01TXFxuZHVuZ2Vvbi9TTVxcbmR1bmdoaWxsL01TXFxuZHVuay9NREdTXFxuZHVubmVkXFxuZHVubmVyXFxuZHVubmVzdFxcbmR1bm5pbmdcXG5kdW5ub1xcbmR1by9TTVxcbmR1b2RlY2ltYWxcXG5kdW9kZW5hXFxuZHVvZGVuYWxcXG5kdW9kZW51bS9NXFxuZHVvcG9seS9TXFxuZHVwZS9NWkdEUlNcXG5kdXBlci9NXFxuZHVwbGVcXG5kdXBsZXgvTVNcXG5kdXBsaWNhdGUnc1xcbmR1cGxpY2F0ZS9BR05EU1xcbmR1cGxpY2F0aW9uL0FNXFxuZHVwbGljYXRvci9NU1xcbmR1cGxpY2l0b3VzXFxuZHVwbGljaXR5L01cXG5kdXJhYmlsaXR5L01cXG5kdXJhYmxlXFxuZHVyYWJseVxcbmR1cmFuY2UvTVxcbmR1cmF0aW9uL01cXG5kdXJlc3MvTVxcbmR1cmluZ1xcbmR1cnN0XFxuZHVydW0vTVxcbmR1c2svTVxcbmR1c2tpbmVzcy9NXFxuZHVza3kvUlRQXFxuZHVzdC9NRFJaR1NcXG5kdXN0YmluL1NNXFxuZHVzdGNhcnQvU1xcbmR1c3Rlci9NXFxuZHVzdGluZXNzL01cXG5kdXN0bGVzc1xcbmR1c3RtYW5cXG5kdXN0bWVuXFxuZHVzdHBhbi9TTVxcbmR1c3RzaGVldC9TXFxuZHVzdHkvUlRQXFxuZHV0Y2hcXG5kdXRlb3VzL1lcXG5kdXRpYWJsZVxcbmR1dGlmdWwvWVBcXG5kdXRpZnVsbmVzcy9NXFxuZHV0eS9TTVxcbmR1dmV0L1NNXFxuZHdhcmYvU0dNRFxcbmR3YXJmaXNoXFxuZHdhcmZpc20vTVxcbmR3ZWViL1NNXFxuZHdlbGwvU0paR1JcXG5kd2VsbGVyL01cXG5kd2VsbGluZy9NXFxuZHdlbHQvSVxcbmR3aW5kbGUvRFNHXFxuZHlhZGljXFxuZHliYnVrL1NNXFxuZHliYnVraW1cXG5keWUvRFJTTVpHXFxuZHllaW5nL0FcXG5keWVyL01cXG5keWVzdHVmZi9NXFxuZHlpbmcvTVxcbmR5a2UvTVNcXG5keW5hbWljL01TXFxuZHluYW1pY2FsL1lcXG5keW5hbWljcy9NXFxuZHluYW1pc20vTVxcbmR5bmFtaXRlL01aR0RSU1xcbmR5bmFtaXRlci9NXFxuZHluYW1vL1NNXFxuZHluYXN0aWNcXG5keW5hc3R5L1NNXFxuZHlzZW50ZXJ5L01cXG5keXNmdW5jdGlvbi9NU1xcbmR5c2Z1bmN0aW9uYWxcXG5keXNsZWN0aWMvU01cXG5keXNsZXhpYS9NXFxuZHlzbGV4aWMvU01cXG5keXNwZXBzaWEvTVxcbmR5c3BlcHRpYy9NU1xcbmR5c3BoYWdpYVxcbmR5c3Bob3JpYVxcbmR5c3Bob3JpY1xcbmR5c3Byb3NpdW0vTVxcbmR5c3RvbmlhXFxuZHlzdG9waVxcbmR5c3RvcGlhXFxuZHlzdG9waWFuXFxuZHpcXG5lJ2VuXFxuZSdlclxcbmUvRkRTVFxcbmVCYXkvTVxcbmVNdXNpYy9NXFxuZWFcXG5lYWNoXFxuZWFnZXIvUFRSWVxcbmVhZ2VybmVzcy9NXFxuZWFnbGUvTVNcXG5lYWdsZXQvTVNcXG5lYXIvU01EWVxcbmVhcmFjaGUvU01cXG5lYXJidWQvU01cXG5lYXJkcnVtL1NNXFxuZWFyZnVsL1NNXFxuZWFybC9NU1xcbmVhcmxkb20vU01cXG5lYXJsaW5lc3MvTVxcbmVhcmxvYmUvU01cXG5lYXJseS9SVFBcXG5lYXJtYXJrL1NNREdcXG5lYXJtdWZmL1NNXFxuZWFybi9EUlpUR0pTXFxuZWFybmVkL1VcXG5lYXJuZXIvTVxcbmVhcm5lc3QvU01ZUFxcbmVhcm5lc3RuZXNzL01cXG5lYXJuaW5ncy9NXFxuZWFycGhvbmUvTVNcXG5lYXJwaWVjZS9TXFxuZWFycGx1Zy9TTVxcbmVhcnJpbmcvU01cXG5lYXJzaG90L01cXG5lYXJzcGxpdHRpbmdcXG5lYXJ0aCdzXFxuZWFydGgvVURZR1xcbmVhcnRoYm91bmRcXG5lYXJ0aGVuXFxuZWFydGhlbndhcmUvTVxcbmVhcnRoaW5lc3MvTVxcbmVhcnRobGluZy9NU1xcbmVhcnRobHkvUlRcXG5lYXJ0aHF1YWtlL1NNXFxuZWFydGhzL1VcXG5lYXJ0aHNoYWtpbmdcXG5lYXJ0aHdhcmQvU1xcbmVhcnRod29yay9NU1xcbmVhcnRod29ybS9NU1xcbmVhcnRoeS9SVFBcXG5lYXJ3YXgvTVxcbmVhcndpZy9TTVxcbmVhc2UvRURTTVxcbmVhc2VsL1NNXFxuZWFzZW1lbnQvU01cXG5lYXNpbHkvVVxcbmVhc2luZXNzL1VNXFxuZWFzaW5nXFxuZWFzdC9NXFxuZWFzdGJvdW5kXFxuZWFzdGVybHkvU01cXG5lYXN0ZXJuL1pSXFxuZWFzdGVybmVyL01cXG5lYXN0ZXJubW9zdFxcbmVhc3R3YXJkL1NcXG5lYXN5L1VSVFBcXG5lYXN5Z29pbmdcXG5lYXQvWkdCU05SXFxuZWF0YWJsZS9TTVxcbmVhdGVuL1VcXG5lYXRlci9NXFxuZWF0ZXJ5L1NNXFxuZWF2ZS9NU1xcbmVhdmVzZHJvcC9TXFxuZWF2ZXNkcm9wcGVkXFxuZWF2ZXNkcm9wcGVyL1NNXFxuZWF2ZXNkcm9wcGluZ1xcbmViYi9TTURHXFxuZWJvbnkvU01cXG5lYnVsbGllbmNlL01cXG5lYnVsbGllbnQvWVxcbmVidWxsaXRpb24vTVxcbmVjY2VudHJpYy9TTVxcbmVjY2VudHJpY2FsbHlcXG5lY2NlbnRyaWNpdHkvU01cXG5lY2NsXFxuZWNjbGVzaWFsXFxuZWNjbGVzaWFzdGljL1NNXFxuZWNjbGVzaWFzdGljYWwvWVxcbmVjaGVsb24vU01cXG5lY2hpZG5hXFxuZWNoaW5vZGVybS9TTVxcbmVjaG8nc1xcbmVjaG8vQURHXFxuZWNob2VzL0FcXG5lY2hvaWNcXG5lY2hvbG9jYXRpb24vTVxcbmVjaG9zXFxuZWNsYWlyL1NNXFxuZWNsYXQvTVxcbmVjbGVjdGljL1NNXFxuZWNsZWN0aWNhbGx5XFxuZWNsZWN0aWNpc20vTVxcbmVjbGlwc2UvRFNNR1xcbmVjbGlwdGljL01cXG5lY2xvZ3VlL1NNXFxuZWNvY2lkZS9NXFxuZWNvbFxcbmVjb2xvZ2ljXFxuZWNvbG9naWNhbC9ZXFxuZWNvbG9naXN0L01TXFxuZWNvbG9neS9NXFxuZWNvblxcbmVjb25vbWV0cmljL1NcXG5lY29ub21pYy9TXFxuZWNvbm9taWNhbC9VWVxcbmVjb25vbWljcy9NXFxuZWNvbm9taXN0L1NNXFxuZWNvbm9taXplL0RSU1pHXFxuZWNvbm9taXplci9NXFxuZWNvbm9teS9TTVxcbmVjb3N5c3RlbS9NU1xcbmVjb3RvdXJpc20vTVxcbmVjb3RvdXJpc3QvTVNcXG5lY3J1L01cXG5lY3N0YXN5L1NNXFxuZWNzdGF0aWNcXG5lY3N0YXRpY2FsbHlcXG5lY3UvU1xcbmVjdW1lbmljYWwvWVxcbmVjdW1lbmljaXNtL01cXG5lY3VtZW5pc20vTVxcbmVjemVtYS9NXFxuZWQvQUNTTVxcbmVkYW1hbWVcXG5lZGR5L0RTTUdcXG5lZGVsd2Vpc3MvTVxcbmVkZW1hL1NNXFxuZWRnZS9NWkdKRFJTXFxuZWRnZXIvTVxcbmVkZ2V3aXNlXFxuZWRnaWx5XFxuZWRnaW5lc3MvTVxcbmVkZ2luZy9NXFxuZWRneS9SVFBcXG5lZGliaWxpdHkvTVxcbmVkaWJsZS9TTVBcXG5lZGlibGVuZXNzL01cXG5lZGljdC9TTVxcbmVkaWZpY2F0aW9uL01cXG5lZGlmaWNlL1NNXFxuZWRpZmllci9NXFxuZWRpZnkvRFJTWkdOXFxuZWRpZnlpbmcvVVxcbmVkaXQnc1xcbmVkaXQvQURHU1xcbmVkaXRhYmxlXFxuZWRpdGVkL1VcXG5lZGl0aW9uL01TXFxuZWRpdG9yL1NNXFxuZWRpdG9yaWFsL1NNWVxcbmVkaXRvcmlhbGl6ZS9EU0dcXG5lZGl0b3JzaGlwL01cXG5lZHVjXFxuZWR1Y2FiaWxpdHkvTVxcbmVkdWNhYmxlL0lcXG5lZHVjYXRlL0FEU0dOVlxcbmVkdWNhdGVkL1VcXG5lZHVjYXRpb24vQU1cXG5lZHVjYXRpb25hbC9ZXFxuZWR1Y2F0aW9uYWxpc3QvU1xcbmVkdWNhdGlvbmlzdC9TXFxuZWR1Y2F0aW9uc1xcbmVkdWNhdG9yL01TXFxuZWR1Y2UvRFNHQlxcbmVkdXRhaW5tZW50L01cXG5lZWtcXG5lZWwvU01cXG5lZXJpZS9SVFxcbmVlcmlseVxcbmVlcmluZXNzL01cXG5lZmYvR1NEXFxuZWZmYWNlL0RTTEdcXG5lZmZhY2VtZW50L01cXG5lZmZlY3QvU01ER1ZcXG5lZmZlY3RpdmUvSVBZXFxuZWZmZWN0aXZlbmVzcy9JTVxcbmVmZmVjdHVhbC9JWVxcbmVmZmVjdHVhdGUvRFNHXFxuZWZmZW1pbmFjeS9NXFxuZWZmZW1pbmF0ZS9ZXFxuZWZmZW5kaS9TTVxcbmVmZmVyZW50XFxuZWZmZXJ2ZXNjZS9HRFNcXG5lZmZlcnZlc2NlbmNlL01cXG5lZmZlcnZlc2NlbnQvWVxcbmVmZmV0ZS9ZUFxcbmVmZmV0ZW5lc3MvTVxcbmVmZmljYWNpb3VzL1lcXG5lZmZpY2FjeS9JTVxcbmVmZmljaWVuY3kvSVNNXFxuZWZmaWNpZW50L0lZXFxuZWZmaWd5L1NNXFxuZWZmbG9yZXNjZW5jZS9NXFxuZWZmbG9yZXNjZW50XFxuZWZmbHVlbmNlL01cXG5lZmZsdWVudC9NU1xcbmVmZmx1dmlhXFxuZWZmbHV2aXVtL01cXG5lZmZsdXhcXG5lZmZvcnQvU01cXG5lZmZvcnRmdWxcXG5lZmZvcnRsZXNzL1lQXFxuZWZmb3J0bGVzc25lc3MvTVxcbmVmZnJvbnRlcnkvTVxcbmVmZnVsZ2VuY2UvTVxcbmVmZnVsZ2VudFxcbmVmZnVzZS9EU0dOVlhcXG5lZmZ1c2lvbi9NXFxuZWZmdXNpdmUvWVBcXG5lZmZ1c2l2ZW5lc3MvTVxcbmVnYWRcXG5lZ2FsaXRhcmlhbi9TTVxcbmVnYWxpdGFyaWFuaXNtL01cXG5lZ2cvR1NNRFxcbmVnZ2JlYXRlci9NU1xcbmVnZ2N1cC9TTVxcbmVnZ2hlYWQvU01cXG5lZ2dub2cvTVxcbmVnZ3BsYW50L01TXFxuZWdnc2hlbGwvU01cXG5lZ2xhbnRpbmUvU01cXG5lZ28vU01cXG5lZ29jZW50cmljL01TXFxuZWdvY2VudHJpY2FsbHlcXG5lZ29jZW50cmljaXR5L01cXG5lZ29pc20vTVxcbmVnb2lzdC9TTVxcbmVnb2lzdGljXFxuZWdvaXN0aWNhbC9ZXFxuZWdvbWFuaWEvTVxcbmVnb21hbmlhYy9NU1xcbmVnb3Rpc20vTVxcbmVnb3Rpc3QvU01cXG5lZ290aXN0aWNcXG5lZ290aXN0aWNhbC9ZXFxuZWdyZWdpb3VzL1BZXFxuZWdyZWdpb3VzbmVzcy9NXFxuZWdyZXNzL01TXFxuZWdyZXQvU01cXG5laFxcbmVpZGVyL1NNXFxuZWlkZXJkb3duL01TXFxuZWlnZW52YWx1ZS9TXFxuZWlnZW52ZWN0b3IvU1xcbmVpZ2h0L1NNXFxuZWlnaHRlZW4vTUhTXFxuZWlnaHRlZW50aC9NXFxuZWlnaHRlZW50aHNcXG5laWdodGgvTVxcbmVpZ2h0aHNcXG5laWdodGlldGgvTVxcbmVpZ2h0aWV0aHNcXG5laWdodHkvU01IXFxuZWluc3RlaW5pdW0vTVxcbmVpc3RlZGRmb2QvU1xcbmVpdGhlclxcbmVqYWN1bGF0ZS9HTlhEU1xcbmVqYWN1bGF0aW9uL01cXG5lamFjdWxhdG9yeVxcbmVqZWN0L1NER1xcbmVqZWN0aW9uL01TXFxuZWplY3Rvci9TTVxcbmVrZS9EU0dcXG5lbGFib3JhdGUvWUdORFNQWFxcbmVsYWJvcmF0ZW5lc3MvTVxcbmVsYWJvcmF0aW9uL01cXG5lbGFuL01cXG5lbGFuZC9TTVxcbmVsYXBzZS9EU0dcXG5lbGFzdGljL01TXFxuZWxhc3RpY2FsbHlcXG5lbGFzdGljYXRlZFxcbmVsYXN0aWNpdHkvTVxcbmVsYXN0aWNpemUvRFNHXFxuZWxhdGUvRFNHTlxcbmVsYXRlZC9ZXFxuZWxhdGlvbi9NXFxuZWxib3cvU01ER1xcbmVsYm93cm9vbS9NXFxuZWxkZXIvU01ZXFxuZWxkZXJiZXJyeS9TTVxcbmVsZGVyY2FyZS9NXFxuZWxkZXN0XFxuZWxkcml0Y2hcXG5lbGVjdCdzXFxuZWxlY3QvQVNER1ZcXG5lbGVjdGFibGVcXG5lbGVjdGlvbi9BTVNcXG5lbGVjdGlvbmVlci9ER1NcXG5lbGVjdGl2ZS9NU1xcbmVsZWN0b3IvTVNcXG5lbGVjdG9yYWwvWVxcbmVsZWN0b3JhdGUvTVNcXG5lbGVjdHJpYy9TXFxuZWxlY3RyaWNhbC9ZXFxuZWxlY3RyaWNpYW4vTVNcXG5lbGVjdHJpY2l0eS9NXFxuZWxlY3RyaWZpY2F0aW9uL01cXG5lbGVjdHJpZmllci9NXFxuZWxlY3RyaWZ5L1pHTkRSU1xcbmVsZWN0cm9jYXJkaW9ncmFtL01TXFxuZWxlY3Ryb2NhcmRpb2dyYXBoL01cXG5lbGVjdHJvY2FyZGlvZ3JhcGhzXFxuZWxlY3Ryb2NhcmRpb2dyYXBoeS9NXFxuZWxlY3Ryb2N1dGUvRFNYR05cXG5lbGVjdHJvY3V0aW9uL01cXG5lbGVjdHJvZGUvU01cXG5lbGVjdHJvZHluYW1pY3NcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhbS9NU1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFwaC9NXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoaWNcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGhzXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoeS9NXFxuZWxlY3Ryb2xvZ2lzdC9TTVxcbmVsZWN0cm9seXNpcy9NXFxuZWxlY3Ryb2x5dGUvTVNcXG5lbGVjdHJvbHl0aWNcXG5lbGVjdHJvbWFnbmV0L01TXFxuZWxlY3Ryb21hZ25ldGljXFxuZWxlY3Ryb21hZ25ldGljYWxseVxcbmVsZWN0cm9tYWduZXRpc20vTVxcbmVsZWN0cm9tb3RpdmVcXG5lbGVjdHJvbi9NU1xcbmVsZWN0cm9uaWMvU1xcbmVsZWN0cm9uaWNhL01cXG5lbGVjdHJvbmljYWxseVxcbmVsZWN0cm9uaWNzL01cXG5lbGVjdHJvcGxhdGUvRFNHXFxuZWxlY3Ryb3Njb3BlL1NNXFxuZWxlY3Ryb3Njb3BpY1xcbmVsZWN0cm9zaG9jay9NXFxuZWxlY3Ryb3N0YXRpYy9TXFxuZWxlY3Ryb3N0YXRpY3MvTVxcbmVsZWN0cm90eXBlL01TXFxuZWxlY3Ryb3dlYWtcXG5lbGVlbW9zeW5hcnlcXG5lbGVnYW5jZS9JTVxcbmVsZWdhbnQvSVlcXG5lbGVnaWFjL01TXFxuZWxlZ2lhY2FsXFxuZWxlZ3kvU01cXG5lbGVtXFxuZWxlbWVudC9NU1xcbmVsZW1lbnRhbC9ZXFxuZWxlbWVudGFyeVxcbmVsZXBoYW50L1NNXFxuZWxlcGhhbnRpYXNpcy9NXFxuZWxlcGhhbnRpbmVcXG5lbGV2XFxuZWxldmF0ZS9YRFNHTlxcbmVsZXZhdGlvbi9NXFxuZWxldmF0b3IvTVNcXG5lbGV2ZW4vU01IXFxuZWxldmVucy9TXFxuZWxldmVudGgvTVxcbmVsZXZlbnRoc1xcbmVsZi9NXFxuZWxmaW5cXG5lbGZpc2hcXG5lbGljaXQvU0RHXFxuZWxpY2l0YXRpb24vTVxcbmVsaWRlL0RTR1xcbmVsaWdpYmlsaXR5L0lNXFxuZWxpZ2libGVcXG5lbGltaW5hdGUvWERTR05cXG5lbGltaW5hdGlvbi9NXFxuZWxpbWluYXRvci9TXFxuZWxpc2lvbi9NU1xcbmVsaXRlL1NNXFxuZWxpdGlzbS9NXFxuZWxpdGlzdC9NU1xcbmVsaXhpci9TTVxcbmVsay9TTVxcbmVsbC9TTVxcbmVsbGlwc2UvTVNcXG5lbGxpcHNpcy9NXFxuZWxsaXBzb2lkL1NNXFxuZWxsaXBzb2lkYWxcXG5lbGxpcHRpY1xcbmVsbGlwdGljYWwvWVxcbmVsbS9TTVxcbmVsb2N1dGlvbi9NXFxuZWxvY3V0aW9uYXJ5XFxuZWxvY3V0aW9uaXN0L1NNXFxuZWxvZGVhL1NNXFxuZWxvbmdhdGUvRFNHTlhcXG5lbG9uZ2F0aW9uL01cXG5lbG9wZS9EU0dMXFxuZWxvcGVtZW50L01TXFxuZWxvcXVlbmNlL01cXG5lbG9xdWVudC9ZXFxuZWxzZVxcbmVsc2V3aGVyZVxcbmVsdWNpZGF0ZS9EU0dOWFxcbmVsdWNpZGF0aW9uL01cXG5lbHVkZS9EU0dcXG5lbHVzaXZlL1lQXFxuZWx1c2l2ZW5lc3MvTVxcbmVsdmVyL1NNXFxuZWx2ZXNcXG5lbHZpc2hcXG5lbSdzXFxuZW0vU1xcbmVtYWNpYXRlL0dORFNcXG5lbWFjaWF0aW9uL01cXG5lbWFpbC9TTURHXFxuZW1hbmF0ZS9YRFNHTlxcbmVtYW5hdGlvbi9NXFxuZW1hbmNpcGF0ZS9EU0dOXFxuZW1hbmNpcGF0aW9uL01cXG5lbWFuY2lwYXRvci9NU1xcbmVtYXNjdWxhdGUvR05EU1xcbmVtYXNjdWxhdGlvbi9NXFxuZW1iYWxtL1NaR0RSXFxuZW1iYWxtZXIvTVxcbmVtYmFuay9TTEdEXFxuZW1iYW5rbWVudC9TTVxcbmVtYmFyZ28vTURHXFxuZW1iYXJnb2VzXFxuZW1iYXJrL0FFR0RTXFxuZW1iYXJrYXRpb24vRU1cXG5lbWJhcmthdGlvbnNcXG5lbWJhcnJhc3MvR0xEU1xcbmVtYmFycmFzc2VkL1VcXG5lbWJhcnJhc3NpbmcvWVxcbmVtYmFycmFzc21lbnQvU01cXG5lbWJhc3N5L1NNXFxuZW1iYXR0bGVkXFxuZW1iZWQvU1xcbmVtYmVkZGVkXFxuZW1iZWRkaW5nXFxuZW1iZWxsaXNoL0xHRFNcXG5lbWJlbGxpc2htZW50L1NNXFxuZW1iZXIvU01cXG5lbWJlenpsZS9aR0xEUlNcXG5lbWJlenpsZW1lbnQvTVxcbmVtYmV6emxlci9NXFxuZW1iaXR0ZXIvR0xEU1xcbmVtYml0dGVybWVudC9NXFxuZW1ibGF6b24vR0RMU1xcbmVtYmxhem9ubWVudC9NXFxuZW1ibGVtL1NNXFxuZW1ibGVtYXRpY1xcbmVtYmxlbWF0aWNhbGx5XFxuZW1ib2RpbWVudC9FTVxcbmVtYm9keS9BRUdTRFxcbmVtYm9sZGVuL0RHU1xcbmVtYm9saXNtL01TXFxuZW1ib2xpemF0aW9uXFxuZW1ib3NzL0RSU1pHXFxuZW1ib3NzZXIvTVxcbmVtYm91Y2h1cmUvTVxcbmVtYm93ZXIvU0dEXFxuZW1icmFjZS9EU01HXFxuZW1icmFjZWFibGVcXG5lbWJyYXN1cmUvTVNcXG5lbWJyb2NhdGlvbi9NU1xcbmVtYnJvaWRlci9TRFJaR1xcbmVtYnJvaWRlcmVyL01cXG5lbWJyb2lkZXJ5L1NNXFxuZW1icm9pbC9ER0xTXFxuZW1icm9pbG1lbnQvTVxcbmVtYnJ5by9TTVxcbmVtYnJ5b2xvZ2ljYWxcXG5lbWJyeW9sb2dpc3QvTVNcXG5lbWJyeW9sb2d5L01cXG5lbWJyeW9uaWNcXG5lbWNlZS9EU01cXG5lbWNlZWluZ1xcbmVtZW5kL1NER1xcbmVtZW5kYXRpb24vTVNcXG5lbWVyYWxkL01TXFxuZW1lcmdlL0FEU0dcXG5lbWVyZ2VuY2UvQU1cXG5lbWVyZ2VuY3kvU01cXG5lbWVyZ2VudFxcbmVtZXJpdGFcXG5lbWVyaXR1c1xcbmVtZXJ5L01cXG5lbWV0aWMvU01cXG5lbWYvU1xcbmVtaWdyYW50L1NNXFxuZW1pZ3JhdGUvRFNYR05cXG5lbWlncmF0aW9uL01cXG5lbWlncmUvU01cXG5lbWluZW5jZS9NU1xcbmVtaW5lbnQvWVxcbmVtaXIvTVNcXG5lbWlyYXRlL01TXFxuZW1pc3NhcnkvU01cXG5lbWlzc2lvbi9TTVxcbmVtaXQvU1xcbmVtaXR0ZWRcXG5lbWl0dGVyL01TXFxuZW1pdHRpbmdcXG5lbW8vU01cXG5lbW9qaS9TTVxcbmVtb2xsaWVudC9NU1xcbmVtb2x1bWVudC9NU1xcbmVtb3RlL1hEU0dOVlxcbmVtb3RpY29uL1NNXFxuZW1vdGlvbi9NXFxuZW1vdGlvbmFsL1VZXFxuZW1vdGlvbmFsaXNtL01cXG5lbW90aW9uYWxpemUvR0RTXFxuZW1vdGlvbmxlc3NcXG5lbW90aXZlL1lcXG5lbXBhdGhldGljXFxuZW1wYXRoaWNhbGx5XFxuZW1wYXRoaXplL0RTR1xcbmVtcGF0aHkvTVxcbmVtcGVyb3IvTVNcXG5lbXBoYXNlc1xcbmVtcGhhc2lzL01cXG5lbXBoYXNpemUvQUdEU1xcbmVtcGhhdGljL1VcXG5lbXBoYXRpY2FsbHlcXG5lbXBoeXNlbWEvTVxcbmVtcGlyZS9TTVxcbmVtcGlyaWNcXG5lbXBpcmljYWwvWVxcbmVtcGlyaWNpc20vTVxcbmVtcGlyaWNpc3QvU01cXG5lbXBsYWNlbWVudC9TTVxcbmVtcGxveSdzXFxuZW1wbG95L0FER0xTXFxuZW1wbG95YWJsZS9VXFxuZW1wbG95ZWUvU01cXG5lbXBsb3llci9TTVxcbmVtcGxveW1lbnQvVUFNXFxuZW1wbG95bWVudHNcXG5lbXBvcml1bS9TTVxcbmVtcG93ZXIvU0RHTFxcbmVtcG93ZXJtZW50L01cXG5lbXByZXNzL01TXFxuZW1wdGlseVxcbmVtcHRpbmVzcy9NXFxuZW1wdHkvVEdQRFJTTVxcbmVtcHlyZWFuL01cXG5lbXUvU01cXG5lbXVsYXRlL0RTR05WWFxcbmVtdWxhdGlvbi9NXFxuZW11bGF0b3IvU01cXG5lbXVsc2lmaWNhdGlvbi9NXFxuZW11bHNpZmllci9NXFxuZW11bHNpZnkvTkRSU1pHXFxuZW11bHNpb24vTVNcXG5lbi9TTVxcbmVuYWJsZS9EUlNaR1xcbmVuYWJsZXIvTVxcbmVuYWN0L0FTTERHXFxuZW5hY3RtZW50L0FTTVxcbmVuYW1lbC9KU1pHTURSXFxuZW5hbWVsZXIvTVxcbmVuYW1lbHdhcmUvTVxcbmVuYW1vci9TR0RcXG5lbmNcXG5lbmNhbXAvTFNHRFxcbmVuY2FtcG1lbnQvTVNcXG5lbmNhcHN1bGF0ZS9YR05EU1xcbmVuY2Fwc3VsYXRpb24vTVxcbmVuY2FzZS9MRFNHXFxuZW5jYXNlbWVudC9NXFxuZW5jZXBoYWxpdGljXFxuZW5jZXBoYWxpdGlzL01cXG5lbmNoYWluL0RHU1xcbmVuY2hhbnQvRUxER1NcXG5lbmNoYW50ZXIvTVNcXG5lbmNoYW50aW5nL1lcXG5lbmNoYW50bWVudC9FTVxcbmVuY2hhbnRtZW50c1xcbmVuY2hhbnRyZXNzL01TXFxuZW5jaGlsYWRhL1NNXFxuZW5jaXBoZXIvU0dEXFxuZW5jaXJjbGUvRFNHTFxcbmVuY2lyY2xlbWVudC9NXFxuZW5jbFxcbmVuY2xhdmUvTVNcXG5lbmNsb3NlL0dEU1xcbmVuY2xvc2VkL1VcXG5lbmNsb3N1cmUvU01cXG5lbmNvZGUvRFJTWkdcXG5lbmNvZGVyL01cXG5lbmNvbWl1bS9NU1xcbmVuY29tcGFzcy9HRFNcXG5lbmNvcmUvRFNNR1xcbmVuY291bnRlci9HU01EXFxuZW5jb3VyYWdlL0RTTEdcXG5lbmNvdXJhZ2VtZW50L1NNXFxuZW5jb3VyYWdpbmcvWVxcbmVuY3JvYWNoL0dMRFNcXG5lbmNyb2FjaG1lbnQvU01cXG5lbmNydXN0L0RHU1xcbmVuY3J1c3RhdGlvbi9TTVxcbmVuY3J5cHQvREdTXFxuZW5jcnlwdGlvblxcbmVuY3VtYmVyL0VHU0RcXG5lbmN1bWJlcmVkL1VcXG5lbmN1bWJyYW5jZS9NU1xcbmVuY3lcXG5lbmN5Y2xpY2FsL1NNXFxuZW5jeWNsb3BlZGlhL01TXFxuZW5jeWNsb3BlZGljXFxuZW5jeXN0L0xTR0RcXG5lbmN5c3RtZW50L01cXG5lbmQvR1ZTSk1EXFxuZW5kYW5nZXIvU0dETFxcbmVuZGFuZ2VybWVudC9NXFxuZW5kZWFyL1NHTERcXG5lbmRlYXJpbmcvWVxcbmVuZGVhcm1lbnQvU01cXG5lbmRlYXZvci9HU01EXFxuZW5kZW1pYy9NU1xcbmVuZGVtaWNhbGx5XFxuZW5kZ2FtZS9TXFxuZW5kaW5nL01cXG5lbmRpdmUvU01cXG5lbmRsZXNzL1BZXFxuZW5kbGVzc25lc3MvTVxcbmVuZG1vc3RcXG5lbmRvY2FyZGl0aXNcXG5lbmRvY3JpbmUvTVNcXG5lbmRvY3Jpbm9sb2dpc3QvTVNcXG5lbmRvY3Jpbm9sb2d5L01cXG5lbmRvZ2Vub3VzL1lcXG5lbmRvbWV0cmlhbFxcbmVuZG9tZXRyaW9zaXNcXG5lbmRvbWV0cml1bVxcbmVuZG9ycGhpbi9NU1xcbmVuZG9yc2UvTFpHRFJTXFxuZW5kb3JzZW1lbnQvTVNcXG5lbmRvcnNlci9NXFxuZW5kb3Njb3BlL01TXFxuZW5kb3Njb3BpY1xcbmVuZG9zY29weS9NXFxuZW5kb3RoZWxpYWxcXG5lbmRvdGhlcm1pY1xcbmVuZG90cmFjaGVhbFxcbmVuZG93L1NETEdcXG5lbmRvd21lbnQvTVNcXG5lbmRwb2ludC9TTVxcbmVuZHVlL0RTR1xcbmVuZHVyYWJsZS9VXFxuZW5kdXJhbmNlL01cXG5lbmR1cmUvRFNCR1xcbmVuZHdheXNcXG5lbmVtYS9TTVxcbmVuZW15L1NNXFxuZW5lcmdldGljXFxuZW5lcmdldGljYWxseVxcbmVuZXJnaXplL1pHRFJTXFxuZW5lcmdpemVyL01cXG5lbmVyZ3kvU01cXG5lbmVydmF0ZS9HTkRTXFxuZW5lcnZhdGlvbi9NXFxuZW5mZWVibGUvR0RTTFxcbmVuZmVlYmxlbWVudC9NXFxuZW5maWxhZGUvRFNNR1xcbmVuZm9sZC9TR0RcXG5lbmZvcmNlL0xaR0RSU1xcbmVuZm9yY2VhYmxlL1VcXG5lbmZvcmNlZC9VXFxuZW5mb3JjZW1lbnQvTVxcbmVuZm9yY2VyL01cXG5lbmZyYW5jaGlzZS9FR0RTTFxcbmVuZnJhbmNoaXNlbWVudC9FTVxcbmVuZ2FnZS9FQURTR1xcbmVuZ2FnZW1lbnQvRU1TXFxuZW5nYWdpbmdseVxcbmVuZ2VuZGVyL1NHRFxcbmVuZ2luZS9TTVxcbmVuZ2luZWVyL01ER1NcXG5lbmdpbmVlcmluZy9NXFxuZW5nb3JnZS9MR0RTXFxuZW5nb3JnZW1lbnQvTVxcbmVuZ3JhbS9TTVxcbmVuZ3JhdmUvWkdKRFJTXFxuZW5ncmF2ZXIvTVxcbmVuZ3JhdmluZy9NXFxuZW5ncm9zcy9HTERTXFxuZW5ncm9zc21lbnQvTVxcbmVuZ3VsZi9TTEdEXFxuZW5ndWxmbWVudC9NXFxuZW5oYW5jZS9MWkdEUlNcXG5lbmhhbmNlbWVudC9TTVxcbmVuaWdtYS9TTVxcbmVuaWdtYXRpY1xcbmVuaWdtYXRpY2FsbHlcXG5lbmphbWJtZW50L1NNXFxuZW5qb2luL1NHRFxcbmVuam95L0dCTFNEXFxuZW5qb3lhYmx5XFxuZW5qb3ltZW50L1NNXFxuZW5sYXJnZS9MWkdEUlNcXG5lbmxhcmdlYWJsZVxcbmVubGFyZ2VtZW50L01TXFxuZW5sYXJnZXIvTVxcbmVubGlnaHRlbi9TR0xEXFxuZW5saWdodGVuZWQvVVxcbmVubGlnaHRlbm1lbnQvTVxcbmVubGlzdC9BREdTTFxcbmVubGlzdGVlL1NNXFxuZW5saXN0bWVudC9BTVxcbmVubGlzdG1lbnRzXFxuZW5saXZlbi9TTERHXFxuZW5saXZlbm1lbnQvTVxcbmVubWVzaC9EU0dMXFxuZW5tZXNobWVudC9NXFxuZW5taXR5L1NNXFxuZW5ub2JsZS9EU0dMXFxuZW5ub2JsZW1lbnQvTVxcbmVubnVpL01cXG5lbm9ybWl0eS9TTVxcbmVub3Jtb3VzL1BZXFxuZW5vcm1vdXNuZXNzL01cXG5lbm91Z2gvTVxcbmVucGxhbmUvRFNHXFxuZW5xdWV1ZS9EU1xcbmVucXVpcmVyL1NcXG5lbnF1aXJpbmdseVxcbmVucmFnZS9HRFNcXG5lbnJhcHR1cmUvRFNHXFxuZW5yaWNoL0RTTEdcXG5lbnJpY2htZW50L01cXG5lbnJvbGwvRExTR1xcbmVucm9sbG1lbnQvTVNcXG5lbnNjb25jZS9EU0dcXG5lbnNlbWJsZS9TTVxcbmVuc2hyaW5lL0dMRFNcXG5lbnNocmluZW1lbnQvTVxcbmVuc2hyb3VkL0RHU1xcbmVuc2lnbi9NU1xcbmVuc2lsYWdlL01cXG5lbnNsYXZlL0RTR0xcXG5lbnNsYXZlbWVudC9NXFxuZW5zbmFyZS9EU0xHXFxuZW5zbmFyZW1lbnQvTVxcbmVuc3VlL0RTR1xcbmVuc3VyZS9aR0RSU1xcbmVuc3VyZXIvTVxcbmVudGFpbC9EU0dMXFxuZW50YWlsbWVudC9NXFxuZW50YW5nbGUvRURTTEdcXG5lbnRhbmdsZW1lbnQvRU1cXG5lbnRhbmdsZW1lbnRzXFxuZW50ZW50ZS9TTVxcbmVudGVyL0FTR0RcXG5lbnRlcmFsXFxuZW50ZXJpY1xcbmVudGVyaXRpcy9NXFxuZW50ZXJwcmlzZS9NR1NcXG5lbnRlcnByaXNpbmcvWVxcbmVudGVydGFpbi9aR0RSU0xcXG5lbnRlcnRhaW5lci9NXFxuZW50ZXJ0YWluaW5nL01ZXFxuZW50ZXJ0YWlubWVudC9NU1xcbmVudGhyYWxsL0dEU0xcXG5lbnRocmFsbG1lbnQvTVxcbmVudGhyb25lL0dEU0xcXG5lbnRocm9uZW1lbnQvU01cXG5lbnRodXNlL0RTR1xcbmVudGh1c2lhc20vTVNcXG5lbnRodXNpYXN0L01TXFxuZW50aHVzaWFzdGljL1VcXG5lbnRodXNpYXN0aWNhbGx5XFxuZW50aWNlL0dEU0xcXG5lbnRpY2VtZW50L01TXFxuZW50aWNpbmcvWVxcbmVudGlyZS9ZXFxuZW50aXJldHkvTVxcbmVudGl0bGUvRFNHTFxcbmVudGl0bGVtZW50L1NNXFxuZW50aXR5L1NNXFxuZW50b21iL0RTR0xcXG5lbnRvbWJtZW50L01cXG5lbnRvbW9sb2dpY2FsXFxuZW50b21vbG9naXN0L01TXFxuZW50b21vbG9neS9NXFxuZW50b3VyYWdlL1NNXFxuZW50cidhY3RlXFxuZW50cmFpbHMvTVxcbmVudHJhaW5lZFxcbmVudHJhbmNlL0xEU01HXFxuZW50cmFuY2VtZW50L01cXG5lbnRyYW5jaW5nL1lcXG5lbnRyYW50L1NNXFxuZW50cmFwL0xTXFxuZW50cmFwbWVudC9NXFxuZW50cmFwcGVkXFxuZW50cmFwcGluZ1xcbmVudHJlYXQvR1NEXFxuZW50cmVhdGluZy9ZXFxuZW50cmVhdHkvU01cXG5lbnRyZWUvTVNcXG5lbnRyZW5jaC9EU0dMXFxuZW50cmVuY2htZW50L01TXFxuZW50cmVwcmVuZXVyL1NNXFxuZW50cmVwcmVuZXVyaWFsXFxuZW50cmVwcmVuZXVyc2hpcFxcbmVudHJvcHkvTVxcbmVudHJ1c3QvU0dEXFxuZW50cnkvQVNNXFxuZW50cnlwaG9uZS9TXFxuZW50cnl3YXkvTVNcXG5lbnR3aW5lL0RTR1xcbmVudW1lcmFibGVcXG5lbnVtZXJhdGUvRFNHTlhcXG5lbnVtZXJhdGlvbi9NXFxuZW51bWVyYXRvci9TTVxcbmVudW5jaWF0ZS9EU0dOXFxuZW51bmNpYXRpb24vTVxcbmVudXJlc2lzL01cXG5lbnZlbG9wL1NMRFJaR1xcbmVudmVsb3BlL1NNXFxuZW52ZWxvcGVyL01cXG5lbnZlbG9wbWVudC9NXFxuZW52ZW5vbS9TREdcXG5lbnZpYWJsZS9VXFxuZW52aWFibHlcXG5lbnZpb3VzL1BZXFxuZW52aW91c25lc3MvTVxcbmVudmlyb25tZW50L01TXFxuZW52aXJvbm1lbnRhbC9ZXFxuZW52aXJvbm1lbnRhbGlzbS9NXFxuZW52aXJvbm1lbnRhbGlzdC9TTVxcbmVudmlyb25zL01cXG5lbnZpc2FnZS9HRFNcXG5lbnZpc2lvbi9ER1NcXG5lbnZveS9TTVxcbmVudnkvRFNNR1xcbmVudnlpbmcvWVxcbmVuenltYXRpY1xcbmVuenltZS9TTVxcbmVvbGlhblxcbmVvbi9TTVxcbmVvc2lub3BoaWwvU1xcbmVvc2lub3BoaWxpY1xcbmVwYXVsZXQvU01cXG5lcGVlL01TXFxuZXBoZWRyaW5lL01cXG5lcGhlbWVyYS9NXFxuZXBoZW1lcmFsL1lcXG5lcGljL01TXFxuZXBpY2VudGVyL01TXFxuZXBpY3VyZS9TTVxcbmVwaWN1cmVhbi9NU1xcbmVwaWRlbWljL1NNXFxuZXBpZGVtaWNhbGx5XFxuZXBpZGVtaW9sb2dpY2FsXFxuZXBpZGVtaW9sb2dpc3QvU01cXG5lcGlkZW1pb2xvZ3kvTVxcbmVwaWRlcm1hbFxcbmVwaWRlcm1pY1xcbmVwaWRlcm1pcy9NU1xcbmVwaWR1cmFsL1NcXG5lcGlnbG90dGlzL01TXFxuZXBpZ3JhbS9TTVxcbmVwaWdyYW1tYXRpY1xcbmVwaWdyYXBoL01cXG5lcGlncmFwaHNcXG5lcGlncmFwaHkvTVxcbmVwaWxlcHN5L01cXG5lcGlsZXB0aWMvU01cXG5lcGlsb2d1ZS9NU1xcbmVwaW5lcGhyaW5lL01cXG5lcGlwaGFueS9TTVxcbmVwaXNjb3BhY3kvTVxcbmVwaXNjb3BhbFxcbmVwaXNjb3BhdGUvTVxcbmVwaXNvZGUvU01cXG5lcGlzb2RpY1xcbmVwaXNvZGljYWxseVxcbmVwaXN0ZW1pY1xcbmVwaXN0ZW1vbG9naWNhbFxcbmVwaXN0ZW1vbG9neVxcbmVwaXN0bGUvU01cXG5lcGlzdG9sYXJ5XFxuZXBpdGFwaC9NXFxuZXBpdGFwaHNcXG5lcGl0aGVsaWFsXFxuZXBpdGhlbGl1bS9NXFxuZXBpdGhldC9TTVxcbmVwaXRvbWUvU01cXG5lcGl0b21pemUvR0RTXFxuZXBvY2gvTVxcbmVwb2NoYWxcXG5lcG9jaHNcXG5lcG9ueW1vdXNcXG5lcG94eS9EU01HXFxuZXBzaWxvbi9TTVxcbmVxdWFiaWxpdHkvTVxcbmVxdWFibGVcXG5lcXVhYmx5XFxuZXF1YWwvU01EWUdcXG5lcXVhbGl0eS9JTVxcbmVxdWFsaXphdGlvbi9NXFxuZXF1YWxpemUvWkdEUlNcXG5lcXVhbGl6ZXIvTVxcbmVxdWFuaW1pdHkvTVxcbmVxdWF0ZS9EU0dOQlhcXG5lcXVhdGlvbi9NXFxuZXF1YXRvci9TTVxcbmVxdWF0b3JpYWxcXG5lcXVlcnJ5L1NNXFxuZXF1ZXN0cmlhbi9TTVxcbmVxdWVzdHJpYW5pc20vTVxcbmVxdWVzdHJpZW5uZS9TTVxcbmVxdWlkaXN0YW50L1lcXG5lcXVpbGF0ZXJhbC9TTVxcbmVxdWlsaWJyaXVtL0VNXFxuZXF1aW5lL1NNXFxuZXF1aW5vY3RpYWxcXG5lcXVpbm94L01TXFxuZXF1aXAvQVNcXG5lcXVpcGFnZS9NU1xcbmVxdWlwbWVudC9NXFxuZXF1aXBvaXNlL01cXG5lcXVpcHBlZC9VQVxcbmVxdWlwcGluZy9BXFxuZXF1aXRhYmxlL0lcXG5lcXVpdGFibHkvSVxcbmVxdWl0YXRpb24vTVxcbmVxdWl0eS9JU01cXG5lcXVpdlxcbmVxdWl2YWxlbmNlL01TXFxuZXF1aXZhbGVuY3kvU01cXG5lcXVpdmFsZW50L01ZU1xcbmVxdWl2b2NhbC9VWVxcbmVxdWl2b2NhbG5lc3MvTVxcbmVxdWl2b2NhdGUvR05YRFNcXG5lcXVpdm9jYXRpb24vTVxcbmVxdWl2b2NhdG9yL1NNXFxuZXIvQ1xcbmVyYS9TTVxcbmVyYWRpY2FibGUvSVxcbmVyYWRpY2F0ZS9EU0dOXFxuZXJhZGljYXRpb24vTVxcbmVyYWRpY2F0b3IvTVNcXG5lcmFzZS9EUlNCWkdcXG5lcmFzZXIvTVxcbmVyYXN1cmUvU01cXG5lcmJpdW0vTVxcbmVyZVxcbmVyZWN0L1BTR0RZXFxuZXJlY3RpbGVcXG5lcmVjdGlvbi9TTVxcbmVyZWN0bmVzcy9NXFxuZXJlY3Rvci9NU1xcbmVyZWxvbmdcXG5lcmVtaXRlL01TXFxuZXJnL1NNXFxuZXJnb1xcbmVyZ29ub21pYy9TXFxuZXJnb25vbWljYWxseVxcbmVyZ29ub21pY3MvTVxcbmVyZ29zdGVyb2wvTVxcbmVyZ290L01cXG5lcm1pbmUvU01cXG5lcm9kZS9EU0dcXG5lcm9kaWJsZVxcbmVyb2dlbm91c1xcbmVyb3Npb24vTVxcbmVyb3NpdmVcXG5lcm90aWMvU1xcbmVyb3RpY2EvTVxcbmVyb3RpY2FsbHlcXG5lcm90aWNpc20vTVxcbmVyci9HU0RcXG5lcnJhbmQvU01cXG5lcnJhbnQvSVxcbmVycmF0YS9TTVxcbmVycmF0aWNcXG5lcnJhdGljYWxseVxcbmVycmF0dW0vTVxcbmVycm9uZW91cy9ZXFxuZXJyb3IvU01cXG5lcnNhdHovTVNcXG5lcnN0XFxuZXJzdHdoaWxlXFxuZXJ1Y3QvU0RHXFxuZXJ1Y3RhdGlvbi9TTVxcbmVydWRpdGUvWU5cXG5lcnVkaXRpb24vTVxcbmVydXB0L1NER1ZcXG5lcnVwdGlvbi9NU1xcbmVyeXNpcGVsYXMvTVxcbmVyeXRocm9jeXRlL1NNXFxuZXJ5dGhyb215Y2luXFxuZXNjYWxhdGUvQ0RTR05cXG5lc2NhbGF0aW9uL0NNXFxuZXNjYWxhdGlvbnNcXG5lc2NhbGF0b3IvTVNcXG5lc2NhbGxvcC9TR01EXFxuZXNjYWxvcGUvU1xcbmVzY2FwYWRlL01TXFxuZXNjYXBlL0xNR0RTXFxuZXNjYXBlZS9NU1xcbmVzY2FwZW1lbnQvU01cXG5lc2NhcGlzbS9NXFxuZXNjYXBpc3QvTVNcXG5lc2NhcG9sb2dpc3QvU1xcbmVzY2Fwb2xvZ3lcXG5lc2NhcmdvdC9NU1xcbmVzY2Fyb2xlL01TXFxuZXNjYXJwbWVudC9NU1xcbmVzY2hhdG9sb2dpY2FsXFxuZXNjaGF0b2xvZ3lcXG5lc2NoZXcvU0RHXFxuZXNjb3J0L1NNREdcXG5lc2NyaXRvaXJlL01TXFxuZXNjcm93L1NNXFxuZXNjdWRvL1NNXFxuZXNjdXRjaGVvbi9TTVxcbmVzb3BoYWdlYWxcXG5lc29waGFnaVxcbmVzb3BoYWd1cy9NXFxuZXNvdGVyaWNcXG5lc290ZXJpY2FsbHlcXG5lc3BcXG5lc3BhZHJpbGxlL01TXFxuZXNwYWxpZXIvTURTR1xcbmVzcGVjaWFsL1lcXG5lc3Bpb25hZ2UvTVxcbmVzcGxhbmFkZS9NU1xcbmVzcG91c2FsL01cXG5lc3BvdXNlL0dEU1xcbmVzcHJlc3NvL01TXFxuZXNwcml0L01cXG5lc3B5L0RTR1xcbmVzcXVpcmUvU01cXG5lc3NheS9TTURSWkdcXG5lc3NheWVyL01cXG5lc3NheWlzdC9TTVxcbmVzc2VuY2UvU01cXG5lc3NlbnRpYWwvSU1TXFxuZXNzZW50aWFsbHlcXG5lc3RhYmxpc2gvQUVTREdMXFxuZXN0YWJsaXNobWVudC9BRU1cXG5lc3RhYmxpc2htZW50c1xcbmVzdGF0ZS9TTVxcbmVzdGVlbS9FU01ER1xcbmVzdGVyL1NNXFxuZXN0aW1hYmxlL0lcXG5lc3RpbWF0ZS9NR05EU1hcXG5lc3RpbWF0aW9uL01cXG5lc3RpbWF0b3IvU01cXG5lc3RvcHBlbFxcbmVzdHJhZGlvbFxcbmVzdHJhbmdlL0xEU0dcXG5lc3RyYW5nZW1lbnQvTVNcXG5lc3Ryb2dlbi9NU1xcbmVzdHJvdXNcXG5lc3RydXMvTVNcXG5lc3R1YXJ5L1NNXFxuZXRhL1NNXFxuZXRjXFxuZXRjaC9EUlNaR0pcXG5ldGNoZXIvTVxcbmV0Y2hpbmcvTVxcbmV0ZXJuYWwvWVBcXG5ldGVybmFsbmVzcy9NXFxuZXRlcm5pdHkvU01cXG5ldGhhbmUvTVxcbmV0aGFub2wvTVxcbmV0aGVyL01cXG5ldGhlcmVhbC9ZXFxuZXRoaWMvU01cXG5ldGhpY2FsL1VZXFxuZXRoaWNzL01cXG5ldGhtb2lkXFxuZXRobmljL1NNXFxuZXRobmljYWxseVxcbmV0aG5pY2l0eS9NXFxuZXRobm9jZW50cmljXFxuZXRobm9jZW50cmlzbS9NXFxuZXRobm9ncmFwaGVyL1NcXG5ldGhub2dyYXBoaWNcXG5ldGhub2dyYXBoaWNhbGx5XFxuZXRobm9ncmFwaHlcXG5ldGhub2xvZ2ljYWwvWVxcbmV0aG5vbG9naXN0L1NNXFxuZXRobm9sb2d5L01cXG5ldGhvbG9naWNhbFxcbmV0aG9sb2dpc3QvTVNcXG5ldGhvbG9neS9NXFxuZXRob3MvTVxcbmV0aHlsL01cXG5ldGh5bGVuZS9NXFxuZXRpb2xhdGVkXFxuZXRpb2xvZ2ljXFxuZXRpb2xvZ2ljYWxcXG5ldGlvbG9neS9TTVxcbmV0aXF1ZXR0ZS9NXFxuZXR1ZGUvU01cXG5ldHltb2xvZ2ljYWwvWVxcbmV0eW1vbG9naXN0L1NNXFxuZXR5bW9sb2d5L1NNXFxuZXVjYWx5cHRpXFxuZXVjYWx5cHR1cy9NU1xcbmV1Y2hyZS9EU01HXFxuZXVjbGlkZWFuXFxuZXVnZW5pYy9TXFxuZXVnZW5pY2FsbHlcXG5ldWdlbmljaXN0L01TXFxuZXVnZW5pY3MvTVxcbmV1a2FyeW90ZS9TTVxcbmV1a2FyeW90aWNcXG5ldWxvZ2lzdC9NU1xcbmV1bG9naXN0aWNcXG5ldWxvZ2l6ZS9aR0RSU1xcbmV1bG9naXplci9NXFxuZXVsb2d5L1NNXFxuZXVudWNoL01cXG5ldW51Y2hzXFxuZXVwaGVtaXNtL1NNXFxuZXVwaGVtaXN0aWNcXG5ldXBoZW1pc3RpY2FsbHlcXG5ldXBob25pb3VzL1lcXG5ldXBob255L01cXG5ldXBob3JpYS9NXFxuZXVwaG9yaWNcXG5ldXBob3JpY2FsbHlcXG5ldXJla2FcXG5ldXJvL01TXFxuZXVyb3BpdW0vTVxcbmV1dGVjdGljXFxuZXV0aGFuYXNpYS9NXFxuZXV0aGFuaXplL0RTR1xcbmV1dGhlbmljcy9NXFxuZXV0cm9waGljYXRpb25cXG5ldmFjdWF0ZS9YRFNHTlxcbmV2YWN1YXRpb24vTVxcbmV2YWN1ZWUvTVNcXG5ldmFkZS9EUlNaR1xcbmV2YWRlci9NXFxuZXZhbHVhdGUvQUdOVkRTWFxcbmV2YWx1YXRpb24vQU1cXG5ldmFsdWF0b3IvU1xcbmV2YW5lc2NlbmNlL01cXG5ldmFuZXNjZW50XFxuZXZhbmdlbGljXFxuZXZhbmdlbGljYWwvU01ZXFxuZXZhbmdlbGljYWxpc20vTVxcbmV2YW5nZWxpc20vTVxcbmV2YW5nZWxpc3QvTVNcXG5ldmFuZ2VsaXN0aWNcXG5ldmFuZ2VsaXplL0dEU1xcbmV2YXBvcmF0ZS9HTkRTXFxuZXZhcG9yYXRpb24vTVxcbmV2YXBvcmF0b3IvU01cXG5ldmFzaW9uL1NNXFxuZXZhc2l2ZS9ZUFxcbmV2YXNpdmVuZXNzL01cXG5ldmUvQVNNXFxuZXZlbi9NRFJZVEdTSlBcXG5ldmVuaGFuZGVkL1lcXG5ldmVuaW5nL01cXG5ldmVubmVzcy9VTVxcbmV2ZW5zb25nL01cXG5ldmVudC9TTVxcbmV2ZW50ZnVsL1VZXFxuZXZlbnRmdWxuZXNzL01cXG5ldmVudGlkZS9NXFxuZXZlbnR1YWwvWVxcbmV2ZW50dWFsaXR5L1NNXFxuZXZlbnR1YXRlL0dEU1xcbmV2ZXJcXG5ldmVyZ2xhZGUvU01cXG5ldmVyZ3JlZW4vU01cXG5ldmVybGFzdGluZy9NWVNcXG5ldmVybW9yZVxcbmV2ZXJ5XFxuZXZlcnlib2R5L01cXG5ldmVyeWRheVxcbmV2ZXJ5b25lL01cXG5ldmVyeXBsYWNlXFxuZXZlcnl0aGluZy9NXFxuZXZlcnl3aGVyZVxcbmV2aWN0L1NER1xcbmV2aWN0aW9uL01TXFxuZXZpZGVuY2UvTUdEU1xcbmV2aWRlbnQvWVxcbmV2aWwvTVJZVFNQXFxuZXZpbGRvZXIvU01cXG5ldmlsZG9pbmcvTVxcbmV2aWxsZXJcXG5ldmlsbGVzdFxcbmV2aWxuZXNzL01cXG5ldmluY2UvRFNHXFxuZXZpc2NlcmF0ZS9EU0dOXFxuZXZpc2NlcmF0aW9uL01cXG5ldm9jYXRpb24vTVNcXG5ldm9jYXRpdmUvWVxcbmV2b2tlL0RTR1xcbmV2b2x1dGlvbi9NXFxuZXZvbHV0aW9uYXJ5XFxuZXZvbHV0aW9uaXN0L1NNXFxuZXZvbHZlL0RTR1xcbmV3ZS9SU01aXFxuZXdlci9NXFxuZXgvTVNcXG5leGFieXRlL01TXFxuZXhhY2VyYmF0ZS9HTkRTXFxuZXhhY2VyYmF0aW9uL01cXG5leGFjdC9TUERSWVRHXFxuZXhhY3RpbmcvWVxcbmV4YWN0aW9uL01cXG5leGFjdGl0dWRlL01cXG5leGFjdG5lc3MvSU1cXG5leGFnZ2VyYXRlL1hEU0dOXFxuZXhhZ2dlcmF0ZWQvWVxcbmV4YWdnZXJhdGlvbi9NXFxuZXhhZ2dlcmF0b3IvTVNcXG5leGFqb3VsZS9TXFxuZXhhbHQvU0RHXFxuZXhhbHRhdGlvbi9NXFxuZXhhbS9NU1xcbmV4YW1pbmF0aW9uL0FNU1xcbmV4YW1pbmUvQUdEU1xcbmV4YW1pbmVyL01TXFxuZXhhbXBsZS9NR0RTXFxuZXhhbXBsZWQvVVxcbmV4YXNwZXJhdGUvRFNHTlxcbmV4YXNwZXJhdGVkL1lcXG5leGFzcGVyYXRpbmcvWVxcbmV4YXNwZXJhdGlvbi9NXFxuZXhjYXZhdGUvR05EU1hcXG5leGNhdmF0aW9uL01cXG5leGNhdmF0b3IvU01cXG5leGNlZWQvR1NEXFxuZXhjZWVkaW5nL1lcXG5leGNlbC9TXFxuZXhjZWxsZWRcXG5leGNlbGxlbmNlL01cXG5leGNlbGxlbmN5L1NNXFxuZXhjZWxsZW50L1lcXG5leGNlbGxpbmdcXG5leGNlbHNpb3IvTVxcbmV4Y2VwdC9HU0RcXG5leGNlcHRpb24vQlNNXFxuZXhjZXB0aW9uYWJsZS9VXFxuZXhjZXB0aW9uYWwvVVlcXG5leGNlcHRpb25hbGlzbVxcbmV4Y2VycHQvTURHU1xcbmV4Y2Vzcy9WTVNcXG5leGNlc3NpdmUvWVxcbmV4Y2hhbmdlL0RTTUdcXG5leGNoYW5nZWFibGVcXG5leGNoZXF1ZXIvU01cXG5leGNpc2UvWERTTUdOXFxuZXhjaXNpb24vTVxcbmV4Y2l0YWJpbGl0eS9NXFxuZXhjaXRhYmx5XFxuZXhjaXRhdGlvbi9NXFxuZXhjaXRlL0JEUlNMWkdcXG5leGNpdGVkL1lcXG5leGNpdGVtZW50L1NNXFxuZXhjaXRlci9NXFxuZXhjaXRpbmcvWVxcbmV4Y2l0b25cXG5leGNsXFxuZXhjbGFpbS9ER1NcXG5leGNsYW1hdGlvbi9TTVxcbmV4Y2xhbWF0b3J5XFxuZXhjbHVkZS9HRFNcXG5leGNsdXNpb24vTVNcXG5leGNsdXNpb25hcnlcXG5leGNsdXNpdmUvUE1ZU1xcbmV4Y2x1c2l2ZW5lc3MvTVxcbmV4Y2x1c2l2aXR5L01cXG5leGNvbW11bmljYXRlL0dORFNYXFxuZXhjb21tdW5pY2F0aW9uL01cXG5leGNvcmlhdGUvRFNHTlhcXG5leGNvcmlhdGlvbi9NXFxuZXhjcmVtZW50L01cXG5leGNyZW1lbnRhbFxcbmV4Y3Jlc2NlbmNlL01TXFxuZXhjcmVzY2VudFxcbmV4Y3JldGEvTVxcbmV4Y3JldGUvWEdORFNcXG5leGNyZXRpb24vTVxcbmV4Y3JldG9yeVxcbmV4Y3J1Y2lhdGluZy9ZXFxuZXhjdWxwYXRlL0RTR05cXG5leGN1bHBhdGlvbi9NXFxuZXhjdWxwYXRvcnlcXG5leGN1cnNpb24vTVNcXG5leGN1cnNpb25pc3QvTVNcXG5leGN1cnNpdmUvWVBcXG5leGN1cnNpdmVuZXNzL01cXG5leGN1c2FibGUvSVxcbmV4Y3VzYWJseS9JXFxuZXhjdXNlL0RTQk1HXFxuZXhjdXNlZC9VXFxuZXhlYy9NU1xcbmV4ZWNyYWJsZVxcbmV4ZWNyYWJseVxcbmV4ZWNyYXRlL0RTR05cXG5leGVjcmF0aW9uL01cXG5leGVjdXRlL0JYR05WRFNcXG5leGVjdXRpb24vWk1SXFxuZXhlY3V0aW9uZXIvTVxcbmV4ZWN1dGl2ZS9TTVxcbmV4ZWN1dG9yL01TXFxuZXhlY3V0cmljZXNcXG5leGVjdXRyaXgvTVxcbmV4ZWdlc2VzXFxuZXhlZ2VzaXMvTVxcbmV4ZWdldGljXFxuZXhlZ2V0aWNhbFxcbmV4ZW1wbGFyL1NNXFxuZXhlbXBsYXJ5XFxuZXhlbXBsaWZpY2F0aW9uL01cXG5leGVtcGxpZnkvR0RTWE5cXG5leGVtcHQvU0dEXFxuZXhlbXB0aW9uL1NNXFxuZXhlcmNpc2UvRFJTTVpHXFxuZXhlcmNpc2VyL01cXG5leGVydC9TREdcXG5leGVydGlvbi9NU1xcbmV4ZXVudFxcbmV4Zm9saWF0ZS9HTkRTXFxuZXhoYWxhdGlvbi9NU1xcbmV4aGFsZS9EU0dcXG5leGhhdXN0L0dWTURTXFxuZXhoYXVzdGlibGUvSVxcbmV4aGF1c3Rpb24vTVxcbmV4aGF1c3RpdmUvWVBcXG5leGhhdXN0aXZlbmVzcy9NXFxuZXhoaWJpdC9HTURTXFxuZXhoaWJpdGlvbi9NU1xcbmV4aGliaXRpb25pc20vTVxcbmV4aGliaXRpb25pc3QvTVNcXG5leGhpYml0b3IvU01cXG5leGhpbGFyYXRlL0RTR05cXG5leGhpbGFyYXRpb24vTVxcbmV4aG9ydC9TREdcXG5leGhvcnRhdGlvbi9NU1xcbmV4aHVtYXRpb24vTVNcXG5leGh1bWUvRFNHXFxuZXhpZ2VuY2UvTVNcXG5leGlnZW5jeS9TTVxcbmV4aWdlbnRcXG5leGlndWl0eS9NXFxuZXhpZ3VvdXNcXG5leGlsZS9EU01HXFxuZXhpbGljXFxuZXhpc3QvU0RHXFxuZXhpc3RlbmNlL01TXFxuZXhpc3RlbnRcXG5leGlzdGVudGlhbC9ZXFxuZXhpc3RlbnRpYWxpc20vTVxcbmV4aXN0ZW50aWFsaXN0L01TXFxuZXhpdC9NREdTXFxuZXhvYmlvbG9neS9NXFxuZXhvZHVzL01TXFxuZXhvZ2Vub3VzXFxuZXhvbi9NU1xcbmV4b25lcmF0ZS9HTkRTXFxuZXhvbmVyYXRpb24vTVxcbmV4b3BsYW5ldC9NU1xcbmV4b3JiaXRhbmNlL01cXG5leG9yYml0YW50L1lcXG5leG9yY2lzZS9EU0dcXG5leG9yY2lzbS9TTVxcbmV4b3JjaXN0L1NNXFxuZXhvc2tlbGV0b24vU01cXG5leG9zcGhlcmUvU01cXG5leG90aGVybWljXFxuZXhvdGljL1NNXFxuZXhvdGljYVxcbmV4b3RpY2FsbHlcXG5leG90aWNpc20vTVxcbmV4cFxcbmV4cGFuZC9CR1NEXFxuZXhwYW5zZS9YTU5WU1xcbmV4cGFuc2libGVcXG5leHBhbnNpb24vTVxcbmV4cGFuc2lvbmFyeVxcbmV4cGFuc2lvbmlzbS9NXFxuZXhwYW5zaW9uaXN0L01TXFxuZXhwYW5zaXZlL1lQXFxuZXhwYW5zaXZlbmVzcy9NXFxuZXhwYXQvU1xcbmV4cGF0aWF0ZS9HTkRTXFxuZXhwYXRpYXRpb24vTVxcbmV4cGF0cmlhdGUvRFNNR05cXG5leHBhdHJpYXRpb24vTVxcbmV4cGVjdC9HU0RcXG5leHBlY3RhbmN5L01cXG5leHBlY3RhbnQvWVxcbmV4cGVjdGF0aW9uL1NNXFxuZXhwZWN0b3JhbnQvU01cXG5leHBlY3RvcmF0ZS9EU0dOXFxuZXhwZWN0b3JhdGlvbi9NXFxuZXhwZWRpZW5jZS9JTVxcbmV4cGVkaWVuY2VzXFxuZXhwZWRpZW5jaWVzXFxuZXhwZWRpZW5jeS9JTVxcbmV4cGVkaWVudC9TTVlcXG5leHBlZGl0ZS9EUlNaR05YXFxuZXhwZWRpdGVyL01cXG5leHBlZGl0aW9uL01cXG5leHBlZGl0aW9uYXJ5XFxuZXhwZWRpdGlvdXMvUFlcXG5leHBlZGl0aW91c25lc3MvTVxcbmV4cGVsL1NcXG5leHBlbGxlZFxcbmV4cGVsbGluZ1xcbmV4cGVuZC9HU0JEXFxuZXhwZW5kYWJsZS9TTVxcbmV4cGVuZGl0dXJlL1NNXFxuZXhwZW5zZS9NU1xcbmV4cGVuc2l2ZS9JWVBcXG5leHBlbnNpdmVuZXNzL0lNXFxuZXhwZXJpZW5jZS9JTURcXG5leHBlcmllbmNlc1xcbmV4cGVyaWVuY2luZ1xcbmV4cGVyaWVudGlhbFxcbmV4cGVyaW1lbnQvTURSU1pHXFxuZXhwZXJpbWVudGFsL1lcXG5leHBlcmltZW50YXRpb24vTVxcbmV4cGVyaW1lbnRlci9NXFxuZXhwZXJ0L1NQTVlcXG5leHBlcnRpc2UvTVxcbmV4cGVydG5lc3MvTVxcbmV4cGlhdGUvR05EU1xcbmV4cGlhdGlvbi9NXFxuZXhwaWF0b3J5XFxuZXhwaXJhdGlvbi9NXFxuZXhwaXJlL0RTR1xcbmV4cGlyZWQvVVxcbmV4cGlyeS9NXFxuZXhwbGFpbi9BREdTXFxuZXhwbGFpbmFibGVcXG5leHBsYWluZWQvVVxcbmV4cGxhbmF0aW9uL01TXFxuZXhwbGFuYXRvcnlcXG5leHBsZXRpdmUvTVNcXG5leHBsaWNhYmxlL0lcXG5leHBsaWNhdGUvWEdORFNcXG5leHBsaWNhdGlvbi9NXFxuZXhwbGljaXQvUFlcXG5leHBsaWNpdG5lc3MvTVxcbmV4cGxvZGUvR0RTXFxuZXhwbG9pdC9aR0JNRFJTXFxuZXhwbG9pdGF0aW9uL01cXG5leHBsb2l0YXRpdmVcXG5leHBsb2l0ZWQvVVxcbmV4cGxvaXRlci9NXFxuZXhwbG9yYXRpb24vTVNcXG5leHBsb3JhdG9yeVxcbmV4cGxvcmUvWkdEUlNcXG5leHBsb3JlZC9VXFxuZXhwbG9yZXIvTVxcbmV4cGxvc2lvbi9TTVxcbmV4cGxvc2l2ZS9TUE1ZXFxuZXhwbG9zaXZlbmVzcy9NXFxuZXhwby9NU1xcbmV4cG9uZW50L01TXFxuZXhwb25lbnRpYWwvWVxcbmV4cG9uZW50aWF0aW9uXFxuZXhwb3J0L0JTWkdNRFJcXG5leHBvcnRhdGlvbi9NXFxuZXhwb3J0ZXIvTVxcbmV4cG9zZS9EU01HXFxuZXhwb3NlZC9VXFxuZXhwb3NpdGlvbi9TTVxcbmV4cG9zaXRvci9TTVxcbmV4cG9zaXRvcnlcXG5leHBvc3R1bGF0ZS9HTlhEU1xcbmV4cG9zdHVsYXRpb24vTVxcbmV4cG9zdXJlL01TXFxuZXhwb3VuZC9aR0RSU1xcbmV4cG91bmRlci9NXFxuZXhwcmVzcy9HVk1EU1lcXG5leHByZXNzZWQvVVxcbmV4cHJlc3NpYmxlL0lcXG5leHByZXNzaW9uL1NNXFxuZXhwcmVzc2lvbmlzbS9NXFxuZXhwcmVzc2lvbmlzdC9TTVxcbmV4cHJlc3Npb25pc3RpY1xcbmV4cHJlc3Npb25sZXNzL1lcXG5leHByZXNzaXZlL1BZXFxuZXhwcmVzc2l2ZW5lc3MvTVxcbmV4cHJlc3N3YXkvU01cXG5leHByb3ByaWF0ZS9HTlhEU1xcbmV4cHJvcHJpYXRpb24vTVxcbmV4cHJvcHJpYXRvci9TTVxcbmV4cHVsc2lvbi9NU1xcbmV4cHVuZ2UvR0RTXFxuZXhwdXJnYXRlL0RTR05YXFxuZXhwdXJnYXRlZC9VXFxuZXhwdXJnYXRpb24vTVxcbmV4cXVpc2l0ZS9ZUFxcbmV4cXVpc2l0ZW5lc3MvTVxcbmV4dFxcbmV4dGFudFxcbmV4dGVtcG9yYW5lb3VzL1BZXFxuZXh0ZW1wb3JhbmVvdXNuZXNzL01cXG5leHRlbXBvcmVcXG5leHRlbXBvcml6YXRpb24vTVxcbmV4dGVtcG9yaXplL0dEU1xcbmV4dGVuZC9TWkdEUkJcXG5leHRlbmRlci9NXFxuZXh0ZW5zaWJpbGl0eVxcbmV4dGVuc2libGVcXG5leHRlbnNpb24vU01cXG5leHRlbnNpb25hbFxcbmV4dGVuc2l2ZS9ZUFxcbmV4dGVuc2l2ZW5lc3MvTVxcbmV4dGVudC9TTVxcbmV4dGVudWF0ZS9EU0dOXFxuZXh0ZW51YXRpb24vTVxcbmV4dGVyaW9yL01TXFxuZXh0ZXJtaW5hdGUvRFNYR05cXG5leHRlcm1pbmF0aW9uL01cXG5leHRlcm1pbmF0b3IvTVNcXG5leHRlcm5hbC9NWVNcXG5leHRlcm5hbGl6YXRpb24vU01cXG5leHRlcm5hbGl6ZS9EU0dcXG5leHRpbmN0L0dEU1xcbmV4dGluY3Rpb24vTVNcXG5leHRpbmd1aXNoL1pHQkRSU1xcbmV4dGluZ3Vpc2hhYmxlL0lcXG5leHRpbmd1aXNoZXIvTVxcbmV4dGlycGF0ZS9HTkRTXFxuZXh0aXJwYXRpb24vTVxcbmV4dG9sL1NcXG5leHRvbGxlZFxcbmV4dG9sbGluZ1xcbmV4dG9ydC9TR0RcXG5leHRvcnRpb24vTVJaXFxuZXh0b3J0aW9uYXRlL1lcXG5leHRvcnRpb25lci9NXFxuZXh0b3J0aW9uaXN0L01TXFxuZXh0cmEvU01cXG5leHRyYWNlbGx1bGFyXFxuZXh0cmFjdC9NREdWU1xcbmV4dHJhY3Rpb24vU01cXG5leHRyYWN0b3IvTVNcXG5leHRyYWN1cnJpY3VsYXJcXG5leHRyYWRpdGUvR05CWERTXFxuZXh0cmFkaXRpb24vTVxcbmV4dHJhanVkaWNpYWxcXG5leHRyYWxlZ2FsXFxuZXh0cmFtYXJpdGFsXFxuZXh0cmFtdXJhbFxcbmV4dHJhbmVvdXMvWVxcbmV4dHJhb3JkaW5haXJlXFxuZXh0cmFvcmRpbmFyaWx5XFxuZXh0cmFvcmRpbmFyeVxcbmV4dHJhcG9sYXRlL1hHTkRTXFxuZXh0cmFwb2xhdGlvbi9NXFxuZXh0cmFzZW5zb3J5XFxuZXh0cmF0ZXJyZXN0cmlhbC9NU1xcbmV4dHJhdGVycml0b3JpYWxcXG5leHRyYXRlcnJpdG9yaWFsaXR5L01cXG5leHRyYXZhZ2FuY2UvTVNcXG5leHRyYXZhZ2FudC9ZXFxuZXh0cmF2YWdhbnphL01TXFxuZXh0cmF2ZWhpY3VsYXJcXG5leHRyZW1lL1BNWVRSU1xcbmV4dHJlbWVuZXNzL01cXG5leHRyZW1pc20vTVxcbmV4dHJlbWlzdC9NU1xcbmV4dHJlbWl0eS9TTVxcbmV4dHJpY2FibGUvSVxcbmV4dHJpY2F0ZS9HTkRTXFxuZXh0cmljYXRpb24vTVxcbmV4dHJpbnNpY1xcbmV4dHJpbnNpY2FsbHlcXG5leHRyb3ZlcnNpb24vTVxcbmV4dHJvdmVydC9TTURcXG5leHRydWRlL0dEU1xcbmV4dHJ1c2lvbi9TTVxcbmV4dHJ1c2l2ZVxcbmV4dWJlcmFuY2UvTVxcbmV4dWJlcmFudC9ZXFxuZXh1ZGF0aW9uL01cXG5leHVkZS9EU0dcXG5leHVsdC9TREdcXG5leHVsdGFudC9ZXFxuZXh1bHRhdGlvbi9NXFxuZXh1cmIvU01cXG5leHVyYmFuXFxuZXh1cmJhbml0ZS9TTVxcbmV4dXJiaWEvTVxcbmV5ZS9EU01cXG5leWViYWxsL0dNRFNcXG5leWVicm93L1NNXFxuZXllZHJvcHBlci9TTVxcbmV5ZWZ1bC9TTVxcbmV5ZWdsYXNzL01TXFxuZXllaW5nXFxuZXllbGFzaC9NU1xcbmV5ZWxlc3NcXG5leWVsZXQvU01cXG5leWVsaWQvU01cXG5leWVsaW5lci9NU1xcbmV5ZW9wZW5lci9NU1xcbmV5ZW9wZW5pbmdcXG5leWVwaWVjZS9NU1xcbmV5ZXNpZ2h0L01cXG5leWVzb3JlL01TXFxuZXllc3RyYWluL01cXG5leWV0ZWV0aFxcbmV5ZXRvb3RoL01cXG5leWV3YXNoL01cXG5leWV3aXRuZXNzL01TXFxuZi9DSUFWVFJcXG5mTVJJXFxuZmEvTVxcbmZhYlxcbmZhYmxlL0RTTVxcbmZhYnJpYy9TTVxcbmZhYnJpY2F0ZS9EU0dOWFxcbmZhYnJpY2F0aW9uL01cXG5mYWJyaWNhdG9yL1NNXFxuZmFidWxvdXMvWVxcbmZhY2FkZS9TTVxcbmZhY2Unc1xcbmZhY2UvQUNTREdcXG5mYWNlY2xvdGgvTVxcbmZhY2VjbG90aHNcXG5mYWNlbGVzc1xcbmZhY2VwYWxtL1NER1xcbmZhY2V0L1NNREdcXG5mYWNldGlvdXMvWVBcXG5mYWNldGlvdXNuZXNzL01cXG5mYWNpYWwvU01ZXFxuZmFjaWxlL1lcXG5mYWNpbGl0YXRlL0dORFNcXG5mYWNpbGl0YXRpb24vTVxcbmZhY2lsaXRhdG9yL01TXFxuZmFjaWxpdHkvU01cXG5mYWNpbmcvU01cXG5mYWNzaW1pbGUvRFNNXFxuZmFjc2ltaWxlaW5nXFxuZmFjdC9NU1xcbmZhY3Rpb24vU01cXG5mYWN0aW9uYWxcXG5mYWN0aW9uYWxpc20vTVxcbmZhY3Rpb3VzXFxuZmFjdGl0aW91c1xcbmZhY3RvaWQvU01cXG5mYWN0b3Inc1xcbmZhY3Rvci9BU0RHXFxuZmFjdG9yaWFsL01TXFxuZmFjdG9yaXphdGlvblxcbmZhY3Rvcml6ZS9HRFNcXG5mYWN0b3J5L1NNXFxuZmFjdG90dW0vU01cXG5mYWN0dWFsL1lcXG5mYWN1bHR5L1NNXFxuZmFkL0dTTURcXG5mYWRkaXNoL1BcXG5mYWRkaXN0L01TXFxuZmFkZHkvUFxcbmZhZGUvTVNcXG5mYWRpbmcvVVxcbmZhZXJpZS9TTVxcbmZhZmYvREdTXFxuZmFnL1NNXFxuZmFnZ2VkXFxuZmFnZ2luZ1xcbmZhZ2dvdC9TTVxcbmZhZ290L1NNR1xcbmZhaWVuY2UvTVxcbmZhaWwvREdKU1xcbmZhaWxpbmcvTVxcbmZhaWxsZS9NXFxuZmFpbHVyZS9TTVxcbmZhaW4vUlRcXG5mYWludC9TTURSWVRHUFxcbmZhaW50aGVhcnRlZFxcbmZhaW50bmVzcy9NXFxuZmFpci9NUllUR0pQU1xcbmZhaXJncm91bmQvTVNcXG5mYWlyaW5nL01cXG5mYWlybmVzcy9VTVxcbmZhaXJ3YXkvU01cXG5mYWlyeS9TTVxcbmZhaXJ5bGFuZC9TTVxcbmZhaXRoL01cXG5mYWl0aGZ1bCdzXFxuZmFpdGhmdWwvVVBZXFxuZmFpdGhmdWxuZXNzL1VNXFxuZmFpdGhmdWxzXFxuZmFpdGhsZXNzL1BZXFxuZmFpdGhsZXNzbmVzcy9NXFxuZmFpdGhzXFxuZmFqaXRhL1NNXFxuZmFqaXRhcy9NXFxuZmFrZS9NWkdEUlNcXG5mYWtlci9NXFxuZmFraXIvU01cXG5mYWxjb24vU01SWlxcbmZhbGNvbmVyL01cXG5mYWxjb25yeS9NXFxuZmFsbC9NTkdTXFxuZmFsbGFjaW91cy9ZXFxuZmFsbGFjeS9TTVxcbmZhbGxiYWNrXFxuZmFsbGliaWxpdHkvSU1cXG5mYWxsaWJsZS9QXFxuZmFsbGlibGVuZXNzL01cXG5mYWxsaWJseS9JXFxuZmFsbG9mZi9TTVxcbmZhbGxvdXQvTVxcbmZhbGxvdy9TTURHXFxuZmFsc2UvUFJZVFxcbmZhbHNlaG9vZC9TTVxcbmZhbHNlbmVzcy9NXFxuZmFsc2V0dG8vU01cXG5mYWxzaWUvU01cXG5mYWxzaWZpYWJsZVxcbmZhbHNpZmljYXRpb24vTVxcbmZhbHNpZmllci9NXFxuZmFsc2lmeS9EUlNaR05YXFxuZmFsc2l0eS9TTVxcbmZhbHRlci9HU0pNRFxcbmZhbHRlcmluZy9ZXFxuZmFtZSdzXFxuZmFtZS9EXFxuZmFtaWxpYWxcXG5mYW1pbGlhci9NWVNcXG5mYW1pbGlhcml0eS9VTVxcbmZhbWlsaWFyaXphdGlvbi9NXFxuZmFtaWxpYXJpemUvR0RTXFxuZmFtaWx5L1NNXFxuZmFtaW5lL1NNXFxuZmFtaXNoL0RTR1xcbmZhbW91cy9JWVxcbmZhbi9TTVxcbmZhbmF0aWMvU01cXG5mYW5hdGljYWwvWVxcbmZhbmF0aWNpc20vTVxcbmZhbmJveS9TTVxcbmZhbmNpYWJsZVxcbmZhbmNpZXIvTVxcbmZhbmNpZnVsL1lQXFxuZmFuY2lmdWxuZXNzL01cXG5mYW5jaWx5XFxuZmFuY2luZXNzL01cXG5mYW5jeS9EUlNNWlRHUFxcbmZhbmN5d29yay9NXFxuZmFuZGFuZ28vTVNcXG5mYW5kb21cXG5mYW5mYXJlL1NNXFxuZmFuZy9NRFNcXG5mYW5saWdodC9TTVxcbmZhbm5lZFxcbmZhbm5pbmdcXG5mYW5ueS9TTVxcbmZhbnRhaWwvTVNcXG5mYW50YXNpYS9TTVxcbmZhbnRhc2lzdC9TXFxuZmFudGFzaXplL0dEU1xcbmZhbnRhc3RpY1xcbmZhbnRhc3RpY2FsL1lcXG5mYW50YXN5L0RTTUdcXG5mYW56aW5lL01TXFxuZmFyXFxuZmFyYWQvU01cXG5mYXJhZGl6ZS9ER1xcbmZhcmF3YXlcXG5mYXJjZS9TTVxcbmZhcmNpY2FsL1lcXG5mYXJlL01HRFNcXG5mYXJld2VsbC9TTVxcbmZhcmluYS9NXFxuZmFyaW5hY2VvdXNcXG5mYXJtL01EUlpHU0pcXG5mYXJtZXIvTVxcbmZhcm1oYW5kL1NNXFxuZmFybWhvdXNlL1NNXFxuZmFybWluZy9NXFxuZmFybWxhbmQvTVNcXG5mYXJtc3RlYWQvTVNcXG5mYXJteWFyZC9NU1xcbmZhcm8vTVxcbmZhcnJhZ28vTVxcbmZhcnJhZ29lc1xcbmZhcnJpZXIvTVNcXG5mYXJyb3cvU01ER1xcbmZhcnNlZWluZ1xcbmZhcnNpZ2h0ZWQvUFxcbmZhcnNpZ2h0ZWRuZXNzL01cXG5mYXJ0L01ER1NcXG5mYXJ0aGVyXFxuZmFydGhlcm1vc3RcXG5mYXJ0aGVzdFxcbmZhcnRoaW5nL1NNXFxuZmFzY2lhL1NNXFxuZmFzY2ljbGUvU01cXG5mYXNjaW5hdGUvR05EU1hcXG5mYXNjaW5hdGluZy9ZXFxuZmFzY2luYXRpb24vTVxcbmZhc2Npc20vTVxcbmZhc2Npc3QvTVNcXG5mYXNjaXN0aWNcXG5mYXNoaW9uL1pHQk1EUlNcXG5mYXNoaW9uYWJsZS9VXFxuZmFzaGlvbmFibHkvVVxcbmZhc2hpb25lci9NXFxuZmFzaGlvbmlzdGEvTVNcXG5mYXN0L01EUlRHU1BcXG5mYXN0YmFjay9TTVxcbmZhc3RiYWxsL1NNXFxuZmFzdGVuL1VBR0RTXFxuZmFzdGVuZXIvU01cXG5mYXN0ZW5pbmcvTVNcXG5mYXN0aWRpb3VzL1BZXFxuZmFzdGlkaW91c25lc3MvTVxcbmZhc3RuZXNzL01TXFxuZmF0L0dTUE1EXFxuZmF0YWwvWVxcbmZhdGFsaXNtL01cXG5mYXRhbGlzdC9TTVxcbmZhdGFsaXN0aWNcXG5mYXRhbGlzdGljYWxseVxcbmZhdGFsaXR5L1NNXFxuZmF0YmFjay9NXFxuZmF0ZS9NU1xcbmZhdGVmdWwvWVBcXG5mYXRlZnVsbmVzcy9NXFxuZmF0aGVhZC9NRFNcXG5mYXRoZXIvU0dNRFlcXG5mYXRoZXJob29kL01cXG5mYXRoZXJsYW5kL01TXFxuZmF0aGVybGVzc1xcbmZhdGhvbS9TTURHQlxcbmZhdGhvbWFibGUvVVxcbmZhdGhvbWxlc3NcXG5mYXRpZ3VlL01EU0dcXG5mYXRpZ3Vlcy9NXFxuZmF0bmVzcy9NXFxuZmF0c28vU1xcbmZhdHRlbi9TREdcXG5mYXR0ZXJcXG5mYXR0ZXN0XFxuZmF0dGluZXNzL01cXG5mYXR0eS9SU01UUFxcbmZhdHVpdHkvTVxcbmZhdHVvdXMvWVBcXG5mYXR1b3VzbmVzcy9NXFxuZmF0d2EvU01cXG5mYXVjZXQvU01cXG5mYXVsdC9DU01ER1xcbmZhdWx0ZmluZGVyL1NNXFxuZmF1bHRmaW5kaW5nL01cXG5mYXVsdGlseVxcbmZhdWx0aW5lc3MvTVxcbmZhdWx0bGVzcy9QWVxcbmZhdWx0bGVzc25lc3MvTVxcbmZhdWx0eS9QUlRcXG5mYXVuL01TXFxuZmF1bmEvU01cXG5mYXV2aXNtL01cXG5mYXV2aXN0L1NNXFxuZmF1eFxcbmZhdmUvU1xcbmZhdm9yL0VTTURHXFxuZmF2b3JhYmxlL1VcXG5mYXZvcmFibHkvVVxcbmZhdm9yaXRlL1NNXFxuZmF2b3JpdGlzbS9NXFxuZmF3bi9NRFJaR1NcXG5mYXduZXIvTVxcbmZheC9HTURTXFxuZmF5L1RTTVJcXG5mYXplL0dEU1xcbmZhemVkL1VcXG5mZWFsdHkvTVxcbmZlYXIvTURHU1xcbmZlYXJmdWwvWVBcXG5mZWFyZnVsbmVzcy9NXFxuZmVhcmxlc3MvUFlcXG5mZWFybGVzc25lc3MvTVxcbmZlYXJzb21lXFxuZmVhc2liaWxpdHkvTVxcbmZlYXNpYmxlL0lVXFxuZmVhc2libHlcXG5mZWFzdC9TTURSWkdcXG5mZWFzdGVyL01cXG5mZWF0L01TXFxuZmVhdGhlci9TR01EXFxuZmVhdGhlcmJlZGRpbmcvTVxcbmZlYXRoZXJicmFpbmVkXFxuZmVhdGhlcmxlc3NcXG5mZWF0aGVyd2VpZ2h0L01TXFxuZmVhdGhlcnkvVFJcXG5mZWF0dXJlL0RTTUdcXG5mZWF0dXJlbGVzc1xcbmZlYnJpbGVcXG5mZWNhbFxcbmZlY2VzL01cXG5mZWNrbGVzcy9QWVxcbmZlY3VuZFxcbmZlY3VuZGF0ZS9HTkRTXFxuZmVjdW5kYXRpb24vTVxcbmZlY3VuZGl0eS9NXFxuZmVkL1NNXFxuZmVkZXJhbC9TTVlcXG5mZWRlcmFsaXNtL01cXG5mZWRlcmFsaXN0L01TXFxuZmVkZXJhbGl6YXRpb24vTVxcbmZlZGVyYWxpemUvR0RTXFxuZmVkZXJhdGUvRlhEU0dOXFxuZmVkZXJhdGlvbi9GTVxcbmZlZG9yYS9TTVxcbmZlZS9TTVxcbmZlZWJsZS9SVFBcXG5mZWVibGVuZXNzL01cXG5mZWVibHlcXG5mZWVkL01SWkdTSlxcbmZlZWRiYWNrL01cXG5mZWVkYmFnL1NNXFxuZmVlZGVyL01cXG5mZWVkaW5nL01cXG5mZWVkbG90L1NNXFxuZmVlbC9NUlpHU0pcXG5mZWVsZXIvTVxcbmZlZWxnb29kXFxuZmVlbGluZy9NWVxcbmZlZXRcXG5mZWlnbi9TREdcXG5mZWlnbmVkL1VcXG5mZWludC9TTURHXFxuZmVpc3R5L1RSXFxuZmVsZHNwYXIvTVxcbmZlbGljaXRhdGUvR05YRFNcXG5mZWxpY2l0YXRpb24vTVxcbmZlbGljaXRvdXMvWVxcbmZlbGljaXR5L0lTTVxcbmZlbGluZS9TTVxcbmZlbGwvTURSWlRHU1xcbmZlbGxhL1NcXG5mZWxsYXRpby9NXFxuZmVsbG93L1NNXFxuZmVsbG93bWFuL01cXG5mZWxsb3dtZW5cXG5mZWxsb3dzaGlwL01TXFxuZmVsb24vU01cXG5mZWxvbmlvdXNcXG5mZWxvbnkvU01cXG5mZWx0L01ER1NcXG5mZW1cXG5mZW1hbGUvUFNNXFxuZmVtYWxlbmVzcy9NXFxuZmVtaW5pbmUvU01ZXFxuZmVtaW5pbml0eS9NXFxuZmVtaW5pc20vTVxcbmZlbWluaXN0L1NNXFxuZmVtaW5pemUvRFNHXFxuZmVtb3JhbFxcbmZlbXVyL1NNXFxuZmVuL1NNXFxuZmVuY2UvRFJTTVpHXFxuZmVuY2VyL01cXG5mZW5jaW5nL01cXG5mZW5kL0NEUlpHU1xcbmZlbmRlci9DTVxcbmZlbmVzdHJhdGlvbi9NXFxuZmVubmVsL01cXG5mZW50YW55bC9NXFxuZmVyYWxcXG5mZXJtZW50L0ZDTVNcXG5mZXJtZW50YXRpb24vTVxcbmZlcm1lbnRlZFxcbmZlcm1lbnRpbmdcXG5mZXJtaXVtL01cXG5mZXJuL01TXFxuZmVybnkvUlRcXG5mZXJvY2lvdXMvUFlcXG5mZXJvY2lvdXNuZXNzL01cXG5mZXJvY2l0eS9NXFxuZmVycmV0L0dTTURcXG5mZXJyaWNcXG5mZXJyb21hZ25ldGljXFxuZmVycm9tYWduZXRpc21cXG5mZXJyb3VzXFxuZmVycnVsZS9NU1xcbmZlcnJ5L0RTTUdcXG5mZXJyeWJvYXQvU01cXG5mZXJyeW1hbi9NXFxuZmVycnltZW5cXG5mZXJ0aWxlL0lcXG5mZXJ0aWxpdHkvSU1cXG5mZXJ0aWxpemF0aW9uL01cXG5mZXJ0aWxpemUvRFJTWkdcXG5mZXJ0aWxpemVkL1VcXG5mZXJ0aWxpemVyL01cXG5mZXJ1bGUvU01cXG5mZXJ2ZW5jeS9NXFxuZmVydmVudC9ZXFxuZmVydmlkL1lcXG5mZXJ2b3IvTVxcbmZlc3MvRktHU0RcXG5mZXN0L01SWlZTXFxuZmVzdGFsXFxuZmVzdGVyL0dNRFxcbmZlc3RpdmFsL1NNXFxuZmVzdGl2ZS9ZUFxcbmZlc3RpdmVuZXNzL01cXG5mZXN0aXZpdHkvU01cXG5mZXN0b29uL0dNRFNcXG5mZXRhL01cXG5mZXRhbFxcbmZldGNoL0RSU1pHXFxuZmV0Y2hlci9NXFxuZmV0Y2hpbmcvWVxcbmZldGUvTUdEU1xcbmZldGlkL1BcXG5mZXRpZG5lc3MvTVxcbmZldGlzaC9NU1xcbmZldGlzaGlzbS9NXFxuZmV0aXNoaXN0L1NNXFxuZmV0aXNoaXN0aWNcXG5mZXRsb2NrL01TXFxuZmV0dGVyJ3NcXG5mZXR0ZXIvVVNHRFxcbmZldHRsZS9NXFxuZmV0dHVjY2luZS9NXFxuZmV0dXMvTVNcXG5mZXVkL01ER1NcXG5mZXVkYWxcXG5mZXVkYWxpc20vTVxcbmZldWRhbGlzdGljXFxuZmV2ZXIvU01EXFxuZmV2ZXJpc2gvWVBcXG5mZXZlcmlzaG5lc3MvTVxcbmZldy9UUE1SXFxuZmV3bmVzcy9NXFxuZmV5XFxuZmV6L01cXG5mZXp6ZXNcXG5mZlxcbmZpYW5jZS9DTVxcbmZpYW5jZWUvTVNcXG5maWFuY2VzXFxuZmlhc2NvL01cXG5maWFzY29lc1xcbmZpYXQvTVNcXG5maWIvWlNNUlxcbmZpYmJlZFxcbmZpYmJlci9TTVxcbmZpYmJpbmdcXG5maWJlci9NXFxuZmliZXJib2FyZC9NXFxuZmliZXJmaWxsL01cXG5maWJlcmdsYXNzL01cXG5maWJyaWwvU01cXG5maWJyaWxsYXRlL0dORFNcXG5maWJyaWxsYXRpb24vTVxcbmZpYnJpbi9NXFxuZmlicm9pZFxcbmZpYnJvc2lzL01cXG5maWJyb3VzXFxuZmlidWxhL01cXG5maWJ1bGFlXFxuZmlidWxhclxcbmZpY2hlL1NNXFxuZmljaHUvU01cXG5maWNrbGUvUlBUXFxuZmlja2xlbmVzcy9NXFxuZmljdGlvbi9NU1xcbmZpY3Rpb25hbC9ZXFxuZmljdGlvbmFsaXphdGlvbi9TTVxcbmZpY3Rpb25hbGl6ZS9EU0dcXG5maWN0aXRpb3VzL1lcXG5maWN0aXZlXFxuZmljdXMvTVxcbmZpZGRsZS9EUlNNWkdcXG5maWRkbGVyL01cXG5maWRkbGVzdGlja3NcXG5maWRkbHkvVFJcXG5maWRlbGl0eS9JTVxcbmZpZGdldC9TR01EXFxuZmlkZ2V0eVxcbmZpZHVjaWFyeS9TTVxcbmZpZVxcbmZpZWYvTVNcXG5maWVmZG9tL01TXFxuZmllbGQvSVNNUlpcXG5maWVsZGVkXFxuZmllbGRlci9JTVxcbmZpZWxkaW5nXFxuZmllbGRzbWFuXFxuZmllbGRzbWVuXFxuZmllbGR3b3JrL01SWlxcbmZpZWxkd29ya2VyL01cXG5maWVuZC9TTVxcbmZpZW5kaXNoL1lcXG5maWVyY2UvUFJZVFxcbmZpZXJjZW5lc3MvTVxcbmZpZXJpbmVzcy9NXFxuZmllcnkvUlBUXFxuZmllc3RhL1NNXFxuZmlmZS9NWlJTXFxuZmlmZXIvTVxcbmZpZnRlZW4vTUhTXFxuZmlmdGVlbnRoL01cXG5maWZ0ZWVudGhzXFxuZmlmdGgvTVlcXG5maWZ0aHNcXG5maWZ0aWV0aC9NXFxuZmlmdGlldGhzXFxuZmlmdHkvU01IXFxuZmlnL1NMTVxcbmZpZ2h0L1NNUlpHXFxuZmlnaHRiYWNrXFxuZmlnaHRlci9JTVNcXG5maWdodGluZy9JTVxcbmZpZ21lbnQvTVNcXG5maWd1cmF0aW9uL0ZNXFxuZmlndXJhdGl2ZS9ZXFxuZmlndXJlJ3NcXG5maWd1cmUvRkVHU0RcXG5maWd1cmVoZWFkL1NNXFxuZmlndXJpbmUvTVNcXG5maWxhbWVudC9NU1xcbmZpbGFtZW50b3VzXFxuZmlsYmVydC9NU1xcbmZpbGNoL0RTR1xcbmZpbGUncy9LQ1xcbmZpbGUvQ0FLR0RTXFxuZmlsZW5hbWUvU1xcbmZpbGVyL0NTTVxcbmZpbGV0XFxuZmlsaWFsXFxuZmlsaWJ1c3Rlci9NRFJTWkdcXG5maWxpYnVzdGVyZXIvTVxcbmZpbGlncmVlL0RTTVxcbmZpbGlncmVlaW5nXFxuZmlsaW5nJ3NcXG5maWxpbmdzXFxuZmlsbCdzXFxuZmlsbC9BSURHU1xcbmZpbGxlZC9VXFxuZmlsbGVyL01TXFxuZmlsbGV0L01ER1NcXG5maWxsaW5nL1NNXFxuZmlsbGlwL01ER1NcXG5maWxseS9TTVxcbmZpbG0vTURHU1xcbmZpbG1pbmVzcy9NXFxuZmlsbW1ha2VyL1NNXFxuZmlsbXN0cmlwL01TXFxuZmlsbXkvVFBSXFxuZmlsb1xcbmZpbHRlci9NRFJCU1pHXFxuZmlsdGVyZWQvVVxcbmZpbHRlcmVyL01cXG5maWx0aC9NXFxuZmlsdGhpbHlcXG5maWx0aGluZXNzL01cXG5maWx0aHkvUlBUXFxuZmlsdHJhdGUnc1xcbmZpbHRyYXRlL0lHTkRTXFxuZmlsdHJhdGlvbi9JTVxcbmZpbi9TTVJcXG5maW5hZ2xlL0RSU1pHXFxuZmluYWdsZXIvTVxcbmZpbmFsL1NNWVxcbmZpbmFsZS9NU1xcbmZpbmFsaXN0L1NNXFxuZmluYWxpdHkvTVxcbmZpbmFsaXphdGlvbi9NXFxuZmluYWxpemUvRFNHXFxuZmluYW5jZSdzXFxuZmluYW5jZS9BRFNHXFxuZmluYW5jaWFsL1lcXG5maW5hbmNpZXIvTVNcXG5maW5hbmNpbmcvTVxcbmZpbmNoL01TXFxuZmluZC9KTVJaR1NcXG5maW5kZXIvTVxcbmZpbmRpbmcvTVxcbmZpbmRpbmdzL01cXG5maW5lJ3MvRlxcbmZpbmUvQ0FGVEdEU1xcbmZpbmVseVxcbmZpbmVuZXNzL01cXG5maW5lcnkvQU1cXG5maW5lc3B1blxcbmZpbmVzc2UvRFNNR1xcbmZpbmdlci9NREdTSlxcbmZpbmdlcmJvYXJkL1NNXFxuZmluZ2VyaW5nL01cXG5maW5nZXJsaW5nL1NNXFxuZmluZ2VybWFyay9TXFxuZmluZ2VybmFpbC9TTVxcbmZpbmdlcnByaW50L1NHTURcXG5maW5nZXJ0aXAvTVNcXG5maW5pYWwvTVNcXG5maW5pY2FsXFxuZmluaWNraW5lc3MvTVxcbmZpbmlja3kvUlBUXFxuZmluaXMvTVNcXG5maW5pc2gnc1xcbmZpbmlzaC9BRFNHXFxuZmluaXNoZWQvVVxcbmZpbmlzaGVyL01TXFxuZmluaXRlL0lZXFxuZmluay9NREdTXFxuZmlubmVkXFxuZmlubnlcXG5maXIvWkdTSk1EUkhcXG5maXJlL01TXFxuZmlyZWFybS9TTVxcbmZpcmViYWxsL01TXFxuZmlyZWJvbWIvTURTSkdcXG5maXJlYm94L01TXFxuZmlyZWJyYW5kL1NNXFxuZmlyZWJyZWFrL1NNXFxuZmlyZWJyaWNrL1NNXFxuZmlyZWJ1Zy9TTVxcbmZpcmVjcmFja2VyL1NNXFxuZmlyZWRhbXAvTVxcbmZpcmVmaWdodC9NUlNaR1xcbmZpcmVmaWdodGVyL01cXG5maXJlZmlnaHRpbmcvTVxcbmZpcmVmbHkvU01cXG5maXJlZ3VhcmQvU1xcbmZpcmVob3VzZS9TTVxcbmZpcmVsaWdodC9aTVJcXG5maXJlbWFuL01cXG5maXJlbWVuXFxuZmlyZXBsYWNlL1NNXFxuZmlyZXBsdWcvTVNcXG5maXJlcG93ZXIvTVxcbmZpcmVwcm9vZi9EU0dcXG5maXJlci9NXFxuZmlyZXNjcmVlbi9TXFxuZmlyZXNpZGUvTVNcXG5maXJlc3Rvcm0vTVNcXG5maXJldHJhcC9NU1xcbmZpcmV0cnVjay9NU1xcbmZpcmV3YWxsL01TXFxuZmlyZXdhdGVyL01cXG5maXJld29vZC9NXFxuZmlyZXdvcmsvU01cXG5maXJtL01EUllQVEdTXFxuZmlybWFtZW50L1NNXFxuZmlybW5lc3MvTVxcbmZpcm13YXJlL01cXG5maXJzdC9TTVlcXG5maXJzdGJvcm4vU01cXG5maXJzdGhhbmRcXG5maXJ0aC9NXFxuZmlydGhzXFxuZmlzY2FsL01ZU1xcbmZpc2gvTURSU1pHXFxuZmlzaGJvd2wvU01cXG5maXNoY2FrZS9TTVxcbmZpc2hlci9NXFxuZmlzaGVybWFuL01cXG5maXNoZXJtZW5cXG5maXNoZXJ5L1NNXFxuZmlzaGhvb2svU01cXG5maXNoaWx5XFxuZmlzaGluZXNzL01cXG5maXNoaW5nL01cXG5maXNobW9uZ2VyL01TXFxuZmlzaG5ldC9TTVxcbmZpc2hwb25kL01TXFxuZmlzaHRhaWwvREdTXFxuZmlzaHdpZmUvTVxcbmZpc2h3aXZlc1xcbmZpc2h5L1RSUFxcbmZpc3NpbGVcXG5maXNzaW9uL0JNXFxuZmlzc3VyZS9TTVxcbmZpc3QvTVNcXG5maXN0ZmlnaHQvTVNcXG5maXN0ZnVsL1NNXFxuZmlzdGljdWZmcy9NXFxuZmlzdHVsYS9TTVxcbmZpc3R1bG91cy9NXFxuZml0L0tBTVNcXG5maXRmdWwvWVBcXG5maXRmdWxuZXNzL01cXG5maXRseVxcbmZpdG1lbnQvU1xcbmZpdG5lc3MvVU1cXG5maXR0ZWQvVUFcXG5maXR0ZXIvTVNcXG5maXR0ZXN0XFxuZml0dGluZy9TTVlcXG5maXZlL01aUlNcXG5maXgvWkdCSk1EUlNcXG5maXhhdGUvR05WRFNYXFxuZml4YXRpb24vTVxcbmZpeGF0aXZlL01TXFxuZml4ZWQvWVxcbmZpeGVyL01cXG5maXhpbmdzL01cXG5maXhpdHkvTVxcbmZpeHR1cmUvTVNcXG5maXp6L01EU0dcXG5maXp6bGUvRFNNR1xcbmZpenp5L1JUXFxuZmpvcmQvU01cXG5mbC9KREdcXG5mbGFiL01cXG5mbGFiYmVyZ2FzdC9TR0RcXG5mbGFiYmlseVxcbmZsYWJiaW5lc3MvTVxcbmZsYWJieS9SUFRcXG5mbGFjY2lkL1lcXG5mbGFjY2lkaXR5L01cXG5mbGFjay9TTVxcbmZsYWcvTVNcXG5mbGFnZWxsYVxcbmZsYWdlbGxhbnQvU1xcbmZsYWdlbGxhdGUvR05EU1xcbmZsYWdlbGxhdGlvbi9NXFxuZmxhZ2VsbHVtL01cXG5mbGFnZ2VkXFxuZmxhZ2dpbmcvVVxcbmZsYWdtYW4vTVxcbmZsYWdtZW5cXG5mbGFnb24vTVNcXG5mbGFncG9sZS9TTVxcbmZsYWdyYW5jZS9NXFxuZmxhZ3JhbmN5L01cXG5mbGFncmFudC9ZXFxuZmxhZ3NoaXAvU01cXG5mbGFnc3RhZmYvTVNcXG5mbGFnc3RvbmUvTVNcXG5mbGFpbC9TR01EXFxuZmxhaXIvU01cXG5mbGFrL01cXG5mbGFrZS9EU01HXFxuZmxha2luZXNzL01cXG5mbGFreS9UUlBcXG5mbGFtYWdlXFxuZmxhbWJlL01TXFxuZmxhbWJlZWRcXG5mbGFtYmVpbmdcXG5mbGFtYm95YW5jZS9NXFxuZmxhbWJveWFuY3kvTVxcbmZsYW1ib3lhbnQvWVxcbmZsYW1lL0RSU0pNWkdcXG5mbGFtZW5jby9NU1xcbmZsYW1lcHJvb2YvREdTXFxuZmxhbWV0aHJvd2VyL1NNXFxuZmxhbWluZ28vTVNcXG5mbGFtbWFiaWxpdHkvSU1cXG5mbGFtbWFibGUvU01cXG5mbGFuL01TXFxuZmxhbmdlL01TXFxuZmxhbmsvU1pHTURSXFxuZmxhbmtlci9NXFxuZmxhbm5lbC9TR01EXFxuZmxhbm5lbGV0dGUvTVxcbmZsYXAvTVNcXG5mbGFwamFjay9NU1xcbmZsYXBwZWRcXG5mbGFwcGVyL1NNXFxuZmxhcHBpbmdcXG5mbGFyZS9EU01HXFxuZmxhcmV1cC9TTVxcbmZsYXNoL1pUR01EUlNcXG5mbGFzaGJhY2svU01cXG5mbGFzaGJ1bGIvU01cXG5mbGFzaGNhcmQvU01cXG5mbGFzaGN1YmUvU01cXG5mbGFzaGVyL01cXG5mbGFzaGd1bi9TTVxcbmZsYXNoaWx5XFxuZmxhc2hpbmVzcy9NXFxuZmxhc2hpbmcvTVxcbmZsYXNobGlnaHQvTVNcXG5mbGFzaHkvUlRQXFxuZmxhc2svU01cXG5mbGF0L01ZUFNcXG5mbGF0YmVkL1NNXFxuZmxhdGJvYXQvU01cXG5mbGF0YnJlYWRcXG5mbGF0Y2FyL1NNXFxuZmxhdGZlZXRcXG5mbGF0ZmlzaC9NU1xcbmZsYXRmb290L1NNRFxcbmZsYXRpcm9uL1NNXFxuZmxhdGxhbmQvTVxcbmZsYXRsZXQvU1xcbmZsYXRtYXRlL1NcXG5mbGF0bmVzcy9NXFxuZmxhdHRlZFxcbmZsYXR0ZW4vU0RHXFxuZmxhdHRlci9TRFJaR1xcbmZsYXR0ZXJlci9NXFxuZmxhdHRlcmluZy9ZXFxuZmxhdHRlcnkvTVxcbmZsYXR0ZXN0XFxuZmxhdHRpbmdcXG5mbGF0dGlzaFxcbmZsYXR0b3AvU01cXG5mbGF0dWxlbmNlL01cXG5mbGF0dWxlbnRcXG5mbGF0dXMvTVxcbmZsYXR3YXJlL01cXG5mbGF0d29ybS9TTVxcbmZsYXVudC9NRFNHXFxuZmxhdW50aW5nL1lcXG5mbGF2b3IvTURTR0pcXG5mbGF2b3JlZC9VXFxuZmxhdm9yZnVsXFxuZmxhdm9yaW5nL01cXG5mbGF2b3JsZXNzXFxuZmxhdm9yc29tZVxcbmZsYXcvTURHU1xcbmZsYXdsZXNzL1BZXFxuZmxhd2xlc3NuZXNzL01cXG5mbGF4L01OXFxuZmxheS9ER1NcXG5mbGVhL01TXFxuZmxlYWJhZy9TTVxcbmZsZWFiaXRlL1NcXG5mbGVhcGl0L1NcXG5mbGVjay9TR01EXFxuZmxlZGdlZC9VXFxuZmxlZGdsaW5nL01TXFxuZmxlZS9TXFxuZmxlZWNlL01aR0RSU1xcbmZsZWVjZXIvTVxcbmZsZWVjaW5lc3MvTVxcbmZsZWVjeS9SVFBcXG5mbGVlaW5nXFxuZmxlZXQvU1RHTURSWVBcXG5mbGVldGluZ2x5L01cXG5mbGVldGluZ25lc3MvTVxcbmZsZWV0bmVzcy9NXFxuZmxlc2gvR01EU1lcXG5mbGVzaGx5L1RSXFxuZmxlc2hwb3QvTVNcXG5mbGVzaHkvUlRcXG5mbGV3XFxuZmxleC9BTVNcXG5mbGV4ZWRcXG5mbGV4aWJpbGl0eS9JTVxcbmZsZXhpYmxlL0lcXG5mbGV4aWJseS9JXFxuZmxleGluZ1xcbmZsZXhpb25cXG5mbGV4dGltZS9NXFxuZmxpYmJlcnRpZ2liYmV0L1NNXFxuZmxpY2svU1pHTURSXFxuZmxpY2tlci9HTURcXG5mbGllci9NXFxuZmxpZ2h0L01TXFxuZmxpZ2h0aW5lc3MvTVxcbmZsaWdodGxlc3NcXG5mbGlnaHR5L1BUUlxcbmZsaW1mbGFtL1NNXFxuZmxpbWZsYW1tZWRcXG5mbGltZmxhbW1pbmdcXG5mbGltc2lseVxcbmZsaW1zaW5lc3MvTVxcbmZsaW1zeS9UUlBcXG5mbGluY2gvR01EU1xcbmZsaW5nL0dNXFxuZmxpbnQvU01cXG5mbGludGxvY2svU01cXG5mbGludHkvVFJcXG5mbGlwL01TXFxuZmxpcHBhbmN5L01cXG5mbGlwcGFudC9ZXFxuZmxpcHBlZFxcbmZsaXBwZXIvTVNcXG5mbGlwcGVzdFxcbmZsaXBwaW5nXFxuZmxpcHB5L1NcXG5mbGlydC9TR01EXFxuZmxpcnRhdGlvbi9NU1xcbmZsaXJ0YXRpb3VzL1lQXFxuZmxpcnRhdGlvdXNuZXNzL01cXG5mbGlydHlcXG5mbGl0L01TXFxuZmxpdHRlZFxcbmZsaXR0aW5nXFxuZmxvYXQvU01EUlpHXFxuZmxvYXRlci9NXFxuZmxvY2svU01ER1xcbmZsb2NraW5nL01cXG5mbG9lL01TXFxuZmxvZy9TXFxuZmxvZ2dlZFxcbmZsb2dnZXIvU01cXG5mbG9nZ2luZy9NU1xcbmZsb29kL1NNRFJHXFxuZmxvb2RnYXRlL01TXFxuZmxvb2RsaWdodC9NRFNHXFxuZmxvb2RsaXRcXG5mbG9vZHBsYWluL01TXFxuZmxvb2R3YXRlci9NU1xcbmZsb29yL1NNREdcXG5mbG9vcmJvYXJkL01TXFxuZmxvb3JpbmcvTVxcbmZsb29yd2Fsa2VyL1NNXFxuZmxvb3p5L1NNXFxuZmxvcC9NU1xcbmZsb3Bob3VzZS9NU1xcbmZsb3BwZWRcXG5mbG9wcGlseVxcbmZsb3BwaW5lc3MvTVxcbmZsb3BwaW5nXFxuZmxvcHB5L1BSU01UXFxuZmxvcmEvU01cXG5mbG9yYWxcXG5mbG9yZXNjZW5jZS9JTVxcbmZsb3Jlc2NlbnQvSVxcbmZsb3JldC9TTVxcbmZsb3JpZC9QWVxcbmZsb3JpZG5lc3MvTVxcbmZsb3Jpbi9TTVxcbmZsb3Jpc3QvU01cXG5mbG9zcy9NRFNHXFxuZmxvc3N5L1JUXFxuZmxvdGF0aW9uL1NNXFxuZmxvdGlsbGEvTVNcXG5mbG90c2FtL01cXG5mbG91bmNlL0RTTUdcXG5mbG91bmN5XFxuZmxvdW5kZXIvTURTR1xcbmZsb3VyL1NNREdcXG5mbG91cmlzaC9HTURTXFxuZmxvdXJ5XFxuZmxvdXQvU01EUlpHXFxuZmxvdXRlci9NXFxuZmxvdy9NREdTXFxuZmxvd2NoYXJ0L1NNXFxuZmxvd2VyJ3NcXG5mbG93ZXIvQ1NER1xcbmZsb3dlcmJlZC9NU1xcbmZsb3dlcmluZXNzL01cXG5mbG93ZXJpbmcvU1xcbmZsb3dlcmxlc3NcXG5mbG93ZXJwb3QvTVNcXG5mbG93ZXJ5L1BUUlxcbmZsb3duXFxuZmx0XFxuZmx1L01cXG5mbHViL01TXFxuZmx1YmJlZFxcbmZsdWJiaW5nXFxuZmx1Y3R1YXRlL0dORFNYXFxuZmx1Y3R1YXRpb24vTVxcbmZsdWUvTVNcXG5mbHVlbmN5L01cXG5mbHVlbnQvWVxcbmZsdWZmL1NNREdcXG5mbHVmZmluZXNzL01cXG5mbHVmZnkvUlBUXFxuZmx1aWQvU01ZXFxuZmx1aWRpdHkvTVxcbmZsdWtlL1NNXFxuZmx1a3kvUlRcXG5mbHVtZS9TTVxcbmZsdW1tb3gvRFNHXFxuZmx1bmdcXG5mbHVuay9TTURHXFxuZmx1bmt5L1NNXFxuZmx1b3Jlc2NlL0RTR1xcbmZsdW9yZXNjZW5jZS9NXFxuZmx1b3Jlc2NlbnRcXG5mbHVvcmlkYXRlL0dORFNcXG5mbHVvcmlkYXRpb24vTVxcbmZsdW9yaWRlL1NNXFxuZmx1b3JpbmUvTVxcbmZsdW9yaXRlL01cXG5mbHVvcm9jYXJib24vTVNcXG5mbHVvcm9zY29wZS9TTVxcbmZsdW9yb3Njb3BpY1xcbmZsdW94ZXRpbmVcXG5mbHVycnkvR0RTTVxcbmZsdXNoL01EUlNUR1xcbmZsdXN0ZXIvTURTR1xcbmZsdXRlL0RTTUdcXG5mbHV0aW5nL01cXG5mbHV0aXN0L01TXFxuZmx1dHRlci9NRFNHXFxuZmx1dHRlcnlcXG5mbHV2aWFsXFxuZmx1eC9JTVNcXG5mbHV4ZWRcXG5mbHV4aW5nXFxuZmx5L1pUR0JEUlNNXFxuZmx5YXdheVxcbmZseWJsb3duXFxuZmx5YnkvTVxcbmZseWJ5c1xcbmZseWNhdGNoZXIvTVNcXG5mbHlpbmcvTVxcbmZseWxlYWYvTVxcbmZseWxlYXZlc1xcbmZseW92ZXIvTVNcXG5mbHlwYXBlci9TTVxcbmZseXBhc3QvU1xcbmZseXNoZWV0L1NcXG5mbHlzcGVjay9HTURTXFxuZmx5c3dhdHRlci9NU1xcbmZseXRyYXAvU1xcbmZseXdheS9TTVxcbmZseXdlaWdodC9TTVxcbmZseXdoZWVsL01TXFxuZm9hbC9NREdTXFxuZm9hbS9NREdTXFxuZm9hbWluZXNzL01cXG5mb2FteS9SVFBcXG5mb2IvU01cXG5mb2JiZWRcXG5mb2JiaW5nXFxuZm9jYWwvWVxcbmZvY3VzJ3NcXG5mb2N1cy9BRFNHXFxuZm9jdXNlZC9VXFxuZm9kZGVyL1NNXFxuZm9lL1NNXFxuZm9nJ3NcXG5mb2cvQ1NcXG5mb2dib3VuZFxcbmZvZ2dlZC9DXFxuZm9nZ2lseVxcbmZvZ2dpbmVzcy9NXFxuZm9nZ2luZy9DXFxuZm9nZ3kvUlRQXFxuZm9naG9ybi9NU1xcbmZvZ3kvU01cXG5mb2d5aXNoXFxuZm9pYmxlL1NNXFxuZm9pbC9NREdTXFxuZm9pc3QvU0RHXFxuZm9sXFxuZm9sZCdzXFxuZm9sZC9BVVNHRFxcbmZvbGRhd2F5XFxuZm9sZGVyL1NNXFxuZm9sZG91dC9NU1xcbmZvbGlhZ2UvTVxcbmZvbGljXFxuZm9saW8vU01cXG5mb2xrL01TXFxuZm9sa2xvcmUvTVxcbmZvbGtsb3JpY1xcbmZvbGtsb3Jpc3QvTVNcXG5mb2xrc2luZXNzL01cXG5mb2xrc2luZ2VyL1NNXFxuZm9sa3NpbmdpbmcvTVxcbmZvbGtzeS9QVFJcXG5mb2xrdGFsZS9NU1xcbmZvbGt3YXkvTVNcXG5mb2xsXFxuZm9sbGljbGUvTVNcXG5mb2xsb3cvU0RSWkdKXFxuZm9sbG93ZXIvTVxcbmZvbGxvd2luZy9NXFxuZm9sbG93dXAvU1xcbmZvbGx5L1NNXFxuZm9tZW50L1NHRFxcbmZvbWVudGF0aW9uL01cXG5mb25kL1JZVFBcXG5mb25kYW50L01TXFxuZm9uZGxlL0RTR1xcbmZvbmRuZXNzL01cXG5mb25kdWUvU01cXG5mb250L01TXFxuZm9udGFuZWwvTVNcXG5mb29cXG5mb29iYXJcXG5mb29kL01TXFxuZm9vZGllL1NNXFxuZm9vZHN0dWZmL1NNXFxuZm9vbC9NREdTXFxuZm9vbGVyeS9TTVxcbmZvb2xoYXJkaWx5XFxuZm9vbGhhcmRpbmVzcy9NXFxuZm9vbGhhcmR5L1RQUlxcbmZvb2xpc2gvWVBcXG5mb29saXNobmVzcy9NXFxuZm9vbHByb29mXFxuZm9vbHNjYXAvTVxcbmZvb3QvTURSWkdTSlxcbmZvb3RhZ2UvTVxcbmZvb3RiYWxsL01SWkdTXFxuZm9vdGJhbGxlci9NXFxuZm9vdGJyaWRnZS9TTVxcbmZvb3RmYWxsL01TXFxuZm9vdGhpbGwvTVNcXG5mb290aG9sZC9NU1xcbmZvb3RpZVxcbmZvb3RpbmcvTVxcbmZvb3RsZXNzXFxuZm9vdGxpZ2h0cy9NXFxuZm9vdGxpbmcvTVNcXG5mb290bG9ja2VyL1NNXFxuZm9vdGxvb3NlXFxuZm9vdG1hbi9NXFxuZm9vdG1lblxcbmZvb3Rub3RlL01HRFNcXG5mb290cGF0aC9NXFxuZm9vdHBhdGhzXFxuZm9vdHBsYXRlL1NcXG5mb290cHJpbnQvU01cXG5mb290cmFjZS9NU1xcbmZvb3RyZXN0L01TXFxuZm9vdHNpZS9TTVxcbmZvb3RzbG9nZ2luZ1xcbmZvb3Rzb3JlXFxuZm9vdHN0ZXAvTVNcXG5mb290c3Rvb2wvU01cXG5mb290d2Vhci9NXFxuZm9vdHdvcmsvTVxcbmZvb3R5XFxuZm9wL1NNXFxuZm9wcGVyeS9NXFxuZm9wcGlzaC9QXFxuZm9wcGlzaG5lc3MvTVxcbmZvci9IXFxuZm9yYVxcbmZvcmFnZS9EUlNNWkdcXG5mb3JhZ2VyL01cXG5mb3JheS9TTURHXFxuZm9yYmFkZVxcbmZvcmJlYXIvU01HXFxuZm9yYmVhcmFuY2UvTVxcbmZvcmJpZC9TXFxuZm9yYmlkZGVuXFxuZm9yYmlkZGluZy9ZU1xcbmZvcmJvcmVcXG5mb3Jib3JuZVxcbmZvcmNlL0RTTUdcXG5mb3JjZWQvVVxcbmZvcmNlZnVsL1BZXFxuZm9yY2VmdWxuZXNzL01cXG5mb3JjZXBzL01cXG5mb3JjaWJsZVxcbmZvcmNpYmx5XFxuZm9yZC9NREdTQlxcbmZvcmUvTVNcXG5mb3JlYXJtL0dTTURcXG5mb3JlYmVhci9NU1xcbmZvcmVib2RlL0dKRFNcXG5mb3JlYm9kaW5nL01cXG5mb3JlY2FzdC9NUlpHU1xcbmZvcmVjYXN0ZXIvTVxcbmZvcmVjYXN0bGUvTVNcXG5mb3JlY2xvc2UvRFNHXFxuZm9yZWNsb3N1cmUvTVNcXG5mb3JlY291cnQvU01cXG5mb3JlZG9vbS9ER1NcXG5mb3JlZmF0aGVyL01TXFxuZm9yZWZlZXRcXG5mb3JlZmluZ2VyL1NNXFxuZm9yZWZvb3QvTVxcbmZvcmVmcm9udC9TTVxcbmZvcmVnby9HXFxuZm9yZWdvZXNcXG5mb3JlZ29uZVxcbmZvcmVncm91bmQvR01EU1xcbmZvcmVoYW5kL01TXFxuZm9yZWhlYWQvTVNcXG5mb3JlaWduL1pSUFxcbmZvcmVpZ25lci9NXFxuZm9yZWlnbm5lc3MvTVxcbmZvcmVrbmV3XFxuZm9yZWtub3cvR1NcXG5mb3Jla25vd2xlZGdlL01cXG5mb3Jla25vd25cXG5mb3JlbGVnL1NNXFxuZm9yZWxpbWIvTVNcXG5mb3JlbG9jay9NU1xcbmZvcmVtYW4vTVxcbmZvcmVtYXN0L01TXFxuZm9yZW1lblxcbmZvcmVtb3N0XFxuZm9yZW5hbWUvTURTXFxuZm9yZW5vb24vTVNcXG5mb3JlbnNpYy9NU1xcbmZvcmVuc2ljYWxseVxcbmZvcmVuc2ljcy9NXFxuZm9yZW9yZGFpbi9HU0RcXG5mb3JlcGFydC9NU1xcbmZvcmVwZXJzb24vU01cXG5mb3JlcGxheS9NXFxuZm9yZXF1YXJ0ZXIvTVNcXG5mb3JlcnVubmVyL01TXFxuZm9yZXNhaWwvTVNcXG5mb3Jlc2F3XFxuZm9yZXNlZS9SU0JaXFxuZm9yZXNlZWFibGUvVVxcbmZvcmVzZWVpbmdcXG5mb3Jlc2Vlbi9VXFxuZm9yZXNlZXIvTVxcbmZvcmVzaGFkb3cvR0RTXFxuZm9yZXNob3JlL1NcXG5mb3Jlc2hvcnRlbi9EU0dcXG5mb3Jlc2lnaHQvTURcXG5mb3Jlc2lnaHRlZG5lc3MvTVxcbmZvcmVza2luL01TXFxuZm9yZXN0J3NcXG5mb3Jlc3QvQUNHRFNcXG5mb3Jlc3RhbGwvU0dEXFxuZm9yZXN0YXRpb24vQUNNXFxuZm9yZXN0ZXIvTVNcXG5mb3Jlc3RsYW5kL01cXG5mb3Jlc3RyeS9NXFxuZm9yZXRhc3RlL0RTTUdcXG5mb3JldGVsbC9HU1xcbmZvcmV0aG91Z2h0L01cXG5mb3JldG9sZFxcbmZvcmV2ZXIvTVxcbmZvcmV2ZXJtb3JlXFxuZm9yZXdhcm4vRFNHXFxuZm9yZXdlbnRcXG5mb3Jld29tYW4vTVxcbmZvcmV3b21lblxcbmZvcmV3b3JkL01TXFxuZm9yZmVpdC9HU01EXFxuZm9yZmVpdHVyZS9TTVxcbmZvcmdhdGhlci9TREdcXG5mb3JnYXZlXFxuZm9yZ2UvRFJTTVpHVkpcXG5mb3JnZXIvTVxcbmZvcmdlcnkvU01cXG5mb3JnZXQvU1xcbmZvcmdldGZ1bC9ZUFxcbmZvcmdldGZ1bG5lc3MvTVxcbmZvcmdldHRhYmxlL1VcXG5mb3JnZXR0aW5nXFxuZm9yZ2luZy9NXFxuZm9yZ2l2YWJsZS9VXFxuZm9yZ2l2ZS9CUlNaR1BcXG5mb3JnaXZlblxcbmZvcmdpdmVuZXNzL01cXG5mb3JnaXZlci9NXFxuZm9yZ2l2aW5nL1VcXG5mb3Jnby9SWkdcXG5mb3Jnb2VyL01cXG5mb3Jnb2VzXFxuZm9yZ29uZVxcbmZvcmdvdFxcbmZvcmdvdHRlbi9VXFxuZm9yay9NREdTXFxuZm9ya2Z1bC9TTVxcbmZvcmtsaWZ0L01TXFxuZm9ybG9ybi9ZXFxuZm9ybSdzXFxuZm9ybS9DQUlGREdTXFxuZm9ybWFsL1NNWVxcbmZvcm1hbGRlaHlkZS9NXFxuZm9ybWFsaW5cXG5mb3JtYWxpc20vTVxcbmZvcm1hbGlzdC9NU1xcbmZvcm1hbGl0aWVzXFxuZm9ybWFsaXR5L0lNXFxuZm9ybWFsaXphdGlvbi9NXFxuZm9ybWFsaXplL0dEU1xcbmZvcm1hdC9TTVZcXG5mb3JtYXRpb24vQ0ZBU01cXG5mb3JtYXR0ZWQvQVxcbmZvcm1hdHRpbmcvTVxcbmZvcm1lZC9VXFxuZm9ybWVyL0ZJQU1cXG5mb3JtZXJseVxcbmZvcm1maXR0aW5nXFxuZm9ybWljXFxuZm9ybWlkYWJsZVxcbmZvcm1pZGFibHlcXG5mb3JtbGVzcy9QWVxcbmZvcm1sZXNzbmVzcy9NXFxuZm9ybXVsYS9NU1xcbmZvcm11bGFlXFxuZm9ybXVsYWljXFxuZm9ybXVsYXRlL0FEU0dOWFxcbmZvcm11bGF0ZWQvVVxcbmZvcm11bGF0aW9uL0FNXFxuZm9ybXVsYXRvci9TTVxcbmZvcm5pY2F0ZS9HTkRTXFxuZm9ybmljYXRpb24vTVxcbmZvcm5pY2F0b3IvTVNcXG5mb3JzYWtlL0dTXFxuZm9yc2FrZW5cXG5mb3Jzb29rXFxuZm9yc29vdGhcXG5mb3Jzd2Vhci9TR1xcbmZvcnN3b3JlXFxuZm9yc3dvcm5cXG5mb3JzeXRoaWEvU01cXG5mb3J0L01TXFxuZm9ydGUvU01cXG5mb3J0aGNvbWluZy9NXFxuZm9ydGhyaWdodC9ZUFxcbmZvcnRocmlnaHRuZXNzL01cXG5mb3J0aHdpdGhcXG5mb3J0aWV0aC9NXFxuZm9ydGlldGhzXFxuZm9ydGlmaWNhdGlvbi9NXFxuZm9ydGlmaWVkL1VcXG5mb3J0aWZpZXIvTVxcbmZvcnRpZnkvRFJTTlpHWFxcbmZvcnRpc3NpbW9cXG5mb3J0aXR1ZGUvTVxcbmZvcnRuaWdodC9NWVNcXG5mb3J0cmVzcy9NU1xcbmZvcnR1aXRvdXMvWVBcXG5mb3J0dWl0b3VzbmVzcy9NXFxuZm9ydHVpdHkvTVxcbmZvcnR1bmF0ZS9VWVxcbmZvcnR1bmUvTVNcXG5mb3J0dW5ldGVsbGVyL1NNXFxuZm9ydHVuZXRlbGxpbmcvTVxcbmZvcnR5L1NNSFxcbmZvcnVtL1NNXFxuZm9yd2FyZC9NRFJZWlRHU1BcXG5mb3J3YXJkZXIvTVxcbmZvcndhcmRuZXNzL01cXG5mb3J3ZW50XFxuZm9zc2FcXG5mb3NzaWwvU01cXG5mb3NzaWxpemF0aW9uL01cXG5mb3NzaWxpemUvR0RTXFxuZm9zdGVyL0dTRFxcbmZvdWdodFxcbmZvdWwvTURSWVRHU1BcXG5mb3VsYXJkL01cXG5mb3VsbW91dGhlZFxcbmZvdWxuZXNzL01cXG5mb3VuZC9GU0RHXFxuZm91bmRhdGlvbi9TTVxcbmZvdW5kYXRpb25hbFxcbmZvdW5kZWQvVVxcbmZvdW5kZXIvR01EU1xcbmZvdW5kbGluZy9TTVxcbmZvdW5kcnkvU01cXG5mb3VudC9TTVxcbmZvdW50YWluL1NNXFxuZm91bnRhaW5oZWFkL01TXFxuZm91ci9NSFNcXG5mb3VyZm9sZFxcbmZvdXJwb3N0ZXIvU01cXG5mb3Vyc2NvcmUvTVxcbmZvdXJzb21lL1NNXFxuZm91cnNxdWFyZVxcbmZvdXJ0ZWVuL1NNSFxcbmZvdXJ0ZWVudGgvTVxcbmZvdXJ0ZWVudGhzXFxuZm91cnRoL01ZXFxuZm91cnRoc1xcbmZvd2wvTURHU1xcbmZveC9HTURTXFxuZm94ZmlyZS9NXFxuZm94Z2xvdmUvU01cXG5mb3hob2xlL01TXFxuZm94aG91bmQvU01cXG5mb3hodW50L0dTXFxuZm94aWx5XFxuZm94aW5lc3MvTVxcbmZveHRyb3QvTVNcXG5mb3h0cm90dGVkXFxuZm94dHJvdHRpbmdcXG5mb3h5L1JUUFxcbmZveWVyL1NNXFxuZnBzXFxuZnJcXG5mcmFjYXMvTVNcXG5mcmFjay9TREdcXG5mcmFjdGFsL1NNXFxuZnJhY3Rpb24vSVNNXFxuZnJhY3Rpb25hbC9ZXFxuZnJhY3Rpb3VzL1lQXFxuZnJhY3Rpb3VzbmVzcy9NXFxuZnJhY3R1cmUvTUdEU1xcbmZyYWcvU1xcbmZyYWdpbGUvUlRcXG5mcmFnaWxpdHkvTVxcbmZyYWdtZW50L0dNRFNcXG5mcmFnbWVudGFyeS9NXFxuZnJhZ21lbnRhdGlvbi9NXFxuZnJhZ3JhbmNlL01TXFxuZnJhZ3JhbnQvWVxcbmZyYWlsL1JZVFBcXG5mcmFpbG5lc3MvTVxcbmZyYWlsdHkvU01cXG5mcmFtZS9EUlNNWkdcXG5mcmFtZWQvVVxcbmZyYW1lci9NXFxuZnJhbWV3b3JrL1NNXFxuZnJhbmMvU01cXG5mcmFuY2hpc2Unc1xcbmZyYW5jaGlzZS9FRFNHXFxuZnJhbmNoaXNlZS9TTVxcbmZyYW5jaGlzZXIvU01cXG5mcmFuY2l1bS9NXFxuZnJhbmNvcGhvbmVcXG5mcmFuZ2liaWxpdHkvTVxcbmZyYW5naWJsZVxcbmZyYW5rL1NNRFJZVEdQXFxuZnJhbmtmdXJ0ZXIvTVNcXG5mcmFua2luY2Vuc2UvTVxcbmZyYW5rbmVzcy9NXFxuZnJhbnRpY1xcbmZyYW50aWNhbGx5XFxuZnJhcHBlL1NNXFxuZnJhdC9NU1xcbmZyYXRlcm5hbC9ZXFxuZnJhdGVybml0eS9GU01cXG5mcmF0ZXJuaXphdGlvbi9NXFxuZnJhdGVybml6ZS9aR0RSU1xcbmZyYXRlcm5pemVyL01cXG5mcmF0cmljaWRhbFxcbmZyYXRyaWNpZGUvTVNcXG5mcmF1ZCdzXFxuZnJhdWQvU1xcbmZyYXVkc3Rlci9TXFxuZnJhdWR1bGVuY2UvTVxcbmZyYXVkdWxlbnQvWVxcbmZyYXVnaHRcXG5mcmF5J3NcXG5mcmF5L0NER1NcXG5mcmF6emxlL01HRFNcXG5mcmVhay9TTURHXFxuZnJlYWtpc2gvWVBcXG5mcmVha2lzaG5lc3MvTVxcbmZyZWFreS9SVFxcbmZyZWNrbGUvRFNNR1xcbmZyZWNrbHlcXG5mcmVlL1lURFJTXFxuZnJlZWJhc2UvTUdEU1xcbmZyZWViaWUvU01cXG5mcmVlYm9vdGVyL1NNXFxuZnJlZWJvcm5cXG5mcmVlZG1hbi9NXFxuZnJlZWRtZW5cXG5mcmVlZG9tL1NNXFxuZnJlZWhhbmRcXG5mcmVlaG9sZC9aTVJTXFxuZnJlZWhvbGRlci9NXFxuZnJlZWluZ1xcbmZyZWVsYW5jZS9EUlNNWkdcXG5mcmVlbGFuY2VyL01cXG5mcmVlbG9hZC9TRFJaR1xcbmZyZWVsb2FkZXIvTVxcbmZyZWVtYW4vTVxcbmZyZWVtYXNvbnJ5XFxuZnJlZW1lblxcbmZyZWVwaG9uZVxcbmZyZWVzaWEvU1xcbmZyZWVzdGFuZGluZ1xcbmZyZWVzdG9uZS9TTVxcbmZyZWVzdHlsZS9TTVxcbmZyZWV0aGlua2VyL1NNXFxuZnJlZXRoaW5raW5nL01cXG5mcmVld2FyZS9NXFxuZnJlZXdheS9NU1xcbmZyZWV3aGVlbC9ER1NcXG5mcmVld2lsbFxcbmZyZWV6YWJsZVxcbmZyZWV6ZSdzXFxuZnJlZXplL1VBR1NcXG5mcmVlemVyL01TXFxuZnJlZXppbmcnc1xcbmZyZWlnaHQvTURSWkdTXFxuZnJlaWdodGVyL01cXG5mcmVuY2hcXG5mcmVuZW15L1NcXG5mcmVuZXRpY1xcbmZyZW5ldGljYWxseVxcbmZyZW56aWVkL1lcXG5mcmVuenkvRFNNXFxuZnJlcVxcbmZyZXF1ZW5jaWVzXFxuZnJlcXVlbmN5L0lNXFxuZnJlcXVlbnQvRFJZU1pUR1xcbmZyZXF1ZW50ZWQvVVxcbmZyZXF1ZW50ZXIvTVxcbmZyZXNjby9NXFxuZnJlc2NvZXNcXG5mcmVzaC9QTlJZWFpUXFxuZnJlc2hlbi9aR0RSXFxuZnJlc2hlbmVyL01cXG5mcmVzaGV0L01TXFxuZnJlc2htYW4vTVxcbmZyZXNobWVuXFxuZnJlc2huZXNzL01cXG5mcmVzaHdhdGVyL01cXG5mcmV0L01TXFxuZnJldGZ1bC9ZUFxcbmZyZXRmdWxuZXNzL01cXG5mcmV0c2F3L01TXFxuZnJldHRlZFxcbmZyZXR0aW5nXFxuZnJldHdvcmsvTVxcbmZyaWFibGVcXG5mcmlhci9TTVxcbmZyaWFyeS9TTVxcbmZyaWNhc3NlZS9EU01cXG5mcmljYXNzZWVpbmdcXG5mcmljYXRpdmUvU01cXG5mcmljdGlvbi9TTVxcbmZyaWN0aW9uYWxcXG5mcmlkZ2UvU01cXG5mcmllZGNha2UvTVNcXG5mcmllbmQnc1xcbmZyaWVuZC9VR1NEWVxcbmZyaWVuZGxlc3NcXG5mcmllbmRsaWVzXFxuZnJpZW5kbGluZXNzL1VNXFxuZnJpZW5kbHknc1xcbmZyaWVuZGx5L1VQVFJcXG5mcmllbmRzaGlwL01TXFxuZnJpZXplL1NNXFxuZnJpZy9TXFxuZnJpZ2F0ZS9NU1xcbmZyaWdnZWRcXG5mcmlnZ2luZ1xcbmZyaWdodC9TWEdNRE5cXG5mcmlnaHRlbi9ER1xcbmZyaWdodGVuaW5nL1lcXG5mcmlnaHRmdWwvUFlcXG5mcmlnaHRmdWxuZXNzL01cXG5mcmlnaWQvWVBcXG5mcmlnaWRpdHkvTVxcbmZyaWdpZG5lc3MvTVxcbmZyaWxsL1NNRFxcbmZyaWxseS9UUlxcbmZyaW5nZSdzXFxuZnJpbmdlL0lEU0dcXG5mcmlwcGVyeS9TTVxcbmZyaXNrL1NER1xcbmZyaXNraWx5XFxuZnJpc2tpbmVzcy9NXFxuZnJpc2t5L1RSUFxcbmZyaXNzb24vU1xcbmZyaXR0ZXIvTURTR1xcbmZyaXR6L01cXG5mcml2b2xpdHkvU01cXG5mcml2b2xvdXMvUFlcXG5mcml2b2xvdXNuZXNzL01cXG5mcml6ei9NRFNZR1xcbmZyaXp6bGUvTUdEU1xcbmZyaXp6eS9UUlxcbmZyb1xcbmZyb2NrJ3NcXG5mcm9jay9DVVNcXG5mcm9nL01TXFxuZnJvZ2dpbmcvU1xcbmZyb2dtYW4vTVxcbmZyb2dtYXJjaC9HRFNcXG5mcm9nbWVuXFxuZnJvZ3NwYXduXFxuZnJvbGljL1NNXFxuZnJvbGlja2VkXFxuZnJvbGlja2VyL1NNXFxuZnJvbGlja2luZ1xcbmZyb2xpY3NvbWVcXG5mcm9tXFxuZnJvbmQvU01cXG5mcm9udCdzXFxuZnJvbnQvRlNER1xcbmZyb250YWdlL01TXFxuZnJvbnRhbC9ZXFxuZnJvbnRiZW5jaC9aUlNcXG5mcm9udGllci9NU1xcbmZyb250aWVyc21hbi9NXFxuZnJvbnRpZXJzbWVuXFxuZnJvbnRpZXJzd29tYW5cXG5mcm9udGllcnN3b21lblxcbmZyb250aXNwaWVjZS9NU1xcbmZyb250d2FyZC9TXFxuZnJvc2gvTVxcbmZyb3N0J3NcXG5mcm9zdC9DU0RHXFxuZnJvc3RiaXRcXG5mcm9zdGJpdGUvTUdTXFxuZnJvc3RiaXR0ZW5cXG5mcm9zdGlseVxcbmZyb3N0aW5lc3MvTVxcbmZyb3N0aW5nL1NNXFxuZnJvc3R5L1RQUlxcbmZyb3RoL01ER1xcbmZyb3RoaW5lc3MvTVxcbmZyb3Roc1xcbmZyb3RoeS9UUFJcXG5mcm91ZnJvdS9NXFxuZnJvd24vU01ER1xcbmZyb3d6aWx5XFxuZnJvd3ppbmVzcy9NXFxuZnJvd3p5L1RQUlxcbmZyb3plL0FVXFxuZnJvemVuL1VBXFxuZnJ1Y3RpZnkvRFNHXFxuZnJ1Y3Rvc2UvTVxcbmZydWdhbC9ZXFxuZnJ1Z2FsaXR5L01cXG5mcnVpdC9TTURHXFxuZnJ1aXRjYWtlL01TXFxuZnJ1aXRlcmVyL1NcXG5mcnVpdGZ1bC9ZUFxcbmZydWl0ZnVsbmVzcy9NXFxuZnJ1aXRpbmVzcy9NXFxuZnJ1aXRpb24vTVxcbmZydWl0bGVzcy9QWVxcbmZydWl0bGVzc25lc3MvTVxcbmZydWl0eS9UUFJcXG5mcnVtcC9TTVxcbmZydW1waXNoXFxuZnJ1bXB5L1RSXFxuZnJ1c3RyYXRlL0dOWERTXFxuZnJ1c3RyYXRpbmcvWVxcbmZydXN0cmF0aW9uL01cXG5mcnVzdHVtL01TXFxuZnJ5L0dEU01cXG5mcnllci9TTVxcbmZ0XFxuZnRwL1pHU1xcbmZ1Y2hzaWEvTVNcXG5mdWNrL1NNR0RSWiFcXG5mdWNrZXIvTSFcXG5mdWNraGVhZC9TIVxcbmZ1ZGRsZS9EU01HXFxuZnVkZ2UvRFNNR1xcbmZ1ZWhyZXIvTVNcXG5mdWVsJ3NcXG5mdWVsL0FER1NcXG5mdWdcXG5mdWdhbFxcbmZ1Z2d5XFxuZnVnaXRpdmUvTVNcXG5mdWd1ZS9TTVxcbmZ1aHJlci9TTVxcbmZ1bGNydW0vTVNcXG5mdWxmaWxsL0xER1NcXG5mdWxmaWxsZWQvVVxcbmZ1bGZpbGxpbmcvVVxcbmZ1bGZpbGxtZW50L01cXG5mdWxsL01EUlpUR1NQXFxuZnVsbGJhY2svTVNcXG5mdWxsZXIvTVxcbmZ1bGxuZXNzL01cXG5mdWxseVxcbmZ1bG1pbmF0ZS9EU1hHTlxcbmZ1bG1pbmF0aW9uL01cXG5mdWxzb21lL1BZXFxuZnVsc29tZW5lc3MvTVxcbmZ1bS9TXFxuZnVtYmxlL0RSU01aR1xcbmZ1bWJsZXIvTVxcbmZ1bWJsaW5nL1lcXG5mdW1lL01HRFNcXG5mdW1pZ2FudC9NU1xcbmZ1bWlnYXRlL0dORFNcXG5mdW1pZ2F0aW9uL01cXG5mdW1pZ2F0b3IvU01cXG5mdW15L1JUXFxuZnVuL01cXG5mdW5jdGlvbi9NREdTXFxuZnVuY3Rpb25hbC9ZXFxuZnVuY3Rpb25hbGlzbVxcbmZ1bmN0aW9uYWxpc3QvU1xcbmZ1bmN0aW9uYWxpdHkvU1xcbmZ1bmN0aW9uYXJ5L1NNXFxuZnVuY3RvclxcbmZ1bmQvQU1ER1NcXG5mdW5kYW1lbnRhbC9TTVlcXG5mdW5kYW1lbnRhbGlzbS9NXFxuZnVuZGFtZW50YWxpc3QvU01cXG5mdW5kZWQvVVxcbmZ1bmRpbmcvTVxcbmZ1bmRyYWlzZXIvTVNcXG5mdW5kcmFpc2luZ1xcbmZ1bmVyYWwvTVNcXG5mdW5lcmFyeVxcbmZ1bmVyZWFsL1lcXG5mdW5mYWlyL1NcXG5mdW5nYWxcXG5mdW5naVxcbmZ1bmdpYmxlL01TXFxuZnVuZ2ljaWRhbFxcbmZ1bmdpY2lkZS9NU1xcbmZ1bmdvaWRcXG5mdW5nb3VzXFxuZnVuZ3VzL01cXG5mdW5pY3VsYXIvU01cXG5mdW5rL01ER1NcXG5mdW5raW5lc3MvTVxcbmZ1bmt5L1BSVFxcbmZ1bm5lbC9NREdTXFxuZnVubmVyXFxuZnVubmVzdFxcbmZ1bm5pbHlcXG5mdW5uaW5lc3MvTVxcbmZ1bm55L1RQUlNNXFxuZnVubnltYW4vTVxcbmZ1bm55bWVuXFxuZnVyL1NNXFxuZnVyYmVsb3cvTVxcbmZ1cmJpc2gvQURTR1xcbmZ1cmlvdXMvWVxcbmZ1cmwnc1xcbmZ1cmwvVURHU1xcbmZ1cmxvbmcvU01cXG5mdXJsb3VnaC9HTURcXG5mdXJsb3VnaHNcXG5mdXJuXFxuZnVybmFjZS9TTVxcbmZ1cm5pc2gvQURTR1xcbmZ1cm5pc2hlZC9VXFxuZnVybmlzaGluZ3MvTVxcbmZ1cm5pdHVyZS9NXFxuZnVyb3IvU01cXG5mdXJvc2VtaWRlXFxuZnVycmVkXFxuZnVycmllci9NXFxuZnVycmluZXNzL01cXG5mdXJyaW5nL01cXG5mdXJyb3cvTURTR1xcbmZ1cnJ5L1pUUlBcXG5mdXJ0aGVyL1NHRFxcbmZ1cnRoZXJhbmNlL01cXG5mdXJ0aGVybW9yZVxcbmZ1cnRoZXJtb3N0XFxuZnVydGhlc3RcXG5mdXJ0aXZlL1lQXFxuZnVydGl2ZW5lc3MvTVxcbmZ1cnkvU01cXG5mdXJ6ZS9NXFxuZnVzZSdzL0FcXG5mdXNlL0NBSUZHRFNcXG5mdXNlZS9TTVxcbmZ1c2VsYWdlL1NNXFxuZnVzaWJpbGl0eS9NXFxuZnVzaWJsZVxcbmZ1c2lsaWVyL1NNXFxuZnVzaWxsYWRlL01TXFxuZnVzaW9uL0lGS1NNXFxuZnVzcy9NRFNHXFxuZnVzc2J1ZGdldC9NU1xcbmZ1c3NpbHlcXG5mdXNzaW5lc3MvTVxcbmZ1c3Nwb3QvU01cXG5mdXNzeS9UUlBcXG5mdXN0aWFuL01cXG5mdXN0aW5lc3MvTVxcbmZ1c3R5L1RSUFxcbmZ1dFxcbmZ1dGlsZS9ZXFxuZnV0aWxpdHkvTVxcbmZ1dG9uL1NNXFxuZnV0dXJlL01TXFxuZnV0dXJpc20vTVxcbmZ1dHVyaXN0L01TXFxuZnV0dXJpc3RpY1xcbmZ1dHVyaXR5L1NNXFxuZnV0dXJvbG9naXN0L01TXFxuZnV0dXJvbG9neS9NXFxuZnV0ei9EU0dcXG5mdXp6L01EU0dcXG5mdXp6YmFsbC9TXFxuZnV6emlseVxcbmZ1enppbmVzcy9NXFxuZnV6enkvUFRSXFxuZndkXFxuZnd5XFxuZy9TTlhWQlxcbmdhYi9TTVxcbmdhYmFyZGluZS9TTVxcbmdhYmJlZFxcbmdhYmJpbmVzcy9NXFxuZ2FiYmluZ1xcbmdhYmJsZS9EU01HXFxuZ2FiYnkvUlRQXFxuZ2FiZXJkaW5lL1NNXFxuZ2FiZmVzdC9NU1xcbmdhYmxlL0RTTVxcbmdhZC9TXFxuZ2FkYWJvdXQvU01cXG5nYWRkZWRcXG5nYWRkZXIvU01cXG5nYWRkaW5nXFxuZ2FkZmx5L1NNXFxuZ2FkZ2V0L1NNXFxuZ2FkZ2V0cnkvTVxcbmdhZG9saW5pdW0vTVxcbmdhZmYvTURSWkdTXFxuZ2FmZmUvU01cXG5nYWZmZXIvTVxcbmdhZy9TTVxcbmdhZ2FcXG5nYWdnZWRcXG5nYWdnaW5nXFxuZ2FnZ2xlL1NNXFxuZ2FpZXR5L01cXG5nYWlseVxcbmdhaW4nc1xcbmdhaW4vQURHU1xcbmdhaW5lci9TTVxcbmdhaW5mdWwvWVxcbmdhaW5zYWlkXFxuZ2FpbnNheS9aR1JTXFxuZ2FpbnNheWVyL01cXG5nYWl0L01SWlNcXG5nYWl0ZXIvTVxcbmdhbC9TTVxcbmdhbGEvTVNcXG5nYWxhY3RpY1xcbmdhbGF4eS9TTVxcbmdhbGUnc1xcbmdhbGUvQVNcXG5nYWxlbmEvTVxcbmdhbGwvTURHU1xcbmdhbGxhbnQvU01ZXFxuZ2FsbGFudHJ5L01cXG5nYWxsYmxhZGRlci9NU1xcbmdhbGxlb24vU01cXG5nYWxsZXJpYS9NU1xcbmdhbGxlcnkvU01cXG5nYWxsZXkvU01cXG5nYWxsaW1hdWZyeS9TTVxcbmdhbGxpdW0vTVxcbmdhbGxpdmFudC9HU0RcXG5nYWxsb24vU01cXG5nYWxsb3AvU01ER1xcbmdhbGxvd3MvTVxcbmdhbGxzdG9uZS9NU1xcbmdhbG9vdC9TTVxcbmdhbG9yZVxcbmdhbG9zaC9NU1xcbmdhbHVtcGgvREdcXG5nYWx1bXBoc1xcbmdhbHZhbmljXFxuZ2FsdmFuaXNtL01cXG5nYWx2YW5pemF0aW9uL01cXG5nYWx2YW5pemUvRFNHXFxuZ2FsdmFub21ldGVyL01TXFxuZ2FtYml0L1NNXFxuZ2FtYmxlL0RSU01aR1xcbmdhbWJsZXIvTVxcbmdhbWJsaW5nL01cXG5nYW1ib2wvU01ER1xcbmdhbWUvTVlUR0RSU1BcXG5nYW1lY29jay9NU1xcbmdhbWVrZWVwZXIvTVNcXG5nYW1lbmVzcy9NXFxuZ2FtZXNtYW5zaGlwL01cXG5nYW1lc3Rlci9NU1xcbmdhbWV0ZS9TTVxcbmdhbWV0aWNcXG5nYW1pbi9TTVxcbmdhbWluZS9TTVxcbmdhbWluZXNzL01cXG5nYW1pbmcvTVxcbmdhbW1hL1NNXFxuZ2FtbW9uL01cXG5nYW1teVxcbmdhbXV0L1NNXFxuZ2FteS9SVFBcXG5nYW5kZXIvU01cXG5nYW5nL01ER1NcXG5nYW5nYnVzdGVycy9NXFxuZ2FuZ2xhbmQvTVxcbmdhbmdsaWFcXG5nYW5nbGluZ1xcbmdhbmdsaW9uL01cXG5nYW5nbGlvbmljXFxuZ2FuZ3BsYW5rL1NNXFxuZ2FuZ3JlbmUvRFNNR1xcbmdhbmdyZW5vdXNcXG5nYW5nc3RhL1NcXG5nYW5nc3Rlci9TTVxcbmdhbmd3YXkvTVNcXG5nYW5qYVxcbmdhbm5ldC9TTVxcbmdhbnRsZXQvTVNcXG5nYW50cnkvU01cXG5nYXAvR1NNRFxcbmdhcGUvTVNcXG5nYXIvU0xNXFxuZ2FyYWdlL0RTTUdcXG5nYXJiL01ER1NcXG5nYXJiYWdlL01cXG5nYXJiYWdlbWFuXFxuZ2FyYmFuem8vU01cXG5nYXJibGUvRFNHXFxuZ2FyY29uL1NNXFxuZ2FyZGVuL1NaR01EUlxcbmdhcmRlbmVyL01cXG5nYXJkZW5pYS9NU1xcbmdhcmRlbmluZy9NXFxuZ2FyZmlzaC9NU1xcbmdhcmdhbnR1YW5cXG5nYXJnbGUvRFNNR1xcbmdhcmdveWxlL1NNXFxuZ2FyaXNoL1BZXFxuZ2FyaXNobmVzcy9NXFxuZ2FybGFuZC9NREdTXFxuZ2FybGljL01cXG5nYXJsaWNreVxcbmdhcm1lbnQvTVNcXG5nYXJuZXIvU0dEXFxuZ2FybmV0L1NNXFxuZ2FybmlzaC9HTE1EU1xcbmdhcm5pc2hlZS9EU01cXG5nYXJuaXNoZWVpbmdcXG5nYXJuaXNobWVudC9TTVxcbmdhcnJldC9TTVxcbmdhcnJpc29uL01EU0dcXG5nYXJyb3RlL01aR0RSU1xcbmdhcnJvdGVyL01cXG5nYXJydWxpdHkvTVxcbmdhcnJ1bG91cy9QWVxcbmdhcnJ1bG91c25lc3MvTVxcbmdhcnRlci9TTVxcbmdhcydzXFxuZ2FzL0NTXFxuZ2FzYmFnL1NNXFxuZ2FzZW91c1xcbmdhc2gvTURTR1xcbmdhc2hvbGRlci9TXFxuZ2Fza2V0L1NNXFxuZ2FzbGlnaHQvTVNcXG5nYXNtYW5cXG5nYXNtZW5cXG5nYXNvaG9sL01cXG5nYXNvbGluZS9NXFxuZ2Fzb21ldGVyL1NcXG5nYXNwL01ER1NcXG5nYXNzZWQvQ1xcbmdhc3Nlc1xcbmdhc3NpbmcvQ1xcbmdhc3N5L1JUXFxuZ2FzdHJpY1xcbmdhc3RyaXRpcy9NXFxuZ2FzdHJvZW50ZXJpdGlzL01cXG5nYXN0cm9pbnRlc3RpbmFsXFxuZ2FzdHJvbm9tZS9TXFxuZ2FzdHJvbm9taWNcXG5nYXN0cm9ub21pY2FsL1lcXG5nYXN0cm9ub215L01cXG5nYXN0cm9wb2QvU01cXG5nYXN3b3Jrcy9NXFxuZ2F0ZS9NR0RTXFxuZ2F0ZWF1XFxuZ2F0ZWF1eFxcbmdhdGVjcmFzaC9EUlNaR1xcbmdhdGVjcmFzaGVyL01cXG5nYXRlaG91c2UvU01cXG5nYXRla2VlcGVyL01TXFxuZ2F0ZXBvc3QvTVNcXG5nYXRld2F5L01TXFxuZ2F0aGVyL1NKWkdNRFJcXG5nYXRoZXJlci9NXFxuZ2F0aGVyaW5nL01cXG5nYXRvci9TTVxcbmdhdWNoZS9SUFlUXFxuZ2F1Y2hlbmVzcy9NXFxuZ2F1Y2hlcmllL01cXG5nYXVjaG8vU01cXG5nYXVkaWx5XFxuZ2F1ZGluZXNzL01cXG5nYXVkeS9SUFRcXG5nYXVnZS9EU01HXFxuZ2F1bnQvUlBUXFxuZ2F1bnRsZXQvTVNcXG5nYXVudG5lc3MvTVxcbmdhdXplL01cXG5nYXV6aW5lc3MvTVxcbmdhdXp5L1JQVFxcbmdhdmVcXG5nYXZlbC9TTVxcbmdhdm90dGUvTVNcXG5nYXdkXFxuZ2F3ay9ER1NcXG5nYXdraWx5XFxuZ2F3a2luZXNzL01cXG5nYXdreS9SUFRcXG5nYXdwL0RHU1xcbmdheS9UU1BNUlxcbmdheW5lc3MvTVxcbmdhemUvTVpHRFJTXFxuZ2F6ZWJvL1NNXFxuZ2F6ZWxsZS9NU1xcbmdhemVyL01cXG5nYXpldHRlL01HRFNcXG5nYXpldHRlZXIvTVNcXG5nYXppbGxpb24vU1xcbmdhenBhY2hvL01cXG5nYXp1bXAvREdTXFxuZ2Vhci9NREdTXFxuZ2VhcmJveC9NU1xcbmdlYXJpbmcvTVxcbmdlYXJzaGlmdC9NU1xcbmdlYXJ3aGVlbC9TTVxcbmdlY2tvL1NNXFxuZ2VkZGl0XFxuZ2VlL0RTXFxuZ2VlaW5nXFxuZ2Vlay9NU1xcbmdlZWt5L1JUXFxuZ2Vlc2VcXG5nZWV6ZXIvTVNcXG5nZWlzaGEvTVxcbmdlbC9TTVxcbmdlbGF0aW4vTVxcbmdlbGF0aW5vdXNcXG5nZWxjYXAvTVxcbmdlbGQvREpHU1xcbmdlbGRpbmcvTVxcbmdlbGlkXFxuZ2VsaWduaXRlL01cXG5nZWxsZWRcXG5nZWxsaW5nXFxuZ2VtL1NNXFxuZ2Vtb2xvZ2ljYWxcXG5nZW1vbG9naXN0L01TXFxuZ2Vtb2xvZ3kvTVxcbmdlbXN0b25lL01TXFxuZ2VuZGFybWUvTVNcXG5nZW5kZXIvTURTXFxuZ2VuZS9NU1xcbmdlbmVhbG9naWNhbC9ZXFxuZ2VuZWFsb2dpc3QvTVNcXG5nZW5lYWxvZ3kvU01cXG5nZW5lcmFcXG5nZW5lcmFsL1NNWVxcbmdlbmVyYWxpc3NpbW8vTVNcXG5nZW5lcmFsaXN0L01TXFxuZ2VuZXJhbGl0eS9TTVxcbmdlbmVyYWxpemF0aW9uL01TXFxuZ2VuZXJhbGl6ZS9HRFNcXG5nZW5lcmFsc2hpcC9NXFxuZ2VuZXJhdGUvQ0FWTkdTRFxcbmdlbmVyYXRpb24vQUNNXFxuZ2VuZXJhdGlvbmFsXFxuZ2VuZXJhdGlvbnNcXG5nZW5lcmF0b3IvU01cXG5nZW5lcmljL1NNXFxuZ2VuZXJpY2FsbHlcXG5nZW5lcm9zaXR5L1NNXFxuZ2VuZXJvdXMvUFlcXG5nZW5lcm91c25lc3MvTVxcbmdlbmVzL1NcXG5nZW5lc2lzL01cXG5nZW5ldGljL1NcXG5nZW5ldGljYWxseVxcbmdlbmV0aWNpc3QvTVNcXG5nZW5ldGljcy9NXFxuZ2VuaWFsL0ZZXFxuZ2VuaWFsaXR5L0ZNXFxuZ2VuaWN1bGF0ZVxcbmdlbmllL1NNXFxuZ2VuaWlcXG5nZW5pdGFsL0ZZXFxuZ2VuaXRhbGlhL01cXG5nZW5pdGFscy9NXFxuZ2VuaXRpdmUvTVNcXG5nZW5pdG91cmluYXJ5XFxuZ2VuaXVzL01TXFxuZ2VubmVkXFxuZ2VubmluZ1xcbmdlbm9jaWRhbFxcbmdlbm9jaWRlL01TXFxuZ2Vub21lL01TXFxuZ2Vub21pY3NcXG5nZW5yZS9TTVxcbmdlbnQvQU1TXFxuZ2VudGVlbC9ZUFxcbmdlbnRlZWxuZXNzL01cXG5nZW50aWFuL1NNXFxuZ2VudGlsZS9TTVxcbmdlbnRpbGl0eS9NXFxuZ2VudGxlL1RHRFJTUFxcbmdlbnRsZWZvbGsvTVNcXG5nZW50bGVmb2xrcy9NXFxuZ2VudGxlbWFuL01ZXFxuZ2VudGxlbWFubHkvVVxcbmdlbnRsZW1lblxcbmdlbnRsZW5lc3MvTVxcbmdlbnRsZXdvbWFuL01cXG5nZW50bGV3b21lblxcbmdlbnRseVxcbmdlbnRyaWZpY2F0aW9uL01cXG5nZW50cmlmeS9EU0dOXFxuZ2VudHJ5L1NNXFxuZ2VudWZsZWN0L0RHU1xcbmdlbnVmbGVjdGlvbi9NU1xcbmdlbnVpbmUvUFlcXG5nZW51aW5lbmVzcy9NXFxuZ2VudXMvTVxcbmdlb2NhY2hlL0RTR1xcbmdlb2NlbnRyaWNcXG5nZW9jZW50cmljYWxseVxcbmdlb2NoZW1pc3RyeS9NXFxuZ2VvZGUvU01cXG5nZW9kZXNpYy9TTVxcbmdlb2Rlc3kvTVxcbmdlb2RldGljXFxuZ2VvZW5naW5lZXJpbmdcXG5nZW9nXFxuZ2VvZ3JhcGhlci9TTVxcbmdlb2dyYXBoaWNcXG5nZW9ncmFwaGljYWwvWVxcbmdlb2dyYXBoeS9TTVxcbmdlb2xvZ2ljXFxuZ2VvbG9naWNhbC9ZXFxuZ2VvbG9naXN0L01TXFxuZ2VvbG9neS9TTVxcbmdlb21cXG5nZW9tYWduZXRpY1xcbmdlb21hZ25ldGlzbS9NXFxuZ2VvbWV0ZXJcXG5nZW9tZXRyaWNcXG5nZW9tZXRyaWNhbC9ZXFxuZ2VvbWV0cnkvU01cXG5nZW9waHlzaWNhbFxcbmdlb3BoeXNpY2lzdC9TTVxcbmdlb3BoeXNpY3MvTVxcbmdlb3BvbGl0aWNhbFxcbmdlb3BvbGl0aWNzL01cXG5nZW9zdGF0aW9uYXJ5XFxuZ2Vvc3luY2hyb25vdXNcXG5nZW9zeW5jbGluZS9NU1xcbmdlb3RoZXJtYWxcXG5nZW90aGVybWljXFxuZ2VyYW5pdW0vTVNcXG5nZXJiaWwvTVNcXG5nZXJpYXRyaWMvU1xcbmdlcmlhdHJpY2lhbi9TXFxuZ2VyaWF0cmljcy9NXFxuZ2VybS9NU1xcbmdlcm1hbmVcXG5nZXJtYW5pdW0vTVxcbmdlcm1pY2lkYWxcXG5nZXJtaWNpZGUvTVNcXG5nZXJtaW5hbC9NXFxuZ2VybWluYXRlL0dORFNcXG5nZXJtaW5hdGlvbi9NXFxuZ2Vyb250b2xvZ2ljYWxcXG5nZXJvbnRvbG9naXN0L01TXFxuZ2Vyb250b2xvZ3kvTVxcbmdlcnJ5bWFuZGVyL0dNRFNcXG5nZXJyeW1hbmRlcmluZy9NXFxuZ2VydW5kL01TXFxuZ2VzdGFsdC9TXFxuZ2VzdGFwby9NU1xcbmdlc3RhdGUvR05EU1xcbmdlc3RhdGlvbi9NXFxuZ2VzdGF0aW9uYWxcXG5nZXN0aWN1bGF0ZS9EU0dOWFxcbmdlc3RpY3VsYXRpb24vTVxcbmdlc3R1cmFsXFxuZ2VzdHVyZS9NR0RTXFxuZ2VzdW5kaGVpdFxcbmdldC9TXFxuZ2V0YXdheS9TTVxcbmdldHRpbmdcXG5nZXR1cC9NXFxuZ2V3Z2F3L1NNXFxuZ2V5c2VyL1NNXFxuZ2hhc3RsaW5lc3MvTVxcbmdoYXN0bHkvVFBSXFxuZ2hhdC9NU1xcbmdoZWVcXG5naGVya2luL01TXFxuZ2hldHRvL1NNXFxuZ2hldHRvaXplL0dEU1xcbmdob3N0L1NNRFlHXFxuZ2hvc3RsaW5lc3MvTVxcbmdob3N0bHkvUlRQXFxuZ2hvc3R3cml0ZS9aR1JTXFxuZ2hvc3R3cml0ZXIvTVxcbmdob3N0d3JpdHRlblxcbmdob3N0d3JvdGVcXG5naG91bC9TTVxcbmdob3VsaXNoL1lQXFxuZ2hvdWxpc2huZXNzL01cXG5naWFudC9TTVxcbmdpYW50ZXNzL01TXFxuZ2liYmVyL0dEU1xcbmdpYmJlcmlzaC9NXFxuZ2liYmV0L0dNRFNcXG5naWJib24vTVNcXG5naWJib3VzXFxuZ2liZS9NR0RTXFxuZ2libGV0L1NNXFxuZ2lkZGlseVxcbmdpZGRpbmVzcy9NXFxuZ2lkZHkvUlRQXFxuZ2lmdC9NREdTXFxuZ2lnL1NNXFxuZ2lnYWJpdC9TTVxcbmdpZ2FieXRlL01TXFxuZ2lnYWdyYW0vU1xcbmdpZ2FoZXJ0ei9NXFxuZ2lnYWpvdWxlL1NcXG5naWdhbWV0ZXIvU1xcbmdpZ2FudGljXFxuZ2lnYW50aWNhbGx5XFxuZ2lnYXBhc2NhbC9TXFxuZ2lnYXBpeGVsL01TXFxuZ2lnYXdhdHQvU01cXG5naWdnZWRcXG5naWdnaW5nXFxuZ2lnZ2xlL0RSU01aR1xcbmdpZ2dsZXIvTVxcbmdpZ2dseS9SVFxcbmdpZ29sby9TTVxcbmdpbGQvTURSWkdTXFxuZ2lsZGVyL01cXG5naWxkaW5nL01cXG5naWxsL01TXFxuZ2lsbGllL1NcXG5naWxsaW9uL1NcXG5naWx0L01TXFxuZ2ltYmFscy9NXFxuZ2ltY3JhY2svU01cXG5naW1jcmFja2VyeS9NXFxuZ2ltbGV0L0dTTURcXG5naW1tZS9TTVxcbmdpbW1pY2svTVNcXG5naW1taWNrcnkvTVxcbmdpbW1pY2t5XFxuZ2ltcC9NREdTXFxuZ2ltcHlcXG5naW4vU01cXG5naW5nZXIvR1NNRFlcXG5naW5nZXJicmVhZC9NXFxuZ2luZ2Vyc25hcC9TTVxcbmdpbmdlcnlcXG5naW5naGFtL01cXG5naW5naXZpdGlzL01cXG5naW5rZ28vTVxcbmdpbmtnb2VzXFxuZ2lubmVkXFxuZ2lubmluZ1xcbmdpbm9ybW91c1xcbmdpbnNlbmcvTVxcbmdpcmFmZmUvTVNcXG5naXJkL0RSWkdTXFxuZ2lyZGVyL01cXG5naXJkbGUvRFNNR1xcbmdpcmwvTVNcXG5naXJsZnJpZW5kL01TXFxuZ2lybGhvb2QvU01cXG5naXJsaXNoL1lQXFxuZ2lybGlzaG5lc3MvTVxcbmdpcmx5XFxuZ2lyby9TXFxuZ2lydC9NREdTXFxuZ2lydGgvTVxcbmdpcnRoc1xcbmdpc3QvTVxcbmdpdC9TXFxuZ2l0ZS9TXFxuZ2l2ZS9aR0pSU1xcbmdpdmVhd2F5L01TXFxuZ2l2ZWJhY2svTVNcXG5naXZlbi9TTVxcbmdpdmVyL01cXG5naXptby9TTVxcbmdpenphcmQvTVNcXG5nbGFjZS9TXFxuZ2xhY2VlZFxcbmdsYWNlaW5nXFxuZ2xhY2lhbC9ZXFxuZ2xhY2lhdGUvWEdORFNcXG5nbGFjaWF0aW9uL01cXG5nbGFjaWVyL01TXFxuZ2xhZC9NWVNQXFxuZ2xhZGRlbi9HRFNcXG5nbGFkZGVyXFxuZ2xhZGRlc3RcXG5nbGFkZS9TTVxcbmdsYWRpYXRvci9TTVxcbmdsYWRpYXRvcmlhbFxcbmdsYWRpb2xhL1NNXFxuZ2xhZGlvbGlcXG5nbGFkaW9sdXMvTVxcbmdsYWRuZXNzL01cXG5nbGFkc29tZVxcbmdsYW1cXG5nbGFtb3JpemF0aW9uL01cXG5nbGFtb3JpemUvRFNHXFxuZ2xhbW9yb3VzL1lcXG5nbGFtb3VyL0dNRFNcXG5nbGFuY2UvRFNNR1xcbmdsYW5kL1NNXFxuZ2xhbmRlc1xcbmdsYW5kdWxhclxcbmdsYW5zL01cXG5nbGFyZS9EU01HXFxuZ2xhcmluZy9ZXFxuZ2xhc25vc3QvTVxcbmdsYXNzL01EU0dcXG5nbGFzc2Jsb3dlci9NU1xcbmdsYXNzYmxvd2luZy9NXFxuZ2xhc3NmdWwvU01cXG5nbGFzc2hvdXNlL1NcXG5nbGFzc2lseVxcbmdsYXNzaW5lc3MvTVxcbmdsYXNzd2FyZS9NXFxuZ2xhc3N5L1JUUFxcbmdsYXVjb21hL01cXG5nbGF6ZS9EU01HXFxuZ2xhemllci9TTVxcbmdsYXppbmcvTVxcbmdsZWFtL1NNREdKXFxuZ2xlYW4vU0RSWkdKXFxuZ2xlYW5lci9NXFxuZ2xlYW5pbmdzL01cXG5nbGVlL01cXG5nbGVlZnVsL1lQXFxuZ2xlZWZ1bG5lc3MvTVxcbmdsZW4vTVNcXG5nbGVub2h1bWVyYWxcXG5nbGVub2lkXFxuZ2xpYi9ZUFxcbmdsaWJiZXJcXG5nbGliYmVzdFxcbmdsaWJuZXNzL01cXG5nbGlkZS9EUlNNWkdcXG5nbGlkZXIvTVxcbmdsaWRpbmcvTVxcbmdsaW1tZXIvTURHSlNcXG5nbGltbWVyaW5nL01cXG5nbGltcHNlL01HRFNcXG5nbGludC9TTURHXFxuZ2xpc3NhbmRpXFxuZ2xpc3NhbmRvL01cXG5nbGlzdGVuL01EU0dcXG5nbGlzdGVyL0RTR1xcbmdsaXRjaC9HTURTXFxuZ2xpdHRlci9NRFNHXFxuZ2xpdHRlcmF0aVxcbmdsaXR0ZXJ5XFxuZ2xpdHovTVxcbmdsaXR6eS9UUlxcbmdsb2FtaW5nL1NNXFxuZ2xvYXQvU01ER1xcbmdsb2F0aW5nL1lcXG5nbG9iL01ER1NcXG5nbG9iYWwvWVxcbmdsb2JhbGlzbS9NXFxuZ2xvYmFsaXN0L01TXFxuZ2xvYmFsaXphdGlvbi9NXFxuZ2xvYmFsaXplL0dEU1xcbmdsb2JlL1NNXFxuZ2xvYmV0cm90dGVyL01TXFxuZ2xvYmV0cm90dGluZ1xcbmdsb2J1bGFyXFxuZ2xvYnVsZS9NU1xcbmdsb2J1bGluL01cXG5nbG9ja2Vuc3BpZWwvU01cXG5nbG9vbS9NXFxuZ2xvb21pbHlcXG5nbG9vbWluZXNzL01cXG5nbG9vbXkvVFJQXFxuZ2xvcC9NXFxuZ2xvcHB5XFxuZ2xvcmlmaWNhdGlvbi9NXFxuZ2xvcmlmeS9HRFNOXFxuZ2xvcmlvdXMvSVlcXG5nbG9yeS9EU01HXFxuZ2xvc3MvTURTR1xcbmdsb3NzYXJ5L1NNXFxuZ2xvc3NpbHlcXG5nbG9zc2luZXNzL01cXG5nbG9zc29sYWxpYS9NXFxuZ2xvc3N5L1BUUlNNXFxuZ2xvdHRhbFxcbmdsb3R0aXMvTVNcXG5nbG92ZS9EU01HXFxuZ2xvdy9NRFJaR1NcXG5nbG93ZXIvR01EXFxuZ2xvd2luZy9ZXFxuZ2xvd3dvcm0vTVNcXG5nbHVjYWdvblxcbmdsdWNvc2UvTVxcbmdsdWUvTUdEU1xcbmdsdWVkL1VcXG5nbHVleVxcbmdsdWllclxcbmdsdWllc3RcXG5nbHVtL1lQXFxuZ2x1bW1lclxcbmdsdW1tZXN0XFxuZ2x1bW5lc3MvTVxcbmdsdW9uL1NcXG5nbHV0L01OU1xcbmdsdXRlbi9NXFxuZ2x1dGVub3VzXFxuZ2x1dGlub3VzL1lcXG5nbHV0dGVkXFxuZ2x1dHRpbmdcXG5nbHV0dG9uL01TXFxuZ2x1dHRvbm91cy9ZXFxuZ2x1dHRvbnkvTVxcbmdseWNlcmluL01cXG5nbHljZXJvbC9NXFxuZ2x5Y29nZW4vTVxcbmdseWNvbFxcbmdseXBoXFxuZ21cXG5nbmFybC9TTURHXFxuZ25hcmx5L1RSXFxuZ25hc2gvTURTR1xcbmduYXQvTVNcXG5nbmF3L0RHU1xcbmduZWlzcy9NXFxuZ25vY2NoaVxcbmdub21lL1NNXFxuZ25vbWljXFxuZ25vbWlzaFxcbmdudS9TTVxcbmdvL0pNUkhaR1xcbmdvYWQvTURHU1xcbmdvYWwvTVNcXG5nb2FsaWUvU01cXG5nb2Fsa2VlcGVyL01TXFxuZ29hbGtlZXBpbmcvTVxcbmdvYWxsZXNzXFxuZ29hbG1vdXRoXFxuZ29hbG1vdXRoc1xcbmdvYWxwb3N0L01TXFxuZ29hbHNjb3Jlci9TXFxuZ29hbHRlbmRlci9NU1xcbmdvYXQvTVNcXG5nb2F0ZWUvU01cXG5nb2F0aGVyZC9NU1xcbmdvYXRza2luL01TXFxuZ29iL1NNXFxuZ29iYmVkXFxuZ29iYmV0L1NNXFxuZ29iYmluZ1xcbmdvYmJsZS9EUlNNWkdcXG5nb2JibGVkeWdvb2svTVxcbmdvYmJsZXIvTVxcbmdvYmxldC9TTVxcbmdvYmxpbi9TTVxcbmdvYnNtYWNrZWRcXG5nb2JzdG9wcGVyL1NcXG5nb2QvU01cXG5nb2Rhd2Z1bFxcbmdvZGNoaWxkL01cXG5nb2RjaGlsZHJlbi9NXFxuZ29kZGFtbWl0XFxuZ29kZGFtbi9EXFxuZ29kZGF1Z2h0ZXIvTVNcXG5nb2RkZXNzL01TXFxuZ29kZmF0aGVyL1NNXFxuZ29kZm9yc2FrZW5cXG5nb2RoZWFkL01cXG5nb2Rob29kL01cXG5nb2RsZXNzL1BZXFxuZ29kbGVzc25lc3MvTVxcbmdvZGxpa2VcXG5nb2RsaW5lc3MvVU1cXG5nb2RseS9VUlRQXFxuZ29kbW90aGVyL1NNXFxuZ29kcGFyZW50L1NNXFxuZ29kc2VuZC9TTVxcbmdvZHNvbi9TTVxcbmdvZHNwZWVkXFxuZ29lci9NXFxuZ29lc1xcbmdvZmVyL1NNXFxuZ29nZ2xlL0RTTUdcXG5nb2dnbGVzL01cXG5nb2luZy9NXFxuZ29pdGVyL1NNXFxuZ29sZC9NTlNcXG5nb2xkYnJpY2svWkdTTURSXFxuZ29sZGJyaWNrZXIvTVxcbmdvbGRlbi9UUlxcbmdvbGRlbnJvZC9NXFxuZ29sZGZpZWxkL1NcXG5nb2xkZmluY2gvTVNcXG5nb2xkZmlzaC9NU1xcbmdvbGRtaW5lL1NNXFxuZ29sZHNtaXRoL01cXG5nb2xkc21pdGhzXFxuZ29sZi9NRFJaR1NcXG5nb2xmZXIvTVxcbmdvbGxpd29nL1NcXG5nb2xseS9TTVxcbmdvbmFkL1NNXFxuZ29uYWRhbFxcbmdvbmRvbGEvTVNcXG5nb25kb2xpZXIvU01cXG5nb25lL1pSXFxuZ29uZXIvTVxcbmdvbmcvTURHU1xcbmdvbmsvU1xcbmdvbm5hXFxuZ29ub3JyaGVhL01cXG5nb25vcnJoZWFsXFxuZ29uem9cXG5nb28vTVxcbmdvb2Jlci9TTVxcbmdvb2QvTVlTUFxcbmdvb2RieWUvTVNcXG5nb29kaGVhcnRlZFxcbmdvb2Rpc2hcXG5nb29kbHkvVFJcXG5nb29kbmVzcy9NXFxuZ29vZG5pZ2h0XFxuZ29vZHMvTVxcbmdvb2R3aWxsL01cXG5nb29keS9TTVxcbmdvb2V5XFxuZ29vZi9NREdTXFxuZ29vZmJhbGwvU01cXG5nb29maW5lc3MvTVxcbmdvb2Z5L1JQVFxcbmdvb2dsZS9EU01HXFxuZ29vZ2x5L1NcXG5nb29pZXJcXG5nb29pZXN0XFxuZ29vay9NU1xcbmdvb24vTVNcXG5nb29wL01cXG5nb29zZS9EU01HXFxuZ29vc2ViZXJyeS9TTVxcbmdvb3NlYnVtcHMvTVxcbmdvb3Nlc3RlcC9TXFxuZ29vc2VzdGVwcGVkXFxuZ29vc2VzdGVwcGluZ1xcbmdvcGhlci9TTVxcbmdvcmUvTUdEU1xcbmdvcmdlJ3NcXG5nb3JnZS9FRFNHXFxuZ29yZ2VvdXMvWVBcXG5nb3JnZW91c25lc3MvTVxcbmdvcmdvbi9TTVxcbmdvcmlsbGEvTVNcXG5nb3JpbHlcXG5nb3JpbmVzcy9NXFxuZ29ybWFuZGl6ZS9EUlNaR1xcbmdvcm1hbmRpemVyL01cXG5nb3JtbGVzc1xcbmdvcnAvTVNcXG5nb3JzZS9NXFxuZ29yeS9SVFBcXG5nb3NoXFxuZ29zaGF3ay9NU1xcbmdvc2xpbmcvU01cXG5nb3NwZWwvTVNcXG5nb3NzYW1lci9NXFxuZ29zc2lwL01EUlpHU1xcbmdvc3NpcGVyL01cXG5nb3NzaXB5XFxuZ290XFxuZ290Y2hhL1NcXG5nb3Roc1xcbmdvdHRhXFxuZ290dGVuXFxuZ291YWNoZS9TXFxuZ291Z2UvRFJTTVpHXFxuZ291Z2VyL01cXG5nb3VsYXNoL01TXFxuZ291cmQvU01cXG5nb3VyZGUvTVNcXG5nb3VybWFuZC9TTVxcbmdvdXJtZXQvU01cXG5nb3V0L01cXG5nb3V0eS9UUlxcbmdvdlxcbmdvdmVybi9ER1NCTFxcbmdvdmVybmFibGUvVVxcbmdvdmVybmFuY2UvTVxcbmdvdmVybmVkL1VcXG5nb3Zlcm5lc3MvTVNcXG5nb3Zlcm5tZW50L01TXFxuZ292ZXJubWVudGFsXFxuZ292ZXJub3IvU01cXG5nb3Zlcm5vcnNoaXAvTVxcbmdvdnRcXG5nb3duL01ER1NcXG5nclxcbmdyYWIvTVNcXG5ncmFiYmVkXFxuZ3JhYmJlci9NU1xcbmdyYWJiaW5nXFxuZ3JhYmJ5L1RSXFxuZ3JhY2UvRURTTUdcXG5ncmFjZWZ1bC9FUFlcXG5ncmFjZWZ1bG5lc3MvRU1cXG5ncmFjZWxlc3MvUFlcXG5ncmFjZWxlc3NuZXNzL01cXG5ncmFjaW91cy9VWVxcbmdyYWNpb3VzbmVzcy9NXFxuZ3JhY2tsZS9NU1xcbmdyYWQvTVJaU0JcXG5ncmFkYXRlL1hHTkRTXFxuZ3JhZGF0aW9uL0NNXFxuZ3JhZGUnc1xcbmdyYWRlL0NBRFNHXFxuZ3JhZGVkL1VcXG5ncmFkZXIvTVxcbmdyYWRpZW50L01TXFxuZ3JhZHVhbC9QWVxcbmdyYWR1YWxpc20vTVxcbmdyYWR1YWxuZXNzL01cXG5ncmFkdWF0ZS9YTUdORFNcXG5ncmFkdWF0aW9uL01cXG5ncmFmZml0aVxcbmdyYWZmaXRvL01cXG5ncmFmdC9TTURSWkdcXG5ncmFmdGVyL01cXG5ncmFoYW0vU1xcbmdyYWlsXFxuZ3JhaW4vSVNNRFxcbmdyYWluaW5lc3MvTVxcbmdyYWlueS9QVFJcXG5ncmFtL0tNU1xcbmdyYW1tYXIvTVNcXG5ncmFtbWFyaWFuL1NNXFxuZ3JhbW1hdGljYWwvVVlcXG5ncmFtb3Bob25lL01TXFxuZ3JhbXB1cy9NU1xcbmdyYW4vU1xcbmdyYW5hcnkvU01cXG5ncmFuZC9TTVJZUFRcXG5ncmFuZGFtL01TXFxuZ3JhbmRhdW50L01TXFxuZ3JhbmRjaGlsZC9NXFxuZ3JhbmRjaGlsZHJlbi9NXFxuZ3JhbmRkYWQvU01cXG5ncmFuZGRhZGR5L1NNXFxuZ3JhbmRkYXVnaHRlci9TTVxcbmdyYW5kZWUvTVNcXG5ncmFuZGV1ci9NXFxuZ3JhbmRmYXRoZXIvR01EWVNcXG5ncmFuZGlsb3F1ZW5jZS9NXFxuZ3JhbmRpbG9xdWVudFxcbmdyYW5kaW9zZS9ZXFxuZ3JhbmRpb3NpdHkvTVxcbmdyYW5kbWEvTVNcXG5ncmFuZG1vdGhlci9NWVNcXG5ncmFuZG5lcGhldy9NU1xcbmdyYW5kbmVzcy9NXFxuZ3JhbmRuaWVjZS9NU1xcbmdyYW5kcGEvTVNcXG5ncmFuZHBhcmVudC9NU1xcbmdyYW5kc29uL01TXFxuZ3JhbmRzdGFuZC9TR01EXFxuZ3JhbmR1bmNsZS9TTVxcbmdyYW5nZS9TTVxcbmdyYW5pdGUvTVxcbmdyYW5pdGljXFxuZ3Jhbm55L1NNXFxuZ3Jhbm9sYS9NXFxuZ3JhbnQvU01EUlpHXFxuZ3JhbnRlZS9NU1xcbmdyYW50ZXIvTVxcbmdyYW50c21hbnNoaXAvTVxcbmdyYW51bGFyXFxuZ3JhbnVsYXJpdHkvTVxcbmdyYW51bGF0ZS9HTkRTXFxuZ3JhbnVsYXRpb24vTVxcbmdyYW51bGUvTVNcXG5ncmFwZS9TTVxcbmdyYXBlZnJ1aXQvTVNcXG5ncmFwZXNob3QvTVxcbmdyYXBldmluZS9TTVxcbmdyYXBoL01ER1xcbmdyYXBoaWMvTVNcXG5ncmFwaGljYWwvWVxcbmdyYXBoaXRlL01cXG5ncmFwaG9sb2dpc3QvTVNcXG5ncmFwaG9sb2d5L01cXG5ncmFwaHNcXG5ncmFwbmVsL01TXFxuZ3JhcHBsZS9NR0RTXFxuZ3Jhc3AvU01EQkdcXG5ncmFzcy9NRFNHXFxuZ3Jhc3Nob3BwZXIvTVNcXG5ncmFzc2xhbmQvTVNcXG5ncmFzc3Jvb3RzXFxuZ3Jhc3N5L1RSXFxuZ3JhdGUvRFJTTVpHSlxcbmdyYXRlZnVsL1VZUFxcbmdyYXRlZnVsbmVzcy9VTVxcbmdyYXRlci9NXFxuZ3JhdGlmaWNhdGlvbi9NXFxuZ3JhdGlmeS9HTlhEU1xcbmdyYXRpZnlpbmcvWVxcbmdyYXRpbi9TXFxuZ3JhdGluZy9NWVxcbmdyYXRpc1xcbmdyYXRpdHVkZS9JTVxcbmdyYXR1aXRvdXMvWVBcXG5ncmF0dWl0b3VzbmVzcy9NXFxuZ3JhdHVpdHkvU01cXG5ncmF2YW1lbi9NU1xcbmdyYXZlL0RSU01ZVEdQXFxuZ3JhdmVkaWdnZXIvU01cXG5ncmF2ZWwvU0dNRFlcXG5ncmF2ZW5cXG5ncmF2ZW5lc3MvTVxcbmdyYXZlc2lkZS9NU1xcbmdyYXZlc3RvbmUvU01cXG5ncmF2ZXlhcmQvTVNcXG5ncmF2aWRcXG5ncmF2aW1ldGVyL01TXFxuZ3Jhdml0YXNcXG5ncmF2aXRhdGUvR05EU1xcbmdyYXZpdGF0aW9uL01cXG5ncmF2aXRhdGlvbmFsXFxuZ3Jhdml0eS9NXFxuZ3JhdnkvU01cXG5ncmF5L01EUlRHU1BcXG5ncmF5YmVhcmQvU01cXG5ncmF5aXNoXFxuZ3JheW5lc3MvTVxcbmdyYXplL0RSU01aR1xcbmdyYXplci9NXFxuZ3JlYXNlL0RSU01aR1xcbmdyZWFzZXBhaW50L01cXG5ncmVhc2lseVxcbmdyZWFzaW5lc3MvTVxcbmdyZWFzeS9QVFJcXG5ncmVhdC9TTVJZUFRcXG5ncmVhdGNvYXQvU01cXG5ncmVhdGhlYXJ0ZWRcXG5ncmVhdG5lc3MvTVxcbmdyZWJlL1NNXFxuZ3JlZWQvTVxcbmdyZWVkaWx5XFxuZ3JlZWRpbmVzcy9NXFxuZ3JlZWR5L1BUUlxcbmdyZWVuL0dQU01EUllUXFxuZ3JlZW5iYWNrL01TXFxuZ3JlZW5iZWx0L01TXFxuZ3JlZW5lcnkvTVxcbmdyZWVuZmllbGRcXG5ncmVlbmZseS9TXFxuZ3JlZW5nYWdlL01TXFxuZ3JlZW5ncm9jZXIvU01cXG5ncmVlbmhvcm4vU01cXG5ncmVlbmhvdXNlL1NNXFxuZ3JlZW5pc2hcXG5ncmVlbm1haWwvTVxcbmdyZWVubmVzcy9NXFxuZ3JlZW5yb29tL1NNXFxuZ3JlZW5zdG9uZVxcbmdyZWVuc3dhcmQvTVxcbmdyZWVud29vZC9NXFxuZ3JlZXQvWkdKU0RSXFxuZ3JlZXRlci9NXFxuZ3JlZXRpbmcvTVxcbmdyZWdhcmlvdXMvUFlcXG5ncmVnYXJpb3VzbmVzcy9NXFxuZ3JlbWxpbi9TTVxcbmdyZW5hZGUvU01cXG5ncmVuYWRpZXIvTVNcXG5ncmVuYWRpbmUvTVxcbmdyZXAvU1xcbmdyZXBwZWRcXG5ncmVwcGluZ1xcbmdyZXcvQVxcbmdyZXlob3VuZC9TTVxcbmdyaWJibGUvU1xcbmdyaWQvTVNcXG5ncmlkZGxlL1NNXFxuZ3JpZGRsZWNha2UvU01cXG5ncmlkaXJvbi9TTVxcbmdyaWRsb2NrL1NNRFxcbmdyaWVmL1NNXFxuZ3JpZXZhbmNlL01TXFxuZ3JpZXZlL1pHRFJTXFxuZ3JpZXZlci9NXFxuZ3JpZXZvdXMvUFlcXG5ncmlldm91c25lc3MvTVxcbmdyaWZmaW4vU01cXG5ncmlmZm9uL1NNXFxuZ3JpbGwvU0dNREpcXG5ncmlsbGUvTVNcXG5ncmltL0RZUEdcXG5ncmltYWNlL0RTTUdcXG5ncmltZS9TTVxcbmdyaW1pbmVzcy9NXFxuZ3JpbW1lclxcbmdyaW1tZXN0XFxuZ3JpbW5lc3MvTVxcbmdyaW15L1RSUFxcbmdyaW4vTVNcXG5ncmluZC9TWkdNUkpcXG5ncmluZGVyL01cXG5ncmluZHN0b25lL01TXFxuZ3JpbmdvL01TXFxuZ3Jpbm5lZFxcbmdyaW5uaW5nXFxuZ3JpcC9NRFJTWkdcXG5ncmlwZS9TTVxcbmdyaXBlci9NXFxuZ3JpcHBlL01aR0RSXFxuZ3JpcHBlci9NXFxuZ3Jpc2xpbmVzcy9NXFxuZ3Jpc2x5L1JUUFxcbmdyaXN0L01ZXFxuZ3Jpc3RsZS9NXFxuZ3Jpc3RtaWxsL01TXFxuZ3JpdC9NU1xcbmdyaXRzL01cXG5ncml0dGVkXFxuZ3JpdHRlci9TTVxcbmdyaXR0aW5lc3MvTVxcbmdyaXR0aW5nXFxuZ3JpdHR5L1JUUFxcbmdyaXp6bGUvRFNHXFxuZ3JpenpseS9UUlNNXFxuZ3JvYW4vU0dNRFxcbmdyb2F0L1NNXFxuZ3JvY2VyL01TXFxuZ3JvY2VyeS9TTVxcbmdyb2cvTVxcbmdyb2dnaWx5XFxuZ3JvZ2dpbmVzcy9NXFxuZ3JvZ2d5L1BSVFxcbmdyb2luL1NNXFxuZ3Jvay9TXFxuZ3Jva2tlZFxcbmdyb2traW5nXFxuZ3JvbW1ldC9TTVxcbmdyb29tL1NaR01EUlxcbmdyb29tZXIvTVxcbmdyb29taW5nL01cXG5ncm9vbXNtYW4vTVxcbmdyb29tc21lblxcbmdyb292ZS9NR0RTXFxuZ3Jvb3Z5L1JUXFxuZ3JvcGUvRFJTTVpHXFxuZ3JvcGVyL01cXG5ncm9zYmVhay9NU1xcbmdyb3NncmFpbi9NXFxuZ3Jvc3MvUFRHTURSU1lcXG5ncm9zc25lc3MvTVxcbmdyb3Rlc3F1ZS9TUE1ZXFxuZ3JvdGVzcXVlbmVzcy9NXFxuZ3JvdHRvL01cXG5ncm90dG9lc1xcbmdyb3R0eS9UUlxcbmdyb3VjaC9HTURTXFxuZ3JvdWNoaWx5XFxuZ3JvdWNoaW5lc3MvTVxcbmdyb3VjaHkvUlRQXFxuZ3JvdW5kL1pHTURSSlNcXG5ncm91bmRicmVha2luZy9NU1xcbmdyb3VuZGNsb3RoXFxuZ3JvdW5kY2xvdGhzXFxuZ3JvdW5kZXIvTVxcbmdyb3VuZGhvZy9NU1xcbmdyb3VuZGluZy9NXFxuZ3JvdW5kbGVzcy9ZXFxuZ3JvdW5kbnV0L01TXFxuZ3JvdW5kc2hlZXQvU1xcbmdyb3VuZHNrZWVwZXIvU1xcbmdyb3VuZHNtYW5cXG5ncm91bmRzbWVuXFxuZ3JvdW5kc3dlbGwvU01cXG5ncm91bmR3YXRlci9NXFxuZ3JvdW5kd29yay9NXFxuZ3JvdXAvSlNaR01EUlxcbmdyb3VwZXIvTVxcbmdyb3VwaWUvTVNcXG5ncm91cGluZy9NXFxuZ3JvdXB3YXJlL01cXG5ncm91c2UvTVpHRFJTXFxuZ3JvdXNlci9NXFxuZ3JvdXQvU0dNRFxcbmdyb3ZlL1NNXFxuZ3JvdmVsL1pHRFJTXFxuZ3JvdmVsZXIvTVxcbmdyb3ZlbGxlZFxcbmdyb3ZlbGxpbmdcXG5ncm93L0FIU0dcXG5ncm93ZXIvTVNcXG5ncm93aW5nL0lcXG5ncm93bC9TWkdNRFJcXG5ncm93bGVyL01cXG5ncm93bi9BSVxcbmdyb3dudXAvTVNcXG5ncm93dGgvQU1cXG5ncm93dGhzXFxuZ3J1Yi9NU1xcbmdydWJiZWRcXG5ncnViYmVyL01TXFxuZ3J1YmJpbHlcXG5ncnViYmluZXNzL01cXG5ncnViYmluZ1xcbmdydWJieS9UUlBcXG5ncnVic3Rha2UvTVxcbmdydWRnZS9NR0RTXFxuZ3J1ZGdpbmcvWVxcbmdydWUvU1xcbmdydWVsL0dKTVxcbmdydWVsaW5nL1lcXG5ncnVlc29tZS9SWVRQXFxuZ3J1ZXNvbWVuZXNzL01cXG5ncnVmZi9UUFJZXFxuZ3J1ZmZuZXNzL01cXG5ncnVtYmxlL0RSU01aR0pcXG5ncnVtYmxlci9NXFxuZ3J1bXAvU01cXG5ncnVtcGlseVxcbmdydW1waW5lc3MvTVxcbmdydW1weS9QUlRcXG5ncnVuZ2UvTVNcXG5ncnVuZ3kvUlRcXG5ncnVuaW9uL1NNXFxuZ3J1bnQvU0dNRFxcbmd0XFxuZ3VhY2Ftb2xlL01cXG5ndWFuaW5lL01cXG5ndWFuby9NXFxuZ3VhcmFuaS9NU1xcbmd1YXJhbnRlZS9NRFNcXG5ndWFyYW50ZWVpbmdcXG5ndWFyYW50b3IvTVNcXG5ndWFyYW50eS9HRFNNXFxuZ3VhcmQvU1pHTURSXFxuZ3VhcmRlZC9ZXFxuZ3VhcmRlci9NXFxuZ3VhcmRob3VzZS9TTVxcbmd1YXJkaWFuL1NNXFxuZ3VhcmRpYW5zaGlwL01cXG5ndWFyZHJhaWwvU01cXG5ndWFyZHJvb20vU01cXG5ndWFyZHNtYW4vTVxcbmd1YXJkc21lblxcbmd1YXZhL1NNXFxuZ3ViZXJuYXRvcmlhbFxcbmd1ZXJyaWxsYS9TTVxcbmd1ZXNzL1pHQk1EUlNcXG5ndWVzc2VyL01cXG5ndWVzc3RpbWF0ZS9EU01HXFxuZ3Vlc3N3b3JrL01cXG5ndWVzdC9TR01EXFxuZ3Vlc3Rib29rL1NNXFxuZ3Vlc3Rob3VzZS9TXFxuZ3Vlc3Ryb29tL1NcXG5ndWZmL01cXG5ndWZmYXcvTURHU1xcbmd1aWRhbmNlL01cXG5ndWlkZS9EUlNNWkdcXG5ndWlkZWJvb2svU01cXG5ndWlkZWQvVVxcbmd1aWRlbGluZS9TTVxcbmd1aWRlcG9zdC9TTVxcbmd1aWRlci9NXFxuZ3VpbGQvU1pNUlxcbmd1aWxkZXIvTVxcbmd1aWxkaGFsbC9NU1xcbmd1aWxlL01cXG5ndWlsZWZ1bFxcbmd1aWxlbGVzcy9ZUFxcbmd1aWxlbGVzc25lc3MvTVxcbmd1aWxsZW1vdC9TXFxuZ3VpbGxvdGluZS9EU01HXFxuZ3VpbHQvTVxcbmd1aWx0aWx5XFxuZ3VpbHRpbmVzcy9NXFxuZ3VpbHRsZXNzXFxuZ3VpbHR5L1BSVFxcbmd1aW5lYS9NU1xcbmd1aXNlL0VTTVxcbmd1aXRhci9NU1xcbmd1aXRhcmlzdC9TTVxcbmd1bGFnL1NNXFxuZ3VsY2gvTVNcXG5ndWxkZW4vTVNcXG5ndWxmL01TXFxuZ3VsbC9NRFNHXFxuZ3VsbGV0L01TXFxuZ3VsbGliaWxpdHkvTVxcbmd1bGxpYmxlXFxuZ3VsbHkvU01cXG5ndWxwL01EUlNaR1xcbmd1bHBlci9NXFxuZ3VtL1NNXFxuZ3VtYmFsbC9TXFxuZ3VtYm8vU01cXG5ndW1ib2lsL1NNXFxuZ3VtYm9vdC9TXFxuZ3VtZHJvcC9TTVxcbmd1bW1lZFxcbmd1bW1pbmdcXG5ndW1teS9UUlxcbmd1bXB0aW9uL01cXG5ndW1zaG9lL01EU1xcbmd1bXNob2VpbmdcXG5ndW4vU01cXG5ndW5ib2F0L1NNXFxuZ3VuZmlnaHQvTVJaU1xcbmd1bmZpZ2h0ZXIvTVxcbmd1bmZpcmUvTVxcbmd1bmdlXFxuZ3VuZ3lcXG5ndW5rL01cXG5ndW5reVxcbmd1bm1hbi9NXFxuZ3VubWVuXFxuZ3VubWV0YWwvTVxcbmd1bm5lZFxcbmd1bm5lbC9NU1xcbmd1bm5lci9NU1xcbmd1bm5lcnkvTVxcbmd1bm5pbmdcXG5ndW5ueS9NXFxuZ3VubnlzYWNrL01TXFxuZ3VucG9pbnQvTVxcbmd1bnBvd2Rlci9NXFxuZ3VucnVubmVyL01TXFxuZ3VucnVubmluZy9NXFxuZ3Vuc2hpcC9NU1xcbmd1bnNob3QvTVNcXG5ndW5zbGluZ2VyL1NNXFxuZ3Vuc21pdGgvTVxcbmd1bnNtaXRoc1xcbmd1bndhbGUvTVNcXG5ndXBweS9TTVxcbmd1cmdsZS9NR0RTXFxuZ3VybmV5L01TXFxuZ3VydS9NU1xcbmd1c2gvTURSU1pHXFxuZ3VzaGVyL01cXG5ndXNoaW5nL1lcXG5ndXNoeS9UUlxcbmd1c3NldC9NU0RHXFxuZ3Vzc3kvRFNHXFxuZ3VzdC9FTURTR1xcbmd1c3RhdG9yeVxcbmd1c3RpbHlcXG5ndXN0by9NXFxuZ3VzdHkvUlRcXG5ndXQvU01cXG5ndXRsZXNzL1BcXG5ndXRsZXNzbmVzcy9NXFxuZ3V0c3kvUlRcXG5ndXR0ZWRcXG5ndXR0ZXIvU01ER1xcbmd1dHRlcnNuaXBlL01TXFxuZ3V0dGluZ1xcbmd1dHR1cmFsL01TXFxuZ3V0dHkvUlRcXG5ndXYvU1xcbmd1dm5vci9TXFxuZ3V5L1NHTURcXG5ndXp6bGUvRFJTWkdcXG5ndXp6bGVyL01cXG5neW0vU01cXG5neW1raGFuYS9NU1xcbmd5bW5hc2l1bS9NU1xcbmd5bW5hc3QvTVNcXG5neW1uYXN0aWMvU1xcbmd5bW5hc3RpY2FsbHlcXG5neW1uYXN0aWNzL01cXG5neW1ub3NwZXJtL1NNXFxuZ3ltc2xpcC9TXFxuZ3luZWNvbG9naWNcXG5neW5lY29sb2dpY2FsXFxuZ3luZWNvbG9naXN0L1NNXFxuZ3luZWNvbG9neS9NXFxuZ3lwL1NNXFxuZ3lwcGVkXFxuZ3lwcGVyL1NNXFxuZ3lwcGluZ1xcbmd5cHN0ZXIvU01cXG5neXBzdW0vTVxcbmd5cHN5L1NNXFxuZ3lyYXRlL0RTR05YXFxuZ3lyYXRpb24vTVxcbmd5cmF0b3IvU01cXG5neXJmYWxjb24vTVNcXG5neXJvL01TXFxuZ3lyb3Njb3BlL01TXFxuZ3lyb3Njb3BpY1xcbmd5dmUvTUdEU1xcbmgnbVxcbmgvTlJTWFpHVkpcXG5oYS9TSFxcbmhhYmVyZGFzaGVyL1NNXFxuaGFiZXJkYXNoZXJ5L1NNXFxuaGFiaWxpbWVudC9TTVxcbmhhYml0J3NcXG5oYWJpdC9JU0JcXG5oYWJpdGFiaWxpdHkvTVxcbmhhYml0YXQvU01cXG5oYWJpdGF0aW9uL01TXFxuaGFiaXR1YWwvWVBcXG5oYWJpdHVhbG5lc3MvTVxcbmhhYml0dWF0ZS9HTkRTXFxuaGFiaXR1YXRpb24vTVxcbmhhYml0dWUvU01cXG5oYWNpZW5kYS9TTVxcbmhhY2svTURSWkdTXFxuaGFja2VyL01cXG5oYWNraW5nL01cXG5oYWNraXNoXFxuaGFja2xlL01TXFxuaGFja25leS9TTURHXFxuaGFja3Nhdy9TTVxcbmhhY2t0aXZpc3QvTVNcXG5oYWNrd29yay9NXFxuaGFkXFxuaGFkZG9jay9TTVxcbmhhZGl0aFxcbmhhZG4ndFxcbmhhZHN0XFxuaGFmbml1bS9NXFxuaGFmdC9NU1xcbmhhZy9TTVxcbmhhZ2dhcmQvWVBcXG5oYWdnYXJkbmVzcy9NXFxuaGFnZ2lzL01TXFxuaGFnZ2lzaFxcbmhhZ2dsZS9NWkdEUlNcXG5oYWdnbGVyL01cXG5oYWdpb2dyYXBoZXIvU01cXG5oYWdpb2dyYXBoeS9TTVxcbmhhaG5pdW0vTVxcbmhhaWt1L01cXG5oYWlsL01ER1NcXG5oYWlsc3RvbmUvTVNcXG5oYWlsc3Rvcm0vTVNcXG5oYWlyL01EU1xcbmhhaXJiYWxsL01TXFxuaGFpcmJhbmQvU1xcbmhhaXJicmVhZHRoL01cXG5oYWlyYnJlYWR0aHNcXG5oYWlyYnJ1c2gvTVNcXG5oYWlyY2xvdGgvTVxcbmhhaXJjdXQvU01cXG5oYWlyZG8vTVNcXG5oYWlyZHJlc3Nlci9TTVxcbmhhaXJkcmVzc2luZy9NXFxuaGFpcmRyeWVyL01TXFxuaGFpcmdyaXAvU1xcbmhhaXJpbmVzcy9NXFxuaGFpcmxlc3NcXG5oYWlybGlrZVxcbmhhaXJsaW5lL1NNXFxuaGFpcm5ldC9TTVxcbmhhaXJwaWVjZS9NU1xcbmhhaXJwaW4vU01cXG5oYWlyc2JyZWFkdGgvTVxcbmhhaXJzYnJlYWR0aHNcXG5oYWlyc3BsaXR0ZXIvU01cXG5oYWlyc3BsaXR0aW5nL01cXG5oYWlyc3ByYXkvU1xcbmhhaXJzcHJpbmcvTVNcXG5oYWlyc3R5bGUvTVNcXG5oYWlyc3R5bGlzdC9TTVxcbmhhaXJ5L1RSUFxcbmhhalxcbmhhamovTVxcbmhhamplc1xcbmhhamppL1NNXFxuaGFrZS9NU1xcbmhhbGFsL01cXG5oYWxiZXJkL1NNXFxuaGFsY3lvblxcbmhhbGUvSVRHRFJTXFxuaGFsZi9NXFxuaGFsZmJhY2svU01cXG5oYWxmaGVhcnRlZC9QWVxcbmhhbGZoZWFydGVkbmVzcy9NXFxuaGFsZnBlbmNlXFxuaGFsZnBlbm55L1NNXFxuaGFsZnRpbWUvTVNcXG5oYWxmdG9uZS9NU1xcbmhhbGZ3YXlcXG5oYWxmd2l0L1NNXFxuaGFsaWJ1dC9TTVxcbmhhbGl0ZS9NXFxuaGFsaXRvc2lzL01cXG5oYWxsL01TXFxuaGFsbGVsdWphaC9NXFxuaGFsbGVsdWphaHNcXG5oYWxsbWFyay9HTURTXFxuaGFsbG9vL01TR1xcbmhhbGxvdy9EU0dcXG5oYWxsb3dlZC9VXFxuaGFsbHVjaW5hdGUvR05YRFNcXG5oYWxsdWNpbmF0aW9uL01cXG5oYWxsdWNpbmF0b3J5XFxuaGFsbHVjaW5vZ2VuL1NNXFxuaGFsbHVjaW5vZ2VuaWMvU01cXG5oYWxsd2F5L1NNXFxuaGFsby9NREdTXFxuaGFsb2dlbi9TTVxcbmhhbG9uXFxuaGFsdC9NRFJaR1NcXG5oYWx0ZXIvR01EXFxuaGFsdGVybmVjay9TXFxuaGFsdGluZy9ZXFxuaGFsdmUvRFNHXFxuaGFseWFyZC9NU1xcbmhhbS9TTVxcbmhhbWJ1cmcvU1pNUlxcbmhhbWJ1cmdlci9NXFxuaGFtbGV0L01TXFxuaGFtbWVkXFxuaGFtbWVyL01EUlNKWkdcXG5oYW1tZXJlci9NXFxuaGFtbWVyaGVhZC9TTVxcbmhhbW1lcmxvY2svU01cXG5oYW1tZXJ0b2UvTVNcXG5oYW1taW5nXFxuaGFtbW9jay9TTVxcbmhhbW15L1RSXFxuaGFtcGVyL0dNRFNcXG5oYW1wZXJlZC9VXFxuaGFtc3Rlci9NU1xcbmhhbXN0cmluZy9HU01cXG5oYW1zdHJ1bmdcXG5oYW5kJ3NcXG5oYW5kL1VER1NcXG5oYW5kYmFnL1NNXFxuaGFuZGJhbGwvTVNcXG5oYW5kYmFycm93L1NNXFxuaGFuZGJpbGwvTVNcXG5oYW5kYm9vay9NU1xcbmhhbmRicmFrZS9TXFxuaGFuZGNhci9TTVxcbmhhbmRjYXJ0L01TXFxuaGFuZGNsYXNwL01TXFxuaGFuZGNyYWZ0L1NNREdcXG5oYW5kY3VmZi9NREdTXFxuaGFuZGVkL1BcXG5oYW5kZnVsL1NNXFxuaGFuZGd1bi9TTVxcbmhhbmRoZWxkL01TXFxuaGFuZGhvbGQvTVNcXG5oYW5kaWNhcC9NU1xcbmhhbmRpY2FwcGVkXFxuaGFuZGljYXBwZXIvTVNcXG5oYW5kaWNhcHBpbmdcXG5oYW5kaWNyYWZ0L01TXFxuaGFuZGlseVxcbmhhbmRpbmVzcy9NXFxuaGFuZGl3b3JrL01cXG5oYW5ka2VyY2hpZWYvTVNcXG5oYW5kbGUvTVpHRFJTXFxuaGFuZGxlYmFyL01TXFxuaGFuZGxlci9NXFxuaGFuZG1hZGVcXG5oYW5kbWFpZC9YTU5TXFxuaGFuZG1haWRlbi9NXFxuaGFuZG91dC9TTVxcbmhhbmRvdmVyL1NcXG5oYW5kcGljay9HRFNcXG5oYW5kcmFpbC9NU1xcbmhhbmRzYXcvU01cXG5oYW5kc2V0L1NNXFxuaGFuZHNoYWtlL0pNR1NcXG5oYW5kc29tZS9QWVRSXFxuaGFuZHNvbWVuZXNzL01cXG5oYW5kc3ByaW5nL01TXFxuaGFuZHN0YW5kL1NNXFxuaGFuZHdvcmsvTVxcbmhhbmR3b3ZlblxcbmhhbmR3cml0aW5nL01cXG5oYW5kd3JpdHRlblxcbmhhbmR5L1VUUlxcbmhhbmR5bWFuL01cXG5oYW5keW1lblxcbmhhbmcvTURSSlpHU1xcbmhhbmdhci9NU1xcbmhhbmdkb2dcXG5oYW5nZXIvTVxcbmhhbmdpbmcvTVxcbmhhbmdtYW4vTVxcbmhhbmdtZW5cXG5oYW5nbmFpbC9NU1xcbmhhbmdvdXQvU01cXG5oYW5nb3Zlci9NU1xcbmhhbmd1cC9NU1xcbmhhbmsvTVJaU1xcbmhhbmtlci9HSkRcXG5oYW5rZXJpbmcvTVxcbmhhbmtpZS9NU1xcbmhhbnNvbS9NU1xcbmhhcC9NWVxcbmhhcGhhemFyZC9ZUFxcbmhhcGhhemFyZG5lc3MvTVxcbmhhcGxlc3MvWVBcXG5oYXBsZXNzbmVzcy9NXFxuaGFwbG9pZC9NU1xcbmhhcHBlbi9TREdKXFxuaGFwcGVuaW5nL01cXG5oYXBwZW5zdGFuY2UvU01cXG5oYXBwaWx5L1VcXG5oYXBwaW5lc3MvVU1cXG5oYXBweS9VUlRQXFxuaGFwdGljXFxuaGFyYW5ndWUvTUdEU1xcbmhhcmFzcy9MWkdEUlNcXG5oYXJhc3Nlci9NXFxuaGFyYXNzbWVudC9NXFxuaGFyYmluZ2VyL1NNXFxuaGFyYm9yL0dNRFNcXG5oYXJib3JtYXN0ZXIvU1xcbmhhcmQvTlJZWFRQXFxuaGFyZGJhY2svTVNcXG5oYXJkYmFsbC9NXFxuaGFyZGJvYXJkL01cXG5oYXJkYm91bmRcXG5oYXJkY29yZVxcbmhhcmRjb3Zlci9TTVxcbmhhcmRlbi9aR0RSXFxuaGFyZGVuZWQvVVxcbmhhcmRlbmVyL01cXG5oYXJkaGF0L01TXFxuaGFyZGhlYWRlZC9QWVxcbmhhcmRoZWFkZWRuZXNzL01cXG5oYXJkaGVhcnRlZC9QWVxcbmhhcmRoZWFydGVkbmVzcy9NXFxuaGFyZGlob29kL01cXG5oYXJkaWx5XFxuaGFyZGluZXNzL01cXG5oYXJkbGluZXIvTVNcXG5oYXJkbmVzcy9NXFxuaGFyZHNjcmFiYmxlXFxuaGFyZHNoaXAvU01cXG5oYXJkc3RhbmQvU01cXG5oYXJkdGFjay9NXFxuaGFyZHRvcC9TTVxcbmhhcmR3YXJlL01cXG5oYXJkd2lyZWRcXG5oYXJkd29vZC9TTVxcbmhhcmR3b3JraW5nXFxuaGFyZHkvUFRSXFxuaGFyZS9NR0RTXFxuaGFyZWJlbGwvTVNcXG5oYXJlYnJhaW5lZFxcbmhhcmVsaXAvU01cXG5oYXJlbGlwcGVkXFxuaGFyZW0vU01cXG5oYXJpY290L1NcXG5oYXJrL0RHU1xcbmhhcmxlcXVpbi9TTVxcbmhhcmxvdC9TTVxcbmhhcmxvdHJ5L01cXG5oYXJtL01ER1NcXG5oYXJtZWQvVVxcbmhhcm1mdWwvWVBcXG5oYXJtZnVsbmVzcy9NXFxuaGFybWxlc3MvUFlcXG5oYXJtbGVzc25lc3MvTVxcbmhhcm1vbmljL1NNXFxuaGFybW9uaWNhL01TXFxuaGFybW9uaWNhbGx5XFxuaGFybW9uaWVzXFxuaGFybW9uaW91cy9QWVxcbmhhcm1vbmlvdXNuZXNzL01cXG5oYXJtb25pdW0vTVNcXG5oYXJtb25pemF0aW9uL01cXG5oYXJtb25pemUvWkdEUlNcXG5oYXJtb25pemVyL01cXG5oYXJtb255L0VNXFxuaGFybmVzcydzXFxuaGFybmVzcy9VRFNHXFxuaGFycC9NREdTXFxuaGFycGlzdC9TTVxcbmhhcnBvb24vWkdTTURSXFxuaGFycG9vbmVyL01cXG5oYXJwc2ljaG9yZC9NU1xcbmhhcnBzaWNob3JkaXN0L1NNXFxuaGFycHkvU01cXG5oYXJyaWRhbi9NU1xcbmhhcnJpZXIvTVxcbmhhcnJvdy9TTURHXFxuaGFycnVtcGgvR0RcXG5oYXJydW1waHNcXG5oYXJyeS9EUlNaR1xcbmhhcnNoL1JZVFBcXG5oYXJzaG5lc3MvTVxcbmhhcnQvTVNcXG5oYXJ2ZXN0L1NNRFJaR1xcbmhhcnZlc3RlZC9VXFxuaGFydmVzdGVyL01cXG5oYXNoL0FNRFNHXFxuaGFzaGlzaC9NXFxuaGFzaHRhZy9TTVxcbmhhc24ndFxcbmhhc3AvTVNcXG5oYXNzbGUvRFNNR1xcbmhhc3NvY2svU01cXG5oYXN0L0ROWEdcXG5oYXN0ZS9TTVxcbmhhc3Rlbi9ER1xcbmhhc3RpbHlcXG5oYXN0aW5lc3MvTVxcbmhhc3R5L1JUUFxcbmhhdC9aR1NNRFJcXG5oYXRiYW5kL1NcXG5oYXRib3gvTVNcXG5oYXRjaC9NRFNHXFxuaGF0Y2hiYWNrL01TXFxuaGF0Y2hlY2svU01cXG5oYXRjaGVkL1VcXG5oYXRjaGVyeS9TTVxcbmhhdGNoZXQvU01cXG5oYXRjaGluZy9NXFxuaGF0Y2h3YXkvU01cXG5oYXRlL01TXFxuaGF0ZWZ1bC9QWVxcbmhhdGVmdWxuZXNzL01cXG5oYXRlbW9uZ2VyL01TXFxuaGF0ZXIvTVxcbmhhdHBpbi9TXFxuaGF0cmVkL1NNXFxuaGF0c3RhbmQvU1xcbmhhdHRlZFxcbmhhdHRlci9TTVxcbmhhdHRpbmdcXG5oYXViZXJrL1NNXFxuaGF1Z2h0aWx5XFxuaGF1Z2h0aW5lc3MvTVxcbmhhdWdodHkvUFJUXFxuaGF1bC9NRFJaR1NcXG5oYXVsYWdlL01cXG5oYXVsZXIvTVxcbmhhdWxpZXIvU1xcbmhhdW5jaC9NU1xcbmhhdW50L1NNRFJaR1xcbmhhdW50ZXIvTVxcbmhhdW50aW5nL1lcXG5oYXV0ZXVyL01cXG5oYXZlL01HU1xcbmhhdmVuJ3RcXG5oYXZlbi9TTVxcbmhhdmVyc2Fjay9TTVxcbmhhdm9jL01cXG5oYXcvR1NNRFxcbmhhd2svTURSWkdTXFxuaGF3a2VyL01cXG5oYXdraXNoL1BcXG5oYXdraXNobmVzcy9NXFxuaGF3c2VyL1NNXFxuaGF3dGhvcm4vTVNcXG5oYXkvR1NNRFxcbmhheWNvY2svU01cXG5oYXlsb2Z0L1NNXFxuaGF5bWFrZXIvU1xcbmhheW1ha2luZ1xcbmhheW1vdy9TTVxcbmhheXJpY2svTVNcXG5oYXlyaWRlL01TXFxuaGF5c2VlZC9NU1xcbmhheXN0YWNrL1NNXFxuaGF5d2lyZVxcbmhhemFyZC9TTURHXFxuaGF6YXJkb3VzL1lcXG5oYXplL01aR0pEUlNcXG5oYXplbC9TTVxcbmhhemVsbnV0L01TXFxuaGF6ZXIvTVxcbmhhemlseVxcbmhhemluZXNzL01cXG5oYXppbmcvTVxcbmhhem1hdFxcbmhhenkvUlRQXFxuaGRxcnNcXG5oZSdkXFxuaGUnbGxcXG5oZS9NXFxuaGVhZC9NRFJaR0pTXFxuaGVhZGFjaGUvTVNcXG5oZWFkYmFuZC9NU1xcbmhlYWRiYW5nZXIvU1xcbmhlYWRiYW5naW5nXFxuaGVhZGJvYXJkL1NNXFxuaGVhZGJ1dHQvRFNHXFxuaGVhZGNhc2UvU1xcbmhlYWRjaGVlc2VcXG5oZWFkY291bnQvU1xcbmhlYWRkcmVzcy9NU1xcbmhlYWRlci9NXFxuaGVhZGZpcnN0XFxuaGVhZGdlYXIvTVxcbmhlYWRodW50L0RSU1pHXFxuaGVhZGh1bnRlci9NXFxuaGVhZGh1bnRpbmcvTVxcbmhlYWRpbHlcXG5oZWFkaW5lc3MvTVxcbmhlYWRpbmcvTVxcbmhlYWRsYW1wL01TXFxuaGVhZGxhbmQvTVNcXG5oZWFkbGVzc1xcbmhlYWRsaWdodC9NU1xcbmhlYWRsaW5lL01aR0RSU1xcbmhlYWRsaW5lci9NXFxuaGVhZGxvY2svTVNcXG5oZWFkbG9uZ1xcbmhlYWRtYW4vTVxcbmhlYWRtYXN0ZXIvU01cXG5oZWFkbWVuXFxuaGVhZG1pc3RyZXNzL01TXFxuaGVhZHBob25lL01TXFxuaGVhZHBpZWNlL01TXFxuaGVhZHBpbi9TTVxcbmhlYWRxdWFydGVyL1NER1xcbmhlYWRxdWFydGVycy9NXFxuaGVhZHJlc3QvTVNcXG5oZWFkcm9vbS9NXFxuaGVhZHNjYXJmXFxuaGVhZHNjYXJ2ZXNcXG5oZWFkc2V0L1NNXFxuaGVhZHNoaXAvU01cXG5oZWFkc2hyaW5rZXIvU01cXG5oZWFkc21hbi9NXFxuaGVhZHNtZW5cXG5oZWFkc3RhbGwvU01cXG5oZWFkc3RhbmQvU01cXG5oZWFkc3RvbmUvU01cXG5oZWFkc3Ryb25nXFxuaGVhZHRlYWNoZXIvU1xcbmhlYWR3YWl0ZXIvU01cXG5oZWFkd2F0ZXJzL01cXG5oZWFkd2F5L01cXG5oZWFkd2luZC9TTVxcbmhlYWR3b3JkL1NNXFxuaGVhZHkvUlRQXFxuaGVhbC9EUkhaR1NcXG5oZWFsZWQvVVxcbmhlYWxlci9NXFxuaGVhbHRoL01cXG5oZWFsdGhjYXJlXFxuaGVhbHRoZnVsL1BZXFxuaGVhbHRoZnVsbmVzcy9NXFxuaGVhbHRoaWx5L1VcXG5oZWFsdGhpbmVzcy9VTVxcbmhlYWx0aHkvVVRSUFxcbmhlYXAvTURHU1xcbmhlYXIvQUhHSlNcXG5oZWFyZC9BVVxcbmhlYXJlci9TTVxcbmhlYXJpbmcvQU1cXG5oZWFya2VuL1NHRFxcbmhlYXJzYXkvTVxcbmhlYXJzZSdzXFxuaGVhcnNlL0FTXFxuaGVhcnQvU01cXG5oZWFydGFjaGUvTVNcXG5oZWFydGJlYXQvTVNcXG5oZWFydGJyZWFrL1NNR1xcbmhlYXJ0YnJva2VuXFxuaGVhcnRidXJuL01cXG5oZWFydGVuL0VTR0RcXG5oZWFydGZlbHRcXG5oZWFydGgvTVxcbmhlYXJ0aHJ1Zy9TXFxuaGVhcnRoc1xcbmhlYXJ0aHN0b25lL1NNXFxuaGVhcnRpbHlcXG5oZWFydGluZXNzL01cXG5oZWFydGxhbmQvTVNcXG5oZWFydGxlc3MvUFlcXG5oZWFydGxlc3NuZXNzL01cXG5oZWFydHJlbmRpbmcvWVxcbmhlYXJ0c2ljay9QXFxuaGVhcnRzaWNrbmVzcy9NXFxuaGVhcnRzdHJpbmdzL01cXG5oZWFydHRocm9iL01TXFxuaGVhcnR3YXJtaW5nXFxuaGVhcnR3b29kL01cXG5oZWFydHkvUlNNUFRcXG5oZWF0J3NcXG5oZWF0L0FER1NcXG5oZWF0ZWQvVVxcbmhlYXRlZGx5XFxuaGVhdGVyL1NNXFxuaGVhdGgvTU5SWFxcbmhlYXRoZW4vTVxcbmhlYXRoZW5kb20vTVxcbmhlYXRoZW5pc2hcXG5oZWF0aGVuaXNtL01cXG5oZWF0aGVyL01cXG5oZWF0aHNcXG5oZWF0aW5nL01cXG5oZWF0cHJvb2ZcXG5oZWF0c3Ryb2tlL01cXG5oZWF0d2F2ZS9TXFxuaGVhdmUvRFJTTVpHXFxuaGVhdmVuL1NNWVxcbmhlYXZlbmx5L1RSXFxuaGVhdmVucy9NXFxuaGVhdmVud2FyZC9TXFxuaGVhdmVyL01cXG5oZWF2aWx5XFxuaGVhdmluZXNzL01cXG5oZWF2eS9SU01UUFxcbmhlYXZ5aGVhcnRlZFxcbmhlYXZ5c2V0XFxuaGVhdnl3ZWlnaHQvTVNcXG5oZWNrL01cXG5oZWNrbGUvRFJTTVpHXFxuaGVja2xlci9NXFxuaGVja2xpbmcvTVxcbmhlY3RhcmUvU01cXG5oZWN0aWNcXG5oZWN0aWNhbGx5XFxuaGVjdG9ncmFtL1NNXFxuaGVjdG9tZXRlci9NU1xcbmhlY3Rvci9TTURHXFxuaGVkZ2UvRFJTTVpHXFxuaGVkZ2Vob2cvTVNcXG5oZWRnZWhvcC9TXFxuaGVkZ2Vob3BwZWRcXG5oZWRnZWhvcHBpbmdcXG5oZWRnZXIvTVxcbmhlZGdlcm93L1NNXFxuaGVkb25pc20vTVxcbmhlZG9uaXN0L01TXFxuaGVkb25pc3RpY1xcbmhlZWQvTURHU1xcbmhlZWRlZC9VXFxuaGVlZGZ1bC9ZXFxuaGVlZGxlc3MvUFlcXG5oZWVkbGVzc25lc3MvTVxcbmhlZWhhdy9TTURHXFxuaGVlbC9NREdTXFxuaGVlbGxlc3NcXG5oZWZ0L01ER1NcXG5oZWZ0aWx5XFxuaGVmdGluZXNzL01cXG5oZWZ0eS9QUlRcXG5oZWdlbW9uaWNcXG5oZWdlbW9ueS9NXFxuaGVnaXJhL1NNXFxuaGVpZmVyL1NNXFxuaGVpZ2h0L1hTTU5cXG5oZWlnaHRlbi9ER1xcbmhlaW5vdXMvWVBcXG5oZWlub3VzbmVzcy9NXFxuaGVpci9NU1xcbmhlaXJlc3MvTVNcXG5oZWlybG9vbS9TTVxcbmhlaXN0L1NNREdcXG5oZWxkXFxuaGVsaWNhbFxcbmhlbGljZXNcXG5oZWxpY29wdGVyL1NHTURcXG5oZWxpb2NlbnRyaWNcXG5oZWxpb3Ryb3BlL1NNXFxuaGVsaXBhZC9TXFxuaGVsaXBvcnQvTVNcXG5oZWxpdW0vTVxcbmhlbGl4L01cXG5oZWxsL01cXG5oZWxsYmVudFxcbmhlbGxjYXQvTVNcXG5oZWxsZWJvcmUvTVxcbmhlbGxmaXJlXFxuaGVsbGhvbGUvTVNcXG5oZWxsaW9uL01TXFxuaGVsbGlzaC9ZUFxcbmhlbGxpc2huZXNzL01cXG5oZWxsby9TTVxcbmhlbGx1dmFcXG5oZWxtL01TXFxuaGVsbWV0L1NNRFxcbmhlbG1zbWFuL01cXG5oZWxtc21lblxcbmhlbG90L1NNXFxuaGVscC9NRFJaR1NKXFxuaGVscGVyL01cXG5oZWxwZnVsL1VZXFxuaGVscGZ1bG5lc3MvTVxcbmhlbHBpbmcvTVxcbmhlbHBsZXNzL1BZXFxuaGVscGxlc3NuZXNzL01cXG5oZWxwbGluZS9TTVxcbmhlbHBtYXRlL1NNXFxuaGVsdmUvU01cXG5oZW0vU01cXG5oZW1hdGl0ZS9NXFxuaGVtYXRvbG9naWNcXG5oZW1hdG9sb2dpY2FsXFxuaGVtYXRvbG9naXN0L01TXFxuaGVtYXRvbG9neS9NXFxuaGVtZS9NXFxuaGVtaXBsZWdpYVxcbmhlbWlzcGhlcmUvU01cXG5oZW1pc3BoZXJpY1xcbmhlbWlzcGhlcmljYWxcXG5oZW1saW5lL1NNXFxuaGVtbG9jay9TTVxcbmhlbW1lZFxcbmhlbW1lci9TTVxcbmhlbW1pbmdcXG5oZW1vZ2xvYmluL01cXG5oZW1vcGhpbGlhL01cXG5oZW1vcGhpbGlhYy9NU1xcbmhlbW9ycmhhZ2UvTUdEU1xcbmhlbW9ycmhhZ2ljXFxuaGVtb3JyaG9pZC9NU1xcbmhlbW9zdGF0L01TXFxuaGVtcC9NTlxcbmhlbXN0aXRjaC9NRFNHXFxuaGVuL01cXG5oZW5jZVxcbmhlbmNlZm9ydGhcXG5oZW5jZWZvcndhcmRcXG5oZW5jaG1hbi9NXFxuaGVuY2htZW5cXG5oZW5uYS9TTURHXFxuaGVucGVjay9HU0RcXG5oZXBcXG5oZXBhcmluL01cXG5oZXBhdGljXFxuaGVwYXRpdGlzL01cXG5oZXBhdG9jeXRlL1NcXG5oZXBwZXJcXG5oZXBwZXN0XFxuaGVwdGFnb24vTVNcXG5oZXB0YWdvbmFsXFxuaGVwdGF0aGxvbi9TTVxcbmhlcmFsZC9TTURHXFxuaGVyYWxkZWQvVVxcbmhlcmFsZGljXFxuaGVyYWxkcnkvTVxcbmhlcmIvTVNcXG5oZXJiYWNlb3VzXFxuaGVyYmFnZS9NXFxuaGVyYmFsL1NcXG5oZXJiYWxpc3QvTVNcXG5oZXJiaWNpZGFsXFxuaGVyYmljaWRlL01TXFxuaGVyYml2b3JlL1NNXFxuaGVyYml2b3JvdXNcXG5oZXJjdWxlYW5cXG5oZXJkL01EUlpHU1xcbmhlcmRlci9NXFxuaGVyZHNtYW4vTVxcbmhlcmRzbWVuXFxuaGVyZS9NXFxuaGVyZWFib3V0L1NcXG5oZXJlYWZ0ZXIvU01cXG5oZXJlYnlcXG5oZXJlZGl0YXJ5XFxuaGVyZWRpdHkvTVxcbmhlcmVpblxcbmhlcmVpbmFmdGVyXFxuaGVyZW9mXFxuaGVyZW9uXFxuaGVyZXN5L1NNXFxuaGVyZXRpYy9TTVxcbmhlcmV0aWNhbFxcbmhlcmV0b1xcbmhlcmV0b2ZvcmVcXG5oZXJldW5kZXJcXG5oZXJldW50b1xcbmhlcmV1cG9uXFxuaGVyZXdpdGhcXG5oZXJpdGFibGUvSVxcbmhlcml0YWdlL01TXFxuaGVybWFwaHJvZGl0ZS9TTVxcbmhlcm1hcGhyb2RpdGljXFxuaGVybWV0aWNcXG5oZXJtZXRpY2FsL1lcXG5oZXJtaXQvU01cXG5oZXJtaXRhZ2UvTVNcXG5oZXJtaXRpYW5cXG5oZXJuaWEvU01cXG5oZXJuaWFsXFxuaGVybmlhdGUvR05EU1xcbmhlcm5pYXRpb24vTVxcbmhlcm8vTVxcbmhlcm9lc1xcbmhlcm9pYy9TXFxuaGVyb2ljYWxseVxcbmhlcm9pY3MvTVxcbmhlcm9pbi9TTVxcbmhlcm9pbmUvU01cXG5oZXJvaXNtL01cXG5oZXJvbi9TTVxcbmhlcnBlcy9NXFxuaGVycGV0b2xvZ2lzdC9TTVxcbmhlcnBldG9sb2d5L01cXG5oZXJyaW5nL01TXFxuaGVycmluZ2JvbmUvTVxcbmhlcnNlbGZcXG5oZXJ0ei9NXFxuaGVzaXRhbmNlL01cXG5oZXNpdGFuY3kvTVxcbmhlc2l0YW50L1lcXG5oZXNpdGF0ZS9EU0dOWFxcbmhlc2l0YXRpbmcvVVlcXG5oZXNpdGF0aW9uL01cXG5oZXNzaWFuXFxuaGV0ZXJvL1NNXFxuaGV0ZXJvZG94XFxuaGV0ZXJvZG94eS9NXFxuaGV0ZXJvZ2VuZWl0eS9NXFxuaGV0ZXJvZ2VuZW91cy9ZXFxuaGV0ZXJvc2V4dWFsL01ZU1xcbmhldGVyb3NleHVhbGl0eS9NXFxuaGV1cmlzdGljL01TXFxuaGV1cmlzdGljYWxseVxcbmhldXJpc3RpY3MvTVxcbmhldy9aR1NEUlxcbmhld2VyL01cXG5oZXgvR01EU1xcbmhleGFkZWNpbWFsL1NcXG5oZXhhZ29uL01TXFxuaGV4YWdvbmFsXFxuaGV4YWdyYW0vU01cXG5oZXhhbWV0ZXIvU01cXG5oZXlcXG5oZXlkYXkvU01cXG5oZlxcbmhndFxcbmhnd3lcXG5oaS9TRFxcbmhpYXR1cy9NU1xcbmhpYmFjaGkvTVNcXG5oaWJlcm5hdGUvR05EU1xcbmhpYmVybmF0aW9uL01cXG5oaWJlcm5hdG9yL01TXFxuaGliaXNjdXMvTVNcXG5oaWNjb3VnaC9ER1xcbmhpY2NvdWdoc1xcbmhpY2N1cC9HU01EXFxuaGljay9NU1xcbmhpY2tleS9TTVxcbmhpY2tvcnkvU01cXG5oaWRcXG5oaWRkZW5cXG5oaWRlL01aR0pEUlNcXG5oaWRlYXdheS9TTVxcbmhpZGVib3VuZFxcbmhpZGVvdXMvWVBcXG5oaWRlb3VzbmVzcy9NXFxuaGlkZW91dC9NU1xcbmhpZGVyL01cXG5oaWRpbmcvTVxcbmhpZS9TXFxuaGllaW5nXFxuaGllcmFyY2hpY1xcbmhpZXJhcmNoaWNhbC9ZXFxuaGllcmFyY2h5L1NNXFxuaGllcm9nbHlwaC9NXFxuaGllcm9nbHlwaGljL01TXFxuaGllcm9nbHlwaHNcXG5oaWdoL01SWVpUUFxcbmhpZ2hiYWxsL1NNXFxuaGlnaGJvcm5cXG5oaWdoYm95L01TXFxuaGlnaGJyb3cvU01cXG5oaWdoY2hhaXIvTVNcXG5oaWdoZmFsdXRpblxcbmhpZ2hoYW5kZWQvUFlcXG5oaWdoaGFuZGVkbmVzcy9NXFxuaGlnaGxhbmQvTVJaU1xcbmhpZ2hsYW5kZXIvTVxcbmhpZ2hsaWdodC9TTURSWkdcXG5oaWdobGlnaHRlci9NXFxuaGlnaG5lc3MvTVxcbmhpZ2hyb2FkL01TXFxuaGlnaHNcXG5oaWdodGFpbC9EU0dcXG5oaWdod2F5L01TXFxuaGlnaHdheW1hbi9NXFxuaGlnaHdheW1lblxcbmhpamFiL1NNXFxuaGlqYWNrL1NKWkdNRFJcXG5oaWphY2tlci9NXFxuaGlqYWNraW5nL01cXG5oaWtlL01aR0RSU1xcbmhpa2VyL01cXG5oaWtpbmcvTVxcbmhpbGFyaW91cy9QWVxcbmhpbGFyaW91c25lc3MvTVxcbmhpbGFyaXR5L01cXG5oaWxsL01TXFxuaGlsbGJpbGx5L1NNXFxuaGlsbGluZXNzL01cXG5oaWxsb2NrL01TXFxuaGlsbHNpZGUvU01cXG5oaWxsdG9wL01TXFxuaGlsbHkvUFJUXFxuaGlsdC9NU1xcbmhpbS9TXFxuaGltc2VsZlxcbmhpbmQvTVJaU1xcbmhpbmRlci9HRFxcbmhpbmRlcmVkL1VcXG5oaW5kbW9zdFxcbmhpbmRxdWFydGVyL01TXFxuaGluZHJhbmNlL1NNXFxuaGluZHNpZ2h0L01cXG5oaW5nZSdzXFxuaGluZ2UvVURTR1xcbmhpbnQvTURSWkdTXFxuaGludGVyL01cXG5oaW50ZXJsYW5kL1NNXFxuaGlwL1NQTVxcbmhpcGJhdGhcXG5oaXBiYXRoc1xcbmhpcGJvbmUvTVNcXG5oaXBodWdnZXJzXFxuaGlwbmVzcy9NXFxuaGlwcGVkXFxuaGlwcGVyXFxuaGlwcGVzdFxcbmhpcHBpZS9TTVxcbmhpcHBpbmdcXG5oaXBwby9TTVxcbmhpcHBvY2FtcHVzXFxuaGlwcG9kcm9tZS9TTVxcbmhpcHBvcG90YW11cy9NU1xcbmhpcHB5XFxuaGlwc3Rlci9NU1xcbmhpcmFnYW5hXFxuaGlyZSdzXFxuaGlyZS9BR0RTXFxuaGlyZWxpbmcvTVNcXG5oaXJzdXRlL1BcXG5oaXJzdXRlbmVzcy9NXFxuaGlzcy9NRFNHXFxuaGlzdFxcbmhpc3RhbWluZS9NU1xcbmhpc3RvZ3JhbS9NU1xcbmhpc3RvbG9naXN0L1NNXFxuaGlzdG9sb2d5L01cXG5oaXN0b3BhdGhvbG9neVxcbmhpc3Rvcmlhbi9NU1xcbmhpc3RvcmljXFxuaGlzdG9yaWNhbC9ZXFxuaGlzdG9yaWNpdHkvTVxcbmhpc3RvcmlvZ3JhcGhlci9NU1xcbmhpc3RvcmlvZ3JhcGh5L01cXG5oaXN0b3J5L1NNXFxuaGlzdHJpb25pYy9TXFxuaGlzdHJpb25pY2FsbHlcXG5oaXN0cmlvbmljcy9NXFxuaGl0L1NNXFxuaGl0Y2gnc1xcbmhpdGNoL1VEU0dcXG5oaXRjaGVyL01TXFxuaGl0Y2hoaWtlL0RSU01aR1xcbmhpdGNoaGlrZXIvTVxcbmhpdGhlclxcbmhpdGhlcnRvXFxuaGl0dGVyL1NNXFxuaGl0dGluZ1xcbmhpdmUvTUdEU1xcbmhpdmVtaW5kL1NNXFxuaGl5YVxcbmhtbVxcbmhvL1NNRFJZWlxcbmhvYWdpZS9NU1xcbmhvYXJkL1NaR01EUkpcXG5ob2FyZGVyL01cXG5ob2FyZGluZy9NXFxuaG9hcmZyb3N0L01cXG5ob2FyaW5lc3MvTVxcbmhvYXJzZS9ZVFJQXFxuaG9hcnNlbmVzcy9NXFxuaG9hcnkvVFJQXFxuaG9heC9NRFJTWkdcXG5ob2F4ZXIvTVxcbmhvYi9TTVxcbmhvYmJpdC9TXFxuaG9iYmxlL01aR0RSU1xcbmhvYmJsZXIvTVxcbmhvYmJ5L1NNXFxuaG9iYnlob3JzZS9NU1xcbmhvYmJ5aXN0L1NNXFxuaG9iZ29ibGluL01TXFxuaG9ibmFpbC9TR01EXFxuaG9ibm9iL1NcXG5ob2Jub2JiZWRcXG5ob2Jub2JiaW5nXFxuaG9iby9NU1xcbmhvY1xcbmhvY2svTURTR1xcbmhvY2tleS9NXFxuaG9ja3Nob3AvTVNcXG5ob2QvU01cXG5ob2RnZXBvZGdlL1NNXFxuaG9lL1NNXFxuaG9lY2FrZS9TTVxcbmhvZWRvd24vU01cXG5ob2VpbmdcXG5ob2VyL01cXG5ob2cvU01cXG5ob2dhbi9TTVxcbmhvZ2JhY2svU01cXG5ob2dnZWRcXG5ob2dnaW5nXFxuaG9nZ2lzaC9ZXFxuaG9nc2hlYWQvU01cXG5ob2d0aWUvRFNcXG5ob2d0eWluZ1xcbmhvZ3dhc2gvTVxcbmhvaWNrL1NHRFxcbmhvaXN0L1NHTURcXG5ob2tlL0dEU1xcbmhva2V5XFxuaG9raWVyXFxuaG9raWVzdFxcbmhva3VtL01cXG5ob2xkL01SSlNaR1xcbmhvbGRhbGwvU1xcbmhvbGRlci9NXFxuaG9sZGluZy9NXFxuaG9sZG91dC9TTVxcbmhvbGRvdmVyL1NNXFxuaG9sZHVwL01TXFxuaG9sZS9NR0RTXFxuaG9sZXlcXG5ob2xpZGF5L1NNREdcXG5ob2xpZGF5bWFrZXIvU1xcbmhvbGluZXNzL1VNXFxuaG9saXNtXFxuaG9saXN0aWNcXG5ob2xpc3RpY2FsbHlcXG5ob2xsZXIvTURHU1xcbmhvbGxvdy9NRFJZUFNUR1xcbmhvbGxvd25lc3MvTVxcbmhvbGx5L1NNXFxuaG9sbHlob2NrL01TXFxuaG9sbWl1bS9NXFxuaG9sb2NhdXN0L1NNXFxuaG9sb2dyYW0vTVNcXG5ob2xvZ3JhcGgvTVxcbmhvbG9ncmFwaGljXFxuaG9sb2dyYXBoc1xcbmhvbG9ncmFwaHkvTVxcbmhvbHNcXG5ob2xzdGVyL1NNREdcXG5ob2x5L1VSUFRcXG5ob21hZ2UvTVNcXG5ob21icmUvTVNcXG5ob21idXJnL1NNXFxuaG9tZS9NWVpHRFJTXFxuaG9tZWJvZHkvU01cXG5ob21lYm95L1NNXFxuaG9tZWNvbWluZy9TTVxcbmhvbWVncm93blxcbmhvbWVsYW5kL01TXFxuaG9tZWxlc3MvTVBcXG5ob21lbGVzc25lc3MvTVxcbmhvbWVsaWtlXFxuaG9tZWxpbmVzcy9NXFxuaG9tZWx5L1BSVFxcbmhvbWVtYWRlXFxuaG9tZW1ha2VyL1NNXFxuaG9tZW1ha2luZy9NXFxuaG9tZW9wYXRoL01cXG5ob21lb3BhdGhpY1xcbmhvbWVvcGF0aHNcXG5ob21lb3BhdGh5L01cXG5ob21lb3N0YXNpcy9NXFxuaG9tZW9zdGF0aWNcXG5ob21lb3duZXIvTVNcXG5ob21lcGFnZS9NU1xcbmhvbWVyL0dNRFxcbmhvbWVyb29tL01TXFxuaG9tZXNjaG9vbGluZy9NXFxuaG9tZXNpY2svUFxcbmhvbWVzaWNrbmVzcy9NXFxuaG9tZXNwdW4vTVxcbmhvbWVzdGVhZC9TTURSWkdcXG5ob21lc3RlYWRlci9NXFxuaG9tZXN0cmV0Y2gvTVNcXG5ob21ldG93bi9NU1xcbmhvbWV3YXJkL1NcXG5ob21ld29yay9NUlpHXFxuaG9tZXdyZWNrZXIvU01cXG5ob21leS9TTVBcXG5ob21leW5lc3MvTVxcbmhvbWljaWRhbFxcbmhvbWljaWRlL01TXFxuaG9taWVyXFxuaG9taWVzdFxcbmhvbWlsZXRpY1xcbmhvbWlseS9TTVxcbmhvbWluaWQvU01cXG5ob21pbm9pZC9TXFxuaG9taW55L01cXG5ob21vL01TXFxuaG9tb2Vyb3RpY1xcbmhvbW9nZW5laXR5L01cXG5ob21vZ2VuZW91cy9ZXFxuaG9tb2dlbml6YXRpb24vTVxcbmhvbW9nZW5pemUvRFNHXFxuaG9tb2dyYXBoL01cXG5ob21vZ3JhcGhzXFxuaG9tb2xvZ291c1xcbmhvbW9sb2d5XFxuaG9tb255bS9TTVxcbmhvbW9waG9iaWEvTVxcbmhvbW9waG9iaWNcXG5ob21vcGhvbmUvTVNcXG5ob21vc2V4dWFsL1NNXFxuaG9tb3NleHVhbGl0eS9NXFxuaG9uL1NaVEdNRFJcXG5ob25jaG8vTVNcXG5ob25lL01TXFxuaG9uZXIvTVxcbmhvbmVzdC9FWVRcXG5ob25lc3RlclxcbmhvbmVzdHkvRU1cXG5ob25leS9TR01EXFxuaG9uZXliZWUvU01cXG5ob25leWNvbWIvTURTR1xcbmhvbmV5ZGV3L1NNXFxuaG9uZXlsb2N1c3QvTVxcbmhvbmV5bW9vbi9aR01EUlNcXG5ob25leW1vb25lci9NXFxuaG9uZXlwb3QvU1xcbmhvbmV5c3Vja2xlL1NNXFxuaG9uay9NRFJTWkdcXG5ob25rZXIvTVxcbmhvbmt5L1NNXFxuaG9ub3IvRVNHTURCXFxuaG9ub3JhYmxlbmVzcy9NXFxuaG9ub3JhYmx5L0VcXG5ob25vcmFyaWx5XFxuaG9ub3Jhcml1bS9NU1xcbmhvbm9yYXJ5XFxuaG9ub3JlZS9TTVxcbmhvbm9yZXIvU01cXG5ob25vcmlmaWMvTVNcXG5ob29jaC9NXFxuaG9vZC9NRFNHXFxuaG9vZGllL01TXFxuaG9vZGx1bS9TTVxcbmhvb2Rvby9NRFNHXFxuaG9vZHdpbmsvREdTXFxuaG9vZXkvTVxcbmhvb2YvTURSU1pHXFxuaG9vaydzXFxuaG9vay9VRFNHXFxuaG9va2FoL01cXG5ob29rYWhzXFxuaG9va2VyL01TXFxuaG9va3VwL01TXFxuaG9va3dvcm0vTVNcXG5ob29reS9NXFxuaG9vbGlnYW4vTVNcXG5ob29saWdhbmlzbS9NXFxuaG9vcC9NRFNHXFxuaG9vcGxhL01cXG5ob29yYXlcXG5ob29zZWdvdy9TTVxcbmhvb3QvTURSU1pHXFxuaG9vdGVuYW5ueS9TTVxcbmhvb3Rlci9NXFxuaG9vdmVyL0RTR1xcbmhvb3Zlc1xcbmhvcC9TR01EXFxuaG9wZS9NU1xcbmhvcGVmdWwvUFNNWVxcbmhvcGVmdWxuZXNzL01cXG5ob3BlbGVzcy9ZUFxcbmhvcGVsZXNzbmVzcy9NXFxuaG9wcGVkXFxuaG9wcGVyL01TXFxuaG9wcGluZ1xcbmhvcHNjb3RjaC9NRFNHXFxuaG9yYS9NU1xcbmhvcmRlL0RTTUdcXG5ob3JlaG91bmQvU01cXG5ob3Jpem9uL1NNXFxuaG9yaXpvbnRhbC9TTVlcXG5ob3Jtb25hbFxcbmhvcm1vbmUvU01cXG5ob3JuL01EU1xcbmhvcm5iZWFtXFxuaG9ybmJsZW5kZS9NXFxuaG9ybmV0L01TXFxuaG9ybmxlc3NcXG5ob3JubGlrZVxcbmhvcm5waXBlL01TXFxuaG9ybnkvVFJcXG5ob3JvbG9naWNcXG5ob3JvbG9naWNhbFxcbmhvcm9sb2dpc3QvTVNcXG5ob3JvbG9neS9NXFxuaG9yb3Njb3BlL1NNXFxuaG9ycmVuZG91cy9ZXFxuaG9ycmlibGUvUFxcbmhvcnJpYmxlbmVzcy9NXFxuaG9ycmlibHlcXG5ob3JyaWQvWVxcbmhvcnJpZmljXFxuaG9ycmlmaWNhbGx5XFxuaG9ycmlmeS9EU0dcXG5ob3JyaWZ5aW5nL1lcXG5ob3Jyb3IvTVNcXG5ob3JzZSdzXFxuaG9yc2UvVURTR1xcbmhvcnNlYmFjay9NXFxuaG9yc2Vib3gvU1xcbmhvcnNlZmxlc2gvTVxcbmhvcnNlZmx5L1NNXFxuaG9yc2VoYWlyL01cXG5ob3JzZWhpZGUvTVxcbmhvcnNlbGF1Z2gvTVxcbmhvcnNlbGF1Z2hzXFxuaG9yc2VsZXNzXFxuaG9yc2VtYW4vTVxcbmhvcnNlbWFuc2hpcC9NXFxuaG9yc2VtZW5cXG5ob3JzZXBsYXkvTVxcbmhvcnNlcG93ZXIvTVxcbmhvcnNlcmFkaXNoL01TXFxuaG9yc2VzaGl0LyFcXG5ob3JzZXNob2UvRFNNXFxuaG9yc2VzaG9laW5nXFxuaG9yc2V0YWlsL1NNXFxuaG9yc2V0cmFkaW5nXFxuaG9yc2V3aGlwL1NNXFxuaG9yc2V3aGlwcGVkXFxuaG9yc2V3aGlwcGluZ1xcbmhvcnNld29tYW4vTVxcbmhvcnNld29tZW5cXG5ob3JzZXlcXG5ob3JzaWVyXFxuaG9yc2llc3RcXG5ob3J0YXRvcnlcXG5ob3J0aWN1bHR1cmFsXFxuaG9ydGljdWx0dXJhbGlzdC9TXFxuaG9ydGljdWx0dXJlL01cXG5ob3J0aWN1bHR1cmlzdC9NU1xcbmhvc2FubmEvU01cXG5ob3NlL01HRFNcXG5ob3NlcGlwZS9TXFxuaG9zaWVyL01TXFxuaG9zaWVyeS9NXFxuaG9zcFxcbmhvc3Bob2xpcGFzZVxcbmhvc3BpY2UvTVNcXG5ob3NwaXRhYmxlL0lcXG5ob3NwaXRhYmx5L0lcXG5ob3NwaXRhbC9TTVxcbmhvc3BpdGFsaXR5L01cXG5ob3NwaXRhbGl6YXRpb24vU01cXG5ob3NwaXRhbGl6ZS9EU0dcXG5ob3N0L01EU0dcXG5ob3N0YWdlL01TXFxuaG9zdGVsL1pHTURSU1xcbmhvc3RlbGVyL01cXG5ob3N0ZWxyeS9TTVxcbmhvc3Rlc3MvTURTR1xcbmhvc3RpbGUvTVlTXFxuaG9zdGlsaXRpZXMvTVxcbmhvc3RpbGl0eS9TTVxcbmhvc3RsZXIvTVNcXG5ob3QvU1lQXFxuaG90YmVkL01TXFxuaG90Ymxvb2RlZFxcbmhvdGJveC9NU1xcbmhvdGNha2UvU01cXG5ob3RlbC9TTVxcbmhvdGVsaWVyL01TXFxuaG90Zm9vdC9NREdTXFxuaG90aGVhZC9EU01cXG5ob3RoZWFkZWQvWVBcXG5ob3RoZWFkZWRuZXNzL01cXG5ob3Rob3VzZS9TTVxcbmhvdGtleS9TXFxuaG90bGluay9TXFxuaG90bmVzcy9NXFxuaG90cGxhdGUvU01cXG5ob3Rwb3QvU1xcbmhvdHMvTVxcbmhvdHNob3QvTVNcXG5ob3R0ZWRcXG5ob3R0ZXJcXG5ob3R0ZXN0XFxuaG90dGllL1NcXG5ob3R0aW5nXFxuaG91bmQvU0dNRFxcbmhvdXIvTVlTXFxuaG91cmdsYXNzL01TXFxuaG91cmkvU01cXG5ob3VzZSdzXFxuaG91c2UvQURTR1xcbmhvdXNlYm9hdC9TTVxcbmhvdXNlYm91bmRcXG5ob3VzZWJveS9TTVxcbmhvdXNlYnJlYWsvUlNaR1xcbmhvdXNlYnJlYWtlci9NXFxuaG91c2VicmVha2luZy9NXFxuaG91c2Vicm9rZVxcbmhvdXNlYnJva2VuXFxuaG91c2VjbGVhbi9EU0dcXG5ob3VzZWNsZWFuaW5nL01cXG5ob3VzZWNvYXQvU01cXG5ob3VzZWZseS9TTVxcbmhvdXNlZnVsL1NNXFxuaG91c2Vob2xkL1NNUlpcXG5ob3VzZWhvbGRlci9NXFxuaG91c2VodXNiYW5kL1NNXFxuaG91c2VrZWVwZXIvTVNcXG5ob3VzZWtlZXBpbmcvTVxcbmhvdXNlbGlnaHRzL01cXG5ob3VzZW1haWQvU01cXG5ob3VzZW1hbi9NXFxuaG91c2VtYXN0ZXIvU1xcbmhvdXNlbWF0ZS9TXFxuaG91c2VtZW5cXG5ob3VzZW1pc3RyZXNzL1NcXG5ob3VzZW1vdGhlci9TTVxcbmhvdXNlcGFyZW50L1NNXFxuaG91c2VwbGFudC9NU1xcbmhvdXNlcHJvdWRcXG5ob3VzZXJvb21cXG5ob3VzZXRvcC9TTVxcbmhvdXNld2FyZXMvTVxcbmhvdXNld2FybWluZy9TTVxcbmhvdXNld2lmZS9NWVxcbmhvdXNld2l2ZXNcXG5ob3VzZXdvcmsvTVxcbmhvdXNpbmcvTVNcXG5ob3ZlXFxuaG92ZWwvU01cXG5ob3Zlci9TR0RcXG5ob3ZlcmJvYXJkL01TXFxuaG92ZXJjcmFmdC9NU1xcbmhvdydkXFxuaG93J3JlXFxuaG93L1NNXFxuaG93YmVpdFxcbmhvd2RhaC9NXFxuaG93ZGFoc1xcbmhvd2R5XFxuaG93ZXZlclxcbmhvd2l0emVyL1NNXFxuaG93bC9NRFJTWkdcXG5ob3dsZXIvTVxcbmhvd3NvZXZlclxcbmhveWRlbi9NU1xcbmhveWRlbmlzaFxcbmhwXFxuaHIvU1xcbmh0XFxuaHVhcmFjaGUvU01cXG5odWIvU01cXG5odWJidWIvU01cXG5odWJieS9TTVxcbmh1YmNhcC9TTVxcbmh1YnJpcy9NXFxuaHVja2xlYmVycnkvU01cXG5odWNrc3Rlci9TR01EXFxuaHVja3N0ZXJpc20vTVxcbmh1ZGRsZS9EU01HXFxuaHVlL0RTTVxcbmh1ZmYvTURTR1xcbmh1ZmZpbHlcXG5odWZmaW5lc3MvTVxcbmh1ZmZ5L1BSVFxcbmh1Zy9TVE1SXFxuaHVnZS9ZUFxcbmh1Z2VuZXNzL01cXG5odWdnZWRcXG5odWdnaW5nXFxuaHVoXFxuaHVsYS9NU1xcbmh1bGsvTVNHXFxuaHVsbC9NRFJTWkdcXG5odWxsYWJhbG9vL1NNXFxuaHVsbGVyL01cXG5odW0vU01cXG5odW1hbi9TTVJZVFBcXG5odW1hbmUvUFlcXG5odW1hbmVuZXNzL01cXG5odW1hbmlzbS9NXFxuaHVtYW5pc3QvU01cXG5odW1hbmlzdGljXFxuaHVtYW5pdGFyaWFuL01TXFxuaHVtYW5pdGFyaWFuaXNtL01cXG5odW1hbml0aWVzL01cXG5odW1hbml0eS9JU01cXG5odW1hbml6YXRpb24vQ01cXG5odW1hbml6ZS9DRFNHXFxuaHVtYW5pemVyL1NNXFxuaHVtYW5raW5kL01cXG5odW1hbm5lc3MvTVxcbmh1bWFub2lkL1NNXFxuaHVtYmxlL0RSU1pUR0pQXFxuaHVtYmxlbmVzcy9NXFxuaHVtYmxlci9NXFxuaHVtYmx5XFxuaHVtYnVnL1NNXFxuaHVtYnVnZ2VkXFxuaHVtYnVnZ2luZ1xcbmh1bWRpbmdlci9NU1xcbmh1bWRydW0vTVxcbmh1bWVyYWxcXG5odW1lcmlcXG5odW1lcnVzL01cXG5odW1pZC9ZXFxuaHVtaWRpZmljYXRpb24vTVxcbmh1bWlkaWZpZXIvQ01cXG5odW1pZGlmeS9DWkdEUlNcXG5odW1pZGl0eS9NXFxuaHVtaWRvci9TTVxcbmh1bWlsaWF0ZS9EU0dOWFxcbmh1bWlsaWF0aW5nL1lcXG5odW1pbGlhdGlvbi9NXFxuaHVtaWxpdHkvTVxcbmh1bW1lZFxcbmh1bW1lci9TTVxcbmh1bW1pbmdcXG5odW1taW5nYmlyZC9TTVxcbmh1bW1vY2svU01cXG5odW1tb2NreVxcbmh1bW11cy9NXFxuaHVtb25nb3VzXFxuaHVtb3IvU01ER1xcbmh1bW9yZXNxdWVcXG5odW1vcmlzdC9NU1xcbmh1bW9ybGVzcy9ZUFxcbmh1bW9ybGVzc25lc3MvTVxcbmh1bW9yb3VzL1BZXFxuaHVtb3JvdXNuZXNzL01cXG5odW1wL01EU0dcXG5odW1wYmFjay9NRFNcXG5odW1waC9ER1xcbmh1bXBoc1xcbmh1bXVzL01cXG5odW5jaC9NRFNHXFxuaHVuY2hiYWNrL1NNRFxcbmh1bmRyZWQvU01IXFxuaHVuZHJlZGZvbGRcXG5odW5kcmVkdGgvTVxcbmh1bmRyZWR0aHNcXG5odW5kcmVkd2VpZ2h0L1NNXFxuaHVuZ1xcbmh1bmdlci9TTURHXFxuaHVuZ292ZXJcXG5odW5ncmlseVxcbmh1bmdyaW5lc3MvTVxcbmh1bmdyeS9QUlRcXG5odW5rL01SU1pcXG5odW5rZXIvREdcXG5odW5reS9SVFxcbmh1bnQvTURSU1pHXFxuaHVudGVyL01cXG5odW50aW5nL01cXG5odW50cmVzcy9NU1xcbmh1bnRzbWFuL01cXG5odW50c21lblxcbmh1cmRsZS9EUlNNWkdcXG5odXJkbGVyL01cXG5odXJkbGluZy9NXFxuaHVybC9NRFJTWkdcXG5odXJsZXIvTVxcbmh1cmxpbmcvTVxcbmh1cnJhaC9HTURcXG5odXJyYWhzXFxuaHVycmljYW5lL01TXFxuaHVycmllZC9VWVxcbmh1cnJ5L0RTTUdcXG5odXJ0L01TR1xcbmh1cnRmdWwvWVBcXG5odXJ0ZnVsbmVzcy9NXFxuaHVydGxlL0RTR1xcbmh1c2JhbmQvR01EU1xcbmh1c2JhbmRtYW4vTVxcbmh1c2JhbmRtZW5cXG5odXNiYW5kcnkvTVxcbmh1c2gvTURTR1xcbmh1c2svTURSU1pHXFxuaHVza2VyL01cXG5odXNraWx5XFxuaHVza2luZXNzL01cXG5odXNreS9QUlNNVFxcbmh1c3Nhci9TTVxcbmh1c3N5L1NNXFxuaHVzdGluZ3MvTVxcbmh1c3RsZS9EUlNNWkdcXG5odXN0bGVyL01cXG5odXQvU01cXG5odXRjaC9NU1xcbmh1enphaC9NREdcXG5odXp6YWhzXFxuaHd5XFxuaHlhY2ludGgvTVxcbmh5YWNpbnRoc1xcbmh5YnJpZC9TTVxcbmh5YnJpZGlzbS9NXFxuaHlicmlkaXphdGlvbi9NXFxuaHlicmlkaXplL0RTR1xcbmh5ZHJhL1NNXFxuaHlkcmFuZ2VhL1NNXFxuaHlkcmFudC9NU1xcbmh5ZHJhdGUnc1xcbmh5ZHJhdGUvQ0dORFNcXG5oeWRyYXRpb24vQ01cXG5oeWRyYXVsaWMvU1xcbmh5ZHJhdWxpY2FsbHlcXG5oeWRyYXVsaWNzL01cXG5oeWRyby9NXFxuaHlkcm9jYXJib24vTVNcXG5oeWRyb2NlcGhhbHVzL01cXG5oeWRyb2NobG9yaWRlXFxuaHlkcm9jb3J0aXNvbmVcXG5oeWRyb2R5bmFtaWMvU1xcbmh5ZHJvZHluYW1pY3MvTVxcbmh5ZHJvZWxlY3RyaWNcXG5oeWRyb2VsZWN0cmljYWxseVxcbmh5ZHJvZWxlY3RyaWNpdHkvTVxcbmh5ZHJvZm9pbC9NU1xcbmh5ZHJvZ2VuL01cXG5oeWRyb2dlbmF0ZS9DR0RTXFxuaHlkcm9nZW5hdGlvbi9NXFxuaHlkcm9nZW5vdXNcXG5oeWRyb2xvZ2lzdC9NU1xcbmh5ZHJvbG9neS9NXFxuaHlkcm9seXNlc1xcbmh5ZHJvbHlzaXMvTVxcbmh5ZHJvbHl6ZS9EU0dcXG5oeWRyb21ldGVyL1NNXFxuaHlkcm9tZXRyeS9NXFxuaHlkcm9waGlsaWNcXG5oeWRyb3Bob2JpYS9NXFxuaHlkcm9waG9iaWNcXG5oeWRyb3Bob25lL1NNXFxuaHlkcm9wbGFuZS9HRFNNXFxuaHlkcm9wb25pYy9TXFxuaHlkcm9wb25pY2FsbHlcXG5oeWRyb3Bvbmljcy9NXFxuaHlkcm9zcGhlcmUvTVxcbmh5ZHJvdGhlcmFweS9NXFxuaHlkcm90aGVybWFsXFxuaHlkcm91c1xcbmh5ZHJveGlkZS9TTVxcbmh5ZW5hL1NNXFxuaHlnaWVuZS9NXFxuaHlnaWVuaWMvVVxcbmh5Z2llbmljYWxseVxcbmh5Z2llbmlzdC9NU1xcbmh5Z3JvbWV0ZXIvU01cXG5oeWluZ1xcbmh5bWVuL1NNXFxuaHltZW5lYWxcXG5oeW1uL01EU0dcXG5oeW1uYWwvTVNcXG5oeW1uYm9vay9TTVxcbmh5cGUvTUdEUlNcXG5oeXBlcmFjdGl2ZVxcbmh5cGVyYWN0aXZpdHkvTVxcbmh5cGVyYm9sYS9TTVxcbmh5cGVyYm9sZS9NXFxuaHlwZXJib2xpY1xcbmh5cGVyY3JpdGljYWwvWVxcbmh5cGVyY3ViZVxcbmh5cGVyZ2x5Y2VtaWEvTVxcbmh5cGVyaW5mbGF0aW9uXFxuaHlwZXJsaW5rL0dTTURcXG5oeXBlcm1hcmtldC9TXFxuaHlwZXJtZWRpYS9NXFxuaHlwZXJwYXJhdGh5cm9pZGlzbVxcbmh5cGVycGxhbmVcXG5oeXBlcnNlbnNpdGl2ZS9QXFxuaHlwZXJzZW5zaXRpdmVuZXNzL01cXG5oeXBlcnNlbnNpdGl2aXR5L1NNXFxuaHlwZXJzcGFjZS9TXFxuaHlwZXJ0ZW5zaW9uL01cXG5oeXBlcnRlbnNpdmUvU01cXG5oeXBlcnRleHQvTVxcbmh5cGVydGh5cm9pZC9NXFxuaHlwZXJ0aHlyb2lkaXNtL01cXG5oeXBlcnRyb3BoeS9EU01HXFxuaHlwZXJ2ZW50aWxhdGUvR05EU1xcbmh5cGVydmVudGlsYXRpb24vTVxcbmh5cGVydmlzb3IvTVNcXG5oeXBoZW4vTURTR1xcbmh5cGhlbmF0ZS9YRFNNR05cXG5oeXBoZW5hdGlvbi9NXFxuaHlwbm9zZXNcXG5oeXBub3Npcy9NXFxuaHlwbm90aGVyYXBpc3QvU1xcbmh5cG5vdGhlcmFweS9NXFxuaHlwbm90aWMvU01cXG5oeXBub3RpY2FsbHlcXG5oeXBub3Rpc20vTVxcbmh5cG5vdGlzdC9NU1xcbmh5cG5vdGl6ZS9HRFNcXG5oeXBvL01TXFxuaHlwb2FsbGVyZ2VuaWNcXG5oeXBvY2hvbmRyaWEvTVxcbmh5cG9jaG9uZHJpYWMvU01cXG5oeXBvY3Jpc3kvU01cXG5oeXBvY3JpdGUvTVNcXG5oeXBvY3JpdGljYWwvWVxcbmh5cG9kZXJtaWMvTVNcXG5oeXBvZ2x5Y2VtaWEvTVxcbmh5cG9nbHljZW1pYy9TTVxcbmh5cG90ZW51c2UvTVNcXG5oeXBvdGhhbGFtaVxcbmh5cG90aGFsYW11cy9NXFxuaHlwb3RoZXJtaWEvTVxcbmh5cG90aGVzZXNcXG5oeXBvdGhlc2lzL01cXG5oeXBvdGhlc2l6ZS9EU0dcXG5oeXBvdGhldGljYWwvWVxcbmh5cG90aHlyb2lkL01cXG5oeXBvdGh5cm9pZGlzbS9NXFxuaHlzc29wL01cXG5oeXN0ZXJlY3RvbXkvU01cXG5oeXN0ZXJlc2lzXFxuaHlzdGVyaWEvTVxcbmh5c3RlcmljL1NNXFxuaHlzdGVyaWNhbC9ZXFxuaHlzdGVyaWNzL01cXG5pL1VTXFxuaU9TL01cXG5pUGFkL01cXG5pUGhvbmUvTVxcbmlQb2QvTVxcbmlUdW5lcy9NXFxuaWFtYi9NU1xcbmlhbWJpXFxuaWFtYmljL1NNXFxuaWFtYnVzL01TXFxuaWJleC9NU1xcbmliaWRcXG5pYmlkZW1cXG5pYmlzL01TXFxuaWJ1cHJvZmVuL01cXG5pY2Unc1xcbmljZS9DRFNHXFxuaWNlYmVyZy9TTVxcbmljZWJvYXQvU01cXG5pY2Vib3VuZFxcbmljZWJveC9NU1xcbmljZWJyZWFrZXIvU01cXG5pY2VjYXAvU01cXG5pY2VtYW4vTVxcbmljZW1lblxcbmljaHRoeW9sb2dpc3QvTVNcXG5pY2h0aHlvbG9neS9NXFxuaWNpY2xlL1NNXFxuaWNpbHlcXG5pY2luZXNzL01cXG5pY2luZy9TTVxcbmlja3kvUlRcXG5pY29uL01TXFxuaWNvbmljXFxuaWNvbm9jbGFzbS9NXFxuaWNvbm9jbGFzdC9TTVxcbmljb25vY2xhc3RpY1xcbmljb25vZ3JhcGh5L01cXG5pY3R1cy9NXFxuaWN5L1RQUlxcbmlkL1NNWVxcbmlkZWEvTVNcXG5pZGVhbC9TTVlcXG5pZGVhbGlzbS9NXFxuaWRlYWxpc3QvU01cXG5pZGVhbGlzdGljXFxuaWRlYWxpc3RpY2FsbHlcXG5pZGVhbGl6YXRpb24vTVNcXG5pZGVhbGl6ZS9EU0dcXG5pZGVtXFxuaWRlbXBvdGVudFxcbmlkZW50aWNhbC9ZXFxuaWRlbnRpZmlhYmxlL1VcXG5pZGVudGlmaWNhdGlvbi9NXFxuaWRlbnRpZmllZC9VXFxuaWRlbnRpZnkvWkdORFJTWFxcbmlkZW50aWtpdC9TXFxuaWRlbnRpdHkvU01cXG5pZGVvZ3JhbS9TTVxcbmlkZW9ncmFwaC9NXFxuaWRlb2dyYXBoc1xcbmlkZW9sb2dpY2FsL1lcXG5pZGVvbG9naXN0L1NNXFxuaWRlb2xvZ3VlL01TXFxuaWRlb2xvZ3kvU01cXG5pZGVzL01cXG5pZGlvY3kvU01cXG5pZGlvbS9TTVxcbmlkaW9tYXRpYy9VXFxuaWRpb21hdGljYWxseVxcbmlkaW9wYXRoaWNcXG5pZGlvc3luY3Jhc3kvU01cXG5pZGlvc3luY3JhdGljXFxuaWRpb3N5bmNyYXRpY2FsbHlcXG5pZGlvdC9TTVxcbmlkaW90aWNcXG5pZGlvdGljYWxseVxcbmlkbGUvTVpUR0RSU1BcXG5pZGxlbmVzcy9NXFxuaWRsZXIvTVxcbmlkb2wvTVNcXG5pZG9sYXRlci9TTVxcbmlkb2xhdHJlc3MvTVNcXG5pZG9sYXRyb3VzXFxuaWRvbGF0cnkvTVxcbmlkb2xpemF0aW9uL01cXG5pZG9saXplL0dEU1xcbmlkeWxsL1NNXFxuaWR5bGxpY1xcbmlkeWxsaWNhbGx5XFxuaWYvU01cXG5pZmZpbmVzcy9NXFxuaWZmeS9SVFBcXG5pZ2xvby9TTVxcbmlnbmVvdXNcXG5pZ25pdGFibGVcXG5pZ25pdGUvQUdEU1xcbmlnbml0aW9uL01TXFxuaWdub2JsZVxcbmlnbm9ibHlcXG5pZ25vbWluaW91cy9ZXFxuaWdub21pbnkvU01cXG5pZ25vcmFtdXMvTVNcXG5pZ25vcmFuY2UvTVxcbmlnbm9yYW50L1lcXG5pZ25vcmUvR0RTXFxuaWd1YW5hL01TXFxuaWlcXG5paWlcXG5pbGVhXFxuaWxlaXRpcy9NXFxuaWxldW0vTVxcbmlsaWFcXG5pbGl1bS9NXFxuaWxrL1NNXFxuaWxsL1NNUFxcbmlsbGVnYWwvTVlTXFxuaWxsZWdhbGl0eS9TTVxcbmlsbGVnaWJpbGl0eS9NXFxuaWxsZWdpYmxlXFxuaWxsZWdpYmx5XFxuaWxsZWdpdGltYWN5L01cXG5pbGxlZ2l0aW1hdGUvWVxcbmlsbGliZXJhbC9ZXFxuaWxsaWJlcmFsaXR5L01cXG5pbGxpY2l0L1lQXFxuaWxsaWNpdG5lc3MvTVxcbmlsbGltaXRhYmxlXFxuaWxsaXRlcmFjeS9NXFxuaWxsaXRlcmF0ZS9NWVNcXG5pbGxuZXNzL01TXFxuaWxsb2dpY2FsL1lcXG5pbGxvZ2ljYWxpdHkvTVxcbmlsbHVtaW5hdGUvR05YRFNcXG5pbGx1bWluYXRpbmcvWVxcbmlsbHVtaW5hdGlvbi9NXFxuaWxsdW1pbmUvRFNCR1xcbmlsbHVzL1ZcXG5pbGx1c2lvbi9FTVNcXG5pbGx1c2lvbmlzdC9TTVxcbmlsbHVzb3J5XFxuaWxsdXN0cmF0ZS9HTlZYRFNcXG5pbGx1c3RyYXRpb24vTVxcbmlsbHVzdHJhdGl2ZS9ZXFxuaWxsdXN0cmF0b3IvU01cXG5pbGx1c3RyaW91cy9QWVxcbmlsbHVzdHJpb3VzbmVzcy9NXFxuaW1hZ2UvRFNNR1xcbmltYWdlcnkvTVxcbmltYWdpbmFibGUvVVxcbmltYWdpbmFibHkvVVxcbmltYWdpbmFsXFxuaW1hZ2luYXJ5XFxuaW1hZ2luYXRpb24vTVNcXG5pbWFnaW5hdGl2ZS9VWVxcbmltYWdpbmUvRFNCSkdcXG5pbWFnby9NXFxuaW1hZ29lc1xcbmltYW0vTVNcXG5pbWJhbGFuY2UvRFNNXFxuaW1iZWNpbGUvTVNcXG5pbWJlY2lsaWNcXG5pbWJlY2lsaXR5L1NNXFxuaW1iaWJlL1pHRFJTXFxuaW1iaWJlci9NXFxuaW1icmljYXRpb24vTVxcbmltYnJvZ2xpby9TTVxcbmltYnVlL0RTR1xcbmltaXRhYmxlL0lcXG5pbWl0YXRlL0RTR05WWFxcbmltaXRhdGlvbi9NXFxuaW1pdGF0aXZlL1BZXFxuaW1pdGF0aXZlbmVzcy9NXFxuaW1pdGF0b3IvU01cXG5pbW1hY3VsYXRlL1BZXFxuaW1tYWN1bGF0ZW5lc3MvTVxcbmltbWFuZW5jZS9NXFxuaW1tYW5lbmN5L01cXG5pbW1hbmVudC9ZXFxuaW1tYXRlcmlhbC9ZUFxcbmltbWF0ZXJpYWxpdHkvTVxcbmltbWF0ZXJpYWxuZXNzL01cXG5pbW1hdHVyZS9ZXFxuaW1tYXR1cml0eS9NXFxuaW1tZWFzdXJhYmxlXFxuaW1tZWFzdXJhYmx5XFxuaW1tZWRpYWNpZXMvTVxcbmltbWVkaWFjeS9TTVxcbmltbWVkaWF0ZS9QWVxcbmltbWVkaWF0ZW5lc3MvTVxcbmltbWVtb3JpYWwvWVxcbmltbWVuc2UvWVxcbmltbWVuc2l0eS9TTVxcbmltbWVyc2UvWERTR05WXFxuaW1tZXJzaWJsZVxcbmltbWVyc2lvbi9NXFxuaW1taWdyYW50L1NNXFxuaW1taWdyYXRlL0RTR05cXG5pbW1pZ3JhdGlvbi9NXFxuaW1taW5lbmNlL01cXG5pbW1pbmVudC9ZXFxuaW1tb2JpbGVcXG5pbW1vYmlsaXR5L01cXG5pbW1vYmlsaXphdGlvbi9NXFxuaW1tb2JpbGl6ZS9aR0RSU1xcbmltbW9kZXJhdGUvWVxcbmltbW9kZXN0L1lcXG5pbW1vZGVzdHkvTVxcbmltbW9sYXRlL0RTR05cXG5pbW1vbGF0aW9uL01cXG5pbW1vcmFsL1lcXG5pbW1vcmFsaXR5L1NNXFxuaW1tb3J0YWwvTVlTXFxuaW1tb3J0YWxpdHkvTVxcbmltbW9ydGFsaXplL0RTR1xcbmltbW92YWJpbGl0eS9NXFxuaW1tb3ZhYmxlXFxuaW1tb3ZhYmx5XFxuaW1tdW5lXFxuaW1tdW5pdHkvTVxcbmltbXVuaXphdGlvbi9TTVxcbmltbXVuaXplL0dEU1xcbmltbXVub2RlZmljaWVuY3kvTVxcbmltbXVub2RlZmljaWVudFxcbmltbXVub2dsb2J1bGluL1NcXG5pbW11bm9sb2dpY1xcbmltbXVub2xvZ2ljYWxcXG5pbW11bm9sb2dpc3QvTVNcXG5pbW11bm9sb2d5L01cXG5pbW11cmUvRFNHXFxuaW1tdXRhYmlsaXR5L01cXG5pbW11dGFibGVcXG5pbW11dGFibHlcXG5pbXAvU01SXFxuaW1wYWN0L1NNREdcXG5pbXBhaXIvU0RHTFxcbmltcGFpcmVkL1VcXG5pbXBhaXJtZW50L01TXFxuaW1wYWxhL1NNXFxuaW1wYWxlL0RTR0xcXG5pbXBhbGVtZW50L01cXG5pbXBhbHBhYmxlXFxuaW1wYWxwYWJseVxcbmltcGFuZWwvU0RHXFxuaW1wYXJ0L1NER1xcbmltcGFydGlhbC9ZXFxuaW1wYXJ0aWFsaXR5L01cXG5pbXBhc3NhYmx5XFxuaW1wYXNzZS9CU01WXFxuaW1wYXNzaWJpbGl0eS9NXFxuaW1wYXNzaWJsZVxcbmltcGFzc2libHlcXG5pbXBhc3Npb25lZFxcbmltcGFzc2l2ZS9ZUFxcbmltcGFzc2l2ZW5lc3MvTVxcbmltcGFzc2l2aXR5L01cXG5pbXBhc3RvL01cXG5pbXBhdGllbmNlL01TXFxuaW1wYXRpZW5zL01cXG5pbXBhdGllbnQvWVxcbmltcGVhY2gvWkdCTERSU1xcbmltcGVhY2hhYmxlL1VcXG5pbXBlYWNoZXIvTVxcbmltcGVhY2htZW50L1NNXFxuaW1wZWNjYWJpbGl0eS9NXFxuaW1wZWNjYWJsZVxcbmltcGVjY2FibHlcXG5pbXBlY3VuaW91cy9QWVxcbmltcGVjdW5pb3VzbmVzcy9NXFxuaW1wZWRhbmNlL01cXG5pbXBlZGUvRFNHXFxuaW1wZWRlZC9VXFxuaW1wZWRpbWVudC9TTVxcbmltcGVkaW1lbnRhL01cXG5pbXBlbC9TXFxuaW1wZWxsZWRcXG5pbXBlbGxlci9NU1xcbmltcGVsbGluZ1xcbmltcGVuZC9TREdcXG5pbXBlbmV0cmFiaWxpdHkvTVxcbmltcGVuZXRyYWJsZVxcbmltcGVuZXRyYWJseVxcbmltcGVuaXRlbmNlL01cXG5pbXBlbml0ZW50L1lcXG5pbXBlcmF0aXZlL1NNWVxcbmltcGVyY2VwdGliaWxpdHkvTVxcbmltcGVyY2VwdGlibGVcXG5pbXBlcmNlcHRpYmx5XFxuaW1wZXJjZXB0aXZlXFxuaW1wZXJmXFxuaW1wZXJmZWN0L1NNWVBcXG5pbXBlcmZlY3Rpb24vTVNcXG5pbXBlcmZlY3RuZXNzL01cXG5pbXBlcmlhbC9NWVNcXG5pbXBlcmlhbGlzbS9NXFxuaW1wZXJpYWxpc3QvU01cXG5pbXBlcmlhbGlzdGljXFxuaW1wZXJpYWxpc3RpY2FsbHlcXG5pbXBlcmlsL0dTTERcXG5pbXBlcmlsbWVudC9NXFxuaW1wZXJpb3VzL1BZXFxuaW1wZXJpb3VzbmVzcy9NXFxuaW1wZXJpc2hhYmxlXFxuaW1wZXJpc2hhYmx5XFxuaW1wZXJtYW5lbmNlL01cXG5pbXBlcm1hbmVudC9ZXFxuaW1wZXJtZWFiaWxpdHkvTVxcbmltcGVybWVhYmxlXFxuaW1wZXJtZWFibHlcXG5pbXBlcm1pc3NpYmxlXFxuaW1wZXJzb25hbC9ZXFxuaW1wZXJzb25hdGUvR05YRFNcXG5pbXBlcnNvbmF0aW9uL01cXG5pbXBlcnNvbmF0b3IvU01cXG5pbXBlcnRpbmVuY2UvTVNcXG5pbXBlcnRpbmVudC9ZXFxuaW1wZXJ0dXJiYWJpbGl0eS9NXFxuaW1wZXJ0dXJiYWJsZVxcbmltcGVydHVyYmFibHlcXG5pbXBlcnZpb3VzL1lcXG5pbXBldGlnby9NXFxuaW1wZXR1b3NpdHkvTVxcbmltcGV0dW91cy9ZUFxcbmltcGV0dW91c25lc3MvTVxcbmltcGV0dXMvTVNcXG5pbXBpZXR5L1NNXFxuaW1waW5nZS9MRFNHXFxuaW1waW5nZW1lbnQvTVxcbmltcGlvdXMvUFlcXG5pbXBpb3VzbmVzcy9NXFxuaW1waXNoL1lQXFxuaW1waXNobmVzcy9NXFxuaW1wbGFjYWJpbGl0eS9NXFxuaW1wbGFjYWJsZVxcbmltcGxhY2FibHlcXG5pbXBsYW50L0JTR01EXFxuaW1wbGFudGF0aW9uL01cXG5pbXBsYXVzaWJpbGl0eS9TTVxcbmltcGxhdXNpYmxlXFxuaW1wbGF1c2libHlcXG5pbXBsZW1lbnQvR0JNRFJTXFxuaW1wbGVtZW50YWJsZS9VXFxuaW1wbGVtZW50YXRpb24vU01cXG5pbXBsZW1lbnRlZC9VXFxuaW1wbGljYXRlL0RTR1xcbmltcGxpY2F0aW9uL01cXG5pbXBsaWNpdC9QWVxcbmltcGxpY2l0bmVzcy9NXFxuaW1wbG9kZS9EU0dcXG5pbXBsb3JlL0RTR1xcbmltcGxvcmluZy9ZXFxuaW1wbG9zaW9uL01TXFxuaW1wbG9zaXZlXFxuaW1wbHkvWERTR05cXG5pbXBvbGl0ZS9ZUFxcbmltcG9saXRlbmVzcy9NU1xcbmltcG9saXRpY1xcbmltcG9uZGVyYWJsZS9NU1xcbmltcG9ydC9aR0JTTURSXFxuaW1wb3J0YW5jZS9NXFxuaW1wb3J0YW50L1lcXG5pbXBvcnRhdGlvbi9NU1xcbmltcG9ydGVyL01cXG5pbXBvcnR1bmF0ZS9ZXFxuaW1wb3J0dW5lL0dEU1xcbmltcG9ydHVuaXR5L01cXG5pbXBvc2UvQURTR1xcbmltcG9zZXIvTVNcXG5pbXBvc2luZy9VXFxuaW1wb3NpbmdseVxcbmltcG9zaXRpb24vTVNcXG5pbXBvc3NpYmlsaXR5L1NNXFxuaW1wb3NzaWJsZS9TXFxuaW1wb3NzaWJseVxcbmltcG9zdC9TTVxcbmltcG9zdG9yL1NNXFxuaW1wb3N0dXJlL01TXFxuaW1wb3RlbmNlL01cXG5pbXBvdGVuY3kvTVxcbmltcG90ZW50L1lcXG5pbXBvdW5kL0RHU1xcbmltcG92ZXJpc2gvRFNMR1xcbmltcG92ZXJpc2htZW50L01cXG5pbXByYWN0aWNhYmlsaXR5XFxuaW1wcmFjdGljYWJsZVxcbmltcHJhY3RpY2FibHlcXG5pbXByYWN0aWNhbC9ZXFxuaW1wcmFjdGljYWxpdHkvTVxcbmltcHJlY2F0ZS9EU1hHTlxcbmltcHJlY2F0aW9uL01cXG5pbXByZWNpc2UvUFlOXFxuaW1wcmVjaXNlbmVzcy9NXFxuaW1wcmVjaXNpb24vTVxcbmltcHJlZ25hYmlsaXR5L01cXG5pbXByZWduYWJsZVxcbmltcHJlZ25hYmx5XFxuaW1wcmVnbmF0ZS9HTkRTXFxuaW1wcmVnbmF0aW9uL01cXG5pbXByZXNhcmlvL1NNXFxuaW1wcmVzcy9NRFNHVlxcbmltcHJlc3NlZC9VXFxuaW1wcmVzc2liaWxpdHkvTVxcbmltcHJlc3NpYmxlXFxuaW1wcmVzc2lvbi9CU01cXG5pbXByZXNzaW9uYWJpbGl0eS9NXFxuaW1wcmVzc2lvbmlzbS9NXFxuaW1wcmVzc2lvbmlzdC9TTVxcbmltcHJlc3Npb25pc3RpY1xcbmltcHJlc3NpdmUvUFlcXG5pbXByZXNzaXZlbmVzcy9NXFxuaW1wcmltYXR1ci9TTVxcbmltcHJpbnQvTURSWkdTXFxuaW1wcmludGVyL01cXG5pbXByaXNvbi9TRExHXFxuaW1wcmlzb25tZW50L1NNXFxuaW1wcm9iYWJpbGl0eS9TTVxcbmltcHJvYmFibGVcXG5pbXByb2JhYmx5XFxuaW1wcm9tcHR1L1NNXFxuaW1wcm9wZXIvWVxcbmltcHJvcHJpZXR5L1NNXFxuaW1wcm92ZS9HQkRTTFxcbmltcHJvdmVkL1VcXG5pbXByb3ZlbWVudC9NU1xcbmltcHJvdmlkZW5jZS9NXFxuaW1wcm92aWRlbnQvWVxcbmltcHJvdmlzYXRpb24vU01cXG5pbXByb3Zpc2F0aW9uYWxcXG5pbXByb3Zpc2UvWkdEUlNcXG5pbXByb3Zpc2VyL01cXG5pbXBydWRlbmNlL01cXG5pbXBydWRlbnQvWVxcbmltcHVkZW5jZS9NXFxuaW1wdWRlbnQvWVxcbmltcHVnbi9aR1NEUlxcbmltcHVnbmVyL01cXG5pbXB1bHNlL01HTlZEU1xcbmltcHVsc2lvbi9NXFxuaW1wdWxzaXZlL1BZXFxuaW1wdWxzaXZlbmVzcy9NXFxuaW1wdWxzaXZpdHlcXG5pbXB1bml0eS9NXFxuaW1wdXJlL1JZVFxcbmltcHVyaXR5L1NNXFxuaW1wdXRhdGlvbi9TTVxcbmltcHV0ZS9CRFNHXFxuaW4vQVNNXFxuaW5hY2N1cmFjeS9TXFxuaW5hY3Rpb24vTVxcbmluYWRlcXVhY3kvU1xcbmluYWR2ZXJ0ZW5jZS9NXFxuaW5hZHZlcnRlbnQvWVxcbmluYWxpZW5hYmlsaXR5L01cXG5pbmFsaWVuYWJseVxcbmluYW1vcmF0YS9TTVxcbmluYW5lL1JZVFxcbmluYW5pbWF0ZS9QWVxcbmluYW5pbWF0ZW5lc3MvTVxcbmluYW5pdHkvU01cXG5pbmFwcHJvcHJpYXRlL1lcXG5pbmFydGljdWxhdGUvWVxcbmluYXNtdWNoXFxuaW5hdWRpYmxlXFxuaW5hdWd1cmFsL1NNXFxuaW5hdWd1cmF0ZS9YR05EU1xcbmluYXVndXJhdGlvbi9NXFxuaW5ib2FyZC9NU1xcbmluYm91bmRcXG5pbmJveC9NU1xcbmluYnJlZWQvU1xcbmluYy9UR0RcXG5pbmNhbGN1bGFibHlcXG5pbmNhbmRlc2NlbmNlL01cXG5pbmNhbmRlc2NlbnQvWVxcbmluY2FudGF0aW9uL1NNXFxuaW5jYXBhY2l0YXRlL0dORFNcXG5pbmNhcmNlcmF0ZS9YRFNHTlxcbmluY2FyY2VyYXRpb24vTVxcbmluY2FybmFkaW5lL0RTR1xcbmluY2FybmF0ZS9BWEdORFNcXG5pbmNhcm5hdGlvbi9BTVxcbmluY2VuZGlhcnkvU01cXG5pbmNlbnNlL01HRFNcXG5pbmNlbnRpdmUnc1xcbmluY2VudGl2ZS9FU1xcbmluY2VwdGlvbi9TTVxcbmluY2Vzc2FudC9ZXFxuaW5jZXN0L01cXG5pbmNlc3R1b3VzL1BZXFxuaW5jZXN0dW91c25lc3MvTVxcbmluY2gvTURTR1xcbmluY2hvYXRlXFxuaW5jaHdvcm0vU01cXG5pbmNpZGVuY2UvU01cXG5pbmNpZGVudC9TTVxcbmluY2lkZW50YWwvTVlTXFxuaW5jaW5lcmF0ZS9EU0dOXFxuaW5jaW5lcmF0aW9uL01cXG5pbmNpbmVyYXRvci9NU1xcbmluY2lwaWVuY2UvTVxcbmluY2lwaWVudC9ZXFxuaW5jaXNlL1hHTlZEU1xcbmluY2lzaW9uL01cXG5pbmNpc2l2ZS9QWVxcbmluY2lzaXZlbmVzcy9NXFxuaW5jaXNvci9NU1xcbmluY2l0ZW1lbnQvTVNcXG5pbmNpdGVyL01TXFxuaW5jbFxcbmluY2xlbWVudFxcbmluY2xpbmF0aW9uL0VNXFxuaW5jbGluYXRpb25zXFxuaW5jbGluZSdzXFxuaW5jbGluZS9FR0RTXFxuaW5jbHVkZS9HRFNcXG5pbmNsdXNpb24vTVNcXG5pbmNsdXNpdmUvWVBcXG5pbmNsdXNpdmVuZXNzL01cXG5pbmNvZ25pdG8vTVNcXG5pbmNvbWJ1c3RpYmxlXFxuaW5jb21tb2RlL0dEXFxuaW5jb21tb2Rpb3VzXFxuaW5jb21tdW5pY2Fkb1xcbmluY29tcGF0aWJpbGl0eS9TXFxuaW5jb21wZXRlbnQvTVNcXG5pbmNvbXBsZXRlL1lcXG5pbmNvbmNlaXZhYmlsaXR5L01cXG5pbmNvbmdydW91cy9QWVxcbmluY29uZ3J1b3VzbmVzcy9NXFxuaW5jb25zb2xhYmx5XFxuaW5jb25zdGFudC9ZXFxuaW5jb250ZXN0YWJpbGl0eS9NXFxuaW5jb250ZXN0YWJseVxcbmluY29udGluZW50XFxuaW5jb250cm92ZXJ0aWJseVxcbmluY29udmVuaWVuY2UvR0RcXG5pbmNvcnBvcmF0ZS9BRFNHTlxcbmluY29ycG9yYXRlZC9VXFxuaW5jb3Jwb3JhdGlvbi9BTVxcbmluY29ycG9yZWFsXFxuaW5jb3JyZWN0L1lcXG5pbmNvcnJpZ2liaWxpdHkvTVxcbmluY29ycmlnaWJsZVxcbmluY29ycmlnaWJseVxcbmluY29ycnVwdGlibHlcXG5pbmNyZWFzaW5nL1lcXG5pbmNyZW1lbnQvU01ER1xcbmluY3JlbWVudGFsL1lcXG5pbmNyZW1lbnRhbGlzbVxcbmluY3JlbWVudGFsaXN0L1NNXFxuaW5jcmltaW5hdGUvR05EU1xcbmluY3JpbWluYXRpb24vTVxcbmluY3JpbWluYXRvcnlcXG5pbmNydXN0YXRpb24vU01cXG5pbmN1YmF0ZS9HTkRTXFxuaW5jdWJhdGlvbi9NXFxuaW5jdWJhdG9yL1NNXFxuaW5jdWJ1cy9NU1xcbmluY3VsY2F0ZS9EU0dOXFxuaW5jdWxjYXRpb24vTVxcbmluY3VscGF0ZS9EU0dcXG5pbmN1bWJlbmN5L1NNXFxuaW5jdW1iZW50L1NNXFxuaW5jdW5hYnVsYVxcbmluY3VuYWJ1bHVtL01cXG5pbmN1ci9TQlxcbmluY3VyYWJsZS9NU1xcbmluY3VyYWJseVxcbmluY3VyaW91c1xcbmluY3VycmVkXFxuaW5jdXJyaW5nXFxuaW5jdXJzaW9uL01TXFxuaW5kXFxuaW5kZWJ0ZWQvUFxcbmluZGVidGVkbmVzcy9NXFxuaW5kZWVkXFxuaW5kZWZhdGlnYWJsZVxcbmluZGVmYXRpZ2FibHlcXG5pbmRlZmVhc2libGVcXG5pbmRlZmVhc2libHlcXG5pbmRlZmluYWJseVxcbmluZGVsaWJsZVxcbmluZGVsaWJseVxcbmluZGVtbmlmaWNhdGlvbi9NXFxuaW5kZW1uaWZ5L0dEU1hOXFxuaW5kZW1uaXR5L1NNXFxuaW5kZW50YXRpb24vTVNcXG5pbmRlbnRpb24vTVxcbmluZGVudHVyZS9ER1xcbmluZGVzY3JpYmFibHlcXG5pbmRlc3RydWN0aWJseVxcbmluZGV0ZXJtaW5hYmx5XFxuaW5kZXRlcm1pbmFjeS9NXFxuaW5kZXRlcm1pbmF0ZS9ZXFxuaW5kZXgvWkdNRFJTXFxuaW5kZXhhdGlvbi9TTVxcbmluZGV4ZXIvTVxcbmluZGljYXRlL1hEU0dOVlxcbmluZGljYXRpb24vTVxcbmluZGljYXRpdmUvU01ZXFxuaW5kaWNhdG9yL01TXFxuaW5kaWN0L0dEU0JMXFxuaW5kaWN0bWVudC9TTVxcbmluZGllL1NcXG5pbmRpZ2VuY2UvTVxcbmluZGlnZW5vdXNcXG5pbmRpZ2VudC9TTVlcXG5pbmRpZ25hbnQvWVxcbmluZGlnbmF0aW9uL01cXG5pbmRpZ28vTVxcbmluZGlyZWN0L1lcXG5pbmRpc2NpcGxpbmVcXG5pbmRpc2NyZWV0L1lcXG5pbmRpc2NyZXRpb24vU1xcbmluZGlzY3JpbWluYXRlL1lcXG5pbmRpc3BlbnNhYmlsaXR5L01cXG5pbmRpc3BlbnNhYmxlL01TXFxuaW5kaXNwZW5zYWJseVxcbmluZGlzc29sdWJpbGl0eVxcbmluZGlzc29sdWJseVxcbmluZGlzdGluZ3Vpc2hhYmx5XFxuaW5kaXRlL0dEU1xcbmluZGl1bS9NXFxuaW5kaXZpZHVhbC9NWVNcXG5pbmRpdmlkdWFsaXNtL01cXG5pbmRpdmlkdWFsaXN0L01TXFxuaW5kaXZpZHVhbGlzdGljXFxuaW5kaXZpZHVhbGlzdGljYWxseVxcbmluZGl2aWR1YWxpdHkvTVxcbmluZGl2aWR1YWxpemF0aW9uL01cXG5pbmRpdmlkdWFsaXplL0dEU1xcbmluZGl2aWR1YXRlL0RTR05cXG5pbmRpdmlkdWF0aW9uL01cXG5pbmRpdmlzaWJseVxcbmluZG9jdHJpbmF0ZS9HTkRTXFxuaW5kb2N0cmluYXRpb24vTVxcbmluZG9sZW5jZS9NXFxuaW5kb2xlbnQvWVxcbmluZG9taXRhYmxlXFxuaW5kb21pdGFibHlcXG5pbmR1Yml0YWJsZVxcbmluZHViaXRhYmx5XFxuaW5kdWNlL0RSU1pHTFxcbmluZHVjZW1lbnQvU01cXG5pbmR1Y2VyL01cXG5pbmR1Y3QvREdWXFxuaW5kdWN0YW5jZS9NXFxuaW5kdWN0ZWUvU01cXG5pbmR1Y3Rpb24vTVNcXG5pbmR1Y3RpdmUvWVxcbmluZHVsZ2UvRFNHXFxuaW5kdWxnZW5jZS9TTVxcbmluZHVsZ2VudC9ZXFxuaW5kdXN0cmlhbC9ZXFxuaW5kdXN0cmlhbGlzbS9NXFxuaW5kdXN0cmlhbGlzdC9TTVxcbmluZHVzdHJpYWxpemF0aW9uL01cXG5pbmR1c3RyaWFsaXplL0RTR1xcbmluZHVzdHJpb3VzL1lQXFxuaW5kdXN0cmlvdXNuZXNzL01cXG5pbmR1c3RyeS9TTVxcbmluZHdlbGwvU0dcXG5pbmVicmlhdGUvTUdORFNcXG5pbmVicmlhdGlvbi9NXFxuaW5lZGlibGVcXG5pbmVmZmFiaWxpdHkvTVxcbmluZWZmYWJsZVxcbmluZWZmYWJseVxcbmluZWxhc3RpY1xcbmluZWxpZ2libGUvTVNcXG5pbmVsaWdpYmx5XFxuaW5lbHVjdGFibGVcXG5pbmVsdWN0YWJseVxcbmluZXB0L1lQXFxuaW5lcHRpdHVkZS9NXFxuaW5lcHRuZXNzL01cXG5pbmVxdWFsaXR5L1NcXG5pbmVydC9ZUFxcbmluZXJ0aWEvTVxcbmluZXJ0aWFsXFxuaW5lcnRuZXNzL01cXG5pbmVzY2FwYWJsZVxcbmluZXNjYXBhYmx5XFxuaW5lc3RpbWFibHlcXG5pbmV2aXRhYmlsaXR5L01cXG5pbmV2aXRhYmxlL01cXG5pbmV2aXRhYmx5XFxuaW5leGFjdC9ZXFxuaW5leGhhdXN0aWJseVxcbmluZXhvcmFiaWxpdHlcXG5pbmV4b3JhYmxlXFxuaW5leG9yYWJseVxcbmluZXhwZWRpZW50XFxuaW5leHBlcnQvWVxcbmluZXhwaWFibGVcXG5pbmV4cGxpY2FibHlcXG5pbmV4cHJlc3NpYmx5XFxuaW5leHByZXNzaXZlXFxuaW5leHRyaWNhYmx5XFxuaW5mL1pUXFxuaW5mYWxsaWJsZVxcbmluZmFteS9TTVxcbmluZmFuY3kvTVxcbmluZmFudC9NU1xcbmluZmFudGljaWRlL01TXFxuaW5mYW50aWxlXFxuaW5mYW50cnkvU01cXG5pbmZhbnRyeW1hbi9NXFxuaW5mYW50cnltZW5cXG5pbmZhcmN0L01TXFxuaW5mYXJjdGlvbi9NXFxuaW5mYXR1YXRlL0RTWEdOXFxuaW5mYXR1YXRpb24vTVxcbmluZmVjdC9BRVNER1xcbmluZmVjdGVkL1VcXG5pbmZlY3Rpb24vQVNNXFxuaW5mZWN0aW91cy9QWVxcbmluZmVjdGlvdXNuZXNzL01cXG5pbmZlbGljaXRvdXNcXG5pbmZlcmVuY2UvU01cXG5pbmZlcmVudGlhbFxcbmluZmVyaW9yL01TXFxuaW5mZXJpb3JpdHkvTVxcbmluZmVybmFsL1lcXG5pbmZlcm5vL01TXFxuaW5mZXJyZWRcXG5pbmZlcnJpbmdcXG5pbmZlc3QvR0RTXFxuaW5mZXN0YXRpb24vTVNcXG5pbmZpZGVsL01TXFxuaW5maWRlbGl0eS9TXFxuaW5maWx0cmF0b3IvU01cXG5pbmZpbml0ZS9NVlxcbmluZmluaXRlc2ltYWwvU01ZXFxuaW5maW5pdGl2YWxcXG5pbmZpbml0aXZlL01TXFxuaW5maW5pdHVkZS9NXFxuaW5maW5pdHkvU01cXG5pbmZpcm1cXG5pbmZpcm1hcnkvU01cXG5pbmZpcm1pdHkvU01cXG5pbmZpeFxcbmluZmxhbWUvRFNHXFxuaW5mbGFtbWFibGVcXG5pbmZsYW1tYXRpb24vU01cXG5pbmZsYW1tYXRvcnlcXG5pbmZsYXRhYmxlL1NNXFxuaW5mbGF0ZS9BRFNHXFxuaW5mbGF0aW9uL0VNXFxuaW5mbGF0aW9uYXJ5XFxuaW5mbGVjdC9TREdcXG5pbmZsZWN0aW9uL01TXFxuaW5mbGVjdGlvbmFsXFxuaW5mbGljdC9TREdWXFxuaW5mbGljdGlvbi9NXFxuaW5mbG93L1NNXFxuaW5mbHVlbmNlL01HRFNcXG5pbmZsdWVuY2VkL1VcXG5pbmZsdWVudGlhbC9ZXFxuaW5mbHVlbnphL01cXG5pbmZvL01cXG5pbmZvbWVyY2lhbC9TTVxcbmluZm9ybS9aXFxuaW5mb3JtYWwvWVxcbmluZm9ybWFudC9TTVxcbmluZm9ybWF0aWNzXFxuaW5mb3JtYXRpb24vRU1cXG5pbmZvcm1hdGlvbmFsXFxuaW5mb3JtYXRpdmUvUFlcXG5pbmZvcm1hdGl2ZW5lc3MvTVxcbmluZm9ybWVkL1VcXG5pbmZvdGFpbm1lbnQvTVxcbmluZnJhXFxuaW5mcmFyZWQvTVxcbmluZnJhc29uaWNcXG5pbmZyYXN0cnVjdHVyYWxcXG5pbmZyYXN0cnVjdHVyZS9TTVxcbmluZnJlcXVlbmNlL01cXG5pbmZyZXF1ZW50L1lcXG5pbmZyaW5nZW1lbnQvTVNcXG5pbmZ1cmlhdGUvR0RTXFxuaW5mdXJpYXRpbmcvWVxcbmluZnVzZXIvU01cXG5pbmdlbmlvdXMvUFlcXG5pbmdlbmlvdXNuZXNzL01cXG5pbmdlbnVlL1NNXFxuaW5nZW51aXR5L01cXG5pbmdlbnVvdXMvRVlcXG5pbmdlbnVvdXNuZXNzL01cXG5pbmdlc3QvU0RHXFxuaW5nZXN0aW9uL01cXG5pbmdsZW5vb2svU01cXG5pbmdvdC9TTVxcbmluZ3JhaW4vR1xcbmluZ3JhdGUvU01cXG5pbmdyYXRpYXRlL0dORFNcXG5pbmdyYXRpYXRpbmcvWVxcbmluZ3JhdGlhdGlvbi9NXFxuaW5ncmVkaWVudC9NU1xcbmluZ3Jlc3MvTVNcXG5pbmd1aW5hbFxcbmluaGFiaXQvREdcXG5pbmhhYml0YWJsZS9VXFxuaW5oYWJpdGFudC9TTVxcbmluaGFiaXRlZC9VXFxuaW5oYWxhbnQvU01cXG5pbmhhbGF0aW9uL01TXFxuaW5oYWxhdG9yL01TXFxuaW5oYWxlci9TTVxcbmluaGFybW9uaW91c1xcbmluaGVyZS9EU0dcXG5pbmhlcmVudC9ZXFxuaW5oZXJpdC9FR1NEXFxuaW5oZXJpdGFuY2UvRU1cXG5pbmhlcml0YW5jZXNcXG5pbmhlcml0b3IvU01cXG5pbmhpYml0L0dTRFxcbmluaGliaXRpb24vU01cXG5pbmhpYml0b3IvU01cXG5pbmhpYml0b3J5XFxuaW5odW1hbi9ZXFxuaW5odW1hbmUvWVxcbmluaW1pY2FsL1lcXG5pbmltaXRhYmx5XFxuaW5pcXVpdG91cy9ZXFxuaW5pcXVpdHkvU01cXG5pbml0aWFsL1NHTURZXFxuaW5pdGlhbGlzbVxcbmluaXRpYWxpemF0aW9uXFxuaW5pdGlhbGl6ZS9EU0dcXG5pbml0aWFsaXplZC9BVVxcbmluaXRpYXRlL1hNR05WRFNcXG5pbml0aWF0ZWQvVVxcbmluaXRpYXRpb24vTVxcbmluaXRpYXRpdmUvU01cXG5pbml0aWF0b3IvTVNcXG5pbml0aWF0b3J5XFxuaW5pdGlvXFxuaW5qZWN0L1NER1xcbmluamVjdGlvbi9TTVxcbmluamVjdG9yL1NNXFxuaW5qdW5jdGl2ZVxcbmluanVyZS9EUlNaR1xcbmluanVyZWQvVVxcbmluanVyZXIvTVxcbmluanVyaW91c1xcbmluay9NRFxcbmlua2Jsb3QvU01cXG5pbmtpbmVzcy9NXFxuaW5rbGluZy9TTVxcbmlua3N0YW5kL1NNXFxuaW5rd2VsbC9NU1xcbmlua3kvUlRQXFxuaW5sYW5kL01cXG5pbmxpbmVcXG5pbm1hdGUvU01cXG5pbm1vc3RcXG5pbm4vU0dNUkpcXG5pbm5hcmRzL01cXG5pbm5hdGUvUFlcXG5pbm5hdGVuZXNzL01cXG5pbm5lcm1vc3RcXG5pbm5lcnNvbGUvU01cXG5pbm5lcnNwcmluZ1xcbmlubmVydmF0ZS9HTkRTXFxuaW5uZXJ2YXRpb24vTVxcbmlubmluZy9NXFxuaW5uaXRcXG5pbm5rZWVwZXIvTVNcXG5pbm5vY2VuY2UvTVxcbmlubm9jZW50L01ZU1xcbmlubm9jdW91cy9QWVxcbmlubm9jdW91c25lc3MvTVxcbmlubm92YXRlL1hEU0dOVlxcbmlubm92YXRpb24vTVxcbmlubm92YXRvci9NU1xcbmlubm92YXRvcnlcXG5pbm51ZW5kby9TTVxcbmlubnVtZXJhYmx5XFxuaW5udW1lcmF0ZVxcbmlub2N1bGF0ZS9BR0RTXFxuaW5vY3VsYXRpb24vTVNcXG5pbm9wZXJhdGl2ZVxcbmlub3JkaW5hdGUvWVxcbmlub3JnYW5pY1xcbmlub3NpdG9sXFxuaW5xdWlyZS9aR0RSXFxuaW5xdWlyZXIvTVxcbmlucXVpcmluZy9ZXFxuaW5xdWlyeS9TTVxcbmlucXVpc2l0aW9uL01TXFxuaW5xdWlzaXRpb25hbFxcbmlucXVpc2l0aXZlL1lQXFxuaW5xdWlzaXRpdmVuZXNzL01cXG5pbnF1aXNpdG9yL1NNXFxuaW5xdWlzaXRvcmlhbFxcbmlucnVzaC9NU1xcbmluc2FuZS9UXFxuaW5zYXRpYWJpbGl0eS9NXFxuaW5zYXRpYWJseVxcbmluc2NyaWJlL1pHRFJcXG5pbnNjcmliZXIvTVxcbmluc2NyaXB0aW9uL01TXFxuaW5zY3J1dGFiaWxpdHkvTVxcbmluc2NydXRhYmxlL1BcXG5pbnNjcnV0YWJsZW5lc3MvTVxcbmluc2NydXRhYmx5XFxuaW5zZWFtL1NNXFxuaW5zZWN0aWNpZGFsXFxuaW5zZWN0aWNpZGUvTVNcXG5pbnNlY3Rpdm9yZS9NU1xcbmluc2VjdGl2b3JvdXNcXG5pbnNlY3VyZS9ZXFxuaW5zZW1pbmF0ZS9EU0dOXFxuaW5zZW1pbmF0aW9uL01cXG5pbnNlbnNhdGVcXG5pbnNlbnNpYmxlXFxuaW5zZW5zaXRpdmUvWVxcbmluc2VwYXJhYmxlL01TXFxuaW5zZXJ0J3NcXG5pbnNlcnQvQUdTRFxcbmluc2VydGlvbi9BTVxcbmluc2VydGlvbnNcXG5pbnNldHRpbmdcXG5pbnNob3JlXFxuaW5zaWRlL1JTTVpcXG5pbnNpZGVyL01cXG5pbnNpZGlvdXMvWVBcXG5pbnNpZGlvdXNuZXNzL01cXG5pbnNpZ2h0L01TXFxuaW5zaWdodGZ1bFxcbmluc2lnbmlhL01cXG5pbnNpbnVhdGUvR05WRFNYXFxuaW5zaW51YXRpb24vTVxcbmluc2ludWF0b3IvU01cXG5pbnNpcGlkL1BZXFxuaW5zaXBpZGl0eS9NXFxuaW5zaXN0L1NHRFxcbmluc2lzdGVuY2UvTVxcbmluc2lzdGVudC9ZXFxuaW5zaXN0aW5nL1lcXG5pbnNvZmFyXFxuaW5zb2xlL1NNXFxuaW5zb2xlbmNlL01cXG5pbnNvbGVudC9ZXFxuaW5zb2x1YmxlXFxuaW5zb2x1Ymx5XFxuaW5zb2x2ZW5jeS9TXFxuaW5zb21uaWEvTVxcbmluc29tbmlhYy9TTVxcbmluc29tdWNoXFxuaW5zb3VjaWFuY2UvTVxcbmluc291Y2lhbnRcXG5pbnNwZWN0L0FHRFNcXG5pbnNwZWN0aW9uL1NNXFxuaW5zcGVjdG9yL01TXFxuaW5zcGVjdG9yYXRlL01TXFxuaW5zcGlyYXRpb24vTVNcXG5pbnNwaXJhdGlvbmFsXFxuaW5zcGlyYXRvcnlcXG5pbnNwaXJlZC9VXFxuaW5zcGlyaW5nL1VcXG5pbnN0XFxuaW5zdGFiaWxpdHkvU1xcbmluc3RhbGwvVUJaUlNER1xcbmluc3RhbGxhdGlvbi9NU1xcbmluc3RhbGxlci9VTVxcbmluc3RhbGxtZW50L1NNXFxuaW5zdGFuY2UvR0RcXG5pbnN0YW50L01SWVNcXG5pbnN0YW50YW5lb3VzL1lcXG5pbnN0YW50aWF0ZS9EU0dcXG5pbnN0YXJcXG5pbnN0YXRlL0FHRFNcXG5pbnN0ZWFkXFxuaW5zdGlnYXRlL0RTR05cXG5pbnN0aWdhdGlvbi9NXFxuaW5zdGlnYXRvci9NU1xcbmluc3RpbGxhdGlvbi9NXFxuaW5zdGluY3QvVk1TXFxuaW5zdGluY3RpdmUvWVxcbmluc3RpbmN0dWFsXFxuaW5zdGl0dXRlL1hNWkdORFJTXFxuaW5zdGl0dXRlci9NXFxuaW5zdGl0dXRpb24vTVxcbmluc3RpdHV0aW9uYWwvWVxcbmluc3RpdHV0aW9uYWxpemF0aW9uL01cXG5pbnN0aXR1dGlvbmFsaXplL0RTR1xcbmluc3RyXFxuaW5zdHJ1Y3QvU0RHVlxcbmluc3RydWN0ZWQvVVxcbmluc3RydWN0aW9uL01TXFxuaW5zdHJ1Y3Rpb25hbFxcbmluc3RydWN0aXZlL1lcXG5pbnN0cnVjdG9yL01TXFxuaW5zdHJ1bWVudC9NRFNHXFxuaW5zdHJ1bWVudGFsL01ZU1xcbmluc3RydW1lbnRhbGlzdC9TTVxcbmluc3RydW1lbnRhbGl0eS9NXFxuaW5zdHJ1bWVudGF0aW9uL01cXG5pbnN1Ym9yZGluYXRlXFxuaW5zdWZmZXJhYmxlXFxuaW5zdWZmZXJhYmx5XFxuaW5zdWxhXFxuaW5zdWxhclxcbmluc3VsYXJpdHkvTVxcbmluc3VsYXRlL0dORFNcXG5pbnN1bGF0aW9uL01cXG5pbnN1bGF0b3IvTVNcXG5pbnN1bGluL01cXG5pbnN1bHQvU01ER1xcbmluc3VsdGluZy9ZXFxuaW5zdXBlcmFibGVcXG5pbnN1cGVyYWJseVxcbmluc3VyYW5jZS9TTVxcbmluc3VyZS9EUlNaR0JcXG5pbnN1cmVkL1NNXFxuaW5zdXJlci9NXFxuaW5zdXJnZW5jZS9TTVxcbmluc3VyZ2VuY3kvU01cXG5pbnN1cmdlbnQvTVNcXG5pbnN1cm1vdW50YWJseVxcbmluc3VycmVjdGlvbi9TTVxcbmluc3VycmVjdGlvbmlzdC9TTVxcbmludFxcbmludGFjdFxcbmludGFnbGlvL01TXFxuaW50ZWdlci9NU1xcbmludGVncmFsL1NNWVxcbmludGVncmF0ZS9BRVZOR1NEXFxuaW50ZWdyYXRpb24vRUFNXFxuaW50ZWdyYXRvclxcbmludGVncml0eS9NXFxuaW50ZWd1bWVudC9TTVxcbmludGVsL01cXG5pbnRlbGxlY3QvTVNcXG5pbnRlbGxlY3R1YWwvTVlTXFxuaW50ZWxsZWN0dWFsaXNtL01cXG5pbnRlbGxlY3R1YWxpemUvR0RTXFxuaW50ZWxsaWdlbmNlL01cXG5pbnRlbGxpZ2VudC9ZXFxuaW50ZWxsaWdlbnRzaWEvTVxcbmludGVsbGlnaWJpbGl0eS9NXFxuaW50ZWxsaWdpYmxlL1VcXG5pbnRlbGxpZ2libHkvVVxcbmludGVuZGVkL1NNXFxuaW50ZW5zZS9ZVFZSXFxuaW50ZW5zaWZpY2F0aW9uL01cXG5pbnRlbnNpZmllci9NXFxuaW50ZW5zaWZ5L0RSU1pHTlxcbmludGVuc2l0eS9TXFxuaW50ZW5zaXZlL01ZUFNcXG5pbnRlbnNpdmVuZXNzL01cXG5pbnRlbnQvU01ZUFxcbmludGVudGlvbi9NU1xcbmludGVudGlvbmFsL1VZXFxuaW50ZW50bmVzcy9NXFxuaW50ZXIvRVNMXFxuaW50ZXJhY3QvU0dWRFxcbmludGVyYWN0aW9uL1NNXFxuaW50ZXJhY3RpdmUvWVxcbmludGVyYWN0aXZpdHlcXG5pbnRlcmJyZWRcXG5pbnRlcmJyZWVkL0dTXFxuaW50ZXJjZWRlL0dEU1xcbmludGVyY2VwdC9HTURTXFxuaW50ZXJjZXB0aW9uL01TXFxuaW50ZXJjZXB0b3IvU01cXG5pbnRlcmNlc3Npb24vU01cXG5pbnRlcmNlc3Nvci9NU1xcbmludGVyY2Vzc29yeVxcbmludGVyY2hhbmdlL0RTTUdcXG5pbnRlcmNoYW5nZWFiaWxpdHlcXG5pbnRlcmNoYW5nZWFibGVcXG5pbnRlcmNoYW5nZWFibHlcXG5pbnRlcmNpdHlcXG5pbnRlcmNvbGxlZ2lhdGVcXG5pbnRlcmNvbS9TTVxcbmludGVyY29tbXVuaWNhdGUvRFNHTlxcbmludGVyY29tbXVuaWNhdGlvbi9NXFxuaW50ZXJjb25uZWN0L0dEU1xcbmludGVyY29ubmVjdGlvbi9TTVxcbmludGVyY29udGluZW50YWxcXG5pbnRlcmNvdXJzZS9NXFxuaW50ZXJjdWx0dXJhbFxcbmludGVyZGVub21pbmF0aW9uYWxcXG5pbnRlcmRlcGFydG1lbnRhbFxcbmludGVyZGVwZW5kZW5jZS9NXFxuaW50ZXJkZXBlbmRlbnQvWVxcbmludGVyZGljdC9HTURTXFxuaW50ZXJkaWN0aW9uL01cXG5pbnRlcmRpc2NpcGxpbmFyeVxcbmludGVyZXN0L0VTTURcXG5pbnRlcmVzdGVkL1VcXG5pbnRlcmVzdGluZy9ZXFxuaW50ZXJmYWNlL01HRFNcXG5pbnRlcmZhaXRoXFxuaW50ZXJmZXJlL0dEU1xcbmludGVyZmVyZW5jZS9NXFxuaW50ZXJmZXJvbi9NXFxuaW50ZXJmaWxlL0dEU1xcbmludGVyZ2FsYWN0aWNcXG5pbnRlcmdvdmVybm1lbnRhbFxcbmludGVyaW0vTVxcbmludGVyaW9yL1NNXFxuaW50ZXJqXFxuaW50ZXJqZWN0L0dEU1xcbmludGVyamVjdGlvbi9TTVxcbmludGVybGFjZS9HRFNcXG5pbnRlcmxhcmQvREdTXFxuaW50ZXJsZWF2ZS9EU0dcXG5pbnRlcmxldWtpbi9NXFxuaW50ZXJsaW5lL0dEU0pcXG5pbnRlcmxpbmVhclxcbmludGVybGluaW5nL01cXG5pbnRlcmxpbmsvRFNHXFxuaW50ZXJsb2NrL0dNRFNcXG5pbnRlcmxvY3V0b3IvU01cXG5pbnRlcmxvY3V0b3J5XFxuaW50ZXJsb3BlL1pHRFJTXFxuaW50ZXJsb3Blci9NXFxuaW50ZXJsdWRlL01HRFNcXG5pbnRlcm1hcnJpYWdlL1NNXFxuaW50ZXJtYXJyeS9HRFNcXG5pbnRlcm1lZGlhcnkvU01cXG5pbnRlcm1lZGlhdGUvTVlTXFxuaW50ZXJtZW50L0VNXFxuaW50ZXJtZW50c1xcbmludGVybWV6emlcXG5pbnRlcm1lenpvL01TXFxuaW50ZXJtaW5hYmx5XFxuaW50ZXJtaW5nbGUvRFNHXFxuaW50ZXJtaXNzaW9uL1NNXFxuaW50ZXJtaXR0ZW5jZVxcbmludGVybWl0dGVuY3lcXG5pbnRlcm1pdHRlbnQvWVxcbmludGVybWl4L0dEU1xcbmludGVybi9HRExcXG5pbnRlcm5hbC9TWVxcbmludGVybmFsaXphdGlvbi9NXFxuaW50ZXJuYWxpemUvR0RTXFxuaW50ZXJuYXRpb25hbC9TTVlcXG5pbnRlcm5hdGlvbmFsaXNtL01cXG5pbnRlcm5hdGlvbmFsaXN0L1NNXFxuaW50ZXJuYXRpb25hbGl6YXRpb25cXG5pbnRlcm5hdGlvbmFsaXplL0RTR1xcbmludGVybmVjaW5lXFxuaW50ZXJuZWUvU01cXG5pbnRlcm5ldFxcbmludGVybmlzdC9NU1xcbmludGVybm1lbnQvTVxcbmludGVybnNoaXAvTVNcXG5pbnRlcm9mZmljZVxcbmludGVyb3BlcmFiaWxpdHlcXG5pbnRlcm9wZXJhYmxlXFxuaW50ZXJvcGVyYXRlL1NcXG5pbnRlcnBlbmV0cmF0ZS9EU0dOXFxuaW50ZXJwZXJzb25hbFxcbmludGVycGxhbmV0YXJ5XFxuaW50ZXJwbGF5L01cXG5pbnRlcnBvbGF0ZS9YRFNHTlxcbmludGVycG9sYXRpb24vTVxcbmludGVycG9zZS9HRFNcXG5pbnRlcnBvc2l0aW9uL01cXG5pbnRlcnByZXQvQUdWRFNcXG5pbnRlcnByZXRhdGlvbi9BTVNcXG5pbnRlcnByZXRhdGl2ZVxcbmludGVycHJldGVkL1VcXG5pbnRlcnByZXRlci9NU1xcbmludGVycmFjaWFsXFxuaW50ZXJyZWQvRVxcbmludGVycmVnbnVtL1NNXFxuaW50ZXJyZWxhdGUvWERTR05cXG5pbnRlcnJlbGF0aW9uL01cXG5pbnRlcnJlbGF0aW9uc2hpcC9NU1xcbmludGVycmluZy9FXFxuaW50ZXJyb2dhdGUvRFNHTlZYXFxuaW50ZXJyb2dhdGlvbi9NXFxuaW50ZXJyb2dhdGl2ZS9NWVNcXG5pbnRlcnJvZ2F0b3IvU01cXG5pbnRlcnJvZ2F0b3J5L1NNXFxuaW50ZXJydXB0L1pHTURSU1xcbmludGVycnVwdGVyL01cXG5pbnRlcnJ1cHRpb24vTVNcXG5pbnRlcnNjaG9sYXN0aWNcXG5pbnRlcnNlY3QvR0RTXFxuaW50ZXJzZWN0aW9uL1NNXFxuaW50ZXJzZWN0aW9uYWxcXG5pbnRlcnNlY3Rpb25hbGl0eVxcbmludGVyc2Vzc2lvbi9TTVxcbmludGVyc2V4XFxuaW50ZXJzcGVyc2UvR05EU1xcbmludGVyc3BlcnNpb24vTVxcbmludGVyc3RhdGUvTVNcXG5pbnRlcnN0ZWxsYXJcXG5pbnRlcnN0aWNlL01TXFxuaW50ZXJzdGl0aWFsXFxuaW50ZXJ0d2luZS9HRFNcXG5pbnRlcnVyYmFuXFxuaW50ZXJ2YWwvU01cXG5pbnRlcnZlbmUvR0RTXFxuaW50ZXJ2ZW50aW9uL1NNXFxuaW50ZXJ2ZW50aW9uaXNtL01cXG5pbnRlcnZlbnRpb25pc3QvU01cXG5pbnRlcnZpZXcvWkdNRFJTXFxuaW50ZXJ2aWV3ZWUvTVNcXG5pbnRlcnZpZXdlci9NXFxuaW50ZXJ2b2NhbGljXFxuaW50ZXJ3YXJcXG5pbnRlcndlYXZlL0dTXFxuaW50ZXJ3b3ZlXFxuaW50ZXJ3b3ZlblxcbmludGVzdGFjeS9NXFxuaW50ZXN0YXRlXFxuaW50ZXN0aW5hbFxcbmludGVzdGluZS9NU1xcbmludGlmYWRhXFxuaW50aW1hY3kvU01cXG5pbnRpbWF0ZS9NWUdORFNYXFxuaW50aW1hdGlvbi9NXFxuaW50aW1pZGF0ZS9HTkRTXFxuaW50aW1pZGF0aW5nL1lcXG5pbnRpbWlkYXRpb24vTVxcbmludG9uYXRpb24vU01cXG5pbnRveGljYW50L1NNXFxuaW50b3hpY2F0ZS9EU0dOXFxuaW50b3hpY2F0aW9uL01cXG5pbnRyYWNyYW5pYWxcXG5pbnRyYW11cmFsXFxuaW50cmFtdXNjdWxhclxcbmludHJhbmV0L01TXFxuaW50cmFuc2lnZW5jZS9NXFxuaW50cmFuc2lnZW50L01ZU1xcbmludHJhc3RhdGVcXG5pbnRyYXV0ZXJpbmVcXG5pbnRyYXZlbm91cy9NU1lcXG5pbnRyZXBpZC9ZXFxuaW50cmVwaWRpdHkvTVxcbmludHJpY2FjeS9TTVxcbmludHJpY2F0ZS9ZXFxuaW50cmlndWUvRFJTTVpHXFxuaW50cmlndWVyL01cXG5pbnRyaWd1aW5nL1lcXG5pbnRyaW5zaWNcXG5pbnRyaW5zaWNhbGx5XFxuaW50cm8vU01cXG5pbnRyb2R1Y2UvQUdEU1xcbmludHJvZHVjdGlvbi9BTVxcbmludHJvZHVjdGlvbnNcXG5pbnRyb2R1Y3RvcnlcXG5pbnRyb2l0L1NNXFxuaW50cm9zcGVjdC9HVkRTXFxuaW50cm9zcGVjdGlvbi9NXFxuaW50cm9zcGVjdGl2ZS9ZXFxuaW50cm92ZXJzaW9uL01cXG5pbnRyb3ZlcnQvTURTXFxuaW50cnVkZS9EUlNaR1xcbmludHJ1ZGVyL01cXG5pbnRydXNpb24vU01cXG5pbnRydXNpdmUvWVBcXG5pbnRydXNpdmVuZXNzL01cXG5pbnR1aXQvU0RHVlxcbmludHVpdGlvbi9TXFxuaW50dWl0aXZlL1BZXFxuaW50dWl0aXZlbmVzcy9NXFxuaW51bmRhdGUvWERTR05cXG5pbnVuZGF0aW9uL01cXG5pbnVyZS9EU0dcXG5pbnZhZGUvRFJTWkdcXG5pbnZhZGVyL01cXG5pbnZhbGlkL0dNRFlTXFxuaW52YWxpZGlzbS9NXFxuaW52YWx1YWJsZVxcbmludmFsdWFibHlcXG5pbnZhcmlhbnRcXG5pbnZhc2lvbi9NU1xcbmludmFzaXZlXFxuaW52ZWN0aXZlL01cXG5pbnZlaWdoL0dEXFxuaW52ZWlnaHNcXG5pbnZlaWdsZS9aR0RSU1xcbmludmVpZ2xlci9NXFxuaW52ZW50L0FTR1ZEXFxuaW52ZW50aW9uL0FNU1xcbmludmVudGl2ZS9QWVxcbmludmVudGl2ZW5lc3MvTVxcbmludmVudG9yL01TXFxuaW52ZW50b3J5L0RTTUdcXG5pbnZlcnNlL1NNWVxcbmludmVydC9TTURSWkdcXG5pbnZlcnRlci9NXFxuaW52ZXN0L0FTREdMXFxuaW52ZXN0aWdhdGUvR05WRFNYXFxuaW52ZXN0aWdhdGlvbi9NXFxuaW52ZXN0aWdhdG9yL1NNXFxuaW52ZXN0aWdhdG9yeVxcbmludmVzdGl0dXJlL01TXFxuaW52ZXN0bWVudC9BRU1cXG5pbnZlc3Rvci9TTVxcbmludmV0ZXJhY3kvTVxcbmludmV0ZXJhdGVcXG5pbnZpZGlvdXMvWVBcXG5pbnZpZGlvdXNuZXNzL01cXG5pbnZpZ2lsYXRlL0dORFNcXG5pbnZpZ2lsYXRvci9TXFxuaW52aWdvcmF0ZS9BRFNHXFxuaW52aWdvcmF0aW5nL1lcXG5pbnZpZ29yYXRpb24vTVxcbmludmluY2liaWxpdHkvTVxcbmludmluY2libHlcXG5pbnZpb2xhYmlsaXR5L01cXG5pbnZpb2xhYmx5XFxuaW52aW9sYXRlXFxuaW52aXRhdGlvbi9TTVxcbmludml0YXRpb25hbC9TTVxcbmludml0ZS9EU01HXFxuaW52aXRlZC9VXFxuaW52aXRlZS9TTVxcbmludml0aW5nL1lcXG5pbnZva2UvRFNHXFxuaW52b2x1bnRhcmluZXNzL01cXG5pbnZvbHVudGFyeS9QXFxuaW52b2x1dGlvbi9NXFxuaW52b2x2ZS9MRFNHXFxuaW52b2x2ZWQvVVxcbmludm9sdmVtZW50L1NNXFxuaW53YXJkL1NZXFxuaW9jdGxcXG5pb2RpZGUvU01cXG5pb2RpbmUvTVxcbmlvZGl6ZS9EU0dcXG5pb24vVVNNXFxuaW9uaWNcXG5pb25pemF0aW9uL1VNXFxuaW9uaXplL1VEU0dcXG5pb25pemVyL01TXFxuaW9ub3NwaGVyZS9NU1xcbmlvbm9zcGhlcmljXFxuaW90YS9NU1xcbmlwZWNhYy9TTVxcbmlyYXNjaWJpbGl0eS9NXFxuaXJhc2NpYmxlXFxuaXJhc2NpYmx5XFxuaXJhdGUvWVBcXG5pcmF0ZW5lc3MvTVxcbmlyZS9NXFxuaXJlZnVsXFxuaXJlbmljXFxuaXJpZGVzXFxuaXJpZGVzY2VuY2UvTVxcbmlyaWRlc2NlbnQvWVxcbmlyaWRpdW0vTVxcbmlyaXMvTVNcXG5pcmsvU0dEXFxuaXJrc29tZS9ZUFxcbmlya3NvbWVuZXNzL01cXG5pcm9uL01EU0dcXG5pcm9uY2xhZC9NU1xcbmlyb25pY1xcbmlyb25pY2FsL1lcXG5pcm9uaW5nL01cXG5pcm9ubW9uZ2VyL1NcXG5pcm9ubW9uZ2VyeVxcbmlyb25zdG9uZS9NXFxuaXJvbndhcmUvTVxcbmlyb253b29kL01TXFxuaXJvbndvcmsvTVxcbmlyb255L1NNXFxuaXJyYWRpYXRlL0RTR05cXG5pcnJhZGlhdGlvbi9NXFxuaXJyYXRpb25hbC9TTVlcXG5pcnJhdGlvbmFsaXR5L01cXG5pcnJlY2xhaW1hYmxlXFxuaXJyZWNvbmNpbGFiaWxpdHkvTVxcbmlycmVjb25jaWxhYmxlXFxuaXJyZWNvbmNpbGFibHlcXG5pcnJlY292ZXJhYmxlXFxuaXJyZWNvdmVyYWJseVxcbmlycmVkZWVtYWJsZVxcbmlycmVkZWVtYWJseVxcbmlycmVkdWNpYmxlXFxuaXJyZWR1Y2libHlcXG5pcnJlZnV0YWJsZVxcbmlycmVmdXRhYmx5XFxuaXJyZWd1bGFyL01ZU1xcbmlycmVndWxhcml0eS9TTVxcbmlycmVsZXZhbmNlL01TXFxuaXJyZWxldmFuY3kvTVNcXG5pcnJlbGV2YW50L1lcXG5pcnJlbGlnaW9uXFxuaXJyZWxpZ2lvdXNcXG5pcnJlbWVkaWFibGVcXG5pcnJlbWVkaWFibHlcXG5pcnJlbW92YWJsZVxcbmlycmVwYXJhYmxlXFxuaXJyZXBhcmFibHlcXG5pcnJlcGxhY2VhYmxlXFxuaXJyZXByZXNzaWJsZVxcbmlycmVwcmVzc2libHlcXG5pcnJlcHJvYWNoYWJsZVxcbmlycmVwcm9hY2hhYmx5XFxuaXJyZXNpc3RpYmxlXFxuaXJyZXNpc3RpYmx5XFxuaXJyZXNvbHV0ZS9QWU5cXG5pcnJlc29sdXRlbmVzcy9NXFxuaXJyZXNvbHV0aW9uL01cXG5pcnJlc3BlY3RpdmVcXG5pcnJlc3BvbnNpYmlsaXR5L01cXG5pcnJlc3BvbnNpYmxlXFxuaXJyZXNwb25zaWJseVxcbmlycmV0cmlldmFibGVcXG5pcnJldHJpZXZhYmx5XFxuaXJyZXZlcmVuY2UvTVxcbmlycmV2ZXJlbnQvWVxcbmlycmV2ZXJzaWJsZVxcbmlycmV2ZXJzaWJseVxcbmlycmV2b2NhYmxlXFxuaXJyZXZvY2FibHlcXG5pcnJpZ2FibGVcXG5pcnJpZ2F0ZS9EU0dOXFxuaXJyaWdhdGlvbi9NXFxuaXJyaXRhYmlsaXR5L01cXG5pcnJpdGFibGVcXG5pcnJpdGFibHlcXG5pcnJpdGFudC9TTVxcbmlycml0YXRlL0RTWEdOXFxuaXJyaXRhdGluZy9ZXFxuaXJyaXRhdGlvbi9NXFxuaXJydXB0L0RHVlNcXG5pcnJ1cHRpb24vU01cXG5pc2NoZW1pYVxcbmlzY2hlbWljXFxuaXNpbmdsYXNzL01cXG5pc2xcXG5pc2xhbmQvU1pNUlxcbmlzbGFuZGVyL01cXG5pc2xlL01TXFxuaXNsZXQvU01cXG5pc20vQ01cXG5pc21zXFxuaXNuJ3RcXG5pc29iYXIvTVNcXG5pc29iYXJpY1xcbmlzb2xhdGUvRFNNR05cXG5pc29sYXRpb24vTVxcbmlzb2xhdGlvbmlzbS9NXFxuaXNvbGF0aW9uaXN0L1NNXFxuaXNvbWVyL01TXFxuaXNvbWVyaWNcXG5pc29tZXJpc20vTVxcbmlzb21ldHJpYy9TXFxuaXNvbWV0cmljYWxseVxcbmlzb21ldHJpY3MvTVxcbmlzb21vcnBoaWNcXG5pc29tb3JwaGlzbVxcbmlzb3NjZWxlc1xcbmlzb3RoZXJtL1NNXFxuaXNvdG9wZS9TTVxcbmlzb3RvcGljXFxuaXNvdHJvcGljXFxuaXNzdWFuY2UvTVxcbmlzc3VlL0FEU01HXFxuaXNzdWVyL01TXFxuaXN0aG1pYW5cXG5pc3RobXVzL01TXFxuaXQnZFxcbml0J2xsXFxuaXQvVVNNXFxuaXRhbFxcbml0YWxpYy9TTVxcbml0YWxpY2l6YXRpb24vTVxcbml0YWxpY2l6ZS9HRFNcXG5pdGFsaWNzL01cXG5pdGNoL01EU0dcXG5pdGNoaW5lc3MvTVxcbml0Y2h5L1JQVFxcbml0ZW0vTVNcXG5pdGVtaXphdGlvbi9NXFxuaXRlbWl6ZS9HRFNcXG5pdGVyYXRlL0FYR05WRFNcXG5pdGVyYXRpb24vQU1cXG5pdGVyYXRvci9TXFxuaXRpbmVyYW50L1NNXFxuaXRpbmVyYXJ5L1NNXFxuaXRzZWxmXFxuaXYvVVxcbml2b3J5L1NNXFxuaXZ5L0RTTVxcbml4XFxuai9GXFxuamFiL1NNXFxuamFiYmVkXFxuamFiYmVyL1NNRFJaR1xcbmphYmJlcmVyL01cXG5qYWJiaW5nXFxuamFib3QvU01cXG5qYWNhcmFuZGEvTVNcXG5qYWNrL01ER1NcXG5qYWNrYWwvU01cXG5qYWNrYXNzL01TXFxuamFja2Jvb3QvU01EXFxuamFja2Rhdy9NU1xcbmphY2tldC9TTURcXG5qYWNraGFtbWVyL01TXFxuamFja2tuaWZlL01HRFNcXG5qYWNra25pdmVzXFxuamFja3BvdC9NU1xcbmphY2tyYWJiaXQvTVNcXG5qYWNrc3RyYXcvTVNcXG5qYWNxdWFyZC9NXFxuamFkZS9NR0RTXFxuamFkZWQvUFlcXG5qYWRlZG5lc3MvTVxcbmphZGVpdGUvTVxcbmphZy9TTVxcbmphZ2dlZC9UUFJZXFxuamFnZ2VkbmVzcy9NXFxuamFnZ2llc1xcbmphZ3Vhci9TTVxcbmphaWwvTURSWkdTXFxuamFpbGJpcmQvU01cXG5qYWlsYnJlYWsvU01cXG5qYWlsZXIvTVxcbmphaWxob3VzZS9TXFxuamFsYXBlbm8vTVNcXG5qYWxvcHkvU01cXG5qYWxvdXNpZS9NU1xcbmphbS9TTVxcbmphbWIvTVNcXG5qYW1iYWxheWEvTVxcbmphbWJvcmVlL01TXFxuamFtbWVkXFxuamFtbWluZ1xcbmphbW15L1JUXFxuamFuZ2xlL0RSU01aR1xcbmphbmdsZXIvTVxcbmphbml0b3IvU01cXG5qYW5pdG9yaWFsXFxuamFwYW4vU01cXG5qYXBhbm5lZFxcbmphcGFubmluZ1xcbmphcGUvTUdEU1xcbmphci9TTVxcbmphcmRpbmllcmUvU01cXG5qYXJmdWwvTVNcXG5qYXJnb24vTVxcbmphcnJlZFxcbmphcnJpbmcvWVxcbmphc21pbmUvU01cXG5qYXNwZXIvTVxcbmphdG8vTVNcXG5qYXVuZGljZS9EU01HXFxuamF1bnQvU0dNRFxcbmphdW50aWx5XFxuamF1bnRpbmVzcy9NXFxuamF1bnR5L1JQVFxcbmphdmEvTVxcbmphdmVsaW4vU01cXG5qYXcvU0dNRFxcbmphd2JvbmUvRFNNR1xcbmphd2JyZWFrZXIvTVNcXG5qYXdsaW5lL1NcXG5qYXkvU01cXG5qYXliaXJkL1NNXFxuamF5d2Fsay9EUlNaR1xcbmpheXdhbGtlci9NXFxuamF5d2Fsa2luZy9NXFxuamF6ei9NRFNHXFxuamF6enkvVFJcXG5qY3RcXG5qZWFsb3VzL1lcXG5qZWFsb3VzeS9TTVxcbmplYW4vTVNcXG5qZWFucy9NXFxuamVlcC9NU1xcbmplZXIvTURTR1xcbmplZXJpbmcvTVlcXG5qZWV6XFxuamVqdW5hXFxuamVqdW5lXFxuamVqdW51bS9NXFxuamVsbC9EU0dcXG5qZWxsby9TXFxuamVsbHkvR0RTTVxcbmplbGx5YmVhbi9NU1xcbmplbGx5ZmlzaC9NU1xcbmplbGx5bGlrZVxcbmplbGx5cm9sbC9TTVxcbmplbW15L0dEU1xcbmplbm5ldC9NU1xcbmplbm55L1NNXFxuamVvcGFyZGl6ZS9HRFNcXG5qZW9wYXJkeS9NXFxuamVyZW1pYWQvTVNcXG5qZXJrL01EU0dcXG5qZXJraWx5XFxuamVya2luL01TXFxuamVya2luZXNzL01cXG5qZXJrd2F0ZXJcXG5qZXJreS9UUk1QXFxuamVyb2JvYW0vU1xcbmplcnJ5YnVpbHRcXG5qZXJyeWNhbi9TXFxuamVyc2V5L01TXFxuamVzdC9NRFJTWkdcXG5qZXN0ZXIvTVxcbmplc3RpbmcvWVxcbmpldC9TTVxcbmpldGxpbmVyL1NNXFxuamV0cG9ydC9NU1xcbmpldHNhbS9NXFxuamV0dGVkXFxuamV0dGluZ1xcbmpldHRpc29uL01EU0dcXG5qZXR0eS9TTVxcbmpld2VsL1NaR01EUlxcbmpld2VsZXIvTVxcbmpld2VscnkvU01cXG5qZ1xcbmppYi9TR01EXFxuamliYmVkXFxuamliYmluZ1xcbmppYmUvTVNcXG5qaWZmL01TXFxuamlmZnkvU01cXG5qaWcnc1xcbmppZy9BU1xcbmppZ2dlZC9BXFxuamlnZ2VyJ3NcXG5qaWdnZXIvQVNER1xcbmppZ2dpbmcvQVxcbmppZ2dsZS9EU01HXFxuamlnZ2x5XFxuamlnc2F3L1NNREdcXG5qaWhhZC9TTVxcbmppaGFkaXN0L1NNXFxuamlsdC9NRFNHXFxuamltbXkvRFNNR1xcbmppbXNvbndlZWQvTVxcbmppbmdsZS9EU01HXFxuamluZ2x5XFxuamluZ29pc20vTVxcbmppbmdvaXN0L1NNXFxuamluZ29pc3RpY1xcbmppbmsvRFNHXFxuamlublxcbmppbm5pL01cXG5qaW5yaWtpc2hhL1NNXFxuamlueC9NRFNHXFxuaml0bmV5L1NNXFxuaml0dGVyYnVnL01TXFxuaml0dGVyYnVnZ2VkXFxuaml0dGVyYnVnZ2VyL01cXG5qaXR0ZXJidWdnaW5nXFxuaml0dGVycy9NXFxuaml0dGVyeS9SVFxcbmppdmUvTUdEU1xcbmpvYi9TTVxcbmpvYmJlZFxcbmpvYmJlci9TTVxcbmpvYmJpbmdcXG5qb2Job2xkZXIvTVNcXG5qb2JsZXNzL1BcXG5qb2JsZXNzbmVzcy9NXFxuam9ic2hhcmUvU1xcbmpvYnN3b3J0aFxcbmpvYnN3b3J0aHNcXG5qb2NrL01TXFxuam9ja2V5L1NHTURcXG5qb2Nrc3RyYXAvTVNcXG5qb2Nvc2UvUFlcXG5qb2Nvc2VuZXNzL01cXG5qb2Nvc2l0eS9NXFxuam9jdWxhci9ZXFxuam9jdWxhcml0eS9NXFxuam9jdW5kL1lcXG5qb2N1bmRpdHkvTVxcbmpvZGhwdXJzL01cXG5qb2V5L1NcXG5qb2cvU01cXG5qb2dnZWRcXG5qb2dnZXIvU01cXG5qb2dnaW5nL01cXG5qb2dnbGUvRFNNR1xcbmpvaG4vTVNcXG5qb2hubnkvU01cXG5qb2hubnljYWtlL01TXFxuam9pbidzXFxuam9pbi9BRkRTR1xcbmpvaW5lci9GTVNcXG5qb2luZXJ5L01cXG5qb2ludCdzXFxuam9pbnQvRUdTRFxcbmpvaW50bHkvRlxcbmpvaXN0L1NNXFxuam9qb2JhXFxuam9rZS9NWkdEUlNcXG5qb2tlci9NXFxuam9rZXlcXG5qb2tpZXJcXG5qb2tpZXN0XFxuam9raW5nL1lcXG5qb2xsaWZpY2F0aW9uL1NNXFxuam9sbGlseVxcbmpvbGxpbmVzcy9NXFxuam9sbGl0eS9NXFxuam9sbHkvVEdQRFJTTVxcbmpvbHQvTURSU1pHXFxuam9sdGVyL01cXG5qb25xdWlsL1NNXFxuam9zaC9NRFJTWkdcXG5qb3NoZXIvTVxcbmpvc3RsZS9NR0RTXFxuam90L1NNXFxuam90dGVkXFxuam90dGVyL01TXFxuam90dGluZy9NU1xcbmpvdWxlL1NNXFxuam91bmNlL01HRFNcXG5qb3VuY3lcXG5qb3VybmFsL01TXFxuam91cm5hbGVzZS9NXFxuam91cm5hbGlzbS9NXFxuam91cm5hbGlzdC9TTVxcbmpvdXJuYWxpc3RpY1xcbmpvdXJuZXkvWkdNRFJTXFxuam91cm5leWVyL01cXG5qb3VybmV5bWFuL01cXG5qb3VybmV5bWVuXFxuam91cm5vL1NcXG5qb3VzdC9TWkdNRFJcXG5qb3VzdGVyL01cXG5qb3VzdGluZy9NXFxuam92aWFsL1lcXG5qb3ZpYWxpdHkvTVxcbmpvd2wvTVNcXG5qb3dseS9UUlxcbmpveS9TR01EXFxuam95ZnVsL1lQXFxuam95ZnVsbGVyXFxuam95ZnVsbGVzdFxcbmpveWZ1bG5lc3MvTVxcbmpveWxlc3MvUFlcXG5qb3lsZXNzbmVzcy9NXFxuam95b3VzL1lQXFxuam95b3VzbmVzcy9NXFxuam95cmlkZGVuXFxuam95cmlkZS9SU01aR1xcbmpveXJpZGVyL01cXG5qb3lyaWRpbmcvTVxcbmpveXJvZGVcXG5qb3lzdGljay9TTVxcbmpyXFxuanViaWxhbnQvWVxcbmp1YmlsYXRpb24vTVxcbmp1YmlsZWUvU01cXG5qdWRkZXIvR0RTXFxuanVkZ2Unc1xcbmp1ZGdlL0FEU0dcXG5qdWRnZXNoaXAvTVxcbmp1ZGdtZW50L1NNXFxuanVkZ21lbnRhbC9ZXFxuanVkaWNhdG9yeS9TTVxcbmp1ZGljYXR1cmUvTVxcbmp1ZGljaWFsL1lcXG5qdWRpY2lhcnkvU01cXG5qdWRpY2lvdXMvSVlQXFxuanVkaWNpb3VzbmVzcy9JTVxcbmp1ZG8vTVxcbmp1Zy9TTVxcbmp1Z2Z1bC9NU1xcbmp1Z2dlZFxcbmp1Z2dlcm5hdXQvU01cXG5qdWdnaW5nXFxuanVnZ2xlL01aR0RSU1xcbmp1Z2dsZXIvTVxcbmp1Z2dsZXJ5L01cXG5qdWd1bGFyL1NNXFxuanVpY2UvRFJTTVpHXFxuanVpY2VyL01cXG5qdWljaWx5XFxuanVpY2luZXNzL01cXG5qdWljeS9QVFJcXG5qdWppdHN1L01cXG5qdWp1YmUvTVNcXG5qdWtlYm94L01TXFxuanVsZXAvU01cXG5qdWxpZW5uZVxcbmp1bWJsZS9NR0RTXFxuanVtYm8vU01cXG5qdW1wL01EUlNaR1xcbmp1bXBlci9NXFxuanVtcGlseVxcbmp1bXBpbmVzcy9NXFxuanVtcHN1aXQvTVNcXG5qdW1weS9UUlBcXG5qdW5cXG5qdW5jby9TTVxcbmp1bmN0aW9uL0ZJU01cXG5qdW5jdHVyZS9GTVNcXG5qdW5nbGUvTVNcXG5qdW5pb3IvTVNcXG5qdW5pcGVyL1NNXFxuanVuay9NRFJTWkdcXG5qdW5rZXIvTVxcbmp1bmtldC9NRFNHXFxuanVua2V0ZWVyL01TXFxuanVua2llL01UUlNcXG5qdW5reWFyZC9NU1xcbmp1bnRhL1NNXFxuanVyaWRpY1xcbmp1cmlkaWNhbC9ZXFxuanVyaXNkaWN0aW9uL1NNXFxuanVyaXNkaWN0aW9uYWxcXG5qdXJpc3BydWRlbmNlL01cXG5qdXJpc3QvTVNcXG5qdXJpc3RpY1xcbmp1cm9yL1NNXFxuanVyeS9JU01cXG5qdXJ5bWFuL01cXG5qdXJ5bWVuXFxuanVyeXdvbWFuL01cXG5qdXJ5d29tZW5cXG5qdXN0L1JZUFRcXG5qdXN0aWNlL0lNU1xcbmp1c3RpZmlhYmxlL1VcXG5qdXN0aWZpYWJseS9VXFxuanVzdGlmaWNhdGlvbi9NXFxuanVzdGlmaWVkL1VcXG5qdXN0aWZ5L1hHRFNOXFxuanVzdG5lc3MvTVxcbmp1dC9TTVxcbmp1dGUvTVxcbmp1dHRlZFxcbmp1dHRpbmdcXG5qdXZlbmlsZS9TTVxcbmp1eHRhcG9zZS9EU0dcXG5qdXh0YXBvc2l0aW9uL1NNXFxuay9JRkdTXFxua0h6XFxua1dcXG5rV2hcXG5rYWJiYWxhaFxcbmthYm9vbVxcbmthYnVraS9NXFxua2FkZGlzaC9NU1xcbmthZmZlZWtsYXRjaC9NU1xcbmthZmZlZWtsYXRzY2gvTVNcXG5rYWh1bmEvU1xcbmthaXNlci9NU1xcbmthbGUvTVxcbmthbGVpZG9zY29wZS9NU1xcbmthbGVpZG9zY29waWNcXG5rYWxlaWRvc2NvcGljYWxseVxcbmthbWlrYXplL01TXFxua2FuYVxcbmthbmdhcm9vL01TXFxua2FuamlcXG5rYW9saW4vTVxcbmthcG9rL01cXG5rYXBwYS9TTVxcbmthcHV0XFxua2FyYWt1bC9NXFxua2FyYW9rZS9NU1xcbmthcmF0L1NNXFxua2FyYXRlL01cXG5rYXJtYS9NXFxua2FybWljXFxua2FydC9NU1xcbmthdGFrYW5hXFxua2F0eWRpZC9TTVxcbmtheWFrL1NNREdcXG5rYXlha2luZy9NXFxua2F5by9NRFNHXFxua2F6b28vU01cXG5rY1xcbmtlYmFiL1NNXFxua2VkZ2VyZWVcXG5rZWVsL01EU0dcXG5rZWVsaGF1bC9ER1NcXG5rZWVuL01EUllTVEdQXFxua2Vlbm5lc3MvTVxcbmtlZXAvTVJTWkdcXG5rZWVwZXIvTVxcbmtlZXBpbmcvTVxcbmtlZXBzYWtlL01TXFxua2VnL1NNXFxua2VscC9NXFxua2VsdmluL1NNXFxua2VuL1NNXFxua2VubmVkXFxua2VubmVsL1NHTURcXG5rZW5uaW5nXFxua2Vuby9NXFxua2VwaS9NU1xcbmtlcHRcXG5rZXJhdGluL01cXG5rZXJhdGl0aXNcXG5rZXJic2lkZVxcbmtlcmNoaWVmL1NNXFxua2VyZnVmZmxlL1NcXG5rZXJuZWwvU01cXG5rZXJvc2VuZS9NXFxua2VzdHJlbC9NU1xcbmtldGNoL01TXFxua2V0Y2h1cC9NXFxua2V0b1xcbmtldG9nZW5pY1xcbmtldG9uZS9TXFxua2V0dGxlL1NNXFxua2V0dGxlZHJ1bS9TTVxcbmtleS9TR01EXFxua2V5YmluZGluZy9TXFxua2V5Ym9hcmQvWkdTTURSXFxua2V5Ym9hcmRlci9NXFxua2V5Ym9hcmRpc3QvU01cXG5rZXlob2xlL01TXFxua2V5bm90ZS9NWkdEUlNcXG5rZXlub3Rlci9NXFxua2V5cGFkL1NNXFxua2V5cHVuY2gvWkdNRFJTXFxua2V5cHVuY2hlci9NXFxua2V5c3RvbmUvTVNcXG5rZXlzdHJva2UvU01cXG5rZXl3b3JkL01TXFxua2dcXG5raGFraS9TTVxcbmtoYW4vTVNcXG5raWJibGUvRFNNR1xcbmtpYmJ1dHovTVNcXG5raWJidXR6aW1cXG5raWJpdHovWkdEUlNcXG5raWJpdHplci9NXFxua2lib3NoL01cXG5raWNrL01EUlNaR1xcbmtpY2tiYWNrL1NNXFxua2lja2JhbGwvTVxcbmtpY2tib3hpbmdcXG5raWNrZXIvTVxcbmtpY2tvZmYvTVNcXG5raWNrc3RhbmQvTVNcXG5raWNreS9SVFxcbmtpZC9TTVxcbmtpZGRlZFxcbmtpZGRlci9TTVxcbmtpZGRpZS9TTVxcbmtpZGRpbmdcXG5raWRkaXNoXFxua2lkZG8vU01cXG5raWRuYXAvU1xcbmtpZG5hcHBlZFxcbmtpZG5hcHBlci9NU1xcbmtpZG5hcHBpbmcvTVNcXG5raWRuZXkvU01cXG5raWRza2luL01cXG5raWVsYmFzYS9NU1xcbmtpZWxiYXNpXFxua2lrZS9TXFxua2lsbC9KTURSU1pHXFxua2lsbGRlZXIvU01cXG5raWxsZXIvTVxcbmtpbGxpbmcvTVxcbmtpbGxqb3kvU01cXG5raWxuL01EU0dcXG5raWxvL01TXFxua2lsb2J5dGUvU01cXG5raWxvY291bG9tYi9TXFxua2lsb2N5Y2xlL1NNXFxua2lsb2dyYW0vU01cXG5raWxvaGVydHovTVxcbmtpbG9qb3VsZS9TXFxua2lsb2xpdGVyL01TXFxua2lsb21ldGVyL01TXFxua2lsb25ld3Rvbi9TXFxua2lsb3Bhc2NhbC9TXFxua2lsb3Rvbi9TTVxcbmtpbG92b2x0L1NcXG5raWxvd2F0dC9TTVxcbmtpbHQvTURSU1xcbmtpbHRlci9NXFxua2ltb25vL01TXFxua2luL01cXG5raW5hc2VcXG5raW5kJ3NcXG5raW5kL1VQUllUXFxua2luZGFcXG5raW5kZXJnYXJ0ZW4vTVNcXG5raW5kZXJnYXJ0bmVyL1NNXFxua2luZGhlYXJ0ZWQvUFlcXG5raW5kaGVhcnRlZG5lc3MvTVxcbmtpbmRsZS9BR0RTXFxua2luZGxpbmVzcy9NXFxua2luZGxpbmcvTVxcbmtpbmRseS9VUlRcXG5raW5kbmVzcy9VTVxcbmtpbmRuZXNzZXNcXG5raW5kcmVkL01cXG5raW5kc1xcbmtpbmUvU1xcbmtpbmVtYXRpYy9TXFxua2luZW1hdGljcy9NXFxua2luZXRpYy9TXFxua2luZXRpY2FsbHlcXG5raW5ldGljcy9NXFxua2luZm9say9TTVxcbmtpbmZvbGtzL01cXG5raW5nL01ZU1xcbmtpbmdkb20vU01cXG5raW5nZmlzaGVyL1NNXFxua2luZ2x5L1JUXFxua2luZ21ha2VyL1NcXG5raW5ncGluL1NNXFxua2luZ3NoaXAvTVxcbmtpbmsvTURTR1xcbmtpbmtpbHlcXG5raW5raW5lc3MvTVxcbmtpbmt5L1RQUlxcbmtpbnNmb2xrL01cXG5raW5zaGlwL01cXG5raW5zbWFuL01cXG5raW5zbWVuXFxua2luc3dvbWFuL01cXG5raW5zd29tZW5cXG5raW9zay9TTVxcbmtpcC9TTVxcbmtpcHBlZFxcbmtpcHBlci9NREdTXFxua2lwcGluZ1xcbmtpcnNjaC9NU1xcbmtpc21ldC9NXFxua2lzcy9NRFJTQlpHXFxua2lzc2VyL01cXG5raXNzb2ZmL1NNXFxua2lzc29ncmFtL1NcXG5raXQvU0dNRFxcbmtpdGNoZW4vU01cXG5raXRjaGVuZXR0ZS9NU1xcbmtpdGNoZW53YXJlL01cXG5raXRlL01TXFxua2l0aC9NXFxua2l0c2NoL01cXG5raXRzY2h5XFxua2l0dGVkXFxua2l0dGVuL01TXFxua2l0dGVuaXNoXFxua2l0dGluZ1xcbmtpdHR5L1NNXFxua2l3aS9NU1xcbmtpd2lmcnVpdC9NU1xcbmtsXFxua2xheG9uL1NcXG5rbGVwdG9jcmFjeVxcbmtsZXB0b21hbmlhL01cXG5rbGVwdG9tYW5pYWMvU01cXG5rbHVkZ2UvR0RTXFxua2x1Z2UvRFNcXG5rbHV0ei9NU1xcbmtsdXR6aW5lc3MvTVxcbmtsdXR6eS9UUlBcXG5rbVxcbmtuXFxua25hY2svU1pNUlxcbmtuYWNrZXIvR0RcXG5rbmFwc2Fjay9NU1xcbmtuYXZlL1NNXFxua25hdmVyeS9NXFxua25hdmlzaC9ZXFxua25lYWQvU1pHRFJcXG5rbmVhZGVyL01cXG5rbmVlL01EU1xcbmtuZWVjYXAvU01cXG5rbmVlY2FwcGVkXFxua25lZWNhcHBpbmdcXG5rbmVlaW5nXFxua25lZWwvU0dcXG5rbmVsbC9TR01EXFxua25lbHRcXG5rbmV3XFxua25pY2tlci9TXFxua25pY2tlcmJvY2tlcnMvTVxcbmtuaWNrZXJzL01cXG5rbmlja2tuYWNrL01TXFxua25pZmUvRFNNR1xcbmtuaWdodC9NRFlTR1xcbmtuaWdodGhvb2QvTVNcXG5rbmlnaHRsaW5lc3MvTVxcbmtuaXNoL01TXFxua25pdC9NU1xcbmtuaXR0ZWRcXG5rbml0dGVyL1NNXFxua25pdHRpbmcvTVxcbmtuaXR3ZWFyL01cXG5rbml2ZXNcXG5rbm9iL01TXFxua25vYmJseVxcbmtub2JieS9UUlxcbmtub2NrL1NaR01EUlxcbmtub2NrYWJvdXRcXG5rbm9ja2Rvd24vU01cXG5rbm9ja2VyL01cXG5rbm9ja29mZi9TTVxcbmtub2Nrb3V0L1NNXFxua25vY2t3dXJzdC9TTVxcbmtub2xsL1NNXFxua25vdC9NU1xcbmtub3Rob2xlL1NNXFxua25vdHRlZFxcbmtub3R0aW5nXFxua25vdHR5L1RSXFxua25vdy9TQlxcbmtub3dpbmcvVVlTXFxua25vd2xlZGdlL01cXG5rbm93bGVkZ2VhYmxlXFxua25vd2xlZGdlYWJseVxcbmtub3duXFxua251Y2tsZS9EU01HXFxua251Y2tsZWR1c3Rlci9TXFxua251Y2tsZWhlYWQvTVNcXG5rbnVybC9TR01EXFxua29hbGEvU01cXG5rb2FuL1NcXG5rb2hsXFxua29obHJhYmkvTVxcbmtvaGxyYWJpZXNcXG5rb2xhL01TXFxua29vay9NU1xcbmtvb2thYnVycmEvU01cXG5rb29raW5lc3MvTVxcbmtvb2t5L1RQUlxcbmtvcGVjay9NU1xcbmtvcm1hXFxua29zaGVyL0RTR1xcbmtvd3Rvdy9HTURTXFxua3BoXFxua3JhYWwvU01cXG5rcmF1dC9TTSFcXG5rcmlsbC9NXFxua3JvbmEvTVxcbmtyb25lL1JNXFxua3Jvbm9yXFxua3JvbnVyXFxua3J5cHRvbi9NXFxua3RcXG5rdWNoZW4vU01cXG5rdWRvcy9NXFxua3VkenUvU01cXG5rdW1xdWF0L01TXFxua3ZldGNoL1pHTURSU1xcbmt2ZXRjaGVyL01cXG5rd1xcbmwvU0RYVEdKXFxubGEvTVxcbmxhYi9TTVxcbmxhYmVsJ3NcXG5sYWJlbC9BU0RHXFxubGFiZWxlZC9VXFxubGFiaWFcXG5sYWJpYWwvU01cXG5sYWJpbGVcXG5sYWJpdW0vTVxcbmxhYm9yL1NNRFJaR1xcbmxhYm9yYXRvcnkvU01cXG5sYWJvcmVyL01cXG5sYWJvcmlvdXMvUFlcXG5sYWJvcmlvdXNuZXNzL01cXG5sYWJvcnNhdmluZ1xcbmxhYnVybnVtL01TXFxubGFieXJpbnRoL01cXG5sYWJ5cmludGhpbmVcXG5sYWJ5cmludGhzXFxubGFjL01cXG5sYWNlJ3NcXG5sYWNlL1VHRFNcXG5sYWNlcmF0ZS9EU0dOWFxcbmxhY2VyYXRpb24vTVxcbmxhY2V3aW5nL1NNXFxubGFjZXdvcmsvTVxcbmxhY2hyeW1hbFxcbmxhY2hyeW1vc2VcXG5sYWNrL01EU0dcXG5sYWNrYWRhaXNpY2FsL1lcXG5sYWNrZXkvU01cXG5sYWNrbHVzdGVyXFxubGFjb25pY1xcbmxhY29uaWNhbGx5XFxubGFjcXVlci9HTURTXFxubGFjcm9zc2UvTVxcbmxhY3RhdGUvR05EU1xcbmxhY3RhdGlvbi9NXFxubGFjdGVhbFxcbmxhY3RpY1xcbmxhY3Rvc2UvTVxcbmxhY3VuYS9NXFxubGFjdW5hZVxcbmxhY3kvUlRcXG5sYWQvU0dNRE5KXFxubGFkZGVyL0dTTURcXG5sYWRkaWUvU01cXG5sYWRkaXNoL1BcXG5sYWRlL1NcXG5sYWRlbi9VXFxubGFkaW5nL01cXG5sYWRsZS9EU01HXFxubGFkeS9TTVxcbmxhZHliaXJkL1NNXFxubGFkeWJ1Zy9NU1xcbmxhZHlmaW5nZXIvTVNcXG5sYWR5bGlrZS9VXFxubGFkeWxvdmUvTVNcXG5sYWR5c2hpcC9NU1xcbmxhZXRyaWxlL01cXG5sYWcvU1pNUlxcbmxhZ2VyL01cXG5sYWdnYXJkL01ZU1xcbmxhZ2dlZFxcbmxhZ2dpbmcvTVxcbmxhZ25pYXBwZS9TTVxcbmxhZ29vbi9TTVxcbmxhaWQvSUFcXG5sYWluXFxubGFpci9NU1xcbmxhaXJkL1NNXFxubGFpdHkvTVxcbmxha2UvTVNcXG5sYWtlZnJvbnQvU1xcbmxha2VzaWRlXFxubGFtL1NNXFxubGFtYS9NU1xcbmxhbWFzZXJ5L1NNXFxubGFtYi9NRFNHXFxubGFtYmFkYS9NU1xcbmxhbWJhc3RlL0dEU1xcbmxhbWJkYS9TTVxcbmxhbWJlbmN5L01cXG5sYW1iZW50L1lcXG5sYW1ia2luL1NNXFxubGFtYnNraW4vU01cXG5sYW1ic3dvb2xcXG5sYW1lL01ZWlRHRFJTUFxcbmxhbWVicmFpbi9NRFNcXG5sYW1lbmVzcy9NXFxubGFtZW50L0JTTURHXFxubGFtZW50YWJseVxcbmxhbWVudGF0aW9uL01TXFxubGFtaW5hL01cXG5sYW1pbmFlXFxubGFtaW5hclxcbmxhbWluYXRlL01HTkRTXFxubGFtaW5hdGlvbi9NXFxubGFtbWVkXFxubGFtbWluZ1xcbmxhbXAvTVNcXG5sYW1wYmxhY2svTVxcbmxhbXBsaWdodC9NUlpcXG5sYW1wbGlnaHRlci9NXFxubGFtcG9vbi9TR01EXFxubGFtcHBvc3QvU01cXG5sYW1wcmV5L01TXFxubGFtcHNoYWRlL1NNXFxubGFuYWkvU01cXG5sYW5jZS9EUlNNWkdcXG5sYW5jZXIvTVxcbmxhbmNldC9TTVxcbmxhbmQvTURSU0dKXFxubGFuZGF1L1NNXFxubGFuZGZhbGwvTVNcXG5sYW5kZmlsbC9NU1xcbmxhbmRob2xkZXIvU01cXG5sYW5kaG9sZGluZy9NU1xcbmxhbmRpbmcvTVxcbmxhbmRsYWR5L1NNXFxubGFuZGxlc3MvTVxcbmxhbmRsaW5lL01TXFxubGFuZGxvY2tlZFxcbmxhbmRsb3JkL01TXFxubGFuZGx1YmJlci9NU1xcbmxhbmRtYXJrL01TXFxubGFuZG1hc3MvTVNcXG5sYW5kbWluZS9TXFxubGFuZG93bmVyL01TXFxubGFuZG93bmVyc2hpcFxcbmxhbmRvd25pbmcvU01cXG5sYW5kc2NhcGUvTVpHRFJTXFxubGFuZHNjYXBlci9NXFxubGFuZHNsaWRcXG5sYW5kc2xpZGUvTUdTXFxubGFuZHNsaXAvU1xcbmxhbmRzbWFuL01cXG5sYW5kc21lblxcbmxhbmR3YXJkL1NcXG5sYW5lL01TXFxubGFuZ3VhZ2UvTVNcXG5sYW5ndWlkL1BZXFxubGFuZ3VpZG5lc3MvTVxcbmxhbmd1aXNoL0RTR1xcbmxhbmd1b3IvU01cXG5sYW5ndW9yb3VzL1lcXG5sYW5rL1JZVFBcXG5sYW5raW5lc3MvTVxcbmxhbmtuZXNzL01cXG5sYW5reS9SVFBcXG5sYW5vbGluL01cXG5sYW50ZXJuL01TXFxubGFudGhhbnVtL01cXG5sYW55YXJkL01TXFxubGFwL1NNXFxubGFwYXJvc2NvcGljXFxubGFwYXJvc2NvcHlcXG5sYXBhcm90b215XFxubGFwYm9hcmQvU01cXG5sYXBkb2cvU01cXG5sYXBlbC9TTVxcbmxhcGlkYXJ5L1NNXFxubGFwaW4vU01cXG5sYXBwZWRcXG5sYXBwZXQvU01cXG5sYXBwaW5nXFxubGFwc2UvQUtHTVNEXFxubGFwdG9wL1NNXFxubGFwd2luZy9NU1xcbmxhcmJvYXJkL1NNXFxubGFyY2VuaXN0L1NNXFxubGFyY2Vub3VzXFxubGFyY2VueS9TTVxcbmxhcmNoL01TXFxubGFyZC9NRFJTWkdcXG5sYXJkZXIvTVxcbmxhcmR5L1JUXFxubGFyZ2UvUlNQTVlUXFxubGFyZ2VoZWFydGVkXFxubGFyZ2VuZXNzL01cXG5sYXJnZXNzL01cXG5sYXJnaXNoXFxubGFyZ28vU01cXG5sYXJpYXQvU01cXG5sYXJrL01EU0dcXG5sYXJrc3B1ci9TTVxcbmxhcnZhL01cXG5sYXJ2YWVcXG5sYXJ2YWxcXG5sYXJ5bmdlYWxcXG5sYXJ5bmdlc1xcbmxhcnluZ2l0aXMvTVxcbmxhcnlueC9NXFxubGFzYWduYS9NU1xcbmxhc2NpdmlvdXMvWVBcXG5sYXNjaXZpb3VzbmVzcy9NXFxubGFzZS9aR0RSU1xcbmxhc2VyL01cXG5sYXNoL01EU0dKXFxubGFzaGluZy9NXFxubGFzcy9NU1xcbmxhc3NpZS9TTVxcbmxhc3NpdHVkZS9NXFxubGFzc28vU01ER1xcbmxhc3QvTURZU0dcXG5sYXN0aW5nL1lcXG5sYXQvU1xcbmxhdGNoJ3NcXG5sYXRjaC9VRFNHXFxubGF0Y2hrZXkvU01cXG5sYXRlL1lUUlBcXG5sYXRlY29tZXIvTVNcXG5sYXRlbmN5L01cXG5sYXRlbmVzcy9NXFxubGF0ZW50XFxubGF0ZXJhbC9NRFlTR1xcbmxhdGVzdC9NXFxubGF0ZXgvTVxcbmxhdGgvTURSU1pHXFxubGF0aGUvTVxcbmxhdGhlci9HTURcXG5sYXRoZXJ5XFxubGF0aHNcXG5sYXRpY2VzXFxubGF0aXNoXFxubGF0aXR1ZGUvTVNcXG5sYXRpdHVkaW5hbFxcbmxhdGl0dWRpbmFyaWFuL01TXFxubGF0cmluZS9NU1xcbmxhdHRlL1JTTVxcbmxhdHRlci9NWVxcbmxhdHRpY2UvTURTXFxubGF0dGljZXdvcmsvU01cXG5sYXVkL01EU0dCXFxubGF1ZGFibHlcXG5sYXVkYW51bS9NXFxubGF1ZGF0b3J5XFxubGF1Z2gvQk1ER1xcbmxhdWdoYWJseVxcbmxhdWdoaW5nL01ZXFxubGF1Z2hpbmdzdG9jay9TTVxcbmxhdWdoc1xcbmxhdWdodGVyL01cXG5sYXVuY2gvQUdNRFNcXG5sYXVuY2hlci9TTVxcbmxhdW5jaHBhZC9TTVxcbmxhdW5kZXIvRFJaR1NcXG5sYXVuZGVyZXIvTVxcbmxhdW5kZXJldHRlL1NNXFxubGF1bmRyZXNzL01TXFxubGF1bmRyb21hdC9NU1xcbmxhdW5kcnkvU01cXG5sYXVuZHJ5bWFuL01cXG5sYXVuZHJ5bWVuXFxubGF1bmRyeXdvbWFuL01cXG5sYXVuZHJ5d29tZW5cXG5sYXVyZWF0ZS9NU1xcbmxhdXJlYXRlc2hpcC9NXFxubGF1cmVsL1NNXFxubGF2L1NHRFxcbmxhdmEvTVxcbmxhdmFnZS9NXFxubGF2YWxpZXJlL1NNXFxubGF2YXRvcmlhbFxcbmxhdmF0b3J5L1NNXFxubGF2ZS9TXFxubGF2ZW5kZXIvU01cXG5sYXZpc2gvUFRHRFJTWVxcbmxhdmlzaG5lc3MvTVxcbmxhdy9TTVxcbmxhd2JyZWFrZXIvU01cXG5sYXdicmVha2luZy9NXFxubGF3ZnVsL1VQWVxcbmxhd2Z1bG5lc3MvVU1cXG5sYXdnaXZlci9NU1xcbmxhd2xlc3MvUFlcXG5sYXdsZXNzbmVzcy9NXFxubGF3bWFrZXIvTVNcXG5sYXdtYWtpbmcvTVxcbmxhd21hbi9NXFxubGF3bWVuXFxubGF3bi9NU1xcbmxhd25tb3dlci9TTVxcbmxhd3JlbmNpdW0vTVxcbmxhd3N1aXQvTVNcXG5sYXd5ZXIvU01cXG5sYXgvVFJZUFxcbmxheGF0aXZlL01TXFxubGF4aXR5L01cXG5sYXhuZXNzL01cXG5sYXkvQUlDU0dNXFxubGF5YWJvdXQvU1xcbmxheWF3YXkvTVxcbmxheWVyL0NTTVxcbmxheWVyZWRcXG5sYXllcmluZy9NXFxubGF5ZXR0ZS9NU1xcbmxheW1hbi9NXFxubGF5bWVuXFxubGF5b2ZmL1NNXFxubGF5b3V0L1NNXFxubGF5b3Zlci9NU1xcbmxheXBlb3BsZVxcbmxheXBlcnNvbi9NU1xcbmxheXVwL1NNXFxubGF5d29tYW4vTVxcbmxheXdvbWVuXFxubGF6ZS9NR0RTXFxubGF6aWx5XFxubGF6aW5lc3MvTVxcbmxhenkvRFJTVEdQXFxubGF6eWJvbmVzL01cXG5sYi9TXFxubGJ3XFxubGVhL1NNXFxubGVhY2gvRFNHXFxubGVhZC9NRE5SU1pHXFxubGVhZGVyL01cXG5sZWFkZXJsZXNzXFxubGVhZGVyc2hpcC9TTVxcbmxlYWRpbmcvTVxcbmxlYWYvTURTR1xcbmxlYWZhZ2UvTVxcbmxlYWZsZXNzXFxubGVhZmxldC9HTURTXFxubGVhZnN0YWxrL01TXFxubGVhZnkvUlRcXG5sZWFndWUvRFNNR1xcbmxlYWsvTURTR1xcbmxlYWthZ2UvTVNcXG5sZWFraW5lc3MvTVxcbmxlYWt5L1BSVFxcbmxlYW4vTURSU1RHSlBcXG5sZWFuaW5nL01cXG5sZWFubmVzcy9NXFxubGVhcC9NRFJTWkdcXG5sZWFwZXIvTVxcbmxlYXBmcm9nL01TXFxubGVhcGZyb2dnZWRcXG5sZWFwZnJvZ2dpbmdcXG5sZWFwdFxcbmxlYXJuL0FVR0RTXFxubGVhcm5hYmlsaXR5XFxubGVhcm5hYmxlXFxubGVhcm5lZGx5XFxubGVhcm5lci9NU1xcbmxlYXJuaW5nJ3NcXG5sZWFzZS9BRFNNR1xcbmxlYXNlYmFjay9TTVxcbmxlYXNlaG9sZC9NUlNaXFxubGVhc2Vob2xkZXIvTVxcbmxlYXNlci9TTVxcbmxlYXNoJ3NcXG5sZWFzaC9VRFNHXFxubGVhc3QvTVxcbmxlYXN0d2lzZVxcbmxlYXRoZXIvTVNcXG5sZWF0aGVyZXR0ZS9NXFxubGVhdGhlcm5lY2svTVNcXG5sZWF0aGVyeVxcbmxlYXZlL0RSU01aR0pcXG5sZWF2ZW4vU0dNRFxcbmxlYXZlbmVkL1VcXG5sZWF2ZW5pbmcvTVxcbmxlYXZlci9NXFxubGVhdmluZ3MvTVxcbmxlY2gvTURSU1pHXFxubGVjaGVyL01cXG5sZWNoZXJvdXMvUFlcXG5sZWNoZXJvdXNuZXNzL01cXG5sZWNoZXJ5L01cXG5sZWNpdGhpbi9NXFxubGVjdGVybi9NU1xcbmxlY3R1cmUvTVpHRFJTXFxubGVjdHVyZXIvTVxcbmxlY3R1cmVzaGlwL1NNXFxubGVkZ2UvUlNNWlxcbmxlZGdlci9NXFxubGVlL1JTTVpcXG5sZWVjaC9NRFNHXFxubGVlay9NU1xcbmxlZXIvTURHXFxubGVlcmluZXNzL01cXG5sZWVyeS9SUFRcXG5sZWV3YXJkL1NNXFxubGVld2F5L01cXG5sZWZ0L01SU1RcXG5sZWZ0aXNtL01cXG5sZWZ0aXN0L1NNXFxubGVmdG1vc3RcXG5sZWZ0b3Zlci9TTVxcbmxlZnR3YXJkL1NcXG5sZWZ0eS9TTVxcbmxlZy9TTVxcbmxlZ2FjeS9TTVxcbmxlZ2FsL1NNWVxcbmxlZ2FsZXNlL01cXG5sZWdhbGlzbS9NU1xcbmxlZ2FsaXN0aWNcXG5sZWdhbGlzdGljYWxseVxcbmxlZ2FsaXR5L1NNXFxubGVnYWxpemF0aW9uL01cXG5sZWdhbGl6ZS9HRFNcXG5sZWdhdGUvQ1hNTlNcXG5sZWdhdGVlL01TXFxubGVnYXRpb24ncy9BQ1xcbmxlZ2F0by9TTVxcbmxlZ2VuZC9TTVxcbmxlZ2VuZGFyaWx5XFxubGVnZW5kYXJ5XFxubGVnZXJkZW1haW4vTVxcbmxlZ2dlZFxcbmxlZ2dpbmVzcy9NXFxubGVnZ2luZy9NU1xcbmxlZ2d5L1JQVFxcbmxlZ2hvcm4vTVNcXG5sZWdpYmlsaXR5L01cXG5sZWdpYmxlXFxubGVnaWJseVxcbmxlZ2lvbi9TTVxcbmxlZ2lvbmFyeS9TTVxcbmxlZ2lvbm5haXJlL1NNXFxubGVnaXNsYXRlL0RTR05WXFxubGVnaXNsYXRpb24vTVxcbmxlZ2lzbGF0aXZlL1lcXG5sZWdpc2xhdG9yL01TXFxubGVnaXNsYXR1cmUvU01cXG5sZWdpdFxcbmxlZ2l0aW1hY3kvTVxcbmxlZ2l0aW1hdGUvRFNZR1xcbmxlZ2l0aW1hdGl6ZS9HRFNcXG5sZWdpdGltaXphdGlvbi9NXFxubGVnaXRpbWl6ZS9EU0dcXG5sZWdsZXNzXFxubGVnbWFuL01cXG5sZWdtZW5cXG5sZWdyb29tL1NNXFxubGVndW1lL01TXFxubGVndW1pbm91c1xcbmxlZ3dhcm1lci9TXFxubGVnd29yay9NXFxubGVpL1NNXFxubGVpc3VyZS9ETVlcXG5sZWlzdXJlbGluZXNzL01cXG5sZWlzdXJld2Vhci9NXFxubGVpdG1vdGlmL01TXFxubGVpdG1vdGl2L01TXFxubGVtbWEvU1xcbmxlbW1lL0pHXFxubGVtbWluZy9NXFxubGVtb24vU01cXG5sZW1vbmFkZS9TTVxcbmxlbW9uZ3Jhc3NcXG5sZW1vbnlcXG5sZW11ci9TTVxcbmxlbmQvUlNaR1xcbmxlbmRlci9NXFxubGVuZ3RoL01OWFxcbmxlbmd0aGVuL0dEXFxubGVuZ3RoaWx5XFxubGVuZ3RoaW5lc3MvTVxcbmxlbmd0aHNcXG5sZW5ndGh3aXNlXFxubGVuZ3RoeS9QUlRcXG5sZW5pZW5jZS9NXFxubGVuaWVuY3kvTVxcbmxlbmllbnQvWVxcbmxlbml0aXZlXFxubGVucy9NU1xcbmxlbnRcXG5sZW50aWwvTVNcXG5sZW50b1xcbmxlb25pbmVcXG5sZW9wYXJkL1NNXFxubGVvcGFyZGVzcy9NU1xcbmxlb3RhcmQvU01cXG5sZXBlci9TTVxcbmxlcHJlY2hhdW4vTVNcXG5sZXByb3N5L01cXG5sZXByb3VzXFxubGVwdGFcXG5sZXB0b24vTVNcXG5sZXNiaWFuL1NNXFxubGVzYmlhbmlzbS9NXFxubGVzaW9uL01TXFxubGVzcy9NTlJYXFxubGVzc2VlL01TXFxubGVzc2VuL0dEXFxubGVzc29uL01TXFxubGVzc29yL01TXFxubGV0L0lTTVxcbmxldGRvd24vU01cXG5sZXRoYWwvWVxcbmxldGhhcmdpY1xcbmxldGhhcmdpY2FsbHlcXG5sZXRoYXJneS9NXFxubGV0dGVyL1pHTURSU1xcbmxldHRlcmJvbWIvU1xcbmxldHRlcmJveC9TXFxubGV0dGVyZWQvVVxcbmxldHRlcmVyL01cXG5sZXR0ZXJoZWFkL01TXFxubGV0dGVyaW5nL01cXG5sZXR0ZXJwcmVzcy9NXFxubGV0dGluZy9TXFxubGV0dHVjZS9NU1xcbmxldHVwL1NNXFxubGV1Y2luZVxcbmxldWNvdG9teS9TXFxubGV1a2VtaWEvTVxcbmxldWtlbWljL1NNXFxubGV1a29jeXRlL01TXFxubGV2ZWUvU01cXG5sZXZlbC9QU1pHTURSWVxcbmxldmVsZXIvTVxcbmxldmVsaGVhZGVkL1BcXG5sZXZlbGhlYWRlZG5lc3MvTVxcbmxldmVsbmVzcy9NXFxubGV2ZXIvU0dNRFxcbmxldmVyYWdlJ3NcXG5sZXZlcmFnZS9DRFNHXFxubGV2aWF0aGFuL01TXFxubGV2aWVyL01cXG5sZXZpdGF0ZS9EU0dOXFxubGV2aXRhdGlvbi9NXFxubGV2aXR5L01cXG5sZXZ5L0RSU01aR1xcbmxld2QvUllQVFxcbmxld2RuZXNzL01cXG5sZXhlci9TXFxubGV4aWNhbFxcbmxleGljb2dyYXBoZXIvTVNcXG5sZXhpY29ncmFwaGljXFxubGV4aWNvZ3JhcGhpY2FsXFxubGV4aWNvZ3JhcGh5L01cXG5sZXhpY29uL1NNXFxubGV4aXNcXG5sZ1xcbmxpYWJpbGl0aWVzXFxubGlhYmlsaXR5L0FNXFxubGlhYmxlL0FcXG5saWFpc2UvR0RTXFxubGlhaXNvbi9NU1xcbmxpYXIvTVNcXG5saWIvTVxcbmxpYmF0aW9uL1NNXFxubGliYmVyL01TXFxubGliZWwvU1pHTURSXFxubGliZWxlci9NXFxubGliZWxvdXNcXG5saWJlcmFsL01ZUFNcXG5saWJlcmFsaXNtL01cXG5saWJlcmFsaXR5L01cXG5saWJlcmFsaXphdGlvbi9TTVxcbmxpYmVyYWxpemUvR0RTXFxubGliZXJhbG5lc3MvTVxcbmxpYmVyYXRlL0NEU0dOXFxubGliZXJhdGlvbi9DTVxcbmxpYmVyYXRvci9NU1xcbmxpYmVydGFyaWFuL1NNXFxubGliZXJ0aW5lL01TXFxubGliZXJ0eS9TTVxcbmxpYmlkaW5hbFxcbmxpYmlkaW5vdXNcXG5saWJpZG8vTVNcXG5saWJyYXJpYW4vTVNcXG5saWJyYXJpYW5zaGlwXFxubGlicmFyeS9TTVxcbmxpYnJldHRpc3QvTVNcXG5saWJyZXR0by9TTVxcbmxpY2VcXG5saWNlbnNlL01HRFNcXG5saWNlbnNlZC9VXFxubGljZW5zZWUvTVNcXG5saWNlbnRpYXRlL1NNXFxubGljZW50aW91cy9ZUFxcbmxpY2VudGlvdXNuZXNzL01cXG5saWNoZW4vTVNcXG5saWNpdC9ZXFxubGljay9NREpTR1xcbmxpY2tpbmcvTVxcbmxpY29yaWNlL1NNXFxubGlkL1NNXFxubGlkZGVkXFxubGlkbGVzc1xcbmxpZG8vTVNcXG5saWUvRFNNXFxubGllZC9NUlxcbmxpZWYvUlRcXG5saWVnZS9TTVxcbmxpZW4vTVNcXG5saWV1L01cXG5saWV1dGVuYW5jeS9NXFxubGlldXRlbmFudC9NU1xcbmxpZmUvTVpSXFxubGlmZWJlbHQvU1xcbmxpZmVibG9vZC9NXFxubGlmZWJvYXQvTVNcXG5saWZlYnVveS9NU1xcbmxpZmVmb3Jtc1xcbmxpZmVndWFyZC9TTVxcbmxpZmVsZXNzL1lQXFxubGlmZWxlc3NuZXNzL01cXG5saWZlbGlrZVxcbmxpZmVsaW5lL01TXFxubGlmZWxvbmdcXG5saWZlci9NXFxubGlmZXNhdmVyL1NNXFxubGlmZXNhdmluZy9NXFxubGlmZXNwYW4vU1xcbmxpZmVzdHlsZS9TTVxcbmxpZmV0aW1lL01TXFxubGlmZXdvcmsvTVNcXG5saWZ0L01EUlNaR1xcbmxpZnRlci9NXFxubGlmdG9mZi9TTVxcbmxpZ2FtZW50L01TXFxubGlnYXRlL0dORFNcXG5saWdhdGlvbi9NXFxubGlnYXR1cmUvTUdEU1xcbmxpZ2h0J3MvQ1xcbmxpZ2h0L0NBU1RHRFxcbmxpZ2h0ZWQvVVxcbmxpZ2h0ZW4vU0RSWkdcXG5saWdodGVuZXIvTVxcbmxpZ2h0ZXIvU01cXG5saWdodGZhY2UvTURcXG5saWdodGhlYWRlZFxcbmxpZ2h0aGVhcnRlZC9ZUFxcbmxpZ2h0aGVhcnRlZG5lc3MvTVxcbmxpZ2h0aG91c2UvTVNcXG5saWdodGluZydzXFxubGlnaHRseVxcbmxpZ2h0bmVzcy9NXFxubGlnaHRuaW5nL01EU1xcbmxpZ2h0cHJvb2ZcXG5saWdodHNoaXAvTVNcXG5saWdodHdlaWdodC9TTVxcbmxpZ25lb3VzXFxubGlnbmluXFxubGlnbml0ZS9NXFxubGlpXFxubGlrYWJpbGl0eS9NXFxubGlrYWJsZS9QXFxubGlrYWJsZW5lc3MvTVxcbmxpa2UvRU1HRFNUXFxubGlrZWxpaG9vZC9VTVxcbmxpa2VsaWhvb2RzXFxubGlrZWxpbmVzcy9VTVxcbmxpa2VseS9VUFJUXFxubGlrZW4vU0dEXFxubGlrZW5lc3MvVU1cXG5saWtlbmVzc2VzXFxubGlrZXJcXG5saWtld2lzZVxcbmxpa2luZy9NXFxubGlsYWMvU01cXG5saWxsaXB1dGlhblxcbmxpbG8vU1xcbmxpbHQvTURTR1xcbmxpbHkvU01cXG5saW1iL01TXFxubGltYmVyL1VEU0dcXG5saW1iZXJuZXNzL01cXG5saW1ibGVzc1xcbmxpbWJvL1NNXFxubGltZS9NR0RTXFxubGltZWFkZS9TTVxcbmxpbWVsaWdodC9NXFxubGltZXJpY2svU01cXG5saW1lc2NhbGVcXG5saW1lc3RvbmUvTVxcbmxpbWV5L1NcXG5saW1pdCdzXFxubGltaXQvQ1NaR0RSXFxubGltaXRhdGlvbi9DTVxcbmxpbWl0YXRpb25zXFxubGltaXRlZC9VXFxubGltaXRlcidzXFxubGltaXRpbmcvU1xcbmxpbWl0bGVzcy9QXFxubGltaXRsZXNzbmVzcy9NXFxubGltbi9EU0dcXG5saW1vL01TXFxubGltb3VzaW5lL01TXFxubGltcC9NRFJZU1BUR1xcbmxpbXBldC9NU1xcbmxpbXBpZC9ZUFxcbmxpbXBpZGl0eS9NXFxubGltcGlkbmVzcy9NXFxubGltcG5lc3MvTVxcbmxpbXkvUlRcXG5saW5hZ2UvTVxcbmxpbmNocGluL1NNXFxubGluZGVuL01TXFxubGluZS9NWkdEUlNKXFxubGluZWFnZS9NU1xcbmxpbmVhbC9ZXFxubGluZWFtZW50L1NNXFxubGluZWFyL1lcXG5saW5lYXJpdHkvTVxcbmxpbmViYWNrZXIvTVNcXG5saW5lZC9VXFxubGluZWZlZWRcXG5saW5lbWFuL01cXG5saW5lbWVuXFxubGluZW4vU01cXG5saW5lbnMvTVxcbmxpbmVyL01cXG5saW5lc21hbi9NXFxubGluZXNtZW5cXG5saW5ldXAvTVNcXG5saW5nL01cXG5saW5nZXIvWkdKRFJTXFxubGluZ2VyZXIvTVxcbmxpbmdlcmllL01cXG5saW5nZXJpbmcvWVxcbmxpbmdvL01cXG5saW5nb2VzXFxubGluZ3VhbFxcbmxpbmd1aW5lL01cXG5saW5ndWlzdC9TTVxcbmxpbmd1aXN0aWMvU1xcbmxpbmd1aXN0aWNhbGx5XFxubGluZ3Vpc3RpY3MvTVxcbmxpbmltZW50L1NNXFxubGluaW5nL01cXG5saW5rL01EUlNHXFxubGlua2FnZS9NU1xcbmxpbmttYW5cXG5saW5rbWVuXFxubGlua3VwL01TXFxubGlubmV0L01TXFxubGlub1xcbmxpbm9sZXVtL01cXG5saW5zZWVkL01cXG5saW50J3NcXG5saW50L0NER1xcbmxpbnRlbC9NU1xcbmxpbnRzXFxubGludHkvVFJcXG5saW9uL01TXFxubGlvbmVzcy9NU1xcbmxpb25oZWFydGVkXFxubGlvbml6YXRpb24vTVxcbmxpb25pemUvR0RTXFxubGlwL1NNXFxubGlwaWQvU01cXG5saXBvc3VjdGlvbi9NXFxubGlwcGVkXFxubGlwcHlcXG5saXByZWFkL0dSU1xcbmxpcHJlYWRlci9NXFxubGlwcmVhZGluZy9NXFxubGlwc3RpY2svTURTR1xcbmxpcVxcbmxpcXVlZmFjdGlvbi9NXFxubGlxdWVmeS9EU0dcXG5saXF1ZXVyL1NNXFxubGlxdWlkL01TXFxubGlxdWlkYXRlL1hHTkRTXFxubGlxdWlkYXRpb24vTVxcbmxpcXVpZGF0b3IvTVNcXG5saXF1aWRpdHkvTVxcbmxpcXVpZGl6ZS9aR0RSU1xcbmxpcXVpZGl6ZXIvTVxcbmxpcXVvci9NREdTXFxubGlyYS9NXFxubGlyZVxcbmxpc2xlL01cXG5saXNwL01EUlNaR1xcbmxpc3Blci9NXFxubGlzc29tZVxcbmxpc3QvTUROU0pYR1xcbmxpc3RlZC9VXFxubGlzdGVuL0JNRFJaR1xcbmxpc3RlbmVyL01cXG5saXN0ZXJpYVxcbmxpc3RpbmcvTVxcbmxpc3RsZXNzL1lQXFxubGlzdGxlc3NuZXNzL01cXG5saXQvWlJcXG5saXRhbnkvU01cXG5saXRjaGkvTVNcXG5saXRlXFxubGl0ZXIvTVxcbmxpdGVyYWN5L01cXG5saXRlcmFsL1NNWVBcXG5saXRlcmFsbmVzcy9NXFxubGl0ZXJhcmluZXNzL01cXG5saXRlcmFyeS9QXFxubGl0ZXJhdGUvU01ZXFxubGl0ZXJhdGkvTVxcbmxpdGVyYXR1cmUvTVxcbmxpdGhlL1JQWVRcXG5saXRoZW5lc3MvTVxcbmxpdGhlc29tZVxcbmxpdGhpdW0vTVxcbmxpdGhvZ3JhcGgvTURSWkdcXG5saXRob2dyYXBoZXIvTVxcbmxpdGhvZ3JhcGhpY1xcbmxpdGhvZ3JhcGhpY2FsbHlcXG5saXRob2dyYXBoc1xcbmxpdGhvZ3JhcGh5L01cXG5saXRob3NwaGVyZS9TTVxcbmxpdGlnYW50L1NNXFxubGl0aWdhdGUvRFNHTlxcbmxpdGlnYXRpb24vTVxcbmxpdGlnYXRvci9NU1xcbmxpdGlnaW91cy9QXFxubGl0aWdpb3VzbmVzcy9NXFxubGl0bXVzL01cXG5saXRvdGVzL01cXG5saXR0ZXIvTURSU1pHXFxubGl0dGVyYXRldXIvTVNcXG5saXR0ZXJidWcvTVNcXG5saXR0ZXJlci9NXFxubGl0dGxlL01UUlBcXG5saXR0bGVuZXNzL01cXG5saXR0b3JhbC9TTVxcbmxpdHVyZ2ljYWwvWVxcbmxpdHVyZ2lzdC9TTVxcbmxpdHVyZ3kvU01cXG5saXZhYmlsaXR5L01cXG5saXZhYmxlL1VcXG5saXZlL0FUR0RTQlxcbmxpdmVsaWhvb2QvU01cXG5saXZlbGluZXNzL01cXG5saXZlbG9uZy9TXFxubGl2ZWx5L1BSVFxcbmxpdmVuL1NHRFxcbmxpdmVyJ3NcXG5saXZlci9TXFxubGl2ZXJpZWRcXG5saXZlcmlzaFxcbmxpdmVyd29ydC9NU1xcbmxpdmVyd3Vyc3QvTVxcbmxpdmVyeS9DU01cXG5saXZlcnltYW4vQ01cXG5saXZlcnltZW4vQ1xcbmxpdmVzdG9jay9NXFxubGl2ZXdhcmVcXG5saXZpZC9ZXFxubGl2aW5nL01TXFxubGl4L0tcXG5saXphcmQvTVNcXG5sbFxcbmxsYW1hL1NNXFxubGxhbm8vU01cXG5sb1xcbmxvYWQnc1xcbmxvYWQvQVVHU0RcXG5sb2FkYWJsZVxcbmxvYWRlci9NU1xcbmxvYWRpbmcnc1xcbmxvYWYvTURSU1pHXFxubG9hZmVyL01cXG5sb2FtL01cXG5sb2FteS9UUlxcbmxvYW4vTURSU1pHXFxubG9hbmVyL01cXG5sb2Fuc2hhcmtpbmcvTVxcbmxvYW53b3JkL01TXFxubG9hdGgvSlpHRFJTXFxubG9hdGhlXFxubG9hdGhlci9NXFxubG9hdGhpbmcvTVxcbmxvYXRoc29tZS9QWVxcbmxvYXRoc29tZW5lc3MvTVxcbmxvYXZlc1xcbmxvYi9TTURcXG5sb2JhclxcbmxvYmJlZFxcbmxvYmJlci9NU1xcbmxvYmJpbmdcXG5sb2JieS9HRFNNXFxubG9iYnlpc3QvTVNcXG5sb2JlL01TXFxubG9ib3RvbWl6ZS9EU0dcXG5sb2JvdG9teS9TTVxcbmxvYnN0ZXIvTVNcXG5sb2NhbC9TTVlcXG5sb2NhbGUvTVNcXG5sb2NhbGl0eS9TTVxcbmxvY2FsaXphdGlvbi9NXFxubG9jYWxpemUvRFNHXFxubG9jYXRlL0VBR05EU1xcbmxvY2F0aW9uJ3MvQVxcbmxvY2F0aW9uL0VTTVxcbmxvY2F0b3IvTVNcXG5sb2Nhdm9yZS9TTVxcbmxvY2lcXG5sb2NrL01EUlNCWkdcXG5sb2NrZXIvTVxcbmxvY2tldC9NU1xcbmxvY2tqYXcvTVxcbmxvY2tvdXQvTVNcXG5sb2Nrc21pdGgvTVxcbmxvY2tzbWl0aHNcXG5sb2Nrc3RlcC9NXFxubG9ja3VwL01TXFxubG9jby9TXFxubG9jb21vdGlvbi9NXFxubG9jb21vdGl2ZS9NU1xcbmxvY293ZWVkL1NNXFxubG9jdW0vU1xcbmxvY3VzL01cXG5sb2N1c3QvU01cXG5sb2N1dGlvbi9NU1xcbmxvZGUvTVNcXG5sb2Rlc3Rhci9NU1xcbmxvZGVzdG9uZS9NU1xcbmxvZGdlL0RSU0pNWkdcXG5sb2RnZXIvTVxcbmxvZGdpbmcvTVxcbmxvZGdpbmdzL01cXG5sb2Z0L01EU0dcXG5sb2Z0aWx5XFxubG9mdGluZXNzL01cXG5sb2Z0eS9QUlRcXG5sb2cvU01cXG5sb2dhbmJlcnJ5L1NNXFxubG9nYXJpdGhtL1NNXFxubG9nYXJpdGhtaWNcXG5sb2dib29rL1NNXFxubG9nZS9NU1xcbmxvZ2dlZFxcbmxvZ2dlci9TTVxcbmxvZ2dlcmhlYWQvU01cXG5sb2dnaWEvU01cXG5sb2dnaW5nL01cXG5sb2dpYy9NXFxubG9naWNhbC9ZXFxubG9naWNhbGl0eS9NXFxubG9naWNpYW4vTVNcXG5sb2dpbi9TTVxcbmxvZ2lzdGljL1NcXG5sb2dpc3RpY2FsL1lcXG5sb2dpc3RpY3MvTVxcbmxvZ2phbS9TTVxcbmxvZ28vTVNcXG5sb2dvZmYvU01cXG5sb2dvbi9TTVxcbmxvZ290eXBlL1NNXFxubG9nb3V0L1NNXFxubG9ncm9sbGluZy9NXFxubG9neS9SVFxcbmxvaW4vTVNcXG5sb2luY2xvdGgvTVxcbmxvaW5jbG90aHNcXG5sb2l0ZXIvWkdTRFJcXG5sb2l0ZXJlci9NXFxubG9pdGVyaW5nL01cXG5sb2xjYXQvU01cXG5sb2xsL0RTR1xcbmxvbGxpcG9wL1NNXFxubG9sbG9wL0dTRFxcbmxvbGx5L1NcXG5sb2xseWdhZy9TXFxubG9sbHlnYWdnZWRcXG5sb2xseWdhZ2dpbmdcXG5sb25lL1laUlxcbmxvbmVsaW5lc3MvTVxcbmxvbmVseS9QVFJcXG5sb25lci9NXFxubG9uZXNvbWUvWVBcXG5sb25lc29tZW5lc3MvTVxcbmxvbmcnc1xcbmxvbmcvS0RTVEdcXG5sb25nYm9hdC9NU1xcbmxvbmdib3cvTVNcXG5sb25nZXJcXG5sb25nZXZpdHkvTVxcbmxvbmdoYWlyL01TXFxubG9uZ2hhbmQvTVxcbmxvbmdob3JuL01TXFxubG9uZ2hvdXNlL1NcXG5sb25naW5nL01ZU1xcbmxvbmdpc2hcXG5sb25naXR1ZGUvTVNcXG5sb25naXR1ZGluYWwvWVxcbmxvbmdzaG9yZW1hbi9NXFxubG9uZ3Nob3JlbWVuXFxubG9uZ3NpZ2h0ZWRcXG5sb25nc3RhbmRpbmdcXG5sb25ndGltZVxcbmxvbmd1ZXVyL1NNXFxubG9uZ3dheXNcXG5sb29cXG5sb29mYWgvTVxcbmxvb2ZhaHNcXG5sb29rL01EUlNaR1xcbmxvb2thbGlrZS9NU1xcbmxvb2tlci9NXFxubG9va291dC9NU1xcbmxvb2t1cFxcbmxvb20vTURTR1xcbmxvb24vTVNcXG5sb29uaWUvTVxcbmxvb255L1JTTVRcXG5sb29wL01EU0dcXG5sb29waG9sZS9NU1xcbmxvb3B5L1JUXFxubG9vcy9OUlhcXG5sb29zZS9VRFNUR1xcbmxvb3NlbHlcXG5sb29zZW4vVUdTRFxcbmxvb3NlbmVzcy9NXFxubG9vdC9NRFJTWkdcXG5sb290ZXIvTVxcbmxvb3RpbmcvTVxcbmxvcC9TXFxubG9wZS9NR0RTXFxubG9wcGVkXFxubG9wcGluZ1xcbmxvcHNpZGVkL1lQXFxubG9wc2lkZWRuZXNzL01cXG5sb3F1YWNpb3VzL1BZXFxubG9xdWFjaW91c25lc3MvTVxcbmxvcXVhY2l0eS9NXFxubG9yZC9NRFlTR1xcbmxvcmRsaW5lc3MvTVxcbmxvcmRseS9UUFJcXG5sb3Jkc2hpcC9TTVxcbmxvcmUvTVxcbmxvcmduZXR0ZS9TTVxcbmxvcmlzL01TXFxubG9yblxcbmxvcnJ5L1NNXFxubG9zZS9aR1JTSlxcbmxvc2VyL01cXG5sb3NpbmcvTVxcbmxvc3MvTVNcXG5sb3NzbGVzc1xcbmxvc3RcXG5sb3QvU01cXG5sb3Rpb24vU01cXG5sb3R0ZXJ5L1NNXFxubG90dG8vTVxcbmxvdHVzL01TXFxubG91Y2hlXFxubG91ZC9SWVRQXFxubG91ZGhhaWxlci9TTVxcbmxvdWRtb3V0aC9NRFxcbmxvdWRtb3V0aHNcXG5sb3VkbmVzcy9NXFxubG91ZHNwZWFrZXIvTVNcXG5sb3VnaFxcbmxvdWdoc1xcbmxvdW5nZS9NWkdEUlNcXG5sb3VuZ2VyL01cXG5sb3VyL0RTR1xcbmxvdXNlJ3NcXG5sb3VzZS9DRFNHXFxubG91c2lseVxcbmxvdXNpbmVzcy9NXFxubG91c3kvVFBSXFxubG91dC9NU1xcbmxvdXRpc2gvUFlcXG5sb3V2ZXIvTURTXFxubG92YWJsZW5lc3MvTVxcbmxvdmFibHlcXG5sb3ZlL01ZWkdEUlNCXFxubG92ZWJpcmQvU01cXG5sb3ZlY2hpbGQvTVxcbmxvdmVkL1VcXG5sb3ZlbGVzc1xcbmxvdmVsaW5lc3MvTVxcbmxvdmVsb3JuXFxubG92ZWx5L1JTTVRQXFxubG92ZW1ha2luZy9NXFxubG92ZXIvTVxcbmxvdmVzaWNrXFxubG92ZXkvU1xcbmxvdmluZy9ZXFxubG93L1NaVEdNRFJZUFxcbmxvd2Jvcm5cXG5sb3dib3kvTVNcXG5sb3dicm93L1NNXFxubG93ZG93bi9NXFxubG93ZXIvR0RcXG5sb3dlcmNhc2UvTVxcbmxvd2VybW9zdFxcbmxvd2lzaFxcbmxvd2xhbmQvU1pNUlxcbmxvd2xhbmRlci9NXFxubG93bGlmZS9TTVxcbmxvd2xpbmVzcy9NXFxubG93bHkvVFBSXFxubG93bmVzcy9NXFxubG94L01cXG5sb3lhbC9FVFlcXG5sb3lhbGVyXFxubG95YWxpc20vTVxcbmxveWFsaXN0L1NNXFxubG95YWx0aWVzXFxubG95YWx0eS9FTVxcbmxvemVuZ2UvU01cXG5sdGRcXG5sdWF1L01TXFxubHViYmVyL01ZU1xcbmx1YmUvTUdEU1xcbmx1YnJpY2FudC9TTVxcbmx1YnJpY2F0ZS9EU0dOXFxubHVicmljYXRpb24vTVxcbmx1YnJpY2F0b3IvTVNcXG5sdWJyaWNpb3VzL1lcXG5sdWJyaWNpdHkvTVxcbmx1Y2lkL1BZXFxubHVjaWRpdHkvTVxcbmx1Y2lkbmVzcy9NXFxubHVjay9NRFNHXFxubHVja2lseS9VXFxubHVja2luZXNzL1VNXFxubHVja2xlc3NcXG5sdWNreS9VUFRSXFxubHVjcmF0aXZlL1lQXFxubHVjcmF0aXZlbmVzcy9NXFxubHVjcmUvTVxcbmx1Y3VicmF0ZS9HTkRTXFxubHVjdWJyYXRpb24vTVxcbmx1ZGljcm91cy9ZUFxcbmx1ZGljcm91c25lc3MvTVxcbmx1ZG9cXG5sdWZmL0RTR1xcbmx1Zy9TTVxcbmx1Z2UvU1xcbmx1Z2dhZ2UvTVxcbmx1Z2dlZFxcbmx1Z2dlci9NU1xcbmx1Z2dpbmdcXG5sdWdob2xlL1NcXG5sdWdzYWlsL1NNXFxubHVndWJyaW91cy9ZUFxcbmx1Z3VicmlvdXNuZXNzL01cXG5sdWtld2FybS9ZUFxcbmx1a2V3YXJtbmVzcy9NXFxubHVsbC9NRFNHXFxubHVsbGFieS9TTVxcbmx1bHUvU1xcbmx1bWJhZ28vTVxcbmx1bWJhclxcbmx1bWJlci9NRFJaR1NcXG5sdW1iZXJlci9NXFxubHVtYmVyaW5nL01cXG5sdW1iZXJqYWNrL1NNXFxubHVtYmVybWFuL01cXG5sdW1iZXJtZW5cXG5sdW1iZXJ5YXJkL1NNXFxubHVtZW5cXG5sdW1pbmFyeS9TTVxcbmx1bWluZXNjZW5jZS9NXFxubHVtaW5lc2NlbnRcXG5sdW1pbm9zaXR5L01cXG5sdW1pbm91cy9ZXFxubHVtbW94L01TXFxubHVtcC9NRE5TR1xcbmx1bXBlY3RvbXkvU1xcbmx1bXBlbnByb2xldGFyaWF0XFxubHVtcGluZXNzL01cXG5sdW1waXNoXFxubHVtcHkvVFJQXFxubHVuYWN5L1NNXFxubHVuYXJcXG5sdW5hdGljL1NNXFxubHVuY2gvR01EU1xcbmx1bmNoYm94L1NcXG5sdW5jaGVvbi9TTVxcbmx1bmNoZW9uZXR0ZS9TTVxcbmx1bmNocm9vbS9NU1xcbmx1bmNodGltZS9NU1xcbmx1bmcvTURTR1xcbmx1bmdlL1NNXFxubHVuZ2Zpc2gvTVNcXG5sdW5nZnVsL1NcXG5sdW5raGVhZC9NU1xcbmx1cGluZS9NU1xcbmx1cHVzL01cXG5sdXJjaC9HTURTXFxubHVyZS9NR0RTXFxubHVyZ3lcXG5sdXJpZC9QWVxcbmx1cmlkbmVzcy9NXFxubHVyay9EUlNaR1xcbmx1c2Npb3VzL1BZXFxubHVzY2lvdXNuZXNzL01cXG5sdXNoL01SU1lQVFxcbmx1c2huZXNzL01cXG5sdXN0L01EUlNHXFxubHVzdGVyL01cXG5sdXN0ZXJsZXNzXFxubHVzdGZ1bC9ZXFxubHVzdGlseVxcbmx1c3RpbmVzcy9NXFxubHVzdHJvdXMvWVxcbmx1c3R5L1BUUlxcbmx1dGFuaXN0L1NNXFxubHV0ZS9NU1xcbmx1dGVuaXN0L1NNXFxubHV0ZXRpdW0vTVxcbmx1eFxcbmx1eHVyaWFuY2UvTVxcbmx1eHVyaWFudC9ZXFxubHV4dXJpYXRlL0RTR05cXG5sdXh1cmlhdGlvbi9NXFxubHV4dXJpb3VzL1BZXFxubHV4dXJpb3VzbmVzcy9NXFxubHV4dXJ5L1NNXFxubHZpXFxubHZpaVxcbmx4aVxcbmx4aWlcXG5seGl2XFxubHhpeFxcbmx4dmlcXG5seHZpaVxcbmx5Y2V1bS9NU1xcbmx5Y2hnYXRlL1NcXG5seWUvTUdcXG5seWluZy9NXFxubHltcGgvTVxcbmx5bXBoYXRpYy9TTVxcbmx5bXBob2N5dGUvU01cXG5seW1waG9pZFxcbmx5bXBob21hL1NNXFxubHluY2gvSlpHRFJTXFxubHluY2hlci9NXFxubHluY2hpbmcvTVxcbmx5bngvTVNcXG5seXJlL01TXFxubHlyZWJpcmQvTVNcXG5seXJpYy9TTVxcbmx5cmljYWwvWVxcbmx5cmljaXNtL01cXG5seXJpY2lzdC9TTVxcbmx5c29zb21hbFxcbmx5c29zb21lc1xcbm0vS0FTXFxubWEnYW1cXG5tYS9TTUhcXG5tYWMvU0dNRFxcbm1hY2FicmVcXG5tYWNhZGFtL01cXG5tYWNhZGFtaWEvU01cXG5tYWNhZGFtaXplL0dEU1xcbm1hY2FxdWUvTVNcXG5tYWNhcm9uaS9NU1xcbm1hY2Fyb29uL01TXFxubWFjYXcvU01cXG5tYWNlL01TXFxubWFjZXJhdGUvRFNHTlxcbm1hY2VyYXRpb24vTVxcbm1hY2gvTVxcbm1hY2hldGUvU01cXG5tYWNoaW5hdGUvR05EU1hcXG5tYWNoaW5hdGlvbi9NXFxubWFjaGluZS9EU01HQlxcbm1hY2hpbmVyeS9NXFxubWFjaGluaXN0L01TXFxubWFjaGlzbW8vTVxcbm1hY2hvL01cXG5tYWNrZXJlbC9TTVxcbm1hY2tpbmF3L1NNXFxubWFja2ludG9zaC9NU1xcbm1hY3JhbWUvTVxcbm1hY3JvL1NNXFxubWFjcm9iaW90aWMvU1xcbm1hY3JvYmlvdGljcy9NXFxubWFjcm9jb3NtL1NNXFxubWFjcm9lY29ub21pYy9TXFxubWFjcm9lY29ub21pY3MvTVxcbm1hY3JvbG9neS9TXFxubWFjcm9uL01TXFxubWFjcm9waGFnZXNcXG5tYWNyb3Njb3BpY1xcbm1hZC9TTVlQXFxubWFkYW0vU01cXG5tYWRhbWUvTVxcbm1hZGNhcC9NU1xcbm1hZGRlbi9ER1NcXG5tYWRkZW5pbmcvWVxcbm1hZGRlci9NU1xcbm1hZGRlc3RcXG5tYWRkaW5nXFxubWFkZS9BVVxcbm1hZGVtb2lzZWxsZS9NU1xcbm1hZGhvdXNlL1NNXFxubWFkbWFuL01cXG5tYWRtZW5cXG5tYWRuZXNzL01cXG5tYWRyYXMvTVNcXG5tYWRyYXNhL1NNXFxubWFkcmFzYWgvTVxcbm1hZHJhc2Foc1xcbm1hZHJhc3NhL1NNXFxubWFkcmlnYWwvU01cXG5tYWR3b21hbi9NXFxubWFkd29tZW5cXG5tYWVsc3Ryb20vU01cXG5tYWVzdHJvL1NNXFxubWFmaWEvU01cXG5tYWZpb3NpXFxubWFmaW9zby9NXFxubWFnL1NNXFxubWFnYXppbmUvU01cXG5tYWdlL01TXFxubWFnZW50YS9NXFxubWFnZ290L01TXFxubWFnZ290eVxcbm1hZ2kvTVxcbm1hZ2ljL1NNXFxubWFnaWNhbC9ZXFxubWFnaWNpYW4vU01cXG5tYWdpY2tlZFxcbm1hZ2lja2luZ1xcbm1hZ2lzdGVyaWFsL1lcXG5tYWdpc3RyYWN5L01cXG5tYWdpc3RyYXRlL1NNXFxubWFnbWEvTVxcbm1hZ25hbmltaXR5L01cXG5tYWduYW5pbW91cy9ZXFxubWFnbmF0ZS9TTVxcbm1hZ25lc2lhL01cXG5tYWduZXNpdW0vTVxcbm1hZ25ldC9NU1xcbm1hZ25ldGljXFxubWFnbmV0aWNhbGx5XFxubWFnbmV0aXNtL01cXG5tYWduZXRpdGUvTVxcbm1hZ25ldGl6YWJsZVxcbm1hZ25ldGl6YXRpb24vQ01cXG5tYWduZXRpemUvQ0dEU1xcbm1hZ25ldG8vU01cXG5tYWduZXRvbWV0ZXIvU01cXG5tYWduZXRvc3BoZXJlXFxubWFnbmlmaWNhdGlvbi9NXFxubWFnbmlmaWNlbmNlL01cXG5tYWduaWZpY2VudC9ZXFxubWFnbmlmaWVyL01cXG5tYWduaWZ5L1pHWERSU05cXG5tYWduaWxvcXVlbmNlL01cXG5tYWduaWxvcXVlbnRcXG5tYWduaXR1ZGUvU01cXG5tYWdub2xpYS9NU1xcbm1hZ25vblxcbm1hZ251bS9NU1xcbm1hZ3BpZS9NU1xcbm1hZ3VzL01cXG5tYWhhcmFqYWgvTVxcbm1haGFyYWphaHNcXG5tYWhhcmFuaS9TTVxcbm1haGFyaXNoaS9TTVxcbm1haGF0bWEvU01cXG5tYWhvZ2FueS9TTVxcbm1haG91dC9NU1xcbm1haWQvTU5TWFxcbm1haWRlbi9NWVxcbm1haWRlbmhhaXIvTVxcbm1haWRlbmhlYWQvU01cXG5tYWlkZW5ob29kL01cXG5tYWlkc2VydmFudC9TTVxcbm1haWwvSk1EUlNaR1xcbm1haWxiYWcvU01cXG5tYWlsYm9tYi9HU0RcXG5tYWlsYm94L01TXFxubWFpbGVyL01cXG5tYWlsaW5nL01cXG5tYWlsbG90L1NNXFxubWFpbG1hbi9NXFxubWFpbG1lblxcbm1haWxzaG90L1NcXG5tYWltL0RTR1xcbm1haW4vTVlTXFxubWFpbmZyYW1lL1NNXFxubWFpbmxhbmQvTVNcXG5tYWlubGluZS9NR0RTXFxubWFpbm1hc3QvTVNcXG5tYWluc2FpbC9NU1xcbm1haW5zcHJpbmcvTVNcXG5tYWluc3RheS9NU1xcbm1haW5zdHJlYW0vU01ER1xcbm1haW50YWluL1pHQkRSU1xcbm1haW50YWluYWJpbGl0eVxcbm1haW50YWluYWJsZS9VXFxubWFpbnRhaW5lZC9VXFxubWFpbnRlbmFuY2UvTVxcbm1haW50b3AvU01cXG5tYWlzb25ldHRlL01TXFxubWFpemUvU01cXG5tYWplc3RpY1xcbm1hamVzdGljYWxseVxcbm1hamVzdHkvU01cXG5tYWpvbGljYS9NXFxubWFqb3IvU0dNRFlcXG5tYWpvcmRvbW8vTVNcXG5tYWpvcmV0dGUvTVNcXG5tYWpvcml0YXJpYW4vU01cXG5tYWpvcml0YXJpYW5pc21cXG5tYWpvcml0eS9TTVxcbm1ha2Uncy9BXFxubWFrZS9VQUdTXFxubWFrZW92ZXIvTVNcXG5tYWtlci9TTVxcbm1ha2VzaGlmdC9TTVxcbm1ha2V1cC9NU1xcbm1ha2V3ZWlnaHQvU1xcbm1ha2luZy9NU1xcbm1ha2luZ3MvTVxcbm1hbGFjaGl0ZS9NXFxubWFsYWRqdXN0ZWRcXG5tYWxhZGp1c3RtZW50L01cXG5tYWxhZG1pbmlzdHJhdGlvblxcbm1hbGFkcm9pdC9QWVxcbm1hbGFkcm9pdG5lc3MvTVxcbm1hbGFkeS9TTVxcbm1hbGFpc2UvTVxcbm1hbGFtdXRlL01TXFxubWFsYXByb3Bpc20vU01cXG5tYWxhcmlhL01cXG5tYWxhcmlhbFxcbm1hbGFya2V5L01cXG5tYWxhdGhpb24vTVxcbm1hbGNvbnRlbnQvTVNcXG5tYWxlL01QU1xcbm1hbGVkaWN0aW9uL1NNXFxubWFsZWZhY3Rpb24vTVxcbm1hbGVmYWN0b3IvU01cXG5tYWxlZmljXFxubWFsZWZpY2VuY2UvTVxcbm1hbGVmaWNlbnRcXG5tYWxlbmVzcy9NXFxubWFsZXZvbGVuY2UvTVxcbm1hbGV2b2xlbnQvWVxcbm1hbGZlYXNhbmNlL01cXG5tYWxmb3JtYXRpb24vU01cXG5tYWxmb3JtZWRcXG5tYWxmdW5jdGlvbi9NRFNHXFxubWFsaWNlL01cXG5tYWxpY2lvdXMvUFlcXG5tYWxpY2lvdXNuZXNzL01cXG5tYWxpZ24vRFNHXFxubWFsaWduYW5jeS9TTVxcbm1hbGlnbmFudC9ZXFxubWFsaWduaXR5L01cXG5tYWxpbmdlci9aR1NEUlxcbm1hbGluZ2VyZXIvTVxcbm1hbGwvTVNcXG5tYWxsYXJkL1NNXFxubWFsbGVhYmlsaXR5L01cXG5tYWxsZWFibGVcXG5tYWxsZXQvTVNcXG5tYWxsb3cvTVNcXG5tYWxub3VyaXNoZWRcXG5tYWxudXRyaXRpb24vTVxcbm1hbG9jY2x1c2lvbi9NXFxubWFsb2Rvcm91c1xcbm1hbHByYWN0aWNlL1NNXFxubWFsdC9NRFNHXFxubWFsdGVkL01TXFxubWFsdG9zZS9NXFxubWFsdHJlYXQvR0xEU1xcbm1hbHRyZWF0bWVudC9NXFxubWFsdHkvVFJcXG5tYWx3YXJlL01cXG5tYW0vU1xcbm1hbWEvTVNcXG5tYW1iYS9TTVxcbm1hbWJvL1NHTURcXG5tYW1tYS9NXFxubWFtbWFsL01TXFxubWFtbWFsaWFuL01TXFxubWFtbWFyeVxcbm1hbW1vZ3JhbS9NU1xcbm1hbW1vZ3JhcGh5L01cXG5tYW1tb24vTVxcbm1hbW1vdGgvTVxcbm1hbW1vdGhzXFxubWFtbXkvU01cXG5tYW4ncy9GXFxubWFuL1VTWVxcbm1hbmFjbGUvRFNNR1xcbm1hbmFnZS9aR0RSU0xcXG5tYW5hZ2VhYmlsaXR5L01cXG5tYW5hZ2VhYmxlL1VcXG5tYW5hZ2VtZW50L01TXFxubWFuYWdlci9NXFxubWFuYWdlcmVzcy9TXFxubWFuYWdlcmlhbFxcbm1hbmFuYS9NU1xcbm1hbmF0ZWUvU01cXG5tYW5kYWxhL1NNXFxubWFuZGFtdXMvTVNcXG5tYW5kYXJpbi9NU1xcbm1hbmRhdGUvRFNNR1xcbm1hbmRhdG9yeVxcbm1hbmRpYmxlL01TXFxubWFuZGlidWxhclxcbm1hbmRvbGluL01TXFxubWFuZHJha2UvTVNcXG5tYW5kcmVsL1NNXFxubWFuZHJpbGwvTVNcXG5tYW5lL01EU1xcbm1hbmVnZS9NXFxubWFuZXV2ZXIvTURHU0JKXFxubWFuZXV2ZXJhYmlsaXR5L01cXG5tYW5mdWwvWVxcbm1hbmdhL01cXG5tYW5nYW5lc2UvTVxcbm1hbmdlL0RSTVpcXG5tYW5nZXIvTVxcbm1hbmdldG91dC9TXFxubWFuZ2luZXNzL01cXG5tYW5nbGUvTVpHRFJTXFxubWFuZ28vTVxcbm1hbmdvZXNcXG5tYW5ncm92ZS9NU1xcbm1hbmd5L1RSUFxcbm1hbmhhbmRsZS9HRFNcXG5tYW5ob2xlL1NNXFxubWFuaG9vZC9NXFxubWFuaHVudC9TTVxcbm1hbmlhL1NNXFxubWFuaWFjL01TXFxubWFuaWFjYWwvWVxcbm1hbmljL1NNXFxubWFuaWNhbGx5XFxubWFuaWN1cmUvTUdEU1xcbm1hbmljdXJpc3QvTVNcXG5tYW5pZmVzdC9NRFlTR1xcbm1hbmlmZXN0YXRpb24vU01cXG5tYW5pZmVzdG8vU01cXG5tYW5pZm9sZC9HTURTXFxubWFuaWtpbi9TTVxcbm1hbmlsYS9NXFxubWFuaW9jL01TXFxubWFuaXB1bGFibGVcXG5tYW5pcHVsYXRlL1hHTlZEU1xcbm1hbmlwdWxhdGlvbi9NXFxubWFuaXB1bGF0aXZlL1lcXG5tYW5pcHVsYXRvci9NU1xcbm1hbmtpbmQvTVxcbm1hbmt5XFxubWFubGlrZVxcbm1hbmxpbmVzcy9NXFxubWFubHkvVVRSXFxubWFubmEvTVxcbm1hbm5lZC9VXFxubWFubmVxdWluL1NNXFxubWFubmVyL01EWVNcXG5tYW5uZXJpc20vU01cXG5tYW5uZXJseS9VXFxubWFubmluZy9VXFxubWFubmlzaC9ZUFxcbm1hbm5pc2huZXNzL01cXG5tYW5vbWV0ZXIvU01cXG5tYW5vci9TTVxcbm1hbm9yaWFsXFxubWFucG93ZXIvTVxcbm1hbnF1ZVxcbm1hbnNhcmQvTVNcXG5tYW5zZS9TWE1OXFxubWFuc2VydmFudC9NXFxubWFuc2lvbi9NXFxubWFuc2xhdWdodGVyL01cXG5tYW50YS9TTVxcbm1hbnRlbC9NU1xcbm1hbnRlbHBpZWNlL1NNXFxubWFudGVsc2hlbGZcXG5tYW50ZWxzaGVsdmVzXFxubWFudGVzXFxubWFudGlsbGEvU01cXG5tYW50aXMvTVNcXG5tYW50aXNzYS9TTVxcbm1hbnRsZSdzXFxubWFudGxlL0VHRFNcXG5tYW50cmEvTVNcXG5tYW51YWwvTVlTXFxubWFudWZhY3R1cmUvRFJTTVpHXFxubWFudWZhY3R1cmVyL01cXG5tYW51ZmFjdHVyaW5nL01cXG5tYW51bWlzc2lvbi9TTVxcbm1hbnVtaXQvU1xcbm1hbnVtaXR0ZWRcXG5tYW51bWl0dGluZ1xcbm1hbnVyZS9NR0RTXFxubWFudXNjcmlwdC9NU1xcbm1hbnkvTVxcbm1hcCdzXFxubWFwL0FTXFxubWFwbGUvU01cXG5tYXBtYWtlci9TTVxcbm1hcHBlZC9BXFxubWFwcGVyL01TXFxubWFwcGluZy9TXFxubWFyL1NcXG5tYXJhYm91L01TXFxubWFyYWJvdXQvU01cXG5tYXJhY2EvTVNcXG5tYXJhc2NoaW5vL01TXFxubWFyYXRob24vU01SWlxcbm1hcmF0aG9uZXIvTVxcbm1hcmF1ZC9aR0RSU1xcbm1hcmF1ZGVyL01cXG5tYXJibGUvTUdEU1xcbm1hcmJsZWl6ZS9HRFNcXG5tYXJibGluZy9NXFxubWFyY2gvWkdNRFJTXFxubWFyY2hlci9NXFxubWFyY2hpb25lc3MvTVNcXG5tYXJlL01TXFxubWFyZ2FyaW5lL01cXG5tYXJnYXJpdGEvTVNcXG5tYXJnZVxcbm1hcmdpbi9NU1xcbm1hcmdpbmFsL1lTXFxubWFyZ2luYWxpYS9NXFxubWFyZ2luYWxpemF0aW9uL01cXG5tYXJnaW5hbGl6ZS9HRFNcXG5tYXJpYS9NXFxubWFyaWFjaGkvTVNcXG5tYXJpZ29sZC9NU1xcbm1hcmlqdWFuYS9NXFxubWFyaW1iYS9TTVxcbm1hcmluYS9NU1xcbm1hcmluYWRlL0RTTUdcXG5tYXJpbmFyYS9NXFxubWFyaW5hdGUvRFNHTlxcbm1hcmluYXRpb24vTVxcbm1hcmluZS9NWlJTXFxubWFyaW5lci9NXFxubWFyaW9uZXR0ZS9NU1xcbm1hcml0YWwvWVxcbm1hcml0aW1lXFxubWFyam9yYW0vTVxcbm1hcmsvQU1EU0dcXG5tYXJrZG93bi9TTVxcbm1hcmtlZC9VXFxubWFya2VkbHlcXG5tYXJrZXIvTVNcXG5tYXJrZXQvTURSWkdCU1xcbm1hcmtldGFiaWxpdHkvTVxcbm1hcmtldGFibGUvVVxcbm1hcmtldGVlci9TTVxcbm1hcmtldGVyL01cXG5tYXJrZXRpbmcvTVxcbm1hcmtldHBsYWNlL1NNXFxubWFya2luZy9TTVxcbm1hcmtrYS9NXFxubWFya2thYVxcbm1hcmtzbWFuL01cXG5tYXJrc21hbnNoaXAvTVxcbm1hcmtzbWVuXFxubWFya3VwL01TXFxubWFybC9NXFxubWFybGluL01TXFxubWFybGluZXNwaWtlL1NNXFxubWFybWFsYWRlL01cXG5tYXJtb3JlYWxcXG5tYXJtb3NldC9TTVxcbm1hcm1vdC9NU1xcbm1hcm9vbi9NREdTXFxubWFycXVlL01TXFxubWFycXVlZS9TTVxcbm1hcnF1ZXNzL01TXFxubWFycXVldHJ5L01cXG5tYXJxdWlzL01TXFxubWFycXVpc2UvTVxcbm1hcnF1aXNldHRlL01cXG5tYXJyZWQvVVxcbm1hcnJpYWdlL0FTTVxcbm1hcnJpYWdlYWJpbGl0eS9NXFxubWFycmlhZ2VhYmxlXFxubWFycmllZC9TTVxcbm1hcnJpbmdcXG5tYXJyb3cvTVNcXG5tYXJyeS9BR0RTXFxubWFyc2gvTVNcXG5tYXJzaGFsL1NNREdcXG5tYXJzaGxhbmQvU01cXG5tYXJzaG1hbGxvdy9TTVxcbm1hcnNoeS9SVFxcbm1hcnN1cGlhbC9NU1xcbm1hcnQvTU5TWFxcbm1hcnRlbi9NXFxubWFydGVuc2l0ZVxcbm1hcnRpYWwvWVxcbm1hcnRpYW4vU1xcbm1hcnRpbi9NU1xcbm1hcnRpbmV0L01TXFxubWFydGluZ2FsZS9NU1xcbm1hcnRpbmkvU01cXG5tYXJ0eXIvTURHU1xcbm1hcnR5cmRvbS9NXFxubWFydmVsL01ER1NcXG5tYXJ2ZWxvdXMvWVxcbm1hcnppcGFuL01cXG5tYXNjXFxubWFzY2FyYS9HTURTXFxubWFzY290L01TXFxubWFzY3VsaW5lL1NNXFxubWFzY3VsaW5pdHkvTVxcbm1hc2VyL1NNXFxubWFzaC9NRFJTWkdcXG5tYXNoZXIvTVxcbm1hc2h1cC9NU1xcbm1hc2snc1xcbm1hc2svVURTR1xcbm1hc2tlci9NU1xcbm1hc29jaGlzbS9NXFxubWFzb2NoaXN0L1NNXFxubWFzb2NoaXN0aWNcXG5tYXNvY2hpc3RpY2FsbHlcXG5tYXNvbi9TTVxcbm1hc29uaWNcXG5tYXNvbnJ5L01cXG5tYXNxdWUvTVNcXG5tYXNxdWVyYWRlL0RSU01aR1xcbm1hc3F1ZXJhZGVyL01cXG5tYXNzL01EU0dWXFxubWFzc2FjcmUvTUdEU1xcbm1hc3NhZ2UvRFNNR1xcbm1hc3NldXIvU01cXG5tYXNzZXVzZS9NU1xcbm1hc3NpZi9NU1xcbm1hc3NpdmUvUFlcXG5tYXNzaXZlbmVzcy9NXFxubWFzdC9NRFNcXG5tYXN0ZWN0b215L1NNXFxubWFzdGVyJ3NcXG5tYXN0ZXIvQURHU1xcbm1hc3RlcmNsYXNzL1NcXG5tYXN0ZXJmdWwvWVxcbm1hc3Rlcmx5XFxubWFzdGVybWluZC9TR01EXFxubWFzdGVycGllY2UvTVNcXG5tYXN0ZXJzdHJva2UvU01cXG5tYXN0ZXJ3b3JrL01TXFxubWFzdGVyeS9NXFxubWFzdGhlYWQvTVNcXG5tYXN0aWMvTVxcbm1hc3RpY2F0ZS9HTkRTXFxubWFzdGljYXRpb24vTVxcbm1hc3RpZmYvU01cXG5tYXN0aXRpc1xcbm1hc3RvZG9uL1NNXFxubWFzdG9pZC9TTVxcbm1hc3R1cmJhdGUvR05EU1xcbm1hc3R1cmJhdGlvbi9NXFxubWFzdHVyYmF0b3J5XFxubWF0L1NaR01EUlxcbm1hdGFkb3IvU01cXG5tYXRjaC9BTVNcXG5tYXRjaGJvb2svU01cXG5tYXRjaGJveC9NU1xcbm1hdGNoZWQvVVxcbm1hdGNoaW5nXFxubWF0Y2hsZXNzXFxubWF0Y2hsb2NrL1NNXFxubWF0Y2htYWtlci9NU1xcbm1hdGNobWFraW5nL01cXG5tYXRjaHN0aWNrL01TXFxubWF0Y2h3b29kL01cXG5tYXRlL01TXFxubWF0ZXJpYWwvU01ZXFxubWF0ZXJpYWxpc20vTVxcbm1hdGVyaWFsaXN0L1NNXFxubWF0ZXJpYWxpc3RpY1xcbm1hdGVyaWFsaXN0aWNhbGx5XFxubWF0ZXJpYWxpemF0aW9uL01cXG5tYXRlcmlhbGl6ZS9EU0dcXG5tYXRlcmllbC9NXFxubWF0ZXJuYWwvWVxcbm1hdGVybml0eS9NXFxubWF0ZXkvU1xcbm1hdGhlbWF0aWNhbC9ZXFxubWF0aGVtYXRpY2lhbi9TTVxcbm1hdGhlbWF0aWNzL01cXG5tYXRpbmVlL1NNXFxubWF0aW5nL01cXG5tYXRpbnMvTVxcbm1hdHJpYXJjaC9NXFxubWF0cmlhcmNoYWxcXG5tYXRyaWFyY2hzXFxubWF0cmlhcmNoeS9TTVxcbm1hdHJpY2VzXFxubWF0cmljaWRhbFxcbm1hdHJpY2lkZS9NU1xcbm1hdHJpY3VsYXRlL0RTR05cXG5tYXRyaWN1bGF0aW9uL01cXG5tYXRyaW1vbmlhbFxcbm1hdHJpbW9ueS9NXFxubWF0cml4L01cXG5tYXRyb24vTVlTXFxubWF0dGUvRFJTTVpHXFxubWF0dGVyL01ER1xcbm1hdHRpbmcvTVxcbm1hdHRvY2svU01cXG5tYXR0cmVzcy9NU1xcbm1hdHVyYXRlL0dORFNcXG5tYXR1cmF0aW9uL01cXG5tYXR1cmUvWVRHRFJTXFxubWF0dXJpdHkvU01cXG5tYXR6by9TTUhcXG5tYXR6b2gvTVxcbm1hdHpvaHNcXG5tYXR6b3RcXG5tYXVkbGluXFxubWF1bC9NRFJTWkdcXG5tYXVsZXIvTVxcbm1hdW5kZXIvU0RHXFxubWF1c29sZXVtL1NNXFxubWF1dmUvTVxcbm1hdmVuL1NNXFxubWF2ZXJpY2svU01cXG5tYXcvU01cXG5tYXdraXNoL1BZXFxubWF3a2lzaG5lc3MvTVxcbm1heC9HTURTXFxubWF4aS9NU1xcbm1heGlsbGEvTVxcbm1heGlsbGFlXFxubWF4aWxsYXJ5XFxubWF4aW0vU01cXG5tYXhpbWFcXG5tYXhpbWFsL1lcXG5tYXhpbWl6YXRpb24vTVxcbm1heGltaXplL0dEU1xcbm1heGltdW0vU01cXG5tYXkvTVxcbm1heWJlL1NNXFxubWF5ZGF5L01TXFxubWF5Zmxvd2VyL01TXFxubWF5Zmx5L1NNXFxubWF5aGVtL01cXG5tYXluJ3RcXG5tYXlvL01cXG5tYXlvbm5haXNlL01cXG5tYXlvci9TTVxcbm1heW9yYWxcXG5tYXlvcmFsdHkvTVxcbm1heW9yZXNzL01TXFxubWF5cG9sZS9TTVxcbm1heXN0XFxubWF6ZS9NU1xcbm1henVya2EvTVNcXG5tZHNlXFxubWUvRFNIXFxubWVhZC9NXFxubWVhZG93L01TXFxubWVhZG93bGFyay9NU1xcbm1lYWdlci9QWVxcbm1lYWdlcm5lc3MvTVxcbm1lYWwvTVNcXG5tZWFsaW5lc3MvTVxcbm1lYWx0aW1lL1NNXFxubWVhbHkvVFBSXFxubWVhbHlidWcvU01cXG5tZWFseW1vdXRoZWRcXG5tZWFuL01SWUpQU1RHXFxubWVhbmRlci9TTURKR1xcbm1lYW5kZXJpbmdzL01cXG5tZWFuaWUvTVxcbm1lYW5pbmcvTVxcbm1lYW5pbmdmdWwvUFlcXG5tZWFuaW5nZnVsbmVzcy9NXFxubWVhbmluZ2xlc3MvWVBcXG5tZWFuaW5nbGVzc25lc3MvTVxcbm1lYW5uZXNzL01cXG5tZWFudC9VXFxubWVhbnRpbWUvTVxcbm1lYW53aGlsZS9NXFxubWVhbnkvU01cXG5tZWFzXFxubWVhc2xlcy9NXFxubWVhc2x5L1JUXFxubWVhc3VyYWJsZVxcbm1lYXN1cmFibHlcXG5tZWFzdXJlJ3NcXG5tZWFzdXJlL0FEU0dcXG5tZWFzdXJlZC9VXFxubWVhc3VyZWxlc3NcXG5tZWFzdXJlbWVudC9NU1xcbm1lYXQvTVNcXG5tZWF0YmFsbC9NU1xcbm1lYXRoZWFkL01TXFxubWVhdGluZXNzL01cXG5tZWF0bGVzc1xcbm1lYXRsb2FmL01cXG5tZWF0bG9hdmVzXFxubWVhdHBhY2tpbmcvTVxcbm1lYXR5L1RQUlxcbm1lY2NhL1NNXFxubWVjaGFuaWMvTVNcXG5tZWNoYW5pY2FsL1lcXG5tZWNoYW5pY3MvTVxcbm1lY2hhbmlzbS9TTVxcbm1lY2hhbmlzdGljXFxubWVjaGFuaXN0aWNhbGx5XFxubWVjaGFuaXphdGlvbi9NXFxubWVjaGFuaXplL0RTR1xcbm1lZGFsL1NNXFxubWVkYWxpc3QvTVNcXG5tZWRhbGxpb24vU01cXG5tZWRkbGUvWkdEUlNcXG5tZWRkbGVyL01cXG5tZWRkbGVzb21lXFxubWVkaWEvU01cXG5tZWRpYWwvQVlcXG5tZWRpYW4vTVNcXG5tZWRpYXRlL0FEU0dOXFxubWVkaWF0ZWQvVVxcbm1lZGlhdGlvbi9BTVxcbm1lZGlhdG9yL01TXFxubWVkaWMvU01cXG5tZWRpY2FpZC9NXFxubWVkaWNhbC9TTVlcXG5tZWRpY2FtZW50L01cXG5tZWRpY2FyZS9NXFxubWVkaWNhdGUvR05YRFNcXG5tZWRpY2F0aW9uL01cXG5tZWRpY2luYWwvWVxcbm1lZGljaW5lL01TXFxubWVkaWNvL01TXFxubWVkaWV2YWxcXG5tZWRpZXZhbGlzdC9NU1xcbm1lZGlvY3JlXFxubWVkaW9jcml0eS9TTVxcbm1lZGl0YXRlL0RTR05WWFxcbm1lZGl0YXRpb24vTVxcbm1lZGl0YXRpdmUvWVxcbm1lZGl1bS9NU1xcbm1lZGxleS9NU1xcbm1lZHVsbGEvU01cXG5tZWR1c2FcXG5tZWR1c2FlXFxubWVlZC9NXFxubWVlay9SWVBUXFxubWVla25lc3MvTVxcbm1lZXJzY2hhdW0vU01cXG5tZWV0L01KU0dcXG5tZWV0aW5nL01cXG5tZWV0aW5naG91c2UvU01cXG5tZWV0dXAvTVNcXG5tZWcvU1xcbm1lZ2FcXG5tZWdhYml0L1NNXFxubWVnYWJ1Y2tzL01cXG5tZWdhYnl0ZS9NU1xcbm1lZ2FjaHVyY2gvTVNcXG5tZWdhY3ljbGUvU01cXG5tZWdhZGVhdGgvTVxcbm1lZ2FkZWF0aHNcXG5tZWdhZ3JhbS9TXFxubWVnYWhlcnR6L01cXG5tZWdham91bGUvU1xcbm1lZ2FsaXRoL01cXG5tZWdhbGl0aGljXFxubWVnYWxpdGhzXFxubWVnYWxvbWFuaWEvTVxcbm1lZ2Fsb21hbmlhYy9TTVxcbm1lZ2Fsb3BvbGlzL01TXFxubWVnYW1ldGVyL1NcXG5tZWdhcGFzY2FsL1NcXG5tZWdhcGhvbmUvRFNNR1xcbm1lZ2FwaXhlbC9TTVxcbm1lZ2FzdGFyL1NcXG5tZWdhdG9uL1NNXFxubWVnYXdhdHQvTVNcXG5tZWhcXG5tZWlvc2lzL01cXG5tZWlvdGljXFxubWVsYW1pbmUvTVxcbm1lbGFuY2hvbGlhL01cXG5tZWxhbmNob2xpYy9TXFxubWVsYW5jaG9seS9NXFxubWVsYW5nZS9NU1xcbm1lbGFuaW4vTVxcbm1lbGFub21hL1NNXFxubWVsZC9NRFNHXFxubWVsZWUvU01cXG5tZWxpb3JhdGUvR05WRFNcXG5tZWxpb3JhdGlvbi9NXFxubWVsbGlmbHVvdXMvUFlcXG5tZWxsaWZsdW91c25lc3MvTVxcbm1lbGxvdy9QVEdEUllTXFxubWVsbG93bmVzcy9NXFxubWVsb2RpY1xcbm1lbG9kaWNhbGx5XFxubWVsb2Rpb3VzL1lQXFxubWVsb2Rpb3VzbmVzcy9NXFxubWVsb2RyYW1hL01TXFxubWVsb2RyYW1hdGljL1NcXG5tZWxvZHJhbWF0aWNhbGx5XFxubWVsb2RyYW1hdGljcy9NXFxubWVsb2R5L1NNXFxubWVsb24vU01cXG5tZWx0J3NcXG5tZWx0L0FEU0dcXG5tZWx0ZG93bi9TTVxcbm1lbWJlcidzXFxubWVtYmVyL0VBU1xcbm1lbWJlcnNoaXAvU01cXG5tZW1icmFuZS9TTVxcbm1lbWJyYW5vdXNcXG5tZW1lL01TXFxubWVtZW50by9NU1xcbm1lbW8vTVNcXG5tZW1vaXIvTVNcXG5tZW1vcmFiaWxpYS9NXFxubWVtb3JhYmlsaXR5L01cXG5tZW1vcmFibGUvVVxcbm1lbW9yYWJseVxcbm1lbW9yYW5kdW0vTVNcXG5tZW1vcmlhbC9TTVxcbm1lbW9yaWFsaXplL0RTR1xcbm1lbW9yaXphdGlvbi9NXFxubWVtb3JpemUvRFNHXFxubWVtb3J5L1NNXFxubWVtc2FoaWIvU1xcbm1lbi9NXFxubWVuYWNlL01HRFNcXG5tZW5hY2luZy9ZXFxubWVuYWdlL01TXFxubWVuYWdlcmllL01TXFxubWVuZC9NRFJTWkdcXG5tZW5kYWNpb3VzL1lcXG5tZW5kYWNpdHkvTVxcbm1lbmRlbGV2aXVtL01cXG5tZW5kZXIvTVxcbm1lbmRpY2FuY3kvTVxcbm1lbmRpY2FudC9TTVxcbm1lbmRpbmcvTVxcbm1lbmZvbGsvTVNcXG5tZW5mb2xrcy9NXFxubWVuaGFkZW4vTVxcbm1lbmlhbC9NWVNcXG5tZW5pbmdlYWxcXG5tZW5pbmdlc1xcbm1lbmluZ2l0aXMvTVxcbm1lbmlueC9NXFxubWVuaXNjaVxcbm1lbmlzY3VzL01cXG5tZW5vcGF1c2FsXFxubWVub3BhdXNlL01cXG5tZW5vcmFoL01cXG5tZW5vcmFoc1xcbm1lbnNjaC9NU1xcbm1lbnNlcnZhbnRzXFxubWVuc2VzL01cXG5tZW5zdHJ1YWxcXG5tZW5zdHJ1YXRlL0dORFNcXG5tZW5zdHJ1YXRpb24vTVxcbm1lbnN1cmFibGVcXG5tZW5zdXJhdGlvbi9NXFxubWVuc3dlYXIvTVxcbm1lbnRhbC9ZXFxubWVudGFsaXN0L1NNXFxubWVudGFsaXR5L1NNXFxubWVudGhvbC9NXFxubWVudGhvbGF0ZWRcXG5tZW50aW9uL0dTTURcXG5tZW50aW9uZWQvVVxcbm1lbnRvci9NRFNHXFxubWVudG9yc2hpcFxcbm1lbnUvTVNcXG5tZW93L01EU0dcXG5tZXJjYW50aWxlXFxubWVyY2FudGlsaXNtL01cXG5tZXJjZW5hcnkvU01cXG5tZXJjZXIvTVNcXG5tZXJjZXJpemUvR0RTXFxubWVyY2hhbmRpc2UvTVpHRFJTXFxubWVyY2hhbmRpc2VyL01cXG5tZXJjaGFuZGlzaW5nL01cXG5tZXJjaGFudC9NQlNcXG5tZXJjaGFudG1hbi9NXFxubWVyY2hhbnRtZW5cXG5tZXJjaWZ1bC9VWVxcbm1lcmNpbGVzcy9QWVxcbm1lcmNpbGVzc25lc3MvTVxcbm1lcmN1cmlhbC9ZXFxubWVyY3VyaWNcXG5tZXJjdXJ5L01cXG5tZXJjeS9TTVxcbm1lcmUvTVlUU1xcbm1lcmV0cmljaW91cy9ZUFxcbm1lcmV0cmljaW91c25lc3MvTVxcbm1lcmdhbnNlci9NU1xcbm1lcmdlL0RSU1pHXFxubWVyZ2VyL01cXG5tZXJpZGlhbi9NU1xcbm1lcmluZ3VlL01TXFxubWVyaW5vL01TXFxubWVyaXQvQ1NNXFxubWVyaXRlZC9VXFxubWVyaXRpbmdcXG5tZXJpdGxlc3NcXG5tZXJpdG9jcmFjeS9TTVxcbm1lcml0b2NyYXRpY1xcbm1lcml0b3Jpb3VzL1BZXFxubWVyaXRvcmlvdXNuZXNzL01cXG5tZXJtYWlkL1NNXFxubWVybWFuL01cXG5tZXJtZW5cXG5tZXJyaWx5XFxubWVycmltZW50L01cXG5tZXJyaW5lc3MvTVxcbm1lcnJ5L1RSUFxcbm1lcnJ5bWFrZXIvTVNcXG5tZXJyeW1ha2luZy9NXFxubWVzYS9NU1xcbm1lc2NhbC9NU1xcbm1lc2NhbGluXFxubWVzY2FsaW5lL01cXG5tZXNkYW1lc1xcbm1lc2RlbW9pc2VsbGVzXFxubWVzaC9NRFNHXFxubWVzbWVyaWNcXG5tZXNtZXJpc20vTVxcbm1lc21lcml6ZS9aR0RSU1xcbm1lc21lcml6ZXIvTVxcbm1lc29tb3JwaC9NXFxubWVzb21vcnBoc1xcbm1lc29uL1NNXFxubWVzb3NwaGVyZS9TTVxcbm1lc3F1aXRlL1NNXFxubWVzcy9NRFNHXFxubWVzc2FnZS9NR0RTXFxubWVzc2VpZ25ldXJzXFxubWVzc2VuZ2VyL1NNXFxubWVzc2lhaC9NXFxubWVzc2lhaHNcXG5tZXNzaWFuaWNcXG5tZXNzaWV1cnNcXG5tZXNzaWx5XFxubWVzc2luZXNzL01cXG5tZXNzbWF0ZS9TTVxcbm1lc3N5L1BUUlxcbm1lc3Rpem8vTVNcXG5tZXRcXG5tZXRhXFxubWV0YWJvbGljXFxubWV0YWJvbGljYWxseVxcbm1ldGFib2xpc20vU01cXG5tZXRhYm9saXRlL1NNXFxubWV0YWJvbGl6ZS9EU0dcXG5tZXRhY2FycGFsL1NNXFxubWV0YWNhcnBpXFxubWV0YWNhcnB1cy9NXFxubWV0YWRhdGFcXG5tZXRhbC9TTURcXG5tZXRhbGFuZ3VhZ2UvTVNcXG5tZXRhbGxpY1xcbm1ldGFsbHVyZ2ljXFxubWV0YWxsdXJnaWNhbFxcbm1ldGFsbHVyZ2lzdC9NU1xcbm1ldGFsbHVyZ3kvTVxcbm1ldGFsd29yay9NUlpHXFxubWV0YWx3b3JrZXIvTVxcbm1ldGFsd29ya2luZy9NXFxubWV0YW1vcnBoaWNcXG5tZXRhbW9ycGhpc20vTVxcbm1ldGFtb3JwaG9zZS9HRFNcXG5tZXRhbW9ycGhvc2lzL01cXG5tZXRhcGhvci9NU1xcbm1ldGFwaG9yaWNcXG5tZXRhcGhvcmljYWwvWVxcbm1ldGFwaHlzaWNhbC9ZXFxubWV0YXBoeXNpY3MvTVxcbm1ldGFzdGFzZXNcXG5tZXRhc3Rhc2lzL01cXG5tZXRhc3Rhc2l6ZS9EU0dcXG5tZXRhc3RhdGljXFxubWV0YXRhcnNhbC9NU1xcbm1ldGF0YXJzaVxcbm1ldGF0YXJzdXMvTVxcbm1ldGF0aGVzZXNcXG5tZXRhdGhlc2lzL01cXG5tZXRlL01aR0RSU1xcbm1ldGVtcHN5Y2hvc2VzXFxubWV0ZW1wc3ljaG9zaXMvTVxcbm1ldGVvci9NU1xcbm1ldGVvcmljXFxubWV0ZW9yaWNhbGx5XFxubWV0ZW9yaXRlL1NNXFxubWV0ZW9yb2lkL1NNXFxubWV0ZW9yb2xvZ2ljXFxubWV0ZW9yb2xvZ2ljYWxcXG5tZXRlb3JvbG9naXN0L1NNXFxubWV0ZW9yb2xvZ3kvTVxcbm1ldGVyL0dNRFxcbm1ldGZvcm1pblxcbm1ldGhhZG9uZS9NXFxubWV0aGFtcGhldGFtaW5lL01cXG5tZXRoYW5lL01cXG5tZXRoYW5vbC9NXFxubWV0aGlua3NcXG5tZXRob2QvTVNcXG5tZXRob2RpY2FsL1lQXFxubWV0aG9kaWNhbG5lc3MvTVxcbm1ldGhvZG9sb2dpY2FsL1lcXG5tZXRob2RvbG9neS9TTVxcbm1ldGhvdHJleGF0ZVxcbm1ldGhvdWdodFxcbm1ldGhzXFxubWV0aHlsL01cXG5tZXRpY3Vsb3VzL1lQXFxubWV0aWN1bG91c25lc3MvTVxcbm1ldGllci9NU1xcbm1ldHJpYy9TXFxubWV0cmljYWwvWVxcbm1ldHJpY2F0ZS9HTkRTXFxubWV0cmljYXRpb24vTVxcbm1ldHJpY2l6ZS9HRFNcXG5tZXRyby9TTVxcbm1ldHJvbm9tZS9NU1xcbm1ldHJvcG9saXMvTVNcXG5tZXRyb3BvbGl0YW5cXG5tZXR0bGUvTVxcbm1ldHRsZXNvbWVcXG5tZXcvU0dNRFxcbm1ld2wvRFNHXFxubWV3cy9NXFxubWV6emFuaW5lL01TXFxubWV6em8vU01cXG5tZmdcXG5tZnIvU1xcbm1nXFxubWdyXFxubWkvTU5YXFxubWlhc21hL01TXFxubWljL1NcXG5taWNhL01cXG5taWNlXFxubWljay9TXFxubWlja2V5L01TXFxubWljcm8vU01cXG5taWNyb2FnZ3Jlc3Npb24vU01cXG5taWNyb2JlL01TXFxubWljcm9iaWFsXFxubWljcm9iaW9sb2dpY2FsXFxubWljcm9iaW9sb2dpc3QvTVNcXG5taWNyb2Jpb2xvZ3kvTVxcbm1pY3JvYnJld2VyeS9TTVxcbm1pY3JvY2hpcC9NU1xcbm1pY3JvY2lyY3VpdC9TTVxcbm1pY3JvY29kZVxcbm1pY3JvY29tcHV0ZXIvTVNcXG5taWNyb2Nvc20vTVNcXG5taWNyb2Nvc21pY1xcbm1pY3JvZG90L1NNXFxubWljcm9lY29ub21pY3MvTVxcbm1pY3JvZWxlY3Ryb25pYy9TXFxubWljcm9lbGVjdHJvbmljcy9NXFxubWljcm9maWJlci9NU1xcbm1pY3JvZmljaGUvTVxcbm1pY3JvZmlsbS9HTURTXFxubWljcm9maW5hbmNlXFxubWljcm9mbG9wcGllc1xcbm1pY3JvZ3Jvb3ZlL1NNXFxubWljcm9saWdodC9NU1xcbm1pY3JvbG9hbi9NU1xcbm1pY3JvbWFuYWdlL1pHRFJTTFxcbm1pY3JvbWFuYWdlbWVudC9NXFxubWljcm9tYW5hZ2VyL01cXG5taWNyb21ldGVvcml0ZS9TTVxcbm1pY3JvbWV0ZXIvTVNcXG5taWNyb24vTVNcXG5taWNyb29yZ2FuaXNtL01TXFxubWljcm9waG9uZS9TTVxcbm1pY3JvcGxhc3RpY3NcXG5taWNyb3Byb2Nlc3Nvci9NU1xcbm1pY3Jvc2NvcGUvU01cXG5taWNyb3Njb3BpY1xcbm1pY3Jvc2NvcGljYWwvWVxcbm1pY3Jvc2NvcHkvTVxcbm1pY3Jvc2Vjb25kL01TXFxubWljcm9zdXJnZXJ5L01cXG5taWNyb3dhdmUvRFNNR0JcXG5taWNyb3dhdmVhYmxlXFxubWlkXFxubWlkYWlyL01cXG5taWRkYXkvTVxcbm1pZGRlbi9NU1xcbm1pZGRsZS9NR1NcXG5taWRkbGVicm93L1NNXFxubWlkZGxlbWFuL01cXG5taWRkbGVtZW5cXG5taWRkbGVtb3N0XFxubWlkZGxld2VpZ2h0L01TXFxubWlkZHkvU01cXG5taWRmaWVsZC9SWlxcbm1pZGdlL1NNXFxubWlkZ2V0L01TXFxubWlkaS9NU1xcbm1pZGxhbmQvTVNcXG5taWRsaWZlL01cXG5taWRtb3N0XFxubWlkbmlnaHQvTVxcbm1pZHBvaW50L01TXFxubWlkcmliL01TXFxubWlkcmlmZi9NU1xcbm1pZHNlY3Rpb24vTVNcXG5taWRzaGlwbWFuL01cXG5taWRzaGlwbWVuXFxubWlkc2hpcHNcXG5taWRzaXplXFxubWlkc3QvTVxcbm1pZHN0cmVhbS9NXFxubWlkc3VtbWVyL01cXG5taWR0ZXJtL01TXFxubWlkdG93bi9NXFxubWlkd2F5L01TXFxubWlkd2Vlay9NU1xcbm1pZHdpZmUvTUdEU1xcbm1pZHdpZmVyeS9TTVxcbm1pZHdpbnRlci9NXFxubWlkd2l2ZXNcXG5taWR5ZWFyL01TXFxubWllbi9NXFxubWlmZi9EU0dcXG5taWdodCd2ZVxcbm1pZ2h0L01cXG5taWdodGlseVxcbm1pZ2h0aW5lc3MvTVxcbm1pZ2h0bid0XFxubWlnaHR5L1RSUFxcbm1pZ25vbmV0dGUvU01cXG5taWdyYWluZS9NU1xcbm1pZ3JhbnQvTVNcXG5taWdyYXRlL0FHRFNcXG5taWdyYXRpb24vU01cXG5taWdyYXRvcnlcXG5taWthZG8vTVNcXG5taWtlL01HRFNcXG5taWwvU1pNUlxcbm1pbGFkeS9TTVxcbm1pbGNoXFxubWlsZC9NUllUUFxcbm1pbGRldy9TTURHXFxubWlsZG5lc3MvTVxcbm1pbGUvTVNcXG5taWxlYWdlL1NNXFxubWlsZXBvc3QvTVNcXG5taWxlci9NXFxubWlsZXN0b25lL01TXFxubWlsZi9NU1xcbm1pbGlldS9TTVxcbm1pbGl0YW5jeS9NXFxubWlsaXRhbnQvTVlTXFxubWlsaXRhcmlseVxcbm1pbGl0YXJpc20vTVxcbm1pbGl0YXJpc3QvU01cXG5taWxpdGFyaXN0aWNcXG5taWxpdGFyaXphdGlvbi9DTVxcbm1pbGl0YXJpemUvQ0RTR1xcbm1pbGl0YXJ5L01cXG5taWxpdGF0ZS9HRFNcXG5taWxpdGlhL1NNXFxubWlsaXRpYW1hbi9NXFxubWlsaXRpYW1lblxcbm1pbGsvTURSU1pHXFxubWlsa2VyL01cXG5taWxraW5lc3MvTVxcbm1pbGttYWlkL01TXFxubWlsa21hbi9NXFxubWlsa21lblxcbm1pbGtzaGFrZS9TTVxcbm1pbGtzb3AvTVNcXG5taWxrd2VlZC9TTVxcbm1pbGt5L1JUUFxcbm1pbGwvTURSU1pHSlxcbm1pbGxhZ2UvTVxcbm1pbGxlbm5pYVxcbm1pbGxlbm5pYWwvTVxcbm1pbGxlbm5pdW0vTVNcXG5taWxsZXIvTVxcbm1pbGxldC9NXFxubWlsbGlhcmQvTVNcXG5taWxsaWJhci9NU1xcbm1pbGxpZ3JhbS9NU1xcbm1pbGxpbGl0ZXIvTVNcXG5taWxsaW1ldGVyL01TXFxubWlsbGluZXIvTVNcXG5taWxsaW5lcnkvTVxcbm1pbGxpbmcvTVxcbm1pbGxpb24vSFNNXFxubWlsbGlvbmFpcmUvU01cXG5taWxsaW9uYWlyZXNzL1NcXG5taWxsaW9udGgvTVxcbm1pbGxpb250aHNcXG5taWxsaXBlZGUvU01cXG5taWxsaXNlY29uZC9TTVxcbm1pbGxwb25kL1NNXFxubWlsbHJhY2UvU01cXG5taWxsc3RvbmUvU01cXG5taWxsc3RyZWFtL01TXFxubWlsbHdyaWdodC9TTVxcbm1pbG9tZXRlci9TXFxubWlscXVldG9hc3QvU01cXG5taWx0L01EU0dcXG5taW1lL01HRFNcXG5taW1lb2dyYXBoL0dNRFxcbm1pbWVvZ3JhcGhzXFxubWltZXRpY1xcbm1pbWljL1NNXFxubWltaWNrZWRcXG5taW1pY2tlci9TTVxcbm1pbWlja2luZ1xcbm1pbWljcnkvU01cXG5taW1vc2EvU01cXG5taW5cXG5taW5hcmV0L01TXFxubWluYXRvcnlcXG5taW5jZS9EUlNNWkdcXG5taW5jZW1lYXQvTVxcbm1pbmNlci9NXFxubWluZCdzXFxubWluZC9BRFJTWkdcXG5taW5kYm9nZ2xpbmdseVxcbm1pbmRlZC9QXFxubWluZGZ1bC9ZUFxcbm1pbmRmdWxuZXNzL01cXG5taW5kbGVzcy9ZUFxcbm1pbmRsZXNzbmVzcy9NXFxubWluZHNldC9NU1xcbm1pbmUvTVpHTkRSU1hcXG5taW5lZmllbGQvU01cXG5taW5lci9NXFxubWluZXJhbC9NU1xcbm1pbmVyYWxvZ2ljYWxcXG5taW5lcmFsb2dpc3QvTVNcXG5taW5lcmFsb2d5L01cXG5taW5lc3Ryb25lL01cXG5taW5lc3dlZXBlci9TTVxcbm1pbmdsZS9EU0dcXG5taW5neVxcbm1pbmkvTVNcXG5taW5pYXR1cmUvTVNcXG5taW5pYXR1cmlzdC9NU1xcbm1pbmlhdHVyaXphdGlvbi9NXFxubWluaWF0dXJpemUvR0RTXFxubWluaWJhci9TXFxubWluaWJpa2UvU01cXG5taW5pYnVzL01TXFxubWluaWNhYi9TXFxubWluaWNhbS9NU1xcbm1pbmljb21wdXRlci9TTVxcbm1pbmlmbG9wcGllc1xcbm1pbmltL1NNXFxubWluaW1hXFxubWluaW1hbC9ZXFxubWluaW1hbGlzbS9NXFxubWluaW1hbGlzdC9NU1xcbm1pbmltaXphdGlvbi9NXFxubWluaW1pemUvRFNHXFxubWluaW11bS9NU1xcbm1pbmluZy9NXFxubWluaW9uL01cXG5taW5pc2VyaWVzL01cXG5taW5pc2tpcnQvTVNcXG5taW5pc3Rlci9TR01EXFxubWluaXN0ZXJpYWxcXG5taW5pc3RyYW50L01TXFxubWluaXN0cmF0aW9uL01TXFxubWluaXN0cnkvU01cXG5taW5pdmFuL01TXFxubWluay9NU1xcbm1pbm5lc2luZ2VyL01TXFxubWlubm93L1NNXFxubWlub3IvU01ER1xcbm1pbm9yaXR5L1NNXFxubWlub3hpZGlsL01cXG5taW5zdGVyL01TXFxubWluc3RyZWwvU01cXG5taW5zdHJlbHN5L01cXG5taW50L01EUlNaR1xcbm1pbnRhZ2UvTVxcbm1pbnRlci9NXFxubWludHkvUlRcXG5taW51ZW5kL01TXFxubWludWV0L1NNXFxubWludXMvTVNcXG5taW51c2N1bGUvTVNcXG5taW51dGUvUERSU01ZVEdcXG5taW51dGVtYW4vTVxcbm1pbnV0ZW1lblxcbm1pbnV0ZW5lc3MvTVxcbm1pbnV0aWEvTVxcbm1pbnV0aWFlXFxubWlueC9NU1xcbm1pcmFjbGUvTVNcXG5taXJhY3Vsb3VzL1lcXG5taXJhZ2UvU01cXG5taXJlL01HRFNcXG5taXJyb3IvR1NNRFxcbm1pcnRoL01cXG5taXJ0aGZ1bC9QWVxcbm1pcnRoZnVsbmVzcy9NXFxubWlydGhsZXNzL1lcXG5taXJ5L1JUXFxubWlzYWRkcmVzcy9EU0dcXG5taXNhZHZlbnR1cmUvTVNcXG5taXNhbGlnbmVkXFxubWlzYWxpZ25tZW50L01cXG5taXNhbGxpYW5jZS9NU1xcbm1pc2FudGhyb3BlL1NNXFxubWlzYW50aHJvcGljXFxubWlzYW50aHJvcGljYWxseVxcbm1pc2FudGhyb3Bpc3QvTVNcXG5taXNhbnRocm9weS9NXFxubWlzYXBwbGljYXRpb24vTVxcbm1pc2FwcGx5L0RTR05YXFxubWlzYXBwcmVoZW5kL0dTRFxcbm1pc2FwcHJlaGVuc2lvbi9NU1xcbm1pc2FwcHJvcHJpYXRlL1hEU0dOXFxubWlzYXBwcm9wcmlhdGlvbi9NXFxubWlzYmVnb3R0ZW5cXG5taXNiZWhhdmUvR0RTXFxubWlzYmVoYXZpb3IvTVxcbm1pc2NcXG5taXNjYWxjdWxhdGUvRFNYR05cXG5taXNjYWxjdWxhdGlvbi9NXFxubWlzY2FsbC9EU0dcXG5taXNjYXJyaWFnZS9NU1xcbm1pc2NhcnJ5L0dEU1xcbm1pc2Nhc3QvU0dcXG5taXNjZWdlbmF0aW9uL01cXG5taXNjZWxsYW5lb3VzL1lcXG5taXNjZWxsYW55L1NNXFxubWlzY2hhbmNlL1NNXFxubWlzY2hpZWYvTVxcbm1pc2NoaWV2b3VzL1lQXFxubWlzY2hpZXZvdXNuZXNzL01cXG5taXNjaWJpbGl0eS9NXFxubWlzY2libGVcXG5taXNjbGFzc2lmaWVkXFxubWlzY29tbXVuaWNhdGlvbi9TXFxubWlzY29uY2VpdmUvR0RTXFxubWlzY29uY2VwdGlvbi9TTVxcbm1pc2NvbmR1Y3QvTURHU1xcbm1pc2NvbnN0cnVjdGlvbi9NU1xcbm1pc2NvbnN0cnVlL0dEU1xcbm1pc2NvdW50L01EU0dcXG5taXNjcmVhbnQvU01cXG5taXNjdWUvRFNNR1xcbm1pc2RlYWwvR01TXFxubWlzZGVhbHRcXG5taXNkZWVkL01TXFxubWlzZGVtZWFub3IvTVNcXG5taXNkaWFnbm9zZS9HRFNcXG5taXNkaWFnbm9zaXMvTVxcbm1pc2RpZFxcbm1pc2RpcmVjdC9TREdcXG5taXNkaXJlY3Rpb24vTVxcbm1pc2RvL0pHXFxubWlzZG9lc1xcbm1pc2RvaW5nL01cXG5taXNkb25lXFxubWlzZXIvU0JNWVxcbm1pc2VyYWJsZW5lc3MvTVxcbm1pc2VyYWJseVxcbm1pc2VybGluZXNzL01cXG5taXNlcnkvU01cXG5taXNmZWFzYW5jZS9NXFxubWlzZmVhdHVyZS9TXFxubWlzZmlsZS9HRFNcXG5taXNmaXJlL01HRFNcXG5taXNmaXQvU01cXG5taXNmaXR0ZWRcXG5taXNmaXR0aW5nXFxubWlzZm9ydHVuZS9TTVxcbm1pc2dpdmluZy9NU1xcbm1pc2dvdmVybi9TREdMXFxubWlzZ292ZXJubWVudC9NXFxubWlzZ3VpZGFuY2UvTVxcbm1pc2d1aWRlL0RTR1xcbm1pc2d1aWRlZC9ZXFxubWlzaGFuZGxlL0RTR1xcbm1pc2hhcC9TTVxcbm1pc2hlYXIvR1NcXG5taXNoZWFyZFxcbm1pc2hpdC9TXFxubWlzaGl0dGluZ1xcbm1pc2htYXNoL01TXFxubWlzaWRlbnRpZnkvR0RTXFxubWlzaW5mb3JtL0RHU1xcbm1pc2luZm9ybWF0aW9uL01cXG5taXNpbnRlcnByZXQvU0dEXFxubWlzaW50ZXJwcmV0YXRpb24vU01cXG5taXNqdWRnZS9EU0dcXG5taXNqdWRnbWVudC9TTVxcbm1pc2xhYmVsL0dTRFxcbm1pc2xhaWRcXG5taXNsYXkvR1NcXG5taXNsZWFkL0dTXFxubWlzbGVhZGluZy9ZXFxubWlzbGVkXFxubWlzbWFuYWdlL0xHRFNcXG5taXNtYW5hZ2VtZW50L01cXG5taXNtYXRjaC9HTURTXFxubWlzbmFtZS9HRFNcXG5taXNub21lci9NU1xcbm1pc29nYW1pc3QvTVNcXG5taXNvZ2FteS9NXFxubWlzb2d5bmlzdC9TTVxcbm1pc29neW5pc3RpY1xcbm1pc29neW5vdXNcXG5taXNvZ3lueS9NXFxubWlzcGxhY2UvR0xEU1xcbm1pc3BsYWNlbWVudC9NXFxubWlzcGxheS9HTURTXFxubWlzcHJpbnQvR01EU1xcbm1pc3ByaXNpb24vTVxcbm1pc3Byb25vdW5jZS9EU0dcXG5taXNwcm9udW5jaWF0aW9uL1NNXFxubWlzcXVvdGF0aW9uL01TXFxubWlzcXVvdGUvTUdEU1xcbm1pc3JlYWQvR0pTXFxubWlzcmVhZGluZy9NXFxubWlzcmVtZW1iZXIvR0RTXFxubWlzcmVwb3J0L01ER1NcXG5taXNyZXByZXNlbnQvR0RTXFxubWlzcmVwcmVzZW50YXRpb24vTVNcXG5taXNydWxlL01HRFNcXG5taXNzJ3NcXG5taXNzL0VEU0dWXFxubWlzc2FsL0VTTVxcbm1pc3NlZC9VXFxubWlzc2hhcGUvR0RTXFxubWlzc2hhcGVuXFxubWlzc2lsZS9NU1xcbm1pc3NpbGVyeS9NXFxubWlzc2lvbi9BTVNcXG5taXNzaW9uYXJ5L1NNXFxubWlzc2lvbmVyL1NNXFxubWlzc2l2ZS9NU1xcbm1pc3NwZWFrL0dTXFxubWlzc3BlbGwvR0RKU1xcbm1pc3NwZWxsaW5nL01cXG5taXNzcGVuZC9HU1xcbm1pc3NwZW50XFxubWlzc3Bva2VcXG5taXNzcG9rZW5cXG5taXNzdGF0ZS9HRFNMXFxubWlzc3RhdGVtZW50L1NNXFxubWlzc3RlcC9NU1xcbm1pc3N1cy9NU1xcbm1pc3Qnc1xcbm1pc3QvQ0RSU1pHXFxubWlzdGFrYWJsZS9VXFxubWlzdGFrZS9CTUdTXFxubWlzdGFrZW4vWVxcbm1pc3RlcidzXFxubWlzdGlseVxcbm1pc3RpbWUvR0RTXFxubWlzdGluZXNzL01cXG5taXN0bGV0b2UvTVxcbm1pc3Rvb2tcXG5taXN0cmFsL01TXFxubWlzdHJhbnNsYXRlZFxcbm1pc3RyZWF0L0xER1NcXG5taXN0cmVhdG1lbnQvTVxcbm1pc3RyZXNzL01TXFxubWlzdHJpYWwvTVNcXG5taXN0cnVzdC9NRFNHXFxubWlzdHJ1c3RmdWwvWVxcbm1pc3R5L1BSVFxcbm1pc3R5cGUvR1NcXG5taXN1bmRlcnN0YW5kL1NHSlxcbm1pc3VuZGVyc3RhbmRpbmcvTVxcbm1pc3VuZGVyc3Rvb2RcXG5taXN1c2UvRFNNR1xcbm1pdGUvTVpSU1xcbm1pdGVyL01ER1xcbm1pdGlnYXRlL0RTR05cXG5taXRpZ2F0ZWQvVVxcbm1pdGlnYXRpb24vTVxcbm1pdG9jaG9uZHJpYVxcbm1pdG9jaG9uZHJpYWxcXG5taXRvY2hvbmRyaW9uXFxubWl0b3Nlc1xcbm1pdG9zaXMvTVxcbm1pdG90aWNcXG5taXRyYWxcXG5taXR0L01OU1hcXG5taXR0ZW4vTVxcbm1pdHp2YWhcXG5taXgvWkdNRFJTQlxcbm1peGVkL1VcXG5taXhlci9NXFxubWl4dHVyZS9TTVxcbm1penplbi9NU1xcbm1penplbm1hc3QvU01cXG5ta2F5XFxubWtzXFxubWxcXG5tbVxcbm1uZW1vbmljL01TXFxubW5lbW9uaWNhbGx5XFxubW8vQ0tIU1xcbm1vYW4vTURSU1pHXFxubW9hbmVyL01cXG5tb2F0L01EU1xcbm1vYidzXFxubW9iL0NTXFxubW9iYmVkL0NcXG5tb2JiaW5nL0NcXG5tb2JpbGUvTVNcXG5tb2JpbGl0eS9NXFxubW9iaWxpemF0aW9uL0NNXFxubW9iaWxpemF0aW9uc1xcbm1vYmlsaXplL0NEU0dcXG5tb2JpbGl6ZXIvU01cXG5tb2JzdGVyL1NNXFxubW9jY2FzaW4vU01cXG5tb2NoYS9TTVxcbm1vY2svRFJTWkdcXG5tb2NrZXIvTVxcbm1vY2tlcnkvU01cXG5tb2NraW5nL1lcXG5tb2NraW5nYmlyZC9TTVxcbm1vZC9TVE1cXG5tb2RhbC9TTVxcbm1vZGFsaXR5L1NcXG5tb2RkZWRcXG5tb2RkaW5nXFxubW9kZS9NU1xcbm1vZGVsL1pHU0pNRFJcXG5tb2RlbGVyL01cXG5tb2RlbGluZy9NXFxubW9kZW0vU01cXG5tb2RlcmF0ZS9NWUdOUERTXFxubW9kZXJhdGVuZXNzL01cXG5tb2RlcmF0aW9uL01cXG5tb2RlcmF0b3IvU01cXG5tb2Rlcm4vTVlQU1xcbm1vZGVybmlzbS9NXFxubW9kZXJuaXN0L1NNXFxubW9kZXJuaXN0aWNcXG5tb2Rlcm5pdHkvTVxcbm1vZGVybml6YXRpb24vTVxcbm1vZGVybml6ZS9EUlNaR1xcbm1vZGVybml6ZXIvTVxcbm1vZGVybm5lc3MvTVxcbm1vZGVzdC9ZXFxubW9kZXN0eS9NXFxubW9kaWN1bS9TTVxcbm1vZGlmaWFibGVcXG5tb2RpZmljYXRpb24vTVxcbm1vZGlmaWVkL1VcXG5tb2RpZmllci9NXFxubW9kaWZ5L0RSU1haR05cXG5tb2Rpc2gvWVBcXG5tb2Rpc2huZXNzL01cXG5tb2R1bGFyXFxubW9kdWxhcml6YXRpb25cXG5tb2R1bGF0ZS9DR05EU1xcbm1vZHVsYXRpb24vQ01cXG5tb2R1bGF0aW9uc1xcbm1vZHVsYXRvci9NU1xcbm1vZHVsZS9NU1xcbm1vZHVsb1xcbm1vZHVsdXNcXG5tb2dneVxcbm1vZ3VsL1NNXFxubW9oYWlyL01cXG5tb2lcXG5tb2lldHkvU01cXG5tb2lsL01EU0dcXG5tb2lyZS9TTVxcbm1vaXN0L1hUUE5SWVxcbm1vaXN0ZW4vRFJaR1xcbm1vaXN0ZW5lci9NXFxubW9pc3RuZXNzL01cXG5tb2lzdHVyZS9NXFxubW9pc3R1cml6ZS9aR0RSU1xcbm1vaXN0dXJpemVyL01cXG5tb2xhci9TTVxcbm1vbGFzc2VzL01cXG5tb2xkL01EUkpTWkdcXG5tb2xkYm9hcmQvU01cXG5tb2xkZXIvR01EXFxubW9sZGluZXNzL01cXG5tb2xkaW5nL01cXG5tb2xkeS9UUFJcXG5tb2xlL01TXFxubW9sZWN1bGFyXFxubW9sZWN1bGFyaXR5L01cXG5tb2xlY3VsZS9TTVxcbm1vbGVoaWxsL1NNXFxubW9sZXNraW4vTVxcbm1vbGVzdC9EUlpHU1xcbm1vbGVzdGF0aW9uL01cXG5tb2xlc3RlZC9VXFxubW9sZXN0ZXIvTVxcbm1vbGwvTVNcXG5tb2xsaWZpY2F0aW9uL01cXG5tb2xsaWZ5L0RTTkdcXG5tb2xsdXNjYW5cXG5tb2xsdXNrL1NNXFxubW9sbHkvU01cXG5tb2xseWNvZGRsZS9EU01HXFxubW9sdC9NRE5SU1pHXFxubW9sdGVyL01cXG5tb2x5YmRlbnVtL01cXG5tb20vU01cXG5tb21lbnQvTVNcXG5tb21lbnRhXFxubW9tZW50YXJpbHlcXG5tb21lbnRhcmluZXNzL01cXG5tb21lbnRhcnkvUFxcbm1vbWVudG91cy9QWVxcbm1vbWVudG91c25lc3MvTVxcbm1vbWVudHVtL01cXG5tb21teS9TTVxcbm1vbmFkXFxubW9uYXJjaC9NXFxubW9uYXJjaGljXFxubW9uYXJjaGljYWxcXG5tb25hcmNoaXNtL01cXG5tb25hcmNoaXN0L01TXFxubW9uYXJjaGlzdGljXFxubW9uYXJjaHNcXG5tb25hcmNoeS9TTVxcbm1vbmFzdGVyeS9TTVxcbm1vbmFzdGljL01TXFxubW9uYXN0aWNhbC9ZXFxubW9uYXN0aWNpc20vTVxcbm1vbmF1cmFsXFxubW9uZXRhcmlseVxcbm1vbmV0YXJpc20vTVxcbm1vbmV0YXJpc3QvTVNcXG5tb25ldGFyeVxcbm1vbmV0aXphdGlvbi9DXFxubW9uZXRpemUvQ0dEU1xcbm1vbmV5L1NNRFxcbm1vbmV5YmFnL01TXFxubW9uZXlib3gvU1xcbm1vbmV5bGVuZGVyL1NNXFxubW9uZXltYWtlci9TTVxcbm1vbmV5bWFraW5nL01cXG5tb25nZXIvTURHU1xcbm1vbmdvbC9TXFxubW9uZ29saXNtL01cXG5tb25nb2xvaWQvTVNcXG5tb25nb29zZS9NU1xcbm1vbmdyZWwvU01cXG5tb25pZXNcXG5tb25pa2VyL1NNXFxubW9uaXNtL01cXG5tb25pc3QvTVNcXG5tb25pdGlvbi9TTVxcbm1vbml0b3IvU01ER1xcbm1vbml0b3J5XFxubW9uay9NU1xcbm1vbmtleS9NREdTXFxubW9ua2V5c2hpbmUvU01cXG5tb25raXNoXFxubW9ua3Nob29kL1NNXFxubW9uby9NXFxubW9ub2Nocm9tYXRpY1xcbm1vbm9jaHJvbWUvTVNcXG5tb25vY2xlL0RTTVxcbm1vbm9jbG9uYWxcXG5tb25vY290eWxlZG9uL1NNXFxubW9ub2NvdHlsZWRvbm91c1xcbm1vbm9jdWxhclxcbm1vbm9kaWNcXG5tb25vZGlzdC9TTVxcbm1vbm9keS9TTVxcbm1vbm9nYW1pc3QvTVNcXG5tb25vZ2Ftb3VzL1lcXG5tb25vZ2FteS9NXFxubW9ub2dyYW0vU01cXG5tb25vZ3JhbW1lZFxcbm1vbm9ncmFtbWluZ1xcbm1vbm9ncmFwaC9NXFxubW9ub2dyYXBoc1xcbm1vbm9saW5ndWFsL01TXFxubW9ub2xpdGgvTVxcbm1vbm9saXRoaWNcXG5tb25vbGl0aHNcXG5tb25vbG9naXN0L1NNXFxubW9ub2xvZ3VlL1NNXFxubW9ub21hbmlhL01cXG5tb25vbWFuaWFjL01TXFxubW9ub21hbmlhY2FsXFxubW9ub21lci9TTVxcbm1vbm9udWNsZW9zaXMvTVxcbm1vbm9waG9uaWNcXG5tb25vcGxhbmUvU01cXG5tb25vcG9saXN0L1NNXFxubW9ub3BvbGlzdGljXFxubW9ub3BvbGl6YXRpb24vTVxcbm1vbm9wb2xpemUvRFJTWkdcXG5tb25vcG9saXplci9NXFxubW9ub3BvbHkvU01cXG5tb25vcmFpbC9NU1xcbm1vbm9zeWxsYWJpY1xcbm1vbm9zeWxsYWJsZS9NU1xcbm1vbm90aGVpc20vTVxcbm1vbm90aGVpc3QvU01cXG5tb25vdGhlaXN0aWNcXG5tb25vdG9uZS9NU1xcbm1vbm90b25pY1xcbm1vbm90b25pY2FsbHlcXG5tb25vdG9ub3VzL1BZXFxubW9ub3Rvbm91c25lc3MvTVxcbm1vbm90b255L01cXG5tb25vdW5zYXR1cmF0ZWRcXG5tb25veGlkZS9NU1xcbm1vbnNlaWduZXVyL01cXG5tb25zaWV1ci9NXFxubW9uc2lnbm9yL1NNXFxubW9uc29vbi9TTVxcbm1vbnNvb25hbFxcbm1vbnN0ZXIvU01cXG5tb25zdHJhbmNlL0FTTVxcbm1vbnN0cm9zaXR5L1NNXFxubW9uc3Ryb3VzL1lcXG5tb250YWdlL1NNXFxubW9udGgvTVlcXG5tb250aGx5L1NNXFxubW9udGhzXFxubW9udW1lbnQvTVNcXG5tb251bWVudGFsL1lcXG5tb28vU0dNRFxcbm1vb2NoL1pHTURSU1xcbm1vb2NoZXIvTVxcbm1vb2QvTVNcXG5tb29kaWx5XFxubW9vZGluZXNzL01cXG5tb29keS9UUFJcXG5tb29uL01EU0dcXG5tb29uYmVhbS9NU1xcbm1vb25sZXNzXFxubW9vbmxpZ2h0L1NNRFJaR1xcbm1vb25saWdodGVyL01cXG5tb29ubGlnaHRpbmcvTVxcbm1vb25saXRcXG5tb29uc2NhcGUvU01cXG5tb29uc2hpbmUvTVpSU1xcbm1vb25zaGluZXIvTVxcbm1vb25zaG90L01TXFxubW9vbnN0b25lL01TXFxubW9vbnN0cnVja1xcbm1vb253YWxrL01TXFxubW9vci9NREpTR1xcbm1vb3JoZW4vU1xcbm1vb3JpbmcvTVxcbm1vb3JsYW5kL01TXFxubW9vc2UvTVxcbm1vb3QvRFNHXFxubW9wL1NaR01EUlxcbm1vcGUvTVNcXG5tb3BlZC9TTVxcbm1vcGVyL01cXG5tb3BleVxcbm1vcGllclxcbm1vcGllc3RcXG5tb3Bpc2hcXG5tb3BwZWRcXG5tb3BwZXQvTVNcXG5tb3BwaW5nXFxubW9yYWluZS9TTVxcbm1vcmFsL1NNWVxcbm1vcmFsZS9NXFxubW9yYWxpc21cXG5tb3JhbGlzdC9NU1xcbm1vcmFsaXN0aWNcXG5tb3JhbGlzdGljYWxseVxcbm1vcmFsaXRpZXNcXG5tb3JhbGl0eS9VTVxcbm1vcmFsaXphdGlvbi9DTVxcbm1vcmFsaXplL0NHRFNcXG5tb3JhbGl6ZXIvTVNcXG5tb3Jhc3MvTVNcXG5tb3JhdG9yaXVtL1NNXFxubW9yYXkvU01cXG5tb3JiaWQvWVBcXG5tb3JiaWRpdHkvTVxcbm1vcmJpZG5lc3MvTVxcbm1vcmRhbmN5L01cXG5tb3JkYW50L1NNWVxcbm1vcmUvTVNcXG5tb3JlaXNoXFxubW9yZWwvU01cXG5tb3Jlb3Zlclxcbm1vcmVzL01cXG5tb3JndWUvTVNcXG5tb3JpYnVuZFxcbm1vcm4vTUpTR1xcbm1vcm5pbmcvTVxcbm1vcm9jY28vTVxcbm1vcm9uL1NNXFxubW9yb25pY1xcbm1vcm9uaWNhbGx5XFxubW9yb3NlL1lQXFxubW9yb3NlbmVzcy9NXFxubW9ycGgvR0RcXG5tb3JwaGVtZS9NU1xcbm1vcnBoZW1pY1xcbm1vcnBoaWEvTVxcbm1vcnBoaW5lL01cXG5tb3JwaGluZy9NXFxubW9ycGhvbG9naWNhbFxcbm1vcnBob2xvZ3kvTVxcbm1vcnBoc1xcbm1vcnJvdy9NU1xcbm1vcnNlbC9NU1xcbm1vcnRhbC9NWVNcXG5tb3J0YWxpdHkvTVxcbm1vcnRhci9NRFNHXFxubW9ydGFyYm9hcmQvU01cXG5tb3J0Z2FnZSdzXFxubW9ydGdhZ2UvQUdEU1xcbm1vcnRnYWdlZS9NU1xcbm1vcnRnYWdvci9NU1xcbm1vcnRpY2lhbi9NU1xcbm1vcnRpZmljYXRpb24vTVxcbm1vcnRpZnkvTkdEU1xcbm1vcnRpc2UvRFNNR1xcbm1vcnR1YXJ5L1NNXFxubW9zYWljL01TXFxubW9zZXkvU0dEXFxubW9zaC9EU0dcXG5tb3NxdWUvTVNcXG5tb3NxdWl0by9NXFxubW9zcXVpdG9lc1xcbm1vc3MvTVNcXG5tb3NzYmFjay9TTVxcbm1vc3N5L1RSXFxubW9zdC9NWVxcbm1vdC9TTVxcbm1vdGUnc1xcbm1vdGUvS0NYU1ZOXFxubW90ZWwvU01cXG5tb3RldC9TTVxcbm1vdGgvTVxcbm1vdGhiYWxsL0dNRFNcXG5tb3RoZXIvTURZU0dcXG5tb3RoZXJib2FyZC9TTVxcbm1vdGhlcmZ1Y2tlci9NUyFcXG5tb3RoZXJmdWNraW5nLyFcXG5tb3RoZXJob29kL01cXG5tb3RoZXJsYW5kL01TXFxubW90aGVybGVzc1xcbm1vdGhlcmxpbmVzcy9NXFxubW90aHNcXG5tb3RpZi9TTVxcbm1vdGlsZS9TXFxubW90aWxpdHkvTVxcbm1vdGlvbi9LQ01cXG5tb3Rpb25lZFxcbm1vdGlvbmluZ1xcbm1vdGlvbmxlc3MvWVBcXG5tb3Rpb25sZXNzbmVzcy9NXFxubW90aXZhdGUvQ0RTR1xcbm1vdGl2YXRlZC9VXFxubW90aXZhdGlvbi9TTVxcbm1vdGl2YXRpb25hbFxcbm1vdGl2YXRvci9TTVxcbm1vdGl2ZS9NU1xcbm1vdGl2ZWxlc3NcXG5tb3RsZXkvTVNcXG5tb3RsaWVyXFxubW90bGllc3RcXG5tb3RvY3Jvc3MvTVNcXG5tb3Rvci9TR01EXFxubW90b3JiaWtlL01HRFNcXG5tb3RvcmJvYXQvTVNcXG5tb3RvcmNhZGUvTVNcXG5tb3RvcmNhci9TTVxcbm1vdG9yY3ljbGUvRFNNR1xcbm1vdG9yY3ljbGlzdC9NU1xcbm1vdG9yaXN0L1NNXFxubW90b3JpemF0aW9uL01cXG5tb3Rvcml6ZS9EU0dcXG5tb3Rvcm1hbi9NXFxubW90b3JtZW5cXG5tb3Rvcm1vdXRoL01cXG5tb3Rvcm1vdXRoc1xcbm1vdG9yd2F5L1NNXFxubW90dGxlL0dEU1xcbm1vdHRvL01cXG5tb3R0b2VzXFxubW91ZS9NU1xcbm1vdW5kL1NHTURcXG5tb3VudC9FQVNHTURcXG5tb3VudGFibGVcXG5tb3VudGFpbi9TTVxcbm1vdW50YWluZWVyL1NNREdcXG5tb3VudGFpbmVlcmluZy9NXFxubW91bnRhaW5vdXNcXG5tb3VudGFpbnNpZGUvU01cXG5tb3VudGFpbnRvcC9TTVxcbm1vdW50ZWJhbmsvTVNcXG5tb3VudGVkL1VcXG5tb3VudGVyL01TXFxubW91bnRpbmcvU01cXG5tb3Vybi9TWkdEUlxcbm1vdXJuZWQvVVxcbm1vdXJuZXIvTVxcbm1vdXJuZnVsL1lQXFxubW91cm5mdWxuZXNzL01cXG5tb3VybmluZy9NXFxubW91c2UvRFJTTVpHXFxubW91c2VyL01cXG5tb3VzZXRyYXAvU01cXG5tb3VzZXRyYXBwZWRcXG5tb3VzZXRyYXBwaW5nXFxubW91c2luZXNzL01cXG5tb3Vzc2FrYS9TXFxubW91c3NlL01HRFNcXG5tb3VzeS9QVFJcXG5tb3V0aC9HTURcXG5tb3V0aGZlZWxcXG5tb3V0aGZ1bC9NU1xcbm1vdXRoaW5lc3MvTVxcbm1vdXRocGllY2UvTVNcXG5tb3V0aHNcXG5tb3V0aHdhc2gvTVNcXG5tb3V0aHdhdGVyaW5nXFxubW91dGh5L1BUUlxcbm1vdXRvbi9NXFxubW92YWJsZS9TTVxcbm1vdmUvQU1aR0RSU0JcXG5tb3ZlZC9VXFxubW92ZW1lbnQvU01cXG5tb3Zlci9BTVxcbm1vdmllL1NNXFxubW92aWVnb2VyL1NNXFxubW92aW5nL1lcXG5tb3cvU1pHTURSXFxubW93ZXIvTVxcbm1veGllL01cXG5tb3p6YXJlbGxhL01cXG5tcFxcbm1wZ1xcbm1waFxcbm10XFxubXRnXFxubXRnZVxcbm11L1NNXFxubXVjaC9NXFxubXVjaWxhZ2UvTVxcbm11Y2lsYWdpbm91c1xcbm11Y2svTURTR1xcbm11Y2tyYWtlL0RSU1pHXFxubXVja3Jha2VyL01cXG5tdWNreS9UUlxcbm11Y291c1xcbm11Y3VzL01cXG5tdWQvTVxcbm11ZGRpbHlcXG5tdWRkaW5lc3MvTVxcbm11ZGRsZS9NR0RTXFxubXVkZGxlaGVhZGVkXFxubXVkZHkvUFRHRFJTXFxubXVkZmxhcC9TXFxubXVkZmxhdC9NU1xcbm11ZGd1YXJkL1NNXFxubXVkcGFjay9TXFxubXVkcm9vbS9NU1xcbm11ZHNsaWRlL01TXFxubXVkc2xpbmdlci9TTVxcbm11ZHNsaW5naW5nL01cXG5tdWVuc3Rlci9NXFxubXVlc2xpXFxubXVlenppbi9NU1xcbm11ZmYvTURTR1xcbm11ZmZpbi9NU1xcbm11ZmZsZS9aR0RSU1xcbm11ZmZsZXIvTVxcbm11ZnRpL1NNXFxubXVnL1NNXFxubXVnZnVsL01TXFxubXVnZ2VkXFxubXVnZ2VyL01TXFxubXVnZ2luZXNzL01cXG5tdWdnaW5nL01TXFxubXVnZ2luc1xcbm11Z2dsZS9NU1xcbm11Z2d5L1BUUlxcbm11Z3Nob3QvTVNcXG5tdWd3dW1wL01TXFxubXVqYWhlZGRpblxcbm11a2x1ay9NU1xcbm11bGF0dG8vTVxcbm11bGF0dG9lc1xcbm11bGJlcnJ5L1NNXFxubXVsY2gvR01EU1xcbm11bGN0L1NHTURcXG5tdWxlL01TXFxubXVsZXNraW5uZXIvTVNcXG5tdWxldGVlci9NU1xcbm11bGlzaC9QWVxcbm11bGlzaG5lc3MvTVxcbm11bGwvRFNHXFxubXVsbGFoL01cXG5tdWxsYWhzXFxubXVsbGVpbi9NXFxubXVsbGV0L01TXFxubXVsbGlnYW4vU01cXG5tdWxsaWdhdGF3bnkvTVxcbm11bGxpb24vU01EXFxubXVsdGlcXG5tdWx0aWNlbGx1bGFyXFxubXVsdGljaGFubmVsXFxubXVsdGljb2xvcmVkXFxubXVsdGljdWx0dXJhbFxcbm11bHRpY3VsdHVyYWxpc20vTVxcbm11bHRpZGltZW5zaW9uYWxcXG5tdWx0aWRpc2NpcGxpbmFyeVxcbm11bHRpZmFjZXRlZFxcbm11bHRpZmFtaWx5XFxubXVsdGlmYXJpb3VzL1BZXFxubXVsdGlmYXJpb3VzbmVzcy9NXFxubXVsdGlmb3JtXFxubXVsdGlncmFpblxcbm11bHRpbGF0ZXJhbC9ZXFxubXVsdGlsYXllcmVkXFxubXVsdGlsZXZlbFxcbm11bHRpbGluZ3VhbFxcbm11bHRpbGluZ3VhbGlzbS9NXFxubXVsdGltZWRpYS9NXFxubXVsdGltaWxsaW9uYWlyZS9TTVxcbm11bHRpbmF0aW9uYWwvU01cXG5tdWx0aXBhcnRcXG5tdWx0aXBhcnR5XFxubXVsdGlwbGF5ZXIvTVxcbm11bHRpcGxlL01TXFxubXVsdGlwbGV4L1pHTURSU1xcbm11bHRpcGxleGVyL01cXG5tdWx0aXBsaWNhbmQvTVNcXG5tdWx0aXBsaWNhdGlvbi9NXFxubXVsdGlwbGljYXRpdmVcXG5tdWx0aXBsaWNpdHkvU01cXG5tdWx0aXBsaWVyL01cXG5tdWx0aXBseS9OWkdEUlNYXFxubXVsdGlwcm9jZXNzaW5nXFxubXVsdGlwcm9jZXNzb3IvU01cXG5tdWx0aXB1cnBvc2VcXG5tdWx0aXJhY2lhbFxcbm11bHRpc3RhZ2VcXG5tdWx0aXN0b3J5XFxubXVsdGl0YXNrL0dTXFxubXVsdGl0YXNraW5nL01cXG5tdWx0aXR1ZGUvU01cXG5tdWx0aXR1ZGlub3VzXFxubXVsdGl2YXJpYXRlXFxubXVsdGl2ZXJzZS9TTVxcbm11bHRpdml0YW1pbi9NU1xcbm11bHRpeWVhclxcbm11bVxcbm11bWJsZS9NWkdEUlNcXG5tdW1ibGVyL01cXG5tdW1ibGV0eXBlZy9NXFxubXVtbWVyL01TXFxubXVtbWVyeS9NXFxubXVtbWlmaWNhdGlvbi9NXFxubXVtbWlmeS9HTkRTXFxubXVtbXkvU01cXG5tdW1wcy9NXFxubXVuXFxubXVuY2gvR0RTXFxubXVuY2hpZS9TXFxubXVuY2hpZXMvTVxcbm11bmNoa2luL1NNXFxubXVuZGFuZS9TWVxcbm11bmcvRFNHXFxubXVuaWNpcGFsL1NNWVxcbm11bmljaXBhbGl0eS9TTVxcbm11bmlmaWNlbmNlL01cXG5tdW5pZmljZW50L1lcXG5tdW5pdGlvbi9NREdTXFxubXVyYWwvU01cXG5tdXJhbGlzdC9TTVxcbm11cmRlci9aR01EUlNcXG5tdXJkZXJlci9NXFxubXVyZGVyZXNzL01TXFxubXVyZGVyb3VzL1lcXG5tdXJrL01TXFxubXVya2lseVxcbm11cmtpbmVzcy9NXFxubXVya3kvUFRSXFxubXVybXVyL1pHSk1EUlNcXG5tdXJtdXJlci9NXFxubXVybXVyaW5nL01cXG5tdXJtdXJvdXNcXG5tdXJyYWluL01cXG5tdXNjYXQvTVNcXG5tdXNjYXRlbC9TTVxcbm11c2NsZS9NR0RTXFxubXVzY2xlYm91bmRcXG5tdXNjbGVtYW5cXG5tdXNjbGVtZW5cXG5tdXNjbHlcXG5tdXNjdWxhci9ZXFxubXVzY3VsYXJpdHkvTVxcbm11c2N1bGF0dXJlL01cXG5tdXNjdWxvc2tlbGV0YWxcXG5tdXNlL01HRFNKXFxubXVzZXR0ZS9NU1xcbm11c2V1bS9NU1xcbm11c2gvTURSU1pHXFxubXVzaGluZXNzL01cXG5tdXNocm9vbS9HU01EXFxubXVzaHkvUFRSXFxubXVzaWMvU01cXG5tdXNpY2FsL01ZU1xcbm11c2ljYWxlL01TXFxubXVzaWNhbGl0eS9NXFxubXVzaWNpYW4vU01ZXFxubXVzaWNpYW5zaGlwL01cXG5tdXNpY29sb2dpY2FsXFxubXVzaWNvbG9naXN0L01TXFxubXVzaWNvbG9neS9NXFxubXVzaW5nL01ZXFxubXVzay9NXFxubXVza2VnL01TXFxubXVza2VsbHVuZ2UvTVNcXG5tdXNrZXQvTVNcXG5tdXNrZXRlZXIvTVNcXG5tdXNrZXRyeS9NXFxubXVza2llL01cXG5tdXNraW5lc3MvTVxcbm11c2ttZWxvbi9TTVxcbm11c2tveC9NTlxcbm11c2tyYXQvTVNcXG5tdXNreS9QVFJTXFxubXVzbGluL01cXG5tdXNzL01EU0dcXG5tdXNzZWwvTVNcXG5tdXNzeS9UUlxcbm11c3QndmVcXG5tdXN0L01SU1pcXG5tdXN0YWNoZS9NRFNcXG5tdXN0YWNoaW8vU01EXFxubXVzdGFuZy9NU1xcbm11c3RhcmQvTVxcbm11c3Rlci9HTURcXG5tdXN0aWx5XFxubXVzdGluZXNzL01cXG5tdXN0bid0XFxubXVzdHkvUFRSXFxubXV0YWJpbGl0eS9NXFxubXV0YWJseVxcbm11dGFnZW4vTVNcXG5tdXRhZ2VuaWNcXG5tdXRhbnQvTVNcXG5tdXRhdGUvWEdOVkRTXFxubXV0YXRpb24vTVxcbm11dGF0aW9uYWxcXG5tdXRlL01ZVEdEUlNQQlxcbm11dGVuZXNzL01cXG5tdXRpbGF0ZS9EU0dOWFxcbm11dGlsYXRpb24vTVxcbm11dGlsYXRvci9TTVxcbm11dGluZWVyL1NNXFxubXV0aW5vdXMvWVxcbm11dGlueS9HRFNNXFxubXV0dC9NU1xcbm11dHRlci9aR0pNRFJTXFxubXV0dGVyZXIvTVxcbm11dHRlcmluZy9NXFxubXV0dG9uL01cXG5tdXR0b25jaG9wcy9NXFxubXV0dG9ueVxcbm11dHVhbC9ZXFxubXV0dWFsaXR5L01cXG5tdXVtdXUvTVNcXG5tdXpha1xcbm11enppbHlcXG5tdXp6bGUvRFNNR1xcbm11enp5L1BcXG5teVxcbm15Y29sb2dpc3QvU01cXG5teWNvbG9neS9NXFxubXllbGl0aXMvTVxcbm15bmEvTVNcXG5teW9jYXJkaWFsXFxubXlvY2FyZGl1bVxcbm15b3BpYS9NXFxubXlvcGljXFxubXlvcGljYWxseVxcbm15cmlhZC9TTVxcbm15cm1pZG9uL01TXFxubXlycmgvTVxcbm15cnRsZS9TTVxcbm15c1xcbm15c2VsZlxcbm15c3RlcmlvdXMvUFlcXG5teXN0ZXJpb3VzbmVzcy9NXFxubXlzdGVyeS9TTVxcbm15c3RpYy9TTVxcbm15c3RpY2FsL1lcXG5teXN0aWNpc20vTVxcbm15c3RpZmljYXRpb24vQ01cXG5teXN0aWZ5L0NEU0dOXFxubXlzdGlxdWUvTVxcbm15dGgvTVxcbm15dGhpY1xcbm15dGhpY2FsXFxubXl0aG9sb2dpY2FsXFxubXl0aG9sb2dpc3QvU01cXG5teXRob2xvZ2l6ZS9EU0dcXG5teXRob2xvZ3kvU01cXG5teXRoc1xcbm15eG9tYXRvc2lzXFxubi9JS1RIXFxubmFhbi9TXFxubmFiL1NcXG5uYWJiZWRcXG5uYWJiaW5nXFxubmFib2IvU01cXG5uYWNlbGxlL1NNXFxubmFjaG8vU01cXG5uYWNyZS9NXFxubmFjcmVvdXNcXG5uYWRpci9TTVxcbm5hZVxcbm5hZmYvUlRcXG5uYWcvU01cXG5uYWdnZWRcXG5uYWdnZXIvTVNcXG5uYWdnaW5nXFxubmFnd2FyZVxcbm5haFxcbm5haWFkL1NNXFxubmFpZi9NU1xcbm5haWwvTURTR1xcbm5haWxicnVzaC9NU1xcbm5haXZlL1JZVFxcbm5haXZldGUvTVxcbm5haXZldHkvTVxcbm5ha2VkL1BZXFxubmFrZWRuZXNzL01cXG5uYW1lJ3NcXG5uYW1lL0FHRFNcXG5uYW1lYWJsZS9VXFxubmFtZWQvVVxcbm5hbWVsZXNzL1lcXG5uYW1lbHlcXG5uYW1lcGxhdGUvTVNcXG5uYW1lc2FrZS9TTVxcbm5hbm55L1NNXFxubmFub2JvdC9TXFxubmFub21ldGVyL1NcXG5uYW5vc2Vjb25kL1NNXFxubmFub3RlY2hub2xvZ3kvU01cXG5uYW5vdHViZVxcbm5hcC9TTVxcbm5hcGFsbS9NRFNHXFxubmFwZS9NU1xcbm5hcGh0aGEvTVxcbm5hcGh0aGFsZW5lL01cXG5uYXBraW4vTVNcXG5uYXBsZXNzXFxubmFwb2xlb24vU01cXG5uYXBwZWRcXG5uYXBwZXIvTVNcXG5uYXBwaW5nXFxubmFwcHkvVFJTTVxcbm5hcmMvTVNcXG5uYXJjaXNzaXNtL01cXG5uYXJjaXNzaXN0L01TXFxubmFyY2lzc2lzdGljXFxubmFyY2lzc3VzL01cXG5uYXJjb2xlcHN5L01cXG5uYXJjb2xlcHRpY1xcbm5hcmNvc2VzXFxubmFyY29zaXMvTVxcbm5hcmNvdGljL1NNXFxubmFyY290aXphdGlvbi9NXFxubmFyY290aXplL0dEU1xcbm5hcmtcXG5uYXJreVxcbm5hcnJhdGUvR05WRFNYXFxubmFycmF0aW9uL01cXG5uYXJyYXRpdmUvU01cXG5uYXJyYXRvci9TTVxcbm5hcnJvdy9QVEdNRFJZU1xcbm5hcnJvd25lc3MvTVxcbm5hcndoYWwvTVNcXG5uYXJ5XFxubmFzYWwvU01ZXFxubmFzYWxpdHkvTVxcbm5hc2FsaXphdGlvbi9NXFxubmFzYWxpemUvRFNHXFxubmFzY2VuY2UvQU1cXG5uYXNjZW50L0FcXG5uYXN0aWx5XFxubmFzdGluZXNzL01cXG5uYXN0dXJ0aXVtL1NNXFxubmFzdHkvUFRSXFxubmF0YWxcXG5uYXRjaFxcbm5hdGlvbi9NU1xcbm5hdGlvbmFsL01ZU1xcbm5hdGlvbmFsaXNtL01cXG5uYXRpb25hbGlzdC9TTVxcbm5hdGlvbmFsaXN0aWNcXG5uYXRpb25hbGlzdGljYWxseVxcbm5hdGlvbmFsaXR5L1NNXFxubmF0aW9uYWxpemF0aW9uL01TXFxubmF0aW9uYWxpemUvQ0RTR1xcbm5hdGlvbmhvb2QvTVxcbm5hdGlvbndpZGVcXG5uYXRpdmUvTVNcXG5uYXRpdml0eS9TTVxcbm5hdGxcXG5uYXR0ZXIvR01EU1xcbm5hdHRpbHlcXG5uYXR0aW5lc3MvTVxcbm5hdHR5L1BUUlxcbm5hdHVyYWwnc1xcbm5hdHVyYWwvVVBZXFxubmF0dXJhbGlzbS9NXFxubmF0dXJhbGlzdC9TTVxcbm5hdHVyYWxpc3RpY1xcbm5hdHVyYWxpemF0aW9uL01cXG5uYXR1cmFsaXplL0RTR1xcbm5hdHVyYWxuZXNzL1VNXFxubmF0dXJhbHNcXG5uYXR1cmUnc1xcbm5hdHVyZS9DU1xcbm5hdHVyaXNtXFxubmF0dXJpc3QvU1xcbm5hdWdodC9NU1xcbm5hdWdodGlseVxcbm5hdWdodGluZXNzL01cXG5uYXVnaHR5L1BUUlxcbm5hdXNlYS9NXFxubmF1c2VhbVxcbm5hdXNlYXRlL0dEU1xcbm5hdXNlYXRpbmcvWVxcbm5hdXNlb3VzL1BZXFxubmF1c2VvdXNuZXNzL01cXG5uYXV0aWNhbC9ZXFxubmF1dGlsdXMvTVNcXG5uYXZhbFxcbm5hdmUvTVNcXG5uYXZlbC9TTVxcbm5hdmlnYWJpbGl0eS9NXFxubmF2aWdhYmxlXFxubmF2aWdhdGUvRFNHTlxcbm5hdmlnYXRpb24vTVxcbm5hdmlnYXRpb25hbFxcbm5hdmlnYXRvci9NU1xcbm5hdnZ5L1NcXG5uYXZ5L1NNXFxubmF5L1NNXFxubmF5c2F5ZXIvTVNcXG5uZSdlclxcbm5lYW5kZXJ0aGFsL01TXFxubmVhcC9NU1xcbm5lYXIvRFJZU1BUR1xcbm5lYXJieVxcbm5lYXJuZXNzL01cXG5uZWFyc2hvcmVcXG5uZWFyc2lkZVxcbm5lYXJzaWdodGVkL1lQXFxubmVhcnNpZ2h0ZWRuZXNzL01cXG5uZWF0L05SWVBYVFxcbm5lYXRlbi9HRFxcbm5lYXRoXFxubmVhdG5lc3MvTVxcbm5lYnVsYS9NXFxubmVidWxhZVxcbm5lYnVsYXJcXG5uZWJ1bG91cy9QWVxcbm5lYnVsb3VzbmVzcy9NXFxubmVjZXNzYXJpbHkvVVxcbm5lY2Vzc2FyeS9TTVxcbm5lY2Vzc2l0YXRlL0RTR1xcbm5lY2Vzc2l0b3VzXFxubmVjZXNzaXR5L1NNXFxubmVjay9NRFNHXFxubmVja2JhbmQvU1xcbm5lY2tlcmNoaWVmL01TXFxubmVja2luZy9NXFxubmVja2xhY2UvTUdEU0pcXG5uZWNrbGluZS9NU1xcbm5lY2t0aWUvTVNcXG5uZWNyb2xvZ3kvTVxcbm5lY3JvbWFuY2VyL1NNXFxubmVjcm9tYW5jeS9NXFxubmVjcm9waGlsaWFcXG5uZWNyb3BoaWxpYWMvU1xcbm5lY3JvcG9saXMvTVNcXG5uZWNyb3Nlc1xcbm5lY3Jvc2lzL01cXG5uZWNyb3RpY1xcbm5lY3Rhci9NXFxubmVjdGFyaW5lL01TXFxubmVlXFxubmVlZC9NRFNHXFxubmVlZGVkL1VcXG5uZWVkZnVsL1lcXG5uZWVkaW5lc3MvTVxcbm5lZWRsZS9NR0RTXFxubmVlZGxlcG9pbnQvTVxcbm5lZWRsZXNzL1lQXFxubmVlZGxlc3NuZXNzL01cXG5uZWVkbGV3b21hbi9NXFxubmVlZGxld29tZW5cXG5uZWVkbGV3b3JrL01cXG5uZWVkbid0XFxubmVlZHkvUFRSXFxubmVmYXJpb3VzL1lQXFxubmVmYXJpb3VzbmVzcy9NXFxubmVnXFxubmVnYXRlL0RTR05WWFxcbm5lZ2F0aW9uL01cXG5uZWdhdGl2ZS9NWUdQRFNcXG5uZWdhdGl2ZW5lc3MvTVxcbm5lZ2F0aXZpc20vTVxcbm5lZ2F0aXZpdHkvTVxcbm5lZ2xlY3QvU0dNRFxcbm5lZ2xlY3RmdWwvWVBcXG5uZWdsZWN0ZnVsbmVzcy9NXFxubmVnbGlnZWUvTVNcXG5uZWdsaWdlbmNlL01cXG5uZWdsaWdlbnQvWVxcbm5lZ2xpZ2libGVcXG5uZWdsaWdpYmx5XFxubmVnb3RpYWJpbGl0eS9NXFxubmVnb3RpYWJsZS9BXFxubmVnb3RpYXRlL0FEU0dOXFxubmVnb3RpYXRpb24vQU1cXG5uZWdvdGlhdGlvbnNcXG5uZWdvdGlhdG9yL01TXFxubmVncml0dWRlL01cXG5uZWdyb1xcbm5lZ3JvaWRcXG5uZWlnaC9NREdcXG5uZWlnaGJvci9TTURZR1xcbm5laWdoYm9yaG9vZC9TTVxcbm5laWdoYm9ybGluZXNzL01cXG5uZWlnaHNcXG5uZWl0aGVyXFxubmVsc29uL1NNXFxubmVtYXRvZGUvU01cXG5uZW1lc2VzXFxubmVtZXNpcy9NXFxubmVvY2xhc3NpY1xcbm5lb2NsYXNzaWNhbFxcbm5lb2NsYXNzaWNpc20vTVxcbm5lb2NvbG9uaWFsaXNtL01cXG5uZW9jb2xvbmlhbGlzdC9NU1xcbm5lb2Nvbi9TTVxcbm5lb2NvbnNlcnZhdGl2ZS9TTVxcbm5lb2NvcnRleFxcbm5lb2R5bWl1bS9NXFxubmVvbGl0aGljXFxubmVvbG9naXNtL1NNXFxubmVvbi9NXFxubmVvbmF0YWxcXG5uZW9uYXRlL01TXFxubmVvcGhpbGlhXFxubmVvcGh5dGUvTVNcXG5uZW9wbGFzbS9NU1xcbm5lb3BsYXN0aWNcXG5uZW9wcmVuZS9NXFxubmVwZW50aGUvTVxcbm5lcGhldy9TTVxcbm5lcGhyaXRlL01cXG5uZXBocml0aWNcXG5uZXBocml0aXMvTVxcbm5lcGhyb3BhdGh5XFxubmVwb3Rpc20vTVxcbm5lcG90aXN0L1NNXFxubmVwb3Rpc3RpY1xcbm5lcHR1bml1bS9NXFxubmVyZC9NU1xcbm5lcmR5L1JUXFxubmVydmUnc1xcbm5lcnZlL1VEU0dcXG5uZXJ2ZWxlc3MvWVBcXG5uZXJ2ZWxlc3NuZXNzL01cXG5uZXJ2aW5lc3MvTVxcbm5lcnZvdXMvWVBcXG5uZXJ2b3VzbmVzcy9NXFxubmVydnkvVFBSXFxubmVzdC9NRFNHXFxubmVzdGxlL0dKRFNcXG5uZXN0bGluZy9NXFxubmV0L1NNXFxubmV0YmFsbFxcbm5ldGJvb2svTVNcXG5uZXRoZXJcXG5uZXRoZXJtb3N0XFxubmV0aGVyd29ybGQvTVxcbm5ldGlxdWV0dGUvU1xcbm5ldHRlZFxcbm5ldHRlci9TXFxubmV0dGluZy9NXFxubmV0dGxlL01HRFNcXG5uZXR0bGVzb21lXFxubmV0d29yay9TR01EXFxubmV0d29ya2luZy9NXFxubmV1cmFsL1lcXG5uZXVyYWxnaWEvTVxcbm5ldXJhbGdpY1xcbm5ldXJhc3RoZW5pYS9NXFxubmV1cmFzdGhlbmljL01TXFxubmV1cml0aWMvTVNcXG5uZXVyaXRpcy9NXFxubmV1cm9sb2dpY2FsL1lcXG5uZXVyb2xvZ2lzdC9TTVxcbm5ldXJvbG9neS9NXFxubmV1cm9uL01TXFxubmV1cm9uYWxcXG5uZXVyb3NjaWVuY2VcXG5uZXVyb3Nlc1xcbm5ldXJvc2lzL01cXG5uZXVyb3N1cmdlb24vTVNcXG5uZXVyb3N1cmdlcnkvTVxcbm5ldXJvc3VyZ2ljYWxcXG5uZXVyb3RpYy9NU1xcbm5ldXJvdGljYWxseVxcbm5ldXJvdGljaXNtXFxubmV1cm90cmFuc21pdHRlci9TTVxcbm5ldXRcXG5uZXV0ZXIvTURHU1xcbm5ldXRyYWwvU01ZXFxubmV1dHJhbGlzbS9NXFxubmV1dHJhbGlzdC9TTVxcbm5ldXRyYWxpdHkvTVxcbm5ldXRyYWxpemF0aW9uL01cXG5uZXV0cmFsaXplL0RSU1pHXFxubmV1dHJhbGl6ZXIvTVxcbm5ldXRyaW5vL1NNXFxubmV1dHJvbi9TTVxcbm5ldmVyXFxubmV2ZXJtb3JlXFxubmV2ZXJ0aGVsZXNzXFxubmV2aVxcbm5ldnVzL01cXG5uZXcvU1RNUllQXFxubmV3YmllL01TXFxubmV3Ym9ybi9TTVxcbm5ld2NvbWVyL1NNXFxubmV3ZWwvU01cXG5uZXdmYW5nbGVkXFxubmV3Zm91bmRcXG5uZXdsaW5lL1NcXG5uZXdseXdlZC9TTVxcbm5ld25lc3MvTVxcbm5ld3MvTVxcbm5ld3NhZ2VudC9TXFxubmV3c2JveS9TTVxcbm5ld3NjYXN0L1NNUlpcXG5uZXdzY2FzdGVyL01cXG5uZXdzZGVhbGVyL1NNXFxubmV3c2ZsYXNoL1NcXG5uZXdzZ2lybC9TTVxcbm5ld3Nncm91cC9NU1xcbm5ld3Nob3VuZC9TXFxubmV3c2xldHRlci9NU1xcbm5ld3NtYW4vTVxcbm5ld3NtZW5cXG5uZXdzcGFwZXIvTVNcXG5uZXdzcGFwZXJtYW4vTVxcbm5ld3NwYXBlcm1lblxcbm5ld3NwYXBlcndvbWFuL01cXG5uZXdzcGFwZXJ3b21lblxcbm5ld3NwZWFrXFxubmV3c3ByaW50L01cXG5uZXdzcmVhZGVyL1NcXG5uZXdzcmVlbC9NU1xcbm5ld3Nyb29tL01TXFxubmV3c3N0YW5kL1NNXFxubmV3c3dlZWtseS9TTVxcbm5ld3N3b21hbi9NXFxubmV3c3dvbWVuXFxubmV3c3dvcnRoaW5lc3MvTVxcbm5ld3N3b3J0aHkvUFxcbm5ld3N5L1RSXFxubmV3dC9NU1xcbm5ld3Rvbi9NU1xcbm5leHQvTVxcbm5leHVzL01TXFxubmlhY2luL01cXG5uaWIvU01cXG5uaWJibGUvTVpHRFJTXFxubmliYmxlci9NXFxubmljZS9QWVRSXFxubmljZW5lc3MvTVxcbm5pY2V0eS9TTVxcbm5pY2hlL1NNXFxubmljay9NRFJTWkdcXG5uaWNrZWwvTVNcXG5uaWNrZWxvZGVvbi9TTVxcbm5pY2tlci9NREdcXG5uaWNrbGUvU1xcbm5pY2tuYW1lL0RTTUdcXG5uaWNvdGluZS9NXFxubmllY2UvU01cXG5uaWZlZGlwaW5lXFxubmlmZlxcbm5pZmZ5XFxubmlmdHkvVFJcXG5uaWdnYS9NUyFcXG5uaWdnYXJkL1NNWVxcbm5pZ2dhcmRsaW5lc3MvTVxcbm5pZ2dhei8hXFxubmlnZ2VyL1NNIVxcbm5pZ2dsZS9NWkdEUlNcXG5uaWdnbGVyL01cXG5uaWdoL1JUXFxubmlnaHQvU01ZXFxubmlnaHRjYXAvU01cXG5uaWdodGNsb3RoZXMvTVxcbm5pZ2h0Y2x1Yi9TTVxcbm5pZ2h0Y2x1YmJlZFxcbm5pZ2h0Y2x1YmJpbmdcXG5uaWdodGRyZXNzL01TXFxubmlnaHRmYWxsL01cXG5uaWdodGdvd24vU01cXG5uaWdodGhhd2svU01cXG5uaWdodGllL1NNXFxubmlnaHRpbmdhbGUvU01cXG5uaWdodGxpZmUvTVxcbm5pZ2h0bGlnaHQvU1xcbm5pZ2h0bG9uZ1xcbm5pZ2h0bWFyZS9TTVxcbm5pZ2h0bWFyaXNoXFxubmlnaHRzaGFkZS9TTVxcbm5pZ2h0c2hpcnQvU01cXG5uaWdodHNwb3QvTVNcXG5uaWdodHN0YW5kL1NNXFxubmlnaHRzdGljay9TTVxcbm5pZ2h0dGltZS9NXFxubmlnaHR3YXRjaG1hblxcbm5pZ2h0d2F0Y2htZW5cXG5uaWdodHdlYXIvTVxcbm5paGlsaXNtL01cXG5uaWhpbGlzdC9NU1xcbm5paGlsaXN0aWNcXG5uaWwvTVxcbm5pbWJpXFxubmltYmxlL1RQUlxcbm5pbWJsZW5lc3MvTVxcbm5pbWJseVxcbm5pbWJ1cy9NXFxubmltYnlcXG5uaW1yb2QvTVNcXG5uaW5jb21wb29wL1NNXFxubmluZS9NU1xcbm5pbmVwaW4vTVNcXG5uaW5lcGlucy9NXFxubmluZXRlZW4vU01IXFxubmluZXRlZW50aC9NXFxubmluZXRlZW50aHNcXG5uaW5ldGlldGgvTVxcbm5pbmV0aWV0aHNcXG5uaW5ldHkvSFNNXFxubmluamEvU01cXG5uaW5ueS9TTVxcbm5pbnRoL01cXG5uaW50aHNcXG5uaW9iaXVtL01cXG5uaXAvU01cXG5uaXBwZWRcXG5uaXBwZXIvTVNcXG5uaXBwaW5lc3MvTVxcbm5pcHBpbmdcXG5uaXBwbGUvTVNcXG5uaXBweS9UUFJcXG5uaXJ2YW5hL01cXG5uaXNlaS9NXFxubml0L1NNUlxcbm5pdGVyL01cXG5uaXRwaWNrL1NaR0RSXFxubml0cGlja2VyL01cXG5uaXRwaWNraW5nL01cXG5uaXRyYXRlL0RTTUdOXFxubml0cmF0aW9uL01cXG5uaXRyaWNcXG5uaXRyaWZpY2F0aW9uL01cXG5uaXRyaXRlL1NNXFxubml0cm9cXG5uaXRyb2NlbGx1bG9zZS9NXFxubml0cm9nZW4vTVxcbm5pdHJvZ2Vub3VzXFxubml0cm9nbHljZXJpbi9NXFxubml0d2l0L01TXFxubml4L0dNRFNcXG5uby9TTVxcbm5vYi9TWVxcbm5vYmJsZS9HRFNcXG5ub2JlbGl1bS9NXFxubm9iaWxpdHkvTVxcbm5vYmxlL1JTUE1UXFxubm9ibGVtYW4vTVxcbm5vYmxlbWVuXFxubm9ibGVuZXNzL01cXG5ub2JsZXdvbWFuL01cXG5ub2JsZXdvbWVuXFxubm9ib2R5L1NNXFxubm9jdHVybmFsL1lcXG5ub2N0dXJuZS9NU1xcbm5vZC9TTVxcbm5vZGFsXFxubm9kZGVkXFxubm9kZGluZ1xcbm5vZGRsZS9NU1xcbm5vZGR5XFxubm9kZS9NU1xcbm5vZHVsYXJcXG5ub2R1bGUvTVNcXG5ub2VsL01TXFxubm9lc1xcbm5vZ2dpbi9NU1xcbm5vaG93XFxubm9pc2UvRFNNR1xcbm5vaXNlbGVzcy9QWVxcbm5vaXNlbGVzc25lc3MvTVxcbm5vaXNlbWFrZXIvTVNcXG5ub2lzaWx5XFxubm9pc2luZXNzL01cXG5ub2lzb21lXFxubm9pc3kvUFRSXFxubm9tYWQvU01cXG5ub21hZGljXFxubm9tZW5jbGF0dXJlL01TXFxubm9taW5hbC9ZXFxubm9taW5hdGUvQUNHTlZEU1xcbm5vbWluYXRpb24ncy9BXFxubm9taW5hdGlvbi9DU01cXG5ub21pbmF0aXZlL1NNXFxubm9taW5hdG9yL0NTTVxcbm5vbWluZWUvTVNcXG5ub25cXG5ub25hYnJhc2l2ZVxcbm5vbmFic29yYmVudC9TTVxcbm5vbmFjYWRlbWljXFxubm9uYWNjZXB0YW5jZS9NXFxubm9uYWNpZFxcbm5vbmFjdGl2ZS9NU1xcbm5vbmFkZGljdGl2ZVxcbm5vbmFkaGVzaXZlXFxubm9uYWRqYWNlbnRcXG5ub25hZGp1c3RhYmxlXFxubm9uYWRtaW5pc3RyYXRpdmVcXG5ub25hZ2UvTVNcXG5ub25hZ2VuYXJpYW4vTVNcXG5ub25hZ2dyZXNzaW9uL01cXG5ub25hbGNvaG9saWNcXG5ub25hbGlnbmVkXFxubm9uYWxpZ25tZW50L01cXG5ub25hbGxlcmdpY1xcbm5vbmFwcGVhcmFuY2UvTVNcXG5ub25hc3NpZ25hYmxlXFxubm9uYXRobGV0aWNcXG5ub25hdHRlbmRhbmNlL01cXG5ub25hdXRvbW90aXZlXFxubm9uYXZhaWxhYmlsaXR5L01cXG5ub25iYXNpY1xcbm5vbmJlbGlldmVyL01TXFxubm9uYmVsbGlnZXJlbnQvTVNcXG5ub25iaW5kaW5nXFxubm9uYnJlYWthYmxlXFxubm9uYnVybmFibGVcXG5ub25jYWxvcmljXFxubm9uY2FuY2Vyb3VzXFxubm9uY2UvTVxcbm5vbmNoYWxhbmNlL01cXG5ub25jaGFsYW50L1lcXG5ub25jaGFyZ2VhYmxlXFxubm9uY2xlcmljYWwvTVNcXG5ub25jbGluaWNhbFxcbm5vbmNvbGxlY3RhYmxlXFxubm9uY29tL01TXFxubm9uY29tYmF0XFxubm9uY29tYmF0YW50L01TXFxubm9uY29tYnVzdGlibGVcXG5ub25jb21tZXJjaWFsL01TXFxubm9uY29tbWl0dGFsL1lcXG5ub25jb21tdW5pY2FibGVcXG5ub25jb21wZXRpbmdcXG5ub25jb21wZXRpdGl2ZVxcbm5vbmNvbXBsaWFuY2UvTVxcbm5vbmNvbXBseWluZ1xcbm5vbmNvbXByZWhlbmRpbmdcXG5ub25jb25kdWN0aW5nXFxubm9uY29uZHVjdG9yL01TXFxubm9uY29uZm9ybWluZ1xcbm5vbmNvbmZvcm1pc21cXG5ub25jb25mb3JtaXN0L01TXFxubm9uY29uZm9ybWl0eS9NXFxubm9uY29uc2VjdXRpdmVcXG5ub25jb25zdHJ1Y3RpdmVcXG5ub25jb250YWdpb3VzXFxubm9uY29udGludW91c1xcbm5vbmNvbnRyaWJ1dGluZ1xcbm5vbmNvbnRyaWJ1dG9yeVxcbm5vbmNvbnRyb3ZlcnNpYWxcXG5ub25jb252ZXJ0aWJsZVxcbm5vbmNvb3BlcmF0aW9uL01cXG5ub25jb3Jyb2RpbmdcXG5ub25jb3Jyb3NpdmVcXG5ub25jcmVkaXRcXG5ub25jcmltaW5hbC9TTVxcbm5vbmNyaXRpY2FsXFxubm9uY3J5c3RhbGxpbmVcXG5ub25jdW11bGF0aXZlXFxubm9uY3VzdG9kaWFsXFxubm9uZGFpcnlcXG5ub25kZWR1Y3RpYmxlL01cXG5ub25kZWxpdmVyeS9TTVxcbm5vbmRlbW9jcmF0aWNcXG5ub25kZW5vbWluYXRpb25hbFxcbm5vbmRlcGFydG1lbnRhbFxcbm5vbmRlcHJlY2lhdGluZ1xcbm5vbmRlc2NyaXB0XFxubm9uZGVzdHJ1Y3RpdmVcXG5ub25kZXRhY2hhYmxlXFxubm9uZGV0ZXJtaW5pc21cXG5ub25kZXRlcm1pbmlzdGljXFxubm9uZGlzY2lwbGluYXJ5XFxubm9uZGlzY2xvc3VyZS9NXFxubm9uZGlzY3JpbWluYXRpb24vTVxcbm5vbmRpc2NyaW1pbmF0b3J5XFxubm9uZHJhbWF0aWNcXG5ub25kcmlua2VyL01TXFxubm9uZHJ5aW5nXFxubm9uZVxcbm5vbmVkdWNhdGlvbmFsXFxubm9uZWZmZWN0aXZlXFxubm9uZWxhc3RpY1xcbm5vbmVsZWN0cmljXFxubm9uZWxlY3RyaWNhbFxcbm5vbmVtcHR5XFxubm9uZW5mb3JjZWFibGVcXG5ub25lbnRpdHkvU01cXG5ub25lcXVpdmFsZW50L01TXFxubm9uZXNzZW50aWFsXFxubm9uZXN1Y2gvTVNcXG5ub25ldGhlbGVzc1xcbm5vbmV2ZW50L01TXFxubm9uZXhjaGFuZ2VhYmxlXFxubm9uZXhjbHVzaXZlXFxubm9uZXhlbXB0L01cXG5ub25leGlzdGVuY2UvTVxcbm5vbmV4aXN0ZW50XFxubm9uZXhwbG9zaXZlL01TXFxubm9uZmFjdHVhbFxcbm5vbmZhZGluZ1xcbm5vbmZhdFxcbm5vbmZhdGFsXFxubm9uZmF0dGVuaW5nXFxubm9uZmVycm91c1xcbm5vbmZpY3Rpb24vTVxcbm5vbmZpY3Rpb25hbFxcbm5vbmZsYW1tYWJsZVxcbm5vbmZsb3dlcmluZ1xcbm5vbmZsdWN0dWF0aW5nXFxubm9uZmx5aW5nXFxubm9uZm9vZC9NXFxubm9uZnJlZXppbmdcXG5ub25mdW5jdGlvbmFsXFxubm9uZ292ZXJubWVudGFsXFxubm9uZ3JhbnVsYXJcXG5ub25oYXphcmRvdXNcXG5ub25oZXJlZGl0YXJ5XFxubm9uaHVtYW5cXG5ub25pZGVudGljYWxcXG5ub25pbmNsdXNpdmVcXG5ub25pbmRlcGVuZGVudFxcbm5vbmluZHVzdHJpYWxcXG5ub25pbmZlY3Rpb3VzXFxubm9uaW5mbGFtbWF0b3J5XFxubm9uaW5mbGF0aW9uYXJ5XFxubm9uaW5mbGVjdGVkXFxubm9uaW50ZWxsZWN0dWFsL01TXFxubm9uaW50ZXJjaGFuZ2VhYmxlXFxubm9uaW50ZXJmZXJlbmNlL01cXG5ub25pbnRlcnZlbnRpb24vTVxcbm5vbmludG94aWNhdGluZ1xcbm5vbmludmFzaXZlXFxubm9uaXJyaXRhdGluZ1xcbm5vbmlzc3VlXFxubm9uanVkZ21lbnRhbFxcbm5vbmp1ZGljaWFsXFxubm9ubGVnYWxcXG5ub25sZXRoYWxcXG5ub25saW5lYXJcXG5ub25saXRlcmFyeVxcbm5vbmxpdmluZy9NXFxubm9ubWFnbmV0aWNcXG5ub25tYWxpZ25hbnRcXG5ub25tZW1iZXIvTVNcXG5ub25tZXRhbC9TTVxcbm5vbm1ldGFsbGljXFxubm9ubWlncmF0b3J5XFxubm9ubWlsaXRhbnRcXG5ub25taWxpdGFyeVxcbm5vbm5hcmNvdGljL1NNXFxubm9ubmF0aXZlL01TXFxubm9ubmVnb3RpYWJsZVxcbm5vbm51Y2xlYXJcXG5ub25udW1lcmljYWxcXG5ub25vYmplY3RpdmVcXG5ub25vYmxpZ2F0b3J5XFxubm9ub2JzZXJ2YW5jZS9NXFxubm9ub2JzZXJ2YW50XFxubm9ub2NjdXBhdGlvbmFsXFxubm9ub2NjdXJlbmNlXFxubm9ub2ZmaWNpYWxcXG5ub25vcGVyYXRpb25hbFxcbm5vbm9wZXJhdGl2ZVxcbm5vbnBhcmFsbGVsL01TXFxubm9ucGFyZWlsL01TXFxubm9ucGFydGljaXBhbnQvTVNcXG5ub25wYXJ0aWNpcGF0aW5nXFxubm9ucGFydGlzYW4vU01cXG5ub25wYXlpbmdcXG5ub25wYXltZW50L1NNXFxubm9ucGVyZm9ybWFuY2UvTVxcbm5vbnBlcmZvcm1pbmdcXG5ub25wZXJpc2hhYmxlXFxubm9ucGVyc29uL01TXFxubm9ucGh5c2ljYWwvWVxcbm5vbnBsdXMvU1xcbm5vbnBsdXNzZWRcXG5ub25wbHVzc2luZ1xcbm5vbnBvaXNvbm91c1xcbm5vbnBvbGl0aWNhbFxcbm5vbnBvbGx1dGluZ1xcbm5vbnBvcm91c1xcbm5vbnByYWN0aWNpbmdcXG5ub25wcmVqdWRpY2lhbFxcbm5vbnByZXNjcmlwdGlvblxcbm5vbnByb2R1Y3RpdmVcXG5ub25wcm9mZXNzaW9uYWwvU01cXG5ub25wcm9maXQvU01CXFxubm9ucHJvbGlmZXJhdGlvbi9NXFxubm9ucHVibGljXFxubm9ucHVuaXNoYWJsZVxcbm5vbnJhY2lhbFxcbm5vbnJhZGlvYWN0aXZlXFxubm9ucmFuZG9tXFxubm9ucmVhY3RpdmVcXG5ub25yZWNpcHJvY2FsL1NNXFxubm9ucmVjaXByb2NhdGluZ1xcbm5vbnJlY29nbml0aW9uL01cXG5ub25yZWNvdmVyYWJsZVxcbm5vbnJlY3VycmluZ1xcbm5vbnJlZGVlbWFibGVcXG5ub25yZWZpbGxhYmxlXFxubm9ucmVmdW5kYWJsZVxcbm5vbnJlbGlnaW91c1xcbm5vbnJlbmV3YWJsZVxcbm5vbnJlcHJlc2VudGF0aW9uYWxcXG5ub25yZXNpZGVudC9NU1xcbm5vbnJlc2lkZW50aWFsXFxubm9ucmVzaWR1YWwvTVxcbm5vbnJlc2lzdGFuY2UvTVxcbm5vbnJlc2lzdGFudFxcbm5vbnJlc3RyaWN0aXZlXFxubm9ucmV0dXJuYWJsZS9NU1xcbm5vbnJoeXRobWljXFxubm9ucmlnaWRcXG5ub25zYWxhcmllZFxcbm5vbnNjaGVkdWxlZFxcbm5vbnNjaWVudGlmaWNcXG5ub25zY29yaW5nXFxubm9uc2Vhc29uYWxcXG5ub25zZWN0YXJpYW5cXG5ub25zZWN1bGFyXFxubm9uc2VncmVnYXRlZFxcbm5vbnNlbnNlL01cXG5ub25zZW5zaWNhbC9ZXFxubm9uc2Vuc2l0aXZlXFxubm9uc2V4aXN0XFxubm9uc2V4dWFsXFxubm9uc2tpZFxcbm5vbnNsaXBcXG5ub25zbW9rZXIvU01cXG5ub25zbW9raW5nXFxubm9uc29jaWFsXFxubm9uc3BlYWtpbmdcXG5ub25zcGVjaWFsaXN0L01TXFxubm9uc3BlY2lhbGl6aW5nXFxubm9uc3BlY2lmaWNcXG5ub25zcGlyaXR1YWwvU01cXG5ub25zdGFpbmluZ1xcbm5vbnN0YW5kYXJkXFxubm9uc3RhcnRlci9NU1xcbm5vbnN0aWNrXFxubm9uc3RvcFxcbm5vbnN0cmF0ZWdpY1xcbm5vbnN0cmlraW5nXFxubm9uc3RydWN0dXJhbFxcbm5vbnN1Y2Nlc3NpdmVcXG5ub25zdXBwb3J0L0dNXFxubm9uc3VyZ2ljYWxcXG5ub25zdXN0YWluaW5nXFxubm9uc3ltcGF0aGl6ZXIvTVxcbm5vbnRhcm5pc2hhYmxlXFxubm9udGF4YWJsZVxcbm5vbnRlY2huaWNhbFxcbm5vbnRlbnVyZWRcXG5ub250aGVhdHJpY2FsXFxubm9udGhpbmtpbmdcXG5ub250aHJlYXRlbmluZ1xcbm5vbnRveGljXFxubm9udHJhZGl0aW9uYWxcXG5ub250cmFuc2ZlcmFibGVcXG5ub250cmFuc3BhcmVudFxcbm5vbnRyaXZpYWxcXG5ub250cm9waWNhbFxcbm5vbnVuaWZvcm1cXG5ub251bmlvblxcbm5vbnVzZXIvTVNcXG5ub252ZW5vbW91c1xcbm5vbnZlcmJhbFxcbm5vbnZpYWJsZVxcbm5vbnZpb2xlbmNlL01cXG5ub252aW9sZW50L1lcXG5ub252aXJ1bGVudFxcbm5vbnZvY2FsXFxubm9udm9jYXRpb25hbFxcbm5vbnZvbGF0aWxlXFxubm9udm90ZXIvTVNcXG5ub252b3RpbmdcXG5ub253aGl0ZS9NU1xcbm5vbndvcmtpbmdcXG5ub255aWVsZGluZ1xcbm5vbnplcm9cXG5ub29kbGUvTUdEU1xcbm5vb2svTVNcXG5ub29raWVcXG5ub29reVxcbm5vb24vTVxcbm5vb25kYXkvTVxcbm5vb250aWRlL01cXG5ub29udGltZS9NXFxubm9vc2UvU01cXG5ub3BlXFxubm9yXFxubm9yJ2Vhc3Rlclxcbm5vcm0vTVNcXG5ub3JtYWwvTVlcXG5ub3JtYWxjeS9NXFxubm9ybWFsaXR5L01cXG5ub3JtYWxpemF0aW9uL01cXG5ub3JtYWxpemUvRFNHXFxubm9ybWF0aXZlXFxubm9ydGgvWk1SXFxubm9ydGhib3VuZFxcbm5vcnRoZWFzdC9NUlpcXG5ub3J0aGVhc3Rlci9NWVxcbm5vcnRoZWFzdGVyblxcbm5vcnRoZWFzdHdhcmQvU1xcbm5vcnRoZXIvTVlcXG5ub3J0aGVybHkvU01cXG5ub3J0aGVybi9aUlxcbm5vcnRoZXJuZXIvTVxcbm5vcnRoZXJubW9zdFxcbm5vcnRod2FyZC9TXFxubm9ydGh3ZXN0L1pNUlxcbm5vcnRod2VzdGVyL01ZXFxubm9ydGh3ZXN0ZXJuXFxubm9ydGh3ZXN0d2FyZC9TXFxubm9zZS9NR0RTXFxubm9zZWJhZy9TXFxubm9zZWJsZWVkL01TXFxubm9zZWNvbmUvU01cXG5ub3NlZGl2ZS9EU01HXFxubm9zZWdheS9TTVxcbm5vc2gvTURSU1pHXFxubm9zaGVyL01cXG5ub3NpbHlcXG5ub3NpbmVzcy9NXFxubm9zdGFsZ2lhL01cXG5ub3N0YWxnaWNcXG5ub3N0YWxnaWNhbGx5XFxubm9zdHJpbC9NU1xcbm5vc3RydW0vTVNcXG5ub3N5L1JQVFxcbm5vdC9CXFxubm90YWJpbGl0eS9TTVxcbm5vdGFibGUvU01cXG5ub3RhYmx5XFxubm90YXJpYWxcXG5ub3Rhcml6YXRpb24vTVxcbm5vdGFyaXplL0dEU1xcbm5vdGFyeS9TTVxcbm5vdGF0ZS9HRFNcXG5ub3RhdGlvbi9GQ1NNXFxubm90Y2gvR01EU1xcbm5vdGUnc1xcbm5vdGUvRkNTREdcXG5ub3RlYm9vay9NU1xcbm5vdGVsZXQvU1xcbm5vdGVwYWQvU1xcbm5vdGVwYXBlci9NXFxubm90ZXdvcnRoaW5lc3MvTVxcbm5vdGV3b3J0aHkvUFxcbm5vdGhpbmcvUFNNXFxubm90aGluZ25lc3MvTVxcbm5vdGljZS9NR0RTXFxubm90aWNlYWJsZS9VXFxubm90aWNlYWJseVxcbm5vdGljZWJvYXJkL1NcXG5ub3RpY2VkL1VcXG5ub3RpZmlhYmxlXFxubm90aWZpY2F0aW9uL01cXG5ub3RpZmllci9NXFxubm90aWZ5L05EUlNYWkdcXG5ub3Rpb24vTVNcXG5ub3Rpb25hbC9ZXFxubm90b3JpZXR5L01cXG5ub3RvcmlvdXMvWVxcbm5vdHdpdGhzdGFuZGluZ1xcbm5vdHdvcmsvU1xcbm5vdWdhdC9NU1xcbm5vdW4vS01TXFxubm91cmlzaC9EU0xHXFxubm91cmlzaG1lbnQvTVxcbm5vdXNcXG5ub3ZhL01TXFxubm92YWVcXG5ub3ZlbC9TTVxcbm5vdmVsZXR0ZS9TTVxcbm5vdmVsaXN0L1NNXFxubm92ZWxpemF0aW9uL01TXFxubm92ZWxpemUvRFNHXFxubm92ZWxsYS9NU1xcbm5vdmVsdHkvU01cXG5ub3ZlbmEvTVNcXG5ub3ZlbmVcXG5ub3ZpY2UvTVNcXG5ub3ZpdGlhdGUvTVNcXG5ub3cvTVxcbm5vd2FkYXlzL01cXG5ub3dheS9TXFxubm93aGVyZS9NXFxubm93aXNlXFxubm93dFxcbm5veGlvdXNcXG5ub3p6bGUvTVNcXG5udS9TTVxcbm51YW5jZS9NRFNcXG5udWIvU01cXG5udWJiaW4vTVNcXG5udWJieS9UUlxcbm51YmlsZVxcbm51Y2xlYXIvS1xcbm51Y2xlYXRlL0RTR05cXG5udWNsZWF0aW9uL01cXG5udWNsZWlcXG5udWNsZWljXFxubnVjbGVvbGlcXG5udWNsZW9sdXMvTVxcbm51Y2xlb24vU01cXG5udWNsZW9zaWRlXFxubnVjbGVvdGlkZVxcbm51Y2xldXMvTVxcbm51ZGUvTVRSU1xcbm51ZGdlL0dEU01cXG5udWRpc20vTVxcbm51ZGlzdC9TTVxcbm51ZGl0eS9NXFxubnVnYXRvcnlcXG5udWdnZXQvU01cXG5udWlzYW5jZS9NU1xcbm51a2UvTUdEU1xcbm51bGwvU1xcbm51bGxpZmljYXRpb24vTVxcbm51bGxpZnkvTkRTR1xcbm51bGxpdHkvTVxcbm51bWIvWlRHUERSWVNcXG5udW1iZXInc1xcbm51bWJlci9BU0RHXFxubnVtYmVyZWQvVVxcbm51bWJlcmxlc3NcXG5udW1ibmVzcy9NXFxubnVtZXJhYmxlL0lcXG5udW1lcmFjeS9JTVxcbm51bWVyYWwvU01cXG5udW1lcmF0ZS9YR05EU1xcbm51bWVyYXRpb24vTVxcbm51bWVyYXRvci9NU1xcbm51bWVyaWNcXG5udW1lcmljYWwvWVxcbm51bWVyb2xvZ2lzdC9NU1xcbm51bWVyb2xvZ3kvTVxcbm51bWVyb3VzL1lcXG5udW1pbm91c1xcbm51bWlzbWF0aWMvU1xcbm51bWlzbWF0aWNzL01cXG5udW1pc21hdGlzdC9TTVxcbm51bXNrdWxsL01TXFxubnVuL1NNXFxubnVuY2lvL1NNXFxubnVubmVyeS9TTVxcbm51cHRpYWwvTVNcXG5udXJzZS9NWkdEUlNcXG5udXJzZWxpbmdzXFxubnVyc2VtYWlkL01TXFxubnVyc2VyL01cXG5udXJzZXJ5L1NNXFxubnVyc2VyeW1hbi9NXFxubnVyc2VyeW1lblxcbm51cnNpbmcvTVxcbm51cnNsaW5nL1NNXFxubnVydHVyZS9EUlNNWkdcXG5udXJ0dXJlci9NXFxubnV0L1NNXFxubnV0Y2FzZS9TXFxubnV0Y3JhY2tlci9NU1xcbm51dGhhdGNoL01TXFxubnV0aG91c2UvU1xcbm51dG1lYXQvU01cXG5udXRtZWcvU01cXG5udXRwaWNrL1NNXFxubnV0cmlhL1NNXFxubnV0cmllbnQvTVNcXG5udXRyaW1lbnQvTVNcXG5udXRyaXRpb24vTVxcbm51dHJpdGlvbmFsL1lcXG5udXRyaXRpb25pc3QvU01cXG5udXRyaXRpb3VzL1lQXFxubnV0cml0aW91c25lc3MvTVxcbm51dHJpdGl2ZVxcbm51dHNoZWxsL01TXFxubnV0dGVkXFxubnV0dGVyL1NcXG5udXR0aW5lc3MvTVxcbm51dHRpbmdcXG5udXR0eS9SVFBcXG5udXp6bGUvRFJTTVpHXFxubnV6emxlci9NXFxubnliYmxlL1NcXG5ueWxvbi9NU1xcbm55bG9ucy9NXFxubnltcGgvTVxcbm55bXBoZXQvTVNcXG5ueW1waG8vU1xcbm55bXBob21hbmlhL01cXG5ueW1waG9tYW5pYWMvU01cXG5ueW1waHNcXG5vXFxubydjbG9ja1xcbm8nZXJcXG5vYWYvU01cXG5vYWZpc2gvUFlcXG5vYWZpc2huZXNzL01cXG5vYWsvU01OXFxub2FrdW0vTVxcbm9hci9TR01EXFxub2FybG9jay9TTVxcbm9hcnNtYW4vTVxcbm9hcnNtZW5cXG5vYXJzd29tYW4vTVxcbm9hcnN3b21lblxcbm9hc2VzXFxub2FzaXMvTVxcbm9hdC9TTU5cXG5vYXRjYWtlL1NNXFxub2F0aC9NXFxub2F0aHNcXG5vYXRtZWFsL01cXG5vYXRzL01cXG5vYi9TXFxub2JibGlnYXRvL01TXFxub2JkdXJhY3kvTVxcbm9iZHVyYXRlL1BZXFxub2JkdXJhdGVuZXNzL01cXG5vYmVkaWVuY2UvRU1cXG5vYmVkaWVudC9FWVxcbm9iZWlzYW5jZS9TTVxcbm9iZWlzYW50XFxub2JlbGlzay9NU1xcbm9iZXNlXFxub2Jlc2l0eS9NXFxub2JleS9FRFNHXFxub2JmdXNjYXRlL0dOWERTXFxub2JmdXNjYXRpb24vTVxcbm9iaS9TTVxcbm9iaXQvTVNcXG5vYml0dWFyeS9TTVxcbm9ialxcbm9iamVjdC9TR1ZNRFxcbm9iamVjdGlmeS9OR0RTXFxub2JqZWN0aW9uL1NNQlxcbm9iamVjdGlvbmFibGUvVVxcbm9iamVjdGlvbmFibHlcXG5vYmplY3RpdmUvU01ZUFxcbm9iamVjdGl2ZW5lc3MvTVxcbm9iamVjdGl2aXR5L01cXG5vYmplY3Rvci9NU1xcbm9ianVyZ2F0ZS9YR05EU1xcbm9ianVyZ2F0aW9uL01cXG5vYmxhdGUvTlhcXG5vYmxhdGlvbi9NXFxub2JsaWdhdGUvRFNYR05cXG5vYmxpZ2F0aW9uL01cXG5vYmxpZ2F0b3JpbHlcXG5vYmxpZ2F0b3J5XFxub2JsaWdlL0VHRFNcXG5vYmxpZ2luZy9ZXFxub2JsaXF1ZS9TTVlQXFxub2JsaXF1ZW5lc3MvTVxcbm9ibGlxdWl0eS9NXFxub2JsaXRlcmF0ZS9EU0dOXFxub2JsaXRlcmF0aW9uL01cXG5vYmxpdmlvbi9NXFxub2JsaXZpb3VzL1lQXFxub2JsaXZpb3VzbmVzcy9NXFxub2Jsb25nL01TXFxub2Jsb3F1eS9NXFxub2Jub3hpb3VzL1lQXFxub2Jub3hpb3VzbmVzcy9NXFxub2JvZS9NU1xcbm9ib2lzdC9NU1xcbm9ic2NlbmUvUllUXFxub2JzY2VuaXR5L1NNXFxub2JzY3VyYW50aXNtL01cXG5vYnNjdXJhbnRpc3QvU01cXG5vYnNjdXJlL0RSU1lUR1xcbm9ic2N1cml0eS9TTVxcbm9ic2VxdWllc1xcbm9ic2VxdWlvdXMvUFlcXG5vYnNlcXVpb3VzbmVzcy9NXFxub2JzZXF1eS9NXFxub2JzZXJ2YWJseVxcbm9ic2VydmFuY2UvTVNcXG5vYnNlcnZhbnQvWVxcbm9ic2VydmF0aW9uL1NNXFxub2JzZXJ2YXRpb25hbFxcbm9ic2VydmF0b3J5L1NNXFxub2JzZXJ2ZS9EUlNCWkdcXG5vYnNlcnZlZC9VXFxub2JzZXJ2ZXIvTVxcbm9ic2Vzcy9EU0dWXFxub2JzZXNzaW9uL1NNXFxub2JzZXNzaW9uYWwvWVxcbm9ic2Vzc2l2ZS9QU01ZXFxub2JzZXNzaXZlbmVzcy9NXFxub2JzaWRpYW4vTVxcbm9ic29sZXNjZS9EU0dcXG5vYnNvbGVzY2VuY2UvTVxcbm9ic29sZXNjZW50XFxub2Jzb2xldGUvR0RTXFxub2JzdGFjbGUvTVNcXG5vYnN0ZXRyaWMvU1xcbm9ic3RldHJpY2FsXFxub2JzdGV0cmljaWFuL1NNXFxub2JzdGV0cmljcy9NXFxub2JzdGluYWN5L01cXG5vYnN0aW5hdGUvWVxcbm9ic3RyZXBlcm91cy9ZUFxcbm9ic3RyZXBlcm91c25lc3MvTVxcbm9ic3RydWN0L0RHVlNcXG5vYnN0cnVjdGVkL1VcXG5vYnN0cnVjdGlvbi9TTVxcbm9ic3RydWN0aW9uaXNtL01cXG5vYnN0cnVjdGlvbmlzdC9NU1xcbm9ic3RydWN0aXZlL1lQXFxub2JzdHJ1Y3RpdmVuZXNzL01cXG5vYnRhaW4vREJMR1NcXG5vYnRhaW5hYmxlL1VcXG5vYnRhaW5tZW50L01cXG5vYnRydWRlL0RTR1xcbm9idHJ1c2lvbi9NXFxub2J0cnVzaXZlL1VQWVxcbm9idHJ1c2l2ZW5lc3MvVU1cXG5vYnR1c2UvWVRSUFxcbm9idHVzZW5lc3MvTVxcbm9idmVyc2UvU01cXG5vYnZpYXRlL0RTR05cXG5vYnZpYXRpb24vTVxcbm9idmlvdXMvUFlcXG5vYnZpb3VzbmVzcy9NXFxub2NhcmluYS9NU1xcbm9jY2FzaW9uL0dNRFNcXG5vY2Nhc2lvbmFsL1lcXG5vY2NpZGVudGFsL1NNXFxub2NjbHVkZS9HRFNcXG5vY2NsdXNpb24vU01cXG5vY2NsdXNpdmVcXG5vY2N1bHQvTVxcbm9jY3VsdGlzbS9NXFxub2NjdWx0aXN0L1NNXFxub2NjdXBhbmN5L01cXG5vY2N1cGFudC9TTVxcbm9jY3VwYXRpb24vQU1cXG5vY2N1cGF0aW9uYWwvWVxcbm9jY3VwYXRpb25zXFxub2NjdXBpZWQvVVxcbm9jY3VwaWVyL1NNXFxub2NjdXB5L0FEU0dcXG5vY2N1ci9BU1xcbm9jY3VycmVkL0FcXG5vY2N1cnJlbmNlL1NNXFxub2NjdXJyaW5nL0FcXG5vY2Vhbi9TTVxcbm9jZWFuZnJvbnQvU01cXG5vY2VhbmdvaW5nXFxub2NlYW5pYy9NXFxub2NlYW5vZ3JhcGhlci9TTVxcbm9jZWFub2dyYXBoaWNcXG5vY2Vhbm9ncmFwaHkvTVxcbm9jZWFub2xvZ3kvTVxcbm9jZWxvdC9NU1xcbm9jaC9SXFxub2NoZXIvTVxcbm9ja2VyL1NcXG5vY3RhZ29uL01TXFxub2N0YWdvbmFsXFxub2N0YWxcXG5vY3RhbmUvTVNcXG5vY3RhdmUvTVNcXG5vY3Rhdm8vTVNcXG5vY3RldC9TTVxcbm9jdG9nZW5hcmlhbi9TTVxcbm9jdG9wdXMvTVNcXG5vY3VsYXIvTVNcXG5vY3VsaXN0L1NNXFxub2N1bG9tb3Rvclxcbm9kYWxpc3F1ZS9TTVxcbm9kZC9TVFJZTFBcXG5vZGRiYWxsL1NNXFxub2RkaXR5L1NNXFxub2RkbWVudC9TTVxcbm9kZG5lc3MvTVxcbm9kZHMvTVxcbm9kZS9TTVxcbm9kaW91cy9ZUFxcbm9kaW91c25lc3MvTVxcbm9kaXVtL01cXG5vZG9tZXRlci9NU1xcbm9kb3IvTURTXFxub2RvcmlmZXJvdXNcXG5vZG9ybGVzc1xcbm9kb3JvdXNcXG5vZHlzc2V5L01TXFxub2VkaXBhbFxcbm9lbm9sb2d5L01cXG5vZW5vcGhpbGUvU01cXG5vZXV2cmUvTVNcXG5vZlxcbm9mZi9TWkdEUkpcXG5vZmZhbC9NXFxub2ZmYmVhdC9NU1xcbm9mZmVuZC9aR0RSU1xcbm9mZmVuZGVyL01cXG5vZmZlbnNlL01TXFxub2ZmZW5zaXZlJ3NcXG5vZmZlbnNpdmUvSVBZXFxub2ZmZW5zaXZlbmVzcy9JTVxcbm9mZmVuc2l2ZXNcXG5vZmZlci9KR01EXFxub2ZmZXJpbmcvTVxcbm9mZmVydG9yeS9TTVxcbm9mZmhhbmRcXG5vZmZoYW5kZWQvUFlcXG5vZmZoYW5kZWRuZXNzL01cXG5vZmZpY2UvTVpSU1xcbm9mZmljZWhvbGRlci9TTVxcbm9mZmljZXIvTVxcbm9mZmljaWFsL01ZU1xcbm9mZmljaWFsZG9tL01cXG5vZmZpY2lhbGVzZVxcbm9mZmljaWFsaXNtL01cXG5vZmZpY2lhbnQvU01cXG5vZmZpY2lhdGUvRFNHXFxub2ZmaWNpYXRvci9NU1xcbm9mZmljaW91cy9QWVxcbm9mZmljaW91c25lc3MvTVxcbm9mZmluZy9NXFxub2ZmaXNoXFxub2ZmbGluZVxcbm9mZmxvYWQvU0RHXFxub2ZmcHJpbnQvU01cXG5vZmZzZXQvTVNcXG5vZmZzZXR0aW5nXFxub2Zmc2hvb3QvTVNcXG5vZmZzaG9yZS9HXFxub2Zmc2lkZVxcbm9mZnNpdGVcXG5vZmZzcHJpbmcvTVxcbm9mZnN0YWdlL1NcXG5vZmZ0cmFja1xcbm9mdFxcbm9mdGVuL1RSXFxub2Z0ZW50aW1lc1xcbm9mdHRpbWVzXFxub2dsZS9NWkdEUlNcXG5vZ2xlci9NXFxub2dyZS9NU1xcbm9ncmVpc2hcXG5vZ3Jlc3MvTVNcXG5vaC9NXFxub2htL1NNXFxub2htbWV0ZXIvTVNcXG5vaG9cXG5vaHNcXG5vaVxcbm9pay9TXFxub2lsL1NHTURcXG5vaWxjYW4vU1xcbm9pbGNsb3RoL01cXG5vaWxjbG90aHNcXG5vaWxmaWVsZC9TXFxub2lsaW5lc3MvTVxcbm9pbG1hblxcbm9pbG1lblxcbm9pbHNraW4vTVNcXG5vaWxza2lucy9NXFxub2lseS9SUFRcXG5vaW5rL01EU0dcXG5vaW50bWVudC9TTVxcbm9rYXBpL1NNXFxub2theS9NU0dcXG5va3JhL01TXFxub2xkL1RNTlJQXFxub2xkaWUvU01cXG5vbGRpc2hcXG5vbGRuZXNzL01cXG5vbGRzdGVyL01TXFxub2xlL1NNVlxcbm9sZWFnaW5vdXNcXG5vbGVhbmRlci9NU1xcbm9sZW8vTVxcbm9sZW9tYXJnYXJpbmUvTVxcbm9sZmFjdG9yeS9TTVxcbm9saWdhcmNoL01cXG5vbGlnYXJjaGljXFxub2xpZ2FyY2hpY2FsXFxub2xpZ2FyY2hzXFxub2xpZ2FyY2h5L1NNXFxub2xpZ29udWNsZW90aWRlL1NcXG5vbGlnb3BvbHkvU01cXG5vbGl2ZS9TTVxcbm9tL1NNTlhcXG5vbWJ1ZHNtYW4vTVxcbm9tYnVkc21lblxcbm9tZWdhL1NNXFxub21lbGV0L01TXFxub21lbi9NXFxub21pY3Jvbi9NU1xcbm9taW5vdXMvWVBcXG5vbWlub3VzbmVzcy9NXFxub21pc3Npb24vTVNcXG5vbWl0L1NcXG5vbWl0dGVkXFxub21pdHRpbmdcXG5vbW5pYnVzL01TXFxub21uaXBvdGVuY2UvTVxcbm9tbmlwb3RlbnRcXG5vbW5pcHJlc2VuY2UvTVxcbm9tbmlwcmVzZW50XFxub21uaXNjaWVuY2UvTVxcbm9tbmlzY2llbnRcXG5vbW5pdm9yZS9NU1xcbm9tbml2b3JvdXMvUFlcXG5vbW5pdm9yb3VzbmVzcy9NXFxub24vWVxcbm9uYm9hcmRcXG5vbmNlL01cXG5vbmNvZ2VuZS9TTVxcbm9uY29sb2dpc3QvU01cXG5vbmNvbG9neS9NXFxub25jb21pbmdcXG5vbmUvU1hNTlBcXG5vbmVuZXNzL01cXG5vbmVyb3VzL1BZXFxub25lcm91c25lc3MvTVxcbm9uZXNlbGZcXG5vbmV0aW1lXFxub25nb2luZ1xcbm9uaW9uL01cXG5vbmlvbnNraW4vTVxcbm9ubGluZVxcbm9ubG9va2VyL1NNXFxub25sb29raW5nXFxub25vbWF0b3BvZWlhL01cXG5vbm9tYXRvcG9laWNcXG5vbm9tYXRvcG9ldGljXFxub25ydXNoL01TR1xcbm9uc2NyZWVuXFxub25zZXQvTVNcXG5vbnNob3JlXFxub25zaWRlXFxub25zaXRlXFxub25zbGF1Z2h0L01TXFxub25zdGFnZVxcbm9udG9cXG5vbnRvZ2VueS9NXFxub250b2xvZ2ljYWxcXG5vbnRvbG9neS9NXFxub251cy9NU1xcbm9ud2FyZFxcbm9ueXgvTVNcXG5vb2RsZXMvTVxcbm9vaC9HRFxcbm9vaHNcXG5vb21waFxcbm9vcHNcXG5vb3plL01HRFNcXG5vb3p5L1RSXFxub3AvU01ER1xcbm9wYWNpdHkvTVxcbm9wYWwvTVNcXG5vcGFsZXNjZW5jZS9NXFxub3BhbGVzY2VudFxcbm9wYXF1ZS9QWVRHRFJTXFxub3BhcXVlbmVzcy9NXFxub3Bjb2RlL1NcXG5vcGUvU1xcbm9wZW4vWlRHSlBNRFJZU1xcbm9wZW5jYXN0XFxub3BlbmVkL1VcXG5vcGVuZXIvTVxcbm9wZW5oYW5kZWQvUFxcbm9wZW5oYW5kZWRuZXNzL01cXG5vcGVuaGVhcnRlZFxcbm9wZW5pbmcvTVxcbm9wZW5uZXNzL01cXG5vcGVud29yay9NXFxub3BlcmEvTVNcXG5vcGVyYWJsZS9JXFxub3BlcmFuZC9TXFxub3BlcmF0ZS9EU0dOVlhcXG5vcGVyYXRpY1xcbm9wZXJhdGljYWxseVxcbm9wZXJhdGlvbi9NXFxub3BlcmF0aW9uYWwvWVxcbm9wZXJhdGl2ZS9TTVxcbm9wZXJhdG9yL1NNXFxub3BlcmV0dGEvU01cXG5vcGh0aGFsbWljXFxub3BodGhhbG1vbG9naXN0L1NNXFxub3BodGhhbG1vbG9neS9NXFxub3BpYXRlL1NNXFxub3BpbmUvR05YRFNcXG5vcGluaW9uL01cXG5vcGluaW9uYXRlZFxcbm9waW9pZC9TTVxcbm9waXVtL01cXG5vcG9zc3VtL01TXFxub3BwXFxub3Bwb25lbnQvU01cXG5vcHBvcnR1bmUvSVlcXG5vcHBvcnR1bmlzbS9NXFxub3Bwb3J0dW5pc3QvU01cXG5vcHBvcnR1bmlzdGljXFxub3Bwb3J0dW5pc3RpY2FsbHlcXG5vcHBvcnR1bml0eS9TTVxcbm9wcG9zZS9EU0dcXG5vcHBvc2VkL1VcXG5vcHBvc2l0ZS9TTVlOWFxcbm9wcG9zaXRpb24vTVxcbm9wcHJlc3MvRFNHVlxcbm9wcHJlc3Npb24vTVxcbm9wcHJlc3NpdmUvWVBcXG5vcHByZXNzaXZlbmVzcy9NXFxub3BwcmVzc29yL01TXFxub3Bwcm9icmlvdXMvWVxcbm9wcHJvYnJpdW0vTVxcbm9wdC9TR0RcXG5vcHRpYy9NU1xcbm9wdGljYWwvWVxcbm9wdGljaWFuL1NNXFxub3B0aWNzL01cXG5vcHRpbWFcXG5vcHRpbWFsL1lcXG5vcHRpbWlzbS9TTVxcbm9wdGltaXN0L1NNXFxub3B0aW1pc3RpY1xcbm9wdGltaXN0aWNhbGx5XFxub3B0aW1pemF0aW9uL01TXFxub3B0aW1pemUvRFJTR1xcbm9wdGltdW0vU01cXG5vcHRpb24vU01ER1xcbm9wdGlvbmFsL1lcXG5vcHRvbWV0cmlzdC9NU1xcbm9wdG9tZXRyeS9NXFxub3B1bGVuY2UvTVxcbm9wdWxlbnQvWVxcbm9wdXMvTVNcXG5vclxcbm9yYWNsZS9TTVxcbm9yYWN1bGFyXFxub3JhbC9NWVNcXG5vcmFsaXR5XFxub3JhbmdlL1NNUFxcbm9yYW5nZWFkZS9NU1xcbm9yYW5nZXJ5L1NNXFxub3Jhbmd1dGFuL1NNXFxub3JhdGUvR05YRFNcXG5vcmF0aW9uL01cXG5vcmF0b3IvU01cXG5vcmF0b3JpY2FsL1lcXG5vcmF0b3Jpby9NU1xcbm9yYXRvcnkvU01cXG5vcmIvU01cXG5vcmJpY3VsYXJcXG5vcmJpdC9NRFJaR1NcXG5vcmJpdGFsL1NNXFxub3JiaXRlci9NXFxub3JjL1NNXFxub3JjaGFyZC9TTVxcbm9yY2hlc3RyYS9NU1xcbm9yY2hlc3RyYWxcXG5vcmNoZXN0cmF0ZS9EU1hHTlxcbm9yY2hlc3RyYXRpb24vTVxcbm9yY2hpZC9TTVxcbm9yZGFpbi9TRExHXFxub3JkYWlubWVudC9NXFxub3JkZWFsL1NNXFxub3JkZXIvRUFNREdTXFxub3JkZXJlZC9VXFxub3JkZXJpbmdzXFxub3JkZXJsaW5lc3MvRU1cXG5vcmRlcmx5L1BTTVxcbm9yZGluYWwvU01cXG5vcmRpbmFuY2UvU01cXG5vcmRpbmFyaWx5XFxub3JkaW5hcmluZXNzL01cXG5vcmRpbmFyeS9TTVBcXG5vcmRpbmF0ZS9NTlNYXFxub3JkaW5hdGlvbi9NXFxub3JkbmFuY2UvTVxcbm9yZHVyZS9NXFxub3JlL1NNXFxub3JlZ2Fuby9NXFxub3JnXFxub3JnYW4vTVNcXG5vcmdhbmR5L01cXG5vcmdhbmVsbGUvTVNcXG5vcmdhbmljL1NNXFxub3JnYW5pY2FsbHkvSVxcbm9yZ2FuaXNtL01TXFxub3JnYW5pc21pY1xcbm9yZ2FuaXN0L01TXFxub3JnYW5pemF0aW9uL0FTTVxcbm9yZ2FuaXphdGlvbmFsL1lcXG5vcmdhbml6ZS9BRVNER1xcbm9yZ2FuaXplZC9VXFxub3JnYW5pemVyL01TXFxub3JnYW56YS9NXFxub3JnYXNtL1NNXFxub3JnYXNtaWNcXG5vcmdpYXN0aWNcXG5vcmd5L1NNXFxub3JpZWwvTVNcXG5vcmllbnQnc1xcbm9yaWVudC9BRURHU1xcbm9yaWVudGFsL01TXFxub3JpZW50YWxpc3QvU1xcbm9yaWVudGF0ZS9FRFNHTlxcbm9yaWVudGF0aW9uL0FFTVxcbm9yaWVudGF0aW9uc1xcbm9yaWVudGVlcmluZ1xcbm9yaWZpY2UvTVNcXG5vcmlnXFxub3JpZ2FtaS9NXFxub3JpZ2luL1NNXFxub3JpZ2luYWwvTVlTXFxub3JpZ2luYWxpdHkvTVxcbm9yaWdpbmF0ZS9EU0dOXFxub3JpZ2luYXRpb24vTVxcbm9yaWdpbmF0b3IvU01cXG5vcmlvbGUvU01cXG5vcmlzb24vU01cXG5vcm1vbHUvTVxcbm9ybmFtZW50L1NHTURcXG5vcm5hbWVudGFsXFxub3JuYW1lbnRhdGlvbi9NXFxub3JuYXRlL1lQXFxub3JuYXRlbmVzcy9NXFxub3JuZXJpbmVzcy9NXFxub3JuZXJ5L1BSVFxcbm9ybml0aG9sb2dpY2FsXFxub3JuaXRob2xvZ2lzdC9NU1xcbm9ybml0aG9sb2d5L01cXG5vcm90dW5kXFxub3JvdHVuZGl0eS9TTVxcbm9ycGhhbi9TTURHXFxub3JwaGFuYWdlL01TXFxub3JyaXMvTVNcXG5vcnRob2RvbnRpYS9NXFxub3J0aG9kb250aWMvU1xcbm9ydGhvZG9udGljcy9NXFxub3J0aG9kb250aXN0L1NNXFxub3J0aG9kb3gvVVxcbm9ydGhvZG94eS9TTVxcbm9ydGhvZ29uYWxcXG5vcnRob2dvbmFsaXR5XFxub3J0aG9ncmFwaGljXFxub3J0aG9ncmFwaGljYWxseVxcbm9ydGhvZ3JhcGh5L1NNXFxub3J0aG9wZWRpYy9TXFxub3J0aG9wZWRpY3MvTVxcbm9ydGhvcGVkaXN0L01TXFxub3J6by9NXFxub3NjaWxsYXRlL0dORFNYXFxub3NjaWxsYXRpb24vTVxcbm9zY2lsbGF0b3IvU01cXG5vc2NpbGxhdG9yeVxcbm9zY2lsbG9zY29wZS9NU1xcbm9zY3VsYXRlL0RTWEdOXFxub3NjdWxhdGlvbi9NXFxub3NpZXIvTVNcXG5vc21pdW0vTVxcbm9zbW9zaXMvTVxcbm9zbW90aWNcXG5vc3ByZXkvU01cXG5vc3NpY2xlc1xcbm9zc2lmaWNhdGlvbi9NXFxub3NzaWZ5L05HRFNcXG5vc3RlbnNpYmxlXFxub3N0ZW5zaWJseVxcbm9zdGVudGF0aW9uL01cXG5vc3RlbnRhdGlvdXMvWVxcbm9zdGVvYXJ0aHJpdGlzL01cXG5vc3Rlb3BhdGgvTVxcbm9zdGVvcGF0aGljXFxub3N0ZW9wYXRoc1xcbm9zdGVvcGF0aHkvTVxcbm9zdGVvcG9yb3Npcy9NXFxub3N0bGVyL1NcXG5vc3RyYWNpc20vTVxcbm9zdHJhY2l6ZS9HRFNcXG5vc3RyaWNoL01TXFxub3RoZXIvTVNQXFxub3RoZXJ3aXNlXFxub3RoZXJ3b3JsZGx5XFxub3Rpb3NlXFxub3R0ZXIvTVNcXG5vdHRvbWFuL01TXFxub3VibGlldHRlL01TXFxub3VjaFxcbm91Z2h0XFxub3VnaHRuJ3RcXG5vdW5jZS9NU1xcbm91ci9TXFxub3Vyc2VsdmVzXFxub3VzdC9aR0RSU1xcbm91c3Rlci9NXFxub3V0L1NKR01EUlxcbm91dGFnZS9TTVxcbm91dGFyZ3VlL0dEU1xcbm91dGJhY2svTVNcXG5vdXRiYWxhbmNlL0RTR1xcbm91dGJpZC9TXFxub3V0YmlkZGluZ1xcbm91dGJvYXJkL01TXFxub3V0Ym9hc3QvRFNHXFxub3V0Ym91bmRcXG5vdXRib3gvTVNcXG5vdXRicmVhay9NU1xcbm91dGJ1aWxkaW5nL01TXFxub3V0YnVyc3QvU01cXG5vdXRjYXN0L01TXFxub3V0Y2xhc3MvRFNHXFxub3V0Y29tZS9NU1xcbm91dGNyb3AvTVNcXG5vdXRjcm9wcGVkXFxub3V0Y3JvcHBpbmcvU01cXG5vdXRjcnkvU01cXG5vdXRkYXRlZFxcbm91dGRpZFxcbm91dGRpc3RhbmNlL0dEU1xcbm91dGRvL0dcXG5vdXRkb2VzXFxub3V0ZG9uZVxcbm91dGRvb3IvU1xcbm91dGRvb3JzL01cXG5vdXRkb29yc3lcXG5vdXRkcmF3L0dTXFxub3V0ZHJhd25cXG5vdXRkcmV3XFxub3V0ZXJjb3Vyc2VcXG5vdXRlcm1vc3RcXG5vdXRlcndlYXIvTVxcbm91dGZhY2UvR0RTXFxub3V0ZmFsbC9TXFxub3V0ZmllbGQvU01SWlxcbm91dGZpZWxkZXIvTVxcbm91dGZpZ2h0L1NHXFxub3V0Zml0L1NNXFxub3V0Zml0dGVkXFxub3V0Zml0dGVyL01TXFxub3V0Zml0dGluZ1xcbm91dGZsYW5rL0dTRFxcbm91dGZsb3cvTVNcXG5vdXRmb3VnaHRcXG5vdXRmb3gvR0RTXFxub3V0Z28vTUpHXFxub3V0Z29lc1xcbm91dGdyZXdcXG5vdXRncm93L0hHU1xcbm91dGdyb3duXFxub3V0Z3Jvd3RoL01cXG5vdXRncm93dGhzXFxub3V0Z3Vlc3MvR0RTXFxub3V0Z3VuL1NcXG5vdXRndW5uZWRcXG5vdXRndW5uaW5nXFxub3V0aGl0L1NcXG5vdXRoaXR0aW5nXFxub3V0aG91c2UvU01cXG5vdXRpbmcvTVxcbm91dGxhaWRcXG5vdXRsYW5kaXNoL1BZXFxub3V0bGFuZGlzaG5lc3MvTVxcbm91dGxhc3QvRFNHXFxub3V0bGF3L1NHTURcXG5vdXRsYXkvU0dNXFxub3V0bGV0L1NNXFxub3V0bGllci9TXFxub3V0bGluZS9NR0RTXFxub3V0bGl2ZS9HRFNcXG5vdXRsb29rL01TXFxub3V0bHlpbmdcXG5vdXRtYW5ldXZlci9HRFNcXG5vdXRtYXRjaC9HRFNcXG5vdXRtb2RlZFxcbm91dG51bWJlci9EU0dcXG5vdXRwYWNlL0dEU1xcbm91dHBhdGllbnQvTVNcXG5vdXRwZXJmb3JtL0dTRFxcbm91dHBsYWNlL0xcXG5vdXRwbGFjZW1lbnQvTVxcbm91dHBsYXkvR0RTXFxub3V0cG9pbnQvREdTXFxub3V0cG9zdC9NU1xcbm91dHBvdXJpbmcvTVNcXG5vdXRwcm9kdWNlL0RTR1xcbm91dHB1dC9TTVxcbm91dHB1dHRlZFxcbm91dHB1dHRpbmdcXG5vdXRyYWNlL0dEU1xcbm91dHJhZ2UvTUdEU1xcbm91dHJhZ2VvdXMvWVxcbm91dHJhblxcbm91dHJhbmsvR0RTXFxub3V0cmVcXG5vdXRyZWFjaC9NRFNHXFxub3V0cmlkZXIvTVNcXG5vdXRyaWdnZXIvU01cXG5vdXRyaWdodFxcbm91dHJ1bi9TXFxub3V0cnVubmluZ1xcbm91dHNjb3JlL0dEU1xcbm91dHNlbGwvR1NcXG5vdXRzZXQvU01cXG5vdXRzaGluZS9HU1xcbm91dHNob25lXFxub3V0c2hvdXQvR0RTXFxub3V0c2lkZS9NWlJTXFxub3V0c2lkZXIvTVxcbm91dHNpemUvTVNcXG5vdXRza2lydC9NU1xcbm91dHNtYXJ0L0dEU1xcbm91dHNvbGRcXG5vdXRzb3VyY2UvRFNHXFxub3V0c291cmNpbmcvTVxcbm91dHNwZW5kL1NHXFxub3V0c3BlbnRcXG5vdXRzcG9rZW4vWVBcXG5vdXRzcG9rZW5uZXNzL01cXG5vdXRzcHJlYWQvR1NcXG5vdXRzdGFuZGluZy9ZXFxub3V0c3RhdGlvbi9NU1xcbm91dHN0YXkvREdTXFxub3V0c3RyZXRjaC9EU0dcXG5vdXRzdHJpcC9TXFxub3V0c3RyaXBwZWRcXG5vdXRzdHJpcHBpbmdcXG5vdXR0YVxcbm91dHRha2UvTVNcXG5vdXR2b3RlL0dEU1xcbm91dHdhcmQvWVNcXG5vdXR3ZWFyL0dTXFxub3V0d2VpZ2gvR0RcXG5vdXR3ZWlnaHNcXG5vdXR3aXQvU1xcbm91dHdpdGhcXG5vdXR3aXR0ZWRcXG5vdXR3aXR0aW5nXFxub3V0d29yZVxcbm91dHdvcmsvTURSU1pHXFxub3V0d29yblxcbm91em8vTVNcXG5vdmFcXG5vdmFsL01TXFxub3Zhcmlhblxcbm92YXJ5L1NNXFxub3ZhdGUvTlhcXG5vdmF0aW9uL01cXG5vdmVuL01TXFxub3ZlbmJpcmQvU01cXG5vdmVucHJvb2ZcXG5vdmVud2FyZVxcbm92ZXIvTVlTXFxub3ZlcmFidW5kYW5jZS9NXFxub3ZlcmFidW5kYW50XFxub3ZlcmFjaGlldmUvWkdEUlNcXG5vdmVyYWNoaWV2ZXIvTVxcbm92ZXJhY3QvR1ZTRFxcbm92ZXJhZ2UvU01cXG5vdmVyYWdncmVzc2l2ZVxcbm92ZXJhbGwvU01cXG5vdmVyYWxscy9NXFxub3ZlcmFtYml0aW91c1xcbm92ZXJhbnhpb3VzXFxub3ZlcmFyY2hpbmdcXG5vdmVyYXJtL0dTRFxcbm92ZXJhdGVcXG5vdmVyYXR0ZW50aXZlXFxub3ZlcmF3ZS9EU0dcXG5vdmVyYmFsYW5jZS9NR0RTXFxub3ZlcmJlYXIvR1NcXG5vdmVyYmVhcmluZy9ZXFxub3ZlcmJpZC9TTVxcbm92ZXJiaWRkaW5nXFxub3ZlcmJpdGUvTVNcXG5vdmVyYmxvd25cXG5vdmVyYm9hcmRcXG5vdmVyYm9sZFxcbm92ZXJib29rL0RHU1xcbm92ZXJib3JlXFxub3ZlcmJvcm5lXFxub3ZlcmJvdWdodFxcbm92ZXJidWlsZC9TR1xcbm92ZXJidWlsdFxcbm92ZXJidXJkZW4vR1NEXFxub3ZlcmJ1eS9HU1xcbm92ZXJjYW1lXFxub3ZlcmNhcGFjaXR5L01cXG5vdmVyY2FwaXRhbGl6ZS9EU0dcXG5vdmVyY2FyZWZ1bFxcbm92ZXJjYXN0L01HU1xcbm92ZXJjYXV0aW91c1xcbm92ZXJjaGFyZ2UvRFNNR1xcbm92ZXJjbG9jay9HRFxcbm92ZXJjbG91ZC9TR0RcXG5vdmVyY29hdC9NU1xcbm92ZXJjb21lL0dTXFxub3ZlcmNvbXBlbnNhdGUvRFNHTlxcbm92ZXJjb21wZW5zYXRpb24vTVxcbm92ZXJjb25maWRlbmNlL01cXG5vdmVyY29uZmlkZW50XFxub3ZlcmNvbnNjaWVudGlvdXNcXG5vdmVyY29vay9ER1NcXG5vdmVyY3JpdGljYWxcXG5vdmVyY3Jvd2QvU0RHXFxub3ZlcmNyb3dkaW5nL01cXG5vdmVyZGVjb3JhdGUvRFNHXFxub3ZlcmRlcGVuZGVudFxcbm92ZXJkZXZlbG9wL1NER1xcbm92ZXJkaWRcXG5vdmVyZG8vR1xcbm92ZXJkb2VzXFxub3ZlcmRvbmVcXG5vdmVyZG9zZS9NR0RTXFxub3ZlcmRyYWZ0L1NNXFxub3ZlcmRyYXcvR1NcXG5vdmVyZHJhd25cXG5vdmVyZHJlc3MvR01EU1xcbm92ZXJkcmV3XFxub3ZlcmRyaXZlL1NNXFxub3ZlcmR1Yi9TTVxcbm92ZXJkdWJiZWRcXG5vdmVyZHViYmluZ1xcbm92ZXJkdWVcXG5vdmVyZWFnZXJcXG5vdmVyZWF0L0dTTlxcbm92ZXJlbW90aW9uYWxcXG5vdmVyZW1waGFzaXMvTVxcbm92ZXJlbXBoYXNpemUvR0RTXFxub3ZlcmVudGh1c2lhc3RpY1xcbm92ZXJlc3RpbWF0ZS9NR05EU1xcbm92ZXJlc3RpbWF0aW9uL01cXG5vdmVyZXhjaXRlL0RTR1xcbm92ZXJleGVyY2lzZS9HRFNcXG5vdmVyZXhlcnQvU0RHXFxub3ZlcmV4ZXJ0aW9uL01cXG5vdmVyZXhwb3NlL0dEU1xcbm92ZXJleHBvc3VyZS9NXFxub3ZlcmV4dGVuZC9ER1NcXG5vdmVyZmVkXFxub3ZlcmZlZWQvR1NcXG5vdmVyZmlsbC9ER1NcXG5vdmVyZmxld1xcbm92ZXJmbGlnaHQvTVNcXG5vdmVyZmxvdy9NRFNHXFxub3ZlcmZsb3duXFxub3ZlcmZseS9HU1xcbm92ZXJmb25kXFxub3ZlcmZ1bGxcXG5vdmVyZ2VuZXJhbGl6ZS9EU0dcXG5vdmVyZ2VuZXJvdXNcXG5vdmVyZ3JhemUvRFNHXFxub3ZlcmdyZXdcXG5vdmVyZ3JvdW5kXFxub3Zlcmdyb3cvSFNHXFxub3Zlcmdyb3duXFxub3Zlcmdyb3d0aC9NXFxub3ZlcmhhbmQvTURTXFxub3ZlcmhhbmcvTVNHXFxub3Zlcmhhc3R5XFxub3ZlcmhhdWwvTURTR1xcbm92ZXJoZWFkL01TXFxub3ZlcmhlYXIvU0dcXG5vdmVyaGVhcmRcXG5vdmVyaGVhdC9EU0dcXG5vdmVyaHVuZ1xcbm92ZXJpbmR1bGdlL0dEU1xcbm92ZXJpbmR1bGdlbmNlL01cXG5vdmVyaW5kdWxnZW50XFxub3ZlcmluZmxhdGVkXFxub3ZlcmpveS9HU0RcXG5vdmVya2lsbC9NXFxub3ZlcmxhZGVuXFxub3ZlcmxhaWRcXG5vdmVybGFpblxcbm92ZXJsYW5kXFxub3ZlcmxhcC9TTVxcbm92ZXJsYXBwZWRcXG5vdmVybGFwcGluZ1xcbm92ZXJsYXJnZVxcbm92ZXJsYXkvR1NNXFxub3ZlcmxlYWZcXG5vdmVybGllXFxub3ZlcmxvYWQvR01EU1xcbm92ZXJsb25nXFxub3Zlcmxvb2svR01EU1xcbm92ZXJsb3JkL01TXFxub3Zlcmx5L1NHXFxub3Zlcm1hbm5lZFxcbm92ZXJtYW5uaW5nXFxub3Zlcm1hc3Rlci9TREdcXG5vdmVybW9kZXN0XFxub3Zlcm11Y2gvU1xcbm92ZXJuaWNlXFxub3Zlcm5pZ2h0L01TXFxub3Zlcm9wdGltaXNtL01cXG5vdmVyb3B0aW1pc3RpY1xcbm92ZXJwYWlkXFxub3ZlcnBhcnRpY3VsYXJcXG5vdmVycGFzcy9NU1xcbm92ZXJwYXkvR1NcXG5vdmVycGxheS9HRFNcXG5vdmVycG9wdWxhdGUvR05EU1xcbm92ZXJwb3B1bGF0aW9uL01cXG5vdmVycG93ZXIvU0RHXFxub3ZlcnBvd2VyaW5nL1lcXG5vdmVycHJhaXNlL0RTR1xcbm92ZXJwcmVjaXNlXFxub3ZlcnByaWNlL0RTR1xcbm92ZXJwcmludC9TTURHXFxub3ZlcnByb2R1Y2UvR0RTXFxub3ZlcnByb2R1Y3Rpb24vTVxcbm92ZXJwcm90ZWN0L1NER1ZcXG5vdmVycXVhbGlmaWVkXFxub3ZlcnJhblxcbm92ZXJyYXRlL0dEU1xcbm92ZXJyZWFjaC9HRFNcXG5vdmVycmVhY3QvU0RHXFxub3ZlcnJlYWN0aW9uL1NNXFxub3ZlcnJlZmluZWRcXG5vdmVycmlkZGVuXFxub3ZlcnJpZGUvTUdTXFxub3ZlcnJpcGUvTVxcbm92ZXJyb2RlXFxub3ZlcnJ1bGUvR0RTXFxub3ZlcnJ1bi9TTVxcbm92ZXJydW5uaW5nXFxub3ZlcnNhbXBsaW5nXFxub3ZlcnNhd1xcbm92ZXJzZWEvU1xcbm92ZXJzZWUvUlNaXFxub3ZlcnNlZWluZ1xcbm92ZXJzZWVuXFxub3ZlcnNlZXIvTVxcbm92ZXJzZWxsL0dTXFxub3ZlcnNlbnNpdGl2ZS9QXFxub3ZlcnNlbnNpdGl2ZW5lc3MvTVxcbm92ZXJzZXhlZFxcbm92ZXJzaGFkb3cvRFNHXFxub3ZlcnNoYXJlL0RTR1xcbm92ZXJzaG9lL01TXFxub3ZlcnNob290L0dTXFxub3ZlcnNob3RcXG5vdmVyc2lnaHQvU01cXG5vdmVyc2ltcGxlXFxub3ZlcnNpbXBsaWZpY2F0aW9uL01cXG5vdmVyc2ltcGxpZnkvRFNOR1hcXG5vdmVyc2l6ZVxcbm92ZXJzbGVlcC9HU1xcbm92ZXJzbGVwdFxcbm92ZXJzb2xkXFxub3ZlcnNwZWNpYWxpemF0aW9uL01cXG5vdmVyc3BlY2lhbGl6ZS9HRFNcXG5vdmVyc3BlbmQvU0dcXG5vdmVyc3BlbnRcXG5vdmVyc3ByZWFkL0dTXFxub3ZlcnN0YWZmZWRcXG5vdmVyc3RhdGUvRFNMR1xcbm92ZXJzdGF0ZW1lbnQvTVNcXG5vdmVyc3RheS9EU0dcXG5vdmVyc3RlcC9TXFxub3ZlcnN0ZXBwZWRcXG5vdmVyc3RlcHBpbmdcXG5vdmVyc3RpbXVsYXRlL0RTR1xcbm92ZXJzdG9jay9HU0RcXG5vdmVyc3RyZXRjaC9HRFNcXG5vdmVyc3RyaWN0XFxub3ZlcnN0cnVuZ1xcbm92ZXJzdHVmZmVkXFxub3ZlcnN1YnNjcmliZS9EU0dcXG5vdmVyc3VidGxlXFxub3ZlcnN1cHBseS9HRFNcXG5vdmVyc3VzcGljaW91c1xcbm92ZXJ0L1lcXG5vdmVydGFrZS9HU1xcbm92ZXJ0YWtlblxcbm92ZXJ0YXgvR0RTXFxub3ZlcnRoaW5rL1NHXFxub3ZlcnRob3VnaHRcXG5vdmVydGhyZXdcXG5vdmVydGhyb3cvU01HXFxub3ZlcnRocm93blxcbm92ZXJ0aW1lL01TXFxub3ZlcnRpcmUvR0RTXFxub3ZlcnRvbmUvTVNcXG5vdmVydG9va1xcbm92ZXJ0dXJlL01TXFxub3ZlcnR1cm4vRFNHXFxub3ZlcnVzZS9EU01HXFxub3ZlcnZhbHVhdGlvbi9TXFxub3ZlcnZhbHVlL0RTR1xcbm92ZXJ2aWV3L01TXFxub3ZlcndlZW5pbmcvWVxcbm92ZXJ3ZWlnaHQvTVxcbm92ZXJ3aGVsbS9TR0RcXG5vdmVyd2hlbG1pbmcvWVxcbm92ZXJ3aW50ZXIvU0RHXFxub3ZlcndvcmsvR01EU1xcbm92ZXJ3cml0ZS9HU1xcbm92ZXJ3cml0dGVuXFxub3Zlcndyb3RlXFxub3Zlcndyb3VnaHRcXG5vdmVyemVhbG91c1xcbm92aWR1Y3QvU01cXG5vdmlwYXJvdXNcXG5vdm9pZC9NU1xcbm92dWxhclxcbm92dWxhdGUvRFNHTlxcbm92dWxhdGlvbi9NXFxub3Z1bGUvTVNcXG5vdnVtL01cXG5vd1xcbm93ZS9EU0dcXG5vd2wvU01cXG5vd2xldC9NU1xcbm93bGlzaC9ZXFxub3duL0VTR0RcXG5vd25lci9NU1xcbm93bmVyc2hpcC9NXFxub3gvTU5cXG5veGFsYXRlXFxub3hibG9vZC9NXFxub3hib3cvTVNcXG5veGNhcnQvU01cXG5veGZvcmQvU01cXG5veGlkYW50L01TXFxub3hpZGFzZVxcbm94aWRhdGlvbi9NXFxub3hpZGF0aXZlXFxub3hpZGUvTVNcXG5veGlkaXphdGlvbi9NXFxub3hpZGl6ZS9aR0RSU1xcbm94aWRpemVyL01cXG5veHRhaWwvU1xcbm94eWFjZXR5bGVuZS9NXFxub3h5Z2VuL01cXG5veHlnZW5hdGUvRFNHTlxcbm94eWdlbmF0aW9uL01cXG5veHltb3JhXFxub3h5bW9yb24vTVxcbm95c3Rlci9TTVxcbm96XFxub3pvbmUvTVxcbnAvTlJYVEdKXFxucEhcXG5wYS9TTUhcXG5wYWJsdW0vTVxcbnBhYnVsdW0vTVxcbnBhY2UvTVpHRFJTXFxucGFjZW1ha2VyL1NNXFxucGFjZXIvTVxcbnBhY2VzZXR0ZXIvU01cXG5wYWNleVxcbnBhY2h5ZGVybS9NU1xcbnBhY2h5c2FuZHJhL01TXFxucGFjaWZpY1xcbnBhY2lmaWNhbGx5XFxucGFjaWZpY2F0aW9uL01cXG5wYWNpZmllci9NXFxucGFjaWZpc20vTVxcbnBhY2lmaXN0L1NNXFxucGFjaWZpc3RpY1xcbnBhY2lmeS9aR0RSU05cXG5wYWNrJ3NcXG5wYWNrL0FVR1NEXFxucGFja2FnZSdzXFxucGFja2FnZS9BR0RTXFxucGFja2FnZXIvU01cXG5wYWNrYWdpbmcvTVxcbnBhY2tlci9NU1xcbnBhY2tldC9NU1xcbnBhY2tpbmcnc1xcbnBhY2tpbmdob3VzZS9TTVxcbnBhY2tzYWRkbGUvTVNcXG5wYWN0L01TXFxucGFjeS9SVFxcbnBhZC9TTVxcbnBhZGRlZFxcbnBhZGRpbmcvTVxcbnBhZGRsZS9NWkdEUlNcXG5wYWRkbGVyL01cXG5wYWRkb2NrL01ER1NcXG5wYWRkeS9TTVxcbnBhZGxvY2svTURTR1xcbnBhZHJlL1NNXFxucGFlYW4vU01cXG5wYWVsbGEvTVNcXG5wYWdhbi9TTVxcbnBhZ2FuaXNtL01cXG5wYWdlL01aR0RSU1xcbnBhZ2VhbnQvTVNcXG5wYWdlYW50cnkvTVxcbnBhZ2Vib3kvU01cXG5wYWdlci9NXFxucGFnaW5hdGUvRFNHTlxcbnBhZ2luYXRpb24vTVxcbnBhZ29kYS9NU1xcbnBhaFxcbnBhaWQvQVVcXG5wYWlsL01TXFxucGFpbGZ1bC9TTVxcbnBhaW4vTURTR1xcbnBhaW5mdWwvUFlcXG5wYWluZnVsbGVyXFxucGFpbmZ1bGxlc3RcXG5wYWluZnVsbmVzcy9NXFxucGFpbmtpbGxlci9NU1xcbnBhaW5raWxsaW5nXFxucGFpbmxlc3MvUFlcXG5wYWlubGVzc25lc3MvTVxcbnBhaW5zdGFraW5nL01ZXFxucGFpbnQvU1pHSk1EUlxcbnBhaW50YmFsbFxcbnBhaW50Ym94L01TXFxucGFpbnRicnVzaC9NU1xcbnBhaW50ZWQvVVxcbnBhaW50ZXIvTVlcXG5wYWludGluZy9NXFxucGFpbnR3b3JrXFxucGFpci9BTURTR1xcbnBhaXJlZC9VXFxucGFpcmluZy9TXFxucGFpcndpc2VcXG5wYWlzbGV5L1NNXFxucGFqYW1hL1NcXG5wYWphbWFzL01cXG5wYWwvU01ZXFxucGFsYWNlL01TXFxucGFsYWRpbi9TTVxcbnBhbGFucXVpbi9TTVxcbnBhbGF0YWJsZS9VXFxucGFsYXRhbC9TTVxcbnBhbGF0YWxpemF0aW9uL01cXG5wYWxhdGFsaXplL0dEU1xcbnBhbGF0ZS9NQlNcXG5wYWxhdGlhbC9ZXFxucGFsYXRpbmF0ZS9NU1xcbnBhbGF0aW5lL01TXFxucGFsYXZlci9HU01EXFxucGFsYXp6aVxcbnBhbGF6em9cXG5wYWxlL01ZVEdQRFJTSlxcbnBhbGVmYWNlL01TXFxucGFsZW5lc3MvTVxcbnBhbGVvXFxucGFsZW9ncmFwaGVyL01TXFxucGFsZW9ncmFwaHkvTVxcbnBhbGVvbGl0aGljXFxucGFsZW9udG9sb2dpc3QvU01cXG5wYWxlb250b2xvZ3kvTVxcbnBhbGV0dGUvU01cXG5wYWxmcmV5L1NNXFxucGFsaW1vbnkvTVxcbnBhbGltcHNlc3QvTVNcXG5wYWxpbmRyb21lL01TXFxucGFsaW5kcm9taWNcXG5wYWxpbmcvTVxcbnBhbGlzYWRlL1NNXFxucGFsaXNoXFxucGFsbC9NRFNHXFxucGFsbGFkaXVtL01cXG5wYWxsYmVhcmVyL01TXFxucGFsbGV0L01TXFxucGFsbGlhdGUvRFNHTlZcXG5wYWxsaWF0aW9uL01cXG5wYWxsaWF0aXZlL1NNXFxucGFsbGlkL1lQXFxucGFsbGlkbmVzcy9NXFxucGFsbG9yL01cXG5wYWxtL01EU0dcXG5wYWxtYXRlXFxucGFsbWV0dG8vU01cXG5wYWxtaXN0L1NNXFxucGFsbWlzdHJ5L01cXG5wYWxtdG9wL1NNXFxucGFsbXkvVFJcXG5wYWxvbWluby9NU1xcbnBhbHBhYmxlXFxucGFscGFibHlcXG5wYWxwYXRlL0RTR05cXG5wYWxwYXRpb24vTVxcbnBhbHBpdGF0ZS9YR05EU1xcbnBhbHBpdGF0aW9uL01cXG5wYWxzeS9HRFNNXFxucGFsdHJpbmVzcy9NXFxucGFsdHJ5L1JQVFxcbnBhbXBhcy9NXFxucGFtcGVyL0RTR1xcbnBhbXBobGV0L01TXFxucGFtcGhsZXRlZXIvTVNcXG5wYW4vU01cXG5wYW5hY2VhL1NNXFxucGFuYWNoZS9NXFxucGFuYW1hL01TXFxucGFuYXRlbGxhL1NcXG5wYW5jYWtlL0RTTUdcXG5wYW5jaHJvbWF0aWNcXG5wYW5jcmVhcy9NU1xcbnBhbmNyZWF0aWNcXG5wYW5jcmVhdGl0aXNcXG5wYW5kYS9TTVxcbnBhbmRlbWljL1NNXFxucGFuZGVtb25pdW0vTVxcbnBhbmRlci9NRFJaR1NcXG5wYW5kZXJlci9NXFxucGFuZS9LTVxcbnBhbmVneXJpYy9TTVxcbnBhbmVsL1NHSk1EXFxucGFuZWxpbmcvTVxcbnBhbmVsaXN0L01TXFxucGFuZXNcXG5wYW5nL01TXFxucGFuaGFuZGxlL0RSU01aR1xcbnBhbmhhbmRsZXIvTVxcbnBhbmljL1NNXFxucGFuaWNrZWRcXG5wYW5pY2tpbmdcXG5wYW5pY2t5XFxucGFubmVkXFxucGFubmllci9TTVxcbnBhbm5pbmdcXG5wYW5vcGx5L1NNXFxucGFub3JhbWEvU01cXG5wYW5vcmFtaWNcXG5wYW5waXBlcy9NXFxucGFuc3kvU01cXG5wYW50L01EU0dcXG5wYW50YWxvb25zL01cXG5wYW50ZWNobmljb24vU1xcbnBhbnRoZWlzbS9NXFxucGFudGhlaXN0L1NNXFxucGFudGhlaXN0aWNcXG5wYW50aGVvbi9TTVxcbnBhbnRoZXIvTVNcXG5wYW50aWUvTVNcXG5wYW50by9TXFxucGFudG9taW1lL01HRFNcXG5wYW50b21pbWljXFxucGFudG9taW1pc3QvU01cXG5wYW50cnkvU01cXG5wYW50c3VpdC9TTVxcbnBhbnR5aG9zZS9NXFxucGFudHlsaW5lci9NXFxucGFudHl3YWlzdC9TTVxcbnBhcC9TTVxcbnBhcGEvTVNcXG5wYXBhY3kvU01cXG5wYXBhbFxcbnBhcGFyYXp6aS9NXFxucGFwYXJhenpvXFxucGFwYXlhL01TXFxucGFwZXIvU1pHTURSXFxucGFwZXJiYWNrL1NNXFxucGFwZXJiYXJrL1NcXG5wYXBlcmJvYXJkL01cXG5wYXBlcmJveS9TTVxcbnBhcGVyY2xpcC9TXFxucGFwZXJlci9NXFxucGFwZXJnaXJsL1NNXFxucGFwZXJoYW5nZXIvU01cXG5wYXBlcmhhbmdpbmcvTVxcbnBhcGVybGVzc1xcbnBhcGVyd2VpZ2h0L01TXFxucGFwZXJ3b3JrL01cXG5wYXBlcnlcXG5wYXBpbGxhL01cXG5wYXBpbGxhZVxcbnBhcGlsbGFyeVxcbnBhcGlzdC9NU1xcbnBhcG9vc2UvTVNcXG5wYXBweS9TTVxcbnBhcHJpa2EvTVxcbnBhcHlyaVxcbnBhcHlydXMvTVxcbnBhci9TWkdNRFJCSlxcbnBhcmEvTVNcXG5wYXJhYmxlL01TXFxucGFyYWJvbGEvU01cXG5wYXJhYm9saWNcXG5wYXJhY2V0YW1vbC9TXFxucGFyYWNodXRlL0RTTUdcXG5wYXJhY2h1dGlzdC9NU1xcbnBhcmFkZS9NWkdEUlNcXG5wYXJhZGVyL01cXG5wYXJhZGlnbS9TTVxcbnBhcmFkaWdtYXRpY1xcbnBhcmFkaXNhaWNhbFxcbnBhcmFkaXNlL1NNXFxucGFyYWRveC9NU1xcbnBhcmFkb3hpY2FsL1lcXG5wYXJhZmZpbi9NXFxucGFyYWdsaWRpbmdcXG5wYXJhZ29uL01TXFxucGFyYWdyYXBoL0dNRFxcbnBhcmFncmFwaHNcXG5wYXJha2VldC9TTVxcbnBhcmFsZWdhbC9NU1xcbnBhcmFsbGF4L01TXFxucGFyYWxsZWwvU0dNRFxcbnBhcmFsbGVsZWQvVVxcbnBhcmFsbGVsaXNtL01TXFxucGFyYWxsZWxpemF0aW9uXFxucGFyYWxsZWxpemVkXFxucGFyYWxsZWxvZ3JhbS9TTVxcbnBhcmFseXNlc1xcbnBhcmFseXNpcy9NXFxucGFyYWx5dGljL1NNXFxucGFyYWx5emUvRFNHXFxucGFyYWx5emluZy9ZXFxucGFyYW1hZ25ldGljXFxucGFyYW1lY2lhXFxucGFyYW1lY2l1bS9NXFxucGFyYW1lZGljL01TXFxucGFyYW1lZGljYWwvTVNcXG5wYXJhbWV0ZXIvTVNcXG5wYXJhbWV0ZXJpemUvRFxcbnBhcmFtZXRyaWNcXG5wYXJhbWlsaXRhcnkvU01cXG5wYXJhbW91bnRcXG5wYXJhbW91bnRjeVxcbnBhcmFtb3VyL1NNXFxucGFyYW5vaWEvTVxcbnBhcmFub2lhYy9NU1xcbnBhcmFub2lkL1NNXFxucGFyYW5vcm1hbFxcbnBhcmFwZXQvTVNcXG5wYXJhcGhlcm5hbGlhL01cXG5wYXJhcGhyYXNlL0RTTUdcXG5wYXJhcGxlZ2lhL01cXG5wYXJhcGxlZ2ljL1NNXFxucGFyYXByb2Zlc3Npb25hbC9NU1xcbnBhcmFwc3ljaG9sb2dpc3QvTVNcXG5wYXJhcHN5Y2hvbG9neS9NXFxucGFyYXF1YXQvTVxcbnBhcmFzYWlsaW5nXFxucGFyYXNjZW5kaW5nXFxucGFyYXNpdGUvU01cXG5wYXJhc2l0aWNcXG5wYXJhc2l0aWNhbC9ZXFxucGFyYXNpdGlzbS9NXFxucGFyYXNvbC9NU1xcbnBhcmFzeW1wYXRoZXRpYy9TXFxucGFyYXRoaW9uL01cXG5wYXJhdGh5cm9pZC9NU1xcbnBhcmF0cm9vcC9SWlNcXG5wYXJhdHJvb3Blci9NXFxucGFyYXRyb29wcy9NXFxucGFyYXR5cGhvaWQvTVxcbnBhcmJvaWwvRFNHXFxucGFyY2VsL0dNRFNcXG5wYXJjaC9MR0RTXFxucGFyY2htZW50L1NNXFxucGFyZG5lci9TXFxucGFyZG9uL1pHTURSQlNcXG5wYXJkb25hYmxlL1VcXG5wYXJkb25hYmx5L1VcXG5wYXJkb25lci9NXFxucGFyZS9TXFxucGFyZWdvcmljL01cXG5wYXJlbnQvR01EU1xcbnBhcmVudGFnZS9NXFxucGFyZW50YWxcXG5wYXJlbnRoZXNlc1xcbnBhcmVudGhlc2lzL01cXG5wYXJlbnRoZXNpemUvRFNHXFxucGFyZW50aGV0aWNcXG5wYXJlbnRoZXRpY2FsL1lcXG5wYXJlbnRob29kL01cXG5wYXJlbnRpbmcvTVxcbnBhcmVyL01cXG5wYXJlcy9TXFxucGFyZXNpcy9NXFxucGFyZmFpdC9NU1xcbnBhcmlhaC9NXFxucGFyaWFoc1xcbnBhcmlidXNcXG5wYXJpZXRhbFxcbnBhcmltdXR1ZWwvTVNcXG5wYXJpbmcvTVxcbnBhcmlzaC9NU1xcbnBhcmlzaGlvbmVyL01TXFxucGFyaXR5L0VTTVxcbnBhcmsvTURTR1xcbnBhcmthL1NNXFxucGFya2luZy9NXFxucGFya2xhbmRcXG5wYXJrb3VyXFxucGFya3dheS9NU1xcbnBhcmt5XFxucGFybGFuY2UvTVxcbnBhcmxheS9HTURTXFxucGFybGV5L0dNRFNcXG5wYXJsaWFtZW50L1NNXFxucGFybGlhbWVudGFyaWFuL1NNXFxucGFybGlhbWVudGFyeVxcbnBhcmxvci9NU1xcbnBhcmxvdXNcXG5wYXJtaWdpYW5hXFxucGFyb2NoaWFsL1lcXG5wYXJvY2hpYWxpc20vTVxcbnBhcm9kaXN0L1NNXFxucGFyb2R5L0dEU01cXG5wYXJvbGUvTUdEU1xcbnBhcm9sZWUvTVNcXG5wYXJvdGlkXFxucGFyb3h5c20vU01cXG5wYXJveHlzbWFsXFxucGFycXVldC9NRFNHXFxucGFycXVldHJ5L01cXG5wYXJyZWRcXG5wYXJyaWNpZGFsXFxucGFycmljaWRlL01TXFxucGFycmluZ1xcbnBhcnJvdC9HTURTXFxucGFycnkvR0RTTVxcbnBhcnNlL0RSU0dcXG5wYXJzZWMvTVNcXG5wYXJzaW1vbmlvdXMvWVxcbnBhcnNpbW9ueS9NXFxucGFyc2xleS9NXFxucGFyc25pcC9NU1xcbnBhcnNvbi9NU1xcbnBhcnNvbmFnZS9NU1xcbnBhcnQnc1xcbnBhcnQvQ0RTR1xcbnBhcnRha2UvWkdSU1xcbnBhcnRha2VuXFxucGFydGFrZXIvTVxcbnBhcnRlcnJlL1NNXFxucGFydGhlbm9nZW5lc2lzL01cXG5wYXJ0aWFsL01ZU1xcbnBhcnRpYWxpdHkvTVxcbnBhcnRpY2lwYW50L1NNXFxucGFydGljaXBhdGUvRFNHTlxcbnBhcnRpY2lwYXRpb24vTVxcbnBhcnRpY2lwYXRvci9NU1xcbnBhcnRpY2lwYXRvcnlcXG5wYXJ0aWNpcGlhbC9NXFxucGFydGljaXBsZS9NU1xcbnBhcnRpY2xlL1NNXFxucGFydGljbGVib2FyZC9NXFxucGFydGljdWxhci9TTVlcXG5wYXJ0aWN1bGFyaXR5L1NNXFxucGFydGljdWxhcml6YXRpb24vTVxcbnBhcnRpY3VsYXJpemUvRFNHXFxucGFydGljdWxhdGUvU01cXG5wYXJ0aW5nL01TXFxucGFydGlzYW4vU01cXG5wYXJ0aXNhbnNoaXAvTVxcbnBhcnRpdGlvbi9HTURTXFxucGFydGl0aXZlL01TXFxucGFydGx5XFxucGFydG5lci9NRFNHXFxucGFydG5lcnNoaXAvTVNcXG5wYXJ0b29rXFxucGFydHJpZGdlL1NNXFxucGFydHVyaXRpb24vTVxcbnBhcnR3YXlcXG5wYXJ0eS9HRFNNXFxucGFydmVudS9NU1xcbnBhc2NhbC9NU1xcbnBhc2NoYWxcXG5wYXNoYS9TTVxcbnBhc3MvTVxcbnBhc3NhYmx5XFxucGFzc2FnZS9NU1xcbnBhc3NhZ2V3YXkvTVNcXG5wYXNzYm9vay9NU1xcbnBhc3NlL0RSU0JYWkdOVlxcbnBhc3NlbC9NU1xcbnBhc3Nlbmdlci9TTVxcbnBhc3Nlci9NXFxucGFzc2VyYnkvTVxcbnBhc3NlcnNieVxcbnBhc3NpbVxcbnBhc3NpbmcvTVlcXG5wYXNzaW9uL0VNXFxucGFzc2lvbmF0ZS9FWVxcbnBhc3Npb25mbG93ZXIvU01cXG5wYXNzaW9ubGVzc1xcbnBhc3NpdmUvUE1ZU1xcbnBhc3NpdmVuZXNzL01cXG5wYXNzaXZpdHkvTVxcbnBhc3Npdml6YXRpb25cXG5wYXNzaXZpemUvRFNHXFxucGFzc2tleS9NU1xcbnBhc3NwaHJhc2UvU1xcbnBhc3Nwb3J0L01TXFxucGFzc3dvcmQvTVNcXG5wYXN0L0FNU1xcbnBhc3RhL1NNXFxucGFzdGUvRFNNR1xcbnBhc3RlYm9hcmQvTVxcbnBhc3RlbC9NU1xcbnBhc3Rlcm4vTVNcXG5wYXN0ZXVyaXphdGlvbi9NXFxucGFzdGV1cml6ZS9aR0RSU1xcbnBhc3RldXJpemVkL1VcXG5wYXN0ZXVyaXplci9NXFxucGFzdGljaGUvTVNcXG5wYXN0aWVcXG5wYXN0aWxsZS9NU1xcbnBhc3RpbWUvTVNcXG5wYXN0aW5lc3MvTVxcbnBhc3Rvci9NU1xcbnBhc3RvcmFsL01TXFxucGFzdG9yYXRlL01TXFxucGFzdHJhbWkvTVxcbnBhc3RyeS9TTVxcbnBhc3R1cmFnZS9NXFxucGFzdHVyZS9EU01HXFxucGFzdHVyZWxhbmQvTVxcbnBhc3R5L1BUUlNNXFxucGF0L1NNXFxucGF0Y2gvRUdNRFNcXG5wYXRjaGlseVxcbnBhdGNoaW5lc3MvTVxcbnBhdGNob3VsaVxcbnBhdGNod29yay9TTVxcbnBhdGNoeS9UUFJcXG5wYXRlL01TXFxucGF0ZWxsYS9NU1xcbnBhdGVsbGFlXFxucGF0ZW50L0dNRFlTXFxucGF0ZXJmYW1pbGlhcy9NU1xcbnBhdGVybmFsL1lcXG5wYXRlcm5hbGlzbS9NXFxucGF0ZXJuYWxpc3QvU1xcbnBhdGVybmFsaXN0aWNcXG5wYXRlcm5pdHkvTVxcbnBhdGVybm9zdGVyL01TXFxucGF0aC9NXFxucGF0aGV0aWNcXG5wYXRoZXRpY2FsbHlcXG5wYXRoZmluZGVyL1NNXFxucGF0aGxlc3NcXG5wYXRob2dlbi9TTVxcbnBhdGhvZ2VuaWNcXG5wYXRob2xvZ2ljYWwvWVxcbnBhdGhvbG9naXN0L1NNXFxucGF0aG9sb2d5L01cXG5wYXRob3MvTVxcbnBhdGhzXFxucGF0aHdheS9NU1xcbnBhdGllbmNlL01cXG5wYXRpZW50L0lNU1RcXG5wYXRpZW50ZXJcXG5wYXRpZW50bHlcXG5wYXRpbmEvTVNcXG5wYXRpbmVcXG5wYXRpby9TTVxcbnBhdGlzc2VyaWUvU1xcbnBhdG9pcy9NXFxucGF0cmVzZmFtaWxpYXNcXG5wYXRyaWFyY2gvTVxcbnBhdHJpYXJjaGFsXFxucGF0cmlhcmNoYXRlL01TXFxucGF0cmlhcmNoc1xcbnBhdHJpYXJjaHkvU01cXG5wYXRyaWNpYW4vU01cXG5wYXRyaWNpZGFsXFxucGF0cmljaWRlL1NNXFxucGF0cmltb25pYWxcXG5wYXRyaW1vbnkvU01cXG5wYXRyaW90L1NNXFxucGF0cmlvdGljL1VcXG5wYXRyaW90aWNhbGx5XFxucGF0cmlvdGlzbS9NXFxucGF0cm9sL01TXFxucGF0cm9sbGVkXFxucGF0cm9sbGluZ1xcbnBhdHJvbG1hbi9NXFxucGF0cm9sbWVuXFxucGF0cm9sd29tYW4vTVxcbnBhdHJvbHdvbWVuXFxucGF0cm9uL01TXFxucGF0cm9uYWdlL01TXFxucGF0cm9uZXNzL01TXFxucGF0cm9uaXplL1pHRFJTXFxucGF0cm9uaXplci9NXFxucGF0cm9uaXppbmcvWVxcbnBhdHJvbnltaWMvU01cXG5wYXRyb255bWljYWxseVxcbnBhdHJvb24vU01cXG5wYXRzeS9TTVxcbnBhdHRlZFxcbnBhdHRlci9NREdTXFxucGF0dGVybi9TTURHXFxucGF0dGluZ1xcbnBhdHR5L1NNXFxucGF1Y2l0eS9NXFxucGF1bmNoL01TXFxucGF1bmNoeS9SVFxcbnBhdXBlci9NU1xcbnBhdXBlcmlzbS9NXFxucGF1cGVyaXplL0RTR1xcbnBhdXNlL0RTTUdcXG5wYXZlL0FHRFNcXG5wYXZlZC9VXFxucGF2ZW1lbnQvTVNcXG5wYXZpbGlvbi9TTVxcbnBhdmluZy9NU1xcbnBhdmxvdmEvU1xcbnBhdy9TR01EXFxucGF3bC9NU1xcbnBhd24vTURTR1xcbnBhd25icm9rZXIvTVNcXG5wYXduYnJva2luZy9NXFxucGF3bnNob3AvTVNcXG5wYXdwYXcvTVNcXG5wYXknc1xcbnBheS9BU0dCTFxcbnBheWJhY2svU01cXG5wYXljaGVjay9NU1xcbnBheWRheS9NU1xcbnBheWVkXFxucGF5ZWUvU01cXG5wYXllci9TTVxcbnBheWxvYWQvU01cXG5wYXltYXN0ZXIvU01cXG5wYXltZW50L0FTTVxcbnBheW9mZi9NU1xcbnBheW9sYS9NXFxucGF5b3V0L01TXFxucGF5cGhvbmUvU1xcbnBheXJvbGwvU01cXG5wYXlzbGlwL1NNXFxucGF5d2FsbC9TTVxcbnBheXdhcmVcXG5wY3RcXG5wZFxcbnBlYS9TTVxcbnBlYWNlL1NNXFxucGVhY2VhYmxlXFxucGVhY2VhYmx5XFxucGVhY2VmdWwvUFlcXG5wZWFjZWZ1bG5lc3MvTVxcbnBlYWNla2VlcGVyL1NNXFxucGVhY2VrZWVwaW5nL01cXG5wZWFjZW1ha2VyL01TXFxucGVhY2VtYWtpbmcvTVxcbnBlYWNldGltZS9NXFxucGVhY2gvTVNcXG5wZWFjaHkvVFJcXG5wZWFjb2NrL01TXFxucGVhZm93bC9NU1xcbnBlYWhlbi9NU1xcbnBlYWsvTURTR1xcbnBlYWt5XFxucGVhbC9BTURTR1xcbnBlYW51dC9NU1xcbnBlYXIvTVlTXFxucGVhcmwvU0dNRFxcbnBlYXJseS9SVFxcbnBlYXNhbnQvU01cXG5wZWFzYW50cnkvTVxcbnBlYXNob290ZXIvU01cXG5wZWF0L01cXG5wZWF0eS9UUlxcbnBlYmJsZS9NR0RTXFxucGViYmx5XFxucGVjYW4vU01cXG5wZWNjYWRpbGxvL01cXG5wZWNjYWRpbGxvZXNcXG5wZWNjYXJ5L1NNXFxucGVjay9NRFJTWkdcXG5wZWNraXNoXFxucGVjc1xcbnBlY3RpY1xcbnBlY3Rpbi9NXFxucGVjdG9yYWwvTVNcXG5wZWN0b3JhbGlzXFxucGVjdWxhdGUvR05EU1xcbnBlY3VsYXRpb24vTVxcbnBlY3VsYXRvci9TTVxcbnBlY3VsaWFyL1lcXG5wZWN1bGlhcml0eS9TTVxcbnBlY3VuaWFyeVxcbnBlZGFnb2dpY1xcbnBlZGFnb2dpY2FsL1lcXG5wZWRhZ29ndWUvU01cXG5wZWRhZ29neS9NXFxucGVkYWwvU0dNRFxcbnBlZGFsby9TXFxucGVkYW50L01TXFxucGVkYW50aWNcXG5wZWRhbnRpY2FsbHlcXG5wZWRhbnRyeS9NXFxucGVkZGxlL1pHRFJTXFxucGVkZGxlci9NXFxucGVkZXJhc3QvTVNcXG5wZWRlcmFzdHkvTVxcbnBlZGVzdGFsL01TXFxucGVkZXN0cmlhbi9TTVxcbnBlZGVzdHJpYW5pemF0aW9uXFxucGVkZXN0cmlhbml6ZS9HRFNcXG5wZWRpYXRyaWMvU1xcbnBlZGlhdHJpY2lhbi9NU1xcbnBlZGlhdHJpY3MvTVxcbnBlZGljYWIvU01cXG5wZWRpY3VyZS9NR0RTXFxucGVkaWN1cmlzdC9NU1xcbnBlZGlncmVlL01EU1xcbnBlZGltZW50L01TXFxucGVkb21ldGVyL01TXFxucGVkb3BoaWxlL1NcXG5wZWRvcGhpbGlhXFxucGVkdW5jbGUvTVNcXG5wZWUvRFJTTVpcXG5wZWVpbmdcXG5wZWVrL01EU0dcXG5wZWVrYWJvby9NXFxucGVlbC9NRFJTSlpHXFxucGVlbGVkL1VcXG5wZWVsZXIvTVxcbnBlZWxpbmcvTVxcbnBlZW4vTVNcXG5wZWVwL01EUlNaR1xcbnBlZXBib1xcbnBlZXBlci9NXFxucGVlcGhvbGUvTVNcXG5wZWVwc2hvdy9NU1xcbnBlZXIvTURHXFxucGVlcmFnZS9TTVxcbnBlZXJlc3MvTVNcXG5wZWVybGVzc1xcbnBlZXZlL0RTTUdcXG5wZWV2aXNoL1BZXFxucGVldmlzaG5lc3MvTVxcbnBlZXdlZS9NU1xcbnBlZXdpdC9TXFxucGVnL1NNXFxucGVnYm9hcmQvTVNcXG5wZWdnZWRcXG5wZWdnaW5nXFxucGVpZ25vaXIvU01cXG5wZWpvcmF0aW9uL01cXG5wZWpvcmF0aXZlL1NNWVxcbnBla2UvTVNcXG5wZWtpbmVzZXNcXG5wZWtpbmdlc2UvU01cXG5wZWtvZS9NXFxucGVsYWdpY1xcbnBlbGYvTVxcbnBlbGljYW4vTVNcXG5wZWxsYWdyYS9NXFxucGVsbGV0L0dNRFNcXG5wZWxsdWNpZFxcbnBlbG1ldC9TXFxucGVsdC9NRFNHXFxucGVsdmljXFxucGVsdmlzL01TXFxucGVtbWljYW4vTVxcbnBlbi9NXFxucGVuYWxcXG5wZW5hbGl6YXRpb24vTVxcbnBlbmFsaXplL0RTR1xcbnBlbmFsdHkvU01cXG5wZW5hbmNlL01TXFxucGVuY2VcXG5wZW5jaGFudC9TTVxcbnBlbmNpbC9HTURKU1xcbnBlbmQvQ0RTR1xcbnBlbmRhbnQvTVNcXG5wZW5kZW50L01TXFxucGVuZHVsb3VzXFxucGVuZHVsdW0vTVNcXG5wZW5ldHJhYmlsaXR5L01cXG5wZW5ldHJhYmxlXFxucGVuZXRyYXRlL0RTR05WWFxcbnBlbmV0cmF0aW5nL1lcXG5wZW5ldHJhdGlvbi9NXFxucGVuZnJpZW5kL1NcXG5wZW5ndWluL01TXFxucGVuaWNpbGxpbi9NXFxucGVuaWxlXFxucGVuaW5zdWxhL1NNXFxucGVuaW5zdWxhclxcbnBlbmlzL01TXFxucGVuaXRlbmNlL01cXG5wZW5pdGVudC9TTVlcXG5wZW5pdGVudGlhbFxcbnBlbml0ZW50aWFyeS9TTVxcbnBlbmtuaWZlL01cXG5wZW5rbml2ZXNcXG5wZW5saWdodC9TTVxcbnBlbm1hbi9NXFxucGVubWFuc2hpcC9NXFxucGVubWVuXFxucGVubmFudC9NU1xcbnBlbm5lZFxcbnBlbm5pbGVzc1xcbnBlbm5pbmdcXG5wZW5ub24vTVNcXG5wZW5ueS9TTVxcbnBlbm55d2VpZ2h0L01TXFxucGVubnl3b3J0aFxcbnBlbm9sb2dpc3QvTVNcXG5wZW5vbG9neS9NXFxucGVuc2lvbi9CWkdNRFJTXFxucGVuc2lvbmVyL01cXG5wZW5zaXZlL1BZXFxucGVuc2l2ZW5lc3MvTVxcbnBlbnRcXG5wZW50YWNsZS9NU1xcbnBlbnRhZ29uL01TXFxucGVudGFnb25hbFxcbnBlbnRhZ3JhbS9TTVxcbnBlbnRhbWV0ZXIvU01cXG5wZW50YXRobGV0ZS9NU1xcbnBlbnRhdGhsb24vTVNcXG5wZW50aG91c2UvU01cXG5wZW51Y2hlL01cXG5wZW51bHRpbWF0ZS9TTVxcbnBlbnVtYnJhL01TXFxucGVudW1icmFlXFxucGVudXJpb3VzL1BZXFxucGVudXJpb3VzbmVzcy9NXFxucGVudXJ5L01cXG5wZW9uL01TXFxucGVvbmFnZS9NXFxucGVvbnkvU01cXG5wZW9wbGUvTUdEU1xcbnBlcC9TTVxcbnBlcHBlZFxcbnBlcHBlci9HTURTXFxucGVwcGVyY29ybi9TTVxcbnBlcHBlcm1pbnQvU01cXG5wZXBwZXJvbmkvTVNcXG5wZXBwZXJ5XFxucGVwcGluZXNzL01cXG5wZXBwaW5nXFxucGVwcHkvVFBSXFxucGVwc2luL01cXG5wZXB0aWMvTVNcXG5wZXB0aWRlL1NcXG5wZXJhZHZlbnR1cmUvTVxcbnBlcmFtYnVsYXRlL1hHTkRTXFxucGVyYW1idWxhdGlvbi9NXFxucGVyYW1idWxhdG9yL01TXFxucGVyY2FsZS9NU1xcbnBlcmNlaXZlL0JHRFNcXG5wZXJjZWl2ZWQvVVxcbnBlcmNlbnQvTVNcXG5wZXJjZW50YWdlL1NNXFxucGVyY2VudGlsZS9TTVxcbnBlcmNlcHRpYmxlXFxucGVyY2VwdGlibHlcXG5wZXJjZXB0aW9uL1NNXFxucGVyY2VwdGlvbmFsXFxucGVyY2VwdGl2ZS9QWVxcbnBlcmNlcHRpdmVuZXNzL01cXG5wZXJjZXB0dWFsL1lcXG5wZXJjaC9HTURTXFxucGVyY2hhbmNlXFxucGVyY2lwaWVuY2UvTVxcbnBlcmNpcGllbnRcXG5wZXJjb2xhdGUvR05EU1xcbnBlcmNvbGF0aW9uL01cXG5wZXJjb2xhdG9yL1NNXFxucGVyY3Vzc2lvbi9BTVxcbnBlcmN1c3Npb25pc3QvTVNcXG5wZXJjdXNzaXZlXFxucGVyZGl0aW9uL01cXG5wZXJkdXJhYmxlXFxucGVyZWdyaW5hdGUvRFNYR05cXG5wZXJlZ3JpbmF0aW9uL01cXG5wZXJlZ3JpbmUvTVNcXG5wZXJlbXB0b3JpbHlcXG5wZXJlbXB0b3J5XFxucGVyZW5uaWFsL1NNWVxcbnBlcmVzdHJvaWthL01cXG5wZXJmZWN0L1BUR01EUllTXFxucGVyZmVjdGEvTVNcXG5wZXJmZWN0aWJpbGl0eS9NXFxucGVyZmVjdGlibGVcXG5wZXJmZWN0aW9uL1NNXFxucGVyZmVjdGlvbmlzbS9NXFxucGVyZmVjdGlvbmlzdC9TTVxcbnBlcmZlY3RuZXNzL01cXG5wZXJmaWRpb3VzL1lcXG5wZXJmaWR5L1NNXFxucGVyZm9yYXRlL0dOWERTXFxucGVyZm9yYXRpb24vTVxcbnBlcmZvcmNlXFxucGVyZm9ybS9TRFJaR1xcbnBlcmZvcm1hbmNlL1NNXFxucGVyZm9ybWF0aXZlXFxucGVyZm9ybWVkL1VcXG5wZXJmb3JtZXIvTVxcbnBlcmZ1bWUvRFJTTVpHXFxucGVyZnVtZXIvTVxcbnBlcmZ1bWVyeS9TTVxcbnBlcmZ1bmN0b3JpbHlcXG5wZXJmdW5jdG9yeVxcbnBlcmZ1c2lvblxcbnBlcmdvbGEvU01cXG5wZXJoYXBzXFxucGVyaWNhcmRpYVxcbnBlcmljYXJkaWFsXFxucGVyaWNhcmRpdGlzXFxucGVyaWNhcmRpdW0vTVxcbnBlcmlnZWUvU01cXG5wZXJpaGVsaWFcXG5wZXJpaGVsaW9uL01cXG5wZXJpbC9TR01EXFxucGVyaWxvdXMvWVxcbnBlcmltZXRlci9TTVxcbnBlcmluYXRhbFxcbnBlcmluZWFcXG5wZXJpbmV1bS9NXFxucGVyaW9kL01TXFxucGVyaW9kaWNcXG5wZXJpb2RpY2FsL1NNWVxcbnBlcmlvZGljaXR5L01cXG5wZXJpb2RvbnRhbFxcbnBlcmlvZG9udGljcy9NXFxucGVyaW9kb250aXN0L1NNXFxucGVyaXBhdGV0aWMvTVNcXG5wZXJpcGhlcmFsL01ZU1xcbnBlcmlwaGVyeS9TTVxcbnBlcmlwaHJhc2VzXFxucGVyaXBocmFzaXMvTVxcbnBlcmlwaHJhc3RpY1xcbnBlcmlzY29wZS9TTVxcbnBlcmlzaC9CRFJTWkdcXG5wZXJpc2hhYmxlL01TXFxucGVyaXN0YWxzZXNcXG5wZXJpc3RhbHNpcy9NXFxucGVyaXN0YWx0aWNcXG5wZXJpc3R5bGUvU01cXG5wZXJpdG9uZWFsXFxucGVyaXRvbmV1bS9NU1xcbnBlcml0b25pdGlzL01cXG5wZXJpd2lnL1NNXFxucGVyaXdpbmtsZS9TTVxcbnBlcmp1cmUvRFJTWkdcXG5wZXJqdXJlci9NXFxucGVyanVyeS9TTVxcbnBlcmsvTURTR1xcbnBlcmtpbHlcXG5wZXJraW5lc3MvTVxcbnBlcmt5L1RQUlxcbnBlcm0vTURTR1xcbnBlcm1hZnJvc3QvTVxcbnBlcm1hbmVuY2UvTVxcbnBlcm1hbmVuY3kvTVxcbnBlcm1hbmVudC9TTVlcXG5wZXJtZWFiaWxpdHkvTVxcbnBlcm1lYWJsZVxcbnBlcm1lYXRlL0dORFNcXG5wZXJtZWF0aW9uL01cXG5wZXJtaXNzaWJsZVxcbnBlcm1pc3NpYmx5XFxucGVybWlzc2lvbi9NU1xcbnBlcm1pc3NpdmUvUFlcXG5wZXJtaXNzaXZlbmVzcy9NXFxucGVybWl0L01TXFxucGVybWl0dGVkXFxucGVybWl0dGluZ1xcbnBlcm1pdHRpdml0eVxcbnBlcm11dGF0aW9uL1NNXFxucGVybXV0ZS9EU0dcXG5wZXJuaWNpb3VzL1lQXFxucGVybmljaW91c25lc3MvTVxcbnBlcm9yYXRpb24vTVNcXG5wZXJveGlkZS9NR0RTXFxucGVycGVuZGljdWxhci9TTVlcXG5wZXJwZW5kaWN1bGFyaXR5L01cXG5wZXJwZXRyYXRlL0RTR05cXG5wZXJwZXRyYXRpb24vTVxcbnBlcnBldHJhdG9yL01TXFxucGVycGV0dWFsL1NNWVxcbnBlcnBldHVhdGUvRFNHTlxcbnBlcnBldHVhdGlvbi9NXFxucGVycGV0dWl0eS9NXFxucGVycGxleC9HRFNcXG5wZXJwbGV4ZWQvWVxcbnBlcnBsZXhpbmcvWVxcbnBlcnBsZXhpdHkvU01cXG5wZXJxdWlzaXRlL1NNXFxucGVyc2VjdXRlL0dOWERTXFxucGVyc2VjdXRpb24vTVxcbnBlcnNlY3V0b3IvU01cXG5wZXJzZXZlcmFuY2UvTVxcbnBlcnNldmVyZS9EU0dcXG5wZXJzaWZsYWdlL01cXG5wZXJzaW1tb24vU01cXG5wZXJzaXN0L1NHRFxcbnBlcnNpc3RlbmNlL01cXG5wZXJzaXN0ZW50L1lcXG5wZXJzbmlja2V0eVxcbnBlcnNvbi9VTVNcXG5wZXJzb25hL1NNXFxucGVyc29uYWJsZVxcbnBlcnNvbmFlXFxucGVyc29uYWdlL01TXFxucGVyc29uYWwvTVlTXFxucGVyc29uYWxpdHkvU01cXG5wZXJzb25hbGl6ZS9DRFNHXFxucGVyc29uYWx0eS9NXFxucGVyc29uaWZpY2F0aW9uL01cXG5wZXJzb25pZnkvR0RTTlhcXG5wZXJzb25uZWwvTVxcbnBlcnNwZWN0aXZlL01TXFxucGVyc3BleFxcbnBlcnNwaWNhY2lvdXMvWVxcbnBlcnNwaWNhY2l0eS9NXFxucGVyc3BpY3VpdHkvTVxcbnBlcnNwaWN1b3VzXFxucGVyc3BpcmF0aW9uL01cXG5wZXJzcGlyZS9HRFNcXG5wZXJzdWFkZS9CWkdEUlNcXG5wZXJzdWFkZWQvVVxcbnBlcnN1YWRlci9NXFxucGVyc3Vhc2lvbi9TTVxcbnBlcnN1YXNpdmUvUFlcXG5wZXJzdWFzaXZlbmVzcy9NXFxucGVydC9SWVBUXFxucGVydGFpbi9HU0RcXG5wZXJ0aW5hY2lvdXMvWVxcbnBlcnRpbmFjaXR5L01cXG5wZXJ0aW5lbmNlL01cXG5wZXJ0aW5lbnQvWVxcbnBlcnRuZXNzL01cXG5wZXJ0dXJiL0RHU1xcbnBlcnR1cmJhdGlvbi9TTVxcbnBlcnR1cmJlZC9VXFxucGVydHVzc2lzL01cXG5wZXJ1a2UvTVNcXG5wZXJ1c2FsL01TXFxucGVydXNlL0dEU1xcbnBlcnYvU1xcbnBlcnZhZGUvRFNHXFxucGVydmFzaXZlL1BZXFxucGVydmFzaXZlbmVzcy9NXFxucGVydmVyc2UvUFhZTlxcbnBlcnZlcnNlbmVzcy9NXFxucGVydmVyc2lvbi9NXFxucGVydmVyc2l0eS9NXFxucGVydmVydC9TR01EXFxucGVzZXRhL01TXFxucGVza2lseVxcbnBlc2tpbmVzcy9NXFxucGVza3kvVFBSXFxucGVzby9NU1xcbnBlc3NhcnkvU1xcbnBlc3NpbWFsXFxucGVzc2ltaXNtL01cXG5wZXNzaW1pc3QvU01cXG5wZXNzaW1pc3RpY1xcbnBlc3NpbWlzdGljYWxseVxcbnBlc3QvTVJTWlxcbnBlc3Rlci9HRFxcbnBlc3RpY2lkZS9NU1xcbnBlc3RpZmVyb3VzXFxucGVzdGlsZW5jZS9TTVxcbnBlc3RpbGVudFxcbnBlc3RpbGVudGlhbFxcbnBlc3RsZS9NR0RTXFxucGVzdG8vTVxcbnBldC9TWk1SXFxucGV0YWJ5dGUvTVNcXG5wZXRham91bGUvU1xcbnBldGFsL1NNRFxcbnBldGFyZC9NU1xcbnBldGF3YXR0L1NcXG5wZXRjb2NrL1NNXFxucGV0ZXIvR01EXFxucGV0aW9sZS9TTVxcbnBldGl0ZS9NU1xcbnBldGl0aW9uL1pHTURSU1xcbnBldGl0aW9uYXJ5XFxucGV0aXRpb25lci9NXFxucGV0cmVsL01TXFxucGV0cmlmYWN0aW9uL01cXG5wZXRyaWZ5L0RTR1xcbnBldHJvY2hlbWljYWwvU01cXG5wZXRyb2RvbGxhci9NU1xcbnBldHJvbC9NXFxucGV0cm9sYXR1bS9NXFxucGV0cm9sZXVtL01cXG5wZXRyb2xvZ2lzdC9TTVxcbnBldHJvbG9neS9NXFxucGV0dGVkXFxucGV0dGljb2F0L01TXFxucGV0dGlmb2cvU1xcbnBldHRpZm9nZ2VkXFxucGV0dGlmb2dnZXIvU01cXG5wZXR0aWZvZ2dlcnkvTVxcbnBldHRpZm9nZ2luZ1xcbnBldHRpbHlcXG5wZXR0aW5lc3MvTVxcbnBldHRpbmcvTVxcbnBldHRpc2gvWVxcbnBldHR5L1BUUlxcbnBldHVsYW5jZS9NXFxucGV0dWxhbnQvWVxcbnBldHVuaWEvTVNcXG5wZXcvU01cXG5wZXdlZS9TTVxcbnBld2l0L1NNXFxucGV3dGVyL01TXFxucGV5b3RlL01cXG5wZlxcbnBmZW5uaWcvTVNcXG5wZ1xcbnBoYWV0b24vTVNcXG5waGFnZS9TXFxucGhhZ29jeXRlL1NNXFxucGhhbGFuZ2VyL1NNXFxucGhhbGFuZ2VzXFxucGhhbGFueC9NU1xcbnBoYWxsaVxcbnBoYWxsaWNcXG5waGFsbG9jZW50cmljXFxucGhhbGxvY2VudHJpc21cXG5waGFsbHVzL01cXG5waGFudGFzbS9NU1xcbnBoYW50YXNtYWdvcmlhL01TXFxucGhhbnRhc21hZ29yaWNhbFxcbnBoYW50YXNtYWxcXG5waGFudG9tL1NNXFxucGhhcmFvaC9NXFxucGhhcmFvaHNcXG5waGFyaXNhaWNcXG5waGFyaXNlZS9TTVxcbnBoYXJtYWNldXRpYy9NU1xcbnBoYXJtYWNldXRpY2FsL1NNXFxucGhhcm1hY2V1dGljcy9NXFxucGhhcm1hY2lzdC9NU1xcbnBoYXJtYWNvbG9naWNcXG5waGFybWFjb2xvZ2ljYWxcXG5waGFybWFjb2xvZ2lzdC9TTVxcbnBoYXJtYWNvbG9neS9NXFxucGhhcm1hY29wb2VpYS9NU1xcbnBoYXJtYWNvdGhlcmFweVxcbnBoYXJtYWN5L1NNXFxucGhhcnluZ2VhbFxcbnBoYXJ5bmdlc1xcbnBoYXJ5bmdpdGlzL01cXG5waGFyeW54L01cXG5waGFzZS9EU01HXFxucGhhc2VvdXQvU01cXG5waGF0XFxucGhlYXNhbnQvTVNcXG5waGVuYWNldGluL01cXG5waGVub2JhcmJpdGFsL01cXG5waGVub2wvTVxcbnBoZW5vbS9NU1xcbnBoZW5vbWVuYVxcbnBoZW5vbWVuYWwvWVxcbnBoZW5vbWVub2xvZ2ljYWxcXG5waGVub21lbm9sb2d5XFxucGhlbm9tZW5vbi9NU1xcbnBoZW5vdHlwZVxcbnBoZW55dG9pblxcbnBoZXJvbW9uZS9NU1xcbnBoZXdcXG5waGkvU01cXG5waGlhbC9TTVxcbnBoaWxhbmRlci9aR0RSU1xcbnBoaWxhbmRlcmVyL01cXG5waGlsYW5kZXJpbmcvTVxcbnBoaWxhbnRocm9waWNcXG5waGlsYW50aHJvcGljYWxseVxcbnBoaWxhbnRocm9waXN0L01TXFxucGhpbGFudGhyb3B5L1NNXFxucGhpbGF0ZWxpY1xcbnBoaWxhdGVsaXN0L01TXFxucGhpbGF0ZWx5L01cXG5waGlsaGFybW9uaWMvU01cXG5waGlsaXBwaWMvTVNcXG5waGlsaXN0aW5lL01TXFxucGhpbGlzdGluaXNtL01cXG5waGlsb2RlbmRyb24vU01cXG5waGlsb2xvZ2ljYWxcXG5waGlsb2xvZ2lzdC9NU1xcbnBoaWxvbG9neS9NXFxucGhpbG9zb3BoZXIvTVNcXG5waGlsb3NvcGhpY1xcbnBoaWxvc29waGljYWwvWVxcbnBoaWxvc29waGl6ZS9EUlNaR1xcbnBoaWxvc29waGl6ZXIvTVxcbnBoaWxvc29waHkvU01cXG5waGlsdGVyL01TXFxucGhpc2gvWkdEUlxcbnBoaXNoZXIvTVxcbnBobGViaXRpcy9NXFxucGhsZWdtL01cXG5waGxlZ21hdGljXFxucGhsZWdtYXRpY2FsbHlcXG5waGxvZW0vTVxcbnBobG94L01cXG5waG9iaWEvTVNcXG5waG9iaWMvTVNcXG5waG9lYmUvTVNcXG5waG9lbml4L01TXFxucGhvbmUvRFNNR1xcbnBob25lY2FyZC9TXFxucGhvbmVtZS9NU1xcbnBob25lbWljXFxucGhvbmVtaWNhbGx5XFxucGhvbmV0aWMvU1xcbnBob25ldGljYWxseVxcbnBob25ldGljaWFuL1NNXFxucGhvbmV0aWNzL01cXG5waG9uZXllZFxcbnBob25leWluZ1xcbnBob25pYy9TXFxucGhvbmljYWxseVxcbnBob25pY3MvTVxcbnBob25pbmVzcy9NXFxucGhvbm9ncmFwaC9NXFxucGhvbm9ncmFwaGljXFxucGhvbm9ncmFwaHNcXG5waG9ub2xvZ2ljYWwvWVxcbnBob25vbG9naXN0L01TXFxucGhvbm9sb2d5L01cXG5waG9ub25cXG5waG9ueS9QVEdEUlNNXFxucGhvb2V5XFxucGhvc3BoYXRlL01TXFxucGhvc3Bob2RpZXN0ZXJhc2VcXG5waG9zcGhvci9NU1xcbnBob3NwaG9yZXNjZW5jZS9NXFxucGhvc3Bob3Jlc2NlbnQvWVxcbnBob3NwaG9yaWNcXG5waG9zcGhvcm91c1xcbnBob3NwaG9ydXMvTVxcbnBob3NwaG9yeWxhdGlvblxcbnBob3RvL1NHTURcXG5waG90b2NlbGwvTVNcXG5waG90b2NvcGllci9NXFxucGhvdG9jb3B5L0RSU01aR1xcbnBob3RvZWxlY3RyaWNcXG5waG90b2VsZWN0cmljYWxseVxcbnBob3RvZW5ncmF2ZS9EUlNKWkdcXG5waG90b2VuZ3JhdmVyL01cXG5waG90b2VuZ3JhdmluZy9NXFxucGhvdG9maW5pc2hpbmcvTVxcbnBob3RvZ2VuaWNcXG5waG90b2dlbmljYWxseVxcbnBob3RvZ3JhcGgvTURSWkdcXG5waG90b2dyYXBoZXIvTVxcbnBob3RvZ3JhcGhpY1xcbnBob3RvZ3JhcGhpY2FsbHlcXG5waG90b2dyYXBocy9BXFxucGhvdG9ncmFwaHkvTVxcbnBob3Rvam91cm5hbGlzbS9NXFxucGhvdG9qb3VybmFsaXN0L1NNXFxucGhvdG9tZXRlci9NU1xcbnBob3Rvbi9NU1xcbnBob3Rvc2Vuc2l0aXZlXFxucGhvdG9zdGF0L1NNXFxucGhvdG9zdGF0aWNcXG5waG90b3N0YXR0ZWRcXG5waG90b3N0YXR0aW5nXFxucGhvdG9zeW50aGVzaXMvTVxcbnBob3Rvc3ludGhlc2l6ZS9HRFNcXG5waG90b3N5bnRoZXRpY1xcbnBob3RvdHJvcGljXFxucGhvdG90cm9waXNtXFxucGhvdG90eXBlc2V0dGVyXFxucGhvdG90eXBlc2V0dGluZ1xcbnBob3Rvdm9sdGFpY1xcbnBocmFzYWxcXG5waHJhc2Unc1xcbnBocmFzZS9BR0RTXFxucGhyYXNlYm9vay9TXFxucGhyYXNlb2xvZ3kvTVxcbnBocmFzaW5nL01TXFxucGhyZWFraW5nXFxucGhyZW5vbG9naXN0L1NNXFxucGhyZW5vbG9neS9NXFxucGh5bGFcXG5waHlsYWN0ZXJ5L1NNXFxucGh5bG9nZW55L01cXG5waHlsdW0vTVxcbnBoeXNcXG5waHlzaWMvU01cXG5waHlzaWNhbC9NWVNcXG5waHlzaWNhbGl0eVxcbnBoeXNpY2lhbi9TTVxcbnBoeXNpY2lzdC9TTVxcbnBoeXNpY2tlZFxcbnBoeXNpY2tpbmdcXG5waHlzaWNzL01cXG5waHlzaW8vU1xcbnBoeXNpb2dub215L1NNXFxucGh5c2lvZ3JhcGh5L01cXG5waHlzaW9sb2dpY1xcbnBoeXNpb2xvZ2ljYWwvWVxcbnBoeXNpb2xvZ2lzdC9NU1xcbnBoeXNpb2xvZ3kvTVxcbnBoeXNpb3RoZXJhcGlzdC9NU1xcbnBoeXNpb3RoZXJhcHkvTVxcbnBoeXNpcXVlL01TXFxucGh5dG9wbGFua3RvblxcbnBpL1NNRFJIWkdcXG5waWFuaXNzaW1vL1NNXFxucGlhbmlzdC9NU1xcbnBpYW5vL1NNXFxucGlhbm9mb3J0ZS9TTVxcbnBpYW5vbGEvU1xcbnBpYXN0ZXIvTVNcXG5waWF6emEvTVNcXG5waWJyb2NoL01cXG5waWJyb2Noc1xcbnBpYy9TTVxcbnBpY2EvTVxcbnBpY2Fkb3IvTVNcXG5waWNhbnRlXFxucGljYXJlc3F1ZVxcbnBpY2F5dW5lXFxucGljY2FsaWxsaS9NXFxucGljY29sby9NU1xcbnBpY2svTURSU0paR1xcbnBpY2theC9HTURTXFxucGlja2VyL01cXG5waWNrZXJlbC9NU1xcbnBpY2tldC9aR01EUlNcXG5waWNraW5ncy9NXFxucGlja2xlL01HRFNcXG5waWNrcG9ja2V0L1NNXFxucGlja3VwL01TXFxucGlja3kvUFRSXFxucGljbmljL01TXFxucGljbmlja2VkXFxucGljbmlja2VyL1NNXFxucGljbmlja2luZ1xcbnBpY290L1NNXFxucGljdG9ncmFtL1NcXG5waWN0b2dyYXBoL01cXG5waWN0b2dyYXBoc1xcbnBpY3RvcmlhbC9NWVNcXG5waWN0dXJlL01HRFNcXG5waWN0dXJlc3F1ZS9QWVxcbnBpY3R1cmVzcXVlbmVzcy9NXFxucGlkZGxlL01HRFNcXG5waWRkbHlcXG5waWRnaW4vTVNcXG5waWUvU01cXG5waWViYWxkL01TXFxucGllY2UvRFNNR1xcbnBpZWNlbWVhbFxcbnBpZWNld29yay9NUlpcXG5waWVjZXdvcmtlci9NXFxucGllY3J1c3QvU01cXG5waWVpbmdcXG5waWVyL01cXG5waWVyY2UvSkdEU1xcbnBpZXJjaW5nL01ZXFxucGlldHkvTVxcbnBpZXpvZWxlY3RyaWNcXG5waWZmbGUvTUdcXG5waWcvU01MXFxucGlnZW9uL01TXFxucGlnZW9uaG9sZS9EU01HXFxucGlnZ2VkXFxucGlnZ2VyeS9TXFxucGlnZ2luZ1xcbnBpZ2dpc2gvUFlcXG5waWdnaXNobmVzcy9NXFxucGlnZ3kvVFJTTVxcbnBpZ2d5YmFjay9NRFNHXFxucGlnaGVhZGVkL1BZXFxucGlnaGVhZGVkbmVzcy9NXFxucGlnbGV0L01TXFxucGlnbWVudC9NRFNcXG5waWdtZW50YXRpb24vTVxcbnBpZ3Blbi9NU1xcbnBpZ3NraW4vTVNcXG5waWdzdHkvU01cXG5waWdzd2lsbFxcbnBpZ3RhaWwvTVNcXG5waWtlL01aR0RSU1xcbnBpa2VyL01cXG5waWtlc3RhZmYvU01cXG5waWxhZi9TTVxcbnBpbGFzdGVyL01TXFxucGlsY2hhcmQvTVNcXG5waWxlL01HRFNKXFxucGlsZXVwL01TXFxucGlsZmVyL1pHRFJTXFxucGlsZmVyYWdlL01cXG5waWxmZXJlci9NXFxucGlsZ3JpbS9NU1xcbnBpbGdyaW1hZ2UvTVNcXG5waWxpbmcvTVxcbnBpbGwvTURTR1xcbnBpbGxhZ2UvTVpHRFJTXFxucGlsbGFnZXIvTVxcbnBpbGxhci9NRFNcXG5waWxsYm94L01TXFxucGlsbGlvbi9NU1xcbnBpbGxvY2svU1xcbnBpbGxvcnkvR0RTTVxcbnBpbGxvdy9HTURTXFxucGlsbG93Y2FzZS9NU1xcbnBpbGxvd3NsaXAvTVNcXG5waWxvdC9ER1NNXFxucGlsb3Rob3VzZS9TTVxcbnBpbWVudG8vTVNcXG5waW1pZW50by9NU1xcbnBpbXAvR01EWVNcXG5waW1wZXJuZWwvTVNcXG5waW1wbGUvRFNNXFxucGltcGx5L1JUXFxucGluL1NNXFxucGluYWZvcmUvTVNcXG5waW5hdGEvTVNcXG5waW5iYWxsL01cXG5waW5jZXIvTVNcXG5waW5jaC9HTURTXFxucGluY3VzaGlvbi9NU1xcbnBpbmUnc1xcbnBpbmUvQUdEU1xcbnBpbmVhcHBsZS9NU1xcbnBpbmV3b29kL1NcXG5waW5leVxcbnBpbmZlYXRoZXIvU01cXG5waW5nL0dNRFxcbnBpbmhlYWQvU01cXG5waW5ob2xlL1NNXFxucGluaWVyXFxucGluaWVzdFxcbnBpbmlvbi9TTURHXFxucGluay9UR1BNRFJTXFxucGlua2V5ZS9NXFxucGlua2llL1NNXFxucGlua2lzaFxcbnBpbmtuZXNzL01cXG5waW5rby9NU1xcbnBpbm5hY2xlL1NNXFxucGlubmF0ZVxcbnBpbm5lZC9VXFxucGlubmluZy9VXFxucGlubnkvU1xcbnBpbm9jaGxlL01cXG5waW5vbi9NU1xcbnBpbnBvaW50L1NHTURcXG5waW5wcmljay9NU1xcbnBpbnNldHRlci9TTVxcbnBpbnN0cmlwZS9EU01cXG5waW50L01TXFxucGludG8vTVNcXG5waW51cC9NU1xcbnBpbndoZWVsL0dTTURcXG5waW55aW4vTVxcbnBpbnlvbi9TTVxcbnBpb25lZXIvU0dNRFxcbnBpb3VzL1lQXFxucGlvdXNuZXNzL01cXG5waXAvU1pHTURSXFxucGlwZS9NU1xcbnBpcGVsaW5lL1NNXFxucGlwZXIvTVxcbnBpcGV0dGUvU01cXG5waXBld29ya1xcbnBpcGluZy9NXFxucGlwaXQvTVNcXG5waXBwZWRcXG5waXBwaW4vU01cXG5waXBwaW5nXFxucGlwc3F1ZWFrL1NNXFxucGlxdWFuY3kvTVxcbnBpcXVhbnQvWVxcbnBpcXVlL01HRFNcXG5waXJhY3kvTVxcbnBpcmFuaGEvU01cXG5waXJhdGUvRFNNR1xcbnBpcmF0aWNhbC9ZXFxucGlyb2dpL01cXG5waXJvc2hraS9NXFxucGlyb3VldHRlL0RTTUdcXG5waXNjYXRvcmlhbFxcbnBpc21pcmUvU01cXG5waXNzL1pHTURSU1xcbnBpc3NvaXIvU1xcbnBpc3RhY2hpby9TTVxcbnBpc3RlL1NcXG5waXN0aWwvU01cXG5waXN0aWxsYXRlXFxucGlzdG9sL1NNXFxucGlzdG9uL1NNXFxucGl0L1NNXFxucGl0YS9NU1xcbnBpdGFwYXQvU01cXG5waXRjaC9NRFJTWkdcXG5waXRjaGJsZW5kZS9NXFxucGl0Y2hlci9NXFxucGl0Y2hmb3JrL01EU0dcXG5waXRjaG1hbi9NXFxucGl0Y2htZW5cXG5waXRlb3VzL1lQXFxucGl0ZW91c25lc3MvTVxcbnBpdGZhbGwvU01cXG5waXRoL01cXG5waXRoZWFkL1NcXG5waXRoaWx5XFxucGl0aGluZXNzL01cXG5waXRoeS9SVFBcXG5waXRpYWJsZVxcbnBpdGlhYmx5XFxucGl0aWZ1bC9ZXFxucGl0aWxlc3MvUFlcXG5waXRpbGVzc25lc3MvTVxcbnBpdG9uL01TXFxucGl0dGEvU1xcbnBpdHRhbmNlL01TXFxucGl0dGVkXFxucGl0dGluZ1xcbnBpdHVpdGFyeS9TTVxcbnBpdHkvR0RTTVxcbnBpdHlpbmcvWVxcbnBpdm90L01ER1NcXG5waXZvdGFsXFxucGl4L01cXG5waXhlbC9NU1xcbnBpeGllL01TXFxucGl6emEvTVNcXG5waXp6YXp6L01cXG5waXp6ZXJpYS9TTVxcbnBpenppY2F0aVxcbnBpenppY2F0by9NXFxucGonc1xcbnBrXFxucGtnXFxucGt0XFxucGt3eVxcbnBsXFxucGxhY2FyZC9TTURHXFxucGxhY2F0ZS9EU0dOXFxucGxhY2F0aW9uL01cXG5wbGFjYXRvcnlcXG5wbGFjZSdzXFxucGxhY2UvQUVTRExHXFxucGxhY2Viby9TTVxcbnBsYWNlZC9VXFxucGxhY2Vob2xkZXIvTVNcXG5wbGFjZWtpY2svTURSWkdTXFxucGxhY2VraWNrZXIvTVxcbnBsYWNlbWVudC9FQVNNXFxucGxhY2VudGEvU01cXG5wbGFjZW50YWwvU1xcbnBsYWNlci9TTVxcbnBsYWNpZC9ZXFxucGxhY2lkaXR5L01cXG5wbGFjaW5nc1xcbnBsYWNrZXQvU01cXG5wbGFnaWFyaXNtL1NNXFxucGxhZ2lhcmlzdC9TTVxcbnBsYWdpYXJpemUvRFJTWkdcXG5wbGFnaWFyaXplci9NXFxucGxhZ2lhcnkvTVxcbnBsYWd1ZS9EU01HXFxucGxhaWNlXFxucGxhaWQvTVNcXG5wbGFpbi9NUllUU1BcXG5wbGFpbmNoYW50XFxucGxhaW5jbG90aGVzXFxucGxhaW5jbG90aGVzbWFuL01cXG5wbGFpbmNsb3RoZXNtZW5cXG5wbGFpbm5lc3MvTVxcbnBsYWluc21hbi9NXFxucGxhaW5zbWVuXFxucGxhaW5zb25nL01cXG5wbGFpbnNwb2tlblxcbnBsYWludC9TTVZcXG5wbGFpbnRpZmYvU01cXG5wbGFpbnRpdmUvWVxcbnBsYWl0L01ER1NcXG5wbGFuL1pNUlNcXG5wbGFuYXJcXG5wbGFuZSdzXFxucGxhbmUvQ0dEU1xcbnBsYW5lbG9hZC9NU1xcbnBsYW5lci9NXFxucGxhbmV0L1NNXFxucGxhbmV0YXJpdW0vU01cXG5wbGFuZXRhcnlcXG5wbGFuZ2VuY3kvTVxcbnBsYW5nZW50XFxucGxhbmsvTURHU1xcbnBsYW5raW5nL01cXG5wbGFua3Rvbi9NXFxucGxhbm5lZC9VXFxucGxhbm5lci9TTVxcbnBsYW5uaW5nL1NcXG5wbGFudC9NRFJaR1NKXFxucGxhbnRhaW4vU01cXG5wbGFudGFyXFxucGxhbnRhdGlvbi9NU1xcbnBsYW50ZXIvTVxcbnBsYW50aW5nL01cXG5wbGFudGxpa2VcXG5wbGFxdWUvU01cXG5wbGFzaC9NRFNHXFxucGxhc21hL01cXG5wbGFzbW9uXFxucGxhc3Rlci9TWkdNRFJcXG5wbGFzdGVyYm9hcmQvTVxcbnBsYXN0ZXJlci9NXFxucGxhc3RpYy9TTVxcbnBsYXN0aWNpdHkvTVxcbnBsYXN0aWNpemUvRFNHXFxucGxhc3RpcXVlXFxucGxhdC9YR01ETlNcXG5wbGF0ZS9NU1xcbnBsYXRlYXUvU01ER1xcbnBsYXRlZnVsL1NNXFxucGxhdGVsZXQvU01cXG5wbGF0ZW4vTVxcbnBsYXRmb3JtL1NHTURcXG5wbGF0aW5nL01cXG5wbGF0aW51bS9NXFxucGxhdGl0dWRlL1NNXFxucGxhdGl0dWRpbm91c1xcbnBsYXRvbmljXFxucGxhdG9vbi9TR01EXFxucGxhdHRlZFxcbnBsYXR0ZXIvU01cXG5wbGF0dGluZ1xcbnBsYXR5L01cXG5wbGF0eXB1cy9NU1xcbnBsYXR5c1xcbnBsYXVkaXQvU01cXG5wbGF1c2liaWxpdHkvTVxcbnBsYXVzaWJsZVxcbnBsYXVzaWJseVxcbnBsYXkvQUVHTURTXFxucGxheWFibGUvRVVcXG5wbGF5YWN0L1NHRFxcbnBsYXlhY3RpbmcvTVxcbnBsYXliYWNrL01TXFxucGxheWJpbGwvTVNcXG5wbGF5Ym9vay9NU1xcbnBsYXlib3kvU01cXG5wbGF5ZXIvU01cXG5wbGF5ZmVsbG93L1NNXFxucGxheWZ1bC9QWVxcbnBsYXlmdWxuZXNzL01cXG5wbGF5Z2lybC9NU1xcbnBsYXlnb2VyL01TXFxucGxheWdyb3VuZC9TTVxcbnBsYXlncm91cC9TXFxucGxheWhvdXNlL01TXFxucGxheWxpc3QvTVNcXG5wbGF5bWF0ZS9NU1xcbnBsYXlvZmYvU01cXG5wbGF5cGVuL1NNXFxucGxheXJvb20vU01cXG5wbGF5c2Nob29sL1NcXG5wbGF5dGhpbmcvU01cXG5wbGF5dGltZS9NXFxucGxheXdyaWdodC9TTVxcbnBsYXphL01TXFxucGxlYS9NU1xcbnBsZWFkL0RSWkdTSlxcbnBsZWFkZXIvTVxcbnBsZWFkaW5nL01ZXFxucGxlYXNhbnQvVVRZUFxcbnBsZWFzYW50ZXJcXG5wbGVhc2FudG5lc3MvVU1cXG5wbGVhc2FudHJ5L1NNXFxucGxlYXNlL0VEU0dcXG5wbGVhc2luZy9ZU1xcbnBsZWFzdXJhYmx5XFxucGxlYXN1cmUvTUdEU0JcXG5wbGVhc3VyZWZ1bFxcbnBsZWF0L01ER1NcXG5wbGViL1NcXG5wbGViYnlcXG5wbGViZS9NU1xcbnBsZWJlaWFuL01TXFxucGxlYmlzY2l0ZS9NU1xcbnBsZWN0cmFcXG5wbGVjdHJ1bS9NU1xcbnBsZWRnZS9EU01HXFxucGxlbmFyeS9TTVxcbnBsZW5pcG90ZW50aWFyeS9TTVxcbnBsZW5pdHVkZS9TTVxcbnBsZW50ZW91c1xcbnBsZW50aWZ1bC9ZXFxucGxlbnR5L01cXG5wbGVudW0vU1xcbnBsZW9uYXNtL01TXFxucGxldGhvcmEvTVxcbnBsZXVyYS9NXFxucGxldXJhZVxcbnBsZXVyaXN5L01cXG5wbGV4dXMvTVNcXG5wbGlhYmlsaXR5L01cXG5wbGlhYmxlXFxucGxpYW5jeS9NXFxucGxpYW50L1lcXG5wbGllcnMvTVxcbnBsaWdodC9TTURHXFxucGxpbXNvbGwvU1xcbnBsaW50aC9NXFxucGxpbnRoc1xcbnBsb2QvU1xcbnBsb2RkZWRcXG5wbG9kZGVyL01TXFxucGxvZGRpbmcvU1xcbnBsb25rL0RSU1pHXFxucGxvcC9NU1xcbnBsb3BwZWRcXG5wbG9wcGluZ1xcbnBsb3NpdmUvU1xcbnBsb3QvTVNcXG5wbG90dGVkXFxucGxvdHRlci9TTVxcbnBsb3R0aW5nXFxucGxvdmVyL1NNXFxucGxvdy9HTURTXFxucGxvd21hbi9NXFxucGxvd21lblxcbnBsb3dzaGFyZS9NU1xcbnBsb3knc1xcbnBsb3kvU1xcbnBsdWNrL01EU0dcXG5wbHVja2lseVxcbnBsdWNraW5lc3MvTVxcbnBsdWNreS9SUFRcXG5wbHVnJ3NcXG5wbHVnL1VTXFxucGx1Z2dlZC9VXFxucGx1Z2dpbmcvVVxcbnBsdWdob2xlL1NcXG5wbHVnaW4vU01cXG5wbHVtL0dNRFNcXG5wbHVtYWdlL01cXG5wbHVtYi9NRFJTWkdKXFxucGx1bWJlZC9VXFxucGx1bWJlci9NXFxucGx1bWJpbmcvTVxcbnBsdW1lL01TXFxucGx1bW1ldC9TR01EXFxucGx1bW15XFxucGx1bXAvTURSWVNUR1BcXG5wbHVtcG5lc3MvTVxcbnBsdW15L1JUXFxucGx1bmRlci9TWkdNRFJcXG5wbHVuZGVyZXIvTVxcbnBsdW5nZS9EUlNNWkdcXG5wbHVuZ2VyL01cXG5wbHVuay9NRFNHXFxucGx1cGVyZmVjdC9TTVxcbnBsdXJhbC9TTVxcbnBsdXJhbGlzbS9NXFxucGx1cmFsaXN0L01TXFxucGx1cmFsaXN0aWNcXG5wbHVyYWxpdHkvU01cXG5wbHVyYWxpemF0aW9uL01cXG5wbHVyYWxpemUvR0RTXFxucGx1cy9NU1xcbnBsdXNoL01SWVRQXFxucGx1c2huZXNzL01cXG5wbHVzaHkvUlRcXG5wbHV0b2NyYWN5L1NNXFxucGx1dG9jcmF0L1NNXFxucGx1dG9jcmF0aWNcXG5wbHV0b25pdW0vTVxcbnBsdXZpYWxcXG5wbHkvQUdEU01cXG5wbHl3b29kL01cXG5wbVxcbnBuZXVtYXRpY1xcbnBuZXVtYXRpY2FsbHlcXG5wbmV1bW9jb2NjYWxcXG5wbmV1bW9jb2NjaVxcbnBuZXVtb2NvY2N1c1xcbnBuZXVtb25pYS9NXFxucG9hY2gvRFJTWkdcXG5wb2FjaGVyL01cXG5wb2FjaGluZy9NXFxucG9jay9HTURTXFxucG9ja2V0L1NNREdcXG5wb2NrZXRib29rL1NNXFxucG9ja2V0ZnVsL1NNXFxucG9ja2V0a25pZmUvTVxcbnBvY2tldGtuaXZlc1xcbnBvY2ttYXJrL01ER1NcXG5wb2QvU01cXG5wb2RjYXN0L1NNR1xcbnBvZGRlZFxcbnBvZGRpbmdcXG5wb2RpYXRyaXN0L1NNXFxucG9kaWF0cnkvTVxcbnBvZGl1bS9TTVxcbnBvZW0vTVNcXG5wb2VzeS9NXFxucG9ldC9NU1xcbnBvZXRhc3Rlci9NU1xcbnBvZXRlc3MvTVNcXG5wb2V0aWMvU1xcbnBvZXRpY2FsL1lcXG5wb2V0cnkvTVxcbnBvZ3JvbS9TTVxcbnBvaS9NXFxucG9pZ25hbmN5L01cXG5wb2lnbmFudC9ZXFxucG9pbmNpYW5hL1NNXFxucG9pbnNldHRpYS9TTVxcbnBvaW50L01EUlNaR1xcbnBvaW50YmxhbmtcXG5wb2ludGVkL1lcXG5wb2ludGVyL01cXG5wb2ludGlsbGlzbS9NXFxucG9pbnRpbGxpc3QvU01cXG5wb2ludGxlc3MvUFlcXG5wb2ludGxlc3NuZXNzL01cXG5wb2ludHkvVFJcXG5wb2lzZS9NR0RTXFxucG9pc29uL1NKWkdNRFJcXG5wb2lzb25lci9NXFxucG9pc29uaW5nL01cXG5wb2lzb25vdXMvWVxcbnBva2UvTVpHRFJTXFxucG9rZXIvTVxcbnBva2V5L01TXFxucG9reS9UUlxcbnBvbC9TR01EXFxucG9sYXJcXG5wb2xhcml0eS9TTVxcbnBvbGFyaXphdGlvbi9DTVxcbnBvbGFyaXplL0NEU0dcXG5wb2xlL01TXFxucG9sZWF4ZS9HRFNcXG5wb2xlY2F0L01TXFxucG9sZW1pYy9NU1xcbnBvbGVtaWNhbC9ZXFxucG9sZW1pY2lzdC9TTVxcbnBvbGVtaWNzL01cXG5wb2xlc3Rhci9TTVxcbnBvbGljZS9EU01HXFxucG9saWNlbWFuL01cXG5wb2xpY2VtZW5cXG5wb2xpY2V3b21hbi9NXFxucG9saWNld29tZW5cXG5wb2xpY3kvU01cXG5wb2xpY3lob2xkZXIvTVNcXG5wb2xpY3ltYWtlci9TXFxucG9saW8vTVNcXG5wb2xpb215ZWxpdGlzL01cXG5wb2xpc2gvWkdNRFJTXFxucG9saXNoZWQvVVxcbnBvbGlzaGVyL01cXG5wb2xpdGJ1cm8vTVNcXG5wb2xpdGUvUllUUFxcbnBvbGl0ZW5lc3MvTVxcbnBvbGl0ZXNzZS9NXFxucG9saXRpYy9TXFxucG9saXRpY2FsL1lcXG5wb2xpdGljaWFuL1NNXFxucG9saXRpY2l6YXRpb24vTVxcbnBvbGl0aWNpemUvQ0RTR1xcbnBvbGl0aWNraW5nL01cXG5wb2xpdGljby9TTVxcbnBvbGl0aWNzL01cXG5wb2xpdHkvU01cXG5wb2xrYS9NRFNHXFxucG9sbC9HTUROU1xcbnBvbGxhY2svTVNcXG5wb2xsYXJkL1NcXG5wb2xsZW4vTVxcbnBvbGxpbmF0ZS9HTkRTXFxucG9sbGluYXRpb24vTVxcbnBvbGxpbmF0b3IvU01cXG5wb2xsaW5nL01cXG5wb2xsaXdvZy9TTVxcbnBvbGxzdGVyL1NNXFxucG9sbHV0YW50L01TXFxucG9sbHV0ZS9aR05EUlNcXG5wb2xsdXRlZC9VXFxucG9sbHV0ZXIvTVxcbnBvbGx1dGlvbi9NXFxucG9sby9NXFxucG9sb25haXNlL1NNXFxucG9sb25pdW0vTVxcbnBvbHRlcmdlaXN0L01TXFxucG9sdHJvb24vU01cXG5wb2x5XFxucG9seWFjcnlsYW1pZGVcXG5wb2x5YW1vcnkvU1xcbnBvbHlhbmRyb3VzXFxucG9seWFuZHJ5L01cXG5wb2x5Y2xpbmljL1NNXFxucG9seWVzdGVyL01TXFxucG9seWV0aHlsZW5lL01cXG5wb2x5Z2FtaXN0L01TXFxucG9seWdhbW91c1xcbnBvbHlnYW15L01cXG5wb2x5Z2xvdC9TTVxcbnBvbHlnb24vU01cXG5wb2x5Z29uYWxcXG5wb2x5Z3JhcGgvR01EXFxucG9seWdyYXBoc1xcbnBvbHloZWRyYWxcXG5wb2x5aGVkcm9uL1NNXFxucG9seW1hdGgvTVxcbnBvbHltYXRoc1xcbnBvbHltZXIvU01cXG5wb2x5bWVyaWNcXG5wb2x5bWVyaXphdGlvbi9NXFxucG9seW1lcml6ZS9HRFNcXG5wb2x5bW9ycGhpY1xcbnBvbHltb3JwaG91c1xcbnBvbHlub21pYWwvTVNcXG5wb2x5cC9NU1xcbnBvbHlwaG9uaWNcXG5wb2x5cGhvbnkvTVxcbnBvbHlwcm9weWxlbmUvTVxcbnBvbHlzXFxucG9seXNlbW91c1xcbnBvbHlzdHlyZW5lL01cXG5wb2x5c3lsbGFiaWNcXG5wb2x5c3lsbGFibGUvTVNcXG5wb2x5dGVjaG5pYy9NU1xcbnBvbHl0aGVpc20vTVxcbnBvbHl0aGVpc3QvU01cXG5wb2x5dGhlaXN0aWNcXG5wb2x5dGhlbmVcXG5wb2x5dW5zYXR1cmF0ZS9EU1xcbnBvbHl1cmV0aGFuZS9NU1xcbnBvbHl2aW55bFxcbnBvbS9TXFxucG9tYWRlL0RTTUdcXG5wb21hbmRlci9TTVxcbnBvbWVncmFuYXRlL01TXFxucG9tbWVsL1NHTURcXG5wb21teS9TXFxucG9tcC9NXFxucG9tcGFkb3VyL1NNRFxcbnBvbXBhbm8vTVNcXG5wb21wb20vU01cXG5wb21wb3NpdHkvTVxcbnBvbXBvdXMvWVBcXG5wb21wb3VzbmVzcy9NXFxucG9uY2UvR0RTXFxucG9uY2hvL1NNXFxucG9uY3lcXG5wb25kL01TXFxucG9uZGVyL1NaR0RSXFxucG9uZGVyZXIvTVxcbnBvbmRlcm91cy9ZUFxcbnBvbmRlcm91c25lc3MvTVxcbnBvbmUvTVNcXG5wb25nL0dEU1xcbnBvbmdlZS9NXFxucG9uaWFyZC9NU1xcbnBvbnRpZmYvU01cXG5wb250aWZpY2FsL1lcXG5wb250aWZpY2F0ZS9EU01HXFxucG9udG9vbi9TTVxcbnBvbnkvR0RTTVxcbnBvbnl0YWlsL01TXFxucG9vL1NHRFxcbnBvb2NoL01EU0dcXG5wb29kbGUvU01cXG5wb29mL01TXFxucG9vZnRlci9TXFxucG9vaC9HTURcXG5wb29oc1xcbnBvb2wvR01EU1xcbnBvb2xyb29tL01TXFxucG9vbHNpZGUvU1xcbnBvb3AvR01EU1xcbnBvb3IvVFJZUFxcbnBvb3Jib3kvTVxcbnBvb3Job3VzZS9TTVxcbnBvb3JuZXNzL01cXG5wb3AvU01cXG5wb3Bjb3JuL01cXG5wb3BlL01TXFxucG9wZ3VuL1NNXFxucG9waW5qYXkvTVNcXG5wb3BsYXIvU01cXG5wb3BsaW4vTVxcbnBvcG92ZXIvU01cXG5wb3BwYS9NU1xcbnBvcHBhZG9tL1NcXG5wb3BwZWRcXG5wb3BwZXIvU01cXG5wb3BwZXQvU1xcbnBvcHBpbmdcXG5wb3BweS9TTVxcbnBvcHB5Y29jay9NXFxucG9wdWxhY2UvTVNcXG5wb3B1bGFyL1lcXG5wb3B1bGFyaXR5L1VNXFxucG9wdWxhcml6YXRpb24vTVxcbnBvcHVsYXJpemUvRFNHXFxucG9wdWxhdGUvQUNHRFNcXG5wb3B1bGF0ZWQvVVxcbnBvcHVsYXRpb24vQ01cXG5wb3B1bGF0aW9uc1xcbnBvcHVsaXNtL01cXG5wb3B1bGlzdC9NU1xcbnBvcHVsb3VzL1BcXG5wb3B1bG91c25lc3MvTVxcbnBvcHVwL01TXFxucG9yY2VsYWluL1NNXFxucG9yY2gvTVNcXG5wb3JjaW5lXFxucG9yY3VwaW5lL1NNXFxucG9yZS9NR0RTXFxucG9yZ3kvU01cXG5wb3JrL1pNUlxcbnBvcmtlci9NXFxucG9ya3kvUlNNVFxcbnBvcm4vTVxcbnBvcm5vL01cXG5wb3Jub2dyYXBoZXIvTVNcXG5wb3Jub2dyYXBoaWNcXG5wb3Jub2dyYXBoaWNhbGx5XFxucG9ybm9ncmFwaHkvTVxcbnBvcm9zaXR5L01cXG5wb3JvdXMvUFxcbnBvcm91c25lc3MvTVxcbnBvcnBoeXJpdGljXFxucG9ycGh5cnkvTVxcbnBvcnBvaXNlL01HRFNcXG5wb3JyaWRnZS9NXFxucG9ycmluZ2VyL1NNXFxucG9ydCdzL0FcXG5wb3J0L0NBRUdEU1xcbnBvcnRhYmlsaXR5L01cXG5wb3J0YWJsZS9NU1xcbnBvcnRhZ2UvRFNNR1xcbnBvcnRhbC9TTVxcbnBvcnRjdWxsaXMvTVNcXG5wb3J0ZW5kL1NHRFxcbnBvcnRlbnQvU01cXG5wb3J0ZW50b3VzL1lQXFxucG9ydGVyL0FTTVxcbnBvcnRlcmhvdXNlL1NNXFxucG9ydGZvbGlvL01TXFxucG9ydGhvbGUvTVNcXG5wb3J0aWNvL01cXG5wb3J0aWNvZXNcXG5wb3J0aWVyZS9NU1xcbnBvcnRpb24vS1NHTURcXG5wb3J0bGluZXNzL01cXG5wb3J0bHkvUlBUXFxucG9ydG1hbnRlYXUvTVNcXG5wb3J0cmFpdC9NU1xcbnBvcnRyYWl0aXN0L1NNXFxucG9ydHJhaXR1cmUvTVxcbnBvcnRyYXkvU0dEXFxucG9ydHJheWFsL01TXFxucG9ydHVsYWNhL01cXG5wb3NlJ3MvQVxcbnBvc2UvQ0FLRUdEU1xcbnBvc2VyL0VLU01cXG5wb3NldXIvU01cXG5wb3NoL1RSXFxucG9zaXQvRFNHVlxcbnBvc2l0aW9uL0NLRU1TXFxucG9zaXRpb25hbC9LRVxcbnBvc2l0aW9uZWQvS1xcbnBvc2l0aW9uaW5nL0FLXFxucG9zaXRpdmUvTVlQU1xcbnBvc2l0aXZlbmVzcy9NXFxucG9zaXRpdmlzbVxcbnBvc2l0aXZpc3QvU1xcbnBvc2l0cm9uL01TXFxucG9zc1xcbnBvc3NlL01TXFxucG9zc2Vzcy9BRVZHU0RcXG5wb3NzZXNzaW9uL0FTTVxcbnBvc3Nlc3NpdmUvU01ZUFxcbnBvc3Nlc3NpdmVuZXNzL01cXG5wb3NzZXNzb3IvU01cXG5wb3NzaWJpbGl0eS9TTVxcbnBvc3NpYmxlL1NNXFxucG9zc2libHlcXG5wb3NzdW0vU01cXG5wb3N0L1pHTURSU0pcXG5wb3N0YWdlL01cXG5wb3N0YWxcXG5wb3N0YmFnL1NcXG5wb3N0Ym94L1NcXG5wb3N0Y2FyZC9TTVxcbnBvc3Rjb2RlL1NcXG5wb3N0Y29sb25pYWxcXG5wb3N0Y29uc29uYW50YWxcXG5wb3N0ZGF0ZS9EU0dcXG5wb3N0ZG9jL01TXFxucG9zdGRvY3RvcmFsXFxucG9zdGVyL01cXG5wb3N0ZXJpb3IvU01cXG5wb3N0ZXJpdHkvTVxcbnBvc3RncmFkdWF0ZS9TTVxcbnBvc3RoYXN0ZVxcbnBvc3RodW1vdXMvWVxcbnBvc3RoeXBub3RpY1xcbnBvc3RpZS9TXFxucG9zdGlsaW9uL1NNXFxucG9zdGluZHVzdHJpYWxcXG5wb3N0aW5nL01cXG5wb3N0bHVkZS9TTVxcbnBvc3RtYW4vTVxcbnBvc3RtYXJrL1NNREdcXG5wb3N0bWFzdGVyL01TXFxucG9zdG1lblxcbnBvc3RtZW5vcGF1c2FsXFxucG9zdG1lcmlkaWFuXFxucG9zdG1pc3RyZXNzL01TXFxucG9zdG1vZGVyblxcbnBvc3Rtb2Rlcm5pc20vTVxcbnBvc3Rtb2Rlcm5pc3QvTVNcXG5wb3N0bW9ydGVtL1NNXFxucG9zdG5hc2FsXFxucG9zdG5hdGFsXFxucG9zdG9wZXJhdGl2ZVxcbnBvc3RwYWlkXFxucG9zdHBhcnR1bVxcbnBvc3Rwb25lL0RTR0xcXG5wb3N0cG9uZW1lbnQvU01cXG5wb3N0cHJhbmRpYWxcXG5wb3N0c2NyaXB0L1NNXFxucG9zdHNlYXNvbi9TTVxcbnBvc3RzeW5hcHRpY1xcbnBvc3R1bGF0ZS9YRFNNR05cXG5wb3N0dWxhdGlvbi9NXFxucG9zdHVyYWxcXG5wb3N0dXJlL01HSkRTXFxucG9zdHVyaW5nL01cXG5wb3N0d2FyXFxucG9zdHdvbWFuXFxucG9zdHdvbWVuXFxucG9zeS9TTVxcbnBvdC9DU01cXG5wb3RhYmlsaXR5L01cXG5wb3RhYmxlL1NNXFxucG90YXNoL01cXG5wb3Rhc3NpdW0vTVxcbnBvdGF0by9NXFxucG90YXRvZXNcXG5wb3RiZWxseS9EU01cXG5wb3Rib2lsZXIvU01cXG5wb3RlbmN5L01cXG5wb3RlbnQvWVxcbnBvdGVudGF0ZS9NU1xcbnBvdGVudGlhbC9NWVNcXG5wb3RlbnRpYWxpdHkvU01cXG5wb3RlbnRpYXRlL0dEU1xcbnBvdGZ1bC9TTVxcbnBvdGhlYWQvU01cXG5wb3RoZXIvU01ER1xcbnBvdGhlcmIvU01cXG5wb3Rob2xkZXIvTVNcXG5wb3Rob2xlL0RSU01aR1xcbnBvdGhvb2svU01cXG5wb3Rpb24vU01cXG5wb3RsdWNrL01TXFxucG90cGllL1NNXFxucG90cG91cnJpL1NNXFxucG90c2hlcmQvU01cXG5wb3RzaG90L01TXFxucG90dGFnZS9NXFxucG90dGVkXFxucG90dGVyL0dTTURcXG5wb3R0ZXJ5L1NNXFxucG90dGluZ1xcbnBvdHR5L1BSU01UXFxucG91Y2gvTURTR1xcbnBvdWYvU1xcbnBvdWZmZS9TXFxucG91bHRlcmVyL01TXFxucG91bHRpY2UvRFNNR1xcbnBvdWx0cnkvTVxcbnBvdW5jZS9EU01HXFxucG91bmQnc1xcbnBvdW5kL0tEU0dcXG5wb3VuZGFnZS9NXFxucG91bmRpbmcvU01cXG5wb3VyL0dEU0pcXG5wb3V0L1pHTURSU1xcbnBvdXRlci9NXFxucG92ZXJ0eS9NXFxucG93XFxucG93ZGVyL0dTTURcXG5wb3dkZXJ5XFxucG93ZXIvTURTR1xcbnBvd2VyYm9hdC9NU1xcbnBvd2VyZnVsL1lcXG5wb3dlcmhvdXNlL1NNXFxucG93ZXJsZXNzL1BZXFxucG93ZXJsZXNzbmVzcy9NXFxucG93d293L1NHTURcXG5wb3gvTVNcXG5wcFxcbnBwbVxcbnBwclxcbnByXFxucHJhY3RpY2FiaWxpdHkvTVxcbnByYWN0aWNhYmx5XFxucHJhY3RpY2FsL1NNWVxcbnByYWN0aWNhbGl0eS9TTVxcbnByYWN0aWNlL0RTTUdCXFxucHJhY3RpY2VkL1VcXG5wcmFjdGljdW0vU01cXG5wcmFjdGl0aW9uZXIvU01cXG5wcmFldG9yL1NNXFxucHJhZXRvcmlhblxcbnByYWdtYXRpYy9NU1xcbnByYWdtYXRpY2FsL1lcXG5wcmFnbWF0aXNtL01cXG5wcmFnbWF0aXN0L01TXFxucHJhaXJpZS9TTVxcbnByYWlzZS9FRFNNR1xcbnByYWlzZXdvcnRoaW5lc3MvTVxcbnByYWlzZXdvcnRoeS9QXFxucHJhbGluZS9TTVxcbnByYW0vTVNcXG5wcmFuY2UvRFJTTVpHXFxucHJhbmNlci9NXFxucHJhbmNpbmcvWVxcbnByYW5nL0RTR1xcbnByYW5rL01TXFxucHJhbmtzdGVyL1NNXFxucHJhc2VvZHltaXVtL01cXG5wcmF0L1NcXG5wcmF0ZS9NWkdEUlNcXG5wcmF0ZXIvTVxcbnByYXRmYWxsL1NNXFxucHJhdHRsZS9EUlNNWkdcXG5wcmF0dGxlci9NXFxucHJhd24vTURTR1xcbnByYXkvWkdEUlNcXG5wcmF5ZXIvTVxcbnByYXllcmZ1bC9ZXFxucHJlYWNoL0RSU1pHTFxcbnByZWFjaGVyL01cXG5wcmVhY2htZW50L01cXG5wcmVhY2h5L1JUXFxucHJlYWRvbGVzY2VuY2UvU01cXG5wcmVhZG9sZXNjZW50XFxucHJlYW1ibGUvTUdEU1xcbnByZWFycmFuZ2UvTEdEU1xcbnByZWFycmFuZ2VtZW50L01cXG5wcmVhc3NpZ25lZFxcbnByZWNhbmNlbC9TTURHXFxucHJlY2FuY2Vyb3VzXFxucHJlY2FyaW91cy9QWVxcbnByZWNhcmlvdXNuZXNzL01cXG5wcmVjYXN0XFxucHJlY2F1dGlvbi9NU1xcbnByZWNhdXRpb25hcnlcXG5wcmVjZWRlL0RTR1xcbnByZWNlZGVuY2UvTVxcbnByZWNlZGVudC9TTVxcbnByZWNlcHQvU01cXG5wcmVjZXB0b3IvU01cXG5wcmVjaW5jdC9NU1xcbnByZWNpb3NpdHkvTVxcbnByZWNpb3VzL1lQXFxucHJlY2lvdXNuZXNzL01cXG5wcmVjaXBpY2UvU01cXG5wcmVjaXBpdGFudC9NU1xcbnByZWNpcGl0YXRlL1hNWUdORFNcXG5wcmVjaXBpdGF0aW9uL01cXG5wcmVjaXBpdG91cy9ZXFxucHJlY2lzL01cXG5wcmVjaXNlL0RSU1lUR05QXFxucHJlY2lzZW5lc3MvTVxcbnByZWNpc2lvbi9NXFxucHJlY2x1ZGUvR0RTXFxucHJlY2x1c2lvbi9NXFxucHJlY29jaW91cy9ZUFxcbnByZWNvY2lvdXNuZXNzL01cXG5wcmVjb2NpdHkvTVxcbnByZWNvZ25pdGlvbi9NXFxucHJlY29nbml0aXZlXFxucHJlY29sb25pYWxcXG5wcmVjb25jZWl2ZS9HRFNcXG5wcmVjb25jZXB0aW9uL1NNXFxucHJlY29uZGl0aW9uL01ER1NcXG5wcmVjb29rL0dTRFxcbnByZWN1cnNvci9TTVxcbnByZWN1cnNvcnlcXG5wcmVkYXRlL0RTR1xcbnByZWRhdG9yL01TXFxucHJlZGF0b3J5XFxucHJlZGF3blxcbnByZWRlY2Vhc2UvR0RTXFxucHJlZGVjZXNzb3IvU01cXG5wcmVkZWZpbmVkXFxucHJlZGVzaWduYXRlL0dEU1xcbnByZWRlc3RpbmF0aW9uL01cXG5wcmVkZXN0aW5lL0RTR1xcbnByZWRldGVybWluYXRpb24vTVxcbnByZWRldGVybWluZS9aR0RSU1xcbnByZWRldGVybWluZXIvTVxcbnByZWRpY2FibGVcXG5wcmVkaWNhbWVudC9NU1xcbnByZWRpY2F0ZS9NR05WRFNcXG5wcmVkaWNhdGlvbi9NXFxucHJlZGljYXRpdmUvWVxcbnByZWRpY3QvQkdWU0RcXG5wcmVkaWN0YWJpbGl0eS9VTVxcbnByZWRpY3RhYmxlL1VcXG5wcmVkaWN0YWJseS9VXFxucHJlZGljdGlvbi9TTVxcbnByZWRpY3Rvci9NU1xcbnByZWRpZ2VzdC9HRFNcXG5wcmVkaWxlY3Rpb24vU01cXG5wcmVkaXNwb3NlL0dEU1xcbnByZWRpc3Bvc2l0aW9uL01TXFxucHJlZG5pc29uZVxcbnByZWRvbWluYW5jZS9NXFxucHJlZG9taW5hbnQvWVxcbnByZWRvbWluYXRlL1lHRFNcXG5wcmVlbWllL1NNXFxucHJlZW1pbmVuY2UvTVxcbnByZWVtaW5lbnQvWVxcbnByZWVtcHQvR1ZTRFxcbnByZWVtcHRpb24vTVxcbnByZWVtcHRpdmUvWVxcbnByZWVuL0RTR1xcbnByZWV4aXN0L0RHU1xcbnByZWV4aXN0ZW5jZS9NXFxucHJlZlxcbnByZWZhYi9TTVxcbnByZWZhYmJlZFxcbnByZWZhYmJpbmdcXG5wcmVmYWJyaWNhdGUvRFNHTlxcbnByZWZhYnJpY2F0aW9uL01cXG5wcmVmYWNlL0RTTUdcXG5wcmVmYXRvcnlcXG5wcmVmZWN0L1NNXFxucHJlZmVjdHVyZS9NU1xcbnByZWZlci9TQkxcXG5wcmVmZXJhYmx5XFxucHJlZmVyZW5jZS9NU1xcbnByZWZlcmVudGlhbC9ZXFxucHJlZmVybWVudC9NXFxucHJlZmVycmVkXFxucHJlZmVycmluZ1xcbnByZWZpZ3VyZS9HRFNcXG5wcmVmaXgvTURTR1xcbnByZWZvcm0vR1NEXFxucHJlZnJvbnRhbFxcbnByZWdhbWUvU01cXG5wcmVnbmFuY3kvU01cXG5wcmVnbmFudFxcbnByZWhlYXQvR1NEXFxucHJlaGVuc2lsZVxcbnByZWhpc3Rvcmlhbi9TXFxucHJlaGlzdG9yaWNcXG5wcmVoaXN0b3JpY2FsL1lcXG5wcmVoaXN0b3J5L01cXG5wcmVodW1hblxcbnByZWluc3RhbGxlZFxcbnByZWp1ZGdlL0dEU1xcbnByZWp1ZGdtZW50L1NNXFxucHJlanVkaWNlL01HRFNcXG5wcmVqdWRpY2VkL1VcXG5wcmVqdWRpY2lhbFxcbnByZWtpbmRlcmdhcnRlbi9TTVxcbnByZWxhY3kvTVxcbnByZWxhdGUvU01cXG5wcmVsaW0vU01cXG5wcmVsaW1pbmFyeS9TTVxcbnByZWxpdGVyYXRlXFxucHJlbHVkZS9NU1xcbnByZW1hcml0YWxcXG5wcmVtYXR1cmUvWVxcbnByZW1lZC9TTVxcbnByZW1lZGljYWxcXG5wcmVtZWRpdGF0ZS9EU0dOXFxucHJlbWVkaXRhdGVkL1VcXG5wcmVtZWRpdGF0aW9uL01cXG5wcmVtZW5zdHJ1YWxcXG5wcmVtaWVyL1NHTURcXG5wcmVtaWVyZS9NU1xcbnByZW1pZXJzaGlwL01TXFxucHJlbWlzZS9EU01HXFxucHJlbWl1bS9TTVxcbnByZW1peC9HRFNcXG5wcmVtb2xhci9TTVxcbnByZW1vbml0aW9uL01TXFxucHJlbW9uaXRvcnlcXG5wcmVuYXRhbC9ZXFxucHJlbnVwL1NNXFxucHJlbnVwdGlhbFxcbnByZW9jY3VwYXRpb24vU01cXG5wcmVvY2N1cHkvRFNHXFxucHJlb3BlcmF0aXZlXFxucHJlb3JkYWluL0dEU1xcbnByZW93bmVkXFxucHJlcC9NU1xcbnByZXBhY2thZ2UvRFNHXFxucHJlcGFja2VkXFxucHJlcGFpZFxcbnByZXBhcmF0aW9uL1NNXFxucHJlcGFyYXRvcnlcXG5wcmVwYXJlL0dEU1xcbnByZXBhcmVkL1VQXFxucHJlcGFyZWRuZXNzL1VNXFxucHJlcGF5L0dTTFxcbnByZXBheW1lbnQvTVNcXG5wcmVwZW5kXFxucHJlcG9uZGVyYW5jZS9TTVxcbnByZXBvbmRlcmFudC9ZXFxucHJlcG9uZGVyYXRlL0dEU1xcbnByZXBvc2l0aW9uL1NNXFxucHJlcG9zaXRpb25hbC9ZXFxucHJlcG9zc2Vzcy9HRFNcXG5wcmVwb3NzZXNzaW5nL1VcXG5wcmVwb3NzZXNzaW9uL1NNXFxucHJlcG9zdGVyb3VzL1lcXG5wcmVwcGVkXFxucHJlcHBpbmdcXG5wcmVwcHkvVFJTTVxcbnByZXB1YmVzY2VuY2UvTVxcbnByZXB1YmVzY2VudC9TTVxcbnByZXB1Y2UvTVNcXG5wcmVxdWVsL01TXFxucHJlcmVjb3JkL0dTRFxcbnByZXJlZ2lzdGVyL1NHRFxcbnByZXJlZ2lzdHJhdGlvbi9NXFxucHJlcmVxdWlzaXRlL01TXFxucHJlcm9nYXRpdmUvU01cXG5wcmVzXFxucHJlc2FnZS9NR0RTXFxucHJlc2J5b3BpYS9NXFxucHJlc2J5dGVyL1NNXFxucHJlc2J5dGVyeS9TTVxcbnByZXNjaG9vbC9TWk1SXFxucHJlc2Nob29sZXIvTVxcbnByZXNjaWVuY2UvTVxcbnByZXNjaWVudC9ZXFxucHJlc2NyaWJlL0RTR1xcbnByZXNjcmlwdC9TVk1cXG5wcmVzY3JpcHRpb24vU01cXG5wcmVzY3JpcHRpdmUvWVxcbnByZXNlYXNvbi9TTVxcbnByZXNlbmNlL1NNXFxucHJlc2VudC9MTURSWVpHU0JcXG5wcmVzZW50YWJseVxcbnByZXNlbnRhdGlvbi9BU01cXG5wcmVzZW50ZXIvTVxcbnByZXNlbnRpbWVudC9TTVxcbnByZXNlbnRtZW50L1NNXFxucHJlc2VydmF0aW9uL01cXG5wcmVzZXJ2YXRpb25pc3QvU01cXG5wcmVzZXJ2YXRpdmUvU01cXG5wcmVzZXJ2ZS9CRFJTTVpHXFxucHJlc2VydmVyL01cXG5wcmVzZXQvU1xcbnByZXNldHRpbmdcXG5wcmVzaHJhbmtcXG5wcmVzaHJpbmsvR1NcXG5wcmVzaHJ1bmtcXG5wcmVzaWRlL0dEU1xcbnByZXNpZGVuY3kvU01cXG5wcmVzaWRlbnQvTVNcXG5wcmVzaWRlbnRpYWxcXG5wcmVzaWRpdW0vTVxcbnByZXNvcnQvREdTXFxucHJlc3Mnc1xcbnByZXNzL0FDR1NEXFxucHJlc3NlZC9VXFxucHJlc3Nlci9NU1xcbnByZXNzaWUvU1xcbnByZXNzaW5nL1NNWVxcbnByZXNzbWFuL01cXG5wcmVzc21lblxcbnByZXNzdXJlL0RTTUdcXG5wcmVzc3VyaXphdGlvbi9NXFxucHJlc3N1cml6ZS9DR0RTXFxucHJlc3N1cml6ZXIvU01cXG5wcmVzdGlkaWdpdGF0aW9uL01cXG5wcmVzdGlnZS9NXFxucHJlc3RpZ2lvdXNcXG5wcmVzdG8vU01cXG5wcmVzdW1hYmx5XFxucHJlc3VtZS9HRFNCXFxucHJlc3VtcHRpb24vU01cXG5wcmVzdW1wdGl2ZVxcbnByZXN1bXB0dW91cy9ZUFxcbnByZXN1bXB0dW91c25lc3MvTVxcbnByZXN1cHBvc2UvRFNHXFxucHJlc3VwcG9zaXRpb24vTVNcXG5wcmV0YXhcXG5wcmV0ZWVuL01TXFxucHJldGVuZC9EUlpHU1xcbnByZXRlbmRlci9NXFxucHJldGVuc2UvU1hNTlxcbnByZXRlbnNpb24vTVxcbnByZXRlbnRpb3VzL1VZXFxucHJldGVudGlvdXNuZXNzL01cXG5wcmV0ZXJpdC9TTVxcbnByZXRlcm1cXG5wcmV0ZXJuYXR1cmFsL1lcXG5wcmV0ZXN0L0RHU1xcbnByZXRleHQvTVNcXG5wcmV0cmlhbC9TXFxucHJldHRpZnkvR0RTXFxucHJldHRpbHlcXG5wcmV0dGluZXNzL01cXG5wcmV0dHkvVEdEUlNNUFxcbnByZXR6ZWwvTVNcXG5wcmV2YWlsL0RHU1xcbnByZXZhbGVuY2UvTVxcbnByZXZhbGVudFxcbnByZXZhcmljYXRlL0RTR05YXFxucHJldmFyaWNhdGlvbi9NXFxucHJldmFyaWNhdG9yL1NNXFxucHJldmVudC9EQlNHVlxcbnByZXZlbnRhYmxlL1VcXG5wcmV2ZW50YXRpdmUvTVNcXG5wcmV2ZW50aW9uL01cXG5wcmV2ZW50aXZlL1NNXFxucHJldmlldy9NRFJTWkdcXG5wcmV2aW91cy9ZXFxucHJldmlzaW9uL01TXFxucHJld2FyXFxucHJleS9HTURTXFxucHJlenppZS9TXFxucHJpYXBpY1xcbnByaWNlJ3NcXG5wcmljZS9BR0RTXFxucHJpY2VsZXNzXFxucHJpY2V5XFxucHJpY2llclxcbnByaWNpZXN0XFxucHJpY2svTURSWVNaR1xcbnByaWNrZXIvTVxcbnByaWNrbGUvTUdEU1xcbnByaWNrbGluZXNzL01cXG5wcmlja2x5L1BSVFxcbnByaWRlL01HRFNcXG5wcmlkZWZ1bC9ZXFxucHJpZXIvTVxcbnByaWVzdC9TTVlcXG5wcmllc3Rlc3MvTVNcXG5wcmllc3Rob29kL1NNXFxucHJpZXN0bGluZXNzL01cXG5wcmllc3RseS9SVFBcXG5wcmlnL01TXFxucHJpZ2dpc2gvUFxcbnByaWdnaXNobmVzcy9NXFxucHJpbS9aR0RSWVBcXG5wcmltYWN5L01cXG5wcmltYWxcXG5wcmltYXJpbHlcXG5wcmltYXJ5L1NNXFxucHJpbWF0ZS9NU1xcbnByaW1lL01TXFxucHJpbWVyL01cXG5wcmltZXZhbFxcbnByaW1pbmcvTVxcbnByaW1pdGl2ZS9TUE1ZXFxucHJpbWl0aXZlbmVzcy9NXFxucHJpbW1lclxcbnByaW1tZXN0XFxucHJpbW5lc3MvTVxcbnByaW1vZ2VuaXRvci9TTVxcbnByaW1vZ2VuaXR1cmUvTVxcbnByaW1vcmRpYWwvWVxcbnByaW1wL0RTR1xcbnByaW1yb3NlL1NNXFxucHJpbXVsYS9TXFxucHJpbmNlL1NNWVxcbnByaW5jZWRvbS9TTVxcbnByaW5jZWxpbmVzcy9NXFxucHJpbmNlbHkvUFJUXFxucHJpbmNlc3MvTVNcXG5wcmluY2lwYWwvU01ZXFxucHJpbmNpcGFsaXR5L1NNXFxucHJpbmNpcGxlL0RTTVxcbnByaW5jaXBsZWQvVVxcbnByaW50L0FNRFNHXFxucHJpbnRhYmxlL1VcXG5wcmludGVyL01TXFxucHJpbnRpbmcvU01cXG5wcmludG1ha2luZ1xcbnByaW50b3V0L1NNXFxucHJpb24vU1xcbnByaW9yL01TXFxucHJpb3Jlc3MvTVNcXG5wcmlvcml0aXphdGlvblxcbnByaW9yaXRpemUvRFNHXFxucHJpb3JpdHkvU01cXG5wcmlvcnkvU01cXG5wcmlzbS9NU1xcbnByaXNtYXRpY1xcbnByaXNvbi9TWk1SXFxucHJpc29uZXIvTVxcbnByaXNzaWx5XFxucHJpc3NpbmVzcy9NXFxucHJpc3N5L1BUUlxcbnByaXN0aW5lXFxucHJpdGhlZVxcbnByaXZhY3kvTVxcbnByaXZhdGUvWE1ZVE5SU1xcbnByaXZhdGVlci9TTVxcbnByaXZhdGlvbi9DU01cXG5wcml2YXRpemF0aW9uL1NNXFxucHJpdmF0aXplL0RTR1xcbnByaXZldC9TTVxcbnByaXZpbGVnZS9EU01HXFxucHJpdmlsZWdlZC9VXFxucHJpdmlseVxcbnByaXZ5L1JTTVRcXG5wcml6ZS9NR0RTXFxucHJpemVkL0FcXG5wcml6ZWZpZ2h0L1pHU01SXFxucHJpemVmaWdodGVyL01cXG5wcml6ZWZpZ2h0aW5nL01cXG5wcml6ZXdpbm5lci9NU1xcbnByaXpld2lubmluZ1xcbnByby9TTVxcbnByb2JhYmlsaXN0aWNcXG5wcm9iYWJpbGl0eS9TTVxcbnByb2JhYmxlL1NNXFxucHJvYmFibHlcXG5wcm9iYXRlL01OXFxucHJvYmF0aW9uL1pNUlxcbnByb2JhdGlvbmFsXFxucHJvYmF0aW9uYXJ5XFxucHJvYmF0aW9uZXIvTVxcbnByb2JlL01HRFNCSlxcbnByb2JpdHkvTVxcbnByb2JsZW0vTVNcXG5wcm9ibGVtYXRpYy9VXFxucHJvYmxlbWF0aWNhbC9ZXFxucHJvYm9zY2VzXFxucHJvYm9zY2lzL01TXFxucHJvY2FpbmUvTVxcbnByb2NlZHVyYWxcXG5wcm9jZWR1cmUvU01cXG5wcm9jZWVkL0dKRFNcXG5wcm9jZWVkaW5nL01cXG5wcm9jZWVkcy9NXFxucHJvY2VzcydzXFxucHJvY2Vzcy9BR0RTXFxucHJvY2Vzc2FibGVcXG5wcm9jZXNzZWQvVVxcbnByb2Nlc3Npb24vR0RcXG5wcm9jZXNzaW9uYWwvTVNcXG5wcm9jZXNzb3IvU01cXG5wcm9jbGFtYXRpb24vTVNcXG5wcm9jbGl2aXR5L1NNXFxucHJvY3Jhc3RpbmF0ZS9EU0dOXFxucHJvY3Jhc3RpbmF0aW9uL01cXG5wcm9jcmFzdGluYXRvci9NU1xcbnByb2NyZWF0ZS9WXFxucHJvY3Rvci9HTURTXFxucHJvY3VyZW1lbnQvTVxcbnByb2QvTVNcXG5wcm9kaWdhbC9NWVNcXG5wcm9kaWdhbGl0eS9NXFxucHJvZGlnaW91cy9ZXFxucHJvZGlneS9TTVxcbnByb2R1Y2Unc1xcbnByb2R1Y2UvQVpHRFJTXFxucHJvZHVjZXIvQU1cXG5wcm9kdWNpYmxlL0FcXG5wcm9kdWN0aW9uL0FTTVxcbnByb2R1Y3RpdmUvVVlcXG5wcm9kdWN0aXZlbmVzcy9NXFxucHJvZHVjdGl2aXR5L01cXG5wcm9mL01TXFxucHJvZmFuYXRpb24vTVNcXG5wcm9mYW5lL1BZR0RTXFxucHJvZmFuZW5lc3MvTVxcbnByb2Zhbml0eS9TTVxcbnByb2Zlc3NlZC9ZXFxucHJvZmVzc2lvbi9TTVxcbnByb2Zlc3Npb25hbC9NWVNcXG5wcm9mZXNzaW9uYWxpc20vTVxcbnByb2Zlc3Npb25hbGl6YXRpb25cXG5wcm9mZXNzaW9uYWxpemUvRFNHXFxucHJvZmVzc29yL1NNXFxucHJvZmVzc29yaWFsL1lcXG5wcm9mZXNzb3JzaGlwL1NNXFxucHJvZmZlci9HTURTXFxucHJvZmljaWVuY3kvTVxcbnByb2ZpY2llbnQvTVlTXFxucHJvZml0L0JHRFxcbnByb2ZpdGFiaWxpdHkvTVxcbnByb2ZpdGFibGUvVVxcbnByb2ZpdGFibHkvVVxcbnByb2ZpdGVlci9NREdTXFxucHJvZml0ZWVyaW5nL01cXG5wcm9maXRlcm9sZS9TTVxcbnByb2ZpdGxlc3NcXG5wcm9mbGlnYWN5L01cXG5wcm9mbGlnYXRlL1NNWVxcbnByb2Zvcm1hXFxucHJvZm91bmQvUllUUFxcbnByb2ZvdW5kbmVzcy9NXFxucHJvZnVuZGl0eS9TTVxcbnByb2Z1c2UvUFlcXG5wcm9mdXNlbmVzcy9NXFxucHJvZ2VuaXRvci9TTVxcbnByb2dlbnkvTVxcbnByb2dlc3Rlcm9uZS9NXFxucHJvZ2VzdGluL1NcXG5wcm9nbmF0aG91c1xcbnByb2dub3Nlc1xcbnByb2dub3Npcy9NXFxucHJvZ25vc3RpYy9NU1xcbnByb2dub3N0aWNhdGUvWEdORFNcXG5wcm9nbm9zdGljYXRpb24vTVxcbnByb2dub3N0aWNhdG9yL01TXFxucHJvZ3JhbS9DQVNcXG5wcm9ncmFtbWFibGUvTVNcXG5wcm9ncmFtbWF0aWNcXG5wcm9ncmFtbWVkL0FDXFxucHJvZ3JhbW1lci9NU1xcbnByb2dyYW1taW5nL1NNXFxucHJvZ3Jlc3MvTURTR1ZcXG5wcm9ncmVzc2lvbi9NU1xcbnByb2dyZXNzaXZlL1BNWVNcXG5wcm9ncmVzc2l2ZW5lc3MvTVxcbnByb2hpYml0L0RHVlNcXG5wcm9oaWJpdGlvbi9TTVxcbnByb2hpYml0aW9uaXN0L01TXFxucHJvaGliaXRpdmUvWVxcbnByb2hpYml0b3J5XFxucHJvamVjdC9HTURTXFxucHJvamVjdGlsZS9TTVxcbnByb2plY3Rpb24vU01cXG5wcm9qZWN0aW9uaXN0L1NNXFxucHJvamVjdG9yL01TXFxucHJva2FyeW90ZS9NU1xcbnByb2thcnlvdGljXFxucHJvbGUvU1xcbnByb2xldGFyaWFuL01TXFxucHJvbGV0YXJpYXQvTVxcbnByb2xpZmVyYXRlL0RTR05cXG5wcm9saWZlcmF0aW9uL01cXG5wcm9saWZpY1xcbnByb2xpZmljYWxseVxcbnByb2xpeC9ZXFxucHJvbGl4aXR5L01cXG5wcm9sb2d1ZS9TTVxcbnByb2xvbmdhdGlvbi9TTVxcbnByb20vTVxcbnByb21lbmFkZS9NR0RTXFxucHJvbWV0aGl1bS9NXFxucHJvbWluZW5jZS9NXFxucHJvbWluZW50L1lcXG5wcm9taXNjdWl0eS9NXFxucHJvbWlzY3VvdXMvWVxcbnByb21pc2UvRFNNR1xcbnByb21pc2luZy9ZXFxucHJvbWlzc29yeVxcbnByb21vL01cXG5wcm9tb250b3J5L1NNXFxucHJvbW90ZS9EUlpHXFxucHJvbW90ZXIvTVxcbnByb21vdGlvbmFsXFxucHJvbXB0L0pQU01EUllaVEdcXG5wcm9tcHRlZC9VXFxucHJvbXB0ZXIvTVxcbnByb21wdGluZy9NXFxucHJvbXB0aXR1ZGUvTVxcbnByb21wdG5lc3MvTVxcbnByb211bGdhdGUvR05EU1xcbnByb211bGdhdGlvbi9NXFxucHJvbXVsZ2F0b3IvTVNcXG5wcm9uZS9QXFxucHJvbmVuZXNzL01cXG5wcm9uZy9NRFNcXG5wcm9uZ2hvcm4vTVNcXG5wcm9ub21pbmFsL01cXG5wcm9ub3VuY2UvRFNMR1xcbnByb25vdW5jZWFibGUvVVxcbnByb25vdW5jZW1lbnQvU01cXG5wcm9udG9cXG5wcm9udW5jaWF0aW9uL01TXFxucHJvb2YvQURHU01cXG5wcm9vZnJlYWQvU1JaR1xcbnByb29mcmVhZGVyL01cXG5wcm9wL01TXFxucHJvcGFnYW5kYS9NXFxucHJvcGFnYW5kaXN0L01TXFxucHJvcGFnYW5kaXplL0dEU1xcbnByb3BhZ2F0ZS9EU0dOXFxucHJvcGFnYXRpb24vTVxcbnByb3BhZ2F0b3IvU01cXG5wcm9wZWwvU1xcbnByb3BlbGxhbnQvTVNcXG5wcm9wZWxsZWRcXG5wcm9wZWxsZXIvU01cXG5wcm9wZWxsaW5nXFxucHJvcGVuc2l0eS9TTVxcbnByb3Blci9NUllUXFxucHJvcGVydHkvRFNNXFxucHJvcGhlY3kvU01cXG5wcm9waGVzaWVyL01cXG5wcm9waGVzeS9EUlNNWkdcXG5wcm9waGV0L1NNXFxucHJvcGhldGVzcy9NU1xcbnByb3BoZXRpY1xcbnByb3BoZXRpY2FsL1lcXG5wcm9waHlsYWN0aWMvU01cXG5wcm9waHlsYXhlc1xcbnByb3BoeWxheGlzL01cXG5wcm9waW5xdWl0eS9NXFxucHJvcGl0aWF0ZS9EU0dOXFxucHJvcGl0aWF0aW9uL01cXG5wcm9waXRpYXRvcnlcXG5wcm9waXRpb3VzL1lcXG5wcm9wb25lbnQvU01cXG5wcm9wb3J0aW9uL0VTTVxcbnByb3BvcnRpb25hbC9ZU1xcbnByb3BvcnRpb25hbGl0eVxcbnByb3BvcnRpb25hdGUvRVlcXG5wcm9wb3NhbC9NU1xcbnByb3BwZWRcXG5wcm9wcGluZ1xcbnByb3ByYW5vbG9sXFxucHJvcHJpZXRhcnkvU01cXG5wcm9wcmlldGllcy9NXFxucHJvcHJpZXRvci9TTVxcbnByb3ByaWV0b3JpYWwvWVxcbnByb3ByaWV0b3JzaGlwL01cXG5wcm9wcmlldHJlc3MvTVNcXG5wcm9wcmlldHkvU01cXG5wcm9wdWxzaW9uL01cXG5wcm9wdWxzaXZlXFxucHJvcmF0ZS9EU0dcXG5wcm9yb2dhdGlvbi9NXFxucHJvcm9ndWUvR0RcXG5wcm9zYWljXFxucHJvc2FpY2FsbHlcXG5wcm9zY2VuaXVtL1NNXFxucHJvc2NpdXR0by9NXFxucHJvc2NyaWJlL0RHXFxucHJvc2NyaXB0aW9uL01TXFxucHJvc2UvTVxcbnByb3NlY3V0ZS9EU1hHTlxcbnByb3NlY3V0aW9uL01cXG5wcm9zZWN1dG9yL01TXFxucHJvc2VseXRlL0RTTUdcXG5wcm9zZWx5dGlzbS9NXFxucHJvc2VseXRpemUvRFJTWkdcXG5wcm9zZWx5dGl6ZXIvTVxcbnByb3NvY2lhbFxcbnByb3NvZHkvU01cXG5wcm9zcGVjdC9NREdWU1xcbnByb3NwZWN0aXZlL1lcXG5wcm9zcGVjdG9yL1NNXFxucHJvc3BlY3R1cy9NU1xcbnByb3NwZXIvR1NEXFxucHJvc3Blcml0eS9NXFxucHJvc3Blcm91cy9ZXFxucHJvc3RhdGUvTVNcXG5wcm9zdGhlc2VzXFxucHJvc3RoZXNpcy9NXFxucHJvc3RoZXRpY1xcbnByb3N0aXR1dGUvTUdORFNcXG5wcm9zdGl0dXRpb24vTVxcbnByb3N0cmF0ZS9HTlhEU1xcbnByb3N0cmF0aW9uL01cXG5wcm9zeS9SVFxcbnByb3RhY3Rpbml1bS9NXFxucHJvdGFnb25pc3QvU01cXG5wcm90ZWFuXFxucHJvdGVjdC9HVlNEXFxucHJvdGVjdGVkL1VcXG5wcm90ZWN0aW9uL1NNXFxucHJvdGVjdGlvbmlzbS9NXFxucHJvdGVjdGlvbmlzdC9NU1xcbnByb3RlY3RpdmUvUFlcXG5wcm90ZWN0aXZlbmVzcy9NXFxucHJvdGVjdG9yL01TXFxucHJvdGVjdG9yYXRlL01TXFxucHJvdGVnZS9TTVxcbnByb3RlZ2VlL1NcXG5wcm90ZWluL1NNXFxucHJvdGVzdGFudC9TXFxucHJvdGVzdGF0aW9uL01TXFxucHJvdG9jb2wvTVNcXG5wcm90b24vU01cXG5wcm90b3BsYXNtL01cXG5wcm90b3BsYXNtaWNcXG5wcm90b3R5cGUvTUdTXFxucHJvdG90eXBpY2FsXFxucHJvdG96b2FcXG5wcm90b3pvYW4vTVNcXG5wcm90b3pvaWNcXG5wcm90cmFjdC9HRFxcbnByb3RydWRlL0dEU1xcbnByb3RydXNpbGVcXG5wcm90cnVzaW9uL01TXFxucHJvdHViZXJhbmNlL01TXFxucHJvdHViZXJhbnRcXG5wcm91ZC9SWVRcXG5wcm92L05CXFxucHJvdmFiaWxpdHkvTVxcbnByb3ZhYmx5XFxucHJvdmUvRUFHRFNcXG5wcm92ZWQvVVxcbnByb3Zlbi9VXFxucHJvdmVuYW5jZS9TTVxcbnByb3ZlbmRlci9NXFxucHJvdmVuaWVuY2UvTVxcbnByb3ZlcmJpYWwvWVxcbnByb3ZpZGUvRFJTWkdcXG5wcm92aWRlZC9VXFxucHJvdmlkZW5jZS9NXFxucHJvdmlkZW50L1lcXG5wcm92aWRlbnRpYWwvWVxcbnByb3ZpZGVyL01cXG5wcm92aW5jZS9NU1xcbnByb3ZpbmNpYWwvU01ZXFxucHJvdmluY2lhbGlzbS9NXFxucHJvdmlzaW9uYWwvWVxcbnByb3Zpc28vU01cXG5wcm92b2NhdGV1ci9TXFxucHJvdm9jYXRpdmUvUFlcXG5wcm92b2NhdGl2ZW5lc3MvTVxcbnByb3Zva2UvRFJTWkdcXG5wcm92b2tlZC9VXFxucHJvdm9rZXIvTVxcbnByb3Zva2luZy9ZXFxucHJvdm9sb25lL01cXG5wcm92b3N0L1NNXFxucHJvdy9NU1xcbnByb3dlc3MvTVxcbnByb3dsL01EUlNaR1xcbnByb3dsZXIvTVxcbnByb3hpbWFsXFxucHJveGltYXRlXFxucHJveGltaXR5L01cXG5wcm94eS9TTVxcbnBydWRlL01TXFxucHJ1ZGVuY2UvTVxcbnBydWRlbnQvWVxcbnBydWRlbnRpYWwvWVxcbnBydWRlcnkvTVxcbnBydWRpc2gvWVBcXG5wcnVkaXNobmVzcy9NXFxucHJ1bmUvTVpHRFJTXFxucHJ1bmVyL01cXG5wcnVyaWVuY2UvTVxcbnBydXJpZW50L1lcXG5wcnkvWlRHRFJTTVxcbnBzYWxtL01TXFxucHNhbG1pc3QvU01cXG5wc2FsdGVyeS9TTVxcbnBzZXBob2xvZ2lzdC9TXFxucHNlcGhvbG9neVxcbnBzZXVkL1NcXG5wc2V1ZG8vU1xcbnBzZXVkb255bS9TTVxcbnBzZXVkb255bW91c1xcbnBzZXVkb3NjaWVuY2UvTVNcXG5wc2V1ZHlcXG5wc2hhdy9NU1xcbnBzaS9TTVxcbnBzaXR0YWNvc2lzL01cXG5wc29yaWFzaXMvTVxcbnBzc3RcXG5wc3ljaC9NRFNHXFxucHN5Y2hlL01cXG5wc3ljaGVkZWxpYVxcbnBzeWNoZWRlbGljL1NNXFxucHN5Y2hlZGVsaWNhbGx5XFxucHN5Y2hpYXRyaWNcXG5wc3ljaGlhdHJpc3QvU01cXG5wc3ljaGlhdHJ5L01cXG5wc3ljaGljL01TXFxucHN5Y2hpY2FsL1lcXG5wc3ljaG8vU01cXG5wc3ljaG9hY3RpdmVcXG5wc3ljaG9hbmFseXNlc1xcbnBzeWNob2FuYWx5c2lzL01cXG5wc3ljaG9hbmFseXN0L1NNXFxucHN5Y2hvYW5hbHl0aWNcXG5wc3ljaG9hbmFseXRpY2FsL1lcXG5wc3ljaG9hbmFseXplL0RTR1xcbnBzeWNob2JhYmJsZS9NXFxucHN5Y2hvZHJhbWEvTVNcXG5wc3ljaG9nZW5pY1xcbnBzeWNob2tpbmVzaXNcXG5wc3ljaG9raW5ldGljXFxucHN5Y2hvbG9naWNhbC9ZXFxucHN5Y2hvbG9naXN0L01TXFxucHN5Y2hvbG9neS9TTVxcbnBzeWNob21ldHJpY1xcbnBzeWNob25ldXJvc2VzXFxucHN5Y2hvbmV1cm9zaXMvTVxcbnBzeWNob3BhdGgvTVxcbnBzeWNob3BhdGhpY1xcbnBzeWNob3BhdGhvbG9neVxcbnBzeWNob3BhdGhzXFxucHN5Y2hvcGF0aHkvTVxcbnBzeWNob3BoYXJtYWNvbG9neVxcbnBzeWNob3BoeXNpb2xvZ3lcXG5wc3ljaG9zL1NcXG5wc3ljaG9zaXMvTVxcbnBzeWNob3NvbWF0aWNcXG5wc3ljaG90aGVyYXBpc3QvTVNcXG5wc3ljaG90aGVyYXB5L1NNXFxucHN5Y2hvdGljL1NNXFxucHN5Y2hvdGljYWxseVxcbnBzeWNob3Ryb3BpYy9NU1xcbnBzeWNoc1xcbnB0L0NcXG5wdGFybWlnYW4vTVNcXG5wdGVyb2RhY3R5bC9NU1xcbnB0b21haW5lL1NNXFxucHViL1NNXFxucHViZXJ0YWxcXG5wdWJlcnR5L01cXG5wdWJlcy9NXFxucHViZXNjZW5jZS9NXFxucHViZXNjZW50XFxucHViaWNcXG5wdWJpcy9NXFxucHVibGljL0FNXFxucHVibGljYW4vQU1TXFxucHVibGljYXRpb24vQVNNXFxucHVibGljaXN0L01TXFxucHVibGljaXR5L01cXG5wdWJsaWNpemUvR0RTXFxucHVibGljbHlcXG5wdWJsaXNoL0FHRFNcXG5wdWJsaXNoYWJsZVxcbnB1Ymxpc2hlZC9VXFxucHVibGlzaGVyL01TXFxucHVibGlzaGluZy9NXFxucHVjZS9NXFxucHVjay9aTVJTXFxucHVja2VyL01ER1xcbnB1Y2tpc2gvWVBcXG5wdWNraXNobmVzcy9NXFxucHVkL1NcXG5wdWRkaW5nL1NNXFxucHVkZGxlL0RTTUdcXG5wdWRkbGluZy9NXFxucHVkZW5kYVxcbnB1ZGVuZHVtL01cXG5wdWRnaW5lc3MvTVxcbnB1ZGd5L1BSVFxcbnB1ZWJsby9TTVxcbnB1ZXJpbGVcXG5wdWVyaWxpdHkvTVxcbnB1ZXJwZXJhbFxcbnB1ZmYvWkdNRFJTXFxucHVmZmJhbGwvU01cXG5wdWZmZXIvTVxcbnB1ZmZpbi9TTVxcbnB1ZmZpbmVzcy9NXFxucHVmZnkvUFJUXFxucHVnL1NNXFxucHVnaWxpc20vTVxcbnB1Z2lsaXN0L1NNXFxucHVnaWxpc3RpY1xcbnB1Z25hY2lvdXMvWVBcXG5wdWduYWNpb3VzbmVzcy9NXFxucHVnbmFjaXR5L01cXG5wdWtlL01HRFNcXG5wdWtrYVxcbnB1bGNocml0dWRlL01cXG5wdWxjaHJpdHVkaW5vdXNcXG5wdWxlL0dEU1xcbnB1bGwvWkdNRFJTXFxucHVsbGJhY2svTVNcXG5wdWxsZXIvTVxcbnB1bGxldC9TTVxcbnB1bGxleS9TTVxcbnB1bGxvdXQvTVNcXG5wdWxsb3Zlci9TTVxcbnB1bG1vbmFyeVxcbnB1bHAvR01EU1xcbnB1bHBpbmVzcy9NXFxucHVscGl0L1NNXFxucHVscHdvb2QvTVxcbnB1bHB5L1JQVFxcbnB1bHNhci9TTVxcbnB1bHNhdGUvWEdORFNcXG5wdWxzYXRpb24vTVxcbnB1bHNlL0FNR0RTXFxucHVsdmVyaXphdGlvbi9NXFxucHVsdmVyaXplL0RTR1xcbnB1bWEvTVNcXG5wdW1pY2UvU01cXG5wdW1tZWwvU0dEXFxucHVtcC9aR01EUlNcXG5wdW1wZXIvTVxcbnB1bXBlcm5pY2tlbC9NXFxucHVtcGtpbi9NU1xcbnB1bi9TTVxcbnB1bmNoL01EUlNaR1xcbnB1bmNoYmFnL1NcXG5wdW5jaGVvbi9NU1xcbnB1bmNoZXIvTVxcbnB1bmNobGluZS9TXFxucHVuY2h5L1RSXFxucHVuY3RpbGlvL01cXG5wdW5jdGlsaW91cy9QWVxcbnB1bmN0aWxpb3VzbmVzcy9NXFxucHVuY3R1YWwvWVxcbnB1bmN0dWFsaXR5L01cXG5wdW5jdHVhdGUvR05EU1xcbnB1bmN0dWF0aW9uL01cXG5wdW5jdHVyZS9EU01HXFxucHVuZGl0L1NNXFxucHVuZGl0cnkvTVxcbnB1bmdlbmN5L01cXG5wdW5nZW50L1lcXG5wdW5pbmVzcy9NXFxucHVuaXNoL0JMR0RTXFxucHVuaXNoZWQvVVxcbnB1bmlzaGluZy9ZXFxucHVuaXNobWVudC9NU1xcbnB1bml0aXZlL1lcXG5wdW5rL1RNUlNcXG5wdW5uZWRcXG5wdW5uZXQvU1xcbnB1bm5pbmdcXG5wdW5zdGVyL1NNXFxucHVudC9aR01EUlNcXG5wdW50ZXIvTVxcbnB1bnkvVFJQXFxucHVwL1NNXFxucHVwYS9NXFxucHVwYWVcXG5wdXBhbFxcbnB1cGF0ZS9EU0dcXG5wdXBpbC9NU1xcbnB1cHBlZFxcbnB1cHBldC9NU1xcbnB1cHBldGVlci9TTVxcbnB1cHBldHJ5L01cXG5wdXBwaW5nXFxucHVwcHkvU01cXG5wdXJibGluZFxcbnB1cmNoYXNlL0RSU01aR0JcXG5wdXJjaGFzZXIvTVxcbnB1cmRhaC9NXFxucHVyZS9QWVRSXFxucHVyZWJyZWQvU01cXG5wdXJlZS9NRFNcXG5wdXJlZWluZ1xcbnB1cmVuZXNzL01cXG5wdXJnYXRpdmUvU01cXG5wdXJnYXRvcmlhbFxcbnB1cmdhdG9yeS9TTVxcbnB1cmdlL01aR0RSU1xcbnB1cmdlci9NXFxucHVyaWZpY2F0aW9uL01cXG5wdXJpZmllci9NXFxucHVyaWZ5L05EUlNaR1xcbnB1cmluZS9NU1xcbnB1cmlzbS9NXFxucHVyaXN0L01TXFxucHVyaXN0aWNcXG5wdXJpdGFuL1NNXFxucHVyaXRhbmljYWwvWVxcbnB1cml0YW5pc20vTVxcbnB1cml0eS9NXFxucHVybC9HTURTXFxucHVybGlldS9TTVxcbnB1cmxvaW4vU0dEXFxucHVycGxlL01UUlNcXG5wdXJwbGlzaFxcbnB1cnBvcnQvU01ER1xcbnB1cnBvcnRlZC9ZXFxucHVycG9zZS9EU01ZR1xcbnB1cnBvc2VkL0FcXG5wdXJwb3NlZnVsL1lQXFxucHVycG9zZWZ1bG5lc3MvTVxcbnB1cnBvc2VsZXNzL1BZXFxucHVyci9HTURTXFxucHVyc2UvTVpHRFJTXFxucHVyc2VyL01cXG5wdXJzdWFuY2UvTVxcbnB1cnN1YW50XFxucHVyc3VlL1pHRFJTXFxucHVyc3Vlci9NXFxucHVyc3VpdC9TTVxcbnB1cnVsZW5jZS9NXFxucHVydWxlbnRcXG5wdXJ2ZXkvRFNHXFxucHVydmV5YW5jZS9NXFxucHVydmV5b3IvU01cXG5wdXJ2aWV3L01cXG5wdXMvTVxcbnB1c2gvWkdNRFJTXFxucHVzaGJpa2UvU1xcbnB1c2hjYXJ0L1NNXFxucHVzaGNoYWlyL1NcXG5wdXNoZXIvTVxcbnB1c2hpbHlcXG5wdXNoaW5lc3MvTVxcbnB1c2hvdmVyL01TXFxucHVzaHBpbi9TXFxucHVzaHkvVFJQXFxucHVzaWxsYW5pbWl0eS9NXFxucHVzaWxsYW5pbW91cy9ZXFxucHVzcy9NU1xcbnB1c3N5L1RSU01cXG5wdXNzeWNhdC9NU1xcbnB1c3N5Zm9vdC9EU0dcXG5wdXN0dWxhclxcbnB1c3R1bGUvU01cXG5wdXQvSVNNXFxucHV0YXRpdmVcXG5wdXRvdXQvTVNcXG5wdXRyZWZhY3Rpb24vTVxcbnB1dHJlZmFjdGl2ZVxcbnB1dHJlZnkvR0RTXFxucHV0cmVzY2VuY2UvTVxcbnB1dHJlc2NlbnRcXG5wdXRyaWRcXG5wdXRzY2gvTVNcXG5wdXR0L1pHTURSU1xcbnB1dHRlZC9JXFxucHV0dGVlL01TXFxucHV0dGVyL01EUlpHXFxucHV0dGVyZXIvTVxcbnB1dHRpbmcvSVxcbnB1dHR5L0dEU01cXG5wdXR6L1NcXG5wdXp6bGUvTVpHRFJTTFxcbnB1enpsZW1lbnQvTVxcbnB1enpsZXIvTVxcbnB2dFxcbnB3bi9TR0RcXG5weWVsb25lcGhyaXRpc1xcbnB5Z215L1NNXFxucHlsb24vU01cXG5weWxvcmlcXG5weWxvcmljXFxucHlsb3J1cy9NXFxucHlvcnJoZWEvTVxcbnB5cmFtaWQvR1NNRFxcbnB5cmFtaWRhbFxcbnB5cmUvTVNcXG5weXJpbWlkaW5lL01TXFxucHlyaXRlL1NNXFxucHlyaXRlcy9NXFxucHlyb21hbmlhL01cXG5weXJvbWFuaWFjL1NNXFxucHlyb3RlY2huaWMvU1xcbnB5cm90ZWNobmljYWxcXG5weXJvdGVjaG5pY3MvTVxcbnB5cnV2YXRlXFxucHl0aG9uL1NNXFxucHl4L01TXFxucHphenpcXG5xXFxucXJcXG5xdC9TXFxucXR5XFxucXVhXFxucXVhY2svR01EU1xcbnF1YWNrZXJ5L01cXG5xdWFkL01TXFxucXVhZHJhbmdsZS9TTVxcbnF1YWRyYW5ndWxhclxcbnF1YWRyYW50L01TXFxucXVhZHJhcGhvbmljXFxucXVhZHJhdGljL01TXFxucXVhZHJhdHVyZVxcbnF1YWRyZW5uaWFsXFxucXVhZHJlbm5pdW0vTVNcXG5xdWFkcmljZXBzL01TXFxucXVhZHJpbGF0ZXJhbC9TTVxcbnF1YWRyaWxsZS9YTU5TXFxucXVhZHJpbGxpb24vTVxcbnF1YWRyaXBsZWdpYS9NXFxucXVhZHJpcGxlZ2ljL1NNXFxucXVhZHJpdml1bS9NXFxucXVhZHJ1cGVkL01TXFxucXVhZHJ1cGVkYWxcXG5xdWFkcnVwbGUvTUdEU1xcbnF1YWRydXBsZXQvTVNcXG5xdWFkcnVwbGljYXRlL01HTkRTXFxucXVhZHJ1cGxpY2F0aW9uL01cXG5xdWFmZi9HTURTXFxucXVhZ21pcmUvU01cXG5xdWFob2cvTVNcXG5xdWFpbC9HTURTXFxucXVhaW50L1BSWVRcXG5xdWFpbnRuZXNzL01cXG5xdWFrZS9NR0RTXFxucXVha3lcXG5xdWFsaWZpY2F0aW9uL0VNXFxucXVhbGlmaWVkL1VcXG5xdWFsaWZpZXIvU01cXG5xdWFsaWZ5L0VHWE5EU1xcbnF1YWxpdGF0aXZlL1lcXG5xdWFsaXR5L1NNXFxucXVhbG0vTVNcXG5xdWFsbWlzaFxcbnF1YW5kYXJ5L1NNXFxucXVhbmdvL1NcXG5xdWFudGFcXG5xdWFudGlmaWFibGVcXG5xdWFudGlmaWNhdGlvbi9NXFxucXVhbnRpZmllci9NXFxucXVhbnRpZnkvTkRSU1pHXFxucXVhbnRpdGF0aW9uXFxucXVhbnRpdGF0aXZlL1lcXG5xdWFudGl0eS9TTVxcbnF1YW50aXphdGlvblxcbnF1YW50aXplXFxucXVhbnR1bS9NXFxucXVhcmFudGluZS9NR0RTXFxucXVhcmsvTVNcXG5xdWFycmVsL1NaR01EUlxcbnF1YXJyZWxlci9NXFxucXVhcnJlbHNvbWUvUFxcbnF1YXJyZWxzb21lbmVzcy9NXFxucXVhcnJ5L0RTTUdcXG5xdWFydC9NU1xcbnF1YXJ0ZXIvU0dNRFlcXG5xdWFydGVyYmFjay9HTURTXFxucXVhcnRlcmRlY2svTVNcXG5xdWFydGVyZmluYWwvU01cXG5xdWFydGVybHkvU01cXG5xdWFydGVybWFzdGVyL01TXFxucXVhcnRlcnN0YWZmL01cXG5xdWFydGVyc3RhdmVzXFxucXVhcnRldC9TTVxcbnF1YXJ0by9NU1xcbnF1YXJ0ei9NXFxucXVhc2FyL01TXFxucXVhc2gvR0RTXFxucXVhc2lcXG5xdWF0cmFpbi9NU1xcbnF1YXZlci9NRFNHXFxucXVhdmVyeVxcbnF1YXkvTVNcXG5xdWF5c2lkZS9TXFxucXVlYXNpbHlcXG5xdWVhc2luZXNzL01cXG5xdWVhc3kvVFBSXFxucXVlZW4vR01EWVNcXG5xdWVlbmx5L1JUXFxucXVlZXIvUFRHTURSWVNcXG5xdWVlcm5lc3MvTVxcbnF1ZWxsL0dEU1xcbnF1ZW5jaC9aR0RSU0JcXG5xdWVuY2hhYmxlL1VcXG5xdWVuY2hlci9NXFxucXVlbmNobGVzc1xcbnF1ZXJ1bG91cy9ZUFxcbnF1ZXJ1bG91c25lc3MvTVxcbnF1ZXJ5L0RTTUdcXG5xdWVzXFxucXVlc2FkaWxsYS9NU1xcbnF1ZXN0L0lGQU1TXFxucXVlc3RlZFxcbnF1ZXN0aW5nXFxucXVlc3Rpb24vU01EUlpHQkpcXG5xdWVzdGlvbmFibGUvVVxcbnF1ZXN0aW9uYWJseS9VXFxucXVlc3Rpb25lZC9VXFxucXVlc3Rpb25lci9NXFxucXVlc3Rpb25pbmcvTVlcXG5xdWVzdGlvbm5haXJlL1NNXFxucXVldWUnc1xcbnF1ZXVlL0NEU1xcbnF1ZXVpbmdcXG5xdWliYmxlL0RSU01aR1xcbnF1aWJibGVyL01cXG5xdWljaGUvU01cXG5xdWljay9NTlJZWFRQXFxucXVpY2tlbi9ER1xcbnF1aWNrZmlyZVxcbnF1aWNraWUvU01cXG5xdWlja2xpbWUvTVxcbnF1aWNrbmVzcy9NXFxucXVpY2tzYW5kL01TXFxucXVpY2tzaWx2ZXIvTVxcbnF1aWNrc3RlcC9NU1xcbnF1aWQvTVNcXG5xdWllc2NlbmNlL01cXG5xdWllc2NlbnQvWVxcbnF1aWV0L1NNRE5SWVhUR1BcXG5xdWlldGVuL0RHXFxucXVpZXRpc21cXG5xdWlldG5lc3MvTVxcbnF1aWV0dWRlL0lFTVxcbnF1aWV0dXMvTVNcXG5xdWlmZi9TXFxucXVpbGwvU01cXG5xdWlsdC9TTURSWkdcXG5xdWlsdGVyL01cXG5xdWlsdGluZy9NXFxucXVpbi9TXFxucXVpbmNlL1NNXFxucXVpbmUvU1xcbnF1aW5pZGluZVxcbnF1aW5pbmUvTVxcbnF1aW5vYVxcbnF1aW5zeS9NXFxucXVpbnQvU01cXG5xdWludGVzc2VuY2UvU01cXG5xdWludGVzc2VudGlhbC9ZXFxucXVpbnRldC9TTVxcbnF1aW50dXBsZS9NR0RTXFxucXVpbnR1cGxldC9NU1xcbnF1aXAvTVNcXG5xdWlwcGVkXFxucXVpcHBpbmdcXG5xdWlwc3Rlci9TTVxcbnF1aXJlJ3NcXG5xdWlyZS9JQVNcXG5xdWlyay9TTURHXFxucXVpcmtpbmVzcy9NXFxucXVpcmt5L1JUUFxcbnF1aXJ0L1NNXFxucXVpc2xpbmcvU01cXG5xdWl0L1NcXG5xdWl0Y2xhaW0vTVNcXG5xdWl0ZVxcbnF1aXR0YW5jZS9NXFxucXVpdHRlci9TTVxcbnF1aXR0aW5nXFxucXVpdmVyL1NNREdcXG5xdWl2ZXJ5XFxucXVpeG90aWNcXG5xdWl4b3RpY2FsbHlcXG5xdWl6L01cXG5xdWl6emVkXFxucXVpenplci9TTVxcbnF1aXp6ZXNcXG5xdWl6emljYWwvWVxcbnF1aXp6aW5nXFxucXVvL0hcXG5xdW9pbi9TTVxcbnF1b2l0L1NNREdcXG5xdW9uZGFtXFxucXVvcmF0ZS9JXFxucXVvcnVtL1NNXFxucXVvdC9CXFxucXVvdGEvU01cXG5xdW90YWJpbGl0eS9NXFxucXVvdGF0aW9uL1NNXFxucXVvdGUnc1xcbnF1b3RlL1VEU0dcXG5xdW90aWRpYW5cXG5xdW90aWVudC9TTVxcbnF3ZXJ0eVxcbnIvU1xcbnJhYmJldC9HTURTXFxucmFiYmkvU01cXG5yYWJiaW5hdGUvTVxcbnJhYmJpbmljXFxucmFiYmluaWNhbFxcbnJhYmJpdC9HTURTXFxucmFiYmxlL01TXFxucmFiaWQvUFlcXG5yYWJpZG5lc3MvTVxcbnJhYmllcy9NXFxucmFjY29vbi9NU1xcbnJhY2UvTVpHRFJTXFxucmFjZWNvdXJzZS9TTVxcbnJhY2Vnb2VyL1NcXG5yYWNlaG9yc2UvTVNcXG5yYWNlbWUvTVNcXG5yYWNlci9NXFxucmFjZXRyYWNrL01TXFxucmFjZXdheS9NU1xcbnJhY2lhbC9ZXFxucmFjaWFsaXNtL01cXG5yYWNpYWxpc3QvTVNcXG5yYWNpbHlcXG5yYWNpbmVzcy9NXFxucmFjaW5nL01cXG5yYWNpc20vTVxcbnJhY2lzdC9TTVxcbnJhY2svR01EU1xcbnJhY2tldC9TTURHXFxucmFja2V0ZWVyL1NNREdcXG5yYWNrZXRlZXJpbmcvTVxcbnJhY29udGV1ci9TTVxcbnJhY3F1ZXRiYWxsL1NNXFxucmFjeS9QUlRcXG5yYWQvU01cXG5yYWRhci9TTVxcbnJhZGFyc2NvcGUvU01cXG5yYWRkbGVkXFxucmFkaWFsL1NNWVxcbnJhZGlhbi9TXFxucmFkaWFuY2UvTVxcbnJhZGlhbnQvWVxcbnJhZGlhdGUvRFNHTlhcXG5yYWRpYXRpb24vTVxcbnJhZGlhdG9yL1NNXFxucmFkaWNhbC9TTVlcXG5yYWRpY2FsaXNtL01cXG5yYWRpY2FsaXphdGlvbi9NXFxucmFkaWNhbGl6ZS9EU0dcXG5yYWRpY2NoaW8vTVxcbnJhZGlpXFxucmFkaW8vTURHU1xcbnJhZGlvYWN0aXZlL1lcXG5yYWRpb2FjdGl2aXR5L01cXG5yYWRpb2NhcmJvbi9NXFxucmFkaW9ncmFtL01TXFxucmFkaW9ncmFwaGVyL1NNXFxucmFkaW9ncmFwaHkvTVxcbnJhZGlvaXNvdG9wZS9NU1xcbnJhZGlvbG9naXN0L1NNXFxucmFkaW9sb2d5L01cXG5yYWRpb21hbi9NXFxucmFkaW9tZW5cXG5yYWRpb21ldGVyL01TXFxucmFkaW9tZXRyaWNcXG5yYWRpb21ldHJ5L01cXG5yYWRpb3Bob25lL1NNXFxucmFkaW9zY29weS9NXFxucmFkaW9zb25kZS9TTVxcbnJhZGlvc3VyZ2VyeVxcbnJhZGlvdGVsZWdyYXBoL01cXG5yYWRpb3RlbGVncmFwaHNcXG5yYWRpb3RlbGVncmFwaHkvTVxcbnJhZGlvdGVsZXBob25lL01TXFxucmFkaW90aGVyYXBpc3QvTVNcXG5yYWRpb3RoZXJhcHkvTVxcbnJhZGlzaC9NU1xcbnJhZGl1bS9NXFxucmFkaXVzL01cXG5yYWRvbi9NXFxucmFmZmlhL01cXG5yYWZmaXNoL1lQXFxucmFmZmlzaG5lc3MvTVxcbnJhZmZsZS9EU01HXFxucmFmdC9aR01EUlNcXG5yYWZ0ZXIvTVxcbnJhZnRpbmcvTVxcbnJhZy9TR01EXFxucmFnYS9NU1xcbnJhZ2FtdWZmaW4vTVNcXG5yYWdiYWcvTVxcbnJhZ2UvTVNcXG5yYWdnYVxcbnJhZ2dlZC9SWVRQXFxucmFnZ2VkbmVzcy9NXFxucmFnZ2VkeS9SVFxcbnJhZ2dpbmdcXG5yYWdpbmcvWVxcbnJhZ2xhbi9TTVxcbnJhZ291dC9TTVxcbnJhZ3RhZy9TXFxucmFndGltZS9NXFxucmFnd2VlZC9NXFxucmFnd29ydFxcbnJhaFxcbnJhaWQvWkdNRFJTXFxucmFpZGVyL01cXG5yYWlsJ3NcXG5yYWlsL0NHRFNcXG5yYWlsY2FyZC9TXFxucmFpbGluZy9TTVxcbnJhaWxsZXJ5L1NNXFxucmFpbHJvYWQvU1pHTURSXFxucmFpbHJvYWRlci9NXFxucmFpbHJvYWRpbmcvTVxcbnJhaWx3YXkvU01cXG5yYWlsd2F5bWFuXFxucmFpbHdheW1lblxcbnJhaW1lbnQvTVxcbnJhaW4vR01EU1xcbnJhaW5ib3cvU01cXG5yYWluY29hdC9TTVxcbnJhaW5kcm9wL1NNXFxucmFpbmZhbGwvU01cXG5yYWlubWFrZXIvU01cXG5yYWlubWFraW5nL01cXG5yYWlucHJvb2ZcXG5yYWluc3Rvcm0vTVNcXG5yYWlud2F0ZXIvTVxcbnJhaW55L1JUXFxucmFpc2UvTVpHRFJTXFxucmFpc2VyL01cXG5yYWlzaW4vU01cXG5yYWphaC9NXFxucmFqYWhzXFxucmFrZS9NR0RTXFxucmFraXNoL1lQXFxucmFraXNobmVzcy9NXFxucmFsbHkvRFNNR1xcbnJhbS9TTVxcbnJhbWJsZS9EUlNNWkdKXFxucmFtYmxlci9NXFxucmFtYnVuY3Rpb3VzL1BZXFxucmFtYnVuY3Rpb3VzbmVzcy9NXFxucmFtZWtpbi9TTVxcbnJhbWllL01cXG5yYW1pZmljYXRpb24vTVxcbnJhbWlmeS9EU1hOR1xcbnJhbWpldC9TTVxcbnJhbW1lZFxcbnJhbW1pbmdcXG5yYW1wL0dNU1xcbnJhbXBhZ2UvRFNNR1xcbnJhbXBhbmN5L01cXG5yYW1wYW50L1lcXG5yYW1wYXJ0L1NNXFxucmFtcm9kL1NNXFxucmFtcm9kZGVkXFxucmFtcm9kZGluZ1xcbnJhbXNoYWNrbGVcXG5yYW4vQVxcbnJhbmNoL01EUlNaR1xcbnJhbmNoZXIvTVxcbnJhbmNoaW5nL01cXG5yYW5jaWQvUFxcbnJhbmNpZGl0eS9NXFxucmFuY2lkbmVzcy9NXFxucmFuY29yL01cXG5yYW5jb3JvdXMvWVxcbnJhbmQvTVxcbnJhbmRpbmVzcy9NXFxucmFuZG9tL1BTWVxcbnJhbmRvbWl6YXRpb24vTVxcbnJhbmRvbWl6ZS9EU0dcXG5yYW5kb21uZXNzL01TXFxucmFuZHkvUlRQXFxucmFuZWUvTVNcXG5yYW5nL1pSXFxucmFuZ2Unc1xcbnJhbmdlL0NHRFNcXG5yYW5nZWZpbmRlci9TXFxucmFuZ2VyL01cXG5yYW5naW5lc3MvTVxcbnJhbmd5L1JUUFxcbnJhbmsvVEdKUE1EUllTXFxucmFua2luZy9NXFxucmFua2xlL0RTR1xcbnJhbmtuZXNzL01cXG5yYW5zYWNrL1NHRFxcbnJhbnNvbS9TWkdNRFJcXG5yYW5zb21lci9NXFxucmFuc29td2FyZVxcbnJhbnQvWkdNREpSU1xcbnJhbnRlci9NXFxucmFwL1NaR01EUlxcbnJhcGFjaW91cy9QWVxcbnJhcGFjaW91c25lc3MvTVxcbnJhcGFjaXR5L01cXG5yYXBlL01TXFxucmFwZXIvTVxcbnJhcGVzZWVkL01cXG5yYXBpZC9QTVJZVFNcXG5yYXBpZGl0eS9NXFxucmFwaWRuZXNzL01cXG5yYXBpZXIvU01cXG5yYXBpbmUvTVxcbnJhcGlzdC9TTVxcbnJhcHBlZFxcbnJhcHBlbC9TTVxcbnJhcHBlbGxlZFxcbnJhcHBlbGxpbmdcXG5yYXBwZXIvU01cXG5yYXBwaW5nXFxucmFwcG9ydC9NU1xcbnJhcHBvcnRldXIvU1xcbnJhcHByb2NoZW1lbnQvU01cXG5yYXBzY2FsbGlvbi9NU1xcbnJhcHQvWVBcXG5yYXB0bmVzcy9NXFxucmFwdG9yL1NcXG5yYXB0dXJlL01TXFxucmFwdHVyb3VzL1lcXG5yYXJlL1lUR1BEUlNcXG5yYXJlYml0L01TXFxucmFyZWZhY3Rpb24vTVxcbnJhcmVmeS9HRFNcXG5yYXJlbmVzcy9NXFxucmFyaXR5L1NNXFxucmFzY2FsL1NNWVxcbnJhc2gvWlRNUlNZUFxcbnJhc2hlci9NXFxucmFzaG5lc3MvTVxcbnJhc3AvR01EU1xcbnJhc3BiZXJyeS9TTVxcbnJhc3B5L1JUXFxucmFzdGVyXFxucmF0L1NNXFxucmF0YXRvdWlsbGUvTVxcbnJhdGJhZy9TXFxucmF0Y2hldC9HTURTXFxucmF0ZS9KWE1aR05EUlNcXG5yYXRlZC9VXFxucmF0ZXBheWVyL1NcXG5yYXRlci9NXFxucmF0aGVyXFxucmF0aHNrZWxsZXIvU01cXG5yYXRpZmljYXRpb24vTVxcbnJhdGlmaWVyL01cXG5yYXRpZnkvTkRSU1pHXFxucmF0aW5nL01cXG5yYXRpby9NU1xcbnJhdGlvY2luYXRlL0dORFNcXG5yYXRpb2NpbmF0aW9uL01cXG5yYXRpb24vTURHXFxucmF0aW9uYWwvU01ZXFxucmF0aW9uYWxlL01TXFxucmF0aW9uYWxpc20vTVxcbnJhdGlvbmFsaXN0L1NNXFxucmF0aW9uYWxpc3RpY1xcbnJhdGlvbmFsaXR5L01cXG5yYXRpb25hbGl6YXRpb24vTVNcXG5yYXRpb25hbGl6ZS9EU0dcXG5yYXRsaWtlXFxucmF0bGluZS9TTVxcbnJhdHRhbi9TTVxcbnJhdHRlZFxcbnJhdHRlci9TTVxcbnJhdHRpbmdcXG5yYXR0bGUvRFJTTVpHSlxcbnJhdHRsZWJyYWluL1NNRFxcbnJhdHRsZXIvTVxcbnJhdHRsZXNuYWtlL1NNXFxucmF0dGxldHJhcC9TTVxcbnJhdHRseVxcbnJhdHRyYXAvU01cXG5yYXR0eS9SVFxcbnJhdWNvdXMvWVBcXG5yYXVjb3VzbmVzcy9NXFxucmF1bmNoaWx5XFxucmF1bmNoaW5lc3MvTVxcbnJhdW5jaHkvVFJQXFxucmF2YWdlL0RSU01aR1xcbnJhdmFnZXIvTVxcbnJhdmFnZXMvTVxcbnJhdmUvSk1aR0RSU1xcbnJhdmVsJ3NcXG5yYXZlbC9VRFNHXFxucmF2ZWxpbmcvU1xcbnJhdmVuL01EU0dcXG5yYXZlbm91cy9ZXFxucmF2aW5lL1NNXFxucmF2aW5nL01cXG5yYXZpb2xpL1NNXFxucmF2aXNoL0RSU1pHTFxcbnJhdmlzaGVyL01cXG5yYXZpc2hpbmcvWVxcbnJhdmlzaG1lbnQvTVxcbnJhdy9QVE1SXFxucmF3Ym9uZWRcXG5yYXdoaWRlL01cXG5yYXduZXNzL01cXG5yYXkvU01cXG5yYXlvbi9NXFxucmF6ZS9HRFNcXG5yYXpvci9NU1xcbnJhem9yYmFjay9NU1xcbnJhenovR01EU1xcbnJhenptYXRhenovTVxcbnJjcHRcXG5yZFxcbnJlL0RTTVlUR1ZKXFxucmVhY2gvTURTR0JcXG5yZWFjaGFibGUvVVxcbnJlYWNxdWlyZS9EU0dcXG5yZWFjdC9WXFxucmVhY3RhbmNlXFxucmVhY3RhbnQvU01cXG5yZWFjdGlvbmFyeS9TTVxcbnJlYWN0aXZpdHlcXG5yZWFkL1pHTVJCSlNcXG5yZWFkYWJpbGl0eS9TTVxcbnJlYWRlci9NXFxucmVhZGVyc2hpcC9TTVxcbnJlYWRpbHlcXG5yZWFkaW5lc3MvTVxcbnJlYWRpbmcvTVxcbnJlYWRtaXR0ZWRcXG5yZWFkb3V0L1NNXFxucmVhZHkvRFJTVEdQXFxucmVhZmZvcmVzdGF0aW9uXFxucmVhbC9UTVJZUFNcXG5yZWFsaXNtL01cXG5yZWFsaXN0L1NNXFxucmVhbGlzdGljL1VcXG5yZWFsaXN0aWNhbGx5L1VcXG5yZWFsaXRpZXNcXG5yZWFsaXR5L1VNXFxucmVhbGl6YXRpb24vTVNcXG5yZWFsaXplL0RTQkdcXG5yZWFsaXplZC9VXFxucmVhbG0vTVNcXG5yZWFsbmVzcy9NXFxucmVhbHBvbGl0aWsvTVxcbnJlYWx0eS9NXFxucmVhbS9aR01EUlNcXG5yZWFtZXIvTVxcbnJlYXAvWkdEUlNcXG5yZWFwZXIvTVxcbnJlYXIvR01EU1xcbnJlYXJndWFyZC9NU1xcbnJlYXJtb3N0XFxucmVhcndhcmQvU1xcbnJlYXNvbi9TTURSWkdCXFxucmVhc29uYWJsZS9VUFxcbnJlYXNvbmFibGVuZXNzL1VNXFxucmVhc29uYWJseS9VXFxucmVhc29uZXIvTVxcbnJlYXNvbmluZy9NXFxucmVhc3N1cmluZy9ZXFxucmViYXRlL01cXG5yZWJlbC9NU1xcbnJlYmVsbGlvbi9NU1xcbnJlYmVsbGlvdXMvWVBcXG5yZWJlbGxpb3VzbmVzcy9NXFxucmViaWQvU1xcbnJlYmlkZGluZ1xcbnJlYmlydGgvTVxcbnJlYm9pbC9TREdcXG5yZWJ1aWxkL1NHXFxucmVidWtlL0RTTUdcXG5yZWJ1a2luZy9ZXFxucmVidXR0YWwvTVNcXG5yZWMnZFxcbnJlYy9NXFxucmVjYWxjaXRyYW5jZS9NXFxucmVjYWxjaXRyYW50XFxucmVjYW50L1NER1xcbnJlY2FudGF0aW9uL1NNXFxucmVjYXAvTVNcXG5yZWNhcGl0YWxpemF0aW9uXFxucmVjY2UvU1xcbnJlY2RcXG5yZWNlaXB0L1NNREdcXG5yZWNlaXZhYmxlcy9NXFxucmVjZWl2ZS9EUlNaR0JcXG5yZWNlaXZlci9NXFxucmVjZWl2ZXJzaGlwL01cXG5yZWNlbnQvUllUUFxcbnJlY2VudG5lc3MvTVxcbnJlY2VwdGFjbGUvU01cXG5yZWNlcHRpb24vTVNcXG5yZWNlcHRpb25pc3QvU01cXG5yZWNlcHRpdmUvUFlcXG5yZWNlcHRpdmVuZXNzL01cXG5yZWNlcHRpdml0eS9NXFxucmVjZXB0b3IvU01cXG5yZWNlc3MvTURTR1ZcXG5yZWNlc3Npb25hbC9TTVxcbnJlY2Vzc2lvbmFyeVxcbnJlY2Vzc2l2ZS9TTVxcbnJlY2hlcmNoZVxcbnJlY2lkaXZpc20vTVxcbnJlY2lkaXZpc3QvU01cXG5yZWNpcGUvU01cXG5yZWNpcGllbnQvU01cXG5yZWNpcHJvY2FsL1NNWVxcbnJlY2lwcm9jYXRlL0dORFNcXG5yZWNpcHJvY2F0aW9uL01cXG5yZWNpcHJvY2l0eS9NXFxucmVjaXRhbC9TTVxcbnJlY2l0YWxpc3QvTVNcXG5yZWNpdGF0aXZlL01TXFxucmVjaXRlci9TTVxcbnJlY2tsZXNzL1lQXFxucmVja2xlc3NuZXNzL01cXG5yZWNrb24vU0pER1xcbnJlY2tvbmluZy9NXFxucmVjbGFtYXRpb24vTVxcbnJlY2xpbmUvRFJTWkdcXG5yZWNsaW5lci9NXFxucmVjbHVzZS9TTVZcXG5yZWNvZ25pemFibGUvVVxcbnJlY29nbml6YWJseS9VXFxucmVjb2duaXplL0RSU0dCXFxucmVjb2duaXplZC9VXFxucmVjb21iaW5hdGlvblxcbnJlY29tcGVuc2UvRFNNR1xcbnJlY29tcGlsYXRpb25cXG5yZWNvbXBpbGUvR0RcXG5yZWNvbi9TXFxucmVjb25jaWxlL0dEU0JcXG5yZWNvbmNpbGlhdGlvbi9TXFxucmVjb25kaXRlXFxucmVjb25maWd1cmF0aW9uXFxucmVjb25maWd1cmUvRFxcbnJlY29ubmFpc3NhbmNlL01TXFxucmVjb25ub2l0ZXIvREdTXFxucmVjb25zdHJ1Y3QvVlxcbnJlY29uc3RydWN0ZWQvVVxcbnJlY29yZGVkL1VcXG5yZWNvcmRlci9NU1xcbnJlY29yZGluZy9NU1xcbnJlY291cC9ER1xcbnJlY291cnNlL01cXG5yZWNvdmVyYWJsZS9VXFxucmVjb3ZlcnkvU01cXG5yZWNyZWFudC9NU1xcbnJlY3JlYXRpb25hbFxcbnJlY3JpbWluYXRlL0RTR05YXFxucmVjcmltaW5hdGlvbi9NXFxucmVjcmltaW5hdG9yeVxcbnJlY3J1ZGVzY2UvR0RTXFxucmVjcnVkZXNjZW5jZS9NXFxucmVjcnVkZXNjZW50XFxucmVjcnVpdC9MU01EUlpHXFxucmVjcnVpdGVyL01cXG5yZWNydWl0bWVudC9NXFxucmVjdGFsL1lcXG5yZWN0YW5nbGUvTVNcXG5yZWN0YW5ndWxhclxcbnJlY3RpZmlhYmxlXFxucmVjdGlmaWNhdGlvbi9NXFxucmVjdGlmaWVyL01cXG5yZWN0aWZ5L1hORFJTWkdcXG5yZWN0aWxpbmVhclxcbnJlY3RpdHVkZS9NXFxucmVjdG8vTVNcXG5yZWN0b3IvU01cXG5yZWN0b3J5L1NNXFxucmVjdHVtL1NNXFxucmVjdW1iZW50XFxucmVjdXBlcmF0ZS9HTlZEU1xcbnJlY3VwZXJhdGlvbi9NXFxucmVjdXIvU1xcbnJlY3VycmVkXFxucmVjdXJyZW5jZS9TTVxcbnJlY3VycmluZ1xcbnJlY3Vyc2lvbi9TXFxucmVjdXNlL0RTR1xcbnJlY3ljbGFibGUvU01cXG5yZWN5Y2xpbmcvTVxcbnJlZC9QU01cXG5yZWRhY3QvU0RHXFxucmVkYWN0aW9uL01cXG5yZWRhY3Rvci9TTVxcbnJlZGJpcmQvU01cXG5yZWRicmVhc3QvTVNcXG5yZWRicmlja1xcbnJlZGNhcC9TTVxcbnJlZGNvYXQvU01cXG5yZWRjdXJyYW50L1NcXG5yZWRkZW4vU0RHXFxucmVkZGVyXFxucmVkZGVzdFxcbnJlZGRpc2hcXG5yZWRlZW0vUlpCXFxucmVkZWVtZXIvTVxcbnJlZGVtcHRpb24vTVxcbnJlZGVtcHRpdmVcXG5yZWRoZWFkL1NNRFxcbnJlZGlyZWN0aW9uXFxucmVkaXN0cmljdC9HRFxcbnJlZGl2aWRlL0dEU1xcbnJlZGxpbmluZy9NXFxucmVkbmVjay9TTVxcbnJlZG5lc3MvTVxcbnJlZG8vR1xcbnJlZG9sZW5jZS9NXFxucmVkb2xlbnRcXG5yZWRvdWJ0L1NCTVxcbnJlZG91YnRhYmx5XFxucmVkb3VuZC9TREdcXG5yZWRyYXcvU0dcXG5yZWRza2luL1NNXFxucmVkdWNlL0RSU1pHXFxucmVkdWNlci9NXFxucmVkdWNpYmxlXFxucmVkdWN0YXNlL01cXG5yZWR1Y3Rpb24vU01cXG5yZWR1Y3Rpb25pc3RcXG5yZWR1Y3RpdmVcXG5yZWR1bmRhbmN5L1NNXFxucmVkdW5kYW50L1lcXG5yZWR3b29kL1NNXFxucmVkeWUvRFNcXG5yZWVkaW5lc3MvTVxcbnJlZWR5L1JUUFxcbnJlZWYvWkdNRFJTXFxucmVlZmVyL01cXG5yZWVrL0dNRFNcXG5yZWVsJ3NcXG5yZWVsL1VHRFNcXG5yZWV2ZS9HXFxucmVleHBvcnQvU0RHXFxucmVmL1NaTVxcbnJlZmFzaGlvbi9ER1NcXG5yZWZlY3Rpb24vTVxcbnJlZmVjdG9yeS9TTVxcbnJlZmVyL0JcXG5yZWZlcmVlL0RTTVxcbnJlZmVyZWVpbmdcXG5yZWZlcmVuY2UvTUdEU1xcbnJlZmVyZW5kdW0vTVNcXG5yZWZlcmVudC9TTVxcbnJlZmVyZW50aWFsXFxucmVmZXJyYWwvU01cXG5yZWZlcnJlZFxcbnJlZmVycmVyL1NNXFxucmVmZXJyaW5nXFxucmVmZmVkXFxucmVmZmluZ1xcbnJlZmlsbC9CTVxcbnJlZmluZWQvVVxcbnJlZmluZW1lbnQvU01cXG5yZWZpbmVyL1NNXFxucmVmaW5lcnkvU1xcbnJlZml0dGluZ1xcbnJlZmxhdGUvWERTR05cXG5yZWZsYXRpb25hcnlcXG5yZWZsZWN0L0dWU0RcXG5yZWZsZWN0aW9uL01TXFxucmVmbGVjdGl2ZS9ZXFxucmVmbGVjdGl2aXR5XFxucmVmbGVjdG9yL01TXFxucmVmbGV4aXZlL1NNWVxcbnJlZmxleGl2aXR5XFxucmVmbGV4b2xvZ3lcXG5yZWZvcmdlL0RTR1xcbnJlZm9ybS9NWlxcbnJlZm9ybWF0L1ZcXG5yZWZvcm1hdG9yeS9TTVxcbnJlZm9ybWF0dGluZ1xcbnJlZm9ybWVkL1VcXG5yZWZvcm1pc3QvU1xcbnJlZm9ydGlmeS9HRFNcXG5yZWZyYWN0L1NHVkRcXG5yZWZyYWN0aW9uL01cXG5yZWZyYWN0b3J5L1NNXFxucmVmcmFpbi9TR01EXFxucmVmcmVzaC9aR0xEUlNcXG5yZWZyZXNoZXIvTVxcbnJlZnJlc2hpbmcvWVxcbnJlZnJlc2htZW50L1NNXFxucmVmcmVzaG1lbnRzL01cXG5yZWZyaWdlcmFudC9TTVxcbnJlZnJpZ2VyYXRlL0RTR05cXG5yZWZyaWdlcmF0aW9uL01cXG5yZWZyaWdlcmF0b3IvTVNcXG5yZWZ1Z2UvU01cXG5yZWZ1Z2VlL1NNXFxucmVmdWxnZW5jZS9NXFxucmVmdWxnZW50XFxucmVmdW5kL0JcXG5yZWZ1cmJpc2htZW50L01TXFxucmVmdXNhbC9NU1xcbnJlZnV0YXRpb24vTVNcXG5yZWZ1dGUvQkRSU1pHXFxucmVmdXRlci9NXFxucmVnXFxucmVnYWwvRFlHXFxucmVnYWxlbWVudC9NXFxucmVnYWxpYS9NXFxucmVnYXJkL0VTTURHXFxucmVnYXJkbGVzc1xcbnJlZ2FyZHMvTVxcbnJlZ2F0aGVyL0RHU1xcbnJlZ2F0dGEvU01cXG5yZWdlbmN5L1NNXFxucmVnZW5lcmFjeS9NXFxucmVnZW5lcmF0ZS9WXFxucmVnZXgvTVxcbnJlZ2V4cC9TXFxucmVnZ2FlL01cXG5yZWdpY2lkYWxcXG5yZWdpY2lkZS9NU1xcbnJlZ2ltZS9TTVxcbnJlZ2ltZW4vU01cXG5yZWdpbWVudC9NREdTXFxucmVnaW1lbnRhbFxcbnJlZ2ltZW50YXRpb24vTVxcbnJlZ2lvbi9TTVxcbnJlZ2lvbmFsL1lcXG5yZWdpb25hbGlzbS9NU1xcbnJlZ2lzdGVyL0dNRFNcXG5yZWdpc3RlcmVkL1VcXG5yZWdpc3RyYW50L01TXFxucmVnaXN0cmFyL01TXFxucmVnaXN0cmF0aW9uL1NNXFxucmVnaXN0cnkvU01cXG5yZWduYW50XFxucmVncmVzcy9NRFNHVlxcbnJlZ3Jlc3Npb24vTVNcXG5yZWdyZXQvU01cXG5yZWdyZXRmdWwvWVxcbnJlZ3JldHRhYmxlXFxucmVncmV0dGFibHlcXG5yZWdyZXR0ZWRcXG5yZWdyZXR0aW5nXFxucmVncmluZC9HU1xcbnJlZ3JvdW5kXFxucmVncm91cC9ER1NcXG5yZWd1bGFyL01ZU1xcbnJlZ3VsYXJpdHkvU01cXG5yZWd1bGFyaXphdGlvbi9NXFxucmVndWxhcml6ZS9EU0dcXG5yZWd1bGF0ZS9DRFNHTlZcXG5yZWd1bGF0ZWQvVVxcbnJlZ3VsYXRpb24vQ01cXG5yZWd1bGF0aW9uc1xcbnJlZ3VsYXRvci9NU1xcbnJlZ3VsYXRvcnlcXG5yZWd1cmdpdGF0ZS9EU0dOXFxucmVndXJnaXRhdGlvbi9NXFxucmVoYWIvTVNcXG5yZWhhYmJlZFxcbnJlaGFiYmluZ1xcbnJlaGFiaWxpdGF0ZS9HTlZEU1xcbnJlaGFiaWxpdGF0aW9uL01cXG5yZWhhbmcvU0RHXFxucmVoZWFycy9HRFxcbnJlaGVhcnNhbC9NU1xcbnJlaGVhcnNlZC9VXFxucmVoaVxcbnJlaHVuZ1xcbnJlaWZ5L05EU0dcXG5yZWlnbi9NRFNHXFxucmVpbWJ1cnNlL0JEU0dMXFxucmVpbWJ1cnNlbWVudC9NU1xcbnJlaW4vR0RcXG5yZWluZGVlci9NXFxucmVpbmZvcmNlL0xHRFNcXG5yZWluZm9yY2VtZW50L1NNXFxucmVpbml0aWFsaXplXFxucmVpbnN0YWxsL0RHXFxucmVpbnN0YXRlbWVudC9NXFxucmVpbnN1cmFuY2VcXG5yZWl0ZXJhdGUvVlxcbnJlamVjdC9HU01EXFxucmVqZWN0aW9uL1NNXFxucmVqb2ljZS9KR0RTXFxucmVqb2ljaW5nL01cXG5yZWpvaW5kZXIvU01cXG5yZWp1dmVuYXRlL0RTR05cXG5yZWp1dmVuYXRpb24vTVxcbnJlbFxcbnJlbGF0ZS9EUlNCWFpHTlZcXG5yZWxhdGVkbmVzcy9NXFxucmVsYXRlci9NXFxucmVsYXRpb24vTVxcbnJlbGF0aW9uYWxcXG5yZWxhdGlvbnNoaXAvTVNcXG5yZWxhdGl2ZS9NWVNcXG5yZWxhdGl2aXNtL01cXG5yZWxhdGl2aXN0L1NcXG5yZWxhdGl2aXN0aWNcXG5yZWxhdGl2aXR5L01cXG5yZWxheC9EUlNaR1xcbnJlbGF4YW50L01TXFxucmVsYXhhdGlvbi9TTVxcbnJlbGF4ZXIvTVxcbnJlbGF5L0RcXG5yZWxlYXNlL0JcXG5yZWxlYXNlZC9VXFxucmVsZWdhdGUvR05EU1xcbnJlbGVudC9TR0RcXG5yZWxlbnRsZXNzL1BZXFxucmVsZW50bGVzc25lc3MvTVxcbnJlbGV2YW5jZS9NXFxucmVsZXZhbmN5L01cXG5yZWxldmFudC9ZXFxucmVsaWFiaWxpdHkvVU1cXG5yZWxpYWJsZS9VXFxucmVsaWFibHkvVVxcbnJlbGlhbmNlL01cXG5yZWxpYW50XFxucmVsaWMvTVNcXG5yZWxpZWYvU01cXG5yZWxpZXZlL1pHRFJTXFxucmVsaWV2ZXIvTVxcbnJlbGlnaW9uL1NNXFxucmVsaWdpb3NpdHlcXG5yZWxpZ2lvdXMvTVlQXFxucmVsaWdpb3VzbmVzcy9NXFxucmVsaW5lL0RTR1xcbnJlbGlucXVpc2gvTERTR1xcbnJlbGlucXVpc2htZW50L01cXG5yZWxpcXVhcnkvU01cXG5yZWxpc2gvR01EU1xcbnJlbGlzdC9TR0RcXG5yZWxvY2F0ZS9CXFxucmVsdWN0YW5jZS9NXFxucmVsdWN0YW50L1lcXG5yZWx5L0dEU1xcbnJlbS9NXFxucmVtYWluL1NHRFxcbnJlbWFpbmRlci9HTURTXFxucmVtYW5kL1NHRFxcbnJlbWFwcGluZ1xcbnJlbWFyay9CXFxucmVtYXJrYWJsZW5lc3MvTVxcbnJlbWFya2FibHlcXG5yZW1hcmtlZC9VXFxucmVtZWRpYWJsZVxcbnJlbWVkeS9HRFNNXFxucmVtZW1iZXIvREdcXG5yZW1lbWJlcmVkL1VcXG5yZW1lbWJyYW5jZS9NU1xcbnJlbWluZGVyL01cXG5yZW1pbmlzY2UvR0RTXFxucmVtaW5pc2NlbmNlL01TXFxucmVtaW5pc2NlbnQvWVxcbnJlbWlzcy9QWVxcbnJlbWlzc25lc3MvTVxcbnJlbWl0L1NcXG5yZW1pdHRhbmNlL1NNXFxucmVtaXR0ZWRcXG5yZW1pdHRpbmcvVVxcbnJlbWl4L0RTR1xcbnJlbW5hbnQvTVNcXG5yZW1vZGVsL0dEU1xcbnJlbW9sZC9TR0RcXG5yZW1vbnN0cmFudC9TTVxcbnJlbW9uc3RyYXRlL0RTR1xcbnJlbW9yc2UvTVxcbnJlbW9yc2VmdWwvWVxcbnJlbW9yc2VsZXNzL1BZXFxucmVtb3JzZWxlc3NuZXNzL01cXG5yZW1vdGUvUlNNWVRQXFxucmVtb3RlbmVzcy9NXFxucmVtb3ZhbC9TTVxcbnJlbXVuZXJhdGUvR05WWERTXFxucmVtdW5lcmF0aW9uL01cXG5yZW5haXNzYW5jZS9NU1xcbnJlbmFsXFxucmVuYXNjZW5jZS9TXFxucmVuZC9HU1xcbnJlbmRlci9TR01ESlxcbnJlbmRlcmluZy9NXFxucmVuZGV6dm91cy9HTURTXFxucmVuZGl0aW9uL01TXFxucmVuZWdhZGUvRFNNR1xcbnJlbmVnZS9EUlNaR1xcbnJlbmVnZXIvTVxcbnJlbmV3L0RTQkdcXG5yZW5ld2FsL01TXFxucmVubmV0L01cXG5yZW5uaW4vTVxcbnJlbm91bmNlL0xEU0dcXG5yZW5vdW5jZW1lbnQvTVxcbnJlbm92YXRlL0RTWEdOXFxucmVub3ZhdGlvbi9NXFxucmVub3ZhdG9yL01TXFxucmVub3duL01EXFxucmVudC9aR01EUlNcXG5yZW50YWwvU01cXG5yZW50ZXIvTVxcbnJlbnVuY2lhdGlvbi9TTVxcbnJlb3Blbi9TREdcXG5yZW9yZy9NRFNHXFxucmVwL1NNXFxucmVwYWludC9HRFNcXG5yZXBhaXIvQlpSXFxucmVwYWlyZXIvTVxcbnJlcGFpcm1hbi9NXFxucmVwYWlybWVuXFxucmVwYXJhYmxlXFxucmVwYXJhdGlvbi9NU1xcbnJlcGFyYXRpb25zL01cXG5yZXBhcnRlZS9NXFxucmVwYXRyaWF0ZS9YRFNNR05cXG5yZXBhdHJpYXRpb24vTVxcbnJlcGVhdC9TTURSWkdCXFxucmVwZWF0YWJpbGl0eVxcbnJlcGVhdGFibGUvVVxcbnJlcGVhdGFibHlcXG5yZXBlYXRlZC9ZXFxucmVwZWF0ZXIvTVxcbnJlcGVhdGluZy9NXFxucmVwZWwvU1xcbnJlcGVsbGVkXFxucmVwZWxsZW50L1NNXFxucmVwZWxsaW5nXFxucmVwZW50L1NER1xcbnJlcGVudGFuY2UvTVxcbnJlcGVudGFudC9ZXFxucmVwZXJjdXNzaW9uL1NcXG5yZXBlcnRvaXJlL01TXFxucmVwZXJ0b3J5L1NNXFxucmVwZXRpdGlvbi9NU1xcbnJlcGV0aXRpb3VzL1lQXFxucmVwZXRpdGlvdXNuZXNzL01cXG5yZXBldGl0aXZlL1lQXFxucmVwZXRpdGl2ZW5lc3MvTVxcbnJlcGhvdG9ncmFwaC9ER1xcbnJlcGxhY2VhYmxlXFxucmVwbGFudC9HU0RcXG5yZXBsZW5pc2gvTEdEU1xcbnJlcGxlbmlzaG1lbnQvTVxcbnJlcGxldGUvUERTR05cXG5yZXBsZXRlbmVzcy9NXFxucmVwbGV0aW9uL01cXG5yZXBsaWNhL1NNXFxucmVwbGljYXRlL0RTR05YXFxucmVwbGljYXRpb24vTVxcbnJlcGxpY2F0b3IvU1xcbnJlcG9ydGFnZS9NXFxucmVwb3J0ZWQvWVxcbnJlcG9ydG9yaWFsXFxucmVwb3NlZnVsXFxucmVwb3NpdGlvblxcbnJlcG9zaXRvcnkvU01cXG5yZXByZWhlbmQvREdTXFxucmVwcmVoZW5zaWJpbGl0eS9NXFxucmVwcmVoZW5zaWJsZVxcbnJlcHJlaGVuc2libHlcXG5yZXByZWhlbnNpb24vTVxcbnJlcHJlc2VudC9HRFNcXG5yZXByZXNlbnRhdGlvbmFsXFxucmVwcmVzZW50YXRpdmUvTVNcXG5yZXByZXNlbnRlZC9VXFxucmVwcmVzc2lvbi9NU1xcbnJlcHJlc3NpdmUvUFlcXG5yZXByaWV2ZS9EU01HXFxucmVwcmltYW5kL0dTTURcXG5yZXByaXNhbC9TTVxcbnJlcHJpc2UvU01HXFxucmVwcm9hY2gvR01EU0JcXG5yZXByb2FjaGZ1bC9ZXFxucmVwcm9iYXRlL01TXFxucmVwcm9kdWN0aXZlXFxucmVwcm9ncmFtbWluZ1xcbnJlcHJvdmluZy9ZXFxucmVwdGlsZS9TTVxcbnJlcHRpbGlhbi9NU1xcbnJlcHVibGljL1NcXG5yZXB1YmxpY2FuaXNtL01cXG5yZXB1ZGlhdGUvWEdORFNcXG5yZXB1ZGlhdGlvbi9NXFxucmVwdWRpYXRvci9NU1xcbnJlcHVnbmFuY2UvTVxcbnJlcHVnbmFudFxcbnJlcHVsc2lvbi9NXFxucmVwdWxzaXZlL1lQXFxucmVwdWxzaXZlbmVzcy9NXFxucmVwdXJjaGFzZS9HRFNcXG5yZXB1dGFiaWxpdHkvTVxcbnJlcHV0YWJseS9FXFxucmVwdXRhdGlvbi9NU1xcbnJlcHV0ZS9EU01HQlxcbnJlcHV0ZWQvWVxcbnJlcXVlc3QvR0RSXFxucmVxdWllbS9TTVxcbnJlcXVpcmUvTERHXFxucmVxdWlyZW1lbnQvTVNcXG5yZXF1aXNpdGUvWE1OU1xcbnJlcXVpc2l0aW9uL0dNRFxcbnJlcXVpdGFsL01cXG5yZXF1aXRlL0RSU1pHXFxucmVxdWl0ZWQvVVxcbnJlcXVpdGVyL01cXG5yZXJlYWQvU0dcXG5yZXJlY29yZC9HRFNcXG5yZXJ1bm5pbmdcXG5yZXNhbXBsZS9HRFNcXG5yZXNhdFxcbnJlc2NpbmQvU0RHXFxucmVzY2lzc2lvbi9NXFxucmVzY3VlL0RSU01aR1xcbnJlc2N1ZXIvTVxcbnJlc2VhbC9CXFxucmVzZW1ibGUvRFNHXFxucmVzZW5kXFxucmVzZW50L0xTREdcXG5yZXNlbnRmdWwvWVBcXG5yZXNlbnRmdWxuZXNzL01cXG5yZXNlbnRtZW50L01TXFxucmVzZXJwaW5lL01cXG5yZXNlcnZhdGlvbi9NU1xcbnJlc2VydmVkL1VZXFxucmVzZXJ2ZWRuZXNzL01cXG5yZXNlcnZpc3QvU01cXG5yZXNlcnZvaXIvU01cXG5yZXNldHRpbmdcXG5yZXNoaXBwaW5nXFxucmVzaWRlbmNlL1NNXFxucmVzaWRlbmN5L1NNXFxucmVzaWRlbnQvTVNcXG5yZXNpZGVudGlhbFxcbnJlc2lkdWFcXG5yZXNpZHVhbC9NU1xcbnJlc2lkdWUvU01cXG5yZXNpZHV1bS9NXFxucmVzaWduYXRpb24vU01cXG5yZXNpZ25lZC9ZXFxucmVzaWxpZW5jZS9NXFxucmVzaWxpZW5jeS9NXFxucmVzaWxpZW50L1lcXG5yZXNpbm91c1xcbnJlc2lzdC9TTURSWkdcXG5yZXNpc3RhbmNlL1NNXFxucmVzaXN0YW50L1VcXG5yZXNpc3RpYmxlXFxucmVzaXN0aXZpdHlcXG5yZXNpc3RsZXNzXFxucmVzaXN0b3IvTVNcXG5yZXNpdC9TXFxucmVzaXR0aW5nXFxucmVzb2xkXFxucmVzb2xlL0RTR1xcbnJlc29sdXRlL1BZXFxucmVzb2x1dGVuZXNzL01cXG5yZXNvbHZlL1JCTVxcbnJlc29sdmVkL1VcXG5yZXNvbmFuY2UvU01cXG5yZXNvbmFudC9ZXFxucmVzb25hdGUvR0RTXFxucmVzb25hdG9yL1NNXFxucmVzb3JwdGlvbi9NXFxucmVzb3VuZC9TR0RcXG5yZXNvdW5kaW5nL1lcXG5yZXNvdXJjZWZ1bC9ZUFxcbnJlc291cmNlZnVsbmVzcy9NXFxucmVzcFxcbnJlc3BlY3QvRVNHVk1EXFxucmVzcGVjdGFiaWxpdHkvTVxcbnJlc3BlY3RhYmxlXFxucmVzcGVjdGFibHlcXG5yZXNwZWN0ZnVsL0VZXFxucmVzcGVjdGZ1bG5lc3MvTVxcbnJlc3BlY3RpdmUvWVxcbnJlc3BlbGwvU0dEXFxucmVzcGlyYXRpb24vTVxcbnJlc3BpcmF0b3IvU01cXG5yZXNwaXJhdG9yeVxcbnJlc3BpcmUvREdcXG5yZXNwbGVuZGVuY2UvTVxcbnJlc3BsZW5kZW50L1lcXG5yZXNwb25kL1NHRFxcbnJlc3BvbmRlbnQvU01cXG5yZXNwb25zZS9NU1xcbnJlc3BvbnNpYmlsaXR5L1NNXFxucmVzcG9uc2libGVcXG5yZXNwb25zaWJseVxcbnJlc3BvbnNpdmUvVVlQXFxucmVzcG9uc2l2ZW5lc3MvVU1cXG5yZXN0L0dWTURTXFxucmVzdGF0ZS9HRFNcXG5yZXN0YXVyYW50L1NNXFxucmVzdGF1cmF0ZXVyL01TXFxucmVzdGZ1bC9ZUFxcbnJlc3RmdWxsZXJcXG5yZXN0ZnVsbGVzdFxcbnJlc3RmdWxuZXNzL01cXG5yZXN0aXR1dGlvbi9NXFxucmVzdGl2ZS9ZUFxcbnJlc3RpdmVuZXNzL01cXG5yZXN0bGVzcy9QWVxcbnJlc3RsZXNzbmVzcy9NXFxucmVzdG9yYXRpb24vU01cXG5yZXN0b3JhdGl2ZS9TTVxcbnJlc3RvcmVyL1NNXFxucmVzdHJhaW5lZC9VXFxucmVzdHJhaW50L01TXFxucmVzdHJpY3QvU0RHVlxcbnJlc3RyaWN0ZWQvVVxcbnJlc3RyaWN0aW9uL01TXFxucmVzdHJpY3RpdmUvWVBcXG5yZXN0cmljdGl2ZW5lc3MvTVxcbnJlc3RyaW5nL1NHXFxucmVzdHJvb20vU01cXG5yZXN0cnVjdHVyaW5nL1NNXFxucmVzdWx0L0dTTURcXG5yZXN1bHRhbnQvU01cXG5yZXN1bWUvRFNNR1xcbnJlc3VtcHRpb24vTVNcXG5yZXN1cHBseS9EU0dcXG5yZXN1cmdlbmNlL01TXFxucmVzdXJnZW50XFxucmVzdXJyZWN0L0dTRFxcbnJlc3VycmVjdGlvbi9NU1xcbnJlc3VzY2l0YXRlL0dORFNcXG5yZXN1c2NpdGF0aW9uL01cXG5yZXN1c2NpdGF0b3IvU01cXG5yZXRhaWxlci9NU1xcbnJldGFpbi9TRFJaR1xcbnJldGFpbmVyL01cXG5yZXRha2UvR1xcbnJldGFsaWF0ZS9EU0dOVlhcXG5yZXRhbGlhdGlvbi9NXFxucmV0YWxpYXRvcnlcXG5yZXRhcmQvU01EUlpHXFxucmV0YXJkYW50L1NNXFxucmV0YXJkYXRpb24vTVxcbnJldGFyZGVyL01cXG5yZXRjaC9EU0dcXG5yZXRlYWNoL0dTXFxucmV0ZW50aW9uL01cXG5yZXRlbnRpdmUvWVBcXG5yZXRlbnRpdmVuZXNzL01cXG5yZXRoaW5rL1NHTVxcbnJldGhvdWdodFxcbnJldGljZW5jZS9NXFxucmV0aWNlbnQvWVxcbnJldGljdWxhdGVkXFxucmV0aWN1bGF0aW9uL01TXFxucmV0aWN1bHVtXFxucmV0aW5hL1NNXFxucmV0aW5hbFxcbnJldGlub2JsYXN0b21hXFxucmV0aW51ZS9TTVxcbnJldGlyZWUvU01cXG5yZXRpcmVtZW50L01TXFxucmV0b3J0L0dNRFxcbnJldHJhY2UvR0RTXFxucmV0cmFjdC9EQkdcXG5yZXRyYWN0aWxlXFxucmV0cmFjdGlvbi9TXFxucmV0cmFpbi9ER1NcXG5yZXRyZWFkL0RcXG5yZXRyZW5jaG1lbnQvTVNcXG5yZXRyaWJ1dGlvbi9NU1xcbnJldHJpYnV0aXZlXFxucmV0cmlldmFsL1NNXFxucmV0cmlldmUvRFJTTVpHQlxcbnJldHJpZXZlci9NXFxucmV0cm8vTVNcXG5yZXRyb2FjdGl2ZS9ZXFxucmV0cm9maXJlL0dEU1xcbnJldHJvZml0L1NNXFxucmV0cm9maXR0ZWRcXG5yZXRyb2ZpdHRpbmdcXG5yZXRyb2dyYWRlL0RTR1xcbnJldHJvZ3Jlc3MvR1ZEU1xcbnJldHJvZ3Jlc3Npb24vTVxcbnJldHJvcm9ja2V0L01TXFxucmV0cm9zcGVjdC9NRFNHVlxcbnJldHJvc3BlY3Rpb24vTVxcbnJldHJvc3BlY3RpdmUvTVlTXFxucmV0cm92aXJ1cy9NU1xcbnJldHNpbmEvTVxcbnJldHVybmFibGUvU01cXG5yZXR1cm5lZS9TTVxcbnJldi9aVk1cXG5yZXZhbXBpbmcvTVxcbnJldmVhbC9HSlNEXFxucmV2ZWFsZWQvVVxcbnJldmVhbGluZy9ZXFxucmV2ZWlsbGUvTVxcbnJldmVsL0pNRFJTWkdcXG5yZXZlbGF0aW9uL1NNXFxucmV2ZWxhdG9yeVxcbnJldmVsZXIvTVxcbnJldmVscnkvU01cXG5yZXZlbmdlL01HRFNcXG5yZXZlbnVlci9TTVxcbnJldmVyYlxcbnJldmVyYmVyYXRlL0RTR05YXFxucmV2ZXJiZXJhdGlvbi9NXFxucmV2ZXJlL0RTR1xcbnJldmVyZW5jZS9EU01HXFxucmV2ZXJlbmQvU01cXG5yZXZlcmVudC9ZXFxucmV2ZXJlbnRpYWwvWVxcbnJldmVyaWUvTVNcXG5yZXZlcnMvTVxcbnJldmVyc2FsL1NNXFxucmV2ZXJzZS9ZXFxucmV2ZXJzaWJpbGl0eVxcbnJldmVyc2libGVcXG5yZXZlcnNpYmx5XFxucmV2ZXJ0L0dTRFxcbnJldmVydGlibGVcXG5yZXZldG1lbnQvU01cXG5yZXZpbGUvRFJTTFpHXFxucmV2aWxlbWVudC9NXFxucmV2aWxlci9NXFxucmV2aXNlci9NU1xcbnJldmlzaW9uL1NNXFxucmV2aXNpb25pc20vTVxcbnJldmlzaW9uaXN0L1NNXFxucmV2aXZhbC9NU1xcbnJldml2YWxpc20vTVxcbnJldml2YWxpc3QvU01cXG5yZXZpdmUvRFNHXFxucmV2aXZpZmljYXRpb24vTVxcbnJldm9jYWJsZVxcbnJldm9rZS9EU0dcXG5yZXZvbHQvR0RcXG5yZXZvbHRpbmcvWVxcbnJldm9sdXRpb24vU01cXG5yZXZvbHV0aW9uYXJ5L1NNXFxucmV2b2x1dGlvbmlzdC9TTVxcbnJldm9sdXRpb25pemUvRFNHXFxucmV2b2x2ZS9CWkdEUlNcXG5yZXZvbHZlci9NXFxucmV2dWUvTVNcXG5yZXZ1bHNpb24vTVxcbnJldnZlZFxcbnJldnZpbmdcXG5yZXdhcmRlZC9VXFxucmV3YXJkaW5nL1VcXG5yZXdhcm0vR1NEXFxucmV3YXNoL0dEU1xcbnJld2VhdmUvR1NcXG5yZXdlZGRpbmdcXG5yZXdpbmQvTUJcXG5yZXdvdW5kXFxucmV3cml0ZS9NR1NcXG5yaGFwc29kaWNcXG5yaGFwc29kaWNhbFxcbnJoYXBzb2RpemUvR0RTXFxucmhhcHNvZHkvU01cXG5yaGVhL01TXFxucmhlbml1bS9NXFxucmhlb3N0YXQvU01cXG5yaGVzdXMvTVNcXG5yaGV0b3JpYy9NXFxucmhldG9yaWNhbC9ZXFxucmhldG9yaWNpYW4vU01cXG5yaGV1bS9NXFxucmhldW1hdGljL01TXFxucmhldW1hdGljYWxseVxcbnJoZXVtYXRpc20vTVxcbnJoZXVtYXRvaWRcXG5yaGV1bXlcXG5yaGluZXN0b25lL1NNXFxucmhpbml0aXMvTVxcbnJoaW5vL01TXFxucmhpbm9jZXJvcy9NU1xcbnJoaW5vcGxhc3R5XFxucmhpbm92aXJ1cy9NU1xcbnJoaXpvbWUvTVNcXG5yaG8vU01cXG5yaG9kaXVtL01cXG5yaG9kb2RlbmRyb24vU01cXG5yaG9tYm9pZC9TTVxcbnJob21ib2lkYWxcXG5yaG9tYnVzL01TXFxucmh1YmFyYi9NU1xcbnJoeW1lL01aR0RSU1xcbnJoeW1lci9NXFxucmh5bWVzdGVyL01TXFxucmh5dGhtL1NNXFxucmh5dGhtaWNcXG5yaHl0aG1pY2FsL1lcXG5yaWFsL01TXFxucmliL1NNXFxucmliYWxkXFxucmliYWxkcnkvTVxcbnJpYmJlZFxcbnJpYmJlci9TTVxcbnJpYmJpbmdcXG5yaWJib24vU01cXG5yaWJvZmxhdmluL01cXG5yaWNlL01aR0RSU1xcbnJpY2VyL01cXG5yaWNoL1RNUlNZUFxcbnJpY2huZXNzL01cXG5yaWNrL0dNRFNcXG5yaWNrZXRzL01cXG5yaWNrZXR5L1JUXFxucmlja3JhY2svTVxcbnJpY2tzaGF3L01TXFxucmljb2NoZXQvR01EU1xcbnJpY290dGEvTVxcbnJpZC9TXFxucmlkZGFuY2UvTVxcbnJpZGRlblxcbnJpZGRpbmdcXG5yaWRkbGUvRFNNR1xcbnJpZGUvTVpHUlNcXG5yaWRlci9NXFxucmlkZXJsZXNzXFxucmlkZXJzaGlwL01cXG5yaWRnZS9NR0RTXFxucmlkZ2Vwb2xlL1NNXFxucmlkZ3lcXG5yaWRpY3VsZS9NR0RTXFxucmlkaWN1bG91cy9ZUFxcbnJpZGljdWxvdXNuZXNzL01cXG5yaWRpbmcvTVxcbnJpZmUvVFJcXG5yaWZmL0dNRFNcXG5yaWZmbGUvRFNNR1xcbnJpZmZyYWZmL01cXG5yaWZsZS9NWkdEUlNcXG5yaWZsZW1hbi9NXFxucmlmbGVtZW5cXG5yaWZsZXIvTVxcbnJpZmxpbmcvTVxcbnJpZnQvR01EU1xcbnJpZy9TTVxcbnJpZ2F0b25pL01cXG5yaWdnZWRcXG5yaWdnZXIvU01cXG5yaWdnaW5nL01cXG5yaWdodC9NRFJZU1BUR1xcbnJpZ2h0ZW91cy9VUFxcbnJpZ2h0ZW91c2x5XFxucmlnaHRlb3VzbmVzcy9VTVxcbnJpZ2h0ZnVsL1BZXFxucmlnaHRmdWxuZXNzL01cXG5yaWdodGlzbS9NXFxucmlnaHRpc3QvU01cXG5yaWdodG1vc3RcXG5yaWdodG5lc3MvTVxcbnJpZ2h0b1xcbnJpZ2h0c2l6ZS9EU0dcXG5yaWdodHdhcmQvU1xcbnJpZ2lkL1lQXFxucmlnaWRpdHkvTVxcbnJpZ2lkbmVzcy9NXFxucmlnbWFyb2xlL01TXFxucmlnb3IvTVNcXG5yaWdvcm91cy9ZUFxcbnJpZ29yb3VzbmVzcy9NXFxucmlsZS9HRFNcXG5yaWxsL01TXFxucmltL1NHTURcXG5yaW1lL01TXFxucmltbGVzc1xcbnJpbW1lZFxcbnJpbW1pbmdcXG5yaW5kL01TXFxucmluZy9aR01EUkpcXG5yaW5nZXIvTVxcbnJpbmdnaXQvTVNcXG5yaW5nbGVhZGVyL01TXFxucmluZ2xldC9NU1xcbnJpbmdsaWtlXFxucmluZ21hc3Rlci9NU1xcbnJpbmdzaWRlL01cXG5yaW5ndG9uZS9TTVxcbnJpbmd3b3JtL01cXG5yaW5rL01TXFxucmluc2UvTUdEU1xcbnJpb3QvWkdNRFJTXFxucmlvdGVyL01cXG5yaW90aW5nL01cXG5yaW90b3VzL1BZXFxucmlwL1NYVE1OUlxcbnJpcGFyaWFuXFxucmlwY29yZC9NU1xcbnJpcGUvWVBcXG5yaXBlbi9ER1xcbnJpcGVuZWQvVVxcbnJpcGVuZXNzL01cXG5yaXBvZmYvU01cXG5yaXBvc3RlL01HRFNcXG5yaXBwZWRcXG5yaXBwZXIvU01cXG5yaXBwaW5nXFxucmlwcGxlL0RTTUdcXG5yaXBwbHlcXG5yaXBzYXcvU01cXG5yaXB0aWRlL01TXFxucmlzZS9KTVpHUlNcXG5yaXNlblxcbnJpc2VyL01cXG5yaXNpYmlsaXR5L01cXG5yaXNpYmxlXFxucmlzaW5nL01cXG5yaXNrL0dNRFNcXG5yaXNraWx5XFxucmlza2luZXNzL01cXG5yaXNreS9SUFRcXG5yaXNvdHRvL01TXFxucmlzcXVlXFxucmlzc29sZS9TXFxucml0ZS9NU1xcbnJpdHVhbC9TTVlcXG5yaXR1YWxpc20vTVxcbnJpdHVhbGlzdGljXFxucml0dWFsaXN0aWNhbGx5XFxucml0dWFsaXplZFxcbnJpdHp5L1JUXFxucml2L1pOUlxcbnJpdmFsL01EU0dcXG5yaXZhbGVkL1VcXG5yaXZhbHJ5L1NNXFxucml2ZS9DR0RTXFxucml2ZXIvTVxcbnJpdmVyYmFuay9TTVxcbnJpdmVyYmVkL01TXFxucml2ZXJib2F0L1NNXFxucml2ZXJmcm9udFxcbnJpdmVyc2lkZS9NU1xcbnJpdmV0L01EUlNaR1xcbnJpdmV0ZXIvTVxcbnJpdmllcmEvU1xcbnJpdnVsZXQvTVNcXG5yaXlhbC9NU1xcbnJtXFxucm9hY2gvR01EU1xcbnJvYWQvSU1TXFxucm9hZGJlZC9TTVxcbnJvYWRibG9jay9NRFNHXFxucm9hZGhvdXNlL1NNXFxucm9hZGllL01TXFxucm9hZGtpbGwvTVxcbnJvYWRydW5uZXIvU01cXG5yb2Fkc2hvdy9TTVxcbnJvYWRzaWRlL1NNXFxucm9hZHN0ZXIvU01cXG5yb2Fkd2F5L1NNXFxucm9hZHdvcmsvU01cXG5yb2Fkd29ydGh5XFxucm9hbS9aR0RSU1xcbnJvYW1lci9NXFxucm9hbWluZy9NXFxucm9hbi9NU1xcbnJvYXIvWkdNRFJTXFxucm9hcmVyL01cXG5yb2FyaW5nL01cXG5yb2FzdC9aR01EUlNKXFxucm9hc3Rlci9NXFxucm9hc3RpbmcvTVxcbnJvYi9TXFxucm9iYmVkXFxucm9iYmVyL01TXFxucm9iYmVyeS9TTVxcbnJvYmJpbmdcXG5yb2JlJ3NcXG5yb2JlL0VHRFNcXG5yb2Jpbi9NU1xcbnJvYm9jYWxsL1NHTURcXG5yb2JvdC9NU1xcbnJvYm90aWMvU1xcbnJvYm90aWNzL01cXG5yb2JvdGl6ZS9HRFNcXG5yb2J1c3QvUllQVFxcbnJvYnVzdG5lc3MvTVxcbnJvY2svWkdNRFJTXFxucm9ja2FiaWxseS9NXFxucm9ja2JvdW5kXFxucm9ja2VyL01cXG5yb2NrZXJ5L1NcXG5yb2NrZXQvTURTR1xcbnJvY2tldHJ5L01cXG5yb2NrZmFsbC9TTVxcbnJvY2tpbmVzcy9NXFxucm9ja3kvVFJQXFxucm9jb2NvL01cXG5yb2QvU01cXG5yb2RlXFxucm9kZW50L01TXFxucm9kZW8vTVNcXG5yb2UvU01cXG5yb2VidWNrL1NNXFxucm9lbnRnZW4vTVNcXG5yb2dlci9HRFNcXG5yb2d1ZSdzXFxucm9ndWUvS1NcXG5yb2d1ZXJ5L01cXG5yb2d1aXNoL1lQXFxucm9ndWlzaG5lc3MvTVxcbnJvaWwvR0RTXFxucm9pc3Rlci9aR0RSU1xcbnJvaXN0ZXJlci9NXFxucm9sZS9NU1xcbnJvbGwvTURSWkdKU1xcbnJvbGxiYWNrL1NNXFxucm9sbGVyL01cXG5yb2xsZXJibGFkaW5nXFxucm9sbGVyc2thdGluZy9NXFxucm9sbGljay9TREdcXG5yb2xsaWNraW5nL01cXG5yb2xsbW9wL1NcXG5yb2xsb3Zlci9TTVxcbnJvbWFpbmUvTVNcXG5yb21hbi9NXFxucm9tYW5jZS9NWkdEUlNcXG5yb21hbmNlci9NXFxucm9tYW50aWMvTVNcXG5yb21hbnRpY2FsbHlcXG5yb21hbnRpY2lzbS9NXFxucm9tYW50aWNpc3QvU01cXG5yb21hbnRpY2l6ZS9EU0dcXG5yb21lby9NU1xcbnJvbXAvTURSWkdTXFxucm9tcGVyL01cXG5yb25kby9TTVxcbnJvb2QvTVNcXG5yb29mL01EUlpHU1xcbnJvb2Zlci9NXFxucm9vZmluZy9NXFxucm9vZmxlc3NcXG5yb29mdG9wL1NNXFxucm9vay9NREdTXFxucm9va2VyeS9TTVxcbnJvb2tpZS9TTVxcbnJvb20vTURSWkdTXFxucm9vbWVyL01cXG5yb29tZXR0ZS9TTVxcbnJvb21mdWwvU01cXG5yb29taW5lc3MvTVxcbnJvb21tYXRlL1NNXFxucm9vbXkvUlRQXFxucm9vc3QvU01EUlpHXFxucm9vc3Rlci9NXFxucm9vdC9NRFJaR1NcXG5yb290ZXIvTVxcbnJvb3RraXQvU01cXG5yb290bGVzcy9QXFxucm9vdGxldC9TTVxcbnJvcGUvTVpHRFJTXFxucm9wZXIvTVxcbnJvcHkvUlRcXG5yb3NhcnkvU01cXG5yb3NlL01TXFxucm9zZWF0ZVxcbnJvc2VidWQvU01cXG5yb3NlYnVzaC9NU1xcbnJvc2VtYXJ5L01cXG5yb3NldHRlL1NNXFxucm9zZXdhdGVyL01cXG5yb3Nld29vZC9NU1xcbnJvc2lseVxcbnJvc2luL1NNREdcXG5yb3NpbmVzcy9NXFxucm9zdGVyL1NNXFxucm9zdHJ1bS9NU1xcbnJvc3kvUlRQXFxucm90L1NNXFxucm90YS9TXFxucm90YXJ5L1NNXFxucm90YXRlL0RTR05YXFxucm90YXRpb24vTVxcbnJvdGF0aW9uYWxcXG5yb3RhdG9yeVxcbnJvdGUvTVxcbnJvdGd1dC9NXFxucm90aXNzZXJpZS9TTVxcbnJvdG9ncmF2dXJlL01TXFxucm90b3IvU01cXG5yb3RvdGlsbGVyL01TXFxucm90dGVkXFxucm90dGVuL1RQUllcXG5yb3R0ZW5uZXNzL01cXG5yb3R0ZXIvU1xcbnJvdHRpbmdcXG5yb3R0d2VpbGVyL1NcXG5yb3R1bmQvUFxcbnJvdHVuZGEvTVNcXG5yb3R1bmRpdHkvTVxcbnJvdHVuZG5lc3MvTVxcbnJvdWUvTVNcXG5yb3VnZS9EU01HXFxucm91Z2gvTUROUllYVEdQXFxucm91Z2hhZ2UvTVxcbnJvdWdoY2FzdFxcbnJvdWdoZW4vR0RcXG5yb3VnaGhvdXNlL01HRFNcXG5yb3VnaG5lY2svR01EU1xcbnJvdWdobmVzcy9NXFxucm91Z2hzXFxucm91Z2hzaG9kXFxucm91bGV0dGUvTVxcbnJvdW5kL1BTTURSWVpUR1xcbnJvdW5kYWJvdXQvU01cXG5yb3VuZGVsL1NcXG5yb3VuZGVsYXkvTVNcXG5yb3VuZGhvdXNlL1NNXFxucm91bmRpc2hcXG5yb3VuZG5lc3MvTVxcbnJvdW5kdXAvTVNcXG5yb3VuZHdvcm0vU01cXG5yb3VzZS9EU0dcXG5yb3VzdC9TREdcXG5yb3VzdGFib3V0L1NNXFxucm91dC9NUlpTXFxucm91dGUnc1xcbnJvdXRlL0FEU0dcXG5yb3V0ZWluZ1xcbnJvdXRlci9NXFxucm91dGluZS9NWVNcXG5yb3V0aW5pemUvR0RTXFxucm91eFxcbnJvdmUvWkdEUlNcXG5yb3Zlci9NXFxucm93L1NaR01EUlxcbnJvd2FuL1NcXG5yb3dib2F0L01TXFxucm93ZGlseVxcbnJvd2RpbmVzcy9NXFxucm93ZHkvUFJTTVRcXG5yb3dkeWlzbS9NXFxucm93ZWwvU01ER1xcbnJvd2VyL01cXG5yb3dpbmcvTVxcbnJvd2xvY2svU1xcbnJveWFsL1NNWVxcbnJveWFsaXN0L1NNXFxucm95YWx0aWVzL01cXG5yb3lhbHR5L1NNXFxucnBtXFxucnBzXFxucnRcXG5ydGVcXG5ydWIvU01cXG5ydWJhdG8vU01cXG5ydWJiZWRcXG5ydWJiZXIvU01cXG5ydWJiZXJpemUvR0RTXFxucnViYmVybmVjay9NRFJTWkdcXG5ydWJiZXJuZWNrZXIvTVxcbnJ1YmJlcnlcXG5ydWJiaW5nL1NcXG5ydWJiaXNoL01EU0dcXG5ydWJiaXNoeVxcbnJ1YmJsZS9NXFxucnViZG93bi9TTVxcbnJ1YmUvTVNcXG5ydWJlbGxhL01cXG5ydWJpY3VuZFxcbnJ1YmlkaXVtL01cXG5ydWJsZS9TTVxcbnJ1YnJpYy9TTVxcbnJ1YnkvUlNNVFxcbnJ1Y2hlZFxcbnJ1Y2svREdTXFxucnVja3NhY2svTVNcXG5ydWNrdXMvTVNcXG5ydWN0aW9uc1xcbnJ1ZGRlci9TTVxcbnJ1ZGRlcmxlc3NcXG5ydWRkaW5lc3MvTVxcbnJ1ZGR5L1JUUFxcbnJ1ZGUvWVRSUFxcbnJ1ZGVuZXNzL01cXG5ydWRpbWVudC9TTVxcbnJ1ZGltZW50YXJ5XFxucnVlL0RTTUdcXG5ydWVmdWwvUFlcXG5ydWVmdWxuZXNzL01cXG5ydWZmL01EWUdTXFxucnVmZmlhbi9NWVNcXG5ydWZmbGUvRFNNR1xcbnJ1ZmZsZWQvVVxcbnJ1Zy9TTVxcbnJ1Z2J5L01cXG5ydWdnZWQvUFRSWVxcbnJ1Z2dlZG5lc3MvTVxcbnJ1Z2dlclxcbnJ1Z3JhdC9TTVxcbnJ1aW4vTURHU1xcbnJ1aW5hdGlvbi9NXFxucnVpbm91cy9ZXFxucnVsZS9NWkdKRFJTXFxucnVsZXIvTVxcbnJ1bGluZy9NXFxucnVtL1NNXFxucnVtYmEvU01ER1xcbnJ1bWJsZS9EU0pNR1xcbnJ1bWJsaW5nL01cXG5ydW1idXN0aW91c1xcbnJ1bWluYW50L01TXFxucnVtaW5hdGUvWEdOVkRTXFxucnVtaW5hdGlvbi9NXFxucnVtaW5hdGl2ZS9ZXFxucnVtbWFnZS9EU01HXFxucnVtbWVyXFxucnVtbWVzdFxcbnJ1bW15L01cXG5ydW1vci9TTURHXFxucnVtb3Jtb25nZXIvU01cXG5ydW1wL01ZU1xcbnJ1bXBsZS9EU01HXFxucnVtcHVzL01TXFxucnVuL0FTTVxcbnJ1bmFib3V0L01TXFxucnVuYXJvdW5kL1NNXFxucnVuYXdheS9NU1xcbnJ1bmRvd24vU01cXG5ydW5lL01TXFxucnVuZy9NU1xcbnJ1bmljXFxucnVubGV0L1NNXFxucnVubmVsL1NNXFxucnVubmVyL1NNXFxucnVubmluZy9NXFxucnVubnkvUlRcXG5ydW5vZmYvU01cXG5ydW50L01TXFxucnVudGltZVxcbnJ1bnR5L1JUXFxucnVud2F5L1NNXFxucnVwZWUvU01cXG5ydXBpYWgvTVxcbnJ1cGlhaHNcXG5ydXB0dXJlL01HRFNcXG5ydXJhbFxcbnJ1c2UvTVNcXG5ydXNoL01EUlNaR1xcbnJ1c2hlci9NXFxucnVzaHlcXG5ydXNrL01TXFxucnVzc2V0L1NNXFxucnVzdC9NREdTXFxucnVzdGljL1NNXFxucnVzdGljYWxseVxcbnJ1c3RpY2F0ZS9HRFNcXG5ydXN0aWNhdGlvbi9NXFxucnVzdGljaXR5L01cXG5ydXN0aW5lc3MvTVxcbnJ1c3RsZS9EUlNKTVpHXFxucnVzdGxlci9NXFxucnVzdHByb29mL1NER1xcbnJ1c3R5L1JQTlRcXG5ydXQvU01cXG5ydXRhYmFnYS9TTVxcbnJ1dGhlbml1bS9NXFxucnV0aGVyZm9yZGl1bS9NXFxucnV0aGxlc3MvWVBcXG5ydXRobGVzc25lc3MvTVxcbnJ1dHRlZFxcbnJ1dHRpbmdcXG5ydXR0eS9SVFxcbnJ5ZS9NXFxucy9OWVhCXFxuc2FiYmF0aC9NXFxuc2FiYmF0aHNcXG5zYWJiYXRpY2FsL1NNXFxuc2FiZXIvTVNcXG5zYWJsZS9NU1xcbnNhYm90L01TXFxuc2Fib3RhZ2UvRFNNR1xcbnNhYm90ZXVyL1NNXFxuc2FicmEvTVNcXG5zYWMvU01cXG5zYWNjaGFyaW4vTVxcbnNhY2NoYXJpbmVcXG5zYWNlcmRvdGFsXFxuc2FjaGVtL1NNXFxuc2FjaGV0L1NNXFxuc2Fjay9aR01EUkpTXFxuc2Fja2Nsb3RoL01cXG5zYWNrZXIvTVxcbnNhY2tmdWwvTVNcXG5zYWNraW5nL01cXG5zYWNyYVxcbnNhY3JhbWVudC9NU1xcbnNhY3JhbWVudGFsXFxuc2FjcmVkL1lQXFxuc2FjcmVkbmVzcy9NXFxuc2FjcmlmaWNlL0RTTUdcXG5zYWNyaWZpY2lhbC9ZXFxuc2FjcmlsZWdlL01TXFxuc2FjcmlsZWdpb3VzL1lcXG5zYWNyaXN0YW4vTVNcXG5zYWNyaXN0eS9TTVxcbnNhY3JvaWxpYWMvTVNcXG5zYWNyb3NhbmN0L1BcXG5zYWNyb3NhbmN0bmVzcy9NXFxuc2FjcnVtL01cXG5zYWQvUFlcXG5zYWRkZW4vU0RHXFxuc2FkZGVyXFxuc2FkZGVzdFxcbnNhZGRsZSdzXFxuc2FkZGxlL1VEU0dcXG5zYWRkbGViYWcvTVNcXG5zYWRkbGVyL1NcXG5zYWRkbGVyeVxcbnNhZGVzXFxuc2FkaHUvU1xcbnNhZGlzbS9NXFxuc2FkaXN0L1NNXFxuc2FkaXN0aWNcXG5zYWRpc3RpY2FsbHlcXG5zYWRuZXNzL01cXG5zYWRvbWFzb2NoaXNtL01cXG5zYWRvbWFzb2NoaXN0L01TXFxuc2Fkb21hc29jaGlzdGljXFxuc2FmYXJpL1NHTURcXG5zYWZlL01ZVFBSU1xcbnNhZmVndWFyZC9TTURHXFxuc2FmZWtlZXBpbmcvTVxcbnNhZmVuZXNzL01cXG5zYWZldHkvU01cXG5zYWZmbG93ZXIvTVNcXG5zYWZmcm9uL01TXFxuc2FnL1NNXFxuc2FnYS9NU1xcbnNhZ2FjaW91cy9ZXFxuc2FnYWNpdHkvTVxcbnNhZ2UvTVlUUlNcXG5zYWdlYnJ1c2gvTVxcbnNhZ2dlZFxcbnNhZ2dpbmdcXG5zYWdneS9SVFxcbnNhZ28vTVxcbnNhZ3Vhcm8vTVNcXG5zYWhpYi9NU1xcbnNhaWQvVVxcbnNhaWwvR01EU0pcXG5zYWlsYm9hcmQvTVJaR1NcXG5zYWlsYm9hcmRlci9NXFxuc2FpbGJvYXJkaW5nL01cXG5zYWlsYm9hdC9NU1xcbnNhaWxjbG90aC9NXFxuc2FpbGZpc2gvTVNcXG5zYWlsaW5nL01cXG5zYWlsb3IvU01cXG5zYWlscGxhbmUvTVNcXG5zYWludC9NRFlTXFxuc2FpbnRob29kL01cXG5zYWludGxpa2VcXG5zYWludGxpbmVzcy9NXFxuc2FpbnRseS9QUlRcXG5zYWl0aFxcbnNha2UvTVxcbnNhbGFhbS9TTURHXFxuc2FsYWJsZS9VXFxuc2FsYWNpb3VzL1BZXFxuc2FsYWNpb3VzbmVzcy9NXFxuc2FsYWNpdHkvTVxcbnNhbGFkL01TXFxuc2FsYW1hbmRlci9TTVxcbnNhbGFtaS9TTVxcbnNhbGFyeS9EU01cXG5zYWxlL0FCTVNcXG5zYWxlcm9vbS9TXFxuc2FsZXNjbGVyay9TTVxcbnNhbGVzZ2lybC9TTVxcbnNhbGVzbGFkeS9TTVxcbnNhbGVzbWFuL01cXG5zYWxlc21hbnNoaXAvTVxcbnNhbGVzbWVuXFxuc2FsZXNwZW9wbGUvTVxcbnNhbGVzcGVyc29uL01TXFxuc2FsZXNyb29tL1NcXG5zYWxlc3dvbWFuL01cXG5zYWxlc3dvbWVuXFxuc2FsaWVuY2UvTVxcbnNhbGllbnQvU01ZXFxuc2FsaW5lL1NNXFxuc2FsaW5pdHkvTVxcbnNhbGl2YS9NXFxuc2FsaXZhcnlcXG5zYWxpdmF0ZS9HTkRTXFxuc2FsaXZhdGlvbi9NXFxuc2FsbG93L1JUUFxcbnNhbGxvd25lc3MvTVxcbnNhbGx5L0RTTUdcXG5zYWxtb24vU01cXG5zYWxtb25lbGxhL01cXG5zYWxtb25lbGxhZVxcbnNhbG9uL01TXFxuc2Fsb29uL1NNXFxuc2Fsc2EvTVNcXG5zYWx0J3NcXG5zYWx0L0NUR0RTXFxuc2FsdGJveC9NU1xcbnNhbHRjZWxsYXIvU01cXG5zYWx0ZWQvVVxcbnNhbHRlclxcbnNhbHRpbmUvU01cXG5zYWx0aW5lc3MvTVxcbnNhbHRwZXRlci9NXFxuc2FsdHNoYWtlci9TTVxcbnNhbHR3YXRlci9NXFxuc2FsdHkvUlRQXFxuc2FsdWJyaW91cy9JXFxuc2FsdXRhcnlcXG5zYWx1dGF0aW9uL01TXFxuc2FsdXRhdG9yaWFuL01TXFxuc2FsdXRhdG9yeVxcbnNhbHV0ZS9EU01HXFxuc2FsdmFnZS9EU01HXFxuc2FsdmFnZWFibGVcXG5zYWx2YXRpb24vTVxcbnNhbHZlL01aR0RSU1xcbnNhbHZlci9NXFxuc2Fsdm8vTVNcXG5zYW1hcml1bS9NXFxuc2FtYmEvTURTR1xcbnNhbWUvU1BcXG5zYW1lbmVzcy9NXFxuc2FtZXlcXG5zYW1pemRhdC9TXFxuc2Ftb3NhL1NcXG5zYW1vdmFyL1NNXFxuc2FtcGFuL1NNXFxuc2FtcGxlL0RSU01aR0pcXG5zYW1wbGVyL01cXG5zYW1wbGluZy9NXFxuc2FtdXJhaS9TTVxcbnNhbmF0b3JpdW0vU01cXG5zYW5jdGlmaWNhdGlvbi9NXFxuc2FuY3RpZnkvR0RTTlxcbnNhbmN0aW1vbmlvdXMvWVBcXG5zYW5jdGltb25pb3VzbmVzcy9NXFxuc2FuY3RpbW9ueS9NXFxuc2FuY3Rpb24vR1NNRFxcbnNhbmN0aW9uZWQvVVxcbnNhbmN0aXR5L01cXG5zYW5jdHVhcnkvU01cXG5zYW5jdHVtL1NNXFxuc2FuZC9aR01EUlNcXG5zYW5kYWwvU01cXG5zYW5kYWx3b29kL01cXG5zYW5kYmFnL1NNXFxuc2FuZGJhZ2dlZFxcbnNhbmRiYWdnZXIvU01cXG5zYW5kYmFnZ2luZ1xcbnNhbmRiYW5rL01TXFxuc2FuZGJhci9TTVxcbnNhbmRibGFzdC9aR01EUlNcXG5zYW5kYmxhc3Rlci9NXFxuc2FuZGJveC9NU1xcbnNhbmRjYXN0bGUvTVNcXG5zYW5kZXIvTVxcbnNhbmRob2cvU01cXG5zYW5kaW5lc3MvTVxcbnNhbmRsb3QvU01cXG5zYW5kbG90dGVyL01TXFxuc2FuZG1hbi9NXFxuc2FuZG1lblxcbnNhbmRwYXBlci9HTURTXFxuc2FuZHBpcGVyL01TXFxuc2FuZHBpdC9TXFxuc2FuZHN0b25lL01cXG5zYW5kc3Rvcm0vU01cXG5zYW5kd2ljaC9NRFNHXFxuc2FuZHkvUlRQXFxuc2FuZS9JWVRSXFxuc2FuZW5lc3MvTVxcbnNhbmcvU1xcbnNhbmdmcm9pZC9NXFxuc2FuZ3JpYS9NXFxuc2FuZ3VpbmFyeVxcbnNhbmd1aW5lL1lcXG5zYW5pdGFyaWFuL1NNXFxuc2FuaXRhcml1bS9TTVxcbnNhbml0YXJ5L0lVXFxuc2FuaXRhdGlvbi9NXFxuc2FuaXRpemUvWkdEUlNcXG5zYW5pdHkvSU1cXG5zYW5rXFxuc2Fuc1xcbnNhbnNlcmlmXFxuc2FwL1NNXFxuc2FwaWVuY2UvTVxcbnNhcGllbnNcXG5zYXBpZW50XFxuc2FwbGVzc1xcbnNhcGxpbmcvTVNcXG5zYXBwZWRcXG5zYXBwZXIvU1xcbnNhcHBoaXJlL1NNXFxuc2FwcGluZXNzL01cXG5zYXBwaW5nXFxuc2FwcHkvUFJUXFxuc2Fwcm9waHl0ZS9TTVxcbnNhcHJvcGh5dGljXFxuc2Fwc3Vja2VyL1NNXFxuc2Fwd29vZC9NXFxuc2FyYW4vTVxcbnNhcmNhc20vTVNcXG5zYXJjYXN0aWNcXG5zYXJjYXN0aWNhbGx5XFxuc2FyY29tYS9NU1xcbnNhcmNvcGhhZ2lcXG5zYXJjb3BoYWd1cy9NXFxuc2FyZGluZS9NU1xcbnNhcmRvbmljXFxuc2FyZG9uaWNhbGx5XFxuc2FyZ2UvTVNcXG5zYXJpL01TXFxuc2Fya3lcXG5zYXJuaWUvU1xcbnNhcm9uZy9TTVxcbnNhcnNhcGFyaWxsYS9NU1xcbnNhcnRvcmlhbC9ZXFxuc2FzaC9NU1xcbnNhc2hheS9TR01EXFxuc2Fzcy9HTURTXFxuc2Fzc2FmcmFzL01TXFxuc2Fzc3kvUlRcXG5zYXRcXG5zYXRhbmljXFxuc2F0YW5pY2FsL1lcXG5zYXRhbmlzbS9NXFxuc2F0YW5pc3QvTVNcXG5zYXRheVxcbnNhdGNoZWwvTVNcXG5zYXRlL0dEU1xcbnNhdGVlbi9NXFxuc2F0ZWxsaXRlL0RTTUdcXG5zYXRpYWJsZS9JXFxuc2F0aWF0ZS9HTkRTXFxuc2F0aWF0aW9uL01cXG5zYXRpZXR5L01cXG5zYXRpbi9NXFxuc2F0aW53b29kL1NNXFxuc2F0aW55XFxuc2F0aXJlL1NNXFxuc2F0aXJpY1xcbnNhdGlyaWNhbC9ZXFxuc2F0aXJpc3QvU01cXG5zYXRpcml6ZS9EU0dcXG5zYXRpc2ZhY3Rpb24vRU1cXG5zYXRpc2ZhY3Rpb25zXFxuc2F0aXNmYWN0b3JpbHkvVVxcbnNhdGlzZmFjdG9yeS9VXFxuc2F0aXNmaWVkL1VcXG5zYXRpc2Z5L0VEU0dcXG5zYXRpc2Z5aW5nL1VcXG5zYXRpc2Z5aW5nbHlcXG5zYXRvcmkvTVxcbnNhdHJhcC9TTVxcbnNhdHN1bWEvU1xcbnNhdHVyYXRlL0RTR05cXG5zYXR1cmF0ZWQvVVxcbnNhdHVyYXRpb24vTVxcbnNhdHVybmluZVxcbnNhdHlyL01TXFxuc2F0eXJpYXNpcy9NXFxuc2F0eXJpY1xcbnNhdWNlL01aR0RSU1xcbnNhdWNlcGFuL1NNXFxuc2F1Y2VyL01cXG5zYXVjaWx5XFxuc2F1Y2luZXNzL01cXG5zYXVjeS9SUFRcXG5zYXVlcmtyYXV0L01cXG5zYXVuYS9NRFNHXFxuc2F1bnRlci9NREdTXFxuc2F1cmlhblxcbnNhdXJvcG9kL1NNXFxuc2F1c2FnZS9NU1xcbnNhdXRlL01TXFxuc2F1dGVlZFxcbnNhdXRlaW5nXFxuc2F2YWdlL0RSU01ZVEdQXFxuc2F2YWdlbmVzcy9NXFxuc2F2YWdlcnkvU01cXG5zYXZhbm5hL01TXFxuc2F2YW50L1NNXFxuc2F2ZS9CSk1aR0RSU1xcbnNhdmVkL1VcXG5zYXZlci9NXFxuc2F2aW5nL01cXG5zYXZpbmdzL01cXG5zYXZpb3IvU01cXG5zYXZvci9NRFNHXFxuc2F2b3JpbmVzcy9NXFxuc2F2b3J5L1BUUlNNXFxuc2F2b3kvTVNcXG5zYXZ2eS9EUlNNVEdcXG5zYXcvU0dNRFxcbnNhd2JvbmVzL01cXG5zYXdidWNrL01TXFxuc2F3ZHVzdC9NXFxuc2F3Zmx5L1NNXFxuc2F3aG9yc2UvU01cXG5zYXdtaWxsL01TXFxuc2F3eWVyL1NNXFxuc2F4L01TXFxuc2F4aWZyYWdlL1NNXFxuc2F4b3Bob25lL01TXFxuc2F4b3Bob25pc3QvU01cXG5zYXknc1xcbnNheS9VU0dcXG5zYXlpbmcvU01cXG5zY2FiL01TXFxuc2NhYmJhcmQvTVNcXG5zY2FiYmVkXFxuc2NhYmJpbmVzcy9NXFxuc2NhYmJpbmdcXG5zY2FiYnkvUFRSXFxuc2NhYmllcy9NXFxuc2NhYnJvdXNcXG5zY2FkL01TXFxuc2NhZmZvbGQvU01HXFxuc2NhZmZvbGRpbmcvTVxcbnNjYWcvU1xcbnNjYWdnZWRcXG5zY2FsYWJpbGl0eVxcbnNjYWxhci9TXFxuc2NhbGF3YWcvTVNcXG5zY2FsZC9NRFNHXFxuc2NhbGUnc1xcbnNjYWxlL0NHRFNcXG5zY2FsZWxlc3NcXG5zY2FsZW5lXFxuc2NhbGluZXNzL01cXG5zY2FsbGlvbi9NU1xcbnNjYWxsb3AvR1NNRFxcbnNjYWxwL01EUlNaR1xcbnNjYWxwZWwvU01cXG5zY2FscGVyL01cXG5zY2FseS9SVFBcXG5zY2FtL01TXFxuc2NhbW1lZFxcbnNjYW1tZXIvU1xcbnNjYW1taW5nXFxuc2NhbXAvTVJTWlxcbnNjYW1wZXIvR01EXFxuc2NhbXBpL01cXG5zY2FuL01TXFxuc2NhbmRhbC9TTVxcbnNjYW5kYWxpemUvRFNHXFxuc2NhbmRhbG1vbmdlci9TTVxcbnNjYW5kYWxvdXMvWVxcbnNjYW5kaXVtL01cXG5zY2FubmVkXFxuc2Nhbm5lci9TTVxcbnNjYW5uaW5nXFxuc2NhbnNpb24vTVxcbnNjYW50L0NEU1RHXFxuc2NhbnRlclxcbnNjYW50aWx5XFxuc2NhbnRpbmVzcy9NXFxuc2NhbnRseVxcbnNjYW50bmVzcy9NXFxuc2NhbnR5L1JTUFRcXG5zY2FwZWdvYXQvU0dNRFxcbnNjYXBlZ3JhY2UvTVNcXG5zY2FwdWxhL01cXG5zY2FwdWxhZVxcbnNjYXB1bGFyL1NNXFxuc2Nhci9HTURTXFxuc2NhcmFiL1NNXFxuc2NhcmNlL1JZVFBcXG5zY2FyY2VuZXNzL01cXG5zY2FyY2l0eS9TTVxcbnNjYXJlL01TXFxuc2NhcmVjcm93L01TXFxuc2NhcmVtb25nZXIvU01HXFxuc2NhcmYvTURTR1xcbnNjYXJpZmljYXRpb24vTVxcbnNjYXJpZnkvTkRTR1xcbnNjYXJpbHlcXG5zY2FyaW5lc3MvTVxcbnNjYXJsYXRpbmEvTVxcbnNjYXJsZXQvTVxcbnNjYXJwL01EUlNaR1xcbnNjYXJwZXIvREdcXG5zY2FycmVkXFxuc2NhcnJpbmdcXG5zY2FydmVzXFxuc2NhcnkvUlRQXFxuc2NhdC9NU1xcbnNjYXRoaW5nL1lcXG5zY2F0b2xvZ2ljYWxcXG5zY2F0b2xvZ3kvTVxcbnNjYXR0ZWRcXG5zY2F0dGVyL0dKU01EXFxuc2NhdHRlcmJyYWluL1NNRFxcbnNjYXR0ZXJpbmcvTVxcbnNjYXR0ZXJzaG90XFxuc2NhdHRpbmdcXG5zY2F0dHlcXG5zY2F2ZW5nZS9aR0RSU1xcbnNjYXZlbmdlci9NXFxuc2NlbmFyaW8vTVNcXG5zY2VuYXJpc3QvTVNcXG5zY2VuZS9NU1xcbnNjZW5lcnkvTVxcbnNjZW5pY1xcbnNjZW5pY2FsbHlcXG5zY2VudC9DTVNcXG5zY2VudGVkL1VcXG5zY2VudGluZ1xcbnNjZW50bGVzc1xcbnNjZXB0ZXIvTVNcXG5zY2hcXG5zY2hhZGVuZnJldWRlXFxuc2NoZWR1bGUnc1xcbnNjaGVkdWxlL0FEU0dcXG5zY2hlZHVsZWQvVVxcbnNjaGVkdWxlci9TXFxuc2NoZW1hXFxuc2NoZW1hdGFcXG5zY2hlbWF0aWMvU01cXG5zY2hlbWF0aWNhbGx5XFxuc2NoZW1hdGl6ZS9HRFNcXG5zY2hlbWUvRFJTTVpHXFxuc2NoZW1lci9NXFxuc2NoZXJ6by9NU1xcbnNjaGlsbGluZy9NU1xcbnNjaGlzbS9TTVxcbnNjaGlzbWF0aWMvU01cXG5zY2hpc3QvTVxcbnNjaGlzdG9zb21pYXNpc1xcbnNjaGl6by9TTVxcbnNjaGl6b2lkL01TXFxuc2NoaXpvcGhyZW5pYS9NXFxuc2NoaXpvcGhyZW5pYy9TTVxcbnNjaGxlbWllbC9TTVxcbnNjaGxlcC9TTVxcbnNjaGxlcHBlZFxcbnNjaGxlcHBpbmdcXG5zY2hsb2NrL01cXG5zY2htYWx0ei9NXFxuc2NobWFsdHp5L1RSXFxuc2NobW8vTVxcbnNjaG1vZXNcXG5zY2htb296ZS9EUlNaR1xcbnNjaG11Y2svTVNcXG5zY2huYXBwcy9NXFxuc2NobmF1emVyL1NNXFxuc2Nobml0emVsL1NNXFxuc2Nobm9vay9NU1xcbnNjaG5vei9NU1xcbnNjaG5venpsZS9TTVxcbnNjaG9sYXIvTVlTXFxuc2Nob2xhcnNoaXAvTVNcXG5zY2hvbGFzdGljXFxuc2Nob2xhc3RpY2FsbHlcXG5zY2hvbGFzdGljaXNtXFxuc2Nob29sL1NHTURcXG5zY2hvb2xiYWcvTVNcXG5zY2hvb2xib29rL1NNXFxuc2Nob29sYm95L01TXFxuc2Nob29sY2hpbGQvTVxcbnNjaG9vbGNoaWxkcmVuL01cXG5zY2hvb2xkYXlzXFxuc2Nob29sZWQvVVxcbnNjaG9vbGZlbGxvdy9TTVxcbnNjaG9vbGdpcmwvU01cXG5zY2hvb2xob3VzZS9TTVxcbnNjaG9vbGluZy9NXFxuc2Nob29sa2lkL1NcXG5zY2hvb2xtYXJtL1NNXFxuc2Nob29sbWFybWlzaFxcbnNjaG9vbG1hc3Rlci9NU1xcbnNjaG9vbG1hdGUvU01cXG5zY2hvb2xtaXN0cmVzcy9NU1xcbnNjaG9vbHJvb20vU01cXG5zY2hvb2x0ZWFjaGVyL01TXFxuc2Nob29sd29yay9NXFxuc2Nob29seWFyZC9TTVxcbnNjaG9vbmVyL1NNXFxuc2NodXNzL0dNRFNcXG5zY2h1c3Nib29tZXIvTVNcXG5zY2h3YS9NU1xcbnNjaVxcbnNjaWF0aWNcXG5zY2lhdGljYS9NXFxuc2NpZW5jZS9GTVNcXG5zY2llbnRpZmljL1VcXG5zY2llbnRpZmljYWxseS9VXFxuc2NpZW50aXN0L1NNXFxuc2NpbWl0YXIvU01cXG5zY2ludGlsbGEvTVNcXG5zY2ludGlsbGF0ZS9EU0dOXFxuc2NpbnRpbGxhdGlvbi9NXFxuc2Npb24vTVNcXG5zY2lzc29yL0dEU1xcbnNjbGVyb3Nlc1xcbnNjbGVyb3Npcy9NXFxuc2NsZXJvdGljXFxuc2NvZmYvTURSU1pHXFxuc2NvZmZlci9NXFxuc2NvZmZsYXcvTVNcXG5zY29sZC9NRFNHSlxcbnNjb2xkaW5nL01cXG5zY29saW9zaXMvTVxcbnNjb25jZS9TTVxcbnNjb25lL01TXFxuc2Nvb3AvTURTR1xcbnNjb29wZnVsL01TXFxuc2Nvb3QvRFJTWkdcXG5zY29vdGVyL01cXG5zY29wZS9NR0RTXFxuc2NvcmJ1dGljXFxuc2NvcmNoL01EUlNaR1xcbnNjb3JjaGVyL01cXG5zY29yZS9NWkdEUlNcXG5zY29yZWJvYXJkL1NNXFxuc2NvcmVjYXJkL01TXFxuc2NvcmVrZWVwZXIvTVNcXG5zY29yZWxlc3NcXG5zY29yZWxpbmUvU1xcbnNjb3Jlci9NXFxuc2Nvcm4vTURSU1pHXFxuc2Nvcm5lci9NXFxuc2Nvcm5mdWwvWVxcbnNjb3JwaW9uL01TXFxuc2NvdGNoL01EU0dcXG5zY290Y2hzXFxuc2NvdW5kcmVsL01TXFxuc2NvdXIvRFJTWkdcXG5zY291cmVyL01cXG5zY291cmdlL0RTTUdcXG5zY291dC9NRFJTWkdcXG5zY291dGluZy9NXFxuc2NvdXRtYXN0ZXIvTVNcXG5zY293L01TXFxuc2Nvd2wvTURTR1xcbnNjcmFiYmxlL01aR0RSU1xcbnNjcmFiYmxlci9NXFxuc2NyYWcvTVNcXG5zY3JhZ2dseS9SVFxcbnNjcmFnZ3kvVFJcXG5zY3JhbS9TXFxuc2NyYW1ibGUnc1xcbnNjcmFtYmxlL1VHRFNcXG5zY3JhbWJsZXIvTVNcXG5zY3JhbW1lZFxcbnNjcmFtbWluZ1xcbnNjcmFwL01EUlNaR0pcXG5zY3JhcGJvb2svU01cXG5zY3JhcGUvU01cXG5zY3JhcGVyL01cXG5zY3JhcGhlYXAvU01cXG5zY3JhcGllXFxuc2NyYXBwZWRcXG5zY3JhcHBlci9NU1xcbnNjcmFwcGluZ1xcbnNjcmFwcHkvVFJcXG5zY3JhcHlhcmQvU01cXG5zY3JhdGNoL0dNRFNcXG5zY3JhdGNoY2FyZC9TXFxuc2NyYXRjaGVkL1VcXG5zY3JhdGNoaWx5XFxuc2NyYXRjaGluZXNzL01cXG5zY3JhdGNocGFkL1NcXG5zY3JhdGNoeS9QUlRcXG5zY3Jhd2wvU01ER1xcbnNjcmF3bHlcXG5zY3Jhd25pbmVzcy9NXFxuc2NyYXdueS9QVFJcXG5zY3JlYW0vU01EUlpHXFxuc2NyZWFtZXIvTVxcbnNjcmVhbWluZy9ZXFxuc2NyZWUvTURTXFxuc2NyZWVjaC9HTURTXFxuc2NyZWVjaHkvVFJcXG5zY3JlZWQvU1xcbnNjcmVlbi9TSk1ER1xcbnNjcmVlbmluZy9NXFxuc2NyZWVucGxheS9TTVxcbnNjcmVlbnNhdmVyL1NNXFxuc2NyZWVuc2hvdC9TXFxuc2NyZWVud3JpdGVyL1NNXFxuc2NyZWVud3JpdGluZy9NXFxuc2NyZXcnc1xcbnNjcmV3L1VEU0dcXG5zY3Jld2JhbGwvTVNcXG5zY3Jld2RyaXZlci9NU1xcbnNjcmV3aW5lc3MvTVxcbnNjcmV3d29ybS9TTVxcbnNjcmV3eS9QUlRcXG5zY3JpYmFsXFxuc2NyaWJibGUvTVpHRFJTXFxuc2NyaWJibGVyL01cXG5zY3JpYmUnc1xcbnNjcmliZS9DS0lTXFxuc2NyaW0vTVNcXG5zY3JpbW1hZ2UvTUdEU1xcbnNjcmltcC9TREdcXG5zY3JpbXNoYXcvTURHU1xcbnNjcmlwL01TXFxuc2NyaXB0L0ZTTURHXFxuc2NyaXB0ZWQvVVxcbnNjcmlwdHVyYWxcXG5zY3JpcHR1cmUvTVNcXG5zY3JpcHR3cml0ZXIvU01cXG5zY3JpdmVuZXIvU01cXG5zY3JvZC9NXFxuc2Nyb2Z1bGEvTVxcbnNjcm9mdWxvdXNcXG5zY3JvZy9TXFxuc2Nyb2xsL0dTTURcXG5zY3Jvb2dlL01TXFxuc2Nyb3RhXFxuc2Nyb3RhbFxcbnNjcm90dW0vTVxcbnNjcm91bmdlL0RSU1pHXFxuc2Nyb3VuZ2VyL01cXG5zY3JvdW5neS9UUlxcbnNjcnViL01TXFxuc2NydWJiZWRcXG5zY3J1YmJlci9TTVxcbnNjcnViYmluZ1xcbnNjcnViYnkvUlRcXG5zY3J1ZmYvU01cXG5zY3J1ZmZpbHlcXG5zY3J1ZmZpbmVzcy9NXFxuc2NydWZmeS9SUFRcXG5zY3J1bS9TXFxuc2NydW1oYWxmXFxuc2NydW1oYWx2ZXNcXG5zY3J1bW1hZ2UvU1xcbnNjcnVtbWVkXFxuc2NydW1taW5nXFxuc2NydW1wL1NHRFxcbnNjcnVtcHRpb3VzL1lcXG5zY3J1bXB5XFxuc2NydW5jaC9NRFNHXFxuc2NydW5jaHkvU01cXG5zY3J1cGxlL01HRFNcXG5zY3J1cHVsb3NpdHkvTVxcbnNjcnVwdWxvdXMvVVBZXFxuc2NydXB1bG91c25lc3MvVU1cXG5zY3J1dGluZWVyL1NcXG5zY3J1dGluaXplL0dEU1xcbnNjcnV0aW55L01cXG5zY3ViYS9NRFNHXFxuc2N1ZC9NU1xcbnNjdWRkZWRcXG5zY3VkZGluZ1xcbnNjdWZmL01EU0dcXG5zY3VmZmxlL01HRFNcXG5zY3VsbC9NRFJTWkdcXG5zY3VsbGVyL01cXG5zY3VsbGVyeS9TTVxcbnNjdWxsaW9uL1NNXFxuc2N1bHB0L1NHRFxcbnNjdWxwdG9yL1NNXFxuc2N1bHB0cmVzcy9NU1xcbnNjdWxwdHVyYWxcXG5zY3VscHR1cmUvRFNNR1xcbnNjdW0vTVNcXG5zY3VtYmFnL01TXFxuc2N1bW1lZFxcbnNjdW1taW5nXFxuc2N1bW15L1RSXFxuc2N1cHBlci9NREdTXFxuc2N1cmYvTVxcbnNjdXJmeVxcbnNjdXJyaWxpdHkvTVxcbnNjdXJyaWxvdXMvUFlcXG5zY3Vycmlsb3VzbmVzcy9NXFxuc2N1cnJ5L0dEU01cXG5zY3VydmlseVxcbnNjdXJ2eS9UUk1cXG5zY3V0Y2hlb24vU01cXG5zY3V0dGxlL01HRFNcXG5zY3V0dGxlYnV0dC9NXFxuc2N1enp5L1RSXFxuc2N5dGhlL0RTTUdcXG5zZWEvU01cXG5zZWFiZWQvU01cXG5zZWFiaXJkL01TXFxuc2VhYm9hcmQvU01cXG5zZWFib3JuZVxcbnNlYWNvYXN0L1NNXFxuc2VhZmFyZXIvU01cXG5zZWFmYXJpbmcvTVxcbnNlYWZsb29yL1NNXFxuc2VhZm9vZC9NXFxuc2VhZnJvbnQvU01cXG5zZWFnb2luZ1xcbnNlYWd1bGwvTVNcXG5zZWFob3JzZS9NU1xcbnNlYWwnc1xcbnNlYWwvQVVTREdcXG5zZWFsYW50L01TXFxuc2VhbGVyL1NNXFxuc2VhbHNraW4vTVxcbnNlYW0vR01ETlNcXG5zZWFtYW4vTVxcbnNlYW1hbnNoaXAvTVxcbnNlYW1sZXNzL1lcXG5zZWFtb3VudC9NU1xcbnNlYW1zdHJlc3MvTVNcXG5zZWFteS9SVFxcbnNlYW5jZS9TTVxcbnNlYXBsYW5lL1NNXFxuc2VhcG9ydC9NU1xcbnNlYXIvR01EU1xcbnNlYXJjaC9BWkdNRFJTXFxuc2VhcmNoYWJsZS9VXFxuc2VhcmNoZXIvQU1cXG5zZWFyY2hpbmcvWVxcbnNlYXJjaGxpZ2h0L01TXFxuc2VhcmluZy9ZXFxuc2Vhc2NhcGUvU01cXG5zZWFzaGVsbC9TTVxcbnNlYXNob3JlL1NNXFxuc2Vhc2ljay9QXFxuc2Vhc2lja25lc3MvTVxcbnNlYXNpZGUvTVNcXG5zZWFzb24vU0dNREJKXFxuc2Vhc29uYWJsZS9VXFxuc2Vhc29uYWJseS9VXFxuc2Vhc29uYWwvWVxcbnNlYXNvbmFsaXR5XFxuc2Vhc29uZWQvVVxcbnNlYXNvbmluZy9NXFxuc2VhdCdzXFxuc2VhdC9VR0RTXFxuc2VhdGluZy9NXFxuc2VhdG1hdGUvU01cXG5zZWF3YWxsL01TXFxuc2Vhd2FyZC9NU1xcbnNlYXdhdGVyL01cXG5zZWF3YXkvU01cXG5zZWF3ZWVkL01TXFxuc2Vhd29ydGhpbmVzcy9NXFxuc2Vhd29ydGh5L1BcXG5zZWJhY2VvdXNcXG5zZWJvcnJoZWEvTVxcbnNlYnVtXFxuc2VjJ3lcXG5zZWMvU01cXG5zZWNhbnQvU01cXG5zZWNhdGV1cnNcXG5zZWNlZGUvRFNHXFxuc2VjZXNzaW9uL01cXG5zZWNlc3Npb25pc3QvTVNcXG5zZWNsdWRlL0dEU1xcbnNlY2x1c2lvbi9NXFxuc2VjbHVzaXZlXFxuc2Vjb25kL1NMWkdNRFJZXFxuc2Vjb25kYXJpbHlcXG5zZWNvbmRhcnkvU01cXG5zZWNvbmRlci9NXFxuc2Vjb25kaGFuZFxcbnNlY29uZG1lbnQvU1xcbnNlY3JlY3kvTVxcbnNlY3JldC9TR1ZNRFlcXG5zZWNyZXRhcmlhbFxcbnNlY3JldGFyaWF0L01TXFxuc2VjcmV0YXJ5L1NNXFxuc2VjcmV0YXJ5c2hpcC9NXFxuc2VjcmV0ZS9YTlNcXG5zZWNyZXRpb24vTVxcbnNlY3JldGl2ZS9QWVxcbnNlY3JldGl2ZW5lc3MvTVxcbnNlY3JldG9yeVxcbnNlY3QvSU1TXFxuc2VjdGFyaWFuL01TXFxuc2VjdGFyaWFuaXNtL01cXG5zZWN0YXJ5L1NNXFxuc2VjdGlvbi9BRVNNXFxuc2VjdGlvbmFsL01TXFxuc2VjdGlvbmFsaXNtL01cXG5zZWN0aW9uZWRcXG5zZWN0aW9uaW5nXFxuc2VjdG9yL0VTTVxcbnNlY3VsYXJcXG5zZWN1bGFyaXNtL01cXG5zZWN1bGFyaXN0L1NNXFxuc2VjdWxhcml6YXRpb24vTVxcbnNlY3VsYXJpemUvRFNHXFxuc2VjdXJlL0RSU1lUR1xcbnNlY3VyZWQvVVxcbnNlY3VyaXR5L0lTTVxcbnNlY3lcXG5zZWRhbi9NU1xcbnNlZGF0ZS9EUlNZVEdOVlBcXG5zZWRhdGVuZXNzL01cXG5zZWRhdGlvbi9NXFxuc2VkYXRpdmUvU01cXG5zZWRlbnRhcnlcXG5zZWRnZS9NXFxuc2VkZ3lcXG5zZWRpbWVudC9NU1xcbnNlZGltZW50YXJ5XFxuc2VkaW1lbnRhdGlvbi9NXFxuc2VkaXRpb24vTVxcbnNlZGl0aW91c1xcbnNlZHVjZS9EUlNaR1xcbnNlZHVjZXIvTVxcbnNlZHVjdGlvbi9TTVxcbnNlZHVjdGl2ZS9ZUFxcbnNlZHVjdGl2ZW5lc3MvTVxcbnNlZHVjdHJlc3MvTVNcXG5zZWR1bG91cy9ZXFxuc2VlL1JTTVpcXG5zZWVkJ3NcXG5zZWVkL0FHRFNcXG5zZWVkYmVkL01TXFxuc2VlZGNhc2UvTVNcXG5zZWVkZWQvVVxcbnNlZWRlci9TTVxcbnNlZWRpbmVzcy9NXFxuc2VlZGxlc3NcXG5zZWVkbGluZy9NU1xcbnNlZWRwb2QvTVNcXG5zZWVkeS9SUFRcXG5zZWVpbmcvU1xcbnNlZWsvWkdSU1xcbnNlZWtlci9NXFxuc2VlbS9HRFNcXG5zZWVtaW5nL1lcXG5zZWVtbGluZXNzL1VNXFxuc2VlbWx5L1VSVFBcXG5zZWVuL1VcXG5zZWVwL0dEU1xcbnNlZXBhZ2UvTVxcbnNlZXIvTVxcbnNlZXJzdWNrZXIvTVxcbnNlZXNhdy9TTURHXFxuc2VldGhlL0RTR1xcbnNlZ2ZhdWx0L1NcXG5zZWdtZW50L0dTTURcXG5zZWdtZW50YXRpb24vTVxcbnNlZ21lbnRlZC9VXFxuc2VncmVnYXRlL0NEU0dOXFxuc2VncmVnYXRlZC9VXFxuc2VncmVnYXRpb24vQ01cXG5zZWdyZWdhdGlvbmlzdC9NU1xcbnNlZ3VlL01HRFNcXG5zZWd1ZWluZ1xcbnNlaWduZXVyL1NNXFxuc2VpZ25pb3IvU01cXG5zZWluZS9NWkdEUlNcXG5zZWluZXIvTVxcbnNlaXNtaWNcXG5zZWlzbWljYWxseVxcbnNlaXNtb2dyYXBoL1pNUlxcbnNlaXNtb2dyYXBoZXIvTVxcbnNlaXNtb2dyYXBoaWNcXG5zZWlzbW9ncmFwaHNcXG5zZWlzbW9ncmFwaHkvTVxcbnNlaXNtb2xvZ2ljXFxuc2Vpc21vbG9naWNhbFxcbnNlaXNtb2xvZ2lzdC9NU1xcbnNlaXNtb2xvZ3kvTVxcbnNlaXplL0dEU1xcbnNlaXp1cmUvTVNcXG5zZWxkb21cXG5zZWxlY3QvQ1NHVkRcXG5zZWxlY3Rpb24vU01cXG5zZWxlY3RpdmUvWVxcbnNlbGVjdGl2aXR5L01cXG5zZWxlY3RtYW4vTVxcbnNlbGVjdG1lblxcbnNlbGVjdG5lc3MvTVxcbnNlbGVjdG9yL01TXFxuc2VsZW5pdW0vTVxcbnNlbGVub2dyYXBoZXIvTVNcXG5zZWxlbm9ncmFwaHkvTVxcbnNlbGYvTVxcbnNlbGZpZS9TTVxcbnNlbGZpc2gvVVlQXFxuc2VsZmlzaG5lc3MvVU1cXG5zZWxmbGVzcy9QWVxcbnNlbGZsZXNzbmVzcy9NXFxuc2VsZnNhbWVcXG5zZWxsJ3NcXG5zZWxsL0FaR1JTXFxuc2VsbGVyJ3NcXG5zZWxsb2ZmL01TXFxuc2VsbG90YXBlL0RTR1xcbnNlbGxvdXQvTVNcXG5zZWx0emVyL01TXFxuc2VsdmFnZS9NU1xcbnNlbHZlc1xcbnNlbWFudGljL1NcXG5zZW1hbnRpY2FsbHlcXG5zZW1hbnRpY2lzdC9NU1xcbnNlbWFudGljcy9NXFxuc2VtYXBob3JlL0RTTUdcXG5zZW1ibGFuY2UvQVNNXFxuc2VtZW4vTVxcbnNlbWVzdGVyL1NNXFxuc2VtaS9NU1xcbnNlbWlhbm51YWwvWVxcbnNlbWlhcmlkXFxuc2VtaWF1dG9tYXRpYy9NU1xcbnNlbWlicmV2ZS9TXFxuc2VtaWNpcmNsZS9TTVxcbnNlbWljaXJjdWxhclxcbnNlbWljb2xvbi9NU1xcbnNlbWljb25kdWN0aW5nXFxuc2VtaWNvbmR1Y3Rvci9NU1xcbnNlbWljb25zY2lvdXNcXG5zZW1pZGFya25lc3MvTVxcbnNlbWlkZXRhY2hlZFxcbnNlbWlmaW5hbC9TTVxcbnNlbWlmaW5hbGlzdC9NU1xcbnNlbWlnbG9zcy9TXFxuc2VtaW1vbnRobHkvU01cXG5zZW1pbmFsXFxuc2VtaW5hci9NU1xcbnNlbWluYXJpYW4vU01cXG5zZW1pbmFyeS9TTVxcbnNlbWlvZmZpY2lhbFxcbnNlbWlvdGljL1NcXG5zZW1pb3RpY3MvTVxcbnNlbWlwZXJtZWFibGVcXG5zZW1pcHJlY2lvdXNcXG5zZW1pcHJpdmF0ZVxcbnNlbWlwcm8vU1xcbnNlbWlwcm9mZXNzaW9uYWwvU01cXG5zZW1pcXVhdmVyL1NcXG5zZW1pcmV0aXJlZFxcbnNlbWlza2lsbGVkXFxuc2VtaXNvbGlkXFxuc2VtaXN3ZWV0XFxuc2VtaXRvbmUvU01cXG5zZW1pdHJhaWxlci9NU1xcbnNlbWl0cmFuc3BhcmVudFxcbnNlbWl0cm9waWNhbFxcbnNlbWl2b3dlbC9TTVxcbnNlbWl3ZWVrbHkvU01cXG5zZW1peWVhcmx5XFxuc2Vtb2xpbmEvTVxcbnNlbXBzdHJlc3MvTVNcXG5zZW5hdGUvU01cXG5zZW5hdG9yL01TXFxuc2VuYXRvcmlhbFxcbnNlbmQvWkdSU1xcbnNlbmRlci9NXFxuc2VuZG9mZi9NU1xcbnNlbmVzY2VuY2UvTVxcbnNlbmVzY2VudFxcbnNlbmlsZVxcbnNlbmlsaXR5L01cXG5zZW5pb3IvU01cXG5zZW5pb3JpdHkvTVxcbnNlbm5hL01cXG5zZW5vci9NU1xcbnNlbm9yYS9TTVxcbnNlbm9yaXRhL1NNXFxuc2Vuc2F0aW9uL01TXFxuc2Vuc2F0aW9uYWwvWVxcbnNlbnNhdGlvbmFsaXNtL01cXG5zZW5zYXRpb25hbGlzdC9NU1xcbnNlbnNhdGlvbmFsaXplL0dEU1xcbnNlbnNlL01HRFNcXG5zZW5zZWxlc3MvUFlcXG5zZW5zZWxlc3NuZXNzL01cXG5zZW5zaWJpbGl0aWVzXFxuc2Vuc2liaWxpdHkvSU1cXG5zZW5zaWJsZS9QXFxuc2Vuc2libGVuZXNzL01cXG5zZW5zaWJseS9JXFxuc2Vuc2l0aXZlL1NNWVBcXG5zZW5zaXRpdmVuZXNzL01cXG5zZW5zaXRpdml0aWVzXFxuc2Vuc2l0aXZpdHkvSU1cXG5zZW5zaXRpemF0aW9uL0NNXFxuc2Vuc2l0aXplL0NEU0dcXG5zZW5zb3IvU01cXG5zZW5zb3J5XFxuc2Vuc3VhbC9ZXFxuc2Vuc3VhbGlzdC9TTVxcbnNlbnN1YWxpdHkvTVxcbnNlbnN1b3VzL1lQXFxuc2Vuc3VvdXNuZXNzL01cXG5zZW50L0ZBVVxcbnNlbnRlbmNlL01HRFNcXG5zZW50ZW50aW91cy9ZXFxuc2VudGllbmNlL0lNXFxuc2VudGllbnQvSVxcbnNlbnRpbWVudC9TTVxcbnNlbnRpbWVudGFsL1lcXG5zZW50aW1lbnRhbGlzbS9NXFxuc2VudGltZW50YWxpc3QvTVNcXG5zZW50aW1lbnRhbGl0eS9NXFxuc2VudGltZW50YWxpemF0aW9uL01cXG5zZW50aW1lbnRhbGl6ZS9HRFNcXG5zZW50aW5lbC9NU1xcbnNlbnRyeS9TTVxcbnNlcGFsL01TXFxuc2VwYXJhYmlsaXR5L0lNXFxuc2VwYXJhYmxlXFxuc2VwYXJhYmx5L0lcXG5zZXBhcmF0ZS9YTVlHTlZEU1BcXG5zZXBhcmF0ZW5lc3MvTVxcbnNlcGFyYXRpb24vTVxcbnNlcGFyYXRpc20vTVxcbnNlcGFyYXRpc3QvTVNcXG5zZXBhcmF0b3IvTVNcXG5zZXBpYS9NXFxuc2Vwc2lzL01cXG5zZXB0YVxcbnNlcHRhbFxcbnNlcHRldC9TTVxcbnNlcHRpY1xcbnNlcHRpY2VtaWEvTVxcbnNlcHRpY2VtaWNcXG5zZXB0dWFnZW5hcmlhbi9NU1xcbnNlcHR1bS9NXFxuc2VwdWxjaGVyL0dNRFNcXG5zZXB1bGNocmFsXFxuc2VxXFxuc2VxdWVsL1NNXFxuc2VxdWVuY2UvTVpHRFJTXFxuc2VxdWVuY2luZy9NXFxuc2VxdWVudGlhbC9GWVxcbnNlcXVlc3Rlci9TREdcXG5zZXF1ZXN0cmF0ZS9YR05EU1xcbnNlcXVlc3RyYXRpb24vTVxcbnNlcXVpbi9TTURcXG5zZXF1aW5uZWRcXG5zZXF1aXR1clxcbnNlcXVvaWEvTVNcXG5zZXJhZ2xpby9NU1xcbnNlcmFwZS9TTVxcbnNlcmFwaC9NXFxuc2VyYXBoaWNcXG5zZXJhcGhzXFxuc2VyZS9UUlxcbnNlcmVuYWRlL01HRFNcXG5zZXJlbmRpcGl0b3VzXFxuc2VyZW5kaXBpdHkvTVxcbnNlcmVuZS9SUFlUXFxuc2VyZW5lbmVzcy9NXFxuc2VyZW5pdHkvTVxcbnNlcmYvTVNcXG5zZXJmZG9tL01cXG5zZXJnZS9NXFxuc2VyZ2VhbnQvTVNcXG5zZXJpYWwvU01ZXFxuc2VyaWFsaXphdGlvbi9TTVxcbnNlcmlhbGl6ZS9HRFNCXFxuc2VyaWVzL01cXG5zZXJpZi9NU1xcbnNlcmlncmFwaC9NXFxuc2VyaWdyYXBoc1xcbnNlcmluZVxcbnNlcmlvdXMvUFlcXG5zZXJpb3VzbmVzcy9NXFxuc2VybW9uL1NNXFxuc2VybW9uaXplL0dEU1xcbnNlcm9sb2d5L01cXG5zZXJvdG9uaW5cXG5zZXJvdXNcXG5zZXJwZW50L01TXFxuc2VycGVudGluZS9NXFxuc2VycmF0ZS9YTkRcXG5zZXJyYXRpb24vTVxcbnNlcnJpZWRcXG5zZXJ1bS9NU1xcbnNlcnZhbnQvTVNcXG5zZXJ2ZSdzL0FGXFxuc2VydmUvRkFDR0RTXFxuc2VydmVyL1NNXFxuc2VydmVyeS9TXFxuc2VydmljZS9FTVNcXG5zZXJ2aWNlYWJpbGl0eS9NXFxuc2VydmljZWFibGVcXG5zZXJ2aWNlZFxcbnNlcnZpY2VtYW4vTVxcbnNlcnZpY2VtZW5cXG5zZXJ2aWNld29tYW4vTVxcbnNlcnZpY2V3b21lblxcbnNlcnZpY2luZ1xcbnNlcnZpZXR0ZS9NU1xcbnNlcnZpbGVcXG5zZXJ2aWxpdHkvTVxcbnNlcnZpbmcnc1xcbnNlcnZpbmdzXFxuc2Vydml0b3IvTVNcXG5zZXJ2aXR1ZGUvTVxcbnNlcnZvL01TXFxuc2Vydm9tZWNoYW5pc20vU01cXG5zZXJ2b21vdG9yL01TXFxuc2VzYW1lL1NNXFxuc2VzcXVpY2VudGVubmlhbC9NU1xcbnNlc3Npb24vTVNcXG5zZXQvQUlTTVxcbnNldGJhY2svTVNcXG5zZXRzY3Jldy9TTVxcbnNldHNxdWFyZS9TXFxuc2V0dC9CSlpHUlNcXG5zZXR0ZWUvTVNcXG5zZXR0ZXIvTVxcbnNldHRpbmcvTVxcbnNldHRsZSdzXFxuc2V0dGxlL0FVR0RTXFxuc2V0dGxlbWVudC9BTVxcbnNldHRsZW1lbnRzXFxuc2V0dGxlci9TTVxcbnNldHVwL01TXFxuc2V2ZW4vTUhTXFxuc2V2ZW50ZWVuL1NNSFxcbnNldmVudGVlbnRoL01cXG5zZXZlbnRlZW50aHNcXG5zZXZlbnRoL01cXG5zZXZlbnRoc1xcbnNldmVudGlldGgvTVxcbnNldmVudGlldGhzXFxuc2V2ZW50eS9TTUhcXG5zZXZlci9FVEdEU1xcbnNldmVyYWwvTVlcXG5zZXZlcmFuY2UvU01cXG5zZXZlcmUvWVBSXFxuc2V2ZXJlbmVzcy9NXFxuc2V2ZXJpdHkvTVxcbnNldy9BU0dEXFxuc2V3YWdlL01cXG5zZXdlci9NU1xcbnNld2VyYWdlL01cXG5zZXdpbmcvTVxcbnNld24vQVxcbnNleC9HTURTXFxuc2V4YWdlbmFyaWFuL1NNXFxuc2V4aWx5XFxuc2V4aW5lc3MvTVxcbnNleGlzbS9NXFxuc2V4aXN0L01TXFxuc2V4bGVzc1xcbnNleG9sb2dpc3QvU01cXG5zZXhvbG9neS9NXFxuc2V4cG90L01TXFxuc2V4dGFudC9TTVxcbnNleHRldC9NU1xcbnNleHRpbmdcXG5zZXh0b24vTVNcXG5zZXh0dXBsZXQvU01cXG5zZXh1YWwvWVxcbnNleHVhbGl0eS9NXFxuc2V4eS9QVFJcXG5zZlxcbnNoXFxuc2hhYmJpbHlcXG5zaGFiYmluZXNzL01cXG5zaGFiYnkvUFRSXFxuc2hhY2svTURTR1xcbnNoYWNrbGUnc1xcbnNoYWNrbGUvVUdEU1xcbnNoYWQvR01EU0pcXG5zaGFkZS9NU1xcbnNoYWRpbHlcXG5zaGFkaW5lc3MvTVxcbnNoYWRpbmcvTVxcbnNoYWRvdy9TR01EXFxuc2hhZG93Ym94L0dEU1xcbnNoYWRvd3kvUlRcXG5zaGFkeS9SUFRcXG5zaGFmdC9NRFNHXFxuc2hhZy9NU1xcbnNoYWdnZWRcXG5zaGFnZ2luZXNzL01cXG5zaGFnZ2luZ1xcbnNoYWdneS9UUFJcXG5zaGFoL01cXG5zaGFoc1xcbnNoYWtlL01aR1JTXFxuc2hha2Vkb3duL1NNXFxuc2hha2VuL1VcXG5zaGFrZW91dC9NU1xcbnNoYWtlci9NXFxuc2hha2V1cC9NU1xcbnNoYWtpbHlcXG5zaGFraW5lc3MvTVxcbnNoYWt5L1JQVFxcbnNoYWxlL01cXG5zaGFsbFxcbnNoYWxsb3QvTVNcXG5zaGFsbG93L1RQTVJZU1xcbnNoYWxsb3duZXNzL01cXG5zaGFsb21cXG5zaGFsdFxcbnNoYW0vR01EU1xcbnNoYW1hbi9TTVxcbnNoYW1hbmljXFxuc2hhbWFuaXNtXFxuc2hhbWFuaXN0aWNcXG5zaGFtYmxlL01HRFNcXG5zaGFtYmxlcy9NXFxuc2hhbWJvbGljXFxuc2hhbWUvTVNcXG5zaGFtZWZhY2VkL1lcXG5zaGFtZWZ1bC9QWVxcbnNoYW1lZnVsbmVzcy9NXFxuc2hhbWVsZXNzL1lQXFxuc2hhbWVsZXNzbmVzcy9NXFxuc2hhbW1lZFxcbnNoYW1taW5nXFxuc2hhbXBvby9aR01EUlNcXG5zaGFtcG9vZXIvTVxcbnNoYW1yb2NrL01TXFxuc2hhbid0XFxuc2hhbmR5L1NcXG5zaGFuZ2hhaS9EU0dcXG5zaGFuay9NU1xcbnNoYW50dW5nL01cXG5zaGFudHkvU01cXG5zaGFudHl0b3duL1NNXFxuc2hhcGUnc1xcbnNoYXBlL0FHRFNcXG5zaGFwZWQvVVxcbnNoYXBlbGVzcy9ZUFxcbnNoYXBlbGVzc25lc3MvTVxcbnNoYXBlbGluZXNzL01cXG5zaGFwZWx5L1BUUlxcbnNoYXJkL01TXFxuc2hhcmUvTVpHRFJTXFxuc2hhcmVhYmxlXFxuc2hhcmVjcm9wL1NcXG5zaGFyZWNyb3BwZWRcXG5zaGFyZWNyb3BwZXIvTVNcXG5zaGFyZWNyb3BwaW5nXFxuc2hhcmVob2xkZXIvU01cXG5zaGFyZWhvbGRpbmcvU1xcbnNoYXJlci9NXFxuc2hhcmV3YXJlL01cXG5zaGFyaWEvTVxcbnNoYXJpYWhcXG5zaGFyay9NRFNHXFxuc2hhcmtza2luL01cXG5zaGFycC9NRE5SWVNQWFpUR1xcbnNoYXJwZW4vQURHU1xcbnNoYXJwZW5lci9NU1xcbnNoYXJwZXIvTVxcbnNoYXJwaWUvTVNcXG5zaGFycGlzaFxcbnNoYXJwbmVzcy9NXFxuc2hhcnBzaG9vdGVyL1NNXFxuc2hhcnBzaG9vdGluZy9NXFxuc2hhdHRlci9HTURTXFxuc2hhdHRlcnByb29mXFxuc2hhdmUvTVpHRFJTSlxcbnNoYXZlbi9VXFxuc2hhdmVyL01cXG5zaGF2aW5nL01cXG5zaGF3bC9NU1xcbnNoYXkvTVNcXG5zaGUnZFxcbnNoZSdsbFxcbnNoZS9EU01cXG5zaGVhZi9NXFxuc2hlYXIvTURSU1pHXFxuc2hlYXJlci9NXFxuc2hlYXRoL0pNXFxuc2hlYXRoZS9VR0RTXFxuc2hlYXRoaW5nL01cXG5zaGVhdGhzXFxuc2hlYXZlL0RTTUdcXG5zaGViYW5nL01TXFxuc2hlYmVlbi9TXFxuc2hlZC9NU1xcbnNoZWRkaW5nXFxuc2hlZW4vTVxcbnNoZWVueS9UUlxcbnNoZWVwL01cXG5zaGVlcGRvZy9NU1xcbnNoZWVwZm9sZC9TTVxcbnNoZWVwaGVyZGVyL01TXFxuc2hlZXBpc2gvWVBcXG5zaGVlcGlzaG5lc3MvTVxcbnNoZWVwc2tpbi9NU1xcbnNoZWVyL01EUlNQVEdcXG5zaGVlcm5lc3MvTVxcbnNoZWV0L01TR1xcbnNoZWV0aW5nL01cXG5zaGVldGxpa2VcXG5zaGVpa2RvbS9NU1xcbnNoZWlraC9NXFxuc2hlaWtoc1xcbnNoZWlsYS9TXFxuc2hla2VsL1NNXFxuc2hlbGYvTVxcbnNoZWxsL01EUlNHXFxuc2hlbGxhYy9NU1xcbnNoZWxsYWNrZWRcXG5zaGVsbGFja2luZy9NU1xcbnNoZWxsZmlyZS9NXFxuc2hlbGxmaXNoL01TXFxuc2hlbHRlci9HTURTXFxuc2hlbHZlL0dEU1xcbnNoZWx2aW5nL01cXG5zaGVuYW5pZ2FuL1NNXFxuc2hlcGhlcmQvU01ER1xcbnNoZXBoZXJkZXNzL01TXFxuc2hlcmJldC9TTVxcbnNoZXJpZmYvU01cXG5zaGVycnkvU01cXG5zaGV3L0dEU1xcbnNoZXduXFxuc2hoXFxuc2hpYXRzdS9NXFxuc2hpYmJvbGV0aC9NXFxuc2hpYmJvbGV0aHNcXG5zaGllbGQvTURHU1xcbnNoaWZ0L0dNRFNcXG5zaGlmdGlseVxcbnNoaWZ0aW5lc3MvTVxcbnNoaWZ0bGVzcy9QWVxcbnNoaWZ0bGVzc25lc3MvTVxcbnNoaWZ0eS9SUFRcXG5zaGlpdGFrZS9TTVxcbnNoaWxsL0dNRFNKXFxuc2hpbGxlbGFnaC9NXFxuc2hpbGxlbGFnaHNcXG5zaGlsbGluZy9NXFxuc2hpbS9NU1xcbnNoaW1tZWRcXG5zaGltbWVyL1NNREdcXG5zaGltbWVyeVxcbnNoaW1taW5nXFxuc2hpbW15L0RTTUdcXG5zaGluL1pHTURSU1xcbnNoaW5ib25lL1NNXFxuc2hpbmRpZy9TTVxcbnNoaW5lL01TXFxuc2hpbmVyL01cXG5zaGluZ2xlL0RTTUdcXG5zaGluZ3VhcmQvTVxcbnNoaW5pbmVzcy9NXFxuc2hpbm5lZFxcbnNoaW5uaW5nXFxuc2hpbm55L0RTR1xcbnNoaW5zcGxpbnRzL01cXG5zaGlueS9UUlBcXG5zaGlwJ3NcXG5zaGlwL0FMU1xcbnNoaXBib2FyZC9NU1xcbnNoaXBidWlsZGVyL1NNXFxuc2hpcGJ1aWxkaW5nL01cXG5zaGlwbG9hZC9TTVxcbnNoaXBtYXRlL1NNXFxuc2hpcG1lbnQvQU1cXG5zaGlwbWVudHNcXG5zaGlwb3duZXIvTVNcXG5zaGlwcGVkL0FcXG5zaGlwcGVyL1NNXFxuc2hpcHBpbmcvTVxcbnNoaXBzaGFwZVxcbnNoaXB3cmVjay9HTURTXFxuc2hpcHdyaWdodC9NU1xcbnNoaXB5YXJkL1NNXFxuc2hpcmUvTVNcXG5zaGlyay9aR0RSU1xcbnNoaXJrZXIvTVxcbnNoaXJyL0dNRFNKXFxuc2hpcnJpbmcvTVxcbnNoaXJ0L0dNRFNcXG5zaGlydGZyb250L1NNXFxuc2hpcnRpbmcvTVxcbnNoaXJ0bGVzc1xcbnNoaXJ0c2xlZXZlL1NNXFxuc2hpcnR0YWlsL1NNXFxuc2hpcnR3YWlzdC9NU1xcbnNoaXJ0eVxcbnNoaXQvU00hXFxuc2hpdGZhY2VkLyFcXG5zaGl0aGVhZC9TIVxcbnNoaXRsb2FkLyFcXG5zaGl0dGVkLyFcXG5zaGl0dGluZy8hXFxuc2hpdHR5L1JUIVxcbnNoaXYvWk1SU1xcbnNoaXZlci9NREdcXG5zaGl2ZXJ5XFxuc2hvYWwvR01EU1xcbnNob2F0L01TXFxuc2hvY2svWkdNRFJTXFxuc2hvY2tlci9NXFxuc2hvY2tpbmcvWVxcbnNob2NrcHJvb2ZcXG5zaG9kL1VcXG5zaG9kZGlseVxcbnNob2RkaW5lc3MvTVxcbnNob2RkeS9QUk1UXFxuc2hvZS9NU1xcbnNob2Vob3JuL0dNRFNcXG5zaG9laW5nXFxuc2hvZWxhY2UvTVNcXG5zaG9lbWFrZXIvU01cXG5zaG9lc2hpbmUvU01cXG5zaG9lc3RyaW5nL1NNXFxuc2hvZXRyZWUvTVNcXG5zaG9ndW4vTVNcXG5zaG9ndW5hdGUvTVxcbnNob25lXFxuc2hvby9HRFNcXG5zaG9va1xcbnNob290L1pHTVJTSlxcbnNob290ZXIvTVxcbnNob290aW5nL01cXG5zaG9vdG91dC9NU1xcbnNob3AvTVNcXG5zaG9wYWhvbGljL01TXFxuc2hvcGZpdHRlci9TXFxuc2hvcGZpdHRpbmdcXG5zaG9wZnJvbnQvU1xcbnNob3BrZWVwZXIvTVNcXG5zaG9wbGlmdC9EUlpHU1xcbnNob3BsaWZ0ZXIvTVxcbnNob3BsaWZ0aW5nL01cXG5zaG9wcGUvTVpHRFJTXFxuc2hvcHBlci9NXFxuc2hvcHBpbmcvTVxcbnNob3B0YWxrL01cXG5zaG9wd29yblxcbnNob3JlL01HRFNcXG5zaG9yZWJpcmQvU01cXG5zaG9yZWxpbmUvTVNcXG5zaG9yaW5nL01cXG5zaG9ydC9YVEdNRE5SWVNQXFxuc2hvcnRhZ2UvTVNcXG5zaG9ydGJyZWFkL01cXG5zaG9ydGNha2UvTVNcXG5zaG9ydGNoYW5nZS9EU0dcXG5zaG9ydGNvbWluZy9NU1xcbnNob3J0Y3J1c3RcXG5zaG9ydGN1dC9NU1xcbnNob3J0ZW4vSkdEXFxuc2hvcnRlbmluZy9NXFxuc2hvcnRmYWxsL01TXFxuc2hvcnRoYW5kL01EXFxuc2hvcnRob3JuL01TXFxuc2hvcnRpc2hcXG5zaG9ydGxpc3QvREdTXFxuc2hvcnRuZXNzL01cXG5zaG9ydHNpZ2h0ZWQvUFlcXG5zaG9ydHNpZ2h0ZWRuZXNzL01cXG5zaG9ydHN0b3AvTVNcXG5zaG9ydHdhdmUvTVNcXG5zaG9ydHkvU01cXG5zaG90L01TXFxuc2hvdGd1bi9TTVxcbnNob3RndW5uZWRcXG5zaG90Z3VubmluZ1xcbnNob3VsZFxcbnNob3VsZCd2ZVxcbnNob3VsZGVyL01ER1NcXG5zaG91bGRuJ3RcXG5zaG91dC9aR01EUlNcXG5zaG91dGVyL01cXG5zaG92ZS9NR0RTXFxuc2hvdmVsL01EU0dcXG5zaG92ZWxmdWwvU01cXG5zaG93L0paR01EUlNcXG5zaG93Yml6L01cXG5zaG93Ym9hdC9NREdTXFxuc2hvd2Nhc2UvTUdEU1xcbnNob3dkb3duL01TXFxuc2hvd2VyL01ER1xcbnNob3dlcnByb29mXFxuc2hvd2VyeVxcbnNob3dnaXJsL01TXFxuc2hvd2dyb3VuZC9TXFxuc2hvd2lseVxcbnNob3dpbmVzcy9NXFxuc2hvd2luZy9NXFxuc2hvd2p1bXBpbmdcXG5zaG93bWFuL01cXG5zaG93bWFuc2hpcC9NXFxuc2hvd21lblxcbnNob3duXFxuc2hvd29mZi9TTVxcbnNob3dwaWVjZS9TTVxcbnNob3dwbGFjZS9TTVxcbnNob3dyb29tL01TXFxuc2hvd3N0b3BwZXIvTVNcXG5zaG93c3RvcHBpbmdcXG5zaG93dGltZVxcbnNob3d5L1RSUFxcbnNocHRcXG5zaHJhbmtcXG5zaHJhcG5lbC9NXFxuc2hyZWQvTVNcXG5zaHJlZGRlZFxcbnNocmVkZGVyL01TXFxuc2hyZWRkaW5nXFxuc2hyZXcvTVNcXG5zaHJld2QvUllQVFxcbnNocmV3ZG5lc3MvTVxcbnNocmV3aXNoXFxuc2hyaWVrL01EU0dcXG5zaHJpZnQvTVxcbnNocmlrZS9NU1xcbnNocmlsbC9EUlNQVEdcXG5zaHJpbGxuZXNzL01cXG5zaHJpbGx5XFxuc2hyaW1wL01EUlNaR1xcbnNocmluZS9NU1xcbnNocmluay9NU0JHXFxuc2hyaW5rYWdlL01cXG5zaHJpdmUvR0RTXFxuc2hyaXZlbC9TR0RcXG5zaHJpdmVuXFxuc2hyb3VkL0dNRFNcXG5zaHJ1Yi9NU1xcbnNocnViYmVyeS9TTVxcbnNocnViYnkvUlRcXG5zaHJ1Zy9NU1xcbnNocnVnZ2VkXFxuc2hydWdnaW5nXFxuc2hydW5rL05cXG5zaHRpY2svTVNcXG5zaHVjay9HTURTXFxuc2h1Y2tzL1NcXG5zaHVkZGVyL01EU0dcXG5zaHVmZmxlL0FNR0RTXFxuc2h1ZmZsZWJvYXJkL1NNXFxuc2h1ZmZsZXIvU01cXG5zaHVuL1NcXG5zaHVubmVkXFxuc2h1bm5pbmdcXG5zaHVudC9NU0RHXFxuc2h1c2gvRFNHXFxuc2h1dC9TXFxuc2h1dGRvd24vU01cXG5zaHV0ZXllL01cXG5zaHV0b2ZmL1NNXFxuc2h1dG91dC9TTVxcbnNodXR0ZXIvU01ER1xcbnNodXR0ZXJidWcvTVNcXG5zaHV0dGluZ1xcbnNodXR0bGUvRFNNR1xcbnNodXR0bGVjb2NrL0dNRFNcXG5zaHkvVEdEUlNNWVxcbnNoeWVyXFxuc2h5ZXN0XFxuc2h5bmVzcy9NXFxuc2h5c3Rlci9TTVxcbnNpYmlsYW50L1NNXFxuc2libGluZy9TTVxcbnNpYnlsL01TXFxuc2lieWxsaW5lXFxuc2ljL1NcXG5zaWNjZWRcXG5zaWNjaW5nXFxuc2ljay9QWFRHRE5SWVNcXG5zaWNrYmF5L1NcXG5zaWNrYmVkL1NNXFxuc2lja2VuL0RHXFxuc2lja2VuaW5nL1lcXG5zaWNraWUvTVNcXG5zaWNraXNoXFxuc2lja2xlL01TXFxuc2lja2x5L1JUXFxuc2lja25lc3MvTVNcXG5zaWNrby9NU1xcbnNpY2tvdXQvU01cXG5zaWNrcm9vbS9NU1xcbnNpZGUnc1xcbnNpZGUvQUdEU1xcbnNpZGVhcm0vU01cXG5zaWRlYmFyL1NNXFxuc2lkZWJvYXJkL1NNXFxuc2lkZWJ1cm5zL01cXG5zaWRlY2FyL1NNXFxuc2lkZWtpY2svU01cXG5zaWRlbGlnaHQvTVNcXG5zaWRlbGluZS9EU01HXFxuc2lkZWxvbmdcXG5zaWRlbWFuL01cXG5zaWRlbWVuXFxuc2lkZXBpZWNlL01TXFxuc2lkZXJlYWxcXG5zaWRlc2FkZGxlL01TXFxuc2lkZXNob3cvTVNcXG5zaWRlc3BsaXR0aW5nXFxuc2lkZXN0ZXAvTVNcXG5zaWRlc3RlcHBlZFxcbnNpZGVzdGVwcGluZ1xcbnNpZGVzdHJva2UvRFNNR1xcbnNpZGVzd2lwZS9EU01HXFxuc2lkZXRyYWNrL1NNREdcXG5zaWRld2Fsay9NU1xcbnNpZGV3YWxsL01TXFxuc2lkZXdheXNcXG5zaWRld2luZGVyL1NNXFxuc2lkaW5nL01TXFxuc2lkbGUvTUdEU1xcbnNpZWdlL01TXFxuc2llbm5hL01cXG5zaWVycmEvTVNcXG5zaWVzdGEvTVNcXG5zaWV2ZS9NR0RTXFxuc2lmdC9aR0RSU1xcbnNpZnRlZC9VXFxuc2lmdGVyL01cXG5zaWdoL0dNRFxcbnNpZ2hzXFxuc2lnaHQvR01EWVNKXFxuc2lnaHRpbmcvTVxcbnNpZ2h0bGVzc1xcbnNpZ2h0bHkvVVRSXFxuc2lnaHRyZWFkXFxuc2lnaHRzZWVpbmcvTVxcbnNpZ2h0c2Vlci9NU1xcbnNpZ21hL01TXFxuc2lnbidzL0NcXG5zaWduL0FGQ0dEU1xcbnNpZ25hZ2UvTVxcbnNpZ25hbC9NRFJZU1pHXFxuc2lnbmFsZXIvTVxcbnNpZ25hbGl6YXRpb24vTVxcbnNpZ25hbGl6ZS9HRFNcXG5zaWduYWxtYW4vTVxcbnNpZ25hbG1lblxcbnNpZ25hdG9yeS9TTVxcbnNpZ25hdHVyZS9NU1xcbnNpZ25ib2FyZC9NU1xcbnNpZ25lZC9VXFxuc2lnbmVyL0NNU1xcbnNpZ25ldC9NU1xcbnNpZ25pZmljYW5jZS9JTVxcbnNpZ25pZmljYW50L0lZXFxuc2lnbmlmaWNhdGlvbi9NXFxuc2lnbmlmeS9YRFNOR1xcbnNpZ25pbmcncy9DXFxuc2lnbmluZ3NcXG5zaWdub3IvRk1TXFxuc2lnbm9yYS9TTVxcbnNpZ25vcmVcXG5zaWdub3JpXFxuc2lnbm9yaW5hL01TXFxuc2lnbm9yaW5lXFxuc2lnbnBvc3QvR1NNRFxcbnNpbGFnZS9NXFxuc2lsZW5jZS9EUlNNWkdcXG5zaWxlbmNlci9NXFxuc2lsZW50L01SWVNUXFxuc2lsaG91ZXR0ZS9EU01HXFxuc2lsaWNhL01cXG5zaWxpY2F0ZS9NU1xcbnNpbGljZW91c1xcbnNpbGljb24vU01cXG5zaWxpY29uZS9NXFxuc2lsaWNvc2lzL01cXG5zaWxrL01OU1xcbnNpbGtpbHlcXG5zaWxraW5lc3MvTVxcbnNpbGtzY3JlZW4vU01cXG5zaWxrd29ybS9NU1xcbnNpbGt5L1RSUFxcbnNpbGwvTVNcXG5zaWxsaW5lc3MvTVxcbnNpbGx5L1RSU01QXFxuc2lsby9NU1xcbnNpbHQvR01EU1xcbnNpbHR5L1RSXFxuc2lsdmVyL0dNRFNcXG5zaWx2ZXJmaXNoL01TXFxuc2lsdmVyc21pdGgvTVxcbnNpbHZlcnNtaXRoc1xcbnNpbHZlcndhcmUvTVxcbnNpbHZlcnlcXG5zaW0vU01cXG5zaW1pYW4vTVNcXG5zaW1pbGFyL1lcXG5zaW1pbGFyaXR5L0VTTVxcbnNpbWlsZS9NU1xcbnNpbWlsaXR1ZGUvRU1cXG5zaW1tZXIvR01EU1xcbnNpbW9uaXplL0RTR1xcbnNpbW9ueS9NXFxuc2ltcGF0aWNvXFxuc2ltcGVyL0dNRFNcXG5zaW1wZXJpbmcvWVxcbnNpbXBsZS9UUlBcXG5zaW1wbGVtaW5kZWRcXG5zaW1wbGVuZXNzL01cXG5zaW1wbGV0b24vU01cXG5zaW1wbGV4XFxuc2ltcGxpY2l0eS9NXFxuc2ltcGxpZmljYXRpb24vTVxcbnNpbXBsaWZ5L0RTWE5HXFxuc2ltcGxpc3RpY1xcbnNpbXBsaXN0aWNhbGx5XFxuc2ltcGx5XFxuc2ltdWxhY3JhXFxuc2ltdWxhY3J1bS9TXFxuc2ltdWxhdGUvRURTR05cXG5zaW11bGF0aW9uL0VNXFxuc2ltdWxhdGlvbnNcXG5zaW11bGF0b3IvRU1TXFxuc2ltdWxjYXN0L0dNRFNcXG5zaW11bHRhbmVpdHkvTVxcbnNpbXVsdGFuZW91cy9ZXFxuc2luL0FTTVxcbnNpbmNlXFxuc2luY2VyZS9JWVRcXG5zaW5jZXJlclxcbnNpbmNlcml0eS9JTVxcbnNpbmUvTVNcXG5zaW5lY3VyZS9NU1xcbnNpbmV3L01TXFxuc2luZXd5XFxuc2luZnVsL1BZXFxuc2luZnVsbmVzcy9NXFxuc2luZy9CWkdNRFJZU1xcbnNpbmdhbG9uZy9TXFxuc2luZ2UvTVNcXG5zaW5nZWluZ1xcbnNpbmdlci9NXFxuc2luZ2luZy9NXFxuc2luZ2xlL1BNR0RTXFxuc2luZ2xlbmVzcy9NXFxuc2luZ2xlcy9NXFxuc2luZ2xldC9TXFxuc2luZ2xldG9uL1NNXFxuc2luZ2xldHJlZS9TTVxcbnNpbmdzb25nL1NNREdcXG5zaW5ndWxhci9TTVlcXG5zaW5ndWxhcml0eS9TTVxcbnNpbmlzdGVyXFxuc2luay9CWkdNUlNcXG5zaW5rYWJsZS9VXFxuc2lua2VyL01cXG5zaW5raG9sZS9TTVxcbnNpbmxlc3NcXG5zaW5uZWRcXG5zaW5uZXIvTVNcXG5zaW5uaW5nXFxuc2lub2xvZ3lcXG5zaW51b3NpdHkvTVxcbnNpbnVvdXMvWVxcbnNpbnVzL01TXFxuc2ludXNpdGlzL01cXG5zaW51c29pZGFsXFxuc2lwL1NNXFxuc2lwaG9uL0dNRFNcXG5zaXBwZWRcXG5zaXBwZXIvU01cXG5zaXBwaW5nXFxuc2lyL1NYTU5cXG5zaXJlL0NNR0RTXFxuc2lyZW4vTVxcbnNpcmxvaW4vU01cXG5zaXJvY2NvL1NNXFxuc2lycmFoXFxuc2lycmVlL01cXG5zaXMvTVNcXG5zaXNhbC9NXFxuc2lzc2lmaWVkXFxuc2lzc3kvUlNNVFxcbnNpc3Rlci9BU01cXG5zaXN0ZXJob29kL01TXFxuc2lzdGVybGluZXNzL01cXG5zaXN0ZXJseS9QXFxuc2l0L1NcXG5zaXRhci9TTVxcbnNpdGFyaXN0L01TXFxuc2l0Y29tL1NNXFxuc2l0ZS9NR0RTXFxuc2l0ZW1hcC9TTVxcbnNpdHRlci9TTVxcbnNpdHRpbmcvU01cXG5zaXR1XFxuc2l0dWF0ZS9EU1hHTlxcbnNpdHVhdGlvbi9NXFxuc2l0dWF0aW9uYWxcXG5zaXgvTVNIXFxuc2l4Zm9sZFxcbnNpeHBlbmNlL01TXFxuc2l4c2hvb3Rlci9NXFxuc2l4dGVlbi9TTUhcXG5zaXh0ZWVudGgvTVxcbnNpeHRlZW50aHNcXG5zaXh0aC9NXFxuc2l4dGhzXFxuc2l4dGlldGgvTVxcbnNpeHRpZXRoc1xcbnNpeHR5L1NNSFxcbnNpemFibGVcXG5zaXplJ3NcXG5zaXplL0FHRFNcXG5zaXplclxcbnNpemluZy9NXFxuc2l6emxlL0RSU01aR1xcbnNrYS9NXFxuc2thdGUvTVpHRFJTXFxuc2thdGVib2FyZC9NRFJTWkdcXG5za2F0ZWJvYXJkZXIvTVxcbnNrYXRlYm9hcmRpbmcvTVxcbnNrYXRlci9NXFxuc2thdGluZy9NXFxuc2tlZGFkZGxlL01HRFNcXG5za2VldC9aTVJcXG5za2Vpbi9NU1xcbnNrZWxldGFsXFxuc2tlbGV0b24vU01cXG5za2VwdGljL1NNXFxuc2tlcHRpY2FsL1lcXG5za2VwdGljaXNtL01cXG5za2V0Y2gvTURSU1pHXFxuc2tldGNoYm9vay9TXFxuc2tldGNoZXIvTVxcbnNrZXRjaGlseVxcbnNrZXRjaGluZXNzL01cXG5za2V0Y2hwYWQvU1xcbnNrZXRjaHkvUlRQXFxuc2tldy9NRFJaR1NcXG5za2V3YmFsZC9TXFxuc2tld2VyL01ER1xcbnNraS9TWkdNRFJcXG5za2lib2IvU1xcbnNraWQvTVNcXG5za2lkZGVkXFxuc2tpZGRpbmdcXG5za2lkcGFuL1NcXG5za2llci9NXFxuc2tpZmYvU01cXG5za2lmZmxlXFxuc2tpaW5nL01cXG5za2lsbCdzXFxuc2tpbGwvQ1NEXFxuc2tpbGxlZC9VXFxuc2tpbGxldC9TTVxcbnNraWxsZnVsL1VZXFxuc2tpbGxmdWxuZXNzL01cXG5za2ltL01TXFxuc2tpbW1lZFxcbnNraW1tZXIvU01cXG5za2ltbWluZ1xcbnNraW1wL1NER1xcbnNraW1waWx5XFxuc2tpbXBpbmVzcy9NXFxuc2tpbXB5L1JUUFxcbnNraW4vTVNcXG5za2luY2FyZS9NXFxuc2tpbmZsaW50L01TXFxuc2tpbmZ1bFxcbnNraW5oZWFkL01TXFxuc2tpbmxlc3NcXG5za2lubmVkXFxuc2tpbm5pbmVzcy9NXFxuc2tpbm5pbmdcXG5za2lubnkvUk1UUFxcbnNraW50XFxuc2tpbnRpZ2h0XFxuc2tpcC9NU1xcbnNraXBwZWRcXG5za2lwcGVyL1NNREdcXG5za2lwcGluZ1xcbnNraXJtaXNoL1pHTURSU1xcbnNraXJ0L1NNREdcXG5za2l0L01TXFxuc2tpdHRlci9HU0RcXG5za2l0dGlzaC9ZUFxcbnNraXR0aXNobmVzcy9NXFxuc2tpdHRsZS9TXFxuc2tpdmUvRFJTWkdcXG5za2l2dnkvRFNNR1xcbnNrb2FsL1NNXFxuc2t1YS9TXFxuc2t1bGR1Z2dlcnkvTVxcbnNrdWxrL1NEUlpHXFxuc2t1bGtlci9NXFxuc2t1bGwvU01cXG5za3VsbGNhcC9NU1xcbnNrdW5rL1NNREdcXG5za3kvR1NNXFxuc2t5Y2FwL1NNXFxuc2t5ZGl2ZS9EUlNaR1xcbnNreWRpdmVyL01cXG5za3lkaXZpbmcvTVxcbnNreWphY2svSlpHU0RSXFxuc2t5amFja2VyL01cXG5za3lqYWNraW5nL01cXG5za3lsYXJrL1NHTURcXG5za3lsaWdodC9NU1xcbnNreWxpbmUvU01cXG5za3lyb2NrZXQvR1NNRFxcbnNreXNjcmFwZXIvU01cXG5za3l3YXJkL1NcXG5za3l3cml0ZXIvU01cXG5za3l3cml0aW5nL01cXG5zbGFiL01TXFxuc2xhYmJlZFxcbnNsYWJiaW5nXFxuc2xhY2svUFhaVEdNRE5SWVNcXG5zbGFja2VuL0RHXFxuc2xhY2tlci9NXFxuc2xhY2tuZXNzL01cXG5zbGFja3MvTVxcbnNsYWcvTVNcXG5zbGFnZ2VkXFxuc2xhZ2dpbmdcXG5zbGFnaGVhcC9TXFxuc2xhaW5cXG5zbGFrZS9HRFNcXG5zbGFsb20vTVNER1xcbnNsYW0vTVNcXG5zbGFtbWVkXFxuc2xhbW1lci9TTVxcbnNsYW1taW5nXFxuc2xhbmRlci9NWkdEUlNcXG5zbGFuZGVyZXIvTVxcbnNsYW5kZXJvdXNcXG5zbGFuZy9NXFxuc2xhbmd5L1JUXFxuc2xhbnQvTVNER1xcbnNsYW50aW5nL1lcXG5zbGFudHdpc2VcXG5zbGFwL01TXFxuc2xhcGRhc2hcXG5zbGFwaGFwcHlcXG5zbGFwcGVkXFxuc2xhcHBlci9TXFxuc2xhcHBpbmdcXG5zbGFwc3RpY2svTVxcbnNsYXNoL01EUlNaR1xcbnNsYXNoZXIvTVxcbnNsYXQvTURHU1xcbnNsYXRlL1NNXFxuc2xhdGhlci9TREdcXG5zbGF0dGVkXFxuc2xhdHRlcm4vU01ZXFxuc2xhdWdodGVyL01EUlpHU1xcbnNsYXVnaHRlcmVyL01cXG5zbGF1Z2h0ZXJob3VzZS9NU1xcbnNsYXZlL0RSU01aR1xcbnNsYXZlaG9sZGVyL01TXFxuc2xhdmVyL01ER1xcbnNsYXZlcnkvTVxcbnNsYXZpc2gvUFlcXG5zbGF2aXNobmVzcy9NXFxuc2xhdy9NXFxuc2xheS9EUlpHSlNcXG5zbGF5ZXIvTVxcbnNsYXlpbmcvTVxcbnNsZWF6ZS9TTVxcbnNsZWF6ZWJhZy9TXFxuc2xlYXplYmFsbC9TXFxuc2xlYXppbHlcXG5zbGVhemluZXNzL01cXG5zbGVhenkvUFJUXFxuc2xlZC9NU1xcbnNsZWRkZWRcXG5zbGVkZGVyL1NNXFxuc2xlZGRpbmdcXG5zbGVkZ2UvRFNNR1xcbnNsZWRnZWhhbW1lci9HU01EXFxuc2xlZWsvU0RSWVRHUFxcbnNsZWVrbmVzcy9NXFxuc2xlZXAvU01SWkdcXG5zbGVlcGVyL01cXG5zbGVlcGlseVxcbnNsZWVwaW5lc3MvTVxcbnNsZWVwbGVzcy9QWVxcbnNsZWVwbGVzc25lc3MvTVxcbnNsZWVwb3Zlci9TTVxcbnNsZWVwd2Fsay9aR1NEUlxcbnNsZWVwd2Fsa2VyL01cXG5zbGVlcHdhbGtpbmcvTVxcbnNsZWVwd2Vhci9NXFxuc2xlZXB5L1JQVFxcbnNsZWVweWhlYWQvTVNcXG5zbGVldC9TTURHXFxuc2xlZXR5XFxuc2xlZXZlL0RTTVxcbnNsZWV2ZWxlc3NcXG5zbGVpZ2gvTURHXFxuc2xlaWdoc1xcbnNsZWlnaHQvU01cXG5zbGVuZGVyL1BSVFxcbnNsZW5kZXJpemUvRFNHXFxuc2xlbmRlcm5lc3MvTVxcbnNsZXB0XFxuc2xldXRoL01HXFxuc2xldXRoc1xcbnNsZXcvTURHU1xcbnNsaWNlL0RSU01aR1xcbnNsaWNlci9NXFxuc2xpY2svU01EUllaVEdQXFxuc2xpY2tlci9NXFxuc2xpY2tuZXNzL01cXG5zbGlkXFxuc2xpZGUvUlNNWkdcXG5zbGlkZXIvTVxcbnNsaWRlc2hvdy9NU1xcbnNsaWdodC9TTURSWVRHUFxcbnNsaWdodG5lc3MvTVxcbnNsaW0vUFNcXG5zbGltZS9NXFxuc2xpbWluZXNzL01cXG5zbGltbGluZVxcbnNsaW1tZWRcXG5zbGltbWVyL1NcXG5zbGltbWVzdFxcbnNsaW1taW5nL01cXG5zbGltbmVzcy9NXFxuc2xpbXkvUlRQXFxuc2xpbmcvU01HXFxuc2xpbmdiYWNrL1NcXG5zbGluZ3Nob3QvU01cXG5zbGluay9TR1xcbnNsaW5reS9SVFxcbnNsaXAvTVNcXG5zbGlwY2FzZS9NU1xcbnNsaXBjb3Zlci9NU1xcbnNsaXBrbm90L01TXFxuc2xpcHBhZ2UvTVNcXG5zbGlwcGVkXFxuc2xpcHBlci9TTVxcbnNsaXBwZXJpbmVzcy9NXFxuc2xpcHBlcnkvUFJUXFxuc2xpcHBpbmdcXG5zbGlwcHlcXG5zbGlwc2hvZFxcbnNsaXBzdHJlYW0vU01cXG5zbGlwd2F5L1NNXFxuc2xpdC9NU1xcbnNsaXRoZXIvU0dNRFxcbnNsaXRoZXJ5XFxuc2xpdHRlclxcbnNsaXR0aW5nXFxuc2xpdmVyL0dTTURcXG5zbG9iL01TXFxuc2xvYmJlZFxcbnNsb2JiZXIvTURTR1xcbnNsb2JiZXJ5XFxuc2xvYmJpbmdcXG5zbG9lL01TXFxuc2xvZy9NU1xcbnNsb2dhbi9TTVxcbnNsb2dhbmVlcmluZ1xcbnNsb2dnZWRcXG5zbG9nZ2luZ1xcbnNsb29wL1NNXFxuc2xvcC9NREdTXFxuc2xvcGUvU01cXG5zbG9wcGVkXFxuc2xvcHBpbHlcXG5zbG9wcGluZXNzL01cXG5zbG9wcGluZ1xcbnNsb3BweS9QVFJcXG5zbG9wcy9NXFxuc2xvc2gvRFNHXFxuc2xvdC9NU1xcbnNsb3RoL01cXG5zbG90aGZ1bC9ZUFxcbnNsb3RoZnVsbmVzcy9NXFxuc2xvdGhzXFxuc2xvdHRlZFxcbnNsb3R0aW5nXFxuc2xvdWNoL1pHTURSU1xcbnNsb3VjaGVyL01cXG5zbG91Y2h5L1RSXFxuc2xvdWdoL0dNRFxcbnNsb3VnaHNcXG5zbG92ZW4vU01ZXFxuc2xvdmVubGluZXNzL01cXG5zbG92ZW5seS9QVFJcXG5zbG93L0RSWVRHU1BcXG5zbG93Y29hY2gvU1xcbnNsb3dkb3duL1NNXFxuc2xvd25lc3MvTVxcbnNsb3dwb2tlL1NNXFxuc2x1ZGdlL01cXG5zbHVkZ3kvUlRcXG5zbHVlL01HRFNcXG5zbHVnL01TXFxuc2x1Z2dhcmQvTVNcXG5zbHVnZ2VkXFxuc2x1Z2dlci9TTVxcbnNsdWdnaW5nXFxuc2x1Z2dpc2gvUFlcXG5zbHVnZ2lzaG5lc3MvTVxcbnNsdWljZS9EU01HXFxuc2x1bS9NU1xcbnNsdW1iZXIvR1NNRFxcbnNsdW1iZXJvdXNcXG5zbHVtZG9nL1NNXFxuc2x1bWxvcmQvTVNcXG5zbHVtbWVkXFxuc2x1bW1lclxcbnNsdW1taW5nXFxuc2x1bW15L1JUXFxuc2x1bXAvU01ER1xcbnNsdW5nXFxuc2x1bmtcXG5zbHVyL01TXFxuc2x1cnAvU01ER1xcbnNsdXJyZWRcXG5zbHVycmluZ1xcbnNsdXJyeS9NXFxuc2x1c2gvTVxcbnNsdXNoaW5lc3MvTVxcbnNsdXNoeS9SUFRcXG5zbHV0L01TXFxuc2x1dHRpc2hcXG5zbHV0dHkvUlRcXG5zbHkvVFJZXFxuc2x5bmVzcy9NXFxuc21hY2svU01EUlpHXFxuc21hY2tlci9NXFxuc21hbGwvU01SVFBcXG5zbWFsbGhvbGRlci9TXFxuc21hbGxob2xkaW5nL1NcXG5zbWFsbGlzaFxcbnNtYWxsbmVzcy9NXFxuc21hbGxwb3gvTVxcbnNtYXJteS9SVFxcbnNtYXJ0L1NNRE5SWVhUR1BcXG5zbWFydGVuL0RHXFxuc21hcnRuZXNzL01cXG5zbWFydHBob25lL1NNXFxuc21hcnRzL01cXG5zbWFydHdhdGNoL01TXFxuc21hcnR5L1NNXFxuc21hcnR5cGFudHMvTVxcbnNtYXNoL01EUlNaR1xcbnNtYXNoZXIvTVxcbnNtYXNodXAvU01cXG5zbWF0dGVyaW5nL01TXFxuc21lYXIvU01ER1xcbnNtZWFyeS9SVFxcbnNtZWxsL1NNREdcXG5zbWVsbGluZXNzL01cXG5zbWVsbHkvUlBUXFxuc21lbHQvU01EUlpHXFxuc21lbHRlci9NXFxuc21pZGdlbi9NU1xcbnNtaWxheC9NXFxuc21pbGUvRFNNR1xcbnNtaWxleS9TTVxcbnNtaWxpbmcvWVxcbnNtaXJjaC9HTURTXFxuc21pcmsvU01ER1xcbnNtaXRlL1NHXFxuc21pdGgvTVxcbnNtaXRoZXJlZW5zL01cXG5zbWl0aHNcXG5zbWl0aHkvU01cXG5zbWl0dGVuXFxuc21vY2svU01ER1xcbnNtb2NraW5nL01cXG5zbW9nL01TXFxuc21vZ2d5L1JUXFxuc21va2UvRFJTTVpHXFxuc21va2Vob3VzZS9NU1xcbnNtb2tlbGVzc1xcbnNtb2tlci9NXFxuc21va2VzY3JlZW4vU01cXG5zbW9rZXN0YWNrL1NNXFxuc21va2V5XFxuc21va2luZXNzL01cXG5zbW9raW5nL01cXG5zbW9reS9SVFBcXG5zbW9sZGVyL1NHTURcXG5zbW9vY2gvTURTR1xcbnNtb29jaHlcXG5zbW9vdGgvUERSWVRHXFxuc21vb3RoaWUvTVNcXG5zbW9vdGhuZXNzL01cXG5zbW9vdGhzXFxuc21vcmdhc2JvcmQvU01cXG5zbW90ZVxcbnNtb3RoZXIvR1NNRFxcbnNtdWRnZS9EU01HXFxuc211ZGd5L1RSXFxuc211Zy9ZUFxcbnNtdWdnZXJcXG5zbXVnZ2VzdFxcbnNtdWdnbGUvWkdEUlNcXG5zbXVnZ2xlci9NXFxuc211Z2dsaW5nL01cXG5zbXVnbmVzcy9NXFxuc211cmYvU1xcbnNtdXQvTVNcXG5zbXV0dGluZXNzL01cXG5zbXV0dHkvVFJQXFxuc25hY2svU01ER1xcbnNuYWZmbGUvRFNNR1xcbnNuYWZ1L1NNXFxuc25hZy9NU1xcbnNuYWdnZWRcXG5zbmFnZ2luZ1xcbnNuYWlsL1NNREdcXG5zbmFrZS9EU01HXFxuc25ha2ViaXRlL01TXFxuc25ha2VsaWtlXFxuc25ha2Vza2luXFxuc25ha3kvUlRcXG5zbmFwJ3NcXG5zbmFwL1VTXFxuc25hcGRyYWdvbi9TTVxcbnNuYXBwZWQvVVxcbnNuYXBwZXIvTVNcXG5zbmFwcGlseVxcbnNuYXBwaW5lc3MvTVxcbnNuYXBwaW5nL1VcXG5zbmFwcGlzaC9ZUFxcbnNuYXBwaXNobmVzcy9NXFxuc25hcHB5L1RSUFxcbnNuYXBzaG90L1NNXFxuc25hcmUvRFNNR1xcbnNuYXJmL1NER1xcbnNuYXJrL1NcXG5zbmFya3kvVFJcXG5zbmFybCdzXFxuc25hcmwvVVNER1xcbnNuYXJsaW5nL1lcXG5zbmFybHkvVFJcXG5zbmF0Y2gvWkdNRFJTXFxuc25hdGNoZXIvTVxcbnNuYXp6aWx5XFxuc25henp5L1RSXFxuc25lYWsvU01EUlpHXFxuc25lYWtlci9NXFxuc25lYWtpbHlcXG5zbmVha2luZXNzL01cXG5zbmVha2luZy9ZXFxuc25lYWt5L1RSUFxcbnNuZWVyL1NKTURHXFxuc25lZXJpbmcvWVxcbnNuZWV6ZS9EU01HXFxuc25pY2svU0RSWkdcXG5zbmlja2VyL01ER1xcbnNuaWRlL1JZVFxcbnNuaWZmL1NNRFJaR1xcbnNuaWZmZXIvTVxcbnNuaWZmbGUvRFNNR1xcbnNuaWZmeS9SVFxcbnNuaWZ0ZXIvU01cXG5zbmlwL01EUlpHU1xcbnNuaXBlL1NNXFxuc25pcGVyL01cXG5zbmlwcGVkXFxuc25pcHBldC9TTVxcbnNuaXBwaW5nXFxuc25pcHB5L1JUXFxuc25pcHMvTVxcbnNuaXQvTVNcXG5zbml0Y2gvTURTR1xcbnNuaXZlbC9TTURSWkdcXG5zbml2ZWxlci9NXFxuc25vYi9NU1xcbnNub2JiZXJ5L01cXG5zbm9iYmlzaC9QWVxcbnNub2JiaXNobmVzcy9NXFxuc25vYmJ5L1JUXFxuc25vZy9TXFxuc25vZ2dlZFxcbnNub2dnaW5nXFxuc25vb2QvU01cXG5zbm9va2VyL01EU0dcXG5zbm9vcC9TTURSWkdcXG5zbm9vcGVyL01cXG5zbm9vcHkvVFJcXG5zbm9vdC9TTVxcbnNub290aWx5XFxuc25vb3RpbmVzcy9NXFxuc25vb3R5L1BUUlxcbnNub296ZS9EU01HXFxuc25vcmUvRFJTTVpHXFxuc25vcmVyL01cXG5zbm9ya2VsL1pHTURSU1xcbnNub3JrZWxlci9NXFxuc25vcmtlbGluZy9NXFxuc25vcnQvU01EUlpHXFxuc25vcnRlci9NXFxuc25vdC9NU1xcbnNub3R0aWx5XFxuc25vdHRpbmVzcy9NXFxuc25vdHR5L1RQUlxcbnNub3V0L1NNXFxuc25vdy9NREdTXFxuc25vd2JhbGwvR1NNRFxcbnNub3diYW5rL1NNXFxuc25vd2JpcmQvU01cXG5zbm93Ymxvd2VyL01TXFxuc25vd2JvYXJkL1pHTURSU1xcbnNub3dib2FyZGVyL01cXG5zbm93Ym9hcmRpbmcvTVxcbnNub3dib3VuZFxcbnNub3dkcmlmdC9TTVxcbnNub3dkcm9wL1NNXFxuc25vd2ZhbGwvU01cXG5zbm93ZmllbGQvU01cXG5zbm93Zmxha2UvU01cXG5zbm93aW5lc3MvTVxcbnNub3dsaW5lXFxuc25vd21hbi9NXFxuc25vd21lblxcbnNub3dtb2JpbGUvRFNNR1xcbnNub3dwbG93L1NHTURcXG5zbm93c2hlZFxcbnNub3dzaG9lL1NNXFxuc25vd3Nob2VpbmdcXG5zbm93c3Rvcm0vU01cXG5zbm93c3VpdC9TTVxcbnNub3d5L1BSVFxcbnNudWIvTVNcXG5zbnViYmVkXFxuc251YmJpbmdcXG5zbnVmZi9TTURSWVpHXFxuc251ZmZib3gvTVNcXG5zbnVmZmVyL01cXG5zbnVmZmxlL01HRFNcXG5zbnVnL01ZU1BcXG5zbnVnZ2VkXFxuc251Z2dlclxcbnNudWdnZXN0XFxuc251Z2dpbmdcXG5zbnVnZ2xlL01HRFNcXG5zbnVnbmVzcy9NXFxuc29cXG5zb2FrL01ER1NKXFxuc29ha2luZy9NXFxuc29hcC9NREdTXFxuc29hcGJveC9NU1xcbnNvYXBpbmVzcy9NXFxuc29hcHN0b25lL01cXG5zb2Fwc3Vkcy9NXFxuc29hcHkvUlBUXFxuc29hci9NREdTXFxuc29iL1NNXFxuc29iYmVkXFxuc29iYmluZy9ZXFxuc29iZXIvU0RSWVBUR1xcbnNvYmVybmVzcy9NXFxuc29icmlldHkvSU1cXG5zb2JyaXF1ZXQvU01cXG5zb2NcXG5zb2NjZXIvTVxcbnNvY2lhYmlsaXR5L01cXG5zb2NpYWJsZS9TTVxcbnNvY2lhYmx5XFxuc29jaWFsL1NNWVxcbnNvY2lhbGlzbS9NXFxuc29jaWFsaXN0L1NNXFxuc29jaWFsaXN0aWNcXG5zb2NpYWxpdGUvU01cXG5zb2NpYWxpemF0aW9uL01cXG5zb2NpYWxpemUvRFNHXFxuc29jaWV0YWxcXG5zb2NpZXR5L1NNXFxuc29jaW9lY29ub21pY1xcbnNvY2lvZWNvbm9taWNhbGx5XFxuc29jaW9sb2dpY2FsL1lcXG5zb2Npb2xvZ2lzdC9TTVxcbnNvY2lvbG9neS9NXFxuc29jaW9wYXRoL01cXG5zb2Npb3BhdGhzXFxuc29jaW9wb2xpdGljYWxcXG5zb2NrL01ER1NcXG5zb2NrZXQvU01cXG5zb2NrZXllL1NNXFxuc29kL1NNXFxuc29kYS9NU1xcbnNvZGRlZFxcbnNvZGRlbi9ZXFxuc29kZGluZ1xcbnNvZGl1bS9NXFxuc29kb21pdGUvTVNcXG5zb2RvbWl6ZS9HRFNcXG5zb2RvbXkvTVxcbnNvZXZlclxcbnNvZmEvTVNcXG5zb2Z0L05SWVhUUFxcbnNvZnRiYWNrXFxuc29mdGJhbGwvTVNcXG5zb2Z0Ym91bmRcXG5zb2Z0Y292ZXJcXG5zb2Z0ZW4vRFJaR1xcbnNvZnRlbmVyL01cXG5zb2Z0aGVhcnRlZFxcbnNvZnRuZXNzL01cXG5zb2Z0d2FyZS9NXFxuc29mdHdvb2QvU01cXG5zb2Z0eS9TTVxcbnNvZ2dpbHlcXG5zb2dnaW5lc3MvTVxcbnNvZ2d5L1JUUFxcbnNvaWduZVxcbnNvaWduZWVcXG5zb2lsL01ER1NcXG5zb2lsZWQvVVxcbnNvaXJlZS9TTVxcbnNvam91cm4vWkdNRFJTXFxuc29qb3VybmVyL01cXG5zb2wvU01cXG5zb2xhY2UvRFNNR1xcbnNvbGFyXFxuc29sYXJpYVxcbnNvbGFyaXVtL01cXG5zb2xkXFxuc29sZGVyL1pHU01EUlxcbnNvbGRlcmVyL01cXG5zb2xkaWVyL01EWVNHXFxuc29sZGllcnkvTVxcbnNvbGUvRlNER01cXG5zb2xlY2lzbS9TTVxcbnNvbGVseVxcbnNvbGVtbi9QVFJZXFxuc29sZW1uZXNzL01cXG5zb2xlbW5pZnkvRFNHXFxuc29sZW1uaXR5L1NNXFxuc29sZW1uaXphdGlvbi9NXFxuc29sZW1uaXplL0RTR1xcbnNvbGVtbm5lc3MvTVxcbnNvbGVub2lkL01TXFxuc29saWNpdC9HRFNcXG5zb2xpY2l0YXRpb24vU01cXG5zb2xpY2l0ZWQvVVxcbnNvbGljaXRvci9TTVxcbnNvbGljaXRvdXMvUFlcXG5zb2xpY2l0b3VzbmVzcy9NXFxuc29saWNpdHVkZS9NXFxuc29saWQvUFNNUllUXFxuc29saWRhcml0eS9NXFxuc29saWRpXFxuc29saWRpZmljYXRpb24vTVxcbnNvbGlkaWZ5L0RTTkdcXG5zb2xpZGl0eS9NXFxuc29saWRuZXNzL01cXG5zb2xpZHVzL01cXG5zb2xpbG9xdWllc1xcbnNvbGlsb3F1aXplL0RTR1xcbnNvbGlsb3F1eS9NXFxuc29saXBzaXNtL01cXG5zb2xpcHNpc3RpY1xcbnNvbGl0YWlyZS9NU1xcbnNvbGl0YXJpbmVzcy9NXFxuc29saXRhcnkvU01QXFxuc29saXR1ZGUvTVxcbnNvbG8vTURHU1xcbnNvbG9pc3QvTVNcXG5zb2xzdGljZS9NU1xcbnNvbHViaWxpdHkvSU1cXG5zb2x1YmxlL01TXFxuc29sdXRlJ3NcXG5zb2x1dGUvQVhOXFxuc29sdXRlc1xcbnNvbHV0aW9uJ3MvQUVcXG5zb2x2YWJsZS9JVVxcbnNvbHZlL0VBRFNHXFxuc29sdmVkL1VcXG5zb2x2ZW5jeS9JTVxcbnNvbHZlbnQvSU1TXFxuc29sdmVyL1NNXFxuc29tYXRpY1xcbnNvbWF0b3NlbnNvcnlcXG5zb21iZXIvUFlcXG5zb21iZXJuZXNzL01cXG5zb21icmVyby9NU1xcbnNvbWVcXG5zb21lYm9keS9TTVxcbnNvbWVkYXlcXG5zb21laG93XFxuc29tZW9uZS9NU1xcbnNvbWVwbGFjZVxcbnNvbWVyc2F1bHQvTURHU1xcbnNvbWVyc2V0L1NNXFxuc29tZXJzZXR0ZWRcXG5zb21lcnNldHRpbmdcXG5zb21ldGhpbmcvU01cXG5zb21ldGltZS9TXFxuc29tZXdheS9TXFxuc29tZXdoYXQvU1xcbnNvbWV3aGVyZVxcbnNvbW5hbWJ1bGlzbS9NXFxuc29tbmFtYnVsaXN0L1NNXFxuc29tbm9sZW5jZS9NXFxuc29tbm9sZW50XFxuc29uL1NNXFxuc29uYXIvU01cXG5zb25hdGEvU01cXG5zb25hdGluYS9TTVxcbnNvbmcvTVNcXG5zb25nYmlyZC9TTVxcbnNvbmdib29rL1NNXFxuc29uZ2Zlc3QvU01cXG5zb25nc3Rlci9NU1xcbnNvbmdzdHJlc3MvTVNcXG5zb25nd3JpdGVyL1NNXFxuc29uZ3dyaXRpbmdcXG5zb25pY1xcbnNvbm5ldC9TTVxcbnNvbm55L1NNXFxuc29ub2dyYW0vU01cXG5zb25vcml0eS9NXFxuc29ub3JvdXMvWVBcXG5zb25vcm91c25lc3MvTVxcbnNvbnNvZmJpdGNoZXNcXG5zb29uL1JUXFxuc29vdC9NXFxuc29vdGgvTURSU1pHXFxuc29vdGhlXFxuc29vdGhlci9NXFxuc29vdGhpbmcvWVxcbnNvb3Roc2F5ZXIvTVNcXG5zb290aHNheWluZy9NXFxuc29vdHkvUlRcXG5zb3AvU01cXG5zb3BoXFxuc29waGlzbS9NXFxuc29waGlzdC9NU1xcbnNvcGhpc3RpY1xcbnNvcGhpc3RpY2FsXFxuc29waGlzdGljYXRlL0RTTUdOXFxuc29waGlzdGljYXRlZC9VXFxuc29waGlzdGljYXRpb24vTVxcbnNvcGhpc3RyeS9TTVxcbnNvcGhvbW9yZS9NU1xcbnNvcGhvbW9yaWNcXG5zb3BvcmlmaWMvTVNcXG5zb3BvcmlmaWNhbGx5XFxuc29wcGVkXFxuc29wcGluZ1xcbnNvcHB5L1JUXFxuc29wcmFuby9NU1xcbnNvcmJldC9TTVxcbnNvcmNlcmVyL01TXFxuc29yY2VyZXNzL01TXFxuc29yY2VyeS9NXFxuc29yZGlkL1BZXFxuc29yZGlkbmVzcy9NXFxuc29yZS9NWVRSU1BcXG5zb3JlaGVhZC9NU1xcbnNvcmVuZXNzL01cXG5zb3JnaHVtL01cXG5zb3Jvcml0eS9TTVxcbnNvcnJlbC9TTVxcbnNvcnJpbHlcXG5zb3JyaW5lc3MvTVxcbnNvcnJvdy9TTURHXFxuc29ycm93ZnVsL1lQXFxuc29ycm93ZnVsbmVzcy9NXFxuc29ycnkvUlRQXFxuc29ydC9GQVNHRE1cXG5zb3J0YVxcbnNvcnRlZC9VXFxuc29ydGVyL1NNXFxuc29ydGllL0RTTVxcbnNvcnRpZWluZ1xcbnNvdC9TTVxcbnNvdHRpc2hcXG5zb3Und2VzdGVyXFxuc291L1NNSFxcbnNvdWZmbGUvU01cXG5zb3VnaC9NREdcXG5zb3VnaHNcXG5zb3VnaHQvVVxcbnNvdWsvU1xcbnNvdWwvTVNcXG5zb3VsZnVsL1lQXFxuc291bGZ1bG5lc3MvTVxcbnNvdWxsZXNzL1lQXFxuc291bG1hdGUvU01cXG5zb3VuZC9KUFNNRFJZWlRHXFxuc291bmRhbGlrZS9TXFxuc291bmRiYXIvU1xcbnNvdW5kYml0ZS9TXFxuc291bmRib2FyZC9NU1xcbnNvdW5kY2hlY2svU1xcbnNvdW5kZXIvTVxcbnNvdW5kaW5nL01cXG5zb3VuZGxlc3MvWVxcbnNvdW5kbmVzcy9VTVxcbnNvdW5kcHJvb2YvR0RTXFxuc291bmRwcm9vZmluZy9NXFxuc291bmRzY2FwZS9TXFxuc291bmR0cmFjay9TTVxcbnNvdXAvTURHU1xcbnNvdXBjb24vTVNcXG5zb3VweS9SVFxcbnNvdXIvTURSWVRHU1BcXG5zb3VyY2UvQURTTUdcXG5zb3VyZG91Z2gvTVxcbnNvdXJkb3VnaHNcXG5zb3VyaXNoXFxuc291cm5lc3MvTVxcbnNvdXJwdXNzL01TXFxuc291c2FwaG9uZS9NU1xcbnNvdXNlL0RTTUdcXG5zb3V0aC9NXFxuc291dGhib3VuZFxcbnNvdXRoZWFzdC9aTVJcXG5zb3V0aGVhc3Rlci9NWVxcbnNvdXRoZWFzdGVyblxcbnNvdXRoZWFzdHdhcmQvU1xcbnNvdXRoZXJseS9TTVxcbnNvdXRoZXJuL1NaTVJcXG5zb3V0aGVybmVyL01cXG5zb3V0aGVybm1vc3RcXG5zb3V0aHBhdy9TTVxcbnNvdXRod2FyZC9NU1xcbnNvdXRod2VzdC9aTVJcXG5zb3V0aHdlc3Rlci9NWVxcbnNvdXRod2VzdGVyblxcbnNvdXRod2VzdHdhcmQvU1xcbnNvdXZlbmlyL1NNXFxuc292ZXJlaWduL1NNXFxuc292ZXJlaWdudHkvTVxcbnNvdmlldC9TTVxcbnNvdydzXFxuc293L0FTR0RcXG5zb3dlci9TTVxcbnNvd24vQVxcbnNveS9NXFxuc295YmVhbi9NU1xcbnNvenpsZWRcXG5zcGEvU01cXG5zcGFjZS9EUlNNWkdcXG5zcGFjZWNyYWZ0L01TXFxuc3BhY2VmbGlnaHQvTVNcXG5zcGFjZW1hbi9NXFxuc3BhY2VtZW5cXG5zcGFjZXBvcnQvU01cXG5zcGFjZXIvTVxcbnNwYWNlc2hpcC9TTVxcbnNwYWNlc3VpdC9TTVxcbnNwYWNldGltZVxcbnNwYWNld2Fsay9TR01EXFxuc3BhY2V3b21hbi9NXFxuc3BhY2V3b21lblxcbnNwYWNleVxcbnNwYWNpYWxcXG5zcGFjaWVyXFxuc3BhY2llc3RcXG5zcGFjaW5lc3MvTVxcbnNwYWNpbmcvTVxcbnNwYWNpb3VzL1lQXFxuc3BhY2lvdXNuZXNzL01cXG5zcGFkZS9EU01HXFxuc3BhZGVmdWwvTVNcXG5zcGFkZXdvcmsvTVxcbnNwYWRpY2VzXFxuc3BhZGl4L01cXG5zcGFnaGV0dGkvTVxcbnNwYWtlXFxuc3BhbS9NU1xcbnNwYW1tZWRcXG5zcGFtbWVyL1NNXFxuc3BhbW1pbmdcXG5zcGFuL01TXFxuc3BhbmRleC9NXFxuc3BhbmdsZS9EU01HXFxuc3BhbmdseVxcbnNwYW5pZWwvU01cXG5zcGFuay9TTURHSlxcbnNwYW5raW5nL01cXG5zcGFubmVkXFxuc3Bhbm5lci9TTVxcbnNwYW5uaW5nXFxuc3Bhci9NU1xcbnNwYXJlL0RSU01ZVEdQXFxuc3BhcmVuZXNzL01cXG5zcGFyZXJpYnMvTVxcbnNwYXJpbmcvVVlcXG5zcGFyay9TTURZR1xcbnNwYXJrbGUvRFJTTVpHXFxuc3BhcmtsZXIvTVxcbnNwYXJreS9SVFxcbnNwYXJyZWRcXG5zcGFycmluZ1xcbnNwYXJyb3cvU01cXG5zcGFycm93aGF3ay9TXFxuc3BhcnNlL1JZVFBcXG5zcGFyc2VuZXNzL01cXG5zcGFyc2l0eS9NXFxuc3BhcnRhblxcbnNwYXNtL1NNXFxuc3Bhc21vZGljXFxuc3Bhc21vZGljYWxseVxcbnNwYXN0aWMvU01cXG5zcGF0L01TXFxuc3BhdGUvU01cXG5zcGF0aGUvU01cXG5zcGF0aWFsL1lcXG5zcGF0dGVkXFxuc3BhdHRlci9TR01EXFxuc3BhdHRpbmdcXG5zcGF0dWxhL1NNXFxuc3BhdmluL01EXFxuc3Bhd24vU01ER1xcbnNwYXkvREdTXFxuc3BlYWsvU1JaR0pcXG5zcGVha2Vhc3kvU01cXG5zcGVha2VyL01cXG5zcGVha2VycGhvbmUvU1xcbnNwZWFyL1NNREdcXG5zcGVhcmZpc2gvR01EU1xcbnNwZWFyZ3VuXFxuc3BlYXJoZWFkL0dNRFNcXG5zcGVhcm1pbnQvTVxcbnNwZWMvTVNcXG5zcGVjaWFsL1NNWVxcbnNwZWNpYWxpc20vU1xcbnNwZWNpYWxpc3QvTVNcXG5zcGVjaWFsaXphdGlvbi9NU1xcbnNwZWNpYWxpemUvR0RTXFxuc3BlY2lhbHR5L1NNXFxuc3BlY2llL1NNXFxuc3BlY2llcy9NXFxuc3BlY2lmXFxuc3BlY2lmaWFibGVcXG5zcGVjaWZpYy9NU1xcbnNwZWNpZmljYWxseVxcbnNwZWNpZmljYXRpb24vTVxcbnNwZWNpZmljaXR5L01cXG5zcGVjaWZpZWQvVVxcbnNwZWNpZnkvWE5aRFJTR1xcbnNwZWNpbWVuL1NNXFxuc3BlY2lvdXMvWVBcXG5zcGVjaW91c25lc3MvTVxcbnNwZWNrL1NNREdcXG5zcGVja2xlL01HRFNcXG5zcGVjcy9NXFxuc3BlY3RhY2xlL1NNXFxuc3BlY3RhY2xlcy9NXFxuc3BlY3RhY3VsYXIvTVlTXFxuc3BlY3RhdGUvRFNHXFxuc3BlY3RhdG9yL1NNXFxuc3BlY3Rlci9BTVNcXG5zcGVjdHJhXFxuc3BlY3RyYWxcXG5zcGVjdHJvbWV0ZXIvTVNcXG5zcGVjdHJvc2NvcGUvTVNcXG5zcGVjdHJvc2NvcGljXFxuc3BlY3Ryb3Njb3B5L01cXG5zcGVjdHJ1bS9NXFxuc3BlY3VsYXRlL0RTWEdOVlxcbnNwZWN1bGF0aW9uL01cXG5zcGVjdWxhdGl2ZS9ZXFxuc3BlY3VsYXRvci9NU1xcbnNwZWRcXG5zcGVlY2gvTVNcXG5zcGVlY2hpZnkvRFNHXFxuc3BlZWNobGVzcy9ZUFxcbnNwZWVjaGxlc3NuZXNzL01cXG5zcGVlY2h3cml0ZXIvU1xcbnNwZWVkL1NNUlpHXFxuc3BlZWRib2F0L1NNXFxuc3BlZWRlci9NXFxuc3BlZWRpbHlcXG5zcGVlZGluZXNzL01cXG5zcGVlZGluZy9NXFxuc3BlZWRvbWV0ZXIvTVNcXG5zcGVlZHN0ZXIvU01cXG5zcGVlZHVwL01TXFxuc3BlZWR3YXkvU01cXG5zcGVlZHdlbGwvTVxcbnNwZWVkeS9UUFJcXG5zcGVsZW9sb2dpY2FsXFxuc3BlbGVvbG9naXN0L01TXFxuc3BlbGVvbG9neS9NXFxuc3BlbGwvSlNNRFJaR1xcbnNwZWxsYmluZC9aR1JTXFxuc3BlbGxiaW5kZXIvTVxcbnNwZWxsYm91bmRcXG5zcGVsbGNoZWNrL01EUlpHU1xcbnNwZWxsY2hlY2tlci9NXFxuc3BlbGxkb3duL1NNXFxuc3BlbGxlci9NXFxuc3BlbGxpbmcvTVxcbnNwZWx1bmtlci9NU1xcbnNwZWx1bmtpbmcvTVxcbnNwZW5kL0JTUlpHXFxuc3BlbmRlci9NXFxuc3BlbmRpbmcvTVxcbnNwZW5kdGhyaWZ0L01TXFxuc3BlbnQvVVxcbnNwZXJtL1NNXFxuc3Blcm1hdG96b2FcXG5zcGVybWF0b3pvb24vTVxcbnNwZXJtaWNpZGFsXFxuc3Blcm1pY2lkZS9NU1xcbnNwZXcvTURSWkdTXFxuc3Bld2VyL01cXG5zcGhhZ251bS9NU1xcbnNwaGVyZS9TTVxcbnNwaGVyaWNhbC9ZXFxuc3BoZXJvaWQvU01cXG5zcGhlcm9pZGFsXFxuc3BoaW5jdGVyL01TXFxuc3BoaW54L01TXFxuc3BpYy9TXFxuc3BpY2UvRFNNR1xcbnNwaWNpbHlcXG5zcGljaW5lc3MvTVxcbnNwaWN1bGUvTVNcXG5zcGljeS9QUlRcXG5zcGlkZXIvU01cXG5zcGlkZXJ3ZWIvTVNcXG5zcGlkZXJ5XFxuc3BpZWwvU01ER1xcbnNwaWZmL1NER1xcbnNwaWZmeS9UUlxcbnNwaWdvdC9TTVxcbnNwaWtlL0RTTUdcXG5zcGlraW5lc3MvTVxcbnNwaWt5L1JQVFxcbnNwaWxsL1NNREdcXG5zcGlsbGFnZS9NU1xcbnNwaWxsb3Zlci9TTVxcbnNwaWxsd2F5L01TXFxuc3Bpbi9NU1xcbnNwaW5hY2gvTVxcbnNwaW5hbC9TTVlcXG5zcGluZGxlL01HRFNcXG5zcGluZGx5L1RSXFxuc3BpbmUvU01cXG5zcGluZWxlc3MvWVBcXG5zcGluZXQvU01cXG5zcGlubGVzc1xcbnNwaW5uYWtlci9TTVxcbnNwaW5uZXIvTVNcXG5zcGlubmVyZXQvU01cXG5zcGlubmV5L1NcXG5zcGlubmluZy9NXFxuc3BpbnN0ZXIvU01cXG5zcGluc3Rlcmhvb2QvTVxcbnNwaW5zdGVyaXNoXFxuc3BpbnkvUlRcXG5zcGlyYWNsZS9TTVxcbnNwaXJhbC9TR01EWVxcbnNwaXJlJ3NcXG5zcGlyZS9JRkFTXFxuc3BpcmVhL1NNXFxuc3Bpcml0J3NcXG5zcGlyaXQvSVNHRFxcbnNwaXJpdGVkL1lcXG5zcGlyaXRsZXNzXFxuc3Bpcml0dWFsL01ZU1xcbnNwaXJpdHVhbGlzbS9NXFxuc3Bpcml0dWFsaXN0L01TXFxuc3Bpcml0dWFsaXN0aWNcXG5zcGlyaXR1YWxpdHkvTVxcbnNwaXJpdHVvdXNcXG5zcGlyb2NoZXRlL1NNXFxuc3BpcnlcXG5zcGl0L01ER1NcXG5zcGl0YmFsbC9TTVxcbnNwaXRlL0FTTVxcbnNwaXRlZnVsL1BZXFxuc3BpdGVmdWxsZXJcXG5zcGl0ZWZ1bGxlc3RcXG5zcGl0ZWZ1bG5lc3MvTVxcbnNwaXRmaXJlL1NNXFxuc3BpdHRlZFxcbnNwaXR0aW5nXFxuc3BpdHRsZS9NXFxuc3BpdHRvb24vTVNcXG5zcGl2L1NcXG5zcGxhbmNobmljXFxuc3BsYXNoL0dNRFNcXG5zcGxhc2hkb3duL01TXFxuc3BsYXNoaWx5XFxuc3BsYXNoaW5lc3MvTVxcbnNwbGFzaHkvUlRQXFxuc3BsYXQvU01cXG5zcGxhdHRlZFxcbnNwbGF0dGVyL0dTTURcXG5zcGxhdHRpbmdcXG5zcGxheS9TTURHXFxuc3BsYXlmZWV0XFxuc3BsYXlmb290L01EXFxuc3BsZWVuL1NNXFxuc3BsZW5kaWQvUllUXFxuc3BsZW5kb3IvTVNcXG5zcGxlbmRvcm91c1xcbnNwbGVuZWN0b215XFxuc3BsZW5ldGljXFxuc3BsaWNlL0RSU01aR1xcbnNwbGljZXIvTVxcbnNwbGlmZi9TXFxuc3BsaW5lL1NcXG5zcGxpbnQvU1pHTURSXFxuc3BsaW50ZXIvTURHXFxuc3BsaW50ZXJ5XFxuc3BsaXQvU01cXG5zcGxpdHRpbmcvTVNcXG5zcGxvZGdlL1NcXG5zcGxvc2gvRFNHXFxuc3Bsb3RjaC9NRFNHXFxuc3Bsb3RjaHkvVFJcXG5zcGx1cmdlL0RTTUdcXG5zcGx1dHRlci9HTURTXFxuc3BvaWwnc1xcbnNwb2lsL0NTRFJaR1xcbnNwb2lsYWdlL01cXG5zcG9pbGVkL1VcXG5zcG9pbGVyL0NNXFxuc3BvaWxzcG9ydC9NU1xcbnNwb2tlL1NNXFxuc3Bva2VuL1VcXG5zcG9rZXNtYW4vTVxcbnNwb2tlc21lblxcbnNwb2tlc3Blb3BsZVxcbnNwb2tlc3BlcnNvbi9NU1xcbnNwb2tlc3dvbWFuL01cXG5zcG9rZXN3b21lblxcbnNwb2xpYXRpb24vQ01cXG5zcG9uZ2UvRFJTTVpHXFxuc3Bvbmdlci9NXFxuc3BvbmdpbmVzcy9NXFxuc3Bvbmd5L1JQVFxcbnNwb25zb3IvTURHU1xcbnNwb25zb3JzaGlwL01cXG5zcG9udGFuZWl0eS9NXFxuc3BvbnRhbmVvdXMvWVxcbnNwb29mL1NNREdcXG5zcG9vay9TTURHXFxuc3Bvb2tpbmVzcy9NXFxuc3Bvb2t5L1JQVFxcbnNwb29sL1NNREdcXG5zcG9vbi9TTURHXFxuc3Bvb25iaWxsL01TXFxuc3Bvb25lcmlzbS9NU1xcbnNwb29uZnVsL1NNXFxuc3Bvb3IvU01ER1xcbnNwb3JhZGljXFxuc3BvcmFkaWNhbGx5XFxuc3BvcmUvRFNNR1xcbnNwb3JyYW4vU1xcbnNwb3J0L1NNREdWXFxuc3BvcnRpbmVzcy9NXFxuc3BvcnRpbmcvWVxcbnNwb3J0aXZlL1lcXG5zcG9ydHNjYXN0L01SWkdTXFxuc3BvcnRzY2FzdGVyL01cXG5zcG9ydHNtYW4vTVxcbnNwb3J0c21hbmxpa2UvVVxcbnNwb3J0c21hbnNoaXAvTVxcbnNwb3J0c21lblxcbnNwb3J0c3Blb3BsZVxcbnNwb3J0c3BlcnNvblxcbnNwb3J0c3dlYXIvTVxcbnNwb3J0c3dvbWFuL01cXG5zcG9ydHN3b21lblxcbnNwb3J0c3dyaXRlci9TTVxcbnNwb3J0eS9UUFJcXG5zcG90L0NNU1xcbnNwb3RsZXNzL1BZXFxuc3BvdGxlc3NuZXNzL01cXG5zcG90bGlnaHQvR1NNRFxcbnNwb3RsaXRcXG5zcG90dGVkXFxuc3BvdHRlci9NU1xcbnNwb3R0aWx5XFxuc3BvdHRpbmVzcy9NXFxuc3BvdHRpbmdcXG5zcG90dHkvVFBSXFxuc3BvdXNhbC9NU1xcbnNwb3VzZS9TTVxcbnNwb3V0L1NNREdcXG5zcHJhaW4vR1NNRFxcbnNwcmFuZ1xcbnNwcmF0L1NNXFxuc3ByYXdsL0dTTURcXG5zcHJheSdzXFxuc3ByYXkvQVNER1xcbnNwcmF5ZXIvTVNcXG5zcHJlYWQvWkdCU01SXFxuc3ByZWFkZWFnbGVkXFxuc3ByZWFkZXIvTVxcbnNwcmVhZHNoZWV0L01TXFxuc3ByZWUvRFNNXFxuc3ByZWVpbmdcXG5zcHJpZy9TTVxcbnNwcmlnZ2VkXFxuc3ByaWdodGxpbmVzcy9NXFxuc3ByaWdodGx5L1JUUFxcbnNwcmluZy9HU01cXG5zcHJpbmdib2FyZC9NU1xcbnNwcmluZ2Jvay9NU1xcbnNwcmluZ2lseVxcbnNwcmluZ2luZXNzL01cXG5zcHJpbmdsaWtlXFxuc3ByaW5ndGltZS9NXFxuc3ByaW5neS9SUFRcXG5zcHJpbmtsZS9EUlNKTVpHXFxuc3ByaW5rbGVyL01cXG5zcHJpbmtsaW5nL01cXG5zcHJpbnQvWkdTTURSXFxuc3ByaW50ZXIvTVxcbnNwcml0ZS9TTVxcbnNwcml0ei9aR01EUlNcXG5zcHJpdHplci9NXFxuc3Byb2NrZXQvTVNcXG5zcHJvZy9TXFxuc3Byb3V0L0dTTURcXG5zcHJ1Y2UvRFJTUE1ZVEdcXG5zcHJ1Y2VuZXNzL01cXG5zcHJ1bmdcXG5zcHJ5L1JZVFxcbnNwcnluZXNzL01cXG5zcHVkL01TXFxuc3B1bWUvRFNNR1xcbnNwdW1vbmkvTVxcbnNwdW15XFxuc3B1blxcbnNwdW5rL1NNXFxuc3B1bmt5L1RSXFxuc3B1ci9NU1xcbnNwdXJnZS9NXFxuc3B1cmlvdXMvUFlcXG5zcHVyaW91c25lc3MvTVxcbnNwdXJuL1NER1xcbnNwdXJyZWRcXG5zcHVycmluZ1xcbnNwdXJ0L1NNREdcXG5zcHV0YVxcbnNwdXRuaWsvTVNcXG5zcHV0dGVyL01ER1NcXG5zcHV0dW0vTVxcbnNweS9HRFNNXFxuc3B5Z2xhc3MvTVNcXG5zcHltYXN0ZXIvU1xcbnNweXdhcmUvTVxcbnNxXFxuc3FxXFxuc3F1YWIvU01cXG5zcXVhYmJsZS9NWkdEUlNcXG5zcXVhYmJsZXIvTVxcbnNxdWFkL1NNXFxuc3F1YWRyb24vTVNcXG5zcXVhbGlkL1BUUllcXG5zcXVhbGlkbmVzcy9NXFxuc3F1YWxsL1NHTURcXG5zcXVhbGx5XFxuc3F1YWxvci9NXFxuc3F1YW1vdXNcXG5zcXVhbmRlci9HRFNcXG5zcXVhcmUvUERSU01ZVEdcXG5zcXVhcmVuZXNzL01cXG5zcXVhcmlzaFxcbnNxdWFzaC9HTURTXFxuc3F1YXNoeS9UUlxcbnNxdWF0L1NNUFxcbnNxdWF0bmVzcy9NXFxuc3F1YXR0ZWRcXG5zcXVhdHRlci9NU1xcbnNxdWF0dGVzdFxcbnNxdWF0dGluZ1xcbnNxdWF3L1NNXFxuc3F1YXdrL1NaR01EUlxcbnNxdWF3a2VyL01cXG5zcXVlYWsvU1pHTURSXFxuc3F1ZWFrZXIvTVxcbnNxdWVha2lseVxcbnNxdWVha2luZXNzL01cXG5zcXVlYWt5L1RSUFxcbnNxdWVhbC9TWkdNRFJcXG5zcXVlYWxlci9NXFxuc3F1ZWFtaXNoL1BZXFxuc3F1ZWFtaXNobmVzcy9NXFxuc3F1ZWVnZWUvTURTXFxuc3F1ZWVnZWVpbmdcXG5zcXVlZXplL0JNWkdEUlNcXG5zcXVlZXplYm94L1NcXG5zcXVlZXplci9NXFxuc3F1ZWxjaC9HTURTXFxuc3F1ZWxjaHlcXG5zcXVpYi9TTVxcbnNxdWlkL1NNXFxuc3F1aWRneVxcbnNxdWlmZnlcXG5zcXVpZ2dsZS9EU01HXFxuc3F1aWdnbHlcXG5zcXVpbnQvU1RHTURSXFxuc3F1aXJlL0RTTUdcXG5zcXVpcm0vU0dNRFxcbnNxdWlybXkvUlRcXG5zcXVpcnJlbC9TR01EXFxuc3F1aXJ0L1NHTURcXG5zcXVpc2gvR01EU1xcbnNxdWlzaHkvUlRcXG5zcmlyYWNoYVxcbnNzaFxcbnN0XFxuc3RhYi9NWVNcXG5zdGFiYmVkXFxuc3RhYmJlci9NU1xcbnN0YWJiaW5nL01TXFxuc3RhYmlsaXR5L0lNXFxuc3RhYmlsaXphdGlvbi9DTVxcbnN0YWJpbGl6ZS9DRFNHXFxuc3RhYmlsaXplci9NU1xcbnN0YWJsZS9EUlNNVEdcXG5zdGFibGVtYW4vTVxcbnN0YWJsZW1hdGUvU1xcbnN0YWJsZW1lblxcbnN0YWJseS9VXFxuc3RhY2NhdG8vTVNcXG5zdGFjay9TTURHXFxuc3RhZGl1bS9NU1xcbnN0YWZmJ3NcXG5zdGFmZi9BU0RHXFxuc3RhZmZlci9NU1xcbnN0YWZmaW5nL01cXG5zdGFnL01ER1NKXFxuc3RhZ2UvU01cXG5zdGFnZWNvYWNoL01TXFxuc3RhZ2VjcmFmdC9NXFxuc3RhZ2VoYW5kL01TXFxuc3RhZ2VzdHJ1Y2tcXG5zdGFnZmxhdGlvbi9NXFxuc3RhZ2dlci9NREdTXFxuc3RhZ2dlcmluZy9ZXFxuc3RhZ2luZy9NXFxuc3RhZ25hbmN5L01cXG5zdGFnbmFudC9ZXFxuc3RhZ25hdGUvRFNHTlxcbnN0YWduYXRpb24vTVxcbnN0YWd5L1JUXFxuc3RhaWQvUFJZVFxcbnN0YWlkbmVzcy9NXFxuc3RhaW4vU01ER1xcbnN0YWluZWQvVVxcbnN0YWlubGVzcy9NXFxuc3RhaXIvU01cXG5zdGFpcmNhc2UvTVNcXG5zdGFpcndheS9NU1xcbnN0YWlyd2VsbC9TTVxcbnN0YWtlL0RTTUdcXG5zdGFrZWhvbGRlci9NU1xcbnN0YWtlb3V0L1NNXFxuc3RhbGFjdGl0ZS9NU1xcbnN0YWxhZ21pdGUvTVNcXG5zdGFsZS9EUlNUR1BcXG5zdGFsZW1hdGUvRFNNR1xcbnN0YWxlbmVzcy9NXFxuc3RhbGsvU01EUkpaR1xcbnN0YWxrZXIvTVxcbnN0YWxraW5nL01cXG5zdGFsbCdzXFxuc3RhbGwvU0RHXFxuc3RhbGxob2xkZXIvU1xcbnN0YWxsaW9uL01TXFxuc3RhbHdhcnQvTVlTXFxuc3RhbWVuL1NNXFxuc3RhbWluYS9NXFxuc3RhbW1lci9aR01EUlNcXG5zdGFtbWVyZXIvTVxcbnN0YW1tZXJpbmcvWVxcbnN0YW1wL1NNRFJaR1xcbnN0YW1wZWRlL01HRFNcXG5zdGFtcGVyL01cXG5zdGFuY2UvSVNNXFxuc3RhbmNoL1RHRFJTXFxuc3RhbmNoaW9uL1NNXFxuc3RhbmQvU01SSlpHXFxuc3RhbmRhbG9uZVxcbnN0YW5kYXJkL01TXFxuc3RhbmRhcmRpemF0aW9uL01cXG5zdGFuZGFyZGl6ZS9EU0dcXG5zdGFuZGJ5L01cXG5zdGFuZGJ5c1xcbnN0YW5kZWUvTVNcXG5zdGFuZGVyL01cXG5zdGFuZGluZy9NXFxuc3RhbmRvZmYvTVNcXG5zdGFuZG9mZmlzaFxcbnN0YW5kb3V0L01TXFxuc3RhbmRwaXBlL1NNXFxuc3RhbmRwb2ludC9NU1xcbnN0YW5kc3RpbGwvTVNcXG5zdGFua1xcbnN0YW56YS9TTVxcbnN0YXBoL01cXG5zdGFwaHlsb2NvY2NhbFxcbnN0YXBoeWxvY29jY2lcXG5zdGFwaHlsb2NvY2N1cy9NXFxuc3RhcGxlL0RSU01aR1xcbnN0YXBsZXIvTVxcbnN0YXIvTURSWkdTXFxuc3RhcmJvYXJkL01cXG5zdGFyYnVyc3QvU1xcbnN0YXJjaC9HTURTXFxuc3RhcmNoaWx5XFxuc3RhcmNoaW5lc3MvTVxcbnN0YXJjaHkvUFRSXFxuc3RhcmRvbS9NXFxuc3RhcmR1c3QvTVxcbnN0YXJlL1NNXFxuc3RhcmVyL01cXG5zdGFyZmlzaC9NU1xcbnN0YXJmcnVpdFxcbnN0YXJnYXplL0RSU1pHXFxuc3RhcmdhemVyL01cXG5zdGFyay9SWVBaVFxcbnN0YXJrbmVzcy9NXFxuc3Rhcmxlc3NcXG5zdGFybGV0L01TXFxuc3RhcmxpZ2h0L01cXG5zdGFybGluZy9TTVxcbnN0YXJsaXRcXG5zdGFycmVkXFxuc3RhcnJpbmdcXG5zdGFycnkvVFJcXG5zdGFyc3RydWNrXFxuc3RhcnQvQVNNREdcXG5zdGFydGVyL01TXFxuc3RhcnRsZS9HRFNcXG5zdGFydGxpbmcvWVxcbnN0YXJ0dXAvTVNcXG5zdGFydmF0aW9uL01cXG5zdGFydmUvRFNKR1xcbnN0YXJ2ZWxpbmcvTVNcXG5zdGFzaC9NRFNHXFxuc3Rhc2lzXFxuc3RhdC9NU1xcbnN0YXRlL0RSU01ZR05MWFxcbnN0YXRlY3JhZnQvTVxcbnN0YXRlZC9VXFxuc3RhdGVob29kL01cXG5zdGF0ZWhvdXNlL01TXFxuc3RhdGVsZXNzL1BcXG5zdGF0ZWxlc3NuZXNzL01cXG5zdGF0ZWxpbmVzcy9NXFxuc3RhdGVseS9QUlRcXG5zdGF0ZW1lbnQvQU1TXFxuc3RhdGVtZW50ZWRcXG5zdGF0ZW1lbnRpbmdcXG5zdGF0ZXJvb20vTVNcXG5zdGF0ZXNpZGVcXG5zdGF0ZXNtYW4vTVxcbnN0YXRlc21hbmxpa2VcXG5zdGF0ZXNtYW5zaGlwL01cXG5zdGF0ZXNtZW5cXG5zdGF0ZXN3b21hbi9NXFxuc3RhdGVzd29tZW5cXG5zdGF0ZXdpZGVcXG5zdGF0aWMvU01cXG5zdGF0aWNhbGx5XFxuc3RhdGlvbi9NRFJaR1xcbnN0YXRpb25hcnlcXG5zdGF0aW9uZXIvTVxcbnN0YXRpb25lcnkvTVxcbnN0YXRpb25tYXN0ZXIvU1xcbnN0YXRpc3RpYy9NU1xcbnN0YXRpc3RpY2FsL1lcXG5zdGF0aXN0aWNpYW4vU01cXG5zdGF0dWFyeS9NXFxuc3RhdHVlL1NNXFxuc3RhdHVlc3F1ZVxcbnN0YXR1ZXR0ZS9NU1xcbnN0YXR1cmUvTVNcXG5zdGF0dXMvTVNcXG5zdGF0dXRlL01TXFxuc3RhdHV0b3JpbHlcXG5zdGF0dXRvcnlcXG5zdGF1bmNoL1BEUlNZVEdcXG5zdGF1bmNobmVzcy9NXFxuc3RhdmUvRFNNR1xcbnN0YXkvTURSWkdTXFxuc3RkXFxuc3RkaW9cXG5zdGVhZC9TTVxcbnN0ZWFkZmFzdC9ZUFxcbnN0ZWFkZmFzdG5lc3MvTVxcbnN0ZWFkaWx5L1VcXG5zdGVhZGluZXNzL1VNXFxuc3RlYWR5L1RHUERSU01cXG5zdGVhay9TTVxcbnN0ZWFraG91c2UvU01cXG5zdGVhbC9TTUhHXFxuc3RlYWx0aC9NXFxuc3RlYWx0aGlseVxcbnN0ZWFsdGhpbmVzcy9NXFxuc3RlYWx0aHkvVFBSXFxuc3RlYW0vU01EUlpHXFxuc3RlYW1ib2F0L01TXFxuc3RlYW1lci9NXFxuc3RlYW1maXR0ZXIvU01cXG5zdGVhbWZpdHRpbmcvTVxcbnN0ZWFtaW5lc3MvTVxcbnN0ZWFtcHVua1xcbnN0ZWFtcm9sbC9aR0RSU1xcbnN0ZWFtcm9sbGVyL01ER1xcbnN0ZWFtc2hpcC9NU1xcbnN0ZWFteS9UUFJcXG5zdGVlZC9TTVxcbnN0ZWVsL1NNREdcXG5zdGVlbGluZXNzL01cXG5zdGVlbG1ha2VyL1NcXG5zdGVlbHdvcmtlci9TTVxcbnN0ZWVsd29ya3MvTVxcbnN0ZWVseS9QVFJcXG5zdGVlbHlhcmQvU01cXG5zdGVlcC9TTUROUllQWFRHXFxuc3RlZXBlbi9HRFxcbnN0ZWVwbGUvTVNcXG5zdGVlcGxlY2hhc2UvTVNcXG5zdGVlcGxlamFjay9TTVxcbnN0ZWVwbmVzcy9NXFxuc3RlZXIvU01EQkdcXG5zdGVlcmFnZS9NXFxuc3RlZXJpbmcvTVxcbnN0ZWVyc21hbi9NXFxuc3RlZXJzbWVuXFxuc3RlZ29zYXVyaVxcbnN0ZWdvc2F1cnVzL01TXFxuc3RlaW4vU01cXG5zdGVsbGFyXFxuc3RlbS9NU1xcbnN0ZW1sZXNzXFxuc3RlbW1lZFxcbnN0ZW1taW5nXFxuc3RlbXdhcmUvTVxcbnN0ZW5jaC9NU1xcbnN0ZW5jaWwvR01EU1xcbnN0ZW5vL1NNXFxuc3Rlbm9ncmFwaGVyL1NNXFxuc3Rlbm9ncmFwaGljXFxuc3Rlbm9ncmFwaHkvTVxcbnN0ZW5vc2lzXFxuc3RlbnQvU01cXG5zdGVudG9yaWFuXFxuc3RlcC9JTVNcXG5zdGVwYnJvdGhlci9TTVxcbnN0ZXBjaGlsZC9NXFxuc3RlcGNoaWxkcmVuL01cXG5zdGVwZGFkL01TXFxuc3RlcGRhdWdodGVyL1NNXFxuc3RlcGZhdGhlci9TTVxcbnN0ZXBsYWRkZXIvTVNcXG5zdGVwbW9tL01TXFxuc3RlcG1vdGhlci9TTVxcbnN0ZXBwYXJlbnQvU01cXG5zdGVwcGUvRFJTTVpHXFxuc3RlcHBlci9NXFxuc3RlcHBpbmdzdG9uZS9TTVxcbnN0ZXBzaXN0ZXIvTVNcXG5zdGVwc29uL01TXFxuc3RlcmVvL1NNXFxuc3RlcmVvcGhvbmljXFxuc3RlcmVvc2NvcGUvTVNcXG5zdGVyZW9zY29waWNcXG5zdGVyZW90eXBlL0RTTUdcXG5zdGVyZW90eXBpY2FsXFxuc3RlcmlsZVxcbnN0ZXJpbGl0eS9NXFxuc3RlcmlsaXphdGlvbi9TTVxcbnN0ZXJpbGl6ZS9EUlNaR1xcbnN0ZXJpbGl6ZXIvTVxcbnN0ZXJsaW5nL01cXG5zdGVybi9TTVJZUFRcXG5zdGVybm5lc3MvTVxcbnN0ZXJudW0vTVNcXG5zdGVyb2lkL01TXFxuc3Rlcm9pZGFsXFxuc3RlcnRvcm91c1xcbnN0ZXQvU1xcbnN0ZXRob3Njb3BlL01TXFxuc3RldHNvbi9NU1xcbnN0ZXR0ZWRcXG5zdGV0dGluZ1xcbnN0ZXZlZG9yZS9TTVxcbnN0ZXcvTURHU1xcbnN0ZXdhcmQvR01EU1xcbnN0ZXdhcmRlc3MvTVNcXG5zdGV3YXJkc2hpcC9NXFxuc3RpY2svU01SWkdcXG5zdGlja2VyL01cXG5zdGlja2lseVxcbnN0aWNraW5lc3MvTVxcbnN0aWNrbGViYWNrL1NNXFxuc3RpY2tsZXIvTVNcXG5zdGlja3Bpbi9NU1xcbnN0aWNrdXAvTVNcXG5zdGlja3kvUFRSU01cXG5zdGlmZi9TTUROUllQWFRHXFxuc3RpZmZlbi9aR0RSXFxuc3RpZmZlbmVyL01cXG5zdGlmZmVuaW5nL01cXG5zdGlmZm5lc3MvTVxcbnN0aWZsZS9EU0pHXFxuc3RpZmxpbmcvWVxcbnN0aWdtYS9TTVxcbnN0aWdtYXRhXFxuc3RpZ21hdGljXFxuc3RpZ21hdGl6YXRpb24vTVxcbnN0aWdtYXRpemUvR0RTXFxuc3RpbGUvU01cXG5zdGlsZXR0by9TTVxcbnN0aWxsJ3NcXG5zdGlsbC9JVEdTRFxcbnN0aWxsYmlydGgvTVxcbnN0aWxsYmlydGhzXFxuc3RpbGxib3JuXFxuc3RpbGxlclxcbnN0aWxsbmVzcy9NXFxuc3RpbHQvU01EXFxuc3RpbHRlZC9ZXFxuc3RpbXVsYW50L1NNXFxuc3RpbXVsYXRlL0RTR05WXFxuc3RpbXVsYXRpb24vTVxcbnN0aW11bGlcXG5zdGltdWx1cy9NXFxuc3RpbmcvWkdTTVJcXG5zdGluZ2VyL01cXG5zdGluZ2lseVxcbnN0aW5naW5lc3MvTVxcbnN0aW5ncmF5L1NNXFxuc3Rpbmd5L1JUUFxcbnN0aW5rL1pHU01SXFxuc3RpbmtidWcvU01cXG5zdGlua2VyL01cXG5zdGlua3kvUlRcXG5zdGludC9HU01EXFxuc3RpcGVuZC9TTVxcbnN0aXBlbmRpYXJ5L1NcXG5zdGlwcGxlL0RTTUdcXG5zdGlwcGxpbmcvTVxcbnN0aXB1bGF0ZS9YRFNHTlxcbnN0aXB1bGF0aW9uL01cXG5zdGlyL01TXFxuc3RpcnJlZFxcbnN0aXJyZXIvU01cXG5zdGlycmluZy9TWVxcbnN0aXJydXAvU01cXG5zdGl0Y2gnc1xcbnN0aXRjaC9BRFNHXFxuc3RpdGNoZXJ5L01cXG5zdGl0Y2hpbmcvTVxcbnN0b2F0L1NNXFxuc3RvY2hhc3RpY1xcbnN0b2NrJ3NcXG5zdG9jay9BR1NEXFxuc3RvY2thZGUvRFNNR1xcbnN0b2NrYnJlZWRlci9NU1xcbnN0b2NrYnJva2VyL1NNXFxuc3RvY2ticm9raW5nL01cXG5zdG9ja2hvbGRlci9TTVxcbnN0b2NraWx5XFxuc3RvY2tpbmVzcy9NXFxuc3RvY2tpbmV0dGUvTVxcbnN0b2NraW5nL1NNXFxuc3RvY2tpc3QvU1xcbnN0b2NrcGlsZS9NR0RTXFxuc3RvY2twb3QvU01cXG5zdG9ja3Jvb20vTVNcXG5zdG9ja3Rha2luZy9NXFxuc3RvY2t5L1JUUFxcbnN0b2NreWFyZC9NU1xcbnN0b2RnZVxcbnN0b2RnaWx5XFxuc3RvZGdpbmVzcy9NXFxuc3RvZGd5L1JUUFxcbnN0b2dpZS9NU1xcbnN0b2ljL1NNXFxuc3RvaWNhbC9ZXFxuc3RvaWNpc20vTVxcbnN0b2tlL0RSU1pHXFxuc3Rva2VyL01cXG5zdG9sZS9TTVxcbnN0b2xlblxcbnN0b2xpZC9SWVRQXFxuc3RvbGlkaXR5L01cXG5zdG9saWRuZXNzL01cXG5zdG9sb24vTVNcXG5zdG9tYWNoL01EUlpHXFxuc3RvbWFjaGFjaGUvU01cXG5zdG9tYWNoZXIvTVxcbnN0b21hY2hzXFxuc3RvbXAvR1NNRFxcbnN0b25lL0RSU01aR1xcbnN0b25lbWFzb24vTVNcXG5zdG9uZXIvTVxcbnN0b25ld2FsbC9HU0RcXG5zdG9uZXdhcmUvTVxcbnN0b25ld2FzaGVkXFxuc3RvbmV3b3JrL01cXG5zdG9uaWx5XFxuc3RvbmluZXNzL01cXG5zdG9ua2VyZWRcXG5zdG9ua2luZ1xcbnN0b255L1RSUFxcbnN0b29kXFxuc3Rvb2dlL01TXFxuc3Rvb2wvU01cXG5zdG9vcC9HU01EXFxuc3RvcCdzXFxuc3RvcC9VU1xcbnN0b3Bjb2NrL1NNXFxuc3RvcGdhcC9TTVxcbnN0b3BsaWdodC9NU1xcbnN0b3BvdmVyL01TXFxuc3RvcHBhYmxlL1VcXG5zdG9wcGFnZS9NU1xcbnN0b3BwZWQvVVxcbnN0b3BwZXIvR1NNRFxcbnN0b3BwaW5nL1VcXG5zdG9wcGxlL0RTTUdcXG5zdG9wd2F0Y2gvTVNcXG5zdG9yYWdlL01cXG5zdG9yZSdzXFxuc3RvcmUvQURTR1xcbnN0b3JlZnJvbnQvTVNcXG5zdG9yZWhvdXNlL01TXFxuc3RvcmVrZWVwZXIvU01cXG5zdG9yZXJvb20vU01cXG5zdG9yay9TTVxcbnN0b3JtL0dTTURcXG5zdG9ybWlseVxcbnN0b3JtaW5lc3MvTVxcbnN0b3JteS9SUFRcXG5zdG9yeS9EU01cXG5zdG9yeWJvYXJkL01TXFxuc3Rvcnlib29rL1NNXFxuc3Rvcnl0ZWxsZXIvTVNcXG5zdG9yeXRlbGxpbmcvTVxcbnN0b3VwL1NNXFxuc3RvdXQvVFNNUllQXFxuc3RvdXRoZWFydGVkXFxuc3RvdXRuZXNzL01cXG5zdG92ZS9TTVxcbnN0b3ZlcGlwZS9TTVxcbnN0b3cvREdTXFxuc3Rvd2FnZS9NXFxuc3Rvd2F3YXkvTVNcXG5zdHJhZGRsZS9EUlNNWkdcXG5zdHJhZGRsZXIvTVxcbnN0cmFmZS9NR0RTXFxuc3RyYWdnbGUvRFJTWkdcXG5zdHJhZ2dsZXIvTVxcbnN0cmFnZ2x5L1RSXFxuc3RyYWlnaHQvU1BYVE1OUllcXG5zdHJhaWdodGF3YXkvU01cXG5zdHJhaWdodGVkZ2UvU01cXG5zdHJhaWdodGVuL1pHRFJcXG5zdHJhaWdodGVuZXIvTVxcbnN0cmFpZ2h0Zm9yd2FyZC9ZUFNcXG5zdHJhaWdodGZvcndhcmRuZXNzL01cXG5zdHJhaWdodG5lc3MvTVxcbnN0cmFpZ2h0d2F5XFxuc3RyYWluJ3NcXG5zdHJhaW4vRkFEU0dcXG5zdHJhaW5lci9BU01cXG5zdHJhaXQvTU5TWFxcbnN0cmFpdGVuL0dEXFxuc3RyYWl0amFja2V0L1NHTURcXG5zdHJhaXRsYWNlZFxcbnN0cmFuZC9NRFNHXFxuc3RyYW5nZS9QUllaVFxcbnN0cmFuZ2VuZXNzL01cXG5zdHJhbmdlci9NXFxuc3RyYW5nbGUvWkdEUlNcXG5zdHJhbmdsZWhvbGQvU01cXG5zdHJhbmdsZXIvTVxcbnN0cmFuZ3VsYXRlL0dORFNcXG5zdHJhbmd1bGF0aW9uL01cXG5zdHJhcCdzXFxuc3RyYXAvVVNcXG5zdHJhcGxlc3MvTVNcXG5zdHJhcHBlZC9VXFxuc3RyYXBwaW5nL01cXG5zdHJhdGFcXG5zdHJhdGFnZW0vU01cXG5zdHJhdGVnaWMvU1xcbnN0cmF0ZWdpY2FsL1lcXG5zdHJhdGVnaWNzL01cXG5zdHJhdGVnaXN0L1NNXFxuc3RyYXRlZ3kvU01cXG5zdHJhdGlcXG5zdHJhdGlmaWNhdGlvbi9NXFxuc3RyYXRpZnkvRFNHTlxcbnN0cmF0b3NwaGVyZS9TTVxcbnN0cmF0b3NwaGVyaWNcXG5zdHJhdHVtL01cXG5zdHJhdHVzL01cXG5zdHJhdy9HU01EXFxuc3RyYXdiZXJyeS9TTVxcbnN0cmF5L0dTTURcXG5zdHJlYWsvTURSU1pHXFxuc3RyZWFrZXIvTVxcbnN0cmVha3kvVFJcXG5zdHJlYW0vTURSU1pHXFxuc3RyZWFtZXIvTVxcbnN0cmVhbWxpbmUvRFNHXFxuc3RyZWV0L01TXFxuc3RyZWV0Y2FyL01TXFxuc3RyZWV0bGFtcC9TXFxuc3RyZWV0bGlnaHQvU01cXG5zdHJlZXR3YWxrZXIvU01cXG5zdHJlZXR3aXNlXFxuc3RyZW5ndGgvTVxcbnN0cmVuZ3RoZW4vQUdEU1xcbnN0cmVuZ3RoZW5lci9NU1xcbnN0cmVuZ3Roc1xcbnN0cmVudW91cy9QWVxcbnN0cmVudW91c25lc3MvTVxcbnN0cmVwL01cXG5zdHJlcHRvY29jY2FsXFxuc3RyZXB0b2NvY2NpXFxuc3RyZXB0b2NvY2N1cy9NXFxuc3RyZXB0b215Y2luL01cXG5zdHJlc3MvTURTR1xcbnN0cmVzc2VkL1VcXG5zdHJlc3NmdWxcXG5zdHJlc3NvcnNcXG5zdHJldGNoL0JaR01EUlNcXG5zdHJldGNoZXIvTURHXFxuc3RyZXRjaG1hcmtzXFxuc3RyZXRjaHkvVFJcXG5zdHJldy9HU0RIXFxuc3RyZXduXFxuc3RyaWEvTVxcbnN0cmlhZVxcbnN0cmlhdGVkXFxuc3RyaWF0aW9uL01TXFxuc3RyaWNrZW5cXG5zdHJpY3QvUllQVFxcbnN0cmljdG5lc3MvTVxcbnN0cmljdHVyZS9TTVxcbnN0cmlkZGVuXFxuc3RyaWRlL01HU1xcbnN0cmlkZW5jeS9NXFxuc3RyaWRlbnQvWVxcbnN0cmlmZS9NXFxuc3RyaWtlL01aR1JTSlxcbnN0cmlrZWJvdW5kXFxuc3RyaWtlYnJlYWtlci9TTVxcbnN0cmlrZWJyZWFraW5nXFxuc3RyaWtlb3V0L01TXFxuc3RyaWtlci9NXFxuc3RyaWtpbmcvWVxcbnN0cmluZy9NRFJTWkdcXG5zdHJpbmdlbmN5L01cXG5zdHJpbmdlbnQvWVxcbnN0cmluZ2VyL01cXG5zdHJpbmdpbmVzcy9NXFxuc3RyaW5neS9QVFJcXG5zdHJpcC9HU01EXFxuc3RyaXBlL01TXFxuc3RyaXBleVxcbnN0cmlwbGluZy9NU1xcbnN0cmlwcGVkXFxuc3RyaXBwZXIvTVNcXG5zdHJpcHBpbmdcXG5zdHJpcHRlYXNlL01aR0RSU1xcbnN0cmlwdGVhc2VyL01cXG5zdHJpcHlcXG5zdHJpdmUvR1NcXG5zdHJpdmVuXFxuc3Ryb2JlL01TXFxuc3Ryb2Jvc2NvcGUvTVNcXG5zdHJvYm9zY29waWNcXG5zdHJvZGVcXG5zdHJva2UvTUdEU1xcbnN0cm9sbC9NRFJTWkdcXG5zdHJvbGxlci9NXFxuc3Ryb25nL1JZVFxcbnN0cm9uZ2JveC9NU1xcbnN0cm9uZ2hvbGQvTVNcXG5zdHJvbmdtYW4vTVxcbnN0cm9uZ21lblxcbnN0cm9uZ3Jvb20vU1xcbnN0cm9udGl1bS9NXFxuc3Ryb3AvU01cXG5zdHJvcGhlL1NNXFxuc3Ryb3BoaWNcXG5zdHJvcHBlZFxcbnN0cm9wcGlseVxcbnN0cm9wcGluZ1xcbnN0cm9wcHkvVFJQXFxuc3Ryb3ZlXFxuc3RydWNrXFxuc3RydWN0dXJhbC9ZXFxuc3RydWN0dXJhbGlzbVxcbnN0cnVjdHVyYWxpc3QvU1xcbnN0cnVjdHVyZSdzXFxuc3RydWN0dXJlL0FHRFNcXG5zdHJ1Y3R1cmVkL1VcXG5zdHJ1ZGVsL1NNXFxuc3RydWdnbGUvTUdEU1xcbnN0cnVtL1NNXFxuc3RydW1tZWRcXG5zdHJ1bW1pbmdcXG5zdHJ1bXBldC9NU1xcbnN0cnVuZy9VQVxcbnN0cnV0L1NNXFxuc3RydXR0ZWRcXG5zdHJ1dHRpbmdcXG5zdHJ5Y2huaW5lL01cXG5zdHViL01TXFxuc3R1YmJlZFxcbnN0dWJiaW5nXFxuc3R1YmJsZS9NXFxuc3R1YmJseVxcbnN0dWJib3JuL1JZUFRcXG5zdHViYm9ybm5lc3MvTVxcbnN0dWJieS9SVFxcbnN0dWNjby9NREdcXG5zdHVjY29lc1xcbnN0dWNrL1VcXG5zdHVkL01ZU1xcbnN0dWRib29rL01TXFxuc3R1ZGRlZFxcbnN0dWRkaW5nL01cXG5zdHVkZW50L1NNXFxuc3R1ZGVudHNoaXAvU1xcbnN0dWRpZWQvVVxcbnN0dWRpZWRseVxcbnN0dWRpby9NU1xcbnN0dWRpb3VzL1BZXFxuc3R1ZGlvdXNuZXNzL01cXG5zdHVkbHkvUlRcXG5zdHVkeSdzXFxuc3R1ZHkvQUdEU1xcbnN0dWZmL0dTTURKXFxuc3R1ZmZpbHlcXG5zdHVmZmluZXNzL01cXG5zdHVmZmluZy9NXFxuc3R1ZmZ5L1JQVFxcbnN0dWx0aWZpY2F0aW9uL01cXG5zdHVsdGlmeS9EU05HXFxuc3R1bWJsZS9EUlNNWkdcXG5zdHVtYmxlci9NXFxuc3R1bXAvR1NNRFxcbnN0dW1weS9UUlxcbnN0dW4vU1xcbnN0dW5nXFxuc3R1bmtcXG5zdHVubmVkXFxuc3R1bm5lci9TXFxuc3R1bm5pbmcvWVxcbnN0dW50L0dTTURcXG5zdHVudG1hblxcbnN0dW50bWVuXFxuc3R1cGVmYWN0aW9uL01cXG5zdHVwZWZ5L0RTR1xcbnN0dXBlbmRvdXMvWVxcbnN0dXBpZC9UTVJZU1xcbnN0dXBpZGl0eS9TTVxcbnN0dXBvci9NU1xcbnN0dXJkaWx5XFxuc3R1cmRpbmVzcy9NXFxuc3R1cmR5L1RSUFxcbnN0dXJnZW9uL1NNXFxuc3R1dHRlci9NRFJTWkdcXG5zdHV0dGVyZXIvTVxcbnN0eS9TTVxcbnN0eWxlJ3NcXG5zdHlsZS9BRFNHXFxuc3R5bGlcXG5zdHlsaXNoL1BZXFxuc3R5bGlzaG5lc3MvTVxcbnN0eWxpc3QvU01cXG5zdHlsaXN0aWMvU1xcbnN0eWxpc3RpY2FsbHlcXG5zdHlsaXplL0RTR1xcbnN0eWx1cy9NU1xcbnN0eW1pZS9NRFNcXG5zdHltaWVpbmdcXG5zdHlwdGljL1NNXFxuc3Vhc2lvbi9FTVxcbnN1YXZlL1JZVFBcXG5zdWF2ZW5lc3MvTVxcbnN1YXZpdHkvTVxcbnN1Yi9TTVxcbnN1YmFsdGVybi9NU1xcbnN1YmFxdWFcXG5zdWJhcmN0aWNcXG5zdWJhcmVhL01TXFxuc3ViYXRvbWljXFxuc3ViYmFzZW1lbnQvU01cXG5zdWJiZWRcXG5zdWJiaW5nXFxuc3ViYnJhbmNoL01TXFxuc3ViY2F0ZWdvcnkvU01cXG5zdWJjbGFzc1xcbnN1YmNvbW1pdHRlZS9TTVxcbnN1YmNvbXBhY3QvU01cXG5zdWJjb25zY2lvdXMvUE1ZXFxuc3ViY29uc2Npb3VzbmVzcy9NXFxuc3ViY29udGluZW50L1NNXFxuc3ViY29udGluZW50YWxcXG5zdWJjb250cmFjdC9NRFNHXFxuc3ViY29udHJhY3Rvci9NU1xcbnN1YmN1bHR1cmUvTVNcXG5zdWJjdXRhbmVvdXMvWVxcbnN1YmRpdmlkZS9HRFNcXG5zdWJkaXZpc2lvbi9TTVxcbnN1YmRvbWFpbi9NU1xcbnN1YmRvbWluYW50XFxuc3ViZHVlL0RTR1xcbnN1YmVkaXRvci9TXFxuc3ViZmFtaWx5L1NNXFxuc3ViZnJlZXppbmdcXG5zdWJncm91cC9NU1xcbnN1YmhlYWQvR0pNU1xcbnN1YmhlYWRpbmcvTVxcbnN1Ymh1bWFuL01TXFxuc3VialxcbnN1YmplY3QvR1ZNRFNcXG5zdWJqZWN0aW9uL01cXG5zdWJqZWN0aXZlL1lcXG5zdWJqZWN0aXZpdHkvTVxcbnN1YmpvaW4vR0RTXFxuc3VianVnYXRlL0dORFNcXG5zdWJqdWdhdGlvbi9NXFxuc3VianVuY3RpdmUvU01cXG5zdWJsZWFzZS9NR0RTXFxuc3VibGV0L1NNXFxuc3VibGV0dGluZ1xcbnN1YmxpZXV0ZW5hbnQvU1xcbnN1YmxpbWF0ZS9HTkRTXFxuc3VibGltYXRpb24vTVxcbnN1YmxpbWUvWVRHRFJTXFxuc3VibGltaW5hbC9ZXFxuc3VibGltaXR5L01cXG5zdWJsaW5ndWFsXFxuc3VibWFyZ2luYWxcXG5zdWJtYXJpbmUvTVpSU1xcbnN1Ym1hcmluZXIvTVxcbnN1Ym1lcmdlL0dEU1xcbnN1Ym1lcmdlbmNlL01cXG5zdWJtZXJzZS9HTkRTXFxuc3VibWVyc2libGUvTVNcXG5zdWJtZXJzaW9uL01cXG5zdWJtaWNyb3Njb3BpY1xcbnN1Ym1pc3Npb24vTVNcXG5zdWJtaXNzaXZlL1BZXFxuc3VibWlzc2l2ZW5lc3MvTVxcbnN1Ym1pdC9BU1xcbnN1Ym1pdHRlZC9BXFxuc3VibWl0dGVyXFxuc3VibWl0dGluZy9BXFxuc3Vibm9ybWFsXFxuc3Vib3JiaXRhbFxcbnN1Ym9yZGVyL01TXFxuc3Vib3JkaW5hdGUvRFNNR05cXG5zdWJvcmRpbmF0aW9uL0lNXFxuc3Vib3JuL1NHRFxcbnN1Ym9ybmF0aW9uL01cXG5zdWJwYXJcXG5zdWJwYXJhZ3JhcGhcXG5zdWJwYXJ0XFxuc3VicGxvdC9NU1xcbnN1YnBvZW5hL0dNRFNcXG5zdWJwcmltZVxcbnN1YnByb2Zlc3Npb25hbC9TTVxcbnN1YnByb2dyYW0vU1xcbnN1YnJvdXRpbmUvU01cXG5zdWJzY3JpYmUvVUFTREdcXG5zdWJzY3JpYmVyL01TXFxuc3Vic2NyaXB0L01TXFxuc3Vic2NyaXB0aW9uL01TXFxuc3Vic2VjdGlvbi9NU1xcbnN1YnNlcXVlbnQvWVxcbnN1YnNlcnZpZW5jZS9NXFxuc3Vic2VydmllbnQvWVxcbnN1YnNldC9TTVxcbnN1YnNpZGUvR0RTXFxuc3Vic2lkZW5jZS9NXFxuc3Vic2lkaWFyaXR5XFxuc3Vic2lkaWFyeS9TTVxcbnN1YnNpZGl6YXRpb24vTVxcbnN1YnNpZGl6ZS9aR0RSU1xcbnN1YnNpZGl6ZXIvTVxcbnN1YnNpZHkvU01cXG5zdWJzaXN0L1NER1xcbnN1YnNpc3RlbmNlL01cXG5zdWJzb2lsL01cXG5zdWJzb25pY1xcbnN1YnNwYWNlXFxuc3Vic3BlY2llcy9NXFxuc3Vic3RhbmNlL1NNXFxuc3Vic3RhbmRhcmRcXG5zdWJzdGFudGlhbC9JWVxcbnN1YnN0YW50aWF0ZS9HTkRTWFxcbnN1YnN0YW50aWF0ZWQvVVxcbnN1YnN0YW50aWF0aW9uL0ZNXFxuc3Vic3RhbnRpdmUvU01ZXFxuc3Vic3RhdGlvbi9NU1xcbnN1YnN0aXR1ZW50XFxuc3Vic3RpdHV0ZS9YTUdORFNcXG5zdWJzdGl0dXRpb24vTVxcbnN1YnN0cmF0YVxcbnN1YnN0cmF0ZS9NU1xcbnN1YnN0cmF0dW0vTVxcbnN1YnN0cnVjdHVyZS9TTVxcbnN1YnN1bWUvRFNHXFxuc3Vic3VtcHRpb25cXG5zdWJzdXJmYWNlL01cXG5zdWJzeXN0ZW0vU01cXG5zdWJ0ZWVuL1NNXFxuc3VidGVuYW5jeS9NXFxuc3VidGVuYW50L1NNXFxuc3VidGVuZC9TREdcXG5zdWJ0ZXJmdWdlL1NNXFxuc3VidGVycmFuZWFuXFxuc3VidGV4dC9TTVxcbnN1YnRpdGxlL0RTTUdcXG5zdWJ0bGUvVFJcXG5zdWJ0bGV0eS9TTVxcbnN1YnRseVxcbnN1YnRvcGljL1NNXFxuc3VidG90YWwvU0dNRFxcbnN1YnRyYWN0L0dTRFxcbnN1YnRyYWN0aW9uL1NNXFxuc3VidHJhaGVuZC9TTVxcbnN1YnRyb3BpYy9TXFxuc3VidHJvcGljYWxcXG5zdWJ0cm9waWNzL01cXG5zdWJ1cmIvTVNcXG5zdWJ1cmJhbi9TTVxcbnN1YnVyYmFuaXRlL1NNXFxuc3VidXJiaWEvTVxcbnN1YnZlbnRpb24vU01cXG5zdWJ2ZXJzaW9uL01cXG5zdWJ2ZXJzaXZlL1NQTVlcXG5zdWJ2ZXJzaXZlbmVzcy9NXFxuc3VidmVydC9TREdcXG5zdWJ3YXkvTVNcXG5zdWJ6ZXJvXFxuc3VjY2VlZC9HRFNcXG5zdWNjZXNzL1ZNU1xcbnN1Y2Nlc3NmdWwvVVlcXG5zdWNjZXNzaW9uL1NNXFxuc3VjY2Vzc2l2ZS9ZXFxuc3VjY2Vzc29yL1NNXFxuc3VjY2luY3QvUllUUFxcbnN1Y2NpbmN0bmVzcy9NXFxuc3VjY29yL1NHTURcXG5zdWNjb3Rhc2gvTVxcbnN1Y2N1YmlcXG5zdWNjdWJ1c1xcbnN1Y2N1bGVuY2UvTVxcbnN1Y2N1bGVuY3kvTVxcbnN1Y2N1bGVudC9TTVxcbnN1Y2N1bWIvR0RTXFxuc3VjaFxcbnN1Y2hsaWtlXFxuc3Vjay9NRFJaR1NcXG5zdWNrZXIvR01EXFxuc3Vja2xlL0RTSkdcXG5zdWNrbGluZy9NXFxuc3Vjcm9zZS9NXFxuc3VjdGlvbi9TTURHXFxuc3VkZGVuL1BZXFxuc3VkZGVubmVzcy9NXFxuc3Vkcy9NXFxuc3Vkc3kvVFJcXG5zdWUvRFNHXFxuc3VlZGUvTVxcbnN1ZXQvTVxcbnN1ZXR5XFxuc3VmZmVyL0RSWkdTSlxcbnN1ZmZlcmFuY2UvTVxcbnN1ZmZlcmVyL01cXG5zdWZmZXJpbmcvTVxcbnN1ZmZpY2UvRFNHXFxuc3VmZmljaWVuY3kvSU1cXG5zdWZmaWNpZW50L0lZXFxuc3VmZml4L01EU0dcXG5zdWZmaXhhdGlvbi9NXFxuc3VmZm9jYXRlL0dORFNcXG5zdWZmb2NhdGlvbi9NXFxuc3VmZnJhZ2FuL01TXFxuc3VmZnJhZ2UvTVxcbnN1ZmZyYWdldHRlL1NNXFxuc3VmZnJhZ2lzdC9NU1xcbnN1ZmZ1c2UvRFNHTlxcbnN1ZmZ1c2lvbi9NXFxuc3VnYXIvR1NNRFxcbnN1Z2FyY2FuZS9NXFxuc3VnYXJjb2F0L0dEU1xcbnN1Z2FybGVzc1xcbnN1Z2FycGx1bS9NU1xcbnN1Z2FyeS9SVFxcbnN1Z2dlc3QvR1ZTRFJcXG5zdWdnZXN0aWJpbGl0eS9NXFxuc3VnZ2VzdGlibGVcXG5zdWdnZXN0aW9uL1NNXFxuc3VnZ2VzdGl2ZS9ZUFxcbnN1Z2dlc3RpdmVuZXNzL01cXG5zdWljaWRhbFxcbnN1aWNpZGUvU01cXG5zdWl0L0JNREdTXFxuc3VpdGFiaWxpdHkvVU1cXG5zdWl0YWJsZW5lc3MvTVxcbnN1aXRhYmx5L1VcXG5zdWl0Y2FzZS9TTVxcbnN1aXRlL1NNXFxuc3VpdGVkL1VcXG5zdWl0aW5nL01cXG5zdWl0b3IvTVNcXG5zdWtpeWFraS9NXFxuc3VsZmEvTVxcbnN1bGZhdGUvU01cXG5zdWxmaWRlL1NNXFxuc3VsZm9uYW1pZGVzXFxuc3VsZnVyL01EU0dcXG5zdWxmdXJpY1xcbnN1bGZ1cm91c1xcbnN1bGsvTURHU1xcbnN1bGtpbHlcXG5zdWxraW5lc3MvTVxcbnN1bGt5L1RSU01QXFxuc3VsbGVuL1JZUFRcXG5zdWxsZW5uZXNzL01cXG5zdWxsaWVkL1VcXG5zdWxseS9HRFNcXG5zdWx0YW4vTVNcXG5zdWx0YW5hL1NNXFxuc3VsdGFuYXRlL01TXFxuc3VsdHJpbHlcXG5zdWx0cmluZXNzL01cXG5zdWx0cnkvUlBUXFxuc3VtL1NNXFxuc3VtYWMvTVxcbnN1bW1hcmlseVxcbnN1bW1hcml6ZS9HRFNcXG5zdW1tYXJ5L1NNXFxuc3VtbWF0XFxuc3VtbWF0aW9uL0ZNU1xcbnN1bW1lZFxcbnN1bW1lci9NRFNHXFxuc3VtbWVyaG91c2UvU01cXG5zdW1tZXJ0aW1lL01cXG5zdW1tZXJ5XFxuc3VtbWluZ1xcbnN1bW1pdC9NU1xcbnN1bW1pdHJ5L01cXG5zdW1tb24vRFJTWkdcXG5zdW1tb25lci9NXFxuc3VtbW9ucy9HTURTXFxuc3Vtby9NXFxuc3VtcC9NU1xcbnN1bXB0dW91cy9QWVxcbnN1bXB0dW91c25lc3MvTVxcbnN1bi9TTVxcbnN1bmJhdGgvWkdNRFJTXFxuc3VuYmF0aGVcXG5zdW5iYXRoZXIvTVxcbnN1bmJhdGhpbmcvTVxcbnN1bmJhdGhzXFxuc3VuYmVhbS9TTVxcbnN1bmJlZC9TXFxuc3VuYmVsdC9TTVxcbnN1bmJsb2NrL01TXFxuc3VuYm9ubmV0L1NNXFxuc3VuYnVybi9TR01EXFxuc3VuYnVyc3QvTVNcXG5zdW5kYWUvTVNcXG5zdW5kZWNrL1NcXG5zdW5kZXIvRFNHXFxuc3VuZGlhbC9TTVxcbnN1bmRvd24vU01cXG5zdW5kcmVzcy9TXFxuc3VuZHJpZXMvTVxcbnN1bmRyeS9TXFxuc3VuZmlzaC9NU1xcbnN1bmZsb3dlci9NU1xcbnN1bmcvVVxcbnN1bmdsYXNzZXMvTVxcbnN1bmhhdC9TXFxuc3Vuay9OXFxuc3VubGFtcC9TTVxcbnN1bmxlc3NcXG5zdW5saWdodC9NXFxuc3VubGl0XFxuc3VubmVkXFxuc3VubmluZXNzL01cXG5zdW5uaW5nXFxuc3VubnkvVFJQXFxuc3VucmlzZS9TTVxcbnN1bnJvb2YvU01cXG5zdW5zY3JlZW4vTVNcXG5zdW5zZXQvTVNcXG5zdW5zaGFkZS9NU1xcbnN1bnNoaW5lL01cXG5zdW5zaGlueVxcbnN1bnNwb3QvU01cXG5zdW5zdHJva2UvTVxcbnN1bnRhbi9NU1xcbnN1bnRhbm5lZFxcbnN1bnRhbm5pbmdcXG5zdW50cmFwL1NcXG5zdW51cC9NXFxuc3VwL1NaTVJcXG5zdXBlci9NXFxuc3VwZXJhYnVuZGFuY2UvTVNcXG5zdXBlcmFidW5kYW50XFxuc3VwZXJhbm51YXRlL0dORFNcXG5zdXBlcmFubnVhdGlvbi9NXFxuc3VwZXJiL1JZVFxcbnN1cGVyY2FyZ28vTVxcbnN1cGVyY2FyZ29lc1xcbnN1cGVyY2hhcmdlL1pHRFJTXFxuc3VwZXJjaGFyZ2VyL01cXG5zdXBlcmNpbGlvdXMvUFlcXG5zdXBlcmNpbGlvdXNuZXNzL01cXG5zdXBlcmNpdHkvU01cXG5zdXBlcmNvbXB1dGVyL01TXFxuc3VwZXJjb25kdWN0aW5nXFxuc3VwZXJjb25kdWN0aXZlXFxuc3VwZXJjb25kdWN0aXZpdHkvTVxcbnN1cGVyY29uZHVjdG9yL1NNXFxuc3VwZXJjcml0aWNhbFxcbnN1cGVyZWdvL01TXFxuc3VwZXJlcm9nYXRpb24vTVxcbnN1cGVyZXJvZ2F0b3J5XFxuc3VwZXJmaWNpYWwvWVxcbnN1cGVyZmljaWFsaXR5L01cXG5zdXBlcmZpbmVcXG5zdXBlcmZsdWl0eS9NXFxuc3VwZXJmbHVvdXMvWVBcXG5zdXBlcmZsdW91c25lc3MvTVxcbnN1cGVyZ2x1ZVxcbnN1cGVyZ3Jhc3MvU1xcbnN1cGVyaGVyby9NU1xcbnN1cGVyaGVyb2VzXFxuc3VwZXJoaWdod2F5L1NNXFxuc3VwZXJodW1hblxcbnN1cGVyaW1wb3NlL0dEU1xcbnN1cGVyaW1wb3NpdGlvbi9NXFxuc3VwZXJpbnRlbmQvRFNHXFxuc3VwZXJpbnRlbmRlbmNlL01cXG5zdXBlcmludGVuZGVuY3kvTVxcbnN1cGVyaW50ZW5kZW50L1NNXFxuc3VwZXJpb3IvTVNcXG5zdXBlcmlvcml0eS9NXFxuc3VwZXJsYXRpdmUvU01ZXFxuc3VwZXJtYW4vTVxcbnN1cGVybWFya2V0L1NNXFxuc3VwZXJtYXNzaXZlXFxuc3VwZXJtZW5cXG5zdXBlcm1vZGVsL1NNXFxuc3VwZXJtb20vTVNcXG5zdXBlcm5hbFxcbnN1cGVybmF0dXJhbC9TWVxcbnN1cGVybm92YS9NU1xcbnN1cGVybm92YWVcXG5zdXBlcm51bWVyYXJ5L1NNXFxuc3VwZXJwb3NlL0dEU1xcbnN1cGVycG9zaXRpb24vTVxcbnN1cGVycG93ZXIvU01cXG5zdXBlcnNhdHVyYXRlL0dORFNcXG5zdXBlcnNhdHVyYXRpb24vTVxcbnN1cGVyc2NyaWJlL0dEU1xcbnN1cGVyc2NyaXB0L01TXFxuc3VwZXJzY3JpcHRpb24vTVxcbnN1cGVyc2VkZS9HRFNcXG5zdXBlcnNpemUvR0RTXFxuc3VwZXJzb25pY1xcbnN1cGVyc3ByZWFkZXIvU01cXG5zdXBlcnN0YXIvTVNcXG5zdXBlcnN0YXJkb21cXG5zdXBlcnN0YXRlL1NcXG5zdXBlcnN0aXRpb24vTVNcXG5zdXBlcnN0aXRpb3VzL1lcXG5zdXBlcnN0b3JlL01TXFxuc3VwZXJzdHJ1Y3R1cmUvTVNcXG5zdXBlcnRhbmtlci9NU1xcbnN1cGVydXNlci9TXFxuc3VwZXJ2ZW5lL0dEU1xcbnN1cGVydmVudGlvbi9NXFxuc3VwZXJ2aXNlL1hHTkRTXFxuc3VwZXJ2aXNlZC9VXFxuc3VwZXJ2aXNpb24vTVxcbnN1cGVydmlzb3IvTVNcXG5zdXBlcnZpc29yeVxcbnN1cGVyd29tYW4vTVxcbnN1cGVyd29tZW5cXG5zdXBpbmUvWVxcbnN1cHAvRFJaR1xcbnN1cHBlci9NXFxuc3VwcGVydGltZVxcbnN1cHBsXFxuc3VwcGxhbnQvU0RHXFxuc3VwcGxlL1RMUFJcXG5zdXBwbGVtZW50L01ER1NcXG5zdXBwbGVtZW50YWxcXG5zdXBwbGVtZW50YXJ5XFxuc3VwcGxlbWVudGF0aW9uL01cXG5zdXBwbGVuZXNzL01cXG5zdXBwbGlhbnQvU01cXG5zdXBwbGljYW50L01TXFxuc3VwcGxpY2F0ZS9HRFNcXG5zdXBwbGljYXRpb24vTVxcbnN1cHBsaWVyL01cXG5zdXBwbHkvWkdEUlNNWE5cXG5zdXBwb3J0L01EUlNCWkdWXFxuc3VwcG9ydGFibGUvVUlcXG5zdXBwb3J0ZWQvVVxcbnN1cHBvcnRlci9NXFxuc3VwcG9zZS9HRFNcXG5zdXBwb3NlZC9ZXFxuc3VwcG9zaXRpb24vTVNcXG5zdXBwb3NpdG9yeS9TTVxcbnN1cHByZXNzL0dWRFNcXG5zdXBwcmVzc2FudC9NU1xcbnN1cHByZXNzaWJsZVxcbnN1cHByZXNzaW9uL01cXG5zdXBwcmVzc29yL1NNXFxuc3VwcHVyYXRlL0RTR05cXG5zdXBwdXJhdGlvbi9NXFxuc3VwcmFcXG5zdXByYW5hdGlvbmFsXFxuc3VwcmVtYWNpc3QvTVNcXG5zdXByZW1hY3kvTVxcbnN1cHJlbWUvWVxcbnN1cHJlbW8vU1xcbnN1cHRcXG5zdXJjZWFzZS9EU01HXFxuc3VyY2hhcmdlL0RTTUdcXG5zdXJjaW5nbGUvU01cXG5zdXJlL1BZVFJcXG5zdXJlZmlyZVxcbnN1cmVmb290ZWRcXG5zdXJlbmVzcy9NXFxuc3VyZXR5L1NNXFxuc3VyZi9NRFJaR1NcXG5zdXJmYWNlJ3NcXG5zdXJmYWNlL0FHRFNcXG5zdXJmYm9hcmQvTURTR1xcbnN1cmZlaXQvTURTR1xcbnN1cmZlci9NXFxuc3VyZmluZy9NXFxuc3VyZ2UvRFNNR1xcbnN1cmdlb24vTVNcXG5zdXJnZXJ5L1NNXFxuc3VyZ2ljYWwvWVxcbnN1cmxpbmVzcy9NXFxuc3VybHkvUFRSXFxuc3VybWlzZS9NR0RTXFxuc3VybW91bnQvREdTQlxcbnN1cm1vdW50YWJsZS9JXFxuc3VybmFtZS9NU1xcbnN1cnBhc3MvR0RTXFxuc3VycGFzc2VkL1VcXG5zdXJwbGljZS9NU1xcbnN1cnBsdXMvTVNcXG5zdXJwbHVzc2VkXFxuc3VycGx1c3NpbmdcXG5zdXJwcmlzZS9EU01HSlxcbnN1cnByaXNpbmcvVVlcXG5zdXJyZWFsXFxuc3VycmVhbGlzbS9NXFxuc3VycmVhbGlzdC9TTVxcbnN1cnJlYWxpc3RpY1xcbnN1cnJlYWxpc3RpY2FsbHlcXG5zdXJyZW5kZXIvTURTR1xcbnN1cnJlcHRpdGlvdXMvUFlcXG5zdXJyZXB0aXRpb3VzbmVzcy9NXFxuc3VycmV5L01TXFxuc3Vycm9nYWN5L01cXG5zdXJyb2dhdGUvU01cXG5zdXJyb3VuZC9HU0RKXFxuc3Vycm91bmRpbmcvTVxcbnN1cnJvdW5kaW5ncy9NXFxuc3VydGF4L01EU0dcXG5zdXJ0aXRsZS9TXFxuc3VydmVpbGxhbmNlL01cXG5zdXJ2ZXknc1xcbnN1cnZleS9BREdTXFxuc3VydmV5aW5nL01cXG5zdXJ2ZXlvci9TTVxcbnN1cnZpdmFsL1NNXFxuc3Vydml2YWxpc3QvU01cXG5zdXJ2aXZlL0RTR0JcXG5zdXJ2aXZvci9TTVxcbnN1c2NlcHRpYmlsaXR5L1NNXFxuc3VzY2VwdGlibGUvSVxcbnN1c2hpL01cXG5zdXNwZWN0L1NNREdcXG5zdXNwZWN0ZWQvVVxcbnN1c3BlbmQvU0RSWkdcXG5zdXNwZW5kZXIvTVxcbnN1c3BlbnNlL1hNTlxcbnN1c3BlbnNlZnVsXFxuc3VzcGVuc2lvbi9NXFxuc3VzcGljaW9uL1NNXFxuc3VzcGljaW91cy9ZXFxuc3Vzcy9EU0dcXG5zdXN0YWluL1NEQkdcXG5zdXN0YWluYWJpbGl0eVxcbnN1c3RhaW5hYmxlL1VcXG5zdXN0YWluYWJseVxcbnN1c3RlbmFuY2UvTVxcbnN1dGxlci9NU1xcbnN1dHRlZVxcbnN1dHVyZS9NR0RTXFxuc3V6ZXJhaW4vTVNcXG5zdXplcmFpbnR5L01cXG5zdmVsdGUvVFJcXG5zd2FiL01TXFxuc3dhYmJlZFxcbnN3YWJiaW5nXFxuc3dhZGRsZS9EU0dcXG5zd2FnL01TXFxuc3dhZ2dlZFxcbnN3YWdnZXIvU01EUkdcXG5zd2FnZ2luZ1xcbnN3YWluL1NNXFxuc3dhbGxvdy9HU01EXFxuc3dhbGxvd3RhaWwvTVNcXG5zd2FtXFxuc3dhbWkvU01cXG5zd2FtcC9HU01EXFxuc3dhbXBsYW5kL01cXG5zd2FtcHkvUlRcXG5zd2FuL01TXFxuc3dhbmsvVEdTTURSXFxuc3dhbmtpbHlcXG5zd2Fua2luZXNzL01cXG5zd2Fua3kvUlBUXFxuc3dhbm5lZFxcbnN3YW5uaW5nXFxuc3dhbnNvbmcvU1xcbnN3YXAvTVNcXG5zd2FwcGVkXFxuc3dhcHBpbmdcXG5zd2FyZC9TTVxcbnN3YXJtL0dTTURcXG5zd2FydGh5L1RSXFxuc3dhc2gvR01EU1xcbnN3YXNoYnVja2xlci9TTVxcbnN3YXNoYnVja2xpbmcvTVxcbnN3YXN0aWthL1NNXFxuc3dhdC9NU1xcbnN3YXRjaC9NU1xcbnN3YXRoL0dNRFNcXG5zd2F0aGUvTVxcbnN3YXRoc1xcbnN3YXR0ZWRcXG5zd2F0dGVyL1NNREdcXG5zd2F0dGluZ1xcbnN3YXkvTURHU1xcbnN3YXliYWNrL01EXFxuc3dheWVkL1VcXG5zd2Vhci9aR1NSXFxuc3dlYXJlci9NXFxuc3dlYXJ3b3JkL01TXFxuc3dlYXQvWkdTTURSXFxuc3dlYXRiYW5kL01TXFxuc3dlYXRlci9NXFxuc3dlYXRwYW50cy9NXFxuc3dlYXRzL01cXG5zd2VhdHNoaXJ0L1NNXFxuc3dlYXRzaG9wL01TXFxuc3dlYXRzdWl0L1NcXG5zd2VhdHkvUlRcXG5zd2VkZS9TTVxcbnN3ZWVwL1pHU01SSlxcbnN3ZWVwZXIvTVxcbnN3ZWVwaW5nL01ZXFxuc3dlZXBpbmdzL01cXG5zd2VlcHN0YWtlcy9NXFxuc3dlZXQvWFRTTU5SWVBcXG5zd2VldGJyZWFkL1NNXFxuc3dlZXRicmllci9TTVxcbnN3ZWV0Y29yblxcbnN3ZWV0ZW5lZC9VXFxuc3dlZXRlbmVyL01TXFxuc3dlZXRlbmluZy9NXFxuc3dlZXRoZWFydC9TTVxcbnN3ZWV0aWUvU01cXG5zd2VldGlzaFxcbnN3ZWV0bWVhdC9NU1xcbnN3ZWV0bmVzcy9NXFxuc3dlbGwvVEdTTURSSlxcbnN3ZWxsaGVhZC9NRFNcXG5zd2VsbGluZy9NXFxuc3dlbHRlci9TR01EXFxuc3dlcHRcXG5zd2VwdGJhY2tcXG5zd2VydmUvTUdEU1xcbnN3ZXJ2aW5nL1VcXG5zd2lmdC9QVFNNUllcXG5zd2lmdG5lc3MvTVxcbnN3aWcvTVNcXG5zd2lnZ2VkXFxuc3dpZ2dpbmdcXG5zd2lsbC9HU01EXFxuc3dpbS9NU1xcbnN3aW1tZXIvU01cXG5zd2ltbWluZy9NWVxcbnN3aW1zdWl0L1NNXFxuc3dpbXdlYXJcXG5zd2luZGxlL0RSU01aR1xcbnN3aW5kbGVyL01cXG5zd2luZS9TTVxcbnN3aW5laGVyZC9TTVxcbnN3aW5nL1pHU01SXFxuc3dpbmdlaW5nXFxuc3dpbmdlci9NXFxuc3dpbmlzaFxcbnN3aXBlL0RTTUdcXG5zd2lybC9HU01EXFxuc3dpcmx5XFxuc3dpc2gvVEdNRFJTXFxuc3dpdGNoL01EUlNaR0JcXG5zd2l0Y2hiYWNrL01TXFxuc3dpdGNoYmxhZGUvU01cXG5zd2l0Y2hib2FyZC9TTVxcbnN3aXRjaGVyL01cXG5zd2l0Y2hvdmVyXFxuc3dpdmVsL01ER1NcXG5zd2l6XFxuc3dpenpcXG5zd2l6emxlL0RTR1xcbnN3b2xsZW5cXG5zd29vbi9TR01EXFxuc3dvb3AvU0dNRFxcbnN3b29zaC9NRFNHXFxuc3dvcmQvU01cXG5zd29yZGZpc2gvTVNcXG5zd29yZHBsYXkvTVxcbnN3b3Jkc21hbi9NXFxuc3dvcmRzbWFuc2hpcC9NXFxuc3dvcmRzbWVuXFxuc3dvcmVcXG5zd29yblxcbnN3b3QvU1xcbnN3b3R0ZWRcXG5zd290dGluZ1xcbnN3dW1cXG5zd3VuZ1xcbnN5YmFyaXRlL1NNXFxuc3liYXJpdGljXFxuc3ljYW1vcmUvTVNcXG5zeWNvcGhhbmN5L01cXG5zeWNvcGhhbnQvU01cXG5zeWNvcGhhbnRpY1xcbnN5bGxhYmljXFxuc3lsbGFiaWNhdGUvR05EU1xcbnN5bGxhYmljYXRpb24vTVxcbnN5bGxhYmlmaWNhdGlvbi9NXFxuc3lsbGFiaWZ5L0RTTkdcXG5zeWxsYWJsZS9NU1xcbnN5bGxhYnViL1NcXG5zeWxsYWJ1cy9NU1xcbnN5bGxvZ2lzbS9NU1xcbnN5bGxvZ2lzdGljXFxuc3lscGgvTVxcbnN5bHBoaWNcXG5zeWxwaGxpa2VcXG5zeWxwaHNcXG5zeWx2YW5cXG5zeW1iaW9zZXNcXG5zeW1iaW9zaXMvTVxcbnN5bWJpb3RpY1xcbnN5bWJpb3RpY2FsbHlcXG5zeW1ib2wvTVNcXG5zeW1ib2xpY1xcbnN5bWJvbGljYWwvWVxcbnN5bWJvbGlzbS9NXFxuc3ltYm9saXphdGlvbi9NXFxuc3ltYm9saXplL0RTR1xcbnN5bWJvbG9neVxcbnN5bW1ldHJpY1xcbnN5bW1ldHJpY2FsL1lcXG5zeW1tZXRyeS9TTVxcbnN5bXBhdGhldGljL1VcXG5zeW1wYXRoZXRpY2FsbHkvVVxcbnN5bXBhdGhpZXMvTVxcbnN5bXBhdGhpemUvWkdEUlNcXG5zeW1wYXRoaXplci9NXFxuc3ltcGF0aHkvU01cXG5zeW1waG9uaWNcXG5zeW1waG9ueS9TTVxcbnN5bXBvc2l1bS9NU1xcbnN5bXB0b20vTVNcXG5zeW1wdG9tYXRpY1xcbnN5bXB0b21hdGljYWxseVxcbnN5bi9IXFxuc3luYWdvZ2FsXFxuc3luYWdvZ3VlL1NNXFxuc3luYXBzZS9NU1xcbnN5bmFwdGljXFxuc3luYy9NRFNHXFxuc3luY2hyb25pY2l0eVxcbnN5bmNocm9uaXphdGlvbi9TTVxcbnN5bmNocm9uaXplL0dEU1xcbnN5bmNocm9ub3VzL1lcXG5zeW5jaHJvbnlcXG5zeW5jb3BhdGUvRFNHTlxcbnN5bmNvcGF0aW9uL01cXG5zeW5jb3BlL01cXG5zeW5kaWNhbGlzbVxcbnN5bmRpY2FsaXN0L1NcXG5zeW5kaWNhdGUvRFNNR05cXG5zeW5kaWNhdGlvbi9NXFxuc3luZHJvbWUvU01cXG5zeW5lcmdpc20vTVxcbnN5bmVyZ2lzdGljXFxuc3luZXJneS9TTVxcbnN5bmZ1ZWwvTVNcXG5zeW5vZC9TTVxcbnN5bm9ueW0vU01cXG5zeW5vbnltb3VzXFxuc3lub255bXkvTVxcbnN5bm9wc2VzXFxuc3lub3BzaXMvTVxcbnN5bm9wdGljXFxuc3lub3ZpYWxcXG5zeW50YWN0aWNcXG5zeW50YWN0aWNhbC9ZXFxuc3ludGF4L01cXG5zeW50aGVzZXNcXG5zeW50aGVzaXMvTVxcbnN5bnRoZXNpemUvWkdEUlNcXG5zeW50aGVzaXplci9NXFxuc3ludGhldGljL1NNXFxuc3ludGhldGljYWxseVxcbnN5bnRoc1xcbnN5cGhpbGlzL01cXG5zeXBoaWxpdGljL1NNXFxuc3lyaW5nZS9EU01HXFxuc3lydXAvU01cXG5zeXJ1cHlcXG5zeXNhZG1pbi9TXFxuc3lzb3AvU1xcbnN5c3RlbS9TTVxcbnN5c3RlbWF0aWMvVVxcbnN5c3RlbWF0aWNhbC9ZXFxuc3lzdGVtYXRpemF0aW9uL01cXG5zeXN0ZW1hdGl6ZS9HRFNcXG5zeXN0ZW1pYy9NU1xcbnN5c3RlbWljYWxseVxcbnN5c3RvbGUvU01cXG5zeXN0b2xpY1xcbnQvU0ROWEdCSlxcbnRhXFxudGFiL1NNXFxudGFiYmVkXFxudGFiYmluZ1xcbnRhYmJvdWxlaC9NXFxudGFiYnkvU01cXG50YWJlcm5hY2xlL1NNXFxudGFibGEvTVNcXG50YWJsZS9NR0RTXFxudGFibGVhdS9NXFxudGFibGVhdXhcXG50YWJsZWNsb3RoL01cXG50YWJsZWNsb3Roc1xcbnRhYmxlbGFuZC9TTVxcbnRhYmxlc3Bvb24vU01cXG50YWJsZXNwb29uZnVsL1NNXFxudGFibGV0L1NNXFxudGFibGV0b3AvTVNcXG50YWJsZXdhcmUvTVxcbnRhYmxvaWQvU01cXG50YWJvby9NRFNHXFxudGFib3IvTVNcXG50YWJ1bGFyXFxudGFidWxhdGUvRFNHTlhcXG50YWJ1bGF0aW9uL01cXG50YWJ1bGF0b3IvU01cXG50YWNob2dyYXBoXFxudGFjaG9ncmFwaHNcXG50YWNob21ldGVyL1NNXFxudGFjaHljYXJkaWEvTVxcbnRhY2h5b25cXG50YWNpdC9QWVxcbnRhY2l0bmVzcy9NXFxudGFjaXR1cm4vWVxcbnRhY2l0dXJuaXR5L01cXG50YWNrL1pHTURSU1xcbnRhY2tlci9NXFxudGFja2luZXNzL01cXG50YWNrbGUvRFJTTVpHXFxudGFja2xlci9NXFxudGFja3kvUlRQXFxudGFjby9NU1xcbnRhY3QvRk1cXG50YWN0ZnVsL1lQXFxudGFjdGZ1bG5lc3MvTVxcbnRhY3RpYy9TTVxcbnRhY3RpY2FsL1lcXG50YWN0aWNpYW4vTVNcXG50YWN0aWxlXFxudGFjdGlsaXR5L01cXG50YWN0bGVzcy9QWVxcbnRhY3RsZXNzbmVzcy9NXFxudGFkL1NNXFxudGFkcG9sZS9NU1xcbnRhZmZldGEvTVxcbnRhZmZyYWlsL1NNXFxudGFmZnkvU01cXG50YWcvU01cXG50YWdnZWRcXG50YWdnZXIvU01cXG50YWdnaW5nXFxudGFnbGlhdGVsbGVcXG50YWdsaW5lL01TXFxudGFpZ2EvTVNcXG50YWlsL0FDU0RNR1xcbnRhaWxiYWNrL01TXFxudGFpbGJvYXJkL1NcXG50YWlsYm9uZS9TXFxudGFpbGNvYXQvTVNcXG50YWlsZ2F0ZS9NWkdEUlNcXG50YWlsZ2F0ZXIvTVxcbnRhaWxsZXNzXFxudGFpbGxpZ2h0L01TXFxudGFpbG9yL1NHTURcXG50YWlsb3JpbmcvTVxcbnRhaWxwaWVjZS9TXFxudGFpbHBpcGUvU01cXG50YWlsc3Bpbi9TTVxcbnRhaWx3aW5kL1NNXFxudGFpbnQvTURTR1xcbnRhaW50ZWQvVVxcbnRha2UvQUlNU1xcbnRha2Vhd2F5L1NcXG50YWtlbi9BXFxudGFrZW9mZi9NU1xcbnRha2VvdXQvTVNcXG50YWtlb3Zlci9TTVxcbnRha2VyL01TXFxudGFraW5nL1NNXFxudGFraW5ncy9NXFxudGFsYy9NXFxudGFsY3VtL01cXG50YWxlL01TXFxudGFsZWJlYXJlci9NU1xcbnRhbGVudC9TTURcXG50YWxlbnRlZC9VXFxudGFsaVxcbnRhbGlzbWFuL01TXFxudGFsay9aR01EUlNcXG50YWxrYXRpdmUvUFlcXG50YWxrYXRpdmVuZXNzL01cXG50YWxrZXIvTVxcbnRhbGtpZS9SU01UXFxudGFsa3lcXG50YWxsL1RSUFxcbnRhbGxib3kvTVNcXG50YWxsaWVyL01cXG50YWxsaXNoXFxudGFsbG5lc3MvTVxcbnRhbGxvdy9NXFxudGFsbG93eVxcbnRhbGx5L0RSU01aR1xcbnRhbGx5aG8vTURHU1xcbnRhbG9uL01TXFxudGFsdXMvTVNcXG50YW0vU01cXG50YW1hbGUvU01cXG50YW1hcmFjay9NU1xcbnRhbWFyaW5kL01TXFxudGFtYm91cmluZS9NU1xcbnRhbWUvQllaVEdEUlNQXFxudGFtZWQvVVxcbnRhbWVuZXNzL01cXG50YW1lci9NXFxudGFtb3hpZmVuXFxudGFtcC9aR0RSU1xcbnRhbXBlci9aR0RSXFxudGFtcGVyZXIvTVxcbnRhbXBvbi9TTVxcbnRhbi9TTVxcbnRhbmFnZXIvTVNcXG50YW5iYXJrL01cXG50YW5kZW0vU01cXG50YW5kb29yaS9NXFxudGFuZy9NU1xcbnRhbmdlbG8vTVNcXG50YW5nZW50L01TXFxudGFuZ2VudGlhbC9ZXFxudGFuZ2VyaW5lL01TXFxudGFuZ2liaWxpdHkvSU1cXG50YW5naWJsZS9JTVNcXG50YW5naWJsZW5lc3MvTVxcbnRhbmdpYmx5L0lcXG50YW5nbGUnc1xcbnRhbmdsZS9VRFNHXFxudGFuZ28vTURTR1xcbnRhbmd5L1JUXFxudGFuay9aR01EUlNcXG50YW5rYXJkL01TXFxudGFua2VyL01cXG50YW5rZnVsL01TXFxudGFubmVkL1VcXG50YW5uZXIvU01cXG50YW5uZXJ5L1NNXFxudGFubmVzdFxcbnRhbm5pbi9NXFxudGFubmluZy9NXFxudGFuc3kvTVxcbnRhbnRhbGl6YXRpb24vTVxcbnRhbnRhbGl6ZS9aR0RSU1xcbnRhbnRhbGl6ZXIvTVxcbnRhbnRhbGl6aW5nL1lcXG50YW50YWx1bS9NXFxudGFudGFtb3VudFxcbnRhbnRyYS9NXFxudGFudHJ1bS9TTVxcbnRhcC9TWkdNRFJcXG50YXBhc1xcbnRhcGUvTVNcXG50YXBlbGluZS9NU1xcbnRhcGVyL01ER1xcbnRhcGVzdHJ5L1NNXFxudGFwZXdvcm0vTVNcXG50YXBpb2NhL01cXG50YXBpci9NU1xcbnRhcHBlZC9VXFxudGFwcGVyL01TXFxudGFwcGV0L01TXFxudGFwcGluZ1xcbnRhcHJvb20vU01cXG50YXByb290L1NNXFxudGFyL1NHTURcXG50YXJhbWFzYWxhdGFcXG50YXJhbnRlbGxhL01TXFxudGFyYW50dWxhL1NNXFxudGFyYmFsbC9TXFxudGFyZGlseVxcbnRhcmRpbmVzcy9NXFxudGFyZHkvVFBSXFxudGFyZS9NU1xcbnRhcmdldC9NREdTXFxudGFyaWZmL01TXFxudGFybWFjL01TXFxudGFybWFjYWRhbVxcbnRhcm1hY2tlZFxcbnRhcm1hY2tpbmdcXG50YXJuL01TXFxudGFybmlzaC9HTURTXFxudGFybmlzaGVkL1VcXG50YXJvL01TXFxudGFyb3QvTVNcXG50YXJwL01TXFxudGFycGF1bGluL01TXFxudGFycG9uL01TXFxudGFycmFnb24vU01cXG50YXJyZWRcXG50YXJyaW5nXFxudGFycnkvVEdEUlNcXG50YXJzYWwvTVNcXG50YXJzaVxcbnRhcnN1cy9NXFxudGFydC9QVEdNRFJZU1xcbnRhcnRhbi9NU1xcbnRhcnRhci9NU1xcbnRhcnRhcmljXFxudGFydG5lc3MvTVxcbnRhcnR5L1RcXG50YXNlci9HTURTXFxudGFzay9HTURTXFxudGFza2JhclxcbnRhc2ttYXN0ZXIvTVNcXG50YXNrbWlzdHJlc3MvTVNcXG50YXNzZWwvTURTR1xcbnRhc3RlL0pNWkdEUlNcXG50YXN0ZWQvVVxcbnRhc3RlZnVsL0VQWVxcbnRhc3RlZnVsbmVzcy9FTVxcbnRhc3RlbGVzcy9QWVxcbnRhc3RlbGVzc25lc3MvTVxcbnRhc3Rlci9NXFxudGFzdGlseVxcbnRhc3RpbmVzcy9NXFxudGFzdGluZy9NXFxudGFzdHkvVFJQXFxudGF0L1NaUlxcbnRhdGFtaS9NU1xcbnRhdGVyL01cXG50YXR0ZWRcXG50YXR0ZXIvTURTR1xcbnRhdHRlcmRlbWFsaW9uL01TXFxudGF0dGllXFxudGF0dGluZy9NXFxudGF0dGxlL01aR0RSU1xcbnRhdHRsZXIvTVxcbnRhdHRsZXRhbGUvTVNcXG50YXR0b28vTURSU1pHXFxudGF0dG9vZXIvTVxcbnRhdHRvb2lzdC9TTVxcbnRhdHR5L1RSU1xcbnRhdS9TTVxcbnRhdWdodC9VQVxcbnRhdW50L1pHTURSU1xcbnRhdW50ZXIvTVxcbnRhdW50aW5nL1lcXG50YXVwZS9NXFxudGF1dC9QWFROUllcXG50YXV0ZW4vREdcXG50YXV0bmVzcy9NXFxudGF1dG9sb2dpY2FsL1lcXG50YXV0b2xvZ291c1xcbnRhdXRvbG9neS9TTVxcbnRhdmVybi9NU1xcbnRhd2RyaWx5XFxudGF3ZHJpbmVzcy9NXFxudGF3ZHJ5L1JUUFxcbnRhd255L1RSTVxcbnRheC9CWkdNRFJTXFxudGF4YVxcbnRheGF0aW9uL01cXG50YXhlci9NXFxudGF4aS9HTURTXFxudGF4aWNhYi9TTVxcbnRheGlkZXJtaXN0L1NNXFxudGF4aWRlcm15L01cXG50YXhpbWV0ZXIvTVNcXG50YXhpd2F5L1NcXG50YXhtYW5cXG50YXhtZW5cXG50YXhvblxcbnRheG9ub21pY1xcbnRheG9ub21pc3QvTVNcXG50YXhvbm9teS9TTVxcbnRheHBheWVyL01TXFxudGF4cGF5aW5nXFxudGIvU1xcbnRic3BcXG50ZWEvU01cXG50ZWFiYWcvU1xcbnRlYWNha2UvU01cXG50ZWFjaC9aR1JTQkpcXG50ZWFjaGFibGUvVVxcbnRlYWNoZXIvTVxcbnRlYWNoaW5nL01cXG50ZWFjdXAvTVNcXG50ZWFjdXBmdWwvTVNcXG50ZWFrL01TXFxudGVha2V0dGxlL1NNXFxudGVhbC9NU1xcbnRlYWxpZ2h0L01TXFxudGVhbS9HTURTXFxudGVhbW1hdGUvTVNcXG50ZWFtc3Rlci9NU1xcbnRlYW13b3JrL01cXG50ZWFwb3QvTVNcXG50ZWFyL0dNRFNcXG50ZWFyYXdheS9TXFxudGVhcmRyb3AvU01cXG50ZWFyZnVsL1lcXG50ZWFyZ2FzL01TXFxudGVhcmdhc3NlZFxcbnRlYXJnYXNzaW5nXFxudGVhcmplcmtlci9NU1xcbnRlYXJvb20vU01cXG50ZWFyeS9UUlxcbnRlYXNlL01aR0RSU1xcbnRlYXNlbC9NU1xcbnRlYXNlci9NXFxudGVhc2luZy9ZXFxudGVhc3Bvb24vU01cXG50ZWFzcG9vbmZ1bC9TTVxcbnRlYXQvTVNcXG50ZWF0aW1lL1NcXG50ZWNoL01cXG50ZWNoaWUvU1xcbnRlY2huZXRpdW0vTVxcbnRlY2huaWNhbC9ZXFxudGVjaG5pY2FsaXR5L1NNXFxudGVjaG5pY2lhbi9TTVxcbnRlY2huaWNvbG9yXFxudGVjaG5pcXVlL1NNXFxudGVjaG5vXFxudGVjaG5vYmFiYmxlXFxudGVjaG5vY3JhY3kvU01cXG50ZWNobm9jcmF0L01TXFxudGVjaG5vY3JhdGljXFxudGVjaG5vbG9naWNhbC9ZXFxudGVjaG5vbG9naXN0L01TXFxudGVjaG5vbG9neS9TTVxcbnRlY2hub3Bob2JlL1NcXG50ZWNoc1xcbnRlY3RvbmljL1NcXG50ZWN0b25pY3MvTVxcbnRlZC9TXFxudGVkZHkvU1xcbnRlZGlvdXMvUFlcXG50ZWRpb3VzbmVzcy9NXFxudGVkaXVtL01cXG50ZWUvRFNNSFxcbnRlZWluZ1xcbnRlZW0vR0RTXFxudGVlbi9NU1xcbnRlZW5hZ2UvUlpcXG50ZWVuYWdlci9NXFxudGVlbnkvVFJcXG50ZWVueWJvcHBlci9NU1xcbnRlZXRlci9NRFNHXFxudGVldGhlL0dEU1xcbnRlZXRoaW5nL01cXG50ZWV0b3RhbC9SWlxcbnRlZXRvdGFsZXIvTVxcbnRlZXRvdGFsaXNtL01cXG50ZWt0aXRlL1NNXFxudGVsXFxudGVsZWNhc3QvU1pHTVJcXG50ZWxlY2FzdGVyL01cXG50ZWxlY29tbXVuaWNhdGlvbi9NU1xcbnRlbGVjb21tdW5pY2F0aW9ucy9NXFxudGVsZWNvbW11dGUvWkdEUlNcXG50ZWxlY29tbXV0ZXIvTVxcbnRlbGVjb21tdXRpbmcvTVxcbnRlbGVjb25mZXJlbmNlL01HRFNcXG50ZWxlY29uZmVyZW5jaW5nL01cXG50ZWxlZ2VuaWNcXG50ZWxlZ3JhbS9NU1xcbnRlbGVncmFwaC9NRFJaR1xcbnRlbGVncmFwaGVyL01cXG50ZWxlZ3JhcGhlc2VcXG50ZWxlZ3JhcGhpY1xcbnRlbGVncmFwaGljYWxseVxcbnRlbGVncmFwaGlzdC9TTVxcbnRlbGVncmFwaHNcXG50ZWxlZ3JhcGh5L01cXG50ZWxla2luZXNpcy9NXFxudGVsZWtpbmV0aWNcXG50ZWxlbWFya2V0ZXIvU01cXG50ZWxlbWFya2V0aW5nL01cXG50ZWxlbWV0ZXIvU01cXG50ZWxlbWV0cnkvU01cXG50ZWxlb2xvZ2ljYWxcXG50ZWxlb2xvZ3lcXG50ZWxlcGF0aGljXFxudGVsZXBhdGhpY2FsbHlcXG50ZWxlcGF0aHkvTVxcbnRlbGVwaG9uZS9EUlNNWkdcXG50ZWxlcGhvbmVyL01cXG50ZWxlcGhvbmljXFxudGVsZXBob25pc3QvU1xcbnRlbGVwaG9ueS9NXFxudGVsZXBob3RvL1NNXFxudGVsZXBob3RvZ3JhcGh5L01cXG50ZWxlcGxheS9NU1xcbnRlbGVwb3J0XFxudGVsZXBvcnRhdGlvblxcbnRlbGVwcmludGVyL01TXFxudGVsZXByb2Nlc3NpbmcvTVxcbnRlbGVwcm9tcHRlci9TTVxcbnRlbGVzYWxlc1xcbnRlbGVzY29wZS9EU01HXFxudGVsZXNjb3BpY1xcbnRlbGVzY29waWNhbGx5XFxudGVsZXRleHQvTVNcXG50ZWxldGhvbi9NU1xcbnRlbGV0eXBlL1NcXG50ZWxldHlwZXdyaXRlci9NU1xcbnRlbGV2YW5nZWxpc20vTVxcbnRlbGV2YW5nZWxpc3QvTVNcXG50ZWxldmlzZS9YR05EU1xcbnRlbGV2aXNpb24vTVxcbnRlbGV3b3JrZXIvU1xcbnRlbGV3b3JraW5nXFxudGVsZXgvTURTR1xcbnRlbGwvQUdTXFxudGVsbGVyL1NNXFxudGVsbGluZy9ZXFxudGVsbHRhbGUvU01cXG50ZWxsdXJpdW0vTVxcbnRlbGx5L1NNXFxudGVsbmV0XFxudGVtYmxvci9NU1xcbnRlbWVyaXR5L01cXG50ZW1wL01EUlpUR1NcXG50ZW1wZXIvTURHXFxudGVtcGVyYS9MU01cXG50ZW1wZXJhbWVudC9NU1xcbnRlbXBlcmFtZW50YWwvWVxcbnRlbXBlcmFuY2UvSU1cXG50ZW1wZXJhdGUvSVlcXG50ZW1wZXJhdGVuZXNzL01cXG50ZW1wZXJhdHVyZS9TTVxcbnRlbXBlc3QvU01cXG50ZW1wZXN0dW91cy9ZUFxcbnRlbXBlc3R1b3VzbmVzcy9NXFxudGVtcGxhdGUnc1xcbnRlbXBsYXRlL1NcXG50ZW1wbGUvU01cXG50ZW1wby9TTVxcbnRlbXBvcmFsL1lcXG50ZW1wb3JhcmlseVxcbnRlbXBvcmFyaW5lc3MvTVxcbnRlbXBvcmFyeS9GU01cXG50ZW1wb3JpemUvWkdEUlNcXG50ZW1wb3JpemVyL01cXG50ZW1wdC9TRFJaR1xcbnRlbXB0YXRpb24vTVNcXG50ZW1wdGVyL01cXG50ZW1wdGluZy9ZXFxudGVtcHRyZXNzL01TXFxudGVtcHVyYS9NXFxudGVuL0JNSFxcbnRlbmFiaWxpdHkvTVxcbnRlbmFibGUvVVxcbnRlbmFibHlcXG50ZW5hY2lvdXMvWVBcXG50ZW5hY2lvdXNuZXNzL01cXG50ZW5hY2l0eS9NXFxudGVuYW5jeS9TTVxcbnRlbmFudC9TTURHXFxudGVuYW50ZWQvVVxcbnRlbmFudHJ5L01cXG50ZW5jaFxcbnRlbmQvSUVGREdTXFxudGVuZGVkL1VcXG50ZW5kZW5jeS9TTVxcbnRlbmRlbnRpb3VzL1lQXFxudGVuZGVudGlvdXNuZXNzL01cXG50ZW5kZXIvU01EUllUR1BcXG50ZW5kZXJmb290L01TXFxudGVuZGVyaGVhcnRlZC9QXFxudGVuZGVyaGVhcnRlZG5lc3MvTVxcbnRlbmRlcml6ZS9aR0RSU1xcbnRlbmRlcml6ZXIvTVxcbnRlbmRlcmxvaW4vU01cXG50ZW5kZXJuZXNzL01cXG50ZW5kaW5pdGlzL01cXG50ZW5kb24vU01cXG50ZW5kcmlsL1NNXFxudGVuZW1lbnQvU01cXG50ZW5ldC9TTVxcbnRlbmZvbGRcXG50ZW5uZXIvU1xcbnRlbm5pcy9NXFxudGVub24vU01ER1xcbnRlbm9yL1NNXFxudGVucGluL1NNXFxudGVucGlucy9NXFxudGVuc2UvRFJTTVlUR05YUFxcbnRlbnNlbmVzcy9NXFxudGVuc2lsZVxcbnRlbnNpb24vRVNNXFxudGVuc2l0eS9JTVxcbnRlbnNvci9TXFxudGVudC9ER1NNXFxudGVudGFjbGUvRFNNXFxudGVudGF0aXZlL1BZXFxudGVudGF0aXZlbmVzcy9NXFxudGVudGVyaG9vay9NU1xcbnRlbnRoL01ZXFxudGVudGhzXFxudGVudWl0eS9NXFxudGVudW91cy9QWVxcbnRlbnVvdXNuZXNzL01cXG50ZW51cmUvRFNNR1xcbnRlcGVlL1NNXFxudGVwaWQvWVBcXG50ZXBpZGl0eS9NXFxudGVwaWRuZXNzL01cXG50ZXF1aWxhL1NNXFxudGVyYWJpdC9TTVxcbnRlcmFieXRlL01TXFxudGVyYWhlcnR6L01cXG50ZXJham91bGUvU1xcbnRlcmFwaXhlbC9NU1xcbnRlcmF3YXR0L1NcXG50ZXJiaXVtL01cXG50ZXJjZW50ZW5hcnkvU01cXG50ZXJjZW50ZW5uaWFsL1NNXFxudGVyaXlha2lcXG50ZXJtL01EWUdTXFxudGVybWFnYW50L01TXFxudGVybWluYWJsZS9JQ1xcbnRlcm1pbmFsL01ZU1xcbnRlcm1pbmF0ZS9EU0dOWFxcbnRlcm1pbmF0aW9uL0NTTVxcbnRlcm1pbmF0b3IvU1xcbnRlcm1pbmlcXG50ZXJtaW5vbG9naWNhbC9ZXFxudGVybWlub2xvZ3kvU01cXG50ZXJtaW51cy9NXFxudGVybWl0ZS9TTVxcbnRlcm4vSU1TXFxudGVybmFyeS9TTVxcbnRlcnJcXG50ZXJyYWNlL0RTTUdcXG50ZXJyYWNvdHRhL01cXG50ZXJyYWluL1NNXFxudGVycmFwaW4vTVNcXG50ZXJyYXJpdW0vU01cXG50ZXJyYXp6by9NU1xcbnRlcnJlc3RyaWFsL1NNWVxcbnRlcnJpYmxlL1BcXG50ZXJyaWJsZW5lc3MvTVxcbnRlcnJpYmx5XFxudGVycmllci9NXFxudGVycmlmaWNcXG50ZXJyaWZpY2FsbHlcXG50ZXJyaWZ5L0dEU1xcbnRlcnJpZnlpbmcvWVxcbnRlcnJpbmUvU1xcbnRlcnJpdG9yaWFsL01TXFxudGVycml0b3JpYWxpdHlcXG50ZXJyaXRvcnkvU01cXG50ZXJyb3IvU01cXG50ZXJyb3Jpc20vTVxcbnRlcnJvcmlzdC9TTVxcbnRlcnJvcml6ZS9EU0dcXG50ZXJyeS9STVpcXG50ZXJyeWNsb3RoL01cXG50ZXJzZS9SWVRQXFxudGVyc2VuZXNzL01cXG50ZXJ0aWFyeVxcbnRlc3NlbGxhdGUvRFNYR05cXG50ZXNzZWxsYXRpb24vTVxcbnRlc3Qncy9BRktcXG50ZXN0L0FLRkNER1NcXG50ZXN0YWJsZS9DRlxcbnRlc3RhbWVudC9NU1xcbnRlc3RhbWVudGFyeVxcbnRlc3RhdGUvU1xcbnRlc3RhdG9yL01TXFxudGVzdGF0cmljZXNcXG50ZXN0YXRyaXgvTVxcbnRlc3RlZC9VXFxudGVzdGVyL0tTTVxcbnRlc3Rlc1xcbnRlc3RpY2xlL01TXFxudGVzdGljdWxhclxcbnRlc3RpZmllci9NXFxudGVzdGlmeS9aR0RSU1xcbnRlc3RpbHlcXG50ZXN0aW1vbmlhbC9NU1xcbnRlc3RpbW9ueS9TTVxcbnRlc3RpbmVzcy9NXFxudGVzdGluZ3NcXG50ZXN0aXMvTVxcbnRlc3Rvc3Rlcm9uZS9NXFxudGVzdHkvUFJUXFxudGV0YW51cy9NXFxudGV0Y2hpbHlcXG50ZXRjaHkvUFJUXFxudGV0aGVyL1NNREdcXG50ZXRyYS9TTVxcbnRldHJhY3ljbGluZS9NXFxudGV0cmFoZWRyYWxcXG50ZXRyYWhlZHJvbi9NU1xcbnRldHJhbWV0ZXIvU01cXG50ZXh0L0ZNU1xcbnRleHRib29rL1NNXFxudGV4dGVkXFxudGV4dGlsZS9NU1xcbnRleHRpbmdcXG50ZXh0dWFsL0ZZXFxudGV4dHVyYWxcXG50ZXh0dXJlL01HRFNcXG50aGFsYW1pXFxudGhhbGFtdXMvTVxcbnRoYWxpZG9taWRlL01cXG50aGFsbGl1bS9NXFxudGhhblxcbnRoYW5lL1NNXFxudGhhbmsvU0RHXFxudGhhbmtmdWwvWVBcXG50aGFua2Z1bG5lc3MvTVxcbnRoYW5rbGVzcy9QWVxcbnRoYW5rbGVzc25lc3MvTVxcbnRoYW5rc2dpdmluZy9TTVxcbnRoYXQnZFxcbnRoYXQnbGxcXG50aGF0L01cXG50aGF0Y2gvTURSU1pHXFxudGhhdGNoZXIvTVxcbnRoYXRjaGluZy9NXFxudGhhdy9NREdTXFxudGhlL0pHXFxudGhlYXRlci9TTVxcbnRoZWF0ZXJnb2VyL1NNXFxudGhlYXRyaWNhbC9ZU1xcbnRoZWF0cmljYWxpdHkvTVxcbnRoZWF0cmljYWxzL01cXG50aGVhdHJpY3MvTVxcbnRoZWUvU1xcbnRoZWZ0L1NNXFxudGhlaXIvU1xcbnRoZWlzbS9NXFxudGhlaXN0L1NNXFxudGhlaXN0aWNcXG50aGVtXFxudGhlbWF0aWNcXG50aGVtYXRpY2FsbHlcXG50aGVtZS9EU01cXG50aGVtc2VsdmVzXFxudGhlbi9NXFxudGhlbmNlXFxudGhlbmNlZm9ydGhcXG50aGVuY2Vmb3J3YXJkXFxudGhlb2NyYWN5L1NNXFxudGhlb2NyYXRpY1xcbnRoZW9kb2xpdGUvU1xcbnRoZW9sb2dpYW4vU01cXG50aGVvbG9naWNhbC9ZXFxudGhlb2xvZ3kvU01cXG50aGVvcmVtL01TXFxudGhlb3JldGljXFxudGhlb3JldGljYWwvWVxcbnRoZW9yZXRpY2lhbi9TTVxcbnRoZW9yaXN0L1NNXFxudGhlb3JpemUvRFNHXFxudGhlb3J5L1NNXFxudGhlb3NvcGhpY1xcbnRoZW9zb3BoaWNhbFxcbnRoZW9zb3BoaXN0L1NNXFxudGhlb3NvcGh5L01cXG50aGVyYXBldXRpYy9TXFxudGhlcmFwZXV0aWNhbGx5XFxudGhlcmFwZXV0aWNzL01cXG50aGVyYXBpc3QvU01cXG50aGVyYXB5L1NNXFxudGhlcmUvTVxcbnRoZXJlYWJvdXQvU1xcbnRoZXJlYWZ0ZXJcXG50aGVyZWF0XFxudGhlcmVieVxcbnRoZXJlZm9yXFxudGhlcmVmb3JlXFxudGhlcmVmcm9tXFxudGhlcmVpblxcbnRoZXJlbWluL1NNXFxudGhlcmVvZlxcbnRoZXJlb25cXG50aGVyZXRvXFxudGhlcmV0b2ZvcmVcXG50aGVyZXVuZGVyXFxudGhlcmV1bnRvXFxudGhlcmV1cG9uXFxudGhlcmV3aXRoXFxudGhlcm0vU01cXG50aGVybWFsL01ZU1xcbnRoZXJtaW9uaWNcXG50aGVybW9keW5hbWljL1NcXG50aGVybW9keW5hbWljcy9NXFxudGhlcm1vbWV0ZXIvTVNcXG50aGVybW9tZXRyaWNcXG50aGVybW9udWNsZWFyXFxudGhlcm1vcGxhc3RpYy9TTVxcbnRoZXJtb3MvTVNcXG50aGVybW9zdGF0L01TXFxudGhlcm1vc3RhdGljXFxudGhlcm1vc3RhdGljYWxseVxcbnRoZXNhdXJpXFxudGhlc2F1cnVzL01TXFxudGhlc2UvU1xcbnRoZXNpcy9NXFxudGhlc3BpYW4vU01cXG50aGV0YS9TTVxcbnRoZXcvTVNcXG50aGV5XFxudGhleSdkXFxudGhleSdsbFxcbnRoZXkncmVcXG50aGV5J3ZlXFxudGhpYW1pbmUvTVxcbnRoaWNrL1BNTlJZWFRcXG50aGlja2VuL0RSSlpHXFxudGhpY2tlbmVyL01cXG50aGlja2VuaW5nL01cXG50aGlja2V0L01TXFxudGhpY2toZWFkZWQvTVxcbnRoaWNrbmVzcy9NU1xcbnRoaWNrby9TXFxudGhpY2tzZXRcXG50aGllZi9NXFxudGhpZXZlL0RTR1xcbnRoaWV2ZXJ5L01cXG50aGlldmluZy9NXFxudGhpZXZpc2hcXG50aGlnaC9NXFxudGhpZ2hib25lL01TXFxudGhpZ2hzXFxudGhpbWJsZS9NU1xcbnRoaW1ibGVmdWwvU01cXG50aGluL1lTUFxcbnRoaW5lXFxudGhpbmcvTVxcbnRoaW5nYW1hYm9iL1NNXFxudGhpbmdhbWFqaWcvU01cXG50aGluZ3VtYWJvYi9TXFxudGhpbmd1bW15L1NcXG50aGluZ3kvU1xcbnRoaW5rL1NSQlpHXFxudGhpbmthYmxlL1VcXG50aGlua2VyL01cXG50aGlua2luZydzXFxudGhpbm5lZFxcbnRoaW5uZXIvTVNcXG50aGlubmVzcy9NXFxudGhpbm5lc3RcXG50aGlubmluZ1xcbnRoaXJkL1NNWVxcbnRoaXJzdC9TR01EXFxudGhpcnN0aWx5XFxudGhpcnN0aW5lc3MvTVxcbnRoaXJzdHkvVFBSXFxudGhpcnRlZW4vU01IXFxudGhpcnRlZW50aC9NXFxudGhpcnRlZW50aHNcXG50aGlydGlldGgvTVxcbnRoaXJ0aWV0aHNcXG50aGlydHkvSFNNXFxudGhpc1xcbnRoaXN0bGUvTVNcXG50aGlzdGxlZG93bi9NXFxudGhpdGhlclxcbnRob1xcbnRob2xlL1NNXFxudGhvbmcvU01cXG50aG9yYWNpY1xcbnRob3JheC9NU1xcbnRob3JpdW0vTVxcbnRob3JuL1NNXFxudGhvcm5pbmVzcy9NXFxudGhvcm55L1BSVFxcbnRob3JvdWdoL1JZUFRcXG50aG9yb3VnaGJyZWQvTVNcXG50aG9yb3VnaGZhcmUvTVNcXG50aG9yb3VnaGdvaW5nXFxudGhvcm91Z2huZXNzL01cXG50aG9zZVxcbnRob3UvTVNcXG50aG91Z2hcXG50aG91Z2h0L1NNXFxudGhvdWdodGZ1bC9ZUFxcbnRob3VnaHRmdWxuZXNzL01cXG50aG91Z2h0bGVzcy9QWVxcbnRob3VnaHRsZXNzbmVzcy9NXFxudGhvdXNhbmQvTUhTXFxudGhvdXNhbmRmb2xkXFxudGhvdXNhbmR0aC9NXFxudGhvdXNhbmR0aHNcXG50aHJhbGwvU01ER1xcbnRocmFsbGRvbS9NXFxudGhyYXNoL0pNRFJTWkdcXG50aHJhc2hlci9NXFxudGhyYXNoaW5nL01cXG50aHJlYWQvU01EUlpHXFxudGhyZWFkYmFyZVxcbnRocmVhZGVyL01cXG50aHJlYWRsaWtlXFxudGhyZWFkeS9UUlxcbnRocmVhdC9TTU5YXFxudGhyZWF0ZW4vREdcXG50aHJlYXRlbmluZy9ZXFxudGhyZWUvU01cXG50aHJlZWZvbGRcXG50aHJlZXBlbmNlL01cXG50aHJlZXNjb3JlL01TXFxudGhyZWVzb21lL1NNXFxudGhyZW5vZHkvU01cXG50aHJlc2gvTURSU1pHXFxudGhyZXNoZXIvTVxcbnRocmVzaG9sZC9TTVxcbnRocmV3XFxudGhyaWNlXFxudGhyaWZ0L1NNXFxudGhyaWZ0aWx5XFxudGhyaWZ0aW5lc3MvTVxcbnRocmlmdGxlc3NcXG50aHJpZnR5L1BUUlxcbnRocmlsbC9TTURSWkdcXG50aHJpbGxlci9NXFxudGhyaWxsaW5nL1lcXG50aHJpdmUvRFNHXFxudGhyb2F0L1NNXFxudGhyb2F0aWx5XFxudGhyb2F0aW5lc3MvTVxcbnRocm9hdHkvUlRQXFxudGhyb2IvU01cXG50aHJvYmJlZFxcbnRocm9iYmluZ1xcbnRocm9lL1NNXFxudGhyb21iaVxcbnRocm9tYm9seXRpY1xcbnRocm9tYm9zZXNcXG50aHJvbWJvc2lzL01cXG50aHJvbWJvdGljXFxudGhyb21idXMvTVxcbnRocm9uZSdzXFxudGhyb25lL1NcXG50aHJvbmcvR1NNRFxcbnRocm90dGxlL0RSU01aR1xcbnRocm90dGxlci9NXFxudGhyb3VnaFxcbnRocm91Z2hvdXRcXG50aHJvdWdocHV0L01cXG50aHJvdy9TTVJaR1xcbnRocm93YXdheS9TTVxcbnRocm93YmFjay9TTVxcbnRocm93ZXIvTVxcbnRocm93blxcbnRocnVcXG50aHJ1bS9TTVxcbnRocnVtbWVkXFxudGhydW1taW5nXFxudGhydXNoL01TXFxudGhydXN0L0dTTVxcbnRocnV3YXkvTVNcXG50aHVkL01TXFxudGh1ZGRlZFxcbnRodWRkaW5nXFxudGh1Zy9NU1xcbnRodWdnZXJ5L01cXG50aHVnZ2lzaFxcbnRodWxpdW0vTVxcbnRodW1iL1NNREdcXG50aHVtYm5haWwvU01cXG50aHVtYnByaW50L1NNXFxudGh1bWJzY3Jldy9TTVxcbnRodW1idGFjay9TTVxcbnRodW1wL1NNREdcXG50aHVtcGluZy9NXFxudGh1bmRlci9aR01EUlNcXG50aHVuZGVyYm9sdC9TTVxcbnRodW5kZXJjbGFwL1NNXFxudGh1bmRlcmNsb3VkL01TXFxudGh1bmRlcmVyL01cXG50aHVuZGVyaGVhZC9TTVxcbnRodW5kZXJvdXMvWVxcbnRodW5kZXJzaG93ZXIvU01cXG50aHVuZGVyc3Rvcm0vU01cXG50aHVuZGVyc3RydWNrXFxudGh1bmRlcnlcXG50aHVuay9TXFxudGh1c1xcbnRod2Fjay9aR1NNRFJcXG50aHdhY2tlci9NXFxudGh3YXJ0L0dTTURcXG50aHlcXG50aHltZS9NXFxudGh5bWluZS9NXFxudGh5bXVzL01TXFxudGh5cm9pZC9NU1xcbnRoeXJvaWRhbFxcbnRoeXNlbGZcXG50aS9NUlpcXG50aWFyYS9TTVxcbnRpYmlhL01cXG50aWJpYWVcXG50aWJpYWxcXG50aWMvU01cXG50aWNrL01EUlpHU1xcbnRpY2tlci9NXFxudGlja2V0L0dTTURcXG50aWNraW5nL01cXG50aWNrbGUvRFJTTVpHXFxudGlja2xlci9NXFxudGlja2xpc2gvWVBcXG50aWNrbGlzaG5lc3MvTVxcbnRpY2t0YWNrdG9lL01cXG50aWNrdG9jay9NU1xcbnRpZGFsL1lcXG50aWRiaXQvU01cXG50aWRkbGVyL1NcXG50aWRkbHlcXG50aWRkbHl3aW5rL1NcXG50aWRkbHl3aW5rcy9NXFxudGlkZS9NR0pEU1xcbnRpZGVsYW5kL1NNXFxudGlkZW1hcmsvU1xcbnRpZGV3YXRlci9NU1xcbnRpZGV3YXkvTVNcXG50aWRpbHkvVVxcbnRpZGluZXNzL1VNXFxudGlkaW5ncy9NXFxudGlkeS9EUlNNVEdQXFxudGllJ3NcXG50aWUvQVVTRFxcbnRpZWJhY2svTVNcXG50aWVicmVhay9SU1pcXG50aWVicmVha2VyL01cXG50aWVwaW4vU1xcbnRpZXIvTURcXG50aWZmL01ER1NcXG50aWdlci9TTVxcbnRpZ2VyaXNoXFxudGlnaHQvU05SWVBYVFxcbnRpZ2h0ZW4vWkdEUlxcbnRpZ2h0ZW5lci9NXFxudGlnaHRmaXN0ZWRcXG50aWdodG5lc3MvTVxcbnRpZ2h0cm9wZS9NU1xcbnRpZ2h0cy9NXFxudGlnaHR3YWQvTVNcXG50aWdyZXNzL01TXFxudGlsXFxudGlsYXBpYVxcbnRpbGRlL1NNXFxudGlsZS9NWkdEUlNcXG50aWxlci9NXFxudGlsaW5nL01cXG50aWxsJ3NcXG50aWxsL0VEUlpHU1xcbnRpbGxhYmxlXFxudGlsbGFnZS9NXFxudGlsbGVyL0VNXFxudGlsdC9NREdTXFxudGltYmVyL1NNREdcXG50aW1iZXJsYW5kL01cXG50aW1iZXJsaW5lL01TXFxudGltYnJlL1NNXFxudGltYnJlbC9TTVxcbnRpbWUvTVlaR0pEUlNcXG50aW1la2VlcGVyL01TXFxudGltZWtlZXBpbmcvTVxcbnRpbWVsZXNzL1BZXFxudGltZWxlc3NuZXNzL01cXG50aW1lbGluZS9NU1xcbnRpbWVsaW5lc3MvVU1cXG50aW1lbHkvVVBSVFxcbnRpbWVvdXQvU01cXG50aW1lcGllY2UvTVNcXG50aW1lci9NXFxudGltZXNjYWxlL1NcXG50aW1lc2VydmVyL1NNXFxudGltZXNlcnZpbmcvTVxcbnRpbWVzaGFyZS9TXFxudGltZXN0YW1wL1NNRFxcbnRpbWV0YWJsZS9EU01HXFxudGltZXdvcm5cXG50aW1lem9uZVxcbnRpbWlkL1JZVFBcXG50aW1pZGl0eS9NXFxudGltaWRuZXNzL01cXG50aW1pbmcvTVxcbnRpbW9yb3VzL1BZXFxudGltb3JvdXNuZXNzL01cXG50aW1vdGh5L01cXG50aW1wYW5pL01cXG50aW1wYW5pc3QvU01cXG50aW4vU01cXG50aW5jdHVyZS9NR0RTXFxudGluZGVyL01cXG50aW5kZXJib3gvTVNcXG50aW5lL01TXFxudGluZm9pbC9NXFxudGluZy9NRFlHXFxudGluZ2UvU01cXG50aW5nZWluZ1xcbnRpbmdsZS9EU01HSlxcbnRpbmdsaW5nL01cXG50aW5pbmVzcy9NXFxudGlua2VyL1pHU01EUlxcbnRpbmtlcmVyL01cXG50aW5rbGUvRFNNR1xcbnRpbm5lZFxcbnRpbm5pbmVzcy9NXFxudGlubmluZ1xcbnRpbm5pdHVzL01cXG50aW5ueS9QUlRcXG50aW5wbGF0ZS9NXFxudGlucG90XFxudGluc2VsL0dTTURcXG50aW5zbWl0aC9NXFxudGluc21pdGhzXFxudGludC9NREdTXFxudGludGlubmFidWxhdGlvbi9NU1xcbnRpbnR5cGUvTVNcXG50aW53YXJlL01cXG50aW55L1JUUFxcbnRpcC9TTVxcbnRpcHBlZFxcbnRpcHBlci9TTVxcbnRpcHBldC9TTVxcbnRpcHBleC9HRFNcXG50aXBwaW5nXFxudGlwcGxlL0RSU01aR1xcbnRpcHBsZXIvTVxcbnRpcHNpbHlcXG50aXBzaW5lc3MvTVxcbnRpcHN0ZXIvTVNcXG50aXBzeS9SUFRcXG50aXB0b2UvRFNNXFxudGlwdG9laW5nXFxudGlwdG9wL1NNXFxudGlyYWRlL1NNXFxudGlyYW1pc3UvTVNcXG50aXJlJ3NcXG50aXJlL0FHRFNcXG50aXJlZC9QUllUXFxudGlyZWRuZXNzL01cXG50aXJlbGVzcy9ZUFxcbnRpcmVsZXNzbmVzcy9NXFxudGlyZXNvbWUvUFlcXG50aXJlc29tZW5lc3MvTVxcbnRpc3N1ZS9TTVxcbnRpdC9TTVxcbnRpdGFuL1NNXFxudGl0YW5pY1xcbnRpdGFuaXVtL01cXG50aXRjaC9TXFxudGl0Y2h5XFxudGl0aGUvRFJTTVpHXFxudGl0aGVyL01cXG50aXRpYW4vTVxcbnRpdGlsbGF0ZS9EU0dOXFxudGl0aWxsYXRpbmcvWVxcbnRpdGlsbGF0aW9uL01cXG50aXRpdmF0ZS9EU0dOXFxudGl0aXZhdGlvbi9NXFxudGl0bGUvRFNNR1xcbnRpdGxlZC9VXFxudGl0bGVob2xkZXIvTVNcXG50aXRsaXN0L01TXFxudGl0bWljZVxcbnRpdG1vdXNlL01cXG50aXR0ZXIvU0dNRFxcbnRpdHRsZS9TTVxcbnRpdHR5L1NcXG50aXR1bGFyXFxudGl6elxcbnRpenp5L1NNXFxudG5cXG50bnBrXFxudG8vSVVcXG50b2FkL01TXFxudG9hZHN0b29sL01TXFxudG9hZHkvRFNNR1xcbnRvYWR5aXNtL01cXG50b2FzdC9TTURSWkdcXG50b2FzdGVyL01cXG50b2FzdG1hc3Rlci9TTVxcbnRvYXN0bWlzdHJlc3MvTVNcXG50b2FzdHkvVFJTXFxudG9iYWNjby9NU1xcbnRvYmFjY29uaXN0L1NNXFxudG9ib2dnYW4vWkdTTURSXFxudG9ib2dnYW5lci9NXFxudG9ib2dnYW5pbmcvTVxcbnRvY2NhdGEvU1xcbnRvY29waGVyb2xcXG50b2NzaW4vU01cXG50b2RheS9NXFxudG9kZGxlL0RSU01aR1xcbnRvZGRsZXIvTVxcbnRvZGR5L1NNXFxudG9lL0RTTVxcbnRvZWNhcC9TTVxcbnRvZWhvbGQvTVNcXG50b2VpbmdcXG50b2VuYWlsL01TXFxudG9lcmFnL1NcXG50b2ZmL1NcXG50b2ZmZWUvU01cXG50b2Z1L01cXG50b2cvU01cXG50b2dhL01EU1xcbnRvZ2V0aGVyL1BcXG50b2dldGhlcm5lc3MvTVxcbnRvZ2dlZFxcbnRvZ2dpbmdcXG50b2dnbGUvRFNNR1xcbnRvZ3MvTVxcbnRvaWwvTURSWkdTXFxudG9pbGVyL01cXG50b2lsZXQvTURHU1xcbnRvaWxldHJ5L1NNXFxudG9pbGV0dGUvTVxcbnRvaWxzb21lXFxudG9rZS9NR0RTXFxudG9rZW4vU01cXG50b2tlbmlzbS9NXFxudG9sZC9BVVxcbnRvbGUvTVxcbnRvbGVyYWJsZS9JXFxudG9sZXJhYmx5L0lcXG50b2xlcmFuY2UvSU1cXG50b2xlcmFuY2VzXFxudG9sZXJhbnQvSVlcXG50b2xlcmF0ZS9HTkRTXFxudG9sZXJhdGlvbi9NXFxudG9sbC9NREdTXFxudG9sbGJvb3RoL01cXG50b2xsYm9vdGhzXFxudG9sbGdhdGUvU01cXG50b2xsd2F5L1NNXFxudG9sdWVuZS9NXFxudG9tL1NNXFxudG9tYWhhd2svU0dNRFxcbnRvbWF0by9NXFxudG9tYXRvZXNcXG50b21iL01ER1NcXG50b21ib2xhL1NcXG50b21ib3kvTVNcXG50b21ib3lpc2hcXG50b21ic3RvbmUvTVNcXG50b21jYXQvTVNcXG50b21lL01TXFxudG9tZm9vbGVyeS9TTVxcbnRvbW9ncmFwaGljXFxudG9tb2dyYXBoeS9NXFxudG9tb3Jyb3cvTVNcXG50b210aXQvTVNcXG50b24vU01cXG50b25hbC9ZXFxudG9uYWxpdHkvU01cXG50b25lJ3NcXG50b25lL0laR0RSU1xcbnRvbmVhcm0vU01cXG50b25lbGVzcy9ZXFxudG9uZXIvSU1cXG50b25nL01ER1NcXG50b25ndWUvTUdEU1xcbnRvbmd1ZWxlc3NcXG50b25pYy9TTVxcbnRvbmlnaHQvTVxcbnRvbm5hZ2UvU01cXG50b25uZS9TTVxcbnRvbnNpbC9NU1xcbnRvbnNpbGxlY3RvbXkvU01cXG50b25zaWxsaXRpcy9NXFxudG9uc29yaWFsXFxudG9uc3VyZS9EU01HXFxudG9ueS9SVFxcbnRvb1xcbnRvb2svQVxcbnRvb2wnc1xcbnRvb2wvQURHU1xcbnRvb2xiYXIvU01cXG50b29sYm94L01TXFxudG9vbGtpdFxcbnRvb2xtYWtlci9NU1xcbnRvb3QvTURSWkdTXFxudG9vdGVyL01cXG50b290aC9NRFxcbnRvb3RoYWNoZS9NU1xcbnRvb3RoYnJ1c2gvTVNcXG50b290aGlseVxcbnRvb3RobGVzc1xcbnRvb3RocGFzdGUvU01cXG50b290aHBpY2svU01cXG50b290aHNvbWVcXG50b290aHkvUlRcXG50b290bGUvR0RTXFxudG9vdHNpZS9TXFxudG9wL1NNXFxudG9wYXovTVNcXG50b3Bjb2F0L1NNXFxudG9wZHJlc3NpbmcvU01cXG50b3BlZS9TXFxudG9wZmxpZ2h0XFxudG9waVxcbnRvcGlhcnkvTVxcbnRvcGljL1NNXFxudG9waWNhbC9ZXFxudG9waWNhbGl0eS9NXFxudG9wa25vdC9TTVxcbnRvcGxlc3NcXG50b3BtYXN0L1NNXFxudG9wbW9zdFxcbnRvcG5vdGNoXFxudG9wb2dyYXBoZXIvU01cXG50b3BvZ3JhcGhpY1xcbnRvcG9ncmFwaGljYWwvWVxcbnRvcG9ncmFwaHkvU01cXG50b3BvbG9naWNhbC9ZXFxudG9wb2xvZ3lcXG50b3BwZWRcXG50b3BwZXIvTVNcXG50b3BwaW5nL1NNXFxudG9wcGxlL0dEU1xcbnRvcHNhaWwvU01cXG50b3BzaWRlL1NNXFxudG9wc29pbC9NXFxudG9wc3Bpbi9NXFxudG9xdWUvU01cXG50b3IvU01cXG50b3JjaC9HTURTXFxudG9yY2hiZWFyZXIvTVNcXG50b3JjaGxpZ2h0L01cXG50b3JlXFxudG9yZWFkb3IvTVNcXG50b3JtZW50L1NNREdcXG50b3JtZW50aW5nL1lcXG50b3JtZW50b3IvTVNcXG50b3JuXFxudG9ybmFkby9NXFxudG9ybmFkb2VzXFxudG9ycGVkby9HTURcXG50b3JwZWRvZXNcXG50b3JwaWQvWVxcbnRvcnBpZGl0eS9NXFxudG9ycG9yL01cXG50b3JxdWUvTUdEU1xcbnRvcnJlbnQvU01cXG50b3JyZW50aWFsXFxudG9ycmlkL1lQXFxudG9ycmlkaXR5L01cXG50b3JyaWRuZXNzL01cXG50b3JzaW9uL01cXG50b3JzaW9uYWxcXG50b3Jzby9TTVxcbnRvcnQnc1xcbnRvcnQvRkVBU1xcbnRvcnRlL1NNXFxudG9ydGVsbGluaS9NXFxudG9ydGlsbGEvTVNcXG50b3J0b2lzZS9NU1xcbnRvcnRvaXNlc2hlbGwvU01cXG50b3J0b25pL01cXG50b3J0dW91cy9QWVxcbnRvcnR1b3VzbmVzcy9NXFxudG9ydHVyZS9EUlNNWkdcXG50b3J0dXJlci9NXFxudG9ydHVyb3VzXFxudG9ydXNcXG50b3NoXFxudG9zcy9NRFJTWkdcXG50b3NzdXAvTVNcXG50b3QvU0dNRFxcbnRvdGFsL0dTTURZXFxudG90YWxpdGFyaWFuL1NNXFxudG90YWxpdGFyaWFuaXNtL01cXG50b3RhbGl0eS9TTVxcbnRvdGFsaXphdG9yL1NNXFxudG90ZS9NU1xcbnRvdGVtL1NNXFxudG90ZW1pY1xcbnRvdHRlZFxcbnRvdHRlci9aR01EUlNcXG50b3R0ZXJlci9NXFxudG90dGluZ1xcbnRvdWNhbi9NU1xcbnRvdWNoL0FHTURTXFxudG91Y2hkb3duL1NNXFxudG91Y2hlL0JKXFxudG91Y2hlZC9VXFxudG91Y2hpbHlcXG50b3VjaGluZXNzL01cXG50b3VjaGluZy9ZXFxudG91Y2hsaW5lL1NcXG50b3VjaHBhcGVyL1NcXG50b3VjaHNjcmVlbi9NU1xcbnRvdWNoc3RvbmUvTVNcXG50b3VjaHkvUlBUXFxudG91Z2gvWFRHTUROUllQXFxudG91Z2hlbi9aR0RSXFxudG91Z2hlbmVyL01cXG50b3VnaGllL1NNXFxudG91Z2huZXNzL01cXG50b3VnaHNcXG50b3VwZWUvTVNcXG50b3VyL0NGU0dETVxcbnRvdXJpc20vTVxcbnRvdXJpc3QvTVNcXG50b3VyaXN0aWNcXG50b3VyaXN0eVxcbnRvdXJtYWxpbmUvTVxcbnRvdXJuYW1lbnQvU01cXG50b3VybmV5L01TXFxudG91cm5pcXVldC9NU1xcbnRvdXNsZS9HRFNcXG50b3V0L01ER1NcXG50b3cvU1pHTURSXFxudG93YXJkL1NcXG50b3dib2F0L01TXFxudG93ZWwvSkdTTURcXG50b3dlbGV0dGUvU01cXG50b3dlbGluZy9NXFxudG93ZXIvR01EXFxudG93aGVhZC9NRFNcXG50b3doZWUvTVNcXG50b3dsaW5lL01TXFxudG93bi9NU1xcbnRvd25lZS9TXFxudG93bmhvdXNlL01TXFxudG93bmllL01TXFxudG93bnNmb2xrL01cXG50b3duc2hpcC9NU1xcbnRvd25zbWFuL01cXG50b3duc21lblxcbnRvd25zcGVvcGxlL01cXG50b3duc3dvbWFuL01cXG50b3duc3dvbWVuXFxudG93cGF0aC9NXFxudG93cGF0aHNcXG50b3dyb3BlL1NNXFxudG94ZW1pYS9NXFxudG94aWNcXG50b3hpY2l0eS9TTVxcbnRveGljb2xvZ2ljYWxcXG50b3hpY29sb2dpc3QvU01cXG50b3hpY29sb2d5L01cXG50b3hpbi9TTVxcbnRveS9TR01EXFxudG95Ym95L1NcXG50clxcbnRyYWJlY3VsYVxcbnRyYWJlY3VsYXJcXG50cmFiZWN1bGVcXG50cmFjZS9KRFJTTVpHXFxudHJhY2VhYmlsaXR5XFxudHJhY2VhYmxlL1VcXG50cmFjZXIvTVxcbnRyYWNlcnkvU01cXG50cmFjaGVhL01cXG50cmFjaGVhZVxcbnRyYWNoZWFsXFxudHJhY2hlb3RvbXkvU01cXG50cmFjaW5nL01cXG50cmFjay9aR1NNRFJcXG50cmFja2JhbGwvU01cXG50cmFja2VyL01cXG50cmFja2xlc3NcXG50cmFja3N1aXQvU1xcbnRyYWN0J3NcXG50cmFjdC9DRUtGQVNcXG50cmFjdGFiaWxpdHkvSU1cXG50cmFjdGFibGUvSVxcbnRyYWN0YWJseS9JXFxudHJhY3Rpb24vRUZBQ0tNXFxudHJhY3Rvci9GQ0tNU1xcbnRyYWRcXG50cmFkZS9KRFJTTVpHXFxudHJhZGVtYXJrL1NHTURcXG50cmFkZXIvTVxcbnRyYWRlc21hbi9NXFxudHJhZGVzbWVuXFxudHJhZGVzcGVvcGxlL01cXG50cmFkZXN3b21hbi9NXFxudHJhZGVzd29tZW5cXG50cmFkaW5nL01cXG50cmFkaXRpb24vTVNcXG50cmFkaXRpb25hbC9ZXFxudHJhZGl0aW9uYWxpc20vTVxcbnRyYWRpdGlvbmFsaXN0L1NNXFxudHJhZHVjZS9EUlNaR1xcbnRyYWR1Y2VyL01cXG50cmFmZmljL1NNXFxudHJhZmZpY2tlZFxcbnRyYWZmaWNrZXIvU01cXG50cmFmZmlja2luZy9NXFxudHJhZ2VkaWFuL1NNXFxudHJhZ2VkaWVubmUvTVNcXG50cmFnZWR5L1NNXFxudHJhZ2ljXFxudHJhZ2ljYWxseVxcbnRyYWdpY29tZWR5L1NNXFxudHJhZ2ljb21pY1xcbnRyYWlsL1pHU01EUlxcbnRyYWlsYmxhemVyL01TXFxudHJhaWxibGF6aW5nL01cXG50cmFpbGVyL01cXG50cmFpbi9aR1NNRFJCXFxudHJhaW5lZC9VXFxudHJhaW5lZS9TTVxcbnRyYWluZXIvTVxcbnRyYWluaW5nL01cXG50cmFpbmxvYWQvTVNcXG50cmFpbm1hbi9NXFxudHJhaW5tZW5cXG50cmFpbnNwb3R0ZXIvU1xcbnRyYWluc3BvdHRpbmdcXG50cmFpcHNlL0RTTUdcXG50cmFpdC9TTVxcbnRyYWl0b3IvU01cXG50cmFpdG9yb3VzL1lcXG50cmFqZWN0b3J5L1NNXFxudHJhbS9NU1xcbnRyYW1jYXIvU1xcbnRyYW1saW5lc1xcbnRyYW1tZWRcXG50cmFtbWVsL1NHTURcXG50cmFtbWVsZWQvVVxcbnRyYW1taW5nXFxudHJhbXAvWkdTTURSXFxudHJhbXBlci9NXFxudHJhbXBsZS9EUlNNWkdcXG50cmFtcGxlci9NXFxudHJhbXBvbGluZS9NR0RTXFxudHJhbXdheS9TXFxudHJhbmNlL01TXFxudHJhbmNoZS9TXFxudHJhbnF1aWwvUllUXFxudHJhbnF1aWxpdHkvTVxcbnRyYW5xdWlsaXplL1pHRFJTXFxudHJhbnF1aWxpemVyL01cXG50cmFucy9JXFxudHJhbnNhY3QvREdTXFxudHJhbnNhY3Rpb24vU01cXG50cmFuc2FjdGlvbmFsXFxudHJhbnNhY3Rvci9NU1xcbnRyYW5zYXRsYW50aWNcXG50cmFuc2NlaXZlci9TTVxcbnRyYW5zY2VuZC9HU0RcXG50cmFuc2NlbmRlbmNlL01cXG50cmFuc2NlbmRlbnRcXG50cmFuc2NlbmRlbnRhbC9ZXFxudHJhbnNjZW5kZW50YWxpc20vTVxcbnRyYW5zY2VuZGVudGFsaXN0L1NNXFxudHJhbnNjb250aW5lbnRhbFxcbnRyYW5zY3JpYmUvWkdEUlNcXG50cmFuc2NyaWJlci9NXFxudHJhbnNjcmlwdC9NU1xcbnRyYW5zY3JpcHRpb24vU01cXG50cmFuc2R1Y2VyL01TXFxudHJhbnNkdWN0aW9uXFxudHJhbnNlY3QvRFNHXFxudHJhbnNlcHQvTVNcXG50cmFuc2Zlci9NQlNcXG50cmFuc2ZlcmFsL01TXFxudHJhbnNmZXJlbmNlL01cXG50cmFuc2ZlcnJlZFxcbnRyYW5zZmVycmluZ1xcbnRyYW5zZmlndXJhdGlvbi9NXFxudHJhbnNmaWd1cmUvR0RTXFxudHJhbnNmaW5pdGVcXG50cmFuc2ZpeC9EU0dcXG50cmFuc2Zvcm0vQlNaR01EUlxcbnRyYW5zZm9ybWF0aW9uL1NNXFxudHJhbnNmb3JtYXRpb25hbFxcbnRyYW5zZm9ybWVyL01cXG50cmFuc2Z1c2UvRFNYR05cXG50cmFuc2Z1c2lvbi9NXFxudHJhbnNnZW5kZXIvU1xcbnRyYW5zZ2VuaWNcXG50cmFuc2dyZXNzL0dEU1xcbnRyYW5zZ3Jlc3Npb24vU01cXG50cmFuc2dyZXNzb3IvU01cXG50cmFuc2llbmNlL01cXG50cmFuc2llbmN5L01cXG50cmFuc2llbnQvU01ZXFxudHJhbnNpc3Rvci9TTVxcbnRyYW5zaXN0b3JpemUvRFNHXFxudHJhbnNpdC9TR01EXFxudHJhbnNpdGlvbi9HU01EXFxudHJhbnNpdGlvbmFsL1lcXG50cmFuc2l0aXZlL0lTTVlcXG50cmFuc2l0aXZlbmVzcy9NXFxudHJhbnNpdGl2aXR5L01cXG50cmFuc2l0b3J5XFxudHJhbnNsXFxudHJhbnNsYXRhYmxlL1VcXG50cmFuc2xhdGUvRFNHTkJYXFxudHJhbnNsYXRlZC9VXFxudHJhbnNsYXRpb24vTVxcbnRyYW5zbGF0b3IvU01cXG50cmFuc2xpdGVyYXRlL0RTR05YXFxudHJhbnNsaXRlcmF0aW9uL01cXG50cmFuc2xvY2F0aW9uXFxudHJhbnNsdWNlbmNlL01cXG50cmFuc2x1Y2VuY3kvTVxcbnRyYW5zbHVjZW50L1lcXG50cmFuc21pZ3JhdGUvR05EU1xcbnRyYW5zbWlncmF0aW9uL01cXG50cmFuc21pc3NpYmxlXFxudHJhbnNtaXNzaW9uL01TXFxudHJhbnNtaXQvU1xcbnRyYW5zbWl0dGFibGVcXG50cmFuc21pdHRhbC9NXFxudHJhbnNtaXR0YW5jZS9NXFxudHJhbnNtaXR0ZWRcXG50cmFuc21pdHRlci9TTVxcbnRyYW5zbWl0dGluZ1xcbnRyYW5zbW9ncmlmaWNhdGlvbi9NXFxudHJhbnNtb2dyaWZ5L0RTTkdcXG50cmFuc211dGF0aW9uL1NNXFxudHJhbnNtdXRlL0JEU0dcXG50cmFuc25hdGlvbmFsL01TXFxudHJhbnNvY2VhbmljXFxudHJhbnNvbS9TTVxcbnRyYW5zcGFjaWZpY1xcbnRyYW5zcGFyZW5jeS9TTVxcbnRyYW5zcGFyZW50L1lcXG50cmFuc3Bob2JpYS9NXFxudHJhbnNwaG9iaWNcXG50cmFuc3BpcmF0aW9uL01cXG50cmFuc3BpcmUvRFNHXFxudHJhbnNwbGFudC9NREdTXFxudHJhbnNwbGFudGF0aW9uL01cXG50cmFuc3BvbGFyXFxudHJhbnNwb25kZXIvU01cXG50cmFuc3BvcnQvQlNaR01EUlxcbnRyYW5zcG9ydGF0aW9uL01cXG50cmFuc3BvcnRlci9NXFxudHJhbnNwb3NlL0RTR1xcbnRyYW5zcG9zaXRpb24vTVNcXG50cmFuc3NleHVhbC9TTVxcbnRyYW5zc2V4dWFsaXNtL01cXG50cmFuc3NoaXAvU0xcXG50cmFuc3NoaXBtZW50L01cXG50cmFuc3NoaXBwZWRcXG50cmFuc3NoaXBwaW5nXFxudHJhbnN1YnN0YW50aWF0aW9uL01cXG50cmFuc3ZlcnNhbFxcbnRyYW5zdmVyc2UvTVlTXFxudHJhbnN2ZXN0aXNtL01cXG50cmFuc3Zlc3RpdGUvTVNcXG50cmFwL01TXFxudHJhcGRvb3IvTVNcXG50cmFwZXplL1NNXFxudHJhcGV6aXVtL1NNXFxudHJhcGV6b2lkL1NNXFxudHJhcGV6b2lkYWxcXG50cmFwcGFibGVcXG50cmFwcGVkXFxudHJhcHBlci9TTVxcbnRyYXBwaW5nL1NcXG50cmFwcGluZ3MvTVxcbnRyYXBzaG9vdGluZy9NXFxudHJhc2gvR01EU1xcbnRyYXNoY2FuL01TXFxudHJhc2hpbmVzcy9NXFxudHJhc2h5L1JQVFxcbnRyYXVtYS9NU1xcbnRyYXVtYXRpY1xcbnRyYXVtYXRpY2FsbHlcXG50cmF1bWF0aXplL0dEU1xcbnRyYXZhaWwvU0dNRFxcbnRyYXZlbC9NRFJTWkdKXFxudHJhdmVsZWQvVVxcbnRyYXZlbGVyL01cXG50cmF2ZWxpbmcvTVxcbnRyYXZlbG9ndWUvTVNcXG50cmF2ZXJzYWwvU01cXG50cmF2ZXJzZS9EU01HXFxudHJhdmVzdHkvR0RTTVxcbnRyYXdsL1pHU01EUlxcbnRyYXdsZXIvTVxcbnRyYXkvTVNcXG50cmVhY2hlcm91cy9QWVxcbnRyZWFjaGVyb3VzbmVzcy9NXFxudHJlYWNoZXJ5L1NNXFxudHJlYWNsZS9NXFxudHJlYWNseVxcbnRyZWFkL0FHU01cXG50cmVhZGxlL0RTTUdcXG50cmVhZG1pbGwvTVNcXG50cmVhc1xcbnRyZWFzb24vQk1cXG50cmVhc29ub3VzXFxudHJlYXN1cmUvRFJTTVpHXFxudHJlYXN1cmVyL01cXG50cmVhc3VyeS9TTVxcbnRyZWF0L0FHU01EXFxudHJlYXRhYmxlXFxudHJlYXRlZC9VXFxudHJlYXRpc2UvU01cXG50cmVhdG1lbnQvTVNcXG50cmVhdHkvU01cXG50cmVibGUvTUdEU1xcbnRyZWUvTURTXFxudHJlZWluZ1xcbnRyZWVsZXNzXFxudHJlZWxpa2VcXG50cmVlbGluZVxcbnRyZWV0b3AvU01cXG50cmVmb2lsL1NNXFxudHJlay9NU1xcbnRyZWtrZWRcXG50cmVra2VyL1NNXFxudHJla2tpbmdcXG50cmVsbGlzL0dNRFNcXG50cmVtYXRvZGUvTVNcXG50cmVtYmxlL0RTTUdcXG50cmVtZW5kb3VzL1lcXG50cmVtb2xvL1NNXFxudHJlbW9yL01TXFxudHJlbXVsb3VzL1BZXFxudHJlbXVsb3VzbmVzcy9NXFxudHJlbmNoJ3NcXG50cmVuY2gvQURTR1xcbnRyZW5jaGFuY3kvTVxcbnRyZW5jaGFudC9ZXFxudHJlbmNoZXIvTVNcXG50cmVuY2hlcm1hbi9NXFxudHJlbmNoZXJtZW5cXG50cmVuZC9HU01EXFxudHJlbmRpbHlcXG50cmVuZGluZXNzL01cXG50cmVuZHNldHRlci9TXFxudHJlbmRzZXR0aW5nXFxudHJlbmR5L1JTTVBUXFxudHJlcGlkYXRpb24vTVxcbnRyZXNwYXNzL01EUlNaR1xcbnRyZXNwYXNzZXIvTVxcbnRyZXNzL0VNU1xcbnRyZXN0bGUvTVNcXG50cmV3c1xcbnRyZXkvTVNcXG50cmlhZC9TTVxcbnRyaWFnZS9NRFxcbnRyaWFsL0FTTVxcbnRyaWFsZWRcXG50cmlhbGluZ1xcbnRyaWFuZ2xlL1NNXFxudHJpYW5ndWxhci9ZXFxudHJpYW5ndWxhdGUvR05EU1xcbnRyaWFuZ3VsYXRpb24vTVxcbnRyaWF0aGxldGUvU1xcbnRyaWF0aGxvbi9TTVxcbnRyaWJhbFxcbnRyaWJhbGlzbS9NXFxudHJpYmUvU01cXG50cmliZXNtYW4vTVxcbnRyaWJlc21lblxcbnRyaWJlc3dvbWFuL01cXG50cmliZXN3b21lblxcbnRyaWJ1bGF0aW9uL1NNXFxudHJpYnVuYWwvU01cXG50cmlidW5lL01TXFxudHJpYnV0YXJ5L1NNXFxudHJpYnV0ZSdzXFxudHJpYnV0ZS9GU1xcbnRyaWNlL01cXG50cmljZW50ZW5uaWFsL01TXFxudHJpY2Vwcy9NU1xcbnRyaWNlcmF0b3BzL01cXG50cmljaGluYS9NXFxudHJpY2hpbmFlXFxudHJpY2hpbm9zaXMvTVxcbnRyaWNrL0dTTURcXG50cmlja2VyeS9NXFxudHJpY2tpbHlcXG50cmlja2luZXNzL01cXG50cmlja2xlL01HRFNcXG50cmlja3N0ZXIvU01cXG50cmlja3kvVFJQXFxudHJpY29sb3IvU01cXG50cmljeWNsZS9TTVxcbnRyaWRlbnQvTVNcXG50cmllZC9VXFxudHJpZW5uaWFsL01ZU1xcbnRyaWVyL1NNXFxudHJpZmVjdGEvU01cXG50cmlmbGUvTVpHRFJTXFxudHJpZmxlci9NXFxudHJpZm9jYWxzL01cXG50cmlnL01cXG50cmlnZ2VyL01EU0dcXG50cmlnbHljZXJpZGUvTVNcXG50cmlnb25vbWV0cmljXFxudHJpZ29ub21ldHJpY2FsXFxudHJpZ29ub21ldHJ5L01cXG50cmlrZS9TTVxcbnRyaWxhdGVyYWwvU1xcbnRyaWxieS9TTVxcbnRyaWxsL0dTTURcXG50cmlsbGlvbi9TTUhcXG50cmlsbGlvbnRoL01cXG50cmlsbGlvbnRoc1xcbnRyaWxsaXVtL01cXG50cmlsb2JpdGUvU01cXG50cmlsb2d5L1NNXFxudHJpbS9QTVlTXFxudHJpbWFyYW4vTVNcXG50cmltZXN0ZXIvU01cXG50cmltbWVkL1VcXG50cmltbWVyL1NNXFxudHJpbW1lc3RcXG50cmltbWluZy9TTVxcbnRyaW1taW5ncy9NXFxudHJpbW5lc3MvTVxcbnRyaW1vbnRobHlcXG50cmluaXRyb3RvbHVlbmUvTVxcbnRyaW5pdHkvU01cXG50cmlua2V0L1NNXFxudHJpby9NU1xcbnRyaXAvTVlTXFxudHJpcGFydGl0ZVxcbnRyaXBlL01cXG50cmlwbGUvTUdEU1xcbnRyaXBsZXQvU01cXG50cmlwbGV4L01TXFxudHJpcGxpY2F0ZS9NR0RTXFxudHJpcG9kL01TXFxudHJpcG9kYWxcXG50cmlwb3NcXG50cmlwcGVkXFxudHJpcHBlci9TTVxcbnRyaXBwaW5nXFxudHJpcHR5Y2gvTVxcbnRyaXB0eWNoc1xcbnRyaXB3aXJlL1NcXG50cmlyZW1lL1NNXFxudHJpc2VjdC9TREdcXG50cmlzZWN0aW9uL01cXG50cml0ZS9GUFlUXFxudHJpdGVuZXNzL0ZNXFxudHJpdGVyXFxudHJpdGl1bS9NXFxudHJpdW1waC9HTURcXG50cml1bXBoYWxcXG50cml1bXBoYWxpc21cXG50cml1bXBoYWxpc3RcXG50cml1bXBoYW50L1lcXG50cml1bXBoc1xcbnRyaXVtdmlyL01TXFxudHJpdW12aXJhdGUvU01cXG50cml2YWxlbnRcXG50cml2ZXQvTVNcXG50cml2aWEvTVxcbnRyaXZpYWwvWVxcbnRyaXZpYWxpdHkvU01cXG50cml2aWFsaXphdGlvbi9NXFxudHJpdmlhbGl6ZS9HRFNcXG50cml2aXVtL01cXG50cm9jaGFpY1xcbnRyb2NoZWUvU01cXG50cm9kL0FVXFxudHJvZGRlbi9BXFxudHJvZ2xvZHl0ZS9TTVxcbnRyb2lrYS9NU1xcbnRyb2xsL1NHTURcXG50cm9sbGV5L1NNXFxudHJvbGxleWJ1cy9NU1xcbnRyb2xsb3AvU01cXG50cm9tYm9uZS9NU1xcbnRyb21ib25pc3QvTVNcXG50cm9tcC9TR0RcXG50cm9uL1NcXG50cm9vcC9TWkdNRFJcXG50cm9vcGVyL01cXG50cm9vcHNoaXAvTVNcXG50cm9wZS9TTVxcbnRyb3BoeS9TTVxcbnRyb3BpYy9NU1xcbnRyb3BpY2FsL1lcXG50cm9waWNzL01cXG50cm9waXNtL1NNXFxudHJvcG9zcGhlcmUvU01cXG50cm90L01TXFxudHJvdGgvTVxcbnRyb3R0ZWRcXG50cm90dGVyL1NNXFxudHJvdHRpbmdcXG50cm91YmFkb3VyL01TXFxudHJvdWJsZS9EU01HXFxudHJvdWJsZWQvVVxcbnRyb3VibGVtYWtlci9NU1xcbnRyb3VibGVzaG9vdC9EUlpHU1xcbnRyb3VibGVzaG9vdGVyL01cXG50cm91Ymxlc2hvb3RpbmcvTVxcbnRyb3VibGVzaG90XFxudHJvdWJsZXNvbWUvWVxcbnRyb3VnaC9NXFxudHJvdWdoc1xcbnRyb3VuY2UvRFJTWkdcXG50cm91bmNlci9NXFxudHJvdXBlL01aR0RSU1xcbnRyb3VwZXIvTVxcbnRyb3VzZXIvU01cXG50cm91c2Vycy9NXFxudHJvdXNzZWF1L01cXG50cm91c3NlYXV4XFxudHJvdXQvU01cXG50cm92ZS9TTVxcbnRyb3cvRFNHXFxudHJvd2VsL01EU0dcXG50cm95L1NcXG50cnVhbmN5L01cXG50cnVhbnQvR01EU1xcbnRydWNlL1NNXFxudHJ1Y2svU1pHTURSXFxudHJ1Y2tlci9NXFxudHJ1Y2tpbmcvTVxcbnRydWNrbGUvTUdEU1xcbnRydWNrbG9hZC9TTVxcbnRydWN1bGVuY2UvTVxcbnRydWN1bGVudC9ZXFxudHJ1ZGdlL01HRFNcXG50cnVlL01UR0RSU1xcbnRydWVsb3ZlL1NNXFxudHJ1ZmZsZS9NU1xcbnRydWcvU1xcbnRydWlzbS9NU1xcbnRydWx5L1VcXG50cnVtcC9TR01EXFxudHJ1bXBlcnkvTVxcbnRydW1wZXQvWkdNRFJTXFxudHJ1bXBldGVyL01cXG50cnVuY2F0ZS9HTkRTXFxudHJ1bmNhdGlvbi9NXFxudHJ1bmNoZW9uL1NNXFxudHJ1bmRsZS9NWkdEUlNcXG50cnVuZGxlci9NXFxudHJ1bmsvU0dNXFxudHJ1c3MvR01EU1xcbnRydXN0L0VTR01EXFxudHJ1c3RlZS9NU1xcbnRydXN0ZWVzaGlwL1NNXFxudHJ1c3RmdWwvRVlcXG50cnVzdGZ1bG5lc3MvTVxcbnRydXN0aW5nL1lcXG50cnVzdHdvcnRoaW5lc3MvTVxcbnRydXN0d29ydGh5L1RQUlxcbnRydXN0eS9UUlNNXFxudHJ1dGgvWk1SXFxudHJ1dGhlci9NXFxudHJ1dGhmdWwvVVlQXFxudHJ1dGhmdWxuZXNzL1VNXFxudHJ1dGhpbmVzc1xcbnRydXRocy9VXFxudHJ5J3NcXG50cnkvQUdEU1xcbnRyeWluZy9ZXFxudHJ5b3V0L1NNXFxudHJ5cHRvcGhhblxcbnRyeXN0L1NNREdcXG50c2FyaXN0c1xcbnRzZXRzZS9NU1xcbnRzcFxcbnRzdW5hbWkvU01cXG50dHlzXFxudHViL1NaR01EUlxcbnR1YmEvTVNcXG50dWJhbFxcbnR1YmJ5L1RSXFxudHViZS9NU1xcbnR1YmVsZXNzL01cXG50dWJlci9NXFxudHViZXJjbGUvU01cXG50dWJlcmN1bGFyXFxudHViZXJjdWxpbi9NXFxudHViZXJjdWxvc2lzL01cXG50dWJlcmN1bG91c1xcbnR1YmVyb3NlL01cXG50dWJlcm91c1xcbnR1YmZ1bC9NU1xcbnR1YmluZy9NXFxudHVidWxhclxcbnR1YnVsZS9NU1xcbnR1Y2svTURSU1pHXFxudHVja2VyL01ER1xcbnR1ZnQvTURSU1pHXFxudHVmdGVyL01cXG50dWcvU01cXG50dWdib2F0L01TXFxudHVnZ2VkXFxudHVnZ2luZ1xcbnR1aXRpb24vSU1cXG50dWxhcmVtaWEvTVxcbnR1bGlwL1NNXFxudHVsbGUvTVxcbnR1bS9TXFxudHVtYmxlL0RSU01aR1xcbnR1bWJsZWRvd25cXG50dW1ibGVyL01cXG50dW1ibGV3ZWVkL1NNXFxudHVtYmxpbmcvTVxcbnR1bWJyZWwvU01cXG50dW1lc2NlbmNlL01cXG50dW1lc2NlbnRcXG50dW1pZFxcbnR1bWlkaXR5L01cXG50dW1teS9TTVxcbnR1bW9yL1NNXFxudHVtb3JvdXNcXG50dW11bHQvU01cXG50dW11bHR1b3VzL1lcXG50dW4vU1pHTURSXFxudHVuYS9NU1xcbnR1bmRyYS9TTVxcbnR1bmUvTVNcXG50dW5lZnVsL1lQXFxudHVuZWZ1bG5lc3MvTVxcbnR1bmVsZXNzL1lcXG50dW5lci9NXFxudHVuZXVwL1NNXFxudHVuZ3N0ZW4vTVxcbnR1bmljL1NNXFxudHVubmVsL0pTTURSWkdcXG50dW5uZWxlci9NXFxudHVubnkvU01cXG50dXBsZS9TXFxudHVwcGVuY2VcXG50dXBwZW5ueVxcbnR1cXVlL1NNXFxudHVyYmFuL1NNRFxcbnR1cmJpZFxcbnR1cmJpZGl0eS9NXFxudHVyYmluZS9TTVxcbnR1cmJvL1NNXFxudHVyYm9jaGFyZ2UvWkdEUlNcXG50dXJib2NoYXJnZXIvTVxcbnR1cmJvZmFuL1NNXFxudHVyYm9qZXQvU01cXG50dXJib3Byb3AvU01cXG50dXJib3QvU01cXG50dXJidWxlbmNlL01cXG50dXJidWxlbnQvWVxcbnR1cmQvTVNcXG50dXJkdWNrZW4vU01cXG50dXJlZW4vU01cXG50dXJmL01EU0dcXG50dXJmeVxcbnR1cmdpZC9ZXFxudHVyZ2lkaXR5L01cXG50dXJrZXkvU01cXG50dXJtZXJpYy9TTVxcbnR1cm1vaWwvTVNcXG50dXJuL0FNRFJTWkdcXG50dXJuYWJvdXQvU01cXG50dXJuYXJvdW5kL1NNXFxudHVybmJ1Y2tsZS9TTVxcbnR1cm5jb2F0L1NNXFxudHVybmVyL0FNXFxudHVybmluZy9NU1xcbnR1cm5pcC9TTVxcbnR1cm5rZXkvTVNcXG50dXJub2ZmL01TXFxudHVybm91dC9NU1xcbnR1cm5vdmVyL01TXFxudHVybnBpa2UvTVNcXG50dXJuc3RpbGUvU01cXG50dXJudGFibGUvU01cXG50dXJwZW50aW5lL01cXG50dXJwaXR1ZGUvTVxcbnR1cnBzXFxudHVycXVvaXNlL1NNXFxudHVycmV0L1NNRFxcbnR1cnRsZS9TTVxcbnR1cnRsZWRvdmUvU01cXG50dXJ0bGVuZWNrL1NNRFxcbnR1c2gvTVNcXG50dXNrL01EU1xcbnR1c3NsZS9EU01HXFxudHVzc29jay9NU1xcbnR1c3NvY2t5XFxudHV0L1NNXFxudHV0ZWxhZ2UvTVxcbnR1dGVsYXJ5XFxudHV0b3IvU01ER1xcbnR1dG9yZWQvVVxcbnR1dG9yaWFsL1NNXFxudHV0b3JzaGlwL01cXG50dXR0ZWRcXG50dXR0aS9TTVxcbnR1dHRpbmdcXG50dXR1L01TXFxudHV4L01TXFxudHV4ZWRvL1NNXFxudHdhZGRsZS9NWkdEUlNcXG50d2FkZGxlci9NXFxudHdhaW4vTVxcbnR3YW5nL1NNREdcXG50d2FuZ3kvUlRcXG50d2FzXFxudHdhdC9TXFxudHdlYWsvU01ER1xcbnR3ZWVcXG50d2VlZC9TTVxcbnR3ZWVkcy9NXFxudHdlZWR5L1JUXFxudHdlZW5cXG50d2VldCdzXFxudHdlZXQvQVNER1xcbnR3ZWV0ZXIvU01cXG50d2VlemVycy9NXFxudHdlbGZ0aC9NXFxudHdlbGZ0aHNcXG50d2VsdmUvU01cXG50d2VsdmVtb250aC9NXFxudHdlbHZlbW9udGhzXFxudHdlbnRpZXRoL01cXG50d2VudGlldGhzXFxudHdlbnR5L1NNSFxcbnR3ZXJrL1NER1xcbnR3ZXJwL1NNXFxudHdpY2VcXG50d2lkZGxlL01HRFNcXG50d2lkZGx5XFxudHdpZy9NU1xcbnR3aWdnZWRcXG50d2lnZ2luZ1xcbnR3aWdneS9UUlxcbnR3aWxpZ2h0L01cXG50d2lsaXRcXG50d2lsbC9NRFxcbnR3aW4vTURSU1pHXFxudHdpbmUvU01cXG50d2luZXIvTVxcbnR3aW5nZS9EU01HXFxudHdpbmsvU1lcXG50d2lua2xlL01HSkRTXFxudHdpbmtsaW5nL01cXG50d2lubmVkXFxudHdpbm5pbmdcXG50d2luc2V0L1NcXG50d2lybC9TTURSWkdcXG50d2lybGVyL01cXG50d2lybHlcXG50d2lzdCdzXFxudHdpc3QvVVNER1xcbnR3aXN0ZXIvTVNcXG50d2lzdHkvVFJcXG50d2l0L01TXFxudHdpdGNoL0dNRFNcXG50d2l0Y2h5L1JUXFxudHdpdHRlZFxcbnR3aXR0ZXIvTURTR1xcbnR3aXR0ZXJ5XFxudHdpdHRpbmdcXG50d2l4dFxcbnR3by9TTVxcbnR3b2Zlci9TTVxcbnR3b2ZvbGRcXG50d29wZW5jZS9TTVxcbnR3b3Blbm55XFxudHdvc29tZS9TTVxcbnR3cFxcbnR5Y29vbi9TTVxcbnR5aW5nL0FVXFxudHlrZS9NU1xcbnR5bXBhbmkvTVxcbnR5bXBhbmljXFxudHltcGFuaXN0L01TXFxudHltcGFudW0vU01cXG50eXBlJ3NcXG50eXBlL0FHRFNcXG50eXBlY2FzdC9HU1xcbnR5cGVmYWNlL01TXFxudHlwZXNjcmlwdC9NU1xcbnR5cGVzZXQvU1xcbnR5cGVzZXR0ZXIvTVNcXG50eXBlc2V0dGluZy9NXFxudHlwZXdyaXRlL1JTWkdcXG50eXBld3JpdGVyL01cXG50eXBld3JpdGluZy9NXFxudHlwZXdyaXR0ZW5cXG50eXBld3JvdGVcXG50eXBob2lkL01cXG50eXBob29uL01TXFxudHlwaHVzL01cXG50eXBpY2FsL1VZXFxudHlwaWNhbGl0eS9NXFxudHlwaWZpY2F0aW9uL01cXG50eXBpZnkvTkdEU1xcbnR5cGluZy9NXFxudHlwaXN0L1NNXFxudHlwby9NU1xcbnR5cG9ncmFwaGVyL1NNXFxudHlwb2dyYXBoaWNcXG50eXBvZ3JhcGhpY2FsL1lcXG50eXBvZ3JhcGh5L01cXG50eXBvbG9neS9TTVxcbnR5cmFubmljXFxudHlyYW5uaWNhbC9ZXFxudHlyYW5uaWNpZGFsXFxudHlyYW5uaWNpZGUvU1xcbnR5cmFubml6ZS9HRFNcXG50eXJhbm5vc2F1ci9NU1xcbnR5cmFubm9zYXVydXMvTVNcXG50eXJhbm5vdXNcXG50eXJhbm55L1NNXFxudHlyYW50L1NNXFxudHlyby9NU1xcbnR6YXR6aWtpXFxudS9TXFxudWJpcXVpdG91cy9ZXFxudWJpcXVpdHkvTVxcbnVkZGVyL1NNXFxudWZvbG9naXN0L1NNXFxudWZvbG9neS9NXFxudWdoXFxudWdsaW5lc3MvTVxcbnVnbHkvUlRQXFxudWhcXG51aGZcXG51a2FzZS9TTVxcbnVrdWxlbGUvU01cXG51bGNlci9TTVxcbnVsY2VyYXRlL1hEU0dOXFxudWxjZXJhdGlvbi9NXFxudWxjZXJvdXNcXG51bG5hL01cXG51bG5hZVxcbnVsbmFyXFxudWxzdGVyL01TXFxudWx0XFxudWx0ZXJpb3JcXG51bHRpbWF0ZS9NWVxcbnVsdGltYXR1bS9NU1xcbnVsdGltb1xcbnVsdHJhL1NNXFxudWx0cmFjb25zZXJ2YXRpdmUvU01cXG51bHRyYWhpZ2hcXG51bHRyYWxpZ2h0L1NNXFxudWx0cmFtYXJpbmUvTVxcbnVsdHJhbW9kZXJuXFxudWx0cmFzZW5zaXRpdmVcXG51bHRyYXNob3J0XFxudWx0cmFzb25pY1xcbnVsdHJhc29uaWNhbGx5XFxudWx0cmFzb3VuZC9NU1xcbnVsdHJhdmlvbGV0L01cXG51bHVsYXRlL0RTR05YXFxudWx1bGF0aW9uL01cXG51bVxcbnVtYmVsL1NNXFxudW1iZXIvTVxcbnVtYmlsaWNhbFxcbnVtYmlsaWNpXFxudW1iaWxpY3VzL01cXG51bWJyYS9TTVxcbnVtYnJhZ2UvTVxcbnVtYnJlbGxhL1NNXFxudW1pYWsvU01cXG51bWxhdXQvTVNcXG51bXAvU0dNRFxcbnVtcGlyZS9NR0RTXFxudW1wdGVlbi9IXFxudW5hYnJpZGdlZC9NU1xcbnVuYWNjZXB0YWJpbGl0eVxcbnVuYWNjZXB0YWJsZVxcbnVuYWNjb21tb2RhdGluZ1xcbnVuYWNjb3VudGFibHlcXG51bmFkdmVudHVyb3VzXFxudW5hZXN0aGV0aWNcXG51bmFsdGVyYWJseVxcbnVuYW1iaXRpb3VzXFxudW5hbmltaXR5L01cXG51bmFuaW1vdXMvWVxcbnVuYXBwYXJlbnRcXG51bmFwcGV0aXppbmdcXG51bmFwcHJlY2lhdGl2ZVxcbnVuYXJ5XFxudW5hc3NlcnRpdmVcXG51bmFzc2ltaWxhYmxlXFxudW5hc3N1bWluZy9ZXFxudW5hdmFpbGluZy9ZXFxudW5hd2FyZS9TXFxudW5iZWtub3duc3RcXG51bmJlbmQvU0dcXG51bmJlbnRcXG51bmJpZFxcbnVuYmxpbmtpbmcvWVxcbnVuYmx1c2hpbmcvWVxcbnVuYm9zb20vREdcXG51bmJvdW5kL0RcXG51bmJveC9HRFNcXG51bmJyZWFrYWJsZVxcbnVuYnJva2VuXFxudW5jYW5ueS9UXFxudW5jYXAvU1xcbnVuY2FyaW5nXFxudW5jYXRhbG9ndWVkXFxudW5jZWFzaW5nL1lcXG51bmNoYW5nZWFibGVcXG51bmNoYXJhY3RlcmlzdGljXFxudW5jaGFyaXRhYmxlXFxudW5jaGFzdGUvUlRcXG51bmNpYWwvTVxcbnVuY2xlL1NNXFxudW5jbGVhbi9EUlBUXFxudW5jbGVhbmx5L1RcXG51bmNsZWFyL0RSVFxcbnVuY29tZm9ydGFibGVcXG51bmNvbW1vbi9UXFxudW5jb21wZWxsaW5nXFxudW5jb21wbGFpbmluZy9ZXFxudW5jb21wbGljYXRlZFxcbnVuY29tcHJlaGVuZGluZy9ZXFxudW5jb21wcm9taXNpbmcvWVxcbnVuY29uZGl0aW9uYWwvWVxcbnVuY29uZ2VuaWFsXFxudW5jb25zY2lvbmFibGVcXG51bmNvbnNjaW9uYWJseVxcbnVuY29uc2Npb3VzL01cXG51bmNvbnN0aXR1dGlvbmFsL1lcXG51bmNvbnRyb2xsYWJseVxcbnVuY29udHJvdmVyc2lhbFxcbnVuY29vbFxcbnVuY29vcGVyYXRpdmVcXG51bmNvdXRoL1lcXG51bmNydXNoYWJsZVxcbnVuY3Rpb24vU01cXG51bmN0dW91cy9ZUFxcbnVuY3R1b3VzbmVzcy9NXFxudW5jdXRcXG51bmRhdW50ZWQvWVxcbnVuZGVjaWRlZC9TTVxcbnVuZGVtb25zdHJhdGl2ZS9ZXFxudW5kZW5pYWJseVxcbnVuZGVyXFxudW5kZXJhY2hpZXZlL0xaR0RSU1xcbnVuZGVyYWNoaWV2ZXIvTVxcbnVuZGVyYWN0L1NER1xcbnVuZGVyYWdlXFxudW5kZXJhcHByZWNpYXRlZFxcbnVuZGVyYXJtL1NNXFxudW5kZXJiZWxseS9TTVxcbnVuZGVyYmlkL1NcXG51bmRlcmJpZGRpbmdcXG51bmRlcmJydXNoL01cXG51bmRlcmNhcnJpYWdlL01TXFxudW5kZXJjaGFyZ2UvTUdEU1xcbnVuZGVyY2xhc3MvTVNcXG51bmRlcmNsYXNzbWFuL01cXG51bmRlcmNsYXNzbWVuXFxudW5kZXJjbG90aGVzL01cXG51bmRlcmNsb3RoaW5nL01cXG51bmRlcmNvYXQvR0pTTURcXG51bmRlcmNvYXRpbmcvTVxcbnVuZGVyY292ZXJcXG51bmRlcmN1cnJlbnQvU01cXG51bmRlcmN1dC9TTVxcbnVuZGVyY3V0dGluZ1xcbnVuZGVyZGV2ZWxvcGVkXFxudW5kZXJkZXZlbG9wbWVudC9NXFxudW5kZXJkb2cvU01cXG51bmRlcmRvbmVcXG51bmRlcmVtcGxveWVkXFxudW5kZXJlbXBsb3ltZW50L01cXG51bmRlcmVzdGltYXRlL0RTTUdOWFxcbnVuZGVyZXN0aW1hdGlvbi9NXFxudW5kZXJleHBvc2UvR0RTXFxudW5kZXJleHBvc3VyZS9NU1xcbnVuZGVyZmVkXFxudW5kZXJmZWVkL0dTXFxudW5kZXJmbG9vclxcbnVuZGVyZmxvd1xcbnVuZGVyZm9vdFxcbnVuZGVyZnVuZGVkXFxudW5kZXJmdXIvTVxcbnVuZGVyZ2FybWVudC9TTVxcbnVuZGVyZ28vR1xcbnVuZGVyZ29lc1xcbnVuZGVyZ29uZVxcbnVuZGVyZ3JhZC9TXFxudW5kZXJncmFkdWF0ZS9TTVxcbnVuZGVyZ3JvdW5kL01TXFxudW5kZXJncm93dGgvTVxcbnVuZGVyaGFuZFxcbnVuZGVyaGFuZGVkL1BZXFxudW5kZXJoYW5kZWRuZXNzL01cXG51bmRlcmluZmxhdGVkXFxudW5kZXJsYWluXFxudW5kZXJsYXkvU01cXG51bmRlcmxpZS9TXFxudW5kZXJsaW5lL01HRFNcXG51bmRlcmxpbmcvTVNcXG51bmRlcmxpcC9TTVxcbnVuZGVybHlpbmdcXG51bmRlcm1hbm5lZFxcbnVuZGVybWVudGlvbmVkXFxudW5kZXJtaW5lL0dEU1xcbnVuZGVybW9zdFxcbnVuZGVybmVhdGgvTVxcbnVuZGVybmVhdGhzXFxudW5kZXJub3VyaXNoZWRcXG51bmRlcm5vdXJpc2htZW50L01cXG51bmRlcnBhaWRcXG51bmRlcnBhbnRzL01cXG51bmRlcnBhcnQvTVNcXG51bmRlcnBhc3MvTVNcXG51bmRlcnBheS9HU0xcXG51bmRlcnBheW1lbnQvU01cXG51bmRlcnBpbi9TXFxudW5kZXJwaW5uZWRcXG51bmRlcnBpbm5pbmcvTVNcXG51bmRlcnBsYXkvREdTXFxudW5kZXJwb3B1bGF0ZWRcXG51bmRlcnByaXZpbGVnZWRcXG51bmRlcnByb2R1Y3Rpb24vTVxcbnVuZGVycmF0ZS9HRFNcXG51bmRlcnJlcHJlc2VudGVkXFxudW5kZXJzY29yZS9EU01HXFxudW5kZXJzZWEvU1xcbnVuZGVyc2VjcmV0YXJ5L1NNXFxudW5kZXJzZWxsL0dTXFxudW5kZXJzZXhlZFxcbnVuZGVyc2hpcnQvU01cXG51bmRlcnNob290L1NHXFxudW5kZXJzaG9ydHMvTVxcbnVuZGVyc2hvdFxcbnVuZGVyc2lkZS9NU1xcbnVuZGVyc2lnbi9ER1NcXG51bmRlcnNpZ25lZC9NXFxudW5kZXJzaXplZFxcbnVuZGVyc2tpcnQvU01cXG51bmRlcnNvbGRcXG51bmRlcnN0YWZmZWRcXG51bmRlcnN0YW5kL1NHQkpcXG51bmRlcnN0YW5kYWJseVxcbnVuZGVyc3RhbmRpbmcvTVlcXG51bmRlcnN0YXRlL0RTTEdcXG51bmRlcnN0YXRlbWVudC9TTVxcbnVuZGVyc3Rvb2RcXG51bmRlcnN0dWR5L0dEU01cXG51bmRlcnRha2UvWkdKUlNcXG51bmRlcnRha2VuXFxudW5kZXJ0YWtlci9NXFxudW5kZXJ0YWtpbmcvTVxcbnVuZGVydGhpbmdzL01cXG51bmRlcnRvbmUvTVNcXG51bmRlcnRvb2tcXG51bmRlcnRvdy9TTVxcbnVuZGVydXNlZFxcbnVuZGVydXRpbGl6ZWRcXG51bmRlcnZhbHVhdGlvbi9NXFxudW5kZXJ2YWx1ZS9EU0dcXG51bmRlcndhdGVyXFxudW5kZXJ3YXlcXG51bmRlcndlYXIvTVxcbnVuZGVyd2VpZ2h0L01cXG51bmRlcndlbnRcXG51bmRlcndoZWxtL0RHU1xcbnVuZGVyd2lyZS9EU1xcbnVuZGVyd29ybGQvTVNcXG51bmRlcndyaXRlL1pHUlNcXG51bmRlcndyaXRlci9NXFxudW5kZXJ3cml0dGVuXFxudW5kZXJ3cm90ZVxcbnVuZGVzaXJhYmxlL01TXFxudW5kaWVzL01cXG51bmRvXFxudW5kb3VidGVkL1lcXG51bmRyYW1hdGljXFxudW5kdWVcXG51bmR1bGFudFxcbnVuZHVsYXRlL0RTWEdOXFxudW5kdWxhdGlvbi9NXFxudW5keWluZ1xcbnVuZWFydGhsaW5lc3MvTVxcbnVuZWFzZS9NXFxudW5lYXN5L1RcXG51bmVhdGFibGVcXG51bmVjb25vbWljXFxudW5lbXBsb3llZC9NXFxudW5lbmRpbmdcXG51bmVudGVycHJpc2luZ1xcbnVuZXF1YWwvRFlcXG51bmVycmluZy9ZXFxudW5lc3NlbnRpYWxcXG51bmV2ZW4vWVxcbnVuZXhjZXB0aW9uYWJseVxcbnVuZXhjaXRlZFxcbnVuZXhjaXRpbmdcXG51bmV4cGVjdGVkL1lQXFxudW5leHBlY3RlZG5lc3MvTVxcbnVuZmFpbGluZy9ZXFxudW5mYWlyL1BUUllcXG51bmZhbHRlcmluZ1xcbnVuZmFtaWxpYXJcXG51bmZhdGhvbWFibHlcXG51bmZlZFxcbnVuZmVlbGluZy9ZXFxudW5mZW1pbmluZVxcbnVuZml0L1NcXG51bmZpdHRpbmdcXG51bmZpeC9HRFNcXG51bmZsYWdnaW5nL1lcXG51bmZsYXBwYWJpbGl0eS9NXFxudW5mbGFwcGFibGVcXG51bmZsYXBwYWJseVxcbnVuZmxhdHRlcmluZ1xcbnVuZmxpbmNoaW5nL1lcXG51bmZvcmdldHRhYmx5XFxudW5mb3JnaXZhYmx5XFxudW5mb3J0dW5hdGUvTVNcXG51bmZyaWVuZGx5L1RcXG51bmZyb2NrL0RHXFxudW5mcnVpdGZ1bFxcbnVuZnVubnlcXG51bmdhaW5saW5lc3MvTVxcbnVuZ2Fpbmx5L1JQVFxcbnVuZ2VuZXJvdXNcXG51bmdlbnRsZVxcbnVuZ29kbHkvVFxcbnVuZ3JhY2VmdWwvWVxcbnVuZ3J1ZGdpbmdcXG51bmd1YXJkZWRcXG51bmd1ZW50L1NNXFxudW5ndWxhdGUvTVNcXG51bmhhbmR5L1RcXG51bmhhcHB5L1RcXG51bmhlYWx0aGZ1bFxcbnVuaGVhbHRoeS9UXFxudW5oaXN0b3JpY2FsXFxudW5ob2x5L1RcXG51bmh1cnRcXG51bmljYW1lcmFsXFxudW5pY2VsbHVsYXJcXG51bmljb3JuL1NNXFxudW5pY3ljbGUvU01cXG51bmlkaXJlY3Rpb25hbFxcbnVuaWZpY2F0aW9uL0FNXFxudW5pZm9ybS9TTURZR1xcbnVuaWZvcm1pdHkvTVxcbnVuaWZ5L0FHRFNOXFxudW5pbGF0ZXJhbC9ZXFxudW5pbGF0ZXJhbGlzbVxcbnVuaW1wb3J0YW50XFxudW5pbXByZXNzaXZlXFxudW5pbmZvcm1hdGl2ZVxcbnVuaW5oaWJpdGVkL1lcXG51bmluc3VyZWRcXG51bmludGVsbGlnZW50XFxudW5pbnRlbmRlZFxcbnVuaW50ZXJlc3RpbmdcXG51bmludGVycnVwdGVkL1lcXG51bmludGVycnVwdGlibGVcXG51bmludml0aW5nXFxudW5pb24vQVNNXFxudW5pb25pc20vTVxcbnVuaW9uaXN0L01TXFxudW5pcXVlL1lUUlBcXG51bmlxdWVuZXNzL01cXG51bmlzZXgvTVxcbnVuaXNvbi9NXFxudW5pdGFyeVxcbnVuaXRlL0FFR1NEXFxudW5pdGVkbHlcXG51bml0aWVzXFxudW5pdGl6ZS9EU0dcXG51bml0eS9FTVxcbnVuaXZhbGVudFxcbnVuaXZhbHZlL1NNXFxudW5pdmVyc2FsL01ZU1xcbnVuaXZlcnNhbGlzbVxcbnVuaXZlcnNhbGlzdFxcbnVuaXZlcnNhbGl0eS9NXFxudW5pdmVyc2FsaXplL0RTR1xcbnVuaXZlcnNlL1NNXFxudW5pdmVyc2l0eS9TTVxcbnVuaXZvY2FsXFxudW5qdXN0L1lcXG51bmtlbXB0XFxudW5raW5kL1RcXG51bmtpbmRseS9UXFxudW5rbm93YWJsZS9NXFxudW5rbm93bi9TTVxcbnVubGVhZGVkL01cXG51bmxlc3NcXG51bmxpa2UvUEJcXG51bmxpa2VseS9UXFxudW5saXRcXG51bmxvY2svRFNHXFxudW5sb3ZhYmxlXFxudW5sb3ZlbHkvVFJcXG51bmxvdmluZ1xcbnVubHVja3kvVFxcbnVubWFubHkvVFxcbnVubWFycmllZFxcbnVubWVhbmluZ1xcbnVubWVudGlvbmFibGUvTVNcXG51bm1lbnRpb25hYmxlcy9NXFxudW5tZXRcXG51bm1pbmRmdWxcXG51bm1pc3NhYmxlXFxudW5taXN0YWthYmx5XFxudW5tb3JhbFxcbnVubW92YWJsZVxcbnVubXVzaWNhbFxcbnVubmVjZXNzYXJ5XFxudW5uZXJ2aW5nL1lcXG51bm9ic2VydmFudFxcbnVub2ZmZW5zaXZlXFxudW5vZmZpY2lhbC9ZXFxudW5vcmlnaW5hbFxcbnVucGVvcGxlXFxudW5wZXJjZXB0aXZlXFxudW5wZXJzdWFzaXZlXFxudW5waWNrL0dEU1xcbnVucGluL1NcXG51bnBsZWFzaW5nXFxudW5wb2xpdGljYWxcXG51bnBvcHVsYXJcXG51bnByYWN0aWNhbFxcbnVucHJlY2VkZW50ZWQvWVxcbnVucHJvZmVzc2lvbmFsL1lcXG51bnByb21pc2luZ1xcbnVucHJvcGl0aW91c1xcbnVucXVlc3Rpb25pbmcvWVxcbnVucXVpZXQvVFJcXG51bnJlYWQvQlxcbnVucmVhZHlcXG51bnJlYWxcXG51bnJlYXNvbmluZ1xcbnVucmVnZW5lcmF0ZVxcbnVucmVsYXRlZFxcbnVucmVsZW50aW5nL1lcXG51bnJlbGlldmVkL1lcXG51bnJlbWFya2FibGVcXG51bnJlbWl0dGluZy9ZXFxudW5yZXBlbnRhbnRcXG51bnJlcG9ydGVkXFxudW5yZXByZXNlbnRhdGl2ZVxcbnVucmVzdC9NXFxudW5yZXZlYWxpbmdcXG51bnJpcGUvVFJcXG51bnJvbGwvR0RTXFxudW5yb21hbnRpY1xcbnVucnVsaW5lc3MvTVxcbnVucnVseS9SVFBcXG51bnNhZmUvWVRSXFxudW5zYWxlYWJsZVxcbnVuc2F2b3J5XFxudW5zY2F0aGVkXFxudW5zZWVpbmcvWVxcbnVuc2VlbWx5L1RcXG51bnNlZW4vTVxcbnVuc2VudGltZW50YWxcXG51bnNldFxcbnVuc2hha2FibGVcXG51bnNoYWthYmx5XFxudW5zaGFwZWx5XFxudW5zaG9ja2FibGVcXG51bnNob3JuXFxudW5zaWdodGxpbmVzcy9NXFxudW5zaWdodGx5L1BUXFxudW5zbWlsaW5nXFxudW5zb2NpYWJsZVxcbnVuc29jaWFsXFxudW5zb2xkXFxudW5zb3VuZC9QUllUXFxudW5zcGVha2FibGVcXG51bnNwZWFrYWJseVxcbnVuc3BlY2lmaWNcXG51bnNwZWN0YWN1bGFyXFxudW5zcG9ydGluZ1xcbnVuc3RhYmxlXFxudW5zdGVhZHkvVFJQXFxudW5zdGludGluZy9ZXFxudW5zdHJhcHBpbmdcXG51bnN1YnN0YW50aWFsXFxudW5zdWJ0bGVcXG51bnN1aXRhYmxlXFxudW5zdXJlXFxudW5zdXNwZWN0aW5nL1lcXG51bnN5bW1ldHJpY2FsXFxudW50YWN0ZnVsXFxudW50aGlua2FibHlcXG51bnRoaW5raW5nL1lcXG51bnRpZHkvUFRSXFxudW50aWxcXG51bnRpbWVseS9UXFxudW50aXJpbmcvWVxcbnVudG91Y2hhYmxlL01TXFxudW50b3dhcmRcXG51bnRydWUvUlRcXG51bnRydXN0d29ydGh5XFxudW50cnV0aC9NXFxudW51dHRlcmFibGVcXG51bnV0dGVyYWJseVxcbnVud2FycmFudGFibGVcXG51bndhcnkvVFxcbnVud2F2ZXJpbmdcXG51bndlZFxcbnVud2VsY29tZS9HXFxudW53ZWxsXFxudW53aWVsZGluZXNzL01cXG51bndpZWxkeS9UUlBcXG51bndpc2UvUllUXFxudW53b3JyaWVkXFxudW53b3J0aHkvVFxcbnVud291bmRcXG51bndyYXBwaW5nXFxudW55aWVsZGluZ1xcbnVwL1NcXG51cGJlYXQvTVNcXG51cGJyYWlkL1NHRFxcbnVwYnJpbmdpbmcvTVNcXG51cGNodWNrL1NHRFxcbnVwY29taW5nXFxudXBjb3VudHJ5L01cXG51cGRhdGUvTUdEUlNcXG51cGRyYWZ0L01TXFxudXBlbmQvU0dEXFxudXBmcm9udFxcbnVwZ3JhZGUvTUdEU1xcbnVwaGVhdmFsL01TXFxudXBoZWxkXFxudXBoaWxsL01TXFxudXBob2xkL1pHUlNcXG51cGhvbGRlci9NXFxudXBob2xzdGVyL0FTR0RcXG51cGhvbHN0ZXJlci9NU1xcbnVwaG9sc3RlcnkvTVxcbnVwa2VlcC9NXFxudXBsYW5kL01TXFxudXBsaWZ0L0pTTURHXFxudXBsb2FkL1NER1xcbnVwbWFya2V0XFxudXBtb3N0XFxudXBvblxcbnVwcGVkXFxudXBwZXIvU01cXG51cHBlcmNhc2UvTVxcbnVwcGVyY2xhc3NtYW4vTVxcbnVwcGVyY2xhc3NtZW5cXG51cHBlcmNsYXNzd29tYW5cXG51cHBlcmNsYXNzd29tZW5cXG51cHBlcmN1dC9NU1xcbnVwcGVyY3V0dGluZ1xcbnVwcGVybW9zdFxcbnVwcGluZ1xcbnVwcGlzaFxcbnVwcGl0eVxcbnVwcmFpc2UvRFNHXFxudXByZWFyL0dTRFxcbnVwcmlnaHQvTVlQU1xcbnVwcmlnaHRuZXNzL01cXG51cHJpc2luZy9TTVxcbnVwcml2ZXJcXG51cHJvYXIvU01cXG51cHJvYXJpb3VzL1lcXG51cHJvb3QvR1NEXFxudXBzY2FsZVxcbnVwc2V0L1NNXFxudXBzZXR0aW5nXFxudXBzaG90L1NNXFxudXBzaWRlL1NNXFxudXBzaWxvbi9NU1xcbnVwc3RhZ2UvR0RTXFxudXBzdGFpcnNcXG51cHN0YW5kaW5nXFxudXBzdGFydC9NRFNHXFxudXBzdGF0ZS9NXFxudXBzdHJlYW1cXG51cHN0cm9rZS9TTVxcbnVwc3VyZ2UvTUdEU1xcbnVwc3dpbmcvTVNcXG51cHRha2UvU01cXG51cHRlbXBvXFxudXB0aHJ1c3QvR1NNXFxudXB0aWNrL1NNXFxudXB0aWdodFxcbnVwdG93bi9NXFxudXB0cmVuZFxcbnVwdHVybi9HU01EXFxudXB3YXJkL1NZXFxudXB3aW5kXFxudXJhY2lsL01cXG51cmFuaXVtL01cXG51cmJhblxcbnVyYmFuZS9SWVRcXG51cmJhbml0eS9NXFxudXJiYW5pemF0aW9uL01cXG51cmJhbml6ZS9EU0dcXG51cmJhbm9sb2dpc3QvTVNcXG51cmJhbm9sb2d5L01cXG51cmNoaW4vU01cXG51cmVhL01cXG51cmVtaWEvTVxcbnVyZW1pY1xcbnVyZXRlci9TTVxcbnVyZXRoYW5lL01cXG51cmV0aHJhL01cXG51cmV0aHJhZVxcbnVyZXRocmFsXFxudXJnZS9NR0RTXFxudXJnZW5jeS9NXFxudXJnZW50L1lcXG51cmljXFxudXJpbmFsL1NNXFxudXJpbmFseXNlc1xcbnVyaW5hbHlzaXMvTVxcbnVyaW5hcnlcXG51cmluYXRlL0dORFNcXG51cmluYXRpb24vTVxcbnVyaW5lL01cXG51cm4vU01cXG51cm9nZW5pdGFsXFxudXJvbG9naWNhbFxcbnVyb2xvZ2lzdC9NU1xcbnVyb2xvZ3kvTVxcbnVyc2luZVxcbnVydGljYXJpYS9NXFxudXNhYmlsaXR5L01cXG51c2FibGUvVUFcXG51c2FnZS9TTVxcbnVzZS9BRURTTUdcXG51c2VkL1VcXG51c2VmdWwvUFlcXG51c2VmdWxuZXNzL01cXG51c2VsZXNzL1lQXFxudXNlbGVzc25lc3MvTVxcbnVzZXIvTVNcXG51c2VybmFtZS9NU1xcbnVzaGVyL1NNREdcXG51c2hlcmV0dGUvU01cXG51c3VcXG51c3VhbCdzXFxudXN1YWwvVVlcXG51c3VyZXIvU01cXG51c3VyaW91c1xcbnVzdXJwL1NEUlpHXFxudXN1cnBhdGlvbi9NXFxudXN1cnBlci9NXFxudXN1cnkvTVxcbnV0ZW5zaWwvU01cXG51dGVyaVxcbnV0ZXJpbmVcXG51dGVydXMvTVxcbnV0aWxpdGFyaWFuL01TXFxudXRpbGl0YXJpYW5pc20vTVxcbnV0aWxpdHkvU01cXG51dGlsaXphdGlvbi9NXFxudXRpbGl6ZS9HQkRTXFxudXRtb3N0L01cXG51dG9waWEvU01cXG51dHRlci9TRFlHXFxudXR0ZXJhbmNlL1NNXFxudXR0ZXJtb3N0L01cXG51dmVpdGlzXFxudXZ1bGEvU01cXG51dnVsYXIvTVNcXG51eG9yaW91c1xcbnYvQVNcXG52YWMvU1xcbnZhY2FuY3kvU01cXG52YWNhbnQvWVxcbnZhY2F0ZS9EU0dcXG52YWNhdGlvbi9aR01EUlNcXG52YWNhdGlvbmVyL01cXG52YWNhdGlvbmlzdC9TTVxcbnZhY2NpbmF0ZS9HTkRTWFxcbnZhY2NpbmF0aW9uL01cXG52YWNjaW5lL1NNXFxudmFjaWxsYXRlL1hHTkRTXFxudmFjaWxsYXRpb24vTVxcbnZhY3VpdHkvTVxcbnZhY3VvbGUvTVNcXG52YWN1b3VzL1lQXFxudmFjdW91c25lc3MvTVxcbnZhY3V1bS9HU01EXFxudmFnYWJvbmQvU01ER1xcbnZhZ2Fib25kYWdlL01cXG52YWdhcmlvdXNcXG52YWdhcnkvU01cXG52YWdpbmEvU01cXG52YWdpbmFlXFxudmFnaW5hbC9ZXFxudmFnaW5pdGlzXFxudmFncmFuY3kvTVxcbnZhZ3JhbnQvTVNcXG52YWd1ZS9SWVRQXFxudmFndWVuZXNzL01cXG52YWd1c1xcbnZhaW4vUllUXFxudmFpbmdsb3Jpb3VzL1lcXG52YWluZ2xvcnkvTVxcbnZhbFxcbnZhbGFuY2UvTVNcXG52YWxlL01TXFxudmFsZWRpY3Rpb24vTVNcXG52YWxlZGljdG9yaWFuL1NNXFxudmFsZWRpY3RvcnkvU01cXG52YWxlbmNlL01TXFxudmFsZW5jeS9TTVxcbnZhbGVudGluZS9TTVxcbnZhbGV0L1NNREdcXG52YWxldHVkaW5hcmlhbi9NU1xcbnZhbGV0dWRpbmFyaWFuaXNtL01cXG52YWxpYW5jZS9NXFxudmFsaWFudC9ZXFxudmFsaWQvWVxcbnZhbGlkYXRlL0lHTkRTXFxudmFsaWRhdGlvbi9JTVxcbnZhbGlkYXRpb25zXFxudmFsaWRpdHkvSU1cXG52YWxpZG5lc3MvTVxcbnZhbGlzZS9TTVxcbnZhbGxleS9TTVxcbnZhbG9yL01cXG52YWxvcm91cy9ZXFxudmFsdWFibGUvTVNcXG52YWx1YXRlL0RTR1xcbnZhbHVhdGlvbi9DQU1TXFxudmFsdWUnc1xcbnZhbHVlL0NBR1NEXFxudmFsdWVsZXNzXFxudmFsdWVyL1NNXFxudmFsdmUvRFNNR1xcbnZhbHZlbGVzc1xcbnZhbHZ1bGFyXFxudmFtb29zZS9EU0dcXG52YW1wL0FNREdTXFxudmFtcGlyZS9TTVxcbnZhbi9TTVxcbnZhbmFkaXVtL01cXG52YW5kYWwvU01cXG52YW5kYWxpc20vTVxcbnZhbmRhbGl6ZS9EU0dcXG52YW5lL01TXFxudmFuZ3VhcmQvTVNcXG52YW5pbGxhL1NNXFxudmFuaXNoL0pEU0dcXG52YW5pdHkvU01cXG52YW5uZWRcXG52YW5uaW5nXFxudmFucXVpc2gvWkdEUlNcXG52YW5xdWlzaGVyL01cXG52YW50YWdlL1NNXFxudmFwZS9HRFNcXG52YXBpZC9ZUFxcbnZhcGlkaXR5L01cXG52YXBpZG5lc3MvTVxcbnZhcG9yL1NNXFxudmFwb3JpemF0aW9uL01cXG52YXBvcml6ZS9EUlNaR1xcbnZhcG9yaXplci9NXFxudmFwb3JvdXNcXG52YXBvcndhcmVcXG52YXBvcnlcXG52YXF1ZXJvL01TXFxudmFyL1NcXG52YXJpYWJpbGl0eS9JTVxcbnZhcmlhYmxlL0lTTVxcbnZhcmlhYmx5L0lcXG52YXJpYW5jZS9TTVxcbnZhcmlhbnQvTVNcXG52YXJpYXRlL05YXFxudmFyaWF0aW9uL01cXG52YXJpY29sb3JlZFxcbnZhcmljb3NlXFxudmFyaWVkL1VcXG52YXJpZWdhdGUvRFNHTlxcbnZhcmllZ2F0aW9uL01cXG52YXJpZXRhbC9TTVxcbnZhcmlldHkvU01cXG52YXJpb3VzL1lcXG52YXJsZXQvU01cXG52YXJtaW50L01TXFxudmFybmlzaC9HTURTXFxudmFybmlzaGVkL1VcXG52YXJzaXR5L1NNXFxudmFyeS9EU0dcXG52YXJ5aW5nL1VcXG52YXNjdWxhclxcbnZhc2UvTVNcXG52YXNlY3RvbXkvU01cXG52YXNvY29uc3RyaWN0aW9uXFxudmFzb21vdG9yXFxudmFzc2FsL1NNXFxudmFzc2FsYWdlL01cXG52YXN0L01SWVRTUFxcbnZhc3RuZXNzL01cXG52YXQvU01cXG52YXR0ZWRcXG52YXR0aW5nXFxudmF1ZGV2aWxsZS9NXFxudmF1ZGV2aWxsaWFuL01TXFxudmF1bHQvU01EUlpHXFxudmF1bHRlci9NXFxudmF1bHRpbmcvTVxcbnZhdW50L1NNREdcXG52YlxcbnZlYWwvTVxcbnZlY3Rvci9TR01EXFxudmVlamF5L1NNXFxudmVlcC9NU1xcbnZlZXIvTURHU1xcbnZlZy9NXFxudmVnYW4vU01cXG52ZWdhbmlzbVxcbnZlZ2VidXJnZXIvU1xcbnZlZ2VzXFxudmVnZXRhYmxlL1NNXFxudmVnZXRhcmlhbi9TTVxcbnZlZ2V0YXJpYW5pc20vTVxcbnZlZ2V0YXRlL0dOVkRTXFxudmVnZXRhdGlvbi9NXFxudmVnZ2VkXFxudmVnZ2VzXFxudmVnZ2llL1NNXFxudmVnZ2llYnVyZ2VyL1NcXG52ZWdnaW5nXFxudmVoZW1lbmNlL01cXG52ZWhlbWVuY3kvTVxcbnZlaGVtZW50L1lcXG52ZWhpY2xlL01TXFxudmVoaWN1bGFyXFxudmVpbCdzXFxudmVpbC9VREdTXFxudmVpbi9NREdTXFxudmVsYVxcbnZlbGFyL1NNXFxudmVsZC9NU1xcbnZlbGx1bS9NXFxudmVsb2NpcGVkZS9NU1xcbnZlbG9jaXR5L1NNXFxudmVsb2Ryb21lL1NcXG52ZWxvdXIvTVNcXG52ZWx1bS9NXFxudmVsdmV0L01cXG52ZWx2ZXRlZW4vTVxcbnZlbHZldHlcXG52ZW5hbC9ZXFxudmVuYWxpdHkvTVxcbnZlbmF0aW9uL01cXG52ZW5kL0RHU1xcbnZlbmRldHRhL1NNXFxudmVuZGlibGVcXG52ZW5kb3IvTVNcXG52ZW5lZXIvTURHU1xcbnZlbmVyYWJpbGl0eS9NXFxudmVuZXJhYmxlXFxudmVuZXJhdGUvRFNHTlxcbnZlbmVyYXRpb24vTVxcbnZlbmVyZWFsXFxudmVuZ2VhbmNlL01cXG52ZW5nZWZ1bC9BWVxcbnZlbmlhbFxcbnZlbmlyZW1hbi9NXFxudmVuaXJlbWVuXFxudmVuaXNvbi9NXFxudmVub20vTVxcbnZlbm9tb3VzL1lcXG52ZW5vdXNcXG52ZW50J3NcXG52ZW50L0RHU1xcbnZlbnRpbGF0ZS9HTkRTXFxudmVudGlsYXRpb24vTVxcbnZlbnRpbGF0b3IvU01cXG52ZW50aWxhdG9yeVxcbnZlbnRyYWxcXG52ZW50cmljbGUvU01cXG52ZW50cmljdWxhclxcbnZlbnRyaWxvcXVpc20vTVxcbnZlbnRyaWxvcXVpc3QvU01cXG52ZW50cmlsb3F1eS9NXFxudmVudHVyZS9EU01HXFxudmVudHVyZXNvbWUvUFlcXG52ZW50dXJlc29tZW5lc3MvTVxcbnZlbnR1cm91cy9QWVxcbnZlbnR1cm91c25lc3MvTVxcbnZlbnVlL0FTTVxcbnZlcmFjaW91cy9ZXFxudmVyYWNpdHkvTVxcbnZlcmFuZGEvU01cXG52ZXJhcGFtaWxcXG52ZXJiL0tNU1xcbnZlcmJhbC9NWVNcXG52ZXJiYWxpemF0aW9uL01cXG52ZXJiYWxpemUvR0RTXFxudmVyYmF0aW1cXG52ZXJiZW5hL1NNXFxudmVyYmlhZ2UvTVNcXG52ZXJib3NlL1lcXG52ZXJib3NpdHkvTVxcbnZlcmJvdGVuXFxudmVyZGFudC9ZXFxudmVyZGljdC9TTVxcbnZlcmRpZ3Jpcy9HTURTXFxudmVyZHVyZS9NXFxudmVyZ2Unc1xcbnZlcmdlL0ZEU0dcXG52ZXJnZXIvTVNcXG52ZXJpZmlhYmxlL1VcXG52ZXJpZmljYXRpb24vTVxcbnZlcmlmaWVkL1VcXG52ZXJpZnkvRFNOR1xcbnZlcmlseVxcbnZlcmlzaW1pbGl0dWRlL01cXG52ZXJpdGFibGVcXG52ZXJpdGFibHlcXG52ZXJpdHkvU01cXG52ZXJtaWNlbGxpL01cXG52ZXJtaWN1bGl0ZS9NXFxudmVybWlmb3JtXFxudmVybWlsaW9uL01cXG52ZXJtaW4vTVxcbnZlcm1pbm91c1xcbnZlcm1vdXRoL01cXG52ZXJuYWN1bGFyL01TXFxudmVybmFsXFxudmVybmllci9TTVxcbnZlcm9uaWNhL01cXG52ZXJydWNhL1NNXFxudmVycnVjYWVcXG52ZXJzYVxcbnZlcnNhdGlsZVxcbnZlcnNhdGlsaXR5L01cXG52ZXJzZS9BRk5HTVNEWFxcbnZlcnNlZC9VXFxudmVyc2lmaWNhdGlvbi9NXFxudmVyc2lmaWVyL01cXG52ZXJzaWZ5L1pHTkRSU1xcbnZlcnNpb24vQUZJTVNcXG52ZXJzaW9uZWRcXG52ZXJzaW9uaW5nXFxudmVyc28vU01cXG52ZXJzdXNcXG52ZXJ0L0FcXG52ZXJ0ZWJyYS9NXFxudmVydGVicmFlXFxudmVydGVicmFsXFxudmVydGVicmF0ZS9JTVNcXG52ZXJ0ZXgvTVNcXG52ZXJ0aWNhbC9NWVNcXG52ZXJ0aWNlc1xcbnZlcnRpZ2lub3VzXFxudmVydGlnby9NXFxudmVydmUvTVxcbnZlcnkvUlRcXG52ZXNpY2xlL1NNXFxudmVzaWN1bGFyXFxudmVzaWN1bGF0ZVxcbnZlc3Blci9NU1xcbnZlc3NlbC9NU1xcbnZlc3Qnc1xcbnZlc3QvSUxER1NcXG52ZXN0YWwvTVNcXG52ZXN0aWJ1bGUvTVNcXG52ZXN0aWdlL1NNXFxudmVzdGlnaWFsL1lcXG52ZXN0aW5nL01cXG52ZXN0bWVudC9JTVNcXG52ZXN0cnkvU01cXG52ZXN0cnltYW4vTVxcbnZlc3RyeW1lblxcbnZldC9TTVxcbnZldGNoL01TXFxudmV0ZXJhbi9TTVxcbnZldGVyaW5hcmlhbi9NU1xcbnZldGVyaW5hcnkvU01cXG52ZXRvL01ER1xcbnZldG9lc1xcbnZldHRlZFxcbnZldHRpbmdcXG52ZXgvR0RTXFxudmV4YXRpb24vU01cXG52ZXhhdGlvdXMvWVxcbnZoZlxcbnZpXFxudmlhXFxudmlhYmlsaXR5L01cXG52aWFibGVcXG52aWFibHlcXG52aWFkdWN0L1NNXFxudmlhbC9NU1xcbnZpYW5kL1NNXFxudmliZS9NU1xcbnZpYmVzL01cXG52aWJyYWhhcnAvU01cXG52aWJyYW5jeS9NXFxudmlicmFudC9ZXFxudmlicmFwaG9uZS9NU1xcbnZpYnJhcGhvbmlzdC9NU1xcbnZpYnJhdGUvR05EU1hcXG52aWJyYXRpb24vTVxcbnZpYnJhdG8vTVNcXG52aWJyYXRvci9TTVxcbnZpYnJhdG9yeVxcbnZpYnVybnVtL1NNXFxudmljYXIvU01cXG52aWNhcmFnZS9TTVxcbnZpY2FyaW91cy9ZUFxcbnZpY2FyaW91c25lc3MvTVxcbnZpY2UvQ01TXFxudmljZWRcXG52aWNlZ2VyZW50L1NNXFxudmljZW5uaWFsXFxudmljZXJlZ2FsXFxudmljZXJveS9NU1xcbnZpY2h5c3NvaXNlL01cXG52aWNpbmdcXG52aWNpbml0eS9NXFxudmljaW91cy9ZUFxcbnZpY2lvdXNuZXNzL01cXG52aWNpc3NpdHVkZS9TTVxcbnZpY3RpbS9NU1xcbnZpY3RpbWl6YXRpb24vTVxcbnZpY3RpbWl6ZS9HRFNcXG52aWN0aW1sZXNzXFxudmljdG9yL01TXFxudmljdG9yaW91cy9ZXFxudmljdG9yeS9TTVxcbnZpY3R1YWwvU01ER1xcbnZpY3VuYS9NU1xcbnZpZGVsaWNldFxcbnZpZGVvL0dTTURcXG52aWRlb2Nhc3NldHRlL1NNXFxudmlkZW9jb25mZXJlbmNpbmdcXG52aWRlb2Rpc2MvTVNcXG52aWRlb3Bob25lL01TXFxudmlkZW90YXBlL0RTTUdcXG52aWRlb3RleFxcbnZpZS9EU1xcbnZpZXcvQU1EUlNaR1xcbnZpZXdhYmxlXFxudmlld2VyL0FNXFxudmlld2Vyc2hpcC9NXFxudmlld2ZpbmRlci9TTVxcbnZpZXdpbmcvU01cXG52aWV3cG9pbnQvTVNcXG52aWdlc2ltYWxcXG52aWdpbC9TTVxcbnZpZ2lsYW5jZS9NXFxudmlnaWxhbnQvWVxcbnZpZ2lsYW50ZS9TTVxcbnZpZ2lsYW50aXNtL01cXG52aWdpbGFudGlzdC9NXFxudmlnbmV0dGUvRFNNR1xcbnZpZ25ldHRpc3QvTVNcXG52aWdvci9NXFxudmlnb3JvdXMvWVxcbnZpaVxcbnZpaWlcXG52aWtpbmcvTVNcXG52aWxlL1lUUFJcXG52aWxlbmVzcy9NXFxudmlsaWZpY2F0aW9uL01cXG52aWxpZnkvRFNOR1xcbnZpbGxhL1NNXFxudmlsbGFnZS9SU01aXFxudmlsbGFnZXIvTVxcbnZpbGxhaW4vU01cXG52aWxsYWlub3VzXFxudmlsbGFpbnkvU01cXG52aWxsZWluL1NNXFxudmlsbGVpbmFnZS9NXFxudmlsbGlcXG52aWxsdXMvTVxcbnZpbS9NXFxudmluYWlncmV0dGUvTVxcbnZpbmNpYmxlL0lcXG52aW5kaWNhdGUvWERTR05cXG52aW5kaWNhdGlvbi9NXFxudmluZGljYXRvci9NU1xcbnZpbmRpY3RpdmUvUFlcXG52aW5kaWN0aXZlbmVzcy9NXFxudmluZS9NU1xcbnZpbmVnYXIvTVxcbnZpbmVnYXJ5XFxudmluZXlhcmQvTVNcXG52aW5vL01cXG52aW5vdXNcXG52aW50YWdlL01TXFxudmludG5lci9NU1xcbnZpbnlsL1NNXFxudmlvbC9NQlNcXG52aW9sYS9TTVxcbnZpb2xhYmxlL0lcXG52aW9sYXRlL0dORFNYXFxudmlvbGF0aW9uL01cXG52aW9sYXRvci9TTVxcbnZpb2xlbmNlL01cXG52aW9sZW50L1lcXG52aW9sZXQvTVNcXG52aW9saW4vTVNcXG52aW9saW5jZWxsby9TXFxudmlvbGluaXN0L1NNXFxudmlvbGlzdC9NU1xcbnZpb2xvbmNlbGxpc3QvU01cXG52aW9sb25jZWxsby9NU1xcbnZpcGVyL1NNXFxudmlwZXJvdXNcXG52aXJhZ28vTVxcbnZpcmFnb2VzXFxudmlyYWxcXG52aXJlby9TTVxcbnZpcmdpbi9NU1xcbnZpcmdpbmFsL1NNXFxudmlyZ2luaXR5L01cXG52aXJndWxlL01TXFxudmlyaWxlXFxudmlyaWxpdHkvTVxcbnZpcm9sb2dpc3QvU01cXG52aXJvbG9neS9NXFxudmlydHVhbC9ZXFxudmlydHVhbGl6YXRpb25cXG52aXJ0dWUvU01cXG52aXJ0dW9zaXR5L01cXG52aXJ0dW9zby9NXFxudmlydHVvdXMvWVBcXG52aXJ0dW91c25lc3MvTVxcbnZpcnVsZW5jZS9NXFxudmlydWxlbnQvWVxcbnZpcnVzL01TXFxudmlzYS9NRFNHXFxudmlzYWdlL01TXFxudmlzY2VyYVxcbnZpc2NlcmFsL1lcXG52aXNjaWRcXG52aXNjb3NlL01cXG52aXNjb3NpdHkvTVxcbnZpc2NvdW50L1NNXFxudmlzY291bnRjeS9TTVxcbnZpc2NvdW50ZXNzL01TXFxudmlzY291c1xcbnZpc2N1cy9NXFxudmlzZS9BQ01HRFNcXG52aXNpYmlsaXR5L0lNXFxudmlzaWJsZS9JXFxudmlzaWJseS9JXFxudmlzaW9uL0tHRFNNXFxudmlzaW9uYXJ5L1NNXFxudmlzaXQnc1xcbnZpc2l0L0FTR0RcXG52aXNpdGFudC9NU1xcbnZpc2l0YXRpb24vTVNcXG52aXNpdG9yL01TXFxudmlzb3IvU01cXG52aXN0YS9TTVxcbnZpc3VhbC9TTVlcXG52aXN1YWxpemF0aW9uL1NNXFxudmlzdWFsaXplL0RSU1pHXFxudmlzdWFsaXplci9NXFxudml0YS9NXFxudml0YWVcXG52aXRhbC9TWVxcbnZpdGFsaXR5L01cXG52aXRhbGl6YXRpb24vQU1cXG52aXRhbGl6ZS9DQUdTRFxcbnZpdGFscy9NXFxudml0YW1pbi9NU1xcbnZpdGlhdGUvR05EU1xcbnZpdGlhdGlvbi9NXFxudml0aWN1bHR1cmUvTVxcbnZpdGljdWx0dXJpc3QvTVNcXG52aXRyZW91c1xcbnZpdHJpZmFjdGlvbi9NXFxudml0cmlmaWNhdGlvbi9NXFxudml0cmlmeS9HTkRTXFxudml0cmluZS9TTVxcbnZpdHJpb2wvTVxcbnZpdHJpb2xpY1xcbnZpdHJpb2xpY2FsbHlcXG52aXR0bGVzL01cXG52aXR1cGVyYXRlL0dOVkRTXFxudml0dXBlcmF0aW9uL01cXG52aXZhL01TXFxudml2YWNlXFxudml2YWNpb3VzL1BZXFxudml2YWNpb3VzbmVzcy9NXFxudml2YWNpdHkvTVxcbnZpdmFyaWFcXG52aXZhcml1bS9TTVxcbnZpdmlkL1JZVFBcXG52aXZpZG5lc3MvTVxcbnZpdmlmeS9BRFNHXFxudml2aXBhcm91c1xcbnZpdmlzZWN0L0RHU1xcbnZpdmlzZWN0aW9uL01cXG52aXZpc2VjdGlvbmFsXFxudml2aXNlY3Rpb25pc3QvU01cXG52aXhlbi9TTVxcbnZpeGVuaXNoL1lcXG52aXpcXG52aXppZXIvU01cXG52bGZcXG52b2NhYlxcbnZvY2FibGUvTVNcXG52b2NhYnVsYXJ5L1NNXFxudm9jYWwvU01ZXFxudm9jYWxpY1xcbnZvY2FsaXN0L1NNXFxudm9jYWxpemF0aW9uL01TXFxudm9jYWxpemUvRFNHXFxudm9jYXRpb24vRklLQVNNXFxudm9jYXRpb25hbC9ZXFxudm9jYXRpdmUvTVNcXG52b2NpZmVyYXRlL0RTR05cXG52b2NpZmVyYXRpb24vTVxcbnZvY2lmZXJvdXMvWVBcXG52b2NpZmVyb3VzbmVzcy9NXFxudm9ka2EvU01cXG52b2d1ZS9TTVxcbnZvZ3Vpc2hcXG52b2ljZS9JRFNNR1xcbnZvaWNlZC9VXFxudm9pY2VsZXNzL1BZXFxudm9pY2VsZXNzbmVzcy9NXFxudm9pY2VtYWlsL1NNXFxudm9pZC9NRFNHQlxcbnZvaWxhXFxudm9pbGUvTVxcbnZvbC9TXFxudm9sYXRpbGVcXG52b2xhdGlsaXR5L01cXG52b2xhdGlsaXplL0RTR1xcbnZvbGNhbmljXFxudm9sY2FuaXNtXFxudm9sY2Fuby9NXFxudm9sY2Fub2VzXFxudm9sZS9NU1xcbnZvbGl0aW9uL01cXG52b2xpdGlvbmFsXFxudm9sbGV5L0dTTURcXG52b2xsZXliYWxsL01TXFxudm9sdC9BTVNcXG52b2x0YWdlL01TXFxudm9sdGFpY1xcbnZvbHRtZXRlci9TTVxcbnZvbHViaWxpdHkvTVxcbnZvbHVibGVcXG52b2x1Ymx5XFxudm9sdW1lL1NNXFxudm9sdW1ldHJpY1xcbnZvbHVtaW5vdXMvWVBcXG52b2x1bWlub3VzbmVzcy9NXFxudm9sdW50YXJpbHkvSVxcbnZvbHVudGFyaXNtL01cXG52b2x1bnRhcnkvU01cXG52b2x1bnRlZXIvU0dNRFxcbnZvbHVudGVlcmlzbS9NXFxudm9sdXB0dWFyeS9TTVxcbnZvbHVwdHVvdXMvUFlcXG52b2x1cHR1b3VzbmVzcy9NXFxudm9sdXRlL1NNXFxudm9taXQvU01ER1xcbnZvb2Rvby9HU01EXFxudm9vZG9vaXNtL01cXG52b3JhY2lvdXMvUFlcXG52b3JhY2lvdXNuZXNzL01cXG52b3JhY2l0eS9NXFxudm9ydGV4L01TXFxudm90YXJ5L1NNXFxudm90ZSdzXFxudm90ZS9DR1ZEU1xcbnZvdGVyL1NNXFxudm91Y2gvRFJTWkdcXG52b3VjaGVyL01cXG52b3VjaHNhZmUvRFNHXFxudm93L1NHTURcXG52b3dlbC9TTVxcbnZveWFnZS9NWkdEUlNcXG52b3lhZ2VyL01cXG52b3lhZ2V1ci9TTVxcbnZveWV1ci9NU1xcbnZveWV1cmlzbS9NXFxudm95ZXVyaXN0aWNcXG52dWxjYW5pemF0aW9uL01cXG52dWxjYW5pemUvR0RTXFxudnVsZ2FyL1JZVFxcbnZ1bGdhcmlhbi9NU1xcbnZ1bGdhcmlzbS9NU1xcbnZ1bGdhcml0eS9TTVxcbnZ1bGdhcml6YXRpb24vTVxcbnZ1bGdhcml6ZS9aR0RSU1xcbnZ1bGdhcml6ZXIvTVxcbnZ1bG5lcmFiaWxpdGllc1xcbnZ1bG5lcmFiaWxpdHkvSU1cXG52dWxuZXJhYmxlL0lcXG52dWxuZXJhYmx5L0lcXG52dWxwaW5lXFxudnVsdHVyZS9TTVxcbnZ1bHR1cm91c1xcbnZ1bHZhL01cXG52dWx2YWVcXG52dXZ1emVsYS9NU1xcbnZ5aW5nXFxudy9ETlhUR1ZKXFxud2FiYml0L1NcXG53YWNrL01SVFNcXG53YWNraW5lc3MvTVxcbndhY2tvL1NNXFxud2Fja3kvUlBUXFxud2FkL1NaR01EUlxcbndhZGRlZFxcbndhZGRpbmcvTVxcbndhZGRsZS9EU01HXFxud2FkZS9NU1xcbndhZGVyL01cXG53YWRlcnMvTVxcbndhZGdlL1NcXG53YWRpL01TXFxud2FmZXIvU01cXG53YWZmbGUvTVpHRFJTXFxud2FmZmxlci9NXFxud2FmdC9NREdTXFxud2FnL1NaR01EUlxcbndhZ2UvTVNcXG53YWdlZC9VXFxud2FnZXIvWkdNRFJcXG53YWdlcmVyL01cXG53YWdnZWRcXG53YWdnZXJ5L1NNXFxud2FnZ2luZ1xcbndhZ2dpc2gvWVBcXG53YWdnaXNobmVzcy9NXFxud2FnZ2xlL01HRFNcXG53YWdvbi9aU01SXFxud2Fnb25lci9NXFxud2FndGFpbC9TTVxcbndhaWYvTVNcXG53YWlsL01EUlpHU1xcbndhaWxlci9NXFxud2FpbGluZy9NXFxud2Fpbi9NU1xcbndhaW5zY290L1NKTURHXFxud2FpbnNjb3RpbmcvTVxcbndhaW53cmlnaHQvTVNcXG53YWlzdC9TTVxcbndhaXN0YmFuZC9NU1xcbndhaXN0Y29hdC9NU1xcbndhaXN0bGluZS9NU1xcbndhaXQvTURSWkdTXFxud2FpdGVyL01cXG53YWl0aW5nL01cXG53YWl0cGVyc29uL01TXFxud2FpdHJlc3MvTVNcXG53YWl0c3RhZmYvTVxcbndhaXZlL0RSU1pHXFxud2FpdmVyL01cXG53YWtlL01HSkRTXFxud2FrZWZ1bC9QWVxcbndha2VmdWxuZXNzL01cXG53YWtlbi9HU0RcXG53YWxkby9TXFxud2FsZG9lc1xcbndhbGUvTUdEU1xcbndhbGsvTURSWkdTXFxud2Fsa2Fib3V0L1NcXG53YWxrYXdheS9NU1xcbndhbGtlci9NXFxud2Fsa2llc1xcbndhbGtpbmcvTVxcbndhbGtvdXQvU01cXG53YWxrb3Zlci9NU1xcbndhbGt3YXkvU01cXG53YWxsL01ER1NcXG53YWxsYWJ5L1NNXFxud2FsbGFoXFxud2FsbGFoc1xcbndhbGxib2FyZC9NXFxud2FsbGV0L01TXFxud2FsbGV5ZS9EU01cXG53YWxsZmxvd2VyL01TXFxud2FsbG9wL01EU0pHXFxud2FsbG9waW5nL01cXG53YWxsb3cvTURTR1xcbndhbGxwYXBlci9TTURHXFxud2FsbHkvU1xcbndhbG51dC9NU1xcbndhbHJ1cy9NU1xcbndhbHR6L1pHTURSU1xcbndhbHR6ZXIvTVxcbndhbXB1bS9NXFxud2FuL0dQRFlcXG53YW5kL01TXFxud2FuZGVyL0RSU0paR1xcbndhbmRlcmVyL01cXG53YW5kZXJpbmdzL01cXG53YW5kZXJsdXN0L1NNXFxud2FuZS9NU1xcbndhbmdsZS9NWkdEUlNcXG53YW5nbGVyL01cXG53YW5rL0RSWkdTXFxud2FubmFcXG53YW5uYWJlL1NNXFxud2FubmFiZWUvU1xcbndhbm5lclxcbndhbm5lc3MvTVxcbndhbm5lc3RcXG53YW50L01ER1NcXG53YW50ZWQvVVxcbndhbnRvbi9NRFlTUEdcXG53YW50b25uZXNzL01cXG53YXBpdGkvTVNcXG53YXIvU01cXG53YXJibGUvTVpHRFJTXFxud2FyYmxlci9NXFxud2FyYm9ubmV0L1NNXFxud2FyZC9BTURHU1xcbndhcmRlbi9NU1xcbndhcmRlci9NU1xcbndhcmRyZXNzL1NcXG53YXJkcm9iZS9TTVxcbndhcmRyb29tL1NNXFxud2FyZS9NU1xcbndhcmVob3VzZS9EU01HXFxud2FyZXpcXG53YXJmYXJlL01cXG53YXJmYXJpblxcbndhcmhlYWQvTVNcXG53YXJob3JzZS9TTVxcbndhcmlseS9VXFxud2FyaW5lc3MvVU1cXG53YXJsaWtlXFxud2FybG9jay9NU1xcbndhcmxvcmQvTVNcXG53YXJtL1BEUllIWlRHU1xcbndhcm1ibG9vZGVkXFxud2FybWVyL01cXG53YXJtaGVhcnRlZC9QXFxud2FybWhlYXJ0ZWRuZXNzL01cXG53YXJtaXNoXFxud2FybW5lc3MvTVxcbndhcm1vbmdlci9TTUdcXG53YXJtb25nZXJpbmcvTVxcbndhcm10aC9NXFxud2Fybi9KREdTXFxud2FybmluZy9NXFxud2FycC9NREdTXFxud2FycGFpbnRcXG53YXJwYXRoL01cXG53YXJwYXRoc1xcbndhcnBsYW5lL01TXFxud2FycmFudC9HTURTXFxud2FycmFudGVkL1VcXG53YXJyYW50eS9EU01HXFxud2FycmVkXFxud2FycmVuL01TXFxud2FycmluZ1xcbndhcnJpb3IvU01cXG53YXJzaGlwL1NNXFxud2FydC9NU1xcbndhcnRob2cvU01cXG53YXJ0aW1lL01cXG53YXJ0eS9UUlxcbndhcnkvVVBSVFxcbndhc1xcbndhc2FiaVxcbndhc2gvQkpNRFJTWkdcXG53YXNoYWJsZS9TTVxcbndhc2hiYXNpbi9TTVxcbndhc2hib2FyZC9TTVxcbndhc2hib3dsL1NNXFxud2FzaGNsb3RoL01cXG53YXNoY2xvdGhzXFxud2FzaGVkL1VcXG53YXNoZXIvTVxcbndhc2hlcndvbWFuL01cXG53YXNoZXJ3b21lblxcbndhc2hpbmcvTVxcbndhc2hvdXQvTVNcXG53YXNocmFnL01TXFxud2FzaHJvb20vTVNcXG53YXNoc3RhbmQvU01cXG53YXNodHViL01TXFxud2FzaHkvVFJcXG53YXNuJ3RcXG53YXNwL01TXFxud2FzcGlzaC9ZUFxcbndhc3Bpc2huZXNzL01cXG53YXNzYWlsL1NNREdcXG53YXN0XFxud2FzdGFnZS9NXFxud2FzdGUvRFJTTVpHXFxud2FzdGViYXNrZXQvTVNcXG53YXN0ZWZ1bC9QWVxcbndhc3RlZnVsbmVzcy9NXFxud2FzdGVsYW5kL1NNXFxud2FzdGVwYXBlci9NXFxud2FzdGVyL01cXG53YXN0ZXdhdGVyXFxud2FzdHJlbC9TTVxcbndhdGNoL0JaR01EUlNcXG53YXRjaGFibGUvVVxcbndhdGNoYmFuZC9NU1xcbndhdGNoZG9nL1NNXFxud2F0Y2hlci9NXFxud2F0Y2hmdWwvWVBcXG53YXRjaGZ1bG5lc3MvTVxcbndhdGNobWFrZXIvTVNcXG53YXRjaG1ha2luZy9NXFxud2F0Y2htYW4vTVxcbndhdGNobWVuXFxud2F0Y2hzdHJhcC9TXFxud2F0Y2h0b3dlci9TTVxcbndhdGNod29yZC9NU1xcbndhdGVyL0dTTURcXG53YXRlcmJlZC9NU1xcbndhdGVyYmlyZC9TTVxcbndhdGVyYm9hcmQvTURKU0dcXG53YXRlcmJvYXJkaW5nL01cXG53YXRlcmJvcm5lXFxud2F0ZXJjb2xvci9NU1xcbndhdGVyY291cnNlL1NNXFxud2F0ZXJjcmFmdC9NXFxud2F0ZXJjcmVzcy9NXFxud2F0ZXJmYWxsL1NNXFxud2F0ZXJmb3dsL1NNXFxud2F0ZXJmcm9udC9NU1xcbndhdGVyaG9sZS9TTVxcbndhdGVyaW5lc3MvTVxcbndhdGVybGlseS9TTVxcbndhdGVybGluZS9NU1xcbndhdGVybG9nZ2VkXFxud2F0ZXJtYXJrL01ER1NcXG53YXRlcm1lbG9uL1NNXFxud2F0ZXJtaWxsL01TXFxud2F0ZXJwcm9vZi9TTURHXFxud2F0ZXJwcm9vZmluZy9NXFxud2F0ZXJzL01cXG53YXRlcnNoZWQvTVNcXG53YXRlcnNpZGUvTVNcXG53YXRlcnNwb3V0L1NNXFxud2F0ZXJ0aWdodFxcbndhdGVyd2F5L01TXFxud2F0ZXJ3aGVlbC9TTVxcbndhdGVyd29ya3MvTVxcbndhdGVyeS9QVFJcXG53YXR0L01TXFxud2F0dGFnZS9NXFxud2F0dGxlL01HRFNcXG53YXZlL01aR0RSU1xcbndhdmViYW5kL1NcXG53YXZlZm9ybVxcbndhdmVmcm9udFxcbndhdmVsZW5ndGgvTVxcbndhdmVsZW5ndGhzXFxud2F2ZWxldC9TTVxcbndhdmVsaWtlXFxud2F2ZXIvWkdNRFJcXG53YXZlcmVyL01cXG53YXZlcmluZy9ZXFxud2F2aW5lc3MvTVxcbndhdnkvUFJUXFxud2F4L0dNRE5TXFxud2F4aW5lc3MvTVxcbndheHdpbmcvU01cXG53YXh3b3JrL1NNXFxud2F4eS9SUFRcXG53YXkvU01cXG53YXliaWxsL1NNXFxud2F5ZmFyZXIvTVNcXG53YXlmYXJpbmcvU01cXG53YXlsYWlkXFxud2F5bGF5L1JTWkdcXG53YXlsYXllci9NXFxud2F5c2lkZS9TTVxcbndheXdhcmQvUFlcXG53YXl3YXJkbmVzcy9NXFxud2F6b28vU1xcbndlXFxud2UnZFxcbndlJ2xsXFxud2UncmVcXG53ZSd2ZVxcbndlYWsvUE5SWVhUXFxud2Vha2VuL0RSWkdcXG53ZWFrZW5lci9NXFxud2Vha2Zpc2gvTVNcXG53ZWFraXNoXFxud2Vha2xpbmcvU01cXG53ZWFrbmVzcy9NU1xcbndlYWwvTUhTXFxud2VhbHRoL01cXG53ZWFsdGhpbmVzcy9NXFxud2VhbHRoeS9UUlBcXG53ZWFuL0RHU1xcbndlYXBvbi9NU1xcbndlYXBvbml6ZS9HRFNcXG53ZWFwb25sZXNzXFxud2VhcG9ucnkvTVxcbndlYXIvTVJCSlNaR1xcbndlYXJhYmxlL1VcXG53ZWFyZXIvTVxcbndlYXJpZWQvVVxcbndlYXJpbHlcXG53ZWFyaW5lc3MvTVxcbndlYXJpc29tZS9ZXFxud2VhcnkvVEdEUlNQXFxud2Vhc2VsL01EWVNHXFxud2VhdGhlci9TTURHXFxud2VhdGhlcmJvYXJkL1NHXFxud2VhdGhlcmNvY2svTVNcXG53ZWF0aGVyaW5nL01cXG53ZWF0aGVyaXphdGlvbi9NXFxud2VhdGhlcml6ZS9EU0dcXG53ZWF0aGVybWFuL01cXG53ZWF0aGVybWVuXFxud2VhdGhlcnBlcnNvbi9NU1xcbndlYXRoZXJwcm9vZi9HU0RcXG53ZWF0aGVyc3RyaXAvU1xcbndlYXRoZXJzdHJpcHBlZFxcbndlYXRoZXJzdHJpcHBpbmcvTVxcbndlYXZlL0RSU01aR1xcbndlYXZlci9NXFxud2VhdmluZy9NXFxud2ViL1NNXFxud2ViYmVkXFxud2ViYmluZy9NXFxud2ViY2FtL01TXFxud2ViY2FzdC9TTUdcXG53ZWJmZWV0XFxud2ViZm9vdC9NXFxud2ViaW5hci9TTVxcbndlYmlzb2RlL01TXFxud2VibG9nL01TXFxud2VibWFzdGVyL1NNXFxud2VibWlzdHJlc3MvTVNcXG53ZWJzaXRlL1NNXFxud2VkL0FTXFxud2VkZGVkL0FcXG53ZWRkZXJcXG53ZWRkaW5nL1NNXFxud2VkZ2UvRFNNR1xcbndlZGdpZS9NU1xcbndlZGxvY2svTVxcbndlZS9SU01UXFxud2VlZC9NRFJTWkdcXG53ZWVkZXIvTVxcbndlZWRraWxsZXIvU1xcbndlZWRsZXNzXFxud2VlZHkvVFJcXG53ZWVpbmdcXG53ZWVrL01ZU1xcbndlZWtkYXkvU01cXG53ZWVrZW5kL1NaR01EUlxcbndlZWtseS9TTVxcbndlZWtuaWdodC9TTVxcbndlZW4vRFNHXFxud2VlbmllL01UUlNcXG53ZWVuc3kvUlRcXG53ZWVueVxcbndlZXAvTVJKU1pHXFxud2VlcGVyL01cXG53ZWVwaWVcXG53ZWVweS9UUlNNXFxud2VldmlsL01TXFxud2VmdC9NU1xcbndlaWdoJ3NcXG53ZWlnaC9BR0RcXG53ZWlnaGJyaWRnZS9TXFxud2VpZ2hzL0FcXG53ZWlnaHQvTURTSkdcXG53ZWlnaHRlZC9VXFxud2VpZ2h0aWx5XFxud2VpZ2h0aW5lc3MvTVxcbndlaWdodGxlc3MvWVBcXG53ZWlnaHRsZXNzbmVzcy9NXFxud2VpZ2h0bGlmdGVyL01TXFxud2VpZ2h0bGlmdGluZy9NXFxud2VpZ2h0eS9QVFJcXG53ZWlyL01TXFxud2VpcmQvUFRSWVxcbndlaXJkaWUvTVNcXG53ZWlyZG5lc3MvTVxcbndlaXJkby9NU1xcbndlbGNvbWUvTUdEU1xcbndlbGQvTURSQlNaR1xcbndlbGRlci9NXFxud2VsZmFyZS9NXFxud2Vsa2luL01cXG53ZWxsL01EUFNHXFxud2VsbGhlYWQvU01cXG53ZWxsaWVcXG53ZWxsaW5ndG9uL01TXFxud2VsbG5lc3MvTVxcbndlbGxzcHJpbmcvTVNcXG53ZWxseS9TXFxud2Vsc2gvWkdEUlNcXG53ZWxzaGVyL01cXG53ZWx0L01EUlNaR1xcbndlbHRlci9HTURcXG53ZWx0ZXJ3ZWlnaHQvU01cXG53ZW4vTVxcbndlbmNoL01TXFxud2VuZC9EU0dcXG53ZW50XFxud2VwdFxcbndlcmVcXG53ZXJlbid0XFxud2VyZXdvbGYvTVxcbndlcmV3b2x2ZXNcXG53ZXN0L01cXG53ZXN0Ym91bmRcXG53ZXN0ZXJseS9TTVxcbndlc3Rlcm4vU1pNUlxcbndlc3Rlcm5lci9NXFxud2VzdGVybml6YXRpb24vTVxcbndlc3Rlcm5pemUvR0RTXFxud2VzdGVybm1vc3RcXG53ZXN0d2FyZC9TXFxud2V0L1NNWVBcXG53ZXRiYWNrL1NNXFxud2V0bGFuZC9TTVxcbndldG5lc3MvTVxcbndldHRlci9TTVxcbndldHRlc3RcXG53ZXR0aW5nXFxud2V0d2FyZS9TXFxud2hhY2svU0paR01EUlxcbndoYWNrZXIvTVxcbndoYWxlL0RSU01aR1xcbndoYWxlYm9hdC9NU1xcbndoYWxlYm9uZS9NXFxud2hhbGVyL01cXG53aGFsaW5nL01cXG53aGFtL01TXFxud2hhbW1lZFxcbndoYW1taW5nXFxud2hhbW15L1NNXFxud2hhcmYvTVxcbndoYXJ2ZXNcXG53aGF0L01TXFxud2hhdGNoYW1hY2FsbGl0L01TXFxud2hhdGV2ZXJcXG53aGF0bm90L01cXG53aGF0c2hlcm5hbWVcXG53aGF0c2hpc25hbWVcXG53aGF0c2l0L1NcXG53aGF0c29ldmVyXFxud2hlYWwvU01cXG53aGVhdC9NTlxcbndoZWF0Z2VybVxcbndoZWF0bWVhbFxcbndoZWVcXG53aGVlZGxlL0RSU1pHXFxud2hlZWRsZXIvTVxcbndoZWVsL1NNRFJHXFxud2hlZWxiYXJyb3cvU01cXG53aGVlbGJhc2UvU01cXG53aGVlbGNoYWlyL1NNXFxud2hlZWxob3VzZS9NU1xcbndoZWVsaWUvU01cXG53aGVlbHdyaWdodC9NU1xcbndoZWV6ZS9EU01HXFxud2hlZXppbHlcXG53aGVlemluZXNzL01cXG53aGVlenkvUFJUXFxud2hlbGsvU01EXFxud2hlbG0vU0RHXFxud2hlbHAvU01ER1xcbndoZW4vTVNcXG53aGVuY2VcXG53aGVuZXZlclxcbndoZW5zb2V2ZXJcXG53aGVyZS9TTVxcbndoZXJlYWJvdXRzL01cXG53aGVyZWFzXFxud2hlcmVhdFxcbndoZXJlYnlcXG53aGVyZWZvcmUvTVNcXG53aGVyZWluXFxud2hlcmVvZlxcbndoZXJlb25cXG53aGVyZXNvZXZlclxcbndoZXJldG9cXG53aGVyZXVwb25cXG53aGVyZXZlclxcbndoZXJld2l0aFxcbndoZXJld2l0aGFsL01cXG53aGVycnkvU01cXG53aGV0L1NcXG53aGV0aGVyXFxud2hldHN0b25lL1NNXFxud2hldHRlZFxcbndoZXR0aW5nXFxud2hld1xcbndoZXkvTVxcbndoaWNoXFxud2hpY2hldmVyXFxud2hpZmYvU01ER1xcbndoaWZmbGV0cmVlL01TXFxud2hpbGUvRFNNR1xcbndoaWxvbVxcbndoaWxzdFxcbndoaW0vTVNcXG53aGltcGVyL01ER1NcXG53aGltc2ljYWwvWVxcbndoaW1zaWNhbGl0eS9NXFxud2hpbXN5L1NNXFxud2hpbmUvRFJTTVpHXFxud2hpbmVyL01cXG53aGluZ2UvRFJTWkdcXG53aGluZ2VpbmdcXG53aGlubnkvR0RTTVxcbndoaW55L1JUXFxud2hpcC9NU1xcbndoaXBjb3JkL01cXG53aGlwbGFzaC9NU1xcbndoaXBwZWRcXG53aGlwcGVyL01TXFxud2hpcHBlcnNuYXBwZXIvTVNcXG53aGlwcGV0L01TXFxud2hpcHBpbmcvU01cXG53aGlwcGxldHJlZS9TTVxcbndoaXBwb29yd2lsbC9NU1xcbndoaXBzYXcvTURHU1xcbndoaXIvTVNcXG53aGlybC9TTURHXFxud2hpcmxpZ2lnL01TXFxud2hpcmxwb29sL01TXFxud2hpcmx3aW5kL01TXFxud2hpcmx5YmlyZC9TTVxcbndoaXJyZWRcXG53aGlycmluZ1xcbndoaXNrL1NNRFJaR1xcbndoaXNrZXIvTURcXG53aGlza2VyeVxcbndoaXNrZXkvTVNcXG53aGlza3lzXFxud2hpc3Blci9NRFJTWkdcXG53aGlzcGVyZXIvTVxcbndoaXN0L01cXG53aGlzdGxlL01aR0RSU1xcbndoaXN0bGVyL01cXG53aGl0L01ETlJTWFRHSlxcbndoaXRlL1NQTVxcbndoaXRlYmFpdFxcbndoaXRlYm9hcmQvU1xcbndoaXRlY2FwL1NNXFxud2hpdGVmaXNoL01TXFxud2hpdGVoZWFkL01TXFxud2hpdGVsaXN0L0dEU1xcbndoaXRlbi9aR0RSSlxcbndoaXRlbmVyL01cXG53aGl0ZW5lc3MvTVxcbndoaXRlbmluZy9NXFxud2hpdGVvdXQvU01cXG53aGl0ZXRhaWwvTVNcXG53aGl0ZXdhbGwvU01cXG53aGl0ZXdhc2gvTURTR1xcbndoaXRld2F0ZXIvTVxcbndoaXRleS9TTVxcbndoaXRoZXJcXG53aGl0aW5nL01cXG53aGl0aXNoXFxud2hpdHRsZS9aR0RSU1xcbndoaXR0bGVyL01cXG53aGl6L01cXG53aGl6a2lkL01cXG53aGl6emJhbmcvTVNcXG53aGl6emVkXFxud2hpenplc1xcbndoaXp6aW5nXFxud2hvJ2RcXG53aG8nbGxcXG53aG8ncmVcXG53aG8ndmVcXG53aG8vTVxcbndob2FcXG53aG9kdW5pdC9NU1xcbndob2V2ZXJcXG53aG9sZS9TTVBcXG53aG9sZWZvb2QvU1xcbndob2xlZ3JhaW5cXG53aG9sZWhlYXJ0ZWQvWVBcXG53aG9sZWhlYXJ0ZWRuZXNzL01cXG53aG9sZW1lYWxcXG53aG9sZW5lc3MvTVxcbndob2xlc2FsZS9NWkdEUlNcXG53aG9sZXNhbGVyL01cXG53aG9sZXNvbWUvVVBcXG53aG9sZXNvbWVseVxcbndob2xlc29tZW5lc3MvVU1cXG53aG9sZXdoZWF0XFxud2hvbGx5XFxud2hvbVxcbndob21ldmVyXFxud2hvbXNvZXZlclxcbndob29wL1NNRFJaR1xcbndob29wZWUvU1xcbndob29wZXIvTVxcbndob29zaC9NRFNHXFxud2hvcC9TXFxud2hvcHBlZFxcbndob3BwZXIvU01cXG53aG9wcGluZ1xcbndob3JlL1NNR1xcbndob3JlaG91c2UvTVNcXG53aG9yZWlzaFxcbndob3Jpc2hcXG53aG9ybC9TTURcXG53aG9zZVxcbndob3NvXFxud2hvc29ldmVyXFxud2h1cC9TXFxud2h1cHBlZFxcbndodXBwaW5nXFxud2h5J2RcXG53aHkvTVxcbndoeXNcXG53aWNrL01EUlNaXFxud2lja2VkL1RQUllcXG53aWNrZWRuZXNzL01cXG53aWNrZXIvTVxcbndpY2tlcndvcmsvTVxcbndpY2tldC9TTVxcbndpZGUvWVRSUFxcbndpZGVtb3V0aGVkXFxud2lkZW4vU0RSWkdcXG53aWRlbmVyL01cXG53aWRlbmVzcy9NXFxud2lkZXNjcmVlbi9NU1xcbndpZGVzcHJlYWRcXG53aWRnZXQvU1xcbndpZG93L1NNRFJaR1xcbndpZG93ZXIvTVxcbndpZG93aG9vZC9NXFxud2lkdGgvTVxcbndpZHRoc1xcbndpZWxkL1NEUlpHXFxud2llbGRlci9NXFxud2llbmVyL1NNXFxud2llbmllL1NNXFxud2lmZS9NWVxcbndpZmVsZXNzXFxud2lnL1NNXFxud2lnZW9uL01cXG53aWdnZWRcXG53aWdnaW5nXFxud2lnZ2xlL0RSU01aR1xcbndpZ2dsZXIvTVxcbndpZ2dseS9UUlxcbndpZ2h0L1NNXFxud2lnbGV0L1NNXFxud2lnd2FnL1NNXFxud2lnd2FnZ2VkXFxud2lnd2FnZ2luZ1xcbndpZ3dhbS9TTVxcbndpa2kvTVNcXG53aWxkL01SWVNUUFxcbndpbGRjYXJkL01TXFxud2lsZGNhdC9NU1xcbndpbGRjYXR0ZWRcXG53aWxkY2F0dGVyL01TXFxud2lsZGNhdHRpbmdcXG53aWxkZWJlZXN0L01TXFxud2lsZGVybmVzcy9NU1xcbndpbGRmaXJlL01TXFxud2lsZGZsb3dlci9TTVxcbndpbGRmb3dsL01cXG53aWxkbGlmZS9NXFxud2lsZG5lc3MvTVxcbndpbGRzL01cXG53aWxlL01HRFNcXG53aWxpbmVzcy9NXFxud2lsbC9NRFNcXG53aWxsZnVsL1BZXFxud2lsbGZ1bG5lc3MvTVxcbndpbGxpZXMvTVxcbndpbGxpbmcvVVBZXFxud2lsbGluZ25lc3MvVU1cXG53aWxsaXdhdy9NU1xcbndpbGxvdy9TTVxcbndpbGxvd3lcXG53aWxscG93ZXIvTVxcbndpbGx5L1NcXG53aWx0L01EU0dcXG53aWx5L1JUUFxcbndpbXAvTURTR1xcbndpbXBpc2hcXG53aW1wbGUvRFNNR1xcbndpbXB5L1JUXFxud2luL1NHTURcXG53aW5jZS9EU01HXFxud2luY2gvTURTR1xcbndpbmQnc1xcbndpbmQvVUFTR1xcbndpbmRiYWcvU01cXG53aW5kYmxvd25cXG53aW5kYnJlYWsvU1pNUlxcbndpbmRicmVha2VyL01cXG53aW5kYnVybi9NRFxcbndpbmRjaGVhdGVyL1NcXG53aW5kY2hpbGwvTVxcbndpbmRlZFxcbndpbmRlci9TTVxcbndpbmRmYWxsL01TXFxud2luZGZsb3dlci9NU1xcbndpbmRpbHlcXG53aW5kaW5lc3MvTVxcbndpbmRpbmcnc1xcbndpbmRqYW1tZXIvU01cXG53aW5kbGFzcy9NU1xcbndpbmRsZXNzXFxud2luZG1pbGwvTURHU1xcbndpbmRvdy9TTURHXFxud2luZG93bGVzc1xcbndpbmRvd3BhbmUvU01cXG53aW5kb3dzaWxsL1NNXFxud2luZHBpcGUvTVNcXG53aW5kcHJvb2ZcXG53aW5kcm93L1NNXFxud2luZHNjcmVlbi9TTVxcbndpbmRzaGllbGQvU01cXG53aW5kc29jay9NU1xcbndpbmRzdG9ybS9NU1xcbndpbmRzdXJmL1pHRFJTXFxud2luZHN1cmZlci9NXFxud2luZHN1cmZpbmcvTVxcbndpbmRzd2VwdFxcbndpbmR1cC9TTVxcbndpbmR3YXJkL01cXG53aW5keS9SVFBcXG53aW5lL01TXFxud2luZWdsYXNzL01TXFxud2luZWdyb3dlci9NU1xcbndpbmVtYWtlci9NU1xcbndpbmVyeS9TTVxcbndpbmcvTURSWkdcXG53aW5nZGluZy9NU1xcbndpbmdsZXNzXFxud2luZ2xpa2VcXG53aW5nbnV0L1NNXFxud2luZ3NwYW4vTVNcXG53aW5nc3ByZWFkL1NNXFxud2luZ3RpcC9TTVxcbndpbmsvTURSU1pHXFxud2lua2VyL01cXG53aW5rbGUvRFNNR1xcbndpbm5hYmxlL1VcXG53aW5uZXIvU01cXG53aW5uaW5nL01ZU1xcbndpbm5vdy9aR1NEUlxcbndpbm5vd2VyL01cXG53aW5vL01TXFxud2luc29tZS9ZVFJQXFxud2luc29tZW5lc3MvTVxcbndpbnRlci9HU01EXFxud2ludGVyZ3JlZW4vTVxcbndpbnRlcml6ZS9HRFNcXG53aW50ZXJ0aW1lL01cXG53aW50cnkvVFJcXG53aW55L1JUXFxud2lwZS9NWkdEUlNcXG53aXBlci9NXFxud2lyZSdzXFxud2lyZS9BR0RTXFxud2lyZWQvU1xcbndpcmVoYWlyL01TXFxud2lyZWxlc3MvTVNcXG53aXJldGFwL01TXFxud2lyZXRhcHBlZFxcbndpcmV0YXBwZXIvU01cXG53aXJldGFwcGluZy9NXFxud2lyaW5lc3MvTVxcbndpcmluZy9NXFxud2lyeS9SVFBcXG53aXNkb20vTVxcbndpc2UvTVlUR0RSU1xcbndpc2VhY3JlL1NNXFxud2lzZWNyYWNrL01EU0dcXG53aXNlZ3V5L1NcXG53aXNoL01EUlNaR1xcbndpc2hib25lL1NNXFxud2lzaGVyL01cXG53aXNoZnVsL1lcXG53aXNobGlzdCdzXFxud2lzcC9NU1xcbndpc3B5L1JUXFxud2lzdFxcbndpc3RlcmlhL1NNXFxud2lzdGZ1bC9ZUFxcbndpc3RmdWxuZXNzL01cXG53aXQvU01cXG53aXRjaC9NRFNHXFxud2l0Y2hjcmFmdC9NXFxud2l0Y2hlcnkvTVxcbndpdGhcXG53aXRoYWxcXG53aXRoZHJhdy9TR1xcbndpdGhkcmF3YWwvTVNcXG53aXRoZHJhd25cXG53aXRoZHJld1xcbndpdGhlL0RSU01aR1xcbndpdGhlci9KR0RcXG53aXRoZXJpbmcvWVxcbndpdGhlcnMvTVxcbndpdGhoZWxkXFxud2l0aGhvbGQvU0dcXG53aXRoaG9sZGluZy9NXFxud2l0aGluL01cXG53aXRob3V0XFxud2l0aHN0YW5kL0dTXFxud2l0aHN0b29kXFxud2l0bGVzcy9QWVxcbndpdGxlc3NuZXNzL01cXG53aXRuZXNzL01EU0dcXG53aXRzL01cXG53aXR0ZWRcXG53aXR0ZXIvU0dEXFxud2l0dGljaXNtL1NNXFxud2l0dGlseVxcbndpdHRpbmVzcy9NXFxud2l0dGluZy9VWVxcbndpdHR5L1JQVFxcbndpdmUvR0RTXFxud2l6XFxud2l6YXJkL1NNWVxcbndpemFyZHJ5L01cXG53aXplbmVkXFxud2svWVxcbndvYWQvTVxcbndvYmJsZS9NR0RTXFxud29iYmxpbmVzcy9NXFxud29iYmx5L1JUUFxcbndvZGdlL1NcXG53b2UvU01cXG53b2ViZWdvbmVcXG53b2VmdWwvWVBcXG53b2VmdWxsZXJcXG53b2VmdWxsZXN0XFxud29lZnVsbmVzcy9NXFxud29nL1NcXG53b2svU01OXFxud29rZVxcbndvbGQvTVNcXG53b2xmL01EU0dcXG53b2xmaG91bmQvU01cXG53b2xmaXNoXFxud29sZnJhbS9NXFxud29sdmVyaW5lL1NNXFxud29sdmVzXFxud29tYW4vTVxcbndvbWFuaG9vZC9NXFxud29tYW5pc2hcXG53b21hbml6ZS9EUlNaR1xcbndvbWFuaXplci9NXFxud29tYW5raW5kL01cXG53b21hbmxpa2UvTVxcbndvbWFubGluZXNzL01cXG53b21hbmx5L1JQVFxcbndvbWIvTVNcXG53b21iYXQvTVNcXG53b21ibGUvU1xcbndvbWVuL01cXG53b21lbmZvbGsvU01cXG53b21lbmZvbGtzL01cXG53b24ndFxcbndvbi9NXFxud29uZGVyL01ER0xTXFxud29uZGVyZnVsL1lQXFxud29uZGVyZnVsbmVzcy9NXFxud29uZGVyaW5nL1lcXG53b25kZXJsYW5kL01TXFxud29uZGVybWVudC9NXFxud29uZHJvdXMvWVxcbndvbmsvTVNcXG53b25reS9UUlxcbndvbnQvTURcXG53b250ZWQvVVxcbndvby9TWkdEUlxcbndvb2QvTUROU0dcXG53b29kYmluZS9NXFxud29vZGJsb2NrL01TXFxud29vZGNhcnZlci9NU1xcbndvb2RjYXJ2aW5nL1NNXFxud29vZGNodWNrL01TXFxud29vZGNvY2svU01cXG53b29kY3JhZnQvTVxcbndvb2RjdXQvU01cXG53b29kY3V0dGVyL1NNXFxud29vZGN1dHRpbmcvTVxcbndvb2Rlbi9SWVRQXFxud29vZGVubmVzcy9NXFxud29vZGluZXNzL01cXG53b29kbGFuZC9TTVxcbndvb2RsaWNlXFxud29vZGxvdC9TTVxcbndvb2Rsb3VzZVxcbndvb2RtYW4vTVxcbndvb2RtZW5cXG53b29kcGVja2VyL01TXFxud29vZHBpbGUvU01cXG53b29kcy9NXFxud29vZHNoZWQvU01cXG53b29kc2luZXNzL01cXG53b29kc21hbi9NXFxud29vZHNtZW5cXG53b29kc3kvUlRQXFxud29vZHdpbmQvTVNcXG53b29kd29yay9NUlpHXFxud29vZHdvcmtlci9NXFxud29vZHdvcmtpbmcvTVxcbndvb2R3b3JtL1NcXG53b29keS9UUFJTTVxcbndvb2VyL01cXG53b29mL01EUlNaR1xcbndvb2Zlci9NXFxud29vbC9NTlhcXG53b29sZW4vTVxcbndvb2xnYXRoZXJpbmcvTVxcbndvb2xpbmVzc1xcbndvb2xsaW5lc3MvTVxcbndvb2xseS9SU01QVFxcbndvb3ppbHlcXG53b296aW5lc3MvTVxcbndvb3p5L1RSUFxcbndvcC9TIVxcbndvcmQnc1xcbndvcmQvQURTR1xcbndvcmRhZ2UvTVxcbndvcmRib29rL1NNXFxud29yZGlseVxcbndvcmRpbmVzcy9NXFxud29yZGluZy9TTVxcbndvcmRsZXNzL1lcXG53b3JkcGxheS9NXFxud29yZHNtaXRoXFxud29yZHNtaXRoc1xcbndvcmR5L1RQUlxcbndvcmVcXG53b3JrJ3NcXG53b3JrL0FESlNHXFxud29ya2FibGUvVVxcbndvcmthZGF5XFxud29ya2Fob2xpYy9TTVxcbndvcmthcm91bmQvU1xcbndvcmtiYXNrZXQvU1xcbndvcmtiZW5jaC9NU1xcbndvcmtib29rL01TXFxud29ya2RheS9TTVxcbndvcmtlci9NU1xcbndvcmtmYXJlL01cXG53b3JrZmxvdy9NU1xcbndvcmtmb3JjZS9NXFxud29ya2hvcnNlL1NNXFxud29ya2hvdXNlL1NNXFxud29ya2luZydzXFxud29ya2luZ21hbi9NXFxud29ya2luZ21lblxcbndvcmtpbmdzL01cXG53b3JraW5nd29tYW4vTVxcbndvcmtpbmd3b21lblxcbndvcmtsb2FkL01TXFxud29ya21hbi9NXFxud29ya21hbmxpa2VcXG53b3JrbWFuc2hpcC9NXFxud29ya21hdGUvU1xcbndvcmttZW5cXG53b3Jrb3V0L1NNXFxud29ya3BsYWNlL01TXFxud29ya3Jvb20vTVNcXG53b3Jrcy9NXFxud29ya3NoZWV0L01TXFxud29ya3Nob3AvTVNcXG53b3Jrc2h5XFxud29ya3NpdGUvU1xcbndvcmtzcGFjZVxcbndvcmtzdGF0aW9uL01TXFxud29ya3RhYmxlL01TXFxud29ya3RvcC9TXFxud29ya3VwL01TXFxud29ya3dlZWsvU01cXG53b3JsZC9TTVxcbndvcmxkbGllclxcbndvcmxkbGluZXNzL1VNXFxud29ybGRseS9VVFBcXG53b3JsZHZpZXcvU01cXG53b3JsZHdpZGVcXG53b3JtL01EU0dcXG53b3JtaG9sZS9NU1xcbndvcm13b29kL01cXG53b3JteS9UUlxcbndvcm4vVVxcbndvcnJpZWQvWVxcbndvcnJpZXIvTVxcbndvcnJpbWVudC9NXFxud29ycmlzb21lXFxud29ycnkvWkdEUlNNSlxcbndvcnJ5aW5nL1lcXG53b3JyeXdhcnQvU01cXG53b3JzZS9NXFxud29yc2VuL0RTR1xcbndvcnNoaXAvWkdTTURSXFxud29yc2hpcGVyL01cXG53b3JzaGlwZnVsXFxud29yc3QvU0dNRFxcbndvcnN0ZWQvTVxcbndvcnQvTVxcbndvcnRoL01cXG53b3J0aGllc1xcbndvcnRoaWx5L1VcXG53b3J0aGluZXNzL1VNXFxud29ydGhsZXNzL1BZXFxud29ydGhsZXNzbmVzcy9NXFxud29ydGh3aGlsZVxcbndvcnRoeSdzXFxud29ydGh5L1VQUlRcXG53b3RcXG53b3RjaGFcXG53b3VsZCd2ZVxcbndvdWxkL1NcXG53b3VsZG4ndFxcbndvdWxkc3RcXG53b3VuZC9TR01EUlxcbndvdmUvQVxcbndvdmVuL0FVXFxud293L1NHTURcXG53cG1cXG53cmFjay9HU01EXFxud3JhaXRoL01cXG53cmFpdGhzXFxud3JhbmdsZS9EUlNNWkdKXFxud3JhbmdsZXIvTVxcbndyYXAnc1xcbndyYXAvVVNcXG53cmFwYXJvdW5kL1NNXFxud3JhcHBlZC9VXFxud3JhcHBlci9TTVxcbndyYXBwaW5nL01TXFxud3Jhc3NlL01TXFxud3JhdGgvTVxcbndyYXRoZnVsL1lcXG53cmVhay9TR0RcXG53cmVhdGgvTURTR1xcbndyZWF0aGVcXG53cmVhdGhzXFxud3JlY2svU1pHTURSXFxud3JlY2thZ2UvTVxcbndyZWNrZXIvTVxcbndyZW4vTVNcXG53cmVuY2gvTURTR1xcbndyZXN0L1NHTURcXG53cmVzdGxlL01aR0RSU1xcbndyZXN0bGVyL01cXG53cmVzdGxpbmcvTVxcbndyZXRjaC9NU1xcbndyZXRjaGVkL1RQUllcXG53cmV0Y2hlZG5lc3MvTVxcbndyaWdnbGUvTVpHRFJTXFxud3JpZ2dsZXIvTVxcbndyaWdnbHlcXG53cmlnaHQvTVNcXG53cmluZy9TWkdNUlxcbndyaW5nZXIvTVxcbndyaW5rbGUvTUdEU1xcbndyaW5rbGVkL1VcXG53cmlua2x5L1RSU01cXG53cmlzdC9TTVxcbndyaXN0YmFuZC9NU1xcbndyaXN0d2F0Y2gvTVNcXG53cml0L01SQkpTWkdcXG53cml0ZS9TXFxud3JpdGVyL01cXG53cml0aGUvTUdEU1xcbndyaXRpbmcvTVxcbndyaXR0ZW4vQVVcXG53cm9uZy9TVEdNUERSWVxcbndyb25nZG9lci9TTVxcbndyb25nZG9pbmcvU01cXG53cm9uZ2Z1bC9QWVxcbndyb25nZnVsbmVzcy9NXFxud3JvbmdoZWFkZWQvWVBcXG53cm9uZ2hlYWRlZG5lc3MvTVxcbndyb25nbmVzcy9NXFxud3JvdGUvQVxcbndyb3RoXFxud3JvdWdodFxcbndydW5nXFxud3J5L1lcXG53cnllclxcbndyeWVzdFxcbndyeW5lc3MvTVxcbnd0XFxud3VuZGVya2luZC9TXFxud3Vyc3QvU01cXG53dXNzL01TXFxud3Vzc3kvUlNNVFxcbnhcXG54Y2lcXG54Y2lpXFxueGNpdlxcbnhjaXhcXG54Y3ZpXFxueGN2aWlcXG54ZW5vbi9NXFxueGVub3Bob2JlL01TXFxueGVub3Bob2JpYS9NXFxueGVub3Bob2JpY1xcbnhlcm9ncmFwaGljXFxueGVyb2dyYXBoeS9NXFxueGVyb3gvTURTR1xcbnhpL1NNXFxueGlpXFxueGlpaVxcbnhpdlxcbnhpeFxcbnhvclxcbnhyZWYvU1xcbnh0ZXJtL01cXG54dlxcbnh2aVxcbnh2aWlcXG54dmlpaVxcbnh4XFxueHhpXFxueHhpaVxcbnh4aWlpXFxueHhpdlxcbnh4aXhcXG54eHZcXG54eHZpXFxueHh2aWlcXG54eHZpaWlcXG54eHhcXG54eHhpXFxueHh4aWlcXG54eHhpaWlcXG54eHhpdlxcbnh4eGl4XFxueHh4dlxcbnh4eHZpXFxueHh4dmlpXFxueHh4dmlpaVxcbnh5bGVtL01cXG54eWxlbmVcXG54eWxvcGhvbmUvU01cXG54eWxvcGhvbmlzdC9NU1xcbnknYWxsXFxueS9GXFxueWFcXG55YWNodC9TTURHXFxueWFjaHRpbmcvTVxcbnlhY2h0c21hbi9NXFxueWFjaHRzbWVuXFxueWFjaHRzd29tYW4vTVxcbnlhY2h0c3dvbWVuXFxueWFob28vU01cXG55YWsvU01cXG55YWtrZWRcXG55YWtraW5nXFxueWFtL1NNXFxueWFtbWVyL1NaR01EUlxcbnlhbW1lcmVyL01cXG55YW5nL01cXG55YW5rL01EU0dcXG55YXAvU01cXG55YXBwZWRcXG55YXBwaW5nXFxueWFyZC9NU1xcbnlhcmRhZ2UvTVNcXG55YXJkYXJtL01TXFxueWFyZG1hbi9NXFxueWFyZG1hc3Rlci9NU1xcbnlhcmRtZW5cXG55YXJkc3RpY2svTVNcXG55YXJtdWxrZS9TTVxcbnlhcm4vTVNcXG55YXJyb3cvTVxcbnlhc2htYWsvU1xcbnlhdy9TR01EXFxueWF3bC9NU1xcbnlhd24vTURSU1pHXFxueWF3bmVyL01cXG55YXdzL01cXG55ZFxcbnllL1JTVFxcbnllYS9TTVxcbnllYWgvTVxcbnllYWhzXFxueWVhci9NWVNcXG55ZWFyYm9vay9NU1xcbnllYXJsaW5nL01TXFxueWVhcmxvbmdcXG55ZWFybHkvU01cXG55ZWFybi9HU0pEXFxueWVhcm5pbmcvTVxcbnllYXN0L1NNXFxueWVhc3R5L1JUXFxueWVnZy9NU1xcbnllbGwvTURTR1xcbnllbGxvdy9NRFJUR1BTXFxueWVsbG93aGFtbWVyL1NcXG55ZWxsb3dpc2hcXG55ZWxsb3duZXNzL01cXG55ZWxsb3d5XFxueWVscC9NRFNHXFxueWVuL1NNXFxueWVvbWFuL01cXG55ZW9tYW5yeS9NXFxueWVvbWVuXFxueWVwL1NNXFxueWVzL01TXFxueWVzaGl2YS9TTVxcbnllc3NlZFxcbnllc3NpbmdcXG55ZXN0ZXJkYXkvTVNcXG55ZXN0ZXJ5ZWFyL01cXG55ZXRcXG55ZXRpL01TXFxueWV3L1NNXFxueWlkL1NcXG55aWVsZC9KU0dNRFxcbnlpa2VzXFxueWluL01cXG55aXAvU01cXG55aXBlXFxueWlwcGVkXFxueWlwcGVlXFxueWlwcGluZ1xcbnlvXFxueW9iL1NcXG55b2Jiby9TXFxueW9kZWwvU01EUlpHXFxueW9kZWxlci9NXFxueW9nYS9NXFxueW9naS9NU1xcbnlvZ2ljXFxueW9ndXJ0L1NNXFxueW9rZSdzXFxueW9rZS9VR0RTXFxueW9rZWwvU01cXG55b2xrL01EU1xcbnlvblxcbnlvbmRlclxcbnlvbmtzXFxueW9yZS9NXFxueW91J2RcXG55b3UnbGxcXG55b3UncmVcXG55b3UndmVcXG55b3UvU01IXFxueW91bmcvVE1SXFxueW91bmdpc2hcXG55b3VuZ3N0ZXIvTVNcXG55b3VyL1NcXG55b3Vyc2VsZlxcbnlvdXJzZWx2ZXNcXG55b3V0aC9NXFxueW91dGhmdWwvWVBcXG55b3V0aGZ1bG5lc3MvTVxcbnlvdXRoc1xcbnlvd1xcbnlvd2wvTURTR1xcbnlyL1NcXG55dHRlcmJpdW0vTVxcbnl0dHJpdW0vTVxcbnl1YW4vTVxcbnl1Y2NhL1NNXFxueXVja1xcbnl1Y2t5L1RSXFxueXVrL1NNXFxueXVra2VkXFxueXVra2luZ1xcbnl1a2t5XFxueXVsZS9NXFxueXVsZXRpZGUvTVxcbnl1bVxcbnl1bW15L1RSXFxueXVwL1NNXFxueXVwcGllL01TXFxueXVwcGlmeS9HRFNcXG55dXJ0L01TXFxuei9ETlhUR0pcXG56YW5pbmVzcy9NXFxuemFueS9SU01QVFxcbnphcC9TTVxcbnphcHBlZFxcbnphcHBlci9NU1xcbnphcHBpbmdcXG56YXBweVxcbnplYWwvTVxcbnplYWxvdC9NU1xcbnplYWxvdHJ5L01cXG56ZWFsb3VzL1lQXFxuemVhbG91c25lc3MvTVxcbnplYnJhL1NNXFxuemVidS9NU1xcbnplZC9TTVxcbnplaXRnZWlzdC9TTVxcbnplbml0aC9NXFxuemVuaXRoc1xcbnplbm5lZFxcbnplb2xpdGUvU1xcbnplcGh5ci9NU1xcbnplcHBlbGluL01TXFxuemVyby9NREhTR1xcbnplcm9lc1xcbnplc3QvTVNcXG56ZXN0ZnVsL1lQXFxuemVzdGZ1bG5lc3MvTVxcbnplc3R5L1JUXFxuemV0YS9NU1xcbnppZ3phZy9TTVxcbnppZ3phZ2dlZFxcbnppZ3phZ2dpbmdcXG56aWxjaC9NXFxuemlsbGlvbi9NU1xcbnppbmMvTVNcXG56aW5ja2VkXFxuemluY2tpbmdcXG56aW5lL1NcXG56aW5mYW5kZWwvTVxcbnppbmcvTURSWkdcXG56aW5nZXIvTVxcbnppbmd5L1JUXFxuemlubmlhL01TXFxuemlwJ3NcXG56aXAvVVNcXG56aXBwZWQvVVxcbnppcHBlci9NREdTXFxuemlwcGluZy9VXFxuemlwcHkvVFJcXG56aXJjb24vTVNcXG56aXJjb25pdW0vTVxcbnppdC9TTVxcbnppdGhlci9NU1xcbnpsb3R5L1NNXFxuemxvdHlzXFxuem9kaWFjL01TXFxuem9kaWFjYWxcXG56b21iaWUvTVNcXG56b25hbC9ZXFxuem9uZSdzXFxuem9uZS9BR0RTXFxuem9uaW5nL01cXG56b25rZWRcXG56b28vU01cXG56b29rZWVwZXIvU01cXG56b29sb2dpY2FsL1lcXG56b29sb2dpc3QvU01cXG56b29sb2d5L01cXG56b29tL01EU0dcXG56b29waHl0ZS9TTVxcbnpvb3BoeXRpY1xcbnpvb3BsYW5rdG9uXFxuem9yY2hcXG56b3N0ZXJcXG56b3VuZHNcXG56dWNjaGluaS9NU1xcbnp3aWViYWNrL01cXG56eWRlY28vTVxcbnp5Z290ZS9TTVxcbnp5Z290aWNcXG56eW11cmd5L01cIn0pfSxwZXJzb25hbDp0LmpvaW4oXCJcXG5cIiksbWF4OjV9O3JldHVybiBPbigpLnVzZShTYSkudXNlKEdhLG8pLnVzZShjZSkudXNlKGllKS51c2UoeWEse2lnbm9yZTpbXCJkaXNhYmxlZFwiLFwiaG9zdFwiLFwiaG9zdHNcIixcImludmFsaWRcIixcImp1c3RcIl19KS51c2Uoa2EpLnVzZShDYSkudXNlKFRhKS51c2UoamUse2FnZToxOX0pLnVzZShYZSkudXNlKG9hKS51c2UoSm4pLnByb2Nlc3MobikudGhlbigoZnVuY3Rpb24obil7cmV0dXJuIG59KSl9ZnVuY3Rpb24gTGEoZSl7dmFyIGEsaT1aYSgoMCxuLnVzZVN0YXRlKSh7fSksMikscj1pWzBdLHQ9aVsxXSxvPVphKCgwLG4udXNlU3RhdGUpKFtdKSwyKSxNPW9bMF0scz1vWzFdLGw9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxjPWxbMF0sUz1sWzFdLHU9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxkPXVbMF0sbT11WzFdLHA9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxoPXBbMF0sZz1wWzFdLHk9WmEoKDAsbi51c2VTdGF0ZSkoMCksMiksYj15WzBdLEQ9eVsxXSxHPWUuc2FtcGxlVGV4dCx3PWUuc2V0U2FtcGxlVGV4dCx2PWUudXBkYXRlVGltZXIsaz12b2lkIDA9PT12PzMwMDp2LFI9ZS5wbGFjZWhvbGRlcixZPXZvaWQgMD09PVI/XCJQcm92aWRlIHNvbWUgdGV4dCB0byBnZXQgc3RhcnRlZFwiOlIsQT1lLmN1c3RvbURpY3Rpb25hcnksUD1lLmFkZFRvRGljdGlvbmFyeSxDPWUub3BlbkxpbmtzSW5OZXdUYWIsVD12b2lkIDAhPT1DJiZDOygwLG4udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gUyhzZXRUaW1lb3V0KE5hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi50MD10LG4ubmV4dD0zLGphKEcsQSk7Y2FzZSAzOm4udDE9bi5zZW50LCgwLG4udDApKG4udDEpO2Nhc2UgNTpjYXNlXCJlbmRcIjpyZXR1cm4gbi5zdG9wKCl9fSksbil9KSkpLGspKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoYyl9fSksW0ddKSwoMCxuLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGcoITApLG0oc2V0VGltZW91dChOYShyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6ZyghMSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksNGUzKSksZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGQpfX0pLFtHXSk7dmFyIHgseixFLEIsTj1mdW5jdGlvbihuKXt2YXIgZT1mdW5jdGlvbihuKXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj96YShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe0VhKG4sZSxhW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTp6YShPYmplY3QoYSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGUpKX0pKX1yZXR1cm4gbn0oe30scik7ZS5tZXNzYWdlcz1yLm1lc3NhZ2VzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9PW59KSksdChlKTt2YXIgYT1GYShNKTthLnB1c2gobikscyhhKX0sWj1mdW5jdGlvbigpe3ZhciBuLGU9KG51bGw9PXJ8fG51bGw9PT0obj1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5sZW5ndGgpPjAsYT0hMTtpZihlKXJldHVybiByLm1lc3NhZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe00uc29tZSgoZnVuY3Rpb24oZSl7bi5uYW1lLGE9ITB9KSl9KSksYX0sRj1mdW5jdGlvbihuLGUpe3ZhciBhO2lmKG51bGw9PT0oYT13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpe3ZhciBpPUpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpO2kucHVzaChuKSx3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJsYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnlcIixKU09OLnN0cmluZ2lmeShpKSl9ZWxzZSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJsYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnlcIixKU09OLnN0cmluZ2lmeShbbl0pKTtOKGUpfTtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxaKCksKG51bGw9PXJ8fG51bGw9PT0oYT1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjA/bi5jcmVhdGVFbGVtZW50KFwidWxcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1saXN0XCJ9LChudWxsPT1yfHxudWxsPT09KEI9ci5tZXNzYWdlcyl8fHZvaWQgMD09PUI/dm9pZCAwOkIubGVuZ3RoKT4wP3IubWVzc2FnZXMubWFwKChmdW5jdGlvbihlLGEpe3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoZix7a2V5OmEsc3VnZ2VzdGlvbjplLHNvdXJjZVRleHQ6ci52YWx1ZSxzYW1wbGVUZXh0Okcsc2V0U2FtcGxlVGV4dDp3LHJlbW92ZVN1Z2dlc3Rpb246TixkaXNtaXNzZWRTdWdnZXN0aW9uczpNLGlzQWN0aXZlOmE9PT1iLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7RChuKX0oYSl9LGFkZFRvRGljdGlvbmFyeTpQfHxGLG9wZW5MaW5rc0luTmV3VGFiOlR9KX0pKTpuLmNyZWF0ZUVsZW1lbnQoXCJoNFwiLG51bGwsXCJObyBzdWdnZXN0aW9ucyB0byBzaG93Li4uXCIpKTpuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbnMtZW1wdHktc3RhdGVcIn0sKHo9XCJcIiE9PUcsRT0obnVsbD09cnx8bnVsbD09PSh4PXIubWVzc2FnZXMpfHx2b2lkIDA9PT14P3ZvaWQgMDp4Lmxlbmd0aCk+MCx6P2g/bi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse2NsYXNzTmFtZTpcImxvYWRpbmctc3Bpbm5lclwiLHNyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUENFdExTQkNlU0JUWVcwZ1NHVnlZbVZ5ZENBb1FITm9aWEppS1N3Z1ptOXlJR1YyWlhKNWIyNWxMaUJOYjNKbElFQWdhSFIwY0RvdkwyZHZieTVuYkM4M1FVcDZZa3dnTFMwK0NqeHpkbWNnZDJsa2RHZzlJak00SWlCb1pXbG5hSFE5SWpNNElpQjJhV1YzUW05NFBTSXdJREFnTXpnZ016Z2lJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDaUFnSUNBOFpHVm1jejRLSUNBZ0lDQWdJQ0E4YkdsdVpXRnlSM0poWkdsbGJuUWdlREU5SWpndU1EUXlKU0lnZVRFOUlqQWxJaUI0TWowaU5qVXVOamd5SlNJZ2VUSTlJakl6TGpnMk5TVWlJR2xrUFNKaElqNEtJQ0FnSUNBZ0lDQWdJQ0FnUEhOMGIzQWdjM1J2Y0MxamIyeHZjajBpSXpreU9XRmhNU0lnYzNSdmNDMXZjR0ZqYVhSNVBTSXdJaUJ2Wm1aelpYUTlJakFsSWk4K0NpQWdJQ0FnSUNBZ0lDQWdJRHh6ZEc5d0lITjBiM0F0WTI5c2IzSTlJaU01TWpsaFlURWlJSE4wYjNBdGIzQmhZMmwwZVQwaUxqWXpNU0lnYjJabWMyVjBQU0kyTXk0eE5EWWxJaTgrQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHpkRzl3SUhOMGIzQXRZMjlzYjNJOUlpTTVNamxoWVRFaUlHOW1abk5sZEQwaU1UQXdKU0l2UGdvZ0lDQWdJQ0FnSUR3dmJHbHVaV0Z5UjNKaFpHbGxiblErQ2lBZ0lDQThMMlJsWm5NK0NpQWdJQ0E4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlQZ29nSUNBZ0lDQWdJRHhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtERWdNU2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQThjR0YwYUNCa1BTSk5NellnTVRoak1DMDVMamswTFRndU1EWXRNVGd0TVRndE1UZ2lJR2xrUFNKUGRtRnNMVElpSUhOMGNtOXJaVDBpZFhKc0tDTmhLU0lnYzNSeWIydGxMWGRwWkhSb1BTSXlJajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHhoYm1sdFlYUmxWSEpoYm5ObWIzSnRDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWVhSMGNtbGlkWFJsVG1GdFpUMGlkSEpoYm5ObWIzSnRJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTlJbkp2ZEdGMFpTSUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtY205dFBTSXdJREU0SURFNElnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2UFNJek5qQWdNVGdnTVRnaUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5UFNJd0xqVnpJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0JoZEdnK0NpQWdJQ0FnSUNBZ0lDQWdJRHhqYVhKamJHVWdabWxzYkQwaUkyWm1aaUlnWTNnOUlqTTJJaUJqZVQwaU1UZ2lJSEk5SWpFaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BHRnVhVzFoZEdWVWNtRnVjMlp2Y20wS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkSFJ5YVdKMWRHVk9ZVzFsUFNKMGNtRnVjMlp2Y20waUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGx3WlQwaWNtOTBZWFJsSWdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnliMjA5SWpBZ01UZ2dNVGdpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHODlJak0yTUNBeE9DQXhPQ0lLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSTlJakF1TlhNaUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ3WldGMFEyOTFiblE5SW1sdVpHVm1hVzVwZEdVaUlDOCtDaUFnSUNBZ0lDQWdJQ0FnSUR3dlkybHlZMnhsUGdvZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUR3dlp6NEtQQzl6ZG1jK0NnPT1cIixhbHQ6XCJsb2FkaW5nLi4uXCJ9KTp6JiYhRXx8WigpJiZ6P24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsbi5jcmVhdGVFbGVtZW50KFwiaDNcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtaGVhZGluZ1wifSxcIk5vIGlzc3VlcyBmb3VuZFwiKSxuLmNyZWF0ZUVsZW1lbnQoXCJwXCIse2NsYXNzTmFtZTpcImVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uXCJ9LFwiV2UgcmFuIHNldmVyYWwgY2hlY2tzIG9uIHlvdXIgdGV4dCBhbmQgZm91bmQgbm8gd3JpdGluZyBpc3N1ZXMuIFRoaW5rIHdlIG1pc3NlZCBzb21ldGhpbmc/IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcImFcIix7aHJlZjpcImh0dHBzOi8vbmV3cmVsaWMuc2xhY2suY29tL2FyY2hpdmVzL0MwMUE3NlAzRFBVXCIsdGFyZ2V0OlQ/XCJfYmxhbmtcIjpcIl9zZWxmXCJ9LFwiTGV0IHVzIGtub3dcIiksXCIuXCIpKTp2b2lkIDA6bi5jcmVhdGVFbGVtZW50KFwiaDNcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtaGVhZGluZ1wifSxZKSkpKX1MYS5wcm9wVHlwZXM9e3NhbXBsZVRleHQ6cigpLnN0cmluZyxwbGFjZWhvbGRlcjpyKCkuc3RyaW5nLHNldFNhbXBsZVRleHQ6cigpLmZ1bmMsdXBkYXRlVGltZXI6cigpLm51bWJlcixjdXN0b21EaWN0aW9uYXJ5OnIoKS5hcnJheSxhZGRUb0RpY3Rpb25hcnk6cigpLmZ1bmMsb3BlbkxpbmtzSW5OZXdUYWI6cigpLmJvb2x9O2NvbnN0IHFhPUxhfSkoKSxtb2R1bGUuZXhwb3J0cz1pfSkoKTsiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbnVtYmVySXNOYU4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuXHRpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG5cdFx0cmV0dXJuIDEgLyBhID09PSAxIC8gYjtcblx0fVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmIChudW1iZXJJc05hTihhKSAmJiBudW1iZXJJc05hTihiKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU9iamVjdElzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IGlzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0aXM6IGZ1bmN0aW9uIHRlc3RPYmplY3RJcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QuaXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczYtc2hpbVxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGNhbkJlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHRyZXR1cm4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqICE9PSBudWxsO1xufTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKSgpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciB0b09iamVjdCA9IE9iamVjdDtcbnZhciAkcHVzaCA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnB1c2gnKTtcbnZhciAkcHJvcElzRW51bWVyYWJsZSA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZScpO1xudmFyIG9yaWdpbmFsR2V0U3ltYm9scyA9IGhhc1N5bWJvbHMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzIDogbnVsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZTEpIHtcblx0aWYgKCFjYW5CZU9iamVjdCh0YXJnZXQpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpOyB9XG5cdHZhciBvYmpUYXJnZXQgPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgcywgc291cmNlLCBpLCBwcm9wcywgc3ltcywgdmFsdWUsIGtleTtcblx0Zm9yIChzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7ICsrcykge1xuXHRcdHNvdXJjZSA9IHRvT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cdFx0cHJvcHMgPSBrZXlzKHNvdXJjZSk7XG5cdFx0dmFyIGdldFN5bWJvbHMgPSBoYXNTeW1ib2xzICYmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzIHx8IG9yaWdpbmFsR2V0U3ltYm9scyk7XG5cdFx0aWYgKGdldFN5bWJvbHMpIHtcblx0XHRcdHN5bXMgPSBnZXRTeW1ib2xzKHNvdXJjZSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgc3ltcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRrZXkgPSBzeW1zW2ldO1xuXHRcdFx0XHRpZiAoJHByb3BJc0VudW1lcmFibGUoc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0JHB1c2gocHJvcHMsIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRrZXkgPSBwcm9wc1tpXTtcblx0XHRcdHZhbHVlID0gc291cmNlW2tleV07XG5cdFx0XHRpZiAoJHByb3BJc0VudW1lcmFibGUoc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdG9ialRhcmdldFtrZXldID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmpUYXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQuYXBwbHkoZ2V0UG9seWZpbGwoKSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbnZhciBib3VuZCA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZTEpIHtcblx0cmV0dXJuIHBvbHlmaWxsKE9iamVjdCwgYXJndW1lbnRzKTtcbn07XG5cbmRlZmluZVByb3BlcnRpZXMoYm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBsYWNrc1Byb3BlckVudW1lcmF0aW9uT3JkZXIgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvKlxuXHQgKiB2OCwgc3BlY2lmaWNhbGx5IGluIG5vZGUgNC54LCBoYXMgYSBidWcgd2l0aCBpbmNvcnJlY3QgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXJcblx0ICogbm90ZTogdGhpcyBkb2VzIG5vdCBkZXRlY3QgdGhlIGJ1ZyB1bmxlc3MgdGhlcmUncyAyMCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHR2YXIgc3RyID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0Jztcblx0dmFyIGxldHRlcnMgPSBzdHIuc3BsaXQoJycpO1xuXHR2YXIgbWFwID0ge307XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7ICsraSkge1xuXHRcdG1hcFtsZXR0ZXJzW2ldXSA9IGxldHRlcnNbaV07XG5cdH1cblx0dmFyIG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIG1hcCk7XG5cdHZhciBhY3R1YWwgPSAnJztcblx0Zm9yICh2YXIgayBpbiBvYmopIHtcblx0XHRhY3R1YWwgKz0gaztcblx0fVxuXHRyZXR1cm4gc3RyICE9PSBhY3R1YWw7XG59O1xuXG52YXIgYXNzaWduSGFzUGVuZGluZ0V4Y2VwdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbiB8fCAhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIEZpcmVmb3ggMzcgc3RpbGwgaGFzIFwicGVuZGluZyBleGNlcHRpb25cIiBsb2dpYyBpbiBpdHMgT2JqZWN0LmFzc2lnbiBpbXBsZW1lbnRhdGlvbixcblx0ICogd2hpY2ggaXMgNzIlIHNsb3dlciB0aGFuIG91ciBzaGltLCBhbmQgRmlyZWZveCA0MCdzIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cblx0ICovXG5cdHZhciB0aHJvd2VyID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHsgMTogMiB9KTtcblx0dHJ5IHtcblx0XHRPYmplY3QuYXNzaWduKHRocm93ZXIsICd4eScpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHRocm93ZXJbMV0gPT09ICd5Jztcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlcigpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdGlmIChhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucygpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdHJldHVybiBPYmplY3QuYXNzaWduO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFzc2lnbigpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFxuXHRcdE9iamVjdCxcblx0XHR7IGFzc2lnbjogcG9seWZpbGwgfSxcblx0XHR7IGFzc2lnbjogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0LmFzc2lnbiAhPT0gcG9seWZpbGw7IH0gfVxuXHQpO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciAkaXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgJHB1c2ggPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW50cmllcyhPKSB7XG5cdHZhciBvYmogPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuXHR2YXIgZW50cnlzID0gW107XG5cdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRpZiAoJGlzRW51bWVyYWJsZShvYmosIGtleSkpIHsgLy8gY2hlY2tzIG93bi1uZXNzIGFzIHdlbGxcblx0XHRcdCRwdXNoKGVudHJ5cywgW2tleSwgb2JqW2tleV1dKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGVudHJ5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBzaGltID0gcmVxdWlyZSgnLi9zaGltJyk7XG5cbnZhciBwb2x5ZmlsbCA9IGNhbGxCaW5kKGdldFBvbHlmaWxsKCksIE9iamVjdCk7XG5cbmRlZmluZShwb2x5ZmlsbCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9seWZpbGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0cmV0dXJuIHR5cGVvZiBPYmplY3QuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5lbnRyaWVzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltRW50cmllcygpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKE9iamVjdCwgeyBlbnRyaWVzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0ZW50cmllczogZnVuY3Rpb24gdGVzdEVudHJpZXMoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmVudHJpZXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xuXG52YXIgJGlzRW51bWVyYWJsZSA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZScpO1xudmFyICRwdXNoID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUucHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHZhbHVlcyhPKSB7XG5cdHZhciBvYmogPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuXHR2YXIgdmFscyA9IFtdO1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG5cdFx0aWYgKCRpc0VudW1lcmFibGUob2JqLCBrZXkpKSB7IC8vIGNoZWNrcyBvd24tbmVzcyBhcyB3ZWxsXG5cdFx0XHQkcHVzaCh2YWxzLCBvYmpba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWxzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC52YWx1ZXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QudmFsdWVzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltVmFsdWVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IHZhbHVlczogcG9seWZpbGwgfSwge1xuXHRcdHZhbHVlczogZnVuY3Rpb24gdGVzdFZhbHVlcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QudmFsdWVzICE9PSBwb2x5ZmlsbDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBpc1BsYWluT2JqZWN0O1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh4KSB7XG4gIHJldHVybiB4ICYmICh0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoeCkpID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh4KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNQbGFpbk9iamVjdC5qcy5tYXAiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1snZGVmYXVsdCddID0gZm9yYmlkRXh0cmFQcm9wcztcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKCdvYmplY3QuYXNzaWduJyk7XG5cbnZhciBfb2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdCk7XG5cbnZhciBfaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBfaGFzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhcyk7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1BsYWluT2JqZWN0Jyk7XG5cbnZhciBfaXNQbGFpbk9iamVjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc1BsYWluT2JqZWN0KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgemVyb1dpZHRoU3BhY2UgPSAnXFx1MjAwQic7XG52YXIgc3BlY2lhbFByb3BlcnR5ID0gJ3Byb3AtdHlwZXMtZXhhY3Q6ICcgKyB6ZXJvV2lkdGhTcGFjZTtcbnZhciBzZW1hcGhvcmUgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nID8gU3ltYm9sWydmb3InXShzcGVjaWFsUHJvcGVydHkpIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zcGVjaWFsUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGJyYW5kKGZuKSB7XG4gIHJldHVybiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoZm4sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc3BlY2lhbFByb3BlcnR5LCBzZW1hcGhvcmUpKTtcbn1cblxuZnVuY3Rpb24gaXNCcmFuZGVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtzcGVjaWFsUHJvcGVydHldID09PSBzZW1hcGhvcmU7XG59XG5cbmZ1bmN0aW9uIGZvcmJpZEV4dHJhUHJvcHMocHJvcFR5cGVzKSB7XG4gIGlmICghKDAsIF9pc1BsYWluT2JqZWN0MlsnZGVmYXVsdCddKShwcm9wVHlwZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2l2ZW4gcHJvcFR5cGVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgaWYgKCgwLCBfaGFzMlsnZGVmYXVsdCddKShwcm9wVHlwZXMsIHNwZWNpYWxQcm9wZXJ0eSkgJiYgIWlzQnJhbmRlZChwcm9wVHlwZXNbc3BlY2lhbFByb3BlcnR5XSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBZ2FpbnN0IGFsbCBvZGRzLCB5b3UgY3JlYXRlZCBhIHByb3BUeXBlIGZvciBhIHByb3AgdGhhdCB1c2VzIGJvdGggdGhlIHplcm8td2lkdGggc3BhY2UgYW5kIG91ciBjdXN0b20gc3RyaW5nIC0gd2hpY2gsIHNhZGx5LCBjb25mbGljdHMgd2l0aCBgcHJvcC10eXBlcy1leGFjdGAnKTtcbiAgfVxuXG4gIHJldHVybiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoe30sIHByb3BUeXBlcywgX2RlZmluZVByb3BlcnR5KHt9LCBzcGVjaWFsUHJvcGVydHksIGJyYW5kKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBmb3JiaWRVbmtub3duUHJvcHMocHJvcHMsIF8sIGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHZhciB1bmtub3duUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiAhKDAsIF9oYXMyWydkZWZhdWx0J10pKHByb3BUeXBlcywgcHJvcCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihTdHJpbmcoY29tcG9uZW50TmFtZSkgKyAnOiB1bmtub3duIHByb3BzIGZvdW5kOiAnICsgU3RyaW5nKHVua25vd25Qcm9wcy5qb2luKCcsICcpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9yYmlkVW5rbm93blByb3BzO1xuICB9KCkpKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgU2NoZWR1bGVyID0gcmVxdWlyZSgnc2NoZWR1bGVyJyk7XG52YXIgdHJhY2luZyA9IHJlcXVpcmUoJ3NjaGVkdWxlci90cmFjaW5nJyk7XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuaWYgKCFSZWFjdCkge1xuICB7XG4gICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS5cIiApO1xuICB9XG59XG5cbnZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG52YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xudmFyIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSAyOyAvLyBCZWZvcmUgd2Uga25vdyB3aGV0aGVyIGl0IGlzIGZ1bmN0aW9uIG9yIGNsYXNzXG5cbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG52YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbnZhciBIb3N0Q29tcG9uZW50ID0gNTtcbnZhciBIb3N0VGV4dCA9IDY7XG52YXIgRnJhZ21lbnQgPSA3O1xudmFyIE1vZGUgPSA4O1xudmFyIENvbnRleHRDb25zdW1lciA9IDk7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG52YXIgRm9yd2FyZFJlZiA9IDExO1xudmFyIFByb2ZpbGVyID0gMTI7XG52YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbnZhciBNZW1vQ29tcG9uZW50ID0gMTQ7XG52YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xudmFyIExhenlDb21wb25lbnQgPSAxNjtcbnZhciBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSAxNztcbnZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbnZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbnZhciBGdW5kYW1lbnRhbENvbXBvbmVudCA9IDIwO1xudmFyIFNjb3BlQ29tcG9uZW50ID0gMjE7XG52YXIgQmxvY2sgPSAyMjtcbnZhciBPZmZzY3JlZW5Db21wb25lbnQgPSAyMztcbnZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyNDtcblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVQcm9maWxlclRpbWVyID0gdHJ1ZTsgLy8gUmVjb3JkIGR1cmF0aW9ucyBmb3IgY29tbWl0IGFuZCBwYXNzaXZlIGVmZmVjdHMgcGhhc2VzLlxuXG52YXIgZW5hYmxlRnVuZGFtZW50YWxBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG52YXIgZW5hYmxlTmV3UmVjb25jaWxlciA9IGZhbHNlOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIHdoaWxlIHVubW91bnRpbmcgKG9yIGFmdGVyIGluIHRoZSBjYXNlIG9mIHBhc3NpdmUgZWZmZWN0cylcbnZhciB3YXJuQWJvdXRTdHJpbmdSZWZzID0gZmFsc2U7XG5cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxuXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAqIHVzZWQgdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIGV2ZW50IGhhbmRsZXJzLiBBdmFpbGFibGVcbiAqIG9ubHkgaW4gdHJ1ZS5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSAge30gOyAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gdHJ1ZVxuXG5mdW5jdGlvbiByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgJ0NhcHR1cmUnLCBkZXBlbmRlbmNpZXMpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKSB7XG4gICAgICBlcnJvcignRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArICdyZWdpc3RyYXRpb24gbmFtZSwgYCVzYC4nLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuXG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5vbmRibGNsaWNrID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW2ldKTtcbiAgfVxufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5cbi8vIEEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuLy8gSXQgaXMgaGFuZGxlZCBieSBSZWFjdCBzZXBhcmF0ZWx5IGFuZCBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxudmFyIFJFU0VSVkVEID0gMDsgLy8gQSBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZS5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGZpbHRlciBhcmUgcHJlc3VtZWQgdG8gaGF2ZSB0aGlzIHR5cGUuXG5cbnZhciBTVFJJTkcgPSAxOyAvLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cblxudmFyIEJPT0xFQU5JU0hfU1RSSU5HID0gMjsgLy8gQSByZWFsIGJvb2xlYW4gYXR0cmlidXRlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG5cbnZhciBCT09MRUFOID0gMzsgLy8gQW4gYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG4vLyBGb3IgYW55IG90aGVyIHZhbHVlLCBzaG91bGQgYmUgcHJlc2VudCB3aXRoIHRoYXQgdmFsdWUuXG5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBOVU1FUklDID0gNTsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmUgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgUE9TSVRJVkVfTlVNRVJJQyA9IDY7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSID0gXCI6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxudmFyIEFUVFJJQlVURV9OQU1FX0NIQVIgPSBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgXCJcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MFwiO1xudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gMiAmJiAobmFtZVswXSA9PT0gJ28nIHx8IG5hbWVbMF0gPT09ICdPJykgJiYgKG5hbWVbMV0gPT09ICduJyB8fCBuYW1lWzFdID09PSAnTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOiAvLyAkRmxvd0lzc3VlIHN5bWJvbCBpcyBwZXJmZWN0bHkgdmFsaWQgaGVyZVxuXG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gIXByb3BlcnR5SW5mby5hY2NlcHRzQm9vbGVhbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICE9PSAnZGF0YS0nICYmIHByZWZpeCAhPT0gJ2FyaWEtJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIEJPT0xFQU46XG4gICAgICAgIHJldHVybiAhdmFsdWU7XG5cbiAgICAgIGNhc2UgT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG5cbiAgICAgIGNhc2UgUE9TSVRJVkVfTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvKG5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBwcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIHR5cGUsIG11c3RVc2VQcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBzYW5pdGl6ZVVSTCwgcmVtb3ZlRW1wdHlTdHJpbmcpIHtcbiAgdGhpcy5hY2NlcHRzQm9vbGVhbnMgPSB0eXBlID09PSBCT09MRUFOSVNIX1NUUklORyB8fCB0eXBlID09PSBCT09MRUFOIHx8IHR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTjtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBhdHRyaWJ1dGVOYW1lc3BhY2U7XG4gIHRoaXMubXVzdFVzZVByb3BlcnR5ID0gbXVzdFVzZVByb3BlcnR5O1xuICB0aGlzLnByb3BlcnR5TmFtZSA9IG5hbWU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuc2FuaXRpemVVUkwgPSBzYW5pdGl6ZVVSTDtcbiAgdGhpcy5yZW1vdmVFbXB0eVN0cmluZyA9IHJlbW92ZUVtcHR5U3RyaW5nO1xufSAvLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoaXMgbGlzdCwgYmUgc3VyZSB0byBhbHNvIGFkZCB0aGVtIHRvXG4vLyB0aGUgYHBvc3NpYmxlU3RhbmRhcmROYW1lc2AgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdFxuLy8gbmFtZSB3YXJuaW5ncy5cblxuXG52YXIgcHJvcGVydGllcyA9IHt9OyAvLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblxudmFyIHJlc2VydmVkUHJvcHMgPSBbJ2NoaWxkcmVuJywgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJywgLy8gVE9ETzogVGhpcyBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBkZWZhdWx0VmFsdWUgdG8gcmVndWxhclxuLy8gZWxlbWVudHMgKG5vdCBqdXN0IGlucHV0cykuIE5vdyB0aGF0IFJlYWN0RE9NSW5wdXQgYXNzaWducyB0byB0aGVcbi8vIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSAtLSBkbyB3ZSBuZWVkIHRoaXM/XG4nZGVmYXVsdFZhbHVlJywgJ2RlZmF1bHRDaGVja2VkJywgJ2lubmVySFRNTCcsICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLCAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJywgJ3N0eWxlJ107XG5yZXNlcnZlZFByb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBBIGZldyBSZWFjdCBzdHJpbmcgYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5hbWUuXG4vLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIFJlYWN0IHByb3AgbmFtZXMgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lcy5cblxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bMV0udG9VcHBlckNhc2UoKTtcbn07IC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcsIG5hbWVzcGFjaW5nLFxuLy8gb3IgYm9vbGVhbiB2YWx1ZSBhc3NpZ25tZW50LiBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzXG4vLyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcmUgb21pdHRlZCwganVzdCBsaWtlIGluIHRoZSBIVE1MIGF0dHJpYnV0ZSBmaWx0ZXIuXG4vLyBTb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIGhhcmQgdG8gZmluZC4gVGhpcyBsaXN0IHdhcyBjcmVhdGVkIGJ5XG4vLyBzY3JhcGluZyB0aGUgTUROIGRvY3VtZW50YXRpb24uXG5cblxuWydhY2NlbnQtaGVpZ2h0JywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhcmFiaWMtZm9ybScsICdiYXNlbGluZS1zaGlmdCcsICdjYXAtaGVpZ2h0JywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnZG9taW5hbnQtYmFzZWxpbmUnLCAnZW5hYmxlLWJhY2tncm91bmQnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdnbHlwaC1uYW1lJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnb3ZlcmxpbmUtcG9zaXRpb24nLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJywgJ3BhaW50LW9yZGVyJywgJ3Bhbm9zZS0xJywgJ3BvaW50ZXItZXZlbnRzJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlLXdpZHRoJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLWJpZGknLCAndW5pY29kZS1yYW5nZScsICd1bml0cy1wZXItZW0nLCAndi1hbHBoYWJldGljJywgJ3YtaGFuZ2luZycsICd2LWlkZW9ncmFwaGljJywgJ3YtbWF0aGVtYXRpY2FsJywgJ3ZlY3Rvci1lZmZlY3QnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd29yZC1zcGFjaW5nJywgJ3dyaXRpbmctbW9kZScsICd4bWxuczp4bGluaycsICd4LWhlaWdodCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhsaW5rIG5hbWVzcGFjZS5cblxuWyd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZSBleGlzdHMgYm90aCBpbiBIVE1MIGFuZCBTVkcuXG4vLyBUaGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgaW4gU1ZHIHNvIHdlIGNhbid0IGp1c3QgdXNlXG4vLyB0aGUgUmVhY3QgbmFtZSBsaWtlIHdlIGRvIGZvciBhdHRyaWJ1dGVzIHRoYXQgZXhpc3Qgb25seSBpbiBIVE1MLlxuXG5bJ3RhYkluZGV4JywgJ2Nyb3NzT3JpZ2luJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZXMgYWNjZXB0IFVSTHMuIFRoZXNlIG11c3Qgbm90IGFsbG93IGphdmFzY3JpcHQ6IFVSTFMuXG4vLyBUaGVzZSB3aWxsIGFsc28gbmVlZCB0byBhY2NlcHQgVHJ1c3RlZCBUeXBlcyBvYmplY3QgaW4gdGhlIGZ1dHVyZS5cblxudmFyIHhsaW5rSHJlZiA9ICd4bGlua0hyZWYnO1xucHJvcGVydGllc1t4bGlua0hyZWZdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZCgneGxpbmtIcmVmJywgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4neGxpbms6aHJlZicsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbmZhbHNlKTtcblsnc3JjJywgJ2hyZWYnLCAnYWN0aW9uJywgJ2Zvcm1BY3Rpb24nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIHRydWUsIC8vIHNhbml0aXplVVJMXG4gIHRydWUpO1xufSk7XG5cbi8vIGFuZCBhbnkgbmV3bGluZSBvciB0YWIgYXJlIGZpbHRlcmVkIG91dCBhcyBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBVUkwuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4vLyBUYWIgb3IgbmV3bGluZSBhcmUgZGVmaW5lZCBhcyBcXHJcXG5cXHQ6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktdGFiLW9yLW5ld2xpbmVcbi8vIEEgQzAgY29udHJvbCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFxcdTAwMDAgTlVMTCB0byBcXHUwMDFGXG4vLyBJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FLCBpbmNsdXNpdmU6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYzAtY29udHJvbC1vci1zcGFjZVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICB7XG4gICAgaWYgKCFkaWRXYXJuICYmIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QodXJsKSkge1xuICAgICAgZGlkV2FybiA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgcmV0dXJuIG5vZGVbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmdWxseSBkaXNhYmxlZCBqYXZhc2NyaXB0OiBVUkxzLCBhbmQgaWZcbiAgICAgICAgLy8gdGhlIGh5ZHJhdGlvbiBpcyBzdWNjZXNzZnVsIG9mIGEgamF2YXNjcmlwdDogVVJMLCB3ZVxuICAgICAgICAvLyBzdGlsbCB3YW50IHRvIHdhcm4gb24gdGhlIGNsaWVudC5cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmdWYWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICB7XG4gICAgaWYgKCFpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGUgb2JqZWN0IGlzIGFuIG9wYXF1ZSByZWZlcmVuY2UgSUQsIGl0J3MgZXhwZWN0ZWQgdGhhdFxuICAgIC8vIHRoZSBuZXh0IHByb3AgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHNlcnZlciB2YWx1ZSwgc28ganVzdCByZXR1cm5cbiAgICAvLyBleHBlY3RlZFxuXG5cbiAgICBpZiAoaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QoZXhwZWN0ZWQpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcblxuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gLy8gSWYgdGhlIHByb3AgaXNuJ3QgaW4gdGhlIHNwZWNpYWwgbGlzdCwgdHJlYXQgaXQgYXMgYSBzaW1wbGUgYXR0cmlidXRlLlxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUsICAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgc2FuaXRpemVVUkwoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyaWJ1dGVOYW1lc3BhY2UsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShjdG9yLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICB2YXIgb3duZXIgPSAgZmliZXIuX2RlYnVnT3duZXIgPyBmaWJlci5fZGVidWdPd25lci50eXBlIDogbnVsbCA7XG4gIHZhciBzb3VyY2UgPSAgZmliZXIuX2RlYnVnU291cmNlIDtcblxuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnTGF6eScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUuX3JlbmRlcik7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgZG8ge1xuICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKG5vZGUpO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgcmV0dXJuIGluZm87XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICByZXR1cm4gJ1xcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6ICcgKyB4Lm1lc3NhZ2UgKyAnXFxuJyArIHguc3RhY2s7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuXG4gICAgcmV0dXJuIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChjdXJyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICBjdXJyZW50ID0gbnVsbDtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gIHtcbiAgICBpc1JlbmRlcmluZyA9IHJlbmRlcmluZztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SXNSZW5kZXJpbmcoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNSZW5kZXJpbmc7XG4gIH1cbn1cblxuLy8gRmxvdyBkb2VzIG5vdCBhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBtb3N0IG5vbi1zdHJpbmcgdHlwZXMuIFRvIHdvcmtcbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgYnV0dG9uOiB0cnVlLFxuICBjaGVja2JveDogdHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgcmFkaW86IHRydWUsXG4gIHJlc2V0OiB0cnVlLFxuICBzdWJtaXQ6IHRydWVcbn07XG5mdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoIShoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8IHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLm9uSW5wdXQgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMudmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cblxuICAgIGlmICghKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmNoZWNrZWQgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrZXIobm9kZSkge1xuICByZXR1cm4gbm9kZS5fdmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hUcmFja2VyKG5vZGUpIHtcbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZSA9ICcnO1xuXG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc0NoZWNrYWJsZShub2RlKSkge1xuICAgIHZhbHVlID0gbm9kZS5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyYWNrVmFsdWVPbk5vZGUobm9kZSkge1xuICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gJ2NoZWNrZWQnIDogJ3ZhbHVlJztcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLCB2YWx1ZUZpZWxkKTtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9ICcnICsgbm9kZVt2YWx1ZUZpZWxkXTsgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3ZlciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuXG4gIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldC5jYWxsKHRoaXMpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9KTsgLy8gV2UgY291bGQndmUgcGFzc2VkIHRoaXMgdGhlIGZpcnN0IHRpbWVcbiAgLy8gYnV0IGl0IHRyaWdnZXJzIGEgYnVnIGluIElFMTEgYW5kIEVkZ2UgMTQvMTUuXG4gIC8vIENhbGxpbmcgZGVmaW5lUHJvcGVydHkoKSBhZ2FpbiBzaG91bGQgYmUgZXF1aXZhbGVudC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTc2OFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gIH0pO1xuICB2YXIgdHJhY2tlciA9IHtcbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRldGFjaFRyYWNrZXIobm9kZSk7XG4gICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gIGlmIChnZXRUcmFja2VyKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG5cblxuICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIobm9kZSk7IC8vIGlmIHRoZXJlIGlzIG5vIHRyYWNrZXIgYXQgdGhpcyBwb2ludCBpdCdzIHVubGlrZWx5XG4gIC8vIHRoYXQgdHJ5aW5nIGFnYWluIHdpbGwgc3VjY2VlZFxuXG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIG5leHRWYWx1ZSA9IGdldFZhbHVlRnJvbU5vZGUobm9kZSk7XG5cbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ2lucHV0JywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggY2hlY2tlZCBhbmQgZGVmYXVsdENoZWNrZWQgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsID8gJycgOiBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsQ2hlY2tlZDogcHJvcHMuY2hlY2tlZCAhPSBudWxsID8gcHJvcHMuY2hlY2tlZCA6IHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSAhPSBudWxsID8gcHJvcHMudmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIGNvbnRyb2xsZWQ6IGlzQ29udHJvbGxlZChwcm9wcylcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgaWYgKGNoZWNrZWQgIT0gbnVsbCkge1xuICAgIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgJ2NoZWNrZWQnLCBjaGVja2VkLCBmYWxzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICB2YXIgY29udHJvbGxlZCA9IGlzQ29udHJvbGxlZChwcm9wcyk7XG5cbiAgICBpZiAoIW5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIGNvbnRyb2xsZWQgJiYgIWRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvICcgKyAnYSBkZWZpbmVkIHZhbHVlLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgIWNvbnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gJyArICd1bmRlZmluZWQsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpO1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodmFsdWUgPT09IDAgJiYgbm9kZS52YWx1ZSA9PT0gJycgfHwgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGNvZXJjZSB0byBudW1iZXIgaGVyZSBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnKSB7XG4gICAgLy8gU3VibWl0L3Jlc2V0IGlucHV0cyBuZWVkIHRoZSBhdHRyaWJ1dGUgcmVtb3ZlZCBjb21wbGV0ZWx5IHRvIGF2b2lkXG4gICAgLy8gYmxhbmstdGV4dCBidXR0b25zLlxuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGNvbWVzIGZyb20gYSBjYXNjYWRlIG9mXG4gICAgLy8gcHJvcGVydGllczpcbiAgICAvLyAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMy4gT3RoZXJ3aXNlIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAocHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlcihlbGVtZW50LCBwcm9wcywgaXNIeWRyYXRpbmcpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpIHx8IHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaXNCdXR0b24gPSB0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnOyAvLyBBdm9pZCBzZXR0aW5nIHZhbHVlIGF0dHJpYnV0ZSBvbiBzdWJtaXQvcmVzZXQgaW5wdXRzIGFzIGl0IG92ZXJyaWRlcyB0aGVcbiAgICAvLyBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6ICMxMjg3MlxuXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgcHJvcGVydHkgc2hvdWxkIHVzZVxuICAgICAgICAvLyB0aGUgd3JhcHBlclN0YXRlLl9pbml0aWFsVmFsdWUgcHJvcGVydHkuIFRoaXMgdXNlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAzLiBBbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgaXMgc3luY2hyb25pemVkIHRvIHRoZSBwcm9wZXJ0eSxcbiAgICAgIC8vIHNvIHdlIGFzc2lnbiBkZWZhdWx0VmFsdWUgdG8gdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHZhbHVlIHByb3BlcnR5XG4gICAgICAvLyBhc3NpZ25tZW50IHN0ZXAgYWJvdmUuXG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0gLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBjaHJvbWUgYnVnIHdoZXJlIHNldHRpbmcgZGVmYXVsdENoZWNrZWRcbiAgLy8gd2lsbCBzb21ldGltZXMgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiBjaGVja2VkIChldmVuIGFmdGVyIGRldGFjaG1lbnQpLlxuICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAvLyBXZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuc2V0IG5hbWUgdG8gYXZvaWQgZGlzcnVwdGluZyByYWRpbyBidXR0b24gZ3JvdXBzLlxuXG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gJyc7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgYm90aCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBhbmRcbiAgICAvLyBhdHRyaWJ1dGUgYXJlIGFzc2lnbmVkIGF0IHRoZSBzYW1lIHRpbWUgdXNpbmcgZGVmYXVsdENoZWNrZWQuIFRoaXMgdXNlczpcbiAgICAvL1xuICAgIC8vICAgMS4gVGhlIGNoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAyLiBUaGUgZGVmYXVsdENoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAzLiBPdGhlcndpc2UsIGZhbHNlXG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIW5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcbiAgfVxuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgaWYgKHByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgdmFyIHF1ZXJ5Um9vdCA9IHJvb3ROb2RlO1xuXG4gICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICB9IC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0uIEl0IG1pZ2h0IG5vdCBldmVuIGJlIGluIHRoZVxuICAgIC8vIGRvY3VtZW50LiBMZXQncyBqdXN0IHVzZSB0aGUgbG9jYWwgYHF1ZXJ5U2VsZWN0b3JBbGxgIHRvIGVuc3VyZSB3ZSBkb24ndFxuICAgIC8vIG1pc3MgYW55dGhpbmcuXG5cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPScgKyBKU09OLnN0cmluZ2lmeSgnJyArIG5hbWUpICsgJ11bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUob3RoZXJOb2RlKTtcblxuICAgICAgaWYgKCFvdGhlclByb3BzKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlIG5lZWQgdXBkYXRlIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBuYW1lZCBjb3VzaW4gc2luY2UgdGhlIHZhbHVlXG4gICAgICAvLyB3YXMgY2hhbmdlZCBidXQgdGhlIGlucHV0IHNhdyBubyBldmVudCBvciB2YWx1ZSBzZXRcblxuXG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpOyAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cblxuICAgICAgdXBkYXRlV3JhcHBlcihvdGhlck5vZGUsIG90aGVyUHJvcHMpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpICE9PSBub2RlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLmRlZmF1bHRWYWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJzsgLy8gRmxhdHRlbiBjaGlsZHJlbi4gV2UnbGwgd2FybiBpZiB0aGV5IGFyZSBpbnZhbGlkXG4gIC8vIGR1cmluZyB2YWxpZGF0ZVByb3BzKCkgd2hpY2ggcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgd291bGQgdGhyb3cgb24gbm9uLWVsZW1lbnQgb2JqZWN0cy5cbiAgLy8gRWxlbWVudHMgYXJlIHN0cmluZ2lmaWVkICh3aGljaCBpcyBub3JtYWxseSBpcnJlbGV2YW50XG4gIC8vIGJ1dCBtYXR0ZXJzIGZvciA8ZmJ0PikuXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGNoaWxkOyAvLyBOb3RlOiB3ZSBkb24ndCB3YXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBJbnN0ZWFkLCB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseSBiZWxvdyBzbyB0aGF0XG4gICAgLy8gaXQgaGFwcGVucyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBjb2RlIHBhdGggdG9vLlxuICB9KTtcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBjb2RlIHBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKyAnc2V0dGluZyBgc2VsZWN0ZWRgIG9uIDxvcHRpb24+LicpO1xuXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4gIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSkpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe1xuICAgIGNoaWxkcmVuOiB1bmRlZmluZWRcbiAgfSwgcHJvcHMpO1xuXG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgJyArICdgbXVsdGlwbGVgIGlzIHRydWUuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfSBlbHNlIGlmICghcHJvcHMubXVsdGlwbGUgJiYgaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMihlbGVtZW50LCBwcm9wcykge1xuICByZXR1cm4gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIHdhc011bHRpcGxlOiAhIXByb3BzLm11bHRpcGxlXG4gIH07XG5cbiAge1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSkge1xuICAgICAgZXJyb3IoJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgbm9kZS5tdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0VXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB3YXNNdWx0aXBsZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAod2FzTXVsdGlwbGUgIT09ICEhcHJvcHMubXVsdGlwbGUpIHtcbiAgICAvLyBGb3Igc2ltcGxpY2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRzIGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbERlZmF1bHRWYWwgPSBmYWxzZTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAoIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiICk7XG4gICAgfVxuICB9IC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIEluIElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBzZXRUZXh0Q29udGVudFxuICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAvLyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rU29waGllIHNlZW1lZCB0byBsaWtlIHRoaXNcbiAgLy8gc29sdXRpb24uIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkXG4gIC8vIHRvIGJlIGEgc3RyaW5nLlxuXG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGlsZHJlbjogdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSlcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWxEZWZhdWx0VmFsKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZGVmYXVsdFZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgaWYgKCEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUoaW5pdGlhbFZhbHVlKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICB2YXIgbmV3VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7IC8vIFRvIGF2b2lkIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBjaGFuZ2VkXG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgJiYgbm9kZS5kZWZhdWx0VmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cblxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OyAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAvLyBpbml0aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAvLyB3aWxsIHBvcHVsYXRlIHRleHRDb250ZW50IGFzIHdlbGwuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cblxuICBpZiAodGV4dENvbnRlbnQgPT09IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICBpZiAodGV4dENvbnRlbnQgIT09ICcnICYmIHRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gRE9NIGNvbXBvbmVudCBpcyBzdGlsbCBtb3VudGVkOyB1cGRhdGVcbiAgdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKTtcbn1cblxudmFyIEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xudmFyIE1BVEhfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xudmFyIFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xudmFyIE5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6IEhUTUxfTkFNRVNQQUNFLFxuICBtYXRobWw6IE1BVEhfTkFNRVNQQUNFLFxuICBzdmc6IFNWR19OQU1FU1BBQ0Vcbn07IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PSBudWxsIHx8IHBhcmVudE5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHJldHVybiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBTVkdfTkFNRVNQQUNFICYmIHR5cGUgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIFdlJ3JlIGxlYXZpbmcgU1ZHLlxuICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2Zykge1xuXG4gICAgaWYgKCEoJ2lubmVySFRNTCcgaW4gbm9kZSkpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0IHRoZVxuICAgICAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhlbiBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAgICAgLy8gdGhlIHRhcmdldCBub2RlXG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAnPC9zdmc+JztcbiAgICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChzdmdOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xufSk7XG5cbi8qKlxuICogSFRNTCBub2RlVHlwZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIHR5cGUgb2YgdGhlIG5vZGVcbiAqL1xudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xudmFyIERPQ1VNRU5UX05PREUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZS4gRm9yIHRleHQgdXBkYXRlcywgaXQncyBmYXN0ZXJcbiAqIHRvIHNldCB0aGUgYG5vZGVWYWx1ZWAgb2YgdGhlIFRleHQgbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gKiBgLnRleHRDb250ZW50YCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbiAobm9kZSwgdGV4dCkge1xuICBpZiAodGV4dCkge1xuICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG4vLyBMaXN0IGRlcml2ZWQgZnJvbSBHZWNrbyBzb3VyY2UgY29kZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iLzRlNjM4ZWZjNzEvbGF5b3V0L3N0eWxlL3Rlc3QvcHJvcGVydHlfZGF0YWJhc2UuanNcbnZhciBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICBhbmltYXRpb246IFsnYW5pbWF0aW9uRGVsYXknLCAnYW5pbWF0aW9uRGlyZWN0aW9uJywgJ2FuaW1hdGlvbkR1cmF0aW9uJywgJ2FuaW1hdGlvbkZpbGxNb2RlJywgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgJ2FuaW1hdGlvbk5hbWUnLCAnYW5pbWF0aW9uUGxheVN0YXRlJywgJ2FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIGJhY2tncm91bmQ6IFsnYmFja2dyb3VuZEF0dGFjaG1lbnQnLCAnYmFja2dyb3VuZENsaXAnLCAnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kT3JpZ2luJywgJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWScsICdiYWNrZ3JvdW5kUmVwZWF0JywgJ2JhY2tncm91bmRTaXplJ10sXG4gIGJhY2tncm91bmRQb3NpdGlvbjogWydiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknXSxcbiAgYm9yZGVyOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCcsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJCbG9ja0VuZDogWydib3JkZXJCbG9ja0VuZENvbG9yJywgJ2JvcmRlckJsb2NrRW5kU3R5bGUnLCAnYm9yZGVyQmxvY2tFbmRXaWR0aCddLFxuICBib3JkZXJCbG9ja1N0YXJ0OiBbJ2JvcmRlckJsb2NrU3RhcnRDb2xvcicsICdib3JkZXJCbG9ja1N0YXJ0U3R5bGUnLCAnYm9yZGVyQmxvY2tTdGFydFdpZHRoJ10sXG4gIGJvcmRlckJvdHRvbTogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCddLFxuICBib3JkZXJDb2xvcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJUb3BDb2xvciddLFxuICBib3JkZXJJbWFnZTogWydib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lRW5kOiBbJ2JvcmRlcklubGluZUVuZENvbG9yJywgJ2JvcmRlcklubGluZUVuZFN0eWxlJywgJ2JvcmRlcklubGluZUVuZFdpZHRoJ10sXG4gIGJvcmRlcklubGluZVN0YXJ0OiBbJ2JvcmRlcklubGluZVN0YXJ0Q29sb3InLCAnYm9yZGVySW5saW5lU3RhcnRTdHlsZScsICdib3JkZXJJbmxpbmVTdGFydFdpZHRoJ10sXG4gIGJvcmRlckxlZnQ6IFsnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnXSxcbiAgYm9yZGVyUmFkaXVzOiBbJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cyddLFxuICBib3JkZXJSaWdodDogWydib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCddLFxuICBib3JkZXJTdHlsZTogWydib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJUb3BTdHlsZSddLFxuICBib3JkZXJUb3A6IFsnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyV2lkdGg6IFsnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgY29sdW1uUnVsZTogWydjb2x1bW5SdWxlQ29sb3InLCAnY29sdW1uUnVsZVN0eWxlJywgJ2NvbHVtblJ1bGVXaWR0aCddLFxuICBjb2x1bW5zOiBbJ2NvbHVtbkNvdW50JywgJ2NvbHVtbldpZHRoJ10sXG4gIGZsZXg6IFsnZmxleEJhc2lzJywgJ2ZsZXhHcm93JywgJ2ZsZXhTaHJpbmsnXSxcbiAgZmxleEZsb3c6IFsnZmxleERpcmVjdGlvbicsICdmbGV4V3JhcCddLFxuICBmb250OiBbJ2ZvbnRGYW1pbHknLCAnZm9udEZlYXR1cmVTZXR0aW5ncycsICdmb250S2VybmluZycsICdmb250TGFuZ3VhZ2VPdmVycmlkZScsICdmb250U2l6ZScsICdmb250U2l6ZUFkanVzdCcsICdmb250U3RyZXRjaCcsICdmb250U3R5bGUnLCAnZm9udFZhcmlhbnQnLCAnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbicsICdmb250V2VpZ2h0JywgJ2xpbmVIZWlnaHQnXSxcbiAgZm9udFZhcmlhbnQ6IFsnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbiddLFxuICBnYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkOiBbJ2dyaWRBdXRvQ29sdW1ucycsICdncmlkQXV0b0Zsb3cnLCAnZ3JpZEF1dG9Sb3dzJywgJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBncmlkQXJlYTogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCcsICdncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkQ29sdW1uOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0J10sXG4gIGdyaWRDb2x1bW5HYXA6IFsnY29sdW1uR2FwJ10sXG4gIGdyaWRHYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkUm93OiBbJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRSb3dHYXA6IFsncm93R2FwJ10sXG4gIGdyaWRUZW1wbGF0ZTogWydncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgbGlzdFN0eWxlOiBbJ2xpc3RTdHlsZUltYWdlJywgJ2xpc3RTdHlsZVBvc2l0aW9uJywgJ2xpc3RTdHlsZVR5cGUnXSxcbiAgbWFyZ2luOiBbJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0JywgJ21hcmdpblRvcCddLFxuICBtYXJrZXI6IFsnbWFya2VyRW5kJywgJ21hcmtlck1pZCcsICdtYXJrZXJTdGFydCddLFxuICBtYXNrOiBbJ21hc2tDbGlwJywgJ21hc2tDb21wb3NpdGUnLCAnbWFza0ltYWdlJywgJ21hc2tNb2RlJywgJ21hc2tPcmlnaW4nLCAnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJywgJ21hc2tSZXBlYXQnLCAnbWFza1NpemUnXSxcbiAgbWFza1Bvc2l0aW9uOiBbJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWSddLFxuICBvdXRsaW5lOiBbJ291dGxpbmVDb2xvcicsICdvdXRsaW5lU3R5bGUnLCAnb3V0bGluZVdpZHRoJ10sXG4gIG92ZXJmbG93OiBbJ292ZXJmbG93WCcsICdvdmVyZmxvd1knXSxcbiAgcGFkZGluZzogWydwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nVG9wJ10sXG4gIHBsYWNlQ29udGVudDogWydhbGlnbkNvbnRlbnQnLCAnanVzdGlmeUNvbnRlbnQnXSxcbiAgcGxhY2VJdGVtczogWydhbGlnbkl0ZW1zJywgJ2p1c3RpZnlJdGVtcyddLFxuICBwbGFjZVNlbGY6IFsnYWxpZ25TZWxmJywgJ2p1c3RpZnlTZWxmJ10sXG4gIHRleHREZWNvcmF0aW9uOiBbJ3RleHREZWNvcmF0aW9uQ29sb3InLCAndGV4dERlY29yYXRpb25MaW5lJywgJ3RleHREZWNvcmF0aW9uU3R5bGUnXSxcbiAgdGV4dEVtcGhhc2lzOiBbJ3RleHRFbXBoYXNpc0NvbG9yJywgJ3RleHRFbXBoYXNpc1N0eWxlJ10sXG4gIHRyYW5zaXRpb246IFsndHJhbnNpdGlvbkRlbGF5JywgJ3RyYW5zaXRpb25EdXJhdGlvbicsICd0cmFuc2l0aW9uUHJvcGVydHknLCAndHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIHdvcmRXcmFwOiBbJ292ZXJmbG93V3JhcCddXG59O1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuICBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBjb2x1bW5zOiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxcbiAgZ3JpZEFyZWE6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107IC8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG5cbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCAmJiAhKGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnOyAvLyBQcmVzdW1lcyBpbXBsaWNpdCAncHgnIHN1ZmZpeCBmb3IgdW5pdGxlc3MgbnVtYmVyc1xuICB9XG5cbiAgcmV0dXJuICgnJyArIHZhbHVlKS50cmltKCk7XG59XG5cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqL1xuXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG4gIHZhciBtc1BhdHRlcm4kMSA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZzsgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG5cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcbiAgdmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG4gIHZhciB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gZmFsc2U7XG5cbiAgdmFyIGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCAvLyBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gICAgLy8gKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICAgIC8vIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAgICBjYW1lbGl6ZShuYW1lLnJlcGxhY2UobXNQYXR0ZXJuJDEsICdtcy0nKSkpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKFwiU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uLiBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvck5hTlZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9yTmFOVmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvckluZmluaXR5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc05hTihuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSQxID0gd2FyblZhbGlkU3R5bGU7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgc3R5bGVcbiAqIGF0dHJpYnV0ZSBnZW5lcmF0ZWQgYnkgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBJdCBieS1wYXNzZXMgd2FybmluZ3MgYW5kXG4gKiBzZWN1cml0eSBjaGVja3Mgc28gaXQncyBub3Qgc2FmZSB0byB1c2UgdGhpcyB2YWx1ZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhblxuICogY29tcGFyaXNvbi4gSXQgaXMgb25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKHN0eWxlcykge1xuICB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICB2YXIgZGVsaW1pdGVyID0gJyc7XG5cbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgKGlzQ3VzdG9tUHJvcGVydHkgPyBzdHlsZU5hbWUgOiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpO1xuICAgICAgICBkZWxpbWl0ZXIgPSAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcblxuICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICAgIHtcbiAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZSQxKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdLCBpc0N1c3RvbVByb3BlcnR5KTtcblxuICAgIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgIHN0eWxlTmFtZSA9ICdjc3NGbG9hdCc7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xufVxuLyoqXG4gKiBHaXZlbiB7Y29sb3I6ICdyZWQnLCBvdmVyZmxvdzogJ2hpZGRlbid9IHJldHVybnMge1xuICogICBjb2xvcjogJ2NvbG9yJyxcbiAqICAgb3ZlcmZsb3dYOiAnb3ZlcmZsb3cnLFxuICogICBvdmVyZmxvd1k6ICdvdmVyZmxvdycsXG4gKiB9LiBUaGlzIGNhbiBiZSByZWFkIGFzIFwidGhlIG92ZXJmbG93WSBwcm9wZXJ0eSB3YXMgc2V0IGJ5IHRoZSBvdmVyZmxvd1xuICogc2hvcnRoYW5kXCIuIFRoYXQgaXMsIHRoZSB2YWx1ZXMgYXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGVhY2ggd2FzIGRlcml2ZWQgZnJvbS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZXMpIHtcbiAgdmFyIGV4cGFuZGVkID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgIHZhciBsb25naGFuZHMgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleV0gfHwgW2tleV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwYW5kZWRbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG4vKipcbiAqIFdoZW4gbWl4aW5nIHNob3J0aGFuZCBhbmQgbG9uZ2hhbmQgcHJvcGVydHkgbmFtZXMsIHdlIHdhcm4gZHVyaW5nIHVwZGF0ZXMgaWZcbiAqIHdlIGV4cGVjdCBhbiBpbmNvcnJlY3QgcmVzdWx0IHRvIG9jY3VyLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3YXJuIGZvcjpcbiAqXG4gKiBVcGRhdGluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBvdmVyd3JpdHRlbik6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2JheicsIGZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICdiYXonXG4gKiBSZW1vdmluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBsb3N0IHRvbyk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJydcbiAqIFJlbW92aW5nIGEgbG9uZ2hhbmQgcHJvcGVydHkgKHNob3VsZCByZXZlcnQgdG8gc2hvcnRoYW5kOyBkb2Vzbid0KTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnZm9vJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udFZhcmlhbnQgPSAnJ1xuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFN0eWxlcykge1xuICB7XG4gICAgaWYgKCFuZXh0U3R5bGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZGVkVXBkYXRlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZVVwZGF0ZXMpO1xuICAgIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgICB2YXIgd2FybmVkQWJvdXQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1trZXldO1xuICAgICAgdmFyIGNvcnJlY3RPcmlnaW5hbEtleSA9IGV4cGFuZGVkU3R5bGVzW2tleV07XG5cbiAgICAgIGlmIChjb3JyZWN0T3JpZ2luYWxLZXkgJiYgb3JpZ2luYWxLZXkgIT09IGNvcnJlY3RPcmlnaW5hbEtleSkge1xuICAgICAgICB2YXIgd2FybmluZ0tleSA9IG9yaWdpbmFsS2V5ICsgJywnICsgY29ycmVjdE9yaWdpbmFsS2V5O1xuXG4gICAgICAgIGlmICh3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FybmVkQWJvdXRbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSAnICsgJ2NvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gJyArIFwiYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIFwiICsgJ2ZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggJyArICdzZXBhcmF0ZSB2YWx1ZXMuJywgaXNWYWx1ZUVtcHR5KHN0eWxlVXBkYXRlc1tvcmlnaW5hbEtleV0pID8gJ1JlbW92aW5nJyA6ICdVcGRhdGluZycsIG9yaWdpbmFsS2V5LCBjb3JyZWN0T3JpZ2luYWxLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIGxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZSAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxuXG59O1xuXG4vLyBgb21pdHRlZENsb3NlVGFnc2AgZXhjZXB0IHRoYXQgYG1lbnVpdGVtYCBzaG91bGQgc3RpbGwgaGF2ZSBpdHMgY2xvc2luZyB0YWcuXG5cbnZhciB2b2lkRWxlbWVudFRhZ3MgPSBfYXNzaWduKHtcbiAgbWVudWl0ZW06IHRydWVcbn0sIG9taXR0ZWRDbG9zZVRhZ3MpO1xuXG52YXIgSFRNTCA9ICdfX2h0bWwnO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfSAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuXG5cbiAgaWYgKHZvaWRFbGVtZW50VGFnc1t0YWddKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggdGFnICsgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIEhUTUwgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKCFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiYgcHJvcHMuY29udGVudEVkaXRhYmxlICYmIHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyArICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0N1c3RvbUNvbXBvbmVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIGxpc3QgdG9vIG11Y2ggYmVjYXVzZSB3ZSBleHBlY3QgaXQgdG8gbmV2ZXIgZ3Jvdy5cbiAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdHJhY2sgdGhlIG5hbWVzcGFjZSBpbiBhIGZldyBwbGFjZXMgd2hpY2ggaXMgY29udm9sdXRlZC5cbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3VzdG9tLWVsZW1lbnRzLWNvcmUtY29uY2VwdHNcbiAgICBjYXNlICdhbm5vdGF0aW9uLXhtbCc6XG4gICAgY2FzZSAnY29sb3ItcHJvZmlsZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlJzpcbiAgICBjYXNlICdmb250LWZhY2Utc3JjJzpcbiAgICBjYXNlICdmb250LWZhY2UtdXJpJzpcbiAgICBjYXNlICdmb250LWZhY2UtZm9ybWF0JzpcbiAgICBjYXNlICdmb250LWZhY2UtbmFtZSc6XG4gICAgY2FzZSAnbWlzc2luZy1nbHlwaCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgYWxsb3dlZCBhdHRyaWJ1dGUgbGlzdCwgYmUgc3VyZSB0b1xuLy8gYWxzbyBhZGQgdGhlbSB0byB0aGlzIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3QgbmFtZVxuLy8gd2FybmluZ3MuXG52YXIgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAvLyBIVE1MXG4gIGFjY2VwdDogJ2FjY2VwdCcsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHRDaGFyc2V0JyxcbiAgJ2FjY2VwdC1jaGFyc2V0JzogJ2FjY2VwdENoYXJzZXQnLFxuICBhY2Nlc3NrZXk6ICdhY2Nlc3NLZXknLFxuICBhY3Rpb246ICdhY3Rpb24nLFxuICBhbGxvd2Z1bGxzY3JlZW46ICdhbGxvd0Z1bGxTY3JlZW4nLFxuICBhbHQ6ICdhbHQnLFxuICBhczogJ2FzJyxcbiAgYXN5bmM6ICdhc3luYycsXG4gIGF1dG9jYXBpdGFsaXplOiAnYXV0b0NhcGl0YWxpemUnLFxuICBhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGUnLFxuICBhdXRvY29ycmVjdDogJ2F1dG9Db3JyZWN0JyxcbiAgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyxcbiAgYXV0b3BsYXk6ICdhdXRvUGxheScsXG4gIGF1dG9zYXZlOiAnYXV0b1NhdmUnLFxuICBjYXB0dXJlOiAnY2FwdHVyZScsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2hhbGxlbmdlOiAnY2hhbGxlbmdlJyxcbiAgY2hhcnNldDogJ2NoYXJTZXQnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNsYXNzOiAnY2xhc3NOYW1lJyxcbiAgY2xhc3NpZDogJ2NsYXNzSUQnLFxuICBjbGFzc25hbWU6ICdjbGFzc05hbWUnLFxuICBjb2xzOiAnY29scycsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgY29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50ZWRpdGFibGU6ICdjb250ZW50RWRpdGFibGUnLFxuICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JyxcbiAgY29udHJvbHM6ICdjb250cm9scycsXG4gIGNvbnRyb2xzbGlzdDogJ2NvbnRyb2xzTGlzdCcsXG4gIGNvb3JkczogJ2Nvb3JkcycsXG4gIGNyb3Nzb3JpZ2luOiAnY3Jvc3NPcmlnaW4nLFxuICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgZGF0YTogJ2RhdGEnLFxuICBkYXRldGltZTogJ2RhdGVUaW1lJyxcbiAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICBkZWZhdWx0Y2hlY2tlZDogJ2RlZmF1bHRDaGVja2VkJyxcbiAgZGVmYXVsdHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmZXI6ICdkZWZlcicsXG4gIGRpcjogJ2RpcicsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJyxcbiAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG4gIGVuY3R5cGU6ICdlbmNUeXBlJyxcbiAgZW50ZXJrZXloaW50OiAnZW50ZXJLZXlIaW50JyxcbiAgZm9yOiAnaHRtbEZvcicsXG4gIGZvcm06ICdmb3JtJyxcbiAgZm9ybW1ldGhvZDogJ2Zvcm1NZXRob2QnLFxuICBmb3JtYWN0aW9uOiAnZm9ybUFjdGlvbicsXG4gIGZvcm1lbmN0eXBlOiAnZm9ybUVuY1R5cGUnLFxuICBmb3Jtbm92YWxpZGF0ZTogJ2Zvcm1Ob1ZhbGlkYXRlJyxcbiAgZm9ybXRhcmdldDogJ2Zvcm1UYXJnZXQnLFxuICBmcmFtZWJvcmRlcjogJ2ZyYW1lQm9yZGVyJyxcbiAgaGVhZGVyczogJ2hlYWRlcnMnLFxuICBoZWlnaHQ6ICdoZWlnaHQnLFxuICBoaWRkZW46ICdoaWRkZW4nLFxuICBoaWdoOiAnaGlnaCcsXG4gIGhyZWY6ICdocmVmJyxcbiAgaHJlZmxhbmc6ICdocmVmTGFuZycsXG4gIGh0bWxmb3I6ICdodG1sRm9yJyxcbiAgaHR0cGVxdWl2OiAnaHR0cEVxdWl2JyxcbiAgJ2h0dHAtZXF1aXYnOiAnaHR0cEVxdWl2JyxcbiAgaWNvbjogJ2ljb24nLFxuICBpZDogJ2lkJyxcbiAgaW5uZXJodG1sOiAnaW5uZXJIVE1MJyxcbiAgaW5wdXRtb2RlOiAnaW5wdXRNb2RlJyxcbiAgaW50ZWdyaXR5OiAnaW50ZWdyaXR5JyxcbiAgaXM6ICdpcycsXG4gIGl0ZW1pZDogJ2l0ZW1JRCcsXG4gIGl0ZW1wcm9wOiAnaXRlbVByb3AnLFxuICBpdGVtcmVmOiAnaXRlbVJlZicsXG4gIGl0ZW1zY29wZTogJ2l0ZW1TY29wZScsXG4gIGl0ZW10eXBlOiAnaXRlbVR5cGUnLFxuICBrZXlwYXJhbXM6ICdrZXlQYXJhbXMnLFxuICBrZXl0eXBlOiAna2V5VHlwZScsXG4gIGtpbmQ6ICdraW5kJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxhbmc6ICdsYW5nJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsb29wOiAnbG9vcCcsXG4gIGxvdzogJ2xvdycsXG4gIG1hbmlmZXN0OiAnbWFuaWZlc3QnLFxuICBtYXJnaW53aWR0aDogJ21hcmdpbldpZHRoJyxcbiAgbWFyZ2luaGVpZ2h0OiAnbWFyZ2luSGVpZ2h0JyxcbiAgbWF4OiAnbWF4JyxcbiAgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgbWVkaWE6ICdtZWRpYScsXG4gIG1lZGlhZ3JvdXA6ICdtZWRpYUdyb3VwJyxcbiAgbWV0aG9kOiAnbWV0aG9kJyxcbiAgbWluOiAnbWluJyxcbiAgbWlubGVuZ3RoOiAnbWluTGVuZ3RoJyxcbiAgbXVsdGlwbGU6ICdtdWx0aXBsZScsXG4gIG11dGVkOiAnbXV0ZWQnLFxuICBuYW1lOiAnbmFtZScsXG4gIG5vbW9kdWxlOiAnbm9Nb2R1bGUnLFxuICBub25jZTogJ25vbmNlJyxcbiAgbm92YWxpZGF0ZTogJ25vVmFsaWRhdGUnLFxuICBvcGVuOiAnb3BlbicsXG4gIG9wdGltdW06ICdvcHRpbXVtJyxcbiAgcGF0dGVybjogJ3BhdHRlcm4nLFxuICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyJyxcbiAgcGxheXNpbmxpbmU6ICdwbGF5c0lubGluZScsXG4gIHBvc3RlcjogJ3Bvc3RlcicsXG4gIHByZWxvYWQ6ICdwcmVsb2FkJyxcbiAgcHJvZmlsZTogJ3Byb2ZpbGUnLFxuICByYWRpb2dyb3VwOiAncmFkaW9Hcm91cCcsXG4gIHJlYWRvbmx5OiAncmVhZE9ubHknLFxuICByZWZlcnJlcnBvbGljeTogJ3JlZmVycmVyUG9saWN5JyxcbiAgcmVsOiAncmVsJyxcbiAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gIHJldmVyc2VkOiAncmV2ZXJzZWQnLFxuICByb2xlOiAncm9sZScsXG4gIHJvd3M6ICdyb3dzJyxcbiAgcm93c3BhbjogJ3Jvd1NwYW4nLFxuICBzYW5kYm94OiAnc2FuZGJveCcsXG4gIHNjb3BlOiAnc2NvcGUnLFxuICBzY29wZWQ6ICdzY29wZWQnLFxuICBzY3JvbGxpbmc6ICdzY3JvbGxpbmcnLFxuICBzZWFtbGVzczogJ3NlYW1sZXNzJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCcsXG4gIHNoYXBlOiAnc2hhcGUnLFxuICBzaXplOiAnc2l6ZScsXG4gIHNpemVzOiAnc2l6ZXMnLFxuICBzcGFuOiAnc3BhbicsXG4gIHNwZWxsY2hlY2s6ICdzcGVsbENoZWNrJyxcbiAgc3JjOiAnc3JjJyxcbiAgc3JjZG9jOiAnc3JjRG9jJyxcbiAgc3JjbGFuZzogJ3NyY0xhbmcnLFxuICBzcmNzZXQ6ICdzcmNTZXQnLFxuICBzdGFydDogJ3N0YXJ0JyxcbiAgc3RlcDogJ3N0ZXAnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICB0YWJpbmRleDogJ3RhYkluZGV4JyxcbiAgdGFyZ2V0OiAndGFyZ2V0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHR5cGU6ICd0eXBlJyxcbiAgdXNlbWFwOiAndXNlTWFwJyxcbiAgdmFsdWU6ICd2YWx1ZScsXG4gIHdpZHRoOiAnd2lkdGgnLFxuICB3bW9kZTogJ3dtb2RlJyxcbiAgd3JhcDogJ3dyYXAnLFxuICAvLyBTVkdcbiAgYWJvdXQ6ICdhYm91dCcsXG4gIGFjY2VudGhlaWdodDogJ2FjY2VudEhlaWdodCcsXG4gICdhY2NlbnQtaGVpZ2h0JzogJ2FjY2VudEhlaWdodCcsXG4gIGFjY3VtdWxhdGU6ICdhY2N1bXVsYXRlJyxcbiAgYWRkaXRpdmU6ICdhZGRpdGl2ZScsXG4gIGFsaWdubWVudGJhc2VsaW5lOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dyZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogJ2FscGhhYmV0aWMnLFxuICBhbXBsaXR1ZGU6ICdhbXBsaXR1ZGUnLFxuICBhcmFiaWNmb3JtOiAnYXJhYmljRm9ybScsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAnYXNjZW50JyxcbiAgYXR0cmlidXRlbmFtZTogJ2F0dHJpYnV0ZU5hbWUnLFxuICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gIGF1dG9yZXZlcnNlOiAnYXV0b1JldmVyc2UnLFxuICBhemltdXRoOiAnYXppbXV0aCcsXG4gIGJhc2VmcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZWxpbmVzaGlmdDogJ2Jhc2VsaW5lU2hpZnQnLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAnYmFzZWxpbmVTaGlmdCcsXG4gIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICBiYm94OiAnYmJveCcsXG4gIGJlZ2luOiAnYmVnaW4nLFxuICBiaWFzOiAnYmlhcycsXG4gIGJ5OiAnYnknLFxuICBjYWxjbW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwaGVpZ2h0OiAnY2FwSGVpZ2h0JyxcbiAgJ2NhcC1oZWlnaHQnOiAnY2FwSGVpZ2h0JyxcbiAgY2xpcDogJ2NsaXAnLFxuICBjbGlwcGF0aDogJ2NsaXBQYXRoJyxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgY2xpcHJ1bGU6ICdjbGlwUnVsZScsXG4gICdjbGlwLXJ1bGUnOiAnY2xpcFJ1bGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICBjb2xvcnByb2ZpbGU6ICdjb2xvclByb2ZpbGUnLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvcnJlbmRlcmluZzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRzY3JpcHR0eXBlOiAnY29udGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50c3R5bGV0eXBlOiAnY29udGVudFN0eWxlVHlwZScsXG4gIGN1cnNvcjogJ2N1cnNvcicsXG4gIGN4OiAnY3gnLFxuICBjeTogJ2N5JyxcbiAgZDogJ2QnLFxuICBkYXRhdHlwZTogJ2RhdGF0eXBlJyxcbiAgZGVjZWxlcmF0ZTogJ2RlY2VsZXJhdGUnLFxuICBkZXNjZW50OiAnZGVzY2VudCcsXG4gIGRpZmZ1c2Vjb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogJ2RpcmVjdGlvbicsXG4gIGRpc3BsYXk6ICdkaXNwbGF5JyxcbiAgZGl2aXNvcjogJ2Rpdmlzb3InLFxuICBkb21pbmFudGJhc2VsaW5lOiAnZG9taW5hbnRCYXNlbGluZScsXG4gICdkb21pbmFudC1iYXNlbGluZSc6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgZHVyOiAnZHVyJyxcbiAgZHg6ICdkeCcsXG4gIGR5OiAnZHknLFxuICBlZGdlbW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAnZWxldmF0aW9uJyxcbiAgZW5hYmxlYmFja2dyb3VuZDogJ2VuYWJsZUJhY2tncm91bmQnLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogJ2VuZCcsXG4gIGV4cG9uZW50OiAnZXhwb25lbnQnLFxuICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXG4gIGZpbGw6ICdmaWxsJyxcbiAgZmlsbG9wYWNpdHk6ICdmaWxsT3BhY2l0eScsXG4gICdmaWxsLW9wYWNpdHknOiAnZmlsbE9wYWNpdHknLFxuICBmaWxscnVsZTogJ2ZpbGxSdWxlJyxcbiAgJ2ZpbGwtcnVsZSc6ICdmaWxsUnVsZScsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlcnJlczogJ2ZpbHRlclJlcycsXG4gIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZG9wYWNpdHk6ICdmbG9vZE9wYWNpdHknLFxuICAnZmxvb2Qtb3BhY2l0eSc6ICdmbG9vZE9wYWNpdHknLFxuICBmbG9vZGNvbG9yOiAnZmxvb2RDb2xvcicsXG4gICdmbG9vZC1jb2xvcic6ICdmbG9vZENvbG9yJyxcbiAgZm9jdXNhYmxlOiAnZm9jdXNhYmxlJyxcbiAgZm9udGZhbWlseTogJ2ZvbnRGYW1pbHknLFxuICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gIGZvbnRzaXplOiAnZm9udFNpemUnLFxuICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgZm9udHNpemVhZGp1c3Q6ICdmb250U2l6ZUFkanVzdCcsXG4gICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgZm9udHN0cmV0Y2g6ICdmb250U3RyZXRjaCcsXG4gICdmb250LXN0cmV0Y2gnOiAnZm9udFN0cmV0Y2gnLFxuICBmb250c3R5bGU6ICdmb250U3R5bGUnLFxuICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICBmb250dmFyaWFudDogJ2ZvbnRWYXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudCc6ICdmb250VmFyaWFudCcsXG4gIGZvbnR3ZWlnaHQ6ICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICBmb3JtYXQ6ICdmb3JtYXQnLFxuICBmcm9tOiAnZnJvbScsXG4gIGZ4OiAnZngnLFxuICBmeTogJ2Z5JyxcbiAgZzE6ICdnMScsXG4gIGcyOiAnZzInLFxuICBnbHlwaG5hbWU6ICdnbHlwaE5hbWUnLFxuICAnZ2x5cGgtbmFtZSc6ICdnbHlwaE5hbWUnLFxuICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhyZWY6ICdnbHlwaFJlZicsXG4gIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVudHVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6ICdoYW5naW5nJyxcbiAgaG9yaXphZHZ4OiAnaG9yaXpBZHZYJyxcbiAgJ2hvcml6LWFkdi14JzogJ2hvcml6QWR2WCcsXG4gIGhvcml6b3JpZ2lueDogJ2hvcml6T3JpZ2luWCcsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogJ2lkZW9ncmFwaGljJyxcbiAgaW1hZ2VyZW5kZXJpbmc6ICdpbWFnZVJlbmRlcmluZycsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6ICdpbjInLFxuICBpbjogJ2luJyxcbiAgaW5saXN0OiAnaW5saXN0JyxcbiAgaW50ZXJjZXB0OiAnaW50ZXJjZXB0JyxcbiAgazE6ICdrMScsXG4gIGsyOiAnazInLFxuICBrMzogJ2szJyxcbiAgazQ6ICdrNCcsXG4gIGs6ICdrJyxcbiAga2VybmVsbWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsdW5pdGxlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAna2VybmluZycsXG4gIGtleXBvaW50czogJ2tleVBvaW50cycsXG4gIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAga2V5dGltZXM6ICdrZXlUaW1lcycsXG4gIGxlbmd0aGFkanVzdDogJ2xlbmd0aEFkanVzdCcsXG4gIGxldHRlcnNwYWNpbmc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2xldHRlci1zcGFjaW5nJzogJ2xldHRlclNwYWNpbmcnLFxuICBsaWdodGluZ2NvbG9yOiAnbGlnaHRpbmdDb2xvcicsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdjb25lYW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBtYXJrZXJlbmQ6ICdtYXJrZXJFbmQnLFxuICAnbWFya2VyLWVuZCc6ICdtYXJrZXJFbmQnLFxuICBtYXJrZXJoZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJtaWQ6ICdtYXJrZXJNaWQnLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJzdGFydDogJ21hcmtlclN0YXJ0JyxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlcnVuaXRzOiAnbWFya2VyVW5pdHMnLFxuICBtYXJrZXJ3aWR0aDogJ21hcmtlcldpZHRoJyxcbiAgbWFzazogJ21hc2snLFxuICBtYXNrY29udGVudHVuaXRzOiAnbWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0aWNhbDogJ21hdGhlbWF0aWNhbCcsXG4gIG1vZGU6ICdtb2RlJyxcbiAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZzZXQ6ICdvZmZzZXQnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG9wZXJhdG9yOiAnb3BlcmF0b3InLFxuICBvcmRlcjogJ29yZGVyJyxcbiAgb3JpZW50OiAnb3JpZW50JyxcbiAgb3JpZW50YXRpb246ICdvcmllbnRhdGlvbicsXG4gIG9yaWdpbjogJ29yaWdpbicsXG4gIG92ZXJmbG93OiAnb3ZlcmZsb3cnLFxuICBvdmVybGluZXBvc2l0aW9uOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gICdvdmVybGluZS1wb3NpdGlvbic6ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgb3ZlcmxpbmV0aGlja25lc3M6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gICdvdmVybGluZS10aGlja25lc3MnOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICBwYWludG9yZGVyOiAncGFpbnRPcmRlcicsXG4gICdwYWludC1vcmRlcic6ICdwYWludE9yZGVyJyxcbiAgcGFub3NlMTogJ3Bhbm9zZTEnLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybmNvbnRlbnR1bml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJudHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJldmVudHM6ICdwb2ludGVyRXZlbnRzJyxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6ICdwb2ludHMnLFxuICBwb2ludHNhdHg6ICdwb2ludHNBdFgnLFxuICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICBwb2ludHNhdHo6ICdwb2ludHNBdFonLFxuICBwcmVmaXg6ICdwcmVmaXgnLFxuICBwcmVzZXJ2ZWFscGhhOiAncHJlc2VydmVBbHBoYScsXG4gIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgcHJpbWl0aXZldW5pdHM6ICdwcmltaXRpdmVVbml0cycsXG4gIHByb3BlcnR5OiAncHJvcGVydHknLFxuICByOiAncicsXG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIHJlZng6ICdyZWZYJyxcbiAgcmVmeTogJ3JlZlknLFxuICByZW5kZXJpbmdpbnRlbnQ6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICAncmVuZGVyaW5nLWludGVudCc6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICByZXBlYXRjb3VudDogJ3JlcGVhdENvdW50JyxcbiAgcmVwZWF0ZHVyOiAncmVwZWF0RHVyJyxcbiAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgcmVxdWlyZWRmZWF0dXJlczogJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcbiAgcmVzdGFydDogJ3Jlc3RhcnQnLFxuICByZXN1bHQ6ICdyZXN1bHQnLFxuICByZXN1bHRzOiAncmVzdWx0cycsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJ4OiAncngnLFxuICByeTogJ3J5JyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlY3VyaXR5OiAnc2VjdXJpdHknLFxuICBzZWVkOiAnc2VlZCcsXG4gIHNoYXBlcmVuZGVyaW5nOiAnc2hhcGVSZW5kZXJpbmcnLFxuICAnc2hhcGUtcmVuZGVyaW5nJzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgc2xvcGU6ICdzbG9wZScsXG4gIHNwYWNpbmc6ICdzcGFjaW5nJyxcbiAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICBzcGVjdWxhcmV4cG9uZW50OiAnc3BlY3VsYXJFeHBvbmVudCcsXG4gIHNwZWVkOiAnc3BlZWQnLFxuICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICBzdGFydG9mZnNldDogJ3N0YXJ0T2Zmc2V0JyxcbiAgc3RkZGV2aWF0aW9uOiAnc3RkRGV2aWF0aW9uJyxcbiAgc3RlbWg6ICdzdGVtaCcsXG4gIHN0ZW12OiAnc3RlbXYnLFxuICBzdGl0Y2h0aWxlczogJ3N0aXRjaFRpbGVzJyxcbiAgc3RvcGNvbG9yOiAnc3RvcENvbG9yJyxcbiAgJ3N0b3AtY29sb3InOiAnc3RvcENvbG9yJyxcbiAgc3RvcG9wYWNpdHk6ICdzdG9wT3BhY2l0eScsXG4gICdzdG9wLW9wYWNpdHknOiAnc3RvcE9wYWNpdHknLFxuICBzdHJpa2V0aHJvdWdocG9zaXRpb246ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyc6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3Ryb2tlOiAnc3Ryb2tlJyxcbiAgc3Ryb2tlZGFzaGFycmF5OiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgc3Ryb2tlZGFzaG9mZnNldDogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gIHN0cm9rZWxpbmVjYXA6ICdzdHJva2VMaW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VsaW5lam9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZW1pdGVybGltaXQ6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogJ3N0cm9rZU1pdGVybGltaXQnLFxuICBzdHJva2V3aWR0aDogJ3N0cm9rZVdpZHRoJyxcbiAgJ3N0cm9rZS13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gIHN0cm9rZW9wYWNpdHk6ICdzdHJva2VPcGFjaXR5JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogJ3N0cm9rZU9wYWNpdHknLFxuICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLFxuICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLFxuICBzdXJmYWNlc2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGV2YWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldHg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICB0ZXh0YW5jaG9yOiAndGV4dEFuY2hvcicsXG4gICd0ZXh0LWFuY2hvcic6ICd0ZXh0QW5jaG9yJyxcbiAgdGV4dGRlY29yYXRpb246ICd0ZXh0RGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dERlY29yYXRpb24nLFxuICB0ZXh0bGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRleHRyZW5kZXJpbmc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgJ3RleHQtcmVuZGVyaW5nJzogJ3RleHRSZW5kZXJpbmcnLFxuICB0bzogJ3RvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNmb3JtJyxcbiAgdHlwZW9mOiAndHlwZW9mJyxcbiAgdTE6ICd1MScsXG4gIHUyOiAndTInLFxuICB1bmRlcmxpbmVwb3NpdGlvbjogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgJ3VuZGVybGluZS1wb3NpdGlvbic6ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gIHVuZGVybGluZXRoaWNrbmVzczogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gICd1bmRlcmxpbmUtdGhpY2tuZXNzJzogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gIHVuaWNvZGU6ICd1bmljb2RlJyxcbiAgdW5pY29kZWJpZGk6ICd1bmljb2RlQmlkaScsXG4gICd1bmljb2RlLWJpZGknOiAndW5pY29kZUJpZGknLFxuICB1bmljb2RlcmFuZ2U6ICd1bmljb2RlUmFuZ2UnLFxuICAndW5pY29kZS1yYW5nZSc6ICd1bmljb2RlUmFuZ2UnLFxuICB1bml0c3BlcmVtOiAndW5pdHNQZXJFbScsXG4gICd1bml0cy1wZXItZW0nOiAndW5pdHNQZXJFbScsXG4gIHVuc2VsZWN0YWJsZTogJ3Vuc2VsZWN0YWJsZScsXG4gIHZhbHBoYWJldGljOiAndkFscGhhYmV0aWMnLFxuICAndi1hbHBoYWJldGljJzogJ3ZBbHBoYWJldGljJyxcbiAgdmFsdWVzOiAndmFsdWVzJyxcbiAgdmVjdG9yZWZmZWN0OiAndmVjdG9yRWZmZWN0JyxcbiAgJ3ZlY3Rvci1lZmZlY3QnOiAndmVjdG9yRWZmZWN0JyxcbiAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICB2ZXJ0YWR2eTogJ3ZlcnRBZHZZJyxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0b3JpZ2lueDogJ3ZlcnRPcmlnaW5YJyxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0b3JpZ2lueTogJ3ZlcnRPcmlnaW5ZJyxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2aGFuZ2luZzogJ3ZIYW5naW5nJyxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZpZGVvZ3JhcGhpYzogJ3ZJZGVvZ3JhcGhpYycsXG4gICd2LWlkZW9ncmFwaGljJzogJ3ZJZGVvZ3JhcGhpYycsXG4gIHZpZXdib3g6ICd2aWV3Qm94JyxcbiAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICB2aXNpYmlsaXR5OiAndmlzaWJpbGl0eScsXG4gIHZtYXRoZW1hdGljYWw6ICd2TWF0aGVtYXRpY2FsJyxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogJ3ZvY2FiJyxcbiAgd2lkdGhzOiAnd2lkdGhzJyxcbiAgd29yZHNwYWNpbmc6ICd3b3JkU3BhY2luZycsXG4gICd3b3JkLXNwYWNpbmcnOiAnd29yZFNwYWNpbmcnLFxuICB3cml0aW5nbW9kZTogJ3dyaXRpbmdNb2RlJyxcbiAgJ3dyaXRpbmctbW9kZSc6ICd3cml0aW5nTW9kZScsXG4gIHgxOiAneDEnLFxuICB4MjogJ3gyJyxcbiAgeDogJ3gnLFxuICB4Y2hhbm5lbHNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhoZWlnaHQ6ICd4SGVpZ2h0JyxcbiAgJ3gtaGVpZ2h0JzogJ3hIZWlnaHQnLFxuICB4bGlua2FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICAneGxpbms6YWN0dWF0ZSc6ICd4bGlua0FjdHVhdGUnLFxuICB4bGlua2FyY3JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua2hyZWY6ICd4bGlua0hyZWYnLFxuICAneGxpbms6aHJlZic6ICd4bGlua0hyZWYnLFxuICB4bGlua3JvbGU6ICd4bGlua1JvbGUnLFxuICAneGxpbms6cm9sZSc6ICd4bGlua1JvbGUnLFxuICB4bGlua3Nob3c6ICd4bGlua1Nob3cnLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua3RpdGxlOiAneGxpbmtUaXRsZScsXG4gICd4bGluazp0aXRsZSc6ICd4bGlua1RpdGxlJyxcbiAgeGxpbmt0eXBlOiAneGxpbmtUeXBlJyxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sYmFzZTogJ3htbEJhc2UnLFxuICAneG1sOmJhc2UnOiAneG1sQmFzZScsXG4gIHhtbGxhbmc6ICd4bWxMYW5nJyxcbiAgJ3htbDpsYW5nJzogJ3htbExhbmcnLFxuICB4bWxuczogJ3htbG5zJyxcbiAgJ3htbDpzcGFjZSc6ICd4bWxTcGFjZScsXG4gIHhtbG5zeGxpbms6ICd4bWxuc1hsaW5rJyxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxzcGFjZTogJ3htbFNwYWNlJyxcbiAgeTE6ICd5MScsXG4gIHkyOiAneTInLFxuICB5OiAneScsXG4gIHljaGFubmVsc2VsZWN0b3I6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogJ3onLFxuICB6b29tYW5kcGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBhcmlhUHJvcGVydGllcyA9IHtcbiAgJ2FyaWEtY3VycmVudCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWRldGFpbHMnOiAwLFxuICAnYXJpYS1kaXNhYmxlZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWhpZGRlbic6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWludmFsaWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAnYXJpYS1sYWJlbCc6IDAsXG4gICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICdhcmlhLWF1dG9jb21wbGV0ZSc6IDAsXG4gICdhcmlhLWNoZWNrZWQnOiAwLFxuICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICdhcmlhLWhhc3BvcHVwJzogMCxcbiAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAnYXJpYS1tb2RhbCc6IDAsXG4gICdhcmlhLW11bHRpbGluZSc6IDAsXG4gICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgJ2FyaWEtcGxhY2Vob2xkZXInOiAwLFxuICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAnYXJpYS1yZXF1aXJlZCc6IDAsXG4gICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgJ2FyaWEtc29ydCc6IDAsXG4gICdhcmlhLXZhbHVlbWF4JzogMCxcbiAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICdhcmlhLXZhbHVldGV4dCc6IDAsXG4gIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXRvbWljJzogMCxcbiAgJ2FyaWEtYnVzeSc6IDAsXG4gICdhcmlhLWxpdmUnOiAwLFxuICAnYXJpYS1yZWxldmFudCc6IDAsXG4gIC8vIERyYWctYW5kLURyb3AgQXR0cmlidXRlc1xuICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gIC8vIFJlbGF0aW9uc2hpcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICdhcmlhLWNvbGluZGV4JzogMCxcbiAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiAwLFxuICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAnYXJpYS1mbG93dG8nOiAwLFxuICAnYXJpYS1sYWJlbGxlZGJ5JzogMCxcbiAgJ2FyaWEtb3ducyc6IDAsXG4gICdhcmlhLXBvc2luc2V0JzogMCxcbiAgJ2FyaWEtcm93Y291bnQnOiAwLFxuICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICdhcmlhLXJvd3NwYW4nOiAwLFxuICAnYXJpYS1zZXRzaXplJzogMFxufTtcblxudmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIHJBUklBQ2FtZWwgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5JDEuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAockFSSUFDYW1lbC50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgYXJpYU5hbWUgPSAnYXJpYS0nICsgbmFtZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKGNvcnJlY3ROYW1lID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gQVJJQSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgcGF0dGVybiBhcmlhLSogYW5kIG11c3QgYmUgbG93ZXJjYXNlLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IGNvcnJlY3ROYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIGNvcnJlY3ROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJBUklBLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcyk7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgJyArICdmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgd2FybmVkUHJvcGVydGllcyQxID0ge307XG4gIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLztcbiAgdmFyIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWCA9IC9eb25bXkEtWl0vO1xuICB2YXIgckFSSUEkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuICB2YXIgckFSSUFDYW1lbCQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG4gIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiAnICsgJ1JlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIGVycm9yKCdEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIHR5cGVvZiB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCBuYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEOyAvLyBLbm93biBhdHRyaWJ1dGVzIHNob3VsZCBtYXRjaCB0aGUgY2FzaW5nIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgY29uZmlnLlxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgZXJyb3IoJ1JlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSAnICsgJ2ludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSAnICsgJ2F0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gJyArICdJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlICcgKyAnaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuJywgbmFtZSwgbG93ZXJDYXNlZE5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICcgKyAnJXMgJyArICdEaWQgeW91IG1lYW4gJXM9eyVzfT8nLCB2YWx1ZSwgbmFtZSwgdmFsdWUgPT09ICdmYWxzZScgPyAnVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuJyA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIHtcbiAgICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAodW5rbm93blByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG59XG5cbnZhciBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSA9IDE7XG52YXIgSVNfTk9OX0RFTEVHQVRFRCA9IDEgPDwgMTtcbnZhciBJU19DQVBUVVJFX1BIQVNFID0gMSA8PCAyO1xudmFyIElTX1JFUExBWUVEID0gMSA8PCA0O1xuLy8gc2V0IHRvIExFR0FDWV9GQl9TVVBQT1JULiBMRUdBQ1lfRkJfU1VQUE9SVCBvbmx5IGdldHMgc2V0IHdoZW5cbi8vIHdlIGNhbGwgd2lsbERlZmVyTGF0ZXJGb3JMZWdhY3lGQlN1cHBvcnQsIHRodXMgbm90IGJhaWxpbmcgb3V0XG4vLyB3aWxsIHJlc3VsdCBpbiBlbmRsZXNzIGN5Y2xlcyBsaWtlIGFuIGluZmluaXRlIGxvb3AuXG4vLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZGVmZXIgZHVyaW5nIGV2ZW50IHJlcGxheWluZy5cblxudmFyIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TID0gSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgfCBJU19OT05fREVMRUdBVEVEIHwgSVNfQ0FQVFVSRV9QSEFTRTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93OyAvLyBOb3JtYWxpemUgU1ZHIDx1c2U+IGVsZW1lbnQgZXZlbnRzICM0OTYzXG5cbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfSAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuXG5cbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbnZhciByZXN0b3JlSW1wbCA9IG51bGw7XG52YXIgcmVzdG9yZVRhcmdldCA9IG51bGw7XG52YXIgcmVzdG9yZVF1ZXVlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gIC8vIFdlIHBlcmZvcm0gdGhpcyB0cmFuc2xhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2VcbiAgLy8gYWx3YXlzIHJlY2VpdmUgdGhlIGNvcnJlY3QgZmliZXIgaGVyZVxuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcblxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAvLyBVbm1vdW50ZWRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoISh0eXBlb2YgcmVzdG9yZUltcGwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBhIHRhcmdldCBmb3IgY29udHJvbGxlZCBldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGVOb2RlID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGU7IC8vIEd1YXJkIGFnYWluc3QgRmliZXIgYmVpbmcgdW5tb3VudGVkLlxuXG4gIGlmIChzdGF0ZU5vZGUpIHtcbiAgICB2YXIgX3Byb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gICAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgX3Byb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYiwgYywgZCkge1xuICByZXR1cm4gZm4oYSwgYiwgYywgZCk7XG59O1xuXG52YXIgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IGJhdGNoZWRVcGRhdGVzSW1wbDtcbnZhciBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xudmFyIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYSwgYik7XG4gIH1cblxuICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbChmbiwgYSwgYik7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZJc0luc2lkZUV2ZW50SGFuZGxlciA9IGlzSW5zaWRlRXZlbnRIYW5kbGVyO1xuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGlzY3JldGVVcGRhdGVzSW1wbChmbiwgYSwgYiwgYywgZCk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXI7XG5cbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQodGltZVN0YW1wKSB7XG4gIHtcbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oX2JhdGNoZWRVcGRhdGVzSW1wbCwgX2Rpc2NyZXRlVXBkYXRlc0ltcGwsIF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwsIF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCkge1xuICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2Rpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghKCFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArIHR5cGVvZiBsaXN0ZW5lciArIFwiYCB0eXBlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kO1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2KG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgYGRvY3VtZW50YCBnbG9iYWwgd2FzIGRlZmluZWQgd2hlbiBSZWFjdCB3YXMgaW5pdGlhbGl6ZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gaW4gYSB0ZXN0IGVudmlyb25tZW50IGlmIGEgY29tcG9uZW50IHNjaGVkdWxlcyBhbiB1cGRhdGUgZnJvbSBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2ssIGJ1dCB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBydW5uaW5nLiBUbyBzb2x2ZSB0aGlzLCB5b3UgY2FuIGVpdGhlciB1bm1vdW50IHRoZSBjb21wb25lbnQgYXQgdGhlIGVuZCBvZiB5b3VyIHRlc3QgKGFuZCBlbnN1cmUgdGhhdCBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgZ2V0IGNhbmNlbGVkIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGApLCBvciB5b3UgY2FuIGNoYW5nZSB0aGUgdGVzdCBpdHNlbGYgdG8gYmUgYXN5bmNocm9ub3VzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgZnVuY3Rpb24gcmVzdG9yZUFmdGVyRGlzcGF0Y2goKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhbiBldmVudCBoYW5kbGVyIGZvciBvdXIgZmFrZSBldmVudC4gV2Ugd2lsbCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgIC8vIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2suXG5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9IC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cblxuICAgICAgdmFyIGVycm9yOyAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cblxuICAgICAgdmFyIGRpZFNldEVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0Vycm9yKGV2ZW50KSB7XG4gICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGRpZFNldEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwgJiYgZXZlbnQuY29sbm8gPT09IDAgJiYgZXZlbnQubGluZW5vID09PSAwKSB7XG4gICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7Ly8gSWdub3JlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0FuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCAnICsgXCJkb2Vzbid0IGtub3cgd2hhdCBpdCB3YXMuIFRoaXMgaXMgbGlrZWx5IGR1ZSB0byBicm93c2VyIFwiICsgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICsgJ2V4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgRGV2VG9vbHMsIHdoaWNoIHJlcXVpcmVzIHNvbWUgJyArIFwiREVWLW1vZGUgb25seSB0cmlja3MuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZSBkb24ndCB3b3JrIGluIFwiICsgJ3lvdXIgYnJvd3Nlci4gVHJ5IHRyaWdnZXJpbmcgdGhlIGVycm9yIGluIHByb2R1Y3Rpb24gbW9kZSwgJyArICdvciBzd2l0Y2hpbmcgdG8gYSBtb2Rlcm4gYnJvd3Nlci4gSWYgeW91IHN1c3BlY3QgdGhhdCB0aGlzIGlzICcgKyAnYWN0dWFsbHkgYW4gaXNzdWUgd2l0aCBSZWFjdCwgcGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDcm9zc09yaWdpbkVycm9yKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJBIGNyb3NzLW9yaWdpbiBlcnJvciB3YXMgdGhyb3duLiBSZWFjdCBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIFwiICsgJ3RoZSBhY3R1YWwgZXJyb3Igb2JqZWN0IGluIGRldmVsb3BtZW50LiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY3Jvc3NvcmlnaW4tZXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcblxuICAgICAgaWYgKCFkaWRDYWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZywgYW5kIG91ciBldmVudCB3YXMgbm90IGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY3MzRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHByb2R1Y3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIHJldHVybiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxID0gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbDtcblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBTYW1lIGFzIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCBzdG9yZXNcbiAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAqIFRPRE86IFNlZSBpZiBjYXVnaHRFcnJvciBhbmQgcmV0aHJvd0Vycm9yIGNhbiBiZSB1bmlmaWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICBpZiAoIWhhc1JldGhyb3dFcnJvcikge1xuICAgICAgaGFzUmV0aHJvd0Vycm9yID0gdHJ1ZTtcbiAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAqL1xuXG5mdW5jdGlvbiByZXRocm93Q2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSByZXRocm93RXJyb3I7XG4gICAgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG4gICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ2F1Z2h0RXJyb3IoKSB7XG4gIHJldHVybiBoYXNFcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscztcbn1cbmZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHMgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGtleS5fcmVhY3RJbnRlcm5hbHMgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9GbGFncyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBQZXJmb3JtZWRXb3JrID1cbi8qICAgICAgICAgICAgICAgICovXG4xOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFBsYWNlbWVudCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDtcbnZhciBQbGFjZW1lbnRBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG42O1xudmFyIERlbGV0aW9uID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjg7XG52YXIgQ29udGVudFJlc2V0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ2FsbGJhY2sgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgRGlkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuNjQ7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTI4O1xudmFyIFNuYXBzaG90ID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBQYXNzaXZlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG41MTI7IC8vIFRPRE8gKGVmZmVjdHMpIFJlbW92ZSB0aGlzIGJpdCBvbmNlIHRoZSBuZXcgcmVjb25jaWxlciBpcyBzeW5jZWQgdG8gdGhlIG9sZC5cblxudmFyIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldiA9XG4vKiAgICAgKi9cbjgxOTI7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMTAyNDtcbnZhciBIeWRyYXRpbmdBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG4xMDI4OyAvLyBQYXNzaXZlICYgVXBkYXRlICYgQ2FsbGJhY2sgJiBSZWYgJiBTbmFwc2hvdFxuXG52YXIgTGlmZWN5Y2xlRWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAqL1xuOTMyOyAvLyBVbmlvbiBvZiBhbGwgaG9zdCBlZmZlY3RzXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAgICAgICovXG4yMDQ3OyAvLyBUaGVzZSBhcmUgbm90IHJlYWxseSBzaWRlIGVmZmVjdHMsIGJ1dCB3ZSBzdGlsbCByZXVzZSB0aGlzIGZpZWxkLlxuXG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMjA0ODtcbnZhciBTaG91bGRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UgPVxuLyogKi9cbjE2Mzg0OyAvLyBTdGF0aWMgdGFncyBkZXNjcmliZSBhc3BlY3RzIG9mIGEgZmliZXIgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLFxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcblxuICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXJGaWJlci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICBpZiAoIWZpYmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmICghKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmICghKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cblxuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLnJldHVybiAhPT0gYi5yZXR1cm4pIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgY2hpbGQgc2V0IG9mIEEucmV0dXJuLCBhbmQgQiBtdXN0IGJlbG9uZyB0byB0aGUgY2hpbGRcbiAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgYiA9IHBhcmVudEI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgLy8gZGVmYXVsdCwgc2xvdyBwYXRoOiBzY2FuIHRoZSBjaGlsZCBzZXRzIG9mIGVhY2ggcGFyZW50IGFsdGVybmF0ZSB0byBzZWVcbiAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgLy9cbiAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQSdzIGNoaWxkIHNldFxuICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhLmFsdGVybmF0ZSA9PT0gYikpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIElmIHRoZSByb290IGlzIG5vdCBhIGhvc3QgY29udGFpbmVyLCB3ZSdyZSBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlLiBJLmUuXG4gIC8vIHVubW91bnRlZC5cblxuXG4gIGlmICghKGEudGFnID09PSBIb3N0Um9vdCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICYmIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZG9lc0ZpYmVyQ29udGFpbihwYXJlbnRGaWJlciwgY2hpbGRGaWJlcikge1xuICB2YXIgbm9kZSA9IGNoaWxkRmliZXI7XG4gIHZhciBwYXJlbnRGaWJlckFsdGVybmF0ZSA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnRGaWJlciB8fCBub2RlID09PSBwYXJlbnRGaWJlckFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5ID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eSA9IGZuO1xufSAvLyBUT0RPOiBVcGdyYWRlIHRoaXMgZGVmaW5pdGlvbiBvbmNlIHdlJ3JlIG9uIGEgbmV3ZXIgdmVyc2lvbiBvZiBGbG93IHRoYXRcbnZhciBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIFRoZSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMgdG8gYmUgcmVwbGF5ZWQuXG5cbnZhciBxdWV1ZWREaXNjcmV0ZUV2ZW50cyA9IFtdOyAvLyBJbmRpY2F0ZXMgaWYgYW55IGNvbnRpbnVvdXMgZXZlbnQgdGFyZ2V0cyBhcmUgbm9uLW51bGwgZm9yIGVhcmx5IGJhaWxvdXQuXG4vLyBpZiB0aGUgbGFzdCB0YXJnZXQgd2FzIGRlaHlkcmF0ZWQuXG5cbnZhciBxdWV1ZWRGb2N1cyA9IG51bGw7XG52YXIgcXVldWVkRHJhZyA9IG51bGw7XG52YXIgcXVldWVkTW91c2UgPSBudWxsOyAvLyBGb3IgcG9pbnRlciBldmVudHMgdGhlcmUgY2FuIGJlIG9uZSBsYXRlc3QgZXZlbnQgcGVyIHBvaW50ZXJJZC5cblxudmFyIHF1ZXVlZFBvaW50ZXJzID0gbmV3IE1hcCgpO1xudmFyIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKTsgLy8gV2UgY291bGQgY29uc2lkZXIgcmVwbGF5aW5nIHNlbGVjdGlvbmNoYW5nZSBhbmQgdG91Y2htb3ZlcyB0b28uXG5cbnZhciBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXTtcbmZ1bmN0aW9uIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkge1xuICByZXR1cm4gcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMDtcbn1cbnZhciBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoc3RhcnQnLCAnYXV4Y2xpY2snLCAnZGJsY2xpY2snLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVydXAnLCAnZHJhZ2VuZCcsICdkcmFnc3RhcnQnLCAnZHJvcCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnaW5wdXQnLCAndGV4dElucHV0JywgLy8gSW50ZW50aW9uYWxseSBjYW1lbENhc2Vcbidjb3B5JywgJ2N1dCcsICdwYXN0ZScsICdjbGljaycsICdjaGFuZ2UnLCAnY29udGV4dG1lbnUnLCAncmVzZXQnLCAnc3VibWl0J107XG5mdW5jdGlvbiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzIHwgSVNfUkVQTEFZRUQsXG4gICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5wdXNoKHF1ZXVlZEV2ZW50KTtcbn0gLy8gUmVzZXRzIHRoZSByZXBsYXlpbmcgZm9yIHRoaXMgdHlwZSBvZiBjb250aW51b3VzIGV2ZW50IHRvIG5vIGV2ZW50LlxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9maWJlcjIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGFyZ2V0LlxuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocXVldWVkVGFyZ2V0LmxhbmVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTsgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mXG4gICAgICAgICAgLy8gYSByb290IG90aGVyIHRoYW4gc3luYy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC5kb21FdmVudE5hbWUsIHF1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgIHZhciBfZmliZXIzID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0QmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjMgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMyk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gIGlmIChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSkge1xuICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gRmlyc3QgcmVwbGF5IGRpc2NyZXRlIGV2ZW50cy5cblxuICB3aGlsZSAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RGlzY3JldGVFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdO1xuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIGJvdW5kYXJ5IHRvIHVuYmxvY2tcbiAgICAgIC8vIHRoZSBuZXh0IGRpc2NyZXRlIGV2ZW50LlxuICAgICAgdmFyIF9maWJlcjQgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oX2ZpYmVyNCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gbmV4dERpc2NyZXRlRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICAgIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KG5leHREaXNjcmV0ZUV2ZW50LmRvbUV2ZW50TmFtZSwgbmV4dERpc2NyZXRlRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuZXh0RGlzY3JldGVFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgICAgbmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlcGxheWVkIHRoZSBmaXJzdCBldmVudC4gTGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAgIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnNoaWZ0KCk7XG4gICAgfVxuICB9IC8vIE5leHQgcmVwbGF5IGFueSBjb250aW51b3VzIGV2ZW50cy5cblxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSkge1xuICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykpIHtcbiAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZE1vdXNlKSkge1xuICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgfVxuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcblxuICAgIGlmICghaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCkge1xuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IHRydWU7IC8vIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYXR0ZW1wdCByZXBsYXlpbmcgYXMgbWFueSBldmVudHMgYXMgYXJlXG4gICAgICAvLyBub3cgdW5ibG9ja2VkLiBUaGlzIGZpcnN0IG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmJsb2NrZWQgeWV0LlxuICAgICAgLy8gV2UgY291bGQgY2hlY2sgaXQgZWFybHkgdG8gYXZvaWQgc2NoZWR1bGluZyBhbiB1bm5lY2Vzc2FyeSBjYWxsYmFjay5cblxuICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCByZXBsYXlVbmJsb2NrZWRFdmVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAvLyBNYXJrIGFueXRoaW5nIHRoYXQgd2FzIGJsb2NrZWQgb24gdGhpcyBhcyBubyBsb25nZXIgYmxvY2tlZFxuICAvLyBhbmQgZWxpZ2libGUgZm9yIGEgcmVwbGF5LlxuICBpZiAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXSwgdW5ibG9ja2VkKTsgLy8gVGhpcyBpcyBhIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgZWFjaCBib3VuZGFyeSB0aGF0IGNvbW1pdHMuIEkgdGhpbmsgaXQnc1xuICAgIC8vIHdvcnRoIGl0IGJlY2F1c2Ugd2UgZXhwZWN0IHZlcnkgZmV3IGRpc2NyZXRlIGV2ZW50cyB0byBxdWV1ZSB1cCBhbmQgb25jZVxuICAgIC8vIHdlIGFyZSBhY3R1YWxseSBmdWxseSB1bmJsb2NrZWQgaXQgd2lsbCBiZSBmYXN0IHRvIHJlcGxheSB0aGVtLlxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXVlZEV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbaV07XG5cbiAgICAgIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERyYWcsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkTW91c2UsIHVuYmxvY2tlZCk7XG4gIH1cblxuICB2YXIgdW5ibG9jayA9IGZ1bmN0aW9uIChxdWV1ZWRFdmVudCkge1xuICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCk7XG4gIH07XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2godW5ibG9jayk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW19pXTtcblxuICAgIGlmIChxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RXhwbGljaXRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF07XG5cbiAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQobmV4dEV4cGxpY2l0VGFyZ2V0KTtcblxuICAgICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgdW5ibG9ja2VkLlxuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnQgPSAwO1xudmFyIFVzZXJCbG9ja2luZ0V2ZW50ID0gMTtcbnZhciBDb250aW51b3VzRXZlbnQgPSAyO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxudmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJyk7XG52YXIgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKTtcbnZhciBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKTtcbnZhciBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKTtcbnZhciBldmVudFByaW9yaXRpZXMgPSBuZXcgTWFwKCk7IC8vIFdlIHN0b3JlIG1vc3Qgb2YgdGhlIGV2ZW50cyBpbiB0aGlzIG1vZHVsZSBpbiBwYWlycyBvZiB0d28gc3RyaW5ncyBzbyB3ZSBjYW4gcmUtdXNlXG4vLyB0aGUgY29kZSByZXF1aXJlZCB0byBhcHBseSB0aGUgc2FtZSBsb2dpYyBmb3IgZXZlbnQgcHJpb3JpdGl6YXRpb24gYW5kIHRoYXQgb2YgdGhlXG4vLyBTaW1wbGVFdmVudFBsdWdpbi4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCB0aGUgYWltIGlzIHRvIHJlZHVjZSBjb2RlXG4vLyBkdXBsaWNhdGlvbiAoZm9yIHdoaWNoIHRoZXJlIHdvdWxkIGJlIHF1aXRlIGEgYml0KS4gRm9yIHRoZSBldmVudHMgdGhhdCBhcmUgbm90IG5lZWRlZFxuLy8gZm9yIHRoZSBTaW1wbGVFdmVudFBsdWdpbiAob3RoZXJEaXNjcmV0ZUV2ZW50cykgd2UgcHJvY2VzcyB0aGVtIHNlcGFyYXRlbHkgYXMgYW5cbi8vIGFycmF5IG9mIHRvcCBsZXZlbCBldmVudHMuXG4vLyBMYXN0bHksIHdlIGlnbm9yZSBwcmV0dGllciBzbyB3ZSBjYW4ga2VlcCB0aGUgZm9ybWF0dGluZyBzYW5lLlxuLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnY2FuY2VsJywgJ2NhbmNlbCcsICdjbGljaycsICdjbGljaycsICdjbG9zZScsICdjbG9zZScsICdjb250ZXh0bWVudScsICdjb250ZXh0TWVudScsICdjb3B5JywgJ2NvcHknLCAnY3V0JywgJ2N1dCcsICdhdXhjbGljaycsICdhdXhDbGljaycsICdkYmxjbGljaycsICdkb3VibGVDbGljaycsIC8vIENhcmVmdWwhXG4nZHJhZ2VuZCcsICdkcmFnRW5kJywgJ2RyYWdzdGFydCcsICdkcmFnU3RhcnQnLCAnZHJvcCcsICdkcm9wJywgJ2ZvY3VzaW4nLCAnZm9jdXMnLCAvLyBDYXJlZnVsIVxuJ2ZvY3Vzb3V0JywgJ2JsdXInLCAvLyBDYXJlZnVsIVxuJ2lucHV0JywgJ2lucHV0JywgJ2ludmFsaWQnLCAnaW52YWxpZCcsICdrZXlkb3duJywgJ2tleURvd24nLCAna2V5cHJlc3MnLCAna2V5UHJlc3MnLCAna2V5dXAnLCAna2V5VXAnLCAnbW91c2Vkb3duJywgJ21vdXNlRG93bicsICdtb3VzZXVwJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGFzdGUnLCAncGF1c2UnLCAncGF1c2UnLCAncGxheScsICdwbGF5JywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlckNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVyRG93bicsICdwb2ludGVydXAnLCAncG9pbnRlclVwJywgJ3JhdGVjaGFuZ2UnLCAncmF0ZUNoYW5nZScsICdyZXNldCcsICdyZXNldCcsICdzZWVrZWQnLCAnc2Vla2VkJywgJ3N1Ym1pdCcsICdzdWJtaXQnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hFbmQnLCAndG91Y2hzdGFydCcsICd0b3VjaFN0YXJ0JywgJ3ZvbHVtZWNoYW5nZScsICd2b2x1bWVDaGFuZ2UnXTtcbnZhciBvdGhlckRpc2NyZXRlRXZlbnRzID0gWydjaGFuZ2UnLCAnc2VsZWN0aW9uY2hhbmdlJywgJ3RleHRJbnB1dCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9udXBkYXRlJ107XG5cblxudmFyIHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2RyYWcnLCAnZHJhZycsICdkcmFnZW50ZXInLCAnZHJhZ0VudGVyJywgJ2RyYWdleGl0JywgJ2RyYWdFeGl0JywgJ2RyYWdsZWF2ZScsICdkcmFnTGVhdmUnLCAnZHJhZ292ZXInLCAnZHJhZ092ZXInLCAnbW91c2Vtb3ZlJywgJ21vdXNlTW92ZScsICdtb3VzZW91dCcsICdtb3VzZU91dCcsICdtb3VzZW92ZXInLCAnbW91c2VPdmVyJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJNb3ZlJywgJ3BvaW50ZXJvdXQnLCAncG9pbnRlck91dCcsICdwb2ludGVyb3ZlcicsICdwb2ludGVyT3ZlcicsICdzY3JvbGwnLCAnc2Nyb2xsJywgJ3RvZ2dsZScsICd0b2dnbGUnLCAndG91Y2htb3ZlJywgJ3RvdWNoTW92ZScsICd3aGVlbCcsICd3aGVlbCddOyAvLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydhYm9ydCcsICdhYm9ydCcsIEFOSU1BVElPTl9FTkQsICdhbmltYXRpb25FbmQnLCBBTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgQU5JTUFUSU9OX1NUQVJULCAnYW5pbWF0aW9uU3RhcnQnLCAnY2FucGxheScsICdjYW5QbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2NhblBsYXlUaHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2Vycm9yJywgJ2dvdHBvaW50ZXJjYXB0dXJlJywgJ2dvdFBvaW50ZXJDYXB0dXJlJywgJ2xvYWQnLCAnbG9hZCcsICdsb2FkZWRkYXRhJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ2xvYWRTdGFydCcsICdsb3N0cG9pbnRlcmNhcHR1cmUnLCAnbG9zdFBvaW50ZXJDYXB0dXJlJywgJ3BsYXlpbmcnLCAncGxheWluZycsICdwcm9ncmVzcycsICdwcm9ncmVzcycsICdzZWVraW5nJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3RpbWVVcGRhdGUnLCBUUkFOU0lUSU9OX0VORCwgJ3RyYW5zaXRpb25FbmQnLCAnd2FpdGluZycsICd3YWl0aW5nJ107XG4vKipcbiAqIFR1cm5zXG4gKiBbJ2Fib3J0JywgLi4uXVxuICpcbiAqIGludG9cbiAqXG4gKiB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoW1xuICogICBbJ2Fib3J0JywgJ29uQWJvcnQnXSxcbiAqIF0pO1xuICpcbiAqIGFuZCByZWdpc3RlcnMgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICAvLyBBcyB0aGUgZXZlbnQgdHlwZXMgYXJlIGluIHBhaXJzIG9mIHR3bywgd2UgbmVlZCB0byBpdGVyYXRlXG4gIC8vIHRocm91Z2ggaW4gdHdvcy4gVGhlIGV2ZW50cyBhcmUgaW4gcGFpcnMgb2YgdHdvIHRvIHNhdmUgY29kZVxuICAvLyBhbmQgaW1wcm92ZSBpbml0IHBlcmYgb2YgcHJvY2Vzc2luZyB0aGlzIGFycmF5LCBhcyBpdCB3aWxsXG4gIC8vIHJlc3VsdCBpbiBmYXIgZmV3ZXIgb2JqZWN0IGFsbG9jYXRpb25zIGFuZCBwcm9wZXJ0eSBhY2Nlc3Nlc1xuICAvLyBpZiB3ZSBvbmx5IHVzZSB0aHJlZSBhcnJheXMgdG8gcHJvY2VzcyBhbGwgdGhlIGNhdGVnb3JpZXMgb2ZcbiAgLy8gaW5zdGVhZCBvZiB0dXBsZXMuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciB0b3BFdmVudCA9IGV2ZW50VHlwZXNbaV07XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRUeXBlc1tpICsgMV07XG4gICAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gICAgdmFyIHJlYWN0TmFtZSA9ICdvbicgKyBjYXBpdGFsaXplZEV2ZW50O1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQodG9wRXZlbnQsIHByaW9yaXR5KTtcbiAgICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQodG9wRXZlbnQsIHJlYWN0TmFtZSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlYWN0TmFtZSwgW3RvcEV2ZW50XSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RXZlbnRQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQoZXZlbnRUeXBlc1tpXSwgcHJpb3JpdHkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKSB7XG4gIHZhciBwcmlvcml0eSA9IGV2ZW50UHJpb3JpdGllcy5nZXQoZG9tRXZlbnROYW1lKTsgLy8gRGVmYXVsdCB0byBhIENvbnRpbnVvdXNFdmVudC4gTm90ZTogd2UgbWlnaHRcbiAgLy8gd2FudCB0byB3YXJuIGlmIHdlIGNhbid0IGRldGVjdCB0aGUgcHJpb3JpdHlcbiAgLy8gZm9yIHRoZSBldmVudC5cblxuICByZXR1cm4gcHJpb3JpdHkgPT09IHVuZGVmaW5lZCA/IENvbnRpbnVvdXNFdmVudCA6IHByaW9yaXR5O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudHMoKSB7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBEaXNjcmV0ZUV2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXModXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgVXNlckJsb2NraW5nRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgQ29udGludW91c0V2ZW50KTtcbiAgc2V0RXZlbnRQcmlvcml0aWVzKG90aGVyRGlzY3JldGVFdmVudHMsIERpc2NyZXRlRXZlbnQpO1xufVxuXG52YXIgU2NoZWR1bGVyX25vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSA5NztcbnZhciBMb3dQcmlvcml0eSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5ID0gOTA7XG52YXIgaW5pdGlhbFRpbWVNcyA9IFNjaGVkdWxlcl9ub3coKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cblxudmFyIFN5bmNMYW5lUHJpb3JpdHkgPSAxNTtcbnZhciBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSA9IDE0O1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMztcbnZhciBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5ID0gMTI7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTE7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5ID0gMTA7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDk7XG52YXIgRGVmYXVsdExhbmVQcmlvcml0eSA9IDg7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5ID0gNztcbnZhciBUcmFuc2l0aW9uUHJpb3JpdHkgPSA2O1xudmFyIFJldHJ5TGFuZVByaW9yaXR5ID0gNTtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA0O1xudmFyIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAzO1xudmFyIElkbGVMYW5lUHJpb3JpdHkgPSAyO1xudmFyIE9mZnNjcmVlbkxhbmVQcmlvcml0eSA9IDE7XG52YXIgTm9MYW5lUHJpb3JpdHkgPSAwO1xudmFyIFRvdGFsTGFuZXMgPSAzMTtcbnZhciBOb0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgTm9MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBTeW5jTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xO1xudmFyIFN5bmNCYXRjaGVkTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAqL1xuNDtcbnZhciBJbnB1dERpc2NyZXRlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yNDtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAqL1xuMzI7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMTkyO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBEZWZhdWx0TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjM1ODQ7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgVHJhbnNpdGlvbkxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDE4NjExMjtcbnZhciBSZXRyeUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG42MjkxNDU2MDtcbnZhciBTb21lUmV0cnlMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgKi9cbjY3MTA4ODY0O1xudmFyIE5vbklkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjc7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI4O1xudmFyIElkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjgwNTMwNjM2ODtcbnZhciBPZmZzY3JlZW5MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMDczNzQxODI0O1xudmFyIE5vVGltZXN0YW1wID0gLTE7XG5mdW5jdGlvbiBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KG5ld0xhbmVQcmlvcml0eSkge1xufSAvLyBcIlJlZ2lzdGVyc1wiIHVzZWQgdG8gXCJyZXR1cm5cIiBtdWx0aXBsZSB2YWx1ZXNcbi8vIFVzZWQgYnkgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMgYW5kIGdldE5leHRMYW5lczpcblxudmFyIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgaWYgKChTeW5jTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH1cblxuICBpZiAoKFN5bmNCYXRjaGVkTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcbiAgfVxuXG4gIGlmICgoSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0RGlzY3JldGVMYW5lcyA9IElucHV0RGlzY3JldGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dERpc2NyZXRlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0RGlzY3JldGVMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0Q29udGludW91c0xhbmVzID0gSW5wdXRDb250aW51b3VzTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXRDb250aW51b3VzTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXRDb250aW51b3VzTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgRGVmYXVsdEh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBkZWZhdWx0TGFuZXMgPSBEZWZhdWx0TGFuZXMgJiBsYW5lcztcblxuICBpZiAoZGVmYXVsdExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBkZWZhdWx0TGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25MYW5lcyA9IFRyYW5zaXRpb25MYW5lcyAmIGxhbmVzO1xuXG4gIGlmICh0cmFuc2l0aW9uTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbkxhbmVzO1xuICB9XG5cbiAgdmFyIHJldHJ5TGFuZXMgPSBSZXRyeUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFJldHJ5TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiByZXRyeUxhbmVzO1xuICB9XG5cbiAgaWYgKGxhbmVzICYgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSkge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElkbGVIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaWRsZUxhbmVzID0gSWRsZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlkbGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaWRsZUxhbmVzO1xuICB9XG5cbiAgaWYgKChPZmZzY3JlZW5MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICB7XG4gICAgZXJyb3IoJ1Nob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cblxuICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gIHJldHVybiBsYW5lcztcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgLy8gVE9ETzogSGFuZGxlIExvd1NjaGVkdWxlclByaW9yaXR5LCBzb21laG93LiBNYXliZSB0aGUgc2FtZSBsYW5lIGFzIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZUxhbmVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gTm9MYW5lUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobGFuZVByaW9yaXR5KSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIE9mZnNjcmVlbkxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cbmZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgbmV4dExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB2YXIgZXhwaXJlZExhbmVzID0gcm9vdC5leHBpcmVkTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7IC8vIENoZWNrIGlmIGFueSB3b3JrIGhhcyBleHBpcmVkLlxuXG4gIGlmIChleHBpcmVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICBuZXh0TGFuZXMgPSBleHBpcmVkTGFuZXM7XG4gICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gICAgLy8gZXZlbiBpZiB0aGUgd29yayBpcyBzdXNwZW5kZWQuXG4gICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBOb25JZGxlTGFuZXM7XG5cbiAgICBpZiAobm9uSWRsZVBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmIChub25JZGxlVW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIHdvcmsgaXMgSWRsZS5cbiAgICAgIHZhciB1bmJsb2NrZWRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH0gLy8gSWYgdGhlcmUgYXJlIGhpZ2hlciBwcmlvcml0eSBsYW5lcywgd2UnbGwgaW5jbHVkZSB0aGVtIGV2ZW4gaWYgdGhleVxuICAvLyBhcmUgc3VzcGVuZGVkLlxuXG5cbiAgbmV4dExhbmVzID0gcGVuZGluZ0xhbmVzICYgZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobmV4dExhbmVzKTsgLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gIC8vIGhpZ2hlciBwcmlvcml0eS5cblxuICBpZiAod2lwTGFuZXMgIT09IE5vTGFuZXMgJiYgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJiAvLyBJZiB3ZSBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHRoZW4gaW50ZXJydXB0aW5nIGlzIGZpbmUuIERvbid0XG4gIC8vIGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSByb290IGlzIGNvbXBsZXRlLlxuICAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3aXBMYW5lcyk7XG4gICAgdmFyIHdpcExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gICAgaWYgKG5leHRMYW5lUHJpb3JpdHkgPD0gd2lwTGFuZVByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gbmV4dExhbmVQcmlvcml0eTtcbiAgICB9XG4gIH0gLy8gQ2hlY2sgZm9yIGVudGFuZ2xlZCBsYW5lcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhdGNoLlxuICAvL1xuICAvLyBBIGxhbmUgaXMgc2FpZCB0byBiZSBlbnRhbmdsZWQgd2l0aCBhbm90aGVyIHdoZW4gaXQncyBub3QgYWxsb3dlZCB0byByZW5kZXJcbiAgLy8gaW4gYSBiYXRjaCB0aGF0IGRvZXMgbm90IGFsc28gaW5jbHVkZSB0aGUgb3RoZXIgbGFuZS4gVHlwaWNhbGx5IHdlIGRvIHRoaXNcbiAgLy8gd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhdmUgdGhlIHNhbWUgc291cmNlLCBhbmQgd2Ugb25seSB3YW50IHRvIHJlc3BvbmQgdG9cbiAgLy8gdGhlIG1vc3QgcmVjZW50IGV2ZW50IGZyb20gdGhhdCBzb3VyY2UuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBlbnRhbmdsZW1lbnRzICphZnRlciogY2hlY2tpbmcgZm9yIHBhcnRpYWwgd29yayBhYm92ZS5cbiAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIGEgbGFuZSBpcyBlbnRhbmdsZWQgZHVyaW5nIGFuIGludGVybGVhdmVkIGV2ZW50IHdoaWxlXG4gIC8vIGl0J3MgYWxyZWFkeSByZW5kZXJpbmcsIHdlIHdvbid0IGludGVycnVwdCBpdC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc2luY2VcbiAgLy8gZW50YW5nbGVtZW50IGlzIHVzdWFsbHkgXCJiZXN0IGVmZm9ydFwiOiB3ZSdsbCB0cnkgb3VyIGJlc3QgdG8gcmVuZGVyIHRoZVxuICAvLyBsYW5lcyBpbiB0aGUgc2FtZSBiYXRjaCwgYnV0IGl0J3Mgbm90IHdvcnRoIHRocm93aW5nIG91dCBwYXJ0aWFsbHlcbiAgLy8gY29tcGxldGVkIHdvcmsgaW4gb3JkZXIgdG8gZG8gaXQuXG4gIC8vXG4gIC8vIEZvciB0aG9zZSBleGNlcHRpb25zIHdoZXJlIGVudGFuZ2xlbWVudCBpcyBzZW1hbnRpY2FsbHkgaW1wb3J0YW50LCBsaWtlXG4gIC8vIHVzZU11dGFibGVTb3VyY2UsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuXG4gIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgaWYgKGVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gICAgdmFyIGxhbmVzID0gbmV4dExhbmVzICYgZW50YW5nbGVkTGFuZXM7XG5cbiAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgIG5leHRMYW5lcyB8PSBlbnRhbmdsZW1lbnRzW2luZGV4XTtcbiAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV2ZW50VGltZSA9IGV2ZW50VGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV2ZW50VGltZSA+IG1vc3RSZWNlbnRFdmVudFRpbWUpIHtcbiAgICAgIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBldmVudFRpbWU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cblxuICByZXR1cm4gbW9zdFJlY2VudEV2ZW50VGltZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IEV4cGlyYXRpb24gaGV1cmlzdGljIGlzIGNvbnN0YW50IHBlciBsYW5lLCBzbyBjb3VsZCB1c2UgYSBtYXAuXG4gIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmUpO1xuICB2YXIgcHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICBpZiAocHJpb3JpdHkgPj0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gVXNlciBpbnRlcmFjdGlvbnMgc2hvdWxkIGV4cGlyZSBzbGlnaHRseSBtb3JlIHF1aWNrbHkuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGlzIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyBjb25zdGFudCBhcyBpbiBTY2hlZHVsZXIuanMuIFdoZW5cbiAgICAvLyB3ZSBtYWRlIGl0IGxhcmdlciwgYSBwcm9kdWN0IG1ldHJpYyBpbiB3d3cgcmVncmVzc2VkLCBzdWdnZXN0aW5nIHRoZXJlJ3NcbiAgICAvLyBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCdzIGJlaW5nIHN0YXJ2ZWQgYnkgYSBzZXJpZXMgb2Ygc3luY2hyb25vdXNcbiAgICAvLyB1cGRhdGVzLiBJZiB0aGF0IHRoZW9yeSBpcyBjb3JyZWN0LCB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGVcbiAgICAvLyBzdGFydmF0aW9uLiBIb3dldmVyLCB0aGlzIHNjZW5hcmlvIHN1cHBvcnRzIHRoZSBpZGVhIHRoYXQgZXhwaXJhdGlvblxuICAgIC8vIHRpbWVzIGFyZSBhbiBpbXBvcnRhbnQgc2FmZWd1YXJkIHdoZW4gc3RhcnZhdGlvbiBkb2VzIGhhcHBlbi5cbiAgICAvL1xuICAgIC8vIEFsc28gbm90ZSB0aGF0LCBpbiB0aGUgY2FzZSBvZiB1c2VyIGlucHV0IHNwZWNpZmljYWxseSwgdGhpcyB3aWxsIHNvb24gbm9cbiAgICAvLyBsb25nZXIgYmUgYW4gaXNzdWUgYmVjYXVzZSB3ZSBwbGFuIHRvIG1ha2UgdXNlciBpbnB1dCBzeW5jaHJvbm91cyBieVxuICAgIC8vIGRlZmF1bHQgKHVudGlsIHlvdSBlbnRlciBgc3RhcnRUcmFuc2l0aW9uYCwgb2YgY291cnNlLilcbiAgICAvL1xuICAgIC8vIElmIHdlcmVuJ3QgcGxhbm5pbmcgdG8gbWFrZSB0aGVzZSB1cGRhdGVzIHN5bmNocm9ub3VzIHNvb24gYW55d2F5LCBJXG4gICAgLy8gd291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG51bWJlciBhIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICB9IGVsc2UgaWYgKHByaW9yaXR5ID49IFRyYW5zaXRpb25Qcmlvcml0eSkge1xuICAgIHJldHVybiBjdXJyZW50VGltZSArIDUwMDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgIHJldHVybiBOb1RpbWVzdGFtcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB3ZSB5aWVsZC4gV2UgY2FuIG9wdGltaXplIGJ5IHN0b3JpbmdcbiAgLy8gdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZSBvbiB0aGUgcm9vdC4gVGhlbiB1c2UgdGhhdCB0byBxdWlja2x5IGJhaWwgb3V0XG4gIC8vIG9mIHRoaXMgZnVuY3Rpb24uXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBlbmRpbmcgbGFuZXMgYW5kIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlaXJcbiAgLy8gZXhwaXJhdGlvbiB0aW1lLiBJZiBzbywgd2UnbGwgYXNzdW1lIHRoZSB1cGRhdGUgaXMgYmVpbmcgc3RhcnZlZCBhbmQgbWFya1xuICAvLyBpdCBhcyBleHBpcmVkIHRvIGZvcmNlIGl0IHRvIGZpbmlzaC5cblxuICB2YXIgbGFuZXMgPSBwZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBOb1RpbWVzdGFtcCkge1xuICAgICAgLy8gRm91bmQgYSBwZW5kaW5nIGxhbmUgd2l0aCBubyBleHBpcmF0aW9uIHRpbWUuIElmIGl0J3Mgbm90IHN1c3BlbmRlZCwgb3JcbiAgICAgIC8vIGlmIGl0J3MgcGluZ2VkLCBhc3N1bWUgaXQncyBDUFUtYm91bmQuIENvbXB1dGUgYSBuZXcgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAvLyB1c2luZyB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgaWYgKChsYW5lICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzIHx8IChsYW5lICYgcGluZ2VkTGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIEFzc3VtZXMgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaGlzIGxhbmUgZXhwaXJlZFxuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufSAvLyBUaGlzIHJldHVybnMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBsYW5lcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleVxuZnVuY3Rpb24gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCkge1xuICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gZXZlcnl0aGluZ0J1dE9mZnNjcmVlbjtcbiAgfVxuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAgcmV0dXJuIE5vTGFuZXM7XG59XG5mdW5jdGlvbiByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpIHtcbiAgcmV0dXJuIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gaW5jbHVkZXNOb25JZGxlV29yayhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgTm9uSWRsZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFJldHJ5TGFuZXMpID09PSBsYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBsYW5lcztcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgYSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFVwZGF0ZUxhbmUobGFuZVByaW9yaXR5LCB3aXBMYW5lcykge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZTtcblxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dERpc2NyZXRlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmU7XG4gICAgICB9XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMiA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0Q29udGludW91c0xhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUyID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShEZWZhdWx0TGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUyO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBJZiBhbGwgdGhlIGRlZmF1bHQgbGFuZXMgYXJlIGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLCBsb29rIGZvciBhXG4gICAgICAgICAgLy8gbGFuZSBpbiB0aGUgdHJhbnNpdGlvbiByYW5nZS5cbiAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgICAvLyBBbGwgdGhlIHRyYW5zaXRpb24gbGFuZXMgYXJlIHRha2VuLCB0b28uIFRoaXMgc2hvdWxkIGJlIHZlcnlcbiAgICAgICAgICAgIC8vIHJhcmUsIGJ1dCBhcyBhIGxhc3QgcmVzb3J0LCBwaWNrIGEgZGVmYXVsdCBsYW5lLiBUaGlzIHdpbGwgaGF2ZVxuICAgICAgICAgICAgLy8gdGhlIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTM7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTogLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFRyYW5zaXRpb25MYW5lIGluc3RlYWRcblxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kUmV0cnlMYW5lIGluc3RlYWRcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgIH1cbiAgfVxufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFRyYW5zaXRpb25MYW5lKHdpcExhbmVzLCBwZW5kaW5nTGFuZXMpIHtcbiAgLy8gRmlyc3QgbG9vayBmb3IgbGFuZXMgdGhhdCBhcmUgY29tcGxldGVseSB1bmNsYWltZWQsIGkuZS4gaGF2ZSBub1xuICAvLyBwZW5kaW5nIHdvcmsuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfnBlbmRpbmdMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIC8vIElmIGFsbCBsYW5lcyBoYXZlIHBlbmRpbmcgd29yaywgbG9vayBmb3IgYSBsYW5lIHRoYXQgaXNuJ3QgY3VycmVudGx5XG4gICAgLy8gYmVpbmcgd29ya2VkIG9uLlxuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBiZWluZyB3b3JrZWQgb24sIHBpY2sgYW55IGxhbmUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kUmV0cnlMYW5lKHdpcExhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGBmaW5kVXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiDigJQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzICYgfndpcExhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xufVxuXG5mdW5jdGlvbiBnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyBmaW5kcyB0aGUgbW9zdCBzaWduaWZpY2FudCBub24temVybyBiaXQuXG4gIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpO1xuICByZXR1cm4gaW5kZXggPCAwID8gTm9MYW5lcyA6IDEgPDwgaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAoZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSA8PCAxKSAtIDE7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBnZXRzIGlubGluZWQuIE9ubHkgZXhpc3RzIHNvIHRvIGNvbW11bmljYXRlIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgLy8gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoZSBmZXdlc3Qgb3BlcmF0aW9ucy5cbiAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKSB7XG4gIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbGFuZVRvSW5kZXgobGFuZSkge1xuICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNTb21lTGFuZShhLCBiKSB7XG4gIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaXNTdWJzZXRPZkxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhIHwgYjtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiBzZXQgJiB+c3Vic2V0O1xufSAvLyBTZWVtcyByZWR1bmRhbnQsIGJ1dCBpdCBjaGFuZ2VzIHRoZSB0eXBlIGZyb20gYSBzaW5nbGUgbGFuZSAodXNlZCBmb3Jcbi8vIHVwZGF0ZXMpIHRvIGEgZ3JvdXAgb2YgbGFuZXMgKHVzZWQgZm9yIGZsdXNoaW5nIHdvcmspLlxuXG5mdW5jdGlvbiBsYW5lVG9MYW5lcyhsYW5lKSB7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gaGlnaGVyUHJpb3JpdHlMYW5lKGEsIGIpIHtcbiAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBiaXQgcmFuZ2VzIGRlY3JlYXNlIGluIHByaW9yaXR5IGFzIHlvdSBnbyBsZWZ0LlxuICByZXR1cm4gYSAhPT0gTm9MYW5lICYmIGEgPCBiID8gYSA6IGI7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgLy8gSW50ZW50aW9uYWxseSBwdXNoaW5nIG9uZSBieSBvbmUuXG4gIC8vIGh0dHBzOi8vdjguZGV2L2Jsb2cvZWxlbWVudHMta2luZHMjYXZvaWQtY3JlYXRpbmctaG9sZXNcbiAgdmFyIGxhbmVNYXAgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFRvdGFsTGFuZXM7IGkrKykge1xuICAgIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lTWFwO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHVwZGF0ZUxhbmUsIGV2ZW50VGltZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lOyAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5LCBhbnkgdXBkYXRlIHRvIGFueSBsYW5lIGNhbiB1bmJsb2NrIGFueSBvdGhlciBsYW5lLiBCdXRcbiAgLy8gaXQncyBub3QgcHJhY3RpY2FsIHRvIHRyeSBldmVyeSBzaW5nbGUgcG9zc2libGUgY29tYmluYXRpb24uIFdlIG5lZWQgYVxuICAvLyBoZXVyaXN0aWMgdG8gZGVjaWRlIHdoaWNoIGxhbmVzIHRvIGF0dGVtcHQgdG8gcmVuZGVyLCBhbmQgaW4gd2hpY2ggYmF0Y2hlcy5cbiAgLy8gRm9yIG5vdywgd2UgdXNlIHRoZSBzYW1lIGhldXJpc3RpYyBhcyBpbiB0aGUgb2xkIEV4cGlyYXRpb25UaW1lcyBtb2RlbDpcbiAgLy8gcmV0cnkgYW55IGxhbmUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHksIGJ1dCBkb24ndCB0cnkgdXBkYXRlcyBhdCBoaWdoZXJcbiAgLy8gcHJpb3JpdHkgd2l0aG91dCBhbHNvIGluY2x1ZGluZyB0aGUgbG93ZXIgcHJpb3JpdHkgdXBkYXRlcy4gVGhpcyB3b3JrcyB3ZWxsXG4gIC8vIHdoZW4gY29uc2lkZXJpbmcgdXBkYXRlcyBhY3Jvc3MgZGlmZmVyZW50IHByaW9yaXR5IGxldmVscywgYnV0IGlzbid0XG4gIC8vIHN1ZmZpY2llbnQgZm9yIHVwZGF0ZXMgd2l0aGluIHRoZSBzYW1lIHByaW9yaXR5LCBzaW5jZSB3ZSB3YW50IHRvIHRyZWF0XG4gIC8vIHRob3NlIHVwZGF0ZXMgYXMgcGFyYWxsZWwuXG4gIC8vIFVuc3VzcGVuZCBhbnkgdXBkYXRlIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LlxuXG4gIHZhciBoaWdoZXJQcmlvcml0eUxhbmVzID0gdXBkYXRlTGFuZSAtIDE7IC8vIFR1cm5zIDBiMTAwMCBpbnRvIDBiMDExMVxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgodXBkYXRlTGFuZSk7IC8vIFdlIGNhbiBhbHdheXMgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRpbWVzdGFtcCBiZWNhdXNlIHdlIHByZWZlciB0aGUgbW9zdFxuICAvLyByZWNlbnQgZXZlbnQsIGFuZCB3ZSBhc3N1bWUgdGltZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG5cbiAgZXZlbnRUaW1lc1tpbmRleF0gPSBldmVudFRpbWU7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcywgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xufVxuZnVuY3Rpb24gbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCkge1xuICByb290LmV4cGlyZWRMYW5lcyB8PSBJbnB1dERpc2NyZXRlTGFuZXMgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIGhhc0Rpc2NyZXRlTGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIElucHV0RGlzY3JldGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzIHw9IHVwZGF0ZUxhbmUgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgdmFyIG5vTG9uZ2VyUGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIExldCdzIHRyeSBldmVyeXRoaW5nIGFnYWluXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gQ2xlYXIgdGhlIGxhbmVzIHRoYXQgbm8gbG9uZ2VyIGhhdmUgcGVuZGluZyB3b3JrXG5cbiAgdmFyIGxhbmVzID0gbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IE5vTGFuZXM7XG4gICAgZXZlbnRUaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgbGFuZXMgPSBlbnRhbmdsZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2s7IC8vIENvdW50IGxlYWRpbmcgemVyb3MuIE9ubHkgdXNlZCBvbiBsYW5lcywgc28gYXNzdW1lIGlucHV0IGlzIGFuIGludGVnZXIuXG4vLyBCYXNlZCBvbjpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcblxudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG5mdW5jdGlvbiBjbHozMkZhbGxiYWNrKGxhbmVzKSB7XG4gIGlmIChsYW5lcyA9PT0gMCkge1xuICAgIHJldHVybiAzMjtcbiAgfVxuXG4gIHJldHVybiAzMSAtIChsb2cobGFuZXMpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHdvdWxkIHVzZSBkeW5hbWljIGRpc3BhdGNoIGZvclxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTsgLy8gVE9ETzogY2FuIHdlIHN0b3AgZXhwb3J0aW5nIHRoZXNlP1xuXG52YXIgX2VuYWJsZWQgPSB0cnVlOyAvLyBUaGlzIGlzIGV4cG9ydGVkIGluIEZCIGJ1aWxkcyBmb3IgdXNlIGJ5IGxlZ2FjeSBGQiBsYXllciBpbmZyYS5cbi8vIFdlJ2QgbGlrZSB0byByZW1vdmUgdGhpcyBidXQgaXQncyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzYWZlLlxuXG5mdW5jdGlvbiBzZXRFbmFibGVkKGVuYWJsZWQpIHtcbiAgX2VuYWJsZWQgPSAhIWVuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gIHJldHVybiBfZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBldmVudFByaW9yaXR5ID0gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpO1xuICB2YXIgbGlzdGVuZXJXcmFwcGVyO1xuXG4gIHN3aXRjaCAoZXZlbnRQcmlvcml0eSkge1xuICAgIGNhc2UgRGlzY3JldGVFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRGlzY3JldGVFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRpbnVvdXNFdmVudDpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZChuYXRpdmVFdmVudC50aW1lU3RhbXApO1xuICB9XG5cbiAgZGlzY3JldGVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5KFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEsIGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoIV9lbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGFsbG93UmVwbGF5ID0gdHJ1ZTtcblxuICB7XG4gICAgLy8gVE9ETzogcmVwbGF5aW5nIGNhcHR1cmUgcGhhc2UgZXZlbnRzIGlzIGN1cnJlbnRseSBicm9rZW5cbiAgICAvLyBiZWNhdXNlIHdlIHVzZWQgdG8gZG8gaXQgZHVyaW5nIHRvcC1sZXZlbCBuYXRpdmUgYnViYmxlIGhhbmRsZXJzXG4gICAgLy8gYnV0IG5vdyB3ZSB1c2UgZGlmZmVyZW50IGJ1YmJsZSBhbmQgY2FwdHVyZSBoYW5kbGVycy5cbiAgICAvLyBJbiBlYWdlciBtb2RlLCB3ZSBhdHRhY2ggY2FwdHVyZSBsaXN0ZW5lcnMgZWFybHksIHNvIHdlIG5lZWRcbiAgICAvLyB0byBmaWx0ZXIgdGhlbSBvdXQgdW50aWwgd2UgZml4IHRoZSBsb2dpYyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuXG4gICAgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIG91dHNpZGUgdGhlIGZsYWcgYnV0IEkgcHV0IGl0IGluc2lkZSB0byByZWR1Y2Ugcmlzay5cbiAgICBhbGxvd1JlcGxheSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgPT09IDA7XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkgJiYgaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSAmJiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMsIGFuZCB0aGlzIGlzIGFub3RoZXIgZGlzY3JldGVcbiAgICAvLyBldmVudCwgdGhlbiB3ZSBjYW4ndCBkaXNwYXRjaCBpdCByZWdhcmRsZXNzIG9mIGl0cyB0YXJnZXQsIHNpbmNlIHRoZXlcbiAgICAvLyBuZWVkIHRvIGRpc3BhdGNoIGluIG9yZGVyLlxuICAgIHF1ZXVlRGlzY3JldGVFdmVudChudWxsLCAvLyBGbGFncyB0aGF0IHdlJ3JlIG5vdCBhY3R1YWxseSBibG9ja2VkIG9uIGFueXRoaW5nIGFzIGZhciBhcyB3ZSBrbm93LlxuICAgIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQgdGhpcyBldmVudC5cbiAgICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgaWYgKGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgICAgLy8gVGhpcyB0aGlzIHRvIGJlIHJlcGxheWVkIGxhdGVyIG9uY2UgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuXG4gICAgICBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbmVlZCB0byBjbGVhciBvbmx5IGlmIHdlIGRpZG4ndCBxdWV1ZSBiZWNhdXNlXG4gICAgLy8gcXVldWVpbmcgaXMgYWNjdW1tdWxhdGl2ZS5cblxuXG4gICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBUaGlzIGlzIG5vdCByZXBsYXlhYmxlIHNvIHdlJ2xsIGludm9rZSBpdCBidXQgd2l0aG91dCBhIHRhcmdldCxcbiAgLy8gaW4gY2FzZSB0aGUgZXZlbnQgc3lzdGVtIG5lZWRzIHRvIHRyYWNlIGl0LlxuXG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIG51bGwsIHRhcmdldENvbnRhaW5lcik7XG59IC8vIEF0dGVtcHQgZGlzcGF0Y2hpbmcgYW4gZXZlbnQuIFJldHVybnMgYSBTdXNwZW5zZUluc3RhbmNlIG9yIENvbnRhaW5lciBpZiBpdCdzIGJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRPRE86IFdhcm4gaWYgX2VuYWJsZWQgaXMgZmFsc2UuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMgZHVyaW5nIGEgcmVwbGF5IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBpdCBtaWdodCBibG9ja1xuICAgICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0uXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgICAgICAvLyBjb21wb25lbnQncyBtb3VudCwgaWdub3JlIGl0IGZvciBub3cgKHRoYXQgaXMsIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyBhblxuICAgICAgICAvLyBldmVudCBvbiBhIG5vbi1SZWFjdCB0cmVlKS4gV2UgbWlnaHQgYWxzbyBjb25zaWRlciBxdWV1ZWluZyBldmVudHMgYW5kXG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKTsgLy8gV2UncmUgbm90IGJsb2NrZWQgb24gYW55dGhpbmcuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBUaGVzZSB2YXJpYWJsZXMgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBjb250ZW50IG9mIGEgdGFyZ2V0IG5vZGUsXG4gKiBhbGxvd2luZyBjb21wYXJpc29uIG9mIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIElkZW50aWZ5IHRoZSBub2RlIHdoZXJlIHNlbGVjdGlvbiBjdXJyZW50bHkgYmVnaW5zLCB0aGVuIG9ic2VydmVcbiAqIGJvdGggaXRzIHRleHQgY29udGVudCBhbmQgaXRzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIERPTS4gU2luY2UgdGhlXG4gKiBicm93c2VyIG1heSBuYXRpdmVseSByZXBsYWNlIHRoZSB0YXJnZXQgbm9kZSBkdXJpbmcgY29tcG9zaXRpb24sIHdlIGNhblxuICogdXNlIGl0cyBwb3NpdGlvbiB0byBmaW5kIGl0cyByZXBsYWNlbWVudC5cbiAqXG4gKlxuICovXG52YXIgcm9vdCA9IG51bGw7XG52YXIgc3RhcnRUZXh0ID0gbnVsbDtcbnZhciBmYWxsYmFja1RleHQgPSBudWxsO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCkge1xuICByb290ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIHN0YXJ0VGV4dCA9IGdldFRleHQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcm9vdCA9IG51bGw7XG4gIHN0YXJ0VGV4dCA9IG51bGw7XG4gIGZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbiAgfVxuXG4gIHZhciBzdGFydDtcbiAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQ7XG4gIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICB2YXIgZW5kO1xuICB2YXIgZW5kVmFsdWUgPSBnZXRUZXh0KCk7XG4gIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG5cbiAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICBmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbn1cbmZ1bmN0aW9uIGdldFRleHQoKSB7XG4gIGlmICgndmFsdWUnIGluIHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByb290LnRleHRDb250ZW50O1xufVxuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJlcn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTsgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfSAvLyBJRSBhbmQgRWRnZSAob24gV2luZG93cykgYW5kIENocm9tZSAvIFNhZmFyaSAob24gV2luZG93cyBhbmQgTGludXgpXG4gIC8vIHJlcG9ydCBFbnRlciBhcyBjaGFyQ29kZSAxMCB3aGVuIGN0cmwgaXMgcHJlc3NlZC5cblxuXG4gIGlmIChjaGFyQ29kZSA9PT0gMTApIHtcbiAgICBjaGFyQ29kZSA9IDEzO1xuICB9IC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuXG5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYSBmYWN0b3J5IHNvIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuZWQgY29uc3RydWN0b3JzLlxuLy8gSWYgd2UgaGFkIGEgc2luZ2xlIGNvbnN0cnVjdG9yLCBpdCB3b3VsZCBiZSBtZWdhbW9ycGhpYyBhbmQgZW5naW5lcyB3b3VsZCBkZW9wdC5cblxuXG5mdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgLyoqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICpcbiAgICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAgICpcbiAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAqL1xuICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgIHRoaXMuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0O1xuICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICB0aGlzLnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW19wcm9wTmFtZV07XG5cbiAgICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W19wcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfYXNzaWduKFN5bnRoZXRpY0Jhc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2VcIiBldmVudCBmb3JcbiAgICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgICAvLyB0eXBlb2YgY2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29cbiAgICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICovXG4gICAgcGVyc2lzdDogZnVuY3Rpb24gKCkgey8vIE1vZGVybiBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICB9KTtcblxuICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgZXZlbnRQaGFzZTogMCxcbiAgYnViYmxlczogMCxcbiAgY2FuY2VsYWJsZTogMCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gIGlzVHJ1c3RlZDogMFxufTtcbnZhciBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICB2aWV3OiAwLFxuICBkZXRhaWw6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpO1xudmFyIGxhc3RNb3ZlbWVudFg7XG52YXIgbGFzdE1vdmVtZW50WTtcbnZhciBsYXN0TW91c2VFdmVudDtcblxuZnVuY3Rpb24gdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCkge1xuICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gMDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSAwO1xuICAgIH1cblxuICAgIGxhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7XG4gIH1cbn1cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBzY3JlZW5YOiAwLFxuICBzY3JlZW5ZOiAwLFxuICBjbGllbnRYOiAwLFxuICBjbGllbnRZOiAwLFxuICBwYWdlWDogMCxcbiAgcGFnZVk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiAwLFxuICBidXR0b25zOiAwLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudDtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpO1xuICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICB9LFxuICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRZJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WTtcbiAgICB9IC8vIERvbid0IG5lZWQgdG8gY2FsbCB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZSgpIGhlcmVcbiAgICAvLyBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCB0byBoYXZlIGFscmVhZHkgcnVuIHdoZW4gbW92ZW1lbnRYXG4gICAgLy8gd2FzIGNvcGllZC5cblxuXG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFk7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIERyYWdFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YVRyYW5zZmVyOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHJlbGF0ZWRUYXJnZXQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jQW5pbWF0aW9uRXZlbnQtaW50ZXJmYWNlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmltYXRpb25FdmVudFxuICovXG5cbnZhciBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGFuaW1hdGlvbk5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG5cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xuXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGE6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1XG4gKiAgICAgIC8jZXZlbnRzLWlucHV0ZXZlbnRzXG4gKi9cbi8vIEhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgbGlzdCBmb3Igbm93LlxuXG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQ7XG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAnOCc6ICdCYWNrc3BhY2UnLFxuICAnOSc6ICdUYWInLFxuICAnMTInOiAnQ2xlYXInLFxuICAnMTMnOiAnRW50ZXInLFxuICAnMTYnOiAnU2hpZnQnLFxuICAnMTcnOiAnQ29udHJvbCcsXG4gICcxOCc6ICdBbHQnLFxuICAnMTknOiAnUGF1c2UnLFxuICAnMjAnOiAnQ2Fwc0xvY2snLFxuICAnMjcnOiAnRXNjYXBlJyxcbiAgJzMyJzogJyAnLFxuICAnMzMnOiAnUGFnZVVwJyxcbiAgJzM0JzogJ1BhZ2VEb3duJyxcbiAgJzM1JzogJ0VuZCcsXG4gICczNic6ICdIb21lJyxcbiAgJzM3JzogJ0Fycm93TGVmdCcsXG4gICczOCc6ICdBcnJvd1VwJyxcbiAgJzM5JzogJ0Fycm93UmlnaHQnLFxuICAnNDAnOiAnQXJyb3dEb3duJyxcbiAgJzQ1JzogJ0luc2VydCcsXG4gICc0Nic6ICdEZWxldGUnLFxuICAnMTEyJzogJ0YxJyxcbiAgJzExMyc6ICdGMicsXG4gICcxMTQnOiAnRjMnLFxuICAnMTE1JzogJ0Y0JyxcbiAgJzExNic6ICdGNScsXG4gICcxMTcnOiAnRjYnLFxuICAnMTE4JzogJ0Y3JyxcbiAgJzExOSc6ICdGOCcsXG4gICcxMjAnOiAnRjknLFxuICAnMTIxJzogJ0YxMCcsXG4gICcxMjInOiAnRjExJyxcbiAgJzEyMyc6ICdGMTInLFxuICAnMTQ0JzogJ051bUxvY2snLFxuICAnMTQ1JzogJ1Njcm9sbExvY2snLFxuICAnMjI0JzogJ01ldGEnXG59O1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG5cbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH0gLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuXG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KTsgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8ICdVbmlkZW50aWZpZWQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG5cbnZhciBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgQWx0OiAnYWx0S2V5JyxcbiAgQ29udHJvbDogJ2N0cmxLZXknLFxuICBNZXRhOiAnbWV0YUtleScsXG4gIFNoaWZ0OiAnc2hpZnRLZXknXG59OyAvLyBPbGRlciBicm93c2VycyAoU2FmYXJpIDw9IDEwLCBpT1MgU2FmYXJpIDw9IDEwLjIpIGRvIG5vdCBzdXBwb3J0XG4vLyBnZXRNb2RpZmllclN0YXRlLiBJZiBnZXRNb2RpZmllclN0YXRlIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIG1hcCBpdCB0byBhIHNldCBvZlxuLy8gbW9kaWZpZXIga2V5cyBleHBvc2VkIGJ5IHRoZSBldmVudC4gSW4gdGhpcyBjYXNlLCBMb2NrLWtleXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuXG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBjb2RlOiAwLFxuICBsb2NhdGlvbjogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgcmVwZWF0OiAwLFxuICBsb2NhbGU6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBwb2ludGVySWQ6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHByZXNzdXJlOiAwLFxuICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gIHRpbHRYOiAwLFxuICB0aWx0WTogMCxcbiAgdHdpc3Q6IDAsXG4gIHBvaW50ZXJUeXBlOiAwLFxuICBpc1ByaW1hcnk6IDBcbn0pO1xuXG52YXIgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xuXG52YXIgVG91Y2hFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgdG91Y2hlczogMCxcbiAgdGFyZ2V0VG91Y2hlczogMCxcbiAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxufSk7XG5cbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLXRyYW5zaXRpb25zLTIwMDkwMzIwLyN0cmFuc2l0aW9uLWV2ZW50cy1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RyYW5zaXRpb25FdmVudFxuICovXG5cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVgnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFYIDogMDtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhYCBmb3IgSUU8OSBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YSA6IDA7XG4gIH0sXG4gIGRlbHRhWjogMCxcbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBcImRlbHRhTW9kZVwiIGlzIHJlcG9ydGluZyBpbiByYXcgd2hlZWwgZGVsdGEgd2hlcmUgb25lXG4gIC8vIG5vdGNoIG9uIHRoZSBzY3JvbGwgaXMgYWx3YXlzICsvLSAxMjAsIHJvdWdobHkgZXF1aXZhbGVudCB0byBwaXhlbHMuXG4gIC8vIEEgZ29vZCBhcHByb3hpbWF0aW9uIG9mIERPTV9ERUxUQV9MSU5FICgxKSBpcyA1JSBvZiB2aWV3cG9ydCBzaXplIG9yXG4gIC8vIH40MCBwaXhlbHMsIGZvciBET01fREVMVEFfU0NSRUVOICgyKSBpdCBpcyA4Ny41JSBvZiB2aWV3cG9ydCBzaXplLlxuICBkZWx0YU1vZGU6IDBcbn0pO1xuXG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxuXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcblxuaWYgKGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59IC8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG5cblxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gY2FuVXNlRE9NICYmICdUZXh0RXZlbnQnIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlOyAvLyBJbiBJRTkrLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wb3NpdGlvbiBldmVudHMsIGJ1dCB0aGUgZGF0YSBzdXBwbGllZFxuLy8gYnkgdGhlIG5hdGl2ZSBjb21wb3NpdGlvbmVuZCBldmVudCBtYXkgYmUgaW5jb3JyZWN0LiBKYXBhbmVzZSBpZGVvZ3JhcGhpY1xuLy8gc3BhY2VzLCBmb3IgaW5zdGFuY2UgKFxcdTMwMDApIGFyZSBub3QgcmVjb3JkZWQgY29ycmVjdGx5LlxuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBjYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkJlZm9yZUlucHV0JywgWydjb21wb3NpdGlvbmVuZCcsICdrZXlwcmVzcycsICd0ZXh0SW5wdXQnLCAncGFzdGUnXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvbkVuZCcsIFsnY29tcG9zaXRpb25lbmQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblN0YXJ0JywgWydjb21wb3NpdGlvbnN0YXJ0JywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25VcGRhdGUnLCBbJ2NvbXBvc2l0aW9udXBkYXRlJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xufSAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG5cblxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cblxuZnVuY3Rpb24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAmJiAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMgbm90IGEgY29tbWFuZC5cbiAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSk7XG59XG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25zdGFydCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25TdGFydCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25FbmQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb251cGRhdGUnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uVXBkYXRlJztcbiAgfVxufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nICYmIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREU7XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlDb2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG5cbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBjb21wb3NpdGlvbiBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEtvcmVhbiBJTUUuXG4gKiBPdXIgZmFsbGJhY2sgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBJRSdzIEtvcmVhbiBJTUUsXG4gKiBzbyBqdXN0IHVzZSBuYXRpdmUgY29tcG9zaXRpb24gZXZlbnRzIHdoZW4gS29yZWFuIElNRSBpcyB1c2VkLlxuICogQWx0aG91Z2ggQ29tcG9zaXRpb25FdmVudC5sb2NhbGUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCxcbiAqIGl0IGlzIGF2YWlsYWJsZSBpbiBJRSwgd2hlcmUgb3VyIGZhbGxiYWNrIG1vZGUgaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59IC8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cblxuXG52YXIgaXNDb21wb3NpbmcgPSBmYWxzZTtcbi8qKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2luZykge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25TdGFydCc7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uRW5kJztcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghaXNDb21wb3NpbmcgJiYgZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvblN0YXJ0Jykge1xuICAgICAgaXNDb21wb3NpbmcgPSBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25FbmQnKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgZXZlbnRUeXBlKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChldmVudFR5cGUsIGRvbUV2ZW50TmFtZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcblxuICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBhdmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChpc0NvbXBvc2luZykge1xuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICdjb21wb3NpdGlvbmVuZCcgfHwgIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiYgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICB2YXIgY2hhcnMgPSBnZXREYXRhKCk7XG4gICAgICByZXNldCgpO1xuICAgICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cblxuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgJ29uQmVmb3JlSW5wdXQnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudCgnb25CZWZvcmVJbnB1dCcsICdiZWZvcmVpbnB1dCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gICAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IChldmVudE5hbWUgaW4gZG9jdW1lbnQpO1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDEoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25DaGFuZ2UnLCBbJ2NoYW5nZScsICdjbGljaycsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2lucHV0JywgJ2tleWRvd24nLCAna2V5dXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCAnb25DaGFuZ2UnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uQ2hhbmdlJywgJ2NoYW5nZScsIG51bGwsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGRpc3BhdGNoUXVldWUpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuXG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn0gLy8gRm9yIElFOCBhbmQgSUU5LlxuXG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleXVwJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJykge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpO1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdpbnB1dCcgfHwgZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cihub2RlKSB7XG4gIHZhciBzdGF0ZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZTtcblxuICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5jb250cm9sbGVkIHx8IG5vZGUudHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcblxuICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gIH1cblxuICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtcbiAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAoaW5zdCkge1xuICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldE5vZGUsIHRhcmdldEluc3QpO1xuICB9IC8vIFdoZW4gYmx1cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXROb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQyKCkge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlRW50ZXInLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUxlYXZlJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckVudGVyJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJMZWF2ZScsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbn1cbi8qKlxuICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBpc092ZXJFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3ZlcicgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInO1xuICB2YXIgaXNPdXRFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JztcblxuICBpZiAoaXNPdmVyRXZlbnQgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19SRVBMQVlFRCkgPT09IDApIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICBpZiAodG8gIT09IG5lYXJlc3RNb3VudGVkIHx8IHRvLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiB0by50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICBmcm9tID0gbnVsbDtcbiAgICB0byA9IHRhcmdldEluc3Q7XG4gIH1cblxuICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gIHZhciBsZWF2ZUV2ZW50VHlwZSA9ICdvbk1vdXNlTGVhdmUnO1xuICB2YXIgZW50ZXJFdmVudFR5cGUgPSAnb25Nb3VzZUVudGVyJztcbiAgdmFyIGV2ZW50VHlwZVByZWZpeCA9ICdtb3VzZSc7XG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJykge1xuICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICBsZWF2ZUV2ZW50VHlwZSA9ICdvblBvaW50ZXJMZWF2ZSc7XG4gICAgZW50ZXJFdmVudFR5cGUgPSAnb25Qb2ludGVyRW50ZXInO1xuICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgfVxuXG4gIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG4gIHZhciBsZWF2ZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IobGVhdmVFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdsZWF2ZScsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGxlYXZlLnRhcmdldCA9IGZyb21Ob2RlO1xuICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICB2YXIgZW50ZXIgPSBudWxsOyAvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIHRoaXMgbmF0aXZlRXZlbnQgaWYgd2UgYXJlIHByb2Nlc3NpbmdcbiAgLy8gdGhlIGZpcnN0IGFuY2VzdG9yLiBOZXh0IHRpbWUsIHdlIHdpbGwgaWdub3JlIHRoZSBldmVudC5cblxuICB2YXIgbmF0aXZlVGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobmF0aXZlVGFyZ2V0SW5zdCA9PT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBlbnRlckV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihlbnRlckV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJywgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXJFdmVudC50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXJFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG4gICAgZW50ZXIgPSBlbnRlckV2ZW50O1xuICB9XG5cbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcbn1cblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBvYmplY3RJcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpcztcblxudmFyIGhhc093blByb3BlcnR5JDIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAhb2JqZWN0SXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGFuY2hvck5vZGUubm9kZVR5cGU7XG4gICAgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG59XG4vKipcbiAqIFJldHVybnMge3N0YXJ0LCBlbmR9IHdoZXJlIGBzdGFydGAgaXMgdGhlIGNoYXJhY3Rlci9jb2RlcG9pbnQgaW5kZXggb2ZcbiAqIChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpIHdpdGhpbiB0aGUgdGV4dENvbnRlbnQgb2YgYG91dGVyTm9kZWAsIGFuZFxuICogYGVuZGAgaXMgdGhlIGluZGV4IG9mIChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgaWYgeW91IHBhc3MgaW4gZ2FyYmFnZSBpbnB1dCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY3Jhc2guXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIGluZGV4V2l0aGluQW5jaG9yID0gMDtcbiAgdmFyIGluZGV4V2l0aGluRm9jdXMgPSAwO1xuICB2YXIgbm9kZSA9IG91dGVyTm9kZTtcbiAgdmFyIHBhcmVudE5vZGUgPSBudWxsO1xuXG4gIG91dGVyOiB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0ID0gbnVsbDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gYW5jaG9yTm9kZSAmJiAoYW5jaG9yT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBmaXJzdCBjaGlsZCBgbmV4dGAuXG5cblxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gYW5jaG9yTm9kZSAmJiArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiYgKytpbmRleFdpdGhpbkZvY3VzID09PSBmb2N1c09mZnNldCkge1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIG5leHQgc2libGluZyBgbmV4dGAuXG5cblxuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAoV291bGQgaGFwcGVuIGlmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYXJlbid0XG4gICAgLy8gYWN0dWFsbHkgaW5zaWRlIHRoZSBwYXNzZWQtaW4gbm9kZS4pXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZFxuICB9O1xufVxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cblxuZnVuY3Rpb24gc2V0T2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBkb2MgJiYgZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuXG4gIGlmICghd2luLmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpOyAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDEgJiYgc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IHN0YXJ0TWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc3RhcnRNYXJrZXIub2Zmc2V0ICYmIHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IGVuZE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gZW5kTWFya2VyLm9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50ICYmIGNvbnRhaW5zTm9kZShub2RlLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luRnJhbWUoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXNzaW5nIHRoZSBjb250ZW50RG9jdW1lbnQgb2YgYSBIVE1MSWZyYW1lRWxlbWVudCBjYW4gY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAvLyB0byB0aHJvdywgZS5nLiBpZiBpdCBoYXMgYSBjcm9zcy1vcmlnaW4gc3JjIGF0dHJpYnV0ZS5cbiAgICAvLyBTYWZhcmkgd2lsbCBzaG93IGFuIGVycm9yIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIGFjY2VzcyByZXN1bHRzIGluIFwiQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCIuIGUuZzpcbiAgICAvLyBpZnJhbWUuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIC8vIEEgc2FmZXR5IHdheSBpcyB0byBhY2Nlc3Mgb25lIG9mIHRoZSBjcm9zcyBvcmlnaW4gcHJvcGVydGllczogV2luZG93IG9yIExvY2F0aW9uXG4gICAgLy8gV2hpY2ggbWlnaHQgcmVzdWx0IGluIFwiU2VjdXJpdHlFcnJvclwiIERPTSBFeGNlcHRpb24gYW5kIGl0IGlzIGNvbXBhdGlibGUgdG8gU2FmYXJpLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjaW50ZWdyYXRpb24td2l0aC1pZGxcbiAgICByZXR1cm4gdHlwZW9mIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPT09ICdzdHJpbmcnO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoKSB7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG4gIHdoaWxlIChlbGVtZW50IGluc3RhbmNlb2Ygd2luLkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgaWYgKGlzU2FtZU9yaWdpbkZyYW1lKGVsZW1lbnQpKSB7XG4gICAgICB3aW4gPSBlbGVtZW50LmNvbnRlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5cblxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAndGV4dCcgfHwgZWxlbS50eXBlID09PSAnc2VhcmNoJyB8fCBlbGVtLnR5cGUgPT09ICd0ZWwnIHx8IGVsZW0udHlwZSA9PT0gJ3VybCcgfHwgZWxlbS50eXBlID09PSAncGFzc3dvcmQnKSB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCkge1xuICB2YXIgZm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICByZXR1cm4ge1xuICAgIGZvY3VzZWRFbGVtOiBmb2N1c2VkRWxlbSxcbiAgICBzZWxlY3Rpb25SYW5nZTogaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IGdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvbjtcblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0ge1xuICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IGdldE9mZnNldHMoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbiB8fCB7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiAwXG4gIH07XG59XG4vKipcbiAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICogdGhlIGlucHV0LlxuICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZyb20gZ2V0KlxuICovXG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uU2VsZWN0JywgWydmb2N1c291dCcsICdjb250ZXh0bWVudScsICdkcmFnZW5kJywgJ2ZvY3VzaW4nLCAna2V5ZG93bicsICdrZXl1cCcsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbnZhciBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xudmFyIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xudmFyIG1vdXNlRG93biA9IGZhbHNlO1xuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbiQxKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgd2luID0gbm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0YXJnZXQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24kMShhY3RpdmVFbGVtZW50JDEpO1xuXG4gIGlmICghbGFzdFNlbGVjdGlvbiB8fCAhc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKSB7XG4gICAgbGFzdFNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247XG4gICAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhhY3RpdmVFbGVtZW50SW5zdCQxLCAnb25TZWxlY3QnKTtcblxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvblNlbGVjdCcsICdzZWxlY3QnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgICBldmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50JDE7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuXG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgIC8vXG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdmb2N1cyc7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdibHVyJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2V1cCc6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ2RyYWdzdGFydCc6XG4gICAgY2FzZSAnZHJvcCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd0b3VjaHN0YXJ0JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYWRkIGFsbCBldmVudHMgZnJvbVxuICAgIC8vIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0IGluIERPTVBsdWdpbkV2ZW50U3lzdGVtLlxuICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgbGlzdC5cbiAgICAvLyBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIHRoYXQgY2FuIHdhaXQgdW50aWwgUmVhY3QgMTguXG4gICAgZG9tRXZlbnROYW1lID09PSAnc2Nyb2xsJztcblxuICAgIHZhciBfbGlzdGVuZXJzID0gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnQudHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KTtcblxuICAgIGlmIChfbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGV2ZW50IGxhemlseS5cbiAgICAgIHZhciBfZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBfZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogX2xpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZSB0b3AtbGV2ZWwgc2lkZSBlZmZlY3QuXG5yZWdpc3RlclNpbXBsZUV2ZW50cygpO1xucmVnaXN0ZXJFdmVudHMkMigpO1xucmVnaXN0ZXJFdmVudHMkMSgpO1xucmVnaXN0ZXJFdmVudHMkMygpO1xucmVnaXN0ZXJFdmVudHMoKTtcblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29uY2VwdCBvZiBhIFwiU2ltcGxlRXZlbnRQbHVnaW5cIi5cbiAgLy8gVGhpcyBpcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXZlbnQgc3lzdGVtLiBBbGxcbiAgLy8gdGhlIG90aGVyIHBsdWdpbnMgYXJlIGVzc2VudGlhbGx5IHBvbHlmaWxscy4gU28gdGhlIHBsdWdpblxuICAvLyBzaG91bGQgcHJvYmFibHkgYmUgaW5saW5lZCBzb21ld2hlcmUgYW5kIGhhdmUgaXRzIGxvZ2ljXG4gIC8vIGJlIGNvcmUgdGhlIHRvIGV2ZW50IHN5c3RlbS4gVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBhbGxvd1xuICAvLyB1cyB0byBzaGlwIGJ1aWxkcyBvZiBSZWFjdCB3aXRob3V0IHRoZSBwb2x5ZmlsbGVkIHBsdWdpbnMgYmVsb3cuXG4gIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHZhciBzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUykgPT09IDA7IC8vIFdlIGRvbid0IHByb2Nlc3MgdGhlc2UgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gdGhlXG4gIC8vIGV2ZW50J3MgbmF0aXZlIFwiYnViYmxlXCIgcGhhc2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmVcbiAgLy8gbm90IGluIHRoZSBjYXB0dXJlIHBoYXNlLiBUaGF0J3MgYmVjYXVzZSB3ZSBlbXVsYXRlXG4gIC8vIHRoZSBjYXB0dXJlIHBoYXNlIGhlcmUgc3RpbGwuIFRoaXMgaXMgYSB0cmFkZS1vZmYsXG4gIC8vIGJlY2F1c2UgaW4gYW4gaWRlYWwgd29ybGQgd2Ugd291bGQgbm90IGVtdWxhdGUgYW5kIHVzZVxuICAvLyB0aGUgcGhhc2VzIHByb3Blcmx5LCBsaWtlIHdlIGRvIHdpdGggdGhlIFNpbXBsZUV2ZW50XG4gIC8vIHBsdWdpbi4gSG93ZXZlciwgdGhlIHBsdWdpbnMgYmVsb3cgZWl0aGVyIGV4cGVjdFxuICAvLyBlbXVsYXRpb24gKEVudGVyTGVhdmUpIG9yIHVzZSBzdGF0ZSBsb2NhbGl6ZWQgdG8gdGhhdFxuICAvLyBwbHVnaW4gKEJlZm9yZUlucHV0LCBDaGFuZ2UsIFNlbGVjdCkuIFRoZSBzdGF0ZSBpblxuICAvLyB0aGVzZSBtb2R1bGVzIGNvbXBsaWNhdGVzIHRoaW5ncywgYXMgeW91J2xsIGVzc2VudGlhbGx5XG4gIC8vIGdldCB0aGUgY2FzZSB3aGVyZSB0aGUgY2FwdHVyZSBwaGFzZSBldmVudCBtaWdodCBjaGFuZ2VcbiAgLy8gc3RhdGUsIG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgYnViYmxlIGV2ZW50IHRvIGNvbWUgaW5cbiAgLy8gbGF0ZXIgYW5kIG5vdCB0cmlnZ2VyIGFueXRoaW5nIGFzIHRoZSBzdGF0ZSBub3dcbiAgLy8gaW52YWxpZGF0ZXMgdGhlIGhldXJpc3RpY3Mgb2YgdGhlIGV2ZW50IHBsdWdpbi4gV2VcbiAgLy8gY291bGQgYWx0ZXIgYWxsIHRoZXNlIHBsdWdpbnMgdG8gd29yayBpbiBzdWNoIHdheXMsIGJ1dFxuICAvLyB0aGF0IG1pZ2h0IGNhdXNlIG90aGVyIHVua25vd24gc2lkZS1lZmZlY3RzIHRoYXQgd2VcbiAgLy8gY2FuJ3QgZm9yc2VlIHJpZ2h0IG5vdy5cblxuICBpZiAoc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucykge1xuICAgIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59IC8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG5cblxudmFyIG1lZGlhRXZlbnRUeXBlcyA9IFsnYWJvcnQnLCAnY2FucGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlcnJvcicsICdsb2FkZWRkYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdwYXVzZScsICdwbGF5JywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncmF0ZWNoYW5nZScsICdzZWVrZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd2b2x1bWVjaGFuZ2UnLCAnd2FpdGluZyddOyAvLyBXZSBzaG91bGQgbm90IGRlbGVnYXRlIHRoZXNlIGV2ZW50cyB0byB0aGUgY29udGFpbmVyLCBidXQgcmF0aGVyXG4vLyBzZXQgdGhlbSBvbiB0aGUgYWN0dWFsIHRhcmdldCBlbGVtZW50IGl0c2VsZi4gVGhpcyBpcyBwcmltYXJpbHlcbi8vIGJlY2F1c2UgdGhlc2UgZXZlbnRzIGRvIG5vdCBjb25zaXN0ZW50bHkgYnViYmxlIGluIHRoZSBET00uXG5cbnZhciBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFsnY2FuY2VsJywgJ2Nsb3NlJywgJ2ludmFsaWQnLCAnbG9hZCcsICdzY3JvbGwnLCAndG9nZ2xlJ10uY29uY2F0KG1lZGlhRXZlbnRUeXBlcykpO1xuXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IodHlwZSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgZXZlbnQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcHJldmlvdXNJbnN0YW5jZTtcblxuICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICBmb3IgKHZhciBpID0gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IGRpc3BhdGNoTGlzdGVuZXJzW2ldLFxuICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRfaSA9IGRpc3BhdGNoTGlzdGVuZXJzW19pXSxcbiAgICAgICAgICBfaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuaW5zdGFuY2UsXG4gICAgICAgICAgX2N1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBfbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kubGlzdGVuZXI7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2xpc3RlbmVyLCBfY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9kaXNwYXRjaFF1ZXVlJGkgPSBkaXNwYXRjaFF1ZXVlW2ldLFxuICAgICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQsXG4gICAgICAgIGxpc3RlbmVycyA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBsaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKTsgLy8gIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG5cbiAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgPSBmYWxzZTtcbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXRFbGVtZW50KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIElTX05PTl9ERUxFR0FURUQsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cbnZhciBsaXN0ZW5pbmdNYXJrZXIgPSAnX3JlYWN0TGlzdGVuaW5nJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuZnVuY3Rpb24gbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAvLyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvbid0IGl0ZXJhdGUgdGhyb3VnaCBldmVudHNcbiAgICAgIC8vIGZvciB0aGUgc2FtZSBwb3J0YWwgY29udGFpbmVyIG9yIHJvb3Qgbm9kZSBtb3JlIHRoYW4gb25jZS5cbiAgICAgIC8vIFRPRE86IG9uY2Ugd2UgcmVtb3ZlIHRoZSBmbGFnLCB3ZSBtYXkgYmUgYWJsZSB0byBhbHNvXG4gICAgICAvLyByZW1vdmUgc29tZSBvZiB0aGUgYm9va2tlZXBpbmcgbWFwcyB1c2VkIGZvciBsYXppbmVzcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gdHJ1ZTtcbiAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoIW5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZmFsc2UsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIHRydWUsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHJvb3RDb250YWluZXJFbGVtZW50LCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBldmVudFN5c3RlbUZsYWdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAwO1xuICB2YXIgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQ7IC8vIHNlbGVjdGlvbmNoYW5nZSBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnRcbiAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IGNhcHR1cmUgaW5jb21pbmcgZXZlbnRzIHRoYXQgYXJlIG9ubHlcbiAgLy8gdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCBkaXJlY3RseS5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyAmJiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIH0gLy8gSWYgdGhlIGV2ZW50IGNhbiBiZSBkZWxlZ2F0ZWQgKG9yIGlzIGNhcHR1cmUgcGhhc2UpLCB3ZSBjYW5cbiAgLy8gcmVnaXN0ZXIgaXQgdG8gdGhlIHJvb3QgY29udGFpbmVyLiBPdGhlcndpc2UsIHdlIHNob3VsZFxuICAvLyByZWdpc3RlciB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBlbGVtZW50IGFuZCBtYXJrIGl0IGFzXG4gIC8vIGEgbm9uLWRlbGVnYXRlZCBldmVudC5cblxuXG4gIGlmICh0YXJnZXRFbGVtZW50ICE9PSBudWxsICYmICFpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIEZvciBhbGwgbm9uLWRlbGVnYXRlZCBldmVudHMsIGFwYXJ0IGZyb20gc2Nyb2xsLCB3ZSBhdHRhY2hcbiAgICAvLyB0aGVpciBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHJlc3BlY3RpdmUgZWxlbWVudHMgdGhhdCB0aGVpclxuICAgIC8vIGV2ZW50cyBmaXJlIG9uLiBUaGF0IG1lYW5zIHdlIGNhbiBza2lwIHRoaXMgc3RlcCwgYXMgZXZlbnRcbiAgICAvLyBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHByZXZpb3VzbHkuIEhvd2V2ZXIsIHdlXG4gICAgLy8gc3BlY2lhbCBjYXNlIHRoZSBzY3JvbGwgZXZlbnQgYmVjYXVzZSB0aGUgcmVhbGl0eSBpcyB0aGF0IGFueVxuICAgIC8vIGVsZW1lbnQgY2FuIHNjcm9sbC5cbiAgICAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYXBwbHkgdGhlIHNhbWUgbG9naWMgdG8gYWxsXG4gICAgLy8gZXZlbnRzIGZyb20gdGhlIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0LiBUaGVuIHdlIGNhbiByZW1vdmVcbiAgICAvLyB0aGlzIHNwZWNpYWwgY2FzZSBhbmQgdXNlIHRoZSBzYW1lIGxvZ2ljIGZvciBhbGwgZXZlbnRzLlxuICAgIGlmIChkb21FdmVudE5hbWUgIT09ICdzY3JvbGwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19OT05fREVMRUdBVEVEO1xuICAgIHRhcmdldCA9IHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7IC8vIElmIHRoZSBsaXN0ZW5lciBlbnRyeSBpcyBlbXB0eSBvciB3ZSBzaG91bGQgdXBncmFkZSwgdGhlblxuICAvLyB3ZSBuZWVkIHRvIHRyYXAgYW4gZXZlbnQgbGlzdGVuZXIgb250byB0aGUgdGFyZ2V0LlxuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX0NBUFRVUkVfUEhBU0U7XG4gICAgfVxuXG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIGlzRGVmZXJyZWRMaXN0ZW5lckZvckxlZ2FjeUZCU3VwcG9ydCkge1xuICB2YXIgbGlzdGVuZXIgPSBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncyk7IC8vIElmIHBhc3NpdmUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGV2ZW50IHdpbGwgYmVcbiAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZS5cblxuICB2YXIgaXNQYXNzaXZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgLy8gQnJvd3NlcnMgaW50cm9kdWNlZCBhbiBpbnRlcnZlbnRpb24sIG1ha2luZyB0aGVzZSBldmVudHNcbiAgICAvLyBwYXNzaXZlIGJ5IGRlZmF1bHQgb24gZG9jdW1lbnQuIFJlYWN0IGRvZXNuJ3QgYmluZCB0aGVtXG4gICAgLy8gdG8gZG9jdW1lbnQgYW55bW9yZSwgYnV0IGNoYW5naW5nIHRoaXMgbm93IHdvdWxkIHVuZG9cbiAgICAvLyB0aGUgcGVyZm9ybWFuY2Ugd2lucyBmcm9tIHRoZSBjaGFuZ2UuIFNvIHdlIGVtdWxhdGVcbiAgICAvLyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgbWFudWFsbHkgb24gdGhlIHJvb3RzIG5vdy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5NjUxXG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNobW92ZScgfHwgZG9tRXZlbnROYW1lID09PSAnd2hlZWwnKSB7XG4gICAgICBpc1Bhc3NpdmVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0Q29udGFpbmVyID0gIHRhcmdldENvbnRhaW5lcjtcbiAgdmFyIHVuc3Vic2NyaWJlTGlzdGVuZXI7IC8vIFdoZW4gbGVnYWN5RkJTdXBwb3J0IGlzIGVuYWJsZWQsIGl0J3MgZm9yIHdoZW4gd2VcblxuXG4gIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lcikge1xuICByZXR1cm4gZ3JhbmRDb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lciB8fCBncmFuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGdyYW5kQ29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdDtcblxuICBpZiAoKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSkgPT09IDAgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19OT05fREVMRUdBVEVEKSA9PT0gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXJOb2RlID0gdGFyZ2V0Q29udGFpbmVyOyAvLyBJZiB3ZSBhcmUgdXNpbmcgdGhlIGxlZ2FjeSBGQiBzdXBwb3J0IGZsYWcsIHdlXG5cbiAgICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGJlbG93IGxvZ2ljIGF0dGVtcHRzIHRvIHdvcmsgb3V0IGlmIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICAvLyB0aGUgdGFyZ2V0IGZpYmVyIHRvIGEgZGlmZmVyZW50IGFuY2VzdG9yLiBXZSBoYWQgc2ltaWxhciBsb2dpY1xuICAgICAgLy8gaW4gdGhlIGxlZ2FjeSBldmVudCBzeXN0ZW0sIGV4Y2VwdCB0aGUgYmlnIGRpZmZlcmVuY2UgYmV0d2VlblxuICAgICAgLy8gc3lzdGVtcyBpcyB0aGF0IHRoZSBtb2Rlcm4gZXZlbnQgc3lzdGVtIG5vdyBoYXMgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgIC8vIGF0dGFjaGVkIHRvIGVhY2ggUmVhY3QgUm9vdCBhbmQgUmVhY3QgUG9ydGFsIFJvb3QuIFRvZ2V0aGVyLFxuICAgICAgLy8gdGhlIERPTSBub2RlcyByZXByZXNlbnRpbmcgdGhlc2Ugcm9vdHMgYXJlIHRoZSBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgd2hpY2ggYW5jZXN0b3IgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZSwgd2UgdHJhdmVyc2VcbiAgICAgIC8vIHVwIHRoZSBmaWJlciB0cmVlIGZyb20gdGhlIHRhcmdldCBpbnN0YW5jZSBhbmQgYXR0ZW1wdCB0byBmaW5kXG4gICAgICAvLyByb290IGJvdW5kYXJpZXMgdGhhdCBtYXRjaCB0aGF0IG9mIG91ciBjdXJyZW50IFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gSWYgd2UgZmluZCB0aGF0IFwicm9vdENvbnRhaW5lclwiLCB3ZSBmaW5kIHRoZSBwYXJlbnQgZmliZXJcbiAgICAgIC8vIHN1Yi10cmVlIGZvciB0aGF0IHJvb3QgYW5kIG1ha2UgdGhhdCBvdXIgYW5jZXN0b3IgaW5zdGFuY2UuXG4gICAgICB2YXIgbm9kZSA9IHRhcmdldEluc3Q7XG5cbiAgICAgIG1haW5Mb29wOiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlVGFnID0gbm9kZS50YWc7XG5cbiAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RSb290IHx8IG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBhIHBvcnRhbCwgYnV0IGl0J3Mgbm90IHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yLlxuICAgICAgICAgICAgLy8gTm9ybWFsbHkgcG9ydGFscyBoYW5kbGUgdGhlaXIgb3duIGV2ZW50cyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSByb290LlxuICAgICAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBub3cuIEhvd2V2ZXIsIHdlIGRvbid0IGtub3cgaWYgdGhpcyBwb3J0YWxcbiAgICAgICAgICAgIC8vIHdhcyBwYXJ0IG9mICpvdXIqIHJvb3QuXG4gICAgICAgICAgICB2YXIgZ3JhbmROb2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgICAgICAgIHdoaWxlIChncmFuZE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gZ3JhbmROb2RlLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZ3JhbmRUYWcgPT09IEhvc3RSb290IHx8IGdyYW5kVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kQ29udGFpbmVyID0gZ3JhbmROb2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvciBhbmQgd2UgZm91bmQgaXQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIGEgcGFyZW50IG9mIHRoZSBQb3J0YWwuIFRoYXQgbWVhbnMgd2UgY2FuIGlnbm9yZSBpdCBiZWNhdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gUG9ydGFsIHdpbGwgYnViYmxlIHRocm91Z2ggdG8gdXMuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ3JhbmROb2RlID0gZ3JhbmROb2RlLnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE5vdyB3ZSBuZWVkIHRvIGZpbmQgaXQncyBjb3JyZXNwb25kaW5nIGhvc3QgZmliZXIgaW4gdGhlIG90aGVyXG4gICAgICAgICAgLy8gdHJlZS4gVG8gZG8gdGhpcyB3ZSBjYW4gdXNlIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLCBidXQgd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpYmVyIGlzIGEgaG9zdCBpbnN0YW5jZSwgb3RoZXJ3aXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB0cmF2ZXJzZSB1cCB0aHJvdWdoIHRoZSBET00gdGlsbCB3ZSBmaW5kIHRoZSBjb3JyZWN0XG4gICAgICAgICAgLy8gbm9kZSB0aGF0IGlzIGZyb20gdGhlIG90aGVyIHRyZWUuXG5cblxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50Tm9kZS50YWc7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRUYWcgPT09IEhvc3RDb21wb25lbnQgfHwgcGFyZW50VGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICAgICAgICBub2RlID0gYW5jZXN0b3JJbnN0ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY29udGludWUgbWFpbkxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiYXRjaGVkRXZlbnRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIGFuY2VzdG9ySW5zdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICByZXR1cm4ge1xuICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnRUeXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICE9PSBudWxsID8gcmVhY3ROYW1lICsgJ0NhcHR1cmUnIDogbnVsbDtcbiAgdmFyIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UgPyBjYXB0dXJlTmFtZSA6IHJlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjtcbiAgdmFyIGxhc3RIb3N0Q29tcG9uZW50ID0gbnVsbDsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UyLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTmFtZSk7XG5cbiAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0TmFtZSk7XG5cbiAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICBpZiAoaW5zdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgbm9kZUEgPSBpbnN0QTtcbiAgdmFyIG5vZGVCID0gaW5zdEI7XG4gIHZhciBkZXB0aEEgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBBID0gbm9kZUE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCh0ZW1wQSkpIHtcbiAgICBkZXB0aEErKztcbiAgfVxuXG4gIHZhciBkZXB0aEIgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBCID0gbm9kZUI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBkZXB0aEEtLTtcbiAgfSAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgICBkZXB0aEItLTtcbiAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcblxuICB3aGlsZSAoZGVwdGgtLSkge1xuICAgIGlmIChub2RlQSA9PT0gbm9kZUIgfHwgbm9kZUIgIT09IG51bGwgJiYgbm9kZUEgPT09IG5vZGVCLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIG5vZGVBO1xuICAgIH1cblxuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBldmVudCwgdGFyZ2V0LCBjb21tb24sIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXQ7XG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgaWYgKGluc3RhbmNlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBfaW5zdGFuY2U0ID0gaW5zdGFuY2UsXG4gICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlNC50YWc7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoaXMgcGx1Z2luXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMuXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBlbnRlckV2ZW50LCBmcm9tLCB0bykge1xuICB2YXIgY29tbW9uID0gZnJvbSAmJiB0byA/IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGZyb20sIHRvKSA6IG51bGw7XG5cbiAgaWYgKGZyb20gIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGZyb20sIGNvbW1vbiwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHRvICE9PSBudWxsICYmIGVudGVyRXZlbnQgIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGVudGVyRXZlbnQsIHRvLCBjb21tb24sIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSArIFwiX19cIiArIChjYXB0dXJlID8gJ2NhcHR1cmUnIDogJ2J1YmJsZScpO1xufVxuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9ICdkYW5nZXJvdXNseVNldElubmVySFRNTCc7XG52YXIgU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HID0gJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc7XG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbnZhciBBVVRPRk9DVVMgPSAnYXV0b0ZvY3VzJztcbnZhciBDSElMRFJFTiA9ICdjaGlsZHJlbic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIEhUTUxfTkFNRVNQQUNFJDEgPSBOYW1lc3BhY2VzLmh0bWw7XG52YXIgd2FybmVkVW5rbm93blRhZ3M7XG52YXIgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nO1xudmFyIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQ7XG52YXIgd2FybkZvclRleHREaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzO1xudmFyIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcjtcbnZhciBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nO1xudmFyIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZTtcbnZhciBub3JtYWxpemVIVE1MO1xuXG57XG4gIHdhcm5lZFVua25vd25UYWdzID0ge1xuICAgIC8vIFRoZXJlIGFyZSB3b3JraW5nIHBvbHlmaWxscyBmb3IgPGRpYWxvZz4uIExldCBwZW9wbGUgdXNlIGl0LlxuICAgIGRpYWxvZzogdHJ1ZSxcbiAgICAvLyBFbGVjdHJvbiBzaGlwcyBhIGN1c3RvbSA8d2Vidmlldz4gdGFnIHRvIGRpc3BsYXkgZXh0ZXJuYWwgd2ViIGNvbnRlbnQgaW5cbiAgICAvLyBhbiBpc29sYXRlZCBmcmFtZSBhbmQgcHJvY2Vzcy5cbiAgICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgICAvLyBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIC8vIEBzZWUgaHR0cHM6Ly9lbGVjdHJvbmpzLm9yZy9kb2NzL2FwaS93ZWJ2aWV3LXRhZ1xuICAgIHdlYnZpZXc6IHRydWVcbiAgfTtcblxuICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzKSB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgfSk7XG4gIH07IC8vIElFIDExIHBhcnNlcyAmIG5vcm1hbGl6ZXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcyBvcHBvc2VkIHRvIG90aGVyXG4gIC8vIGJyb3dzZXJzLiBJdCBhZGRzIHNwYWNlcyBhbmQgc29ydHMgdGhlIHByb3BlcnRpZXMgaW4gc29tZVxuICAvLyBub24tYWxwaGFiZXRpY2FsIG9yZGVyLiBIYW5kbGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgc29ydGluZyBDU1NcbiAgLy8gcHJvcGVydGllcyBpbiB0aGUgY2xpZW50ICYgc2VydmVyIHZlcnNpb25zIG9yIGFwcGx5aW5nXG4gIC8vIGBleHBlY3RlZFN0eWxlYCB0byBhIHRlbXBvcmFyeSBET00gbm9kZSB0byByZWFkIGl0cyBgc3R5bGVgIGF0dHJpYnV0ZVxuICAvLyBub3JtYWxpemVkLiBTaW5jZSBpdCBvbmx5IGFmZmVjdHMgSUUsIHdlJ3JlIHNraXBwaW5nIHN0eWxlIHdhcm5pbmdzXG4gIC8vIGluIHRoYXQgYnJvd3NlciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mIGRvaW5nIGFsbCB0aGF0IHdvcmsuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExODA3XG5cblxuICBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nID0gY2FuVXNlRE9NICYmICFkb2N1bWVudC5kb2N1bWVudE1vZGU7IC8vIEhUTUwgcGFyc2luZyBub3JtYWxpemVzIENSIGFuZCBDUkxGIHRvIExGLlxuICAvLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc2luZ2xlLXBhZ2UuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW1cbiAgLy8gSWYgd2UgaGF2ZSBhIG1pc21hdGNoLCBpdCBtaWdodCBiZSBjYXVzZWQgYnkgdGhhdC5cbiAgLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG4gIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xuICB2YXIgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nO1xuXG4gIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgbWFya3VwU3RyaW5nID0gdHlwZW9mIG1hcmt1cCA9PT0gJ3N0cmluZycgPyBtYXJrdXAgOiAnJyArIG1hcmt1cDtcbiAgICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbiAgfTtcblxuICB3YXJuRm9yVGV4dERpZmZlcmVuY2UgPSBmdW5jdGlvbiAoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclRleHQgPT09IG5vcm1hbGl6ZWRDbGllbnRUZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gIH07XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlID0gZnVuY3Rpb24gKHByb3BOYW1lLCBzZXJ2ZXJWYWx1ZSwgY2xpZW50VmFsdWUpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVmFsdWUgPT09IG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdQcm9wIGAlc2AgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiAlcyBDbGllbnQ6ICVzJywgcHJvcE5hbWUsIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSksIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkpO1xuICB9O1xuXG4gIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZXMpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9KTtcblxuICAgIGVycm9yKCdFeHRyYSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNlcnZlcjogJXMnLCBuYW1lcyk7XG4gIH07XG5cbiAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfTsgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuICBub3JtYWxpemVIVE1MID0gZnVuY3Rpb24gKHBhcmVudCwgaHRtbCkge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudC5uYW1lc3BhY2VVUkksIHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuXG5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIC8vIFRPRE86IEhhbmRsZSB3YXNDdXN0b21Db21wb25lbnRUYWdcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVQYXlsb2FkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHByb3BLZXkgPSB1cGRhdGVQYXlsb2FkW2ldO1xuICAgIHZhciBwcm9wVmFsdWUgPSB1cGRhdGVQYXlsb2FkW2kgKyAxXTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgbmFtZXNwYWNlVVJJID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIHtcbiAgICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpOyAvLyBTaG91bGQgdGhpcyBjaGVjayBiZSBnYXRlZCBieSBwYXJlbnQgbmFtZXNwYWNlPyBOb3Qgc3VyZSB3ZSB3YW50IHRvXG4gICAgICAvLyBhbGxvdyA8U1ZHPiBvciA8bUFUSD4uXG5cbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgdHlwZSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGVycm9yKCc8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gJyArICdVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgJyArICdvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAvLyBzZXQgdG8gdHJ1ZSBhbmQgaXQgZG9lcyBub3QgZXhlY3V0ZVxuICAgICAgdmFyIGRpdiA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNjcmlwdD48JyArICcvc2NyaXB0Pic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byB5aWVsZCBhIHNjcmlwdCBlbGVtZW50LlxuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgIGlzOiBwcm9wcy5pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjYXVzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBkb21FbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAgIG5vZGUubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGEgc2l6ZSBncmVhdGVyIHRoYW4gMSBjYXVzZXMgYSBzZWxlY3QgdG8gYmVoYXZlIGxpa2UgYG11bHRpcGxlPXRydWVgLCB3aGVyZVxuICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGEgc2VsZWN0IGluIFwic2luZ2xlIHNlbGVjdGlvbiBtb2RlXCIuXG4gICAgICAgICAgbm9kZS5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0eXBlKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgd2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgdGFnIDwlcz4gaXMgdW5yZWNvZ25pemVkIGluIHRoaXMgYnJvd3Nlci4gJyArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoICcgKyAnYW4gdXBwZXJjYXNlIGxldHRlci4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpLmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHZhciBwcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKTtcbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbGFzdFByb3BzID0gbGFzdFJhd1Byb3BzO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFJhd1Byb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgbmV4dFByb3BzKTtcbiAgdmFyIHByb3BLZXk7XG4gIHZhciBzdHlsZU5hbWU7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuXG4gIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgdmFyIGxhc3RTdHlsZSA9IGxhc3RQcm9wc1twcm9wS2V5XTtcblxuICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCB8fCBwcm9wS2V5ID09PSBDSElMRFJFTikgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBmaWJlciBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFsbCBvdGhlciBkZWxldGVkIHByb3BlcnRpZXMgd2UgYWRkIGl0IHRvIHRoZSBxdWV1ZS4gV2UgdXNlXG4gICAgICAvLyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGluIHRoZSBjb21taXQgcGhhc2UgaW5zdGVhZC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGFzdFByb3ApIHtcbiAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cblxuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3AgPyBsYXN0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGVhZ2VybHkgbGlzdGVuIHRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBjb21taXR0ZWQgeWV0LlxuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdvYmplY3QnICYmIG5leHRQcm9wICE9PSBudWxsICYmIG5leHRQcm9wLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRSkge1xuICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIHVzZU9wYXF1ZVJlZmVyZW5jZSdzIG9wYXF1ZSBvYmplY3QsIHRoaXMgbWVhbnMgd2UgYXJlIGh5ZHJhdGluZy5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgY2FsbCB0aGUgb3BhcXVlIG9iamVjdCdzIHRvU3RyaW5nIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlcyBhIG5ldyBjbGllbnRcbiAgICAgIC8vIElEIHNvIGNsaWVudCBhbmQgc2VydmVyIElEcyBtYXRjaCBhbmQgdGhyb3dzIHRvIHJlcmVuZGVyLlxuICAgICAgbmV4dFByb3AudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFueSBvdGhlciBwcm9wZXJ0eSB3ZSBhbHdheXMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhbmQgdGhlbiB3ZVxuICAgICAgLy8gZmlsdGVyIGl0IG91dCB1c2luZyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGR1cmluZyB0aGUgY29tbWl0LlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAge1xuICAgICAgdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFByb3BzW1NUWUxFXSk7XG4gICAgfVxuXG4gICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKFNUWUxFLCBzdHlsZVVwZGF0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMpIHtcbiAgLy8gVXBkYXRlIGNoZWNrZWQgKmJlZm9yZSogbmFtZS5cbiAgLy8gSW4gdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgY2hlY2tlZC5cbiAgLy8gV2hlbiBhIGNoZWNrZWQgcmFkaW8gdHJpZXMgdG8gY2hhbmdlIG5hbWUsIGJyb3dzZXIgbWFrZXMgYW5vdGhlciByYWRpbydzIGNoZWNrZWQgZmFsc2UuXG4gIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgbmV4dFJhd1Byb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmV4dFJhd1Byb3BzLm5hbWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZUNoZWNrZWQoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB3YXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIGxhc3RSYXdQcm9wcyk7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbmV4dFJhd1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYuXG5cbiAgdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTsgLy8gVE9ETzogRW5zdXJlIHRoYXQgYW4gdXBkYXRlIGdldHMgc2NoZWR1bGVkIGlmIGFueSBvZiB0aGUgc3BlY2lhbCBwcm9wc1xuICAvLyBjaGFuZ2VkLlxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVXBkYXRlIHRoZSB3cmFwcGVyIGFyb3VuZCBpbnB1dHMgKmFmdGVyKiB1cGRhdGluZyBwcm9wcy4gVGhpcyBoYXMgdG9cbiAgICAgIC8vIGhhcHBlbiBhZnRlciBgdXBkYXRlRE9NUHJvcGVydGllc2AuIE90aGVyd2lzZSBIVE1MNSBpbnB1dCB2YWxpZGF0aW9uc1xuICAgICAgLy8gcmFpc2Ugd2FybmluZ3MgYW5kIHByZXZlbnQgdGhlIG5ldyB2YWx1ZSBmcm9tIGJlaW5nIGFzc2lnbmVkLlxuICAgICAgdXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB1cGRhdGVXcmFwcGVyJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgLy8gcmVjb25jaWxpYXRpb25cbiAgICAgIHBvc3RVcGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wTmFtZSkge1xuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV0gfHwgbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnO1xuICB2YXIgZXh0cmFBdHRyaWJ1dGVOYW1lcztcblxuICB7XG4gICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gcmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddID09PSB0cnVlO1xuICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICBleHRyYUF0dHJpYnV0ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIC8vIEJ1aWx0LWluIFNTUiBhdHRyaWJ1dGUgaXMgYWxsb3dlZFxuICAgICAgICBjYXNlICdkYXRhLXJlYWN0cm9vdCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cblxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuXG4gIGZvciAodmFyIHByb3BLZXkgaW4gcmF3UHJvcHMpIHtcbiAgICBpZiAoIXJhd1Byb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSByYXdQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSAnJyArIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sICcnICsgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggLy8gQ29udmluY2UgRmxvdyB3ZSd2ZSBjYWxjdWxhdGVkIGl0IChpdCdzIERFVi1vbmx5IGluIHRoaXMgbWV0aG9kLilcbiAgICB0eXBlb2YgaXNDdXN0b21Db21wb25lbnRUYWcgPT09ICdib29sZWFuJykge1xuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcHJvcGVydGllcyBjb3JyZXNwb25kIHRvIHRoZWlyIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8ocHJvcEtleSk7XG5cbiAgICAgIGlmIChzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZEhUTUwgIT09IHNlcnZlckhUTUwpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuXG4gICAgICAgIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMobmV4dFByb3ApO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRTdHlsZSAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmVBdHRyaWJ1dGUocHJvcEtleSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykgJiYgIXNob3VsZFJlbW92ZUF0dHJpYnV0ZShwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICAgICAgdmFyIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgb3duTmFtZXNwYWNlID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgaWYgKGV4dHJhQXR0cmlidXRlTmFtZXMuc2l6ZSA+IDAgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhleHRyYUF0dHJpYnV0ZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIHRydWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIC8vIEZvciBpbnB1dCBhbmQgdGV4dGFyZWEgd2UgY3VycmVudCBhbHdheXMgc2V0IHRoZSB2YWx1ZSBwcm9wZXJ0eSBhdFxuICAgICAgLy8gcG9zdCBtb3VudCB0byBmb3JjZSBpdCB0byBkaXZlcmdlIGZyb20gYXR0cmlidXRlcy4gSG93ZXZlciwgZm9yXG4gICAgICAvLyBvcHRpb24gYW5kIHNlbGVjdCB3ZSBkb24ndCBxdWl0ZSBkbyB0aGUgc2FtZSB0aGluZyBhbmQgc2VsZWN0XG4gICAgICAvLyBpcyBub3QgcmVzaWxpZW50IHRvIHRoZSBET00gc3RhdGUgY2hhbmdpbmcgc28gd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbm90IGRvaW5nIHRoaXMgZm9yIGlucHV0IGFuZCB0ZXh0YXJlYS5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcmF3UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAgdmFyIGlzRGlmZmVyZW50ID0gdGV4dE5vZGUubm9kZVZhbHVlICE9PSB0ZXh0O1xuICByZXR1cm4gaXNEaWZmZXJlbnQ7XG59XG5mdW5jdGlvbiB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclRleHREaWZmZXJlbmNlKHRleHROb2RlLm5vZGVWYWx1ZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LicsIGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJywgY2hpbGQubm9kZVZhbHVlLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Tm9kZSwgdGFnLCBwcm9wcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJywgdGFnLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAvLyBXZSBleHBlY3QgdG8gaW5zZXJ0IGVtcHR5IHRleHQgbm9kZXMgc2luY2UgdGhleSdyZSBub3QgcmVwcmVzZW50ZWQgaW5cbiAgICAgIC8vIHRoZSBIVE1MLlxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlIGlmIHdlIGNhbiBqdXN0IGF2b2lkIGluc2VydGluZyBlbXB0eVxuICAgICAgLy8gdGV4dCBub2Rlcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJywgdGV4dCwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKCkge307XG5cbnZhciB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gVGhpcyB2YWxpZGF0aW9uIGNvZGUgd2FzIHdyaXR0ZW4gYmFzZWQgb24gdGhlIEhUTUw1IHBhcnNpbmcgc3BlYzpcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgLy9cbiAgLy8gTm90ZTogdGhpcyBkb2VzIG5vdCBjYXRjaCBhbGwgaW52YWxpZCBuZXN0aW5nLCBub3IgZG9lcyBpdCB0cnkgdG8gKGFzIGl0J3NcbiAgLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQgZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbiAgLy8gZm9yIGNhc2VzIHdoZXJlIHRoZSBwYXJzZXIgd2lsbCBnaXZlIGEgcGFyc2UgdHJlZSBkaWZmZXJpbmcgZnJvbSB3aGF0IFJlYWN0XG4gIC8vIGludGVuZGVkLiBGb3IgZXhhbXBsZSwgPGI+PGRpdj48L2Rpdj48L2I+IGlzIGludmFsaWQgYnV0IHdlIGRvbid0IHdhcm5cbiAgLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJzZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuICAvLyA8cD4gdGFncyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBpbXBsaWNpdGx5IGNsb3NlcyB0aGVcbiAgLy8gZmlyc3QsIGNhdXNpbmcgYSBjb25mdXNpbmcgbWVzcy5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG5cbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJywgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaHRtbC1pbnRlZ3JhdGlvbi1wb2ludFxuICAvLyBUT0RPOiBEaXN0aW5ndWlzaCBieSBuYW1lc3BhY2UgaGVyZSAtLSBmb3IgPHRpdGxlPiwgaW5jbHVkaW5nIGl0IGhlcmVcbiAgLy8gZXJycyBvbiB0aGUgc2lkZSBvZiBmZXdlciB3YXJuaW5nc1xuICAnZm9yZWlnbk9iamVjdCcsICdkZXNjJywgJ3RpdGxlJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLWJ1dHRvbi1zY29wZVxuXG4gIHZhciBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoWydidXR0b24nXSk7IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2dlbmVyYXRlLWltcGxpZWQtZW5kLXRhZ3NcblxuICB2YXIgaW1wbGllZEVuZFRhZ3MgPSBbJ2RkJywgJ2R0JywgJ2xpJywgJ29wdGlvbicsICdvcHRncm91cCcsICdwJywgJ3JwJywgJ3J0J107XG4gIHZhciBlbXB0eUFuY2VzdG9ySW5mbyA9IHtcbiAgICBjdXJyZW50OiBudWxsLFxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsXG4gIH07XG5cbiAgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcpIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gX2Fzc2lnbih7fSwgb2xkSW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbyk7XG5cbiAgICB2YXIgaW5mbyA9IHtcbiAgICAgIHRhZzogdGFnXG4gICAgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IG51bGw7XG4gICAgfSAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgaWYgKHNwZWNpYWxUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEgJiYgdGFnICE9PSAnYWRkcmVzcycgJiYgdGFnICE9PSAnZGl2JyAmJiB0YWcgIT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICB9XG5cbiAgICBhbmNlc3RvckluZm8uY3VycmVudCA9IGluZm87XG5cbiAgICBpZiAodGFnID09PSAnZm9ybScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5mb3JtVGFnID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbm9icicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnZGQnIHx8IHRhZyA9PT0gJ2R0Jykge1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcblxuICAgICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3QgbWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcblxuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRkXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jYXB0aW9uXG4gICAgICAvLyBObyBzcGVjaWFsIGJlaGF2aW9yIHNpbmNlIHRoZXNlIHJ1bGVzIGZhbGwgYmFjayB0byBcImluIGJvZHlcIiBtb2RlIGZvclxuICAgICAgLy8gYWxsIGV4Y2VwdCBzcGVjaWFsIHRhYmxlIG5vZGVzIHdoaWNoIGNhdXNlIGJhZCBwYXJzaW5nIGJlaGF2aW9yIGFueXdheS5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG5cbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RoJyB8fCB0YWcgPT09ICd0ZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGJvZHlcblxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG5cbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcblxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY2FwdGlvbicgfHwgdGFnID09PSAnY29sZ3JvdXAnIHx8IHRhZyA9PT0gJ3Rib2R5JyB8fCB0YWcgPT09ICd0Zm9vdCcgfHwgdGFnID09PSAndGhlYWQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmhlYWRcblxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuXG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hlYWQnIHx8IHRhZyA9PT0gJ2JvZHknIHx8IHRhZyA9PT0gJ2ZyYW1lc2V0JztcblxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnZnJhbWUnO1xuXG4gICAgICBjYXNlICcjZG9jdW1lbnQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaHRtbCc7XG4gICAgfSAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyAhPT0gJ2gxJyAmJiBwYXJlbnRUYWcgIT09ICdoMicgJiYgcGFyZW50VGFnICE9PSAnaDMnICYmIHBhcmVudFRhZyAhPT0gJ2g0JyAmJiBwYXJlbnRUYWcgIT09ICdoNScgJiYgcGFyZW50VGFnICE9PSAnaDYnO1xuXG4gICAgICBjYXNlICdycCc6XG4gICAgICBjYXNlICdydCc6XG4gICAgICAgIHJldHVybiBpbXBsaWVkRW5kVGFncy5pbmRleE9mKHBhcmVudFRhZykgPT09IC0xO1xuXG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgY2FzZSAnY29sJzpcbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0ZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICBjYXNlICd0aCc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIC8vIFRoZXNlIHRhZ3MgYXJlIG9ubHkgdmFsaWQgd2l0aCBhIGZldyBwYXJlbnRzIHRoYXQgaGF2ZSBzcGVjaWFsIGNoaWxkXG4gICAgICAgIC8vIHBhcnNpbmcgcnVsZXMgLS0gaWYgd2UncmUgZG93biBoZXJlLCB0aGVuIG5vbmUgb2YgdGhvc2UgbWF0Y2hlZCBhbmRcbiAgICAgICAgLy8gc28gd2UgYWxsb3cgaXQgb25seSBpZiB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBhcmVudCBpcywgYXMgYWxsIG90aGVyXG4gICAgICAgIC8vIGNhc2VzIGFyZSBpbnZhbGlkLlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnID09IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YXIgZGlkV2FybiQxID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRUYWcgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJyk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAgICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIHdhcm5LZXkgPSAhIWludmFsaWRQYXJlbnQgKyAnfCcgKyBjaGlsZFRhZyArICd8JyArIGFuY2VzdG9yVGFnO1xuXG4gICAgaWYgKGRpZFdhcm4kMVt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm4kMVt3YXJuS2V5XSA9IHRydWU7XG4gICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgdmFyIHdoaXRlc3BhY2VJbmZvID0gJyc7XG5cbiAgICBpZiAoY2hpbGRUYWcgPT09ICcjdGV4dCcpIHtcbiAgICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgfVxuXG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBpbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgZGVzY2VuZGFudCBvZiAnICsgJzwlcz4uJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxO1xuXG57XG4gIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbn1cblxudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgU1RZTEUkMSA9ICdzdHlsZSc7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZTtcbiAgdmFyIG5hbWVzcGFjZTtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHJvb3QgPyByb290Lm5hbWVzcGFjZVVSSSA6IGdldENoaWxkTmFtZXNwYWNlKG51bGwsICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJJbnN0YW5jZS5wYXJlbnROb2RlIDogcm9vdENvbnRhaW5lckluc3RhbmNlO1xuICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gY29udGFpbmVyLm5hbWVzcGFjZVVSSSB8fCBudWxsO1xuICAgICAgICB0eXBlID0gY29udGFpbmVyLnRhZ05hbWU7XG4gICAgICAgIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKG93bk5hbWVzcGFjZSwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcblxuICBzZXRFbmFibGVkKGZhbHNlKTtcbiAgcmV0dXJuIGFjdGl2ZUluc3RhbmNlO1xufVxuZnVuY3Rpb24gcmVzZXRBZnRlckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIHJlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uSW5mb3JtYXRpb24pO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgLy8gVE9ETzogdGFrZSBuYW1lc3BhY2UgaW50byBhY2NvdW50IHdoZW4gdmFsaWRhdGluZy5cbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgbnVsbCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIHByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuXG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgdmFyIGRvbUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIHBhcmVudE5hbWVzcGFjZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICByZXR1cm4gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcyk7XG59XG5mdW5jdGlvbiBwcmVwYXJlVXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuICE9PSB0eXBlb2Ygb2xkUHJvcHMuY2hpbGRyZW4gJiYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gdHlwZSA9PT0gJ3RleHRhcmVhJyB8fCB0eXBlID09PSAnb3B0aW9uJyB8fCB0eXBlID09PSAnbm9zY3JpcHQnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCAhPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0ZXh0LCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuICB9XG5cbiAgdmFyIHRleHROb2RlID0gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dE5vZGUpO1xuICByZXR1cm4gdGV4dE5vZGU7XG59XG4vLyBpZiBhIGNvbXBvbmVudCBqdXN0IGltcG9ydHMgUmVhY3RET00gKGUuZy4gZm9yIGZpbmRET01Ob2RlKS5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIHNldFRpbWVvdXQgb3IgY2xlYXJUaW1lb3V0LlxuXG52YXIgc2NoZWR1bGVUaW1lb3V0ID0gdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIGNhbmNlbFRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIG5vVGltZW91dCA9IC0xOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBEZXNwaXRlIHRoZSBuYW1pbmcgdGhhdCBtaWdodCBpbXBseSBvdGhlcndpc2UsIHRoaXMgbWV0aG9kIG9ubHlcbiAgLy8gZmlyZXMgaWYgdGhlcmUgaXMgYW4gYFVwZGF0ZWAgZWZmZWN0IHNjaGVkdWxlZCBkdXJpbmcgbW91bnRpbmcuXG4gIC8vIFRoaXMgaGFwcGVucyBpZiBgZmluYWxpemVJbml0aWFsQ2hpbGRyZW5gIHJldHVybnMgYHRydWVgICh3aGljaCBpdFxuICAvLyBkb2VzIHRvIGltcGxlbWVudCB0aGUgYGF1dG9Gb2N1c2AgYXR0cmlidXRlIG9uIHRoZSBjbGllbnQpLiBCdXRcbiAgLy8gdGhlcmUgYXJlIGFsc28gb3RoZXIgY2FzZXMgd2hlbiB0aGlzIG1pZ2h0IGhhcHBlbiAoc3VjaCBhcyBwYXRjaGluZ1xuICAvLyB1cCB0ZXh0IGNvbnRlbnQgZHVyaW5nIGh5ZHJhdGlvbiBtaXNtYXRjaCkuIFNvIHdlJ2xsIGNoZWNrIHRoaXMgYWdhaW4uXG4gIGlmIChzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIG5ld1Byb3BzKSkge1xuICAgIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBVcGRhdGUgdGhlIHByb3BzIGhhbmRsZSBzbyB0aGF0IHdlIGtub3cgd2hpY2ggcHJvcHMgYXJlIHRoZSBvbmVzIHdpdGhcbiAgLy8gd2l0aCBjdXJyZW50IGV2ZW50IGhhbmRsZXJzLlxuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIG5ld1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIERPTSBub2RlLlxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyk7XG59XG5mdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBjb250YWluZXIpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXI7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH0gLy8gVGhpcyBjb250YWluZXIgbWlnaHQgYmUgdXNlZCBmb3IgYSBwb3J0YWwuXG4gIC8vIElmIHNvbWV0aGluZyBpbnNpZGUgYSBwb3J0YWwgaXMgY2xpY2tlZCwgdGhhdCBjbGljayBzaG91bGQgYnViYmxlXG4gIC8vIHRocm91Z2ggdGhlIFJlYWN0IHRyZWUuIEhvd2V2ZXIsIG9uIE1vYmlsZSBTYWZhcmkgdGhlIGNsaWNrIHdvdWxkXG4gIC8vIG5ldmVyIGJ1YmJsZSB0aHJvdWdoIHRoZSAqRE9NKiB0cmVlIHVubGVzcyBhbiBhbmNlc3RvciB3aXRoIG9uY2xpY2tcbiAgLy8gZXZlbnQgZXhpc3RzLiBTbyB3ZSB3b3VsZG4ndCBzZWUgaXQgYW5kIGRpc3BhdGNoIGl0LlxuICAvLyBUaGlzIGlzIHdoeSB3ZSBlbnN1cmUgdGhhdCBub24gUmVhY3Qgcm9vdCBjb250YWluZXJzIGhhdmUgaW5saW5lIG9uY2xpY2tcbiAgLy8gZGVmaW5lZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTkxOFxuXG5cbiAgdmFyIHJlYWN0Um9vdENvbnRhaW5lciA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gIGlmICgocmVhY3RSb290Q29udGFpbmVyID09PSBudWxsIHx8IHJlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSAmJiBwYXJlbnROb2RlLm9uY2xpY2sgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50SW5zdGFuY2UsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbn1cbmZ1bmN0aW9uIGluc2VydEluQ29udGFpbmVyQmVmb3JlKGNvbnRhaW5lciwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEUkMV07XG4gIHZhciBkaXNwbGF5ID0gc3R5bGVQcm9wICE9PSB1bmRlZmluZWQgJiYgc3R5bGVQcm9wICE9PSBudWxsICYmIHN0eWxlUHJvcC5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpID8gc3R5bGVQcm9wLmRpc3BsYXkgOiBudWxsO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZSgnZGlzcGxheScsIGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB2YXIgYm9keSA9IGNvbnRhaW5lci5ib2R5O1xuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgYm9keS50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodGV4dCA9PT0gJycgfHwgaW5zdGFuY2Uubm9kZVR5cGUgIT09IFRFWFRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgdGV4dCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEE7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7IC8vIFRPRE86IFBvc3NpYmx5IGRlZmVyIHRoaXMgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSB3aGVyZSBhbGwgdGhlIGV2ZW50c1xuICAvLyBnZXQgYXR0YWNoZWQuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICByZXR1cm4gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHBhcmVudE5hbWVzcGFjZSk7XG59XG5mdW5jdGlvbiBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0SW5zdGFuY2UpO1xuICByZXR1cm4gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSA7XG59XG52YXIgY2xpZW50SWQgPSAwO1xuZnVuY3Rpb24gbWFrZUNsaWVudElkSW5ERVYod2Fybk9uQWNjZXNzSW5ERVYpIHtcbiAgdmFyIGlkID0gJ3I6JyArIChjbGllbnRJZCsrKS50b1N0cmluZygzNik7XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRTtcbn1cbmZ1bmN0aW9uIG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QoYXR0ZW1wdFRvUmVhZFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX09QQVFVRV9JRF9UWVBFLFxuICAgIHRvU3RyaW5nOiBhdHRlbXB0VG9SZWFkVmFsdWUsXG4gICAgdmFsdWVPZjogYXR0ZW1wdFRvUmVhZFZhbHVlXG4gIH07XG59XG5mdW5jdGlvbiBwcmVwYXJlUG9ydGFsTW91bnQocG9ydGFsSW5zdGFuY2UpIHtcbiAge1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHBvcnRhbEluc3RhbmNlKTtcbiAgfVxufVxuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0RmliZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbFByb3BzS2V5ID0gJ19fcmVhY3RQcm9wcyQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSAnX19yZWFjdENvbnRhaW5lciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRzJCcgKyByYW5kb21LZXk7XG5mdW5jdGlvbiBwcmVjYWNoZUZpYmVyTm9kZShob3N0SW5zdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaG9zdEluc3Q7XG59XG5mdW5jdGlvbiBtYXJrQ29udGFpbmVyQXNSb290KGhvc3RSb290LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBob3N0Um9vdDtcbn1cbmZ1bmN0aW9uIHVubWFya0NvbnRhaW5lckFzUm9vdChub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJNYXJrZWRBc1Jvb3Qobm9kZSkge1xuICByZXR1cm4gISFub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xufSAvLyBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgSG9zdENvbXBvbmVudCBvciBIb3N0VGV4dCBmaWJlciBhbmNlc3Rvci5cbi8vIElmIHRoZSB0YXJnZXQgbm9kZSBpcyBwYXJ0IG9mIGEgaHlkcmF0ZWQgb3Igbm90IHlldCByZW5kZXJlZCBzdWJ0cmVlLCB0aGVuXG4vLyB0aGlzIG1heSBhbHNvIHJldHVybiBhIFN1c3BlbnNlQ29tcG9uZW50IG9yIEhvc3RSb290IHRvIGluZGljYXRlIHRoYXQuXG4vLyBDb25jZXB0dWFsbHkgdGhlIEhvc3RSb290IGZpYmVyIGlzIGEgY2hpbGQgb2YgdGhlIENvbnRhaW5lciBub2RlLiBTbyBpZiB5b3Vcbi8vIHBhc3MgdGhlIENvbnRhaW5lciBub2RlIGFzIHRoZSB0YXJnZXROb2RlLCB5b3Ugd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHRoZVxuLy8gSG9zdFJvb3QgYmFjay4gVG8gZ2V0IHRvIHRoZSBIb3N0Um9vdCwgeW91IG5lZWQgdG8gcGFzcyBhIGNoaWxkIG9mIGl0LlxuLy8gVGhlIHNhbWUgdGhpbmcgYXBwbGllcyB0byBTdXNwZW5zZSBib3VuZGFyaWVzLlxuXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKSB7XG4gIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICBpZiAodGFyZ2V0SW5zdCkge1xuICAgIC8vIERvbid0IHJldHVybiBIb3N0Um9vdCBvciBTdXNwZW5zZUNvbXBvbmVudCBoZXJlLlxuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9IC8vIElmIHRoZSBkaXJlY3QgZXZlbnQgdGFyZ2V0IGlzbid0IGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUsIHdlIG5lZWQgdG8gbG9va1xuICAvLyB0byBzZWUgaWYgb25lIG9mIGl0cyBwYXJlbnRzIGlzIGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUuXG5cblxuICB2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcblxuICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgIC8vIFdlJ2xsIGNoZWNrIGlmIHRoaXMgaXMgYSBjb250YWluZXIgcm9vdCB0aGF0IGNvdWxkIGluY2x1ZGVcbiAgICAvLyBSZWFjdCBub2RlcyBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlyc3QgYmVjYXVzZVxuICAgIC8vIGlmIHdlJ3JlIGEgY2hpbGQgb2YgYSBkZWh5ZHJhdGVkIGNvbnRhaW5lciwgd2UgbmVlZCB0byBmaXJzdFxuICAgIC8vIGZpbmQgdGhhdCBpbm5lciBjb250YWluZXIgYmVmb3JlIG1vdmluZyBvbiB0byBmaW5kaW5nIHRoZSBwYXJlbnRcbiAgICAvLyBpbnN0YW5jZS4gTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIHRoaXMgZmllbGQgb24gIHRoZSB0YXJnZXROb2RlXG4gICAgLy8gaXRzZWxmIGJlY2F1c2UgdGhlIGZpYmVycyBhcmUgY29uY2VwdHVhbGx5IGJldHdlZW4gdGhlIGNvbnRhaW5lclxuICAgIC8vIG5vZGUgYW5kIHRoZSBmaXJzdCBjaGlsZC4gSXQgaXNuJ3Qgc3Vycm91bmRpbmcgdGhlIGNvbnRhaW5lciBub2RlLlxuICAgIC8vIElmIGl0J3Mgbm90IGEgY29udGFpbmVyLCB3ZSBjaGVjayBpZiBpdCdzIGFuIGluc3RhbmNlLlxuICAgIHRhcmdldEluc3QgPSBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8IHBhcmVudE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICBpZiAodGFyZ2V0SW5zdCkge1xuICAgICAgLy8gU2luY2UgdGhpcyB3YXNuJ3QgdGhlIGRpcmVjdCB0YXJnZXQgb2YgdGhlIGV2ZW50LCB3ZSBtaWdodCBoYXZlXG4gICAgICAvLyBzdGVwcGVkIHBhc3QgZGVoeWRyYXRlZCBET00gbm9kZXMgdG8gZ2V0IGhlcmUuIEhvd2V2ZXIgdGhleSBjb3VsZFxuICAgICAgLy8gYWxzbyBoYXZlIGJlZW4gbm9uLVJlYWN0IG5vZGVzLiBXZSBuZWVkIHRvIGFuc3dlciB3aGljaCBvbmUuXG4gICAgICAvLyBJZiB3ZSB0aGUgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiwgdGhlbiB0aGVyZSBjYW4ndCBiZVxuICAgICAgLy8gYSBuZXN0ZWQgc3VzcGVuc2UgYm91bmRhcnkgd2l0aGluIGl0LiBTbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBmYXN0XG4gICAgICAvLyBiYWlsb3V0LiBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIHBlb3BsZSBhZGQgbm9uLVJlYWN0IGNoaWxkcmVuIHRvXG4gICAgICAvLyB0aGUgdHJlZSwgaXQgaXMgdXNpbmcgYSByZWYgdG8gYSBjaGlsZC1sZXNzIERPTSBub2RlLlxuICAgICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IG5lZWQgdG8gY2hlY2sgb25lIG9mIHRoZSBmaWJlcnMgYmVjYXVzZSBpZiBpdFxuICAgICAgLy8gaGFzIGV2ZXIgZ29uZSBmcm9tIGhhdmluZyBjaGlsZHJlbiB0byBkZWxldGluZyB0aGVtIG9yIHZpY2UgdmVyc2FcbiAgICAgIC8vIGl0IHdvdWxkIGhhdmUgZGVsZXRlZCB0aGUgZGVoeWRyYXRlZCBib3VuZGFyeSBuZXN0ZWQgaW5zaWRlIGFscmVhZHkuXG4gICAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgSG9zdFJvb3Qgc3RhcnRzIG91dCB3aXRoIGFuIGFsdGVybmF0ZSBpdCBtaWdodFxuICAgICAgLy8gaGF2ZSBvbmUgb24gdGhlIGFsdGVybmF0ZSBzbyB3ZSBuZWVkIHRvIGNoZWNrIGluIGNhc2UgdGhpcyB3YXMgYVxuICAgICAgLy8gcm9vdC5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSB0YXJnZXRJbnN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKHRhcmdldEluc3QuY2hpbGQgIT09IG51bGwgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBOZXh0IHdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgbm9kZSB0aGF0IHNraXBwZWQgcGFzdCBpc1xuICAgICAgICAvLyBuZXN0ZWQgd2l0aGluIGEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbmQgaWYgc28sIHdoaWNoIG9uZS5cbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgZm91bmQgYSBzdXNwZW5zZSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3RcbiAgICAgICAgICAvLyBoeWRyYXRlZCBpdCB5ZXQuIEV2ZW4gdGhvdWdoIHdlIGxlYXZlIHRoZSBjb21tZW50cyBpbiB0aGVcbiAgICAgICAgICAvLyBET00gYWZ0ZXIgaHlkcmF0aW5nLCBhbmQgdGhlcmUgYXJlIGJvdW5kYXJpZXMgaW4gdGhlIERPTVxuICAgICAgICAgIC8vIHRoYXQgY291bGQgYWxyZWFkeSBiZSBoeWRyYXRlZCwgd2Ugd291bGRuJ3QgaGF2ZSBmb3VuZCB0aGVtXG4gICAgICAgICAgLy8gdGhyb3VnaCB0aGlzIHBhc3Mgc2luY2UgaWYgdGhlIHRhcmdldCBpcyBoeWRyYXRlZCBpdCB3b3VsZFxuICAgICAgICAgIC8vIGhhdmUgaGFkIGFuIGludGVybmFsSW5zdGFuY2VLZXkgb24gaXQuXG4gICAgICAgICAgLy8gTGV0J3MgZ2V0IHRoZSBmaWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN1c3BlbnNlQ29tcG9uZW50XG4gICAgICAgICAgLy8gYXMgdGhlIGRlZXBlc3QgaW5zdGFuY2UuXG4gICAgICAgICAgdmFyIHRhcmdldFN1c3BlbnNlSW5zdCA9IHN1c3BlbnNlSW5zdGFuY2VbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U3VzcGVuc2VJbnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3VzcGVuc2VJbnN0O1xuICAgICAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgZmluZCBhIEZpYmVyIG9uIHRoZSBjb21tZW50LCBpdCBtaWdodCBiZSBiZWNhdXNlXG4gICAgICAgICAgLy8gd2UgaGF2ZW4ndCBnb3R0ZW4gdG8gaHlkcmF0ZSBpdCB5ZXQuIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIGFcbiAgICAgICAgICAvLyBwYXJlbnQgYm91bmRhcnkgdGhhdCBoYXNuJ3QgYWJvdmUgdGhpcyBvbmUgc28gd2UgbmVlZCB0byBmaW5kXG4gICAgICAgICAgLy8gdGhlIG91dGVyIG1vc3QgdGhhdCBpcyBrbm93bi5cblxuXG4gICAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7IC8vIElmIHdlIGRvbid0IGZpbmQgb25lLCB0aGVuIHRoYXQgc2hvdWxkIG1lYW4gdGhhdCB0aGUgcGFyZW50XG4gICAgICAgICAgLy8gaG9zdCBjb21wb25lbnQgYWxzbyBoYXNuJ3QgaHlkcmF0ZWQgeWV0LiBXZSBjYW4gcmV0dXJuIGl0XG4gICAgICAgICAgLy8gYmVsb3cgc2luY2UgaXQgd2lsbCBiYWlsIG91dCBvbiB0aGUgaXNNb3VudGVkIGNoZWNrIGxhdGVyLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBub2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG5cbiAgaWYgKGluc3QpIHtcbiAgICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0IHx8IGluc3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIHJldHVybiBpbnN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH0gLy8gV2l0aG91dCB0aGlzIGZpcnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBuZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIgY29uZnVzaW5nLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImdldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xudmFyIGZpYmVyU3RhY2s7XG5cbntcbiAgZmliZXJTdGFjayA9IFtdO1xufVxuXG52YXIgaW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4XTtcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gY3Vyc29yLmN1cnJlbnQ7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gZmliZXI7XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xufVxuXG52YXIgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0O1xuXG57XG4gIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dCA9IHt9O1xufVxuXG52YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xufSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG5cbnZhciBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KTsgLy8gQSBjdXJzb3IgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udGV4dCBoYXMgY2hhbmdlZC5cblxudmFyIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZmFsc2UpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBjb250ZXh0IG9iamVjdCB0aGF0IHdhcyBvbiB0aGUgc3RhY2suXG4vLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbi8vIHB1c2hlZCB0aGUgbmV4dCBjb250ZXh0IHByb3ZpZGVyLCBhbmQgbm93IG5lZWQgdG8gbWVyZ2UgdGhlaXIgY29udGV4dHMuXG5cbnZhciBwcmV2aW91c0NvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIpIHtcbiAge1xuICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgICAgLy8gd2UgbWF5IGhhdmUgYWxyZWFkeSBwdXNoZWQgaXRzIG93biBjaGlsZCBjb250ZXh0IG9uIHRoZSBzdGFjay4gQSBjb250ZXh0XG4gICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gdHlwZS5jb250ZXh0VHlwZXM7XG5cbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICB9IC8vIEF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIHVubWFza2VkIGNvbnRleHQgaGFzIGNoYW5nZWQuXG4gICAgLy8gRmFpbGluZyB0byBkbyB0aGlzIHdpbGwgcmVzdWx0IGluIHVubmVjZXNzYXJ5IGNhbGxzIHRvIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuXG4gICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9PT0gdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSk7XG4gICAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gICAgLy8gQ29udGV4dCBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgY29tcG9uZW50IGlzIGluc3RhbnRpYXRlZCBzbyBjaGVjayBmb3IgaW5zdGFuY2UuXG5cblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NvbnRleHRDaGFuZ2VkKCkge1xuICB7XG4gICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlciwgY29udGV4dCwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICBpZiAoIShjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgdHlwZSwgcGFyZW50Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7IC8vIFRPRE8gKGJ2YXVnaG4pIFJlcGxhY2UgdGhpcyBiZWhhdmlvciB3aXRoIGFuIGludmFyaWFudCgpIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJykgKyBcIi5nZXRDaGlsZENvbnRleHQoKToga2V5IFxcXCJcIiArIGNvbnRleHRLZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjaGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0LCAnY2hpbGQgY29udGV4dCcsIG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBfYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gV2UgcHVzaCB0aGUgY29udGV4dCBhcyBlYXJseSBhcyBwb3NzaWJsZSB0byBlbnN1cmUgc3RhY2sgaW50ZWdyaXR5LlxuICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cblxuICAgIHZhciBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IGVtcHR5Q29udGV4dE9iamVjdDsgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBjb250ZXh0IHNvIHdlIGNhbiBtZXJnZSB3aXRoIGl0IGxhdGVyLlxuICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCB0eXBlLCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdpdGggcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7IG5vdCBzdXJlIGlmIGl0XG4gICAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICAgaWYgKCEoaXNGaWJlck1vdW50ZWQoZmliZXIpICYmIGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHN1YnRyZWUgcGFyZW50IHRvIGJlIGEgbW91bnRlZCBjbGFzcyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5jb250ZXh0O1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlICE9PSBudWxsKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRm91bmQgdW5leHBlY3RlZCBkZXRhY2hlZCBzdWJ0cmVlIHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQmxvY2tpbmdSb290ID0gMTtcbnZhciBDb25jdXJyZW50Um9vdCA9IDI7XG5cbnZhciByZW5kZXJlcklEID0gbnVsbDtcbnZhciBpbmplY3RlZEhvb2sgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1RoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrICcgKyAnd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKTsgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5qZWN0ZWQsIHNvIG5vdyBpdCBpcyBzYWZlIHRvIHNldCB1cCBob29rcy5cblxuICAgIGluamVjdGVkSG9vayA9IGhvb2s7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENhdGNoIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyB1bnNhZmUgdG8gdGhyb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLicsIGVycik7XG4gICAgfVxuICB9IC8vIERldlRvb2xzIGV4aXN0c1xuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBvblNjaGVkdWxlUm9vdChyb290LCBjaGlsZHJlbikge1xuICB7XG4gICAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBkaWRFcnJvciA9IChyb290LmN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCB1bmRlZmluZWQsIGRpZEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gICAgU2NoZWR1bGVyX3JlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgU2NoZWR1bGVyX25vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICBTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsXG4gICAgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0xvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlQ2FsbGJhY2tOb2RlID0ge307IC8vIEV4Y2VwdCBmb3IgTm9Qcmlvcml0eSwgdGhlc2UgY29ycmVzcG9uZCB0byBTY2hlZHVsZXIgcHJpb3JpdGllcy4gV2UgdXNlXG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkkMSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSQxID0gOTc7XG52YXIgTG93UHJpb3JpdHkkMSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSQxID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkkMSA9IDkwO1xudmFyIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyX3Nob3VsZFlpZWxkO1xudmFyIHJlcXVlc3RQYWludCA9IC8vIEZhbGwgYmFjayBncmFjZWZ1bGx5IGlmIHdlJ3JlIHJ1bm5pbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBTY2hlZHVsZXIuXG5TY2hlZHVsZXJfcmVxdWVzdFBhaW50ICE9PSB1bmRlZmluZWQgPyBTY2hlZHVsZXJfcmVxdWVzdFBhaW50IDogZnVuY3Rpb24gKCkge307XG52YXIgc3luY1F1ZXVlID0gbnVsbDtcbnZhciBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xudmFyIGluaXRpYWxUaW1lTXMkMSA9IFNjaGVkdWxlcl9ub3ckMSgpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBtb2Rlcm4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBwZXJmb3JtYW5jZS5ub3dgLiBJblxuLy8gb2xkZXIgYnJvd3NlcnMsIFNjaGVkdWxlciBmYWxscyBiYWNrIHRvIGBEYXRlLm5vd2AsIHdoaWNoIHJldHVybnMgYSBVbml4XG4vLyB0aW1lc3RhbXAuIEluIHRoYXQgY2FzZSwgc3VidHJhY3QgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHRvIHNpbXVsYXRlXG4vLyB0aGUgYmVoYXZpb3Igb2YgcGVyZm9ybWFuY2Uubm93IGFuZCBrZWVwIG91ciB0aW1lcyBzbWFsbCBlbm91Z2ggdG8gZml0XG4vLyB3aXRoaW4gMzIgYml0cy5cbi8vIFRPRE86IENvbnNpZGVyIGxpZnRpbmcgdGhpcyBpbnRvIFNjaGVkdWxlci5cblxudmFyIG5vdyA9IGluaXRpYWxUaW1lTXMkMSA8IDEwMDAwID8gU2NoZWR1bGVyX25vdyQxIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gU2NoZWR1bGVyX25vdyQxKCkgLSBpbml0aWFsVGltZU1zJDE7XG59O1xuZnVuY3Rpb24gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHN3aXRjaCAoU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICBjYXNlIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHkkMjtcblxuICAgIGNhc2UgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTpcbiAgICAgIHJldHVybiBMb3dQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eSQxO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHkkMjpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0lkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQxKHJlYWN0UHJpb3JpdHlMZXZlbCwgZm4pIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBmbik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrKHJlYWN0UHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTeW5jQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgLy8gUHVzaCB0aGlzIGNhbGxiYWNrIGludG8gYW4gaW50ZXJuYWwgcXVldWUuIFdlJ2xsIGZsdXNoIHRoZXNlIGVpdGhlciBpblxuICAvLyB0aGUgbmV4dCB0aWNrLCBvciBlYXJsaWVyIGlmIHNvbWV0aGluZyBjYWxscyBgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZWAuXG4gIGlmIChzeW5jUXVldWUgPT09IG51bGwpIHtcbiAgICBzeW5jUXVldWUgPSBbY2FsbGJhY2tdOyAvLyBGbHVzaCB0aGUgcXVldWUgaW4gdGhlIG5leHQgdGljaywgYXQgdGhlIGVhcmxpZXN0LlxuXG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQdXNoIG9udG8gZXhpc3RpbmcgcXVldWUuIERvbid0IG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBiZWNhdXNlXG4gICAgLy8gd2UgYWxyZWFkeSBzY2hlZHVsZWQgb25lIHdoZW4gd2UgY3JlYXRlZCB0aGUgcXVldWUuXG4gICAgc3luY1F1ZXVlLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGZha2VDYWxsYmFja05vZGU7XG59XG5mdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgaWYgKGNhbGxiYWNrTm9kZSAhPT0gZmFrZUNhbGxiYWNrTm9kZSkge1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCkge1xuICBpZiAoaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgbm9kZSA9IGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlO1xuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sobm9kZSk7XG4gIH1cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpIHtcbiAgaWYgKCFpc0ZsdXNoaW5nU3luY1F1ZXVlICYmIHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFByZXZlbnQgcmUtZW50cmFuY3kuXG4gICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IHRydWU7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF9pc1N5bmMyID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9xdWV1ZSA9IHN5bmNRdWV1ZTtcbiAgICAgICAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAoOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBfcXVldWVbaV07XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhfaXNTeW5jMik7XG4gICAgICAgICAgICB9IHdoaWxlIChjYWxsYmFjayAhPT0gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3luY1F1ZXVlID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJvd3MsIGxlYXZlIHRoZSByZW1haW5pbmcgY2FsbGJhY2tzIG9uIHRoZSBxdWV1ZS5cbiAgICAgICAgaWYgKHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICAgIH0gLy8gUmVzdW1lIGZsdXNoaW5nIGluIHRoZSBuZXh0IHRpY2tcblxuXG4gICAgICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxudmFyIE5vTW9kZSA9IDA7XG52YXIgU3RyaWN0TW9kZSA9IDE7IC8vIFRPRE86IFJlbW92ZSBCbG9ja2luZ01vZGUgYW5kIENvbmN1cnJlbnRNb2RlIGJ5IHJlYWRpbmcgZnJvbSB0aGUgcm9vdFxuLy8gdGFnIGluc3RlYWRcblxudmFyIEJsb2NraW5nTW9kZSA9IDI7XG52YXIgQ29uY3VycmVudE1vZGUgPSA0O1xudmFyIFByb2ZpbGVNb2RlID0gODtcbnZhciBEZWJ1Z1RyYWNpbmdNb2RlID0gMTY7XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIE5vVHJhbnNpdGlvbiA9IDA7XG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSB7XG4gIHJldHVybiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xufVxuXG52YXIgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxufTtcblxue1xuICB2YXIgZmluZFN0cmljdFJvb3QgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICB2YXIgbWF5YmVTdHJpY3RSb290ID0gbnVsbDtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF5YmVTdHJpY3RSb290O1xuICB9O1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgaWYgKGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSBkbyBhbiBpbml0aWFsIHBhc3MgdG8gZ2F0aGVyIGNvbXBvbmVudCBuYW1lc1xuICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfSAvLyBGaW5hbGx5LCB3ZSBmbHVzaCBhbGwgdGhlIHdhcm5pbmdzXG4gICAgLy8gVU5TQUZFXyBvbmVzIGJlZm9yZSB0aGUgZGVwcmVjYXRlZCBvbmVzLCBzaW5jZSB0aGV5J2xsIGJlICdsb3VkZXInXG5cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBzb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCBcIiArICdyZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczIpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMzKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBcIiArICdjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczUgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIHZhciBzdHJpY3RSb290ID0gZmluZFN0cmljdFJvb3QoZmliZXIpO1xuXG4gICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuXG4gICAgaWYgKGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmdzRm9yUm9vdCA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCk7XG5cbiAgICBpZiAoZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzICE9IG51bGwgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHdhcm5pbmdzRm9yUm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhcm5pbmdzRm9yUm9vdCA9IFtdO1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5pbmdzRm9yUm9vdC5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgaWYgKGZpYmVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0RmliZXIgPSBmaWJlckFycmF5WzBdO1xuICAgICAgdmFyIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICBlcnJvcignTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuJyArICdcXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyAnICsgJ3VzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2xlZ2FjeS1jb250ZXh0Jywgc29ydGVkTmFtZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGJhc2VQcm9wcyk7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxuLy8gTWF4IDMxIGJpdCBpbnRlZ2VyLiBUaGUgbWF4IGludGVnZXIgc2l6ZSBpbiBWOCBmb3IgMzItYml0IHN5c3RlbXMuXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBuZXh0VmFsdWUpIHtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcHJvdmlkZXJGaWJlcik7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuXG4gICAge1xuICAgICAgaWYgKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gbnVsbCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihwcm92aWRlckZpYmVyKSB7XG4gIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgaWYgKG9iamVjdElzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAvLyBObyBjaGFuZ2VcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSB0eXBlb2YgY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicgPyBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyhvbGRWYWx1ZSwgbmV3VmFsdWUpIDogTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuXG4gICAge1xuICAgICAgaWYgKChjaGFuZ2VkQml0cyAmIE1BWF9TSUdORURfMzFfQklUX0lOVCkgIT09IGNoYW5nZWRCaXRzKSB7XG4gICAgICAgIGVycm9yKCdjYWxjdWxhdGVDaGFuZ2VkQml0czogRXhwZWN0ZWQgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBhICcgKyAnMzEtYml0IGludGVnZXIuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkQml0cyB8IDA7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgdmFyIG5vZGUgPSBwYXJlbnQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgbm9kZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiAhaXNTdWJzZXRPZkxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGFsdGVybmF0ZSB3YXMgdXBkYXRlZCwgd2hpY2ggbWVhbnMgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBhbmNlc3RvciBwYXRoIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcykge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQgJiYgKGRlcGVuZGVuY3kub2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIGZvcmNlIHVwZGF0ZSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKSk7XG4gICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7IC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cblxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGxpc3QubGFuZXMgPSBtZXJnZUxhbmVzKGxpc3QubGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UgYWxyZWFkeSBmb3VuZCBhIG1hdGNoLCB3ZSBjYW4gc3RvcCB0cmF2ZXJzaW5nIHRoZVxuICAgICAgICAgIC8vIGRlcGVuZGVuY3kgbGlzdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYXZlcnNlIGRvd24uXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICB9XG5cbiAgICBpZiAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2hpbGQuIFRyYXZlcnNlIHRvIG5leHQgc2libGluZy5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICB3aGlsZSAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWJsaW5nID0gbmV4dEZpYmVyLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICBuZXh0RmliZXIgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIE5vIG1vcmUgc2libGluZ3MuIFRyYXZlcnNlIHVwLlxuXG5cbiAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXM7XG5cbiAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdENvbnRleHQgPSBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuXG4gICAgaWYgKGZpcnN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUoZGVwZW5kZW5jaWVzLmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgLy8gQ29udGV4dCBsaXN0IGhhcyBhIHBlbmRpbmcgdXBkYXRlLiBNYXJrIHRoYXQgdGhpcyBmaWJlciBwZXJmb3JtZWQgd29yay5cbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH0gLy8gUmVzZXQgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgbGlzdFxuXG5cbiAgICAgIGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcm5pbmcgd291bGQgZmlyZSBpZiB5b3UgcmVhZCBjb250ZXh0IGluc2lkZSBhIEhvb2sgbGlrZSB1c2VNZW1vLlxuICAgIC8vIFVubGlrZSB0aGUgY2xhc3MgY2hlY2sgYmVsb3csIGl0J3Mgbm90IGVuZm9yY2VkIGluIHByb2R1Y3Rpb24gZm9yIHBlcmYuXG4gICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID09PSBjb250ZXh0KSA7IGVsc2UgaWYgKG9ic2VydmVkQml0cyA9PT0gZmFsc2UgfHwgb2JzZXJ2ZWRCaXRzID09PSAwKSA7IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0czsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cblxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZWRCaXRzICE9PSAnbnVtYmVyJyB8fCBvYnNlcnZlZEJpdHMgPT09IE1BWF9TSUdORURfMzFfQklUX0lOVCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHM7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG9ic2VydmVkQml0czogcmVzb2x2ZWRPYnNlcnZlZEJpdHMsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0Q29udGV4dERlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgIGlmICghKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5IGZvciB0aGlzIGNvbXBvbmVudC4gQ3JlYXRlIGEgbmV3IGxpc3QuXG5cblxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtLFxuICAgICAgICByZXNwb25kZXJzOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA7XG59XG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7IC8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG5cbnZhciBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlO1xuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDoge1xuICAgICAgcGVuZGluZzogbnVsbFxuICAgIH0sXG4gICAgZWZmZWN0czogbnVsbFxuICB9O1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBDbG9uZSB0aGUgdXBkYXRlIHF1ZXVlIGZyb20gY3VycmVudC4gVW5sZXNzIGl0J3MgYWxyZWFkeSBhIGNsb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICB2YXIgY2xvbmUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBldmVudFRpbWU6IGV2ZW50VGltZSxcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBzaGFyZWRRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuXG4gIHtcbiAgICBpZiAoY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJiAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSAoc2V0U3RhdGUsIHJlcGxhY2VTdGF0ZSwgb3IgZm9yY2VVcGRhdGUpIHdhcyBzY2hlZHVsZWQgJyArICdmcm9tIGluc2lkZSBhbiB1cGRhdGUgZnVuY3Rpb24uIFVwZGF0ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHB1cmUsICcgKyAnd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgJyArICdjYWxsYmFjay4nKTtcblxuICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgLy8gcGhhc2UuIFRoZXkgc2hvdWxkIGJlIGRpc2NhcmRlZCBpZiB0aGUgcmVuZGVyIGlzIGFib3J0ZWQuIFRoZXJlZm9yZSxcbiAgLy8gd2Ugc2hvdWxkIG9ubHkgcHV0IHRoZW0gb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUsIG5vdCB0aGUgY3VycmVudCBvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgICAgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgdGhlIHNhbWUgYXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW5cbiAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgIC8vIGEgY2hpbGQuIFNpbmNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgb25seSB0byB0aGUgd29yay1pblxuICAgICAgLy8gLXByb2dyZXNzIHF1ZXVlLCB3ZSBuZWVkIHRvIGNsb25lIHRoZSB1cGRhdGVzLiBXZSB1c3VhbGx5IGNsb25lIGR1cmluZ1xuICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBza2lwcGVkIG92ZXIgdGhlIHBhcmVudCB3aGVuIHdlIGJhaWxlZCBvdXQuXG4gICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsO1xuICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlLmV2ZW50VGltZSxcbiAgICAgICAgICAgIGxhbmU6IHVwZGF0ZS5sYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwpOyAvLyBBcHBlbmQgdGhlIGNhcHR1cmVkIHVwZGF0ZSB0aGUgZW5kIG9mIHRoZSBjbG9uZWQgbGlzdC5cblxuXG4gICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmFzZSB1cGRhdGVzLlxuICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG5cbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICB9XG5cbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgICB9IC8vIFN0YXRlIG9iamVjdFxuXG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGFydGlhbCBzdGF0ZSBvYmplY3RcbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOdWxsIGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgYXMgbm8tb3BzLlxuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gICAgICAgIHJldHVybiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG4gICAgICB2YXIgdXBkYXRlRXZlbnRUaW1lID0gdXBkYXRlLmV2ZW50VGltZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgbmV3TGFuZXMgPSBtZXJnZUxhbmVzKG5ld0xhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBuZXdTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgbmV3U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDYWxsYmFjaztcbiAgICAgICAgICB2YXIgZWZmZWN0cyA9IHF1ZXVlLmVmZmVjdHM7XG5cbiAgICAgICAgICBpZiAoZWZmZWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcXVldWUuZWZmZWN0cyA9IFt1cGRhdGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZmZlY3RzLnB1c2godXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG5cbiAgICAgIGlmICh1cGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGEgcmVkdWNlci4gQWRkIHRoZSBuZXdcbiAgICAgICAgICAvLyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQga2VlcCBwcm9jZXNzaW5nLlxuICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAvLyB1bnJhdmVsIHRoZW0gd2hlbiB0cmFuc2ZlcnJpbmcgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICAgICAgICAgIHZhciBfZmlyc3RQZW5kaW5nVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZSA9IF9maXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBuZXdGaXJzdEJhc2VVcGRhdGU7XG4gICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTsgLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lIGFyZSBwcm9wcyBhbmQgY29udGV4dC4gV2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHRoZVxuICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgICAvLyBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdHJpY2t5OyBidXQgd2UnbGwgaGF2ZSB0byBhY2NvdW50IGZvclxuICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobmV3TGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbmV3TGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogXCIgKyBjYWxsYmFjayApO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHtcbiAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSkge1xuICAvLyBDb21taXQgdGhlIGVmZmVjdHNcbiAgdmFyIGVmZmVjdHMgPSBmaW5pc2hlZFF1ZXVlLmVmZmVjdHM7XG4gIGZpbmlzaGVkUXVldWUuZWZmZWN0cyA9IG51bGw7XG5cbiAgaWYgKGVmZmVjdHMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZmZlY3QgPSBlZmZlY3RzW2ldO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZWZmZWN0LmNhbGxiYWNrO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjaztcbnZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbnZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGU7XG5cbntcbiAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyAnXycgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG5cbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gIC8vIGl0IGNhdXNlcyBwcm9ibGVtcy4gVGhpcyBpcyBtZWFudCB0byBnaXZlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3JcbiAgLy8gUmVhY3RET00xNS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihyZWFjdERPTTE2Q29tcG9uZW50LFxuICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gIC8vIGV4Y2VwdGlvbi5cblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgJ19wcm9jZXNzQ2hpbGRDb250ZXh0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYXZhaWxhYmxlIGluIFJlYWN0IDE2Ky4gVGhpcyBsaWtlbHkgbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0IGEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQuIFRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgb25seSBvbmUgY29weSBvZiBSZWFjdCAoYW5kIGlkZWFsbHksIHN3aXRjaCB0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAge1xuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCA/IHByZXZTdGF0ZSA6IF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG1lbW9pemVkU3RhdGU7IC8vIE9uY2UgdGhlIHVwZGF0ZSBxdWV1ZSBpcyBlbXB0eSwgcGVyc2lzdCB0aGUgZGVyaXZlZCBzdGF0ZSBvbnRvIHRoZVxuICAvLyBiYXNlIHN0YXRlLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFF1ZXVlIGlzIGFsd2F5cyBub24tbnVsbCBmb3IgY2xhc3Nlc1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgIHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IG1lbW9pemVkU3RhdGU7XG4gIH1cbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICAgIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgaWYgKCFyZW5kZXJQcmVzZW50KSB7XG4gICAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgdHlwZW9mIGN0b3IucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj8nLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlICYmICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiYgIWluc3RhbmNlLnN0YXRlKSB7XG4gICAgICBlcnJvcignZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiYgIWluc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgIGVycm9yKCdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGUpIHtcbiAgICAgIGVycm9yKCdjb250ZXh0VHlwZSB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuYWRkKGN0b3IpO1xuXG4gICAgICAgIGVycm9yKCclcyBkZWNsYXJlcyBib3RoIGNvbnRleHRUeXBlcyBhbmQgY29udGV4dFR5cGUgc3RhdGljIHByb3BlcnRpZXMuICcgKyAnVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmIHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gJyArICdzaG91bGRDb21wb25lbnRVcGRhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZXh0ZW5kaW5nIFJlYWN0LlB1cmVDb21wb25lbnQuICcgKyAnUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQSBwdXJlIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGhhc011dGF0ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzICE9PSBuZXdQcm9wcztcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICBlcnJvcignU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLicgKyAnIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuJywgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgICBpZiAoX3N0YXRlICYmICh0eXBlb2YgX3N0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5KF9zdGF0ZSkpKSB7XG4gICAgICBlcnJvcignJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0b3IuY2hpbGRDb250ZXh0VHlwZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcignJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICsgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLCBuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gVGhlIGluc3RhbmNlIG5lZWRzIGFjY2VzcyB0byB0aGUgZmliZXIgc28gdGhhdCBpdCBjYW4gc2NoZWR1bGUgdXBkYXRlc1xuXG4gIHNldChpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgcHJvcHMpIHtcbiAgdmFyIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gZmFsc2U7XG4gIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IC8vIEFsbG93IG51bGwgZm9yIGNvbmRpdGlvbmFsIGRlY2xhcmF0aW9uXG4gICAgICBjb250ZXh0VHlwZSA9PT0gbnVsbCB8fCBjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiYgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZDsgLy8gTm90IGEgPENvbnRleHQuQ29uc3VtZXI+XG5cbiAgICAgIGlmICghaXNWYWxpZCAmJiAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAgICBpZiAoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiAnICsgJ1RoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuICcgKyAnVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gJyArICd0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhICcgKyB0eXBlb2YgY29udGV4dFR5cGUgKyAnLic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Qcm92aWRlciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjb250ZXh0VHlwZSkuam9pbignLCAnKSArICd9Lic7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiAnICsgJ2NvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JywgYWRkZW5kdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICBjb250ZXh0ID0gaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IC8vIEluc3RhbnRpYXRlIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cblxuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7XG4gIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSAhPT0gbnVsbCAmJiBpbnN0YW5jZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5zdGFuY2Uuc3RhdGUgOiBudWxsO1xuICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgIC8vIFdhcm4gYWJvdXQgdGhlc2UgbGlmZWN5Y2xlcyBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBtZXRob2RzIHRob3VnaC5cblxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgdmFyIG5ld0FwaU5hbWUgPSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgZXJyb3IoJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzJywgX2NvbXBvbmVudE5hbWUsIG5ld0FwaU5hbWUsIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA6ICcnLCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIFJlYWN0RmliZXJDb250ZXh0IHVzdWFsbHkgdXBkYXRlcyB0aGlzIGNhY2hlIGJ1dCBjYW4ndCBmb3IgbmV3bHktY3JlYXRlZCBpbnN0YW5jZXMuXG5cblxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvICcgKyBcInRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cblxuZnVuY3Rpb24gbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGluc3RhbmNlLnJlZnMgPSBlbXB0eVJlZnNPYmplY3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSAnICsgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArICdJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTsgLy8gSWYgd2UgaGFkIGFkZGl0aW9uYWwgc3RhdGUgdXBkYXRlcyBkdXJpbmcgdGhpcyBsaWZlLWN5Y2xlLCBsZXQnc1xuICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59IC8vIEludm9rZXMgdGhlIHVwZGF0ZSBsaWZlLWN5Y2xlcyBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBzaG91bGRuJ3QgcmVyZW5kZXIuXG5cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA/IHVucmVzb2x2ZWRPbGRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIHVucmVzb2x2ZWROZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyA9PT0gdW5yZXNvbHZlZE5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcztcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nO1xudmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZztcblxudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbntcbiAgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcblxuICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgY2hpbGQuX3N0b3JlID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICsgJ21vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH07XG59XG5cbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5O1xuXG5mdW5jdGlvbiBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCBvbmNlIHdlIHR1cm4gb24gdGhlIHN0cmluZyByZWYgd2FybmluZyBmb3JcbiAgICAgIC8vIGV2ZXJ5b25lLCBiZWNhdXNlIHRoZSBzdHJpY3QgbW9kZSBjYXNlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlbGV2YW50XG4gICAgICBpZiAoKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlIHx8IHdhcm5BYm91dFN0cmluZ1JlZnMpICYmIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKCdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIG1peGVkUmVmKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKCEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFdlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBpbnN0ZWFkLiBMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0ID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5zdCkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArIG1peGVkUmVmICsgXCIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3RyaW5nUmVmID0gJycgKyBtaXhlZFJlZjsgLy8gQ2hlY2sgaWYgcHJldmlvdXMgc3RyaW5nIHJlZiBtYXRjaGVzIG5ldyBzdHJpbmcgcmVmXG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSBudWxsICYmIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVmO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gaW5zdC5yZWZzO1xuXG4gICAgICAgIGlmIChyZWZzID09PSBlbXB0eVJlZnNPYmplY3QpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgbGF6eSBwb29sZWQgZnJvemVuIG9iamVjdCwgc28gd2UgbmVlZCB0byBpbml0aWFsaXplLlxuICAgICAgICAgIHJlZnMgPSBpbnN0LnJlZnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEodHlwZW9mIG1peGVkUmVmID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhIHN0cmluZywgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciBudWxsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgKyBtaXhlZFJlZiArIFwiKSBidXQgbm8gb3duZXIgd2FzIHNldC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBmdW5jdGlvbiBjb21wb25lbnRcXG4yLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYSBjb21wb25lbnQncyByZW5kZXIgbWV0aG9kXFxuMy4gWW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGxvYWRlZFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaXhlZFJlZjtcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICBpZiAocmV0dXJuRmliZXIudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oJywgJykgKyAnfScgOiBuZXdDaGlsZCkgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0Z1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiAnICsgJ3lvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiAnICsgJ09yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LicpO1xuICB9XG59IC8vIFdlIGF2b2lkIGlubGluaW5nIHRoaXMgdG8gYXZvaWQgcG90ZW50aWFsIGRlb3B0cyBmcm9tIHVzaW5nIHRyeS9jYXRjaC5cbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cblxuICAgIGNoaWxkVG9EZWxldGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBUT0RPOiBGb3IgdGhlIHNob3VsZENsb25lIGNhc2UsIHRoaXMgY291bGQgYmUgbWljcm8tb3B0aW1pemVkIGEgYml0IGJ5XG4gICAgLy8gYXNzdW1pbmcgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hpbGQgd2UndmUgYWxyZWFkeSBhZGRlZCBldmVyeXRoaW5nLlxuXG5cbiAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkVG9EZWxldGUgIT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGNoaWxkVG9EZWxldGUgPSBjaGlsZFRvRGVsZXRlLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgLy8ga2V5cyBxdWlja2x5LiBJbXBsaWNpdCAobnVsbCkga2V5cyBnZXQgYWRkZWQgdG8gdGhpcyBzZXQgd2l0aCB0aGVpciBpbmRleFxuICAgIC8vIGluc3RlYWQuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgdmFyIGV4aXN0aW5nQ2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChleGlzdGluZ0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5rZXksIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gIH1cblxuICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgLy8gV2UgY3VycmVudGx5IHNldCBzaWJsaW5nIHRvIG51bGwgYW5kIGluZGV4IHRvIDAgaGVyZSBiZWNhdXNlIGl0IGlzIGVhc3lcbiAgICAvLyB0byBmb3JnZXQgdG8gZG8gYmVmb3JlIHJldHVybmluZyBpdC4gRS5nLiBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLlxuICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudC5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXRlbSBjYW4gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgLy8gVGhpcyBpcyBzaW1wbGVyIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuIFdlIG9ubHkgbmVlZCB0byBkbyBhXG4gICAgLy8gcGxhY2VtZW50IGZvciBpbnNlcnRpbmcgbmV3IGNoaWxkcmVuLlxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgLy8gTW92ZSBiYXNlZCBvbiBpbmRleFxuICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgIH0gLy8gSW5zZXJ0XG5cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFBvcnRhbCB8fCBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fCBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gRnJhZ21lbnQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmcmFnbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCgnJyArIG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZDIgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQyLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkMjtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIG51bGwpO1xuXG4gICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVkMztcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywga2V5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAvLyBuZXcgbm9kZSBmb3IgdGhlIGtleS4gSWYgYm90aCBhcmUgdGV4dCBub2RlcywgdGhleSBtYXRjaC5cbiAgICAgIHZhciBtYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG1hdGNoZWRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywgbmV3Q2hpbGQua2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIzID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjMsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogV2FybnMgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgb3IgbWlzc2luZyBrZXlcbiAgICovXG5cblxuICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrbm93bktleXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvcignRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiAnICsgJ0tleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgJyArICdhY3Jvc3MgdXBkYXRlcy4gTm9uLXVuaXF1ZSBrZXlzIG1heSBjYXVzZSBjaGlsZHJlbiB0byBiZSAnICsgJ2R1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQg4oCUIHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgJyArICdjb3VsZCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi4nLCBrZXkpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtub3duS2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbiwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAvLyBkb24ndCBoYXZlIGJhY2twb2ludGVycyBvbiBmaWJlcnMuIEknbSB0cnlpbmcgdG8gc2VlIGhvdyBmYXIgd2UgY2FuIGdldFxuICAgIC8vIHdpdGggdGhhdCBtb2RlbC4gSWYgaXQgZW5kcyB1cCBub3QgYmVpbmcgd29ydGggdGhlIHRyYWRlb2Zmcywgd2UgY2FuXG4gICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgIC8vIEV2ZW4gd2l0aCBhIHR3byBlbmRlZCBvcHRpbWl6YXRpb24sIHdlJ2Qgd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSB0aGVyZSBhcmUgZmV3IGNoYW5nZXMgYW5kIGJydXRlIGZvcmNlIHRoZSBjb21wYXJpc29uIGluc3RlYWQgb2ZcbiAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAvLyBmb3J3YXJkLW9ubHkgbW9kZSBhbmQgb25seSBnbyBmb3IgdGhlIE1hcCBvbmNlIHdlIG5vdGljZSB0aGF0IHdlIG5lZWRcbiAgICAvLyBsb3RzIG9mIGxvb2sgYWhlYWQuIFRoaXMgZG9lc24ndCBoYW5kbGUgcmV2ZXJzYWwgYXMgd2VsbCBhcyB0d28gZW5kZWRcbiAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAvLyB3b3JrIG9uIEl0ZXJhYmxlcywgd2UnZCBuZWVkIHRvIGNvcHkgdGhlIHdob2xlIHNldC5cbiAgICAvLyBJbiB0aGlzIGZpcnN0IGl0ZXJhdGlvbiwgd2UnbGwganVzdCBsaXZlIHdpdGggaGl0dGluZyB0aGUgYmFkIGNhc2VcbiAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgY29kZSwgYWxzbyB1cGRhdGUgcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcigpIHdoaWNoXG4gICAgLy8gdXNlcyB0aGUgc2FtZSBhbGdvcml0aG0uXG4gICAge1xuICAgICAgLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXdDaGlsZHJlbltpXTtcbiAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyMi5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXIyLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbkl0ZXJhYmxlLCBsYW5lcykge1xuICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgcmVjb25jaWxlQ2hpbGRyZW5BcnJheSgpLFxuICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoISh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgcmVuZGVyaW5nIEdlbmVyYXRvcnMgYmVjYXVzZSBpdCdzIGEgbXV0YXRpb24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEdlbmVyYXRvcnMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9IC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuXG5cbiAgICAgIGlmIChuZXdDaGlsZHJlbkl0ZXJhYmxlLmVudHJpZXMgPT09IGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgLy8gV2UnbGwgZ2V0IGEgZGlmZmVyZW50IGl0ZXJhdG9yIGxhdGVyIGZvciB0aGUgbWFpbiBwYXNzLlxuXG5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgIGlmIChfbmV3Q2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEobmV3Q2hpbGRyZW4gIT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICB2YXIgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlcjMgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIzID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjMsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXI0LmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjQua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyNC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyNCwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgIC8vIHdheSB0byBkZWZpbmUgdGhlbS5cbiAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQgIT09IG51bGwgJiYgY3VycmVudEZpcnN0Q2hpbGQudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIC8vIGFuZCBkZWxldGUgdGhlIGV4aXN0aW5nIG9uZXMuXG5cblxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQudGFnKSB7XG4gICAgICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBCbG9jazpcblxuICAgICAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgZmFsbHRocm91Z2ggaGVyZSBpZiBlbmFibGVCbG9ja3NBUEkgaXMgbm90IG9uLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY2hpbGQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nMyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzKTtcblxuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3RpbmczO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG5cbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgIF9jcmVhdGVkNC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBfY3JlYXRlZDQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcG9ydGFsLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gSG9zdFBvcnRhbCAmJiBjaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gcG9ydGFsLmNvbnRhaW5lckluZm8gJiYgY2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVjdXJzaXZlLlxuICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgLy8gbm90IGFzIGEgZnJhZ21lbnQuIE5lc3RlZCBhcnJheXMgb24gdGhlIG90aGVyIGhhbmQgd2lsbCBiZSB0cmVhdGVkIGFzXG4gICAgLy8gZnJhZ21lbnQgbm9kZXMuIFJlY3Vyc2lvbiBoYXBwZW5zIGF0IHRoZSBub3JtYWwgZmxvdy5cbiAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgLy8gVGhpcyBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYmV0d2VlbiA8PntbLi4uXX08Lz4gYW5kIDw+Li4uPC8+LlxuICAgIC8vIFdlIHRyZWF0IHRoZSBhbWJpZ3VvdXMgY2FzZXMgYWJvdmUgdGhlIHNhbWUuXG4gICAgdmFyIGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsICYmIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiYgbmV3Q2hpbGQua2V5ID09PSBudWxsO1xuXG4gICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgfSAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG5cblxuICAgIHZhciBpc09iamVjdCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsICcnICsgbmV3Q2hpbGQsIGxhbmVzKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAndW5kZWZpbmVkJyAmJiAhaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBjaGlsZCBpcyB1bmRlZmluZWQsIGFuZCB0aGUgcmV0dXJuIGZpYmVyIGlzIGEgY29tcG9zaXRlXG4gICAgICAvLyBjb21wb25lbnQsIHRocm93IGFuIGVycm9yLiBJZiBGaWJlciByZXR1cm4gdHlwZXMgYXJlIGRpc2FibGVkLFxuICAgICAgLy8gd2UgYWxyZWFkeSB0aHJldyBhYm92ZS5cbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSwgd2hpY2ggaGFuZGxlcyBib3RoXG4gICAgICAgIC8vIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBCbG9jazpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKSArIFwiKC4uLik6IE5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gcmVuZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSByZXR1cm4gc3RhdGVtZW50IGlzIG1pc3NpbmcuIE9yLCB0byByZW5kZXIgbm90aGluZywgcmV0dXJuIG51bGwuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgYWxsIHRyZWF0ZWQgYXMgZW1wdHkuXG5cblxuICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmICghKGN1cnJlbnQgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IGN1cnJlbnQuY2hpbGQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcblxuICB3aGlsZSAoY3VycmVudENoaWxkLnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICAgIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgbmV3Q2hpbGQuc2libGluZyA9IG51bGw7XG59IC8vIFJlc2V0IGEgd29ya0luUHJvZ3Jlc3MgY2hpbGQgc2V0IHRvIHByZXBhcmUgaXQgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHZhciBjaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIE5PX0NPTlRFWFQgPSB7fTtcbnZhciBjb250ZXh0U3RhY2tDdXJzb3IkMSA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcblxuZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgaWYgKCEoYyAhPT0gTk9fQ09OVEVYVCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG5cbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgTk9fQ09OVEVYVCwgZmliZXIpO1xuICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gZ2V0Um9vdEhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUpOyAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cblxuICBpZiAoY29udGV4dCA9PT0gbmV4dENvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICAvLyBEbyBub3QgcG9wIHVubGVzcyB0aGlzIEZpYmVyIHByb3ZpZGVkIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gIC8vIHB1c2hIb3N0Q29udGV4dCgpIG9ubHkgcHVzaGVzIEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCAhPT0gZmliZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbnZhciBEZWZhdWx0U3VzcGVuc2VDb250ZXh0ID0gMDsgLy8gVGhlIFN1c3BlbnNlIENvbnRleHQgaXMgc3BsaXQgaW50byB0d28gcGFydHMuIFRoZSBsb3dlciBiaXRzIGlzXG4vLyBpbmhlcml0ZWQgZGVlcGx5IGRvd24gdGhlIHN1YnRyZWUuIFRoZSB1cHBlciBiaXRzIG9ubHkgYWZmZWN0XG4vLyB0aGlzIGltbWVkaWF0ZSBzdXNwZW5zZSBib3VuZGFyeSBhbmQgZ2V0cyByZXNldCBlYWNoIG5ld1xuLy8gYm91bmRhcnkgb3Igc3VzcGVuc2UgbGlzdC5cblxudmFyIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMTsgLy8gU3VidHJlZSBGbGFnczpcbi8vIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCBpbmRpY2F0ZXMgdGhhdCBvbmUgb2Ygb3VyIHBhcmVudCBTdXNwZW5zZVxuLy8gYm91bmRhcmllcyBpcyBub3QgY3VycmVudGx5IHNob3dpbmcgdmlzaWJsZSBtYWluIGNvbnRlbnQuXG4vLyBFaXRoZXIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBvciBpcyBub3QgbW91bnRlZCBhdCBhbGwuXG4vLyBXZSBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlc2lyYWJsZSB0byB0cmlnZ2VyIGEgZmFsbGJhY2sgYXRcbi8vIHRoZSBwYXJlbnQuIElmIG5vdCwgdGhlbiB3ZSBtaWdodCBuZWVkIHRvIHRyaWdnZXIgdW5kZXNpcmFibGUgYm91bmRhcmllc1xuLy8gYW5kL29yIHN1c3BlbmQgdGhlIGNvbW1pdCB0byBhdm9pZCBoaWRpbmcgdGhlIHBhcmVudCBjb250ZW50LlxuXG52YXIgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0ID0gMTsgLy8gU2hhbGxvdyBGbGFnczpcbi8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbi8vIGl0ZW1zIGludG8gdGhlaXIgZmFsbGJhY2sgc3RhdGUgZHVyaW5nIG9uZSBvZiB0aGUgcmVuZGVyIHBhc3Nlcy5cblxudmFyIEZvcmNlU3VzcGVuc2VGYWxsYmFjayA9IDI7XG52YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbmZ1bmN0aW9uIGhhc1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBmbGFnKSB7XG4gIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrO1xufVxuZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzaGFsbG93Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrIHwgc2hhbGxvd0NvbnRleHQ7XG59XG5mdW5jdGlvbiBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHN1YnRyZWVDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0IHwgc3VidHJlZUNvbnRleHQ7XG59XG5mdW5jdGlvbiBwdXNoU3VzcGVuc2VDb250ZXh0KGZpYmVyLCBuZXdDb250ZXh0KSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV3Q29udGV4dCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VDb250ZXh0KGZpYmVyKSB7XG4gIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENhcHR1cmVTdXNwZW5zZSh3b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gIC8vIElmIGl0IHdhcyB0aGUgcHJpbWFyeSBjaGlsZHJlbiB0aGF0IGp1c3Qgc3VzcGVuZGVkLCBjYXB0dXJlIGFuZCByZW5kZXIgdGhlXG4gIC8vIGZhbGxiYWNrLiBPdGhlcndpc2UsIGRvbid0IGNhcHR1cmUgYW5kIGJ1YmJsZSB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5leHRTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0U3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFsd2F5cyBjYXB0dXJlcy5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7IC8vIEluIG9yZGVyIHRvIGNhcHR1cmUsIHRoZSBTdXNwZW5zZSBjb21wb25lbnQgbXVzdCBoYXZlIGEgZmFsbGJhY2sgcHJvcC5cblxuICBpZiAocHJvcHMuZmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBSZWd1bGFyIGJvdW5kYXJpZXMgYWx3YXlzIGNhcHR1cmUuXG5cblxuICBpZiAocHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBpdCdzIGEgYm91bmRhcnkgd2Ugc2hvdWxkIGF2b2lkLCB0aGVuIHdlIHByZWZlciB0byBidWJibGUgdXAgdG8gdGhlXG4gIC8vIHBhcmVudCBib3VuZGFyeSBpZiBpdCBpcyBjdXJyZW50bHkgaW52aXNpYmxlLlxuXG5cbiAgaWYgKGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSBpdCwgd2UgbXVzdCBoYW5kbGUgaXQuXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgdmFyIG5vZGUgPSByb3c7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVoeWRyYXRlZCA9IHN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKGRlaHlkcmF0ZWQgPT09IG51bGwgfHwgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhkZWh5ZHJhdGVkKSB8fCBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhkZWh5ZHJhdGVkKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50ICYmIC8vIHJldmVhbE9yZGVyIHVuZGVmaW5lZCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQgZG9uJ3RcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQgc3VzcGVuZGVkIG9yIG5vdC5cbiAgICBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGRpZFN1c3BlbmQgPSAobm9kZS5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgTm9GbGFncyQxID1cbi8qICAqL1xuMDsgLy8gUmVwcmVzZW50cyB3aGV0aGVyIGVmZmVjdCBzaG91bGQgZmlyZS5cblxudmFyIEhhc0VmZmVjdCA9XG4vKiAqL1xuMTsgLy8gUmVwcmVzZW50cyB0aGUgcGhhc2UgaW4gd2hpY2ggdGhlIGVmZmVjdCAobm90IHRoZSBjbGVhbi11cCkgZmlyZXMuXG5cbnZhciBMYXlvdXQgPVxuLyogICAgKi9cbjI7XG52YXIgUGFzc2l2ZSQxID1cbi8qICAgKi9cbjQ7XG5cbi8vIFRoaXMgbWF5IGhhdmUgYmVlbiBhbiBpbnNlcnRpb24gb3IgYSBoeWRyYXRpb24uXG5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW50ZXJIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIHZhciBwYXJlbnRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpO1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247IC8vIFRoaXMgbWlnaHQgc2VlbSBsaWtlIGl0IGJlbG9uZ3Mgb24gcHJvZ3Jlc3NlZEZpcnN0RGVsZXRpb24uIEhvd2V2ZXIsXG4gIC8vIHRoZXNlIGNoaWxkcmVuIGFyZSBub3QgcGFydCBvZiB0aGUgcmVjb25jaWxpYXRpb24gbGlzdCBvZiBjaGlsZHJlbi5cbiAgLy8gRXZlbiBpZiB3ZSBhYm9ydCBhbmQgcmVyZWNvbmNpbGUgdGhlIGNoaWxkcmVuLCB0aGF0IHdpbGwgdHJ5IHRvIGh5ZHJhdGVcbiAgLy8gYWdhaW4gYW5kIHRoZSBub2RlcyBhcmUgc3RpbGwgaW4gdGhlIGhvc3QgdHJlZSBzbyB0aGVzZSB3aWxsIGJlXG4gIC8vIHJlY3JlYXRlZC5cblxuICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcblxuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciBfdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBfcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjYW5IeWRyYXRlSW5zdGFuY2UobmV4dEluc3RhbmNlLCB0eXBlKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHRleHQpO1xuXG4gICAgICAgIGlmICh0ZXh0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSB0ZXh0SW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaXJzdEF0dGVtcHRlZEluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuXG4gIGlmICghdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG4gICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuXG4gICAgaWYgKCFuZXh0SW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG1hdGNoZWQgdGhlIG5leHQgb25lLCB3ZSdsbCBub3cgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IG9uZSB3YXNcbiAgICAvLyBzdXBlcmZsdW91cyBhbmQgd2UnbGwgZGVsZXRlIGl0LiBTaW5jZSB3ZSBjYW4ndCBlYWdlcmx5IGRlbGV0ZSBpdFxuICAgIC8vIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUgYSBkZWxldGlvbi4gVG8gZG8gdGhhdCwgdGhpcyBub2RlIG5lZWRzIGEgZHVtbXlcbiAgICAvLyBmaWJlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQobmV4dEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlciwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuXG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGZpYmVyKTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgZmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuXG5cbiAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG5cbiAge1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlIGlzIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlXG4gICAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgcGFyZW50LnRhZyAhPT0gSG9zdFJvb3QgJiYgcGFyZW50LnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZmliZXIudHlwZTsgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cblxuICBpZiAoZmliZXIudGFnICE9PSBIb3N0Q29tcG9uZW50IHx8IHR5cGUgIT09ICdoZWFkJyAmJiB0eXBlICE9PSAnYm9keScgJiYgIXNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSk7XG4gICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgcmV0dXJuIGlzSHlkcmF0aW5nO1xufVxuXG4vLyBhbmQgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBzdGFydGluZyBhIG5ldyByZW5kZXIuXG4vLyBUaGlzIHRyYWNrcyB3aGljaCBtdXRhYmxlIHNvdXJjZXMgbmVlZCB0byBiZSByZXNldCBhZnRlciBhIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzU291cmNlcyA9IFtdO1xudmFyIHJlbmRlcmVyU2lnaWwkMTtcblxue1xuICAvLyBVc2VkIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgbXV0YWJsZSBzb3VyY2UuXG4gIHJlbmRlcmVyU2lnaWwkMSA9IHt9O1xufVxuXG5mdW5jdGlvbiBtYXJrU291cmNlQXNEaXJ0eShtdXRhYmxlU291cmNlKSB7XG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtdXRhYmxlU291cmNlID0gd29ya0luUHJvZ3Jlc3NTb3VyY2VzW2ldO1xuXG4gICAge1xuICAgICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aCA9IDA7XG59XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAgcmV0dXJuIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKSB7XG4gIHtcbiAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gdmVyc2lvbjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYobXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAge1xuICAgICAgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbCQxO1xuICAgICAgfSBlbHNlIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsJDEpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgbXV0YWJsZSBzb3VyY2UuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBFYWdlciByZWFkcyB0aGUgdmVyc2lvbiBvZiBhIG11dGFibGUgc291cmNlIGFuZCBzdG9yZXMgaXQgb24gdGhlIHJvb3QuXG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcjtcblxue1xuICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyID0ge307XG4gIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuLy8gVGhlc2UgYXJlIHNldCByaWdodCBiZWZvcmUgY2FsbGluZyB0aGUgY29tcG9uZW50LlxudmFyIHJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuIEkndmUgbmFtZWQgaXQgZGlmZmVyZW50bHkgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuLy8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4vLyBjdXJyZW50IGhvb2sgbGlzdCBpcyB0aGUgbGlzdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmliZXIuIFRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBob29rIGxpc3QgaXMgYSBuZXcgbGlzdCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG52YXIgY3VycmVudEhvb2sgPSBudWxsO1xudmFyIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7IC8vIFdoZXRoZXIgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzXG4vLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbi8vIGZpbmlzaGVkIGV2YWx1YXRpbmcgdGhpcyBjb21wb25lbnQuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHdlIGtub3dcbi8vIHdoZXRoZXIgd2UgbmVlZCB0byBjbGVhciByZW5kZXIgcGhhc2UgdXBkYXRlcyBhZnRlciBhIHRocm93LlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuLy8gZ2V0cyByZXNldCBhZnRlciBlYWNoIGF0dGVtcHQuXG4vLyBUT0RPOiBNYXliZSB0aGVyZSdzIHNvbWUgd2F5IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0aFxuLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbnZhciBSRV9SRU5ERVJfTElNSVQgPSAyNTsgLy8gSW4gREVWLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHByaW1pdGl2ZSBob29rXG5cbnZhciBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7IC8vIEluIERFViwgdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBob29rcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGJldHdlZW4gcmVuZGVycy5cbi8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4vLyBTdWJzZXF1ZW50IHJlbmRlcnMgKHVwZGF0ZXMpIHJlZmVyZW5jZSB0aGlzIGxpc3QuXG5cbnZhciBob29rVHlwZXNEZXYgPSBudWxsO1xudmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbi8vIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEhvb2tzIHRoYXQgbmVlZCB0aGVtIChlLmcuIHVzZUVmZmVjdCBvciB1c2VNZW1vKS5cbi8vIFdoZW4gdHJ1ZSwgc3VjaCBIb29rcyB3aWxsIGFsd2F5cyBiZSBcInJlbW91bnRlZFwiLiBPbmx5IHVzZWQgZHVyaW5nIGhvdCByZWxvYWQuXG5cbnZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBtb3VudEhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiA9PT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9va1R5cGVzRGV2LnB1c2goaG9va05hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSkge1xuICAgICAgICB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihob29rTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAge1xuICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgICAgLy8gVmVyaWZ5IGRlcHMsIGJ1dCBvbmx5IG9uIG1vdW50IHRvIGF2b2lkIGV4dHJhIGNoZWNrcy5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhlaXIgdHlwZSB3b3VsZCBjaGFuZ2UgYXMgdXN1YWxseSB5b3UgZGVmaW5lIHRoZW0gaW5saW5lLlxuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuICcgKyAnc3BlY2lmaWVkLCB0aGUgZmluYWwgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nLCBjdXJyZW50SG9va05hbWVJbkRldiwgdHlwZW9mIGRlcHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnR5cGUpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nICcgKyAndGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCAnICsgJ2l0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLicsIGN1cnJlbnRIb29rTmFtZUluRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIGVycm9yKCdUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSAnICsgJ29yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuJyArICdQcmV2aW91czogJXNcXG4nICsgJ0luY29taW5nOiAlcycsIGN1cnJlbnRIb29rTmFtZUluRGV2LCBcIltcIiArIHByZXZEZXBzLmpvaW4oJywgJykgKyBcIl1cIiwgXCJbXCIgKyBuZXh0RGVwcy5qb2luKCcsICcpICsgXCJdXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcsIG5leHRSZW5kZXJMYW5lcykge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXNldFxuICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gIC8vIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gVE9ETyBXYXJuIGlmIG5vIGhvb2tzIGFyZSB1c2VkIGF0IGFsbCBkdXJpbmcgbW91bnQsIHRoZW4gc29tZSBhcmUgdXNlZCBkdXJpbmcgdXBkYXRlLlxuICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcbiAgLy8gVXNpbmcgbWVtb2l6ZWRTdGF0ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBtZW1vaXplZFN0YXRlIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cblxuICB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfSBlbHNlIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgIC8vIGJ1dCBubyBzdGF0ZWZ1bCBob29rcyBoYXZlIGJlZW4gdXNlZC5cbiAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIHByb2R1Y3Rpb24gY29kZSBiZWhhdmlvciAod2hpY2ggd2lsbCB1c2UgSG9va3NEaXNwYXRjaGVyT25Nb3VudCksXG4gICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGRvZXMgdGhhdC5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgIC8vIEtlZXAgcmVuZGVyaW5nIGluIGEgbG9vcCBmb3IgYXMgbG9uZyBhcyByZW5kZXIgcGhhc2UgdXBkYXRlcyBjb250aW51ZSB0b1xuICAgIC8vIGJlIHNjaGVkdWxlZC4gVXNlIGEgY291bnRlciB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG5cbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgaWYgKCEobnVtYmVyT2ZSZVJlbmRlcnMgPCBSRV9SRU5ERVJfTElNSVQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgLy8gYWZ0ZXIgZmlyc3QgcmVuZGVyIHRvIHByZXZlbnQgaW5maW5pdGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cblxuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBBbHNvIHZhbGlkYXRlIGhvb2sgb3JkZXIgZm9yIGNhc2NhZGluZyB1cGRhdGVzLlxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9ICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgO1xuICAgICAgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgfSAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cblxuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gIH0gLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuXG5cbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIGlmICghIWRpZFJlbmRlclRvb0Zld0hvb2tzKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KFBhc3NpdmUgfCBVcGRhdGUpO1xuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIC8vIFRoZXJlIHdlcmUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciB0aGlzIHJlbmRlclxuICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgLy8gdGhleSBkbyBub3QgcGVyc2lzdCB0byB0aGUgbmV4dCByZW5kZXIuIERvIG5vdCByZW1vdmUgdXBkYXRlcyBmcm9tIGhvb2tzXG4gICAgLy8gdGhhdCB3ZXJlbid0IHByb2Nlc3NlZC5cbiAgICAvL1xuICAgIC8vIE9ubHkgcmVzZXQgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWUgaWYgaXQgaGFzIGEgY2xvbmUuIElmIGl0IGRvZXNcbiAgICAvLyBub3QgaGF2ZSBhIGNsb25lLCB0aGF0IG1lYW5zIGl0IHdhc24ndCBwcm9jZXNzZWQsIGFuZCB0aGUgdXBkYXRlcyB3ZXJlXG4gICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgdmFyIGhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBob29rID0gaG9vay5uZXh0O1xuICAgIH1cblxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgLy8gcmVuZGVyIHBoYXNlIHVwZGF0ZS4gSXQgYXNzdW1lcyB0aGVyZSBpcyBlaXRoZXIgYSBjdXJyZW50IGhvb2sgd2UgY2FuXG4gIC8vIGNsb25lLCBvciBhIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBmcm9tIGEgcHJldmlvdXMgcmVuZGVyIHBhc3MgdGhhdCB3ZSBjYW5cbiAgLy8gdXNlIGFzIGEgYmFzZS4gV2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBiYXNlIGxpc3QsIHdlIG11c3Qgc3dpdGNoIHRvXG4gIC8vIHRoZSBkaXNwYXRjaGVyIHVzZWQgZm9yIG1vdW50cy5cbiAgdmFyIG5leHRDdXJyZW50SG9vaztcblxuICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuICB9IGVsc2Uge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgfVxuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmICghKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgdmFyIG5ld0hvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IG5ld0hvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXdIb29rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnQgPSBjdXJyZW50SG9vazsgLy8gVGhlIGxhc3QgcmViYXNlIHVwZGF0ZSB0aGF0IGlzIE5PVCBwYXJ0IG9mIHRoZSBiYXNlIHN0YXRlLlxuXG4gIHZhciBiYXNlUXVldWUgPSBjdXJyZW50LmJhc2VRdWV1ZTsgLy8gVGhlIGxhc3QgcGVuZGluZyB1cGRhdGUgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIG5ldyB1cGRhdGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG4gICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWVyZ2UgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSBiYXNlIHF1ZXVlLlxuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgdmFyIHBlbmRpbmdGaXJzdCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nRmlyc3Q7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAvLyBJbnRlcm5hbCBpbnZhcmlhbnQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgZmVhc2libHkgY291bGQgaW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSBpZiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcsIG9yIHNvbWUgZm9ybSBvZiB0aGF0LlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgYSBxdWV1ZSB0byBwcm9jZXNzLlxuICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgIHZhciBuZXdTdGF0ZSA9IGN1cnJlbnQuYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cbiAgICAgICAgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmVcbiAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cblxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBpZiAodXBkYXRlLmVhZ2VyUmVkdWNlciA9PT0gcmVkdWNlcikge1xuICAgICAgICAgIC8vIElmIHRoaXMgdXBkYXRlIHdhcyBwcm9jZXNzZWQgZWFnZXJseSwgYW5kIGl0cyByZWR1Y2VyIG1hdGNoZXMgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCByZWR1Y2VyLCB3ZSBjYW4gdXNlIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLlxuICAgICAgICAgIG5ld1N0YXRlID0gdXBkYXRlLmVhZ2VyU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCAmJiB1cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgfSAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgaG9vay5iYXNlUXVldWUgPSBuZXdCYXNlUXVldWVMYXN0O1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgLy8gd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZztcbiAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgZG9lc24ndCBwZXJzaXN0IHBhc3QgdGhpcyByZW5kZXIgcGFzcy5cbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAvLyByZW5kZXIncy5cbiAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgIC8vIHRoZSBiYXNlIHN0YXRlIHVubGVzcyB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgaWYgKGhvb2suYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpIHtcbiAge1xuICAgIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKHNvdXJjZSk7XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTsgLy8gSXMgaXQgc2FmZSBmb3IgdGhpcyBjb21wb25lbnQgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXI/XG5cbiAgdmFyIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBmYWxzZTsgLy8gQ2hlY2sgdGhlIHZlcnNpb24gZmlyc3QuXG4gIC8vIElmIHRoaXMgcmVuZGVyIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCB3aXRoIGEgc3BlY2lmaWMgdmVyc2lvbixcbiAgLy8gd2UgY2FuIHVzZSBpdCBhbG9uZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNhZmVseSByZWFkIGZyb20gdGhlIHNvdXJjZS5cblxuICB2YXIgY3VycmVudFJlbmRlclZlcnNpb24gPSBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlKTtcblxuICBpZiAoY3VycmVudFJlbmRlclZlcnNpb24gIT09IG51bGwpIHtcbiAgICAvLyBJdCdzIHNhZmUgdG8gcmVhZCBpZiB0aGUgc3RvcmUgaGFzbid0IGJlZW4gbXV0YXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAgLy8gd2UgcmVhZCBzb21ldGhpbmcuXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGN1cnJlbnRSZW5kZXJWZXJzaW9uID09PSB2ZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHJlYWQgZnJvbSB0aGVcbiAgICAvLyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLCBzbyB3ZSBuZWVkIHRvIGRvIGEgYml0IG1vcmUgd29yay5cbiAgICAvLyBXaGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlzIGlmIHRoZXJlIGFyZSBhbnkgaG9va3MgdGhhdCBhbHJlYWR5XG4gICAgLy8gc3Vic2NyaWJlZCB0byB0aGUgc291cmNlLCBhbmQgaWYgc28sIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwZW5kaW5nXG4gICAgLy8gbXV0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHN5bmNocm9uaXplZCB5ZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBtdXRhdGlvbnMsIHRoZW4gYHJvb3QubXV0YWJsZVJlYWRMYW5lc2Agd2lsbCBiZVxuICAgIC8vIGVtcHR5LCBhbmQgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHJlYWQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSAqYXJlKiBwZW5kaW5nIG11dGF0aW9ucywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gc2FmZWx5IHJlYWRcbiAgICAvLyBpZiB0aGUgY3VycmVudGx5IHJlbmRlcmluZyBsYW5lcyBhcmUgaW5jbHVzaXZlIG9mIHRoZSBwZW5kaW5nIG11dGF0aW9uXG4gICAgLy8gbGFuZXMsIHNpbmNlIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSB2YWx1ZSB3ZSdyZSBhYm91dCB0byByZWFkIGZyb21cbiAgICAvLyB0aGUgc291cmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBkdXJpbmcgdGhlIG1vc3RcbiAgICAvLyByZWNlbnQgbXV0YXRpb24uXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcblxuICAgIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgICAvLyBJZiBpdCdzIHNhZmUgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIsXG4gICAgICAvLyBzdG9yZSB0aGUgdmVyc2lvbiBpbiBjYXNlIG90aGVyIGNvbXBvbmVudHMgcmVhZCBmcm9tIGl0LlxuICAgICAgLy8gQSBjaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHdpbGwgbGV0IHRob3NlIGNvbXBvbmVudHMga25vdyB0byB0aHJvdyBhbmQgcmVzdGFydCB0aGUgcmVuZGVyLlxuICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSwgdmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICB2YXIgc25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHNuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgbXV0YWJsZSBzb3VyY2UgYmVpbmcgc2hhcmVkIGJldHdlZW4gcmVuZGVyZXJzLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgaWYgdGhlIHNvdXJjZSBpcyBtdXRhdGVkIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgcmVuZGVyZXIsXG4gICAgLy8gVGhlIHNlY29uZCByZW5kZXJlciBkb24ndCBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcmVzZXQgdGhlIFdJUCB2ZXJzaW9uIGR1cmluZyB1bndpbmQsXG4gICAgLy8gKGJlY2F1c2UgdGhlIGhvb2sgb25seSBtYXJrcyBzb3VyY2VzIGFzIGRpcnR5IGlmIGl0J3Mgd3JpdHRlbiB0byB0aGVpciBXSVAgdmVyc2lvbikuXG4gICAgLy8gVGhhdCB3b3VsZCBjYXVzZSB0aGlzIHRlYXIgY2hlY2sgdG8gdGhyb3cgYWdhaW4gYW5kIGV2ZW50dWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAvLyBXZSBjYW4gYXZvaWQgdGhpcyBpbmZpbml0ZSBsb29wIGJ5IGV4cGxpY2l0bHkgbWFya2luZyB0aGUgc291cmNlIGFzIGRpcnR5LlxuICAgIC8vXG4gICAgLy8gVGhpcyBjYW4gbGVhZCB0byB0ZWFyaW5nIGluIHRoZSBmaXJzdCByZW5kZXJlciB3aGVuIGl0IHJlc3VtZXMsXG4gICAgLy8gYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCAoc2hvcnQgb2YgdGhyb3dpbmcgaGVyZSBhbmQgcmVmdXNpbmcgdG8gY29udGludWUgdGhlIHJlbmRlcikuXG4gICAgbWFya1NvdXJjZUFzRGlydHkoc291cmNlKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IHJlYWQgZnJvbSBtdXRhYmxlIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgdGVhcmluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICBpZiAoIShyb290ICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cbiAgdmFyIF9kaXNwYXRjaGVyJHVzZVN0YXRlID0gZGlzcGF0Y2hlci51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICB9KSxcbiAgICAgIGN1cnJlbnRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzBdLFxuICAgICAgc2V0U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVsxXTtcblxuICB2YXIgc25hcHNob3QgPSBjdXJyZW50U25hcHNob3Q7IC8vIEdyYWIgYSBoYW5kbGUgdG8gdGhlIHN0YXRlIGhvb2sgYXMgd2VsbC5cbiAgLy8gV2UgdXNlIGl0IHRvIGNsZWFyIHRoZSBwZW5kaW5nIHVwZGF0ZSBxdWV1ZSBpZiB3ZSBoYXZlIGEgbmV3IHNvdXJjZS5cblxuICB2YXIgc3RhdGVIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rO1xuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJlZnMgPSBtZW1vaXplZFN0YXRlLnJlZnM7XG4gIHZhciBwcmV2R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICB2YXIgcHJldlNvdXJjZSA9IG1lbW9pemVkU3RhdGUuc291cmNlO1xuICB2YXIgcHJldlN1YnNjcmliZSA9IG1lbW9pemVkU3RhdGUuc3Vic2NyaWJlO1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczogcmVmcyxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9OyAvLyBTeW5jIHRoZSB2YWx1ZXMgbmVlZGVkIGJ5IG91ciBzdWJzY3JpcHRpb24gaGFuZGxlciBhZnRlciBlYWNoIGNvbW1pdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVmcy5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBOb3JtYWxseSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yIGEgc3RhdGUgaG9vayBuZXZlciBjaGFuZ2VzLFxuICAgIC8vIGJ1dCB0aGlzIGhvb2sgcmVjcmVhdGVzIHRoZSBxdWV1ZSBpbiBjZXJ0YWluIGNhc2VzICB0byBhdm9pZCB1cGRhdGVzIGZyb20gc3RhbGUgc291cmNlcy5cbiAgICAvLyBoYW5kbGVDaGFuZ2UoKSBiZWxvdyBuZWVkcyB0byByZWZlcmVuY2UgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHdpdGhvdXQgcmUtc3Vic2NyaWJpbmcsXG4gICAgLy8gc28gd2UgdXNlIGEgcmVmIHRvIGVuc3VyZSB0aGF0IGl0IGFsd2F5cyBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXG4gICAgcmVmcy5zZXRTbmFwc2hvdCA9IHNldFNuYXBzaG90OyAvLyBDaGVjayBmb3IgYSBwb3NzaWJsZSBjaGFuZ2UgYmV0d2VlbiB3aGVuIHdlIGxhc3QgcmVuZGVyZWQgbm93LlxuXG4gICAgdmFyIG1heWJlTmV3VmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuXG4gICAgaWYgKCFvYmplY3RJcyh2ZXJzaW9uLCBtYXliZU5ld1ZlcnNpb24pKSB7XG4gICAgICB2YXIgbWF5YmVOZXdTbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1heWJlTmV3U25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqZWN0SXMoc25hcHNob3QsIG1heWJlTmV3U25hcHNob3QpKSB7XG4gICAgICAgIHNldFNuYXBzaG90KG1heWJlTmV3U25hcHNob3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gLy8gSWYgdGhlIHNvdXJjZSBtdXRhdGVkIGJldHdlZW4gcmVuZGVyIGFuZCBub3csXG4gICAgICAvLyB0aGVyZSBtYXkgYmUgc3RhdGUgdXBkYXRlcyBhbHJlYWR5IHNjaGVkdWxlZCBmcm9tIHRoZSBvbGQgc291cmNlLlxuICAgICAgLy8gRW50YW5nbGUgdGhlIHVwZGF0ZXMgc28gdGhhdCB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC5cblxuXG4gICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuICAgIH1cbiAgfSwgW2dldFNuYXBzaG90LCBzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiB3ZSBnb3QgYSBuZXcgc291cmNlIG9yIHN1YnNjcmliZSBmdW5jdGlvbiwgcmUtc3Vic2NyaWJlIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICAgICAgdmFyIGxhdGVzdFNldFNuYXBzaG90ID0gcmVmcy5zZXRTbmFwc2hvdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QobGF0ZXN0R2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpKTsgLy8gUmVjb3JkIGEgcGVuZGluZyBtdXRhYmxlIHNvdXJjZSB1cGRhdGUgd2l0aCB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuXG5cbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBBIHNlbGVjdG9yIG1pZ2h0IHRocm93IGFmdGVyIGEgc291cmNlIG11dGF0aW9uLlxuICAgICAgICAvLyBlLmcuIGl0IG1pZ2h0IHRyeSB0byByZWFkIGZyb20gYSBwYXJ0IG9mIHRoZSBzdG9yZSB0aGF0IG5vIGxvbmdlciBleGlzdHMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc3RpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHdpdGggUmVhY3QuXG4gICAgICAgIC8vIFdvcnN0IGNhc2UgdGhlIHNlbGVjdG9yIHdpbGwgdGhyb3cgYWdhaW4gYW5kIHRoZW4gYW4gZXJyb3IgYm91bmRhcnkgd2lsbCBoYW5kbGUgaXQuXG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShzb3VyY2UuX3NvdXJjZSwgaGFuZGxlQ2hhbmdlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdW5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHN1YnNjcmliZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH0sIFtzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiBhbnkgb2YgdGhlIGlucHV0cyB0byB1c2VNdXRhYmxlU291cmNlIGNoYW5nZSwgcmVhZGluZyBpcyBwb3RlbnRpYWxseSB1bnNhZmUuXG4gIC8vXG4gIC8vIElmIGVpdGhlciB0aGUgc291cmNlIG9yIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSBjaGFuZ2VkIHdlIGNhbid0IGNhbid0IHRydXN0IHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIE1heWJlIHRoZSBzb3VyY2UgY2hhbmdlZCBpbiBhIHdheSB0aGF0IHRoZSBvbGQgc3Vic2NyaXB0aW9uIGlnbm9yZWQgYnV0IHRoZSBuZXcgb25lIGRlcGVuZHMgb24uXG4gIC8vXG4gIC8vIElmIHRoZSBnZXRTbmFwc2hvdCBmdW5jdGlvbiBjaGFuZ2VkLCB3ZSBhbHNvIHNob3VsZG4ndCByZWx5IG9uIHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugd2FzIG11dGF0ZWQgYmV0d2VlbiB0aGUgd2hlbiB0aGUgbGFzdCBcImNoYW5nZVwiIGV2ZW50IGZpcmVkLFxuICAvLyBhbmQgd2hlbiB0aGUgY3VycmVudCByZW5kZXIgKHdpdGggdGhlIG5ldyBnZXRTbmFwc2hvdCBmdW5jdGlvbikgaXMgcHJvY2Vzc2VkLlxuICAvL1xuICAvLyBJbiBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIHRocm93IGF3YXkgcGVuZGluZyB1cGRhdGVzIChzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcmVsZXZhbnQpXG4gIC8vIGFuZCB0cmVhdCByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBhcyB3ZSBkbyBpbiB0aGUgbW91bnQgY2FzZS5cblxuICBpZiAoIW9iamVjdElzKHByZXZHZXRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHx8ICFvYmplY3RJcyhwcmV2U291cmNlLCBzb3VyY2UpIHx8ICFvYmplY3RJcyhwcmV2U3Vic2NyaWJlLCBzdWJzY3JpYmUpKSB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IHF1ZXVlIGFuZCBzZXRTdGF0ZSBtZXRob2QsXG4gICAgLy8gU28gaWYgdGhlcmUgYXJlIGludGVybGVhdmVkIHVwZGF0ZXMsIHRoZXkgZ2V0IHB1c2hlZCB0byB0aGUgb2xkZXIgcXVldWUuXG4gICAgLy8gV2hlbiB0aGlzIGJlY29tZXMgY3VycmVudCwgdGhlIHByZXZpb3VzIHF1ZXVlIGFuZCBkaXNwYXRjaCBtZXRob2Qgd2lsbCBiZSBkaXNjYXJkZWQsXG4gICAgLy8gaW5jbHVkaW5nIGFueSBpbnRlcmxlYXZpbmcgdXBkYXRlcyB0aGF0IG9jY3VyLlxuICAgIHZhciBuZXdRdWV1ZSA9IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IHNuYXBzaG90XG4gICAgfTtcbiAgICBuZXdRdWV1ZS5kaXNwYXRjaCA9IHNldFNuYXBzaG90ID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBuZXdRdWV1ZSk7XG4gICAgc3RhdGVIb29rLnF1ZXVlID0gbmV3UXVldWU7XG4gICAgc3RhdGVIb29rLmJhc2VRdWV1ZSA9IG51bGw7XG4gICAgc25hcHNob3QgPSByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgICBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vay5iYXNlU3RhdGUgPSBzbmFwc2hvdDtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiB7XG4gICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsXG4gICAgICBzZXRTbmFwc2hvdDogbnVsbFxuICAgIH0sXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFZhbHVlXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZik7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgdW5kZWZpbmVkLCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVmQ2FsbGJhY2sgPSByZWY7XG5cbiAgICB2YXIgX2luc3QgPSBjcmVhdGUoKTtcblxuICAgIHJlZkNhbGxiYWNrKF9pbnN0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAge1xuICAgICAgaWYgKCFyZWZPYmplY3QuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIGZpcnN0IGFyZ3VtZW50IHRvIGVpdGhlciBiZSBhICcgKyAncmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgJ2FuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhyZWZPYmplY3QpLmpvaW4oJywgJykgKyAnfScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfaW5zdDIgPSBjcmVhdGUoKTtcblxuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3QyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgLy8gQXNzdW1lIHRoZXNlIGFyZSBkZWZpbmVkLiBJZiB0aGV5J3JlIG5vdCwgYXJlSG9va0lucHV0c0VxdWFsIHdpbGwgd2Fybi5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9tb3VudFN0YXRlID0gbW91bnRTdGF0ZSh2YWx1ZSksXG4gICAgICBwcmV2VmFsdWUgPSBfbW91bnRTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX21vdW50U3RhdGVbMV07XG5cbiAgbW91bnRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3VwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF91cGRhdGVTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3VwZGF0ZVN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2V0UGVuZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsIDwgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA/IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRQZW5kaW5nKHRydWUpO1xuICAgIH0pO1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICB2YXIgX21vdW50U3RhdGUyID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMF0sXG4gICAgICBzZXRQZW5kaW5nID0gX21vdW50U3RhdGUyWzFdOyAvLyBUaGUgYHN0YXJ0YCBtZXRob2QgY2FuIGJlIHN0b3JlZCBvbiBhIHJlZiwgc2luY2UgYHNldFBlbmRpbmdgXG4gIC8vIG5ldmVyIGNoYW5nZXMuXG5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBzZXRQZW5kaW5nKTtcbiAgbW91bnRSZWYoc3RhcnQpO1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICB2YXIgX3VwZGF0ZVN0YXRlMiA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfdXBkYXRlU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZTIgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfcmVyZW5kZXJTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbnZhciBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFRPRE86IFNob3VsZCB3YXJuIGluIGVmZmVjdHMgYW5kIGNhbGxiYWNrcywgdG9vXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgIGlmIChnZXRJc1JlbmRlcmluZygpICYmICFkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdKSB7XG4gICAgICBlcnJvcignVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgJyArICdwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSAnICsgJ3ZhbHVlIGRpcmVjdGx5LicpO1xuXG4gICAgICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgbWFrZUlkID0gIG1ha2VDbGllbnRJZEluREVWLmJpbmQobnVsbCwgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkpIDtcblxuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIHZhciBkaWRVcGdyYWRlID0gZmFsc2U7XG4gICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcblxuICAgIHZhciByZWFkVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWRpZFVwZ3JhZGUpIHtcbiAgICAgICAgLy8gT25seSB1cGdyYWRlIG9uY2UuIFRoaXMgd29ya3MgZXZlbiBpbnNpZGUgdGhlIHJlbmRlciBwaGFzZSBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSB1cGRhdGUgaXMgYWRkZWQgdG8gYSBzaGFyZWQgcXVldWUsIHdoaWNoIG91dGxhc3RzIHRoZVxuICAgICAgICAvLyBpbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgIGRpZFVwZ3JhZGUgPSB0cnVlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gdHJ1ZTtcbiAgICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICAgICAgICAgIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgdmFsdWUgZGlyZWN0bHkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaWQgPSBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHJlYWRWYWx1ZSk7XG4gICAgdmFyIHNldElkID0gbW91bnRTdGF0ZShpZClbMV07XG5cbiAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBVcGRhdGUgfCBQYXNzaXZlO1xuICAgICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlJDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9pZCA9IG1ha2VJZCgpO1xuXG4gICAgbW91bnRTdGF0ZShfaWQpO1xuICAgIHJldHVybiBfaWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gdXBkYXRlU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHJlcmVuZGVyU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBlYWdlclJlZHVjZXI6IG51bGwsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gU3Rhc2ggaXQgaW4gYSBsYXppbHktY3JlYXRlZCBtYXAgb2ZcbiAgICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgYWx0ZXJuYXRlLmxhbmVzID09PSBOb0xhbmVzKSkge1xuICAgICAgLy8gVGhlIHF1ZXVlIGlzIGN1cnJlbnRseSBlbXB0eSwgd2hpY2ggbWVhbnMgd2UgY2FuIGVhZ2VybHkgY29tcHV0ZSB0aGVcbiAgICAgIC8vIG5leHQgc3RhdGUgYmVmb3JlIGVudGVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdGhlXG4gICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgIHZhciBsYXN0UmVuZGVyZWRSZWR1Y2VyID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlcjtcblxuICAgICAgaWYgKGxhc3RSZW5kZXJlZFJlZHVjZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgIC8vIGl0LCBvbiB0aGUgdXBkYXRlIG9iamVjdC4gSWYgdGhlIHJlZHVjZXIgaGFzbid0IGNoYW5nZWQgYnkgdGhlXG4gICAgICAgICAgLy8gdGltZSB3ZSBlbnRlciB0aGUgcmVuZGVyIHBoYXNlLCB0aGVuIHRoZSBlYWdlciBzdGF0ZSBjYW4gYmUgdXNlZFxuICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgIHVwZGF0ZS5lYWdlclJlZHVjZXIgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBGYXN0IHBhdGguIFdlIGNhbiBiYWlsIG91dCB3aXRob3V0IHNjaGVkdWxpbmcgUmVhY3QgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJzIGZvciBhIGRpZmZlcmVudCByZWFzb24gYW5kIGJ5IHRoYXRcbiAgICAgICAgICAgIC8vIHRpbWUgdGhlIHJlZHVjZXIgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikgey8vIFN1cHByZXNzIHRoZSBlcnJvci4gSXQgd2lsbCB0aHJvdyBhZ2FpbiBpbiB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpO1xuICAgICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYoZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufVxuXG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTXV0YWJsZVNvdXJjZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VPcGFxdWVJZGVudGlmaWVyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxufTtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuXG57XG4gIHZhciB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICB9O1xuXG4gIHZhciB3YXJuSW52YWxpZEhvb2tBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0RvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gJyArICdZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycpO1xuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbn1cblxudmFyIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbnZhciBjb21taXRUaW1lID0gMDtcbnZhciBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBnZXRDb21taXRUaW1lKCkge1xuICByZXR1cm4gY29tbWl0VGltZTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkQ29tbWl0VGltZSgpIHtcblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3ckMSgpO1xuXG4gIGlmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPCAwKSB7XG4gICAgZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gbm93JDEoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gIC8vIFRyYW5zZmVyIHRpbWUgc3BlbnQgcmVuZGVyaW5nIHRoZXNlIGNoaWxkcmVuIHNvIHdlIGRvbid0IGxvc2UgaXRcbiAgLy8gYWZ0ZXIgd2UgcmVyZW5kZXIuIFRoaXMgaXMgdXNlZCBhcyBhIGhlbHBlciBpbiBzcGVjaWFsIGNhc2VzXG4gIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbnZhciBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcztcbnZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzO1xudmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xudmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zO1xuXG57XG4gIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzID0ge307XG4gIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgLy8gaWRlbnRpdGllcyBtYXRjaC5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlbmRlciA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuXG4gICAgaWYgKGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkgJiYgQ29tcG9uZW50LmNvbXBhcmUgPT09IG51bGwgJiYgLy8gU2ltcGxlTWVtb0NvbXBvbmVudCBjb2RlcGF0aCBkb2Vzbid0IHJlc29sdmUgb3V0ZXIgcHJvcHMgZWl0aGVyLlxuICAgIENvbXBvbmVudC5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgIC8vIGFuZCB3aXRoIG9ubHkgdGhlIGRlZmF1bHQgc2hhbGxvdyBjb21wYXJpc29uLCB3ZSB1cGdyYWRlIGl0XG4gICAgICAvLyB0byBhIFNpbXBsZU1lbW9Db21wb25lbnQgdG8gYWxsb3cgZmFzdCBwYXRoIHVwZGF0ZXMuXG5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gU2ltcGxlTWVtb0NvbXBvbmVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlZFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlc29sdmVkVHlwZSwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKHR5cGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLm1vZGUsIHJlbmRlckxhbmVzKTtcbiAgICBjaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChfaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgY2hlY2tQcm9wVHlwZXMoX2lubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUodXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgcHJvcHMgd2l0aCByZXNvbHZlZCBkZWZhdWx0UHJvcHMsXG4gICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnRDaGlsZC5tZW1vaXplZFByb3BzOyAvLyBEZWZhdWx0IHRvIHNoYWxsb3cgY29tcGFyaXNvblxuXG4gICAgdmFyIGNvbXBhcmUgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICBpZiAoY29tcGFyZShwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBuZXh0UHJvcHMpO1xuICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICByZXR1cm4gbmV3Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSBvdXRlck1lbW9UeXBlO1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IG51bGw7XG4gICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuXG4gICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IG91dGVyTWVtb1R5cGUgJiYgb3V0ZXJNZW1vVHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUob3V0ZXJNZW1vVHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAoIC8vIFByZXZlbnQgYmFpbG91dCBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZC5cbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgICAgLy8gVGhlIHBlbmRpbmcgbGFuZXMgd2VyZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYmVnaW5Xb3JrLiBXZSdyZVxuICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAvLyBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCByZW5kZXIuIFVzdWFsbHksIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGVcbiAgICAgICAgLy8gcmVtYWluaW5nIHVwZGF0ZXMgaXMgYWNjdW1sYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCAoaS5lLiB3aGVuIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZSkuIEJ1dCBzaW5jZSBzaW5jZVxuICAgICAgICAvLyB3ZSdyZSBiYWlsaW5nIG91dCBlYXJseSAqd2l0aG91dCogZXZhbHVhdGluZyB0aGUgY29tcG9uZW50LCB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgYXBwbGllcyB0byBTaW1wbGVNZW1vQ29tcG9uZW50LCBub3QgTWVtb0NvbXBvbmVudCxcbiAgICAgICAgLy8gYmVjYXVzZSBhIE1lbW9Db21wb25lbnQgZmliZXIgZG9lcyBub3QgaGF2ZSBob29rcyBvciBhbiB1cGRhdGUgcXVldWU7XG4gICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgLy8gY29udGFpbnMgaG9va3MuXG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIHJlc2V0IGF0IGluIGJlZ2luV29yayBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIHNvIHRoYXRcbiAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuXG4gIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gJ2hpZGRlbicgfHwgbmV4dFByb3BzLm1vZGUgPT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gbGVnYWN5IHN5bmMgbW9kZSwgZG9uJ3QgZGVmZXIgdGhlIHN1YnRyZWUuIFJlbmRlciBpdCBub3cuXG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgd2Ugc2hvdWxkIGRvIGluIEJsb2NraW5nIG1vZGUuXG4gICAgICB2YXIgbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkpIHtcbiAgICAgIHZhciBuZXh0QmFzZUxhbmVzO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2QmFzZUxhbmVzID0gcHJldlN0YXRlLmJhc2VMYW5lcztcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IG1lcmdlTGFuZXMocHJldkJhc2VMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfSAvLyBTY2hlZHVsZSB0aGlzIGZpYmVyIHRvIHJlLXJlbmRlciBhdCBvZmZzY3JlZW4gcHJpb3JpdHkuIFRoZW4gYmFpbG91dC5cblxuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gbGFuZVRvTGFuZXMoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB2YXIgX25leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGU7IC8vIFdlJ3JlIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgd2UgbmVlZCB0byBwdXNoIHRoaXMgdG8gdGhlIHN0YWNrIGFueXdheVxuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgbmV4dEJhc2VMYW5lcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgdmFyIF9uZXh0U3RhdGUyID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTI7IC8vIFB1c2ggdGhlIGxhbmVzIHRoYXQgd2VyZSBza2lwcGVkIHdoZW4gd2UgYmFpbGVkIG91dC5cblxuICAgICAgdmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9zdWJ0cmVlUmVuZGVyTGFuZXM7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlJ3JlIG5vdCBoaWRkZW4gYW55bW9yZSwgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlbid0IHByZXZpb3VzbHkgaGlkZGVuLCBhbmQgd2Ugc3RpbGwgYXJlbid0LCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAgIC8vIHNwZWNpYWwgdG8gZG8uIE5lZWQgdG8gcHVzaCB0byB0aGUgc3RhY2sgcmVnYXJkbGVzcywgdGhvdWdoLCB0byBhdm9pZFxuICAgICAgLy8gYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgfVxuXG4gICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBfc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufSAvLyBOb3RlOiBUaGVzZSBoYXBwZW4gdG8gaGF2ZSBpZGVudGljYWwgYmVnaW4gcGhhc2VzLCBmb3Igbm93LiBXZSBzaG91bGRuJ3QgaG9sZFxuLy8gb3Vyc2VsdmVzIHRvIHRoaXMgY29uc3RyYWludCwgdGhvdWdoLiBJZiB0aGUgYmVoYXZpb3IgZGl2ZXJnZXMsIHdlIHNob3VsZFxuLy8gZm9yayB0aGUgZnVuY3Rpb24uXG5cblxudmFyIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudDtcblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG4gICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBzaG91bGRVcGRhdGU7XG5cbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgY2xhc3MgY29tcG9uZW50IHdpdGhvdXQgYW4gaW5zdGFuY2Ugb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkXG4gICAgICAvLyBpbnNpZGUgYSBub24tY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG9cbiAgICAgIC8vIHRyZWF0IGl0IGxpa2UgYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICB9IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG5cbiAgICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgIHNob3VsZFVwZGF0ZSA9IHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRVcGRhdGUgPSB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIHZhciBpbnN0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICBlcnJvcignSXQgbG9va3MgbGlrZSAlcyBpcyByZWFzc2lnbmluZyBpdHMgb3duIGB0aGlzLnByb3BzYCB3aGlsZSByZW5kZXJpbmcuICcgKyAnVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdhIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gUmVmcyBzaG91bGQgdXBkYXRlIGV2ZW4gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2VcbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gQ29udGV4dCBwcm92aWRlcnMgc2hvdWxkIGRlZmVyIHRvIHNDVSBmb3IgcmVuZGVyaW5nXG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBuZXh0Q2hpbGRyZW47XG5cbiAgaWYgKGRpZENhcHR1cmVFcnJvciAmJiB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgIC8vIHVubW91bnQgYWxsIHRoZSBjaGlsZHJlbi4gY29tcG9uZW50RGlkQ2F0Y2ggd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgdG9cbiAgICAvLyByZS1yZW5kZXIgYSBmYWxsYmFjay4gVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbWlncmF0ZSBldmVyeW9uZSB0b1xuICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgIC8vIFRPRE86IFdhcm4gaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuXG4gICAge1xuICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIElmIHdlJ3JlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVjb25jaWxlIHdpdGhvdXQgcmV1c2luZyBhbnkgb2ZcbiAgICAvLyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uIENvbmNlcHR1YWxseSwgdGhlIG5vcm1hbCBjaGlsZHJlbiBhbmQgdGhlIGNoaWxkcmVuXG4gICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgLy8gbm9ybWFsIGNoaWxkcmVuIGV2ZW4gaWYgdGhlaXIgaWRlbnRpdGllcyBtYXRjaC5cbiAgICBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICBpZiAoaGFzQ29udGV4dCkge1xuICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cblxuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAoIShjdXJyZW50ICE9PSBudWxsICYmIHVwZGF0ZVF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIklmIHRoZSByb290IGRvZXMgbm90IGhhdmUgYW4gdXBkYXRlUXVldWUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmFpbGVkIG91dC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcHJldkNoaWxkcmVuID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmVsZW1lbnQgOiBudWxsO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290Lmh5ZHJhdGUgJiYgZW50ZXJIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXJyZW50IGNoaWxkcmVuIHRoaXMgbWlnaHQgYmUgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gV2UgYWx3YXlzIHRyeSB0byBoeWRyYXRlLiBJZiB0aGlzIGlzbid0IGEgaHlkcmF0aW9uIHBhc3MgdGhlcmUgd29uJ3RcbiAgICAvLyBiZSBhbnkgY2hpbGRyZW4gdG8gaHlkcmF0ZSB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSB0aGluZyBhc1xuICAgIC8vIG5vdCBoeWRyYXRpbmcuXG4gICAge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7XG5cbiAgICAgIGlmIChtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2ldO1xuICAgICAgICAgIHZhciB2ZXJzaW9uID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpICsgMV07XG4gICAgICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICB2YXIgbm9kZSA9IGNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIC8vIE1hcmsgZWFjaCBjaGlsZCBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgIC8vIHRyZWUgaXMgcGFydCBvZiBhIGh5ZHJhdGluZyB0cmVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGRcbiAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBSZWFjdCB0cmVlIGhlcmUuIEl0IGp1c3QgaGFwcGVucyB0byBub3QgbmVlZCBET01cbiAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgbm9kZS5mbGFncyA9IG5vZGUuZmxhZ3MgJiB+UGxhY2VtZW50IHwgSHlkcmF0aW5nO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGh5ZHJhdGlvbiBzdGF0ZSBpbiBjYXNlIHdlIGFib3J0ZWQgYW5kIHJlc3VtZWQgYW5vdGhlclxuICAgIC8vIHJvb3QuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgfVxuXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudDtcbiAgdmFyIHJlc29sdmVkVGFnID0gd29ya0luUHJvZ3Jlc3MudGFnID0gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KTtcbiAgdmFyIHJlc29sdmVkUHJvcHMgPSByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgcHJvcHMpO1xuICB2YXIgY2hpbGQ7XG5cbiAgc3dpdGNoIChyZXNvbHZlZFRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZvcndhcmRSZWYobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgcmVzb2x2ZWRQcm9wcywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCByZXNvbHZlZFByb3BzKSwgLy8gVGhlIGlubmVyIHR5cGUgY2FuIGhhdmUgZGVmYXVsdHMgdG9vXG4gICAgICAgIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArIENvbXBvbmVudCArIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5jb21wbGV0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluZGV0ZXJtaW5hdGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIHZhbHVlO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcihcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICsgJ1RoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICB7XG4gICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgIC8vIFdoZXRoZXIgb3Igbm90IGl0IHdvdWxkIGNyYXNoIGxhdGVyLCB3ZSB3YW50IHRvIHNob3cgYSBnb29kIG1lc3NhZ2UgaW4gREVWIGZpcnN0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTIgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBjbGFzcyBpbnN0YW5jZVxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDsgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgdmFyIGhhc0NvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHZhbHVlLnN0YXRlICE9PSBudWxsICYmIHZhbHVlLnN0YXRlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zdGF0ZSA6IG51bGw7XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG5cbiAgICB7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckxhbmVzKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAge1xuICAgIGlmIChDb21wb25lbnQpIHtcbiAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgIH1cblxuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvd25lck5hbWUgfHwgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgfHwgJyc7XG4gICAgICB2YXIgZGVidWdTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2U7XG5cbiAgICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgICB3YXJuaW5nS2V5ID0gZGVidWdTb3VyY2UuZmlsZU5hbWUgKyAnOicgKyBkZWJ1Z1NvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JXMnLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTMgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLicsIF9jb21wb25lbnROYW1lMyk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWU0ID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWU0KTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICByZXRyeUxhbmU6IE5vTGFuZVxufTtcblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiByZW5kZXJMYW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpXG4gIH07XG59IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG9cbiAgLy8gcmVtYWluIG9uIHRoYXQgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250ZW50IGhhcyByZXNvbHZlZC5cbiAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gQ3VycmVudGx5IHNob3dpbmcgY29udGVudC4gRG9uJ3QgaGlkZSBpdCwgZXZlbiBpZiBGb3JjZVN1c3BlbnNlRmFsbGFja1xuICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBmYWN0b3Jpbmcgc21lbGwuIENhbid0IHJlbWFpbiBvbiBhIGZhbGxiYWNrIGlmIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGZhbGxiYWNrIHRvIHJlbWFpbiBvbi5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gTm90IGN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIENvbnN1bHQgdGhlIFN1c3BlbnNlIGNvbnRleHQuXG5cblxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogU2hvdWxkIG5vdCByZW1vdmUgcmVuZGVyIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgZHVyaW5nIHRoaXMgcmVuZGVyXG4gIHJldHVybiByZW1vdmVMYW5lcyhjdXJyZW50LmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFRoaXMgaXMgdXNlZCBieSBEZXZUb29scyB0byBmb3JjZSBhIGJvdW5kYXJ5IHRvIHN1c3BlbmQuXG5cbiAge1xuICAgIGlmIChzaG91bGRTdXNwZW5kKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvd0ZhbGxiYWNrID0gZmFsc2U7XG4gIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQpKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoaXMgYm91bmRhcnkncyBzdWJ0cmVlIGFscmVhZHkgc3VzcGVuZGVkLiBTd2l0Y2ggdG9cbiAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgIHNob3dGYWxsYmFjayA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXR0ZW1wdGluZyB0aGUgbWFpbiBjb250ZW50XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50IG9yIHRoaXMgYm91bmRhcnkgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBNYXJrIHRoaXMgc3VidHJlZSBjb250ZXh0IGFzIGhhdmluZyBhdCBsZWFzdCBvbmUgaW52aXNpYmxlIHBhcmVudCB0aGF0IGNvdWxkXG4gICAgICAvLyBoYW5kbGUgdGhlIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gQm91bmRhcmllcyB3aXRob3V0IGZhbGxiYWNrcyBvciBzaG91bGQgYmUgYXZvaWRlZCBhcmUgbm90IGNvbnNpZGVyZWQgc2luY2VcbiAgICAgIC8vIHRoZXkgY2Fubm90IGhhbmRsZSBwcmVmZXJyZWQgZmFsbGJhY2sgc3RhdGVzLlxuICAgICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIG5leHRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgLy8gYm91bmRhcnkncyBjaGlsZHJlbi4gVGhpcyBpbnZvbHZlcyBzb21lIGN1c3RvbSByZWNvbmNpbGF0aW9uIGxvZ2ljLiBUd29cbiAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gIC8vXG4gIC8vIEZpcnN0LCBMZWdhY3kgTW9kZSBoYXMgZGlmZmVyZW50IHNlbWFudGljcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZVxuICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAvLyBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLCB3ZSBkbyBzb21lIGV4Y2VlZGluZ2x5LCB1aCwgY2xldmVyXG4gIC8vIGhhY2tzIHRvIG1ha2UgdGhhdCBub3QgdG90YWxseSBicmVhay4gTGlrZSB0cmFuc2ZlcnJpbmcgZWZmZWN0cyBhbmRcbiAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gIC8vIGJlY2F1c2Ugd2UgYmFpbG91dCBvbiB0aGUgcHJpbWFyeSB0cmVlIGNvbXBsZXRlbHkgYW5kIGxlYXZlIGl0IGluIGl0cyBvbGRcbiAgLy8gc3RhdGUsIG5vIGVmZmVjdHMuIFNhbWUgYXMgd2hhdCB3ZSBkbyBmb3IgT2Zmc2NyZWVuIChleGNlcHQgdGhhdFxuICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gIC8vXG4gIC8vIFNlY29uZCBpcyBoeWRyYXRpb24uIER1cmluZyBoeWRyYXRpb24sIHRoZSBTdXNwZW5zZSBmaWJlciBoYXMgYSBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgLy8gY29udGFpbnMgdGhlIERPTSByZW5kZXJlZCBieSB0aGUgc2VydmVyLlxuICAvL1xuICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgLy8gdGhhdCB3ZSBmaXJzdCB3ZSB0cnkgdG8gcmVuZGVyIG9uZSB0cmVlLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgcmVuZGVyIGFnYWluXG4gIC8vIGFuZCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgdHJlZS4gTGlrZSBhIHRyeS9jYXRjaCBibG9jay4gU28gd2UgaGF2ZSB0byB0cmFja1xuICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gIC8vIGEgc3RhY2suXG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgdHJ5IHRvIGh5ZHJhdGUgdGhpcyBib3VuZGFyeS5cbiAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3BzLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgQ1BVLWJvdW5kIHRyZWUuIFNraXAgdGhpcyB0cmVlIGFuZCBzaG93IGEgcGxhY2Vob2xkZXIgdG9cbiAgICAgIC8vIHVuYmxvY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQuIFRoZW4gaW1tZWRpYXRlbHkgcmV0cnkgYWZ0ZXIgdGhlXG4gICAgICAvLyBpbml0aWFsIGNvbW1pdC5cbiAgICAgIHZhciBfZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXMgdG9cbiAgICAgIC8vIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtcyBvZlxuICAgICAgLy8gcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLCBpdCdzXG4gICAgICAvLyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzIGNvbW1pdHRlZC4gSWZcbiAgICAgIC8vIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZSBwYWludGVkLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLiBXZSBjYW4gdXNlIGFueVxuICAgICAgLy8gUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmcgc2luY2Ugd2UncmUgbGVhdmluZ1xuICAgICAgLy8gaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9mYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBmaWJlciBoYXMgYSBTdXNwZW5zZVN0YXRlLCB0aGF0IG1lYW5zIGl0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgLy8gYSBmYWxsYmFjay5cbiAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLm1lbW9pemVkU3RhdGUgPSBwcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4zID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBpcyBub3QgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2suXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIC8vIFRpbWVkIG91dC5cbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjQgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjQsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgX3ByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5tZW1vaXplZFN0YXRlID0gX3ByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKF9wcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpOyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIGhhdmVuJ3QgdGltZWQgb3V0LiBDb250aW51ZSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuLCBsaWtlIHdlXG4gICAgICAgIC8vIG5vcm1hbGx5IGRvLlxuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW41ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcblxuICBpZiAoIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgLy8gTWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzZWNvbmQgcGFzcywgaS5lLiB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCB3YXNcbiAgLy8gYWxyZWFkeSBjbG9uZWQuIEluIGxlZ2FjeSBtb2RlLCB0aGUgb25seSBjYXNlIHdoZXJlIHRoaXMgaXNuJ3QgdHJ1ZSBpc1xuICAvLyB3aGVuIERldlRvb2xzIGZvcmNlcyB1cyB0byBkaXNwbGF5IGEgZmFsbGJhY2s7IHdlIHNraXAgdGhlIGZpcnN0IHJlbmRlclxuICAvLyBwYXNzIGVudGlyZWx5IGFuZCBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgdGhlIGZhbGxiYWNrLiAoSW4gQ29uY3VycmVudFxuICAvLyBNb2RlLCBTdXNwZW5zZUxpc3QgY2FuIGFsc28gdHJpZ2dlciB0aGlzIHNjZW5hcmlvLCBidXQgdGhpcyBpcyBhIGxlZ2FjeS1cbiAgLy8gb25seSBjb2RlcGF0aC4pXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQpIHtcbiAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBlZmZlY3QgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgLy8gdG8gZGVsZXRlIGl0LiBTbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBEZWxldGlvbnMgYXJlIHN0b3JlZFxuICAgIC8vIG9uIHRoZSBzYW1lIGxpc3QgYXMgZWZmZWN0cy4gV2Ugd2FudCB0byBrZWVwIHRoZSBlZmZlY3RzIGZyb20gdGhlIHByaW1hcnlcbiAgICAvLyB0cmVlLiBTbyB3ZSBjb3B5IHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50J3MgZWZmZWN0IGxpc3QsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gaW5jbHVkZSB0aGUgZmFsbGJhY2sgZGVsZXRpb24gZWZmZWN0LlxuXG5cbiAgICB2YXIgcHJvZ3Jlc3NlZExhc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKHByb2dyZXNzZWRMYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmZpcnN0RWZmZWN0O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHByb2dyZXNzZWRMYXN0RWZmZWN0O1xuICAgICAgcHJvZ3Jlc3NlZExhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IFJlc2V0IHRoaXMgc29tZXdoZXJlIGVsc2U/IExvbCBsZWdhY3kgbW9kZSBpcyBzbyB3ZWlyZC5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHByaW1hcnlDaGlsZFByb3BzKTtcbiAgfVxuXG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LCBmYWxsYmFja0NoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZSBib3VuZGFyeSkgYWxyZWFkeVxuICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMpIHtcbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgZmlyc3RDaGlsZCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTWFyayBhbnkgU3VzcGVuc2UgYm91bmRhcmllcyB3aXRoIGZhbGxiYWNrcyBhcyBoYXZpbmcgd29yayB0byBkby5cbiAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAvLyB0byB1bmJsb2NrLlxuICB2YXIgbm9kZSA9IGZpcnN0Q2hpbGQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgIC8vIElmIHRoZSB0YWlsIGlzIGhpZGRlbiB0aGVyZSBtaWdodCBub3QgYmUgYW4gU3VzcGVuc2UgYm91bmRhcmllc1xuICAgICAgLy8gdG8gc2NoZWR1bGUgd29yayBvbi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgb24gdGhlXG4gICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdHJhdmVyc2UgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBsaXN0IHNpbmNlXG4gICAgICAvLyB0aGUgbGlzdCB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHdoZW4gaXQgcmVyZW5kZXJzLlxuICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjaGlsZFNsb3QpO1xuICAgIHZhciBpc0l0ZXJhYmxlID0gIWlzQXJyYXkgJiYgdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChpc0FycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBcnJheSA/ICdhcnJheScgOiAnaXRlcmFibGUnO1xuXG4gICAgICBlcnJvcignQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gJyArICdhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiAnICsgJzwvU3VzcGVuc2VMaXN0PicsIHR5cGUsIGluZGV4LCB0eXBlKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKChyZXZlYWxPcmRlciA9PT0gJ2ZvcndhcmRzJyB8fCByZXZlYWxPcmRlciA9PT0gJ2JhY2t3YXJkcycpICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgY2hpbGRyZW4gIT09IG51bGwgJiYgY2hpbGRyZW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZHJlbltpXSwgaSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuSXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB2YXIgX2kgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvcignQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gJyArICdUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gJyArICdEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT8nLCByZXZlYWxPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBpc0JhY2t3YXJkcywgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbDogdGFpbCxcbiAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZSxcbiAgICAgIGxhc3RFZmZlY3Q6IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmdcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICByZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcyA9IGlzQmFja3dhcmRzO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICByZW5kZXJTdGF0ZS5sYXN0ID0gbGFzdENvbnRlbnRSb3c7XG4gICAgcmVuZGVyU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZztcbiAgfVxufSAvLyBUaGlzIGNhbiBlbmQgdXAgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IG11bHRpcGxlIHBhc3Nlcy5cbi8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbi8vIFdlIGZpcnN0IHJlbmRlciB0aGUgaGVhZC4gSWYgYW55dGhpbmcgaXMgaW4gZmFsbGJhY2sgc3RhdGUsIHdlIGRvIGFub3RoZXJcbi8vIHBhc3MgdGhyb3VnaCBiZWdpbldvcmsgdG8gcmVyZW5kZXIgYWxsIGNoaWxkcmVuIChpbmNsdWRpbmcgdGhlIHRhaWwpIHdpdGhcbi8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbi8vIGluIGZhbGxiYWNrIHN0YXRlLiBUaGVuIHdlIHJlbmRlciBlYWNoIHJvdyBpbiB0aGUgdGFpbCBvbmUtYnktb25lLlxuLy8gVGhhdCBoYXBwZW5zIGluIHRoZSBjb21wbGV0ZVdvcmsgcGhhc2Ugd2l0aG91dCBnb2luZyBiYWNrIHRvIGJlZ2luV29yay5cblxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgdmFyIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWw7XG4gIHZhciBuZXdDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihuZXdDaGlsZHJlbiwgcmV2ZWFsT3JkZXIpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3VsZEZvcmNlRmFsbGJhY2sgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuXG4gIGlmIChzaG91bGRGb3JjZUZhbGxiYWNrKSB7XG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgIC8vIG9uIGFueSBuZXN0ZWQgYm91bmRhcmllcyB0byBsZXQgdGhlbSBrbm93IHRvIHRyeSB0byByZW5kZXJcbiAgICAgIC8vIGFnYWluLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNvbnRleHQgdXBkYXRpbmcuXG4gICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLmNoaWxkLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgfVxuXG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuXG4gIGlmIChvbGRQcm9wcyAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlZEJpdHMgPT09IDApIHtcbiAgICAgIC8vIE5vIGNoYW5nZS4gQmFpbG91dCBlYXJseSBpZiBjaGlsZHJlbiBhcmUgdGhlIHNhbWUuXG4gICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgLy8gREVWIG1vZGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgQ29udGV4dC5Db25zdW1lciB0aGF0IGFjdHNcbiAgLy8gbGlrZSBhIHByb3h5IHRvIENvbnRleHQuIFRoaXMgcHJveHkgb2JqZWN0IGFkZHMgdW5uZWNlc3NhcnkgY29kZSBpbiBQUk9EXG4gIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gIC8vIHJlZHVjZSBzaXplIGFuZCBvdmVyaGVhZC4gVGhlIHNlcGFyYXRlIG9iamVjdCByZWZlcmVuY2VzIGNvbnRleHQgdmlhXG4gIC8vIGEgcHJvcGVydHkgY2FsbGVkIFwiX2NvbnRleHRcIiwgd2hpY2ggYWxzbyBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBjaGVja1xuICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAge1xuICAgIGlmIChjb250ZXh0Ll9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgLy8gT3IgaXQgbWF5IGJlIGJlY2F1c2UgaXQncyBvbGRlciBSZWFjdCB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lIHRoaW5nLlxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHdhcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbmV3IFJlYWN0LlxuICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIpIHtcbiAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dD4gZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5fY29udGV4dDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZW5kZXIgPSBuZXdQcm9wcy5jaGlsZHJlbjtcblxuICB7XG4gICAgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgJyArIFwidGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCBcIiArICd0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgJyArICdpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXdWYWx1ZSA9IHJlYWRDb250ZXh0KGNvbnRleHQsIG5ld1Byb3BzLnVuc3RhYmxlX29ic2VydmVkQml0cyk7XG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgdXBkYXRlIFwiYmFzZVwiIHJlbmRlciB0aW1lcyBmb3IgYmFpbG91dHMuXG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgfVxuXG4gIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMpOyAvLyBDaGVjayBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBhbnkgcGVuZGluZyB3b3JrLlxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgLy8gVE9ETzogT25jZSB3ZSBhZGQgYmFjayByZXN1bWluZywgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjaGlsZHJlbiBhcmVcbiAgICAvLyBhIHdvcmstaW4tcHJvZ3Jlc3Mgc2V0LiBJZiBzbywgd2UgbmVlZCB0byB0cmFuc2ZlciB0aGVpciBlZmZlY3RzLlxuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgZmliZXIgZG9lc24ndCBoYXZlIHdvcmssIGJ1dCBpdHMgc3VidHJlZSBkb2VzLiBDbG9uZSB0aGUgY2hpbGRcbiAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuICAgIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuJyk7XG4gICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgIC8vIEl0IHdpbGwgZ2V0IGRlbGV0ZWQuXG5cblxuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICBvbGRXb3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBDb25uZWN0IHRvIHRoZSBuZXcgdHJlZS5cblxuICAgIG5ld1dvcmtJblByb2dyZXNzLmluZGV4ID0gb2xkV29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmV0dXJuID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJlZiA9IG9sZFdvcmtJblByb2dyZXNzLnJlZjsgLy8gUmVwbGFjZSB0aGUgY2hpbGQvc2libGluZyBwb2ludGVycyBhYm92ZSBpdC5cblxuICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgIHJldHVybkZpYmVyLmNoaWxkID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLicpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocHJldlNpYmxpbmcuc2libGluZyAhPT0gb2xkV29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc2libGluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSAvLyBEZWxldGUgdGhlIG9sZCBmaWJlciBhbmQgcGxhY2UgdGhlIG5ldyBvbmUuXG4gICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjdXJyZW50O1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY3VycmVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50OyAvLyBSZXN0YXJ0IHdvcmsgZnJvbSB0aGUgbmV3IGZpYmVyLlxuXG4gICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHVwZGF0ZUxhbmVzID0gd29ya0luUHJvZ3Jlc3MubGFuZXM7XG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsIHdvcmtJblByb2dyZXNzLm1vZGUsIHdvcmtJblByb2dyZXNzLmxhbmVzKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpIHx8ICggLy8gRm9yY2UgYSByZS1yZW5kZXIgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQ6XG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTsgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAgICAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cblxuICAgICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHByaW1hcnlDaGlsZExhbmVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBVc2UgdGhlIG5vcm1hbCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgbWFya2VkXG4gICAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAgIC8vIHByaW9yaXR5LiBCYWlsb3V0LlxuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4gYW5kIHdvcmsgb24gdGhlIGZhbGxiYWNrLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgICAgICAgIHZhciBfaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdhcyBpbiBmYWxsYmFjayBzdGF0ZSBsYXN0IHRpbWUsIGFuZCB3ZSBoYXZlIGFsbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHJlZSB3aGljaCB3aWxsIGFmZmVjdCB0aGUgdGFpbC4gU28gd2UgbmVlZCB0byB1c2UgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyB0aGVuIHRoZSB0YWlsIGRvZXNuJ3QgbWF0dGVyLiBBbnl0aGluZyBuZXcgdGhhdCBzdXNwZW5kcyB3aWxsIHdvcmtcbiAgICAgICAgICAgIC8vIGluIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSwgc28gd2UgY2FuIGNvbnRpbnVlIGZyb20gdGhlIHN0YXRlIHdlIGhhZC5cblxuXG4gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIHBhc3QgYnV0IGRpZG4ndCBjb21wbGV0ZSBpdC5cbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8gYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgbG9naWMgdXNlZCBpbiB0aGUgbm9ybWFsIHVwZGF0ZSBwYXRoLFxuICAgICAgICAgICAgLy8gc28gd2UnbGwganVzdCBlbnRlciB0aGF0LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdlJ2xsIGJhaWwgb3V0XG4gICAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgICAgLy8gaGF2ZSBub3QgY2hhbmdlZC4gV2hpY2ggaXMgZmluZS5cbiAgICAgICAgICAgIC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCByZWZhY3RvciBgYmVnaW5Xb3JrYCB0byBzcGxpdCB0aGUgYmFpbG91dFxuICAgICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAgIC8vIGJ1dCBJIHdvbid0IDopXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgLy8gbm9yIGxlZ2FjeSBjb250ZXh0LiBTZXQgdGhpcyB0byBmYWxzZS4gSWYgYW4gdXBkYXRlIHF1ZXVlIG9yIGNvbnRleHRcbiAgICAgICAgLy8gY29uc3VtZXIgcHJvZHVjZXMgYSBjaGFuZ2VkIHZhbHVlLCBpdCB3aWxsIHNldCB0aGlzIHRvIHRydWUuIE90aGVyd2lzZSxcbiAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAvLyBUT0RPOiBUaGlzIGFzc3VtZXMgdGhhdCB3ZSdyZSBhYm91dCB0byBldmFsdWF0ZSB0aGUgY29tcG9uZW50IGFuZCBwcm9jZXNzXG4gIC8vIHRoZSB1cGRhdGUgcXVldWUuIEhvd2V2ZXIsIHRoZXJlJ3MgYW4gZXhjZXB0aW9uOiBTaW1wbGVNZW1vQ29tcG9uZW50XG4gIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAvLyBtb3ZlIHRoaXMgYXNzaWdubWVudCBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIGFuZCBpbnRvIGVhY2ggYnJhbmNoLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICByZXR1cm4gbW91bnRMYXp5Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudCA/IHVucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wcyk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MiwgX3Jlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSB0eXBlID8gX3VucmVzb2x2ZWRQcm9wczIgOiByZXNvbHZlRGVmYXVsdFByb3BzKHR5cGUsIF91bnJlc29sdmVkUHJvcHMyKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgX3Jlc29sdmVkUHJvcHMyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1vZGU6XG4gICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gUmVzb2x2ZSBvdXRlciBwcm9wcyBmaXJzdCwgdGhlbiByZXNvbHZlIGlubmVyIHByb3BzLlxuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgX3Jlc29sdmVkUHJvcHMzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgX3Jlc29sdmVkUHJvcHMzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQzID8gX3VucmVzb2x2ZWRQcm9wczQgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQzLCBfdW5yZXNvbHZlZFByb3BzNCk7XG5cbiAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MywgX3Jlc29sdmVkUHJvcHM0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgLy8gYSBQbGFjZW1lbnRBbmRVcGRhdGUuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKSB7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbn1cblxudmFyIGFwcGVuZEFsbENoaWxkcmVuO1xudmFyIHVwZGF0ZUhvc3RDb250YWluZXI7XG52YXIgdXBkYXRlSG9zdENvbXBvbmVudCQxO1xudmFyIHVwZGF0ZUhvc3RUZXh0JDE7XG5cbntcbiAgLy8gTXV0YXRpb24gbW9kZVxuICBhcHBlbmRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIChwYXJlbnQsIHdvcmtJblByb2dyZXNzLCBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsIGlzSGlkZGVuKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykgey8vIE5vb3BcbiAgfTtcblxuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgLy8gSW4gbXV0YXRpb24gbW9kZSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhIGJhaWxvdXQgYmVjYXVzZVxuICAgICAgLy8gd2Ugd29uJ3QgdG91Y2ggdGhpcyBub2RlIGV2ZW4gaWYgY2hpbGRyZW4gY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGdldCB1cGRhdGVkIGJlY2F1c2Ugb25lIG9mIG91ciBjaGlsZHJlbiB1cGRhdGVkLCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgbmV3UHJvcHMgc28gd2UnbGwgaGF2ZSB0byByZXVzZSB0aGVtLlxuICAgIC8vIFRPRE86IFNwbGl0IHRoZSB1cGRhdGUgQVBJIGFzIHNlcGFyYXRlIGZvciB0aGUgcHJvcHMgdnMuIGNoaWxkcmVuLlxuICAgIC8vIEV2ZW4gYmV0dGVyIHdvdWxkIGJlIGlmIGNoaWxkcmVuIHdlcmVuJ3Qgc3BlY2lhbCBjYXNlZCBhdCBhbGwgdGhvLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG5cbiAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IHByZXBhcmVVcGRhdGUoaW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAvLyBJZiB0aGUgdGV4dCBkaWZmZXJzLCBtYXJrIGl0IGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGluIGRvbmUgaW4gY29tbWl0V29yay5cbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIC8vIElmIHdlJ3JlIGh5ZHJhdGluZywgd2Ugc2hvdWxkIGNvbnN1bWUgYXMgbWFueSBpdGVtcyBhcyB3ZSBjYW5cbiAgICAvLyBzbyB3ZSBkb24ndCBsZWF2ZSBhbnkgYmVoaW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIHRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIF90YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKF90YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUgPSBfdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RhaWxOb2RlID0gX3RhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgaWYgKCFoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgJiYgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgLy8gcm93IGF0IHRoZSB0YWlsLiBTbyB3ZSdsbCBrZWVwIG9uIGFuZCBjdXQgb2ZmIHRoZSByZXN0LlxuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBNb2RlOlxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgIGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCB0aGVuIHdlJ2xsIG5lZWQgdG8gc2NoZWR1bGUgYW4gdXBkYXRlIGZvclxuICAgICAgICAgICAgLy8gdGhlIGNvbW1pdCBzaWRlLWVmZmVjdHMgb24gdGhlIHJvb3QuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWJlclJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21taXQuXG4gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgd2l0aCBwcmV2aW91cyBjaGlsZHJlbi5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvciB1cGRhdGVzIHRvbywgYmVjYXVzZSBjdXJyZW50LmNoaWxkIHdvdWxkIG9ubHkgYmUgbnVsbFxuICAgICAgICAgICAgLy8gaWYgdGhlIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeSBiZSBlbXB0eSkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAvLyBib3R0b20tPnVwLiBUb3AtPmRvd24gaXMgZmFzdGVyIGluIElFMTEuXG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGFuZCBjcmVhdGVJbnN0YW5jZSBzdGVwIGludG8gdGhlIGJlZ2luUGhhc2VcbiAgICAgICAgICAgIC8vIHRvIGNvbnNvbGlkYXRlLlxuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2VzIHRvIHRoZSBoeWRyYXRlZCBub2RlIG5lZWQgdG8gYmUgYXBwbGllZCBhdCB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0LXBoYXNlIHdlIG1hcmsgdGhpcyBhcyBzdWNoLlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlSW5zdGFuY2UodHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBzdWNoIHJlbmRlcmVycyBnZXQgc2NoZWR1bGVkIGZvciBsYXRlciB3b3JrLlxuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oaW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuXG4gICAgICAgICAgdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQyKSB7XG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UobmV3VGV4dCwgX3Jvb3RDb250YWluZXJJbnN0YW5jZSwgX2N1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7IC8vIERvIG5vdCByZXNldCB0aGUgZWZmZWN0IGxpc3QuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0RGlkVGltZW91dCA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIHByZXZEaWRUaW1lb3V0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcHJldkRpZFRpbWVvdXQgPSBwcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgJiYgIXByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBzdWJ0cmVlZSBpcyBydW5uaW5nIGluIGJsb2NraW5nIG1vZGUgd2UgY2FuIHN1c3BlbmQsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvbid0IHN1c3BlbmQuXG4gICAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIHN0aWxsIHN1c3BlbmQgYSBzeW5jaHJvbm91cyB0cmVlIGlmIGFueXRoaW5nXG4gICAgICAgICAgLy8gaW4gdGhlIGNvbmN1cnJlbnQgdHJlZSBhbHJlYWR5IHN1c3BlbmRlZCBkdXJpbmcgdGhpcyByZW5kZXIuXG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGtub3duIGJ1Zy5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBiYWNrIHRvIHRocm93RXhjZXB0aW9uIGJlY2F1c2UgdGhpcyBpcyB0b28gbGF0ZVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGxhcmdlIHRyZWUgd2hpY2ggaXMgY29tbW9uIGZvciBpbml0aWFsIGxvYWRzLiBXZVxuICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyBpZiB3ZSBzaG91bGQgcmVzdGFydCBhIHJlbmRlciBvciBub3QgdW50aWwgd2UgZ2V0XG4gICAgICAgICAgICAvLyB0aGlzIG1hcmtlciwgYW5kIHRoaXMgaXMgdG9vIGxhdGUuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIHJlbmRlciBhbHJlYWR5IGhhZCBhIHBpbmcgb3IgbG93ZXIgcHJpIHVwZGF0ZXMsXG4gICAgICAgICAgICAvLyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2VcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHJlc3RhcnQgZnJvbSB3aXRoaW4gdGhyb3dFeGNlcHRpb24uXG4gICAgICAgICAgICB2YXIgaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0ID0gY3VycmVudCA9PT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0IHx8IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgaW4gYW4gaW52aXNpYmxlIHRyZWUgb3IgYSBuZXcgcmVuZGVyLCB0aGVuIHNob3dpbmdcbiAgICAgICAgICAgICAgLy8gdGhpcyBib3VuZGFyeSBpcyBvay5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGhpZGUgY29udGVudCBzbyB3ZSBzaG91bGRcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZCBmb3IgbG9uZ2VyIGlmIHBvc3NpYmxlLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE86IE9ubHkgc2NoZWR1bGUgdXBkYXRlcyBpZiB0aGVzZSB2YWx1ZXMgYXJlIG5vbiBlcXVhbCwgaS5lLiBpdCBjaGFuZ2VkLlxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCB8fCBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhXG4gICAgICAgICAgICAvLyByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS4gVGhpcyBmbGFnIGlzIGFsc28gdXNlZCB0byBoaWRlIHRoZVxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbi4gSW4gbXV0YXRpb24gbW9kZSwgd2UgYWxzbyBuZWVkIHRoZSBmbGFnIHRvXG4gICAgICAgICAgICAvLyAqdW5oaWRlKiBjaGlsZHJlbiB0aGF0IHdlcmUgcHJldmlvdXNseSBoaWRkZW4sIHNvIGNoZWNrIGlmIHRoaXNcbiAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHRvby5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVQb3J0YWxNb3VudCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAvLyBQb3AgcHJvdmlkZXIgZmliZXJcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyBpbiB0aGUgZGVmYXVsdCwgXCJpbmRlcGVuZGVudFwiIG1vZGUuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdGhpcyBtb2RlLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZFN1c3BlbmRBbHJlYWR5ID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG4gICAgICAgIHZhciByZW5kZXJlZFRhaWwgPSByZW5kZXJTdGF0ZS5yZW5kZXJpbmc7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgIC8vIElmIG5ldyBjb250ZW50IHVuc3VzcGVuZGVkLCBidXQgdGhlcmUncyBzdGlsbCBzb21lIGNvbnRlbnQgdGhhdFxuICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmUgc3VzcGVuZGVkIGlmIHNvbWV0aGluZyBpbiB0aGlzIHJlbmRlciBwYXNzIHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgIC8vIGZpbmRGaXJzdFN1c3BlbmRlZC5cbiAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9IHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmIChjdXJyZW50ID09PSBudWxsIHx8IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVubmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbm5hYmxlcyB0byB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGFueXdheSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtZWFudGltZSwgd2UgY2FuIGFkZC9yZW1vdmUvY2hhbmdlIGl0ZW1zIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyB3ZSBkaWQgZmluZCBhbHJlYWR5IGhhcyB0aGVpciBsaXN0ZW5lcnMgYXR0YWNoZWQuXG5cbiAgICAgICAgICAgICAgICAgIHZhciBuZXdUaGVubmFibGVzID0gc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH0gLy8gUmVyZW5kZXIgdGhlIHdob2xlIGxpc3QsIGJ1dCB0aGlzIHRpbWUsIHdlJ2xsIGZvcmNlIGZhbGxiYWNrc1xuICAgICAgICAgICAgICAgICAgLy8gdG8gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cblxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZXNldCB0aGUgY2hpbGQgZmliZXJzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuXG4gICAgICAgICAgICAgICAgICByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7IC8vIFNldCB1cCB0aGUgU3VzcGVuc2UgQ29udGV4dCB0byBmb3JjZSBzdXNwZW5zZSBhbmQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgIC8vIHJlcmVuZGVyIHRoZSBjaGlsZHJlbi5cblxuICAgICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmIG5vdygpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZSB0YWlsLlxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgdmFyIF9zdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmVuZGVyZWRUYWlsKTtcblxuICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlOyAvLyBFbnN1cmUgd2UgdHJhbnNmZXIgdGhlIHVwZGF0ZSBxdWV1ZSB0byB0aGUgcGFyZW50IHNvIHRoYXQgaXQgZG9lc24ndFxuICAgICAgICAgICAgICAvLyBnZXQgbG9zdCBpZiB0aGlzIHJvdyBlbmRzIHVwIGRyb3BwZWQgZHVyaW5nIGEgc2Vjb25kIHBhc3MuXG5cbiAgICAgICAgICAgICAgdmFyIF9uZXdUaGVubmFibGVzID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICBpZiAoX25ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9uZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsID09PSBudWxsICYmIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSAnaGlkZGVuJyAmJiAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJiAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVsZXRlIHRoZSByb3cgd2UganVzdCByZW5kZXJlZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgcmVuZGVyZWQgdGhpc1xuICAgICAgICAgICAgICAgICAgLy8gY2hpbGQuIFRoZSBuZXN0ZWQgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGFwcGVuZGVkIHRoZW1zZWx2ZXMuXG4gICAgICAgICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZW1vdmUgYW55IGVmZmVjdHMgdGhhdCB3ZXJlIGFwcGVuZGVkIGFmdGVyIHRoaXMgcG9pbnQuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9IC8vIFdlJ3JlIGRvbmUuXG5cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggLy8gVGhlIHRpbWUgaXQgdG9vayB0byByZW5kZXIgbGFzdCByb3cgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICBub3coKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0IGxpc3Qgb2YgdGhlIGJhY2t3YXJkcyB0YWlsIHdpbGwgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kLiBUaGlzIGJyZWFrcyB0aGUgZ3VhcmFudGVlIHRoYXQgbGlmZS1jeWNsZXMgZmlyZSBpblxuICAgICAgICAgICAgLy8gc2libGluZyBvcmRlciBidXQgdGhhdCBpc24ndCBhIHN0cm9uZyBndWFyYW50ZWUgcHJvbWlzZWQgYnkgUmVhY3QuXG4gICAgICAgICAgICAvLyBFc3BlY2lhbGx5IHNpbmNlIHRoZXNlIG1pZ2h0IGFsc28ganVzdCBwb3AgaW4gZHVyaW5nIGZ1dHVyZSBjb21taXRzLlxuICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAgICAgICAgICByZW5kZXJlZFRhaWwuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1NpYmxpbmcgPSByZW5kZXJTdGF0ZS5sYXN0O1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5zaWJsaW5nID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3QgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRhaWwgcm93cyB0byByZW5kZXIuXG4gICAgICAgICAgLy8gUG9wIGEgcm93LlxuICAgICAgICAgIHZhciBuZXh0ID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkganVzdCBhdm9pZCBwb3BwaW5nIGl0IGluc3RlYWQgYW5kIG9ubHlcbiAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBEbyBhIHBhc3Mgb3ZlciB0aGUgbmV4dCByb3cuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX25leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5leHRJc0hpZGRlbiA9IF9uZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldklzSGlkZGVuICE9PSBuZXh0SXNIaWRkZW4gJiYgbmV3UHJvcHMubW9kZSAhPT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kV29yayh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgX2ZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKCEoKF9mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSByb290IGZhaWxlZCB0byB1bm1vdW50IGFmdGVyIGFuIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICB2YXIgX2ZsYWdzMiA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspIHtcbiAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgICAgICAgaWYgKGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2UpIHtcbiAgLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGVycm9yLCBjYWxsIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgdGhyb3duXG4gIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gIH07XG59XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGZvcmtlZCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuLy8gQnkgZGVmYXVsdCwgcmV0dXJuIGB0cnVlYCB0byBsb2cgZXJyb3JzIHRvIHRoZSBjb25zb2xlLlxuLy8gRm9ya3MgY2FuIHJldHVybiBgZmFsc2VgIGlmIHRoaXMgaXNuJ3QgZGVzaXJhYmxlLlxuZnVuY3Rpb24gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG5cbiAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlcnJvckluZm8uc291cmNlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGluIHdpbmRvdyBgZXJyb3JgIGhhbmRsZXIuXG4gICAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZHkgZm9yIHRlc3RpbmcgZXJyb3IgYm91bmRhcmllcyB3aXRob3V0IG5vaXNlLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAvLyBiZWVuIGFjY2lkZW50YWwsIHdlJ2xsIHN1cmZhY2UgaXQgYW55d2F5LlxuICAgICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG5cbiAgICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgICAgICAvLyBGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgYmxvY2ssIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBzb3VyY2UgPyBnZXRDb21wb25lbnROYW1lKHNvdXJjZS50eXBlKSA6IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZU1lc3NhZ2UgPSBjb21wb25lbnROYW1lID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50OlwiIDogJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzOic7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lKGJvdW5kYXJ5LnR5cGUpO1xuXG4gICAgICBpZiAoZXJyb3JCb3VuZGFyeU5hbWUpIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIFwiICsgKFwidXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgKyBlcnJvckJvdW5kYXJ5TmFtZSArIFwiLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21iaW5lZE1lc3NhZ2UgPSBjb21wb25lbnROYW1lTWVzc2FnZSArIFwiXFxuXCIgKyBjb21wb25lbnRTdGFjayArIFwiXFxuXFxuXCIgKyAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgICAgLy8gaGFzIGFscmVhZHkgcHJpbnRlZCBpdC4gRXZlbiBpZiB0aGUgYXBwbGljYXRpb24gc3dhbGxvd3MgdGhlIGVycm9yLCBpdCBpcyBzdGlsbFxuICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIHdlIHByaW50IHRoZSBlcnJvciBkaXJlY3RseS5cbiAgICAgIC8vIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBtZXNzYWdlLCB0aGUgSlMgc3RhY2ssIGFuZCBhbnl0aGluZyB0aGUgYnJvd3NlciB3YW50cyB0byBzaG93LlxuICAgICAgLy8gV2UgcGFzcyB0aGUgZXJyb3Igb2JqZWN0IGluc3RlYWQgb2YgY3VzdG9tIG1lc3NhZ2Ugc28gdGhhdCB0aGUgYnJvd3NlciBkaXNwbGF5cyB0aGUgZXJyb3IgbmF0aXZlbHkuXG4gICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFBvc3NpYmx5V2Vha01hcCQxID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuXG5mdW5jdGlvbiBjcmVhdGVSb290RXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTsgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cblxuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogbnVsbFxuICB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7XG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gIGlmIChpbnN0ICE9PSBudWxsICYmIHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVG8gcHJlc2VydmUgdGhlIHByZWV4aXN0aW5nIHJldHJ5IGJlaGF2aW9yIG9mIGVycm9yIGJvdW5kYXJpZXMsXG4gICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgLy8gVGhpcyBnZXRzIHJlc2V0IGJlZm9yZSB3ZSB5aWVsZCBiYWNrIHRvIHRoZSBicm93c2VyLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIHN0cmljdCBtb2RlIGlmIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpc1xuICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZCh0aGlzKTsgLy8gT25seSBsb2cgaGVyZSBpZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZFxuXG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChlcnJvciQxLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJydcbiAgICAgIH0pO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWQsXG4gICAgICAgICAgLy8gdGhlbiBpdCBuZWVkcyB0byBjYWxsIHNldFN0YXRlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuXG4gICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShmaWJlci5sYW5lcywgU3luY0xhbmUpKSB7XG4gICAgICAgICAgICBlcnJvcignJXM6IEVycm9yIGJvdW5kYXJpZXMgc2hvdWxkIGltcGxlbWVudCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKS4gJyArICdJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS4nLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXQgb25seSBpZlxuICAvLyBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoXG4gIC8vIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwJDEoKTtcbiAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcbiAgICB3YWtlYWJsZS50aGVuKHBpbmcsIHBpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKHJvb3QsIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7IC8vIEl0cyBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgc291cmNlRmliZXIuZmlyc3RFZmZlY3QgPSBzb3VyY2VGaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS5cbiAgICB2YXIgd2FrZWFibGUgPSB2YWx1ZTtcblxuICAgIGlmICgoc291cmNlRmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIG1lbW9pemVkU3RhdGUgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIGF0dGVtcHRlZFxuICAgICAgLy8gdG8gcmVuZGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTb3VyY2UgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnRTb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpOyAvLyBTY2hlZHVsZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSB0byByZS1yZW5kZXIgdGhlIHRpbWVkIG91dCB2aWV3LlxuXG4gICAgdmFyIF93b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIHNob3VsZENhcHR1cmVTdXNwZW5zZShfd29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5KSkge1xuICAgICAgICAvLyBGb3VuZCB0aGUgbmVhcmVzdCBib3VuZGFyeS5cbiAgICAgICAgLy8gU3Rhc2ggdGhlIHByb21pc2Ugb24gdGhlIGJvdW5kYXJ5IGZpYmVyLiBJZiB0aGUgYm91bmRhcnkgdGltZXMgb3V0LCB3ZSdsbFxuICAgICAgICAvLyBhdHRhY2ggYW5vdGhlciBsaXN0ZW5lciB0byBmbGlwIHRoZSBib3VuZGFyeSBiYWNrIHRvIGl0cyBub3JtYWwgc3RhdGUuXG4gICAgICAgIHZhciB3YWtlYWJsZXMgPSBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHdha2VhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdha2VhYmxlcy5hZGQod2FrZWFibGUpO1xuICAgICAgICB9IC8vIElmIHRoZSBib3VuZGFyeSBpcyBvdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgICAgICAvLyBzdXNwZW5kIHRoZSBjb21taXQuIFByZXRlbmQgYXMgaWYgdGhlIHN1c3BlbmRlZCBjb21wb25lbnQgcmVuZGVyZWRcbiAgICAgICAgLy8gbnVsbCBhbmQga2VlcCByZW5kZXJpbmcuIEluIHRoZSBjb21taXQgcGhhc2UsIHdlJ2xsIHNjaGVkdWxlIGFcbiAgICAgICAgLy8gc3Vic2VxdWVudCBzeW5jaHJvbm91cyB1cGRhdGUgdG8gcmUtcmVuZGVyIHRoZSBTdXNwZW5zZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZTogSXQgZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgY29tcG9uZW50IHRoYXQgc3VzcGVuZGVkIHdhc1xuICAgICAgICAvLyBpbnNpZGUgYSBibG9ja2luZyBtb2RlIHRyZWUuIElmIHRoZSBTdXNwZW5zZSBpcyBvdXRzaWRlIG9mIGl0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgKm5vdCogc3VzcGVuZCB0aGUgY29tbWl0LlxuXG5cbiAgICAgICAgaWYgKChfd29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBTeW5jTGFuZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgU3luY0xhbmUpOyAvLyBFeGl0IHdpdGhvdXQgc3VzcGVuZGluZy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgICAgLy8gd2l0aCB0aGUgbm9ybWFsIHN1c3BlbmQgcGF0aC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAgIC8vIHJlbmRlciBwYXNzIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gb3IgcmVzdGFydCBvciBcInN1c3BlbmRcIiB0aGUgY29tbWl0LlxuICAgICAgICAvLyBUaGUgYWN0dWFsIGxvZ2ljIGZvciB0aGlzIGlzIHNwcmVhZCBvdXQgaW4gZGlmZmVyZW50IHBsYWNlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBmaXJzdCBwcmluY2lwbGUgaXMgdGhhdCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdoZW4gd2UgY29tcGxldGVcbiAgICAgICAgLy8gYSByb290LCB0aGVuIHdlIHNob3VsZCBhbHNvIHJlc3RhcnQgaWYgd2UgZ2V0IGFuIHVwZGF0ZSBvciBwaW5nIHRoYXRcbiAgICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgICAgLy8gYmVjYXVzZSB5b3UgdGhpbmsgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdGFydCBiZWZvcmUgY29tbWl0dGluZy4gSG93ZXZlcixcbiAgICAgICAgLy8gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJlc3RhcnQgb25seSB3aGlsZSBpbiB0aGUgcGVyaW9kIHdlJ3JlIHN1c3BlbmRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVzdGFydGluZyB0b28gYWdncmVzc2l2ZWx5IGlzIGFsc28gbm90IGdvb2QgYmVjYXVzZSBpdCBzdGFydmVzIG91dCBhbnlcbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFNvIHdlIHVzZSBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGVuLlxuICAgICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIG5vdGhpbmcgdGhyZXcgYSBQcm9taXNlIG9yIGFsbCB0aGUgc2FtZSBmYWxsYmFja3MgYXJlIGFscmVhZHkgc2hvd2luZyxcbiAgICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gaW5pdGlhbCByZW5kZXIgb2YgYSBuZXcgdHJlZSBvZiBTdXNwZW5zZSBib3VuZGFyaWVzIGFuZFxuICAgICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBzaG93IHRoZSBpbml0aWFsIGxvYWRpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgICAgLy8gYSBmYWxsYmFjaywgdGhlbiB3ZSBzaG91bGQgYWx3YXlzIHN1c3BlbmQvcmVzdGFydC4gVHJhbnNpdGlvbnMgYXBwbHlcbiAgICAgICAgLy8gdG8gdGhpcyBjYXNlLiBJZiBub25lIGlzIGRlZmluZWQsIEpORCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIGFuZCBpdCBnZXRzIFwicmV0cmllZFwiLCBhbGxvd2luZyB1cyB0byBzaG93XG4gICAgICAgIC8vIGFub3RoZXIgbGV2ZWwsIGJ1dCB0aGVyZSdzIHN0aWxsIGFuIGlubmVyIGJvdW5kYXJ5IHRoYXQgd291bGQgc2hvdyBhIGZhbGxiYWNrLFxuICAgICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgICAvLyBhbnl3aGVyZSBpbiB0aGUgdHJlZS4gVGhpcyBlZmZlY3RpdmVseSB0aHJvdHRsZXMgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpbnRvIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmFpbiBvZiBjb21taXRzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVzdGFydCB0b1xuICAgICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGVyZSdzIGFtYmlndWl0eSBkdWUgdG8gYmF0Y2hpbmcgaXQncyByZXNvbHZlZCBpbiBwcmVmZXJlbmNlIG9mOlxuICAgICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBcImJ1c3lcIiBzdGF0ZSBkb2Vzbid0IGdldCBmb3JjZSBjb21taXR0ZWQuIFdlIHdhbnQgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG5cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFRoaXMgYm91bmRhcnkgYWxyZWFkeSBjYXB0dXJlZCBkdXJpbmcgdGhpcyByZW5kZXIuIENvbnRpbnVlIHRvIHRoZSBuZXh0XG4gICAgICAvLyBib3VuZGFyeS5cblxuXG4gICAgICBfd29ya0luUHJvZ3Jlc3MgPSBfd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIH0gd2hpbGUgKF93b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7IC8vIE5vIGJvdW5kYXJ5IHdhcyBmb3VuZC4gRmFsbHRocm91Z2ggdG8gZXJyb3IgbW9kZS5cbiAgICAvLyBUT0RPOiBVc2UgaW52YXJpYW50IHNvIHRoZSBtZXNzYWdlIGlzIHN0cmlwcGVkIGluIHByb2Q/XG5cblxuICAgIHZhbHVlID0gbmV3IEVycm9yKChnZXRDb21wb25lbnROYW1lKHNvdXJjZUZpYmVyLnR5cGUpIHx8ICdBIFJlYWN0IGNvbXBvbmVudCcpICsgJyBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG4nICsgJ1xcbicgKyAnQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byAnICsgJ3Byb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LicpO1xuICB9IC8vIFdlIGRpZG4ndCBmaW5kIGEgYm91bmRhcnkgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyB0eXBlIG9mIGV4Y2VwdGlvbi4gU3RhcnRcbiAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gIC8vIGFzIGFuIGVycm9yLlxuXG5cbiAgcmVuZGVyRGlkRXJyb3IoKTtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCBsYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIENhcHR1cmUgYW5kIHJldHJ5XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgX2xhbmUpOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgX2xhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcblxue1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG5ldyBTZXQoKTtcbn1cblxudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcblxudmFyIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciA9IGZ1bmN0aW9uIChjdXJyZW50LCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn07IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IHVubW91bnRpbmcuXG5cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyLCBudWxsLCBjdXJyZW50LCBpbnN0YW5jZSk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIHVubW91bnRFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHVubW91bnRFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciByZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIHJlZiwgbnVsbCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICB2YXIgcmVmRXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgcmVmRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gTW91bnRcbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG5cbiAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgIGlmIChkZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiAnICsgJ3VwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzdHJveS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJ1xcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIHVzZUVmZmVjdChhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArICd1c2VFZmZlY3QoKCkgPT4ge1xcbicgKyAnICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuJyArICcgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuJyArICcgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuJyArICcgICAgLy8gLi4uXFxuJyArICcgIH1cXG4nICsgJyAgZmV0Y2hEYXRhKCk7XFxuJyArIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgKyAnTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ob29rcy1kYXRhLWZldGNoaW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQ6ICcgKyBkZXN0cm95O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvcignQW4gZWZmZWN0IGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMnLCBhZGRlbmR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBfZWZmZWN0ID0gZWZmZWN0LFxuICAgICAgICAgIG5leHQgPSBfZWZmZWN0Lm5leHQsXG4gICAgICAgICAgdGFnID0gX2VmZmVjdC50YWc7XG5cbiAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxICYmICh0YWcgJiBIYXNFZmZlY3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBuZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cblxuXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCB1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgdmFyIF91cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAoX3VwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIF91cGRhdGVRdWV1ZSwgX2luc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiBmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGNvbW1pdE1vdW50KF9pbnN0YW5jZTIsIHR5cGUsIHByb3BzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggcG9ydGFscy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vbkNvbW1pdCxcbiAgICAgICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50ID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBjb21taXRUaW1lLCBmaW5pc2hlZFJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pIHtcbiAge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMywgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoZWRXb3JrKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciBjdXJyZW50UmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59IC8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5cblxuZnVuY3Rpb24gY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQpO1xuXG4gIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB2YXIgX2VmZmVjdDIgPSBlZmZlY3QsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95ID0gX2VmZmVjdDIuZGVzdHJveSxcbiAgICAgICAgICAgICAgICAgIHRhZyA9IF9lZmZlY3QyLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGN1cnJlbnQsIGVmZmVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpcyByZWN1cnNpdmUuXG4gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCB1c2luZyB0aGlzIHBhcmVudCBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgd2lsbCBnZXQgcHVzaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICB7XG4gICAgICAgICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXaGlsZSB3ZSdyZSBpbnNpZGUgYSByZW1vdmVkIGhvc3Qgbm9kZSB3ZSBkb24ndCB3YW50IHRvIGNhbGxcbiAgLy8gcmVtb3ZlQ2hpbGQgb24gdGhlIGlubmVyIG5vZGVzIGJlY2F1c2UgdGhleSdyZSByZW1vdmVkIGJ5IHRoZSB0b3BcbiAgLy8gY2FsbCBhbnl3YXkuIFdlIGFsc28gd2FudCB0byBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50IG9uIGFsbFxuICAvLyBjb21wb3NpdGVzIGJlZm9yZSB0aGlzIGhvc3Qgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuIFRoZXJlZm9yZVxuICAvLyB3ZSBkbyBhbiBpbm5lciBsb29wIHdoaWxlIHdlJ3JlIHN0aWxsIGluc2lkZSB0aGUgaG9zdCBub2RlLlxuICB2YXIgbm9kZSA9IHJvb3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgdGhleSBtYXkgY29udGFpbiBtb3JlIGNvbXBvc2l0ZSBvciBob3N0IG5vZGVzLlxuICAgIC8vIFNraXAgcG9ydGFscyBiZWNhdXNlIGNvbW1pdFVubW91bnQoKSBjdXJyZW50bHkgdmlzaXRzIHRoZW0gcmVjdXJzaXZlbHkuXG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCAmJiAoIC8vIElmIHdlIHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyB1c2luZyBjb21taXRVbm1vdW50IGFib3ZlLlxuICAgIC8vIElmIHdlIGRvbid0IHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyBoZXJlIGluc3RlYWQuXG4gICAgIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVycyB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuIElkZWFsbHksIHdlXG4gIC8vIHNob3VsZCBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLiBUaGlzIGNoaWxkXG4gIC8vIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gIC8vIE5vdGU6IHdlIGNhbm5vdCBudWxsIG91dCBzaWJsaW5nIGhlcmUsIG90aGVyd2lzZSBpdCBjYW4gY2F1c2UgaXNzdWVzXG4gIC8vIHdpdGggZmluZERPTU5vZGUgYW5kIGhvdyBpdCByZXF1aXJlcyB0aGUgc2libGluZyBmaWVsZCB0byBjYXJyeSBvdXRcbiAgLy8gdHJhdmVyc2FsIGluIGEgbGF0ZXIgZWZmZWN0LiBTZWUgUFIgIzE2ODIwLiBXZSBub3cgY2xlYXIgdGhlIHNpYmxpbmdcbiAgLy8gZmllbGQgYWZ0ZXIgZWZmZWN0cywgc2VlOiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy9cbiAgLy8gRG9uJ3QgZGlzY29ubmVjdCBzdGF0ZU5vZGUgbm93OyBpdCB3aWxsIGJlIGRldGFjaGVkIGluIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvLyBJdCBtYXkgYmUgcmVxdWlyZWQgaWYgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlzIGFuIGVycm9yIGJvdW5kYXJ5LFxuICAvLyBhbmQgb25lIG9mIGl0cyBkZXNjZW5kYW50cyB0aHJvd3Mgd2hpbGUgdW5tb3VudGluZyBhIHBhc3NpdmUgZWZmZWN0LlxuICBmaWJlci5hbHRlcm5hdGUgPSBudWxsO1xuICBmaWJlci5jaGlsZCA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcblxuICAgIHdoaWxlIChub2RlLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBub2RlLnRhZyAhPT0gSG9zdFRleHQgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cblxuICB2YXIgcGFyZW50RmliZXIgPSBnZXRIb3N0UGFyZW50RmliZXIoZmluaXNoZWRXb3JrKTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIHBhcmVudDtcbiAgdmFyIGlzQ29udGFpbmVyO1xuICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgaXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cblxuICBpZiAocGFyZW50RmliZXIuZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAvLyBSZXNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgYmVmb3JlIGRvaW5nIGFueSBpbnNlcnRpb25zXG4gICAgcmVzZXRUZXh0Q29udGVudChwYXJlbnQpOyAvLyBDbGVhciBDb250ZW50UmVzZXQgZnJvbSB0aGUgZWZmZWN0IHRhZ1xuXG4gICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgfVxuXG4gIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cblxuICBpZiAoaXNDb250YWluZXIpIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9IGVsc2Uge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGQocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgdmFyIG5vZGUgPSBjdXJyZW50OyAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuXG4gIHZhciBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghY3VycmVudFBhcmVudElzVmFsaWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgZmluZFBhcmVudDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEocGFyZW50ICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIEFmdGVyIGFsbCB0aGUgY2hpbGRyZW4gaGF2ZSB1bm1vdW50ZWQsIGl0IGlzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGVcbiAgICAgIC8vIG5vZGUgZnJvbSB0aGUgdHJlZS5cblxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSAvLyBEb24ndCB2aXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIGFscmVhZHkgdmlzaXRlZCB0aGVtLlxuXG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBpbnRvIGEgcG9ydGFsLCBpdCBiZWNvbWVzIHRoZSBwYXJlbnQgdG8gcmVtb3ZlIGZyb20uXG4gICAgICAgIC8vIFdlIHdpbGwgcmVhc3NpZ24gaXQgYmFjayB3aGVuIHdlIHBvcCB0aGUgcG9ydGFsIG9uIHRoZSB3YXkgdXAuXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHBvcnRhbHMgbWlnaHQgY29udGFpbiBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBtYXkgZmluZCBtb3JlIGhvc3QgY29tcG9uZW50cyBiZWxvdy5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQuXG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgZGV0YWNoRmliZXJNdXRhdGlvbihjdXJyZW50KTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgZGV0YWNoRmliZXJNdXRhdGlvbihhbHRlcm5hdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFdvcmsoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBMYXlvdXQgZWZmZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZyB0aGUgbXV0YXRpb24gcGhhc2Ugc28gdGhhdCBhbGxcbiAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29tbWl0IHRoZSB3b3JrIHByZXBhcmVkIGVhcmxpZXIuXG4gICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3UHJvcHM7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTsgLy8gVE9ETzogVHlwZSB0aGUgdXBkYXRlUXVldWUgdG8gYmUgc3BlY2lmaWMgdG8gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRVcGRhdGUoaW5zdGFuY2UsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3Jvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKF9yb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3QgaHlkcmF0ZWQuIE5vIG5lZWQgdG8gaHlkcmF0ZSBhZ2Fpbi5cbiAgICAgICAgICAgIF9yb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKF9yb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspIHtcbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlICE9PSBudWxsKSB7XG4gICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG5cbiAgICB7XG4gICAgICAvLyBIaWRlIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHByaW1hcnkgY2hpbGRyZW4uIFRPRE86XG4gICAgICAvLyBJZGVhbGx5LCB0aGlzIGVmZmVjdCB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIG9uIHRoZSBPZmZzY3JlZW4gZmliZXJcbiAgICAgIC8vIGl0c2VsZi4gVGhhdCdzIGhvdyB1bmhpZGluZyB3b3JrczogdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgc2NoZWR1bGVzIGFuXG4gICAgICAvLyBlZmZlY3Qgb24gaXRzZWxmLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIHRoZSBjb21wb25lbnQgZGlkbid0IGNvbXBsZXRlLFxuICAgICAgLy8gc28gdGhlIGZpYmVyIHdhcyBuZXZlciBhZGRlZCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIG5vcm1hbCBwYXRoLiBXZVxuICAgICAgLy8gY291bGQgaGF2ZSBhcHBlbmRlZCBpdCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIFN1c3BlbnNlIGNvbXBvbmVudCdzXG4gICAgICAvLyBzZWNvbmQgcGFzcywgYnV0IGRvaW5nIGl0IHRoaXMgd2F5IGlzIGxlc3MgY29tcGxpY2F0ZWQuIFRoaXMgd291bGQgYmVcbiAgICAgIC8vIHNpbXBsZXIgaWYgd2UgZ290IHJpZCBvZiB0aGUgZWZmZWN0IGxpc3QgYW5kIHRyYXZlcnNlZCB0aGUgdHJlZSwgbGlrZVxuICAgICAgLy8gd2UncmUgcGxhbm5pbmcgdG8gZG8uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4ocHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcblxuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKSB7XG4gIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHRoZW4gaXQgd2lsbCBoYXZlIGEgc2V0IG9mIHdha2VhYmxlcy5cbiAgLy8gRm9yIGVhY2ggd2FrZWFibGUsIGF0dGFjaCBhIGxpc3RlbmVyIHNvIHRoYXQgd2hlbiBpdCByZXNvbHZlcywgUmVhY3RcbiAgLy8gYXR0ZW1wdHMgdG8gcmUtcmVuZGVyIHRoZSBib3VuZGFyeSBpbiB0aGUgcHJpbWFyeSAocHJlLXRpbWVvdXQpIHN0YXRlLlxuICB2YXIgd2FrZWFibGVzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh3YWtlYWJsZXMgIT09IG51bGwpIHtcbiAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgIGlmIChyZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIGJvdW5kYXJ5IGZpYmVyIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG5cbiAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod2FrZWFibGUuX19yZWFjdERvTm90VHJhY2VJbnRlcmFjdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IGdvZXMgZnJvbSB2aXNpYmxlIHRvIGhpZGRlbi5cbi8vIEl0IHJldHVybnMgZmFsc2UgaWYgdGhlIGJvdW5kYXJ5IGlzIGFscmVhZHkgaGlkZGVuLlxuLy8gVE9ETzogVXNlIGFuIGVmZmVjdCB0YWcuXG5cblxuZnVuY3Rpb24gaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBudWxsIHx8IG9sZFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlICE9PSBudWxsICYmIG5ld1N0YXRlLmRlaHlkcmF0ZWQgPT09IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb21taXRSZXNldFRleHRDb250ZW50KGN1cnJlbnQpIHtcblxuICByZXNldFRleHRDb250ZW50KGN1cnJlbnQuc3RhdGVOb2RlKTtcbn1cblxudmFyIENPTVBPTkVOVF9UWVBFID0gMDtcbnZhciBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSAxO1xudmFyIFJPTEVfVFlQRSA9IDI7XG52YXIgVEVTVF9OQU1FX1RZUEUgPSAzO1xudmFyIFRFWFRfVFlQRSA9IDQ7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciQxID0gU3ltYm9sLmZvcjtcbiAgQ09NUE9ORU5UX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuY29tcG9uZW50Jyk7XG4gIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzJyk7XG4gIFJPTEVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5yb2xlJyk7XG4gIFRFU1RfTkFNRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRlc3RfaWQnKTtcbiAgVEVYVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRleHQnKTtcbn1cbnZhciBjb21taXRIb29rcyA9IFtdO1xuZnVuY3Rpb24gb25Db21taXRSb290JDEoKSB7XG4gIHtcbiAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICByZXR1cm4gY29tbWl0SG9vaygpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgIElzU29tZVJlbmRlcmVyQWN0aW5nID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSXNTb21lUmVuZGVyZXJBY3Rpbmc7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBEaXNjcmV0ZUV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICovXG40O1xudmFyIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgKi9cbjg7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ29tbWl0Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgUmV0cnlBZnRlckVycm9yID1cbi8qICAgICAgICovXG42NDtcbnZhciBSb290SW5jb21wbGV0ZSA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1OyAvLyBEZXNjcmliZXMgd2hlcmUgd2UgYXJlIGluIHRoZSBSZWFjdCBleGVjdXRpb24gc3RhY2tcblxudmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQ7IC8vIFRoZSByb290IHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7IC8vIFRoZSBmaWJlciB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7IC8vIFRoZSBsYW5lcyB3ZSdyZSByZW5kZXJpbmdcblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gU3RhY2sgdGhhdCBhbGxvd3MgY29tcG9uZW50cyB0byBjaGFuZ2UgdGhlIHJlbmRlciBsYW5lcyBmb3IgaXRzIHN1YnRyZWVcbi8vIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBUaGUgb25seVxuLy8gY2FzZSB3aGVyZSBpdCdzIGRpZmZlcmVudCBmcm9tIGB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc2AgaXMgd2hlbiB3ZVxuLy8gZW50ZXIgYSBzdWJ0cmVlIHRoYXQgaXMgaGlkZGVuIGFuZCBuZWVkcyB0byBiZSB1bmhpZGRlbjogU3VzcGVuc2UgYW5kXG4vLyBPZmZzY3JlZW4gY29tcG9uZW50LlxuLy9cbi8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbi8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIHN1YnRyZWVSZW5kZXJMYW5lcy5cblxudmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG52YXIgc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5vTGFuZXMpOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFwiSW5jbHVkZWRcIiBsYW5lcyByZWZlciB0byBsYW5lcyB0aGF0IHdlcmUgd29ya2VkIG9uIGR1cmluZyB0aGlzIHJlbmRlci4gSXQnc1xuLy8gc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gYHJlbmRlckxhbmVzYCBiZWNhdXNlIGByZW5kZXJMYW5lc2AgY2FuIGNoYW5nZSBhcyB5b3Vcbi8vIGVudGVyIGFuZCBleGl0IGFuIE9mZnNjcmVlbiB0cmVlLiBUaGlzIHZhbHVlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVuZGVyXG4vLyBsYW5lcyBmb3IgdGhlIGVudGlyZSByZW5kZXIgcGhhc2UuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmsgbGVmdCBvdmVyIGJ5IGNvbXBvbmVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBPbmx5XG4vLyBpbmNsdWRlcyB1bnByb2Nlc3NlZCB1cGRhdGVzLCBub3Qgd29yayBpbiBiYWlsZWQgb3V0IGNoaWxkcmVuLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgcGluZ2VkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xudmFyIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgY29tbWl0dGVkIGEgZmFsbGJhY2suIFRoaXMgbGV0cyB1cyBlbnN1cmUgYSB0cmFpblxuLy8gbW9kZWwgd2hlcmUgd2UgZG9uJ3QgY29tbWl0IG5ldyBsb2FkaW5nIHN0YXRlcyBpbiB0b28gcXVpY2sgc3VjY2Vzc2lvbi5cblxudmFyIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSAwO1xudmFyIEZBTExCQUNLX1RIUk9UVExFX01TID0gNTAwOyAvLyBUaGUgYWJzb2x1dGUgdGltZSBmb3Igd2hlbiB3ZSBzaG91bGQgc3RhcnQgZ2l2aW5nIHVwIG9uIHJlbmRlcmluZ1xuLy8gbW9yZSBhbmQgcHJlZmVyIENQVSBzdXNwZW5zZSBoZXVyaXN0aWNzIGluc3RlYWQuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gSW5maW5pdHk7IC8vIEhvdyBsb25nIGEgcmVuZGVyIGlzIHN1cHBvc2VkIHRvIHRha2UgYmVmb3JlIHdlIHN0YXJ0IGZvbGxvd2luZyBDUFVcbi8vIHN1c3BlbnNlIGhldXJpc3RpY3MgYW5kIG9wdCBvdXQgb2YgcmVuZGVyaW5nIG1vcmUgY29udGVudC5cblxudmFyIFJFTkRFUl9USU1FT1VUX01TID0gNTAwO1xuXG5mdW5jdGlvbiByZXNldFJlbmRlclRpbWVyKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG59XG52YXIgbmV4dEVmZmVjdCA9IG51bGw7XG52YXIgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xudmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG52YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xudmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xudmFyIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDsgLy8gTWFya3MgdGhlIG5lZWQgdG8gcmVzY2hlZHVsZSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGVzZSBsYW5lc1xuLy8gZHVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIHRyYWNlZCBhY3Jvc3MgY29tcG9uZW50c1xuLy8gdGhhdCBzcGF3biBuZXcgd29yayBkdXJpbmcgcmVuZGVyLiBFLmcuIGhpZGRlbiBib3VuZGFyaWVzLCBzdXNwZW5kZWQgU1NSXG4vLyBoeWRyYXRpb24gb3IgU3VzcGVuc2VMaXN0LlxuLy8gVE9ETzogQ2FuIHVzZSBhIGJpdG1hc2sgaW5zdGVhZCBvZiBhbiBhcnJheVxuXG52YXIgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsOyAvLyBJZiB0d28gdXBkYXRlcyBhcmUgc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2FtZSBldmVudCwgd2Ugc2hvdWxkIHRyZWF0IHRoZWlyXG4vLyBldmVudCB0aW1lcyBhcyBzaW11bHRhbmVvdXMsIGV2ZW4gaWYgdGhlIGFjdHVhbCBjbG9jayB0aW1lIGhhcyBhZHZhbmNlZFxuLy8gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuXG52YXIgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xudmFyIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbnZhciBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzOyAvLyBEZXYgb25seSBmbGFnIHRoYXQgdHJhY2tzIGlmIHBhc3NpdmUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGJlaW5nIGZsdXNoZWQuXG4vLyBXZSB3YXJuIGFib3V0IHN0YXRlIHVwZGF0ZXMgZm9yIHVubW91bnRlZCBjb21wb25lbnRzIGRpZmZlcmVudGx5IGluIHRoaXMgY2FzZS5cblxudmFyIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG52YXIgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG59XG5mdW5jdGlvbiByZXF1ZXN0RXZlbnRUaW1lKCkge1xuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gV2UncmUgaW5zaWRlIFJlYWN0LCBzbyBpdCdzIGZpbmUgdG8gcmVhZCB0aGUgYWN0dWFsIHRpbWUuXG4gICAgcmV0dXJuIG5vdygpO1xuICB9IC8vIFdlJ3JlIG5vdCBpbnNpZGUgUmVhY3QsIHNvIHdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgYnJvd3NlciBldmVudC5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRUaW1lICE9PSBOb1RpbWVzdGFtcCkge1xuICAgIC8vIFVzZSB0aGUgc2FtZSBzdGFydCB0aW1lIGZvciBhbGwgdXBkYXRlcyB1bnRpbCB3ZSBlbnRlciBSZWFjdCBhZ2Fpbi5cbiAgICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbiAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgc2luY2UgUmVhY3QgeWllbGRlZC4gQ29tcHV0ZSBhIG5ldyBzdGFydCB0aW1lLlxuXG5cbiAgY3VycmVudEV2ZW50VGltZSA9IG5vdygpO1xuICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBUaGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgYW4gdXBkYXRlIHRvIGEgbGFuZSBzaG91bGQgYmUgc3RhYmxlIGZvciBhbGxcbiAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZSBpbnB1dHNcbiAgLy8gdG8gdGhlIGFsZ29yaXRobSBtdXN0IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgd2UgdXNlIHRoZSBgcmVuZGVyTGFuZXNgXG4gIC8vIHRvIGF2b2lkIGNob29zaW5nIGEgbGFuZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBcImluY2x1ZGVkXCIgbGFuZXMgY291bGQgYmUgbXV0YXRlZCBpbiBiZXR3ZWVuIHVwZGF0ZXMgaW4gdGhlXG4gIC8vIHNhbWUgZXZlbnQsIGxpa2UgaWYgeW91IHBlcmZvcm0gYW4gdXBkYXRlIGluc2lkZSBgZmx1c2hTeW5jYC4gT3IgYW55IG90aGVyXG4gIC8vIGNvZGUgcGF0aCB0aGF0IG1pZ2h0IGNhbGwgYHByZXBhcmVGcmVzaFN0YWNrYC5cbiAgLy9cbiAgLy8gVGhlIHRyaWNrIHdlIHVzZSBpcyB0byBjYWNoZSB0aGUgZmlyc3Qgb2YgZWFjaCBvZiB0aGVzZSBpbnB1dHMgd2l0aGluIGFuXG4gIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzIG92ZXIuXG4gIC8vIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cbiAgLy9cbiAgLy8gV2UnbGwgZG8gdGhlIHNhbWUgZm9yIGBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXNgIGJlbG93LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgdmFyIGlzVHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpICE9PSBOb1RyYW5zaXRpb247XG5cbiAgaWYgKGlzVHJhbnNpdGlvbikge1xuICAgIGlmIChjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ICE9PSBudWxsID8gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QucGVuZGluZ0xhbmVzIDogTm9MYW5lcztcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZFRyYW5zaXRpb25MYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzLCBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMpO1xuICB9IC8vIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gdGhlIFNjaGVkdWxlciBwcmlvcml0eS5cbiAgLy8gVG8gZG8gdGhhdCwgd2UncmUgcmVwbGFjaW5nIGl0IHdpdGggYW4gdXBkYXRlIGxhbmUgcHJpb3JpdHkuXG5cblxuICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpOyAvLyBUaGUgb2xkIGJlaGF2aW9yIHdhcyB1c2luZyB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIFNjaGVkdWxlci5cbiAgLy8gVGhpcyBjb3VwbGVzIFJlYWN0IHRvIHRoZSBTY2hlZHVsZXIgaW50ZXJuYWxzLCBzbyB3ZSdyZSByZXBsYWNpbmcgaXRcbiAgLy8gd2l0aCB0aGUgY3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eSBhYm92ZS4gQXMgYW4gZXhhbXBsZSBvZiBob3cgdGhpc1xuICAvLyBjb3VsZCBiZSBwcm9ibGVtYXRpYywgaWYgd2UncmUgbm90IGluc2lkZSBgU2NoZWR1bGVyLnJ1bldpdGhQcmlvcml0eWAsXG4gIC8vIHRoZW4gd2UnbGwgZ2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBydW5uaW5nIFNjaGVkdWxlciB0YXNrLFxuICAvLyB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG4gIHZhciBsYW5lO1xuXG4gIGlmICggLy8gVE9ETzogVGVtcG9yYXJ5LiBXZSdyZSByZW1vdmluZyB0aGUgY29uY2VwdCBvZiBkaXNjcmV0ZSB1cGRhdGVzLlxuICAoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIHNjaGVkdWxlclByaW9yaXR5ID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyKSB7XG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyTGFuZVByaW9yaXR5ID0gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eSk7XG5cbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoc2NoZWR1bGVyTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFJldHJ5TGFuZShmaWJlcikge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgcmVxdWVzdFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIg4oCUIGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBTZWUgYHJlcXVlc3RVcGRhdGVMYW5lYCBmb3IgZXhwbGFuYXRpb24gb2YgYGN1cnJlbnRFdmVudFdpcExhbmVzYFxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZXRyeUxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSkge1xuICBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKTtcbiAgd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTWFyayB0aGF0IHRoZSByb290IGhhcyBhIHBlbmRpbmcgdXBkYXRlLlxuXG5cbiAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIGxhbmUsIGV2ZW50VGltZSk7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LiBVbmxlc3MgdGhlXG4gICAgLy8gYGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaGAgZmxhZyBpcyBvZmYgYW5kIHRoaXMgaXMgYSByZW5kZXJcbiAgICAvLyBwaGFzZSB1cGRhdGUuIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgdHJlYXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXMgaWZcbiAgICAvLyB0aGV5IHdlcmUgaW50ZXJsZWF2ZWQsIGZvciBiYWNrd2FyZHMgY29tcGF0IHJlYXNvbnMuXG4gICAge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMsIGxhbmUpO1xuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgICAvLyBUaGUgcm9vdCBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHdoaWNoIG1lYW5zIHRoaXMgcmVuZGVyXG4gICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgIC8vIHN1c3BlbmRlZCBub3csIHJpZ2h0IGJlZm9yZSBtYXJraW5nIHRoZSBpbmNvbWluZyB1cGRhdGUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCByZW5kZXIgYW5kIHN3aXRjaGluZyB0byB0aGUgdXBkYXRlLlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVycmlkZSBwaW5ncyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSd2ZVxuICAgICAgLy8gYWxyZWFkeSBzdGFydGVkIHJlbmRlcmluZy5cbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiByZXF1ZXN0VXBkYXRlTGFuZVByaW9yaXR5IGFsc28gcmVhZHMgdGhlIHByaW9yaXR5LiBQYXNzIHRoZVxuICAvLyBwcmlvcml0eSBhcyBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzIG9uZS5cblxuXG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICBpZiAobGFuZSA9PT0gU3luY0xhbmUpIHtcbiAgICBpZiAoIC8vIENoZWNrIGlmIHdlJ3JlIGluc2lkZSB1bmJhdGNoZWRVcGRhdGVzXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHJlbmRlcmluZ1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gUmVnaXN0ZXIgcGVuZGluZyBpbnRlcmFjdGlvbnMgb24gdGhlIHJvb3QgdG8gYXZvaWQgbG9zaW5nIHRyYWNlZCBpbnRlcmFjdGlvbiBkYXRhLlxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpOyAvLyBUaGlzIGlzIGEgbGVnYWN5IGVkZ2UgY2FzZS4gVGhlIGluaXRpYWwgbW91bnQgb2YgYSBSZWFjdERPTS5yZW5kZXItZWRcbiAgICAgIC8vIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzIHNob3VsZCBiZSBzeW5jaHJvbm91cywgYnV0IGxheW91dCB1cGRhdGVzXG4gICAgICAvLyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYmF0Y2guXG5cbiAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIHN5bmNocm9ub3VzIHdvcmsgbm93LCB1bmxlc3Mgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9yIGluc2lkZVxuICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgIC8vIHdpdGhvdXQgaW1tZWRpYXRlbHkgZmx1c2hpbmcgaXQuIFdlIG9ubHkgZG8gdGhpcyBmb3IgdXNlci1pbml0aWF0ZWRcbiAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNjaGVkdWxlIGEgZGlzY3JldGUgdXBkYXRlIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IFN5bmMuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgKCAvLyBPbmx5IHVwZGF0ZXMgYXQgdXNlci1ibG9ja2luZyBwcmlvcml0eSBvciBncmVhdGVyIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gZGlzY3JldGUsIGV2ZW4gaW5zaWRlIGEgZGlzY3JldGUgZXZlbnQuXG4gICAgcHJpb3JpdHlMZXZlbCA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSQxKSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgZXZlbnQuIFRyYWNrIHRoZSBsb3dlc3QgcHJpb3JpdHlcbiAgICAgIC8vIGRpc2NyZXRlIHVwZGF0ZSBwZXIgcm9vdCBzbyB3ZSBjYW4gZmx1c2ggdGhlbSBlYXJseSwgaWYgbmVlZGVkLlxuICAgICAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG5ldyBTZXQoW3Jvb3RdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuYWRkKHJvb3QpO1xuICAgICAgfVxuICAgIH0gLy8gU2NoZWR1bGUgb3RoZXIgdXBkYXRlcyBhZnRlciBpbiBjYXNlIHRoZSBjYWxsYmFjayBpcyBzeW5jLlxuXG5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG4gIH0gLy8gV2UgdXNlIHRoaXMgd2hlbiBhc3NpZ25pbmcgYSBsYW5lIGZvciBhIHRyYW5zaXRpb24gaW5zaWRlXG4gIC8vIGByZXF1ZXN0VXBkYXRlTGFuZWAuIFdlIGFzc3VtZSBpdCdzIHRoZSBzYW1lIGFzIHRoZSByb290IGJlaW5nIHVwZGF0ZWQsXG4gIC8vIHNpbmNlIGluIHRoZSBjb21tb24gY2FzZSBvZiBhIHNpbmdsZSByb290IGFwcCBpdCBwcm9iYWJseSBpcy4gSWYgaXQncyBub3RcbiAgLy8gdGhlIHNhbWUgcm9vdCwgdGhlbiBpdCdzIG5vdCBhIGh1Z2UgZGVhbCwgd2UganVzdCBtaWdodCBiYXRjaCBtb3JlIHN0dWZmXG4gIC8vIHRvZ2V0aGVyIG1vcmUgdGhhbiBuZWNlc3NhcnkuXG5cblxuICBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IHJvb3Q7XG59IC8vIFRoaXMgaXMgc3BsaXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXJrIGEgZmliZXIgd2l0aCBwZW5kaW5nXG4vLyB3b3JrIHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSB0eXBpY2FsIHVwZGF0ZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBhbiBldmVudDtcbi8vIGUuZy4gcmV0cnlpbmcgYSBTdXNwZW5zZSBib3VuZGFyeSBpc24ndCBhbiB1cGRhdGUsIGJ1dCBpdCBkb2VzIHNjaGVkdWxlIHdvcmtcbi8vIG9uIGEgZmliZXIuXG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBsYW5lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBsYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIGxhbmUpO1xuICB9XG5cbiAge1xuICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgJiYgKHNvdXJjZUZpYmVyLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICB9XG4gIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoKHBhcmVudC5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHZhciByb290ID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSB0YXNrIGZvciBhIHJvb3QuIFRoZXJlJ3Mgb25seSBvbmUgdGFzayBwZXJcbi8vIHJvb3Q7IGlmIGEgdGFzayB3YXMgYWxyZWFkeSBzY2hlZHVsZWQsIHdlJ2xsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJpb3JpdHlcbi8vIG9mIHRoZSBleGlzdGluZyB0YXNrIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmlvcml0eSBvZiB0aGUgbmV4dCBsZXZlbCB0aGF0IHRoZVxuLy8gcm9vdCBoYXMgd29yayBvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgdXBkYXRlLCBhbmQgcmlnaHQgYmVmb3JlXG4vLyBleGl0aW5nIGEgdGFzay5cblxuXG5mdW5jdGlvbiBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7IC8vIENoZWNrIGlmIGFueSBsYW5lcyBhcmUgYmVpbmcgc3RhcnZlZCBieSBvdGhlciB3b3JrLiBJZiBzbywgbWFyayB0aGVtIGFzXG4gIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG5cbiAgbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSk7IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCBhbmQgdGhlaXIgcHJpb3JpdHkuXG5cbiAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpOyAvLyBUaGlzIHJldHVybnMgdGhlIHByaW9yaXR5IGxldmVsIGNvbXB1dGVkIGR1cmluZyB0aGUgYGdldE5leHRMYW5lc2AgY2FsbC5cblxuICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCk7XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyB0YXNrLiBXZSBtYXkgYmUgYWJsZSB0byByZXVzZSBpdC5cblxuXG4gIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID09PSBuZXdDYWxsYmFja1ByaW9yaXR5KSB7XG4gICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoZSBwcmlvcml0eSBjaGFuZ2VkLiBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ld1xuICAgIC8vIG9uZSBiZWxvdy5cblxuXG4gICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICB9IC8vIFNjaGVkdWxlIGEgbmV3IGNhbGxiYWNrLlxuXG5cbiAgdmFyIG5ld0NhbGxiYWNrTm9kZTtcblxuICBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogU3luYyBSZWFjdCBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBvbiBhIHNwZWNpYWxcbiAgICAvLyBpbnRlcm5hbCBxdWV1ZVxuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlU3luY0NhbGxiYWNrKHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSkge1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgcGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShuZXdDYWxsYmFja1ByaW9yaXR5KTtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IG5ld0NhbGxiYWNrUHJpb3JpdHk7XG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbmV3Q2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QpIHtcbiAgLy8gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBhIFJlYWN0IGV2ZW50LCB3ZSBjYW4gY2xlYXIgdGhlIGN1cnJlbnRcbiAgLy8gZXZlbnQgdGltZS4gVGhlIG5leHQgdXBkYXRlIHdpbGwgY29tcHV0ZSBhIG5ldyBldmVudCB0aW1lLlxuICBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG4gIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH0gLy8gRmx1c2ggYW55IHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIGJlZm9yZSBkZWNpZGluZyB3aGljaCBsYW5lcyB0byB3b3JrIG9uLFxuICAvLyBpbiBjYXNlIHRoZXkgc2NoZWR1bGUgYWRkaXRpb25hbCB3b3JrLlxuXG5cbiAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG4gIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gIGlmIChkaWRGbHVzaFBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoZSBwYXNzaXZlIGVmZmVjdCBwaGFzZSBtYXkgaGF2ZSBjYW5jZWxlZCB0aGUgY3VycmVudCB0YXNrLlxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXNrIG5vZGUgZm9yIHRoaXMgcm9vdCB3YXMgY2hhbmdlZC5cbiAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0YXNrIHdhcyBjYW5jZWxlZC4gRXhpdC4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsXG4gICAgICAvLyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBiZWNhdXNlIHRoZSBjaGVjayBhYm92ZSBpbXBsaWVzIGVpdGhlciB0aGF0XG4gICAgICAvLyB0aGVyZSdzIGEgbmV3IHRhc2ssIG9yIHRoYXQgdGhlcmUncyBubyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGV4cGlyYXRpb24gdGltZSB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cblxuXG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpO1xuXG4gIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcuIFRoaXMgaXMgbmV2ZXIgZXhwZWN0ZWQgdG8gaGFwcGVuLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcyk7XG5cbiAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAvL1xuICAgIC8vIFNvIHdlJ2xsIHRocm93IG91dCB0aGUgY3VycmVudCB3b3JrIGFuZCByZXN0YXJ0LlxuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBUaGUgbmV4dCBzdGVwIGlzIGVpdGhlciB0byBjb21taXQgaXQsXG4gICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cblxuXG4gICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcyk7XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChyb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAvLyBjdXJyZW50bHkgZXhlY3V0ZWQuIE5lZWQgdG8gcmV0dXJuIGEgY29udGludWF0aW9uLlxuICAgIHJldHVybiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKSB7XG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluY29tcGxldGU6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gRmxvdyBrbm93cyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWlucyBpZiBJIGFkZCBhIGJyZWFrXG4gICAgLy8gc3RhdGVtZW50LCBidXQgZXNsaW50IGRvZXNuJ3Qga25vdyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWluc1xuICAgIC8vIGlmIEkgZG8uIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmV0cnkgdGhpcyB0cmVlLiBJZiB3ZSByZWFjaGVkXG4gICAgICAgIC8vIHRoaXMgcG9pbnQsIGl0IGVycm9yZWQgYWdhaW4uIENvbW1pdCBpdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpOyAvLyBXZSBoYXZlIGFuIGFjY2VwdGFibGUgbG9hZGluZyBzdGF0ZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlXG4gICAgICAgIC8vIHNob3VsZCBpbW1lZGlhdGVseSBjb21taXQgaXQgb3Igd2FpdCBhIGJpdC5cblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykgJiYgLy8gZG8gbm90IGRlbGF5IGlmIHdlJ3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZVxuICAgICAgICAhc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIHJlbmRlciBvbmx5IGluY2x1ZGVkIHJldHJpZXMsIG5vIHVwZGF0ZXMuIFRocm90dGxlIGNvbW1pdHRpbmdcbiAgICAgICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3coKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhzdXNwZW5kZWRMYW5lcywgbGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBwcmVmZXIgdG8gcmVuZGVyIHRoZSBmYWxsYmFjayBvZiBhdCB0aGUgbGFzdFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgaXQgYWdhaW4uXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIElkbGU/IFNob3VsZCBub3QgcmVzdGFydC5cbiAgICAgICAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgICAgICAgbWFya1Jvb3RQaW5nZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gVGhlIHJlbmRlciBpcyBzdXNwZW5kZWQsIGl0IGhhc24ndCB0aW1lZCBvdXQsIGFuZCB0aGVyZSdzIG5vXG4gICAgICAgICAgICAvLyBsb3dlciBwcmlvcml0eSB3b3JrIHRvIGRvLiBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cblxuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBtc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhlIHdvcmsgZXhwaXJlZC4gQ29tbWl0IGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgLy8gdW50aWwgd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB0cmFuc2l0aW9uLCBidXQgd2UgZGlkIHRyaWdnZXIgYW4gYXZvaWRlZCBzdGF0ZS5cbiAgICAgICAgICAvLyBTY2hlZHVsZSBhIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgdXNpbmcgdGhlIEp1c3RcbiAgICAgICAgICAvLyBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgLy8gVE9ETzogSXMgdGhlIEpORCBvcHRpbWl6YXRpb24gd29ydGggdGhlIGFkZGVkIGNvbXBsZXhpdHk/IElmIHRoaXMgaXNcbiAgICAgICAgICAvLyB0aGUgb25seSByZWFzb24gd2UgdHJhY2sgdGhlIGV2ZW50IHRpbWUsIHRoZW4gcHJvYmFibHkgbm90LlxuICAgICAgICAgIC8vIENvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgICAgIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcyk7XG4gICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gbW9zdFJlY2VudEV2ZW50VGltZTtcbiAgICAgICAgICB2YXIgdGltZUVsYXBzZWRNcyA9IG5vdygpIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICB2YXIgX21zVW50aWxUaW1lb3V0ID0gam5kKHRpbWVFbGFwc2VkTXMpIC0gdGltZUVsYXBzZWRNczsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cblxuICAgICAgICAgIGlmIChfbXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFjayBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICAvLyB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIENvbW1pdCB0aGUgcGxhY2Vob2xkZXIuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgY29tcGxldGVkLiBSZWFkeSB0byBjb21taXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgLy8gV2hlbiBzdXNwZW5kaW5nLCB3ZSBzaG91bGQgYWx3YXlzIGV4Y2x1ZGUgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBvciAobW9yZVxuICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAvLyBvYm5veGlvdXNseSBuYW1lZCBmdW5jdGlvbiA6KVxuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyk7XG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyk7XG4gIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHN5bmNocm9ub3VzIHRhc2tzIHRoYXQgZG9uJ3QgZ29cbi8vIHRocm91Z2ggU2NoZWR1bGVyXG5cblxuZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpIHtcbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB2YXIgbGFuZXM7XG4gIHZhciBleGl0U3RhdHVzO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaW5jbHVkZXNTb21lTGFuZShyb290LmV4cGlyZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhlcmUncyBhIHBhcnRpYWwgdHJlZSwgYW5kIGF0IGxlYXN0IG9uZSBvZiBpdHMgbGFuZXMgaGFzIGV4cGlyZWQuIEZpbmlzaFxuICAgIC8vIHJlbmRlcmluZyBpdCBiZWZvcmUgcmVuZGVyaW5nIHRoZSByZXN0IG9mIHRoZSBleHBpcmVkIHdvcmsuXG4gICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHBhcnQgb2YgdGhlIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIGNvbmN1cnJlbnRseS4gSWYgdGhlIHdob2xlIHRyZWUgaXMgcmVuZGVyZWQgc3luY2hyb25vdXNseSwgdGhlbiB0aGVyZVxuICAgICAgLy8gYXJlIG5vIGludGVybGVhdmVkIGV2ZW50cy5cbiAgICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIGxhbmVzKTtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gIH1cblxuICBpZiAocm9vdC50YWcgIT09IExlZ2FjeVJvb3QgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICBjb21taXRSb290KHJvb3QpOyAvLyBCZWZvcmUgZXhpdGluZywgbWFrZSBzdXJlIHRoZXJlJ3MgYSBjYWxsYmFjayBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0XG4gIC8vIHBlbmRpbmcgbGV2ZWwuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlcygpIHtcbiAgLy8gVE9ETzogU2hvdWxkIGJlIGFibGUgdG8gZmx1c2ggaW5zaWRlIGJhdGNoZWRVcGRhdGVzLCBidXQgbm90IGluc2lkZSBgYWN0YC5cbiAgLy8gSG93ZXZlciwgYGFjdGAgdXNlcyBgYmF0Y2hlZFVwZGF0ZXNgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkaXN0aW5ndWlzaFxuICAvLyB0aG9zZSB0d28gY2FzZXMuIE5lZWQgdG8gZml4IHRoaXMgYmVmb3JlIGV4cG9zaW5nIGZsdXNoRGlzY3JldGVVcGRhdGVzXG4gIC8vIGFzIGEgcHVibGljIEFQSS5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKEJhdGNoZWRDb250ZXh0IHwgUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICBlcnJvcigndW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgJyArICdhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nLCBzbyB3ZSBjYW4ndCBzeW5jaHJvbm91c2x5IGZsdXNoIHBlbmRpbmcgd29yay5cbiAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGEgbmVzdGVkIGV2ZW50IGRpc3BhdGNoIHRyaWdnZXJlZCBieSBhIGxpZmVjeWNsZS9lZmZlY3QsXG4gICAgLy8gbGlrZSBgZWwuZm9jdXMoKWAuIEV4aXQuXG5cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpOyAvLyBJZiB0aGUgZGlzY3JldGUgdXBkYXRlcyBzY2hlZHVsZWQgcGFzc2l2ZSBlZmZlY3RzLCBmbHVzaCB0aGVtIG5vdyBzbyB0aGF0XG4gIC8vIHRoZXkgZmlyZSBiZWZvcmUgdGhlIG5leHQgc2VyaWFsIGV2ZW50LlxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCkge1xuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIC8vIEZvciBlYWNoIHJvb3Qgd2l0aCBwZW5kaW5nIGRpc2NyZXRlIHVwZGF0ZXMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG9cbiAgICAvLyBpbW1lZGlhdGVseSBmbHVzaCB0aGVtLlxuICAgIHZhciByb290cyA9IHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXM7XG4gICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIH0pO1xuICB9IC8vIE5vdyBmbHVzaCB0aGUgaW1tZWRpYXRlIHF1ZXVlLlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRXZlbnRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyQxKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRGlzY3JldGVFdmVudENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoVXNlckJsb2NraW5nUHJpb3JpdHkkMiwgZm4uYmluZChudWxsLCBhLCBiLCBjLCBkKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5iYXRjaGVkVXBkYXRlcyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0ICY9IH5CYXRjaGVkQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBMZWdhY3lVbmJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luYyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuXG4gIGlmICgocHJldkV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgZXJyb3IoJ2ZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90ICcgKyAnZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byAnICsgJ2Egc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oYSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmbi5iaW5kKG51bGwsIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgICAvLyB0aGUgc3RhY2suXG5cbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hSZW5kZXJMYW5lcyhmaWJlciwgbGFuZXMpIHtcbiAgcHVzaChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIHN1YnRyZWVSZW5kZXJMYW5lcywgZmliZXIpO1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHN1YnRyZWVSZW5kZXJMYW5lcywgbGFuZXMpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiBwb3BSZW5kZXJMYW5lcyhmaWJlcikge1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgcG9wKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuXG4gIGlmICh0aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXQpIHtcbiAgICAvLyBUaGUgcm9vdCBwcmV2aW91cyBzdXNwZW5kZWQgYW5kIHNjaGVkdWxlZCBhIHRpbWVvdXQgdG8gY29tbWl0IGEgZmFsbGJhY2tcbiAgICAvLyBzdGF0ZS4gTm93IHRoYXQgd2UgaGF2ZSBhZGRpdGlvbmFsIHdvcmssIGNhbmNlbCB0aGUgdGltZW91dC5cbiAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7IC8vICRGbG93Rml4TWUgQ29tcGxhaW5zIG5vVGltZW91dCBpcyBub3QgYSBUaW1lb3V0SUQsIGRlc3BpdGUgdGhlIGNoZWNrIGFib3ZlXG5cbiAgICBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBJIGZvdW5kIGFuZCBhZGRlZCB0aGlzIG1pc3NpbmcgbGluZSB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFcbiAgICAgIC8vIHNlcGFyYXRlIGlzc3VlLiBXcml0ZSBhIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyBzdHJpbmcgcmVmcy5cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGVycm9yZWRXb3JrID09PSBudWxsIHx8IGVycm9yZWRXb3JrLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIGl0OyB0aGUgcm9vdCBpc1xuICAgICAgICAvLyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0IGNhdWdodCBieSBhbiBlcnJvclxuICAgICAgICAvLyBib3VuZGFyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAgIC8vIGhhcyBubyBzaWJsaW5ncyBub3IgYSBwYXJlbnQsIHdlIHNldCBpdCB0byBudWxsLiBVc3VhbGx5IHRoaXMgaXNcbiAgICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxsaW5nIGB1bndpbmRXb3JrYCB0byBwb3AgdGhlIGNvbnRleHRzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgaW5hY2N1cmF0ZSBQcm9maWxlciBkdXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAvLyBzdXNwZW5kZWQgcmVuZGVyLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dFeGNlcHRpb24ocm9vdCwgZXJyb3JlZFdvcmsucmV0dXJuLCBlcnJvcmVkV29yaywgdGhyb3duVmFsdWUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhlcnJvcmVkV29yayk7XG4gICAgfSBjYXRjaCAoeWV0QW5vdGhlclRocm93blZhbHVlKSB7XG4gICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHJldHVybiBwYXRoIGFsc28gdGhyZXcuXG4gICAgICB0aHJvd25WYWx1ZSA9IHlldEFub3RoZXJUaHJvd25WYWx1ZTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBlcnJvcmVkV29yayAmJiBlcnJvcmVkV29yayAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGhhcyBhbHJlYWR5IGVycm9yZWQsIHRoZW4gd2UgaGFkIHRyb3VibGUgcHJvY2Vzc2luZ1xuICAgICAgICAvLyB0aGUgZXJyb3IuIEJ1YmJsZSBpdCB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgICAgICAgZXJyb3JlZFdvcmsgPSBlcnJvcmVkV29yay5yZXR1cm47XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZXJyb3JlZFdvcms7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFJldHVybiB0byB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cblxuXG4gICAgcmV0dXJuO1xuICB9IHdoaWxlICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAocHJldkRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAvLyBUaGUgUmVhY3QgaXNvbW9ycGhpYyBwYWNrYWdlIGRvZXMgbm90IGluY2x1ZGUgYSBkZWZhdWx0IGRpc3BhdGNoZXIuXG4gICAgLy8gSW5zdGVhZCB0aGUgZmlyc3QgcmVuZGVyZXIgd2lsbCBsYXppbHkgYXR0YWNoIG9uZSwgaW4gb3JkZXIgdG8gZ2l2ZVxuICAgIC8vIG5pY2VyIGVycm9yIG1lc3NhZ2VzLlxuICAgIHJldHVybiBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZXZEaXNwYXRjaGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpIHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaEludGVyYWN0aW9ucyhyb290KSB7XG4gIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zO1xuICAgIHJldHVybiBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKSB7XG4gIHtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpIHtcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpO1xufVxuZnVuY3Rpb24gbWFya1NraXBwZWRVcGRhdGVMYW5lcyhsYW5lKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IG1lcmdlTGFuZXMobGFuZSwgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICB9IC8vIENoZWNrIGlmIHRoZXJlIGFyZSB1cGRhdGVzIHRoYXQgd2Ugc2tpcHBlZCB0cmVlIHRoYXQgbWlnaHQgaGF2ZSB1bmJsb2NrZWRcbiAgLy8gdGhpcyByZW5kZXIuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSBudWxsICYmIChpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgfHwgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIG1hcmtSb290U3VzcGVuZGVkJDEod29ya0luUHJvZ3Jlc3NSb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdENvbXBsZXRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgfVxufSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbi8vIFJldHVybnMgZmFsc2UgaWYgd2UncmUgbm90IHN1cmUuXG5cbmZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgLy8gc28gdGhvc2UgYXJlIGZhbHNlLlxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gd2Ugc2hvdWxkIGhhdmUgZmluaXNoZWQgdGhlIHdob2xlIHRyZWUuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIFJvb3RJbmNvbXBsZXRlO1xuICB9IGVsc2Uge1xuXG5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gUmV0dXJuIHRoZSBmaW5hbCBleGl0IHN0YXR1cy5cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICB9XG59XG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICAvLyBQZXJmb3JtIHdvcmsgdW50aWwgU2NoZWR1bGVyIGFza3MgdXMgdG8geWllbGRcbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsICYmICFzaG91bGRZaWVsZCgpKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgdmFyIG5leHQ7XG5cbiAgaWYgKCAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gIH1cblxuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gIC8vIHNpYmxpbmcuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmdzLCByZXR1cm4gdG8gdGhlIHBhcmVudCBmaWJlci5cbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gIGRvIHtcbiAgICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBjb21wbGV0ZWRXb3JrLnJldHVybjsgLy8gQ2hlY2sgaWYgdGhlIHdvcmsgY29tcGxldGVkIG9yIGlmIHNvbWV0aGluZyB0aHJldy5cblxuICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgICB2YXIgbmV4dCA9IHZvaWQgMDtcblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yayk7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCAmJiAvLyBEbyBub3QgYXBwZW5kIGVmZmVjdHMgdG8gcGFyZW50cyBpZiBhIHNpYmxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlXG4gICAgICAocmV0dXJuRmliZXIuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3Q7XG4gICAgICAgIH0gLy8gSWYgdGhpcyBmaWJlciBoYWQgc2lkZS1lZmZlY3RzLCB3ZSBhcHBlbmQgaXQgQUZURVIgdGhlIGNoaWxkcmVuJ3NcbiAgICAgICAgLy8gc2lkZS1lZmZlY3RzLiBXZSBjYW4gcGVyZm9ybSBjZXJ0YWluIHNpZGUtZWZmZWN0cyBlYXJsaWVyIGlmIG5lZWRlZCxcbiAgICAgICAgLy8gYnkgZG9pbmcgbXVsdGlwbGUgcGFzc2VzIG92ZXIgdGhlIGVmZmVjdCBsaXN0LiBXZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIHNjaGVkdWxlIG91ciBvd24gc2lkZS1lZmZlY3Qgb24gb3VyIG93biBsaXN0IGJlY2F1c2UgaWYgZW5kIHVwXG4gICAgICAgIC8vIHJldXNpbmcgY2hpbGRyZW4gd2UnbGwgc2NoZWR1bGUgdGhpcyBlZmZlY3Qgb250byBpdHNlbGYgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gYXQgdGhlIGVuZC5cblxuXG4gICAgICAgIHZhciBmbGFncyA9IGNvbXBsZXRlZFdvcmsuZmxhZ3M7IC8vIFNraXAgYm90aCBOb1dvcmsgYW5kIFBlcmZvcm1lZFdvcmsgdGFncyB3aGVuIGNyZWF0aW5nIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdC4gUGVyZm9ybWVkV29yayBlZmZlY3QgaXMgcmVhZCBieSBSZWFjdCBEZXZUb29scyBidXQgc2hvdWxkbid0IGJlXG4gICAgICAgIC8vIGNvbW1pdHRlZC5cblxuICAgICAgICBpZiAoZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgICAvLyB0aGUgc3RhY2sgd2l0aG91dCBlbnRlcmluZyB0aGUgY29tcGxldGUgcGhhc2UuIElmIHRoaXMgaXMgYSBib3VuZGFyeSxcbiAgICAgIC8vIGNhcHR1cmUgdmFsdWVzIGlmIHBvc3NpYmxlLlxuICAgICAgdmFyIF9uZXh0ID0gdW53aW5kV29yayhjb21wbGV0ZWRXb3JrKTsgLy8gQmVjYXVzZSB0aGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUsIGRvbid0IHJlc2V0IGl0cyBleHBpcmF0aW9uIHRpbWUuXG5cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIF9uZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IF9uZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIHBhcmVudCBmaWJlciBhcyBpbmNvbXBsZXRlIGFuZCBjbGVhciBpdHMgZWZmZWN0IGxpc3QuXG4gICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbyBpbiB0aGlzIHJldHVybkZpYmVyLCBkbyB0aGF0IG5leHQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmdGaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcblxuXG4gICAgY29tcGxldGVkV29yayA9IHJldHVybkZpYmVyOyAvLyBVcGRhdGUgdGhlIG5leHQgdGhpbmcgd2UncmUgd29ya2luZyBvbiBpbiBjYXNlIHNvbWV0aGluZyB0aHJvd3MuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcms7XG4gIH0gd2hpbGUgKGNvbXBsZXRlZFdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspIHtcbiAgaWYgKCAvLyBUT0RPOiBNb3ZlIHRoaXMgY2hlY2sgb3V0IG9mIHRoZSBob3QgcGF0aCBieSBtb3ZpbmcgYHJlc2V0Q2hpbGRMYW5lc2BcbiAgLy8gdG8gc3dpdGNoIHN0YXRlbWVudCBpbiBgY29tcGxldGVXb3JrYC5cbiAgKGNvbXBsZXRlZFdvcmsudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQgfHwgY29tcGxldGVkV29yay50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCkgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmICFpbmNsdWRlc1NvbWVMYW5lKHN1YnRyZWVSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgKGNvbXBsZXRlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9MYW5lcykge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGlzIGNvbXBvbmVudCBhcmUgaGlkZGVuLiBEb24ndCBidWJibGUgdGhlaXJcbiAgICAvLyBleHBpcmF0aW9uIHRpbWVzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZExhbmVzID0gTm9MYW5lczsgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG5cbiAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgLy8gb25seSBiZSB1cGRhdGVkIGlmIHdvcmsgaXMgZG9uZSBvbiB0aGUgZmliZXIgKGkuZS4gaXQgZG9lc24ndCBiYWlsb3V0KS5cbiAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgIC8vIHRoaXMgdmFsdWUgd2lsbCByZWZsZWN0IHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3b3JraW5nIG9uIGEgcHJldmlvdXNcbiAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cblxuICAgIHZhciBzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSA9PT0gbnVsbCB8fCBjb21wbGV0ZWRXb3JrLmNoaWxkICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZDtcbiAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKSk7XG5cbiAgICAgIGlmIChzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMpIHtcbiAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gY29tcGxldGVkV29yay50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkLmxhbmVzLCBfY2hpbGQuY2hpbGRMYW5lcykpO1xuICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdChyb290KSB7XG4gIHZhciByZW5kZXJQcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcbiAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgY29tbWl0Um9vdEltcGwuYmluZChudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290SW1wbChyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIGRvIHtcbiAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzaXZlIGVmZmVjdHMuIFNvIHdlIG5lZWQgdG8ga2VlcCBmbHVzaGluZyBpbiBhIGxvb3AgdW50aWwgdGhlcmUgYXJlXG4gICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAvLyBmbHVzaCBzeW5jaHJvbm91cyB3b3JrIGF0IHRoZSBlbmQsIHRvIGF2b2lkIGZhY3RvcmluZyBoYXphcmRzIGxpa2UgdGhpcy5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKTtcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHZhciBsYW5lcyA9IHJvb3QuZmluaXNoZWRMYW5lcztcblxuICBpZiAoZmluaXNoZWRXb3JrID09PSBudWxsKSB7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcblxuICBpZiAoIShmaW5pc2hlZFdvcmsgIT09IHJvb3QuY3VycmVudCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9IC8vIGNvbW1pdFJvb3QgbmV2ZXIgcmV0dXJucyBhIGNvbnRpbnVhdGlvbjsgaXQgYWx3YXlzIGZpbmlzaGVzIHN5bmNocm9ub3VzbHkuXG4gIC8vIFNvIHdlIGNhbiBjbGVhciB0aGVzZSBub3cgdG8gYWxsb3cgYSBuZXcgY2FsbGJhY2sgdG8gYmUgc2NoZWR1bGVkLlxuXG5cbiAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsOyAvLyBVcGRhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IHBlbmRpbmcgdGltZXMgb24gdGhpcyByb290LiBUaGUgbmV3IGZpcnN0XG4gIC8vIHBlbmRpbmcgdGltZSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG9uIHRoZSByb290IGZpYmVyLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpOyAvLyBDbGVhciBhbHJlYWR5IGZpbmlzaGVkIGRpc2NyZXRlIHVwZGF0ZXMgaW4gY2FzZSB0aGF0IGEgbGF0ZXIgY2FsbCBvZlxuICAvLyBgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNgIHN0YXJ0cyBhIHVzZWxlc3MgcmVuZGVyIHBhc3Mgd2hpY2ggbWF5IGNhbmNlbHNcbiAgLy8gYSBzY2hlZHVsZWQgdGltZW91dC5cblxuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIGlmICghaGFzRGlzY3JldGVMYW5lcyhyZW1haW5pbmdMYW5lcykgJiYgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5oYXMocm9vdCkpIHtcbiAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuZGVsZXRlKHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIEdldCB0aGUgbGlzdCBvZiBlZmZlY3RzLlxuXG5cbiAgdmFyIGZpcnN0RWZmZWN0O1xuXG4gIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgLy8gQSBmaWJlcidzIGVmZmVjdCBsaXN0IGNvbnNpc3RzIG9ubHkgb2YgaXRzIGNoaWxkcmVuLCBub3QgaXRzZWxmLiBTbyBpZlxuICAgIC8vIHRoZSByb290IGhhcyBhbiBlZmZlY3QsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIFRoZVxuICAgIC8vIHJlc3VsdGluZyBsaXN0IGlzIHRoZSBzZXQgdGhhdCB3b3VsZCBiZWxvbmcgdG8gdGhlIHJvb3QncyBwYXJlbnQsIGlmIGl0XG4gICAgLy8gaGFkIG9uZTsgdGhhdCBpcywgYWxsIHRoZSBlZmZlY3RzIGluIHRoZSB0cmVlIGluY2x1ZGluZyB0aGUgcm9vdC5cbiAgICBpZiAoZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaGVkV29yay5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIG5vIGVmZmVjdCBvbiB0aGUgcm9vdC5cbiAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgfVxuXG4gIGlmIChmaXJzdEVmZmVjdCAhPT0gbnVsbCkge1xuXG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IHByZXBhcmVGb3JDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIGVycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfSAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbXV0YXRpb24gcGhhc2UsIHdoZXJlIHdlIG11dGF0ZSB0aGUgaG9zdCB0cmVlLlxuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRNdXRhdGlvbkVmZmVjdHMsIG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgcmVzZXRBZnRlckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcbiAgICAvLyB0aGUgaG9zdCB0cmVlIGFmdGVyIGl0J3MgYmVlbiBtdXRhdGVkLiBUaGUgaWRpb21hdGljIHVzZSBjYXNlIGZvciB0aGlzIGlzXG4gICAgLy8gbGF5b3V0LCBidXQgY2xhc3MgY29tcG9uZW50IGxpZmVjeWNsZXMgYWxzbyBmaXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zLlxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TGF5b3V0RWZmZWN0cywgbnVsbCwgcm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvcjIgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IyKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVGVsbCBTY2hlZHVsZXIgdG8geWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUsIHNvIHRoZSBicm93c2VyIGhhcyBhblxuICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG4gICAgcmVxdWVzdFBhaW50KCk7XG5cbiAgICB7XG4gICAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgfVxuXG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGVmZmVjdHMuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gcmVwb3J0IHRoaXMuXG5cbiAgICB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICBpZiAocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSByZW5kZXJQcmlvcml0eUxldmVsO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBkb25lIHdpdGggdGhlIGVmZmVjdCBjaGFpbiBhdCB0aGlzIHBvaW50IHNvIGxldCdzIGNsZWFyIHRoZVxuICAgIC8vIG5leHRFZmZlY3QgcG9pbnRlcnMgdG8gYXNzaXN0IHdpdGggR0MuIElmIHdlIGhhdmUgcGFzc2l2ZSBlZmZlY3RzLCB3ZSdsbFxuICAgIC8vIGNsZWFyIHRoaXMgaW4gZmx1c2hQYXNzaXZlRWZmZWN0cy5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5leHROZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgbmV4dEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgICAgaWYgKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhuZXh0RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgbmV4dEVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuXG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAge1xuICAgICAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSBzcGF3bmVkV29ya0R1cmluZ1JlbmRlcjtcbiAgICAgICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwaXJhdGlvblRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWVzW2ldLCByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLCB3ZSBjYW4gY2xlYXIgdGhlIHNldCBvZiBhbHJlYWR5IGZhaWxlZFxuICAgIC8vIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICghcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cywgdGhlbiB3ZSBjYW4gY29tcGxldGUgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdsbCB3YWl0IHVudGlsIGFmdGVyIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIGZsdXNoZWQuXG4gICAgICAvLyBXYWl0IHRvIGRvIHRoaXMgdW50aWwgYWZ0ZXIgcmVtYWluaW5nIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkLFxuICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBwcmVtYXR1cmVseSBzaWduYWwgY29tcGxldGUgZm9yIGludGVyYWN0aW9ucyB3aGVuIHRoZXJlJ3MgZS5nLiBoaWRkZW4gd29yay5cbiAgICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gU3luY0xhbmUpIHtcbiAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb290IHN5bmNocm9ub3VzbHkgcmUtcmVuZGVycyB3aXRob3V0XG4gICAgLy8gZmluaXNoaW5nLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnksIGl0IGluZGljYXRlcyBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcC5cbiAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gIH1cblxuICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAge1xuICAgIG9uQ29tbWl0Um9vdCQxKCk7XG4gIH0gLy8gQWx3YXlzIGNhbGwgdGhpcyBiZWZvcmUgZXhpdGluZyBgY29tbWl0Um9vdGAsIHRvIGVuc3VyZSB0aGF0IGFueVxuICAvLyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290IGlzIHNjaGVkdWxlZC5cblxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjMgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBfZXJyb3IzO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIGEgUmVhY3RET00ucmVuZGVyLWVkIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzLiBUaGUgY29tbWl0IGZpcmVkXG4gICAgLy8gc3luY2hyb25vdXNseSwgYnV0IGxheW91dCB1cGRhdGVzIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGJhdGNoLlxuXG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBJZiBsYXlvdXQgd29yayB3YXMgc2NoZWR1bGVkLCBmbHVzaCBpdCBub3cuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgJiYgZm9jdXNlZEluc3RhbmNlSGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAoKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgaWYgKGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvdXQgb2YgdGhlIGhvdCBwYXRoIHVzaW5nIGEgZGVkaWNhdGVkIGVmZmVjdCB0YWcuXG4gICAgICAgIGlmIChuZXh0RWZmZWN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgbmV4dEVmZmVjdCkgJiYgZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBmbHVzaCBhdFxuICAgICAgLy8gdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5LlxuICAgICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBUT0RPOiBTaG91bGQgcHJvYmFibHkgbW92ZSB0aGUgYnVsayBvZiB0aGlzIGZ1bmN0aW9uIHRvIGNvbW1pdFdvcmsuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAgIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb21taXREZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzdGF0ZW1lbnQgaXMgb25seSBjb25jZXJuZWQgYWJvdXQgcGxhY2VtZW50LFxuICAgIC8vIHVwZGF0ZXMsIGFuZCBkZWxldGlvbnMuIFRvIGF2b2lkIG5lZWRpbmcgdG8gYWRkIGEgY2FzZSBmb3IgZXZlcnkgcG9zc2libGVcbiAgICAvLyBiaXRtYXAgdmFsdWUsIHdlIHJlbW92ZSB0aGUgc2Vjb25kYXJ5IGVmZmVjdHMgZnJvbSB0aGUgZWZmZWN0IHRhZyBhbmRcbiAgICAvLyBzd2l0Y2ggb24gdGhhdCB2YWx1ZS5cblxuXG4gICAgdmFyIHByaW1hcnlGbGFncyA9IGZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSB8IERlbGV0aW9uIHwgSHlkcmF0aW5nKTtcblxuICAgIHN3aXRjaCAocHJpbWFyeUZsYWdzKSB7XG4gICAgICBjYXNlIFBsYWNlbWVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAgIC8vIFRPRE86IGZpbmRET01Ob2RlIGRvZXNuJ3QgcmVseSBvbiB0aGlzIGFueSBtb3JlIGJ1dCBpc01vdW50ZWQgZG9lc1xuICAgICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUGxhY2VtZW50QW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGxhY2VtZW50XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmc6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmdBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50MiA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQyLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfY3VycmVudDMgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MywgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBEZWxldGlvbjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdERlbGV0aW9uKHJvb3QsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiAoVXBkYXRlIHwgQ2FsbGJhY2spKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGlmZUN5Y2xlcyhyb290LCBjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgY29tbWl0QXR0YWNoUmVmKG5leHRFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgaWYgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ICE9PSBOb1ByaW9yaXR5JDEpIHtcbiAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eTtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcblxuICAgIHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsLCBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAge1xuICAgIGZpYmVyLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZShlZmZlY3QpIHtcbiAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICB2YXIgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBJdCdzIGltcG9ydGFudCB0aGF0IEFMTCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0IGRlc3Ryb3kgZnVuY3Rpb25zIGFyZSBjYWxsZWRcbiAgLy8gYmVmb3JlIEFOWSBwYXNzaXZlIGVmZmVjdCBjcmVhdGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG4gIC8vIE90aGVyd2lzZSBlZmZlY3RzIGluIHNpYmxpbmcgY29tcG9uZW50cyBtaWdodCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IG1heSB1bmludGVudGlvbmFsbHkgb3ZlcnJpZGUgYSByZWZcbiAgLy8gdmFsdWUgc2V0IGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50LlxuICAvLyBMYXlvdXQgZWZmZWN0cyBoYXZlIHRoZSBzYW1lIGNvbnN0cmFpbnQuXG4gIC8vIEZpcnN0IHBhc3M6IERlc3Ryb3kgc3RhbGUgcGFzc2l2ZSBlZmZlY3RzLlxuXG4gIHZhciB1bm1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudEVmZmVjdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdCA9IHVubW91bnRFZmZlY3RzW2ldO1xuICAgIHZhciBmaWJlciA9IHVubW91bnRFZmZlY3RzW2kgKyAxXTtcbiAgICB2YXIgZGVzdHJveSA9IF9lZmZlY3QuZGVzdHJveTtcbiAgICBfZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICB7XG4gICAgICBmaWJlci5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShmaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTZWNvbmQgcGFzczogQ3JlYXRlIG5ldyBwYXNzaXZlIGVmZmVjdHMuXG5cblxuICB2YXIgbW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW91bnRFZmZlY3RzLmxlbmd0aDsgX2kgKz0gMikge1xuICAgIHZhciBfZWZmZWN0MiA9IG1vdW50RWZmZWN0c1tfaV07XG4gICAgdmFyIF9maWJlciA9IG1vdW50RWZmZWN0c1tfaSArIDFdO1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKF9maWJlcik7XG5cbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUsIG51bGwsIF9lZmZlY3QyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgaWYgKCEoX2ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZXJyb3I0ID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKF9maWJlciwgX2Vycm9yNCk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuICB9IC8vIE5vdGU6IFRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cyBvbiB0aGUgcm9vdCBmaWJlclxuICAvLyBiZWNhdXNlIHRoZSByb290IGlzIG5vdCBwYXJ0IG9mIGl0cyBvd24gZWZmZWN0IGxpc3QuXG4gIC8vIFRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cblxuICB2YXIgZWZmZWN0ID0gcm9vdC5jdXJyZW50LmZpcnN0RWZmZWN0O1xuXG4gIHdoaWxlIChlZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBlZmZlY3QubmV4dEVmZmVjdDsgLy8gUmVtb3ZlIG5leHRFZmZlY3QgcG9pbnRlciB0byBhc3Npc3QgR0NcblxuICAgIGVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgIGlmIChlZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZWZmZWN0KTtcbiAgICB9XG5cbiAgICBlZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgfVxuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTsgLy8gSWYgYWRkaXRpb25hbCBwYXNzaXZlIGVmZmVjdHMgd2VyZSBzY2hlZHVsZWQsIGluY3JlbWVudCBhIGNvdW50ZXIuIElmIHRoaXNcbiAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuXG4gIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsID8gMCA6IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCArIDE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSB7XG4gIHJldHVybiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCAhPT0gbnVsbCAmJiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZChpbnN0YW5jZSkge1xuICBpZiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPT09IG51bGwpIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW2luc3RhbmNlXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IHRydWU7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn1cblxudmFyIG9uVW5jYXVnaHRFcnJvciA9IHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcjtcblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlKTtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChyb290RmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChmaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQuXG4gICAgICAgICAgLy8gV2UgY2FuJ3Qgc2NoZWR1bGUgYW55IGZvbGxvdyB1cCB3b3JrIGZvciB0aGUgcm9vdCBiZWNhdXNlIHRoZSBmaWJlciBpcyBhbHJlYWR5IHVubW91bnRlZCxcbiAgICAgICAgICAvLyBidXQgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIGxvZy1vbmx5IGJvdW5kYXJ5IHNvIHRoZSBlcnJvciBpc24ndCBzd2FsbG93ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUT0RPIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBiYW5kYWlkIGZvciB0aGUgb2xkIHJlY29uY2lsZXIgZm9yay5cbiAgICAgICAgICAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc3BlY2lhbCBjYXNlIG9uY2UgdGhlIG5ldyBmb3JrIGlzIG1lcmdlZC5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvclRvSWdub3JlKSB7Ly8gVE9ETyBJZ25vcmUgdGhpcyBlcnJvcj8gUmV0aHJvdyBpdD9cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIGFuIGVkZ2UgY2FzZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG5cbiAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiYgaXNTdWJzZXRPZkxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBwaW5nZWRMYW5lcykpIHtcbiAgICAvLyBSZWNlaXZlZCBhIHBpbmcgYXQgdGhlIHNhbWUgcHJpb3JpdHkgbGV2ZWwgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5XG4gICAgLy8gcmVuZGVyaW5nLiBXZSBtaWdodCB3YW50IHRvIHJlc3RhcnQgdGhpcyByZW5kZXIuIFRoaXMgc2hvdWxkIG1pcnJvclxuICAgIC8vIHRoZSBsb2dpYyBvZiB3aGV0aGVyIG9yIG5vdCBhIHJvb3Qgc3VzcGVuZHMgb25jZSBpdCBjb21wbGV0ZXMuXG4gICAgLy8gVE9ETzogSWYgd2UncmUgcmVuZGVyaW5nIHN5bmMgZWl0aGVyIGR1ZSB0byBTeW5jLCBCYXRjaGVkIG9yIGV4cGlyZWQsXG4gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IG5ldmVyIHJlc3RhcnQuXG4gICAgLy8gSWYgd2UncmUgc3VzcGVuZGVkIHdpdGggZGVsYXksIG9yIGlmIGl0J3MgYSByZXRyeSwgd2UnbGwgYWx3YXlzIHN1c3BlbmRcbiAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHJlc3RhcnQuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJiBpbmNsdWRlc09ubHlSZXRyaWVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSAmJiBub3coKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUykge1xuICAgICAgLy8gUmVzdGFydCBmcm9tIHRoZSByb290LlxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgIC8vIG9wcG9ydHVuaXR5IGxhdGVyLiBTbyB3ZSBtYXJrIHRoaXMgcmVuZGVyIGFzIGhhdmluZyBhIHBpbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMsIHBpbmdlZExhbmVzKTtcbiAgICB9XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHBpbmdlZExhbmVzKTtcbn1cblxuZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50IG9yIFN1c3BlbnNlTGlzdCBjb21wb25lbnQpXG4gIC8vIHByZXZpb3VzbHkgd2FzIHJlbmRlcmVkIGluIGl0cyBmYWxsYmFjayBzdGF0ZS4gT25lIG9mIHRoZSBwcm9taXNlcyB0aGF0XG4gIC8vIHN1c3BlbmRlZCBpdCBoYXMgcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzXG4gIC8vIGxpa2VseSB1bmJsb2NrZWQuIFRyeSByZW5kZXJpbmcgYWdhaW4sIGF0IGEgbmV3IGV4cGlyYXRpb24gdGltZS5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCByZXRyeUxhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJldHJ5TGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICB2YXIgcmV0cnlDYWNoZTtcblxuICB7XG4gICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICB9XG5cbiAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn0gLy8gQ29tcHV0ZXMgdGhlIG5leHQgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2UgKEpORCkgYm91bmRhcnkuXG4vLyBUaGUgdGhlb3J5IGlzIHRoYXQgYSBwZXJzb24gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuXG4vLyBUaGVyZWZvcmUsIGlmIHdlIHdhaXQgYSBiaXQgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IHRoYXQgd29uJ3QgdHJhbnNsYXRlIHRvIGEgbm90aWNlYWJsZVxuLy8gZGlmZmVyZW5jZSBpbiB0aGUgZXhwZXJpZW5jZS4gSG93ZXZlciwgd2FpdGluZyBmb3IgbG9uZ2VyIG1pZ2h0IG1lYW4gdGhhdCB3ZSBjYW4gYXZvaWRcbi8vIHNob3dpbmcgYW4gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFRoZSBsb25nZXIgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCwgdGhlIGhhcmRlciBpdFxuLy8gaXMgdG8gdGVsbCBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLiBUaGVyZWZvcmUsIHRoZSBsb25nZXIgd2UndmUgYWxyZWFkeSB3YWl0ZWQsXG4vLyB0aGUgbG9uZ2VyIHdlIGNhbiB3YWl0IGFkZGl0aW9uYWxseS4gQXQgc29tZSBwb2ludCB3ZSBoYXZlIHRvIGdpdmUgdXAgdGhvdWdoLlxuLy8gV2UgcGljayBhIHRyYWluIG1vZGVsIHdoZXJlIHRoZSBuZXh0IGJvdW5kYXJ5IGNvbW1pdHMgYXQgYSBjb25zaXN0ZW50IHNjaGVkdWxlLlxuLy8gVGhlc2UgcGFydGljdWxhciBudW1iZXJzIGFyZSB2YWd1ZSBlc3RpbWF0ZXMuIFdlIGV4cGVjdCB0byBhZGp1c3QgdGhlbSBiYXNlZCBvbiByZXNlYXJjaC5cblxuZnVuY3Rpb24gam5kKHRpbWVFbGFwc2VkKSB7XG4gIHJldHVybiB0aW1lRWxhcHNlZCA8IDEyMCA/IDEyMCA6IHRpbWVFbGFwc2VkIDwgNDgwID8gNDgwIDogdGltZUVsYXBzZWQgPCAxMDgwID8gMTA4MCA6IHRpbWVFbGFwc2VkIDwgMTkyMCA/IDE5MjAgOiB0aW1lRWxhcHNlZCA8IDMwMDAgPyAzMDAwIDogdGltZUVsYXBzZWQgPCA0MzIwID8gNDMyMCA6IGNlaWwodGltZUVsYXBzZWQgLyAxOTYwKSAqIDE5NjA7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpIHtcbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCkge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcblxuICAgICAgZXJyb3IoJ01heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCAnICsgXCJjYWxscyBzZXRTdGF0ZSBpbnNpZGUgdXNlRWZmZWN0LCBidXQgdXNlRWZmZWN0IGVpdGhlciBkb2Vzbid0IFwiICsgJ2hhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uICcgKyAnZXZlcnkgcmVuZGVyLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKSB7XG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFdlIGxldCB0aGUgb3RoZXIgd2FybmluZyBhYm91dCByZW5kZXIgcGhhc2UgdXBkYXRlcyBkZWFsIHdpdGggdGhpcyBvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmliZXIubW9kZSAmIChCbG9ja2luZ01vZGUgfCBDb25jdXJyZW50TW9kZSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgJiYgdGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArICdUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCAnICsgJ2FzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byAnICsgJ3VzZUVmZmVjdCBpbnN0ZWFkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIHVubW91bnRzIGZvciB0aGlzIEZpYmVyLFxuICAgIC8vIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGV5IHdvdWxkIGhhdmUgcHJldmVudGVkIHRoaXMgdXBkYXRlLlxuXG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2KSAhPT0gTm9GbGFncykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykgOyBlbHNlIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gVGhpcyBcIiArICdpcyBhIG5vLW9wLCBidXQgaXQgaW5kaWNhdGVzIGEgbWVtb3J5IGxlYWsgaW4geW91ciBhcHBsaWNhdGlvbi4gVG8gJyArICdmaXgsIGNhbmNlbCBhbGwgc3Vic2NyaXB0aW9ucyBhbmQgYXN5bmNocm9ub3VzIHRhc2tzIGluICVzLicsIHRhZyA9PT0gQ2xhc3NDb21wb25lbnQgPyAndGhlIGNvbXBvbmVudFdpbGxVbm1vdW50IG1ldGhvZCcgOiAnYSB1c2VFZmZlY3QgY2xlYW51cCBmdW5jdGlvbicpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGJlZ2luV29yayQxO1xuXG57XG4gIHZhciBkdW1teUZpYmVyID0gbnVsbDtcblxuICBiZWdpbldvcmskMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAvLyBlcnJvciBTZWUgUmVhY3RFcnJvclV0aWxzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB2YXIgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihkdW1teUZpYmVyLCB1bml0T2ZXb3JrKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcbiAgICB9IGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuIFRyZWF0IGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGFuIGVycm9yLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfSAvLyBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIHdpdGggaGFuZGxlRXJyb3I7IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBoYXZlXG4gICAgICAvLyBjb3JyZXNwb25kaW5nIGNoYW5nZXMgdGhlcmUuXG5cblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpOyAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayh1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHVuaXRPZldvcmssIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5KTtcblxuICAgICAgaWYgKCB1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZXNldCB0aGUgcHJvZmlsZXIgdGltZXIuXG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIH0gLy8gUnVuIGJlZ2luV29yayBhZ2Fpbi5cblxuXG4gICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgYmVnaW5Xb3JrLCBudWxsLCBjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTsgLy8gYGludm9rZUd1YXJkZWRDYWxsYmFja2Agc29tZXRpbWVzIHNldHMgYW4gZXhwYW5kbyBgX3N1cHByZXNzTG9nZ2luZ2AuXG4gICAgICAgIC8vIFJldGhyb3cgdGhpcyBlcnJvciBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBvbmUuXG5cbiAgICAgICAgdGhyb3cgcmVwbGF5RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGJyYW5jaCBpcyByZWFjaGFibGUgaWYgdGhlIHJlbmRlciBwaGFzZSBpcyBpbXB1cmUuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQ7XG5cbntcbiAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAhZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJpbmdDb21wb25lbnROYW1lID0gd29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnVW5rbm93bic7IC8vIERlZHVwZSBieSB0aGUgcmVuZGVyaW5nIGNvbXBvbmVudCBiZWNhdXNlIGl0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLlxuXG4gICAgICAgICAgICB2YXIgZGVkdXBlS2V5ID0gcmVuZGVyaW5nQ29tcG9uZW50TmFtZTtcblxuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuaGFzKGRlZHVwZUtleSkpIHtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChkZWR1cGVLZXkpO1xuICAgICAgICAgICAgICB2YXIgc2V0U3RhdGVDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIGEgJ3NoYXJlZCcgdmFyaWFibGUgdGhhdCBjaGFuZ2VzIHdoZW4gYWN0KCkgb3BlbnMvY2xvc2VzIGluIHRlc3RzLlxuXG5cbnZhciBJc1RoaXNSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5mdW5jdGlvbiB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpIHtcbiAge1xuICAgIGlmICggSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gdHJ1ZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ICE9PSB0cnVlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgd3JvbmcgYWN0KCkgYXJvdW5kIHlvdXIgdGVzdCBpbnRlcmFjdGlvbnMuXFxuXCIgKyAnQmUgc3VyZSB0byB1c2UgdGhlIG1hdGNoaW5nIHZlcnNpb24gb2YgYWN0KCkgY29ycmVzcG9uZGluZyB0byB5b3VyIHJlbmRlcmVyOlxcblxcbicgKyAnLy8gZm9yIHJlYWN0LWRvbTpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCB7YWN0fSBmcicgKyBcIm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XFxuXCIgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTtcXG5cXG4nICsgJy8vIGZvciByZWFjdC10ZXN0LXJlbmRlcmVyOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IFRlc3RSZW5kZXJlciBmcicgKyBcIm9tIHJlYWN0LXRlc3QtcmVuZGVyZXInO1xcblwiICsgJ2NvbnN0IHthY3R9ID0gVGVzdFJlbmRlcmVyO1xcbicgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTsnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSAhPT0gTm9Nb2RlICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIHJhbiBhbiBlZmZlY3QsIGJ1dCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2ID0gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWOyAvLyBJbiB0ZXN0cywgd2Ugd2FudCB0byBlbmZvcmNlIGEgbW9ja2VkIHNjaGVkdWxlci5cblxudmFyIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gZmFsc2U7IC8vIFRPRE8gQmVmb3JlIHdlIHJlbGVhc2UgY29uY3VycmVudCBtb2RlLCByZXZpc2l0IHRoaXMgYW5kIGRlY2lkZSB3aGV0aGVyIGEgbW9ja2VkXG4vLyBzY2hlZHVsZXIgaXMgdGhlIGFjdHVhbCByZWNvbW1lbmRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGNvdWxkIGJlIGEgdGVzdGluZyBidWlsZCxcbi8vIGEgbmV3IGxpYiwgb3Igd2hhdGV2ZXI7IHdlIGR1bm5vIGp1c3QgeWV0LiBUaGlzIG1lc3NhZ2UgaXMgZm9yIGVhcmx5IGFkb3B0ZXJzXG4vLyB0byBnZXQgdGhlaXIgdGVzdHMgcmlnaHQuXG5cbmZ1bmN0aW9uIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPT09IGZhbHNlICYmIFNjaGVkdWxlci51bnN0YWJsZV9mbHVzaEFsbFdpdGhvdXRBc3NlcnRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUgfHwgZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignSW4gQ29uY3VycmVudCBvciBTeW5jIG1vZGVzLCB0aGUgXCJzY2hlZHVsZXJcIiBtb2R1bGUgbmVlZHMgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIC8vIEJyZWFrIHVwIHJlcXVpcmVzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICBcImplc3QubW9jaygnc2NoZWR1bGVyJywgKCkgPT4gcmVxdWlyZVwiICsgXCIoJ3NjaGVkdWxlci91bnN0YWJsZV9tb2NrJykpO1xcblxcblwiICsgJ0ZvciBtb3JlIGluZm8sIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9tb2NrLXNjaGVkdWxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSkge1xuICAvLyBJbnRlcmFjdGlvbiB0aHJlYWRzIGFyZSB1bmlxdWUgcGVyIHJvb3QgYW5kIGV4cGlyYXRpb24gdGltZS5cbiAgLy8gTk9URTogSW50ZW50aW9uYWxseSB1bnNvdW5kIGNhc3QuIEFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCBpdCdzIGEgbnVtYmVyXG4gIC8vIGFuZCBpdCByZXByZXNlbnRzIGEgYmF0Y2ggb2Ygd29yay4gQ291bGQgbWFrZSBhIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLFxuICAvLyBidXQgbWVoIHRoaXMgaXMgZmluZSBmb3Igbm93LlxuICByZXR1cm4gbGFuZSAqIDEwMDAgKyByb290LmludGVyYWN0aW9uVGhyZWFkSUQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtTcGF3bmVkV29yayhsYW5lKSB7XG5cbiAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID09PSBudWxsKSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBbbGFuZV07XG4gIH0gZWxzZSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIucHVzaChsYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCBpbnRlcmFjdGlvbnMpIHtcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25zID0gcGVuZGluZ0ludGVyYWN0aW9uTWFwLmdldChsYW5lKTtcblxuICAgIGlmIChwZW5kaW5nSW50ZXJhY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpZiAoIXBlbmRpbmdJbnRlcmFjdGlvbnMuaGFzKGludGVyYWN0aW9uKSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciBwcmV2aW91c2x5IHVuc2NoZWR1bGVkIGludGVyYWN0aW9uLlxuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuc2V0KGxhbmUsIG5ldyBTZXQoaW50ZXJhY3Rpb25zKSk7IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG5cbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKSB7XG5cbiAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKSB7XG4gIC8vIHdlIGNhbiBhY2N1cmF0ZWx5IGF0dHJpYnV0ZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gaXQsIEFuZCBzbyB0aGF0IGNhc2NhZGluZ1xuICAvLyB3b3JrIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gIHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgc2NoZWR1bGVkTGFuZSkge1xuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGxhbmVzLCBzY2hlZHVsZWRMYW5lKSkge1xuICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IHNldCBvZiBpbnRlcmFjdGlvbnMgb24gdGhlIEZpYmVyUm9vdCBmb3IgYSBmZXcgcmVhc29uczpcbiAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KClcbiAgLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgaXQuIFdlIHdpbGwgYWxzbyB1c2UgaXQgaW4gY29tbWl0V29yaygpIHRvXG4gIC8vIHBhc3MgdG8gYW55IFByb2ZpbGVyIG9uUmVuZGVyKCkgaG9va3MuIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGFcbiAgLy8gd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cblxuICByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zID0gaW50ZXJhY3Rpb25zO1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuICB2YXIgcmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3Vic2NyaWJlcjtcblxuICB0cnkge1xuICAgIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgLy8gRklYTUU6IE1vcmUgdGhhbiBvbmUgbGFuZSBjYW4gZmluaXNoIGluIGEgc2luZ2xlIGNvbW1pdC5cbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBjb21taXR0ZWRMYW5lcyk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDbGVhciBjb21wbGV0ZWQgaW50ZXJhY3Rpb25zIGZyb20gdGhlIHBlbmRpbmcgTWFwLlxuICAgIC8vIFVubGVzcyB0aGUgcmVuZGVyIHdhcyBzdXNwZW5kZWQgb3IgY2FzY2FkaW5nIHdvcmsgd2FzIHNjaGVkdWxlZCxcbiAgICAvLyBJbiB3aGljaCBjYXNl4oCTIGxlYXZlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIHVudGlsIHRoZSBzdWJzZXF1ZW50IHJlbmRlci5cbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgbGFuZSkge1xuICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb24gY291bnQgaWYgd2UncmUgZG9uZS5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgc3RpbGwgd29yayBhdCB0aGUgY3VycmVudCBwcmlvcml0eSxcbiAgICAgIC8vIFRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIHN1c3BlbnNlIGRhdGEuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCwgbGFuZSkpIHtcbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmRlbGV0ZShsYW5lKTtcbiAgICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIGBhY3RgIHRlc3RpbmcgQVBJXG5cbmZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgLy8gTmV2ZXIgZm9yY2UgZmx1c2ggaW4gcHJvZHVjdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZ2V0IHN0cmlwcGVkIG91dC5cbiAgcmV0dXJuICBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA+IDA7XG59XG4vLyBzbyB3ZSBjYW4gdGVsbCBpZiBhbnkgYXN5bmMgYWN0KCkgY2FsbHMgdHJ5IHRvIHJ1biBpbiBwYXJhbGxlbC5cblxuXG52YXIgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPSAwO1xuXG5mdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbn1cblxudmFyIHJlc29sdmVGYW1pbHkgPSBudWxsOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZ2V0cyBjb25mdXNlZCBieSBhIFdlYWtTZXQgZmVhdHVyZSBjaGVjayBiZWxvdy5cblxudmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xudmFyIHNldFJlZnJlc2hIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAge1xuICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICB9XG59O1xuZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gIHJldHVybiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZvcndhcmRSZWYgaXMgc3BlY2lhbCBiZWNhdXNlIGl0cyByZXNvbHZlZCAudHlwZSBpcyBhbiBvYmplY3QsXG4gICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgIHZhciBjdXJyZW50UmVuZGVyID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKTtcblxuICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzeW50aGV0aWNUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICB2YXIgJCR0eXBlb2ZOZXh0VHlwZSA9IHR5cGVvZiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgbmV4dFR5cGUgIT09IG51bGwgPyBuZXh0VHlwZS4kJHR5cGVvZiA6IG51bGw7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSBsYXp5IGlubmVyIHR5cGUgaXMgc3RhYmxlLFxuICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZiBpdCB3YXMgYnV0IGNhbiBubyBsb25nZXIgYmUgc2ltcGxlLFxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuXG4gICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIGJvdGggb2YgdGhlbSBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgdG8gcHJlc2VydmUgc3RhdGUuXG4gICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAvLyBjYWxscyBhcmUgZXF1aXZhbGVudCBiZWNhdXNlIHRoZXkgd3JhcCB0aGUgc2FtZSBGb28gZnVuY3Rpb24uXG4gICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpO1xuXG4gICAgICBpZiAocHJldkZhbWlseSAhPT0gdW5kZWZpbmVkICYmIHByZXZGYW1pbHkgPT09IHJlc29sdmVGYW1pbHkobmV4dFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgV2Vha1NldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzID09PSBudWxsKSB7XG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcik7XG4gIH1cbn1cbnZhciBzY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgdXBkYXRlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IHVwZGF0ZS5zdGFsZUZhbWlsaWVzLFxuICAgICAgICB1cGRhdGVkRmFtaWxpZXMgPSB1cGRhdGUudXBkYXRlZEZhbWlsaWVzO1xuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgc2NoZWR1bGVSb290ID0gZnVuY3Rpb24gKHJvb3QsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290LmNvbnRleHQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgLy8gU3VwZXIgZWRnZSBjYXNlOiByb290IGhhcyBhIGxlZ2FjeSBfcmVuZGVyU3VidHJlZSBjb250ZXh0XG4gICAgICAvLyBidXQgd2UgZG9uJ3Qga25vdyB0aGUgcGFyZW50Q29tcG9uZW50IHNvIHdlIGNhbid0IHBhc3MgaXQuXG4gICAgICAvLyBKdXN0IGlnbm9yZS4gV2UnbGwgZGVsZXRlIHRoaXMgd2l0aCBfcmVuZGVyU3VidHJlZSBjb2RlIHBhdGggbGF0ZXIuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoZmliZXIsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhbGVGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQpIHtcbiAgICAgIGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCB8fCBuZWVkc1JlbmRlcikge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiAhbmVlZHNSZW1vdW50KSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGNoaWxkLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBob3N0SW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICB9KSk7XG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIHJldHVybiBob3N0SW5zdGFuY2VzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoZmliZXIsIHR5cGVzLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZGlkTWF0Y2ggPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKGNhbmRpZGF0ZVR5cGUpKSB7XG4gICAgICAgIGRpZE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkTWF0Y2gpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4gVGhpcyBvbmx5IGRyaWxscyBkb3duIHRvIHRoZSBjbG9zZXN0IGhvc3QgY29tcG9uZW50cy5cbiAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2ggZGVlcGVyIGJlY2F1c2UgZm9yIHRoZSBwdXJwb3NlIG9mIGdpdmluZ1xuICAgICAgLy8gdmlzdWFsIGZlZWRiYWNrLCBcImZsYXNoaW5nXCIgb3V0ZXJtb3N0IHBhcmVudCByZWN0YW5nbGVzIGlzIHN1ZmZpY2llbnQuXG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwgbWF5YmUgdGhlcmUgd2lsbCBiZSBvbmUgZnVydGhlciBkb3duIGluIHRoZSBjaGlsZCB0cmVlLlxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShjaGlsZCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoc2libGluZywgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcblxuICAgIGlmIChmb3VuZEhvc3RJbnN0YW5jZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBob3N0IGNoaWxkcmVuLCBmYWxsYmFjayB0byBjbG9zZXN0IGhvc3QgcGFyZW50LlxuXG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gcmVhY2ggcm9vdCBmaXJzdC4nKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgZm91bmRIb3N0SW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG57XG4gIGhhc0JhZE1hcFBvbHlmaWxsID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgZGVidWdDb3VudGVyID0gMTtcblxuZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gSW5zdGFuY2VcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLmVsZW1lbnRUeXBlID0gbnVsbDtcbiAgdGhpcy50eXBlID0gbnVsbDtcbiAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gIHRoaXMucmV0dXJuID0gbnVsbDtcbiAgdGhpcy5jaGlsZCA9IG51bGw7XG4gIHRoaXMuc2libGluZyA9IG51bGw7XG4gIHRoaXMuaW5kZXggPSAwO1xuICB0aGlzLnJlZiA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgdGhpcy5mbGFncyA9IE5vRmxhZ3M7XG4gIHRoaXMubmV4dEVmZmVjdCA9IG51bGw7XG4gIHRoaXMuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAvL1xuICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgLy8gVGhpcyBiZWhhdmlvci9idWcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uKCkuXG4gICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBiZWxvdyB3aXRoIGRvdWJsZXMuXG4gICAgLy9cbiAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MzY1XG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciB0aGUgcGVyZm9ybWFuY2UgY2xpZmYgbWVudGlvbmVkIGFib3ZlLFxuICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgIHRoaXMuX2RlYnVnSUQgPSBkZWJ1Z0NvdW50ZXIrKztcbiAgICB0aGlzLl9kZWJ1Z1NvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG5cbiAgICBpZiAoIWhhc0JhZE1hcFBvbHlmaWxsICYmIHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4vLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4vLyAxKSBOb2JvZHkgc2hvdWxkIGFkZCBhbnkgaW5zdGFuY2UgbWV0aG9kcyBvbiB0aGlzLiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZVxuLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4vLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4vLyAyKSBOb2JvZHkgc2hvdWxkIHJlbHkgb24gYGluc3RhbmNlb2YgRmliZXJgIGZvciB0eXBlIHRlc3RpbmcuIFdlIHNob3VsZFxuLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuLy8gICAgdG8gb3B0aW1pemUgaW4gYSBub24tSklUIGVudmlyb25tZW50LlxuLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4vLyAgICBpcyBmYXN0ZXIuXG4vLyA1KSBJdCBzaG91bGQgYmUgZWFzeSB0byBwb3J0IHRoaXMgdG8gYSBDIHN0cnVjdCBhbmQga2VlcCBhIEMgaW1wbGVtZW50YXRpb25cbi8vICAgIGNvbXBhdGlibGUuXG5cblxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2hvdWxkQ29uc3RydWN0JDEodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEID0gY3VycmVudC5fZGVidWdJRDtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3M7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGltZSBmcm9tIGVuZGxlc3NseSBhY2N1bXVsYXRpbmcgaW4gbmV3IGNvbW1pdHMuXG4gICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gIH07IC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG5cbiAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn0gLy8gVXNlZCB0byByZXVzZSBhIEZpYmVyIGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIHJlc2V0cyB0aGUgRmliZXIgdG8gd2hhdCBjcmVhdGVGaWJlciBvciBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZFxuICAvLyBoYXZlIHNldCB0aGUgdmFsdWVzIHRvIGJlZm9yZSBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIElkZWFsbHkgdGhpcyB3b3VsZG4ndFxuICAvLyBiZSBuZWNlc3NhcnkgYnV0IHVuZm9ydHVuYXRlbHkgbWFueSBjb2RlIHBhdGhzIHJlYWRzIGZyb20gdGhlIHdvcmtJblByb2dyZXNzXG4gIC8vIHdoZW4gdGhleSBzaG91bGQgYmUgcmVhZGluZyBmcm9tIGN1cnJlbnQgYW5kIHdyaXRpbmcgdG8gd29ya0luUHJvZ3Jlc3MuXG4gIC8vIFdlIGFzc3VtZSBwZW5kaW5nUHJvcHMsIGluZGV4LCBrZXksIHJlZiwgcmV0dXJuIGFyZSBzdGlsbCB1bnRvdWNoZWQgdG9cbiAgLy8gYXZvaWQgZG9pbmcgYW5vdGhlciByZWNvbmNpbGlhdGlvbi5cbiAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gIC8vIHRoYXQgY2hpbGQgZmliZXIgaXMgc2V0dGluZywgbm90IHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gUGxhY2VtZW50OyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZykge1xuICB2YXIgbW9kZTtcblxuICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgIG1vZGUgPSBDb25jdXJyZW50TW9kZSB8IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSBpZiAodGFnID09PSBCbG9ja2luZ1Jvb3QpIHtcbiAgICBtb2RlID0gQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIHtcbiAgICBtb2RlID0gTm9Nb2RlO1xuICB9XG5cbiAgaWYgKCBpc0RldlRvb2xzUHJlc2VudCkge1xuICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludOKAk1xuICAgIC8vIFdpdGhvdXQgc29tZSBub2RlcyBpbiB0aGUgdHJlZSBoYXZpbmcgZW1wdHkgYmFzZSB0aW1lcy5cbiAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUZpYmVyKEhvc3RSb290LCBudWxsLCBudWxsLCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxua2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXJUYWcgPSBJbmRldGVybWluYXRlQ29tcG9uZW50OyAvLyBUaGUgcmVzb2x2ZWQgdHlwZSBpcyBzZXQgaWYgd2Uga25vdyB3aGF0IHRoZSBmaW5hbCB0eXBlIHdpbGwgYmUuIEkuZS4gaXQncyBub3QgbGF6eS5cblxuICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoc2hvdWxkQ29uc3RydWN0JDEodHlwZSkpIHtcbiAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGZpYmVyVGFnID0gSG9zdENvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBnZXRUYWc6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IERlYnVnVHJhY2luZ01vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBTdHJpY3RNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NDT1BFX1RZUEU6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTWVtb0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBMYXp5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEJsb2NrO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgXCIgKyAnbmFtZWQgaW1wb3J0cy4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGZpYmVyLnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBvd25lciA9IG51bGw7XG5cbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIGtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEZyYWdtZW50LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgcGVuZGluZ1Byb3BzLmlkICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgYXMgYSBwcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpOyAvLyBUT0RPOiBUaGUgUHJvZmlsZXIgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci50eXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgZWZmZWN0RHVyYXRpb246IDAsXG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIFN1c3BlbnNlQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VMaXN0Q29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG5cbiAge1xuICAgIC8vIFRPRE86IFRoZSBTdXNwZW5zZUxpc3RDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgICAvLyBpbnN0ZWFkLlxuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihPZmZzY3JlZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIE9mZnNjcmVlbkNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihMZWdhY3lIaWRkZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIExlZ2FjeUhpZGRlbiBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RUZXh0LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7IC8vIFRPRE86IFRoZXNlIHNob3VsZCBub3QgbmVlZCBhIHR5cGUuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIGZpYmVyLnR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgdGFyZ2V0Lm5leHRFZmZlY3QgPSBzb3VyY2UubmV4dEVmZmVjdDtcbiAgdGFyZ2V0LmZpcnN0RWZmZWN0ID0gc291cmNlLmZpcnN0RWZmZWN0O1xuICB0YXJnZXQubGFzdEVmZmVjdCA9IHNvdXJjZS5sYXN0RWZmZWN0O1xuICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gIHRhcmdldC5hbHRlcm5hdGUgPSBzb3VyY2UuYWx0ZXJuYXRlO1xuXG4gIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z0lEID0gc291cmNlLl9kZWJ1Z0lEO1xuICB0YXJnZXQuX2RlYnVnU291cmNlID0gc291cmNlLl9kZWJ1Z1NvdXJjZTtcbiAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICB0YXJnZXQuX2RlYnVnTmVlZHNSZW1vdW50ID0gc291cmNlLl9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgdGFyZ2V0Ll9kZWJ1Z0hvb2tUeXBlcyA9IHNvdXJjZS5fZGVidWdIb29rVHlwZXM7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuY3VycmVudCA9IG51bGw7XG4gIHRoaXMucGluZ0NhY2hlID0gbnVsbDtcbiAgdGhpcy5maW5pc2hlZFdvcmsgPSBudWxsO1xuICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICB0aGlzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuICB0aGlzLmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB0aGlzLmV2ZW50VGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLm11dGFibGVSZWFkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcblxuICB7XG4gICAgdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLmludGVyYWN0aW9uVGhyZWFkSUQgPSB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCk7XG4gICAgdGhpcy5tZW1vaXplZEludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBCbG9ja2luZ1Jvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlQmxvY2tpbmdSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDb25jdXJyZW50Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUxlZ2FjeVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgdmFyIHJvb3QgPSBuZXcgRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xuICAvLyBzdGF0ZU5vZGUgaXMgYW55LlxuXG5cbiAgdmFyIHVuaW5pdGlhbGl6ZWRGaWJlciA9IGNyZWF0ZUhvc3RSb290RmliZXIodGFnKTtcbiAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHVuaW5pdGlhbGl6ZWRGaWJlcik7XG4gIHJldHVybiByb290O1xufVxuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmVyc2lvbiB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nIG1hdGNoZXMgdGhlIG9uZVxuLy8gdGhhdCBpcyBldmVudHVhbGx5IHJlYWQgZHVyaW5nIGh5ZHJhdGlvbi5cbi8vIElmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlcmUncyBhIHBvdGVudGlhbCB0ZWFyIGFuZCBhIGZ1bGwgZGVvcHQgcmVuZGVyIGlzIHJlcXVpcmVkLlxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSkge1xuICB2YXIgZ2V0VmVyc2lvbiA9IG11dGFibGVTb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtdXRhYmxlU291cmNlLl9zb3VyY2UpOyAvLyBUT0RPIENsZWFyIHRoaXMgZGF0YSBvbmNlIGFsbCBwZW5kaW5nIGh5ZHJhdGlvbiB3b3JrIGlzIGZpbmlzaGVkLlxuICAvLyBSZXRhaW5pbmcgaXQgZm9yZXZlciBtYXkgaW50ZXJmZXJlIHdpdGggR0MuXG5cbiAgaWYgKHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsKSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gW211dGFibGVTb3VyY2UsIHZlcnNpb25dO1xuICB9IGVsc2Uge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVySW5mbywgLy8gVE9ETzogZmlndXJlIG91dCB0aGUgQVBJIGZvciBjcm9zcy1yZW5kZXJlciBpbXBsZW1lbnRhdGlvbi5cbmltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IFBvcnRhbFxuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IGtleSA9PSBudWxsID8gbnVsbCA6ICcnICsga2V5LFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZTtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50Q29udGV4dDtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAvLyByZW5kZXIgYW5kIHRoZXJlJ3MgYW5vdGhlciB3YXJuaW5nIGZvciB0aGF0IGFueXdheS5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBvblNjaGVkdWxlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuXG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoY3VycmVudCQxKTtcbiAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChjdXJyZW50JDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBlcnJvcignUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWUoY3VycmVudC50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudFxuICB9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGN1cnJlbnQkMSwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gIGlmICghY29udGFpbmVyRmliZXIuY2hpbGQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGhpZ2hlclByaW9yaXR5TGFuZShzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSwgcmV0cnlMYW5lKTtcbiAgfVxufSAvLyBJbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIHRoZW5uYWJsZXMgd2hlbiB0aGV5IHJlc29sdmUgd2l0aGluIHRoaXMgYm91bmRhcnkuXG5cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIHJldHJ5TGFuZSkge1xuICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlKSB7XG4gICAgbWFya1JldHJ5TGFuZUltcGwoYWx0ZXJuYXRlLCByZXRyeUxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgb3RoZXIgdGhhbiBzeW5jaHJvbm91c2x5IGZsdXNoIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQyKHByaW9yaXR5LCBmbikge1xuXG4gIHRyeSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShwcmlvcml0eSk7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChob3N0RmliZXIudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlLmluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbnZhciBzaG91bGRTdXNwZW5kSW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRTdXNwZW5kKGZpYmVyKSB7XG4gIHJldHVybiBzaG91bGRTdXNwZW5kSW1wbChmaWJlcik7XG59XG52YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsO1xudmFyIHNjaGVkdWxlVXBkYXRlID0gbnVsbDtcbnZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aERlbGV0ZUltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgICB2YXIgbmV3S2V5ID0gbmV3UGF0aFtpbmRleF07IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgdXBkYXRlZFtuZXdLZXldID0gdXBkYXRlZFtvbGRLZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgdXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKCAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICBvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWUgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aCkge1xuICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXknKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXRJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRIb29rO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoU2V0KGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhEZWxldGUoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoUmVuYW1lKGhvb2subWVtb2l6ZWRTdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShmaWJlci5tZW1vaXplZFByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SW50b0RldlRvb2xzKGRldlRvb2xzQ29uZmlnKSB7XG4gIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoe1xuICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgIHNldFN1c3BlbnNlSGFuZGxlcjogc2V0U3VzcGVuc2VIYW5kbGVyLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjogZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIsXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIHx8IGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiAgc2NoZWR1bGVSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJvb3Q6ICBzY2hlZHVsZVJvb3QgLFxuICAgIHNldFJlZnJlc2hIYW5kbGVyOiAgc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6ICBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCBDb25jdXJyZW50Um9vdCwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKTtcbn1cblxuUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKHJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhlICcgKyAncm9vdCBjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyBcInJvb3QudW5tb3VudCgpIHRvIGVtcHR5IGEgcm9vdCdzIGNvbnRhaW5lci5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xufTtcblxuUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3VubW91bnQoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuICB1cGRhdGVDb250YWluZXIobnVsbCwgcm9vdCwgbnVsbCwgZnVuY3Rpb24gKCkge1xuICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIC8vIFRhZyBpcyBlaXRoZXIgTGVnYWN5Um9vdCBvciBDb25jdXJyZW50IFJvb3RcbiAgdmFyIGh5ZHJhdGUgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRlID09PSB0cnVlO1xuICB2YXIgaHlkcmF0aW9uQ2FsbGJhY2tzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyB8fCBudWxsO1xuICB2YXIgbXV0YWJsZVNvdXJjZXMgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzIHx8IG51bGw7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgdGFnLCBoeWRyYXRlKTtcbiAgbWFya0NvbnRhaW5lckFzUm9vdChyb290LmN1cnJlbnQsIGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJOb2RlVHlwZSA9IGNvbnRhaW5lci5ub2RlVHlwZTtcblxuICB7XG4gICAgdmFyIHJvb3RDb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIH1cblxuICBpZiAobXV0YWJsZVNvdXJjZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VzW2ldO1xuICAgICAgcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIExlZ2FjeVJvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcbnZhciB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSBmYWxzZTtcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLl9pbnRlcm5hbFJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhpcyAnICsgJ2NvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArICdSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIHRvIGVtcHR5IGEgY29udGFpbmVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QgPSAhIWNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShyb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpKTtcblxuICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCAmJiAhaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCkge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGNvbnRhaW5lci50YWdOYW1lICYmIGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykge1xuICAgICAgZXJyb3IoJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWxlbWVudCAmJiByb290RWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSk7XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKSB7XG4gIHZhciBzaG91bGRIeWRyYXRlID0gZm9yY2VIeWRyYXRlIHx8IHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpOyAvLyBGaXJzdCBjbGVhciBhbnkgZXhpc3RpbmcgY29udGVudC5cblxuICBpZiAoIXNob3VsZEh5ZHJhdGUpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgdmFyIHJvb3RTaWJsaW5nO1xuXG4gICAgd2hpbGUgKHJvb3RTaWJsaW5nID0gY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAge1xuICAgICAgICBpZiAoIXdhcm5lZCAmJiByb290U2libGluZy5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RTaWJsaW5nLmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSkge1xuICAgICAgICAgIHdhcm5lZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcigncmVuZGVyKCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAnICsgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNhdXNlZCBieSAnICsgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb290U2libGluZyk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChzaG91bGRIeWRyYXRlICYmICFmb3JjZUh5ZHJhdGUgJiYgIXdhcm5lZEFib3V0SHlkcmF0ZUFQSSkge1xuICAgICAgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gdHJ1ZTtcblxuICAgICAgd2FybigncmVuZGVyKCk6IENhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgdG8gaHlkcmF0ZSBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwICcgKyAnd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgdjE4LiBSZXBsYWNlIHRoZSBSZWFjdERPTS5yZW5kZXIoKSBjYWxsICcgKyAnd2l0aCBSZWFjdERPTS5oeWRyYXRlKCkgaWYgeW91IHdhbnQgUmVhY3QgdG8gYXR0YWNoIHRvIHRoZSBzZXJ2ZXIgSFRNTC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIHNob3VsZEh5ZHJhdGUgPyB7XG4gICAgaHlkcmF0ZTogdHJ1ZVxuICB9IDogdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrLCAncmVuZGVyJyk7XG4gIH0gLy8gVE9ETzogV2l0aG91dCBgYW55YCB0eXBlLCBGbG93IHNheXMgXCJQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgb24gYW55XG4gIC8vIG1lbWJlciBvZiBpbnRlcnNlY3Rpb24gdHlwZS5cIiBXaHl5eXl5eS5cblxuXG4gIHZhciByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gIHZhciBmaWJlclJvb3Q7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKTtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gSW5pdGlhbCBtb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG5cbiAgICAgICAgX29yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gVXBkYXRlXG5cblxuICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbn1cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyO1xuXG4gICAgICBpZiAoIXdhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgZmluZERPTU5vZGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uaHlkcmF0ZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgY3JlYXRlUm9vdChjb250YWluZXIsIHtoeWRyYXRlOiB0cnVlfSkucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG5cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCB0cnVlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyTm9kZSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgaGFzKHBhcmVudENvbXBvbmVudCkpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwicGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnRcIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC51bm1vdW50KCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAge1xuICAgICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgdmFyIHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCA9IHJvb3RFbCAmJiAhZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpO1xuXG4gICAgICBpZiAocmVuZGVyZWRCeURpZmZlcmVudFJlYWN0KSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfSAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGBkZWxldGUgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJgXG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShfcm9vdEVsKSk7IC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5zZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShydW5XaXRoUHJpb3JpdHkkMik7XG52YXIgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSBmYWxzZTtcblxue1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIE1hcCBoYXMgbm8gcHJvdG90eXBlXG4gIE1hcC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVycm9yKCdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxufVxuXG5zZXRSZXN0b3JlSW1wbGVtZW50YXRpb24ocmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKTtcbnNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oYmF0Y2hlZFVwZGF0ZXMkMSwgZGlzY3JldGVVcGRhdGVzJDEsIGZsdXNoRGlzY3JldGVVcGRhdGVzLCBiYXRjaGVkRXZlbnRVcGRhdGVzJDEpO1xuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9IC8vIFRPRE86IHBhc3MgUmVhY3RET00gcG9ydGFsIGltcGxlbWVudGF0aW9uIGFzIHRoaXJkIGFyZ3VtZW50XG4gIC8vICRGbG93Rml4TWUgVGhlIEZsb3cgdHlwZSBpcyBvcGFxdWUgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IGNyZWF0ZSBpdC5cblxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuXG4gIHJldHVybiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCkge1xuICAgICAgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdUaGUgUmVhY3RET00udW5zdGFibGVfY3JlYXRlUG9ydGFsKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdERPTS5jcmVhdGVQb3J0YWwoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLCAnICsgJ2J1dCB3aXRob3V0IHRoZSBcInVuc3RhYmxlX1wiIHByZWZpeC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwga2V5KTtcbn1cblxudmFyIEludGVybmFscyA9IHtcbiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggUmVhY3RUZXN0VXRpbHMuanMsIGFuZCBSZWFjdFRlc3RVdGlsc0FjdC5qcy5cbiAgLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cbiAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSwgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSwgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGZsdXNoUGFzc2l2ZUVmZmVjdHMsIC8vIFRPRE86IFRoaXMgaXMgcmVsYXRlZCB0byBgYWN0YCwgbm90IGV2ZW50cy4gTW92ZSB0byBzZXBhcmF0ZSBrZXk/XG4gIElzVGhpc1JlbmRlcmVyQWN0aW5nXVxufTtcbnZhciBmb3VuZERldlRvb2xzID0gaW5qZWN0SW50b0RldlRvb2xzKHtcbiAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICBidW5kbGVUeXBlOiAgMSAsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gICAgICAgIGNvbnNvbGUuaW5mbygnJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgJyArICdmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnICsgKHByb3RvY29sID09PSAnZmlsZTonID8gJ1xcbllvdSBtaWdodCBuZWVkIHRvIHVzZSBhIGxvY2FsIEhUVFAgc2VydmVyIChpbnN0ZWFkIG9mIGZpbGU6Ly8pOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gSW50ZXJuYWxzO1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWwkMTtcbmV4cG9ydHMuZmluZERPTU5vZGUgPSBmaW5kRE9NTm9kZTtcbmV4cG9ydHMuZmx1c2hTeW5jID0gZmx1c2hTeW5jO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcbmV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbmV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBiYXRjaGVkVXBkYXRlcyQxO1xuZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWwgPSB1bnN0YWJsZV9jcmVhdGVQb3J0YWw7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWN0aXZpdHkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiAxMiAxOCAxMiAxNSAyMSA5IDMgNiAxMiAyIDEyXCJcbiAgfSkpO1xufSk7XG5BY3Rpdml0eS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BY3Rpdml0eS5kaXNwbGF5TmFtZSA9ICdBY3Rpdml0eSc7XG5leHBvcnQgZGVmYXVsdCBBY3Rpdml0eTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWlycGxheSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE3SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC0xXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE1IDE3IDIxIDcgMjEgMTIgMTVcIlxuICB9KSk7XG59KTtcbkFpcnBsYXkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWlycGxheS5kaXNwbGF5TmFtZSA9ICdBaXJwbGF5JztcbmV4cG9ydCBkZWZhdWx0IEFpcnBsYXk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsZXJ0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkFsZXJ0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsZXJ0Q2lyY2xlLmRpc3BsYXlOYW1lID0gJ0FsZXJ0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGVydE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkFsZXJ0T2N0YWdvbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGVydE9jdGFnb24uZGlzcGxheU5hbWUgPSAnQWxlcnRPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0T2N0YWdvbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxlcnRUcmlhbmdsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4yOSAzLjg2TDEuODIgMThhMiAyIDAgMCAwIDEuNzEgM2gxNi45NGEyIDIgMCAwIDAgMS43MS0zTDEzLjcxIDMuODZhMiAyIDAgMCAwLTMuNDIgMHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSk7XG59KTtcbkFsZXJ0VHJpYW5nbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxlcnRUcmlhbmdsZS5kaXNwbGF5TmFtZSA9ICdBbGVydFRyaWFuZ2xlJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0VHJpYW5nbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduQ2VudGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkNlbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGlnbkNlbnRlci5kaXNwbGF5TmFtZSA9ICdBbGlnbkNlbnRlcic7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkNlbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25KdXN0aWZ5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkp1c3RpZnkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25KdXN0aWZ5LmRpc3BsYXlOYW1lID0gJ0FsaWduSnVzdGlmeSc7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkp1c3RpZnk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuQWxpZ25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduTGVmdC5kaXNwbGF5TmFtZSA9ICdBbGlnbkxlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQWxpZ25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGlnblJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnblJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduUmlnaHQuZGlzcGxheU5hbWUgPSAnQWxpZ25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBBbGlnblJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbmNob3IgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMkgyYTEwIDEwIDAgMCAwIDIwIDBoLTNcIlxuICB9KSk7XG59KTtcbkFuY2hvci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbmNob3IuZGlzcGxheU5hbWUgPSAnQW5jaG9yJztcbmV4cG9ydCBkZWZhdWx0IEFuY2hvcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXBlcnR1cmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0LjMxXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIwLjA1XCIsXG4gICAgeTI6IFwiMTcuOTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5LjY5XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIxLjE3XCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjcuMzhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEzLjEyXCIsXG4gICAgeTI6IFwiMi4wNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjkuNjlcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjMuOTVcIixcbiAgICB5MjogXCI2LjA2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuMzFcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjIuODNcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjYyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMC44OFwiLFxuICAgIHkyOiBcIjIxLjk0XCJcbiAgfSkpO1xufSk7XG5BcGVydHVyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcGVydHVyZS5kaXNwbGF5TmFtZSA9ICdBcGVydHVyZSc7XG5leHBvcnQgZGVmYXVsdCBBcGVydHVyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJjaGl2ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDggMjEgMjEgMyAyMSAzIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFyY2hpdmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJjaGl2ZS5kaXNwbGF5TmFtZSA9ICdBcmNoaXZlJztcbmV4cG9ydCBkZWZhdWx0IEFyY2hpdmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93bkNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI4IDEyIDEyIDE2IDE2IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93bkNpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25DaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0Rvd25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTcgNyAxNyA3IDdcIlxuICB9KSk7XG59KTtcbkFycm93RG93bkxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dEb3duTGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93bkxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93blJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgNyAxNyAxNyA3IDE3XCJcbiAgfSkpO1xufSk7XG5BcnJvd0Rvd25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd25SaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0Rvd25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDEyIDEyIDE5IDUgMTJcIlxuICB9KSk7XG59KTtcbkFycm93RG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd24uZGlzcGxheU5hbWUgPSAnQXJyb3dEb3duJztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dMZWZ0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDggOCAxMiAxMiAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFycm93TGVmdENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0xlZnRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dMZWZ0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFycm93TGVmdENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dMZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE5IDUgMTIgMTIgNVwiXG4gIH0pKTtcbn0pO1xuQXJyb3dMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93TGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1JpZ2h0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE2IDE2IDEyIDEyIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5BcnJvd1JpZ2h0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93UmlnaHRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dSaWdodENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1JpZ2h0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1JpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDUgMTkgMTIgMTIgMTlcIlxuICB9KSk7XG59KTtcbkFycm93UmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dSaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93UmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93VXBDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTIgMTIgOCA4IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0Fycm93VXBDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcExlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3IDE3IDcgNyAxNyA3XCJcbiAgfSkpO1xufSk7XG5BcnJvd1VwTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwTGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1VwTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcFJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyA3IDE3IDcgMTcgMTdcIlxuICB9KSk7XG59KTtcbkFycm93VXBSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwUmlnaHQuZGlzcGxheU5hbWUgPSAnQXJyb3dVcFJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXBSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI1IDEyIDEyIDUgMTkgMTJcIlxuICB9KSk7XG59KTtcbkFycm93VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dVcC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwJztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEF0U2lnbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC0zLjkyIDcuOTRcIlxuICB9KSk7XG59KTtcbkF0U2lnbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BdFNpZ24uZGlzcGxheU5hbWUgPSAnQXRTaWduJztcbmV4cG9ydCBkZWZhdWx0IEF0U2lnbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXdhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjhcIixcbiAgICByOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjguMjEgMTMuODkgNyAyMyAxMiAyMCAxNyAyMyAxNS43OSAxMy44OFwiXG4gIH0pKTtcbn0pO1xuQXdhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXdhcmQuZGlzcGxheU5hbWUgPSAnQXdhcmQnO1xuZXhwb3J0IGRlZmF1bHQgQXdhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJhckNoYXJ0MiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkJhckNoYXJ0Mi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXJDaGFydDIuZGlzcGxheU5hbWUgPSAnQmFyQ2hhcnQyJztcbmV4cG9ydCBkZWZhdWx0IEJhckNoYXJ0MjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmFyQ2hhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5CYXJDaGFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXJDaGFydC5kaXNwbGF5TmFtZSA9ICdCYXJDaGFydCc7XG5leHBvcnQgZGVmYXVsdCBCYXJDaGFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmF0dGVyeUNoYXJnaW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMThIM2EyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgzLjE5TTE1IDZoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy4xOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMSA2IDcgMTIgMTMgMTIgOSAxOFwiXG4gIH0pKTtcbn0pO1xuQmF0dGVyeUNoYXJnaW5nLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhdHRlcnlDaGFyZ2luZy5kaXNwbGF5TmFtZSA9ICdCYXR0ZXJ5Q2hhcmdpbmcnO1xuZXhwb3J0IGRlZmF1bHQgQmF0dGVyeUNoYXJnaW5nOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXR0ZXJ5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNlwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjEyXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuQmF0dGVyeS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXR0ZXJ5LmRpc3BsYXlOYW1lID0gJ0JhdHRlcnknO1xuZXhwb3J0IGRlZmF1bHQgQmF0dGVyeTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmVsbE9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy43MyAyMWEyIDIgMCAwIDEtMy40NiAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguNjMgMTNBMTcuODkgMTcuODkgMCAwIDEgMTggOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjYgNi4yNkE1Ljg2IDUuODYgMCAwIDAgNiA4YzAgNy0zIDktMyA5aDE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOGE2IDYgMCAwIDAtOS4zMy01XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5CZWxsT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJlbGxPZmYuZGlzcGxheU5hbWUgPSAnQmVsbE9mZic7XG5leHBvcnQgZGVmYXVsdCBCZWxsT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCZWxsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDhBNiA2IDAgMCAwIDYgOGMwIDctMyA5LTMgOWgxOHMtMy0yLTMtOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjczIDIxYTIgMiAwIDAgMS0zLjQ2IDBcIlxuICB9KSk7XG59KTtcbkJlbGwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmVsbC5kaXNwbGF5TmFtZSA9ICdCZWxsJztcbmV4cG9ydCBkZWZhdWx0IEJlbGw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJsdWV0b290aCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjYuNSA2LjUgMTcuNSAxNy41IDEyIDIzIDEyIDEgMTcuNSA2LjUgNi41IDE3LjVcIlxuICB9KSk7XG59KTtcbkJsdWV0b290aC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CbHVldG9vdGguZGlzcGxheU5hbWUgPSAnQmx1ZXRvb3RoJztcbmV4cG9ydCBkZWZhdWx0IEJsdWV0b290aDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9sZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDRoOGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDEyaDlhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEtNCA0SDZ6XCJcbiAgfSkpO1xufSk7XG5Cb2xkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvbGQuZGlzcGxheU5hbWUgPSAnQm9sZCc7XG5leHBvcnQgZGVmYXVsdCBCb2xkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb29rT3BlbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3elwiXG4gIH0pKTtcbn0pO1xuQm9va09wZW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm9va09wZW4uZGlzcGxheU5hbWUgPSAnQm9va09wZW4nO1xuZXhwb3J0IGRlZmF1bHQgQm9va09wZW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJvb2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxOS41QTIuNSAyLjUgMCAwIDEgNi41IDE3SDIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDJIMjB2MjBINi41QTIuNSAyLjUgMCAwIDEgNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyelwiXG4gIH0pKTtcbn0pO1xuQm9vay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rLmRpc3BsYXlOYW1lID0gJ0Jvb2snO1xuZXhwb3J0IGRlZmF1bHQgQm9vazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9va21hcmsgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSkpO1xufSk7XG5Cb29rbWFyay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rbWFyay5kaXNwbGF5TmFtZSA9ICdCb29rbWFyayc7XG5leHBvcnQgZGVmYXVsdCBCb29rbWFyazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm94ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMy4yNyA2Ljk2IDEyIDEyLjAxIDIwLjczIDYuOTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyLjA4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQm94LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJveC5kaXNwbGF5TmFtZSA9ICdCb3gnO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCcmllZmNhc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMTRcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxVjVhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjE2XCJcbiAgfSkpO1xufSk7XG5CcmllZmNhc2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQnJpZWZjYXNlLmRpc3BsYXlOYW1lID0gJ0JyaWVmY2FzZSc7XG5leHBvcnQgZGVmYXVsdCBCcmllZmNhc2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbGVuZGFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ2FsZW5kYXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FsZW5kYXIuZGlzcGxheU5hbWUgPSAnQ2FsZW5kYXInO1xuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbWVyYU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAyMUgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDNtMy0zaDZsMiAzaDRhMiAyIDAgMCAxIDIgMnY5LjM0bS03LjcyLTIuMDZhNCA0IDAgMSAxLTUuNTYtNS41NlwiXG4gIH0pKTtcbn0pO1xuQ2FtZXJhT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhbWVyYU9mZi5kaXNwbGF5TmFtZSA9ICdDYW1lcmFPZmYnO1xuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDYW1lcmEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMTlhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDRsMi0zaDZsMiAzaDRhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTNcIixcbiAgICByOiBcIjRcIlxuICB9KSk7XG59KTtcbkNhbWVyYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DYW1lcmEuZGlzcGxheU5hbWUgPSAnQ2FtZXJhJztcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FzdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDE2LjFBNSA1IDAgMCAxIDUuOSAyME0yIDEyLjA1QTkgOSAwIDAgMSA5Ljk1IDIwTTIgOFY2YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAyaC02XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5DYXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhc3QuZGlzcGxheU5hbWUgPSAnQ2FzdCc7XG5leHBvcnQgZGVmYXVsdCBDYXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGVja0NpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxMS4wOFYxMmExMCAxMCAwIDEgMS01LjkzLTkuMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDQgMTIgMTQuMDEgOSAxMS4wMVwiXG4gIH0pKTtcbn0pO1xuQ2hlY2tDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hlY2tDaXJjbGUuZGlzcGxheU5hbWUgPSAnQ2hlY2tDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxMSAxMiAxNCAyMiA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTJ2N2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTFcIlxuICB9KSk7XG59KTtcbkNoZWNrU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZWNrU3F1YXJlLmRpc3BsYXlOYW1lID0gJ0NoZWNrU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IENoZWNrU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGVjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDYgOSAxNyA0IDEyXCJcbiAgfSkpO1xufSk7XG5DaGVjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGVjay5kaXNwbGF5TmFtZSA9ICdDaGVjayc7XG5leHBvcnQgZGVmYXVsdCBDaGVjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbkRvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDkgMTIgMTUgMTggOVwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbkRvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbkRvd24uZGlzcGxheU5hbWUgPSAnQ2hldnJvbkRvd24nO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbkRvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTggOSAxMiAxNSA2XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uTGVmdC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvblJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxOCAxNSAxMiA5IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uUmlnaHQuZGlzcGxheU5hbWUgPSAnQ2hldnJvblJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvblVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTggMTUgMTIgOSA2IDE1XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvblVwLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25VcCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTMgMTIgMTggMTcgMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgNiAxMiAxMSAxNyA2XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uc0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNEb3duLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zRG93bic7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uc0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDE3IDYgMTIgMTEgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTggMTcgMTMgMTIgMTggN1wiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25zTGVmdC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc0xlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uc1JpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTcgMTggMTIgMTMgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNiAxNyAxMSAxMiA2IDdcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNSaWdodC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc1JpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAxMSAxMiA2IDcgMTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDE4IDEyIDEzIDcgMThcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNVcC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc1VwJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENocm9tZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjEuMTdcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMy45NVwiLFxuICAgIHkxOiBcIjYuMDZcIixcbiAgICB4MjogXCI4LjU0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMC44OFwiLFxuICAgIHkxOiBcIjIxLjk0XCIsXG4gICAgeDI6IFwiMTUuNDZcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQ2hyb21lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNocm9tZS5kaXNwbGF5TmFtZSA9ICdDaHJvbWUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hyb21lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNpcmNsZS5kaXNwbGF5TmFtZSA9ICdDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbGlwYm9hcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjhcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCI4XCIsXG4gICAgaGVpZ2h0OiBcIjRcIixcbiAgICByeDogXCIxXCIsXG4gICAgcnk6IFwiMVwiXG4gIH0pKTtcbn0pO1xuQ2xpcGJvYXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsaXBib2FyZC5kaXNwbGF5TmFtZSA9ICdDbGlwYm9hcmQnO1xuZXhwb3J0IGRlZmF1bHQgQ2xpcGJvYXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG9jayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMiA2IDEyIDEyIDE2IDE0XCJcbiAgfSkpO1xufSk7XG5DbG9jay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG9jay5kaXNwbGF5TmFtZSA9ICdDbG9jayc7XG5leHBvcnQgZGVmYXVsdCBDbG9jazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWREcml6emxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTlcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTYuNThBNSA1IDAgMCAwIDE4IDdoLTEuMjZBOCA4IDAgMSAwIDQgMTUuMjVcIlxuICB9KSk7XG59KTtcbkNsb3VkRHJpenpsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZERyaXp6bGUuZGlzcGxheU5hbWUgPSAnQ2xvdWREcml6emxlJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkRHJpenpsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRMaWdodG5pbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMTYuOUE1IDUgMCAwIDAgMTggN2gtMS4yNmE4IDggMCAxIDAtMTEuNjIgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTEgOSAxNyAxNSAxNyAxMSAyM1wiXG4gIH0pKTtcbn0pO1xuQ2xvdWRMaWdodG5pbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRMaWdodG5pbmcuZGlzcGxheU5hbWUgPSAnQ2xvdWRMaWdodG5pbmcnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWRMaWdodG5pbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjYxIDE2Ljk1QTUgNSAwIDAgMCAxOCAxMGgtMS4yNmE4IDggMCAwIDAtNy4wNS02TTUgNWE4IDggMCAwIDAgNCAxNWg5YTUgNSAwIDAgMCAxLjctLjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbkNsb3VkT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkT2ZmLmRpc3BsYXlOYW1lID0gJ0Nsb3VkT2ZmJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZFJhaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE2LjU4QTUgNSAwIDAgMCAxOCA3aC0xLjI2QTggOCAwIDEgMCA0IDE1LjI1XCJcbiAgfSkpO1xufSk7XG5DbG91ZFJhaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRSYWluLmRpc3BsYXlOYW1lID0gJ0Nsb3VkUmFpbic7XG5leHBvcnQgZGVmYXVsdCBDbG91ZFJhaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkU25vdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNy41OEE1IDUgMCAwIDAgMTggOGgtMS4yNkE4IDggMCAxIDAgNCAxNi4yNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjguMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjguMDFcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTYuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxNi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5DbG91ZFNub3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRTbm93LmRpc3BsYXlOYW1lID0gJ0Nsb3VkU25vdyc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZFNub3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDEwaC0xLjI2QTggOCAwIDEgMCA5IDIwaDlhNSA1IDAgMCAwIDAtMTB6XCJcbiAgfSkpO1xufSk7XG5DbG91ZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZC5kaXNwbGF5TmFtZSA9ICdDbG91ZCc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE4IDIyIDEyIDE2IDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggNiAyIDEyIDggMThcIlxuICB9KSk7XG59KTtcbkNvZGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZS5kaXNwbGF5TmFtZSA9ICdDb2RlJztcbmV4cG9ydCBkZWZhdWx0IENvZGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZGVwZW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDIgMjIgOC41IDIyIDE1LjUgMTIgMjIgMiAxNS41IDIgOC41IDEyIDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiA4LjUgMTIgMTUuNSAyIDguNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMiAxNS41IDEyIDguNSAyMiAxNS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4LjVcIlxuICB9KSk7XG59KTtcbkNvZGVwZW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZXBlbi5kaXNwbGF5TmFtZSA9ICdDb2RlcGVuJztcbmV4cG9ydCBkZWZhdWx0IENvZGVwZW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZGVzYW5kYm94ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNy41IDQuMjEgMTIgNi44MSAxNi41IDQuMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcuNSAxOS43OSA3LjUgMTQuNiAzIDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMy4yNyA2Ljk2IDEyIDEyLjAxIDIwLjczIDYuOTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyLjA4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQ29kZXNhbmRib3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZXNhbmRib3guZGlzcGxheU5hbWUgPSAnQ29kZXNhbmRib3gnO1xuZXhwb3J0IGRlZmF1bHQgQ29kZXNhbmRib3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZmZlZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA4aDFhNCA0IDAgMCAxIDAgOGgtMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgOGgxNnY5YTQgNCAwIDAgMS00IDRINmE0IDQgMCAwIDEtNC00Vjh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuQ29mZmVlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvZmZlZS5kaXNwbGF5TmFtZSA9ICdDb2ZmZWUnO1xuZXhwb3J0IGRlZmF1bHQgQ29mZmVlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb2x1bW5zID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDNoN2EyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTdtMC0xOEg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg3bTAtMTh2MThcIlxuICB9KSk7XG59KTtcbkNvbHVtbnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29sdW1ucy5kaXNwbGF5TmFtZSA9ICdDb2x1bW5zJztcbmV4cG9ydCBkZWZhdWx0IENvbHVtbnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbW1hbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggM2EzIDMgMCAwIDAtMyAzdjEyYTMgMyAwIDAgMCAzIDMgMyAzIDAgMCAwIDMtMyAzIDMgMCAwIDAtMy0zSDZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAgMyAzIDMgMyAwIDAgMCAzLTNWNmEzIDMgMCAwIDAtMy0zIDMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwIDMgM2gxMmEzIDMgMCAwIDAgMy0zIDMgMyAwIDAgMC0zLTN6XCJcbiAgfSkpO1xufSk7XG5Db21tYW5kLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvbW1hbmQuZGlzcGxheU5hbWUgPSAnQ29tbWFuZCc7XG5leHBvcnQgZGVmYXVsdCBDb21tYW5kOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb21wYXNzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTYuMjQgNy43NiAxNC4xMiAxNC4xMiA3Ljc2IDE2LjI0IDkuODggOS44OCAxNi4yNCA3Ljc2XCJcbiAgfSkpO1xufSk7XG5Db21wYXNzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvbXBhc3MuZGlzcGxheU5hbWUgPSAnQ29tcGFzcyc7XG5leHBvcnQgZGVmYXVsdCBDb21wYXNzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3B5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOVwiLFxuICAgIHk6IFwiOVwiLFxuICAgIHdpZHRoOiBcIjEzXCIsXG4gICAgaGVpZ2h0OiBcIjEzXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE1SDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOWEyIDIgMCAwIDEgMiAydjFcIlxuICB9KSk7XG59KTtcbkNvcHkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29weS5kaXNwbGF5TmFtZSA9ICdDb3B5JztcbmV4cG9ydCBkZWZhdWx0IENvcHk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lckRvd25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxMCA0IDE1IDkgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCA0djdhNCA0IDAgMCAxLTQgNEg0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJEb3duTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJEb3duTGVmdC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJEb3duTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJEb3duTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyRG93blJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTAgMjAgMTUgMTUgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2N2E0IDQgMCAwIDAgNCA0aDEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJEb3duUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyRG93blJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lckRvd25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJEb3duUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lckxlZnREb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMTUgOSAyMCA0IDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgNGgtN2E0IDQgMCAwIDAtNCA0djEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJMZWZ0RG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJMZWZ0RG93bi5kaXNwbGF5TmFtZSA9ICdDb3JuZXJMZWZ0RG93bic7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJMZWZ0RG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyTGVmdFVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgOSA5IDQgNCA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMjBoLTdhNCA0IDAgMCAxLTQtNFY0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJMZWZ0VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyTGVmdFVwLmRpc3BsYXlOYW1lID0gJ0Nvcm5lckxlZnRVcCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJMZWZ0VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclJpZ2h0RG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDE1IDE1IDIwIDIwIDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDdhNCA0IDAgMCAxIDQgNHYxMlwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyUmlnaHREb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclJpZ2h0RG93bi5kaXNwbGF5TmFtZSA9ICdDb3JuZXJSaWdodERvd24nO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyUmlnaHREb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJSaWdodFVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgOSAxNSA0IDIwIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDIwaDdhNCA0IDAgMCAwIDQtNFY0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJSaWdodFVwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclJpZ2h0VXAuZGlzcGxheU5hbWUgPSAnQ29ybmVyUmlnaHRVcCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJSaWdodFVwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJVcExlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDE0IDQgOSA5IDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDRcIlxuICB9KSk7XG59KTtcbkNvcm5lclVwTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJVcExlZnQuZGlzcGxheU5hbWUgPSAnQ29ybmVyVXBMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lclVwTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyVXBSaWdodCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE1IDE0IDIwIDkgMTUgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMjB2LTdhNCA0IDAgMCAxIDQtNGgxMlwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyVXBSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJVcFJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lclVwUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyVXBSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3B1ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNFwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjlcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI2XCIsXG4gICAgaGVpZ2h0OiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiNFwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkNwdS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DcHUuZGlzcGxheU5hbWUgPSAnQ3B1JztcbmV4cG9ydCBkZWZhdWx0IENwdTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3JlZGl0Q2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjRcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNlwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ3JlZGl0Q2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DcmVkaXRDYXJkLmRpc3BsYXlOYW1lID0gJ0NyZWRpdENhcmQnO1xuZXhwb3J0IGRlZmF1bHQgQ3JlZGl0Q2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3JvcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjEzIDFMNiAxNmEyIDIgMCAwIDAgMiAyaDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA2LjEzTDE2IDZhMiAyIDAgMCAxIDIgMnYxNVwiXG4gIH0pKTtcbn0pO1xuQ3JvcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Dcm9wLmRpc3BsYXlOYW1lID0gJ0Nyb3AnO1xuZXhwb3J0IGRlZmF1bHQgQ3JvcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3Jvc3NoYWlyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5Dcm9zc2hhaXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ3Jvc3NoYWlyLmRpc3BsYXlOYW1lID0gJ0Nyb3NzaGFpcic7XG5leHBvcnQgZGVmYXVsdCBDcm9zc2hhaXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERhdGFiYXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNVwiLFxuICAgIHJ4OiBcIjlcIixcbiAgICByeTogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1XCJcbiAgfSkpO1xufSk7XG5EYXRhYmFzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EYXRhYmFzZS5kaXNwbGF5TmFtZSA9ICdEYXRhYmFzZSc7XG5leHBvcnQgZGVmYXVsdCBEYXRhYmFzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGVsZXRlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDRIOGwtNyA4IDcgOGgxM2EyIDIgMCAwIDAgMi0yVjZhMiAyIDAgMCAwLTItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRGVsZXRlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRlbGV0ZS5kaXNwbGF5TmFtZSA9ICdEZWxldGUnO1xuZXhwb3J0IGRlZmF1bHQgRGVsZXRlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEaXNjID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcbkRpc2MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGlzYy5kaXNwbGF5TmFtZSA9ICdEaXNjJztcbmV4cG9ydCBkZWZhdWx0IERpc2M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5EaXZpZGVDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGl2aWRlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0RpdmlkZUNpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBEaXZpZGVDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZVNxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5EaXZpZGVTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGl2aWRlU3F1YXJlLmRpc3BsYXlOYW1lID0gJ0RpdmlkZVNxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBEaXZpZGVTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjJcIlxuICB9KSk7XG59KTtcbkRpdmlkZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGUuZGlzcGxheU5hbWUgPSAnRGl2aWRlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRG9sbGFyU2lnbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgNUg5LjVhMy41IDMuNSAwIDAgMCAwIDdoNWEzLjUgMy41IDAgMCAxIDAgN0g2XCJcbiAgfSkpO1xufSk7XG5Eb2xsYXJTaWduLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRvbGxhclNpZ24uZGlzcGxheU5hbWUgPSAnRG9sbGFyU2lnbic7XG5leHBvcnQgZGVmYXVsdCBEb2xsYXJTaWduOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEb3dubG9hZENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCAxNyAxMiAyMSAxNiAxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODggMTguMDlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuMjlcIlxuICB9KSk7XG59KTtcbkRvd25sb2FkQ2xvdWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRG93bmxvYWRDbG91ZC5kaXNwbGF5TmFtZSA9ICdEb3dubG9hZENsb3VkJztcbmV4cG9ydCBkZWZhdWx0IERvd25sb2FkQ2xvdWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERvd25sb2FkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTAgMTIgMTUgMTcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSkpO1xufSk7XG5Eb3dubG9hZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Eb3dubG9hZC5kaXNwbGF5TmFtZSA9ICdEb3dubG9hZCc7XG5leHBvcnQgZGVmYXVsdCBEb3dubG9hZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRHJpYmJibGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTYgMi43NWM0LjM3IDYuMDMgNi4wMiA5LjQyIDguMDMgMTcuNzJtMi41NC0xNS4zOGMtMy43MiA0LjM1LTguOTQgNS42Ni0xNi44OCA1Ljg1bTE5LjUgMS45Yy0zLjUtLjkzLTYuNjMtLjgyLTguOTQgMC0yLjU4LjkyLTUuMDEgMi44Ni03LjQ0IDYuMzJcIlxuICB9KSk7XG59KTtcbkRyaWJiYmxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRyaWJiYmxlLmRpc3BsYXlOYW1lID0gJ0RyaWJiYmxlJztcbmV4cG9ydCBkZWZhdWx0IERyaWJiYmxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEcm9wbGV0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDIuNjlsNS42NiA1LjY2YTggOCAwIDEgMS0xMS4zMSAwelwiXG4gIH0pKTtcbn0pO1xuRHJvcGxldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ecm9wbGV0LmRpc3BsYXlOYW1lID0gJ0Ryb3BsZXQnO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGxldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdDIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgM2EyLjgyOCAyLjgyOCAwIDEgMSA0IDRMNy41IDIwLjUgMiAyMmwxLjUtNS41TDE3IDN6XCJcbiAgfSkpO1xufSk7XG5FZGl0Mi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FZGl0Mi5kaXNwbGF5TmFtZSA9ICdFZGl0Mic7XG5leHBvcnQgZGVmYXVsdCBFZGl0MjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdDMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjBoOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjUgMy41YTIuMTIxIDIuMTIxIDAgMCAxIDMgM0w3IDE5bC00IDEgMS00TDE2LjUgMy41elwiXG4gIH0pKTtcbn0pO1xuRWRpdDMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRWRpdDMuZGlzcGxheU5hbWUgPSAnRWRpdDMnO1xuZXhwb3J0IGRlZmF1bHQgRWRpdDM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEVkaXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgNEg0YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguNSAyLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDEyIDE1bC00IDEgMS00IDkuNS05LjV6XCJcbiAgfSkpO1xufSk7XG5FZGl0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkVkaXQuZGlzcGxheU5hbWUgPSAnRWRpdCc7XG5leHBvcnQgZGVmYXVsdCBFZGl0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFeHRlcm5hbExpbmsgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIzXCJcbiAgfSkpO1xufSk7XG5FeHRlcm5hbExpbmsucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXh0ZXJuYWxMaW5rLmRpc3BsYXlOYW1lID0gJ0V4dGVybmFsTGluayc7XG5leHBvcnQgZGVmYXVsdCBFeHRlcm5hbExpbms7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV5ZU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NCAxNy45NEExMC4wNyAxMC4wNyAwIDAgMSAxMiAyMGMtNyAwLTExLTgtMTEtOGExOC40NSAxOC40NSAwIDAgMSA1LjA2LTUuOTRNOS45IDQuMjRBOS4xMiA5LjEyIDAgMCAxIDEyIDRjNyAwIDExIDggMTEgOGExOC41IDE4LjUgMCAwIDEtMi4xNiAzLjE5bS02LjcyLTEuMDdhMyAzIDAgMSAxLTQuMjQtNC4yNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuRXllT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkV5ZU9mZi5kaXNwbGF5TmFtZSA9ICdFeWVPZmYnO1xuZXhwb3J0IGRlZmF1bHQgRXllT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFeWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxMnM0LTggMTEtOCAxMSA4IDExIDgtNCA4LTExIDgtMTEtOC0xMS04elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuRXllLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkV5ZS5kaXNwbGF5TmFtZSA9ICdFeWUnO1xuZXhwb3J0IGRlZmF1bHQgRXllOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGYWNlYm9vayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAyaC0zYTUgNSAwIDAgMC01IDV2M0g3djRoM3Y4aDR2LThoM2wxLTRoLTRWN2ExIDEgMCAwIDEgMS0xaDN6XCJcbiAgfSkpO1xufSk7XG5GYWNlYm9vay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GYWNlYm9vay5kaXNwbGF5TmFtZSA9ICdGYWNlYm9vayc7XG5leHBvcnQgZGVmYXVsdCBGYWNlYm9vazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmFzdEZvcndhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEzIDE5IDIyIDEyIDEzIDUgMTMgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMiAxOSAxMSAxMiAyIDUgMiAxOVwiXG4gIH0pKTtcbn0pO1xuRmFzdEZvcndhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmFzdEZvcndhcmQuZGlzcGxheU5hbWUgPSAnRmFzdEZvcndhcmQnO1xuZXhwb3J0IGRlZmF1bHQgRmFzdEZvcndhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZlYXRoZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMjQgMTIuMjRhNiA2IDAgMCAwLTguNDktOC40OUw1IDEwLjVWMTloOC41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3LjVcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRmVhdGhlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GZWF0aGVyLmRpc3BsYXlOYW1lID0gJ0ZlYXRoZXInO1xuZXhwb3J0IGRlZmF1bHQgRmVhdGhlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlnbWEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1LjVBMy41IDMuNSAwIDAgMSA4LjUgMkgxMnY3SDguNUEzLjUgMy41IDAgMCAxIDUgNS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTIuNWEzLjUgMy41IDAgMSAxIDcgMCAzLjUgMy41IDAgMSAxLTcgMHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE5LjVBMy41IDMuNSAwIDAgMSA4LjUgMTZIMTJ2My41YTMuNSAzLjUgMCAxIDEtNyAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41elwiXG4gIH0pKTtcbn0pO1xuRmlnbWEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlnbWEuZGlzcGxheU5hbWUgPSAnRmlnbWEnO1xuZXhwb3J0IGRlZmF1bHQgRmlnbWE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGVNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRmlsZU1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVNaW51cy5kaXNwbGF5TmFtZSA9ICdGaWxlTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZU1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlUGx1cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GaWxlUGx1cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxlUGx1cy5kaXNwbGF5TmFtZSA9ICdGaWxlUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBGaWxlUGx1czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsZVRleHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCAyIDE0IDggMjAgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMCA5IDkgOSA4IDlcIlxuICB9KSk7XG59KTtcbkZpbGVUZXh0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVUZXh0LmRpc3BsYXlOYW1lID0gJ0ZpbGVUZXh0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGVUZXh0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY5elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMiAxMyA5IDIwIDlcIlxuICB9KSk7XG59KTtcbkZpbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZS5kaXNwbGF5TmFtZSA9ICdGaWxlJztcbmV4cG9ydCBkZWZhdWx0IEZpbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbG0gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCIyLjE4XCIsXG4gICAgcnk6IFwiMi4xOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjdcIlxuICB9KSk7XG59KTtcbkZpbG0ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsbS5kaXNwbGF5TmFtZSA9ICdGaWxtJztcbmV4cG9ydCBkZWZhdWx0IEZpbG07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbHRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMyAyIDMgMTAgMTIuNDYgMTAgMTkgMTQgMjEgMTQgMTIuNDYgMjIgM1wiXG4gIH0pKTtcbn0pO1xuRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbHRlci5kaXNwbGF5TmFtZSA9ICdGaWx0ZXInO1xuZXhwb3J0IGRlZmF1bHQgRmlsdGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGbGFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTVzMS0xIDQtMSA1IDIgOCAyIDQtMSA0LTFWM3MtMSAxLTQgMS01LTItOC0yLTQgMS00IDF6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiNFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GbGFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZsYWcuZGlzcGxheU5hbWUgPSAnRmxhZyc7XG5leHBvcnQgZGVmYXVsdCBGbGFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXJNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkZvbGRlck1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlck1pbnVzLmRpc3BsYXlOYW1lID0gJ0ZvbGRlck1pbnVzJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlck1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXJQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5Gb2xkZXJQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlclBsdXMuZGlzcGxheU5hbWUgPSAnRm9sZGVyUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBGb2xkZXJQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbkZvbGRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Gb2xkZXIuZGlzcGxheU5hbWUgPSAnRm9sZGVyJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRnJhbWVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTZWOWgxNFYySDVsMTQgMTRoLTdtLTcgMGw3IDd2LTdtLTcgMGg3XCJcbiAgfSkpO1xufSk7XG5GcmFtZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRnJhbWVyLmRpc3BsYXlOYW1lID0gJ0ZyYW1lcic7XG5leHBvcnQgZGVmYXVsdCBGcmFtZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZyb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5Gcm93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Gcm93bi5kaXNwbGF5TmFtZSA9ICdGcm93bic7XG5leHBvcnQgZGVmYXVsdCBGcm93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2lmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDEyIDIwIDIyIDQgMjIgNCAxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgN0g3LjVhMi41IDIuNSAwIDAgMSAwLTVDMTEgMiAxMiA3IDEyIDd6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgN2g0LjVhMi41IDIuNSAwIDAgMCAwLTVDMTMgMiAxMiA3IDEyIDd6XCJcbiAgfSkpO1xufSk7XG5HaWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpZnQuZGlzcGxheU5hbWUgPSAnR2lmdCc7XG5leHBvcnQgZGVmYXVsdCBHaWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRCcmFuY2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOWE5IDkgMCAwIDEtOSA5XCJcbiAgfSkpO1xufSk7XG5HaXRCcmFuY2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0QnJhbmNoLmRpc3BsYXlOYW1lID0gJ0dpdEJyYW5jaCc7XG5leHBvcnQgZGVmYXVsdCBHaXRCcmFuY2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdENvbW1pdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxLjA1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNy4wMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjIuOTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuR2l0Q29tbWl0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdENvbW1pdC5kaXNwbGF5TmFtZSA9ICdHaXRDb21taXQnO1xuZXhwb3J0IGRlZmF1bHQgR2l0Q29tbWl0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRNZXJnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyMVY5YTkgOSAwIDAgMCA5IDlcIlxuICB9KSk7XG59KTtcbkdpdE1lcmdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdE1lcmdlLmRpc3BsYXlOYW1lID0gJ0dpdE1lcmdlJztcbmV4cG9ydCBkZWZhdWx0IEdpdE1lcmdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRQdWxsUmVxdWVzdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2N1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5HaXRQdWxsUmVxdWVzdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRQdWxsUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdHaXRQdWxsUmVxdWVzdCc7XG5leHBvcnQgZGVmYXVsdCBHaXRQdWxsUmVxdWVzdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0SHViID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTljLTUgMS41LTUtMi41LTctM20xNCA2di0zLjg3YTMuMzcgMy4zNyAwIDAgMC0uOTQtMi42MWMzLjE0LS4zNSA2LjQ0LTEuNTQgNi40NC03QTUuNDQgNS40NCAwIDAgMCAyMCA0Ljc3IDUuMDcgNS4wNyAwIDAgMCAxOS45MSAxUzE4LjczLjY1IDE2IDIuNDhhMTMuMzggMTMuMzggMCAwIDAtNyAwQzYuMjcuNjUgNS4wOSAxIDUuMDkgMUE1LjA3IDUuMDcgMCAwIDAgNSA0Ljc3YTUuNDQgNS40NCAwIDAgMC0xLjUgMy43OGMwIDUuNDIgMy4zIDYuNjEgNi40NCA3QTMuMzcgMy4zNyAwIDAgMCA5IDE4LjEzVjIyXCJcbiAgfSkpO1xufSk7XG5HaXRIdWIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0SHViLmRpc3BsYXlOYW1lID0gJ0dpdEh1Yic7XG5leHBvcnQgZGVmYXVsdCBHaXRIdWI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdGxhYiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMi42NSAxNC4zOUwxMiAyMi4xMyAxLjM1IDE0LjM5YS44NC44NCAwIDAgMS0uMy0uOTRsMS4yMi0zLjc4IDIuNDQtNy41MUEuNDIuNDIgMCAwIDEgNC44MiAyYS40My40MyAwIDAgMSAuNTggMCAuNDIuNDIgMCAwIDEgLjExLjE4bDIuNDQgNy40OWg4LjFsMi40NC03LjUxQS40Mi40MiAwIDAgMSAxOC42IDJhLjQzLjQzIDAgMCAxIC41OCAwIC40Mi40MiAwIDAgMSAuMTEuMThsMi40NCA3LjUxTDIzIDEzLjQ1YS44NC44NCAwIDAgMS0uMzUuOTR6XCJcbiAgfSkpO1xufSk7XG5HaXRsYWIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0bGFiLmRpc3BsYXlOYW1lID0gJ0dpdGxhYic7XG5leHBvcnQgZGVmYXVsdCBHaXRsYWI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdsb2JlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmExNS4zIDE1LjMgMCAwIDEgNCAxMCAxNS4zIDE1LjMgMCAwIDEtNCAxMCAxNS4zIDE1LjMgMCAwIDEtNC0xMCAxNS4zIDE1LjMgMCAwIDEgNC0xMHpcIlxuICB9KSk7XG59KTtcbkdsb2JlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdsb2JlLmRpc3BsYXlOYW1lID0gJ0dsb2JlJztcbmV4cG9ydCBkZWZhdWx0IEdsb2JlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHcmlkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMTRcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCI3XCIsXG4gICAgaGVpZ2h0OiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTRcIixcbiAgICB3aWR0aDogXCI3XCIsXG4gICAgaGVpZ2h0OiBcIjdcIlxuICB9KSk7XG59KTtcbkdyaWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR3JpZC5kaXNwbGF5TmFtZSA9ICdHcmlkJztcbmV4cG9ydCBkZWZhdWx0IEdyaWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhhcmREcml2ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS40NSA1LjExTDIgMTJ2NmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTZsLTMuNDUtNi44OUEyIDIgMCAwIDAgMTYuNzYgNEg3LjI0YTIgMiAwIDAgMC0xLjc5IDEuMTF6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiNi4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEwLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkhhcmREcml2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IYXJkRHJpdmUuZGlzcGxheU5hbWUgPSAnSGFyZERyaXZlJztcbmV4cG9ydCBkZWZhdWx0IEhhcmREcml2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5IYXNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhhc2guZGlzcGxheU5hbWUgPSAnSGFzaCc7XG5leHBvcnQgZGVmYXVsdCBIYXNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWFkcGhvbmVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTh2LTZhOSA5IDAgMCAxIDE4IDB2NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE5YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDN6TTMgMTlhMiAyIDAgMCAwIDIgMmgxYTIgMiAwIDAgMCAyLTJ2LTNhMiAyIDAgMCAwLTItMkgzelwiXG4gIH0pKTtcbn0pO1xuSGVhZHBob25lcy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWFkcGhvbmVzLmRpc3BsYXlOYW1lID0gJ0hlYWRwaG9uZXMnO1xuZXhwb3J0IGRlZmF1bHQgSGVhZHBob25lczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGVhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODQgNC42MWE1LjUgNS41IDAgMCAwLTcuNzggMEwxMiA1LjY3bC0xLjA2LTEuMDZhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsMS4wNiAxLjA2TDEyIDIxLjIzbDcuNzgtNy43OCAxLjA2LTEuMDZhNS41IDUuNSAwIDAgMCAwLTcuNzh6XCJcbiAgfSkpO1xufSk7XG5IZWFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWFydC5kaXNwbGF5TmFtZSA9ICdIZWFydCc7XG5leHBvcnQgZGVmYXVsdCBIZWFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGVscENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuSGVscENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWxwQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0hlbHBDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgSGVscENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGV4YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIlxuICB9KSk7XG59KTtcbkhleGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSGV4YWdvbi5kaXNwbGF5TmFtZSA9ICdIZXhhZ29uJztcbmV4cG9ydCBkZWZhdWx0IEhleGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhvbWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA5bDktNyA5IDd2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDIyIDkgMTIgMTUgMTIgMTUgMjJcIlxuICB9KSk7XG59KTtcbkhvbWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSG9tZS5kaXNwbGF5TmFtZSA9ICdIb21lJztcbmV4cG9ydCBkZWZhdWx0IEhvbWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEltYWdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjguNVwiLFxuICAgIHI6IFwiMS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMSAxNSAxNiAxMCA1IDIxXCJcbiAgfSkpO1xufSk7XG5JbWFnZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbWFnZS5kaXNwbGF5TmFtZSA9ICdJbWFnZSc7XG5leHBvcnQgZGVmYXVsdCBJbWFnZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW5ib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIlxuICB9KSk7XG59KTtcbkluYm94LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkluYm94LmRpc3BsYXlOYW1lID0gJ0luYm94JztcbmV4cG9ydCBkZWZhdWx0IEluYm94OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbmZvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pKTtcbn0pO1xuSW5mby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbmZvLmRpc3BsYXlOYW1lID0gJ0luZm8nO1xuZXhwb3J0IGRlZmF1bHQgSW5mbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW5zdGFncmFtID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiNVwiLFxuICAgIHJ5OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMS4zN0E0IDQgMCAxIDEgMTIuNjMgOCA0IDQgMCAwIDEgMTYgMTEuMzd6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTcuNVwiLFxuICAgIHkxOiBcIjYuNVwiLFxuICAgIHgyOiBcIjE3LjUxXCIsXG4gICAgeTI6IFwiNi41XCJcbiAgfSkpO1xufSk7XG5JbnN0YWdyYW0ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSW5zdGFncmFtLmRpc3BsYXlOYW1lID0gJ0luc3RhZ3JhbSc7XG5leHBvcnQgZGVmYXVsdCBJbnN0YWdyYW07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEl0YWxpYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOVwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiNVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5JdGFsaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSXRhbGljLmRpc3BsYXlOYW1lID0gJ0l0YWxpYyc7XG5leHBvcnQgZGVmYXVsdCBJdGFsaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEtleSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAybC0yIDJtLTcuNjEgNy42MWE1LjUgNS41IDAgMSAxLTcuNzc4IDcuNzc4IDUuNSA1LjUgMCAwIDEgNy43NzctNy43Nzd6bTAgMEwxNS41IDcuNW0wIDBsMyAzTDIyIDdsLTMtM20tMy41IDMuNUwxOSA0XCJcbiAgfSkpO1xufSk7XG5LZXkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuS2V5LmRpc3BsYXlOYW1lID0gJ0tleSc7XG5leHBvcnQgZGVmYXVsdCBLZXk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExheWVycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAyIDcgMTIgMTIgMjIgNyAxMiAyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDE3IDEyIDIyIDIyIDE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDEyIDEyIDE3IDIyIDEyXCJcbiAgfSkpO1xufSk7XG5MYXllcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGF5ZXJzLmRpc3BsYXlOYW1lID0gJ0xheWVycyc7XG5leHBvcnQgZGVmYXVsdCBMYXllcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExheW91dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxheW91dC5kaXNwbGF5TmFtZSA9ICdMYXlvdXQnO1xuZXhwb3J0IGRlZmF1bHQgTGF5b3V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaWZlQnVveSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjQuOTNcIixcbiAgICB4MjogXCI5LjE3XCIsXG4gICAgeTI6IFwiOS4xN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0LjgzXCIsXG4gICAgeTE6IFwiMTQuODNcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjE5LjA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCI5LjE3XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCI0LjkzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCI5LjE3XCIsXG4gICAgeDI6IFwiMTguMzZcIixcbiAgICB5MjogXCI1LjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjE5LjA3XCIsXG4gICAgeDI6IFwiOS4xN1wiLFxuICAgIHkyOiBcIjE0LjgzXCJcbiAgfSkpO1xufSk7XG5MaWZlQnVveS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaWZlQnVveS5kaXNwbGF5TmFtZSA9ICdMaWZlQnVveSc7XG5leHBvcnQgZGVmYXVsdCBMaWZlQnVveTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGluazIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgN2gzYTUgNSAwIDAgMSA1IDUgNSA1IDAgMCAxLTUgNWgtM20tNiAwSDZhNSA1IDAgMCAxLTUtNSA1IDUgMCAwIDEgNS01aDNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5MaW5rMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaW5rMi5kaXNwbGF5TmFtZSA9ICdMaW5rMic7XG5leHBvcnQgZGVmYXVsdCBMaW5rMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzFcIlxuICB9KSk7XG59KTtcbkxpbmsucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGluay5kaXNwbGF5TmFtZSA9ICdMaW5rJztcbmV4cG9ydCBkZWZhdWx0IExpbms7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpbmtlZGluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiNFwiLFxuICAgIGhlaWdodDogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNFwiLFxuICAgIGN5OiBcIjRcIixcbiAgICByOiBcIjJcIlxuICB9KSk7XG59KTtcbkxpbmtlZGluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpbmtlZGluLmRpc3BsYXlOYW1lID0gJ0xpbmtlZGluJztcbmV4cG9ydCBkZWZhdWx0IExpbmtlZGluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjMuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5MaXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpc3QuZGlzcGxheU5hbWUgPSAnTGlzdCc7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2FkZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjcuNzZcIixcbiAgICB5MjogXCI3Ljc2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuMjRcIixcbiAgICB5MTogXCIxNi4yNFwiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuOTNcIixcbiAgICB5MTogXCIxOS4wN1wiLFxuICAgIHgyOiBcIjcuNzZcIixcbiAgICB5MjogXCIxNi4yNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjI0XCIsXG4gICAgeTE6IFwiNy43NlwiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiNC45M1wiXG4gIH0pKTtcbn0pO1xuTG9hZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvYWRlci5kaXNwbGF5TmFtZSA9ICdMb2FkZXInO1xuZXhwb3J0IGRlZmF1bHQgTG9hZGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTFcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxMVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjRcIlxuICB9KSk7XG59KTtcbkxvY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9jay5kaXNwbGF5TmFtZSA9ICdMb2NrJztcbmV4cG9ydCBkZWZhdWx0IExvY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvZ0luID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDE3IDE1IDEyIDEwIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Mb2dJbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Mb2dJbi5kaXNwbGF5TmFtZSA9ICdMb2dJbic7XG5leHBvcnQgZGVmYXVsdCBMb2dJbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTG9nT3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAxNyAyMSAxMiAxNiA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuTG9nT3V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvZ091dC5kaXNwbGF5TmFtZSA9ICdMb2dPdXQnO1xuZXhwb3J0IGRlZmF1bHQgTG9nT3V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYWlsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiw2IDEyLDEzIDIsNlwiXG4gIH0pKTtcbn0pO1xuTWFpbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYWlsLmRpc3BsYXlOYW1lID0gJ01haWwnO1xuZXhwb3J0IGRlZmF1bHQgTWFpbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWFwUGluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuTWFwUGluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1hcFBpbi5kaXNwbGF5TmFtZSA9ICdNYXBQaW4nO1xuZXhwb3J0IGRlZmF1bHQgTWFwUGluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNiAxIDIyIDggMTggMTYgMjIgMjMgMTggMjMgMiAxNiA2IDggMiAxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSk7XG59KTtcbk1hcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYXAuZGlzcGxheU5hbWUgPSAnTWFwJztcbmV4cG9ydCBkZWZhdWx0IE1hcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWF4aW1pemUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMjEgMyAyMSAzIDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbk1heGltaXplMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYXhpbWl6ZTIuZGlzcGxheU5hbWUgPSAnTWF4aW1pemUyJztcbmV4cG9ydCBkZWZhdWx0IE1heGltaXplMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWF4aW1pemUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzbTE4IDBWNWEyIDIgMCAwIDAtMi0yaC0zbTAgMThoM2EyIDIgMCAwIDAgMi0ydi0zTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDNcIlxuICB9KSk7XG59KTtcbk1heGltaXplLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1heGltaXplLmRpc3BsYXlOYW1lID0gJ01heGltaXplJztcbmV4cG9ydCBkZWZhdWx0IE1heGltaXplOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNZWggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5NZWgucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVoLmRpc3BsYXlOYW1lID0gJ01laCc7XG5leHBvcnQgZGVmYXVsdCBNZWg7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1lbnUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuTWVudS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZW51LmRpc3BsYXlOYW1lID0gJ01lbnUnO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVzc2FnZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMS41YTguMzggOC4zOCAwIDAgMS0uOSAzLjggOC41IDguNSAwIDAgMS03LjYgNC43IDguMzggOC4zOCAwIDAgMS0zLjgtLjlMMyAyMWwxLjktNS43YTguMzggOC4zOCAwIDAgMS0uOS0zLjggOC41IDguNSAwIDAgMSA0LjctNy42IDguMzggOC4zOCAwIDAgMSAzLjgtLjloLjVhOC40OCA4LjQ4IDAgMCAxIDggOHYuNXpcIlxuICB9KSk7XG59KTtcbk1lc3NhZ2VDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVzc2FnZUNpcmNsZS5kaXNwbGF5TmFtZSA9ICdNZXNzYWdlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1lc3NhZ2VTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTVhMiAyIDAgMCAxLTIgMkg3bC00IDRWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSkpO1xufSk7XG5NZXNzYWdlU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1lc3NhZ2VTcXVhcmUuZGlzcGxheU5hbWUgPSAnTWVzc2FnZVNxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaWNPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMk0xNSA5LjM0VjRhMyAzIDAgMCAwLTUuOTQtLjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMm0xNCAwdjJhNyA3IDAgMCAxLS4xMSAxLjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjNcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5NaWNPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWljT2ZmLmRpc3BsYXlOYW1lID0gJ01pY09mZic7XG5leHBvcnQgZGVmYXVsdCBNaWNPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxYTMgMyAwIDAgMC0zIDN2OGEzIDMgMCAwIDAgNiAwVjRhMyAzIDAgMCAwLTMtM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAxMHYyYTcgNyAwIDAgMS0xNCAwdi0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjNcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5NaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWljLmRpc3BsYXlOYW1lID0gJ01pYyc7XG5leHBvcnQgZGVmYXVsdCBNaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbmltaXplMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgMTQgMTAgMTQgMTAgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDEwIDE0IDEwIDE0IDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuTWluaW1pemUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbmltaXplMi5kaXNwbGF5TmFtZSA9ICdNaW5pbWl6ZTInO1xuZXhwb3J0IGRlZmF1bHQgTWluaW1pemUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW5pbWl6ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDN2M2EyIDIgMCAwIDEtMiAySDNtMTggMGgtM2EyIDIgMCAwIDEtMi0yVjNtMCAxOHYtM2EyIDIgMCAwIDEgMi0yaDNNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2M1wiXG4gIH0pKTtcbn0pO1xuTWluaW1pemUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWluaW1pemUuZGlzcGxheU5hbWUgPSAnTWluaW1pemUnO1xuZXhwb3J0IGRlZmF1bHQgTWluaW1pemU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbnVzQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5NaW51c0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW51c0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdNaW51c0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBNaW51c0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWludXNTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzU3F1YXJlLmRpc3BsYXlOYW1lID0gJ01pbnVzU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5NaW51cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW51cy5kaXNwbGF5TmFtZSA9ICdNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBNaW51czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9uaXRvciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5Nb25pdG9yLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vbml0b3IuZGlzcGxheU5hbWUgPSAnTW9uaXRvcic7XG5leHBvcnQgZGVmYXVsdCBNb25pdG9yOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDEyLjc5QTkgOSAwIDEgMSAxMS4yMSAzIDcgNyAwIDAgMCAyMSAxMi43OXpcIlxuICB9KSk7XG59KTtcbk1vb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9vbi5kaXNwbGF5TmFtZSA9ICdNb29uJztcbmV4cG9ydCBkZWZhdWx0IE1vb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vcmVIb3Jpem9udGFsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTlcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNVwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Nb3JlSG9yaXpvbnRhbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3JlSG9yaXpvbnRhbC5kaXNwbGF5TmFtZSA9ICdNb3JlSG9yaXpvbnRhbCc7XG5leHBvcnQgZGVmYXVsdCBNb3JlSG9yaXpvbnRhbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9yZVZlcnRpY2FsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjE5XCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Nb3JlVmVydGljYWwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9yZVZlcnRpY2FsLmRpc3BsYXlOYW1lID0gJ01vcmVWZXJ0aWNhbCc7XG5leHBvcnQgZGVmYXVsdCBNb3JlVmVydGljYWw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vdXNlUG9pbnRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNsNy4wNyAxNi45NyAyLjUxLTcuMzkgNy4zOS0yLjUxTDMgM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxM2w2IDZcIlxuICB9KSk7XG59KTtcbk1vdXNlUG9pbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3VzZVBvaW50ZXIuZGlzcGxheU5hbWUgPSAnTW91c2VQb2ludGVyJztcbmV4cG9ydCBkZWZhdWx0IE1vdXNlUG9pbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW92ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjUgOSAyIDEyIDUgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgNSAxMiAyIDE1IDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE1IDE5IDEyIDIyIDkgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDkgMjIgMTIgMTkgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pKTtcbn0pO1xuTW92ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3ZlLmRpc3BsYXlOYW1lID0gJ01vdmUnO1xuZXhwb3J0IGRlZmF1bHQgTW92ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTXVzaWMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxOFY1bDEyLTJ2MTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuTXVzaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTXVzaWMuZGlzcGxheU5hbWUgPSAnTXVzaWMnO1xuZXhwb3J0IGRlZmF1bHQgTXVzaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE5hdmlnYXRpb24yID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDE5IDIxIDEyIDE3IDUgMjEgMTIgMlwiXG4gIH0pKTtcbn0pO1xuTmF2aWdhdGlvbjIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTmF2aWdhdGlvbjIuZGlzcGxheU5hbWUgPSAnTmF2aWdhdGlvbjInO1xuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbjI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE5hdmlnYXRpb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjMgMTEgMjIgMiAxMyAyMSAxMSAxMyAzIDExXCJcbiAgfSkpO1xufSk7XG5OYXZpZ2F0aW9uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk5hdmlnYXRpb24uZGlzcGxheU5hbWUgPSAnTmF2aWdhdGlvbic7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBPY3RhZ29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCI3Ljg2IDIgMTYuMTQgMiAyMiA3Ljg2IDIyIDE2LjE0IDE2LjE0IDIyIDcuODYgMjIgMiAxNi4xNCAyIDcuODYgNy44NiAyXCJcbiAgfSkpO1xufSk7XG5PY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk9jdGFnb24uZGlzcGxheU5hbWUgPSAnT2N0YWdvbic7XG5leHBvcnQgZGVmYXVsdCBPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYWNrYWdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjVcIixcbiAgICB5MTogXCI5LjRcIixcbiAgICB4MjogXCI3LjVcIixcbiAgICB5MjogXCI0LjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QYWNrYWdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhY2thZ2UuZGlzcGxheU5hbWUgPSAnUGFja2FnZSc7XG5leHBvcnQgZGVmYXVsdCBQYWNrYWdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXBlcmNsaXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNDQgMTEuMDVsLTkuMTkgOS4xOWE2IDYgMCAwIDEtOC40OS04LjQ5bDkuMTktOS4xOWE0IDQgMCAwIDEgNS42NiA1LjY2bC05LjIgOS4xOWEyIDIgMCAwIDEtMi44My0yLjgzbDguNDktOC40OFwiXG4gIH0pKTtcbn0pO1xuUGFwZXJjbGlwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhcGVyY2xpcC5kaXNwbGF5TmFtZSA9ICdQYXBlcmNsaXAnO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXJjbGlwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXVzZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcblBhdXNlQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhdXNlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BhdXNlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBhdXNlQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXVzZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjZcIixcbiAgICB5OiBcIjRcIixcbiAgICB3aWR0aDogXCI0XCIsXG4gICAgaGVpZ2h0OiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjRcIixcbiAgICBoZWlnaHQ6IFwiMTZcIlxuICB9KSk7XG59KTtcblBhdXNlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhdXNlLmRpc3BsYXlOYW1lID0gJ1BhdXNlJztcbmV4cG9ydCBkZWZhdWx0IFBhdXNlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQZW5Ub29sID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDE5bDctNyAzIDMtNyA3LTMtM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAxM2wtMS41LTcuNUwyIDJsMy41IDE0LjVMMTMgMThsNS01elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMmw3LjU4NiA3LjU4NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuUGVuVG9vbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QZW5Ub29sLmRpc3BsYXlOYW1lID0gJ1BlblRvb2wnO1xuZXhwb3J0IGRlZmF1bHQgUGVuVG9vbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGVyY2VudCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOVwiLFxuICAgIHkxOiBcIjVcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjYuNVwiLFxuICAgIGN5OiBcIjYuNVwiLFxuICAgIHI6IFwiMi41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxNy41XCIsXG4gICAgY3k6IFwiMTcuNVwiLFxuICAgIHI6IFwiMi41XCJcbiAgfSkpO1xufSk7XG5QZXJjZW50LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBlcmNlbnQuZGlzcGxheU5hbWUgPSAnUGVyY2VudCc7XG5leHBvcnQgZGVmYXVsdCBQZXJjZW50OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUNhbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMDUgNUE1IDUgMCAwIDEgMTkgOC45NU0xNS4wNSAxQTkgOSAwIDAgMSAyMyA4Ljk0bS0xIDcuOTh2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lQ2FsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUNhbGwuZGlzcGxheU5hbWUgPSAnUGhvbmVDYWxsJztcbmV4cG9ydCBkZWZhdWx0IFBob25lQ2FsbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVGb3J3YXJkZWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOSAxIDIzIDUgMTkgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZUZvcndhcmRlZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUZvcndhcmRlZC5kaXNwbGF5TmFtZSA9ICdQaG9uZUZvcndhcmRlZCc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZUZvcndhcmRlZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVJbmNvbWluZyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDIgMTYgOCAyMiA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lSW5jb21pbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmVJbmNvbWluZy5kaXNwbGF5TmFtZSA9ICdQaG9uZUluY29taW5nJztcbmV4cG9ydCBkZWZhdWx0IFBob25lSW5jb21pbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lTWlzc2VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZU1pc3NlZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZU1pc3NlZC5kaXNwbGF5TmFtZSA9ICdQaG9uZU1pc3NlZCc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZU1pc3NlZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNjggMTMuMzFhMTYgMTYgMCAwIDAgMy40MSAyLjZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjcgMiAyIDAgMCAxIDEuNzIgMnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjQyIDE5LjQyIDAgMCAxLTMuMzMtMi42N20tMi42Ny0zLjM0YTE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42M0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcblBob25lT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lT2ZmLmRpc3BsYXlOYW1lID0gJ1Bob25lT2ZmJztcbmV4cG9ydCBkZWZhdWx0IFBob25lT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZU91dGdvaW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjMgNyAyMyAxIDE3IDFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVPdXRnb2luZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZU91dGdvaW5nLmRpc3BsYXlOYW1lID0gJ1Bob25lT3V0Z29pbmcnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVPdXRnb2luZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lLmRpc3BsYXlOYW1lID0gJ1Bob25lJztcbmV4cG9ydCBkZWZhdWx0IFBob25lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaWVDaGFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxMkExMCAxMCAwIDAgMCAxMiAydjEwelwiXG4gIH0pKTtcbn0pO1xuUGllQ2hhcnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGllQ2hhcnQuZGlzcGxheU5hbWUgPSAnUGllQ2hhcnQnO1xuZXhwb3J0IGRlZmF1bHQgUGllQ2hhcnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsYXlDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMCA4IDE2IDEyIDEwIDE2IDEwIDhcIlxuICB9KSk7XG59KTtcblBsYXlDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGxheUNpcmNsZS5kaXNwbGF5TmFtZSA9ICdQbGF5Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBsYXlDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsYXkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjUgMyAxOSAxMiA1IDIxIDUgM1wiXG4gIH0pKTtcbn0pO1xuUGxheS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbGF5LmRpc3BsYXlOYW1lID0gJ1BsYXknO1xuZXhwb3J0IGRlZmF1bHQgUGxheTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGx1c0NpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXNDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1c0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdQbHVzQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBsdXNDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsdXNTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QbHVzU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsdXNTcXVhcmUuZGlzcGxheU5hbWUgPSAnUGx1c1NxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBQbHVzU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsdXMuZGlzcGxheU5hbWUgPSAnUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQb2NrZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzaDE2YTIgMiAwIDAgMSAyIDJ2NmExMCAxMCAwIDAgMS0xMCAxMEExMCAxMCAwIDAgMSAyIDExVjVhMiAyIDAgMCAxIDItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggMTAgMTIgMTQgMTYgMTBcIlxuICB9KSk7XG59KTtcblBvY2tldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Qb2NrZXQuZGlzcGxheU5hbWUgPSAnUG9ja2V0JztcbmV4cG9ydCBkZWZhdWx0IFBvY2tldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUG93ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMzYgNi42NGE5IDkgMCAxIDEtMTIuNzMgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBvd2VyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBvd2VyLmRpc3BsYXlOYW1lID0gJ1Bvd2VyJztcbmV4cG9ydCBkZWZhdWx0IFBvd2VyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQcmludGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNiA5IDYgMiAxOCAyIDE4IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI2XCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjEyXCIsXG4gICAgaGVpZ2h0OiBcIjhcIlxuICB9KSk7XG59KTtcblByaW50ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUHJpbnRlci5kaXNwbGF5TmFtZSA9ICdQcmludGVyJztcbmV4cG9ydCBkZWZhdWx0IFByaW50ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJhZGlvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjI0IDcuNzZhNiA2IDAgMCAxIDAgOC40OW0tOC40OC0uMDFhNiA2IDAgMCAxIDAtOC40OW0xMS4zMS0yLjgyYTEwIDEwIDAgMCAxIDAgMTQuMTRtLTE0LjE0IDBhMTAgMTAgMCAwIDEgMC0xNC4xNFwiXG4gIH0pKTtcbn0pO1xuUmFkaW8ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmFkaW8uZGlzcGxheU5hbWUgPSAnUmFkaW8nO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJlZnJlc2hDY3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDQgMSAxMCA3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyAyMCAyMyAxNCAxNyAxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjQ5IDlBOSA5IDAgMCAwIDUuNjQgNS42NEwxIDEwbTIyIDRsLTQuNjQgNC4zNkE5IDkgMCAwIDEgMy41MSAxNVwiXG4gIH0pKTtcbn0pO1xuUmVmcmVzaENjdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZWZyZXNoQ2N3LmRpc3BsYXlOYW1lID0gJ1JlZnJlc2hDY3cnO1xuZXhwb3J0IGRlZmF1bHQgUmVmcmVzaENjdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVmcmVzaEN3ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjMgNCAyMyAxMCAxNyAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMSAyMCAxIDE0IDcgMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUxIDlhOSA5IDAgMCAxIDE0Ljg1LTMuMzZMMjMgMTBNMSAxNGw0LjY0IDQuMzZBOSA5IDAgMCAwIDIwLjQ5IDE1XCJcbiAgfSkpO1xufSk7XG5SZWZyZXNoQ3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmVmcmVzaEN3LmRpc3BsYXlOYW1lID0gJ1JlZnJlc2hDdyc7XG5leHBvcnQgZGVmYXVsdCBSZWZyZXNoQ3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJlcGVhdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDEgMjEgNSAxNyA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMVY5YTQgNCAwIDAgMSA0LTRoMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMjMgMyAxOSA3IDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTN2MmE0IDQgMCAwIDEtNCA0SDNcIlxuICB9KSk7XG59KTtcblJlcGVhdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZXBlYXQuZGlzcGxheU5hbWUgPSAnUmVwZWF0JztcbmV4cG9ydCBkZWZhdWx0IFJlcGVhdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmV3aW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSAxOSAyIDEyIDExIDUgMTEgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMTkgMTMgMTIgMjIgNSAyMiAxOVwiXG4gIH0pKTtcbn0pO1xuUmV3aW5kLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJld2luZC5kaXNwbGF5TmFtZSA9ICdSZXdpbmQnO1xuZXhwb3J0IGRlZmF1bHQgUmV3aW5kOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSb3RhdGVDY3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDQgMSAxMCA3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy41MSAxNWE5IDkgMCAxIDAgMi4xMy05LjM2TDEgMTBcIlxuICB9KSk7XG59KTtcblJvdGF0ZUNjdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Sb3RhdGVDY3cuZGlzcGxheU5hbWUgPSAnUm90YXRlQ2N3JztcbmV4cG9ydCBkZWZhdWx0IFJvdGF0ZUNjdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUm90YXRlQ3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA0IDIzIDEwIDE3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNDkgMTVhOSA5IDAgMSAxLTIuMTItOS4zNkwyMyAxMFwiXG4gIH0pKTtcbn0pO1xuUm90YXRlQ3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUm90YXRlQ3cuZGlzcGxheU5hbWUgPSAnUm90YXRlQ3cnO1xuZXhwb3J0IGRlZmF1bHQgUm90YXRlQ3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJzcyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDExYTkgOSAwIDAgMSA5IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDRhMTYgMTYgMCAwIDEgMTYgMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjVcIixcbiAgICBjeTogXCIxOVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pKTtcbn0pO1xuUnNzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJzcy5kaXNwbGF5TmFtZSA9ICdSc3MnO1xuZXhwb3J0IGRlZmF1bHQgUnNzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTYXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTFsNSA1djExYTIgMiAwIDAgMS0yIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAyMSAxNyAxMyA3IDEzIDcgMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMyA3IDggMTUgOFwiXG4gIH0pKTtcbn0pO1xuU2F2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TYXZlLmRpc3BsYXlOYW1lID0gJ1NhdmUnO1xuZXhwb3J0IGRlZmF1bHQgU2F2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2Npc3NvcnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOC4xMlwiLFxuICAgIHkyOiBcIjE1Ljg4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuNDdcIixcbiAgICB5MTogXCIxNC40OFwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4LjEyXCIsXG4gICAgeTE6IFwiOC4xMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblNjaXNzb3JzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNjaXNzb3JzLmRpc3BsYXlOYW1lID0gJ1NjaXNzb3JzJztcbmV4cG9ydCBkZWZhdWx0IFNjaXNzb3JzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZWFyY2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjE2LjY1XCIsXG4gICAgeTI6IFwiMTYuNjVcIlxuICB9KSk7XG59KTtcblNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZWFyY2guZGlzcGxheU5hbWUgPSAnU2VhcmNoJztcbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2VuZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMVwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDIgMTUgMjIgMTEgMTMgMiA5IDIyIDJcIlxuICB9KSk7XG59KTtcblNlbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2VuZC5kaXNwbGF5TmFtZSA9ICdTZW5kJztcbmV4cG9ydCBkZWZhdWx0IFNlbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNlcnZlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCI4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCI2LjAxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjYuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuU2VydmVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNlcnZlci5kaXNwbGF5TmFtZSA9ICdTZXJ2ZXInO1xuZXhwb3J0IGRlZmF1bHQgU2VydmVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZXR0aW5ncyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6XCJcbiAgfSkpO1xufSk7XG5TZXR0aW5ncy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZXR0aW5ncy5kaXNwbGF5TmFtZSA9ICdTZXR0aW5ncyc7XG5leHBvcnQgZGVmYXVsdCBTZXR0aW5nczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hhcmUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMTlcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4LjU5XCIsXG4gICAgeTE6IFwiMTMuNTFcIixcbiAgICB4MjogXCIxNS40MlwiLFxuICAgIHkyOiBcIjE3LjQ5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTUuNDFcIixcbiAgICB5MTogXCI2LjUxXCIsXG4gICAgeDI6IFwiOC41OVwiLFxuICAgIHkyOiBcIjEwLjQ5XCJcbiAgfSkpO1xufSk7XG5TaGFyZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hhcmUyLmRpc3BsYXlOYW1lID0gJ1NoYXJlMic7XG5leHBvcnQgZGVmYXVsdCBTaGFyZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNoYXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDYgMTIgMiA4IDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5TaGFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGFyZS5kaXNwbGF5TmFtZSA9ICdTaGFyZSc7XG5leHBvcnQgZGVmYXVsdCBTaGFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hpZWxkT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjY5IDE0YTYuOSA2LjkgMCAwIDAgLjMxLTJWNWwtOC0zLTMuMTYgMS4xOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNzMgNC43M0w0IDV2N2MwIDYgOCAxMCA4IDEwYTIwLjI5IDIwLjI5IDAgMCAwIDUuNjItNC4zOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuU2hpZWxkT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNoaWVsZE9mZi5kaXNwbGF5TmFtZSA9ICdTaGllbGRPZmYnO1xuZXhwb3J0IGRlZmF1bHQgU2hpZWxkT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGllbGQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjJzOC00IDgtMTBWNWwtOC0zLTggM3Y3YzAgNiA4IDEwIDggMTB6XCJcbiAgfSkpO1xufSk7XG5TaGllbGQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hpZWxkLmRpc3BsYXlOYW1lID0gJ1NoaWVsZCc7XG5leHBvcnQgZGVmYXVsdCBTaGllbGQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNob3BwaW5nQmFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMkwzIDZ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjZsLTMtNHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDEwYTQgNCAwIDAgMS04IDBcIlxuICB9KSk7XG59KTtcblNob3BwaW5nQmFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNob3BwaW5nQmFnLmRpc3BsYXlOYW1lID0gJ1Nob3BwaW5nQmFnJztcbmV4cG9ydCBkZWZhdWx0IFNob3BwaW5nQmFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaG9wcGluZ0NhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI5XCIsXG4gICAgY3k6IFwiMjFcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjIwXCIsXG4gICAgY3k6IFwiMjFcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDFoNGwyLjY4IDEzLjM5YTIgMiAwIDAgMCAyIDEuNjFoOS43MmEyIDIgMCAwIDAgMi0xLjYxTDIzIDZINlwiXG4gIH0pKTtcbn0pO1xuU2hvcHBpbmdDYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNob3BwaW5nQ2FydC5kaXNwbGF5TmFtZSA9ICdTaG9wcGluZ0NhcnQnO1xuZXhwb3J0IGRlZmF1bHQgU2hvcHBpbmdDYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaHVmZmxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMyAyMSAzIDIxIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDE2IDIxIDIxIDE2IDIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5TaHVmZmxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNodWZmbGUuZGlzcGxheU5hbWUgPSAnU2h1ZmZsZSc7XG5leHBvcnQgZGVmYXVsdCBTaHVmZmxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaWRlYmFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pKTtcbn0pO1xuU2lkZWJhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaWRlYmFyLmRpc3BsYXlOYW1lID0gJ1NpZGViYXInO1xuZXhwb3J0IGRlZmF1bHQgU2lkZWJhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2tpcEJhY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDIwIDkgMTIgMTkgNCAxOSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCI1XCJcbiAgfSkpO1xufSk7XG5Ta2lwQmFjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ta2lwQmFjay5kaXNwbGF5TmFtZSA9ICdTa2lwQmFjayc7XG5leHBvcnQgZGVmYXVsdCBTa2lwQmFjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2tpcEZvcndhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjUgNCAxNSAxMiA1IDIwIDUgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSk7XG59KTtcblNraXBGb3J3YXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNraXBGb3J3YXJkLmRpc3BsYXlOYW1lID0gJ1NraXBGb3J3YXJkJztcbmV4cG9ydCBkZWZhdWx0IFNraXBGb3J3YXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGFjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDEwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjV2LTVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjV2NWMwIC44My0uNjcgMS41LTEuNSAxLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNSAxMEgxOVY4LjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAxNGMuODMgMCAxLjUuNjcgMS41IDEuNXY1YzAgLjgzLS42NyAxLjUtMS41IDEuNVM4IDIxLjMzIDggMjAuNXYtNWMwLS44My42Ny0xLjUgMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUgMTRINXYxLjVjMCAuODMtLjY3IDEuNS0xLjUgMS41UzIgMTYuMzMgMiAxNS41IDIuNjcgMTQgMy41IDE0elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDE0LjVjMC0uODMuNjctMS41IDEuNS0xLjVoNWMuODMgMCAxLjUuNjcgMS41IDEuNXMtLjY3IDEuNS0xLjUgMS41aC01Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNSAxOUgxNHYxLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA5LjVDMTAgOC42NyA5LjMzIDggOC41IDhoLTVDMi42NyA4IDIgOC42NyAyIDkuNVMyLjY3IDExIDMuNSAxMWg1Yy44MyAwIDEuNS0uNjcgMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNUgxMFYzLjVDMTAgMi42NyA5LjMzIDIgOC41IDJTNyAyLjY3IDcgMy41IDcuNjcgNSA4LjUgNXpcIlxuICB9KSk7XG59KTtcblNsYWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsYWNrLmRpc3BsYXlOYW1lID0gJ1NsYWNrJztcbmV4cG9ydCBkZWZhdWx0IFNsYWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjQuOTNcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjE5LjA3XCJcbiAgfSkpO1xufSk7XG5TbGFzaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbGFzaC5kaXNwbGF5TmFtZSA9ICdTbGFzaCc7XG5leHBvcnQgZGVmYXVsdCBTbGFzaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2xpZGVycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuU2xpZGVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbGlkZXJzLmRpc3BsYXlOYW1lID0gJ1NsaWRlcnMnO1xuZXhwb3J0IGRlZmF1bHQgU2xpZGVyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU21hcnRwaG9uZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjVcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNFwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblNtYXJ0cGhvbmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU21hcnRwaG9uZS5kaXNwbGF5TmFtZSA9ICdTbWFydHBob25lJztcbmV4cG9ydCBkZWZhdWx0IFNtYXJ0cGhvbmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNtaWxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5LjAxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1LjAxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuU21pbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU21pbGUuZGlzcGxheU5hbWUgPSAnU21pbGUnO1xuZXhwb3J0IGRlZmF1bHQgU21pbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNwZWFrZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI0XCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMTZcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxNFwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pKTtcbn0pO1xuU3BlYWtlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TcGVha2VyLmRpc3BsYXlOYW1lID0gJ1NwZWFrZXInO1xuZXhwb3J0IGRlZmF1bHQgU3BlYWtlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSk7XG59KTtcblNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TcXVhcmUuZGlzcGxheU5hbWUgPSAnU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3RhciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAxNS4wOSA4LjI2IDIyIDkuMjcgMTcgMTQuMTQgMTguMTggMjEuMDIgMTIgMTcuNzcgNS44MiAyMS4wMiA3IDE0LjE0IDIgOS4yNyA4LjkxIDguMjYgMTIgMlwiXG4gIH0pKTtcbn0pO1xuU3Rhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdGFyLmRpc3BsYXlOYW1lID0gJ1N0YXInO1xuZXhwb3J0IGRlZmF1bHQgU3RhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3RvcENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI5XCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiNlwiLFxuICAgIGhlaWdodDogXCI2XCJcbiAgfSkpO1xufSk7XG5TdG9wQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN0b3BDaXJjbGUuZGlzcGxheU5hbWUgPSAnU3RvcENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBTdG9wQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjIyXCIsXG4gICAgeTE6IFwiNC4yMlwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCI1LjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCIxOC4zNlwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiMTkuNzhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCIxOS43OFwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCIxOC4zNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4LjM2XCIsXG4gICAgeTE6IFwiNS42NFwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiNC4yMlwiXG4gIH0pKTtcbn0pO1xuU3VuLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN1bi5kaXNwbGF5TmFtZSA9ICdTdW4nO1xuZXhwb3J0IGRlZmF1bHQgU3VuOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdW5yaXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4YTUgNSAwIDAgMC0xMCAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjEwLjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjExLjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjExLjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxMC4yMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggNiAxMiAyIDE2IDZcIlxuICB9KSk7XG59KTtcblN1bnJpc2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3VucmlzZS5kaXNwbGF5TmFtZSA9ICdTdW5yaXNlJztcbmV4cG9ydCBkZWZhdWx0IFN1bnJpc2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1bnNldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAxOGE1IDUgMCAwIDAtMTAgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCIxMC4yMlwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCIxMS42NFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCIxMS42NFwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiMTAuMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMVwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiA1IDEyIDkgOCA1XCJcbiAgfSkpO1xufSk7XG5TdW5zZXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3Vuc2V0LmRpc3BsYXlOYW1lID0gJ1N1bnNldCc7XG5leHBvcnQgZGVmYXVsdCBTdW5zZXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRhYmxldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjRcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNlwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblRhYmxldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UYWJsZXQuZGlzcGxheU5hbWUgPSAnVGFibGV0JztcbmV4cG9ydCBkZWZhdWx0IFRhYmxldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjU5IDEzLjQxbC03LjE3IDcuMTdhMiAyIDAgMCAxLTIuODMgMEwyIDEyVjJoMTBsOC41OSA4LjU5YTIgMiAwIDAgMSAwIDIuODJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCI3LjAxXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pKTtcbn0pO1xuVGFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhZy5kaXNwbGF5TmFtZSA9ICdUYWcnO1xuZXhwb3J0IGRlZmF1bHQgVGFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUYXJnZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuVGFyZ2V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhcmdldC5kaXNwbGF5TmFtZSA9ICdUYXJnZXQnO1xuZXhwb3J0IGRlZmF1bHQgVGFyZ2V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUZXJtaW5hbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgMTcgMTAgMTEgNCA1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSk7XG59KTtcblRlcm1pbmFsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRlcm1pbmFsLmRpc3BsYXlOYW1lID0gJ1Rlcm1pbmFsJztcbmV4cG9ydCBkZWZhdWx0IFRlcm1pbmFsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUaGVybW9tZXRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxNC43NlYzLjVhMi41IDIuNSAwIDAgMC01IDB2MTEuMjZhNC41IDQuNSAwIDEgMCA1IDB6XCJcbiAgfSkpO1xufSk7XG5UaGVybW9tZXRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaGVybW9tZXRlci5kaXNwbGF5TmFtZSA9ICdUaGVybW9tZXRlcic7XG5leHBvcnQgZGVmYXVsdCBUaGVybW9tZXRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGh1bWJzRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxNXY0YTMgMyAwIDAgMCAzIDNsNC05VjJINS43MmEyIDIgMCAwIDAtMiAxLjdsLTEuMzggOWEyIDIgMCAwIDAgMiAyLjN6bTctMTNoMi42N0EyLjMxIDIuMzEgMCAwIDEgMjIgNHY3YTIuMzEgMi4zMSAwIDAgMS0yLjMzIDJIMTdcIlxuICB9KSk7XG59KTtcblRodW1ic0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGh1bWJzRG93bi5kaXNwbGF5TmFtZSA9ICdUaHVtYnNEb3duJztcbmV4cG9ydCBkZWZhdWx0IFRodW1ic0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRodW1ic1VwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDlWNWEzIDMgMCAwIDAtMy0zbC00IDl2MTFoMTEuMjhhMiAyIDAgMCAwIDItMS43bDEuMzgtOWEyIDIgMCAwIDAtMi0yLjN6TTcgMjJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAyLTJoM1wiXG4gIH0pKTtcbn0pO1xuVGh1bWJzVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGh1bWJzVXAuZGlzcGxheU5hbWUgPSAnVGh1bWJzVXAnO1xuZXhwb3J0IGRlZmF1bHQgVGh1bWJzVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRvZ2dsZUxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCI1XCIsXG4gICAgd2lkdGg6IFwiMjJcIixcbiAgICBoZWlnaHQ6IFwiMTRcIixcbiAgICByeDogXCI3XCIsXG4gICAgcnk6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOFwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5Ub2dnbGVMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvZ2dsZUxlZnQuZGlzcGxheU5hbWUgPSAnVG9nZ2xlTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBUb2dnbGVMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUb2dnbGVSaWdodCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjdcIixcbiAgICByeTogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxNlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5Ub2dnbGVSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ub2dnbGVSaWdodC5kaXNwbGF5TmFtZSA9ICdUb2dnbGVSaWdodCc7XG5leHBvcnQgZGVmYXVsdCBUb2dnbGVSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVG9vbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC43IDYuM2ExIDEgMCAwIDAgMCAxLjRsMS42IDEuNmExIDEgMCAwIDAgMS40IDBsMy43Ny0zLjc3YTYgNiAwIDAgMS03Ljk0IDcuOTRsLTYuOTEgNi45MWEyLjEyIDIuMTIgMCAwIDEtMy0zbDYuOTEtNi45MWE2IDYgMCAwIDEgNy45NC03Ljk0bC0zLjc2IDMuNzZ6XCJcbiAgfSkpO1xufSk7XG5Ub29sLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvb2wuZGlzcGxheU5hbWUgPSAnVG9vbCc7XG5leHBvcnQgZGVmYXVsdCBUb29sOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmFzaDIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzIDYgNSA2IDIxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZtMyAwVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSk7XG59KTtcblRyYXNoMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmFzaDIuZGlzcGxheU5hbWUgPSAnVHJhc2gyJztcbmV4cG9ydCBkZWZhdWx0IFRyYXNoMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJhc2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzIDYgNSA2IDIxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZtMyAwVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MlwiXG4gIH0pKTtcbn0pO1xuVHJhc2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJhc2guZGlzcGxheU5hbWUgPSAnVHJhc2gnO1xuZXhwb3J0IGRlZmF1bHQgVHJhc2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZWxsbyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI3XCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiM1wiLFxuICAgIGhlaWdodDogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjNcIixcbiAgICBoZWlnaHQ6IFwiNVwiXG4gIH0pKTtcbn0pO1xuVHJlbGxvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRyZWxsby5kaXNwbGF5TmFtZSA9ICdUcmVsbG8nO1xuZXhwb3J0IGRlZmF1bHQgVHJlbGxvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmVuZGluZ0Rvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyAxOCAxMy41IDguNSA4LjUgMTMuNSAxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDE4IDIzIDE4IDIzIDEyXCJcbiAgfSkpO1xufSk7XG5UcmVuZGluZ0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbmRpbmdEb3duLmRpc3BsYXlOYW1lID0gJ1RyZW5kaW5nRG93bic7XG5leHBvcnQgZGVmYXVsdCBUcmVuZGluZ0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZW5kaW5nVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA2IDEzLjUgMTUuNSA4LjUgMTAuNSAxIDE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA2IDIzIDYgMjMgMTJcIlxuICB9KSk7XG59KTtcblRyZW5kaW5nVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbmRpbmdVcC5kaXNwbGF5TmFtZSA9ICdUcmVuZGluZ1VwJztcbmV4cG9ydCBkZWZhdWx0IFRyZW5kaW5nVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyaWFuZ2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjI5IDMuODZMMS44MiAxOGEyIDIgMCAwIDAgMS43MSAzaDE2Ljk0YTIgMiAwIDAgMCAxLjcxLTNMMTMuNzEgMy44NmEyIDIgMCAwIDAtMy40MiAwelwiXG4gIH0pKTtcbn0pO1xuVHJpYW5nbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJpYW5nbGUuZGlzcGxheU5hbWUgPSAnVHJpYW5nbGUnO1xuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRydWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE1XCIsXG4gICAgaGVpZ2h0OiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1LjVcIixcbiAgICBjeTogXCIxOC41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4LjVcIixcbiAgICBjeTogXCIxOC41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSk7XG59KTtcblRydWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRydWNrLmRpc3BsYXlOYW1lID0gJ1RydWNrJztcbmV4cG9ydCBkZWZhdWx0IFRydWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUdiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAyIDEyIDcgNyAyXCJcbiAgfSkpO1xufSk7XG5Udi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Udi5kaXNwbGF5TmFtZSA9ICdUdic7XG5leHBvcnQgZGVmYXVsdCBUdjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHdpdGNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDJIM3YxNmg1djRsNC00aDVsNC00VjJ6bS0xMCA5VjdtNSA0VjdcIlxuICB9KSk7XG59KTtcblR3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ud2l0Y2guZGlzcGxheU5hbWUgPSAnVHdpdGNoJztcbmV4cG9ydCBkZWZhdWx0IFR3aXRjaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHdpdHRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAzYTEwLjkgMTAuOSAwIDAgMS0zLjE0IDEuNTMgNC40OCA0LjQ4IDAgMCAwLTcuODYgM3YxQTEwLjY2IDEwLjY2IDAgMCAxIDMgNHMtNCA5IDUgMTNhMTEuNjQgMTEuNjQgMCAwIDEtNyAyYzkgNSAyMCAwIDIwLTExLjVhNC41IDQuNSAwIDAgMC0uMDgtLjgzQTcuNzIgNy43MiAwIDAgMCAyMyAzelwiXG4gIH0pKTtcbn0pO1xuVHdpdHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ud2l0dGVyLmRpc3BsYXlOYW1lID0gJ1R3aXR0ZXInO1xuZXhwb3J0IGRlZmF1bHQgVHdpdHRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHlwZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgNyA0IDQgMjAgNCAyMCA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcblR5cGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHlwZS5kaXNwbGF5TmFtZSA9ICdUeXBlJztcbmV4cG9ydCBkZWZhdWx0IFR5cGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVtYnJlbGxhID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDEyYTExLjA1IDExLjA1IDAgMCAwLTIyIDB6bS01IDdhMyAzIDAgMCAxLTYgMHYtN1wiXG4gIH0pKTtcbn0pO1xuVW1icmVsbGEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVW1icmVsbGEuZGlzcGxheU5hbWUgPSAnVW1icmVsbGEnO1xuZXhwb3J0IGRlZmF1bHQgVW1icmVsbGE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVuZGVybGluZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDN2N2E2IDYgMCAwIDAgNiA2IDYgNiAwIDAgMCA2LTZWM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcblVuZGVybGluZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VbmRlcmxpbmUuZGlzcGxheU5hbWUgPSAnVW5kZXJsaW5lJztcbmV4cG9ydCBkZWZhdWx0IFVuZGVybGluZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW5sb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTFcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxMVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMVwiXG4gIH0pKTtcbn0pO1xuVW5sb2NrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVubG9jay5kaXNwbGF5TmFtZSA9ICdVbmxvY2snO1xuZXhwb3J0IGRlZmF1bHQgVW5sb2NrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVcGxvYWRDbG91ZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE2IDEyIDEyIDggMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjM5IDE4LjM5QTUgNSAwIDAgMCAxOCA5aC0xLjI2QTggOCAwIDEgMCAzIDE2LjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE2IDEyIDEyIDggMTZcIlxuICB9KSk7XG59KTtcblVwbG9hZENsb3VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVwbG9hZENsb3VkLmRpc3BsYXlOYW1lID0gJ1VwbG9hZENsb3VkJztcbmV4cG9ydCBkZWZhdWx0IFVwbG9hZENsb3VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVcGxvYWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgOCAxMiAzIDcgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblVwbG9hZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VcGxvYWQuZGlzcGxheU5hbWUgPSAnVXBsb2FkJztcbmV4cG9ydCBkZWZhdWx0IFVwbG9hZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlckNoZWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDExIDE5IDEzIDIzIDlcIlxuICB9KSk7XG59KTtcblVzZXJDaGVjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyQ2hlY2suZGlzcGxheU5hbWUgPSAnVXNlckNoZWNrJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJDaGVjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlck1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuVXNlck1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJNaW51cy5kaXNwbGF5TmFtZSA9ICdVc2VyTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgVXNlck1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyUGx1cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4LjVcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5Vc2VyUGx1cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyUGx1cy5kaXNwbGF5TmFtZSA9ICdVc2VyUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyUGx1czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlclggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSkpO1xufSk7XG5Vc2VyWC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyWC5kaXNwbGF5TmFtZSA9ICdVc2VyWCc7XG5leHBvcnQgZGVmYXVsdCBVc2VyWDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSk7XG59KTtcblVzZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlci5kaXNwbGF5TmFtZSA9ICdVc2VyJztcbmV4cG9ydCBkZWZhdWx0IFVzZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVzZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjlcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMjF2LTJhNCA0IDAgMCAwLTMtMy44N1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMuMTNhNCA0IDAgMCAxIDAgNy43NVwiXG4gIH0pKTtcbn0pO1xuVXNlcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlcnMuZGlzcGxheU5hbWUgPSAnVXNlcnMnO1xuZXhwb3J0IGRlZmF1bHQgVXNlcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZpZGVvT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDE2djFhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDJtNS42NiAwSDE0YTIgMiAwIDAgMSAyIDJ2My4zNGwxIDFMMjMgN3YxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuVmlkZW9PZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVmlkZW9PZmYuZGlzcGxheU5hbWUgPSAnVmlkZW9PZmYnO1xuZXhwb3J0IGRlZmF1bHQgVmlkZW9PZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZpZGVvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMyA3IDE2IDEyIDIzIDE3IDIzIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIxNVwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSkpO1xufSk7XG5WaWRlby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5WaWRlby5kaXNwbGF5TmFtZSA9ICdWaWRlbyc7XG5leHBvcnQgZGVmYXVsdCBWaWRlbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9pY2VtYWlsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNS41XCIsXG4gICAgY3k6IFwiMTEuNVwiLFxuICAgIHI6IFwiNC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOC41XCIsXG4gICAgY3k6IFwiMTEuNVwiLFxuICAgIHI6IFwiNC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNS41XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxOC41XCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcblZvaWNlbWFpbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2ljZW1haWwuZGlzcGxheU5hbWUgPSAnVm9pY2VtYWlsJztcbmV4cG9ydCBkZWZhdWx0IFZvaWNlbWFpbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9sdW1lMSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTEgNSA2IDkgMiA5IDIgMTUgNiAxNSAxMSAxOSAxMSA1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTQgOC40NmE1IDUgMCAwIDEgMCA3LjA3XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWUxLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZTEuZGlzcGxheU5hbWUgPSAnVm9sdW1lMSc7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWUxOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS4wNyA0LjkzYTEwIDEwIDAgMCAxIDAgMTQuMTRNMTUuNTQgOC40NmE1IDUgMCAwIDEgMCA3LjA3XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZTIuZGlzcGxheU5hbWUgPSAnVm9sdW1lMic7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWVYID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuVm9sdW1lWC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2x1bWVYLmRpc3BsYXlOYW1lID0gJ1ZvbHVtZVgnO1xuZXhwb3J0IGRlZmF1bHQgVm9sdW1lWDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9sdW1lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSk7XG59KTtcblZvbHVtZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2x1bWUuZGlzcGxheU5hbWUgPSAnVm9sdW1lJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgV2F0Y2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMiA5IDEyIDEyIDEzLjUgMTMuNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjUxIDE3LjM1bC0uMzUgMy44M2EyIDIgMCAwIDEtMiAxLjgySDkuODNhMiAyIDAgMCAxLTItMS44MmwtLjM1LTMuODNtLjAxLTEwLjdsLjM1LTMuODNBMiAyIDAgMCAxIDkuODMgMWg0LjM1YTIgMiAwIDAgMSAyIDEuODJsLjM1IDMuODNcIlxuICB9KSk7XG59KTtcbldhdGNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldhdGNoLmRpc3BsYXlOYW1lID0gJ1dhdGNoJztcbmV4cG9ydCBkZWZhdWx0IFdhdGNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaWZpT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjcyIDExLjA2QTEwLjk0IDEwLjk0IDAgMCAxIDE5IDEyLjU1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMi41NWExMC45NCAxMC45NCAwIDAgMSA1LjE3LTIuMzlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43MSA1LjA1QTE2IDE2IDAgMCAxIDIyLjU4IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjQyIDlhMTUuOTEgMTUuOTEgMCAwIDEgNC43LTIuODhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUzIDE2LjExYTYgNiAwIDAgMSA2Ljk1IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pKTtcbn0pO1xuV2lmaU9mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5XaWZpT2ZmLmRpc3BsYXlOYW1lID0gJ1dpZmlPZmYnO1xuZXhwb3J0IGRlZmF1bHQgV2lmaU9mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgV2lmaSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyLjU1YTExIDExIDAgMCAxIDE0LjA4IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjQyIDlhMTYgMTYgMCAwIDEgMjEuMTYgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTMgMTYuMTFhNiA2IDAgMCAxIDYuOTUgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5XaWZpLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldpZmkuZGlzcGxheU5hbWUgPSAnV2lmaSc7XG5leHBvcnQgZGVmYXVsdCBXaWZpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNTkgNC41OUEyIDIgMCAxIDEgMTEgOEgybTEwLjU5IDExLjQxQTIgMiAwIDEgMCAxNCAxNkgybTE1LjczLTguMjdBMi41IDIuNSAwIDEgMSAxOS41IDEySDJcIlxuICB9KSk7XG59KTtcbldpbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2luZC5kaXNwbGF5TmFtZSA9ICdXaW5kJztcbmV4cG9ydCBkZWZhdWx0IFdpbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFhDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5YQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1hDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgWENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblhPY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblhPY3RhZ29uLmRpc3BsYXlOYW1lID0gJ1hPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IFhPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBYU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblhTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWFNxdWFyZS5kaXNwbGF5TmFtZSA9ICdYU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFhTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5YLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblguZGlzcGxheU5hbWUgPSAnWCc7XG5leHBvcnQgZGVmYXVsdCBYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBZb3V0dWJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU0IDYuNDJhMi43OCAyLjc4IDAgMCAwLTEuOTQtMkMxOC44OCA0IDEyIDQgMTIgNHMtNi44OCAwLTguNi40NmEyLjc4IDIuNzggMCAwIDAtMS45NCAyQTI5IDI5IDAgMCAwIDEgMTEuNzVhMjkgMjkgMCAwIDAgLjQ2IDUuMzNBMi43OCAyLjc4IDAgMCAwIDMuNCAxOWMxLjcyLjQ2IDguNi40NiA4LjYuNDZzNi44OCAwIDguNi0uNDZhMi43OCAyLjc4IDAgMCAwIDEuOTQtMiAyOSAyOSAwIDAgMCAuNDYtNS4yNSAyOSAyOSAwIDAgMC0uNDYtNS4zM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiOS43NSAxNS4wMiAxNS41IDExLjc1IDkuNzUgOC40OCA5Ljc1IDE1LjAyXCJcbiAgfSkpO1xufSk7XG5Zb3V0dWJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbllvdXR1YmUuZGlzcGxheU5hbWUgPSAnWW91dHViZSc7XG5leHBvcnQgZGVmYXVsdCBZb3V0dWJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBaYXBPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMi40MSA2Ljc1IDEzIDIgMTAuNTcgNC45MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTguNTcgMTIuOTEgMjEgMTAgMTUuNjYgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggOCAzIDE0IDEyIDE0IDExIDIyIDE2IDE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5aYXBPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWmFwT2ZmLmRpc3BsYXlOYW1lID0gJ1phcE9mZic7XG5leHBvcnQgZGVmYXVsdCBaYXBPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFphcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMiAzIDE0IDEyIDE0IDExIDIyIDIxIDEwIDEyIDEwIDEzIDJcIlxuICB9KSk7XG59KTtcblphcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5aYXAuZGlzcGxheU5hbWUgPSAnWmFwJztcbmV4cG9ydCBkZWZhdWx0IFphcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWm9vbUluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNi42NVwiLFxuICAgIHkyOiBcIjE2LjY1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTFcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTFcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblpvb21Jbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5ab29tSW4uZGlzcGxheU5hbWUgPSAnWm9vbUluJztcbmV4cG9ydCBkZWZhdWx0IFpvb21JbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWm9vbU91dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjExXCIsXG4gICAgY3k6IFwiMTFcIixcbiAgICByOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTYuNjVcIixcbiAgICB5MjogXCIxNi42NVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblpvb21PdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWm9vbU91dC5kaXNwbGF5TmFtZSA9ICdab29tT3V0JztcbmV4cG9ydCBkZWZhdWx0IFpvb21PdXQ7IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBY3Rpdml0eSB9IGZyb20gJy4vaWNvbnMvYWN0aXZpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBaXJwbGF5IH0gZnJvbSAnLi9pY29ucy9haXJwbGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2FsZXJ0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsZXJ0T2N0YWdvbiB9IGZyb20gJy4vaWNvbnMvYWxlcnQtb2N0YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsZXJ0VHJpYW5nbGUgfSBmcm9tICcuL2ljb25zL2FsZXJ0LXRyaWFuZ2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25DZW50ZXIgfSBmcm9tICcuL2ljb25zL2FsaWduLWNlbnRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduSnVzdGlmeSB9IGZyb20gJy4vaWNvbnMvYWxpZ24tanVzdGlmeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduTGVmdCB9IGZyb20gJy4vaWNvbnMvYWxpZ24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduUmlnaHQgfSBmcm9tICcuL2ljb25zL2FsaWduLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQW5jaG9yIH0gZnJvbSAnLi9pY29ucy9hbmNob3InO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcGVydHVyZSB9IGZyb20gJy4vaWNvbnMvYXBlcnR1cmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcmNoaXZlIH0gZnJvbSAnLi9pY29ucy9hcmNoaXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93RG93bkxlZnQgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93RG93blJpZ2h0IH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dMZWZ0Q2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93TGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93UmlnaHRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LXJpZ2h0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93UmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcExlZnQgfSBmcm9tICcuL2ljb25zL2Fycm93LXVwLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwUmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LXVwLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBdFNpZ24gfSBmcm9tICcuL2ljb25zL2F0LXNpZ24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBd2FyZCB9IGZyb20gJy4vaWNvbnMvYXdhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXJDaGFydDIgfSBmcm9tICcuL2ljb25zL2Jhci1jaGFydC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFyQ2hhcnQgfSBmcm9tICcuL2ljb25zL2Jhci1jaGFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhdHRlcnlDaGFyZ2luZyB9IGZyb20gJy4vaWNvbnMvYmF0dGVyeS1jaGFyZ2luZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhdHRlcnkgfSBmcm9tICcuL2ljb25zL2JhdHRlcnknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCZWxsT2ZmIH0gZnJvbSAnLi9pY29ucy9iZWxsLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJlbGwgfSBmcm9tICcuL2ljb25zL2JlbGwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCbHVldG9vdGggfSBmcm9tICcuL2ljb25zL2JsdWV0b290aCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvbGQgfSBmcm9tICcuL2ljb25zL2JvbGQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb29rT3BlbiB9IGZyb20gJy4vaWNvbnMvYm9vay1vcGVuJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9vayB9IGZyb20gJy4vaWNvbnMvYm9vayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvb2ttYXJrIH0gZnJvbSAnLi9pY29ucy9ib29rbWFyayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJveCB9IGZyb20gJy4vaWNvbnMvYm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnJpZWZjYXNlIH0gZnJvbSAnLi9pY29ucy9icmllZmNhc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYWxlbmRhciB9IGZyb20gJy4vaWNvbnMvY2FsZW5kYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYW1lcmFPZmYgfSBmcm9tICcuL2ljb25zL2NhbWVyYS1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYW1lcmEgfSBmcm9tICcuL2ljb25zL2NhbWVyYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhc3QgfSBmcm9tICcuL2ljb25zL2Nhc3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja0NpcmNsZSB9IGZyb20gJy4vaWNvbnMvY2hlY2stY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tTcXVhcmUgfSBmcm9tICcuL2ljb25zL2NoZWNrLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrIH0gZnJvbSAnLi9pY29ucy9jaGVjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25Eb3duIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uTGVmdCB9IGZyb20gJy4vaWNvbnMvY2hldnJvbi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvblJpZ2h0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvblVwIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNEb3duIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNMZWZ0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNSaWdodCB9IGZyb20gJy4vaWNvbnMvY2hldnJvbnMtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc1VwIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENocm9tZSB9IGZyb20gJy4vaWNvbnMvY2hyb21lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbGlwYm9hcmQgfSBmcm9tICcuL2ljb25zL2NsaXBib2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb2NrIH0gZnJvbSAnLi9pY29ucy9jbG9jayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkRHJpenpsZSB9IGZyb20gJy4vaWNvbnMvY2xvdWQtZHJpenpsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkTGlnaHRuaW5nIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1saWdodG5pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZE9mZiB9IGZyb20gJy4vaWNvbnMvY2xvdWQtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRSYWluIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1yYWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRTbm93IH0gZnJvbSAnLi9pY29ucy9jbG91ZC1zbm93JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWQgfSBmcm9tICcuL2ljb25zL2Nsb3VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29kZSB9IGZyb20gJy4vaWNvbnMvY29kZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZGVwZW4gfSBmcm9tICcuL2ljb25zL2NvZGVwZW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2Rlc2FuZGJveCB9IGZyb20gJy4vaWNvbnMvY29kZXNhbmRib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2ZmZWUgfSBmcm9tICcuL2ljb25zL2NvZmZlZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbnMgfSBmcm9tICcuL2ljb25zL2NvbHVtbnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tYW5kIH0gZnJvbSAnLi9pY29ucy9jb21tYW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tcGFzcyB9IGZyb20gJy4vaWNvbnMvY29tcGFzcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcHkgfSBmcm9tICcuL2ljb25zL2NvcHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJEb3duTGVmdCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWRvd24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckRvd25SaWdodCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWRvd24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJMZWZ0RG93biB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWxlZnQtZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckxlZnRVcCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWxlZnQtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJSaWdodERvd24gfSBmcm9tICcuL2ljb25zL2Nvcm5lci1yaWdodC1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyUmlnaHRVcCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXJpZ2h0LXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyVXBMZWZ0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItdXAtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lclVwUmlnaHQgfSBmcm9tICcuL2ljb25zL2Nvcm5lci11cC1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENwdSB9IGZyb20gJy4vaWNvbnMvY3B1JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3JlZGl0Q2FyZCB9IGZyb20gJy4vaWNvbnMvY3JlZGl0LWNhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcm9wIH0gZnJvbSAnLi9pY29ucy9jcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3Jvc3NoYWlyIH0gZnJvbSAnLi9pY29ucy9jcm9zc2hhaXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEYXRhYmFzZSB9IGZyb20gJy4vaWNvbnMvZGF0YWJhc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWxldGUgfSBmcm9tICcuL2ljb25zL2RlbGV0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpc2MgfSBmcm9tICcuL2ljb25zL2Rpc2MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGVDaXJjbGUgfSBmcm9tICcuL2ljb25zL2RpdmlkZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGVTcXVhcmUgfSBmcm9tICcuL2ljb25zL2RpdmlkZS1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGUgfSBmcm9tICcuL2ljb25zL2RpdmlkZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvbGxhclNpZ24gfSBmcm9tICcuL2ljb25zL2RvbGxhci1zaWduJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG93bmxvYWRDbG91ZCB9IGZyb20gJy4vaWNvbnMvZG93bmxvYWQtY2xvdWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3dubG9hZCB9IGZyb20gJy4vaWNvbnMvZG93bmxvYWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmliYmJsZSB9IGZyb20gJy4vaWNvbnMvZHJpYmJibGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wbGV0IH0gZnJvbSAnLi9pY29ucy9kcm9wbGV0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdDIgfSBmcm9tICcuL2ljb25zL2VkaXQtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXQzIH0gZnJvbSAnLi9pY29ucy9lZGl0LTMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0IH0gZnJvbSAnLi9pY29ucy9lZGl0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXh0ZXJuYWxMaW5rIH0gZnJvbSAnLi9pY29ucy9leHRlcm5hbC1saW5rJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXllT2ZmIH0gZnJvbSAnLi9pY29ucy9leWUtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXllIH0gZnJvbSAnLi9pY29ucy9leWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGYWNlYm9vayB9IGZyb20gJy4vaWNvbnMvZmFjZWJvb2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGYXN0Rm9yd2FyZCB9IGZyb20gJy4vaWNvbnMvZmFzdC1mb3J3YXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmVhdGhlciB9IGZyb20gJy4vaWNvbnMvZmVhdGhlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpZ21hIH0gZnJvbSAnLi9pY29ucy9maWdtYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVNaW51cyB9IGZyb20gJy4vaWNvbnMvZmlsZS1taW51cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVQbHVzIH0gZnJvbSAnLi9pY29ucy9maWxlLXBsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlVGV4dCB9IGZyb20gJy4vaWNvbnMvZmlsZS10ZXh0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZSB9IGZyb20gJy4vaWNvbnMvZmlsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbG0gfSBmcm9tICcuL2ljb25zL2ZpbG0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWx0ZXIgfSBmcm9tICcuL2ljb25zL2ZpbHRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZsYWcgfSBmcm9tICcuL2ljb25zL2ZsYWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXJNaW51cyB9IGZyb20gJy4vaWNvbnMvZm9sZGVyLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRm9sZGVyUGx1cyB9IGZyb20gJy4vaWNvbnMvZm9sZGVyLXBsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXIgfSBmcm9tICcuL2ljb25zL2ZvbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZyYW1lciB9IGZyb20gJy4vaWNvbnMvZnJhbWVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRnJvd24gfSBmcm9tICcuL2ljb25zL2Zyb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2lmdCB9IGZyb20gJy4vaWNvbnMvZ2lmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdEJyYW5jaCB9IGZyb20gJy4vaWNvbnMvZ2l0LWJyYW5jaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdENvbW1pdCB9IGZyb20gJy4vaWNvbnMvZ2l0LWNvbW1pdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdE1lcmdlIH0gZnJvbSAnLi9pY29ucy9naXQtbWVyZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaXRQdWxsUmVxdWVzdCB9IGZyb20gJy4vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdEh1YiB9IGZyb20gJy4vaWNvbnMvZ2l0aHViJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0bGFiIH0gZnJvbSAnLi9pY29ucy9naXRsYWInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iZSB9IGZyb20gJy4vaWNvbnMvZ2xvYmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHcmlkIH0gZnJvbSAnLi9pY29ucy9ncmlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGFyZERyaXZlIH0gZnJvbSAnLi9pY29ucy9oYXJkLWRyaXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGFzaCB9IGZyb20gJy4vaWNvbnMvaGFzaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlYWRwaG9uZXMgfSBmcm9tICcuL2ljb25zL2hlYWRwaG9uZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIZWFydCB9IGZyb20gJy4vaWNvbnMvaGVhcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIZWxwQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9oZWxwLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhleGFnb24gfSBmcm9tICcuL2ljb25zL2hleGFnb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb21lIH0gZnJvbSAnLi9pY29ucy9ob21lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UgfSBmcm9tICcuL2ljb25zL2ltYWdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5ib3ggfSBmcm9tICcuL2ljb25zL2luYm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5mbyB9IGZyb20gJy4vaWNvbnMvaW5mbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEluc3RhZ3JhbSB9IGZyb20gJy4vaWNvbnMvaW5zdGFncmFtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSXRhbGljIH0gZnJvbSAnLi9pY29ucy9pdGFsaWMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBLZXkgfSBmcm9tICcuL2ljb25zL2tleSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExheWVycyB9IGZyb20gJy4vaWNvbnMvbGF5ZXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGF5b3V0IH0gZnJvbSAnLi9pY29ucy9sYXlvdXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaWZlQnVveSB9IGZyb20gJy4vaWNvbnMvbGlmZS1idW95JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluazIgfSBmcm9tICcuL2ljb25zL2xpbmstMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tICcuL2ljb25zL2xpbmsnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rZWRpbiB9IGZyb20gJy4vaWNvbnMvbGlua2VkaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0IH0gZnJvbSAnLi9pY29ucy9saXN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9hZGVyIH0gZnJvbSAnLi9pY29ucy9sb2FkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2NrIH0gZnJvbSAnLi9pY29ucy9sb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nSW4gfSBmcm9tICcuL2ljb25zL2xvZy1pbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExvZ091dCB9IGZyb20gJy4vaWNvbnMvbG9nLW91dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1haWwgfSBmcm9tICcuL2ljb25zL21haWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXBQaW4gfSBmcm9tICcuL2ljb25zL21hcC1waW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXAgfSBmcm9tICcuL2ljb25zL21hcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1heGltaXplMiB9IGZyb20gJy4vaWNvbnMvbWF4aW1pemUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1heGltaXplIH0gZnJvbSAnLi9pY29ucy9tYXhpbWl6ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1laCB9IGZyb20gJy4vaWNvbnMvbWVoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gJy4vaWNvbnMvbWVudSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lc3NhZ2VDaXJjbGUgfSBmcm9tICcuL2ljb25zL21lc3NhZ2UtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVzc2FnZVNxdWFyZSB9IGZyb20gJy4vaWNvbnMvbWVzc2FnZS1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWNPZmYgfSBmcm9tICcuL2ljb25zL21pYy1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWMgfSBmcm9tICcuL2ljb25zL21pYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbmltaXplMiB9IGZyb20gJy4vaWNvbnMvbWluaW1pemUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbmltaXplIH0gZnJvbSAnLi9pY29ucy9taW5pbWl6ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbnVzQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9taW51cy1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaW51c1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvbWludXMtc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWludXMgfSBmcm9tICcuL2ljb25zL21pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9uaXRvciB9IGZyb20gJy4vaWNvbnMvbW9uaXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1vb24gfSBmcm9tICcuL2ljb25zL21vb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3JlSG9yaXpvbnRhbCB9IGZyb20gJy4vaWNvbnMvbW9yZS1ob3Jpem9udGFsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9yZVZlcnRpY2FsIH0gZnJvbSAnLi9pY29ucy9tb3JlLXZlcnRpY2FsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW91c2VQb2ludGVyIH0gZnJvbSAnLi9pY29ucy9tb3VzZS1wb2ludGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW92ZSB9IGZyb20gJy4vaWNvbnMvbW92ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE11c2ljIH0gZnJvbSAnLi9pY29ucy9tdXNpYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5hdmlnYXRpb24yIH0gZnJvbSAnLi9pY29ucy9uYXZpZ2F0aW9uLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOYXZpZ2F0aW9uIH0gZnJvbSAnLi9pY29ucy9uYXZpZ2F0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2N0YWdvbiB9IGZyb20gJy4vaWNvbnMvb2N0YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhY2thZ2UgfSBmcm9tICcuL2ljb25zL3BhY2thZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXBlcmNsaXAgfSBmcm9tICcuL2ljb25zL3BhcGVyY2xpcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhdXNlQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9wYXVzZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXVzZSB9IGZyb20gJy4vaWNvbnMvcGF1c2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQZW5Ub29sIH0gZnJvbSAnLi9pY29ucy9wZW4tdG9vbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBlcmNlbnQgfSBmcm9tICcuL2ljb25zL3BlcmNlbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUNhbGwgfSBmcm9tICcuL2ljb25zL3Bob25lLWNhbGwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUZvcndhcmRlZCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtZm9yd2FyZGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVJbmNvbWluZyB9IGZyb20gJy4vaWNvbnMvcGhvbmUtaW5jb21pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZU1pc3NlZCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtbWlzc2VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVPZmYgfSBmcm9tICcuL2ljb25zL3Bob25lLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lT3V0Z29pbmcgfSBmcm9tICcuL2ljb25zL3Bob25lLW91dGdvaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmUgfSBmcm9tICcuL2ljb25zL3Bob25lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGllQ2hhcnQgfSBmcm9tICcuL2ljb25zL3BpZS1jaGFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsYXlDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BsYXktY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGxheSB9IGZyb20gJy4vaWNvbnMvcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsdXNDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BsdXMtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGx1c1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvcGx1cy1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbHVzIH0gZnJvbSAnLi9pY29ucy9wbHVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUG9ja2V0IH0gZnJvbSAnLi9pY29ucy9wb2NrZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQb3dlciB9IGZyb20gJy4vaWNvbnMvcG93ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQcmludGVyIH0gZnJvbSAnLi9pY29ucy9wcmludGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmFkaW8gfSBmcm9tICcuL2ljb25zL3JhZGlvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVmcmVzaENjdyB9IGZyb20gJy4vaWNvbnMvcmVmcmVzaC1jY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWZyZXNoQ3cgfSBmcm9tICcuL2ljb25zL3JlZnJlc2gtY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXBlYXQgfSBmcm9tICcuL2ljb25zL3JlcGVhdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJld2luZCB9IGZyb20gJy4vaWNvbnMvcmV3aW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm90YXRlQ2N3IH0gZnJvbSAnLi9pY29ucy9yb3RhdGUtY2N3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm90YXRlQ3cgfSBmcm9tICcuL2ljb25zL3JvdGF0ZS1jdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJzcyB9IGZyb20gJy4vaWNvbnMvcnNzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2F2ZSB9IGZyb20gJy4vaWNvbnMvc2F2ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNjaXNzb3JzIH0gZnJvbSAnLi9pY29ucy9zY2lzc29ycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vaWNvbnMvc2VhcmNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VuZCB9IGZyb20gJy4vaWNvbnMvc2VuZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlcnZlciB9IGZyb20gJy4vaWNvbnMvc2VydmVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2V0dGluZ3MgfSBmcm9tICcuL2ljb25zL3NldHRpbmdzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hhcmUyIH0gZnJvbSAnLi9pY29ucy9zaGFyZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hhcmUgfSBmcm9tICcuL2ljb25zL3NoYXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hpZWxkT2ZmIH0gZnJvbSAnLi9pY29ucy9zaGllbGQtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hpZWxkIH0gZnJvbSAnLi9pY29ucy9zaGllbGQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG9wcGluZ0JhZyB9IGZyb20gJy4vaWNvbnMvc2hvcHBpbmctYmFnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hvcHBpbmdDYXJ0IH0gZnJvbSAnLi9pY29ucy9zaG9wcGluZy1jYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2h1ZmZsZSB9IGZyb20gJy4vaWNvbnMvc2h1ZmZsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZGViYXIgfSBmcm9tICcuL2ljb25zL3NpZGViYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lwQmFjayB9IGZyb20gJy4vaWNvbnMvc2tpcC1iYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2tpcEZvcndhcmQgfSBmcm9tICcuL2ljb25zL3NraXAtZm9yd2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsYWNrIH0gZnJvbSAnLi9pY29ucy9zbGFjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsYXNoIH0gZnJvbSAnLi9pY29ucy9zbGFzaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsaWRlcnMgfSBmcm9tICcuL2ljb25zL3NsaWRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTbWFydHBob25lIH0gZnJvbSAnLi9pY29ucy9zbWFydHBob25lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU21pbGUgfSBmcm9tICcuL2ljb25zL3NtaWxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BlYWtlciB9IGZyb20gJy4vaWNvbnMvc3BlYWtlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNxdWFyZSB9IGZyb20gJy4vaWNvbnMvc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhciB9IGZyb20gJy4vaWNvbnMvc3Rhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0b3BDaXJjbGUgfSBmcm9tICcuL2ljb25zL3N0b3AtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3VuIH0gZnJvbSAnLi9pY29ucy9zdW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW5yaXNlIH0gZnJvbSAnLi9pY29ucy9zdW5yaXNlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3Vuc2V0IH0gZnJvbSAnLi9pY29ucy9zdW5zZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZXQgfSBmcm9tICcuL2ljb25zL3RhYmxldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gJy4vaWNvbnMvdGFnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGFyZ2V0IH0gZnJvbSAnLi9pY29ucy90YXJnZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbCB9IGZyb20gJy4vaWNvbnMvdGVybWluYWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaGVybW9tZXRlciB9IGZyb20gJy4vaWNvbnMvdGhlcm1vbWV0ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaHVtYnNEb3duIH0gZnJvbSAnLi9pY29ucy90aHVtYnMtZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRodW1ic1VwIH0gZnJvbSAnLi9pY29ucy90aHVtYnMtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVMZWZ0IH0gZnJvbSAnLi9pY29ucy90b2dnbGUtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZVJpZ2h0IH0gZnJvbSAnLi9pY29ucy90b2dnbGUtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb29sIH0gZnJvbSAnLi9pY29ucy90b29sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJhc2gyIH0gZnJvbSAnLi9pY29ucy90cmFzaC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJhc2ggfSBmcm9tICcuL2ljb25zL3RyYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJlbGxvIH0gZnJvbSAnLi9pY29ucy90cmVsbG8nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVuZGluZ0Rvd24gfSBmcm9tICcuL2ljb25zL3RyZW5kaW5nLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVuZGluZ1VwIH0gZnJvbSAnLi9pY29ucy90cmVuZGluZy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyaWFuZ2xlIH0gZnJvbSAnLi9pY29ucy90cmlhbmdsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRydWNrIH0gZnJvbSAnLi9pY29ucy90cnVjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR2IH0gZnJvbSAnLi9pY29ucy90dic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR3aXRjaCB9IGZyb20gJy4vaWNvbnMvdHdpdGNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHdpdHRlciB9IGZyb20gJy4vaWNvbnMvdHdpdHRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR5cGUgfSBmcm9tICcuL2ljb25zL3R5cGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVbWJyZWxsYSB9IGZyb20gJy4vaWNvbnMvdW1icmVsbGEnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVbmRlcmxpbmUgfSBmcm9tICcuL2ljb25zL3VuZGVybGluZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVubG9jayB9IGZyb20gJy4vaWNvbnMvdW5sb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXBsb2FkQ2xvdWQgfSBmcm9tICcuL2ljb25zL3VwbG9hZC1jbG91ZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVwbG9hZCB9IGZyb20gJy4vaWNvbnMvdXBsb2FkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlckNoZWNrIH0gZnJvbSAnLi9pY29ucy91c2VyLWNoZWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlck1pbnVzIH0gZnJvbSAnLi9pY29ucy91c2VyLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlclBsdXMgfSBmcm9tICcuL2ljb25zL3VzZXItcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVzZXJYIH0gZnJvbSAnLi9pY29ucy91c2VyLXgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyIH0gZnJvbSAnLi9pY29ucy91c2VyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlcnMgfSBmcm9tICcuL2ljb25zL3VzZXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW9PZmYgfSBmcm9tICcuL2ljb25zL3ZpZGVvLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvIH0gZnJvbSAnLi9pY29ucy92aWRlbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvaWNlbWFpbCB9IGZyb20gJy4vaWNvbnMvdm9pY2VtYWlsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lMSB9IGZyb20gJy4vaWNvbnMvdm9sdW1lLTEnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUyIH0gZnJvbSAnLi9pY29ucy92b2x1bWUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvbHVtZVggfSBmcm9tICcuL2ljb25zL3ZvbHVtZS14JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lIH0gZnJvbSAnLi9pY29ucy92b2x1bWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXYXRjaCB9IGZyb20gJy4vaWNvbnMvd2F0Y2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaWZpT2ZmIH0gZnJvbSAnLi9pY29ucy93aWZpLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpZmkgfSBmcm9tICcuL2ljb25zL3dpZmknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaW5kIH0gZnJvbSAnLi9pY29ucy93aW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWENpcmNsZSB9IGZyb20gJy4vaWNvbnMveC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYT2N0YWdvbiB9IGZyb20gJy4vaWNvbnMveC1vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWFNxdWFyZSB9IGZyb20gJy4vaWNvbnMveC1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYIH0gZnJvbSAnLi9pY29ucy94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWW91dHViZSB9IGZyb20gJy4vaWNvbnMveW91dHViZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFphcE9mZiB9IGZyb20gJy4vaWNvbnMvemFwLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFphcCB9IGZyb20gJy4vaWNvbnMvemFwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWm9vbUluIH0gZnJvbSAnLi9pY29ucy96b29tLWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWm9vbU91dCB9IGZyb20gJy4vaWNvbnMvem9vbS1vdXQnOyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBCdXR0b24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBpc1NlY29uZGFyeSA9IF9hLmlzU2Vjb25kYXJ5LCBpc1RlcnRpYXJ5ID0gX2EuaXNUZXJ0aWFyeSwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrLCBpc0Rlc3RydWN0aXZlID0gX2EuaXNEZXN0cnVjdGl2ZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgbGV2ZWwgPSBpc1RlcnRpYXJ5ID8gXCJ0ZXJ0aWFyeVwiIDogaXNTZWNvbmRhcnkgPyBcInNlY29uZGFyeVwiIDogXCJwcmltYXJ5XCI7XG4gICAgdmFyIG1vZGlmaWNhdG9yID0gaXNEZXN0cnVjdGl2ZSA/IFwiLWRlc3RydWN0aXZlXCIgOiBcIlwiO1xuICAgIGlmIChpc1NlY29uZGFyeSAmJiBpc1RlcnRpYXJ5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlVzZSBvbmx5IG9uZSBsZXZlbCBtb2RpZmljYXRvciBcXFwiaXNTZWNvbmRhcnlcXFwiIG9yIFxcXCJpc1RlcnRpYXJ5XFxcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IG9uQ2xpY2s6IG9uQ2xpY2ssIGNsYXNzTmFtZTogXCJidXR0b24gYnV0dG9uLS1cIiArIGxldmVsICsgbW9kaWZpY2F0b3IgKyBcIiBcIiArIGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSwgY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdXR0b24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBDaGVja2JveCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpZCA9IF9hLmlkLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIHR5cGUgPSBfYS50eXBlLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgbGFiZWwgPSBfYS5sYWJlbCwgbmFtZSA9IF9hLm5hbWUsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB0eXBlID0gdHlwZSB8fCBcImNoZWNrYm94XCI7XG4gICAgdmFyIGlucHV0Q29uZmlnID0ge1xuICAgICAgICBpZDogaWQgfHwgdHlwZSArIFwiLS1cIiArIChNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwKS50b0ZpeGVkKDApLFxuICAgIH07XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzd2l0Y2hcIjpcbiAgICAgICAgICAgIGlucHV0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGlucHV0Q29uZmlnKSwgeyBjbGFzc05hbWU6IFwic3dpdGNoX190b2dnbGVcIiwgdHlwZTogXCJjaGVja2JveFwiIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJyYWRpb19fYnV0dG9uXCIsIHR5cGU6IFwicmFkaW9cIiwgbmFtZTogbmFtZSB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJjaGVja2JveF9fYm94XCIsIHR5cGU6IFwiY2hlY2tib3hcIiB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgbGFiZWxDbGFzcyA9IHR5cGUgKyBcIl9fbGFiZWxcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0eXBlICsgXCIgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcsIHsgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRWYWx1ZSwgb25DaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gb25DaGFuZ2UgJiYgb25DaGFuZ2UoZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGV2ZW50KTsgfSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSkpLFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgY2xhc3NOYW1lOiBsYWJlbENsYXNzLCBodG1sRm9yOiBpbnB1dENvbmZpZy5pZCB9LCBsYWJlbCkpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBDaGVja2JveDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNoZWNrYm94LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERpc2Nsb3N1cmUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgaXNEZWZhdWx0RXhwYW5kZWQgPSBfYS5pc0RlZmF1bHRFeHBhbmRlZCwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBsYWJlbCA9IF9hLmxhYmVsLCBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBpc1NlY3Rpb24gPSBfYS5pc1NlY3Rpb24sIG9uRXhwYW5kID0gX2Eub25FeHBhbmQ7XG4gICAgdmFyIF9iID0gcmVhY3RfMS51c2VTdGF0ZShCb29sZWFuKGlzRGVmYXVsdEV4cGFuZGVkKSksIGlzRXhwYW5kZWQgPSBfYlswXSwgb25FeHBhbmRlZFN0YXRlQ2hhbmdlID0gX2JbMV07XG4gICAgdmFyIHRvZ2dsZUV4YXBuZFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkV4cGFuZCAmJiBvbkV4cGFuZCghaXNFeHBhbmRlZCk7XG4gICAgICAgIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSghaXNFeHBhbmRlZCk7XG4gICAgfTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IGlzU2VjdGlvbiA/IFwiZGlzY2xvc3VyZS0tc2VjdGlvblwiIDogXCJcIjtcbiAgICB2YXIgZXhwYW5kQ2xhc3MgPSBpc0V4cGFuZGVkID8gXCJkaXNjbG9zdXJlLS1leHBhbmRlZFwiIDogXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmUgXCIgKyAoY2xhc3NOYW1lIHx8IFwiXCIpIH0sXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmVfX2l0ZW0gXCIgKyBleHBhbmRDbGFzcyB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZV9fbGFiZWwgXCIgKyBsYWJlbENsYXNzLCBvbkNsaWNrOiB0b2dnbGVFeGFwbmRTdGF0ZSB9LCBsYWJlbCksXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkaXNjbG9zdXJlX19jb250ZW50XCIgfSwgY2hpbGRyZW4pKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IERpc2Nsb3N1cmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EaXNjbG9zdXJlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBJY29uID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgbmFtZSA9IF9hLm5hbWUsIGNvbG9yID0gX2EuY29sb3IsIHRleHQgPSBfYS50ZXh0LCBpc1NlbGVjdGVkID0gX2EuaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBpY29uQ2xhc3MgPSB0ZXh0ID8gXCJcIiA6IFwiaWNvbi0tXCIgKyBuYW1lO1xuICAgIHZhciBjb2xvckNsYXNzID0gIWlzRGlzYWJsZWQgJiYgY29sb3IgPyBcImljb24tLVwiICsgY29sb3IgOiBcImljb24tLWJsYWNrLTNcIjtcbiAgICB2YXIgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyBcImljb24tYnV0dG9uLS1zZWxlY3RlZFwiIDogXCJcIjtcbiAgICBpZiAob25DbGljaykge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICB9LCBkaXNhYmxlZDogaXNEaXNhYmxlZCwgb25DbGljazogb25DbGljaywgY2xhc3NOYW1lOiBcImljb24tYnV0dG9uIFwiICsgc2VsZWN0ZWRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpY29uIFwiICsgaWNvbkNsYXNzIH0sIHRleHQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImljb24gXCIgKyBpY29uQ2xhc3MgKyBcIiBcIiArIGNvbG9yQ2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSB9LCB0ZXh0KSk7XG4gICAgfVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEljb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JY29uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfMSA9IHJlcXVpcmUoXCIuL1wiKTtcbnZhciBJbnB1dENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNsYXNzTmFtZSwgY2xhc3NOYW1lID0gX2IgPT09IHZvaWQgMCA/IFwiXCIgOiBfYiwgdHlwZSA9IF9hLnR5cGUsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2hhbmdlID0gX2Eub25DaGFuZ2U7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogdHlwZSwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUsIGV2ZW50KTsgfSB9KSk7XG59O1xudmFyIElucHV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgdHlwZSA9IF9hLnR5cGUsIGljb24gPSBfYS5pY29uLCBfYiA9IF9hLmljb25Db2xvciwgaWNvbkNvbG9yID0gX2IgPT09IHZvaWQgMCA/IFwiYmxhY2szXCIgOiBfYiwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB0eXBlID0gdHlwZSB8fCBcInRleHRcIjtcbiAgICB2YXIgaW5wdXRDbGFzcyA9IFwiaW5wdXRfX2ZpZWxkXCI7XG4gICAgaWYgKGljb24pIHtcbiAgICAgICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dCBpbnB1dC0td2l0aC1pY29uXCIgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8xLkljb24sIHsgbmFtZTogaWNvbiwgY29sb3I6IGljb25Db2xvciwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCB9KSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KElucHV0Q29tcG9uZW50LCB7IGNsYXNzTmFtZTogaW5wdXRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lLCB0eXBlOiB0eXBlLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogb25DaGFuZ2UgfSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXRcIiB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIHsgY2xhc3NOYW1lOiBpbnB1dENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUsIHR5cGU6IHR5cGUsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSB9KSkpO1xuICAgIH1cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBJbnB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlucHV0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBMYWJlbCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIHNpemUgPSBfYS5zaXplLCB3ZWlnaHQgPSBfYS53ZWlnaHQ7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgdmFyIHNpemVDbGFzcyA9IHNpemUgJiYgXCJ0eXBlLS1cIiArIHNpemU7XG4gICAgdmFyIHdlaWdodENsYXNzID0gd2VpZ2h0ICYmIFwidHlwZS0tXCIgKyB3ZWlnaHQ7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJsYWJlbCBcIiArIHNpemVDbGFzcyArIFwiIFwiICsgd2VpZ2h0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSB9LCBjaGlsZHJlbikpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IExhYmVsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGFiZWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgcmVhY3Rfb3V0c2lkZV9jbGlja19oYW5kbGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlclwiKSk7XG52YXIgU2VsZWN0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCBvcHRpb25zID0gX2Eub3B0aW9ucywgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgb25FeHBhbmQgPSBfYS5vbkV4cGFuZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgX2MgPSByZWFjdF8xLnVzZVN0YXRlKGZhbHNlKSwgaXNFeHBhbmRlZCA9IF9jWzBdLCBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPT09IHZhbHVlO1xuICAgIH0pKSwgc2VsZWN0ZWRPcHRpb24gPSBfZFswXSwgb25TZWxlY3RPcHRpb24gPSBfZFsxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uRXhwYW5kICYmIG9uRXhwYW5kKGlzRXhwYW5kZWQpO1xuICAgIH0sIFtpc0V4cGFuZGVkXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkNoYW5nZSAmJiBzZWxlY3RlZE9wdGlvbiAmJiBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbik7XG4gICAgfSwgW3NlbGVjdGVkT3B0aW9uXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV3U2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgb25TZWxlY3RPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pO1xuICAgIH0sIFtkZWZhdWx0VmFsdWVdKTtcbiAgICB2YXIgaGFuZGxlRXhwYW5kQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UoIWlzRXhwYW5kZWQpOyB9O1xuICAgIHZhciBoYW5kbGVPdXRzaWRlQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UoZmFsc2UpOyB9O1xuICAgIHZhciBoYW5kbGVTZWxlY3RDbGljayA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgbmV3T3B0aW9uID0gb3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHYgPSBfYS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2ID09PSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZShmYWxzZSk7XG4gICAgICAgIG9uU2VsZWN0T3B0aW9uKG5ld09wdGlvbik7XG4gICAgfTtcbiAgICB2YXIgZXhwYW5kQnV0dG9uQ2xhc3MgPSBpc0V4cGFuZGVkID8gXCJzZWxlY3QtbWVudV9fYnV0dG9uLS1hY3RpdmVcIiA6IFwiXCI7XG4gICAgdmFyIGV4cGFuTGlzdENsYXNzID0gaXNFeHBhbmRlZCA/IFwic2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZVwiIDogXCJcIjtcbiAgICB2YXIgZGlzYWJsZWRDb2xvckNsYXNzID0gaXNEaXNhYmxlZCA/IFwiaWNvbi0tYmxhY2stM1wiIDogXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0X291dHNpZGVfY2xpY2tfaGFuZGxlcl8xLmRlZmF1bHQsIHsgb25PdXRzaWRlQ2xpY2s6IGhhbmRsZU91dHNpZGVDbGljaywgZGlzYWJsZWQ6ICFpc0V4cGFuZGVkIH0sXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51IFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fYnV0dG9uIFwiICsgZXhwYW5kQnV0dG9uQ2xhc3MgKyBcIiBcIiArIGRpc2FibGVkQ29sb3JDbGFzcywgb25DbGljazogaGFuZGxlRXhwYW5kQ2xpY2ssIGRpc2FibGVkOiBpc0Rpc2FibGVkLCB0aXRsZTogc2VsZWN0ZWRPcHRpb24gPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkT3B0aW9uLnRpdGxlLCB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19sYWJlbFwiIH0sIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi5sYWJlbCkgfHwgcGxhY2Vob2xkZXIpLFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fY2FyZXRcIiB9KSksXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19tZW51IFwiICsgZXhwYW5MaXN0Q2xhc3MgKyBcIiBcIiArIGRpc2FibGVkQ29sb3JDbGFzcywgc3R5bGU6IHsgdG9wOiBcIi0yNHB4XCIgfSB9LCBvcHRpb25zICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKF9hLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLCBsYWJlbCA9IF9hLmxhYmVsLCBkaXZpZGVyID0gX2EuZGl2aWRlciwgdGl0bGUgPSBfYS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXIgPyAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3RfMS5kZWZhdWx0LkZyYWdtZW50LCB7IGtleTogXCJzZWxlY3Qtb3B0aW9uLWRpdmlkZXItLVwiICsgaSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlciAhPT0gdHJ1ZSAmJiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19kaXZpZGVyLWxhYmVsXCIgfSwgZGl2aWRlcikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2RpdmlkZXJcIiwga2V5OiBcInNlbGVjdC1vcHRpb24tLVwiICsgaSB9KSkpIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2l0ZW0gXCIgKyAoc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24udmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiKSwgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFuZGxlU2VsZWN0Q2xpY2sodmFsdWUpOyB9LCBrZXk6IFwic2VsZWN0LW9wdGlvbi0tXCIgKyBpLCB0aXRsZTogdGl0bGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbS1pY29uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2l0ZW0tbGFiZWxcIiB9LCBsYWJlbCkpKTtcbiAgICAgICAgICAgICAgICB9KSkpKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gU2VsZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VsZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJ0eXBlIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIGNoaWxkcmVuKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRleHQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRhcmVhID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgX2IgPSBfYS5yb3dzLCByb3dzID0gX2IgPT09IHZvaWQgMCA/IDIgOiBfYiwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgeyByb3dzOiByb3dzLCBjbGFzc05hbWU6IFwidGV4dGFyZWEgXCIgKyBjbGFzc05hbWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUsIGV2ZW50KTsgfSB9KSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGV4dGFyZWE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZXh0YXJlYS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgXzEgPSByZXF1aXJlKFwiLi9cIik7XG52YXIgVGV4dCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGljb25OYW1lID0gX2EuaWNvbk5hbWUsIGljb25UZXh0ID0gX2EuaWNvblRleHQsIGljb25Db2xvciA9IF9hLmljb25Db2xvcjtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm9uYm9hcmRpbmctdGlwIFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgIGljb25OYW1lICYmIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJvbmJvYXJkaW5nLXRpcF9faWNvblwiIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfMS5JY29uLCB7IG5hbWU6IGljb25OYW1lLCBjb2xvcjogaWNvbkNvbG9yLCB0ZXh0OiBpY29uVGV4dCB9KSkpLFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0eXBlIG9uYm9hcmRpbmctdGlwX19tc2dcIiB9LCBjaGlsZHJlbikpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUaXRsZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGxldmVsID0gX2EubGV2ZWwsIHNpemUgPSBfYS5zaXplLCB3ZWlnaHQgPSBfYS53ZWlnaHQ7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgbGV2ZWwgPSBsZXZlbCB8fCBcImgxXCI7XG4gICAgdmFyIHNpemVDbGFzcyA9IHNpemUgJiYgXCJ0eXBlLS1cIiArIHNpemU7XG4gICAgdmFyIHdlaWdodENsYXNzID0gd2VpZ2h0ICYmIFwidHlwZS0tXCIgKyB3ZWlnaHQ7XG4gICAgdmFyIGhlYWRlckNsYXNzTmFtZSA9IFwic2VjdGlvbi10aXRsZSBcIiArIHNpemVDbGFzcyArIFwiIFwiICsgd2VpZ2h0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZTtcbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICAgIGNhc2UgXCJoMVwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDFcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoM1wiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNFwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNlwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDZcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICB9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGl0bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaXRsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VsZWN0ID0gZXhwb3J0cy5UZXh0YXJlYSA9IGV4cG9ydHMuVGlwID0gZXhwb3J0cy5UZXh0ID0gZXhwb3J0cy5MYWJlbCA9IGV4cG9ydHMuVGl0bGUgPSBleHBvcnRzLkljb24gPSBleHBvcnRzLklucHV0ID0gZXhwb3J0cy5EaXNjbG9zdXJlID0gZXhwb3J0cy5DaGVja2JveCA9IGV4cG9ydHMuQnV0dG9uID0gdm9pZCAwO1xudmFyIEJ1dHRvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0J1dHRvblwiKSk7XG5leHBvcnRzLkJ1dHRvbiA9IEJ1dHRvbl8xLmRlZmF1bHQ7XG52YXIgQ2hlY2tib3hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9DaGVja2JveFwiKSk7XG5leHBvcnRzLkNoZWNrYm94ID0gQ2hlY2tib3hfMS5kZWZhdWx0O1xudmFyIERpc2Nsb3N1cmVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9EaXNjbG9zdXJlXCIpKTtcbmV4cG9ydHMuRGlzY2xvc3VyZSA9IERpc2Nsb3N1cmVfMS5kZWZhdWx0O1xudmFyIElucHV0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSW5wdXRcIikpO1xuZXhwb3J0cy5JbnB1dCA9IElucHV0XzEuZGVmYXVsdDtcbnZhciBJY29uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSWNvblwiKSk7XG5leHBvcnRzLkljb24gPSBJY29uXzEuZGVmYXVsdDtcbnZhciBUaXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RpdGxlXCIpKTtcbmV4cG9ydHMuVGl0bGUgPSBUaXRsZV8xLmRlZmF1bHQ7XG52YXIgTGFiZWxfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9MYWJlbFwiKSk7XG5leHBvcnRzLkxhYmVsID0gTGFiZWxfMS5kZWZhdWx0O1xudmFyIFRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9UZXh0XCIpKTtcbmV4cG9ydHMuVGV4dCA9IFRleHRfMS5kZWZhdWx0O1xudmFyIFRpcF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RpcFwiKSk7XG5leHBvcnRzLlRpcCA9IFRpcF8xLmRlZmF1bHQ7XG52YXIgVGV4dGFyZWFfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9UZXh0YXJlYVwiKSk7XG5leHBvcnRzLlRleHRhcmVhID0gVGV4dGFyZWFfMS5kZWZhdWx0O1xudmFyIFNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1NlbGVjdFwiKSk7XG5leHBvcnRzLlNlbGVjdCA9IFNlbGVjdF8xLmRlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9maWdtYS1wbHVnaW4tZHMuY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxudmFyIF9haXJibmJQcm9wVHlwZXMgPSByZXF1aXJlKCdhaXJibmItcHJvcC10eXBlcycpO1xuXG52YXIgX2NvbnNvbGlkYXRlZEV2ZW50cyA9IHJlcXVpcmUoJ2NvbnNvbGlkYXRlZC1ldmVudHMnKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKCdvYmplY3QudmFsdWVzJyk7XG5cbnZhciBfb2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdCk7XG5cbnZhciBfZG9jdW1lbnQgPSByZXF1aXJlKCdkb2N1bWVudC5jb250YWlucycpO1xuXG52YXIgX2RvY3VtZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RvY3VtZW50KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBESVNQTEFZID0ge1xuICBCTE9DSzogJ2Jsb2NrJyxcbiAgRkxFWDogJ2ZsZXgnLFxuICBJTkxJTkU6ICdpbmxpbmUnLFxuICBJTkxJTkVfQkxPQ0s6ICdpbmxpbmUtYmxvY2snLFxuICBDT05URU5UUzogJ2NvbnRlbnRzJ1xufTtcblxudmFyIHByb3BUeXBlcyA9ICgwLCBfYWlyYm5iUHJvcFR5cGVzLmZvcmJpZEV4dHJhUHJvcHMpKHtcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMyWydkZWZhdWx0J10ubm9kZS5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5mdW5jLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmJvb2wsXG4gIHVzZUNhcHR1cmU6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYm9vbCxcbiAgZGlzcGxheTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vbmVPZigoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoRElTUExBWSkpXG59KTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuXG4gIC8vIGB1c2VDYXB0dXJlYCBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0IHNvIHRoYXQgYSBgc3RvcFByb3BhZ2F0aW9uYCBpbiB0aGVcbiAgLy8gY2hpbGRyZW4gd2lsbCBub3QgcHJldmVudCBhbGwgb3V0c2lkZSBjbGljayBoYW5kbGVycyBmcm9tIGZpcmluZyAtIG1hamFcbiAgdXNlQ2FwdHVyZTogdHJ1ZSxcbiAgZGlzcGxheTogRElTUExBWS5CTE9DS1xufTtcblxudmFyIE91dHNpZGVDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoT3V0c2lkZUNsaWNrSGFuZGxlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gT3V0c2lkZUNsaWNrSGFuZGxlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPdXRzaWRlQ2xpY2tIYW5kbGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gT3V0c2lkZUNsaWNrSGFuZGxlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE91dHNpZGVDbGlja0hhbmRsZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgIF90aGlzLm9uTW91c2VEb3duID0gX3RoaXMub25Nb3VzZURvd24uYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25Nb3VzZVVwID0gX3RoaXMub25Nb3VzZVVwLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLnNldENoaWxkTm9kZVJlZiA9IF90aGlzLnNldENoaWxkTm9kZVJlZi5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoT3V0c2lkZUNsaWNrSGFuZGxlciwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgdXNlQ2FwdHVyZSA9IF9wcm9wcy51c2VDYXB0dXJlO1xuXG5cbiAgICAgICAgaWYgKCFkaXNhYmxlZCkgdGhpcy5hZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50RGlkTW91bnQ7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoX3JlZjIpIHtcbiAgICAgICAgdmFyIHByZXZEaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXNhYmxlZCA9IF9wcm9wczIuZGlzYWJsZWQsXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gX3Byb3BzMi51c2VDYXB0dXJlO1xuXG4gICAgICAgIGlmIChwcmV2RGlzYWJsZWQgIT09IGRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTW91c2VEb3duRXZlbnRMaXN0ZW5lcih1c2VDYXB0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudERpZFVwZGF0ZTtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudFdpbGxVbm1vdW50O1xuICAgIH0oKVxuXG4gICAgLy8gVXNlIG1vdXNlZG93bi9tb3VzZXVwIHRvIGVuZm9yY2UgdGhhdCBjbGlja3MgcmVtYWluIG91dHNpZGUgdGhlIHJvb3Qnc1xuICAgIC8vIGRlc2NlbmRhbnQgdHJlZSwgZXZlbiB3aGVuIGRyYWdnZWQuIFRoaXMgc2hvdWxkIGFsc28gZ2V0IHRyaWdnZXJlZCBvblxuICAgIC8vIHRvdWNoIGRldmljZXMuXG5cbiAgfSwge1xuICAgIGtleTogJ29uTW91c2VEb3duJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICB2YXIgdXNlQ2FwdHVyZSA9IHRoaXMucHJvcHMudXNlQ2FwdHVyZTtcblxuXG4gICAgICAgIHZhciBpc0Rlc2NlbmRhbnRPZlJvb3QgPSB0aGlzLmNoaWxkTm9kZSAmJiAoMCwgX2RvY3VtZW50MlsnZGVmYXVsdCddKSh0aGlzLmNoaWxkTm9kZSwgZS50YXJnZXQpO1xuICAgICAgICBpZiAoIWlzRGVzY2VuZGFudE9mUm9vdCkge1xuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VVcCgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gKDAsIF9jb25zb2xpZGF0ZWRFdmVudHMuYWRkRXZlbnRMaXN0ZW5lcikoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXAsIHsgY2FwdHVyZTogdXNlQ2FwdHVyZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb25Nb3VzZURvd247XG4gICAgfSgpXG5cbiAgICAvLyBVc2UgbW91c2Vkb3duL21vdXNldXAgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyByZW1haW4gb3V0c2lkZSB0aGUgcm9vdCdzXG4gICAgLy8gZGVzY2VuZGFudCB0cmVlLCBldmVuIHdoZW4gZHJhZ2dlZC4gVGhpcyBzaG91bGQgYWxzbyBnZXQgdHJpZ2dlcmVkIG9uXG4gICAgLy8gdG91Y2ggZGV2aWNlcy5cblxuICB9LCB7XG4gICAga2V5OiAnb25Nb3VzZVVwJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHtcbiAgICAgICAgdmFyIG9uT3V0c2lkZUNsaWNrID0gdGhpcy5wcm9wcy5vbk91dHNpZGVDbGljaztcblxuXG4gICAgICAgIHZhciBpc0Rlc2NlbmRhbnRPZlJvb3QgPSB0aGlzLmNoaWxkTm9kZSAmJiAoMCwgX2RvY3VtZW50MlsnZGVmYXVsdCddKSh0aGlzLmNoaWxkTm9kZSwgZS50YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZVVwKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwKCk7XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNEZXNjZW5kYW50T2ZSb290KSB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9uTW91c2VVcDtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ3NldENoaWxkTm9kZVJlZicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIHNldENoaWxkTm9kZVJlZihyZWYpIHtcbiAgICAgICAgdGhpcy5jaGlsZE5vZGUgPSByZWY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXRDaGlsZE5vZGVSZWY7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdhZGRNb3VzZURvd25FdmVudExpc3RlbmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gYWRkTW91c2VEb3duRXZlbnRMaXN0ZW5lcih1c2VDYXB0dXJlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VEb3duID0gKDAsIF9jb25zb2xpZGF0ZWRFdmVudHMuYWRkRXZlbnRMaXN0ZW5lcikoZG9jdW1lbnQsICdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB7IGNhcHR1cmU6IHVzZUNhcHR1cmUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhZGRNb3VzZURvd25FdmVudExpc3RlbmVyO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAncmVtb3ZlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlTW91c2VEb3duKSB0aGlzLnJlbW92ZU1vdXNlRG93bigpO1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZVVwKSB0aGlzLnJlbW92ZU1vdXNlVXAoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgICBkaXNwbGF5ID0gX3Byb3BzMy5kaXNwbGF5O1xuXG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogdGhpcy5zZXRDaGlsZE5vZGVSZWYsXG4gICAgICAgICAgICBzdHlsZTogZGlzcGxheSAhPT0gRElTUExBWS5CTE9DSyAmJiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoRElTUExBWSkuaW5jbHVkZXMoZGlzcGxheSkgPyB7IGRpc3BsYXk6IGRpc3BsYXkgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9KClcbiAgfV0pO1xuXG4gIHJldHVybiBPdXRzaWRlQ2xpY2tIYW5kbGVyO1xufShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gT3V0c2lkZUNsaWNrSGFuZGxlcjtcblxuXG5PdXRzaWRlQ2xpY2tIYW5kbGVyLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbk91dHNpZGVDbGlja0hhbmRsZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzOyIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXInKTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG5leHBvcnRzLlN0cmljdE1vZGUgPSAweGVhY2M7XG5leHBvcnRzLlByb2ZpbGVyID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG5leHBvcnRzLlN1c3BlbnNlID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgZXhwb3J0cy5TdHJpY3RNb2RlID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBleHBvcnRzLlByb2ZpbGVyID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgZXhwb3J0cy5TdXNwZW5zZSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogMFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbl9hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5cbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIGV4cG9ydHMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdHJpY3RNb2RlOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gJycgKyBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG4gICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gZGVmYXVsdEV4cG9ydDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHJldHVybiBwYXlsb2FkLl9yZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogLTEsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAocmVuZGVyLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IGV4cG9ydHMuUHJvZmlsZXIgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdHJpY3RNb2RlIHx8IHR5cGUgPT09IGV4cG9ydHMuU3VzcGVuc2UgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgaWYgKHVuc3RhYmxlX29ic2VydmVkQml0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcigndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyA6ICcnKTtcbiAgICB9IC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cyk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxue1xuXG4gIHRyeSB7XG4gICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW2Zyb3plbk9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtmcm96ZW5PYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5O1xuZXhwb3J0cy5jcmVhdGVSZWYgPSBjcmVhdGVSZWY7XG5leHBvcnRzLmZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuZXhwb3J0cy5sYXp5ID0gbGF6eTtcbmV4cG9ydHMubWVtbyA9IG1lbW87XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgREVGQVVMVF9USFJFQURfSUQgPSAwOyAvLyBDb3VudGVycyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuXG5cbnZhciBpbnRlcmFjdGlvbklEQ291bnRlciA9IDA7XG52YXIgdGhyZWFkSURDb3VudGVyID0gMDsgLy8gU2V0IG9mIGN1cnJlbnRseSB0cmFjZWQgaW50ZXJhY3Rpb25zLlxuLy8gSW50ZXJhY3Rpb25zIFwic3RhY2tcIuKAk1xuLy8gTWVhbmluZyB0aGF0IG5ld2x5IHRyYWNlZCBpbnRlcmFjdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBzZXQuXG4vLyBXaGVuIGFuIGludGVyYWN0aW9uIGdvZXMgb3V0IG9mIHNjb3BlLCB0aGUgcHJldmlvdXMgc2V0IChpZiBhbnkpIGlzIHJlc3RvcmVkLlxuXG5leHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0gbnVsbDsgLy8gTGlzdGVuZXIocykgdG8gbm90aWZ5IHdoZW4gaW50ZXJhY3Rpb25zIGJlZ2luIGFuZCBlbmQuXG5cbmV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0gbnVsbDtcblxue1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0ge1xuICAgIGN1cnJlbnQ6IG5ldyBTZXQoKVxuICB9O1xuICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9jbGVhcihjYWxsYmFjaykge1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50KCkge1xuICB7XG4gICAgcmV0dXJuIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0VGhyZWFkSUQoKSB7XG4gIHJldHVybiArK3RocmVhZElEQ291bnRlcjtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3RyYWNlKG5hbWUsIHRpbWVzdGFtcCwgY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgaW50ZXJhY3Rpb24gPSB7XG4gICAgX19jb3VudDogMSxcbiAgICBpZDogaW50ZXJhY3Rpb25JRENvdW50ZXIrKyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gIH07XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50OyAvLyBUcmFjZWQgaW50ZXJhY3Rpb25zIHNob3VsZCBzdGFjay9hY2N1bXVsYXRlLlxuICAvLyBUbyBkbyB0aGF0LCBjbG9uZSB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFRoZSBwcmV2aW91cyBzZXQgd2lsbCBiZSByZXN0b3JlZCB1cG9uIGNvbXBsZXRpb24uXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07IC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFVwZGF0ZSBhZnRlciBjYWxsaW5nIHN1YnNjcmliZXJzIGluIGNhc2Ugb2YgZXJyb3IuXG5cblxuICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICB9KTtcbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFoYXNSdW4pIHtcbiAgICAgICAgLy8gV2Ugb25seSBleHBlY3QgYSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UsXG4gICAgICAgIC8vIEJ1dCBpbiB0aGUgZXZlbnQgdGhhdCBpdCdzIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNl4oCTXG4gICAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBvdXRzdGFuZGluZyBpbnRlcmFjdGlvbiBjb3VudHMgb25jZS5cbiAgICAgICAgaGFzUnVuID0gdHJ1ZTsgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cblxuICAgICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cmFwcGVkLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgaWYgKHN1YnNjcmliZXIgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbnZhciBzdWJzY3JpYmVycyA9IG51bGw7XG5cbntcbiAgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3N1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IHtcbiAgICAgICAgb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQ6IG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkLFxuICAgICAgICBvbkludGVyYWN0aW9uVHJhY2VkOiBvbkludGVyYWN0aW9uVHJhY2VkLFxuICAgICAgICBvbldvcmtDYW5jZWxlZDogb25Xb3JrQ2FuY2VsZWQsXG4gICAgICAgIG9uV29ya1NjaGVkdWxlZDogb25Xb3JrU2NoZWR1bGVkLFxuICAgICAgICBvbldvcmtTdGFydGVkOiBvbldvcmtTdGFydGVkLFxuICAgICAgICBvbldvcmtTdG9wcGVkOiBvbldvcmtTdG9wcGVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfdW5zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5leHBvcnRzLnVuc3RhYmxlX2NsZWFyID0gdW5zdGFibGVfY2xlYXI7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnQgPSB1bnN0YWJsZV9nZXRDdXJyZW50O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRUaHJlYWRJRCA9IHVuc3RhYmxlX2dldFRocmVhZElEO1xuZXhwb3J0cy51bnN0YWJsZV9zdWJzY3JpYmUgPSB1bnN0YWJsZV9zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3RyYWNlID0gdW5zdGFibGVfdHJhY2U7XG5leHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlID0gdW5zdGFibGVfdW5zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXAgPSB1bnN0YWJsZV93cmFwO1xuICB9KSgpO1xufVxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgPSBmYWxzZTtcbnZhciBlbmFibGVQcm9maWxpbmcgPSBmYWxzZTtcblxudmFyIHJlcXVlc3RIb3N0Q2FsbGJhY2s7XG52YXIgcmVxdWVzdEhvc3RUaW1lb3V0O1xudmFyIGNhbmNlbEhvc3RUaW1lb3V0O1xudmFyIHJlcXVlc3RQYWludDtcbnZhciBoYXNQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcblxuaWYgKGhhc1BlcmZvcm1hbmNlTm93KSB7XG4gIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgdmFyIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcbn1cblxuaWYgKCAvLyBJZiBTY2hlZHVsZXIgcnVucyBpbiBhIG5vbi1ET00gZW52aXJvbm1lbnQsIGl0IGZhbGxzIGJhY2sgdG8gYSBuYWl2ZVxuLy8gaW1wbGVtZW50YXRpb24gdXNpbmcgc2V0VGltZW91dC5cbnR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IC8vIENoZWNrIGlmIE1lc3NhZ2VDaGFubmVsIGlzIHN1cHBvcnRlZCwgdG9vLlxudHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAnZnVuY3Rpb24nKSB7XG4gIC8vIElmIHRoaXMgYWNjaWRlbnRhbGx5IGdldHMgaW1wb3J0ZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgZS5nLiBKYXZhU2NyaXB0Q29yZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgdmFyIF9jYWxsYmFjayA9IG51bGw7XG4gIHZhciBfdGltZW91dElEID0gbnVsbDtcblxuICB2YXIgX2ZsdXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgdmFyIGhhc1JlbWFpbmluZ1RpbWUgPSB0cnVlO1xuXG4gICAgICAgIF9jYWxsYmFjayhoYXNSZW1haW5pbmdUaW1lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAvLyBQcm90ZWN0IGFnYWluc3QgcmUtZW50cmFuY3kuXG4gICAgICBzZXRUaW1lb3V0KHJlcXVlc3RIb3N0Q2FsbGJhY2ssIDAsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NhbGxiYWNrID0gY2I7XG4gICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNiLCBtcykge1xuICAgIF90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGNiLCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KF90aW1lb3V0SUQpO1xuICB9O1xuXG4gIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJlcXVlc3RQYWludCA9IGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoKSB7fTtcbn0gZWxzZSB7XG4gIC8vIENhcHR1cmUgbG9jYWwgcmVmZXJlbmNlcyB0byBuYXRpdmUgQVBJcywgaW4gY2FzZSBhIHBvbHlmaWxsIG92ZXJyaWRlcyB0aGVtLlxuICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDtcbiAgdmFyIF9jbGVhclRpbWVvdXQgPSB3aW5kb3cuY2xlYXJUaW1lb3V0O1xuXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiBTY2hlZHVsZXIgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZXNlIG1ldGhvZHMgdG8gYmUgcG9seWZpbGxlZC4gQnV0XG4gICAgLy8gbWF5YmUgd2Ugd2FudCB0byBjb250aW51ZSB3YXJuaW5nIGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHRvIHByZXNlcnZlIHRoZVxuICAgIC8vIG9wdGlvbiB0byByZWx5IG9uIGl0IGluIHRoZSBmdXR1cmU/XG4gICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgdmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gIHZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuICAvLyB0aHJlYWQsIGxpa2UgdXNlciBldmVudHMuIEJ5IGRlZmF1bHQsIGl0IHlpZWxkcyBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuXG4gIC8vIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gYWxpZ24gd2l0aCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSBtb3N0IHRhc2tzIGRvbid0XG4gIC8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbiAgdmFyIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICB2YXIgZGVhZGxpbmUgPSAwOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5cbiAge1xuICAgIC8vIGBpc0lucHV0UGVuZGluZ2AgaXMgbm90IGF2YWlsYWJsZS4gU2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZlxuICAgIC8vIHRoZXJlJ3MgcGVuZGluZyBpbnB1dCwgYWx3YXlzIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLlxuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSA+PSBkZWFkbGluZTtcbiAgICB9OyAvLyBTaW5jZSB3ZSB5aWVsZCBldmVyeSBmcmFtZSByZWdhcmRsZXNzLCBgcmVxdWVzdFBhaW50YCBoYXMgbm8gZWZmZWN0LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oJ2ZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCAnICsgJ2ZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZwcyA+IDApIHtcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSBNYXRoLmZsb29yKDEwMDAgLyBmcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCB0aGUgZnJhbWVyYXRlXG4gICAgICB5aWVsZEludGVydmFsID0gNTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2NoZWR1bGVkSG9zdENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBZaWVsZCBhZnRlciBgeWllbGRJbnRlcnZhbGAgbXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgd2UgYXJlIGluIHRoZSB2c3luY1xuICAgICAgLy8gY3ljbGUuIFRoaXMgbWVhbnMgdGhlcmUncyBhbHdheXMgdGltZSByZW1haW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZlxuICAgICAgLy8gdGhlIG1lc3NhZ2UgZXZlbnQuXG5cbiAgICAgIGRlYWRsaW5lID0gY3VycmVudFRpbWUgKyB5aWVsZEludGVydmFsO1xuICAgICAgdmFyIGhhc1RpbWVSZW1haW5pbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaGFzTW9yZVdvcmsgPSBzY2hlZHVsZWRIb3N0Q2FsbGJhY2soaGFzVGltZVJlbWFpbmluZywgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIGlmICghaGFzTW9yZVdvcmspIHtcbiAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHdvcmssIHNjaGVkdWxlIHRoZSBuZXh0IG1lc3NhZ2UgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBwcmVjZWRpbmcgb25lLlxuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGEgc2NoZWR1bGVyIHRhc2sgdGhyb3dzLCBleGl0IHRoZSBjdXJyZW50IGJyb3dzZXIgdGFzayBzbyB0aGVcbiAgICAgICAgLy8gZXJyb3IgY2FuIGJlIG9ic2VydmVkLlxuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9IC8vIFlpZWxkaW5nIHRvIHRoZSBicm93c2VyIHdpbGwgZ2l2ZSBpdCBhIGNoYW5jZSB0byBwYWludCwgc28gd2UgY2FuXG4gIH07XG5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICBpZiAoIWlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IHRydWU7XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgdGFza1RpbWVvdXRJRCA9IF9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgIH0sIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuXG4gICAgdGFza1RpbWVvdXRJRCA9IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgc2lmdFVwKGhlYXAsIG5vZGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuICByZXR1cm4gZmlyc3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBmaXJzdDtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG5cbiAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbGFzdCA9IGhlYXAucG9wKCk7XG5cbiAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgc2lmdERvd24oaGVhcCwgbGFzdCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnRVcChoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBpbmRleCAtIDEgPj4+IDE7XG4gICAgdmFyIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocGFyZW50LCBub2RlKSA+IDApIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbGFyZ2VyLiBTd2FwIHBvc2l0aW9ucy5cbiAgICAgIGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZTtcbiAgICAgIGhlYXBbaW5kZXhdID0gcGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG4gIHZhciBsZW5ndGggPSBoZWFwLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUobGVmdCwgbm9kZSkgPCAwKSB7XG4gICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBsZWZ0KSA8IDApIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gbGVmdDtcbiAgICAgICAgaGVhcFtsZWZ0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSBsZWZ0SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIG5vZGUpIDwgMCkge1xuICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGNoaWxkIGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAvLyBDb21wYXJlIHNvcnQgaW5kZXggZmlyc3QsIHRoZW4gdGFzayBpZC5cbiAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICByZXR1cm4gZGlmZiAhPT0gMCA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbn1cblxuLy8gVE9ETzogVXNlIHN5bWJvbHM/XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDM7XG52YXIgTG93UHJpb3JpdHkgPSA0O1xudmFyIElkbGVQcmlvcml0eSA9IDU7XG5cbmZ1bmN0aW9uIG1hcmtUYXNrRXJyb3JlZCh0YXNrLCBtcykge1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG5cbnZhciBtYXhTaWduZWQzMUJpdEludCA9IDEwNzM3NDE4MjM7IC8vIFRpbWVzIG91dCBpbW1lZGlhdGVseVxuXG52YXIgSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQgPSAtMTsgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcblxudmFyIFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVCA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDsgLy8gTmV2ZXIgdGltZXMgb3V0XG5cbnZhciBJRExFX1BSSU9SSVRZX1RJTUVPVVQgPSBtYXhTaWduZWQzMUJpdEludDsgLy8gVGFza3MgYXJlIHN0b3JlZCBvbiBhIG1pbiBoZWFwXG5cbnZhciB0YXNrUXVldWUgPSBbXTtcbnZhciB0aW1lclF1ZXVlID0gW107IC8vIEluY3JlbWVudGluZyBpZCBjb3VudGVyLiBVc2VkIHRvIG1haW50YWluIGluc2VydGlvbiBvcmRlci5cblxudmFyIHRhc2tJZENvdW50ZXIgPSAxOyAvLyBQYXVzaW5nIHRoZSBzY2hlZHVsZXIgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG52YXIgY3VycmVudFRhc2sgPSBudWxsO1xudmFyIGN1cnJlbnRQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7IC8vIFRoaXMgaXMgc2V0IHdoaWxlIHBlcmZvcm1pbmcgd29yaywgdG8gcHJldmVudCByZS1lbnRyYW5jeS5cblxudmFyIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbnZhciBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xudmFyIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAvLyBDaGVjayBmb3IgdGFza3MgdGhhdCBhcmUgbm8gbG9uZ2VyIGRlbGF5ZWQgYW5kIGFkZCB0aGVtIHRvIHRoZSBxdWV1ZS5cbiAgdmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICB3aGlsZSAodGltZXIgIT09IG51bGwpIHtcbiAgICBpZiAodGltZXIuY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRpbWVyIHdhcyBjYW5jZWxsZWQuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRpbWVyIGZpcmVkLiBUcmFuc2ZlciB0byB0aGUgdGFzayBxdWV1ZS5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgIHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lO1xuICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtYWluaW5nIHRpbWVycyBhcmUgcGVuZGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpIHtcbiAgICBpZiAocGVlayh0YXNrUXVldWUpICE9PSBudWxsKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcblxuXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAvLyBXZSBzY2hlZHVsZWQgYSB0aW1lb3V0IGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuIENhbmNlbCBpdC5cbiAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICBtYXJrVGFza0Vycm9yZWQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICBjdXJyZW50VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNhdGNoIGluIHByb2QgY29kZSBwYXRoLlxuICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFRhc2sgPSBudWxsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyApKSB7XG4gICAgaWYgKGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgKCFoYXNUaW1lUmVtYWluaW5nIHx8IGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsO1xuICAgICAgdmFyIGRpZFVzZXJDYWxsYmFja1RpbWVvdXQgPSBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZTtcblxuICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soZGlkVXNlckNhbGxiYWNrVGltZW91dCk7XG4gICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkpIHtcbiAgICAgICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIH0gLy8gUmV0dXJuIHdoZXRoZXIgdGhlcmUncyBhZGRpdGlvbmFsIHdvcmtcblxuXG4gIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX25leHQoZXZlbnRIYW5kbGVyKSB7XG4gIHZhciBwcmlvcml0eUxldmVsO1xuXG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIC8vIFNoaWZ0IGRvd24gdG8gbm9ybWFsIHByaW9yaXR5XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBydW5XaXRoUHJpb3JpdHksIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICB2YXIgc3RhcnRUaW1lO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIHZhciBkZWxheSA9IG9wdGlvbnMuZGVsYXk7XG5cbiAgICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lICsgZGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIHZhciB0aW1lb3V0O1xuXG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJRExFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gTE9XX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVvdXQgPSBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgdGltZW91dDtcbiAgdmFyIG5ld1Rhc2sgPSB7XG4gICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICBleHBpcmF0aW9uVGltZTogZXhwaXJhdGlvblRpbWUsXG4gICAgc29ydEluZGV4OiAtMVxuICB9O1xuXG4gIGlmIChzdGFydFRpbWUgPiBjdXJyZW50VGltZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkZWxheWVkIHRhc2suXG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBzdGFydFRpbWU7XG4gICAgcHVzaCh0aW1lclF1ZXVlLCBuZXdUYXNrKTtcblxuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgPT09IG51bGwgJiYgbmV3VGFzayA9PT0gcGVlayh0aW1lclF1ZXVlKSkge1xuICAgICAgLy8gQWxsIHRhc2tzIGFyZSBkZWxheWVkLCBhbmQgdGhpcyBpcyB0aGUgdGFzayB3aXRoIHRoZSBlYXJsaWVzdCBkZWxheS5cbiAgICAgIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgICAgIC8vIENhbmNlbCBhbiBleGlzdGluZyB0aW1lb3V0LlxuICAgICAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9IC8vIFNjaGVkdWxlIGEgdGltZW91dC5cblxuXG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IGV4cGlyYXRpb25UaW1lO1xuICAgIHB1c2godGFza1F1ZXVlLCBuZXdUYXNrKTtcbiAgICAvLyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG5cblxuICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3VGFzaztcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcGF1c2VFeGVjdXRpb24oKSB7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uKCkge1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlKCkge1xuICByZXR1cm4gcGVlayh0YXNrUXVldWUpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayh0YXNrKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBxdWV1ZSBiZWNhdXNlIHlvdSBjYW4ndCByZW1vdmUgYXJiaXRyYXJ5IG5vZGVzIGZyb20gYW5cbiAgLy8gYXJyYXkgYmFzZWQgaGVhcCwgb25seSB0aGUgZmlyc3Qgb25lLilcblxuXG4gIHRhc2suY2FsbGJhY2sgPSBudWxsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufVxuXG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gcmVxdWVzdFBhaW50O1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9ICBudWxsO1xuXG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSBMb3dQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nID0gdW5zdGFibGVfUHJvZmlsaW5nO1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gdW5zdGFibGVfbmV4dDtcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzT2xkSUUgPSBmdW5jdGlvbiBpc09sZElFKCkge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKCkge1xuICAgIGlmICh0eXBlb2YgbWVtbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG4gICAgICAvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG4gICAgICAvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuICAgICAgbWVtbyA9IEJvb2xlYW4od2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2IpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICB2YXIgbWVtbyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vW3RhcmdldF07XG4gIH07XG59KCk7XG5cbnZhciBzdHlsZXNJbkRvbSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRG9tLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM11cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc0luRG9tLnB1c2goe1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiBhZGRTdHlsZShvYmosIG9wdGlvbnMpLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgYXR0cmlidXRlcy5ub25jZSA9IG5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKS5jb25jYXQob2JqLmNzcywgXCJ9XCIpIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJyk7XG4gIH1cblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0xpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRG9tW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRvbVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRvbS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRFMklpQm9aV2xuYUhROUlqZ3dJaUIyYVdWM1FtOTRQU0l3SURBZ01URTJJRGd3SWlCbWFXeHNQU0p1YjI1bElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnbzhaeUJqYkdsd0xYQmhkR2c5SW5WeWJDZ2pZMnhwY0RCZk9EQTFYek13T0RFNEtTSStDanh3WVhSb0lHUTlJazB3SURORE1DQXhMak0wTXpFMUlERXVNelF6TVRVZ01DQXpJREJJTVRFelF6RXhOQzQyTlRjZ01DQXhNVFlnTVM0ek5ETXhOU0F4TVRZZ00xWTRNRWd3VmpOYUlpQm1hV3hzUFNJak1FUXhNakV5SWk4K0NqeHlaV04wSUhkcFpIUm9QU0l4TVRnaUlHaGxhV2RvZEQwaU1qUWlJR1pwYkd3OUlpTXhPREl4TWpVaUx6NEtQSEJoZEdnZ1pEMGlUVEV5TGpVZ05ERkRNVEl1TlNBek9TNHdOamNnTVRRdU1EWTNJRE0zTGpVZ01UWWdNemN1TlVneE1UY3VOVlk0TUM0MVNERXlMalZXTkRGYUlpQm1hV3hzUFNJak1UZ3lNVEkxSWlCemRISnZhMlU5SWlNeVFUTTJNME1pTHo0S1BISmxZM1FnZUQwaU5EVWlJSGs5SWpZaUlIZHBaSFJvUFNJeU55SWdhR1ZwWjJoMFBTSXhNeUlnY25nOUlqTWlJR1pwYkd3OUlpTXpRVFEwTkVJaUx6NEtQSEpsWTNRZ2VEMGlOellpSUhrOUlqWWlJSGRwWkhSb1BTSXlOeUlnYUdWcFoyaDBQU0l4TXlJZ2NuZzlJak1pSUdacGJHdzlJaU16UVRRME5FSWlMejRLUEhKbFkzUWdlRDBpTVRBM0lpQjVQU0kySWlCM2FXUjBhRDBpTWpjaUlHaGxhV2RvZEQwaU1UTWlJSEo0UFNJeklpQm1hV3hzUFNJak0wRTBORFJDSWk4K0NqeHdZWFJvSUdROUlrMHlNeTQ1TVRJZ01URXVOamMzTlVNeU15NHpORGsySURrdU1ERTFNRFlnTWpBdU1qUTJJRGN1TkRRNE5qVWdNVFl1T1RneE1pQTRMakUzT1RVNVF6RXpMamN4TmpRZ09DNDVNRGszTnlBeE1TNDFNalUySURFeExqWTJNRGdnTVRJdU1EZzRJREUwTGpNeU1qVkRNVEl1TmpVd05TQXhOaTQ1T0RRNUlERTFMamMxTkNBeE9DNDFOVEV6SURFNUxqQXhPRGdnTVRjdU9ESXdORU15TWk0eU9ETTJJREUzTGpBNU1ESWdNalF1TkRjME5DQXhOQzR6TXprNUlESXpMamt4TWlBeE1TNDJOemMxV2sweE9DQXhOUzQwTlRReFF6RTJMalk0TWpNZ01UVXVORFUwTVNBeE5TNDJNVFE1SURFMExqTTFOVEVnTVRVdU5qRTBPU0F4TTBNeE5TNDJNVFE1SURFeExqWTBORGtnTVRZdU5qZ3pJREV3TGpVME5Ua2dNVGdnTVRBdU5UUTFPVU14T1M0ek1UY2dNVEF1TlRRMU9TQXlNQzR6T0RVeElERXhMalkwTkRJZ01qQXVNemcxTVNBeE0wTXlNQzR6T0RVeElERTBMak0xTlRnZ01Ua3VNekUzSURFMUxqUTFOREVnTVRnZ01UVXVORFUwTVZvaUlHWnBiR3c5SWlNd01EaERPVGtpTHo0S1BIQmhkR2dnWkQwaVRURTRMalV5TnpjZ09TNDFOalF4T0VNeE5pNDJNelkxSURrdU5UWTBNVGdnTVRVdU1UQXpNU0F4TVM0eE5ERTVJREUxTGpFd016RWdNVE11TURnM09FTXhOUzR4TURNeElERTFMakF6TXpjZ01UWXVOak0yTlNBeE5pNDJNVEUxSURFNExqVXlOemNnTVRZdU5qRXhOVU15TUM0ME1UazJJREUyTGpZeE1UVWdNakV1T1RVeklERTFMakF6TXpjZ01qRXVPVFV6SURFekxqQTROemhETWpFdU9UVXlNaUF4TVM0eE5ERTVJREl3TGpReE9Ea2dPUzQxTmpReE9DQXhPQzQxTWpjM0lEa3VOVFkwTVRoYVRURTNMams1T1RrZ01UVXVNVFF6TmtNeE5pNDRORGt6SURFMUxqRTBNellnTVRVdU9URTJOaUF4TkM0eE9ETTVJREUxTGpreE5qWWdNVE5ETVRVdU9URTJOaUF4TVM0NE1UWXhJREUyTGpnME9UTWdNVEF1T0RVMk5DQXhOeTQ1T1RrNUlERXdMamcxTmpSRE1Ua3VNVFV3TkNBeE1DNDROVFkwSURJd0xqQTRNekVnTVRFdU9ERTJNU0F5TUM0d09ETXhJREV6UXpJd0xqQTRNekVnTVRRdU1UZ3pPU0F4T1M0eE5UQTBJREUxTGpFME16WWdNVGN1T1RrNU9TQXhOUzR4TkRNMldpSWdabWxzYkQwaUl6Y3dRME5FTXlJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ea2lJSGRwWkhSb1BTSTNOQ0lnYUdWcFoyaDBQU0kySWlCeWVEMGlNU0lnWm1sc2JEMGlJek5CTkRRMFFpSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlOVGtpSUhkcFpIUm9QU0kxT1NJZ2FHVnBaMmgwUFNJNElpQnllRDBpTVNJZ1ptbHNiRDBpSXpOQk5EUTBRaUl2UGdvOEwyYytDanhrWldaelBnbzhZMnhwY0ZCaGRHZ2dhV1E5SW1Oc2FYQXdYemd3TlY4ek1EZ3hPQ0krQ2p4d1lYUm9JR1E5SWswd0lETkRNQ0F4TGpNME16RTFJREV1TXpRek1UVWdNQ0F6SURCSU1URXpRekV4TkM0Mk5UY2dNQ0F4TVRZZ01TNHpORE14TlNBeE1UWWdNMVk0TUVnd1ZqTmFJaUJtYVd4c1BTSjNhR2wwWlNJdlBnbzhMMk5zYVhCUVlYUm9QZ284TDJSbFpuTStDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpT0NJZ2FHVnBaMmgwUFNJeE15SWdkbWxsZDBKdmVEMGlNQ0F3SURnZ01UTWlJR1pwYkd3OUltNXZibVVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrQ2p4d1lYUm9JR1pwYkd3dGNuVnNaVDBpWlhabGJtOWtaQ0lnWTJ4cGNDMXlkV3hsUFNKbGRtVnViMlJrSWlCa1BTSk5OaTQySURFeUxqUk1NQzQ0TURBd01ETWdOaTQxTURBd01VdzJMallnTUM0Mk1EQXdNRFpNTnk0MElERXVOREF3TURGTU1pNHlJRFl1TlRBd01ERk1OeTQwSURFeExqWk1OaTQySURFeUxqUmFJaUJtYVd4c1BTSWpNamd6TmpNMklpOCtDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlNeFJqTXlORGNpTHo0S1BHTnBjbU5zWlNCamVEMGlNVFl1TlNJZ1kzazlJakUyTGpVaUlISTlJamt1TlNJZ2MzUnliMnRsUFNJak0wUTVSRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TXkxcGJuTnBaR1V0TVY4NE1ETmZNalEwT1RJaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHhOQzQyT0RJZ01qQXVORE15UXpFMExqZzNOeklnTWpBdU5qSTNNaUF4TlM0eE9UTTRJREl3TGpZeU56SWdNVFV1TXpnNU1TQXlNQzQwTXpKTU1UWXVNRGsyTWlBeE9TNDNNalE1VERJeExqWTFOVE1nTVRRdU1UWTFOME15TVM0NE5UQTJJREV6TGprM01EVWdNakV1T0RVd05pQXhNeTQyTlRNNUlESXhMalkxTlRNZ01UTXVORFU0Tmt3eU1DNDVORGd5SURFeUxqYzFNVFZETWpBdU56VXpJREV5TGpVMU5qTWdNakF1TkRNMk5DQXhNaTQxTlRZeklESXdMakkwTVRFZ01USXVOelV4TlV3eE5TNHdNelUxSURFM0xqazFOekZNTVRNdU1qWTNPQ0F4Tmk0eE9Ea3pRekV6TGpBM01qVWdNVFV1T1RrME1TQXhNaTQzTlRVNUlERTFMams1TkRFZ01USXVOVFl3TnlBeE5pNHhPRGt6VERFeExqZzFNellnTVRZdU9EazJORU14TVM0Mk5UZ3pJREUzTGpBNU1UY2dNVEV1TmpVNE15QXhOeTQwTURneklERXhMamcxTXpZZ01UY3VOakF6Tmt3eE15NDVOelE1SURFNUxqY3lORGxNTVRRdU5qZ3lJREl3TGpRek1sb2lMejRLUEM5dFlYTnJQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTBMalk0TWlBeU1DNDBNekpETVRRdU9EYzNNaUF5TUM0Mk1qY3lJREUxTGpFNU16Z2dNakF1TmpJM01pQXhOUzR6T0RreElESXdMalF6TWt3eE5pNHdPVFl5SURFNUxqY3lORGxNTWpFdU5qVTFNeUF4TkM0eE5qVTNRekl4TGpnMU1EWWdNVE11T1Rjd05TQXlNUzQ0TlRBMklERXpMalkxTXprZ01qRXVOalUxTXlBeE15NDBOVGcyVERJd0xqazBPRElnTVRJdU56VXhOVU15TUM0M05UTWdNVEl1TlRVMk15QXlNQzQwTXpZMElERXlMalUxTmpNZ01qQXVNalF4TVNBeE1pNDNOVEUxVERFMUxqQXpOVFVnTVRjdU9UVTNNVXd4TXk0eU5qYzRJREUyTGpFNE9UTkRNVE11TURjeU5TQXhOUzQ1T1RReElERXlMamMxTlRrZ01UVXVPVGswTVNBeE1pNDFOakEzSURFMkxqRTRPVE5NTVRFdU9EVXpOaUF4Tmk0NE9UWTBRekV4TGpZMU9ETWdNVGN1TURreE55QXhNUzQyTlRneklERTNMalF3T0RNZ01URXVPRFV6TmlBeE55NDJNRE0yVERFekxqazNORGtnTVRrdU56STBPVXd4TkM0Mk9ESWdNakF1TkRNeVdpSWdabWxzYkQwaUl6TkVPVVJHUmlJdlBnbzhjR0YwYUNCa1BTSk5NVFV1TURNMU5TQXhOeTQ1TlRjeFRERTBMak15T0RRZ01UZ3VOalkwTWt3eE5TNHdNelUxSURFNUxqTTNNVE5NTVRVdU56UXlOaUF4T0M0Mk5qUXlUREUxTGpBek5UVWdNVGN1T1RVM01WcE5NVFF1TmpneUlERTVMamN5TkRsRE1UUXVPRGMzTWlBeE9TNDFNamsySURFMUxqRTVNemdnTVRrdU5USTVOaUF4TlM0ek9Ea3hJREU1TGpjeU5EbE1NVE11T1RjME9TQXlNUzR4TXpreFF6RTBMalUyTURjZ01qRXVOekkwT1NBeE5TNDFNVEEwSURJeExqY3lORGtnTVRZdU1EazJNaUF5TVM0eE16a3hUREUwTGpZNE1pQXhPUzQzTWpRNVdrMHhOUzR6T0RreElERTVMakF4TnpoTU1UUXVOamd5SURFNUxqY3lORGxNTVRZdU1EazJNaUF5TVM0eE16a3hUREUyTGpnd016TWdNakF1TkRNeVRERTFMak00T1RFZ01Ua3VNREUzT0ZwTk1qQXVPVFE0TWlBeE15NDBOVGcyVERFMUxqTTRPVEVnTVRrdU1ERTNPRXd4Tmk0NE1ETXpJREl3TGpRek1rd3lNaTR6TmpJMElERTBMamczTWpoTU1qQXVPVFE0TWlBeE15NDBOVGcyV2sweU1DNDVORGd5SURFMExqRTJOVGRETWpBdU56VXpJREV6TGprM01EVWdNakF1TnpVeklERXpMalkxTXprZ01qQXVPVFE0TWlBeE15NDBOVGcyVERJeUxqTTJNalFnTVRRdU9EY3lPRU15TWk0NU5EZ3lJREUwTGpJNE56RWdNakl1T1RRNE1pQXhNeTR6TXpjeklESXlMak0yTWpRZ01USXVOelV4TlV3eU1DNDVORGd5SURFMExqRTJOVGRhVFRJd0xqSTBNVEVnTVRNdU5EVTROa3d5TUM0NU5EZ3lJREUwTGpFMk5UZE1Nakl1TXpZeU5DQXhNaTQzTlRFMVRESXhMalkxTlRNZ01USXVNRFEwTkV3eU1DNHlOREV4SURFekxqUTFPRFphVFRJd0xqazBPRElnTVRNdU5EVTROa015TUM0M05UTWdNVE11TmpVek9TQXlNQzQwTXpZMElERXpMalkxTXprZ01qQXVNalF4TVNBeE15NDBOVGcyVERJeExqWTFOVE1nTVRJdU1EUTBORU15TVM0d05qazFJREV4TGpRMU9EWWdNakF1TVRFNU9DQXhNUzQwTlRnMklERTVMalV6TkNBeE1pNHdORFEwVERJd0xqazBPRElnTVRNdU5EVTRObHBOTVRVdU56UXlOaUF4T0M0Mk5qUXlUREl3TGprME9ESWdNVE11TkRVNE5rd3hPUzQxTXpRZ01USXVNRFEwTkV3eE5DNHpNamcwSURFM0xqSTFUREUxTGpjME1qWWdNVGd1TmpZME1scE5NVEl1TlRZd055QXhOaTQ0T1RZMFRERTBMak15T0RRZ01UZ3VOalkwTWt3eE5TNDNOREkySURFM0xqSTFUREV6TGprM05Ea2dNVFV1TkRneU1rd3hNaTQxTmpBM0lERTJMamc1TmpSYVRURXpMakkyTnpnZ01UWXVPRGsyTkVNeE15NHdOekkxSURFM0xqQTVNVGNnTVRJdU56VTFPU0F4Tnk0d09URTNJREV5TGpVMk1EY2dNVFl1T0RrMk5Fd3hNeTQ1TnpRNUlERTFMalE0TWpKRE1UTXVNemc1TVNBeE5DNDRPVFkwSURFeUxqUXpPVE1nTVRRdU9EazJOQ0F4TVM0NE5UTTJJREUxTGpRNE1qSk1NVE11TWpZM09DQXhOaTQ0T1RZMFdrMHhNaTQxTmpBM0lERTNMall3TXpaTU1UTXVNalkzT0NBeE5pNDRPVFkwVERFeExqZzFNellnTVRVdU5EZ3lNa3d4TVM0eE5EWTBJREUyTGpFNE9UTk1NVEl1TlRZd055QXhOeTQyTURNMldrMHhNaTQxTmpBM0lERTJMamc1TmpSRE1USXVOelUxT1NBeE55NHdPVEUzSURFeUxqYzFOVGtnTVRjdU5EQTRNeUF4TWk0MU5qQTNJREUzTGpZd016Wk1NVEV1TVRRMk5DQXhOaTR4T0RrelF6RXdMalUyTURjZ01UWXVOemMxTVNBeE1DNDFOakEzSURFM0xqY3lORGtnTVRFdU1UUTJOQ0F4T0M0ek1UQTNUREV5TGpVMk1EY2dNVFl1T0RrMk5GcE5NVFF1TmpneUlERTVMakF4TnpoTU1USXVOVFl3TnlBeE5pNDRPVFkwVERFeExqRTBOalFnTVRndU16RXdOMHd4TXk0eU5qYzRJREl3TGpRek1rd3hOQzQyT0RJZ01Ua3VNREUzT0ZwTk1UVXVNemc1TVNBeE9TNDNNalE1VERFMExqWTRNaUF4T1M0d01UYzRUREV6TGpJMk56Z2dNakF1TkRNeVRERXpMamszTkRrZ01qRXVNVE01TVV3eE5TNHpPRGt4SURFNUxqY3lORGxhSWlCbWFXeHNQU0lqTTBRNVJFWkdJaUJ0WVhOclBTSjFjbXdvSTNCaGRHZ3RNeTFwYm5OcFpHVXRNVjg0TUROZk1qUTBPVElwSWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNaTFwYm5OcFpHVXRNVjgxTURGZk5qQTJOaUlnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFNElERXdTREl6UXpJekxqVTFNak1nTVRBZ01qUWdNVEF1TkRRM055QXlOQ0F4TVZZeE5rZ3hPRll4TUZwTk1UWWdPRWd4T0VneU0wTXlOQzQyTlRZNUlEZ2dNallnT1M0ek5ETXhOU0F5TmlBeE1WWXlNME15TmlBeU5DNDJOVFk1SURJMExqWTFOamtnTWpZZ01qTWdNalpJTVRoSU1UWklNVEZET1M0ek5ETXhOU0F5TmlBNElESTBMalkxTmprZ09DQXlNMVl4TVVNNElEa3VNelF6TVRVZ09TNHpORE14TlNBNElERXhJRGhJTVRaYVRURTRJREkwU0RJelF6SXpMalUxTWpNZ01qUWdNalFnTWpNdU5UVXlNeUF5TkNBeU0xWXhPRWd4T0ZZeU5GcE5NVFlnTWpSSU1URkRNVEF1TkRRM055QXlOQ0F4TUNBeU15NDFOVEl6SURFd0lESXpWakU0U0RFMlZqSTBXazB4TUNBeE5sWXhNVU14TUNBeE1DNDBORGMzSURFd0xqUTBOemNnTVRBZ01URWdNVEJJTVRaV01UWklNVEJhSWk4K0Nqd3ZiV0Z6YXo0S1BIQmhkR2dnWkQwaVRURTRJREV3VmpsSU1UZFdNVEJJTVRoYVRUSTBJREUyVmpFM1NESTFWakUyU0RJMFdrMHhPQ0F4TmtneE4xWXhOMGd4T0ZZeE5scE5NVGdnTWpSSU1UZFdNalZJTVRoV01qUmFUVEkwSURFNFNESTFWakUzU0RJMFZqRTRXazB4T0NBeE9GWXhOMGd4TjFZeE9FZ3hPRnBOTVRZZ01qUldNalZJTVRkV01qUklNVFphVFRFd0lERTRWakUzU0RsV01UaElNVEJhVFRFMklERTRTREUzVmpFM1NERTJWakU0V2sweE1DQXhOa2c1VmpFM1NERXdWakUyV2sweE5pQXhNRWd4TjFZNVNERTJWakV3V2sweE5pQXhObFl4TjBneE4xWXhOa2d4TmxwTk1qTWdPVWd4T0ZZeE1VZ3lNMVk1V2sweU5TQXhNVU15TlNBNUxqZzVOVFF6SURJMExqRXdORFlnT1NBeU15QTVWakV4U0RJMVdrMHlOU0F4TmxZeE1VZ3lNMVl4TmtneU5WcE5NalFnTVRWSU1UaFdNVGRJTWpSV01UVmFUVEU1SURFMlZqRXdTREUzVmpFMlNERTVXazB4T0NBM1NERTJWamxJTVRoV04xcE5Nak1nTjBneE9GWTVTREl6VmpkYVRUSTNJREV4UXpJM0lEZ3VOemt3T0RZZ01qVXVNakE1TVNBM0lESXpJRGRXT1VNeU5DNHhNRFEySURrZ01qVWdPUzQ0T1RVME15QXlOU0F4TVVneU4xcE5NamNnTWpOV01URklNalZXTWpOSU1qZGFUVEl6SURJM1F6STFMakl3T1RFZ01qY2dNamNnTWpVdU1qQTVNU0F5TnlBeU0wZ3lOVU15TlNBeU5DNHhNRFEySURJMExqRXdORFlnTWpVZ01qTWdNalZXTWpkYVRURTRJREkzU0RJelZqSTFTREU0VmpJM1drMHhOaUF5TjBneE9GWXlOVWd4TmxZeU4xcE5NVEVnTWpkSU1UWldNalZJTVRGV01qZGFUVGNnTWpORE55QXlOUzR5TURreElEZ3VOemt3T0RZZ01qY2dNVEVnTWpkV01qVkRPUzQ0T1RVME15QXlOU0E1SURJMExqRXdORFlnT1NBeU0wZzNXazAzSURFeFZqSXpTRGxXTVRGSU4xcE5NVEVnTjBNNExqYzVNRGcySURjZ055QTRMamM1TURnMklEY2dNVEZJT1VNNUlEa3VPRGsxTkRNZ09TNDRPVFUwTXlBNUlERXhJRGxXTjFwTk1UWWdOMGd4TVZZNVNERTJWamRhVFRFNElESTFTREl6VmpJelNERTRWakkxV2sweU15QXlOVU15TkM0eE1EUTJJREkxSURJMUlESTBMakV3TkRZZ01qVWdNak5JTWpOV01qVmFUVEkxSURJelZqRTRTREl6VmpJelNESTFXazB4T0NBeE9VZ3lORll4TjBneE9GWXhPVnBOTVRrZ01qUldNVGhJTVRkV01qUklNVGxhVFRFeElESTFTREUyVmpJelNERXhWakkxV2swNUlESXpRemtnTWpRdU1UQTBOaUE1TGpnNU5UUXpJREkxSURFeElESTFWakl6U0RFeFNEbGFUVGtnTVRoV01qTklNVEZXTVRoSU9WcE5NVEFnTVRsSU1UWldNVGRJTVRCV01UbGFUVEUxSURFNFZqSTBTREUzVmpFNFNERTFXazA1SURFeFZqRTJTREV4VmpFeFNEbGFUVEV4SURsRE9TNDRPVFUwTXlBNUlEa2dPUzQ0T1RVME15QTVJREV4U0RFeFZqRXhWamxhVFRFMklEbElNVEZXTVRGSU1UWldPVnBOTVRVZ01UQldNVFpJTVRkV01UQklNVFZhVFRFMklERTFTREV3VmpFM1NERTJWakUxV2lJZ1ptbHNiRDBpSXpORU9VUkdSaUlnYldGemF6MGlkWEpzS0NOd1lYUm9MVEl0YVc1emFXUmxMVEZmTlRBeFh6WXdOallwSWk4K0NqeHlaV04wSUhnOUlqSXdJaUI1UFNJMUlpQjNhV1IwYUQwaU9TSWdhR1ZwWjJoMFBTSTVJaUJtYVd4c1BTSWpNakV5UlRORUlpOCtDanh0WVhOcklHbGtQU0p3WVhSb0xUVXRhVzV6YVdSbExUSmZOVEF4WHpZd05qWWlJR1pwYkd3OUluZG9hWFJsSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB5TkNBeE1TNDFRekkwSURFeExqYzNOakVnTWpRdU1qSXpPU0F4TWlBeU5DNDFJREV5U0RJMUxqVkRNalV1TnpjMk1TQXhNaUF5TmlBeE1TNDNOell4SURJMklERXhMalZXTVRCSU1qY3VOVU15Tnk0M056WXhJREV3SURJNElEa3VOemMyTVRRZ01qZ2dPUzQxVmpndU5VTXlPQ0E0TGpJeU16ZzJJREkzTGpjM05qRWdPQ0F5Tnk0MUlEaElNalpXTmk0MVF6STJJRFl1TWpJek9EWWdNalV1TnpjMk1TQTJJREkxTGpVZ05rZ3lOQzQxUXpJMExqSXlNemtnTmlBeU5DQTJMakl5TXpnMklESTBJRFl1TlZZNFNESXlMalZETWpJdU1qSXpPU0E0SURJeUlEZ3VNakl6T0RZZ01qSWdPQzQxVmprdU5VTXlNaUE1TGpjM05qRTBJREl5TGpJeU16a2dNVEFnTWpJdU5TQXhNRWd5TkZZeE1TNDFXaUl2UGdvOEwyMWhjMnMrQ2p4d1lYUm9JR1pwYkd3dGNuVnNaVDBpWlhabGJtOWtaQ0lnWTJ4cGNDMXlkV3hsUFNKbGRtVnViMlJrSWlCa1BTSk5NalFnTVRFdU5VTXlOQ0F4TVM0M056WXhJREkwTGpJeU16a2dNVElnTWpRdU5TQXhNa2d5TlM0MVF6STFMamMzTmpFZ01USWdNallnTVRFdU56YzJNU0F5TmlBeE1TNDFWakV3U0RJM0xqVkRNamN1TnpjMk1TQXhNQ0F5T0NBNUxqYzNOakUwSURJNElEa3VOVlk0TGpWRE1qZ2dPQzR5TWpNNE5pQXlOeTQzTnpZeElEZ2dNamN1TlNBNFNESTJWall1TlVNeU5pQTJMakl5TXpnMklESTFMamMzTmpFZ05pQXlOUzQxSURaSU1qUXVOVU15TkM0eU1qTTVJRFlnTWpRZ05pNHlNak00TmlBeU5DQTJMalZXT0VneU1pNDFRekl5TGpJeU16a2dPQ0F5TWlBNExqSXlNemcySURJeUlEZ3VOVlk1TGpWRE1qSWdPUzQzTnpZeE5DQXlNaTR5TWpNNUlERXdJREl5TGpVZ01UQklNalJXTVRFdU5Wb2lJR1pwYkd3OUlpTXpSRGxFUmtZaUx6NEtQSEJoZEdnZ1pEMGlUVEkySURFd1ZqbElNalZXTVRCSU1qWmFUVEkySURoSU1qVldPVWd5TmxZNFdrMHlOQ0E0VmpsSU1qVldPRWd5TkZwTk1qUWdNVEJJTWpWV09VZ3lORll4TUZwTk1qUXVOU0F4TVVNeU5DNDNOell4SURFeElESTFJREV4TGpJeU16a2dNalVnTVRFdU5VZ3lNME15TXlBeE1pNHpNamcwSURJekxqWTNNVFlnTVRNZ01qUXVOU0F4TTFZeE1WcE5NalV1TlNBeE1VZ3lOQzQxVmpFelNESTFMalZXTVRGYVRUSTFJREV4TGpWRE1qVWdNVEV1TWpJek9TQXlOUzR5TWpNNUlERXhJREkxTGpVZ01URldNVE5ETWpZdU16STROQ0F4TXlBeU55QXhNaTR6TWpnMElESTNJREV4TGpWSU1qVmFUVEkxSURFd1ZqRXhMalZJTWpkV01UQklNalZhVFRJM0xqVWdPVWd5TmxZeE1VZ3lOeTQxVmpsYVRUSTNJRGt1TlVNeU55QTVMakl5TXpnMklESTNMakl5TXprZ09TQXlOeTQxSURsV01URkRNamd1TXpJNE5DQXhNU0F5T1NBeE1DNHpNamcwSURJNUlEa3VOVWd5TjFwTk1qY2dPQzQxVmprdU5VZ3lPVlk0TGpWSU1qZGFUVEkzTGpVZ09VTXlOeTR5TWpNNUlEa2dNamNnT0M0M056WXhOQ0F5TnlBNExqVklNamxETWprZ055NDJOekUxTnlBeU9DNHpNamcwSURjZ01qY3VOU0EzVmpsYVRUSTJJRGxJTWpjdU5WWTNTREkyVmpsYVRUSTFJRFl1TlZZNFNESTNWall1TlVneU5WcE5NalV1TlNBM1F6STFMakl5TXprZ055QXlOU0EyTGpjM05qRTBJREkxSURZdU5VZ3lOME15TnlBMUxqWTNNVFUzSURJMkxqTXlPRFFnTlNBeU5TNDFJRFZXTjFwTk1qUXVOU0EzU0RJMUxqVldOVWd5TkM0MVZqZGFUVEkxSURZdU5VTXlOU0EyTGpjM05qRTBJREkwTGpjM05qRWdOeUF5TkM0MUlEZFdOVU15TXk0Mk56RTJJRFVnTWpNZ05TNDJOekUxTnlBeU15QTJMalZJTWpWYVRUSTFJRGhXTmk0MVNESXpWamhJTWpWYVRUSXlMalVnT1VneU5GWTNTREl5TGpWV09WcE5Nak1nT0M0MVF6SXpJRGd1TnpjMk1UUWdNakl1TnpjMk1TQTVJREl5TGpVZ09WWTNRekl4TGpZM01UWWdOeUF5TVNBM0xqWTNNVFUzSURJeElEZ3VOVWd5TTFwTk1qTWdPUzQxVmpndU5VZ3lNVlk1TGpWSU1qTmFUVEl5TGpVZ09VTXlNaTQzTnpZeElEa2dNak1nT1M0eU1qTTROaUF5TXlBNUxqVklNakZETWpFZ01UQXVNekk0TkNBeU1TNDJOekUySURFeElESXlMalVnTVRGV09WcE5NalFnT1VneU1pNDFWakV4U0RJMFZqbGFUVEkxSURFeExqVldNVEJJTWpOV01URXVOVWd5TlZvaUlHWnBiR3c5SWlNelJEbEVSa1lpSUcxaGMyczlJblZ5YkNnamNHRjBhQzAxTFdsdWMybGtaUzB5WHpVd01WODJNRFkyS1NJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHhNaUF4TjBNeE1pQXhOQzR5TXpnMklERTBMakl6T0RZZ01USWdNVGNnTVRKV01UZFdNakpETVRRdU1qTTROaUF5TWlBeE1pQXhPUzQzTmpFMElERXlJREUzV2sweE55QXhNRU14TXk0eE16UWdNVEFnTVRBZ01UTXVNVE0wSURFd0lERTNRekV3SURJd0xqZzJOaUF4TXk0eE16UWdNalFnTVRjZ01qUkRNakF1T0RZMklESTBJREkwSURJd0xqZzJOaUF5TkNBeE4wTXlOQ0F4TXk0eE16UWdNakF1T0RZMklERXdJREUzSURFd1dpSWdabWxzYkQwaUl6TkVPVVJHUmlJdlBnbzhjR0YwYUNCa1BTSk5NVGNnTlM0d09ETXpORlkzTGpJMUlpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazB4TnlBeU5pNDNOVll5T0M0NU1UWTNJaUJ6ZEhKdmEyVTlJaU16UkRsRVJrWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWswNExqVTNNVFkzSURndU5UY3hOamRNTVRBdU1URWdNVEF1TVRFaUlITjBjbTlyWlQwaUl6TkVPVVJHUmlJZ2MzUnliMnRsTFhkcFpIUm9QU0l5SWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUx6NEtQSEJoZEdnZ1pEMGlUVEl6TGpnNUlESXpMamc1VERJMUxqUXlPRE1nTWpVdU5ESTRNeUlnYzNSeWIydGxQU0lqTTBRNVJFWkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0l2UGdvOGNHRjBhQ0JrUFNKTk5TNHdPRE16TkNBeE4wZzNMakkxSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHlOaTQzTlNBeE4wZ3lPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJREkxTGpReU9ETk1NVEF1TVRFZ01qTXVPRGtpSUhOMGNtOXJaVDBpSXpORU9VUkdSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURFd0xqRXhUREkxTGpReU9ETWdPQzQxTnpFMk55SWdjM1J5YjJ0bFBTSWpNMFE1UkVaR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BHTnBjbU5zWlNCamVEMGlNVFl1TlNJZ1kzazlJakUyTGpVaUlISTlJamt1TlNJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TXkxcGJuTnBaR1V0TVY4MU1ETmZOVFl4TlNJZ1ptbHNiRDBpZDJocGRHVWlQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTBMalk0TWlBeU1DNDBNekpETVRRdU9EYzNNaUF5TUM0Mk1qY3lJREUxTGpFNU16Z2dNakF1TmpJM01pQXhOUzR6T0RreElESXdMalF6TWt3eE5pNHdPVFl5SURFNUxqY3lORGxNTWpFdU5qVTFNeUF4TkM0eE5qVTNRekl4TGpnMU1EWWdNVE11T1Rjd05TQXlNUzQ0TlRBMklERXpMalkxTXprZ01qRXVOalUxTXlBeE15NDBOVGcyVERJd0xqazBPRElnTVRJdU56VXhOVU15TUM0M05UTWdNVEl1TlRVMk15QXlNQzQwTXpZMElERXlMalUxTmpNZ01qQXVNalF4TVNBeE1pNDNOVEUxVERFMUxqQXpOVFVnTVRjdU9UVTNNVXd4TXk0eU5qYzRJREUyTGpFNE9UTkRNVE11TURjeU5TQXhOUzQ1T1RReElERXlMamMxTlRrZ01UVXVPVGswTVNBeE1pNDFOakEzSURFMkxqRTRPVE5NTVRFdU9EVXpOaUF4Tmk0NE9UWTBRekV4TGpZMU9ETWdNVGN1TURreE55QXhNUzQyTlRneklERTNMalF3T0RNZ01URXVPRFV6TmlBeE55NDJNRE0yVERFekxqazNORGtnTVRrdU56STBPVXd4TkM0Mk9ESWdNakF1TkRNeVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1UUXVOamd5SURJd0xqUXpNa014TkM0NE56Y3lJREl3TGpZeU56SWdNVFV1TVRrek9DQXlNQzQyTWpjeUlERTFMak00T1RFZ01qQXVORE15VERFMkxqQTVOaklnTVRrdU56STBPVXd5TVM0Mk5UVXpJREUwTGpFMk5UZERNakV1T0RVd05pQXhNeTQ1TnpBMUlESXhMamcxTURZZ01UTXVOalV6T1NBeU1TNDJOVFV6SURFekxqUTFPRFpNTWpBdU9UUTRNaUF4TWk0M05URTFRekl3TGpjMU15QXhNaTQxTlRZeklESXdMalF6TmpRZ01USXVOVFUyTXlBeU1DNHlOREV4SURFeUxqYzFNVFZNTVRVdU1ETTFOU0F4Tnk0NU5UY3hUREV6TGpJMk56Z2dNVFl1TVRnNU0wTXhNeTR3TnpJMUlERTFMams1TkRFZ01USXVOelUxT1NBeE5TNDVPVFF4SURFeUxqVTJNRGNnTVRZdU1UZzVNMHd4TVM0NE5UTTJJREUyTGpnNU5qUkRNVEV1TmpVNE15QXhOeTR3T1RFM0lERXhMalkxT0RNZ01UY3VOREE0TXlBeE1TNDROVE0ySURFM0xqWXdNelpNTVRNdU9UYzBPU0F4T1M0M01qUTVUREUwTGpZNE1pQXlNQzQwTXpKYUlpQm1hV3hzUFNJak1FTTNORVJHSWk4K0NqeHdZWFJvSUdROUlrMHhOUzR3TXpVMUlERTNMamsxTnpGTU1UUXVNekk0TkNBeE9DNDJOalF5VERFMUxqQXpOVFVnTVRrdU16Y3hNMHd4TlM0M05ESTJJREU0TGpZMk5ESk1NVFV1TURNMU5TQXhOeTQ1TlRjeFdrMHhOQzQyT0RJZ01Ua3VOekkwT1VNeE5DNDROemN5SURFNUxqVXlPVFlnTVRVdU1Ua3pPQ0F4T1M0MU1qazJJREUxTGpNNE9URWdNVGt1TnpJME9Vd3hNeTQ1TnpRNUlESXhMakV6T1RGRE1UUXVOVFl3TnlBeU1TNDNNalE1SURFMUxqVXhNRFFnTWpFdU56STBPU0F4Tmk0d09UWXlJREl4TGpFek9URk1NVFF1TmpneUlERTVMamN5TkRsYVRURTFMak00T1RFZ01Ua3VNREUzT0V3eE5DNDJPRElnTVRrdU56STBPVXd4Tmk0d09UWXlJREl4TGpFek9URk1NVFl1T0RBek15QXlNQzQwTXpKTU1UVXVNemc1TVNBeE9TNHdNVGM0V2sweU1DNDVORGd5SURFekxqUTFPRFpNTVRVdU16ZzVNU0F4T1M0d01UYzRUREUyTGpnd016TWdNakF1TkRNeVRESXlMak0yTWpRZ01UUXVPRGN5T0V3eU1DNDVORGd5SURFekxqUTFPRFphVFRJd0xqazBPRElnTVRRdU1UWTFOME15TUM0M05UTWdNVE11T1Rjd05TQXlNQzQzTlRNZ01UTXVOalV6T1NBeU1DNDVORGd5SURFekxqUTFPRFpNTWpJdU16WXlOQ0F4TkM0NE56STRRekl5TGprME9ESWdNVFF1TWpnM01TQXlNaTQ1TkRneUlERXpMak16TnpNZ01qSXVNell5TkNBeE1pNDNOVEUxVERJd0xqazBPRElnTVRRdU1UWTFOMXBOTWpBdU1qUXhNU0F4TXk0ME5UZzJUREl3TGprME9ESWdNVFF1TVRZMU4wd3lNaTR6TmpJMElERXlMamMxTVRWTU1qRXVOalUxTXlBeE1pNHdORFEwVERJd0xqSTBNVEVnTVRNdU5EVTRObHBOTWpBdU9UUTRNaUF4TXk0ME5UZzJRekl3TGpjMU15QXhNeTQyTlRNNUlESXdMalF6TmpRZ01UTXVOalV6T1NBeU1DNHlOREV4SURFekxqUTFPRFpNTWpFdU5qVTFNeUF4TWk0d05EUTBRekl4TGpBMk9UVWdNVEV1TkRVNE5pQXlNQzR4TVRrNElERXhMalExT0RZZ01Ua3VOVE0wSURFeUxqQTBORFJNTWpBdU9UUTRNaUF4TXk0ME5UZzJXazB4TlM0M05ESTJJREU0TGpZMk5ESk1NakF1T1RRNE1pQXhNeTQwTlRnMlRERTVMalV6TkNBeE1pNHdORFEwVERFMExqTXlPRFFnTVRjdU1qVk1NVFV1TnpReU5pQXhPQzQyTmpReVdrMHhNaTQxTmpBM0lERTJMamc1TmpSTU1UUXVNekk0TkNBeE9DNDJOalF5VERFMUxqYzBNallnTVRjdU1qVk1NVE11T1RjME9TQXhOUzQwT0RJeVRERXlMalUyTURjZ01UWXVPRGsyTkZwTk1UTXVNalkzT0NBeE5pNDRPVFkwUXpFekxqQTNNalVnTVRjdU1Ea3hOeUF4TWk0M05UVTVJREUzTGpBNU1UY2dNVEl1TlRZd055QXhOaTQ0T1RZMFRERXpMamszTkRrZ01UVXVORGd5TWtNeE15NHpPRGt4SURFMExqZzVOalFnTVRJdU5ETTVNeUF4TkM0NE9UWTBJREV4TGpnMU16WWdNVFV1TkRneU1rd3hNeTR5TmpjNElERTJMamc1TmpSYVRURXlMalUyTURjZ01UY3VOakF6Tmt3eE15NHlOamM0SURFMkxqZzVOalJNTVRFdU9EVXpOaUF4TlM0ME9ESXlUREV4TGpFME5qUWdNVFl1TVRnNU0wd3hNaTQxTmpBM0lERTNMall3TXpaYVRURXlMalUyTURjZ01UWXVPRGsyTkVNeE1pNDNOVFU1SURFM0xqQTVNVGNnTVRJdU56VTFPU0F4Tnk0ME1EZ3pJREV5TGpVMk1EY2dNVGN1TmpBek5rd3hNUzR4TkRZMElERTJMakU0T1RORE1UQXVOVFl3TnlBeE5pNDNOelV4SURFd0xqVTJNRGNnTVRjdU56STBPU0F4TVM0eE5EWTBJREU0TGpNeE1EZE1NVEl1TlRZd055QXhOaTQ0T1RZMFdrMHhOQzQyT0RJZ01Ua3VNREUzT0V3eE1pNDFOakEzSURFMkxqZzVOalJNTVRFdU1UUTJOQ0F4T0M0ek1UQTNUREV6TGpJMk56Z2dNakF1TkRNeVRERTBMalk0TWlBeE9TNHdNVGM0V2sweE5TNHpPRGt4SURFNUxqY3lORGxNTVRRdU5qZ3lJREU1TGpBeE56aE1NVE11TWpZM09DQXlNQzQwTXpKTU1UTXVPVGMwT1NBeU1TNHhNemt4VERFMUxqTTRPVEVnTVRrdU56STBPVm9pSUdacGJHdzlJaU13UXpjMFJFWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMHpMV2x1YzJsa1pTMHhYelV3TTE4MU5qRTFLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UVWlJR2hsYVdkb2REMGlNVFVpSUhacFpYZENiM2c5SWpBZ01DQXhOU0F4TlNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWswd0lEY3VOVU13SURNdU5DQXpMalFnTUNBM0xqVWdNRU14TVM0MklEQWdNVFVnTXk0MElERTFJRGN1TlVNeE5TQXhNUzQySURFeExqWWdNVFVnTnk0MUlERTFRek11TkNBeE5TQXdJREV4TGpZZ01DQTNMalZhVFRFZ055NDFRekVnTVRFdU1TQXpMamtnTVRRZ055NDFJREUwUXpFeExqRWdNVFFnTVRRZ01URXVNU0F4TkNBM0xqVkRNVFFnTXk0NUlERXhMakVnTVNBM0xqVWdNVU16TGprZ01TQXhJRE11T1NBeElEY3VOVnBOT0NBeE1WWXhNa2czVmpFeFNEaGFUVFVnTlM0MVF6VWdOQzR4SURZdU1TQXpJRGN1TlNBelF6Z3VPU0F6SURFd0lEUXVNU0F4TUNBMUxqVkRNVEFnTmk0M01qZ3dNaUE1TGpNNE5EUTRJRGN1TVRnMk5qTWdPQzQ0T1RVNE1TQTNMalUxTURjelF6Z3VPREkzTXpjZ055NDJNREUzTWlBNExqYzJNVFF5SURjdU5qVXdPRFlnT0M0M0lEY3VOME00TGpZM05qWXpJRGN1TnpFME1ESWdPQzQyTlRNNU1TQTNMamN5TnpZeElEZ3VOak14T0RRZ055NDNOREE0TVVNNExqRTRNVGMwSURndU1ERWdPQ0E0TGpFeE9EY2dPQ0E0TGpWV09WWXhNRWczVmpsV09DNDFRemNnTnk0MU9UVTBOQ0EzTGpVM01qYzFJRGN1TVRneE9ESWdOeTQ1TnpneE5DQTJMamc0T1RBM1F6Z3VNREl3T1RFZ05pNDROVGd4T0NBNExqQTJNVGd5SURZdU9ESTROak1nT0M0eElEWXVPRU00TGpFeU1qazNJRFl1TnpnMk1qSWdPQzR4TkRVM01pQTJMamMzTWpZMUlEZ3VNVFk0TWpRZ05pNDNOVGt5TWtNNExqWXpOVGtnTmk0ME9EQXpOaUE1SURZdU1qWXpNalVnT1NBMUxqVkRPU0EwTGpjZ09DNHpJRFFnTnk0MUlEUkROaTQzSURRZ05pQTBMamNnTmlBMUxqVldOa2cxVmpVdU5Wb2lJR1pwYkd3OUlpTTJSVGMxTnpVaUx6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRZaUlHaGxhV2RvZEQwaU1UWWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5pQXhOaUlnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB3SURjdU5VTXdJRE11TkNBekxqUWdNQ0EzTGpVZ01FTXhNUzQySURBZ01UVWdNeTQwSURFMUlEY3VOVU14TlNBeE1TNDJJREV4TGpZZ01UVWdOeTQxSURFMVF6TXVOQ0F4TlNBd0lERXhMallnTUNBM0xqVmFUVEVnTnk0MVF6RWdNVEV1TVNBekxqa2dNVFFnTnk0MUlERTBRekV4TGpFZ01UUWdNVFFnTVRFdU1TQXhOQ0EzTGpWRE1UUWdNeTQ1SURFeExqRWdNU0EzTGpVZ01VTXpMamtnTVNBeElETXVPU0F4SURjdU5WcE5PQ0EwVmpWSU4xWTBTRGhhVFRnZ01URldOa2czVmpFeFNEaGFJaUJtYVd4c1BTSWpPREU0TVRneElpOCtDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZUQwaU1DNDFJaUI1UFNJd0xqVWlJSGRwWkhSb1BTSTVJaUJvWldsbmFIUTlJamtpSUhOMGNtOXJaVDBpWW14aFkyc2lMejRLUEhKbFkzUWdlRDBpTkM0MUlpQjVQU0kwTGpVaUlIZHBaSFJvUFNJNUlpQm9aV2xuYUhROUlqa2lJSE4wY205clpUMGlZbXhoWTJzaUx6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BHTnBjbU5zWlNCamVEMGlOeUlnWTNrOUlqY2lJSEk5SWpZdU5TSWdjM1J5YjJ0bFBTSmliR0ZqYXlJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEd4cGJtVWdlVEU5SWpZdU5TSWdlREk5SWpFMElpQjVNajBpTmk0MUlpQnpkSEp2YTJVOUltSnNZV05ySWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEdjZ1kyeHBjQzF3WVhSb1BTSjFjbXdvSTJOc2FYQXdYekl3TUY4ME5qQTRLU0krQ2p4d1lYUm9JR1E5SWswd0xqa3pOemd5TWlBeE1pNDFURGNnTWt3eE15NHdOakl5SURFeUxqVklNQzQ1TXpjNE1qSmFJaUJ6ZEhKdmEyVTlJbUpzWVdOcklpOCtDand2Wno0S1BHUmxabk0rQ2p4amJHbHdVR0YwYUNCcFpEMGlZMnhwY0RCZk1qQXdYelEyTURnaVBnbzhjbVZqZENCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJR1pwYkd3OUluZG9hWFJsSWk4K0Nqd3ZZMnhwY0ZCaGRHZytDand2WkdWbWN6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWkQwaVRURXlJREpJTWxZeE1rZ3hNbFl5V2lJZ2MzUnliMnRsUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpFMElpQm9aV2xuYUhROUlqRTBJaUJtYVd4c1BTSjNhR2wwWlNJdlBnbzhjR0YwYUNCa1BTSk5NaUF5U0RFeVZqVklNVEZXTTBnM0xqVldNVEZJT1ZZeE1rZzFWakV4U0RZdU5WWXpTRE5XTlVneVZqSmFJaUJtYVd4c1BTSmliR0ZqYXlJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVE1pSUdobGFXZG9kRDBpTXlJZ2RtbGxkMEp2ZUQwaU1DQXdJREV6SURNaUlHWnBiR3c5SW01dmJtVWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk15QXhMakkxUXpNZ01TNDVOREF6TmlBeUxqUTBNRE0ySURJdU5TQXhMamMxSURJdU5VTXhMakExT1RZMElESXVOU0F3TGpVZ01TNDVOREF6TmlBd0xqVWdNUzR5TlVNd0xqVWdNQzQxTlRrMk5EUWdNUzR3TlRrMk5DQXdJREV1TnpVZ01FTXlMalEwTURNMklEQWdNeUF3TGpVMU9UWTBOQ0F6SURFdU1qVmFUVGdnTVM0eU5VTTRJREV1T1RRd016WWdOeTQwTkRBek5pQXlMalVnTmk0M05TQXlMalZETmk0d05UazJOQ0F5TGpVZ05TNDFJREV1T1RRd016WWdOUzQxSURFdU1qVkROUzQxSURBdU5UVTVOalEwSURZdU1EVTVOalFnTUNBMkxqYzFJREJETnk0ME5EQXpOaUF3SURnZ01DNDFOVGsyTkRRZ09DQXhMakkxV2sweE1TNDNOU0F5TGpWRE1USXVORFF3TkNBeUxqVWdNVE1nTVM0NU5EQXpOaUF4TXlBeExqSTFRekV6SURBdU5UVTVOalEwSURFeUxqUTBNRFFnTUNBeE1TNDNOU0F3UXpFeExqQTFPVFlnTUNBeE1DNDFJREF1TlRVNU5qUTBJREV3TGpVZ01TNHlOVU14TUM0MUlERXVPVFF3TXpZZ01URXVNRFU1TmlBeUxqVWdNVEV1TnpVZ01pNDFXaUlnWm1sc2JEMGlJelUxTmpBMk1DSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TWkxcGJuTnBaR1V0TVY4MU1ERmZOakEyTmlJZ1ptbHNiRDBpZDJocGRHVWlQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTRJREV3U0RJelF6SXpMalUxTWpNZ01UQWdNalFnTVRBdU5EUTNOeUF5TkNBeE1WWXhOa2d4T0ZZeE1GcE5NVFlnT0VneE9FZ3lNME15TkM0Mk5UWTVJRGdnTWpZZ09TNHpORE14TlNBeU5pQXhNVll5TTBNeU5pQXlOQzQyTlRZNUlESTBMalkxTmprZ01qWWdNak1nTWpaSU1UaElNVFpJTVRGRE9TNHpORE14TlNBeU5pQTRJREkwTGpZMU5qa2dPQ0F5TTFZeE1VTTRJRGt1TXpRek1UVWdPUzR6TkRNeE5TQTRJREV4SURoSU1UWmFUVEU0SURJMFNESXpRekl6TGpVMU1qTWdNalFnTWpRZ01qTXVOVFV5TXlBeU5DQXlNMVl4T0VneE9GWXlORnBOTVRZZ01qUklNVEZETVRBdU5EUTNOeUF5TkNBeE1DQXlNeTQxTlRJeklERXdJREl6VmpFNFNERTJWakkwV2sweE1DQXhObFl4TVVNeE1DQXhNQzQwTkRjM0lERXdMalEwTnpjZ01UQWdNVEVnTVRCSU1UWldNVFpJTVRCYUlpOCtDand2YldGemF6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE9DQXhNRWd5TTBNeU15NDFOVEl6SURFd0lESTBJREV3TGpRME56Y2dNalFnTVRGV01UWklNVGhXTVRCYVRURTJJRGhJTVRoSU1qTkRNalF1TmpVMk9TQTRJREkySURrdU16UXpNVFVnTWpZZ01URldNak5ETWpZZ01qUXVOalUyT1NBeU5DNDJOVFk1SURJMklESXpJREkyU0RFNFNERTJTREV4UXprdU16UXpNVFVnTWpZZ09DQXlOQzQyTlRZNUlEZ2dNak5XTVRGRE9DQTVMak0wTXpFMUlEa3VNelF6TVRVZ09DQXhNU0E0U0RFMldrMHhPQ0F5TkVneU0wTXlNeTQxTlRJeklESTBJREkwSURJekxqVTFNak1nTWpRZ01qTldNVGhJTVRoV01qUmFUVEUySURJMFNERXhRekV3TGpRME56Y2dNalFnTVRBZ01qTXVOVFV5TXlBeE1DQXlNMVl4T0VneE5sWXlORnBOTVRBZ01UWldNVEZETVRBZ01UQXVORFEzTnlBeE1DNDBORGMzSURFd0lERXhJREV3U0RFMlZqRTJTREV3V2lJZ1ptbHNiRDBpZDJocGRHVWlMejRLUEhCaGRHZ2daRDBpVFRFNElERXdWamxJTVRkV01UQklNVGhhVFRJMElERTJWakUzU0RJMVZqRTJTREkwV2sweE9DQXhOa2d4TjFZeE4wZ3hPRll4TmxwTk1UZ2dNalJJTVRkV01qVklNVGhXTWpSYVRUSTBJREU0U0RJMVZqRTNTREkwVmpFNFdrMHhPQ0F4T0ZZeE4wZ3hOMVl4T0VneE9GcE5NVFlnTWpSV01qVklNVGRXTWpSSU1UWmFUVEV3SURFNFZqRTNTRGxXTVRoSU1UQmFUVEUySURFNFNERTNWakUzU0RFMlZqRTRXazB4TUNBeE5rZzVWakUzU0RFd1ZqRTJXazB4TmlBeE1FZ3hOMVk1U0RFMlZqRXdXazB4TmlBeE5sWXhOMGd4TjFZeE5rZ3hObHBOTWpNZ09VZ3hPRll4TVVneU0xWTVXazB5TlNBeE1VTXlOU0E1TGpnNU5UUXpJREkwTGpFd05EWWdPU0F5TXlBNVZqRXhTREkxV2sweU5TQXhObFl4TVVneU0xWXhOa2d5TlZwTk1qUWdNVFZJTVRoV01UZElNalJXTVRWYVRURTVJREUyVmpFd1NERTNWakUyU0RFNVdrMHhPQ0EzU0RFMlZqbElNVGhXTjFwTk1qTWdOMGd4T0ZZNVNESXpWamRhVFRJM0lERXhRekkzSURndU56a3dPRFlnTWpVdU1qQTVNU0EzSURJeklEZFdPVU15TkM0eE1EUTJJRGtnTWpVZ09TNDRPVFUwTXlBeU5TQXhNVWd5TjFwTk1qY2dNak5XTVRGSU1qVldNak5JTWpkYVRUSXpJREkzUXpJMUxqSXdPVEVnTWpjZ01qY2dNalV1TWpBNU1TQXlOeUF5TTBneU5VTXlOU0F5TkM0eE1EUTJJREkwTGpFd05EWWdNalVnTWpNZ01qVldNamRhVFRFNElESTNTREl6VmpJMVNERTRWakkzV2sweE5pQXlOMGd4T0ZZeU5VZ3hObFl5TjFwTk1URWdNamRJTVRaV01qVklNVEZXTWpkYVRUY2dNak5ETnlBeU5TNHlNRGt4SURndU56a3dPRFlnTWpjZ01URWdNamRXTWpWRE9TNDRPVFUwTXlBeU5TQTVJREkwTGpFd05EWWdPU0F5TTBnM1drMDNJREV4VmpJelNEbFdNVEZJTjFwTk1URWdOME00TGpjNU1EZzJJRGNnTnlBNExqYzVNRGcySURjZ01URklPVU01SURrdU9EazFORE1nT1M0NE9UVTBNeUE1SURFeElEbFdOMXBOTVRZZ04wZ3hNVlk1U0RFMlZqZGFUVEU0SURJMVNESXpWakl6U0RFNFZqSTFXazB5TXlBeU5VTXlOQzR4TURRMklESTFJREkxSURJMExqRXdORFlnTWpVZ01qTklNak5XTWpWYVRUSTFJREl6VmpFNFNESXpWakl6U0RJMVdrMHhPQ0F4T1VneU5GWXhOMGd4T0ZZeE9WcE5NVGtnTWpSV01UaElNVGRXTWpSSU1UbGFUVEV4SURJMVNERTJWakl6U0RFeFZqSTFXazA1SURJelF6a2dNalF1TVRBME5pQTVMamc1TlRReklESTFJREV4SURJMVZqSXpTREV4U0RsYVRUa2dNVGhXTWpOSU1URldNVGhJT1ZwTk1UQWdNVGxJTVRaV01UZElNVEJXTVRsYVRURTFJREU0VmpJMFNERTNWakU0U0RFMVdrMDVJREV4VmpFMlNERXhWakV4U0RsYVRURXhJRGxET1M0NE9UVTBNeUE1SURrZ09TNDRPVFUwTXlBNUlERXhTREV4VmpFeFZqbGFUVEUySURsSU1URldNVEZJTVRaV09WcE5NVFVnTVRCV01UWklNVGRXTVRCSU1UVmFUVEUySURFMVNERXdWakUzU0RFMlZqRTFXaUlnWm1sc2JEMGlJekJETnpSRVJpSWdiV0Z6YXowaWRYSnNLQ053WVhSb0xUSXRhVzV6YVdSbExURmZOVEF4WHpZd05qWXBJaTgrQ2p4eVpXTjBJSGc5SWpJd0lpQjVQU0kxSWlCM2FXUjBhRDBpT1NJZ2FHVnBaMmgwUFNJNUlpQm1hV3hzUFNJalJVWkdPRVpHSWk4K0NqeHRZWE5ySUdsa1BTSndZWFJvTFRVdGFXNXphV1JsTFRKZk5UQXhYell3TmpZaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHlOQ0F4TVM0MVF6STBJREV4TGpjM05qRWdNalF1TWpJek9TQXhNaUF5TkM0MUlERXlTREkxTGpWRE1qVXVOemMyTVNBeE1pQXlOaUF4TVM0M056WXhJREkySURFeExqVldNVEJJTWpjdU5VTXlOeTQzTnpZeElERXdJREk0SURrdU56YzJNVFFnTWpnZ09TNDFWamd1TlVNeU9DQTRMakl5TXpnMklESTNMamMzTmpFZ09DQXlOeTQxSURoSU1qWldOaTQxUXpJMklEWXVNakl6T0RZZ01qVXVOemMyTVNBMklESTFMalVnTmtneU5DNDFRekkwTGpJeU16a2dOaUF5TkNBMkxqSXlNemcySURJMElEWXVOVlk0U0RJeUxqVkRNakl1TWpJek9TQTRJREl5SURndU1qSXpPRFlnTWpJZ09DNDFWamt1TlVNeU1pQTVMamMzTmpFMElESXlMakl5TXprZ01UQWdNakl1TlNBeE1FZ3lORll4TVM0MVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1qUWdNVEV1TlVNeU5DQXhNUzQzTnpZeElESTBMakl5TXprZ01USWdNalF1TlNBeE1rZ3lOUzQxUXpJMUxqYzNOakVnTVRJZ01qWWdNVEV1TnpjMk1TQXlOaUF4TVM0MVZqRXdTREkzTGpWRE1qY3VOemMyTVNBeE1DQXlPQ0E1TGpjM05qRTBJREk0SURrdU5WWTRMalZETWpnZ09DNHlNak00TmlBeU55NDNOell4SURnZ01qY3VOU0E0U0RJMlZqWXVOVU15TmlBMkxqSXlNemcySURJMUxqYzNOakVnTmlBeU5TNDFJRFpJTWpRdU5VTXlOQzR5TWpNNUlEWWdNalFnTmk0eU1qTTROaUF5TkNBMkxqVldPRWd5TWk0MVF6SXlMakl5TXprZ09DQXlNaUE0TGpJeU16ZzJJREl5SURndU5WWTVMalZETWpJZ09TNDNOell4TkNBeU1pNHlNak01SURFd0lESXlMalVnTVRCSU1qUldNVEV1TlZvaUlHWnBiR3c5SWlNd1F6YzBSRVlpTHo0S1BIQmhkR2dnWkQwaVRUSTJJREV3VmpsSU1qVldNVEJJTWpaYVRUSTJJRGhJTWpWV09VZ3lObFk0V2sweU5DQTRWamxJTWpWV09FZ3lORnBOTWpRZ01UQklNalZXT1VneU5GWXhNRnBOTWpRdU5TQXhNVU15TkM0M056WXhJREV4SURJMUlERXhMakl5TXprZ01qVWdNVEV1TlVneU0wTXlNeUF4TWk0ek1qZzBJREl6TGpZM01UWWdNVE1nTWpRdU5TQXhNMVl4TVZwTk1qVXVOU0F4TVVneU5DNDFWakV6U0RJMUxqVldNVEZhVFRJMUlERXhMalZETWpVZ01URXVNakl6T1NBeU5TNHlNak01SURFeElESTFMalVnTVRGV01UTkRNall1TXpJNE5DQXhNeUF5TnlBeE1pNHpNamcwSURJM0lERXhMalZJTWpWYVRUSTFJREV3VmpFeExqVklNamRXTVRCSU1qVmFUVEkzTGpVZ09VZ3lObFl4TVVneU55NDFWamxhVFRJM0lEa3VOVU15TnlBNUxqSXlNemcySURJM0xqSXlNemtnT1NBeU55NDFJRGxXTVRGRE1qZ3VNekk0TkNBeE1TQXlPU0F4TUM0ek1qZzBJREk1SURrdU5VZ3lOMXBOTWpjZ09DNDFWamt1TlVneU9WWTRMalZJTWpkYVRUSTNMalVnT1VNeU55NHlNak01SURrZ01qY2dPQzQzTnpZeE5DQXlOeUE0TGpWSU1qbERNamtnTnk0Mk56RTFOeUF5T0M0ek1qZzBJRGNnTWpjdU5TQTNWamxhVFRJMklEbElNamN1TlZZM1NESTJWamxhVFRJMUlEWXVOVlk0U0RJM1ZqWXVOVWd5TlZwTk1qVXVOU0EzUXpJMUxqSXlNemtnTnlBeU5TQTJMamMzTmpFMElESTFJRFl1TlVneU4wTXlOeUExTGpZM01UVTNJREkyTGpNeU9EUWdOU0F5TlM0MUlEVldOMXBOTWpRdU5TQTNTREkxTGpWV05VZ3lOQzQxVmpkYVRUSTFJRFl1TlVNeU5TQTJMamMzTmpFMElESTBMamMzTmpFZ055QXlOQzQxSURkV05VTXlNeTQyTnpFMklEVWdNak1nTlM0Mk56RTFOeUF5TXlBMkxqVklNalZhVFRJMUlEaFdOaTQxU0RJelZqaElNalZhVFRJeUxqVWdPVWd5TkZZM1NESXlMalZXT1ZwTk1qTWdPQzQxUXpJeklEZ3VOemMyTVRRZ01qSXVOemMyTVNBNUlESXlMalVnT1ZZM1F6SXhMalkzTVRZZ055QXlNU0EzTGpZM01UVTNJREl4SURndU5VZ3lNMXBOTWpNZ09TNDFWamd1TlVneU1WWTVMalZJTWpOYVRUSXlMalVnT1VNeU1pNDNOell4SURrZ01qTWdPUzR5TWpNNE5pQXlNeUE1TGpWSU1qRkRNakVnTVRBdU16STROQ0F5TVM0Mk56RTJJREV4SURJeUxqVWdNVEZXT1ZwTk1qUWdPVWd5TWk0MVZqRXhTREkwVmpsYVRUSTFJREV4TGpWV01UQklNak5XTVRFdU5VZ3lOVm9pSUdacGJHdzlJaU13UXpjMFJFWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMDFMV2x1YzJsa1pTMHlYelV3TVY4Mk1EWTJLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTkZSa1k0UmtZaUx6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE1pQXhOME14TWlBeE5DNHlNemcySURFMExqSXpPRFlnTVRJZ01UY2dNVEpXTVRkV01qSkRNVFF1TWpNNE5pQXlNaUF4TWlBeE9TNDNOakUwSURFeUlERTNXazB4TnlBeE1FTXhNeTR4TXpRZ01UQWdNVEFnTVRNdU1UTTBJREV3SURFM1F6RXdJREl3TGpnMk5pQXhNeTR4TXpRZ01qUWdNVGNnTWpSRE1qQXVPRFkySURJMElESTBJREl3TGpnMk5pQXlOQ0F4TjBNeU5DQXhNeTR4TXpRZ01qQXVPRFkySURFd0lERTNJREV3V2lJZ1ptbHNiRDBpSXpCRE56UkVSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UY2dOUzR3T0RNek5GWTNMakkxSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHhOeUF5Tmk0M05WWXlPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXdRemMwUkVZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJRGd1TlRjeE5qZE1NVEF1TVRFZ01UQXVNVEVpSUhOMGNtOXJaVDBpSXpCRE56UkVSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURJekxqZzVUREkxTGpReU9ETWdNalV1TkRJNE15SWdjM1J5YjJ0bFBTSWpNRU0zTkVSR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284Y0dGMGFDQmtQU0pOTlM0d09ETXpOQ0F4TjBnM0xqSTFJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweU5pNDNOU0F4TjBneU9DNDVNVFkzSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lESTFMalF5T0ROTU1UQXVNVEVnTWpNdU9Ea2lJSE4wY205clpUMGlJekJETnpSRVJpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREV3TGpFeFRESTFMalF5T0RNZ09DNDFOekUyTnlJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVEUySWlCb1pXbG5hSFE5SWpnd0lpQjJhV1YzUW05NFBTSXdJREFnTVRFMklEZ3dJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOFp5QmpiR2x3TFhCaGRHZzlJblZ5YkNnalkyeHBjREJmT0RBMVh6TXdPRE14S1NJK0NqeHdZWFJvSUdROUlrMHdJRE5ETUNBeExqTTBNekUxSURFdU16UXpNVFVnTUNBeklEQklNVEV6UXpFeE5DNDJOVGNnTUNBeE1UWWdNUzR6TkRNeE5TQXhNVFlnTTFZNE1FZ3dWak5hSWlCbWFXeHNQU0lqUmpOR05FWTBJaTgrQ2p4eVpXTjBJSGRwWkhSb1BTSXhNVGdpSUdobGFXZG9kRDBpTWpRaUlHWnBiR3c5SW5kb2FYUmxJaTgrQ2p4d1lYUm9JR1E5SWsweE1pNDFJRFF4UXpFeUxqVWdNemt1TURZM0lERTBMakEyTnlBek55NDFJREUySURNM0xqVklNVEUzTGpWV09EQXVOVWd4TWk0MVZqUXhXaUlnWm1sc2JEMGlkMmhwZEdVaUlITjBjbTlyWlQwaUkwVTNSVGxGT1NJdlBnbzhjbVZqZENCNFBTSTBOU0lnZVQwaU5pSWdkMmxrZEdnOUlqSTNJaUJvWldsbmFIUTlJakV6SWlCeWVEMGlNeUlnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlORGtpSUhkcFpIUm9QU0kzTkNJZ2FHVnBaMmgwUFNJMklpQnllRDBpTVNJZ1ptbHNiRDBpSTBVM1JUbEZRU0l2UGdvOGNtVmpkQ0I0UFNJeU5DSWdlVDBpTlRraUlIZHBaSFJvUFNJMU9TSWdhR1ZwWjJoMFBTSTRJaUJ5ZUQwaU1TSWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSTNOaUlnZVQwaU5pSWdkMmxrZEdnOUlqSTNJaUJvWldsbmFIUTlJakV6SWlCeWVEMGlNeUlnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l4TURjaUlIazlJallpSUhkcFpIUm9QU0l5TnlJZ2FHVnBaMmgwUFNJeE15SWdjbmc5SWpNaUlHWnBiR3c5SWlORk4wVTVSVUVpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamt4TWlBeE1TNDJOemMxUXpJekxqTTBPVFlnT1M0d01UVXdOaUF5TUM0eU5EWWdOeTQwTkRnMk5TQXhOaTQ1T0RFeUlEZ3VNVGM1TlRsRE1UTXVOekUyTkNBNExqa3dPVGMzSURFeExqVXlOVFlnTVRFdU5qWXdPQ0F4TWk0d09EZ2dNVFF1TXpJeU5VTXhNaTQyTlRBMUlERTJMams0TkRrZ01UVXVOelUwSURFNExqVTFNVE1nTVRrdU1ERTRPQ0F4Tnk0NE1qQTBRekl5TGpJNE16WWdNVGN1TURrd01pQXlOQzQwTnpRMElERTBMak16T1RrZ01qTXVPVEV5SURFeExqWTNOelZhVFRFNElERTFMalExTkRGRE1UWXVOamd5TXlBeE5TNDBOVFF4SURFMUxqWXhORGtnTVRRdU16VTFNU0F4TlM0Mk1UUTVJREV6UXpFMUxqWXhORGtnTVRFdU5qUTBPU0F4Tmk0Mk9ETWdNVEF1TlRRMU9TQXhPQ0F4TUM0MU5EVTVRekU1TGpNeE55QXhNQzQxTkRVNUlESXdMak00TlRFZ01URXVOalEwTWlBeU1DNHpPRFV4SURFelF6SXdMak00TlRFZ01UUXVNelUxT0NBeE9TNHpNVGNnTVRVdU5EVTBNU0F4T0NBeE5TNDBOVFF4V2lJZ1ptbHNiRDBpSXpBd09FTTVPU0l2UGdvOGNHRjBhQ0JrUFNKTk1UZ3VOVEkzTnlBNUxqVTJOREU0UXpFMkxqWXpOalVnT1M0MU5qUXhPQ0F4TlM0eE1ETXhJREV4TGpFME1Ua2dNVFV1TVRBek1TQXhNeTR3T0RjNFF6RTFMakV3TXpFZ01UVXVNRE16TnlBeE5pNDJNelkxSURFMkxqWXhNVFVnTVRndU5USTNOeUF4Tmk0Mk1URTFRekl3TGpReE9UWWdNVFl1TmpFeE5TQXlNUzQ1TlRNZ01UVXVNRE16TnlBeU1TNDVOVE1nTVRNdU1EZzNPRU15TVM0NU5USXlJREV4TGpFME1Ua2dNakF1TkRFNE9TQTVMalUyTkRFNElERTRMalV5TnpjZ09TNDFOalF4T0ZwTk1UY3VPVGs1T1NBeE5TNHhORE0yUXpFMkxqZzBPVE1nTVRVdU1UUXpOaUF4TlM0NU1UWTJJREUwTGpFNE16a2dNVFV1T1RFMk5pQXhNME14TlM0NU1UWTJJREV4TGpneE5qRWdNVFl1T0RRNU15QXhNQzQ0TlRZMElERTNMams1T1RrZ01UQXVPRFUyTkVNeE9TNHhOVEEwSURFd0xqZzFOalFnTWpBdU1EZ3pNU0F4TVM0NE1UWXhJREl3TGpBNE16RWdNVE5ETWpBdU1EZ3pNU0F4TkM0eE9ETTVJREU1TGpFMU1EUWdNVFV1TVRRek5pQXhOeTQ1T1RrNUlERTFMakUwTXpaYUlpQm1hV3hzUFNJak56QkRRMFF6SWk4K0Nqd3ZaejRLUEdSbFpuTStDanhqYkdsd1VHRjBhQ0JwWkQwaVkyeHBjREJmT0RBMVh6TXdPRE14SWo0S1BIQmhkR2dnWkQwaVRUQWdNME13SURFdU16UXpNVFVnTVM0ek5ETXhOU0F3SURNZ01FZ3hNVE5ETVRFMExqWTFOeUF3SURFeE5pQXhMak0wTXpFMUlERXhOaUF6Vmpnd1NEQldNMW9pSUdacGJHdzlJbmRvYVhSbElpOCtDand2WTJ4cGNGQmhkR2crQ2p3dlpHVm1jejRLUEM5emRtYytDZz09XCIiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFRhYmxlQ3JlYXRvciBmcm9tIFwiLi9UYWJsZUNyZWF0b3IvVGFibGVDcmVhdG9yXCI7XG5pbXBvcnQgRGVzaWduTGludGVyIGZyb20gXCIuL0Rlc2lnbkxpbnRlci9EZXNpZ25MaW50ZXJcIjtcbmltcG9ydCBSZXNpemVyIGZyb20gXCIuL1Jlc2l6ZXJcIjtcbmltcG9ydCBUaGVtZVN3aXRjaGVyIGZyb20gXCIuL1RoZW1lU3dpdGNoZXJcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgSG9tZSBmcm9tIFwiLi9Ib21lXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcIi4uL3V0aWxpdHktZnVuY3Rpb25zXCI7XG5pbXBvcnQgXCIuLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBBcHAgPSAoe30pID0+IHtcbiAgICBjb25zdCBbYWN0aXZlUGx1Z2luLCBzZXRBY3RpdmVQbHVnaW5dID0gdXNlU3RhdGUoXCJob21lXCIpO1xuICAgIGNvbnN0IFtsYXRlc3RGaWdtYUNvbW1hbmQsIHNldExhdGVzdEZpZ21hQ29tbWFuZF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRUZXh0TGF5ZXJzLCBzZXRTZWxlY3RlZFRleHRMYXllcnNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtzYW1wbGVUZXh0SW5kZXgsIHNldFNhbXBsZVRleHRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbbG9jYWxDdXN0b21EaWN0aW9uYXJ5LCBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnldID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCwgc2V0TG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbY29sb3JzV2l0aElzc3Vlcywgc2V0Q29sb3JzV2l0aElzc3Vlc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2xvYWRpbmdDb2xvckRhdGEsIHNldExvYWRpbmdDb2xvckRhdGFdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzZWxlY3Rpb25NYWRlLCBzZXRTZWxlY3Rpb25NYWRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbY3VycmVudFNlbGVjdGlvbiwgc2V0Q3VycmVudFNlbGVjdGlvbl0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtpbmNvbWluZ1NlbGVjdGlvbiwgc2V0SW5jb21pbmdTZWxlY3Rpb25dID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlLCBzZXRDdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2VdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY29sb3JUb2tlbnMsIHNldENvbG9yVG9rZW5zXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2FjdGl2ZUNvbG9yVGlsZSwgc2V0QWN0aXZlQ29sb3JUaWxlXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2NvbG9ySXNzdWVzRml4ZWQsIHNldENvbG9ySXNzdWVzRml4ZWRdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2xvYWRpbmdEYXJrU3dpdGNoLCBzZXRMb2FkaW5nRGFya1N3aXRjaF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRpbmdMaWdodFN3aXRjaCwgc2V0TG9hZGluZ0xpZ2h0U3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudCA9IChldmVudE5hbWUsIGN1c3RvbURhdGEpID0+IHtcbiAgICAgICAgbmV3cmVsaWMuYWRkUGFnZUFjdGlvbihldmVudE5hbWUsIGN1c3RvbURhdGEpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoY3VzdG9tRGF0YSk7XG4gICAgICAgICAgICB9LCA1NTApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJpbml0aWFsaXplLXNlbGVjdGlvblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIG1lc3NhZ2UgfSA9IGV2ZW50LmRhdGEucGx1Z2luTWVzc2FnZTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmaWdtYS1jb21tYW5kXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogcGx1Z2luLW9wZW5lZGAsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRMYXRlc3RGaWdtYUNvbW1hbmQobWVzc2FnZS5vcGVuZWRUbyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbml0aWFsLXNlbGVjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50U2VsZWN0aW9uKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0aW9uLWNoYW5nZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0SW5jb21pbmdTZWxlY3Rpb24obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWJsZS1jcmVhdGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IHRhYmxlLWNyZWF0ZWRcIiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJjbG9zZS1wbHVnaW5cIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5ldy10ZXh0LXNlbGVjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRTYW1wbGVUZXh0SW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkVGV4dExheWVycyhtZXNzYWdlLnRleHRMYXllcnMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UobWVzc2FnZS5zZWxlY3RlZExheWVycyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0LWxpbnRlZFwiOlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChcIk9uZUNvcmVUb29sYm94OiBsYW5ndWFnZS1saW50ZWRcIiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlLmN1c3RvbUV2ZW50RGF0YSksIHsgc3VnZ2VzdGlvbnM6IG1lc3NhZ2UubWluaW1hbFJlcG9ydCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZnVsbFJlcG9ydC5mb3JFYWNoKChzdWdnZXN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChcIk9uZUNvcmVUb29sYm94OiBsYW5ndWFnZS1saW50ZXItc3VnZ2VzdGlvbi1tYWRlXCIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbWVzc2FnZS5jdXN0b21FdmVudERhdGEpLCBzdWdnZXN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibG9jYWwtY3VzdG9tLWRpY3Rpb25hcnktcmV0cmlldmVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnkobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb2xvci1zdGF0c1wiOlxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcygoX2EgPSBtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2UuY29sb3JTdGF0cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbG9yc05vdFVzaW5nT25lQ29yZUNvbG9yU3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25NYWRlKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5zZWxlY3Rpb25NYWRlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JUb2tlbnMobWVzc2FnZS5jb2xvclRva2Vucyk7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbG9ySXNzdWVzRml4ZWQoMCk7XG4gICAgICAgICAgICAgICAgICAgIChtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2Uuc2VsZWN0aW9uTWFkZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogY29sb3JzLWxpbnRlZGAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWVzc2FnZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlS2V5OiBtZXNzYWdlLmZpbGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVc2VyIE5hbWVcIjogbWVzc2FnZVtcIlVzZXIgTmFtZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgQXZhdGFyXCI6IG1lc3NhZ2VbXCJVc2VyIEF2YXRhclwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgSURcIjogbWVzc2FnZVtcIlVzZXIgSURcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTZXNzaW9uIElEXCI6IG1lc3NhZ2VbXCJTZXNzaW9uIElEXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGF5ZXJzV2l0aENvbG9yOiBtZXNzYWdlLmNvbG9yU3RhdHMuc2VsZWN0ZWRMYXllcnNXaXRoQ29sb3IubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEluc3RhbmNlc09mQ29sb3I6IG1lc3NhZ2UuY29sb3JTdGF0cy5hbGxJbnN0YW5jZXNPZkNvbG9yLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNXaXRoQ29sb3JTdHlsZTogbWVzc2FnZS5jb2xvclN0YXRzLmNvbG9yc1dpdGhDb2xvclN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNVc2luZ09uZUNvcmVTdHlsZTogbWVzc2FnZS5jb2xvclN0YXRzLmNvbG9yc1VzaW5nT25lQ29yZVN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNOb3RVc2luZ09uZUNvcmVDb2xvclN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzTm90VXNpbmdPbmVDb3JlQ29sb3JTdHlsZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lQ29yZUNvbG9yU3R5bGVDb3ZlcmFnZTogbWVzc2FnZS5jb2xvclN0YXRzLm9uZUNvcmVDb2xvclN0eWxlQ292ZXJhZ2UubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkc09mQWxsSW5zdGFuY2VzT2ZDb2xvcjogbWVzc2FnZS5jb2xvclN0YXRzLmlkc09mQWxsSW5zdGFuY2VzT2ZDb2xvci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbG9yLXJlcGxhY2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogY29sb3ItcmVwbGFjZWRgLCBPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2FkaW5nLWxpZ2h0LXRoZW1lLXN3aXRjaFwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTGlnaHRTd2l0Y2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2FkaW5nLWRhcmstdGhlbWUtc3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdEYXJrU3dpdGNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidGhlbWUtc3dpdGNoZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3dpdGNoZWRUbyA9PT0gXCJkYXJrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdEYXJrU3dpdGNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN3aXRjaGVkVG8gPT09IFwibGlnaHRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0xpZ2h0U3dpdGNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW5kVGhlbWVTd2l0Y2hlckV2ZW50ID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChgT25lQ29yZVRvb2xib3g6IHRoZW1lLXN3aXRjaGVkYCwgT2JqZWN0LmFzc2lnbih7fSwgbWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY2xvc2VBZnRlclJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJjbG9zZS1wbHVnaW5cIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRUaGVtZVN3aXRjaGVyRXZlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsYXRlc3RGaWdtYUNvbW1hbmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3dpdGNoIChsYXRlc3RGaWdtYUNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib3Blbi1ob21lXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImhvbWVcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLXRhYmxlLWNyZWF0b3JcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tdGhlbWUtc3dpdGNoZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwidGhlbWUtc3dpdGNoZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWxhbmd1YWdlLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJsYW5ndWFnZS1saW50ZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWNvbG9yLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJjb2xvci1saW50ZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2xhdGVzdEZpZ21hQ29tbWFuZF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGluY29taW5nU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFNlbGVjdGlvbiwgaW5jb21pbmdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudFNlbGVjdGlvbihpbmNvbWluZ1NlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbaW5jb21pbmdTZWxlY3Rpb25dKTtcbiAgICBjb25zdCBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uID0gKGRlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVBsdWdpbihkZXN0aW5hdGlvbik7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJuYXZpZ2F0ZS10by10YWJcIixcbiAgICAgICAgICAgICAgICB0YWJDbGlja2VkOiBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclBsdWdpbkJvZHkgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aXZlUGx1Z2luKSB7XG4gICAgICAgICAgICBjYXNlIFwiaG9tZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEhvbWUsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcInRhYmxlLWNyZWF0b3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUNyZWF0b3IsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcImxhbmd1YWdlLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25MaW50ZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uLCBvcGVuVG86IFwibGFuZ3VhZ2VcIiB9KSk7XG4gICAgICAgICAgICBjYXNlIFwidGhlbWUtc3dpdGNoZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZVN3aXRjaGVyLCB7IHNldEFjdGl2ZVBsdWdpbjogaGFuZGxlUGx1Z2luTmF2aWdhdGlvbiB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJjb2xvci1saW50ZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzaWduTGludGVyLCB7IHNldEFjdGl2ZVBsdWdpbjogaGFuZGxlUGx1Z2luTmF2aWdhdGlvbiwgb3BlblRvOiBcImNvbG9yXCIgfSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmdW5jdGlvbnMgPSB7XG4gICAgICAgIGhhbmRsZVBsdWdpbk5hdmlnYXRpb24sXG4gICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50LFxuICAgIH07XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgIHNlbGVjdGVkVGV4dExheWVycyxcbiAgICAgICAgc2V0U2VsZWN0ZWRUZXh0TGF5ZXJzLFxuICAgICAgICBzYW1wbGVUZXh0SW5kZXgsXG4gICAgICAgIHNldFNhbXBsZVRleHRJbmRleCxcbiAgICAgICAgbG9jYWxDdXN0b21EaWN0aW9uYXJ5LFxuICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnksXG4gICAgICAgIGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLFxuICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCxcbiAgICAgICAgY29sb3JzV2l0aElzc3VlcyxcbiAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcyxcbiAgICAgICAgbG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgc2VsZWN0aW9uTWFkZSxcbiAgICAgICAgc2V0U2VsZWN0aW9uTWFkZSxcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbixcbiAgICAgICAgaW5jb21pbmdTZWxlY3Rpb24sXG4gICAgICAgIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZSxcbiAgICAgICAgY29sb3JUb2tlbnMsXG4gICAgICAgIGFjdGl2ZUNvbG9yVGlsZSxcbiAgICAgICAgc2V0QWN0aXZlQ29sb3JUaWxlLFxuICAgICAgICBjb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICBzZXRDb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICBsb2FkaW5nRGFya1N3aXRjaCxcbiAgICAgICAgbG9hZGluZ0xpZ2h0U3dpdGNoLFxuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgZnVuY3Rpb25zLCBzdGF0ZSB9IH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVzaXplciwgbnVsbCksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiYXBwXCIgfSwgcmVuZGVyUGx1Z2luQm9keSgpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgQ29sb3JUaWxlIGZyb20gXCIuL0NvbG9yVGlsZVwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbG9yTGludGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBjb2xvcnNXaXRoSXNzdWVzLCBzZXRDb2xvcnNXaXRoSXNzdWVzLCBsb2FkaW5nQ29sb3JEYXRhLCBzZXRMb2FkaW5nQ29sb3JEYXRhLCBzZWxlY3Rpb25NYWRlLCBjb2xvcklzc3Vlc0ZpeGVkLCB9ID0gc3RhdGU7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSh0cnVlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1jb2xvci1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaWdub3JlQ29sb3JJc3N1ZSA9IChjb2xvcklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbG9yVG9CZVJlbW92ZWQgPSBjb2xvcnNXaXRoSXNzdWVzLmZpbmQoKGNvbG9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3IuY29sb3JJZCA9PT0gY29sb3JJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZDb2xvclRvQmVSZW1vdmVkID0gY29sb3JzV2l0aElzc3Vlcy5pbmRleE9mKGNvbG9yVG9CZVJlbW92ZWQpO1xuICAgICAgICBjb25zdCBuZXdDb2xvcnNXaXRoSXNzdWVzID0gWy4uLmNvbG9yc1dpdGhJc3N1ZXNdO1xuICAgICAgICBuZXdDb2xvcnNXaXRoSXNzdWVzLnNwbGljZShpbmRleE9mQ29sb3JUb0JlUmVtb3ZlZCwgMSk7XG4gICAgICAgIHNldENvbG9yc1dpdGhJc3N1ZXMobmV3Q29sb3JzV2l0aElzc3Vlcyk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb2xvcklzc3VlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKChjb2xvcnNXaXRoSXNzdWVzID09PSBudWxsIHx8IGNvbG9yc1dpdGhJc3N1ZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvcnNXaXRoSXNzdWVzLm1hcCgoY29sb3IsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENvbG9yVGlsZSwgeyBjb2xvckRhdGE6IGNvbG9yLCBrZXk6IGluZGV4LCBpZ25vcmVDb2xvcklzc3VlOiBpZ25vcmVDb2xvcklzc3VlIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVSZXNjYW5MYXllcnNDbGljayA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSh0cnVlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1jb2xvci1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckVtcHR5U3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRpbmdUZXh0ID0gIWxvYWRpbmdDb2xvckRhdGFcbiAgICAgICAgICAgID8gXCJTZWxlY3QgYSBsYXllcihzKSB0byBnZXQgc3RhcnRlZFwiXG4gICAgICAgICAgICA6IFwiTG9hZGluZyBjb2xvciBkYXRhLi4uXCI7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uVGV4dCA9ICFsb2FkaW5nQ29sb3JEYXRhXG4gICAgICAgICAgICA/IFwiVG8gY2hlY2sgeW91ciBjb2xvcnMgc2VsZWN0IGFueSBsYXllciwgZnJhbWUsIG9yIGdyb3VwIG9mIGxheWVycyBhbmQgdGhlbiBsaW50IGNvbG9ycy5cIlxuICAgICAgICAgICAgOiBcIlRoaXMgbWF5IHRha2UgYSBtb21lbnRcIjtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgbG9hZGluZ0NvbG9yRGF0YSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxvYWRlclwiIH0pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWhlYWRpbmdcIiB9LCBoZWFkaW5nVGV4dCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1lbXB0eS1zdGF0ZS1kZXNjcmlwdGlvblwiIH0sIGRlc2NyaXB0aW9uVGV4dCksXG4gICAgICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gaGFuZGxlUmVzY2FuTGF5ZXJzQ2xpY2soKSB9LCBcIkNoZWNrIGNvbG9yc1wiKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbG9yTGludGluZ1N1bW1hcnkgPSAoKSA9PiB7XG4gICAgICAgIGlmICghbG9hZGluZ0NvbG9yRGF0YSAmJiBzZWxlY3Rpb25NYWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1zdW1hcnlcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoIC0gY29sb3JJc3N1ZXNGaXhlZCxcbiAgICAgICAgICAgICAgICAgICAgXCIgY29sb3IgaXNzdWVzIGZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctc3VtbWFyeS1kZXNjcmlwdGlvblwiIH0sIGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoIC0gY29sb3JJc3N1ZXNGaXhlZCA+IDAgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJUbyBmaXggdGhlc2UgaXNzdWVzLCByZXBsYWNlIGVhY2ggb2YgdGhlIGNvbG9ycyBsaXN0ZWQgYmVsb3cgd2l0aCBhIE9uZSBDb3JlIGNvbG9yIHN0eWxlLlwiLFxuICAgICAgICAgICAgICAgICAgICBgIGAsXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL2NvbG9yLyNzZW1hbnRpYy10b2tlbnNcIiwgdGFyZ2V0OiBcIl9ibGFua1wiIH0sIFwiU2VlIGNvbG9yIGRvY3NcIiksXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZvciBtb3JlIGluZm8uXCIpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBcIlRoZXJlIGFyZSBubyBjb2xvciBpc3N1ZXMgd2l0aCB0aGUgc2VsZWN0ZWQgbGF5ZXJzIDopLiBUbyBjaGVjayBmb3IgaXNzdWVzIGluIG90aGVyIGxheWVycyBzZWxlY3QgYW5vdGhlciBsYXllcihzKSBhbmQgY2xpY2sgXFxcIlJlLXNjYW4gY29sb3JzXFxcIi5cIikpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlckVtcHR5U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9Db2xvcklzc3VlcyA9IChjb2xvcnNXaXRoSXNzdWVzID09PSBudWxsIHx8IGNvbG9yc1dpdGhJc3N1ZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoKSA9PT0gMDtcbiAgICBjb25zdCBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwiY29sb3ItbGludGVyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgIFwic3VtbWFyeS1pcy1sb2FkaW5nXCI6IGxvYWRpbmdDb2xvckRhdGEsXG4gICAgICAgIFwic3VtbWFyeS1pcy1lbXB0eVwiOiBub0NvbG9ySXNzdWVzLFxuICAgICAgICBcIm5vLXNlbGVjdGlvbi1tYWRlXCI6ICFzZWxlY3Rpb25NYWRlLFxuICAgIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIiwgeyBjbGFzc05hbWU6IGNvbG9yTGludGVyQ29udGFpbmVyQ2xhc3NlcyB9LFxuICAgICAgICAgICAgcmVuZGVyQ29sb3JMaW50aW5nU3VtbWFyeSgpLFxuICAgICAgICAgICAgIWxvYWRpbmdDb2xvckRhdGEgJiYgIW5vQ29sb3JJc3N1ZXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlcy1jb250YWluZXJcIiB9LCByZW5kZXJDb2xvcklzc3VlcygpKSkpLFxuICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiBzZWxlY3Rpb25NYWRlICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctZm9vdGVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVJlc2NhbkxheWVyc0NsaWNrKCkgfSwgXCJDaGVjayBjdXJyZW50IHNlbGVjdGlvblwiKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQ29sb3JMaW50ZXI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi4vUGx1Z2luQ29udGV4dFwiO1xuaW1wb3J0IGNocm9tYSBmcm9tIFwiY2hyb21hLWpzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IGljb25MYXllclRleHQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXRleHQuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyRWxsaXBzZSBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItZWxsaXBzZS5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJMaW5lIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1saW5lLnN2Z1wiO1xuaW1wb3J0IGljb25MYXllclBvbHlnb24gZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXBvbHlnb24uc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyUmVjdGFuZ2xlIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1yZWN0YW5nbGUuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyQm9vbGVhbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItYm9vbGVhbi1vcGVyYXRpb24uc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcInJlYWN0LWZpZ21hLXBsdWdpbi1kc1wiO1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tIFwicmVhY3QtZmVhdGhlclwiO1xuaW1wb3J0IFwicmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3NcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbG9yVGlsZSA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBjb2xvclRva2VucywgYWN0aXZlQ29sb3JUaWxlLCBzZXRBY3RpdmVDb2xvclRpbGUsIGNvbG9ySXNzdWVzRml4ZWQsIHNldENvbG9ySXNzdWVzRml4ZWQsIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IGNvbG9ySWQsIGxheWVySWQsIGxheWVyTmFtZSwgbGF5ZXJUeXBlLCBjb2xvclR5cGUsIGNvbG9ySW5IZXgsIH0gPSBwcm9wcy5jb2xvckRhdGE7XG4gICAgY29uc3QgeyBpZ25vcmVDb2xvcklzc3VlIH0gPSBwcm9wcztcbiAgICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVBY3RpdmUsIHNldE1lbnVBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51QnV0dG9uSG92ZXJlZCwgc2V0TWVudUJ1dHRvbkhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51SG92ZXJlZCwgc2V0TWVudUhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51VGltZXIsIHNldE1lbnVUaW1lcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaXNzdWVGaXhlZCwgc2V0SXNzdWVGaXhlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGFjdGl2ZUNvbG9yVGlsZSA9PT0gY29sb3JJZCkge1xuICAgICAgICAgICAgc2V0SXNFeHBhbmRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZUNvbG9yVGlsZV0pO1xuICAgIGNvbnN0IGhhbmRsZUNvbG9yVGlsZUNsaWNrID0gKGxheWVySWQpID0+IHtcbiAgICAgICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUoY29sb3JJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUoXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdC1sYXllclwiLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IGxheWVySWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgdHJ1bmNhdGVMYXllck5hbWUgPSAobGF5ZXJOYW1lLCBsZW5ndGggPSAyNSkgPT4ge1xuICAgICAgICBpZiAobGF5ZXJOYW1lLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGxheWVyTmFtZS5zdWJzdHJpbmcoMCwgbGVuZ3RoKSArIFwiLi4uXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVyTmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRva2VuU3VnZ2VzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoY29sb3JUb2tlbnMgPT09IG51bGwgfHwgY29sb3JUb2tlbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yVG9rZW5zLmxlbmd0aCkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENvbG9yVG9rZW5zID0gY29sb3JUb2tlbnMuZmlsdGVyKHRva2VuID0+ICF0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3ByaXZhdGUnKSk7XG4gICAgICAgICAgICBsZXQgcmVsZXZhbnRDb2xvclN0eWxlcyA9IFtdO1xuICAgICAgICAgICAgbGV0IG1vc3RSZWxldmFudENvbG9yU3R5bGVzID0gW107XG4gICAgICAgICAgICBpZiAobGF5ZXJUeXBlID09PSBcIlRFWFRcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ0ZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbG9yVHlwZSA9PT0gXCJmaWxsXCIpIHtcbiAgICAgICAgICAgICAgICByZWxldmFudENvbG9yU3R5bGVzID0gZmlsdGVyZWRDb2xvclRva2Vuc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYmFja2dyb3VuZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEubmFtZS50b0xvd2VyQ2FzZSgpID4gYi5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2xvclR5cGUgPT09IFwic3Ryb2tlXCIpIHtcbiAgICAgICAgICAgICAgICByZWxldmFudENvbG9yU3R5bGVzID0gZmlsdGVyZWRDb2xvclRva2Vuc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYm9yZGVyXCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1vc3RSZWxldmFudENvbG9yU3R5bGVzID0gcmVsZXZhbnRDb2xvclN0eWxlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHJlbGV2YW50Q29sb3JTdHlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWxldmFudENvbG9yU3R5bGUuaGV4ID09PSBcIk5vbmVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZWxldmFudENvbG9yU3R5bGUpLCB7IHNpbWlsYXJpdHk6IDAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9uZUNvcmVDb2xvciA9IHJlbGV2YW50Q29sb3JTdHlsZS5oZXg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2ltaWxhcml0eSA9IDEwMCAtIGNocm9tYS5kaXN0YW5jZShvbmVDb3JlQ29sb3IsIGNvbG9ySW5IZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlbGV2YW50Q29sb3JTdHlsZSksIHsgc2ltaWxhcml0eSB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYi5zaW1pbGFyaXR5IC0gYS5zaW1pbGFyaXR5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHRva2VuID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlVG9rZW4gPSB0b2tlbi50aGVtZSA9PT0gJ2RhcmsnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gcmVsZXZhbnRDb2xvclN0eWxlcy5zb21lKHJlbGV2YW50U3R5bGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVsZXZhbnRTdHlsZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIShpc0R1cGxpY2F0ZSAmJiBpc0RhcmtNb2RlVG9rZW4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNCk7XG4gICAgICAgICAgICByZXR1cm4gbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMubWFwKChjb2xvclN0eWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW1cIiwga2V5OiBpbmRleCwgb25DbGljazogKGUpID0+IGhhbmRsZVN1Z2dlc3Rpb25GaXhDbGljayhlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlS2V5OiBjb2xvclN0eWxlLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVOYW1lOiBjb2xvclN0eWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlQ29sb3I6IGNvbG9yU3R5bGUuaGV4LFxuICAgICAgICAgICAgICAgICAgICB9KSB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlXCIsIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogY29sb3JTdHlsZS5oZXggfSB9KSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtcHJpbWFyeS1jb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZ1wiIH0sIGNvbG9yU3R5bGUubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtZGVzY3JpcHRpb25cIiB9LCBjb2xvclN0eWxlLmRlc2NyaXB0aW9uKSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGFcIiB9LCBcIkFwcGx5IGZpeFwiKSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoIW1lbnVBY3RpdmUpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQnRuTWVudU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVCdXR0b25Ib3ZlcmVkKHRydWUpO1xuICAgICAgICBjbGVhclRpbWVvdXQobWVudVRpbWVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUJ0bk1lbnVNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgICAgICBzZXRNZW51QnV0dG9uSG92ZXJlZChmYWxzZSk7XG4gICAgICAgIHNldE1lbnVUaW1lcihzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgICAgICB9LCA0MDApKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVIb3ZlcmVkKHRydWUpO1xuICAgICAgICBjbGVhclRpbWVvdXQobWVudVRpbWVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1lbnVNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgICAgICBzZXRNZW51SG92ZXJlZChmYWxzZSk7XG4gICAgICAgIHNldE1lbnVUaW1lcihzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgICAgICB9LCAyMDApKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlSWdub3JlSXNzdWVDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlnbm9yZUNvbG9ySXNzdWUoY29sb3JJZCk7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkZpeENsaWNrID0gKGUsIGNvbG9yU3R5bGVEYXRhKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcHBseS1jb2xvci1zdHlsZVwiLFxuICAgICAgICAgICAgICAgIGNvbG9yVHlwZSxcbiAgICAgICAgICAgICAgICBsYXllcklkOiBsYXllcklkLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsQ29sb3I6IGNvbG9ySW5IZXgsXG4gICAgICAgICAgICAgICAgY29sb3JTdHlsZUtleTogY29sb3JTdHlsZURhdGEuY29sb3JTdHlsZUtleSxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlTmFtZTogY29sb3JTdHlsZURhdGEuY29sb3JTdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgY29sb3JTdHlsZUNvbG9yOiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlQ29sb3IsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpO1xuICAgICAgICBzZXRJc3N1ZUZpeGVkKHRydWUpO1xuICAgICAgICAhaXNzdWVGaXhlZCAmJiBzZXRDb2xvcklzc3Vlc0ZpeGVkKGNvbG9ySXNzdWVzRml4ZWQgKyAxKTtcbiAgICB9O1xuICAgIGNvbnN0IGxheWVyVHlwZUljb25zID0ge1xuICAgICAgICBURVhUOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJUZXh0LCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgRUxMSVBTRTogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyRWxsaXBzZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIEZSQU1FOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJmcmFtZVwiIH0pLFxuICAgICAgICBHUk9VUDogUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7IGNsYXNzTmFtZTogXCJsYXllci1pY29uXCIsIG5hbWU6IFwiZ3JvdXBcIiB9KSxcbiAgICAgICAgQ09NUE9ORU5UOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJjb21wb25lbnRcIiB9KSxcbiAgICAgICAgSU5TVEFOQ0U6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImluc3RhbmNlXCIgfSksXG4gICAgICAgIExJTkU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllckxpbmUsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBQT0xZR09OOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJQb2x5Z29uLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgUkVDVEFOR0xFOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJSZWN0YW5nbGUsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBTSEFQRV9XSVRIX1RFWFQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclRleHQsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBTVEFSOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIsIG5hbWU6IFwic3Rhci1vZmZcIiB9KSxcbiAgICAgICAgQk9PTEVBTl9PUEVSQVRJT046IChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJCb29sZWFuT3BlcmF0aW9uLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSksXG4gICAgfTtcbiAgICBjb25zdCBjb2xvclRpbGVIZWFkaW5nVGV4dCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGlzc3VlRml4ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICBcIkZpeGVkIFwiLFxuICAgICAgICAgICAgICAgIGAgYCxcbiAgICAgICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrLCB7IGNvbG9yOiBcIiMxMjY0NDBcIiwgc2l6ZTogMTcgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoY29sb3JUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGUuc2xpY2UoMSkgK1xuICAgICAgICAgICAgICAgIFwiIG5lZWRzIE9uZSBDb3JlIGNvbG9yIHN0eWxlXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb2xvclRpbGVDb250YWluZXJDbGFzc2VzID0gY2xhc3NOYW1lcyhcImNvbG9yLXRpbGUtY29udGFpbmVyXCIsIHtcbiAgICAgICAgXCJtZW51LWFjdGl2ZVwiOiBtZW51QWN0aXZlLFxuICAgICAgICBcImNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWRcIjogbWVudUJ1dHRvbkhvdmVyZWQgfHwgbWVudUhvdmVyZWQsXG4gICAgICAgIGV4cGFuZGVkOiBpc0V4cGFuZGVkLFxuICAgICAgICBcImlzc3VlLWZpeGVkXCI6IGlzc3VlRml4ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IGNvbG9yVGlsZUNvbnRhaW5lckNsYXNzZXMsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1oZWFkZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLXRpdGxlLXNlY3Rpb25cIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWhlYWRpbmdcIiB9LCBjb2xvclRpbGVIZWFkaW5nVGV4dCgpKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0bi1jb2xvci10aWxlLW1lbnVcIiwgb25DbGljazogKGUpID0+IGhhbmRsZU1lbnVDbGljayhlKSwgb25Nb3VzZUVudGVyOiAoKSA9PiBoYW5kbGVCdG5NZW51TW91c2VFbnRlcigpLCBvbk1vdXNlTGVhdmU6ICgpID0+IGhhbmRsZUJ0bk1lbnVNb3VzZUxlYXZlKCkgfSwgXCJPcHRpb25zXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51XCIsIG9uTW91c2VFbnRlcjogKCkgPT4gaGFuZGxlTWVudU1vdXNlRW50ZXIoKSwgb25Nb3VzZUxlYXZlOiAoKSA9PiBoYW5kbGVNZW51TW91c2VMZWF2ZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpIH0sIFwiU2VsZWN0IGxheWVyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIsIG9uQ2xpY2s6IChlKSA9PiBoYW5kbGVJZ25vcmVJc3N1ZUNsaWNrKGUpIH0sIFwiSWdub3JlIGlzc3VlXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImhyXCIsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1zXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vY29sb3IvI3NlbWFudGljLXRva2Vuc1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCIgfSwgXCJTZWUgY29sb3IgZG9jc1wiKSkpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3RcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIGNvbG9yLXRpbGUtbWV0YS1jb2xvclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBjb2xvckluSGV4IH0sIGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWNvbG9yLXNhbXBsZVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICBjb2xvckluSGV4KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSBjb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUeXBlSWNvbnNbbGF5ZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWVcIiB9LCB0cnVuY2F0ZUxheWVyTmFtZShsYXllck5hbWUpKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW1cIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIlR5cGU6IFwiLFxuICAgICAgICAgICAgICAgICAgICBjb2xvclR5cGUpKSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhcnRpY2xlXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRlclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nXCIgfSwgXCJTdWdnZXN0ZWQgY29sb3Igc3R5bGVzXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdFwiIH0sIHJlbmRlclRva2VuU3VnZ2VzdGlvbnMoKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQ29sb3JUaWxlO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuaW1wb3J0IENvbG9yTGludGVyIGZyb20gXCIuL0NvbG9yTGludGVyXCI7XG5pbXBvcnQgTGFuZ3VhZ2VMaW50ZXJQbHVnaW4gZnJvbSBcIi4vTGFuZ3VhZ2VMaW50ZXJQbHVnaW5cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IERlc2lnbkxpbnRlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luLCBvcGVuVG8gfSA9IHByb3BzO1xuICAgIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZShvcGVuVG8pO1xuICAgIGNvbnN0IGhhbmRsZVRhYkNsaWNrID0gKG5hbWVPZlRhYikgPT4ge1xuICAgICAgICBjb25zdCB0YWJBc1NpbmdsZVdvcmQgPSBuYW1lT2ZUYWIuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICBzZXRBY3RpdmVUYWIodGFiQXNTaW5nbGVXb3JkKTtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKG5hbWVPZlRhYik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcImNvbG9yLWxpbnRlclwiLCBcImxhbmd1YWdlLWxpbnRlclwiXTtcbiAgICAgICAgcmV0dXJuIHRhYnMubWFwKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3NlcyA9IFtcInRhYi1uYXZpZ2F0aW9uLXRhYlwiXTtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIGxldCB0YWJMYWJlbCA9IHRhYi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRhYi5zcGxpdChcIi1cIilbMF0uc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhYiArIFwiLWxpbnRlclwiID09PSB0YWIpIHtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzLnB1c2goXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFiTGFiZWwgPT09ICdMYW5ndWFnZScpIHtcbiAgICAgICAgICAgICAgICB0YWJMYWJlbCA9ICdMYW5ndWFnZSAoYmV0YSknO1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXNPdXRwdXQgPSBgJHt0YWJDbGFzc2VzT3V0cHV0fSBsYW5ndWFnZS1iZXRhLXRhYmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogdGFiQ2xhc3Nlc091dHB1dCwgb25DbGljazogKCkgPT4gaGFuZGxlVGFiQ2xpY2sodGFiKSwga2V5OiBpbmRleCB9LFxuICAgICAgICAgICAgICAgIHRhYkxhYmVsLFxuICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgIHRhYkxhYmVsID09PSAnTGFuZ3VhZ2UnICYmIFwiKGJldGEpXCIpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJEZXNpZ25MaW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICBjYXNlIFwibGFuZ3VhZ2VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMYW5ndWFnZUxpbnRlclBsdWdpbiwgbnVsbCk7XG4gICAgICAgICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb2xvckxpbnRlciwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJ0YWItbmF2aWdhdGlvbi10YWIgYmFjay10YWJcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IEljb25DaGV2cm9uTGVmdCwgYWx0OiBcImJhY2sgYnV0dG9uXCIgfSkpLFxuICAgICAgICAgICAgcmVuZGVyTmF2aWdhdGlvblRhYnMoKSksXG4gICAgICAgIHJlbmRlckRlc2lnbkxpbnRlcigpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRGVzaWduTGludGVyO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1mdW5jdGlvbnNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgTGFuZ3VhZ2VMaW50ZXIsIHsgbGludE15VGV4dCB9IGZyb20gXCJuZXctcmVsaWMtbGFuZ3VhZ2UtbGludGVyXCI7XG5pbXBvcnQgeyBQbHVnaW5Db250ZXh0IH0gZnJvbSBcIi4uL1BsdWdpbkNvbnRleHRcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IExhbmd1YWdlTGludGVyUGx1Z2luID0gKCkgPT4ge1xuICAgIGNvbnN0IFt0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zLCBzZXRUZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc2FtcGxlVGV4dCwgc2V0U2FtcGxlVGV4dF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBbbWF4VGV4dEluZGV4LCBzZXRNYXhUZXh0SW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3NlbGVjdGlvbkhhc0NoYW5nZWQsIHNldFNlbGVjdGlvbkhhc0NoYW5nZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBzZWxlY3RlZFRleHRMYXllcnMsIHNhbXBsZVRleHRJbmRleCwgc2V0U2FtcGxlVGV4dEluZGV4LCBsb2NhbEN1c3RvbURpY3Rpb25hcnksIGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLCBjdXJyZW50U2VsZWN0aW9uLCBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UsIH0gPSBzdGF0ZTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicmVxdWVzdC1sb2NhbC1jdXN0b20tZGljdGlvbmFyeVwiIH0gfSwgXCIqXCIpO1xuICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1sYW5ndWFnZS1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9LCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zWzBdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0TWF4VGV4dEluZGV4KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHQoXCJcIik7XG4gICAgICAgICAgICBzZXRNYXhUZXh0SW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICB9LCBbdGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzYW1wbGVUZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzYW1wbGUtdGV4dC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZU5vZGVJZDogdGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc1tzYW1wbGVUZXh0SW5kZXhdLmlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIH1cbiAgICB9LCBbc2FtcGxlVGV4dF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidXNlRWZmZWN0IGZpcmVkXCIpO1xuICAgICAgICBpZiAobG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQgJiYgc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dChcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJyZXF1ZXN0LWxvY2FsLWN1c3RvbS1kaWN0aW9uYXJ5XCIgfSB9LCBcIipcIik7XG4gICAgICAgIH1cbiAgICB9LCBbc2VsZWN0ZWRUZXh0TGF5ZXJzLCBsb2NhbEN1c3RvbURpY3Rpb25hcnldKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFNlbGVjdGlvbiwgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlKSAmJlxuICAgICAgICAgICAgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICB9XG4gICAgfSwgW2N1cnJlbnRTZWxlY3Rpb24sIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZV0pO1xuICAgIGNvbnN0IGxpbnRTZWxlY3RlZExheWVycyA9ICgpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0aW9uSGFzQ2hhbmdlZChmYWxzZSk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJydW4tbGFuZ3VhZ2UtbGludGVyXCIgfSB9LCBcIipcIik7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTb3VyY2VUZXh0ID0gKHVwZGF0ZWRUZXh0KSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGUtc291cmNlLXRleHRcIixcbiAgICAgICAgICAgICAgICBsYXllcklkOiB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleF0uaWQsXG4gICAgICAgICAgICAgICAgdXBkYXRlZFRleHQ6IHVwZGF0ZWRUZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICBzZXRTYW1wbGVUZXh0KHVwZGF0ZWRUZXh0KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVRleHRMYXllck5hdmlnYXRpb24gPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicHJldmlvdXNcIikge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleCAtIDFdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4KHNhbXBsZVRleHRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHQodGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc1tzYW1wbGVUZXh0SW5kZXggKyAxXS5jaGFyYWN0ZXJzKTtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHRJbmRleChzYW1wbGVUZXh0SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXN5bmNGaWx0ZXIgPSAoYXJyLCBjYWxsYmFjaykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZhaWwgPSBTeW1ib2woKTtcbiAgICAgICAgcmV0dXJuICh5aWVsZCBQcm9taXNlLmFsbChhcnIubWFwKChpdGVtKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuICgoeWllbGQgY2FsbGJhY2soaXRlbSkpID8gaXRlbSA6IGZhaWwpOyB9KSkpKS5maWx0ZXIoKGkpID0+IGkgIT09IGZhaWwpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMgPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzV2l0aFN1Z2dlc3Rpb25zID0geWllbGQgYXN5bmNGaWx0ZXIoc2VsZWN0ZWRUZXh0TGF5ZXJzLCAoaXRlbSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBsZXQgcmVwb3J0ID0gXCJcIjtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UucmVzb2x2ZShsaW50TXlUZXh0KGl0ZW0uY2hhcmFjdGVycywgbG9jYWxDdXN0b21EaWN0aW9uYXJ5KSkudGhlbigocmVzdWx0KSA9PiAocmVwb3J0ID0gcmVzdWx0KSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0Lm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXBvcnRXaXRoRW51bWVyYWJsZVByb3BzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXBvcnQubWVzc2FnZXMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5pbWFsUmVwb3J0ID0gcmVwb3J0V2l0aEVudW1lcmFibGVQcm9wcy5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogbWVzc2FnZS5hY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBtZXNzYWdlLmV4cGVjdGVkLnNsaWNlKDAsIDMpLFxuICAgICAgICAgICAgICAgICAgICBydWxlOiBtZXNzYWdlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0LWxpbnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbFJlcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXBvcnQ6IHJlcG9ydFdpdGhFbnVtZXJhYmxlUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICEhKChfYSA9IHJlcG9ydC5tZXNzYWdlc1swXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1lc3NhZ2UpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHNldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMobGF5ZXJzV2l0aFN1Z2dlc3Rpb25zKTtcbiAgICB9KTtcbiAgICBjb25zdCBhZGRUb0RpY3Rpb25hcnkgPSAod29yZFRvQWRkLCBzdWdnZXN0aW9uSWQpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZC10by1kaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgd29yZFRvQWRkOiB3b3JkVG9BZGQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgfTtcbiAgICBjb25zdCBwcm92aWRlU2FtcGxlVGV4dCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbGF5ZXJJc1NlbGVjdGVkID0gc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zQXZhaWxhYmxlID0gdGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIWxheWVySXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGF5ZXJJc1NlbGVjdGVkICYmICFzdWdnZXN0aW9uc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiSGVsbG8sIFdvcmxkXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlVGV4dDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzID0gY2xhc3NOYW1lcyhcImxhbmd1YWdlLWxpbnRlci1jb250YWluZXJcIiwge1xuICAgICAgICBcInNlbGVjdGlvbi1oYXMtY2hhbmdlZFwiOiBzZWxlY3Rpb25IYXNDaGFuZ2VkLFxuICAgIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibmF2XCIsIHsgY2xhc3NOYW1lOiBcInRleHQtbGF5ZXItbmF2XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyBsZWZ0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUZXh0TGF5ZXJOYXZpZ2F0aW9uKFwicHJldmlvdXNcIiksIGRpc2FibGVkOiBzYW1wbGVUZXh0SW5kZXggLSAxIDwgMCB9KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyByaWdodC1uYXYtYXJyb3dcIiwgb25DbGljazogKCkgPT4gaGFuZGxlVGV4dExheWVyTmF2aWdhdGlvbihcIm5leHRcIiksIGRpc2FibGVkOiBzYW1wbGVUZXh0SW5kZXggKyAxID49IG1heFRleHRJbmRleCB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExhbmd1YWdlTGludGVyLCB7IHNhbXBsZVRleHQ6IHByb3ZpZGVTYW1wbGVUZXh0KCksIHNldFNhbXBsZVRleHQ6IHVwZGF0ZVNvdXJjZVRleHQsIHVwZGF0ZVRpbWVyOiAxMDAsIGN1c3RvbURpY3Rpb25hcnk6IGxvY2FsQ3VzdG9tRGljdGlvbmFyeSwgYWRkVG9EaWN0aW9uYXJ5OiBhZGRUb0RpY3Rpb25hcnksIG9wZW5MaW5rc0luTmV3VGFiOiB0cnVlIH0pLFxuICAgICAgICAgICAgc2VsZWN0aW9uSGFzQ2hhbmdlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLWZvb3RlclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gbGludFNlbGVjdGVkTGF5ZXJzKCkgfSwgXCJDaGVjayBjdXJyZW50IHNlbGVjdGlvblwiKSkpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IExhbmd1YWdlTGludGVyUGx1Z2luO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBIb21lID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzZXRBY3RpdmVQbHVnaW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IFBsdWdpblRpbGUgPSAocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgeyBoZWFkaW5nLCBkZXNjcmlwdGlvbiwgb25DbGljaywgcGx1Z2luTmFtZSB9ID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHRpbGVDbGFzc2VzID0ge1xuICAgICAgICAgICAgdGFibGVDcmVhdG9yOiBcInRhYmxlLWNyZWF0b3JcIixcbiAgICAgICAgICAgIHRoZW1lU3dpdGNoZXI6IFwidGhlbWUtc3dpdGNoZXJcIixcbiAgICAgICAgICAgIGRlc2lnbkxpbnRlcjogXCJkZXNpZ24tbGludGVyXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogYHBsdWdpbi10aWxlLWNvbnRhaW5lciAke3RpbGVDbGFzc2VzW3BsdWdpbk5hbWVdfWAsIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2soKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1pY29uXCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWNvcHlcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1oZWFkaW5nXCIgfSwgaGVhZGluZyksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBjbGFzc05hbWU6IFwicGx1Z2luLXRpbGUtZGVzY3JpcHRpb25cIiB9LCBkZXNjcmlwdGlvbikpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaG9tZS1jb250YWluZXJcIiB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpblRpbGUsIHsgcGx1Z2luTmFtZTogXCJ0YWJsZUNyZWF0b3JcIiwgaGVhZGluZzogXCJUYWJsZSBjcmVhdG9yXCIsIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBPbmUgQ29yZSB0YWJsZXMgd2l0aCB5b3VyIGNlbGwgYW5kIGNvbHVtbiBzZXR0aW5ncy5cIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwidGFibGUtY3JlYXRvclwiKSB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQbHVnaW5UaWxlLCB7IHBsdWdpbk5hbWU6IFwidGhlbWVTd2l0Y2hlclwiLCBoZWFkaW5nOiBcIlRoZW1lIHN3aXRjaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkEgZGFyayBtb2RlIG9yIGxpZ2h0IG1vZGUgc2V0dGluZyBmb3IgeW91ciBsYXllcnNcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwidGhlbWUtc3dpdGNoZXJcIikgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luVGlsZSwgeyBwbHVnaW5OYW1lOiBcImRlc2lnbkxpbnRlclwiLCBoZWFkaW5nOiBcIkRlc2lnbiBsaW50ZXJcIiwgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHlvdXIgbGF5ZXJzIGZvciBjb2xvciBzdHlsZXMsIGFuZCBzb29uIHdpbGwgY2hlY2sgZm9yIGxhbmd1YWdlIHRvby5cIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiY29sb3ItbGludGVyXCIpIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJob21lLXN1cHBvcnRcIiB9LFxuICAgICAgICAgICAgXCJSZXBvcnQgYSBidWcsIHNoYXJlIGEgZmVhdHVyZSBpZGVhLCBvciBnZXQgc3VwcG9ydCBhdFwiLFxuICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIFwiI2hlbHAtb25lLWNvcmVcIiksXG4gICAgICAgICAgICBcIi5cIikpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBIb21lO1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGNvbnN0IFBsdWdpbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5jb25zdCBSZXNpemVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW3ByZXNzZWQsIHNldFByZXNzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGUpID0+IHtcbiAgICAgICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgICAgICBzZXRQcmVzc2VkKHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVQb2ludGVyVXAgPSAoZSkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgICAgICBzZXRQcmVzc2VkKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmVzc2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJlc2l6ZVwiLCBzaXplOiB7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZIH0gfSB9LCBcIipcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgaGFuZGxlUG9pbnRlckRvd24pO1xuICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBoYW5kbGVQb2ludGVyVXApO1xuICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBoYW5kbGVQb2ludGVyRG93bik7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBoYW5kbGVQb2ludGVyVXApO1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbcHJlc3NlZF0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiByZXNpemVyUmVmLCBjbGFzc05hbWU6IFwicmVzaXplclwiIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IFJlc2l6ZXI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBDb2x1bW5Db25maWd1cmF0aW9uID0gKHsgY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uLCBhY3RpdmVDb2wsIGNvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb24sIH0pID0+IHtcbiAgICBjb25zdCBbYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiwgc2V0QWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlID0gKGF0dHIpID0+IHtcbiAgICAgICAgbGV0IGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheSA9IFsuLi5jb2x1bW5Db25maWd1cmF0aW9uXTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW2F0dHJdID1cbiAgICAgICAgICAgIGF0dHIgIT09IFwibXVsdGlWYWx1ZVwiID8gZWxlbWVudC52YWx1ZSA6IGVsZW1lbnQuY2hlY2tlZDtcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheVthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVthdHRyXSA9PT0gXCJtZXRyaWNcIikge1xuICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW1wiYWxpZ25tZW50XCJdID1cbiAgICAgICAgICAgICAgICBcInJpZ2h0XCI7XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q29sdW1uQ29uZmlndXJhdGlvbihjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTmF2QnV0dG9uQ2xpY2sgPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicHJldmlvdXNcIiAmJiBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSAwKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gLSAxKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkaXJlY3Rpb24gPT09IFwibmV4dFwiICYmXG4gICAgICAgICAgICBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICE9PSBjb2x1bW5Db25maWd1cmF0aW9uLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4oYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVDb2x1bW5PcHRpb25TZWxlY3Rpb24gPSAoZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRPcHRpb24gPSBlLnRhcmdldC5vcHRpb25zW2UudGFyZ2V0Lm9wdGlvbnMuc2VsZWN0ZWRJbmRleF07XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuKHBhcnNlSW50KHNlbGVjdGVkT3B0aW9uLnZhbHVlKSAtIDEpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJuYXZcIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLW5hdlwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyBsZWZ0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVOYXZCdXR0b25DbGljayhcInByZXZpb3VzXCIpLCBkaXNhYmxlZDogYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiA9PT0gMCB9KSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IG5hbWU6IFwiY29sdW1uLXNlbGVjdGlvblwiLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93blwiLCBvbkNoYW5nZTogKGUpID0+IGhhbmRsZUNvbHVtbk9wdGlvblNlbGVjdGlvbihlKSwgdmFsdWU6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gKyAxIH0sIFsuLi5BcnJheShhY3RpdmVDb2wpLmtleXMoKV0ubWFwKChpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyBrZXk6IGluZGV4LCB2YWx1ZTogaW5kZXggKyAxLCBjbGFzc05hbWU6IFwiY29sdW1uLXNlbGVjdGlvbi1kcm9wZG93bi1vcHRpb25cIiB9LCBgQ29sdW1uICR7aW5kZXggKyAxfWApKTtcbiAgICAgICAgICAgICAgICB9KSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJuYXYtYXJyb3cgcmlnaHQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZU5hdkJ1dHRvbkNsaWNrKFwibmV4dFwiKSwgZGlzYWJsZWQ6IGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gPT09IGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoIC0gMSB9KSkpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyQ29uZmlndXJhdGlvbkJvZHkgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IG11bHRpVmFsdWVEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDZWxsVHlwZSA9IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJjZWxsVHlwZVwiXTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q2VsbFR5cGUgPT09IFwiVGV4dFwiIHx8XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxUeXBlID09PSBcInRleHRcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJtZXRyaWNcIiB8fFxuICAgICAgICAgICAgICAgIGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJlbnRpdHlcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb2x1bW5OYXZpZ2F0aW9uKCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbmZpZ3VyYXRpb24tYm9keS1oZWFkaW5nc1wiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIG51bGwsIFwiQ2VsbCBmb3JtYXR0aW5nXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNlwiLCBudWxsLCBcIkNob29zZSB0aGUgcHJvcGVydGllcyBmb3IgdGhlIGNlbGxzIGluIHRoaXMgY29sdW1uXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1uYW1lXCIgfSwgXCJDb2x1bW4gbmFtZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInRleHRcIiwgbmFtZTogXCJjb2x1bW4tbmFtZVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tbmFtZS1pbnB1dFwiLCBwbGFjZWhvbGRlcjogXCJlLmcuIGRhdGUsIGFjY291bnQsIHRocm91Z2hwdXQsIGV0Yy4gXCIsIGlkOiBcImNvbHVtbi1uYW1lXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwibmFtZVwiKSwgdmFsdWU6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJuYW1lXCJdIH0pKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1jZWxsLXR5cGVcIiB9LCBcIkNlbGwgdHlwZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1pbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHsgbmFtZTogXCJhbGlnbm1lbnQtc2VsZWN0aW9uXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dCBjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXRcIiwgaWQ6IFwiY29sdW1uLWNlbGwtdHlwZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcImNlbGxUeXBlXCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImNlbGxUeXBlXCJdIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwidGV4dFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiVGV4dFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJsaW5rXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJMaW5rXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcIm1ldHJpY1wiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiTWV0cmljXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImVudGl0eVwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tY2VsbC10eXBlLWlucHV0LW9wdGlvblwiIH0sIFwiRW50aXR5XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImZhdm9yaXRlXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJGYXZvcml0ZVwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJ1c2VyXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJVc2VyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJDaGVja2JveFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJhY3Rpb25zXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJBY3Rpb25zXCIpKSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiY29sdW1uLWFsaWdubWVudFwiIH0sIFwiQWxpZ25tZW50XCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBuYW1lOiBcImFsaWdubWVudC1zZWxlY3Rpb25cIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0IGNvbHVtbi1jb25maWd1cmF0aW9uLWFsaWdubWVudC1pbnB1dFwiLCBpZDogXCJjb2x1bW4tYWxpZ25tZW50XCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwiYWxpZ25tZW50XCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImFsaWdubWVudFwiXSwgZGlzYWJsZWQ6IGNvbHVtbkNvbmZpZ3VyYXRpb25bYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJjZWxsVHlwZVwiXSA9PT0gXCJtZXRyaWNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImxlZnRcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWFsaWdubWVudC1pbnB1dC1vcHRpb25cIiB9LCBcIkxlZnRcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwicmlnaHRcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWFsaWdubWVudC1pbnB1dC1vcHRpb25cIiB9LCBcIlJpZ2h0XCIpKSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiLCBodG1sRm9yOiBcImNvbHVtbi1tdWx0aS12YWx1ZVwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJjb2x1bW4tbXVsdGktdmFsdWVcIiB9LCBcIlNob3cgbXVsdGktdmFsdWVcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJjaGVja2JveFwiLCBpZDogXCJjb2x1bW4tbXVsdGktdmFsdWVcIiwgb25DaGFuZ2U6ICgpID0+IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUoXCJtdWx0aVZhbHVlXCIpLCBjaGVja2VkOiAhbXVsdGlWYWx1ZURpc2FibGVkKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcIm11bHRpVmFsdWVcIl1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogZmFsc2UsIGRpc2FibGVkOiBtdWx0aVZhbHVlRGlzYWJsZWQoKSB9KSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNhbGxzVG9BY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuXCIsIG9uQ2xpY2s6IGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uIH0sIFwiQmFja1wiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jcmVhdGUtdGFibGVcIiwgb25DbGljazogY3JlYXRlVGFibGUgfSwgXCJDcmVhdGUgdGFibGVcIikpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb25maWd1cmF0aW9uQm9keSgpLFxuICAgICAgICAgICAgcmVuZGVyQ2FsbHNUb0FjdGlvbigpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IENvbHVtbkNvbmZpZ3VyYXRpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBEaW1lbnNpb25zU2VsZWN0aW9uID0gKHsgaGFuZGxlR3JpZFNxdWFyZUNsaWNrLCBhY3RpdmVDb2wsIGFjdGl2ZVJvdywgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzLCBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFtob3ZlcmVkQ29sLCBzZXRIb3ZlcmVkQ29sXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFtob3ZlcmVkUm93LCBzZXRIb3ZlcmVkUm93XSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IFt0YWJsZUhvdmVyZWQsIHNldFRhYmxlSG92ZXJlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgaGFuZGxlR3JpZFNxdWFyZU1vdXNlRW50ZXIgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEhvdmVyZWRDb2woY29sSW5kZXgpO1xuICAgICAgICBzZXRIb3ZlcmVkUm93KHJvd0luZGV4KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRhYmxlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCB7IGNsYXNzTmFtZTogYGdyaWQtc2VsZWN0b3IgJHt0YWJsZUhvdmVyZWQgPyBcImhvdmVyZWRcIiA6IFwiXCJ9YCwgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRUYWJsZUhvdmVyZWQodHJ1ZSksIG9uTW91c2VMZWF2ZTogKCkgPT4gc2V0VGFibGVIb3ZlcmVkKGZhbHNlKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIFsuLi5BcnJheSg4KS5rZXlzKCldLm1hcCgocm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCB7IGtleTogcm93SW5kZXggfSwgWy4uLkFycmF5KDgpLmtleXMoKV0ubWFwKChjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCB7IGNsYXNzTmFtZTogYGlucHV0X19yYWRpb2AsIGtleTogY29sSW5kZXggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwicmFkaW9cIiwgaWQ6IGB0JHtyb3dJbmRleCArIDF9eCR7Y29sSW5kZXggKyAxfWAsIG5hbWU6IFwic2VsZWN0aW9uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBgdCR7cm93SW5kZXggKyAxfXgke2NvbEluZGV4ICsgMX1gLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVNb3VzZUVudGVyKGNvbEluZGV4LCByb3dJbmRleCksIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVDbGljayhjb2xJbmRleCwgcm93SW5kZXgpLCBjbGFzc05hbWU6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2xJbmRleCA8PSBob3ZlcmVkQ29sICYmIHJvd0luZGV4IDw9IGhvdmVyZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImhvdmVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbEluZGV4IDwgYWN0aXZlQ29sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4IDwgYWN0aXZlUm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoYWN0aXZlUm93ID09PSAwICYmIGFjdGl2ZUNvbCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1gIH0pKSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGFibGUtZGltZW5zaW9ucy1jb25maWdcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwibnVtYmVyLW9mLWNvbHNcIiB9LCBcIkNvbHVtbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJudW1iZXJcIiwgbWluOiBcIjBcIiwgbWF4OiBcIjI0XCIsIG5hbWU6IFwibnVtYmVyLW9mLWNvbHNcIiwgaWQ6IFwibnVtYmVyLW9mLWNvbHNcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1jb2xzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJjb2xcIiksIHZhbHVlOiBhY3RpdmVDb2wgPT09IDAgJiYgYWN0aXZlUm93ID09PSAwID8gXCJcIiA6IGFjdGl2ZUNvbCwgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkQ29sICsgMSkudG9TdHJpbmcoKSA6IFwiKDI0IG1heClcIiB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJudW1iZXItb2Ytcm93c1wiIH0sIFwiUm93c1wiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcIm51bWJlclwiLCBtaW46IFwiMFwiLCBtYXg6IFwiMTAwXCIsIG5hbWU6IFwibnVtYmVyLW9mLXJvd3NcIiwgaWQ6IFwibnVtYmVyLW9mLXJvd3NcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1yb3dzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJyb3dcIiksIHZhbHVlOiBhY3RpdmVSb3cgPT09IDAgJiYgYWN0aXZlQ29sID09PSAwID8gXCJcIiA6IGFjdGl2ZVJvdywgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkUm93ICsgMSkudG9TdHJpbmcoKSA6IFwiKDEwMCBtYXgpXCIgfSkpKSxcbiAgICAgICAgcmVuZGVyVGFibGUoKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyIGRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lciBsZWZ0LXRvLXJpZ2h0XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcImNoZWNrYm94XCIsIG5hbWU6IFwibXVsdGktdmFsdWVcIiwgaWQ6IFwibXVsdGktdmFsdWVcIiwgXCJhcmlhLWFyaWEtZGVzY3JpYmVkYnlcIjogXCIjbXVsdGktdmFsdWUtdG9vbHRpcFwiLCBjbGFzc05hbWU6IFwibXVsdGktdmFsdWUtY2hlY2tib3hcIiB9KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcIm11bHRpLXZhbHVlXCIgfSwgXCJNdWx0aS12YWx1ZSBjZWxsc1wiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRvb2x0aXAtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwidG9vbHRpcC10cmlnZ2VyXCIgfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInRvb2x0aXBcIiwgaWQ6IFwibXVsdGktdmFsdWUtdG9vbHRpcFwiLCByb2xlOiBcInRvb2x0aXBcIiB9LCBcIk9wdGlvbmFsIHNlY29uZGFyeSBkYXRhIGRpc3BsYXllZCBvbiBhIHNlY29uZCBsaW5lIGluIGNlbGxzXCIpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgZGlzYWJsZWQ6IGFjdGl2ZUNvbCA8IDEsIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnkgYnRuLWNyZWF0ZS10YWJsZVwiLCBvbkNsaWNrOiBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiB9LCBcIkNvbnRpbnVlXCIpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERpbWVuc2lvbnNTZWxlY3Rpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBDb2x1bW5Db25maWd1cmF0aW9uIGZyb20gXCIuL0NvbHVtbkNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBEaW1lbnNpb25zU2VsZWN0aW9uIGZyb20gXCIuL0RpbWVuc2lvbnNTZWxlY3Rpb25cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IFRhYmxlQ3JlYXRvciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luIH0gPSBwcm9wcztcbiAgICBjb25zdCBbYWN0aXZlVGFiXSA9IHVzZVN0YXRlKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICBjb25zdCBbYWN0aXZlU2NyZWVuLCBzZXRBY3RpdmVTY3JlZW5dID0gdXNlU3RhdGUoXCJEaW1lbnNpb25zU2VsZWN0aW9uXCIpO1xuICAgIGNvbnN0IFthY3RpdmVDb2wsIHNldEFjdGl2ZUNvbF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbYWN0aXZlUm93LCBzZXRBY3RpdmVSb3ddID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2NvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb25dID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGxldCBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBbXTtcbiAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBbLi4uQXJyYXkoYWN0aXZlQ29sKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlwiLFxuICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICBjZWxsVHlwZTogXCJUZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgIG11bHRpVmFsdWU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sdW1uQ29uZmlndXJhdGlvbi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkgPSBjb2x1bW5Db25maWd1cmF0aW9uO1xuICAgICAgICAgICAgaWYgKGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5sZW5ndGggPiBhY3RpdmVDb2wpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zVG9SZW1vdmUgPSBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkubGVuZ3RoIC0gYWN0aXZlQ29sO1xuICAgICAgICAgICAgICAgIFsuLi5BcnJheShjb2x1bW5zVG9SZW1vdmUpLmtleXMoKV0ubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnBvcCgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sdW1uc1RvQWRkID0gYWN0aXZlQ29sIC0gY29sdW1uQ29uZmlndXJhdGlvbkFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICBbLi4uQXJyYXkoY29sdW1uc1RvQWRkKS5rZXlzKCldLm1hcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQ6IFwiTGVmdFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2VsbFR5cGU6IFwiVGV4dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldENvbHVtbkNvbmZpZ3VyYXRpb24oY29sdW1uQ29uZmlndXJhdGlvbkFycmF5KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdChoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uLCBbYWN0aXZlQ29sXSk7XG4gICAgY29uc3QgaGFuZGVHcmlkU2VsZWN0aW9uSW5wdXRzID0gKHR5cGUpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgICAgbGV0IHsgdmFsdWUsIG1pbiwgbWF4IH0gPSBlbGVtZW50O1xuICAgICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSBNYXRoLm1heChOdW1iZXIobWluKSwgTWF0aC5taW4oTnVtYmVyKG1heCksIE51bWJlcih2YWx1ZSkpKTtcbiAgICAgICAgaWYgKHR5cGUgPT09IFwiY29sXCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbChjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGUgPT09IFwicm93XCIpIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZVJvdyhjYWxjdWxhdGVkVmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVHcmlkU3F1YXJlQ2xpY2sgPSAoY29sSW5kZXgsIHJvd0luZGV4KSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZUNvbChjb2xJbmRleCArIDEpO1xuICAgICAgICBzZXRBY3RpdmVSb3cocm93SW5kZXggKyAxKTtcbiAgICB9O1xuICAgIGNvbnN0IGNyZWF0ZVRhYmxlID0gKCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgIHR5cGU6IFwiY3JlYXRlLXRhYmxlXCIsXG4gICAgICAgICAgICAgICAgY29sczogYWN0aXZlQ29sLFxuICAgICAgICAgICAgICAgIHJvd3M6IGFjdGl2ZVJvdyxcbiAgICAgICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uOiBjb2x1bW5Db25maWd1cmF0aW9uLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwiY3JlYXRpb24tZmVlZGJhY2tcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uID0gKCkgPT4ge1xuICAgICAgICBzZXRBY3RpdmVTY3JlZW4oXCJDb2x1bW5Db25maWd1cmF0aW9uXCIpO1xuICAgIH07XG4gICAgY29uc3QgZ29Ub0RpbWVuc2lvbnNTZWxlY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVNjcmVlbihcIkRpbWVuc2lvbnNTZWxlY3Rpb25cIik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJUYWJsZUNyZWF0b3IgPSAoKSA9PiB7XG4gICAgICAgIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiRGltZW5zaW9uc1NlbGVjdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGltZW5zaW9uc1NlbGVjdGlvbiwgeyBoYW5kbGVHcmlkU3F1YXJlQ2xpY2s6IGhhbmRsZUdyaWRTcXVhcmVDbGljaywgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGFjdGl2ZVJvdzogYWN0aXZlUm93LCBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHM6IGhhbmRlR3JpZFNlbGVjdGlvbklucHV0cywgZ29Ub0NvbHVtbkNvbmZpZ3VyYXRpb246IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiQ29sdW1uQ29uZmlndXJhdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sdW1uQ29uZmlndXJhdGlvbiwgeyBjcmVhdGVUYWJsZTogY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uOiBnb1RvRGltZW5zaW9uc1NlbGVjdGlvbiwgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGNvbHVtbkNvbmZpZ3VyYXRpb246IGNvbHVtbkNvbmZpZ3VyYXRpb24sIHNldENvbHVtbkNvbmZpZ3VyYXRpb246IHNldENvbHVtbkNvbmZpZ3VyYXRpb24gfSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRhYmxlLWNyZWF0b3JcIl07XG4gICAgICAgIHJldHVybiB0YWJzLm1hcCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXMgPSBbXCJ0YWItbmF2aWdhdGlvbi10YWJcIl07XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICBsZXQgdGFiTGFiZWwgPSB0YWIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0YWIuc3BsaXQoXCItXCIpLmpvaW4oXCIgXCIpLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVUYWIgPT09IHRhYikge1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXMucHVzaChcImFjdGl2ZVwiKTtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBrZXk6IGluZGV4IH0sIHRhYkxhYmVsKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgcmVuZGVyVGFibGVDcmVhdG9yKCkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBUYWJsZUNyZWF0b3I7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuL1BsdWdpbkNvbnRleHRcIjtcbmltcG9ydCBcIi4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmltcG9ydCBMaWdodE1vZGVUaHVtYm5haWwgZnJvbSBcIi4uL2Fzc2V0cy9saWdodC1tb2RlLXRodW1ibmFpbC5zdmdcIjtcbmltcG9ydCBEYXJrTW9kZVRodW1ibmFpbCBmcm9tIFwiLi4vYXNzZXRzL2RhcmstbW9kZS10aHVtYm5haWwuc3ZnXCI7XG5jb25zdCBUaGVtZVN3aXRjaGVyID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzdGF0ZSB9ID0gdXNlQ29udGV4dChQbHVnaW5Db250ZXh0KTtcbiAgICBjb25zdCB7IGN1cnJlbnRTZWxlY3Rpb24sIGxvYWRpbmdMaWdodFN3aXRjaCwgbG9hZGluZ0RhcmtTd2l0Y2ggfSA9IHN0YXRlO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdMaWdodFN3aXRjaCwgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2hdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtsb2NhbExvYWRpbmdEYXJrU3dpdGNoLCBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB7IHNldEFjdGl2ZVBsdWdpbiB9ID0gcHJvcHM7XG4gICAgY29uc3QgbGlnaHRNb2RlUmFkaW9PcHRpb24gPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgZGFya01vZGVSYWRpb09wdGlvbiA9IHVzZVJlZihudWxsKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoKGN1cnJlbnRTZWxlY3Rpb24gPT09IG51bGwgfHwgY3VycmVudFNlbGVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudFNlbGVjdGlvbi5sZW5ndGgpID4gW10pIHtcbiAgICAgICAgICAgIGxpZ2h0TW9kZVJhZGlvT3B0aW9uLmN1cnJlbnQuY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgZGFya01vZGVSYWRpb09wdGlvbi5jdXJyZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH0sIFtjdXJyZW50U2VsZWN0aW9uXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgbG9hZGluZ0xpZ2h0U3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdMaWdodFN3aXRjaChmYWxzZSk7XG4gICAgfSwgW2xvYWRpbmdMaWdodFN3aXRjaF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmdEYXJrU3dpdGNoID09PSBmYWxzZSAmJiBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKGZhbHNlKTtcbiAgICB9LCBbbG9hZGluZ0RhcmtTd2l0Y2hdKTtcbiAgICBjb25zdCBoYW5kbGVUYWJDbGljayA9IChuYW1lT2ZUYWIpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKG5hbWVPZlRhYik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcInRoZW1lLXN3aXRjaGVyXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCIsIFwiYWN0aXZlXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IHRhYkNsYXNzZXNPdXRwdXQsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVRhYkNsaWNrKHRhYiksIGtleTogaW5kZXggfSwgXCJUaGVtZSBzd2l0Y2hlclwiKSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3Qgc2V0RGFya1RoZW1lID0gKCkgPT4ge1xuICAgICAgICBzZXRMb2NhbExvYWRpbmdEYXJrU3dpdGNoKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwidGhlbWUtc3dpdGNoZXItdG8tZGFya1wiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgY29uc3Qgc2V0TGlnaHRUaGVtZSA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2godHJ1ZSk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJ0aGVtZS1zd2l0Y2hlci10by1saWdodFwiIH0gfSwgXCIqXCIpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwidGFiLW5hdmlnYXRpb25cIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uLXRhYiBiYWNrLXRhYlwiLCBvbkNsaWNrOiAoKSA9PiBzZXRBY3RpdmVQbHVnaW4oXCJob21lXCIpIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogSWNvbkNoZXZyb25MZWZ0LCBhbHQ6IFwiYmFjayBidXR0b25cIiB9KSksXG4gICAgICAgICAgICByZW5kZXJOYXZpZ2F0aW9uVGFicygpKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zd2l0Y2hlci1oZWFkaW5nXCIgfSwgXCJDaG9vc2UgYSB0aGVtZVwiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWRlc2NyaXB0aW9uXCIgfSwgXCJTZWxlY3Qgc29tZSBsYXllcnMsIHRoZW4gY2hvc2UgYSB0aGVtZSBiZWxvdy5cIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1vcHRpb25cIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcInJhZGlvXCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXRcIiwgaWQ6IFwibGlnaHQtbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGxpZ2h0TW9kZVJhZGlvT3B0aW9uIH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImxpZ2h0LW1vZGUtY2hlY2tib3hcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1pbnB1dC1sYWJlbFwiLCBvbkNsaWNrOiAoKSA9PiBzZXRMaWdodFRoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IExpZ2h0TW9kZVRodW1ibmFpbCwgYWx0OiBcIlRodW1ibmFpbCBvZiBsaWdodCBzY3JlZW4gZXhhbXBsZVwiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHRcIiB9LCBcIkxpZ2h0IG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdMaWdodFN3aXRjaCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWxvYWRlclwiIH0pKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tb3B0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJyYWRpb1wiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWlucHV0XCIsIGlkOiBcImRhcmstbW9kZS1jaGVja2JveFwiLCBuYW1lOiBcInRoZW1lLWNob2ljZVwiLCByZWY6IGRhcmtNb2RlUmFkaW9PcHRpb24gfSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiZGFyay1tb2RlLWNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWxcIiwgb25DbGljazogKCkgPT4gc2V0RGFya1RoZW1lKCkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IERhcmtNb2RlVGh1bWJuYWlsLCBhbHQ6IFwiVGh1bWJuYWlsIG9mIGRhcmsgc2NyZWVuIGV4YW1wbGVcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2VcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1sYWJlbC10ZXh0XCIgfSwgXCJEYXJrIG1vZGVcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbExvYWRpbmdEYXJrU3dpdGNoICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItbG9hZGVyXCIgfSkpKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGhlbWVTd2l0Y2hlcjtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgQXBwIGZyb20gJy4vY29tcG9uZW50cy9BcHAnO1xuUmVhY3RET00ucmVuZGVyKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQXBwLCBudWxsKSwgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3JlYWN0LXBhZ2UnKSk7XG4iLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICAgICAgICBpbXBvcnQgY29udGVudCBmcm9tIFwiISEuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3VpLmNzc1wiO1xuXG52YXIgb3B0aW9ucyA9IHt9O1xuXG5vcHRpb25zLmluc2VydCA9IFwiaGVhZFwiO1xub3B0aW9ucy5zaW5nbGV0b24gPSBmYWxzZTtcblxudmFyIHVwZGF0ZSA9IGFwaShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCBkZWZhdWx0IGNvbnRlbnQubG9jYWxzIHx8IHt9OyIsIi8qIVxuICogQ2hlY2sgaWYgdHdvIG9iamVjdHMgb3IgYXJyYXlzIGFyZSBlcXVhbFxuICogKGMpIDIwMjEgQ2hyaXMgRmVyZGluYW5kaSwgTUlUIExpY2Vuc2UsIGh0dHBzOi8vZ29tYWtldGhpbmdzLmNvbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMSBUaGUgZmlyc3QgaXRlbVxuICogQHBhcmFtICB7Kn0gICAgICAgb2JqMiBUaGUgc2Vjb25kIGl0ZW1cbiAqIEByZXR1cm4ge0Jvb2xlYW59ICAgICAgIFJldHVybnMgdHJ1ZSBpZiB0aGV5J3JlIGVxdWFsIGluIHZhbHVlXG4gKi9cbmNvbnN0IGlzRXF1YWwgPSAob2JqMSwgb2JqMikgPT4ge1xuICAvKipcbiAgICogTW9yZSBhY2N1cmF0ZWx5IGNoZWNrIHRoZSB0eXBlIG9mIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAgICogQHBhcmFtICB7T2JqZWN0fSBvYmogVGhlIG9iamVjdFxuICAgKiBAcmV0dXJuIHtTdHJpbmd9ICAgICBUaGUgb2JqZWN0IHR5cGVcbiAgICovXG4gIGZ1bmN0aW9uIGdldFR5cGUob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlQXJyYXlzRXF1YWwoKSB7XG4gICAgLy8gQ2hlY2sgbGVuZ3RoXG4gICAgaWYgKG9iajEubGVuZ3RoICE9PSBvYmoyLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBhcnJheVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqMS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCFpc0VxdWFsKG9iajFbaV0sIG9iajJbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlT2JqZWN0c0VxdWFsKCkge1xuICAgIGlmIChPYmplY3Qua2V5cyhvYmoxKS5sZW5ndGggIT09IE9iamVjdC5rZXlzKG9iajIpLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gQ2hlY2sgZWFjaCBpdGVtIGluIHRoZSBvYmplY3RcbiAgICBmb3IgKGxldCBrZXkgaW4gb2JqMSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmoxLCBrZXkpKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChvYmoxW2tleV0sIG9iajJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBlcnJvcnMsIHJldHVybiB0cnVlXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVGdW5jdGlvbnNFcXVhbCgpIHtcbiAgICByZXR1cm4gb2JqMS50b1N0cmluZygpID09PSBvYmoyLnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBhcmVQcmltYXRpdmVzRXF1YWwoKSB7XG4gICAgcmV0dXJuIG9iajEgPT09IG9iajI7XG4gIH1cblxuICAvLyBHZXQgdGhlIG9iamVjdCB0eXBlXG4gIGxldCB0eXBlID0gZ2V0VHlwZShvYmoxKTtcblxuICAvLyBJZiB0aGUgdHdvIGl0ZW1zIGFyZSBub3QgdGhlIHNhbWUgdHlwZSwgcmV0dXJuIGZhbHNlXG4gIGlmICh0eXBlICE9PSBnZXRUeXBlKG9iajIpKSByZXR1cm4gZmFsc2U7XG5cbiAgLy8gQ29tcGFyZSBiYXNlZCBvbiB0eXBlXG4gIGlmICh0eXBlID09PSBcImFycmF5XCIpIHJldHVybiBhcmVBcnJheXNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIikgcmV0dXJuIGFyZU9iamVjdHNFcXVhbCgpO1xuICBpZiAodHlwZSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gYXJlRnVuY3Rpb25zRXF1YWwoKTtcbiAgcmV0dXJuIGFyZVByaW1hdGl2ZXNFcXVhbCgpO1xufTtcblxuZXhwb3J0IHsgaXNFcXVhbCB9O1xuIl0sInNvdXJjZVJvb3QiOiIifQ== >>>>>>> ad881ce (feat(TableCreator): Adds updated UI for new multi-value behavior) ======= //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2FuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYmV0d2Vlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvYm9vbGVhblNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY2hpbGRyZW5PZlR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2NoaWxkcmVuU2VxdWVuY2VPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvY29tcG9uZW50V2l0aE5hbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2Rpc2FsbG93ZWRJZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvZWxlbWVudFR5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2VtcHR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9leHBsaWNpdE51bGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvZ2V0Q29tcG9uZW50TmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvaXNQbGFpbk9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvaGVscGVycy9yZW5kZXJhYmxlQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2hlbHBlcnMvdHlwZU9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9oZWxwZXJzL3dyYXBWYWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9rZXlzT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlUHJvcHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9uQ2hpbGRyZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL25vbk5lZ2F0aXZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvbm9uTmVnYXRpdmVOdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL251bWVyaWNTdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL29iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ByZWRpY2F0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3JlZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVxdWlyZWRCeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvcmVzdHJpY3RlZFByb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NlcXVlbmNlT2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3NoYXBlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC9zdHJpbmdFbmRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvc3RyaW5nU3RhcnRzV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWlyYm5iLXByb3AtdHlwZXMvYnVpbGQvdW5pcXVlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3VuaXF1ZUFycmF5T2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2J1aWxkL3ZhbHVlc09mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9haXJibmItcHJvcC10eXBlcy9idWlsZC93aXRoU2hhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FpcmJuYi1wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYXJyYXkucHJvdG90eXBlLmZpbmQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2FycmF5LnByb3RvdHlwZS5maW5kL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9hcnJheS5wcm90b3R5cGUuZmluZC9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9iYWJlbC1wb2x5ZmlsbC9saWIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9jYWxsQm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2hyb21hLWpzL2Nocm9tYS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY2xhc3NuYW1lcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29uc29saWRhdGVkLWV2ZW50cy9saWIvaW5kZXguZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ZuL3JlZ2V4cC9lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hLW51bWJlci12YWx1ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYWR2YW5jZS1zdHJpbmctaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4taW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWNvcHktd2l0aGluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fYXJyYXktZnJvbS1pdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1tZXRob2RzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2JpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY2xhc3NvZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi1zdHJvbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY29sbGVjdGlvbi10by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2NvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fY3JlYXRlLXByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2N0eC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kYXRlLXRvLWlzby1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGF0ZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZW51bS1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2V4cG9ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mYWlscy1pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZml4LXJlLXdrcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGFncy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19mbGF0dGVuLWludG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fZm9yLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2Z1bmN0aW9uLXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19nbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2ludm9rZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2lzLWFycmF5LWl0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXMtcmVnZXhwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2l0ZXItY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRlZmluZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLWRldGVjdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19pdGVyLXN0ZXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9faXRlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX2xpYnJhcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1leHBtMS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWZyb3VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19tYXRoLWxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21hdGgtc2NhbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWF0aC1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX21ldGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fbWljcm90YXNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LWFzc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtY3JlYXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1kcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZHBzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1mb3JjZWQtcGFtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1nb3BuLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ29wcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtZ3BvLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLWludGVybmFsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX29iamVjdC1waWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb2JqZWN0LXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcGFyc2UtaW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3BlcmZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcHJvbWlzZS1yZXNvbHZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fcmVkZWZpbmUtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZGVmaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLWFic3RyYWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlZ2V4cC1leGVjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3JlcGxhY2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3NhbWUtdmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LWNvbGxlY3Rpb24tZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtY29sbGVjdGlvbi1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zZXQtcHJvdG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zaGFyZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3BlY2llcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpY3QtbWV0aG9kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctY29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctaHRtbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL19zdHJpbmctcGFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3N0cmluZy1yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fc3RyaW5nLXdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3Rhc2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tYWJzb2x1dGUtaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1pb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3RvLWxlbmd0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190by1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3R5cGVkLWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL190eXBlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL191aWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL192YWxpZGF0ZS1jb2xsZWN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvX3drcy1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9fd2tzLWV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL193a3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9jb3JlLnJlZ2V4cC5lc2NhcGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuY29weS13aXRoaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZXZlcnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuZmluZC1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5maW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZvci1lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaW5kZXgtb2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXMtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5Lm1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNsaWNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmFycmF5LnNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5hcnJheS5zcGVjaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUubm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5kYXRlLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZGF0ZS50by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24uYmluZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5hY29zaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmFzaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguYXRhbmguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jYnJ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguY2x6MzIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5jb3NoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGguZXhwbTEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5mcm91bmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5oeXBvdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmltdWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5sb2cxMC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLmxvZzFwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgubG9nMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnNpZ24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubWF0aC5zaW5oLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm1hdGgudGFuaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5tYXRoLnRydW5jLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LW5hbWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QuaXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LmtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYub2JqZWN0LnByZXZlbnQtZXh0ZW5zaW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnBhcnNlLWludC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5wcm9taXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuYXBwbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5jb25zdHJ1Y3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5kZWxldGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5lbnVtZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVmbGVjdC5nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuZ2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QuaXMtZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0Lm93bi1rZXlzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3QucHJldmVudC1leHRlbnNpb25zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZmxlY3Quc2V0LXByb3RvdHlwZS1vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWZsZWN0LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmV4ZWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5yZWdleHAudG8tc3RyaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnNldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5iaWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5jb2RlLXBvaW50LWF0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5lbmRzLXdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZpeGVkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mb250Y29sb3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmZvbnRzaXplLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5mcm9tLWNvZGUtcG9pbnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGFsaWNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcubGluay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcucmF3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnNtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcuc3RyaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnN0cmluZy5zdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYuc3RyaW5nLnN1cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zdHJpbmcudHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi5zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50MzItYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQuaW50OC1hcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNi50eXBlZC51aW50MTYtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYudHlwZWQudWludDMyLWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczYud2Vhay1zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdC1tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuYXJyYXkuZmxhdHRlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5hc2FwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAuZnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXAub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWFwLnRvLWpzb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5jbGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmRlZy1wZXItcmFkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguZGVncmVlcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmZzY2FsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLmlhZGRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguaW11bGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcubWF0aC5pc3ViaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnJhZC1wZXItZGVnLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGgucmFkaWFucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnNjYWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3Lm9iamVjdC52YWx1ZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcub2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucHJvbWlzZS50cnkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1tZXRhZGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEta2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc2V0Lm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnNldC50by1qc29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5hdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtZW5kLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy5zeW1ib2wuYXN5bmMtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3ltYm9sLm9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcuc3lzdGVtLmdsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzNy53ZWFrLW1hcC5mcm9tLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstbWFwLm9mLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXM3LndlYWstc2V0LmZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lczcud2Vhay1zZXQub2YuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL3dlYi50aW1lcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3MiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9zdHlsZXMvdWkuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZGVmaW5lLXByb3BlcnRpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb2N1bWVudC5jb250YWlucy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9jdW1lbnQuY29udGFpbnMvcG9seWZpbGwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2RvY3VtZW50LmNvbnRhaW5zL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvSXNDYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC8yMDIxL1RvSW50ZWdlck9ySW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9MZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9PYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzIwMjEvVG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvQ2hlY2tPYmplY3RDb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2VzLWFic3RyYWN0LzUvVG9JbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvTnVtYmVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L1RvUHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy1hYnN0cmFjdC81L2Ficy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvNS9mbG9vci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc0Zpbml0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc05hTi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9tYXhTYWZlSW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9yZWdleFRlc3Rlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXMtYWJzdHJhY3QvaGVscGVycy9zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXMyMDE1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvZXM1LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9lcy10by1wcmltaXRpdmUvaGVscGVycy9pc1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLnByb3RvdHlwZS5uYW1lL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi5wcm90b3R5cGUubmFtZS9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24ucHJvdG90eXBlLm5hbWUvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZnVuY3Rpb25zLWhhdmUtbmFtZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2dldC1pbnRyaW5zaWMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhcy1zeW1ib2xzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYXMvc3JjL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1jYWxsYWJsZS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaXMtZGF0ZS1vYmplY3QvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2lzLXJlZ2V4L2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9pcy1zeW1ib2wvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL25ldy1yZWxpYy1sYW5ndWFnZS1saW50ZXIvbGliL0xhbmd1YWdlTGludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWlzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QtaXMvc2hpbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LWtleXMvaW1wbGVtZW50YXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC1rZXlzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3Qta2V5cy9pc0FyZ3VtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmFzc2lnbi9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvb2JqZWN0LmVudHJpZXMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL29iamVjdC5lbnRyaWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QuZW50cmllcy9zaGltLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2ltcGxlbWVudGF0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3BvbHlmaWxsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9vYmplY3QudmFsdWVzL3NoaW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMtZXhhY3QvYnVpbGQvaGVscGVycy9pc1BsYWluT2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzLWV4YWN0L2J1aWxkL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2NoZWNrUHJvcFR5cGVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2xpYi9SZWFjdFByb3BUeXBlc1NlY3JldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcHJvcC10eXBlcy9saWIvaGFzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1kb20vY2pzL3JlYWN0LWRvbS5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZG9tL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWN0aXZpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9haXJwbGF5LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxlcnQtb2N0YWdvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsZXJ0LXRyaWFuZ2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tY2VudGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYWxpZ24tanVzdGlmeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FsaWduLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hbGlnbi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FuY2hvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2FwZXJ0dXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJjaGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24tY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC1jaXJjbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9hcnJvdy11cC1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Fycm93LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYXQtc2lnbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2F3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmFyLWNoYXJ0LTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXItY2hhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmF0dGVyeS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JlbGwtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYmVsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JsdWV0b290aC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2JvbGQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLW9wZW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvYm9va21hcmsuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ib3guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9icmllZmNhc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYWxlbmRhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NhbWVyYS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYW1lcmEuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jYXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2stc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hlY2suanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbi11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NoZXZyb25zLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2hldnJvbnMtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jaGV2cm9ucy11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nocm9tZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NsaXBib2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQtZHJpenpsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLWxpZ2h0bmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nsb3VkLXJhaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jbG91ZC1zbm93LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb2RlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29kZXBlbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvZGVzYW5kYm94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29mZmVlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29sdW1ucy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2NvbW1hbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb21wYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29weS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1sZWZ0LWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItbGVmdC11cC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nvcm5lci1yaWdodC1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcHUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcmVkaXQtY2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Nyb3AuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9jcm9zc2hhaXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kYXRhYmFzZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2Rpc2MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kaXZpZGUtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZGl2aWRlLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RpdmlkZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RvbGxhci1zaWduLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZG93bmxvYWQtY2xvdWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9kb3dubG9hZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2RyaWJiYmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZHJvcGxldC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQtMy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2VkaXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9leHRlcm5hbC1saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZXllLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2V5ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZhY2Vib29rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmFzdC1mb3J3YXJkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmVhdGhlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpZ21hLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsZS1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtcGx1cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUtdGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9maWxtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmlsdGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZmxhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1taW51cy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2ZvbGRlci1wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZm9sZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJhbWVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZnJvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naWZ0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0LWJyYW5jaC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2dpdC1jb21taXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0aHViLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2l0bGFiLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvZ2xvYmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ncmlkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGFyZC1kcml2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWFkcGhvbmVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaGVhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9oZWxwLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2hleGFnb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9ob21lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvaW1hZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbmJveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2luZm8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pbnN0YWdyYW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9pdGFsaWMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9rZXkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXllcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9sYXlvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saWZlLWJ1b3kuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saW5rLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbGlua2VkaW4uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9saXN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9hZGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbG9jay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1pbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL2xvZy1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYWlsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWFwLXBpbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21heGltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tYXhpbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21laC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lbnUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tZXNzYWdlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbWljLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbmltaXplLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9taW5pbWl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLXNxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21pbnVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW9uaXRvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLWhvcml6b250YWwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tb3JlLXZlcnRpY2FsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvbW91c2UtcG9pbnRlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL21vdmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9tdXNpYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24tMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL25hdmlnYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGFja2FnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhcGVyY2xpcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BhdXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGVuLXRvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wZXJjZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtY2FsbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWZvcndhcmRlZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Bob25lLWluY29taW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtbWlzc2VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb2ZmLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGhvbmUtb3V0Z29pbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9waG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BpZS1jaGFydC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsYXktY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGxheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3BsdXMtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcGx1cy1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wbHVzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG9ja2V0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcG93ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9wcmludGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcmFkaW8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZWZyZXNoLWNjdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3JlZnJlc2gtY3cuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXBlYXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yZXdpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9yb3RhdGUtY2N3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcm90YXRlLWN3LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvcnNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2F2ZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NjaXNzb3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VhcmNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2VuZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NlcnZlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NldHRpbmdzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hhcmUtMi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoYXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2hpZWxkLW9mZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NoaWVsZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWJhZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Nob3BwaW5nLWNhcnQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zaHVmZmxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2lkZWJhci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtYmFjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NraXAtZm9yd2FyZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NsYWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc2xhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zbGlkZXJzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc21hcnRwaG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NtaWxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvc3BlYWtlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3NxdWFyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N0YXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdG9wLWNpcmNsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3N1bnJpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy9zdW5zZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWJsZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90YXJnZXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90ZXJtaW5hbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RoZXJtb21ldGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdGh1bWJzLWRvd24uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90aHVtYnMtdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90b2dnbGUtbGVmdC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RvZ2dsZS1yaWdodC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3Rvb2wuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmFzaC0yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJhc2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVsbG8uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmVuZGluZy1kb3duLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHJlbmRpbmctdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90cmlhbmdsZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3RydWNrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0Y2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy90d2l0dGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdHlwZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VtYnJlbGxhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5kZXJsaW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdW5sb2NrLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLWNsb3VkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXBsb2FkLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlci1jaGVjay5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3VzZXItbWludXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXBsdXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLXguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy91c2VyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92aWRlby5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvaWNlbWFpbC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS0xLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvdm9sdW1lLTIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy92b2x1bWUteC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3ZvbHVtZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3dhdGNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2lmaS1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy93aWZpLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvd2luZC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3gtY2lyY2xlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1vY3RhZ29uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveC1zcXVhcmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy94LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMveW91dHViZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmVhdGhlci9kaXN0L2ljb25zL3phcC1vZmYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96YXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pY29ucy96b29tLWluLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1mZWF0aGVyL2Rpc3QvaWNvbnMvem9vbS1vdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZlYXRoZXIvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvQnV0dG9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9DaGVja2JveC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvRGlzY2xvc3VyZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSWNvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2Rpc3QvSW5wdXQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L0xhYmVsLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9TZWxlY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RleHRhcmVhLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9UaXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9kaXN0L1RpdGxlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1maWdtYS1wbHVnaW4tZHMvZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3M/NTMwYiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtaXMvY2pzL3JlYWN0LWlzLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1pcy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3Qtb3V0c2lkZS1jbGljay1oYW5kbGVyL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlci9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QvY2pzL3JlYWN0LmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc2NoZWR1bGVyL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zY2hlZHVsZXIvdHJhY2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9kYXJrLW1vZGUtdGh1bWJuYWlsLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1kYXJrLWRlc2lnbi1saW50ZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tZGVzaWduLWxpbnRlci5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1oZWxwLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWluZm8uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItYm9vbGVhbi1vcGVyYXRpb24uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItZWxsaXBzZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi1sYXllci1saW5lLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXBvbHlnb24uc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbGF5ZXItcmVjdGFuZ2xlLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLWxheWVyLXRleHQuc3ZnIiwid2VicGFjazovLy8uL3NyYy9hcHAvYXNzZXRzL2ljb24tbW9yZS5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9hc3NldHMvaWNvbi10YWJsZS1jcmVhdG9yLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9pY29uLXRoZW1lLXN3aXRjaGVyLnN2ZyIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2Fzc2V0cy9saWdodC1tb2RlLXRodW1ibmFpbC5zdmciLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0FwcC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9Db2xvckxpbnRlci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL0Rlc2lnbkxpbnRlci9Db2xvclRpbGUudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9EZXNpZ25MaW50ZXIvRGVzaWduTGludGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvRGVzaWduTGludGVyL0xhbmd1YWdlTGludGVyUGx1Z2luLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvSG9tZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1BsdWdpbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1Jlc2l6ZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvY29tcG9uZW50cy9UYWJsZUNyZWF0b3IvQ29sdW1uQ29uZmlndXJhdGlvbi50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RhYmxlQ3JlYXRvci9EaW1lbnNpb25zU2VsZWN0aW9uLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvYXBwL2NvbXBvbmVudHMvVGFibGVDcmVhdG9yL1RhYmxlQ3JlYXRvci50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2FwcC9jb21wb25lbnRzL1RoZW1lU3dpdGNoZXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvaW5kZXgudHN4Iiwid2VicGFjazovLy8uL3NyYy9hcHAvc3R5bGVzL3VpLmNzcz8zNGM3Iiwid2VicGFjazovLy8uL3NyYy9hcHAvdXRpbGl0eS1mdW5jdGlvbnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7OztBQ2xGYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVFQUF1RSxhQUFhO0FBQ3BGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBLDBFQUEwRSxlQUFlO0FBQ3pGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsK0I7Ozs7Ozs7Ozs7OztBQ2xEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHFDQUFxQyxtQkFBTyxDQUFDLDhEQUFnQjs7QUFFN0Qsb0NBQW9DLG1CQUFPLENBQUMsZ0VBQVM7O0FBRXJELHVDQUF1QyxtQkFBTyxDQUFDLHNFQUFZOztBQUUzRCw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRix1QkFBdUIsMkJBQTJCLDJFQUEyRSxrQ0FBa0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLGtDQUFrQyw4SEFBOEgsR0FBRyxFQUFFLHFCQUFxQjs7QUFFeFgsMENBQTBDLGdDQUFnQyxvQ0FBb0Msb0RBQW9ELDhEQUE4RCxnRUFBZ0UsRUFBRSxFQUFFLGdDQUFnQyxFQUFFLGFBQWE7O0FBRW5WLGdDQUFnQyxnQkFBZ0Isc0JBQXNCLE9BQU8sdURBQXVELGFBQWEsdURBQXVELDJDQUEyQyxFQUFFLEVBQUUsRUFBRSw2Q0FBNkMsMkVBQTJFLEVBQUUsT0FBTyxpREFBaUQsa0ZBQWtGLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFcGhCLDJDQUEyQyxrQkFBa0Isa0NBQWtDLHFFQUFxRSxFQUFFLEVBQUUsT0FBTyxrQkFBa0IsRUFBRSxZQUFZOztBQUUvTSxpQ0FBaUMsMkhBQTJIOztBQUU1Siw2QkFBNkIsa0tBQWtLOztBQUUvTCxpREFBaUQsZ0JBQWdCLGdFQUFnRSx3REFBd0QsNkRBQTZELHNEQUFzRCxrSEFBa0g7O0FBRTlaLHNDQUFzQyx1REFBdUQsdUNBQXVDLFNBQVMsT0FBTyxrQkFBa0IsRUFBRSxhQUFhOztBQUVyTCx3Q0FBd0MsZ0ZBQWdGLGVBQWUsZUFBZSxnQkFBZ0Isb0JBQW9CLE1BQU0sMENBQTBDLCtCQUErQixhQUFhLHFCQUFxQixtQ0FBbUMsRUFBRSxFQUFFLGNBQWMsV0FBVyxVQUFVLEVBQUUsVUFBVSxNQUFNLGlEQUFpRCxFQUFFLFVBQVUsa0JBQWtCLEVBQUUsRUFBRSxhQUFhOztBQUV2ZSwrQkFBK0Isb0NBQW9DOztBQUVuRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLHlDQUF5QyxVQUFVLG9CQUFvQjtBQUN2RSxHQUFHLElBQUk7QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUNBQXlDLFVBQVUsb0JBQW9CO0FBQ3ZFLEdBQUcsSUFBSTtBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBLGdGQUFnRjs7QUFFaEY7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUEsZ0ZBQWdGOztBQUVoRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DOzs7Ozs7Ozs7Ozs7QUN6UGE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQSxpRkFBaUYsYUFBYTtBQUM5RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7Ozs7O0FDcEVhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsb0NBQW9DLG1CQUFPLENBQUMsNENBQU87O0FBRW5ELDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLHVCQUF1QiwyQkFBMkIsMkVBQTJFLGtDQUFrQyxtQkFBbUIsR0FBRyxFQUFFLE9BQU8sa0NBQWtDLDhIQUE4SCxHQUFHLEVBQUUscUJBQXFCOztBQUV4WDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHVEOzs7Ozs7Ozs7Ozs7QUNwRGE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpREFBaUQsbUJBQU8sQ0FBQywwR0FBOEI7O0FBRXZGLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLDBDQUEwQyxnQ0FBZ0Msb0NBQW9DLG9EQUFvRCw4REFBOEQsZ0VBQWdFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhOztBQUVuVixnQ0FBZ0MsZ0JBQWdCLHNCQUFzQixPQUFPLHVEQUF1RCxhQUFhLHVEQUF1RCwyQ0FBMkMsRUFBRSxFQUFFLEVBQUUsNkNBQTZDLDJFQUEyRSxFQUFFLE9BQU8saURBQWlELGtGQUFrRixFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRXBoQiwyQ0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL007QUFDQSx3RkFBd0YsYUFBYTtBQUNyRztBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRUFBa0UsWUFBWTtBQUM5RTtBQUNBLEtBQUs7QUFDTDtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0M7Ozs7Ozs7Ozs7OztBQy9FYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDZDQUE2QyxtQkFBTyxDQUFDLDBFQUFzQjs7QUFFM0UsK0NBQStDLG1CQUFPLENBQUMsc0dBQTRCOztBQUVuRixpREFBaUQsbUJBQU8sQ0FBQywwR0FBOEI7O0FBRXZGLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxzRUFBc0UsYUFBYTtBQUNuRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMEM7Ozs7Ozs7Ozs7OztBQzlEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHlDQUF5QyxtQkFBTyxDQUFDLDBFQUFjOztBQUUvRCxpREFBaUQsbUJBQU8sQ0FBQywwR0FBOEI7O0FBRXZGLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLDBDQUEwQyxnQ0FBZ0Msb0NBQW9DLG9EQUFvRCw4REFBOEQsZ0VBQWdFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhOztBQUVuVixnQ0FBZ0MsZ0JBQWdCLHNCQUFzQixPQUFPLHVEQUF1RCxhQUFhLHVEQUF1RCwyQ0FBMkMsRUFBRSxFQUFFLEVBQUUsNkNBQTZDLDJFQUEyRSxFQUFFLE9BQU8saURBQWlELGtGQUFrRixFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRXBoQiwyQ0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL007QUFDQSwyRUFBMkUsYUFBYTtBQUN4RjtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUEsNERBQTRELFlBQVk7QUFDeEU7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQSxvRUFBb0UsWUFBWTtBQUNoRjtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsOEM7Ozs7Ozs7Ozs7OztBQ3hFYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLG9DQUFvQyxtQkFBTyxDQUFDLDRDQUFPOztBQUVuRCxzQ0FBc0MsbUJBQU8sQ0FBQyxrREFBVTs7QUFFeEQsNkNBQTZDLG1CQUFPLENBQUMsMEVBQXNCOztBQUUzRSwrQ0FBK0MsbUJBQU8sQ0FBQyxzR0FBNEI7O0FBRW5GLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Qzs7Ozs7Ozs7Ozs7O0FDaElhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBLDBEQUEwRDtBQUMxRDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEZBQTBGLGFBQWE7QUFDdkc7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esd0M7Ozs7Ozs7Ozs7OztBQ25FYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHNEQUFZOztBQUVyQyxlQUFlLG1CQUFPLENBQUMsa0RBQVU7O0FBRWpDLGtDQUFrQyxtQkFBTyxDQUFDLDREQUFPOztBQUVqRCwrQ0FBK0MsbUJBQU8sQ0FBQyxzR0FBNEI7O0FBRW5GLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLHVCQUF1QiwyQkFBMkIsMkVBQTJFLGtDQUFrQyxtQkFBbUIsR0FBRyxFQUFFLE9BQU8sa0NBQWtDLDhIQUE4SCxHQUFHLEVBQUUscUJBQXFCOztBQUV4WDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDOztBQUV2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDOzs7Ozs7Ozs7Ozs7QUN0RWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsaUNBQWlDLG1CQUFPLENBQUMsMERBQU07O0FBRS9DLDJDQUEyQyxtQkFBTyxDQUFDLDhFQUFnQjs7QUFFbkUsd0NBQXdDLG1CQUFPLENBQUMsd0VBQWE7O0FBRTdELDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDOzs7Ozs7Ozs7Ozs7QUNqQ2E7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRix1QkFBdUIsMkJBQTJCLDJFQUEyRSxrQ0FBa0MsbUJBQW1CLEdBQUcsRUFBRSxPQUFPLGtDQUFrQyw4SEFBOEgsR0FBRyxFQUFFLHFCQUFxQjs7QUFFeFg7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0hBQW9IO0FBQ3BIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVHQUF1RztBQUN2Rzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSx3Qzs7Ozs7Ozs7Ozs7O0FDbENhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsZ0RBQWdELG1CQUFPLENBQUMsZ0ZBQXlCOztBQUVqRixlQUFlLG1CQUFPLENBQUMsa0RBQVU7O0FBRWpDLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Qzs7Ozs7Ozs7Ozs7O0FDbkNhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxxQzs7Ozs7Ozs7Ozs7O0FDaEJhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsNENBQTRDLG1CQUFPLENBQUMsb0hBQThDOztBQUVsRyxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBLHlDOzs7Ozs7Ozs7Ozs7QUNiYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHVCQUF1QiwyQkFBMkIsMkVBQTJFLGtDQUFrQyxtQkFBbUIsR0FBRyxFQUFFLE9BQU8sa0NBQWtDLDhIQUE4SCxHQUFHLEVBQUUscUJBQXFCOztBQUV4WDtBQUNBO0FBQ0E7QUFDQSx1Qzs7Ozs7Ozs7Ozs7O0FDWmE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxvQ0FBb0MsbUJBQU8sQ0FBQyw0Q0FBTzs7QUFFbkQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLDhDOzs7Ozs7Ozs7Ozs7QUNoQmE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxvQ0FBb0MsbUJBQU8sQ0FBQyw0Q0FBTzs7QUFFbkQsc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLHVCQUF1QiwyQkFBMkIsMkVBQTJFLGtDQUFrQyxtQkFBbUIsR0FBRyxFQUFFLE9BQU8sa0NBQWtDLDhIQUE4SCxHQUFHLEVBQUUscUJBQXFCOztBQUV4WDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7Ozs7OztBQ2hDYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHFDQUFxQyxtQkFBTyxDQUFDLDREQUFlOztBQUU1RCxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBLHlDOzs7Ozs7Ozs7Ozs7QUN2QmE7O0FBRWIsNkNBQTZDLG1CQUFPLENBQUMsd0VBQWtCOztBQUV2RSxrQ0FBa0MsbUJBQU8sQ0FBQyw0REFBTzs7QUFFakQsc0NBQXNDLG1CQUFPLENBQUMsb0VBQVc7O0FBRXpELDBDQUEwQyxtQkFBTyxDQUFDLDRFQUFlOztBQUVqRSwwREFBMEQsbUJBQU8sQ0FBQyw0R0FBK0I7O0FBRWpHLHlDQUF5QyxtQkFBTyxDQUFDLDBFQUFjOztBQUUvRCw2Q0FBNkMsbUJBQU8sQ0FBQyxrRkFBa0I7O0FBRXZFLGlEQUFpRCxtQkFBTyxDQUFDLDBGQUFzQjs7QUFFL0UsZ0RBQWdELG1CQUFPLENBQUMsd0ZBQXFCOztBQUU3RSwyQ0FBMkMsbUJBQU8sQ0FBQyw4RUFBZ0I7O0FBRW5FLDBDQUEwQyxtQkFBTyxDQUFDLDRFQUFlOztBQUVqRSxvQ0FBb0MsbUJBQU8sQ0FBQyxnRUFBUzs7QUFFckQsMkNBQTJDLG1CQUFPLENBQUMsOEVBQWdCOztBQUVuRSxzQ0FBc0MsbUJBQU8sQ0FBQyxvRUFBVzs7QUFFekQscUNBQXFDLG1CQUFPLENBQUMsa0VBQVU7O0FBRXZELHFEQUFxRCxtQkFBTyxDQUFDLGtHQUEwQjs7QUFFdkYseURBQXlELG1CQUFPLENBQUMsMEdBQThCOztBQUUvRix3Q0FBd0MsbUJBQU8sQ0FBQyx3RUFBYTs7QUFFN0QsaURBQWlELG1CQUFPLENBQUMsMEZBQXNCOztBQUUvRSxnREFBZ0QsbUJBQU8sQ0FBQyx3RkFBcUI7O0FBRTdFLDRDQUE0QyxtQkFBTyxDQUFDLGdGQUFpQjs7QUFFckUscUNBQXFDLG1CQUFPLENBQUMsa0VBQVU7O0FBRXZELGlDQUFpQyxtQkFBTyxDQUFDLDBEQUFNOztBQUUvQyx3Q0FBd0MsbUJBQU8sQ0FBQyx3RUFBYTs7QUFFN0Qsb0NBQW9DLG1CQUFPLENBQUMsZ0VBQVM7O0FBRXJELGtDQUFrQyxtQkFBTyxDQUFDLDREQUFPOztBQUVqRCx5Q0FBeUMsbUJBQU8sQ0FBQywwRUFBYzs7QUFFL0QsNkNBQTZDLG1CQUFPLENBQUMsa0ZBQWtCOztBQUV2RSx5Q0FBeUMsbUJBQU8sQ0FBQywwRUFBYzs7QUFFL0Qsb0NBQW9DLG1CQUFPLENBQUMsZ0VBQVM7O0FBRXJELDZDQUE2QyxtQkFBTyxDQUFDLGtGQUFrQjs7QUFFdkUsK0NBQStDLG1CQUFPLENBQUMsc0ZBQW9COztBQUUzRSwwQ0FBMEMsbUJBQU8sQ0FBQyw0RUFBZTs7QUFFakUsNENBQTRDLG1CQUFPLENBQUMsZ0ZBQWlCOztBQUVyRSx1Q0FBdUMsbUJBQU8sQ0FBQyxzRUFBWTs7QUFFM0Qsd0NBQXdDLG1CQUFPLENBQUMsd0VBQWE7O0FBRTdELHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQ2xIYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHdDQUF3QyxtQkFBTyxDQUFDLHdGQUFxQjs7QUFFckUsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3RkFBd0YsYUFBYTtBQUNyRztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUM7Ozs7Ozs7Ozs7OztBQzVDYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDBDQUEwQyxtQkFBTyxDQUFDLDRGQUF1Qjs7QUFFekUsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsMkNBQTJDLGtCQUFrQixrQ0FBa0MscUVBQXFFLEVBQUUsRUFBRSxPQUFPLGtCQUFrQixFQUFFLFlBQVk7O0FBRS9NO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMEZBQTBGLGFBQWE7QUFDdkc7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZEQUE2RDtBQUM3RDtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esa0M7Ozs7Ozs7Ozs7OztBQ3pEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLDBDQUEwQyxnQ0FBZ0Msb0NBQW9DLG9EQUFvRCw4REFBOEQsZ0VBQWdFLEVBQUUsRUFBRSxnQ0FBZ0MsRUFBRSxhQUFhOztBQUVuVixnQ0FBZ0MsZ0JBQWdCLHNCQUFzQixPQUFPLHVEQUF1RCxhQUFhLHVEQUF1RCwyQ0FBMkMsRUFBRSxFQUFFLEVBQUUsNkNBQTZDLDJFQUEyRSxFQUFFLE9BQU8saURBQWlELGtGQUFrRixFQUFFLEVBQUUsRUFBRSxFQUFFLGVBQWU7O0FBRXBoQiwyQ0FBMkMsa0JBQWtCLGtDQUFrQyxxRUFBcUUsRUFBRSxFQUFFLE9BQU8sa0JBQWtCLEVBQUUsWUFBWTs7QUFFL007QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0dBQWtHLGFBQWE7QUFDL0c7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5QyxVQUFVLG9CQUFvQjtBQUN2RSxHQUFHLElBQUk7O0FBRVA7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEOzs7Ozs7Ozs7Ozs7QUN6RWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQSwrRUFBK0UsYUFBYTtBQUM1RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzRDs7Ozs7Ozs7Ozs7O0FDcEVhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsb0NBQW9DLG1CQUFPLENBQUMsNENBQU87O0FBRW5ELGlCQUFpQixtQkFBTyxDQUFDLHNEQUFZOztBQUVyQyw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsMEZBQTBGLGFBQWE7QUFDdkc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFDOzs7Ozs7Ozs7Ozs7QUM3Q2E7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxrQ0FBa0MsbUJBQU8sQ0FBQyw0REFBTzs7QUFFakQsc0NBQXNDLG1CQUFPLENBQUMsb0VBQVc7O0FBRXpELGdEQUFnRCxtQkFBTyxDQUFDLHdGQUFxQjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBO0FBQ0EsOEM7Ozs7Ozs7Ozs7OztBQ2xCYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHVDQUF1QyxtQkFBTyxDQUFDLG9EQUFXOztBQUUxRCw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDOzs7Ozs7Ozs7Ozs7QUM1Q2E7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0ZBQXdGLGFBQWE7QUFDckc7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0RkFBNEYsZUFBZTtBQUMzRztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EseUM7Ozs7Ozs7Ozs7OztBQ3pEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0UscUNBQXFDLG1CQUFPLENBQUMsa0ZBQWtCOztBQUUvRCw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrQzs7Ozs7Ozs7Ozs7O0FDNURhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsc0RBQVk7O0FBRXJDLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GLGtDQUFrQyxxSEFBcUg7O0FBRXZKLCtCQUErQiw2SkFBNko7O0FBRTVMLGlEQUFpRCxnQkFBZ0IsZ0VBQWdFLHdEQUF3RCw2REFBNkQsc0RBQXNELGtIQUFrSDs7QUFFOVosaUNBQWlDLCtGQUErRjs7QUFFaEksa0NBQWtDLHVEQUF1RDs7QUFFekYsc0NBQXNDLHVEQUF1RCx1Q0FBdUMsU0FBUyxPQUFPLGtCQUFrQixFQUFFLGFBQWE7O0FBRXJMO0FBQ0E7QUFDQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDhCOzs7Ozs7Ozs7Ozs7QUN2RmE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUM7Ozs7Ozs7Ozs7OztBQy9DYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLGtDQUFrQyxtQkFBTyxDQUFDLDREQUFPOztBQUVqRCxzQ0FBc0MsbUJBQU8sQ0FBQyxvRUFBVzs7QUFFekQsc0NBQXNDLG1CQUFPLENBQUMsb0VBQVc7O0FBRXpELHdDQUF3QyxtQkFBTyxDQUFDLHdGQUFxQjs7QUFFckUsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxpQzs7Ozs7Ozs7Ozs7O0FDNUNhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsYUFBYSxtQkFBTyxDQUFDLDRDQUFPOztBQUU1Qiw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx3RkFBd0YsYUFBYTtBQUNyRztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsK0I7Ozs7Ozs7Ozs7OztBQzdEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLHVDQUF1QyxtQkFBTyxDQUFDLG9EQUFXOztBQUUxRCw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQzs7Ozs7Ozs7Ozs7O0FDaERhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDRGQUE0RixhQUFhO0FBQ3pHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBDOzs7Ozs7Ozs7Ozs7QUN0Q2E7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsa0NBQWtDLG1CQUFPLENBQUMsNERBQU87O0FBRWpELHNDQUFzQyxtQkFBTyxDQUFDLG9FQUFXOztBQUV6RCxpREFBaUQsbUJBQU8sQ0FBQywwRkFBc0I7O0FBRS9FLHFDQUFxQyxtQkFBTyxDQUFDLGtFQUFVOztBQUV2RCx3Q0FBd0MsbUJBQU8sQ0FBQyx3RUFBYTs7QUFFN0QscUNBQXFDLG1CQUFPLENBQUMsa0ZBQWtCOztBQUUvRCw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRiwwQ0FBMEMsZ0NBQWdDLG9DQUFvQyxvREFBb0QsOERBQThELGdFQUFnRSxFQUFFLEVBQUUsZ0NBQWdDLEVBQUUsYUFBYTs7QUFFblYsZ0NBQWdDLGdCQUFnQixzQkFBc0IsT0FBTyx1REFBdUQsYUFBYSx1REFBdUQsMkNBQTJDLEVBQUUsRUFBRSxFQUFFLDZDQUE2QywyRUFBMkUsRUFBRSxPQUFPLGlEQUFpRCxrRkFBa0YsRUFBRSxFQUFFLEVBQUUsRUFBRSxlQUFlOztBQUVwaEIsMkNBQTJDLGtCQUFrQixrQ0FBa0MscUVBQXFFLEVBQUUsRUFBRSxPQUFPLGtCQUFrQixFQUFFLFlBQVk7O0FBRS9NO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBLGdCQUFnQjtBQUNoQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUEsaUJBQWlCLHVCQUF1QjtBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZTtBQUNmOztBQUVBO0FBQ0EsK0JBQStCOztBQUUvQixtRkFBbUYsWUFBWSxvQkFBb0I7O0FBRW5IO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCOztBQUU5QixpQkFBaUI7QUFDakI7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw4RUFBOEUsZUFBZTtBQUM3RjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHNDOzs7Ozs7Ozs7Ozs7QUNoT2E7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0EsMEZBQTBGLGFBQWE7QUFDdkc7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUM7Ozs7Ozs7Ozs7OztBQzlEYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLGlCQUFpQixtQkFBTyxDQUFDLHNEQUFZOztBQUVyQyw0Q0FBNEMsbUJBQU8sQ0FBQyxnR0FBeUI7O0FBRTdFLHNDQUFzQyx1Q0FBdUMsa0JBQWtCOztBQUUvRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwRkFBMEYsYUFBYTtBQUN2RztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwwQzs7Ozs7Ozs7Ozs7O0FDdERhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsaUJBQWlCLG1CQUFPLENBQUMsc0RBQVk7O0FBRXJDLDRDQUE0QyxtQkFBTyxDQUFDLGdHQUF5Qjs7QUFFN0Usc0NBQXNDLHVDQUF1QyxrQkFBa0I7O0FBRS9GO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDBGQUEwRixhQUFhO0FBQ3ZHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDRDOzs7Ozs7Ozs7Ozs7QUN0RGE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsNEZBQTRGLGVBQWU7QUFDM0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVDOzs7Ozs7Ozs7Ozs7QUMzRWE7O0FBRWI7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQSxpQkFBaUIsbUJBQU8sQ0FBQyxzREFBWTs7QUFFckMsa0NBQWtDLG1CQUFPLENBQUMsNERBQU87O0FBRWpELDBDQUEwQyxtQkFBTyxDQUFDLDRFQUFlOztBQUVqRSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0YsMENBQTBDLGdDQUFnQyxvQ0FBb0Msb0RBQW9ELDhEQUE4RCxnRUFBZ0UsRUFBRSxFQUFFLGdDQUFnQyxFQUFFLGFBQWE7O0FBRW5WLGdDQUFnQyxnQkFBZ0Isc0JBQXNCLE9BQU8sdURBQXVELGFBQWEsdURBQXVELDJDQUEyQyxFQUFFLEVBQUUsRUFBRSw2Q0FBNkMsMkVBQTJFLEVBQUUsT0FBTyxpREFBaUQsa0ZBQWtGLEVBQUUsRUFBRSxFQUFFLEVBQUUsZUFBZTs7QUFFcGhCLDJDQUEyQyxrQkFBa0Isa0NBQWtDLHFFQUFxRSxFQUFFLEVBQUUsT0FBTyxrQkFBa0IsRUFBRSxZQUFZOztBQUUvTTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdGQUF3RixhQUFhO0FBQ3JHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw4RkFBOEYsZUFBZTtBQUM3RztBQUNBOztBQUVBLCtEQUErRCxZQUFZLG9CQUFvQjtBQUMvRjs7QUFFQTtBQUNBOztBQUVBLDhGQUE4RixlQUFlO0FBQzdHO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUM7Ozs7Ozs7Ozs7OztBQzFGYTs7QUFFYjtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBLDBDQUEwQyxtQkFBTyxDQUFDLDRGQUF1Qjs7QUFFekUsNENBQTRDLG1CQUFPLENBQUMsZ0dBQXlCOztBQUU3RSxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBGQUEwRixhQUFhO0FBQ3ZHO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsOEZBQThGLGVBQWU7QUFDN0c7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQzs7Ozs7Ozs7Ozs7O0FDdERhOztBQUViO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUEsa0NBQWtDLG1CQUFPLENBQUMsNERBQU87O0FBRWpELG9DQUFvQyxtQkFBTyxDQUFDLGdFQUFTOztBQUVyRCxzQ0FBc0MsdUNBQXVDLGtCQUFrQjs7QUFFL0Y7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUM7Ozs7Ozs7Ozs7O0FDckJBLGlCQUFpQixNQUFxQyxHQUFHLFNBQXdCLEdBQUcsbUJBQU8sQ0FBQyxnRUFBUzs7QUFFckcsaUM7Ozs7Ozs7Ozs7OztBQ0ZhOztBQUViLGVBQWUsbUJBQU8sQ0FBQyw4RUFBMkI7QUFDbEQsZUFBZSxtQkFBTyxDQUFDLDhFQUEyQjtBQUNsRCxpQkFBaUIsbUJBQU8sQ0FBQyxrRkFBNkI7O0FBRXREO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHVCQUF1QixZQUFZO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUM1QmE7O0FBRWIsYUFBYSxtQkFBTyxDQUFDLG9FQUFtQjtBQUN4QyxnQkFBZ0IsbUJBQU8sQ0FBQyxrRUFBcUI7QUFDN0MsNkJBQTZCLG1CQUFPLENBQUMsMEdBQXlDOztBQUU5RSxxQkFBcUIsbUJBQU8sQ0FBQywrRUFBa0I7QUFDL0Msa0JBQWtCLG1CQUFPLENBQUMsbUVBQVk7QUFDdEMsV0FBVyxtQkFBTyxDQUFDLDJEQUFROztBQUUzQjs7QUFFQTs7QUFFQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOzs7Ozs7Ozs7Ozs7O0FDMUJhOztBQUViO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQSw2Q0FBNkMsbUJBQU8sQ0FBQywrRUFBa0I7QUFDdkU7Ozs7Ozs7Ozs7Ozs7QUNaYTs7QUFFYixhQUFhLG1CQUFPLENBQUMsb0VBQW1CO0FBQ3hDLGtCQUFrQixtQkFBTyxDQUFDLG1FQUFZOztBQUV0QztBQUNBOztBQUVBLDBCQUEwQixpQkFBaUI7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsRUFBRTs7QUFFRjtBQUNBOzs7Ozs7Ozs7Ozs7O0FDZkEsOENBQWE7O0FBRWIsbUJBQU8sQ0FBQyxvREFBYzs7QUFFdEIsbUJBQU8sQ0FBQyxrRkFBNkI7O0FBRXJDLG1CQUFPLENBQUMsNEVBQTBCOztBQUVsQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQyxFOzs7Ozs7Ozs7Ozs7O0FDM0JZOztBQUViLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlOztBQUUxQyxlQUFlLG1CQUFPLENBQUMsNkNBQUk7O0FBRTNCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FDZGE7O0FBRWIsV0FBVyxtQkFBTyxDQUFDLDREQUFlO0FBQ2xDLG1CQUFtQixtQkFBTyxDQUFDLDREQUFlOztBQUUxQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IsUUFBUSxXQUFXO0FBQ3ZDLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkMsbUJBQW1CO0FBQzlELENBQUM7QUFDRDtBQUNBOzs7Ozs7Ozs7Ozs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxJQUFJLEtBQTREO0FBQ2hFLElBQUksU0FDcUc7QUFDekcsQ0FBQyxzQkFBc0I7O0FBRXZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixNQUFNO0FBQzNCO0FBQ0EsaURBQWlELHFCQUFxQjtBQUN0RTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwySEFBMkgscUJBQXFCO0FBQ2hKOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLCtCQUErQix5Q0FBeUM7QUFDeEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsaUNBQWlDLEVBQUU7QUFDaEUsMEJBQTBCLG1CQUFtQixFQUFFO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSw4QkFBOEIsYUFBYTtBQUMzQztBQUNBLDBDQUEwQyw4QkFBOEI7QUFDeEU7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJFQUEyRSxrQkFBa0IsRUFBRTtBQUMvRjtBQUNBO0FBQ0E7QUFDQSxxREFBcUQsaUJBQWlCO0FBQ3RFOztBQUVBO0FBQ0EsMkJBQTJCLE9BQU87QUFDbEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBLG1DQUFtQyxpQkFBaUI7QUFDcEQ7O0FBRUE7QUFDQSw2Q0FBNkMsbUJBQW1CO0FBQ2hFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0Isc0JBQXNCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLDRCQUE0Qiw4QkFBOEI7O0FBRTFEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixRQUFRO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLFFBQVE7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQSx1QkFBdUIsMkJBQTJCO0FBQ2xELDRCQUE0QiwrQkFBK0I7QUFDM0QsNEJBQTRCLCtCQUErQjs7QUFFM0Q7QUFDQSxvQkFBb0IsVUFBVTtBQUM5QixtREFBbUQsd0JBQXdCO0FBQzNFO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsUUFBUTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QixLQUFLO0FBQzlCLGdDQUFnQyxZQUFZO0FBQzVDLGdDQUFnQyxZQUFZO0FBQzVDO0FBQ0EscUJBQXFCLG1DQUFtQztBQUN4RDtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0EscUJBQXFCLCtDQUErQztBQUNwRTtBQUNBLHFCQUFxQixXQUFXO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsS0FBSztBQUM5QjtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLE9BQU87QUFDbEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLE9BQU87QUFDbEM7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixPQUFPO0FBQ2xDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCLHFCQUFxQjtBQUNqRCw0QkFBNEIsdUJBQXVCO0FBQ25ELDRCQUE0Qix1QkFBdUI7QUFDbkQ7QUFDQSx3QkFBd0IsVUFBVTtBQUNsQztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsNEJBQTRCLE9BQU87QUFDbkMsMEJBQTBCLFVBQVU7QUFDcEMsd0JBQXdCLFVBQVU7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBGQUEwRjtBQUMxRixrR0FBa0c7QUFDbEcsa0dBQWtHO0FBQ2xHLGtHQUFrRztBQUNsRyxrR0FBa0c7QUFDbEcsa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsT0FBTztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsa0NBQWtDLEVBQUUsYUFBYSxFQUFFO0FBQ25ELG1DQUFtQyxFQUFFLGFBQWEsRUFBRTs7QUFFcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FB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QTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxnQkFBZ0I7QUFDckQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIsT0FBTztBQUM5QjtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLHdDQUF3QywyQkFBMkI7QUFDbkUsd0NBQXdDLHFDQUFxQzs7QUFFN0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxFQUFFLEVBQUU7O0FBRVQ7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1EQUFtRCxpQkFBaUI7QUFDcEU7O0FBRUEsb0NBQW9DLHdCQUF3QjtBQUM1RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDJCQUEyQiw4QkFBOEI7QUFDekQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsNEJBQTRCLDZCQUE2QjtBQUN6RDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsYUFBYTtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsZUFBZTtBQUN4QztBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QywwQkFBMEI7QUFDbEUsd0NBQXdDLDBCQUEwQjtBQUNsRTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFlBQVk7QUFDbEM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLHlEQUF5RCxZQUFZO0FBQ3JFLFNBQVM7QUFDVDtBQUNBLHlEQUF5RCxZQUFZO0FBQ3JFLFNBQVM7QUFDVDtBQUNBOztBQUVBLGdDQUFnQyxnQ0FBZ0M7QUFDaEU7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7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QUFDQTs7QUFFQSxLQUFLLEtBQTZCO0FBQ2xDO0FBQ0E7QUFDQSxFQUFFLFVBQVUsSUFBNEU7QUFDeEY7QUFDQSxFQUFFLGlDQUFxQixFQUFFLG1DQUFFO0FBQzNCO0FBQ0EsR0FBRztBQUFBLG9HQUFDO0FBQ0osRUFBRSxNQUFNLEVBRU47QUFDRixDQUFDOzs7Ozs7Ozs7Ozs7O0FDekREO0FBQUE7QUFBQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVB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QUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTCw4REFBOEQ7QUFDOUQ7QUFDQSxLQUFLO0FBQ0wsd0VBQXdFO0FBQ3hFO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSCx5QkFBeUIsc0JBQXNCLEVBQUUsRUFBRTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixhQUFhO0FBQzNDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQiwwQkFBMEI7QUFDaEQsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0Es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ckMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwR0FBc0M7QUFDOUMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw0RUFBdUI7QUFDL0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyxvRUFBbUI7QUFDM0IsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxrR0FBa0M7QUFDMUMsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyxvR0FBbUM7QUFDM0MsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxrSEFBMEM7QUFDbEQsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyx3R0FBcUM7QUFDN0MsbUJBQU8sQ0FBQyxnR0FBaUM7QUFDekMsbUJBQU8sQ0FBQyxvSUFBbUQ7QUFDM0QsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyw4RUFBd0I7QUFDaEMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyx3RkFBNkI7QUFDckMsbUJBQU8sQ0FBQywwRkFBOEI7QUFDdEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQyxzRkFBNEI7QUFDcEMsbUJBQU8sQ0FBQyw0RkFBK0I7QUFDdkMsbUJBQU8sQ0FBQyxvRkFBMkI7QUFDbkMsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyw0R0FBdUM7QUFDL0MsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyxnSEFBeUM7QUFDakQsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyx3SEFBNkM7QUFDckQsbUJBQU8sQ0FBQyxzR0FBb0M7QUFDNUMsbUJBQU8sQ0FBQyw4R0FBd0M7QUFDaEQsbUJBQU8sQ0FBQyw4RkFBZ0M7QUFDeEMsbUJBQU8sQ0FBQyxzRUFBb0I7QUFDNUIsbUJBQU8sQ0FBQyxrRkFBMEI7QUFDbEMsbUJBQU8sQ0FBQywwRUFBc0I7QUFDOUIsbUJBQU8sQ0FBQyxnRkFBeUI7QUFDakMsbUJBQU8sQ0FB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YSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxVQUFVLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLFVBQVUsVUFBVSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFVBQVUsS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sVUFBVSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLFlBQVksTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxXQUFXLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLFFBQVEsS0FBSyxVQUFVLFFBQVEsS0FBSyxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxLQUFLLFlBQVksTUFBTSxLQUFLLFlBQVksTUFBTSxNQUFNLEtBQUssS0FBSyxZQUFZLE1BQU0sS0FBSyxZQUFZLE1BQU0sTUFBTSxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssY0FBYyxRQUFRLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFlBQVksYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsU0FBUyxLQUFLLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FB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QUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLFVBQVUsVUFBVSxVQUFVLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxNQUFNLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLE1BQU0sVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxXQUFXLFlBQVksYUFBYSxXQUFXLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLE1BQU0sVUFBVSxNQUFNLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsT0FBTyxLQUFLLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxXQUFXLFlBQVksV0FBVyxZQUFZLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxNQUFNLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLE1BQU0sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxXQUFXLFVBQVUsTUFBTSxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLE1BQU0sTUFBTSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLE9BQU8sWUFBWSxhQUFhLE1BQU0sWUFBWSxhQUFhLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sVUFBVSxVQUFVLFVBQVUsTUFBTSxVQUFVLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxVQUFVLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksT0FBTyxZQUFZLE1BQU0sWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLGFBQWEsTUFBTSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLE1BQU0sVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsTUFBTSxXQUFXLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsYUFBYSxhQUFhLGFBQWEsYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLGFBQWEsTUFBTSxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLE9BQU8sTUFBTSxVQUFVLFlBQVksV0FBVyxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxVQUFVLFlBQVksT0FBTyxLQUFLLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFlBQVksYUFBYSxPQUFPLE1BQU0sWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxLQUFLLE9BQU8sYUFBYSxXQUFXLE1BQU0sS0FBSyxZQUFZLGFBQWEsV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLE1BQU0sTUFBTSxZQUFZLE9BQU8sS0FBSyxZQUFZLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxXQUFXLE1BQU0sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLGFBQWEsV0FBVyxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksYUFBYSxXQUFXLE1BQU0sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxXQUFXLFdBQVcsWUFBWSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxhQUFhLFdBQVcsWUFBWSxhQUFhLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFVBQVUsTUFBTSxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLGFBQWEsT0FBTyxLQUFLLFVBQVUsTUFBTSxLQUFLLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxXQUFXLFVBQVUsWUFBWSxXQUFXLFlBQVksU0FBUyxLQUFLLFlBQVksV0FBVyxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLFlBQVksV0FBVyxVQUFVLFVBQVUsWUFBWSxhQUFhLGFBQWEsYUFBYSxhQUFhLFdBQVcsTUFBTSxLQUFLLFVBQVUsWUFBWSxhQUFhLGFBQWEsV0FBVyxVQUFVLFVBQVUsVUFBVSxZQUFZLFdBQVcsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLE1BQU0sS0FBSyxVQUFVLFlBQVksV0FBVyxZQUFZLE9BQU8sS0FBSyxVQUFVLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxPQUFPLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFVBQVUsVUFBVSxNQUFNLEtBQUssVUFBVSxZQUFZLGFBQWEsV0FBVyxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssWUFBWSxPQUFPLE1BQU0sVUFBVSxVQUFVLFlBQVksYUFBYSxhQUFhLGFBQWEsY0FBYyxhQUFhLE9BQU8sS0FBSyxLQUFLLFlBQVksTUFBTSxNQUFNLFlBQVksTUFBTSxVQUFVLFVBQVUsTUFBTSxLQUFLLFVBQVUsVUFBVSxZQUFZLE9BQU8sS0FBSyxVQUFVLFVBQVUsWUFBWSxPQUFPLEtBQUssVUFBVSxZQUFZLFdBQVcsWUFBWSxPQUFPLEtBQUssWUFBWSxhQUFhLGFBQWEsYUFBYSxPQUFPLEtBQUssWUFBWSxXQUFXLE9BQU8sS0FBSyxZQUFZLFdBQVcsT0FBTyxLQUFLLFlBQVksT0FBTyxLQUFLLFVBQVUsWUFBWSxhQUFhLE9BQU8sS0FBSyxVQUFVLE9BQU8sS0FBSyxZQUFZLFdBQVcsVUFBVSxNQUFNLEtBQUssWUFBWSxPQUFPLEtBQUssWUFBWSxXQUFXLFlBQVksYUFBYSxPQUFPLEtBQUssVUFBVSxNQUFNLEtBQUssVUFBVSxVQUFVLFlBQVksV0FBVyxVQUFVLFlBQVksYUFBYSxnQ0FBZ0MsaUJBQWlCLGNBQWMsNEtBQTRLLEdBQUcs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O0FBQ0EsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7O0FBR0Esb0JBQW9COztBQUVwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFFOztBQUVIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEVBQUU7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsRUFBRTtBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsT0FBTztBQUNsQixXQUFXLEVBQUU7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFD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QTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQztBQUMzQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQ0FBaUM7QUFDakM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUEsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxpRUFBaUU7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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsV0FBVztBQUN0QixXQUFXLE9BQU87QUFDbEI7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFdBQVc7QUFDdEIsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsV0FBVyxPQUFPO0FBQ2xCLFlBQVksT0FBTztBQUNuQjtB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O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMkhBQTJILDZCQUE2QjtBQUN4SjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrRkFBa0Y7QUFDbEY7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTywwQ0FBMEM7OztBQUdqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFF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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07O0FBRU47QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELHNDQUFzQzs7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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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QUFDQTtBQUNBO0FBQ0E7OztBQUdBLG9DQUFvQztBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMENBQTBDO0FBQzFDO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQixZQUFZLE9BQU87QUFDbkI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxpREFBaUQ7QUFDakQ7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx1Q0FBdUM7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQ0FBb0M7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEOztBQUVBLG1DQUFtQzs7QUFFbkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7O0FBR0EsK0VBQStFO0FBQy9FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBLFlBQVksUUFBUTtBQUNwQjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFFBQVE7QUFDcEI7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLDZHQUE2RztBQUM3RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsVUFBVTs7QUFFVjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVyx1QkFBdUI7QUFDbEMsWUFBWTtBQUNaOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsdUJBQXVCO0FBQ2xDLFlBQVk7QUFDWjs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEIsWUFBWTtBQUNaOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsWUFBWSxXQUFXO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHVCQUF1QjtBQUNsQyxXQUFXLE9BQU87QUFDbEI7O0FBRUE7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSw4RUFBOEU7QUFDOUU7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsbUJBQW1CLHNCQUFzQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsT0FBTztBQUNsQixZQUFZO0FBQ1o7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FB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Q0E7QUFDQSxtREFBbUQ7QUFDbkQ7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJFQUEyRSxvR0FBb0csa0NBQWtDO0FBQ3ROO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtBQUssb0dBQW9HO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLENBQUM7O0FBRUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxrRUFBa0U7O0FBRWxFLDhGQUE4RjtBQUM5Rjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQiw0QkFBNEI7QUFDakQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZDQUE2QztBQUM3Qzs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsb0JBQW9CLHdCQUF3QjtBQUM1Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFDQUFxQztBQUNyQztBQUNBLCtFQUErRTtBQUMvRTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQSwwdkJBQTB2Qjs7QUFFMXZCO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQzs7QUFFcEMsdURBQXVEOztBQUV2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFFBQVEsY0FBYztBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEM7QUFDMUM7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBLDRDQUE0QztBQUM1QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLCtDQUErQztBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSywrQ0FBK0M7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOzs7QUFHQSx5RUFBeUU7QUFDekU7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdELDBEQUEwRDs7QUFFMUQsb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbURBQW1EO0FBQ25EOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSw0Q0FBNEM7QUFDNUM7QUFDQTs7QUFFQSwwSEFBMEg7QUFDMUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5RUFBeUU7QUFDekU7O0FBRUE7QUFDQSw4Q0FBOEM7O0FBRTlDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsbUVBQW1FO0FBQ25FO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBLHdDQUF3Qzs7QUFFeEM7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsMEJBQTBCO0FBQzFCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0I7O0FBRXhCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCOztBQUUzQjtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixtQkFBbUI7QUFDbkM7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQjtBQUNuQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQThEO0FBQzlELHFEQUFxRDtBQUNyRCwyREFBMkQ7QUFDM0QsMkNBQTJDO0FBQzNDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFEQUFxRDs7QUFFckQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw4Q0FBOEM7O0FBRTlDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJCQUEyQjs7QUFFM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLDhEQUE4RDs7QUFFOUQsMkRBQTJEO0FBQzNEOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7OztBQUdUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFD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RUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxTQUFTOzs7QUFHVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQkFBbUIsb0JBQW9CO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7QUFDNUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0gsa0dBQWtHO0FBQ2xHLCtDQUErQztBQUMvQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQ0FBc0M7O0FBRXRDOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNklBQTZJOztBQUU3STtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNULGtFQUFrRSw0Q0FBNEM7QUFDOUc7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlDQUFpQztBQUNqQyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0EscURBQXFEO0FBQ3JEOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtJQUFrSTtBQUNsSTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7OztBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esa0lBQWtJO0FBQ2xJO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLG9DQUFvQzs7QUFFcEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SkFBOEoseUNBQXlDO0FBQ3ZNO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsd0JBQXdCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGtEQUFrRDtBQUM1RDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDZCQUE2QjtBQUN6Qzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMLHVFQUF1RTs7QUFFdkUsVUFBVSw2QkFBNkI7QUFDdkM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsT0FBTzs7O0FBR1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7OztBQUdBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUEsY0FBYyxhQUFhO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxVQUFVLGlDQUFpQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFlBQVk7QUFDeEI7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTCx1RUFBdUU7O0FBRXZFLFVBQVUsWUFBWTtBQUN0Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxNQUFNO0FBQ25EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7OztBQUdMOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EseURBQXlEO0FBQ3pEOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBOztBQUVBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUEsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBLEVBQUU7O0FBRUY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBLDRIQUE0SDs7QUFFNUgsb0NBQW9DO0FBQ3BDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsd0JBQXdCO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtDQUFrQztBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQSxxQ0FBcUM7QUFDckM7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOEJBQThCO0FBQzlCLG1EQUFtRDtBQUNuRDtBQUNBOztBQUVBLHlDQUF5QztBQUN6QztBQUNBO0FBQ0E7O0FBRUE7QUFDQSx5QkFBeUI7O0FBRXpCLGdDQUFnQztBQUNoQztBQUNBOztBQUVBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDhCQUE4QjtBQUNyRDtBQUNBO0FBQ0EsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGlCQUFpQiw0Q0FBNEM7QUFDN0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlDQUFpQzs7QUFFakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQSw2Q0FBNkM7O0FBRTdDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87OztBQUdQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw0QkFBNEI7O0FBRTVCLG9DQUFvQzs7QUFFcEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUzs7O0FBR1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLDJDQUEyQztBQUNoRDs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLGtDQUFrQztBQUNsQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDJDQUEyQzs7QUFFM0MscUNBQXFDO0FBQ3JDO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG9EQUFvRDs7QUFFcEQ7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBLGlDQUFpQztBQUNqQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7QUFFSjtBQUNBLG1DQUFtQztBQUNuQztBQUNBO0FBQ0E7O0FBRUEsbUNBQW1DOztBQUVuQzs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLEdBQUcsb0NBQW9DOztBQUV2QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRyx1QkFBdUI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBLHlLQUF5SywwQ0FBMEM7QUFDbk47QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBOztBQUVBLDhDQUE4QztBQUM5QztBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJOztBQUVKOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EscUVBQXFFO0FBQ3JFO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxnQkFBZ0I7QUFDekIsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrQkFBK0I7O0FBRS9CO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTtBQUNBLCtDQUErQzs7QUFFL0M7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7OztBQUdUOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQSxPQUFPOzs7QUFHUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0Q7QUFDaEQ7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRDs7QUFFakQ7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EseUVBQXlFOztBQUV6RTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQzs7QUFFdEM7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLDBDQUEwQzs7QUFFMUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7O0FBR0EsZ0RBQWdEOztBQUVoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQzs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVCQUF1Qiw0Q0FBNEM7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDOztBQUVoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0EsR0FBRzs7O0FBR0gsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DOztBQUVwQztBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0wsd0NBQXdDOztBQUV4QztBQUNBLHNDQUFzQztBQUN0QztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOENBQThDOztBQUU5QztBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHVEQUF1RDtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RDtBQUN2RDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0RBQXNEO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0dBQWdHO0FBQ2hHOztBQUVBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtREFBbUQ7QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrRkFBK0Y7QUFDL0Y7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLHlOQUF5TixHQUFHOztBQUU1TjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QixxQkFBcUI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFlBQVk7QUFDOUI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXOzs7QUFHWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsK0NBQStDOztBQUUvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQ7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLCtCQUErQjtBQUMvQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0EsbUhBQW1IO0FBQ25IOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTs7O0FBR0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsNERBQTREOztBQUU1RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLG9DQUFvQztBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtREFBbUQ7QUFDbkQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOzs7QUFHQTtBQUNBLDhDQUE4QztBQUM5QztBQUNBOztBQUVBLHFIQUFxSDs7QUFFckgsK0NBQStDO0FBQy9DOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhOzs7QUFHYjtBQUNBOztBQUVBLG9EQUFvRDtBQUNwRDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYjs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkNBQTZDOztBQUU3QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7QUFDbkI7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUVBLHFFQUFxRTs7QUFFckUsZ0VBQWdFO0FBQ2hFOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVzs7QUFFWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1Q0FBdUM7QUFDdkM7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsb0RBQW9EOztBQUVwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0ZBQXNGOztBQUV0RjtBQUNBO0FBQ0EsbUJBQW1COzs7QUFHbkI7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7QUFFQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEI7QUFDOUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUEsK0RBQStEOztBQUUvRDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsdUVBQXVFOztBQUV2RTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwyQ0FBMkM7QUFDM0M7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHdEQUF3RDtBQUN4RDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdURBQXVEO0FBQ3ZEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7O0FBR0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUEsZ0hBQWdIO0FBQ2hIO0FBQ0E7QUFDQTs7QUFFQSx3Q0FBd0M7QUFDeEMsS0FBSyxNQUFNLEVBS047QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSwrQ0FBK0M7O0FBRS9DLDZCQUE2QjtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQ0FBa0M7O0FBRWxDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxxSEFBcUg7O0FBRXJIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBLDREQUE0RDtBQUM1RDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDs7O0FBR0Esc0VBQXNFOztBQUV0RTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBLEtBQUssa0NBQWtDO0FBQ3ZDOzs7QUFHQTtBQUNBLEdBQUc7QUFDSDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBLHlFQUF5RTs7QUFFekU7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxFQUFFOzs7QUFHRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWE7QUFDYix5TkFBeU4scUNBQXFDLHdGQUF3RiwyQkFBMkIscUJBQXFCLFFBQVEsWUFBWTtBQUMxWixhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGdEQUFnRDtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLE9BQU8sNElBQTRJO0FBQ25KO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQztBQUN0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQOzs7QUFHQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0EscURBQXFEOztBQUVyRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLDZCQUE2Qjs7QUFFN0I7QUFDQTs7QUFFQSw0Q0FBNEM7QUFDNUM7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsR0FBRywrQkFBK0I7QUFDbEM7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUcsK0JBQStCO0FBQ2xDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7O0FBRUEsbUNBQW1DOztBQUVuQztBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUE7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLE9BQU87O0FBRVAsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0NBQXdDOztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCx3Q0FBd0M7O0FBRXhDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7O0FBRUE7QUFDQSx1Q0FBdUM7O0FBRXZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGlEQUFpRDtBQUNqRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLENBQUM7QUFDRDtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjs7QUFFdEIsaUNBQWlDOztBQUVqQyw4QkFBOEI7O0FBRTlCLDBCQUEwQjs7QUFFMUIsNENBQTRDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EscURBQXFEOztBQUVyRCxrREFBa0Q7O0FBRWxELHdDQUF3QztBQUN4QztBQUNBO0FBQ0E7O0FBRUEsOENBQThDO0FBQzlDOztBQUVBLDZDQUE2Qzs7QUFFN0MsNkNBQTZDOztBQUU3QztBQUNBLG1DQUFtQztBQUNuQzs7QUFFQTtBQUNBLCtCQUErQjtBQUMvQjs7QUFFQSxrREFBa0Q7QUFDbEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDOztBQUUzQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtQ0FBbUM7QUFDbkM7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7OztBQUdIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7OztBQUdIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsUUFBUTtBQUNSO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQSwrQ0FBK0M7QUFDL0M7O0FBRUEsK0NBQStDOztBQUUvQyw0R0FBNEc7O0FBRTVHOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRzs7O0FBR0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSwwQ0FBMEM7QUFDMUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyRkFBMkY7O0FBRTNGO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxtRUFBbUU7OztBQUduRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0Esd0NBQXdDO0FBQ3hDOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUEsZ0NBQWdDO0FBQ2hDOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7OztBQUdIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTCw4Q0FBOEM7QUFDOUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsMERBQTBEO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QztBQUN4Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxHQUFHOztBQUVIOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7QUFHQTs7QUFFQTtBQUNBLEdBQUc7OztBQUdIO0FBQ0EsNENBQTRDOztBQUU1QztBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyQ0FBMkM7O0FBRTNDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0Esd0VBQXdFOztBQUV4RTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQSx3Q0FBd0M7QUFDeEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsNENBQTRDOzs7QUFHNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1RUFBdUU7O0FBRXZFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTCxnQ0FBZ0M7O0FBRWhDO0FBQ0EsR0FBRyxnQ0FBZ0M7OztBQUduQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDhCQUE4Qjs7QUFFOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsNENBQTRDO0FBQy9DOzs7QUFHQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDs7QUFFbEQsdUNBQXVDO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssNkJBQTZCOzs7QUFHbEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSzs7QUFFTCx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBOztBQUVBLGdDQUFnQztBQUNoQztBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOztBQUVMLHNCQUFzQjtBQUN0Qjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxHQUFHO0FBQ0g7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSCxxQ0FBcUM7O0FBRXJDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsdUJBQXVCLDRCQUE0QjtBQUNuRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0EsR0FBRzs7O0FBR0g7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDO0FBQ3RDOztBQUVBLHlDQUF5Qzs7QUFFekM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EseUNBQXlDOztBQUV6QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQiwyQkFBMkI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBLGtCQUFrQiwwQkFBMEI7QUFDNUM7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0EsMkNBQTJDOztBQUUzQzs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwyQkFBMkI7QUFDM0I7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx3QkFBd0I7QUFDckM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOzs7QUFHSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCOztBQUV6Qjs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOzs7QUFHQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUEsbUNBQW1DO0FBQ25DOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLE9BQU8sNENBQTRDO0FBQ25EOzs7QUFHQTtBQUNBLDZCQUE2QjtBQUM3QjtBQUNBOztBQUVBLHdDQUF3Qzs7QUFFeEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsT0FBTzs7O0FBR1A7O0FBRUE7QUFDQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4R0FBOEc7O0FBRTlHOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7O0FBR0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixJQUFJLGtDQUFrQyxtQ0FBbUM7QUFDMUYsNERBQTRELGNBQWMsSUFBSSxnQkFBZ0IsbUNBQW1DO0FBQ2pJLE9BQU87QUFDUDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlNQUFpTSxvREFBb0QsRUFBRTtBQUN2UDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSw4TEFBOEwsb0RBQW9ELEVBQUU7QUFDcFAsT0FBTztBQUNQO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGdGQUFnRjs7QUFFaEYsMENBQTBDO0FBQzFDO0FBQ0EsMEJBQTBCO0FBQzFCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrRUFBK0U7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsNkRBQTZEOztBQUU3RDtBQUNBO0FBQ0EsT0FBTztBQUNQOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUcsRUFBRTtBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxLQUFLO0FBQ0w7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHlCQUF5Qjs7QUFFekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxnQ0FBZ0M7O0FBRWhDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMENBQTBDO0FBQzFDLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSx5REFBeUQ7QUFDekQ7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3Qjs7QUFFeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDO0FBQ3ZDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDOztBQUVEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSCwrQ0FBK0M7O0FBRS9DLHVDQUF1QztBQUN2Qzs7QUFFQSxtQ0FBbUM7O0FBRW5DO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7O0FBRUo7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQ0FBb0M7O0FBRXBDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxREFBcUQ7O0FBRXJELHVDQUF1QztBQUN2Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7O0FBRXhDOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDJFQUEyRTs7QUFFM0U7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0Esc0VBQXNFO0FBQ3RFO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1RUFBdUU7QUFDdkU7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBFQUEwRTtBQUMxRTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RDs7QUFFN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGtEQUFrRDtBQUNsRDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSx5RUFBeUU7QUFDekU7QUFDQTs7QUFFQSw2Q0FBNkM7QUFDN0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOzs7QUFHRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDs7QUFFL0Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7O0FBRUE7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrREFBK0Q7O0FBRS9EO0FBQ0Esa0NBQWtDOztBQUVsQzs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxLQUFLO0FBQ0wscUJBQXFCLHdCQUF3QjtBQUM3QztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwrREFBK0QsT0FBTzs7QUFFdEU7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBOztBQUVBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsc0NBQXNDO0FBQ3RDO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTs7QUFFQSxzQ0FBc0M7QUFDdEM7QUFDQTtBQUNBLElBQUk7OztBQUdKO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUJBQW1CLDJCQUEyQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsbUZBQW1GOztBQUVuRjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7OztBQUdMO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRztBQUNIOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSzs7O0FBR0w7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsaU1BQWlNLGNBQWM7QUFDL007QUFDQSxHQUFHOzs7QUFHSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLOzs7QUFHTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUssRUFBRTtBQUNQOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUEsNkVBQTZFOztBQUU3RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7OztBQUdBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4Qzs7QUFFOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF1RDtBQUNGO0FBQ1M7QUFDRTtBQUNFO0FBQ0o7QUFDRTtBQUNOO0FBQ0U7QUFDVDtBQUNJO0FBQ0Y7QUFDa0I7QUFDSjtBQUNFO0FBQ1g7QUFDYTtBQUNiO0FBQ2U7QUFDYjtBQUNPO0FBQ0o7QUFDRTtBQUNYO0FBQ0Y7QUFDSDtBQUNVO0FBQ0g7QUFDYztBQUNqQjtBQUNDO0FBQ1A7QUFDVTtBQUNWO0FBQ1M7QUFDVDtBQUNRO0FBQ1Y7QUFDWTtBQUNGO0FBQ0c7QUFDUDtBQUNKO0FBQ2U7QUFDQTtBQUNiO0FBQ2E7QUFDQTtBQUNF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QUNBOztBQUVBO0FBQ0EsbURBQW1EOztBQUVuRDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLEVBQUU7QUFDYixXQUFXLEVBQUU7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QTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOztBQUVOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEVBQUU7O0FBRVA7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjs7QUFFMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTOzs7QUFHVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFD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QUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNkJBQTZCO0FBQzdCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwSEFBMEg7QUFDMUg7QUFDQTtBQUNBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxtRUFBbUU7O0FBRW5FO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxhQUFhO0FBQ3hCLFdBQVcsRUFBRTtBQUNiOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSwwREFBMEQ7QUFDMUQ7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtB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QUNkLEtBQUs7QUFDTCxjQUFjO0FBQ2Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0EsV0FBVztBQUNYOztBQUVBO0FBQ0E7QUFDQSx3Q0FBd0MsV0FBVztBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsU0FBUztBQUNUO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxvQ0FBb0MsY0FBYztBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsaUNBQWlDLGtCQUFrQjtBQUNuRDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsaUJBQWlCOztBQUVqQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7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QUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxnQ0FBZ0M7QUFDaEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIOzs7QUFHQTtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLFNBQVM7QUFDVDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7Ozs7Ozs7Ozs7Ozs7QUMxVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTs7QUFFYixJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLDhCQUE4Qjs7QUFFOUI7QUFDQSxtQkFBbUI7O0FBRW5CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNOzs7QUFHTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSwrQ0FBK0M7QUFDL0M7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDOztBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLEtB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eUY7QUFDcEssd0JBQXdCLG1EQUFtQixVQUFVLDBDQUEwQztBQUMvRixrREFBa0QsbURBQW1CLFNBQVMscUNBQXFDO0FBQ25IO0FBQ2UsNEVBQWEsRUFBQzs7Ozs7Ozs7Ozs7OztBQ3BFN0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQStCO0FBQ087QUFDSDtBQUNuQyxnREFBZSxDQUFDLG1EQUFtQixDQUFDLHVEQUFHOzs7Ozs7Ozs7Ozs7O0FDSHZDO0FBQUE7QUFBQTtBQUFBO0FBQStGO0FBQy9GLFlBQTBGOztBQUUxRjs7QUFFQTtBQUNBOztBQUVBLGFBQWEsMEdBQUcsQ0FBQyxtRkFBTzs7OztBQUlULGtKQUFPLGFBQWEsRTs7Ozs7Ozs7Ozs7O0FDWm5DO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLEVBQUU7QUFDZCxZQUFZLEVBQUU7QUFDZCxZQUFZLFFBQVE7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU87QUFDckIsY0FBYyxPQUFPO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLG1CQUFtQixpQkFBaUI7QUFDcEM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFbUIiLCJmaWxlIjoidWkuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hcHAvaW5kZXgudHN4XCIpO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGFuZFZhbGlkYXRvcjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gYW5kVmFsaWRhdG9yKHZhbGlkYXRvcnMpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbmQnO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWxpZGF0b3JzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FuZDogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdhbmQ6IDIgb3IgbW9yZSB2YWxpZGF0b3JzIGFyZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGFuZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsO1xuICAgIHZhbGlkYXRvcnMuc29tZShmdW5jdGlvbiAodmFsaWRhdG9yRm4pIHtcbiAgICAgIGZpcnN0RXJyb3IgPSB2YWxpZGF0b3JGbi5hcHBseSh2b2lkIDAsIGFyZ3MpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciA9PSBudWxsID8gbnVsbCA6IGZpcnN0RXJyb3I7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBhbmRJc1JlcXVpcmVkKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICB2YWxpZGF0b3JzLnNvbWUoZnVuY3Rpb24gKHZhbGlkYXRvckZuKSB7XG4gICAgICBmaXJzdEVycm9yID0gdmFsaWRhdG9yRm4uaXNSZXF1aXJlZC5hcHBseSh2YWxpZGF0b3JGbiwgYXJncyk7XG4gICAgICByZXR1cm4gZmlyc3RFcnJvciAhPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiBmaXJzdEVycm9yID09IG51bGwgPyBudWxsIDogZmlyc3RFcnJvcjtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBuYW1lLCB2YWxpZGF0b3JzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuZC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYmV0d2VlblZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuZW50cmllc1wiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF92YWx1ZXNPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsdWVzT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KTsga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV0gIT0gbnVsbCA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpZiAoaSAlIDIpIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KTsgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykgeyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpOyB9IGVsc2UgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoYXJyKSkpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfZSA9IHVuZGVmaW5lZDsgdHJ5IHsgZm9yICh2YXIgX2kgPSBhcnJbU3ltYm9sLml0ZXJhdG9yXSgpLCBfczsgIShfbiA9IChfcyA9IF9pLm5leHQoKSkuZG9uZSk7IF9uID0gdHJ1ZSkgeyBfYXJyLnB1c2goX3MudmFsdWUpOyBpZiAoaSAmJiBfYXJyLmxlbmd0aCA9PT0gaSkgYnJlYWs7IH0gfSBjYXRjaCAoZXJyKSB7IF9kID0gdHJ1ZTsgX2UgPSBlcnI7IH0gZmluYWxseSB7IHRyeSB7IGlmICghX24gJiYgX2lbXCJyZXR1cm5cIl0gIT0gbnVsbCkgX2lbXCJyZXR1cm5cIl0oKTsgfSBmaW5hbGx5IHsgaWYgKF9kKSB0aHJvdyBfZTsgfSB9IHJldHVybiBfYXJyOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIGFycjsgfVxuXG5mdW5jdGlvbiBudW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG5vbi1OYU4gbnVtYmVyLlwiKSk7XG59XG5cbmZ1bmN0aW9uIG51bWJlck9yUHJvcHNGdW5jKHByb3BzLCBwcm9wTmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQocHJvcE5hbWUsIFwiOiBhIGZ1bmN0aW9uLCBvciBhIG5vbi1OYU4gbnVtYmVyIGlzIHJlcXVpcmVkXCIpKTtcbn1cblxuZnVuY3Rpb24gbG93ZXJDb21wYXJlKHZhbHVlLCBfcmVmKSB7XG4gIHZhciBndCA9IF9yZWYuZ3QsXG4gICAgICBndGUgPSBfcmVmLmd0ZTtcblxuICBpZiAodHlwZW9mIGd0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZSA+IGd0O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBndGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlID49IGd0ZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB1cHBlckNvbXBhcmUodmFsdWUsIF9yZWYyKSB7XG4gIHZhciBsdCA9IF9yZWYyLmx0LFxuICAgICAgbHRlID0gX3JlZjIubHRlO1xuXG4gIGlmICh0eXBlb2YgbHQgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHZhbHVlIDwgbHQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGx0ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gdmFsdWUgPD0gbHRlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGdyZWF0ZXJUaGFuRXJyb3IoX3JlZjMpIHtcbiAgdmFyIGd0ID0gX3JlZjMuZ3QsXG4gICAgICBndGUgPSBfcmVmMy5ndGU7XG5cbiAgaWYgKHR5cGVvZiBndCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gXCJncmVhdGVyIHRoYW4gXCIuY29uY2F0KGd0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ3RlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBcIi5jb25jYXQoZ3RlKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gbGVzc1RoYW5FcnJvcihfcmVmNCkge1xuICB2YXIgbHQgPSBfcmVmNC5sdCxcbiAgICAgIGx0ZSA9IF9yZWY0Lmx0ZTtcblxuICBpZiAodHlwZW9mIGx0ID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBcImxlc3MgdGhhbiBcIi5jb25jYXQobHQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBsdGUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFwibGVzcyB0aGFuIG9yIGVxdWFsIHRvIFwiLmNvbmNhdChsdGUpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpIHtcbiAgdmFyIGVycm9ycyA9IFtncmVhdGVyVGhhbkVycm9yKG9wdHMpLCBsZXNzVGhhbkVycm9yKG9wdHMpXS5maWx0ZXIoQm9vbGVhbikuam9pbignIGFuZCAnKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIFwiKS5jb25jYXQoZXJyb3JzKTtcbn1cblxuZnVuY3Rpb24gcHJvcHNUaHVua2lmeShvcHRzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNSkge1xuICAgIHZhciBfcmVmNiA9IF9zbGljZWRUb0FycmF5KF9yZWY1LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjZbMF0sXG4gICAgICAgIHZhbHVlID0gX3JlZjZbMV07XG5cbiAgICB2YXIgbnVtYmVyVGh1bmsgPSB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInID8gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gOiB2YWx1ZTtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBrZXksIG51bWJlclRodW5rKSk7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKSB7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKG9wdHNUaHVua3MpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBfcmVmNykge1xuICAgIHZhciBfcmVmOCA9IF9zbGljZWRUb0FycmF5KF9yZWY3LCAyKSxcbiAgICAgICAga2V5ID0gX3JlZjhbMF0sXG4gICAgICAgIHRodW5rID0gX3JlZjhbMV07XG5cbiAgICB2YXIgdmFsdWUgPSB0aHVuayhwcm9wcyk7XG4gICAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWNjKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCB2YWx1ZSkpO1xuICB9LCB7fSk7XG59XG5cbnZhciBhcmdWYWxpZGF0b3JzID0gWygwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3Q6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jLFxuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGx0OiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHRlOiBudW1iZXJPclByb3BzRnVuYyxcbiAgZ3RlOiBudW1iZXJPclByb3BzRnVuY1xufSkuaXNSZXF1aXJlZCwgKDAsIF9zaGFwZVtcImRlZmF1bHRcIl0pKHtcbiAgbHQ6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBsdGU6IG51bWJlck9yUHJvcHNGdW5jXG59KS5pc1JlcXVpcmVkLCAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoe1xuICBndDogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWQsICgwLCBfc2hhcGVbXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogbnVtYmVyT3JQcm9wc0Z1bmNcbn0pLmlzUmVxdWlyZWRdO1xuXG5mdW5jdGlvbiBhcmdWYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gIHJldHVybiBhcmdWYWxpZGF0b3JzLmV2ZXJ5KGZ1bmN0aW9uICh2YWxpZGF0b3IpIHtcbiAgICByZXR1cm4gISF2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKTtcbiAgfSk7XG59XG5cbnZhciB0aHVua1ZhbHVlVmFsaWRhdG9yID0gKDAsIF92YWx1ZXNPZltcImRlZmF1bHRcIl0pKG51bWJlcikuaXNSZXF1aXJlZDtcblxuZnVuY3Rpb24gYmV0d2VlblZhbGlkYXRvcihvcHRpb25zKSB7XG4gIHZhciBhcmdFcnJvciA9IGFyZ1ZhbGlkYXRvcih7XG4gICAgb3B0aW9uczogb3B0aW9uc1xuICB9LCAnb3B0aW9ucycpO1xuXG4gIGlmIChhcmdFcnJvcikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2JldHdlZW46IG9ubHkgb25lIG9mIHRoZSBwYWlycyBvZiBgbHRgL2BsdGVgLCBhbmQgYGd0YC9gZ3RlYCwgbWF5IGJlIHN1cHBsaWVkLCBhbmQgYXQgbGVhc3Qgb25lIHBhaXIgbXVzdCBiZSBwcm92aWRlZC4nKTtcbiAgfVxuXG4gIHZhciBvcHRzVGh1bmtzID0gcHJvcHNUaHVua2lmeShvcHRpb25zKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gYmV0d2Vlbihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgbXVzdCBiZSBhIG51bWJlciwgZ290IFxcXCJcIikuY29uY2F0KF90eXBlb2YocHJvcFZhbHVlKSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgb3B0cyA9IGludm9rZVdpdGhQcm9wcyhvcHRzVGh1bmtzLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgdGh1bmtWYWx1ZXNFcnJvciA9IHRodW5rVmFsdWVWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wTmFtZSwgb3B0cyksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHRodW5rVmFsdWVzRXJyb3IpIHtcbiAgICAgIHJldHVybiB0aHVua1ZhbHVlc0Vycm9yO1xuICAgIH1cblxuICAgIGlmICghbG93ZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykgfHwgIXVwcGVyQ29tcGFyZShwcm9wVmFsdWUsIG9wdHMpKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoZXJyb3JNZXNzYWdlKGNvbXBvbmVudE5hbWUsIHByb3BOYW1lLCBvcHRzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBiZXR3ZWVuUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBtdXN0IGJlIGEgbnVtYmVyLCBnb3QgXFxcIlwiKS5jb25jYXQoX3R5cGVvZihwcm9wVmFsdWUpLCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHZhciBvcHRzID0gaW52b2tlV2l0aFByb3BzKG9wdHNUaHVua3MsIHByb3BzKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMiA+IDMgPyBfbGVuMiAtIDMgOiAwKSwgX2tleTIgPSAzOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciB0aHVua1ZhbHVlc0Vycm9yID0gdGh1bmtWYWx1ZVZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCBvcHRzKSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAodGh1bmtWYWx1ZXNFcnJvcikge1xuICAgICAgcmV0dXJuIHRodW5rVmFsdWVzRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFsb3dlckNvbXBhcmUocHJvcFZhbHVlLCBvcHRzKSB8fCAhdXBwZXJDb21wYXJlKHByb3BWYWx1ZSwgb3B0cykpIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihlcnJvck1lc3NhZ2UoY29tcG9uZW50TmFtZSwgcHJvcE5hbWUsIG9wdHMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnYmV0d2VlbicsIG9wdGlvbnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmV0d2Vlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gYm9vbGVhblNvbWVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGJvb2xlYW5Tb21lVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbm90QWxsUHJvcHNGYWxzZSA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBub3RBbGxQcm9wc0ZhbHNlW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoIDwgMSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2F0IGxlYXN0IG9uZSBwcm9wIChvbmUgb2Ygd2hpY2ggbXVzdCBiZSBgdHJ1ZWApIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAoIW5vdEFsbFByb3BzRmFsc2UuZXZlcnkoZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnO1xuICB9KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2FsbCBib29sZWFuU29tZSBwcm9wcyBtdXN0IGJlIHN0cmluZ3MnKTtcbiAgfVxuXG4gIHZhciBwcm9wc0xpc3QgPSBub3RBbGxQcm9wc0ZhbHNlLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudEZhbHNlID0gZnVuY3Rpb24gY291bnRGYWxzZShjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID09PSBmYWxzZSA/IDEgOiAwKTtcbiAgICB9O1xuXG4gICAgdmFyIGZhbHNlUHJvcENvdW50ID0gbm90QWxsUHJvcHNGYWxzZS5yZWR1Y2UoY291bnRGYWxzZSwgMCk7XG5cbiAgICBpZiAoZmFsc2VQcm9wQ291bnQgPT09IG5vdEFsbFByb3BzRmFsc2UubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiQSBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBvZiB0aGVzZSBib29sZWFuIHByb3BzIGJlIGB0cnVlYDogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGJvb2xlYW5Tb21lUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50RmFsc2UgPSBmdW5jdGlvbiBjb3VudEZhbHNlKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPT09IGZhbHNlID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZmFsc2VQcm9wQ291bnQgPSBub3RBbGxQcm9wc0ZhbHNlLnJlZHVjZShjb3VudEZhbHNlLCAwKTtcblxuICAgIGlmIChmYWxzZVByb3BDb3VudCA9PT0gbm90QWxsUHJvcHNGYWxzZS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgYHRydWVgOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJib29sZWFuU29tZTogXCIuY29uY2F0KHByb3BzTGlzdCksIG5vdEFsbFByb3BzRmFsc2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vbGVhblNvbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4ocHJvcCkge1xuICBpZiAodHlwZW9mIHByb3AgIT09ICdzdHJpbmcnICYmIF90eXBlb2YocHJvcCkgIT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwcm9wOiBtdXN0IGJlIHN0cmluZyBvciBzeW1ib2wnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBjaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW5XaXRoUHJvcChfcmVmLCBfLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNoaWxkcmVuID0gX3JlZi5jaGlsZHJlbjtcbiAgICB2YXIgdHJ1dGh5Q2hpbGRyZW5Db3VudCA9IDA7XG4gICAgdmFyIHByb3BDb3VudCA9IDA7XG4gICAgdmFyIGdyYW5kY2hpbGRyZW5Db3VudCA9IDA7XG5cbiAgICBfcmVhY3RbXCJkZWZhdWx0XCJdLkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRydXRoeUNoaWxkcmVuQ291bnQgKz0gMTtcblxuICAgICAgaWYgKGNoaWxkLnByb3BzW3Byb3BdKSB7XG4gICAgICAgIHByb3BDb3VudCArPSAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZC5wcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgICAgZ3JhbmRjaGlsZHJlbkNvdW50ICs9IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcENvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50ICYmIGdyYW5kY2hpbGRyZW5Db3VudCA9PT0gMCB8fCBwcm9wQ291bnQgPT09IDAgJiYgZ3JhbmRjaGlsZHJlbkNvdW50ID09PSB0cnV0aHlDaGlsZHJlbkNvdW50IHx8IHByb3BDb3VudCA9PT0gMCAmJiBncmFuZGNoaWxkcmVuQ291bnQgPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgY2hpbGRyZW4gdG8gYWxsIGhhdmUgcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wLCBcIlxcdTIwMUQsIGFsbCBoYXZlIGNoaWxkcmVuLCBvciBhbGwgaGF2ZSBuZWl0aGVyLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwiY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuV2l0aFByb3A6XCIuY29uY2F0KHByb3ApLCBwcm9wKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlbi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gY2hpbGRyZW5PZjtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRyZW4ocHJvcFR5cGUsIGNoaWxkcmVuLCBwcm9wcykge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgZXJyb3I7XG4gIGNoaWxkcmVuLnNvbWUoZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgZXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZFxuICAgIH0pLCAnY2hpbGRyZW4nXS5jb25jYXQocmVzdCkpO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSk7XG4gIHJldHVybiBlcnJvciB8fCBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mKHByb3BUeXBlKSB7XG4gIGZ1bmN0aW9uIGNoaWxkcmVuT2ZQcm9wVHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcE5hbWUgIT09ICdjaGlsZHJlbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGlzIHVzaW5nIHRoZSBjaGlsZHJlbk9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaGlsZHJlbi5hcHBseSh2b2lkIDAsIFtwcm9wVHlwZSwgY2hpbGRyZW4sIHByb3BzLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgY2hpbGRyZW5PZlByb3BUeXBlLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiAocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5PZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkcmVuID0gKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pO1xuXG4gICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgbm9kZSBvZiB0eXBlIFwiKS5jb25jYXQocHJvcFR5cGUudHlwZU5hbWUgfHwgcHJvcFR5cGUubmFtZSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUNoaWxkcmVuLmFwcGx5KHZvaWQgMCwgW3Byb3BUeXBlLCBjaGlsZHJlbiwgcHJvcHMsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKGNoaWxkcmVuT2ZQcm9wVHlwZSwgJ2NoaWxkcmVuT2YnLCBwcm9wVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlbk9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb25seVR5cGVzKHR5cGVzLCBjaGlsZHJlbiwgY29tcG9uZW50TmFtZSkge1xuICBpZiAoIWNoaWxkcmVuLmV2ZXJ5KGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZCAmJiAoMCwgX2FycmF5UHJvdG90eXBlW1wiZGVmYXVsdFwiXSkodHlwZXMsIGZ1bmN0aW9uIChUeXBlKSB7XG4gICAgICByZXR1cm4gVHlwZSA9PT0gJyonIHx8IGNoaWxkLnR5cGUgPT09IFR5cGU7XG4gICAgfSk7XG4gIH0pKSB7XG4gICAgdmFyIHR5cGVOYW1lcyA9IHR5cGVzLm1hcChfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pLmpvaW4oJywgb3IgJyk7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCBvbmx5IGFjY2VwdHMgY2hpbGRyZW4gb2YgdHlwZSBcIikuY29uY2F0KHR5cGVOYW1lcykpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzUmVxdWlyZWQodHlwZXMsIGNoaWxkcmVuLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICB2YXIgdHlwZU5hbWVzID0gdHlwZXMubWFwKF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkuam9pbignLCBvciAnKTtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBub2RlIG9mIHR5cGUgXCIpLmNvbmNhdCh0eXBlTmFtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjaGlsZHJlbk9mVHlwZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHR5cGVzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHR5cGVzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKHR5cGVzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdjaGlsZHJlbk9mVHlwZTogYXQgbGVhc3QgMSB0eXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgcmV0dXJuIG9ubHlUeXBlcyh0eXBlcywgKDAsIF9yZW5kZXJhYmxlQ2hpbGRyZW5bXCJkZWZhdWx0XCJdKShwcm9wc1twcm9wTmFtZV0pLCBjb21wb25lbnROYW1lKTtcbiAgfVxuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcHNbcHJvcE5hbWVdKTtcbiAgICByZXR1cm4gaXNSZXF1aXJlZCh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpIHx8IG9ubHlUeXBlcyh0eXBlcywgY2hpbGRyZW4sIGNvbXBvbmVudE5hbWUpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdjaGlsZHJlbk9mVHlwZScsIHR5cGVzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gY2hpbGRyZW5PZlR5cGU7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hpbGRyZW5PZlR5cGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcjtcblxudmFyIF9zZXF1ZW5jZU9mID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9zZXF1ZW5jZU9mXCIpKTtcblxudmFyIF9yZW5kZXJhYmxlQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvcmVuZGVyYWJsZUNoaWxkcmVuXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIGNoaWxkcmVuU2VxdWVuY2VPZlZhbGlkYXRvcigpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgc3BlY2lmaWVyc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzZXEgPSBfc2VxdWVuY2VPZltcImRlZmF1bHRcIl0uYXBwbHkodm9pZCAwLCBzcGVjaWZpZXJzKTtcblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGlmIChwcm9wTmFtZSAhPT0gJ2NoaWxkcmVuJykge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgdXNpbmcgdGhlIGNoaWxkcmVuU2VxdWVuY2VPZiB2YWxpZGF0b3Igb24gbm9uLWNoaWxkcmVuIHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIlwiKSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICB2YXIgY2hpbGRyZW4gPSAoMCwgX3JlbmRlcmFibGVDaGlsZHJlbltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxLmFwcGx5KHZvaWQgMCwgW19vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY2hpbGRyZW5TZXF1ZW5jZU9mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgY2hpbGRyZW5TZXF1ZW5jZU9mIHZhbGlkYXRvciBvbiBub24tY2hpbGRyZW4gcHJvcCBcXFwiXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgIHZhciBjaGlsZHJlbiA9ICgwLCBfcmVuZGVyYWJsZUNoaWxkcmVuW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKTtcblxuICAgIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiByZW5kZXJhYmxlIGNoaWxkcmVuIGFyZSByZXF1aXJlZC5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBzZXEuaXNSZXF1aXJlZC5hcHBseShzZXEsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnY2hpbGRyZW5TZXF1ZW5jZU9mJywgc3BlY2lmaWVycyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaGlsZHJlblNlcXVlbmNlT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGNvbXBvbmVudFdpdGhOYW1lO1xuXG52YXIgX3JlYWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xuXG52YXIgX2lzUmVnZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJpcy1yZWdleFwiKSk7XG5cbnZhciBfYXJyYXlQcm90b3R5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJhcnJheS5wcm90b3R5cGUuZmluZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaXBIT0NzKGZ1bGxOYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXApIHtcbiAgdmFyIGlubmVyTmFtZSA9IGZ1bGxOYW1lO1xuXG4gIHdoaWxlICgvXFwoW14oKV0qXFwpL2cudGVzdChpbm5lck5hbWUpKSB7XG4gICAgdmFyIEhPQyA9IGlubmVyTmFtZTtcbiAgICB2YXIgcHJldmlvdXNIT0MgPSB2b2lkIDA7XG5cbiAgICBkbyB7XG4gICAgICBwcmV2aW91c0hPQyA9IEhPQztcbiAgICAgIEhPQyA9IHByZXZpb3VzSE9DLnJlcGxhY2UoL1xcKFteKCldKlxcKS9nLCAnJyk7XG4gICAgfSB3aGlsZSAocHJldmlvdXNIT0MgIT09IEhPQyk7XG5cbiAgICBpZiAobmFtZXNPZkhPQ3NUb1N0cmlwLmluZGV4T2YoSE9DKSA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBpbm5lck5hbWU7XG4gICAgfVxuXG4gICAgaW5uZXJOYW1lID0gaW5uZXJOYW1lLnJlcGxhY2UoUmVnRXhwKFwiXlwiLmNvbmNhdChIT0MsIFwiXFxcXCh8XFxcXCkkXCIpLCAnZycpLCAnJyk7XG4gIH1cblxuICByZXR1cm4gaW5uZXJOYW1lO1xufVxuXG5mdW5jdGlvbiBoYXNOYW1lKG5hbWUsIG5hbWVzT2ZIT0NzVG9TdHJpcCwgcHJvcFZhbHVlLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuICgwLCBfYXJyYXlQcm90b3R5cGVbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIGl0ZW0sIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLCBCb29sZWFuKSB8fCBudWxsO1xuICB9XG5cbiAgaWYgKCEgLyojX19QVVJFX18qL19yZWFjdFtcImRlZmF1bHRcIl0uaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIG5vdCBhIHZhbGlkIFJlYWN0IGVsZW1lbnRcIikpO1xuICB9XG5cbiAgdmFyIHR5cGUgPSBwcm9wVmFsdWUudHlwZTtcbiAgdmFyIGNvbXBvbmVudE5hbWVGcm9tVHlwZSA9ICgwLCBfZ2V0Q29tcG9uZW50TmFtZVtcImRlZmF1bHRcIl0pKHR5cGUpO1xuICB2YXIgaW5uZXJDb21wb25lbnROYW1lID0gbmFtZXNPZkhPQ3NUb1N0cmlwLmxlbmd0aCA+IDAgPyBzdHJpcEhPQ3MoY29tcG9uZW50TmFtZUZyb21UeXBlLCBuYW1lc09mSE9Dc1RvU3RyaXApIDogY29tcG9uZW50TmFtZUZyb21UeXBlO1xuXG4gIGlmICgoMCwgX2lzUmVnZXhbXCJkZWZhdWx0XCJdKShuYW1lKSAmJiAhbmFtZS50ZXN0KGlubmVyQ29tcG9uZW50TmFtZSkpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9ubHkgYWNjZXB0cyBjb21wb25lbnRzIG1hdGNoaW5nIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gXCIpLmNvbmNhdChuYW1lKSk7XG4gIH1cblxuICBpZiAoISgwLCBfaXNSZWdleFtcImRlZmF1bHRcIl0pKG5hbWUpICYmIGlubmVyQ29tcG9uZW50TmFtZSAhPT0gbmFtZSkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIi5cIikuY29uY2F0KHByb3BOYW1lLCBcImAgb25seSBhY2NlcHRzIGNvbXBvbmVudHMgbmFtZWQgXCIpLmNvbmNhdChuYW1lLCBcIiwgZ290IFwiKS5jb25jYXQoaW5uZXJDb21wb25lbnROYW1lKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWUobmFtZSkge1xuICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyAmJiAhKDAsIF9pc1JlZ2V4W1wiZGVmYXVsdFwiXSkobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCduYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgYSByZWdleCcpO1xuICB9XG5cbiAgdmFyIHBhc3NlZE9wdGlvbnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcblxuICBpZiAocGFzc2VkT3B0aW9ucy5sZW5ndGggPiAxIHx8IHBhc3NlZE9wdGlvbnMubGVuZ3RoID09PSAxICYmIHBhc3NlZE9wdGlvbnNbMF0gIT09ICdzdHJpcEhPQ3MnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlRoZSBvbmx5IG9wdGlvbnMgc3VwcG9ydGVkIGFyZTogXFx1MjAxQ3N0cmlwSE9Dc1xcdTIwMUQsIGdvdDogXFx1MjAxQ1wiLmNvbmNhdChwYXNzZWRPcHRpb25zLmpvaW4oJ+KAnSwg4oCcJyksIFwiXFx1MjAxRFwiKSk7XG4gIH1cblxuICB2YXIgX29wdGlvbnMkc3RyaXBIT0NzID0gb3B0aW9ucy5zdHJpcEhPQ3MsXG4gICAgICBuYW1lc09mSE9Dc1RvU3RyaXAgPSBfb3B0aW9ucyRzdHJpcEhPQ3MgPT09IHZvaWQgMCA/IFtdIDogX29wdGlvbnMkc3RyaXBIT0NzO1xuICB2YXIgYWxsSE9DTmFtZXNBcmVWYWxpZCA9IG5hbWVzT2ZIT0NzVG9TdHJpcC5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIGlmICh0eXBlb2YgeCAhPT0gJ3N0cmluZycgfHwgL1soKV0vZy50ZXN0KHgpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIC9eKD86W2Etel1bYS16QS1aMC05XSt8W0EtWl1bYS16XVthLXpBLVowLTldKykkLy50ZXN0KHgpO1xuICB9KTtcblxuICBpZiAoIWFsbEhPQ05hbWVzQXJlVmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdldmVyeSBwcm92aWRlZCBIT0MgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIHdpdGggbm8gcGFyZW5zLCBhbmQgaW4gY2FtZWxDYXNlJyk7XG4gIH1cblxuICBmdW5jdGlvbiBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gaGFzTmFtZS5hcHBseSh2b2lkIDAsIFtuYW1lLCBuYW1lc09mSE9Dc1RvU3RyaXAsIHByb3BWYWx1ZSwgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH1cblxuICBjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gY29tcG9uZW50V2l0aE5hbWVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcImBcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIuXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHJlcXVpcmVzIGF0IGxlYXN0IG9uZSBjb21wb25lbnQgbmFtZWQgXCIpLmNvbmNhdChuYW1lKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMyA/IF9sZW4zIC0gMyA6IDApLCBfa2V5MyA9IDM7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgcmV0dXJuIGhhc05hbWUuYXBwbHkodm9pZCAwLCBbbmFtZSwgbmFtZXNPZkhPQ3NUb1N0cmlwLCBwcm9wVmFsdWUsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjb21wb25lbnRXaXRoTmFtZVZhbGlkYXRvciwgXCJjb21wb25lbnRXaXRoTmFtZTpcIi5jb25jYXQobmFtZSksIG5hbWUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29tcG9uZW50V2l0aE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGRpc2FsbG93ZWRJZjtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gZGlzYWxsb3dlZElmKHByb3BUeXBlLCBvdGhlclByb3BOYW1lLCBvdGhlclByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHByb3BUeXBlLmlzUmVxdWlyZWQgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIHZhbGlkYXRvciBpcyByZXF1aXJlZDsgcHJvcFR5cGUgdmFsaWRhdG9ycyBtdXN0IGFsc28gcHJvdmlkZSBgLmlzUmVxdWlyZWRgJyk7XG4gIH1cblxuICBpZiAodHlwZW9mIG90aGVyUHJvcE5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3RoZXIgcHJvcCBuYW1lIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb3RoZXJQcm9wVHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ290aGVyIHByb3AgdHlwZSB2YWxpZGF0b3IgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGRpc2FsbG93ZWRJZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICBpZiAocHJvcHNbb3RoZXJQcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIG90aGVyRXJyb3IgPSBvdGhlclByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBvdGhlclByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKG90aGVyRXJyb3IpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRXJyb3IoXCJwcm9wIFxcdTIwMUNcIi5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBpcyBkaXNhbGxvd2VkIHdoZW4gXFx1MjAxQ1wiKS5jb25jYXQob3RoZXJQcm9wTmFtZSwgXCJcXHUyMDFEIG1hdGNoZXMgdGhlIHByb3ZpZGVkIHZhbGlkYXRvclwiKSk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gZGlzYWxsb3dlZElmUHJvcFR5cGUocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzYWxsb3dlZElmUmVxdWlyZWQuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZGlzYWxsb3dlZElmUmVxdWlyZWQ7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdkaXNhbGxvd2VkSWYnLCB7XG4gICAgcHJvcFR5cGU6IHByb3BUeXBlLFxuICAgIG90aGVyUHJvcE5hbWU6IG90aGVyUHJvcE5hbWUsXG4gICAgb3RoZXJQcm9wVHlwZTogb3RoZXJQcm9wVHlwZVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc2FsbG93ZWRJZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZWxlbWVudFR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfcmVhY3RJcyA9IHJlcXVpcmUoXCJyZWFjdC1pc1wiKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfZ2V0Q29tcG9uZW50TmFtZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9nZXRDb21wb25lbnROYW1lXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBnZXRUeXBlTmFtZShUeXBlKSB7XG4gIGlmICh0eXBlb2YgVHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gVHlwZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gKDAsIF9nZXRDb21wb25lbnROYW1lW1wiZGVmYXVsdFwiXSkoVHlwZSk7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIC8vIGluIGVudmlyb25tZW50cyB3aGVyZSBmdW5jdGlvbnMgZG8gbm90IGhhdmUgbmFtZXNcblxuICByZXR1cm4gdHlwZSB8fCAnQW5vbnltb3VzIENvbXBvbmVudCc7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudFR5cGUoVHlwZSwgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB0eXBlID0gcHJvcHNbcHJvcE5hbWVdLnR5cGU7XG5cbiAgaWYgKHR5cGUgPT09IFR5cGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiLlwiKS5jb25jYXQocHJvcE5hbWUsIFwiIG11c3QgYmUgYSBSZWFjdCBlbGVtZW50IG9mIHR5cGUgXCIpLmNvbmNhdChnZXRUeXBlTmFtZShUeXBlKSkpO1xufVxuXG5mdW5jdGlvbiBlbGVtZW50VHlwZVZhbGlkYXRvcihUeXBlKSB7XG4gIGlmIChUeXBlID09PSAnKicpIHtcbiAgICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoX3Byb3BUeXBlcy5lbGVtZW50LCAnZWxlbWVudFR5cGUoKiknLCBUeXBlKTtcbiAgfVxuXG4gIGlmICghKDAsIF9yZWFjdElzLmlzVmFsaWRFbGVtZW50VHlwZSkoVHlwZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVHlwZSBtdXN0IGJlIGEgUmVhY3QgQ29tcG9uZW50LCBhbiBIVE1MIGVsZW1lbnQgdGFnIG5hbWUsIG9yIFxcXCIqXFxcIi4gR290IGFuIFwiLmNvbmNhdChfdHlwZW9mKFR5cGUpKSk7XG4gIH1cblxuICBmdW5jdGlvbiBlbGVtZW50VHlwZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZUVsZW1lbnRUeXBlLmFwcGx5KHZvaWQgMCwgW1R5cGUsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIGVsZW1lbnRUeXBlLmlzUmVxdWlyZWQgPSBlbGVtZW50VHlwZTsgLy8gY292ZXJlZCBieSBhbmQgKyBlbGVtZW50XG5cbiAgdmFyIHR5cGVOYW1lID0gZ2V0VHlwZU5hbWUoVHlwZSk7XG4gIHZhciB2YWxpZGF0b3JOYW1lID0gXCJlbGVtZW50VHlwZShcIi5jb25jYXQodHlwZU5hbWUsIFwiKVwiKTtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKCgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19wcm9wVHlwZXMuZWxlbWVudCwgZWxlbWVudFR5cGVdLCB2YWxpZGF0b3JOYW1lKSwgdmFsaWRhdG9yTmFtZSwgVHlwZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50VHlwZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfZXhwbGljaXROdWxsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9leHBsaWNpdE51bGxcIikpO1xuXG52YXIgX3dpdGhTaGFwZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vd2l0aFNoYXBlXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIGFycmF5T2ZWYWxpZGF0b3I7XG52YXIgdmFsaWRhdG9yID0gKDAsIF9vcltcImRlZmF1bHRcIl0pKFtfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSwgLy8gbnVsbC91bmRlZmluZWRcbigwLCBfcHJvcFR5cGVzLm9uZU9mKShbZmFsc2UsICcnLCBOYU5dKSwgKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKShfcHJvcFR5cGVzLmFycmF5LCB7XG4gIGxlbmd0aDogKDAsIF9wcm9wVHlwZXMub25lT2YpKFswXSkuaXNSZXF1aXJlZFxufSkuaXNSZXF1aXJlZCwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIGFyZ3VtZW50cyk7XG59XSk7XG5hcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2VtcHR5Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZW1wdHkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBleHBsaWNpdE51bGwocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIGlmIChwcm9wc1twcm9wTmFtZV0gPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFx1MjAxQ1wiKS5jb25jYXQocHJvcE5hbWUsIFwiXFx1MjAxRCBtdXN0IGJlIG51bGwgb3IgdW5kZWZpbmVkOyByZWNlaXZlZCBcIikuY29uY2F0KF90eXBlb2YocHJvcHNbcHJvcE5hbWVdKSkpO1xufVxuXG5leHBsaWNpdE51bGwuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIGV4cGxpY2l0TnVsbFJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogcHJvcCBcXHUyMDFDXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJcXHUyMDFEIG11c3QgYmUgbnVsbDsgcmVjZWl2ZWQgXCIpLmNvbmNhdChfdHlwZW9mKHByb3BzW3Byb3BOYW1lXSkpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoZXhwbGljaXROdWxsLCAnZXhwbGljaXROdWxsJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwbGljaXROdWxsLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBnZXRDb21wb25lbnROYW1lO1xuXG52YXIgX2Z1bmN0aW9uUHJvdG90eXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZnVuY3Rpb24ucHJvdG90eXBlLm5hbWVcIikpO1xuXG52YXIgX3JlYWN0SXMgPSByZXF1aXJlKFwicmVhY3QtaXNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8ICgwLCBfZnVuY3Rpb25Qcm90b3R5cGVbXCJkZWZhdWx0XCJdKShDb21wb25lbnQpO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc0ZvcndhcmRSZWYpKHtcbiAgICB0eXBlOiBDb21wb25lbnQsXG4gICAgJCR0eXBlb2Y6IF9yZWFjdElzLkVsZW1lbnRcbiAgfSkpIHtcbiAgICByZXR1cm4gQ29tcG9uZW50LmRpc3BsYXlOYW1lO1xuICB9XG5cbiAgaWYgKCgwLCBfcmVhY3RJcy5pc01lbW8pKENvbXBvbmVudCkpIHtcbiAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQudHlwZSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWdldENvbXBvbmVudE5hbWUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZmluaXRlID0gaXNGaW5pdGU7XG5cbnZhciBfZGVmYXVsdCA9IE51bWJlci5pc0ludGVnZXIgfHxcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5mdW5jdGlvbiAoeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmIGZpbml0ZSh4KSAmJiBmbG9vcih4KSA9PT0geDtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0ludGVnZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwicHJvcC10eXBlcy1leGFjdC9idWlsZC9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIF9kZWZhdWx0ID0gX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUGxhaW5PYmplY3QuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IGlzUHJpbWl0aXZlO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGlzUHJpbWl0aXZlKHgpIHtcbiAgcmV0dXJuICF4IHx8IF90eXBlb2YoeCkgIT09ICdvYmplY3QnICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNQcmltaXRpdmUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHJlbmRlcmFibGVDaGlsZHJlbjtcblxudmFyIF9yZWFjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHJlbmRlcmFibGVDaGlsZHJlbihjaGlsZHJlblByb3ApIHtcbiAgcmV0dXJuIF9yZWFjdFtcImRlZmF1bHRcIl0uQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlblByb3ApLmZpbHRlcihmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQgPT09IDAgfHwgY2hpbGQ7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVuZGVyYWJsZUNoaWxkcmVuLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB0eXBlT2Y7XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIHR5cGVPZihjaGlsZCkge1xuICBpZiAoY2hpbGQgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGQpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cblxuICBpZiAoX3R5cGVvZihjaGlsZCkgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIF90eXBlb2YoY2hpbGQpO1xuICB9XG5cbiAgaWYgKCAvKiNfX1BVUkVfXyovX3JlYWN0W1wiZGVmYXVsdFwiXS5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICByZXR1cm4gY2hpbGQudHlwZTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gd3JhcFZhbGlkYXRvcjtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QuYXNzaWduXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdyYXBWYWxpZGF0b3IodmFsaWRhdG9yLCB0eXBlTmFtZSkge1xuICB2YXIgdHlwZUNoZWNrZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKHZhbGlkYXRvci5iaW5kKCksIHtcbiAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgdHlwZUNoZWNrZXI6IHR5cGVDaGVja2VyLFxuICAgIGlzUmVxdWlyZWQ6ICgwLCBfb2JqZWN0W1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLmlzUmVxdWlyZWQuYmluZCgpLCB7XG4gICAgICB0eXBlTmFtZTogdHlwZU5hbWUsXG4gICAgICB0eXBlQ2hlY2tlcjogdHlwZUNoZWNrZXIsXG4gICAgICB0eXBlUmVxdWlyZWQ6IHRydWVcbiAgICB9KVxuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdyYXBWYWxpZGF0b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfcHJvcFR5cGVzRXhhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzLWV4YWN0XCIpKTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfYmV0d2VlbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vYmV0d2VlblwiKSk7XG5cbnZhciBfYm9vbGVhblNvbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Jvb2xlYW5Tb21lXCIpKTtcblxudmFyIF9jaGlsZHJlbkhhdmVQcm9wWG9yQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuSGF2ZVByb3BYb3JDaGlsZHJlblwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vY2hpbGRyZW5PZlwiKSk7XG5cbnZhciBfY2hpbGRyZW5PZlR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuT2ZUeXBlXCIpKTtcblxudmFyIF9jaGlsZHJlblNlcXVlbmNlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NoaWxkcmVuU2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfY29tcG9uZW50V2l0aE5hbWUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2NvbXBvbmVudFdpdGhOYW1lXCIpKTtcblxudmFyIF9kaXNhbGxvd2VkSWYgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2Rpc2FsbG93ZWRJZlwiKSk7XG5cbnZhciBfZWxlbWVudFR5cGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2VsZW1lbnRUeXBlXCIpKTtcblxudmFyIF9lbXB0eSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZW1wdHlcIikpO1xuXG52YXIgX2V4cGxpY2l0TnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vZXhwbGljaXROdWxsXCIpKTtcblxudmFyIF9pbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9pbnRlZ2VyXCIpKTtcblxudmFyIF9rZXlzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2tleXNPZlwiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1wiKSk7XG5cbnZhciBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL211dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzXCIpKTtcblxudmFyIF9uQ2hpbGRyZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25DaGlsZHJlblwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVJbnRlZ2VyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZUludGVnZXJcIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlTnVtYmVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ub25OZWdhdGl2ZU51bWJlclwiKSk7XG5cbnZhciBfbnVtZXJpY1N0cmluZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbnVtZXJpY1N0cmluZ1wiKSk7XG5cbnZhciBfb2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vYmplY3RcIikpO1xuXG52YXIgX29yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9vclwiKSk7XG5cbnZhciBfcHJlZGljYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9wcmVkaWNhdGVcIikpO1xuXG52YXIgX3JhbmdlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yYW5nZVwiKSk7XG5cbnZhciBfcmVmID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWZcIikpO1xuXG52YXIgX3JlcXVpcmVkQnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JlcXVpcmVkQnlcIikpO1xuXG52YXIgX3Jlc3RyaWN0ZWRQcm9wID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZXN0cmljdGVkUHJvcFwiKSk7XG5cbnZhciBfc2VxdWVuY2VPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2VxdWVuY2VPZlwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxudmFyIF9zdHJpbmdFbmRzV2l0aCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5nRW5kc1dpdGhcIikpO1xuXG52YXIgX3N0cmluZ1N0YXJ0c1dpdGggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ1N0YXJ0c1dpdGhcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbnZhciBfdW5pcXVlQXJyYXlPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdW5pcXVlQXJyYXlPZlwiKSk7XG5cbnZhciBfdmFsdWVzT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbHVlc09mXCIpKTtcblxudmFyIF93aXRoU2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3dpdGhTaGFwZVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYW5kOiBfYW5kW1wiZGVmYXVsdFwiXSxcbiAgYmV0d2VlbjogX2JldHdlZW5bXCJkZWZhdWx0XCJdLFxuICBib29sZWFuU29tZTogX2Jvb2xlYW5Tb21lW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuOiBfY2hpbGRyZW5IYXZlUHJvcFhvckNoaWxkcmVuW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5PZjogX2NoaWxkcmVuT2ZbXCJkZWZhdWx0XCJdLFxuICBjaGlsZHJlbk9mVHlwZTogX2NoaWxkcmVuT2ZUeXBlW1wiZGVmYXVsdFwiXSxcbiAgY2hpbGRyZW5TZXF1ZW5jZU9mOiBfY2hpbGRyZW5TZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgY29tcG9uZW50V2l0aE5hbWU6IF9jb21wb25lbnRXaXRoTmFtZVtcImRlZmF1bHRcIl0sXG4gIGRpc2FsbG93ZWRJZjogX2Rpc2FsbG93ZWRJZltcImRlZmF1bHRcIl0sXG4gIGVsZW1lbnRUeXBlOiBfZWxlbWVudFR5cGVbXCJkZWZhdWx0XCJdLFxuICBlbXB0eTogX2VtcHR5W1wiZGVmYXVsdFwiXSxcbiAgZXhwbGljaXROdWxsOiBfZXhwbGljaXROdWxsW1wiZGVmYXVsdFwiXSxcbiAgZm9yYmlkRXh0cmFQcm9wczogX3Byb3BUeXBlc0V4YWN0W1wiZGVmYXVsdFwiXSxcbiAgaW50ZWdlcjogX2ludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBrZXlzT2Y6IF9rZXlzT2ZbXCJkZWZhdWx0XCJdLFxuICBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1tcImRlZmF1bHRcIl0sXG4gIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzOiBfbXV0dWFsbHlFeGNsdXNpdmVUcnVlUHJvcHNbXCJkZWZhdWx0XCJdLFxuICBuQ2hpbGRyZW46IF9uQ2hpbGRyZW5bXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZUludGVnZXI6IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLFxuICBub25OZWdhdGl2ZU51bWJlcjogX25vbk5lZ2F0aXZlTnVtYmVyW1wiZGVmYXVsdFwiXSxcbiAgbnVtZXJpY1N0cmluZzogX251bWVyaWNTdHJpbmdbXCJkZWZhdWx0XCJdLFxuICBvYmplY3Q6IF9vYmplY3RbXCJkZWZhdWx0XCJdLFxuICBvcjogX29yW1wiZGVmYXVsdFwiXSxcbiAgcHJlZGljYXRlOiBfcHJlZGljYXRlW1wiZGVmYXVsdFwiXSxcbiAgcmFuZ2U6IF9yYW5nZVtcImRlZmF1bHRcIl0sXG4gIHJlZjogX3JlZltcImRlZmF1bHRcIl0sXG4gIHJlcXVpcmVkQnk6IF9yZXF1aXJlZEJ5W1wiZGVmYXVsdFwiXSxcbiAgcmVzdHJpY3RlZFByb3A6IF9yZXN0cmljdGVkUHJvcFtcImRlZmF1bHRcIl0sXG4gIHNlcXVlbmNlT2Y6IF9zZXF1ZW5jZU9mW1wiZGVmYXVsdFwiXSxcbiAgc2hhcGU6IF9zaGFwZVtcImRlZmF1bHRcIl0sXG4gIHN0cmluZ0VuZHNXaXRoOiBfc3RyaW5nRW5kc1dpdGhbXCJkZWZhdWx0XCJdLFxuICBzdHJpbmdTdGFydHNXaXRoOiBfc3RyaW5nU3RhcnRzV2l0aFtcImRlZmF1bHRcIl0sXG4gIHVuaXF1ZUFycmF5OiBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdLFxuICB1bmlxdWVBcnJheU9mOiBfdW5pcXVlQXJyYXlPZltcImRlZmF1bHRcIl0sXG4gIHZhbHVlc09mOiBfdmFsdWVzT2ZbXCJkZWZhdWx0XCJdLFxuICB3aXRoU2hhcGU6IF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9pc0ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNJbnRlZ2VyXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcmVxdWlyZWRJbnRlZ2VyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAhKDAsIF9pc0ludGVnZXJbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYW4gaW50ZWdlclwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxudmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIGludGVnZXIocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMl0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRJbnRlZ2VyLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gcmVxdWlyZWRJbnRlZ2VyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ2ludGVnZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBrZXlzT2ZWYWxpZGF0b3I7XG5cbnZhciBfaXNQcmltaXRpdmUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvaXNQcmltaXRpdmVcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBrZXlzT2ZWYWxpZGF0b3IocHJvcFR5cGUpIHtcbiAgdmFyIG5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdrZXlzT2YnO1xuXG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCB0byBrZXlzT2YgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24ga2V5c09mKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiA1ID8gX2xlbiAtIDUgOiAwKSwgX2tleSA9IDU7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDVdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwgfHwgKDAsIF9pc1ByaW1pdGl2ZVtcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBmaXJzdEVycm9yID0gbnVsbDtcbiAgICBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnNvbWUoZnVuY3Rpb24gKGtleSkge1xuICAgICAgZmlyc3RFcnJvciA9IHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW19kZWZpbmVQcm9wZXJ0eSh7fSwga2V5LCBrZXkpLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBcIihcIi5jb25jYXQocHJvcEZ1bGxOYW1lLCBcIikuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3IgIT0gbnVsbDtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlyc3RFcnJvciB8fCBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24ga2V5ZWRCeVJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBpcyByZXF1aXJlZCwgYnV0IHZhbHVlIGlzIFwiKS5jb25jYXQocHJvcFZhbHVlKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgbmFtZSwgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9a2V5c09mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZU9mVHlwZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlT2ZUeXBlKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgZXhjbHVzaXZlUHJvcHMgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIGlmIChleGNsdXNpdmVQcm9wcy5sZW5ndGggPCAxKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXQgbGVhc3Qgb25lIHByb3AgdGhhdCBpcyBtdXR1YWxseSBleGNsdXNpdmUgd2l0aCB0aGlzIHByb3BUeXBlIGlzIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgcHJvcExpc3QgPSBleGNsdXNpdmVQcm9wcy5qb2luKCcsIG9yICcpO1xuICB2YXIgbWFwID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHByb3ApIHtcbiAgICByZXR1cm4gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBhY2MpLCB7fSwgX2RlZmluZVByb3BlcnR5KHt9LCBwcm9wLCB0cnVlKSk7XG4gIH0sIHt9KTtcblxuICB2YXIgY291bnRQcm9wcyA9IGZ1bmN0aW9uIGNvdW50UHJvcHMoY291bnQsIHByb3ApIHtcbiAgICByZXR1cm4gY291bnQgKyAobWFwW3Byb3BdID8gMSA6IDApO1xuICB9O1xuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBtdXR1YWxseUV4Y2x1c2l2ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbXV0dWFsbHlFeGNsdXNpdmVQcm9wc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICByZXR1cm4gcHJvcCA9PT0gcHJvcE5hbWUgfHwgcHJvcHNbcHJvcF0gIT0gbnVsbDtcbiAgICB9KS5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgcHJvcHM6IFwiKS5jb25jYXQocHJvcExpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjMgPiAzID8gX2xlbjMgLSAzIDogMCksIF9rZXkzID0gMzsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgcmVzdFtfa2V5MyAtIDNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcFR5cGUuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibXV0dWFsbHlFeGNsdXNpdmVQcm9wczpcIi5jb25jYXQocHJvcExpc3QpLCBleGNsdXNpdmVQcm9wcyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdXR1YWxseUV4Y2x1c2l2ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtdXR1YWxseUV4Y2x1c2l2ZVRydWU7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZSgpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGV4Y2x1c2l2ZVByb3BzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGV4Y2x1c2l2ZVByb3BzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgaWYgKGV4Y2x1c2l2ZVByb3BzLmxlbmd0aCA8IDEpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhdCBsZWFzdCBvbmUgcHJvcCB0aGF0IGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKCFleGNsdXNpdmVQcm9wcy5ldmVyeShmdW5jdGlvbiAoeCkge1xuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZyc7XG4gIH0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYWxsIGV4Y2x1c2l2ZSB0cnVlIHByb3BzIG11c3QgYmUgc3RyaW5ncycpO1xuICB9XG5cbiAgdmFyIHByb3BzTGlzdCA9IGV4Y2x1c2l2ZVByb3BzLmpvaW4oJywgb3IgJyk7XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIHZhciBjb3VudFByb3BzID0gZnVuY3Rpb24gY291bnRQcm9wcyhjb3VudCwgcHJvcCkge1xuICAgICAgcmV0dXJuIGNvdW50ICsgKHByb3BzW3Byb3BdID8gMSA6IDApO1xuICAgIH07XG5cbiAgICB2YXIgZXhjbHVzaXZlUHJvcENvdW50ID0gZXhjbHVzaXZlUHJvcHMucmVkdWNlKGNvdW50UHJvcHMsIDApO1xuXG4gICAgaWYgKGV4Y2x1c2l2ZVByb3BDb3VudCA+IDEpIHtcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJBIFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBjYW5ub3QgaGF2ZSBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGJvb2xlYW4gcHJvcHMgYmUgdHJ1ZTogXCIpLmNvbmNhdChwcm9wc0xpc3QpKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3Byb3BUeXBlcy5ib29sLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIG11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIGNvdW50UHJvcHMgPSBmdW5jdGlvbiBjb3VudFByb3BzKGNvdW50LCBwcm9wKSB7XG4gICAgICByZXR1cm4gY291bnQgKyAocHJvcHNbcHJvcF0gPyAxIDogMCk7XG4gICAgfTtcblxuICAgIHZhciBleGNsdXNpdmVQcm9wQ291bnQgPSBleGNsdXNpdmVQcm9wcy5yZWR1Y2UoY291bnRQcm9wcywgMCk7XG5cbiAgICBpZiAoZXhjbHVzaXZlUHJvcENvdW50ID4gMSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcIkEgXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGNhbm5vdCBoYXZlIG1vcmUgdGhhbiBvbmUgb2YgdGhlc2UgYm9vbGVhbiBwcm9wcyBiZSB0cnVlOiBcIikuY29uY2F0KHByb3BzTGlzdCkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuMyA+IDMgPyBfbGVuMyAtIDMgOiAwKSwgX2tleTMgPSAzOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICByZXN0W19rZXkzIC0gM10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHJldHVybiBfcHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmJvb2wsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgXCJtdXR1YWxseUV4Y2x1c2l2ZVRydWVQcm9wczogXCIuY29uY2F0KHByb3BzTGlzdCksIGV4Y2x1c2l2ZVByb3BzKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW11dHVhbGx5RXhjbHVzaXZlVHJ1ZVByb3BzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBuQ2hpbGRyZW47XG5cbnZhciBfcmVhY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIG5DaGlsZHJlbihuKSB7XG4gIHZhciBwcm9wVHlwZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogX3Byb3BUeXBlcy5ub2RlO1xuXG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicgfHwgaXNOYU4obikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1uZWdhdGl2ZSBudW1iZXIgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBuQ2hpbGRyZW5WYWxpZGF0b3IocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BOYW1lICE9PSAnY2hpbGRyZW4nKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBpcyB1c2luZyB0aGUgbkNoaWxkcmVuIHZhbGlkYXRvciBvbiBhIG5vbi1jaGlsZHJlbiBwcm9wXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgY2hpbGRyZW4gPSBwcm9wcy5jaGlsZHJlbjtcblxuICAgIHZhciBjaGlsZHJlbkNvdW50ID0gX3JlYWN0W1wiZGVmYXVsdFwiXS5DaGlsZHJlbi5jb3VudChjaGlsZHJlbik7XG5cbiAgICBpZiAoY2hpbGRyZW5Db3VudCAhPT0gbikge1xuICAgICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIGV4cGVjdHMgdG8gcmVjZWl2ZSBcIikuY29uY2F0KG4sIFwiIGNoaWxkcmVuLCBidXQgcmVjZWl2ZWQgXCIpLmNvbmNhdChjaGlsZHJlbkNvdW50LCBcIiBjaGlsZHJlbi5cIikpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSB2YWxpZGF0b3I7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwibkNoaWxkcmVuOlwiLmNvbmNhdChuKSwgbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uQ2hpbGRyZW4uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfaW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaW50ZWdlclwiKSk7XG5cbnZhciBfbm9uTmVnYXRpdmVOdW1iZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25vbk5lZ2F0aXZlTnVtYmVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBfZGVmYXVsdCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoWygwLCBfaW50ZWdlcltcImRlZmF1bHRcIl0pKCksICgwLCBfbm9uTmVnYXRpdmVOdW1iZXJbXCJkZWZhdWx0XCJdKSgpXSwgJ25vbk5lZ2F0aXZlSW50ZWdlcicpO1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9uTmVnYXRpdmVJbnRlZ2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0SXMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJvYmplY3QtaXNcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBpc05vbk5lZ2F0aXZlKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh4KSAmJiB4ID49IDAgJiYgISgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKSh4LCAtMCk7XG59XG5cbmZ1bmN0aW9uIG5vbk5lZ2F0aXZlTnVtYmVyKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVkTm9uTmVnYXRpdmVOdW1iZXIocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2YWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNOb25OZWdhdGl2ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChwcm9wTmFtZSwgXCIgaW4gXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcIiBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlclwiKSk7XG59XG5cbm5vbk5lZ2F0aXZlTnVtYmVyLmlzUmVxdWlyZWQgPSByZXF1aXJlZE5vbk5lZ2F0aXZlTnVtYmVyO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKG5vbk5lZ2F0aXZlTnVtYmVyLCAnbm9uTmVnYXRpdmVOdW1iZXInKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub25OZWdhdGl2ZU51bWJlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgdmFsaWROdW1lcmljQ2hhcnMgPSAvXlstK10/KD86WzEtOV1bMC05XSooPzpcXC5bMC05XSspP3wwfDBcXC5bMC05XSspJC87XG5cbnZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBudW1lcmljU3RyaW5nKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcblxuICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gIH1cblxuICB2YXIgdmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciBwYXNzZXNSZWdleCA9IHZhbGlkTnVtZXJpY0NoYXJzLnRlc3QodmFsdWUpO1xuXG4gIGlmIChwYXNzZXNSZWdleCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHByb3AgXFxcIlwiKS5jb25jYXQocHJvcE5hbWUsIFwiXFxcIiAodmFsdWUgXFxcIlwiKS5jb25jYXQodmFsdWUsIFwiXFxcIikgbXVzdCBiZSBhIG51bWVyaWMgc3RyaW5nOlxcbiAgICAtIHN0YXJ0aW5nIHdpdGggYW4gb3B0aW9uYWwgKyBvciAtXFxuICAgIC0gdGhhdCBkb2VzIG5vdCBoYXZlIGEgbGVhZGluZyB6ZXJvXFxuICAgIC0gd2l0aCBhbiBvcHRpb25hbCBkZWNpbWFsIHBhcnQgKHRoYXQgY29udGFpbnMgb25seSBvbmUgZGVjaW1hbCBwb2ludCwgaWYgcHJlc2VudClcXG4gICAgLSB0aGF0IG90aGVyd2lzZSBvbmx5IGNvbnRhaW5zIGRpZ2l0cyAoMC05KVxcbiAgICAtIG5vdCArLU5hTiwgb3IgKy1JbmZpbml0eVxcbiAgXCIpKTtcbn07XG5cbnZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gbnVtZXJpY1N0cmluZ1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBpZiAocHJvcHNbcHJvcE5hbWVdID09IG51bGwpIHtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIgaXMgcmVxdWlyZWRcIikpO1xuICB9XG5cbiAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICByZXN0W19rZXkyIC0gM10gPSBhcmd1bWVudHNbX2tleTJdO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG59O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ251bWVyaWNTdHJpbmcnKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1udW1lcmljU3RyaW5nLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2b2lkIDA7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF90eXBlT2YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvdHlwZU9mXCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLypcbiAgY29kZSBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wyMDItTDIwNlxuICBzbyB0aGF0IGl0IGNhbiBiZSBjYWxsZWQgb3V0c2lkZSBvZiBSZWFjdCdzIG5vcm1hbCBQcm9wVHlwZSBmbG93XG4qL1xudmFyIFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzID0ge1xuICBwcm9wOiAncHJvcCcsXG4gIGNvbnRleHQ6ICdjb250ZXh0JyxcbiAgY2hpbGRDb250ZXh0OiAnY2hpbGQgY29udGV4dCdcbn07XG5cbmZ1bmN0aW9uIG9iamVjdChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICgoMCwgX2lzUGxhaW5PYmplY3RbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbG9jYXRpb25OYW1lID0gUmVhY3RQcm9wVHlwZUxvY2F0aW9uTmFtZXNbbG9jYXRpb25dIHx8IGxvY2F0aW9uO1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIkludmFsaWQgXCIuY29uY2F0KGxvY2F0aW9uTmFtZSwgXCIgYFwiKS5jb25jYXQocHJvcEZ1bGxOYW1lLCBcImAgb2YgdHlwZSBgXCIpLmNvbmNhdCgoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKHByb3BWYWx1ZSksIFwiYCBzdXBwbGllZCB0byBgXCIpLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAsIGV4cGVjdGVkIGBvYmplY3RgLlwiKSk7XG59XG5cbm9iamVjdC5pc1JlcXVpcmVkID0gZnVuY3Rpb24gb2JqZWN0UmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgdmFyIGxvY2F0aW9uTmFtZSA9IFJlYWN0UHJvcFR5cGVMb2NhdGlvbk5hbWVzW2xvY2F0aW9uXSB8fCBsb2NhdGlvbjtcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQobG9jYXRpb25OYW1lLCBcIiBgXCIpLmNvbmNhdChwcm9wRnVsbE5hbWUsIFwiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHByb3BWYWx1ZSwgXCJgLlwiKSk7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNSA/IF9sZW4gLSA1IDogMCksIF9rZXkgPSA1OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gb2JqZWN0LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZV0uY29uY2F0KHJlc3QpKTtcbn07XG5cbnZhciBfZGVmYXVsdCA9IGZ1bmN0aW9uIF9kZWZhdWx0KCkge1xuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkob2JqZWN0LCAnb2JqZWN0Jyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JqZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBvcjtcblxudmFyIF9wcm9wVHlwZXMgPSByZXF1aXJlKFwicHJvcC10eXBlc1wiKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KGFycikgeyByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkoaXRlcikgeyBpZiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGl0ZXIpKSByZXR1cm4gQXJyYXkuZnJvbShpdGVyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykge1xuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gb25lT2ZUeXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4gPiAzID8gX2xlbiAtIDMgOiAwKSwgX2tleSA9IDM7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIHJlc3RbX2tleSAtIDNdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBlcnJvcnMgPSB2YWxpZGF0b3JzLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgcmV0dXJuIHYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuICAgIH0pLmZpbHRlcihCb29sZWFuKTtcblxuICAgIGlmIChlcnJvcnMubGVuZ3RoIDwgdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIHN1cHBsaWVkIHRvIFwiKS5jb25jYXQocHJvcE5hbWUsIFwiLlwiKSk7XG4gIH07XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBvbmVPZlR5cGVSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAzID8gX2xlbjIgLSAzIDogMCksIF9rZXkyID0gMzsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgcmVzdFtfa2V5MiAtIDNdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogbWlzc2luZyB2YWx1ZSBmb3IgcmVxdWlyZWQgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCIuXCIpKTtcbiAgICB9XG5cbiAgICB2YXIgZXJyb3JzID0gdmFsaWRhdG9ycy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgIHJldHVybiB2LmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgICB9KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gdmFsaWRhdG9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBpbnZhbGlkIHZhbHVlIFwiKS5jb25jYXQoZXJyb3JzLCBcIiBzdXBwbGllZCB0byByZXF1aXJlZCBcIikuY29uY2F0KHByb3BOYW1lLCBcIi5cIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsICdvbmVPZlR5cGUnLCB2YWxpZGF0b3JzKTtcbn1cblxuZnVuY3Rpb24gb3IodmFsaWRhdG9ycykge1xuICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogJ29yJztcblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsaWRhdG9ycykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICBpZiAodmFsaWRhdG9ycy5sZW5ndGggPD0gMSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvcjogMiBvciBtb3JlIHZhbGlkYXRvcnMgYXJlIHJlcXVpcmVkJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gb25lT2ZUeXBlVmFsaWRhdG9yKFsoMCwgX3Byb3BUeXBlcy5hcnJheU9mKShvbmVPZlR5cGVWYWxpZGF0b3IodmFsaWRhdG9ycykpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KHZhbGlkYXRvcnMpKSk7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIG5hbWUsIHZhbGlkYXRvcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHByZWRpY2F0ZTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gcHJlZGljYXRlKGZuKSB7XG4gIHZhciBtZXNzYWdlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJztcblxuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGZuYCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgbWVzc2FnZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgbWVzc2FnZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgc3RyaW5nJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZXF1aXJlZFZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcmVzdWx0ID0gZm4ocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgIGlmIChyZXN1bHQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiYFwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcImAgcmVxdWlyZXMgdGhhdCBgXCIpLmNvbmNhdChwcm9wTmFtZSwgXCJgIHBhc3MgYSBwcmVkaWNhdGUgZnVuY3Rpb25cIikuY29uY2F0KG1lc3NhZ2UgPyBcIjogXCIuY29uY2F0KG1lc3NhZ2UpIDogJycsIFwiLlwiKSk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWxpZGF0b3IocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWlyZWRWYWxpZGF0b3IuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9XG5cbiAgdmFsaWRhdG9yLmlzUmVxdWlyZWQgPSByZXF1aXJlZFZhbGlkYXRvcjtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ByZWRpY2F0ZScsIGZuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXByZWRpY2F0ZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gcmFuZ2U7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX2ludGVnZXIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2ludGVnZXJcIikpO1xuXG52YXIgX2lzSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc0ludGVnZXJcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSIHx8XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuTWF0aC5wb3coMiwgNTMpIC0gMTtcblxuZnVuY3Rpb24gaXNWYWxpZExlbmd0aCh4KSB7XG4gIHJldHVybiAoMCwgX2lzSW50ZWdlcltcImRlZmF1bHRcIl0pKHgpICYmIE1hdGguYWJzKHgpIDwgTUFYX1NBRkVfSU5URUdFUjtcbn1cblxuZnVuY3Rpb24gcmFuZ2UobWluLCBtYXgpIHtcbiAgaWYgKCFpc1ZhbGlkTGVuZ3RoKG1pbikgfHwgIWlzVmFsaWRMZW5ndGgobWF4KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFwiXFxcInJhbmdlXFxcIiByZXF1aXJlcyB0d28gaW50ZWdlcnM6IFwiLmNvbmNhdChtaW4sIFwiIGFuZCBcIikuY29uY2F0KG1heCwgXCIgZ2l2ZW5cIikpO1xuICB9XG5cbiAgaWYgKG1pbiA9PT0gbWF4KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ21pbiBhbmQgbWF4IG11c3Qgbm90IGJlIHRoZSBzYW1lJyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbKDAsIF9pbnRlZ2VyW1wiZGVmYXVsdFwiXSkoKSwgKDAsIF9iZXR3ZWVuW1wiZGVmYXVsdFwiXSkoe1xuICAgIGd0ZTogbWluLFxuICAgIGx0OiBtYXhcbiAgfSldLCAncmFuZ2UnKSwgJ3JhbmdlJywge1xuICAgIG1pbjogbWluLFxuICAgIG1heDogbWF4XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmFuZ2UuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKTtcblxudmFyIF9pc1BsYWluT2JqZWN0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL2lzUGxhaW5PYmplY3RcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgaXNQcm90b3R5cGVPZiA9IE9iamVjdC5wcm90b3R5cGUuaXNQcm90b3R5cGVPZjtcblxuZnVuY3Rpb24gaXNOZXdSZWYocHJvcCkge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHByb3ApKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIG93blByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhwcm9wKTtcbiAgcmV0dXJuIG93blByb3BlcnRpZXMubGVuZ3RoID09PSAxICYmIG93blByb3BlcnRpZXNbMF0gPT09ICdjdXJyZW50Jztcbn1cblxuZnVuY3Rpb24gaXNDYWxsYmFja1JlZihwcm9wKSB7XG4gIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNQcm90b3R5cGVPZi5jYWxsKF9yZWFjdC5Db21wb25lbnQsIHByb3ApICYmICghX3JlYWN0LlB1cmVDb21wb25lbnQgfHwgIWlzUHJvdG90eXBlT2YuY2FsbChfcmVhY3QuUHVyZUNvbXBvbmVudCwgcHJvcCkpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlZFJlZihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICBpZiAoaXNDYWxsYmFja1JlZihwcm9wVmFsdWUpIHx8IGlzTmV3UmVmKHByb3BWYWx1ZSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KHByb3BOYW1lLCBcIiBpbiBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiIG11c3QgYmUgYSByZWZcIikpO1xufVxuXG5mdW5jdGlvbiByZWYocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRSZWYuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xufVxuXG5yZWYuaXNSZXF1aXJlZCA9IHJlcXVpcmVkUmVmO1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlZiwgJ3JlZicpO1xufTtcblxuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBfZGVmYXVsdDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gZ2V0UmVxdWlyZWRCeTtcblxudmFyIF9vYmplY3RJcyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIm9iamVjdC1pc1wiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIGdldFJlcXVpcmVkQnkocmVxdWlyZWRCeVByb3BOYW1lLCBwcm9wVHlwZSkge1xuICB2YXIgZGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBudWxsO1xuXG4gIGZ1bmN0aW9uIHJlcXVpcmVkQnkocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgaWYgKHByb3BzW3JlcXVpcmVkQnlQcm9wTmFtZV0pIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICAgIGlmICgoMCwgX29iamVjdElzW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlLCBkZWZhdWx0VmFsdWUpIHx8IHR5cGVvZiBwcm9wVmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB3aGVuIFwiKS5jb25jYXQocmVxdWlyZWRCeVByb3BOYW1lLCBcIiBpcyB0cnVlLCBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfVxuXG4gIHJlcXVpcmVkQnkuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkQnlSZXF1aXJlZChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0SXNbXCJkZWZhdWx0XCJdKShwcm9wVmFsdWUsIGRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBwcm9wIFxcdTIwMUNcIikuY29uY2F0KHByb3BOYW1lLCBcIlxcdTIwMUQgbXVzdCBiZSBwcmVzZW50LlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BUeXBlLmlzUmVxdWlyZWQuYXBwbHkocHJvcFR5cGUsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHJlcXVpcmVkQnksIFwicmVxdWlyZWRCeSBcXHUyMDFDXCIuY29uY2F0KHJlcXVpcmVkQnlQcm9wTmFtZSwgXCJcXHUyMDFEXCIpLCBbcmVxdWlyZWRCeVByb3BOYW1lLCBkZWZhdWx0VmFsdWVdKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcXVpcmVkQnkuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHZvaWQgMDtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gY3VzdG9tTWVzc2FnZVdyYXBwZXIobWVzc3NhZ2VGdW5jdGlvbikge1xuICBmdW5jdGlvbiByZXN0cmljdGVkUHJvcChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uKSB7XG4gICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAobWVzc3NhZ2VGdW5jdGlvbiAmJiB0eXBlb2YgbWVzc3NhZ2VGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDQgPyBfbGVuIC0gNCA6IDApLCBfa2V5ID0gNDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IobWVzc3NhZ2VGdW5jdGlvbi5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIlRoZSBcIi5jb25jYXQocHJvcE5hbWUsIFwiIFwiKS5jb25jYXQobG9jYXRpb24sIFwiIG9uIFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCIgaXMgbm90IGFsbG93ZWQuXCIpKTtcbiAgfVxuXG4gIHJlc3RyaWN0ZWRQcm9wLmlzUmVxdWlyZWQgPSByZXN0cmljdGVkUHJvcDtcbiAgcmV0dXJuIHJlc3RyaWN0ZWRQcm9wO1xufVxuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgdmFyIG1lc3NzYWdlRnVuY3Rpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IG51bGw7XG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKShjdXN0b21NZXNzYWdlV3JhcHBlcihtZXNzc2FnZUZ1bmN0aW9uKSwgJ3Jlc3RyaWN0ZWRQcm9wJyk7XG59O1xuXG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IF9kZWZhdWx0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVzdHJpY3RlZFByb3AuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHNlcXVlbmNlT2ZWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX2JldHdlZW4gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2JldHdlZW5cIikpO1xuXG52YXIgX25vbk5lZ2F0aXZlSW50ZWdlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbm9uTmVnYXRpdmVJbnRlZ2VyXCIpKTtcblxudmFyIF9vYmplY3QgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL29iamVjdFwiKSk7XG5cbnZhciBfd2l0aFNoYXBlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi93aXRoU2hhcGVcIikpO1xuXG52YXIgX3R5cGVPZiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy90eXBlT2ZcIikpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIG1pblZhbGlkYXRvciA9IF9ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdO1xudmFyIG1heFZhbGlkYXRvciA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW19ub25OZWdhdGl2ZUludGVnZXJbXCJkZWZhdWx0XCJdLCAoMCwgX2JldHdlZW5bXCJkZWZhdWx0XCJdKSh7XG4gIGd0ZTogMVxufSldKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVSYW5nZShtaW4sIG1heCkge1xuICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1pbiAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbnVsbDsgLy8gbm8gYWRkaXRpb25hbCBjaGVja2luZyBuZWVkZWQgdW5sZXNzIGJvdGggYXJlIHByZXNlbnRcbiAgfVxuXG4gIGlmIChtaW4gPD0gbWF4KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBtYXgnKTtcbn1cblxudmFyIHNwZWNpZmllclNoYXBlID0ge1xuICB2YWxpZGF0b3I6IGZ1bmN0aW9uIHZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHR5cGVvZiBwcm9wVmFsdWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKCdcInZhbGlkYXRvclwiIG11c3QgYmUgYSBwcm9wVHlwZSB2YWxpZGF0b3IgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgbWluOiBmdW5jdGlvbiBtaW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgcmV0dXJuIG1pblZhbGlkYXRvcihwcm9wcywgcHJvcE5hbWUpIHx8IHZhbGlkYXRlUmFuZ2UocHJvcHMubWluLCBwcm9wcy5tYXgpO1xuICB9LFxuICBtYXg6IGZ1bmN0aW9uIG1heChwcm9wcywgcHJvcE5hbWUpIHtcbiAgICByZXR1cm4gbWF4VmFsaWRhdG9yKHByb3BzLCBwcm9wTmFtZSkgfHwgdmFsaWRhdGVSYW5nZShwcm9wcy5taW4sIHByb3BzLm1heCk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldE1pbk1heChfcmVmKSB7XG4gIHZhciBtaW4gPSBfcmVmLm1pbixcbiAgICAgIG1heCA9IF9yZWYubWF4O1xuICB2YXIgbWluaW11bTtcbiAgdmFyIG1heGltdW07XG5cbiAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInICYmIHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgLy8gbmVpdGhlciBwcm92aWRlZCwgZGVmYXVsdCB0byBcIjFcIlxuICAgIG1pbmltdW0gPSAxO1xuICAgIG1heGltdW0gPSAxO1xuICB9IGVsc2Uge1xuICAgIG1pbmltdW0gPSB0eXBlb2YgbWluID09PSAnbnVtYmVyJyA/IG1pbiA6IDE7XG4gICAgbWF4aW11bSA9IHR5cGVvZiBtYXggPT09ICdudW1iZXInID8gbWF4IDogSW5maW5pdHk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1pbmltdW06IG1pbmltdW0sXG4gICAgbWF4aW11bTogbWF4aW11bVxuICB9O1xufVxuXG5mdW5jdGlvbiBjaHVua0J5VHlwZShpdGVtcykge1xuICB2YXIgY2h1bmsgPSBbXTtcbiAgdmFyIGxhc3RUeXBlO1xuICByZXR1cm4gaXRlbXMucmVkdWNlKGZ1bmN0aW9uIChjaHVua3MsIGl0ZW0pIHtcbiAgICB2YXIgaXRlbVR5cGUgPSAoMCwgX3R5cGVPZltcImRlZmF1bHRcIl0pKGl0ZW0pO1xuXG4gICAgaWYgKCFsYXN0VHlwZSB8fCBpdGVtVHlwZSA9PT0gbGFzdFR5cGUpIHtcbiAgICAgIGNodW5rLnB1c2goaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgIGNodW5rID0gW2l0ZW1dO1xuICAgIH1cblxuICAgIGxhc3RUeXBlID0gaXRlbVR5cGU7XG4gICAgcmV0dXJuIGNodW5rcztcbiAgfSwgW10pLmNvbmNhdChjaHVuay5sZW5ndGggPiAwID8gW2NodW5rXSA6IFtdKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDaHVua3Moc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBpdGVtcyA9IHByb3BzW3Byb3BOYW1lXTtcbiAgdmFyIGNodW5rcyA9IGNodW5rQnlUeXBlKGl0ZW1zKTtcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gNF0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHNwZWNpZmllcnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICB2YXIgX3NwZWNpZmllcnMkaSA9IHNwZWNpZmllcnNbaV0sXG4gICAgICAgIHZhbGlkYXRvciA9IF9zcGVjaWZpZXJzJGkudmFsaWRhdG9yLFxuICAgICAgICBtaW4gPSBfc3BlY2lmaWVycyRpLm1pbixcbiAgICAgICAgbWF4ID0gX3NwZWNpZmllcnMkaS5tYXg7XG5cbiAgICB2YXIgX2dldE1pbk1heCA9IGdldE1pbk1heCh7XG4gICAgICBtaW46IG1pbixcbiAgICAgIG1heDogbWF4XG4gICAgfSksXG4gICAgICAgIG1pbmltdW0gPSBfZ2V0TWluTWF4Lm1pbmltdW0sXG4gICAgICAgIG1heGltdW0gPSBfZ2V0TWluTWF4Lm1heGltdW07XG5cbiAgICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCAmJiBtaW5pbXVtID09PSAwKSB7XG4gICAgICAvLyBubyBjaHVua3MgbGVmdCwgYnV0IHRoaXMgc3BlY2lmaWVyIGRvZXMgbm90IHJlcXVpcmUgYW55IGl0ZW1zXG4gICAgICBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250aW51ZVxuICAgIH1cblxuICAgIHZhciBhcnJheU9mVmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodmFsaWRhdG9yKS5pc1JlcXVpcmVkO1xuICAgIHZhciBjaHVuayA9IGNodW5rcy5zaGlmdCgpOyAvLyBleHRyYWN0IHRoZSBuZXh0IGNodW5rIHRvIHRlc3RcblxuICAgIHZhciBjaHVua0Vycm9yID0gYXJyYXlPZlZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHByb3BzKSwge30sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgcHJvcE5hbWUsIGNodW5rKSksIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGNodW5rRXJyb3IpIHtcbiAgICAgIC8vIHRoaXMgY2h1bmsgaXMgaW52YWxpZFxuICAgICAgaWYgKG1pbmltdW0gPT09IDApIHtcbiAgICAgICAgLy8gYnV0LCBzcGVjaWZpZXIgaGFzIGEgbWluIG9mIDAgYW5kIGNhbiBiZSBza2lwcGVkXG4gICAgICAgIGNodW5rcy51bnNoaWZ0KGNodW5rKTsgLy8gcHV0IHRoZSBjaHVuayBiYWNrLCBmb3IgdGhlIG5leHQgaXRlcmF0aW9uXG5cbiAgICAgICAgY29udGludWU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udGludWVcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNodW5rRXJyb3I7XG4gICAgfSAvLyBjaHVuayBpcyB2YWxpZCFcblxuXG4gICAgaWYgKGNodW5rLmxlbmd0aCA8IG1pbmltdW0pIHtcbiAgICAgIHJldHVybiBuZXcgUmFuZ2VFcnJvcihcIlwiLmNvbmNhdChjb21wb25lbnROYW1lLCBcIjogc3BlY2lmaWVyIGluZGV4IFwiKS5jb25jYXQoaSwgXCIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIFwiKS5jb25jYXQobWluLCBcIiBpdGVtcywgYnV0IG9ubHkgaGFzIFwiKS5jb25jYXQoY2h1bmsubGVuZ3RoLCBcIi5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaHVuay5sZW5ndGggPiBtYXhpbXVtKSB7XG4gICAgICByZXR1cm4gbmV3IFJhbmdlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IHNwZWNpZmllciBpbmRleCBcIikuY29uY2F0KGksIFwiIHJlcXVpcmVzIGEgbWF4aW11bSBvZiBcIikuY29uY2F0KG1heCwgXCIgaXRlbXMsIGJ1dCBoYXMgXCIpLmNvbmNhdChjaHVuay5sZW5ndGgsIFwiLlwiKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNodW5rcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IGFmdGVyIGFsbCBcIikuY29uY2F0KHNwZWNpZmllcnMubGVuZ3RoLCBcIiBzcGVjaWZpZXJzIG1hdGNoZWQsIFwiKS5jb25jYXQoY2h1bmtzLmxlbmd0aCwgXCIgdHlwZXMgb2YgaXRlbXMgd2VyZSByZW1haW5pbmcuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgc3BlY2lmaWVyVmFsaWRhdG9yID0gKDAsIF93aXRoU2hhcGVbXCJkZWZhdWx0XCJdKSgoMCwgX29iamVjdFtcImRlZmF1bHRcIl0pKCksIHNwZWNpZmllclNoYXBlKS5pc1JlcXVpcmVkO1xuXG5mdW5jdGlvbiBzZXF1ZW5jZU9mVmFsaWRhdG9yKCkge1xuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHNwZWNpZmllcnMgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICBzcGVjaWZpZXJzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICBpZiAoc3BlY2lmaWVycy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc2VxdWVuY2VPZjogYXQgbGVhc3Qgb25lIHNwZWNpZmllciBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIGVycm9ycyA9IHNwZWNpZmllcnMubWFwKGZ1bmN0aW9uIChzcGVjaWZpZXIsIGkpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyVmFsaWRhdG9yKHtcbiAgICAgIHNwZWNpZmllcjogc3BlY2lmaWVyXG4gICAgfSwgJ3NwZWNpZmllcicsICdzZXF1ZW5jZU9mIHNwZWNpZmllcicsIFwic3VlcXVlbmNlT2Ygc3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSksIFwic3BlY2lmaWVyLCBpbmRleCBcIi5jb25jYXQoaSkpO1xuICB9KTtcblxuICBpZiAoZXJyb3JzLnNvbWUoQm9vbGVhbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiXFxuICAgICAgc2VxdWVuY2VPZjogYWxsIHNwZWNpZmllcnMgbXVzdCBtYXRjaCB0aGUgYXBwcm9wcmlhdGUgc2hhcGUuXFxuXFxuICAgICAgRXJyb3JzOlxcbiAgICAgICAgXCIuY29uY2F0KGVycm9ycy5tYXAoZnVuY3Rpb24gKGUsIGkpIHtcbiAgICAgIHJldHVybiBcIiAtIEFyZ3VtZW50IGluZGV4IFwiLmNvbmNhdChpLCBcIjogXCIpLmNvbmNhdChlLm1lc3NhZ2UpO1xuICAgIH0pLmpvaW4oJyxcXG4gICAgICAgICcpLCBcIlxcbiAgICBcIikpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHNlcXVlbmNlT2YocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4zID4gMiA/IF9sZW4zIC0gMiA6IDApLCBfa2V5MyA9IDI7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgIHJlc3RbX2tleTMgLSAyXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gX3Byb3BUeXBlcy5hcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdGVDaHVua3MuYXBwbHkodm9pZCAwLCBbc3BlY2lmaWVycywgcHJvcHMsIHByb3BOYW1lXS5jb25jYXQocmVzdCkpO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gc2VxdWVuY2VPZlJlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuNCA+IDMgPyBfbGVuNCAtIDMgOiAwKSwgX2tleTQgPSAzOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICByZXN0W19rZXk0IC0gM10gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHZhciBlcnJvciA9IF9wcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLmFycmF5LCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKGVycm9yKSB7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlQ2h1bmtzLmFwcGx5KHZvaWQgMCwgW3NwZWNpZmllcnMsIHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCAnc2VxdWVuY2VPZicsIHNwZWNpZmllcnMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VPZi5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gc2hhcGVWYWxpZGF0b3I7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1BsYWluT2JqZWN0XCIpKTtcblxudmFyIF93cmFwVmFsaWRhdG9yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9oZWxwZXJzL3dyYXBWYWxpZGF0b3JcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuZnVuY3Rpb24gc2hhcGVWYWxpZGF0b3Ioc2hhcGVUeXBlcykge1xuICBpZiAoISgwLCBfaXNQbGFpbk9iamVjdFtcImRlZmF1bHRcIl0pKHNoYXBlVHlwZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2hhcGUgbXVzdCBiZSBhIG5vcm1hbCBvYmplY3QnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNoYXBlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24pIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGNvZGUgYWRhcHRlZCBmcm9tIFByb3BUeXBlcy5zaGFwZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvMTQxNTZlNTZiOWNmMThhYzg2OTYzMTg1YzVhZjRhYmRkZjNmZjgxMS9zcmMvaXNvbW9ycGhpYy9jbGFzc2ljL3R5cGVzL1JlYWN0UHJvcFR5cGVzLmpzI0wzODFcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gNCA/IF9sZW4gLSA0IDogMCksIF9rZXkgPSA0OyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSA0XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gc2hhcGVUeXBlcykge1xuICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG5cbiAgICAgIGlmIChjaGVja2VyKSB7XG4gICAgICAgIHZhciBlcnJvciA9IGNoZWNrZXIuYXBwbHkodm9pZCAwLCBbcHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uXS5jb25jYXQocmVzdCkpO1xuXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgc2hhcGUuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHNoYXBlUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNoYXBlLmFwcGx5KHZvaWQgMCwgW3Byb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZV0uY29uY2F0KHJlc3QpKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkoc2hhcGUsICdzaGFwZScsIHNoYXBlVHlwZXMpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcGUuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHN0cmluZ0VuZHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdFbmRzV2l0aFZhbGlkYXRvcihlbmQpIHtcbiAgaWYgKHR5cGVvZiBlbmQgIT09ICdzdHJpbmcnIHx8IGVuZC5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhIG5vbi1lbXB0eSBzdHJpbmcgaXMgcmVxdWlyZWQnKTtcbiAgfVxuXG4gIHZhciB2YWxpZGF0b3IgPSBmdW5jdGlvbiBzdHJpbmdFbmRzV2l0aChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gICAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICByZXN0W19rZXkgLSAzXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nRXJyb3IgPSBfcHJvcFR5cGVzLnN0cmluZy5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICBpZiAoIXByb3BWYWx1ZS5lbmRzV2l0aChlbmQpIHx8IHByb3BWYWx1ZS5sZW5ndGggPD0gZW5kLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGRvZXMgbm90IGVuZCB3aXRoIFxcXCJcIikuY29uY2F0KGVuZCwgXCJcXFwiXCIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHJlcXVpcmVkU3RyaW5nRW5kc1dpdGgoKSB7XG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZC5hcHBseShfcHJvcFR5cGVzLnN0cmluZywgYXJndW1lbnRzKTtcblxuICAgIGlmIChzdHJpbmdFcnJvcikge1xuICAgICAgcmV0dXJuIHN0cmluZ0Vycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IuYXBwbHkodm9pZCAwLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIHJldHVybiAoMCwgX3dyYXBWYWxpZGF0b3JbXCJkZWZhdWx0XCJdKSh2YWxpZGF0b3IsIFwic3RyaW5nRW5kc1dpdGg6IFwiLmNvbmNhdChlbmQpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0cmluZ0VuZHNXaXRoLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdTdGFydHNXaXRoVmFsaWRhdG9yKHN0YXJ0KSB7XG4gIGlmICh0eXBlb2Ygc3RhcnQgIT09ICdzdHJpbmcnIHx8IHN0YXJ0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2Egbm9uLWVtcHR5IHN0cmluZyBpcyByZXF1aXJlZCcpO1xuICB9XG5cbiAgdmFyIHZhbGlkYXRvciA9IGZ1bmN0aW9uIHN0cmluZ1N0YXJ0c1dpdGgocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDMgPyBfbGVuIC0gMyA6IDApLCBfa2V5ID0gMzsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHN0cmluZ0Vycm9yID0gX3Byb3BUeXBlcy5zdHJpbmcuYXBwbHkodm9pZCAwLCBbcHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lXS5jb25jYXQocmVzdCkpO1xuXG4gICAgaWYgKHN0cmluZ0Vycm9yKSB7XG4gICAgICByZXR1cm4gc3RyaW5nRXJyb3I7XG4gICAgfVxuXG4gICAgaWYgKCFwcm9wVmFsdWUuc3RhcnRzV2l0aChzdGFydCkgfHwgcHJvcFZhbHVlLmxlbmd0aCA8PSBzdGFydC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiBcIikuY29uY2F0KHByb3BOYW1lLCBcIiBkb2VzIG5vdCBzdGFydCB3aXRoIFxcXCJcIikuY29uY2F0KHN0YXJ0LCBcIlxcXCJcIikpO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIHZhbGlkYXRvci5pc1JlcXVpcmVkID0gZnVuY3Rpb24gcmVxdWlyZWRTdHJpbmdTdGFydHNXaXRoKCkge1xuICAgIHZhciBzdHJpbmdFcnJvciA9IF9wcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5zdHJpbmcsIGFyZ3VtZW50cyk7XG5cbiAgICBpZiAoc3RyaW5nRXJyb3IpIHtcbiAgICAgIHJldHVybiBzdHJpbmdFcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yLmFwcGx5KHZvaWQgMCwgYXJndW1lbnRzKTtcbiAgfTtcblxuICByZXR1cm4gKDAsIF93cmFwVmFsaWRhdG9yW1wiZGVmYXVsdFwiXSkodmFsaWRhdG9yLCBcInN0cmluZ1N0YXJ0c1dpdGg6IFwiLmNvbmNhdChzdGFydCkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RyaW5nU3RhcnRzV2l0aC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdm9pZCAwO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpO1xuXG52YXIgX3dyYXBWYWxpZGF0b3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2hlbHBlcnMvd3JhcFZhbGlkYXRvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiB1bmlxdWVDb3VudFdpdGhTZXQoYXJyKSB7XG4gIHJldHVybiBuZXcgU2V0KGFycikuc2l6ZTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuZnVuY3Rpb24gdW5pcXVlQ291bnRMZWdhY3koYXJyKSB7XG4gIHZhciBzZWVuID0gW107XG4gIGFyci5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgaWYgKHNlZW4uaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIHNlZW4ucHVzaChpdGVtKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2Vlbi5sZW5ndGg7XG59XG5cbnZhciBnZXRVbmlxdWVDb3VudCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgPyB1bmlxdWVDb3VudFdpdGhTZXQgOlxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbnVuaXF1ZUNvdW50TGVnYWN5O1xuXG5mdW5jdGlvbiByZXF1aXJlZFVuaXF1ZUFycmF5KHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMyA/IF9sZW4gLSAzIDogMCksIF9rZXkgPSAzOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gM10gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gX3Byb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLmFwcGx5KF9wcm9wVHlwZXMuYXJyYXksIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG5cbiAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gIHZhciB1bmlxdWVDb3VudCA9IGdldFVuaXF1ZUNvdW50KHByb3BWYWx1ZSk7XG5cbiAgaWYgKHVuaXF1ZUNvdW50ICE9PSBwcm9wVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZUVycm9yKFwiXCIuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiOiB2YWx1ZXMgbXVzdCBiZSB1bmlxdWUuIFwiKS5jb25jYXQocHJvcFZhbHVlLmxlbmd0aCAtIHVuaXF1ZUNvdW50LCBcIiBkdXBsaWNhdGUgdmFsdWVzIGZvdW5kLlwiKSk7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gdW5pcXVlQXJyYXkocHJvcHMsIHByb3BOYW1lKSB7XG4gIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKHByb3BWYWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbjIgPiAyID8gX2xlbjIgLSAyIDogMCksIF9rZXkyID0gMjsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgIHJlc3RbX2tleTIgLSAyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gIH1cblxuICByZXR1cm4gcmVxdWlyZWRVbmlxdWVBcnJheS5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChyZXN0KSk7XG59XG5cbnVuaXF1ZUFycmF5LmlzUmVxdWlyZWQgPSByZXF1aXJlZFVuaXF1ZUFycmF5O1xuXG52YXIgX2RlZmF1bHQgPSBmdW5jdGlvbiBfZGVmYXVsdCgpIHtcbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHVuaXF1ZUFycmF5LCAndW5pcXVlQXJyYXknKTtcbn07XG5cbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gX2RlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gdW5pcXVlQXJyYXlPZlR5cGVWYWxpZGF0b3I7XG5cbnZhciBfcHJvcFR5cGVzID0gcmVxdWlyZShcInByb3AtdHlwZXNcIik7XG5cbnZhciBfYW5kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9hbmRcIikpO1xuXG52YXIgX3VuaXF1ZUFycmF5ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi91bmlxdWVBcnJheVwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIHVuaXF1ZSA9ICgwLCBfdW5pcXVlQXJyYXlbXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiB1bmlxdWVBcnJheU9mVHlwZVZhbGlkYXRvcih0eXBlKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkYXRvciBmdW5jdGlvbicpO1xuICB9XG5cbiAgdmFyIG1hcHBlciA9IG51bGw7XG4gIHZhciBuYW1lID0gJ3VuaXF1ZUFycmF5T2ZUeXBlJztcblxuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgcmVzdCA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgcmVzdFtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICBpZiAocmVzdC5sZW5ndGggPT09IDEpIHtcbiAgICBpZiAodHlwZW9mIHJlc3RbMF0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1hcHBlciA9IHJlc3RbMF07XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdFswXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5hbWUgPSByZXN0WzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzaW5nbGUgaW5wdXQgbXVzdCBlaXRoZXIgYmUgc3RyaW5nIG9yIGZ1bmN0aW9uJyk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHJlc3QubGVuZ3RoID09PSAyKSB7XG4gICAgaWYgKHR5cGVvZiByZXN0WzBdID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiByZXN0WzFdID09PSAnc3RyaW5nJykge1xuICAgICAgbWFwcGVyID0gcmVzdFswXTtcbiAgICAgIG5hbWUgPSByZXN0WzFdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdWx0aXBsZSBpbnB1dHMgbXVzdCBiZSBpbiBbZnVuY3Rpb24sIHN0cmluZ10gb3JkZXInKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVzdC5sZW5ndGggPiAyKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb25seSBbXSwgW25hbWVdLCBbbWFwcGVyXSwgYW5kIFttYXBwZXIsIG5hbWVdIGFyZSB2YWxpZCBpbnB1dHMnKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuaXF1ZUFycmF5T2ZNYXBwZWQocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IHByb3BWYWx1ZS5tYXAobWFwcGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDIgPyBfbGVuMiAtIDIgOiAwKSwgX2tleTIgPSAyOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMl0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWUuYXBwbHkodm9pZCAwLCBbX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCBfZGVmaW5lUHJvcGVydHkoe30sIHByb3BOYW1lLCB2YWx1ZXMpKSwgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH1cblxuICB1bmlxdWVBcnJheU9mTWFwcGVkLmlzUmVxdWlyZWQgPSBmdW5jdGlvbiBpc1JlcXVpcmVkKHByb3BzLCBwcm9wTmFtZSkge1xuICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMgPiAyID8gX2xlbjMgLSAyIDogMCksIF9rZXkzID0gMjsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5MyAtIDJdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICB9XG5cbiAgICBpZiAocHJvcFZhbHVlID09IG51bGwpIHtcbiAgICAgIHJldHVybiBfcHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQuYXBwbHkoX3Byb3BUeXBlcy5hcnJheSwgW3Byb3BzLCBwcm9wTmFtZV0uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlQXJyYXlPZk1hcHBlZC5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWVdLmNvbmNhdChhcmdzKSk7XG4gIH07XG5cbiAgdmFyIGFycmF5VmFsaWRhdG9yID0gKDAsIF9wcm9wVHlwZXMuYXJyYXlPZikodHlwZSk7XG4gIHZhciB1bmlxdWVWYWxpZGF0b3IgPSBtYXBwZXIgPyB1bmlxdWVBcnJheU9mTWFwcGVkIDogdW5pcXVlO1xuICB2YXIgdmFsaWRhdG9yID0gKDAsIF9hbmRbXCJkZWZhdWx0XCJdKShbYXJyYXlWYWxpZGF0b3IsIHVuaXF1ZVZhbGlkYXRvcl0sIG5hbWUpO1xuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9ICgwLCBfYW5kW1wiZGVmYXVsdFwiXSkoW3VuaXF1ZVZhbGlkYXRvci5pc1JlcXVpcmVkLCBhcnJheVZhbGlkYXRvci5pc1JlcXVpcmVkXSwgXCJcIi5jb25jYXQobmFtZSwgXCIuaXNSZXF1aXJlZFwiKSk7XG4gIHJldHVybiB2YWxpZGF0b3I7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11bmlxdWVBcnJheU9mLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSB2YWx1ZXNPZlZhbGlkYXRvcjtcblxudmFyIF9pc1ByaW1pdGl2ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy9pc1ByaW1pdGl2ZVwiKSk7XG5cbnZhciBfd3JhcFZhbGlkYXRvciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vaGVscGVycy93cmFwVmFsaWRhdG9yXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIGNvZGUgYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9ibG9iLzE0MTU2ZTU2YjljZjE4YWM4Njk2MzE4NWM1YWY0YWJkZGYzZmY4MTEvc3JjL2lzb21vcnBoaWMvY2xhc3NpYy90eXBlcy9SZWFjdFByb3BUeXBlcy5qcyNMMzA3LUwzNDBcbmZ1bmN0aW9uIHZhbHVlc09mVmFsaWRhdG9yKHByb3BUeXBlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFR5cGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvYmplY3RPZjogcHJvcFR5cGUgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XG4gIH1cblxuICB2YXIgdmFsaWRhdG9yID0gZnVuY3Rpb24gdmFsdWVzT2YocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIHJlc3QgPSBuZXcgQXJyYXkoX2xlbiA+IDUgPyBfbGVuIC0gNSA6IDApLCBfa2V5ID0gNTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgcmVzdFtfa2V5IC0gNV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCB8fCAoMCwgX2lzUHJpbWl0aXZlW1wiZGVmYXVsdFwiXSkocHJvcFZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0RXJyb3I7XG4gICAgT2JqZWN0LmtleXMocHJvcFZhbHVlKS5zb21lKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGZpcnN0RXJyb3IgPSBwcm9wVHlwZS5hcHBseSh2b2lkIDAsIFtwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIFwiXCIuY29uY2F0KHByb3BGdWxsTmFtZSwgXCIuXCIpLmNvbmNhdChrZXkpXS5jb25jYXQocmVzdCkpO1xuICAgICAgcmV0dXJuIGZpcnN0RXJyb3I7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpcnN0RXJyb3IgfHwgbnVsbDtcbiAgfTtcblxuICB2YWxpZGF0b3IuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIHZhbHVlc09mUmVxdWlyZWQocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcblxuICAgIGlmIChwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJcIi5jb25jYXQoY29tcG9uZW50TmFtZSwgXCI6IFwiKS5jb25jYXQocHJvcE5hbWUsIFwiIGlzIHJlcXVpcmVkLlwiKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCByZXN0ID0gbmV3IEFycmF5KF9sZW4yID4gMyA/IF9sZW4yIC0gMyA6IDApLCBfa2V5MiA9IDM7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIHJlc3RbX2tleTIgLSAzXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRvci5hcHBseSh2b2lkIDAsIFtwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWVdLmNvbmNhdChyZXN0KSk7XG4gIH07XG5cbiAgcmV0dXJuICgwLCBfd3JhcFZhbGlkYXRvcltcImRlZmF1bHRcIl0pKHZhbGlkYXRvciwgJ3ZhbHVlc09mJywgcHJvcFR5cGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmFsdWVzT2YuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IHdpdGhTaGFwZTtcblxudmFyIF9hbmQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL2FuZFwiKSk7XG5cbnZhciBfc2hhcGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYXBlXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHdpdGhTaGFwZSh0eXBlLCBzaGFwZVR5cGVzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3R5cGUgbXVzdCBiZSBhIHZhbGlkIFByb3BUeXBlJyk7XG4gIH1cblxuICB2YXIgc2hhcGVWYWxpZGF0b3IgPSAoMCwgX3NoYXBlW1wiZGVmYXVsdFwiXSkoc2hhcGVUeXBlcyk7XG4gIHJldHVybiAoMCwgX2FuZFtcImRlZmF1bHRcIl0pKFt0eXBlLCBzaGFwZVZhbGlkYXRvcl0sICd3aXRoU2hhcGUnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhTaGFwZS5qcy5tYXAiLCJtb2R1bGUuZXhwb3J0cyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicgPyByZXF1aXJlKCcuL2J1aWxkL21vY2tzJykgOiByZXF1aXJlKCcuL2J1aWxkJyk7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRvT2JqZWN0ID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub09iamVjdCcpO1xudmFyIFRvTGVuZ3RoID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9Ub0xlbmd0aCcpO1xudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSkge1xuXHR2YXIgbGlzdCA9IFRvT2JqZWN0KHRoaXMpO1xuXHR2YXIgbGVuZ3RoID0gVG9MZW5ndGgobGlzdC5sZW5ndGgpO1xuXHRpZiAoIUlzQ2FsbGFibGUocHJlZGljYXRlKSkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5I2ZpbmQ6IHByZWRpY2F0ZSBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcblx0fVxuXHRpZiAobGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHZvaWQgMDtcblx0fVxuXHR2YXIgdGhpc0FyZztcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB7XG5cdFx0dGhpc0FyZyA9IGFyZ3VtZW50c1sxXTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAwLCB2YWx1ZTsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0dmFsdWUgPSBsaXN0W2ldO1xuXHRcdC8vIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlOiBpZiAoQ2FsbChwcmVkaWNhdGUsIHRoaXNBcmcsIFt2YWx1ZSwgaSwgbGlzdF0pKSB7XG5cdFx0aWYgKHByZWRpY2F0ZS5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGksIGxpc3RdKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdm9pZCAwO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyIFJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL1JlcXVpcmVPYmplY3RDb2VyY2libGUnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyICRzbGljZSA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnNsaWNlJyk7XG5cbnZhciBwb2x5ZmlsbCA9IGdldFBvbHlmaWxsKCk7XG5cbnZhciBib3VuZEZpbmRTaGltID0gZnVuY3Rpb24gZmluZChhcnJheSwgcHJlZGljYXRlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblx0UmVxdWlyZU9iamVjdENvZXJjaWJsZShhcnJheSk7XG5cdHZhciBhcmdzID0gJHNsaWNlKGFyZ3VtZW50cywgMSk7XG5cdHJldHVybiBwb2x5ZmlsbC5hcHBseShhcnJheSwgYXJncyk7XG59O1xuXG5kZWZpbmUoYm91bmRGaW5kU2hpbSwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRGaW5kU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0Ly8gRGV0ZWN0IGlmIGFuIGltcGxlbWVudGF0aW9uIGV4aXN0c1xuXHQvLyBEZXRlY3QgZWFybHkgaW1wbGVtZW50YXRpb25zIHdoaWNoIHNraXBwZWQgaG9sZXMgaW4gc3BhcnNlIGFycmF5c1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc3BhcnNlLWFycmF5c1xuXHR2YXIgaW1wbGVtZW50ZWQgPSBBcnJheS5wcm90b3R5cGUuZmluZCAmJiBbLCAxXS5maW5kKGZ1bmN0aW9uICgpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSkgIT09IDE7XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG5cdHJldHVybiBpbXBsZW1lbnRlZCA/IEFycmF5LnByb3RvdHlwZS5maW5kIDogcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFycmF5UHJvdG90eXBlRmluZCgpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblxuXHRkZWZpbmUoQXJyYXkucHJvdG90eXBlLCB7IGZpbmQ6IHBvbHlmaWxsIH0sIHtcblx0XHRmaW5kOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbmQgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9zaGltXCIpO1xuXG5yZXF1aXJlKFwicmVnZW5lcmF0b3ItcnVudGltZS9ydW50aW1lXCIpO1xuXG5yZXF1aXJlKFwiY29yZS1qcy9mbi9yZWdleHAvZXNjYXBlXCIpO1xuXG5pZiAoZ2xvYmFsLl9iYWJlbFBvbHlmaWxsKSB7XG4gIHRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7XG59XG5nbG9iYWwuX2JhYmVsUG9seWZpbGwgPSB0cnVlO1xuXG52YXIgREVGSU5FX1BST1BFUlRZID0gXCJkZWZpbmVQcm9wZXJ0eVwiO1xuZnVuY3Rpb24gZGVmaW5lKE8sIGtleSwgdmFsdWUpIHtcbiAgT1trZXldIHx8IE9iamVjdFtERUZJTkVfUFJPUEVSVFldKE8sIGtleSwge1xuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogdmFsdWVcbiAgfSk7XG59XG5cbmRlZmluZShTdHJpbmcucHJvdG90eXBlLCBcInBhZExlZnRcIiwgXCJcIi5wYWRTdGFydCk7XG5kZWZpbmUoU3RyaW5nLnByb3RvdHlwZSwgXCJwYWRSaWdodFwiLCBcIlwiLnBhZEVuZCk7XG5cblwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBbXVtrZXldICYmIGRlZmluZShBcnJheSwga2V5LCBGdW5jdGlvbi5jYWxsLmJpbmQoW11ba2V5XSkpO1xufSk7IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCcuLycpO1xuXG52YXIgJGluZGV4T2YgPSBjYWxsQmluZChHZXRJbnRyaW5zaWMoJ1N0cmluZy5wcm90b3R5cGUuaW5kZXhPZicpKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQm91bmRJbnRyaW5zaWMobmFtZSwgYWxsb3dNaXNzaW5nKSB7XG5cdHZhciBpbnRyaW5zaWMgPSBHZXRJbnRyaW5zaWMobmFtZSwgISFhbGxvd01pc3NpbmcpO1xuXHRpZiAodHlwZW9mIGludHJpbnNpYyA9PT0gJ2Z1bmN0aW9uJyAmJiAkaW5kZXhPZihuYW1lLCAnLnByb3RvdHlwZS4nKSA+IC0xKSB7XG5cdFx0cmV0dXJuIGNhbGxCaW5kKGludHJpbnNpYyk7XG5cdH1cblx0cmV0dXJuIGludHJpbnNpYztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhcHBseSA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseSUnKTtcbnZhciAkY2FsbCA9IEdldEludHJpbnNpYygnJUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsJScpO1xudmFyICRyZWZsZWN0QXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVSZWZsZWN0LmFwcGx5JScsIHRydWUpIHx8IGJpbmQuY2FsbCgkY2FsbCwgJGFwcGx5KTtcblxudmFyICRnT1BEID0gR2V0SW50cmluc2ljKCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnLCB0cnVlKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QuZGVmaW5lUHJvcGVydHklJywgdHJ1ZSk7XG52YXIgJG1heCA9IEdldEludHJpbnNpYygnJU1hdGgubWF4JScpO1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdHRyeSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KHt9LCAnYScsIHsgdmFsdWU6IDEgfSk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBkZWZpbmVQcm9wZXJ0eVxuXHRcdCRkZWZpbmVQcm9wZXJ0eSA9IG51bGw7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZChvcmlnaW5hbEZ1bmN0aW9uKSB7XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0aWYgKCRnT1BEICYmICRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHZhciBkZXNjID0gJGdPUEQoZnVuYywgJ2xlbmd0aCcpO1xuXHRcdGlmIChkZXNjLmNvbmZpZ3VyYWJsZSkge1xuXHRcdFx0Ly8gb3JpZ2luYWwgbGVuZ3RoLCBwbHVzIHRoZSByZWNlaXZlciwgbWludXMgYW55IGFkZGl0aW9uYWwgYXJndW1lbnRzIChhZnRlciB0aGUgcmVjZWl2ZXIpXG5cdFx0XHQkZGVmaW5lUHJvcGVydHkoXG5cdFx0XHRcdGZ1bmMsXG5cdFx0XHRcdCdsZW5ndGgnLFxuXHRcdFx0XHR7IHZhbHVlOiAxICsgJG1heCgwLCBvcmlnaW5hbEZ1bmN0aW9uLmxlbmd0aCAtIChhcmd1bWVudHMubGVuZ3RoIC0gMSkpIH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmdW5jO1xufTtcblxudmFyIGFwcGx5QmluZCA9IGZ1bmN0aW9uIGFwcGx5QmluZCgpIHtcblx0cmV0dXJuICRyZWZsZWN0QXBwbHkoYmluZCwgJGFwcGx5LCBhcmd1bWVudHMpO1xufTtcblxuaWYgKCRkZWZpbmVQcm9wZXJ0eSkge1xuXHQkZGVmaW5lUHJvcGVydHkobW9kdWxlLmV4cG9ydHMsICdhcHBseScsIHsgdmFsdWU6IGFwcGx5QmluZCB9KTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzLmFwcGx5ID0gYXBwbHlCaW5kO1xufVxuIiwiLyoqXG4gKiBjaHJvbWEuanMgLSBKYXZhU2NyaXB0IGxpYnJhcnkgZm9yIGNvbG9yIGNvbnZlcnNpb25zXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTksIEdyZWdvciBBaXNjaFxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OlxuICpcbiAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpc1xuICogbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG4gKlxuICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLFxuICogdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuICogYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uXG4gKlxuICogMy4gVGhlIG5hbWUgR3JlZ29yIEFpc2NoIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHNcbiAqIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLlxuICpcbiAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgXCJBUyBJU1wiXG4gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFXG4gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkVcbiAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEdSRUdPUiBBSVNDSCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULFxuICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsXG4gKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLFxuICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWVxuICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSxcbiAqIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICpcbiAqIGNocm9tYS5qcyBpbmNsdWRlcyBjb2xvcnMgZnJvbSBjb2xvcmJyZXdlcjIub3JnLCB3aGljaCBhcmUgcmVsZWFzZWQgdW5kZXJcbiAqIHRoZSBmb2xsb3dpbmcgbGljZW5zZTpcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMDIgQ3ludGhpYSBCcmV3ZXIsIE1hcmsgSGFycm93ZXIsXG4gKiBhbmQgVGhlIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyxcbiAqIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuXG4gKiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELFxuICogZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWNcbiAqIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKlxuICogTmFtZWQgY29sb3JzIGFyZSB0YWtlbiBmcm9tIFgxMSBDb2xvciBOYW1lcy5cbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtY29sb3IvI3N2Zy1jb2xvclxuICpcbiAqIEBwcmVzZXJ2ZVxuICovXG5cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLmNocm9tYSA9IGZhY3RvcnkoKSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgbGltaXQkMiA9IGZ1bmN0aW9uICh4LCBtaW4sIG1heCkge1xuICAgICAgICBpZiAoIG1pbiA9PT0gdm9pZCAwICkgbWluPTA7XG4gICAgICAgIGlmICggbWF4ID09PSB2b2lkIDAgKSBtYXg9MTtcblxuICAgICAgICByZXR1cm4geCA8IG1pbiA/IG1pbiA6IHggPiBtYXggPyBtYXggOiB4O1xuICAgIH07XG5cbiAgICB2YXIgbGltaXQkMSA9IGxpbWl0JDI7XG5cbiAgICB2YXIgY2xpcF9yZ2IkMyA9IGZ1bmN0aW9uIChyZ2IpIHtcbiAgICAgICAgcmdiLl9jbGlwcGVkID0gZmFsc2U7XG4gICAgICAgIHJnYi5fdW5jbGlwcGVkID0gcmdiLnNsaWNlKDApO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8PTM7IGkrKykge1xuICAgICAgICAgICAgaWYgKGkgPCAzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJnYltpXSA8IDAgfHwgcmdiW2ldID4gMjU1KSB7IHJnYi5fY2xpcHBlZCA9IHRydWU7IH1cbiAgICAgICAgICAgICAgICByZ2JbaV0gPSBsaW1pdCQxKHJnYltpXSwgMCwgMjU1KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJnYltpXSA9IGxpbWl0JDEocmdiW2ldLCAwLCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmdiO1xuICAgIH07XG5cbiAgICAvLyBwb3J0ZWQgZnJvbSBqUXVlcnkncyAkLnR5cGVcbiAgICB2YXIgY2xhc3NUb1R5cGUgPSB7fTtcbiAgICBmb3IgKHZhciBpJDEgPSAwLCBsaXN0JDEgPSBbJ0Jvb2xlYW4nLCAnTnVtYmVyJywgJ1N0cmluZycsICdGdW5jdGlvbicsICdBcnJheScsICdEYXRlJywgJ1JlZ0V4cCcsICdVbmRlZmluZWQnLCAnTnVsbCddOyBpJDEgPCBsaXN0JDEubGVuZ3RoOyBpJDEgKz0gMSkge1xuICAgICAgICB2YXIgbmFtZSA9IGxpc3QkMVtpJDFdO1xuXG4gICAgICAgIGNsYXNzVG9UeXBlWyhcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIpXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgdmFyIHR5cGUkcCA9IGZ1bmN0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gY2xhc3NUb1R5cGVbT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaildIHx8IFwib2JqZWN0XCI7XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG8gPSB0eXBlJHA7XG5cbiAgICB2YXIgdW5wYWNrJEIgPSBmdW5jdGlvbiAoYXJncywga2V5T3JkZXIpIHtcbiAgICAgICAgaWYgKCBrZXlPcmRlciA9PT0gdm9pZCAwICkga2V5T3JkZXI9bnVsbDtcblxuICAgIFx0Ly8gaWYgY2FsbGVkIHdpdGggbW9yZSB0aGFuIDMgYXJndW1lbnRzLCB3ZSByZXR1cm4gdGhlIGFyZ3VtZW50c1xuICAgICAgICBpZiAoYXJncy5sZW5ndGggPj0gMykgeyByZXR1cm4gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncyk7IH1cbiAgICAgICAgLy8gd2l0aCBsZXNzIHRoYW4gMyBhcmdzIHdlIGNoZWNrIGlmIGZpcnN0IGFyZyBpcyBvYmplY3RcbiAgICAgICAgLy8gYW5kIHVzZSB0aGUga2V5T3JkZXIgc3RyaW5nIHRvIGV4dHJhY3QgYW5kIHNvcnQgcHJvcGVydGllc1xuICAgIFx0aWYgKHR5cGUkbyhhcmdzWzBdKSA9PSAnb2JqZWN0JyAmJiBrZXlPcmRlcikge1xuICAgIFx0XHRyZXR1cm4ga2V5T3JkZXIuc3BsaXQoJycpXG4gICAgXHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoaykgeyByZXR1cm4gYXJnc1swXVtrXSAhPT0gdW5kZWZpbmVkOyB9KVxuICAgIFx0XHRcdC5tYXAoZnVuY3Rpb24gKGspIHsgcmV0dXJuIGFyZ3NbMF1ba107IH0pO1xuICAgIFx0fVxuICAgIFx0Ly8gb3RoZXJ3aXNlIHdlIGp1c3QgcmV0dXJuIHRoZSBmaXJzdCBhcmd1bWVudFxuICAgIFx0Ly8gKHdoaWNoIHdlIHN1cHBvc2UgaXMgYW4gYXJyYXkgb2YgYXJncylcbiAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgfTtcblxuICAgIHZhciB0eXBlJG4gPSB0eXBlJHA7XG5cbiAgICB2YXIgbGFzdCQ0ID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMikgeyByZXR1cm4gbnVsbDsgfVxuICAgICAgICB2YXIgbCA9IGFyZ3MubGVuZ3RoLTE7XG4gICAgICAgIGlmICh0eXBlJG4oYXJnc1tsXSkgPT0gJ3N0cmluZycpIHsgcmV0dXJuIGFyZ3NbbF0udG9Mb3dlckNhc2UoKTsgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIFBJJDIgPSBNYXRoLlBJO1xuXG4gICAgdmFyIHV0aWxzID0ge1xuICAgIFx0Y2xpcF9yZ2I6IGNsaXBfcmdiJDMsXG4gICAgXHRsaW1pdDogbGltaXQkMixcbiAgICBcdHR5cGU6IHR5cGUkcCxcbiAgICBcdHVucGFjazogdW5wYWNrJEIsXG4gICAgXHRsYXN0OiBsYXN0JDQsXG4gICAgXHRQSTogUEkkMixcbiAgICBcdFRXT1BJOiBQSSQyKjIsXG4gICAgXHRQSVRISVJEOiBQSSQyLzMsXG4gICAgXHRERUcyUkFEOiBQSSQyIC8gMTgwLFxuICAgIFx0UkFEMkRFRzogMTgwIC8gUEkkMlxuICAgIH07XG5cbiAgICB2YXIgaW5wdXQkaCA9IHtcbiAgICBcdGZvcm1hdDoge30sXG4gICAgXHRhdXRvZGV0ZWN0OiBbXVxuICAgIH07XG5cbiAgICB2YXIgbGFzdCQzID0gdXRpbHMubGFzdDtcbiAgICB2YXIgY2xpcF9yZ2IkMiA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciB0eXBlJG0gPSB1dGlscy50eXBlO1xuICAgIHZhciBfaW5wdXQgPSBpbnB1dCRoO1xuXG4gICAgdmFyIENvbG9yJEQgPSBmdW5jdGlvbiBDb2xvcigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgbWUgPSB0aGlzO1xuICAgICAgICBpZiAodHlwZSRtKGFyZ3NbMF0pID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciAmJlxuICAgICAgICAgICAgYXJnc1swXS5jb25zdHJ1Y3RvciA9PT0gdGhpcy5jb25zdHJ1Y3Rvcikge1xuICAgICAgICAgICAgLy8gdGhlIGFyZ3VtZW50IGlzIGFscmVhZHkgYSBDb2xvciBpbnN0YW5jZVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3NbMF07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsYXN0IGFyZ3VtZW50IGNvdWxkIGJlIHRoZSBtb2RlXG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQzKGFyZ3MpO1xuICAgICAgICB2YXIgYXV0b2RldGVjdCA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghbW9kZSkge1xuICAgICAgICAgICAgYXV0b2RldGVjdCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoIV9pbnB1dC5zb3J0ZWQpIHtcbiAgICAgICAgICAgICAgICBfaW5wdXQuYXV0b2RldGVjdCA9IF9pbnB1dC5hdXRvZGV0ZWN0LnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYi5wIC0gYS5wOyB9KTtcbiAgICAgICAgICAgICAgICBfaW5wdXQuc29ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGF1dG8tZGV0ZWN0IGZvcm1hdFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBfaW5wdXQuYXV0b2RldGVjdDsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICB2YXIgY2hrID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgIG1vZGUgPSBjaGsudGVzdC5hcHBseShjaGssIGFyZ3MpO1xuICAgICAgICAgICAgICAgIGlmIChtb2RlKSB7IGJyZWFrOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2lucHV0LmZvcm1hdFttb2RlXSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IF9pbnB1dC5mb3JtYXRbbW9kZV0uYXBwbHkobnVsbCwgYXV0b2RldGVjdCA/IGFyZ3MgOiBhcmdzLnNsaWNlKDAsLTEpKTtcbiAgICAgICAgICAgIG1lLl9yZ2IgPSBjbGlwX3JnYiQyKHJnYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gZm9ybWF0OiAnK2FyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIGFscGhhIGNoYW5uZWxcbiAgICAgICAgaWYgKG1lLl9yZ2IubGVuZ3RoID09PSAzKSB7IG1lLl9yZ2IucHVzaCgxKTsgfVxuICAgIH07XG5cbiAgICBDb2xvciRELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgICAgICAgaWYgKHR5cGUkbSh0aGlzLmhleCkgPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gdGhpcy5oZXgoKTsgfVxuICAgICAgICByZXR1cm4gKFwiW1wiICsgKHRoaXMuX3JnYi5qb2luKCcsJykpICsgXCJdXCIpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3JfMSA9IENvbG9yJEQ7XG5cbiAgICB2YXIgY2hyb21hJGsgPSBmdW5jdGlvbiAoKSB7XG4gICAgXHR2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIFx0d2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgIFx0cmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIGNocm9tYSRrLkNvbG9yLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MpICkpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkay5Db2xvciA9IENvbG9yXzE7XG4gICAgY2hyb21hJGsudmVyc2lvbiA9ICcyLjQuMic7XG5cbiAgICB2YXIgY2hyb21hXzEgPSBjaHJvbWEkaztcblxuICAgIHZhciB1bnBhY2skQSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgbWF4JDIgPSBNYXRoLm1heDtcblxuICAgIHZhciByZ2IyY215ayQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skQShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgPSByIC8gMjU1O1xuICAgICAgICBnID0gZyAvIDI1NTtcbiAgICAgICAgYiA9IGIgLyAyNTU7XG4gICAgICAgIHZhciBrID0gMSAtIG1heCQyKHIsbWF4JDIoZyxiKSk7XG4gICAgICAgIHZhciBmID0gayA8IDEgPyAxIC8gKDEtaykgOiAwO1xuICAgICAgICB2YXIgYyA9ICgxLXItaykgKiBmO1xuICAgICAgICB2YXIgbSA9ICgxLWctaykgKiBmO1xuICAgICAgICB2YXIgeSA9ICgxLWItaykgKiBmO1xuICAgICAgICByZXR1cm4gW2MsbSx5LGtdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmNteWtfMSA9IHJnYjJjbXlrJDE7XG5cbiAgICB2YXIgdW5wYWNrJHogPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgY215azJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayR6KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgIHZhciBjID0gYXJnc1swXTtcbiAgICAgICAgdmFyIG0gPSBhcmdzWzFdO1xuICAgICAgICB2YXIgeSA9IGFyZ3NbMl07XG4gICAgICAgIHZhciBrID0gYXJnc1szXTtcbiAgICAgICAgdmFyIGFscGhhID0gYXJncy5sZW5ndGggPiA0ID8gYXJnc1s0XSA6IDE7XG4gICAgICAgIGlmIChrID09PSAxKSB7IHJldHVybiBbMCwwLDAsYWxwaGFdOyB9XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBjID49IDEgPyAwIDogMjU1ICogKDEtYykgKiAoMS1rKSwgLy8gclxuICAgICAgICAgICAgbSA+PSAxID8gMCA6IDI1NSAqICgxLW0pICogKDEtayksIC8vIGdcbiAgICAgICAgICAgIHkgPj0gMSA/IDAgOiAyNTUgKiAoMS15KSAqICgxLWspLCAvLyBiXG4gICAgICAgICAgICBhbHBoYVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgY215azJyZ2JfMSA9IGNteWsycmdiO1xuXG4gICAgdmFyIGNocm9tYSRqID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJEMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCRnID0gaW5wdXQkaDtcbiAgICB2YXIgdW5wYWNrJHkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkbCA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNteWsgPSByZ2IyY215a18xO1xuXG4gICAgQ29sb3IkQy5wcm90b3R5cGUuY215ayA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmNteWsodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGouY215ayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkQywgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2NteWsnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JGcuZm9ybWF0LmNteWsgPSBjbXlrMnJnYl8xO1xuXG4gICAgaW5wdXQkZy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAyLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayR5KGFyZ3MsICdjbXlrJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRsKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdjbXlrJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayR4ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDIgPSB1dGlscy5sYXN0O1xuICAgIHZhciBybmQgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gTWF0aC5yb3VuZChhKjEwMCkvMTAwOyB9O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gaHNsMmNzcyhoLHMsbClcbiAgICAgKiAtIGhzbDJjc3MoaCxzLGwsYSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsXSwgbW9kZSlcbiAgICAgKiAtIGhzbDJjc3MoW2gscyxsLGFdLCBtb2RlKVxuICAgICAqIC0gaHNsMmNzcyh7aCxzLGwsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIGhzbDJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgaHNsYSA9IHVucGFjayR4KGFyZ3MsICdoc2xhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQyKGFyZ3MpIHx8ICdsc2EnO1xuICAgICAgICBoc2xhWzBdID0gcm5kKGhzbGFbMF0gfHwgMCk7XG4gICAgICAgIGhzbGFbMV0gPSBybmQoaHNsYVsxXSoxMDApICsgJyUnO1xuICAgICAgICBoc2xhWzJdID0gcm5kKGhzbGFbMl0qMTAwKSArICclJztcbiAgICAgICAgaWYgKG1vZGUgPT09ICdoc2xhJyB8fCAoaHNsYS5sZW5ndGggPiAzICYmIGhzbGFbM108MSkpIHtcbiAgICAgICAgICAgIGhzbGFbM10gPSBoc2xhLmxlbmd0aCA+IDMgPyBoc2xhWzNdIDogMTtcbiAgICAgICAgICAgIG1vZGUgPSAnaHNsYSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoc2xhLmxlbmd0aCA9IDM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChtb2RlICsgXCIoXCIgKyAoaHNsYS5qb2luKCcsJykpICsgXCIpXCIpO1xuICAgIH07XG5cbiAgICB2YXIgaHNsMmNzc18xID0gaHNsMmNzcyQxO1xuXG4gICAgdmFyIHVucGFjayR3ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzbChyLGcsYilcbiAgICAgKiAtIHJnYjJoc2wocixnLGIsYSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc2woW3IsZyxiLGFdKVxuICAgICAqIC0gcmdiMmhzbCh7cixnLGIsYX0pXG4gICAgICovXG4gICAgdmFyIHJnYjJoc2wkMyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJHcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgdmFyIHIgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgZyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcblxuICAgICAgICByIC89IDI1NTtcbiAgICAgICAgZyAvPSAyNTU7XG4gICAgICAgIGIgLz0gMjU1O1xuXG4gICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihyLCBnLCBiKTtcbiAgICAgICAgdmFyIG1heCA9IE1hdGgubWF4KHIsIGcsIGIpO1xuXG4gICAgICAgIHZhciBsID0gKG1heCArIG1pbikgLyAyO1xuICAgICAgICB2YXIgcywgaDtcblxuICAgICAgICBpZiAobWF4ID09PSBtaW4pe1xuICAgICAgICAgICAgcyA9IDA7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBsIDwgMC41ID8gKG1heCAtIG1pbikgLyAobWF4ICsgbWluKSA6IChtYXggLSBtaW4pIC8gKDIgLSBtYXggLSBtaW4pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHIgPT0gbWF4KSB7IGggPSAoZyAtIGIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoZyA9PSBtYXgpIHsgaCA9IDIgKyAoYiAtIHIpIC8gKG1heCAtIG1pbik7IH1cbiAgICAgICAgZWxzZSBpZiAoYiA9PSBtYXgpIHsgaCA9IDQgKyAociAtIGcpIC8gKG1heCAtIG1pbik7IH1cblxuICAgICAgICBoICo9IDYwO1xuICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoPjMgJiYgYXJnc1szXSE9PXVuZGVmaW5lZCkgeyByZXR1cm4gW2gscyxsLGFyZ3NbM11dOyB9XG4gICAgICAgIHJldHVybiBbaCxzLGxdO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzbF8xID0gcmdiMmhzbCQzO1xuXG4gICAgdmFyIHVucGFjayR2ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0JDEgPSB1dGlscy5sYXN0O1xuICAgIHZhciBoc2wyY3NzID0gaHNsMmNzc18xO1xuICAgIHZhciByZ2IyaHNsJDIgPSByZ2IyaHNsXzE7XG4gICAgdmFyIHJvdW5kJDYgPSBNYXRoLnJvdW5kO1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmNzcyhyLGcsYilcbiAgICAgKiAtIHJnYjJjc3MocixnLGIsYSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiXSwgbW9kZSlcbiAgICAgKiAtIHJnYjJjc3MoW3IsZyxiLGFdLCBtb2RlKVxuICAgICAqIC0gcmdiMmNzcyh7cixnLGIsYX0sIG1vZGUpXG4gICAgICovXG4gICAgdmFyIHJnYjJjc3MkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiYSA9IHVucGFjayR2KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHZhciBtb2RlID0gbGFzdCQxKGFyZ3MpIHx8ICdyZ2InO1xuICAgICAgICBpZiAobW9kZS5zdWJzdHIoMCwzKSA9PSAnaHNsJykge1xuICAgICAgICAgICAgcmV0dXJuIGhzbDJjc3MocmdiMmhzbCQyKHJnYmEpLCBtb2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZ2JhWzBdID0gcm91bmQkNihyZ2JhWzBdKTtcbiAgICAgICAgcmdiYVsxXSA9IHJvdW5kJDYocmdiYVsxXSk7XG4gICAgICAgIHJnYmFbMl0gPSByb3VuZCQ2KHJnYmFbMl0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ3JnYmEnIHx8IChyZ2JhLmxlbmd0aCA+IDMgJiYgcmdiYVszXTwxKSkge1xuICAgICAgICAgICAgcmdiYVszXSA9IHJnYmEubGVuZ3RoID4gMyA/IHJnYmFbM10gOiAxO1xuICAgICAgICAgICAgbW9kZSA9ICdyZ2JhJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKG1vZGUgKyBcIihcIiArIChyZ2JhLnNsaWNlKDAsbW9kZT09PSdyZ2InPzM6NCkuam9pbignLCcpKSArIFwiKVwiKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJjc3NfMSA9IHJnYjJjc3MkMTtcblxuICAgIHZhciB1bnBhY2skdSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcm91bmQkNSA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgaHNsMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduO1xuXG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG4gICAgICAgIGFyZ3MgPSB1bnBhY2skdShhcmdzLCAnaHNsJyk7XG4gICAgICAgIHZhciBoID0gYXJnc1swXTtcbiAgICAgICAgdmFyIHMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgbCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgaWYgKHMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IGwqMjU1O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHQzID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciBjID0gWzAsMCwwXTtcbiAgICAgICAgICAgIHZhciB0MiA9IGwgPCAwLjUgPyBsICogKDErcykgOiBsK3MtbCpzO1xuICAgICAgICAgICAgdmFyIHQxID0gMiAqIGwgLSB0MjtcbiAgICAgICAgICAgIHZhciBoXyA9IGggLyAzNjA7XG4gICAgICAgICAgICB0M1swXSA9IGhfICsgMS8zO1xuICAgICAgICAgICAgdDNbMV0gPSBoXztcbiAgICAgICAgICAgIHQzWzJdID0gaF8gLSAxLzM7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8MzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldIDwgMCkgeyB0M1tpXSArPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKHQzW2ldID4gMSkgeyB0M1tpXSAtPSAxOyB9XG4gICAgICAgICAgICAgICAgaWYgKDYgKiB0M1tpXSA8IDEpXG4gICAgICAgICAgICAgICAgICAgIHsgY1tpXSA9IHQxICsgKHQyIC0gdDEpICogNiAqIHQzW2ldOyB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMiAqIHQzW2ldIDwgMSlcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDI7IH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICgzICogdDNbaV0gPCAyKVxuICAgICAgICAgICAgICAgICAgICB7IGNbaV0gPSB0MSArICh0MiAtIHQxKSAqICgoMiAvIDMpIC0gdDNbaV0pICogNjsgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeyBjW2ldID0gdDE7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChhc3NpZ24gPSBbcm91bmQkNShjWzBdKjI1NSkscm91bmQkNShjWzFdKjI1NSkscm91bmQkNShjWzJdKjI1NSldLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPiAzKSB7XG4gICAgICAgICAgICAvLyBrZWVwIGFscGhhIGNoYW5uZWxcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsYXJnc1szXV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtyLGcsYiwxXTtcbiAgICB9O1xuXG4gICAgdmFyIGhzbDJyZ2JfMSA9IGhzbDJyZ2IkMTtcblxuICAgIHZhciBoc2wycmdiID0gaHNsMnJnYl8xO1xuICAgIHZhciBpbnB1dCRmID0gaW5wdXQkaDtcblxuICAgIHZhciBSRV9SR0IgPSAvXnJnYlxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccypcXCkkLztcbiAgICB2YXIgUkVfUkdCQSA9IC9ecmdiYVxcKFxccyooLT9cXGQrKSxcXHMqKC0/XFxkKylcXHMqLFxccyooLT9cXGQrKVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfUkdCX1BDVCA9IC9ecmdiXFwoXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKlxcKSQvO1xuICAgIHZhciBSRV9SR0JBX1BDVCA9IC9ecmdiYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSUsXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKihbMDFdfFswMV0/XFwuXFxkKylcXCkkLztcbiAgICB2YXIgUkVfSFNMID0gL15oc2xcXChcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyksXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccyosXFxzKigtP1xcZCsoPzpcXC5cXGQrKT8pJVxccypcXCkkLztcbiAgICB2YXIgUkVfSFNMQSA9IC9eaHNsYVxcKFxccyooLT9cXGQrKD86XFwuXFxkKyk/KSxcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKC0/XFxkKyg/OlxcLlxcZCspPyklXFxzKixcXHMqKFswMV18WzAxXT9cXC5cXGQrKVxcKSQvO1xuXG4gICAgdmFyIHJvdW5kJDQgPSBNYXRoLnJvdW5kO1xuXG4gICAgdmFyIGNzczJyZ2IkMSA9IGZ1bmN0aW9uIChjc3MpIHtcbiAgICAgICAgY3NzID0gY3NzLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgICAgICB2YXIgbTtcblxuICAgICAgICBpZiAoaW5wdXQkZi5mb3JtYXQubmFtZWQpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0JGYuZm9ybWF0Lm5hbWVkKGNzcyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2IoMjUwLDIwLDApXG4gICAgICAgIGlmICgobSA9IGNzcy5tYXRjaChSRV9SR0IpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiA9IG0uc2xpY2UoMSw0KTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTwzOyBpKyspIHtcbiAgICAgICAgICAgICAgICByZ2JbaV0gPSArcmdiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiWzNdID0gMTsgIC8vIGRlZmF1bHQgYWxwaGFcbiAgICAgICAgICAgIHJldHVybiByZ2I7XG4gICAgICAgIH1cblxuICAgICAgICAvLyByZ2JhKDI1MCwyMCwwLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkEpKSkge1xuICAgICAgICAgICAgdmFyIHJnYiQxID0gbS5zbGljZSgxLDUpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTw0OyBpJDErKykge1xuICAgICAgICAgICAgICAgIHJnYiQxW2kkMV0gPSArcmdiJDFbaSQxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZ2IkMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHJnYigxMDAlLDAlLDAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfUkdCX1BDVCkpKSB7XG4gICAgICAgICAgICB2YXIgcmdiJDIgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDI9MDsgaSQyPDM7IGkkMisrKSB7XG4gICAgICAgICAgICAgICAgcmdiJDJbaSQyXSA9IHJvdW5kJDQocmdiJDJbaSQyXSAqIDIuNTUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmdiJDJbM10gPSAxOyAgLy8gZGVmYXVsdCBhbHBoYVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQyO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmdiYSgxMDAlLDAlLDAlLDAuNClcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX1JHQkFfUENUKSkpIHtcbiAgICAgICAgICAgIHZhciByZ2IkMyA9IG0uc2xpY2UoMSw1KTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0wOyBpJDM8MzsgaSQzKyspIHtcbiAgICAgICAgICAgICAgICByZ2IkM1tpJDNdID0gcm91bmQkNChyZ2IkM1tpJDNdICogMi41NSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZ2IkM1szXSA9ICtyZ2IkM1szXTtcbiAgICAgICAgICAgIHJldHVybiByZ2IkMztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGhzbCgwLDEwMCUsNTAlKVxuICAgICAgICBpZiAoKG0gPSBjc3MubWF0Y2goUkVfSFNMKSkpIHtcbiAgICAgICAgICAgIHZhciBoc2wgPSBtLnNsaWNlKDEsNCk7XG4gICAgICAgICAgICBoc2xbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbFsyXSAqPSAwLjAxO1xuICAgICAgICAgICAgdmFyIHJnYiQ0ID0gaHNsMnJnYihoc2wpO1xuICAgICAgICAgICAgcmdiJDRbM10gPSAxO1xuICAgICAgICAgICAgcmV0dXJuIHJnYiQ0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHNsYSgwLDEwMCUsNTAlLDAuNSlcbiAgICAgICAgaWYgKChtID0gY3NzLm1hdGNoKFJFX0hTTEEpKSkge1xuICAgICAgICAgICAgdmFyIGhzbCQxID0gbS5zbGljZSgxLDQpO1xuICAgICAgICAgICAgaHNsJDFbMV0gKj0gMC4wMTtcbiAgICAgICAgICAgIGhzbCQxWzJdICo9IDAuMDE7XG4gICAgICAgICAgICB2YXIgcmdiJDUgPSBoc2wycmdiKGhzbCQxKTtcbiAgICAgICAgICAgIHJnYiQ1WzNdID0gK21bNF07ICAvLyBkZWZhdWx0IGFscGhhID0gMVxuICAgICAgICAgICAgcmV0dXJuIHJnYiQ1O1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNzczJyZ2IkMS50ZXN0ID0gZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgcmV0dXJuIFJFX1JHQi50ZXN0KHMpIHx8XG4gICAgICAgICAgICBSRV9SR0JBLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX1JHQl9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfUkdCQV9QQ1QudGVzdChzKSB8fFxuICAgICAgICAgICAgUkVfSFNMLnRlc3QocykgfHxcbiAgICAgICAgICAgIFJFX0hTTEEudGVzdChzKTtcbiAgICB9O1xuXG4gICAgdmFyIGNzczJyZ2JfMSA9IGNzczJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkaSA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRCID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkZSA9IGlucHV0JGg7XG4gICAgdmFyIHR5cGUkayA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcmdiMmNzcyA9IHJnYjJjc3NfMTtcbiAgICB2YXIgY3NzMnJnYiA9IGNzczJyZ2JfMTtcblxuICAgIENvbG9yJEIucHJvdG90eXBlLmNzcyA9IGZ1bmN0aW9uKG1vZGUpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJjc3ModGhpcy5fcmdiLCBtb2RlKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGkuY3NzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRCLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnY3NzJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRlLmZvcm1hdC5jc3MgPSBjc3MycmdiO1xuXG4gICAgaW5wdXQkZS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRrKGgpID09PSAnc3RyaW5nJyAmJiBjc3MycmdiLnRlc3QoaCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2Nzcyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRBID0gQ29sb3JfMTtcbiAgICB2YXIgY2hyb21hJGggPSBjaHJvbWFfMTtcbiAgICB2YXIgaW5wdXQkZCA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayR0ID0gdXRpbHMudW5wYWNrO1xuXG4gICAgaW5wdXQkZC5mb3JtYXQuZ2wgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJnYiA9IHVucGFjayR0KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgIHJnYlswXSAqPSAyNTU7XG4gICAgICAgIHJnYlsxXSAqPSAyNTU7XG4gICAgICAgIHJnYlsyXSAqPSAyNTU7XG4gICAgICAgIHJldHVybiByZ2I7XG4gICAgfTtcblxuICAgIGNocm9tYSRoLmdsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRBLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnZ2wnXSkgKSk7XG4gICAgfTtcblxuICAgIENvbG9yJEEucHJvdG90eXBlLmdsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHZhciByZ2IgPSB0aGlzLl9yZ2I7XG4gICAgICAgIHJldHVybiBbcmdiWzBdLzI1NSwgcmdiWzFdLzI1NSwgcmdiWzJdLzI1NSwgcmdiWzNdXTtcbiAgICB9O1xuXG4gICAgdmFyIHVucGFjayRzID0gdXRpbHMudW5wYWNrO1xuXG4gICAgdmFyIHJnYjJoY2ckMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJHMoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgbWluID0gTWF0aC5taW4ociwgZywgYik7XG4gICAgICAgIHZhciBtYXggPSBNYXRoLm1heChyLCBnLCBiKTtcbiAgICAgICAgdmFyIGRlbHRhID0gbWF4IC0gbWluO1xuICAgICAgICB2YXIgYyA9IGRlbHRhICogMTAwIC8gMjU1O1xuICAgICAgICB2YXIgX2cgPSBtaW4gLyAoMjU1IC0gZGVsdGEpICogMTAwO1xuICAgICAgICB2YXIgaDtcbiAgICAgICAgaWYgKGRlbHRhID09PSAwKSB7XG4gICAgICAgICAgICBoID0gTnVtYmVyLk5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyID09PSBtYXgpIHsgaCA9IChnIC0gYikgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaWYgKGcgPT09IG1heCkgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXgpIHsgaCA9IDQrKHIgLSBnKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBoICo9IDYwO1xuICAgICAgICAgICAgaWYgKGggPCAwKSB7IGggKz0gMzYwOyB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoLCBjLCBfZ107XG4gICAgfTtcblxuICAgIHZhciByZ2IyaGNnXzEgPSByZ2IyaGNnJDE7XG5cbiAgICB2YXIgdW5wYWNrJHIgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDMgPSBNYXRoLmZsb29yO1xuXG4gICAgLypcbiAgICAgKiB0aGlzIGlzIGJhc2ljYWxseSBqdXN0IEhTViB3aXRoIHNvbWUgbWlub3IgdHdlYWtzXG4gICAgICpcbiAgICAgKiBodWUuLiBbMC4uMzYwXVxuICAgICAqIGNocm9tYSAuLiBbMC4uMV1cbiAgICAgKiBncmF5bmVzcyAuLiBbMC4uMV1cbiAgICAgKi9cblxuICAgIHZhciBoY2cycmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDIsIGFzc2lnbiQzLCBhc3NpZ24kNCwgYXNzaWduJDU7XG5cbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcbiAgICAgICAgYXJncyA9IHVucGFjayRyKGFyZ3MsICdoY2cnKTtcbiAgICAgICAgdmFyIGggPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBfZyA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByLGcsYjtcbiAgICAgICAgX2cgPSBfZyAqIDI1NTtcbiAgICAgICAgdmFyIF9jID0gYyAqIDI1NTtcbiAgICAgICAgaWYgKGMgPT09IDApIHtcbiAgICAgICAgICAgIHIgPSBnID0gYiA9IF9nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGggPT09IDM2MCkgeyBoID0gMDsgfVxuICAgICAgICAgICAgaWYgKGggPiAzNjApIHsgaCAtPSAzNjA7IH1cbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICAgICAgaCAvPSA2MDtcbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMyhoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IF9nICogKDEgLSBjKTtcbiAgICAgICAgICAgIHZhciBxID0gcCArIF9jICogKDEgLSBmKTtcbiAgICAgICAgICAgIHZhciB0ID0gcCArIF9jICogZjtcbiAgICAgICAgICAgIHZhciB2ID0gcCArIF9jO1xuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaGNnMnJnYl8xID0gaGNnMnJnYjtcblxuICAgIHZhciB1bnBhY2skcSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRqID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGcgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGMgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoY2cgPSByZ2IyaGNnXzE7XG5cbiAgICBDb2xvciR6LnByb3RvdHlwZS5oY2cgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoY2codGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGcuaGNnID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR6LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNnJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRjLmZvcm1hdC5oY2cgPSBoY2cycmdiXzE7XG5cbiAgICBpbnB1dCRjLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDEsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJHEoYXJncywgJ2hjZycpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaihhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaGNnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRwID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsYXN0ID0gdXRpbHMubGFzdDtcbiAgICB2YXIgcm91bmQkMyA9IE1hdGgucm91bmQ7XG5cbiAgICB2YXIgcmdiMmhleCQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skcChhcmdzLCAncmdiYScpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgYSA9IHJlZlszXTtcbiAgICAgICAgdmFyIG1vZGUgPSBsYXN0KGFyZ3MpIHx8ICdhdXRvJztcbiAgICAgICAgaWYgKGEgPT09IHVuZGVmaW5lZCkgeyBhID0gMTsgfVxuICAgICAgICBpZiAobW9kZSA9PT0gJ2F1dG8nKSB7XG4gICAgICAgICAgICBtb2RlID0gYSA8IDEgPyAncmdiYScgOiAncmdiJztcbiAgICAgICAgfVxuICAgICAgICByID0gcm91bmQkMyhyKTtcbiAgICAgICAgZyA9IHJvdW5kJDMoZyk7XG4gICAgICAgIGIgPSByb3VuZCQzKGIpO1xuICAgICAgICB2YXIgdSA9IHIgPDwgMTYgfCBnIDw8IDggfCBiO1xuICAgICAgICB2YXIgc3RyID0gXCIwMDAwMDBcIiArIHUudG9TdHJpbmcoMTYpOyAvLyMudG9VcHBlckNhc2UoKTtcbiAgICAgICAgc3RyID0gc3RyLnN1YnN0cihzdHIubGVuZ3RoIC0gNik7XG4gICAgICAgIHZhciBoeGEgPSAnMCcgKyByb3VuZCQzKGEgKiAyNTUpLnRvU3RyaW5nKDE2KTtcbiAgICAgICAgaHhhID0gaHhhLnN1YnN0cihoeGEubGVuZ3RoIC0gMik7XG4gICAgICAgIHN3aXRjaCAobW9kZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgICBjYXNlICdyZ2JhJzogcmV0dXJuIChcIiNcIiArIHN0ciArIGh4YSk7XG4gICAgICAgICAgICBjYXNlICdhcmdiJzogcmV0dXJuIChcIiNcIiArIGh4YSArIHN0cik7XG4gICAgICAgICAgICBkZWZhdWx0OiByZXR1cm4gKFwiI1wiICsgc3RyKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgcmdiMmhleF8xID0gcmdiMmhleCQyO1xuXG4gICAgdmFyIFJFX0hFWCA9IC9eIz8oW0EtRmEtZjAtOV17Nn18W0EtRmEtZjAtOV17M30pJC87XG4gICAgdmFyIFJFX0hFWEEgPSAvXiM/KFtBLUZhLWYwLTldezh9fFtBLUZhLWYwLTldezR9KSQvO1xuXG4gICAgdmFyIGhleDJyZ2IkMSA9IGZ1bmN0aW9uIChoZXgpIHtcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVgpKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgb3B0aW9uYWwgbGVhZGluZyAjXG4gICAgICAgICAgICBpZiAoaGV4Lmxlbmd0aCA9PT0gNCB8fCBoZXgubGVuZ3RoID09PSA3KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnN1YnN0cigxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGV4cGFuZCBzaG9ydC1ub3RhdGlvbiB0byBmdWxsIHNpeC1kaWdpdFxuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3BsaXQoJycpO1xuICAgICAgICAgICAgICAgIGhleCA9IGhleFswXStoZXhbMF0raGV4WzFdK2hleFsxXStoZXhbMl0raGV4WzJdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUgPSBwYXJzZUludChoZXgsIDE2KTtcbiAgICAgICAgICAgIHZhciByID0gdSA+PiAxNjtcbiAgICAgICAgICAgIHZhciBnID0gdSA+PiA4ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gdSAmIDB4RkY7XG4gICAgICAgICAgICByZXR1cm4gW3IsZyxiLDFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbWF0Y2ggcmdiYSBoZXggZm9ybWF0LCBlZyAjRkYwMDAwNzdcbiAgICAgICAgaWYgKGhleC5tYXRjaChSRV9IRVhBKSkge1xuICAgICAgICAgICAgaWYgKGhleC5sZW5ndGggPT09IDUgfHwgaGV4Lmxlbmd0aCA9PT0gOSkge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBvcHRpb25hbCBsZWFkaW5nICNcbiAgICAgICAgICAgICAgICBoZXggPSBoZXguc3Vic3RyKDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZXhwYW5kIHNob3J0LW5vdGF0aW9uIHRvIGZ1bGwgZWlnaHQtZGlnaXRcbiAgICAgICAgICAgIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgICAgICAgICAgICAgaGV4ID0gaGV4LnNwbGl0KCcnKTtcbiAgICAgICAgICAgICAgICBoZXggPSBoZXhbMF0raGV4WzBdK2hleFsxXStoZXhbMV0raGV4WzJdK2hleFsyXStoZXhbM10raGV4WzNdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHUkMSA9IHBhcnNlSW50KGhleCwgMTYpO1xuICAgICAgICAgICAgdmFyIHIkMSA9IHUkMSA+PiAyNCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgZyQxID0gdSQxID4+IDE2ICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiJDEgPSB1JDEgPj4gOCAmIDB4RkY7XG4gICAgICAgICAgICB2YXIgYSA9IE1hdGgucm91bmQoKHUkMSAmIDB4RkYpIC8gMHhGRiAqIDEwMCkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gW3IkMSxnJDEsYiQxLGFdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gd2UgdXNlZCB0byBjaGVjayBmb3IgY3NzIGNvbG9ycyBoZXJlXG4gICAgICAgIC8vIGlmIF9pbnB1dC5jc3M/IGFuZCByZ2IgPSBfaW5wdXQuY3NzIGhleFxuICAgICAgICAvLyAgICAgcmV0dXJuIHJnYlxuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJ1bmtub3duIGhleCBjb2xvcjogXCIgKyBoZXgpKTtcbiAgICB9O1xuXG4gICAgdmFyIGhleDJyZ2JfMSA9IGhleDJyZ2IkMTtcblxuICAgIHZhciBjaHJvbWEkZiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR5ID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSRpID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW5wdXQkYiA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhleCQxID0gcmdiMmhleF8xO1xuXG4gICAgQ29sb3IkeS5wcm90b3R5cGUuaGV4ID0gZnVuY3Rpb24obW9kZSkge1xuICAgICAgICByZXR1cm4gcmdiMmhleCQxKHRoaXMuX3JnYiwgbW9kZSk7XG4gICAgfTtcblxuICAgIGNocm9tYSRmLmhleCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkeSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ2hleCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkYi5mb3JtYXQuaGV4ID0gaGV4MnJnYl8xO1xuICAgIGlucHV0JGIuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogNCxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKGgpIHtcbiAgICAgICAgICAgIHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMSBdO1xuXG4gICAgICAgICAgICBpZiAoIXJlc3QubGVuZ3RoICYmIHR5cGUkaShoKSA9PT0gJ3N0cmluZycgJiYgWzMsNCw1LDYsNyw4LDldLmluZGV4T2YoaC5sZW5ndGgpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hleCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciB1bnBhY2skbyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgVFdPUEkkMiA9IHV0aWxzLlRXT1BJO1xuICAgIHZhciBtaW4kMiA9IE1hdGgubWluO1xuICAgIHZhciBzcXJ0JDQgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGFjb3MgPSBNYXRoLmFjb3M7XG5cbiAgICB2YXIgcmdiMmhzaSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIGJvcnJvd2VkIGZyb20gaGVyZTpcbiAgICAgICAgaHR0cDovL2h1bW1lci5zdGFuZm9yZC5lZHUvbXVzZWluZm8vZG9jL2V4YW1wbGVzL2h1bWRydW0va2V5c2NhcGUyL3JnYjJoc2kuY3BwXG4gICAgICAgICovXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skbyhhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHIgLz0gMjU1O1xuICAgICAgICBnIC89IDI1NTtcbiAgICAgICAgYiAvPSAyNTU7XG4gICAgICAgIHZhciBoO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQyKHIsZyxiKTtcbiAgICAgICAgdmFyIGkgPSAocitnK2IpIC8gMztcbiAgICAgICAgdmFyIHMgPSBpID4gMCA/IDEgLSBtaW5fL2kgOiAwO1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE5hTjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGggPSAoKHItZykrKHItYikpIC8gMjtcbiAgICAgICAgICAgIGggLz0gc3FydCQ0KChyLWcpKihyLWcpICsgKHItYikqKGctYikpO1xuICAgICAgICAgICAgaCA9IGFjb3MoaCk7XG4gICAgICAgICAgICBpZiAoYiA+IGcpIHtcbiAgICAgICAgICAgICAgICBoID0gVFdPUEkkMiAtIGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoIC89IFRXT1BJJDI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoKjM2MCxzLGldO1xuICAgIH07XG5cbiAgICB2YXIgcmdiMmhzaV8xID0gcmdiMmhzaSQxO1xuXG4gICAgdmFyIHVucGFjayRuID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsaW1pdCA9IHV0aWxzLmxpbWl0O1xuICAgIHZhciBUV09QSSQxID0gdXRpbHMuVFdPUEk7XG4gICAgdmFyIFBJVEhJUkQgPSB1dGlscy5QSVRISVJEO1xuICAgIHZhciBjb3MkNCA9IE1hdGguY29zO1xuXG4gICAgLypcbiAgICAgKiBodWUgWzAuLjM2MF1cbiAgICAgKiBzYXR1cmF0aW9uIFswLi4xXVxuICAgICAqIGludGVuc2l0eSBbMC4uMV1cbiAgICAgKi9cbiAgICB2YXIgaHNpMnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAvKlxuICAgICAgICBib3Jyb3dlZCBmcm9tIGhlcmU6XG4gICAgICAgIGh0dHA6Ly9odW1tZXIuc3RhbmZvcmQuZWR1L211c2VpbmZvL2RvYy9leGFtcGxlcy9odW1kcnVtL2tleXNjYXBlMi9oc2kycmdiLmNwcFxuICAgICAgICAqL1xuICAgICAgICBhcmdzID0gdW5wYWNrJG4oYXJncywgJ2hzaScpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGkgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG5cbiAgICAgICAgaWYgKGlzTmFOKGgpKSB7IGggPSAwOyB9XG4gICAgICAgIGlmIChpc05hTihzKSkgeyBzID0gMDsgfVxuICAgICAgICAvLyBub3JtYWxpemUgaHVlXG4gICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICBoIC89IDM2MDtcbiAgICAgICAgaWYgKGggPCAxLzMpIHtcbiAgICAgICAgICAgIGIgPSAoMS1zKS8zO1xuICAgICAgICAgICAgciA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICBnID0gMSAtIChiK3IpO1xuICAgICAgICB9IGVsc2UgaWYgKGggPCAyLzMpIHtcbiAgICAgICAgICAgIGggLT0gMS8zO1xuICAgICAgICAgICAgciA9ICgxLXMpLzM7XG4gICAgICAgICAgICBnID0gKDErcypjb3MkNChUV09QSSQxKmgpL2NvcyQ0KFBJVEhJUkQtVFdPUEkkMSpoKSkvMztcbiAgICAgICAgICAgIGIgPSAxIC0gKHIrZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoIC09IDIvMztcbiAgICAgICAgICAgIGcgPSAoMS1zKS8zO1xuICAgICAgICAgICAgYiA9ICgxK3MqY29zJDQoVFdPUEkkMSpoKS9jb3MkNChQSVRISVJELVRXT1BJJDEqaCkpLzM7XG4gICAgICAgICAgICByID0gMSAtIChnK2IpO1xuICAgICAgICB9XG4gICAgICAgIHIgPSBsaW1pdChpKnIqMyk7XG4gICAgICAgIGcgPSBsaW1pdChpKmcqMyk7XG4gICAgICAgIGIgPSBsaW1pdChpKmIqMyk7XG4gICAgICAgIHJldHVybiBbcioyNTUsIGcqMjU1LCBiKjI1NSwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgaHNpMnJnYl8xID0gaHNpMnJnYjtcblxuICAgIHZhciB1bnBhY2skbSA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSRoID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJGUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkeCA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0JGEgPSBpbnB1dCRoO1xuXG4gICAgdmFyIHJnYjJoc2kgPSByZ2IyaHNpXzE7XG5cbiAgICBDb2xvciR4LnByb3RvdHlwZS5oc2kgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJoc2kodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGUuaHNpID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR4LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNpJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCRhLmZvcm1hdC5oc2kgPSBoc2kycmdiXzE7XG5cbiAgICBpbnB1dCRhLmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJG0oYXJncywgJ2hzaScpO1xuICAgICAgICAgICAgaWYgKHR5cGUkaChhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNpJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRsID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGcgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkZCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR3ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzbCQxID0gcmdiMmhzbF8xO1xuXG4gICAgQ29sb3Ikdy5wcm90b3R5cGUuaHNsID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IyaHNsJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJGQuaHNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR3LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaHNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ5LmZvcm1hdC5oc2wgPSBoc2wycmdiXzE7XG5cbiAgICBpbnB1dCQ5LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJGwoYXJncywgJ2hzbCcpO1xuICAgICAgICAgICAgaWYgKHR5cGUkZyhhcmdzKSA9PT0gJ2FycmF5JyAmJiBhcmdzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAgICAgICAgIHJldHVybiAnaHNsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayRrID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBtaW4kMSA9IE1hdGgubWluO1xuICAgIHZhciBtYXgkMSA9IE1hdGgubWF4O1xuXG4gICAgLypcbiAgICAgKiBzdXBwb3J0ZWQgYXJndW1lbnRzOlxuICAgICAqIC0gcmdiMmhzdihyLGcsYilcbiAgICAgKiAtIHJnYjJoc3YoW3IsZyxiXSlcbiAgICAgKiAtIHJnYjJoc3Yoe3IsZyxifSlcbiAgICAgKi9cbiAgICB2YXIgcmdiMmhzbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJGsoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBnID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgbWluXyA9IG1pbiQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgbWF4XyA9IG1heCQxKHIsIGcsIGIpO1xuICAgICAgICB2YXIgZGVsdGEgPSBtYXhfIC0gbWluXztcbiAgICAgICAgdmFyIGgscyx2O1xuICAgICAgICB2ID0gbWF4XyAvIDI1NS4wO1xuICAgICAgICBpZiAobWF4XyA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IE51bWJlci5OYU47XG4gICAgICAgICAgICBzID0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHMgPSBkZWx0YSAvIG1heF87XG4gICAgICAgICAgICBpZiAociA9PT0gbWF4XykgeyBoID0gKGcgLSBiKSAvIGRlbHRhOyB9XG4gICAgICAgICAgICBpZiAoZyA9PT0gbWF4XykgeyBoID0gMisoYiAtIHIpIC8gZGVsdGE7IH1cbiAgICAgICAgICAgIGlmIChiID09PSBtYXhfKSB7IGggPSA0KyhyIC0gZykgLyBkZWx0YTsgfVxuICAgICAgICAgICAgaCAqPSA2MDtcbiAgICAgICAgICAgIGlmIChoIDwgMCkgeyBoICs9IDM2MDsgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbaCwgcywgdl1cbiAgICB9O1xuXG4gICAgdmFyIHJnYjJoc3YkMSA9IHJnYjJoc2w7XG5cbiAgICB2YXIgdW5wYWNrJGogPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIGZsb29yJDIgPSBNYXRoLmZsb29yO1xuXG4gICAgdmFyIGhzdjJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxLCBhc3NpZ24kMiwgYXNzaWduJDMsIGFzc2lnbiQ0LCBhc3NpZ24kNTtcblxuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuICAgICAgICBhcmdzID0gdW5wYWNrJGooYXJncywgJ2hzdicpO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBzID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIHYgPSBhcmdzWzJdO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIHYgKj0gMjU1O1xuICAgICAgICBpZiAocyA9PT0gMCkge1xuICAgICAgICAgICAgciA9IGcgPSBiID0gdjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChoID09PSAzNjApIHsgaCA9IDA7IH1cbiAgICAgICAgICAgIGlmIChoID4gMzYwKSB7IGggLT0gMzYwOyB9XG4gICAgICAgICAgICBpZiAoaCA8IDApIHsgaCArPSAzNjA7IH1cbiAgICAgICAgICAgIGggLz0gNjA7XG5cbiAgICAgICAgICAgIHZhciBpID0gZmxvb3IkMihoKTtcbiAgICAgICAgICAgIHZhciBmID0gaCAtIGk7XG4gICAgICAgICAgICB2YXIgcCA9IHYgKiAoMSAtIHMpO1xuICAgICAgICAgICAgdmFyIHEgPSB2ICogKDEgLSBzICogZik7XG4gICAgICAgICAgICB2YXIgdCA9IHYgKiAoMSAtIHMgKiAoMSAtIGYpKTtcblxuICAgICAgICAgICAgc3dpdGNoIChpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiAoYXNzaWduID0gW3YsIHQsIHBdLCByID0gYXNzaWduWzBdLCBnID0gYXNzaWduWzFdLCBiID0gYXNzaWduWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IChhc3NpZ24kMSA9IFtxLCB2LCBwXSwgciA9IGFzc2lnbiQxWzBdLCBnID0gYXNzaWduJDFbMV0sIGIgPSBhc3NpZ24kMVsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSAyOiAoYXNzaWduJDIgPSBbcCwgdiwgdF0sIHIgPSBhc3NpZ24kMlswXSwgZyA9IGFzc2lnbiQyWzFdLCBiID0gYXNzaWduJDJbMl0pOyBicmVha1xuICAgICAgICAgICAgICAgIGNhc2UgMzogKGFzc2lnbiQzID0gW3AsIHEsIHZdLCByID0gYXNzaWduJDNbMF0sIGcgPSBhc3NpZ24kM1sxXSwgYiA9IGFzc2lnbiQzWzJdKTsgYnJlYWtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IChhc3NpZ24kNCA9IFt0LCBwLCB2XSwgciA9IGFzc2lnbiQ0WzBdLCBnID0gYXNzaWduJDRbMV0sIGIgPSBhc3NpZ24kNFsyXSk7IGJyZWFrXG4gICAgICAgICAgICAgICAgY2FzZSA1OiAoYXNzaWduJDUgPSBbdiwgcCwgcV0sIHIgPSBhc3NpZ24kNVswXSwgZyA9IGFzc2lnbiQ1WzFdLCBiID0gYXNzaWduJDVbMl0pOyBicmVha1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsYXJncy5sZW5ndGggPiAzP2FyZ3NbM106MV07XG4gICAgfTtcblxuICAgIHZhciBoc3YycmdiXzEgPSBoc3YycmdiO1xuXG4gICAgdmFyIHVucGFjayRpID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJGYgPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkYyA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciR2ID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkOCA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMmhzdiA9IHJnYjJoc3YkMTtcblxuICAgIENvbG9yJHYucHJvdG90eXBlLmhzdiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcmdiMmhzdih0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYy5oc3YgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHYsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydoc3YnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDguZm9ybWF0LmhzdiA9IGhzdjJyZ2JfMTtcblxuICAgIGlucHV0JDguYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skaShhcmdzLCAnaHN2Jyk7XG4gICAgICAgICAgICBpZiAodHlwZSRmKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdoc3YnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgbGFiQ29uc3RhbnRzID0ge1xuICAgICAgICAvLyBDb3JyZXNwb25kcyByb3VnaGx5IHRvIFJHQiBicmlnaHRlci9kYXJrZXJcbiAgICAgICAgS246IDE4LFxuXG4gICAgICAgIC8vIEQ2NSBzdGFuZGFyZCByZWZlcmVudFxuICAgICAgICBYbjogMC45NTA0NzAsXG4gICAgICAgIFluOiAxLFxuICAgICAgICBabjogMS4wODg4MzAsXG5cbiAgICAgICAgdDA6IDAuMTM3OTMxMDM0LCAgLy8gNCAvIDI5XG4gICAgICAgIHQxOiAwLjIwNjg5NjU1MiwgIC8vIDYgLyAyOVxuICAgICAgICB0MjogMC4xMjg0MTg1NSwgICAvLyAzICogdDEgKiB0MVxuICAgICAgICB0MzogMC4wMDg4NTY0NTIsICAvLyB0MSAqIHQxICogdDFcbiAgICB9O1xuXG4gICAgdmFyIExBQl9DT05TVEFOVFMkMyA9IGxhYkNvbnN0YW50cztcbiAgICB2YXIgdW5wYWNrJGggPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHBvdyRhID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgcmdiMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skaChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IHJnYjJ4eXoocixnLGIpO1xuICAgICAgICB2YXIgeCA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgeSA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgeiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgbCA9IDExNiAqIHkgLSAxNjtcbiAgICAgICAgcmV0dXJuIFtsIDwgMCA/IDAgOiBsLCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopXTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYl94eXogPSBmdW5jdGlvbiAocikge1xuICAgICAgICBpZiAoKHIgLz0gMjU1KSA8PSAwLjA0MDQ1KSB7IHJldHVybiByIC8gMTIuOTI7IH1cbiAgICAgICAgcmV0dXJuIHBvdyRhKChyICsgMC4wNTUpIC8gMS4wNTUsIDIuNCk7XG4gICAgfTtcblxuICAgIHZhciB4eXpfbGFiID0gZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgaWYgKHQgPiBMQUJfQ09OU1RBTlRTJDMudDMpIHsgcmV0dXJuIHBvdyRhKHQsIDEgLyAzKTsgfVxuICAgICAgICByZXR1cm4gdCAvIExBQl9DT05TVEFOVFMkMy50MiArIExBQl9DT05TVEFOVFMkMy50MDtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJ4eXogPSBmdW5jdGlvbiAocixnLGIpIHtcbiAgICAgICAgciA9IHJnYl94eXoocik7XG4gICAgICAgIGcgPSByZ2JfeHl6KGcpO1xuICAgICAgICBiID0gcmdiX3h5eihiKTtcbiAgICAgICAgdmFyIHggPSB4eXpfbGFiKCgwLjQxMjQ1NjQgKiByICsgMC4zNTc1NzYxICogZyArIDAuMTgwNDM3NSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlhuKTtcbiAgICAgICAgdmFyIHkgPSB4eXpfbGFiKCgwLjIxMjY3MjkgKiByICsgMC43MTUxNTIyICogZyArIDAuMDcyMTc1MCAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlluKTtcbiAgICAgICAgdmFyIHogPSB4eXpfbGFiKCgwLjAxOTMzMzkgKiByICsgMC4xMTkxOTIwICogZyArIDAuOTUwMzA0MSAqIGIpIC8gTEFCX0NPTlNUQU5UUyQzLlpuKTtcbiAgICAgICAgcmV0dXJuIFt4LHksel07XG4gICAgfTtcblxuICAgIHZhciByZ2IybGFiXzEgPSByZ2IybGFiJDI7XG5cbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQyID0gbGFiQ29uc3RhbnRzO1xuICAgIHZhciB1bnBhY2skZyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDkgPSBNYXRoLnBvdztcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBsYWIycmdiJDEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayRnKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYSA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBiID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHgseSx6LCByLGcsYl87XG5cbiAgICAgICAgeSA9IChsICsgMTYpIC8gMTE2O1xuICAgICAgICB4ID0gaXNOYU4oYSkgPyB5IDogeSArIGEgLyA1MDA7XG4gICAgICAgIHogPSBpc05hTihiKSA/IHkgOiB5IC0gYiAvIDIwMDtcblxuICAgICAgICB5ID0gTEFCX0NPTlNUQU5UUyQyLlluICogbGFiX3h5eih5KTtcbiAgICAgICAgeCA9IExBQl9DT05TVEFOVFMkMi5YbiAqIGxhYl94eXooeCk7XG4gICAgICAgIHogPSBMQUJfQ09OU1RBTlRTJDIuWm4gKiBsYWJfeHl6KHopO1xuXG4gICAgICAgIHIgPSB4eXpfcmdiKDMuMjQwNDU0MiAqIHggLSAxLjUzNzEzODUgKiB5IC0gMC40OTg1MzE0ICogeik7ICAvLyBENjUgLT4gc1JHQlxuICAgICAgICBnID0geHl6X3JnYigtMC45NjkyNjYwICogeCArIDEuODc2MDEwOCAqIHkgKyAwLjA0MTU1NjAgKiB6KTtcbiAgICAgICAgYl8gPSB4eXpfcmdiKDAuMDU1NjQzNCAqIHggLSAwLjIwNDAyNTkgKiB5ICsgMS4wNTcyMjUyICogeik7XG5cbiAgICAgICAgcmV0dXJuIFtyLGcsYl8sYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgeHl6X3JnYiA9IGZ1bmN0aW9uIChyKSB7XG4gICAgICAgIHJldHVybiAyNTUgKiAociA8PSAwLjAwMzA0ID8gMTIuOTIgKiByIDogMS4wNTUgKiBwb3ckOShyLCAxIC8gMi40KSAtIDAuMDU1KVxuICAgIH07XG5cbiAgICB2YXIgbGFiX3h5eiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgIHJldHVybiB0ID4gTEFCX0NPTlNUQU5UUyQyLnQxID8gdCAqIHQgKiB0IDogTEFCX0NPTlNUQU5UUyQyLnQyICogKHQgLSBMQUJfQ09OU1RBTlRTJDIudDApXG4gICAgfTtcblxuICAgIHZhciBsYWIycmdiXzEgPSBsYWIycmdiJDE7XG5cbiAgICB2YXIgdW5wYWNrJGYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRiID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHUgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ3ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGFiJDEgPSByZ2IybGFiXzE7XG5cbiAgICBDb2xvciR1LnByb3RvdHlwZS5sYWIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJsYWIkMSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkYi5sYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJHUsIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydsYWInXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0JDcuZm9ybWF0LmxhYiA9IGxhYjJyZ2JfMTtcblxuICAgIGlucHV0JDcuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMixcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skZihhcmdzLCAnbGFiJyk7XG4gICAgICAgICAgICBpZiAodHlwZSRlKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdsYWInO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJGUgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIFJBRDJERUcgPSB1dGlscy5SQUQyREVHO1xuICAgIHZhciBzcXJ0JDMgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIGF0YW4yJDIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciByb3VuZCQyID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciBsYWIybGNoJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIHJlZiA9IHVucGFjayRlKGFyZ3MsICdsYWInKTtcbiAgICAgICAgdmFyIGwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZlsyXTtcbiAgICAgICAgdmFyIGMgPSBzcXJ0JDMoYSAqIGEgKyBiICogYik7XG4gICAgICAgIHZhciBoID0gKGF0YW4yJDIoYiwgYSkgKiBSQUQyREVHICsgMzYwKSAlIDM2MDtcbiAgICAgICAgaWYgKHJvdW5kJDIoYyoxMDAwMCkgPT09IDApIHsgaCA9IE51bWJlci5OYU47IH1cbiAgICAgICAgcmV0dXJuIFtsLCBjLCBoXTtcbiAgICB9O1xuXG4gICAgdmFyIGxhYjJsY2hfMSA9IGxhYjJsY2gkMjtcblxuICAgIHZhciB1bnBhY2skZCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcmdiMmxhYiA9IHJnYjJsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCQxID0gbGFiMmxjaF8xO1xuXG4gICAgdmFyIHJnYjJsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGQoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2IybGFiKHIsZyxiKTtcbiAgICAgICAgdmFyIGwgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEgPSByZWYkMVsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBsYWIybGNoJDEobCxhLGJfKTtcbiAgICB9O1xuXG4gICAgdmFyIHJnYjJsY2hfMSA9IHJnYjJsY2gkMTtcblxuICAgIHZhciB1bnBhY2skYyA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgREVHMlJBRCA9IHV0aWxzLkRFRzJSQUQ7XG4gICAgdmFyIHNpbiQzID0gTWF0aC5zaW47XG4gICAgdmFyIGNvcyQzID0gTWF0aC5jb3M7XG5cbiAgICB2YXIgbGNoMmxhYiQyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIC8qXG4gICAgICAgIENvbnZlcnQgZnJvbSBhIHF1YWxpdGF0aXZlIHBhcmFtZXRlciBoIGFuZCBhIHF1YW50aXRhdGl2ZSBwYXJhbWV0ZXIgbCB0byBhIDI0LWJpdCBwaXhlbC5cbiAgICAgICAgVGhlc2UgZm9ybXVsYXMgd2VyZSBpbnZlbnRlZCBieSBEYXZpZCBEYWxyeW1wbGUgdG8gb2J0YWluIG1heGltdW0gY29udHJhc3Qgd2l0aG91dCBnb2luZ1xuICAgICAgICBvdXQgb2YgZ2FtdXQgaWYgdGhlIHBhcmFtZXRlcnMgYXJlIGluIHRoZSByYW5nZSAwLTEuXG5cbiAgICAgICAgQSBzYXR1cmF0aW9uIG11bHRpcGxpZXIgd2FzIGFkZGVkIGJ5IEdyZWdvciBBaXNjaFxuICAgICAgICAqL1xuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJGMoYXJncywgJ2xjaCcpO1xuICAgICAgICB2YXIgbCA9IHJlZlswXTtcbiAgICAgICAgdmFyIGMgPSByZWZbMV07XG4gICAgICAgIHZhciBoID0gcmVmWzJdO1xuICAgICAgICBpZiAoaXNOYU4oaCkpIHsgaCA9IDA7IH1cbiAgICAgICAgaCA9IGggKiBERUcyUkFEO1xuICAgICAgICByZXR1cm4gW2wsIGNvcyQzKGgpICogYywgc2luJDMoaCkgKiBjXVxuICAgIH07XG5cbiAgICB2YXIgbGNoMmxhYl8xID0gbGNoMmxhYiQyO1xuXG4gICAgdmFyIHVucGFjayRiID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiJDEgPSBsY2gybGFiXzE7XG4gICAgdmFyIGxhYjJyZ2IgPSBsYWIycmdiXzE7XG5cbiAgICB2YXIgbGNoMnJnYiQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIGFyZ3MgPSB1bnBhY2skYihhcmdzLCAnbGNoJyk7XG4gICAgICAgIHZhciBsID0gYXJnc1swXTtcbiAgICAgICAgdmFyIGMgPSBhcmdzWzFdO1xuICAgICAgICB2YXIgaCA9IGFyZ3NbMl07XG4gICAgICAgIHZhciByZWYgPSBsY2gybGFiJDEgKGwsYyxoKTtcbiAgICAgICAgdmFyIEwgPSByZWZbMF07XG4gICAgICAgIHZhciBhID0gcmVmWzFdO1xuICAgICAgICB2YXIgYl8gPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGxhYjJyZ2IgKEwsYSxiXyk7XG4gICAgICAgIHZhciByID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBnID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiID0gcmVmJDFbMl07XG4gICAgICAgIHJldHVybiBbciwgZywgYiwgYXJncy5sZW5ndGggPiAzID8gYXJnc1szXSA6IDFdO1xuICAgIH07XG5cbiAgICB2YXIgbGNoMnJnYl8xID0gbGNoMnJnYiQxO1xuXG4gICAgdmFyIHVucGFjayRhID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gycmdiID0gbGNoMnJnYl8xO1xuXG4gICAgdmFyIGhjbDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgdmFyIGhjbCA9IHVucGFjayRhKGFyZ3MsICdoY2wnKS5yZXZlcnNlKCk7XG4gICAgICAgIHJldHVybiBsY2gycmdiLmFwcGx5KHZvaWQgMCwgaGNsKTtcbiAgICB9O1xuXG4gICAgdmFyIGhjbDJyZ2JfMSA9IGhjbDJyZ2I7XG5cbiAgICB2YXIgdW5wYWNrJDkgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHR5cGUkZCA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIGNocm9tYSRhID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHQgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ2ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IybGNoID0gcmdiMmxjaF8xO1xuXG4gICAgQ29sb3IkdC5wcm90b3R5cGUubGNoID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYik7IH07XG4gICAgQ29sb3IkdC5wcm90b3R5cGUuaGNsID0gZnVuY3Rpb24oKSB7IHJldHVybiByZ2IybGNoKHRoaXMuX3JnYikucmV2ZXJzZSgpOyB9O1xuXG4gICAgY2hyb21hJGEubGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnbGNoJ10pICkpO1xuICAgIH07XG4gICAgY2hyb21hJGEuaGNsID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciR0LCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnaGNsJ10pICkpO1xuICAgIH07XG5cbiAgICBpbnB1dCQ2LmZvcm1hdC5sY2ggPSBsY2gycmdiXzE7XG4gICAgaW5wdXQkNi5mb3JtYXQuaGNsID0gaGNsMnJnYl8xO1xuXG4gICAgWydsY2gnLCdoY2wnXS5mb3JFYWNoKGZ1bmN0aW9uIChtKSB7IHJldHVybiBpbnB1dCQ2LmF1dG9kZXRlY3QucHVzaCh7XG4gICAgICAgIHA6IDIsXG4gICAgICAgIHRlc3Q6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgICAgICBhcmdzID0gdW5wYWNrJDkoYXJncywgbSk7XG4gICAgICAgICAgICBpZiAodHlwZSRkKGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTsgfSk7XG5cbiAgICAvKipcbiAgICBcdFgxMSBjb2xvciBuYW1lc1xuXG4gICAgXHRodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLWNvbG9yLyNzdmctY29sb3JcbiAgICAqL1xuXG4gICAgdmFyIHczY3gxMSQxID0ge1xuICAgICAgICBhbGljZWJsdWU6ICcjZjBmOGZmJyxcbiAgICAgICAgYW50aXF1ZXdoaXRlOiAnI2ZhZWJkNycsXG4gICAgICAgIGFxdWE6ICcjMDBmZmZmJyxcbiAgICAgICAgYXF1YW1hcmluZTogJyM3ZmZmZDQnLFxuICAgICAgICBhenVyZTogJyNmMGZmZmYnLFxuICAgICAgICBiZWlnZTogJyNmNWY1ZGMnLFxuICAgICAgICBiaXNxdWU6ICcjZmZlNGM0JyxcbiAgICAgICAgYmxhY2s6ICcjMDAwMDAwJyxcbiAgICAgICAgYmxhbmNoZWRhbG1vbmQ6ICcjZmZlYmNkJyxcbiAgICAgICAgYmx1ZTogJyMwMDAwZmYnLFxuICAgICAgICBibHVldmlvbGV0OiAnIzhhMmJlMicsXG4gICAgICAgIGJyb3duOiAnI2E1MmEyYScsXG4gICAgICAgIGJ1cmx5d29vZDogJyNkZWI4ODcnLFxuICAgICAgICBjYWRldGJsdWU6ICcjNWY5ZWEwJyxcbiAgICAgICAgY2hhcnRyZXVzZTogJyM3ZmZmMDAnLFxuICAgICAgICBjaG9jb2xhdGU6ICcjZDI2OTFlJyxcbiAgICAgICAgY29yYWw6ICcjZmY3ZjUwJyxcbiAgICAgICAgY29ybmZsb3dlcjogJyM2NDk1ZWQnLFxuICAgICAgICBjb3JuZmxvd2VyYmx1ZTogJyM2NDk1ZWQnLFxuICAgICAgICBjb3Juc2lsazogJyNmZmY4ZGMnLFxuICAgICAgICBjcmltc29uOiAnI2RjMTQzYycsXG4gICAgICAgIGN5YW46ICcjMDBmZmZmJyxcbiAgICAgICAgZGFya2JsdWU6ICcjMDAwMDhiJyxcbiAgICAgICAgZGFya2N5YW46ICcjMDA4YjhiJyxcbiAgICAgICAgZGFya2dvbGRlbnJvZDogJyNiODg2MGInLFxuICAgICAgICBkYXJrZ3JheTogJyNhOWE5YTknLFxuICAgICAgICBkYXJrZ3JlZW46ICcjMDA2NDAwJyxcbiAgICAgICAgZGFya2dyZXk6ICcjYTlhOWE5JyxcbiAgICAgICAgZGFya2toYWtpOiAnI2JkYjc2YicsXG4gICAgICAgIGRhcmttYWdlbnRhOiAnIzhiMDA4YicsXG4gICAgICAgIGRhcmtvbGl2ZWdyZWVuOiAnIzU1NmIyZicsXG4gICAgICAgIGRhcmtvcmFuZ2U6ICcjZmY4YzAwJyxcbiAgICAgICAgZGFya29yY2hpZDogJyM5OTMyY2MnLFxuICAgICAgICBkYXJrcmVkOiAnIzhiMDAwMCcsXG4gICAgICAgIGRhcmtzYWxtb246ICcjZTk5NjdhJyxcbiAgICAgICAgZGFya3NlYWdyZWVuOiAnIzhmYmM4ZicsXG4gICAgICAgIGRhcmtzbGF0ZWJsdWU6ICcjNDgzZDhiJyxcbiAgICAgICAgZGFya3NsYXRlZ3JheTogJyMyZjRmNGYnLFxuICAgICAgICBkYXJrc2xhdGVncmV5OiAnIzJmNGY0ZicsXG4gICAgICAgIGRhcmt0dXJxdW9pc2U6ICcjMDBjZWQxJyxcbiAgICAgICAgZGFya3Zpb2xldDogJyM5NDAwZDMnLFxuICAgICAgICBkZWVwcGluazogJyNmZjE0OTMnLFxuICAgICAgICBkZWVwc2t5Ymx1ZTogJyMwMGJmZmYnLFxuICAgICAgICBkaW1ncmF5OiAnIzY5Njk2OScsXG4gICAgICAgIGRpbWdyZXk6ICcjNjk2OTY5JyxcbiAgICAgICAgZG9kZ2VyYmx1ZTogJyMxZTkwZmYnLFxuICAgICAgICBmaXJlYnJpY2s6ICcjYjIyMjIyJyxcbiAgICAgICAgZmxvcmFsd2hpdGU6ICcjZmZmYWYwJyxcbiAgICAgICAgZm9yZXN0Z3JlZW46ICcjMjI4YjIyJyxcbiAgICAgICAgZnVjaHNpYTogJyNmZjAwZmYnLFxuICAgICAgICBnYWluc2Jvcm86ICcjZGNkY2RjJyxcbiAgICAgICAgZ2hvc3R3aGl0ZTogJyNmOGY4ZmYnLFxuICAgICAgICBnb2xkOiAnI2ZmZDcwMCcsXG4gICAgICAgIGdvbGRlbnJvZDogJyNkYWE1MjAnLFxuICAgICAgICBncmF5OiAnIzgwODA4MCcsXG4gICAgICAgIGdyZWVuOiAnIzAwODAwMCcsXG4gICAgICAgIGdyZWVueWVsbG93OiAnI2FkZmYyZicsXG4gICAgICAgIGdyZXk6ICcjODA4MDgwJyxcbiAgICAgICAgaG9uZXlkZXc6ICcjZjBmZmYwJyxcbiAgICAgICAgaG90cGluazogJyNmZjY5YjQnLFxuICAgICAgICBpbmRpYW5yZWQ6ICcjY2Q1YzVjJyxcbiAgICAgICAgaW5kaWdvOiAnIzRiMDA4MicsXG4gICAgICAgIGl2b3J5OiAnI2ZmZmZmMCcsXG4gICAgICAgIGtoYWtpOiAnI2YwZTY4YycsXG4gICAgICAgIGxhc2VybGVtb246ICcjZmZmZjU0JyxcbiAgICAgICAgbGF2ZW5kZXI6ICcjZTZlNmZhJyxcbiAgICAgICAgbGF2ZW5kZXJibHVzaDogJyNmZmYwZjUnLFxuICAgICAgICBsYXduZ3JlZW46ICcjN2NmYzAwJyxcbiAgICAgICAgbGVtb25jaGlmZm9uOiAnI2ZmZmFjZCcsXG4gICAgICAgIGxpZ2h0Ymx1ZTogJyNhZGQ4ZTYnLFxuICAgICAgICBsaWdodGNvcmFsOiAnI2YwODA4MCcsXG4gICAgICAgIGxpZ2h0Y3lhbjogJyNlMGZmZmYnLFxuICAgICAgICBsaWdodGdvbGRlbnJvZDogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdvbGRlbnJvZHllbGxvdzogJyNmYWZhZDInLFxuICAgICAgICBsaWdodGdyYXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRncmVlbjogJyM5MGVlOTAnLFxuICAgICAgICBsaWdodGdyZXk6ICcjZDNkM2QzJyxcbiAgICAgICAgbGlnaHRwaW5rOiAnI2ZmYjZjMScsXG4gICAgICAgIGxpZ2h0c2FsbW9uOiAnI2ZmYTA3YScsXG4gICAgICAgIGxpZ2h0c2VhZ3JlZW46ICcjMjBiMmFhJyxcbiAgICAgICAgbGlnaHRza3libHVlOiAnIzg3Y2VmYScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmF5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c2xhdGVncmV5OiAnIzc3ODg5OScsXG4gICAgICAgIGxpZ2h0c3RlZWxibHVlOiAnI2IwYzRkZScsXG4gICAgICAgIGxpZ2h0eWVsbG93OiAnI2ZmZmZlMCcsXG4gICAgICAgIGxpbWU6ICcjMDBmZjAwJyxcbiAgICAgICAgbGltZWdyZWVuOiAnIzMyY2QzMicsXG4gICAgICAgIGxpbmVuOiAnI2ZhZjBlNicsXG4gICAgICAgIG1hZ2VudGE6ICcjZmYwMGZmJyxcbiAgICAgICAgbWFyb29uOiAnIzgwMDAwMCcsXG4gICAgICAgIG1hcm9vbjI6ICcjN2YwMDAwJyxcbiAgICAgICAgbWFyb29uMzogJyNiMDMwNjAnLFxuICAgICAgICBtZWRpdW1hcXVhbWFyaW5lOiAnIzY2Y2RhYScsXG4gICAgICAgIG1lZGl1bWJsdWU6ICcjMDAwMGNkJyxcbiAgICAgICAgbWVkaXVtb3JjaGlkOiAnI2JhNTVkMycsXG4gICAgICAgIG1lZGl1bXB1cnBsZTogJyM5MzcwZGInLFxuICAgICAgICBtZWRpdW1zZWFncmVlbjogJyMzY2IzNzEnLFxuICAgICAgICBtZWRpdW1zbGF0ZWJsdWU6ICcjN2I2OGVlJyxcbiAgICAgICAgbWVkaXVtc3ByaW5nZ3JlZW46ICcjMDBmYTlhJyxcbiAgICAgICAgbWVkaXVtdHVycXVvaXNlOiAnIzQ4ZDFjYycsXG4gICAgICAgIG1lZGl1bXZpb2xldHJlZDogJyNjNzE1ODUnLFxuICAgICAgICBtaWRuaWdodGJsdWU6ICcjMTkxOTcwJyxcbiAgICAgICAgbWludGNyZWFtOiAnI2Y1ZmZmYScsXG4gICAgICAgIG1pc3R5cm9zZTogJyNmZmU0ZTEnLFxuICAgICAgICBtb2NjYXNpbjogJyNmZmU0YjUnLFxuICAgICAgICBuYXZham93aGl0ZTogJyNmZmRlYWQnLFxuICAgICAgICBuYXZ5OiAnIzAwMDA4MCcsXG4gICAgICAgIG9sZGxhY2U6ICcjZmRmNWU2JyxcbiAgICAgICAgb2xpdmU6ICcjODA4MDAwJyxcbiAgICAgICAgb2xpdmVkcmFiOiAnIzZiOGUyMycsXG4gICAgICAgIG9yYW5nZTogJyNmZmE1MDAnLFxuICAgICAgICBvcmFuZ2VyZWQ6ICcjZmY0NTAwJyxcbiAgICAgICAgb3JjaGlkOiAnI2RhNzBkNicsXG4gICAgICAgIHBhbGVnb2xkZW5yb2Q6ICcjZWVlOGFhJyxcbiAgICAgICAgcGFsZWdyZWVuOiAnIzk4ZmI5OCcsXG4gICAgICAgIHBhbGV0dXJxdW9pc2U6ICcjYWZlZWVlJyxcbiAgICAgICAgcGFsZXZpb2xldHJlZDogJyNkYjcwOTMnLFxuICAgICAgICBwYXBheWF3aGlwOiAnI2ZmZWZkNScsXG4gICAgICAgIHBlYWNocHVmZjogJyNmZmRhYjknLFxuICAgICAgICBwZXJ1OiAnI2NkODUzZicsXG4gICAgICAgIHBpbms6ICcjZmZjMGNiJyxcbiAgICAgICAgcGx1bTogJyNkZGEwZGQnLFxuICAgICAgICBwb3dkZXJibHVlOiAnI2IwZTBlNicsXG4gICAgICAgIHB1cnBsZTogJyM4MDAwODAnLFxuICAgICAgICBwdXJwbGUyOiAnIzdmMDA3ZicsXG4gICAgICAgIHB1cnBsZTM6ICcjYTAyMGYwJyxcbiAgICAgICAgcmViZWNjYXB1cnBsZTogJyM2NjMzOTknLFxuICAgICAgICByZWQ6ICcjZmYwMDAwJyxcbiAgICAgICAgcm9zeWJyb3duOiAnI2JjOGY4ZicsXG4gICAgICAgIHJveWFsYmx1ZTogJyM0MTY5ZTEnLFxuICAgICAgICBzYWRkbGVicm93bjogJyM4YjQ1MTMnLFxuICAgICAgICBzYWxtb246ICcjZmE4MDcyJyxcbiAgICAgICAgc2FuZHlicm93bjogJyNmNGE0NjAnLFxuICAgICAgICBzZWFncmVlbjogJyMyZThiNTcnLFxuICAgICAgICBzZWFzaGVsbDogJyNmZmY1ZWUnLFxuICAgICAgICBzaWVubmE6ICcjYTA1MjJkJyxcbiAgICAgICAgc2lsdmVyOiAnI2MwYzBjMCcsXG4gICAgICAgIHNreWJsdWU6ICcjODdjZWViJyxcbiAgICAgICAgc2xhdGVibHVlOiAnIzZhNWFjZCcsXG4gICAgICAgIHNsYXRlZ3JheTogJyM3MDgwOTAnLFxuICAgICAgICBzbGF0ZWdyZXk6ICcjNzA4MDkwJyxcbiAgICAgICAgc25vdzogJyNmZmZhZmEnLFxuICAgICAgICBzcHJpbmdncmVlbjogJyMwMGZmN2YnLFxuICAgICAgICBzdGVlbGJsdWU6ICcjNDY4MmI0JyxcbiAgICAgICAgdGFuOiAnI2QyYjQ4YycsXG4gICAgICAgIHRlYWw6ICcjMDA4MDgwJyxcbiAgICAgICAgdGhpc3RsZTogJyNkOGJmZDgnLFxuICAgICAgICB0b21hdG86ICcjZmY2MzQ3JyxcbiAgICAgICAgdHVycXVvaXNlOiAnIzQwZTBkMCcsXG4gICAgICAgIHZpb2xldDogJyNlZTgyZWUnLFxuICAgICAgICB3aGVhdDogJyNmNWRlYjMnLFxuICAgICAgICB3aGl0ZTogJyNmZmZmZmYnLFxuICAgICAgICB3aGl0ZXNtb2tlOiAnI2Y1ZjVmNScsXG4gICAgICAgIHllbGxvdzogJyNmZmZmMDAnLFxuICAgICAgICB5ZWxsb3dncmVlbjogJyM5YWNkMzInXG4gICAgfTtcblxuICAgIHZhciB3M2N4MTFfMSA9IHczY3gxMSQxO1xuXG4gICAgdmFyIENvbG9yJHMgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ1ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRjID0gdXRpbHMudHlwZTtcblxuICAgIHZhciB3M2N4MTEgPSB3M2N4MTFfMTtcbiAgICB2YXIgaGV4MnJnYiA9IGhleDJyZ2JfMTtcbiAgICB2YXIgcmdiMmhleCA9IHJnYjJoZXhfMTtcblxuICAgIENvbG9yJHMucHJvdG90eXBlLm5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIGhleCA9IHJnYjJoZXgodGhpcy5fcmdiLCAncmdiJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsaXN0ID0gT2JqZWN0LmtleXModzNjeDExKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHZhciBuID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgaWYgKHczY3gxMVtuXSA9PT0gaGV4KSB7IHJldHVybiBuLnRvTG93ZXJDYXNlKCk7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGV4O1xuICAgIH07XG5cbiAgICBpbnB1dCQ1LmZvcm1hdC5uYW1lZCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICh3M2N4MTFbbmFtZV0pIHsgcmV0dXJuIGhleDJyZ2IodzNjeDExW25hbWVdKTsgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Vua25vd24gY29sb3IgbmFtZTogJytuYW1lKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNS5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoaCkge1xuICAgICAgICAgICAgdmFyIHJlc3QgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoIGxlbi0tID4gMCApIHJlc3RbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gKyAxIF07XG5cbiAgICAgICAgICAgIGlmICghcmVzdC5sZW5ndGggJiYgdHlwZSRjKGgpID09PSAnc3RyaW5nJyAmJiB3M2N4MTFbaC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAnbmFtZWQnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICB2YXIgdW5wYWNrJDggPSB1dGlscy51bnBhY2s7XG5cbiAgICB2YXIgcmdiMm51bSQxID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skOChhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHJldHVybiAociA8PCAxNikgKyAoZyA8PCA4KSArIGI7XG4gICAgfTtcblxuICAgIHZhciByZ2IybnVtXzEgPSByZ2IybnVtJDE7XG5cbiAgICB2YXIgdHlwZSRiID0gdXRpbHMudHlwZTtcblxuICAgIHZhciBudW0ycmdiID0gZnVuY3Rpb24gKG51bSkge1xuICAgICAgICBpZiAodHlwZSRiKG51bSkgPT0gXCJudW1iZXJcIiAmJiBudW0gPj0gMCAmJiBudW0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgIHZhciByID0gbnVtID4+IDE2O1xuICAgICAgICAgICAgdmFyIGcgPSAobnVtID4+IDgpICYgMHhGRjtcbiAgICAgICAgICAgIHZhciBiID0gbnVtICYgMHhGRjtcbiAgICAgICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBudW0gY29sb3I6IFwiK251bSk7XG4gICAgfTtcblxuICAgIHZhciBudW0ycmdiXzEgPSBudW0ycmdiO1xuXG4gICAgdmFyIGNocm9tYSQ5ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHIgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQ0ID0gaW5wdXQkaDtcbiAgICB2YXIgdHlwZSRhID0gdXRpbHMudHlwZTtcblxuICAgIHZhciByZ2IybnVtID0gcmdiMm51bV8xO1xuXG4gICAgQ29sb3Ikci5wcm90b3R5cGUubnVtID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiByZ2IybnVtKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ5Lm51bSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkciwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ251bSddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkNC5mb3JtYXQubnVtID0gbnVtMnJnYl8xO1xuXG4gICAgaW5wdXQkNC5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiA1LFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGUkYShhcmdzWzBdKSA9PT0gJ251bWJlcicgJiYgYXJnc1swXSA+PSAwICYmIGFyZ3NbMF0gPD0gMHhGRkZGRkYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ251bSc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBjaHJvbWEkOCA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRxID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMyA9IGlucHV0JGg7XG4gICAgdmFyIHVucGFjayQ3ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDkgPSB1dGlscy50eXBlO1xuICAgIHZhciByb3VuZCQxID0gTWF0aC5yb3VuZDtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYiA9IGZ1bmN0aW9uKHJuZCkge1xuICAgICAgICBpZiAoIHJuZCA9PT0gdm9pZCAwICkgcm5kPXRydWU7XG5cbiAgICAgICAgaWYgKHJuZCA9PT0gZmFsc2UpIHsgcmV0dXJuIHRoaXMuX3JnYi5zbGljZSgwLDMpOyB9XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCwzKS5tYXAocm91bmQkMSk7XG4gICAgfTtcblxuICAgIENvbG9yJHEucHJvdG90eXBlLnJnYmEgPSBmdW5jdGlvbihybmQpIHtcbiAgICAgICAgaWYgKCBybmQgPT09IHZvaWQgMCApIHJuZD10cnVlO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2Iuc2xpY2UoMCw0KS5tYXAoZnVuY3Rpb24gKHYsaSkge1xuICAgICAgICAgICAgcmV0dXJuIGk8MyA/IChybmQgPT09IGZhbHNlID8gdiA6IHJvdW5kJDEodikpIDogdjtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIGNocm9tYSQ4LnJnYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICByZXR1cm4gbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IkcSwgWyBudWxsIF0uY29uY2F0KCBhcmdzLCBbJ3JnYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5mb3JtYXQucmdiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHZhciByZ2JhID0gdW5wYWNrJDcoYXJncywgJ3JnYmEnKTtcbiAgICAgICAgaWYgKHJnYmFbM10gPT09IHVuZGVmaW5lZCkgeyByZ2JhWzNdID0gMTsgfVxuICAgICAgICByZXR1cm4gcmdiYTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMy5hdXRvZGV0ZWN0LnB1c2goe1xuICAgICAgICBwOiAzLFxuICAgICAgICB0ZXN0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICAgICAgYXJncyA9IHVucGFjayQ3KGFyZ3MsICdyZ2JhJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ5KGFyZ3MpID09PSAnYXJyYXknICYmIChhcmdzLmxlbmd0aCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgIGFyZ3MubGVuZ3RoID09PSA0ICYmIHR5cGUkOShhcmdzWzNdKSA9PSAnbnVtYmVyJyAmJiBhcmdzWzNdID49IDAgJiYgYXJnc1szXSA8PSAxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAncmdiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqL1xuXG4gICAgdmFyIGxvZyQxID0gTWF0aC5sb2c7XG5cbiAgICB2YXIgdGVtcGVyYXR1cmUycmdiJDEgPSBmdW5jdGlvbiAoa2VsdmluKSB7XG4gICAgICAgIHZhciB0ZW1wID0ga2VsdmluIC8gMTAwO1xuICAgICAgICB2YXIgcixnLGI7XG4gICAgICAgIGlmICh0ZW1wIDwgNjYpIHtcbiAgICAgICAgICAgIHIgPSAyNTU7XG4gICAgICAgICAgICBnID0gdGVtcCA8IDYgPyAwIDogLTE1NS4yNTQ4NTU2MjcwOTE3OSAtIDAuNDQ1OTY5NTA0Njk1NzkxMzMgKiAoZyA9IHRlbXAtMikgKyAxMDQuNDkyMTYxOTkzOTM4ODggKiBsb2ckMShnKTtcbiAgICAgICAgICAgIGIgPSB0ZW1wIDwgMjAgPyAwIDogLTI1NC43NjkzNTE4NDEyMDkwMiArIDAuODI3NDA5NjA2NDAwNzM5NSAqIChiID0gdGVtcC0xMCkgKyAxMTUuNjc5OTQ0MDEwNjYxNDcgKiBsb2ckMShiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHIgPSAzNTEuOTc2OTA1NjY4MDU2OTMgKyAwLjExNDIwNjQ1Mzc4NDE2NSAqIChyID0gdGVtcC01NSkgLSA0MC4yNTM2NjMwOTMzMjEyNyAqIGxvZyQxKHIpO1xuICAgICAgICAgICAgZyA9IDMyNS40NDk0MTI1NzExOTc0ICsgMC4wNzk0MzQ1NjUzNjY2MjM0MiAqIChnID0gdGVtcC01MCkgLSAyOC4wODUyOTYzNTA3OTU3ICogbG9nJDEoZyk7XG4gICAgICAgICAgICBiID0gMjU1O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcixnLGIsMV07XG4gICAgfTtcblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2JfMSA9IHRlbXBlcmF0dXJlMnJnYiQxO1xuXG4gICAgLypcbiAgICAgKiBCYXNlZCBvbiBpbXBsZW1lbnRhdGlvbiBieSBOZWlsIEJhcnRsZXR0XG4gICAgICogaHR0cHM6Ly9naXRodWIuY29tL25laWxiYXJ0bGV0dC9jb2xvci10ZW1wZXJhdHVyZVxuICAgICAqKi9cblxuICAgIHZhciB0ZW1wZXJhdHVyZTJyZ2IgPSB0ZW1wZXJhdHVyZTJyZ2JfMTtcbiAgICB2YXIgdW5wYWNrJDYgPSB1dGlscy51bnBhY2s7XG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmdiID0gdW5wYWNrJDYoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJnYlswXSwgYiA9IHJnYlsyXTtcbiAgICAgICAgdmFyIG1pblRlbXAgPSAxMDAwO1xuICAgICAgICB2YXIgbWF4VGVtcCA9IDQwMDAwO1xuICAgICAgICB2YXIgZXBzID0gMC40O1xuICAgICAgICB2YXIgdGVtcDtcbiAgICAgICAgd2hpbGUgKG1heFRlbXAgLSBtaW5UZW1wID4gZXBzKSB7XG4gICAgICAgICAgICB0ZW1wID0gKG1heFRlbXAgKyBtaW5UZW1wKSAqIDAuNTtcbiAgICAgICAgICAgIHZhciByZ2IkMSA9IHRlbXBlcmF0dXJlMnJnYih0ZW1wKTtcbiAgICAgICAgICAgIGlmICgocmdiJDFbMl0gLyByZ2IkMVswXSkgPj0gKGIgLyByKSkge1xuICAgICAgICAgICAgICAgIG1heFRlbXAgPSB0ZW1wO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtaW5UZW1wID0gdGVtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcm91bmQodGVtcCk7XG4gICAgfTtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmVfMSA9IHJnYjJ0ZW1wZXJhdHVyZSQxO1xuXG4gICAgdmFyIGNocm9tYSQ3ID0gY2hyb21hXzE7XG4gICAgdmFyIENvbG9yJHAgPSBDb2xvcl8xO1xuICAgIHZhciBpbnB1dCQyID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2IydGVtcGVyYXR1cmUgPSByZ2IydGVtcGVyYXR1cmVfMTtcblxuICAgIENvbG9yJHAucHJvdG90eXBlLnRlbXAgPVxuICAgIENvbG9yJHAucHJvdG90eXBlLmtlbHZpbiA9XG4gICAgQ29sb3IkcC5wcm90b3R5cGUudGVtcGVyYXR1cmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHJnYjJ0ZW1wZXJhdHVyZSh0aGlzLl9yZ2IpO1xuICAgIH07XG5cbiAgICBjaHJvbWEkNy50ZW1wID1cbiAgICBjaHJvbWEkNy5rZWx2aW4gPVxuICAgIGNocm9tYSQ3LnRlbXBlcmF0dXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRwLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsndGVtcCddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMi5mb3JtYXQudGVtcCA9XG4gICAgaW5wdXQkMi5mb3JtYXQua2VsdmluID1cbiAgICBpbnB1dCQyLmZvcm1hdC50ZW1wZXJhdHVyZSA9IHRlbXBlcmF0dXJlMnJnYl8xO1xuXG4gICAgdmFyIHVucGFjayQ1ID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBjYnJ0ID0gTWF0aC5jYnJ0O1xuICAgIHZhciBwb3ckOCA9IE1hdGgucG93O1xuICAgIHZhciBzaWduJDEgPSBNYXRoLnNpZ247XG5cbiAgICB2YXIgcmdiMm9rbGFiJDIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgLy8gT0tMYWIgY29sb3Igc3BhY2UgaW1wbGVtZW50YXRpb24gdGFrZW4gZnJvbVxuICAgICAgICAvLyBodHRwczovL2JvdHRvc3Nvbi5naXRodWIuaW8vcG9zdHMvb2tsYWIvXG4gICAgICAgIHZhciByZWYgPSB1bnBhY2skNShhcmdzLCAncmdiJyk7XG4gICAgICAgIHZhciByID0gcmVmWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IFtyZ2IybHJnYihyIC8gMjU1KSwgcmdiMmxyZ2IoZyAvIDI1NSksIHJnYjJscmdiKGIgLyAyNTUpXTtcbiAgICAgICAgdmFyIGxyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBsZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgbGIgPSByZWYkMVsyXTtcbiAgICAgICAgdmFyIGwgPSBjYnJ0KDAuNDEyMjIxNDcwOCAqIGxyICsgMC41MzYzMzI1MzYzICogbGcgKyAwLjA1MTQ0NTk5MjkgKiBsYik7XG4gICAgICAgIHZhciBtID0gY2JydCgwLjIxMTkwMzQ5ODIgKiBsciArIDAuNjgwNjk5NTQ1MSAqIGxnICsgMC4xMDczOTY5NTY2ICogbGIpO1xuICAgICAgICB2YXIgcyA9IGNicnQoMC4wODgzMDI0NjE5ICogbHIgKyAwLjI4MTcxODgzNzYgKiBsZyArIDAuNjI5OTc4NzAwNSAqIGxiKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMC4yMTA0NTQyNTUzICogbCArIDAuNzkzNjE3Nzg1ICogbSAtIDAuMDA0MDcyMDQ2OCAqIHMsXG4gICAgICAgICAgICAxLjk3Nzk5ODQ5NTEgKiBsIC0gMi40Mjg1OTIyMDUgKiBtICsgMC40NTA1OTM3MDk5ICogcyxcbiAgICAgICAgICAgIDAuMDI1OTA0MDM3MSAqIGwgKyAwLjc4Mjc3MTc2NjIgKiBtIC0gMC44MDg2NzU3NjYgKiBzXG4gICAgICAgIF07XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsYWJfMSA9IHJnYjJva2xhYiQyO1xuXG4gICAgZnVuY3Rpb24gcmdiMmxyZ2IoYykge1xuICAgICAgICB2YXIgYWJzID0gTWF0aC5hYnMoYyk7XG4gICAgICAgIGlmIChhYnMgPCAwLjA0MDQ1KSB7XG4gICAgICAgICAgICByZXR1cm4gYyAvIDEyLjkyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoc2lnbiQxKGMpIHx8IDEpICogcG93JDgoKGFicyArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xuICAgIH1cblxuICAgIHZhciB1bnBhY2skNCA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgcG93JDcgPSBNYXRoLnBvdztcbiAgICB2YXIgc2lnbiA9IE1hdGguc2lnbjtcblxuICAgIC8qXG4gICAgICogTCogWzAuLjEwMF1cbiAgICAgKiBhIFstMTAwLi4xMDBdXG4gICAgICogYiBbLTEwMC4uMTAwXVxuICAgICAqL1xuICAgIHZhciBva2xhYjJyZ2IkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICBhcmdzID0gdW5wYWNrJDQoYXJncywgJ2xhYicpO1xuICAgICAgICB2YXIgTCA9IGFyZ3NbMF07XG4gICAgICAgIHZhciBhID0gYXJnc1sxXTtcbiAgICAgICAgdmFyIGIgPSBhcmdzWzJdO1xuXG4gICAgICAgIHZhciBsID0gcG93JDcoTCArIDAuMzk2MzM3Nzc3NCAqIGEgKyAwLjIxNTgwMzc1NzMgKiBiLCAzKTtcbiAgICAgICAgdmFyIG0gPSBwb3ckNyhMIC0gMC4xMDU1NjEzNDU4ICogYSAtIDAuMDYzODU0MTcyOCAqIGIsIDMpO1xuICAgICAgICB2YXIgcyA9IHBvdyQ3KEwgLSAwLjA4OTQ4NDE3NzUgKiBhIC0gMS4yOTE0ODU1NDggKiBiLCAzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgMjU1ICogbHJnYjJyZ2IoKzQuMDc2NzQxNjYyMSAqIGwgLSAzLjMwNzcxMTU5MTMgKiBtICsgMC4yMzA5Njk5MjkyICogcyksXG4gICAgICAgICAgICAyNTUgKiBscmdiMnJnYigtMS4yNjg0MzgwMDQ2ICogbCArIDIuNjA5NzU3NDAxMSAqIG0gLSAwLjM0MTMxOTM5NjUgKiBzKSxcbiAgICAgICAgICAgIDI1NSAqIGxyZ2IycmdiKC0wLjAwNDE5NjA4NjMgKiBsIC0gMC43MDM0MTg2MTQ3ICogbSArIDEuNzA3NjE0NzAxICogcyksXG4gICAgICAgICAgICBhcmdzLmxlbmd0aCA+IDMgPyBhcmdzWzNdIDogMVxuICAgICAgICBdO1xuICAgIH07XG5cbiAgICB2YXIgb2tsYWIycmdiXzEgPSBva2xhYjJyZ2IkMTtcblxuICAgIGZ1bmN0aW9uIGxyZ2IycmdiKGMpIHtcbiAgICAgICAgdmFyIGFicyA9IE1hdGguYWJzKGMpO1xuICAgICAgICBpZiAoYWJzID4gMC4wMDMxMzA4KSB7XG4gICAgICAgICAgICByZXR1cm4gKHNpZ24oYykgfHwgMSkgKiAoMS4wNTUgKiBwb3ckNyhhYnMsIDEgLyAyLjQpIC0gMC4wNTUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjICogMTIuOTI7XG4gICAgfVxuXG4gICAgdmFyIHVucGFjayQzID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciB0eXBlJDggPSB1dGlscy50eXBlO1xuICAgIHZhciBjaHJvbWEkNiA9IGNocm9tYV8xO1xuICAgIHZhciBDb2xvciRvID0gQ29sb3JfMTtcbiAgICB2YXIgaW5wdXQkMSA9IGlucHV0JGg7XG5cbiAgICB2YXIgcmdiMm9rbGFiJDEgPSByZ2Iyb2tsYWJfMTtcblxuICAgIENvbG9yJG8ucHJvdG90eXBlLm9rbGFiID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGFiJDEodGhpcy5fcmdiKTtcbiAgICB9O1xuXG4gICAgY2hyb21hJDYub2tsYWIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgcmV0dXJuIG5ldyAoRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQuYXBwbHkoIENvbG9yJG8sIFsgbnVsbCBdLmNvbmNhdCggYXJncywgWydva2xhYiddKSApKTtcbiAgICB9O1xuXG4gICAgaW5wdXQkMS5mb3JtYXQub2tsYWIgPSBva2xhYjJyZ2JfMTtcblxuICAgIGlucHV0JDEuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2skMyhhcmdzLCAnb2tsYWInKTtcbiAgICAgICAgICAgIGlmICh0eXBlJDgoYXJncykgPT09ICdhcnJheScgJiYgYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJ29rbGFiJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgdmFyIHVucGFjayQyID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciByZ2Iyb2tsYWIgPSByZ2Iyb2tsYWJfMTtcbiAgICB2YXIgbGFiMmxjaCA9IGxhYjJsY2hfMTtcblxuICAgIHZhciByZ2Iyb2tsY2gkMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB2YXIgcmVmID0gdW5wYWNrJDIoYXJncywgJ3JnYicpO1xuICAgICAgICB2YXIgciA9IHJlZlswXTtcbiAgICAgICAgdmFyIGcgPSByZWZbMV07XG4gICAgICAgIHZhciBiID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSByZ2Iyb2tsYWIociwgZywgYik7XG4gICAgICAgIHZhciBsID0gcmVmJDFbMF07XG4gICAgICAgIHZhciBhID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiXyA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gbGFiMmxjaChsLCBhLCBiXyk7XG4gICAgfTtcblxuICAgIHZhciByZ2Iyb2tsY2hfMSA9IHJnYjJva2xjaCQxO1xuXG4gICAgdmFyIHVucGFjayQxID0gdXRpbHMudW5wYWNrO1xuICAgIHZhciBsY2gybGFiID0gbGNoMmxhYl8xO1xuICAgIHZhciBva2xhYjJyZ2IgPSBva2xhYjJyZ2JfMTtcblxuICAgIHZhciBva2xjaDJyZ2IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgYXJncyA9IHVucGFjayQxKGFyZ3MsICdsY2gnKTtcbiAgICAgICAgdmFyIGwgPSBhcmdzWzBdO1xuICAgICAgICB2YXIgYyA9IGFyZ3NbMV07XG4gICAgICAgIHZhciBoID0gYXJnc1syXTtcbiAgICAgICAgdmFyIHJlZiA9IGxjaDJsYWIobCwgYywgaCk7XG4gICAgICAgIHZhciBMID0gcmVmWzBdO1xuICAgICAgICB2YXIgYSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGJfID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBva2xhYjJyZ2IoTCwgYSwgYl8pO1xuICAgICAgICB2YXIgciA9IHJlZiQxWzBdO1xuICAgICAgICB2YXIgZyA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgYiA9IHJlZiQxWzJdO1xuICAgICAgICByZXR1cm4gW3IsIGcsIGIsIGFyZ3MubGVuZ3RoID4gMyA/IGFyZ3NbM10gOiAxXTtcbiAgICB9O1xuXG4gICAgdmFyIG9rbGNoMnJnYl8xID0gb2tsY2gycmdiO1xuXG4gICAgdmFyIHVucGFjayA9IHV0aWxzLnVucGFjaztcbiAgICB2YXIgdHlwZSQ3ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2hyb21hJDUgPSBjaHJvbWFfMTtcbiAgICB2YXIgQ29sb3IkbiA9IENvbG9yXzE7XG4gICAgdmFyIGlucHV0ID0gaW5wdXQkaDtcblxuICAgIHZhciByZ2Iyb2tsY2ggPSByZ2Iyb2tsY2hfMTtcblxuICAgIENvbG9yJG4ucHJvdG90eXBlLm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gcmdiMm9rbGNoKHRoaXMuX3JnYik7XG4gICAgfTtcblxuICAgIGNocm9tYSQ1Lm9rbGNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICB3aGlsZSAoIGxlbi0tICkgYXJnc1sgbGVuIF0gPSBhcmd1bWVudHNbIGxlbiBdO1xuXG4gICAgICAgIHJldHVybiBuZXcgKEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kLmFwcGx5KCBDb2xvciRuLCBbIG51bGwgXS5jb25jYXQoIGFyZ3MsIFsnb2tsY2gnXSkgKSk7XG4gICAgfTtcblxuICAgIGlucHV0LmZvcm1hdC5va2xjaCA9IG9rbGNoMnJnYl8xO1xuXG4gICAgaW5wdXQuYXV0b2RldGVjdC5wdXNoKHtcbiAgICAgICAgcDogMyxcbiAgICAgICAgdGVzdDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgIHdoaWxlICggbGVuLS0gKSBhcmdzWyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuIF07XG5cbiAgICAgICAgICAgIGFyZ3MgPSB1bnBhY2soYXJncywgJ29rbGNoJyk7XG4gICAgICAgICAgICBpZiAodHlwZSQ3KGFyZ3MpID09PSAnYXJyYXknICYmIGFyZ3MubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdva2xjaCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIHZhciBDb2xvciRtID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ2ID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJG0ucHJvdG90eXBlLmFscGhhID0gZnVuY3Rpb24oYSwgbXV0YXRlKSB7XG4gICAgICAgIGlmICggbXV0YXRlID09PSB2b2lkIDAgKSBtdXRhdGU9ZmFsc2U7XG5cbiAgICAgICAgaWYgKGEgIT09IHVuZGVmaW5lZCAmJiB0eXBlJDYoYSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobXV0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcmdiWzNdID0gYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkbShbdGhpcy5fcmdiWzBdLCB0aGlzLl9yZ2JbMV0sIHRoaXMuX3JnYlsyXSwgYV0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcmdiWzNdO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkbCA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRsLnByb3RvdHlwZS5jbGlwcGVkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZ2IuX2NsaXBwZWQgfHwgZmFsc2U7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRrID0gQ29sb3JfMTtcbiAgICB2YXIgTEFCX0NPTlNUQU5UUyQxID0gbGFiQ29uc3RhbnRzO1xuXG4gICAgQ29sb3Ikay5wcm90b3R5cGUuZGFya2VuID0gZnVuY3Rpb24oYW1vdW50KSB7XG4gICAgXHRpZiAoIGFtb3VudCA9PT0gdm9pZCAwICkgYW1vdW50PTE7XG5cbiAgICBcdHZhciBtZSA9IHRoaXM7XG4gICAgXHR2YXIgbGFiID0gbWUubGFiKCk7XG4gICAgXHRsYWJbMF0gLT0gTEFCX0NPTlNUQU5UUyQxLktuICogYW1vdW50O1xuICAgIFx0cmV0dXJuIG5ldyBDb2xvciRrKGxhYiwgJ2xhYicpLmFscGhhKG1lLmFscGhhKCksIHRydWUpO1xuICAgIH07XG5cbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlbiA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHRyZXR1cm4gdGhpcy5kYXJrZW4oLWFtb3VudCk7XG4gICAgfTtcblxuICAgIENvbG9yJGsucHJvdG90eXBlLmRhcmtlciA9IENvbG9yJGsucHJvdG90eXBlLmRhcmtlbjtcbiAgICBDb2xvciRrLnByb3RvdHlwZS5icmlnaHRlciA9IENvbG9yJGsucHJvdG90eXBlLmJyaWdodGVuO1xuXG4gICAgdmFyIENvbG9yJGogPSBDb2xvcl8xO1xuXG4gICAgQ29sb3Ikai5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKG1jKSB7XG4gICAgICAgIHZhciByZWYgPSBtYy5zcGxpdCgnLicpO1xuICAgICAgICB2YXIgbW9kZSA9IHJlZlswXTtcbiAgICAgICAgdmFyIGNoYW5uZWwgPSByZWZbMV07XG4gICAgICAgIHZhciBzcmMgPSB0aGlzW21vZGVdKCk7XG4gICAgICAgIGlmIChjaGFubmVsKSB7XG4gICAgICAgICAgICB2YXIgaSA9IG1vZGUuaW5kZXhPZihjaGFubmVsKSAtIChtb2RlLnN1YnN0cigwLCAyKSA9PT0gJ29rJyA/IDIgOiAwKTtcbiAgICAgICAgICAgIGlmIChpID4gLTEpIHsgcmV0dXJuIHNyY1tpXTsgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKChcInVua25vd24gY2hhbm5lbCBcIiArIGNoYW5uZWwgKyBcIiBpbiBtb2RlIFwiICsgbW9kZSkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHNyYztcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkaSA9IENvbG9yXzE7XG4gICAgdmFyIHR5cGUkNSA9IHV0aWxzLnR5cGU7XG4gICAgdmFyIHBvdyQ2ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgRVBTID0gMWUtNztcbiAgICB2YXIgTUFYX0lURVIgPSAyMDtcblxuICAgIENvbG9yJGkucHJvdG90eXBlLmx1bWluYW5jZSA9IGZ1bmN0aW9uKGx1bSkge1xuICAgICAgICBpZiAobHVtICE9PSB1bmRlZmluZWQgJiYgdHlwZSQ1KGx1bSkgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBpZiAobHVtID09PSAwKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIHB1cmUgYmxhY2tcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yJGkoWzAsMCwwLHRoaXMuX3JnYlszXV0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChsdW0gPT09IDEpIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gcHVyZSB3aGl0ZVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTUsdGhpcy5fcmdiWzNdXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29tcHV0ZSBuZXcgY29sb3IgdXNpbmcuLi5cbiAgICAgICAgICAgIHZhciBjdXJfbHVtID0gdGhpcy5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgIHZhciBtb2RlID0gJ3JnYic7XG4gICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSBNQVhfSVRFUjtcblxuICAgICAgICAgICAgdmFyIHRlc3QgPSBmdW5jdGlvbiAobG93LCBoaWdoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG1pZCA9IGxvdy5pbnRlcnBvbGF0ZShoaWdoLCAwLjUsIG1vZGUpO1xuICAgICAgICAgICAgICAgIHZhciBsbSA9IG1pZC5sdW1pbmFuY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoTWF0aC5hYnMobHVtIC0gbG0pIDwgRVBTIHx8ICFtYXhfaXRlci0tKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIGVub3VnaFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWlkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbG0gPiBsdW0gPyB0ZXN0KGxvdywgbWlkKSA6IHRlc3QobWlkLCBoaWdoKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHZhciByZ2IgPSAoY3VyX2x1bSA+IGx1bSA/IHRlc3QobmV3IENvbG9yJGkoWzAsMCwwXSksIHRoaXMpIDogdGVzdCh0aGlzLCBuZXcgQ29sb3IkaShbMjU1LDI1NSwyNTVdKSkpLnJnYigpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRpKHJnYi5jb25jYXQoIFt0aGlzLl9yZ2JbM11dKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJnYjJsdW1pbmFuY2UuYXBwbHkodm9pZCAwLCAodGhpcy5fcmdiKS5zbGljZSgwLDMpKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgcmdiMmx1bWluYW5jZSA9IGZ1bmN0aW9uIChyLGcsYikge1xuICAgICAgICAvLyByZWxhdGl2ZSBsdW1pbmFuY2VcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jcmVsYXRpdmVsdW1pbmFuY2VkZWZcbiAgICAgICAgciA9IGx1bWluYW5jZV94KHIpO1xuICAgICAgICBnID0gbHVtaW5hbmNlX3goZyk7XG4gICAgICAgIGIgPSBsdW1pbmFuY2VfeChiKTtcbiAgICAgICAgcmV0dXJuIDAuMjEyNiAqIHIgKyAwLjcxNTIgKiBnICsgMC4wNzIyICogYjtcbiAgICB9O1xuXG4gICAgdmFyIGx1bWluYW5jZV94ID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgeCAvPSAyNTU7XG4gICAgICAgIHJldHVybiB4IDw9IDAuMDM5MjggPyB4LzEyLjkyIDogcG93JDYoKHgrMC4wNTUpLzEuMDU1LCAyLjQpO1xuICAgIH07XG5cbiAgICB2YXIgaW50ZXJwb2xhdG9yJDEgPSB7fTtcblxuICAgIHZhciBDb2xvciRoID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQ0ID0gdXRpbHMudHlwZTtcbiAgICB2YXIgaW50ZXJwb2xhdG9yID0gaW50ZXJwb2xhdG9yJDE7XG5cbiAgICB2YXIgbWl4JDEgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICBpZiAoIGYgPT09IHZvaWQgMCApIGY9MC41O1xuICAgICAgICB2YXIgcmVzdCA9IFtdLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoIC0gMztcbiAgICAgICAgd2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMyBdO1xuXG4gICAgICAgIHZhciBtb2RlID0gcmVzdFswXSB8fCAnbHJnYic7XG4gICAgICAgIGlmICghaW50ZXJwb2xhdG9yW21vZGVdICYmICFyZXN0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gZmFsbCBiYWNrIHRvIHRoZSBmaXJzdCBzdXBwb3J0ZWQgbW9kZVxuICAgICAgICAgICAgbW9kZSA9IE9iamVjdC5rZXlzKGludGVycG9sYXRvcilbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpbnRlcnBvbGF0b3JbbW9kZV0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigoXCJpbnRlcnBvbGF0aW9uIG1vZGUgXCIgKyBtb2RlICsgXCIgaXMgbm90IGRlZmluZWRcIikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlJDQoY29sMSkgIT09ICdvYmplY3QnKSB7IGNvbDEgPSBuZXcgQ29sb3IkaChjb2wxKTsgfVxuICAgICAgICBpZiAodHlwZSQ0KGNvbDIpICE9PSAnb2JqZWN0JykgeyBjb2wyID0gbmV3IENvbG9yJGgoY29sMik7IH1cbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRvclttb2RlXShjb2wxLCBjb2wyLCBmKVxuICAgICAgICAgICAgLmFscGhhKGNvbDEuYWxwaGEoKSArIGYgKiAoY29sMi5hbHBoYSgpIC0gY29sMS5hbHBoYSgpKSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRnID0gQ29sb3JfMTtcbiAgICB2YXIgbWl4ID0gbWl4JDE7XG5cbiAgICBDb2xvciRnLnByb3RvdHlwZS5taXggPVxuICAgIENvbG9yJGcucHJvdG90eXBlLmludGVycG9sYXRlID0gZnVuY3Rpb24oY29sMiwgZikge1xuICAgIFx0aWYgKCBmID09PSB2b2lkIDAgKSBmPTAuNTtcbiAgICBcdHZhciByZXN0ID0gW10sIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyO1xuICAgIFx0d2hpbGUgKCBsZW4tLSA+IDAgKSByZXN0WyBsZW4gXSA9IGFyZ3VtZW50c1sgbGVuICsgMiBdO1xuXG4gICAgXHRyZXR1cm4gbWl4LmFwcGx5KHZvaWQgMCwgWyB0aGlzLCBjb2wyLCBmIF0uY29uY2F0KCByZXN0ICkpO1xuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZiA9IENvbG9yXzE7XG5cbiAgICBDb2xvciRmLnByb3RvdHlwZS5wcmVtdWx0aXBseSA9IGZ1bmN0aW9uKG11dGF0ZSkge1xuICAgIFx0aWYgKCBtdXRhdGUgPT09IHZvaWQgMCApIG11dGF0ZT1mYWxzZTtcblxuICAgIFx0dmFyIHJnYiA9IHRoaXMuX3JnYjtcbiAgICBcdHZhciBhID0gcmdiWzNdO1xuICAgIFx0aWYgKG11dGF0ZSkge1xuICAgIFx0XHR0aGlzLl9yZ2IgPSBbcmdiWzBdKmEsIHJnYlsxXSphLCByZ2JbMl0qYSwgYV07XG4gICAgXHRcdHJldHVybiB0aGlzO1xuICAgIFx0fSBlbHNlIHtcbiAgICBcdFx0cmV0dXJuIG5ldyBDb2xvciRmKFtyZ2JbMF0qYSwgcmdiWzFdKmEsIHJnYlsyXSphLCBhXSwgJ3JnYicpO1xuICAgIFx0fVxuICAgIH07XG5cbiAgICB2YXIgQ29sb3IkZSA9IENvbG9yXzE7XG4gICAgdmFyIExBQl9DT05TVEFOVFMgPSBsYWJDb25zdGFudHM7XG5cbiAgICBDb2xvciRlLnByb3RvdHlwZS5zYXR1cmF0ZSA9IGZ1bmN0aW9uKGFtb3VudCkge1xuICAgIFx0aWYgKCBhbW91bnQgPT09IHZvaWQgMCApIGFtb3VudD0xO1xuXG4gICAgXHR2YXIgbWUgPSB0aGlzO1xuICAgIFx0dmFyIGxjaCA9IG1lLmxjaCgpO1xuICAgIFx0bGNoWzFdICs9IExBQl9DT05TVEFOVFMuS24gKiBhbW91bnQ7XG4gICAgXHRpZiAobGNoWzFdIDwgMCkgeyBsY2hbMV0gPSAwOyB9XG4gICAgXHRyZXR1cm4gbmV3IENvbG9yJGUobGNoLCAnbGNoJykuYWxwaGEobWUuYWxwaGEoKSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIENvbG9yJGUucHJvdG90eXBlLmRlc2F0dXJhdGUgPSBmdW5jdGlvbihhbW91bnQpIHtcbiAgICBcdGlmICggYW1vdW50ID09PSB2b2lkIDAgKSBhbW91bnQ9MTtcblxuICAgIFx0cmV0dXJuIHRoaXMuc2F0dXJhdGUoLWFtb3VudCk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRkID0gQ29sb3JfMTtcbiAgICB2YXIgdHlwZSQzID0gdXRpbHMudHlwZTtcblxuICAgIENvbG9yJGQucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChtYywgdmFsdWUsIG11dGF0ZSkge1xuICAgICAgICBpZiAoIG11dGF0ZSA9PT0gdm9pZCAwICkgbXV0YXRlID0gZmFsc2U7XG5cbiAgICAgICAgdmFyIHJlZiA9IG1jLnNwbGl0KCcuJyk7XG4gICAgICAgIHZhciBtb2RlID0gcmVmWzBdO1xuICAgICAgICB2YXIgY2hhbm5lbCA9IHJlZlsxXTtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXNbbW9kZV0oKTtcbiAgICAgICAgaWYgKGNoYW5uZWwpIHtcbiAgICAgICAgICAgIHZhciBpID0gbW9kZS5pbmRleE9mKGNoYW5uZWwpIC0gKG1vZGUuc3Vic3RyKDAsIDIpID09PSAnb2snID8gMiA6IDApO1xuICAgICAgICAgICAgaWYgKGkgPiAtMSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlJDModmFsdWUpID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUuY2hhckF0KDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcrJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gKz0gK3ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldICs9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSAqPSArdmFsdWUuc3Vic3RyKDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLyc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjW2ldIC89ICt2YWx1ZS5zdWJzdHIoMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1tpXSA9ICt2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQzKHZhbHVlKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgc3JjW2ldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5zdXBwb3J0ZWQgdmFsdWUgZm9yIENvbG9yLnNldFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG91dCA9IG5ldyBDb2xvciRkKHNyYywgbW9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKG11dGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZ2IgPSBvdXQuX3JnYjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKFwidW5rbm93biBjaGFubmVsIFwiICsgY2hhbm5lbCArIFwiIGluIG1vZGUgXCIgKyBtb2RlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3JjO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHZhciBDb2xvciRjID0gQ29sb3JfMTtcblxuICAgIHZhciByZ2IgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEuX3JnYjtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLl9yZ2I7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkYyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0teHl6MFswXSksXG4gICAgICAgICAgICB4eXowWzFdICsgZiAqICh4eXoxWzFdLXh5ejBbMV0pLFxuICAgICAgICAgICAgeHl6MFsyXSArIGYgKiAoeHl6MVsyXS14eXowWzJdKSxcbiAgICAgICAgICAgICdyZ2InXG4gICAgICAgIClcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEucmdiID0gcmdiO1xuXG4gICAgdmFyIENvbG9yJGIgPSBDb2xvcl8xO1xuICAgIHZhciBzcXJ0JDIgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIHBvdyQ1ID0gTWF0aC5wb3c7XG5cbiAgICB2YXIgbHJnYiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgICAgIHZhciByZWYgPSBjb2wxLl9yZ2I7XG4gICAgICAgIHZhciB4MSA9IHJlZlswXTtcbiAgICAgICAgdmFyIHkxID0gcmVmWzFdO1xuICAgICAgICB2YXIgejEgPSByZWZbMl07XG4gICAgICAgIHZhciByZWYkMSA9IGNvbDIuX3JnYjtcbiAgICAgICAgdmFyIHgyID0gcmVmJDFbMF07XG4gICAgICAgIHZhciB5MiA9IHJlZiQxWzFdO1xuICAgICAgICB2YXIgejIgPSByZWYkMVsyXTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRiKFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHgxLDIpICogKDEtZikgKyBwb3ckNSh4MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHkxLDIpICogKDEtZikgKyBwb3ckNSh5MiwyKSAqIGYpLFxuICAgICAgICAgICAgc3FydCQyKHBvdyQ1KHoxLDIpICogKDEtZikgKyBwb3ckNSh6MiwyKSAqIGYpLFxuICAgICAgICAgICAgJ3JnYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5scmdiID0gbHJnYjtcblxuICAgIHZhciBDb2xvciRhID0gQ29sb3JfMTtcblxuICAgIHZhciBsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEubGFiKCk7XG4gICAgICAgIHZhciB4eXoxID0gY29sMi5sYWIoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciRhKFxuICAgICAgICAgICAgeHl6MFswXSArIGYgKiAoeHl6MVswXS14eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0teHl6MFsxXSksXG4gICAgICAgICAgICB4eXowWzJdICsgZiAqICh4eXoxWzJdLXh5ejBbMl0pLFxuICAgICAgICAgICAgJ2xhYidcbiAgICAgICAgKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5sYWIgPSBsYWI7XG5cbiAgICB2YXIgQ29sb3IkOSA9IENvbG9yXzE7XG5cbiAgICB2YXIgX2hzeCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmLCBtKSB7XG4gICAgICAgIHZhciBhc3NpZ24sIGFzc2lnbiQxO1xuXG4gICAgICAgIHZhciB4eXowLCB4eXoxO1xuICAgICAgICBpZiAobSA9PT0gJ2hzbCcpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzdicpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzdigpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHN2KCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hjZycpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjZygpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNnKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2hzaScpIHtcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhzaSgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaHNpKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ2xjaCcgfHwgbSA9PT0gJ2hjbCcpIHtcbiAgICAgICAgICAgIG0gPSAnaGNsJztcbiAgICAgICAgICAgIHh5ejAgPSBjb2wxLmhjbCgpO1xuICAgICAgICAgICAgeHl6MSA9IGNvbDIuaGNsKCk7XG4gICAgICAgIH0gZWxzZSBpZiAobSA9PT0gJ29rbGNoJykge1xuICAgICAgICAgICAgeHl6MCA9IGNvbDEub2tsY2goKS5yZXZlcnNlKCk7XG4gICAgICAgICAgICB4eXoxID0gY29sMi5va2xjaCgpLnJldmVyc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBodWUwLCBodWUxLCBzYXQwLCBzYXQxLCBsYnYwLCBsYnYxO1xuICAgICAgICBpZiAobS5zdWJzdHIoMCwgMSkgPT09ICdoJyB8fCBtID09PSAnb2tsY2gnKSB7XG4gICAgICAgICAgICAoYXNzaWduID0geHl6MCwgaHVlMCA9IGFzc2lnblswXSwgc2F0MCA9IGFzc2lnblsxXSwgbGJ2MCA9IGFzc2lnblsyXSk7XG4gICAgICAgICAgICAoYXNzaWduJDEgPSB4eXoxLCBodWUxID0gYXNzaWduJDFbMF0sIHNhdDEgPSBhc3NpZ24kMVsxXSwgbGJ2MSA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzYXQsIGh1ZSwgbGJ2LCBkaDtcblxuICAgICAgICBpZiAoIWlzTmFOKGh1ZTApICYmICFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgLy8gYm90aCBjb2xvcnMgaGF2ZSBodWVcbiAgICAgICAgICAgIGlmIChodWUxID4gaHVlMCAmJiBodWUxIC0gaHVlMCA+IDE4MCkge1xuICAgICAgICAgICAgICAgIGRoID0gaHVlMSAtIChodWUwICsgMzYwKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaHVlMSA8IGh1ZTAgJiYgaHVlMCAtIGh1ZTEgPiAxODApIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgKyAzNjAgLSBodWUwO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IGh1ZTEgLSBodWUwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaHVlID0gaHVlMCArIGYgKiBkaDtcbiAgICAgICAgfSBlbHNlIGlmICghaXNOYU4oaHVlMCkpIHtcbiAgICAgICAgICAgIGh1ZSA9IGh1ZTA7XG4gICAgICAgICAgICBpZiAoKGxidjEgPT0gMSB8fCBsYnYxID09IDApICYmIG0gIT0gJ2hzdicpIHsgc2F0ID0gc2F0MDsgfVxuICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihodWUxKSkge1xuICAgICAgICAgICAgaHVlID0gaHVlMTtcbiAgICAgICAgICAgIGlmICgobGJ2MCA9PSAxIHx8IGxidjAgPT0gMCkgJiYgbSAhPSAnaHN2JykgeyBzYXQgPSBzYXQxOyB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBodWUgPSBOdW1iZXIuTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNhdCA9PT0gdW5kZWZpbmVkKSB7IHNhdCA9IHNhdDAgKyBmICogKHNhdDEgLSBzYXQwKTsgfVxuICAgICAgICBsYnYgPSBsYnYwICsgZiAqIChsYnYxIC0gbGJ2MCk7XG4gICAgICAgIHJldHVybiBtID09PSAnb2tsY2gnID8gbmV3IENvbG9yJDkoW2xidiwgc2F0LCBodWVdLCBtKSA6IG5ldyBDb2xvciQ5KFtodWUsIHNhdCwgbGJ2XSwgbSk7XG4gICAgfTtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3gkNSA9IF9oc3g7XG5cbiAgICB2YXIgbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICBcdHJldHVybiBpbnRlcnBvbGF0ZV9oc3gkNShjb2wxLCBjb2wyLCBmLCAnbGNoJyk7XG4gICAgfTtcblxuICAgIC8vIHJlZ2lzdGVyIGludGVycG9sYXRvclxuICAgIGludGVycG9sYXRvciQxLmxjaCA9IGxjaDtcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2wgPSBsY2g7XG5cbiAgICB2YXIgQ29sb3IkOCA9IENvbG9yXzE7XG5cbiAgICB2YXIgbnVtID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgdmFyIGMxID0gY29sMS5udW0oKTtcbiAgICAgICAgdmFyIGMyID0gY29sMi5udW0oKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ4KGMxICsgZiAqIChjMi1jMSksICdudW0nKVxuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5udW0gPSBudW07XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDQgPSBfaHN4O1xuXG4gICAgdmFyIGhjZyA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDQoY29sMSwgY29sMiwgZiwgJ2hjZycpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oY2cgPSBoY2c7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDMgPSBfaHN4O1xuXG4gICAgdmFyIGhzaSA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDMoY29sMSwgY29sMiwgZiwgJ2hzaScpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2kgPSBoc2k7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDIgPSBfaHN4O1xuXG4gICAgdmFyIGhzbCA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDIoY29sMSwgY29sMiwgZiwgJ2hzbCcpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc2wgPSBoc2w7XG5cbiAgICB2YXIgaW50ZXJwb2xhdGVfaHN4JDEgPSBfaHN4O1xuXG4gICAgdmFyIGhzdiA9IGZ1bmN0aW9uIChjb2wxLCBjb2wyLCBmKSB7XG4gICAgXHRyZXR1cm4gaW50ZXJwb2xhdGVfaHN4JDEoY29sMSwgY29sMiwgZiwgJ2hzdicpO1xuICAgIH07XG5cbiAgICAvLyByZWdpc3RlciBpbnRlcnBvbGF0b3JcbiAgICBpbnRlcnBvbGF0b3IkMS5oc3YgPSBoc3Y7XG5cbiAgICB2YXIgQ29sb3IkNyA9IENvbG9yXzE7XG5cbiAgICB2YXIgb2tsYWIgPSBmdW5jdGlvbiAoY29sMSwgY29sMiwgZikge1xuICAgICAgICB2YXIgeHl6MCA9IGNvbDEub2tsYWIoKTtcbiAgICAgICAgdmFyIHh5ejEgPSBjb2wyLm9rbGFiKCk7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNyhcbiAgICAgICAgICAgIHh5ejBbMF0gKyBmICogKHh5ejFbMF0gLSB4eXowWzBdKSxcbiAgICAgICAgICAgIHh5ejBbMV0gKyBmICogKHh5ejFbMV0gLSB4eXowWzFdKSxcbiAgICAgICAgICAgIHh5ejBbMl0gKyBmICogKHh5ejFbMl0gLSB4eXowWzJdKSxcbiAgICAgICAgICAgICdva2xhYidcbiAgICAgICAgKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsYWIgPSBva2xhYjtcblxuICAgIHZhciBpbnRlcnBvbGF0ZV9oc3ggPSBfaHN4O1xuXG4gICAgdmFyIG9rbGNoID0gZnVuY3Rpb24gKGNvbDEsIGNvbDIsIGYpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlX2hzeChjb2wxLCBjb2wyLCBmLCAnb2tsY2gnKTtcbiAgICB9O1xuXG4gICAgLy8gcmVnaXN0ZXIgaW50ZXJwb2xhdG9yXG4gICAgaW50ZXJwb2xhdG9yJDEub2tsY2ggPSBva2xjaDtcblxuICAgIHZhciBDb2xvciQ2ID0gQ29sb3JfMTtcbiAgICB2YXIgY2xpcF9yZ2IkMSA9IHV0aWxzLmNsaXBfcmdiO1xuICAgIHZhciBwb3ckNCA9IE1hdGgucG93O1xuICAgIHZhciBzcXJ0JDEgPSBNYXRoLnNxcnQ7XG4gICAgdmFyIFBJJDEgPSBNYXRoLlBJO1xuICAgIHZhciBjb3MkMiA9IE1hdGguY29zO1xuICAgIHZhciBzaW4kMiA9IE1hdGguc2luO1xuICAgIHZhciBhdGFuMiQxID0gTWF0aC5hdGFuMjtcblxuICAgIHZhciBhdmVyYWdlID0gZnVuY3Rpb24gKGNvbG9ycywgbW9kZSwgd2VpZ2h0cykge1xuICAgICAgICBpZiAoIG1vZGUgPT09IHZvaWQgMCApIG1vZGU9J2xyZ2InO1xuICAgICAgICBpZiAoIHdlaWdodHMgPT09IHZvaWQgMCApIHdlaWdodHM9bnVsbDtcblxuICAgICAgICB2YXIgbCA9IGNvbG9ycy5sZW5ndGg7XG4gICAgICAgIGlmICghd2VpZ2h0cykgeyB3ZWlnaHRzID0gQXJyYXkuZnJvbShuZXcgQXJyYXkobCkpLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9KTsgfVxuICAgICAgICAvLyBub3JtYWxpemUgd2VpZ2h0c1xuICAgICAgICB2YXIgayA9IGwgLyB3ZWlnaHRzLnJlZHVjZShmdW5jdGlvbihhLCBiKSB7IHJldHVybiBhICsgYjsgfSk7XG4gICAgICAgIHdlaWdodHMuZm9yRWFjaChmdW5jdGlvbiAodyxpKSB7IHdlaWdodHNbaV0gKj0gazsgfSk7XG4gICAgICAgIC8vIGNvbnZlcnQgY29sb3JzIHRvIENvbG9yIG9iamVjdHNcbiAgICAgICAgY29sb3JzID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gbmV3IENvbG9yJDYoYyk7IH0pO1xuICAgICAgICBpZiAobW9kZSA9PT0gJ2xyZ2InKSB7XG4gICAgICAgICAgICByZXR1cm4gX2F2ZXJhZ2VfbHJnYihjb2xvcnMsIHdlaWdodHMpXG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZpcnN0ID0gY29sb3JzLnNoaWZ0KCk7XG4gICAgICAgIHZhciB4eXogPSBmaXJzdC5nZXQobW9kZSk7XG4gICAgICAgIHZhciBjbnQgPSBbXTtcbiAgICAgICAgdmFyIGR4ID0gMDtcbiAgICAgICAgdmFyIGR5ID0gMDtcbiAgICAgICAgLy8gaW5pdGlhbCBjb2xvclxuICAgICAgICBmb3IgKHZhciBpPTA7IGk8eHl6Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB4eXpbaV0gPSAoeHl6W2ldIHx8IDApICogd2VpZ2h0c1swXTtcbiAgICAgICAgICAgIGNudC5wdXNoKGlzTmFOKHh5eltpXSkgPyAwIDogd2VpZ2h0c1swXSk7XG4gICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJyAmJiAhaXNOYU4oeHl6W2ldKSkge1xuICAgICAgICAgICAgICAgIHZhciBBID0geHl6W2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICBkeCArPSBjb3MkMihBKSAqIHdlaWdodHNbMF07XG4gICAgICAgICAgICAgICAgZHkgKz0gc2luJDIoQSkgKiB3ZWlnaHRzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGFscGhhID0gZmlyc3QuYWxwaGEoKSAqIHdlaWdodHNbMF07XG4gICAgICAgIGNvbG9ycy5mb3JFYWNoKGZ1bmN0aW9uIChjLGNpKSB7XG4gICAgICAgICAgICB2YXIgeHl6MiA9IGMuZ2V0KG1vZGUpO1xuICAgICAgICAgICAgYWxwaGEgKz0gYy5hbHBoYSgpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTx4eXoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzTmFOKHh5ejJbaV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGNudFtpXSArPSB3ZWlnaHRzW2NpKzFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobW9kZS5jaGFyQXQoaSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIEEgPSB4eXoyW2ldIC8gMTgwICogUEkkMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR4ICs9IGNvcyQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGR5ICs9IHNpbiQyKEEpICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHh5eltpXSArPSB4eXoyW2ldICogd2VpZ2h0c1tjaSsxXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSQxPTA7IGkkMTx4eXoubGVuZ3RoOyBpJDErKykge1xuICAgICAgICAgICAgaWYgKG1vZGUuY2hhckF0KGkkMSkgPT09ICdoJykge1xuICAgICAgICAgICAgICAgIHZhciBBJDEgPSBhdGFuMiQxKGR5IC8gY250W2kkMV0sIGR4IC8gY250W2kkMV0pIC8gUEkkMSAqIDE4MDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoQSQxIDwgMCkgeyBBJDEgKz0gMzYwOyB9XG4gICAgICAgICAgICAgICAgd2hpbGUgKEEkMSA+PSAzNjApIHsgQSQxIC09IDM2MDsgfVxuICAgICAgICAgICAgICAgIHh5eltpJDFdID0gQSQxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB4eXpbaSQxXSA9IHh5eltpJDFdL2NudFtpJDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFscGhhIC89IGw7XG4gICAgICAgIHJldHVybiAobmV3IENvbG9yJDYoeHl6LCBtb2RlKSkuYWxwaGEoYWxwaGEgPiAwLjk5OTk5ID8gMSA6IGFscGhhLCB0cnVlKTtcbiAgICB9O1xuXG5cbiAgICB2YXIgX2F2ZXJhZ2VfbHJnYiA9IGZ1bmN0aW9uIChjb2xvcnMsIHdlaWdodHMpIHtcbiAgICAgICAgdmFyIGwgPSBjb2xvcnMubGVuZ3RoO1xuICAgICAgICB2YXIgeHl6ID0gWzAsMCwwLDBdO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGkgPCBjb2xvcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBjb2wgPSBjb2xvcnNbaV07XG4gICAgICAgICAgICB2YXIgZiA9IHdlaWdodHNbaV0gLyBsO1xuICAgICAgICAgICAgdmFyIHJnYiA9IGNvbC5fcmdiO1xuICAgICAgICAgICAgeHl6WzBdICs9IHBvdyQ0KHJnYlswXSwyKSAqIGY7XG4gICAgICAgICAgICB4eXpbMV0gKz0gcG93JDQocmdiWzFdLDIpICogZjtcbiAgICAgICAgICAgIHh5elsyXSArPSBwb3ckNChyZ2JbMl0sMikgKiBmO1xuICAgICAgICAgICAgeHl6WzNdICs9IHJnYlszXSAqIGY7XG4gICAgICAgIH1cbiAgICAgICAgeHl6WzBdID0gc3FydCQxKHh5elswXSk7XG4gICAgICAgIHh5elsxXSA9IHNxcnQkMSh4eXpbMV0pO1xuICAgICAgICB4eXpbMl0gPSBzcXJ0JDEoeHl6WzJdKTtcbiAgICAgICAgaWYgKHh5elszXSA+IDAuOTk5OTk5OSkgeyB4eXpbM10gPSAxOyB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNihjbGlwX3JnYiQxKHh5eikpO1xuICAgIH07XG5cbiAgICAvLyBtaW5pbWFsIG11bHRpLXB1cnBvc2UgaW50ZXJmYWNlXG5cbiAgICAvLyBAcmVxdWlyZXMgdXRpbHMgY29sb3IgYW5hbHl6ZVxuXG4gICAgdmFyIGNocm9tYSQ0ID0gY2hyb21hXzE7XG4gICAgdmFyIHR5cGUkMiA9IHV0aWxzLnR5cGU7XG5cbiAgICB2YXIgcG93JDMgPSBNYXRoLnBvdztcblxuICAgIHZhciBzY2FsZSQyID0gZnVuY3Rpb24oY29sb3JzKSB7XG5cbiAgICAgICAgLy8gY29uc3RydWN0b3JcbiAgICAgICAgdmFyIF9tb2RlID0gJ3JnYic7XG4gICAgICAgIHZhciBfbmFjb2wgPSBjaHJvbWEkNCgnI2NjYycpO1xuICAgICAgICB2YXIgX3NwcmVhZCA9IDA7XG4gICAgICAgIC8vIGNvbnN0IF9maXhlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgX2RvbWFpbiA9IFswLCAxXTtcbiAgICAgICAgdmFyIF9wb3MgPSBbXTtcbiAgICAgICAgdmFyIF9wYWRkaW5nID0gWzAsMF07XG4gICAgICAgIHZhciBfY2xhc3NlcyA9IGZhbHNlO1xuICAgICAgICB2YXIgX2NvbG9ycyA9IFtdO1xuICAgICAgICB2YXIgX291dCA9IGZhbHNlO1xuICAgICAgICB2YXIgX21pbiA9IDA7XG4gICAgICAgIHZhciBfbWF4ID0gMTtcbiAgICAgICAgdmFyIF9jb3JyZWN0TGlnaHRuZXNzID0gZmFsc2U7XG4gICAgICAgIHZhciBfY29sb3JDYWNoZSA9IHt9O1xuICAgICAgICB2YXIgX3VzZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9nYW1tYSA9IDE7XG5cbiAgICAgICAgLy8gcHJpdmF0ZSBtZXRob2RzXG5cbiAgICAgICAgdmFyIHNldENvbG9ycyA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICAgICAgY29sb3JzID0gY29sb3JzIHx8IFsnI2ZmZicsICcjMDAwJ107XG4gICAgICAgICAgICBpZiAoY29sb3JzICYmIHR5cGUkMihjb2xvcnMpID09PSAnc3RyaW5nJyAmJiBjaHJvbWEkNC5icmV3ZXIgJiZcbiAgICAgICAgICAgICAgICBjaHJvbWEkNC5icmV3ZXJbY29sb3JzLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICAgICAgY29sb3JzID0gY2hyb21hJDQuYnJld2VyW2NvbG9ycy50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlJDIoY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBzaW5nbGUgY29sb3JcbiAgICAgICAgICAgICAgICBpZiAoY29sb3JzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjb2xvcnMgPSBbY29sb3JzWzBdLCBjb2xvcnNbMF1dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBtYWtlIGEgY29weSBvZiB0aGUgY29sb3JzXG4gICAgICAgICAgICAgICAgY29sb3JzID0gY29sb3JzLnNsaWNlKDApO1xuICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gY2hyb21hIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjPTA7IGM8Y29sb3JzLmxlbmd0aDsgYysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9yc1tjXSA9IGNocm9tYSQ0KGNvbG9yc1tjXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGF1dG8tZmlsbCBjb2xvciBwb3NpdGlvblxuICAgICAgICAgICAgICAgIF9wb3MubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBjJDE9MDsgYyQxPGNvbG9ycy5sZW5ndGg7IGMkMSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIF9wb3MucHVzaChjJDEvKGNvbG9ycy5sZW5ndGgtMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBfY29sb3JzID0gY29sb3JzO1xuICAgICAgICB9O1xuXG4gICAgICAgIHZhciBnZXRDbGFzcyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoX2NsYXNzZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgICAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgbiAmJiB2YWx1ZSA+PSBfY2xhc3Nlc1tpXSkge1xuICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBpLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfTtcblxuICAgICAgICB2YXIgdE1hcExpZ2h0bmVzcyA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuICAgICAgICB2YXIgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7IHJldHVybiB0OyB9O1xuXG4gICAgICAgIC8vIGNvbnN0IGNsYXNzaWZ5VmFsdWUgPSBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICAvLyAgICAgbGV0IHZhbCA9IHZhbHVlO1xuICAgICAgICAvLyAgICAgaWYgKF9jbGFzc2VzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBuID0gX2NsYXNzZXMubGVuZ3RoLTE7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgaSA9IGdldENsYXNzKHZhbHVlKTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBtaW5jID0gX2NsYXNzZXNbMF0gKyAoKF9jbGFzc2VzWzFdLV9jbGFzc2VzWzBdKSAqICgwICsgKF9zcHJlYWQgKiAwLjUpKSk7ICAvLyBjZW50ZXIgb2YgMXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgY29uc3QgbWF4YyA9IF9jbGFzc2VzW24tMV0gKyAoKF9jbGFzc2VzW25dLV9jbGFzc2VzW24tMV0pICogKDEgLSAoX3NwcmVhZCAqIDAuNSkpKTsgIC8vIGNlbnRlciBvZiBsYXN0IGNsYXNzXG4gICAgICAgIC8vICAgICAgICAgdmFsID0gX21pbiArICgoKChfY2xhc3Nlc1tpXSArICgoX2NsYXNzZXNbaSsxXSAtIF9jbGFzc2VzW2ldKSAqIDAuNSkpIC0gbWluYykgLyAobWF4Yy1taW5jKSkgKiAoX21heCAtIF9taW4pKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICAgIHJldHVybiB2YWw7XG4gICAgICAgIC8vIH07XG5cbiAgICAgICAgdmFyIGdldENvbG9yID0gZnVuY3Rpb24odmFsLCBieXBhc3NNYXApIHtcbiAgICAgICAgICAgIHZhciBjb2wsIHQ7XG4gICAgICAgICAgICBpZiAoYnlwYXNzTWFwID09IG51bGwpIHsgYnlwYXNzTWFwID0gZmFsc2U7IH1cbiAgICAgICAgICAgIGlmIChpc05hTih2YWwpIHx8ICh2YWwgPT09IG51bGwpKSB7IHJldHVybiBfbmFjb2w7IH1cbiAgICAgICAgICAgIGlmICghYnlwYXNzTWFwKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBmaW5kIHRoZSBjbGFzc1xuICAgICAgICAgICAgICAgICAgICB2YXIgYyA9IGdldENsYXNzKHZhbCk7XG4gICAgICAgICAgICAgICAgICAgIHQgPSBjIC8gKF9jbGFzc2VzLmxlbmd0aC0yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKF9tYXggIT09IF9taW4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBpbnRlcnBvbGF0ZSBiZXR3ZWVuIG1pbi9tYXhcbiAgICAgICAgICAgICAgICAgICAgdCA9ICh2YWwgLSBfbWluKSAvIChfbWF4IC0gX21pbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0ID0gdmFsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBkb21haW4gbWFwXG4gICAgICAgICAgICB0ID0gdE1hcERvbWFpbih0KTtcblxuICAgICAgICAgICAgaWYgKCFieXBhc3NNYXApIHtcbiAgICAgICAgICAgICAgICB0ID0gdE1hcExpZ2h0bmVzcyh0KTsgIC8vIGxpZ2h0bmVzcyBjb3JyZWN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChfZ2FtbWEgIT09IDEpIHsgdCA9IHBvdyQzKHQsIF9nYW1tYSk7IH1cblxuICAgICAgICAgICAgdCA9IF9wYWRkaW5nWzBdICsgKHQgKiAoMSAtIF9wYWRkaW5nWzBdIC0gX3BhZGRpbmdbMV0pKTtcblxuICAgICAgICAgICAgdCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHQpKTtcblxuICAgICAgICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHQgKiAxMDAwMCk7XG5cbiAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUgJiYgX2NvbG9yQ2FjaGVba10pIHtcbiAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JDYWNoZVtrXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihfY29sb3JzKSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgICAgICAvL2ZvciBpIGluIFswLi5fcG9zLmxlbmd0aC0xXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8X3Bvcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHAgPSBfcG9zW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHQgPj0gcCkgJiYgKGkgPT09IChfcG9zLmxlbmd0aC0xKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBfY29sb3JzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPiBwICYmIHQgPCBfcG9zW2krMV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ID0gKHQtcCkvKF9wb3NbaSsxXS1wKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgPSBjaHJvbWEkNC5pbnRlcnBvbGF0ZShfY29sb3JzW2ldLCBfY29sb3JzW2krMV0sIHQsIF9tb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSQyKF9jb2xvcnMpID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IF9jb2xvcnModCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChfdXNlQ2FjaGUpIHsgX2NvbG9yQ2FjaGVba10gPSBjb2w7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2w7XG4gICAgICAgIH07XG5cbiAgICAgICAgdmFyIHJlc2V0Q2FjaGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfY29sb3JDYWNoZSA9IHt9OyB9O1xuXG4gICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuXG4gICAgICAgIC8vIHB1YmxpYyBpbnRlcmZhY2VcblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIHZhciBjID0gY2hyb21hJDQoZ2V0Q29sb3IodikpO1xuICAgICAgICAgICAgaWYgKF9vdXQgJiYgY1tfb3V0XSkgeyByZXR1cm4gY1tfb3V0XSgpOyB9IGVsc2UgeyByZXR1cm4gYzsgfVxuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2xhc3NlcyA9IGZ1bmN0aW9uKGNsYXNzZXMpIHtcbiAgICAgICAgICAgIGlmIChjbGFzc2VzICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZSQyKGNsYXNzZXMpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgICAgIF9jbGFzc2VzID0gY2xhc3NlcztcbiAgICAgICAgICAgICAgICAgICAgX2RvbWFpbiA9IFtjbGFzc2VzWzBdLCBjbGFzc2VzW2NsYXNzZXMubGVuZ3RoLTFdXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IGNocm9tYSQ0LmFuYWx5emUoX2RvbWFpbik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGFzc2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfY2xhc3NlcyA9IFtkLm1pbiwgZC5tYXhdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2NsYXNzZXMgPSBjaHJvbWEkNC5saW1pdHMoZCwgJ2UnLCBjbGFzc2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBfY2xhc3NlcztcbiAgICAgICAgfTtcblxuXG4gICAgICAgIGYuZG9tYWluID0gZnVuY3Rpb24oZG9tYWluKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2RvbWFpbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9taW4gPSBkb21haW5bMF07XG4gICAgICAgICAgICBfbWF4ID0gZG9tYWluW2RvbWFpbi5sZW5ndGgtMV07XG4gICAgICAgICAgICBfcG9zID0gW107XG4gICAgICAgICAgICB2YXIgayA9IF9jb2xvcnMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKChkb21haW4ubGVuZ3RoID09PSBrKSAmJiAoX21pbiAhPT0gX21heCkpIHtcbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgcG9zaXRpb25zXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxpc3QgPSBBcnJheS5mcm9tKGRvbWFpbik7IGkgPCBsaXN0Lmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gbGlzdFtpXTtcblxuICAgICAgICAgICAgICAgICAgX3Bvcy5wdXNoKChkLV9taW4pIC8gKF9tYXgtX21pbikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYz0wOyBjPGs7IGMrKykge1xuICAgICAgICAgICAgICAgICAgICBfcG9zLnB1c2goYy8oay0xKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkb21haW4ubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgICAgICAgICAvLyBzZXQgZG9tYWluIG1hcFxuICAgICAgICAgICAgICAgICAgICB2YXIgdE91dCA9IGRvbWFpbi5tYXAoZnVuY3Rpb24gKGQsaSkgeyByZXR1cm4gaS8oZG9tYWluLmxlbmd0aC0xKTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0QnJlYWtzID0gZG9tYWluLm1hcChmdW5jdGlvbiAoZCkgeyByZXR1cm4gKGQgLSBfbWluKSAvIChfbWF4IC0gX21pbik7IH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRCcmVha3MuZXZlcnkoZnVuY3Rpb24gKHZhbCwgaSkgeyByZXR1cm4gdE91dFtpXSA9PT0gdmFsOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdE1hcERvbWFpbiA9IGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgPD0gMCB8fCB0ID49IDEpIHsgcmV0dXJuIHQ7IH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHQgPj0gdEJyZWFrc1tpKzFdKSB7IGkrKzsgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmID0gKHQgLSB0QnJlYWtzW2ldKSAvICh0QnJlYWtzW2krMV0gLSB0QnJlYWtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgb3V0ID0gdE91dFtpXSArIGYgKiAodE91dFtpKzFdIC0gdE91dFtpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9kb21haW4gPSBbX21pbiwgX21heF07XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLm1vZGUgPSBmdW5jdGlvbihfbSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9tb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX21vZGUgPSBfbTtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYucmFuZ2UgPSBmdW5jdGlvbihjb2xvcnMsIF9wb3MpIHtcbiAgICAgICAgICAgIHNldENvbG9ycyhjb2xvcnMpO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5vdXQgPSBmdW5jdGlvbihfbykge1xuICAgICAgICAgICAgX291dCA9IF9vO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5zcHJlYWQgPSBmdW5jdGlvbih2YWwpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3ByZWFkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX3NwcmVhZCA9IHZhbDtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY29ycmVjdExpZ2h0bmVzcyA9IGZ1bmN0aW9uKHYpIHtcbiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHsgdiA9IHRydWU7IH1cbiAgICAgICAgICAgIF9jb3JyZWN0TGlnaHRuZXNzID0gdjtcbiAgICAgICAgICAgIHJlc2V0Q2FjaGUoKTtcbiAgICAgICAgICAgIGlmIChfY29ycmVjdExpZ2h0bmVzcykge1xuICAgICAgICAgICAgICAgIHRNYXBMaWdodG5lc3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMMCA9IGdldENvbG9yKDAsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTDEgPSBnZXRDb2xvcigxLCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvbCA9IEwwID4gTDE7XG4gICAgICAgICAgICAgICAgICAgIHZhciBMX2FjdHVhbCA9IGdldENvbG9yKHQsIHRydWUpLmxhYigpWzBdO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9pZGVhbCA9IEwwICsgKChMMSAtIEwwKSAqIHQpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDAgPSAwO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdDEgPSAxO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbWF4X2l0ZXIgPSAyMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChNYXRoLmFicyhMX2RpZmYpID4gMWUtMikgJiYgKG1heF9pdGVyLS0gPiAwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb2wpIHsgTF9kaWZmICo9IC0xOyB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExfZGlmZiA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdDAgPSB0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICh0MSAtIHQpICogMC41O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQxID0gdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAodDAgLSB0KSAqIDAuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTF9hY3R1YWwgPSBnZXRDb2xvcih0LCB0cnVlKS5sYWIoKVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTF9kaWZmID0gTF9hY3R1YWwgLSBMX2lkZWFsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0TWFwTGlnaHRuZXNzID0gZnVuY3Rpb24gKHQpIHsgcmV0dXJuIHQ7IH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnBhZGRpbmcgPSBmdW5jdGlvbihwKSB7XG4gICAgICAgICAgICBpZiAocCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGUkMihwKSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcCA9IFtwLHBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfcGFkZGluZyA9IHA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfcGFkZGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmNvbG9ycyA9IGZ1bmN0aW9uKG51bUNvbG9ycywgb3V0KSB7XG4gICAgICAgICAgICAvLyBJZiBubyBhcmd1bWVudHMgYXJlIGdpdmVuLCByZXR1cm4gdGhlIG9yaWdpbmFsIGNvbG9ycyB0aGF0IHdlcmUgcHJvdmlkZWRcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgeyBvdXQgPSAnaGV4JzsgfVxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9jb2xvcnMuc2xpY2UoMCk7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID09PSAxKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gW2YoMC41KV07XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobnVtQ29sb3JzID4gMSkge1xuICAgICAgICAgICAgICAgIHZhciBkbSA9IF9kb21haW5bMF07XG4gICAgICAgICAgICAgICAgdmFyIGRkID0gX2RvbWFpblsxXSAtIGRtO1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9fcmFuZ2VfXygwLCBudW1Db2xvcnMsIGZhbHNlKS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGYoIGRtICsgKChpLyhudW1Db2xvcnMtMSkpICogZGQpICk7IH0pO1xuXG4gICAgICAgICAgICB9IGVsc2UgeyAvLyByZXR1cm5zIGFsbCBjb2xvcnMgYmFzZWQgb24gdGhlIGRlZmluZWQgY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGNvbG9ycyA9IFtdO1xuICAgICAgICAgICAgICAgIHZhciBzYW1wbGVzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKF9jbGFzc2VzICYmIChfY2xhc3Nlcy5sZW5ndGggPiAyKSkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMSwgZW5kID0gX2NsYXNzZXMubGVuZ3RoLCBhc2MgPSAxIDw9IGVuZDsgYXNjID8gaSA8IGVuZCA6IGkgPiBlbmQ7IGFzYyA/IGkrKyA6IGktLSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2FtcGxlcy5wdXNoKChfY2xhc3Nlc1tpLTFdK19jbGFzc2VzW2ldKSowLjUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2FtcGxlcyA9IF9kb21haW47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNhbXBsZXMubWFwKGZ1bmN0aW9uICh2KSB7IHJldHVybiBmKHYpOyB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNocm9tYSQ0W291dF0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjW291dF0oKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuY2FjaGUgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgICBpZiAoYyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX3VzZUNhY2hlID0gYztcbiAgICAgICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF91c2VDYWNoZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcblxuICAgICAgICBmLmdhbW1hID0gZnVuY3Rpb24oZykge1xuICAgICAgICAgICAgaWYgKGcgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIF9nYW1tYSA9IGc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZ2FtbWE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5ub2RhdGEgPSBmdW5jdGlvbihkKSB7XG4gICAgICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgX25hY29sID0gY2hyb21hJDQoZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBfbmFjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIGY7XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIF9fcmFuZ2VfXyhsZWZ0LCByaWdodCwgaW5jbHVzaXZlKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBbXTtcbiAgICAgIHZhciBhc2NlbmRpbmcgPSBsZWZ0IDwgcmlnaHQ7XG4gICAgICB2YXIgZW5kID0gIWluY2x1c2l2ZSA/IHJpZ2h0IDogYXNjZW5kaW5nID8gcmlnaHQgKyAxIDogcmlnaHQgLSAxO1xuICAgICAgZm9yICh2YXIgaSA9IGxlZnQ7IGFzY2VuZGluZyA/IGkgPCBlbmQgOiBpID4gZW5kOyBhc2NlbmRpbmcgPyBpKysgOiBpLS0pIHtcbiAgICAgICAgcmFuZ2UucHVzaChpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByYW5nZTtcbiAgICB9XG5cbiAgICAvL1xuICAgIC8vIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAvL1xuXG4gICAgLy8gQHJlcXVpcmVzIHV0aWxzIGxhYlxuICAgIHZhciBDb2xvciQ1ID0gQ29sb3JfMTtcblxuICAgIHZhciBzY2FsZSQxID0gc2NhbGUkMjtcblxuICAgIC8vIG50aCByb3cgb2YgdGhlIHBhc2NhbCB0cmlhbmdsZVxuICAgIHZhciBiaW5vbV9yb3cgPSBmdW5jdGlvbihuKSB7XG4gICAgICAgIHZhciByb3cgPSBbMSwgMV07XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgbmV3cm93ID0gWzFdO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPD0gcm93Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgbmV3cm93W2pdID0gKHJvd1tqXSB8fCAwKSArIHJvd1tqIC0gMV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3cgPSBuZXdyb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJvdztcbiAgICB9O1xuXG4gICAgdmFyIGJlemllciA9IGZ1bmN0aW9uKGNvbG9ycykge1xuICAgICAgICB2YXIgYXNzaWduLCBhc3NpZ24kMSwgYXNzaWduJDI7XG5cbiAgICAgICAgdmFyIEksIGxhYjAsIGxhYjEsIGxhYjI7XG4gICAgICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIG5ldyBDb2xvciQ1KGMpOyB9KTtcbiAgICAgICAgaWYgKGNvbG9ycy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIC8vIGxpbmVhciBpbnRlcnBvbGF0aW9uXG4gICAgICAgICAgICAoYXNzaWduID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ25bMF0sIGxhYjEgPSBhc3NpZ25bMV0pO1xuICAgICAgICAgICAgSSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICAgICAgICB2YXIgbGFiID0gKFswLCAxLCAyXS5tYXAoZnVuY3Rpb24gKGkpIHsgcmV0dXJuIGxhYjBbaV0gKyAodCAqIChsYWIxW2ldIC0gbGFiMFtpXSkpOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgICAvLyBxdWFkcmF0aWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIChhc3NpZ24kMSA9IGNvbG9ycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMubGFiKCk7IH0pLCBsYWIwID0gYXNzaWduJDFbMF0sIGxhYjEgPSBhc3NpZ24kMVsxXSwgbGFiMiA9IGFzc2lnbiQxWzJdKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbih0KSB7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiAoKDEtdCkqKDEtdCkgKiBsYWIwW2ldKSArICgyICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAodCAqIHQgKiBsYWIyW2ldKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sb3JzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgICAgLy8gY3ViaWMgYmV6aWVyIGludGVycG9sYXRpb25cbiAgICAgICAgICAgIHZhciBsYWIzO1xuICAgICAgICAgICAgKGFzc2lnbiQyID0gY29sb3JzLm1hcChmdW5jdGlvbiAoYykgeyByZXR1cm4gYy5sYWIoKTsgfSksIGxhYjAgPSBhc3NpZ24kMlswXSwgbGFiMSA9IGFzc2lnbiQyWzFdLCBsYWIyID0gYXNzaWduJDJbMl0sIGxhYjMgPSBhc3NpZ24kMlszXSk7XG4gICAgICAgICAgICBJID0gZnVuY3Rpb24odCkge1xuICAgICAgICAgICAgICAgIHZhciBsYWIgPSAoWzAsIDEsIDJdLm1hcChmdW5jdGlvbiAoaSkgeyByZXR1cm4gKCgxLXQpKigxLXQpKigxLXQpICogbGFiMFtpXSkgKyAoMyAqICgxLXQpICogKDEtdCkgKiB0ICogbGFiMVtpXSkgKyAoMyAqICgxLXQpICogdCAqIHQgKiBsYWIyW2ldKSArICh0KnQqdCAqIGxhYjNbaV0pOyB9KSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvciQ1KGxhYiwgJ2xhYicpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2xvcnMubGVuZ3RoID49IDUpIHtcbiAgICAgICAgICAgIC8vIGdlbmVyYWwgY2FzZSAoZGVncmVlIG4gYmV6aWVyKVxuICAgICAgICAgICAgdmFyIGxhYnMsIHJvdywgbjtcbiAgICAgICAgICAgIGxhYnMgPSBjb2xvcnMubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmxhYigpOyB9KTtcbiAgICAgICAgICAgIG4gPSBjb2xvcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHJvdyA9IGJpbm9tX3JvdyhuKTtcbiAgICAgICAgICAgIEkgPSBmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHZhciB1ID0gMSAtIHQ7XG4gICAgICAgICAgICAgICAgdmFyIGxhYiA9IChbMCwgMSwgMl0ubWFwKGZ1bmN0aW9uIChpKSB7IHJldHVybiBsYWJzLnJlZHVjZShmdW5jdGlvbiAoc3VtLCBlbCwgaikgeyByZXR1cm4gKHN1bSArIHJvd1tqXSAqIE1hdGgucG93KCB1LCAobiAtIGopICkgKiBNYXRoLnBvdyggdCwgaiApICogZWxbaV0pOyB9LCAwKTsgfSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IkNShsYWIsICdsYWInKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk5vIHBvaW50IGluIHJ1bm5pbmcgYmV6aWVyIHdpdGggb25seSBvbmUgY29sb3IuXCIpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEk7XG4gICAgfTtcblxuICAgIHZhciBiZXppZXJfMSA9IGZ1bmN0aW9uIChjb2xvcnMpIHtcbiAgICAgICAgdmFyIGYgPSBiZXppZXIoY29sb3JzKTtcbiAgICAgICAgZi5zY2FsZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjYWxlJDEoZik7IH07XG4gICAgICAgIHJldHVybiBmO1xuICAgIH07XG5cbiAgICAvKlxuICAgICAqIGludGVycG9sYXRlcyBiZXR3ZWVuIGEgc2V0IG9mIGNvbG9ycyB1emluZyBhIGJlemllciBzcGxpbmVcbiAgICAgKiBibGVuZCBtb2RlIGZvcm11bGFzIHRha2VuIGZyb20gaHR0cDovL3d3dy52ZW50dXJlLXdhcmUuY29tL2tldmluL2NvZGluZy9sZXRzLWxlYXJuLW1hdGgtcGhvdG9zaG9wLWJsZW5kLW1vZGVzL1xuICAgICAqL1xuXG4gICAgdmFyIGNocm9tYSQzID0gY2hyb21hXzE7XG5cbiAgICB2YXIgYmxlbmQgPSBmdW5jdGlvbiAoYm90dG9tLCB0b3AsIG1vZGUpIHtcbiAgICAgICAgaWYgKCFibGVuZFttb2RlXSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGJsZW5kIG1vZGUgJyArIG1vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibGVuZFttb2RlXShib3R0b20sIHRvcCk7XG4gICAgfTtcblxuICAgIHZhciBibGVuZF9mID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChib3R0b20sdG9wKSB7XG4gICAgICAgICAgICB2YXIgYzAgPSBjaHJvbWEkMyh0b3ApLnJnYigpO1xuICAgICAgICAgICAgdmFyIGMxID0gY2hyb21hJDMoYm90dG9tKS5yZ2IoKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMy5yZ2IoZihjMCwgYzEpKTtcbiAgICAgICAgfTsgfTtcblxuICAgIHZhciBlYWNoID0gZnVuY3Rpb24gKGYpIHsgcmV0dXJuIGZ1bmN0aW9uIChjMCwgYzEpIHtcbiAgICAgICAgICAgIHZhciBvdXQgPSBbXTtcbiAgICAgICAgICAgIG91dFswXSA9IGYoYzBbMF0sIGMxWzBdKTtcbiAgICAgICAgICAgIG91dFsxXSA9IGYoYzBbMV0sIGMxWzFdKTtcbiAgICAgICAgICAgIG91dFsyXSA9IGYoYzBbMl0sIGMxWzJdKTtcbiAgICAgICAgICAgIHJldHVybiBvdXQ7XG4gICAgICAgIH07IH07XG5cbiAgICB2YXIgbm9ybWFsID0gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGE7IH07XG4gICAgdmFyIG11bHRpcGx5ID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYSAqIGIgLyAyNTU7IH07XG4gICAgdmFyIGRhcmtlbiA9IGZ1bmN0aW9uIChhLGIpIHsgcmV0dXJuIGEgPiBiID8gYiA6IGE7IH07XG4gICAgdmFyIGxpZ2h0ZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBhID4gYiA/IGEgOiBiOyB9O1xuICAgIHZhciBzY3JlZW4gPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiAyNTUgKiAoMSAtICgxLWEvMjU1KSAqICgxLWIvMjU1KSk7IH07XG4gICAgdmFyIG92ZXJsYXkgPSBmdW5jdGlvbiAoYSxiKSB7IHJldHVybiBiIDwgMTI4ID8gMiAqIGEgKiBiIC8gMjU1IDogMjU1ICogKDEgLSAyICogKDEgLSBhIC8gMjU1ICkgKiAoIDEgLSBiIC8gMjU1ICkpOyB9O1xuICAgIHZhciBidXJuID0gZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gMjU1ICogKDEgLSAoMSAtIGIgLyAyNTUpIC8gKGEvMjU1KSk7IH07XG4gICAgdmFyIGRvZGdlID0gZnVuY3Rpb24gKGEsYikge1xuICAgICAgICBpZiAoYSA9PT0gMjU1KSB7IHJldHVybiAyNTU7IH1cbiAgICAgICAgYSA9IDI1NSAqIChiIC8gMjU1KSAvICgxIC0gYSAvIDI1NSk7XG4gICAgICAgIHJldHVybiBhID4gMjU1ID8gMjU1IDogYVxuICAgIH07XG5cbiAgICAvLyAjIGFkZCA9IChhLGIpIC0+XG4gICAgLy8gIyAgICAgaWYgKGEgKyBiID4gMjU1KSB0aGVuIDI1NSBlbHNlIGEgKyBiXG5cbiAgICBibGVuZC5ub3JtYWwgPSBibGVuZF9mKGVhY2gobm9ybWFsKSk7XG4gICAgYmxlbmQubXVsdGlwbHkgPSBibGVuZF9mKGVhY2gobXVsdGlwbHkpKTtcbiAgICBibGVuZC5zY3JlZW4gPSBibGVuZF9mKGVhY2goc2NyZWVuKSk7XG4gICAgYmxlbmQub3ZlcmxheSA9IGJsZW5kX2YoZWFjaChvdmVybGF5KSk7XG4gICAgYmxlbmQuZGFya2VuID0gYmxlbmRfZihlYWNoKGRhcmtlbikpO1xuICAgIGJsZW5kLmxpZ2h0ZW4gPSBibGVuZF9mKGVhY2gobGlnaHRlbikpO1xuICAgIGJsZW5kLmRvZGdlID0gYmxlbmRfZihlYWNoKGRvZGdlKSk7XG4gICAgYmxlbmQuYnVybiA9IGJsZW5kX2YoZWFjaChidXJuKSk7XG4gICAgLy8gYmxlbmQuYWRkID0gYmxlbmRfZihlYWNoKGFkZCkpO1xuXG4gICAgdmFyIGJsZW5kXzEgPSBibGVuZDtcblxuICAgIC8vIGN1YmVoZWxpeCBpbnRlcnBvbGF0aW9uXG4gICAgLy8gYmFzZWQgb24gRC5BLiBHcmVlbiBcIkEgY29sb3VyIHNjaGVtZSBmb3IgdGhlIGRpc3BsYXkgb2YgYXN0cm9ub21pY2FsIGludGVuc2l0eSBpbWFnZXNcIlxuICAgIC8vIGh0dHA6Ly9hc3Ryb24tc29jLmluL2J1bGxldGluLzExSnVuZS8yODkzOTIwMTEucGRmXG5cbiAgICB2YXIgdHlwZSQxID0gdXRpbHMudHlwZTtcbiAgICB2YXIgY2xpcF9yZ2IgPSB1dGlscy5jbGlwX3JnYjtcbiAgICB2YXIgVFdPUEkgPSB1dGlscy5UV09QSTtcbiAgICB2YXIgcG93JDIgPSBNYXRoLnBvdztcbiAgICB2YXIgc2luJDEgPSBNYXRoLnNpbjtcbiAgICB2YXIgY29zJDEgPSBNYXRoLmNvcztcbiAgICB2YXIgY2hyb21hJDIgPSBjaHJvbWFfMTtcblxuICAgIHZhciBjdWJlaGVsaXggPSBmdW5jdGlvbihzdGFydCwgcm90YXRpb25zLCBodWUsIGdhbW1hLCBsaWdodG5lc3MpIHtcbiAgICAgICAgaWYgKCBzdGFydCA9PT0gdm9pZCAwICkgc3RhcnQ9MzAwO1xuICAgICAgICBpZiAoIHJvdGF0aW9ucyA9PT0gdm9pZCAwICkgcm90YXRpb25zPS0xLjU7XG4gICAgICAgIGlmICggaHVlID09PSB2b2lkIDAgKSBodWU9MTtcbiAgICAgICAgaWYgKCBnYW1tYSA9PT0gdm9pZCAwICkgZ2FtbWE9MTtcbiAgICAgICAgaWYgKCBsaWdodG5lc3MgPT09IHZvaWQgMCApIGxpZ2h0bmVzcz1bMCwxXTtcblxuICAgICAgICB2YXIgZGggPSAwLCBkbDtcbiAgICAgICAgaWYgKHR5cGUkMShsaWdodG5lc3MpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkbCA9IGxpZ2h0bmVzc1sxXSAtIGxpZ2h0bmVzc1swXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRsID0gMDtcbiAgICAgICAgICAgIGxpZ2h0bmVzcyA9IFtsaWdodG5lc3MsIGxpZ2h0bmVzc107XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKGZyYWN0KSB7XG4gICAgICAgICAgICB2YXIgYSA9IFRXT1BJICogKCgoc3RhcnQrMTIwKS8zNjApICsgKHJvdGF0aW9ucyAqIGZyYWN0KSk7XG4gICAgICAgICAgICB2YXIgbCA9IHBvdyQyKGxpZ2h0bmVzc1swXSArIChkbCAqIGZyYWN0KSwgZ2FtbWEpO1xuICAgICAgICAgICAgdmFyIGggPSBkaCAhPT0gMCA/IGh1ZVswXSArIChmcmFjdCAqIGRoKSA6IGh1ZTtcbiAgICAgICAgICAgIHZhciBhbXAgPSAoaCAqIGwgKiAoMS1sKSkgLyAyO1xuICAgICAgICAgICAgdmFyIGNvc19hID0gY29zJDEoYSk7XG4gICAgICAgICAgICB2YXIgc2luX2EgPSBzaW4kMShhKTtcbiAgICAgICAgICAgIHZhciByID0gbCArIChhbXAgKiAoKC0wLjE0ODYxICogY29zX2EpICsgKDEuNzgyNzcqIHNpbl9hKSkpO1xuICAgICAgICAgICAgdmFyIGcgPSBsICsgKGFtcCAqICgoLTAuMjkyMjcgKiBjb3NfYSkgLSAoMC45MDY0OSogc2luX2EpKSk7XG4gICAgICAgICAgICB2YXIgYiA9IGwgKyAoYW1wICogKCsxLjk3Mjk0ICogY29zX2EpKTtcbiAgICAgICAgICAgIHJldHVybiBjaHJvbWEkMihjbGlwX3JnYihbcioyNTUsZyoyNTUsYioyNTUsMV0pKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnN0YXJ0ID0gZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgaWYgKChzID09IG51bGwpKSB7IHJldHVybiBzdGFydDsgfVxuICAgICAgICAgICAgc3RhcnQgPSBzO1xuICAgICAgICAgICAgcmV0dXJuIGY7XG4gICAgICAgIH07XG5cbiAgICAgICAgZi5yb3RhdGlvbnMgPSBmdW5jdGlvbihyKSB7XG4gICAgICAgICAgICBpZiAoKHIgPT0gbnVsbCkpIHsgcmV0dXJuIHJvdGF0aW9uczsgfVxuICAgICAgICAgICAgcm90YXRpb25zID0gcjtcbiAgICAgICAgICAgIHJldHVybiBmO1xuICAgICAgICB9O1xuXG4gICAgICAgIGYuZ2FtbWEgPSBmdW5jdGlvbihnKSB7XG4gICAgICAgICAgICBpZiAoKGcgPT0gbnVsbCkpIHsgcmV0dXJuIGdhbW1hOyB9XG4gICAgICAgICAgICBnYW1tYSA9IGc7XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmh1ZSA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gaHVlOyB9XG4gICAgICAgICAgICBodWUgPSBoO1xuICAgICAgICAgICAgaWYgKHR5cGUkMShodWUpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgZGggPSBodWVbMV0gLSBodWVbMF07XG4gICAgICAgICAgICAgICAgaWYgKGRoID09PSAwKSB7IGh1ZSA9IGh1ZVsxXTsgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLmxpZ2h0bmVzcyA9IGZ1bmN0aW9uKGgpIHtcbiAgICAgICAgICAgIGlmICgoaCA9PSBudWxsKSkgeyByZXR1cm4gbGlnaHRuZXNzOyB9XG4gICAgICAgICAgICBpZiAodHlwZSQxKGgpID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgbGlnaHRuZXNzID0gaDtcbiAgICAgICAgICAgICAgICBkbCA9IGhbMV0gLSBoWzBdO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsaWdodG5lc3MgPSBbaCxoXTtcbiAgICAgICAgICAgICAgICBkbCA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZjtcbiAgICAgICAgfTtcblxuICAgICAgICBmLnNjYWxlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY2hyb21hJDIuc2NhbGUoZik7IH07XG5cbiAgICAgICAgZi5odWUoaHVlKTtcblxuICAgICAgICByZXR1cm4gZjtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDQgPSBDb2xvcl8xO1xuICAgIHZhciBkaWdpdHMgPSAnMDEyMzQ1Njc4OWFiY2RlZic7XG5cbiAgICB2YXIgZmxvb3IkMSA9IE1hdGguZmxvb3I7XG4gICAgdmFyIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuXG4gICAgdmFyIHJhbmRvbV8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29kZSA9ICcjJztcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPDY7IGkrKykge1xuICAgICAgICAgICAgY29kZSArPSBkaWdpdHMuY2hhckF0KGZsb29yJDEocmFuZG9tKCkgKiAxNikpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IkNChjb2RlLCAnaGV4Jyk7XG4gICAgfTtcblxuICAgIHZhciB0eXBlID0gdHlwZSRwO1xuICAgIHZhciBsb2cgPSBNYXRoLmxvZztcbiAgICB2YXIgcG93JDEgPSBNYXRoLnBvdztcbiAgICB2YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG5cbiAgICB2YXIgYW5hbHl6ZSA9IGZ1bmN0aW9uIChkYXRhLCBrZXkpIHtcbiAgICAgICAgaWYgKCBrZXkgPT09IHZvaWQgMCApIGtleT1udWxsO1xuXG4gICAgICAgIHZhciByID0ge1xuICAgICAgICAgICAgbWluOiBOdW1iZXIuTUFYX1ZBTFVFLFxuICAgICAgICAgICAgbWF4OiBOdW1iZXIuTUFYX1ZBTFVFKi0xLFxuICAgICAgICAgICAgc3VtOiAwLFxuICAgICAgICAgICAgdmFsdWVzOiBbXSxcbiAgICAgICAgICAgIGNvdW50OiAwXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0eXBlKGRhdGEpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZGF0YSA9IE9iamVjdC52YWx1ZXMoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5mb3JFYWNoKGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIGlmIChrZXkgJiYgdHlwZSh2YWwpID09PSAnb2JqZWN0JykgeyB2YWwgPSB2YWxba2V5XTsgfVxuICAgICAgICAgICAgaWYgKHZhbCAhPT0gdW5kZWZpbmVkICYmIHZhbCAhPT0gbnVsbCAmJiAhaXNOYU4odmFsKSkge1xuICAgICAgICAgICAgICAgIHIudmFsdWVzLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgICByLnN1bSArPSB2YWw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA8IHIubWluKSB7IHIubWluID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA+IHIubWF4KSB7IHIubWF4ID0gdmFsOyB9XG4gICAgICAgICAgICAgICAgci5jb3VudCArPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByLmRvbWFpbiA9IFtyLm1pbiwgci5tYXhdO1xuXG4gICAgICAgIHIubGltaXRzID0gZnVuY3Rpb24gKG1vZGUsIG51bSkgeyByZXR1cm4gbGltaXRzKHIsIG1vZGUsIG51bSk7IH07XG5cbiAgICAgICAgcmV0dXJuIHI7XG4gICAgfTtcblxuXG4gICAgdmFyIGxpbWl0cyA9IGZ1bmN0aW9uIChkYXRhLCBtb2RlLCBudW0pIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdlcXVhbCc7XG4gICAgICAgIGlmICggbnVtID09PSB2b2lkIDAgKSBudW09NztcblxuICAgICAgICBpZiAodHlwZShkYXRhKSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICBkYXRhID0gYW5hbHl6ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gZGF0YS5taW47XG4gICAgICAgIHZhciBtYXggPSBkYXRhLm1heDtcbiAgICAgICAgdmFyIHZhbHVlcyA9IGRhdGEudmFsdWVzLnNvcnQoZnVuY3Rpb24gKGEsYikgeyByZXR1cm4gYS1iOyB9KTtcblxuICAgICAgICBpZiAobnVtID09PSAxKSB7IHJldHVybiBbbWluLG1heF07IH1cblxuICAgICAgICB2YXIgbGltaXRzID0gW107XG5cbiAgICAgICAgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdjJykgeyAvLyBjb250aW51b3VzXG4gICAgICAgICAgICBsaW1pdHMucHVzaChtaW4pO1xuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb2RlLnN1YnN0cigwLDEpID09PSAnZScpIHsgLy8gZXF1YWwgaW50ZXJ2YWxcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpPTE7IGk8bnVtOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChtaW4rKChpL251bSkqKG1heC1taW4pKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsaW1pdHMucHVzaChtYXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2wnKSB7IC8vIGxvZyBzY2FsZVxuICAgICAgICAgICAgaWYgKG1pbiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMb2dhcml0aG1pYyBzY2FsZXMgYXJlIG9ubHkgcG9zc2libGUgZm9yIHZhbHVlcyA+IDAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBtaW5fbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWluKTtcbiAgICAgICAgICAgIHZhciBtYXhfbG9nID0gTWF0aC5MT0cxMEUgKiBsb2cobWF4KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKG1pbik7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDE9MTsgaSQxPG51bTsgaSQxKyspIHtcbiAgICAgICAgICAgICAgICBsaW1pdHMucHVzaChwb3ckMSgxMCwgbWluX2xvZyArICgoaSQxL251bSkgKiAobWF4X2xvZyAtIG1pbl9sb2cpKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVsc2UgaWYgKG1vZGUuc3Vic3RyKDAsMSkgPT09ICdxJykgeyAvLyBxdWFudGlsZSBzY2FsZVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMj0xOyBpJDI8bnVtOyBpJDIrKykge1xuICAgICAgICAgICAgICAgIHZhciBwID0gKCh2YWx1ZXMubGVuZ3RoLTEpICogaSQyKS9udW07XG4gICAgICAgICAgICAgICAgdmFyIHBiID0gZmxvb3IocCk7XG4gICAgICAgICAgICAgICAgaWYgKHBiID09PSBwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKHZhbHVlc1twYl0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7IC8vIHAgPiBwYlxuICAgICAgICAgICAgICAgICAgICB2YXIgcHIgPSBwIC0gcGI7XG4gICAgICAgICAgICAgICAgICAgIGxpbWl0cy5wdXNoKCh2YWx1ZXNbcGJdKigxLXByKSkgKyAodmFsdWVzW3BiKzFdKnByKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGltaXRzLnB1c2gobWF4KTtcblxuICAgICAgICB9XG5cbiAgICAgICAgZWxzZSBpZiAobW9kZS5zdWJzdHIoMCwxKSA9PT0gJ2snKSB7IC8vIGstbWVhbnMgY2x1c3RlcmluZ1xuICAgICAgICAgICAgLypcbiAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIGJhc2VkIG9uXG4gICAgICAgICAgICBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZmlndWUvc291cmNlL2Jyb3dzZS90cnVuay9maWd1ZS5qcyMzMzZcbiAgICAgICAgICAgIHNpbXBsaWZpZWQgZm9yIDEtZCBpbnB1dCB2YWx1ZXNcbiAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgY2x1c3RlcjtcbiAgICAgICAgICAgIHZhciBuID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBhc3NpZ25tZW50cyA9IG5ldyBBcnJheShuKTtcbiAgICAgICAgICAgIHZhciBjbHVzdGVyU2l6ZXMgPSBuZXcgQXJyYXkobnVtKTtcbiAgICAgICAgICAgIHZhciByZXBlYXQgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIG5iX2l0ZXJzID0gMDtcbiAgICAgICAgICAgIHZhciBjZW50cm9pZHMgPSBudWxsO1xuXG4gICAgICAgICAgICAvLyBnZXQgc2VlZCB2YWx1ZXNcbiAgICAgICAgICAgIGNlbnRyb2lkcyA9IFtdO1xuICAgICAgICAgICAgY2VudHJvaWRzLnB1c2gobWluKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkkMz0xOyBpJDM8bnVtOyBpJDMrKykge1xuICAgICAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1pbiArICgoaSQzL251bSkgKiAobWF4LW1pbikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNlbnRyb2lkcy5wdXNoKG1heCk7XG5cbiAgICAgICAgICAgIHdoaWxlIChyZXBlYXQpIHtcbiAgICAgICAgICAgICAgICAvLyBhc3NpZ25tZW50IHN0ZXBcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqPTA7IGo8bnVtOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclNpemVzW2pdID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ0PTA7IGkkNDxuOyBpJDQrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSB2YWx1ZXNbaSQ0XTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1pbmRpc3QgPSBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgICAgICAgICAgICAgICB2YXIgYmVzdCA9ICh2b2lkIDApO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDE9MDsgaiQxPG51bTsgaiQxKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkaXN0ID0gYWJzJDEoY2VudHJvaWRzW2okMV0tdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3QgPCBtaW5kaXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluZGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVzdCA9IGokMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsdXN0ZXJTaXplc1tiZXN0XSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHNbaSQ0XSA9IGJlc3Q7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgY2VudHJvaWRzIHN0ZXBcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q2VudHJvaWRzID0gbmV3IEFycmF5KG51bSk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQyPTA7IGokMjxudW07IGokMisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDJdID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSQ1PTA7IGkkNTxuOyBpJDUrKykge1xuICAgICAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ1XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tjbHVzdGVyXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2VudHJvaWRzW2NsdXN0ZXJdID0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50cm9pZHNbY2x1c3Rlcl0gKz0gdmFsdWVzW2kkNV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiQzPTA7IGokMzxudW07IGokMysrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRyb2lkc1tqJDNdICo9IDEvY2x1c3RlclNpemVzW2okM107XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgY29udmVyZ2VuY2VcbiAgICAgICAgICAgICAgICByZXBlYXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqJDQ9MDsgaiQ0PG51bTsgaiQ0KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0NlbnRyb2lkc1tqJDRdICE9PSBjZW50cm9pZHNbaiQ0XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2VudHJvaWRzID0gbmV3Q2VudHJvaWRzO1xuICAgICAgICAgICAgICAgIG5iX2l0ZXJzKys7XG5cbiAgICAgICAgICAgICAgICBpZiAobmJfaXRlcnMgPiAyMDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVwZWF0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBmaW5pc2hlZCBrLW1lYW5zIGNsdXN0ZXJpbmdcbiAgICAgICAgICAgIC8vIHRoZSBuZXh0IHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBnYWJyaWVsZmxvci5pdFxuICAgICAgICAgICAgdmFyIGtDbHVzdGVycyA9IHt9O1xuICAgICAgICAgICAgZm9yICh2YXIgaiQ1PTA7IGokNTxudW07IGokNSsrKSB7XG4gICAgICAgICAgICAgICAga0NsdXN0ZXJzW2okNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAodmFyIGkkNj0wOyBpJDY8bjsgaSQ2KyspIHtcbiAgICAgICAgICAgICAgICBjbHVzdGVyID0gYXNzaWdubWVudHNbaSQ2XTtcbiAgICAgICAgICAgICAgICBrQ2x1c3RlcnNbY2x1c3Rlcl0ucHVzaCh2YWx1ZXNbaSQ2XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgdG1wS01lYW5zQnJlYWtzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBqJDY9MDsgaiQ2PG51bTsgaiQ2KyspIHtcbiAgICAgICAgICAgICAgICB0bXBLTWVhbnNCcmVha3MucHVzaChrQ2x1c3RlcnNbaiQ2XVswXSk7XG4gICAgICAgICAgICAgICAgdG1wS01lYW5zQnJlYWtzLnB1c2goa0NsdXN0ZXJzW2okNl1ba0NsdXN0ZXJzW2okNl0ubGVuZ3RoLTFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRtcEtNZWFuc0JyZWFrcyA9IHRtcEtNZWFuc0JyZWFrcy5zb3J0KGZ1bmN0aW9uIChhLGIpeyByZXR1cm4gYS1iOyB9KTtcbiAgICAgICAgICAgIGxpbWl0cy5wdXNoKHRtcEtNZWFuc0JyZWFrc1swXSk7XG4gICAgICAgICAgICBmb3IgKHZhciBpJDc9MTsgaSQ3IDwgdG1wS01lYW5zQnJlYWtzLmxlbmd0aDsgaSQ3Kz0gMikge1xuICAgICAgICAgICAgICAgIHZhciB2ID0gdG1wS01lYW5zQnJlYWtzW2kkN107XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTih2KSAmJiAobGltaXRzLmluZGV4T2YodikgPT09IC0xKSkge1xuICAgICAgICAgICAgICAgICAgICBsaW1pdHMucHVzaCh2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxpbWl0cztcbiAgICB9O1xuXG4gICAgdmFyIGFuYWx5emVfMSA9IHthbmFseXplOiBhbmFseXplLCBsaW1pdHM6IGxpbWl0c307XG5cbiAgICB2YXIgQ29sb3IkMyA9IENvbG9yXzE7XG5cblxuICAgIHZhciBjb250cmFzdCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8vIFdDQUcgY29udHJhc3QgcmF0aW9cbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDgvUkVDLVdDQUcyMC0yMDA4MTIxMS8jY29udHJhc3QtcmF0aW9kZWZcbiAgICAgICAgYSA9IG5ldyBDb2xvciQzKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDMoYik7XG4gICAgICAgIHZhciBsMSA9IGEubHVtaW5hbmNlKCk7XG4gICAgICAgIHZhciBsMiA9IGIubHVtaW5hbmNlKCk7XG4gICAgICAgIHJldHVybiBsMSA+IGwyID8gKGwxICsgMC4wNSkgLyAobDIgKyAwLjA1KSA6IChsMiArIDAuMDUpIC8gKGwxICsgMC4wNSk7XG4gICAgfTtcblxuICAgIHZhciBDb2xvciQyID0gQ29sb3JfMTtcbiAgICB2YXIgc3FydCA9IE1hdGguc3FydDtcbiAgICB2YXIgcG93ID0gTWF0aC5wb3c7XG4gICAgdmFyIG1pbiA9IE1hdGgubWluO1xuICAgIHZhciBtYXggPSBNYXRoLm1heDtcbiAgICB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuICAgIHZhciBhYnMgPSBNYXRoLmFicztcbiAgICB2YXIgY29zID0gTWF0aC5jb3M7XG4gICAgdmFyIHNpbiA9IE1hdGguc2luO1xuICAgIHZhciBleHAgPSBNYXRoLmV4cDtcbiAgICB2YXIgUEkgPSBNYXRoLlBJO1xuXG4gICAgdmFyIGRlbHRhRSA9IGZ1bmN0aW9uKGEsIGIsIEtsLCBLYywgS2gpIHtcbiAgICAgICAgaWYgKCBLbCA9PT0gdm9pZCAwICkgS2w9MTtcbiAgICAgICAgaWYgKCBLYyA9PT0gdm9pZCAwICkgS2M9MTtcbiAgICAgICAgaWYgKCBLaCA9PT0gdm9pZCAwICkgS2g9MTtcblxuICAgICAgICAvLyBEZWx0YSBFIChDSUUgMjAwMClcbiAgICAgICAgLy8gc2VlIGh0dHA6Ly93d3cuYnJ1Y2VsaW5kYmxvb20uY29tL2luZGV4Lmh0bWw/RXFuX0RlbHRhRV9DSUUyMDAwLmh0bWxcbiAgICAgICAgdmFyIHJhZDJkZWcgPSBmdW5jdGlvbihyYWQpIHtcbiAgICAgICAgICAgIHJldHVybiAzNjAgKiByYWQgLyAoMiAqIFBJKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGRlZzJyYWQgPSBmdW5jdGlvbihkZWcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMiAqIFBJICogZGVnKSAvIDM2MDtcbiAgICAgICAgfTtcbiAgICAgICAgYSA9IG5ldyBDb2xvciQyKGEpO1xuICAgICAgICBiID0gbmV3IENvbG9yJDIoYik7XG4gICAgICAgIHZhciByZWYgPSBBcnJheS5mcm9tKGEubGFiKCkpO1xuICAgICAgICB2YXIgTDEgPSByZWZbMF07XG4gICAgICAgIHZhciBhMSA9IHJlZlsxXTtcbiAgICAgICAgdmFyIGIxID0gcmVmWzJdO1xuICAgICAgICB2YXIgcmVmJDEgPSBBcnJheS5mcm9tKGIubGFiKCkpO1xuICAgICAgICB2YXIgTDIgPSByZWYkMVswXTtcbiAgICAgICAgdmFyIGEyID0gcmVmJDFbMV07XG4gICAgICAgIHZhciBiMiA9IHJlZiQxWzJdO1xuICAgICAgICB2YXIgYXZnTCA9IChMMSArIEwyKS8yO1xuICAgICAgICB2YXIgQzEgPSBzcXJ0KHBvdyhhMSwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMyID0gc3FydChwb3coYTIsIDIpICsgcG93KGIyLCAyKSk7XG4gICAgICAgIHZhciBhdmdDID0gKEMxICsgQzIpLzI7XG4gICAgICAgIHZhciBHID0gMC41KigxLXNxcnQocG93KGF2Z0MsIDcpLyhwb3coYXZnQywgNykgKyBwb3coMjUsIDcpKSkpO1xuICAgICAgICB2YXIgYTFwID0gYTEqKDErRyk7XG4gICAgICAgIHZhciBhMnAgPSBhMiooMStHKTtcbiAgICAgICAgdmFyIEMxcCA9IHNxcnQocG93KGExcCwgMikgKyBwb3coYjEsIDIpKTtcbiAgICAgICAgdmFyIEMycCA9IHNxcnQocG93KGEycCwgMikgKyBwb3coYjIsIDIpKTtcbiAgICAgICAgdmFyIGF2Z0NwID0gKEMxcCArIEMycCkvMjtcbiAgICAgICAgdmFyIGFyY3RhbjEgPSByYWQyZGVnKGF0YW4yKGIxLCBhMXApKTtcbiAgICAgICAgdmFyIGFyY3RhbjIgPSByYWQyZGVnKGF0YW4yKGIyLCBhMnApKTtcbiAgICAgICAgdmFyIGgxcCA9IGFyY3RhbjEgPj0gMCA/IGFyY3RhbjEgOiBhcmN0YW4xICsgMzYwO1xuICAgICAgICB2YXIgaDJwID0gYXJjdGFuMiA+PSAwID8gYXJjdGFuMiA6IGFyY3RhbjIgKyAzNjA7XG4gICAgICAgIHZhciBhdmdIcCA9IGFicyhoMXAgLSBoMnApID4gMTgwID8gKGgxcCArIGgycCArIDM2MCkvMiA6IChoMXAgKyBoMnApLzI7XG4gICAgICAgIHZhciBUID0gMSAtIDAuMTcqY29zKGRlZzJyYWQoYXZnSHAgLSAzMCkpICsgMC4yNCpjb3MoZGVnMnJhZCgyKmF2Z0hwKSkgKyAwLjMyKmNvcyhkZWcycmFkKDMqYXZnSHAgKyA2KSkgLSAwLjIqY29zKGRlZzJyYWQoNCphdmdIcCAtIDYzKSk7XG4gICAgICAgIHZhciBkZWx0YUhwID0gaDJwIC0gaDFwO1xuICAgICAgICBkZWx0YUhwID0gYWJzKGRlbHRhSHApIDw9IDE4MCA/IGRlbHRhSHAgOiBoMnAgPD0gaDFwID8gZGVsdGFIcCArIDM2MCA6IGRlbHRhSHAgLSAzNjA7XG4gICAgICAgIGRlbHRhSHAgPSAyKnNxcnQoQzFwKkMycCkqc2luKGRlZzJyYWQoZGVsdGFIcCkvMik7XG4gICAgICAgIHZhciBkZWx0YUwgPSBMMiAtIEwxO1xuICAgICAgICB2YXIgZGVsdGFDcCA9IEMycCAtIEMxcDsgICAgXG4gICAgICAgIHZhciBzbCA9IDEgKyAoMC4wMTUqcG93KGF2Z0wgLSA1MCwgMikpL3NxcnQoMjAgKyBwb3coYXZnTCAtIDUwLCAyKSk7XG4gICAgICAgIHZhciBzYyA9IDEgKyAwLjA0NSphdmdDcDtcbiAgICAgICAgdmFyIHNoID0gMSArIDAuMDE1KmF2Z0NwKlQ7XG4gICAgICAgIHZhciBkZWx0YVRoZXRhID0gMzAqZXhwKC1wb3coKGF2Z0hwIC0gMjc1KS8yNSwgMikpO1xuICAgICAgICB2YXIgUmMgPSAyKnNxcnQocG93KGF2Z0NwLCA3KS8ocG93KGF2Z0NwLCA3KSArIHBvdygyNSwgNykpKTtcbiAgICAgICAgdmFyIFJ0ID0gLVJjKnNpbigyKmRlZzJyYWQoZGVsdGFUaGV0YSkpO1xuICAgICAgICB2YXIgcmVzdWx0ID0gc3FydChwb3coZGVsdGFMLyhLbCpzbCksIDIpICsgcG93KGRlbHRhQ3AvKEtjKnNjKSwgMikgKyBwb3coZGVsdGFIcC8oS2gqc2gpLCAyKSArIFJ0KihkZWx0YUNwLyhLYypzYykpKihkZWx0YUhwLyhLaCpzaCkpKTtcbiAgICAgICAgcmV0dXJuIG1heCgwLCBtaW4oMTAwLCByZXN1bHQpKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yJDEgPSBDb2xvcl8xO1xuXG4gICAgLy8gc2ltcGxlIEV1Y2xpZGVhbiBkaXN0YW5jZVxuICAgIHZhciBkaXN0YW5jZSA9IGZ1bmN0aW9uKGEsIGIsIG1vZGUpIHtcbiAgICAgICAgaWYgKCBtb2RlID09PSB2b2lkIDAgKSBtb2RlPSdsYWInO1xuXG4gICAgICAgIC8vIERlbHRhIEUgKENJRSAxOTc2KVxuICAgICAgICAvLyBzZWUgaHR0cDovL3d3dy5icnVjZWxpbmRibG9vbS5jb20vaW5kZXguaHRtbD9FcXVhdGlvbnMuaHRtbFxuICAgICAgICBhID0gbmV3IENvbG9yJDEoYSk7XG4gICAgICAgIGIgPSBuZXcgQ29sb3IkMShiKTtcbiAgICAgICAgdmFyIGwxID0gYS5nZXQobW9kZSk7XG4gICAgICAgIHZhciBsMiA9IGIuZ2V0KG1vZGUpO1xuICAgICAgICB2YXIgc3VtX3NxID0gMDtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBsMSkge1xuICAgICAgICAgICAgdmFyIGQgPSAobDFbaV0gfHwgMCkgLSAobDJbaV0gfHwgMCk7XG4gICAgICAgICAgICBzdW1fc3EgKz0gZCpkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtX3NxKTtcbiAgICB9O1xuXG4gICAgdmFyIENvbG9yID0gQ29sb3JfMTtcblxuICAgIHZhciB2YWxpZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgd2hpbGUgKCBsZW4tLSApIGFyZ3NbIGxlbiBdID0gYXJndW1lbnRzWyBsZW4gXTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV3IChGdW5jdGlvbi5wcm90b3R5cGUuYmluZC5hcHBseSggQ29sb3IsIFsgbnVsbCBdLmNvbmNhdCggYXJncykgKSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIHNvbWUgcHJlLWRlZmluZWQgY29sb3Igc2NhbGVzOlxuICAgIHZhciBjaHJvbWEkMSA9IGNocm9tYV8xO1xuXG4gICAgdmFyIHNjYWxlID0gc2NhbGUkMjtcblxuICAgIHZhciBzY2FsZXMgPSB7XG4gICAgXHRjb29sOiBmdW5jdGlvbiBjb29sKCkgeyByZXR1cm4gc2NhbGUoW2Nocm9tYSQxLmhzbCgxODAsMSwuOSksIGNocm9tYSQxLmhzbCgyNTAsLjcsLjQpXSkgfSxcbiAgICBcdGhvdDogZnVuY3Rpb24gaG90KCkgeyByZXR1cm4gc2NhbGUoWycjMDAwJywnI2YwMCcsJyNmZjAnLCcjZmZmJ10pLm1vZGUoJ3JnYicpIH1cbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICAgIENvbG9yQnJld2VyIGNvbG9ycyBmb3IgY2hyb21hLmpzXG5cbiAgICAgICAgQ29weXJpZ2h0IChjKSAyMDAyIEN5bnRoaWEgQnJld2VyLCBNYXJrIEhhcnJvd2VyLCBhbmQgVGhlXG4gICAgICAgIFBlbm5zeWx2YW5pYSBTdGF0ZSBVbml2ZXJzaXR5LlxuXG4gICAgICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICAgICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUgZGlzdHJpYnV0ZWRcbiAgICAgICAgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1JcbiAgICAgICAgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGVcbiAgICAgICAgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgICAqL1xuXG4gICAgdmFyIGNvbG9yYnJld2VyID0ge1xuICAgICAgICAvLyBzZXF1ZW50aWFsXG4gICAgICAgIE9yUmQ6IFsnI2ZmZjdlYycsICcjZmVlOGM4JywgJyNmZGQ0OWUnLCAnI2ZkYmI4NCcsICcjZmM4ZDU5JywgJyNlZjY1NDgnLCAnI2Q3MzAxZicsICcjYjMwMDAwJywgJyM3ZjAwMDAnXSxcbiAgICAgICAgUHVCdTogWycjZmZmN2ZiJywgJyNlY2U3ZjInLCAnI2QwZDFlNicsICcjYTZiZGRiJywgJyM3NGE5Y2YnLCAnIzM2OTBjMCcsICcjMDU3MGIwJywgJyMwNDVhOGQnLCAnIzAyMzg1OCddLFxuICAgICAgICBCdVB1OiBbJyNmN2ZjZmQnLCAnI2UwZWNmNCcsICcjYmZkM2U2JywgJyM5ZWJjZGEnLCAnIzhjOTZjNicsICcjOGM2YmIxJywgJyM4ODQxOWQnLCAnIzgxMGY3YycsICcjNGQwMDRiJ10sXG4gICAgICAgIE9yYW5nZXM6IFsnI2ZmZjVlYicsICcjZmVlNmNlJywgJyNmZGQwYTInLCAnI2ZkYWU2YicsICcjZmQ4ZDNjJywgJyNmMTY5MTMnLCAnI2Q5NDgwMScsICcjYTYzNjAzJywgJyM3ZjI3MDQnXSxcbiAgICAgICAgQnVHbjogWycjZjdmY2ZkJywgJyNlNWY1ZjknLCAnI2NjZWNlNicsICcjOTlkOGM5JywgJyM2NmMyYTQnLCAnIzQxYWU3NicsICcjMjM4YjQ1JywgJyMwMDZkMmMnLCAnIzAwNDQxYiddLFxuICAgICAgICBZbE9yQnI6IFsnI2ZmZmZlNScsICcjZmZmN2JjJywgJyNmZWUzOTEnLCAnI2ZlYzQ0ZicsICcjZmU5OTI5JywgJyNlYzcwMTQnLCAnI2NjNGMwMicsICcjOTkzNDA0JywgJyM2NjI1MDYnXSxcbiAgICAgICAgWWxHbjogWycjZmZmZmU1JywgJyNmN2ZjYjknLCAnI2Q5ZjBhMycsICcjYWRkZDhlJywgJyM3OGM2NzknLCAnIzQxYWI1ZCcsICcjMjM4NDQzJywgJyMwMDY4MzcnLCAnIzAwNDUyOSddLFxuICAgICAgICBSZWRzOiBbJyNmZmY1ZjAnLCAnI2ZlZTBkMicsICcjZmNiYmExJywgJyNmYzkyNzInLCAnI2ZiNmE0YScsICcjZWYzYjJjJywgJyNjYjE4MWQnLCAnI2E1MGYxNScsICcjNjcwMDBkJ10sXG4gICAgICAgIFJkUHU6IFsnI2ZmZjdmMycsICcjZmRlMGRkJywgJyNmY2M1YzAnLCAnI2ZhOWZiNScsICcjZjc2OGExJywgJyNkZDM0OTcnLCAnI2FlMDE3ZScsICcjN2EwMTc3JywgJyM0OTAwNmEnXSxcbiAgICAgICAgR3JlZW5zOiBbJyNmN2ZjZjUnLCAnI2U1ZjVlMCcsICcjYzdlOWMwJywgJyNhMWQ5OWInLCAnIzc0YzQ3NicsICcjNDFhYjVkJywgJyMyMzhiNDUnLCAnIzAwNmQyYycsICcjMDA0NDFiJ10sXG4gICAgICAgIFlsR25CdTogWycjZmZmZmQ5JywgJyNlZGY4YjEnLCAnI2M3ZTliNCcsICcjN2ZjZGJiJywgJyM0MWI2YzQnLCAnIzFkOTFjMCcsICcjMjI1ZWE4JywgJyMyNTM0OTQnLCAnIzA4MWQ1OCddLFxuICAgICAgICBQdXJwbGVzOiBbJyNmY2ZiZmQnLCAnI2VmZWRmNScsICcjZGFkYWViJywgJyNiY2JkZGMnLCAnIzllOWFjOCcsICcjODA3ZGJhJywgJyM2YTUxYTMnLCAnIzU0Mjc4ZicsICcjM2YwMDdkJ10sXG4gICAgICAgIEduQnU6IFsnI2Y3ZmNmMCcsICcjZTBmM2RiJywgJyNjY2ViYzUnLCAnI2E4ZGRiNScsICcjN2JjY2M0JywgJyM0ZWIzZDMnLCAnIzJiOGNiZScsICcjMDg2OGFjJywgJyMwODQwODEnXSxcbiAgICAgICAgR3JleXM6IFsnI2ZmZmZmZicsICcjZjBmMGYwJywgJyNkOWQ5ZDknLCAnI2JkYmRiZCcsICcjOTY5Njk2JywgJyM3MzczNzMnLCAnIzUyNTI1MicsICcjMjUyNTI1JywgJyMwMDAwMDAnXSxcbiAgICAgICAgWWxPclJkOiBbJyNmZmZmY2MnLCAnI2ZmZWRhMCcsICcjZmVkOTc2JywgJyNmZWIyNGMnLCAnI2ZkOGQzYycsICcjZmM0ZTJhJywgJyNlMzFhMWMnLCAnI2JkMDAyNicsICcjODAwMDI2J10sXG4gICAgICAgIFB1UmQ6IFsnI2Y3ZjRmOScsICcjZTdlMWVmJywgJyNkNGI5ZGEnLCAnI2M5OTRjNycsICcjZGY2NWIwJywgJyNlNzI5OGEnLCAnI2NlMTI1NicsICcjOTgwMDQzJywgJyM2NzAwMWYnXSxcbiAgICAgICAgQmx1ZXM6IFsnI2Y3ZmJmZicsICcjZGVlYmY3JywgJyNjNmRiZWYnLCAnIzllY2FlMScsICcjNmJhZWQ2JywgJyM0MjkyYzYnLCAnIzIxNzFiNScsICcjMDg1MTljJywgJyMwODMwNmInXSxcbiAgICAgICAgUHVCdUduOiBbJyNmZmY3ZmInLCAnI2VjZTJmMCcsICcjZDBkMWU2JywgJyNhNmJkZGInLCAnIzY3YTljZicsICcjMzY5MGMwJywgJyMwMjgxOGEnLCAnIzAxNmM1OScsICcjMDE0NjM2J10sXG4gICAgICAgIFZpcmlkaXM6IFsnIzQ0MDE1NCcsICcjNDgyNzc3JywgJyMzZjRhOGEnLCAnIzMxNjc4ZScsICcjMjY4MzhmJywgJyMxZjlkOGEnLCAnIzZjY2U1YScsICcjYjZkZTJiJywgJyNmZWU4MjUnXSxcblxuICAgICAgICAvLyBkaXZlcmdpbmdcblxuICAgICAgICBTcGVjdHJhbDogWycjOWUwMTQyJywgJyNkNTNlNGYnLCAnI2Y0NmQ0MycsICcjZmRhZTYxJywgJyNmZWUwOGInLCAnI2ZmZmZiZicsICcjZTZmNTk4JywgJyNhYmRkYTQnLCAnIzY2YzJhNScsICcjMzI4OGJkJywgJyM1ZTRmYTInXSxcbiAgICAgICAgUmRZbEduOiBbJyNhNTAwMjYnLCAnI2Q3MzAyNycsICcjZjQ2ZDQzJywgJyNmZGFlNjEnLCAnI2ZlZTA4YicsICcjZmZmZmJmJywgJyNkOWVmOGInLCAnI2E2ZDk2YScsICcjNjZiZDYzJywgJyMxYTk4NTAnLCAnIzAwNjgzNyddLFxuICAgICAgICBSZEJ1OiBbJyM2NzAwMWYnLCAnI2IyMTgyYicsICcjZDY2MDRkJywgJyNmNGE1ODInLCAnI2ZkZGJjNycsICcjZjdmN2Y3JywgJyNkMWU1ZjAnLCAnIzkyYzVkZScsICcjNDM5M2MzJywgJyMyMTY2YWMnLCAnIzA1MzA2MSddLFxuICAgICAgICBQaVlHOiBbJyM4ZTAxNTInLCAnI2M1MWI3ZCcsICcjZGU3N2FlJywgJyNmMWI2ZGEnLCAnI2ZkZTBlZicsICcjZjdmN2Y3JywgJyNlNmY1ZDAnLCAnI2I4ZTE4NicsICcjN2ZiYzQxJywgJyM0ZDkyMjEnLCAnIzI3NjQxOSddLFxuICAgICAgICBQUkduOiBbJyM0MDAwNGInLCAnIzc2MmE4MycsICcjOTk3MGFiJywgJyNjMmE1Y2YnLCAnI2U3ZDRlOCcsICcjZjdmN2Y3JywgJyNkOWYwZDMnLCAnI2E2ZGJhMCcsICcjNWFhZTYxJywgJyMxYjc4MzcnLCAnIzAwNDQxYiddLFxuICAgICAgICBSZFlsQnU6IFsnI2E1MDAyNicsICcjZDczMDI3JywgJyNmNDZkNDMnLCAnI2ZkYWU2MScsICcjZmVlMDkwJywgJyNmZmZmYmYnLCAnI2UwZjNmOCcsICcjYWJkOWU5JywgJyM3NGFkZDEnLCAnIzQ1NzViNCcsICcjMzEzNjk1J10sXG4gICAgICAgIEJyQkc6IFsnIzU0MzAwNScsICcjOGM1MTBhJywgJyNiZjgxMmQnLCAnI2RmYzI3ZCcsICcjZjZlOGMzJywgJyNmNWY1ZjUnLCAnI2M3ZWFlNScsICcjODBjZGMxJywgJyMzNTk3OGYnLCAnIzAxNjY1ZScsICcjMDAzYzMwJ10sXG4gICAgICAgIFJkR3k6IFsnIzY3MDAxZicsICcjYjIxODJiJywgJyNkNjYwNGQnLCAnI2Y0YTU4MicsICcjZmRkYmM3JywgJyNmZmZmZmYnLCAnI2UwZTBlMCcsICcjYmFiYWJhJywgJyM4Nzg3ODcnLCAnIzRkNGQ0ZCcsICcjMWExYTFhJ10sXG4gICAgICAgIFB1T3I6IFsnIzdmM2IwOCcsICcjYjM1ODA2JywgJyNlMDgyMTQnLCAnI2ZkYjg2MycsICcjZmVlMGI2JywgJyNmN2Y3ZjcnLCAnI2Q4ZGFlYicsICcjYjJhYmQyJywgJyM4MDczYWMnLCAnIzU0Mjc4OCcsICcjMmQwMDRiJ10sXG5cbiAgICAgICAgLy8gcXVhbGl0YXRpdmVcblxuICAgICAgICBTZXQyOiBbJyM2NmMyYTUnLCAnI2ZjOGQ2MicsICcjOGRhMGNiJywgJyNlNzhhYzMnLCAnI2E2ZDg1NCcsICcjZmZkOTJmJywgJyNlNWM0OTQnLCAnI2IzYjNiMyddLFxuICAgICAgICBBY2NlbnQ6IFsnIzdmYzk3ZicsICcjYmVhZWQ0JywgJyNmZGMwODYnLCAnI2ZmZmY5OScsICcjMzg2Y2IwJywgJyNmMDAyN2YnLCAnI2JmNWIxNycsICcjNjY2NjY2J10sXG4gICAgICAgIFNldDE6IFsnI2U0MWExYycsICcjMzc3ZWI4JywgJyM0ZGFmNGEnLCAnIzk4NGVhMycsICcjZmY3ZjAwJywgJyNmZmZmMzMnLCAnI2E2NTYyOCcsICcjZjc4MWJmJywgJyM5OTk5OTknXSxcbiAgICAgICAgU2V0MzogWycjOGRkM2M3JywgJyNmZmZmYjMnLCAnI2JlYmFkYScsICcjZmI4MDcyJywgJyM4MGIxZDMnLCAnI2ZkYjQ2MicsICcjYjNkZTY5JywgJyNmY2NkZTUnLCAnI2Q5ZDlkOScsICcjYmM4MGJkJywgJyNjY2ViYzUnLCAnI2ZmZWQ2ZiddLFxuICAgICAgICBEYXJrMjogWycjMWI5ZTc3JywgJyNkOTVmMDInLCAnIzc1NzBiMycsICcjZTcyOThhJywgJyM2NmE2MWUnLCAnI2U2YWIwMicsICcjYTY3NjFkJywgJyM2NjY2NjYnXSxcbiAgICAgICAgUGFpcmVkOiBbJyNhNmNlZTMnLCAnIzFmNzhiNCcsICcjYjJkZjhhJywgJyMzM2EwMmMnLCAnI2ZiOWE5OScsICcjZTMxYTFjJywgJyNmZGJmNmYnLCAnI2ZmN2YwMCcsICcjY2FiMmQ2JywgJyM2YTNkOWEnLCAnI2ZmZmY5OScsICcjYjE1OTI4J10sXG4gICAgICAgIFBhc3RlbDI6IFsnI2IzZTJjZCcsICcjZmRjZGFjJywgJyNjYmQ1ZTgnLCAnI2Y0Y2FlNCcsICcjZTZmNWM5JywgJyNmZmYyYWUnLCAnI2YxZTJjYycsICcjY2NjY2NjJ10sXG4gICAgICAgIFBhc3RlbDE6IFsnI2ZiYjRhZScsICcjYjNjZGUzJywgJyNjY2ViYzUnLCAnI2RlY2JlNCcsICcjZmVkOWE2JywgJyNmZmZmY2MnLCAnI2U1ZDhiZCcsICcjZmRkYWVjJywgJyNmMmYyZjInXSxcbiAgICB9O1xuXG4gICAgLy8gYWRkIGxvd2VyY2FzZSBhbGlhc2VzIGZvciBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbGlzdCA9IE9iamVjdC5rZXlzKGNvbG9yYnJld2VyKTsgaSA8IGxpc3QubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgdmFyIGtleSA9IGxpc3RbaV07XG5cbiAgICAgICAgY29sb3JicmV3ZXJba2V5LnRvTG93ZXJDYXNlKCldID0gY29sb3JicmV3ZXJba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgY29sb3JicmV3ZXJfMSA9IGNvbG9yYnJld2VyO1xuXG4gICAgdmFyIGNocm9tYSA9IGNocm9tYV8xO1xuXG4gICAgLy8gZmVlbCBmcmVlIHRvIGNvbW1lbnQgb3V0IGFueXRoaW5nIHRvIHJvbGx1cFxuICAgIC8vIGEgc21hbGxlciBjaHJvbWEuanMgYnVpbHRcblxuICAgIC8vIGlvIC0tPiBjb252ZXJ0IGNvbG9yc1xuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBvcGVyYXRvcnMgLS0+IG1vZGlmeSBleGlzdGluZyBDb2xvcnNcblxuXG5cblxuXG5cblxuXG5cblxuICAgIC8vIGludGVycG9sYXRvcnNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAvLyBnZW5lcmF0b3JzIC0tID4gY3JlYXRlIG5ldyBjb2xvcnNcbiAgICBjaHJvbWEuYXZlcmFnZSA9IGF2ZXJhZ2U7XG4gICAgY2hyb21hLmJlemllciA9IGJlemllcl8xO1xuICAgIGNocm9tYS5ibGVuZCA9IGJsZW5kXzE7XG4gICAgY2hyb21hLmN1YmVoZWxpeCA9IGN1YmVoZWxpeDtcbiAgICBjaHJvbWEubWl4ID0gY2hyb21hLmludGVycG9sYXRlID0gbWl4JDE7XG4gICAgY2hyb21hLnJhbmRvbSA9IHJhbmRvbV8xO1xuICAgIGNocm9tYS5zY2FsZSA9IHNjYWxlJDI7XG5cbiAgICAvLyBvdGhlciB1dGlsaXR5IG1ldGhvZHNcbiAgICBjaHJvbWEuYW5hbHl6ZSA9IGFuYWx5emVfMS5hbmFseXplO1xuICAgIGNocm9tYS5jb250cmFzdCA9IGNvbnRyYXN0O1xuICAgIGNocm9tYS5kZWx0YUUgPSBkZWx0YUU7XG4gICAgY2hyb21hLmRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgY2hyb21hLmxpbWl0cyA9IGFuYWx5emVfMS5saW1pdHM7XG4gICAgY2hyb21hLnZhbGlkID0gdmFsaWQ7XG5cbiAgICAvLyBzY2FsZVxuICAgIGNocm9tYS5zY2FsZXMgPSBzY2FsZXM7XG5cbiAgICAvLyBjb2xvcnNcbiAgICBjaHJvbWEuY29sb3JzID0gdzNjeDExXzE7XG4gICAgY2hyb21hLmJyZXdlciA9IGNvbG9yYnJld2VyXzE7XG5cbiAgICB2YXIgY2hyb21hX2pzID0gY2hyb21hO1xuXG4gICAgcmV0dXJuIGNocm9tYV9qcztcblxufSkpO1xuIiwiLyohXG4gIENvcHlyaWdodCAoYykgMjAxOCBKZWQgV2F0c29uLlxuICBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UgKE1JVCksIHNlZVxuICBodHRwOi8vamVkd2F0c29uLmdpdGh1Yi5pby9jbGFzc25hbWVzXG4qL1xuLyogZ2xvYmFsIGRlZmluZSAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXHQndXNlIHN0cmljdCc7XG5cblx0dmFyIGhhc093biA9IHt9Lmhhc093blByb3BlcnR5O1xuXG5cdGZ1bmN0aW9uIGNsYXNzTmFtZXMoKSB7XG5cdFx0dmFyIGNsYXNzZXMgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gYXJndW1lbnRzW2ldO1xuXHRcdFx0aWYgKCFhcmcpIGNvbnRpbnVlO1xuXG5cdFx0XHR2YXIgYXJnVHlwZSA9IHR5cGVvZiBhcmc7XG5cblx0XHRcdGlmIChhcmdUeXBlID09PSAnc3RyaW5nJyB8fCBhcmdUeXBlID09PSAnbnVtYmVyJykge1xuXHRcdFx0XHRjbGFzc2VzLnB1c2goYXJnKTtcblx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpKSB7XG5cdFx0XHRcdGlmIChhcmcubGVuZ3RoKSB7XG5cdFx0XHRcdFx0dmFyIGlubmVyID0gY2xhc3NOYW1lcy5hcHBseShudWxsLCBhcmcpO1xuXHRcdFx0XHRcdGlmIChpbm5lcikge1xuXHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGlubmVyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoYXJnVHlwZSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0aWYgKGFyZy50b1N0cmluZyA9PT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZykge1xuXHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBhcmcpIHtcblx0XHRcdFx0XHRcdGlmIChoYXNPd24uY2FsbChhcmcsIGtleSkgJiYgYXJnW2tleV0pIHtcblx0XHRcdFx0XHRcdFx0Y2xhc3Nlcy5wdXNoKGtleSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNsYXNzZXMucHVzaChhcmcudG9TdHJpbmcoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gY2xhc3Nlcy5qb2luKCcgJyk7XG5cdH1cblxuXHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRjbGFzc05hbWVzLmRlZmF1bHQgPSBjbGFzc05hbWVzO1xuXHRcdG1vZHVsZS5leHBvcnRzID0gY2xhc3NOYW1lcztcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBkZWZpbmUuYW1kID09PSAnb2JqZWN0JyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0Ly8gcmVnaXN0ZXIgYXMgJ2NsYXNzbmFtZXMnLCBjb25zaXN0ZW50IHdpdGggbnBtIHBhY2thZ2UgbmFtZVxuXHRcdGRlZmluZSgnY2xhc3NuYW1lcycsIFtdLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZXR1cm4gY2xhc3NOYW1lcztcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHR3aW5kb3cuY2xhc3NOYW1lcyA9IGNsYXNzTmFtZXM7XG5cdH1cbn0oKSk7XG4iLCJ2YXIgQ0FOX1VTRV9ET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO1xuXG4vLyBBZGFwdGVkIGZyb20gTW9kZXJuaXpyXG4vLyBodHRwczovL2dpdGh1Yi5jb20vTW9kZXJuaXpyL01vZGVybml6ci9ibG9iL2FjYjNmMGQ5L2ZlYXR1cmUtZGV0ZWN0cy9kb20vcGFzc2l2ZWV2ZW50bGlzdGVuZXJzLmpzI0wyNi1MMzdcbmZ1bmN0aW9uIHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSB7XG4gIGlmICghQ0FOX1VTRV9ET00pIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIXdpbmRvdy5hZGRFdmVudExpc3RlbmVyIHx8ICF3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciB8fCAhT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IGZhbHNlO1xuICB0cnkge1xuICAgIHZhciBvcHRzID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAncGFzc2l2ZScsIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnZXR0ZXItcmV0dXJuXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICAgIHN1cHBvcnRzUGFzc2l2ZU9wdGlvbiA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2V0O1xuICAgICAgfSgpXG4gICAgfSk7XG4gICAgdmFyIG5vb3AgPSBmdW5jdGlvbiBub29wKCkge307XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0Jywgbm9vcCwgb3B0cyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBkbyBub3RoaW5nXG4gIH1cblxuICByZXR1cm4gc3VwcG9ydHNQYXNzaXZlT3B0aW9uO1xufVxuXG52YXIgbWVtb2l6ZWQgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIGNhblVzZVBhc3NpdmVFdmVudExpc3RlbmVycygpIHtcbiAgaWYgKG1lbW9pemVkID09PSB1bmRlZmluZWQpIHtcbiAgICBtZW1vaXplZCA9IHRlc3RQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUV2ZW50T3B0aW9ucyhldmVudE9wdGlvbnMpIHtcbiAgaWYgKCFldmVudE9wdGlvbnMpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKCFjYW5Vc2VQYXNzaXZlRXZlbnRMaXN0ZW5lcnMoKSkge1xuICAgIC8vIElmIHRoZSBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHBhc3NpdmUgb3B0aW9uLCB0aGVuIGl0IGlzIGV4cGVjdGluZ1xuICAgIC8vIGEgYm9vbGVhbiBmb3IgdGhlIG9wdGlvbnMgYXJndW1lbnQgdG8gc3BlY2lmeSB3aGV0aGVyIGl0IHNob3VsZCB1c2VcbiAgICAvLyBjYXB0dXJlIG9yIG5vdC4gSW4gbW9yZSBtb2Rlcm4gYnJvd3NlcnMsIHRoaXMgaXMgcGFzc2VkIHZpYSB0aGUgYGNhcHR1cmVgXG4gICAgLy8gb3B0aW9uLCBzbyBsZXQncyBqdXN0IGhvaXN0IHRoYXQgdmFsdWUgdXAuXG4gICAgcmV0dXJuICEhZXZlbnRPcHRpb25zLmNhcHR1cmU7XG4gIH1cblxuICByZXR1cm4gZXZlbnRPcHRpb25zO1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovXG5cbi8qKlxuICogR2VuZXJhdGUgYSB1bmlxdWUga2V5IGZvciBhbnkgc2V0IG9mIGV2ZW50IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXZlbnRPcHRpb25zS2V5KG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpIHtcbiAgaWYgKCFub3JtYWxpemVkRXZlbnRPcHRpb25zKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICAvLyBJZiB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHBhc3NpdmUgZXZlbnQgbGlzdGVuZXJzLCB0aGUgbm9ybWFsaXplZFxuICAvLyBldmVudCBvcHRpb25zIHdpbGwgYmUgYSBib29sZWFuLlxuICBpZiAobm9ybWFsaXplZEV2ZW50T3B0aW9ucyA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAxMDA7XG4gIH1cblxuICAvLyBBdCB0aGlzIHBvaW50LCB0aGUgYnJvd3NlciBzdXBwb3J0cyBwYXNzaXZlIGV2ZW50IGxpc3RlbmVycywgc28gd2UgZXhwZWN0XG4gIC8vIHRoZSBldmVudCBvcHRpb25zIHRvIGJlIGFuIG9iamVjdCB3aXRoIHBvc3NpYmxlIHByb3BlcnRpZXMgb2YgY2FwdHVyZSxcbiAgLy8gcGFzc2l2ZSwgYW5kIG9uY2UuXG4gIC8vXG4gIC8vIFdlIHdhbnQgdG8gY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSwgcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2ZcbiAgLy8gdGhlc2UgcHJvcGVydGllcywgc28gbGV0J3MgdXNlIGJpbmFyeSBtYXRocyB0byBhc3NpZ24gZWFjaCBwcm9wZXJ0eSB0byBhXG4gIC8vIGJpdCwgYW5kIHRoZW4gYWRkIHRob3NlIHRvZ2V0aGVyICh3aXRoIGFuIG9mZnNldCB0byBhY2NvdW50IGZvciB0aGVcbiAgLy8gYm9vbGVhbnMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uKS5cbiAgdmFyIGNhcHR1cmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLmNhcHR1cmUgPDwgMDtcbiAgdmFyIHBhc3NpdmUgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLnBhc3NpdmUgPDwgMTtcbiAgdmFyIG9uY2UgPSBub3JtYWxpemVkRXZlbnRPcHRpb25zLm9uY2UgPDwgMjtcbiAgcmV0dXJuIGNhcHR1cmUgKyBwYXNzaXZlICsgb25jZTtcbn1cblxuZnVuY3Rpb24gZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycykge1xuICBpZiAoZXZlbnRIYW5kbGVycy5oYW5kbGVycyA9PT0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnMpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycyA9IGV2ZW50SGFuZGxlcnMuaGFuZGxlcnMuc2xpY2UoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBUYXJnZXRFdmVudEhhbmRsZXJzKHRhcmdldCkge1xuICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgdGhpcy5ldmVudHMgPSB7fTtcbn1cblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuZ2V0RXZlbnRIYW5kbGVycyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZ2V0RXZlbnRIYW5kbGVycyhldmVudE5hbWUsIG9wdGlvbnMpIHtcbiAgICB2YXIga2V5ID0gU3RyaW5nKGV2ZW50TmFtZSkgKyAnICcgKyBTdHJpbmcoZXZlbnRPcHRpb25zS2V5KG9wdGlvbnMpKTtcblxuICAgIGlmICghdGhpcy5ldmVudHNba2V5XSkge1xuICAgICAgdGhpcy5ldmVudHNba2V5XSA9IHtcbiAgICAgICAgaGFuZGxlcnM6IFtdLFxuICAgICAgICBoYW5kbGVFdmVudDogdW5kZWZpbmVkXG4gICAgICB9O1xuICAgICAgdGhpcy5ldmVudHNba2V5XS5uZXh0SGFuZGxlcnMgPSB0aGlzLmV2ZW50c1trZXldLmhhbmRsZXJzO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmV2ZW50c1trZXldO1xuICB9XG5cbiAgcmV0dXJuIGdldEV2ZW50SGFuZGxlcnM7XG59KCk7XG5cblRhcmdldEV2ZW50SGFuZGxlcnMucHJvdG90eXBlLmhhbmRsZUV2ZW50ID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBoYW5kbGVFdmVudChldmVudE5hbWUsIG9wdGlvbnMsIGV2ZW50KSB7XG4gICAgdmFyIGV2ZW50SGFuZGxlcnMgPSB0aGlzLmdldEV2ZW50SGFuZGxlcnMoZXZlbnROYW1lLCBvcHRpb25zKTtcbiAgICBldmVudEhhbmRsZXJzLmhhbmRsZXJzID0gZXZlbnRIYW5kbGVycy5uZXh0SGFuZGxlcnM7XG4gICAgZXZlbnRIYW5kbGVycy5oYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIGZvciBwcmVzZW5jZSBoZXJlIGJlY2F1c2UgYSBoYW5kbGVyIGZ1bmN0aW9uIG1heVxuICAgICAgICAvLyBjYXVzZSBsYXRlciBoYW5kbGVycyB0byBnZXQgcmVtb3ZlZC4gVGhpcyBjYW4gaGFwcGVuIGlmIHlvdSBmb3JcbiAgICAgICAgLy8gaW5zdGFuY2UgaGF2ZSBhIHdheXBvaW50IHRoYXQgdW5tb3VudHMgYW5vdGhlciB3YXlwb2ludCBhcyBwYXJ0IG9mIGFuXG4gICAgICAgIC8vIG9uRW50ZXIvb25MZWF2ZSBoYW5kbGVyLlxuICAgICAgICBoYW5kbGVyKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBoYW5kbGVFdmVudDtcbn0oKTtcblxuVGFyZ2V0RXZlbnRIYW5kbGVycy5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBhZGQoZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICAvLyBvcHRpb25zIGhhcyBhbHJlYWR5IGJlZW4gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50LlxuICAgIHZhciBldmVudEhhbmRsZXJzID0gdGhpcy5nZXRFdmVudEhhbmRsZXJzKGV2ZW50TmFtZSwgb3B0aW9ucyk7XG5cbiAgICBlbnN1cmVDYW5NdXRhdGVOZXh0RXZlbnRIYW5kbGVycyhldmVudEhhbmRsZXJzKTtcblxuICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQgPSB0aGlzLmhhbmRsZUV2ZW50LmJpbmQodGhpcywgZXZlbnROYW1lLCBvcHRpb25zKTtcblxuICAgICAgdGhpcy50YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGV2ZW50SGFuZGxlcnMuaGFuZGxlRXZlbnQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgdmFyIGlzU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgdmFyIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gdW5zdWJzY3JpYmUoKSB7XG4gICAgICAgIGlmICghaXNTdWJzY3JpYmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaXNTdWJzY3JpYmVkID0gZmFsc2U7XG5cbiAgICAgICAgZW5zdXJlQ2FuTXV0YXRlTmV4dEV2ZW50SGFuZGxlcnMoZXZlbnRIYW5kbGVycyk7XG4gICAgICAgIHZhciBpbmRleCA9IGV2ZW50SGFuZGxlcnMubmV4dEhhbmRsZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgICAgICBldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuXG4gICAgICAgIGlmIChldmVudEhhbmRsZXJzLm5leHRIYW5kbGVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBBbGwgZXZlbnQgaGFuZGxlcnMgaGF2ZSBiZWVuIHJlbW92ZWQsIHNvIHdlIHdhbnQgdG8gcmVtb3ZlIHRoZSBldmVudFxuICAgICAgICAgIC8vIGxpc3RlbmVyIGZyb20gdGhlIHRhcmdldCBub2RlLlxuXG4gICAgICAgICAgaWYgKF90aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgLy8gVGhlcmUgY2FuIGJlIGEgcmFjZSBjb25kaXRpb24gd2hlcmUgdGhlIHRhcmdldCBtYXkgbm8gbG9uZ2VyIGV4aXN0XG4gICAgICAgICAgICAvLyB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBlLmcuIHdoZW4gYSBSZWFjdCBjb21wb25lbnQgaXNcbiAgICAgICAgICAgIC8vIHVubW91bnRpbmcuIEd1YXJkaW5nIGFnYWluc3QgdGhpcyBwcmV2ZW50cyB0aGUgZm9sbG93aW5nIGVycm9yOlxuICAgICAgICAgICAgLy9cbiAgICAgICAgICAgIC8vICAgQ2Fubm90IHJlYWQgcHJvcGVydHkgJ3JlbW92ZUV2ZW50TGlzdGVuZXInIG9mIHVuZGVmaW5lZFxuICAgICAgICAgICAgX3RoaXMudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50LCBvcHRpb25zKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBldmVudEhhbmRsZXJzLmhhbmRsZUV2ZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bnN1YnNjcmliZTtcbiAgICB9KCk7XG4gICAgcmV0dXJuIHVuc3Vic2NyaWJlO1xuICB9XG5cbiAgcmV0dXJuIGFkZDtcbn0oKTtcblxudmFyIEVWRU5UX0hBTkRMRVJTX0tFWSA9ICdfX2NvbnNvbGlkYXRlZF9ldmVudHNfaGFuZGxlcnNfXyc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvcHJlZmVyLWRlZmF1bHQtZXhwb3J0XG5mdW5jdGlvbiBhZGRFdmVudExpc3RlbmVyKHRhcmdldCwgZXZlbnROYW1lLCBsaXN0ZW5lciwgb3B0aW9ucykge1xuICBpZiAoIXRhcmdldFtFVkVOVF9IQU5ETEVSU19LRVldKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0gPSBuZXcgVGFyZ2V0RXZlbnRIYW5kbGVycyh0YXJnZXQpO1xuICB9XG4gIHZhciBub3JtYWxpemVkRXZlbnRPcHRpb25zID0gbm9ybWFsaXplRXZlbnRPcHRpb25zKG9wdGlvbnMpO1xuICByZXR1cm4gdGFyZ2V0W0VWRU5UX0hBTkRMRVJTX0tFWV0uYWRkKGV2ZW50TmFtZSwgbGlzdGVuZXIsIG5vcm1hbGl6ZWRFdmVudE9wdGlvbnMpO1xufVxuXG5leHBvcnQgeyBhZGRFdmVudExpc3RlbmVyIH07XG4iLCJyZXF1aXJlKCcuLi8uLi9tb2R1bGVzL2NvcmUucmVnZXhwLmVzY2FwZScpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9tb2R1bGVzL19jb3JlJykuUmVnRXhwLmVzY2FwZTtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICh0eXBlb2YgaXQgIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBtc2cpIHtcbiAgaWYgKHR5cGVvZiBpdCAhPSAnbnVtYmVyJyAmJiBjb2YoaXQpICE9ICdOdW1iZXInKSB0aHJvdyBUeXBlRXJyb3IobXNnKTtcbiAgcmV0dXJuICtpdDtcbn07XG4iLCIvLyAyMi4xLjMuMzEgQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG52YXIgVU5TQ09QQUJMRVMgPSByZXF1aXJlKCcuL193a3MnKSgndW5zY29wYWJsZXMnKTtcbnZhciBBcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlO1xuaWYgKEFycmF5UHJvdG9bVU5TQ09QQUJMRVNdID09IHVuZGVmaW5lZCkgcmVxdWlyZSgnLi9faGlkZScpKEFycmF5UHJvdG8sIFVOU0NPUEFCTEVTLCB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b1tVTlNDT1BBQkxFU11ba2V5XSA9IHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG5cbiAvLyBgQWR2YW5jZVN0cmluZ0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBhdChTLCBpbmRleCkubGVuZ3RoIDogMSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIENvbnN0cnVjdG9yLCBuYW1lLCBmb3JiaWRkZW5GaWVsZCkge1xuICBpZiAoIShpdCBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSB8fCAoZm9yYmlkZGVuRmllbGQgIT09IHVuZGVmaW5lZCAmJiBmb3JiaWRkZW5GaWVsZCBpbiBpdCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IobmFtZSArICc6IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICB9IHJldHVybiBpdDtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSB0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG4iLCIvLyAyMi4xLjMuMyBBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0LCBlbmQgPSB0aGlzLmxlbmd0aClcbid1c2Ugc3RyaWN0JztcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBbXS5jb3B5V2l0aGluIHx8IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0IC8qID0gMCAqLywgc3RhcnQgLyogPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW4gPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IE1hdGgubWluKChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbikpIC0gZnJvbSwgbGVuIC0gdG8pO1xuICB2YXIgaW5jID0gMTtcbiAgaWYgKGZyb20gPCB0byAmJiB0byA8IGZyb20gKyBjb3VudCkge1xuICAgIGluYyA9IC0xO1xuICAgIGZyb20gKz0gY291bnQgLSAxO1xuICAgIHRvICs9IGNvdW50IC0gMTtcbiAgfVxuICB3aGlsZSAoY291bnQtLSA+IDApIHtcbiAgICBpZiAoZnJvbSBpbiBPKSBPW3RvXSA9IE9bZnJvbV07XG4gICAgZWxzZSBkZWxldGUgT1t0b107XG4gICAgdG8gKz0gaW5jO1xuICAgIGZyb20gKz0gaW5jO1xuICB9IHJldHVybiBPO1xufTtcbiIsIi8vIDIyLjEuMy42IEFycmF5LnByb3RvdHlwZS5maWxsKHZhbHVlLCBzdGFydCA9IDAsIGVuZCA9IHRoaXMubGVuZ3RoKVxuJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQgPSAwLCBlbmQgPSBAbGVuZ3RoICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChPLmxlbmd0aCk7XG4gIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBsZW5ndGgpO1xuICB2YXIgZW5kID0gYUxlbiA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBlbmRQb3MgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IHRvQWJzb2x1dGVJbmRleChlbmQsIGxlbmd0aCk7XG4gIHdoaWxlIChlbmRQb3MgPiBpbmRleCkgT1tpbmRleCsrXSA9IHZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlciwgSVRFUkFUT1IpIHtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3JPZihpdGVyLCBmYWxzZSwgcmVzdWx0LnB1c2gsIHJlc3VsdCwgSVRFUkFUT1IpO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKElTX0lOQ0xVREVTKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIGVsLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCgkdGhpcyk7XG4gICAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSB0b0Fic29sdXRlSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpO1xuICAgIHZhciB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIGlmIChJU19JTkNMVURFUyAmJiBlbCAhPSBlbCkgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSB7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChJU19JTkNMVURFUyB8fCBpbmRleCBpbiBPKSB7XG4gICAgICBpZiAoT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuIiwiLy8gMCAtPiBBcnJheSNmb3JFYWNoXG4vLyAxIC0+IEFycmF5I21hcFxuLy8gMiAtPiBBcnJheSNmaWx0ZXJcbi8vIDMgLT4gQXJyYXkjc29tZVxuLy8gNCAtPiBBcnJheSNldmVyeVxuLy8gNSAtPiBBcnJheSNmaW5kXG4vLyA2IC0+IEFycmF5I2ZpbmRJbmRleFxudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGFzYyA9IHJlcXVpcmUoJy4vX2FycmF5LXNwZWNpZXMtY3JlYXRlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUWVBFLCAkY3JlYXRlKSB7XG4gIHZhciBJU19NQVAgPSBUWVBFID09IDE7XG4gIHZhciBJU19GSUxURVIgPSBUWVBFID09IDI7XG4gIHZhciBJU19TT01FID0gVFlQRSA9PSAzO1xuICB2YXIgSVNfRVZFUlkgPSBUWVBFID09IDQ7XG4gIHZhciBJU19GSU5EX0lOREVYID0gVFlQRSA9PSA2O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgdmFyIGNyZWF0ZSA9ICRjcmVhdGUgfHwgYXNjO1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzLCBjYWxsYmFja2ZuLCB0aGF0KSB7XG4gICAgdmFyIE8gPSB0b09iamVjdCgkdGhpcyk7XG4gICAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICAgIHZhciBmID0gY3R4KGNhbGxiYWNrZm4sIHRoYXQsIDMpO1xuICAgIHZhciBsZW5ndGggPSB0b0xlbmd0aChzZWxmLmxlbmd0aCk7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gSVNfTUFQID8gY3JlYXRlKCR0aGlzLCBsZW5ndGgpIDogSVNfRklMVEVSID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsLCByZXM7XG4gICAgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIGlmIChOT19IT0xFUyB8fCBpbmRleCBpbiBzZWxmKSB7XG4gICAgICB2YWwgPSBzZWxmW2luZGV4XTtcbiAgICAgIHJlcyA9IGYodmFsLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSByZXN1bHRbaW5kZXhdID0gcmVzOyAgIC8vIG1hcFxuICAgICAgICBlbHNlIGlmIChyZXMpIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgMzogcmV0dXJuIHRydWU7ICAgICAgICAgICAgIC8vIHNvbWVcbiAgICAgICAgICBjYXNlIDU6IHJldHVybiB2YWw7ICAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgLy8gZmluZEluZGV4XG4gICAgICAgICAgY2FzZSAyOiByZXN1bHQucHVzaCh2YWwpOyAgICAgICAgLy8gZmlsdGVyXG4gICAgICAgIH0gZWxzZSBpZiAoSVNfRVZFUlkpIHJldHVybiBmYWxzZTsgLy8gZXZlcnlcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIElTX0ZJTkRfSU5ERVggPyAtMSA6IElTX1NPTUUgfHwgSVNfRVZFUlkgPyBJU19FVkVSWSA6IHJlc3VsdDtcbiAgfTtcbn07XG4iLCJ2YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0aGF0LCBjYWxsYmFja2ZuLCBhTGVuLCBtZW1vLCBpc1JpZ2h0KSB7XG4gIGFGdW5jdGlvbihjYWxsYmFja2ZuKTtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGF0KTtcbiAgdmFyIHNlbGYgPSBJT2JqZWN0KE8pO1xuICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICB2YXIgaW5kZXggPSBpc1JpZ2h0ID8gbGVuZ3RoIC0gMSA6IDA7XG4gIHZhciBpID0gaXNSaWdodCA/IC0xIDogMTtcbiAgaWYgKGFMZW4gPCAyKSBmb3IgKDs7KSB7XG4gICAgaWYgKGluZGV4IGluIHNlbGYpIHtcbiAgICAgIG1lbW8gPSBzZWxmW2luZGV4XTtcbiAgICAgIGluZGV4ICs9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgaW5kZXggKz0gaTtcbiAgICBpZiAoaXNSaWdodCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgfVxuICB9XG4gIGZvciAoO2lzUmlnaHQgPyBpbmRleCA+PSAwIDogbGVuZ3RoID4gaW5kZXg7IGluZGV4ICs9IGkpIGlmIChpbmRleCBpbiBzZWxmKSB7XG4gICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgfVxuICByZXR1cm4gbWVtbztcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9faXMtYXJyYXknKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob3JpZ2luYWwpIHtcbiAgdmFyIEM7XG4gIGlmIChpc0FycmF5KG9yaWdpbmFsKSkge1xuICAgIEMgPSBvcmlnaW5hbC5jb25zdHJ1Y3RvcjtcbiAgICAvLyBjcm9zcy1yZWFsbSBmYWxsYmFja1xuICAgIGlmICh0eXBlb2YgQyA9PSAnZnVuY3Rpb24nICYmIChDID09PSBBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzT2JqZWN0KEMpKSB7XG4gICAgICBDID0gQ1tTUEVDSUVTXTtcbiAgICAgIGlmIChDID09PSBudWxsKSBDID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfSByZXR1cm4gQyA9PT0gdW5kZWZpbmVkID8gQXJyYXkgOiBDO1xufTtcbiIsIi8vIDkuNC4yLjMgQXJyYXlTcGVjaWVzQ3JlYXRlKG9yaWdpbmFsQXJyYXksIGxlbmd0aClcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsLCBsZW5ndGgpIHtcbiAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKG9yaWdpbmFsKSkobGVuZ3RoKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaW52b2tlID0gcmVxdWlyZSgnLi9faW52b2tlJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xudmFyIGZhY3RvcmllcyA9IHt9O1xuXG52YXIgY29uc3RydWN0ID0gZnVuY3Rpb24gKEYsIGxlbiwgYXJncykge1xuICBpZiAoIShsZW4gaW4gZmFjdG9yaWVzKSkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgaSA9IDA7IGkgPCBsZW47IGkrKykgbltpXSA9ICdhWycgKyBpICsgJ10nO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXctZnVuY1xuICAgIGZhY3Rvcmllc1tsZW5dID0gRnVuY3Rpb24oJ0YsYScsICdyZXR1cm4gbmV3IEYoJyArIG4uam9pbignLCcpICsgJyknKTtcbiAgfSByZXR1cm4gZmFjdG9yaWVzW2xlbl0oRiwgYXJncyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmJpbmQgfHwgZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgZm4gPSBhRnVuY3Rpb24odGhpcyk7XG4gIHZhciBwYXJ0QXJncyA9IGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICB2YXIgYm91bmQgPSBmdW5jdGlvbiAoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gcGFydEFyZ3MuY29uY2F0KGFycmF5U2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGJvdW5kID8gY29uc3RydWN0KGZuLCBhcmdzLmxlbmd0aCwgYXJncykgOiBpbnZva2UoZm4sIGFyZ3MsIHRoYXQpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoZm4ucHJvdG90eXBlKSkgYm91bmQucHJvdG90eXBlID0gZm4ucHJvdG90eXBlO1xuICByZXR1cm4gYm91bmQ7XG59O1xuIiwiLy8gZ2V0dGluZyB0YWcgZnJvbSAxOS4xLjMuNiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKClcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcbi8vIEVTMyB3cm9uZyBoZXJlXG52YXIgQVJHID0gY29mKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA9PSAnQXJndW1lbnRzJztcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgU2NyaXB0IEFjY2VzcyBEZW5pZWQgZXJyb3JcbnZhciB0cnlHZXQgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICB0cnkge1xuICAgIHJldHVybiBpdFtrZXldO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCBULCBCO1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/ICdVbmRlZmluZWQnIDogaXQgPT09IG51bGwgPyAnTnVsbCdcbiAgICAvLyBAQHRvU3RyaW5nVGFnIGNhc2VcbiAgICA6IHR5cGVvZiAoVCA9IHRyeUdldChPID0gT2JqZWN0KGl0KSwgVEFHKSkgPT0gJ3N0cmluZycgPyBUXG4gICAgLy8gYnVpbHRpblRhZyBjYXNlXG4gICAgOiBBUkcgPyBjb2YoTylcbiAgICAvLyBFUzMgYXJndW1lbnRzIGZhbGxiYWNrXG4gICAgOiAoQiA9IGNvZihPKSkgPT0gJ09iamVjdCcgJiYgdHlwZW9mIE8uY2FsbGVlID09ICdmdW5jdGlvbicgPyAnQXJndW1lbnRzJyA6IEI7XG59O1xuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGl0KS5zbGljZSg4LCAtMSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciBmb3JPZiA9IHJlcXVpcmUoJy4vX2Zvci1vZicpO1xudmFyICRpdGVyRGVmaW5lID0gcmVxdWlyZSgnLi9faXRlci1kZWZpbmUnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuL19tZXRhJykuZmFzdEtleTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBTSVpFID0gREVTQ1JJUFRPUlMgPyAnX3MnIDogJ3NpemUnO1xuXG52YXIgZ2V0RW50cnkgPSBmdW5jdGlvbiAodGhhdCwga2V5KSB7XG4gIC8vIGZhc3QgY2FzZVxuICB2YXIgaW5kZXggPSBmYXN0S2V5KGtleSk7XG4gIHZhciBlbnRyeTtcbiAgaWYgKGluZGV4ICE9PSAnRicpIHJldHVybiB0aGF0Ll9pW2luZGV4XTtcbiAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gIGZvciAoZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgaWYgKGVudHJ5LmsgPT0ga2V5KSByZXR1cm4gZW50cnk7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQyA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGl0ZXJhYmxlKSB7XG4gICAgICBhbkluc3RhbmNlKHRoYXQsIEMsIE5BTUUsICdfaScpO1xuICAgICAgdGhhdC5fdCA9IE5BTUU7ICAgICAgICAgLy8gY29sbGVjdGlvbiB0eXBlXG4gICAgICB0aGF0Ll9pID0gY3JlYXRlKG51bGwpOyAvLyBpbmRleFxuICAgICAgdGhhdC5fZiA9IHVuZGVmaW5lZDsgICAgLy8gZmlyc3QgZW50cnlcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7ICAgIC8vIGxhc3QgZW50cnlcbiAgICAgIHRoYXRbU0laRV0gPSAwOyAgICAgICAgIC8vIHNpemVcbiAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGZvck9mKGl0ZXJhYmxlLCBJU19NQVAsIHRoYXRbQURERVJdLCB0aGF0KTtcbiAgICB9KTtcbiAgICByZWRlZmluZUFsbChDLnByb3RvdHlwZSwge1xuICAgICAgLy8gMjMuMS4zLjEgTWFwLnByb3RvdHlwZS5jbGVhcigpXG4gICAgICAvLyAyMy4yLjMuMiBTZXQucHJvdG90eXBlLmNsZWFyKClcbiAgICAgIGNsZWFyOiBmdW5jdGlvbiBjbGVhcigpIHtcbiAgICAgICAgZm9yICh2YXIgdGhhdCA9IHZhbGlkYXRlKHRoaXMsIE5BTUUpLCBkYXRhID0gdGhhdC5faSwgZW50cnkgPSB0aGF0Ll9mOyBlbnRyeTsgZW50cnkgPSBlbnRyeS5uKSB7XG4gICAgICAgICAgZW50cnkuciA9IHRydWU7XG4gICAgICAgICAgaWYgKGVudHJ5LnApIGVudHJ5LnAgPSBlbnRyeS5wLm4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgZGVsZXRlIGRhdGFbZW50cnkuaV07XG4gICAgICAgIH1cbiAgICAgICAgdGhhdC5fZiA9IHRoYXQuX2wgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoYXRbU0laRV0gPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIDIzLjEuMy4zIE1hcC5wcm90b3R5cGUuZGVsZXRlKGtleSlcbiAgICAgIC8vIDIzLjIuMy40IFNldC5wcm90b3R5cGUuZGVsZXRlKHZhbHVlKVxuICAgICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIHRoYXQgPSB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhhdCwga2V5KTtcbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgdmFyIG5leHQgPSBlbnRyeS5uO1xuICAgICAgICAgIHZhciBwcmV2ID0gZW50cnkucDtcbiAgICAgICAgICBkZWxldGUgdGhhdC5faVtlbnRyeS5pXTtcbiAgICAgICAgICBlbnRyeS5yID0gdHJ1ZTtcbiAgICAgICAgICBpZiAocHJldikgcHJldi5uID0gbmV4dDtcbiAgICAgICAgICBpZiAobmV4dCkgbmV4dC5wID0gcHJldjtcbiAgICAgICAgICBpZiAodGhhdC5fZiA9PSBlbnRyeSkgdGhhdC5fZiA9IG5leHQ7XG4gICAgICAgICAgaWYgKHRoYXQuX2wgPT0gZW50cnkpIHRoYXQuX2wgPSBwcmV2O1xuICAgICAgICAgIHRoYXRbU0laRV0tLTtcbiAgICAgICAgfSByZXR1cm4gISFlbnRyeTtcbiAgICAgIH0sXG4gICAgICAvLyAyMy4yLjMuNiBTZXQucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbiAgICAgIC8vIDIzLjEuMy41IE1hcC5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YWxpZGF0ZSh0aGlzLCBOQU1FKTtcbiAgICAgICAgdmFyIGYgPSBjdHgoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIDMpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoaXMuX2YpIHtcbiAgICAgICAgICBmKGVudHJ5LnYsIGVudHJ5LmssIHRoaXMpO1xuICAgICAgICAgIC8vIHJldmVydCB0byB0aGUgbGFzdCBleGlzdGluZyBlbnRyeVxuICAgICAgICAgIHdoaWxlIChlbnRyeSAmJiBlbnRyeS5yKSBlbnRyeSA9IGVudHJ5LnA7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyAyMy4xLjMuNyBNYXAucHJvdG90eXBlLmhhcyhrZXkpXG4gICAgICAvLyAyMy4yLjMuNyBTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSwga2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRQKEMucHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdGUodGhpcywgTkFNRSlbU0laRV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZW50cnkgPSBnZXRFbnRyeSh0aGF0LCBrZXkpO1xuICAgIHZhciBwcmV2LCBpbmRleDtcbiAgICAvLyBjaGFuZ2UgZXhpc3RpbmcgZW50cnlcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIGVudHJ5LnYgPSB2YWx1ZTtcbiAgICAvLyBjcmVhdGUgbmV3IGVudHJ5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoYXQuX2wgPSBlbnRyeSA9IHtcbiAgICAgICAgaTogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksIC8vIDwtIGluZGV4XG4gICAgICAgIGs6IGtleSwgICAgICAgICAgICAgICAgICAgICAgICAvLyA8LSBrZXlcbiAgICAgICAgdjogdmFsdWUsICAgICAgICAgICAgICAgICAgICAgIC8vIDwtIHZhbHVlXG4gICAgICAgIHA6IHByZXYgPSB0aGF0Ll9sLCAgICAgICAgICAgICAvLyA8LSBwcmV2aW91cyBlbnRyeVxuICAgICAgICBuOiB1bmRlZmluZWQsICAgICAgICAgICAgICAgICAgLy8gPC0gbmV4dCBlbnRyeVxuICAgICAgICByOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgLy8gPC0gcmVtb3ZlZFxuICAgICAgfTtcbiAgICAgIGlmICghdGhhdC5fZikgdGhhdC5fZiA9IGVudHJ5O1xuICAgICAgaWYgKHByZXYpIHByZXYubiA9IGVudHJ5O1xuICAgICAgdGhhdFtTSVpFXSsrO1xuICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICBpZiAoaW5kZXggIT09ICdGJykgdGhhdC5faVtpbmRleF0gPSBlbnRyeTtcbiAgICB9IHJldHVybiB0aGF0O1xuICB9LFxuICBnZXRFbnRyeTogZ2V0RW50cnksXG4gIHNldFN0cm9uZzogZnVuY3Rpb24gKEMsIE5BTUUsIElTX01BUCkge1xuICAgIC8vIGFkZCAua2V5cywgLnZhbHVlcywgLmVudHJpZXMsIFtAQGl0ZXJhdG9yXVxuICAgIC8vIDIzLjEuMy40LCAyMy4xLjMuOCwgMjMuMS4zLjExLCAyMy4xLjMuMTIsIDIzLjIuMy41LCAyMy4yLjMuOCwgMjMuMi4zLjEwLCAyMy4yLjMuMTFcbiAgICAkaXRlckRlZmluZShDLCBOQU1FLCBmdW5jdGlvbiAoaXRlcmF0ZWQsIGtpbmQpIHtcbiAgICAgIHRoaXMuX3QgPSB2YWxpZGF0ZShpdGVyYXRlZCwgTkFNRSk7IC8vIHRhcmdldFxuICAgICAgdGhpcy5fayA9IGtpbmQ7ICAgICAgICAgICAgICAgICAgICAgLy8ga2luZFxuICAgICAgdGhpcy5fbCA9IHVuZGVmaW5lZDsgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICB2YXIga2luZCA9IHRoYXQuX2s7XG4gICAgICB2YXIgZW50cnkgPSB0aGF0Ll9sO1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucikgZW50cnkgPSBlbnRyeS5wO1xuICAgICAgLy8gZ2V0IG5leHQgZW50cnlcbiAgICAgIGlmICghdGhhdC5fdCB8fCAhKHRoYXQuX2wgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubiA6IHRoYXQuX3QuX2YpKSB7XG4gICAgICAgIC8vIG9yIGZpbmlzaCB0aGUgaXRlcmF0aW9uXG4gICAgICAgIHRoYXQuX3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBzdGVwKDEpO1xuICAgICAgfVxuICAgICAgLy8gcmV0dXJuIHN0ZXAgYnkga2luZFxuICAgICAgaWYgKGtpbmQgPT0gJ2tleXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS5rKTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4gc3RlcCgwLCBlbnRyeS52KTtcbiAgICAgIHJldHVybiBzdGVwKDAsIFtlbnRyeS5rLCBlbnRyeS52XSk7XG4gICAgfSwgSVNfTUFQID8gJ2VudHJpZXMnIDogJ3ZhbHVlcycsICFJU19NQVAsIHRydWUpO1xuXG4gICAgLy8gYWRkIFtAQHNwZWNpZXNdLCAyMy4xLjIuMiwgMjMuMi4yLjJcbiAgICBzZXRTcGVjaWVzKE5BTUUpO1xuICB9XG59O1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL0RhdmlkQnJ1YW50L01hcC1TZXQucHJvdG90eXBlLnRvSlNPTlxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE5BTUUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICBpZiAoY2xhc3NvZih0aGlzKSAhPSBOQU1FKSB0aHJvdyBUeXBlRXJyb3IoTkFNRSArIFwiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO1xuICAgIHJldHVybiBmcm9tKHRoaXMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGdldFdlYWsgPSByZXF1aXJlKCcuL19tZXRhJykuZ2V0V2VhaztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBjcmVhdGVBcnJheU1ldGhvZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKTtcbnZhciAkaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG52YXIgYXJyYXlGaW5kSW5kZXggPSBjcmVhdGVBcnJheU1ldGhvZCg2KTtcbnZhciBpZCA9IDA7XG5cbi8vIGZhbGxiYWNrIGZvciB1bmNhdWdodCBmcm96ZW4ga2V5c1xudmFyIHVuY2F1Z2h0RnJvemVuU3RvcmUgPSBmdW5jdGlvbiAodGhhdCkge1xuICByZXR1cm4gdGhhdC5fbCB8fCAodGhhdC5fbCA9IG5ldyBVbmNhdWdodEZyb3plblN0b3JlKCkpO1xufTtcbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmEgPSBbXTtcbn07XG52YXIgZmluZFVuY2F1Z2h0RnJvemVuID0gZnVuY3Rpb24gKHN0b3JlLCBrZXkpIHtcbiAgcmV0dXJuIGFycmF5RmluZChzdG9yZS5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuVW5jYXVnaHRGcm96ZW5TdG9yZS5wcm90b3R5cGUgPSB7XG4gIGdldDogZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgcmV0dXJuIGVudHJ5WzFdO1xuICB9LFxuICBoYXM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gISFmaW5kVW5jYXVnaHRGcm96ZW4odGhpcywga2V5KTtcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBlbnRyeSA9IGZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICAgIGlmIChlbnRyeSkgZW50cnlbMV0gPSB2YWx1ZTtcbiAgICBlbHNlIHRoaXMuYS5wdXNoKFtrZXksIHZhbHVlXSk7XG4gIH0sXG4gICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGluZGV4ID0gYXJyYXlGaW5kSW5kZXgodGhpcy5hLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHRoaXMuYS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIHJldHVybiAhIX5pbmRleDtcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvbnN0cnVjdG9yOiBmdW5jdGlvbiAod3JhcHBlciwgTkFNRSwgSVNfTUFQLCBBRERFUikge1xuICAgIHZhciBDID0gd3JhcHBlcihmdW5jdGlvbiAodGhhdCwgaXRlcmFibGUpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhhdCwgQywgTkFNRSwgJ19pJyk7XG4gICAgICB0aGF0Ll90ID0gTkFNRTsgICAgICAvLyBjb2xsZWN0aW9uIHR5cGVcbiAgICAgIHRoYXQuX2kgPSBpZCsrOyAgICAgIC8vIGNvbGxlY3Rpb24gaWRcbiAgICAgIHRoYXQuX2wgPSB1bmRlZmluZWQ7IC8vIGxlYWsgc3RvcmUgZm9yIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RzXG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBmb3JPZihpdGVyYWJsZSwgSVNfTUFQLCB0aGF0W0FEREVSXSwgdGhhdCk7XG4gICAgfSk7XG4gICAgcmVkZWZpbmVBbGwoQy5wcm90b3R5cGUsIHtcbiAgICAgIC8vIDIzLjMuMy4yIFdlYWtNYXAucHJvdG90eXBlLmRlbGV0ZShrZXkpXG4gICAgICAvLyAyMy40LjMuMyBXZWFrU2V0LnByb3RvdHlwZS5kZWxldGUodmFsdWUpXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSkgJiYgZGVsZXRlIGRhdGFbdGhpcy5faV07XG4gICAgICB9LFxuICAgICAgLy8gMjMuMy4zLjQgV2Vha01hcC5wcm90b3R5cGUuaGFzKGtleSlcbiAgICAgIC8vIDIzLjQuMy40IFdlYWtTZXQucHJvdG90eXBlLmhhcyh2YWx1ZSlcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGtleSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBOQU1FKSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmICRoYXMoZGF0YSwgdGhpcy5faSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIEM7XG4gIH0sXG4gIGRlZjogZnVuY3Rpb24gKHRoYXQsIGtleSwgdmFsdWUpIHtcbiAgICB2YXIgZGF0YSA9IGdldFdlYWsoYW5PYmplY3Qoa2V5KSwgdHJ1ZSk7XG4gICAgaWYgKGRhdGEgPT09IHRydWUpIHVuY2F1Z2h0RnJvemVuU3RvcmUodGhhdCkuc2V0KGtleSwgdmFsdWUpO1xuICAgIGVsc2UgZGF0YVt0aGF0Ll9pXSA9IHZhbHVlO1xuICAgIHJldHVybiB0aGF0O1xuICB9LFxuICB1ZnN0b3JlOiB1bmNhdWdodEZyb3plblN0b3JlXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgd3JhcHBlciwgbWV0aG9kcywgY29tbW9uLCBJU19NQVAsIElTX1dFQUspIHtcbiAgdmFyIEJhc2UgPSBnbG9iYWxbTkFNRV07XG4gIHZhciBDID0gQmFzZTtcbiAgdmFyIEFEREVSID0gSVNfTUFQID8gJ3NldCcgOiAnYWRkJztcbiAgdmFyIHByb3RvID0gQyAmJiBDLnByb3RvdHlwZTtcbiAgdmFyIE8gPSB7fTtcbiAgdmFyIGZpeE1ldGhvZCA9IGZ1bmN0aW9uIChLRVkpIHtcbiAgICB2YXIgZm4gPSBwcm90b1tLRVldO1xuICAgIHJlZGVmaW5lKHByb3RvLCBLRVksXG4gICAgICBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyBmYWxzZSA6IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhKTtcbiAgICAgIH0gOiBLRVkgPT0gJ2dldCcgPyBmdW5jdGlvbiBnZXQoYSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3QoYSkgPyB1bmRlZmluZWQgOiBmbi5jYWxsKHRoaXMsIGEgPT09IDAgPyAwIDogYSk7XG4gICAgICB9IDogS0VZID09ICdhZGQnID8gZnVuY3Rpb24gYWRkKGEpIHsgZm4uY2FsbCh0aGlzLCBhID09PSAwID8gMCA6IGEpOyByZXR1cm4gdGhpczsgfVxuICAgICAgICA6IGZ1bmN0aW9uIHNldChhLCBiKSB7IGZuLmNhbGwodGhpcywgYSA9PT0gMCA/IDAgOiBhLCBiKTsgcmV0dXJuIHRoaXM7IH1cbiAgICApO1xuICB9O1xuICBpZiAodHlwZW9mIEMgIT0gJ2Z1bmN0aW9uJyB8fCAhKElTX1dFQUsgfHwgcHJvdG8uZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBDKCkuZW50cmllcygpLm5leHQoKTtcbiAgfSkpKSB7XG4gICAgLy8gY3JlYXRlIGNvbGxlY3Rpb24gY29uc3RydWN0b3JcbiAgICBDID0gY29tbW9uLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsIE5BTUUsIElTX01BUCwgQURERVIpO1xuICAgIHJlZGVmaW5lQWxsKEMucHJvdG90eXBlLCBtZXRob2RzKTtcbiAgICBtZXRhLk5FRUQgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgLy8gZWFybHkgaW1wbGVtZW50YXRpb25zIG5vdCBzdXBwb3J0cyBjaGFpbmluZ1xuICAgIHZhciBIQVNOVF9DSEFJTklORyA9IGluc3RhbmNlW0FEREVSXShJU19XRUFLID8ge30gOiAtMCwgMSkgIT0gaW5zdGFuY2U7XG4gICAgLy8gVjggfiAgQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICB2YXIgQUNDRVBUX0lURVJBQkxFUyA9ICRpdGVyRGV0ZWN0KGZ1bmN0aW9uIChpdGVyKSB7IG5ldyBDKGl0ZXIpOyB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAvLyBmb3IgZWFybHkgaW1wbGVtZW50YXRpb25zIC0wIGFuZCArMCBub3QgdGhlIHNhbWVcbiAgICB2YXIgQlVHR1lfWkVSTyA9ICFJU19XRUFLICYmIGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIC8vIFY4IH4gQ2hyb21pdW0gNDItIGZhaWxzIG9ubHkgd2l0aCA1KyBlbGVtZW50c1xuICAgICAgdmFyICRpbnN0YW5jZSA9IG5ldyBDKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG4gICAgaWYgKCFBQ0NFUFRfSVRFUkFCTEVTKSB7XG4gICAgICBDID0gd3JhcHBlcihmdW5jdGlvbiAodGFyZ2V0LCBpdGVyYWJsZSkge1xuICAgICAgICBhbkluc3RhbmNlKHRhcmdldCwgQywgTkFNRSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IEJhc2UoKSwgdGFyZ2V0LCBDKTtcbiAgICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgZm9yT2YoaXRlcmFibGUsIElTX01BUCwgdGhhdFtBRERFUl0sIHRoYXQpO1xuICAgICAgICByZXR1cm4gdGhhdDtcbiAgICAgIH0pO1xuICAgICAgQy5wcm90b3R5cGUgPSBwcm90bztcbiAgICAgIHByb3RvLmNvbnN0cnVjdG9yID0gQztcbiAgICB9XG4gICAgaWYgKFRIUk9XU19PTl9QUklNSVRJVkVTIHx8IEJVR0dZX1pFUk8pIHtcbiAgICAgIGZpeE1ldGhvZCgnZGVsZXRlJyk7XG4gICAgICBmaXhNZXRob2QoJ2hhcycpO1xuICAgICAgSVNfTUFQICYmIGZpeE1ldGhvZCgnZ2V0Jyk7XG4gICAgfVxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuICAgIC8vIHdlYWsgY29sbGVjdGlvbnMgc2hvdWxkIG5vdCBjb250YWlucyAuY2xlYXIgbWV0aG9kXG4gICAgaWYgKElTX1dFQUsgJiYgcHJvdG8uY2xlYXIpIGRlbGV0ZSBwcm90by5jbGVhcjtcbiAgfVxuXG4gIHNldFRvU3RyaW5nVGFnKEMsIE5BTUUpO1xuXG4gIE9bTkFNRV0gPSBDO1xuICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChDICE9IEJhc2UpLCBPKTtcblxuICBpZiAoIUlTX1dFQUspIGNvbW1vbi5zZXRTdHJvbmcoQywgTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQztcbn07XG4iLCJ2YXIgY29yZSA9IG1vZHVsZS5leHBvcnRzID0geyB2ZXJzaW9uOiAnMi42LjEyJyB9O1xuaWYgKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpIF9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICBpZiAoaW5kZXggaW4gb2JqZWN0KSAkZGVmaW5lUHJvcGVydHkuZihvYmplY3QsIGluZGV4LCBjcmVhdGVEZXNjKDAsIHZhbHVlKSk7XG4gIGVsc2Ugb2JqZWN0W2luZGV4XSA9IHZhbHVlO1xufTtcbiIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCB0aGF0LCBsZW5ndGgpIHtcbiAgYUZ1bmN0aW9uKGZuKTtcbiAgaWYgKHRoYXQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGZuO1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uIChhKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhKTtcbiAgICB9O1xuICAgIGNhc2UgMjogcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiKTtcbiAgICB9O1xuICAgIGNhc2UgMzogcmV0dXJuIGZ1bmN0aW9uIChhLCBiLCBjKSB7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbiAoLyogLi4uYXJncyAqLykge1xuICAgIHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmd1bWVudHMpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIwLjMuNC4zNiAvIDE1LjkuNS40MyBEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZygpXG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGdldFRpbWUgPSBEYXRlLnByb3RvdHlwZS5nZXRUaW1lO1xudmFyICR0b0lTT1N0cmluZyA9IERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nO1xuXG52YXIgbHogPSBmdW5jdGlvbiAobnVtKSB7XG4gIHJldHVybiBudW0gPiA5ID8gbnVtIDogJzAnICsgbnVtO1xufTtcblxuLy8gUGhhbnRvbUpTIC8gb2xkIFdlYktpdCBoYXMgYSBicm9rZW4gaW1wbGVtZW50YXRpb25zXG5tb2R1bGUuZXhwb3J0cyA9IChmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkdG9JU09TdHJpbmcuY2FsbChuZXcgRGF0ZSgtNWUxMyAtIDEpKSAhPSAnMDM4NS0wNy0yNVQwNzowNjozOS45OTlaJztcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0lTT1N0cmluZy5jYWxsKG5ldyBEYXRlKE5hTikpO1xufSkpID8gZnVuY3Rpb24gdG9JU09TdHJpbmcoKSB7XG4gIGlmICghaXNGaW5pdGUoZ2V0VGltZS5jYWxsKHRoaXMpKSkgdGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCB0aW1lIHZhbHVlJyk7XG4gIHZhciBkID0gdGhpcztcbiAgdmFyIHkgPSBkLmdldFVUQ0Z1bGxZZWFyKCk7XG4gIHZhciBtID0gZC5nZXRVVENNaWxsaXNlY29uZHMoKTtcbiAgdmFyIHMgPSB5IDwgMCA/ICctJyA6IHkgPiA5OTk5ID8gJysnIDogJyc7XG4gIHJldHVybiBzICsgKCcwMDAwMCcgKyBNYXRoLmFicyh5KSkuc2xpY2UocyA/IC02IDogLTQpICtcbiAgICAnLScgKyBseihkLmdldFVUQ01vbnRoKCkgKyAxKSArICctJyArIGx6KGQuZ2V0VVRDRGF0ZSgpKSArXG4gICAgJ1QnICsgbHooZC5nZXRVVENIb3VycygpKSArICc6JyArIGx6KGQuZ2V0VVRDTWludXRlcygpKSArXG4gICAgJzonICsgbHooZC5nZXRVVENTZWNvbmRzKCkpICsgJy4nICsgKG0gPiA5OSA/IG0gOiAnMCcgKyBseihtKSkgKyAnWic7XG59IDogJHRvSVNPU3RyaW5nO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBOVU1CRVIgPSAnbnVtYmVyJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaGludCkge1xuICBpZiAoaGludCAhPT0gJ3N0cmluZycgJiYgaGludCAhPT0gTlVNQkVSICYmIGhpbnQgIT09ICdkZWZhdWx0JykgdGhyb3cgVHlwZUVycm9yKCdJbmNvcnJlY3QgaGludCcpO1xuICByZXR1cm4gdG9QcmltaXRpdmUoYW5PYmplY3QodGhpcyksIGhpbnQgIT0gTlVNQkVSKTtcbn07XG4iLCIvLyA3LjIuMSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09IHVuZGVmaW5lZCkgdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiICsgaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH0gfSkuYSAhPSA3O1xufSk7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBkb2N1bWVudCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLmRvY3VtZW50O1xuLy8gdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCcgaW4gb2xkIElFXG52YXIgaXMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuIiwiLy8gYWxsIGVudW1lcmFibGUgb2JqZWN0IGtleXMsIGluY2x1ZGVzIHN5bWJvbHNcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBwSUUgPSByZXF1aXJlKCcuL19vYmplY3QtcGllJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gZ2V0S2V5cyhpdCk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICBpZiAoZ2V0U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gZ2V0U3ltYm9scyhpdCk7XG4gICAgdmFyIGlzRW51bSA9IHBJRS5mO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChzeW1ib2xzLmxlbmd0aCA+IGkpIGlmIChpc0VudW0uY2FsbChpdCwga2V5ID0gc3ltYm9sc1tpKytdKSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uICh0eXBlLCBuYW1lLCBzb3VyY2UpIHtcbiAgdmFyIElTX0ZPUkNFRCA9IHR5cGUgJiAkZXhwb3J0LkY7XG4gIHZhciBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HO1xuICB2YXIgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuUztcbiAgdmFyIElTX1BST1RPID0gdHlwZSAmICRleHBvcnQuUDtcbiAgdmFyIElTX0JJTkQgPSB0eXBlICYgJGV4cG9ydC5CO1xuICB2YXIgdGFyZ2V0ID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIHx8IChnbG9iYWxbbmFtZV0gPSB7fSkgOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdO1xuICB2YXIgZXhwb3J0cyA9IElTX0dMT0JBTCA/IGNvcmUgOiBjb3JlW25hbWVdIHx8IChjb3JlW25hbWVdID0ge30pO1xuICB2YXIgZXhwUHJvdG8gPSBleHBvcnRzW1BST1RPVFlQRV0gfHwgKGV4cG9ydHNbUFJPVE9UWVBFXSA9IHt9KTtcbiAgdmFyIGtleSwgb3duLCBvdXQsIGV4cDtcbiAgaWYgKElTX0dMT0JBTCkgc291cmNlID0gbmFtZTtcbiAgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgLy8gY29udGFpbnMgaW4gbmF0aXZlXG4gICAgb3duID0gIUlTX0ZPUkNFRCAmJiB0YXJnZXQgJiYgdGFyZ2V0W2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IChvd24gPyB0YXJnZXQgOiBzb3VyY2UpW2tleV07XG4gICAgLy8gYmluZCB0aW1lcnMgdG8gZ2xvYmFsIGZvciBjYWxsIGZyb20gZXhwb3J0IGNvbnRleHRcbiAgICBleHAgPSBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHRlbmQgZ2xvYmFsXG4gICAgaWYgKHRhcmdldCkgcmVkZWZpbmUodGFyZ2V0LCBrZXksIG91dCwgdHlwZSAmICRleHBvcnQuVSk7XG4gICAgLy8gZXhwb3J0XG4gICAgaWYgKGV4cG9ydHNba2V5XSAhPSBvdXQpIGhpZGUoZXhwb3J0cywga2V5LCBleHApO1xuICAgIGlmIChJU19QUk9UTyAmJiBleHBQcm90b1trZXldICE9IG91dCkgZXhwUHJvdG9ba2V5XSA9IG91dDtcbiAgfVxufTtcbmdsb2JhbC5jb3JlID0gY29yZTtcbi8vIHR5cGUgYml0bWFwXG4kZXhwb3J0LkYgPSAxOyAgIC8vIGZvcmNlZFxuJGV4cG9ydC5HID0gMjsgICAvLyBnbG9iYWxcbiRleHBvcnQuUyA9IDQ7ICAgLy8gc3RhdGljXG4kZXhwb3J0LlAgPSA4OyAgIC8vIHByb3RvXG4kZXhwb3J0LkIgPSAxNjsgIC8vIGJpbmRcbiRleHBvcnQuVyA9IDMyOyAgLy8gd3JhcFxuJGV4cG9ydC5VID0gNjQ7ICAvLyBzYWZlXG4kZXhwb3J0LlIgPSAxMjg7IC8vIHJlYWwgcHJvdG8gbWV0aG9kIGZvciBgbGlicmFyeWBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcbiIsInZhciBNQVRDSCA9IHJlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoS0VZKSB7XG4gIHZhciByZSA9IC8uLztcbiAgdHJ5IHtcbiAgICAnLy4vJ1tLRVldKHJlKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRyeSB7XG4gICAgICByZVtNQVRDSF0gPSBmYWxzZTtcbiAgICAgIHJldHVybiAhJy8uLydbS0VZXShyZSk7XG4gICAgfSBjYXRjaCAoZikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIHRydWU7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYykge1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xucmVxdWlyZSgnLi9lczYucmVnZXhwLmV4ZWMnKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcblxudmFyIFNQRUNJRVMgPSB3a3MoJ3NwZWNpZXMnKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gI3JlcGxhY2UgbmVlZHMgYnVpbHQtaW4gc3VwcG9ydCBmb3IgbmFtZWQgZ3JvdXBzLlxuICAvLyAjbWF0Y2ggd29ya3MgZmluZSBiZWNhdXNlIGl0IGp1c3QgcmV0dXJuIHRoZSBleGVjIHJlc3VsdHMsIGV2ZW4gaWYgaXQgaGFzXG4gIC8vIGEgXCJncm9wc1wiIHByb3BlcnR5LlxuICB2YXIgcmUgPSAvLi87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHJlc3VsdC5ncm91cHMgPSB7IGE6ICc3JyB9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIHJldHVybiAnJy5yZXBsYWNlKHJlLCAnJDxhPicpICE9PSAnNyc7XG59KTtcblxudmFyIFNQTElUX1dPUktTX1dJVEhfT1ZFUldSSVRURU5fRVhFQyA9IChmdW5jdGlvbiAoKSB7XG4gIC8vIENocm9tZSA1MSBoYXMgYSBidWdneSBcInNwbGl0XCIgaW1wbGVtZW50YXRpb24gd2hlbiBSZWdFeHAjZXhlYyAhPT0gbmF0aXZlRXhlY1xuICB2YXIgcmUgPSAvKD86KS87XG4gIHZhciBvcmlnaW5hbEV4ZWMgPSByZS5leGVjO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gb3JpZ2luYWxFeGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH07XG4gIHZhciByZXN1bHQgPSAnYWInLnNwbGl0KHJlKTtcbiAgcmV0dXJuIHJlc3VsdC5sZW5ndGggPT09IDIgJiYgcmVzdWx0WzBdID09PSAnYScgJiYgcmVzdWx0WzFdID09PSAnYic7XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGxlbmd0aCwgZXhlYykge1xuICB2YXIgU1lNQk9MID0gd2tzKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCA/ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgLy8gU3ltYm9sLW5hbWVkIFJlZ0V4cCBtZXRob2RzIGNhbGwgLmV4ZWNcbiAgICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICAgIHZhciByZSA9IC9hLztcbiAgICByZS5leGVjID0gZnVuY3Rpb24gKCkgeyBleGVjQ2FsbGVkID0gdHJ1ZTsgcmV0dXJuIG51bGw7IH07XG4gICAgaWYgKEtFWSA9PT0gJ3NwbGl0Jykge1xuICAgICAgLy8gUmVnRXhwW0BAc3BsaXRdIGRvZXNuJ3QgY2FsbCB0aGUgcmVnZXgncyBleGVjIG1ldGhvZCwgYnV0IGZpcnN0IGNyZWF0ZXNcbiAgICAgIC8vIGEgbmV3IG9uZS4gV2UgbmVlZCB0byByZXR1cm4gdGhlIHBhdGNoZWQgcmVnZXggd2hlbiBjcmVhdGluZyB0aGUgbmV3IG9uZS5cbiAgICAgIHJlLmNvbnN0cnVjdG9yID0ge307XG4gICAgICByZS5jb25zdHJ1Y3RvcltTUEVDSUVTXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlOyB9O1xuICAgIH1cbiAgICByZVtTWU1CT0xdKCcnKTtcbiAgICByZXR1cm4gIWV4ZWNDYWxsZWQ7XG4gIH0pIDogdW5kZWZpbmVkO1xuXG4gIGlmIChcbiAgICAhREVMRUdBVEVTX1RPX1NZTUJPTCB8fFxuICAgICFERUxFR0FURVNfVE9fRVhFQyB8fFxuICAgIChLRVkgPT09ICdyZXBsYWNlJyAmJiAhUkVQTEFDRV9TVVBQT1JUU19OQU1FRF9HUk9VUFMpIHx8XG4gICAgKEtFWSA9PT0gJ3NwbGl0JyAmJiAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDKVxuICApIHtcbiAgICB2YXIgbmF0aXZlUmVnRXhwTWV0aG9kID0gLy4vW1NZTUJPTF07XG4gICAgdmFyIGZucyA9IGV4ZWMoXG4gICAgICBkZWZpbmVkLFxuICAgICAgU1lNQk9MLFxuICAgICAgJydbS0VZXSxcbiAgICAgIGZ1bmN0aW9uIG1heWJlQ2FsbE5hdGl2ZShuYXRpdmVNZXRob2QsIHJlZ2V4cCwgc3RyLCBhcmcyLCBmb3JjZVN0cmluZ01ldGhvZCkge1xuICAgICAgICBpZiAocmVnZXhwLmV4ZWMgPT09IHJlZ2V4cEV4ZWMpIHtcbiAgICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAgIC8vIFRoZSBuYXRpdmUgU3RyaW5nIG1ldGhvZCBhbHJlYWR5IGRlbGVnYXRlcyB0byBAQG1ldGhvZCAodGhpc1xuICAgICAgICAgICAgLy8gcG9seWZpbGxlZCBmdW5jdGlvbiksIGxlYXNpbmcgdG8gaW5maW5pdGUgcmVjdXJzaW9uLlxuICAgICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiBuYXRpdmVSZWdFeHBNZXRob2QuY2FsbChyZWdleHAsIHN0ciwgYXJnMikgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHJ1ZSwgdmFsdWU6IG5hdGl2ZU1ldGhvZC5jYWxsKHN0ciwgcmVnZXhwLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlIH07XG4gICAgICB9XG4gICAgKTtcbiAgICB2YXIgc3RyZm4gPSBmbnNbMF07XG4gICAgdmFyIHJ4Zm4gPSBmbnNbMV07XG5cbiAgICByZWRlZmluZShTdHJpbmcucHJvdG90eXBlLCBLRVksIHN0cmZuKTtcbiAgICBoaWRlKFJlZ0V4cC5wcm90b3R5cGUsIFNZTUJPTCwgbGVuZ3RoID09IDJcbiAgICAgIC8vIDIxLjIuNS44IFJlZ0V4cC5wcm90b3R5cGVbQEByZXBsYWNlXShzdHJpbmcsIHJlcGxhY2VWYWx1ZSlcbiAgICAgIC8vIDIxLjIuNS4xMSBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdKHN0cmluZywgbGltaXQpXG4gICAgICA/IGZ1bmN0aW9uIChzdHJpbmcsIGFyZykgeyByZXR1cm4gcnhmbi5jYWxsKHN0cmluZywgdGhpcywgYXJnKTsgfVxuICAgICAgLy8gMjEuMi41LjYgUmVnRXhwLnByb3RvdHlwZVtAQG1hdGNoXShzdHJpbmcpXG4gICAgICAvLyAyMS4yLjUuOSBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXShzdHJpbmcpXG4gICAgICA6IGZ1bmN0aW9uIChzdHJpbmcpIHsgcmV0dXJuIHJ4Zm4uY2FsbChzdHJpbmcsIHRoaXMpOyB9XG4gICAgKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjIuNS4zIGdldCBSZWdFeHAucHJvdG90eXBlLmZsYWdzXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgdGhhdCA9IGFuT2JqZWN0KHRoaXMpO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIGlmICh0aGF0Lmdsb2JhbCkgcmVzdWx0ICs9ICdnJztcbiAgaWYgKHRoYXQuaWdub3JlQ2FzZSkgcmVzdWx0ICs9ICdpJztcbiAgaWYgKHRoYXQubXVsdGlsaW5lKSByZXN1bHQgKz0gJ20nO1xuICBpZiAodGhhdC51bmljb2RlKSByZXN1bHQgKz0gJ3UnO1xuICBpZiAodGhhdC5zdGlja3kpIHJlc3VsdCArPSAneSc7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtRmxhdHRlbkludG9BcnJheVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL19pcy1hcnJheScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdpc0NvbmNhdFNwcmVhZGFibGUnKTtcblxuZnVuY3Rpb24gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBzb3VyY2UsIHNvdXJjZUxlbiwgc3RhcnQsIGRlcHRoLCBtYXBwZXIsIHRoaXNBcmcpIHtcbiAgdmFyIHRhcmdldEluZGV4ID0gc3RhcnQ7XG4gIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gIHZhciBtYXBGbiA9IG1hcHBlciA/IGN0eChtYXBwZXIsIHRoaXNBcmcsIDMpIDogZmFsc2U7XG4gIHZhciBlbGVtZW50LCBzcHJlYWRhYmxlO1xuXG4gIHdoaWxlIChzb3VyY2VJbmRleCA8IHNvdXJjZUxlbikge1xuICAgIGlmIChzb3VyY2VJbmRleCBpbiBzb3VyY2UpIHtcbiAgICAgIGVsZW1lbnQgPSBtYXBGbiA/IG1hcEZuKHNvdXJjZVtzb3VyY2VJbmRleF0sIHNvdXJjZUluZGV4LCBvcmlnaW5hbCkgOiBzb3VyY2Vbc291cmNlSW5kZXhdO1xuXG4gICAgICBzcHJlYWRhYmxlID0gZmFsc2U7XG4gICAgICBpZiAoaXNPYmplY3QoZWxlbWVudCkpIHtcbiAgICAgICAgc3ByZWFkYWJsZSA9IGVsZW1lbnRbSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICAgICAgICBzcHJlYWRhYmxlID0gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShlbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNwcmVhZGFibGUgJiYgZGVwdGggPiAwKSB7XG4gICAgICAgIHRhcmdldEluZGV4ID0gZmxhdHRlbkludG9BcnJheSh0YXJnZXQsIG9yaWdpbmFsLCBlbGVtZW50LCB0b0xlbmd0aChlbGVtZW50Lmxlbmd0aCksIHRhcmdldEluZGV4LCBkZXB0aCAtIDEpIC0gMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0YXJnZXRJbmRleCA+PSAweDFmZmZmZmZmZmZmZmZmKSB0aHJvdyBUeXBlRXJyb3IoKTtcbiAgICAgICAgdGFyZ2V0W3RhcmdldEluZGV4XSA9IGVsZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHRhcmdldEluZGV4Kys7XG4gICAgfVxuICAgIHNvdXJjZUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHRhcmdldEluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZsYXR0ZW5JbnRvQXJyYXk7XG4iLCJ2YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4vX2l0ZXItY2FsbCcpO1xudmFyIGlzQXJyYXlJdGVyID0gcmVxdWlyZSgnLi9faXMtYXJyYXktaXRlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBnZXRJdGVyRm4gPSByZXF1aXJlKCcuL2NvcmUuZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIEJSRUFLID0ge307XG52YXIgUkVUVVJOID0ge307XG52YXIgZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhYmxlLCBlbnRyaWVzLCBmbiwgdGhhdCwgSVRFUkFUT1IpIHtcbiAgdmFyIGl0ZXJGbiA9IElURVJBVE9SID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcmFibGU7IH0gOiBnZXRJdGVyRm4oaXRlcmFibGUpO1xuICB2YXIgZiA9IGN0eChmbiwgdGhhdCwgZW50cmllcyA/IDIgOiAxKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCwgc3RlcCwgaXRlcmF0b3IsIHJlc3VsdDtcbiAgaWYgKHR5cGVvZiBpdGVyRm4gIT0gJ2Z1bmN0aW9uJykgdGhyb3cgVHlwZUVycm9yKGl0ZXJhYmxlICsgJyBpcyBub3QgaXRlcmFibGUhJyk7XG4gIC8vIGZhc3QgY2FzZSBmb3IgYXJyYXlzIHdpdGggZGVmYXVsdCBpdGVyYXRvclxuICBpZiAoaXNBcnJheUl0ZXIoaXRlckZuKSkgZm9yIChsZW5ndGggPSB0b0xlbmd0aChpdGVyYWJsZS5sZW5ndGgpOyBsZW5ndGggPiBpbmRleDsgaW5kZXgrKykge1xuICAgIHJlc3VsdCA9IGVudHJpZXMgPyBmKGFuT2JqZWN0KHN0ZXAgPSBpdGVyYWJsZVtpbmRleF0pWzBdLCBzdGVwWzFdKSA6IGYoaXRlcmFibGVbaW5kZXhdKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfSBlbHNlIGZvciAoaXRlcmF0b3IgPSBpdGVyRm4uY2FsbChpdGVyYWJsZSk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTspIHtcbiAgICByZXN1bHQgPSBjYWxsKGl0ZXJhdG9yLCBmLCBzdGVwLnZhbHVlLCBlbnRyaWVzKTtcbiAgICBpZiAocmVzdWx0ID09PSBCUkVBSyB8fCByZXN1bHQgPT09IFJFVFVSTikgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcbmV4cG9ydHMuQlJFQUsgPSBCUkVBSztcbmV4cG9ydHMuUkVUVVJOID0gUkVUVVJOO1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbmF0aXZlLWZ1bmN0aW9uLXRvLXN0cmluZycsIEZ1bmN0aW9uLnRvU3RyaW5nKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jXG4gIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmICh0eXBlb2YgX19nID09ICdudW1iZXInKSBfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcbiIsInZhciBoYXNPd25Qcm9wZXJ0eSA9IHt9Lmhhc093blByb3BlcnR5O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIGtleSkge1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24gKG9iamVjdCwga2V5LCB2YWx1ZSkge1xuICByZXR1cm4gZFAuZihvYmplY3QsIGtleSwgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJ2YXIgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudDtcbm1vZHVsZS5leHBvcnRzID0gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuIiwibW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVxdWlyZSgnLi9fZG9tLWNyZWF0ZScpKCdkaXYnKSwgJ2EnLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KS5hICE9IDc7XG59KTtcbiIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fc2V0LXByb3RvJykuc2V0O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgdGFyZ2V0LCBDKSB7XG4gIHZhciBTID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB2YXIgUDtcbiAgaWYgKFMgIT09IEMgJiYgdHlwZW9mIFMgPT0gJ2Z1bmN0aW9uJyAmJiAoUCA9IFMucHJvdG90eXBlKSAhPT0gQy5wcm90b3R5cGUgJiYgaXNPYmplY3QoUCkgJiYgc2V0UHJvdG90eXBlT2YpIHtcbiAgICBzZXRQcm90b3R5cGVPZih0aGF0LCBQKTtcbiAgfSByZXR1cm4gdGhhdDtcbn07XG4iLCIvLyBmYXN0IGFwcGx5LCBodHRwOi8vanNwZXJmLmxua2l0LmNvbS9mYXN0LWFwcGx5LzVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGZuLCBhcmdzLCB0aGF0KSB7XG4gIHZhciB1biA9IHRoYXQgPT09IHVuZGVmaW5lZDtcbiAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogcmV0dXJuIHVuID8gZm4oKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0KTtcbiAgICBjYXNlIDE6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0pO1xuICAgIGNhc2UgMjogcmV0dXJuIHVuID8gZm4oYXJnc1swXSwgYXJnc1sxXSlcbiAgICAgICAgICAgICAgICAgICAgICA6IGZuLmNhbGwodGhhdCwgYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgY2FzZSAzOiByZXR1cm4gdW4gPyBmbihhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKVxuICAgICAgICAgICAgICAgICAgICAgIDogZm4uY2FsbCh0aGF0LCBhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdKTtcbiAgICBjYXNlIDQ6IHJldHVybiB1biA/IGZuKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pXG4gICAgICAgICAgICAgICAgICAgICAgOiBmbi5jYWxsKHRoYXQsIGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICB9IHJldHVybiBmbi5hcHBseSh0aGF0LCBhcmdzKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QoJ3onKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKSA/IE9iamVjdCA6IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gY29mKGl0KSA9PSAnU3RyaW5nJyA/IGl0LnNwbGl0KCcnKSA6IE9iamVjdChpdCk7XG59O1xuIiwiLy8gY2hlY2sgb24gZGVmYXVsdCBBcnJheSBpdGVyYXRvclxudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyIElURVJBVE9SID0gcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICE9PSB1bmRlZmluZWQgJiYgKEl0ZXJhdG9ycy5BcnJheSA9PT0gaXQgfHwgQXJyYXlQcm90b1tJVEVSQVRPUl0gPT09IGl0KTtcbn07XG4iLCIvLyA3LjIuMiBJc0FycmF5KGFyZ3VtZW50KVxudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xubW9kdWxlLmV4cG9ydHMgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiBjb2YoYXJnKSA9PSAnQXJyYXknO1xufTtcbiIsIi8vIDIwLjEuMi4zIE51bWJlci5pc0ludGVnZXIobnVtYmVyKVxudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0ludGVnZXIoaXQpIHtcbiAgcmV0dXJuICFpc09iamVjdChpdCkgJiYgaXNGaW5pdGUoaXQpICYmIGZsb29yKGl0KSA9PT0gaXQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PT0gJ29iamVjdCcgPyBpdCAhPT0gbnVsbCA6IHR5cGVvZiBpdCA9PT0gJ2Z1bmN0aW9uJztcbn07XG4iLCIvLyA3LjIuOCBJc1JlZ0V4cChhcmd1bWVudClcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIGNvZiA9IHJlcXVpcmUoJy4vX2NvZicpO1xudmFyIE1BVENIID0gcmVxdWlyZSgnLi9fd2tzJykoJ21hdGNoJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgaXNSZWdFeHA7XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgKChpc1JlZ0V4cCA9IGl0W01BVENIXSkgIT09IHVuZGVmaW5lZCA/ICEhaXNSZWdFeHAgOiBjb2YoaXQpID09ICdSZWdFeHAnKTtcbn07XG4iLCIvLyBjYWxsIHNvbWV0aGluZyBvbiBpdGVyYXRvciBzdGVwIHdpdGggc2FmZSBjbG9zaW5nIG9uIGVycm9yXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBmbiwgdmFsdWUsIGVudHJpZXMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZW50cmllcyA/IGZuKGFuT2JqZWN0KHZhbHVlKVswXSwgdmFsdWVbMV0pIDogZm4odmFsdWUpO1xuICAvLyA3LjQuNiBJdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCBjb21wbGV0aW9uKVxuICB9IGNhdGNoIChlKSB7XG4gICAgdmFyIHJldCA9IGl0ZXJhdG9yWydyZXR1cm4nXTtcbiAgICBpZiAocmV0ICE9PSB1bmRlZmluZWQpIGFuT2JqZWN0KHJldC5jYWxsKGl0ZXJhdG9yKSk7XG4gICAgdGhyb3cgZTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuL19vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcblxuLy8gMjUuMS4yLjEuMSAlSXRlcmF0b3JQcm90b3R5cGUlW0BAaXRlcmF0b3JdKClcbnJlcXVpcmUoJy4vX2hpZGUnKShJdGVyYXRvclByb3RvdHlwZSwgcmVxdWlyZSgnLi9fd2tzJykoJ2l0ZXJhdG9yJyksIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCkge1xuICBDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBjcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUsIHsgbmV4dDogZGVzY3JpcHRvcigxLCBuZXh0KSB9KTtcbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIE5BTUUgKyAnIEl0ZXJhdG9yJyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xudmFyICRpdGVyQ3JlYXRlID0gcmVxdWlyZSgnLi9faXRlci1jcmVhdGUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBCVUdHWSA9ICEoW10ua2V5cyAmJiAnbmV4dCcgaW4gW10ua2V5cygpKTsgLy8gU2FmYXJpIGhhcyBidWdneSBpdGVyYXRvcnMgdy9vIGBuZXh0YFxudmFyIEZGX0lURVJBVE9SID0gJ0BAaXRlcmF0b3InO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQmFzZSwgTkFNRSwgQ29uc3RydWN0b3IsIG5leHQsIERFRkFVTFQsIElTX1NFVCwgRk9SQ0VEKSB7XG4gICRpdGVyQ3JlYXRlKENvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcbiAgdmFyIGdldE1ldGhvZCA9IGZ1bmN0aW9uIChraW5kKSB7XG4gICAgaWYgKCFCVUdHWSAmJiBraW5kIGluIHByb3RvKSByZXR1cm4gcHJvdG9ba2luZF07XG4gICAgc3dpdGNoIChraW5kKSB7XG4gICAgICBjYXNlIEtFWVM6IHJldHVybiBmdW5jdGlvbiBrZXlzKCkgeyByZXR1cm4gbmV3IENvbnN0cnVjdG9yKHRoaXMsIGtpbmQpOyB9O1xuICAgICAgY2FzZSBWQUxVRVM6IHJldHVybiBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBuZXcgQ29uc3RydWN0b3IodGhpcywga2luZCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gZW50cmllcygpIHsgcmV0dXJuIG5ldyBDb25zdHJ1Y3Rvcih0aGlzLCBraW5kKTsgfTtcbiAgfTtcbiAgdmFyIFRBRyA9IE5BTUUgKyAnIEl0ZXJhdG9yJztcbiAgdmFyIERFRl9WQUxVRVMgPSBERUZBVUxUID09IFZBTFVFUztcbiAgdmFyIFZBTFVFU19CVUcgPSBmYWxzZTtcbiAgdmFyIHByb3RvID0gQmFzZS5wcm90b3R5cGU7XG4gIHZhciAkbmF0aXZlID0gcHJvdG9bSVRFUkFUT1JdIHx8IHByb3RvW0ZGX0lURVJBVE9SXSB8fCBERUZBVUxUICYmIHByb3RvW0RFRkFVTFRdO1xuICB2YXIgJGRlZmF1bHQgPSAkbmF0aXZlIHx8IGdldE1ldGhvZChERUZBVUxUKTtcbiAgdmFyICRlbnRyaWVzID0gREVGQVVMVCA/ICFERUZfVkFMVUVTID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoJ2VudHJpZXMnKSA6IHVuZGVmaW5lZDtcbiAgdmFyICRhbnlOYXRpdmUgPSBOQU1FID09ICdBcnJheScgPyBwcm90by5lbnRyaWVzIHx8ICRuYXRpdmUgOiAkbmF0aXZlO1xuICB2YXIgbWV0aG9kcywga2V5LCBJdGVyYXRvclByb3RvdHlwZTtcbiAgLy8gRml4IG5hdGl2ZVxuICBpZiAoJGFueU5hdGl2ZSkge1xuICAgIEl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoJGFueU5hdGl2ZS5jYWxsKG5ldyBCYXNlKCkpKTtcbiAgICBpZiAoSXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgSXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoSXRlcmF0b3JQcm90b3R5cGUsIFRBRywgdHJ1ZSk7XG4gICAgICAvLyBmaXggZm9yIHNvbWUgb2xkIGVuZ2luZXNcbiAgICAgIGlmICghTElCUkFSWSAmJiB0eXBlb2YgSXRlcmF0b3JQcm90b3R5cGVbSVRFUkFUT1JdICE9ICdmdW5jdGlvbicpIGhpZGUoSXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICB9XG4gIH1cbiAgLy8gZml4IEFycmF5I3t2YWx1ZXMsIEBAaXRlcmF0b3J9Lm5hbWUgaW4gVjggLyBGRlxuICBpZiAoREVGX1ZBTFVFUyAmJiAkbmF0aXZlICYmICRuYXRpdmUubmFtZSAhPT0gVkFMVUVTKSB7XG4gICAgVkFMVUVTX0JVRyA9IHRydWU7XG4gICAgJGRlZmF1bHQgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiAkbmF0aXZlLmNhbGwodGhpcyk7IH07XG4gIH1cbiAgLy8gRGVmaW5lIGl0ZXJhdG9yXG4gIGlmICgoIUxJQlJBUlkgfHwgRk9SQ0VEKSAmJiAoQlVHR1kgfHwgVkFMVUVTX0JVRyB8fCAhcHJvdG9bSVRFUkFUT1JdKSkge1xuICAgIGhpZGUocHJvdG8sIElURVJBVE9SLCAkZGVmYXVsdCk7XG4gIH1cbiAgLy8gUGx1ZyBmb3IgbGlicmFyeVxuICBJdGVyYXRvcnNbTkFNRV0gPSAkZGVmYXVsdDtcbiAgSXRlcmF0b3JzW1RBR10gPSByZXR1cm5UaGlzO1xuICBpZiAoREVGQVVMVCkge1xuICAgIG1ldGhvZHMgPSB7XG4gICAgICB2YWx1ZXM6IERFRl9WQUxVRVMgPyAkZGVmYXVsdCA6IGdldE1ldGhvZChWQUxVRVMpLFxuICAgICAga2V5czogSVNfU0VUID8gJGRlZmF1bHQgOiBnZXRNZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiAkZW50cmllc1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkgZm9yIChrZXkgaW4gbWV0aG9kcykge1xuICAgICAgaWYgKCEoa2V5IGluIHByb3RvKSkgcmVkZWZpbmUocHJvdG8sIGtleSwgbWV0aG9kc1trZXldKTtcbiAgICB9IGVsc2UgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoQlVHR1kgfHwgVkFMVUVTX0JVRyksIE5BTUUsIG1ldGhvZHMpO1xuICB9XG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBJVEVSQVRPUiA9IHJlcXVpcmUoJy4vX3drcycpKCdpdGVyYXRvcicpO1xudmFyIFNBRkVfQ0xPU0lORyA9IGZhbHNlO1xuXG50cnkge1xuICB2YXIgcml0ZXIgPSBbN11bSVRFUkFUT1JdKCk7XG4gIHJpdGVyWydyZXR1cm4nXSA9IGZ1bmN0aW9uICgpIHsgU0FGRV9DTE9TSU5HID0gdHJ1ZTsgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcbiAgQXJyYXkuZnJvbShyaXRlciwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjLCBza2lwQ2xvc2luZykge1xuICBpZiAoIXNraXBDbG9zaW5nICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIHNhZmUgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gWzddO1xuICAgIHZhciBpdGVyID0gYXJyW0lURVJBVE9SXSgpO1xuICAgIGl0ZXIubmV4dCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHsgZG9uZTogc2FmZSA9IHRydWUgfTsgfTtcbiAgICBhcnJbSVRFUkFUT1JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gaXRlcjsgfTtcbiAgICBleGVjKGFycik7XG4gIH0gY2F0Y2ggKGUpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gc2FmZTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkb25lLCB2YWx1ZSkge1xuICByZXR1cm4geyB2YWx1ZTogdmFsdWUsIGRvbmU6ICEhZG9uZSB9O1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge307XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwiLy8gMjAuMi4yLjE0IE1hdGguZXhwbTEoeClcbnZhciAkZXhwbTEgPSBNYXRoLmV4cG0xO1xubW9kdWxlLmV4cG9ydHMgPSAoISRleHBtMVxuICAvLyBPbGQgRkYgYnVnXG4gIHx8ICRleHBtMSgxMCkgPiAyMjAyNS40NjU3OTQ4MDY3MTkgfHwgJGV4cG0xKDEwKSA8IDIyMDI1LjQ2NTc5NDgwNjcxNjUxNjhcbiAgLy8gVG9yIEJyb3dzZXIgYnVnXG4gIHx8ICRleHBtMSgtMmUtMTcpICE9IC0yZS0xN1xuKSA/IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuICh4ID0gK3gpID09IDAgPyB4IDogeCA+IC0xZS02ICYmIHggPCAxZS02ID8geCArIHggKiB4IC8gMiA6IE1hdGguZXhwKHgpIC0gMTtcbn0gOiAkZXhwbTE7XG4iLCIvLyAyMC4yLjIuMTYgTWF0aC5mcm91bmQoeClcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG52YXIgcG93ID0gTWF0aC5wb3c7XG52YXIgRVBTSUxPTiA9IHBvdygyLCAtNTIpO1xudmFyIEVQU0lMT04zMiA9IHBvdygyLCAtMjMpO1xudmFyIE1BWDMyID0gcG93KDIsIDEyNykgKiAoMiAtIEVQU0lMT04zMik7XG52YXIgTUlOMzIgPSBwb3coMiwgLTEyNik7XG5cbnZhciByb3VuZFRpZXNUb0V2ZW4gPSBmdW5jdGlvbiAobikge1xuICByZXR1cm4gbiArIDEgLyBFUFNJTE9OIC0gMSAvIEVQU0lMT047XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguZnJvdW5kIHx8IGZ1bmN0aW9uIGZyb3VuZCh4KSB7XG4gIHZhciAkYWJzID0gTWF0aC5hYnMoeCk7XG4gIHZhciAkc2lnbiA9IHNpZ24oeCk7XG4gIHZhciBhLCByZXN1bHQ7XG4gIGlmICgkYWJzIDwgTUlOMzIpIHJldHVybiAkc2lnbiAqIHJvdW5kVGllc1RvRXZlbigkYWJzIC8gTUlOMzIgLyBFUFNJTE9OMzIpICogTUlOMzIgKiBFUFNJTE9OMzI7XG4gIGEgPSAoMSArIEVQU0lMT04zMiAvIEVQU0lMT04pICogJGFicztcbiAgcmVzdWx0ID0gYSAtIChhIC0gJGFicyk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgaWYgKHJlc3VsdCA+IE1BWDMyIHx8IHJlc3VsdCAhPSByZXN1bHQpIHJldHVybiAkc2lnbiAqIEluZmluaXR5O1xuICByZXR1cm4gJHNpZ24gKiByZXN1bHQ7XG59O1xuIiwiLy8gMjAuMi4yLjIwIE1hdGgubG9nMXAoeClcbm1vZHVsZS5leHBvcnRzID0gTWF0aC5sb2cxcCB8fCBmdW5jdGlvbiBsb2cxcCh4KSB7XG4gIHJldHVybiAoeCA9ICt4KSA+IC0xZS04ICYmIHggPCAxZS04ID8geCAtIHggKiB4IC8gMiA6IE1hdGgubG9nKDEgKyB4KTtcbn07XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2NhbGUgfHwgZnVuY3Rpb24gc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gIGlmIChcbiAgICBhcmd1bWVudHMubGVuZ3RoID09PSAwXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCB4ICE9IHhcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICAgIHx8IGluTG93ICE9IGluTG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBpbkhpZ2ggIT0gaW5IaWdoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRMb3cgIT0gb3V0TG93XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgICB8fCBvdXRIaWdoICE9IG91dEhpZ2hcbiAgKSByZXR1cm4gTmFOO1xuICBpZiAoeCA9PT0gSW5maW5pdHkgfHwgeCA9PT0gLUluZmluaXR5KSByZXR1cm4geDtcbiAgcmV0dXJuICh4IC0gaW5Mb3cpICogKG91dEhpZ2ggLSBvdXRMb3cpIC8gKGluSGlnaCAtIGluTG93KSArIG91dExvdztcbn07XG4iLCIvLyAyMC4yLjIuMjggTWF0aC5zaWduKHgpXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguc2lnbiB8fCBmdW5jdGlvbiBzaWduKHgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICByZXR1cm4gKHggPSAreCkgPT0gMCB8fCB4ICE9IHggPyB4IDogeCA8IDAgPyAtMSA6IDE7XG59O1xuIiwidmFyIE1FVEEgPSByZXF1aXJlKCcuL191aWQnKSgnbWV0YScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgc2V0RGVzYyA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgaWQgPSAwO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGUgfHwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG52YXIgRlJFRVpFID0gIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gaXNFeHRlbnNpYmxlKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpO1xufSk7XG52YXIgc2V0TWV0YSA9IGZ1bmN0aW9uIChpdCkge1xuICBzZXREZXNjKGl0LCBNRVRBLCB7IHZhbHVlOiB7XG4gICAgaTogJ08nICsgKytpZCwgLy8gb2JqZWN0IElEXG4gICAgdzoge30gICAgICAgICAgLy8gd2VhayBjb2xsZWN0aW9ucyBJRHNcbiAgfSB9KTtcbn07XG52YXIgZmFzdEtleSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIC8vIHJldHVybiBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzKGl0LCBNRVRBKSkge1xuICAgIC8vIGNhbid0IHNldCBtZXRhZGF0YSB0byB1bmNhdWdodCBmcm96ZW4gb2JqZWN0XG4gICAgaWYgKCFpc0V4dGVuc2libGUoaXQpKSByZXR1cm4gJ0YnO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiAnRSc7XG4gICAgLy8gYWRkIG1pc3NpbmcgbWV0YWRhdGFcbiAgICBzZXRNZXRhKGl0KTtcbiAgLy8gcmV0dXJuIG9iamVjdCBJRFxuICB9IHJldHVybiBpdFtNRVRBXS5pO1xufTtcbnZhciBnZXRXZWFrID0gZnVuY3Rpb24gKGl0LCBjcmVhdGUpIHtcbiAgaWYgKCFoYXMoaXQsIE1FVEEpKSB7XG4gICAgLy8gY2FuJ3Qgc2V0IG1ldGFkYXRhIHRvIHVuY2F1Z2h0IGZyb3plbiBvYmplY3RcbiAgICBpZiAoIWlzRXh0ZW5zaWJsZShpdCkpIHJldHVybiB0cnVlO1xuICAgIC8vIG5vdCBuZWNlc3NhcnkgdG8gYWRkIG1ldGFkYXRhXG4gICAgaWYgKCFjcmVhdGUpIHJldHVybiBmYWxzZTtcbiAgICAvLyBhZGQgbWlzc2luZyBtZXRhZGF0YVxuICAgIHNldE1ldGEoaXQpO1xuICAvLyByZXR1cm4gaGFzaCB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IHJldHVybiBpdFtNRVRBXS53O1xufTtcbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWkUgJiYgbWV0YS5ORUVEICYmIGlzRXh0ZW5zaWJsZShpdCkgJiYgIWhhcyhpdCwgTUVUQSkpIHNldE1ldGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xudmFyIG1ldGEgPSBtb2R1bGUuZXhwb3J0cyA9IHtcbiAgS0VZOiBNRVRBLFxuICBORUVEOiBmYWxzZSxcbiAgZmFzdEtleTogZmFzdEtleSxcbiAgZ2V0V2VhazogZ2V0V2VhayxcbiAgb25GcmVlemU6IG9uRnJlZXplXG59O1xuIiwidmFyIE1hcCA9IHJlcXVpcmUoJy4vZXM2Lm1hcCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgnbWV0YWRhdGEnKTtcbnZhciBzdG9yZSA9IHNoYXJlZC5zdG9yZSB8fCAoc2hhcmVkLnN0b3JlID0gbmV3IChyZXF1aXJlKCcuL2VzNi53ZWFrLW1hcCcpKSgpKTtcblxudmFyIGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAgPSBmdW5jdGlvbiAodGFyZ2V0LCB0YXJnZXRLZXksIGNyZWF0ZSkge1xuICB2YXIgdGFyZ2V0TWV0YWRhdGEgPSBzdG9yZS5nZXQodGFyZ2V0KTtcbiAgaWYgKCF0YXJnZXRNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHN0b3JlLnNldCh0YXJnZXQsIHRhcmdldE1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfVxuICB2YXIga2V5TWV0YWRhdGEgPSB0YXJnZXRNZXRhZGF0YS5nZXQodGFyZ2V0S2V5KTtcbiAgaWYgKCFrZXlNZXRhZGF0YSkge1xuICAgIGlmICghY3JlYXRlKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHRhcmdldE1ldGFkYXRhLnNldCh0YXJnZXRLZXksIGtleU1ldGFkYXRhID0gbmV3IE1hcCgpKTtcbiAgfSByZXR1cm4ga2V5TWV0YWRhdGE7XG59O1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIG1ldGFkYXRhTWFwID0gZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCBmYWxzZSk7XG4gIHJldHVybiBtZXRhZGF0YU1hcCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBtZXRhZGF0YU1hcC5oYXMoTWV0YWRhdGFLZXkpO1xufTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBtZXRhZGF0YU1hcCA9IGdldE9yQ3JlYXRlTWV0YWRhdGFNYXAoTywgUCwgZmFsc2UpO1xuICByZXR1cm4gbWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IG1ldGFkYXRhTWFwLmdldChNZXRhZGF0YUtleSk7XG59O1xudmFyIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUsIE8sIFApIHtcbiAgZ2V0T3JDcmVhdGVNZXRhZGF0YU1hcChPLCBQLCB0cnVlKS5zZXQoTWV0YWRhdGFLZXksIE1ldGFkYXRhVmFsdWUpO1xufTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHRhcmdldEtleSkge1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKHRhcmdldCwgdGFyZ2V0S2V5LCBmYWxzZSk7XG4gIHZhciBrZXlzID0gW107XG4gIGlmIChtZXRhZGF0YU1hcCkgbWV0YWRhdGFNYXAuZm9yRWFjaChmdW5jdGlvbiAoXywga2V5KSB7IGtleXMucHVzaChrZXkpOyB9KTtcbiAgcmV0dXJuIGtleXM7XG59O1xudmFyIHRvTWV0YUtleSA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xudmFyIGV4cCA9IGZ1bmN0aW9uIChPKSB7XG4gICRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIE8pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0b3JlOiBzdG9yZSxcbiAgbWFwOiBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwLFxuICBoYXM6IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEsXG4gIGdldDogb3JkaW5hcnlHZXRPd25NZXRhZGF0YSxcbiAgc2V0OiBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhLFxuICBrZXlzOiBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyxcbiAga2V5OiB0b01ldGFLZXksXG4gIGV4cDogZXhwXG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIG1hY3JvdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgT2JzZXJ2ZXIgPSBnbG9iYWwuTXV0YXRpb25PYnNlcnZlciB8fCBnbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgUHJvbWlzZSA9IGdsb2JhbC5Qcm9taXNlO1xudmFyIGlzTm9kZSA9IHJlcXVpcmUoJy4vX2NvZicpKHByb2Nlc3MpID09ICdwcm9jZXNzJztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBoZWFkLCBsYXN0LCBub3RpZnk7XG5cbiAgdmFyIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChpc05vZGUgJiYgKHBhcmVudCA9IHByb2Nlc3MuZG9tYWluKSkgcGFyZW50LmV4aXQoKTtcbiAgICB3aGlsZSAoaGVhZCkge1xuICAgICAgZm4gPSBoZWFkLmZuO1xuICAgICAgaGVhZCA9IGhlYWQubmV4dDtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZuKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChoZWFkKSBub3RpZnkoKTtcbiAgICAgICAgZWxzZSBsYXN0ID0gdW5kZWZpbmVkO1xuICAgICAgICB0aHJvdyBlO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBOb2RlLmpzXG4gIGlmIChpc05vZGUpIHtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZsdXNoKTtcbiAgICB9O1xuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgU2FmYXJpIC0gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzMzOVxuICB9IGVsc2UgaWYgKE9ic2VydmVyICYmICEoZ2xvYmFsLm5hdmlnYXRvciAmJiBnbG9iYWwubmF2aWdhdG9yLnN0YW5kYWxvbmUpKSB7XG4gICAgdmFyIHRvZ2dsZSA9IHRydWU7XG4gICAgdmFyIG5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJyk7XG4gICAgbmV3IE9ic2VydmVyKGZsdXNoKS5vYnNlcnZlKG5vZGUsIHsgY2hhcmFjdGVyRGF0YTogdHJ1ZSB9KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBub2RlLmRhdGEgPSB0b2dnbGUgPSAhdG9nZ2xlO1xuICAgIH07XG4gIC8vIGVudmlyb25tZW50cyB3aXRoIG1heWJlIG5vbi1jb21wbGV0ZWx5IGNvcnJlY3QsIGJ1dCBleGlzdGVudCBQcm9taXNlXG4gIH0gZWxzZSBpZiAoUHJvbWlzZSAmJiBQcm9taXNlLnJlc29sdmUpIHtcbiAgICAvLyBQcm9taXNlLnJlc29sdmUgd2l0aG91dCBhbiBhcmd1bWVudCB0aHJvd3MgYW4gZXJyb3IgaW4gTEcgV2ViT1MgMlxuICAgIHZhciBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvbWlzZS50aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBmb3Igb3RoZXIgZW52aXJvbm1lbnRzIC0gbWFjcm90YXNrIGJhc2VkIG9uOlxuICAvLyAtIHNldEltbWVkaWF0ZVxuICAvLyAtIE1lc3NhZ2VDaGFubmVsXG4gIC8vIC0gd2luZG93LnBvc3RNZXNzYWdcbiAgLy8gLSBvbnJlYWR5c3RhdGVjaGFuZ2VcbiAgLy8gLSBzZXRUaW1lb3V0XG4gIH0gZWxzZSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgLy8gc3RyYW5nZSBJRSArIHdlYnBhY2sgZGV2IHNlcnZlciBidWcgLSB1c2UgLmNhbGwoZ2xvYmFsKVxuICAgICAgbWFjcm90YXNrLmNhbGwoZ2xvYmFsLCBmbHVzaCk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoZm4pIHtcbiAgICB2YXIgdGFzayA9IHsgZm46IGZuLCBuZXh0OiB1bmRlZmluZWQgfTtcbiAgICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgICBpZiAoIWhlYWQpIHtcbiAgICAgIGhlYWQgPSB0YXNrO1xuICAgICAgbm90aWZ5KCk7XG4gICAgfSBsYXN0ID0gdGFzaztcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNS40LjEuNSBOZXdQcm9taXNlQ2FwYWJpbGl0eShDKVxudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcblxuZnVuY3Rpb24gUHJvbWlzZUNhcGFiaWxpdHkoQykge1xuICB2YXIgcmVzb2x2ZSwgcmVqZWN0O1xuICB0aGlzLnByb21pc2UgPSBuZXcgQyhmdW5jdGlvbiAoJCRyZXNvbHZlLCAkJHJlamVjdCkge1xuICAgIGlmIChyZXNvbHZlICE9PSB1bmRlZmluZWQgfHwgcmVqZWN0ICE9PSB1bmRlZmluZWQpIHRocm93IFR5cGVFcnJvcignQmFkIFByb21pc2UgY29uc3RydWN0b3InKTtcbiAgICByZXNvbHZlID0gJCRyZXNvbHZlO1xuICAgIHJlamVjdCA9ICQkcmVqZWN0O1xuICB9KTtcbiAgdGhpcy5yZXNvbHZlID0gYUZ1bmN0aW9uKHJlc29sdmUpO1xuICB0aGlzLnJlamVjdCA9IGFGdW5jdGlvbihyZWplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyAxOS4xLjIuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlLCAuLi4pXG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xudmFyIGdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElPYmplY3QgPSByZXF1aXJlKCcuL19pb2JqZWN0Jyk7XG52YXIgJGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XG5cbi8vIHNob3VsZCB3b3JrIHdpdGggc3ltYm9scyBhbmQgc2hvdWxkIGhhdmUgZGV0ZXJtaW5pc3RpYyBwcm9wZXJ0eSBvcmRlciAoVjggYnVnKVxubW9kdWxlLmV4cG9ydHMgPSAhJGFzc2lnbiB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgdmFyIEEgPSB7fTtcbiAgdmFyIEIgPSB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gIHZhciBTID0gU3ltYm9sKCk7XG4gIHZhciBLID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0JztcbiAgQVtTXSA9IDc7XG4gIEsuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgQltrXSA9IGs7IH0pO1xuICByZXR1cm4gJGFzc2lnbih7fSwgQSlbU10gIT0gNyB8fCBPYmplY3Qua2V5cygkYXNzaWduKHt9LCBCKSkuam9pbignJykgIT0gSztcbn0pID8gZnVuY3Rpb24gYXNzaWduKHRhcmdldCwgc291cmNlKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgdmFyIFQgPSB0b09iamVjdCh0YXJnZXQpO1xuICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBpbmRleCA9IDE7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICB2YXIgaXNFbnVtID0gcElFLmY7XG4gIHdoaWxlIChhTGVuID4gaW5kZXgpIHtcbiAgICB2YXIgUyA9IElPYmplY3QoYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICB2YXIga2V5cyA9IGdldFN5bWJvbHMgPyBnZXRLZXlzKFMpLmNvbmNhdChnZXRTeW1ib2xzKFMpKSA6IGdldEtleXMoUyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBqID0gMDtcbiAgICB2YXIga2V5O1xuICAgIHdoaWxlIChsZW5ndGggPiBqKSB7XG4gICAgICBrZXkgPSBrZXlzW2orK107XG4gICAgICBpZiAoIURFU0NSSVBUT1JTIHx8IGlzRW51bS5jYWxsKFMsIGtleSkpIFRba2V5XSA9IFNba2V5XTtcbiAgICB9XG4gIH0gcmV0dXJuIFQ7XG59IDogJGFzc2lnbjtcbiIsIi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgZFBzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi9fZW51bS1idWcta2V5cycpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIEVtcHR5ID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgaWZyYW1lIE9iamVjdCB3aXRoIGNsZWFyZWQgcHJvdG90eXBlXG52YXIgY3JlYXRlRGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKSgnaWZyYW1lJyk7XG4gIHZhciBpID0gZW51bUJ1Z0tleXMubGVuZ3RoO1xuICB2YXIgbHQgPSAnPCc7XG4gIHZhciBndCA9ICc+JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgcmVxdWlyZSgnLi9faHRtbCcpLmFwcGVuZENoaWxkKGlmcmFtZSk7XG4gIGlmcmFtZS5zcmMgPSAnamF2YXNjcmlwdDonOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNjcmlwdC11cmxcbiAgLy8gY3JlYXRlRGljdCA9IGlmcmFtZS5jb250ZW50V2luZG93Lk9iamVjdDtcbiAgLy8gaHRtbC5yZW1vdmVDaGlsZChpZnJhbWUpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKGx0ICsgJ3NjcmlwdCcgKyBndCArICdkb2N1bWVudC5GPU9iamVjdCcgKyBsdCArICcvc2NyaXB0JyArIGd0KTtcbiAgaWZyYW1lRG9jdW1lbnQuY2xvc2UoKTtcbiAgY3JlYXRlRGljdCA9IGlmcmFtZURvY3VtZW50LkY7XG4gIHdoaWxlIChpLS0pIGRlbGV0ZSBjcmVhdGVEaWN0W1BST1RPVFlQRV1bZW51bUJ1Z0tleXNbaV1dO1xuICByZXR1cm4gY3JlYXRlRGljdCgpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuY3JlYXRlIHx8IGZ1bmN0aW9uIGNyZWF0ZShPLCBQcm9wZXJ0aWVzKSB7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChPICE9PSBudWxsKSB7XG4gICAgRW1wdHlbUFJPVE9UWVBFXSA9IGFuT2JqZWN0KE8pO1xuICAgIHJlc3VsdCA9IG5ldyBFbXB0eSgpO1xuICAgIEVtcHR5W1BST1RPVFlQRV0gPSBudWxsO1xuICAgIC8vIGFkZCBcIl9fcHJvdG9fX1wiIGZvciBPYmplY3QuZ2V0UHJvdG90eXBlT2YgcG9seWZpbGxcbiAgICByZXN1bHRbSUVfUFJPVE9dID0gTztcbiAgfSBlbHNlIHJlc3VsdCA9IGNyZWF0ZURpY3QoKTtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IHJlc3VsdCA6IGRQcyhyZXN1bHQsIFByb3BlcnRpZXMpO1xufTtcbiIsInZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGRQID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG5leHBvcnRzLmYgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYgKElFOF9ET01fREVGSU5FKSB0cnkge1xuICAgIHJldHVybiBkUChPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmICgnZ2V0JyBpbiBBdHRyaWJ1dGVzIHx8ICdzZXQnIGluIEF0dHJpYnV0ZXMpIHRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmICgndmFsdWUnIGluIEF0dHJpYnV0ZXMpIE9bUF0gPSBBdHRyaWJ1dGVzLnZhbHVlO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldEtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKFByb3BlcnRpZXMpO1xuICB2YXIgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gIHZhciBpID0gMDtcbiAgdmFyIFA7XG4gIHdoaWxlIChsZW5ndGggPiBpKSBkUC5mKE8sIFAgPSBrZXlzW2krK10sIFByb3BlcnRpZXNbUF0pO1xuICByZXR1cm4gTztcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vLyBGb3JjZWQgcmVwbGFjZW1lbnQgcHJvdG90eXBlIGFjY2Vzc29ycyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHZhciBLID0gTWF0aC5yYW5kb20oKTtcbiAgLy8gSW4gRkYgdGhyb3dzIG9ubHkgZGVmaW5lIG1ldGhvZHNcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmLCBuby11c2VsZXNzLWNhbGxcbiAgX19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsIEssIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIGRlbGV0ZSByZXF1aXJlKCcuL19nbG9iYWwnKVtLXTtcbn0pO1xuIiwidmFyIHBJRSA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKTtcbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IGdPUEQgOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUCkge1xuICBPID0gdG9JT2JqZWN0KE8pO1xuICBQID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gZ09QRChPLCBQKTtcbiAgfSBjYXRjaCAoZSkgeyAvKiBlbXB0eSAqLyB9XG4gIGlmIChoYXMoTywgUCkpIHJldHVybiBjcmVhdGVEZXNjKCFwSUUuZi5jYWxsKE8sIFApLCBPW1BdKTtcbn07XG4iLCIvLyBmYWxsYmFjayBmb3IgSUUxMSBidWdneSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB3aXRoIGlmcmFtZSBhbmQgd2luZG93XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUE4gPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbicpLmY7XG52YXIgdG9TdHJpbmcgPSB7fS50b1N0cmluZztcblxudmFyIHdpbmRvd05hbWVzID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cgJiYgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNcbiAgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpIDogW107XG5cbnZhciBnZXRXaW5kb3dOYW1lcyA9IGZ1bmN0aW9uIChpdCkge1xuICB0cnkge1xuICAgIHJldHVybiBnT1BOKGl0KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB3aW5kb3dOYW1lcy5zbGljZSgpO1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhpdCkge1xuICByZXR1cm4gd2luZG93TmFtZXMgJiYgdG9TdHJpbmcuY2FsbChpdCkgPT0gJ1tvYmplY3QgV2luZG93XScgPyBnZXRXaW5kb3dOYW1lcyhpdCkgOiBnT1BOKHRvSU9iamVjdChpdCkpO1xufTtcbiIsIi8vIDE5LjEuMi43IC8gMTUuMi4zLjQgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTylcbnZhciAka2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzLWludGVybmFsJyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKS5jb25jYXQoJ2xlbmd0aCcsICdwcm90b3R5cGUnKTtcblxuZXhwb3J0cy5mID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhPKSB7XG4gIHJldHVybiAka2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xuIiwiLy8gMTkuMS4yLjkgLyAxNS4yLjMuMiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoTylcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gKE8pIHtcbiAgTyA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzKE8sIElFX1BST1RPKSkgcmV0dXJuIE9bSUVfUFJPVE9dO1xuICBpZiAodHlwZW9mIE8uY29uc3RydWN0b3IgPT0gJ2Z1bmN0aW9uJyAmJiBPIGluc3RhbmNlb2YgTy5jb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBPLmNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgfSByZXR1cm4gTyBpbnN0YW5jZW9mIE9iamVjdCA/IE9iamVjdFByb3RvIDogbnVsbDtcbn07XG4iLCJ2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGFycmF5SW5kZXhPZiA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykoZmFsc2UpO1xudmFyIElFX1BST1RPID0gcmVxdWlyZSgnLi9fc2hhcmVkLWtleScpKCdJRV9QUk9UTycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWVzKSB7XG4gIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gIHZhciBpID0gMDtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIga2V5O1xuICBmb3IgKGtleSBpbiBPKSBpZiAoa2V5ICE9IElFX1BST1RPKSBoYXMoTywga2V5KSAmJiByZXN1bHQucHVzaChrZXkpO1xuICAvLyBEb24ndCBlbnVtIGJ1ZyAmIGhpZGRlbiBrZXlzXG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSBpZiAoaGFzKE8sIGtleSA9IG5hbWVzW2krK10pKSB7XG4gICAgfmFycmF5SW5kZXhPZihyZXN1bHQsIGtleSkgfHwgcmVzdWx0LnB1c2goa2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIi8vIDE5LjEuMi4xNCAvIDE1LjIuMy4xNCBPYmplY3Qua2V5cyhPKVxudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4vX2VudW0tYnVnLWtleXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Qua2V5cyB8fCBmdW5jdGlvbiBrZXlzKE8pIHtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCJleHBvcnRzLmYgPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbiIsIi8vIG1vc3QgT2JqZWN0IG1ldGhvZHMgYnkgRVM2IHNob3VsZCBhY2NlcHQgcHJpbWl0aXZlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgZXhlYykge1xuICB2YXIgZm4gPSAoY29yZS5PYmplY3QgfHwge30pW0tFWV0gfHwgT2JqZWN0W0tFWV07XG4gIHZhciBleHAgPSB7fTtcbiAgZXhwW0tFWV0gPSBleGVjKGZuKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7IGZuKDEpOyB9KSwgJ09iamVjdCcsIGV4cCk7XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBnZXRLZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciB0b0lPYmplY3QgPSByZXF1aXJlKCcuL190by1pb2JqZWN0Jyk7XG52YXIgaXNFbnVtID0gcmVxdWlyZSgnLi9fb2JqZWN0LXBpZScpLmY7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpc0VudHJpZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KGl0KTtcbiAgICB2YXIga2V5cyA9IGdldEtleXMoTyk7XG4gICAgdmFyIGxlbmd0aCA9IGtleXMubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGtleTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaSkge1xuICAgICAga2V5ID0ga2V5c1tpKytdO1xuICAgICAgaWYgKCFERVNDUklQVE9SUyB8fCBpc0VudW0uY2FsbChPLCBrZXkpKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xufTtcbiIsIi8vIGFsbCBvYmplY3Qga2V5cywgaW5jbHVkZXMgbm9uLWVudW1lcmFibGUgYW5kIHN5bWJvbHNcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKTtcbnZhciBnT1BTID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcHMnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIFJlZmxlY3QgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0O1xubW9kdWxlLmV4cG9ydHMgPSBSZWZsZWN0ICYmIFJlZmxlY3Qub3duS2V5cyB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ09QTi5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRTeW1ib2xzID0gZ09QUy5mO1xuICByZXR1cm4gZ2V0U3ltYm9scyA/IGtleXMuY29uY2F0KGdldFN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucGFyc2VGbG9hdDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcblxubW9kdWxlLmV4cG9ydHMgPSAxIC8gJHBhcnNlRmxvYXQocmVxdWlyZSgnLi9fc3RyaW5nLXdzJykgKyAnLTAnKSAhPT0gLUluZmluaXR5ID8gZnVuY3Rpb24gcGFyc2VGbG9hdChzdHIpIHtcbiAgdmFyIHN0cmluZyA9ICR0cmltKFN0cmluZyhzdHIpLCAzKTtcbiAgdmFyIHJlc3VsdCA9ICRwYXJzZUZsb2F0KHN0cmluZyk7XG4gIHJldHVybiByZXN1bHQgPT09IDAgJiYgc3RyaW5nLmNoYXJBdCgwKSA9PSAnLScgPyAtMCA6IHJlc3VsdDtcbn0gOiAkcGFyc2VGbG9hdDtcbiIsInZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5wYXJzZUludDtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciB3cyA9IHJlcXVpcmUoJy4vX3N0cmluZy13cycpO1xudmFyIGhleCA9IC9eWy0rXT8wW3hYXS87XG5cbm1vZHVsZS5leHBvcnRzID0gJHBhcnNlSW50KHdzICsgJzA4JykgIT09IDggfHwgJHBhcnNlSW50KHdzICsgJzB4MTYnKSAhPT0gMjIgPyBmdW5jdGlvbiBwYXJzZUludChzdHIsIHJhZGl4KSB7XG4gIHZhciBzdHJpbmcgPSAkdHJpbShTdHJpbmcoc3RyKSwgMyk7XG4gIHJldHVybiAkcGFyc2VJbnQoc3RyaW5nLCAocmFkaXggPj4+IDApIHx8IChoZXgudGVzdChzdHJpbmcpID8gMTYgOiAxMCkpO1xufSA6ICRwYXJzZUludDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4geyBlOiBmYWxzZSwgdjogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4geyBlOiB0cnVlLCB2OiBlIH07XG4gIH1cbn07XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDLCB4KSB7XG4gIGFuT2JqZWN0KEMpO1xuICBpZiAoaXNPYmplY3QoeCkgJiYgeC5jb25zdHJ1Y3RvciA9PT0gQykgcmV0dXJuIHg7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYoQyk7XG4gIHZhciByZXNvbHZlID0gcHJvbWlzZUNhcGFiaWxpdHkucmVzb2x2ZTtcbiAgcmVzb2x2ZSh4KTtcbiAgcmV0dXJuIHByb21pc2VDYXBhYmlsaXR5LnByb21pc2U7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYml0bWFwLCB2YWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGVudW1lcmFibGU6ICEoYml0bWFwICYgMSksXG4gICAgY29uZmlndXJhYmxlOiAhKGJpdG1hcCAmIDIpLFxuICAgIHdyaXRhYmxlOiAhKGJpdG1hcCAmIDQpLFxuICAgIHZhbHVlOiB2YWx1ZVxuICB9O1xufTtcbiIsInZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgc2FmZSkge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSByZWRlZmluZSh0YXJnZXQsIGtleSwgc3JjW2tleV0sIHNhZmUpO1xuICByZXR1cm4gdGFyZ2V0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyIFNSQyA9IHJlcXVpcmUoJy4vX3VpZCcpKCdzcmMnKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuL19mdW5jdGlvbi10by1zdHJpbmcnKTtcbnZhciBUT19TVFJJTkcgPSAndG9TdHJpbmcnO1xudmFyIFRQTCA9ICgnJyArICR0b1N0cmluZykuc3BsaXQoVE9fU1RSSU5HKTtcblxucmVxdWlyZSgnLi9fY29yZScpLmluc3BlY3RTb3VyY2UgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuICR0b1N0cmluZy5jYWxsKGl0KTtcbn07XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbCwgc2FmZSkge1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJztcbiAgaWYgKGlzRnVuY3Rpb24pIGhhcyh2YWwsICduYW1lJykgfHwgaGlkZSh2YWwsICduYW1lJywga2V5KTtcbiAgaWYgKE9ba2V5XSA9PT0gdmFsKSByZXR1cm47XG4gIGlmIChpc0Z1bmN0aW9uKSBoYXModmFsLCBTUkMpIHx8IGhpZGUodmFsLCBTUkMsIE9ba2V5XSA/ICcnICsgT1trZXldIDogVFBMLmpvaW4oU3RyaW5nKGtleSkpKTtcbiAgaWYgKE8gPT09IGdsb2JhbCkge1xuICAgIE9ba2V5XSA9IHZhbDtcbiAgfSBlbHNlIGlmICghc2FmZSkge1xuICAgIGRlbGV0ZSBPW2tleV07XG4gICAgaGlkZShPLCBrZXksIHZhbCk7XG4gIH0gZWxzZSBpZiAoT1trZXldKSB7XG4gICAgT1trZXldID0gdmFsO1xuICB9IGVsc2Uge1xuICAgIGhpZGUoTywga2V5LCB2YWwpO1xuICB9XG4vLyBhZGQgZmFrZSBGdW5jdGlvbiN0b1N0cmluZyBmb3IgY29ycmVjdCB3b3JrIHdyYXBwZWQgbWV0aG9kcyAvIGNvbnN0cnVjdG9ycyB3aXRoIG1ldGhvZHMgbGlrZSBMb0Rhc2ggaXNOYXRpdmVcbn0pKEZ1bmN0aW9uLnByb3RvdHlwZSwgVE9fU1RSSU5HLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgcmV0dXJuIHR5cGVvZiB0aGlzID09ICdmdW5jdGlvbicgJiYgdGhpc1tTUkNdIHx8ICR0b1N0cmluZy5jYWxsKHRoaXMpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xudmFyIGJ1aWx0aW5FeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuXG4gLy8gYFJlZ0V4cEV4ZWNgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwZXhlY1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUiwgUykge1xuICB2YXIgZXhlYyA9IFIuZXhlYztcbiAgaWYgKHR5cGVvZiBleGVjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdmFyIHJlc3VsdCA9IGV4ZWMuY2FsbChSLCBTKTtcbiAgICBpZiAodHlwZW9mIHJlc3VsdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCBleGVjIG1ldGhvZCByZXR1cm5lZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBPYmplY3Qgb3IgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpICE9PSAnUmVnRXhwJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbiAgfVxuICByZXR1cm4gYnVpbHRpbkV4ZWMuY2FsbChSLCBTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZWdleHBGbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG5cbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xuLy8gVGhpcyBhbHdheXMgcmVmZXJzIHRvIHRoZSBuYXRpdmUgaW1wbGVtZW50YXRpb24sIGJlY2F1c2UgdGhlXG4vLyBTdHJpbmcjcmVwbGFjZSBwb2x5ZmlsbCB1c2VzIC4vZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyxcbi8vIHdoaWNoIGxvYWRzIHRoaXMgZmlsZSBiZWZvcmUgcGF0Y2hpbmcgdGhlIG1ldGhvZC5cbnZhciBuYXRpdmVSZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xuXG52YXIgcGF0Y2hlZEV4ZWMgPSBuYXRpdmVFeGVjO1xuXG52YXIgTEFTVF9JTkRFWCA9ICdsYXN0SW5kZXgnO1xuXG52YXIgVVBEQVRFU19MQVNUX0lOREVYX1dST05HID0gKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlMSA9IC9hLyxcbiAgICAgIHJlMiA9IC9iKi9nO1xuICBuYXRpdmVFeGVjLmNhbGwocmUxLCAnYScpO1xuICBuYXRpdmVFeGVjLmNhbGwocmUyLCAnYScpO1xuICByZXR1cm4gcmUxW0xBU1RfSU5ERVhdICE9PSAwIHx8IHJlMltMQVNUX0lOREVYXSAhPT0gMDtcbn0pKCk7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEO1xuXG5pZiAoUEFUQ0gpIHtcbiAgcGF0Y2hlZEV4ZWMgPSBmdW5jdGlvbiBleGVjKHN0cikge1xuICAgIHZhciByZSA9IHRoaXM7XG4gICAgdmFyIGxhc3RJbmRleCwgcmVDb3B5LCBtYXRjaCwgaTtcblxuICAgIGlmIChOUENHX0lOQ0xVREVEKSB7XG4gICAgICByZUNvcHkgPSBuZXcgUmVnRXhwKCdeJyArIHJlLnNvdXJjZSArICckKD8hXFxcXHMpJywgcmVnZXhwRmxhZ3MuY2FsbChyZSkpO1xuICAgIH1cbiAgICBpZiAoVVBEQVRFU19MQVNUX0lOREVYX1dST05HKSBsYXN0SW5kZXggPSByZVtMQVNUX0lOREVYXTtcblxuICAgIG1hdGNoID0gbmF0aXZlRXhlYy5jYWxsKHJlLCBzdHIpO1xuXG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyAmJiBtYXRjaCkge1xuICAgICAgcmVbTEFTVF9JTkRFWF0gPSByZS5nbG9iYWwgPyBtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCA6IGxhc3RJbmRleDtcbiAgICB9XG4gICAgaWYgKE5QQ0dfSU5DTFVERUQgJiYgbWF0Y2ggJiYgbWF0Y2gubGVuZ3RoID4gMSkge1xuICAgICAgLy8gRml4IGJyb3dzZXJzIHdob3NlIGBleGVjYCBtZXRob2RzIGRvbid0IGNvbnNpc3RlbnRseSByZXR1cm4gYHVuZGVmaW5lZGBcbiAgICAgIC8vIGZvciBOUENHLCBsaWtlIElFOC4gTk9URTogVGhpcyBkb2Vzbicgd29yayBmb3IgLyguPyk/L1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxvb3AtZnVuY1xuICAgICAgbmF0aXZlUmVwbGFjZS5jYWxsKG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0Y2g7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGF0Y2hlZEV4ZWM7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChyZWdFeHAsIHJlcGxhY2UpIHtcbiAgdmFyIHJlcGxhY2VyID0gcmVwbGFjZSA9PT0gT2JqZWN0KHJlcGxhY2UpID8gZnVuY3Rpb24gKHBhcnQpIHtcbiAgICByZXR1cm4gcmVwbGFjZVtwYXJ0XTtcbiAgfSA6IHJlcGxhY2U7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gU3RyaW5nKGl0KS5yZXBsYWNlKHJlZ0V4cCwgcmVwbGFjZXIpO1xuICB9O1xufTtcbiIsIi8vIDcuMi45IFNhbWVWYWx1ZSh4LCB5KVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaXMgfHwgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiB4ID09PSB5ID8geCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkgOiB4ICE9IHggJiYgeSAhPSB5O1xufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTExFQ1RJT04pIHtcbiAgJGV4cG9ydCgkZXhwb3J0LlMsIENPTExFQ1RJT04sIHsgZnJvbTogZnVuY3Rpb24gZnJvbShzb3VyY2UgLyogLCBtYXBGbiwgdGhpc0FyZyAqLykge1xuICAgIHZhciBtYXBGbiA9IGFyZ3VtZW50c1sxXTtcbiAgICB2YXIgbWFwcGluZywgQSwgbiwgY2I7XG4gICAgYUZ1bmN0aW9uKHRoaXMpO1xuICAgIG1hcHBpbmcgPSBtYXBGbiAhPT0gdW5kZWZpbmVkO1xuICAgIGlmIChtYXBwaW5nKSBhRnVuY3Rpb24obWFwRm4pO1xuICAgIGlmIChzb3VyY2UgPT0gdW5kZWZpbmVkKSByZXR1cm4gbmV3IHRoaXMoKTtcbiAgICBBID0gW107XG4gICAgaWYgKG1hcHBpbmcpIHtcbiAgICAgIG4gPSAwO1xuICAgICAgY2IgPSBjdHgobWFwRm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBmdW5jdGlvbiAobmV4dEl0ZW0pIHtcbiAgICAgICAgQS5wdXNoKGNiKG5leHRJdGVtLCBuKyspKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3JPZihzb3VyY2UsIGZhbHNlLCBBLnB1c2gsIEEpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IHRoaXMoQSk7XG4gIH0gfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQ09MTEVDVElPTikge1xuICAkZXhwb3J0KCRleHBvcnQuUywgQ09MTEVDVElPTiwgeyBvZjogZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIEEgPSBuZXcgQXJyYXkobGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoLS0pIEFbbGVuZ3RoXSA9IGFyZ3VtZW50c1tsZW5ndGhdO1xuICAgIHJldHVybiBuZXcgdGhpcyhBKTtcbiAgfSB9KTtcbn07XG4iLCIvLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGNoZWNrID0gZnVuY3Rpb24gKE8sIHByb3RvKSB7XG4gIGFuT2JqZWN0KE8pO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSAmJiBwcm90byAhPT0gbnVsbCkgdGhyb3cgVHlwZUVycm9yKHByb3RvICsgXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpO1xufTtcbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXQ6IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgZnVuY3Rpb24gKHRlc3QsIGJ1Z2d5LCBzZXQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldCA9IHJlcXVpcmUoJy4vX2N0eCcpKEZ1bmN0aW9uLmNhbGwsIHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZihPYmplY3QucHJvdG90eXBlLCAnX19wcm90b19fJykuc2V0LCAyKTtcbiAgICAgICAgc2V0KHRlc3QsIFtdKTtcbiAgICAgICAgYnVnZ3kgPSAhKHRlc3QgaW5zdGFuY2VvZiBBcnJheSk7XG4gICAgICB9IGNhdGNoIChlKSB7IGJ1Z2d5ID0gdHJ1ZTsgfVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKE8sIHByb3RvKSB7XG4gICAgICAgIGNoZWNrKE8sIHByb3RvKTtcbiAgICAgICAgaWYgKGJ1Z2d5KSBPLl9fcHJvdG9fXyA9IHByb3RvO1xuICAgICAgICBlbHNlIHNldChPLCBwcm90byk7XG4gICAgICAgIHJldHVybiBPO1xuICAgICAgfTtcbiAgICB9KHt9LCBmYWxzZSkgOiB1bmRlZmluZWQpLFxuICBjaGVjazogY2hlY2tcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgU1BFQ0lFUyA9IHJlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSkge1xuICB2YXIgQyA9IGdsb2JhbFtLRVldO1xuICBpZiAoREVTQ1JJUFRPUlMgJiYgQyAmJiAhQ1tTUEVDSUVTXSkgZFAuZihDLCBTUEVDSUVTLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfVxuICB9KTtcbn07XG4iLCJ2YXIgZGVmID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBUQUcgPSByZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIHRhZywgc3RhdCkge1xuICBpZiAoaXQgJiYgIWhhcyhpdCA9IHN0YXQgPyBpdCA6IGl0LnByb3RvdHlwZSwgVEFHKSkgZGVmKGl0LCBUQUcsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogdGFnIH0pO1xufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5KSB7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuIiwidmFyIGNvcmUgPSByZXF1aXJlKCcuL19jb3JlJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5cbihtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoge30pO1xufSkoJ3ZlcnNpb25zJywgW10pLnB1c2goe1xuICB2ZXJzaW9uOiBjb3JlLnZlcnNpb24sXG4gIG1vZGU6IHJlcXVpcmUoJy4vX2xpYnJhcnknKSA/ICdwdXJlJyA6ICdnbG9iYWwnLFxuICBjb3B5cmlnaHQ6ICfCqSAyMDIwIERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpJ1xufSk7XG4iLCIvLyA3LjMuMjAgU3BlY2llc0NvbnN0cnVjdG9yKE8sIGRlZmF1bHRDb25zdHJ1Y3RvcilcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBTUEVDSUVTID0gcmVxdWlyZSgnLi9fd2tzJykoJ3NwZWNpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIEQpIHtcbiAgdmFyIEMgPSBhbk9iamVjdChPKS5jb25zdHJ1Y3RvcjtcbiAgdmFyIFM7XG4gIHJldHVybiBDID09PSB1bmRlZmluZWQgfHwgKFMgPSBhbk9iamVjdChDKVtTUEVDSUVTXSkgPT0gdW5kZWZpbmVkID8gRCA6IGFGdW5jdGlvbihTKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtZXRob2QsIGFyZykge1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGxcbiAgICBhcmcgPyBtZXRob2QuY2FsbChudWxsLCBmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIDEpIDogbWV0aG9kLmNhbGwobnVsbCk7XG4gIH0pO1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbi8vIHRydWUgIC0+IFN0cmluZyNhdFxuLy8gZmFsc2UgLT4gU3RyaW5nI2NvZGVQb2ludEF0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChUT19TVFJJTkcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh0aGF0LCBwb3MpIHtcbiAgICB2YXIgcyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgICB2YXIgaSA9IHRvSW50ZWdlcihwb3MpO1xuICAgIHZhciBsID0gcy5sZW5ndGg7XG4gICAgdmFyIGEsIGI7XG4gICAgaWYgKGkgPCAwIHx8IGkgPj0gbCkgcmV0dXJuIFRPX1NUUklORyA/ICcnIDogdW5kZWZpbmVkO1xuICAgIGEgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgcmV0dXJuIGEgPCAweGQ4MDAgfHwgYSA+IDB4ZGJmZiB8fCBpICsgMSA9PT0gbCB8fCAoYiA9IHMuY2hhckNvZGVBdChpICsgMSkpIDwgMHhkYzAwIHx8IGIgPiAweGRmZmZcbiAgICAgID8gVE9fU1RSSU5HID8gcy5jaGFyQXQoaSkgOiBhXG4gICAgICA6IFRPX1NUUklORyA/IHMuc2xpY2UoaSwgaSArIDIpIDogKGEgLSAweGQ4MDAgPDwgMTApICsgKGIgLSAweGRjMDApICsgMHgxMDAwMDtcbiAgfTtcbn07XG4iLCIvLyBoZWxwZXIgZm9yIFN0cmluZyN7c3RhcnRzV2l0aCwgZW5kc1dpdGgsIGluY2x1ZGVzfVxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGhhdCwgc2VhcmNoU3RyaW5nLCBOQU1FKSB7XG4gIGlmIChpc1JlZ0V4cChzZWFyY2hTdHJpbmcpKSB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZyMnICsgTkFNRSArIFwiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4IVwiKTtcbiAgcmV0dXJuIFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbn07XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIHF1b3QgPSAvXCIvZztcbi8vIEIuMi4zLjIuMSBDcmVhdGVIVE1MKHN0cmluZywgdGFnLCBhdHRyaWJ1dGUsIHZhbHVlKVxudmFyIGNyZWF0ZUhUTUwgPSBmdW5jdGlvbiAoc3RyaW5nLCB0YWcsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgdmFyIFMgPSBTdHJpbmcoZGVmaW5lZChzdHJpbmcpKTtcbiAgdmFyIHAxID0gJzwnICsgdGFnO1xuICBpZiAoYXR0cmlidXRlICE9PSAnJykgcDEgKz0gJyAnICsgYXR0cmlidXRlICsgJz1cIicgKyBTdHJpbmcodmFsdWUpLnJlcGxhY2UocXVvdCwgJyZxdW90OycpICsgJ1wiJztcbiAgcmV0dXJuIHAxICsgJz4nICsgUyArICc8LycgKyB0YWcgKyAnPic7XG59O1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTkFNRSwgZXhlYykge1xuICB2YXIgTyA9IHt9O1xuICBPW05BTUVdID0gZXhlYyhjcmVhdGVIVE1MKTtcbiAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHRlc3QgPSAnJ1tOQU1FXSgnXCInKTtcbiAgICByZXR1cm4gdGVzdCAhPT0gdGVzdC50b0xvd2VyQ2FzZSgpIHx8IHRlc3Quc3BsaXQoJ1wiJykubGVuZ3RoID4gMztcbiAgfSksICdTdHJpbmcnLCBPKTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1zdHJpbmctcGFkLXN0YXJ0LWVuZFxudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgcmVwZWF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLXJlcGVhdCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHRoYXQsIG1heExlbmd0aCwgZmlsbFN0cmluZywgbGVmdCkge1xuICB2YXIgUyA9IFN0cmluZyhkZWZpbmVkKHRoYXQpKTtcbiAgdmFyIHN0cmluZ0xlbmd0aCA9IFMubGVuZ3RoO1xuICB2YXIgZmlsbFN0ciA9IGZpbGxTdHJpbmcgPT09IHVuZGVmaW5lZCA/ICcgJyA6IFN0cmluZyhmaWxsU3RyaW5nKTtcbiAgdmFyIGludE1heExlbmd0aCA9IHRvTGVuZ3RoKG1heExlbmd0aCk7XG4gIGlmIChpbnRNYXhMZW5ndGggPD0gc3RyaW5nTGVuZ3RoIHx8IGZpbGxTdHIgPT0gJycpIHJldHVybiBTO1xuICB2YXIgZmlsbExlbiA9IGludE1heExlbmd0aCAtIHN0cmluZ0xlbmd0aDtcbiAgdmFyIHN0cmluZ0ZpbGxlciA9IHJlcGVhdC5jYWxsKGZpbGxTdHIsIE1hdGguY2VpbChmaWxsTGVuIC8gZmlsbFN0ci5sZW5ndGgpKTtcbiAgaWYgKHN0cmluZ0ZpbGxlci5sZW5ndGggPiBmaWxsTGVuKSBzdHJpbmdGaWxsZXIgPSBzdHJpbmdGaWxsZXIuc2xpY2UoMCwgZmlsbExlbik7XG4gIHJldHVybiBsZWZ0ID8gc3RyaW5nRmlsbGVyICsgUyA6IFMgKyBzdHJpbmdGaWxsZXI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlcGVhdChjb3VudCkge1xuICB2YXIgc3RyID0gU3RyaW5nKGRlZmluZWQodGhpcykpO1xuICB2YXIgcmVzID0gJyc7XG4gIHZhciBuID0gdG9JbnRlZ2VyKGNvdW50KTtcbiAgaWYgKG4gPCAwIHx8IG4gPT0gSW5maW5pdHkpIHRocm93IFJhbmdlRXJyb3IoXCJDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZVwiKTtcbiAgZm9yICg7biA+IDA7IChuID4+Pj0gMSkgJiYgKHN0ciArPSBzdHIpKSBpZiAobiAmIDEpIHJlcyArPSBzdHI7XG4gIHJldHVybiByZXM7XG59O1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBzcGFjZXMgPSByZXF1aXJlKCcuL19zdHJpbmctd3MnKTtcbnZhciBzcGFjZSA9ICdbJyArIHNwYWNlcyArICddJztcbnZhciBub24gPSAnXFx1MjAwYlxcdTAwODUnO1xudmFyIGx0cmltID0gUmVnRXhwKCdeJyArIHNwYWNlICsgc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHNwYWNlICsgc3BhY2UgKyAnKiQnKTtcblxudmFyIGV4cG9ydGVyID0gZnVuY3Rpb24gKEtFWSwgZXhlYywgQUxJQVMpIHtcbiAgdmFyIGV4cCA9IHt9O1xuICB2YXIgRk9SQ0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhc3BhY2VzW0tFWV0oKSB8fCBub25bS0VZXSgpICE9IG5vbjtcbiAgfSk7XG4gIHZhciBmbiA9IGV4cFtLRVldID0gRk9SQ0UgPyBleGVjKHRyaW0pIDogc3BhY2VzW0tFWV07XG4gIGlmIChBTElBUykgZXhwW0FMSUFTXSA9IGZuO1xuICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFLCAnU3RyaW5nJywgZXhwKTtcbn07XG5cbi8vIDEgLT4gU3RyaW5nI3RyaW1MZWZ0XG4vLyAyIC0+IFN0cmluZyN0cmltUmlnaHRcbi8vIDMgLT4gU3RyaW5nI3RyaW1cbnZhciB0cmltID0gZXhwb3J0ZXIudHJpbSA9IGZ1bmN0aW9uIChzdHJpbmcsIFRZUEUpIHtcbiAgc3RyaW5nID0gU3RyaW5nKGRlZmluZWQoc3RyaW5nKSk7XG4gIGlmIChUWVBFICYgMSkgc3RyaW5nID0gc3RyaW5nLnJlcGxhY2UobHRyaW0sICcnKTtcbiAgaWYgKFRZUEUgJiAyKSBzdHJpbmcgPSBzdHJpbmcucmVwbGFjZShydHJpbSwgJycpO1xuICByZXR1cm4gc3RyaW5nO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRlcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gJ1xceDA5XFx4MEFcXHgwQlxceDBDXFx4MERcXHgyMFxceEEwXFx1MTY4MFxcdTE4MEVcXHUyMDAwXFx1MjAwMVxcdTIwMDJcXHUyMDAzJyArXG4gICdcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBBXFx1MjAyRlxcdTIwNUZcXHUzMDAwXFx1MjAyOFxcdTIwMjlcXHVGRUZGJztcbiIsInZhciBjdHggPSByZXF1aXJlKCcuL19jdHgnKTtcbnZhciBpbnZva2UgPSByZXF1aXJlKCcuL19pbnZva2UnKTtcbnZhciBodG1sID0gcmVxdWlyZSgnLi9faHRtbCcpO1xudmFyIGNlbCA9IHJlcXVpcmUoJy4vX2RvbS1jcmVhdGUnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgc2V0VGFzayA9IGdsb2JhbC5zZXRJbW1lZGlhdGU7XG52YXIgY2xlYXJUYXNrID0gZ2xvYmFsLmNsZWFySW1tZWRpYXRlO1xudmFyIE1lc3NhZ2VDaGFubmVsID0gZ2xvYmFsLk1lc3NhZ2VDaGFubmVsO1xudmFyIERpc3BhdGNoID0gZ2xvYmFsLkRpc3BhdGNoO1xudmFyIGNvdW50ZXIgPSAwO1xudmFyIHF1ZXVlID0ge307XG52YXIgT05SRUFEWVNUQVRFQ0hBTkdFID0gJ29ucmVhZHlzdGF0ZWNoYW5nZSc7XG52YXIgZGVmZXIsIGNoYW5uZWwsIHBvcnQ7XG52YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICB2YXIgaWQgPSArdGhpcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICBpZiAocXVldWUuaGFzT3duUHJvcGVydHkoaWQpKSB7XG4gICAgdmFyIGZuID0gcXVldWVbaWRdO1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gICAgZm4oKTtcbiAgfVxufTtcbnZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICBydW4uY2FsbChldmVudC5kYXRhKTtcbn07XG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldFRhc2sgfHwgIWNsZWFyVGFzaykge1xuICBzZXRUYXNrID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGZuKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICB2YXIgaSA9IDE7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgIGludm9rZSh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhclRhc2sgPSBmdW5jdGlvbiBjbGVhckltbWVkaWF0ZShpZCkge1xuICAgIGRlbGV0ZSBxdWV1ZVtpZF07XG4gIH07XG4gIC8vIE5vZGUuanMgMC44LVxuICBpZiAocmVxdWlyZSgnLi9fY29mJykocHJvY2VzcykgPT0gJ3Byb2Nlc3MnKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY3R4KHJ1biwgaWQsIDEpKTtcbiAgICB9O1xuICAvLyBTcGhlcmUgKEpTIGdhbWUgZW5naW5lKSBEaXNwYXRjaCBBUElcbiAgfSBlbHNlIGlmIChEaXNwYXRjaCAmJiBEaXNwYXRjaC5ub3cpIHtcbiAgICBkZWZlciA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgRGlzcGF0Y2gubm93KGN0eChydW4sIGlkLCAxKSk7XG4gICAgfTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBNZXNzYWdlQ2hhbm5lbCwgaW5jbHVkZXMgV2ViV29ya2Vyc1xuICB9IGVsc2UgaWYgKE1lc3NhZ2VDaGFubmVsKSB7XG4gICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpO1xuICAgIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICAgIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gbGlzdGVuZXI7XG4gICAgZGVmZXIgPSBjdHgocG9ydC5wb3N0TWVzc2FnZSwgcG9ydCwgMSk7XG4gIC8vIEJyb3dzZXJzIHdpdGggcG9zdE1lc3NhZ2UsIHNraXAgV2ViV29ya2Vyc1xuICAvLyBJRTggaGFzIHBvc3RNZXNzYWdlLCBidXQgaXQncyBzeW5jICYgdHlwZW9mIGl0cyBwb3N0TWVzc2FnZSBpcyAnb2JqZWN0J1xuICB9IGVsc2UgaWYgKGdsb2JhbC5hZGRFdmVudExpc3RlbmVyICYmIHR5cGVvZiBwb3N0TWVzc2FnZSA9PSAnZnVuY3Rpb24nICYmICFnbG9iYWwuaW1wb3J0U2NyaXB0cykge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBnbG9iYWwucG9zdE1lc3NhZ2UoaWQgKyAnJywgJyonKTtcbiAgICB9O1xuICAgIGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgbGlzdGVuZXIsIGZhbHNlKTtcbiAgLy8gSUU4LVxuICB9IGVsc2UgaWYgKE9OUkVBRFlTVEFURUNIQU5HRSBpbiBjZWwoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY2VsKCdzY3JpcHQnKSlbT05SRUFEWVNUQVRFQ0hBTkdFXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaHRtbC5yZW1vdmVDaGlsZCh0aGlzKTtcbiAgICAgICAgcnVuLmNhbGwoaWQpO1xuICAgICAgfTtcbiAgICB9O1xuICAvLyBSZXN0IG9sZCBicm93c2Vyc1xuICB9IGVsc2Uge1xuICAgIGRlZmVyID0gZnVuY3Rpb24gKGlkKSB7XG4gICAgICBzZXRUaW1lb3V0KGN0eChydW4sIGlkLCAxKSwgMCk7XG4gICAgfTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldDogc2V0VGFzayxcbiAgY2xlYXI6IGNsZWFyVGFza1xufTtcbiIsInZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIGluZGV4ID0gdG9JbnRlZ2VyKGluZGV4KTtcbiAgcmV0dXJuIGluZGV4IDwgMCA/IG1heChpbmRleCArIGxlbmd0aCwgMCkgOiBtaW4oaW5kZXgsIGxlbmd0aCk7XG59O1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtdG9pbmRleFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyKGl0KTtcbiAgdmFyIGxlbmd0aCA9IHRvTGVuZ3RoKG51bWJlcik7XG4gIGlmIChudW1iZXIgIT09IGxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcignV3JvbmcgbGVuZ3RoIScpO1xuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIi8vIDcuMS40IFRvSW50ZWdlclxudmFyIGNlaWwgPSBNYXRoLmNlaWw7XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnLi9fZGVmaW5lZCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcbiIsIi8vIDcuMS4xNSBUb0xlbmd0aFxudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciBtaW4gPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCA+IDAgPyBtaW4odG9JbnRlZ2VyKGl0KSwgMHgxZmZmZmZmZmZmZmZmZikgOiAwOyAvLyBwb3coMiwgNTMpIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG59O1xuIiwiLy8gNy4xLjEzIFRvT2JqZWN0KGFyZ3VtZW50KVxudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gT2JqZWN0KGRlZmluZWQoaXQpKTtcbn07XG4iLCIvLyA3LjEuMSBUb1ByaW1pdGl2ZShpbnB1dCBbLCBQcmVmZXJyZWRUeXBlXSlcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuLy8gaW5zdGVhZCBvZiB0aGUgRVM2IHNwZWMgdmVyc2lvbiwgd2UgZGlkbid0IGltcGxlbWVudCBAQHRvUHJpbWl0aXZlIGNhc2Vcbi8vIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IC0gZmxhZyAtIHByZWZlcnJlZCB0eXBlIGlzIGEgc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgUykge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKFMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIGlmICh0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKSByZXR1cm4gdmFsO1xuICBpZiAoIVMgJiYgdHlwZW9mIChmbiA9IGl0LnRvU3RyaW5nKSA9PSAnZnVuY3Rpb24nICYmICFpc09iamVjdCh2YWwgPSBmbi5jYWxsKGl0KSkpIHJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSkge1xuICB2YXIgTElCUkFSWSA9IHJlcXVpcmUoJy4vX2xpYnJhcnknKTtcbiAgdmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xuICB2YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xuICB2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuICB2YXIgJHR5cGVkID0gcmVxdWlyZSgnLi9fdHlwZWQnKTtcbiAgdmFyICRidWZmZXIgPSByZXF1aXJlKCcuL190eXBlZC1idWZmZXInKTtcbiAgdmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xuICB2YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG4gIHZhciBwcm9wZXJ0eURlc2MgPSByZXF1aXJlKCcuL19wcm9wZXJ0eS1kZXNjJyk7XG4gIHZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xuICB2YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbiAgdmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbiAgdmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG4gIHZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbiAgdmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4vX3RvLWFic29sdXRlLWluZGV4Jyk7XG4gIHZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG4gIHZhciBjbGFzc29mID0gcmVxdWlyZSgnLi9fY2xhc3NvZicpO1xuICB2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbiAgdmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG4gIHZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbiAgdmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4vX29iamVjdC1jcmVhdGUnKTtcbiAgdmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xuICB2YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbiAgdmFyIGdldEl0ZXJGbiA9IHJlcXVpcmUoJy4vY29yZS5nZXQtaXRlcmF0b3ItbWV0aG9kJyk7XG4gIHZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbiAgdmFyIHdrcyA9IHJlcXVpcmUoJy4vX3drcycpO1xuICB2YXIgY3JlYXRlQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJyk7XG4gIHZhciBjcmVhdGVBcnJheUluY2x1ZGVzID0gcmVxdWlyZSgnLi9fYXJyYXktaW5jbHVkZXMnKTtcbiAgdmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbiAgdmFyIEFycmF5SXRlcmF0b3JzID0gcmVxdWlyZSgnLi9lczYuYXJyYXkuaXRlcmF0b3InKTtcbiAgdmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vX2l0ZXJhdG9ycycpO1xuICB2YXIgJGl0ZXJEZXRlY3QgPSByZXF1aXJlKCcuL19pdGVyLWRldGVjdCcpO1xuICB2YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJyk7XG4gIHZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG4gIHZhciBhcnJheUNvcHlXaXRoaW4gPSByZXF1aXJlKCcuL19hcnJheS1jb3B5LXdpdGhpbicpO1xuICB2YXIgJERQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJyk7XG4gIHZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG4gIHZhciBkUCA9ICREUC5mO1xuICB2YXIgZ09QRCA9ICRHT1BELmY7XG4gIHZhciBSYW5nZUVycm9yID0gZ2xvYmFsLlJhbmdlRXJyb3I7XG4gIHZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuICB2YXIgVWludDhBcnJheSA9IGdsb2JhbC5VaW50OEFycmF5O1xuICB2YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbiAgdmFyIFNIQVJFRF9CVUZGRVIgPSAnU2hhcmVkJyArIEFSUkFZX0JVRkZFUjtcbiAgdmFyIEJZVEVTX1BFUl9FTEVNRU5UID0gJ0JZVEVTX1BFUl9FTEVNRU5UJztcbiAgdmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuICB2YXIgQXJyYXlQcm90byA9IEFycmF5W1BST1RPVFlQRV07XG4gIHZhciAkQXJyYXlCdWZmZXIgPSAkYnVmZmVyLkFycmF5QnVmZmVyO1xuICB2YXIgJERhdGFWaWV3ID0gJGJ1ZmZlci5EYXRhVmlldztcbiAgdmFyIGFycmF5Rm9yRWFjaCA9IGNyZWF0ZUFycmF5TWV0aG9kKDApO1xuICB2YXIgYXJyYXlGaWx0ZXIgPSBjcmVhdGVBcnJheU1ldGhvZCgyKTtcbiAgdmFyIGFycmF5U29tZSA9IGNyZWF0ZUFycmF5TWV0aG9kKDMpO1xuICB2YXIgYXJyYXlFdmVyeSA9IGNyZWF0ZUFycmF5TWV0aG9kKDQpO1xuICB2YXIgYXJyYXlGaW5kID0gY3JlYXRlQXJyYXlNZXRob2QoNSk7XG4gIHZhciBhcnJheUZpbmRJbmRleCA9IGNyZWF0ZUFycmF5TWV0aG9kKDYpO1xuICB2YXIgYXJyYXlJbmNsdWRlcyA9IGNyZWF0ZUFycmF5SW5jbHVkZXModHJ1ZSk7XG4gIHZhciBhcnJheUluZGV4T2YgPSBjcmVhdGVBcnJheUluY2x1ZGVzKGZhbHNlKTtcbiAgdmFyIGFycmF5VmFsdWVzID0gQXJyYXlJdGVyYXRvcnMudmFsdWVzO1xuICB2YXIgYXJyYXlLZXlzID0gQXJyYXlJdGVyYXRvcnMua2V5cztcbiAgdmFyIGFycmF5RW50cmllcyA9IEFycmF5SXRlcmF0b3JzLmVudHJpZXM7XG4gIHZhciBhcnJheUxhc3RJbmRleE9mID0gQXJyYXlQcm90by5sYXN0SW5kZXhPZjtcbiAgdmFyIGFycmF5UmVkdWNlID0gQXJyYXlQcm90by5yZWR1Y2U7XG4gIHZhciBhcnJheVJlZHVjZVJpZ2h0ID0gQXJyYXlQcm90by5yZWR1Y2VSaWdodDtcbiAgdmFyIGFycmF5Sm9pbiA9IEFycmF5UHJvdG8uam9pbjtcbiAgdmFyIGFycmF5U29ydCA9IEFycmF5UHJvdG8uc29ydDtcbiAgdmFyIGFycmF5U2xpY2UgPSBBcnJheVByb3RvLnNsaWNlO1xuICB2YXIgYXJyYXlUb1N0cmluZyA9IEFycmF5UHJvdG8udG9TdHJpbmc7XG4gIHZhciBhcnJheVRvTG9jYWxlU3RyaW5nID0gQXJyYXlQcm90by50b0xvY2FsZVN0cmluZztcbiAgdmFyIElURVJBVE9SID0gd2tzKCdpdGVyYXRvcicpO1xuICB2YXIgVEFHID0gd2tzKCd0b1N0cmluZ1RhZycpO1xuICB2YXIgVFlQRURfQ09OU1RSVUNUT1IgPSB1aWQoJ3R5cGVkX2NvbnN0cnVjdG9yJyk7XG4gIHZhciBERUZfQ09OU1RSVUNUT1IgPSB1aWQoJ2RlZl9jb25zdHJ1Y3RvcicpO1xuICB2YXIgQUxMX0NPTlNUUlVDVE9SUyA9ICR0eXBlZC5DT05TVFI7XG4gIHZhciBUWVBFRF9BUlJBWSA9ICR0eXBlZC5UWVBFRDtcbiAgdmFyIFZJRVcgPSAkdHlwZWQuVklFVztcbiAgdmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGghJztcblxuICB2YXIgJG1hcCA9IGNyZWF0ZUFycmF5TWV0aG9kKDEsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gYWxsb2NhdGUoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSksIGxlbmd0aCk7XG4gIH0pO1xuXG4gIHZhciBMSVRUTEVfRU5ESUFOID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShuZXcgVWludDE2QXJyYXkoWzFdKS5idWZmZXIpWzBdID09PSAxO1xuICB9KTtcblxuICB2YXIgRk9SQ0VEX1NFVCA9ICEhVWludDhBcnJheSAmJiAhIVVpbnQ4QXJyYXlbUFJPVE9UWVBFXS5zZXQgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBVaW50OEFycmF5KDEpLnNldCh7fSk7XG4gIH0pO1xuXG4gIHZhciB0b09mZnNldCA9IGZ1bmN0aW9uIChpdCwgQllURVMpIHtcbiAgICB2YXIgb2Zmc2V0ID0gdG9JbnRlZ2VyKGl0KTtcbiAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgJSBCWVRFUykgdGhyb3cgUmFuZ2VFcnJvcignV3Jvbmcgb2Zmc2V0IScpO1xuICAgIHJldHVybiBvZmZzZXQ7XG4gIH07XG5cbiAgdmFyIHZhbGlkYXRlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGl0KSAmJiBUWVBFRF9BUlJBWSBpbiBpdCkgcmV0dXJuIGl0O1xuICAgIHRocm93IFR5cGVFcnJvcihpdCArICcgaXMgbm90IGEgdHlwZWQgYXJyYXkhJyk7XG4gIH07XG5cbiAgdmFyIGFsbG9jYXRlID0gZnVuY3Rpb24gKEMsIGxlbmd0aCkge1xuICAgIGlmICghKGlzT2JqZWN0KEMpICYmIFRZUEVEX0NPTlNUUlVDVE9SIGluIEMpKSB7XG4gICAgICB0aHJvdyBUeXBlRXJyb3IoJ0l0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIScpO1xuICAgIH0gcmV0dXJuIG5ldyBDKGxlbmd0aCk7XG4gIH07XG5cbiAgdmFyIHNwZWNpZXNGcm9tTGlzdCA9IGZ1bmN0aW9uIChPLCBsaXN0KSB7XG4gICAgcmV0dXJuIGZyb21MaXN0KHNwZWNpZXNDb25zdHJ1Y3RvcihPLCBPW0RFRl9DT05TVFJVQ1RPUl0pLCBsaXN0KTtcbiAgfTtcblxuICB2YXIgZnJvbUxpc3QgPSBmdW5jdGlvbiAoQywgbGlzdCkge1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIHZhciByZXN1bHQgPSBhbGxvY2F0ZShDLCBsZW5ndGgpO1xuICAgIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXksIGludGVybmFsKSB7XG4gICAgZFAoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2RbaW50ZXJuYWxdOyB9IH0pO1xuICB9O1xuXG4gIHZhciAkZnJvbSA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHNvdXJjZSk7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBtYXBmbiA9IGFMZW4gPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBpLCBsZW5ndGgsIHZhbHVlcywgcmVzdWx0LCBzdGVwLCBpdGVyYXRvcjtcbiAgICBpZiAoaXRlckZuICE9IHVuZGVmaW5lZCAmJiAhaXNBcnJheUl0ZXIoaXRlckZuKSkge1xuICAgICAgZm9yIChpdGVyYXRvciA9IGl0ZXJGbi5jYWxsKE8pLCB2YWx1ZXMgPSBbXSwgaSA9IDA7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaSsrKSB7XG4gICAgICAgIHZhbHVlcy5wdXNoKHN0ZXAudmFsdWUpO1xuICAgICAgfSBPID0gdmFsdWVzO1xuICAgIH1cbiAgICBpZiAobWFwcGluZyAmJiBhTGVuID4gMikgbWFwZm4gPSBjdHgobWFwZm4sIGFyZ3VtZW50c1syXSwgMik7XG4gICAgZm9yIChpID0gMCwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpLCByZXN1bHQgPSBhbGxvY2F0ZSh0aGlzLCBsZW5ndGgpOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IG1hcHBpbmcgPyBtYXBmbihPW2ldLCBpKSA6IE9baV07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG5cbiAgdmFyICRvZiA9IGZ1bmN0aW9uIG9mKC8qIC4uLml0ZW1zICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gYWxsb2NhdGUodGhpcywgbGVuZ3RoKTtcbiAgICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBhcmd1bWVudHNbaW5kZXgrK107XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICAvLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG4gIHZhciBUT19MT0NBTEVfQlVHID0gISFVaW50OEFycmF5ICYmIGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb0xvY2FsZVN0cmluZy5jYWxsKG5ldyBVaW50OEFycmF5KDEpKTsgfSk7XG5cbiAgdmFyICR0b0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvTG9jYWxlU3RyaW5nKCkge1xuICAgIHJldHVybiBhcnJheVRvTG9jYWxlU3RyaW5nLmFwcGx5KFRPX0xPQ0FMRV9CVUcgPyBhcnJheVNsaWNlLmNhbGwodmFsaWRhdGUodGhpcykpIDogdmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gIH07XG5cbiAgdmFyIHByb3RvID0ge1xuICAgIGNvcHlXaXRoaW46IGZ1bmN0aW9uIGNvcHlXaXRoaW4odGFyZ2V0LCBzdGFydCAvKiAsIGVuZCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5Q29weVdpdGhpbi5jYWxsKHZhbGlkYXRlKHRoaXMpLCB0YXJnZXQsIHN0YXJ0LCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUV2ZXJ5KHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBmaWxsOiBmdW5jdGlvbiBmaWxsKHZhbHVlIC8qICwgc3RhcnQsIGVuZCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlGaWxsLmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlGaWx0ZXIodmFsaWRhdGUodGhpcyksIGNhbGxiYWNrZm4sXG4gICAgICAgIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBmaW5kOiBmdW5jdGlvbiBmaW5kKHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIHJldHVybiBhcnJheUZpbmQodmFsaWRhdGUodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgZmluZEluZGV4OiBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuIGFycmF5RmluZEluZGV4KHZhbGlkYXRlKHRoaXMpLCBwcmVkaWNhdGUsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGZvckVhY2g6IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICAgIGFycmF5Rm9yRWFjaCh2YWxpZGF0ZSh0aGlzKSwgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgaW5kZXhPZjogZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlJbmRleE9mKHZhbGlkYXRlKHRoaXMpLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykge1xuICAgICAgcmV0dXJuIGFycmF5SW5jbHVkZXModmFsaWRhdGUodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheUpvaW4uYXBwbHkodmFsaWRhdGUodGhpcyksIGFyZ3VtZW50cyk7XG4gICAgfSxcbiAgICBsYXN0SW5kZXhPZjogZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCAqLykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gICAgICByZXR1cm4gYXJyYXlMYXN0SW5kZXhPZi5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIG1hcDogZnVuY3Rpb24gbWFwKG1hcGZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgICAgcmV0dXJuICRtYXAodmFsaWRhdGUodGhpcyksIG1hcGZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICByZWR1Y2U6IGZ1bmN0aW9uIHJlZHVjZShjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZS5hcHBseSh2YWxpZGF0ZSh0aGlzKSwgYXJndW1lbnRzKTtcbiAgICB9LFxuICAgIHJlZHVjZVJpZ2h0OiBmdW5jdGlvbiByZWR1Y2VSaWdodChjYWxsYmFja2ZuIC8qICwgaW5pdGlhbFZhbHVlICovKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICAgIHJldHVybiBhcnJheVJlZHVjZVJpZ2h0LmFwcGx5KHZhbGlkYXRlKHRoaXMpLCBhcmd1bWVudHMpO1xuICAgIH0sXG4gICAgcmV2ZXJzZTogZnVuY3Rpb24gcmV2ZXJzZSgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHZhciBsZW5ndGggPSB2YWxpZGF0ZSh0aGF0KS5sZW5ndGg7XG4gICAgICB2YXIgbWlkZGxlID0gTWF0aC5mbG9vcihsZW5ndGggLyAyKTtcbiAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICAgICAgdmFsdWUgPSB0aGF0W2luZGV4XTtcbiAgICAgICAgdGhhdFtpbmRleCsrXSA9IHRoYXRbLS1sZW5ndGhdO1xuICAgICAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfSxcbiAgICBzb21lOiBmdW5jdGlvbiBzb21lKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgICByZXR1cm4gYXJyYXlTb21lKHZhbGlkYXRlKHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzb3J0OiBmdW5jdGlvbiBzb3J0KGNvbXBhcmVmbikge1xuICAgICAgcmV0dXJuIGFycmF5U29ydC5jYWxsKHZhbGlkYXRlKHRoaXMpLCBjb21wYXJlZm4pO1xuICAgIH0sXG4gICAgc3ViYXJyYXk6IGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgICAgIHZhciBPID0gdmFsaWRhdGUodGhpcyk7XG4gICAgICB2YXIgbGVuZ3RoID0gTy5sZW5ndGg7XG4gICAgICB2YXIgJGJlZ2luID0gdG9BYnNvbHV0ZUluZGV4KGJlZ2luLCBsZW5ndGgpO1xuICAgICAgcmV0dXJuIG5ldyAoc3BlY2llc0NvbnN0cnVjdG9yKE8sIE9bREVGX0NPTlNUUlVDVE9SXSkpKFxuICAgICAgICBPLmJ1ZmZlcixcbiAgICAgICAgTy5ieXRlT2Zmc2V0ICsgJGJlZ2luICogTy5CWVRFU19QRVJfRUxFTUVOVCxcbiAgICAgICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSAkYmVnaW4pXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICB2YXIgJHNsaWNlID0gZnVuY3Rpb24gc2xpY2Uoc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiBzcGVjaWVzRnJvbUxpc3QodGhpcywgYXJyYXlTbGljZS5jYWxsKHZhbGlkYXRlKHRoaXMpLCBzdGFydCwgZW5kKSk7XG4gIH07XG5cbiAgdmFyICRzZXQgPSBmdW5jdGlvbiBzZXQoYXJyYXlMaWtlIC8qICwgb2Zmc2V0ICovKSB7XG4gICAgdmFsaWRhdGUodGhpcyk7XG4gICAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50c1sxXSwgMSk7XG4gICAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICAgIHZhciBzcmMgPSB0b09iamVjdChhcnJheUxpa2UpO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aChzcmMubGVuZ3RoKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xuICB9O1xuXG4gIHZhciAkaXRlcmF0b3JzID0ge1xuICAgIGVudHJpZXM6IGZ1bmN0aW9uIGVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gYXJyYXlFbnRyaWVzLmNhbGwodmFsaWRhdGUodGhpcykpO1xuICAgIH0sXG4gICAga2V5czogZnVuY3Rpb24ga2V5cygpIHtcbiAgICAgIHJldHVybiBhcnJheUtleXMuY2FsbCh2YWxpZGF0ZSh0aGlzKSk7XG4gICAgfSxcbiAgICB2YWx1ZXM6IGZ1bmN0aW9uIHZhbHVlcygpIHtcbiAgICAgIHJldHVybiBhcnJheVZhbHVlcy5jYWxsKHZhbGlkYXRlKHRoaXMpKTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIGlzVEFJbmRleCA9IGZ1bmN0aW9uICh0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc09iamVjdCh0YXJnZXQpXG4gICAgICAmJiB0YXJnZXRbVFlQRURfQVJSQVldXG4gICAgICAmJiB0eXBlb2Yga2V5ICE9ICdzeW1ib2wnXG4gICAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgICAmJiBTdHJpbmcoK2tleSkgPT0gU3RyaW5nKGtleSk7XG4gIH07XG4gIHZhciAkZ2V0RGVzYyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkge1xuICAgIHJldHVybiBpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgPyBwcm9wZXJ0eURlc2MoMiwgdGFyZ2V0W2tleV0pXG4gICAgICA6IGdPUEQodGFyZ2V0LCBrZXkpO1xuICB9O1xuICB2YXIgJHNldERlc2MgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgZGVzYykge1xuICAgIGlmIChpc1RBSW5kZXgodGFyZ2V0LCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKVxuICAgICAgJiYgaXNPYmplY3QoZGVzYylcbiAgICAgICYmIGhhcyhkZXNjLCAndmFsdWUnKVxuICAgICAgJiYgIWhhcyhkZXNjLCAnZ2V0JylcbiAgICAgICYmICFoYXMoZGVzYywgJ3NldCcpXG4gICAgICAvLyBUT0RPOiBhZGQgdmFsaWRhdGlvbiBkZXNjcmlwdG9yIHcvbyBjYWxsaW5nIGFjY2Vzc29yc1xuICAgICAgJiYgIWRlc2MuY29uZmlndXJhYmxlXG4gICAgICAmJiAoIWhhcyhkZXNjLCAnd3JpdGFibGUnKSB8fCBkZXNjLndyaXRhYmxlKVxuICAgICAgJiYgKCFoYXMoZGVzYywgJ2VudW1lcmFibGUnKSB8fCBkZXNjLmVudW1lcmFibGUpXG4gICAgKSB7XG4gICAgICB0YXJnZXRba2V5XSA9IGRlc2MudmFsdWU7XG4gICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH0gcmV0dXJuIGRQKHRhcmdldCwga2V5LCBkZXNjKTtcbiAgfTtcblxuICBpZiAoIUFMTF9DT05TVFJVQ1RPUlMpIHtcbiAgICAkR09QRC5mID0gJGdldERlc2M7XG4gICAgJERQLmYgPSAkc2V0RGVzYztcbiAgfVxuXG4gICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIUFMTF9DT05TVFJVQ1RPUlMsICdPYmplY3QnLCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0RGVzYyxcbiAgICBkZWZpbmVQcm9wZXJ0eTogJHNldERlc2NcbiAgfSk7XG5cbiAgaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgICBhcnJheVRvU3RyaW5nID0gYXJyYXlUb0xvY2FsZVN0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRoaXMpO1xuICAgIH07XG4gIH1cblxuICB2YXIgJFR5cGVkQXJyYXlQcm90b3R5cGUkID0gcmVkZWZpbmVBbGwoe30sIHByb3RvKTtcbiAgcmVkZWZpbmVBbGwoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAkaXRlcmF0b3JzKTtcbiAgaGlkZSgkVHlwZWRBcnJheVByb3RvdHlwZSQsIElURVJBVE9SLCAkaXRlcmF0b3JzLnZhbHVlcyk7XG4gIHJlZGVmaW5lQWxsKCRUeXBlZEFycmF5UHJvdG90eXBlJCwge1xuICAgIHNsaWNlOiAkc2xpY2UsXG4gICAgc2V0OiAkc2V0LFxuICAgIGNvbnN0cnVjdG9yOiBmdW5jdGlvbiAoKSB7IC8qIG5vb3AgKi8gfSxcbiAgICB0b1N0cmluZzogYXJyYXlUb1N0cmluZyxcbiAgICB0b0xvY2FsZVN0cmluZzogJHRvTG9jYWxlU3RyaW5nXG4gIH0pO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnVmZmVyJywgJ2InKTtcbiAgYWRkR2V0dGVyKCRUeXBlZEFycmF5UHJvdG90eXBlJCwgJ2J5dGVPZmZzZXQnLCAnbycpO1xuICBhZGRHZXR0ZXIoJFR5cGVkQXJyYXlQcm90b3R5cGUkLCAnYnl0ZUxlbmd0aCcsICdsJyk7XG4gIGFkZEdldHRlcigkVHlwZWRBcnJheVByb3RvdHlwZSQsICdsZW5ndGgnLCAnZScpO1xuICBkUCgkVHlwZWRBcnJheVByb3RvdHlwZSQsIFRBRywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tUWVBFRF9BUlJBWV07IH1cbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1zdGF0ZW1lbnRzXG4gIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKEtFWSwgQllURVMsIHdyYXBwZXIsIENMQU1QRUQpIHtcbiAgICBDTEFNUEVEID0gISFDTEFNUEVEO1xuICAgIHZhciBOQU1FID0gS0VZICsgKENMQU1QRUQgPyAnQ2xhbXBlZCcgOiAnJykgKyAnQXJyYXknO1xuICAgIHZhciBHRVRURVIgPSAnZ2V0JyArIEtFWTtcbiAgICB2YXIgU0VUVEVSID0gJ3NldCcgKyBLRVk7XG4gICAgdmFyIFR5cGVkQXJyYXkgPSBnbG9iYWxbTkFNRV07XG4gICAgdmFyIEJhc2UgPSBUeXBlZEFycmF5IHx8IHt9O1xuICAgIHZhciBUQUMgPSBUeXBlZEFycmF5ICYmIGdldFByb3RvdHlwZU9mKFR5cGVkQXJyYXkpO1xuICAgIHZhciBGT1JDRUQgPSAhVHlwZWRBcnJheSB8fCAhJHR5cGVkLkFCVjtcbiAgICB2YXIgTyA9IHt9O1xuICAgIHZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheSAmJiBUeXBlZEFycmF5W1BST1RPVFlQRV07XG4gICAgdmFyIGdldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCkge1xuICAgICAgdmFyIGRhdGEgPSB0aGF0Ll9kO1xuICAgICAgcmV0dXJuIGRhdGEudltHRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIExJVFRMRV9FTkRJQU4pO1xuICAgIH07XG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gdGhhdC5fZDtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUpKSA8IDAgPyAwIDogdmFsdWUgPiAweGZmID8gMHhmZiA6IHZhbHVlICYgMHhmZjtcbiAgICAgIGRhdGEudltTRVRURVJdKGluZGV4ICogQllURVMgKyBkYXRhLm8sIHZhbHVlLCBMSVRUTEVfRU5ESUFOKTtcbiAgICB9O1xuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBkUCh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG4gICAgaWYgKEZPUkNFRCkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FLCAnX2QnKTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIG9mZnNldCA9IDA7XG4gICAgICAgIHZhciBidWZmZXIsIGJ5dGVMZW5ndGgsIGxlbmd0aCwga2xhc3M7XG4gICAgICAgIGlmICghaXNPYmplY3QoZGF0YSkpIHtcbiAgICAgICAgICBsZW5ndGggPSB0b0luZGV4KGRhdGEpO1xuICAgICAgICAgIGJ5dGVMZW5ndGggPSBsZW5ndGggKiBCWVRFUztcbiAgICAgICAgICBidWZmZXIgPSBuZXcgJEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGEgaW5zdGFuY2VvZiAkQXJyYXlCdWZmZXIgfHwgKGtsYXNzID0gY2xhc3NvZihkYXRhKSkgPT0gQVJSQVlfQlVGRkVSIHx8IGtsYXNzID09IFNIQVJFRF9CVUZGRVIpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIG9mZnNldCA9IHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIG9mZnNldDtcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoIDwgMCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gdG9MZW5ndGgoJGxlbmd0aCkgKiBCWVRFUztcbiAgICAgICAgICAgIGlmIChieXRlTGVuZ3RoICsgb2Zmc2V0ID4gJGxlbikgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19MRU5HVEgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBsZW5ndGggPSBieXRlTGVuZ3RoIC8gQllURVM7XG4gICAgICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkge1xuICAgICAgICAgIHJldHVybiBmcm9tTGlzdChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBoaWRlKHRoYXQsICdfZCcsIHtcbiAgICAgICAgICBiOiBidWZmZXIsXG4gICAgICAgICAgbzogb2Zmc2V0LFxuICAgICAgICAgIGw6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgZTogbGVuZ3RoLFxuICAgICAgICAgIHY6IG5ldyAkRGF0YVZpZXcoYnVmZmVyKVxuICAgICAgICB9KTtcbiAgICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSBhZGRFbGVtZW50KHRoYXQsIGluZGV4KyspO1xuICAgICAgfSk7XG4gICAgICBUeXBlZEFycmF5UHJvdG90eXBlID0gVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gY3JlYXRlKCRUeXBlZEFycmF5UHJvdG90eXBlJCk7XG4gICAgICBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsICdjb25zdHJ1Y3RvcicsIFR5cGVkQXJyYXkpO1xuICAgIH0gZWxzZSBpZiAoIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIFR5cGVkQXJyYXkoMSk7XG4gICAgfSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KC0xKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9KSB8fCAhJGl0ZXJEZXRlY3QoZnVuY3Rpb24gKGl0ZXIpIHtcbiAgICAgIG5ldyBUeXBlZEFycmF5KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShudWxsKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICAgIG5ldyBUeXBlZEFycmF5KDEuNSk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICBuZXcgVHlwZWRBcnJheShpdGVyKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICB9LCB0cnVlKSkge1xuICAgICAgVHlwZWRBcnJheSA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsICRvZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZSh0aGF0LCBUeXBlZEFycmF5LCBOQU1FKTtcbiAgICAgICAgdmFyIGtsYXNzO1xuICAgICAgICAvLyBgd3NgIG1vZHVsZSBidWcsIHRlbXBvcmFyaWx5IHJlbW92ZSB2YWxpZGF0aW9uIGxlbmd0aCBmb3IgVWludDhBcnJheVxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2Vic29ja2V0cy93cy9wdWxsLzY0NVxuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IEJhc2UodG9JbmRleChkYXRhKSk7XG4gICAgICAgIGlmIChkYXRhIGluc3RhbmNlb2YgJEFycmF5QnVmZmVyIHx8IChrbGFzcyA9IGNsYXNzb2YoZGF0YSkpID09IEFSUkFZX0JVRkZFUiB8fCBrbGFzcyA9PSBTSEFSRURfQlVGRkVSKSB7XG4gICAgICAgICAgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgQmFzZShkYXRhLCB0b09mZnNldCgkb2Zmc2V0LCBCWVRFUyksICRsZW5ndGgpXG4gICAgICAgICAgICA6ICRvZmZzZXQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICA/IG5ldyBCYXNlKGRhdGEsIHRvT2Zmc2V0KCRvZmZzZXQsIEJZVEVTKSlcbiAgICAgICAgICAgICAgOiBuZXcgQmFzZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoVFlQRURfQVJSQVkgaW4gZGF0YSkgcmV0dXJuIGZyb21MaXN0KFR5cGVkQXJyYXksIGRhdGEpO1xuICAgICAgICByZXR1cm4gJGZyb20uY2FsbChUeXBlZEFycmF5LCBkYXRhKTtcbiAgICAgIH0pO1xuICAgICAgYXJyYXlGb3JFYWNoKFRBQyAhPT0gRnVuY3Rpb24ucHJvdG90eXBlID8gZ09QTihCYXNlKS5jb25jYXQoZ09QTihUQUMpKSA6IGdPUE4oQmFzZSksIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKCEoa2V5IGluIFR5cGVkQXJyYXkpKSBoaWRlKFR5cGVkQXJyYXksIGtleSwgQmFzZVtrZXldKTtcbiAgICAgIH0pO1xuICAgICAgVHlwZWRBcnJheVtQUk9UT1RZUEVdID0gVHlwZWRBcnJheVByb3RvdHlwZTtcbiAgICAgIGlmICghTElCUkFSWSkgVHlwZWRBcnJheVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFR5cGVkQXJyYXk7XG4gICAgfVxuICAgIHZhciAkbmF0aXZlSXRlcmF0b3IgPSBUeXBlZEFycmF5UHJvdG90eXBlW0lURVJBVE9SXTtcbiAgICB2YXIgQ09SUkVDVF9JVEVSX05BTUUgPSAhISRuYXRpdmVJdGVyYXRvclxuICAgICAgJiYgKCRuYXRpdmVJdGVyYXRvci5uYW1lID09ICd2YWx1ZXMnIHx8ICRuYXRpdmVJdGVyYXRvci5uYW1lID09IHVuZGVmaW5lZCk7XG4gICAgdmFyICRpdGVyYXRvciA9ICRpdGVyYXRvcnMudmFsdWVzO1xuICAgIGhpZGUoVHlwZWRBcnJheSwgVFlQRURfQ09OU1RSVUNUT1IsIHRydWUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVFlQRURfQVJSQVksIE5BTUUpO1xuICAgIGhpZGUoVHlwZWRBcnJheVByb3RvdHlwZSwgVklFVywgdHJ1ZSk7XG4gICAgaGlkZShUeXBlZEFycmF5UHJvdG90eXBlLCBERUZfQ09OU1RSVUNUT1IsIFR5cGVkQXJyYXkpO1xuXG4gICAgaWYgKENMQU1QRUQgPyBuZXcgVHlwZWRBcnJheSgxKVtUQUddICE9IE5BTUUgOiAhKFRBRyBpbiBUeXBlZEFycmF5UHJvdG90eXBlKSkge1xuICAgICAgZFAoVHlwZWRBcnJheVByb3RvdHlwZSwgVEFHLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gTkFNRTsgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgT1tOQU1FXSA9IFR5cGVkQXJyYXk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqIChUeXBlZEFycmF5ICE9IEJhc2UpLCBPKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TLCBOQU1FLCB7XG4gICAgICBCWVRFU19QRVJfRUxFTUVOVDogQllURVNcbiAgICB9KTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkgeyBCYXNlLm9mLmNhbGwoVHlwZWRBcnJheSwgMSk7IH0pLCBOQU1FLCB7XG4gICAgICBmcm9tOiAkZnJvbSxcbiAgICAgIG9mOiAkb2ZcbiAgICB9KTtcblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlQcm90b3R5cGUpKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCwgTkFNRSwgcHJvdG8pO1xuXG4gICAgc2V0U3BlY2llcyhOQU1FKTtcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogRk9SQ0VEX1NFVCwgTkFNRSwgeyBzZXQ6ICRzZXQgfSk7XG5cbiAgICAkZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFDT1JSRUNUX0lURVJfTkFNRSwgTkFNRSwgJGl0ZXJhdG9ycyk7XG5cbiAgICBpZiAoIUxJQlJBUlkgJiYgVHlwZWRBcnJheVByb3RvdHlwZS50b1N0cmluZyAhPSBhcnJheVRvU3RyaW5nKSBUeXBlZEFycmF5UHJvdG90eXBlLnRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcblxuICAgICRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IFR5cGVkQXJyYXkoMSkuc2xpY2UoKTtcbiAgICB9KSwgTkFNRSwgeyBzbGljZTogJHNsaWNlIH0pO1xuXG4gICAgJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIFsxLCAyXS50b0xvY2FsZVN0cmluZygpICE9IG5ldyBUeXBlZEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgVHlwZWRBcnJheVByb3RvdHlwZS50b0xvY2FsZVN0cmluZy5jYWxsKFsxLCAyXSk7XG4gICAgfSkpLCBOQU1FLCB7IHRvTG9jYWxlU3RyaW5nOiAkdG9Mb2NhbGVTdHJpbmcgfSk7XG5cbiAgICBJdGVyYXRvcnNbTkFNRV0gPSBDT1JSRUNUX0lURVJfTkFNRSA/ICRuYXRpdmVJdGVyYXRvciA6ICRpdGVyYXRvcjtcbiAgICBpZiAoIUxJQlJBUlkgJiYgIUNPUlJFQ1RfSVRFUl9OQU1FKSBoaWRlKFR5cGVkQXJyYXlQcm90b3R5cGUsIElURVJBVE9SLCAkaXRlcmF0b3IpO1xuICB9O1xufSBlbHNlIG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKTtcbnZhciBMSUJSQVJZID0gcmVxdWlyZSgnLi9fbGlicmFyeScpO1xudmFyICR0eXBlZCA9IHJlcXVpcmUoJy4vX3R5cGVkJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciByZWRlZmluZUFsbCA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lLWFsbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi9fYW4taW5zdGFuY2UnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbnZhciBnT1BOID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuL19hcnJheS1maWxsJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuL19zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEFSUkFZX0JVRkZFUiA9ICdBcnJheUJ1ZmZlcic7XG52YXIgREFUQV9WSUVXID0gJ0RhdGFWaWV3JztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcbnZhciBXUk9OR19MRU5HVEggPSAnV3JvbmcgbGVuZ3RoISc7XG52YXIgV1JPTkdfSU5ERVggPSAnV3JvbmcgaW5kZXghJztcbnZhciAkQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcbnZhciAkRGF0YVZpZXcgPSBnbG9iYWxbREFUQV9WSUVXXTtcbnZhciBNYXRoID0gZ2xvYmFsLk1hdGg7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNoYWRvdy1yZXN0cmljdGVkLW5hbWVzXG52YXIgSW5maW5pdHkgPSBnbG9iYWwuSW5maW5pdHk7XG52YXIgQmFzZUJ1ZmZlciA9ICRBcnJheUJ1ZmZlcjtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG52YXIgQlVGRkVSID0gJ2J1ZmZlcic7XG52YXIgQllURV9MRU5HVEggPSAnYnl0ZUxlbmd0aCc7XG52YXIgQllURV9PRkZTRVQgPSAnYnl0ZU9mZnNldCc7XG52YXIgJEJVRkZFUiA9IERFU0NSSVBUT1JTID8gJ19iJyA6IEJVRkZFUjtcbnZhciAkTEVOR1RIID0gREVTQ1JJUFRPUlMgPyAnX2wnIDogQllURV9MRU5HVEg7XG52YXIgJE9GRlNFVCA9IERFU0NSSVBUT1JTID8gJ19vJyA6IEJZVEVfT0ZGU0VUO1xuXG4vLyBJRUVFNzU0IGNvbnZlcnNpb25zIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvaWVlZTc1NFxuZnVuY3Rpb24gcGFja0lFRUU3NTQodmFsdWUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgYnVmZmVyID0gbmV3IEFycmF5KG5CeXRlcyk7XG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxO1xuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtTGVuID09PSAyMyA/IHBvdygyLCAtMjQpIC0gcG93KDIsIC03NykgOiAwO1xuICB2YXIgaSA9IDA7XG4gIHZhciBzID0gdmFsdWUgPCAwIHx8IHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDAgPyAxIDogMDtcbiAgdmFyIGUsIG0sIGM7XG4gIHZhbHVlID0gYWJzKHZhbHVlKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICBpZiAodmFsdWUgIT0gdmFsdWUgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZVxuICAgIG0gPSB2YWx1ZSAhPSB2YWx1ZSA/IDEgOiAwO1xuICAgIGUgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGUgPSBmbG9vcihsb2codmFsdWUpIC8gTE4yKTtcbiAgICBpZiAodmFsdWUgKiAoYyA9IHBvdygyLCAtZSkpIDwgMSkge1xuICAgICAgZS0tO1xuICAgICAgYyAqPSAyO1xuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gYztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFsdWUgKz0gcnQgKiBwb3coMiwgMSAtIGVCaWFzKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKys7XG4gICAgICBjIC89IDI7XG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDA7XG4gICAgICBlID0gZU1heDtcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogcG93KDIsIG1MZW4pO1xuICAgICAgZSA9IGUgKyBlQmlhcztcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbUxlbik7XG4gICAgICBlID0gMDtcbiAgICB9XG4gIH1cbiAgZm9yICg7IG1MZW4gPj0gODsgYnVmZmVyW2krK10gPSBtICYgMjU1LCBtIC89IDI1NiwgbUxlbiAtPSA4KTtcbiAgZSA9IGUgPDwgbUxlbiB8IG07XG4gIGVMZW4gKz0gbUxlbjtcbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbaSsrXSA9IGUgJiAyNTUsIGUgLz0gMjU2LCBlTGVuIC09IDgpO1xuICBidWZmZXJbLS1pXSB8PSBzICogMTI4O1xuICByZXR1cm4gYnVmZmVyO1xufVxuZnVuY3Rpb24gdW5wYWNrSUVFRTc1NChidWZmZXIsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMTtcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDE7XG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMTtcbiAgdmFyIG5CaXRzID0gZUxlbiAtIDc7XG4gIHZhciBpID0gbkJ5dGVzIC0gMTtcbiAgdmFyIHMgPSBidWZmZXJbaS0tXTtcbiAgdmFyIGUgPSBzICYgMTI3O1xuICB2YXIgbTtcbiAgcyA+Pj0gNztcbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIG0gPSBlICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGUgPj49IC1uQml0cztcbiAgbkJpdHMgKz0gbUxlbjtcbiAgZm9yICg7IG5CaXRzID4gMDsgbSA9IG0gKiAyNTYgKyBidWZmZXJbaV0sIGktLSwgbkJpdHMgLT0gOCk7XG4gIGlmIChlID09PSAwKSB7XG4gICAgZSA9IDEgLSBlQmlhcztcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiBzID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBwb3coMiwgbUxlbik7XG4gICAgZSA9IGUgLSBlQmlhcztcbiAgfSByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIHBvdygyLCBlIC0gbUxlbik7XG59XG5cbmZ1bmN0aW9uIHVucGFja0kzMihieXRlcykge1xuICByZXR1cm4gYnl0ZXNbM10gPDwgMjQgfCBieXRlc1syXSA8PCAxNiB8IGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbn1cbmZ1bmN0aW9uIHBhY2tJOChpdCkge1xuICByZXR1cm4gW2l0ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTE2KGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZl07XG59XG5mdW5jdGlvbiBwYWNrSTMyKGl0KSB7XG4gIHJldHVybiBbaXQgJiAweGZmLCBpdCA+PiA4ICYgMHhmZiwgaXQgPj4gMTYgJiAweGZmLCBpdCA+PiAyNCAmIDB4ZmZdO1xufVxuZnVuY3Rpb24gcGFja0Y2NChpdCkge1xuICByZXR1cm4gcGFja0lFRUU3NTQoaXQsIDUyLCA4KTtcbn1cbmZ1bmN0aW9uIHBhY2tGMzIoaXQpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KGl0LCAyMywgNCk7XG59XG5cbmZ1bmN0aW9uIGFkZEdldHRlcihDLCBrZXksIGludGVybmFsKSB7XG4gIGRQKENbUFJPVE9UWVBFXSwga2V5LCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpc1tpbnRlcm5hbF07IH0gfSk7XG59XG5cbmZ1bmN0aW9uIGdldCh2aWV3LCBieXRlcywgaW5kZXgsIGlzTGl0dGxlRW5kaWFuKSB7XG4gIHZhciBudW1JbmRleCA9ICtpbmRleDtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChudW1JbmRleCk7XG4gIGlmIChpbnRJbmRleCArIGJ5dGVzID4gdmlld1skTEVOR1RIXSkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBzdG9yZSA9IHZpZXdbJEJVRkZFUl0uX2I7XG4gIHZhciBzdGFydCA9IGludEluZGV4ICsgdmlld1skT0ZGU0VUXTtcbiAgdmFyIHBhY2sgPSBzdG9yZS5zbGljZShzdGFydCwgc3RhcnQgKyBieXRlcyk7XG4gIHJldHVybiBpc0xpdHRsZUVuZGlhbiA/IHBhY2sgOiBwYWNrLnJldmVyc2UoKTtcbn1cbmZ1bmN0aW9uIHNldCh2aWV3LCBieXRlcywgaW5kZXgsIGNvbnZlcnNpb24sIHZhbHVlLCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgbnVtSW5kZXggPSAraW5kZXg7XG4gIHZhciBpbnRJbmRleCA9IHRvSW5kZXgobnVtSW5kZXgpO1xuICBpZiAoaW50SW5kZXggKyBieXRlcyA+IHZpZXdbJExFTkdUSF0pIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfSU5ERVgpO1xuICB2YXIgc3RvcmUgPSB2aWV3WyRCVUZGRVJdLl9iO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHZpZXdbJE9GRlNFVF07XG4gIHZhciBwYWNrID0gY29udmVyc2lvbigrdmFsdWUpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVzOyBpKyspIHN0b3JlW3N0YXJ0ICsgaV0gPSBwYWNrW2lzTGl0dGxlRW5kaWFuID8gaSA6IGJ5dGVzIC0gaSAtIDFdO1xufVxuXG5pZiAoISR0eXBlZC5BQlYpIHtcbiAgJEFycmF5QnVmZmVyID0gZnVuY3Rpb24gQXJyYXlCdWZmZXIobGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG4gICAgdmFyIGJ5dGVMZW5ndGggPSB0b0luZGV4KGxlbmd0aCk7XG4gICAgdGhpcy5fYiA9IGFycmF5RmlsbC5jYWxsKG5ldyBBcnJheShieXRlTGVuZ3RoKSwgMCk7XG4gICAgdGhpc1skTEVOR1RIXSA9IGJ5dGVMZW5ndGg7XG4gIH07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCAkRGF0YVZpZXcsIERBVEFfVklFVyk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsICRBcnJheUJ1ZmZlciwgREFUQV9WSUVXKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gYnVmZmVyWyRMRU5HVEhdO1xuICAgIHZhciBvZmZzZXQgPSB0b0ludGVnZXIoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQhJyk7XG4gICAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPT09IHVuZGVmaW5lZCA/IGJ1ZmZlckxlbmd0aCAtIG9mZnNldCA6IHRvTGVuZ3RoKGJ5dGVMZW5ndGgpO1xuICAgIGlmIChvZmZzZXQgKyBieXRlTGVuZ3RoID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgdGhpc1skQlVGRkVSXSA9IGJ1ZmZlcjtcbiAgICB0aGlzWyRPRkZTRVRdID0gb2Zmc2V0O1xuICAgIHRoaXNbJExFTkdUSF0gPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIGlmIChERVNDUklQVE9SUykge1xuICAgIGFkZEdldHRlcigkQXJyYXlCdWZmZXIsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCVUZGRVIsICdfYicpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsIEJZVEVfTEVOR1RILCAnX2wnKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCBCWVRFX09GRlNFVCwgJ19vJyk7XG4gIH1cblxuICByZWRlZmluZUFsbCgkRGF0YVZpZXdbUFJPVE9UWVBFXSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pO1xuICAgICAgcmV0dXJuIChieXRlc1sxXSA8PCA4IHwgYnl0ZXNbMF0pIDw8IDE2ID4+IDE2O1xuICAgIH0sXG4gICAgZ2V0VWludDE2OiBmdW5jdGlvbiBnZXRVaW50MTYoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgdmFyIGJ5dGVzID0gZ2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSk7XG4gICAgICByZXR1cm4gYnl0ZXNbMV0gPDwgOCB8IGJ5dGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MzI6IGZ1bmN0aW9uIGdldEludDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJMzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50c1sxXSkpO1xuICAgIH0sXG4gICAgZ2V0VWludDMyOiBmdW5jdGlvbiBnZXRVaW50MzIoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0kzMihnZXQodGhpcywgNCwgYnl0ZU9mZnNldCwgYXJndW1lbnRzWzFdKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCAyMywgNCk7XG4gICAgfSxcbiAgICBnZXRGbG9hdDY0OiBmdW5jdGlvbiBnZXRGbG9hdDY0KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBhcmd1bWVudHNbMV0pLCA1MiwgOCk7XG4gICAgfSxcbiAgICBzZXRJbnQ4OiBmdW5jdGlvbiBzZXRJbnQ4KGJ5dGVPZmZzZXQsIHZhbHVlKSB7XG4gICAgICBzZXQodGhpcywgMSwgYnl0ZU9mZnNldCwgcGFja0k4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSTgsIHZhbHVlKTtcbiAgICB9LFxuICAgIHNldEludDE2OiBmdW5jdGlvbiBzZXRJbnQxNihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDIsIGJ5dGVPZmZzZXQsIHBhY2tJMTYsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSTE2LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEludDMyOiBmdW5jdGlvbiBzZXRJbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJMzIsIHZhbHVlLCBhcmd1bWVudHNbMl0pO1xuICAgIH0sXG4gICAgc2V0VWludDMyOiBmdW5jdGlvbiBzZXRVaW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSTMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRjMyLCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRjY0LCB2YWx1ZSwgYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgaWYgKCFmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgJEFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoLTEpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICB9KSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgbmV3ICRBcnJheUJ1ZmZlcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ld1xuICAgIG5ldyAkQXJyYXlCdWZmZXIoMS41KTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXdcbiAgICBuZXcgJEFycmF5QnVmZmVyKE5hTik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgcmV0dXJuICRBcnJheUJ1ZmZlci5uYW1lICE9IEFSUkFZX0JVRkZFUjtcbiAgfSkpIHtcbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgJEFycmF5QnVmZmVyKTtcbiAgICAgIHJldHVybiBuZXcgQmFzZUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG4gICAgdmFyIEFycmF5QnVmZmVyUHJvdG8gPSAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEJhc2VCdWZmZXJbUFJPVE9UWVBFXTtcbiAgICBmb3IgKHZhciBrZXlzID0gZ09QTihCYXNlQnVmZmVyKSwgaiA9IDAsIGtleTsga2V5cy5sZW5ndGggPiBqOykge1xuICAgICAgaWYgKCEoKGtleSA9IGtleXNbaisrXSkgaW4gJEFycmF5QnVmZmVyKSkgaGlkZSgkQXJyYXlCdWZmZXIsIGtleSwgQmFzZUJ1ZmZlcltrZXldKTtcbiAgICB9XG4gICAgaWYgKCFMSUJSQVJZKSBBcnJheUJ1ZmZlclByb3RvLmNvbnN0cnVjdG9yID0gJEFycmF5QnVmZmVyO1xuICB9XG4gIC8vIGlPUyBTYWZhcmkgNy54IGJ1Z1xuICB2YXIgdmlldyA9IG5ldyAkRGF0YVZpZXcobmV3ICRBcnJheUJ1ZmZlcigyKSk7XG4gIHZhciAkc2V0SW50OCA9ICREYXRhVmlld1tQUk9UT1RZUEVdLnNldEludDg7XG4gIHZpZXcuc2V0SW50OCgwLCAyMTQ3NDgzNjQ4KTtcbiAgdmlldy5zZXRJbnQ4KDEsIDIxNDc0ODM2NDkpO1xuICBpZiAodmlldy5nZXRJbnQ4KDApIHx8ICF2aWV3LmdldEludDgoMSkpIHJlZGVmaW5lQWxsKCREYXRhVmlld1tQUk9UT1RZUEVdLCB7XG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDguY2FsbCh0aGlzLCBieXRlT2Zmc2V0LCB2YWx1ZSA8PCAyNCA+PiAyNCk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4LmNhbGwodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgdHJ1ZSk7XG59XG5zZXRUb1N0cmluZ1RhZygkQXJyYXlCdWZmZXIsIEFSUkFZX0JVRkZFUik7XG5zZXRUb1N0cmluZ1RhZygkRGF0YVZpZXcsIERBVEFfVklFVyk7XG5oaWRlKCREYXRhVmlld1tQUk9UT1RZUEVdLCAkdHlwZWQuVklFVywgdHJ1ZSk7XG5leHBvcnRzW0FSUkFZX0JVRkZFUl0gPSAkQXJyYXlCdWZmZXI7XG5leHBvcnRzW0RBVEFfVklFV10gPSAkRGF0YVZpZXc7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGlkZSA9IHJlcXVpcmUoJy4vX2hpZGUnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciBUWVBFRCA9IHVpZCgndHlwZWRfYXJyYXknKTtcbnZhciBWSUVXID0gdWlkKCd2aWV3Jyk7XG52YXIgQUJWID0gISEoZ2xvYmFsLkFycmF5QnVmZmVyICYmIGdsb2JhbC5EYXRhVmlldyk7XG52YXIgQ09OU1RSID0gQUJWO1xudmFyIGkgPSAwO1xudmFyIGwgPSA5O1xudmFyIFR5cGVkO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9ycyA9IChcbiAgJ0ludDhBcnJheSxVaW50OEFycmF5LFVpbnQ4Q2xhbXBlZEFycmF5LEludDE2QXJyYXksVWludDE2QXJyYXksSW50MzJBcnJheSxVaW50MzJBcnJheSxGbG9hdDMyQXJyYXksRmxvYXQ2NEFycmF5J1xuKS5zcGxpdCgnLCcpO1xuXG53aGlsZSAoaSA8IGwpIHtcbiAgaWYgKFR5cGVkID0gZ2xvYmFsW1R5cGVkQXJyYXlDb25zdHJ1Y3RvcnNbaSsrXV0pIHtcbiAgICBoaWRlKFR5cGVkLnByb3RvdHlwZSwgVFlQRUQsIHRydWUpO1xuICAgIGhpZGUoVHlwZWQucHJvdG90eXBlLCBWSUVXLCB0cnVlKTtcbiAgfSBlbHNlIENPTlNUUiA9IGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQUJWOiBBQlYsXG4gIENPTlNUUjogQ09OU1RSLFxuICBUWVBFRDogVFlQRUQsXG4gIFZJRVc6IFZJRVdcbn07XG4iLCJ2YXIgaWQgPSAwO1xudmFyIHB4ID0gTWF0aC5yYW5kb20oKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSkge1xuICByZXR1cm4gJ1N5bWJvbCgnLmNvbmNhdChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5LCAnKV8nLCAoKytpZCArIHB4KS50b1N0cmluZygzNikpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdmlnYXRvciAmJiBuYXZpZ2F0b3IudXNlckFnZW50IHx8ICcnO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCwgVFlQRSkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSB8fCBpdC5fdCAhPT0gVFlQRSkgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCEnKTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgd2tzRXh0ID0gcmVxdWlyZSgnLi9fd2tzLWV4dCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgdmFyICRTeW1ib2wgPSBjb3JlLlN5bWJvbCB8fCAoY29yZS5TeW1ib2wgPSBMSUJSQVJZID8ge30gOiBnbG9iYWwuU3ltYm9sIHx8IHt9KTtcbiAgaWYgKG5hbWUuY2hhckF0KDApICE9ICdfJyAmJiAhKG5hbWUgaW4gJFN5bWJvbCkpIGRlZmluZVByb3BlcnR5KCRTeW1ib2wsIG5hbWUsIHsgdmFsdWU6IHdrc0V4dC5mKG5hbWUpIH0pO1xufTtcbiIsImV4cG9ydHMuZiA9IHJlcXVpcmUoJy4vX3drcycpO1xuIiwidmFyIHN0b3JlID0gcmVxdWlyZSgnLi9fc2hhcmVkJykoJ3drcycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4vX3VpZCcpO1xudmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpLlN5bWJvbDtcbnZhciBVU0VfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nO1xuXG52YXIgJGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gIHJldHVybiBzdG9yZVtuYW1lXSB8fCAoc3RvcmVbbmFtZV0gPVxuICAgIFVTRV9TWU1CT0wgJiYgU3ltYm9sW25hbWVdIHx8IChVU0VfU1lNQk9MID8gU3ltYm9sIDogdWlkKSgnU3ltYm9sLicgKyBuYW1lKSk7XG59O1xuXG4kZXhwb3J0cy5zdG9yZSA9IHN0b3JlO1xuIiwidmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgSVRFUkFUT1IgPSByZXF1aXJlKCcuL193a3MnKSgnaXRlcmF0b3InKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuL19pdGVyYXRvcnMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29yZScpLmdldEl0ZXJhdG9yTWV0aG9kID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCAhPSB1bmRlZmluZWQpIHJldHVybiBpdFtJVEVSQVRPUl1cbiAgICB8fCBpdFsnQEBpdGVyYXRvciddXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vYmVuamFtaW5nci9SZXhFeHAuZXNjYXBlXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRyZSA9IHJlcXVpcmUoJy4vX3JlcGxhY2VyJykoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVnRXhwJywgeyBlc2NhcGU6IGZ1bmN0aW9uIGVzY2FwZShpdCkgeyByZXR1cm4gJHJlKGl0KTsgfSB9KTtcbiIsIi8vIDIyLjEuMy4zIEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluKHRhcmdldCwgc3RhcnQsIGVuZCA9IHRoaXMubGVuZ3RoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHsgY29weVdpdGhpbjogcmVxdWlyZSgnLi9fYXJyYXktY29weS13aXRoaW4nKSB9KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2NvcHlXaXRoaW4nKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uZXZlcnksIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy41IC8gMTUuNC40LjE2IEFycmF5LnByb3RvdHlwZS5ldmVyeShjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBldmVyeTogZnVuY3Rpb24gZXZlcnkoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGV2ZXJ5KHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiLy8gMjIuMS4zLjYgQXJyYXkucHJvdG90eXBlLmZpbGwodmFsdWUsIHN0YXJ0ID0gMCwgZW5kID0gdGhpcy5sZW5ndGgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5JywgeyBmaWxsOiByZXF1aXJlKCcuL19hcnJheS1maWxsJykgfSk7XG5cbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKCdmaWxsJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoMik7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5maWx0ZXIsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy43IC8gMTUuNC40LjIwIEFycmF5LnByb3RvdHlwZS5maWx0ZXIoY2FsbGJhY2tmbiBbLCB0aGlzQXJnXSlcbiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJGZpbHRlcih0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy45IEFycmF5LnByb3RvdHlwZS5maW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnID0gdW5kZWZpbmVkKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZmluZCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSg2KTtcbnZhciBLRVkgPSAnZmluZEluZGV4JztcbnZhciBmb3JjZWQgPSB0cnVlO1xuLy8gU2hvdWxkbid0IHNraXAgaG9sZXNcbmlmIChLRVkgaW4gW10pIEFycmF5KDEpW0tFWV0oZnVuY3Rpb24gKCkgeyBmb3JjZWQgPSBmYWxzZTsgfSk7XG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIGZvcmNlZCwgJ0FycmF5Jywge1xuICBmaW5kSW5kZXg6IGZ1bmN0aW9uIGZpbmRJbmRleChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgIHJldHVybiAkZmluZCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoS0VZKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy44IEFycmF5LnByb3RvdHlwZS5maW5kKHByZWRpY2F0ZSwgdGhpc0FyZyA9IHVuZGVmaW5lZClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuL19hcnJheS1tZXRob2RzJykoNSk7XG52YXIgS0VZID0gJ2ZpbmQnO1xudmFyIGZvcmNlZCA9IHRydWU7XG4vLyBTaG91bGRuJ3Qgc2tpcCBob2xlc1xuaWYgKEtFWSBpbiBbXSkgQXJyYXkoMSlbS0VZXShmdW5jdGlvbiAoKSB7IGZvcmNlZCA9IGZhbHNlOyB9KTtcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogZm9yY2VkLCAnQXJyYXknLCB7XG4gIGZpbmQ6IGZ1bmN0aW9uIGZpbmQoY2FsbGJhY2tmbiAvKiAsIHRoYXQgPSB1bmRlZmluZWQgKi8pIHtcbiAgICByZXR1cm4gJGZpbmQodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbnJlcXVpcmUoJy4vX2FkZC10by11bnNjb3BhYmxlcycpKEtFWSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDApO1xudmFyIFNUUklDVCA9IHJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5mb3JFYWNoLCB0cnVlKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAhU1RSSUNULCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMCAvIDE1LjQuNC4xOCBBcnJheS5wcm90b3R5cGUuZm9yRWFjaChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBmb3JFYWNoOiBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGN0eCA9IHJlcXVpcmUoJy4vX2N0eCcpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuL19pdGVyLWNhbGwnKTtcbnZhciBpc0FycmF5SXRlciA9IHJlcXVpcmUoJy4vX2lzLWFycmF5LWl0ZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlckZuID0gcmVxdWlyZSgnLi9jb3JlLmdldC1pdGVyYXRvci1tZXRob2QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikgeyBBcnJheS5mcm9tKGl0ZXIpOyB9KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMSBBcnJheS5mcm9tKGFycmF5TGlrZSwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQpXG4gIGZyb206IGZ1bmN0aW9uIGZyb20oYXJyYXlMaWtlIC8qICwgbWFwZm4gPSB1bmRlZmluZWQsIHRoaXNBcmcgPSB1bmRlZmluZWQgKi8pIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KGFycmF5TGlrZSk7XG4gICAgdmFyIEMgPSB0eXBlb2YgdGhpcyA9PSAnZnVuY3Rpb24nID8gdGhpcyA6IEFycmF5O1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgbWFwZm4gPSBhTGVuID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbWFwcGluZyA9IG1hcGZuICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXRlckZuID0gZ2V0SXRlckZuKE8pO1xuICAgIHZhciBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3I7XG4gICAgaWYgKG1hcHBpbmcpIG1hcGZuID0gY3R4KG1hcGZuLCBhTGVuID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCwgMik7XG4gICAgLy8gaWYgb2JqZWN0IGlzbid0IGl0ZXJhYmxlIG9yIGl0J3MgYXJyYXkgd2l0aCBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIHNpbXBsZSBjYXNlXG4gICAgaWYgKGl0ZXJGbiAhPSB1bmRlZmluZWQgJiYgIShDID09IEFycmF5ICYmIGlzQXJyYXlJdGVyKGl0ZXJGbikpKSB7XG4gICAgICBmb3IgKGl0ZXJhdG9yID0gaXRlckZuLmNhbGwoTyksIHJlc3VsdCA9IG5ldyBDKCk7ICEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZTsgaW5kZXgrKykge1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCBtYXBwaW5nID8gY2FsbChpdGVyYXRvciwgbWFwZm4sIFtzdGVwLnZhbHVlLCBpbmRleF0sIHRydWUpIDogc3RlcC52YWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKTtcbiAgICAgIGZvciAocmVzdWx0ID0gbmV3IEMobGVuZ3RoKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgbWFwcGluZyA/IG1hcGZuKE9baW5kZXhdLCBpbmRleCkgOiBPW2luZGV4XSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKTtcbnZhciAkbmF0aXZlID0gW10uaW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0uaW5kZXhPZigxLCAtMCkgPCAwO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIChORUdBVElWRV9aRVJPIHx8ICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoJG5hdGl2ZSkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xMSAvIDE1LjQuNC4xNCBBcnJheS5wcm90b3R5cGUuaW5kZXhPZihzZWFyY2hFbGVtZW50IFssIGZyb21JbmRleF0pXG4gIGluZGV4T2Y6IGZ1bmN0aW9uIGluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IDAgKi8pIHtcbiAgICByZXR1cm4gTkVHQVRJVkVfWkVST1xuICAgICAgLy8gY29udmVydCAtMCB0byArMFxuICAgICAgPyAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMFxuICAgICAgOiAkaW5kZXhPZih0aGlzLCBzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV0pO1xuICB9XG59KTtcbiIsIi8vIDIyLjEuMi4yIC8gMTUuNC4zLjIgQXJyYXkuaXNBcnJheShhcmcpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0FycmF5JywgeyBpc0FycmF5OiByZXF1aXJlKCcuL19pcy1hcnJheScpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBzdGVwID0gcmVxdWlyZSgnLi9faXRlci1zdGVwJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xuXG4vLyAyMi4xLjMuNCBBcnJheS5wcm90b3R5cGUuZW50cmllcygpXG4vLyAyMi4xLjMuMTMgQXJyYXkucHJvdG90eXBlLmtleXMoKVxuLy8gMjIuMS4zLjI5IEFycmF5LnByb3RvdHlwZS52YWx1ZXMoKVxuLy8gMjIuMS4zLjMwIEFycmF5LnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vX2l0ZXItZGVmaW5lJykoQXJyYXksICdBcnJheScsIGZ1bmN0aW9uIChpdGVyYXRlZCwga2luZCkge1xuICB0aGlzLl90ID0gdG9JT2JqZWN0KGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gIHRoaXMuX2sgPSBraW5kOyAgICAgICAgICAgICAgICAvLyBraW5kXG4vLyAyMi4xLjUuMi4xICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0KClcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIE8gPSB0aGlzLl90O1xuICB2YXIga2luZCA9IHRoaXMuX2s7XG4gIHZhciBpbmRleCA9IHRoaXMuX2krKztcbiAgaWYgKCFPIHx8IGluZGV4ID49IE8ubGVuZ3RoKSB7XG4gICAgdGhpcy5fdCA9IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc3RlcCgxKTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiBzdGVwKDAsIGluZGV4KTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiBzdGVwKDAsIE9baW5kZXhdKTtcbiAgcmV0dXJuIHN0ZXAoMCwgW2luZGV4LCBPW2luZGV4XV0pO1xufSwgJ3ZhbHVlcycpO1xuXG4vLyBhcmd1bWVudHNMaXN0W0BAaXRlcmF0b3JdIGlzICVBcnJheVByb3RvX3ZhbHVlcyUgKDkuNC40LjYsIDkuNC40LjcpXG5JdGVyYXRvcnMuQXJndW1lbnRzID0gSXRlcmF0b3JzLkFycmF5O1xuXG5hZGRUb1Vuc2NvcGFibGVzKCdrZXlzJyk7XG5hZGRUb1Vuc2NvcGFibGVzKCd2YWx1ZXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ2VudHJpZXMnKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIyLjEuMy4xMyBBcnJheS5wcm90b3R5cGUuam9pbihzZXBhcmF0b3IpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciBhcnJheUpvaW4gPSBbXS5qb2luO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2Ugc3RyaW5nc1xuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAocmVxdWlyZSgnLi9faW9iamVjdCcpICE9IE9iamVjdCB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKGFycmF5Sm9pbikpLCAnQXJyYXknLCB7XG4gIGpvaW46IGZ1bmN0aW9uIGpvaW4oc2VwYXJhdG9yKSB7XG4gICAgcmV0dXJuIGFycmF5Sm9pbi5jYWxsKHRvSU9iamVjdCh0aGlzKSwgc2VwYXJhdG9yID09PSB1bmRlZmluZWQgPyAnLCcgOiBzZXBhcmF0b3IpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyICRuYXRpdmUgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbmF0aXZlICYmIDEgLyBbMV0ubGFzdEluZGV4T2YoMSwgLTApIDwgMDtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoTkVHQVRJVkVfWkVSTyB8fCAhcmVxdWlyZSgnLi9fc3RyaWN0LW1ldGhvZCcpKCRuYXRpdmUpKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTQgLyAxNS40LjQuMTUgQXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgWywgZnJvbUluZGV4XSlcbiAgbGFzdEluZGV4T2Y6IGZ1bmN0aW9uIGxhc3RJbmRleE9mKHNlYXJjaEVsZW1lbnQgLyogLCBmcm9tSW5kZXggPSBAWyotMV0gKi8pIHtcbiAgICAvLyBjb252ZXJ0IC0wIHRvICswXG4gICAgaWYgKE5FR0FUSVZFX1pFUk8pIHJldHVybiAkbmF0aXZlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgMDtcbiAgICB2YXIgTyA9IHRvSU9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSBpbmRleCA9IE1hdGgubWluKGluZGV4LCB0b0ludGVnZXIoYXJndW1lbnRzWzFdKSk7XG4gICAgaWYgKGluZGV4IDwgMCkgaW5kZXggPSBsZW5ndGggKyBpbmRleDtcbiAgICBmb3IgKDtpbmRleCA+PSAwOyBpbmRleC0tKSBpZiAoaW5kZXggaW4gTykgaWYgKE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgICByZXR1cm4gLTE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDEpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ubWFwLCB0cnVlKSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjMuMTUgLyAxNS40LjQuMTkgQXJyYXkucHJvdG90eXBlLm1hcChjYWxsYmFja2ZuIFssIHRoaXNBcmddKVxuICBtYXA6IGZ1bmN0aW9uIG1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHJldHVybiAkbWFwKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2NyZWF0ZS1wcm9wZXJ0eScpO1xuXG4vLyBXZWJLaXQgQXJyYXkub2YgaXNuJ3QgZ2VuZXJpY1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShBcnJheS5vZi5jYWxsKEYpIGluc3RhbmNlb2YgRik7XG59KSwgJ0FycmF5Jywge1xuICAvLyAyMi4xLjIuMyBBcnJheS5vZiggLi4uaXRlbXMpXG4gIG9mOiBmdW5jdGlvbiBvZigvKiAuLi5hcmdzICovKSB7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyAodHlwZW9mIHRoaXMgPT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiBBcnJheSkoYUxlbik7XG4gICAgd2hpbGUgKGFMZW4gPiBpbmRleCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBpbmRleCwgYXJndW1lbnRzW2luZGV4KytdKTtcbiAgICByZXN1bHQubGVuZ3RoID0gYUxlbjtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHJlZHVjZSA9IHJlcXVpcmUoJy4vX2FycmF5LXJlZHVjZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10ucmVkdWNlUmlnaHQsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOSAvIDE1LjQuNC4yMiBBcnJheS5wcm90b3R5cGUucmVkdWNlUmlnaHQoY2FsbGJhY2tmbiBbLCBpbml0aWFsVmFsdWVdKVxuICByZWR1Y2VSaWdodDogZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgdHJ1ZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcmVkdWNlID0gcmVxdWlyZSgnLi9fYXJyYXktcmVkdWNlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKShbXS5yZWR1Y2UsIHRydWUpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4xOCAvIDE1LjQuNC4yMSBBcnJheS5wcm90b3R5cGUucmVkdWNlKGNhbGxiYWNrZm4gWywgaW5pdGlhbFZhbHVlXSlcbiAgcmVkdWNlOiBmdW5jdGlvbiByZWR1Y2UoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICAgIHJldHVybiAkcmVkdWNlKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3VtZW50c1sxXSwgZmFsc2UpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4vX2h0bWwnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuL190by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgYXJyYXlTbGljZSA9IFtdLnNsaWNlO1xuXG4vLyBmYWxsYmFjayBmb3Igbm90IGFycmF5LWxpa2UgRVMzIHN0cmluZ3MgYW5kIERPTSBvYmplY3RzXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICBpZiAoaHRtbCkgYXJyYXlTbGljZS5jYWxsKGh0bWwpO1xufSksICdBcnJheScsIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKGJlZ2luLCBlbmQpIHtcbiAgICB2YXIgbGVuID0gdG9MZW5ndGgodGhpcy5sZW5ndGgpO1xuICAgIHZhciBrbGFzcyA9IGNvZih0aGlzKTtcbiAgICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZDtcbiAgICBpZiAoa2xhc3MgPT0gJ0FycmF5JykgcmV0dXJuIGFycmF5U2xpY2UuY2FsbCh0aGlzLCBiZWdpbiwgZW5kKTtcbiAgICB2YXIgc3RhcnQgPSB0b0Fic29sdXRlSW5kZXgoYmVnaW4sIGxlbik7XG4gICAgdmFyIHVwVG8gPSB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pO1xuICAgIHZhciBzaXplID0gdG9MZW5ndGgodXBUbyAtIHN0YXJ0KTtcbiAgICB2YXIgY2xvbmVkID0gbmV3IEFycmF5KHNpemUpO1xuICAgIHZhciBpID0gMDtcbiAgICBmb3IgKDsgaSA8IHNpemU7IGkrKykgY2xvbmVkW2ldID0ga2xhc3MgPT0gJ1N0cmluZydcbiAgICAgID8gdGhpcy5jaGFyQXQoc3RhcnQgKyBpKVxuICAgICAgOiB0aGlzW3N0YXJ0ICsgaV07XG4gICAgcmV0dXJuIGNsb25lZDtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRzb21lID0gcmVxdWlyZSgnLi9fYXJyYXktbWV0aG9kcycpKDMpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19zdHJpY3QtbWV0aG9kJykoW10uc29tZSwgdHJ1ZSksICdBcnJheScsIHtcbiAgLy8gMjIuMS4zLjIzIC8gMTUuNC40LjE3IEFycmF5LnByb3RvdHlwZS5zb21lKGNhbGxiYWNrZm4gWywgdGhpc0FyZ10pXG4gIHNvbWU6IGZ1bmN0aW9uIHNvbWUoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJHNvbWUodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzWzFdKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciAkc29ydCA9IFtdLnNvcnQ7XG52YXIgdGVzdCA9IFsxLCAyLCAzXTtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBJRTgtXG4gIHRlc3Quc29ydCh1bmRlZmluZWQpO1xufSkgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gVjggYnVnXG4gIHRlc3Quc29ydChudWxsKTtcbiAgLy8gT2xkIFdlYktpdFxufSkgfHwgIXJlcXVpcmUoJy4vX3N0cmljdC1tZXRob2QnKSgkc29ydCkpLCAnQXJyYXknLCB7XG4gIC8vIDIyLjEuMy4yNSBBcnJheS5wcm90b3R5cGUuc29ydChjb21wYXJlZm4pXG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gICAgcmV0dXJuIGNvbXBhcmVmbiA9PT0gdW5kZWZpbmVkXG4gICAgICA/ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcykpXG4gICAgICA6ICRzb3J0LmNhbGwodG9PYmplY3QodGhpcyksIGFGdW5jdGlvbihjb21wYXJlZm4pKTtcbiAgfVxufSk7XG4iLCJyZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdBcnJheScpO1xuIiwiLy8gMjAuMy4zLjEgLyAxNS45LjQuNCBEYXRlLm5vdygpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ0RhdGUnLCB7IG5vdzogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IERhdGUoKS5nZXRUaW1lKCk7IH0gfSk7XG4iLCIvLyAyMC4zLjQuMzYgLyAxNS45LjUuNDMgRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcoKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0lTT1N0cmluZyA9IHJlcXVpcmUoJy4vX2RhdGUtdG8taXNvLXN0cmluZycpO1xuXG4vLyBQaGFudG9tSlMgLyBvbGQgV2ViS2l0IGhhcyBhIGJyb2tlbiBpbXBsZW1lbnRhdGlvbnNcbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nICE9PSB0b0lTT1N0cmluZyksICdEYXRlJywge1xuICB0b0lTT1N0cmluZzogdG9JU09TdHJpbmdcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgRGF0ZShOYU4pLnRvSlNPTigpICE9PSBudWxsXG4gICAgfHwgRGF0ZS5wcm90b3R5cGUudG9KU09OLmNhbGwoeyB0b0lTT1N0cmluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gMTsgfSB9KSAhPT0gMTtcbn0pLCAnRGF0ZScsIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIHRvSlNPTjogZnVuY3Rpb24gdG9KU09OKGtleSkge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHB2ID0gdG9QcmltaXRpdmUoTyk7XG4gICAgcmV0dXJuIHR5cGVvZiBwdiA9PSAnbnVtYmVyJyAmJiAhaXNGaW5pdGUocHYpID8gbnVsbCA6IE8udG9JU09TdHJpbmcoKTtcbiAgfVxufSk7XG4iLCJ2YXIgVE9fUFJJTUlUSVZFID0gcmVxdWlyZSgnLi9fd2tzJykoJ3RvUHJpbWl0aXZlJyk7XG52YXIgcHJvdG8gPSBEYXRlLnByb3RvdHlwZTtcblxuaWYgKCEoVE9fUFJJTUlUSVZFIGluIHByb3RvKSkgcmVxdWlyZSgnLi9faGlkZScpKHByb3RvLCBUT19QUklNSVRJVkUsIHJlcXVpcmUoJy4vX2RhdGUtdG8tcHJpbWl0aXZlJykpO1xuIiwidmFyIERhdGVQcm90byA9IERhdGUucHJvdG90eXBlO1xudmFyIElOVkFMSURfREFURSA9ICdJbnZhbGlkIERhdGUnO1xudmFyIFRPX1NUUklORyA9ICd0b1N0cmluZyc7XG52YXIgJHRvU3RyaW5nID0gRGF0ZVByb3RvW1RPX1NUUklOR107XG52YXIgZ2V0VGltZSA9IERhdGVQcm90by5nZXRUaW1lO1xuaWYgKG5ldyBEYXRlKE5hTikgKyAnJyAhPSBJTlZBTElEX0RBVEUpIHtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShEYXRlUHJvdG8sIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIHZhbHVlID0gZ2V0VGltZS5jYWxsKHRoaXMpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gdmFsdWUgPT09IHZhbHVlID8gJHRvU3RyaW5nLmNhbGwodGhpcykgOiBJTlZBTElEX0RBVEU7XG4gIH0pO1xufVxuIiwiLy8gMTkuMi4zLjIgLyAxNS4zLjQuNSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCh0aGlzQXJnLCBhcmdzLi4uKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdGdW5jdGlvbicsIHsgYmluZDogcmVxdWlyZSgnLi9fYmluZCcpIH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgSEFTX0lOU1RBTkNFID0gcmVxdWlyZSgnLi9fd2tzJykoJ2hhc0luc3RhbmNlJyk7XG52YXIgRnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIDE5LjIuMy42IEZ1bmN0aW9uLnByb3RvdHlwZVtAQGhhc0luc3RhbmNlXShWKVxuaWYgKCEoSEFTX0lOU1RBTkNFIGluIEZ1bmN0aW9uUHJvdG8pKSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mKEZ1bmN0aW9uUHJvdG8sIEhBU19JTlNUQU5DRSwgeyB2YWx1ZTogZnVuY3Rpb24gKE8pIHtcbiAgaWYgKHR5cGVvZiB0aGlzICE9ICdmdW5jdGlvbicgfHwgIWlzT2JqZWN0KE8pKSByZXR1cm4gZmFsc2U7XG4gIGlmICghaXNPYmplY3QodGhpcy5wcm90b3R5cGUpKSByZXR1cm4gTyBpbnN0YW5jZW9mIHRoaXM7XG4gIC8vIGZvciBlbnZpcm9ubWVudCB3L28gbmF0aXZlIGBAQGhhc0luc3RhbmNlYCBsb2dpYyBlbm91Z2ggYGluc3RhbmNlb2ZgLCBidXQgYWRkIHRoaXM6XG4gIHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpIGlmICh0aGlzLnByb3RvdHlwZSA9PT0gTykgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn0gfSk7XG4iLCJ2YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKS5mO1xudmFyIEZQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBuYW1lUkUgPSAvXlxccypmdW5jdGlvbiAoW14gKF0qKS87XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gMTkuMi40LjIgbmFtZVxuTkFNRSBpbiBGUHJvdG8gfHwgcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiBkUChGUHJvdG8sIE5BTUUsIHtcbiAgY29uZmlndXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICgnJyArIHRoaXMpLm1hdGNoKG5hbWVSRSlbMV07XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgc3Ryb25nID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbi1zdHJvbmcnKTtcbnZhciB2YWxpZGF0ZSA9IHJlcXVpcmUoJy4vX3ZhbGlkYXRlLWNvbGxlY3Rpb24nKTtcbnZhciBNQVAgPSAnTWFwJztcblxuLy8gMjMuMSBNYXAgT2JqZWN0c1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19jb2xsZWN0aW9uJykoTUFQLCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBNYXAoKSB7IHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpOyB9O1xufSwge1xuICAvLyAyMy4xLjMuNiBNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIHZhciBlbnRyeSA9IHN0cm9uZy5nZXRFbnRyeSh2YWxpZGF0ZSh0aGlzLCBNQVApLCBrZXkpO1xuICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS52O1xuICB9LFxuICAvLyAyMy4xLjMuOSBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKVxuICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgTUFQKSwga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcsIHRydWUpO1xuIiwiLy8gMjAuMi4yLjMgTWF0aC5hY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBsb2cxcCA9IHJlcXVpcmUoJy4vX21hdGgtbG9nMXAnKTtcbnZhciBzcXJ0ID0gTWF0aC5zcXJ0O1xudmFyICRhY29zaCA9IE1hdGguYWNvc2g7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogISgkYWNvc2hcbiAgLy8gVjggYnVnOiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzUwOVxuICAmJiBNYXRoLmZsb29yKCRhY29zaChOdW1iZXIuTUFYX1ZBTFVFKSkgPT0gNzEwXG4gIC8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hY29zaChJbmZpbml0eSkgLT4gTmFOXG4gICYmICRhY29zaChJbmZpbml0eSkgPT0gSW5maW5pdHlcbiksICdNYXRoJywge1xuICBhY29zaDogZnVuY3Rpb24gYWNvc2goeCkge1xuICAgIHJldHVybiAoeCA9ICt4KSA8IDEgPyBOYU4gOiB4ID4gOTQ5MDYyNjUuNjI0MjUxNTZcbiAgICAgID8gTWF0aC5sb2coeCkgKyBNYXRoLkxOMlxuICAgICAgOiBsb2cxcCh4IC0gMSArIHNxcnQoeCAtIDEpICogc3FydCh4ICsgMSkpO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi41IE1hdGguYXNpbmgoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGFzaW5oID0gTWF0aC5hc2luaDtcblxuZnVuY3Rpb24gYXNpbmgoeCkge1xuICByZXR1cm4gIWlzRmluaXRlKHggPSAreCkgfHwgeCA9PSAwID8geCA6IHggPCAwID8gLWFzaW5oKC14KSA6IE1hdGgubG9nKHggKyBNYXRoLnNxcnQoeCAqIHggKyAxKSk7XG59XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hc2luaCgwKSAtPiAtMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhc2luaCAmJiAxIC8gJGFzaW5oKDApID4gMCksICdNYXRoJywgeyBhc2luaDogYXNpbmggfSk7XG4iLCIvLyAyMC4yLjIuNyBNYXRoLmF0YW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdGFuaCA9IE1hdGguYXRhbmg7XG5cbi8vIFRvciBCcm93c2VyIGJ1ZzogTWF0aC5hdGFuaCgtMCkgLT4gMFxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKCRhdGFuaCAmJiAxIC8gJGF0YW5oKC0wKSA8IDApLCAnTWF0aCcsIHtcbiAgYXRhbmg6IGZ1bmN0aW9uIGF0YW5oKHgpIHtcbiAgICByZXR1cm4gKHggPSAreCkgPT0gMCA/IHggOiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi45IE1hdGguY2JydCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBzaWduID0gcmVxdWlyZSgnLi9fbWF0aC1zaWduJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2JydDogZnVuY3Rpb24gY2JydCh4KSB7XG4gICAgcmV0dXJuIHNpZ24oeCA9ICt4KSAqIE1hdGgucG93KE1hdGguYWJzKHgpLCAxIC8gMyk7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjExIE1hdGguY2x6MzIoeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2x6MzI6IGZ1bmN0aW9uIGNsejMyKHgpIHtcbiAgICByZXR1cm4gKHggPj4+PSAwKSA/IDMxIC0gTWF0aC5mbG9vcihNYXRoLmxvZyh4ICsgMC41KSAqIE1hdGguTE9HMkUpIDogMzI7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjEyIE1hdGguY29zaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBjb3NoOiBmdW5jdGlvbiBjb3NoKHgpIHtcbiAgICByZXR1cm4gKGV4cCh4ID0gK3gpICsgZXhwKC14KSkgLyAyO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xNCBNYXRoLmV4cG0xKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoJGV4cG0xICE9IE1hdGguZXhwbTEpLCAnTWF0aCcsIHsgZXhwbTE6ICRleHBtMSB9KTtcbiIsIi8vIDIwLjIuMi4xNiBNYXRoLmZyb3VuZCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBmcm91bmQ6IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJykgfSk7XG4iLCIvLyAyMC4yLjIuMTcgTWF0aC5oeXBvdChbdmFsdWUxWywgdmFsdWUyWywg4oCmIF1dXSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYWJzID0gTWF0aC5hYnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgaHlwb3Q6IGZ1bmN0aW9uIGh5cG90KHZhbHVlMSwgdmFsdWUyKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGFMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgIHZhciBsYXJnID0gMDtcbiAgICB2YXIgYXJnLCBkaXY7XG4gICAgd2hpbGUgKGkgPCBhTGVuKSB7XG4gICAgICBhcmcgPSBhYnMoYXJndW1lbnRzW2krK10pO1xuICAgICAgaWYgKGxhcmcgPCBhcmcpIHtcbiAgICAgICAgZGl2ID0gbGFyZyAvIGFyZztcbiAgICAgICAgc3VtID0gc3VtICogZGl2ICogZGl2ICsgMTtcbiAgICAgICAgbGFyZyA9IGFyZztcbiAgICAgIH0gZWxzZSBpZiAoYXJnID4gMCkge1xuICAgICAgICBkaXYgPSBhcmcgLyBsYXJnO1xuICAgICAgICBzdW0gKz0gZGl2ICogZGl2O1xuICAgICAgfSBlbHNlIHN1bSArPSBhcmc7XG4gICAgfVxuICAgIHJldHVybiBsYXJnID09PSBJbmZpbml0eSA/IEluZmluaXR5IDogbGFyZyAqIE1hdGguc3FydChzdW0pO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4xOCBNYXRoLmltdWwoeCwgeSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGltdWwgPSBNYXRoLmltdWw7XG5cbi8vIHNvbWUgV2ViS2l0IHZlcnNpb25zIGZhaWxzIHdpdGggYmlnIG51bWJlcnMsIHNvbWUgaGFzIHdyb25nIGFyaXR5XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJGltdWwoMHhmZmZmZmZmZiwgNSkgIT0gLTUgfHwgJGltdWwubGVuZ3RoICE9IDI7XG59KSwgJ01hdGgnLCB7XG4gIGltdWw6IGZ1bmN0aW9uIGltdWwoeCwgeSkge1xuICAgIHZhciBVSU5UMTYgPSAweGZmZmY7XG4gICAgdmFyIHhuID0gK3g7XG4gICAgdmFyIHluID0gK3k7XG4gICAgdmFyIHhsID0gVUlOVDE2ICYgeG47XG4gICAgdmFyIHlsID0gVUlOVDE2ICYgeW47XG4gICAgcmV0dXJuIDAgfCB4bCAqIHlsICsgKChVSU5UMTYgJiB4biA+Pj4gMTYpICogeWwgKyB4bCAqIChVSU5UMTYgJiB5biA+Pj4gMTYpIDw8IDE2ID4+PiAwKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMjEgTWF0aC5sb2cxMCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBsb2cxMDogZnVuY3Rpb24gbG9nMTAoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAqIE1hdGguTE9HMTBFO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yMCBNYXRoLmxvZzFwKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IGxvZzFwOiByZXF1aXJlKCcuL19tYXRoLWxvZzFwJykgfSk7XG4iLCIvLyAyMC4yLjIuMjIgTWF0aC5sb2cyKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGxvZzI6IGZ1bmN0aW9uIGxvZzIoeCkge1xuICAgIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xuICB9XG59KTtcbiIsIi8vIDIwLjIuMi4yOCBNYXRoLnNpZ24oeClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHsgc2lnbjogcmVxdWlyZSgnLi9fbWF0aC1zaWduJykgfSk7XG4iLCIvLyAyMC4yLjIuMzAgTWF0aC5zaW5oKHgpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGV4cG0xID0gcmVxdWlyZSgnLi9fbWF0aC1leHBtMScpO1xudmFyIGV4cCA9IE1hdGguZXhwO1xuXG4vLyBWOCBuZWFyIENocm9taXVtIDM4IGhhcyBhIHByb2JsZW0gd2l0aCB2ZXJ5IHNtYWxsIG51bWJlcnNcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhTWF0aC5zaW5oKC0yZS0xNykgIT0gLTJlLTE3O1xufSksICdNYXRoJywge1xuICBzaW5oOiBmdW5jdGlvbiBzaW5oKHgpIHtcbiAgICByZXR1cm4gTWF0aC5hYnMoeCA9ICt4KSA8IDFcbiAgICAgID8gKGV4cG0xKHgpIC0gZXhwbTEoLXgpKSAvIDJcbiAgICAgIDogKGV4cCh4IC0gMSkgLSBleHAoLXggLSAxKSkgKiAoTWF0aC5FIC8gMik7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMi4yLjMzIE1hdGgudGFuaCh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBleHBtMSA9IHJlcXVpcmUoJy4vX21hdGgtZXhwbTEnKTtcbnZhciBleHAgPSBNYXRoLmV4cDtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0YW5oOiBmdW5jdGlvbiB0YW5oKHgpIHtcbiAgICB2YXIgYSA9IGV4cG0xKHggPSAreCk7XG4gICAgdmFyIGIgPSBleHBtMSgteCk7XG4gICAgcmV0dXJuIGEgPT0gSW5maW5pdHkgPyAxIDogYiA9PSBJbmZpbml0eSA/IC0xIDogKGEgLSBiKSAvIChleHAoeCkgKyBleHAoLXgpKTtcbiAgfVxufSk7XG4iLCIvLyAyMC4yLjIuMzQgTWF0aC50cnVuYyh4KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICB0cnVuYzogZnVuY3Rpb24gdHJ1bmMoaXQpIHtcbiAgICByZXR1cm4gKGl0ID4gMCA/IE1hdGguZmxvb3IgOiBNYXRoLmNlaWwpKGl0KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9faGFzJyk7XG52YXIgY29mID0gcmVxdWlyZSgnLi9fY29mJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuL19pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL190by1wcmltaXRpdmUnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKS5mO1xudmFyIGRQID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZjtcbnZhciAkdHJpbSA9IHJlcXVpcmUoJy4vX3N0cmluZy10cmltJykudHJpbTtcbnZhciBOVU1CRVIgPSAnTnVtYmVyJztcbnZhciAkTnVtYmVyID0gZ2xvYmFsW05VTUJFUl07XG52YXIgQmFzZSA9ICROdW1iZXI7XG52YXIgcHJvdG8gPSAkTnVtYmVyLnByb3RvdHlwZTtcbi8vIE9wZXJhIH4xMiBoYXMgYnJva2VuIE9iamVjdCN0b1N0cmluZ1xudmFyIEJST0tFTl9DT0YgPSBjb2YocmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpKHByb3RvKSkgPT0gTlVNQkVSO1xudmFyIFRSSU0gPSAndHJpbScgaW4gU3RyaW5nLnByb3RvdHlwZTtcblxuLy8gNy4xLjMgVG9OdW1iZXIoYXJndW1lbnQpXG52YXIgdG9OdW1iZXIgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGl0ID0gdG9QcmltaXRpdmUoYXJndW1lbnQsIGZhbHNlKTtcbiAgaWYgKHR5cGVvZiBpdCA9PSAnc3RyaW5nJyAmJiBpdC5sZW5ndGggPiAyKSB7XG4gICAgaXQgPSBUUklNID8gaXQudHJpbSgpIDogJHRyaW0oaXQsIDMpO1xuICAgIHZhciBmaXJzdCA9IGl0LmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHRoaXJkLCByYWRpeCwgbWF4Q29kZTtcbiAgICBpZiAoZmlyc3QgPT09IDQzIHx8IGZpcnN0ID09PSA0NSkge1xuICAgICAgdGhpcmQgPSBpdC5jaGFyQ29kZUF0KDIpO1xuICAgICAgaWYgKHRoaXJkID09PSA4OCB8fCB0aGlyZCA9PT0gMTIwKSByZXR1cm4gTmFOOyAvLyBOdW1iZXIoJysweDEnKSBzaG91bGQgYmUgTmFOLCBvbGQgVjggZml4XG4gICAgfSBlbHNlIGlmIChmaXJzdCA9PT0gNDgpIHtcbiAgICAgIHN3aXRjaCAoaXQuY2hhckNvZGVBdCgxKSkge1xuICAgICAgICBjYXNlIDY2OiBjYXNlIDk4OiByYWRpeCA9IDI7IG1heENvZGUgPSA0OTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wYlswMV0rJC9pXG4gICAgICAgIGNhc2UgNzk6IGNhc2UgMTExOiByYWRpeCA9IDg7IG1heENvZGUgPSA1NTsgYnJlYWs7IC8vIGZhc3QgZXF1YWwgL14wb1swLTddKyQvaVxuICAgICAgICBkZWZhdWx0OiByZXR1cm4gK2l0O1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgZGlnaXRzID0gaXQuc2xpY2UoMiksIGkgPSAwLCBsID0gZGlnaXRzLmxlbmd0aCwgY29kZTsgaSA8IGw7IGkrKykge1xuICAgICAgICBjb2RlID0gZGlnaXRzLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIC8vIHBhcnNlSW50IHBhcnNlcyBhIHN0cmluZyB0byBhIGZpcnN0IHVuYXZhaWxhYmxlIHN5bWJvbFxuICAgICAgICAvLyBidXQgVG9OdW1iZXIgc2hvdWxkIHJldHVybiBOYU4gaWYgYSBzdHJpbmcgY29udGFpbnMgdW5hdmFpbGFibGUgc3ltYm9sc1xuICAgICAgICBpZiAoY29kZSA8IDQ4IHx8IGNvZGUgPiBtYXhDb2RlKSByZXR1cm4gTmFOO1xuICAgICAgfSByZXR1cm4gcGFyc2VJbnQoZGlnaXRzLCByYWRpeCk7XG4gICAgfVxuICB9IHJldHVybiAraXQ7XG59O1xuXG5pZiAoISROdW1iZXIoJyAwbzEnKSB8fCAhJE51bWJlcignMGIxJykgfHwgJE51bWJlcignKzB4MScpKSB7XG4gICROdW1iZXIgPSBmdW5jdGlvbiBOdW1iZXIodmFsdWUpIHtcbiAgICB2YXIgaXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMSA/IDAgOiB2YWx1ZTtcbiAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgcmV0dXJuIHRoYXQgaW5zdGFuY2VvZiAkTnVtYmVyXG4gICAgICAvLyBjaGVjayBvbiAxLi5jb25zdHJ1Y3Rvcihmb28pIGNhc2VcbiAgICAgICYmIChCUk9LRU5fQ09GID8gZmFpbHMoZnVuY3Rpb24gKCkgeyBwcm90by52YWx1ZU9mLmNhbGwodGhhdCk7IH0pIDogY29mKHRoYXQpICE9IE5VTUJFUilcbiAgICAgICAgPyBpbmhlcml0SWZSZXF1aXJlZChuZXcgQmFzZSh0b051bWJlcihpdCkpLCB0aGF0LCAkTnVtYmVyKSA6IHRvTnVtYmVyKGl0KTtcbiAgfTtcbiAgZm9yICh2YXIga2V5cyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgPyBnT1BOKEJhc2UpIDogKFxuICAgIC8vIEVTMzpcbiAgICAnTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksJyArXG4gICAgLy8gRVM2IChpbiBjYXNlLCBpZiBtb2R1bGVzIHdpdGggRVM2IE51bWJlciBzdGF0aWNzIHJlcXVpcmVkIGJlZm9yZSk6XG4gICAgJ0VQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUiwnICtcbiAgICAnTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlcidcbiAgKS5zcGxpdCgnLCcpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7IGorKykge1xuICAgIGlmIChoYXMoQmFzZSwga2V5ID0ga2V5c1tqXSkgJiYgIWhhcygkTnVtYmVyLCBrZXkpKSB7XG4gICAgICBkUCgkTnVtYmVyLCBrZXksIGdPUEQoQmFzZSwga2V5KSk7XG4gICAgfVxuICB9XG4gICROdW1iZXIucHJvdG90eXBlID0gcHJvdG87XG4gIHByb3RvLmNvbnN0cnVjdG9yID0gJE51bWJlcjtcbiAgcmVxdWlyZSgnLi9fcmVkZWZpbmUnKShnbG9iYWwsIE5VTUJFUiwgJE51bWJlcik7XG59XG4iLCIvLyAyMC4xLjIuMSBOdW1iZXIuRVBTSUxPTlxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7IEVQU0lMT046IE1hdGgucG93KDIsIC01MikgfSk7XG4iLCIvLyAyMC4xLjIuMiBOdW1iZXIuaXNGaW5pdGUobnVtYmVyKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBfaXNGaW5pdGUgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5pc0Zpbml0ZTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzRmluaXRlOiBmdW5jdGlvbiBpc0Zpbml0ZShpdCkge1xuICAgIHJldHVybiB0eXBlb2YgaXQgPT0gJ251bWJlcicgJiYgX2lzRmluaXRlKGl0KTtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuMyBOdW1iZXIuaXNJbnRlZ2VyKG51bWJlcilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBpc0ludGVnZXI6IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKSB9KTtcbiIsIi8vIDIwLjEuMi40IE51bWJlci5pc05hTihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHtcbiAgaXNOYU46IGZ1bmN0aW9uIGlzTmFOKG51bWJlcikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmVcbiAgICByZXR1cm4gbnVtYmVyICE9IG51bWJlcjtcbiAgfVxufSk7XG4iLCIvLyAyMC4xLjIuNSBOdW1iZXIuaXNTYWZlSW50ZWdlcihudW1iZXIpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGlzSW50ZWdlciA9IHJlcXVpcmUoJy4vX2lzLWludGVnZXInKTtcbnZhciBhYnMgPSBNYXRoLmFicztcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdOdW1iZXInLCB7XG4gIGlzU2FmZUludGVnZXI6IGZ1bmN0aW9uIGlzU2FmZUludGVnZXIobnVtYmVyKSB7XG4gICAgcmV0dXJuIGlzSW50ZWdlcihudW1iZXIpICYmIGFicyhudW1iZXIpIDw9IDB4MWZmZmZmZmZmZmZmZmY7XG4gIH1cbn0pO1xuIiwiLy8gMjAuMS4yLjYgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTnVtYmVyJywgeyBNQVhfU0FGRV9JTlRFR0VSOiAweDFmZmZmZmZmZmZmZmZmIH0pO1xuIiwiLy8gMjAuMS4yLjEwIE51bWJlci5NSU5fU0FGRV9JTlRFR0VSXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ051bWJlcicsIHsgTUlOX1NBRkVfSU5URUdFUjogLTB4MWZmZmZmZmZmZmZmZmYgfSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDIwLjEuMi4xMiBOdW1iZXIucGFyc2VGbG9hdChzdHJpbmcpXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChOdW1iZXIucGFyc2VGbG9hdCAhPSAkcGFyc2VGbG9hdCksICdOdW1iZXInLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDIwLjEuMi4xMyBOdW1iZXIucGFyc2VJbnQoc3RyaW5nLCByYWRpeClcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE51bWJlci5wYXJzZUludCAhPSAkcGFyc2VJbnQpLCAnTnVtYmVyJywgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYU51bWJlclZhbHVlID0gcmVxdWlyZSgnLi9fYS1udW1iZXItdmFsdWUnKTtcbnZhciByZXBlYXQgPSByZXF1aXJlKCcuL19zdHJpbmctcmVwZWF0Jyk7XG52YXIgJHRvRml4ZWQgPSAxLjAudG9GaXhlZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgZGF0YSA9IFswLCAwLCAwLCAwLCAwLCAwXTtcbnZhciBFUlJPUiA9ICdOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hJztcbnZhciBaRVJPID0gJzAnO1xuXG52YXIgbXVsdGlwbHkgPSBmdW5jdGlvbiAobiwgYykge1xuICB2YXIgaSA9IC0xO1xuICB2YXIgYzIgPSBjO1xuICB3aGlsZSAoKytpIDwgNikge1xuICAgIGMyICs9IG4gKiBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBjMiAlIDFlNztcbiAgICBjMiA9IGZsb29yKGMyIC8gMWU3KTtcbiAgfVxufTtcbnZhciBkaXZpZGUgPSBmdW5jdGlvbiAobikge1xuICB2YXIgaSA9IDY7XG4gIHZhciBjID0gMDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgYyArPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBmbG9vcihjIC8gbik7XG4gICAgYyA9IChjICUgbikgKiAxZTc7XG4gIH1cbn07XG52YXIgbnVtVG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBpID0gNjtcbiAgdmFyIHMgPSAnJztcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgaWYgKHMgIT09ICcnIHx8IGkgPT09IDAgfHwgZGF0YVtpXSAhPT0gMCkge1xuICAgICAgdmFyIHQgPSBTdHJpbmcoZGF0YVtpXSk7XG4gICAgICBzID0gcyA9PT0gJycgPyB0IDogcyArIHJlcGVhdC5jYWxsKFpFUk8sIDcgLSB0Lmxlbmd0aCkgKyB0O1xuICAgIH1cbiAgfSByZXR1cm4gcztcbn07XG52YXIgcG93ID0gZnVuY3Rpb24gKHgsIG4sIGFjYykge1xuICByZXR1cm4gbiA9PT0gMCA/IGFjYyA6IG4gJSAyID09PSAxID8gcG93KHgsIG4gLSAxLCBhY2MgKiB4KSA6IHBvdyh4ICogeCwgbiAvIDIsIGFjYyk7XG59O1xudmFyIGxvZyA9IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBuID0gMDtcbiAgdmFyIHgyID0geDtcbiAgd2hpbGUgKHgyID49IDQwOTYpIHtcbiAgICBuICs9IDEyO1xuICAgIHgyIC89IDQwOTY7XG4gIH1cbiAgd2hpbGUgKHgyID49IDIpIHtcbiAgICBuICs9IDE7XG4gICAgeDIgLz0gMjtcbiAgfSByZXR1cm4gbjtcbn07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogKCEhJHRvRml4ZWQgJiYgKFxuICAwLjAwMDA4LnRvRml4ZWQoMykgIT09ICcwLjAwMCcgfHxcbiAgMC45LnRvRml4ZWQoMCkgIT09ICcxJyB8fFxuICAxLjI1NS50b0ZpeGVkKDIpICE9PSAnMS4yNScgfHxcbiAgMTAwMDAwMDAwMDAwMDAwMDEyOC4wLnRvRml4ZWQoMCkgIT09ICcxMDAwMDAwMDAwMDAwMDAwMTI4J1xuKSB8fCAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b0ZpeGVkLmNhbGwoe30pO1xufSkpLCAnTnVtYmVyJywge1xuICB0b0ZpeGVkOiBmdW5jdGlvbiB0b0ZpeGVkKGZyYWN0aW9uRGlnaXRzKSB7XG4gICAgdmFyIHggPSBhTnVtYmVyVmFsdWUodGhpcywgRVJST1IpO1xuICAgIHZhciBmID0gdG9JbnRlZ2VyKGZyYWN0aW9uRGlnaXRzKTtcbiAgICB2YXIgcyA9ICcnO1xuICAgIHZhciBtID0gWkVSTztcbiAgICB2YXIgZSwgeiwgaiwgaztcbiAgICBpZiAoZiA8IDAgfHwgZiA+IDIwKSB0aHJvdyBSYW5nZUVycm9yKEVSUk9SKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gICAgaWYgKHggIT0geCkgcmV0dXJuICdOYU4nO1xuICAgIGlmICh4IDw9IC0xZTIxIHx8IHggPj0gMWUyMSkgcmV0dXJuIFN0cmluZyh4KTtcbiAgICBpZiAoeCA8IDApIHtcbiAgICAgIHMgPSAnLSc7XG4gICAgICB4ID0gLXg7XG4gICAgfVxuICAgIGlmICh4ID4gMWUtMjEpIHtcbiAgICAgIGUgPSBsb2coeCAqIHBvdygyLCA2OSwgMSkpIC0gNjk7XG4gICAgICB6ID0gZSA8IDAgPyB4ICogcG93KDIsIC1lLCAxKSA6IHggLyBwb3coMiwgZSwgMSk7XG4gICAgICB6ICo9IDB4MTAwMDAwMDAwMDAwMDA7XG4gICAgICBlID0gNTIgLSBlO1xuICAgICAgaWYgKGUgPiAwKSB7XG4gICAgICAgIG11bHRpcGx5KDAsIHopO1xuICAgICAgICBqID0gZjtcbiAgICAgICAgd2hpbGUgKGogPj0gNykge1xuICAgICAgICAgIG11bHRpcGx5KDFlNywgMCk7XG4gICAgICAgICAgaiAtPSA3O1xuICAgICAgICB9XG4gICAgICAgIG11bHRpcGx5KHBvdygxMCwgaiwgMSksIDApO1xuICAgICAgICBqID0gZSAtIDE7XG4gICAgICAgIHdoaWxlIChqID49IDIzKSB7XG4gICAgICAgICAgZGl2aWRlKDEgPDwgMjMpO1xuICAgICAgICAgIGogLT0gMjM7XG4gICAgICAgIH1cbiAgICAgICAgZGl2aWRlKDEgPDwgaik7XG4gICAgICAgIG11bHRpcGx5KDEsIDEpO1xuICAgICAgICBkaXZpZGUoMik7XG4gICAgICAgIG0gPSBudW1Ub1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXVsdGlwbHkoMCwgeik7XG4gICAgICAgIG11bHRpcGx5KDEgPDwgLWUsIDApO1xuICAgICAgICBtID0gbnVtVG9TdHJpbmcoKSArIHJlcGVhdC5jYWxsKFpFUk8sIGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZiA+IDApIHtcbiAgICAgIGsgPSBtLmxlbmd0aDtcbiAgICAgIG0gPSBzICsgKGsgPD0gZiA/ICcwLicgKyByZXBlYXQuY2FsbChaRVJPLCBmIC0gaykgKyBtIDogbS5zbGljZSgwLCBrIC0gZikgKyAnLicgKyBtLnNsaWNlKGsgLSBmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG0gPSBzICsgbTtcbiAgICB9IHJldHVybiBtO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcbnZhciBhTnVtYmVyVmFsdWUgPSByZXF1aXJlKCcuL19hLW51bWJlci12YWx1ZScpO1xudmFyICR0b1ByZWNpc2lvbiA9IDEuMC50b1ByZWNpc2lvbjtcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiAoJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gSUU3LVxuICByZXR1cm4gJHRvUHJlY2lzaW9uLmNhbGwoMSwgdW5kZWZpbmVkKSAhPT0gJzEnO1xufSkgfHwgISRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIFY4IH4gQW5kcm9pZCA0LjMtXG4gICR0b1ByZWNpc2lvbi5jYWxsKHt9KTtcbn0pKSwgJ051bWJlcicsIHtcbiAgdG9QcmVjaXNpb246IGZ1bmN0aW9uIHRvUHJlY2lzaW9uKHByZWNpc2lvbikge1xuICAgIHZhciB0aGF0ID0gYU51bWJlclZhbHVlKHRoaXMsICdOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIScpO1xuICAgIHJldHVybiBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/ICR0b1ByZWNpc2lvbi5jYWxsKHRoYXQpIDogJHRvUHJlY2lzaW9uLmNhbGwodGhhdCwgcHJlY2lzaW9uKTtcbiAgfVxufSk7XG4iLCIvLyAxOS4xLjMuMSBPYmplY3QuYXNzaWduKHRhcmdldCwgc291cmNlKVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYsICdPYmplY3QnLCB7IGFzc2lnbjogcmVxdWlyZSgnLi9fb2JqZWN0LWFzc2lnbicpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4yIC8gMTUuMi4zLjUgT2JqZWN0LmNyZWF0ZShPIFssIFByb3BlcnRpZXNdKVxuJGV4cG9ydCgkZXhwb3J0LlMsICdPYmplY3QnLCB7IGNyZWF0ZTogcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpIH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbi8vIDE5LjEuMi4zIC8gMTUuMi4zLjcgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyksICdPYmplY3QnLCB7IGRlZmluZVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX29iamVjdC1kcHMnKSB9KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4vLyAxOS4xLjIuNCAvIDE1LjIuMy42IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKVxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSwgJ09iamVjdCcsIHsgZGVmaW5lUHJvcGVydHk6IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmYgfSk7XG4iLCIvLyAxOS4xLjIuNSBPYmplY3QuZnJlZXplKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBtZXRhID0gcmVxdWlyZSgnLi9fbWV0YScpLm9uRnJlZXplO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2ZyZWV6ZScsIGZ1bmN0aW9uICgkZnJlZXplKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmcmVlemUoaXQpIHtcbiAgICByZXR1cm4gJGZyZWV6ZSAmJiBpc09iamVjdChpdCkgPyAkZnJlZXplKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGl0LCBrZXkpIHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0lPYmplY3QoaXQpLCBrZXkpO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdnZXRPd25Qcm9wZXJ0eU5hbWVzJywgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4tZXh0JykuZjtcbn0pO1xuIiwiLy8gMTkuMS4yLjkgT2JqZWN0LmdldFByb3RvdHlwZU9mKE8pXG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciAkZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnZ2V0UHJvdG90eXBlT2YnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBnZXRQcm90b3R5cGVPZihpdCkge1xuICAgIHJldHVybiAkZ2V0UHJvdG90eXBlT2YodG9PYmplY3QoaXQpKTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4yLjExIE9iamVjdC5pc0V4dGVuc2libGUoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzRXh0ZW5zaWJsZScsIGZ1bmN0aW9uICgkaXNFeHRlbnNpYmxlKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUoaXQpIDogdHJ1ZSA6IGZhbHNlO1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTIgT2JqZWN0LmlzRnJvemVuKE8pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxucmVxdWlyZSgnLi9fb2JqZWN0LXNhcCcpKCdpc0Zyb3plbicsIGZ1bmN0aW9uICgkaXNGcm96ZW4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlzRnJvemVuKGl0KSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KGl0KSA/ICRpc0Zyb3plbiA/ICRpc0Zyb3plbihpdCkgOiBmYWxzZSA6IHRydWU7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xMyBPYmplY3QuaXNTZWFsZWQoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2lzU2VhbGVkJywgZnVuY3Rpb24gKCRpc1NlYWxlZCkge1xuICByZXR1cm4gZnVuY3Rpb24gaXNTZWFsZWQoaXQpIHtcbiAgICByZXR1cm4gaXNPYmplY3QoaXQpID8gJGlzU2VhbGVkID8gJGlzU2VhbGVkKGl0KSA6IGZhbHNlIDogdHJ1ZTtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjEwIE9iamVjdC5pcyh2YWx1ZTEsIHZhbHVlMilcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgaXM6IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKSB9KTtcbiIsIi8vIDE5LjEuMi4xNCBPYmplY3Qua2V5cyhPKVxudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgJGtleXMgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cycpO1xuXG5yZXF1aXJlKCcuL19vYmplY3Qtc2FwJykoJ2tleXMnLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBrZXlzKGl0KSB7XG4gICAgcmV0dXJuICRrZXlzKHRvT2JqZWN0KGl0KSk7XG4gIH07XG59KTtcbiIsIi8vIDE5LjEuMi4xNSBPYmplY3QucHJldmVudEV4dGVuc2lvbnMoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgncHJldmVudEV4dGVuc2lvbnMnLCBmdW5jdGlvbiAoJHByZXZlbnRFeHRlbnNpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbiBwcmV2ZW50RXh0ZW5zaW9ucyhpdCkge1xuICAgIHJldHVybiAkcHJldmVudEV4dGVuc2lvbnMgJiYgaXNPYmplY3QoaXQpID8gJHByZXZlbnRFeHRlbnNpb25zKG1ldGEoaXQpKSA6IGl0O1xuICB9O1xufSk7XG4iLCIvLyAxOS4xLjIuMTcgT2JqZWN0LnNlYWwoTylcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIG1ldGEgPSByZXF1aXJlKCcuL19tZXRhJykub25GcmVlemU7XG5cbnJlcXVpcmUoJy4vX29iamVjdC1zYXAnKSgnc2VhbCcsIGZ1bmN0aW9uICgkc2VhbCkge1xuICByZXR1cm4gZnVuY3Rpb24gc2VhbChpdCkge1xuICAgIHJldHVybiAkc2VhbCAmJiBpc09iamVjdChpdCkgPyAkc2VhbChtZXRhKGl0KSkgOiBpdDtcbiAgfTtcbn0pO1xuIiwiLy8gMTkuMS4zLjE5IE9iamVjdC5zZXRQcm90b3R5cGVPZihPLCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHsgc2V0UHJvdG90eXBlT2Y6IHJlcXVpcmUoJy4vX3NldC1wcm90bycpLnNldCB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDE5LjEuMy42IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcoKVxudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuL19jbGFzc29mJyk7XG52YXIgdGVzdCA9IHt9O1xudGVzdFtyZXF1aXJlKCcuL193a3MnKSgndG9TdHJpbmdUYWcnKV0gPSAneic7XG5pZiAodGVzdCArICcnICE9ICdbb2JqZWN0IHpdJykge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKE9iamVjdC5wcm90b3R5cGUsICd0b1N0cmluZycsIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbiAgfSwgdHJ1ZSk7XG59XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYXJzZUZsb2F0ID0gcmVxdWlyZSgnLi9fcGFyc2UtZmxvYXQnKTtcbi8vIDE4LjIuNCBwYXJzZUZsb2F0KHN0cmluZylcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5GICogKHBhcnNlRmxvYXQgIT0gJHBhcnNlRmxvYXQpLCB7IHBhcnNlRmxvYXQ6ICRwYXJzZUZsb2F0IH0pO1xuIiwidmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkcGFyc2VJbnQgPSByZXF1aXJlKCcuL19wYXJzZS1pbnQnKTtcbi8vIDE4LjIuNSBwYXJzZUludChzdHJpbmcsIHJhZGl4KVxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LkYgKiAocGFyc2VJbnQgIT0gJHBhcnNlSW50KSwgeyBwYXJzZUludDogJHBhcnNlSW50IH0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIExJQlJBUlkgPSByZXF1aXJlKCcuL19saWJyYXJ5Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgY3R4ID0gcmVxdWlyZSgnLi9fY3R4Jyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4vX2NsYXNzb2YnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgZm9yT2YgPSByZXF1aXJlKCcuL19mb3Itb2YnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4vX3Rhc2snKS5zZXQ7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4vX25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi9fcGVyZm9ybScpO1xudmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4vX3VzZXItYWdlbnQnKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgVHlwZUVycm9yID0gZ2xvYmFsLlR5cGVFcnJvcjtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnM7XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52OCB8fCAnJztcbnZhciAkUHJvbWlzZSA9IGdsb2JhbFtQUk9NSVNFXTtcbnZhciBpc05vZGUgPSBjbGFzc29mKHByb2Nlc3MpID09ICdwcm9jZXNzJztcbnZhciBlbXB0eSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbnZhciBJbnRlcm5hbCwgbmV3R2VuZXJpY1Byb21pc2VDYXBhYmlsaXR5LCBPd25Qcm9taXNlQ2FwYWJpbGl0eSwgV3JhcHBlcjtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmY7XG5cbnZhciBVU0VfTkFUSVZFID0gISFmdW5jdGlvbiAoKSB7XG4gIHRyeSB7XG4gICAgLy8gY29ycmVjdCBzdWJjbGFzc2luZyB3aXRoIEBAc3BlY2llcyBzdXBwb3J0XG4gICAgdmFyIHByb21pc2UgPSAkUHJvbWlzZS5yZXNvbHZlKDEpO1xuICAgIHZhciBGYWtlUHJvbWlzZSA9IChwcm9taXNlLmNvbnN0cnVjdG9yID0ge30pW3JlcXVpcmUoJy4vX3drcycpKCdzcGVjaWVzJyldID0gZnVuY3Rpb24gKGV4ZWMpIHtcbiAgICAgIGV4ZWMoZW1wdHksIGVtcHR5KTtcbiAgICB9O1xuICAgIC8vIHVuaGFuZGxlZCByZWplY3Rpb25zIHRyYWNraW5nIHN1cHBvcnQsIE5vZGVKUyBQcm9taXNlIHdpdGhvdXQgaXQgZmFpbHMgQEBzcGVjaWVzIHRlc3RcbiAgICByZXR1cm4gKGlzTm9kZSB8fCB0eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50ID09ICdmdW5jdGlvbicpXG4gICAgICAmJiBwcm9taXNlLnRoZW4oZW1wdHkpIGluc3RhbmNlb2YgRmFrZVByb21pc2VcbiAgICAgIC8vIHY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgICAgIC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTgzMDU2NVxuICAgICAgLy8gd2UgY2FuJ3QgZGV0ZWN0IGl0IHN5bmNocm9ub3VzbHksIHNvIGp1c3QgY2hlY2sgdmVyc2lvbnNcbiAgICAgICYmIHY4LmluZGV4T2YoJzYuNicpICE9PSAwXG4gICAgICAmJiB1c2VyQWdlbnQuaW5kZXhPZignQ2hyb21lLzY2JykgPT09IC0xO1xuICB9IGNhdGNoIChlKSB7IC8qIGVtcHR5ICovIH1cbn0oKTtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgdHlwZW9mICh0aGVuID0gaXQudGhlbikgPT0gJ2Z1bmN0aW9uJyA/IHRoZW4gOiBmYWxzZTtcbn07XG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHByb21pc2UsIGlzUmVqZWN0KSB7XG4gIGlmIChwcm9taXNlLl9uKSByZXR1cm47XG4gIHByb21pc2UuX24gPSB0cnVlO1xuICB2YXIgY2hhaW4gPSBwcm9taXNlLl9jO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIG9rID0gcHJvbWlzZS5fcyA9PSAxO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgcnVuID0gZnVuY3Rpb24gKHJlYWN0aW9uKSB7XG4gICAgICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICAgICAgdmFyIHJlc29sdmUgPSByZWFjdGlvbi5yZXNvbHZlO1xuICAgICAgdmFyIHJlamVjdCA9IHJlYWN0aW9uLnJlamVjdDtcbiAgICAgIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gICAgICB2YXIgcmVzdWx0LCB0aGVuLCBleGl0ZWQ7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaGFuZGxlcikge1xuICAgICAgICAgIGlmICghb2spIHtcbiAgICAgICAgICAgIGlmIChwcm9taXNlLl9oID09IDIpIG9uSGFuZGxlVW5oYW5kbGVkKHByb21pc2UpO1xuICAgICAgICAgICAgcHJvbWlzZS5faCA9IDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkb21haW4pIGRvbWFpbi5lbnRlcigpO1xuICAgICAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIG1heSB0aHJvd1xuICAgICAgICAgICAgaWYgKGRvbWFpbikge1xuICAgICAgICAgICAgICBkb21haW4uZXhpdCgpO1xuICAgICAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgICAgICByZWplY3QoVHlwZUVycm9yKCdQcm9taXNlLWNoYWluIGN5Y2xlJykpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhlbiA9IGlzVGhlbmFibGUocmVzdWx0KSkge1xuICAgICAgICAgICAgdGhlbi5jYWxsKHJlc3VsdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9IGVsc2UgcmVqZWN0KHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGRvbWFpbiAmJiAhZXhpdGVkKSBkb21haW4uZXhpdCgpO1xuICAgICAgICByZWplY3QoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoID4gaSkgcnVuKGNoYWluW2krK10pOyAvLyB2YXJpYWJsZSBsZW5ndGggLSBjYW4ndCB1c2UgZm9yRWFjaFxuICAgIHByb21pc2UuX2MgPSBbXTtcbiAgICBwcm9taXNlLl9uID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFwcm9taXNlLl9oKSBvblVuaGFuZGxlZChwcm9taXNlKTtcbiAgfSk7XG59O1xudmFyIG9uVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgdGFzay5jYWxsKGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZSA9IHByb21pc2UuX3Y7XG4gICAgdmFyIHVuaGFuZGxlZCA9IGlzVW5oYW5kbGVkKHByb21pc2UpO1xuICAgIHZhciByZXN1bHQsIGhhbmRsZXIsIGNvbnNvbGU7XG4gICAgaWYgKHVuaGFuZGxlZCkge1xuICAgICAgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGlmIChoYW5kbGVyID0gZ2xvYmFsLm9udW5oYW5kbGVkcmVqZWN0aW9uKSB7XG4gICAgICAgICAgaGFuZGxlcih7IHByb21pc2U6IHByb21pc2UsIHJlYXNvbjogdmFsdWUgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoKGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZSkgJiYgY29uc29sZS5lcnJvcikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbicsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgcHJvbWlzZS5faCA9IGlzTm9kZSB8fCBpc1VuaGFuZGxlZChwcm9taXNlKSA/IDIgOiAxO1xuICAgIH0gcHJvbWlzZS5fYSA9IHVuZGVmaW5lZDtcbiAgICBpZiAodW5oYW5kbGVkICYmIHJlc3VsdC5lKSB0aHJvdyByZXN1bHQudjtcbiAgfSk7XG59O1xudmFyIGlzVW5oYW5kbGVkID0gZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgcmV0dXJuIHByb21pc2UuX2ggIT09IDEgJiYgKHByb21pc2UuX2EgfHwgcHJvbWlzZS5fYykubGVuZ3RoID09PSAwO1xufTtcbnZhciBvbkhhbmRsZVVuaGFuZGxlZCA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gIHRhc2suY2FsbChnbG9iYWwsIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFuZGxlcjtcbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBwcm9jZXNzLmVtaXQoJ3JlamVjdGlvbkhhbmRsZWQnLCBwcm9taXNlKTtcbiAgICB9IGVsc2UgaWYgKGhhbmRsZXIgPSBnbG9iYWwub25yZWplY3Rpb25oYW5kbGVkKSB7XG4gICAgICBoYW5kbGVyKHsgcHJvbWlzZTogcHJvbWlzZSwgcmVhc29uOiBwcm9taXNlLl92IH0pO1xuICAgIH1cbiAgfSk7XG59O1xudmFyICRyZWplY3QgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdmFyIHByb21pc2UgPSB0aGlzO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHByb21pc2UuX3YgPSB2YWx1ZTtcbiAgcHJvbWlzZS5fcyA9IDI7XG4gIGlmICghcHJvbWlzZS5fYSkgcHJvbWlzZS5fYSA9IHByb21pc2UuX2Muc2xpY2UoKTtcbiAgbm90aWZ5KHByb21pc2UsIHRydWUpO1xufTtcbnZhciAkcmVzb2x2ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB2YXIgcHJvbWlzZSA9IHRoaXM7XG4gIHZhciB0aGVuO1xuICBpZiAocHJvbWlzZS5fZCkgcmV0dXJuO1xuICBwcm9taXNlLl9kID0gdHJ1ZTtcbiAgcHJvbWlzZSA9IHByb21pc2UuX3cgfHwgcHJvbWlzZTsgLy8gdW53cmFwXG4gIHRyeSB7XG4gICAgaWYgKHByb21pc2UgPT09IHZhbHVlKSB0aHJvdyBUeXBlRXJyb3IoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTtcbiAgICBpZiAodGhlbiA9IGlzVGhlbmFibGUodmFsdWUpKSB7XG4gICAgICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgd3JhcHBlciA9IHsgX3c6IHByb21pc2UsIF9kOiBmYWxzZSB9OyAvLyB3cmFwXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhlbi5jYWxsKHZhbHVlLCBjdHgoJHJlc29sdmUsIHdyYXBwZXIsIDEpLCBjdHgoJHJlamVjdCwgd3JhcHBlciwgMSkpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgJHJlamVjdC5jYWxsKHdyYXBwZXIsIGUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvbWlzZS5fdiA9IHZhbHVlO1xuICAgICAgcHJvbWlzZS5fcyA9IDE7XG4gICAgICBub3RpZnkocHJvbWlzZSwgZmFsc2UpO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgICRyZWplY3QuY2FsbCh7IF93OiBwcm9taXNlLCBfZDogZmFsc2UgfSwgZSk7IC8vIHdyYXBcbiAgfVxufTtcblxuLy8gY29uc3RydWN0b3IgcG9seWZpbGxcbmlmICghVVNFX05BVElWRSkge1xuICAvLyAyNS40LjMuMSBQcm9taXNlKGV4ZWN1dG9yKVxuICAkUHJvbWlzZSA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsICRQcm9taXNlLCBQUk9NSVNFLCAnX2gnKTtcbiAgICBhRnVuY3Rpb24oZXhlY3V0b3IpO1xuICAgIEludGVybmFsLmNhbGwodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGN0eCgkcmVzb2x2ZSwgdGhpcywgMSksIGN0eCgkcmVqZWN0LCB0aGlzLCAxKSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAkcmVqZWN0LmNhbGwodGhpcywgZXJyKTtcbiAgICB9XG4gIH07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICBJbnRlcm5hbCA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICB0aGlzLl9jID0gW107ICAgICAgICAgICAgIC8vIDwtIGF3YWl0aW5nIHJlYWN0aW9uc1xuICAgIHRoaXMuX2EgPSB1bmRlZmluZWQ7ICAgICAgLy8gPC0gY2hlY2tlZCBpbiBpc1VuaGFuZGxlZCByZWFjdGlvbnNcbiAgICB0aGlzLl9zID0gMDsgICAgICAgICAgICAgIC8vIDwtIHN0YXRlXG4gICAgdGhpcy5fZCA9IGZhbHNlOyAgICAgICAgICAvLyA8LSBkb25lXG4gICAgdGhpcy5fdiA9IHVuZGVmaW5lZDsgICAgICAvLyA8LSB2YWx1ZVxuICAgIHRoaXMuX2ggPSAwOyAgICAgICAgICAgICAgLy8gPC0gcmVqZWN0aW9uIHN0YXRlLCAwIC0gZGVmYXVsdCwgMSAtIGhhbmRsZWQsIDIgLSB1bmhhbmRsZWRcbiAgICB0aGlzLl9uID0gZmFsc2U7ICAgICAgICAgIC8vIDwtIG5vdGlmeVxuICB9O1xuICBJbnRlcm5hbC5wcm90b3R5cGUgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKSgkUHJvbWlzZS5wcm90b3R5cGUsIHtcbiAgICAvLyAyNS40LjUuMyBQcm9taXNlLnByb3RvdHlwZS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKVxuICAgIHRoZW46IGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgIHZhciByZWFjdGlvbiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCAkUHJvbWlzZSkpO1xuICAgICAgcmVhY3Rpb24ub2sgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT0gJ2Z1bmN0aW9uJyA/IG9uRnVsZmlsbGVkIDogdHJ1ZTtcbiAgICAgIHJlYWN0aW9uLmZhaWwgPSB0eXBlb2Ygb25SZWplY3RlZCA9PSAnZnVuY3Rpb24nICYmIG9uUmVqZWN0ZWQ7XG4gICAgICByZWFjdGlvbi5kb21haW4gPSBpc05vZGUgPyBwcm9jZXNzLmRvbWFpbiA6IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuX2MucHVzaChyZWFjdGlvbik7XG4gICAgICBpZiAodGhpcy5fYSkgdGhpcy5fYS5wdXNoKHJlYWN0aW9uKTtcbiAgICAgIGlmICh0aGlzLl9zKSBub3RpZnkodGhpcywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHJlYWN0aW9uLnByb21pc2U7XG4gICAgfSxcbiAgICAvLyAyNS40LjUuMSBQcm9taXNlLnByb3RvdHlwZS5jYXRjaChvblJlamVjdGVkKVxuICAgICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy50aGVuKHVuZGVmaW5lZCwgb25SZWplY3RlZCk7XG4gICAgfVxuICB9KTtcbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGN0eCgkcmVzb2x2ZSwgcHJvbWlzZSwgMSk7XG4gICAgdGhpcy5yZWplY3QgPSBjdHgoJHJlamVjdCwgcHJvbWlzZSwgMSk7XG4gIH07XG4gIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eSA9IGZ1bmN0aW9uIChDKSB7XG4gICAgcmV0dXJuIEMgPT09ICRQcm9taXNlIHx8IEMgPT09IFdyYXBwZXJcbiAgICAgID8gbmV3IE93blByb21pc2VDYXBhYmlsaXR5KEMpXG4gICAgICA6IG5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgfTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAhVVNFX05BVElWRSwgeyBQcm9taXNlOiAkUHJvbWlzZSB9KTtcbnJlcXVpcmUoJy4vX3NldC10by1zdHJpbmctdGFnJykoJFByb21pc2UsIFBST01JU0UpO1xucmVxdWlyZSgnLi9fc2V0LXNwZWNpZXMnKShQUk9NSVNFKTtcbldyYXBwZXIgPSByZXF1aXJlKCcuL19jb3JlJylbUFJPTUlTRV07XG5cbi8vIHN0YXRpY3NcbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIFBST01JU0UsIHtcbiAgLy8gMjUuNC40LjUgUHJvbWlzZS5yZWplY3QocilcbiAgcmVqZWN0OiBmdW5jdGlvbiByZWplY3Qocikge1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHkodGhpcyk7XG4gICAgdmFyICQkcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgJCRyZWplY3Qocik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIChMSUJSQVJZIHx8ICFVU0VfTkFUSVZFKSwgUFJPTUlTRSwge1xuICAvLyAyNS40LjQuNiBQcm9taXNlLnJlc29sdmUoeClcbiAgcmVzb2x2ZTogZnVuY3Rpb24gcmVzb2x2ZSh4KSB7XG4gICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKExJQlJBUlkgJiYgdGhpcyA9PT0gV3JhcHBlciA/ICRQcm9taXNlIDogdGhpcywgeCk7XG4gIH1cbn0pO1xuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhKFVTRV9OQVRJVkUgJiYgcmVxdWlyZSgnLi9faXRlci1kZXRlY3QnKShmdW5jdGlvbiAoaXRlcikge1xuICAkUHJvbWlzZS5hbGwoaXRlcilbJ2NhdGNoJ10oZW1wdHkpO1xufSkpLCBQUk9NSVNFLCB7XG4gIC8vIDI1LjQuNC4xIFByb21pc2UuYWxsKGl0ZXJhYmxlKVxuICBhbGw6IGZ1bmN0aW9uIGFsbChpdGVyYWJsZSkge1xuICAgIHZhciBDID0gdGhpcztcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5KEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgdmFyIHJlbWFpbmluZyA9IDE7XG4gICAgICBmb3JPZihpdGVyYWJsZSwgZmFsc2UsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciAkaW5kZXggPSBpbmRleCsrO1xuICAgICAgICB2YXIgYWxyZWFkeUNhbGxlZCA9IGZhbHNlO1xuICAgICAgICB2YWx1ZXMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgICByZW1haW5pbmcrKztcbiAgICAgICAgQy5yZXNvbHZlKHByb21pc2UpLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGFscmVhZHlDYWxsZWQpIHJldHVybjtcbiAgICAgICAgICBhbHJlYWR5Q2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgICB2YWx1ZXNbJGluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZSkgcmVqZWN0KHJlc3VsdC52KTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9LFxuICAvLyAyNS40LjQuNCBQcm9taXNlLnJhY2UoaXRlcmFibGUpXG4gIHJhY2U6IGZ1bmN0aW9uIHJhY2UoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgZm9yT2YoaXRlcmFibGUsIGZhbHNlLCBmdW5jdGlvbiAocHJvbWlzZSkge1xuICAgICAgICBDLnJlc29sdmUocHJvbWlzZSkudGhlbihjYXBhYmlsaXR5LnJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LmUpIHJlamVjdChyZXN1bHQudik7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIvLyAyNi4xLjEgUmVmbGVjdC5hcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgckFwcGx5ID0gKHJlcXVpcmUoJy4vX2dsb2JhbCcpLlJlZmxlY3QgfHwge30pLmFwcGx5O1xudmFyIGZBcHBseSA9IEZ1bmN0aW9uLmFwcGx5O1xuLy8gTVMgRWRnZSBhcmd1bWVudHNMaXN0IGFyZ3VtZW50IGlzIG9wdGlvbmFsXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgckFwcGx5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG59KSwgJ1JlZmxlY3QnLCB7XG4gIGFwcGx5OiBmdW5jdGlvbiBhcHBseSh0YXJnZXQsIHRoaXNBcmd1bWVudCwgYXJndW1lbnRzTGlzdCkge1xuICAgIHZhciBUID0gYUZ1bmN0aW9uKHRhcmdldCk7XG4gICAgdmFyIEwgPSBhbk9iamVjdChhcmd1bWVudHNMaXN0KTtcbiAgICByZXR1cm4gckFwcGx5ID8gckFwcGx5KFQsIHRoaXNBcmd1bWVudCwgTCkgOiBmQXBwbHkuY2FsbChULCB0aGlzQXJndW1lbnQsIEwpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMiBSZWZsZWN0LmNvbnN0cnVjdCh0YXJnZXQsIGFyZ3VtZW50c0xpc3QgWywgbmV3VGFyZ2V0XSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL19iaW5kJyk7XG52YXIgckNvbnN0cnVjdCA9IChyZXF1aXJlKCcuL19nbG9iYWwnKS5SZWZsZWN0IHx8IHt9KS5jb25zdHJ1Y3Q7XG5cbi8vIE1TIEVkZ2Ugc3VwcG9ydHMgb25seSAyIGFyZ3VtZW50cyBhbmQgYXJndW1lbnRzTGlzdCBhcmd1bWVudCBpcyBvcHRpb25hbFxuLy8gRkYgTmlnaHRseSBzZXRzIHRoaXJkIGFyZ3VtZW50IGFzIGBuZXcudGFyZ2V0YCwgYnV0IGRvZXMgbm90IGNyZWF0ZSBgdGhpc2AgZnJvbSBpdFxudmFyIE5FV19UQVJHRVRfQlVHID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBmdW5jdGlvbiBGKCkgeyAvKiBlbXB0eSAqLyB9XG4gIHJldHVybiAhKHJDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xudmFyIEFSR1NfQlVHID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgckNvbnN0cnVjdChmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0pO1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKE5FV19UQVJHRVRfQlVHIHx8IEFSR1NfQlVHKSwgJ1JlZmxlY3QnLCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFGdW5jdGlvbihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFGdW5jdGlvbihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiByQ29uc3RydWN0KFRhcmdldCwgYXJncywgbmV3VGFyZ2V0KTtcbiAgICBpZiAoVGFyZ2V0ID09IG5ld1RhcmdldCkge1xuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBvcHRpbWl6YXRpb24gZm9yIDAtNCBhcmd1bWVudHNcbiAgICAgIHN3aXRjaCAoYXJncy5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IFRhcmdldCgpO1xuICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0pO1xuICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0pO1xuICAgICAgICBjYXNlIDM6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgICBjYXNlIDQ6IHJldHVybiBuZXcgVGFyZ2V0KGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0sIGFyZ3NbM10pO1xuICAgICAgfVxuICAgICAgLy8gdy9vIGFsdGVyZWQgbmV3VGFyZ2V0LCBsb3Qgb2YgYXJndW1lbnRzIGNhc2VcbiAgICAgIHZhciAkYXJncyA9IFtudWxsXTtcbiAgICAgICRhcmdzLnB1c2guYXBwbHkoJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYmluZC5hcHBseShUYXJnZXQsICRhcmdzKSkoKTtcbiAgICB9XG4gICAgLy8gd2l0aCBhbHRlcmVkIG5ld1RhcmdldCwgbm90IHN1cHBvcnQgYnVpbHQtaW4gY29uc3RydWN0b3JzXG4gICAgdmFyIHByb3RvID0gbmV3VGFyZ2V0LnByb3RvdHlwZTtcbiAgICB2YXIgaW5zdGFuY2UgPSBjcmVhdGUoaXNPYmplY3QocHJvdG8pID8gcHJvdG8gOiBPYmplY3QucHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gRnVuY3Rpb24uYXBwbHkuY2FsbChUYXJnZXQsIGluc3RhbmNlLCBhcmdzKTtcbiAgICByZXR1cm4gaXNPYmplY3QocmVzdWx0KSA/IHJlc3VsdCA6IGluc3RhbmNlO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuMyBSZWZsZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXksIGF0dHJpYnV0ZXMpXG52YXIgZFAgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xuXG4vLyBNUyBFZGdlIGhhcyBicm9rZW4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSAtIHRocm93aW5nIGluc3RlYWQgb2YgcmV0dXJuaW5nIGZhbHNlXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShkUC5mKHt9LCAxLCB7IHZhbHVlOiAxIH0pLCAxLCB7IHZhbHVlOiAyIH0pO1xufSksICdSZWZsZWN0Jywge1xuICBkZWZpbmVQcm9wZXJ0eTogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcykge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgcHJvcGVydHlLZXkgPSB0b1ByaW1pdGl2ZShwcm9wZXJ0eUtleSwgdHJ1ZSk7XG4gICAgYW5PYmplY3QoYXR0cmlidXRlcyk7XG4gICAgdHJ5IHtcbiAgICAgIGRQLmYodGFyZ2V0LCBwcm9wZXJ0eUtleSwgYXR0cmlidXRlcyk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59KTtcbiIsIi8vIDI2LjEuNCBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpLmY7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBkZWxldGVQcm9wZXJ0eTogZnVuY3Rpb24gZGVsZXRlUHJvcGVydHkodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHZhciBkZXNjID0gZ09QRChhbk9iamVjdCh0YXJnZXQpLCBwcm9wZXJ0eUtleSk7XG4gICAgcmV0dXJuIGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlID8gZmFsc2UgOiBkZWxldGUgdGFyZ2V0W3Byb3BlcnR5S2V5XTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyAyNi4xLjUgUmVmbGVjdC5lbnVtZXJhdGUodGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIEVudW1lcmF0ZSA9IGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gYW5PYmplY3QoaXRlcmF0ZWQpOyAvLyB0YXJnZXRcbiAgdGhpcy5faSA9IDA7ICAgICAgICAgICAgICAgICAgLy8gbmV4dCBpbmRleFxuICB2YXIga2V5cyA9IHRoaXMuX2sgPSBbXTsgICAgICAvLyBrZXlzXG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIGl0ZXJhdGVkKSBrZXlzLnB1c2goa2V5KTtcbn07XG5yZXF1aXJlKCcuL19pdGVyLWNyZWF0ZScpKEVudW1lcmF0ZSwgJ09iamVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuICB2YXIga2V5cyA9IHRoYXQuX2s7XG4gIHZhciBrZXk7XG4gIGRvIHtcbiAgICBpZiAodGhhdC5faSA+PSBrZXlzLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICB9IHdoaWxlICghKChrZXkgPSBrZXlzW3RoYXQuX2krK10pIGluIHRoYXQuX3QpKTtcbiAgcmV0dXJuIHsgdmFsdWU6IGtleSwgZG9uZTogZmFsc2UgfTtcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIGVudW1lcmF0ZTogZnVuY3Rpb24gZW51bWVyYXRlKHRhcmdldCkge1xuICAgIHJldHVybiBuZXcgRW51bWVyYXRlKHRhcmdldCk7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS43IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgcHJvcGVydHlLZXkpXG52YXIgZ09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuOCBSZWZsZWN0LmdldFByb3RvdHlwZU9mKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZ2V0UHJvdG8gPSByZXF1aXJlKCcuL19vYmplY3QtZ3BvJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0Jywge1xuICBnZXRQcm90b3R5cGVPZjogZnVuY3Rpb24gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSB7XG4gICAgcmV0dXJuIGdldFByb3RvKGFuT2JqZWN0KHRhcmdldCkpO1xuICB9XG59KTtcbiIsIi8vIDI2LjEuNiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3BlcnR5S2V5IFssIHJlY2VpdmVyXSlcbnZhciBnT1BEID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdvcGQnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xuXG5mdW5jdGlvbiBnZXQodGFyZ2V0LCBwcm9wZXJ0eUtleSAvKiAsIHJlY2VpdmVyICovKSB7XG4gIHZhciByZWNlaXZlciA9IGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdGFyZ2V0IDogYXJndW1lbnRzWzJdO1xuICB2YXIgZGVzYywgcHJvdG87XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGlmIChkZXNjID0gZ09QRC5mKHRhcmdldCwgcHJvcGVydHlLZXkpKSByZXR1cm4gaGFzKGRlc2MsICd2YWx1ZScpXG4gICAgPyBkZXNjLnZhbHVlXG4gICAgOiBkZXNjLmdldCAhPT0gdW5kZWZpbmVkXG4gICAgICA/IGRlc2MuZ2V0LmNhbGwocmVjZWl2ZXIpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG8sIHByb3BlcnR5S2V5LCByZWNlaXZlcik7XG59XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHsgZ2V0OiBnZXQgfSk7XG4iLCIvLyAyNi4xLjkgUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wZXJ0eUtleSlcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaGFzOiBmdW5jdGlvbiBoYXModGFyZ2V0LCBwcm9wZXJ0eUtleSkge1xuICAgIHJldHVybiBwcm9wZXJ0eUtleSBpbiB0YXJnZXQ7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMCBSZWZsZWN0LmlzRXh0ZW5zaWJsZSh0YXJnZXQpXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgaXNFeHRlbnNpYmxlOiBmdW5jdGlvbiBpc0V4dGVuc2libGUodGFyZ2V0KSB7XG4gICAgYW5PYmplY3QodGFyZ2V0KTtcbiAgICByZXR1cm4gJGlzRXh0ZW5zaWJsZSA/ICRpc0V4dGVuc2libGUodGFyZ2V0KSA6IHRydWU7XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMSBSZWZsZWN0Lm93bktleXModGFyZ2V0KVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBvd25LZXlzOiByZXF1aXJlKCcuL19vd24ta2V5cycpIH0pO1xuIiwiLy8gMjYuMS4xMiBSZWZsZWN0LnByZXZlbnRFeHRlbnNpb25zKHRhcmdldClcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciAkcHJldmVudEV4dGVuc2lvbnMgPSBPYmplY3QucHJldmVudEV4dGVuc2lvbnM7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUmVmbGVjdCcsIHtcbiAgcHJldmVudEV4dGVuc2lvbnM6IGZ1bmN0aW9uIHByZXZlbnRFeHRlbnNpb25zKHRhcmdldCkge1xuICAgIGFuT2JqZWN0KHRhcmdldCk7XG4gICAgdHJ5IHtcbiAgICAgIGlmICgkcHJldmVudEV4dGVuc2lvbnMpICRwcmV2ZW50RXh0ZW5zaW9ucyh0YXJnZXQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufSk7XG4iLCIvLyAyNi4xLjE0IFJlZmxlY3Quc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90bylcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgc2V0UHJvdG8gPSByZXF1aXJlKCcuL19zZXQtcHJvdG8nKTtcblxuaWYgKHNldFByb3RvKSAkZXhwb3J0KCRleHBvcnQuUywgJ1JlZmxlY3QnLCB7XG4gIHNldFByb3RvdHlwZU9mOiBmdW5jdGlvbiBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvKSB7XG4gICAgc2V0UHJvdG8uY2hlY2sodGFyZ2V0LCBwcm90byk7XG4gICAgdHJ5IHtcbiAgICAgIHNldFByb3RvLnNldCh0YXJnZXQsIHByb3RvKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbn0pO1xuIiwiLy8gMjYuMS4xMyBSZWZsZWN0LnNldCh0YXJnZXQsIHByb3BlcnR5S2V5LCBWIFssIHJlY2VpdmVyXSlcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGhhcyA9IHJlcXVpcmUoJy4vX2hhcycpO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcblxuZnVuY3Rpb24gc2V0KHRhcmdldCwgcHJvcGVydHlLZXksIFYgLyogLCByZWNlaXZlciAqLykge1xuICB2YXIgcmVjZWl2ZXIgPSBhcmd1bWVudHMubGVuZ3RoIDwgNCA/IHRhcmdldCA6IGFyZ3VtZW50c1szXTtcbiAgdmFyIG93bkRlc2MgPSBnT1BELmYoYW5PYmplY3QodGFyZ2V0KSwgcHJvcGVydHlLZXkpO1xuICB2YXIgZXhpc3RpbmdEZXNjcmlwdG9yLCBwcm90bztcbiAgaWYgKCFvd25EZXNjKSB7XG4gICAgaWYgKGlzT2JqZWN0KHByb3RvID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHtcbiAgICAgIHJldHVybiBzZXQocHJvdG8sIHByb3BlcnR5S2V5LCBWLCByZWNlaXZlcik7XG4gICAgfVxuICAgIG93bkRlc2MgPSBjcmVhdGVEZXNjKDApO1xuICB9XG4gIGlmIChoYXMob3duRGVzYywgJ3ZhbHVlJykpIHtcbiAgICBpZiAob3duRGVzYy53cml0YWJsZSA9PT0gZmFsc2UgfHwgIWlzT2JqZWN0KHJlY2VpdmVyKSkgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChleGlzdGluZ0Rlc2NyaXB0b3IgPSBnT1BELmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5KSkge1xuICAgICAgaWYgKGV4aXN0aW5nRGVzY3JpcHRvci5nZXQgfHwgZXhpc3RpbmdEZXNjcmlwdG9yLnNldCB8fCBleGlzdGluZ0Rlc2NyaXB0b3Iud3JpdGFibGUgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gICAgICBleGlzdGluZ0Rlc2NyaXB0b3IudmFsdWUgPSBWO1xuICAgICAgZFAuZihyZWNlaXZlciwgcHJvcGVydHlLZXksIGV4aXN0aW5nRGVzY3JpcHRvcik7XG4gICAgfSBlbHNlIGRQLmYocmVjZWl2ZXIsIHByb3BlcnR5S2V5LCBjcmVhdGVEZXNjKDAsIFYpKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3duRGVzYy5zZXQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogKG93bkRlc2Muc2V0LmNhbGwocmVjZWl2ZXIsIFYpLCB0cnVlKTtcbn1cblxuJGV4cG9ydCgkZXhwb3J0LlMsICdSZWZsZWN0JywgeyBzZXQ6IHNldCB9KTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4vX2luaGVyaXQtaWYtcmVxdWlyZWQnKTtcbnZhciBkUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpLmY7XG52YXIgZ09QTiA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BuJykuZjtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyICRmbGFncyA9IHJlcXVpcmUoJy4vX2ZsYWdzJyk7XG52YXIgJFJlZ0V4cCA9IGdsb2JhbC5SZWdFeHA7XG52YXIgQmFzZSA9ICRSZWdFeHA7XG52YXIgcHJvdG8gPSAkUmVnRXhwLnByb3RvdHlwZTtcbnZhciByZTEgPSAvYS9nO1xudmFyIHJlMiA9IC9hL2c7XG4vLyBcIm5ld1wiIGNyZWF0ZXMgYSBuZXcgb2JqZWN0LCBvbGQgd2Via2l0IGJ1Z2d5IGhlcmVcbnZhciBDT1JSRUNUX05FVyA9IG5ldyAkUmVnRXhwKHJlMSkgIT09IHJlMTtcblxuaWYgKHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgKCFDT1JSRUNUX05FVyB8fCByZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uICgpIHtcbiAgcmUyW3JlcXVpcmUoJy4vX3drcycpKCdtYXRjaCcpXSA9IGZhbHNlO1xuICAvLyBSZWdFeHAgY29uc3RydWN0b3IgY2FuIGFsdGVyIGZsYWdzIGFuZCBJc1JlZ0V4cCB3b3JrcyBjb3JyZWN0IHdpdGggQEBtYXRjaFxuICByZXR1cm4gJFJlZ0V4cChyZTEpICE9IHJlMSB8fCAkUmVnRXhwKHJlMikgPT0gcmUyIHx8ICRSZWdFeHAocmUxLCAnaScpICE9ICcvYS9pJztcbn0pKSkge1xuICAkUmVnRXhwID0gZnVuY3Rpb24gUmVnRXhwKHAsIGYpIHtcbiAgICB2YXIgdGlSRSA9IHRoaXMgaW5zdGFuY2VvZiAkUmVnRXhwO1xuICAgIHZhciBwaVJFID0gaXNSZWdFeHAocCk7XG4gICAgdmFyIGZpVSA9IGYgPT09IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gIXRpUkUgJiYgcGlSRSAmJiBwLmNvbnN0cnVjdG9yID09PSAkUmVnRXhwICYmIGZpVSA/IHBcbiAgICAgIDogaW5oZXJpdElmUmVxdWlyZWQoQ09SUkVDVF9ORVdcbiAgICAgICAgPyBuZXcgQmFzZShwaVJFICYmICFmaVUgPyBwLnNvdXJjZSA6IHAsIGYpXG4gICAgICAgIDogQmFzZSgocGlSRSA9IHAgaW5zdGFuY2VvZiAkUmVnRXhwKSA/IHAuc291cmNlIDogcCwgcGlSRSAmJiBmaVUgPyAkZmxhZ3MuY2FsbChwKSA6IGYpXG4gICAgICAsIHRpUkUgPyB0aGlzIDogcHJvdG8sICRSZWdFeHApO1xuICB9O1xuICB2YXIgcHJveHkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5IGluICRSZWdFeHAgfHwgZFAoJFJlZ0V4cCwga2V5LCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJhc2Vba2V5XTsgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKGl0KSB7IEJhc2Vba2V5XSA9IGl0OyB9XG4gICAgfSk7XG4gIH07XG4gIGZvciAodmFyIGtleXMgPSBnT1BOKEJhc2UpLCBpID0gMDsga2V5cy5sZW5ndGggPiBpOykgcHJveHkoa2V5c1tpKytdKTtcbiAgcHJvdG8uY29uc3RydWN0b3IgPSAkUmVnRXhwO1xuICAkUmVnRXhwLnByb3RvdHlwZSA9IHByb3RvO1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKGdsb2JhbCwgJ1JlZ0V4cCcsICRSZWdFeHApO1xufVxuXG5yZXF1aXJlKCcuL19zZXQtc3BlY2llcycpKCdSZWdFeHAnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnJlcXVpcmUoJy4vX2V4cG9ydCcpKHtcbiAgdGFyZ2V0OiAnUmVnRXhwJyxcbiAgcHJvdG86IHRydWUsXG4gIGZvcmNlZDogcmVnZXhwRXhlYyAhPT0gLy4vLmV4ZWNcbn0sIHtcbiAgZXhlYzogcmVnZXhwRXhlY1xufSk7XG4iLCIvLyAyMS4yLjUuMyBnZXQgUmVnRXhwLnByb3RvdHlwZS5mbGFncygpXG5pZiAocmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAvLi9nLmZsYWdzICE9ICdnJykgcmVxdWlyZSgnLi9fb2JqZWN0LWRwJykuZihSZWdFeHAucHJvdG90eXBlLCAnZmxhZ3MnLCB7XG4gIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgZ2V0OiByZXF1aXJlKCcuL19mbGFncycpXG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhZHZhbmNlU3RyaW5nSW5kZXggPSByZXF1aXJlKCcuL19hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIHJlZ0V4cEV4ZWMgPSByZXF1aXJlKCcuL19yZWdleHAtZXhlYy1hYnN0cmFjdCcpO1xuXG4vLyBAQG1hdGNoIGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ21hdGNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIE1BVENILCAkbWF0Y2gsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLm1hdGNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLm1hdGNoXG4gICAgZnVuY3Rpb24gbWF0Y2gocmVnZXhwKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSByZWdleHAgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogcmVnZXhwW01BVENIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW01BVENIXShTdHJpbmcoTykpO1xuICAgIH0sXG4gICAgLy8gYFJlZ0V4cC5wcm90b3R5cGVbQEBtYXRjaF1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBtYXRjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJG1hdGNoLCByZWdleHAsIHRoaXMpO1xuICAgICAgaWYgKHJlcy5kb25lKSByZXR1cm4gcmVzLnZhbHVlO1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgaWYgKCFyeC5nbG9iYWwpIHJldHVybiByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICByeC5sYXN0SW5kZXggPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHZhciBuID0gMDtcbiAgICAgIHZhciByZXN1bHQ7XG4gICAgICB3aGlsZSAoKHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpKSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgbWF0Y2hTdHIgPSBTdHJpbmcocmVzdWx0WzBdKTtcbiAgICAgICAgQVtuXSA9IG1hdGNoU3RyO1xuICAgICAgICBpZiAobWF0Y2hTdHIgPT09ICcnKSByeC5sYXN0SW5kZXggPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgdG9MZW5ndGgocngubGFzdEluZGV4KSwgZnVsbFVuaWNvZGUpO1xuICAgICAgICBuKys7XG4gICAgICB9XG4gICAgICByZXR1cm4gbiA9PT0gMCA/IG51bGwgOiBBO1xuICAgIH1cbiAgXTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi9fdG8taW50ZWdlcicpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4vX2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgcmVnRXhwRXhlYyA9IHJlcXVpcmUoJy4vX3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCZgJ118XFxkXFxkP3w8W14+XSo+KS9nO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTX05PX05BTUVEID0gL1xcJChbJCZgJ118XFxkXFxkPykvZztcblxudmFyIG1heWJlVG9TdHJpbmcgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyBpdCA6IFN0cmluZyhpdCk7XG59O1xuXG4vLyBAQHJlcGxhY2UgbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgncmVwbGFjZScsIDIsIGZ1bmN0aW9uIChkZWZpbmVkLCBSRVBMQUNFLCAkcmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUucmVwbGFjZWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IGRlZmluZWQodGhpcyk7XG4gICAgICB2YXIgZm4gPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBzZWFyY2hWYWx1ZVtSRVBMQUNFXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkXG4gICAgICAgID8gZm4uY2FsbChzZWFyY2hWYWx1ZSwgTywgcmVwbGFjZVZhbHVlKVxuICAgICAgICA6ICRyZXBsYWNlLmNhbGwoU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEByZXBsYWNlXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKCRyZXBsYWNlLCByZWdleHAsIHRoaXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBmdW5jdGlvbmFsUmVwbGFjZSA9IHR5cGVvZiByZXBsYWNlVmFsdWUgPT09ICdmdW5jdGlvbic7XG4gICAgICBpZiAoIWZ1bmN0aW9uYWxSZXBsYWNlKSByZXBsYWNlVmFsdWUgPSBTdHJpbmcocmVwbGFjZVZhbHVlKTtcbiAgICAgIHZhciBnbG9iYWwgPSByeC5nbG9iYWw7XG4gICAgICBpZiAoZ2xvYmFsKSB7XG4gICAgICAgIHZhciBmdWxsVW5pY29kZSA9IHJ4LnVuaWNvZGU7XG4gICAgICAgIHJ4Lmxhc3RJbmRleCA9IDA7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IHJlZ0V4cEV4ZWMocngsIFMpO1xuICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsKSBicmVhaztcbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgIGlmICghZ2xvYmFsKSBicmVhaztcbiAgICAgICAgdmFyIG1hdGNoU3RyID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG4gICAgICB2YXIgYWNjdW11bGF0ZWRSZXN1bHQgPSAnJztcbiAgICAgIHZhciBuZXh0U291cmNlUG9zaXRpb24gPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdHNbaV07XG4gICAgICAgIHZhciBtYXRjaGVkID0gU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyKHJlc3VsdC5pbmRleCksIFMubGVuZ3RoKSwgMCk7XG4gICAgICAgIHZhciBjYXB0dXJlcyA9IFtdO1xuICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGVxdWl2YWxlbnQgdG9cbiAgICAgICAgLy8gICBjYXB0dXJlcyA9IHJlc3VsdC5zbGljZSgxKS5tYXAobWF5YmVUb1N0cmluZylcbiAgICAgICAgLy8gYnV0IGZvciBzb21lIHJlYXNvbiBgbmF0aXZlU2xpY2UuY2FsbChyZXN1bHQsIDEsIHJlc3VsdC5sZW5ndGgpYCAoY2FsbGVkIGluXG4gICAgICAgIC8vIHRoZSBzbGljZSBwb2x5ZmlsbCB3aGVuIHNsaWNpbmcgbmF0aXZlIGFycmF5cykgXCJkb2Vzbid0IHdvcmtcIiBpbiBzYWZhcmkgOSBhbmRcbiAgICAgICAgLy8gY2F1c2VzIGEgY3Jhc2ggKGh0dHBzOi8vcGFzdGViaW4uY29tL04yMVF6ZVFBKSB3aGVuIHRyeWluZyB0byBkZWJ1ZyBpdC5cbiAgICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCByZXN1bHQubGVuZ3RoOyBqKyspIGNhcHR1cmVzLnB1c2gobWF5YmVUb1N0cmluZyhyZXN1bHRbal0pKTtcbiAgICAgICAgdmFyIG5hbWVkQ2FwdHVyZXMgPSByZXN1bHQuZ3JvdXBzO1xuICAgICAgICBpZiAoZnVuY3Rpb25hbFJlcGxhY2UpIHtcbiAgICAgICAgICB2YXIgcmVwbGFjZXJBcmdzID0gW21hdGNoZWRdLmNvbmNhdChjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHJlcGxhY2VyQXJncy5wdXNoKG5hbWVkQ2FwdHVyZXMpO1xuICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IFN0cmluZyhyZXBsYWNlVmFsdWUuYXBwbHkodW5kZWZpbmVkLCByZXBsYWNlckFyZ3MpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXBsYWNlbWVudCA9IGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBTLCBwb3NpdGlvbiwgY2FwdHVyZXMsIG5hbWVkQ2FwdHVyZXMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBvc2l0aW9uID49IG5leHRTb3VyY2VQb3NpdGlvbikge1xuICAgICAgICAgIGFjY3VtdWxhdGVkUmVzdWx0ICs9IFMuc2xpY2UobmV4dFNvdXJjZVBvc2l0aW9uLCBwb3NpdGlvbikgKyByZXBsYWNlbWVudDtcbiAgICAgICAgICBuZXh0U291cmNlUG9zaXRpb24gPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjdW11bGF0ZWRSZXN1bHQgKyBTLnNsaWNlKG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xuXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG4gIGZ1bmN0aW9uIGdldFN1YnN0aXR1dGlvbihtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgICB2YXIgdGFpbFBvcyA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgdmFyIG0gPSBjYXB0dXJlcy5sZW5ndGg7XG4gICAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgICBpZiAobmFtZWRDYXB0dXJlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuYW1lZENhcHR1cmVzID0gdG9PYmplY3QobmFtZWRDYXB0dXJlcyk7XG4gICAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gICAgfVxuICAgIHJldHVybiAkcmVwbGFjZS5jYWxsKHJlcGxhY2VtZW50LCBzeW1ib2xzLCBmdW5jdGlvbiAobWF0Y2gsIGNoKSB7XG4gICAgICB2YXIgY2FwdHVyZTtcbiAgICAgIHN3aXRjaCAoY2guY2hhckF0KDApKSB7XG4gICAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgICBjYXNlICcmJzogcmV0dXJuIG1hdGNoZWQ7XG4gICAgICAgIGNhc2UgJ2AnOiByZXR1cm4gc3RyLnNsaWNlKDAsIHBvc2l0aW9uKTtcbiAgICAgICAgY2FzZSBcIidcIjogcmV0dXJuIHN0ci5zbGljZSh0YWlsUG9zKTtcbiAgICAgICAgY2FzZSAnPCc6XG4gICAgICAgICAgY2FwdHVyZSA9IG5hbWVkQ2FwdHVyZXNbY2guc2xpY2UoMSwgLTEpXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDogLy8gXFxkXFxkP1xuICAgICAgICAgIHZhciBuID0gK2NoO1xuICAgICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgICAgaWYgKG4gPiBtKSB7XG4gICAgICAgICAgICB2YXIgZiA9IGZsb29yKG4gLyAxMCk7XG4gICAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgICAgaWYgKGYgPD0gbSkgcmV0dXJuIGNhcHR1cmVzW2YgLSAxXSA9PT0gdW5kZWZpbmVkID8gY2guY2hhckF0KDEpIDogY2FwdHVyZXNbZiAtIDFdICsgY2guY2hhckF0KDEpO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNhcHR1cmUgPT09IHVuZGVmaW5lZCA/ICcnIDogY2FwdHVyZTtcbiAgICB9KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHNhbWVWYWx1ZSA9IHJlcXVpcmUoJy4vX3NhbWUtdmFsdWUnKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcblxuLy8gQEBzZWFyY2ggbG9naWNcbnJlcXVpcmUoJy4vX2ZpeC1yZS13a3MnKSgnc2VhcmNoJywgMSwgZnVuY3Rpb24gKGRlZmluZWQsIFNFQVJDSCwgJHNlYXJjaCwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHJldHVybiBbXG4gICAgLy8gYFN0cmluZy5wcm90b3R5cGUuc2VhcmNoYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNlYXJjaFxuICAgIGZ1bmN0aW9uIHNlYXJjaChyZWdleHApIHtcbiAgICAgIHZhciBPID0gZGVmaW5lZCh0aGlzKTtcbiAgICAgIHZhciBmbiA9IHJlZ2V4cCA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWdleHBbU0VBUkNIXTtcbiAgICAgIHJldHVybiBmbiAhPT0gdW5kZWZpbmVkID8gZm4uY2FsbChyZWdleHAsIE8pIDogbmV3IFJlZ0V4cChyZWdleHApW1NFQVJDSF0oU3RyaW5nKE8pKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc2VhcmNoXWAgbWV0aG9kXG4gICAgLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHNlYXJjaFxuICAgIGZ1bmN0aW9uIChyZWdleHApIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoJHNlYXJjaCwgcmVnZXhwLCB0aGlzKTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHJlZ2V4cCk7XG4gICAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICAgIHZhciBwcmV2aW91c0xhc3RJbmRleCA9IHJ4Lmxhc3RJbmRleDtcbiAgICAgIGlmICghc2FtZVZhbHVlKHByZXZpb3VzTGFzdEluZGV4LCAwKSkgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciByZXN1bHQgPSByZWdFeHBFeGVjKHJ4LCBTKTtcbiAgICAgIGlmICghc2FtZVZhbHVlKHJ4Lmxhc3RJbmRleCwgcHJldmlvdXNMYXN0SW5kZXgpKSByeC5sYXN0SW5kZXggPSBwcmV2aW91c0xhc3RJbmRleDtcbiAgICAgIHJldHVybiByZXN1bHQgPT09IG51bGwgPyAtMSA6IHJlc3VsdC5pbmRleDtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGlzUmVnRXhwID0gcmVxdWlyZSgnLi9faXMtcmVnZXhwJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi9fYWR2YW5jZS1zdHJpbmctaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMtYWJzdHJhY3QnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi9fcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4vX2ZhaWxzJyk7XG52YXIgJG1pbiA9IE1hdGgubWluO1xudmFyICRwdXNoID0gW10ucHVzaDtcbnZhciAkU1BMSVQgPSAnc3BsaXQnO1xudmFyIExFTkdUSCA9ICdsZW5ndGgnO1xudmFyIExBU1RfSU5ERVggPSAnbGFzdEluZGV4JztcbnZhciBNQVhfVUlOVDMyID0gMHhmZmZmZmZmZjtcblxuLy8gYmFiZWwtbWluaWZ5IHRyYW5zcGlsZXMgUmVnRXhwKCd4JywgJ3knKSAtPiAveC95IGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciBTVVBQT1JUU19ZID0gIWZhaWxzKGZ1bmN0aW9uICgpIHsgUmVnRXhwKE1BWF9VSU5UMzIsICd5Jyk7IH0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5yZXF1aXJlKCcuL19maXgtcmUtd2tzJykoJ3NwbGl0JywgMiwgZnVuY3Rpb24gKGRlZmluZWQsIFNQTElULCAkc3BsaXQsIG1heWJlQ2FsbE5hdGl2ZSkge1xuICB2YXIgaW50ZXJuYWxTcGxpdDtcbiAgaWYgKFxuICAgICdhYmJjJ1skU1BMSVRdKC8oYikqLylbMV0gPT0gJ2MnIHx8XG4gICAgJ3Rlc3QnWyRTUExJVF0oLyg/OikvLCAtMSlbTEVOR1RIXSAhPSA0IHx8XG4gICAgJ2FiJ1skU1BMSVRdKC8oPzphYikqLylbTEVOR1RIXSAhPSAyIHx8XG4gICAgJy4nWyRTUExJVF0oLyguPykoLj8pLylbTEVOR1RIXSAhPSA0IHx8XG4gICAgJy4nWyRTUExJVF0oLygpKCkvKVtMRU5HVEhdID4gMSB8fFxuICAgICcnWyRTUExJVF0oLy4/LylbTEVOR1RIXVxuICApIHtcbiAgICAvLyBiYXNlZCBvbiBlczUtc2hpbSBpbXBsZW1lbnRhdGlvbiwgbmVlZCB0byByZXdvcmsgaXRcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBTdHJpbmcodGhpcyk7XG4gICAgICBpZiAoc2VwYXJhdG9yID09PSB1bmRlZmluZWQgJiYgbGltaXQgPT09IDApIHJldHVybiBbXTtcbiAgICAgIC8vIElmIGBzZXBhcmF0b3JgIGlzIG5vdCBhIHJlZ2V4LCB1c2UgbmF0aXZlIHNwbGl0XG4gICAgICBpZiAoIWlzUmVnRXhwKHNlcGFyYXRvcikpIHJldHVybiAkc3BsaXQuY2FsbChzdHJpbmcsIHNlcGFyYXRvciwgbGltaXQpO1xuICAgICAgdmFyIG91dHB1dCA9IFtdO1xuICAgICAgdmFyIGZsYWdzID0gKHNlcGFyYXRvci5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IubXVsdGlsaW5lID8gJ20nIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3IudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoc2VwYXJhdG9yLnN0aWNreSA/ICd5JyA6ICcnKTtcbiAgICAgIHZhciBsYXN0TGFzdEluZGV4ID0gMDtcbiAgICAgIHZhciBzcGxpdExpbWl0ID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIC8vIE1ha2UgYGdsb2JhbGAgYW5kIGF2b2lkIGBsYXN0SW5kZXhgIGlzc3VlcyBieSB3b3JraW5nIHdpdGggYSBjb3B5XG4gICAgICB2YXIgc2VwYXJhdG9yQ29weSA9IG5ldyBSZWdFeHAoc2VwYXJhdG9yLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuICAgICAgdmFyIG1hdGNoLCBsYXN0SW5kZXgsIGxhc3RMZW5ndGg7XG4gICAgICB3aGlsZSAobWF0Y2ggPSByZWdleHBFeGVjLmNhbGwoc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5W0xBU1RfSU5ERVhdO1xuICAgICAgICBpZiAobGFzdEluZGV4ID4gbGFzdExhc3RJbmRleCkge1xuICAgICAgICAgIG91dHB1dC5wdXNoKHN0cmluZy5zbGljZShsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaFtMRU5HVEhdID4gMSAmJiBtYXRjaC5pbmRleCA8IHN0cmluZ1tMRU5HVEhdKSAkcHVzaC5hcHBseShvdXRwdXQsIG1hdGNoLnNsaWNlKDEpKTtcbiAgICAgICAgICBsYXN0TGVuZ3RoID0gbWF0Y2hbMF1bTEVOR1RIXTtcbiAgICAgICAgICBsYXN0TGFzdEluZGV4ID0gbGFzdEluZGV4O1xuICAgICAgICAgIGlmIChvdXRwdXRbTEVOR1RIXSA+PSBzcGxpdExpbWl0KSBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VwYXJhdG9yQ29weVtMQVNUX0lOREVYXSA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHlbTEFTVF9JTkRFWF0rKzsgLy8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcFxuICAgICAgfVxuICAgICAgaWYgKGxhc3RMYXN0SW5kZXggPT09IHN0cmluZ1tMRU5HVEhdKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFzZXBhcmF0b3JDb3B5LnRlc3QoJycpKSBvdXRwdXQucHVzaCgnJyk7XG4gICAgICB9IGVsc2Ugb3V0cHV0LnB1c2goc3RyaW5nLnNsaWNlKGxhc3RMYXN0SW5kZXgpKTtcbiAgICAgIHJldHVybiBvdXRwdXRbTEVOR1RIXSA+IHNwbGl0TGltaXQgPyBvdXRwdXQuc2xpY2UoMCwgc3BsaXRMaW1pdCkgOiBvdXRwdXQ7XG4gICAgfTtcbiAgLy8gQ2hha3JhLCBWOFxuICB9IGVsc2UgaWYgKCcwJ1skU1BMSVRdKHVuZGVmaW5lZCwgMClbTEVOR1RIXSkge1xuICAgIGludGVybmFsU3BsaXQgPSBmdW5jdGlvbiAoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgcmV0dXJuIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkICYmIGxpbWl0ID09PSAwID8gW10gOiAkc3BsaXQuY2FsbCh0aGlzLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGludGVybmFsU3BsaXQgPSAkc3BsaXQ7XG4gIH1cblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnNwbGl0XG4gICAgZnVuY3Rpb24gc3BsaXQoc2VwYXJhdG9yLCBsaW1pdCkge1xuICAgICAgdmFyIE8gPSBkZWZpbmVkKHRoaXMpO1xuICAgICAgdmFyIHNwbGl0dGVyID0gc2VwYXJhdG9yID09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHNlcGFyYXRvcltTUExJVF07XG4gICAgICByZXR1cm4gc3BsaXR0ZXIgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNwbGl0dGVyLmNhbGwoc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBpbnRlcm5hbFNwbGl0LmNhbGwoU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLUBAc3BsaXRcbiAgICAvL1xuICAgIC8vIE5PVEU6IFRoaXMgY2Fubm90IGJlIHByb3Blcmx5IHBvbHlmaWxsZWQgaW4gZW5naW5lcyB0aGF0IGRvbid0IHN1cHBvcnRcbiAgICAvLyB0aGUgJ3knIGZsYWcuXG4gICAgZnVuY3Rpb24gKHJlZ2V4cCwgbGltaXQpIHtcbiAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUoaW50ZXJuYWxTcGxpdCwgcmVnZXhwLCB0aGlzLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gJHNwbGl0KTtcbiAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcblxuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QocmVnZXhwKTtcbiAgICAgIHZhciBTID0gU3RyaW5nKHRoaXMpO1xuICAgICAgdmFyIEMgPSBzcGVjaWVzQ29uc3RydWN0b3IocngsIFJlZ0V4cCk7XG5cbiAgICAgIHZhciB1bmljb2RlTWF0Y2hpbmcgPSByeC51bmljb2RlO1xuICAgICAgdmFyIGZsYWdzID0gKHJ4Lmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4Lm11bHRpbGluZSA/ICdtJyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAocngudW5pY29kZSA/ICd1JyA6ICcnKSArXG4gICAgICAgICAgICAgICAgICAoU1VQUE9SVFNfWSA/ICd5JyA6ICdnJyk7XG5cbiAgICAgIC8vIF4oPyArIHJ4ICsgKSBpcyBuZWVkZWQsIGluIGNvbWJpbmF0aW9uIHdpdGggc29tZSBTIHNsaWNpbmcsIHRvXG4gICAgICAvLyBzaW11bGF0ZSB0aGUgJ3knIGZsYWcuXG4gICAgICB2YXIgc3BsaXR0ZXIgPSBuZXcgQyhTVVBQT1JUU19ZID8gcnggOiAnXig/OicgKyByeC5zb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICAgIHZhciBsaW0gPSBsaW1pdCA9PT0gdW5kZWZpbmVkID8gTUFYX1VJTlQzMiA6IGxpbWl0ID4+PiAwO1xuICAgICAgaWYgKGxpbSA9PT0gMCkgcmV0dXJuIFtdO1xuICAgICAgaWYgKFMubGVuZ3RoID09PSAwKSByZXR1cm4gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFMpID09PSBudWxsID8gW1NdIDogW107XG4gICAgICB2YXIgcCA9IDA7XG4gICAgICB2YXIgcSA9IDA7XG4gICAgICB2YXIgQSA9IFtdO1xuICAgICAgd2hpbGUgKHEgPCBTLmxlbmd0aCkge1xuICAgICAgICBzcGxpdHRlci5sYXN0SW5kZXggPSBTVVBQT1JUU19ZID8gcSA6IDA7XG4gICAgICAgIHZhciB6ID0gY2FsbFJlZ0V4cEV4ZWMoc3BsaXR0ZXIsIFNVUFBPUlRTX1kgPyBTIDogUy5zbGljZShxKSk7XG4gICAgICAgIHZhciBlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgeiA9PT0gbnVsbCB8fFxuICAgICAgICAgIChlID0gJG1pbih0b0xlbmd0aChzcGxpdHRlci5sYXN0SW5kZXggKyAoU1VQUE9SVFNfWSA/IDAgOiBxKSksIFMubGVuZ3RoKSkgPT09IHBcbiAgICAgICAgKSB7XG4gICAgICAgICAgcSA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCBxLCB1bmljb2RlTWF0Y2hpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIEEucHVzaChTLnNsaWNlKHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIEEucHVzaCh6W2ldKTtcbiAgICAgICAgICAgIGlmIChBLmxlbmd0aCA9PT0gbGltKSByZXR1cm4gQTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcSA9IHAgPSBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBBLnB1c2goUy5zbGljZShwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnJlcXVpcmUoJy4vZXM2LnJlZ2V4cC5mbGFncycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgJGZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciAkdG9TdHJpbmcgPSAvLi9bVE9fU1RSSU5HXTtcblxudmFyIGRlZmluZSA9IGZ1bmN0aW9uIChmbikge1xuICByZXF1aXJlKCcuL19yZWRlZmluZScpKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZm4sIHRydWUpO1xufTtcblxuLy8gMjEuMi41LjE0IFJlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcoKVxuaWYgKHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkgeyByZXR1cm4gJHRvU3RyaW5nLmNhbGwoeyBzb3VyY2U6ICdhJywgZmxhZ3M6ICdiJyB9KSAhPSAnL2EvYic7IH0pKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICB2YXIgUiA9IGFuT2JqZWN0KHRoaXMpO1xuICAgIHJldHVybiAnLycuY29uY2F0KFIuc291cmNlLCAnLycsXG4gICAgICAnZmxhZ3MnIGluIFIgPyBSLmZsYWdzIDogIURFU0NSSVBUT1JTICYmIFIgaW5zdGFuY2VvZiBSZWdFeHAgPyAkZmxhZ3MuY2FsbChSKSA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuLy8gRkY0NC0gUmVnRXhwI3RvU3RyaW5nIGhhcyBhIHdyb25nIG5hbWVcbn0gZWxzZSBpZiAoJHRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HKSB7XG4gIGRlZmluZShmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gJHRvU3RyaW5nLmNhbGwodGhpcyk7XG4gIH0pO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHN0cm9uZyA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tc3Ryb25nJyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgU0VUID0gJ1NldCc7XG5cbi8vIDIzLjIgU2V0IE9iamVjdHNcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFNFVCwgZnVuY3Rpb24gKGdldCkge1xuICByZXR1cm4gZnVuY3Rpb24gU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuMi4zLjEgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpXG4gIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgcmV0dXJuIHN0cm9uZy5kZWYodmFsaWRhdGUodGhpcywgU0VUKSwgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICB9XG59LCBzdHJvbmcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuMiBTdHJpbmcucHJvdG90eXBlLmFuY2hvcihuYW1lKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnYW5jaG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGFuY2hvcihuYW1lKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2EnLCAnbmFtZScsIG5hbWUpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4zIFN0cmluZy5wcm90b3R5cGUuYmlnKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2JpZycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBiaWcoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2JpZycsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjQgU3RyaW5nLnByb3RvdHlwZS5ibGluaygpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdibGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBibGluaygpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnYmxpbmsnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy41IFN0cmluZy5wcm90b3R5cGUuYm9sZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdib2xkJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGJvbGQoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ2InLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKGZhbHNlKTtcbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjMuMyBTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KHBvcylcbiAgY29kZVBvaW50QXQ6IGZ1bmN0aW9uIGNvZGVQb2ludEF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIvLyAyMS4xLjMuNiBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKHNlYXJjaFN0cmluZyBbLCBlbmRQb3NpdGlvbl0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgRU5EU19XSVRIID0gJ2VuZHNXaXRoJztcbnZhciAkZW5kc1dpdGggPSAnJ1tFTkRTX1dJVEhdO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzLWlzLXJlZ2V4cCcpKEVORFNfV0lUSCksICdTdHJpbmcnLCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IGNvbnRleHQodGhpcywgc2VhcmNoU3RyaW5nLCBFTkRTX1dJVEgpO1xuICAgIHZhciBlbmRQb3NpdGlvbiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkO1xuICAgIHZhciBsZW4gPSB0b0xlbmd0aCh0aGF0Lmxlbmd0aCk7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBNYXRoLm1pbih0b0xlbmd0aChlbmRQb3NpdGlvbiksIGxlbik7XG4gICAgdmFyIHNlYXJjaCA9IFN0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiAkZW5kc1dpdGhcbiAgICAgID8gJGVuZHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBlbmQpXG4gICAgICA6IHRoYXQuc2xpY2UoZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjYgU3RyaW5nLnByb3RvdHlwZS5maXhlZCgpXG5yZXF1aXJlKCcuL19zdHJpbmctaHRtbCcpKCdmaXhlZCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBmaXhlZCgpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAndHQnLCAnJywgJycpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy43IFN0cmluZy5wcm90b3R5cGUuZm9udGNvbG9yKGNvbG9yKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnZm9udGNvbG9yJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRjb2xvcihjb2xvcikge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdmb250JywgJ2NvbG9yJywgY29sb3IpO1xuICB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy44IFN0cmluZy5wcm90b3R5cGUuZm9udHNpemUoc2l6ZSlcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ2ZvbnRzaXplJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGZvbnRzaXplKHNpemUpIHtcbiAgICByZXR1cm4gY3JlYXRlSFRNTCh0aGlzLCAnZm9udCcsICdzaXplJywgc2l6ZSk7XG4gIH07XG59KTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBmcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xudmFyICRmcm9tQ29kZVBvaW50ID0gU3RyaW5nLmZyb21Db2RlUG9pbnQ7XG5cbi8vIGxlbmd0aCBzaG91bGQgYmUgMSwgb2xkIEZGIHByb2JsZW1cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogKCEhJGZyb21Db2RlUG9pbnQgJiYgJGZyb21Db2RlUG9pbnQubGVuZ3RoICE9IDEpLCAnU3RyaW5nJywge1xuICAvLyAyMS4xLjIuMiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5jb2RlUG9pbnRzKVxuICBmcm9tQ29kZVBvaW50OiBmdW5jdGlvbiBmcm9tQ29kZVBvaW50KHgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgYUxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBjb2RlO1xuICAgIHdoaWxlIChhTGVuID4gaSkge1xuICAgICAgY29kZSA9ICthcmd1bWVudHNbaSsrXTtcbiAgICAgIGlmICh0b0Fic29sdXRlSW5kZXgoY29kZSwgMHgxMGZmZmYpICE9PSBjb2RlKSB0aHJvdyBSYW5nZUVycm9yKGNvZGUgKyAnIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQnKTtcbiAgICAgIHJlcy5wdXNoKGNvZGUgPCAweDEwMDAwXG4gICAgICAgID8gZnJvbUNoYXJDb2RlKGNvZGUpXG4gICAgICAgIDogZnJvbUNoYXJDb2RlKCgoY29kZSAtPSAweDEwMDAwKSA+PiAxMCkgKyAweGQ4MDAsIGNvZGUgJSAweDQwMCArIDB4ZGMwMClcbiAgICAgICk7XG4gICAgfSByZXR1cm4gcmVzLmpvaW4oJycpO1xuICB9XG59KTtcbiIsIi8vIDIxLjEuMy43IFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXMoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbiA9IDApXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGNvbnRleHQgPSByZXF1aXJlKCcuL19zdHJpbmctY29udGV4dCcpO1xudmFyIElOQ0xVREVTID0gJ2luY2x1ZGVzJztcblxuJGV4cG9ydCgkZXhwb3J0LlAgKyAkZXhwb3J0LkYgKiByZXF1aXJlKCcuL19mYWlscy1pcy1yZWdleHAnKShJTkNMVURFUyksICdTdHJpbmcnLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICByZXR1cm4gISF+Y29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIElOQ0xVREVTKVxuICAgICAgLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gQi4yLjMuOSBTdHJpbmcucHJvdG90eXBlLml0YWxpY3MoKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnaXRhbGljcycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBpdGFsaWNzKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdpJywgJycsICcnKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRhdCA9IHJlcXVpcmUoJy4vX3N0cmluZy1hdCcpKHRydWUpO1xuXG4vLyAyMS4xLjMuMjcgU3RyaW5nLnByb3RvdHlwZVtAQGl0ZXJhdG9yXSgpXG5yZXF1aXJlKCcuL19pdGVyLWRlZmluZScpKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICB0aGlzLl90ID0gU3RyaW5nKGl0ZXJhdGVkKTsgLy8gdGFyZ2V0XG4gIHRoaXMuX2kgPSAwOyAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4vLyAyMS4xLjUuMi4xICVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUubmV4dCgpXG59LCBmdW5jdGlvbiAoKSB7XG4gIHZhciBPID0gdGhpcy5fdDtcbiAgdmFyIGluZGV4ID0gdGhpcy5faTtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gTy5sZW5ndGgpIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgcG9pbnQgPSAkYXQoTywgaW5kZXgpO1xuICB0aGlzLl9pICs9IHBvaW50Lmxlbmd0aDtcbiAgcmV0dXJuIHsgdmFsdWU6IHBvaW50LCBkb25lOiBmYWxzZSB9O1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMCBTdHJpbmcucHJvdG90eXBlLmxpbmsodXJsKVxucmVxdWlyZSgnLi9fc3RyaW5nLWh0bWwnKSgnbGluaycsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBsaW5rKHVybCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdhJywgJ2hyZWYnLCB1cmwpO1xuICB9O1xufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4yLjQgU3RyaW5nLnJhdyhjYWxsU2l0ZSwgLi4uc3Vic3RpdHV0aW9ucylcbiAgcmF3OiBmdW5jdGlvbiByYXcoY2FsbFNpdGUpIHtcbiAgICB2YXIgdHBsID0gdG9JT2JqZWN0KGNhbGxTaXRlLnJhdyk7XG4gICAgdmFyIGxlbiA9IHRvTGVuZ3RoKHRwbC5sZW5ndGgpO1xuICAgIHZhciBhTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgcmVzID0gW107XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChsZW4gPiBpKSB7XG4gICAgICByZXMucHVzaChTdHJpbmcodHBsW2krK10pKTtcbiAgICAgIGlmIChpIDwgYUxlbikgcmVzLnB1c2goU3RyaW5nKGFyZ3VtZW50c1tpXSkpO1xuICAgIH0gcmV0dXJuIHJlcy5qb2luKCcnKTtcbiAgfVxufSk7XG4iLCJ2YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ1N0cmluZycsIHtcbiAgLy8gMjEuMS4zLjEzIFN0cmluZy5wcm90b3R5cGUucmVwZWF0KGNvdW50KVxuICByZXBlYXQ6IHJlcXVpcmUoJy4vX3N0cmluZy1yZXBlYXQnKVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBCLjIuMy4xMSBTdHJpbmcucHJvdG90eXBlLnNtYWxsKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3NtYWxsJywgZnVuY3Rpb24gKGNyZWF0ZUhUTUwpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNtYWxsKCkge1xuICAgIHJldHVybiBjcmVhdGVIVE1MKHRoaXMsICdzbWFsbCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIi8vIDIxLjEuMy4xOCBTdHJpbmcucHJvdG90eXBlLnN0YXJ0c1dpdGgoc2VhcmNoU3RyaW5nIFssIHBvc2l0aW9uIF0pXG4ndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJyk7XG52YXIgY29udGV4dCA9IHJlcXVpcmUoJy4vX3N0cmluZy1jb250ZXh0Jyk7XG52YXIgU1RBUlRTX1dJVEggPSAnc3RhcnRzV2l0aCc7XG52YXIgJHN0YXJ0c1dpdGggPSAnJ1tTVEFSVFNfV0lUSF07XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogcmVxdWlyZSgnLi9fZmFpbHMtaXMtcmVnZXhwJykoU1RBUlRTX1dJVEgpLCAnU3RyaW5nJywge1xuICBzdGFydHNXaXRoOiBmdW5jdGlvbiBzdGFydHNXaXRoKHNlYXJjaFN0cmluZyAvKiAsIHBvc2l0aW9uID0gMCAqLykge1xuICAgIHZhciB0aGF0ID0gY29udGV4dCh0aGlzLCBzZWFyY2hTdHJpbmcsIFNUQVJUU19XSVRIKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgdGhhdC5sZW5ndGgpKTtcbiAgICB2YXIgc2VhcmNoID0gU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuICRzdGFydHNXaXRoXG4gICAgICA/ICRzdGFydHNXaXRoLmNhbGwodGhhdCwgc2VhcmNoLCBpbmRleClcbiAgICAgIDogdGhhdC5zbGljZShpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEyIFN0cmluZy5wcm90b3R5cGUuc3RyaWtlKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N0cmlrZScsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdHJpa2UoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N0cmlrZScsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjEzIFN0cmluZy5wcm90b3R5cGUuc3ViKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1YicsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdWIoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1YicsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEIuMi4zLjE0IFN0cmluZy5wcm90b3R5cGUuc3VwKClcbnJlcXVpcmUoJy4vX3N0cmluZy1odG1sJykoJ3N1cCcsIGZ1bmN0aW9uIChjcmVhdGVIVE1MKSB7XG4gIHJldHVybiBmdW5jdGlvbiBzdXAoKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUhUTUwodGhpcywgJ3N1cCcsICcnLCAnJyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIDIxLjEuMy4yNSBTdHJpbmcucHJvdG90eXBlLnRyaW0oKVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbScsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcywgMyk7XG4gIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIEVDTUFTY3JpcHQgNiBzeW1ib2xzIHNoaW1cbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBoYXMgPSByZXF1aXJlKCcuL19oYXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJyk7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHJlZGVmaW5lID0gcmVxdWlyZSgnLi9fcmVkZWZpbmUnKTtcbnZhciBNRVRBID0gcmVxdWlyZSgnLi9fbWV0YScpLktFWTtcbnZhciAkZmFpbHMgPSByZXF1aXJlKCcuL19mYWlscycpO1xudmFyIHNoYXJlZCA9IHJlcXVpcmUoJy4vX3NoYXJlZCcpO1xudmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi9fc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuL191aWQnKTtcbnZhciB3a3MgPSByZXF1aXJlKCcuL193a3MnKTtcbnZhciB3a3NFeHQgPSByZXF1aXJlKCcuL193a3MtZXh0Jyk7XG52YXIgd2tzRGVmaW5lID0gcmVxdWlyZSgnLi9fd2tzLWRlZmluZScpO1xudmFyIGVudW1LZXlzID0gcmVxdWlyZSgnLi9fZW51bS1rZXlzJyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vX2lzLWFycmF5Jyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIHRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJyk7XG52YXIgY3JlYXRlRGVzYyA9IHJlcXVpcmUoJy4vX3Byb3BlcnR5LWRlc2MnKTtcbnZhciBfY3JlYXRlID0gcmVxdWlyZSgnLi9fb2JqZWN0LWNyZWF0ZScpO1xudmFyIGdPUE5FeHQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wbi1leHQnKTtcbnZhciAkR09QRCA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJyk7XG52YXIgJEdPUFMgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wcycpO1xudmFyICREUCA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xudmFyICRrZXlzID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKTtcbnZhciBnT1BEID0gJEdPUEQuZjtcbnZhciBkUCA9ICREUC5mO1xudmFyIGdPUE4gPSBnT1BORXh0LmY7XG52YXIgJFN5bWJvbCA9IGdsb2JhbC5TeW1ib2w7XG52YXIgJEpTT04gPSBnbG9iYWwuSlNPTjtcbnZhciBfc3RyaW5naWZ5ID0gJEpTT04gJiYgJEpTT04uc3RyaW5naWZ5O1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIEhJRERFTiA9IHdrcygnX2hpZGRlbicpO1xudmFyIFRPX1BSSU1JVElWRSA9IHdrcygndG9QcmltaXRpdmUnKTtcbnZhciBpc0VudW0gPSB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBTeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXJlZ2lzdHJ5Jyk7XG52YXIgQWxsU3ltYm9scyA9IHNoYXJlZCgnc3ltYm9scycpO1xudmFyIE9QU3ltYm9scyA9IHNoYXJlZCgnb3Atc3ltYm9scycpO1xudmFyIE9iamVjdFByb3RvID0gT2JqZWN0W1BST1RPVFlQRV07XG52YXIgVVNFX05BVElWRSA9IHR5cGVvZiAkU3ltYm9sID09ICdmdW5jdGlvbicgJiYgISEkR09QUy5mO1xudmFyIFFPYmplY3QgPSBnbG9iYWwuUU9iamVjdDtcbi8vIERvbid0IHVzZSBzZXR0ZXJzIGluIFF0IFNjcmlwdCwgaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzE3M1xudmFyIHNldHRlciA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2MgPSBERVNDUklQVE9SUyAmJiAkZmFpbHMoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX2NyZWF0ZShkUCh7fSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBkUCh0aGlzLCAnYScsIHsgdmFsdWU6IDcgfSkuYTsgfVxuICB9KSkuYSAhPSA3O1xufSkgPyBmdW5jdGlvbiAoaXQsIGtleSwgRCkge1xuICB2YXIgcHJvdG9EZXNjID0gZ09QRChPYmplY3RQcm90bywga2V5KTtcbiAgaWYgKHByb3RvRGVzYykgZGVsZXRlIE9iamVjdFByb3RvW2tleV07XG4gIGRQKGl0LCBrZXksIEQpO1xuICBpZiAocHJvdG9EZXNjICYmIGl0ICE9PSBPYmplY3RQcm90bykgZFAoT2JqZWN0UHJvdG8sIGtleSwgcHJvdG9EZXNjKTtcbn0gOiBkUDtcblxudmFyIHdyYXAgPSBmdW5jdGlvbiAodGFnKSB7XG4gIHZhciBzeW0gPSBBbGxTeW1ib2xzW3RhZ10gPSBfY3JlYXRlKCRTeW1ib2xbUFJPVE9UWVBFXSk7XG4gIHN5bS5fayA9IHRhZztcbiAgcmV0dXJuIHN5bTtcbn07XG5cbnZhciBpc1N5bWJvbCA9IFVTRV9OQVRJVkUgJiYgdHlwZW9mICRTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIHR5cGVvZiBpdCA9PSAnc3ltYm9sJztcbn0gOiBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0IGluc3RhbmNlb2YgJFN5bWJvbDtcbn07XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0eShpdCwga2V5LCBEKSB7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG8pICRkZWZpbmVQcm9wZXJ0eShPUFN5bWJvbHMsIGtleSwgRCk7XG4gIGFuT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgYW5PYmplY3QoRCk7XG4gIGlmIChoYXMoQWxsU3ltYm9scywga2V5KSkge1xuICAgIGlmICghRC5lbnVtZXJhYmxlKSB7XG4gICAgICBpZiAoIWhhcyhpdCwgSElEREVOKSkgZFAoaXQsIEhJRERFTiwgY3JlYXRlRGVzYygxLCB7fSkpO1xuICAgICAgaXRbSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhcyhpdCwgSElEREVOKSAmJiBpdFtISURERU5dW2tleV0pIGl0W0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgRCA9IF9jcmVhdGUoRCwgeyBlbnVtZXJhYmxlOiBjcmVhdGVEZXNjKDAsIGZhbHNlKSB9KTtcbiAgICB9IHJldHVybiBzZXRTeW1ib2xEZXNjKGl0LCBrZXksIEQpO1xuICB9IHJldHVybiBkUChpdCwga2V5LCBEKTtcbn07XG52YXIgJGRlZmluZVByb3BlcnRpZXMgPSBmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGl0LCBQKSB7XG4gIGFuT2JqZWN0KGl0KTtcbiAgdmFyIGtleXMgPSBlbnVtS2V5cyhQID0gdG9JT2JqZWN0KFApKTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgbCA9IGtleXMubGVuZ3RoO1xuICB2YXIga2V5O1xuICB3aGlsZSAobCA+IGkpICRkZWZpbmVQcm9wZXJ0eShpdCwga2V5ID0ga2V5c1tpKytdLCBQW2tleV0pO1xuICByZXR1cm4gaXQ7XG59O1xudmFyICRjcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaXQsIFApIHtcbiAgcmV0dXJuIFAgPT09IHVuZGVmaW5lZCA/IF9jcmVhdGUoaXQpIDogJGRlZmluZVByb3BlcnRpZXMoX2NyZWF0ZShpdCksIFApO1xufTtcbnZhciAkcHJvcGVydHlJc0VudW1lcmFibGUgPSBmdW5jdGlvbiBwcm9wZXJ0eUlzRW51bWVyYWJsZShrZXkpIHtcbiAgdmFyIEUgPSBpc0VudW0uY2FsbCh0aGlzLCBrZXkgPSB0b1ByaW1pdGl2ZShrZXksIHRydWUpKTtcbiAgaWYgKHRoaXMgPT09IE9iamVjdFByb3RvICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICFoYXMoT1BTeW1ib2xzLCBrZXkpKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBFIHx8ICFoYXModGhpcywga2V5KSB8fCAhaGFzKEFsbFN5bWJvbHMsIGtleSkgfHwgaGFzKHRoaXMsIEhJRERFTikgJiYgdGhpc1tISURERU5dW2tleV0gPyBFIDogdHJ1ZTtcbn07XG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gIGl0ID0gdG9JT2JqZWN0KGl0KTtcbiAga2V5ID0gdG9QcmltaXRpdmUoa2V5LCB0cnVlKTtcbiAgaWYgKGl0ID09PSBPYmplY3RQcm90byAmJiBoYXMoQWxsU3ltYm9scywga2V5KSAmJiAhaGFzKE9QU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgRCA9IGdPUEQoaXQsIGtleSk7XG4gIGlmIChEICYmIGhhcyhBbGxTeW1ib2xzLCBrZXkpICYmICEoaGFzKGl0LCBISURERU4pICYmIGl0W0hJRERFTl1ba2V5XSkpIEQuZW51bWVyYWJsZSA9IHRydWU7XG4gIHJldHVybiBEO1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlOYW1lcyA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgdmFyIG5hbWVzID0gZ09QTih0b0lPYmplY3QoaXQpKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgaSA9IDA7XG4gIHZhciBrZXk7XG4gIHdoaWxlIChuYW1lcy5sZW5ndGggPiBpKSB7XG4gICAgaWYgKCFoYXMoQWxsU3ltYm9scywga2V5ID0gbmFtZXNbaSsrXSkgJiYga2V5ICE9IEhJRERFTiAmJiBrZXkgIT0gTUVUQSkgcmVzdWx0LnB1c2goa2V5KTtcbiAgfSByZXR1cm4gcmVzdWx0O1xufTtcbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gIHZhciBJU19PUCA9IGl0ID09PSBPYmplY3RQcm90bztcbiAgdmFyIG5hbWVzID0gZ09QTihJU19PUCA/IE9QU3ltYm9scyA6IHRvSU9iamVjdChpdCkpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBpID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKG5hbWVzLmxlbmd0aCA+IGkpIHtcbiAgICBpZiAoaGFzKEFsbFN5bWJvbHMsIGtleSA9IG5hbWVzW2krK10pICYmIChJU19PUCA/IGhhcyhPYmplY3RQcm90bywga2V5KSA6IHRydWUpKSByZXN1bHQucHVzaChBbGxTeW1ib2xzW2tleV0pO1xuICB9IHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyAxOS40LjEuMSBTeW1ib2woW2Rlc2NyaXB0aW9uXSlcbmlmICghVVNFX05BVElWRSkge1xuICAkU3ltYm9sID0gZnVuY3Rpb24gU3ltYm9sKCkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgJFN5bWJvbCkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhJyk7XG4gICAgdmFyIHRhZyA9IHVpZChhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7XG4gICAgdmFyICRzZXQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90bykgJHNldC5jYWxsKE9QU3ltYm9scywgdmFsdWUpO1xuICAgICAgaWYgKGhhcyh0aGlzLCBISURERU4pICYmIGhhcyh0aGlzW0hJRERFTl0sIHRhZykpIHRoaXNbSElEREVOXVt0YWddID0gZmFsc2U7XG4gICAgICBzZXRTeW1ib2xEZXNjKHRoaXMsIHRhZywgY3JlYXRlRGVzYygxLCB2YWx1ZSkpO1xuICAgIH07XG4gICAgaWYgKERFU0NSSVBUT1JTICYmIHNldHRlcikgc2V0U3ltYm9sRGVzYyhPYmplY3RQcm90bywgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiAkc2V0IH0pO1xuICAgIHJldHVybiB3cmFwKHRhZyk7XG4gIH07XG4gIHJlZGVmaW5lKCRTeW1ib2xbUFJPVE9UWVBFXSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2s7XG4gIH0pO1xuXG4gICRHT1BELmYgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICAkRFAuZiA9ICRkZWZpbmVQcm9wZXJ0eTtcbiAgcmVxdWlyZSgnLi9fb2JqZWN0LWdvcG4nKS5mID0gZ09QTkV4dC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mID0gJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuICAkR09QUy5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICBpZiAoREVTQ1JJUFRPUlMgJiYgIXJlcXVpcmUoJy4vX2xpYnJhcnknKSkge1xuICAgIHJlZGVmaW5lKE9iamVjdFByb3RvLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHRydWUpO1xuICB9XG5cbiAgd2tzRXh0LmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdrcyhuYW1lKSk7XG4gIH07XG59XG5cbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5XICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsIHsgU3ltYm9sOiAkU3ltYm9sIH0pO1xuXG5mb3IgKHZhciBlczZTeW1ib2xzID0gKFxuICAvLyAxOS40LjIuMiwgMTkuNC4yLjMsIDE5LjQuMi40LCAxOS40LjIuNiwgMTkuNC4yLjgsIDE5LjQuMi45LCAxOS40LjIuMTAsIDE5LjQuMi4xMSwgMTkuNC4yLjEyLCAxOS40LjIuMTMsIDE5LjQuMi4xNFxuICAnaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMnXG4pLnNwbGl0KCcsJyksIGogPSAwOyBlczZTeW1ib2xzLmxlbmd0aCA+IGo7KXdrcyhlczZTeW1ib2xzW2orK10pO1xuXG5mb3IgKHZhciB3ZWxsS25vd25TeW1ib2xzID0gJGtleXMod2tzLnN0b3JlKSwgayA9IDA7IHdlbGxLbm93blN5bWJvbHMubGVuZ3RoID4gazspIHdrc0RlZmluZSh3ZWxsS25vd25TeW1ib2xzW2srK10pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqICFVU0VfTkFUSVZFLCAnU3ltYm9sJywge1xuICAvLyAxOS40LjIuMSBTeW1ib2wuZm9yKGtleSlcbiAgJ2Zvcic6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICByZXR1cm4gaGFzKFN5bWJvbFJlZ2lzdHJ5LCBrZXkgKz0gJycpXG4gICAgICA/IFN5bWJvbFJlZ2lzdHJ5W2tleV1cbiAgICAgIDogU3ltYm9sUmVnaXN0cnlba2V5XSA9ICRTeW1ib2woa2V5KTtcbiAgfSxcbiAgLy8gMTkuNC4yLjUgU3ltYm9sLmtleUZvcihzeW0pXG4gIGtleUZvcjogZnVuY3Rpb24ga2V5Rm9yKHN5bSkge1xuICAgIGlmICghaXNTeW1ib2woc3ltKSkgdGhyb3cgVHlwZUVycm9yKHN5bSArICcgaXMgbm90IGEgc3ltYm9sIScpO1xuICAgIGZvciAodmFyIGtleSBpbiBTeW1ib2xSZWdpc3RyeSkgaWYgKFN5bWJvbFJlZ2lzdHJ5W2tleV0gPT09IHN5bSkgcmV0dXJuIGtleTtcbiAgfSxcbiAgdXNlU2V0dGVyOiBmdW5jdGlvbiAoKSB7IHNldHRlciA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBzZXR0ZXIgPSBmYWxzZTsgfVxufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TICsgJGV4cG9ydC5GICogIVVTRV9OQVRJVkUsICdPYmplY3QnLCB7XG4gIC8vIDE5LjEuMi4yIE9iamVjdC5jcmVhdGUoTyBbLCBQcm9wZXJ0aWVzXSlcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyAxOS4xLjIuNCBPYmplY3QuZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcylcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gMTkuMS4yLjMgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcylcbiAgZGVmaW5lUHJvcGVydGllczogJGRlZmluZVByb3BlcnRpZXMsXG4gIC8vIDE5LjEuMi42IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgUClcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAvLyAxOS4xLjIuNyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhPKVxuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lcyxcbiAgLy8gMTkuMS4yLjggT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhPKVxuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6ICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHNcbn0pO1xuXG4vLyBDaHJvbWUgMzggYW5kIDM5IGBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzYCBmYWlscyBvbiBwcmltaXRpdmVzXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zNDQzXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9ICRmYWlscyhmdW5jdGlvbiAoKSB7ICRHT1BTLmYoMSk7IH0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUyArICRleHBvcnQuRiAqIEZBSUxTX09OX1BSSU1JVElWRVMsICdPYmplY3QnLCB7XG4gIGdldE93blByb3BlcnR5U3ltYm9sczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGl0KSB7XG4gICAgcmV0dXJuICRHT1BTLmYodG9PYmplY3QoaXQpKTtcbiAgfVxufSk7XG5cbi8vIDI0LjMuMiBKU09OLnN0cmluZ2lmeSh2YWx1ZSBbLCByZXBsYWNlciBbLCBzcGFjZV1dKVxuJEpTT04gJiYgJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAoIVVTRV9OQVRJVkUgfHwgJGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIFMgPSAkU3ltYm9sKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAvLyBWOCB0aHJvd3Mgb24gYm94ZWQgc3ltYm9sc1xuICByZXR1cm4gX3N0cmluZ2lmeShbU10pICE9ICdbbnVsbF0nIHx8IF9zdHJpbmdpZnkoeyBhOiBTIH0pICE9ICd7fScgfHwgX3N0cmluZ2lmeShPYmplY3QoUykpICE9ICd7fSc7XG59KSksICdKU09OJywge1xuICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCkge1xuICAgIHZhciBhcmdzID0gW2l0XTtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIHJlcGxhY2VyLCAkcmVwbGFjZXI7XG4gICAgd2hpbGUgKGFyZ3VtZW50cy5sZW5ndGggPiBpKSBhcmdzLnB1c2goYXJndW1lbnRzW2krK10pO1xuICAgICRyZXBsYWNlciA9IHJlcGxhY2VyID0gYXJnc1sxXTtcbiAgICBpZiAoIWlzT2JqZWN0KHJlcGxhY2VyKSAmJiBpdCA9PT0gdW5kZWZpbmVkIHx8IGlzU3ltYm9sKGl0KSkgcmV0dXJuOyAvLyBJRTggcmV0dXJucyBzdHJpbmcgb24gdW5kZWZpbmVkXG4gICAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiAkcmVwbGFjZXIgPT0gJ2Z1bmN0aW9uJykgdmFsdWUgPSAkcmVwbGFjZXIuY2FsbCh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBhcmdzWzFdID0gcmVwbGFjZXI7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuYXBwbHkoJEpTT04sIGFyZ3MpO1xuICB9XG59KTtcblxuLy8gMTkuNC4zLjQgU3ltYm9sLnByb3RvdHlwZVtAQHRvUHJpbWl0aXZlXShoaW50KVxuJFN5bWJvbFtQUk9UT1RZUEVdW1RPX1BSSU1JVElWRV0gfHwgcmVxdWlyZSgnLi9faGlkZScpKCRTeW1ib2xbUFJPVE9UWVBFXSwgVE9fUFJJTUlUSVZFLCAkU3ltYm9sW1BST1RPVFlQRV0udmFsdWVPZik7XG4vLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCAnU3ltYm9sJyk7XG4vLyAyMC4yLjEuOSBNYXRoW0BAdG9TdHJpbmdUYWddXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuLy8gMjQuMy4zIEpTT05bQEB0b1N0cmluZ1RhZ11cbnNldFRvU3RyaW5nVGFnKGdsb2JhbC5KU09OLCAnSlNPTicsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdHlwZWQgPSByZXF1aXJlKCcuL190eXBlZCcpO1xudmFyIGJ1ZmZlciA9IHJlcXVpcmUoJy4vX3R5cGVkLWJ1ZmZlcicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi9fdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgQXJyYXlCdWZmZXIgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5BcnJheUJ1ZmZlcjtcbnZhciBzcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuL19zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgJEFycmF5QnVmZmVyID0gYnVmZmVyLkFycmF5QnVmZmVyO1xudmFyICREYXRhVmlldyA9IGJ1ZmZlci5EYXRhVmlldztcbnZhciAkaXNWaWV3ID0gJHR5cGVkLkFCViAmJiBBcnJheUJ1ZmZlci5pc1ZpZXc7XG52YXIgJHNsaWNlID0gJEFycmF5QnVmZmVyLnByb3RvdHlwZS5zbGljZTtcbnZhciBWSUVXID0gJHR5cGVkLlZJRVc7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcblxuJGV4cG9ydCgkZXhwb3J0LkcgKyAkZXhwb3J0LlcgKyAkZXhwb3J0LkYgKiAoQXJyYXlCdWZmZXIgIT09ICRBcnJheUJ1ZmZlciksIHsgQXJyYXlCdWZmZXI6ICRBcnJheUJ1ZmZlciB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LlMgKyAkZXhwb3J0LkYgKiAhJHR5cGVkLkNPTlNUUiwgQVJSQVlfQlVGRkVSLCB7XG4gIC8vIDI0LjEuMy4xIEFycmF5QnVmZmVyLmlzVmlldyhhcmcpXG4gIGlzVmlldzogZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gICAgcmV0dXJuICRpc1ZpZXcgJiYgJGlzVmlldyhpdCkgfHwgaXNPYmplY3QoaXQpICYmIFZJRVcgaW4gaXQ7XG4gIH1cbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuVSArICRleHBvcnQuRiAqIHJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24gKCkge1xuICByZXR1cm4gIW5ldyAkQXJyYXlCdWZmZXIoMikuc2xpY2UoMSwgdW5kZWZpbmVkKS5ieXRlTGVuZ3RoO1xufSksIEFSUkFZX0JVRkZFUiwge1xuICAvLyAyNC4xLjQuMyBBcnJheUJ1ZmZlci5wcm90b3R5cGUuc2xpY2Uoc3RhcnQsIGVuZClcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoJHNsaWNlICE9PSB1bmRlZmluZWQgJiYgZW5kID09PSB1bmRlZmluZWQpIHJldHVybiAkc2xpY2UuY2FsbChhbk9iamVjdCh0aGlzKSwgc3RhcnQpOyAvLyBGRiBmaXhcbiAgICB2YXIgbGVuID0gYW5PYmplY3QodGhpcykuYnl0ZUxlbmd0aDtcbiAgICB2YXIgZmlyc3QgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbik7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbiA6IGVuZCwgbGVuKTtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IChzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgJEFycmF5QnVmZmVyKSkodG9MZW5ndGgoZmluIC0gZmlyc3QpKTtcbiAgICB2YXIgdmlld1MgPSBuZXcgJERhdGFWaWV3KHRoaXMpO1xuICAgIHZhciB2aWV3VCA9IG5ldyAkRGF0YVZpZXcocmVzdWx0KTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChmaXJzdCA8IGZpbikge1xuICAgICAgdmlld1Quc2V0VWludDgoaW5kZXgrKywgdmlld1MuZ2V0VWludDgoZmlyc3QrKykpO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoQVJSQVlfQlVGRkVSKTtcbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuVyArICRleHBvcnQuRiAqICFyZXF1aXJlKCcuL190eXBlZCcpLkFCViwge1xuICBEYXRhVmlldzogcmVxdWlyZSgnLi9fdHlwZWQtYnVmZmVyJykuRGF0YVZpZXdcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnRmxvYXQ2NCcsIDgsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBGbG9hdDY0QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnSW50MTYnLCAyLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdJbnQzMicsIDQsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBJbnQzMkFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ0ludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gSW50OEFycmF5KGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGRhdGEsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XG4gIH07XG59KTtcbiIsInJlcXVpcmUoJy4vX3R5cGVkLWFycmF5JykoJ1VpbnQxNicsIDIsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50MTZBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50MzInLCA0LCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDMyQXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwicmVxdWlyZSgnLi9fdHlwZWQtYXJyYXknKSgnVWludDgnLCAxLCBmdW5jdGlvbiAoaW5pdCkge1xuICByZXR1cm4gZnVuY3Rpb24gVWludDhBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSk7XG4iLCJyZXF1aXJlKCcuL190eXBlZC1hcnJheScpKCdVaW50OCcsIDEsIGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBVaW50OENsYW1wZWRBcnJheShkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgICByZXR1cm4gaW5pdCh0aGlzLCBkYXRhLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xuICB9O1xufSwgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi9fZ2xvYmFsJyk7XG52YXIgZWFjaCA9IHJlcXVpcmUoJy4vX2FycmF5LW1ldGhvZHMnKSgwKTtcbnZhciByZWRlZmluZSA9IHJlcXVpcmUoJy4vX3JlZGVmaW5lJyk7XG52YXIgbWV0YSA9IHJlcXVpcmUoJy4vX21ldGEnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCcuL19vYmplY3QtYXNzaWduJyk7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG52YXIgdmFsaWRhdGUgPSByZXF1aXJlKCcuL192YWxpZGF0ZS1jb2xsZWN0aW9uJyk7XG52YXIgTkFUSVZFX1dFQUtfTUFQID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIElTX0lFMTEgPSAhZ2xvYmFsLkFjdGl2ZVhPYmplY3QgJiYgJ0FjdGl2ZVhPYmplY3QnIGluIGdsb2JhbDtcbnZhciBXRUFLX01BUCA9ICdXZWFrTWFwJztcbnZhciBnZXRXZWFrID0gbWV0YS5nZXRXZWFrO1xudmFyIGlzRXh0ZW5zaWJsZSA9IE9iamVjdC5pc0V4dGVuc2libGU7XG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IHdlYWsudWZzdG9yZTtcbnZhciBJbnRlcm5hbE1hcDtcblxudmFyIHdyYXBwZXIgPSBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA+IDAgPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxudmFyIG1ldGhvZHMgPSB7XG4gIC8vIDIzLjMuMy4zIFdlYWtNYXAucHJvdG90eXBlLmdldChrZXkpXG4gIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICB2YXIgZGF0YSA9IGdldFdlYWsoa2V5KTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZSh2YWxpZGF0ZSh0aGlzLCBXRUFLX01BUCkpLmdldChrZXkpO1xuICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3RoaXMuX2ldIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfSxcbiAgLy8gMjMuMy4zLjUgV2Vha01hcC5wcm90b3R5cGUuc2V0KGtleSwgdmFsdWUpXG4gIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gd2Vhay5kZWYodmFsaWRhdGUodGhpcywgV0VBS19NQVApLCBrZXksIHZhbHVlKTtcbiAgfVxufTtcblxuLy8gMjMuMyBXZWFrTWFwIE9iamVjdHNcbnZhciAkV2Vha01hcCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfTUFQLCB3cmFwcGVyLCBtZXRob2RzLCB3ZWFrLCB0cnVlLCB0cnVlKTtcblxuLy8gSUUxMSBXZWFrTWFwIGZyb3plbiBrZXlzIGZpeFxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsTWFwID0gd2Vhay5nZXRDb25zdHJ1Y3Rvcih3cmFwcGVyLCBXRUFLX01BUCk7XG4gIGFzc2lnbihJbnRlcm5hbE1hcC5wcm90b3R5cGUsIG1ldGhvZHMpO1xuICBtZXRhLk5FRUQgPSB0cnVlO1xuICBlYWNoKFsnZGVsZXRlJywgJ2hhcycsICdnZXQnLCAnc2V0J10sIGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgcHJvdG8gPSAkV2Vha01hcC5wcm90b3R5cGU7XG4gICAgdmFyIG1ldGhvZCA9IHByb3RvW2tleV07XG4gICAgcmVkZWZpbmUocHJvdG8sIGtleSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIC8vIHN0b3JlIGZyb3plbiBvYmplY3RzIG9uIGludGVybmFsIHdlYWttYXAgc2hpbVxuICAgICAgaWYgKGlzT2JqZWN0KGEpICYmICFpc0V4dGVuc2libGUoYSkpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9mKSB0aGlzLl9mID0gbmV3IEludGVybmFsTWFwKCk7XG4gICAgICAgIHZhciByZXN1bHQgPSB0aGlzLl9mW2tleV0oYSwgYik7XG4gICAgICAgIHJldHVybiBrZXkgPT0gJ3NldCcgPyB0aGlzIDogcmVzdWx0O1xuICAgICAgLy8gc3RvcmUgYWxsIHRoZSByZXN0IG9uIG5hdGl2ZSB3ZWFrbWFwXG4gICAgICB9IHJldHVybiBtZXRob2QuY2FsbCh0aGlzLCBhLCBiKTtcbiAgICB9KTtcbiAgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgd2VhayA9IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24td2VhaycpO1xudmFyIHZhbGlkYXRlID0gcmVxdWlyZSgnLi9fdmFsaWRhdGUtY29sbGVjdGlvbicpO1xudmFyIFdFQUtfU0VUID0gJ1dlYWtTZXQnO1xuXG4vLyAyMy40IFdlYWtTZXQgT2JqZWN0c1xucmVxdWlyZSgnLi9fY29sbGVjdGlvbicpKFdFQUtfU0VULCBmdW5jdGlvbiAoZ2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrU2V0KCkgeyByZXR1cm4gZ2V0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPiAwID8gYXJndW1lbnRzWzBdIDogdW5kZWZpbmVkKTsgfTtcbn0sIHtcbiAgLy8gMjMuNC4zLjEgV2Vha1NldC5wcm90b3R5cGUuYWRkKHZhbHVlKVxuICBhZGQ6IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgIHJldHVybiB3ZWFrLmRlZih2YWxpZGF0ZSh0aGlzLCBXRUFLX1NFVCksIHZhbHVlLCB0cnVlKTtcbiAgfVxufSwgd2VhaywgZmFsc2UsIHRydWUpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXRNYXBcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBhRnVuY3Rpb24gPSByZXF1aXJlKCcuL19hLWZ1bmN0aW9uJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdE1hcDogZnVuY3Rpb24gZmxhdE1hcChjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIHNvdXJjZUxlbiwgQTtcbiAgICBhRnVuY3Rpb24oY2FsbGJhY2tmbik7XG4gICAgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgZmxhdHRlbkludG9BcnJheShBLCBPLCBPLCBzb3VyY2VMZW4sIDAsIDEsIGNhbGxiYWNrZm4sIGFyZ3VtZW50c1sxXSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuXG5yZXF1aXJlKCcuL19hZGQtdG8tdW5zY29wYWJsZXMnKSgnZmxhdE1hcCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1mbGF0TWFwLyNzZWMtQXJyYXkucHJvdG90eXBlLmZsYXR0ZW5cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgZmxhdHRlbkludG9BcnJheSA9IHJlcXVpcmUoJy4vX2ZsYXR0ZW4taW50by1hcnJheScpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJyk7XG52YXIgYXJyYXlTcGVjaWVzQ3JlYXRlID0gcmVxdWlyZSgnLi9fYXJyYXktc3BlY2llcy1jcmVhdGUnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlAsICdBcnJheScsIHtcbiAgZmxhdHRlbjogZnVuY3Rpb24gZmxhdHRlbigvKiBkZXB0aEFyZyA9IDEgKi8pIHtcbiAgICB2YXIgZGVwdGhBcmcgPSBhcmd1bWVudHNbMF07XG4gICAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgICB2YXIgc291cmNlTGVuID0gdG9MZW5ndGgoTy5sZW5ndGgpO1xuICAgIHZhciBBID0gYXJyYXlTcGVjaWVzQ3JlYXRlKE8sIDApO1xuICAgIGZsYXR0ZW5JbnRvQXJyYXkoQSwgTywgTywgc291cmNlTGVuLCAwLCBkZXB0aEFyZyA9PT0gdW5kZWZpbmVkID8gMSA6IHRvSW50ZWdlcihkZXB0aEFyZykpO1xuICAgIHJldHVybiBBO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2ZsYXR0ZW4nKTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L0FycmF5LnByb3RvdHlwZS5pbmNsdWRlc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCwgJ0FycmF5Jywge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoZWwgLyogLCBmcm9tSW5kZXggPSAwICovKSB7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vcndhbGRyb24vdGMzOS1ub3Rlcy9ibG9iL21hc3Rlci9lczYvMjAxNC0wOS9zZXB0LTI1Lm1kIzUxMC1nbG9iYWxhc2FwLWZvci1lbnF1ZXVpbmctYS1taWNyb3Rhc2tcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgbWljcm90YXNrID0gcmVxdWlyZSgnLi9fbWljcm90YXNrJykoKTtcbnZhciBwcm9jZXNzID0gcmVxdWlyZSgnLi9fZ2xvYmFsJykucHJvY2VzcztcbnZhciBpc05vZGUgPSByZXF1aXJlKCcuL19jb2YnKShwcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG5cbiRleHBvcnQoJGV4cG9ydC5HLCB7XG4gIGFzYXA6IGZ1bmN0aW9uIGFzYXAoZm4pIHtcbiAgICB2YXIgZG9tYWluID0gaXNOb2RlICYmIHByb2Nlc3MuZG9tYWluO1xuICAgIG1pY3JvdGFzayhkb21haW4gPyBkb21haW4uYmluZChmbikgOiBmbik7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9wcm9wb3NhbC1pcy1lcnJvclxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdFcnJvcicsIHtcbiAgaXNFcnJvcjogZnVuY3Rpb24gaXNFcnJvcihpdCkge1xuICAgIHJldHVybiBjb2YoaXQpID09PSAnRXJyb3InO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWdsb2JhbFxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgZ2xvYmFsOiByZXF1aXJlKCcuL19nbG9iYWwnKSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLW1hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ01hcCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtbWFwLm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdNYXAnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnTWFwJywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdNYXAnKSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgY2xhbXA6IGZ1bmN0aW9uIGNsYW1wKHgsIGxvd2VyLCB1cHBlcikge1xuICAgIHJldHVybiBNYXRoLm1pbih1cHBlciwgTWF0aC5tYXgobG93ZXIsIHgpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IERFR19QRVJfUkFEOiBNYXRoLlBJIC8gMTgwIH0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBSQURfUEVSX0RFRyA9IDE4MCAvIE1hdGguUEk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZGVncmVlczogZnVuY3Rpb24gZGVncmVlcyhyYWRpYW5zKSB7XG4gICAgcmV0dXJuIHJhZGlhbnMgKiBSQURfUEVSX0RFRztcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL3J3YWxkcm9uLmdpdGh1Yi5pby9wcm9wb3NhbC1tYXRoLWV4dGVuc2lvbnMvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHNjYWxlID0gcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpO1xudmFyIGZyb3VuZCA9IHJlcXVpcmUoJy4vX21hdGgtZnJvdW5kJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgZnNjYWxlOiBmdW5jdGlvbiBmc2NhbGUoeCwgaW5Mb3csIGluSGlnaCwgb3V0TG93LCBvdXRIaWdoKSB7XG4gICAgcmV0dXJuIGZyb3VuZChzY2FsZSh4LCBpbkxvdywgaW5IaWdoLCBvdXRMb3csIG91dEhpZ2gpKTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpYWRkaDogZnVuY3Rpb24gaWFkZGgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxICsgKHkxID4+PiAwKSArICgoJHgwICYgJHkwIHwgKCR4MCB8ICR5MCkgJiB+KCR4MCArICR5MCA+Pj4gMCkpID4+PiAzMSkgfCAwO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL0JyZW5kYW5FaWNoLzQyOTRkNWMyMTJhNmQyMjU0NzAzXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIGltdWxoOiBmdW5jdGlvbiBpbXVsaCh1LCB2KSB7XG4gICAgdmFyIFVJTlQxNiA9IDB4ZmZmZjtcbiAgICB2YXIgJHUgPSArdTtcbiAgICB2YXIgJHYgPSArdjtcbiAgICB2YXIgdTAgPSAkdSAmIFVJTlQxNjtcbiAgICB2YXIgdjAgPSAkdiAmIFVJTlQxNjtcbiAgICB2YXIgdTEgPSAkdSA+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+PiAxNjtcbiAgICB2YXIgdCA9ICh1MSAqIHYwID4+PiAwKSArICh1MCAqIHYwID4+PiAxNik7XG4gICAgcmV0dXJuIHUxICogdjEgKyAodCA+PiAxNikgKyAoKHUwICogdjEgPj4+IDApICsgKHQgJiBVSU5UMTYpID4+IDE2KTtcbiAgfVxufSk7XG4iLCIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9CcmVuZGFuRWljaC80Mjk0ZDVjMjEyYTZkMjI1NDcwM1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywge1xuICBpc3ViaDogZnVuY3Rpb24gaXN1YmgoeDAsIHgxLCB5MCwgeTEpIHtcbiAgICB2YXIgJHgwID0geDAgPj4+IDA7XG4gICAgdmFyICR4MSA9IHgxID4+PiAwO1xuICAgIHZhciAkeTAgPSB5MCA+Pj4gMDtcbiAgICByZXR1cm4gJHgxIC0gKHkxID4+PiAwKSAtICgofiR4MCAmICR5MCB8IH4oJHgwIF4gJHkwKSAmICR4MCAtICR5MCA+Pj4gMCkgPj4+IDMxKSB8IDA7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBSQURfUEVSX0RFRzogMTgwIC8gTWF0aC5QSSB9KTtcbiIsIi8vIGh0dHBzOi8vcndhbGRyb24uZ2l0aHViLmlvL3Byb3Bvc2FsLW1hdGgtZXh0ZW5zaW9ucy9cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgREVHX1BFUl9SQUQgPSBNYXRoLlBJIC8gMTgwO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7XG4gIHJhZGlhbnM6IGZ1bmN0aW9uIHJhZGlhbnMoZGVncmVlcykge1xuICAgIHJldHVybiBkZWdyZWVzICogREVHX1BFUl9SQUQ7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9yd2FsZHJvbi5naXRodWIuaW8vcHJvcG9zYWwtbWF0aC1leHRlbnNpb25zL1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcblxuJGV4cG9ydCgkZXhwb3J0LlMsICdNYXRoJywgeyBzY2FsZTogcmVxdWlyZSgnLi9fbWF0aC1zY2FsZScpIH0pO1xuIiwiLy8gaHR0cDovL2pmYmFzdGllbi5naXRodWIuaW8vcGFwZXJzL01hdGguc2lnbmJpdC5odG1sXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ01hdGgnLCB7IHNpZ25iaXQ6IGZ1bmN0aW9uIHNpZ25iaXQoeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlXG4gIHJldHVybiAoeCA9ICt4KSAhPSB4ID8geCA6IHggPT0gMCA/IDEgLyB4ID09IEluZmluaXR5IDogeCA+IDA7XG59IH0pO1xuIiwiLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vQnJlbmRhbkVpY2gvNDI5NGQ1YzIxMmE2ZDIyNTQ3MDNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnTWF0aCcsIHtcbiAgdW11bGg6IGZ1bmN0aW9uIHVtdWxoKHUsIHYpIHtcbiAgICB2YXIgVUlOVDE2ID0gMHhmZmZmO1xuICAgIHZhciAkdSA9ICt1O1xuICAgIHZhciAkdiA9ICt2O1xuICAgIHZhciB1MCA9ICR1ICYgVUlOVDE2O1xuICAgIHZhciB2MCA9ICR2ICYgVUlOVDE2O1xuICAgIHZhciB1MSA9ICR1ID4+PiAxNjtcbiAgICB2YXIgdjEgPSAkdiA+Pj4gMTY7XG4gICAgdmFyIHQgPSAodTEgKiB2MCA+Pj4gMCkgKyAodTAgKiB2MCA+Pj4gMTYpO1xuICAgIHJldHVybiB1MSAqIHYxICsgKHQgPj4+IDE2KSArICgodTAgKiB2MSA+Pj4gMCkgKyAodCAmIFVJTlQxNikgPj4+IDE2KTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX29iamVjdC1kcCcpO1xuXG4vLyBCLjIuMi4yIE9iamVjdC5wcm90b3R5cGUuX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpXG5yZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpICYmICRleHBvcnQoJGV4cG9ydC5QICsgcmVxdWlyZSgnLi9fb2JqZWN0LWZvcmNlZC1wYW0nKSwgJ09iamVjdCcsIHtcbiAgX19kZWZpbmVHZXR0ZXJfXzogZnVuY3Rpb24gX19kZWZpbmVHZXR0ZXJfXyhQLCBnZXR0ZXIpIHtcbiAgICAkZGVmaW5lUHJvcGVydHkuZih0b09iamVjdCh0aGlzKSwgUCwgeyBnZXQ6IGFGdW5jdGlvbihnZXR0ZXIpLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4vX3RvLW9iamVjdCcpO1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCcuL19vYmplY3QtZHAnKTtcblxuLy8gQi4yLjIuMyBPYmplY3QucHJvdG90eXBlLl9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKVxucmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSAmJiAkZXhwb3J0KCRleHBvcnQuUCArIHJlcXVpcmUoJy4vX29iamVjdC1mb3JjZWQtcGFtJyksICdPYmplY3QnLCB7XG4gIF9fZGVmaW5lU2V0dGVyX186IGZ1bmN0aW9uIF9fZGVmaW5lU2V0dGVyX18oUCwgc2V0dGVyKSB7XG4gICAgJGRlZmluZVByb3BlcnR5LmYodG9PYmplY3QodGhpcyksIFAsIHsgc2V0OiBhRnVuY3Rpb24oc2V0dGVyKSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlIH0pO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkZW50cmllcyA9IHJlcXVpcmUoJy4vX29iamVjdC10by1hcnJheScpKHRydWUpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgZW50cmllczogZnVuY3Rpb24gZW50cmllcyhpdCkge1xuICAgIHJldHVybiAkZW50cmllcyhpdCk7XG4gIH1cbn0pO1xuIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvcnNcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4vX293bi1rZXlzJyk7XG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpO1xudmFyIGdPUEQgPSByZXF1aXJlKCcuL19vYmplY3QtZ29wZCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fY3JlYXRlLXByb3BlcnR5Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOiBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9iamVjdCkge1xuICAgIHZhciBPID0gdG9JT2JqZWN0KG9iamVjdCk7XG4gICAgdmFyIGdldERlc2MgPSBnT1BELmY7XG4gICAgdmFyIGtleXMgPSBvd25LZXlzKE8pO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGtleSwgZGVzYztcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpKSB7XG4gICAgICBkZXNjID0gZ2V0RGVzYyhPLCBrZXkgPSBrZXlzW2krK10pO1xuICAgICAgaWYgKGRlc2MgIT09IHVuZGVmaW5lZCkgY3JlYXRlUHJvcGVydHkocmVzdWx0LCBrZXksIGRlc2MpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNCBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwR2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cEdldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cEdldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELmdldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuL190by1vYmplY3QnKTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vX3RvLXByaW1pdGl2ZScpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4vX29iamVjdC1nb3BkJykuZjtcblxuLy8gQi4yLjIuNSBPYmplY3QucHJvdG90eXBlLl9fbG9va3VwU2V0dGVyX18oUClcbnJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgJGV4cG9ydCgkZXhwb3J0LlAgKyByZXF1aXJlKCcuL19vYmplY3QtZm9yY2VkLXBhbScpLCAnT2JqZWN0Jywge1xuICBfX2xvb2t1cFNldHRlcl9fOiBmdW5jdGlvbiBfX2xvb2t1cFNldHRlcl9fKFApIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICAgIHZhciBLID0gdG9QcmltaXRpdmUoUCwgdHJ1ZSk7XG4gICAgdmFyIEQ7XG4gICAgZG8ge1xuICAgICAgaWYgKEQgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywgSykpIHJldHVybiBELnNldDtcbiAgICB9IHdoaWxlIChPID0gZ2V0UHJvdG90eXBlT2YoTykpO1xuICB9XG59KTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLW9iamVjdC12YWx1ZXMtZW50cmllc1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciAkdmFsdWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykoZmFsc2UpO1xuXG4kZXhwb3J0KCRleHBvcnQuUywgJ09iamVjdCcsIHtcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoaXQpIHtcbiAgICByZXR1cm4gJHZhbHVlcyhpdCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3plbnBhcnNpbmcvZXMtb2JzZXJ2YWJsZVxudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4vX21pY3JvdGFzaycpKCk7XG52YXIgT0JTRVJWQUJMRSA9IHJlcXVpcmUoJy4vX3drcycpKCdvYnNlcnZhYmxlJyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4vX2FuLWluc3RhbmNlJyk7XG52YXIgcmVkZWZpbmVBbGwgPSByZXF1aXJlKCcuL19yZWRlZmluZS1hbGwnKTtcbnZhciBoaWRlID0gcmVxdWlyZSgnLi9faGlkZScpO1xudmFyIGZvck9mID0gcmVxdWlyZSgnLi9fZm9yLW9mJyk7XG52YXIgUkVUVVJOID0gZm9yT2YuUkVUVVJOO1xuXG52YXIgZ2V0TWV0aG9kID0gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiA9PSBudWxsID8gdW5kZWZpbmVkIDogYUZ1bmN0aW9uKGZuKTtcbn07XG5cbnZhciBjbGVhbnVwU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICB2YXIgY2xlYW51cCA9IHN1YnNjcmlwdGlvbi5fYztcbiAgaWYgKGNsZWFudXApIHtcbiAgICBzdWJzY3JpcHRpb24uX2MgPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cCgpO1xuICB9XG59O1xuXG52YXIgc3Vic2NyaXB0aW9uQ2xvc2VkID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICByZXR1cm4gc3Vic2NyaXB0aW9uLl9vID09PSB1bmRlZmluZWQ7XG59O1xuXG52YXIgY2xvc2VTdWJzY3JpcHRpb24gPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIGlmICghc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHtcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgY2xlYW51cFN1YnNjcmlwdGlvbihzdWJzY3JpcHRpb24pO1xuICB9XG59O1xuXG52YXIgU3Vic2NyaXB0aW9uID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzdWJzY3JpYmVyKSB7XG4gIGFuT2JqZWN0KG9ic2VydmVyKTtcbiAgdGhpcy5fYyA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fbyA9IG9ic2VydmVyO1xuICBvYnNlcnZlciA9IG5ldyBTdWJzY3JpcHRpb25PYnNlcnZlcih0aGlzKTtcbiAgdHJ5IHtcbiAgICB2YXIgY2xlYW51cCA9IHN1YnNjcmliZXIob2JzZXJ2ZXIpO1xuICAgIHZhciBzdWJzY3JpcHRpb24gPSBjbGVhbnVwO1xuICAgIGlmIChjbGVhbnVwICE9IG51bGwpIHtcbiAgICAgIGlmICh0eXBlb2YgY2xlYW51cC51bnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHsgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7IH07XG4gICAgICBlbHNlIGFGdW5jdGlvbihjbGVhbnVwKTtcbiAgICAgIHRoaXMuX2MgPSBjbGVhbnVwO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgIHJldHVybjtcbiAgfSBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHRoaXMpKSBjbGVhbnVwU3Vic2NyaXB0aW9uKHRoaXMpO1xufTtcblxuU3Vic2NyaXB0aW9uLnByb3RvdHlwZSA9IHJlZGVmaW5lQWxsKHt9LCB7XG4gIHVuc3Vic2NyaWJlOiBmdW5jdGlvbiB1bnN1YnNjcmliZSgpIHsgY2xvc2VTdWJzY3JpcHRpb24odGhpcyk7IH1cbn0pO1xuXG52YXIgU3Vic2NyaXB0aW9uT2JzZXJ2ZXIgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gIHRoaXMuX3MgPSBzdWJzY3JpcHRpb247XG59O1xuXG5TdWJzY3JpcHRpb25PYnNlcnZlci5wcm90b3R5cGUgPSByZWRlZmluZUFsbCh7fSwge1xuICBuZXh0OiBmdW5jdGlvbiBuZXh0KHZhbHVlKSB7XG4gICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuX3M7XG4gICAgaWYgKCFzdWJzY3JpcHRpb25DbG9zZWQoc3Vic2NyaXB0aW9uKSkge1xuICAgICAgdmFyIG9ic2VydmVyID0gc3Vic2NyaXB0aW9uLl9vO1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIG0gPSBnZXRNZXRob2Qob2JzZXJ2ZXIubmV4dCk7XG4gICAgICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG9ic2VydmVyLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2xvc2VTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuICBlcnJvcjogZnVuY3Rpb24gZXJyb3IodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoc3Vic2NyaXB0aW9uQ2xvc2VkKHN1YnNjcmlwdGlvbikpIHRocm93IHZhbHVlO1xuICAgIHZhciBvYnNlcnZlciA9IHN1YnNjcmlwdGlvbi5fbztcbiAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBtID0gZ2V0TWV0aG9kKG9ic2VydmVyLmVycm9yKTtcbiAgICAgIGlmICghbSkgdGhyb3cgdmFsdWU7XG4gICAgICB2YWx1ZSA9IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfSBjbGVhbnVwU3Vic2NyaXB0aW9uKHN1YnNjcmlwdGlvbik7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9LFxuICBjb21wbGV0ZTogZnVuY3Rpb24gY29tcGxldGUodmFsdWUpIHtcbiAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5fcztcbiAgICBpZiAoIXN1YnNjcmlwdGlvbkNsb3NlZChzdWJzY3JpcHRpb24pKSB7XG4gICAgICB2YXIgb2JzZXJ2ZXIgPSBzdWJzY3JpcHRpb24uX287XG4gICAgICBzdWJzY3JpcHRpb24uX28gPSB1bmRlZmluZWQ7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbSA9IGdldE1ldGhvZChvYnNlcnZlci5jb21wbGV0ZSk7XG4gICAgICAgIHZhbHVlID0gbSA/IG0uY2FsbChvYnNlcnZlciwgdmFsdWUpIDogdW5kZWZpbmVkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9IGNsZWFudXBTdWJzY3JpcHRpb24oc3Vic2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgJE9ic2VydmFibGUgPSBmdW5jdGlvbiBPYnNlcnZhYmxlKHN1YnNjcmliZXIpIHtcbiAgYW5JbnN0YW5jZSh0aGlzLCAkT2JzZXJ2YWJsZSwgJ09ic2VydmFibGUnLCAnX2YnKS5fZiA9IGFGdW5jdGlvbihzdWJzY3JpYmVyKTtcbn07XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLnByb3RvdHlwZSwge1xuICBzdWJzY3JpYmU6IGZ1bmN0aW9uIHN1YnNjcmliZShvYnNlcnZlcikge1xuICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKG9ic2VydmVyLCB0aGlzLl9mKTtcbiAgfSxcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChmbikge1xuICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICByZXR1cm4gbmV3IChjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGFGdW5jdGlvbihmbik7XG4gICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhhdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGZuKHZhbHVlKTtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiByZWplY3QsXG4gICAgICAgIGNvbXBsZXRlOiByZXNvbHZlXG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbnJlZGVmaW5lQWxsKCRPYnNlcnZhYmxlLCB7XG4gIGZyb206IGZ1bmN0aW9uIGZyb20oeCkge1xuICAgIHZhciBDID0gdHlwZW9mIHRoaXMgPT09ICdmdW5jdGlvbicgPyB0aGlzIDogJE9ic2VydmFibGU7XG4gICAgdmFyIG1ldGhvZCA9IGdldE1ldGhvZChhbk9iamVjdCh4KVtPQlNFUlZBQkxFXSk7XG4gICAgaWYgKG1ldGhvZCkge1xuICAgICAgdmFyIG9ic2VydmFibGUgPSBhbk9iamVjdChtZXRob2QuY2FsbCh4KSk7XG4gICAgICByZXR1cm4gb2JzZXJ2YWJsZS5jb25zdHJ1Y3RvciA9PT0gQyA/IG9ic2VydmFibGUgOiBuZXcgQyhmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUuc3Vic2NyaWJlKG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IEMoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmb3JPZih4LCBmYWxzZSwgZnVuY3Rpb24gKGl0KSB7XG4gICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoaXQpO1xuICAgICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuIFJFVFVSTjtcbiAgICAgICAgICAgIH0pID09PSBSRVRVUk4pIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICBpZiAoZG9uZSkgdGhyb3cgZTtcbiAgICAgICAgICAgIG9ic2VydmVyLmVycm9yKGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfSxcbiAgb2Y6IGZ1bmN0aW9uIG9mKCkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aCwgaXRlbXMgPSBuZXcgQXJyYXkobCk7IGkgPCBsOykgaXRlbXNbaV0gPSBhcmd1bWVudHNbaSsrXTtcbiAgICByZXR1cm4gbmV3ICh0eXBlb2YgdGhpcyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMgOiAkT2JzZXJ2YWJsZSkoZnVuY3Rpb24gKG9ic2VydmVyKSB7XG4gICAgICB2YXIgZG9uZSA9IGZhbHNlO1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFkb25lKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpdGVtcy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChpdGVtc1tqXSk7XG4gICAgICAgICAgICBpZiAoZG9uZSkgcmV0dXJuO1xuICAgICAgICAgIH0gb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyBkb25lID0gdHJ1ZTsgfTtcbiAgICB9KTtcbiAgfVxufSk7XG5cbmhpZGUoJE9ic2VydmFibGUucHJvdG90eXBlLCBPQlNFUlZBQkxFLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KTtcblxuJGV4cG9ydCgkZXhwb3J0LkcsIHsgT2JzZXJ2YWJsZTogJE9ic2VydmFibGUgfSk7XG5cbnJlcXVpcmUoJy4vX3NldC1zcGVjaWVzJykoJ09ic2VydmFibGUnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtZmluYWxseVxuJ3VzZSBzdHJpY3QnO1xudmFyICRleHBvcnQgPSByZXF1aXJlKCcuL19leHBvcnQnKTtcbnZhciBjb3JlID0gcmVxdWlyZSgnLi9fY29yZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4vX3NwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4vX3Byb21pc2UtcmVzb2x2ZScpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuUiwgJ1Byb21pc2UnLCB7ICdmaW5hbGx5JzogZnVuY3Rpb24gKG9uRmluYWxseSkge1xuICB2YXIgQyA9IHNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzLCBjb3JlLlByb21pc2UgfHwgZ2xvYmFsLlByb21pc2UpO1xuICB2YXIgaXNGdW5jdGlvbiA9IHR5cGVvZiBvbkZpbmFsbHkgPT0gJ2Z1bmN0aW9uJztcbiAgcmV0dXJuIHRoaXMudGhlbihcbiAgICBpc0Z1bmN0aW9uID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDLCBvbkZpbmFsbHkoKSkudGhlbihmdW5jdGlvbiAoKSB7IHJldHVybiB4OyB9KTtcbiAgICB9IDogb25GaW5hbGx5LFxuICAgIGlzRnVuY3Rpb24gPyBmdW5jdGlvbiAoZSkge1xuICAgICAgcmV0dXJuIHByb21pc2VSZXNvbHZlKEMsIG9uRmluYWxseSgpKS50aGVuKGZ1bmN0aW9uICgpIHsgdGhyb3cgZTsgfSk7XG4gICAgfSA6IG9uRmluYWxseVxuICApO1xufSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXByb21pc2UtdHJ5XG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi9fbmV3LXByb21pc2UtY2FwYWJpbGl0eScpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuL19wZXJmb3JtJyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnUHJvbWlzZScsIHsgJ3RyeSc6IGZ1bmN0aW9uIChjYWxsYmFja2ZuKSB7XG4gIHZhciBwcm9taXNlQ2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5LmYodGhpcyk7XG4gIHZhciByZXN1bHQgPSBwZXJmb3JtKGNhbGxiYWNrZm4pO1xuICAocmVzdWx0LmUgPyBwcm9taXNlQ2FwYWJpbGl0eS5yZWplY3QgOiBwcm9taXNlQ2FwYWJpbGl0eS5yZXNvbHZlKShyZXN1bHQudik7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9IG1ldGFkYXRhLnNldDtcblxubWV0YWRhdGEuZXhwKHsgZGVmaW5lTWV0YWRhdGE6IGZ1bmN0aW9uIGRlZmluZU1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCB0YXJnZXQsIHRhcmdldEtleSkge1xuICBvcmRpbmFyeURlZmluZU93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlLCBhbk9iamVjdCh0YXJnZXQpLCB0b01ldGFLZXkodGFyZ2V0S2V5KSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcbnZhciBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwID0gbWV0YWRhdGEubWFwO1xudmFyIHN0b3JlID0gbWV0YWRhdGEuc3RvcmU7XG5cbm1ldGFkYXRhLmV4cCh7IGRlbGV0ZU1ldGFkYXRhOiBmdW5jdGlvbiBkZWxldGVNZXRhZGF0YShtZXRhZGF0YUtleSwgdGFyZ2V0IC8qICwgdGFyZ2V0S2V5ICovKSB7XG4gIHZhciB0YXJnZXRLZXkgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IHVuZGVmaW5lZCA6IHRvTWV0YUtleShhcmd1bWVudHNbMl0pO1xuICB2YXIgbWV0YWRhdGFNYXAgPSBnZXRPckNyZWF0ZU1ldGFkYXRhTWFwKGFuT2JqZWN0KHRhcmdldCksIHRhcmdldEtleSwgZmFsc2UpO1xuICBpZiAobWV0YWRhdGFNYXAgPT09IHVuZGVmaW5lZCB8fCAhbWV0YWRhdGFNYXBbJ2RlbGV0ZSddKG1ldGFkYXRhS2V5KSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobWV0YWRhdGFNYXAuc2l6ZSkgcmV0dXJuIHRydWU7XG4gIHZhciB0YXJnZXRNZXRhZGF0YSA9IHN0b3JlLmdldCh0YXJnZXQpO1xuICB0YXJnZXRNZXRhZGF0YVsnZGVsZXRlJ10odGFyZ2V0S2V5KTtcbiAgcmV0dXJuICEhdGFyZ2V0TWV0YWRhdGEuc2l6ZSB8fCBzdG9yZVsnZGVsZXRlJ10odGFyZ2V0KTtcbn0gfSk7XG4iLCJ2YXIgU2V0ID0gcmVxdWlyZSgnLi9lczYuc2V0Jyk7XG52YXIgZnJvbSA9IHJlcXVpcmUoJy4vX2FycmF5LWZyb20taXRlcmFibGUnKTtcbnZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG52YXIgb3JkaW5hcnlNZXRhZGF0YUtleXMgPSBmdW5jdGlvbiAoTywgUCkge1xuICB2YXIgb0tleXMgPSBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyhPLCBQKTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICBpZiAocGFyZW50ID09PSBudWxsKSByZXR1cm4gb0tleXM7XG4gIHZhciBwS2V5cyA9IG9yZGluYXJ5TWV0YWRhdGFLZXlzKHBhcmVudCwgUCk7XG4gIHJldHVybiBwS2V5cy5sZW5ndGggPyBvS2V5cy5sZW5ndGggPyBmcm9tKG5ldyBTZXQob0tleXMuY29uY2F0KHBLZXlzKSkpIDogcEtleXMgOiBvS2V5cztcbn07XG5cbm1ldGFkYXRhLmV4cCh7IGdldE1ldGFkYXRhS2V5czogZnVuY3Rpb24gZ2V0TWV0YWRhdGFLZXlzKHRhcmdldCAvKiAsIHRhcmdldEtleSAqLykge1xuICByZXR1cm4gb3JkaW5hcnlNZXRhZGF0YUtleXMoYW5PYmplY3QodGFyZ2V0KSwgYXJndW1lbnRzLmxlbmd0aCA8IDIgPyB1bmRlZmluZWQgOiB0b01ldGFLZXkoYXJndW1lbnRzWzFdKSk7XG59IH0pO1xuIiwidmFyIG1ldGFkYXRhID0gcmVxdWlyZSgnLi9fbWV0YWRhdGEnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4vX2FuLW9iamVjdCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi9fb2JqZWN0LWdwbycpO1xudmFyIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEgPSBtZXRhZGF0YS5oYXM7XG52YXIgb3JkaW5hcnlHZXRPd25NZXRhZGF0YSA9IG1ldGFkYXRhLmdldDtcbnZhciB0b01ldGFLZXkgPSBtZXRhZGF0YS5rZXk7XG5cbnZhciBvcmRpbmFyeUdldE1ldGFkYXRhID0gZnVuY3Rpb24gKE1ldGFkYXRhS2V5LCBPLCBQKSB7XG4gIHZhciBoYXNPd24gPSBvcmRpbmFyeUhhc093bk1ldGFkYXRhKE1ldGFkYXRhS2V5LCBPLCBQKTtcbiAgaWYgKGhhc093bikgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICB2YXIgcGFyZW50ID0gZ2V0UHJvdG90eXBlT2YoTyk7XG4gIHJldHVybiBwYXJlbnQgIT09IG51bGwgPyBvcmRpbmFyeUdldE1ldGFkYXRhKE1ldGFkYXRhS2V5LCBwYXJlbnQsIFApIDogdW5kZWZpbmVkO1xufTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0TWV0YWRhdGE6IGZ1bmN0aW9uIGdldE1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0TWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeU93bk1ldGFkYXRhS2V5cyA9IG1ldGFkYXRhLmtleXM7XG52YXIgdG9NZXRhS2V5ID0gbWV0YWRhdGEua2V5O1xuXG5tZXRhZGF0YS5leHAoeyBnZXRPd25NZXRhZGF0YUtleXM6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhS2V5cyh0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5T3duTWV0YWRhdGFLZXlzKGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAyID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1sxXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUdldE93bk1ldGFkYXRhID0gbWV0YWRhdGEuZ2V0O1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgZ2V0T3duTWV0YWRhdGE6IGZ1bmN0aW9uIGdldE93bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5R2V0T3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4vX29iamVjdC1ncG8nKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxudmFyIG9yZGluYXJ5SGFzTWV0YWRhdGEgPSBmdW5jdGlvbiAoTWV0YWRhdGFLZXksIE8sIFApIHtcbiAgdmFyIGhhc093biA9IG9yZGluYXJ5SGFzT3duTWV0YWRhdGEoTWV0YWRhdGFLZXksIE8sIFApO1xuICBpZiAoaGFzT3duKSByZXR1cm4gdHJ1ZTtcbiAgdmFyIHBhcmVudCA9IGdldFByb3RvdHlwZU9mKE8pO1xuICByZXR1cm4gcGFyZW50ICE9PSBudWxsID8gb3JkaW5hcnlIYXNNZXRhZGF0YShNZXRhZGF0YUtleSwgcGFyZW50LCBQKSA6IGZhbHNlO1xufTtcblxubWV0YWRhdGEuZXhwKHsgaGFzTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc01ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldCksIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciBtZXRhZGF0YSA9IHJlcXVpcmUoJy4vX21ldGFkYXRhJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKTtcbnZhciBvcmRpbmFyeUhhc093bk1ldGFkYXRhID0gbWV0YWRhdGEuaGFzO1xudmFyIHRvTWV0YUtleSA9IG1ldGFkYXRhLmtleTtcblxubWV0YWRhdGEuZXhwKHsgaGFzT3duTWV0YWRhdGE6IGZ1bmN0aW9uIGhhc093bk1ldGFkYXRhKG1ldGFkYXRhS2V5LCB0YXJnZXQgLyogLCB0YXJnZXRLZXkgKi8pIHtcbiAgcmV0dXJuIG9yZGluYXJ5SGFzT3duTWV0YWRhdGEobWV0YWRhdGFLZXksIGFuT2JqZWN0KHRhcmdldClcbiAgICAsIGFyZ3VtZW50cy5sZW5ndGggPCAzID8gdW5kZWZpbmVkIDogdG9NZXRhS2V5KGFyZ3VtZW50c1syXSkpO1xufSB9KTtcbiIsInZhciAkbWV0YWRhdGEgPSByZXF1aXJlKCcuL19tZXRhZGF0YScpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi9fYW4tb2JqZWN0Jyk7XG52YXIgYUZ1bmN0aW9uID0gcmVxdWlyZSgnLi9fYS1mdW5jdGlvbicpO1xudmFyIHRvTWV0YUtleSA9ICRtZXRhZGF0YS5rZXk7XG52YXIgb3JkaW5hcnlEZWZpbmVPd25NZXRhZGF0YSA9ICRtZXRhZGF0YS5zZXQ7XG5cbiRtZXRhZGF0YS5leHAoeyBtZXRhZGF0YTogZnVuY3Rpb24gbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlY29yYXRvcih0YXJnZXQsIHRhcmdldEtleSkge1xuICAgIG9yZGluYXJ5RGVmaW5lT3duTWV0YWRhdGEoXG4gICAgICBtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSxcbiAgICAgICh0YXJnZXRLZXkgIT09IHVuZGVmaW5lZCA/IGFuT2JqZWN0IDogYUZ1bmN0aW9uKSh0YXJnZXQpLFxuICAgICAgdG9NZXRhS2V5KHRhcmdldEtleSlcbiAgICApO1xuICB9O1xufSB9KTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXNldC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1NldCcpO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdTZXQnKTtcbiIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9EYXZpZEJydWFudC9NYXAtU2V0LnByb3RvdHlwZS50b0pTT05cbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5SLCAnU2V0JywgeyB0b0pTT046IHJlcXVpcmUoJy4vX2NvbGxlY3Rpb24tdG8tanNvbicpKCdTZXQnKSB9KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJGF0ID0gcmVxdWlyZSgnLi9fc3RyaW5nLWF0JykodHJ1ZSk7XG52YXIgJGZhaWxzID0gcmVxdWlyZSgnLi9fZmFpbHMnKTtcblxudmFyIEZPUkNFRCA9ICRmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAn8KCutycuYXQoMCkgIT09ICfwoK63Jztcbn0pO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIEZPUkNFRCwgJ1N0cmluZycsIHtcbiAgYXQ6IGZ1bmN0aW9uIGF0KHBvcykge1xuICAgIHJldHVybiAkYXQodGhpcywgcG9zKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL1N0cmluZy5wcm90b3R5cGUubWF0Y2hBbGwvXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuL190by1sZW5ndGgnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4vX2lzLXJlZ2V4cCcpO1xudmFyIGdldEZsYWdzID0gcmVxdWlyZSgnLi9fZmxhZ3MnKTtcbnZhciBSZWdFeHBQcm90byA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbnZhciAkUmVnRXhwU3RyaW5nSXRlcmF0b3IgPSBmdW5jdGlvbiAocmVnZXhwLCBzdHJpbmcpIHtcbiAgdGhpcy5fciA9IHJlZ2V4cDtcbiAgdGhpcy5fcyA9IHN0cmluZztcbn07XG5cbnJlcXVpcmUoJy4vX2l0ZXItY3JlYXRlJykoJFJlZ0V4cFN0cmluZ0l0ZXJhdG9yLCAnUmVnRXhwIFN0cmluZycsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBtYXRjaCA9IHRoaXMuX3IuZXhlYyh0aGlzLl9zKTtcbiAgcmV0dXJuIHsgdmFsdWU6IG1hdGNoLCBkb25lOiBtYXRjaCA9PT0gbnVsbCB9O1xufSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnU3RyaW5nJywge1xuICBtYXRjaEFsbDogZnVuY3Rpb24gbWF0Y2hBbGwocmVnZXhwKSB7XG4gICAgZGVmaW5lZCh0aGlzKTtcbiAgICBpZiAoIWlzUmVnRXhwKHJlZ2V4cCkpIHRocm93IFR5cGVFcnJvcihyZWdleHAgKyAnIGlzIG5vdCBhIHJlZ2V4cCEnKTtcbiAgICB2YXIgUyA9IFN0cmluZyh0aGlzKTtcbiAgICB2YXIgZmxhZ3MgPSAnZmxhZ3MnIGluIFJlZ0V4cFByb3RvID8gU3RyaW5nKHJlZ2V4cC5mbGFncykgOiBnZXRGbGFncy5jYWxsKHJlZ2V4cCk7XG4gICAgdmFyIHJ4ID0gbmV3IFJlZ0V4cChyZWdleHAuc291cmNlLCB+ZmxhZ3MuaW5kZXhPZignZycpID8gZmxhZ3MgOiAnZycgKyBmbGFncyk7XG4gICAgcngubGFzdEluZGV4ID0gdG9MZW5ndGgocmVnZXhwLmxhc3RJbmRleCk7XG4gICAgcmV0dXJuIG5ldyAkUmVnRXhwU3RyaW5nSXRlcmF0b3IocngsIFMpO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXN0cmluZy1wYWQtc3RhcnQtZW5kXG52YXIgJGV4cG9ydCA9IHJlcXVpcmUoJy4vX2V4cG9ydCcpO1xudmFyICRwYWQgPSByZXF1aXJlKCcuL19zdHJpbmctcGFkJyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMjgwXG52YXIgV0VCS0lUX0JVRyA9IC9WZXJzaW9uXFwvMTBcXC5cXGQrKFxcLlxcZCspPyggTW9iaWxlXFwvXFx3Kyk/IFNhZmFyaVxcLy8udGVzdCh1c2VyQWdlbnQpO1xuXG4kZXhwb3J0KCRleHBvcnQuUCArICRleHBvcnQuRiAqIFdFQktJVF9CVUcsICdTdHJpbmcnLCB7XG4gIHBhZEVuZDogZnVuY3Rpb24gcGFkRW5kKG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCBmYWxzZSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtc3RyaW5nLXBhZC1zdGFydC1lbmRcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHBhZCA9IHJlcXVpcmUoJy4vX3N0cmluZy1wYWQnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuL191c2VyLWFnZW50Jyk7XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8yODBcbnZhciBXRUJLSVRfQlVHID0gL1ZlcnNpb25cXC8xMFxcLlxcZCsoXFwuXFxkKyk/KCBNb2JpbGVcXC9cXHcrKT8gU2FmYXJpXFwvLy50ZXN0KHVzZXJBZ2VudCk7XG5cbiRleHBvcnQoJGV4cG9ydC5QICsgJGV4cG9ydC5GICogV0VCS0lUX0JVRywgJ1N0cmluZycsIHtcbiAgcGFkU3RhcnQ6IGZ1bmN0aW9uIHBhZFN0YXJ0KG1heExlbmd0aCAvKiAsIGZpbGxTdHJpbmcgPSAnICcgKi8pIHtcbiAgICByZXR1cm4gJHBhZCh0aGlzLCBtYXhMZW5ndGgsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vc2VibWFya2JhZ2UvZWNtYXNjcmlwdC1zdHJpbmctbGVmdC1yaWdodC10cmltXG5yZXF1aXJlKCcuL19zdHJpbmctdHJpbScpKCd0cmltTGVmdCcsIGZ1bmN0aW9uICgkdHJpbSkge1xuICByZXR1cm4gZnVuY3Rpb24gdHJpbUxlZnQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDEpO1xuICB9O1xufSwgJ3RyaW1TdGFydCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3NlYm1hcmtiYWdlL2VjbWFzY3JpcHQtc3RyaW5nLWxlZnQtcmlnaHQtdHJpbVxucmVxdWlyZSgnLi9fc3RyaW5nLXRyaW0nKSgndHJpbVJpZ2h0JywgZnVuY3Rpb24gKCR0cmltKSB7XG4gIHJldHVybiBmdW5jdGlvbiB0cmltUmlnaHQoKSB7XG4gICAgcmV0dXJuICR0cmltKHRoaXMsIDIpO1xuICB9O1xufSwgJ3RyaW1FbmQnKTtcbiIsInJlcXVpcmUoJy4vX3drcy1kZWZpbmUnKSgnYXN5bmNJdGVyYXRvcicpO1xuIiwicmVxdWlyZSgnLi9fd2tzLWRlZmluZScpKCdvYnNlcnZhYmxlJyk7XG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC1nbG9iYWxcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnU3lzdGVtJywgeyBnbG9iYWw6IHJlcXVpcmUoJy4vX2dsb2JhbCcpIH0pO1xuIiwiLy8gaHR0cHM6Ly90YzM5LmdpdGh1Yi5pby9wcm9wb3NhbC1zZXRtYXAtb2Zmcm9tLyNzZWMtd2Vha21hcC5mcm9tXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1mcm9tJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWttYXAub2ZcbnJlcXVpcmUoJy4vX3NldC1jb2xsZWN0aW9uLW9mJykoJ1dlYWtNYXAnKTtcbiIsIi8vIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vcHJvcG9zYWwtc2V0bWFwLW9mZnJvbS8jc2VjLXdlYWtzZXQuZnJvbVxucmVxdWlyZSgnLi9fc2V0LWNvbGxlY3Rpb24tZnJvbScpKCdXZWFrU2V0Jyk7XG4iLCIvLyBodHRwczovL3RjMzkuZ2l0aHViLmlvL3Byb3Bvc2FsLXNldG1hcC1vZmZyb20vI3NlYy13ZWFrc2V0Lm9mXG5yZXF1aXJlKCcuL19zZXQtY29sbGVjdGlvbi1vZicpKCdXZWFrU2V0Jyk7XG4iLCJ2YXIgJGl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4vZXM2LmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgZ2V0S2V5cyA9IHJlcXVpcmUoJy4vX29iamVjdC1rZXlzJyk7XG52YXIgcmVkZWZpbmUgPSByZXF1aXJlKCcuL19yZWRlZmluZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpO1xudmFyIGhpZGUgPSByZXF1aXJlKCcuL19oaWRlJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi9faXRlcmF0b3JzJyk7XG52YXIgd2tzID0gcmVxdWlyZSgnLi9fd2tzJyk7XG52YXIgSVRFUkFUT1IgPSB3a3MoJ2l0ZXJhdG9yJyk7XG52YXIgVE9fU1RSSU5HX1RBRyA9IHdrcygndG9TdHJpbmdUYWcnKTtcbnZhciBBcnJheVZhbHVlcyA9IEl0ZXJhdG9ycy5BcnJheTtcblxudmFyIERPTUl0ZXJhYmxlcyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBDU1NTdHlsZURlY2xhcmF0aW9uOiBmYWxzZSxcbiAgQ1NTVmFsdWVMaXN0OiBmYWxzZSxcbiAgQ2xpZW50UmVjdExpc3Q6IGZhbHNlLFxuICBET01SZWN0TGlzdDogZmFsc2UsXG4gIERPTVN0cmluZ0xpc3Q6IGZhbHNlLFxuICBET01Ub2tlbkxpc3Q6IHRydWUsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiBmYWxzZSxcbiAgRmlsZUxpc3Q6IGZhbHNlLFxuICBIVE1MQWxsQ29sbGVjdGlvbjogZmFsc2UsXG4gIEhUTUxDb2xsZWN0aW9uOiBmYWxzZSxcbiAgSFRNTEZvcm1FbGVtZW50OiBmYWxzZSxcbiAgSFRNTFNlbGVjdEVsZW1lbnQ6IGZhbHNlLFxuICBNZWRpYUxpc3Q6IHRydWUsIC8vIFRPRE86IE5vdCBzcGVjIGNvbXBsaWFudCwgc2hvdWxkIGJlIGZhbHNlLlxuICBNaW1lVHlwZUFycmF5OiBmYWxzZSxcbiAgTmFtZWROb2RlTWFwOiBmYWxzZSxcbiAgTm9kZUxpc3Q6IHRydWUsXG4gIFBhaW50UmVxdWVzdExpc3Q6IGZhbHNlLFxuICBQbHVnaW46IGZhbHNlLFxuICBQbHVnaW5BcnJheTogZmFsc2UsXG4gIFNWR0xlbmd0aExpc3Q6IGZhbHNlLFxuICBTVkdOdW1iZXJMaXN0OiBmYWxzZSxcbiAgU1ZHUGF0aFNlZ0xpc3Q6IGZhbHNlLFxuICBTVkdQb2ludExpc3Q6IGZhbHNlLFxuICBTVkdTdHJpbmdMaXN0OiBmYWxzZSxcbiAgU1ZHVHJhbnNmb3JtTGlzdDogZmFsc2UsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IGZhbHNlLFxuICBTdHlsZVNoZWV0TGlzdDogdHJ1ZSwgLy8gVE9ETzogTm90IHNwZWMgY29tcGxpYW50LCBzaG91bGQgYmUgZmFsc2UuXG4gIFRleHRUcmFja0N1ZUxpc3Q6IGZhbHNlLFxuICBUZXh0VHJhY2tMaXN0OiBmYWxzZSxcbiAgVG91Y2hMaXN0OiBmYWxzZVxufTtcblxuZm9yICh2YXIgY29sbGVjdGlvbnMgPSBnZXRLZXlzKERPTUl0ZXJhYmxlcyksIGkgPSAwOyBpIDwgY29sbGVjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgdmFyIE5BTUUgPSBjb2xsZWN0aW9uc1tpXTtcbiAgdmFyIGV4cGxpY2l0ID0gRE9NSXRlcmFibGVzW05BTUVdO1xuICB2YXIgQ29sbGVjdGlvbiA9IGdsb2JhbFtOQU1FXTtcbiAgdmFyIHByb3RvID0gQ29sbGVjdGlvbiAmJiBDb2xsZWN0aW9uLnByb3RvdHlwZTtcbiAgdmFyIGtleTtcbiAgaWYgKHByb3RvKSB7XG4gICAgaWYgKCFwcm90b1tJVEVSQVRPUl0pIGhpZGUocHJvdG8sIElURVJBVE9SLCBBcnJheVZhbHVlcyk7XG4gICAgaWYgKCFwcm90b1tUT19TVFJJTkdfVEFHXSkgaGlkZShwcm90bywgVE9fU1RSSU5HX1RBRywgTkFNRSk7XG4gICAgSXRlcmF0b3JzW05BTUVdID0gQXJyYXlWYWx1ZXM7XG4gICAgaWYgKGV4cGxpY2l0KSBmb3IgKGtleSBpbiAkaXRlcmF0b3JzKSBpZiAoIXByb3RvW2tleV0pIHJlZGVmaW5lKHByb3RvLCBrZXksICRpdGVyYXRvcnNba2V5XSwgdHJ1ZSk7XG4gIH1cbn1cbiIsInZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgJHRhc2sgPSByZXF1aXJlKCcuL190YXNrJyk7XG4kZXhwb3J0KCRleHBvcnQuRyArICRleHBvcnQuQiwge1xuICBzZXRJbW1lZGlhdGU6ICR0YXNrLnNldCxcbiAgY2xlYXJJbW1lZGlhdGU6ICR0YXNrLmNsZWFyXG59KTtcbiIsIi8vIGllOS0gc2V0VGltZW91dCAmIHNldEludGVydmFsIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBmaXhcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuL19nbG9iYWwnKTtcbnZhciAkZXhwb3J0ID0gcmVxdWlyZSgnLi9fZXhwb3J0Jyk7XG52YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi9fdXNlci1hZ2VudCcpO1xudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgTVNJRSA9IC9NU0lFIC5cXC4vLnRlc3QodXNlckFnZW50KTsgLy8gPC0gZGlydHkgaWU5LSBjaGVja1xudmFyIHdyYXAgPSBmdW5jdGlvbiAoc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiAoZm4sIHRpbWUgLyogLCAuLi5hcmdzICovKSB7XG4gICAgdmFyIGJvdW5kQXJncyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICAgIHZhciBhcmdzID0gYm91bmRBcmdzID8gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpIDogZmFsc2U7XG4gICAgcmV0dXJuIHNldChib3VuZEFyZ3MgPyBmdW5jdGlvbiAoKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3LWZ1bmNcbiAgICAgICh0eXBlb2YgZm4gPT0gJ2Z1bmN0aW9uJyA/IGZuIDogRnVuY3Rpb24oZm4pKS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9IDogZm4sIHRpbWUpO1xuICB9O1xufTtcbiRleHBvcnQoJGV4cG9ydC5HICsgJGV4cG9ydC5CICsgJGV4cG9ydC5GICogTVNJRSwge1xuICBzZXRUaW1lb3V0OiB3cmFwKGdsb2JhbC5zZXRUaW1lb3V0KSxcbiAgc2V0SW50ZXJ2YWw6IHdyYXAoZ2xvYmFsLnNldEludGVydmFsKVxufSk7XG4iLCJyZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN5bWJvbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuY3JlYXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5kZWZpbmUtcHJvcGVydHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmRlZmluZS1wcm9wZXJ0aWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmZyZWV6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2VhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QucHJldmVudC1leHRlbnNpb25zJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcy1mcm96ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYub2JqZWN0LmlzLXNlYWxlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuaXMtZXh0ZW5zaWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QuYXNzaWduJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm9iamVjdC5pcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3Quc2V0LXByb3RvdHlwZS1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5vYmplY3QudG8tc3RyaW5nJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmZ1bmN0aW9uLmJpbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZnVuY3Rpb24ubmFtZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5mdW5jdGlvbi5oYXMtaW5zdGFuY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucGFyc2UtaW50Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnBhcnNlLWZsb2F0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5jb25zdHJ1Y3RvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIudG8tZml4ZWQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnRvLXByZWNpc2lvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuZXBzaWxvbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIuaXMtZmluaXRlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1pbnRlZ2VyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm51bWJlci5pcy1uYW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLmlzLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWF4LXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIubWluLXNhZmUtaW50ZWdlcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5udW1iZXIucGFyc2UtZmxvYXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubnVtYmVyLnBhcnNlLWludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmFjb3NoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguYXNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5hdGFuaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNicnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5jbHozMicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmNvc2gnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5leHBtMScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmZyb3VuZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmh5cG90Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguaW11bCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLmxvZzEwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgubG9nMXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC5sb2cyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGguc2lnbicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5tYXRoLnNpbmgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYubWF0aC50YW5oJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hdGgudHJ1bmMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmZyb20tY29kZS1wb2ludCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmF3Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy50cmltJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuY29kZS1wb2ludC1hdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZW5kcy13aXRoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5pbmNsdWRlcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcucmVwZWF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdGFydHMtd2l0aCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuYW5jaG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5iaWcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLmJsaW5rJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5ib2xkJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5maXhlZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuZm9udGNvbG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5mb250c2l6ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuaXRhbGljcycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcubGluaycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc21hbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuc3RyaW5nLnN0cmlrZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zdHJpbmcuc3ViJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnN0cmluZy5zdXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS5ub3cnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuZGF0ZS50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmRhdGUudG8taXNvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXN0cmluZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5kYXRlLnRvLXByaW1pdGl2ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pcy1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5Lm9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmpvaW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc2xpY2UnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuc29ydCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5mb3ItZWFjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmlsdGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNvbWUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZXZlcnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkucmVkdWNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnJlZHVjZS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5pbmRleC1vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5sYXN0LWluZGV4LW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmNvcHktd2l0aGluJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LmZpbGwnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuZmluZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5hcnJheS5maW5kLWluZGV4Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LmFycmF5LnNwZWNpZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYuYXJyYXkuaXRlcmF0b3InKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5leGVjJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC50by1zdHJpbmcnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVnZXhwLmZsYWdzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5tYXRjaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAucmVwbGFjZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWdleHAuc2VhcmNoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZ2V4cC5zcGxpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5wcm9taXNlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2Lm1hcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1tYXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYud2Vhay1zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuYXJyYXktYnVmZmVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmRhdGEtdmlldycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5pbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQ4LWNsYW1wZWQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQuaW50MTYtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYudHlwZWQudWludDE2LWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmludDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLnVpbnQzMi1hcnJheScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi50eXBlZC5mbG9hdDMyLWFycmF5Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnR5cGVkLmZsb2F0NjQtYXJyYXknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5hcHBseScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmNvbnN0cnVjdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlZmluZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmRlbGV0ZS1wcm9wZXJ0eScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmVudW1lcmF0ZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNi5yZWZsZWN0LmdldC1wcm90b3R5cGUtb2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5oYXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5pcy1leHRlbnNpYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM2LnJlZmxlY3Qub3duLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5wcmV2ZW50LWV4dGVuc2lvbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczYucmVmbGVjdC5zZXQtcHJvdG90eXBlLW9mJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXQtbWFwJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmFycmF5LmZsYXR0ZW4nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLmF0Jyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN0cmluZy5wYWQtc3RhcnQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnBhZC1lbmQnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc3RyaW5nLnRyaW0tbGVmdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcudHJpbS1yaWdodCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zdHJpbmcubWF0Y2gtYWxsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnN5bWJvbC5hc3luYy1pdGVyYXRvcicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeW1ib2wub2JzZXJ2YWJsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9ycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYmplY3QudmFsdWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5kZWZpbmUtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtZ2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm9iamVjdC5sb29rdXAtc2V0dGVyJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnNldC50by1qc29uJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hcC5vZicpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1zZXQub2YnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWFwLmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuc2V0LmZyb20nKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcud2Vhay1tYXAuZnJvbScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy53ZWFrLXNldC5mcm9tJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lmdsb2JhbCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5zeXN0ZW0uZ2xvYmFsJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LmVycm9yLmlzLWVycm9yJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguY2xhbXAnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5kZWctcGVyLXJhZCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmRlZ3JlZXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5mc2NhbGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5pYWRkaCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLmlzdWJoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguaW11bGgnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5yYWQtcGVyLWRlZycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnJhZGlhbnMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcubWF0aC5zY2FsZScpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5tYXRoLnVtdWxoJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3Lm1hdGguc2lnbmJpdCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5wcm9taXNlLmZpbmFsbHknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucHJvbWlzZS50cnknKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWZpbmUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5kZWxldGUtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtbWV0YWRhdGEta2V5cycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5yZWZsZWN0LmdldC1vd24tbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5nZXQtb3duLW1ldGFkYXRhLWtleXMnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtbWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcucmVmbGVjdC5oYXMtb3duLW1ldGFkYXRhJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvZXM3LnJlZmxlY3QubWV0YWRhdGEnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy9lczcuYXNhcCcpO1xucmVxdWlyZSgnLi9tb2R1bGVzL2VzNy5vYnNlcnZhYmxlJyk7XG5yZXF1aXJlKCcuL21vZHVsZXMvd2ViLnRpbWVycycpO1xucmVxdWlyZSgnLi9tb2R1bGVzL3dlYi5pbW1lZGlhdGUnKTtcbnJlcXVpcmUoJy4vbW9kdWxlcy93ZWIuZG9tLml0ZXJhYmxlJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbW9kdWxlcy9fY29yZScpO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLyogVmFycyAqL1xcbjpyb290IHtcXG4gIC8qIENPTE9SUyAqL1xcbiAgLyogQWNjZW50ICovXFxuICAtLWJsdWU6ICMxOGEwZmI7XFxuICAtLXB1cnBsZTogIzdiNjFmZjtcXG4gIC0taG90LXBpbms6ICNmZjAwZmY7XFxuICAtLWdyZWVuOiAjMWJjNDdkO1xcbiAgLS1yZWQ6ICNmMjQ4MjI7XFxuICAtLXllbGxvdzogI2ZmZWIwMDtcXG4gIC8qIEJhc2ljIGZvcmVncm91bmQgKi9cXG4gIC0tYmxhY2s6ICMwMDAwMDA7XFxuICAtLWJsYWNrODogcmdiYSgwLCAwLCAwLCAuOCk7XFxuICAtLWJsYWNrOC1vcGFxdWU6ICMzMzMzMzM7XFxuICAtLWJsYWNrMzogcmdiYSgwLCAwLCAwLCAuMyk7XFxuICAtLWJsYWNrMy1vcGFxdWU6ICNCM0IzQjM7XFxuICAtLXdoaXRlOiAjZmZmZmZmO1xcbiAgLS13aGl0ZTg6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjgpO1xcbiAgLS13aGl0ZTQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjQpO1xcbiAgLyogQmFzaWMgYmFja2dyb3VuZCAqL1xcbiAgLS1ncmV5OiAjZjBmMGYwO1xcbiAgLS1zaWx2ZXI6ICNlNWU1ZTU7XFxuICAtLWh1ZDogIzIyMjIyMjtcXG4gIC0tdG9vbGJhcjogIzJjMmMyYztcXG4gIC8qIFNwZWNpYWwgKi9cXG4gIC0tYmxhY2sxOiByZ2JhKDAsIDAsIDAsIC4xKTtcXG4gIC0tYmx1ZTM6IHJnYmEoMjQsIDE0NSwgMjUxLCAuMyk7XFxuICAtLXB1cnBsZTQ6IHJnYmEoMTIzLCA5NywgMjU1LCAuNCk7XFxuICAtLWhvdmVyLWZpbGw6IHJnYmEoMCwgMCwgMCwgLjA2KTtcXG4gIC0tc2VsZWN0aW9uLWE6ICNkYWViZjc7XFxuICAtLXNlbGVjdGlvbi1iOiAjZWRmNWZhO1xcbiAgLS13aGl0ZTI6IHJnYmEoMjU1LCAyNTUsIDI1NSwgLjIpO1xcbiAgLyogVFlQT0dSQVBIWSAqL1xcbiAgLyogUG9zID0gcG9zaXRpdmUgYXBwbGljYXRpb25zIChibGFjayBvbiB3aGl0ZSkgKi9cXG4gIC8qIE5lZyA9IG5lZ2F0aXZlIGFwcGxpY2F0aW9ucyAod2hpdGUgb24gYmxhY2spICovXFxuICAvKiBGb250IHN0YWNrICovXFxuICAtLWZvbnQtc3RhY2s6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICAvKiBGb250IHNpemVzICovXFxuICAtLWZvbnQtc2l6ZS14c21hbGw6IDExcHg7XFxuICAtLWZvbnQtc2l6ZS1zbWFsbDogMTJweDtcXG4gIC0tZm9udC1zaXplLWxhcmdlOiAxM3B4O1xcbiAgLS1mb250LXNpemUteGxhcmdlOiAxNHB4O1xcbiAgLyogRm9udCB3ZWlnaHRzICovXFxuICAtLWZvbnQtd2VpZ2h0LW5vcm1hbDogNDAwO1xcbiAgLS1mb250LXdlaWdodC1tZWRpdW06IDUwMDtcXG4gIC0tZm9udC13ZWlnaHQtYm9sZDogNjAwO1xcbiAgLyogTGluZWhlaWdodCAqL1xcbiAgLS1mb250LWxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgLyogVXNlIEZvciB4c21hbGwsIHNtYWxsIGZvbnQgc2l6ZXMgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodC1sYXJnZTogMjRweDtcXG4gIC8qIFVzZSBGb3IgbGFyZ2UsIHhsYXJnZSBmb250IHNpemVzICovXFxuICAvKiBMZXR0ZXJzcGFjaW5nICovXFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbDogLjAwNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGw6IC4wMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbDogMDtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctc21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2U6IC0uMDAyNWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZTogLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlOiAtLjAwMWVtO1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2U6IC0uMDAxZW07XFxuICAvKiBCT1JERVIgUkFESVVTICovXFxuICAtLWJvcmRlci1yYWRpdXMtc21hbGw6IDJweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1tZWQ6IDVweDtcXG4gIC0tYm9yZGVyLXJhZGl1cy1sYXJnZTogNnB4O1xcbiAgLyogU0hBRE9XUyAqL1xcbiAgLS1zaGFkb3ctaHVkOiAwIDVweCAxN3B4IHJnYmEoMCwgMCwgMCwgLjIpLCAwIDJweCA3cHggcmdiYSgwLCAwLCAwLCAuMTUpO1xcbiAgLS1zaGFkb3ctZmxvYXRpbmctd2luZG93OiAwIDJweCAxNHB4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC8qIFNQQUNJTkcgKyBTSVpJTkcgKi9cXG4gIC0tc2l6ZS14eHhzbWFsbDogNHB4O1xcbiAgLS1zaXplLXh4c21hbGw6IDhweDtcXG4gIC0tc2l6ZS14c21hbGw6IDE2cHg7XFxuICAtLXNpemUtc21hbGw6IDI0cHg7XFxuICAtLXNpemUtbWVkaXVtOiAzMnB4O1xcbiAgLS1zaXplLWxhcmdlOiA0MHB4O1xcbiAgLS1zaXplLXhsYXJnZTogNDhweDtcXG4gIC0tc2l6ZS14eGxhcmdlOiA2NHB4O1xcbiAgLS1zaXplLXh4eGxhcmdlOiA4MHB4O1xcbn1cXG5cXG4vKiBHbG9iYWwgc3R5bGVzICovXFxuKiB7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbn1cXG5cXG5ib2R5IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBmb250LWZhbWlseTogJ0ludGVyJywgc2Fucy1zZXJpZjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi8qICBGT05UUyAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItUmVndWxhci53b2ZmP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLU1lZGl1bS53b2ZmMj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZjJcXFwiKSwgdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICBmb250LWZhbWlseTogJ0ludGVyJztcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxuICBzcmM6IHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItU2VtaUJvbGQud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmZcXFwiKTtcXG59XFxuXFxuLyogVVRJTElUSUVTICovXFxuLyogcGFkZGluZyAqL1xcbi5wLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucC14eHNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wLXhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wLXNtYWxsIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucC1tZWRpdW0ge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucC1sYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnAteGxhcmdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnAteHhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucC1odWdlIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHRvcCAqL1xcbi5wdC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wdC14eHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHNtYWxsIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wdC1zbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wdC1tZWRpdW0ge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnB0LWxhcmdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnB0LXhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucHQteHhsYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnB0LWh1Z2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIHJpZ2h0ICovXFxuLnByLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucHIteHNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnByLXNtYWxsIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHItbWVkaXVtIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnByLWxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucHIteGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnByLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnByLWh1Z2Uge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgYm90dG9tICovXFxuLnBiLXh4eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBiLXh4c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wYi14c21hbGwge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLnBiLXNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBiLW1lZGl1bSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGItbGFyZ2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ucGIteGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wYi14eGxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGItaHVnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIHBhZGRpbmcgbGVmdCAqL1xcbi5wbC14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHhzbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5wbC14c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wbC1zbWFsbCB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucGwtbWVkaXVtIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ucGwtbGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBsLXhsYXJnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnBsLXh4bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ucGwtaHVnZSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gKi9cXG4ubS14eHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubS14eHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm0teHNtYWxsIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubS1zbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubS1tZWRpdW0ge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tLWxhcmdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tLXhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm0teHhsYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tLWh1Z2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHRvcCAqL1xcbi5tdC14eHhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm10LXh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm10LXhzbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tdC1zbWFsbCB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm10LW1lZGl1bSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tdC1sYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm10LXhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tdC14eGxhcmdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tdC1odWdlIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gcmlnaHQgKi9cXG4ubXIteHh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1yLXh4c21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubXIteHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXItc21hbGwge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1yLW1lZGl1bSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1yLWxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tci14bGFyZ2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tci14eGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1yLWh1Z2Uge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGJvdHRvbSAqL1xcbi5tYi14eHhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm1iLXh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1iLXhzbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tYi1zbWFsbCB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm1iLW1lZGl1bSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tYi1sYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1iLXhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tYi14eGxhcmdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tYi1odWdlIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBtYXJnaW4gbGVmdCAqL1xcbi5tbC14eHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tbC14eHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHNtYWxsIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5tbC1zbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tbC1tZWRpdW0ge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLm1sLWxhcmdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLm1sLXhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWwteHhsYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLm1sLWh1Z2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBsYXlvdXQgdXRpbGl0aWVzICovXFxuLmhpZGRlbiB7XFxuICBkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uaW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZTtcXG59XFxuXFxuLmJsb2NrIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uaW5saW5lLWJsb2NrIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXFxuLmZsZXgge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLmlubGluZS1mbGV4IHtcXG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xcbn1cXG5cXG4uY29sdW1uIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcblxcbi5jb2x1bW4tcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XFxufVxcblxcbi5yb3cge1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG59XFxuXFxuLnJvdy1yZXZlcnNlIHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtd3JhcCB7XFxuICBmbGV4LXdyYXA6IHdyYXA7XFxufVxcblxcbi5mbGV4LXdyYXAtcmV2ZXJzZSB7XFxuICBmbGV4LXdyYXA6IHdyYXAtcmV2ZXJzZTtcXG59XFxuXFxuLmZsZXgtbm8td3JhcCB7XFxuICBmbGV4LXdyYXA6IG5vd3JhcDtcXG59XFxuXFxuLmZsZXgtc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAxO1xcbn1cXG5cXG4uZmxleC1uby1zaHJpbmsge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5mbGV4LWdyb3cge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4uZmxleC1uby1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMDtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1zdGFydCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtZW5kIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtY2VudGVyIHtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWJldHdlZW4ge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWFyb3VuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0YXJ0IHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtZW5kIHtcXG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWNlbnRlciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24taXRlbXMtc3RyZXRjaCB7XFxuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RhcnQge1xcbiAgYWxpZ24tY29udGVudDogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtZW5kIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1jZW50ZXIge1xcbiAgYWxpZ24tY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tY29udGVudC1zdHJldGNoIHtcXG4gIGFsaWduLWNvbnRlbnQ6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0YXJ0IHtcXG4gIGFsaWduLXNlbGY6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1zZWxmLWNlbnRlciB7XFxuICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcblxcbi5hbGlnbi1zZWxmLXN0cmV0Y2gge1xcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcXG59XFxuXFxuLmJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtbGFyZ2UpO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1tZWRpdW0pO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5IHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5OmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTpkaXNhYmxlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXByaW1hcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCkgMCBjYWxjKHZhcigtLXNpemUteHNtYWxsKSArIDFweCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeTpkaXNhYmxlZCwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tcmVkKTtcXG4gIGNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJlZCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnksIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgcGFkZGluZzogMDtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZW5hYmxlZDpmb2N1cywgLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmU6ZGlzYWJsZWQge1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4uY2hlY2tib3gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qIHVuY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbiAgLyogY2hlY2tlZCAqL1xcbiAgLypcXG5cXHQmX19ib3g6Y2hlY2tlZDpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuXFx0XFx0Ym9yZGVyOiAxcHggc29saWQgdmFyKC0td2hpdGUpO1xcblxcdCAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuXFx0fSovXFxufVxcblxcbi5jaGVja2JveF9fYm94IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWwge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbWFyZ2luLWxlZnQ6IC0xNnB4O1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGhlaWdodDogMTAwJTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIG1hcmdpbjogLTFweCAxMHB4IDAgLThweDtcXG4gIGJveC1zaGFkb3c6IG5vbmU7XFxufVxcblxcbi5jaGVja2JveF9fYm94OmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyNyUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDglMjA3JTIyJTIwd2lkdGglM0QlMjI4JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMS4xNzY0NyUyMDEuODgyMzYlMjAxLjg4MjM1JTIwMS44ODIzNiUyMDMuNzY0NzEtMy43NjQ3MiUyMDEuMTc2NDclMjAxLjE3NjQ4LTQuOTQxMTglMjA0Ljk0MTItMy4wNTg4Mi0zLjA1ODg0eiUyMiUyMGZpbGwlM0QlMjIlMjNmZmYlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMXB4IDJweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpjaGVja2VkOmRpc2FibGVkICsgLmNoZWNrYm94X19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpbHZlcik7XFxufVxcblxcbi5kaXNjbG9zdXJlX19pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgcGFkZGluZzogMCA4cHggMCAyNHB4O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBjb250ZW50OiAnJztcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogOHB4O1xcbiAgbGVmdDogNHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMTZweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIG9wYWNpdHk6IDAuMztcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm0xMSUyMDgtNC0zdjZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpob3ZlcjpiZWZvcmUge1xcbiAgb3BhY2l0eTogMC44O1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fY29udGVudCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUtc21hbGwpO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLXNlY3Rpb24ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1leHBhbmRlZCAuZGlzY2xvc3VyZV9fbGFiZWw6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIxNiUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDE2JTIwMTYlMjIlMjB3aWR0aCUzRCUyMjE2JTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwZCUzRCUyMm05JTIwMTAlMjAzLTRoLTZ6JTIyJTIwZmlsbCUzRCUyMiUyMzAwMCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMnB4IC0xcHg7XFxufVxcblxcbi5pY29uLS1zcGluIHtcXG4gIC13ZWJraXQtYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiByb3RhdGluZyAxLjBzIGxpbmVhciBpbmZpbml0ZTtcXG59XFxuXFxuQC13ZWJraXQta2V5ZnJhbWVzIHJvdGF0aW5nIHtcXG4gIGZyb20ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcXG4gIH1cXG59XFxuXFxuQGtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbi5pY29uLS1ibHVlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg1NCUpIHNlcGlhKDE2JSkgc2F0dXJhdGUoNzQ5OSUpIGh1ZS1yb3RhdGUoMTc5ZGVnKSBicmlnaHRuZXNzKDk4JSkgY29udHJhc3QoMTAxJSk7XFxufVxcblxcbi5pY29uLS1wdXJwbGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MCUpIHNlcGlhKDU5JSkgc2F0dXJhdGUoNDAwMSUpIGh1ZS1yb3RhdGUoMjMyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMiUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzIlKSBzZXBpYSg0MCUpIHNhdHVyYXRlKDY2MCUpIGh1ZS1yb3RhdGUoMjAyZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwMyUpO1xcbn1cXG5cXG4uaWNvbi0taG90LXBpbmsge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxOCUpIHNlcGlhKDkwJSkgc2F0dXJhdGUoMzM0NyUpIGh1ZS1yb3RhdGUoMjkzZGVnKSBicmlnaHRuZXNzKDExNiUpIGNvbnRyYXN0KDEzMiUpO1xcbn1cXG5cXG4uaWNvbi0tZ3JlZW4ge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDY2JSkgc2VwaWEoMzklKSBzYXR1cmF0ZSg1MzgyJSkgaHVlLXJvdGF0ZSgxMTRkZWcpIGJyaWdodG5lc3MoMTAyJSkgY29udHJhc3QoNzklKTtcXG59XFxuXFxuLmljb24tLXJlZCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDQzJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSg1NjMyJSkgaHVlLXJvdGF0ZSgzNDlkZWcpIGJyaWdodG5lc3MoOTclKSBjb250cmFzdCg5NSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG59XFxuXFxuLmljb24tLXllbGxvdyB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDc4JSkgc2VwaWEoODYlKSBzYXR1cmF0ZSgxNjA4JSkgaHVlLXJvdGF0ZSgxZGVnKSBicmlnaHRuZXNzKDEwNyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2s4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoNTYlKSBzYXR1cmF0ZSgyNSUpIGh1ZS1yb3RhdGUoMTM3ZGVnKSBicmlnaHRuZXNzKDEwNSUpIGNvbnRyYXN0KDYwJSk7XFxufVxcblxcbi5pY29uLS1ibGFjazMge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNjk4JSkgaHVlLXJvdGF0ZSgyMTlkZWcpIGJyaWdodG5lc3MoNjYlKSBjb250cmFzdCgxMjclKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGU4IHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoOTklKSBzZXBpYSgyJSkgc2F0dXJhdGUoNSUpIGh1ZS1yb3RhdGUoNTVkZWcpIGJyaWdodG5lc3MoMTA0JSkgY29udHJhc3QoOTglKTtcXG59XFxuXFxuLmljb24tLXdoaXRlNCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDg5NyUpIGh1ZS1yb3RhdGUoMjQ1ZGVnKSBicmlnaHRuZXNzKDExNyUpIGNvbnRyYXN0KDkzJSk7XFxufVxcblxcbi5pY29uLS1hZGp1c3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTIgMTYuMDVWOWgxdjcuMDVhMi41IDIuNSAwIDAxMCA0LjlWMjNoLTF2LTIuMDVhMi41IDIuNSAwIDAxMC00Ljl6bTIgMi40NWExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHpNMTkgMjNoMXYtNy4wNWEyLjUgMi41IDAgMDAwLTQuOVY5aC0xdjIuMDVhMi41IDIuNSAwIDAwMCA0Ljl6bTItOS41YTEuNSAxLjUgMCAxMC0zIDAgMS41IDEuNSAwIDAwMyAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGVydCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuMjUgMTcuMzkzYTEuNzUgMS43NSAwIDAwMS43NSAxLjc1VjIwSDl2LS44NTdhMS43NSAxLjc1IDAgMDAxLjc1LTEuNzVWMTRjMC0zLjMxNCAyLjM1LTYgNS4yNS02czUuMjUgMi42ODYgNS4yNSA2em0tMS0zLjM5M3YzLjM5M2MwIC42LjE5MiAxLjE1NS41MTggMS42MDdoLTkuNTM2YTIuNzM4IDIuNzM4IDAgMDAuNTE4LTEuNjA3VjE0YzAtMi44OTEgMi4wMjQtNSA0LjI1LTVzNC4yNSAyLjEwOSA0LjI1IDV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTE2IDIzYTIgMiAwIDAxLTItMmgtMWEzIDMgMCAxMDYgMGgtMWEyIDIgMCAwMS0yIDJ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFuZ2xlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMiAxMnY4aDh2LTFoLTNhNCA0IDAgMDAtNC00di0zem0xIDR2M2gzYTMgMyAwIDAwLTMtM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hcnJvdy1sZWZ0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuMjA3IDE2LjVsMS42NDcgMS42NDYtLjcwNy43MDhMMTAuMjkzIDE2bDIuODU0LTIuODU0LjcwNy43MDgtMS42NDcgMS42NDZoNy41ODZsLTEuNjQ2LTEuNjQ2LjcwNy0uNzA4TDIxLjcwNyAxNmwtMi44NTMgMi44NTQtLjcwNy0uNzA4IDEuNjQ2LTEuNjQ2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS11cC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTAuMjkybDIuODU0IDIuODU0LS43MDcuNzA3LTEuNjQ2LTEuNjQ2djcuNTg1bDEuNjQ2LTEuNjQ2LjcwNy43MDctMi44NTMgMi44NTQtMi44NTQtMi44NTQuNzA3LS43MDcgMS42NDcgMS42NDZ2LTcuNTg1bC0xLjY0NyAxLjY0Ni0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDV2MTJoLTV6bTEgMWgzdjEwaC0zem02LTFoNXYxMmgtNXptMSAxaDN2MTBoLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXV0by1sYXlvdXQtdmVydGljYWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEwIDEwaDEydjVIMTB6bTEgMWgxMHYzSDExem0tMSA2aDEydjVIMTB6bTEgMWgxMHYzSDExeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJhY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjcwNyAxNmw0LjY0Ni00LjY0Ni0uNzA3LS43MDdMMTIuMjkzIDE2bDUuMzUzIDUuMzU0LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kLWVtcHR5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi42OTUgMTEuNzJsLS42OTMtLjcxOEwxNiAxMWwtLjAwMS4wMDItLjY5NC43MThDMTMuMTAyIDE0LjAxMiAxMiAxNS4yOTQgMTIgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDAxLjE3MiAyLjkzNiAzLjkwNiAzLjkwNiAwIDAwNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAwMjAgMTYuODUyYzAtMS41NTgtMS4xMDItMi44NC0zLjMwNS01LjEzMnptLS42OTUuNzJjLS45NzcgMS4wMTctMS42OTMgMS43OS0yLjE5NSAyLjQ3MS0uNi44MTQtLjgwNSAxLjM4LS44MDUgMS45NHYuMDAzYTMuMiAzLjIgMCAwMC44OSAyLjIzOSAyLjkwNiAyLjkwNiAwIDAwNC4yMiAwIDMuMiAzLjIgMCAwMC44OS0yLjIzOXYtLjAwMmMwLS41Ni0uMjA1LTEuMTI3LS44MDUtMS45NC0uNTAyLS42ODEtMS4yMTktMS40NTUtMi4xOTUtMi40NzJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYmxlbmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2LjAwMiAxMS4wMDJsLjY5My43MThDMTguODk4IDE0LjAxMiAyMCAxNS4yOTQgMjAgMTYuODUyYTQuMTk5IDQuMTk5IDAgMDEtMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMS01LjY1NiAwQTQuMTk5IDQuMTk5IDAgMDExMiAxNi44NTJjMC0xLjU1OCAxLjEwMi0yLjg0IDMuMzA1LTUuMTMybC42OTQtLjcxOXptLTIuMTk3IDMuOTFjLjUwMi0uNjgxIDEuMjE5LTEuNDU1IDIuMTk1LTIuNDcyLjk3NiAxLjAxNyAxLjY5MyAxLjc5IDIuMTk1IDIuNDcxLjYuODE0LjgwNSAxLjM4LjgwNSAxLjk0di4wMDNjMCAuMDQ5IDAgLjA5OC0uMDAzLjE0NmgtNS45OTRhMy4zNyAzLjM3IDAgMDEtLjAwMy0uMTQ2di0uMDAyYzAtLjU2LjIwNS0xLjEyNy44MDUtMS45NHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1icmVhayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBvcGFjaXR5PScuOSclM0UlM0NwYXRoIGQ9J00xMyA5djNoMVY5ek0yMi4xMDMgOS44OTZhMi45NzUgMi45NzUgMCAwMC00LjIwNyAwbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMS45NzUgMS45NzUgMCAwMTIuNzkzIDIuNzkzbC0yLjc1IDIuNzUuNzA3LjcwNyAyLjc1LTIuNzVhMi45NzUgMi45NzUgMCAwMDAtNC4yMDd6TTkuODk2IDIyLjEwNGEyLjk3NSAyLjk3NSAwIDAxMC00LjIwOGwyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMS45NzUgMS45NzUgMCAwMDIuNzkzIDIuNzkzbDIuNzUtMi43NS43MDcuNzA3LTIuNzUgMi43NWEyLjk3NSAyLjk3NSAwIDAxLTQuMjA3IDB6TTIzIDE5aC0zdi0xaDN6TTE5IDIwdjNoLTF2LTN6TTEyIDEzSDl2MWgzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1kb3duIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMThsMy00aC02eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1sZWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTMgMTZsNC0zdjZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNhcmV0LXJpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTkgMTZsLTQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC11cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE0bDMgNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2hlY2sge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjIwNyAxMy43MDdMMTUgMTkuOTE0bC0zLjcwNy0zLjcwNyAxLjQxNC0xLjQxNEwxNSAxNy4wODZsNC43OTMtNC43OTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2xvc2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNS4yOTNsNC42NDYtNC42NDYuNzA4LjcwN0wxNi43MDcgMTZsNC42NDcgNC42NDctLjcwNy43MDdMMTYgMTYuNzA3bC00LjY0NiA0LjY0Ny0uNzA3LS43MDdMMTUuMjkzIDE2bC00LjY0Ni00LjY0Ni43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29tcG9uZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMi4wNjMgMTAuOTM4TDE2IDE0Ljg3NGwzLjkzOC0zLjkzOEwxNiA3em02LjQ2IDBMMTYgMTMuNDZsLTIuNTIzLTIuNTI0TDE2IDguNDE1em0tNi40NiAxMC4xMjRMMTYgMjVsMy45MzgtMy45MzhMMTYgMTcuMTI1em02LjQ2IDBMMTYgMjMuNTg3bC0yLjUyMy0yLjUyM0wxNiAxOC41Mzh6TTcgMTZsMy45MzctMy45MzhMMTQuODc1IDE2bC0zLjkzOCAzLjkzOHptMy45MzcgMi41MjNMMTMuNDYxIDE2bC0yLjUyNC0yLjUyM0w4LjQxNSAxNnpNMTcuMTI1IDE2bDMuOTM4IDMuOTM4TDI1IDE2bC0zLjkzOC0zLjkzOHptNi40NiAwbC0yLjUyMyAyLjUyM0wxOC41NCAxNmwyLjUyMy0yLjUyM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXItcmFkaXVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMSAxM2gtNGE0IDQgMCAwMC00IDR2NGgtMXYtNGE1IDUgMCAwMTUtNWg0eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvcm5lcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDExaDN2MWgtMnYyaC0xem03IDBoM3YzaC0xdi0yaC0yem0tNiA5di0yaC0xdjNoM3YtMXptOS0ydjNoLTN2LTFoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLWhvcml6b250YWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExIDIyLjV2LTEzaC0xdjEzek0yMiA5LjV2MTNoLTF2LTEzek0xNyAxMi41djdoLTJ2LTd6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRpc3RyaWJ1dGUtdmVydGljYWwtc3BhY2luZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YxaC0xM3pNMTIuNSAxNWg3djJoLTd6TTIyLjUgMjFoLTEzdjFoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWRyYWZ0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCA4LjVoNy43MDdMMjIgMTIuNzkzVjIzLjVIMTB6bTEgMXYxM2gxMHYtOWgtNHYtNHptNyAuNzA3bDIuMjkzIDIuMjkzSDE4eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVmZmVjdHMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNi41IDguNWgtMXYzaDF6TTExLjA1IDEwLjM0M2wtLjcwNy43MDcgMi4xMjEgMi4xMjIuNzA4LS43MDh6TTIxLjY1NyAxMS4wNWwtLjcwNy0uNzA3LTIuMTIxIDIuMTIxLjcwNy43MDh6TTguNSAxNS41djFoM3YtMXpNMjAuNSAxNS41djFoM3YtMXpNMTMuMTcyIDE5LjUzNWwtLjcwOC0uNzA3LTIuMTIgMi4xMjIuNzA2LjcwN3pNMTkuNTM1IDE4LjgyOGwtLjcwNy43MDcgMi4xMjIgMi4xMjIuNzA3LS43MDd6TTE2LjUgMjAuNWgtMXYzaDF6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4LjQ5OCAxNS45OThhMi41IDIuNSAwIDExLTUgMCAyLjUgMi41IDAgMDE1IDB6bS0xIDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZWxsaXBzZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExLjUgMTZhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTYgMGExLjUgMS41IDAgMTEtMyAwIDEuNSAxLjUgMCAwMTMgMHptNC41IDEuNWExLjUgMS41IDAgMTAwLTMgMS41IDEuNSAwIDAwMCAzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWV5ZWRyb3BwZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMi40NDcgOS42Yy0uOC0uOC0yLS44LTIuOCAwbC0yLjggMi44LS44LS43Yy0uNC0uNC0xLS40LTEuNCAwcy0uNCAxIDAgMS40bC43LjctNS44IDUuOGMtLjQuNC0xIDEuOSAwIDIuOXMyLjUuNCAyLjkgMGw1LjgtNS44LjcuN2MuNC40IDEgLjQgMS40IDBzLjQtMSAwLTEuNGwtLjctLjcgMi44LTIuOGMuOC0uOS44LTIuMSAwLTIuOXptLTEwLjkgMTEuOWgtMXYtMWw1LjgtNS44IDEgMWMtLjEgMC01LjggNS44LTUuOCA1Ljh6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZvcndhcmQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE3Ljk0IDE2bC00LjY0Ny00LjY0Ni43MDctLjcwN0wxOS4zNTQgMTYgMTQgMjEuMzU0bC0uNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZnJhbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTExIDI0di0zSDh2LTFoM3YtOEg4di0xaDNWOGgxdjNoOFY4aDF2M2gzdjFoLTN2OGgzdjFoLTN2M2gtMXYtM2gtOHYzem05LTR2LThoLTh2OHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ncm91cCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE3LjQgOWgtMi44djFoMi44ek0yMC45IDIySDIydi0xLjFoMVYyM2gtMi4xek0xMCAxNC42djIuOEg5di0yLjh6TTIyIDExLjFWMTBoLTEuMVY5SDIzdjIuMXpNMjIgMTQuNnYyLjhoMXYtMi44ek0xMCAxMS4xVjEwaDEuMVY5SDl2Mi4xek05IDIwLjloMVYyMmgxLjF2MUg5ek0xNy40IDIyaC0yLjh2MWgyLjh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhpZGRlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEuNTA5IDE1LjgwMUE4LjAzMyA4LjAzMyAwIDAwMjIuOTI4IDE0aC0xLjE4NEE2Ljk5MiA2Ljk5MiAwIDAxMTYgMTdhNi45OTIgNi45OTIgMCAwMS01Ljc0NS0zSDkuMDdhOC4wMzMgOC4wMzMgMCAwMDEuNDIxIDEuODAxbC0xLjU5NSAxLjU5NS43MDguNzA3IDEuNjU3LTEuNjU3Yy43MS41MjMgMS41MTEuOTMyIDIuMzc0IDEuMTk5bC0uNjE3IDIuMjIxLjk2NC4yNjguNjI2LTIuMjU1YTguMDUxIDguMDUxIDAgMDAyLjc4NCAwbC42MjYgMi4yNTUuOTY0LS4yNjgtLjYxNy0yLjIyMWE3Ljk3MSA3Ljk3MSAwIDAwMi4zNzQtMS4ybDEuNjU4IDEuNjU4LjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWhvcml6b250YWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOXYxNGgxVjl6bTEzIDB2MTRoMVY5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxOXYtNmg2djZ6bS0xLTdoOHY4aC04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWh5cGVybGluayB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTIwLjgyNCAxNC40OTJsLTEuNjU3IDEuNjU3LjgyOC44MjkgMS42NTgtMS42NTdhMy41MTcgMy41MTcgMCAwMC00Ljk3My00Ljk3M2wtMS42NTcgMS42NTguODI5LjgyOCAxLjY1Ny0xLjY1N2EyLjM0NSAyLjM0NSAwIDAxMy4zMTUgMy4zMTV6bS00Ljk3NCA0Ljk3MmwuODI5LjgyOS0xLjY1OCAxLjY1N2EzLjUxNiAzLjUxNiAwIDExLTQuOTcyLTQuOTcybDEuNjU5LTEuNjU4LjgyOC44MjktMS42NTYgMS42NTdhMi4zNDMgMi4zNDMgMCAxMDMuMzE1IDMuMzE1bDEuNjU3LTEuNjU3em0yLjA3Mi02LjIxNmwtNC45NzIgNC45NzMuODI4LjgyOSA0Ljk3My00Ljk3M3onIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW1hZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyIDEwSDEwdjcuNzkzbDMuMDgzLTMuMDgzIDcuMjkgNy4yOUgyMnpNMTAgMjJ2LTIuNzkzbDMuMDgzLTMuMDgzTDE4Ljk2IDIyem0wLTEzYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgxMmExIDEgMCAwMDEtMVYxMGExIDEgMCAwMC0xLTF6bTkuNjY3IDQuNjY3YTEuMzMzIDEuMzMzIDAgMTEtMi42NjcgMCAxLjMzMyAxLjMzMyAwIDAxMi42NjcgMHptMSAwYTIuMzMzIDIuMzMzIDAgMTEtNC42NjcgMCAyLjMzMyAyLjMzMyAwIDAxNC42NjcgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1pbnN0YW5jZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgN2w5IDktOSA5LTktOXptLTcuNTg2IDlMMTYgMjMuNTg2IDIzLjU4NiAxNiAxNiA4LjQxNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1rZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE0IDIwLjE0YTMuMDE0IDMuMDE0IDAgMDAuMzMxLTMuODY4bDIuMDQ3LTIuMDQ3IDEuNzY3IDEuNzY3YS41LjUgMCAxMC43MDctLjcwN2wtMS43NjctMS43NjcgMS4yOTMtMS4yOTMgMS43ODQgMS43ODRhLjUuNSAwIDEwLjcwNy0uNzA3bC0xLjc4NC0xLjc4NC43NjItLjc2MWEuNS41IDAgMDAtLjcwNy0uNzA4bC01LjUxMyA1LjUxM2EzLjAxNCAzLjAxNCAwIDEwLjM3MyA0LjU3OHptLS43MTItLjcxMmEyLjAwNiAyLjAwNiAwIDEwLTIuODM3LTIuODM3IDIuMDA2IDIuMDA2IDAgMDAyLjgzNyAyLjgzN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtYWxpZ24tYm90dG9tIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNC41IDEwdjEwaC0yVjEwem04IDEydjFoLTEzdi0xem0tMy0ydi02aC0ydjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24taG9yaXpvbnRhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYuNSA5LjVoLTF2M2gtNXYyaDV2M2gtM3YyaDN2M2gxdi0zaDN2LTJoLTN2LTNoNXYtMmgtNXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjVIOXYtMTNoMXpNMjIgMTQuNUgxMnYtMmgxMHpNMTIgMTkuNWg2di0yaC02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIyIDIyLjVoMXYtMTNoLTF6TTEwIDE0LjVoMTB2LTJIMTB6TTIwIDE5LjVoLTZ2LTJoNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tdG9wIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTQuNSAyMlYxMmgtMnYxMHpNMjIuNSAxMFY5aC0xM3Yxek0xOS41IDEydjZoLTJ2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXZlcnRpY2FsLWNlbnRlcnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xMi41IDE1LjV2LTVoMnY1aDN2LTNoMnYzaDN2MWgtM3YzaC0ydi0zaC0zdjVoLTJ2LTVoLTN2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLWNvbHVtbnMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YxNEg5ek0xNC41IDloM3YxNGgtM3pNMjAgOWgzdjE0aC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1yb3dzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDE0djNIOXpNOSAxNC41aDE0djNIOXpNOSAyMGgxNHYzSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxheW91dC1ncmlkLXVuaWZvcm0ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloM3YzSDl6TTIwIDloM3YzaC0zek0xNC41IDloM3YzaC0zek05IDE0LjVoM3YzSDl6TTIwIDE0LjVoM3YzaC0zek0xNC41IDE0LjVoM3YzaC0zek05IDIwaDN2M0g5ek0yMCAyMGgzdjNoLTN6TTE0LjUgMjBoM3YzaC0zeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saWJyYXJ5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4zNzMgMjJoMS4yNThjLjI4LS4zMi42MTYtLjU5Ny45OTUtLjgxOSAxLjQ3OC0uODYyIDQuMDA1LS45MDkgNS4zODYuMTA5SDI0LjV2LTkuMnMtLjc5Ny0yLjI1LTQuNDItMi4yNWMtMS44NzUgMC0yLjkwMi42MDItMy40NTYgMS4xODRhMi41NjggMi41NjggMCAwMC0uNi45NzZoLS4wNDhhMi41NjkgMi41NjkgMCAwMC0uNi0uOTc2Yy0uNTU0LS41ODItMS41ODEtMS4xODQtMy40NTYtMS4xODQtMy42MjMgMC00LjQyIDIuMjUtNC40MiAyLjI1djkuMTloMS40ODhjMS4zODItMS4wMTkgMy45MS0uOTcgNS4zODgtLjEwNS4zOC4yMjMuNzE3LjUwMy45OTcuODI1em0xLjEyNy05LjcxMXY4LjQ1N2MuMTk1LS4xNTcuNDAzLS4zLjYyMi0uNDI4LjkyNy0uNTQxIDIuMTE1LS43OTYgMy4yNDEtLjc4NyAxLjAwNi4wMDggMi4wODEuMjI3IDIuOTUyLjc1OWguMTg1di03Ljk3M2EyLjQxNCAyLjQxNCAwIDAwLS41MDUtLjU5NWMtLjQ2LS4zOTctMS4zMy0uODgyLTIuOTE1LS44ODItMS41ODYgMC0yLjM0LjQ4My0yLjY5NS44MzVhMS43NDkgMS43NDkgMCAwMC0uMzUzLjQ5IDEuMDc2IDEuMDc2IDAgMDAtLjA1Mi4xMzFsLS4wMDUuMDE3LjAwMS0uMDA2LjAwMi0uMDA4di0uMDA1bC4wMDEtLjAwMnYtLjAwMmwtLjAwNS0uMDAxem0tMSAwaC0uNDc0bC0uMDA2LjAwMXYuMDAybC4wMDEuMDAyLjAwMS4wMDUuMDAyLjAwOC4wMDEuMDA2LS4wMDUtLjAxN2ExLjA3NiAxLjA3NiAwIDAwLS4wNTMtLjEzMSAxLjc0OSAxLjc0OSAwIDAwLS4zNTMtLjQ5Yy0uMzU0LS4zNTEtMS4xMDgtLjgzNS0yLjY5NC0uODM1LTEuNTg1IDAtMi40NTUuNDg1LTIuOTE2Ljg4MmEyLjQxMSAyLjQxMSAwIDAwLS41MDQuNTk1djcuOTYzaC4xODVjLjg3Mi0uNTMyIDEuOTQ4LS43NTIgMi45NTQtLjc1OSAxLjEyOC0uMDA4IDIuMzE2LjI0OSAzLjI0My43OTIuMjE3LjEyNy40MjQuMjcuNjE4LjQyNnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWJyb2tlbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE4IDE0di0yYTIgMiAwIDEwLTQgMHYyaC0xdi0yYTMgMyAwIDExNiAwdjJ6TTE5IDE4aC0xdjJhMiAyIDAgMTEtNCAwdi0yaC0xdjJhMyAzIDAgMTA2IDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpbmstY29ubmVjdGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMTBhMiAyIDAgMDEyIDJ2Mmgxdi0yYTMgMyAwIDEwLTYgMHYyaDF2LTJhMiAyIDAgMDEyLTJ6TTE4IDE4aDF2MmEzIDMgMCAxMS02IDB2LTJoMXYyYTIgMiAwIDEwNCAweicvJTNFJTNDcGF0aCBkPSdNMTUuNSAxM3Y2aDF2LTZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3QtZGV0YWlsZWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMiAxMGgtMnYxaDJ6TTEyIDIwaC0ydjFoMnpNMTAgMTVoMnYxaC0yek0yMiAxMGgtOHYxaDh6TTE0IDIwaDh2MWgtOHpNMjIgMTVoLTh2MWg4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LXRpbGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE0IDExaC0zdjNoM3ptLTQtMXY1aDV2LTV6bTExIDFoLTN2M2gzem0tNC0xdjVoNXYtNXptLTMgOGgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyBmaWxsLW9wYWNpdHk9Jy44JyUzRSUzQ3BhdGggZD0nTTIzIDEwSDl2MWgxNHpNOSAxNS41aDE0djFIOXpNOSAyMWgxNHYxSDl6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb2ZmIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTggMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNUgxN3YtMi41YTIuNSAyLjUgMCAwMTUgMFYxNGgtMXYtMS41YTEuNSAxLjUgMCAwMC0zIDB6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxvY2stb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzLjUgMTV2LTEuNWEyLjUgMi41IDAgMDE1IDBWMTVoLjVhLjUuNSAwIDAxLjUuNXY1YS41LjUgMCAwMS0uNS41aC02YS41LjUgMCAwMS0uNS0uNXYtNWEuNS41IDAgMDEuNS0uNXptNC0xLjVWMTVoLTN2LTEuNWExLjUgMS41IDAgMDEzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbWludXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMS41IDE2LjVoLTExdi0xaDExeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1wbGF5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMC4wOThMMjIuNDQzIDE2IDEzIDIxLjkwMnptMSAxLjgwNHY4LjE5NkwyMC41NTcgMTZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGx1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE1LjUgMTUuNXYtNWgxdjVoNXYxaC01djVoLTF2LTVoLTV2LTF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJhbmRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMTE4IDExYTIuNSAyLjUgMCAwMC0xLjMzNS4zODZMMTEuMjI4IDEzSDE4LjV2MWgtOC40OTdhLjUxMi41MTIgMCAwMC0uMDAzLjA1MVYyMC41YzAgLjI3OC4yMjMuNS40OTcuNWg3LjYyOGEuNDk4LjQ5OCAwIDAwLjMyOC0uMTIzbDMuMjA2LTIuODA1YTEgMSAwIDAwLjM0MS0uNzUzVjExLjVhLjUuNSAwIDAwLS41LS41em0tMS44NjktLjQ2YTMuNSAzLjUgMCAwMTEuODctLjU0SDIxLjVhMS41IDEuNSAwIDAxMS41IDEuNXY1LjgyYTIgMiAwIDAxLS42ODMgMS41MDRsLTMuMjA1IDIuODA1Yy0uMjc0LjI0LS42MjQuMzcxLS45ODcuMzcxaC03LjYyN0M5LjY2OCAyMiA5IDIxLjMyNyA5IDIwLjV2LTYuNDQ5YTEuNSAxLjUgMCAwMS42OTktMS4yNjh6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQ3BhdGggZD0nTTEzIDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTZhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xNyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTEzIDE5YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHonLyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMjIuNDA3IDEwLjcxYS41LjUgMCAwMS0uMTE2LjY5N2wtMy41IDIuNWEuNS41IDAgMDEtLjU4Mi0uODE0bDMuNS0yLjVhLjUuNSAwIDAxLjY5OC4xMTZ6Jy8lM0UlM0NwYXRoIGQ9J00xOCAyMXYtOGgxdjh6Jy8lM0UlM0MvZyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVjZW50IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTUgMTJ2NWg1di0xaC00di00eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNpemUtdG8tZml0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOC42NDYgOS4zNTRMMTIuMjkzIDEzSDEwdjFoNHYtNGgtMXYyLjI5M0w5LjM1NCA4LjY0NnpNMTkuNzA3IDEzbDMuNjQ3LTMuNjQ2LS43MDctLjcwOEwxOSAxMi4yOTNWMTBoLTF2NGg0di0xek0xOS43MDcgMTlsMy42NDcgMy42NDYtLjcwNy43MDhMMTkgMTkuNzA3VjIyaC0xdi00aDR2MXpNMTIuMjkzIDE5bC0zLjY0NyAzLjY0Ni43MDguNzA4TDEzIDE5LjcwN1YyMmgxdi00aC00djF6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUtZmlsbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiAyNGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjkxMS05LjYzNWwtLjgyMi0uNzMtMy42MTMgNC4wNjQtMi41ODctMi41ODgtLjc3OC43NzggMy40MTMgMy40MTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzb2x2ZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5LjkxMSAxNC4zNjVsLS44MjItLjczLTMuNjEzIDQuMDYzLTIuNTg3LTIuNTg3LS43NzguNzc4IDMuNDEzIDMuNDEyeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXZlcnNlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS44NTQgOC42NDZMMTguMjA3IDExbC0yLjM1MyAyLjM1NC0uNzA4LS43MDggMS4xNDctMS4xNDZIMTRjLS41MDMgMC0xLjI3LjE1NS0xLjg5NS42MDYtLjYuNDMyLTEuMTA1IDEuMTU3LTEuMTA1IDIuMzk0djcuMjVoLTFWMTQuNWMwLTEuNTYzLjY2Mi0yLjU4OCAxLjUyLTMuMjA2LjgzMy0uNiAxLjgxNy0uNzk0IDIuNDgtLjc5NGgyLjI5M2wtMS4xNDctMS4xNDZ6TTIyIDEwdjcuMjVjMCAxLjU2My0uNjYyIDIuNTg4LTEuNTIgMy4yMDYtLjgzMy42LTEuODE3Ljc5NC0yLjQ4Ljc5NGgtMi4yOTNsMS4xNDcgMS4xNDYtLjcwOC43MDgtMi4zNTMtMi4zNTQgMi4zNTMtMi4zNTQuNzA4LjcwOC0xLjE0NyAxLjE0NkgxOGMuNTAzIDAgMS4yNy0uMTU1IDEuODk1LS42MDYuNi0uNDMyIDEuMTA1LTEuMTU3IDEuMTA1LTIuMzk0VjEweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaC1sYXJnZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguODc0IDE5LjU4MWE2IDYgMCAxMS43MDctLjcwN2w0LjI3MyA0LjI3Mi0uNzA4LjcwOHpNMjAgMTVhNSA1IDAgMTEtMTAgMCA1IDUgMCAwMTEwIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2VhcmNoIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC4zOTcgMTguNjA1YTQuNTUyIDQuNTUyIDAgMTEuNzA3LS43MDdsMy4yNSAzLjI0OS0uNzA4LjcwN3ptLjcwNi0zLjU1M2EzLjU1MiAzLjU1MiAwIDExLTcuMTAzIDAgMy41NTIgMy41NTIgMCAwMTcuMTAzIDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc2V0dGluZ3Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTYuOTU0IDkuOTI4bC0uMTM5LS4zMzFDMTYuNjM1IDkuMTY1IDE2LjMwMSA5IDE2IDlzLS42MzUuMTY1LS44MTUuNTk3bC0uMTM5LjMzMWMtLjU2IDEuMzQzLTEuOTkyIDIuMTMtMy40MjUgMS43MmwtLjUtLjE0NGMtLjMwOS0uMDg4LS42MDYuMDI1LS44MTUuMzI3YTEuMDUgMS4wNSAwIDAwLS4wNDkgMS4xMjNjLjc0MyAxLjMyMy40MDIgMy4wNjgtLjg2IDMuOTUtLjMxOC4yMjItLjQ1Ni42MTQtLjM3NSAxLjAyNC4wODEuNDA5LjM0Mi42NjguNjczLjcyM2wuMTk1LjAzM2MxLjUyNS4yNTMgMi41MSAxLjY4NyAyLjQyMyAzLjE4LS4wMy41MDMuMjIuODYxLjUyIDEuMDI4LjI4OC4xNjEuNjIzLjE1NS45MjEtLjEwOGwuMzczLS4zM2EyLjggMi44IDAgMDEzLjc0NiAwbC4zNzMuMzNjLjI5OC4yNjQuNjMzLjI3LjkyMi4xMDguMy0uMTY3LjU0OS0uNTI1LjUyLTEuMDI4LS4wODgtMS40OTMuODk3LTIuOTI3IDIuNDIzLTMuMThsLjE5NC0uMDMzYy4zMy0uMDU1LjU5Mi0uMzE0LjY3My0uNzIzLjA4MS0uNDEtLjA1Ny0uODAyLS4zNzUtMS4wMjQtMS4yNjItLjg4Mi0xLjYwMy0yLjYyNy0uODYtMy45NWExLjA1IDEuMDUgMCAwMC0uMDUtMS4xMjNjLS4yMDgtLjMwMi0uNTA1LS40MTUtLjgxNS0uMzI3bC0uNDk5LjE0M2MtMS40MzMuNDEtMi44NjUtLjM3Ni0zLjQyNS0xLjcxOXptLjc4NC0uNzE3Yy0uNjc0LTEuNjE1LTIuODAyLTEuNjE1LTMuNDc2IDBsLS4xMzguMzMyYy0uMzgzLjkxNy0xLjMyNiAxLjQwMS0yLjIyOCAxLjE0M2wtLjQ5OS0uMTQzYy0xLjU3NS0uNDUtMi44NTUgMS4zOTgtMi4wMTIgMi45LjUwNS45LjI1NyAyLjA3LS41NiAyLjY0LTEuMzkyLjk3My0uOTMzIDMuMjgyLjcwNiAzLjU1NWwuMTk1LjAzMmMuOTYuMTYgMS42NSAxLjA5IDEuNTg4IDIuMTM1LS4xMDQgMS43ODggMS44MiAyLjg2NCAzLjEwMyAxLjcyN2wuMzczLS4zM2ExLjggMS44IDAgMDEyLjQyIDBsLjM3My4zM2MxLjI4NCAxLjEzNyAzLjIwNy4wNjEgMy4xMDMtMS43MjctLjA2MS0xLjA0Ni42MjgtMS45NzUgMS41ODktMi4xMzVsLjE5NC0uMDMyYzEuNjM5LS4yNzMgMi4wOTgtMi41ODIuNzA3LTMuNTU0LS44MTgtLjU3Mi0xLjA2Ni0xLjc0Mi0uNTYxLTIuNjQuODQzLTEuNTAzLS40MzctMy4zNTItMi4wMTItMi45MDFsLS41LjE0M2MtLjkuMjU4LTEuODQ0LS4yMjYtMi4yMjYtMS4xNDN6Jy8lM0UlM0NwYXRoIGQ9J00xNiAxOC41YTIgMiAwIDEwMC00IDIgMiAwIDAwMCA0em0wIDFhMyAzIDAgMTAwLTYgMyAzIDAgMDAwIDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNoYXJlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMCA5LjVhMy41IDMuNSAwIDAwLTEuMzgzIDYuNzE2QTQuNTEzIDQuNTEzIDAgMDAxNiAxOC40MzZhNC41MTMgNC41MTMgMCAwMC0yLjYxOC0yLjIyIDMuNTAxIDMuNTAxIDAgMTAtMi43NjQgMEE0LjUwMiA0LjUwMiAwIDAwNy41IDIwLjVWMjJoMTd2LTEuNWMwLTIuMDAzLTEuMzA5LTMuNy0zLjExOC00LjI4NEEzLjUwMSAzLjUwMSAwIDAwMjAgOS41ek0xNy41IDEzYTIuNSAyLjUgMCAxMTUgMCAyLjUgMi41IDAgMDEtNSAwem0tMSA4di0uNWEzLjUgMy41IDAgMTE3IDB2LjV6bS0xLS41di41aC03di0uNWEzLjUgMy41IDAgMTE3IDB6bS02LTcuNWEyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zbWlsZXkge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAyMGE0LjAwMiA0LjAwMiAwIDAxLTMuODc0LTNoMS4wNDVhMy4wMDEgMy4wMDEgMCAwMDUuNjU4IDBoMS4wNDVBNC4wMDIgNC4wMDIgMCAwMTE2IDIwek0xOS41IDE0LjEyNWEuODc1Ljg3NSAwIDExLTEuNzUgMCAuODc1Ljg3NSAwIDAxMS43NSAwek0xMy4xMjUgMTVhLjg3NS44NzUgMCAxMDAtMS43NS44NzUuODc1IDAgMDAwIDEuNzV6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTI0IDE2YTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tMSAwYTcgNyAwIDExLTE0IDAgNyA3IDAgMDExNCAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtYXNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMC41IDguMjkzbDMuMzU0IDMuMzUzLS43MDguNzA4TDIxIDEwLjIwN1YyM2gtMVYxMC4yMDdsLTIuMTQ2IDIuMTQ3LS43MDgtLjcwOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc29ydC1hbHBoYS1kc2Mge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnJTNFJTNDcGF0aCBkPSdNMTAuODk3IDlMOSAxNGgxLjA3bC4zNzktMWgyLjEzM2wuMzM4IDFoMS4wNTZsLTEuNjktNXptMS4zNDcgM2wtLjY2Ny0xLjk3M0wxMC44MjggMTJ6TTEyLjU1MyAxOUg5LjV2LTFIMTR2Ljk3OUwxMC45MzIgMjJIMTR2MUg5LjV2LS45OTN6TTIwIDIxLjc5M1Y5aDF2MTIuNzkzbDIuMTQ2LTIuMTQ3LjcwOC43MDgtMy4zNTQgMy4zNTMtMy4zNTQtMy4zNTMuNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtdG9wLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAuNDUgMTJIMTB2LTFoMTAuNDVjLjk3IDAgMS4zNzIgMS4yNDQuNTg0IDEuODEyTDExLjA1IDIwaDkuMjQzbC0xLjY0Ny0xLjY0Ni43MDgtLjcwOCAyLjg1MyAyLjg1NC0yLjg1MyAyLjg1NC0uNzA4LS43MDhMMjAuMjkzIDIxSDExLjA1Yy0uOTcgMC0xLjM3Mi0xLjI0NC0uNTg0LTEuODEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMiAxMWgtMnYxMGgydjFoLTNWMTBoM3ptLTEwLTF2MTJIOXYtMWgyVjExSDl2LTF6bTQgM2gtMXY2aDF6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNwaW5uZXIge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjE2NSA4LjUzYS41LjUgMCAwMS0uNDA0LjU4QTcgNyAwIDEwMjMgMTZhLjUuNSAwIDAxMSAwIDggOCAwIDExLTkuNDE2LTcuODc0LjUuNSAwIDAxLjU4LjQwNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdGFyLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTggMTQuMDA0TDE2IDhsLTIgNi4wMDRIOEwxMi45NiAxOGwtMS45MDQgNkwxNiAyMGw0Ljk0NCA0LTEuOTA0LTZMMjQgMTR6bTMuMTY1Ljk5OGwtMy44ODYuMDAyTDE2IDExLjE2NGwtMS4yOCAzLjg0aC0zLjg4NWwzLjI4NSAyLjY0Ni0xLjEwMyAzLjQ3N0wxNiAxOC43MTRsMi45ODMgMi40MTMtMS4xMDMtMy40NzZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDhsMiA2LjAwNEwyNCAxNGwtNC45NiA0IDEuOTA0IDZMMTYgMjBsLTQuOTQ0IDQgMS45MDQtNkw4IDE0LjAwNGg2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHJva2Utd2VpZ2h0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnYxSDEwem0wIDRoMTJ2MkgxMHptMTIgNUgxMHYzaDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0eWxlcyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTExLjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE3LjUgMTNhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6TTE5IDIwLjVhMS41IDEuNSAwIDExMC0zIDEuNSAxLjUgMCAwMTAgM3pNMTEuNSAxOWExLjUgMS41IDAgMTAzIDAgMS41IDEuNSAwIDAwLTMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3dhcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTIzIDEzLjE4OGwtMS4xNzUgMS40NjhhNS41IDUuNSAwIDAwLTEwLjAwMy0yLjIxOWwuODMuNTU3YTQuNSA0LjUgMCAwMTguMjE2IDIuMDU3bC0yLjItMS40NjctLjU1NS44MzIgMy4zODEgMi4yNTQgMi4yODctMi44NTh6TTkgMTcuMTg4bC43OC42MjQgMS4xNzYtMS40NjguMDI2LjE1NmE1LjUgNS41IDAgMDA5Ljk3NiAyLjA2NXYtLjAwMmwtLjgzLS41NTctLjAwMS4wMDFhNC41IDQuNSAwIDAxLTguMjE0LTIuMDU4bDIuMiAxLjQ2Ny41NTUtLjgzMi0zLjM4Mi0yLjI1NHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGhlbWUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTEzIDEwaC0zdjEyaDN6bS0zLTFhMSAxIDAgMDAtMSAxdjEyYTEgMSAwIDAwMSAxaDNhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMC43NSAyMC41YS43NS43NSAwIDExMS41IDAgLjc1Ljc1IDAgMDEtMS41IDB6TTIyIDE4YTEgMSAwIDAxMSAxdjNhMSAxIDAgMDEtMSAxaC03di0xaDd2LTNoLTd2LTF6TTE4LjM4NSAxN2wyLjc1Ny0yLjc1N2ExIDEgMCAwMDAtMS40MTVsLTIuMTIxLTIuMTJhMSAxIDAgMDAtMS40MTQgMEwxNSAxMy4zMTN2MS40MTRsMy4zMTQtMy4zMTQgMi4xMjEgMi4xMjJMMTYuOTcxIDE3eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWdyaWQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAxMGgydjJoLTJ6TTIwIDEwaDJ2MmgtMnpNMTIgMTVoLTJ2Mmgyek0yMCAxNWgydjJoLTJ6TTEyIDIwaC0ydjJoMnpNMjAgMjBoMnYyaC0yek0xNyAxMGgtMnYyaDJ6TTE1IDE1aDJ2MmgtMnpNMTcgMjBoLTJ2MmgyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aWR5LXVwLWxpc3QtaG9yaXpvbnRhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTEwIDIyLjV2LTEzaDJ2MTN6TTE1IDIyLjV2LTEzaDJ2MTN6TTIwIDkuNXYxM2gydi0xM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOS41IDEwaDEzdjJoLTEzek05LjUgMTVoMTN2MmgtMTN6TTIyLjUgMjBoLTEzdjJoMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpbWVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTkgOGgtNlY3aDZ6TTE2LjUgMTd2LTVoLTF2NWEuNS41IDAgMDAxIDB6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIyLjcxNSAxMi42NWwxLjUyNy0xLjUyOUwyMi4xMjIgOWwtMS40ODMgMS40ODJhOCA4IDAgMTAyLjA3NSAyLjE2N3pNMjMgMTdhNyA3IDAgMTEtMi4zODQtNS4yNjNsLjY0Ny42NDdBNi45NzQgNi45NzQgMCAwMTIzIDE3em0tMS4wMDgtNS4zbC4xMy4xMjguNzA2LS43MDctLjcwNy0uNzA3LS43MDEuNzAxYy4yLjE4NS4zOTEuMzguNTcyLjU4NXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10cmFzaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0IDE4LjV2LTRoMXY0ek0xNyAxOC41di00aDF2NHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTAuNWEyIDIgMCAwMC0yLTJoLTJhMiAyIDAgMDAtMiAyaC0zdjFoMXYxMGEyIDIgMCAwMDIgMmg2YTIgMiAwIDAwMi0ydi0xMGgxdi0xem0tNC0xYTEgMSAwIDAwLTEgMWg0YTEgMSAwIDAwLTEtMXptNSAyaC04djEwYTEgMSAwIDAwMSAxaDZhMSAxIDAgMDAxLTF6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdmVydGljYWwtcGFkZGluZyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYxSDl6bTAgMTNoMTR2MUg5eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOSAxM2gtNnY2aDZ6bS03LTF2OGg4di04eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZpc2libGUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNiAxOGEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMTJhNy40OTkgNy40OTkgMCAwMTYuNjM1IDRBNy40OTkgNy40OTkgMCAwMTE2IDIwYTcuNDk5IDcuNDk5IDAgMDEtNi42MzUtNEE3LjQ5OSA3LjQ5OSAwIDAxMTYgMTJ6bTAgN2E2LjQ5NSA2LjQ5NSAwIDAxLTUuNDc4LTNBNi40OTUgNi40OTUgMCAwMTE2IDEzYzIuMyAwIDQuMzIyIDEuMTk0IDUuNDc4IDNBNi40OTUgNi40OTUgMCAwMTE2IDE5eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmctbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDZsMTAgMThINnptLTEgMTF2LTRoMnY0em0wIDJ2Mmgydi0yeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXdhcm5pbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDlsOCAxNEg4em0tMSA4LjVWMTRoMnYzLjV6bTAgMS41djJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLWJ1dHRvbiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgd2lkdGg6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmljb24tYnV0dG9uICoge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjpob3ZlciB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1ob3Zlci1maWxsKTtcXG59XFxuXFxuLmljb24tYnV0dG9uOmFjdGl2ZSwgLmljb24tYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZDphY3RpdmUsIC5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmljb24tYnV0dG9uLS1zZWxlY3RlZCAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pbnB1dCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5pbnB1dF9fZmllbGQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpob3ZlciwgLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93bjpob3ZlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDphY3RpdmUsIC5pbnB1dF9fZmllbGQ6Zm9jdXMge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uaW5wdXQtLXdpdGgtaWNvbiAuaW5wdXRfX2ZpZWxkIHtcXG4gIHBhZGRpbmctbGVmdDogMzJweDtcXG59XFxuXFxuLmlucHV0IC5pY29uIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMHB4O1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHotaW5kZXg6IDE7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogdG9wO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCAwO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXAgLmljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ub25ib2FyZGluZy10aXBfX21zZyB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5yYWRpbyB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKCdkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHZpZXdCb3g9XFxcIjAgMCA2IDZcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCIlM0UlM0NyZWN0IHdpZHRoPVxcXCI2XFxcIiBoZWlnaHQ9XFxcIjZcXFwiIHJ4PVxcXCIzXFxcIiBmaWxsPVxcXCJibGFja1xcXCIgZmlsbC1vcGFjaXR5PVxcXCIwLjhcXFwiLyUzRSUzQy9zdmclM0UlMEEnKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAycHggMnB4O1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWwge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ucmFkaW9fX2J1dHRvbjpjaGVja2VkOmRpc2FibGVkICsgLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4ucmFkaW9fX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDJweCAxMHB4IDAgLThweDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLnNlY3Rpb24tdGl0bGUge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB3aWR0aDogMTAwJTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXh4c21hbGwpIC8gMikgMCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG5zZWxlY3Quc2VsZWN0LW1lbnUge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51IHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMzBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXh4c21hbGwpIDBweCB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3ZlcmZsb3cteTogaGlkZGVuO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tYmxhY2sxKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b24gKiB7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZDpob3ZlciAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCwgLnNlbGVjdC1tZW51X19idXR0b246Zm9jdXMgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAxLjA7XFxuICBtYXJnaW4tbGVmdDogYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBtYXJnaW4tbGVmdDogLTEycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkIC5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBtYXJnaW4tcmlnaHQ6IDZweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3cteDogaGlkZGVuO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2NhcmV0IHtcXG4gIHdpZHRoOiAzMHB4O1xcbiAgaGVpZ2h0OiAzMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tdG9wOiAtMXB4O1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjMwJTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMzAlMjAzMCUyMiUyMHdpZHRoJTNEJTIyMzAlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xNSUyMDE2LjcwNzEtMy0zJTIwLjcwNzEtLjcwNzElMjAyLjY0NjUlMjAyLjY0NjQlMjAyLjY0NjQtMi42NDY0LjcwNzEuNzA3MS0zJTIwMy0uMzUzNS4zNTM2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMjBmaWxsLXJ1bGUlM0QlMjJldmVub2RkJTIyJTJGJTNFJTNDJTJGc3ZnJTNFXFxcIik7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51IC5pY29uIHtcXG4gIG1hcmdpbi1sZWZ0OiAtOHB4O1xcbiAgbWFyZ2luLXRvcDogLTJweDtcXG4gIG1hcmdpbi1yaWdodDogMDtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1odWQpO1xcbiAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWh1ZCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKSAwO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBtYXJnaW46IDA7XFxuICB6LWluZGV4OiAxMDAwO1xcbiAgb3ZlcmZsb3cteDogb3ZlcmxheTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudS0tYWN0aXZlIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIHdpZHRoOiAxMnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBRUFBQUFCQ0FRQUFBQzFIQXdDQUFBQUMwbEVRVlI0Mm1Oa1lBQUFBQVlBQWpDQjBDOEFBQUFBU1VWT1JLNUNZSUk9KTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiByZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgYXV0bztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XFxuICBib3JkZXI6IHNvbGlkIDNweCB0cmFuc3BhcmVudDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAxMHB4IDEwcHggdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMHB4IHZhcigtLXNpemUteHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0tLXNlbGVjdGVkIC5zZWxlY3QtbWVudV9faXRlbS1pY29uIHtcXG4gIG9wYWNpdHk6IDEuMDtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWxhYmVsIHtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEzLjIwNjklMjA1LjIwNzI0LTUuNTAwMDIlMjA1LjQ5OTk2LS43MDcxMS43MDcyLS43MDcxMS0uNzA3Mi0zLTIuOTk5OTYlMjAxLjQxNDIyLTEuNDE0MjElMjAyLjI5Mjg5JTIwMi4yOTI4OSUyMDQuNzkyOTMtNC43OTI4OXolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxufVxcblxcbi5zZWxlY3QtbWVudS0taGlnaGxpZ2h0LCAuc2VsZWN0LW1lbnVfX2l0ZW06aG92ZXIsIC5zZWxlY3QtbWVudV9faXRlbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19kaXZpZGVyLWxhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHhzbWFsbCkgMCB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBjb2xvcjogdmFyKC0td2hpdGU0KTtcXG4gIG1hcmdpbi10b3A6IDA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZTIpO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDFweDtcXG4gIG1hcmdpbjogOHB4IDAgN3B4IDA7XFxufVxcblxcbi5zd2l0Y2gge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC8qXFxuICAgICZfX3RvZ2dsZTpmb2N1cyArICZfX2xhYmVsOmJlZm9yZSB7XFxuICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggdmFyKC0tYmx1ZSk7XFxuICAgIH1cXG4gICAgKi9cXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4LW9wYXF1ZSk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpjaGVja2VkICsgLnN3aXRjaF9fbGFiZWw6YWZ0ZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEycHgpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZDpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibGFjayk7XFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZTpkaXNhYmxlZCArIC5zd2l0Y2hfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgY2FsYyh2YXIoLS1zaXplLXhsYXJnZSkgLSAycHgpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnN3aXRjaF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMCAwLjJzO1xcbiAgd2lkdGg6IDIycHg7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMTBweDtcXG4gIGxlZnQ6IDhweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMTBweDtcXG4gIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xcbiAgd2lkdGg6IDEwcHg7XFxufVxcblxcbi50ZXh0YXJlYSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtaW4taGVpZ2h0OiA2MnB4O1xcbiAgbWFyZ2luOiAxcHggMCAxcHggMDtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgcmVzaXplOiBub25lO1xcbiAgb3ZlcmZsb3cteTogYXV0bztcXG59XFxuXFxuLnRleHRhcmVhOmhvdmVyLCAudGV4dGFyZWE6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6OnNlbGVjdGlvbiB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZTMpO1xcbn1cXG5cXG4udGV4dGFyZWE6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOjpwbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6Zm9jdXM6cGxhY2Vob2xkZXItc2hvd24ge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmFjdGl2ZSwgLnRleHRhcmVhOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQsIC50ZXh0YXJlYTpkaXNhYmxlZDpob3ZlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6ZGlzYWJsZWQ6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi50eXBlIHtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1mb250LWxpbmUtaGVpZ2h0KTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgLyogc2l6ZXMgKi9cXG4gIC8qIHdlaWdodHMgKi9cXG4gIC8qIGxldHRlciBzcGFjaW5nIGFkanVzdG1lbnRzIGJhc2VkIHBvcy9uZWcgYXBwbGljYXRpb24gKi9cXG59XFxuXFxuLnR5cGUtLXNtYWxsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXNtYWxsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1sYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1sYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MtbGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0teGxhcmdlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhsYXJnZSk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodC1sYXJnZSk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLW1lZGl1bSB7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG59XFxuXFxuLnR5cGUtLWJvbGQge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LWJvbGQpO1xcbn1cXG5cXG4udHlwZS0taW52ZXJzZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tc21hbGwge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0tbGFyZ2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2UgKyAudHlwZS0teGxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14bGFyZ2UpO1xcbn1cXG5cXG4udHlwZS0taW5saW5lIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWZpZ21hLXBsdWdpbi1kcy9maWdtYS1wbHVnaW4tZHMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLFNBQVM7QUFDVDtFQUNFLFdBQVc7RUFDWCxXQUFXO0VBQ1gsZUFBZTtFQUNmLGlCQUFpQjtFQUNqQixtQkFBbUI7RUFDbkIsZ0JBQWdCO0VBQ2hCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIscUJBQXFCO0VBQ3JCLGdCQUFnQjtFQUNoQiwyQkFBMkI7RUFDM0Isd0JBQXdCO0VBQ3hCLDJCQUEyQjtFQUMzQix3QkFBd0I7RUFDeEIsZ0JBQWdCO0VBQ2hCLGlDQUFpQztFQUNqQyxpQ0FBaUM7RUFDakMscUJBQXFCO0VBQ3JCLGVBQWU7RUFDZixpQkFBaUI7RUFDakIsY0FBYztFQUNkLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osMkJBQTJCO0VBQzNCLCtCQUErQjtFQUMvQixpQ0FBaUM7RUFDakMsZ0NBQWdDO0VBQ2hDLHNCQUFzQjtFQUN0QixzQkFBc0I7RUFDdEIsaUNBQWlDO0VBQ2pDLGVBQWU7RUFDZixpREFBaUQ7RUFDakQsaURB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QW9CO0VBQ3BCLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSxvQkFBb0I7RUFDcEIsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0Usb0JBQW9CO0VBQ3BCLDZCQUE2QjtBQUMvQjs7QUFFQTtFQUNFLG9CQUFvQjtFQUNwQiw2QkFBNkI7QUFDL0I7O0FBRUE7RUFDRSw2QkFBNkI7RUFDN0IsOEJBQThCO0VBQzlCLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLG1CQUFtQjtFQUNuQiw2QkFBNkI7RUFDN0IsOEJBQThCO0VBQzlCLG9CQUFvQjtBQUN0Qjs7QUFFQTtFQUNFLGtCQUFrQjtFQUNsQixvQkFBb0I7RUFDcEIsNkJBQTZCO0FBQy9COztBQUVBO0VBQ0UsYUFBYTtBQUNmOztBQUVBO0VBQ0UsOEJBQThCO0VBQzlCLGtDQUFrQztFQUNsQyxzQ0FBc0M7RUFDdEMsb0NBQW9DO0VBQ3BDLHFEQUFxRDtFQUNyRCxVQUFVO0VBQ1YsWUFBWTtFQUNaLHlEQUF5RDtBQUMzRDs7QUFFQTtFQUNFLGlDQUFpQztFQUNqQyxvREFBb0Q7QUFDdEQ7O0FBRUE7RUFDRSxpQ0FBaUM7RUFDakMsMENBQTBDO0VBQzFDLG9EQUFvRDtBQUN0RDs7QUFFQTtFQUNFLGtDQUFrQztFQUNsQywwQ0FBMEM7RUFDMUMscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usc0NBQXNDO0FBQ3hDOztBQUVBO0VBQ0Usb0NBQW9DO0FBQ3RDOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0Usb0RBQW9EO0FBQ3REOztBQUVBO0VBQ0UscURBQXFEO0FBQ3ZEOztBQUVBO0VBQ0UscUJBQXFCO0FBQ3ZCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qIFZhcnMgKi9cXG46cm9vdCB7XFxuICAvKiBDT0xPUlMgKi9cXG4gIC8qIEFjY2VudCAqL1xcbiAgLS1ibHVlOiAjMThhMGZiO1xcbiAgLS1wdXJwbGU6ICM3YjYxZmY7XFxuICAtLWhvdC1waW5rOiAjZmYwMGZmO1xcbiAgLS1ncmVlbjogIzFiYzQ3ZDtcXG4gIC0tcmVkOiAjZjI0ODIyO1xcbiAgLS15ZWxsb3c6ICNmZmViMDA7XFxuICAvKiBCYXNpYyBmb3JlZ3JvdW5kICovXFxuICAtLWJsYWNrOiAjMDAwMDAwO1xcbiAgLS1ibGFjazg6IHJnYmEoMCwgMCwgMCwgLjgpO1xcbiAgLS1ibGFjazgtb3BhcXVlOiAjMzMzMzMzO1xcbiAgLS1ibGFjazM6IHJnYmEoMCwgMCwgMCwgLjMpO1xcbiAgLS1ibGFjazMtb3BhcXVlOiAjQjNCM0IzO1xcbiAgLS13aGl0ZTogI2ZmZmZmZjtcXG4gIC0td2hpdGU4OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC44KTtcXG4gIC0td2hpdGU0OiByZ2JhKDI1NSwgMjU1LCAyNTUsIC40KTtcXG4gIC8qIEJhc2ljIGJhY2tncm91bmQgKi9cXG4gIC0tZ3JleTogI2YwZjBmMDtcXG4gIC0tc2lsdmVyOiAjZTVlNWU1O1xcbiAgLS1odWQ6ICMyMjIyMjI7XFxuICAtLXRvb2xiYXI6ICMyYzJjMmM7XFxuICAvKiBTcGVjaWFsICovXFxuICAtLWJsYWNrMTogcmdiYSgwLCAwLCAwLCAuMSk7XFxuICAtLWJsdWUzOiByZ2JhKDI0LCAxNDUsIDI1MSwgLjMpO1xcbiAgLS1wdXJwbGU0OiByZ2JhKDEyMywgOTcsIDI1NSwgLjQpO1xcbiAgLS1ob3Zlci1maWxsOiByZ2JhKDAsIDAsIDAsIC4wNik7XFxuICAtLXNlbGVjdGlvbi1hOiAjZGFlYmY3O1xcbiAgLS1zZWxlY3Rpb24tYjogI2VkZjVmYTtcXG4gIC0td2hpdGUyOiByZ2JhKDI1NSwgMjU1LCAyNTUsIC4yKTtcXG4gIC8qIFRZUE9HUkFQSFkgKi9cXG4gIC8qIFBvcyA9IHBvc2l0aXZlIGFwcGxpY2F0aW9ucyAoYmxhY2sgb24gd2hpdGUpICovXFxuICAvKiBOZWcgPSBuZWdhdGl2ZSBhcHBsaWNhdGlvbnMgKHdoaXRlIG9uIGJsYWNrKSAqL1xcbiAgLyogRm9udCBzdGFjayAqL1xcbiAgLS1mb250LXN0YWNrOiAnSW50ZXInLCBzYW5zLXNlcmlmO1xcbiAgLyogRm9udCBzaXplcyAqL1xcbiAgLS1mb250LXNpemUteHNtYWxsOiAxMXB4O1xcbiAgLS1mb250LXNpemUtc21hbGw6IDEycHg7XFxuICAtLWZvbnQtc2l6ZS1sYXJnZTogMTNweDtcXG4gIC0tZm9udC1zaXplLXhsYXJnZTogMTRweDtcXG4gIC8qIEZvbnQgd2VpZ2h0cyAqL1xcbiAgLS1mb250LXdlaWdodC1ub3JtYWw6IDQwMDtcXG4gIC0tZm9udC13ZWlnaHQtbWVkaXVtOiA1MDA7XFxuICAtLWZvbnQtd2VpZ2h0LWJvbGQ6IDYwMDtcXG4gIC8qIExpbmVoZWlnaHQgKi9cXG4gIC0tZm9udC1saW5lLWhlaWdodDogMTZweDtcXG4gIC8qIFVzZSBGb3IgeHNtYWxsLCBzbWFsbCBmb250IHNpemVzICovXFxuICAtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2U6IDI0cHg7XFxuICAvKiBVc2UgRm9yIGxhcmdlLCB4bGFyZ2UgZm9udCBzaXplcyAqL1xcbiAgLyogTGV0dGVyc3BhY2luZyAqL1xcbiAgLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGw6IC4wMDVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteHNtYWxsOiAuMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGw6IDA7XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXNtYWxsOiAuMDA1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlOiAtLjAwMjVlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWctbGFyZ2U6IC4wMDI1ZW07XFxuICAtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZTogLS4wMDFlbTtcXG4gIC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlOiAtLjAwMWVtO1xcbiAgLyogQk9SREVSIFJBRElVUyAqL1xcbiAgLS1ib3JkZXItcmFkaXVzLXNtYWxsOiAycHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbWVkOiA1cHg7XFxuICAtLWJvcmRlci1yYWRpdXMtbGFyZ2U6IDZweDtcXG4gIC8qIFNIQURPV1MgKi9cXG4gIC0tc2hhZG93LWh1ZDogMCA1cHggMTdweCByZ2JhKDAsIDAsIDAsIC4yKSwgMCAycHggN3B4IHJnYmEoMCwgMCwgMCwgLjE1KTtcXG4gIC0tc2hhZG93LWZsb2F0aW5nLXdpbmRvdzogMCAycHggMTRweCByZ2JhKDAsIDAsIDAsIC4xNSk7XFxuICAvKiBTUEFDSU5HICsgU0laSU5HICovXFxuICAtLXNpemUteHh4c21hbGw6IDRweDtcXG4gIC0tc2l6ZS14eHNtYWxsOiA4cHg7XFxuICAtLXNpemUteHNtYWxsOiAxNnB4O1xcbiAgLS1zaXplLXNtYWxsOiAyNHB4O1xcbiAgLS1zaXplLW1lZGl1bTogMzJweDtcXG4gIC0tc2l6ZS1sYXJnZTogNDBweDtcXG4gIC0tc2l6ZS14bGFyZ2U6IDQ4cHg7XFxuICAtLXNpemUteHhsYXJnZTogNjRweDtcXG4gIC0tc2l6ZS14eHhsYXJnZTogODBweDtcXG59XFxuXFxuLyogR2xvYmFsIHN0eWxlcyAqL1xcbioge1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuXFxuYm9keSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4vKiAgRk9OVFMgKi9cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1SZWd1bGFyLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVJlZ3VsYXIud29mZj92PTMuN1xcXCIpIGZvcm1hdChcXFwid29mZlxcXCIpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gIGZvbnQtZmFtaWx5OiAnSW50ZXInO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGZvbnQtc3R5bGU6IG5vcm1hbDtcXG4gIHNyYzogdXJsKFxcXCJodHRwczovL3JzbXMubWUvaW50ZXIvZm9udC1maWxlcy9JbnRlci1NZWRpdW0ud29mZjI/dj0zLjdcXFwiKSBmb3JtYXQoXFxcIndvZmYyXFxcIiksIHVybChcXFwiaHR0cHM6Ly9yc21zLm1lL2ludGVyL2ZvbnQtZmlsZXMvSW50ZXItTWVkaXVtLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdJbnRlcic7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xcbiAgc3JjOiB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmMlxcXCIpLCB1cmwoXFxcImh0dHBzOi8vcnNtcy5tZS9pbnRlci9mb250LWZpbGVzL0ludGVyLVNlbWlCb2xkLndvZmYyP3Y9My43XFxcIikgZm9ybWF0KFxcXCJ3b2ZmXFxcIik7XFxufVxcblxcbi8qIFVUSUxJVElFUyAqL1xcbi8qIHBhZGRpbmcgKi9cXG4ucC14eHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnAteHhzbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucC14c21hbGwge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucC1zbWFsbCB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnAtbWVkaXVtIHtcXG4gIHBhZGRpbmc6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnAtbGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wLXhsYXJnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wLXh4bGFyZ2Uge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnAtaHVnZSB7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyB0b3AgKi9cXG4ucHQteHh4c21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ucHQteHhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnB0LXhzbWFsbCB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucHQtc21hbGwge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ucHQtbWVkaXVtIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wdC1sYXJnZSB7XFxuICBwYWRkaW5nLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wdC14bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLnB0LXh4bGFyZ2Uge1xcbiAgcGFkZGluZy10b3A6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wdC1odWdlIHtcXG4gIHBhZGRpbmctdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogcGFkZGluZyByaWdodCAqL1xcbi5wci14eHhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnByLXh4c21hbGwge1xcbiAgcGFkZGluZy1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLnByLXhzbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wci1zbWFsbCB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnByLW1lZGl1bSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5wci1sYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnByLXhsYXJnZSB7XFxuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wci14eGxhcmdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5wci1odWdlIHtcXG4gIHBhZGRpbmctcmlnaHQ6IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGJvdHRvbSAqL1xcbi5wYi14eHhzbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5wYi14eHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGIteHNtYWxsIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5wYi1zbWFsbCB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5wYi1tZWRpdW0ge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBiLWxhcmdlIHtcXG4gIHBhZGRpbmctYm90dG9tOiB2YXIoLS1zaXplLWxhcmdlKTtcXG59XFxuXFxuLnBiLXhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ucGIteHhsYXJnZSB7XFxuICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBiLWh1Z2Uge1xcbiAgcGFkZGluZy1ib3R0b206IHZhcigtLXNpemUteHh4bGFyZ2UpO1xcbn1cXG5cXG4vKiBwYWRkaW5nIGxlZnQgKi9cXG4ucGwteHh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLnBsLXh4c21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbn1cXG5cXG4ucGwteHNtYWxsIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ucGwtc21hbGwge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLnBsLW1lZGl1bSB7XFxuICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG59XFxuXFxuLnBsLWxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5wbC14bGFyZ2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5wbC14eGxhcmdlIHtcXG4gIHBhZGRpbmctbGVmdDogdmFyKC0tc2l6ZS14eGxhcmdlKTtcXG59XFxuXFxuLnBsLWh1Z2Uge1xcbiAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luICovXFxuLm0teHh4c21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4eHNtYWxsKTtcXG59XFxuXFxuLm0teHhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tLXhzbWFsbCB7XFxuICBtYXJnaW46IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm0tc21hbGwge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXNtYWxsKTtcXG59XFxuXFxuLm0tbWVkaXVtIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubS1sYXJnZSB7XFxuICBtYXJnaW46IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubS14bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXhsYXJnZSk7XFxufVxcblxcbi5tLXh4bGFyZ2Uge1xcbiAgbWFyZ2luOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubS1odWdlIHtcXG4gIG1hcmdpbjogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiB0b3AgKi9cXG4ubXQteHh4c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tdC14eHNtYWxsIHtcXG4gIG1hcmdpbi10b3A6IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tdC14c21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubXQtc21hbGwge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tdC1tZWRpdW0ge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubXQtbGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tdC14bGFyZ2Uge1xcbiAgbWFyZ2luLXRvcDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXQteHhsYXJnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubXQtaHVnZSB7XFxuICBtYXJnaW4tdG9wOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIHJpZ2h0ICovXFxuLm1yLXh4eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tci14eHNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1yLXhzbWFsbCB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHNtYWxsKTtcXG59XFxuXFxuLm1yLXNtYWxsIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tci1tZWRpdW0ge1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tci1sYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUtbGFyZ2UpO1xcbn1cXG5cXG4ubXIteGxhcmdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubXIteHhsYXJnZSB7XFxuICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tci1odWdlIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHhsYXJnZSk7XFxufVxcblxcbi8qIG1hcmdpbiBib3R0b20gKi9cXG4ubWIteHh4c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14eHhzbWFsbCk7XFxufVxcblxcbi5tYi14eHNtYWxsIHtcXG4gIG1hcmdpbi1ib3R0b206IHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5tYi14c21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWItc21hbGwge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1zbWFsbCk7XFxufVxcblxcbi5tYi1tZWRpdW0ge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbn1cXG5cXG4ubWItbGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tYi14bGFyZ2Uge1xcbiAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc2l6ZS14bGFyZ2UpO1xcbn1cXG5cXG4ubWIteHhsYXJnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4bGFyZ2UpO1xcbn1cXG5cXG4ubWItaHVnZSB7XFxuICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbWFyZ2luIGxlZnQgKi9cXG4ubWwteHh4c21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHh4c21hbGwpO1xcbn1cXG5cXG4ubWwteHhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm1sLXhzbWFsbCB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4ubWwtc21hbGwge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUtc21hbGwpO1xcbn1cXG5cXG4ubWwtbWVkaXVtIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxufVxcblxcbi5tbC1sYXJnZSB7XFxuICBtYXJnaW4tbGVmdDogdmFyKC0tc2l6ZS1sYXJnZSk7XFxufVxcblxcbi5tbC14bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteGxhcmdlKTtcXG59XFxuXFxuLm1sLXh4bGFyZ2Uge1xcbiAgbWFyZ2luLWxlZnQ6IHZhcigtLXNpemUteHhsYXJnZSk7XFxufVxcblxcbi5tbC1odWdlIHtcXG4gIG1hcmdpbi1sZWZ0OiB2YXIoLS1zaXplLXh4eGxhcmdlKTtcXG59XFxuXFxuLyogbGF5b3V0IHV0aWxpdGllcyAqL1xcbi5oaWRkZW4ge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLmlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmU7XFxufVxcblxcbi5ibG9jayB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLmlubGluZS1ibG9jayB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblxcbi5mbGV4IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5pbmxpbmUtZmxleCB7XFxuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcXG59XFxuXFxuLmNvbHVtbiB7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbn1cXG5cXG4uY29sdW1uLXJldmVyc2Uge1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG5cXG4ucm93IHtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5yb3ctcmV2ZXJzZSB7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93LXJldmVyc2U7XFxufVxcblxcbi5mbGV4LXdyYXAge1xcbiAgZmxleC13cmFwOiB3cmFwO1xcbn1cXG5cXG4uZmxleC13cmFwLXJldmVyc2Uge1xcbiAgZmxleC13cmFwOiB3cmFwLXJldmVyc2U7XFxufVxcblxcbi5mbGV4LW5vLXdyYXAge1xcbiAgZmxleC13cmFwOiBub3dyYXA7XFxufVxcblxcbi5mbGV4LXNocmluayB7XFxuICBmbGV4LXNocmluazogMTtcXG59XFxuXFxuLmZsZXgtbm8tc2hyaW5rIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uZmxleC1ncm93IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZsZXgtbm8tZ3JvdyB7XFxuICBmbGV4LWdyb3c6IDA7XFxufVxcblxcbi5qdXN0aWZ5LWNvbnRlbnQtc3RhcnQge1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWVuZCB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbn1cXG5cXG4uanVzdGlmeS1jb250ZW50LWNlbnRlciB7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1iZXR3ZWVuIHtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG59XFxuXFxuLmp1c3RpZnktY29udGVudC1hcm91bmQge1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1zdGFydCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLWVuZCB7XFxuICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XFxufVxcblxcbi5hbGlnbi1pdGVtcy1jZW50ZXIge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWl0ZW1zLXN0cmV0Y2gge1xcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LXN0YXJ0IHtcXG4gIGFsaWduLWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XFxufVxcblxcbi5hbGlnbi1jb250ZW50LWVuZCB7XFxuICBhbGlnbi1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtY2VudGVyIHtcXG4gIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcXG59XFxuXFxuLmFsaWduLWNvbnRlbnQtc3RyZXRjaCB7XFxuICBhbGlnbi1jb250ZW50OiBzdHJldGNoO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdGFydCB7XFxuICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1lbmQge1xcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1jZW50ZXIge1xcbiAgYWxpZ24tc2VsZjogY2VudGVyO1xcbn1cXG5cXG4uYWxpZ24tc2VsZi1zdHJldGNoIHtcXG4gIGFsaWduLXNlbGY6IHN0cmV0Y2g7XFxufVxcblxcbi5idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLWxhcmdlKTtcXG4gIGNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbWVkaXVtKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmFjdGl2ZSwgLmJ1dHRvbi0tcHJpbWFyeTplbmFibGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXByaW1hcnk6ZGlzYWJsZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1yZWQpO1xcbn1cXG5cXG4uYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1wcmltYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tcHJpbWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeSwgLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrOCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpIDAgY2FsYyh2YXIoLS1zaXplLXhzbWFsbCkgKyAxcHgpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXNtYWxsKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5OmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDphY3RpdmUsIC5idXR0b24tLXNlY29uZGFyeTplbmFibGVkOmZvY3VzLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS14c21hbGwpO1xcbn1cXG5cXG4uYnV0dG9uLS1zZWNvbmRhcnk6ZGlzYWJsZWQsIC5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazMpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLXJlZCk7XFxuICBjb2xvcjogdmFyKC0tcmVkKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG59XFxuXFxuLmJ1dHRvbi0tc2Vjb25kYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6YWN0aXZlLCAuYnV0dG9uLS1zZWNvbmRhcnktZGVzdHJ1Y3RpdmU6ZW5hYmxlZDpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXhzbWFsbCkgMCB2YXIoLS1zaXplLXhzbWFsbCk7XFxufVxcblxcbi5idXR0b24tLXNlY29uZGFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1yZWQpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxuICBvcGFjaXR5OiAwLjQ7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1ibHVlKTtcXG4gIHBhZGRpbmc6IDA7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy1zbWFsbCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmVuYWJsZWQ6Zm9jdXMsIC5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5OmRpc2FibGVkLCAuYnV0dG9uLS10ZXJ0aWFyeS1kZXN0cnVjdGl2ZTpkaXNhYmxlZCB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLmJ1dHRvbi0tdGVydGlhcnktZGVzdHJ1Y3RpdmUge1xcbiAgY29sb3I6IHZhcigtLXJlZCk7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmVuYWJsZWQ6Zm9jdXMge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxufVxcblxcbi5idXR0b24tLXRlcnRpYXJ5LWRlc3RydWN0aXZlOmRpc2FibGVkIHtcXG4gIG9wYWNpdHk6IDAuNDtcXG59XFxuXFxuLmNoZWNrYm94IHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKiB1bmNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmZvY3VzICsgJl9fbGFiZWw6YmVmb3JlIHtcXG5cXHRcXHRib3JkZXI6IDFweCBzb2xpZCB2YXIoLS13aGl0ZSk7XFxuXFx0ICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1ibHVlKTtcXG5cXHR9Ki9cXG4gIC8qIGNoZWNrZWQgKi9cXG4gIC8qXFxuXFx0Jl9fYm94OmNoZWNrZWQ6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcblxcdFxcdGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXdoaXRlKTtcXG5cXHQgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcblxcdH0qL1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveCB7XFxuICBvcGFjaXR5OiAwO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIG1hcmdpbi1sZWZ0OiAtMTZweDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgdmFyKC0tc2l6ZS1zbWFsbCk7XFxuICBoZWlnaHQ6IDEwMCU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2xhYmVsOmJlZm9yZSB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cy1zbWFsbCk7XFxuICBjb250ZW50OiAnJztcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBtYXJnaW46IC0xcHggMTBweCAwIC04cHg7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY2hlY2tib3hfX2JveDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWwge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjclMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjA4JTIwNyUyMiUyMHdpZHRoJTNEJTIyOCUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGNsaXAtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMjBkJTNEJTIybTEuMTc2NDclMjAxLjg4MjM2JTIwMS44ODIzNSUyMDEuODgyMzYlMjAzLjc2NDcxLTMuNzY0NzIlMjAxLjE3NjQ3JTIwMS4xNzY0OC00Ljk0MTE4JTIwNC45NDEyLTMuMDU4ODItMy4wNTg4NHolMjIlMjBmaWxsJTNEJTIyJTIzZmZmJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IDFweCAycHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG59XFxuXFxuLmNoZWNrYm94X19ib3g6Y2hlY2tlZDpkaXNhYmxlZCArIC5jaGVja2JveF9fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBtYXJnaW46IDA7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1zaWx2ZXIpO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9faXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2xhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIHBhZGRpbmc6IDAgOHB4IDAgMjRweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlX19sYWJlbDpiZWZvcmUge1xcbiAgY29udGVudDogJyc7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDhweDtcXG4gIGxlZnQ6IDRweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgd2lkdGg6IDE2cHg7XFxuICBoZWlnaHQ6IDE2cHg7XFxuICBvcGFjaXR5OiAwLjM7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtMTElMjA4LTQtM3Y2eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uZGlzY2xvc3VyZV9fbGFiZWw6aG92ZXI6YmVmb3JlIHtcXG4gIG9wYWNpdHk6IDAuODtcXG59XFxuXFxuLmRpc2Nsb3N1cmVfX2NvbnRlbnQge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKSB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5kaXNjbG9zdXJlLS1zZWN0aW9uIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLmRpc2Nsb3N1cmUtLWV4cGFuZGVkIC5kaXNjbG9zdXJlX19jb250ZW50IHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uZGlzY2xvc3VyZS0tZXhwYW5kZWQgLmRpc2Nsb3N1cmVfX2xhYmVsOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwLjg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDt1dGY4LCUzQ3N2ZyUyMGZpbGwlM0QlMjJub25lJTIyJTIwaGVpZ2h0JTNEJTIyMTYlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAxNiUyMDE2JTIyJTIwd2lkdGglM0QlMjIxNiUyMiUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTNFJTNDcGF0aCUyMGQlM0QlMjJtOSUyMDEwJTIwMy00aC02eiUyMiUyMGZpbGwlM0QlMjIlMjMwMDAlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXN0YWNrKTtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTJweCAtMXB4O1xcbn1cXG5cXG4uaWNvbi0tc3BpbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxuICAgICAgICAgIGFuaW1hdGlvbjogcm90YXRpbmcgMS4wcyBsaW5lYXIgaW5maW5pdGU7XFxufVxcblxcbkAtd2Via2l0LWtleWZyYW1lcyByb3RhdGluZyB7XFxuICBmcm9tIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XFxuICB9XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XFxuICB9XFxufVxcblxcbkBrZXlmcmFtZXMgcm90YXRpbmcge1xcbiAgZnJvbSB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpO1xcbiAgfVxcbiAgdG8ge1xcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xcbiAgfVxcbn1cXG5cXG4uaWNvbi0tYmx1ZSB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDU0JSkgc2VwaWEoMTYlKSBzYXR1cmF0ZSg3NDk5JSkgaHVlLXJvdGF0ZSgxNzlkZWcpIGJyaWdodG5lc3MoOTglKSBjb250cmFzdCgxMDElKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNTQlKSBzZXBpYSgxNiUpIHNhdHVyYXRlKDc0OTklKSBodWUtcm90YXRlKDE3OWRlZykgYnJpZ2h0bmVzcyg5OCUpIGNvbnRyYXN0KDEwMSUpO1xcbn1cXG5cXG4uaWNvbi0tcHVycGxlIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDAlKSBzZXBpYSg1OSUpIHNhdHVyYXRlKDQwMDElKSBodWUtcm90YXRlKDIzMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDIlKTtcXG59XFxuXFxuLmljb24tLXB1cnBsZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3MiUpIHNlcGlhKDQwJSkgc2F0dXJhdGUoNjYwJSkgaHVlLXJvdGF0ZSgyMDJkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTAzJSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDcyJSkgc2VwaWEoNDAlKSBzYXR1cmF0ZSg2NjAlKSBodWUtcm90YXRlKDIwMmRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDMlKTtcXG59XFxuXFxuLmljb24tLWhvdC1waW5rIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTglKSBzZXBpYSg5MCUpIHNhdHVyYXRlKDMzNDclKSBodWUtcm90YXRlKDI5M2RlZykgYnJpZ2h0bmVzcygxMTYlKSBjb250cmFzdCgxMzIlKTtcXG59XFxuXFxuLmljb24tLWdyZWVuIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoNjYlKSBzZXBpYSgzOSUpIHNhdHVyYXRlKDUzODIlKSBodWUtcm90YXRlKDExNGRlZykgYnJpZ2h0bmVzcygxMDIlKSBjb250cmFzdCg3OSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg2NiUpIHNlcGlhKDM5JSkgc2F0dXJhdGUoNTM4MiUpIGh1ZS1yb3RhdGUoMTE0ZGVnKSBicmlnaHRuZXNzKDEwMiUpIGNvbnRyYXN0KDc5JSk7XFxufVxcblxcbi5pY29uLS1yZWQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg0MyUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoNTYzMiUpIGh1ZS1yb3RhdGUoMzQ5ZGVnKSBicmlnaHRuZXNzKDk3JSkgY29udHJhc3QoOTUlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNDMlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDU2MzIlKSBodWUtcm90YXRlKDM0OWRlZykgYnJpZ2h0bmVzcyg5NyUpIGNvbnRyYXN0KDk1JSk7XFxufVxcblxcbi5pY29uLS15ZWxsb3cge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg3OCUpIHNlcGlhKDg2JSkgc2F0dXJhdGUoMTYwOCUpIGh1ZS1yb3RhdGUoMWRlZykgYnJpZ2h0bmVzcygxMDclKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoNzglKSBzZXBpYSg4NiUpIHNhdHVyYXRlKDE2MDglKSBodWUtcm90YXRlKDFkZWcpIGJyaWdodG5lc3MoMTA3JSkgY29udHJhc3QoMTA0JSk7XFxufVxcblxcbi5pY29uLS1ibGFjayB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCgwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDc1MDAlKSBodWUtcm90YXRlKDExN2RlZykgYnJpZ2h0bmVzcygxMDklKSBjb250cmFzdCgxMDUlKTtcXG59XFxuXFxuLmljb24tLWJsYWNrOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSg1NiUpIHNhdHVyYXRlKDI1JSkgaHVlLXJvdGF0ZSgxMzdkZWcpIGJyaWdodG5lc3MoMTA1JSkgY29udHJhc3QoNjAlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDU2JSkgc2F0dXJhdGUoMjUlKSBodWUtcm90YXRlKDEzN2RlZykgYnJpZ2h0bmVzcygxMDUlKSBjb250cmFzdCg2MCUpO1xcbn1cXG5cXG4uaWNvbi0tYmxhY2szIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMCUpIHNhdHVyYXRlKDY5OCUpIGh1ZS1yb3RhdGUoMjE5ZGVnKSBicmlnaHRuZXNzKDY2JSkgY29udHJhc3QoMTI3JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg2OTglKSBodWUtcm90YXRlKDIxOWRlZykgYnJpZ2h0bmVzcyg2NiUpIGNvbnRyYXN0KDEyNyUpO1xcbn1cXG5cXG4uaWNvbi0td2hpdGUge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCgxMDAlKSBzZXBpYSgxMDAlKSBzYXR1cmF0ZSgwJSkgaHVlLXJvdGF0ZSgyNjlkZWcpIGJyaWdodG5lc3MoMTAzJSkgY29udHJhc3QoMTA0JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG59XFxuXFxuLmljb24tLXdoaXRlOCB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDk5JSkgc2VwaWEoMiUpIHNhdHVyYXRlKDUlKSBodWUtcm90YXRlKDU1ZGVnKSBicmlnaHRuZXNzKDEwNCUpIGNvbnRyYXN0KDk4JSk7XFxufVxcblxcbi5pY29uLS13aGl0ZTQge1xcbiAgLXdlYmtpdC1maWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbiAgICAgICAgICBmaWx0ZXI6IGludmVydCg5OSUpIHNlcGlhKDIlKSBzYXR1cmF0ZSg4OTclKSBodWUtcm90YXRlKDI0NWRlZykgYnJpZ2h0bmVzcygxMTclKSBjb250cmFzdCg5MyUpO1xcbn1cXG5cXG4uaWNvbi0tYWRqdXN0IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEyIDE2LjA1VjloMXY3LjA1YTIuNSAyLjUgMCAwMTAgNC45VjIzaC0xdi0yLjA1YTIuNSAyLjUgMCAwMTAtNC45em0yIDIuNDVhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6TTE5IDIzaDF2LTcuMDVhMi41IDIuNSAwIDAwMC00LjlWOWgtMXYyLjA1YTIuNSAyLjUgMCAwMDAgNC45em0yLTkuNWExLjUgMS41IDAgMTAtMyAwIDEuNSAxLjUgMCAwMDMgMHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxlcnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjI1IDE3LjM5M2ExLjc1IDEuNzUgMCAwMDEuNzUgMS43NVYyMEg5di0uODU3YTEuNzUgMS43NSAwIDAwMS43NS0xLjc1VjE0YzAtMy4zMTQgMi4zNS02IDUuMjUtNnM1LjI1IDIuNjg2IDUuMjUgNnptLTEtMy4zOTN2My4zOTNjMCAuNi4xOTIgMS4xNTUuNTE4IDEuNjA3aC05LjUzNmEyLjczOCAyLjczOCAwIDAwLjUxOC0xLjYwN1YxNGMwLTIuODkxIDIuMDI0LTUgNC4yNS01czQuMjUgMi4xMDkgNC4yNSA1eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xNiAyM2EyIDIgMCAwMS0yLTJoLTFhMyAzIDAgMTA2IDBoLTFhMiAyIDAgMDEtMiAyeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbmdsZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIgMTJ2OGg4di0xaC0zYTQgNCAwIDAwLTQtNHYtM3ptMSA0djNoM2EzIDMgMCAwMC0zLTN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYXJyb3ctbGVmdC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEyLjIwNyAxNi41bDEuNjQ3IDEuNjQ2LS43MDcuNzA4TDEwLjI5MyAxNmwyLjg1NC0yLjg1NC43MDcuNzA4LTEuNjQ3IDEuNjQ2aDcuNTg2bC0xLjY0Ni0xLjY0Ni43MDctLjcwOEwyMS43MDcgMTZsLTIuODUzIDIuODU0LS43MDctLjcwOCAxLjY0Ni0xLjY0NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdXAtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDEwLjI5MmwyLjg1NCAyLjg1NC0uNzA3LjcwNy0xLjY0Ni0xLjY0NnY3LjU4NWwxLjY0Ni0xLjY0Ni43MDcuNzA3LTIuODUzIDIuODU0LTIuODU0LTIuODU0LjcwNy0uNzA3IDEuNjQ3IDEuNjQ2di03LjU4NWwtMS42NDcgMS42NDYtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hdXRvLWxheW91dC1ob3Jpem9udGFsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGg1djEyaC01em0xIDFoM3YxMGgtM3ptNi0xaDV2MTJoLTV6bTEgMWgzdjEwaC0zeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWF1dG8tbGF5b3V0LXZlcnRpY2FsIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMCAxMGgxMnY1SDEwem0xIDFoMTB2M0gxMXptLTEgNmgxMnY1SDEwem0xIDFoMTB2M0gxMXonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1iYWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy43MDcgMTZsNC42NDYtNC42NDYtLjcwNy0uNzA3TDEyLjI5MyAxNmw1LjM1MyA1LjM1NC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ibGVuZC1lbXB0eSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYuNjk1IDExLjcybC0uNjkzLS43MThMMTYgMTFsLS4wMDEuMDAyLS42OTQuNzE4QzEzLjEwMiAxNC4wMTIgMTIgMTUuMjk0IDEyIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAwMS4xNzIgMi45MzYgMy45MDYgMy45MDYgMCAwMDUuNjU2IDBBNC4xOTkgNC4xOTkgMCAwMDIwIDE2Ljg1MmMwLTEuNTU4LTEuMTAyLTIuODQtMy4zMDUtNS4xMzJ6bS0uNjk1LjcyYy0uOTc3IDEuMDE3LTEuNjkzIDEuNzktMi4xOTUgMi40NzEtLjYuODE0LS44MDUgMS4zOC0uODA1IDEuOTR2LjAwM2EzLjIgMy4yIDAgMDAuODkgMi4yMzkgMi45MDYgMi45MDYgMCAwMDQuMjIgMCAzLjIgMy4yIDAgMDAuODktMi4yMzl2LS4wMDJjMC0uNTYtLjIwNS0xLjEyNy0uODA1LTEuOTQtLjUwMi0uNjgxLTEuMjE5LTEuNDU1LTIuMTk1LTIuNDcyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWJsZW5kIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNi4wMDIgMTEuMDAybC42OTMuNzE4QzE4Ljg5OCAxNC4wMTIgMjAgMTUuMjk0IDIwIDE2Ljg1MmE0LjE5OSA0LjE5OSAwIDAxLTEuMTcyIDIuOTM2IDMuOTA2IDMuOTA2IDAgMDEtNS42NTYgMEE0LjE5OSA0LjE5OSAwIDAxMTIgMTYuODUyYzAtMS41NTggMS4xMDItMi44NCAzLjMwNS01LjEzMmwuNjk0LS43MTl6bS0yLjE5NyAzLjkxYy41MDItLjY4MSAxLjIxOS0xLjQ1NSAyLjE5NS0yLjQ3Mi45NzYgMS4wMTcgMS42OTMgMS43OSAyLjE5NSAyLjQ3MS42LjgxNC44MDUgMS4zOC44MDUgMS45NHYuMDAzYzAgLjA0OSAwIC4wOTgtLjAwMy4xNDZoLTUuOTk0YTMuMzcgMy4zNyAwIDAxLS4wMDMtLjE0NnYtLjAwMmMwLS41Ni4yMDUtMS4xMjcuODA1LTEuOTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYnJlYWsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgb3BhY2l0eT0nLjknJTNFJTNDcGF0aCBkPSdNMTMgOXYzaDFWOXpNMjIuMTAzIDkuODk2YTIuOTc1IDIuOTc1IDAgMDAtNC4yMDcgMGwtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTEuOTc1IDEuOTc1IDAgMDEyLjc5MyAyLjc5M2wtMi43NSAyLjc1LjcwNy43MDcgMi43NS0yLjc1YTIuOTc1IDIuOTc1IDAgMDAwLTQuMjA3ek05Ljg5NiAyMi4xMDRhMi45NzUgMi45NzUgMCAwMTAtNC4yMDhsMi43NS0yLjc1LjcwNy43MDctMi43NSAyLjc1YTEuOTc1IDEuOTc1IDAgMDAyLjc5MyAyLjc5M2wyLjc1LTIuNzUuNzA3LjcwNy0yLjc1IDIuNzVhMi45NzUgMi45NzUgMCAwMS00LjIwNyAwek0yMyAxOWgtM3YtMWgzek0xOSAyMHYzaC0xdi0zek0xMiAxM0g5djFoM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtZG93biB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2IDE4bDMtNGgtNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtbGVmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTEzIDE2bDQtM3Y2eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jYXJldC1yaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE5IDE2bC00LTN2NnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY2FyZXQtdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiAxNGwzIDRoLTZ6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNoZWNrIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMS4yMDcgMTMuNzA3TDE1IDE5LjkxNGwtMy43MDctMy43MDcgMS40MTQtMS40MTRMMTUgMTcuMDg2bDQuNzkzLTQuNzkzeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNsb3NlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTYgMTUuMjkzbDQuNjQ2LTQuNjQ2LjcwOC43MDdMMTYuNzA3IDE2bDQuNjQ3IDQuNjQ3LS43MDcuNzA3TDE2IDE2LjcwN2wtNC42NDYgNC42NDctLjcwNy0uNzA3TDE1LjI5MyAxNmwtNC42NDYtNC42NDYuNzA3LS43MDd6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWNvbXBvbmVudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTIuMDYzIDEwLjkzOEwxNiAxNC44NzRsMy45MzgtMy45MzhMMTYgN3ptNi40NiAwTDE2IDEzLjQ2bC0yLjUyMy0yLjUyNEwxNiA4LjQxNXptLTYuNDYgMTAuMTI0TDE2IDI1bDMuOTM4LTMuOTM4TDE2IDE3LjEyNXptNi40NiAwTDE2IDIzLjU4N2wtMi41MjMtMi41MjNMMTYgMTguNTM4ek03IDE2bDMuOTM3LTMuOTM4TDE0Ljg3NSAxNmwtMy45MzggMy45Mzh6bTMuOTM3IDIuNTIzTDEzLjQ2MSAxNmwtMi41MjQtMi41MjNMOC40MTUgMTZ6TTE3LjEyNSAxNmwzLjkzOCAzLjkzOEwyNSAxNmwtMy45MzgtMy45Mzh6bTYuNDYgMGwtMi41MjMgMi41MjNMMTguNTQgMTZsMi41MjMtMi41MjN6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tY29ybmVyLXJhZGl1cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjEgMTNoLTRhNCA0IDAgMDAtNCA0djRoLTF2LTRhNSA1IDAgMDE1LTVoNHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1jb3JuZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAxMWgzdjFoLTJ2MmgtMXptNyAwaDN2M2gtMXYtMmgtMnptLTYgOXYtMmgtMXYzaDN2LTF6bTktMnYzaC0zdi0xaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZGlzdHJpYnV0ZS1ob3Jpem9udGFsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMSAyMi41di0xM2gtMXYxM3pNMjIgOS41djEzaC0xdi0xM3pNMTcgMTIuNXY3aC0ydi03eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kaXN0cmlidXRlLXZlcnRpY2FsLXNwYWNpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005LjUgMTBoMTN2MWgtMTN6TTEyLjUgMTVoN3YyaC03ek0yMi41IDIxaC0xM3YxaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1kcmFmdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgOC41aDcuNzA3TDIyIDEyLjc5M1YyMy41SDEwem0xIDF2MTNoMTB2LTloLTR2LTR6bTcgLjcwN2wyLjI5MyAyLjI5M0gxOHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1lZmZlY3RzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYuNSA4LjVoLTF2M2gxek0xMS4wNSAxMC4zNDNsLS43MDcuNzA3IDIuMTIxIDIuMTIyLjcwOC0uNzA4ek0yMS42NTcgMTEuMDVsLS43MDctLjcwNy0yLjEyMSAyLjEyMS43MDcuNzA4ek04LjUgMTUuNXYxaDN2LTF6TTIwLjUgMTUuNXYxaDN2LTF6TTEzLjE3MiAxOS41MzVsLS43MDgtLjcwNy0yLjEyIDIuMTIyLjcwNi43MDd6TTE5LjUzNSAxOC44MjhsLS43MDcuNzA3IDIuMTIyIDIuMTIyLjcwNy0uNzA3ek0xNi41IDIwLjVoLTF2M2gxeicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xOC40OTggMTUuOTk4YTIuNSAyLjUgMCAxMS01IDAgMi41IDIuNSAwIDAxNSAwem0tMSAwYTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAweicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWVsbGlwc2VzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMS41IDE2YTEuNSAxLjUgMCAxMS0zIDAgMS41IDEuNSAwIDAxMyAwem02IDBhMS41IDEuNSAwIDExLTMgMCAxLjUgMS41IDAgMDEzIDB6bTQuNSAxLjVhMS41IDEuNSAwIDEwMC0zIDEuNSAxLjUgMCAwMDAgM3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1leWVkcm9wcGVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIuNDQ3IDkuNmMtLjgtLjgtMi0uOC0yLjggMGwtMi44IDIuOC0uOC0uN2MtLjQtLjQtMS0uNC0xLjQgMHMtLjQgMSAwIDEuNGwuNy43LTUuOCA1LjhjLS40LjQtMSAxLjkgMCAyLjlzMi41LjQgMi45IDBsNS44LTUuOC43LjdjLjQuNCAxIC40IDEuNCAwcy40LTEgMC0xLjRsLS43LS43IDIuOC0yLjhjLjgtLjkuOC0yLjEgMC0yLjl6bS0xMC45IDExLjloLTF2LTFsNS44LTUuOCAxIDFjLS4xIDAtNS44IDUuOC01LjggNS44eicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1mb3J3YXJkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNy45NCAxNmwtNC42NDctNC42NDYuNzA3LS43MDdMMTkuMzU0IDE2IDE0IDIxLjM1NGwtLjcwNy0uNzA3eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWZyYW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMSAyNHYtM0g4di0xaDN2LThIOHYtMWgzVjhoMXYzaDhWOGgxdjNoM3YxaC0zdjhoM3YxaC0zdjNoLTF2LTNoLTh2M3ptOS00di04aC04djh6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tZ3JvdXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNy40IDloLTIuOHYxaDIuOHpNMjAuOSAyMkgyMnYtMS4xaDFWMjNoLTIuMXpNMTAgMTQuNnYyLjhIOXYtMi44ek0yMiAxMS4xVjEwaC0xLjFWOUgyM3YyLjF6TTIyIDE0LjZ2Mi44aDF2LTIuOHpNMTAgMTEuMVYxMGgxLjFWOUg5djIuMXpNOSAyMC45aDFWMjJoMS4xdjFIOXpNMTcuNCAyMmgtMi44djFoMi44eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oaWRkZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIxLjUwOSAxNS44MDFBOC4wMzMgOC4wMzMgMCAwMDIyLjkyOCAxNGgtMS4xODRBNi45OTIgNi45OTIgMCAwMTE2IDE3YTYuOTkyIDYuOTkyIDAgMDEtNS43NDUtM0g5LjA3YTguMDMzIDguMDMzIDAgMDAxLjQyMSAxLjgwMWwtMS41OTUgMS41OTUuNzA4LjcwNyAxLjY1Ny0xLjY1N2MuNzEuNTIzIDEuNTExLjkzMiAyLjM3NCAxLjE5OWwtLjYxNyAyLjIyMS45NjQuMjY4LjYyNi0yLjI1NWE4LjA1MSA4LjA1MSAwIDAwMi43ODQgMGwuNjI2IDIuMjU1Ljk2NC0uMjY4LS42MTctMi4yMjFhNy45NzEgNy45NzEgMCAwMDIuMzc0LTEuMmwxLjY1OCAxLjY1OC43MDctLjcwN3onIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1ob3Jpem9udGFsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDl2MTRoMVY5em0xMyAwdjE0aDFWOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTl2LTZoNnY2em0tMS03aDh2OGgtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1oeXBlcmxpbmsge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00yMC44MjQgMTQuNDkybC0xLjY1NyAxLjY1Ny44MjguODI5IDEuNjU4LTEuNjU3YTMuNTE3IDMuNTE3IDAgMDAtNC45NzMtNC45NzNsLTEuNjU3IDEuNjU4LjgyOS44MjggMS42NTctMS42NTdhMi4zNDUgMi4zNDUgMCAwMTMuMzE1IDMuMzE1em0tNC45NzQgNC45NzJsLjgyOS44MjktMS42NTggMS42NTdhMy41MTYgMy41MTYgMCAxMS00Ljk3Mi00Ljk3MmwxLjY1OS0xLjY1OC44MjguODI5LTEuNjU2IDEuNjU3YTIuMzQzIDIuMzQzIDAgMTAzLjMxNSAzLjMxNWwxLjY1Ny0xLjY1N3ptMi4wNzItNi4yMTZsLTQuOTcyIDQuOTczLjgyOC44MjkgNC45NzMtNC45NzN6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWltYWdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMiAxMEgxMHY3Ljc5M2wzLjA4My0zLjA4MyA3LjI5IDcuMjlIMjJ6TTEwIDIydi0yLjc5M2wzLjA4My0zLjA4M0wxOC45NiAyMnptMC0xM2ExIDEgMCAwMC0xIDF2MTJhMSAxIDAgMDAxIDFoMTJhMSAxIDAgMDAxLTFWMTBhMSAxIDAgMDAtMS0xem05LjY2NyA0LjY2N2ExLjMzMyAxLjMzMyAwIDExLTIuNjY3IDAgMS4zMzMgMS4zMzMgMCAwMTIuNjY3IDB6bTEgMGEyLjMzMyAyLjMzMyAwIDExLTQuNjY3IDAgMi4zMzMgMi4zMzMgMCAwMTQuNjY3IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0taW5zdGFuY2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDdsOSA5LTkgOS05LTl6bS03LjU4NiA5TDE2IDIzLjU4NiAyMy41ODYgMTYgMTYgOC40MTR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0ta2V5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNCAyMC4xNGEzLjAxNCAzLjAxNCAwIDAwLjMzMS0zLjg2OGwyLjA0Ny0yLjA0NyAxLjc2NyAxLjc2N2EuNS41IDAgMTAuNzA3LS43MDdsLTEuNzY3LTEuNzY3IDEuMjkzLTEuMjkzIDEuNzg0IDEuNzg0YS41LjUgMCAxMC43MDctLjcwN2wtMS43ODQtMS43ODQuNzYyLS43NjFhLjUuNSAwIDAwLS43MDctLjcwOGwtNS41MTMgNS41MTNhMy4wMTQgMy4wMTQgMCAxMC4zNzMgNC41Nzh6bS0uNzEyLS43MTJhMi4wMDYgMi4wMDYgMCAxMC0yLjgzNy0yLjgzNyAyLjAwNiAyLjAwNiAwIDAwMi44MzcgMi44Mzd6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWFsaWduLWJvdHRvbSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTQuNSAxMHYxMGgtMlYxMHptOCAxMnYxaC0xM3YtMXptLTMtMnYtNmgtMnY2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWhvcml6b250YWwtY2VudGVycyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE2LjUgOS41aC0xdjNoLTV2Mmg1djNoLTN2MmgzdjNoMXYtM2gzdi0yaC0zdi0zaDV2LTJoLTV6JyBmaWxsPSclMjMwMDAnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLWxlZnQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41SDl2LTEzaDF6TTIyIDE0LjVIMTJ2LTJoMTB6TTEyIDE5LjVoNnYtMmgtNnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tYWxpZ24tcmlnaHQge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMiAyMi41aDF2LTEzaC0xek0xMCAxNC41aDEwdi0ySDEwek0yMCAxOS41aC02di0yaDZ6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWFsaWduLXRvcCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE0LjUgMjJWMTJoLTJ2MTB6TTIyLjUgMTBWOWgtMTN2MXpNMTkuNSAxMnY2aC0ydi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1hbGlnbi12ZXJ0aWNhbC1jZW50ZXJzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMTIuNSAxNS41di01aDJ2NWgzdi0zaDJ2M2gzdjFoLTN2M2gtMnYtM2gtM3Y1aC0ydi01aC0zdi0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC1jb2x1bW5zIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2MTRIOXpNMTQuNSA5aDN2MTRoLTN6TTIwIDloM3YxNGgtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGF5b3V0LWdyaWQtcm93cyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkgOWgxNHYzSDl6TTkgMTQuNWgxNHYzSDl6TTkgMjBoMTR2M0g5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sYXlvdXQtZ3JpZC11bmlmb3JtIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNOSA5aDN2M0g5ek0yMCA5aDN2M2gtM3pNMTQuNSA5aDN2M2gtM3pNOSAxNC41aDN2M0g5ek0yMCAxNC41aDN2M2gtM3pNMTQuNSAxNC41aDN2M2gtM3pNOSAyMGgzdjNIOXpNMjAgMjBoM3YzaC0zek0xNC41IDIwaDN2M2gtM3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlicmFyeSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuMzczIDIyaDEuMjU4Yy4yOC0uMzIuNjE2LS41OTcuOTk1LS44MTkgMS40NzgtLjg2MiA0LjAwNS0uOTA5IDUuMzg2LjEwOUgyNC41di05LjJzLS43OTctMi4yNS00LjQyLTIuMjVjLTEuODc1IDAtMi45MDIuNjAyLTMuNDU2IDEuMTg0YTIuNTY4IDIuNTY4IDAgMDAtLjYuOTc2aC0uMDQ4YTIuNTY5IDIuNTY5IDAgMDAtLjYtLjk3NmMtLjU1NC0uNTgyLTEuNTgxLTEuMTg0LTMuNDU2LTEuMTg0LTMuNjIzIDAtNC40MiAyLjI1LTQuNDIgMi4yNXY5LjE5aDEuNDg4YzEuMzgyLTEuMDE5IDMuOTEtLjk3IDUuMzg4LS4xMDUuMzguMjIzLjcxNy41MDMuOTk3LjgyNXptMS4xMjctOS43MTF2OC40NTdjLjE5NS0uMTU3LjQwMy0uMy42MjItLjQyOC45MjctLjU0MSAyLjExNS0uNzk2IDMuMjQxLS43ODcgMS4wMDYuMDA4IDIuMDgxLjIyNyAyLjk1Mi43NTloLjE4NXYtNy45NzNhMi40MTQgMi40MTQgMCAwMC0uNTA1LS41OTVjLS40Ni0uMzk3LTEuMzMtLjg4Mi0yLjkxNS0uODgyLTEuNTg2IDAtMi4zNC40ODMtMi42OTUuODM1YTEuNzQ5IDEuNzQ5IDAgMDAtLjM1My40OSAxLjA3NiAxLjA3NiAwIDAwLS4wNTIuMTMxbC0uMDA1LjAxNy4wMDEtLjAwNi4wMDItLjAwOHYtLjAwNWwuMDAxLS4wMDJ2LS4wMDJsLS4wMDUtLjAwMXptLTEgMGgtLjQ3NGwtLjAwNi4wMDF2LjAwMmwuMDAxLjAwMi4wMDEuMDA1LjAwMi4wMDguMDAxLjAwNi0uMDA1LS4wMTdhMS4wNzYgMS4wNzYgMCAwMC0uMDUzLS4xMzEgMS43NDkgMS43NDkgMCAwMC0uMzUzLS40OWMtLjM1NC0uMzUxLTEuMTA4LS44MzUtMi42OTQtLjgzNS0xLjU4NSAwLTIuNDU1LjQ4NS0yLjkxNi44ODJhMi40MTEgMi40MTEgMCAwMC0uNTA0LjU5NXY3Ljk2M2guMTg1Yy44NzItLjUzMiAxLjk0OC0uNzUyIDIuOTU0LS43NTkgMS4xMjgtLjAwOCAyLjMxNi4yNDkgMy4yNDMuNzkyLjIxNy4xMjcuNDI0LjI3LjYxOC40MjZ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGluay1icm9rZW4ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOCAxNHYtMmEyIDIgMCAxMC00IDB2MmgtMXYtMmEzIDMgMCAxMTYgMHYyek0xOSAxOGgtMXYyYTIgMiAwIDExLTQgMHYtMmgtMXYyYTMgMyAwIDEwNiAweicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saW5rLWNvbm5lY3RlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE2IDEwYTIgMiAwIDAxMiAydjJoMXYtMmEzIDMgMCAxMC02IDB2Mmgxdi0yYTIgMiAwIDAxMi0yek0xOCAxOGgxdjJhMyAzIDAgMTEtNiAwdi0yaDF2MmEyIDIgMCAxMDQgMHonLyUzRSUzQ3BhdGggZD0nTTE1LjUgMTN2Nmgxdi02eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1saXN0LWRldGFpbGVkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTIgMTBoLTJ2MWgyek0xMiAyMGgtMnYxaDJ6TTEwIDE1aDJ2MWgtMnpNMjIgMTBoLTh2MWg4ek0xNCAyMGg4djFoLTh6TTIyIDE1aC04djFoOHonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tbGlzdC10aWxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNCAxMWgtM3YzaDN6bS00LTF2NWg1di01em0xMSAxaC0zdjNoM3ptLTQtMXY1aDV2LTV6bS0zIDhoLTN2M2gzem0tNC0xdjVoNXYtNXptMTEgMWgtM3YzaDN6bS00LTF2NWg1di01eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLWxpc3Qge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCcgZmlsbC1vcGFjaXR5PScuOCclM0UlM0NwYXRoIGQ9J00yMyAxMEg5djFoMTR6TTkgMTUuNWgxNHYxSDl6TTkgMjFoMTR2MUg5eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9mZiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggZD0nTTE4IDE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjVIMTd2LTIuNWEyLjUgMi41IDAgMDE1IDBWMTRoLTF2LTEuNWExLjUgMS41IDAgMDAtMyAweicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1sb2NrLW9uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMy41IDE1di0xLjVhMi41IDIuNSAwIDAxNSAwVjE1aC41YS41LjUgMCAwMS41LjV2NWEuNS41IDAgMDEtLjUuNWgtNmEuNS41IDAgMDEtLjUtLjV2LTVhLjUuNSAwIDAxLjUtLjV6bTQtMS41VjE1aC0zdi0xLjVhMS41IDEuNSAwIDAxMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLW1pbnVzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjEuNSAxNi41aC0xMXYtMWgxMXonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcGxheSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTMgMTAuMDk4TDIyLjQ0MyAxNiAxMyAyMS45MDJ6bTEgMS44MDR2OC4xOTZMMjAuNTU3IDE2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXBsdXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNS41IDE1LjV2LTVoMXY1aDV2MWgtNXY1aC0xdi01aC01di0xeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yYW5kb20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE1LjExOCAxMWEyLjUgMi41IDAgMDAtMS4zMzUuMzg2TDExLjIyOCAxM0gxOC41djFoLTguNDk3YS41MTIuNTEyIDAgMDAtLjAwMy4wNTFWMjAuNWMwIC4yNzguMjIzLjUuNDk3LjVoNy42MjhhLjQ5OC40OTggMCAwMC4zMjgtLjEyM2wzLjIwNi0yLjgwNWExIDEgMCAwMC4zNDEtLjc1M1YxMS41YS41LjUgMCAwMC0uNS0uNXptLTEuODY5LS40NmEzLjUgMy41IDAgMDExLjg3LS41NEgyMS41YTEuNSAxLjUgMCAwMTEuNSAxLjV2NS44MmEyIDIgMCAwMS0uNjgzIDEuNTA0bC0zLjIwNSAyLjgwNWMtLjI3NC4yNC0uNjI0LjM3MS0uOTg3LjM3MWgtNy42MjdDOS42NjggMjIgOSAyMS4zMjcgOSAyMC41di02LjQ0OWExLjUgMS41IDAgMDEuNjk5LTEuMjY4eicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0NwYXRoIGQ9J00xMyAxNmExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6TTE3IDE2YTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHpNMTcgMTlhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek0xMyAxOWExIDEgMCAxMS0yIDAgMSAxIDAgMDEyIDB6Jy8lM0UlM0NnIGNsaXAtcnVsZT0nZXZlbm9kZCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTIyLjQwNyAxMC43MWEuNS41IDAgMDEtLjExNi42OTdsLTMuNSAyLjVhLjUuNSAwIDAxLS41ODItLjgxNGwzLjUtMi41YS41LjUgMCAwMS42OTguMTE2eicvJTNFJTNDcGF0aCBkPSdNMTggMjF2LThoMXY4eicvJTNFJTNDL2clM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlY2VudCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE1IDEydjVoNXYtMWgtNHYtNHonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmVzaXplLXRvLWZpdCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTguNjQ2IDkuMzU0TDEyLjI5MyAxM0gxMHYxaDR2LTRoLTF2Mi4yOTNMOS4zNTQgOC42NDZ6TTE5LjcwNyAxM2wzLjY0Ny0zLjY0Ni0uNzA3LS43MDhMMTkgMTIuMjkzVjEwaC0xdjRoNHYtMXpNMTkuNzA3IDE5bDMuNjQ3IDMuNjQ2LS43MDcuNzA4TDE5IDE5LjcwN1YyMmgtMXYtNGg0djF6TTEyLjI5MyAxOWwtMy42NDcgMy42NDYuNzA4LjcwOEwxMyAxOS43MDdWMjJoMXYtNGgtNHYxeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1yZXNvbHZlLWZpbGxlZCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTYgMjRhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMy45MTEtOS42MzVsLS44MjItLjczLTMuNjEzIDQuMDY0LTIuNTg3LTIuNTg4LS43NzguNzc4IDMuNDEzIDMuNDEyeicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXJlc29sdmUge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xOS45MTEgMTQuMzY1bC0uODIyLS43My0zLjYxMyA0LjA2My0yLjU4Ny0yLjU4Ny0uNzc4Ljc3OCAzLjQxMyAzLjQxMnonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjQgMTZhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS0xIDBhNyA3IDAgMTEtMTQgMCA3IDcgMCAwMTE0IDB6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tcmV2ZXJzZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTUuODU0IDguNjQ2TDE4LjIwNyAxMWwtMi4zNTMgMi4zNTQtLjcwOC0uNzA4IDEuMTQ3LTEuMTQ2SDE0Yy0uNTAzIDAtMS4yNy4xNTUtMS44OTUuNjA2LS42LjQzMi0xLjEwNSAxLjE1Ny0xLjEwNSAyLjM5NHY3LjI1aC0xVjE0LjVjMC0xLjU2My42NjItMi41ODggMS41Mi0zLjIwNi44MzMtLjYgMS44MTctLjc5NCAyLjQ4LS43OTRoMi4yOTNsLTEuMTQ3LTEuMTQ2ek0yMiAxMHY3LjI1YzAgMS41NjMtLjY2MiAyLjU4OC0xLjUyIDMuMjA2LS44MzMuNi0xLjgxNy43OTQtMi40OC43OTRoLTIuMjkzbDEuMTQ3IDEuMTQ2LS43MDguNzA4LTIuMzUzLTIuMzU0IDIuMzUzLTIuMzU0LjcwOC43MDgtMS4xNDcgMS4xNDZIMThjLjUwMyAwIDEuMjctLjE1NSAxLjg5NS0uNjA2LjYtLjQzMiAxLjEwNS0xLjE1NyAxLjEwNS0yLjM5NFYxMHonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zZWFyY2gtbGFyZ2Uge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4Ljg3NCAxOS41ODFhNiA2IDAgMTEuNzA3LS43MDdsNC4yNzMgNC4yNzItLjcwOC43MDh6TTIwIDE1YTUgNSAwIDExLTEwIDAgNSA1IDAgMDExMCAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNlYXJjaCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTguMzk3IDE4LjYwNWE0LjU1MiA0LjU1MiAwIDExLjcwNy0uNzA3bDMuMjUgMy4yNDktLjcwOC43MDd6bS43MDYtMy41NTNhMy41NTIgMy41NTIgMCAxMS03LjEwMyAwIDMuNTUyIDMuNTUyIDAgMDE3LjEwMyAweicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNldHRpbmdzIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTE2Ljk1NCA5LjkyOGwtLjEzOS0uMzMxQzE2LjYzNSA5LjE2NSAxNi4zMDEgOSAxNiA5cy0uNjM1LjE2NS0uODE1LjU5N2wtLjEzOS4zMzFjLS41NiAxLjM0My0xLjk5MiAyLjEzLTMuNDI1IDEuNzJsLS41LS4xNDRjLS4zMDktLjA4OC0uNjA2LjAyNS0uODE1LjMyN2ExLjA1IDEuMDUgMCAwMC0uMDQ5IDEuMTIzYy43NDMgMS4zMjMuNDAyIDMuMDY4LS44NiAzLjk1LS4zMTguMjIyLS40NTYuNjE0LS4zNzUgMS4wMjQuMDgxLjQwOS4zNDIuNjY4LjY3My43MjNsLjE5NS4wMzNjMS41MjUuMjUzIDIuNTEgMS42ODcgMi40MjMgMy4xOC0uMDMuNTAzLjIyLjg2MS41MiAxLjAyOC4yODguMTYxLjYyMy4xNTUuOTIxLS4xMDhsLjM3My0uMzNhMi44IDIuOCAwIDAxMy43NDYgMGwuMzczLjMzYy4yOTguMjY0LjYzMy4yNy45MjIuMTA4LjMtLjE2Ny41NDktLjUyNS41Mi0xLjAyOC0uMDg4LTEuNDkzLjg5Ny0yLjkyNyAyLjQyMy0zLjE4bC4xOTQtLjAzM2MuMzMtLjA1NS41OTItLjMxNC42NzMtLjcyMy4wODEtLjQxLS4wNTctLjgwMi0uMzc1LTEuMDI0LTEuMjYyLS44ODItMS42MDMtMi42MjctLjg2LTMuOTVhMS4wNSAxLjA1IDAgMDAtLjA1LTEuMTIzYy0uMjA4LS4zMDItLjUwNS0uNDE1LS44MTUtLjMyN2wtLjQ5OS4xNDNjLTEuNDMzLjQxLTIuODY1LS4zNzYtMy40MjUtMS43MTl6bS43ODQtLjcxN2MtLjY3NC0xLjYxNS0yLjgwMi0xLjYxNS0zLjQ3NiAwbC0uMTM4LjMzMmMtLjM4My45MTctMS4zMjYgMS40MDEtMi4yMjggMS4xNDNsLS40OTktLjE0M2MtMS41NzUtLjQ1LTIuODU1IDEuMzk4LTIuMDEyIDIuOS41MDUuOS4yNTcgMi4wNy0uNTYgMi42NC0xLjM5Mi45NzMtLjkzMyAzLjI4Mi43MDYgMy41NTVsLjE5NS4wMzJjLjk2LjE2IDEuNjUgMS4wOSAxLjU4OCAyLjEzNS0uMTA0IDEuNzg4IDEuODIgMi44NjQgMy4xMDMgMS43MjdsLjM3My0uMzNhMS44IDEuOCAwIDAxMi40MiAwbC4zNzMuMzNjMS4yODQgMS4xMzcgMy4yMDcuMDYxIDMuMTAzLTEuNzI3LS4wNjEtMS4wNDYuNjI4LTEuOTc1IDEuNTg5LTIuMTM1bC4xOTQtLjAzMmMxLjYzOS0uMjczIDIuMDk4LTIuNTgyLjcwNy0zLjU1NC0uODE4LS41NzItMS4wNjYtMS43NDItLjU2MS0yLjY0Ljg0My0xLjUwMy0uNDM3LTMuMzUyLTIuMDEyLTIuOTAxbC0uNS4xNDNjLS45LjI1OC0xLjg0NC0uMjI2LTIuMjI2LTEuMTQzeicvJTNFJTNDcGF0aCBkPSdNMTYgMTguNWEyIDIgMCAxMDAtNCAyIDIgMCAwMDAgNHptMCAxYTMgMyAwIDEwMC02IDMgMyAwIDAwMCA2eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zaGFyZSB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMjAgOS41YTMuNSAzLjUgMCAwMC0xLjM4MyA2LjcxNkE0LjUxMyA0LjUxMyAwIDAwMTYgMTguNDM2YTQuNTEzIDQuNTEzIDAgMDAtMi42MTgtMi4yMiAzLjUwMSAzLjUwMSAwIDEwLTIuNzY0IDBBNC41MDIgNC41MDIgMCAwMDcuNSAyMC41VjIyaDE3di0xLjVjMC0yLjAwMy0xLjMwOS0zLjctMy4xMTgtNC4yODRBMy41MDEgMy41MDEgMCAwMDIwIDkuNXpNMTcuNSAxM2EyLjUgMi41IDAgMTE1IDAgMi41IDIuNSAwIDAxLTUgMHptLTEgOHYtLjVhMy41IDMuNSAwIDExNyAwdi41em0tMS0uNXYuNWgtN3YtLjVhMy41IDMuNSAwIDExNyAwem0tNi03LjVhMi41IDIuNSAwIDExNSAwIDIuNSAyLjUgMCAwMS01IDB6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc21pbGV5IHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMjBhNC4wMDIgNC4wMDIgMCAwMS0zLjg3NC0zaDEuMDQ1YTMuMDAxIDMuMDAxIDAgMDA1LjY1OCAwaDEuMDQ1QTQuMDAyIDQuMDAyIDAgMDExNiAyMHpNMTkuNSAxNC4xMjVhLjg3NS44NzUgMCAxMS0xLjc1IDAgLjg3NS44NzUgMCAwMTEuNzUgMHpNMTMuMTI1IDE1YS44NzUuODc1IDAgMTAwLTEuNzUuODc1Ljg3NSAwIDAwMCAxLjc1eicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yNCAxNmE4IDggMCAxMS0xNiAwIDggOCAwIDAxMTYgMHptLTEgMGE3IDcgMCAxMS0xNCAwIDcgNyAwIDAxMTQgMHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LWFscGhhLWFzYyB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgY2xpcC1ydWxlPSdldmVub2RkJyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCclM0UlM0NwYXRoIGQ9J00xMC44OTcgOUw5IDE0aDEuMDdsLjM3OS0xaDIuMTMzbC4zMzggMWgxLjA1NmwtMS42OS01em0xLjM0NyAzbC0uNjY3LTEuOTczTDEwLjgyOCAxMnpNMTIuNTUzIDE5SDkuNXYtMUgxNHYuOTc5TDEwLjkzMiAyMkgxNHYxSDkuNXYtLjk5M3pNMjAuNSA4LjI5M2wzLjM1NCAzLjM1My0uNzA4LjcwOEwyMSAxMC4yMDdWMjNoLTFWMTAuMjA3bC0yLjE0NiAyLjE0Ny0uNzA4LS43MDh6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXNvcnQtYWxwaGEtZHNjIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJyUzRSUzQ3BhdGggZD0nTTEwLjg5NyA5TDkgMTRoMS4wN2wuMzc5LTFoMi4xMzNsLjMzOCAxaDEuMDU2bC0xLjY5LTV6bTEuMzQ3IDNsLS42NjctMS45NzNMMTAuODI4IDEyek0xMi41NTMgMTlIOS41di0xSDE0di45NzlMMTAuOTMyIDIySDE0djFIOS41di0uOTkzek0yMCAyMS43OTNWOWgxdjEyLjc5M2wyLjE0Ni0yLjE0Ny43MDguNzA4LTMuMzU0IDMuMzUzLTMuMzU0LTMuMzUzLjcwOC0uNzA4eicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zb3J0LXRvcC1ib3R0b20ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTIwLjQ1IDEySDEwdi0xaDEwLjQ1Yy45NyAwIDEuMzcyIDEuMjQ0LjU4NCAxLjgxMkwxMS4wNSAyMGg5LjI0M2wtMS42NDctMS42NDYuNzA4LS43MDggMi44NTMgMi44NTQtMi44NTMgMi44NTQtLjcwOC0uNzA4TDIwLjI5MyAyMUgxMS4wNWMtLjk3IDAtMS4zNzItMS4yNDQtLjU4NC0xLjgxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGFjaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBkPSdNMjIgMTFoLTJ2MTBoMnYxaC0zVjEwaDN6bS0xMC0xdjEySDl2LTFoMlYxMUg5di0xem00IDNoLTF2NmgxeicgZmlsbD0nJTIzMDAwJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zcGlubmVyIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNS4xNjUgOC41M2EuNS41IDAgMDEtLjQwNC41OEE3IDcgMCAxMDIzIDE2YS41LjUgMCAwMTEgMCA4IDggMCAxMS05LjQxNi03Ljg3NC41LjUgMCAwMS41OC40MDR6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Rhci1vZmYge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE4IDE0LjAwNEwxNiA4bC0yIDYuMDA0SDhMMTIuOTYgMThsLTEuOTA0IDZMMTYgMjBsNC45NDQgNC0xLjkwNC02TDI0IDE0em0zLjE2NS45OThsLTMuODg2LjAwMkwxNiAxMS4xNjRsLTEuMjggMy44NGgtMy44ODVsMy4yODUgMi42NDYtMS4xMDMgMy40NzdMMTYgMTguNzE0bDIuOTgzIDIuNDEzLTEuMTAzLTMuNDc2eicgZmlsbD0nJTIzMDAwJyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN0YXItb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NwYXRoIGQ9J00xNiA4bDIgNi4wMDRMMjQgMTRsLTQuOTYgNCAxLjkwNCA2TDE2IDIwbC00Ljk0NCA0IDEuOTA0LTZMOCAxNC4wMDRoNnonIGZpbGw9JyUyMzAwMCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tc3Ryb2tlLXdlaWdodCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTAgMTBoMTJ2MUgxMHptMCA0aDEydjJIMTB6bTEyIDVIMTB2M2gxMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS1zdHlsZXMge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMS41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xNy41IDEzYTEuNSAxLjUgMCAxMDMgMCAxLjUgMS41IDAgMDAtMyAwek0xOSAyMC41YTEuNSAxLjUgMCAxMTAtMyAxLjUgMS41IDAgMDEwIDN6TTExLjUgMTlhMS41IDEuNSAwIDEwMyAwIDEuNSAxLjUgMCAwMC0zIDB6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXN3YXAge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00yMyAxMy4xODhsLTEuMTc1IDEuNDY4YTUuNSA1LjUgMCAwMC0xMC4wMDMtMi4yMTlsLjgzLjU1N2E0LjUgNC41IDAgMDE4LjIxNiAyLjA1N2wtMi4yLTEuNDY3LS41NTUuODMyIDMuMzgxIDIuMjU0IDIuMjg3LTIuODU4ek05IDE3LjE4OGwuNzguNjI0IDEuMTc2LTEuNDY4LjAyNi4xNTZhNS41IDUuNSAwIDAwOS45NzYgMi4wNjV2LS4wMDJsLS44My0uNTU3LS4wMDEuMDAxYTQuNSA0LjUgMCAwMS04LjIxNC0yLjA1OGwyLjIgMS40NjcuNTU1LS44MzItMy4zODItMi4yNTR6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRoZW1lIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xMyAxMGgtM3YxMmgzem0tMy0xYTEgMSAwIDAwLTEgMXYxMmExIDEgMCAwMDEgMWgzYTEgMSAwIDAwMS0xVjEwYTEgMSAwIDAwLTEtMXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDcGF0aCBkPSdNMTAuNzUgMjAuNWEuNzUuNzUgMCAxMTEuNSAwIC43NS43NSAwIDAxLTEuNSAwek0yMiAxOGExIDEgMCAwMTEgMXYzYTEgMSAwIDAxLTEgMWgtN3YtMWg3di0zaC03di0xek0xOC4zODUgMTdsMi43NTctMi43NTdhMSAxIDAgMDAwLTEuNDE1bC0yLjEyMS0yLjEyYTEgMSAwIDAwLTEuNDE0IDBMMTUgMTMuMzEzdjEuNDE0bDMuMzE0LTMuMzE0IDIuMTIxIDIuMTIyTDE2Ljk3MSAxN3onLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1ncmlkIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTAgMTBoMnYyaC0yek0yMCAxMGgydjJoLTJ6TTEyIDE1aC0ydjJoMnpNMjAgMTVoMnYyaC0yek0xMiAyMGgtMnYyaDJ6TTIwIDIwaDJ2MmgtMnpNMTcgMTBoLTJ2Mmgyek0xNSAxNWgydjJoLTJ6TTE3IDIwaC0ydjJoMnonLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdGlkeS11cC1saXN0LWhvcml6b250YWwge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xMCAyMi41di0xM2gydjEzek0xNSAyMi41di0xM2gydjEzek0yMCA5LjV2MTNoMnYtMTN6Jy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXRpZHktdXAtbGlzdC12ZXJ0aWNhbCB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTkuNSAxMGgxM3YyaC0xM3pNOS41IDE1aDEzdjJoLTEzek0yMi41IDIwaC0xM3YyaDEzeicvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS10aW1lciB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0ZjgsJTNDc3ZnIGZpbGw9J25vbmUnIGhlaWdodD0nMzInIHdpZHRoPSczMicgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzRSUzQ2cgZmlsbD0nJTIzMDAwJyUzRSUzQ3BhdGggZD0nTTE5IDhoLTZWN2g2ek0xNi41IDE3di01aC0xdjVhLjUuNSAwIDAwMSAweicvJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00yMi43MTUgMTIuNjVsMS41MjctMS41MjlMMjIuMTIyIDlsLTEuNDgzIDEuNDgyYTggOCAwIDEwMi4wNzUgMi4xNjd6TTIzIDE3YTcgNyAwIDExLTIuMzg0LTUuMjYzbC42NDcuNjQ3QTYuOTc0IDYuOTc0IDAgMDEyMyAxN3ptLTEuMDA4LTUuM2wuMTMuMTI4LjcwNi0uNzA3LS43MDctLjcwNy0uNzAxLjcwMWMuMi4xODUuMzkxLjM4LjU3Mi41ODV6JyBmaWxsLXJ1bGU9J2V2ZW5vZGQnLyUzRSUzQy9nJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi0tdHJhc2gge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J00xNCAxOC41di00aDF2NHpNMTcgMTguNXYtNGgxdjR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE5IDEwLjVhMiAyIDAgMDAtMi0yaC0yYTIgMiAwIDAwLTIgMmgtM3YxaDF2MTBhMiAyIDAgMDAyIDJoNmEyIDIgMCAwMDItMnYtMTBoMXYtMXptLTQtMWExIDEgMCAwMC0xIDFoNGExIDEgMCAwMC0xLTF6bTUgMmgtOHYxMGExIDEgMCAwMDEgMWg2YTEgMSAwIDAwMS0xeicgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0MvZyUzRSUzQy9zdmclM0VcXFwiKTtcXG59XFxuXFxuLmljb24tLXZlcnRpY2FsLXBhZGRpbmcge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGY4LCUzQ3N2ZyBmaWxsPSdub25lJyBoZWlnaHQ9JzMyJyB3aWR0aD0nMzInIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NnIGZpbGw9JyUyMzAwMCclM0UlM0NwYXRoIGQ9J005IDloMTR2MUg5em0wIDEzaDE0djFIOXonLyUzRSUzQ3BhdGggY2xpcC1ydWxlPSdldmVub2RkJyBkPSdNMTkgMTNoLTZ2Nmg2em0tNy0xdjhoOHYtOHonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS12aXNpYmxlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDZyBmaWxsPSclMjMwMDAnJTNFJTNDcGF0aCBkPSdNMTYgMThhMiAyIDAgMTAwLTQgMiAyIDAgMDAwIDR6Jy8lM0UlM0NwYXRoIGNsaXAtcnVsZT0nZXZlbm9kZCcgZD0nTTE2IDEyYTcuNDk5IDcuNDk5IDAgMDE2LjYzNSA0QTcuNDk5IDcuNDk5IDAgMDExNiAyMGE3LjQ5OSA3LjQ5OSAwIDAxLTYuNjM1LTRBNy40OTkgNy40OTkgMCAwMTE2IDEyem0wIDdhNi40OTUgNi40OTUgMCAwMS01LjQ3OC0zQTYuNDk1IDYuNDk1IDAgMDExNiAxM2MyLjMgMCA0LjMyMiAxLjE5NCA1LjQ3OCAzQTYuNDk1IDYuNDk1IDAgMDExNiAxOXonIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL2clM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nLWxhcmdlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA2bDEwIDE4SDZ6bS0xIDExdi00aDJ2NHptMCAydjJoMnYtMnonIGZpbGw9JyUyMzAwMCcgZmlsbC1ydWxlPSdldmVub2RkJy8lM0UlM0Mvc3ZnJTNFXFxcIik7XFxufVxcblxcbi5pY29uLS13YXJuaW5nIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO2NoYXJzZXQ9dXRmOCwlM0NzdmcgZmlsbD0nbm9uZScgaGVpZ2h0PSczMicgd2lkdGg9JzMyJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNFJTNDcGF0aCBjbGlwLXJ1bGU9J2V2ZW5vZGQnIGQ9J00xNiA5bDggMTRIOHptLTEgOC41VjE0aDJ2My41em0wIDEuNXYyaDJ2LTJ6JyBmaWxsPSclMjMwMDAnIGZpbGwtcnVsZT0nZXZlbm9kZCcvJTNFJTNDL3N2ZyUzRVxcXCIpO1xcbn1cXG5cXG4uaWNvbi1idXR0b24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHdpZHRoOiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYm9yZGVyOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pY29uLWJ1dHRvbiAqIHtcXG4gIC13ZWJraXQtZmlsdGVyOiBpbnZlcnQoMCUpIHNlcGlhKDAlKSBzYXR1cmF0ZSg3NTAwJSkgaHVlLXJvdGF0ZSgxMTdkZWcpIGJyaWdodG5lc3MoMTA5JSkgY29udHJhc3QoMTA1JSk7XFxuICAgICAgICAgIGZpbHRlcjogaW52ZXJ0KDAlKSBzZXBpYSgwJSkgc2F0dXJhdGUoNzUwMCUpIGh1ZS1yb3RhdGUoMTE3ZGVnKSBicmlnaHRuZXNzKDEwOSUpIGNvbnRyYXN0KDEwNSUpO1xcbn1cXG5cXG4uaWNvbi1idXR0b246aG92ZXIge1xcbiAgYmFja2dyb3VuZDogdmFyKC0taG92ZXItZmlsbCk7XFxufVxcblxcbi5pY29uLWJ1dHRvbjphY3RpdmUsIC5pY29uLWJ1dHRvbjpmb2N1cyB7XFxuICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQ6YWN0aXZlLCAuaWNvbi1idXR0b24tLXNlbGVjdGVkOmZvY3VzIHtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5pY29uLWJ1dHRvbi0tc2VsZWN0ZWQgKiB7XFxuICAtd2Via2l0LWZpbHRlcjogaW52ZXJ0KDEwMCUpIHNlcGlhKDEwMCUpIHNhdHVyYXRlKDAlKSBodWUtcm90YXRlKDI2OWRlZykgYnJpZ2h0bmVzcygxMDMlKSBjb250cmFzdCgxMDQlKTtcXG4gICAgICAgICAgZmlsdGVyOiBpbnZlcnQoMTAwJSkgc2VwaWEoMTAwJSkgc2F0dXJhdGUoMCUpIGh1ZS1yb3RhdGUoMjY5ZGVnKSBicmlnaHRuZXNzKDEwMyUpIGNvbnRyYXN0KDEwNCUpO1xcbn1cXG5cXG4uaW5wdXQge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBvdmVyZmxvdzogdmlzaWJsZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB3aWR0aDogMTAwJTtcXG4gIGhlaWdodDogMzBweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXItcmFkaXVzLXNtYWxsKTtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6aG92ZXIsIC5pbnB1dF9fZmllbGQ6cGxhY2Vob2xkZXItc2hvd246aG92ZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6c2VsZWN0aW9uIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ibHVlMyk7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmlucHV0X19maWVsZDpwbGFjZWhvbGRlci1zaG93biB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazEpO1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5pbnB1dF9fZmllbGQ6YWN0aXZlLCAuaW5wdXRfX2ZpZWxkOmZvY3VzIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmU6IDFweCBzb2xpZCB2YXIoLS1ibHVlKTtcXG4gIG91dGxpbmUtb2Zmc2V0OiAtMnB4O1xcbn1cXG5cXG4uaW5wdXRfX2ZpZWxkOmRpc2FibGVkIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLmlucHV0X19maWVsZDpkaXNhYmxlZDphY3RpdmUge1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLmlucHV0LS13aXRoLWljb24gLmlucHV0X19maWVsZCB7XFxuICBwYWRkaW5nLWxlZnQ6IDMycHg7XFxufVxcblxcbi5pbnB1dCAuaWNvbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDBweDtcXG4gIGxlZnQ6IDA7XFxuICB3aWR0aDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICB6LWluZGV4OiAxO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4ubGFiZWwge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCk7XFxufVxcblxcbi5vbmJvYXJkaW5nLXRpcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IHRvcDtcXG4gIHBhZGRpbmc6IDAgdmFyKC0tc2l6ZS14c21hbGwpIDAgMDtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwIC5pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuLm9uYm9hcmRpbmctdGlwX19tc2cge1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLXBvcy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4ucmFkaW8ge1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtbWVkaXVtKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnJhZGlvX19idXR0b24ge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybCgnZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiB2aWV3Qm94PVxcXCIwIDAgNiA2XFxcIiBmaWxsPVxcXCJub25lXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiJTNFJTNDcmVjdCB3aWR0aD1cXFwiNlxcXCIgaGVpZ2h0PVxcXCI2XFxcIiByeD1cXFwiM1xcXCIgZmlsbD1cXFwiYmxhY2tcXFwiIGZpbGwtb3BhY2l0eT1cXFwiMC44XFxcIi8lM0UlM0Mvc3ZnJTNFJTBBJyk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogMnB4IDJweDtcXG59XFxuXFxuLnJhZGlvX19idXR0b246ZGlzYWJsZWQgKyAucmFkaW9fX2xhYmVsIHtcXG4gIG9wYWNpdHk6IDAuMztcXG59XFxuXFxuLnJhZGlvX19idXR0b246Y2hlY2tlZDpkaXNhYmxlZCArIC5yYWRpb19fbGFiZWw6YmVmb3JlIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsYWNrKTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIHZhcigtLXNpemUtc21hbGwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXG59XFxuXFxuLnJhZGlvX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2s4KTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgY29udGVudDogJyc7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMHB4O1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgbWFyZ2luOiAycHggMTBweCAwIC04cHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxufVxcblxcbi5zZWN0aW9uLXRpdGxlIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtYm9sZCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBwYWRkaW5nOiAwIGNhbGModmFyKC0tc2l6ZS14eHNtYWxsKSAvIDIpIDAgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG59XFxuXFxuc2VsZWN0LnNlbGVjdC1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudSB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBoZWlnaHQ6IDMwcHg7XFxuICB3aWR0aDogMTAwJTtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKSAwcHggdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIG92ZXJmbG93LXk6IGhpZGRlbjtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWJsYWNrMSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIHtcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uICoge1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fbGFiZWwtLXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpmb2N1cyAuc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19idXR0b246ZGlzYWJsZWQ6aG92ZXIgLnNlbGVjdC1tZW51X19sYWJlbC0tcGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQsIC5zZWxlY3QtbWVudV9fYnV0dG9uOmZvY3VzIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMS4wO1xcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fYnV0dG9uOmRpc2FibGVkOmhvdmVyIC5zZWxlY3QtbWVudV9fY2FyZXQge1xcbiAgb3BhY2l0eTogMC4zO1xcbiAgbWFyZ2luLWxlZnQ6IC0xMnB4O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2J1dHRvbjpkaXNhYmxlZCAuc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsIHtcXG4gIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplLXhzbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWxpbmUtaGVpZ2h0KTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBtYXJnaW4tdG9wOiAtMnB4O1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcXG4gIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2xhYmVsLS1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19jYXJldCB7XFxuICB3aWR0aDogMzBweDtcXG4gIGhlaWdodDogMzBweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgbWFyZ2luLXRvcDogLTFweDtcXG4gIG1hcmdpbi1sZWZ0OiAtMTJweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsJTNDc3ZnJTIwZmlsbCUzRCUyMm5vbmUlMjIlMjBoZWlnaHQlM0QlMjIzMCUyMiUyMHZpZXdCb3glM0QlMjIwJTIwMCUyMDMwJTIwMzAlMjIlMjB3aWR0aCUzRCUyMjMwJTIyJTIweG1sbnMlM0QlMjJodHRwJTNBJTJGJTJGd3d3LnczLm9yZyUyRjIwMDAlMkZzdmclMjIlM0UlM0NwYXRoJTIwY2xpcC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyMGQlM0QlMjJtMTUlMjAxNi43MDcxLTMtMyUyMC43MDcxLS43MDcxJTIwMi42NDY1JTIwMi42NDY0JTIwMi42NDY0LTIuNjQ2NC43MDcxLjcwNzEtMyUyMDMtLjM1MzUuMzUzNnolMjIlMjBmaWxsJTNEJTIyJTIzMDAwJTIyJTIwZmlsbC1ydWxlJTNEJTIyZXZlbm9kZCUyMiUyRiUzRSUzQyUyRnN2ZyUzRVxcXCIpO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlciBjZW50ZXI7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudSAuaWNvbiB7XFxuICBtYXJnaW4tbGVmdDogLThweDtcXG4gIG1hcmdpbi10b3A6IC0ycHg7XFxuICBtYXJnaW4tcmlnaHQ6IDA7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0taHVkKTtcXG4gIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1odWQpO1xcbiAgcGFkZGluZzogdmFyKC0tc2l6ZS14eHNtYWxsKSAwIHZhcigtLXNpemUteHhzbWFsbCkgMDtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgbWFyZ2luOiAwO1xcbiAgei1pbmRleDogMTAwMDtcXG4gIG92ZXJmbG93LXg6IG92ZXJsYXk7XFxuICBvdmVyZmxvdy15OiBhdXRvO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnNlbGVjdC1tZW51X19tZW51Ojotd2Via2l0LXNjcm9sbGJhciB7XFxuICB3aWR0aDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQUVBQUFBQkNBUUFBQUMxSEF3Q0FBQUFDMGxFUVZSNDJtTmtZQUFBQUFZQUFqQ0IwQzhBQUFBQVNVVk9SSzVDWUlJPSk7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogcmVwZWF0O1xcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIGF1dG87XFxufVxcblxcbi5zZWxlY3QtbWVudV9fbWVudTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xcbiAgYm9yZGVyOiBzb2xpZCAzcHggdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMTBweCAxMHB4IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX21lbnU6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcXG4gIGJvcmRlcjogc29saWQgM3B4IHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDEwcHggMTBweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNCk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbSB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy14c21hbGwpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQpO1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLXNtYWxsKTtcXG4gIHBhZGRpbmc6IDBweCB2YXIoLS1zaXplLXhzbWFsbCkgMHB4IHZhcigtLXNpemUteHhzbWFsbCk7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgb3V0bGluZTogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZCAuc2VsZWN0LW1lbnVfX2l0ZW0taWNvbiB7XFxuICBvcGFjaXR5OiAxLjA7XFxufVxcblxcbi5zZWxlY3QtbWVudV9faXRlbS1sYWJlbCB7XFxuICBvdmVyZmxvdy14OiBoaWRkZW47XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1tZW51X19pdGVtLWljb24ge1xcbiAgd2lkdGg6IHZhcigtLXNpemUteHNtYWxsKTtcXG4gIGhlaWdodDogdmFyKC0tc2l6ZS14c21hbGwpO1xcbiAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1zaXplLXh4c21hbGwpO1xcbiAgb3BhY2l0eTogMDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCJkYXRhOmltYWdlL3N2Zyt4bWw7dXRmOCwlM0NzdmclMjBmaWxsJTNEJTIybm9uZSUyMiUyMGhlaWdodCUzRCUyMjE2JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMTYlMjAxNiUyMiUyMHdpZHRoJTNEJTIyMTYlMjIlMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUzRSUzQ3BhdGglMjBjbGlwLXJ1bGUlM0QlMjJldmVub2RkJTIyJTIwZCUzRCUyMm0xMy4yMDY5JTIwNS4yMDcyNC01LjUwMDAyJTIwNS40OTk5Ni0uNzA3MTEuNzA3Mi0uNzA3MTEtLjcwNzItMy0yLjk5OTk2JTIwMS40MTQyMi0xLjQxNDIxJTIwMi4yOTI4OSUyMDIuMjkyODklMjA0Ljc5MjkzLTQuNzkyODl6JTIyJTIwZmlsbCUzRCUyMiUyM2ZmZiUyMiUyMGZpbGwtcnVsZSUzRCUyMmV2ZW5vZGQlMjIlMkYlM0UlM0MlMkZzdmclM0VcXFwiKTtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXIgY2VudGVyO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnUtLWhpZ2hsaWdodCwgLnNlbGVjdC1tZW51X19pdGVtOmhvdmVyLCAuc2VsZWN0LW1lbnVfX2l0ZW06Zm9jdXMge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmx1ZSk7XFxufVxcblxcbi5zZWxlY3QtbWVudV9fZGl2aWRlci1sYWJlbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBmb250LXdlaWdodDogdmFyKC0tZm9udC13ZWlnaHQtbm9ybWFsKTtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IHZhcigtLXNpemUtc21hbGwpO1xcbiAgcGFkZGluZzogMCB2YXIoLS1zaXplLXh4c21hbGwpIDAgdmFyKC0tc2l6ZS1tZWRpdW0pO1xcbiAgY29sb3I6IHZhcigtLXdoaXRlNCk7XFxuICBtYXJnaW4tdG9wOiAwO1xcbn1cXG5cXG4uc2VsZWN0LW1lbnVfX2RpdmlkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUyKTtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBtYXJnaW46IDhweCAwIDdweCAwO1xcbn1cXG5cXG4uc3dpdGNoIHtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiB2YXIoLS1zaXplLW1lZGl1bSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAvKlxcbiAgICAmX190b2dnbGU6Zm9jdXMgKyAmX19sYWJlbDpiZWZvcmUge1xcbiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWJsdWUpO1xcbiAgICB9XFxuICAgICovXFxufVxcblxcbi5zd2l0Y2hfX3RvZ2dsZSB7XFxuICBvcGFjaXR5OiAwO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2s4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsYWNrOC1vcGFxdWUpO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6Y2hlY2tlZCArIC5zd2l0Y2hfX2xhYmVsOmFmdGVyIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgxMnB4KTtcXG59XFxuXFxuLnN3aXRjaF9fdG9nZ2xlOmNoZWNrZWQ6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbDpiZWZvcmUge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2spO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmxhY2spO1xcbn1cXG5cXG4uc3dpdGNoX190b2dnbGU6ZGlzYWJsZWQgKyAuc3dpdGNoX19sYWJlbCB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbCB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrOCk7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc3RhY2spO1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBtYXJnaW4tbGVmdDogLTE2cHg7XFxuICBwYWRkaW5nOiAwIHZhcigtLXNpemUteHNtYWxsKSAwIGNhbGModmFyKC0tc2l6ZS14bGFyZ2UpIC0gMnB4KTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxufVxcblxcbi5zd2l0Y2hfX2xhYmVsOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAgMC4ycztcXG4gIHdpZHRoOiAyMnB4O1xcbn1cXG5cXG4uc3dpdGNoX19sYWJlbDphZnRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS13aGl0ZSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ibGFjazgtb3BhcXVlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBsZWZ0OiA4cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDEwcHg7XFxuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycztcXG4gIHdpZHRoOiAxMHB4O1xcbn1cXG5cXG4udGV4dGFyZWEge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUteHNtYWxsKTtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ub3JtYWwpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWluLWhlaWdodDogNjJweDtcXG4gIG1hcmdpbjogMXB4IDAgMXB4IDA7XFxuICBwYWRkaW5nOiB2YXIoLS1zaXplLXh4c21hbGwpIHZhcigtLXNpemUteHh4c21hbGwpIHZhcigtLXNpemUteHhzbWFsbCkgdmFyKC0tc2l6ZS14eHNtYWxsKTtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMtc21hbGwpO1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcXG4gIHJlc2l6ZTogbm9uZTtcXG4gIG92ZXJmbG93LXk6IGF1dG87XFxufVxcblxcbi50ZXh0YXJlYTpob3ZlciwgLnRleHRhcmVhOnBsYWNlaG9sZGVyLXNob3duOmhvdmVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazgpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmxhY2sxKTtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1zZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjpzZWxlY3Rpb24ge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWJsdWUzKTtcXG59XFxuXFxuLnRleHRhcmVhOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1vei1wbGFjZWhvbGRlciB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2szKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4udGV4dGFyZWE6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6LW1zLWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1ibGFjazMpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxufVxcblxcbi50ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmZvY3VzOnBsYWNlaG9sZGVyLXNob3duIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZTogMXB4IHNvbGlkIHZhcigtLWJsdWUpO1xcbiAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XFxufVxcblxcbi50ZXh0YXJlYTphY3RpdmUsIC50ZXh0YXJlYTpmb2N1cyB7XFxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tYmx1ZSk7XFxuICBvdXRsaW5lLW9mZnNldDogLTJweDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkLCAudGV4dGFyZWE6ZGlzYWJsZWQ6aG92ZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgY29sb3I6IHZhcigtLWJsYWNrMyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG59XFxuXFxuLnRleHRhcmVhOmRpc2FibGVkOmFjdGl2ZSB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4udHlwZSB7XFxuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zdGFjayk7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14c21hbGwpO1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW5vcm1hbCk7XFxuICBsaW5lLWhlaWdodDogdmFyKC0tZm9udC1saW5lLWhlaWdodCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3MteHNtYWxsKTtcXG4gIC8qIHNpemVzICovXFxuICAvKiB3ZWlnaHRzICovXFxuICAvKiBsZXR0ZXIgc3BhY2luZyBhZGp1c3RtZW50cyBiYXNlZCBwb3MvbmVnIGFwcGxpY2F0aW9uICovXFxufVxcblxcbi50eXBlLS1zbWFsbCB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS1zbWFsbCk7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1wb3Mtc21hbGwpO1xcbn1cXG5cXG4udHlwZS0tbGFyZ2Uge1xcbiAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUtbGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLWxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLXhsYXJnZSB7XFxuICBmb250LXNpemU6IHZhcigtLWZvbnQtc2l6ZS14bGFyZ2UpO1xcbiAgbGluZS1oZWlnaHQ6IHZhcigtLWZvbnQtbGluZS1oZWlnaHQtbGFyZ2UpO1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctcG9zLXhsYXJnZSk7XFxufVxcblxcbi50eXBlLS1tZWRpdW0ge1xcbiAgZm9udC13ZWlnaHQ6IHZhcigtLWZvbnQtd2VpZ2h0LW1lZGl1bSk7XFxufVxcblxcbi50eXBlLS1ib2xkIHtcXG4gIGZvbnQtd2VpZ2h0OiB2YXIoLS1mb250LXdlaWdodC1ib2xkKTtcXG59XFxuXFxuLnR5cGUtLWludmVyc2Uge1xcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLWZvbnQtbGV0dGVyLXNwYWNpbmctbmVnLXhzbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXNtYWxsIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1zbWFsbCk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLWxhcmdlIHtcXG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1mb250LWxldHRlci1zcGFjaW5nLW5lZy1sYXJnZSk7XFxufVxcblxcbi50eXBlLS1pbnZlcnNlICsgLnR5cGUtLXhsYXJnZSB7XFxuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tZm9udC1sZXR0ZXItc3BhY2luZy1uZWcteGxhcmdlKTtcXG59XFxuXFxuLnR5cGUtLWlubGluZSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWluZm8uc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLXRhYmxlLWNyZWF0b3Iuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzJfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGFibGUtY3JlYXRvci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstdGhlbWUtc3dpdGNoZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzVfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRlc2lnbi1saW50ZXIuc3ZnXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzZfX18gZnJvbSBcIi4uL2Fzc2V0cy9pY29uLWRhcmstZGVzaWduLWxpbnRlci5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfN19fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24tbW9yZS5zdmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfOF9fXyBmcm9tIFwiLi4vYXNzZXRzL2ljb24taGVscC5zdmdcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8zX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfM19fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfNF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzRfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzVfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF81X19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfNl9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzdfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzhfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF84X19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcImJvZHkge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXFxcIlNlZ29lIFVJXFxcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsXFxuICAgIEFyaWFsLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjtcXG59XFxuXFxuLmZpZ21hLWxpZ2h0IHtcXG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XFxufVxcblxcbi5maWdtYS1kYXJrIHtcXG4gIGNvbG9yLXNjaGVtZTogZGFyaztcXG59XFxuXFxuLmFwcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG59XFxuXFxuOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIC8qIENocm9tZS9PcGVyYS9TYWZhcmkgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEZpcmVmb3ggMTkrICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogSUUgMTArICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcbjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEZpcmVmb3ggMTgtICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbmg0IHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbmg2IHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgbWFyZ2luOiAwIDAgMTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNHB4O1xcbn1cXG5cXG5zZWxlY3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMjhweDtcXG4gIHBhZGRpbmc6IDAgMzJweCAwIDhweDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbnNlbGVjdDpmb2N1cyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjMThhMGZiO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICMxOGEwZmI7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG5ociB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbnRhYmxlIHRyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IHVuc2V0O1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA2cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogNnB4O1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcblxcbi5yZXNpemVyIHtcXG4gIHotaW5kZXg6IDk5O1xcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlO1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24ge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgei1pbmRleDogMTAwO1xcbiAgdG9wOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxuICBnYXA6IDBweDtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uOmhvdmVyIC5sYW5ndWFnZS1iZXRhLXRhYiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBwbGFjZS1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIG1pbi13aWR0aDogMzVweDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC43NSBlYXNlLW91dDtcXG59XFxuXFxuLmJhY2stdGFiIHtcXG4gIG9wYWNpdHk6IDAuNTU7XFxufVxcblxcbi5maWdtYS1kYXJrIC5iYWNrLXRhYiB7XFxuICBmaWx0ZXI6IGludmVydCgxKTtcXG59XFxuXFxuLmJhY2stdGFiOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWI6bm90KC5hY3RpdmUpIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYi5hY3RpdmUge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lcixcXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAyM3B4O1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4uaW5wdXRfX3JhZGlvIGlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgaGVpZ2h0OiAyNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNjZGQzZDU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbCB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxudGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zMTUpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayB0YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MDQwNDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzdiODM4YTtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlZGZmO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMDMxNTY7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgbWFyZ2luOiAxcHggMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1ib2R5IC5pbnB1dC1jb250YWluZXIge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBsYWJlbDpub3QoLmlucHV0LWNvbnRhaW5lciksXFxuLmlucHV0LWNvbnRhaW5lciAubGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XFxuICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciBmb2N1cyB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDAgMCA3cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDdweDtcXG4gIGhlaWdodDogMjhweDtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBtaW4td2lkdGg6IDA7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBoNS5sYWJlbCB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA4cHgpO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHJpZ2h0OiA4cHg7XFxuICBnYXA6IDhweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4ubnVtYmVyLW9mLWNvbHMsXFxuLm51bWJlci1vZi1yb3dzIHtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzOmZvY3VzLFxcbi5udW1iZXItb2Ytcm93czpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3RhLWNvbnRhaW5lciB7XFxuICB3aWR0aDogODQlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHJpZ2h0OiAyM3B4O1xcbiAgYm90dG9tOiAyM3B4O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1jdGEtY29udGFpbmVyIGg2IHtcXG4gIG1hcmdpbjogMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIDp3aGVyZShpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmhvdmVyLCBsYWJlbFtmb3JdOmhvdmVyKSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lciB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLnRvb2x0aXAtdHJpZ2dlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxufVxcblxcbi50b29sdGlwLXRyaWdnZXI6aG92ZXIgfiAudG9vbHRpcCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG59XFxuXFxuLnRvb2x0aXAge1xcbiAgd2lkdGg6IDEzM3B4O1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMjVweDtcXG4gIGNvbG9yOiByZ2IoMjU1IDI1NSAyNTUgLyA5MCUpO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDAgMCAwIC8gNzUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIHBhZGRpbmctaW5saW5lOiAxMHB4O1xcbiAgbGVmdDogNTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxMzUlO1xcbiAgcGFkZGluZy1ibG9jazogNnB4O1xcbiAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi50b29sdGlwOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDA7XFxuICBoZWlnaHQ6IDA7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDQxLjVweDtcXG4gIGxlZnQ6IDY1cHg7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGJvcmRlci1sZWZ0OiA1cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1ib3R0b206IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci10b3A6IDVweCBzb2xpZCByZ2IoMCAwIDAgLyA3NSUpO1xcbn1cXG5cXG4uYnRuIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBsaW5lLWhlaWdodDogMzBweDtcXG4gIG1heC13aWR0aDogMjAwcHg7XFxuICBwYWRkaW5nOiAwIDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTZweDtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjA1M3B4O1xcbn1cXG5cXG4uYnRuLXByaW1hcnkge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctYnJhbmQpO1xcbiAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LW9uYnJhbmQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBib3JkZXItYm94O1xcbn1cXG5cXG5idXR0b25bZGlzYWJsZWRdIHtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLWRpc2FibGVkLXN0cm9uZyk7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5jb2x1bW4tbmF2IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICBwYWRkaW5nOiAxMHB4IDZweDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXNlY29uZGFyeSk7XFxufVxcblxcbi5uYXYtYXJyb3cge1xcbiAgd2lkdGg6IDMwcHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBhcHBlYXJhbmNlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4ubmF2LWFycm93W2Rpc2FibGVkXTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmFmdGVyLFxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG59XFxuXFxuLm5hdi1hcnJvdzpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1ob3Zlcik7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5uYXYtYXJyb3c6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA4cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogMTJweDtcXG59XFxuXFxuLm5hdi1hcnJvdzpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA4cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDE0cHg7XFxuICB0b3A6IDdweDtcXG59XFxuXFxuLmxlZnQtbmF2LWFycm93IHtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIHBhZGRpbmc6IDIwcHggMjNweDtcXG59XFxuXFxuLmNvbmZpZ3VyYXRpb24tYm9keSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogNnB4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IGxhYmVsOm5vdCguaW5wdXQtY29udGFpbmVyKSxcXG4uY29uZmlndXJhdGlvbi1ib2R5IC5sYWJlbCB7XFxuICB3aWR0aDogMTA2cHg7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxufVxcblxcbi5zZWxlY3QtaW5wdXQtY29udGFpbmVyIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnNlbGVjdC1pbnB1dC1jb250YWluZXI6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiBjYWxjKDVweCArIDhweCk7XFxuICB0b3A6IDEycHg7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuXFxuLnNlbGVjdC1pbnB1dC1jb250YWluZXI6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgd2lkdGg6IDFweDtcXG4gIGhlaWdodDogNXB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IGNhbGMoOHB4ICsgOHB4KTtcXG4gIHRvcDogMTJweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uY29sdW1uLWNvbmZpZ3VyYXRpb24taW5wdXRbZGlzYWJsZWRdIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWRpc2FibGVkKTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0W2Rpc2FibGVkXTpob3ZlciB7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4vKi0tIFRvZ2dsZSBzdHlsZXMgLS0qL1xcbi8qIFRoZSBzd2l0Y2ggLSB0aGUgYm94IGFyb3VuZCB0aGUgc2xpZGVyICovXFxuLnVpLXN3aXRjaCB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogMjRweDtcXG4gIGhlaWdodDogMTJweDtcXG59XFxuXFxuLnVpLXN3aXRjaC5kaXNhYmxlZCAuc2xpZGVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjZDFkNGQ0O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctZGlzYWJsZWQpO1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLnVpLXN3aXRjaC5kaXNhYmxlZCAuc2xpZGVyOmJlZm9yZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLWRpc2FibGVkKTtcXG59XFxuXFxuLyogSGlkZSBkZWZhdWx0IEhUTUwgY2hlY2tib3ggKi9cXG4udWktc3dpdGNoIGlucHV0IHtcXG4gIG9wYWNpdHk6IDA7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG59XFxuXFxuLyogVGhlIHNsaWRlciAqL1xcbi5zbGlkZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdG9wOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYm90dG9tOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi10ZXJ0aWFyeSk7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5cXG4uc2xpZGVyOmJlZm9yZSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIGhlaWdodDogMTBweDtcXG4gIHdpZHRoOiAxMHB4O1xcbiAgbGVmdDogMXB4O1xcbiAgYm90dG9tOiAxcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLW9uYnJhbmQpO1xcbiAgdHJhbnNpdGlvbjogMC4ycztcXG59XFxuXFxuaW5wdXQ6Y2hlY2tlZCArIC5zbGlkZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctYnJhbmQpO1xcbn1cXG5cXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlcjpiZWZvcmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEycHgpO1xcbn1cXG5cXG4vKiBSb3VuZGVkIHNsaWRlcnMgKi9cXG4uc2xpZGVyLnJvdW5kIHtcXG4gIGJvcmRlci1yYWRpdXM6IDM0cHg7XFxufVxcblxcbi5zbGlkZXIucm91bmQ6YmVmb3JlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG59XFxuXFxuLyotLSBMYW5ndWFnZSBsaW50ZXIgLS0qL1xcblxcbi5sYW5ndWFnZS1saW50ZXItY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgb3ZlcmZsb3cteTogc2Nyb2xsO1xcbn1cXG5cXG4uc2VsZWN0aW9uLWhhcy1jaGFuZ2VkIHtcXG4gIHBhZGRpbmctYm90dG9tOiA3MHB4O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbnMtZW1wdHktc3RhdGUsXFxuLnN1Z2dlc3Rpb24tbGlzdCB7XFxuICBmbGV4LWdyb3c6IDE7XFxufVxcblxcbi50ZXh0LWxheWVyLW5hdiB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgaGVpZ2h0OiA0N3B4O1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBtYXJnaW4tYm90dG9tOiA4cHg7XFxuICBwYWRkaW5nOiAxMHB4IDZweDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tb25icmFuZCk7XFxufVxcblxcbi5sYW5ndWFnZS1iZXRhLXRhYiB7XFxuICBvcGFjaXR5OiAwO1xcbiAgdHJhbnNpdGlvbjogMC4wNXMgb3BhY2l0eSBlYXNlLW91dDtcXG59XFxuXFxuLmxhbmd1YWdlLWJldGEtdGFiLmFjdGl2ZSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4vKi0tIEhvbWUgLS0qL1xcblxcbi5ob21lLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGdhcDogMTJweDtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogMTRweDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTRweCAxNnB4O1xcbiAgYmFja2dyb3VuZDogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2QxZDRkNDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNzVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uZmlnbWEtZGFyayAucGx1Z2luLXRpbGUtY29udGFpbmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDI1JSk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDAgMCAwIC8gMzAlKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnBsdWdpbi10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMjU1IDI1NSAyNTUgLyA0NSUpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29udGFpbmVyOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWljb24ge1xcbiAgZmxleC1zaHJpbms6IDA7XFxuICB3aWR0aDogMzRweDtcXG4gIGhlaWdodDogMzRweDtcXG59XFxuXFxuLnRhYmxlLWNyZWF0b3IgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyArIFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRhYmxlLWNyZWF0b3IgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMl9fXyArIFwiKTtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzNfX18gKyBcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC50aGVtZS1zd2l0Y2hlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF80X19fICsgXCIpO1xcbn1cXG5cXG4uZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF81X19fICsgXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF82X19fICsgXCIpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtY29weSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogM3B4O1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaGVhZGluZyB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBmb250LXdlaWdodDogNjAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaG9tZS1zdXBwb3J0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMjRweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0OHB4KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCBhIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuLyotLSBDb2xvciBsaW50ZXIgLS0qL1xcblxcbi5jb2xvci1saW50ZXItY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAyNHB4O1xcbiAgZmxleC1ncm93OiAxO1xcbiAgcGFkZGluZzogMjRweDtcXG4gIG92ZXJmbG93OiBhdXRvO1xcbiAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gMTA1cHgpO1xcbn1cXG5cXG4uc3VtbWFyeS1pcy1sb2FkaW5nLFxcbi5uby1zZWxlY3Rpb24tbWFkZSB7XFxuICBkaXNwbGF5OiBncmlkO1xcbiAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcXG4gIGhlaWdodDogMTAwJTtcXG59XFxuXFxuLmNvbG9yLWxpbnRpbmctc3VtbWFyeS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMCAwIDhweDtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgbGluZS1oZWlnaHQ6IDE0NSU7XFxuICBmb250LXNpemU6IDEzcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZXMtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWFyZ2luOiAwO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyIHtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxNTAgMTUwIDE1MCAvIDQ1JSk7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wOTVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWZpZ21hLWNvbG9yLWJnLWJyYW5kLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uYnJhbmQpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZDpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lci5pc3N1ZS1maXhlZC5leHBhbmRlZCxcXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQ6aG92ZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYigwIDEyNSA1MCAvIDglKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMTUwIDE1MCAxNTAgLyA2MCUpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogMCAycHggMCByZ2IoMCAwIDAgLyAzJSksIDAgMXB4IDNweCByZ2JhKDAgMCAwIC8gMSUpLFxcbiAgICAwIDhweCA3cHggcmdiYSgwIDAgMCAvIDIlKTtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHotaW5kZXg6IDEwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1ob3Zlci1zdGF0ZS1kaXNhYmxlZC5jb2xvci10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQpO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDBweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbiAgYm94LXNoYWRvdzogMCAxcHggMCByZ2IoMCAwIDAgLyA1JSk7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBhZGRpbmc6IDEwcHggMTZweCAxMnB4O1xcbiAgZ2FwOiA3cHg7XFxufVxcblxcbi5jb2xvci10aWxlLXRpdGxlLXNlY3Rpb24ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxufVxcblxcbi5jdXN0b20tbGF5ZXItaWNvbiB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgb3BhY2l0eTogMC41O1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSBpbWcsXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gLmljb24ge1xcbiAgZmlsdGVyOiBpbnZlcnQoMSk7XFxufVxcblxcbi5pY29uLmxheWVyLWljb24ge1xcbiAgbWFyZ2luLXJpZ2h0OiA3cHg7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDE3cHg7XFxuICB3aWR0aDogMTdweDtcXG4gIHRyYW5zZm9ybTogc2NhbGUoMC43NSk7XFxuICBtYXJnaW4tbGVmdDogLTJweDtcXG4gIG9wYWNpdHk6IDAuNjU7XFxufVxcblxcbi5jb2xvci10aWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDZweDtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3Qge1xcbiAgcGFkZGluZzogMDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgZ2FwOiAxNHB4O1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSB7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCIvXFxcIjtcXG4gIG1hcmdpbi1sZWZ0OiAxNHB4O1xcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtOm5vdCg6bGFzdC1jaGlsZCk6YWZ0ZXIge1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc3VjY2Vzcy10ZXJ0aWFyeSk7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUge1xcbiAgZmxleC1zaHJpbms6IDA7XFxufVxcblxcbi5jb2xvci10aWxlLW1ldGEtY29sb3Ige1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb2xvci1zYW1wbGUge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLXJpZ2h0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMTAwJSk7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICB3aWR0aDogMTBweDtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2IoMTUwIDE1MCAxNTAgLyAyNSUpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAyM3B4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgbGVmdDogNnB4O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfN19fXyArIFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIHBhZGRpbmc6IDEycHggMTZweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDtcXG4gIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyOmhvdmVyIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmV4cGFuZGVkIC5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHAge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF84X19fICsgXCIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XFxuICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgb3BhY2l0eTogMC45O1xcblxcbiAgdGV4dC1pbmRlbnQ6IDIwMCU7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG59XFxuXFxuLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVscDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3Qge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW0ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBnYXA6IDlweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxMHB4IDEycHggOHB4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1ob3Zlcik7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtcHJpbWFyeS1jb250ZW50IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBnYXA6IDJweDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICB3aWR0aDogMTAwJTtcXG4gIGdhcDogNnB4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGEge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IDA7XFxuICB0b3A6IDA7XFxuICBib3R0b206IDA7XFxuICBwYWRkaW5nOiAwIDE2cHggMCAyNHB4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgb3BhY2l0eTogMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KFxcbiAgICB0byByaWdodCxcXG4gICAgdHJhbnNwYXJlbnQsXFxuICAgIHZhcigtLWZpZ21hLWNvbG9yLWJnLXNlY29uZGFyeSkgMjAlXFxuICApO1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjA3NXMgZWFzZS1vdXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmhvdmVyIC5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YSB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbTpsYXN0LWNoaWxkIHtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1zYW1wbGUge1xcbiAgd2lkdGg6IDEwcHg7XFxuICBoZWlnaHQ6IDEwcHg7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcXG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCByZ2IoMTUwIDE1MCAxNTAgLyAyNSUpO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1mb290ZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIGxlZnQ6IDA7XFxuICByaWdodDogMDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBwYWRkaW5nOiAxNnB4IDI0cHg7XFxuICBnYXA6IDhweDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudSB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgbWluLXdpZHRoOiAxMjVweDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IDIwcHg7XFxuICByaWdodDogLTdweDtcXG4gIHotaW5kZXg6IDEwMDA7XFxuICBwYWRkaW5nOiA4cHggMDtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMyNDIzMjM7XFxuICBjb2xvcjogI2ZmZjtcXG4gIGdhcDogOHB4O1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbn1cXG5cXG4ubWVudS1hY3RpdmUgLmNvbG9yLXRpbGUtbWVudSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW1zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZzogMDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtIHtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIHBhZGRpbmc6IDVweCAxNHB4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW0gYSB7XFxuICBjb2xvcjogI2ZmZjtcXG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudS1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxOGEwZmI7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUgaHIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzQxNDY0NjtcXG4gIGhlaWdodDogMXB4O1xcbiAgYm9yZGVyOiBub25lO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBwbGFjZS1pdGVtczogY2VudGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgbWF4LXdpZHRoOiA5MCU7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1oZWFkaW5nIHtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgbGluZS1oZWlnaHQ6IDE0MCU7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4uY29sb3ItZW1wdHktc3RhdGUtY29udGFpbmVyIC5idG4ge1xcbiAgbWFyZ2luLXRvcDogMTBweDtcXG59XFxuXFxuLmNvbG9yLWxvYWRlcixcXG4udGhlbWUtc3dpdGNoZXItbG9hZGVyIHtcXG4gIHdpZHRoOiAyMHB4O1xcbiAgaGVpZ2h0OiAyMHB4O1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm9yZGVyOiAycHggc29saWQ7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLXRlcnRpYXJ5KTtcXG4gIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1zZWNvbmRhcnkpO1xcbiAgYW5pbWF0aW9uOiBzcGluIDFzIGluZmluaXRlIGxpbmVhcjtcXG5cXG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XFxufVxcblxcbkBrZXlmcmFtZXMgc3BpbiB7XFxuICB0byB7XFxuICAgIHRyYW5zZm9ybTogcm90YXRlKDF0dXJuKTtcXG4gIH1cXG59XFxuXFxuLyotLSBUaGVtZSBzd2l0Y2hlciBzdHlsZXMgLS0qL1xcbi50aGVtZS1zd2l0Y2hlci1jb250YWluZXIge1xcbiAgZ2FwOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG59XFxuXFxuLnRoZW1lLXN3aXRjaGVyLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwIDAgM3B4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXItZGVzY3JpcHRpb24ge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICBnYXA6IDE2cHg7XFxuICBtYXJnaW4tdG9wOiAxNnB4O1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbiB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyAzNSUpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDc1cyBlYXNlLW91dDtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb246aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1vcHRpb246aG92ZXIgLnRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2Uge1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDUwJSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQge1xcbiAgYWNjZW50LWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWJyYW5kKTtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dC1sYWJlbCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dC1sYWJlbDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24taW5wdXQge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiA5cHg7XFxuICByaWdodDogOHB4O1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gMzUlKTtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1sYWJlbC10ZXh0IHtcXG4gIHBhZGRpbmc6IDhweCAxMHB4O1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG59XFxuXFxuW2NsYXNzKj1cXFwibW9kYWwtLWZyYW1lXFxcIl0ge1xcbiAgb3BhY2l0eTogMC4zO1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXItbG9hZGVyIHtcXG4gIHdpZHRoOiAxNXB4O1xcbiAgaGVpZ2h0OiAxNXB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAtMnB4O1xcbiAgcmlnaHQ6IDEwcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBhbmltYXRpb246IHNwaW4gMC41cyBpbmZpbml0ZSBsaW5lYXI7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL3NyYy9hcHAvc3R5bGVzL3VpLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLFlBQVk7RUFDWixTQUFTO0VBQ1Q7K0VBQzZFO0FBQy9FOztBQUVBO0VBQ0UsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0Usa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLHNCQUFzQjtFQUN0QixZQUFZO0VBQ1osdUNBQXVDO0FBQ3pDOztBQUVBO0VBQ0Usd0JBQXdCO0VBQ3hCLHVDQUF1QztBQUN6QztBQUNBO0VBQ0UsZ0JBQWdCO0VBQ2hCLHVDQUF1QztBQUN6QztBQUNBO0VBQ0UsV0FBVztFQUNYLHVDQUF1QztBQUN6QztBQUNBO0VBQ0UsZ0JBQWdCO0VBQ2hCLHVDQUF1QztBQUN6Qzs7QUFFQTtFQUNFLDhCQUE4QjtFQUM5QixlQUFlO0VBQ2Ysa0JBQWtCO0VBQ2xCLGVBQWU7RUFDZixnQkFBZ0I7QUFDbEI7O0FBRUE7RUFDRSxnQkFBZ0I7RUFDaEIsd0NBQXdDO0VBQ3hDLGdCQUFnQjtFQUNoQixpQkFBaUI7QUFDbkI7O0FBRUE7RUFDRSxhQUFhO0VBQ2IsbUJBQW1CO0VBQ25CLDZCQUE2QjtFQUM3QixZQUFZO0VBQ1oscUJBQXFCO0VBQ3JCLHNCQUFzQjtFQUN0QixrQkFBa0I7RUFDbEIsMkNBQTJDO0VBQzNDLHVDQUF1QztFQUN2QyxlQUFlO0VBQ2Ys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aUJBQWlCO0VBQ2pCLGVBQWU7RUFDZiw4QkFBOEI7RUFDOUIsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UsWUFBWTtBQUNkOztBQUVBO0VBQ0UsV0FBVztFQUNYLFlBQVk7RUFDWixrQkFBa0I7RUFDbEIsWUFBWTtFQUNaLFdBQVc7RUFDWCx1Q0FBdUM7RUFDdkMsb0NBQW9DO0FBQ3RDXCIsXCJzb3VyY2VzQ29udGVudFwiOltcImJvZHkge1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgXFxcIlNlZ29lIFVJXFxcIiwgUm9ib3RvLCBIZWx2ZXRpY2EsXFxuICAgIEFyaWFsLCBzYW5zLXNlcmlmLCBcXFwiQXBwbGUgQ29sb3IgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgRW1vamlcXFwiLCBcXFwiU2Vnb2UgVUkgU3ltYm9sXFxcIjtcXG59XFxuXFxuLmZpZ21hLWxpZ2h0IHtcXG4gIGNvbG9yLXNjaGVtZTogbGlnaHQ7XFxufVxcblxcbi5maWdtYS1kYXJrIHtcXG4gIGNvbG9yLXNjaGVtZTogZGFyaztcXG59XFxuXFxuLmFwcCB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGhlaWdodDogMTAwJTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG59XFxuXFxuOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcXG4gIC8qIENocm9tZS9PcGVyYS9TYWZhcmkgKi9cXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuOjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEZpcmVmb3ggMTkrICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcbjotbXMtaW5wdXQtcGxhY2Vob2xkZXIge1xcbiAgLyogSUUgMTArICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcbjotbW96LXBsYWNlaG9sZGVyIHtcXG4gIC8qIEZpcmVmb3ggMTgtICovXFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC10ZXJ0aWFyeSk7XFxufVxcblxcbmg0IHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIG1hcmdpbi10b3A6IDRweDtcXG4gIG1hcmdpbi1ib3R0b206IDRweDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxufVxcblxcbmg2IHtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgbWFyZ2luOiAwIDAgMTBweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNHB4O1xcbn1cXG5cXG5zZWxlY3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGhlaWdodDogMjhweDtcXG4gIHBhZGRpbmc6IDAgMzJweCAwIDhweDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiAzcHg7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgZm9udC1zaXplOiAxMXB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYXBwZWFyYW5jZTogbm9uZTtcXG59XFxuXFxuYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbnNlbGVjdDpmb2N1cyB7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjMThhMGZiO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICMxOGEwZmI7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG5ociB7XFxuICBib3JkZXI6IG5vbmU7XFxuICBoZWlnaHQ6IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbnRhYmxlIHRyIHtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbnRhYmxlIHRkIHtcXG4gIHBhZGRpbmc6IHVuc2V0O1xcbiAgd2lkdGg6IDI2cHg7XFxuICBoZWlnaHQ6IDI2cHg7XFxuICBwYWRkaW5nLXJpZ2h0OiA2cHg7XFxuICBwYWRkaW5nLWJvdHRvbTogNnB4O1xcbiAgYm94LXNpemluZzogY29udGVudC1ib3g7XFxufVxcblxcbi5yZXNpemVyIHtcXG4gIHotaW5kZXg6IDk5O1xcbiAgY3Vyc29yOiBud3NlLXJlc2l6ZTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGJvdHRvbTogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgaGVpZ2h0OiAxNHB4O1xcbiAgd2lkdGg6IDE0cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4xcyBlYXNlO1xcbiAgb3BhY2l0eTogMC40O1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24ge1xcbiAgaGVpZ2h0OiA0MHB4O1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHBhZGRpbmc6IDA7XFxuICBtYXJnaW46IDA7XFxuICBwb3NpdGlvbjogc3RpY2t5O1xcbiAgei1pbmRleDogMTAwO1xcbiAgdG9wOiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1kaXNhYmxlZCk7XFxuICBnYXA6IDBweDtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uOmhvdmVyIC5sYW5ndWFnZS1iZXRhLXRhYiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG5cXG4udGFiLW5hdmlnYXRpb24tdGFiIHtcXG4gIGRpc3BsYXk6IGdyaWQ7XFxuICBwbGFjZS1pdGVtczogY2VudGVyO1xcbiAgcGFkZGluZzogMTBweDtcXG4gIG1pbi13aWR0aDogMzVweDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC43NSBlYXNlLW91dDtcXG59XFxuXFxuLmJhY2stdGFiIHtcXG4gIG9wYWNpdHk6IDAuNTU7XFxufVxcblxcbi5maWdtYS1kYXJrIC5iYWNrLXRhYiB7XFxuICBmaWx0ZXI6IGludmVydCgxKTtcXG59XFxuXFxuLmJhY2stdGFiOmhvdmVyIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi50YWItbmF2aWdhdGlvbi10YWI6bm90KC5hY3RpdmUpIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRhYi1uYXZpZ2F0aW9uLXRhYi5hY3RpdmUge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lcixcXG4ubGFuZ3VhZ2UtbGludGVyLWNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAyM3B4O1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4uaW5wdXRfX3JhZGlvIGlucHV0IHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIG9wYWNpdHk6IDA7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBoZWlnaHQ6IDA7XFxuICB3aWR0aDogMDtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsIHtcXG4gIHdpZHRoOiAyNnB4O1xcbiAgaGVpZ2h0OiAyNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNjZGQzZDU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbCB7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxudGFibGUuaG92ZXJlZCBpbnB1dFt0eXBlPVxcXCJyYWRpb1xcXCJdIH4gbGFiZWwuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zMTUpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayB0YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0MDQwNDA7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzdiODM4YTtcXG59XFxuXFxudGFibGUgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbn1cXG5cXG50YWJsZS5ob3ZlcmVkIGlucHV0W3R5cGU9XFxcInJhZGlvXFxcIl0gfiBsYWJlbC5hY3RpdmUuaG92ZXJlZCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlZGZmO1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMnB4IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxufVxcblxcbi5maWdtYS1kYXJrIHRhYmxlLmhvdmVyZWQgaW5wdXRbdHlwZT1cXFwicmFkaW9cXFwiXSB+IGxhYmVsLmFjdGl2ZS5ob3ZlcmVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6ICMxMDMxNTY7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmctcmlnaHQ6IDhweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgaGVpZ2h0OiAyOHB4O1xcbiAgbWFyZ2luOiAxcHggMDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1ib2R5IC5pbnB1dC1jb250YWluZXIge1xcbiAgcGFkZGluZy1yaWdodDogMDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIge1xcbiAgcGFkZGluZy1sZWZ0OiA4cHg7XFxuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBsYWJlbDpub3QoLmlucHV0LWNvbnRhaW5lciksXFxuLmlucHV0LWNvbnRhaW5lciAubGFiZWwge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDMycHg7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgdGV4dC1hbGlnbjogbGVmdDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIgaW5wdXQge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdC1zdHlsZTogc29saWQ7XFxuICBib3JkZXItbGVmdC13aWR0aDogMXB4O1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciBmb2N1cyB7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIGlucHV0IHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDAgMCA3cHg7XFxuICBwYWRkaW5nLWxlZnQ6IDdweDtcXG4gIGhlaWdodDogMjhweDtcXG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XFxuICBtaW4td2lkdGg6IDA7XFxufVxcblxcbi5pbnB1dC1jb250YWluZXIgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogbm9uZTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1zZWxlY3RlZCk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAxcHggdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLXNlbGVjdGVkKTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBoNS5sYWJlbCB7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgKyA4cHgpO1xcbiAgbWFyZ2luLWJvdHRvbTogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHJpZ2h0OiA4cHg7XFxuICBnYXA6IDhweDtcXG59XFxuXFxuLnRhYmxlLWRpbWVuc2lvbnMtY29uZmlnIC5pbnB1dC1jb250YWluZXIge1xcbiAgZmxleC1ncm93OiAxO1xcbn1cXG5cXG4udGFibGUtZGltZW5zaW9ucy1jb25maWcgLmlucHV0LWNvbnRhaW5lciBpbnB1dDpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3gtc2hhZG93OiBub25lO1xcbn1cXG5cXG4ubnVtYmVyLW9mLWNvbHMsXFxuLm51bWJlci1vZi1yb3dzIHtcXG4gIGJvcmRlcjogbm9uZTtcXG59XFxuXFxuLm51bWJlci1vZi1jb2xzOmZvY3VzLFxcbi5udW1iZXItb2Ytcm93czpmb2N1cyB7XFxuICBvdXRsaW5lOiBub25lO1xcbn1cXG5cXG4uY3RhLWNvbnRhaW5lciB7XFxuICB3aWR0aDogODQlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIHJpZ2h0OiAyM3B4O1xcbiAgYm90dG9tOiAyM3B4O1xcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcXG59XFxuXFxuLmRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lciB7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbn1cXG5cXG4uZGltZW5zaW9ucy1jdGEtY29udGFpbmVyIGg2IHtcXG4gIG1hcmdpbjogMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG59XFxuXFxuLmlucHV0LWNvbnRhaW5lciBpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdIHtcXG4gIGhlaWdodDogYXV0bztcXG4gIHdpZHRoOiBhdXRvO1xcbiAgbWFyZ2luOiAwO1xcbn1cXG5cXG4uaW5wdXQtY29udGFpbmVyIDp3aGVyZShpbnB1dFt0eXBlPVxcXCJjaGVja2JveFxcXCJdOmhvdmVyLCBsYWJlbFtmb3JdOmhvdmVyKSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5kaW1lbnNpb25zLWN0YS1jb250YWluZXIgLmlucHV0LWNvbnRhaW5lciB7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLnRvb2x0aXAtdHJpZ2dlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxNnB4O1xcbiAgaGVpZ2h0OiAxNnB4O1xcbiAgbWFyZ2luLWxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24taW5mby5zdmdcXFwiKTtcXG59XFxuXFxuLnRvb2x0aXAtdHJpZ2dlcjpob3ZlciB+IC50b29sdGlwIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbn1cXG5cXG4udG9vbHRpcCB7XFxuICB3aWR0aDogMTMzcHg7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAyNXB4O1xcbiAgY29sb3I6IHJnYigyNTUgMjU1IDI1NSAvIDkwJSk7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMCAwIDAgLyA3NSUpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgcGFkZGluZy1pbmxpbmU6IDEwcHg7XFxuICBsZWZ0OiA1MHB4O1xcbiAgbGluZS1oZWlnaHQ6IDEzNSU7XFxuICBwYWRkaW5nLWJsb2NrOiA2cHg7XFxuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuLnRvb2x0aXA6YWZ0ZXIge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMDtcXG4gIGhlaWdodDogMDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogNDEuNXB4O1xcbiAgbGVmdDogNjVweDtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLWJvdHRvbTogNXB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNXB4IHNvbGlkIHJnYigwIDAgMCAvIDc1JSk7XFxufVxcblxcbi5idG4ge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG4gIGZvbnQtd2VpZ2h0OiA1MDA7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGhlaWdodDogMzJweDtcXG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xcbiAgbWF4LXdpZHRoOiAyMDBweDtcXG4gIHBhZGRpbmc6IDAgMTFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDZweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgYmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNnB4O1xcbiAgbGV0dGVyLXNwYWNpbmc6IDAuMDUzcHg7XFxufVxcblxcbi5idG4tcHJpbWFyeSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtb25icmFuZCk7XFxuICBiYWNrZ3JvdW5kLWNsaXA6IGJvcmRlci1ib3g7XFxufVxcblxcbmJ1dHRvbltkaXNhYmxlZF0ge1xcbiAgYm9yZGVyLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItZGlzYWJsZWQtc3Ryb25nKTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LWRpc2FibGVkKTtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG59XFxuXFxuLmNvbHVtbi1uYXYge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KTtcXG59XFxuXFxuLm5hdi1hcnJvdyB7XFxuICB3aWR0aDogMzBweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGFwcGVhcmFuY2U6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxufVxcblxcbi5uYXYtYXJyb3dbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG59XFxuXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YWZ0ZXIsXFxuLm5hdi1hcnJvd1tkaXNhYmxlZF06YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4ubmF2LWFycm93OmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLm5hdi1hcnJvdzphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAxNHB4O1xcbiAgdG9wOiAxMnB4O1xcbn1cXG5cXG4ubmF2LWFycm93OmJlZm9yZSB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDhweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMTRweDtcXG4gIHRvcDogN3B4O1xcbn1cXG5cXG4ubGVmdC1uYXYtYXJyb3cge1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoMTgwZGVnKTtcXG59XFxuXFxuLmNvbHVtbi1jb25maWd1cmF0aW9uLWJvZHkge1xcbiAgcGFkZGluZzogMjBweCAyM3B4O1xcbn1cXG5cXG4uY29uZmlndXJhdGlvbi1ib2R5IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgZ2FwOiA2cHg7XFxufVxcblxcbi5jb25maWd1cmF0aW9uLWJvZHkgbGFiZWw6bm90KC5pbnB1dC1jb250YWluZXIpLFxcbi5jb25maWd1cmF0aW9uLWJvZHkgLmxhYmVsIHtcXG4gIHdpZHRoOiAxMDZweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLnNlbGVjdC1pbnB1dC1jb250YWluZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjphZnRlciB7XFxuICBjb250ZW50OiBcXFwiXFxcIjtcXG4gIHdpZHRoOiAxcHg7XFxuICBoZWlnaHQ6IDVweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtdGVydGlhcnkpO1xcbiAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgcmlnaHQ6IGNhbGMoNXB4ICsgOHB4KTtcXG4gIHRvcDogMTJweDtcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbn1cXG5cXG4uc2VsZWN0LWlucHV0LWNvbnRhaW5lcjpiZWZvcmUge1xcbiAgY29udGVudDogXFxcIlxcXCI7XFxuICB3aWR0aDogMXB4O1xcbiAgaGVpZ2h0OiA1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXRlcnRpYXJ5KTtcXG4gIHRyYW5zZm9ybTogcm90YXRlKC00NWRlZyk7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogY2FsYyg4cHggKyA4cHgpO1xcbiAgdG9wOiAxMnB4O1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxufVxcblxcbi5jb2x1bW4tY29uZmlndXJhdGlvbi1pbnB1dFtkaXNhYmxlZF0ge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctZGlzYWJsZWQpO1xcbiAgYm9yZGVyLXJhZGl1czogMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtZGlzYWJsZWQpO1xcbn1cXG5cXG4uY29sdW1uLWNvbmZpZ3VyYXRpb24taW5wdXRbZGlzYWJsZWRdOmhvdmVyIHtcXG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XFxufVxcblxcbi8qLS0gVG9nZ2xlIHN0eWxlcyAtLSovXFxuLyogVGhlIHN3aXRjaCAtIHRoZSBib3ggYXJvdW5kIHRoZSBzbGlkZXIgKi9cXG4udWktc3dpdGNoIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHdpZHRoOiAyNHB4O1xcbiAgaGVpZ2h0OiAxMnB4O1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXIge1xcbiAgYm94LXNoYWRvdzogMCAwIDAgMXB4ICNkMWQ0ZDQ7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1kaXNhYmxlZCk7XFxuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xcbn1cXG5cXG4udWktc3dpdGNoLmRpc2FibGVkIC5zbGlkZXI6YmVmb3JlIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tZGlzYWJsZWQpO1xcbn1cXG5cXG4vKiBIaWRlIGRlZmF1bHQgSFRNTCBjaGVja2JveCAqL1xcbi51aS1zd2l0Y2ggaW5wdXQge1xcbiAgb3BhY2l0eTogMDtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbn1cXG5cXG4vKiBUaGUgc2xpZGVyICovXFxuLnNsaWRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0b3A6IDA7XFxuICBsZWZ0OiAwO1xcbiAgcmlnaHQ6IDA7XFxuICBib3R0b206IDA7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXRlcnRpYXJ5KTtcXG4gIHRyYW5zaXRpb246IDAuMnM7XFxufVxcblxcbi5zbGlkZXI6YmVmb3JlIHtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBsZWZ0OiAxcHg7XFxuICBib3R0b206IDFweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWljb24tb25icmFuZCk7XFxuICB0cmFuc2l0aW9uOiAwLjJzO1xcbn1cXG5cXG5pbnB1dDpjaGVja2VkICsgLnNsaWRlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZCk7XFxufVxcblxcbmlucHV0OmNoZWNrZWQgKyAuc2xpZGVyOmJlZm9yZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTJweCk7XFxufVxcblxcbi8qIFJvdW5kZWQgc2xpZGVycyAqL1xcbi5zbGlkZXIucm91bmQge1xcbiAgYm9yZGVyLXJhZGl1czogMzRweDtcXG59XFxuXFxuLnNsaWRlci5yb3VuZDpiZWZvcmUge1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbn1cXG5cXG4vKi0tIExhbmd1YWdlIGxpbnRlciAtLSovXFxuXFxuLmxhbmd1YWdlLWxpbnRlci1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBvdmVyZmxvdy15OiBzY3JvbGw7XFxufVxcblxcbi5zZWxlY3Rpb24taGFzLWNoYW5nZWQge1xcbiAgcGFkZGluZy1ib3R0b206IDcwcHg7XFxufVxcblxcbi5zdWdnZXN0aW9ucy1lbXB0eS1zdGF0ZSxcXG4uc3VnZ2VzdGlvbi1saXN0IHtcXG4gIGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLnRleHQtbGF5ZXItbmF2IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBoZWlnaHQ6IDQ3cHg7XFxuICBmbGV4LXNocmluazogMDtcXG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcXG4gIG1hcmdpbi1ib3R0b206IDhweDtcXG4gIHBhZGRpbmc6IDEwcHggNnB4O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItaWNvbi1vbmJyYW5kKTtcXG59XFxuXFxuLmxhbmd1YWdlLWJldGEtdGFiIHtcXG4gIG9wYWNpdHk6IDA7XFxuICB0cmFuc2l0aW9uOiAwLjA1cyBvcGFjaXR5IGVhc2Utb3V0O1xcbn1cXG5cXG4ubGFuZ3VhZ2UtYmV0YS10YWIuYWN0aXZlIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi8qLS0gSG9tZSAtLSovXFxuXFxuLmhvbWUtY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgZ2FwOiAxMnB4O1xcbiAgcGFkZGluZzogMjRweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiAxNHB4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBwYWRkaW5nOiAxNHB4IDE2cHg7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCAjZDFkNGQ0O1xcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG4gIHRyYW5zaXRpb246IGFsbCAwLjA3NXMgZWFzZS1vdXQ7XFxufVxcblxcbi5maWdtYS1kYXJrIC5wbHVnaW4tdGlsZS1jb250YWluZXIge1xcbiAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSAyNTUgMjU1IC8gMjUlKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvbnRhaW5lcjpob3ZlciB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBib3JkZXItY29sb3I6IHJnYmEoMCAwIDAgLyAzMCUpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAucGx1Z2luLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDQ1JSk7XFxufVxcblxcbi5wbHVnaW4tdGlsZS1jb250YWluZXI6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbn1cXG5cXG4ucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBmbGV4LXNocmluazogMDtcXG4gIHdpZHRoOiAzNHB4O1xcbiAgaGVpZ2h0OiAzNHB4O1xcbn1cXG5cXG4udGFibGUtY3JlYXRvciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLXRhYmxlLWNyZWF0b3Iuc3ZnXFxcIik7XFxufVxcblxcbi5maWdtYS1kYXJrIC50YWJsZS1jcmVhdG9yIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay10YWJsZS1jcmVhdG9yLnN2Z1xcXCIpO1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi10aGVtZS1zd2l0Y2hlci5zdmdcXFwiKTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLnRoZW1lLXN3aXRjaGVyIC5wbHVnaW4tdGlsZS1pY29uIHtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tZGFyay10aGVtZS1zd2l0Y2hlci5zdmdcXFwiKTtcXG59XFxuXFxuLmRlc2lnbi1saW50ZXIgLnBsdWdpbi10aWxlLWljb24ge1xcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFxcXCIuLi9hc3NldHMvaWNvbi1kZXNpZ24tbGludGVyLnN2Z1xcXCIpO1xcbn1cXG5cXG4uZmlnbWEtZGFyayAuZGVzaWduLWxpbnRlciAucGx1Z2luLXRpbGUtaWNvbiB7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWRhcmstZGVzaWduLWxpbnRlci5zdmdcXFwiKTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWNvcHkge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDNweDtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWhlYWRpbmcge1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnBsdWdpbi10aWxlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTFweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmhvbWUtc3VwcG9ydCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDI0cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICB3aWR0aDogY2FsYygxMDAlIC0gNDhweCk7XFxufVxcblxcbi5ob21lLXN1cHBvcnQgYSB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1icmFuZCk7XFxufVxcblxcbi8qLS0gQ29sb3IgbGludGVyIC0tKi9cXG5cXG4uY29sb3ItbGludGVyLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMjRweDtcXG4gIGZsZXgtZ3JvdzogMTtcXG4gIHBhZGRpbmc6IDI0cHg7XFxuICBvdmVyZmxvdzogYXV0bztcXG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwJSAtIDEwNXB4KTtcXG59XFxuXFxuLnN1bW1hcnktaXMtbG9hZGluZyxcXG4ubm8tc2VsZWN0aW9uLW1hZGUge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDEwMCU7XFxufVxcblxcbi5jb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCA4cHg7XFxuICBmb250LXNpemU6IDE4cHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNjAwO1xcbn1cXG5cXG4uY29sb3ItbGludGluZy1zdW1tYXJ5LWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDUlO1xcbiAgZm9udC1zaXplOiAxM3B4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTBweDtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5jb2xvci10aWxlLWNvbnRhaW5lciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTUwIDE1MCAxNTAgLyA0NSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMDk1cyBlYXNlLW91dDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCB2YXIoLS1maWdtYS1jb2xvci1iZy1icmFuZC10ZXJ0aWFyeSk7XFxuICBib3JkZXItY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbmJyYW5kKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlci1vbnN1Y2Nlc3MpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQ6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLW9uc3VjY2Vzcyk7XFxuICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiKDAgMTI1IDUwIC8gOCUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1jb250YWluZXIuaXNzdWUtZml4ZWQuZXhwYW5kZWQsXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyLmlzc3VlLWZpeGVkLmV4cGFuZGVkOmhvdmVyIHtcXG4gIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2IoMCAxMjUgNTAgLyA4JSk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXItb25zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmhvdmVyIHtcXG4gIGJvcmRlci1jb2xvcjogcmdiKDE1MCAxNTAgMTUwIC8gNjAlKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIGJveC1zaGFkb3c6IDAgMnB4IDAgcmdiKDAgMCAwIC8gMyUpLCAwIDFweCAzcHggcmdiYSgwIDAgMCAvIDElKSxcXG4gICAgMCA4cHggN3B4IHJnYmEoMCAwIDAgLyAyJSk7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICB6LWluZGV4OiAxMDtcXG59XFxuXFxuLmNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWQuY29sb3ItdGlsZS1jb250YWluZXI6aG92ZXIge1xcbiAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyLWRpc2FibGVkKTtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm94LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29udGFpbmVyOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcXG4gIGJveC1zaGFkb3c6IDAgMXB4IDAgcmdiKDAgMCAwIC8gNSUpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAxMHB4IDE2cHggMTJweDtcXG4gIGdhcDogN3B4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS10aXRsZS1zZWN0aW9uIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG5cXG4uY3VzdG9tLWxheWVyLWljb24ge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBtYXJnaW4tcmlnaHQ6IDdweDtcXG4gIG9wYWNpdHk6IDAuNTtcXG59XFxuXFxuLmZpZ21hLWRhcmsgLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lLWl0ZW0gaW1nLFxcbi5maWdtYS1kYXJrIC5jb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtIC5pY29uIHtcXG4gIGZpbHRlcjogaW52ZXJ0KDEpO1xcbn1cXG5cXG4uaWNvbi5sYXllci1pY29uIHtcXG4gIG1hcmdpbi1yaWdodDogN3B4O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgaGVpZ2h0OiAxN3B4O1xcbiAgd2lkdGg6IDE3cHg7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuNzUpO1xcbiAgbWFyZ2luLWxlZnQ6IC0ycHg7XFxuICBvcGFjaXR5OiAwLjY1O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1oZWFkaW5nIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgZ2FwOiA2cHg7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXdlaWdodDogNTAwO1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4uaXNzdWUtZml4ZWQgLmNvbG9yLXRpbGUtaGVhZGluZyB7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zdWNjZXNzKTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0IHtcXG4gIHBhZGRpbmc6IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTRweDtcXG4gIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmlzc3VlLWZpeGVkIC5jb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3Mtc2Vjb25kYXJ5KTtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW06bm90KDpsYXN0LWNoaWxkKTphZnRlciB7XFxuICBjb250ZW50OiBcXFwiL1xcXCI7XFxuICBtYXJnaW4tbGVmdDogMTRweDtcXG4gIHVzZXItc2VsZWN0OiBub25lO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5pc3N1ZS1maXhlZCAuY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbTpub3QoOmxhc3QtY2hpbGQpOmFmdGVyIHtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXN1Y2Nlc3MtdGVydGlhcnkpO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWUtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWV0YS1sYXllci1uYW1lIHtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZXRhLWNvbG9yIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtY29sb3Itc2FtcGxlIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIG1hcmdpbi1yaWdodDogNnB4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUgMjU1IDI1NSAvIDEwMCUpO1xcbiAgaGVpZ2h0OiAxMHB4O1xcbiAgd2lkdGg6IDEwcHg7XFxuICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiKDE1MCAxNTAgMTUwIC8gMjUlKTtcXG4gIGJvcmRlci1yYWRpdXM6IDJweDtcXG59XFxuXFxuLmJ0bi1jb2xvci10aWxlLW1lbnUge1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICB3aWR0aDogMjNweDtcXG4gIGhlaWdodDogMTZweDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGxlZnQ6IDZweDtcXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcXFwiLi4vYXNzZXRzL2ljb24tbW9yZS5zdmdcXFwiKTtcXG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyO1xcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDNweDtcXG5cXG4gIHRleHQtaW5kZW50OiAyMDAlO1xcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuYnRuLWNvbG9yLXRpbGUtbWVudSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy1zZWNvbmRhcnkpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4uYnRuLWNvbG9yLXRpbGUtbWVudTpob3ZlciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZy10ZXJ0aWFyeSk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBub25lO1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIGdhcDogMTJweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIHBhZGRpbmc6IDEycHggMTZweDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBib3JkZXItcmFkaXVzOiAwIDAgM3B4IDNweDtcXG4gIGJvcmRlci10b3A6IDFweCBkb3R0ZWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyOmhvdmVyIHtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG59XFxuXFxuLmV4cGFuZGVkIC5zdWdnZXN0ZWQtY29sb3Itc3R5bGVzLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBnYXA6IDRweDtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlbHAge1xcbiAgd2lkdGg6IDE4cHg7XFxuICBoZWlnaHQ6IDE4cHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXFxcIi4uL2Fzc2V0cy9pY29uLWhlbHAuc3ZnXFxcIik7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcXG4gIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XFxuICBib3JkZXI6IG5vbmU7XFxuICBvcGFjaXR5OiAwLjk7XFxuXFxuICB0ZXh0LWluZGVudDogMjAwJTtcXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4uYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWxwOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdCB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBhZGRpbmc6IDA7XFxuICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1iZyk7XFxuICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1maWdtYS1jb2xvci1ib3JkZXIpO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWxpc3QtaXRlbSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogOXB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gIHBhZGRpbmc6IDEwcHggMTJweCA4cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWZpZ21hLWNvbG9yLWJvcmRlcik7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmhvdmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnLWhvdmVyKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1wcmltYXJ5LWNvbnRlbnQge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICB3aWR0aDogMTAwJTtcXG4gIGdhcDogMnB4O1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRpbmcge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZ2FwOiA2cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgbWFyZ2luOiAwO1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgZm9udC13ZWlnaHQ6IDUwMDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5idG4tc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWN0YSB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHRvcDogMDtcXG4gIGJvdHRvbTogMDtcXG4gIHBhZGRpbmc6IDAgMTZweCAwIDI0cHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBvcGFjaXR5OiAwO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbiAgYm9yZGVyOiBub25lO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQoXFxuICAgIHRvIHJpZ2h0LFxcbiAgICB0cmFuc3BhcmVudCxcXG4gICAgdmFyKC0tZmlnbWEtY29sb3ItYmctc2Vjb25kYXJ5KSAyMCVcXG4gICk7XFxuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMDc1cyBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW06aG92ZXIgLmJ0bi1zdWdnZXN0ZWQtY29sb3Itc3R5bGUtY3RhIHtcXG4gIG9wYWNpdHk6IDE7XFxufVxcblxcbi5zdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdC1pdGVtOmxhc3QtY2hpbGQge1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGVkLWNvbG9yLXN0eWxlLXNhbXBsZSB7XFxuICB3aWR0aDogMTBweDtcXG4gIGhlaWdodDogMTBweDtcXG4gIGZsZXgtc2hyaW5rOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYigxNTAgMTUwIDE1MCAvIDI1JSk7XFxufVxcblxcbi5jb2xvci1saW50aW5nLWZvb3RlciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgYm90dG9tOiAwO1xcbiAgbGVmdDogMDtcXG4gIHJpZ2h0OiAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmcpO1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tZmlnbWEtY29sb3ItYm9yZGVyKTtcXG4gIHBhZGRpbmc6IDE2cHggMjRweDtcXG4gIGdhcDogOHB4O1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxuICBtaW4td2lkdGg6IDEyNXB4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHRvcDogMjBweDtcXG4gIHJpZ2h0OiAtN3B4O1xcbiAgei1pbmRleDogMTAwMDtcXG4gIHBhZGRpbmc6IDhweCAwO1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzI0MjMyMztcXG4gIGNvbG9yOiAjZmZmO1xcbiAgZ2FwOiA4cHg7XFxuICBib3JkZXItcmFkaXVzOiAycHg7XFxufVxcblxcbi5tZW51LWFjdGl2ZSAuY29sb3ItdGlsZS1tZW51IHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbXMge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBwYWRkaW5nOiAwO1xcbiAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW0ge1xcbiAgZm9udC1zaXplOiAxMnB4O1xcbiAgcGFkZGluZzogNXB4IDE0cHg7XFxufVxcblxcbi5jb2xvci10aWxlLW1lbnUtaXRlbSBhIHtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbn1cXG5cXG4uY29sb3ItdGlsZS1tZW51LWl0ZW06aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogIzE4YTBmYjtcXG59XFxuXFxuLmNvbG9yLXRpbGUtbWVudSBociB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDE0NjQ2O1xcbiAgaGVpZ2h0OiAxcHg7XFxuICBib3JkZXI6IG5vbmU7XFxuICBtYXJnaW46IDA7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZ3JpZDtcXG4gIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxuICBtYXgtd2lkdGg6IDkwJTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWhlYWRpbmcge1xcbiAgZm9udC13ZWlnaHQ6IDYwMDtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0KTtcXG59XFxuXFxuLmNvbG9yLWVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMTQwJTtcXG4gIGNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci10ZXh0LXNlY29uZGFyeSk7XFxufVxcblxcbi5jb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXIgLmJ0biB7XFxuICBtYXJnaW4tdG9wOiAxMHB4O1xcbn1cXG5cXG4uY29sb3ItbG9hZGVyLFxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDIwcHg7XFxuICBoZWlnaHQ6IDIwcHg7XFxuICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICBib3JkZXI6IDJweCBzb2xpZDtcXG4gIGJvcmRlci1jb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItYmctdGVydGlhcnkpO1xcbiAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB2YXIoLS1maWdtYS1jb2xvci1pY29uLXNlY29uZGFyeSk7XFxuICBhbmltYXRpb246IHNwaW4gMXMgaW5maW5pdGUgbGluZWFyO1xcblxcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG59XFxuXFxuQGtleWZyYW1lcyBzcGluIHtcXG4gIHRvIHtcXG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMXR1cm4pO1xcbiAgfVxcbn1cXG5cXG4vKi0tIFRoZW1lIHN3aXRjaGVyIHN0eWxlcyAtLSovXFxuLnRoZW1lLXN3aXRjaGVyLWNvbnRhaW5lciB7XFxuICBnYXA6IDEycHg7XFxuICBwYWRkaW5nOiAyNHB4O1xcbn1cXG5cXG4udGhlbWUtc3dpdGNoZXItaGVhZGluZyB7XFxuICBtYXJnaW46IDAgMCAzcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1kZXNjcmlwdGlvbiB7XFxuICBtYXJnaW46IDA7XFxuICBmb250LXNpemU6IDExcHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dC1zZWNvbmRhcnkpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWNvbnRhaW5lciB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogMTZweDtcXG4gIG1hcmdpbi10b3A6IDE2cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tb3B0aW9uIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigxMjcgMTI3IDEyNyAvIDM1JSk7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNzVzIGVhc2Utb3V0O1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciB7XFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyA1MCUpO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLW9wdGlvbjpob3ZlciAudGhlbWUtc2VsZWN0aW9uLXRodW1ibmFpbC1pbWFnZSB7XFxuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyNyAxMjcgMTI3IC8gNTAlKTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBhY2NlbnQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQtYnJhbmQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLXRleHQpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsOmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnRoZW1lLXNlbGVjdGlvbi1pbnB1dCB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IDlweDtcXG4gIHJpZ2h0OiA4cHg7XFxufVxcblxcbi50aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlIHtcXG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMTI3IDEyNyAxMjcgLyAzNSUpO1xcbn1cXG5cXG4udGhlbWUtc2VsZWN0aW9uLWxhYmVsLXRleHQge1xcbiAgcGFkZGluZzogOHB4IDEwcHg7XFxuICBmb250LXNpemU6IDEycHg7XFxuICBjb2xvcjogdmFyKC0tZmlnbWEtY29sb3ItdGV4dCk7XFxuICBmb250LXdlaWdodDogNTAwO1xcbn1cXG5cXG5bY2xhc3MqPVxcXCJtb2RhbC0tZnJhbWVcXFwiXSB7XFxuICBvcGFjaXR5OiAwLjM7XFxufVxcblxcbi50aGVtZS1zd2l0Y2hlci1sb2FkZXIge1xcbiAgd2lkdGg6IDE1cHg7XFxuICBoZWlnaHQ6IDE1cHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBib3R0b206IC0ycHg7XFxuICByaWdodDogMTBweDtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZpZ21hLWNvbG9yLWJnKTtcXG4gIGFuaW1hdGlvbjogc3BpbiAwLjVzIGluZmluaXRlIGxpbmVhcjtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xuLy8gY3NzIGJhc2UgY29kZSwgaW5qZWN0ZWQgYnkgdGhlIGNzcy1sb2FkZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKSB7XG4gIHZhciBsaXN0ID0gW107IC8vIHJldHVybiB0aGUgbGlzdCBvZiBtb2R1bGVzIGFzIGNzcyBzdHJpbmdcblxuICBsaXN0LnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICB2YXIgY29udGVudCA9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIHJldHVybiBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoY29udGVudCwgXCJ9XCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGVudDtcbiAgICB9KS5qb2luKFwiXCIpO1xuICB9OyAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXG5cbiAgbGlzdC5pID0gZnVuY3Rpb24gKG1vZHVsZXMsIG1lZGlhUXVlcnksIGRlZHVwZSkge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCBcIlwiXV07XG4gICAgfVxuXG4gICAgdmFyIGFscmVhZHlJbXBvcnRlZE1vZHVsZXMgPSB7fTtcblxuICAgIGlmIChkZWR1cGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICAgICAgdmFyIGlkID0gdGhpc1tpXVswXTtcblxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaWRdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBtb2R1bGVzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfaV0pO1xuXG4gICAgICBpZiAoZGVkdXBlICYmIGFscmVhZHlJbXBvcnRlZE1vZHVsZXNbaXRlbVswXV0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWFRdWVyeSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWFRdWVyeTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzJdID0gXCJcIi5jb25jYXQobWVkaWFRdWVyeSwgXCIgYW5kIFwiKS5jb25jYXQoaXRlbVsyXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gbGlzdDtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciAmJiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdKTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGUsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICB1cmwgPSB1cmwgJiYgdXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybDtcblxuICBpZiAodHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1cmw7XG4gIH0gLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG5cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIga2V5cyA9IHJlcXVpcmUoJ29iamVjdC1rZXlzJyk7XG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbCgnZm9vJykgPT09ICdzeW1ib2wnO1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgb3JpZ0RlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIChmbikge1xuXHRyZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHRvU3RyLmNhbGwoZm4pID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xufTtcblxudmFyIGFyZVByb3BlcnR5RGVzY3JpcHRvcnNTdXBwb3J0ZWQgPSBmdW5jdGlvbiAoKSB7XG5cdHZhciBvYmogPSB7fTtcblx0dHJ5IHtcblx0XHRvcmlnRGVmaW5lUHJvcGVydHkob2JqLCAneCcsIHsgZW51bWVyYWJsZTogZmFsc2UsIHZhbHVlOiBvYmogfSk7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby1yZXN0cmljdGVkLXN5bnRheFxuXHRcdGZvciAodmFyIF8gaW4gb2JqKSB7IC8vIGpzY3M6aWdub3JlIGRpc2FsbG93VW51c2VkVmFyaWFibGVzXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBvYmoueCA9PT0gb2JqO1xuXHR9IGNhdGNoIChlKSB7IC8qIHRoaXMgaXMgSUUgOC4gKi9cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgc3VwcG9ydHNEZXNjcmlwdG9ycyA9IG9yaWdEZWZpbmVQcm9wZXJ0eSAmJiBhcmVQcm9wZXJ0eURlc2NyaXB0b3JzU3VwcG9ydGVkKCk7XG5cbnZhciBkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIChvYmplY3QsIG5hbWUsIHZhbHVlLCBwcmVkaWNhdGUpIHtcblx0aWYgKG5hbWUgaW4gb2JqZWN0ICYmICghaXNGdW5jdGlvbihwcmVkaWNhdGUpIHx8ICFwcmVkaWNhdGUoKSkpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0aWYgKHN1cHBvcnRzRGVzY3JpcHRvcnMpIHtcblx0XHRvcmlnRGVmaW5lUHJvcGVydHkob2JqZWN0LCBuYW1lLCB7XG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdHdyaXRhYmxlOiB0cnVlXG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b2JqZWN0W25hbWVdID0gdmFsdWU7XG5cdH1cbn07XG5cbnZhciBkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gKG9iamVjdCwgbWFwKSB7XG5cdHZhciBwcmVkaWNhdGVzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB7fTtcblx0dmFyIHByb3BzID0ga2V5cyhtYXApO1xuXHRpZiAoaGFzU3ltYm9scykge1xuXHRcdHByb3BzID0gY29uY2F0LmNhbGwocHJvcHMsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobWFwKSk7XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdGRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcHNbaV0sIG1hcFtwcm9wc1tpXV0sIHByZWRpY2F0ZXNbcHJvcHNbaV1dKTtcblx0fVxufTtcblxuZGVmaW5lUHJvcGVydGllcy5zdXBwb3J0c0Rlc2NyaXB0b3JzID0gISFzdXBwb3J0c0Rlc2NyaXB0b3JzO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGRlZmluZVByb3BlcnRpZXM7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29udGFpbnMob3RoZXIpIHtcblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignMSBhcmd1bWVudCBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdGlmICh0eXBlb2Ygb3RoZXIgIT09ICdvYmplY3QnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgMSAo4oCdb3RoZXLigJwpIHRvIE5vZGUuY29udGFpbnMgbXVzdCBiZSBhbiBpbnN0YW5jZSBvZiBOb2RlJyk7XG5cdH1cblxuXHR2YXIgbm9kZSA9IG90aGVyO1xuXHRkbyB7XG5cdFx0aWYgKHRoaXMgPT09IG5vZGUpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRpZiAobm9kZSkge1xuXHRcdFx0bm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcblx0XHR9XG5cdH0gd2hpbGUgKG5vZGUpO1xuXG5cdHJldHVybiBmYWxzZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kQ29udGFpbnMgPSBmdW5jdGlvbiBjb250YWlucyhub2RlLCBvdGhlcikge1xuXHRyZXR1cm4gcG9seWZpbGwuYXBwbHkobm9kZSwgW290aGVyXSk7XG59O1xuXG5kZWZpbmUoYm91bmRDb250YWlucywge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gYm91bmRDb250YWlucztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdGlmIChkb2N1bWVudC5jb250YWlucykge1xuXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNvbnRhaW5zO1xuXHRcdH1cblx0XHRpZiAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNvbnRhaW5zKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAodHlwZW9mIGRvY3VtZW50LmJvZHkuY29udGFpbnMuY2FsbChkb2N1bWVudCwgJycpID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRyZXR1cm4gZG9jdW1lbnQuYm9keS5jb250YWlucztcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZSkgeyAvKiovIH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUNvbnRhaW5zKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuXHRcdGRlZmluZShcblx0XHRcdGRvY3VtZW50LFxuXHRcdFx0eyBjb250YWluczogcG9seWZpbGwgfSxcblx0XHRcdHsgY29udGFpbnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LmNvbnRhaW5zICE9PSBwb2x5ZmlsbDsgfSB9XG5cdFx0KTtcblx0XHRpZiAodHlwZW9mIEVsZW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRkZWZpbmUoXG5cdFx0XHRcdEVsZW1lbnQucHJvdG90eXBlLFxuXHRcdFx0XHR7IGNvbnRhaW5zOiBwb2x5ZmlsbCB9LFxuXHRcdFx0XHR7IGNvbnRhaW5zOiBmdW5jdGlvbiAoKSB7IHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5jb250YWlucyAhPT0gcG9seWZpbGw7IH0gfVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHBvbHlmaWxsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMTFcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLzUvQ2hlY2tPYmplY3RDb2VyY2libGUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEVTNVRvSW50ZWdlciA9IHJlcXVpcmUoJy4uLzUvVG9JbnRlZ2VyJyk7XG5cbnZhciBUb051bWJlciA9IHJlcXVpcmUoJy4vVG9OdW1iZXInKTtcblxuLy8gaHR0cHM6Ly93d3cuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi8xMS4wLyNzZWMtdG9pbnRlZ2VyXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmIChudW1iZXIgIT09IDApIHtcblx0XHRudW1iZXIgPSBFUzVUb0ludGVnZXIobnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gbnVtYmVyID09PSAwID8gMCA6IG51bWJlcjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gcmVxdWlyZSgnLi4vaGVscGVycy9tYXhTYWZlSW50ZWdlcicpO1xuXG52YXIgVG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4vVG9JbnRlZ2VyT3JJbmZpbml0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTGVuZ3RoKGFyZ3VtZW50KSB7XG5cdHZhciBsZW4gPSBUb0ludGVnZXJPckluZmluaXR5KGFyZ3VtZW50KTtcblx0aWYgKGxlbiA8PSAwKSB7IHJldHVybiAwOyB9IC8vIGluY2x1ZGVzIGNvbnZlcnRpbmcgLTAgdG8gKzBcblx0aWYgKGxlbiA+IE1BWF9TQUZFX0lOVEVHRVIpIHsgcmV0dXJuIE1BWF9TQUZFX0lOVEVHRVI7IH1cblx0cmV0dXJuIGxlbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkVHlwZUVycm9yID0gR2V0SW50cmluc2ljKCclVHlwZUVycm9yJScpO1xudmFyICROdW1iZXIgPSBHZXRJbnRyaW5zaWMoJyVOdW1iZXIlJyk7XG52YXIgJFJlZ0V4cCA9IEdldEludHJpbnNpYygnJVJlZ0V4cCUnKTtcbnZhciAkcGFyc2VJbnRlZ2VyID0gR2V0SW50cmluc2ljKCclcGFyc2VJbnQlJyk7XG5cbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgcmVnZXhUZXN0ZXIgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3JlZ2V4VGVzdGVyJyk7XG52YXIgaXNQcmltaXRpdmUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL2lzUHJpbWl0aXZlJyk7XG5cbnZhciAkc3RyU2xpY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUuc2xpY2UnKTtcbnZhciBpc0JpbmFyeSA9IHJlZ2V4VGVzdGVyKC9eMGJbMDFdKyQvaSk7XG52YXIgaXNPY3RhbCA9IHJlZ2V4VGVzdGVyKC9eMG9bMC03XSskL2kpO1xudmFyIGlzSW52YWxpZEhleExpdGVyYWwgPSByZWdleFRlc3RlcigvXlstK10weFswLTlhLWZdKyQvaSk7XG52YXIgbm9uV1MgPSBbJ1xcdTAwODUnLCAnXFx1MjAwYicsICdcXHVmZmZlJ10uam9pbignJyk7XG52YXIgbm9uV1NyZWdleCA9IG5ldyAkUmVnRXhwKCdbJyArIG5vbldTICsgJ10nLCAnZycpO1xudmFyIGhhc05vbldTID0gcmVnZXhUZXN0ZXIobm9uV1NyZWdleCk7XG5cbi8vIHdoaXRlc3BhY2UgZnJvbTogaHR0cHM6Ly9lczUuZ2l0aHViLmlvLyN4MTUuNS40LjIwXG4vLyBpbXBsZW1lbnRhdGlvbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9ibG9iL3YzLjQuMC9lczUtc2hpbS5qcyNMMTMwNC1MMTMyNFxudmFyIHdzID0gW1xuXHQnXFx4MDlcXHgwQVxceDBCXFx4MENcXHgwRFxceDIwXFx4QTBcXHUxNjgwXFx1MTgwRVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDMnLFxuXHQnXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjgnLFxuXHQnXFx1MjAyOVxcdUZFRkYnXG5dLmpvaW4oJycpO1xudmFyIHRyaW1SZWdleCA9IG5ldyBSZWdFeHAoJyheWycgKyB3cyArICddKyl8KFsnICsgd3MgKyAnXSskKScsICdnJyk7XG52YXIgJHJlcGxhY2UgPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUucmVwbGFjZScpO1xudmFyICR0cmltID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cdHJldHVybiAkcmVwbGFjZSh2YWx1ZSwgdHJpbVJlZ2V4LCAnJyk7XG59O1xuXG52YXIgVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuL1RvUHJpbWl0aXZlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b251bWJlclxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvTnVtYmVyKGFyZ3VtZW50KSB7XG5cdHZhciB2YWx1ZSA9IGlzUHJpbWl0aXZlKGFyZ3VtZW50KSA/IGFyZ3VtZW50IDogVG9QcmltaXRpdmUoYXJndW1lbnQsICROdW1iZXIpO1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3ltYm9sJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCBhIFN5bWJvbCB2YWx1ZSB0byBhIG51bWJlcicpO1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ0NvbnZlcnNpb24gZnJvbSBcXCdCaWdJbnRcXCcgdG8gXFwnbnVtYmVyXFwnIGlzIG5vdCBhbGxvd2VkLicpO1xuXHR9XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0aWYgKGlzQmluYXJ5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIFRvTnVtYmVyKCRwYXJzZUludGVnZXIoJHN0clNsaWNlKHZhbHVlLCAyKSwgMikpO1xuXHRcdH0gZWxzZSBpZiAoaXNPY3RhbCh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiBUb051bWJlcigkcGFyc2VJbnRlZ2VyKCRzdHJTbGljZSh2YWx1ZSwgMiksIDgpKTtcblx0XHR9IGVsc2UgaWYgKGhhc05vbldTKHZhbHVlKSB8fCBpc0ludmFsaWRIZXhMaXRlcmFsKHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIE5hTjtcblx0XHR9XG5cdFx0dmFyIHRyaW1tZWQgPSAkdHJpbSh2YWx1ZSk7XG5cdFx0aWYgKHRyaW1tZWQgIT09IHZhbHVlKSB7XG5cdFx0XHRyZXR1cm4gVG9OdW1iZXIodHJpbW1lZCk7XG5cdFx0fVxuXG5cdH1cblx0cmV0dXJuICROdW1iZXIodmFsdWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRPYmplY3QgPSBHZXRJbnRyaW5zaWMoJyVPYmplY3QlJyk7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b29iamVjdFxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvT2JqZWN0KHZhbHVlKSB7XG5cdFJlcXVpcmVPYmplY3RDb2VyY2libGUodmFsdWUpO1xuXHRyZXR1cm4gJE9iamVjdCh2YWx1ZSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCdlcy10by1wcmltaXRpdmUvZXMyMDE1Jyk7XG5cbi8vIGh0dHBzOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi82LjAvI3NlYy10b3ByaW1pdGl2ZVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdHJldHVybiB0b1ByaW1pdGl2ZShpbnB1dCwgYXJndW1lbnRzWzFdKTtcblx0fVxuXHRyZXR1cm4gdG9QcmltaXRpdmUoaW5wdXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRUeXBlRXJyb3IgPSBHZXRJbnRyaW5zaWMoJyVUeXBlRXJyb3IlJyk7XG5cbi8vIGh0dHA6Ly8yNjIuZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy81LjEvI3NlYy05LjEwXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gQ2hlY2tPYmplY3RDb2VyY2libGUodmFsdWUsIG9wdE1lc3NhZ2UpIHtcblx0aWYgKHZhbHVlID09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcihvcHRNZXNzYWdlIHx8ICgnQ2Fubm90IGNhbGwgbWV0aG9kIG9uICcgKyB2YWx1ZSkpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBhYnMgPSByZXF1aXJlKCcuL2FicycpO1xudmFyIGZsb29yID0gcmVxdWlyZSgnLi9mbG9vcicpO1xudmFyIFRvTnVtYmVyID0gcmVxdWlyZSgnLi9Ub051bWJlcicpO1xuXG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi4vaGVscGVycy9pc05hTicpO1xudmFyICRpc0Zpbml0ZSA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNGaW5pdGUnKTtcbnZhciAkc2lnbiA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvc2lnbicpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS40XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9JbnRlZ2VyKHZhbHVlKSB7XG5cdHZhciBudW1iZXIgPSBUb051bWJlcih2YWx1ZSk7XG5cdGlmICgkaXNOYU4obnVtYmVyKSkgeyByZXR1cm4gMDsgfVxuXHRpZiAobnVtYmVyID09PSAwIHx8ICEkaXNGaW5pdGUobnVtYmVyKSkgeyByZXR1cm4gbnVtYmVyOyB9XG5cdHJldHVybiAkc2lnbihudW1iZXIpICogZmxvb3IoYWJzKG51bWJlcikpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFRvUHJpbWl0aXZlID0gcmVxdWlyZSgnLi9Ub1ByaW1pdGl2ZScpO1xuXG4vLyBodHRwOi8vMjYyLmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvNS4xLyNzZWMtOS4zXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9OdW1iZXIodmFsdWUpIHtcblx0dmFyIHByaW0gPSBUb1ByaW1pdGl2ZSh2YWx1ZSwgTnVtYmVyKTtcblx0aWYgKHR5cGVvZiBwcmltICE9PSAnc3RyaW5nJykge1xuXHRcdHJldHVybiArcHJpbTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxuXHR9XG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblx0dmFyIHRyaW1tZWQgPSBwcmltLnJlcGxhY2UoL15bIFxcdFxceDBiXFxmXFx4YTBcXHVmZWZmXFxuXFxyXFx1MjAyOFxcdTIwMjlcXHUxNjgwXFx1MTgwZVxcdTIwMDBcXHUyMDAxXFx1MjAwMlxcdTIwMDNcXHUyMDA0XFx1MjAwNVxcdTIwMDZcXHUyMDA3XFx1MjAwOFxcdTIwMDlcXHUyMDBhXFx1MjAyZlxcdTIwNWZcXHUzMDAwXFx1MDA4NV0rfFsgXFx0XFx4MGJcXGZcXHhhMFxcdWZlZmZcXG5cXHJcXHUyMDI4XFx1MjAyOVxcdTE2ODBcXHUxODBlXFx1MjAwMFxcdTIwMDFcXHUyMDAyXFx1MjAwM1xcdTIwMDRcXHUyMDA1XFx1MjAwNlxcdTIwMDdcXHUyMDA4XFx1MjAwOVxcdTIwMGFcXHUyMDJmXFx1MjA1ZlxcdTMwMDBcXHUwMDg1XSskL2csICcnKTtcblx0aWYgKCgvXjBbb2JdfF5bKy1dMHgvKS50ZXN0KHRyaW1tZWQpKSB7XG5cdFx0cmV0dXJuIE5hTjtcblx0fVxuXG5cdHJldHVybiArdHJpbW1lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1pbXBsaWNpdC1jb2VyY2lvblxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTkuMVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJ2VzLXRvLXByaW1pdGl2ZS9lczUnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRhYnMgPSBHZXRJbnRyaW5zaWMoJyVNYXRoLmFicyUnKTtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTUuMlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFicyh4KSB7XG5cdHJldHVybiAkYWJzKHgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gdmFyIG1vZHVsbyA9IHJlcXVpcmUoJy4vbW9kdWxvJyk7XG52YXIgJGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gaHR0cDovLzI2Mi5lY21hLWludGVybmF0aW9uYWwub3JnLzUuMS8jc2VjLTUuMlxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZsb29yKHgpIHtcblx0Ly8gcmV0dXJuIHggLSBtb2R1bG8oeCwgMSk7XG5cdHJldHVybiAkZmxvb3IoeCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIChhKSB7IHJldHVybiBhICE9PSBhOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdudW1iZXInICYmICEkaXNOYU4oeCkgJiYgeCAhPT0gSW5maW5pdHkgJiYgeCAhPT0gLUluZmluaXR5OyB9O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiBpc05hTihhKSB7XG5cdHJldHVybiBhICE9PSBhO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkTWF0aCA9IEdldEludHJpbnNpYygnJU1hdGglJyk7XG52YXIgJE51bWJlciA9IEdldEludHJpbnNpYygnJU51bWJlciUnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAkTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIgfHwgJE1hdGgucG93KDIsIDUzKSAtIDE7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkdGVzdCA9IEdldEludHJpbnNpYygnUmVnRXhwLnByb3RvdHlwZS50ZXN0Jyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJ2NhbGwtYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHJlZ2V4VGVzdGVyKHJlZ2V4KSB7XG5cdHJldHVybiBjYWxsQmluZCgkdGVzdCwgcmVnZXgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaWduKG51bWJlcikge1xuXHRyZXR1cm4gbnVtYmVyID49IDAgPyAxIDogLTE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCc7XG5cbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1ByaW1pdGl2ZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCdpcy1jYWxsYWJsZScpO1xudmFyIGlzRGF0ZSA9IHJlcXVpcmUoJ2lzLWRhdGUtb2JqZWN0Jyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCdpcy1zeW1ib2wnKTtcblxudmFyIG9yZGluYXJ5VG9QcmltaXRpdmUgPSBmdW5jdGlvbiBPcmRpbmFyeVRvUHJpbWl0aXZlKE8sIGhpbnQpIHtcblx0aWYgKHR5cGVvZiBPID09PSAndW5kZWZpbmVkJyB8fCBPID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGwgbWV0aG9kIG9uICcgKyBPKTtcblx0fVxuXHRpZiAodHlwZW9mIGhpbnQgIT09ICdzdHJpbmcnIHx8IChoaW50ICE9PSAnbnVtYmVyJyAmJiBoaW50ICE9PSAnc3RyaW5nJykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdoaW50IG11c3QgYmUgXCJzdHJpbmdcIiBvciBcIm51bWJlclwiJyk7XG5cdH1cblx0dmFyIG1ldGhvZE5hbWVzID0gaGludCA9PT0gJ3N0cmluZycgPyBbJ3RvU3RyaW5nJywgJ3ZhbHVlT2YnXSA6IFsndmFsdWVPZicsICd0b1N0cmluZyddO1xuXHR2YXIgbWV0aG9kLCByZXN1bHQsIGk7XG5cdGZvciAoaSA9IDA7IGkgPCBtZXRob2ROYW1lcy5sZW5ndGg7ICsraSkge1xuXHRcdG1ldGhvZCA9IE9bbWV0aG9kTmFtZXNbaV1dO1xuXHRcdGlmIChpc0NhbGxhYmxlKG1ldGhvZCkpIHtcblx0XHRcdHJlc3VsdCA9IG1ldGhvZC5jYWxsKE8pO1xuXHRcdFx0aWYgKGlzUHJpbWl0aXZlKHJlc3VsdCkpIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0dGhyb3cgbmV3IFR5cGVFcnJvcignTm8gZGVmYXVsdCB2YWx1ZScpO1xufTtcblxudmFyIEdldE1ldGhvZCA9IGZ1bmN0aW9uIEdldE1ldGhvZChPLCBQKSB7XG5cdHZhciBmdW5jID0gT1tQXTtcblx0aWYgKGZ1bmMgIT09IG51bGwgJiYgdHlwZW9mIGZ1bmMgIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0aWYgKCFpc0NhbGxhYmxlKGZ1bmMpKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKGZ1bmMgKyAnIHJldHVybmVkIGZvciBwcm9wZXJ0eSAnICsgUCArICcgb2Ygb2JqZWN0ICcgKyBPICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHRcdH1cblx0XHRyZXR1cm4gZnVuYztcblx0fVxuXHRyZXR1cm4gdm9pZCAwO1xufTtcblxuLy8gaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIFRvUHJpbWl0aXZlKGlucHV0KSB7XG5cdGlmIChpc1ByaW1pdGl2ZShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQ7XG5cdH1cblx0dmFyIGhpbnQgPSAnZGVmYXVsdCc7XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuXHRcdGlmIChhcmd1bWVudHNbMV0gPT09IFN0cmluZykge1xuXHRcdFx0aGludCA9ICdzdHJpbmcnO1xuXHRcdH0gZWxzZSBpZiAoYXJndW1lbnRzWzFdID09PSBOdW1iZXIpIHtcblx0XHRcdGhpbnQgPSAnbnVtYmVyJztcblx0XHR9XG5cdH1cblxuXHR2YXIgZXhvdGljVG9QcmltO1xuXHRpZiAoaGFzU3ltYm9scykge1xuXHRcdGlmIChTeW1ib2wudG9QcmltaXRpdmUpIHtcblx0XHRcdGV4b3RpY1RvUHJpbSA9IEdldE1ldGhvZChpbnB1dCwgU3ltYm9sLnRvUHJpbWl0aXZlKTtcblx0XHR9IGVsc2UgaWYgKGlzU3ltYm9sKGlucHV0KSkge1xuXHRcdFx0ZXhvdGljVG9QcmltID0gU3ltYm9sLnByb3RvdHlwZS52YWx1ZU9mO1xuXHRcdH1cblx0fVxuXHRpZiAodHlwZW9mIGV4b3RpY1RvUHJpbSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0XHR2YXIgcmVzdWx0ID0gZXhvdGljVG9QcmltLmNhbGwoaW5wdXQsIGhpbnQpO1xuXHRcdGlmIChpc1ByaW1pdGl2ZShyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmFibGUgdG8gY29udmVydCBleG90aWMgb2JqZWN0IHRvIHByaW1pdGl2ZScpO1xuXHR9XG5cdGlmIChoaW50ID09PSAnZGVmYXVsdCcgJiYgKGlzRGF0ZShpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSkge1xuXHRcdGhpbnQgPSAnc3RyaW5nJztcblx0fVxuXHRyZXR1cm4gb3JkaW5hcnlUb1ByaW1pdGl2ZShpbnB1dCwgaGludCA9PT0gJ2RlZmF1bHQnID8gJ251bWJlcicgOiBoaW50KTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbnZhciBpc1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1ByaW1pdGl2ZScpO1xuXG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJ2lzLWNhbGxhYmxlJyk7XG5cbi8vIGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzUuMS8jc2VjLTguMTIuOFxudmFyIEVTNWludGVybmFsU2xvdHMgPSB7XG5cdCdbW0RlZmF1bHRWYWx1ZV1dJzogZnVuY3Rpb24gKE8pIHtcblx0XHR2YXIgYWN0dWFsSGludDtcblx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGFjdHVhbEhpbnQgPSBhcmd1bWVudHNbMV07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGFjdHVhbEhpbnQgPSB0b1N0ci5jYWxsKE8pID09PSAnW29iamVjdCBEYXRlXScgPyBTdHJpbmcgOiBOdW1iZXI7XG5cdFx0fVxuXG5cdFx0aWYgKGFjdHVhbEhpbnQgPT09IFN0cmluZyB8fCBhY3R1YWxIaW50ID09PSBOdW1iZXIpIHtcblx0XHRcdHZhciBtZXRob2RzID0gYWN0dWFsSGludCA9PT0gU3RyaW5nID8gWyd0b1N0cmluZycsICd2YWx1ZU9mJ10gOiBbJ3ZhbHVlT2YnLCAndG9TdHJpbmcnXTtcblx0XHRcdHZhciB2YWx1ZSwgaTtcblx0XHRcdGZvciAoaSA9IDA7IGkgPCBtZXRob2RzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRcdGlmIChpc0NhbGxhYmxlKE9bbWV0aG9kc1tpXV0pKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBPW21ldGhvZHNbaV1dKCk7XG5cdFx0XHRcdFx0aWYgKGlzUHJpbWl0aXZlKHZhbHVlKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignTm8gZGVmYXVsdCB2YWx1ZScpO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIFtbRGVmYXVsdFZhbHVlXV0gaGludCBzdXBwbGllZCcpO1xuXHR9XG59O1xuXG4vLyBodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi81LjEvI3NlYy05LjFcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gVG9QcmltaXRpdmUoaW5wdXQpIHtcblx0aWYgKGlzUHJpbWl0aXZlKGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dDtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gRVM1aW50ZXJuYWxTbG90c1snW1tEZWZhdWx0VmFsdWVdXSddKGlucHV0LCBhcmd1bWVudHNbMV0pO1xuXHR9XG5cdHJldHVybiBFUzVpbnRlcm5hbFNsb3RzWydbW0RlZmF1bHRWYWx1ZV1dJ10oaW5wdXQpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBuby1pbnZhbGlkLXRoaXM6IDEgKi9cblxudmFyIEVSUk9SX01FU1NBR0UgPSAnRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgY2FsbGVkIG9uIGluY29tcGF0aWJsZSAnO1xudmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBmdW5jVHlwZSA9ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuY2FsbCh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICAgIHZhciBib3VuZDtcbiAgICB2YXIgYmluZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcyBpbnN0YW5jZW9mIGJvdW5kKSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChPYmplY3QocmVzdWx0KSA9PT0gcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGF0LFxuICAgICAgICAgICAgICAgIGFyZ3MuY29uY2F0KHNsaWNlLmNhbGwoYXJndW1lbnRzKSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gTWF0aC5tYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJncy5wdXNoKCckJyArIGkpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBib3VuZEFyZ3Muam9pbignLCcpICsgJyl7IHJldHVybiBiaW5kZXIuYXBwbHkodGhpcyxhcmd1bWVudHMpOyB9JykoYmluZGVyKTtcblxuICAgIGlmICh0YXJnZXQucHJvdG90eXBlKSB7XG4gICAgICAgIHZhciBFbXB0eSA9IGZ1bmN0aW9uIEVtcHR5KCkge307XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IHRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGJvdW5kLnByb3RvdHlwZSA9IG5ldyBFbXB0eSgpO1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBib3VuZDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIElzQ2FsbGFibGUgPSByZXF1aXJlKCdlcy1hYnN0cmFjdC8yMDIxL0lzQ2FsbGFibGUnKTtcbnZhciBmdW5jdGlvbnNIYXZlTmFtZXMgPSByZXF1aXJlKCdmdW5jdGlvbnMtaGF2ZS1uYW1lcycpKCk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xudmFyICRmdW5jdGlvblRvU3RyaW5nID0gY2FsbEJvdW5kKCdGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcnKTtcbnZhciAkc3RyaW5nTWF0Y2ggPSBjYWxsQm91bmQoJ1N0cmluZy5wcm90b3R5cGUubWF0Y2gnKTtcblxudmFyIGNsYXNzUmVnZXggPSAvXmNsYXNzIC87XG5cbnZhciBpc0NsYXNzID0gZnVuY3Rpb24gaXNDbGFzc0NvbnN0cnVjdG9yKGZuKSB7XG5cdGlmIChJc0NhbGxhYmxlKGZuKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHRpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHRyeSB7XG5cdFx0dmFyIG1hdGNoID0gJHN0cmluZ01hdGNoKCRmdW5jdGlvblRvU3RyaW5nKGZuKSwgY2xhc3NSZWdleCk7XG5cdFx0cmV0dXJuICEhbWF0Y2g7XG5cdH0gY2F0Y2ggKGUpIHt9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbnZhciByZWdleCA9IC9cXHMqZnVuY3Rpb25cXHMrKFteKFxcc10qKVxccyovO1xuXG52YXIgZnVuY3Rpb25Qcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXROYW1lKCkge1xuXHRpZiAoIWlzQ2xhc3ModGhpcykgJiYgIUlzQ2FsbGFibGUodGhpcykpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbi5wcm90b3R5cGUubmFtZSBzaGFtIGdldHRlciBjYWxsZWQgb24gbm9uLWZ1bmN0aW9uJyk7XG5cdH1cblx0aWYgKGZ1bmN0aW9uc0hhdmVOYW1lcykge1xuXHRcdHJldHVybiB0aGlzLm5hbWU7XG5cdH1cblx0aWYgKHRoaXMgPT09IGZ1bmN0aW9uUHJvdG8pIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0dmFyIHN0ciA9ICRmdW5jdGlvblRvU3RyaW5nKHRoaXMpO1xuXHR2YXIgbWF0Y2ggPSAkc3RyaW5nTWF0Y2goc3RyLCByZWdleCk7XG5cdHZhciBuYW1lID0gbWF0Y2ggJiYgbWF0Y2hbMV07XG5cdHJldHVybiBuYW1lO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIGJvdW5kID0gY2FsbEJpbmQoaW1wbGVtZW50YXRpb24pO1xuXG5kZWZpbmUoYm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2V0UG9seWZpbGwoKSB7XG5cdHJldHVybiBpbXBsZW1lbnRhdGlvbjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdXBwb3J0c0Rlc2NyaXB0b3JzID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKS5zdXBwb3J0c0Rlc2NyaXB0b3JzO1xudmFyIGZ1bmN0aW9uc0hhdmVOYW1lcyA9IHJlcXVpcmUoJ2Z1bmN0aW9ucy1oYXZlLW5hbWVzJykoKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBUeXBlRXJyID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNoaW1OYW1lKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRpZiAoZnVuY3Rpb25zSGF2ZU5hbWVzKSB7XG5cdFx0cmV0dXJuIHBvbHlmaWxsO1xuXHR9XG5cdGlmICghc3VwcG9ydHNEZXNjcmlwdG9ycykge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyKCdTaGltbWluZyBGdW5jdGlvbi5wcm90b3R5cGUubmFtZSBzdXBwb3J0IHJlcXVpcmVzIEVTNSBwcm9wZXJ0eSBkZXNjcmlwdG9yIHN1cHBvcnQuJyk7XG5cdH1cblx0dmFyIGZ1bmN0aW9uUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cdGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uUHJvdG8sICduYW1lJywge1xuXHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciBuYW1lID0gcG9seWZpbGwuY2FsbCh0aGlzKTtcblx0XHRcdGlmICh0aGlzICE9PSBmdW5jdGlvblByb3RvKSB7XG5cdFx0XHRcdGRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHR2YWx1ZTogbmFtZSxcblx0XHRcdFx0XHR3cml0YWJsZTogZmFsc2Vcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZnVuY3Rpb25zSGF2ZU5hbWVzID0gZnVuY3Rpb24gZnVuY3Rpb25zSGF2ZU5hbWVzKCkge1xuXHRyZXR1cm4gdHlwZW9mIGZ1bmN0aW9uIGYoKSB7fS5uYW1lID09PSAnc3RyaW5nJztcbn07XG5cbnZhciBnT1BEID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcbmlmIChnT1BEKSB7XG5cdHRyeSB7XG5cdFx0Z09QRChbXSwgJ2xlbmd0aCcpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSUUgOCBoYXMgYSBicm9rZW4gZ09QRFxuXHRcdGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbmZ1bmN0aW9uc0hhdmVOYW1lcy5mdW5jdGlvbnNIYXZlQ29uZmlndXJhYmxlTmFtZXMgPSBmdW5jdGlvbiBmdW5jdGlvbnNIYXZlQ29uZmlndXJhYmxlTmFtZXMoKSB7XG5cdHJldHVybiBmdW5jdGlvbnNIYXZlTmFtZXMoKSAmJiBnT1BEICYmICEhZ09QRChmdW5jdGlvbiAoKSB7fSwgJ25hbWUnKS5jb25maWd1cmFibGU7XG59O1xuXG52YXIgJGJpbmQgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcblxuZnVuY3Rpb25zSGF2ZU5hbWVzLmJvdW5kRnVuY3Rpb25zSGF2ZU5hbWVzID0gZnVuY3Rpb24gYm91bmRGdW5jdGlvbnNIYXZlTmFtZXMoKSB7XG5cdHJldHVybiBmdW5jdGlvbnNIYXZlTmFtZXMoKSAmJiB0eXBlb2YgJGJpbmQgPT09ICdmdW5jdGlvbicgJiYgZnVuY3Rpb24gZigpIHt9LmJpbmQoKS5uYW1lICE9PSAnJztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb25zSGF2ZU5hbWVzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJFN5bnRheEVycm9yID0gU3ludGF4RXJyb3I7XG52YXIgJEZ1bmN0aW9uID0gRnVuY3Rpb247XG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuaWYgKCRnT1BEKSB7XG5cdHRyeSB7XG5cdFx0JGdPUEQoe30sICcnKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdCRnT1BEID0gbnVsbDsgLy8gdGhpcyBpcyBJRSA4LCB3aGljaCBoYXMgYSBicm9rZW4gZ09QRFxuXHR9XG59XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8oVWludDhBcnJheSk7XG5cbnZhciBJTlRSSU5TSUNTID0ge1xuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogRXZhbEVycm9yLFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgTWFwKClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVNYXRoJSc6IE1hdGgsXG5cdCclTnVtYmVyJSc6IE51bWJlcixcblx0JyVPYmplY3QlJzogT2JqZWN0LFxuXHQnJXBhcnNlRmxvYXQlJzogcGFyc2VGbG9hdCxcblx0JyVwYXJzZUludCUnOiBwYXJzZUludCxcblx0JyVQcm9taXNlJSc6IHR5cGVvZiBQcm9taXNlID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb21pc2UsXG5cdCclUHJveHklJzogdHlwZW9mIFByb3h5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFByb3h5LFxuXHQnJVJhbmdlRXJyb3IlJzogUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiBSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgPyB1bmRlZmluZWQgOiBnZXRQcm90byhuZXcgU2V0KClbU3ltYm9sLml0ZXJhdG9yXSgpKSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlciUnOiB0eXBlb2YgU2hhcmVkQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2hhcmVkQXJyYXlCdWZmZXIsXG5cdCclU3RyaW5nJSc6IFN0cmluZyxcblx0JyVTdHJpbmdJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzID8gZ2V0UHJvdG8oJydbU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVTeW1ib2wlJzogaGFzU3ltYm9scyA/IFN5bWJvbCA6IHVuZGVmaW5lZCxcblx0JyVTeW50YXhFcnJvciUnOiAkU3ludGF4RXJyb3IsXG5cdCclVGhyb3dUeXBlRXJyb3IlJzogVGhyb3dUeXBlRXJyb3IsXG5cdCclVHlwZWRBcnJheSUnOiBUeXBlZEFycmF5LFxuXHQnJVR5cGVFcnJvciUnOiAkVHlwZUVycm9yLFxuXHQnJVVpbnQ4QXJyYXklJzogdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhBcnJheSxcblx0JyVVaW50OENsYW1wZWRBcnJheSUnOiB0eXBlb2YgVWludDhDbGFtcGVkQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDhDbGFtcGVkQXJyYXksXG5cdCclVWludDE2QXJyYXklJzogdHlwZW9mIFVpbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQxNkFycmF5LFxuXHQnJVVpbnQzMkFycmF5JSc6IHR5cGVvZiBVaW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MzJBcnJheSxcblx0JyVVUklFcnJvciUnOiBVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbikge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHQnJUFycmF5QnVmZmVyUHJvdG90eXBlJSc6IFsnQXJyYXlCdWZmZXInLCAncHJvdG90eXBlJ10sXG5cdCclQXJyYXlQcm90b3R5cGUlJzogWydBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvX2VudHJpZXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAnZW50cmllcyddLFxuXHQnJUFycmF5UHJvdG9fZm9yRWFjaCUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdmb3JFYWNoJ10sXG5cdCclQXJyYXlQcm90b19rZXlzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2tleXMnXSxcblx0JyVBcnJheVByb3RvX3ZhbHVlcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICd2YWx1ZXMnXSxcblx0JyVBc3luY0Z1bmN0aW9uUHJvdG90eXBlJSc6IFsnQXN5bmNGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJ10sXG5cdCclQXN5bmNHZW5lcmF0b3JQcm90b3R5cGUlJzogWydBc3luY0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVCb29sZWFuUHJvdG90eXBlJSc6IFsnQm9vbGVhbicsICdwcm90b3R5cGUnXSxcblx0JyVEYXRhVmlld1Byb3RvdHlwZSUnOiBbJ0RhdGFWaWV3JywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGVQcm90b3R5cGUlJzogWydEYXRlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUVycm9yUHJvdG90eXBlJSc6IFsnRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRXZhbEVycm9yUHJvdG90eXBlJSc6IFsnRXZhbEVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0MzJBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0MzJBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGbG9hdDY0QXJyYXlQcm90b3R5cGUlJzogWydGbG9hdDY0QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclRnVuY3Rpb25Qcm90b3R5cGUlJzogWydGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3IlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVHZW5lcmF0b3JQcm90b3R5cGUlJzogWydHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnLCAncHJvdG90eXBlJ10sXG5cdCclSW50OEFycmF5UHJvdG90eXBlJSc6IFsnSW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDE2QXJyYXlQcm90b3R5cGUlJzogWydJbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUludDMyQXJyYXlQcm90b3R5cGUlJzogWydJbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUpTT05QYXJzZSUnOiBbJ0pTT04nLCAncGFyc2UnXSxcblx0JyVKU09OU3RyaW5naWZ5JSc6IFsnSlNPTicsICdzdHJpbmdpZnknXSxcblx0JyVNYXBQcm90b3R5cGUlJzogWydNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclTnVtYmVyUHJvdG90eXBlJSc6IFsnTnVtYmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJU9iamVjdFByb3RvdHlwZSUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnXSxcblx0JyVPYmpQcm90b190b1N0cmluZyUnOiBbJ09iamVjdCcsICdwcm90b3R5cGUnLCAndG9TdHJpbmcnXSxcblx0JyVPYmpQcm90b192YWx1ZU9mJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd2YWx1ZU9mJ10sXG5cdCclUHJvbWlzZVByb3RvdHlwZSUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJ10sXG5cdCclUHJvbWlzZVByb3RvX3RoZW4lJzogWydQcm9taXNlJywgJ3Byb3RvdHlwZScsICd0aGVuJ10sXG5cdCclUHJvbWlzZV9hbGwlJzogWydQcm9taXNlJywgJ2FsbCddLFxuXHQnJVByb21pc2VfcmVqZWN0JSc6IFsnUHJvbWlzZScsICdyZWplY3QnXSxcblx0JyVQcm9taXNlX3Jlc29sdmUlJzogWydQcm9taXNlJywgJ3Jlc29sdmUnXSxcblx0JyVSYW5nZUVycm9yUHJvdG90eXBlJSc6IFsnUmFuZ2VFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVSZWZlcmVuY2VFcnJvclByb3RvdHlwZSUnOiBbJ1JlZmVyZW5jZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZ0V4cFByb3RvdHlwZSUnOiBbJ1JlZ0V4cCcsICdwcm90b3R5cGUnXSxcblx0JyVTZXRQcm90b3R5cGUlJzogWydTZXQnLCAncHJvdG90eXBlJ10sXG5cdCclU2hhcmVkQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydTaGFyZWRBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVTdHJpbmdQcm90b3R5cGUlJzogWydTdHJpbmcnLCAncHJvdG90eXBlJ10sXG5cdCclU3ltYm9sUHJvdG90eXBlJSc6IFsnU3ltYm9sJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN5bnRheEVycm9yUHJvdG90eXBlJSc6IFsnU3ludGF4RXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZWRBcnJheVByb3RvdHlwZSUnOiBbJ1R5cGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVHlwZUVycm9yUHJvdG90eXBlJSc6IFsnVHlwZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4QXJyYXlQcm90b3R5cGUlJzogWydVaW50OEFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVWludDhDbGFtcGVkQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDE2QXJyYXlQcm90b3R5cGUlJzogWydVaW50MTZBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVSSUVycm9yUHJvdG90eXBlJSc6IFsnVVJJRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha01hcFByb3RvdHlwZSUnOiBbJ1dlYWtNYXAnLCAncHJvdG90eXBlJ10sXG5cdCclV2Vha1NldFByb3RvdHlwZSUnOiBbJ1dlYWtTZXQnLCAncHJvdG90eXBlJ11cbn07XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJ2hhcycpO1xudmFyICRjb25jYXQgPSBiaW5kLmNhbGwoRnVuY3Rpb24uY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKEZ1bmN0aW9uLmFwcGx5LCBBcnJheS5wcm90b3R5cGUuc3BsaWNlKTtcbnZhciAkcmVwbGFjZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2UpO1xudmFyICRzdHJTbGljZSA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHR2YXIgcGFydHMgPSBzdHJpbmdUb1BhdGgobmFtZSk7XG5cdHZhciBpbnRyaW5zaWNCYXNlTmFtZSA9IHBhcnRzLmxlbmd0aCA+IDAgPyBwYXJ0c1swXSA6ICcnO1xuXG5cdHZhciBpbnRyaW5zaWMgPSBnZXRCYXNlSW50cmluc2ljKCclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnLCBhbGxvd01pc3NpbmcpO1xuXHR2YXIgaW50cmluc2ljUmVhbE5hbWUgPSBpbnRyaW5zaWMubmFtZTtcblx0dmFyIHZhbHVlID0gaW50cmluc2ljLnZhbHVlO1xuXHR2YXIgc2tpcEZ1cnRoZXJDYWNoaW5nID0gZmFsc2U7XG5cblx0dmFyIGFsaWFzID0gaW50cmluc2ljLmFsaWFzO1xuXHRpZiAoYWxpYXMpIHtcblx0XHRpbnRyaW5zaWNCYXNlTmFtZSA9IGFsaWFzWzBdO1xuXHRcdCRzcGxpY2VBcHBseShwYXJ0cywgJGNvbmNhdChbMCwgMV0sIGFsaWFzKSk7XG5cdH1cblxuXHRmb3IgKHZhciBpID0gMSwgaXNPd24gPSB0cnVlOyBpIDwgcGFydHMubGVuZ3RoOyBpICs9IDEpIHtcblx0XHR2YXIgcGFydCA9IHBhcnRzW2ldO1xuXHRcdHZhciBmaXJzdCA9ICRzdHJTbGljZShwYXJ0LCAwLCAxKTtcblx0XHR2YXIgbGFzdCA9ICRzdHJTbGljZShwYXJ0LCAtMSk7XG5cdFx0aWYgKFxuXHRcdFx0KFxuXHRcdFx0XHQoZmlyc3QgPT09ICdcIicgfHwgZmlyc3QgPT09IFwiJ1wiIHx8IGZpcnN0ID09PSAnYCcpXG5cdFx0XHRcdHx8IChsYXN0ID09PSAnXCInIHx8IGxhc3QgPT09IFwiJ1wiIHx8IGxhc3QgPT09ICdgJylcblx0XHRcdClcblx0XHRcdCYmIGZpcnN0ICE9PSBsYXN0XG5cdFx0KSB7XG5cdFx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdwcm9wZXJ0eSBuYW1lcyB3aXRoIHF1b3RlcyBtdXN0IGhhdmUgbWF0Y2hpbmcgcXVvdGVzJyk7XG5cdFx0fVxuXHRcdGlmIChwYXJ0ID09PSAnY29uc3RydWN0b3InIHx8ICFpc093bikge1xuXHRcdFx0c2tpcEZ1cnRoZXJDYWNoaW5nID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpbnRyaW5zaWNCYXNlTmFtZSArPSAnLicgKyBwYXJ0O1xuXHRcdGludHJpbnNpY1JlYWxOYW1lID0gJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJSc7XG5cblx0XHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY1JlYWxOYW1lKSkge1xuXHRcdFx0dmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXTtcblx0XHR9IGVsc2UgaWYgKHZhbHVlICE9IG51bGwpIHtcblx0XHRcdGlmICghKHBhcnQgaW4gdmFsdWUpKSB7XG5cdFx0XHRcdGlmICghYWxsb3dNaXNzaW5nKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Jhc2UgaW50cmluc2ljIGZvciAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgdGhlIHByb3BlcnR5IGlzIG5vdCBhdmFpbGFibGUuJyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZvaWQgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCRnT1BEICYmIChpICsgMSkgPj0gcGFydHMubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBkZXNjID0gJGdPUEQodmFsdWUsIHBhcnQpO1xuXHRcdFx0XHRpc093biA9ICEhZGVzYztcblxuXHRcdFx0XHQvLyBCeSBjb252ZW50aW9uLCB3aGVuIGEgZGF0YSBwcm9wZXJ0eSBpcyBjb252ZXJ0ZWQgdG8gYW4gYWNjZXNzb3Jcblx0XHRcdFx0Ly8gcHJvcGVydHkgdG8gZW11bGF0ZSBhIGRhdGEgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBzdWZmZXIgZnJvbVxuXHRcdFx0XHQvLyB0aGUgb3ZlcnJpZGUgbWlzdGFrZSwgdGhhdCBhY2Nlc3NvcidzIGdldHRlciBpcyBtYXJrZWQgd2l0aFxuXHRcdFx0XHQvLyBhbiBgb3JpZ2luYWxWYWx1ZWAgcHJvcGVydHkuIEhlcmUsIHdoZW4gd2UgZGV0ZWN0IHRoaXMsIHdlXG5cdFx0XHRcdC8vIHVwaG9sZCB0aGUgaWxsdXNpb24gYnkgcHJldGVuZGluZyB0byBzZWUgdGhhdCBvcmlnaW5hbCBkYXRhXG5cdFx0XHRcdC8vIHByb3BlcnR5LCBpLmUuLCByZXR1cm5pbmcgdGhlIHZhbHVlIHJhdGhlciB0aGFuIHRoZSBnZXR0ZXJcblx0XHRcdFx0Ly8gaXRzZWxmLlxuXHRcdFx0XHRpZiAoaXNPd24gJiYgJ2dldCcgaW4gZGVzYyAmJiAhKCdvcmlnaW5hbFZhbHVlJyBpbiBkZXNjLmdldCkpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IGRlc2MuZ2V0O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlzT3duID0gaGFzT3duKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGlzT3duICYmICFza2lwRnVydGhlckNhY2hpbmcpIHtcblx0XHRcdFx0SU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV0gPSB2YWx1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHZhbHVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHR2YXIgb2JqID0ge307XG5cdHZhciBzeW0gPSBTeW1ib2woJ3Rlc3QnKTtcblx0dmFyIHN5bU9iaiA9IE9iamVjdChzeW0pO1xuXHRpZiAodHlwZW9mIHN5bSA9PT0gJ3N0cmluZycpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW0pICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChzeW1PYmopICE9PSAnW29iamVjdCBTeW1ib2xdJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vbGpoYXJiL29iamVjdC5hc3NpZ24vaXNzdWVzLzE3XG5cdC8vIGlmIChzeW0gaW5zdGFuY2VvZiBTeW1ib2wpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIHRlbXAgZGlzYWJsZWQgcGVyIGh0dHBzOi8vZ2l0aHViLmNvbS9XZWJSZWZsZWN0aW9uL2dldC1vd24tcHJvcGVydHktc3ltYm9scy9pc3N1ZXMvNFxuXHQvLyBpZiAoIShzeW1PYmogaW5zdGFuY2VvZiBTeW1ib2wpKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdC8vIGlmICh0eXBlb2YgU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0Ly8gaWYgKFN0cmluZyhzeW0pICE9PSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltVmFsID0gNDI7XG5cdG9ialtzeW1dID0gc3ltVmFsO1xuXHRmb3IgKHN5bSBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHR2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pO1xuXHRcdGlmIChkZXNjcmlwdG9yLnZhbHVlICE9PSBzeW1WYWwgfHwgZGVzY3JpcHRvci5lbnVtZXJhYmxlICE9PSB0cnVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHR9XG5cblx0cmV0dXJuIHRydWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaGFzVG9TdHJpbmdUYWdTaGFtcygpIHtcblx0cmV0dXJuIGhhc1N5bWJvbHMoKSAmJiAhIVN5bWJvbC50b1N0cmluZ1RhZztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGZuVG9TdHIgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgcmVmbGVjdEFwcGx5ID0gdHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QgIT09IG51bGwgJiYgUmVmbGVjdC5hcHBseTtcbnZhciBiYWRBcnJheUxpa2U7XG52YXIgaXNDYWxsYWJsZU1hcmtlcjtcbmlmICh0eXBlb2YgcmVmbGVjdEFwcGx5ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBPYmplY3QuZGVmaW5lUHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcblx0dHJ5IHtcblx0XHRiYWRBcnJheUxpa2UgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdsZW5ndGgnLCB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dGhyb3cgaXNDYWxsYWJsZU1hcmtlcjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpc0NhbGxhYmxlTWFya2VyID0ge307XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXRocm93LWxpdGVyYWxcblx0XHRyZWZsZWN0QXBwbHkoZnVuY3Rpb24gKCkgeyB0aHJvdyA0MjsgfSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0fSBjYXRjaCAoXykge1xuXHRcdGlmIChfICE9PSBpc0NhbGxhYmxlTWFya2VyKSB7XG5cdFx0XHRyZWZsZWN0QXBwbHkgPSBudWxsO1xuXHRcdH1cblx0fVxufSBlbHNlIHtcblx0cmVmbGVjdEFwcGx5ID0gbnVsbDtcbn1cblxudmFyIGNvbnN0cnVjdG9yUmVnZXggPSAvXlxccypjbGFzc1xcYi87XG52YXIgaXNFUzZDbGFzc0ZuID0gZnVuY3Rpb24gaXNFUzZDbGFzc0Z1bmN0aW9uKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0dmFyIGZuU3RyID0gZm5Ub1N0ci5jYWxsKHZhbHVlKTtcblx0XHRyZXR1cm4gY29uc3RydWN0b3JSZWdleC50ZXN0KGZuU3RyKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gbm90IGEgZnVuY3Rpb25cblx0fVxufTtcblxudmFyIHRyeUZ1bmN0aW9uT2JqZWN0ID0gZnVuY3Rpb24gdHJ5RnVuY3Rpb25Ub1N0cih2YWx1ZSkge1xuXHR0cnkge1xuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGZuVG9TdHIuY2FsbCh2YWx1ZSk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn07XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZuQ2xhc3MgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xudmFyIGdlbkNsYXNzID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7IC8vIGJldHRlcjogdXNlIGBoYXMtdG9zdHJpbmd0YWdgXG4vKiBnbG9iYWxzIGRvY3VtZW50OiBmYWxzZSAqL1xudmFyIGRvY3VtZW50RG90QWxsID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgZG9jdW1lbnQuYWxsID09PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5hbGwgIT09IHVuZGVmaW5lZCA/IGRvY3VtZW50LmFsbCA6IHt9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlZmxlY3RBcHBseVxuXHQ/IGZ1bmN0aW9uIGlzQ2FsbGFibGUodmFsdWUpIHtcblx0XHRpZiAodmFsdWUgPT09IGRvY3VtZW50RG90QWxsKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0aWYgKCF2YWx1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdmFsdWUucHJvdG90eXBlKSB7IHJldHVybiB0cnVlOyB9XG5cdFx0dHJ5IHtcblx0XHRcdHJlZmxlY3RBcHBseSh2YWx1ZSwgbnVsbCwgYmFkQXJyYXlMaWtlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRpZiAoZSAhPT0gaXNDYWxsYWJsZU1hcmtlcikgeyByZXR1cm4gZmFsc2U7IH1cblx0XHR9XG5cdFx0cmV0dXJuICFpc0VTNkNsYXNzRm4odmFsdWUpO1xuXHR9XG5cdDogZnVuY3Rpb24gaXNDYWxsYWJsZSh2YWx1ZSkge1xuXHRcdGlmICh2YWx1ZSA9PT0gZG9jdW1lbnREb3RBbGwpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoIXZhbHVlKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmICF2YWx1ZS5wcm90b3R5cGUpIHsgcmV0dXJuIHRydWU7IH1cblx0XHRpZiAoaGFzVG9TdHJpbmdUYWcpIHsgcmV0dXJuIHRyeUZ1bmN0aW9uT2JqZWN0KHZhbHVlKTsgfVxuXHRcdGlmIChpc0VTNkNsYXNzRm4odmFsdWUpKSB7IHJldHVybiBmYWxzZTsgfVxuXHRcdHZhciBzdHJDbGFzcyA9IHRvU3RyLmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiBzdHJDbGFzcyA9PT0gZm5DbGFzcyB8fCBzdHJDbGFzcyA9PT0gZ2VuQ2xhc3M7XG5cdH07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBnZXREYXkgPSBEYXRlLnByb3RvdHlwZS5nZXREYXk7XG52YXIgdHJ5RGF0ZU9iamVjdCA9IGZ1bmN0aW9uIHRyeURhdGVHZXREYXlDYWxsKHZhbHVlKSB7XG5cdHRyeSB7XG5cdFx0Z2V0RGF5LmNhbGwodmFsdWUpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGRhdGVDbGFzcyA9ICdbb2JqZWN0IERhdGVdJztcbnZhciBoYXNUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2hhcy10b3N0cmluZ3RhZy9zaGFtcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNEYXRlT2JqZWN0KHZhbHVlKSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHJldHVybiBoYXNUb1N0cmluZ1RhZyA/IHRyeURhdGVPYmplY3QodmFsdWUpIDogdG9TdHIuY2FsbCh2YWx1ZSkgPT09IGRhdGVDbGFzcztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjYWxsQm91bmQgPSByZXF1aXJlKCdjYWxsLWJpbmQvY2FsbEJvdW5kJyk7XG52YXIgaGFzVG9TdHJpbmdUYWcgPSByZXF1aXJlKCdoYXMtdG9zdHJpbmd0YWcvc2hhbXMnKSgpO1xudmFyIGhhcztcbnZhciAkZXhlYztcbnZhciBpc1JlZ2V4TWFya2VyO1xudmFyIGJhZFN0cmluZ2lmaWVyO1xuXG5pZiAoaGFzVG9TdHJpbmdUYWcpIHtcblx0aGFzID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5Jyk7XG5cdCRleGVjID0gY2FsbEJvdW5kKCdSZWdFeHAucHJvdG90eXBlLmV4ZWMnKTtcblx0aXNSZWdleE1hcmtlciA9IHt9O1xuXG5cdHZhciB0aHJvd1JlZ2V4TWFya2VyID0gZnVuY3Rpb24gKCkge1xuXHRcdHRocm93IGlzUmVnZXhNYXJrZXI7XG5cdH07XG5cdGJhZFN0cmluZ2lmaWVyID0ge1xuXHRcdHRvU3RyaW5nOiB0aHJvd1JlZ2V4TWFya2VyLFxuXHRcdHZhbHVlT2Y6IHRocm93UmVnZXhNYXJrZXJcblx0fTtcblxuXHRpZiAodHlwZW9mIFN5bWJvbC50b1ByaW1pdGl2ZSA9PT0gJ3N5bWJvbCcpIHtcblx0XHRiYWRTdHJpbmdpZmllcltTeW1ib2wudG9QcmltaXRpdmVdID0gdGhyb3dSZWdleE1hcmtlcjtcblx0fVxufVxuXG52YXIgJHRvU3RyaW5nID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nJyk7XG52YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgcmVnZXhDbGFzcyA9ICdbb2JqZWN0IFJlZ0V4cF0nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc1RvU3RyaW5nVGFnXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuXHQ/IGZ1bmN0aW9uIGlzUmVnZXgodmFsdWUpIHtcblx0XHRpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR2YXIgZGVzY3JpcHRvciA9IGdPUEQodmFsdWUsICdsYXN0SW5kZXgnKTtcblx0XHR2YXIgaGFzTGFzdEluZGV4RGF0YVByb3BlcnR5ID0gZGVzY3JpcHRvciAmJiBoYXMoZGVzY3JpcHRvciwgJ3ZhbHVlJyk7XG5cdFx0aWYgKCFoYXNMYXN0SW5kZXhEYXRhUHJvcGVydHkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHR0cnkge1xuXHRcdFx0JGV4ZWModmFsdWUsIGJhZFN0cmluZ2lmaWVyKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZSA9PT0gaXNSZWdleE1hcmtlcjtcblx0XHR9XG5cdH1cblx0OiBmdW5jdGlvbiBpc1JlZ2V4KHZhbHVlKSB7XG5cdFx0Ly8gSW4gb2xkZXIgYnJvd3NlcnMsIHR5cGVvZiByZWdleCBpbmNvcnJlY3RseSByZXR1cm5zICdmdW5jdGlvbidcblx0XHRpZiAoIXZhbHVlIHx8ICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gJHRvU3RyaW5nKHZhbHVlKSA9PT0gcmVnZXhDbGFzcztcblx0fTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xuXG5pZiAoaGFzU3ltYm9scykge1xuXHR2YXIgc3ltVG9TdHIgPSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nO1xuXHR2YXIgc3ltU3RyaW5nUmVnZXggPSAvXlN5bWJvbFxcKC4qXFwpJC87XG5cdHZhciBpc1N5bWJvbE9iamVjdCA9IGZ1bmN0aW9uIGlzUmVhbFN5bWJvbE9iamVjdCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUudmFsdWVPZigpICE9PSAnc3ltYm9sJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gc3ltU3RyaW5nUmVnZXgudGVzdChzeW1Ub1N0ci5jYWxsKHZhbHVlKSk7XG5cdH07XG5cblx0bW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHRvU3RyLmNhbGwodmFsdWUpICE9PSAnW29iamVjdCBTeW1ib2xdJykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIGlzU3ltYm9sT2JqZWN0KHZhbHVlKTtcblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9O1xufSBlbHNlIHtcblxuXHRtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzU3ltYm9sKHZhbHVlKSB7XG5cdFx0Ly8gdGhpcyBlbnZpcm9ubWVudCBkb2VzIG5vdCBzdXBwb3J0IFN5bWJvbHMuXG5cdFx0cmV0dXJuIGZhbHNlICYmIHZhbHVlO1xuXHR9O1xufVxuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgTGFuZ3VhZ2VMaW50ZXIuanMuTElDRU5TRS50eHQgKi9cbigoKT0+e3ZhciBuPXsxMTQ6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGEsaSl7dmFyIHIsdD0tMTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJJdGVyYXRlIHJlcXVpcmVzIHRoYXQgfHRoaXN8IG5vdCBiZSBcIituKTtpZighZS5jYWxsKG4sXCJsZW5ndGhcIikpdGhyb3cgbmV3IEVycm9yKFwiSXRlcmF0ZSByZXF1aXJlcyB0aGF0IHx0aGlzfCBoYXMgYSBgbGVuZ3RoYFwiKTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhKXRocm93IG5ldyBFcnJvcihcImBjYWxsYmFja2AgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2Zvcig7Kyt0PG4ubGVuZ3RoOyl0IGluIG4mJlwibnVtYmVyXCI9PXR5cGVvZihyPWEuY2FsbChpLG5bdF0sdCxuKSkmJihyPDAmJih0PTApLHQ9ci0xKX07dmFyIGU9e30uaGFzT3duUHJvcGVydHl9LDc4MDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7YS5kKGUse1o6KCk9Pk19KTt2YXIgaT1hKDgxKSxyPWEubihpKSx0PWEoNjQ1KSxvPWEubih0KSgpKHIoKSk7by5wdXNoKFtuLmlkLCcqIHtcXG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxufVxcblxcbmEge1xcbiAgY29sb3I6ICMwMDY0Yzk7XFxufVxcblxcbi8qLmxvYWRpbmctc3Bpbm5lciB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiBibHVlO1xcbn0qL1xcblxcbi5zdWdnZXN0aW9uLWxpc3Qge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBnYXA6IDEwcHg7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgcGFkZGluZy1sZWZ0OiAgMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDEwcHg7XFxuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgcGFkZGluZzogMTRweCAxNnB4O1xcbiAgYm9yZGVyOiAxcHggc29saWQgI2UwZTBlMDtcXG4gIGJhY2tncm91bmQ6ICNmZmZmZmY7XFxuICBib3gtc2hhZG93OiAwcHggMnB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgdHJhbnNpdGlvbjogMC4wODVzIGFsbCBlYXNlLW91dDtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG5cXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24pOmhvdmVyIHtcXG4gIHRyYW5zZm9ybTogIHRyYW5zbGF0ZVkoLTFweCk7XFxuICBib3gtc2hhZG93OiBcXG4gICAgMHB4IDIuNXB4IDJweCByZ2JhKDAgMCAwIC8gLjAzKSxcXG4gICAgMHB4IDZweCA4cHggcmdiYSgwIDAgMCAvIC4wMik7XFxuXFxuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAgMCAwIC8gMjAlKTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24pOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06ICB0cmFuc2xhdGVZKDFweCk7XFxuICBib3gtc2hhZG93OiAwcHggMnB4IDFweCByZ2JhKDAsIDAsIDAsIDAuMDMpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb24ge1xcbiAgcGFkZGluZzogMTZweCAxNnB4IDEwcHg7XFxuICBjdXJzb3I6ICBkZWZhdWx0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuYWN0aXZlLXN1Z2dlc3Rpb246aG92ZXIsXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLmFjdGl2ZS1zdWdnZXN0aW9uOmFjdGl2ZSB7XFxuICB0cmFuc2Zvcm06ICBub25lO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXI6bm90KC5hY3RpdmUtc3VnZ2VzdGlvbikgPiAqOm5vdCguYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSkge1xcbiAgZGlzcGxheTogIG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWNvbnRhaW5lciAuYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiA4cHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWFjdHVhbCB7XFxuICBmb250LXNpemU6ICAxM3B4O1xcbiAgY29sb3I6ICMyODM2MzY7XFxuICBtYXJnaW46ICAwO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLmFjdGl2ZS1zdWdnZXN0aW9uIC5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IHtcXG4gIGRpc3BsYXk6ICBub25lO1xcbn1cXG5cXG4uYWN0aXZlLXN1Z2dlc3Rpb24tc3VtbWFyeSAuc3VnZ2VzdGlvbi1ydWxlLWxhYmVsIHtcXG4gIGNvbG9yOiAgcmdiYSgwIDAgMCAvIDUwJSk7XFxufVxcblxcbi5hY3RpdmUtc3VnZ2VzdGlvbi1zdW1tYXJ5IC5zdWdnZXN0aW9uLXJ1bGUtbGFiZWw6YmVmb3JlIHtcXG4gIGNvbnRlbnQ6IFwi4oCiXCI7XFxuICBtYXJnaW4tcmlnaHQ6ICA4cHg7XFxuICBjb2xvcjogIHJnYmEoMCAwIDAgLyA0MCUpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1jb250YWluZXIuc3VnZ2VzdGlvbi1kaXNtaXNzZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY29udGFpbmVyLnN1Z2dlc3Rpb24tYWNjZXB0ZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1jb250YWluZXIge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGdhcDogOHB4O1xcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eSB7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICB3aWR0aDogNnB4O1xcbiAgaGVpZ2h0OiA2cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjOTE5Nzk3O1xcbiAgYm9yZGVyLXJhZGl1czogMTAwJTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eS5zZXZlcmUge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogI2RmMmQyNDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tcnVsZS1zZXZlcml0eS5tb2RlcmF0ZSB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMGM3NGRmO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1ydWxlLWxhYmVsIHtcXG4gIG1hcmdpbjogMDtcXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICBmb250LXNpemU6IDEwcHg7XFxuICBsaW5lLWhlaWdodDogMTM1JTtcXG4gIGxldHRlci1zcGFjaW5nOiAwLjc1cHg7XFxuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xcbiAgY29sb3I6ICM2ZTc1NzU7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktY29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICBnYXA6IDEycHg7XFxuICBhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4uc3VtbWFyeS1iYXNpYyB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG4gIGZvbnQtd2VpZ2h0OiA3MDA7XFxuICBnYXA6IDZweDtcXG59XFxuXFxuLmJhc2ljLXN1bW1hcnktZXhhbXBsZSB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQge1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7XFxuICBjb2xvcjogI2RmMmQyNDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LWN1cnJlbnQtdGV4dCB7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBjb2xvcjogIzI4MzYzNjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1hcnJvdyB7XFxuICB0cmFuc2Zvcm06IHNjYWxlKDAuOSk7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50IHtcXG4gIHBhZGRpbmc6IDVweCA3cHggNnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGYyZDI0O1xcbiAgdGV4dC1zaGFkb3c6IDAgMXB4IHJnYigwIDAgMCAvIDEwJSk7XFxuICBib3JkZXItcmFkaXVzOiA2cHg7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNjVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uc3VtbWFyeS1yZW1vdmFsIC5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudDpob3ZlciB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWM1MTQ4O1xcbn1cXG5cXG4uc3VtbWFyeS1yZW1vdmFsIC5zdWdnZXN0aW9uLXN1bW1hcnktY3VycmVudDphY3RpdmUge1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XFxufVxcblxcbi5zdW1tYXJ5LXJlbW92YWwgLnN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50LXRleHQge1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgY29sb3I6ICNmZmY7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQge1xcbiAgcGFkZGluZzogNXB4IDdweCA2cHg7XFxuICBmb250LXNpemU6IDE1cHg7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzM4N2RkO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6ICNmZmY7XFxuICB0cmFuc2l0aW9uOiBhbGwgMC4wNjVzIGVhc2Utb3V0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50OmhvdmVyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcXG4gIGJhY2tncm91bmQtY29sb3I6ICM0YzliZWI7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnQ6YWN0aXZlIHtcXG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xcbn1cXG5cXG4uc3VnZ2VzdGlvbi1zdW1tYXJ5LXJlcGxhY2VtZW50cyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcXG4gIGdhcDogNnB4O1xcbiAgcGFkZGluZzogMXB4IDAgMThweDtcXG4gIG1hcmdpbi1ib3R0b206ICAtMTlweDtcXG4gIG92ZXJmbG93OiBzY3JvbGw7XFxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgYm90dG9tOiAxcHg7XFxufVxcblxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxuICBkaXNwbGF5OiAgbm9uZTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMubm8tcmVwbGFjZW1lbnQge1xcbiAgbWFyZ2luLWJvdHRvbTogIDA7XFxuICBvdmVyZmxvdzogYXV0bztcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyIHtcXG4gIHdpZHRoOiAgMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBwb3NpdGlvbjogIHJlbGF0aXZlO1xcbiAgcGFkZGluZzogMXB4IDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLWNvbnRhaW5lcjphZnRlciB7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgaGVpZ2h0OiAxMTAlO1xcbiAgd2lkdGg6IDMwcHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYmEoMjU1IDI1NSAyNTUgLyAwKSwgICNmZmYgKTtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHJpZ2h0OiAwO1xcbiAgdG9wOiAtMXB4O1xcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuMDc1cyBlYXNlLW91dDtcXG4gIHotaW5kZXg6ICAxMDtcXG59XFxuXFxuLnNjcm9sbC1wb3NpdGlvbi1zdGFydDphZnRlcixcXG4uc2Nyb2xsLXBvc2l0aW9uLW1pZGRsZTphZnRlciB7XFxuICBvcGFjaXR5OiAgMTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudHMtY29udGFpbmVyOmJlZm9yZSB7XFxuICBvcGFjaXR5OiAwO1xcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XFxuICBjb250ZW50OiBcIlwiO1xcbiAgaGVpZ2h0OiAxMTAlO1xcbiAgd2lkdGg6IDMwcHg7XFxuICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgyNTUgMjU1IDI1NSAvIDApLCAgI2ZmZiApO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgbGVmdDogMDtcXG4gIHRvcDogLTFweDtcXG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjFzIGVhc2Utb3V0O1xcbiAgei1pbmRleDogIDEwO1xcbn1cXG5cXG4uc2Nyb2xsLXBvc2l0aW9uLWVuZDpiZWZvcmUsXFxuLnNjcm9sbC1wb3NpdGlvbi1taWRkbGU6YmVmb3JlIHtcXG4gIG9wYWNpdHk6ICAxO1xcbn1cXG5cXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyIHtcXG4gIG1hcmdpbi1ib3R0b206IDA7XFxuICBkaXNwbGF5OiBmbGV4O1xcbn1cXG5cXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyOmJlZm9yZSxcXG4ubm8tcmVwbGFjZW1lbnQtY29udGFpbmVyOmFmdGVyIHtcXG4gIG9wYWNpdHk6IDA7XFxufVxcblxcbi5zdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLm5vLXJlcGxhY2VtZW50IHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHBhZGRpbmc6IDVweCA3cHggNnB4O1xcbiAgZm9udC1zaXplOiAxNXB4O1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMCAwIDAgLyAxNSUpO1xcbiAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMC41KTtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tZGVzY3JpcHRpb24tdGV4dCB7XFxuICBtYXJnaW46IDJweCAwIDRweDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxpbmUtaGVpZ2h0OiAxNDAlO1xcbiAgY29sb3I6ICMyODM2MzY7XFxuICB0ZXh0LWFsaWduOiBsZWZ0O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbnMtY3RhcyB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xcbiAgbWFyZ2luOiAtNHB4IC04cHggMDtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeSB7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgcGFkZGluZzogNnB4IDEwcHg7XFxuICBnYXA6IDZweDtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBib3JkZXI6IG5vbmU7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIGZvbnQtc2l6ZTogMTJweDtcXG4gIGNvbG9yOiAjNmU3NTc1O1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgdHJhbnNpdGlvbjogYWxsIDAuMXMgZWFzZS1vdXQ7XFxuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxufVxcblxcbi5zdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnk6aG92ZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwLjA1KTtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeS5kZWxldGUtaXMtaG92ZXJlZDpiZWZvcmUge1xcbiAgY29udGVudDogXCJEaXNtaXNzXCI7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IC0zMHB4O1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgcGFkZGluZzogNHB4IDhweDtcXG4gIGNvbG9yOiAjZmZmO1xcbiAgYm9yZGVyLXJhZGl1czogM3B4O1xcbiAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgwIDAgMCAvIDgwJSk7XFxufVxcblxcbi5zdWdnZXN0aW9uLWN0YS1zZWNvbmRhcnkuZGVsZXRlLWlzLWhvdmVyZWQ6YWZ0ZXIge1xcbiAgY29udGVudDogXCJcIjtcXG4gIHdpZHRoOiAwO1xcbiAgaGVpZ2h0OiAwO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAtOHB4O1xcbiAgbGVmdDogNTAlO1xcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xcbiAgYm9yZGVyLXRvcDogM3B4IHNvbGlkIHJnYmEoMCAwIDAgLyA4MCUpO1xcbiAgYm9yZGVyLXJpZ2h0OiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xcbn1cXG5cXG4uc3VnZ2VzdGlvbnMtZW1wdHktc3RhdGUge1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBtYXJnaW4tdG9wOiAyMHB4O1xcbiAgaGVpZ2h0OiAxMDAlO1xcbiAgd2lkdGg6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLCAwLCAwLCAwLjc2KTtcXG4gIGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC4wNSk7XFxuICBib3JkZXItcmFkaXVzOiA4cHg7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbi5lbXB0eS1zdGF0ZS1oZWFkaW5nIHtcXG4gIGNvbG9yOiByZ2JhKDAgMCAwIC8gNzAlKTtcXG4gIG1hcmdpbjogMCAwIDZweDtcXG4gIG1heC13aWR0aDogIDgwJTtcXG4gIGZvbnQtc2l6ZTogMThweDtcXG59XFxuXFxuLmVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uIHtcXG4gIGNvbG9yOiByZ2JhKDAgMCAwIC8gNjAlKTtcXG4gIG1hcmdpbjogMDtcXG4gIG1heC13aWR0aDogIDgwJTtcXG4gIGZvbnQtc2l6ZTogMTRweDtcXG4gIGxpbmUtaGVpZ2h0OiAgMTQwJTtcXG59XFxuJyxcIlwiXSk7Y29uc3QgTT1vfSw2NDU6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1bXTtyZXR1cm4gZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm1hcCgoZnVuY3Rpb24oZSl7dmFyIGE9XCJcIixpPXZvaWQgMCE9PWVbNV07cmV0dXJuIGVbNF0mJihhKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGVbNF0sXCIpIHtcIikpLGVbMl0mJihhKz1cIkBtZWRpYSBcIi5jb25jYXQoZVsyXSxcIiB7XCIpKSxpJiYoYSs9XCJAbGF5ZXJcIi5jb25jYXQoZVs1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQoZVs1XSk6XCJcIixcIiB7XCIpKSxhKz1uKGUpLGkmJihhKz1cIn1cIiksZVsyXSYmKGErPVwifVwiKSxlWzRdJiYoYSs9XCJ9XCIpLGF9KSkuam9pbihcIlwiKX0sZS5pPWZ1bmN0aW9uKG4sYSxpLHIsdCl7XCJzdHJpbmdcIj09dHlwZW9mIG4mJihuPVtbbnVsbCxuLHZvaWQgMF1dKTt2YXIgbz17fTtpZihpKWZvcih2YXIgTT0wO008dGhpcy5sZW5ndGg7TSsrKXt2YXIgcz10aGlzW01dWzBdO251bGwhPXMmJihvW3NdPSEwKX1mb3IodmFyIGw9MDtsPG4ubGVuZ3RoO2wrKyl7dmFyIGM9W10uY29uY2F0KG5bbF0pO2kmJm9bY1swXV18fCh2b2lkIDAhPT10JiYodm9pZCAwPT09Y1s1XXx8KGNbMV09XCJAbGF5ZXJcIi5jb25jYXQoY1s1XS5sZW5ndGg+MD9cIiBcIi5jb25jYXQoY1s1XSk6XCJcIixcIiB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSksY1s1XT10KSxhJiYoY1syXT8oY1sxXT1cIkBtZWRpYSBcIi5jb25jYXQoY1syXSxcIiB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSxjWzJdPWEpOmNbMl09YSksciYmKGNbNF0/KGNbMV09XCJAc3VwcG9ydHMgKFwiLmNvbmNhdChjWzRdLFwiKSB7XCIpLmNvbmNhdChjWzFdLFwifVwiKSxjWzRdPXIpOmNbNF09XCJcIi5jb25jYXQocikpLGUucHVzaChjKSl9fSxlfX0sODE6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gblsxXX19LDQ3MDpuPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxhPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcsaT1PYmplY3QuZGVmaW5lUHJvcGVydHkscj1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLHQ9ZnVuY3Rpb24obil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXkuaXNBcnJheT9BcnJheS5pc0FycmF5KG4pOlwiW29iamVjdCBBcnJheV1cIj09PWEuY2FsbChuKX0sbz1mdW5jdGlvbihuKXtpZighbnx8XCJbb2JqZWN0IE9iamVjdF1cIiE9PWEuY2FsbChuKSlyZXR1cm4hMTt2YXIgaSxyPWUuY2FsbChuLFwiY29uc3RydWN0b3JcIiksdD1uLmNvbnN0cnVjdG9yJiZuLmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmZS5jYWxsKG4uY29uc3RydWN0b3IucHJvdG90eXBlLFwiaXNQcm90b3R5cGVPZlwiKTtpZihuLmNvbnN0cnVjdG9yJiYhciYmIXQpcmV0dXJuITE7Zm9yKGkgaW4gbik7cmV0dXJuIHZvaWQgMD09PWl8fGUuY2FsbChuLGkpfSxNPWZ1bmN0aW9uKG4sZSl7aSYmXCJfX3Byb3RvX19cIj09PWUubmFtZT9pKG4sZS5uYW1lLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx2YWx1ZTplLm5ld1ZhbHVlLHdyaXRhYmxlOiEwfSk6bltlLm5hbWVdPWUubmV3VmFsdWV9LHM9ZnVuY3Rpb24obixhKXtpZihcIl9fcHJvdG9fX1wiPT09YSl7aWYoIWUuY2FsbChuLGEpKXJldHVybjtpZihyKXJldHVybiByKG4sYSkudmFsdWV9cmV0dXJuIG5bYV19O24uZXhwb3J0cz1mdW5jdGlvbiBuKCl7dmFyIGUsYSxpLHIsbCxjLFM9YXJndW1lbnRzWzBdLHU9MSxkPWFyZ3VtZW50cy5sZW5ndGgsbT0hMTtmb3IoXCJib29sZWFuXCI9PXR5cGVvZiBTJiYobT1TLFM9YXJndW1lbnRzWzFdfHx7fSx1PTIpLChudWxsPT1TfHxcIm9iamVjdFwiIT10eXBlb2YgUyYmXCJmdW5jdGlvblwiIT10eXBlb2YgUykmJihTPXt9KTt1PGQ7Kyt1KWlmKG51bGwhPShlPWFyZ3VtZW50c1t1XSkpZm9yKGEgaW4gZSlpPXMoUyxhKSxTIT09KHI9cyhlLGEpKSYmKG0mJnImJihvKHIpfHwobD10KHIpKSk/KGw/KGw9ITEsYz1pJiZ0KGkpP2k6W10pOmM9aSYmbyhpKT9pOnt9LE0oUyx7bmFtZTphLG5ld1ZhbHVlOm4obSxjLHIpfSkpOnZvaWQgMCE9PXImJk0oUyx7bmFtZTphLG5ld1ZhbHVlOnJ9KSk7cmV0dXJuIFN9fSwyOTE6bj0+eyFmdW5jdGlvbigpe3ZhciBlO2Z1bmN0aW9uIGEobil7Zm9yKHZhciBlLGEsaSxyLHQ9MSxvPVtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSxNPTAscz1uLmxlbmd0aCxsPVwiXCIsYz0hMSxTPSExLHU9ZnVuY3Rpb24oKXtyZXR1cm4gb1t0KytdfSxkPWZ1bmN0aW9uKCl7Zm9yKHZhciBhPVwiXCI7L1xcZC8udGVzdChuW01dKTspYSs9bltNKytdLGU9bltNXTtyZXR1cm4gYS5sZW5ndGg+MD9wYXJzZUludChhKTpudWxsfTtNPHM7KytNKWlmKGU9bltNXSxjKXN3aXRjaChjPSExLFwiLlwiPT1lPyhTPSExLGU9blsrK01dKTpcIjBcIj09ZSYmXCIuXCI9PW5bTSsxXT8oUz0hMCxlPW5bTSs9Ml0pOlM9ITAscj1kKCksZSl7Y2FzZVwiYlwiOmwrPXBhcnNlSW50KHUoKSwxMCkudG9TdHJpbmcoMik7YnJlYWs7Y2FzZVwiY1wiOmwrPVwic3RyaW5nXCI9PXR5cGVvZihhPXUoKSl8fGEgaW5zdGFuY2VvZiBTdHJpbmc/YTpTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KGEsMTApKTticmVhaztjYXNlXCJkXCI6bCs9cGFyc2VJbnQodSgpLDEwKTticmVhaztjYXNlXCJmXCI6aT1TdHJpbmcocGFyc2VGbG9hdCh1KCkpLnRvRml4ZWQocnx8NikpLGwrPVM/aTppLnJlcGxhY2UoL14wLyxcIlwiKTticmVhaztjYXNlXCJqXCI6bCs9SlNPTi5zdHJpbmdpZnkodSgpKTticmVhaztjYXNlXCJvXCI6bCs9XCIwXCIrcGFyc2VJbnQodSgpLDEwKS50b1N0cmluZyg4KTticmVhaztjYXNlXCJzXCI6bCs9dSgpO2JyZWFrO2Nhc2VcInhcIjpsKz1cIjB4XCIrcGFyc2VJbnQodSgpLDEwKS50b1N0cmluZygxNik7YnJlYWs7Y2FzZVwiWFwiOmwrPVwiMHhcIitwYXJzZUludCh1KCksMTApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO2JyZWFrO2RlZmF1bHQ6bCs9ZX1lbHNlXCIlXCI9PT1lP2M9ITA6bCs9ZTtyZXR1cm4gbH0oZT1uLmV4cG9ydHM9YSkuZm9ybWF0PWEsZS52c3ByaW50Zj1mdW5jdGlvbihuLGUpe3JldHVybiBhLmFwcGx5KG51bGwsW25dLmNvbmNhdChlKSl9LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBjb25zb2xlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjb25zb2xlLmxvZyYmKGUucHJpbnRmPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coYS5hcHBseShudWxsLGFyZ3VtZW50cykpfSl9KCl9LDczODpuPT57bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBudWxsIT1uJiZudWxsIT1uLmNvbnN0cnVjdG9yJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBuLmNvbnN0cnVjdG9yLmlzQnVmZmVyJiZuLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG4pfX0sNTpmdW5jdGlvbihuLGUsYSl7dmFyIGkscjtyPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsdm9pZCAwPT09KGk9ZnVuY3Rpb24oKXtyZXR1cm4gci5kb2N1bWVudCxpPWEoNzYxKSx0PW51bGwsZnVuY3Rpb24oYSxyKXtyZXR1cm4gZT1uLG49cnx8aSx0PXQmJmU9PT1uP3Q6ZnVuY3Rpb24obil7cmV0dXJuIG5ldyBSZWdFeHAoXCJbXCIrT2JqZWN0LmtleXMobikubWFwKChmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0pKS5qb2luKFwiIFwiKStcIl1cIixcImdcIil9KG4pLGEucmVwbGFjZSh0LChmdW5jdGlvbihlKXtyZXR1cm4gbltlLmNoYXJDb2RlQXQoMCldfHxlfSkpfTt2YXIgbixlLGksdH0uY2FsbChlLGEsZSxuKSl8fChuLmV4cG9ydHM9aSl9LDQ5NToobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg1MzQpO24uZXhwb3J0cz1mdW5jdGlvbihuLGUpe3ZhciBhPXRoaXM7cmV0dXJuIGkoYS5kYXRhLG4sYS5kYXRhW2VdfHxyLGEpLGF9O3ZhciByPVtdfSw1OTY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTApO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihpKHRoaXMsbikpfX0sNzY5OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDExMCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEscix0LG89dGhpcyxNPS0xO2ZvcihpKG4sbyxvLmRhdGEpOysrTTxvLmNvbXBvdW5kUnVsZXMubGVuZ3RoOyl7Zm9yKGU9by5jb21wb3VuZFJ1bGVzW01dLGE9XCJcIix0PS0xOysrdDxlLmxlbmd0aDspcj1lLmNoYXJBdCh0KSxhKz1vLmNvbXBvdW5kUnVsZUNvZGVzW3JdLmxlbmd0aD9cIig/OlwiK28uY29tcG91bmRSdWxlQ29kZXNbcl0uam9pbihcInxcIikrXCIpXCI6cjtvLmNvbXBvdW5kUnVsZXNbTV09bmV3IFJlZ0V4cChhLFwiaVwiKX1yZXR1cm4gb319LDQyNzoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg3MzgpLHI9YSg5MTYpO24uZXhwb3J0cz1vO3ZhciB0PW8ucHJvdG90eXBlO2Z1bmN0aW9uIG8obixlKXt2YXIgYSx0PS0xO2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyhuLGUpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBufHxpKG4pPyhcInN0cmluZ1wiPT10eXBlb2YgZXx8aShlKSkmJihhPVt7ZGljOmV9XSk6biYmKFwibGVuZ3RoXCJpbiBuPyhhPW4sbj1uWzBdJiZuWzBdLmFmZik6KG4uZGljJiYoYT1bbl0pLG49bi5hZmYpKSwhbil0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGBhZmZgIGluIGRpY3Rpb25hcnlcIik7aWYobj1yKG4pLHRoaXMuZGF0YT1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuY29tcG91bmRSdWxlQ29kZXM9bi5jb21wb3VuZFJ1bGVDb2Rlcyx0aGlzLnJlcGxhY2VtZW50VGFibGU9bi5yZXBsYWNlbWVudFRhYmxlLHRoaXMuY29udmVyc2lvbj1uLmNvbnZlcnNpb24sdGhpcy5jb21wb3VuZFJ1bGVzPW4uY29tcG91bmRSdWxlcyx0aGlzLnJ1bGVzPW4ucnVsZXMsdGhpcy5mbGFncz1uLmZsYWdzLGEpZm9yKDsrK3Q8YS5sZW5ndGg7KWFbdF0uZGljJiZ0aGlzLmRpY3Rpb25hcnkoYVt0XS5kaWMpfXQuY29ycmVjdD1hKDU5NiksdC5zdWdnZXN0PWEoMTMyKSx0LnNwZWxsPWEoNTAxKSx0LmFkZD1hKDQ5NSksdC5yZW1vdmU9YSg0NzUpLHQud29yZENoYXJhY3RlcnM9YSg0OTIpLHQuZGljdGlvbmFyeT1hKDc2OSksdC5wZXJzb25hbD1hKDIxOSl9LDIxOTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEsaSxyLHQ9dGhpcyxvPW4udG9TdHJpbmcoXCJ1dGY4XCIpLnNwbGl0KFwiXFxuXCIpLE09LTE7Zm9yKHZvaWQgMD09PXQuZmxhZ3MuRk9SQklEREVOV09SRCYmKHQuZmxhZ3MuRk9SQklEREVOV09SRD0hMSkscj10LmZsYWdzLkZPUkJJRERFTldPUkQ7KytNPG8ubGVuZ3RoOykoZT1vW01dLnRyaW0oKSkmJigoYT1cIipcIj09PShpPShlPWUuc3BsaXQoXCIvXCIpKVswXSkuY2hhckF0KDApKSYmKGk9aS5zbGljZSgxKSksdC5hZGQoaSxlWzFdKSxhJiZ0LmRhdGFbaV0ucHVzaChyKSk7cmV0dXJuIHR9fSw0NzU6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXtyZXR1cm4gZGVsZXRlIHRoaXMuZGF0YVtuXSx0aGlzfX0sNTAxOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEwKSxyPWEoMzYwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGU9dGhpcyxhPWkoZSxuLCEwKTtyZXR1cm57Y29ycmVjdDplLmNvcnJlY3QobiksZm9yYmlkZGVuOkJvb2xlYW4oYSYmcihlLmZsYWdzLFwiRk9SQklEREVOV09SRFwiLGUuZGF0YVthXSkpLHdhcm46Qm9vbGVhbihhJiZyKGUuZmxhZ3MsXCJXQVJOXCIsZS5kYXRhW2FdKSl9fX0sMTMyOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDgzMikscj1hKDU3NyksdD1hKDM2MCksbz1hKDEwKTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7dmFyIGUsYSx0LG8sbCxjLFMsdSxkLG0scCxoLGcseSxiLEQsZixHLHcsdixrLFIsWSxBLFAsQz10aGlzLFQ9e30seD1bXSx6PXt9LEU9W107aWYoIShuPXIobi50cmltKCksQy5jb252ZXJzaW9uLmluKSl8fEMuY29ycmVjdChuKSlyZXR1cm5bXTtmb3IoUD1pKG4pLG89LTE7KytvPEMucmVwbGFjZW1lbnRUYWJsZS5sZW5ndGg7KWZvcihhPUMucmVwbGFjZW1lbnRUYWJsZVtvXSxsPW4uaW5kZXhPZihhWzBdKTtsPi0xOylFLnB1c2gobi5yZXBsYWNlKGFbMF0sYVsxXSkpLGw9bi5pbmRleE9mKGFbMF0sbCsxKTtmb3Iobz0tMTsrK288bi5sZW5ndGg7KWZvcihtPW4uY2hhckF0KG8pLGg9bi5zbGljZSgwLG8pLGc9bi5zbGljZShvKzEpLHk9KGI9bS50b0xvd2VyQ2FzZSgpKSE9PW0sVD17fSxsPS0xOysrbDxDLmZsYWdzLktFWS5sZW5ndGg7KWlmKCEoKGM9KHA9Qy5mbGFncy5LRVlbbF0pLmluZGV4T2YoYikpPDApKWZvcih1PS0xOysrdTxwLmxlbmd0aDspaWYodSE9PWMpe2lmKFRbZD1wLmNoYXJBdCh1KV0pY29udGludWU7VFtkXT0hMCx5JiYoZD1kLnRvVXBwZXJDYXNlKCkpLEUucHVzaChoK2QrZyl9Zm9yKG89LTEsdz1uLmNoYXJBdCgwKSx0PVtcIlwiXSx2PTEsaz0wOysrbzxuLmxlbmd0aDspe2ZvcihtPXcsdz1uLmNoYXJBdChvKzEpLGg9bi5zbGljZSgwLG8pLGE9bT09PXc/XCJcIjptK20sbD0tMSxTPXQubGVuZ3RoOysrbDxTOylsPD12JiZ0LnB1c2godFtsXSthKSx0W2xdKz1tOysrazwzJiYodj10Lmxlbmd0aCl9Zm9yKE0uYXBwbHkoRSx0KSx0PVtuXSxhPW4udG9Mb3dlckNhc2UoKSwobj09PWF8fG51bGw9PT1QKSYmdC5wdXNoKG4uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYS5zbGljZSgxKSksYT1uLnRvVXBwZXJDYXNlKCksbiE9PWEmJnQucHVzaChhKSxEPXMoQyxlPXtzdGF0ZTp7fSx3ZWlnaHRlZDp6LHN1Z2dlc3Rpb25zOnh9LHQsRSksZj0wLHY9TWF0aC5taW4oRC5sZW5ndGgsTWF0aC5wb3coTWF0aC5tYXgoMTUtbi5sZW5ndGgsMyksMykpLFI9TWF0aC5tYXgoTWF0aC5wb3coMTAtbi5sZW5ndGgsMyksMSk7IXgubGVuZ3RoJiZmPHY7KUc9ZitSLHMoQyxlLEQuc2xpY2UoZixHKSksZj1HO2Zvcih4LnNvcnQoKGZ1bmN0aW9uKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4sZSl7cmV0dXJuIHpbbl09PT16W2VdPzA6eltuXT56W2VdPy0xOjF9KG4sZSl8fGZ1bmN0aW9uKG4sZSl7dmFyIGE9aShuKSxyPWkoZSk7cmV0dXJuIGE9PT1yPzA6YT09PVA/LTE6cj09PVA/MTp2b2lkIDB9KG4sZSl8fGZ1bmN0aW9uKG4sZSl7cmV0dXJuIG4ubG9jYWxlQ29tcGFyZShlKX0obixlKX0pKSx0PVtdLFk9W10sbz0tMTsrK288eC5sZW5ndGg7KWE9KEE9cih4W29dLEMuY29udmVyc2lvbi5vdXQpKS50b0xvd2VyQ2FzZSgpLFkuaW5kZXhPZihhKTwwJiYodC5wdXNoKEEpLFkucHVzaChhKSk7cmV0dXJuIHR9O3ZhciBNPVtdLnB1c2g7ZnVuY3Rpb24gcyhuLGUsYSxyKXt2YXIgTSxzLGwsYyxTLHUsZCxtLHAsaCxnLHksYixEPW4uZmxhZ3MuVFJZLGY9bi5kYXRhLEc9bi5mbGFncyx3PVtdLHY9LTE7aWYocilmb3IoOysrdjxyLmxlbmd0aDspayhyW3ZdLCEwKTtmb3Iodj0tMTsrK3Y8YS5sZW5ndGg7KWZvcihzPVwiXCIsbD1cIlwiLGM9KE09YVt2XSkuY2hhckF0KDApLFM9TSx1PU0uc2xpY2UoMSksZD1jLnRvTG93ZXJDYXNlKCkhPT1jLG09aShNKSxwPS0xOysrcDw9TS5sZW5ndGg7KWZvcihzKz1sLGg9Uyx1PShTPXUpLnNsaWNlKDEpLGw9YyxnPWQsKGM9TS5jaGFyQXQocCsxKSkmJihkPWMudG9Mb3dlckNhc2UoKSE9PWMpLFMmJmchPT1kJiYoayhzK1IoUykpLGsocytSKGMpK1IobCkrdSkpLGsocytTKSxTJiZrKHMrYytsK3UpLGI9LTE7KytiPEQubGVuZ3RoOyl5PURbYl0sZyYmeSE9PXkudG9VcHBlckNhc2UoKT8oXCJzXCIhPT1tJiYoayhzK3kraCksayhzK3krUykpLGsocysoeT15LnRvVXBwZXJDYXNlKCkpK2gpLGsocyt5K1MpKTooayhzK3kraCksayhzK3krUykpO3JldHVybiB3O2Z1bmN0aW9uIGsoYSxpKXt2YXIgcixNPWUuc3RhdGVbYV07TSE9PUJvb2xlYW4oTSkmJih3LnB1c2goYSksTT0ocj1vKG4sYSkpJiYhdChHLFwiTk9TVUdHRVNUXCIsZltyXSksZS5zdGF0ZVthXT1NLE0mJihlLndlaWdodGVkW2FdPWk/MTA6MCxlLnN1Z2dlc3Rpb25zLnB1c2goYSkpKSxNJiZlLndlaWdodGVkW2FdKyt9ZnVuY3Rpb24gUihuKXt2YXIgZT1uLmNoYXJBdCgwKTtyZXR1cm4oZS50b0xvd2VyQ2FzZSgpPT09ZT9lLnRvVXBwZXJDYXNlKCk6ZS50b0xvd2VyQ2FzZSgpKStuLnNsaWNlKDEpfX19LDUzNDoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg5MTQpO24uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSxvKXt2YXIgTSxzLGwsYyxTLHUsZCxtPS0xOyghKFwiTkVFREFGRklYXCJpbiBvLmZsYWdzKXx8YS5pbmRleE9mKG8uZmxhZ3MuTkVFREFGRklYKTwwKSYmZnVuY3Rpb24obixlLGEpe3ZhciBpPW5bZV07ZSBpbiBuP2k9PT10P25bZV09YS5jb25jYXQoKTpyLmFwcGx5KGksYSk6bltlXT1hLmNvbmNhdCgpfShuLGUsYSk7Zm9yKDsrK208YS5sZW5ndGg7KWlmKE09by5ydWxlc1thW21dXSxhW21daW4gby5jb21wb3VuZFJ1bGVDb2RlcyYmby5jb21wb3VuZFJ1bGVDb2Rlc1thW21dXS5wdXNoKGUpLE0pZm9yKHU9aShlLE0sby5ydWxlcyxbXSkscz0tMTsrK3M8dS5sZW5ndGg7KWlmKHVbc11pbiBufHwoblt1W3NdXT10KSxNLmNvbWJpbmVhYmxlKWZvcihsPW07KytsPGEubGVuZ3RoOylpZigoUz1vLnJ1bGVzW2FbbF1dKSYmUy5jb21iaW5lYWJsZSYmTS50eXBlIT09Uy50eXBlKWZvcihkPWkodVtzXSxTLG8ucnVsZXMsW10pLGM9LTE7KytjPGQubGVuZ3RoOylkW2NdaW4gbnx8KG5bZFtjXV09dCl9O3ZhciByPVtdLnB1c2gsdD1bXX0sOTE2OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEyOSk7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlLGEsYyxTLHUsZCxtLHAsaCxnLHksYixEPU9iamVjdC5jcmVhdGUobnVsbCksZj1PYmplY3QuY3JlYXRlKG51bGwpLEc9T2JqZWN0LmNyZWF0ZShudWxsKSx3PVtdLHY9e2luOltdLG91dDpbXX0saz1bXSxSPW4udG9TdHJpbmcoXCJ1dGY4XCIpLFk9W10sQT0wLFA9Ui5pbmRleE9mKFwiXFxuXCIpO2ZvcihHLktFWT1bXTtQPi0xOylDKFIuc2xpY2UoQSxQKSksQT1QKzEsUD1SLmluZGV4T2YoXCJcXG5cIixBKTtmb3IoQyhSLnNsaWNlKEEpKSxQPS0xOysrUDxZLmxlbmd0aDspaWYoXCJSRVBcIj09PShhPShlPVlbUF0uc3BsaXQobykpWzBdKSl7Zm9yKGM9UCtwYXJzZUludChlWzFdLDEwKTsrK1A8PWM7KWU9WVtQXS5zcGxpdChvKSx3LnB1c2goW2VbMV0sZVsyXV0pO1AtLX1lbHNlIGlmKFwiSUNPTlZcIj09PWF8fFwiT0NPTlZcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVsxXSwxMCksbT12W1wiSUNPTlZcIj09PWE/XCJpblwiOlwib3V0XCJdOysrUDw9YzspZT1ZW1BdLnNwbGl0KG8pLG0ucHVzaChbbmV3IFJlZ0V4cChlWzFdLFwiZ1wiKSxlWzJdXSk7UC0tfWVsc2UgaWYoXCJDT01QT1VORFJVTEVcIj09PWEpe2ZvcihjPVArcGFyc2VJbnQoZVsxXSwxMCk7KytQPD1jOylmb3IoaD1ZW1BdLnNwbGl0KG8pWzFdLHA9LTEsay5wdXNoKGgpOysrcDxoLmxlbmd0aDspZltoLmNoYXJBdChwKV09W107UC0tfWVsc2UgaWYoXCJQRlhcIj09PWF8fFwiU0ZYXCI9PT1hKXtmb3IoYz1QK3BhcnNlSW50KGVbM10sMTApLGg9e3R5cGU6YSxjb21iaW5lYWJsZTpcIllcIj09PWVbMl0sZW50cmllczpbXX0sRFtlWzFdXT1oOysrUDw9Yzspe1M9KGU9WVtQXS5zcGxpdChvKSlbMl0sdT1lWzNdLnNwbGl0KFwiL1wiKSxkPWVbNF0sbT17YWRkOlwiXCIscmVtb3ZlOlwiXCIsbWF0Y2g6XCJcIixjb250aW51YXRpb246aShHLHVbMV0pfSx1JiZcIjBcIiE9PXVbMF0mJihtLmFkZD11WzBdKTt0cnl7XCIwXCIhPT1TJiYobS5yZW1vdmU9XCJTRlhcIj09PWE/cyhTKTpTKSxkJiZcIi5cIiE9PWQmJihtLm1hdGNoPVwiU0ZYXCI9PT1hP3MoZCk6bChkKSl9Y2F0Y2gobil7bT1udWxsfW0mJmguZW50cmllcy5wdXNoKG0pfVAtLX1lbHNlIGlmKFwiVFJZXCI9PT1hKXtmb3IoZD1lWzFdLHk9LTEsZz1bXTsrK3k8ZC5sZW5ndGg7KShiPWQuY2hhckF0KHkpKS50b0xvd2VyQ2FzZSgpPT09YiYmZy5wdXNoKGIpO2Zvcih5PS0xOysreTx0Lmxlbmd0aDspZC5pbmRleE9mKHRbeV0pPDAmJmcucHVzaCh0W3ldKTtHW2FdPWd9ZWxzZVwiS0VZXCI9PT1hP3IuYXBwbHkoR1thXSxlWzFdLnNwbGl0KFwifFwiKSk6XCJDT01QT1VORE1JTlwiPT09YT9HW2FdPU51bWJlcihlWzFdKTpcIk9OTFlJTkNPTVBPVU5EXCI9PT1hPyhHW2FdPWVbMV0sZltlWzFdXT1bXSk6R1thXT1lWzFdO3JldHVybiBpc05hTihHLkNPTVBPVU5ETUlOKSYmKEcuQ09NUE9VTkRNSU49MyksRy5LRVkubGVuZ3RofHwoRy5LRVk9TSksRy5UUll8fChHLlRSWT10LmNvbmNhdCgpKSxHLktFRVBDQVNFfHwoRy5LRUVQQ0FTRT0hMSkse2NvbXBvdW5kUnVsZUNvZGVzOmYscmVwbGFjZW1lbnRUYWJsZTp3LGNvbnZlcnNpb246dixjb21wb3VuZFJ1bGVzOmsscnVsZXM6RCxmbGFnczpHfTtmdW5jdGlvbiBDKG4peyhuPW4udHJpbSgpKSYmMzUhPT1uLmNoYXJDb2RlQXQoMCkmJlkucHVzaChuKX19O3ZhciByPVtdLnB1c2gsdD1cImV0YW9pbnNocmRsY3Vtd2ZneXBidmtqeHF6XCIuc3BsaXQoXCJcIiksbz0vXFxzKy8sTT1bXCJxd2VydHp1b3BcIixcInl4Y3Zibm1cIixcInFhd1wiLFwic2F5XCIsXCJ3c2VcIixcImRzeFwiLFwic3lcIixcImVkclwiLFwiZmRjXCIsXCJkeFwiLFwicmZ0XCIsXCJnZnZcIixcImZjXCIsXCJ0Z3pcIixcImhnYlwiLFwiZ3ZcIixcInpodVwiLFwiamhuXCIsXCJoYlwiLFwidWppXCIsXCJram1cIixcImpuXCIsXCJpa29cIixcImxrbVwiXTtmdW5jdGlvbiBzKG4pe3JldHVybiBuZXcgUmVnRXhwKG4rXCIkXCIpfWZ1bmN0aW9uIGwobil7cmV0dXJuIG5ldyBSZWdFeHAoXCJeXCIrbil9fSw5MTQ6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbiBuKGUsYSxpLHIpe2Zvcih2YXIgdCxvLE0scyxsLGM9LTE7KytjPGEuZW50cmllcy5sZW5ndGg7KWlmKHM9KHQ9YS5lbnRyaWVzW2NdKS5jb250aW51YXRpb24sbD0tMSwoIXQubWF0Y2h8fHQubWF0Y2gudGVzdChlKSkmJihvPXQucmVtb3ZlP2UucmVwbGFjZSh0LnJlbW92ZSxcIlwiKTplLG89XCJTRlhcIj09PWEudHlwZT9vK3QuYWRkOnQuYWRkK28sci5wdXNoKG8pLHMmJnMubGVuZ3RoKSlmb3IoOysrbDxzLmxlbmd0aDspKE09aVtzW2xdXSkmJm4obyxNLGkscik7cmV0dXJuIHJ9fSw4MzI6bj0+e1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGUobil7cmV0dXJuIG49PT1uLnRvTG93ZXJDYXNlKCk/XCJsXCI6bj09PW4udG9VcHBlckNhc2UoKT9cInVcIjpudWxsfW4uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgYT1lKG4uY2hhckF0KDApKSxpPW4uc2xpY2UoMSk7cmV0dXJuIGk/YT09PShpPWUoaSkpP2E6XCJ1XCI9PT1hJiZcImxcIj09PWk/XCJzXCI6bnVsbDphfX0sMTEwOihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDEyOSkscj1hKDUzNCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSxhKXtmb3IodmFyIGk9bi50b1N0cmluZyhcInV0ZjhcIikscj1pLmluZGV4T2YoXCJcXG5cIikrMSx0PWkuaW5kZXhPZihcIlxcblwiLHIpO3Q+LTE7KTkhPT1pLmNoYXJDb2RlQXQocikmJm8oaS5zbGljZShyLHQpLGUsYSkscj10KzEsdD1pLmluZGV4T2YoXCJcXG5cIixyKTtvKGkuc2xpY2UociksZSxhKX07dmFyIHQ9L1xccy9nO2Z1bmN0aW9uIG8obixlLGEpe2Zvcih2YXIgbyxNLHM9bi5pbmRleE9mKFwiL1wiKSxsPW4uaW5kZXhPZihcIiNcIiksYz1cIlwiO3M+LTEmJjkyPT09bi5jaGFyQ29kZUF0KHMtMSk7KXM9KG49bi5zbGljZSgwLHMtMSkrbi5zbGljZShzKSkuaW5kZXhPZihcIi9cIixzKTtsPi0xP3M+LTEmJnM8bD8obz1uLnNsaWNlKDAscyksdC5sYXN0SW5kZXg9cysxLE09dC5leGVjKG4pLGM9bi5zbGljZShzKzEsTT9NLmluZGV4OnZvaWQgMCkpOm89bi5zbGljZSgwLGwpOnM+LTE/KG89bi5zbGljZSgwLHMpLGM9bi5zbGljZShzKzEpKTpvPW4sKG89by50cmltKCkpJiZyKGEsbyxpKGUuZmxhZ3MsYy50cmltKCkpLGUpfX0sMjM2OihuLGUsYSk9PntcInVzZSBzdHJpY3RcIjt2YXIgaT1hKDM2MCk7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7dmFyIGE9LTE7aWYobi5kYXRhW2VdKXJldHVybiFpKG4uZmxhZ3MsXCJPTkxZSU5DT01QT1VORFwiLG4uZGF0YVtlXSk7aWYoZS5sZW5ndGg+PW4uZmxhZ3MuQ09NUE9VTkRNSU4pZm9yKDsrK2E8bi5jb21wb3VuZFJ1bGVzLmxlbmd0aDspaWYobi5jb21wb3VuZFJ1bGVzW2FdLnRlc3QoZSkpcmV0dXJuITA7cmV0dXJuITF9fSwzNjA6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSl7cmV0dXJuIGEmJmUgaW4gbiYmYS5pbmRleE9mKG5bZV0pPi0xfX0sMTA6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoNTc3KSxyPWEoMjM2KSx0PWEoMzYwKTtmdW5jdGlvbiBvKG4sZSxhKXtyZXR1cm4gdChuLFwiS0VFUENBU0VcIixlKXx8YXx8dChuLFwiRk9SQklEREVOV09SRFwiLGUpfW4uZXhwb3J0cz1mdW5jdGlvbihuLGUsYSl7dmFyIE0scz1lLnRyaW0oKTtpZighcylyZXR1cm4gbnVsbDtpZihzPWkocyxuLmNvbnZlcnNpb24uaW4pLHIobixzKSlyZXR1cm4hYSYmdChuLmZsYWdzLFwiRk9SQklEREVOV09SRFwiLG4uZGF0YVtzXSk/bnVsbDpzO2lmKHMudG9VcHBlckNhc2UoKT09PXMpe2lmKE09cy5jaGFyQXQoMCkrcy5zbGljZSgxKS50b0xvd2VyQ2FzZSgpLG8obi5mbGFncyxuLmRhdGFbTV0sYSkpcmV0dXJuIG51bGw7aWYocihuLE0pKXJldHVybiBNfWlmKChNPXMudG9Mb3dlckNhc2UoKSkhPT1zKXtpZihvKG4uZmxhZ3Msbi5kYXRhW01dLGEpKXJldHVybiBudWxsO2lmKHIobixNKSlyZXR1cm4gTX1yZXR1cm4gbnVsbH19LDU3NzpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sZSl7Zm9yKHZhciBhPS0xOysrYTxlLmxlbmd0aDspbj1uLnJlcGxhY2UoZVthXVswXSxlW2FdWzFdKTtyZXR1cm4gbn19LDEyOTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSl7dmFyIGkscj0wO2lmKCFhKXJldHVybiBlO2lmKFwibG9uZ1wiPT09bi5GTEFHKXtmb3IoaT1uZXcgQXJyYXkoTWF0aC5jZWlsKGEubGVuZ3RoLzIpKTtyPGEubGVuZ3RoOylpW3IvMl09YS5zbGljZShyLHIrMikscis9MjtyZXR1cm4gaX1yZXR1cm4gYS5zcGxpdChcIm51bVwiPT09bi5GTEFHP1wiLFwiOlwiXCIpfTt2YXIgZT1bXX0sNDkyOm49PntcInVzZSBzdHJpY3RcIjtuLmV4cG9ydHM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5mbGFncy5XT1JEQ0hBUlN8fG51bGx9fSw0MzI6KG4sZSxhKT0+eyFmdW5jdGlvbigpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIGkobil7cmV0dXJuIShcIm51bWJlclwiIT10eXBlb2Ygbnx8biE9bnx8bj09PTEvMHx8bj09PS0xLzApfWZ1bmN0aW9uIHIobil7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIG4mJk1hdGguYWJzKG4pPD05MDA3MTk5MjU0NzQwOTkxfVwib2JqZWN0XCI9PXR5cGVvZiBzZWxmJiZzZWxmLnNlbGY9PT1zZWxmJiZzZWxmfHxcIm9iamVjdFwiPT10eXBlb2YgYS5nJiZhLmcuZ2xvYmFsPT09YS5nJiZhLmc7dmFyIHQ9LyhodW5kcmVkfHRob3VzYW5kfChtfGJ8dHJ8cXVhZHIpaWxsaW9uKSQvLG89L3RlZW4kLyxNPS95JC8scz0vKHplcm98b25lfHR3b3x0aHJlZXxmb3VyfGZpdmV8c2l4fHNldmVufGVpZ2h0fG5pbmV8dGVufGVsZXZlbnx0d2VsdmUpJC8sbD17emVybzpcInplcm90aFwiLG9uZTpcImZpcnN0XCIsdHdvOlwic2Vjb25kXCIsdGhyZWU6XCJ0aGlyZFwiLGZvdXI6XCJmb3VydGhcIixmaXZlOlwiZmlmdGhcIixzaXg6XCJzaXh0aFwiLHNldmVuOlwic2V2ZW50aFwiLGVpZ2h0OlwiZWlnaHRoXCIsbmluZTpcIm5pbnRoXCIsdGVuOlwidGVudGhcIixlbGV2ZW46XCJlbGV2ZW50aFwiLHR3ZWx2ZTpcInR3ZWxmdGhcIn07ZnVuY3Rpb24gYyhuKXtyZXR1cm4gdC50ZXN0KG4pfHxvLnRlc3Qobik/bitcInRoXCI6TS50ZXN0KG4pP24ucmVwbGFjZShNLFwiaWV0aFwiKTpzLnRlc3Qobik/bi5yZXBsYWNlKHMsUyk6bn1mdW5jdGlvbiBTKG4sZSl7cmV0dXJuIGxbZV19dmFyIHU9MTAwLGQ9MWUzLG09MWU2LHA9MWU5LGg9MWUxMixnPTFlMTUseT05MDA3MTk5MjU0NzQwOTkyLGI9W1wiemVyb1wiLFwib25lXCIsXCJ0d29cIixcInRocmVlXCIsXCJmb3VyXCIsXCJmaXZlXCIsXCJzaXhcIixcInNldmVuXCIsXCJlaWdodFwiLFwibmluZVwiLFwidGVuXCIsXCJlbGV2ZW5cIixcInR3ZWx2ZVwiLFwidGhpcnRlZW5cIixcImZvdXJ0ZWVuXCIsXCJmaWZ0ZWVuXCIsXCJzaXh0ZWVuXCIsXCJzZXZlbnRlZW5cIixcImVpZ2h0ZWVuXCIsXCJuaW5ldGVlblwiXSxEPVtcInplcm9cIixcInRlblwiLFwidHdlbnR5XCIsXCJ0aGlydHlcIixcImZvcnR5XCIsXCJmaWZ0eVwiLFwic2l4dHlcIixcInNldmVudHlcIixcImVpZ2h0eVwiLFwibmluZXR5XCJdO2Z1bmN0aW9uIGYobixlKXt2YXIgYSx0PXBhcnNlSW50KG4sMTApO2lmKCFpKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYSBmaW5pdGUgbnVtYmVyOiBcIituK1wiIChcIit0eXBlb2YgbitcIilcIik7aWYoIXIodCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnB1dCBpcyBub3QgYSBzYWZlIG51bWJlciwgaXTigJlzIGVpdGhlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLlwiKTtyZXR1cm4gYT1mdW5jdGlvbiBuKGUpe3ZhciBhLGkscj1hcmd1bWVudHNbMV07cmV0dXJuIDA9PT1lP3I/ci5qb2luKFwiIFwiKS5yZXBsYWNlKC8sJC8sXCJcIik6XCJ6ZXJvXCI6KHJ8fChyPVtdKSxlPDAmJihyLnB1c2goXCJtaW51c1wiKSxlPU1hdGguYWJzKGUpKSxlPDIwPyhhPTAsaT1iW2VdKTplPHU/KGE9ZSUxMCxpPURbTWF0aC5mbG9vcihlLzEwKV0sYSYmKGkrPVwiLVwiK2JbYV0sYT0wKSk6ZTxkPyhhPWUldSxpPW4oTWF0aC5mbG9vcihlL3UpKStcIiBodW5kcmVkXCIpOmU8bT8oYT1lJWQsaT1uKE1hdGguZmxvb3IoZS9kKSkrXCIgdGhvdXNhbmQsXCIpOmU8cD8oYT1lJW0saT1uKE1hdGguZmxvb3IoZS9tKSkrXCIgbWlsbGlvbixcIik6ZTxoPyhhPWUlcCxpPW4oTWF0aC5mbG9vcihlL3ApKStcIiBiaWxsaW9uLFwiKTplPGc/KGE9ZSVoLGk9bihNYXRoLmZsb29yKGUvaCkpK1wiIHRyaWxsaW9uLFwiKTplPD15JiYoYT1lJWcsaT1uKE1hdGguZmxvb3IoZS9nKSkrXCIgcXVhZHJpbGxpb24sXCIpLHIucHVzaChpKSxuKGEscikpfSh0KSxlP2MoYSk6YX12YXIgRz17dG9PcmRpbmFsOmZ1bmN0aW9uKG4pe3ZhciBlPXBhcnNlSW50KG4sMTApO2lmKCFpKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJOb3QgYSBmaW5pdGUgbnVtYmVyOiBcIituK1wiIChcIit0eXBlb2YgbitcIilcIik7aWYoIXIoZSkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnB1dCBpcyBub3QgYSBzYWZlIG51bWJlciwgaXTigJlzIGVpdGhlciB0b28gbGFyZ2Ugb3IgdG9vIHNtYWxsLlwiKTt2YXIgYT1TdHJpbmcoZSksdD1NYXRoLmFicyhlJTEwMCksbz0xMTw9dCYmdDw9MTMsTT1hLmNoYXJBdChhLmxlbmd0aC0xKTtyZXR1cm4gYSsobz9cInRoXCI6XCIxXCI9PT1NP1wic3RcIjpcIjJcIj09PU0/XCJuZFwiOlwiM1wiPT09TT9cInJkXCI6XCJ0aFwiKX0sdG9Xb3JkczpmLHRvV29yZHNPcmRpbmFsOmZ1bmN0aW9uKG4pe3JldHVybiBjKGYobikpfX07bi5leHBvcnRzJiYoZT1uLmV4cG9ydHM9RyksZS5udW1iZXJUb1dvcmRzPUd9KCl9LDgwMjpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uIG4oZSxhKXt2YXIgaSxyLHQsbz1hfHxcIlwiO2lmKCFlfHwhKFwibGVuZ3RoXCJpbiBlKSYmIWUudHlwZSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBub3QgYFwiK2UrXCJgXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlLnZhbHVlKXJldHVybiBlLnZhbHVlO2lmKDE9PT0ocj0odD1cImxlbmd0aFwiaW4gZT9lOmUuY2hpbGRyZW4pLmxlbmd0aCkmJlwidmFsdWVcImluIHRbMF0pcmV0dXJuIHRbMF0udmFsdWU7Zm9yKGk9W107ci0tOylpW3JdPW4odFtyXSxvKTtyZXR1cm4gaS5qb2luKG8pfX0sNDUwOmZ1bmN0aW9uKG4pe24uZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBuPVtdLGU9W10sYT17fSxpPXt9LHI9e307ZnVuY3Rpb24gdChuKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygbj9uZXcgUmVnRXhwKFwiXlwiK24rXCIkXCIsXCJpXCIpOm59ZnVuY3Rpb24gbyhuLGUpe3JldHVybiBuPT09ZT9lOm49PT1uLnRvTG93ZXJDYXNlKCk/ZS50b0xvd2VyQ2FzZSgpOm49PT1uLnRvVXBwZXJDYXNlKCk/ZS50b1VwcGVyQ2FzZSgpOm5bMF09PT1uWzBdLnRvVXBwZXJDYXNlKCk/ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cigxKS50b0xvd2VyQ2FzZSgpOmUudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBNKG4sZSl7cmV0dXJuIG4ucmVwbGFjZSgvXFwkKFxcZHsxLDJ9KS9nLChmdW5jdGlvbihuLGEpe3JldHVybiBlW2FdfHxcIlwifSkpfWZ1bmN0aW9uIHMobixlKXtyZXR1cm4gbi5yZXBsYWNlKGVbMF0sKGZ1bmN0aW9uKGEsaSl7dmFyIHI9TShlWzFdLGFyZ3VtZW50cyk7cmV0dXJuIG8oXCJcIj09PWE/bltpLTFdOmEscil9KSl9ZnVuY3Rpb24gbChuLGUsaSl7aWYoIW4ubGVuZ3RofHxhLmhhc093blByb3BlcnR5KG4pKXJldHVybiBlO2Zvcih2YXIgcj1pLmxlbmd0aDtyLS07KXt2YXIgdD1pW3JdO2lmKHRbMF0udGVzdChlKSlyZXR1cm4gcyhlLHQpfXJldHVybiBlfWZ1bmN0aW9uIGMobixlLGEpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1pLnRvTG93ZXJDYXNlKCk7cmV0dXJuIGUuaGFzT3duUHJvcGVydHkocik/byhpLHIpOm4uaGFzT3duUHJvcGVydHkocik/byhpLG5bcl0pOmwocixpLGEpfX1mdW5jdGlvbiBTKG4sZSxhLGkpe3JldHVybiBmdW5jdGlvbihpKXt2YXIgcj1pLnRvTG93ZXJDYXNlKCk7cmV0dXJuISFlLmhhc093blByb3BlcnR5KHIpfHwhbi5oYXNPd25Qcm9wZXJ0eShyKSYmbChyLHIsYSk9PT1yfX1mdW5jdGlvbiB1KG4sZSxhKXtyZXR1cm4oYT9lK1wiIFwiOlwiXCIpKygxPT09ZT91LnNpbmd1bGFyKG4pOnUucGx1cmFsKG4pKX1yZXR1cm4gdS5wbHVyYWw9YyhyLGksbiksdS5pc1BsdXJhbD1TKHIsaSxuKSx1LnNpbmd1bGFyPWMoaSxyLGUpLHUuaXNTaW5ndWxhcj1TKGkscixlKSx1LmFkZFBsdXJhbFJ1bGU9ZnVuY3Rpb24oZSxhKXtuLnB1c2goW3QoZSksYV0pfSx1LmFkZFNpbmd1bGFyUnVsZT1mdW5jdGlvbihuLGEpe2UucHVzaChbdChuKSxhXSl9LHUuYWRkVW5jb3VudGFibGVSdWxlPWZ1bmN0aW9uKG4pe1wic3RyaW5nXCIhPXR5cGVvZiBuPyh1LmFkZFBsdXJhbFJ1bGUobixcIiQwXCIpLHUuYWRkU2luZ3VsYXJSdWxlKG4sXCIkMFwiKSk6YVtuLnRvTG93ZXJDYXNlKCldPSEwfSx1LmFkZElycmVndWxhclJ1bGU9ZnVuY3Rpb24obixlKXtlPWUudG9Mb3dlckNhc2UoKSxuPW4udG9Mb3dlckNhc2UoKSxyW25dPWUsaVtlXT1ufSxbW1wiSVwiLFwid2VcIl0sW1wibWVcIixcInVzXCJdLFtcImhlXCIsXCJ0aGV5XCJdLFtcInNoZVwiLFwidGhleVwiXSxbXCJ0aGVtXCIsXCJ0aGVtXCJdLFtcIm15c2VsZlwiLFwib3Vyc2VsdmVzXCJdLFtcInlvdXJzZWxmXCIsXCJ5b3Vyc2VsdmVzXCJdLFtcIml0c2VsZlwiLFwidGhlbXNlbHZlc1wiXSxbXCJoZXJzZWxmXCIsXCJ0aGVtc2VsdmVzXCJdLFtcImhpbXNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1widGhlbXNlbGZcIixcInRoZW1zZWx2ZXNcIl0sW1wiaXNcIixcImFyZVwiXSxbXCJ3YXNcIixcIndlcmVcIl0sW1wiaGFzXCIsXCJoYXZlXCJdLFtcInRoaXNcIixcInRoZXNlXCJdLFtcInRoYXRcIixcInRob3NlXCJdLFtcImVjaG9cIixcImVjaG9lc1wiXSxbXCJkaW5nb1wiLFwiZGluZ29lc1wiXSxbXCJ2b2xjYW5vXCIsXCJ2b2xjYW5vZXNcIl0sW1widG9ybmFkb1wiLFwidG9ybmFkb2VzXCJdLFtcInRvcnBlZG9cIixcInRvcnBlZG9lc1wiXSxbXCJnZW51c1wiLFwiZ2VuZXJhXCJdLFtcInZpc2N1c1wiLFwidmlzY2VyYVwiXSxbXCJzdGlnbWFcIixcInN0aWdtYXRhXCJdLFtcInN0b21hXCIsXCJzdG9tYXRhXCJdLFtcImRvZ21hXCIsXCJkb2dtYXRhXCJdLFtcImxlbW1hXCIsXCJsZW1tYXRhXCJdLFtcInNjaGVtYVwiLFwic2NoZW1hdGFcIl0sW1wiYW5hdGhlbWFcIixcImFuYXRoZW1hdGFcIl0sW1wib3hcIixcIm94ZW5cIl0sW1wiYXhlXCIsXCJheGVzXCJdLFtcImRpZVwiLFwiZGljZVwiXSxbXCJ5ZXNcIixcInllc2VzXCJdLFtcImZvb3RcIixcImZlZXRcIl0sW1wiZWF2ZVwiLFwiZWF2ZXNcIl0sW1wiZ29vc2VcIixcImdlZXNlXCJdLFtcInRvb3RoXCIsXCJ0ZWV0aFwiXSxbXCJxdWl6XCIsXCJxdWl6emVzXCJdLFtcImh1bWFuXCIsXCJodW1hbnNcIl0sW1wicHJvb2ZcIixcInByb29mc1wiXSxbXCJjYXJ2ZVwiLFwiY2FydmVzXCJdLFtcInZhbHZlXCIsXCJ2YWx2ZXNcIl0sW1wibG9vZXlcIixcImxvb2llc1wiXSxbXCJ0aGllZlwiLFwidGhpZXZlc1wiXSxbXCJncm9vdmVcIixcImdyb292ZXNcIl0sW1wicGlja2F4ZVwiLFwicGlja2F4ZXNcIl0sW1wicGFzc2VyYnlcIixcInBhc3NlcnNieVwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkSXJyZWd1bGFyUnVsZShuWzBdLG5bMV0pfSkpLFtbL3M/JC9pLFwic1wiXSxbL1teXFx1MDAwMC1cXHUwMDdGXSQvaSxcIiQwXCJdLFsvKFteYWVpb3VdZXNlKSQvaSxcIiQxXCJdLFsvKGF4fHRlc3QpaXMkL2ksXCIkMWVzXCJdLFsvKGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfHJpcykkL2ksXCIkMWVzXCJdLFsvKGVbbW5ddSlzPyQvaSxcIiQxc1wiXSxbLyhbXmxdaWFzfFthZWlvdV1sYXN8W2VqenJdYXN8W2l1XWFtKSQvaSxcIiQxXCJdLFsvKGFsdW1ufHN5bGxhYnx2aXJ8cmFkaXxudWNsZXxmdW5nfGNhY3R8c3RpbXVsfHRlcm1pbnxiYWNpbGx8Zm9jfHV0ZXJ8bG9jfHN0cmF0KSg/OnVzfGkpJC9pLFwiJDFpXCJdLFsvKGFsdW1ufGFsZ3x2ZXJ0ZWJyKSg/OmF8YWUpJC9pLFwiJDFhZVwiXSxbLyhzZXJhcGh8Y2hlcnViKSg/OmltKT8kL2ksXCIkMWltXCJdLFsvKGhlcnxhdHxncilvJC9pLFwiJDFvZXNcIl0sWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8YXV0b21hdHxxdW9yKSg/OmF8dW0pJC9pLFwiJDFhXCJdLFsvKGFwaGVsaXxoeXBlcmJhdHxwZXJpaGVsaXxhc3luZGV0fG5vdW1lbnxwaGVub21lbnxjcml0ZXJpfG9yZ2FufHByb2xlZ29tZW58aGVkcnxhdXRvbWF0KSg/OmF8b24pJC9pLFwiJDFhXCJdLFsvc2lzJC9pLFwic2VzXCJdLFsvKD86KGtuaXx3aXxsaSlmZXwoYXJ8bHxlYXxlb3xvYXxob28pZikkL2ksXCIkMSQydmVzXCJdLFsvKFteYWVpb3V5XXxxdSl5JC9pLFwiJDFpZXNcIl0sWy8oW15jaF1baWVvXVtsbl0pZXkkL2ksXCIkMWllc1wiXSxbLyh4fGNofHNzfHNofHp6KSQvaSxcIiQxZXNcIl0sWy8obWF0cnxjb2R8bXVyfHNpbHx2ZXJ0fGluZHxhcHBlbmQpKD86aXh8ZXgpJC9pLFwiJDFpY2VzXCJdLFsvXFxiKCg/OnRpdCk/bXxsKSg/OmljZXxvdXNlKSQvaSxcIiQxaWNlXCJdLFsvKHBlKSg/OnJzb258b3BsZSkkL2ksXCIkMW9wbGVcIl0sWy8oY2hpbGQpKD86cmVuKT8kL2ksXCIkMXJlblwiXSxbL2VhdXgkL2ksXCIkMFwiXSxbL21bYWVdbiQvaSxcIm1lblwiXSxbXCJ0aG91XCIsXCJ5b3VcIl1dLmZvckVhY2goKGZ1bmN0aW9uKG4pe3JldHVybiB1LmFkZFBsdXJhbFJ1bGUoblswXSxuWzFdKX0pKSxbWy9zJC9pLFwiXCJdLFsvKHNzKSQvaSxcIiQxXCJdLFsvKHdpfGtuaXwoPzphZnRlcnxoYWxmfGhpZ2h8bG93fG1pZHxub258bmlnaHR8W15cXHddfF4pbGkpdmVzJC9pLFwiJDFmZVwiXSxbLyhhcnwoPzp3b3xbYWVdKWx8W2VvXVthb10pdmVzJC9pLFwiJDFmXCJdLFsvaWVzJC9pLFwieVwiXSxbL1xcYihbcGxdfHpvbWJ8KD86bmVja3xjcm9zcyk/dHxjb2xsfGZhZXJ8Zm9vZHxnZW58Z29vbnxncm91cHxsYXNzfHRhbGt8Z29hbHxjdXQpaWVzJC9pLFwiJDFpZVwiXSxbL1xcYihtb258c21pbClpZXMkL2ksXCIkMWV5XCJdLFsvXFxiKCg/OnRpdCk/bXxsKWljZSQvaSxcIiQxb3VzZVwiXSxbLyhzZXJhcGh8Y2hlcnViKWltJC9pLFwiJDFcIl0sWy8oeHxjaHxzc3xzaHx6enx0dG98Z298Y2hvfGFsaWFzfFteYW91XXVzfHRbbG1dYXN8Z2FzfCg/OmhlcnxhdHxncilvfFthZWlvdV1yaXMpKD86ZXMpPyQvaSxcIiQxXCJdLFsvKGFuYWx5fGRpYWdub3xwYXJlbnRoZXxwcm9nbm98c3lub3B8dGhlfGVtcGhhfGNyaXxuZSkoPzpzaXN8c2VzKSQvaSxcIiQxc2lzXCJdLFsvKG1vdmllfHR3ZWx2ZXxhYnVzZXxlW21uXXUpcyQvaSxcIiQxXCJdLFsvKHRlc3QpKD86aXN8ZXMpJC9pLFwiJDFpc1wiXSxbLyhhbHVtbnxzeWxsYWJ8dmlyfHJhZGl8bnVjbGV8ZnVuZ3xjYWN0fHN0aW11bHx0ZXJtaW58YmFjaWxsfGZvY3x1dGVyfGxvY3xzdHJhdCkoPzp1c3xpKSQvaSxcIiQxdXNcIl0sWy8oYWdlbmR8YWRkZW5kfG1pbGxlbm5pfGRhdHxleHRyZW18YmFjdGVyaXxkZXNpZGVyYXR8c3RyYXR8Y2FuZGVsYWJyfGVycmF0fG92fHN5bXBvc2l8Y3VycmljdWx8cXVvcilhJC9pLFwiJDF1bVwiXSxbLyhhcGhlbGl8aHlwZXJiYXR8cGVyaWhlbGl8YXN5bmRldHxub3VtZW58cGhlbm9tZW58Y3JpdGVyaXxvcmdhbnxwcm9sZWdvbWVufGhlZHJ8YXV0b21hdClhJC9pLFwiJDFvblwiXSxbLyhhbHVtbnxhbGd8dmVydGVicilhZSQvaSxcIiQxYVwiXSxbLyhjb2R8bXVyfHNpbHx2ZXJ0fGluZClpY2VzJC9pLFwiJDFleFwiXSxbLyhtYXRyfGFwcGVuZClpY2VzJC9pLFwiJDFpeFwiXSxbLyhwZSkocnNvbnxvcGxlKSQvaSxcIiQxcnNvblwiXSxbLyhjaGlsZClyZW4kL2ksXCIkMVwiXSxbLyhlYXUpeD8kL2ksXCIkMVwiXSxbL21lbiQvaSxcIm1hblwiXV0uZm9yRWFjaCgoZnVuY3Rpb24obil7cmV0dXJuIHUuYWRkU2luZ3VsYXJSdWxlKG5bMF0sblsxXSl9KSksW1wiYWR1bHRob29kXCIsXCJhZHZpY2VcIixcImFnZW5kYVwiLFwiYWlkXCIsXCJhaXJjcmFmdFwiLFwiYWxjb2hvbFwiLFwiYW1tb1wiLFwiYW5hbHl0aWNzXCIsXCJhbmltZVwiLFwiYXRobGV0aWNzXCIsXCJhdWRpb1wiLFwiYmlzb25cIixcImJsb29kXCIsXCJicmVhbVwiLFwiYnVmZmFsb1wiLFwiYnV0dGVyXCIsXCJjYXJwXCIsXCJjYXNoXCIsXCJjaGFzc2lzXCIsXCJjaGVzc1wiLFwiY2xvdGhpbmdcIixcImNvZFwiLFwiY29tbWVyY2VcIixcImNvb3BlcmF0aW9uXCIsXCJjb3Jwc1wiLFwiZGVicmlzXCIsXCJkaWFiZXRlc1wiLFwiZGlnZXN0aW9uXCIsXCJlbGtcIixcImVuZXJneVwiLFwiZXF1aXBtZW50XCIsXCJleGNyZXRpb25cIixcImV4cGVydGlzZVwiLFwiZmlybXdhcmVcIixcImZsb3VuZGVyXCIsXCJmdW5cIixcImdhbGxvd3NcIixcImdhcmJhZ2VcIixcImdyYWZmaXRpXCIsXCJoYXJkd2FyZVwiLFwiaGVhZHF1YXJ0ZXJzXCIsXCJoZWFsdGhcIixcImhlcnBlc1wiLFwiaGlnaGppbmtzXCIsXCJob21ld29ya1wiLFwiaG91c2V3b3JrXCIsXCJpbmZvcm1hdGlvblwiLFwiamVhbnNcIixcImp1c3RpY2VcIixcImt1ZG9zXCIsXCJsYWJvdXJcIixcImxpdGVyYXR1cmVcIixcIm1hY2hpbmVyeVwiLFwibWFja2VyZWxcIixcIm1haWxcIixcIm1lZGlhXCIsXCJtZXdzXCIsXCJtb29zZVwiLFwibXVzaWNcIixcIm11ZFwiLFwibWFuZ2FcIixcIm5ld3NcIixcIm9ubHlcIixcInBlcnNvbm5lbFwiLFwicGlrZVwiLFwicGxhbmt0b25cIixcInBsaWVyc1wiLFwicG9saWNlXCIsXCJwb2xsdXRpb25cIixcInByZW1pc2VzXCIsXCJyYWluXCIsXCJyZXNlYXJjaFwiLFwicmljZVwiLFwic2FsbW9uXCIsXCJzY2lzc29yc1wiLFwic2VyaWVzXCIsXCJzZXdhZ2VcIixcInNoYW1ibGVzXCIsXCJzaHJpbXBcIixcInNvZnR3YXJlXCIsXCJzcGVjaWVzXCIsXCJzdGFmZlwiLFwic3dpbmVcIixcInRlbm5pc1wiLFwidHJhZmZpY1wiLFwidHJhbnNwb3J0YXRpb25cIixcInRyb3V0XCIsXCJ0dW5hXCIsXCJ3ZWFsdGhcIixcIndlbGZhcmVcIixcIndoaXRpbmdcIixcIndpbGRlYmVlc3RcIixcIndpbGRsaWZlXCIsXCJ5b3VcIiwvcG9rW2XDqV1tb24kL2ksL1teYWVpb3VdZXNlJC9pLC9kZWVyJC9pLC9maXNoJC9pLC9tZWFzbGVzJC9pLC9vW2l1XXMkL2ksL3BveCQvaSwvc2hlZXAkL2ldLmZvckVhY2godS5hZGRVbmNvdW50YWJsZVJ1bGUpLHV9KCl9LDcwMzoobixlLGEpPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGk9YSg0MTQpO2Z1bmN0aW9uIHIoKXt9ZnVuY3Rpb24gdCgpe310LnJlc2V0V2FybmluZ0NhY2hlPXIsbi5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLGUsYSxyLHQsbyl7aWYobyE9PWkpe3ZhciBNPW5ldyBFcnJvcihcIkNhbGxpbmcgUHJvcFR5cGVzIHZhbGlkYXRvcnMgZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgYHByb3AtdHlwZXNgIHBhY2thZ2UuIFVzZSBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKSB0byBjYWxsIHRoZW0uIFJlYWQgbW9yZSBhdCBodHRwOi8vZmIubWUvdXNlLWNoZWNrLXByb3AtdHlwZXNcIik7dGhyb3cgTS5uYW1lPVwiSW52YXJpYW50IFZpb2xhdGlvblwiLE19fWZ1bmN0aW9uIGUoKXtyZXR1cm4gbn1uLmlzUmVxdWlyZWQ9bjt2YXIgYT17YXJyYXk6bixiaWdpbnQ6bixib29sOm4sZnVuYzpuLG51bWJlcjpuLG9iamVjdDpuLHN0cmluZzpuLHN5bWJvbDpuLGFueTpuLGFycmF5T2Y6ZSxlbGVtZW50Om4sZWxlbWVudFR5cGU6bixpbnN0YW5jZU9mOmUsbm9kZTpuLG9iamVjdE9mOmUsb25lT2Y6ZSxvbmVPZlR5cGU6ZSxzaGFwZTplLGV4YWN0OmUsY2hlY2tQcm9wVHlwZXM6dCxyZXNldFdhcm5pbmdDYWNoZTpyfTtyZXR1cm4gYS5Qcm9wVHlwZXM9YSxhfX0sNjk3OihuLGUsYSk9PntuLmV4cG9ydHM9YSg3MDMpKCl9LDQxNDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPVwiU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRURcIn0sMzc5Om49PntcInVzZSBzdHJpY3RcIjt2YXIgZT1bXTtmdW5jdGlvbiBhKG4pe2Zvcih2YXIgYT0tMSxpPTA7aTxlLmxlbmd0aDtpKyspaWYoZVtpXS5pZGVudGlmaWVyPT09bil7YT1pO2JyZWFrfXJldHVybiBhfWZ1bmN0aW9uIGkobixpKXtmb3IodmFyIHQ9e30sbz1bXSxNPTA7TTxuLmxlbmd0aDtNKyspe3ZhciBzPW5bTV0sbD1pLmJhc2U/c1swXStpLmJhc2U6c1swXSxjPXRbbF18fDAsUz1cIlwiLmNvbmNhdChsLFwiIFwiKS5jb25jYXQoYyk7dFtsXT1jKzE7dmFyIHU9YShTKSxkPXtjc3M6c1sxXSxtZWRpYTpzWzJdLHNvdXJjZU1hcDpzWzNdLHN1cHBvcnRzOnNbNF0sbGF5ZXI6c1s1XX07aWYoLTEhPT11KWVbdV0ucmVmZXJlbmNlcysrLGVbdV0udXBkYXRlcihkKTtlbHNle3ZhciBtPXIoZCxpKTtpLmJ5SW5kZXg9TSxlLnNwbGljZShNLDAse2lkZW50aWZpZXI6Uyx1cGRhdGVyOm0scmVmZXJlbmNlczoxfSl9by5wdXNoKFMpfXJldHVybiBvfWZ1bmN0aW9uIHIobixlKXt2YXIgYT1lLmRvbUFQSShlKTtyZXR1cm4gYS51cGRhdGUobiksZnVuY3Rpb24oZSl7aWYoZSl7aWYoZS5jc3M9PT1uLmNzcyYmZS5tZWRpYT09PW4ubWVkaWEmJmUuc291cmNlTWFwPT09bi5zb3VyY2VNYXAmJmUuc3VwcG9ydHM9PT1uLnN1cHBvcnRzJiZlLmxheWVyPT09bi5sYXllcilyZXR1cm47YS51cGRhdGUobj1lKX1lbHNlIGEucmVtb3ZlKCl9fW4uZXhwb3J0cz1mdW5jdGlvbihuLHIpe3ZhciB0PWkobj1ufHxbXSxyPXJ8fHt9KTtyZXR1cm4gZnVuY3Rpb24obil7bj1ufHxbXTtmb3IodmFyIG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIE09YSh0W29dKTtlW01dLnJlZmVyZW5jZXMtLX1mb3IodmFyIHM9aShuLHIpLGw9MDtsPHQubGVuZ3RoO2wrKyl7dmFyIGM9YSh0W2xdKTswPT09ZVtjXS5yZWZlcmVuY2VzJiYoZVtjXS51cGRhdGVyKCksZS5zcGxpY2UoYywxKSl9dD1zfX19LDU2OTpuPT57XCJ1c2Ugc3RyaWN0XCI7dmFyIGU9e307bi5leHBvcnRzPWZ1bmN0aW9uKG4sYSl7dmFyIGk9ZnVuY3Rpb24obil7aWYodm9pZCAwPT09ZVtuXSl7dmFyIGE9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTtpZih3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQmJmEgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpdHJ5e2E9YS5jb250ZW50RG9jdW1lbnQuaGVhZH1jYXRjaChuKXthPW51bGx9ZVtuXT1hfXJldHVybiBlW25dfShuKTtpZighaSl0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydCcgcGFyYW1ldGVyIGlzIGludmFsaWQuXCIpO2kuYXBwZW5kQ2hpbGQoYSl9fSwyMTY6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIG4uc2V0QXR0cmlidXRlcyhlLG4uYXR0cmlidXRlcyksbi5pbnNlcnQoZSxuLm9wdGlvbnMpLGV9fSw1NjU6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuKXt2YXIgZT1hLm5jO2UmJm4uc2V0QXR0cmlidXRlKFwibm9uY2VcIixlKX19LDc5NTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3ZhciBlPW4uaW5zZXJ0U3R5bGVFbGVtZW50KG4pO3JldHVybnt1cGRhdGU6ZnVuY3Rpb24oYSl7IWZ1bmN0aW9uKG4sZSxhKXt2YXIgaT1cIlwiO2Euc3VwcG9ydHMmJihpKz1cIkBzdXBwb3J0cyAoXCIuY29uY2F0KGEuc3VwcG9ydHMsXCIpIHtcIikpLGEubWVkaWEmJihpKz1cIkBtZWRpYSBcIi5jb25jYXQoYS5tZWRpYSxcIiB7XCIpKTt2YXIgcj12b2lkIDAhPT1hLmxheWVyO3ImJihpKz1cIkBsYXllclwiLmNvbmNhdChhLmxheWVyLmxlbmd0aD4wP1wiIFwiLmNvbmNhdChhLmxheWVyKTpcIlwiLFwiIHtcIikpLGkrPWEuY3NzLHImJihpKz1cIn1cIiksYS5tZWRpYSYmKGkrPVwifVwiKSxhLnN1cHBvcnRzJiYoaSs9XCJ9XCIpO3ZhciB0PWEuc291cmNlTWFwO3QmJlwidW5kZWZpbmVkXCIhPXR5cGVvZiBidG9hJiYoaSs9XCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeSh0KSkpKSxcIiAqL1wiKSksZS5zdHlsZVRhZ1RyYW5zZm9ybShpLG4sZS5vcHRpb25zKX0oZSxuLGEpfSxyZW1vdmU6ZnVuY3Rpb24oKXshZnVuY3Rpb24obil7aWYobnVsbD09PW4ucGFyZW50Tm9kZSlyZXR1cm4hMTtuLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9KGUpfX19fSw1ODk6bj0+e1widXNlIHN0cmljdFwiO24uZXhwb3J0cz1mdW5jdGlvbihuLGUpe2lmKGUuc3R5bGVTaGVldCllLnN0eWxlU2hlZXQuY3NzVGV4dD1uO2Vsc2V7Zm9yKDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG4pKX19fSw3NjY6KG4sZSxhKT0+e1widXNlIHN0cmljdFwiO3ZhciBpPWEoMTE0KTtuLmV4cG9ydHM9ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT1lJiZlLmNoaWxkcmVuO2lmKCFhKXRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgY2hpbGRyZW4gaW4gYHBhcmVudGAgZm9yIGBtb2RpZmllcmBcIik7aShhLG4sZSl9fShmdW5jdGlvbihuKXtyZXR1cm4gZnVuY3Rpb24oZSxhKXtyZXR1cm4gbihlLGEsdGhpcyl9fShuKSl9fSwyMDpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPWZ1bmN0aW9uKG4pe3JldHVybiBmdW5jdGlvbihlKXt2YXIgYT0tMSxpPWUmJmUuY2hpbGRyZW47aWYoIWkpdGhyb3cgbmV3IEVycm9yKFwiTWlzc2luZyBjaGlsZHJlbiBpbiBgcGFyZW50YCBmb3IgYHZpc2l0b3JgXCIpO2Zvcig7KythIGluIGk7KW4oaVthXSxhLGUpfX19LDc2MTpuPT57XCJ1c2Ugc3RyaWN0XCI7bi5leHBvcnRzPUpTT04ucGFyc2UoJ3tcIjEwNVwiOlwiaVwiLFwiMTkyXCI6XCJBXCIsXCIxOTNcIjpcIkFcIixcIjE5NFwiOlwiQVwiLFwiMTk1XCI6XCJBXCIsXCIxOTZcIjpcIkFcIixcIjE5N1wiOlwiQVwiLFwiMTk5XCI6XCJDXCIsXCIyMDBcIjpcIkVcIixcIjIwMVwiOlwiRVwiLFwiMjAyXCI6XCJFXCIsXCIyMDNcIjpcIkVcIixcIjIwNFwiOlwiSVwiLFwiMjA1XCI6XCJJXCIsXCIyMDZcIjpcIklcIixcIjIwN1wiOlwiSVwiLFwiMjA5XCI6XCJOXCIsXCIyMTBcIjpcIk9cIixcIjIxMVwiOlwiT1wiLFwiMjEyXCI6XCJPXCIsXCIyMTNcIjpcIk9cIixcIjIxNFwiOlwiT1wiLFwiMjE2XCI6XCJPXCIsXCIyMTdcIjpcIlVcIixcIjIxOFwiOlwiVVwiLFwiMjE5XCI6XCJVXCIsXCIyMjBcIjpcIlVcIixcIjIyMVwiOlwiWVwiLFwiMjI0XCI6XCJhXCIsXCIyMjVcIjpcImFcIixcIjIyNlwiOlwiYVwiLFwiMjI3XCI6XCJhXCIsXCIyMjhcIjpcImFcIixcIjIyOVwiOlwiYVwiLFwiMjMxXCI6XCJjXCIsXCIyMzJcIjpcImVcIixcIjIzM1wiOlwiZVwiLFwiMjM0XCI6XCJlXCIsXCIyMzVcIjpcImVcIixcIjIzNlwiOlwiaVwiLFwiMjM3XCI6XCJpXCIsXCIyMzhcIjpcImlcIixcIjIzOVwiOlwiaVwiLFwiMjQxXCI6XCJuXCIsXCIyNDJcIjpcIm9cIixcIjI0M1wiOlwib1wiLFwiMjQ0XCI6XCJvXCIsXCIyNDVcIjpcIm9cIixcIjI0NlwiOlwib1wiLFwiMjQ4XCI6XCJvXCIsXCIyNDlcIjpcInVcIixcIjI1MFwiOlwidVwiLFwiMjUxXCI6XCJ1XCIsXCIyNTJcIjpcInVcIixcIjI1M1wiOlwieVwiLFwiMjU1XCI6XCJ5XCIsXCIyNTZcIjpcIkFcIixcIjI1N1wiOlwiYVwiLFwiMjU4XCI6XCJBXCIsXCIyNTlcIjpcImFcIixcIjI2MFwiOlwiQVwiLFwiMjYxXCI6XCJhXCIsXCIyNjJcIjpcIkNcIixcIjI2M1wiOlwiY1wiLFwiMjY0XCI6XCJDXCIsXCIyNjVcIjpcImNcIixcIjI2NlwiOlwiQ1wiLFwiMjY3XCI6XCJjXCIsXCIyNjhcIjpcIkNcIixcIjI2OVwiOlwiY1wiLFwiMjcwXCI6XCJEXCIsXCIyNzFcIjpcImRcIixcIjI3MlwiOlwiRFwiLFwiMjczXCI6XCJkXCIsXCIyNzRcIjpcIkVcIixcIjI3NVwiOlwiZVwiLFwiMjc2XCI6XCJFXCIsXCIyNzdcIjpcImVcIixcIjI3OFwiOlwiRVwiLFwiMjc5XCI6XCJlXCIsXCIyODBcIjpcIkVcIixcIjI4MVwiOlwiZVwiLFwiMjgyXCI6XCJFXCIsXCIyODNcIjpcImVcIixcIjI4NFwiOlwiR1wiLFwiMjg1XCI6XCJnXCIsXCIyODZcIjpcIkdcIixcIjI4N1wiOlwiZ1wiLFwiMjg4XCI6XCJHXCIsXCIyODlcIjpcImdcIixcIjI5MFwiOlwiR1wiLFwiMjkxXCI6XCJnXCIsXCIyOTJcIjpcIkhcIixcIjI5M1wiOlwiaFwiLFwiMjk0XCI6XCJIXCIsXCIyOTVcIjpcImhcIixcIjI5NlwiOlwiSVwiLFwiMjk3XCI6XCJpXCIsXCIyOThcIjpcIklcIixcIjI5OVwiOlwiaVwiLFwiMzAwXCI6XCJJXCIsXCIzMDFcIjpcImlcIixcIjMwMlwiOlwiSVwiLFwiMzAzXCI6XCJpXCIsXCIzMDRcIjpcIklcIixcIjMwOFwiOlwiSlwiLFwiMzA5XCI6XCJqXCIsXCIzMTBcIjpcIktcIixcIjMxMVwiOlwia1wiLFwiMzEzXCI6XCJMXCIsXCIzMTRcIjpcImxcIixcIjMxNVwiOlwiTFwiLFwiMzE2XCI6XCJsXCIsXCIzMTdcIjpcIkxcIixcIjMxOFwiOlwibFwiLFwiMzE5XCI6XCJMXCIsXCIzMjBcIjpcImxcIixcIjMyMVwiOlwiTFwiLFwiMzIyXCI6XCJsXCIsXCIzMjNcIjpcIk5cIixcIjMyNFwiOlwiblwiLFwiMzI1XCI6XCJOXCIsXCIzMjZcIjpcIm5cIixcIjMyN1wiOlwiTlwiLFwiMzI4XCI6XCJuXCIsXCIzMzJcIjpcIk9cIixcIjMzM1wiOlwib1wiLFwiMzM0XCI6XCJPXCIsXCIzMzVcIjpcIm9cIixcIjMzNlwiOlwiT1wiLFwiMzM3XCI6XCJvXCIsXCIzMzhcIjpcIk9cIixcIjMzOVwiOlwib1wiLFwiMzQwXCI6XCJSXCIsXCIzNDFcIjpcInJcIixcIjM0MlwiOlwiUlwiLFwiMzQzXCI6XCJyXCIsXCIzNDRcIjpcIlJcIixcIjM0NVwiOlwiclwiLFwiMzQ2XCI6XCJTXCIsXCIzNDdcIjpcInNcIixcIjM0OFwiOlwiU1wiLFwiMzQ5XCI6XCJzXCIsXCIzNTBcIjpcIlNcIixcIjM1MVwiOlwic1wiLFwiMzUyXCI6XCJTXCIsXCIzNTNcIjpcInNcIixcIjM1NFwiOlwiVFwiLFwiMzU1XCI6XCJ0XCIsXCIzNTZcIjpcIlRcIixcIjM1N1wiOlwidFwiLFwiMzU4XCI6XCJUXCIsXCIzNTlcIjpcInRcIixcIjM2MFwiOlwiVVwiLFwiMzYxXCI6XCJ1XCIsXCIzNjJcIjpcIlVcIixcIjM2M1wiOlwidVwiLFwiMzY0XCI6XCJVXCIsXCIzNjVcIjpcInVcIixcIjM2NlwiOlwiVVwiLFwiMzY3XCI6XCJ1XCIsXCIzNjhcIjpcIlVcIixcIjM2OVwiOlwidVwiLFwiMzcwXCI6XCJVXCIsXCIzNzFcIjpcInVcIixcIjM3MlwiOlwiV1wiLFwiMzczXCI6XCJ3XCIsXCIzNzRcIjpcIllcIixcIjM3NVwiOlwieVwiLFwiMzc2XCI6XCJZXCIsXCIzNzdcIjpcIlpcIixcIjM3OFwiOlwielwiLFwiMzc5XCI6XCJaXCIsXCIzODBcIjpcInpcIixcIjM4MVwiOlwiWlwiLFwiMzgyXCI6XCJ6XCIsXCIzODRcIjpcImJcIixcIjM4NVwiOlwiQlwiLFwiMzg2XCI6XCJCXCIsXCIzODdcIjpcImJcIixcIjM5MFwiOlwiT1wiLFwiMzkxXCI6XCJDXCIsXCIzOTJcIjpcImNcIixcIjM5M1wiOlwiRFwiLFwiMzk0XCI6XCJEXCIsXCIzOTVcIjpcIkRcIixcIjM5NlwiOlwiZFwiLFwiMzk4XCI6XCJFXCIsXCI0MDBcIjpcIkVcIixcIjQwMVwiOlwiRlwiLFwiNDAyXCI6XCJmXCIsXCI0MDNcIjpcIkdcIixcIjQwN1wiOlwiSVwiLFwiNDA4XCI6XCJLXCIsXCI0MDlcIjpcImtcIixcIjQxMFwiOlwibFwiLFwiNDEyXCI6XCJNXCIsXCI0MTNcIjpcIk5cIixcIjQxNFwiOlwiblwiLFwiNDE1XCI6XCJPXCIsXCI0MTZcIjpcIk9cIixcIjQxN1wiOlwib1wiLFwiNDIwXCI6XCJQXCIsXCI0MjFcIjpcInBcIixcIjQyMlwiOlwiUlwiLFwiNDI3XCI6XCJ0XCIsXCI0MjhcIjpcIlRcIixcIjQyOVwiOlwidFwiLFwiNDMwXCI6XCJUXCIsXCI0MzFcIjpcIlVcIixcIjQzMlwiOlwidVwiLFwiNDM0XCI6XCJWXCIsXCI0MzVcIjpcIllcIixcIjQzNlwiOlwieVwiLFwiNDM3XCI6XCJaXCIsXCI0MzhcIjpcInpcIixcIjQ2MVwiOlwiQVwiLFwiNDYyXCI6XCJhXCIsXCI0NjNcIjpcIklcIixcIjQ2NFwiOlwiaVwiLFwiNDY1XCI6XCJPXCIsXCI0NjZcIjpcIm9cIixcIjQ2N1wiOlwiVVwiLFwiNDY4XCI6XCJ1XCIsXCI0NzdcIjpcImVcIixcIjQ4NFwiOlwiR1wiLFwiNDg1XCI6XCJnXCIsXCI0ODZcIjpcIkdcIixcIjQ4N1wiOlwiZ1wiLFwiNDg4XCI6XCJLXCIsXCI0ODlcIjpcImtcIixcIjQ5MFwiOlwiT1wiLFwiNDkxXCI6XCJvXCIsXCI1MDBcIjpcIkdcIixcIjUwMVwiOlwiZ1wiLFwiNTA0XCI6XCJOXCIsXCI1MDVcIjpcIm5cIixcIjUxMlwiOlwiQVwiLFwiNTEzXCI6XCJhXCIsXCI1MTRcIjpcIkFcIixcIjUxNVwiOlwiYVwiLFwiNTE2XCI6XCJFXCIsXCI1MTdcIjpcImVcIixcIjUxOFwiOlwiRVwiLFwiNTE5XCI6XCJlXCIsXCI1MjBcIjpcIklcIixcIjUyMVwiOlwiaVwiLFwiNTIyXCI6XCJJXCIsXCI1MjNcIjpcImlcIixcIjUyNFwiOlwiT1wiLFwiNTI1XCI6XCJvXCIsXCI1MjZcIjpcIk9cIixcIjUyN1wiOlwib1wiLFwiNTI4XCI6XCJSXCIsXCI1MjlcIjpcInJcIixcIjUzMFwiOlwiUlwiLFwiNTMxXCI6XCJyXCIsXCI1MzJcIjpcIlVcIixcIjUzM1wiOlwidVwiLFwiNTM0XCI6XCJVXCIsXCI1MzVcIjpcInVcIixcIjUzNlwiOlwiU1wiLFwiNTM3XCI6XCJzXCIsXCI1MzhcIjpcIlRcIixcIjUzOVwiOlwidFwiLFwiNTQyXCI6XCJIXCIsXCI1NDNcIjpcImhcIixcIjU0NFwiOlwiTlwiLFwiNTQ1XCI6XCJkXCIsXCI1NDhcIjpcIlpcIixcIjU0OVwiOlwielwiLFwiNTUwXCI6XCJBXCIsXCI1NTFcIjpcImFcIixcIjU1MlwiOlwiRVwiLFwiNTUzXCI6XCJlXCIsXCI1NThcIjpcIk9cIixcIjU1OVwiOlwib1wiLFwiNTYyXCI6XCJZXCIsXCI1NjNcIjpcInlcIixcIjU2NFwiOlwibFwiLFwiNTY1XCI6XCJuXCIsXCI1NjZcIjpcInRcIixcIjU2N1wiOlwialwiLFwiNTcwXCI6XCJBXCIsXCI1NzFcIjpcIkNcIixcIjU3MlwiOlwiY1wiLFwiNTczXCI6XCJMXCIsXCI1NzRcIjpcIlRcIixcIjU3NVwiOlwic1wiLFwiNTc2XCI6XCJ6XCIsXCI1NzlcIjpcIkJcIixcIjU4MFwiOlwiVVwiLFwiNTgxXCI6XCJWXCIsXCI1ODJcIjpcIkVcIixcIjU4M1wiOlwiZVwiLFwiNTg0XCI6XCJKXCIsXCI1ODVcIjpcImpcIixcIjU4NlwiOlwiUVwiLFwiNTg3XCI6XCJxXCIsXCI1ODhcIjpcIlJcIixcIjU4OVwiOlwiclwiLFwiNTkwXCI6XCJZXCIsXCI1OTFcIjpcInlcIixcIjU5MlwiOlwiYVwiLFwiNTkzXCI6XCJhXCIsXCI1OTVcIjpcImJcIixcIjU5NlwiOlwib1wiLFwiNTk3XCI6XCJjXCIsXCI1OThcIjpcImRcIixcIjU5OVwiOlwiZFwiLFwiNjAwXCI6XCJlXCIsXCI2MDNcIjpcImVcIixcIjYwNFwiOlwiZVwiLFwiNjA1XCI6XCJlXCIsXCI2MDZcIjpcImVcIixcIjYwN1wiOlwialwiLFwiNjA4XCI6XCJnXCIsXCI2MDlcIjpcImdcIixcIjYxMFwiOlwiZ1wiLFwiNjEzXCI6XCJoXCIsXCI2MTRcIjpcImhcIixcIjYxNlwiOlwiaVwiLFwiNjE4XCI6XCJpXCIsXCI2MTlcIjpcImxcIixcIjYyMFwiOlwibFwiLFwiNjIxXCI6XCJsXCIsXCI2MjNcIjpcIm1cIixcIjYyNFwiOlwibVwiLFwiNjI1XCI6XCJtXCIsXCI2MjZcIjpcIm5cIixcIjYyN1wiOlwiblwiLFwiNjI4XCI6XCJuXCIsXCI2MjlcIjpcIm9cIixcIjYzM1wiOlwiclwiLFwiNjM0XCI6XCJyXCIsXCI2MzVcIjpcInJcIixcIjYzNlwiOlwiclwiLFwiNjM3XCI6XCJyXCIsXCI2MzhcIjpcInJcIixcIjYzOVwiOlwiclwiLFwiNjQwXCI6XCJyXCIsXCI2NDFcIjpcInJcIixcIjY0MlwiOlwic1wiLFwiNjQ3XCI6XCJ0XCIsXCI2NDhcIjpcInRcIixcIjY0OVwiOlwidVwiLFwiNjUxXCI6XCJ2XCIsXCI2NTJcIjpcInZcIixcIjY1M1wiOlwid1wiLFwiNjU0XCI6XCJ5XCIsXCI2NTVcIjpcInlcIixcIjY1NlwiOlwielwiLFwiNjU3XCI6XCJ6XCIsXCI2NjNcIjpcImNcIixcIjY2NVwiOlwiYlwiLFwiNjY2XCI6XCJlXCIsXCI2NjdcIjpcImdcIixcIjY2OFwiOlwiaFwiLFwiNjY5XCI6XCJqXCIsXCI2NzBcIjpcImtcIixcIjY3MVwiOlwibFwiLFwiNjcyXCI6XCJxXCIsXCI2ODZcIjpcImhcIixcIjY4OFwiOlwiaFwiLFwiNjkwXCI6XCJqXCIsXCI2OTFcIjpcInJcIixcIjY5MlwiOlwiclwiLFwiNjk0XCI6XCJyXCIsXCI2OTVcIjpcIndcIixcIjY5NlwiOlwieVwiLFwiNzM3XCI6XCJsXCIsXCI3MzhcIjpcInNcIixcIjczOVwiOlwieFwiLFwiNzgwXCI6XCJ2XCIsXCI4MjlcIjpcInhcIixcIjg1MVwiOlwieFwiLFwiODY3XCI6XCJhXCIsXCI4NjhcIjpcImVcIixcIjg2OVwiOlwiaVwiLFwiODcwXCI6XCJvXCIsXCI4NzFcIjpcInVcIixcIjg3MlwiOlwiY1wiLFwiODczXCI6XCJkXCIsXCI4NzRcIjpcImhcIixcIjg3NVwiOlwibVwiLFwiODc2XCI6XCJyXCIsXCI4NzdcIjpcInRcIixcIjg3OFwiOlwidlwiLFwiODc5XCI6XCJ4XCIsXCI3NDI0XCI6XCJhXCIsXCI3NDI3XCI6XCJiXCIsXCI3NDI4XCI6XCJjXCIsXCI3NDI5XCI6XCJkXCIsXCI3NDMxXCI6XCJlXCIsXCI3NDMyXCI6XCJlXCIsXCI3NDMzXCI6XCJpXCIsXCI3NDM0XCI6XCJqXCIsXCI3NDM1XCI6XCJrXCIsXCI3NDM2XCI6XCJsXCIsXCI3NDM3XCI6XCJtXCIsXCI3NDM4XCI6XCJuXCIsXCI3NDM5XCI6XCJvXCIsXCI3NDQwXCI6XCJvXCIsXCI3NDQxXCI6XCJvXCIsXCI3NDQyXCI6XCJvXCIsXCI3NDQzXCI6XCJvXCIsXCI3NDQ2XCI6XCJvXCIsXCI3NDQ3XCI6XCJvXCIsXCI3NDQ4XCI6XCJwXCIsXCI3NDQ5XCI6XCJyXCIsXCI3NDUwXCI6XCJyXCIsXCI3NDUxXCI6XCJ0XCIsXCI3NDUyXCI6XCJ1XCIsXCI3NDUzXCI6XCJ1XCIsXCI3NDU0XCI6XCJ1XCIsXCI3NDU1XCI6XCJtXCIsXCI3NDU2XCI6XCJ2XCIsXCI3NDU3XCI6XCJ3XCIsXCI3NDU4XCI6XCJ6XCIsXCI3NTIyXCI6XCJpXCIsXCI3NTIzXCI6XCJyXCIsXCI3NTI0XCI6XCJ1XCIsXCI3NTI1XCI6XCJ2XCIsXCI3NjgwXCI6XCJBXCIsXCI3NjgxXCI6XCJhXCIsXCI3NjgyXCI6XCJCXCIsXCI3NjgzXCI6XCJiXCIsXCI3Njg0XCI6XCJCXCIsXCI3Njg1XCI6XCJiXCIsXCI3Njg2XCI6XCJCXCIsXCI3Njg3XCI6XCJiXCIsXCI3NjkwXCI6XCJEXCIsXCI3NjkxXCI6XCJkXCIsXCI3NjkyXCI6XCJEXCIsXCI3NjkzXCI6XCJkXCIsXCI3Njk0XCI6XCJEXCIsXCI3Njk1XCI6XCJkXCIsXCI3Njk2XCI6XCJEXCIsXCI3Njk3XCI6XCJkXCIsXCI3Njk4XCI6XCJEXCIsXCI3Njk5XCI6XCJkXCIsXCI3NzA0XCI6XCJFXCIsXCI3NzA1XCI6XCJlXCIsXCI3NzA2XCI6XCJFXCIsXCI3NzA3XCI6XCJlXCIsXCI3NzEwXCI6XCJGXCIsXCI3NzExXCI6XCJmXCIsXCI3NzEyXCI6XCJHXCIsXCI3NzEzXCI6XCJnXCIsXCI3NzE0XCI6XCJIXCIsXCI3NzE1XCI6XCJoXCIsXCI3NzE2XCI6XCJIXCIsXCI3NzE3XCI6XCJoXCIsXCI3NzE4XCI6XCJIXCIsXCI3NzE5XCI6XCJoXCIsXCI3NzIwXCI6XCJIXCIsXCI3NzIxXCI6XCJoXCIsXCI3NzIyXCI6XCJIXCIsXCI3NzIzXCI6XCJoXCIsXCI3NzI0XCI6XCJJXCIsXCI3NzI1XCI6XCJpXCIsXCI3NzI4XCI6XCJLXCIsXCI3NzI5XCI6XCJrXCIsXCI3NzMwXCI6XCJLXCIsXCI3NzMxXCI6XCJrXCIsXCI3NzMyXCI6XCJLXCIsXCI3NzMzXCI6XCJrXCIsXCI3NzM0XCI6XCJMXCIsXCI3NzM1XCI6XCJsXCIsXCI3NzM4XCI6XCJMXCIsXCI3NzM5XCI6XCJsXCIsXCI3NzQwXCI6XCJMXCIsXCI3NzQxXCI6XCJsXCIsXCI3NzQyXCI6XCJNXCIsXCI3NzQzXCI6XCJtXCIsXCI3NzQ0XCI6XCJNXCIsXCI3NzQ1XCI6XCJtXCIsXCI3NzQ2XCI6XCJNXCIsXCI3NzQ3XCI6XCJtXCIsXCI3NzQ4XCI6XCJOXCIsXCI3NzQ5XCI6XCJuXCIsXCI3NzUwXCI6XCJOXCIsXCI3NzUxXCI6XCJuXCIsXCI3NzUyXCI6XCJOXCIsXCI3NzUzXCI6XCJuXCIsXCI3NzU0XCI6XCJOXCIsXCI3NzU1XCI6XCJuXCIsXCI3NzY0XCI6XCJQXCIsXCI3NzY1XCI6XCJwXCIsXCI3NzY2XCI6XCJQXCIsXCI3NzY3XCI6XCJwXCIsXCI3NzY4XCI6XCJSXCIsXCI3NzY5XCI6XCJyXCIsXCI3NzcwXCI6XCJSXCIsXCI3NzcxXCI6XCJyXCIsXCI3Nzc0XCI6XCJSXCIsXCI3Nzc1XCI6XCJyXCIsXCI3Nzc2XCI6XCJTXCIsXCI3Nzc3XCI6XCJzXCIsXCI3Nzc4XCI6XCJTXCIsXCI3Nzc5XCI6XCJzXCIsXCI3Nzg2XCI6XCJUXCIsXCI3Nzg3XCI6XCJ0XCIsXCI3Nzg4XCI6XCJUXCIsXCI3Nzg5XCI6XCJ0XCIsXCI3NzkwXCI6XCJUXCIsXCI3NzkxXCI6XCJ0XCIsXCI3NzkyXCI6XCJUXCIsXCI3NzkzXCI6XCJ0XCIsXCI3Nzk0XCI6XCJVXCIsXCI3Nzk1XCI6XCJ1XCIsXCI3Nzk2XCI6XCJVXCIsXCI3Nzk3XCI6XCJ1XCIsXCI3Nzk4XCI6XCJVXCIsXCI3Nzk5XCI6XCJ1XCIsXCI3ODA0XCI6XCJWXCIsXCI3ODA1XCI6XCJ2XCIsXCI3ODA2XCI6XCJWXCIsXCI3ODA3XCI6XCJ2XCIsXCI3ODA4XCI6XCJXXCIsXCI3ODA5XCI6XCJ3XCIsXCI3ODEwXCI6XCJXXCIsXCI3ODExXCI6XCJ3XCIsXCI3ODEyXCI6XCJXXCIsXCI3ODEzXCI6XCJ3XCIsXCI3ODE0XCI6XCJXXCIsXCI3ODE1XCI6XCJ3XCIsXCI3ODE2XCI6XCJXXCIsXCI3ODE3XCI6XCJ3XCIsXCI3ODE4XCI6XCJYXCIsXCI3ODE5XCI6XCJ4XCIsXCI3ODIwXCI6XCJYXCIsXCI3ODIxXCI6XCJ4XCIsXCI3ODIyXCI6XCJZXCIsXCI3ODIzXCI6XCJ5XCIsXCI3ODI0XCI6XCJaXCIsXCI3ODI1XCI6XCJ6XCIsXCI3ODI2XCI6XCJaXCIsXCI3ODI3XCI6XCJ6XCIsXCI3ODI4XCI6XCJaXCIsXCI3ODI5XCI6XCJ6XCIsXCI3ODM1XCI6XCJzXCIsXCI3ODQwXCI6XCJBXCIsXCI3ODQxXCI6XCJhXCIsXCI3ODQyXCI6XCJBXCIsXCI3ODQzXCI6XCJhXCIsXCI3ODY0XCI6XCJFXCIsXCI3ODY1XCI6XCJlXCIsXCI3ODY2XCI6XCJFXCIsXCI3ODY3XCI6XCJlXCIsXCI3ODY4XCI6XCJFXCIsXCI3ODY5XCI6XCJlXCIsXCI3ODgwXCI6XCJJXCIsXCI3ODgxXCI6XCJpXCIsXCI3ODgyXCI6XCJJXCIsXCI3ODgzXCI6XCJpXCIsXCI3ODg0XCI6XCJPXCIsXCI3ODg1XCI6XCJvXCIsXCI3ODg2XCI6XCJPXCIsXCI3ODg3XCI6XCJvXCIsXCI3OTA4XCI6XCJVXCIsXCI3OTA5XCI6XCJ1XCIsXCI3OTEwXCI6XCJVXCIsXCI3OTExXCI6XCJ1XCIsXCI3OTIyXCI6XCJZXCIsXCI3OTIzXCI6XCJ5XCIsXCI3OTI0XCI6XCJZXCIsXCI3OTI1XCI6XCJ5XCIsXCI3OTI2XCI6XCJZXCIsXCI3OTI3XCI6XCJ5XCIsXCI3OTI4XCI6XCJZXCIsXCI3OTI5XCI6XCJ5XCIsXCI4MzA1XCI6XCJpXCIsXCI4MzQxXCI6XCJoXCIsXCI4MzQyXCI6XCJrXCIsXCI4MzQzXCI6XCJsXCIsXCI4MzQ0XCI6XCJtXCIsXCI4MzQ1XCI6XCJuXCIsXCI4MzQ2XCI6XCJwXCIsXCI4MzQ3XCI6XCJzXCIsXCI4MzQ4XCI6XCJ0XCIsXCI4NDUwXCI6XCJjXCIsXCI4NDU4XCI6XCJnXCIsXCI4NDU5XCI6XCJoXCIsXCI4NDYwXCI6XCJoXCIsXCI4NDYxXCI6XCJoXCIsXCI4NDY0XCI6XCJpXCIsXCI4NDY1XCI6XCJpXCIsXCI4NDY2XCI6XCJsXCIsXCI4NDY3XCI6XCJsXCIsXCI4NDY4XCI6XCJsXCIsXCI4NDY5XCI6XCJuXCIsXCI4NDcyXCI6XCJwXCIsXCI4NDczXCI6XCJwXCIsXCI4NDc0XCI6XCJxXCIsXCI4NDc1XCI6XCJyXCIsXCI4NDc2XCI6XCJyXCIsXCI4NDc3XCI6XCJyXCIsXCI4NDg0XCI6XCJ6XCIsXCI4NDg4XCI6XCJ6XCIsXCI4NDkyXCI6XCJiXCIsXCI4NDkzXCI6XCJjXCIsXCI4NDk1XCI6XCJlXCIsXCI4NDk2XCI6XCJlXCIsXCI4NDk3XCI6XCJmXCIsXCI4NDk4XCI6XCJGXCIsXCI4NDk5XCI6XCJtXCIsXCI4NTAwXCI6XCJvXCIsXCI4NTA2XCI6XCJxXCIsXCI4NTEzXCI6XCJnXCIsXCI4NTE0XCI6XCJsXCIsXCI4NTE1XCI6XCJsXCIsXCI4NTE2XCI6XCJ5XCIsXCI4NTE3XCI6XCJkXCIsXCI4NTE4XCI6XCJkXCIsXCI4NTE5XCI6XCJlXCIsXCI4NTIwXCI6XCJpXCIsXCI4NTIxXCI6XCJqXCIsXCI4NTI2XCI6XCJmXCIsXCI4NTc5XCI6XCJDXCIsXCI4NTgwXCI6XCJjXCIsXCI4NzY1XCI6XCJzXCIsXCI4NzY2XCI6XCJzXCIsXCI4OTU5XCI6XCJ6XCIsXCI4OTk5XCI6XCJ4XCIsXCI5NzQ2XCI6XCJ4XCIsXCI5Nzc2XCI6XCJpXCIsXCI5ODY2XCI6XCJpXCIsXCIxMDAwNVwiOlwieFwiLFwiMTAwMDZcIjpcInhcIixcIjEwMDA3XCI6XCJ4XCIsXCIxMDAwOFwiOlwieFwiLFwiMTA2MjVcIjpcInpcIixcIjEwNjI2XCI6XCJ6XCIsXCIxMTM2MlwiOlwiTFwiLFwiMTEzNjRcIjpcIlJcIixcIjExMzY1XCI6XCJhXCIsXCIxMTM2NlwiOlwidFwiLFwiMTEzNzNcIjpcIkFcIixcIjExMzc0XCI6XCJNXCIsXCIxMTM3NVwiOlwiQVwiLFwiMTEzOTBcIjpcIlNcIixcIjExMzkxXCI6XCJaXCIsXCIxOTkwNFwiOlwiaVwiLFwiNDI4OTNcIjpcIkhcIixcIjQyOTIyXCI6XCJIXCIsXCI0MjkyM1wiOlwiRVwiLFwiNDI5MjRcIjpcIkdcIixcIjQyOTI1XCI6XCJMXCIsXCI0MjkyOFwiOlwiS1wiLFwiNDI5MjlcIjpcIlRcIixcIjYyOTM3XCI6XCJ4XCJ9Jyl9fSxlPXt9O2Z1bmN0aW9uIGEoaSl7dmFyIHI9ZVtpXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIHQ9ZVtpXT17aWQ6aSxleHBvcnRzOnt9fTtyZXR1cm4gbltpXS5jYWxsKHQuZXhwb3J0cyx0LHQuZXhwb3J0cyxhKSx0LmV4cG9ydHN9YS5uPW49Pnt2YXIgZT1uJiZuLl9fZXNNb2R1bGU/KCk9Pm4uZGVmYXVsdDooKT0+bjtyZXR1cm4gYS5kKGUse2E6ZX0pLGV9LGEuZD0obixlKT0+e2Zvcih2YXIgaSBpbiBlKWEubyhlLGkpJiYhYS5vKG4saSkmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGkse2VudW1lcmFibGU6ITAsZ2V0OmVbaV19KX0sYS5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKG4pe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksYS5vPShuLGUpPT5PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixlKSxhLnI9bj0+e1widW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC50b1N0cmluZ1RhZyYmT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sU3ltYm9sLnRvU3RyaW5nVGFnLHt2YWx1ZTpcIk1vZHVsZVwifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSl9O3ZhciBpPXt9OygoKT0+e1widXNlIHN0cmljdFwiO2EucihpKSxhLmQoaSx7ZGVmYXVsdDooKT0+cWEsbGludE15VGV4dDooKT0+amF9KTtjb25zdCBuPXJlcXVpcmUoXCJyZWFjdFwiKTt2YXIgZT1hKDY5Nykscj1hLm4oZSksdD1hKDM3OSksbz1hLm4odCksTT1hKDc5NSkscz1hLm4oTSksbD1hKDU2OSksYz1hLm4obCksUz1hKDU2NSksdT1hLm4oUyksZD1hKDIxNiksbT1hLm4oZCkscD1hKDU4OSksaD1hLm4ocCksZz1hKDc4MCkseT17fTtmdW5jdGlvbiBiKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG59KG4pfHxmdW5jdGlvbihuLGUpe3ZhciBhPW51bGw9PW4/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl18fG5bXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWEpe3ZhciBpLHIsdD1bXSxvPSEwLE09ITE7dHJ5e2ZvcihhPWEuY2FsbChuKTshKG89KGk9YS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKGkudmFsdWUpLCFlfHx0Lmxlbmd0aCE9PWUpO289ITApO31jYXRjaChuKXtNPSEwLHI9bn1maW5hbGx5e3RyeXtvfHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKE0pdGhyb3cgcn19cmV0dXJuIHR9fShuLGUpfHxmdW5jdGlvbihuLGUpe2lmKG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBEKG4sZSk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1hJiZuLmNvbnN0cnVjdG9yJiYoYT1uLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1hfHxcIlNldFwiPT09YT9BcnJheS5mcm9tKG4pOlwiQXJndW1lbnRzXCI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKT9EKG4sZSk6dm9pZCAwfX0obixlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIEQobixlKXsobnVsbD09ZXx8ZT5uLmxlbmd0aCkmJihlPW4ubGVuZ3RoKTtmb3IodmFyIGE9MCxpPW5ldyBBcnJheShlKTthPGU7YSsrKWlbYV09blthXTtyZXR1cm4gaX15LnN0eWxlVGFnVHJhbnNmb3JtPWgoKSx5LnNldEF0dHJpYnV0ZXM9dSgpLHkuaW5zZXJ0PWMoKS5iaW5kKG51bGwsXCJoZWFkXCIpLHkuZG9tQVBJPXMoKSx5Lmluc2VydFN0eWxlRWxlbWVudD1tKCksbygpKGcuWix5KSxnLlomJmcuWi5sb2NhbHMmJmcuWi5sb2NhbHM7Y29uc3QgZj1mdW5jdGlvbihlKXt2YXIgYSxpLHI9ZS5zdWdnZXN0aW9uLHQ9ZS5zb3VyY2VUZXh0LG89ZS5zYW1wbGVUZXh0LE09ZS5zZXRTYW1wbGVUZXh0LHM9ZS5yZW1vdmVTdWdnZXN0aW9uLGw9ZS5kaXNtaXNzZWRTdWdnZXN0aW9ucyxjPWUub25DbGljayxTPWUuaXNBY3RpdmUsdT1lLmFkZFRvRGljdGlvbmFyeSxkPWUub3BlbkxpbmtzSW5OZXdUYWIsbT1iKCgwLG4udXNlU3RhdGUpKCExKSwyKSxwPW1bMF0saD1tWzFdLGc9YigoMCxuLnVzZVN0YXRlKSgpLDIpLHk9Z1swXSxEPWdbMV0sZj1iKCgwLG4udXNlU3RhdGUpKFwic2Nyb2xsLXBvc2l0aW9uLXN0YXJ0XCIpLDIpLEc9ZlswXSx3PWZbMV0sdj0oMCxuLnVzZVJlZikoKSxrPSEobnVsbD09cnx8IXIuZXhwZWN0ZWQpLFI9ZnVuY3Rpb24oKXt2YXIgbj1cInJlcGxhY2VtZW50XCI7cmV0dXJuXCJyZXRleHQtc3BlbGxcIj09PXIuc291cmNlfHxcInJldGV4dC1jb250cmFjdGlvbnNcIj09PXIuc291cmNlfHxcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIj09PXIuc291cmNlfHxcInJldGV4dC1lcXVhbGl0eVwiPT09ci5zb3VyY2UmJms/bjpcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtcGFzc2l2ZVwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXJlYWRhYmlsaXR5XCI9PT1yLnNvdXJjZT9cImJhc2ljXCI6KChcInJldGV4dC1lcXVhbGl0eVwiPT09ci5zb3VyY2UmJiFrfHxcInJldGV4dC1uby1lbW9qaXNcIj09PXIuc291cmNlKSYmKG49XCJyZW1vdmFsXCIpLG4pfSxZPWZ1bmN0aW9uKCl7dmFyIG49XCJzZXZlcmVcIjtyZXR1cm5cInJldGV4dC1zcGVsbFwiPT09ci5zb3VyY2V8fFwicmV0ZXh0LXJlcGVhdGVkLXdvcmRzXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtY29udHJhY3Rpb25zXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlXCI9PT1yLnNvdXJjZXx8XCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiIT09ci5zb3VyY2UmJlwicmV0ZXh0LWVxdWFsaXR5XCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtcmVhZGFiaWxpdHlcIiE9PXIuc291cmNlJiZcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtbm8tZW1vamlzXCIhPT1yLnNvdXJjZSYmXCJyZXRleHQtcGFzc2l2ZVwiIT09ci5zb3VyY2V8fChuPVwibW9kZXJhdGVcIiksbn0sQT1mdW5jdGlvbigpe3ZhciBuPVwiU3VnZ2VzdGlvblwiO3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXNwZWxsXCI6bj1cIlNwZWxsaW5nXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiOmNhc2VcInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI6bj1cIkNvbnRyYWN0aW9uc1wiO2JyZWFrO2Nhc2VcInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiOm49XCJSZXBlYXRlZCB3b3Jkc1wiO2JyZWFrO2Nhc2VcInJldGV4dC1zZW50ZW5jZS1zcGFjaW5nXCI6Y2FzZVwicmV0ZXh0LW5vLWVtb2ppc1wiOm49XCJDb25zaXN0ZW50IHN0eWxlXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOm49XCJHcmFtbWFyXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWVxdWFsaXR5XCI6bj1cIkluc2Vuc2l0aXZlIGxhbmd1YWdlXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpuPVwiQ2xhcml0eVwiO2JyZWFrO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOm49XCJDYXBpdGFsaXphdGlvblwiO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG59cmV0dXJuIG59O3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoXCJsaVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLWNvbnRhaW5lciBcIi5jb25jYXQobC5zb21lKChmdW5jdGlvbihuKXtyZXR1cm4gbj09PXIubmFtZX0pKT9cInN1Z2dlc3Rpb24tZGlzbWlzc2VkXCI6XCJcIixcIiBcIikuY29uY2F0KFM/XCJhY3RpdmUtc3VnZ2VzdGlvblwiOlwiXCIpLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gYygpfX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcImFjdGl2ZS1zdWdnZXN0aW9uLXN1bW1hcnlcIn0sbi5jcmVhdGVFbGVtZW50KFwic3BhblwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtc2V2ZXJpdHkgXCIuY29uY2F0KFkoKSl9KSxuLmNyZWF0ZUVsZW1lbnQoXCJoNVwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtYWN0dWFsXCJ9LHIuYWN0dWFsLmxlbmd0aD4zMD9yLmFjdHVhbC5zdWJzdHJpbmcoMCwzMCkrXCIuLi5cIjpyLmFjdHVhbCksbi5jcmVhdGVFbGVtZW50KFwiaDZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLWxhYmVsXCJ9LEEoKSkpLG4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXJ1bGUtY29udGFpbmVyXCJ9LG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLXNldmVyaXR5IFwiLmNvbmNhdChZKCkpfSksbi5jcmVhdGVFbGVtZW50KFwiaDZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1ydWxlLWxhYmVsXCJ9LEEoKSkpLChpPWZ1bmN0aW9uKCl7dmFyIGU9XCJyZW1vdmFsXCI9PT1SKCk/ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCxlPXIucG9zaXRpb24uZW5kLm9mZnNldCxhPW8uc3Vic3RyaW5nKDAsbiksaT1vLnN1YnN0cmluZyhlKSx0PWEuc3Vic3RyaW5nKGEubGVuZ3RoLTEsYS5sZW5ndGgpO1wiIFwiPT09aS5zdWJzdHJpbmcoMCwxKT9pPWkuc3Vic3RyaW5nKDEpOlwiIFwiPT09dCYmKGE9YS5zdWJzdHJpbmcoMCxhLmxlbmd0aC0xKSk7dmFyIHM9W2EsaV07cz1zLmpvaW4oXCJcIiksTShzKX0oKX06bnVsbDtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50XCIsb25DbGljazplfSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1jdXJyZW50LXRleHRcIn0sci5hY3R1YWwpKX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgc3VnZ2VzdGlvbi1zdW1tYXJ5LWNvbnRhaW5lciBcXG4gICAgICAgIHN1bW1hcnktXCIuY29uY2F0KFIoKSxcIlxcbiAgICAgIFwiKX0sXCJyZXBsYWNlbWVudFwiPT09UigpJiZpKCksXCJyZW1vdmFsXCI9PT1SKCkmJmkoKSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJm4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFVpSUdobGFXZG9kRDBpTVRNaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TlNBeE15SWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhCaGRHZ2daRDBpVFRFZ05TNDNOVU13TGpVNE5UYzROaUExTGpjMUlEQXVNalVnTmk0d09EVTNPU0F3TGpJMUlEWXVOVU13TGpJMUlEWXVPVEUwTWpFZ01DNDFPRFUzT0RZZ055NHlOU0F4SURjdU1qVldOUzQzTlZwTk1UUXVOVE13TXlBM0xqQXpNRE16UXpFMExqZ3lNeklnTmk0M016YzBOQ0F4TkM0NE1qTXlJRFl1TWpZeU5UWWdNVFF1TlRNd015QTFMamsyT1RZM1REa3VOelUzTXpZZ01TNHhPVFkzUXprdU5EWTBORGNnTUM0NU1ETTRNRFlnT0M0NU9EazFPU0F3TGprd016Z3dOaUE0TGpZNU5qY2dNUzR4T1RZM1F6Z3VOREF6T0RFZ01TNDBPRGsxT1NBNExqUXdNemd4SURFdU9UWTBORGNnT0M0Mk9UWTNJREl1TWpVM016Wk1NVEl1T1RNNU15QTJMalZNT0M0Mk9UWTNJREV3TGpjME1qWkRPQzQwTURNNE1TQXhNUzR3TXpVMUlEZ3VOREF6T0RFZ01URXVOVEV3TkNBNExqWTVOamNnTVRFdU9EQXpNME00TGprNE9UVTVJREV5TGpBNU5qSWdPUzQwTmpRME55QXhNaTR3T1RZeUlEa3VOelUzTXpZZ01URXVPREF6TTB3eE5DNDFNekF6SURjdU1ETXdNek5hVFRFZ055NHlOVWd4TkZZMUxqYzFTREZXTnk0eU5Wb2lJR1pwYkd3OUlpTTVSa0UxUVRVaUx6NEtQQzl6ZG1jK0NnPT1cIixhbHQ6XCJhcnJvdyBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LWFycm93XCJ9KSxcInJlcGxhY2VtZW50XCI9PT1SKCkmJm4uY3JlYXRlRWxlbWVudChcImRpdlwiLHtjbGFzc05hbWU6XCJcXG4gICAgICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzLWNvbnRhaW5lclxcbiAgICAgICAgICAgIFwiLmNvbmNhdChHLFwiXFxuICAgICAgICAgICAgXCIpLmNvbmNhdCgwPT09ci5leHBlY3RlZC5sZW5ndGg/XCJuby1yZXBsYWNlbWVudC1jb250YWluZXJcIjpcIlwiLFwiXFxuICAgICAgICAgIFwiKX0sbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcIlxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLXN1bW1hcnktcmVwbGFjZW1lbnRzIFxcbiAgICAgICAgICAgICAgICBcIi5jb25jYXQoMD09PXIuZXhwZWN0ZWQubGVuZ3RoP1wibm8tcmVwbGFjZW1lbnRcIjpcIlwiLFwiXFxuICAgICAgICAgICAgICBcIiksb25TY3JvbGw6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtpZih2LmN1cnJlbnQpe3ZhciBuPXYuY3VycmVudCxlPW4uc2Nyb2xsTGVmdCxhPW4uc2Nyb2xsV2lkdGgsaT1uLmNsaWVudFdpZHRoO3coMD09PWU/XCJzY3JvbGwtcG9zaXRpb24tc3RhcnRcIjplK2k+PWE/XCJzY3JvbGwtcG9zaXRpb24tZW5kXCI6XCJzY3JvbGwtcG9zaXRpb24tbWlkZGxlXCIpfX0oKX0scmVmOnZ9LChyLmFjdHVhbC5zdWJzdHJpbmcoMCwxKS50b1VwcGVyQ2FzZSgpLG51bGw9PXJ8fG51bGw9PT0oYT1yLmV4cGVjdGVkKXx8dm9pZCAwPT09YT92b2lkIDA6YS5tYXAoKGZ1bmN0aW9uKGUsYSl7dmFyIGk9XCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIj09PXIuc291cmNlP3IuZXhwZWN0ZWRbYV06ZnVuY3Rpb24obixlKXtsZXQgYT0tMSxpPSExO2lmKGUudG9VcHBlckNhc2UoKT09PWUpcmV0dXJuIG4udG9VcHBlckNhc2UoKTtpZihlLnRvTG93ZXJDYXNlKCk9PT1lKXJldHVybiBuLnRvTG93ZXJDYXNlKCk7Zm9yKDsrK2E8ZS5sZW5ndGg7KXtjb25zdCBuPWUuY2hhckF0KGEpO2lmKG4udG9VcHBlckNhc2UoKSE9PW4udG9Mb3dlckNhc2UoKSl7Y29uc3Qgcj1lLnNsaWNlKGErMSk7aT1uPT09bi50b1VwcGVyQ2FzZSgpJiZyPT09ci50b0xvd2VyQ2FzZSgpO2JyZWFrfX1pZihpKWZvcihhPS0xOysrYTxuLmxlbmd0aDspe2NvbnN0IGU9bi5jaGFyQXQoYSkudG9VcHBlckNhc2UoKTtpZihlIT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiBuLnNsaWNlKDAsYSkrZStuLnNsaWNlKGErMSkudG9Mb3dlckNhc2UoKX1yZXR1cm4gbn0oZSxyLmFjdHVhbCk7cmV0dXJuIGE8NT9uLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1yZXBsYWNlbWVudFwiLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gbj1lLGE9ci5wb3NpdGlvbi5zdGFydC5vZmZzZXQsaT1yLnBvc2l0aW9uLmVuZC5vZmZzZXQsdD0odD1bby5zdWJzdHJpbmcoMCxhKSxuLG8uc3Vic3RyaW5nKGkpXSkuam9pbihcIlwiKSx2b2lkIE0odCk7dmFyIG4sYSxpLHR9LGtleTphfSxpKTpcIlwifSkpKSwwPT09ci5leHBlY3RlZC5sZW5ndGgmJlwiP1wiKSksXCJiYXNpY1wiPT09UigpJiZmdW5jdGlvbigpe3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXBhc3NpdmVcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoZSBwYXNzaXZlIHZvaWNlOiBcIixcIiBcIixuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcImJhc2ljLXN1bW1hcnktZXhhbXBsZVwifSwnXCIuLi4nLChlPXIucG9zaXRpb24uc3RhcnQub2Zmc2V0LGE9ci5wb3NpdGlvbi5lbmQub2Zmc2V0LHQuc3Vic3RyaW5nKGUtMTAsYSkpLCdcIicpKTtjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOnJldHVyblwiU2VudGVuY2Ugc3BhY2luZ1wiO2Nhc2VcInJldGV4dC1yZWFkYWJpbGl0eVwiOnJldHVyblwiRGlmZmljdWx0IHNlbnRlbmNlIHRvIHJlYWRcIjtkZWZhdWx0OnJldHVyblwiU3VnZ2VzdGlvblwifXZhciBlLGF9KCkpKSxuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1kZXNjcmlwdGlvblwifSxuLmNyZWF0ZUVsZW1lbnQoXCJwXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tZGVzY3JpcHRpb24tdGV4dFwifSxmdW5jdGlvbigpe3ZhciBlLGE9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChcInN0cm9uZ1wiLG51bGwsbi5jcmVhdGVFbGVtZW50KFwiZW1cIixudWxsLGUpKX07c3dpdGNoKHIuc291cmNlKXtjYXNlXCJyZXRleHQtc3BlbGxcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIlRoZSB3b3JkIFwiLGEoci5hY3R1YWwpLFwiIGlzIG5vdCBpbiBvdXIgZGljdGlvbmFyeS4gSWYgeW914oCZcmUgc3VyZSB0aGlzIHNwZWxsaW5nIGlzIGNvcnJlY3QsIHlvdSBjYW4gc3VnZ2VzdCB3ZSBhZGQgaXQgdG8gdGhlIGRpY2l0b25hcnkgdG8gcHJldmVudCBmdXR1cmUgYWxlcnRzLlwiKTtjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6cmV0dXJuXCJtaXNzaW5nLXNtYXJ0LWFwb3N0cm9waGVcIj09PXIucnVsZUlkP24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJJdCBhcHBlYXJzIHlvdXIgbWlzc2luZyBhbiBhcG9zdHJvcGhlIGluXCIsXCIgXCIsYShyLmFjdHVhbCksXCIuXCIpOlwic21hcnQtYXBvc3Ryb3BoZVwiPT09ci5ydWxlSWQ/bi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkl0IGFwcGVhcnMgeW91ciB1c2luZyB0aGUgd3Jvbmcga2luZCBvZiBhcG9zdHJvcGhlIGluIFwiLFwiIFwiLGEoci5hY3R1YWwpLFwiLiBDb25zaWRlciBjaGFuZ2luZyBpdCB0byBhIHNtYXJ0IGFwb3N0cm9waGUgbGlrZSB0aGlzOiBcIixhKHIuZXhwZWN0ZWQpLFwiLlwiKTpyLnJlYXNvbjtjYXNlXCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIk9vcHMhIEl0IGFwcGVhcnMgdGhhdCB5b3UgdHlwZWQgXCIsXCIgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiB0d2ljZSBpbiBhIHJvdy4gQ29uc2lkZXIgZGVsZXRlaW5nIG9uZSBvZiB0aGVtLlwiKTtjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgYXBwZWFycyB0aGF0IHlvdSB1c2VkIFwiLGEoci5hY3R1YWwubGVuZ3RoKSxcIiBcIixcIiBzcGFjZXMgYmVmb3JlIHlvdXIgc2VudGVuY2UuIEF0IE5ldyBSZWxpYywgd2UgdXNlIDEgc3BhY2UuXCIpO2Nhc2VcInJldGV4dC1wYXNzaXZlXCI6cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJUaGlzIHNlbnRlbmNlIGFwcGVhcnMgdG8gYmUgd3JpdHRlbiBpbiB0aGUgcGFzc2l2ZSB2b2ljZS4gQ29uc2lkZXIgcmV3cml0aW5nIHRoaXMgaW4gdGhlIGFjdGl2ZSB2b2ljZS5cIik7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiVGhlIGFydGljbGUgXCIsYShyLmFjdHVhbCksXCIgXCIsXCIgXCIsXCIgbWF5IGJlIGluY29ycmVjdC4gQ29uc2lkZXIgY2hhbmdpbmcgaXQgdG8gXCIsXCIgXCIsYShyLmV4cGVjdGVkKSxcIiBzbyB0aGF0IGl0IGFncmVlcyB3aXRoIHRoZSBiZWdpbm5pbmcgc291bmQgb2YgdGhlIGZvbGxvd2luZyB3b3JkLlwiKTtjYXNlXCJyZXRleHQtZXF1YWxpdHlcIjp2YXIgaT1rP24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsXCJDb25zaWRlciB1c2luZyBcIixhKHIuZXhwZWN0ZWRbMF0pLFwiIGluc3RlYWQuXCIpOlwiVHJ5IG5vdCB0byB1c2UgaXQuXCI7cmV0dXJuIG4uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsYShyLmFjdHVhbCksXCIgXCIsXCIgXCIsXCIgbWF5IGJlIGluc2Vuc2l0aXZlLlwiLFwiIFwiLGkpO2Nhc2VcInJldGV4dC1yZWFkYWJpbGl0eVwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiV2UncmUgXCIsTWF0aC5yb3VuZCgxMDAqci5jb25maWRlbmNlKSxcIiUgc3VyZSB0aGUgc2VudGVuY2UgYmVnaW5uaW5nIHdpdGggXCIsYSgoZT1yLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCx0LnN1YnN0cmluZyhlLGUrMjApKSksXCIuLi4gaXMgZGlmZmljdWx0IHRvIHJlYWQuIENvbnNpZGVyIHJld3JpdGluZyBpdCB0byBtYWtlIGl0IGVhc2llciB0byByZWFkLlwiKTtjYXNlXCJyZXRleHQtdXNlLWNvbnRyYWN0aW9uc1wiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiQ29uc2lkZXIgY2hhbmdpbmcgXCIsYShyLmFjdHVhbCksXCIgdG8gXCIsXCIgXCIsYShyLmV4cGVjdGVkWzBdKSxcIiB0byBnaXZlIHlvdXIgd3JpdGluZyBhIG1vcmUgY29udmVyc2F0aW9uYWwgYW5kIHBlcnNvbmFsIGZlZWwuXCIpO2Nhc2VcInJldGV4dC1uby1lbW9qaXNcIjpyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxcIkF2b2lkIHVzaW5nIGVtb2ppcyBpbiBVSSB0ZXh0LiBJZiB5b3UgaGF2ZSB0aGUgdXJnZSB0byB1c2UgYW4gZW1vamkgLCBjb25zdWx0IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcImFcIix7aHJlZjpcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vd3JpdGluZy9cIix0YXJnZXQ6ZD9cIl9ibGFua1wiOlwiX3NlbGZcIn0sXCJvdXIgZG9jcyBmb3Igdm9pY2UgYW5kIHRvbmVcIiksXCIgXCIsXCJ0byByZXdyaXRlIHlvdXIgbWVzc2FnZSB1bnRpbCBpdCBhY2hpZXZlcyB5b3VyIGdvYWwuXCIpO2Nhc2VcInJldGV4dC1jYXBpdGFsaXphdGlvblwiOnJldHVybiBuLmNyZWF0ZUVsZW1lbnQobi5GcmFnbWVudCxudWxsLFwiSXQgbG9va3MgbGlrZSBcIixhKHIuYWN0dWFsKSxcIiBpc24ndCBwcm9wZXJseSBjYXBpdGFsaXplZC4gVHJ5IFwiLGEoci5leHBlY3RlZFswXSksXCIgaW5zdGVhZC5cIik7ZGVmYXVsdDpyZXR1cm5cIlVoIG9oXCJ9fSgpKSksbi5jcmVhdGVFbGVtZW50KFwiZGl2XCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb25zLWN0YXNcIn0sZnVuY3Rpb24oKXt2YXIgZT1cIlwiO3N3aXRjaChyLnNvdXJjZSl7Y2FzZVwicmV0ZXh0LXNwZWxsXCI6ZT1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FtZXJpY2FuX0VuZ2xpc2hcIjticmVhaztjYXNlXCJyZXRleHQtY29udHJhY3Rpb25zXCI6ZT1cImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtY29udHJhY3Rpb25zI3VzZVwiLFwibWlzc2luZy1zbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJRD9lPVwiaHR0cHM6Ly93d3cuZ3JhbW1hcmJvb2suY29tL3B1bmN0dWF0aW9uL2Fwb3N0cm8uYXNwXCI6XCJzbWFydC1hcG9zdHJvcGhlXCI9PT1yLnJ1bGVJRCYmKGU9XCJodHRwczovL3ByYWN0aWNhbHR5cG9ncmFwaHkuY29tL3N0cmFpZ2h0LWFuZC1jdXJseS1xdW90ZXMuaHRtbFwiKTticmVhaztjYXNlXCJyZXRleHQtcmVwZWF0ZWQtd29yZHNcIjplPVwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZXBlYXRlZC13b3JkcyNyZWFkbWVcIjticmVhaztjYXNlXCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiOmU9XCJodHRwczovL3ByYWN0aWNhbHR5cG9ncmFwaHkuY29tL29uZS1zcGFjZS1iZXR3ZWVuLXNlbnRlbmNlcy5odG1sXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiOmU9XCJodHRwczovL3d3dy5lZi5lZHUvZW5nbGlzaC1yZXNvdXJjZXMvZW5nbGlzaC1ncmFtbWFyL2luZGVmaW5pdGUtYXJ0aWNsZXMvXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LWVxdWFsaXR5XCI6ZT1cImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtZXF1YWxpdHkvYmxvYi9tYWluL3J1bGVzLm1kXCI7YnJlYWs7Y2FzZVwicmV0ZXh0LXJlYWRhYmlsaXR5XCI6ZT1cImh0dHBzOi8vd3d3LmRvcmlzYW5kYmVydGllLmNvbS9nb29kY29weWJhZGNvcHkvMjAxNy8wMi8xNC9zZW50ZW5jZS1zdHJ1Y3R1cmUtaG93LXRvLW1ha2UteW91ci1zZW50ZW5jZXMtbXVjaC1lYXNpZXItdG8tcmVhZFwiO2JyZWFrO2Nhc2VcInJldGV4dC1wYXNzaXZlXCI6ZT1cImh0dHBzOi8vd3d3LmdyYW1tYXJseS5jb20vYmxvZy9hY3RpdmUtdnMtcGFzc2l2ZS12b2ljZS9cIjticmVhaztjYXNlXCJyZXRleHQtdXNlLWNvbnRyYWN0aW9uc1wiOmU9XCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL3dyaXRpbmcvY29udHJhY3Rpb25zL1wiO2JyZWFrO2Nhc2VcInJldGV4dC1uby1lbW9qaXNcIjplPVwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2Vtb2ppcy9cIjticmVhaztjYXNlXCJyZXRleHQtY2FwaXRhbGl6YXRpb25cIjplPVwiaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL3N0eWxlLWd1aWRlL2NhcGl0YWxpemF0aW9uL3Byb2R1Y3QtY2FwYWJpbGl0eS1mZWF0dXJlLXVzYWdlLyN3aGVuLXRvLXVzZS10aXRsZS1jYXNlXCI7YnJlYWs7ZGVmYXVsdDplPVwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9ucjEtcHJvZHVjdC9kZXNpZ24vd3JpdGluZ1wifXJldHVyblwicmV0ZXh0LXNwZWxsXCI9PT1yLnNvdXJjZT9uLmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5XCJ9LG4uY3JlYXRlRWxlbWVudChcImltZ1wiLHtzcmM6XCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlPU0lnYUdWcFoyaDBQU0k1SWlCMmFXVjNRbTk0UFNJd0lEQWdPU0E1SWlCbWFXeHNQU0p1YjI1bElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRrZ05FZzFWakJJTkZZMFNEQldOVWcwVmpsSU5WWTFTRGxXTkZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcInBsdXMgaWNvblwiLGNsYXNzTmFtZTpcInN1Z2dlc3Rpb24tc3VtbWFyeS1wbHVzLWljb25cIn0pLG4uY3JlYXRlRWxlbWVudChcInNwYW5cIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtbGFiZWxcIixvbkNsaWNrOmZ1bmN0aW9uKCl7cmV0dXJuIHUoci5hY3R1YWwsci5uYW1lKSx2b2lkIHMoci5uYW1lKX19LFwiQWRkIHRvIGRpY3Rpb25hcnlcIikpOm4uY3JlYXRlRWxlbWVudChcImFcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1jdGEtc2Vjb25kYXJ5XCIsaHJlZjplLHRhcmdldDpkP1wiX2JsYW5rXCI6XCJfc2VsZlwifSxuLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7c3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRVaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5TQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnYjNCaFkybDBlVDBpTUM0NElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRUQWdOeTQxUXpBZ015NDBJRE11TkNBd0lEY3VOU0F3UXpFeExqWWdNQ0F4TlNBekxqUWdNVFVnTnk0MVF6RTFJREV4TGpZZ01URXVOaUF4TlNBM0xqVWdNVFZETXk0MElERTFJREFnTVRFdU5pQXdJRGN1TlZwTk1TQTNMalZETVNBeE1TNHhJRE11T1NBeE5DQTNMalVnTVRSRE1URXVNU0F4TkNBeE5DQXhNUzR4SURFMElEY3VOVU14TkNBekxqa2dNVEV1TVNBeElEY3VOU0F4UXpNdU9TQXhJREVnTXk0NUlERWdOeTQxV2swNElERXhWakV5U0RkV01URklPRnBOTlNBMUxqVkROU0EwTGpFZ05pNHhJRE1nTnk0MUlETkRPQzQ1SURNZ01UQWdOQzR4SURFd0lEVXVOVU14TUNBMkxqY3lPREF5SURrdU16ZzBORGdnTnk0eE9EWTJNeUE0TGpnNU5UZ3hJRGN1TlRVd056TkRPQzQ0TWpjek55QTNMall3TVRjeUlEZ3VOell4TkRJZ055NDJOVEE0TmlBNExqY2dOeTQzUXpndU5qYzJOak1nTnk0M01UUXdNaUE0TGpZMU16a3hJRGN1TnpJM05qRWdPQzQyTXpFNE5DQTNMamMwTURneFF6Z3VNVGd4TnpRZ09DNHdNU0E0SURndU1URTROeUE0SURndU5WWTVWakV3U0RkV09WWTRMalZETnlBM0xqVTVOVFEwSURjdU5UY3lOelVnTnk0eE9ERTRNaUEzTGprM09ERTBJRFl1T0RnNU1EZERPQzR3TWpBNU1TQTJMamcxT0RFNElEZ3VNRFl4T0RJZ05pNDRNamcyTXlBNExqRWdOaTQ0UXpndU1USXlPVGNnTmk0M09EWXlNaUE0TGpFME5UY3lJRFl1TnpjeU5qVWdPQzR4TmpneU5DQTJMamMxT1RJeVF6Z3VOak0xT1NBMkxqUTRNRE0ySURrZ05pNHlOak15TlNBNUlEVXVOVU01SURRdU55QTRMak1nTkNBM0xqVWdORU0yTGpjZ05DQTJJRFF1TnlBMklEVXVOVlkyU0RWV05TNDFXaUlnWm1sc2JEMGlJelpGTnpVM05TSXZQZ284TDNOMlp6NEtcIixhbHQ6XCJIZWxwIGljb25cIixjbGFzc05hbWU6XCJzdWdnZXN0aW9uLXN1bW1hcnktaGVscC1pY29uXCJ9KSxuLmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY3RhLWxhYmVsXCJ9LFwiTGVhcm4gbW9yZVwiKSl9KCksbi5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIse2NsYXNzTmFtZTpcInN1Z2dlc3Rpb24tY3RhLXNlY29uZGFyeSBzdWdnZXN0aW9uLWN0YS1pY29uLW9ubHkgXCIuY29uY2F0KHA/XCJkZWxldGUtaXMtaG92ZXJlZFwiOlwiXCIpLG9uTW91c2VFbnRlcjpmdW5jdGlvbigpe3JldHVybiBEKHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aCghMCl9KSw1MDApKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoeSl9fSxvbk1vdXNlTGVhdmU6ZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KHkpLHZvaWQgaCghMSl9LG9uQ2xpY2s6ZnVuY3Rpb24oKXtzKHIubmFtZSl9fSxuLmNyZWF0ZUVsZW1lbnQoXCJpbWdcIix7c3JjOlwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRJaUlHaGxhV2RvZEQwaU1UVWlJSFpwWlhkQ2IzZzlJakFnTUNBeE1pQXhOU0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnYjNCaFkybDBlVDBpTUM0NElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRUa2dNRWd6VmpKSU1GWXpTREZXTVRWSU1URldNMGd4TWxZeVNEbFdNRnBOTkNBeFNEaFdNa2cwVmpGYVRUSWdNVFJJTVRCV00wZ3lWakUwV2swMElEVklOVll4TWtnMFZqVmFUVGdnTlVnM1ZqRXlTRGhXTlZvaUlHWnBiR3c5SWlNMlJUYzFOelVpTHo0S1BDOXpkbWMrQ2c9PVwiLGFsdDpcIkRlbGV0ZSBpY29uXCIsY2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1zdW1tYXJ5LXRyYXNoLWljb25cIn0pKSkpfTtmdW5jdGlvbiBHKG4pe2lmKG4pdGhyb3cgbn12YXIgdz1hKDczOCksdj1hKDQ3MCk7ZnVuY3Rpb24gayhuKXtpZihcIltvYmplY3QgT2JqZWN0XVwiIT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pKXJldHVybiExO2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pO3JldHVybiBudWxsPT09ZXx8ZT09PU9iamVjdC5wcm90b3R5cGV9dmFyIFI9e30uaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gWShuKXtyZXR1cm4gbiYmXCJvYmplY3RcIj09dHlwZW9mIG4/Ui5jYWxsKG4sXCJwb3NpdGlvblwiKXx8Ui5jYWxsKG4sXCJ0eXBlXCIpP1Aobi5wb3NpdGlvbik6Ui5jYWxsKG4sXCJzdGFydFwiKXx8Ui5jYWxsKG4sXCJlbmRcIik/UChuKTpSLmNhbGwobixcImxpbmVcIil8fFIuY2FsbChuLFwiY29sdW1uXCIpP0Eobik6XCJcIjpcIlwifWZ1bmN0aW9uIEEobil7cmV0dXJuIEMobiYmbi5saW5lKStcIjpcIitDKG4mJm4uY29sdW1uKX1mdW5jdGlvbiBQKG4pe3JldHVybiBBKG4mJm4uc3RhcnQpK1wiLVwiK0EobiYmbi5lbmQpfWZ1bmN0aW9uIEMobil7cmV0dXJuIG4mJlwibnVtYmVyXCI9PXR5cGVvZiBuP246MX1jbGFzcyBUIGV4dGVuZHMgRXJyb3J7Y29uc3RydWN0b3IobixlLGEpe3ZhciBpLHI9W251bGwsbnVsbF0sdD17c3RhcnQ6e2xpbmU6bnVsbCxjb2x1bW46bnVsbH0sZW5kOntsaW5lOm51bGwsY29sdW1uOm51bGx9fTtzdXBlcigpLFwic3RyaW5nXCI9PXR5cGVvZiBlJiYoYT1lLGU9bnVsbCksXCJzdHJpbmdcIj09dHlwZW9mIGEmJigtMT09PShpPWEuaW5kZXhPZihcIjpcIikpP3JbMV09YTooclswXT1hLnNsaWNlKDAsaSksclsxXT1hLnNsaWNlKGkrMSkpKSxlJiYoXCJ0eXBlXCJpbiBlfHxcInBvc2l0aW9uXCJpbiBlP2UucG9zaXRpb24mJih0PWUucG9zaXRpb24pOlwic3RhcnRcImluIGV8fFwiZW5kXCJpbiBlP3Q9ZTooXCJsaW5lXCJpbiBlfHxcImNvbHVtblwiaW4gZSkmJih0LnN0YXJ0PWUpKSx0aGlzLm5hbWU9WShlKXx8XCIxOjFcIix0aGlzLm1lc3NhZ2U9XCJvYmplY3RcIj09dHlwZW9mIG4/bi5tZXNzYWdlOm4sdGhpcy5zdGFjaz1cIm9iamVjdFwiPT10eXBlb2Ygbj9uLnN0YWNrOlwiXCIsdGhpcy5yZWFzb249dGhpcy5tZXNzYWdlLHRoaXMuZmF0YWwsdGhpcy5saW5lPXQuc3RhcnQubGluZSx0aGlzLmNvbHVtbj10LnN0YXJ0LmNvbHVtbix0aGlzLnNvdXJjZT1yWzBdLHRoaXMucnVsZUlkPXJbMV0sdGhpcy5wb3NpdGlvbj10LHRoaXMuYWN0dWFsLHRoaXMuZXhwZWN0ZWQsdGhpcy5maWxlLHRoaXMudXJsLHRoaXMubm90ZX19VC5wcm90b3R5cGUuZmlsZT1cIlwiLFQucHJvdG90eXBlLm5hbWU9XCJcIixULnByb3RvdHlwZS5yZWFzb249XCJcIixULnByb3RvdHlwZS5tZXNzYWdlPVwiXCIsVC5wcm90b3R5cGUuc3RhY2s9XCJcIixULnByb3RvdHlwZS5mYXRhbD1udWxsLFQucHJvdG90eXBlLmNvbHVtbj1udWxsLFQucHJvdG90eXBlLmxpbmU9bnVsbCxULnByb3RvdHlwZS5zb3VyY2U9bnVsbCxULnByb3RvdHlwZS5ydWxlSWQ9bnVsbCxULnByb3RvdHlwZS5wb3NpdGlvbj1udWxsO2NvbnN0IHg9ZnVuY3Rpb24obixlKXtpZih2b2lkIDAhPT1lJiZcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtaKG4pO2xldCBhLGk9MCxyPS0xLHQ9bi5sZW5ndGg7aWYodm9pZCAwPT09ZXx8MD09PWUubGVuZ3RofHxlLmxlbmd0aD5uLmxlbmd0aCl7Zm9yKDt0LS07KWlmKDQ3PT09bi5jaGFyQ29kZUF0KHQpKXtpZihhKXtpPXQrMTticmVha319ZWxzZSByPDAmJihhPSEwLHI9dCsxKTtyZXR1cm4gcjwwP1wiXCI6bi5zbGljZShpLHIpfWlmKGU9PT1uKXJldHVyblwiXCI7bGV0IG89LTEsTT1lLmxlbmd0aC0xO2Zvcig7dC0tOylpZig0Nz09PW4uY2hhckNvZGVBdCh0KSl7aWYoYSl7aT10KzE7YnJlYWt9fWVsc2UgbzwwJiYoYT0hMCxvPXQrMSksTT4tMSYmKG4uY2hhckNvZGVBdCh0KT09PWUuY2hhckNvZGVBdChNLS0pP008MCYmKHI9dCk6KE09LTEscj1vKSk7cmV0dXJuIGk9PT1yP3I9bzpyPDAmJihyPW4ubGVuZ3RoKSxuLnNsaWNlKGkscil9LHo9ZnVuY3Rpb24obil7aWYoWihuKSwwPT09bi5sZW5ndGgpcmV0dXJuXCIuXCI7bGV0IGUsYT0tMSxpPW4ubGVuZ3RoO2Zvcig7LS1pOylpZig0Nz09PW4uY2hhckNvZGVBdChpKSl7aWYoZSl7YT1pO2JyZWFrfX1lbHNlIGV8fChlPSEwKTtyZXR1cm4gYTwwPzQ3PT09bi5jaGFyQ29kZUF0KDApP1wiL1wiOlwiLlwiOjE9PT1hJiY0Nz09PW4uY2hhckNvZGVBdCgwKT9cIi8vXCI6bi5zbGljZSgwLGEpfSxFPWZ1bmN0aW9uKG4pe1oobik7bGV0IGUsYT1uLmxlbmd0aCxpPS0xLHI9MCx0PS0xLG89MDtmb3IoO2EtLTspe2NvbnN0IE09bi5jaGFyQ29kZUF0KGEpO2lmKDQ3IT09TSlpPDAmJihlPSEwLGk9YSsxKSw0Nj09PU0/dDwwP3Q9YToxIT09byYmKG89MSk6dD4tMSYmKG89LTEpO2Vsc2UgaWYoZSl7cj1hKzE7YnJlYWt9fXJldHVybiB0PDB8fGk8MHx8MD09PW98fDE9PT1vJiZ0PT09aS0xJiZ0PT09cisxP1wiXCI6bi5zbGljZSh0LGkpfSxCPWZ1bmN0aW9uKC4uLm4pe2xldCBlLGE9LTE7Zm9yKDsrK2E8bi5sZW5ndGg7KVooblthXSksblthXSYmKGU9dm9pZCAwPT09ZT9uW2FdOmUrXCIvXCIrblthXSk7cmV0dXJuIHZvaWQgMD09PWU/XCIuXCI6ZnVuY3Rpb24obil7WihuKTtjb25zdCBlPTQ3PT09bi5jaGFyQ29kZUF0KDApO2xldCBhPWZ1bmN0aW9uKG4sZSl7bGV0IGEsaSxyPVwiXCIsdD0wLG89LTEsTT0wLHM9LTE7Zm9yKDsrK3M8PW4ubGVuZ3RoOyl7aWYoczxuLmxlbmd0aClhPW4uY2hhckNvZGVBdChzKTtlbHNle2lmKDQ3PT09YSlicmVhazthPTQ3fWlmKDQ3PT09YSl7aWYobz09PXMtMXx8MT09PU0pO2Vsc2UgaWYobyE9PXMtMSYmMj09PU0pe2lmKHIubGVuZ3RoPDJ8fDIhPT10fHw0NiE9PXIuY2hhckNvZGVBdChyLmxlbmd0aC0xKXx8NDYhPT1yLmNoYXJDb2RlQXQoci5sZW5ndGgtMikpaWYoci5sZW5ndGg+Mil7aWYoaT1yLmxhc3RJbmRleE9mKFwiL1wiKSxpIT09ci5sZW5ndGgtMSl7aTwwPyhyPVwiXCIsdD0wKToocj1yLnNsaWNlKDAsaSksdD1yLmxlbmd0aC0xLXIubGFzdEluZGV4T2YoXCIvXCIpKSxvPXMsTT0wO2NvbnRpbnVlfX1lbHNlIGlmKHIubGVuZ3RoPjApe3I9XCJcIix0PTAsbz1zLE09MDtjb250aW51ZX1lJiYocj1yLmxlbmd0aD4wP3IrXCIvLi5cIjpcIi4uXCIsdD0yKX1lbHNlIHIubGVuZ3RoPjA/cis9XCIvXCIrbi5zbGljZShvKzEscyk6cj1uLnNsaWNlKG8rMSxzKSx0PXMtby0xO289cyxNPTB9ZWxzZSA0Nj09PWEmJk0+LTE/TSsrOk09LTF9cmV0dXJuIHJ9KG4sIWUpO3JldHVybiAwIT09YS5sZW5ndGh8fGV8fChhPVwiLlwiKSxhLmxlbmd0aD4wJiY0Nz09PW4uY2hhckNvZGVBdChuLmxlbmd0aC0xKSYmKGErPVwiL1wiKSxlP1wiL1wiK2E6YX0oZSl9LE49XCIvXCI7ZnVuY3Rpb24gWihuKXtpZihcInN0cmluZ1wiIT10eXBlb2Ygbil0aHJvdyBuZXcgVHlwZUVycm9yKFwiUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCBcIitKU09OLnN0cmluZ2lmeShuKSl9Y29uc3QgRj1mdW5jdGlvbigpe3JldHVyblwiL1wifTtmdW5jdGlvbiBJKG4pe3JldHVybiBudWxsIT09biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJm4uaHJlZiYmbi5vcmlnaW59Y29uc3QgVT1bXCJoaXN0b3J5XCIsXCJwYXRoXCIsXCJiYXNlbmFtZVwiLFwic3RlbVwiLFwiZXh0bmFtZVwiLFwiZGlybmFtZVwiXTtjbGFzcyBqe2NvbnN0cnVjdG9yKG4pe2xldCBlO2U9bj9cInN0cmluZ1wiPT10eXBlb2Ygbnx8dyhuKT97dmFsdWU6bn06SShuKT97cGF0aDpufTpuOnt9LHRoaXMuZGF0YT17fSx0aGlzLm1lc3NhZ2VzPVtdLHRoaXMuaGlzdG9yeT1bXSx0aGlzLmN3ZD1GKCksdGhpcy52YWx1ZSx0aGlzLnN0b3JlZCx0aGlzLnJlc3VsdCx0aGlzLm1hcDtsZXQgYSxpPS0xO2Zvcig7KytpPFUubGVuZ3RoOyl7Y29uc3Qgbj1VW2ldO24gaW4gZSYmdm9pZCAwIT09ZVtuXSYmKHRoaXNbbl09XCJoaXN0b3J5XCI9PT1uP1suLi5lW25dXTplW25dKX1mb3IoYSBpbiBlKVUuaW5jbHVkZXMoYSl8fCh0aGlzW2FdPWVbYV0pfWdldCBwYXRoKCl7cmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoLTFdfXNldCBwYXRoKG4pe0kobikmJihuPWZ1bmN0aW9uKG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKW49bmV3IFVSTChuKTtlbHNlIGlmKCFJKG4pKXtjb25zdCBlPW5ldyBUeXBlRXJyb3IoJ1RoZSBcInBhdGhcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIGFuIGluc3RhbmNlIG9mIFVSTC4gUmVjZWl2ZWQgYCcrbitcImBcIik7dGhyb3cgZS5jb2RlPVwiRVJSX0lOVkFMSURfQVJHX1RZUEVcIixlfWlmKFwiZmlsZTpcIiE9PW4ucHJvdG9jb2wpe2NvbnN0IG49bmV3IFR5cGVFcnJvcihcIlRoZSBVUkwgbXVzdCBiZSBvZiBzY2hlbWUgZmlsZVwiKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9VUkxfU0NIRU1FXCIsbn1yZXR1cm4gZnVuY3Rpb24obil7aWYoXCJcIiE9PW4uaG9zdG5hbWUpe2NvbnN0IG49bmV3IFR5cGVFcnJvcignRmlsZSBVUkwgaG9zdCBtdXN0IGJlIFwibG9jYWxob3N0XCIgb3IgZW1wdHkgb24gZGFyd2luJyk7dGhyb3cgbi5jb2RlPVwiRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVFwiLG59Y29uc3QgZT1uLnBhdGhuYW1lO2xldCBhPS0xO2Zvcig7KythPGUubGVuZ3RoOylpZigzNz09PWUuY2hhckNvZGVBdChhKSYmNTA9PT1lLmNoYXJDb2RlQXQoYSsxKSl7Y29uc3Qgbj1lLmNoYXJDb2RlQXQoYSsyKTtpZig3MD09PW58fDEwMj09PW4pe2NvbnN0IG49bmV3IFR5cGVFcnJvcihcIkZpbGUgVVJMIHBhdGggbXVzdCBub3QgaW5jbHVkZSBlbmNvZGVkIC8gY2hhcmFjdGVyc1wiKTt0aHJvdyBuLmNvZGU9XCJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIXCIsbn19cmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChlKX0obil9KG4pKSxxKG4sXCJwYXRoXCIpLHRoaXMucGF0aCE9PW4mJnRoaXMuaGlzdG9yeS5wdXNoKG4pfWdldCBkaXJuYW1lKCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHRoaXMucGF0aD96KHRoaXMucGF0aCk6dm9pZCAwfXNldCBkaXJuYW1lKG4pe0godGhpcy5iYXNlbmFtZSxcImRpcm5hbWVcIiksdGhpcy5wYXRoPUIobnx8XCJcIix0aGlzLmJhc2VuYW1lKX1nZXQgYmFzZW5hbWUoKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdGhpcy5wYXRoP3godGhpcy5wYXRoKTp2b2lkIDB9c2V0IGJhc2VuYW1lKG4pe3EobixcImJhc2VuYW1lXCIpLEwobixcImJhc2VuYW1lXCIpLHRoaXMucGF0aD1CKHRoaXMuZGlybmFtZXx8XCJcIixuKX1nZXQgZXh0bmFtZSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/RSh0aGlzLnBhdGgpOnZvaWQgMH1zZXQgZXh0bmFtZShuKXtpZihMKG4sXCJleHRuYW1lXCIpLEgodGhpcy5kaXJuYW1lLFwiZXh0bmFtZVwiKSxuKXtpZig0NiE9PW4uY2hhckNvZGVBdCgwKSl0aHJvdyBuZXcgRXJyb3IoXCJgZXh0bmFtZWAgbXVzdCBzdGFydCB3aXRoIGAuYFwiKTtpZihuLmluY2x1ZGVzKFwiLlwiLDEpKXRocm93IG5ldyBFcnJvcihcImBleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzXCIpfXRoaXMucGF0aD1CKHRoaXMuZGlybmFtZSx0aGlzLnN0ZW0rKG58fFwiXCIpKX1nZXQgc3RlbSgpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnBhdGg/eCh0aGlzLnBhdGgsdGhpcy5leHRuYW1lKTp2b2lkIDB9c2V0IHN0ZW0obil7cShuLFwic3RlbVwiKSxMKG4sXCJzdGVtXCIpLHRoaXMucGF0aD1CKHRoaXMuZGlybmFtZXx8XCJcIixuKyh0aGlzLmV4dG5hbWV8fFwiXCIpKX10b1N0cmluZyhuKXtyZXR1cm4odGhpcy52YWx1ZXx8XCJcIikudG9TdHJpbmcobil9bWVzc2FnZShuLGUsYSl7Y29uc3QgaT1uZXcgVChuLGUsYSk7cmV0dXJuIHRoaXMucGF0aCYmKGkubmFtZT10aGlzLnBhdGgrXCI6XCIraS5uYW1lLGkuZmlsZT10aGlzLnBhdGgpLGkuZmF0YWw9ITEsdGhpcy5tZXNzYWdlcy5wdXNoKGkpLGl9aW5mbyhuLGUsYSl7Y29uc3QgaT10aGlzLm1lc3NhZ2UobixlLGEpO3JldHVybiBpLmZhdGFsPW51bGwsaX1mYWlsKG4sZSxhKXtjb25zdCBpPXRoaXMubWVzc2FnZShuLGUsYSk7dGhyb3cgaS5mYXRhbD0hMCxpfX1mdW5jdGlvbiBMKG4sZSl7aWYobiYmbi5pbmNsdWRlcyhOKSl0aHJvdyBuZXcgRXJyb3IoXCJgXCIrZStcImAgY2Fubm90IGJlIGEgcGF0aDogZGlkIG5vdCBleHBlY3QgYFwiK04rXCJgXCIpfWZ1bmN0aW9uIHEobixlKXtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJgXCIrZStcImAgY2Fubm90IGJlIGVtcHR5XCIpfWZ1bmN0aW9uIEgobixlKXtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJTZXR0aW5nIGBcIitlK1wiYCByZXF1aXJlcyBgcGF0aGAgdG8gYmUgc2V0IHRvb1wiKX1jb25zdCBKPWZ1bmN0aW9uIG4oKXtjb25zdCBlPWZ1bmN0aW9uKCl7Y29uc3Qgbj1bXSxlPXtydW46ZnVuY3Rpb24oLi4uZSl7bGV0IGE9LTE7Y29uc3QgaT1lLnBvcCgpO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGZ1bmN0aW9uIGFzIGxhc3QgYXJndW1lbnQsIG5vdCBcIitpKTshZnVuY3Rpb24gcih0LC4uLm8pe2NvbnN0IE09blsrK2FdO2xldCBzPS0xO2lmKHQpaSh0KTtlbHNle2Zvcig7KytzPGUubGVuZ3RoOyludWxsIT09b1tzXSYmdm9pZCAwIT09b1tzXXx8KG9bc109ZVtzXSk7ZT1vLE0/ZnVuY3Rpb24obixlKXtsZXQgYTtyZXR1cm4gZnVuY3Rpb24oLi4uZSl7Y29uc3QgdD1uLmxlbmd0aD5lLmxlbmd0aDtsZXQgbzt0JiZlLnB1c2goaSk7dHJ5e289biguLi5lKX1jYXRjaChuKXtjb25zdCBlPW47aWYodCYmYSl0aHJvdyBlO3JldHVybiBpKGUpfXR8fChvIGluc3RhbmNlb2YgUHJvbWlzZT9vLnRoZW4ocixpKTpvIGluc3RhbmNlb2YgRXJyb3I/aShvKTpyKG8pKX07ZnVuY3Rpb24gaShuLC4uLmkpe2F8fChhPSEwLGUobiwuLi5pKSl9ZnVuY3Rpb24gcihuKXtpKG51bGwsbil9fShNLHIpKC4uLm8pOmkobnVsbCwuLi5vKX19KG51bGwsLi4uZSl9LHVzZTpmdW5jdGlvbihhKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBgbWlkZGVsd2FyZWAgdG8gYmUgYSBmdW5jdGlvbiwgbm90IFwiK2EpO3JldHVybiBuLnB1c2goYSksZX19O3JldHVybiBlfSgpLGE9W107bGV0IGkscj17fSx0PS0xO3JldHVybiBvLmRhdGE9ZnVuY3Rpb24obixlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2Ygbj8yPT09YXJndW1lbnRzLmxlbmd0aD8oSyhcImRhdGFcIixpKSxyW25dPWUsbyk6Ty5jYWxsKHIsbikmJnJbbl18fG51bGw6bj8oSyhcImRhdGFcIixpKSxyPW4sbyk6cn0sby5QYXJzZXI9dm9pZCAwLG8uQ29tcGlsZXI9dm9pZCAwLG8uZnJlZXplPWZ1bmN0aW9uKCl7aWYoaSlyZXR1cm4gbztmb3IoOysrdDxhLmxlbmd0aDspe2NvbnN0W24sLi4uaV09YVt0XTtpZighMT09PWlbMF0pY29udGludWU7ITA9PT1pWzBdJiYoaVsxXT12b2lkIDApO2NvbnN0IHI9bi5jYWxsKG8sLi4uaSk7XCJmdW5jdGlvblwiPT10eXBlb2YgciYmZS51c2Uocil9cmV0dXJuIGk9ITAsdD1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksb30sby5hdHRhY2hlcnM9YSxvLnVzZT1mdW5jdGlvbihuLC4uLmUpe2xldCB0O2lmKEsoXCJ1c2VcIixpKSxudWxsPT1uKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pYyhuLC4uLmUpO2Vsc2V7aWYoXCJvYmplY3RcIiE9dHlwZW9mIG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGBcIituK1wiYFwiKTtBcnJheS5pc0FycmF5KG4pP2wobik6cyhuKX1yZXR1cm4gdCYmKHIuc2V0dGluZ3M9T2JqZWN0LmFzc2lnbihyLnNldHRpbmdzfHx7fSx0KSksbztmdW5jdGlvbiBNKG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIG4pYyhuKTtlbHNle2lmKFwib2JqZWN0XCIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCB1c2FibGUgdmFsdWUsIG5vdCBgXCIrbitcImBcIik7aWYoQXJyYXkuaXNBcnJheShuKSl7Y29uc3RbZSwuLi5hXT1uO2MoZSwuLi5hKX1lbHNlIHMobil9fWZ1bmN0aW9uIHMobil7bChuLnBsdWdpbnMpLG4uc2V0dGluZ3MmJih0PU9iamVjdC5hc3NpZ24odHx8e30sbi5zZXR0aW5ncykpfWZ1bmN0aW9uIGwobil7bGV0IGU9LTE7aWYobnVsbD09bik7ZWxzZXtpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0ZWQgYSBsaXN0IG9mIHBsdWdpbnMsIG5vdCBgXCIrbitcImBcIik7Zm9yKDsrK2U8bi5sZW5ndGg7KU0obltlXSl9fWZ1bmN0aW9uIGMobixlKXtsZXQgaSxyPS0xO2Zvcig7KytyPGEubGVuZ3RoOylpZihhW3JdWzBdPT09bil7aT1hW3JdO2JyZWFrfWk/KGsoaVsxXSkmJmsoZSkmJihlPXYoITAsaVsxXSxlKSksaVsxXT1lKTphLnB1c2goWy4uLmFyZ3VtZW50c10pfX0sby5wYXJzZT1mdW5jdGlvbihuKXtvLmZyZWV6ZSgpO2NvbnN0IGU9XyhuKSxhPW8uUGFyc2VyO3JldHVybiBWKFwicGFyc2VcIixhKSxYKGEsXCJwYXJzZVwiKT9uZXcgYShTdHJpbmcoZSksZSkucGFyc2UoKTphKFN0cmluZyhlKSxlKX0sby5zdHJpbmdpZnk9ZnVuY3Rpb24obixlKXtvLmZyZWV6ZSgpO2NvbnN0IGE9XyhlKSxpPW8uQ29tcGlsZXI7cmV0dXJuIFcoXCJzdHJpbmdpZnlcIixpKSwkKG4pLFgoaSxcImNvbXBpbGVcIik/bmV3IGkobixhKS5jb21waWxlKCk6aShuLGEpfSxvLnJ1bj1mdW5jdGlvbihuLGEsaSl7aWYoJChuKSxvLmZyZWV6ZSgpLGl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mIGF8fChpPWEsYT12b2lkIDApLCFpKXJldHVybiBuZXcgUHJvbWlzZShyKTtmdW5jdGlvbiByKHIsdCl7ZS5ydW4obixfKGEpLChmdW5jdGlvbihlLGEsbyl7YT1hfHxuLGU/dChlKTpyP3IoYSk6aShudWxsLGEsbyl9KSl9cihudWxsLGkpfSxvLnJ1blN5bmM9ZnVuY3Rpb24obixlKXtsZXQgYSxpO3JldHVybiBvLnJ1bihuLGUsKGZ1bmN0aW9uKG4sZSl7RyhuKSxhPWUsaT0hMH0pKSxRKFwicnVuU3luY1wiLFwicnVuXCIsaSksYX0sby5wcm9jZXNzPWZ1bmN0aW9uKG4sZSl7aWYoby5mcmVlemUoKSxWKFwicHJvY2Vzc1wiLG8uUGFyc2VyKSxXKFwicHJvY2Vzc1wiLG8uQ29tcGlsZXIpLCFlKXJldHVybiBuZXcgUHJvbWlzZShhKTtmdW5jdGlvbiBhKGEsaSl7Y29uc3Qgcj1fKG4pO2Z1bmN0aW9uIHQobixyKXtufHwhcj9pKG4pOmE/YShyKTplKG51bGwscil9by5ydW4oby5wYXJzZShyKSxyLCgobixlLGEpPT57aWYoIW4mJmUmJmEpe2NvbnN0IHI9by5zdHJpbmdpZnkoZSxhKTtudWxsPT1yfHwoXCJzdHJpbmdcIj09dHlwZW9mKGk9cil8fHcoaSk/YS52YWx1ZT1yOmEucmVzdWx0PXIpLHQobixhKX1lbHNlIHQobik7dmFyIGl9KSl9YShudWxsLGUpfSxvLnByb2Nlc3NTeW5jPWZ1bmN0aW9uKG4pe2xldCBlO28uZnJlZXplKCksVihcInByb2Nlc3NTeW5jXCIsby5QYXJzZXIpLFcoXCJwcm9jZXNzU3luY1wiLG8uQ29tcGlsZXIpO2NvbnN0IGE9XyhuKTtyZXR1cm4gby5wcm9jZXNzKGEsKGZ1bmN0aW9uKG4pe2U9ITAsRyhuKX0pKSxRKFwicHJvY2Vzc1N5bmNcIixcInByb2Nlc3NcIixlKSxhfSxvO2Z1bmN0aW9uIG8oKXtjb25zdCBlPW4oKTtsZXQgaT0tMTtmb3IoOysraTxhLmxlbmd0aDspZS51c2UoLi4uYVtpXSk7cmV0dXJuIGUuZGF0YSh2KCEwLHt9LHIpKSxlfX0oKS5mcmVlemUoKSxPPXt9Lmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFgobixlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBuJiZuLnByb3RvdHlwZSYmKGZ1bmN0aW9uKG4pe2xldCBlO2ZvcihlIGluIG4paWYoTy5jYWxsKG4sZSkpcmV0dXJuITA7cmV0dXJuITF9KG4ucHJvdG90eXBlKXx8ZSBpbiBuLnByb3RvdHlwZSl9ZnVuY3Rpb24gVihuLGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBgXCIrbitcImAgd2l0aG91dCBgUGFyc2VyYFwiKX1mdW5jdGlvbiBXKG4sZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGBcIituK1wiYCB3aXRob3V0IGBDb21waWxlcmBcIil9ZnVuY3Rpb24gSyhuLGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNhbGwgYFwiK24rXCJgIG9uIGEgZnJvemVuIHByb2Nlc3Nvci5cXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLlwiKX1mdW5jdGlvbiAkKG4pe2lmKCFrKG4pfHxcInN0cmluZ1wiIT10eXBlb2Ygbi50eXBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBub2RlLCBnb3QgYFwiK24rXCJgXCIpfWZ1bmN0aW9uIFEobixlLGEpe2lmKCFhKXRocm93IG5ldyBFcnJvcihcImBcIituK1wiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGBcIitlK1wiYCBpbnN0ZWFkXCIpfWZ1bmN0aW9uIF8obil7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBCb29sZWFuKG4mJlwib2JqZWN0XCI9PXR5cGVvZiBuJiZcIm1lc3NhZ2VcImluIG4mJlwibWVzc2FnZXNcImluIG4pfShuKT9uOm5ldyBqKG4pfWZ1bmN0aW9uIG5uKG4pe2NvbnN0IGU9Y2xhc3MgZXh0ZW5kcyBue30sYT1lLnByb3RvdHlwZTtsZXQgaTtmb3IoaSBpbiBhKXtjb25zdCBuPWFbaV07biYmXCJvYmplY3RcIj09dHlwZW9mIG4mJihhW2ldPVwiY29uY2F0XCJpbiBuP24uY29uY2F0KCk6T2JqZWN0LmFzc2lnbih7fSxuKSl9cmV0dXJuIGV9dmFyIGVuPWEoODAyKSxhbj1hKDc2Nikscm49YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyO2lmKChcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJlwiJlwiPT09ZW4obikmJihyPShpPWEuY2hpbGRyZW4pW2UrMV0sIShlPjAmJlwiV29yZE5vZGVcIj09PWlbZS0xXS50eXBlKSYmciYmXCJXb3JkTm9kZVwiPT09ci50eXBlKSlyZXR1cm4gaS5zcGxpY2UoZSwxKSxyLmNoaWxkcmVuLnVuc2hpZnQobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uc3RhcnQ9bi5wb3NpdGlvbi5zdGFydCksZS0xfSkpLHRuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0O2lmKGU+MCYmKFwiU3ltYm9sTm9kZVwiPT09bi50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09bi50eXBlKSYmXCItXCI9PT1lbihuKSYmKHI9KGk9YS5jaGlsZHJlbilbZS0xXSwoISh0PWlbZSsxXSl8fFwiV29yZE5vZGVcIiE9PXQudHlwZSkmJnImJlwiV29yZE5vZGVcIj09PXIudHlwZSkpcmV0dXJuIGkuc3BsaWNlKGUsMSksci5jaGlsZHJlbi5wdXNoKG4pLHIucG9zaXRpb24mJm4ucG9zaXRpb24mJihyLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX0pKSxvbj0vXihbIVwiJykuP1xcdTAwQkJcXHUwRjNCXFx1MEYzRFxcdTE2OUNcXHUyMDE5XFx1MjAxRFxcdTIwMjZcXHUyMDNBXFx1MjAzRFxcdTIwNDZcXHUyMDdFXFx1MjA4RVxcdTIzMDlcXHUyMzBCXFx1MjMyQVxcdTI3NjlcXHUyNzZCXFx1Mjc2RFxcdTI3NkZcXHUyNzcxXFx1Mjc3M1xcdTI3NzVcXHUyN0M2XFx1MjdFN1xcdTI3RTlcXHUyN0VCXFx1MjdFRFxcdTI3RUZcXHUyOTg0XFx1Mjk4NlxcdTI5ODhcXHUyOThBXFx1Mjk4Q1xcdTI5OEVcXHUyOTkwXFx1Mjk5MlxcdTI5OTRcXHUyOTk2XFx1Mjk5OFxcdTI5RDlcXHUyOURCXFx1MjlGRFxcdTJFMDNcXHUyRTA1XFx1MkUwQVxcdTJFMERcXHUyRTFEXFx1MkUyMVxcdTJFMjNcXHUyRTI1XFx1MkUyN1xcdTJFMjlcXHUzMDA5XFx1MzAwQlxcdTMwMERcXHUzMDBGXFx1MzAxMVxcdTMwMTVcXHUzMDE3XFx1MzAxOVxcdTMwMUJcXHUzMDFFXFx1MzAxRlxcdUZEM0VcXHVGRTE4XFx1RkUzNlxcdUZFMzhcXHVGRTNBXFx1RkUzQ1xcdUZFM0VcXHVGRTQwXFx1RkU0MlxcdUZFNDRcXHVGRTQ4XFx1RkU1QVxcdUZFNUNcXHVGRTVFXFx1RkYwOVxcdUZGM0RcXHVGRjVEXFx1RkY2MFxcdUZGNjNcXF19XSlcXDEqJC8sTW49L15bIFxcdF0qKChcXHI/XFxufFxccilbXFx0IF0qKXsyLH0kLyxzbj0vXihbIS4/XFx1MjAyNlxcdTIwM0RdKykkLyxsbj0vXihbJidcXC0uOj0/QFxcdTAwQURcXHUwMEI3XFx1MjAxMFxcdTIwMTFcXHUyMDE5XFx1MjAyN118XyspJC8sY249L14oPzpbXFxkXFx1MDBCMlxcdTAwQjNcXHUwMEI5XFx1MDBCQy1cXHUwMEJFXFx1MDY2MC1cXHUwNjY5XFx1MDZGMC1cXHUwNkY5XFx1MDdDMC1cXHUwN0M5XFx1MDk2Ni1cXHUwOTZGXFx1MDlFNi1cXHUwOUVGXFx1MDlGNC1cXHUwOUY5XFx1MEE2Ni1cXHUwQTZGXFx1MEFFNi1cXHUwQUVGXFx1MEI2Ni1cXHUwQjZGXFx1MEI3Mi1cXHUwQjc3XFx1MEJFNi1cXHUwQkYyXFx1MEM2Ni1cXHUwQzZGXFx1MEM3OC1cXHUwQzdFXFx1MENFNi1cXHUwQ0VGXFx1MEQ1OC1cXHUwRDVFXFx1MEQ2Ni1cXHUwRDc4XFx1MERFNi1cXHUwREVGXFx1MEU1MC1cXHUwRTU5XFx1MEVEMC1cXHUwRUQ5XFx1MEYyMC1cXHUwRjMzXFx1MTA0MC1cXHUxMDQ5XFx1MTA5MC1cXHUxMDk5XFx1MTM2OS1cXHUxMzdDXFx1MTZFRS1cXHUxNkYwXFx1MTdFMC1cXHUxN0U5XFx1MTdGMC1cXHUxN0Y5XFx1MTgxMC1cXHUxODE5XFx1MTk0Ni1cXHUxOTRGXFx1MTlEMC1cXHUxOURBXFx1MUE4MC1cXHUxQTg5XFx1MUE5MC1cXHUxQTk5XFx1MUI1MC1cXHUxQjU5XFx1MUJCMC1cXHUxQkI5XFx1MUM0MC1cXHUxQzQ5XFx1MUM1MC1cXHUxQzU5XFx1MjA3MFxcdTIwNzQtXFx1MjA3OVxcdTIwODAtXFx1MjA4OVxcdTIxNTAtXFx1MjE4MlxcdTIxODUtXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDRkRcXHUzMDA3XFx1MzAyMS1cXHUzMDI5XFx1MzAzOC1cXHUzMDNBXFx1MzE5Mi1cXHUzMTk1XFx1MzIyMC1cXHUzMjI5XFx1MzI0OC1cXHUzMjRGXFx1MzI1MS1cXHUzMjVGXFx1MzI4MC1cXHUzMjg5XFx1MzJCMS1cXHUzMkJGXFx1QTYyMC1cXHVBNjI5XFx1QTZFNi1cXHVBNkVGXFx1QTgzMC1cXHVBODM1XFx1QThEMC1cXHVBOEQ5XFx1QTkwMC1cXHVBOTA5XFx1QTlEMC1cXHVBOUQ5XFx1QTlGMC1cXHVBOUY5XFx1QUE1MC1cXHVBQTU5XFx1QUJGMC1cXHVBQkY5XFx1RkYxMC1cXHVGRjE5XXxcXHVEODAwW1xcdUREMDctXFx1REQzM1xcdURENDAtXFx1REQ3OFxcdUREOEFcXHVERDhCXFx1REVFMS1cXHVERUZCXFx1REYyMC1cXHVERjIzXFx1REY0MVxcdURGNEFcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1RENBMC1cXHVEQ0E5XXxcXHVEODAyW1xcdURDNTgtXFx1REM1RlxcdURDNzktXFx1REM3RlxcdURDQTctXFx1RENBRlxcdURDRkItXFx1RENGRlxcdUREMTYtXFx1REQxQlxcdUREQkNcXHVEREJEXFx1RERDMC1cXHVERENGXFx1REREMi1cXHVEREZGXFx1REU0MC1cXHVERTQ4XFx1REU3RFxcdURFN0VcXHVERTlELVxcdURFOUZcXHVERUVCLVxcdURFRUZcXHVERjU4LVxcdURGNUZcXHVERjc4LVxcdURGN0ZcXHVERkE5LVxcdURGQUZdfFxcdUQ4MDNbXFx1RENGQS1cXHVEQ0ZGXFx1REQzMC1cXHVERDM5XFx1REU2MC1cXHVERTdFXFx1REYxRC1cXHVERjI2XFx1REY1MS1cXHVERjU0XFx1REZDNS1cXHVERkNCXXxcXHVEODA0W1xcdURDNTItXFx1REM2RlxcdURDRjAtXFx1RENGOVxcdUREMzYtXFx1REQzRlxcdURERDAtXFx1REREOVxcdURERTEtXFx1RERGNFxcdURFRjAtXFx1REVGOV18XFx1RDgwNVtcXHVEQzUwLVxcdURDNTlcXHVEQ0QwLVxcdURDRDlcXHVERTUwLVxcdURFNTlcXHVERUMwLVxcdURFQzlcXHVERjMwLVxcdURGM0JdfFxcdUQ4MDZbXFx1RENFMC1cXHVEQ0YyXFx1REQ1MC1cXHVERDU5XXxcXHVEODA3W1xcdURDNTAtXFx1REM2Q1xcdURENTAtXFx1REQ1OVxcdUREQTAtXFx1RERBOVxcdURGQzAtXFx1REZENF18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVdfFxcdUQ4MUFbXFx1REU2MC1cXHVERTY5XFx1REY1MC1cXHVERjU5XFx1REY1Qi1cXHVERjYxXXxcXHVEODFCW1xcdURFODAtXFx1REU5Nl18XFx1RDgzNFtcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4MzVbXFx1REZDRS1cXHVERkZGXXxcXHVEODM4W1xcdURENDAtXFx1REQ0OVxcdURFRjAtXFx1REVGOV18XFx1RDgzQVtcXHVEQ0M3LVxcdURDQ0ZcXHVERDUwLVxcdURENTldfFxcdUQ4M0JbXFx1REM3MS1cXHVEQ0FCXFx1RENBRC1cXHVEQ0FGXFx1RENCMS1cXHVEQ0I0XFx1REQwMS1cXHVERDJEXFx1REQyRi1cXHVERDNEXXxcXHVEODNDW1xcdUREMDAtXFx1REQwQ118XFx1RDgzRVtcXHVERkYwLVxcdURGRjldKSskLyxTbj0vXlxcZC8sdW49L14oPzpbYS16XFx1MDBCNVxcdTAwREYtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRlxcdTAxMDFcXHUwMTAzXFx1MDEwNVxcdTAxMDdcXHUwMTA5XFx1MDEwQlxcdTAxMERcXHUwMTBGXFx1MDExMVxcdTAxMTNcXHUwMTE1XFx1MDExN1xcdTAxMTlcXHUwMTFCXFx1MDExRFxcdTAxMUZcXHUwMTIxXFx1MDEyM1xcdTAxMjVcXHUwMTI3XFx1MDEyOVxcdTAxMkJcXHUwMTJEXFx1MDEyRlxcdTAxMzFcXHUwMTMzXFx1MDEzNVxcdTAxMzdcXHUwMTM4XFx1MDEzQVxcdTAxM0NcXHUwMTNFXFx1MDE0MFxcdTAxNDJcXHUwMTQ0XFx1MDE0NlxcdTAxNDhcXHUwMTQ5XFx1MDE0QlxcdTAxNERcXHUwMTRGXFx1MDE1MVxcdTAxNTNcXHUwMTU1XFx1MDE1N1xcdTAxNTlcXHUwMTVCXFx1MDE1RFxcdTAxNUZcXHUwMTYxXFx1MDE2M1xcdTAxNjVcXHUwMTY3XFx1MDE2OVxcdTAxNkJcXHUwMTZEXFx1MDE2RlxcdTAxNzFcXHUwMTczXFx1MDE3NVxcdTAxNzdcXHUwMTdBXFx1MDE3Q1xcdTAxN0UtXFx1MDE4MFxcdTAxODNcXHUwMTg1XFx1MDE4OFxcdTAxOENcXHUwMThEXFx1MDE5MlxcdTAxOTVcXHUwMTk5LVxcdTAxOUJcXHUwMTlFXFx1MDFBMVxcdTAxQTNcXHUwMUE1XFx1MDFBOFxcdTAxQUFcXHUwMUFCXFx1MDFBRFxcdTAxQjBcXHUwMUI0XFx1MDFCNlxcdTAxQjlcXHUwMUJBXFx1MDFCRC1cXHUwMUJGXFx1MDFDNlxcdTAxQzlcXHUwMUNDXFx1MDFDRVxcdTAxRDBcXHUwMUQyXFx1MDFENFxcdTAxRDZcXHUwMUQ4XFx1MDFEQVxcdTAxRENcXHUwMUREXFx1MDFERlxcdTAxRTFcXHUwMUUzXFx1MDFFNVxcdTAxRTdcXHUwMUU5XFx1MDFFQlxcdTAxRURcXHUwMUVGXFx1MDFGMFxcdTAxRjNcXHUwMUY1XFx1MDFGOVxcdTAxRkJcXHUwMUZEXFx1MDFGRlxcdTAyMDFcXHUwMjAzXFx1MDIwNVxcdTAyMDdcXHUwMjA5XFx1MDIwQlxcdTAyMERcXHUwMjBGXFx1MDIxMVxcdTAyMTNcXHUwMjE1XFx1MDIxN1xcdTAyMTlcXHUwMjFCXFx1MDIxRFxcdTAyMUZcXHUwMjIxXFx1MDIyM1xcdTAyMjVcXHUwMjI3XFx1MDIyOVxcdTAyMkJcXHUwMjJEXFx1MDIyRlxcdTAyMzFcXHUwMjMzLVxcdTAyMzlcXHUwMjNDXFx1MDIzRlxcdTAyNDBcXHUwMjQyXFx1MDI0N1xcdTAyNDlcXHUwMjRCXFx1MDI0RFxcdTAyNEYtXFx1MDI5M1xcdTAyOTUtXFx1MDJBRlxcdTAzNzFcXHUwMzczXFx1MDM3N1xcdTAzN0ItXFx1MDM3RFxcdTAzOTBcXHUwM0FDLVxcdTAzQ0VcXHUwM0QwXFx1MDNEMVxcdTAzRDUtXFx1MDNEN1xcdTAzRDlcXHUwM0RCXFx1MDNERFxcdTAzREZcXHUwM0UxXFx1MDNFM1xcdTAzRTVcXHUwM0U3XFx1MDNFOVxcdTAzRUJcXHUwM0VEXFx1MDNFRi1cXHUwM0YzXFx1MDNGNVxcdTAzRjhcXHUwM0ZCXFx1MDNGQ1xcdTA0MzAtXFx1MDQ1RlxcdTA0NjFcXHUwNDYzXFx1MDQ2NVxcdTA0NjdcXHUwNDY5XFx1MDQ2QlxcdTA0NkRcXHUwNDZGXFx1MDQ3MVxcdTA0NzNcXHUwNDc1XFx1MDQ3N1xcdTA0NzlcXHUwNDdCXFx1MDQ3RFxcdTA0N0ZcXHUwNDgxXFx1MDQ4QlxcdTA0OERcXHUwNDhGXFx1MDQ5MVxcdTA0OTNcXHUwNDk1XFx1MDQ5N1xcdTA0OTlcXHUwNDlCXFx1MDQ5RFxcdTA0OUZcXHUwNEExXFx1MDRBM1xcdTA0QTVcXHUwNEE3XFx1MDRBOVxcdTA0QUJcXHUwNEFEXFx1MDRBRlxcdTA0QjFcXHUwNEIzXFx1MDRCNVxcdTA0QjdcXHUwNEI5XFx1MDRCQlxcdTA0QkRcXHUwNEJGXFx1MDRDMlxcdTA0QzRcXHUwNEM2XFx1MDRDOFxcdTA0Q0FcXHUwNENDXFx1MDRDRVxcdTA0Q0ZcXHUwNEQxXFx1MDREM1xcdTA0RDVcXHUwNEQ3XFx1MDREOVxcdTA0REJcXHUwNEREXFx1MDRERlxcdTA0RTFcXHUwNEUzXFx1MDRFNVxcdTA0RTdcXHUwNEU5XFx1MDRFQlxcdTA0RURcXHUwNEVGXFx1MDRGMVxcdTA0RjNcXHUwNEY1XFx1MDRGN1xcdTA0RjlcXHUwNEZCXFx1MDRGRFxcdTA0RkZcXHUwNTAxXFx1MDUwM1xcdTA1MDVcXHUwNTA3XFx1MDUwOVxcdTA1MEJcXHUwNTBEXFx1MDUwRlxcdTA1MTFcXHUwNTEzXFx1MDUxNVxcdTA1MTdcXHUwNTE5XFx1MDUxQlxcdTA1MURcXHUwNTFGXFx1MDUyMVxcdTA1MjNcXHUwNTI1XFx1MDUyN1xcdTA1MjlcXHUwNTJCXFx1MDUyRFxcdTA1MkZcXHUwNTYwLVxcdTA1ODhcXHUxMEQwLVxcdTEwRkFcXHUxMEZELVxcdTEwRkZcXHUxM0Y4LVxcdTEzRkRcXHUxQzgwLVxcdTFDODhcXHUxRDAwLVxcdTFEMkJcXHUxRDZCLVxcdTFENzdcXHUxRDc5LVxcdTFEOUFcXHUxRTAxXFx1MUUwM1xcdTFFMDVcXHUxRTA3XFx1MUUwOVxcdTFFMEJcXHUxRTBEXFx1MUUwRlxcdTFFMTFcXHUxRTEzXFx1MUUxNVxcdTFFMTdcXHUxRTE5XFx1MUUxQlxcdTFFMURcXHUxRTFGXFx1MUUyMVxcdTFFMjNcXHUxRTI1XFx1MUUyN1xcdTFFMjlcXHUxRTJCXFx1MUUyRFxcdTFFMkZcXHUxRTMxXFx1MUUzM1xcdTFFMzVcXHUxRTM3XFx1MUUzOVxcdTFFM0JcXHUxRTNEXFx1MUUzRlxcdTFFNDFcXHUxRTQzXFx1MUU0NVxcdTFFNDdcXHUxRTQ5XFx1MUU0QlxcdTFFNERcXHUxRTRGXFx1MUU1MVxcdTFFNTNcXHUxRTU1XFx1MUU1N1xcdTFFNTlcXHUxRTVCXFx1MUU1RFxcdTFFNUZcXHUxRTYxXFx1MUU2M1xcdTFFNjVcXHUxRTY3XFx1MUU2OVxcdTFFNkJcXHUxRTZEXFx1MUU2RlxcdTFFNzFcXHUxRTczXFx1MUU3NVxcdTFFNzdcXHUxRTc5XFx1MUU3QlxcdTFFN0RcXHUxRTdGXFx1MUU4MVxcdTFFODNcXHUxRTg1XFx1MUU4N1xcdTFFODlcXHUxRThCXFx1MUU4RFxcdTFFOEZcXHUxRTkxXFx1MUU5M1xcdTFFOTUtXFx1MUU5RFxcdTFFOUZcXHUxRUExXFx1MUVBM1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUFEXFx1MUVBRlxcdTFFQjFcXHUxRUIzXFx1MUVCNVxcdTFFQjdcXHUxRUI5XFx1MUVCQlxcdTFFQkRcXHUxRUJGXFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVDN1xcdTFFQzlcXHUxRUNCXFx1MUVDRFxcdTFFQ0ZcXHUxRUQxXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEOVxcdTFFREJcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRUUzXFx1MUVFNVxcdTFFRTdcXHUxRUU5XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVGMVxcdTFFRjNcXHUxRUY1XFx1MUVGN1xcdTFFRjlcXHUxRUZCXFx1MUVGRFxcdTFFRkYtXFx1MUYwN1xcdTFGMTAtXFx1MUYxNVxcdTFGMjAtXFx1MUYyN1xcdTFGMzAtXFx1MUYzN1xcdTFGNDAtXFx1MUY0NVxcdTFGNTAtXFx1MUY1N1xcdTFGNjAtXFx1MUY2N1xcdTFGNzAtXFx1MUY3RFxcdTFGODAtXFx1MUY4N1xcdTFGOTAtXFx1MUY5N1xcdTFGQTAtXFx1MUZBN1xcdTFGQjAtXFx1MUZCNFxcdTFGQjZcXHUxRkI3XFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzZcXHUxRkM3XFx1MUZEMC1cXHUxRkQzXFx1MUZENlxcdTFGRDdcXHUxRkUwLVxcdTFGRTdcXHUxRkYyLVxcdTFGRjRcXHUxRkY2XFx1MUZGN1xcdTIxMEFcXHUyMTBFXFx1MjEwRlxcdTIxMTNcXHUyMTJGXFx1MjEzNFxcdTIxMzlcXHUyMTNDXFx1MjEzRFxcdTIxNDYtXFx1MjE0OVxcdTIxNEVcXHUyMTg0XFx1MkMzMC1cXHUyQzVFXFx1MkM2MVxcdTJDNjVcXHUyQzY2XFx1MkM2OFxcdTJDNkFcXHUyQzZDXFx1MkM3MVxcdTJDNzNcXHUyQzc0XFx1MkM3Ni1cXHUyQzdCXFx1MkM4MVxcdTJDODNcXHUyQzg1XFx1MkM4N1xcdTJDODlcXHUyQzhCXFx1MkM4RFxcdTJDOEZcXHUyQzkxXFx1MkM5M1xcdTJDOTVcXHUyQzk3XFx1MkM5OVxcdTJDOUJcXHUyQzlEXFx1MkM5RlxcdTJDQTFcXHUyQ0EzXFx1MkNBNVxcdTJDQTdcXHUyQ0E5XFx1MkNBQlxcdTJDQURcXHUyQ0FGXFx1MkNCMVxcdTJDQjNcXHUyQ0I1XFx1MkNCN1xcdTJDQjlcXHUyQ0JCXFx1MkNCRFxcdTJDQkZcXHUyQ0MxXFx1MkNDM1xcdTJDQzVcXHUyQ0M3XFx1MkNDOVxcdTJDQ0JcXHUyQ0NEXFx1MkNDRlxcdTJDRDFcXHUyQ0QzXFx1MkNENVxcdTJDRDdcXHUyQ0Q5XFx1MkNEQlxcdTJDRERcXHUyQ0RGXFx1MkNFMVxcdTJDRTNcXHUyQ0U0XFx1MkNFQ1xcdTJDRUVcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHVBNjQxXFx1QTY0M1xcdUE2NDVcXHVBNjQ3XFx1QTY0OVxcdUE2NEJcXHVBNjREXFx1QTY0RlxcdUE2NTFcXHVBNjUzXFx1QTY1NVxcdUE2NTdcXHVBNjU5XFx1QTY1QlxcdUE2NURcXHVBNjVGXFx1QTY2MVxcdUE2NjNcXHVBNjY1XFx1QTY2N1xcdUE2NjlcXHVBNjZCXFx1QTY2RFxcdUE2ODFcXHVBNjgzXFx1QTY4NVxcdUE2ODdcXHVBNjg5XFx1QTY4QlxcdUE2OERcXHVBNjhGXFx1QTY5MVxcdUE2OTNcXHVBNjk1XFx1QTY5N1xcdUE2OTlcXHVBNjlCXFx1QTcyM1xcdUE3MjVcXHVBNzI3XFx1QTcyOVxcdUE3MkJcXHVBNzJEXFx1QTcyRi1cXHVBNzMxXFx1QTczM1xcdUE3MzVcXHVBNzM3XFx1QTczOVxcdUE3M0JcXHVBNzNEXFx1QTczRlxcdUE3NDFcXHVBNzQzXFx1QTc0NVxcdUE3NDdcXHVBNzQ5XFx1QTc0QlxcdUE3NERcXHVBNzRGXFx1QTc1MVxcdUE3NTNcXHVBNzU1XFx1QTc1N1xcdUE3NTlcXHVBNzVCXFx1QTc1RFxcdUE3NUZcXHVBNzYxXFx1QTc2M1xcdUE3NjVcXHVBNzY3XFx1QTc2OVxcdUE3NkJcXHVBNzZEXFx1QTc2RlxcdUE3NzEtXFx1QTc3OFxcdUE3N0FcXHVBNzdDXFx1QTc3RlxcdUE3ODFcXHVBNzgzXFx1QTc4NVxcdUE3ODdcXHVBNzhDXFx1QTc4RVxcdUE3OTFcXHVBNzkzLVxcdUE3OTVcXHVBNzk3XFx1QTc5OVxcdUE3OUJcXHVBNzlEXFx1QTc5RlxcdUE3QTFcXHVBN0EzXFx1QTdBNVxcdUE3QTdcXHVBN0E5XFx1QTdBRlxcdUE3QjVcXHVBN0I3XFx1QTdCOVxcdUE3QkJcXHVBN0JEXFx1QTdCRlxcdUE3QzNcXHVBN0M4XFx1QTdDQVxcdUE3RjZcXHVBN0ZBXFx1QUIzMC1cXHVBQjVBXFx1QUI2MC1cXHVBQjY4XFx1QUI3MC1cXHVBQkJGXFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkY0MS1cXHVGRjVBXXxcXHVEODAxW1xcdURDMjgtXFx1REM0RlxcdURDRDgtXFx1RENGQl18XFx1RDgwM1tcXHVEQ0MwLVxcdURDRjJdfFxcdUQ4MDZbXFx1RENDMC1cXHVEQ0RGXXxcXHVEODFCW1xcdURFNjAtXFx1REU3Rl18XFx1RDgzNVtcXHVEQzFBLVxcdURDMzNcXHVEQzRFLVxcdURDNTRcXHVEQzU2LVxcdURDNjdcXHVEQzgyLVxcdURDOUJcXHVEQ0I2LVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVEQ0NGXFx1RENFQS1cXHVERDAzXFx1REQxRS1cXHVERDM3XFx1REQ1Mi1cXHVERDZCXFx1REQ4Ni1cXHVERDlGXFx1RERCQS1cXHVEREQzXFx1RERFRS1cXHVERTA3XFx1REUyMi1cXHVERTNCXFx1REU1Ni1cXHVERTZGXFx1REU4QS1cXHVERUE1XFx1REVDMi1cXHVERURBXFx1REVEQy1cXHVERUUxXFx1REVGQy1cXHVERjE0XFx1REYxNi1cXHVERjFCXFx1REYzNi1cXHVERjRFXFx1REY1MC1cXHVERjU1XFx1REY3MC1cXHVERjg4XFx1REY4QS1cXHVERjhGXFx1REZBQS1cXHVERkMyXFx1REZDNC1cXHVERkM5XFx1REZDQl18XFx1RDgzQVtcXHVERDIyLVxcdURENDNdKS8sZG49L1tcXHVEODAwLVxcdURGRkZdLyxtbj0vWyFcIictKSwtLzo7P1stXFxdX3t9XFx1MDBBMVxcdTAwQTdcXHUwMEFCXFx1MDBCNlxcdTAwQjdcXHUwMEJCXFx1MDBCRlxcdTAzN0VcXHUwMzg3XFx1MDU1QS1cXHUwNTVGXFx1MDU4OVxcdTA1OEFcXHUwNUJFXFx1MDVDMFxcdTA1QzNcXHUwNUM2XFx1MDVGM1xcdTA1RjRcXHUwNjA5XFx1MDYwQVxcdTA2MENcXHUwNjBEXFx1MDYxQlxcdTA2MUVcXHUwNjFGXFx1MDY2QS1cXHUwNjZEXFx1MDZENFxcdTA3MDAtXFx1MDcwRFxcdTA3RjctXFx1MDdGOVxcdTA4MzAtXFx1MDgzRVxcdTA4NUVcXHUwOTY0XFx1MDk2NVxcdTA5NzBcXHUwOUZEXFx1MEE3NlxcdTBBRjBcXHUwQzc3XFx1MEM4NFxcdTBERjRcXHUwRTRGXFx1MEU1QVxcdTBFNUJcXHUwRjA0LVxcdTBGMTJcXHUwRjE0XFx1MEYzQS1cXHUwRjNEXFx1MEY4NVxcdTBGRDAtXFx1MEZENFxcdTBGRDlcXHUwRkRBXFx1MTA0QS1cXHUxMDRGXFx1MTBGQlxcdTEzNjAtXFx1MTM2OFxcdTE0MDBcXHUxNjZFXFx1MTY5QlxcdTE2OUNcXHUxNkVCLVxcdTE2RURcXHUxNzM1XFx1MTczNlxcdTE3RDQtXFx1MTdENlxcdTE3RDgtXFx1MTdEQVxcdTE4MDAtXFx1MTgwQVxcdTE5NDRcXHUxOTQ1XFx1MUExRVxcdTFBMUZcXHUxQUEwLVxcdTFBQTZcXHUxQUE4LVxcdTFBQURcXHUxQjVBLVxcdTFCNjBcXHUxQkZDLVxcdTFCRkZcXHUxQzNCLVxcdTFDM0ZcXHUxQzdFXFx1MUM3RlxcdTFDQzAtXFx1MUNDN1xcdTFDRDNcXHUyMDEwLVxcdTIwMUZcXHUyMDIyLVxcdTIwMjdcXHUyMDMyLVxcdTIwM0FcXHUyMDNDLVxcdTIwNDNcXHUyMDQ1LVxcdTIwNTFcXHUyMDUzLVxcdTIwNUVcXHUyMDdEXFx1MjA3RVxcdTIwOERcXHUyMDhFXFx1MjMwOC1cXHUyMzBCXFx1MjMyOVxcdTIzMkFcXHUyNzY4LVxcdTI3NzVcXHUyN0M1XFx1MjdDNlxcdTI3RTYtXFx1MjdFRlxcdTI5ODMtXFx1Mjk5OFxcdTI5RDgtXFx1MjlEQlxcdTI5RkNcXHUyOUZEXFx1MkNGOS1cXHUyQ0ZDXFx1MkNGRVxcdTJDRkZcXHUyRDcwXFx1MkUwMC1cXHUyRTJFXFx1MkUzMC1cXHUyRTRGXFx1MkU1MlxcdTMwMDEtXFx1MzAwM1xcdTMwMDgtXFx1MzAxMVxcdTMwMTQtXFx1MzAxRlxcdTMwMzBcXHUzMDNEXFx1MzBBMFxcdTMwRkJcXHVBNEZFXFx1QTRGRlxcdUE2MEQtXFx1QTYwRlxcdUE2NzNcXHVBNjdFXFx1QTZGMi1cXHVBNkY3XFx1QTg3NC1cXHVBODc3XFx1QThDRVxcdUE4Q0ZcXHVBOEY4LVxcdUE4RkFcXHVBOEZDXFx1QTkyRVxcdUE5MkZcXHVBOTVGXFx1QTlDMS1cXHVBOUNEXFx1QTlERVxcdUE5REZcXHVBQTVDLVxcdUFBNUZcXHVBQURFXFx1QUFERlxcdUFBRjBcXHVBQUYxXFx1QUJFQlxcdUZEM0VcXHVGRDNGXFx1RkUxMC1cXHVGRTE5XFx1RkUzMC1cXHVGRTUyXFx1RkU1NC1cXHVGRTYxXFx1RkU2M1xcdUZFNjhcXHVGRTZBXFx1RkU2QlxcdUZGMDEtXFx1RkYwM1xcdUZGMDUtXFx1RkYwQVxcdUZGMEMtXFx1RkYwRlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMjBcXHVGRjNCLVxcdUZGM0RcXHVGRjNGXFx1RkY1QlxcdUZGNURcXHVGRjVGLVxcdUZGNjVdfFxcdUQ4MDBbXFx1REQwMC1cXHVERDAyXFx1REY5RlxcdURGRDBdfFxcdUQ4MDFcXHVERDZGfFxcdUQ4MDJbXFx1REM1N1xcdUREMUZcXHVERDNGXFx1REU1MC1cXHVERTU4XFx1REU3RlxcdURFRjAtXFx1REVGNlxcdURGMzktXFx1REYzRlxcdURGOTktXFx1REY5Q118XFx1RDgwM1tcXHVERUFEXFx1REY1NS1cXHVERjU5XXxcXHVEODA0W1xcdURDNDctXFx1REM0RFxcdURDQkJcXHVEQ0JDXFx1RENCRS1cXHVEQ0MxXFx1REQ0MC1cXHVERDQzXFx1REQ3NFxcdURENzVcXHVEREM1LVxcdUREQzhcXHVERENEXFx1REREQlxcdUREREQtXFx1RERERlxcdURFMzgtXFx1REUzRFxcdURFQTldfFxcdUQ4MDVbXFx1REM0Qi1cXHVEQzRGXFx1REM1QVxcdURDNUJcXHVEQzVEXFx1RENDNlxcdUREQzEtXFx1REREN1xcdURFNDEtXFx1REU0M1xcdURFNjAtXFx1REU2Q1xcdURGM0MtXFx1REYzRV18XFx1RDgwNltcXHVEQzNCXFx1REQ0NC1cXHVERDQ2XFx1RERFMlxcdURFM0YtXFx1REU0NlxcdURFOUEtXFx1REU5Q1xcdURFOUUtXFx1REVBMl18XFx1RDgwN1tcXHVEQzQxLVxcdURDNDVcXHVEQzcwXFx1REM3MVxcdURFRjdcXHVERUY4XFx1REZGRl18XFx1RDgwOVtcXHVEQzcwLVxcdURDNzRdfFxcdUQ4MUFbXFx1REU2RVxcdURFNkZcXHVERUY1XFx1REYzNy1cXHVERjNCXFx1REY0NF18XFx1RDgxQltcXHVERTk3LVxcdURFOUFcXHVERkUyXXxcXHVEODJGXFx1REM5RnxcXHVEODM2W1xcdURFODctXFx1REU4Ql18XFx1RDgzQVtcXHVERDVFXFx1REQ1Rl0vLHBuPS9bXFxkQS1aYS16XFx1MDBBQVxcdTAwQjJcXHUwMEIzXFx1MDBCNVxcdTAwQjlcXHUwMEJBXFx1MDBCQy1cXHUwMEJFXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzAwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0ODMtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNTkxLVxcdTA1QkRcXHUwNUJGXFx1MDVDMVxcdTA1QzJcXHUwNUM0XFx1MDVDNVxcdTA1QzdcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjEwLVxcdTA2MUFcXHUwNjIwLVxcdTA2NjlcXHUwNjZFLVxcdTA2RDNcXHUwNkQ1LVxcdTA2RENcXHUwNkRGLVxcdTA2RThcXHUwNkVBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMC1cXHUwNzRBXFx1MDc0RC1cXHUwN0IxXFx1MDdDMC1cXHUwN0Y1XFx1MDdGQVxcdTA3RkRcXHUwODAwLVxcdTA4MkRcXHUwODQwLVxcdTA4NUJcXHUwODYwLVxcdTA4NkFcXHUwOEEwLVxcdTA4QjRcXHUwOEI2LVxcdTA4QzdcXHUwOEQzLVxcdTA4RTFcXHUwOEUzLVxcdTA5NjNcXHUwOTY2LVxcdTA5NkZcXHUwOTcxLVxcdTA5ODNcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJDLVxcdTA5QzRcXHUwOUM3XFx1MDlDOFxcdTA5Q0ItXFx1MDlDRVxcdTA5RDdcXHUwOURDXFx1MDlERFxcdTA5REYtXFx1MDlFM1xcdTA5RTYtXFx1MDlGMVxcdTA5RjQtXFx1MDlGOVxcdTA5RkNcXHUwOUZFXFx1MEEwMS1cXHUwQTAzXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTNDXFx1MEEzRS1cXHUwQTQyXFx1MEE0N1xcdTBBNDhcXHUwQTRCLVxcdTBBNERcXHUwQTUxXFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNjYtXFx1MEE3NVxcdTBBODEtXFx1MEE4M1xcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCQy1cXHUwQUM1XFx1MEFDNy1cXHUwQUM5XFx1MEFDQi1cXHUwQUNEXFx1MEFEMFxcdTBBRTAtXFx1MEFFM1xcdTBBRTYtXFx1MEFFRlxcdTBBRjktXFx1MEFGRlxcdTBCMDEtXFx1MEIwM1xcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNDLVxcdTBCNDRcXHUwQjQ3XFx1MEI0OFxcdTBCNEItXFx1MEI0RFxcdTBCNTUtXFx1MEI1N1xcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYzXFx1MEI2Ni1cXHUwQjZGXFx1MEI3MS1cXHUwQjc3XFx1MEI4MlxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJCRS1cXHUwQkMyXFx1MEJDNi1cXHUwQkM4XFx1MEJDQS1cXHUwQkNEXFx1MEJEMFxcdTBCRDdcXHUwQkU2LVxcdTBCRjJcXHUwQzAwLVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNELVxcdTBDNDRcXHUwQzQ2LVxcdTBDNDhcXHUwQzRBLVxcdTBDNERcXHUwQzU1XFx1MEM1NlxcdTBDNTgtXFx1MEM1QVxcdTBDNjAtXFx1MEM2M1xcdTBDNjYtXFx1MEM2RlxcdTBDNzgtXFx1MEM3RVxcdTBDODAtXFx1MEM4M1xcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkMtXFx1MENDNFxcdTBDQzYtXFx1MENDOFxcdTBDQ0EtXFx1MENDRFxcdTBDRDVcXHUwQ0Q2XFx1MENERVxcdTBDRTAtXFx1MENFM1xcdTBDRTYtXFx1MENFRlxcdTBDRjFcXHUwQ0YyXFx1MEQwMC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDQ0XFx1MEQ0Ni1cXHUwRDQ4XFx1MEQ0QS1cXHUwRDRFXFx1MEQ1NC1cXHUwRDYzXFx1MEQ2Ni1cXHUwRDc4XFx1MEQ3QS1cXHUwRDdGXFx1MEQ4MS1cXHUwRDgzXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBEQ0FcXHUwRENGLVxcdTBERDRcXHUwREQ2XFx1MEREOC1cXHUwRERGXFx1MERFNi1cXHUwREVGXFx1MERGMlxcdTBERjNcXHUwRTAxLVxcdTBFM0FcXHUwRTQwLVxcdTBFNEVcXHUwRTUwLVxcdTBFNTlcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFQzgtXFx1MEVDRFxcdTBFRDAtXFx1MEVEOVxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjE4XFx1MEYxOVxcdTBGMjAtXFx1MEYzM1xcdTBGMzVcXHUwRjM3XFx1MEYzOVxcdTBGM0UtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGNzEtXFx1MEY4NFxcdTBGODYtXFx1MEY5N1xcdTBGOTktXFx1MEZCQ1xcdTBGQzZcXHUxMDAwLVxcdTEwNDlcXHUxMDUwLVxcdTEwOURcXHUxMEEwLVxcdTEwQzVcXHUxMEM3XFx1MTBDRFxcdTEwRDAtXFx1MTBGQVxcdTEwRkMtXFx1MTI0OFxcdTEyNEEtXFx1MTI0RFxcdTEyNTAtXFx1MTI1NlxcdTEyNThcXHUxMjVBLVxcdTEyNURcXHUxMjYwLVxcdTEyODhcXHUxMjhBLVxcdTEyOERcXHUxMjkwLVxcdTEyQjBcXHUxMkIyLVxcdTEyQjVcXHUxMkI4LVxcdTEyQkVcXHUxMkMwXFx1MTJDMi1cXHUxMkM1XFx1MTJDOC1cXHUxMkQ2XFx1MTJEOC1cXHUxMzEwXFx1MTMxMi1cXHUxMzE1XFx1MTMxOC1cXHUxMzVBXFx1MTM1RC1cXHUxMzVGXFx1MTM2OS1cXHUxMzdDXFx1MTM4MC1cXHUxMzhGXFx1MTNBMC1cXHUxM0Y1XFx1MTNGOC1cXHUxM0ZEXFx1MTQwMS1cXHUxNjZDXFx1MTY2Ri1cXHUxNjdGXFx1MTY4MS1cXHUxNjlBXFx1MTZBMC1cXHUxNkVBXFx1MTZFRS1cXHUxNkY4XFx1MTcwMC1cXHUxNzBDXFx1MTcwRS1cXHUxNzE0XFx1MTcyMC1cXHUxNzM0XFx1MTc0MC1cXHUxNzUzXFx1MTc2MC1cXHUxNzZDXFx1MTc2RS1cXHUxNzcwXFx1MTc3MlxcdTE3NzNcXHUxNzgwLVxcdTE3RDNcXHUxN0Q3XFx1MTdEQ1xcdTE3RERcXHUxN0UwLVxcdTE3RTlcXHUxN0YwLVxcdTE3RjlcXHUxODBCLVxcdTE4MERcXHUxODEwLVxcdTE4MTlcXHUxODIwLVxcdTE4NzhcXHUxODgwLVxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTIwLVxcdTE5MkJcXHUxOTMwLVxcdTE5M0JcXHUxOTQ2LVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxOUQwLVxcdTE5REFcXHUxQTAwLVxcdTFBMUJcXHUxQTIwLVxcdTFBNUVcXHUxQTYwLVxcdTFBN0NcXHUxQTdGLVxcdTFBODlcXHUxQTkwLVxcdTFBOTlcXHUxQUE3XFx1MUFCMC1cXHUxQUMwXFx1MUIwMC1cXHUxQjRCXFx1MUI1MC1cXHUxQjU5XFx1MUI2Qi1cXHUxQjczXFx1MUI4MC1cXHUxQkYzXFx1MUMwMC1cXHUxQzM3XFx1MUM0MC1cXHUxQzQ5XFx1MUM0RC1cXHUxQzdEXFx1MUM4MC1cXHUxQzg4XFx1MUM5MC1cXHUxQ0JBXFx1MUNCRC1cXHUxQ0JGXFx1MUNEMC1cXHUxQ0QyXFx1MUNENC1cXHUxQ0ZBXFx1MUQwMC1cXHUxREY5XFx1MURGQi1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzBcXHUyMDcxXFx1MjA3NC1cXHUyMDc5XFx1MjA3Ri1cXHUyMDg5XFx1MjA5MC1cXHUyMDlDXFx1MjBEMC1cXHUyMEYwXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxNTAtXFx1MjE4OVxcdTI0NjAtXFx1MjQ5QlxcdTI0RUEtXFx1MjRGRlxcdTI3NzYtXFx1Mjc5M1xcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNGM1xcdTJDRkRcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDdGLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyREUwLVxcdTJERkZcXHUyRTJGXFx1MzAwNS1cXHUzMDA3XFx1MzAyMS1cXHUzMDJGXFx1MzAzMS1cXHUzMDM1XFx1MzAzOC1cXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5OVxcdTMwOUFcXHUzMDlELVxcdTMwOUZcXHUzMEExLVxcdTMwRkFcXHUzMEZDLVxcdTMwRkZcXHUzMTA1LVxcdTMxMkZcXHUzMTMxLVxcdTMxOEVcXHUzMTkyLVxcdTMxOTVcXHUzMUEwLVxcdTMxQkZcXHUzMUYwLVxcdTMxRkZcXHUzMjIwLVxcdTMyMjlcXHUzMjQ4LVxcdTMyNEZcXHUzMjUxLVxcdTMyNUZcXHUzMjgwLVxcdTMyODlcXHUzMkIxLVxcdTMyQkZcXHUzNDAwLVxcdTREQkZcXHU0RTAwLVxcdTlGRkNcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MkJcXHVBNjQwLVxcdUE2NzJcXHVBNjc0LVxcdUE2N0RcXHVBNjdGLVxcdUE2RjFcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3QkZcXHVBN0MyLVxcdUE3Q0FcXHVBN0Y1LVxcdUE4MjdcXHVBODJDXFx1QTgzMC1cXHVBODM1XFx1QTg0MC1cXHVBODczXFx1QTg4MC1cXHVBOEM1XFx1QThEMC1cXHVBOEQ5XFx1QThFMC1cXHVBOEY3XFx1QThGQlxcdUE4RkQtXFx1QTkyRFxcdUE5MzAtXFx1QTk1M1xcdUE5NjAtXFx1QTk3Q1xcdUE5ODAtXFx1QTlDMFxcdUE5Q0YtXFx1QTlEOVxcdUE5RTAtXFx1QTlGRVxcdUFBMDAtXFx1QUEzNlxcdUFBNDAtXFx1QUE0RFxcdUFBNTAtXFx1QUE1OVxcdUFBNjAtXFx1QUE3NlxcdUFBN0EtXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFRlxcdUFBRjItXFx1QUFGNlxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2OVxcdUFCNzAtXFx1QUJFQVxcdUFCRUNcXHVBQkVEXFx1QUJGMC1cXHVBQkY5XFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRC1cXHVGQjI4XFx1RkIyQS1cXHVGQjM2XFx1RkIzOC1cXHVGQjNDXFx1RkIzRVxcdUZCNDBcXHVGQjQxXFx1RkI0M1xcdUZCNDRcXHVGQjQ2LVxcdUZCQjFcXHVGQkQzLVxcdUZEM0RcXHVGRDUwLVxcdUZEOEZcXHVGRDkyLVxcdUZEQzdcXHVGREYwLVxcdUZERkJcXHVGRTAwLVxcdUZFMEZcXHVGRTIwLVxcdUZFMkZcXHVGRTcwLVxcdUZFNzRcXHVGRTc2LVxcdUZFRkNcXHVGRjEwLVxcdUZGMTlcXHVGRjIxLVxcdUZGM0FcXHVGRjQxLVxcdUZGNUFcXHVGRjY2LVxcdUZGQkVcXHVGRkMyLVxcdUZGQzdcXHVGRkNBLVxcdUZGQ0ZcXHVGRkQyLVxcdUZGRDdcXHVGRkRBLVxcdUZGRENdfFxcdUQ4MDBbXFx1REMwMC1cXHVEQzBCXFx1REMwRC1cXHVEQzI2XFx1REMyOC1cXHVEQzNBXFx1REMzQ1xcdURDM0RcXHVEQzNGLVxcdURDNERcXHVEQzUwLVxcdURDNURcXHVEQzgwLVxcdURDRkFcXHVERDA3LVxcdUREMzNcXHVERDQwLVxcdURENzhcXHVERDhBXFx1REQ4QlxcdURERkRcXHVERTgwLVxcdURFOUNcXHVERUEwLVxcdURFRDBcXHVERUUwLVxcdURFRkJcXHVERjAwLVxcdURGMjNcXHVERjJELVxcdURGNEFcXHVERjUwLVxcdURGN0FcXHVERjgwLVxcdURGOURcXHVERkEwLVxcdURGQzNcXHVERkM4LVxcdURGQ0ZcXHVERkQxLVxcdURGRDVdfFxcdUQ4MDFbXFx1REMwMC1cXHVEQzlEXFx1RENBMC1cXHVEQ0E5XFx1RENCMC1cXHVEQ0QzXFx1RENEOC1cXHVEQ0ZCXFx1REQwMC1cXHVERDI3XFx1REQzMC1cXHVERDYzXFx1REUwMC1cXHVERjM2XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjY3XXxcXHVEODAyW1xcdURDMDAtXFx1REMwNVxcdURDMDhcXHVEQzBBLVxcdURDMzVcXHVEQzM3XFx1REMzOFxcdURDM0NcXHVEQzNGLVxcdURDNTVcXHVEQzU4LVxcdURDNzZcXHVEQzc5LVxcdURDOUVcXHVEQ0E3LVxcdURDQUZcXHVEQ0UwLVxcdURDRjJcXHVEQ0Y0XFx1RENGNVxcdURDRkItXFx1REQxQlxcdUREMjAtXFx1REQzOVxcdUREODAtXFx1RERCN1xcdUREQkMtXFx1RERDRlxcdURERDItXFx1REUwM1xcdURFMDVcXHVERTA2XFx1REUwQy1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REUzOC1cXHVERTNBXFx1REUzRi1cXHVERTQ4XFx1REU2MC1cXHVERTdFXFx1REU4MC1cXHVERTlGXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU2XFx1REVFQi1cXHVERUVGXFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY1OC1cXHVERjcyXFx1REY3OC1cXHVERjkxXFx1REZBOS1cXHVERkFGXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdURDRkEtXFx1REQyN1xcdUREMzAtXFx1REQzOVxcdURFNjAtXFx1REU3RVxcdURFODAtXFx1REVBOVxcdURFQUJcXHVERUFDXFx1REVCMFxcdURFQjFcXHVERjAwLVxcdURGMjdcXHVERjMwLVxcdURGNTRcXHVERkIwLVxcdURGQ0JcXHVERkUwLVxcdURGRjZdfFxcdUQ4MDRbXFx1REMwMC1cXHVEQzQ2XFx1REM1Mi1cXHVEQzZGXFx1REM3Ri1cXHVEQ0JBXFx1RENEMC1cXHVEQ0U4XFx1RENGMC1cXHVEQ0Y5XFx1REQwMC1cXHVERDM0XFx1REQzNi1cXHVERDNGXFx1REQ0NC1cXHVERDQ3XFx1REQ1MC1cXHVERDczXFx1REQ3NlxcdUREODAtXFx1RERDNFxcdUREQzktXFx1RERDQ1xcdUREQ0UtXFx1REREQVxcdURERENcXHVEREUxLVxcdURERjRcXHVERTAwLVxcdURFMTFcXHVERTEzLVxcdURFMzdcXHVERTNFXFx1REU4MC1cXHVERTg2XFx1REU4OFxcdURFOEEtXFx1REU4RFxcdURFOEYtXFx1REU5RFxcdURFOUYtXFx1REVBOFxcdURFQjAtXFx1REVFQVxcdURFRjAtXFx1REVGOVxcdURGMDAtXFx1REYwM1xcdURGMDUtXFx1REYwQ1xcdURGMEZcXHVERjEwXFx1REYxMy1cXHVERjI4XFx1REYyQS1cXHVERjMwXFx1REYzMlxcdURGMzNcXHVERjM1LVxcdURGMzlcXHVERjNCLVxcdURGNDRcXHVERjQ3XFx1REY0OFxcdURGNEItXFx1REY0RFxcdURGNTBcXHVERjU3XFx1REY1RC1cXHVERjYzXFx1REY2Ni1cXHVERjZDXFx1REY3MC1cXHVERjc0XXxcXHVEODA1W1xcdURDMDAtXFx1REM0QVxcdURDNTAtXFx1REM1OVxcdURDNUUtXFx1REM2MVxcdURDODAtXFx1RENDNVxcdURDQzdcXHVEQ0QwLVxcdURDRDlcXHVERDgwLVxcdUREQjVcXHVEREI4LVxcdUREQzBcXHVEREQ4LVxcdURERERcXHVERTAwLVxcdURFNDBcXHVERTQ0XFx1REU1MC1cXHVERTU5XFx1REU4MC1cXHVERUI4XFx1REVDMC1cXHVERUM5XFx1REYwMC1cXHVERjFBXFx1REYxRC1cXHVERjJCXFx1REYzMC1cXHVERjNCXXxcXHVEODA2W1xcdURDMDAtXFx1REMzQVxcdURDQTAtXFx1RENGMlxcdURDRkYtXFx1REQwNlxcdUREMDlcXHVERDBDLVxcdUREMTNcXHVERDE1XFx1REQxNlxcdUREMTgtXFx1REQzNVxcdUREMzdcXHVERDM4XFx1REQzQi1cXHVERDQzXFx1REQ1MC1cXHVERDU5XFx1RERBMC1cXHVEREE3XFx1RERBQS1cXHVEREQ3XFx1REREQS1cXHVEREUxXFx1RERFM1xcdURERTRcXHVERTAwLVxcdURFM0VcXHVERTQ3XFx1REU1MC1cXHVERTk5XFx1REU5RFxcdURFQzAtXFx1REVGOF18XFx1RDgwN1tcXHVEQzAwLVxcdURDMDhcXHVEQzBBLVxcdURDMzZcXHVEQzM4LVxcdURDNDBcXHVEQzUwLVxcdURDNkNcXHVEQzcyLVxcdURDOEZcXHVEQzkyLVxcdURDQTdcXHVEQ0E5LVxcdURDQjZcXHVERDAwLVxcdUREMDZcXHVERDA4XFx1REQwOVxcdUREMEItXFx1REQzNlxcdUREM0FcXHVERDNDXFx1REQzRFxcdUREM0YtXFx1REQ0N1xcdURENTAtXFx1REQ1OVxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDhFXFx1REQ5MFxcdUREOTFcXHVERDkzLVxcdUREOThcXHVEREEwLVxcdUREQTlcXHVERUUwLVxcdURFRjZcXHVERkIwXFx1REZDMC1cXHVERkQ0XXxcXHVEODA4W1xcdURDMDAtXFx1REY5OV18XFx1RDgwOVtcXHVEQzAwLVxcdURDNkVcXHVEQzgwLVxcdURENDNdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDgyMlxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OVxcdUQ4ODAtXFx1RDg4M11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU2MC1cXHVERTY5XFx1REVEMC1cXHVERUVEXFx1REVGMC1cXHVERUY0XFx1REYwMC1cXHVERjM2XFx1REY0MC1cXHVERjQzXFx1REY1MC1cXHVERjU5XFx1REY1Qi1cXHVERjYxXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU5NlxcdURGMDAtXFx1REY0QVxcdURGNEYtXFx1REY4N1xcdURGOEYtXFx1REY5RlxcdURGRTBcXHVERkUxXFx1REZFM1xcdURGRTRcXHVERkYwXFx1REZGMV18XFx1RDgyMVtcXHVEQzAwLVxcdURGRjddfFxcdUQ4MjNbXFx1REMwMC1cXHVEQ0Q1XFx1REQwMC1cXHVERDA4XXxcXHVEODJDW1xcdURDMDAtXFx1REQxRVxcdURENTAtXFx1REQ1MlxcdURENjQtXFx1REQ2N1xcdURENzAtXFx1REVGQl18XFx1RDgyRltcXHVEQzAwLVxcdURDNkFcXHVEQzcwLVxcdURDN0NcXHVEQzgwLVxcdURDODhcXHVEQzkwLVxcdURDOTlcXHVEQzlEXFx1REM5RV18XFx1RDgzNFtcXHVERDY1LVxcdURENjlcXHVERDZELVxcdURENzJcXHVERDdCLVxcdUREODJcXHVERDg1LVxcdUREOEJcXHVEREFBLVxcdUREQURcXHVERTQyLVxcdURFNDRcXHVERUUwLVxcdURFRjNcXHVERjYwLVxcdURGNzhdfFxcdUQ4MzVbXFx1REMwMC1cXHVEQzU0XFx1REM1Ni1cXHVEQzlDXFx1REM5RVxcdURDOUZcXHVEQ0EyXFx1RENBNVxcdURDQTZcXHVEQ0E5LVxcdURDQUNcXHVEQ0FFLVxcdURDQjlcXHVEQ0JCXFx1RENCRC1cXHVEQ0MzXFx1RENDNS1cXHVERDA1XFx1REQwNy1cXHVERDBBXFx1REQwRC1cXHVERDE0XFx1REQxNi1cXHVERDFDXFx1REQxRS1cXHVERDM5XFx1REQzQi1cXHVERDNFXFx1REQ0MC1cXHVERDQ0XFx1REQ0NlxcdURENEEtXFx1REQ1MFxcdURENTItXFx1REVBNVxcdURFQTgtXFx1REVDMFxcdURFQzItXFx1REVEQVxcdURFREMtXFx1REVGQVxcdURFRkMtXFx1REYxNFxcdURGMTYtXFx1REYzNFxcdURGMzYtXFx1REY0RVxcdURGNTAtXFx1REY2RVxcdURGNzAtXFx1REY4OFxcdURGOEEtXFx1REZBOFxcdURGQUEtXFx1REZDMlxcdURGQzQtXFx1REZDQlxcdURGQ0UtXFx1REZGRl18XFx1RDgzNltcXHVERTAwLVxcdURFMzZcXHVERTNCLVxcdURFNkNcXHVERTc1XFx1REU4NFxcdURFOUItXFx1REU5RlxcdURFQTEtXFx1REVBRl18XFx1RDgzOFtcXHVEQzAwLVxcdURDMDZcXHVEQzA4LVxcdURDMThcXHVEQzFCLVxcdURDMjFcXHVEQzIzXFx1REMyNFxcdURDMjYtXFx1REMyQVxcdUREMDAtXFx1REQyQ1xcdUREMzAtXFx1REQzRFxcdURENDAtXFx1REQ0OVxcdURENEVcXHVERUMwLVxcdURFRjldfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1RENDNy1cXHVEQ0Q2XFx1REQwMC1cXHVERDRCXFx1REQ1MC1cXHVERDU5XXxcXHVEODNCW1xcdURDNzEtXFx1RENBQlxcdURDQUQtXFx1RENBRlxcdURDQjEtXFx1RENCNFxcdUREMDEtXFx1REQyRFxcdUREMkYtXFx1REQzRFxcdURFMDAtXFx1REUwM1xcdURFMDUtXFx1REUxRlxcdURFMjFcXHVERTIyXFx1REUyNFxcdURFMjdcXHVERTI5LVxcdURFMzJcXHVERTM0LVxcdURFMzdcXHVERTM5XFx1REUzQlxcdURFNDJcXHVERTQ3XFx1REU0OVxcdURFNEJcXHVERTRELVxcdURFNEZcXHVERTUxXFx1REU1MlxcdURFNTRcXHVERTU3XFx1REU1OVxcdURFNUJcXHVERTVEXFx1REU1RlxcdURFNjFcXHVERTYyXFx1REU2NFxcdURFNjctXFx1REU2QVxcdURFNkMtXFx1REU3MlxcdURFNzQtXFx1REU3N1xcdURFNzktXFx1REU3Q1xcdURFN0VcXHVERTgwLVxcdURFODlcXHVERThCLVxcdURFOUJcXHVERUExLVxcdURFQTNcXHVERUE1LVxcdURFQTlcXHVERUFCLVxcdURFQkJdfFxcdUQ4M0NbXFx1REQwMC1cXHVERDBDXXxcXHVEODNFW1xcdURGRjAtXFx1REZGOV18XFx1RDg2OVtcXHVEQzAwLVxcdURFRERcXHVERjAwLVxcdURGRkZdfFxcdUQ4NkRbXFx1REMwMC1cXHVERjM0XFx1REY0MC1cXHVERkZGXXxcXHVEODZFW1xcdURDMDAtXFx1REMxRFxcdURDMjAtXFx1REZGRl18XFx1RDg3M1tcXHVEQzAwLVxcdURFQTFcXHVERUIwLVxcdURGRkZdfFxcdUQ4N0FbXFx1REMwMC1cXHVERkUwXXxcXHVEODdFW1xcdURDMDAtXFx1REUxRF18XFx1RDg4NFtcXHVEQzAwLVxcdURGNEFdfFxcdURCNDBbXFx1REQwMC1cXHVEREVGXS8saG49L1tcXHQtXFxyIFxcdTAwODVcXHUwMEEwXFx1MTY4MFxcdTIwMDAtXFx1MjAwQVxcdTIwMjhcXHUyMDI5XFx1MjAyRlxcdTIwNUZcXHUzMDAwXS8sZ249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNLHMsbDtpZihlPjAmJihcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJih0PShpPWEuY2hpbGRyZW4pW2UtMV0pJiZcIldvcmROb2RlXCI9PT10LnR5cGUpe2ZvcihNPWUtMSxzPVtdLGw9W107aVsrK01dOylpZihcIldvcmROb2RlXCI9PT0ocj1pW01dKS50eXBlKXM9cy5jb25jYXQobCxyLmNoaWxkcmVuKSxsPVtdO2Vsc2V7aWYoXCJTeW1ib2xOb2RlXCIhPT1yLnR5cGUmJlwiUHVuY3R1YXRpb25Ob2RlXCIhPT1yLnR5cGV8fCFsbi50ZXN0KGVuKHIpKSlicmVhaztsLnB1c2gocil9aWYocy5sZW5ndGg+MClyZXR1cm4gbC5sZW5ndGg+MCYmKE0tPWwubGVuZ3RoKSxpLnNwbGljZShlLE0tZSksdC5jaGlsZHJlbj10LmNoaWxkcmVuLmNvbmNhdChzKSxvPXNbcy5sZW5ndGgtMV0sdC5wb3NpdGlvbiYmby5wb3NpdGlvbiYmKHQucG9zaXRpb24uZW5kPW8ucG9zaXRpb24uZW5kKSxlfX0pKSx5bj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsLGM9YS5jaGlsZHJlbjtpZihpPWNbZS0xXSxyPWNbZSsxXSxpJiZcIldvcmROb2RlXCI9PT1pLnR5cGUmJihcIlN5bWJvbE5vZGVcIj09PW4udHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PW4udHlwZSkmJlwiL1wiPT09ZW4obikmJih0PWVuKGkpLHM9bixNPVtuXSxsPTEsciYmXCJXb3JkTm9kZVwiPT09ci50eXBlJiYobz1lbihyKSxzPXIsTT1NLmNvbmNhdChyLmNoaWxkcmVuKSxsKyspLHQubGVuZ3RoPDMmJighb3x8by5sZW5ndGg8MykpKXJldHVybiBpLmNoaWxkcmVuPWkuY2hpbGRyZW4uY29uY2F0KE0pLGMuc3BsaWNlKGUsbCksaS5wb3NpdGlvbiYmcy5wb3NpdGlvbiYmKGkucG9zaXRpb24uZW5kPXMucG9zaXRpb24uZW5kKSxlfSkpLGJuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscix0LG8sTSxzLGw7aWYoZT4wJiZcIi5cIj09PWVuKG4pJiYodD0ocj0oaT1hLmNoaWxkcmVuKVtlLTFdKS5jaGlsZHJlbixcIldvcmROb2RlXCI9PT1yLnR5cGUmJnQmJjEhPT10Lmxlbmd0aCYmdC5sZW5ndGglMiE9MCkpe2ZvcihvPXQubGVuZ3RoLHM9ITA7dFstLW9dOylpZihNPXRbb10sbD1lbihNKSxvJTI9PTApe2lmKGwubGVuZ3RoPjEpcmV0dXJuO2NuLnRlc3QobCl8fChzPSExKX1lbHNlIGlmKFwiLlwiIT09bCl7aWYobzx0Lmxlbmd0aC0yKWJyZWFrO3JldHVybn1pZighcylyZXR1cm4gaS5zcGxpY2UoZSwxKSx0LnB1c2gobiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxlfX0pKSxEbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI9YS5jaGlsZHJlbjtpZihcIldvcmROb2RlXCI9PT1uLnR5cGUmJihpPXJbZSsxXSkmJlwiV29yZE5vZGVcIj09PWkudHlwZSlyZXR1cm4gci5zcGxpY2UoZSsxLDEpLG4uY2hpbGRyZW49bi5jaGlsZHJlbi5jb25jYXQoaS5jaGlsZHJlbiksaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPWkucG9zaXRpb24uZW5kKSxlfSkpLGZuPWEoMjApLEduPWZuKChmdW5jdGlvbihuLGUsYSl7dmFyIGk9YS5jaGlsZHJlbjtuLnBvc2l0aW9uJiYoIShlPDEpfHxhLnBvc2l0aW9uJiZhLnBvc2l0aW9uLnN0YXJ0fHwod24oYSksYS5wb3NpdGlvbi5zdGFydD1uLnBvc2l0aW9uLnN0YXJ0KSxlIT09aS5sZW5ndGgtMXx8YS5wb3NpdGlvbiYmYS5wb3NpdGlvbi5lbmR8fCh3bihhKSxhLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCkpfSkpO2Z1bmN0aW9uIHduKG4pe24ucG9zaXRpb258fChuLnBvc2l0aW9uPXt9KX12YXIgdm49YW4oKGZ1bmN0aW9uKG4sZSxhKXtmb3IodmFyIGkscix0PW4uY2hpbGRyZW4sbz0tMTt0Wysrb107KWlmKFwiV29yZE5vZGVcIj09PXRbb10udHlwZSlyZXR1cm47aWYoaT1hLmNoaWxkcmVuW2UtMV0pcmV0dXJuIGkuY2hpbGRyZW49aS5jaGlsZHJlbi5jb25jYXQodCksYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSxpLnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGU7KHI9YS5jaGlsZHJlbltlKzFdKSYmKHIuY2hpbGRyZW49dC5jb25jYXQoci5jaGlsZHJlbiksci5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKHIucG9zaXRpb24uc3RhcnQ9bi5wb3NpdGlvbi5zdGFydCksYS5jaGlsZHJlbi5zcGxpY2UoZSwxKSl9KSksa249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbz1uLmNoaWxkcmVuO2lmKG8mJm8ubGVuZ3RoPjAmJmU+MCYmKGk9b1swXSxyPW9bMV0sdD1hLmNoaWxkcmVuW2UtMV0sKFwiU3ltYm9sTm9kZVwiPT09aS50eXBlfHxcIlB1bmN0dWF0aW9uTm9kZVwiPT09aS50eXBlKSYmb24udGVzdChlbihpKSkpKXJldHVybiB0LmNoaWxkcmVuLnB1c2goby5zaGlmdCgpKSxpLnBvc2l0aW9uJiZ0LnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLHImJnIucG9zaXRpb24mJm4ucG9zaXRpb24mJihuLnBvc2l0aW9uLnN0YXJ0PXIucG9zaXRpb24uc3RhcnQpLGUtMX0pKSxSbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE09bi5jaGlsZHJlbjtpZihNJiZNLmxlbmd0aD4wJiZlPjApZm9yKGk9LTE7TVsrK2ldOyl7aWYoXCJXb3JkTm9kZVwiPT09KHI9TVtpXSkudHlwZSl7aWYoIXVuLnRlc3QoZW4ocikpKXJldHVybjtyZXR1cm4obz0odD1hLmNoaWxkcmVuKVtlLTFdKS5jaGlsZHJlbj1vLmNoaWxkcmVuLmNvbmNhdChNKSx0LnNwbGljZShlLDEpLG8ucG9zaXRpb24mJm4ucG9zaXRpb24mJihvLnBvc2l0aW9uLmVuZD1uLnBvc2l0aW9uLmVuZCksZX1pZihcIlN5bWJvbE5vZGVcIj09PXIudHlwZXx8XCJQdW5jdHVhdGlvbk5vZGVcIj09PXIudHlwZSlyZXR1cm59fSkpLFluPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGk9bi5jaGlsZHJlbixyPWEuY2hpbGRyZW4sdD1yW2UtMV0sbz1pWzBdO2lmKHQmJm8mJlwiV29yZE5vZGVcIj09PW8udHlwZSYmU24udGVzdChlbihvKSkpcmV0dXJuIHQuY2hpbGRyZW49dC5jaGlsZHJlbi5jb25jYXQoaSksci5zcGxpY2UoZSwxKSx0LnBvc2l0aW9uJiZuLnBvc2l0aW9uJiYodC5wb3NpdGlvbi5lbmQ9bi5wb3NpdGlvbi5lbmQpLGV9KSksQW49bmV3IFJlZ0V4cChcIl4oWzAtOV17MSwzfXxbYS16XXxhbHxjYXxjYXB8Y2NhfGNlbnR8Y2Z8Y2l0fGNvbnxjcHxjd3R8ZWFkfGV0Y3xmZnxmbHxpYmlkfGlkfG5lbXxvcHxwcm98c2VxfHNpY3xzdGF0fHRlbXx2aXopJFwiKSxQbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvPW4uY2hpbGRyZW47aWYobyYmby5sZW5ndGg+MSYmKGk9b1tvLmxlbmd0aC0xXSkmJlwiLlwiPT09ZW4oaSkmJihyPW9bby5sZW5ndGgtMl0pJiZcIldvcmROb2RlXCI9PT1yLnR5cGUmJkFuLnRlc3QoZW4ocikudG9Mb3dlckNhc2UoKSkmJihyLmNoaWxkcmVuLnB1c2goaSksby5wb3AoKSxpLnBvc2l0aW9uJiZyLnBvc2l0aW9uJiYoci5wb3NpdGlvbi5lbmQ9aS5wb3NpdGlvbi5lbmQpLHQ9YS5jaGlsZHJlbltlKzFdKSlyZXR1cm4gbi5jaGlsZHJlbj1vLmNvbmNhdCh0LmNoaWxkcmVuKSxhLmNoaWxkcmVuLnNwbGljZShlKzEsMSksdC5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uZW5kPXQucG9zaXRpb24uZW5kKSxlLTF9KSksQ249YW4oKGZ1bmN0aW9uKG4sZSxhKXt2YXIgaSxyLHQsbyxNPW4uY2hpbGRyZW47aWYoTSYmMCE9PU0ubGVuZ3RoJiYhKGU8MSkpZm9yKHI9LTE7TVsrK3JdOyl7aWYoXCJXb3JkTm9kZVwiPT09KGk9TVtyXSkudHlwZSlyZXR1cm47aWYoXCJTeW1ib2xOb2RlXCI9PT1pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1pLnR5cGUpe2lmKFwiLFwiIT09KHQ9ZW4oaSkpJiZcIjtcIiE9PXQpcmV0dXJuO3JldHVybihvPWEuY2hpbGRyZW5bZS0xXSkuY2hpbGRyZW49by5jaGlsZHJlbi5jb25jYXQoTSksby5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG8ucG9zaXRpb24uZW5kPW4ucG9zaXRpb24uZW5kKSxhLmNoaWxkcmVuLnNwbGljZShlLDEpLGV9fX0pKSxUbj1mbigoZnVuY3Rpb24obil7Zm9yKHZhciBlLGEsaSxyLHQ9bi5jaGlsZHJlbixvPXQubGVuZ3RoLE09ITE7dFstLW9dOylpZihcIlN5bWJvbE5vZGVcIj09PShlPXRbb10pLnR5cGV8fFwiUHVuY3R1YXRpb25Ob2RlXCI9PT1lLnR5cGUpe2lmKHNuLnRlc3QoZW4oZSkpKWlmKE0pe2lmKFwiLlwiPT09ZW4oZSkpaWYoYT10W28tMV0saT10W28rMV0sYSYmXCJXb3JkTm9kZVwiPT09YS50eXBlKXtpZihyPXRbbysyXSxpJiZyJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1pLnR5cGUmJlwiLlwiPT09ZW4ocikpY29udGludWU7dC5zcGxpY2UobywxKSxhLmNoaWxkcmVuLnB1c2goZSksZS5wb3NpdGlvbiYmYS5wb3NpdGlvbiYmKGEucG9zaXRpb24uZW5kPWUucG9zaXRpb24uZW5kKSxvLS19ZWxzZSBpJiZcIldvcmROb2RlXCI9PT1pLnR5cGUmJih0LnNwbGljZShvLDEpLGkuY2hpbGRyZW4udW5zaGlmdChlKSxlLnBvc2l0aW9uJiZpLnBvc2l0aW9uJiYoaS5wb3NpdGlvbi5zdGFydD1lLnBvc2l0aW9uLnN0YXJ0KSl9ZWxzZSBNPSEwfWVsc2VcIldvcmROb2RlXCI9PT1lLnR5cGUmJihNPSEwKX0pKSx4bj1mbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHI9bi5jaGlsZHJlbjtyJiZyLmxlbmd0aD4wJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1yWzBdLnR5cGUmJihhLmNoaWxkcmVuLnNwbGljZShlLDAsci5zaGlmdCgpKSwoaT1yWzBdKSYmaS5wb3NpdGlvbiYmbi5wb3NpdGlvbiYmKG4ucG9zaXRpb24uc3RhcnQ9aS5wb3NpdGlvbi5zdGFydCkpfSkpLHpuPWFuKChmdW5jdGlvbihuLGUsYSl7dmFyIGkscj1uLmNoaWxkcmVuO2lmKHImJnIubGVuZ3RoPjAmJlwiV2hpdGVTcGFjZU5vZGVcIj09PXJbci5sZW5ndGgtMV0udHlwZSlyZXR1cm4gYS5jaGlsZHJlbi5zcGxpY2UoZSsxLDAsbi5jaGlsZHJlbi5wb3AoKSksKGk9cltyLmxlbmd0aC0xXSkmJmkucG9zaXRpb24mJm4ucG9zaXRpb24mJihuLnBvc2l0aW9uLmVuZD1pLnBvc2l0aW9uLmVuZCksZX0pKSxFbj1hbigoZnVuY3Rpb24obixlLGEpe3ZhciBpLHIsdCxvLE0scyxsO2lmKFwiU2VudGVuY2VOb2RlXCI9PT1uLnR5cGUpZm9yKGk9bi5jaGlsZHJlbixyPTA7KytyPGkubGVuZ3RoLTE7KWlmKFwiV2hpdGVTcGFjZU5vZGVcIj09PShsPWlbcl0pLnR5cGUmJk1uLnRlc3QoZW4obCkpKXJldHVybiBuLmNoaWxkcmVuPWkuc2xpY2UoMCxyKSxzPXt0eXBlOlwiU2VudGVuY2VOb2RlXCIsY2hpbGRyZW46aS5zbGljZShyKzEpfSx0PWlbci0xXSxvPWlbcisxXSxhLmNoaWxkcmVuLnNwbGljZShlKzEsMCxsLHMpLG4ucG9zaXRpb24mJnQucG9zaXRpb24mJm8ucG9zaXRpb24mJihNPW4ucG9zaXRpb24uZW5kLG4ucG9zaXRpb24uZW5kPXQucG9zaXRpb24uZW5kLHMucG9zaXRpb249e3N0YXJ0Om8ucG9zaXRpb24uc3RhcnQsZW5kOk19KSxlKzF9KSksQm49YW4oKGZ1bmN0aW9uKG4sZSxhKXtpZihcImNoaWxkcmVuXCJpbiBuJiYwPT09bi5jaGlsZHJlbi5sZW5ndGgpcmV0dXJuIGEuY2hpbGRyZW4uc3BsaWNlKGUsMSksZX0pKTtmdW5jdGlvbiBObihuKXt2YXIgZSxhLGk9bi50eXBlLHI9bi50b2tlbml6ZXIsdD1uLmRlbGltaXRlcixvPXQmJihlPW4uZGVsaW1pdGVyVHlwZSxhPXQsZnVuY3Rpb24obil7Zm9yKHZhciBpLHIsdCxvPVtdLE09bi5jaGlsZHJlbixzPW4udHlwZSxsPS0xLGM9TS5sZW5ndGgtMSxTPTA7KytsPE0ubGVuZ3RoOykobD09PWN8fE1bbF0udHlwZT09PWUmJmEudGVzdChlbihNW2xdKSkpJiYoaT1NW1NdLHI9TVtsXSx0PXt0eXBlOnMsY2hpbGRyZW46TS5zbGljZShTLGwrMSl9LGkucG9zaXRpb24mJnIucG9zaXRpb24mJih0LnBvc2l0aW9uPXtzdGFydDppLnBvc2l0aW9uLnN0YXJ0LGVuZDpyLnBvc2l0aW9uLmVuZH0pLG8ucHVzaCh0KSxTPWwrMSk7cmV0dXJuIG99KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9dGhpc1tyXShuKTtyZXR1cm57dHlwZTppLGNoaWxkcmVuOm8/byhlKTplfX19Y2xhc3MgWm57Y29uc3RydWN0b3IobixlKXt2YXIgYT1lfHxuO3RoaXMuZG9jPWE/U3RyaW5nKGEpOm51bGx9cnVuKG4sZSl7dmFyIGE9dGhpc1tuK1wiUGx1Z2luc1wiXSxpPS0xO2lmKGEpZm9yKDthWysraV07KWFbaV0oZSk7cmV0dXJuIGV9cGFyc2Uobil7cmV0dXJuIHRoaXMudG9rZW5pemVSb290KG58fHRoaXMuZG9jKX10b2tlbml6ZShuKXt2YXIgZSxhLGkscix0LG8sTT10aGlzLHM9W10sbD0wLGM9MCxTPTEsdT0xO2lmKG51bGw9PW4/bj1cIlwiOm4gaW5zdGFuY2VvZiBTdHJpbmcmJihuPW4udG9TdHJpbmcoKSksXCJzdHJpbmdcIiE9dHlwZW9mIG4pe2lmKFwibGVuZ3RoXCJpbiBuJiYoIW5bMF18fG5bMF0udHlwZSkpcmV0dXJuIG47dGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBpbnZvY2F0aW9uOiAnXCIrbitcIicgaXMgbm90IGEgdmFsaWQgYXJndW1lbnQgZm9yICdQYXJzZUxhdGluJ1wiKX1pZighbilyZXR1cm4gcztmb3Iobz10aGlzLnBvc2l0aW9uP2Z1bmN0aW9uKG4pe3ZhciBlLGE9KGU9aCgpLGZ1bmN0aW9uKG4pe3JldHVybiBuLnBvc2l0aW9uPW5ldyBwKGUpLG59KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9LTEsYT0tMTtmb3IoYys9bi5sZW5ndGg7KytlPG4ubGVuZ3RoOylcIlxcblwiPT09bi5jaGFyQXQoZSkmJihhPWUsUysrKTthPDA/dSs9bi5sZW5ndGg6dT1uLmxlbmd0aC1hfShuKSxmdW5jdGlvbiguLi5uKXtyZXR1cm4gYShtKC4uLm4pKX19OmZ1bmN0aW9uKCl7cmV0dXJuIG19LGk9XCJcIixhPVwiXCI7bDxuLmxlbmd0aDspZT1uLmNoYXJBdChsKSx0PWhuLnRlc3QoZSk/XCJXaGl0ZVNwYWNlXCI6bW4udGVzdChlKT9cIlB1bmN0dWF0aW9uXCI6cG4udGVzdChlKT9cIldvcmRcIjpcIlN5bWJvbFwiLGQoKSxpPWUsZT1cIlwiLHI9dCx0PW51bGwsbCsrO3JldHVybiBkKCkscztmdW5jdGlvbiBkKCl7ciE9PXR8fFwiV29yZFwiIT09ciYmXCJXaGl0ZVNwYWNlXCIhPT1yJiZlIT09aSYmIWRuLnRlc3QoZSk/KGEmJk1bXCJ0b2tlbml6ZVwiK3JdKGEsbyksYT1lKTphKz1lfWZ1bmN0aW9uIG0obixlKXtyZXR1cm4gZT9lLmNoaWxkcmVuLnB1c2gobik6cy5wdXNoKG4pLG59ZnVuY3Rpb24gcChuKXt0aGlzLnN0YXJ0PW4sdGhpcy5lbmQ9aCgpfWZ1bmN0aW9uIGgoKXtyZXR1cm57bGluZTpTLGNvbHVtbjp1LG9mZnNldDpjfX19fWZ1bmN0aW9uIEZuKG4pe3JldHVybiBuKz1cIk5vZGVcIixmdW5jdGlvbihlLGEsaSl7cmV0dXJuIG51bGw9PWUmJihlPVwiXCIpLChhfHxMbikoZSkoe3R5cGU6bix2YWx1ZTpTdHJpbmcoZSl9LGkpfX1mdW5jdGlvbiBJbihuLGUsYSl7bi5wcm90b3R5cGVbZV09ZnVuY3Rpb24oLi4ubil7cmV0dXJuIHRoaXMucnVuKGUsYS5hcHBseSh0aGlzLG4pKX19ZnVuY3Rpb24gVW4obil7cmV0dXJuIGZ1bmN0aW9uKGUsYSl7dmFyIGk7aWYoIShlIGluIHRoaXMpKXRocm93IG5ldyBFcnJvcihcIklsbGVnYWwgSW52b2NhdGlvbjogVW5zdXBwb3J0ZWQgYGtleWAgZm9yIGB1c2Uoa2V5LCBwbHVnaW5zKWAuIE1ha2Ugc3VyZSBga2V5YCBpcyBhIHN1cHBvcnRlZCBmdW5jdGlvblwiKTthJiYoaT1lK1wiUGx1Z2luc1wiLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgYT9bYV06YS5jb25jYXQoKSx0aGlzW2ldfHwodGhpc1tpXT1bXSksbih0aGlzLGksYSkpfX1mdW5jdGlvbiBqbihuLGUpe3JldHVybiBlJiZlLmNoaWxkcmVuLnB1c2gobiksbn1mdW5jdGlvbiBMbigpe3JldHVybiBqbn1abi5wcm90b3R5cGUucG9zaXRpb249ITAsWm4ucHJvdG90eXBlLnRva2VuaXplU3ltYm9sPUZuKFwiU3ltYm9sXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVdoaXRlU3BhY2U9Rm4oXCJXaGl0ZVNwYWNlXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVB1bmN0dWF0aW9uPUZuKFwiUHVuY3R1YXRpb25cIiksWm4ucHJvdG90eXBlLnRva2VuaXplU291cmNlPUZuKFwiU291cmNlXCIpLFpuLnByb3RvdHlwZS50b2tlbml6ZVRleHQ9Rm4oXCJUZXh0XCIpLFpuLnByb3RvdHlwZS51c2U9VW4oKGZ1bmN0aW9uKG4sZSxhKXtuW2VdPW5bZV0uY29uY2F0KGEpfSkpLFpuLnByb3RvdHlwZS51c2VGaXJzdD1VbigoZnVuY3Rpb24obixlLGEpe25bZV09YS5jb25jYXQobltlXSl9KSksSW4oWm4sXCJ0b2tlbml6ZVdvcmRcIiwoZnVuY3Rpb24obixlKXt2YXIgYT0oZXx8TG4pKFwiXCIpLGk9e3R5cGU6XCJXb3JkTm9kZVwiLGNoaWxkcmVuOltdfTtyZXR1cm4gdGhpcy50b2tlbml6ZVRleHQobixlLGkpLGEoaSl9KSksSW4oWm4sXCJ0b2tlbml6ZVNlbnRlbmNlXCIsTm4oe3R5cGU6XCJTZW50ZW5jZU5vZGVcIix0b2tlbml6ZXI6XCJ0b2tlbml6ZVwifSkpLEluKFpuLFwidG9rZW5pemVQYXJhZ3JhcGhcIixObih7dHlwZTpcIlBhcmFncmFwaE5vZGVcIixkZWxpbWl0ZXI6c24sZGVsaW1pdGVyVHlwZTpcIlB1bmN0dWF0aW9uTm9kZVwiLHRva2VuaXplcjpcInRva2VuaXplU2VudGVuY2VcIn0pKSxJbihabixcInRva2VuaXplUm9vdFwiLE5uKHt0eXBlOlwiUm9vdE5vZGVcIixkZWxpbWl0ZXI6L15bIFxcdF0qKChcXHI/XFxufFxccilbXFx0IF0qKSskLyxkZWxpbWl0ZXJUeXBlOlwiV2hpdGVTcGFjZU5vZGVcIix0b2tlbml6ZXI6XCJ0b2tlbml6ZVBhcmFncmFwaFwifSkpLFpuLnByb3RvdHlwZS51c2UoXCJ0b2tlbml6ZVNlbnRlbmNlXCIsW3JuLHRuLGduLHluLGJuLERuLEduXSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplUGFyYWdyYXBoXCIsW3ZuLGtuLFJuLFluLFBuLENuLFRuLHhuLHpuLEVuLEJuLEduXSksWm4ucHJvdG90eXBlLnVzZShcInRva2VuaXplUm9vdFwiLFt4bix6bixCbixHbl0pO2Z1bmN0aW9uIHFuKG4sZT1cIlwiKXtsZXQgYT0tMTtpZighbnx8IUFycmF5LmlzQXJyYXkobikmJiFuLnR5cGUpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgbm9kZSwgbm90IGBcIituK1wiYFwiKTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbi52YWx1ZSlyZXR1cm4gbi52YWx1ZTtjb25zdCBpPShBcnJheS5pc0FycmF5KG4pP246bi5jaGlsZHJlbil8fFtdO2lmKDE9PT1pLmxlbmd0aCYmXCJ2YWx1ZVwiaW4gaVswXSlyZXR1cm4gaVswXS52YWx1ZTtjb25zdCByPVtdO2Zvcig7KythPGkubGVuZ3RoOylyW2FdPXFuKGlbYV0sZSk7cmV0dXJuIHIuam9pbihlKX1mdW5jdGlvbiBIbihuKXtyZXR1cm4gcW4obil9Y29uc3QgSm49ZnVuY3Rpb24oKXtPYmplY3QuYXNzaWduKHRoaXMse0NvbXBpbGVyOkhufSl9LE9uPUooKS51c2UoKGZ1bmN0aW9uKCl7T2JqZWN0LmFzc2lnbih0aGlzLHtQYXJzZXI6bm4oWm4pfSl9KSkudXNlKEpuKS5mcmVlemUoKTt2YXIgWG49YSgyOTEpO2NvbnN0IFZuPWZ1bmN0aW9uIG4oZSxhLGkscix0KXtjb25zdCBvPVduKGEpO2lmKG51bGwhPWkmJihcIm51bWJlclwiIT10eXBlb2YgaXx8aTwwfHxpPT09TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgaW5kZXhcIik7aWYoIShudWxsPT1yfHxuKHIpJiZyLmNoaWxkcmVuKSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwYXJlbnQgbm9kZVwiKTtpZihudWxsPT1yIT0obnVsbD09aSkpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYm90aCBwYXJlbnQgYW5kIGluZGV4XCIpO3JldHVybiEoIWV8fCFlLnR5cGV8fFwic3RyaW5nXCIhPXR5cGVvZiBlLnR5cGUpJiZCb29sZWFuKG8uY2FsbCh0LGUsaSxyKSl9LFduPWZ1bmN0aW9uKG4pe2lmKG51bGw9PW4pcmV0dXJuICRuO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuKXJldHVybiBlPW4sS24oKGZ1bmN0aW9uKG4pe3JldHVybiBuJiZuLnR5cGU9PT1lfSkpO3ZhciBlO2lmKFwib2JqZWN0XCI9PXR5cGVvZiBuKXJldHVybiBBcnJheS5pc0FycmF5KG4pP2Z1bmN0aW9uKG4pe2NvbnN0IGU9W107bGV0IGE9LTE7Zm9yKDsrK2E8bi5sZW5ndGg7KWVbYV09V24oblthXSk7cmV0dXJuIEtuKChmdW5jdGlvbiguLi5uKXtsZXQgYT0tMTtmb3IoOysrYTxlLmxlbmd0aDspaWYoZVthXS5jYWxsKHRoaXMsLi4ubikpcmV0dXJuITA7cmV0dXJuITF9KSl9KG4pOmZ1bmN0aW9uKG4pe3JldHVybiBLbigoZnVuY3Rpb24oZSl7bGV0IGE7Zm9yKGEgaW4gbilpZihlW2FdIT09blthXSlyZXR1cm4hMTtyZXR1cm4hMH0pKX0obik7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgbilyZXR1cm4gS24obik7dGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3RcIil9O2Z1bmN0aW9uIEtuKG4pe3JldHVybiBmdW5jdGlvbiguLi5lKXtyZXR1cm4gQm9vbGVhbihuLmNhbGwodGhpcywuLi5lKSl9fWZ1bmN0aW9uICRuKCl7cmV0dXJuITB9Y29uc3QgUW49XCJza2lwXCIsX249ZnVuY3Rpb24obixlLGEsaSl7XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgYSYmKGk9YSxhPWUsZT1udWxsKSxmdW5jdGlvbihuLGUsYSxpKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBhJiYoaT1hLGE9ZSxlPW51bGwpO2NvbnN0IHI9V24oZSksdD1pPy0xOjE7IWZ1bmN0aW9uIG4obyxNLHMpe2NvbnN0IGw9XCJvYmplY3RcIj09dHlwZW9mIG8mJm51bGwhPT1vP286e307bGV0IGM7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIGwudHlwZSYmKGM9XCJzdHJpbmdcIj09dHlwZW9mIGwudGFnTmFtZT9sLnRhZ05hbWU6XCJzdHJpbmdcIj09dHlwZW9mIGwubmFtZT9sLm5hbWU6dm9pZCAwLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTLFwibmFtZVwiLHt2YWx1ZTpcIm5vZGUgKFwiK2wudHlwZSsoYz9cIjxcIitjK1wiPlwiOlwiXCIpK1wiKVwifSkpLFM7ZnVuY3Rpb24gUygpe2xldCBsLGMsUyx1PVtdO2lmKCghZXx8cihvLE0sc1tzLmxlbmd0aC0xXXx8bnVsbCkpJiYodT1mdW5jdGlvbihuKXtyZXR1cm4gQXJyYXkuaXNBcnJheShuKT9uOlwibnVtYmVyXCI9PXR5cGVvZiBuP1shMCxuXTpbbl19KGEobyxzKSksITE9PT11WzBdKSlyZXR1cm4gdTtpZihvLmNoaWxkcmVuJiZ1WzBdIT09UW4pZm9yKGM9KGk/by5jaGlsZHJlbi5sZW5ndGg6LTEpK3QsUz1zLmNvbmNhdChvKTtjPi0xJiZjPG8uY2hpbGRyZW4ubGVuZ3RoOyl7aWYobD1uKG8uY2hpbGRyZW5bY10sYyxTKSgpLCExPT09bFswXSlyZXR1cm4gbDtjPVwibnVtYmVyXCI9PXR5cGVvZiBsWzFdP2xbMV06Yyt0fXJldHVybiB1fX0obixudWxsLFtdKSgpfShuLGUsKGZ1bmN0aW9uKG4sZSl7Y29uc3QgaT1lW2UubGVuZ3RoLTFdO3JldHVybiBhKG4saT9pLmNoaWxkcmVuLmluZGV4T2Yobik6bnVsbCxpKX0pLGkpfTt2YXIgbmU9YSg0MzIpO2NvbnN0IGVlPXJlKFtcInVuaXN0XCIsXCJVXCIsXCJVRUZBXCIsXCJVS1wiLFwiVU5cIixcIlVOSENSXCIsXCJVU1wiLFwiVVNCXCIsXCJldWNhbHlwdCpcIixcImV1Y2hhKlwiLFwiZXVjaHIqXCIsXCJldWNsaWQqXCIsXCJldWNyaXRlXCIsXCJldWNyeXBoaWFcIixcImV1Z2VuKlwiLFwiZXVrYXIqXCIsXCJldWxvZypcIixcImV1bmljZVwiLFwiZXVudWNoXCIsXCJldXBoKlwiLFwiZXVyYSpcIixcImV1cmUqXCIsXCJldXJvKlwiLFwiZXVyeSpcIixcImV1dGhhKlwiLFwiZXdlXCIsXCJld2VyXCIsXCJoYWJpdHVhbFwiLFwiaGFsbHVjaW4qXCIsXCJoZXJiKlwiLFwiaGVyZWRpdCpcIixcImhpc3RvcipcIixcImhpbGFyaW91cypcIixcImhvcnJlbmQqXCIsXCJob3JyaWYqXCIsXCJob3RlbCpcIixcIm1zXCIsXCJvbmNlXCIsXCJvbmVcIixcIm9uZS9cIixcIm9uZS0qXCIsXCJvbmVhbm90aGVyXCIsXCJvbmViZXJyeVwiLFwib25lZm9sZCpcIixcIm9uZWhlYXJ0KlwiLFwib25lbmVzcypcIixcIm9uZXNlbGYqXCIsXCJvbmV0aW1lKlwiLFwib25ld2F5XCIsXCJvbmV3aGVyZSpcIixcIm9uZXllYXJcIixcInViaXEqXCIsXCJ1Z2FuZGFuXCIsXCJ1a2FzZVwiLFwidWtyYWluKlwiLFwidWt1bGVsZVwiLFwidWx1bGF0ZWRcIixcInVsdWxhdGlvblwiLFwidW5hbmltKlwiLFwidW5hcnlcIixcInVuZXNjb1wiLFwidW5pYW0qXCIsXCJ1bmlhcnQqXCIsXCJ1bmlhdCpcIixcInVuaWF1cipcIixcInVuaWF4KlwiLFwidW5pYmFzKlwiLFwidW5pYmxlXCIsXCJ1bmljeWNsKlwiLFwidW5pZGlyZWN0KlwiLFwidW5pb24qXCIsXCJ1bml0KlwiLFwidW5pdipcIixcInVuaWYqXCIsXCJ1bmlxKlwiLFwidXJhbipcIixcInVyYXRlXCIsXCJ1cmkqXCIsXCJ1cm9sb2dpc3RcIixcInVydWd1YXlcIixcInVydWd1YXlhblwiLFwidXJ1Z3VheWFuc1wiLFwidXNhYipcIixcInVzYWdlXCIsXCJ1c2UqXCIsXCJ1c2luZ1wiLFwidXN1KlwiLFwidXRhaFwiLFwidXRlbipcIixcInV0ZXIqXCIsXCJ1dGlsKlwiLFwidXRvcCpcIixcInV0cmVjaHRcIixcInV0dG94ZXRlclwiLFwidXZ1bGFcIixcInV2dWxhclwiLFwidXlnaHVyXCJdKSxhZT1yZShbXCJtZGFzdFwiLFwizrFcIixcImZcIixcImZiaVwiLFwiZm1cIixcImZkYVwiLFwibFwiLFwibVwiLFwiblwiLFwibmZsXCIsXCJuYmFcIixcIm5iY1wiLFwibmhsXCIsXCJuZ29cIixcIm5wbVwiLFwibnZpZGlhXCIsXCJzXCIsXCJyXCIsXCJoXCIsXCJoYWJpdHVhbFwiLFwiaGFsbHVjaW4qXCIsXCJoYXV0ZXVyXCIsXCJoZWlyKlwiLFwiaGVyYipcIixcImhlcmVkaXQqXCIsXCJoaWxhcmlvdXMqXCIsXCJoaXN0b3IqXCIsXCJob21hZ2VcIixcImhvbmVzdCpcIixcImhvbm9yKlwiLFwiaG9ub3VyKlwiLFwiaG9ycmVuZCpcIixcImhvcnJpZipcIixcImhvdGVsKlwiLFwiaG91cipcIixcImgxXCIsXCJoMlwiLFwiaDNcIixcImg0XCIsXCJoNVwiLFwiaDZcIixcImhpdlwiLFwibGJ3XCIsXCJsY2RcIixcIm1wZ1wiLFwibXBoXCIsXCJNQkFcIixcIk1BXCIsXCJNUklcIixcIm1zY1wiLFwiTVNcIixcIk1UVlwiLFwiaHRtbFwiLFwiciZkXCIsXCJTR01MXCIsXCJTT1NcIixcIlNNU1wiLFwieFwiLFwiWE1MXCIsXCJ4bWFzXCIsXCJ4LXJheVwiLFwieC1yYXlzXCIsXCJ4Ym94XCIsXCJTVVZcIixcIlNURFwiLFwiU1BGXCIsXCJIQlwiLFwiUkFGXCIsXCJJT1VcIl0pO2Z1bmN0aW9uIGllKCl7cmV0dXJuKG4sZSk9PntfbihuLFwiV29yZE5vZGVcIiwoKG4sYSxpKT0+e2NvbnN0IHI9aSx0PXFuKG4pLG89dC50b0xvd2VyQ2FzZSgpO2lmKFwiYVwiIT09byYmXCJhblwiIT09b3x8IXJ8fG51bGw9PT1hKXJldHVybjtjb25zdCBNPWZ1bmN0aW9uKG4sZSl7Y29uc3QgYT1uLmNoaWxkcmVuO2xldCBpLHI9YVsrK2VdO3JldHVybiByJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1yLnR5cGUmJihyPWFbKytlXSxyJiZcIlB1bmN0dWF0aW9uTm9kZVwiPT09ci50eXBlJiYvXlvigJzigJ3igJjigJknXCIoKVtcXF1dJC8udGVzdChxbihyKSkmJihyPWFbKytlXSksciYmXCJXb3JkTm9kZVwiPT09ci50eXBlJiYoaT1yKSksaX0ocixhKTtpZighTSlyZXR1cm47Y29uc3Qgcz0xIT09dC5sZW5ndGgsbD1xbihNKTtpZihvIT09dCYmIXMmJiFmdW5jdGlvbihuLGUpe2NvbnN0IGE9bi5jaGlsZHJlbjtmb3IoO2UtLTspaWYoXCJXb3JkTm9kZVwiPT09YVtlXS50eXBlKXJldHVybiExO3JldHVybiEwfShyLGEpKXJldHVybjtpZihvPT09dCYmIXMmJi9eKGFuZHxvcnxub3IpJC9pLnRlc3QobCkpcmV0dXJuO2xldCBjPWZ1bmN0aW9uKG4pe2NvbnN0IGU9bi5yZXBsYWNlKC9eXFxkKy8sKG49Pm5lLnRvV29yZHMobikrXCIgXCIpKS5zcGxpdCgvWyfigJkgLV0vLDEpWzBdLGE9ZS50b0xvd2VyQ2FzZSgpO2xldCBpO3JldHVybiBlZShlKSYmKGk9XCJhXCIpLGFlKGUpJiYoaT1cImFcIj09PWk/XCJhLW9yLWFuXCI6XCJhblwiKSxpfHxhIT09ZXx8KGk9L1thZWlvdV0vLnRlc3QoYS5jaGFyQXQoMCkpP1wiYW5cIjpcImFcIiksaX0obCk7KFwiYW5cIj09PWMmJiFzfHxcImFcIj09PWMmJnMpJiYobyE9PXQmJihjPWMuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrYy5zbGljZSgxKSksT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoWG4oXCJVc2UgYCVzYCBiZWZvcmUgYCVzYCwgbm90IGAlc2BcIixjLGwsdCksbixcInJldGV4dC1pbmRlZmluaXRlLWFydGljbGU6cmV0ZXh0LWluZGVmaW5pdGUtYXJ0aWNsZVwiKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6W2NdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtaW5kZWZpbml0ZS1hcnRpY2xlI3JlYWRtZVwifSkpfSkpfX1mdW5jdGlvbiByZShuKXtjb25zdCBlPVtdLGE9W10saT1bXTtsZXQgcj0tMTtmb3IoOysrcjxuLmxlbmd0aDspe2NvbnN0IHQ9bltyXTtcIipcIj09PXQuY2hhckF0KHQubGVuZ3RoLTEpP2UucHVzaChuZXcgUmVnRXhwKFwiXlwiK3Quc2xpY2UoMCwtMSksXCJpXCIpKTp0PT09dC50b0xvd2VyQ2FzZSgpP2kucHVzaCh0KTphLnB1c2godCl9cmV0dXJuIGZ1bmN0aW9uKG4pe2NvbnN0IHI9bi50b0xvd2VyQ2FzZSgpO2lmKGEuaW5jbHVkZXMobil8fGkuaW5jbHVkZXMocikpcmV0dXJuITA7bGV0IHQ9LTE7Zm9yKDsrK3Q8ZS5sZW5ndGg7KWlmKGVbdF0udGVzdChuKSlyZXR1cm4hMDtyZXR1cm4hMX19dmFyIHRlPU1lKFwic3RhcnRcIiksb2U9TWUoXCJlbmRcIik7ZnVuY3Rpb24gTWUobil7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBhPWUmJmUucG9zaXRpb24mJmUucG9zaXRpb25bbl18fHt9O3JldHVybntsaW5lOmEubGluZXx8bnVsbCxjb2x1bW46YS5jb2x1bW58fG51bGwsb2Zmc2V0OmEub2Zmc2V0Pi0xP2Eub2Zmc2V0Om51bGx9fX1jb25zdCBzZT1cInJldGV4dC1yZXBlYXRlZC13b3Jkc1wiLGxlPW5ldyBTZXQoW1wiaGFkXCIsXCJ0aGF0XCIsXCJjYW5cIixcImJsYWhcIixcImJlZXBcIixcInlhZGRhXCIsXCJzYXBpZW5zXCIsXCJ0c2VcIixcIm1hdVwiXSk7ZnVuY3Rpb24gY2UoKXtyZXR1cm4obixlKT0+e19uKG4sXCJTZW50ZW5jZU5vZGVcIiwobj0+e2xldCBhLGkscj0tMTtmb3IoOysrcjxuLmNoaWxkcmVuLmxlbmd0aDspe2NvbnN0IHQ9bi5jaGlsZHJlbltyXTtpZihcIldvcmROb2RlXCI9PT10LnR5cGUpe2NvbnN0IG89cW4odCk7aT17Y2hpbGQ6dCxpbmRleDpyLHZhbHVlOm99LGEmJmEudmFsdWUudG9Mb3dlckNhc2UoKT09PW8udG9Mb3dlckNhc2UoKSYmIVNlKG8pJiZPYmplY3QuYXNzaWduKGUubWVzc2FnZShcIkV4cGVjdGVkIGBcIitvK1wiYCBvbmNlLCBub3QgdHdpY2VcIix7c3RhcnQ6dGUoYS5jaGlsZCksZW5kOm9lKHQpfSxbc2Usby50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcVysvZyxcIi1cIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnFuKG4uY2hpbGRyZW4uc2xpY2UoYS5pbmRleCxyKzEpKSxleHBlY3RlZDpbb10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1yZXBlYXRlZC13b3JkcyNyZWFkbWVcIn0pfWVsc2VcIldoaXRlU3BhY2VOb2RlXCI9PT10LnR5cGU/KGE9aSxpPXZvaWQgMCk6KGE9dm9pZCAwLGk9dm9pZCAwKX1yZXR1cm4gUW59KSl9fWZ1bmN0aW9uIFNlKG4pe2lmKGxlLmhhcyhuLnRvTG93ZXJDYXNlKCkpKXJldHVybiEwO2NvbnN0IGU9bi5jaGFyQXQoMCk7aWYoZT09PWUudG9VcHBlckNhc2UoKSl7aWYoMj09PW4ubGVuZ3RoJiZcIi5cIj09PW4uY2hhckF0KDEpKXJldHVybiEwO2NvbnN0IGU9bi5zbGljZSgxKTtpZihlPT09ZS50b0xvd2VyQ2FzZSgpKXJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIHVlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQmJm4uY2hhcmFjdGVyP24uY2hhcmFjdGVyL24ud29yZCo0LjcxK24ud29yZC9uLnNlbnRlbmNlKi41LTIxLjQzOk51bWJlci5OYU59ZnVuY3Rpb24gZGUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZCYmbi5sZXR0ZXI/bi5sZXR0ZXIvbi53b3JkKjEwMCouMDU4OC1uLnNlbnRlbmNlL24ud29yZCoxMDAqLjI5Ni0xNS44Ok51bWJlci5OYU59dmFyIG1lPVtcImFcIixcImFibGVcIixcImFib2FyZFwiLFwiYWJvdXRcIixcImFib3ZlXCIsXCJhYnNlbnRcIixcImFjY2VwdFwiLFwiYWNjaWRlbnRcIixcImFjY291bnRcIixcImFjaGVcIixcImFjaGluZ1wiLFwiYWNvcm5cIixcImFjcmVcIixcImFjcm9zc1wiLFwiYWN0XCIsXCJhY3RzXCIsXCJhZGRcIixcImFkZHJlc3NcIixcImFkbWlyZVwiLFwiYWR2ZW50dXJlXCIsXCJhZmFyXCIsXCJhZnJhaWRcIixcImFmdGVyXCIsXCJhZnRlcm5vb25cIixcImFmdGVyd2FyZFwiLFwiYWZ0ZXJ3YXJkc1wiLFwiYWdhaW5cIixcImFnYWluc3RcIixcImFnZVwiLFwiYWdlZFwiLFwiYWdvXCIsXCJhZ3JlZVwiLFwiYWhcIixcImFoZWFkXCIsXCJhaWRcIixcImFpbVwiLFwiYWlyXCIsXCJhaXJmaWVsZFwiLFwiYWlycGxhbmVcIixcImFpcnBvcnRcIixcImFpcnNoaXBcIixcImFpcnlcIixcImFsYXJtXCIsXCJhbGlrZVwiLFwiYWxpdmVcIixcImFsbFwiLFwiYWxsZXlcIixcImFsbGlnYXRvclwiLFwiYWxsb3dcIixcImFsbW9zdFwiLFwiYWxvbmVcIixcImFsb25nXCIsXCJhbG91ZFwiLFwiYWxyZWFkeVwiLFwiYWxzb1wiLFwiYWx3YXlzXCIsXCJhbVwiLFwiYW1lcmljYVwiLFwiYW1lcmljYW5cIixcImFtb25nXCIsXCJhbW91bnRcIixcImFuXCIsXCJhbmRcIixcImFuZ2VsXCIsXCJhbmdlclwiLFwiYW5ncnlcIixcImFuaW1hbFwiLFwiYW5vdGhlclwiLFwiYW5zd2VyXCIsXCJhbnRcIixcImFueVwiLFwiYW55Ym9keVwiLFwiYW55aG93XCIsXCJhbnlvbmVcIixcImFueXRoaW5nXCIsXCJhbnl3YXlcIixcImFueXdoZXJlXCIsXCJhcGFydFwiLFwiYXBhcnRtZW50XCIsXCJhcGVcIixcImFwaWVjZVwiLFwiYXBwZWFyXCIsXCJhcHBsZVwiLFwiYXByaWxcIixcImFwcm9uXCIsXCJhcmVcIixcImFyZW4ndFwiLFwiYXJpc2VcIixcImFyaXRobWV0aWNcIixcImFybVwiLFwiYXJtZnVsXCIsXCJhcm15XCIsXCJhcm9zZVwiLFwiYXJvdW5kXCIsXCJhcnJhbmdlXCIsXCJhcnJpdmVcIixcImFycml2ZWRcIixcImFycm93XCIsXCJhcnRcIixcImFydGlzdFwiLFwiYXNcIixcImFzaFwiLFwiYXNoZXNcIixcImFzaWRlXCIsXCJhc2tcIixcImFzbGVlcFwiLFwiYXRcIixcImF0ZVwiLFwiYXR0YWNrXCIsXCJhdHRlbmRcIixcImF0dGVudGlvblwiLFwiYXVndXN0XCIsXCJhdW50XCIsXCJhdXRob3JcIixcImF1dG9cIixcImF1dG9tb2JpbGVcIixcImF1dHVtblwiLFwiYXZlbnVlXCIsXCJhd2FrZVwiLFwiYXdha2VuXCIsXCJhd2F5XCIsXCJhd2Z1bFwiLFwiYXdmdWxseVwiLFwiYXdoaWxlXCIsXCJheFwiLFwiYXhlXCIsXCJiYWFcIixcImJhYmVcIixcImJhYmllc1wiLFwiYmFja1wiLFwiYmFja2dyb3VuZFwiLFwiYmFja3dhcmRcIixcImJhY2t3YXJkc1wiLFwiYmFjb25cIixcImJhZFwiLFwiYmFkZ2VcIixcImJhZGx5XCIsXCJiYWdcIixcImJha2VcIixcImJha2VyXCIsXCJiYWtlcnlcIixcImJha2luZ1wiLFwiYmFsbFwiLFwiYmFsbG9vblwiLFwiYmFuYW5hXCIsXCJiYW5kXCIsXCJiYW5kYWdlXCIsXCJiYW5nXCIsXCJiYW5qb1wiLFwiYmFua1wiLFwiYmFua2VyXCIsXCJiYXJcIixcImJhcmJlclwiLFwiYmFyZVwiLFwiYmFyZWZvb3RcIixcImJhcmVseVwiLFwiYmFya1wiLFwiYmFyblwiLFwiYmFycmVsXCIsXCJiYXNlXCIsXCJiYXNlYmFsbFwiLFwiYmFzZW1lbnRcIixcImJhc2tldFwiLFwiYmF0XCIsXCJiYXRjaFwiLFwiYmF0aFwiLFwiYmF0aGVcIixcImJhdGhpbmdcIixcImJhdGhyb29tXCIsXCJiYXRodHViXCIsXCJiYXR0bGVcIixcImJhdHRsZXNoaXBcIixcImJheVwiLFwiYmVcIixcImJlYWNoXCIsXCJiZWFkXCIsXCJiZWFtXCIsXCJiZWFuXCIsXCJiZWFyXCIsXCJiZWFyZFwiLFwiYmVhc3RcIixcImJlYXRcIixcImJlYXRpbmdcIixcImJlYXV0aWZ1bFwiLFwiYmVhdXRpZnlcIixcImJlYXV0eVwiLFwiYmVjYW1lXCIsXCJiZWNhdXNlXCIsXCJiZWNvbWVcIixcImJlY29taW5nXCIsXCJiZWRcIixcImJlZGJ1Z1wiLFwiYmVkcm9vbVwiLFwiYmVkc3ByZWFkXCIsXCJiZWR0aW1lXCIsXCJiZWVcIixcImJlZWNoXCIsXCJiZWVmXCIsXCJiZWVmc3RlYWtcIixcImJlZWhpdmVcIixcImJlZW5cIixcImJlZXJcIixcImJlZXRcIixcImJlZm9yZVwiLFwiYmVnXCIsXCJiZWdhblwiLFwiYmVnZ2FyXCIsXCJiZWdnZWRcIixcImJlZ2luXCIsXCJiZWdpbm5pbmdcIixcImJlZ3VuXCIsXCJiZWhhdmVcIixcImJlaGluZFwiLFwiYmVpbmdcIixcImJlbGlldmVcIixcImJlbGxcIixcImJlbG9uZ1wiLFwiYmVsb3dcIixcImJlbHRcIixcImJlbmNoXCIsXCJiZW5kXCIsXCJiZW5lYXRoXCIsXCJiZW50XCIsXCJiZXJyaWVzXCIsXCJiZXJyeVwiLFwiYmVzaWRlXCIsXCJiZXNpZGVzXCIsXCJiZXN0XCIsXCJiZXRcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmliXCIsXCJiaWJsZVwiLFwiYmljeWNsZVwiLFwiYmlkXCIsXCJiaWdcIixcImJpZ2dlclwiLFwiYmlsbFwiLFwiYmlsbGJvYXJkXCIsXCJiaW5cIixcImJpbmRcIixcImJpcmRcIixcImJpcnRoXCIsXCJiaXJ0aGRheVwiLFwiYmlzY3VpdFwiLFwiYml0XCIsXCJiaXRlXCIsXCJiaXRpbmdcIixcImJpdHRlclwiLFwiYmxhY2tcIixcImJsYWNrYmVycnlcIixcImJsYWNrYmlyZFwiLFwiYmxhY2tib2FyZFwiLFwiYmxhY2tuZXNzXCIsXCJibGFja3NtaXRoXCIsXCJibGFtZVwiLFwiYmxhbmtcIixcImJsYW5rZXRcIixcImJsYXN0XCIsXCJibGF6ZVwiLFwiYmxlZWRcIixcImJsZXNzXCIsXCJibGVzc2luZ1wiLFwiYmxld1wiLFwiYmxpbmRcIixcImJsaW5kZm9sZFwiLFwiYmxpbmRzXCIsXCJibG9ja1wiLFwiYmxvb2RcIixcImJsb29tXCIsXCJibG9zc29tXCIsXCJibG90XCIsXCJibG93XCIsXCJibHVlXCIsXCJibHVlYmVycnlcIixcImJsdWViaXJkXCIsXCJibHVzaFwiLFwiYm9hcmRcIixcImJvYXN0XCIsXCJib2F0XCIsXCJib2JcIixcImJvYndoaXRlXCIsXCJib2RpZXNcIixcImJvZHlcIixcImJvaWxcIixcImJvaWxlclwiLFwiYm9sZFwiLFwiYm9uZVwiLFwiYm9ubmV0XCIsXCJib29cIixcImJvb2tcIixcImJvb2tjYXNlXCIsXCJib29ra2VlcGVyXCIsXCJib29tXCIsXCJib290XCIsXCJib3JuXCIsXCJib3Jyb3dcIixcImJvc3NcIixcImJvdGhcIixcImJvdGhlclwiLFwiYm90dGxlXCIsXCJib3R0b21cIixcImJvdWdodFwiLFwiYm91bmNlXCIsXCJib3dcIixcImJvdy13b3dcIixcImJvd2xcIixcImJveFwiLFwiYm94Y2FyXCIsXCJib3hlclwiLFwiYm94ZXNcIixcImJveVwiLFwiYm95aG9vZFwiLFwiYnJhY2VsZXRcIixcImJyYWluXCIsXCJicmFrZVwiLFwiYnJhblwiLFwiYnJhbmNoXCIsXCJicmFzc1wiLFwiYnJhdmVcIixcImJyZWFkXCIsXCJicmVha1wiLFwiYnJlYWtmYXN0XCIsXCJicmVhc3RcIixcImJyZWF0aFwiLFwiYnJlYXRoZVwiLFwiYnJlZXplXCIsXCJicmlja1wiLFwiYnJpZGVcIixcImJyaWRnZVwiLFwiYnJpZ2h0XCIsXCJicmlnaHRuZXNzXCIsXCJicmluZ1wiLFwiYnJvYWRcIixcImJyb2FkY2FzdFwiLFwiYnJva2VcIixcImJyb2tlblwiLFwiYnJvb2tcIixcImJyb29tXCIsXCJicm90aGVyXCIsXCJicm91Z2h0XCIsXCJicm93blwiLFwiYnJ1c2hcIixcImJ1YmJsZVwiLFwiYnVja2V0XCIsXCJidWNrbGVcIixcImJ1ZFwiLFwiYnVmZmFsb1wiLFwiYnVnXCIsXCJidWdneVwiLFwiYnVpbGRcIixcImJ1aWxkaW5nXCIsXCJidWlsdFwiLFwiYnVsYlwiLFwiYnVsbFwiLFwiYnVsbGV0XCIsXCJidW1cIixcImJ1bWJsZWJlZVwiLFwiYnVtcFwiLFwiYnVuXCIsXCJidW5jaFwiLFwiYnVuZGxlXCIsXCJidW5ueVwiLFwiYnVyblwiLFwiYnVyc3RcIixcImJ1cnlcIixcImJ1c1wiLFwiYnVzaFwiLFwiYnVzaGVsXCIsXCJidXNpbmVzc1wiLFwiYnVzeVwiLFwiYnV0XCIsXCJidXRjaGVyXCIsXCJidXR0XCIsXCJidXR0ZXJcIixcImJ1dHRlcmN1cFwiLFwiYnV0dGVyZmx5XCIsXCJidXR0ZXJtaWxrXCIsXCJidXR0ZXJzY290Y2hcIixcImJ1dHRvblwiLFwiYnV0dG9uaG9sZVwiLFwiYnV5XCIsXCJidXp6XCIsXCJieVwiLFwiYnllXCIsXCJjYWJcIixcImNhYmJhZ2VcIixcImNhYmluXCIsXCJjYWJpbmV0XCIsXCJjYWNrbGVcIixcImNhZ2VcIixcImNha2VcIixcImNhbGVuZGFyXCIsXCJjYWxmXCIsXCJjYWxsXCIsXCJjYWxsZXJcIixcImNhbGxpbmdcIixcImNhbWVcIixcImNhbWVsXCIsXCJjYW1wXCIsXCJjYW1wZmlyZVwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2FuYWxcIixcImNhbmFyeVwiLFwiY2FuZGxlXCIsXCJjYW5kbGVzdGlja1wiLFwiY2FuZHlcIixcImNhbmVcIixcImNhbm5vblwiLFwiY2Fubm90XCIsXCJjYW5vZVwiLFwiY2FueW9uXCIsXCJjYXBcIixcImNhcGVcIixcImNhcGl0YWxcIixcImNhcHRhaW5cIixcImNhclwiLFwiY2FyZFwiLFwiY2FyZGJvYXJkXCIsXCJjYXJlXCIsXCJjYXJlZnVsXCIsXCJjYXJlbGVzc1wiLFwiY2FyZWxlc3NuZXNzXCIsXCJjYXJsb2FkXCIsXCJjYXJwZW50ZXJcIixcImNhcnBldFwiLFwiY2FycmlhZ2VcIixcImNhcnJvdFwiLFwiY2FycnlcIixcImNhcnRcIixcImNhcnZlXCIsXCJjYXNlXCIsXCJjYXNoXCIsXCJjYXNoaWVyXCIsXCJjYXN0bGVcIixcImNhdFwiLFwiY2F0YmlyZFwiLFwiY2F0Y2hcIixcImNhdGNoZXJcIixcImNhdGVycGlsbGFyXCIsXCJjYXRmaXNoXCIsXCJjYXRzdXBcIixcImNhdHRsZVwiLFwiY2F1Z2h0XCIsXCJjYXVzZVwiLFwiY2F2ZVwiLFwiY2VpbGluZ1wiLFwiY2VsbFwiLFwiY2VsbGFyXCIsXCJjZW50XCIsXCJjZW50ZXJcIixcImNlcmVhbFwiLFwiY2VydGFpblwiLFwiY2VydGFpbmx5XCIsXCJjaGFpblwiLFwiY2hhaXJcIixcImNoYWxrXCIsXCJjaGFtcGlvblwiLFwiY2hhbmNlXCIsXCJjaGFuZ2VcIixcImNoYXBcIixcImNoYXJnZVwiLFwiY2hhcm1cIixcImNoYXJ0XCIsXCJjaGFzZVwiLFwiY2hhdHRlclwiLFwiY2hlYXBcIixcImNoZWF0XCIsXCJjaGVja1wiLFwiY2hlY2tlcnNcIixcImNoZWVrXCIsXCJjaGVlclwiLFwiY2hlZXNlXCIsXCJjaGVycnlcIixcImNoZXN0XCIsXCJjaGV3XCIsXCJjaGlja1wiLFwiY2hpY2tlblwiLFwiY2hpZWZcIixcImNoaWxkXCIsXCJjaGlsZGhvb2RcIixcImNoaWxkcmVuXCIsXCJjaGlsbFwiLFwiY2hpbGx5XCIsXCJjaGltbmV5XCIsXCJjaGluXCIsXCJjaGluYVwiLFwiY2hpcFwiLFwiY2hpcG11bmtcIixcImNob2NvbGF0ZVwiLFwiY2hvaWNlXCIsXCJjaG9vc2VcIixcImNob3BcIixcImNob3J1c1wiLFwiY2hvc2VcIixcImNob3NlblwiLFwiY2hyaXN0ZW5cIixcImNocmlzdG1hc1wiLFwiY2h1cmNoXCIsXCJjaHVyblwiLFwiY2lnYXJldHRlXCIsXCJjaXJjbGVcIixcImNpcmN1c1wiLFwiY2l0aXplblwiLFwiY2l0eVwiLFwiY2xhbmdcIixcImNsYXBcIixcImNsYXNzXCIsXCJjbGFzc21hdGVcIixcImNsYXNzcm9vbVwiLFwiY2xhd1wiLFwiY2xheVwiLFwiY2xlYW5cIixcImNsZWFuZXJcIixcImNsZWFyXCIsXCJjbGVya1wiLFwiY2xldmVyXCIsXCJjbGlja1wiLFwiY2xpZmZcIixcImNsaW1iXCIsXCJjbGlwXCIsXCJjbG9ha1wiLFwiY2xvY2tcIixcImNsb3NlXCIsXCJjbG9zZXRcIixcImNsb3RoXCIsXCJjbG90aGVzXCIsXCJjbG90aGluZ1wiLFwiY2xvdWRcIixcImNsb3VkeVwiLFwiY2xvdmVyXCIsXCJjbG93blwiLFwiY2x1YlwiLFwiY2x1Y2tcIixcImNsdW1wXCIsXCJjb2FjaFwiLFwiY29hbFwiLFwiY29hc3RcIixcImNvYXRcIixcImNvYlwiLFwiY29iYmxlclwiLFwiY29jb2FcIixcImNvY29udXRcIixcImNvY29vblwiLFwiY29kXCIsXCJjb2RmaXNoXCIsXCJjb2ZmZWVcIixcImNvZmZlZXBvdFwiLFwiY29pblwiLFwiY29sZFwiLFwiY29sbGFyXCIsXCJjb2xsZWdlXCIsXCJjb2xvclwiLFwiY29sb3JlZFwiLFwiY29sdFwiLFwiY29sdW1uXCIsXCJjb21iXCIsXCJjb21lXCIsXCJjb21mb3J0XCIsXCJjb21pY1wiLFwiY29taW5nXCIsXCJjb21wYW55XCIsXCJjb21wYXJlXCIsXCJjb25kdWN0b3JcIixcImNvbmVcIixcImNvbm5lY3RcIixcImNvb1wiLFwiY29va1wiLFwiY29va2VkXCIsXCJjb29raWVcIixcImNvb2tpZXNcIixcImNvb2tpbmdcIixcImNvb2xcIixcImNvb2xlclwiLFwiY29vcFwiLFwiY29wcGVyXCIsXCJjb3B5XCIsXCJjb3JkXCIsXCJjb3JrXCIsXCJjb3JuXCIsXCJjb3JuZXJcIixcImNvcnJlY3RcIixcImNvc3RcIixcImNvdFwiLFwiY290dGFnZVwiLFwiY290dG9uXCIsXCJjb3VjaFwiLFwiY291Z2hcIixcImNvdWxkXCIsXCJjb3VsZG4ndFwiLFwiY291bnRcIixcImNvdW50ZXJcIixcImNvdW50cnlcIixcImNvdW50eVwiLFwiY291cnNlXCIsXCJjb3VydFwiLFwiY291c2luXCIsXCJjb3ZlclwiLFwiY293XCIsXCJjb3dhcmRcIixcImNvd2FyZGx5XCIsXCJjb3dib3lcIixcImNvenlcIixcImNyYWJcIixcImNyYWNrXCIsXCJjcmFja2VyXCIsXCJjcmFkbGVcIixcImNyYW1wc1wiLFwiY3JhbmJlcnJ5XCIsXCJjcmFua1wiLFwiY3Jhbmt5XCIsXCJjcmFzaFwiLFwiY3Jhd2xcIixcImNyYXp5XCIsXCJjcmVhbVwiLFwiY3JlYW15XCIsXCJjcmVla1wiLFwiY3JlZXBcIixcImNyZXB0XCIsXCJjcmllZFwiLFwiY3JpZXNcIixcImNyb2FrXCIsXCJjcm9va1wiLFwiY3Jvb2tlZFwiLFwiY3JvcFwiLFwiY3Jvc3NcIixcImNyb3NzLWV5ZWRcIixcImNyb3NzaW5nXCIsXCJjcm93XCIsXCJjcm93ZFwiLFwiY3Jvd2RlZFwiLFwiY3Jvd25cIixcImNydWVsXCIsXCJjcnVtYlwiLFwiY3J1bWJsZVwiLFwiY3J1c2hcIixcImNydXN0XCIsXCJjcnlcIixcImN1YlwiLFwiY3VmZlwiLFwiY3VwXCIsXCJjdXBib2FyZFwiLFwiY3VwZnVsXCIsXCJjdXJlXCIsXCJjdXJsXCIsXCJjdXJseVwiLFwiY3VydGFpblwiLFwiY3VydmVcIixcImN1c2hpb25cIixcImN1c3RhcmRcIixcImN1c3RvbWVyXCIsXCJjdXRcIixcImN1dGVcIixcImN1dHRpbmdcIixcImRhYlwiLFwiZGFkXCIsXCJkYWRkeVwiLFwiZGFpbHlcIixcImRhaXJ5XCIsXCJkYWlzeVwiLFwiZGFtXCIsXCJkYW1hZ2VcIixcImRhbWVcIixcImRhbXBcIixcImRhbmNlXCIsXCJkYW5jZXJcIixcImRhbmNpbmdcIixcImRhbmR5XCIsXCJkYW5nZXJcIixcImRhbmdlcm91c1wiLFwiZGFyZVwiLFwiZGFya1wiLFwiZGFya25lc3NcIixcImRhcmxpbmdcIixcImRhcm5cIixcImRhcnRcIixcImRhc2hcIixcImRhdGVcIixcImRhdWdodGVyXCIsXCJkYXduXCIsXCJkYXlcIixcImRheWJyZWFrXCIsXCJkYXl0aW1lXCIsXCJkZWFkXCIsXCJkZWFmXCIsXCJkZWFsXCIsXCJkZWFyXCIsXCJkZWF0aFwiLFwiZGVjZW1iZXJcIixcImRlY2lkZVwiLFwiZGVja1wiLFwiZGVlZFwiLFwiZGVlcFwiLFwiZGVlclwiLFwiZGVmZWF0XCIsXCJkZWZlbmRcIixcImRlZmVuc2VcIixcImRlbGlnaHRcIixcImRlblwiLFwiZGVudGlzdFwiLFwiZGVwZW5kXCIsXCJkZXBvc2l0XCIsXCJkZXNjcmliZVwiLFwiZGVzZXJ0XCIsXCJkZXNlcnZlXCIsXCJkZXNpcmVcIixcImRlc2tcIixcImRlc3Ryb3lcIixcImRldmlsXCIsXCJkZXdcIixcImRpYW1vbmRcIixcImRpZFwiLFwiZGlkbid0XCIsXCJkaWVcIixcImRpZWRcIixcImRpZXNcIixcImRpZmZlcmVuY2VcIixcImRpZmZlcmVudFwiLFwiZGlnXCIsXCJkaW1cIixcImRpbWVcIixcImRpbmVcIixcImRpbmctZG9uZ1wiLFwiZGlubmVyXCIsXCJkaXBcIixcImRpcmVjdFwiLFwiZGlyZWN0aW9uXCIsXCJkaXJ0XCIsXCJkaXJ0eVwiLFwiZGlzY292ZXJcIixcImRpc2hcIixcImRpc2xpa2VcIixcImRpc21pc3NcIixcImRpdGNoXCIsXCJkaXZlXCIsXCJkaXZlclwiLFwiZGl2aWRlXCIsXCJkb1wiLFwiZG9ja1wiLFwiZG9jdG9yXCIsXCJkb2VzXCIsXCJkb2Vzbid0XCIsXCJkb2dcIixcImRvbGxcIixcImRvbGxhclwiLFwiZG9sbHlcIixcImRvbid0XCIsXCJkb25lXCIsXCJkb25rZXlcIixcImRvb3JcIixcImRvb3JiZWxsXCIsXCJkb29ya25vYlwiLFwiZG9vcnN0ZXBcIixcImRvcGVcIixcImRvdFwiLFwiZG91YmxlXCIsXCJkb3VnaFwiLFwiZG92ZVwiLFwiZG93blwiLFwiZG93bnN0YWlyc1wiLFwiZG93bnRvd25cIixcImRvemVuXCIsXCJkcmFnXCIsXCJkcmFpblwiLFwiZHJhbmtcIixcImRyYXdcIixcImRyYXdlclwiLFwiZHJhd2luZ1wiLFwiZHJlYW1cIixcImRyZXNzXCIsXCJkcmVzc2VyXCIsXCJkcmVzc21ha2VyXCIsXCJkcmV3XCIsXCJkcmllZFwiLFwiZHJpZnRcIixcImRyaWxsXCIsXCJkcmlua1wiLFwiZHJpcFwiLFwiZHJpdmVcIixcImRyaXZlblwiLFwiZHJpdmVyXCIsXCJkcm9wXCIsXCJkcm92ZVwiLFwiZHJvd25cIixcImRyb3dzeVwiLFwiZHJ1YlwiLFwiZHJ1bVwiLFwiZHJ1bmtcIixcImRyeVwiLFwiZHVja1wiLFwiZHVlXCIsXCJkdWdcIixcImR1bGxcIixcImR1bWJcIixcImR1bXBcIixcImR1cmluZ1wiLFwiZHVzdFwiLFwiZHVzdHlcIixcImR1dHlcIixcImR3YXJmXCIsXCJkd2VsbFwiLFwiZHdlbHRcIixcImR5aW5nXCIsXCJlYWNoXCIsXCJlYWdlclwiLFwiZWFnbGVcIixcImVhclwiLFwiZWFybHlcIixcImVhcm5cIixcImVhcnRoXCIsXCJlYXN0XCIsXCJlYXN0ZXJuXCIsXCJlYXN5XCIsXCJlYXRcIixcImVhdGVuXCIsXCJlZGdlXCIsXCJlZ2dcIixcImVoXCIsXCJlaWdodFwiLFwiZWlnaHRlZW5cIixcImVpZ2h0aFwiLFwiZWlnaHR5XCIsXCJlaXRoZXJcIixcImVsYm93XCIsXCJlbGRlclwiLFwiZWxkZXN0XCIsXCJlbGVjdHJpY1wiLFwiZWxlY3RyaWNpdHlcIixcImVsZXBoYW50XCIsXCJlbGV2ZW5cIixcImVsZlwiLFwiZWxtXCIsXCJlbHNlXCIsXCJlbHNld2hlcmVcIixcImVtcHR5XCIsXCJlbmRcIixcImVuZGluZ1wiLFwiZW5lbXlcIixcImVuZ2luZVwiLFwiZW5naW5lZXJcIixcImVuZ2xpc2hcIixcImVuam95XCIsXCJlbm91Z2hcIixcImVudGVyXCIsXCJlbnZlbG9wZVwiLFwiZXF1YWxcIixcImVyYXNlXCIsXCJlcmFzZXJcIixcImVycmFuZFwiLFwiZXNjYXBlXCIsXCJldmVcIixcImV2ZW5cIixcImV2ZW5pbmdcIixcImV2ZXJcIixcImV2ZXJ5XCIsXCJldmVyeWJvZHlcIixcImV2ZXJ5ZGF5XCIsXCJldmVyeW9uZVwiLFwiZXZlcnl0aGluZ1wiLFwiZXZlcnl3aGVyZVwiLFwiZXZpbFwiLFwiZXhhY3RcIixcImV4Y2VwdFwiLFwiZXhjaGFuZ2VcIixcImV4Y2l0ZWRcIixcImV4Y2l0aW5nXCIsXCJleGN1c2VcIixcImV4aXRcIixcImV4cGVjdFwiLFwiZXhwbGFpblwiLFwiZXh0cmFcIixcImV5ZVwiLFwiZXllYnJvd1wiLFwiZmFibGVcIixcImZhY2VcIixcImZhY2luZ1wiLFwiZmFjdFwiLFwiZmFjdG9yeVwiLFwiZmFpbFwiLFwiZmFpbnRcIixcImZhaXJcIixcImZhaXJ5XCIsXCJmYWl0aFwiLFwiZmFrZVwiLFwiZmFsbFwiLFwiZmFsc2VcIixcImZhbWlseVwiLFwiZmFuXCIsXCJmYW5jeVwiLFwiZmFyXCIsXCJmYXItb2ZmXCIsXCJmYXJhd2F5XCIsXCJmYXJlXCIsXCJmYXJtXCIsXCJmYXJtZXJcIixcImZhcm1pbmdcIixcImZhcnRoZXJcIixcImZhc2hpb25cIixcImZhc3RcIixcImZhc3RlblwiLFwiZmF0XCIsXCJmYXRoZXJcIixcImZhdWx0XCIsXCJmYXZvclwiLFwiZmF2b3JpdGVcIixcImZlYXJcIixcImZlYXN0XCIsXCJmZWF0aGVyXCIsXCJmZWJydWFyeVwiLFwiZmVkXCIsXCJmZWVkXCIsXCJmZWVsXCIsXCJmZWV0XCIsXCJmZWxsXCIsXCJmZWxsb3dcIixcImZlbHRcIixcImZlbmNlXCIsXCJmZXZlclwiLFwiZmV3XCIsXCJmaWJcIixcImZpZGRsZVwiLFwiZmllbGRcIixcImZpZmVcIixcImZpZnRlZW5cIixcImZpZnRoXCIsXCJmaWZ0eVwiLFwiZmlnXCIsXCJmaWdodFwiLFwiZmlndXJlXCIsXCJmaWxlXCIsXCJmaWxsXCIsXCJmaWxtXCIsXCJmaW5hbGx5XCIsXCJmaW5kXCIsXCJmaW5lXCIsXCJmaW5nZXJcIixcImZpbmlzaFwiLFwiZmlyZVwiLFwiZmlyZWFybVwiLFwiZmlyZWNyYWNrZXJcIixcImZpcmVwbGFjZVwiLFwiZmlyZXdvcmtzXCIsXCJmaXJpbmdcIixcImZpcnN0XCIsXCJmaXNoXCIsXCJmaXNoZXJtYW5cIixcImZpc3RcIixcImZpdFwiLFwiZml0c1wiLFwiZml2ZVwiLFwiZml4XCIsXCJmbGFnXCIsXCJmbGFrZVwiLFwiZmxhbWVcIixcImZsYXBcIixcImZsYXNoXCIsXCJmbGFzaGxpZ2h0XCIsXCJmbGF0XCIsXCJmbGVhXCIsXCJmbGVzaFwiLFwiZmxld1wiLFwiZmxpZXNcIixcImZsaWdodFwiLFwiZmxpcFwiLFwiZmxpcC1mbG9wXCIsXCJmbG9hdFwiLFwiZmxvY2tcIixcImZsb29kXCIsXCJmbG9vclwiLFwiZmxvcFwiLFwiZmxvdXJcIixcImZsb3dcIixcImZsb3dlclwiLFwiZmxvd2VyeVwiLFwiZmx1dHRlclwiLFwiZmx5XCIsXCJmb2FtXCIsXCJmb2dcIixcImZvZ2d5XCIsXCJmb2xkXCIsXCJmb2xrc1wiLFwiZm9sbG93XCIsXCJmb2xsb3dpbmdcIixcImZvbmRcIixcImZvb2RcIixcImZvb2xcIixcImZvb2xpc2hcIixcImZvb3RcIixcImZvb3RiYWxsXCIsXCJmb290cHJpbnRcIixcImZvclwiLFwiZm9yZWhlYWRcIixcImZvcmVzdFwiLFwiZm9yZ2V0XCIsXCJmb3JnaXZlXCIsXCJmb3Jnb3RcIixcImZvcmdvdHRlblwiLFwiZm9ya1wiLFwiZm9ybVwiLFwiZm9ydFwiLFwiZm9ydGhcIixcImZvcnR1bmVcIixcImZvcnR5XCIsXCJmb3J3YXJkXCIsXCJmb3VnaHRcIixcImZvdW5kXCIsXCJmb3VudGFpblwiLFwiZm91clwiLFwiZm91cnRlZW5cIixcImZvdXJ0aFwiLFwiZm94XCIsXCJmcmFtZVwiLFwiZnJlZVwiLFwiZnJlZWRvbVwiLFwiZnJlZXplXCIsXCJmcmVpZ2h0XCIsXCJmcmVuY2hcIixcImZyZXNoXCIsXCJmcmV0XCIsXCJmcmlkYXlcIixcImZyaWVkXCIsXCJmcmllbmRcIixcImZyaWVuZGx5XCIsXCJmcmllbmRzaGlwXCIsXCJmcmlnaHRlblwiLFwiZnJvZ1wiLFwiZnJvbVwiLFwiZnJvbnRcIixcImZyb3N0XCIsXCJmcm93blwiLFwiZnJvemVcIixcImZydWl0XCIsXCJmcnlcIixcImZ1ZGdlXCIsXCJmdWVsXCIsXCJmdWxsXCIsXCJmdWxseVwiLFwiZnVuXCIsXCJmdW5ueVwiLFwiZnVyXCIsXCJmdXJuaXR1cmVcIixcImZ1cnRoZXJcIixcImZ1enp5XCIsXCJnYWluXCIsXCJnYWxsb25cIixcImdhbGxvcFwiLFwiZ2FtZVwiLFwiZ2FuZ1wiLFwiZ2FyYWdlXCIsXCJnYXJiYWdlXCIsXCJnYXJkZW5cIixcImdhc1wiLFwiZ2Fzb2xpbmVcIixcImdhdGVcIixcImdhdGhlclwiLFwiZ2F2ZVwiLFwiZ2F5XCIsXCJnZWFyXCIsXCJnZWVzZVwiLFwiZ2VuZXJhbFwiLFwiZ2VudGxlXCIsXCJnZW50bGVtYW5cIixcImdlbnRsZW1lblwiLFwiZ2VvZ3JhcGh5XCIsXCJnZXRcIixcImdldHRpbmdcIixcImdpYW50XCIsXCJnaWZ0XCIsXCJnaW5nZXJicmVhZFwiLFwiZ2lybFwiLFwiZ2l2ZVwiLFwiZ2l2ZW5cIixcImdpdmluZ1wiLFwiZ2xhZFwiLFwiZ2xhZGx5XCIsXCJnbGFuY2VcIixcImdsYXNzXCIsXCJnbGFzc2VzXCIsXCJnbGVhbVwiLFwiZ2xpZGVcIixcImdsb3J5XCIsXCJnbG92ZVwiLFwiZ2xvd1wiLFwiZ2x1ZVwiLFwiZ29cIixcImdvYWxcIixcImdvYXRcIixcImdvYmJsZVwiLFwiZ29kXCIsXCJnb2Rtb3RoZXJcIixcImdvZXNcIixcImdvaW5nXCIsXCJnb2xkXCIsXCJnb2xkZW5cIixcImdvbGRmaXNoXCIsXCJnb2xmXCIsXCJnb25lXCIsXCJnb29kXCIsXCJnb29kLWJ5XCIsXCJnb29kLWJ5ZVwiLFwiZ29vZC1sb29raW5nXCIsXCJnb29kYnllXCIsXCJnb29kbmVzc1wiLFwiZ29vZHNcIixcImdvb2R5XCIsXCJnb29zZVwiLFwiZ29vc2ViZXJyeVwiLFwiZ290XCIsXCJnb3Zlcm5cIixcImdvdmVybm1lbnRcIixcImdvd25cIixcImdyYWJcIixcImdyYWNpb3VzXCIsXCJncmFkZVwiLFwiZ3JhaW5cIixcImdyYW5kXCIsXCJncmFuZGNoaWxkXCIsXCJncmFuZGNoaWxkcmVuXCIsXCJncmFuZGRhdWdodGVyXCIsXCJncmFuZGZhdGhlclwiLFwiZ3JhbmRtYVwiLFwiZ3JhbmRtb3RoZXJcIixcImdyYW5kcGFcIixcImdyYW5kc29uXCIsXCJncmFuZHN0YW5kXCIsXCJncmFwZVwiLFwiZ3JhcGVmcnVpdFwiLFwiZ3JhcGVzXCIsXCJncmFzc1wiLFwiZ3Jhc3Nob3BwZXJcIixcImdyYXRlZnVsXCIsXCJncmF2ZVwiLFwiZ3JhdmVsXCIsXCJncmF2ZXlhcmRcIixcImdyYXZ5XCIsXCJncmF5XCIsXCJncmF6ZVwiLFwiZ3JlYXNlXCIsXCJncmVhdFwiLFwiZ3JlZW5cIixcImdyZWV0XCIsXCJncmV3XCIsXCJncmluZFwiLFwiZ3JvYW5cIixcImdyb2NlcnlcIixcImdyb3VuZFwiLFwiZ3JvdXBcIixcImdyb3ZlXCIsXCJncm93XCIsXCJndWFyZFwiLFwiZ3Vlc3NcIixcImd1ZXN0XCIsXCJndWlkZVwiLFwiZ3VsZlwiLFwiZ3VtXCIsXCJndW5cIixcImd1bnBvd2RlclwiLFwiZ3V5XCIsXCJoYVwiLFwiaGFiaXRcIixcImhhZFwiLFwiaGFkbid0XCIsXCJoYWlsXCIsXCJoYWlyXCIsXCJoYWlyY3V0XCIsXCJoYWlycGluXCIsXCJoYWxmXCIsXCJoYWxsXCIsXCJoYWx0XCIsXCJoYW1cIixcImhhbW1lclwiLFwiaGFuZFwiLFwiaGFuZGZ1bFwiLFwiaGFuZGtlcmNoaWVmXCIsXCJoYW5kbGVcIixcImhhbmR3cml0aW5nXCIsXCJoYW5nXCIsXCJoYXBwZW5cIixcImhhcHBpbHlcIixcImhhcHBpbmVzc1wiLFwiaGFwcHlcIixcImhhcmJvclwiLFwiaGFyZFwiLFwiaGFyZGx5XCIsXCJoYXJkc2hpcFwiLFwiaGFyZHdhcmVcIixcImhhcmVcIixcImhhcmtcIixcImhhcm1cIixcImhhcm5lc3NcIixcImhhcnBcIixcImhhcnZlc3RcIixcImhhc1wiLFwiaGFzbid0XCIsXCJoYXN0ZVwiLFwiaGFzdGVuXCIsXCJoYXN0eVwiLFwiaGF0XCIsXCJoYXRjaFwiLFwiaGF0Y2hldFwiLFwiaGF0ZVwiLFwiaGF1bFwiLFwiaGF2ZVwiLFwiaGF2ZW4ndFwiLFwiaGF2aW5nXCIsXCJoYXdrXCIsXCJoYXlcIixcImhheWZpZWxkXCIsXCJoYXlzdGFja1wiLFwiaGVcIixcImhlJ2RcIixcImhlJ2xsXCIsXCJoZSdzXCIsXCJoZWFkXCIsXCJoZWFkYWNoZVwiLFwiaGVhbFwiLFwiaGVhbHRoXCIsXCJoZWFsdGh5XCIsXCJoZWFwXCIsXCJoZWFyXCIsXCJoZWFyZFwiLFwiaGVhcmluZ1wiLFwiaGVhcnRcIixcImhlYXRcIixcImhlYXRlclwiLFwiaGVhdmVuXCIsXCJoZWF2eVwiLFwiaGVlbFwiLFwiaGVpZ2h0XCIsXCJoZWxkXCIsXCJoZWxsXCIsXCJoZWxsb1wiLFwiaGVsbWV0XCIsXCJoZWxwXCIsXCJoZWxwZXJcIixcImhlbHBmdWxcIixcImhlbVwiLFwiaGVuXCIsXCJoZW5ob3VzZVwiLFwiaGVyXCIsXCJoZXJkXCIsXCJoZXJlXCIsXCJoZXJlJ3NcIixcImhlcm9cIixcImhlcnNcIixcImhlcnNlbGZcIixcImhleVwiLFwiaGlja29yeVwiLFwiaGlkXCIsXCJoaWRkZW5cIixcImhpZGVcIixcImhpZ2hcIixcImhpZ2h3YXlcIixcImhpbGxcIixcImhpbGxzaWRlXCIsXCJoaWxsdG9wXCIsXCJoaWxseVwiLFwiaGltXCIsXCJoaW1zZWxmXCIsXCJoaW5kXCIsXCJoaW50XCIsXCJoaXBcIixcImhpcmVcIixcImhpc1wiLFwiaGlzc1wiLFwiaGlzdG9yeVwiLFwiaGl0XCIsXCJoaXRjaFwiLFwiaGl2ZVwiLFwiaG9cIixcImhvZVwiLFwiaG9nXCIsXCJob2xkXCIsXCJob2xkZXJcIixcImhvbGVcIixcImhvbGlkYXlcIixcImhvbGxvd1wiLFwiaG9seVwiLFwiaG9tZVwiLFwiaG9tZWx5XCIsXCJob21lc2lja1wiLFwiaG9uZXN0XCIsXCJob25leVwiLFwiaG9uZXliZWVcIixcImhvbmV5bW9vblwiLFwiaG9ua1wiLFwiaG9ub3JcIixcImhvb2RcIixcImhvb2ZcIixcImhvb2tcIixcImhvb3BcIixcImhvcFwiLFwiaG9wZVwiLFwiaG9wZWZ1bFwiLFwiaG9wZWxlc3NcIixcImhvcm5cIixcImhvcnNlXCIsXCJob3JzZWJhY2tcIixcImhvcnNlc2hvZVwiLFwiaG9zZVwiLFwiaG9zcGl0YWxcIixcImhvc3RcIixcImhvdFwiLFwiaG90ZWxcIixcImhvdW5kXCIsXCJob3VyXCIsXCJob3VzZVwiLFwiaG91c2V0b3BcIixcImhvdXNld2lmZVwiLFwiaG91c2V3b3JrXCIsXCJob3dcIixcImhvd2V2ZXJcIixcImhvd2xcIixcImh1Z1wiLFwiaHVnZVwiLFwiaHVtXCIsXCJodW1ibGVcIixcImh1bXBcIixcImh1bmRyZWRcIixcImh1bmdcIixcImh1bmdlclwiLFwiaHVuZ3J5XCIsXCJodW5rXCIsXCJodW50XCIsXCJodW50ZXJcIixcImh1cnJhaFwiLFwiaHVycmllZFwiLFwiaHVycnlcIixcImh1cnRcIixcImh1c2JhbmRcIixcImh1c2hcIixcImh1dFwiLFwiaHltblwiLFwiaVwiLFwiaSdkXCIsXCJpJ2xsXCIsXCJpJ21cIixcImkndmVcIixcImljZVwiLFwiaWN5XCIsXCJpZGVhXCIsXCJpZGVhbFwiLFwiaWZcIixcImlsbFwiLFwiaW1wb3J0YW50XCIsXCJpbXBvc3NpYmxlXCIsXCJpbXByb3ZlXCIsXCJpblwiLFwiaW5jaFwiLFwiaW5jaGVzXCIsXCJpbmNvbWVcIixcImluZGVlZFwiLFwiaW5kaWFuXCIsXCJpbmRvb3JzXCIsXCJpbmtcIixcImlublwiLFwiaW5zZWN0XCIsXCJpbnNpZGVcIixcImluc3RhbnRcIixcImluc3RlYWRcIixcImluc3VsdFwiLFwiaW50ZW5kXCIsXCJpbnRlcmVzdGVkXCIsXCJpbnRlcmVzdGluZ1wiLFwiaW50b1wiLFwiaW52aXRlXCIsXCJpcm9uXCIsXCJpc1wiLFwiaXNsYW5kXCIsXCJpc24ndFwiLFwiaXRcIixcIml0J3NcIixcIml0c1wiLFwiaXRzZWxmXCIsXCJpdm9yeVwiLFwiaXZ5XCIsXCJqYWNrZXRcIixcImphY2tzXCIsXCJqYWlsXCIsXCJqYW1cIixcImphbnVhcnlcIixcImphclwiLFwiamF3XCIsXCJqYXlcIixcImplbGx5XCIsXCJqZWxseWZpc2hcIixcImplcmtcIixcImppZ1wiLFwiam9iXCIsXCJqb2NrZXlcIixcImpvaW5cIixcImpva2VcIixcImpva2luZ1wiLFwiam9sbHlcIixcImpvdXJuZXlcIixcImpveVwiLFwiam95ZnVsXCIsXCJqb3lvdXNcIixcImp1ZGdlXCIsXCJqdWdcIixcImp1aWNlXCIsXCJqdWljeVwiLFwianVseVwiLFwianVtcFwiLFwianVuZVwiLFwianVuaW9yXCIsXCJqdW5rXCIsXCJqdXN0XCIsXCJrZWVuXCIsXCJrZWVwXCIsXCJrZXB0XCIsXCJrZXR0bGVcIixcImtleVwiLFwia2lja1wiLFwia2lkXCIsXCJraWxsXCIsXCJraWxsZWRcIixcImtpbmRcIixcImtpbmRseVwiLFwia2luZG5lc3NcIixcImtpbmdcIixcImtpbmdkb21cIixcImtpc3NcIixcImtpdGNoZW5cIixcImtpdGVcIixcImtpdHRlblwiLFwia2l0dHlcIixcImtuZWVcIixcImtuZWVsXCIsXCJrbmV3XCIsXCJrbmlmZVwiLFwia25pdFwiLFwia25pdmVzXCIsXCJrbm9iXCIsXCJrbm9ja1wiLFwia25vdFwiLFwia25vd1wiLFwia25vd25cIixcImxhY2VcIixcImxhZFwiLFwibGFkZGVyXCIsXCJsYWRpZXNcIixcImxhZHlcIixcImxhaWRcIixcImxha2VcIixcImxhbWJcIixcImxhbWVcIixcImxhbXBcIixcImxhbmRcIixcImxhbmVcIixcImxhbmd1YWdlXCIsXCJsYW50ZXJuXCIsXCJsYXBcIixcImxhcmRcIixcImxhcmdlXCIsXCJsYXNoXCIsXCJsYXNzXCIsXCJsYXN0XCIsXCJsYXRlXCIsXCJsYXVnaFwiLFwibGF1bmRyeVwiLFwibGF3XCIsXCJsYXduXCIsXCJsYXd5ZXJcIixcImxheVwiLFwibGF6eVwiLFwibGVhZFwiLFwibGVhZGVyXCIsXCJsZWFmXCIsXCJsZWFrXCIsXCJsZWFuXCIsXCJsZWFwXCIsXCJsZWFyblwiLFwibGVhcm5lZFwiLFwibGVhc3RcIixcImxlYXRoZXJcIixcImxlYXZlXCIsXCJsZWF2aW5nXCIsXCJsZWRcIixcImxlZnRcIixcImxlZ1wiLFwibGVtb25cIixcImxlbW9uYWRlXCIsXCJsZW5kXCIsXCJsZW5ndGhcIixcImxlc3NcIixcImxlc3NvblwiLFwibGV0XCIsXCJsZXQnc1wiLFwibGV0dGVyXCIsXCJsZXR0aW5nXCIsXCJsZXR0dWNlXCIsXCJsZXZlbFwiLFwibGliZXJ0eVwiLFwibGlicmFyeVwiLFwibGljZVwiLFwibGlja1wiLFwibGlkXCIsXCJsaWVcIixcImxpZmVcIixcImxpZnRcIixcImxpZ2h0XCIsXCJsaWdodG5lc3NcIixcImxpZ2h0bmluZ1wiLFwibGlrZVwiLFwibGlrZWx5XCIsXCJsaWtpbmdcIixcImxpbHlcIixcImxpbWJcIixcImxpbWVcIixcImxpbXBcIixcImxpbmVcIixcImxpbmVuXCIsXCJsaW9uXCIsXCJsaXBcIixcImxpc3RcIixcImxpc3RlblwiLFwibGl0XCIsXCJsaXR0bGVcIixcImxpdmVcIixcImxpdmVseVwiLFwibGl2ZXJcIixcImxpdmVzXCIsXCJsaXZpbmdcIixcImxpemFyZFwiLFwibG9hZFwiLFwibG9hZlwiLFwibG9hblwiLFwibG9hdmVzXCIsXCJsb2NrXCIsXCJsb2NvbW90aXZlXCIsXCJsb2dcIixcImxvbmVcIixcImxvbmVseVwiLFwibG9uZXNvbWVcIixcImxvbmdcIixcImxvb2tcIixcImxvb2tvdXRcIixcImxvb3BcIixcImxvb3NlXCIsXCJsb3JkXCIsXCJsb3NlXCIsXCJsb3NlclwiLFwibG9zc1wiLFwibG9zdFwiLFwibG90XCIsXCJsb3VkXCIsXCJsb3ZlXCIsXCJsb3ZlbHlcIixcImxvdmVyXCIsXCJsb3dcIixcImx1Y2tcIixcImx1Y2t5XCIsXCJsdW1iZXJcIixcImx1bXBcIixcImx1bmNoXCIsXCJseWluZ1wiLFwibWFcIixcIm1hY2hpbmVcIixcIm1hY2hpbmVyeVwiLFwibWFkXCIsXCJtYWRlXCIsXCJtYWdhemluZVwiLFwibWFnaWNcIixcIm1haWRcIixcIm1haWxcIixcIm1haWxib3hcIixcIm1haWxtYW5cIixcIm1ham9yXCIsXCJtYWtlXCIsXCJtYWtpbmdcIixcIm1hbGVcIixcIm1hbWFcIixcIm1hbW1hXCIsXCJtYW5cIixcIm1hbmFnZXJcIixcIm1hbmVcIixcIm1hbmdlclwiLFwibWFueVwiLFwibWFwXCIsXCJtYXBsZVwiLFwibWFyYmxlXCIsXCJtYXJjaFwiLFwibWFyZVwiLFwibWFya1wiLFwibWFya2V0XCIsXCJtYXJyaWFnZVwiLFwibWFycmllZFwiLFwibWFycnlcIixcIm1hc2tcIixcIm1hc3RcIixcIm1hc3RlclwiLFwibWF0XCIsXCJtYXRjaFwiLFwibWF0dGVyXCIsXCJtYXR0cmVzc1wiLFwibWF5XCIsXCJtYXliZVwiLFwibWF5b3JcIixcIm1heXBvbGVcIixcIm1lXCIsXCJtZWFkb3dcIixcIm1lYWxcIixcIm1lYW5cIixcIm1lYW5zXCIsXCJtZWFudFwiLFwibWVhc3VyZVwiLFwibWVhdFwiLFwibWVkaWNpbmVcIixcIm1lZXRcIixcIm1lZXRpbmdcIixcIm1lbHRcIixcIm1lbWJlclwiLFwibWVuXCIsXCJtZW5kXCIsXCJtZW93XCIsXCJtZXJyeVwiLFwibWVzc1wiLFwibWVzc2FnZVwiLFwibWV0XCIsXCJtZXRhbFwiLFwibWV3XCIsXCJtaWNlXCIsXCJtaWRkbGVcIixcIm1pZG5pZ2h0XCIsXCJtaWdodFwiLFwibWlnaHR5XCIsXCJtaWxlXCIsXCJtaWxlclwiLFwibWlsa1wiLFwibWlsa21hblwiLFwibWlsbFwiLFwibWlsbGlvblwiLFwibWluZFwiLFwibWluZVwiLFwibWluZXJcIixcIm1pbnRcIixcIm1pbnV0ZVwiLFwibWlycm9yXCIsXCJtaXNjaGllZlwiLFwibWlzc1wiLFwibWlzc3BlbGxcIixcIm1pc3Rha2VcIixcIm1pc3R5XCIsXCJtaXR0XCIsXCJtaXR0ZW5cIixcIm1peFwiLFwibW9tZW50XCIsXCJtb25kYXlcIixcIm1vbmV5XCIsXCJtb25rZXlcIixcIm1vbnRoXCIsXCJtb29cIixcIm1vb25cIixcIm1vb25saWdodFwiLFwibW9vc2VcIixcIm1vcFwiLFwibW9yZVwiLFwibW9ybmluZ1wiLFwibW9ycm93XCIsXCJtb3NzXCIsXCJtb3N0XCIsXCJtb3N0bHlcIixcIm1vdGhlclwiLFwibW90b3JcIixcIm1vdW50XCIsXCJtb3VudGFpblwiLFwibW91c2VcIixcIm1vdXRoXCIsXCJtb3ZlXCIsXCJtb3ZpZVwiLFwibW92aWVzXCIsXCJtb3ZpbmdcIixcIm1vd1wiLFwibXIuXCIsXCJtcnMuXCIsXCJtdWNoXCIsXCJtdWRcIixcIm11ZGR5XCIsXCJtdWdcIixcIm11bGVcIixcIm11bHRpcGx5XCIsXCJtdXJkZXJcIixcIm11c2ljXCIsXCJtdXN0XCIsXCJteVwiLFwibXlzZWxmXCIsXCJuYWlsXCIsXCJuYW1lXCIsXCJuYXBcIixcIm5hcGtpblwiLFwibmFycm93XCIsXCJuYXN0eVwiLFwibmF1Z2h0eVwiLFwibmF2eVwiLFwibmVhclwiLFwibmVhcmJ5XCIsXCJuZWFybHlcIixcIm5lYXRcIixcIm5lY2tcIixcIm5lY2t0aWVcIixcIm5lZWRcIixcIm5lZWRsZVwiLFwibmVlZG4ndFwiLFwibmVncm9cIixcIm5laWdoYm9yXCIsXCJuZWlnaGJvcmhvb2RcIixcIm5laXRoZXJcIixcIm5lcnZlXCIsXCJuZXN0XCIsXCJuZXRcIixcIm5ldmVyXCIsXCJuZXZlcm1vcmVcIixcIm5ld1wiLFwibmV3c1wiLFwibmV3c3BhcGVyXCIsXCJuZXh0XCIsXCJuaWJibGVcIixcIm5pY2VcIixcIm5pY2tlbFwiLFwibmlnaHRcIixcIm5pZ2h0Z293blwiLFwibmluZVwiLFwibmluZXRlZW5cIixcIm5pbmV0eVwiLFwibm9cIixcIm5vYm9keVwiLFwibm9kXCIsXCJub2lzZVwiLFwibm9pc3lcIixcIm5vbmVcIixcIm5vb25cIixcIm5vclwiLFwibm9ydGhcIixcIm5vcnRoZXJuXCIsXCJub3NlXCIsXCJub3RcIixcIm5vdGVcIixcIm5vdGhpbmdcIixcIm5vdGljZVwiLFwibm92ZW1iZXJcIixcIm5vd1wiLFwibm93aGVyZVwiLFwibnVtYmVyXCIsXCJudXJzZVwiLFwibnV0XCIsXCJvJ2Nsb2NrXCIsXCJvYWtcIixcIm9hclwiLFwib2F0bWVhbFwiLFwib2F0c1wiLFwib2JleVwiLFwib2NlYW5cIixcIm9jdG9iZXJcIixcIm9kZFwiLFwib2ZcIixcIm9mZlwiLFwib2ZmZXJcIixcIm9mZmljZVwiLFwib2ZmaWNlclwiLFwib2Z0ZW5cIixcIm9oXCIsXCJvaWxcIixcIm9sZFwiLFwib2xkLWZhc2hpb25lZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25pb25cIixcIm9ubHlcIixcIm9ud2FyZFwiLFwib3BlblwiLFwib3JcIixcIm9yYW5nZVwiLFwib3JjaGFyZFwiLFwib3JkZXJcIixcIm9yZVwiLFwib3JnYW5cIixcIm90aGVyXCIsXCJvdGhlcndpc2VcIixcIm91Y2hcIixcIm91Z2h0XCIsXCJvdXJcIixcIm91cnNcIixcIm91cnNlbHZlc1wiLFwib3V0XCIsXCJvdXRkb29yc1wiLFwib3V0Zml0XCIsXCJvdXRsYXdcIixcIm91dGxpbmVcIixcIm91dHNpZGVcIixcIm91dHdhcmRcIixcIm92ZW5cIixcIm92ZXJcIixcIm92ZXJhbGxzXCIsXCJvdmVyY29hdFwiLFwib3ZlcmVhdFwiLFwib3ZlcmhlYWRcIixcIm92ZXJoZWFyXCIsXCJvdmVybmlnaHRcIixcIm92ZXJ0dXJuXCIsXCJvd2VcIixcIm93aW5nXCIsXCJvd2xcIixcIm93blwiLFwib3duZXJcIixcIm94XCIsXCJwYVwiLFwicGFjZVwiLFwicGFja1wiLFwicGFja2FnZVwiLFwicGFkXCIsXCJwYWdlXCIsXCJwYWlkXCIsXCJwYWlsXCIsXCJwYWluXCIsXCJwYWluZnVsXCIsXCJwYWludFwiLFwicGFpbnRlclwiLFwicGFpbnRpbmdcIixcInBhaXJcIixcInBhbFwiLFwicGFsYWNlXCIsXCJwYWxlXCIsXCJwYW5cIixcInBhbmNha2VcIixcInBhbmVcIixcInBhbnN5XCIsXCJwYW50c1wiLFwicGFwYVwiLFwicGFwZXJcIixcInBhcmFkZVwiLFwicGFyZG9uXCIsXCJwYXJlbnRcIixcInBhcmtcIixcInBhcnRcIixcInBhcnRseVwiLFwicGFydG5lclwiLFwicGFydHlcIixcInBhc3NcIixcInBhc3NlbmdlclwiLFwicGFzdFwiLFwicGFzdGVcIixcInBhc3R1cmVcIixcInBhdFwiLFwicGF0Y2hcIixcInBhdGhcIixcInBhdHRlclwiLFwicGF2ZVwiLFwicGF2ZW1lbnRcIixcInBhd1wiLFwicGF5XCIsXCJwYXltZW50XCIsXCJwZWFcIixcInBlYWNlXCIsXCJwZWFjZWZ1bFwiLFwicGVhY2hcIixcInBlYWNoZXNcIixcInBlYWtcIixcInBlYW51dFwiLFwicGVhclwiLFwicGVhcmxcIixcInBlYXNcIixcInBlY2tcIixcInBlZWtcIixcInBlZWxcIixcInBlZXBcIixcInBlZ1wiLFwicGVuXCIsXCJwZW5jaWxcIixcInBlbm55XCIsXCJwZW9wbGVcIixcInBlcHBlclwiLFwicGVwcGVybWludFwiLFwicGVyZnVtZVwiLFwicGVyaGFwc1wiLFwicGVyc29uXCIsXCJwZXRcIixcInBob25lXCIsXCJwaWFub1wiLFwicGlja1wiLFwicGlja2xlXCIsXCJwaWNuaWNcIixcInBpY3R1cmVcIixcInBpZVwiLFwicGllY2VcIixcInBpZ1wiLFwicGlnZW9uXCIsXCJwaWdneVwiLFwicGlsZVwiLFwicGlsbFwiLFwicGlsbG93XCIsXCJwaW5cIixcInBpbmVcIixcInBpbmVhcHBsZVwiLFwicGlua1wiLFwicGludFwiLFwicGlwZVwiLFwicGlzdG9sXCIsXCJwaXRcIixcInBpdGNoXCIsXCJwaXRjaGVyXCIsXCJwaXR5XCIsXCJwbGFjZVwiLFwicGxhaW5cIixcInBsYW5cIixcInBsYW5lXCIsXCJwbGFudFwiLFwicGxhdGVcIixcInBsYXRmb3JtXCIsXCJwbGF0dGVyXCIsXCJwbGF5XCIsXCJwbGF5ZXJcIixcInBsYXlncm91bmRcIixcInBsYXlob3VzZVwiLFwicGxheW1hdGVcIixcInBsYXl0aGluZ1wiLFwicGxlYXNhbnRcIixcInBsZWFzZVwiLFwicGxlYXN1cmVcIixcInBsZW50eVwiLFwicGxvd1wiLFwicGx1Z1wiLFwicGx1bVwiLFwicG9ja2V0XCIsXCJwb2NrZXRib29rXCIsXCJwb2VtXCIsXCJwb2ludFwiLFwicG9pc29uXCIsXCJwb2tlXCIsXCJwb2xlXCIsXCJwb2xpY2VcIixcInBvbGljZW1hblwiLFwicG9saXNoXCIsXCJwb2xpdGVcIixcInBvbmRcIixcInBvbmllc1wiLFwicG9ueVwiLFwicG9vbFwiLFwicG9vclwiLFwicG9wXCIsXCJwb3Bjb3JuXCIsXCJwb3BwZWRcIixcInBvcmNoXCIsXCJwb3JrXCIsXCJwb3NzaWJsZVwiLFwicG9zdFwiLFwicG9zdGFnZVwiLFwicG9zdG1hblwiLFwicG90XCIsXCJwb3RhdG9cIixcInBvdGF0b2VzXCIsXCJwb3VuZFwiLFwicG91clwiLFwicG93ZGVyXCIsXCJwb3dlclwiLFwicG93ZXJmdWxcIixcInByYWlzZVwiLFwicHJheVwiLFwicHJheWVyXCIsXCJwcmVwYXJlXCIsXCJwcmVzZW50XCIsXCJwcmV0dHlcIixcInByaWNlXCIsXCJwcmlja1wiLFwicHJpbmNlXCIsXCJwcmluY2Vzc1wiLFwicHJpbnRcIixcInByaXNvblwiLFwicHJpemVcIixcInByb21pc2VcIixcInByb3BlclwiLFwicHJvdGVjdFwiLFwicHJvdWRcIixcInByb3ZlXCIsXCJwcnVuZVwiLFwicHVibGljXCIsXCJwdWRkbGVcIixcInB1ZmZcIixcInB1bGxcIixcInB1bXBcIixcInB1bXBraW5cIixcInB1bmNoXCIsXCJwdW5pc2hcIixcInB1cFwiLFwicHVwaWxcIixcInB1cHB5XCIsXCJwdXJlXCIsXCJwdXJwbGVcIixcInB1cnNlXCIsXCJwdXNoXCIsXCJwdXNzXCIsXCJwdXNzeVwiLFwicHVzc3ljYXRcIixcInB1dFwiLFwicHV0dGluZ1wiLFwicHV6emxlXCIsXCJxdWFja1wiLFwicXVhcnRcIixcInF1YXJ0ZXJcIixcInF1ZWVuXCIsXCJxdWVlclwiLFwicXVlc3Rpb25cIixcInF1aWNrXCIsXCJxdWlja2x5XCIsXCJxdWlldFwiLFwicXVpbHRcIixcInF1aXRcIixcInF1aXRlXCIsXCJyYWJiaXRcIixcInJhY2VcIixcInJhY2tcIixcInJhZGlvXCIsXCJyYWRpc2hcIixcInJhZ1wiLFwicmFpbFwiLFwicmFpbHJvYWRcIixcInJhaWx3YXlcIixcInJhaW5cIixcInJhaW5ib3dcIixcInJhaW55XCIsXCJyYWlzZVwiLFwicmFpc2luXCIsXCJyYWtlXCIsXCJyYW1cIixcInJhblwiLFwicmFuY2hcIixcInJhbmdcIixcInJhcFwiLFwicmFwaWRseVwiLFwicmF0XCIsXCJyYXRlXCIsXCJyYXRoZXJcIixcInJhdHRsZVwiLFwicmF3XCIsXCJyYXlcIixcInJlYWNoXCIsXCJyZWFkXCIsXCJyZWFkZXJcIixcInJlYWRpbmdcIixcInJlYWR5XCIsXCJyZWFsXCIsXCJyZWFsbHlcIixcInJlYXBcIixcInJlYXJcIixcInJlYXNvblwiLFwicmVidWlsZFwiLFwicmVjZWl2ZVwiLFwicmVjZXNzXCIsXCJyZWNvcmRcIixcInJlZFwiLFwicmVkYmlyZFwiLFwicmVkYnJlYXN0XCIsXCJyZWZ1c2VcIixcInJlaW5kZWVyXCIsXCJyZWpvaWNlXCIsXCJyZW1haW5cIixcInJlbWVtYmVyXCIsXCJyZW1pbmRcIixcInJlbW92ZVwiLFwicmVudFwiLFwicmVwYWlyXCIsXCJyZXBheVwiLFwicmVwZWF0XCIsXCJyZXBvcnRcIixcInJlc3RcIixcInJldHVyblwiLFwicmV2aWV3XCIsXCJyZXdhcmRcIixcInJpYlwiLFwicmliYm9uXCIsXCJyaWNlXCIsXCJyaWNoXCIsXCJyaWRcIixcInJpZGRsZVwiLFwicmlkZVwiLFwicmlkZXJcIixcInJpZGluZ1wiLFwicmlnaHRcIixcInJpbVwiLFwicmluZ1wiLFwicmlwXCIsXCJyaXBlXCIsXCJyaXNlXCIsXCJyaXNpbmdcIixcInJpdmVyXCIsXCJyb2FkXCIsXCJyb2Fkc2lkZVwiLFwicm9hclwiLFwicm9hc3RcIixcInJvYlwiLFwicm9iYmVyXCIsXCJyb2JlXCIsXCJyb2JpblwiLFwicm9ja1wiLFwicm9ja2V0XCIsXCJyb2NreVwiLFwicm9kZVwiLFwicm9sbFwiLFwicm9sbGVyXCIsXCJyb29mXCIsXCJyb29tXCIsXCJyb29zdGVyXCIsXCJyb290XCIsXCJyb3BlXCIsXCJyb3NlXCIsXCJyb3NlYnVkXCIsXCJyb3RcIixcInJvdHRlblwiLFwicm91Z2hcIixcInJvdW5kXCIsXCJyb3V0ZVwiLFwicm93XCIsXCJyb3dib2F0XCIsXCJyb3lhbFwiLFwicnViXCIsXCJydWJiZWRcIixcInJ1YmJlclwiLFwicnViYmlzaFwiLFwicnVnXCIsXCJydWxlXCIsXCJydWxlclwiLFwicnVtYmxlXCIsXCJydW5cIixcInJ1bmdcIixcInJ1bm5lclwiLFwicnVubmluZ1wiLFwicnVzaFwiLFwicnVzdFwiLFwicnVzdHlcIixcInJ5ZVwiLFwic2Fja1wiLFwic2FkXCIsXCJzYWRkbGVcIixcInNhZG5lc3NcIixcInNhZmVcIixcInNhZmV0eVwiLFwic2FpZFwiLFwic2FpbFwiLFwic2FpbGJvYXRcIixcInNhaWxvclwiLFwic2FpbnRcIixcInNhbGFkXCIsXCJzYWxlXCIsXCJzYWx0XCIsXCJzYW1lXCIsXCJzYW5kXCIsXCJzYW5kd2ljaFwiLFwic2FuZHlcIixcInNhbmdcIixcInNhbmtcIixcInNhcFwiLFwic2FzaFwiLFwic2F0XCIsXCJzYXRpblwiLFwic2F0aXNmYWN0b3J5XCIsXCJzYXR1cmRheVwiLFwic2F1c2FnZVwiLFwic2F2YWdlXCIsXCJzYXZlXCIsXCJzYXZpbmdzXCIsXCJzYXdcIixcInNheVwiLFwic2NhYlwiLFwic2NhbGVzXCIsXCJzY2FyZVwiLFwic2NhcmZcIixcInNjaG9vbFwiLFwic2Nob29sYm95XCIsXCJzY2hvb2xob3VzZVwiLFwic2Nob29sbWFzdGVyXCIsXCJzY2hvb2xyb29tXCIsXCJzY29yY2hcIixcInNjb3JlXCIsXCJzY3JhcFwiLFwic2NyYXBlXCIsXCJzY3JhdGNoXCIsXCJzY3JlYW1cIixcInNjcmVlblwiLFwic2NyZXdcIixcInNjcnViXCIsXCJzZWFcIixcInNlYWxcIixcInNlYW1cIixcInNlYXJjaFwiLFwic2Vhc29uXCIsXCJzZWF0XCIsXCJzZWNvbmRcIixcInNlY3JldFwiLFwic2VlXCIsXCJzZWVkXCIsXCJzZWVpbmdcIixcInNlZWtcIixcInNlZW1cIixcInNlZW5cIixcInNlZXNhd1wiLFwic2VsZWN0XCIsXCJzZWxmXCIsXCJzZWxmaXNoXCIsXCJzZWxsXCIsXCJzZW5kXCIsXCJzZW5zZVwiLFwic2VudFwiLFwic2VudGVuY2VcIixcInNlcGFyYXRlXCIsXCJzZXB0ZW1iZXJcIixcInNlcnZhbnRcIixcInNlcnZlXCIsXCJzZXJ2aWNlXCIsXCJzZXRcIixcInNldHRpbmdcIixcInNldHRsZVwiLFwic2V0dGxlbWVudFwiLFwic2V2ZW5cIixcInNldmVudGVlblwiLFwic2V2ZW50aFwiLFwic2V2ZW50eVwiLFwic2V2ZXJhbFwiLFwic2V3XCIsXCJzaGFkZVwiLFwic2hhZG93XCIsXCJzaGFkeVwiLFwic2hha2VcIixcInNoYWtlclwiLFwic2hha2luZ1wiLFwic2hhbGxcIixcInNoYW1lXCIsXCJzaGFuJ3RcIixcInNoYXBlXCIsXCJzaGFyZVwiLFwic2hhcnBcIixcInNoYXZlXCIsXCJzaGVcIixcInNoZSdkXCIsXCJzaGUnbGxcIixcInNoZSdzXCIsXCJzaGVhclwiLFwic2hlYXJzXCIsXCJzaGVkXCIsXCJzaGVlcFwiLFwic2hlZXRcIixcInNoZWxmXCIsXCJzaGVsbFwiLFwic2hlcGhlcmRcIixcInNoaW5lXCIsXCJzaGluaW5nXCIsXCJzaGlueVwiLFwic2hpcFwiLFwic2hpcnRcIixcInNob2NrXCIsXCJzaG9lXCIsXCJzaG9lbWFrZXJcIixcInNob25lXCIsXCJzaG9va1wiLFwic2hvb3RcIixcInNob3BcIixcInNob3BwaW5nXCIsXCJzaG9yZVwiLFwic2hvcnRcIixcInNob3RcIixcInNob3VsZFwiLFwic2hvdWxkZXJcIixcInNob3VsZG4ndFwiLFwic2hvdXRcIixcInNob3ZlbFwiLFwic2hvd1wiLFwic2hvd2VyXCIsXCJzaHV0XCIsXCJzaHlcIixcInNpY2tcIixcInNpY2tuZXNzXCIsXCJzaWRlXCIsXCJzaWRld2Fsa1wiLFwic2lkZXdheXNcIixcInNpZ2hcIixcInNpZ2h0XCIsXCJzaWduXCIsXCJzaWxlbmNlXCIsXCJzaWxlbnRcIixcInNpbGtcIixcInNpbGxcIixcInNpbGx5XCIsXCJzaWx2ZXJcIixcInNpbXBsZVwiLFwic2luXCIsXCJzaW5jZVwiLFwic2luZ1wiLFwic2luZ2VyXCIsXCJzaW5nbGVcIixcInNpbmtcIixcInNpcFwiLFwic2lyXCIsXCJzaXNcIixcInNpc3N5XCIsXCJzaXN0ZXJcIixcInNpdFwiLFwic2l0dGluZ1wiLFwic2l4XCIsXCJzaXh0ZWVuXCIsXCJzaXh0aFwiLFwic2l4dHlcIixcInNpemVcIixcInNrYXRlXCIsXCJza2F0ZXJcIixcInNraVwiLFwic2tpblwiLFwic2tpcFwiLFwic2tpcnRcIixcInNreVwiLFwic2xhbVwiLFwic2xhcFwiLFwic2xhdGVcIixcInNsYXZlXCIsXCJzbGVkXCIsXCJzbGVlcFwiLFwic2xlZXB5XCIsXCJzbGVldmVcIixcInNsZWlnaFwiLFwic2xlcHRcIixcInNsaWNlXCIsXCJzbGlkXCIsXCJzbGlkZVwiLFwic2xpbmdcIixcInNsaXBcIixcInNsaXBwZWRcIixcInNsaXBwZXJcIixcInNsaXBwZXJ5XCIsXCJzbGl0XCIsXCJzbG93XCIsXCJzbG93bHlcIixcInNseVwiLFwic21hY2tcIixcInNtYWxsXCIsXCJzbWFydFwiLFwic21lbGxcIixcInNtaWxlXCIsXCJzbW9rZVwiLFwic21vb3RoXCIsXCJzbmFpbFwiLFwic25ha2VcIixcInNuYXBcIixcInNuYXBwaW5nXCIsXCJzbmVlemVcIixcInNub3dcIixcInNub3diYWxsXCIsXCJzbm93Zmxha2VcIixcInNub3d5XCIsXCJzbnVmZlwiLFwic251Z1wiLFwic29cIixcInNvYWtcIixcInNvYXBcIixcInNvYlwiLFwic29ja3NcIixcInNvZFwiLFwic29kYVwiLFwic29mYVwiLFwic29mdFwiLFwic29pbFwiLFwic29sZFwiLFwic29sZGllclwiLFwic29sZVwiLFwic29tZVwiLFwic29tZWJvZHlcIixcInNvbWVob3dcIixcInNvbWVvbmVcIixcInNvbWV0aGluZ1wiLFwic29tZXRpbWVcIixcInNvbWV0aW1lc1wiLFwic29tZXdoZXJlXCIsXCJzb25cIixcInNvbmdcIixcInNvb25cIixcInNvcmVcIixcInNvcnJvd1wiLFwic29ycnlcIixcInNvcnRcIixcInNvdWxcIixcInNvdW5kXCIsXCJzb3VwXCIsXCJzb3VyXCIsXCJzb3V0aFwiLFwic291dGhlcm5cIixcInNwYWNlXCIsXCJzcGFkZVwiLFwic3BhbmtcIixcInNwYXJyb3dcIixcInNwZWFrXCIsXCJzcGVha2VyXCIsXCJzcGVhclwiLFwic3BlZWNoXCIsXCJzcGVlZFwiLFwic3BlbGxcIixcInNwZWxsaW5nXCIsXCJzcGVuZFwiLFwic3BlbnRcIixcInNwaWRlclwiLFwic3Bpa2VcIixcInNwaWxsXCIsXCJzcGluXCIsXCJzcGluYWNoXCIsXCJzcGlyaXRcIixcInNwaXRcIixcInNwbGFzaFwiLFwic3BvaWxcIixcInNwb2tlXCIsXCJzcG9va1wiLFwic3Bvb25cIixcInNwb3J0XCIsXCJzcG90XCIsXCJzcHJlYWRcIixcInNwcmluZ1wiLFwic3ByaW5ndGltZVwiLFwic3ByaW5rbGVcIixcInNxdWFyZVwiLFwic3F1YXNoXCIsXCJzcXVlYWtcIixcInNxdWVlemVcIixcInNxdWlycmVsXCIsXCJzdGFibGVcIixcInN0YWNrXCIsXCJzdGFnZVwiLFwic3RhaXJcIixcInN0YWxsXCIsXCJzdGFtcFwiLFwic3RhbmRcIixcInN0YXJcIixcInN0YXJlXCIsXCJzdGFydFwiLFwic3RhcnZlXCIsXCJzdGF0ZVwiLFwic3RhdGVzXCIsXCJzdGF0aW9uXCIsXCJzdGF5XCIsXCJzdGVha1wiLFwic3RlYWxcIixcInN0ZWFtXCIsXCJzdGVhbWJvYXRcIixcInN0ZWFtZXJcIixcInN0ZWVsXCIsXCJzdGVlcFwiLFwic3RlZXBsZVwiLFwic3RlZXJcIixcInN0ZW1cIixcInN0ZXBcIixcInN0ZXBwaW5nXCIsXCJzdGlja1wiLFwic3RpY2t5XCIsXCJzdGlmZlwiLFwic3RpbGxcIixcInN0aWxsbmVzc1wiLFwic3RpbmdcIixcInN0aXJcIixcInN0aXRjaFwiLFwic3RvY2tcIixcInN0b2NraW5nXCIsXCJzdG9sZVwiLFwic3RvbmVcIixcInN0b29kXCIsXCJzdG9vbFwiLFwic3Rvb3BcIixcInN0b3BcIixcInN0b3BwZWRcIixcInN0b3BwaW5nXCIsXCJzdG9yZVwiLFwic3Rvcmllc1wiLFwic3RvcmtcIixcInN0b3JtXCIsXCJzdG9ybXlcIixcInN0b3J5XCIsXCJzdG92ZVwiLFwic3RyYWlnaHRcIixcInN0cmFuZ2VcIixcInN0cmFuZ2VyXCIsXCJzdHJhcFwiLFwic3RyYXdcIixcInN0cmF3YmVycnlcIixcInN0cmVhbVwiLFwic3RyZWV0XCIsXCJzdHJldGNoXCIsXCJzdHJpbmdcIixcInN0cmlwXCIsXCJzdHJpcGVzXCIsXCJzdHJvbmdcIixcInN0dWNrXCIsXCJzdHVkeVwiLFwic3R1ZmZcIixcInN0dW1wXCIsXCJzdHVuZ1wiLFwic3ViamVjdFwiLFwic3VjaFwiLFwic3Vja1wiLFwic3VkZGVuXCIsXCJzdWZmZXJcIixcInN1Z2FyXCIsXCJzdWl0XCIsXCJzdW1cIixcInN1bW1lclwiLFwic3VuXCIsXCJzdW5kYXlcIixcInN1bmZsb3dlclwiLFwic3VuZ1wiLFwic3Vua1wiLFwic3VubGlnaHRcIixcInN1bm55XCIsXCJzdW5yaXNlXCIsXCJzdW5zZXRcIixcInN1bnNoaW5lXCIsXCJzdXBwZXJcIixcInN1cHBvc2VcIixcInN1cmVcIixcInN1cmVseVwiLFwic3VyZmFjZVwiLFwic3VycHJpc2VcIixcInN3YWxsb3dcIixcInN3YW1cIixcInN3YW1wXCIsXCJzd2FuXCIsXCJzd2F0XCIsXCJzd2VhclwiLFwic3dlYXRcIixcInN3ZWF0ZXJcIixcInN3ZWVwXCIsXCJzd2VldFwiLFwic3dlZXRoZWFydFwiLFwic3dlZXRuZXNzXCIsXCJzd2VsbFwiLFwic3dlcHRcIixcInN3aWZ0XCIsXCJzd2ltXCIsXCJzd2ltbWluZ1wiLFwic3dpbmdcIixcInN3aXRjaFwiLFwic3dvcmRcIixcInN3b3JlXCIsXCJ0YWJsZVwiLFwidGFibGVjbG90aFwiLFwidGFibGVzcG9vblwiLFwidGFibGV0XCIsXCJ0YWNrXCIsXCJ0YWdcIixcInRhaWxcIixcInRhaWxvclwiLFwidGFrZVwiLFwidGFrZW5cIixcInRha2luZ1wiLFwidGFsZVwiLFwidGFsa1wiLFwidGFsa2VyXCIsXCJ0YWxsXCIsXCJ0YW1lXCIsXCJ0YW5cIixcInRhbmtcIixcInRhcFwiLFwidGFwZVwiLFwidGFyXCIsXCJ0YXJkeVwiLFwidGFza1wiLFwidGFzdGVcIixcInRhdWdodFwiLFwidGF4XCIsXCJ0ZWFcIixcInRlYWNoXCIsXCJ0ZWFjaGVyXCIsXCJ0ZWFtXCIsXCJ0ZWFyXCIsXCJ0ZWFzZVwiLFwidGVhc3Bvb25cIixcInRlZXRoXCIsXCJ0ZWxlcGhvbmVcIixcInRlbGxcIixcInRlbXBlclwiLFwidGVuXCIsXCJ0ZW5uaXNcIixcInRlbnRcIixcInRlcm1cIixcInRlcnJpYmxlXCIsXCJ0ZXN0XCIsXCJ0aGFuXCIsXCJ0aGFua1wiLFwidGhhbmtmdWxcIixcInRoYW5rc1wiLFwidGhhbmtzZ2l2aW5nXCIsXCJ0aGF0XCIsXCJ0aGF0J3NcIixcInRoZVwiLFwidGhlYXRlclwiLFwidGhlZVwiLFwidGhlaXJcIixcInRoZW1cIixcInRoZW5cIixcInRoZXJlXCIsXCJ0aGVzZVwiLFwidGhleVwiLFwidGhleSdkXCIsXCJ0aGV5J2xsXCIsXCJ0aGV5J3JlXCIsXCJ0aGV5J3ZlXCIsXCJ0aGlja1wiLFwidGhpZWZcIixcInRoaW1ibGVcIixcInRoaW5cIixcInRoaW5nXCIsXCJ0aGlua1wiLFwidGhpcmRcIixcInRoaXJzdHlcIixcInRoaXJ0ZWVuXCIsXCJ0aGlydHlcIixcInRoaXNcIixcInRob3JuXCIsXCJ0aG9zZVwiLFwidGhvdWdoXCIsXCJ0aG91Z2h0XCIsXCJ0aG91c2FuZFwiLFwidGhyZWFkXCIsXCJ0aHJlZVwiLFwidGhyZXdcIixcInRocm9hdFwiLFwidGhyb25lXCIsXCJ0aHJvdWdoXCIsXCJ0aHJvd1wiLFwidGhyb3duXCIsXCJ0aHVtYlwiLFwidGh1bmRlclwiLFwidGh1cnNkYXlcIixcInRoeVwiLFwidGlja1wiLFwidGlja2V0XCIsXCJ0aWNrbGVcIixcInRpZVwiLFwidGlnZXJcIixcInRpZ2h0XCIsXCJ0aWxsXCIsXCJ0aW1lXCIsXCJ0aW5cIixcInRpbmtsZVwiLFwidGlueVwiLFwidGlwXCIsXCJ0aXB0b2VcIixcInRpcmVcIixcInRpcmVkXCIsXCJ0aXRsZVwiLFwidG9cIixcInRvYWRcIixcInRvYWRzdG9vbFwiLFwidG9hc3RcIixcInRvYmFjY29cIixcInRvZGF5XCIsXCJ0b2VcIixcInRvZ2V0aGVyXCIsXCJ0b2lsZXRcIixcInRvbGRcIixcInRvbWF0b1wiLFwidG9tb3Jyb3dcIixcInRvblwiLFwidG9uZVwiLFwidG9uZ3VlXCIsXCJ0b25pZ2h0XCIsXCJ0b29cIixcInRvb2tcIixcInRvb2xcIixcInRvb3RcIixcInRvb3RoXCIsXCJ0b290aGJydXNoXCIsXCJ0b290aHBpY2tcIixcInRvcFwiLFwidG9yZVwiLFwidG9yblwiLFwidG9zc1wiLFwidG91Y2hcIixcInRvd1wiLFwidG93YXJkXCIsXCJ0b3dhcmRzXCIsXCJ0b3dlbFwiLFwidG93ZXJcIixcInRvd25cIixcInRveVwiLFwidHJhY2VcIixcInRyYWNrXCIsXCJ0cmFkZVwiLFwidHJhaW5cIixcInRyYW1wXCIsXCJ0cmFwXCIsXCJ0cmF5XCIsXCJ0cmVhc3VyZVwiLFwidHJlYXRcIixcInRyZWVcIixcInRyaWNrXCIsXCJ0cmljeWNsZVwiLFwidHJpZWRcIixcInRyaW1cIixcInRyaXBcIixcInRyb2xsZXlcIixcInRyb3VibGVcIixcInRydWNrXCIsXCJ0cnVlXCIsXCJ0cnVseVwiLFwidHJ1bmtcIixcInRydXN0XCIsXCJ0cnV0aFwiLFwidHJ5XCIsXCJ0dWJcIixcInR1ZXNkYXlcIixcInR1Z1wiLFwidHVsaXBcIixcInR1bWJsZVwiLFwidHVuZVwiLFwidHVubmVsXCIsXCJ0dXJrZXlcIixcInR1cm5cIixcInR1cnRsZVwiLFwidHdlbHZlXCIsXCJ0d2VudHlcIixcInR3aWNlXCIsXCJ0d2lnXCIsXCJ0d2luXCIsXCJ0d29cIixcInVnbHlcIixcInVtYnJlbGxhXCIsXCJ1bmNsZVwiLFwidW5kZXJcIixcInVuZGVyc3RhbmRcIixcInVuZGVyd2VhclwiLFwidW5kcmVzc1wiLFwidW5mYWlyXCIsXCJ1bmZpbmlzaGVkXCIsXCJ1bmZvbGRcIixcInVuZnJpZW5kbHlcIixcInVuaGFwcHlcIixcInVuaHVydFwiLFwidW5pZm9ybVwiLFwidW5pdGVkXCIsXCJ1bmtpbmRcIixcInVua25vd25cIixcInVubGVzc1wiLFwidW5wbGVhc2FudFwiLFwidW50aWxcIixcInVud2lsbGluZ1wiLFwidXBcIixcInVwb25cIixcInVwcGVyXCIsXCJ1cHNldFwiLFwidXBzaWRlXCIsXCJ1cHN0YWlyc1wiLFwidXB0b3duXCIsXCJ1cHdhcmRcIixcInVzXCIsXCJ1c2VcIixcInVzZWRcIixcInVzZWZ1bFwiLFwidmFsZW50aW5lXCIsXCJ2YWxsZXlcIixcInZhbHVhYmxlXCIsXCJ2YWx1ZVwiLFwidmFzZVwiLFwidmVnZXRhYmxlXCIsXCJ2ZWx2ZXRcIixcInZlcnlcIixcInZlc3NlbFwiLFwidmljdG9yeVwiLFwidmlld1wiLFwidmlsbGFnZVwiLFwidmluZVwiLFwidmlvbGV0XCIsXCJ2aXNpdFwiLFwidmlzaXRvclwiLFwidm9pY2VcIixcInZvdGVcIixcIndhZ1wiLFwid2Fnb25cIixcIndhaXN0XCIsXCJ3YWl0XCIsXCJ3YWtlXCIsXCJ3YWtlblwiLFwid2Fsa1wiLFwid2FsbFwiLFwid2FsbnV0XCIsXCJ3YW50XCIsXCJ3YXJcIixcIndhcm1cIixcIndhcm5cIixcIndhc1wiLFwid2FzaFwiLFwid2FzaGVyXCIsXCJ3YXNodHViXCIsXCJ3YXNuJ3RcIixcIndhc3RlXCIsXCJ3YXRjaFwiLFwid2F0Y2htYW5cIixcIndhdGVyXCIsXCJ3YXRlcm1lbG9uXCIsXCJ3YXRlcnByb29mXCIsXCJ3YXZlXCIsXCJ3YXhcIixcIndheVwiLFwid2F5c2lkZVwiLFwid2VcIixcIndlJ2RcIixcIndlJ2xsXCIsXCJ3ZSdyZVwiLFwid2UndmVcIixcIndlYWtcIixcIndlYWtlblwiLFwid2Vha25lc3NcIixcIndlYWx0aFwiLFwid2VhcG9uXCIsXCJ3ZWFyXCIsXCJ3ZWFyeVwiLFwid2VhdGhlclwiLFwid2VhdmVcIixcIndlYlwiLFwid2VkZGluZ1wiLFwid2VkbmVzZGF5XCIsXCJ3ZWVcIixcIndlZWRcIixcIndlZWtcIixcIndlZXBcIixcIndlaWdoXCIsXCJ3ZWxjb21lXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXN0XCIsXCJ3ZXN0ZXJuXCIsXCJ3ZXRcIixcIndoYWxlXCIsXCJ3aGF0XCIsXCJ3aGF0J3NcIixcIndoZWF0XCIsXCJ3aGVlbFwiLFwid2hlblwiLFwid2hlbmV2ZXJcIixcIndoZXJlXCIsXCJ3aGljaFwiLFwid2hpbGVcIixcIndoaXBcIixcIndoaXBwZWRcIixcIndoaXJsXCIsXCJ3aGlza2V5XCIsXCJ3aGlza3lcIixcIndoaXNwZXJcIixcIndoaXN0bGVcIixcIndoaXRlXCIsXCJ3aG9cIixcIndobydkXCIsXCJ3aG8nbGxcIixcIndobydzXCIsXCJ3aG9sZVwiLFwid2hvbVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lja2VkXCIsXCJ3aWRlXCIsXCJ3aWZlXCIsXCJ3aWdnbGVcIixcIndpbGRcIixcIndpbGRjYXRcIixcIndpbGxcIixcIndpbGxpbmdcIixcIndpbGxvd1wiLFwid2luXCIsXCJ3aW5kXCIsXCJ3aW5kbWlsbFwiLFwid2luZG93XCIsXCJ3aW5keVwiLFwid2luZVwiLFwid2luZ1wiLFwid2lua1wiLFwid2lubmVyXCIsXCJ3aW50ZXJcIixcIndpcGVcIixcIndpcmVcIixcIndpc2VcIixcIndpc2hcIixcIndpdFwiLFwid2l0Y2hcIixcIndpdGhcIixcIndpdGhvdXRcIixcIndva2VcIixcIndvbGZcIixcIndvbWFuXCIsXCJ3b21lblwiLFwid29uXCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b25kZXJmdWxcIixcIndvb2RcIixcIndvb2RlblwiLFwid29vZHBlY2tlclwiLFwid29vZHNcIixcIndvb2xcIixcIndvb2xlblwiLFwid29yZFwiLFwid29yZVwiLFwid29ya1wiLFwid29ya2VyXCIsXCJ3b3JrbWFuXCIsXCJ3b3JsZFwiLFwid29ybVwiLFwid29yblwiLFwid29ycnlcIixcIndvcnNlXCIsXCJ3b3JzdFwiLFwid29ydGhcIixcIndvdWxkXCIsXCJ3b3VsZG4ndFwiLFwid291bmRcIixcIndvdmVcIixcIndyYXBcIixcIndyYXBwZWRcIixcIndyZWNrXCIsXCJ3cmVuXCIsXCJ3cmluZ1wiLFwid3JpdGVcIixcIndyaXRpbmdcIixcIndyaXR0ZW5cIixcIndyb25nXCIsXCJ3cm90ZVwiLFwid3J1bmdcIixcInlhcmRcIixcInlhcm5cIixcInllYXJcIixcInllbGxcIixcInllbGxvd1wiLFwieWVzXCIsXCJ5ZXN0ZXJkYXlcIixcInlldFwiLFwieW9sa1wiLFwieW9uZGVyXCIsXCJ5b3VcIixcInlvdSdkXCIsXCJ5b3UnbGxcIixcInlvdSdyZVwiLFwieW91J3ZlXCIsXCJ5b3VuZ1wiLFwieW91bmdzdGVyXCIsXCJ5b3VyXCIsXCJ5b3Vyc1wiLFwieW91cnNlbGZcIixcInlvdXJzZWx2ZXNcIixcInlvdXRoXCJdLHBlPXs0OlswLDRdLDU6WzUsNl0sNjpbNyw4XSw3Ols5LDEwXSw4OlsxMSwxMl0sOTpbMTMsMTVdLDEwOlsxNixOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFldLE5hTjpbTnVtYmVyLk5hTixOdW1iZXIuTmFOXX07ZnVuY3Rpb24gaGUobil7dmFyIGUsYTtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPyhhPS4xNTc5KihlPShuLmRpZmZpY3VsdFdvcmR8fDApL24ud29yZCkqMTAwKy4wNDk2Km4ud29yZC9uLnNlbnRlbmNlLGU+LjA1JiYoYSs9My42MzY1KSxhKTpOdW1iZXIuTmFOfWZ1bmN0aW9uIGdlKG4pe3JldHVybiBuJiZuLnNlbnRlbmNlJiZuLndvcmQmJm4uc3lsbGFibGU/MjA2LjgzNS1uLndvcmQvbi5zZW50ZW5jZSoxLjAxNS1uLnN5bGxhYmxlL24ud29yZCo4NC42Ok51bWJlci5OYU59ZnVuY3Rpb24geWUobil7cmV0dXJuIG4mJm4uc2VudGVuY2UmJm4ud29yZD8uNCoobi53b3JkL24uc2VudGVuY2UrKG4uY29tcGxleFBvbHlzaWxsYWJpY1dvcmR8fDApL24ud29yZCoxMDApOk51bWJlci5OYU59ZnVuY3Rpb24gYmUobil7cmV0dXJuIG4mJm4uc2VudGVuY2U/My4xMjkxKzEuMDQzKk1hdGguc3FydCgobi5wb2x5c2lsbGFiaWNXb3JkfHwwKSooMzAvbi5zZW50ZW5jZSkpOk51bWJlci5OYU59dmFyIERlPVtcImFcIixcImFibGVcIixcImFib3V0XCIsXCJhYm92ZVwiLFwiYWNyb3NzXCIsXCJhY3RcIixcImFkZFwiLFwiYWZyYWlkXCIsXCJhZnRlclwiLFwiYWZ0ZXJub29uXCIsXCJhZ2FpblwiLFwiYWdhaW5zdFwiLFwiYWdvXCIsXCJhaXJcIixcImFpcnBsYW5lXCIsXCJhbGFybVwiLFwiYWxsXCIsXCJhbG1vc3RcIixcImFsb25lXCIsXCJhbG9uZ1wiLFwiYWxyZWFkeVwiLFwiYWxzb1wiLFwiYWx3YXlzXCIsXCJhbVwiLFwiYW1vbmdcIixcImFuXCIsXCJhbmRcIixcImFuZ3J5XCIsXCJhbmltYWxcIixcImFub3RoZXJcIixcImFuc3dlclwiLFwiYW55XCIsXCJhbnlvbmVcIixcImFwcGVhclwiLFwiYXBwbGVcIixcImFyZVwiLFwiYXJtXCIsXCJhcm91bmRcIixcImFycm93XCIsXCJhc1wiLFwiYXNrXCIsXCJhc2xlZXBcIixcImF0XCIsXCJhdGVcIixcImF0dGVudGlvblwiLFwiYXVudFwiLFwiYXdha2VcIixcImF3YXlcIixcImJcIixcImJhYnlcIixcImJhY2tcIixcImJhZFwiLFwiYmFnXCIsXCJiYWxsXCIsXCJiYWxsb29uXCIsXCJiYW5nXCIsXCJiYW5rXCIsXCJiYXJrXCIsXCJiYXJuXCIsXCJiYXNrZXRcIixcImJlXCIsXCJiZWFuXCIsXCJiZWFyXCIsXCJiZWF0XCIsXCJiZWF1dGlmdWxcIixcImJlY2FtZVwiLFwiYmVjYXVzZVwiLFwiYmVjb21lXCIsXCJiZWRcIixcImJlZVwiLFwiYmVlblwiLFwiYmVmb3JlXCIsXCJiZWdhblwiLFwiYmVnaW5cIixcImJlaGluZFwiLFwiYmVsaWV2ZVwiLFwiYmVsbFwiLFwiYmVsb25nXCIsXCJiZW5kXCIsXCJiZW50XCIsXCJiZXNpZGVcIixcImJlc3RcIixcImJldHRlclwiLFwiYmV0d2VlblwiLFwiYmlnXCIsXCJiaXJkXCIsXCJiaXJ0aGRheVwiLFwiYml0XCIsXCJiaXRlXCIsXCJibGFja1wiLFwiYmxhbmtldFwiLFwiYmxld1wiLFwiYmxvY2tcIixcImJsb3dcIixcImJsdWVcIixcImJvYXJkXCIsXCJib2F0XCIsXCJib29rXCIsXCJib290XCIsXCJib3JuXCIsXCJib3Jyb3dcIixcImJvdGhcIixcImJvdGhlclwiLFwiYm90dGxlXCIsXCJib3R0b21cIixcImJvdWdodFwiLFwiYm93XCIsXCJib3hcIixcImJveVwiLFwiYnJhbmNoXCIsXCJicmF2ZVwiLFwiYnJlYWRcIixcImJyZWFrXCIsXCJicmVha2Zhc3RcIixcImJyZWF0aFwiLFwiYnJpY2tcIixcImJyaWRnZVwiLFwiYnJpZ2h0XCIsXCJicmluZ1wiLFwiYnJva2VcIixcImJyb2tlblwiLFwiYnJvdGhlclwiLFwiYnJvdWdodFwiLFwiYnJvd25cIixcImJydXNoXCIsXCJidWlsZFwiLFwiYnVtcFwiLFwiYnVyblwiLFwiYnVzXCIsXCJidXN5XCIsXCJidXRcIixcImJ1dHRlclwiLFwiYnV0dG9uXCIsXCJidXlcIixcImJ5XCIsXCJjXCIsXCJjYWJpblwiLFwiY2FnZVwiLFwiY2FrZVwiLFwiY2FsbFwiLFwiY2FtZVwiLFwiY2FtcFwiLFwiY2FuXCIsXCJjYW4ndFwiLFwiY2FuZGxlXCIsXCJjYW5keVwiLFwiY2FwXCIsXCJjYXB0YWluXCIsXCJjYXJcIixcImNhcmRcIixcImNhcmVcIixcImNhcmVmdWxcIixcImNhcnJvdFwiLFwiY2FycnlcIixcImNhc2VcIixcImNhc3RsZVwiLFwiY2F0XCIsXCJjYXRjaFwiLFwiY2F0dGxlXCIsXCJjYXVnaHRcIixcImNhdXNlXCIsXCJjZW50XCIsXCJjZXJ0YWluXCIsXCJjaGFpclwiLFwiY2hhbmNlXCIsXCJjaGFuZ2VcIixcImNoYXNlXCIsXCJjaGlja2VuXCIsXCJjaGllZlwiLFwiY2hpbGRcIixcImNoaWxkcmVuXCIsXCJjaHVyY2hcIixcImNpcmNsZVwiLFwiY2lyY3VzXCIsXCJjaXR5XCIsXCJjbGFwXCIsXCJjbGVhblwiLFwiY2xldmVyXCIsXCJjbGlmZlwiLFwiY2xpbWJcIixcImNsb2NrXCIsXCJjbG9zZVwiLFwiY2xvdGhcIixcImNsb3RoZXNcIixcImNsb3duXCIsXCJjb2F0XCIsXCJjb2xkXCIsXCJjb2xvclwiLFwiY29tZVwiLFwiY29tZm9ydGFibGVcIixcImNvbXBhbnlcIixcImNvbnRlc3RcIixcImNvbnRpbnVlXCIsXCJjb29rXCIsXCJjb29sXCIsXCJjb3JuZXJcIixcImNvdWxkXCIsXCJjb3VudFwiLFwiY291bnRyeVwiLFwiY291cnNlXCIsXCJjb3ZlclwiLFwiY293XCIsXCJjcmF3bFwiLFwiY3JlYW1cIixcImNyeVwiLFwiY3VwXCIsXCJjdXJ0YWluXCIsXCJjdXRcIixcImRcIixcImRhZFwiLFwiZGFuY2VcIixcImRhbmdlclwiLFwiZGFuZ2Vyb3VzXCIsXCJkYXJrXCIsXCJkYXNoXCIsXCJkYXVnaHRlclwiLFwiZGF5XCIsXCJkZWFyXCIsXCJkZWNpZGVcIixcImRlZXBcIixcImRlc2tcIixcImRpZFwiLFwiZGlkbid0XCIsXCJkaWVcIixcImRpZmZlcmVudFwiLFwiZGlnXCIsXCJkaW5uZXJcIixcImRpcmVjdGlvblwiLFwiZGlzYXBwZWFyXCIsXCJkaXNhcHBvaW50XCIsXCJkaXNjb3ZlclwiLFwiZGlzdGFuY2VcIixcImRvXCIsXCJkb2N0b3JcIixcImRvZXNcIixcImRvZ1wiLFwiZG9sbGFyXCIsXCJkb24ndFwiLFwiZG9uZVwiLFwiZG9vclwiLFwiZG93blwiLFwiZHJhZ29uXCIsXCJkcmVhbVwiLFwiZHJlc3NcIixcImRyaW5rXCIsXCJkcml2ZVwiLFwiZHJvcFwiLFwiZHJvdmVcIixcImRyeVwiLFwiZHVja1wiLFwiZHVyaW5nXCIsXCJkdXN0XCIsXCJlXCIsXCJlYWNoXCIsXCJlYWdlclwiLFwiZWFyXCIsXCJlYXJseVwiLFwiZWFyblwiLFwiZWFydGhcIixcImVhc3lcIixcImVhdFwiLFwiZWRnZVwiLFwiZWdnXCIsXCJlaWdodFwiLFwiZWlnaHRlZW5cIixcImVpdGhlclwiLFwiZWxlcGhhbnRcIixcImVsc2VcIixcImVtcHR5XCIsXCJlbmRcIixcImVuZW15XCIsXCJlbm91Z2hcIixcImVudGVyXCIsXCJldmVuXCIsXCJldmVyXCIsXCJldmVyeVwiLFwiZXZlcnl0aGluZ1wiLFwiZXhhY3RcIixcImV4Y2VwdFwiLFwiZXhjaXRlXCIsXCJleGNsYWltXCIsXCJleHBsYWluXCIsXCJleWVcIixcImZhY2VcIixcImZhY3RcIixcImZhaXJcIixcImZhbGxcIixcImZhbWlseVwiLFwiZmFyXCIsXCJmYXJtXCIsXCJmYXJtZXJcIixcImZhcnRoZXJcIixcImZhc3RcIixcImZhdFwiLFwiZmF0aGVyXCIsXCJmZWF0aGVyXCIsXCJmZWVkXCIsXCJmZWVsXCIsXCJmZWV0XCIsXCJmZWxsXCIsXCJmZWxsb3dcIixcImZlbHRcIixcImZlbmNlXCIsXCJmZXdcIixcImZpZWxkXCIsXCJmaWVyY2VcIixcImZpZ2h0XCIsXCJmaWd1cmVcIixcImZpbGxcIixcImZpbmFsXCIsXCJmaW5kXCIsXCJmaW5lXCIsXCJmaW5nZXJcIixcImZpbmlzaFwiLFwiZmlyZVwiLFwiZmlyc3RcIixcImZpc2hcIixcImZpdmVcIixcImZsYWdcIixcImZsYXNoXCIsXCJmbGF0XCIsXCJmbGV3XCIsXCJmbG9vclwiLFwiZmxvd2VyXCIsXCJmbHlcIixcImZvbGxvd1wiLFwiZm9vZFwiLFwiZm9yXCIsXCJmb3Jlc3RcIixcImZvcmdldFwiLFwiZm9ydGhcIixcImZvdW5kXCIsXCJmb3VyXCIsXCJmb3VydGhcIixcImZveFwiLFwiZnJlc2hcIixcImZyaWVuZFwiLFwiZnJpZ2h0ZW5cIixcImZyb2dcIixcImZyb21cIixcImZyb250XCIsXCJmcnVpdFwiLFwiZnVsbFwiLFwiZnVuXCIsXCJmdW5ueVwiLFwiZnVyXCIsXCJnXCIsXCJnYW1lXCIsXCJnYXJkZW5cIixcImdhc3BcIixcImdhdGVcIixcImdhdmVcIixcImdldFwiLFwiZ2lhbnRcIixcImdpZnRcIixcImdpcmxcIixcImdpdmVcIixcImdsYWRcIixcImdsYXNzXCIsXCJnb1wiLFwiZ29hdFwiLFwiZ29uZVwiLFwiZ29vZFwiLFwiZ290XCIsXCJncmFuZGZhdGhlclwiLFwiZ3JhbmRtb3RoZXJcIixcImdyYXNzXCIsXCJncmF5XCIsXCJncmVhdFwiLFwiZ3JlZW5cIixcImdyZXdcIixcImdyaW5cIixcImdyb3VuZFwiLFwiZ3JvdXBcIixcImdyb3dcIixcImdyb3dsXCIsXCJndWVzc1wiLFwiZ3VuXCIsXCJoXCIsXCJoYWRcIixcImhhaXJcIixcImhhbGZcIixcImhhbGxcIixcImhhbmRcIixcImhhbmRsZVwiLFwiaGFuZ1wiLFwiaGFwcGVuXCIsXCJoYXBwaW5lc3NcIixcImhhcHB5XCIsXCJoYXJkXCIsXCJoYXJtXCIsXCJoYXNcIixcImhhdFwiLFwiaGF0ZVwiLFwiaGF2ZVwiLFwiaGVcIixcImhlJ3NcIixcImhlYWRcIixcImhlYXJcIixcImhlYXJkXCIsXCJoZWF2eVwiLFwiaGVsZFwiLFwiaGVsbG9cIixcImhlbHBcIixcImhlblwiLFwiaGVyXCIsXCJoZXJlXCIsXCJoZXJzZWxmXCIsXCJoaWRcIixcImhpZGVcIixcImhpZ2hcIixcImhpbGxcIixcImhpbVwiLFwiaGltc2VsZlwiLFwiaGlzXCIsXCJoaXRcIixcImhvbGRcIixcImhvbGVcIixcImhvbGlkYXlcIixcImhvbWVcIixcImhvbmV5XCIsXCJob3BcIixcImhvcm5cIixcImhvcnNlXCIsXCJob3RcIixcImhvdXJcIixcImhvdXNlXCIsXCJob3dcIixcImhvd2xcIixcImh1bVwiLFwiaHVuZHJlZFwiLFwiaHVuZ1wiLFwiaHVuZ3J5XCIsXCJodW50XCIsXCJodXJyeVwiLFwiaHVydFwiLFwiaHVzYmFuZFwiLFwiaVwiLFwiaSdsbFwiLFwiaSdtXCIsXCJpY2VcIixcImlkZWFcIixcImlmXCIsXCJpbWFnaW5lXCIsXCJpbXBvcnRhbnRcIixcImluXCIsXCJpbmNoXCIsXCJpbmRlZWRcIixcImluc2lkZVwiLFwiaW5zdGVhZFwiLFwiaW50b1wiLFwiaW52aXRlXCIsXCJpc1wiLFwiaXRcIixcIml0J3NcIixcIml0c1wiLFwialwiLFwiamFja2V0XCIsXCJqYXJcIixcImpldFwiLFwiam9iXCIsXCJqb2luXCIsXCJqb2tlXCIsXCJqb3lcIixcImp1bXBcIixcImp1c3RcIixcImtcIixcImtlZXBcIixcImtlcHRcIixcImtleVwiLFwia2lja1wiLFwia2lsbFwiLFwia2luZFwiLFwia2luZ1wiLFwia2l0Y2hlblwiLFwia2l0dGVuXCIsXCJrbmVlXCIsXCJrbmV3XCIsXCJrbm9ja1wiLFwia25vd1wiLFwibFwiLFwibGFkZGVyXCIsXCJsYWR5XCIsXCJsYWlkXCIsXCJsYWtlXCIsXCJsYW5kXCIsXCJsYXJnZVwiLFwibGFzdFwiLFwibGF0ZVwiLFwibGF1Z2hcIixcImxheVwiLFwibGF6eVwiLFwibGVhZFwiLFwibGVhcFwiLFwibGVhcm5cIixcImxlYXN0XCIsXCJsZWF2ZVwiLFwibGVmdFwiLFwibGVnXCIsXCJsZXNzXCIsXCJsZXRcIixcImxldCdzXCIsXCJsZXR0ZXJcIixcImxpY2tcIixcImxpZnRcIixcImxpZ2h0XCIsXCJsaWtlXCIsXCJsaW5lXCIsXCJsaW9uXCIsXCJsaXN0XCIsXCJsaXN0ZW5cIixcImxpdHRsZVwiLFwibGl2ZVwiLFwibG9hZFwiLFwibG9uZ1wiLFwibG9va1wiLFwibG9zdFwiLFwibG90XCIsXCJsb3VkXCIsXCJsb3ZlXCIsXCJsb3dcIixcImx1Y2tcIixcImx1bXBcIixcImx1bmNoXCIsXCJtXCIsXCJtYWNoaW5lXCIsXCJtYWRlXCIsXCJtYWdpY1wiLFwibWFpbFwiLFwibWFrZVwiLFwibWFuXCIsXCJtYW55XCIsXCJtYXJjaFwiLFwibWFya1wiLFwibWFya2V0XCIsXCJtYXN0ZXJcIixcIm1hdHRlclwiLFwibWF5XCIsXCJtYXliZVwiLFwibWVcIixcIm1lYW5cIixcIm1lYW50XCIsXCJtZWF0XCIsXCJtZWV0XCIsXCJtZWx0XCIsXCJtZW5cIixcIm1lcnJ5XCIsXCJtZXRcIixcIm1pZGRsZVwiLFwibWlnaHRcIixcIm1pbGVcIixcIm1pbGtcIixcIm1pbGttYW5cIixcIm1pbmRcIixcIm1pbmVcIixcIm1pbnV0ZVwiLFwibWlzc1wiLFwibWlzdGFrZVwiLFwibW9tZW50XCIsXCJtb25leVwiLFwibW9ua2V5XCIsXCJtb250aFwiLFwibW9yZVwiLFwibW9ybmluZ1wiLFwibW9zdFwiLFwibW90aGVyXCIsXCJtb3VudGFpblwiLFwibW91c2VcIixcIm1vdXRoXCIsXCJtb3ZlXCIsXCJtdWNoXCIsXCJtdWRcIixcIm11c2ljXCIsXCJtdXN0XCIsXCJteVwiLFwiblwiLFwibmFtZVwiLFwibmVhclwiLFwibmVja1wiLFwibmVlZFwiLFwibmVlZGxlXCIsXCJuZWlnaGJvclwiLFwibmVpZ2hib3Job29kXCIsXCJuZXN0XCIsXCJuZXZlclwiLFwibmV3XCIsXCJuZXh0XCIsXCJuaWJibGVcIixcIm5pY2VcIixcIm5pZ2h0XCIsXCJuaW5lXCIsXCJub1wiLFwibm9kXCIsXCJub2lzZVwiLFwibm9uZVwiLFwibm9ydGhcIixcIm5vc2VcIixcIm5vdFwiLFwibm90ZVwiLFwibm90aGluZ1wiLFwibm90aWNlXCIsXCJub3dcIixcIm51bWJlclwiLFwib1wiLFwib2NlYW5cIixcIm9mXCIsXCJvZmZcIixcIm9mZmVyXCIsXCJvZnRlblwiLFwib2hcIixcIm9sZFwiLFwib25cIixcIm9uY2VcIixcIm9uZVwiLFwib25seVwiLFwib3BlblwiLFwib3JcIixcIm9yYW5nZVwiLFwib3JkZXJcIixcIm90aGVyXCIsXCJvdXJcIixcIm91dFwiLFwib3V0c2lkZVwiLFwib3ZlclwiLFwib3dsXCIsXCJvd25cIixcInBcIixcInBhY2tcIixcInBhaWRcIixcInBhaWxcIixcInBhaW50XCIsXCJwYWlyXCIsXCJwYWxhY2VcIixcInBhblwiLFwicGFwZXJcIixcInBhcmFkZVwiLFwicGFyZW50XCIsXCJwYXJrXCIsXCJwYXJ0XCIsXCJwYXJ0eVwiLFwicGFzc1wiLFwicGFzdFwiLFwicGFzdHVyZVwiLFwicGF0aFwiLFwicGF3XCIsXCJwYXlcIixcInBlYW51dFwiLFwicGVla1wiLFwicGVuXCIsXCJwZW5ueVwiLFwicGVvcGxlXCIsXCJwZXJmZWN0XCIsXCJwZXJoYXBzXCIsXCJwZXJzb25cIixcInBldFwiLFwicGlja1wiLFwicGlja2V0XCIsXCJwaWNuaWNcIixcInBpY3R1cmVcIixcInBpZVwiLFwicGllY2VcIixcInBpZ1wiLFwicGlsZVwiLFwicGluXCIsXCJwbGFjZVwiLFwicGxhblwiLFwicGxhbnRcIixcInBsYXlcIixcInBsZWFzYW50XCIsXCJwbGVhc2VcIixcInBsZW50eVwiLFwicGxvd1wiLFwicG9pbnRcIixcInBva2VcIixcInBvbGVcIixcInBvbGljZW1hblwiLFwicG9uZFwiLFwicG9vclwiLFwicG9wXCIsXCJwb3N0bWFuXCIsXCJwb3RcIixcInBvdGF0b1wiLFwicG91bmRcIixcInBvdXJcIixcInByYWN0aWNlXCIsXCJwcmVwYXJlXCIsXCJwcmVzZW50XCIsXCJwcmV0ZW5kXCIsXCJwcmV0dHlcIixcInByaW5jZXNzXCIsXCJwcml6ZVwiLFwicHJvYmFibHlcIixcInByb2JsZW1cIixcInByb21pc2VcIixcInByb3RlY3RcIixcInByb3VkXCIsXCJwdWZmXCIsXCJwdWxsXCIsXCJwdXBweVwiLFwicHVzaFwiLFwicHV0XCIsXCJxXCIsXCJxdWVlblwiLFwicXVlZXJcIixcInF1aWNrXCIsXCJxdWlldFwiLFwicXVpdGVcIixcInJcIixcInJhYmJpdFwiLFwicmFjY29vblwiLFwicmFjZVwiLFwicmFkaW9cIixcInJhZ1wiLFwicmFpblwiLFwicmFpc2VcIixcInJhblwiLFwicmFuY2hcIixcInJhbmdcIixcInJlYWNoXCIsXCJyZWFkXCIsXCJyZWFkeVwiLFwicmVhbFwiLFwicmVkXCIsXCJyZWZ1c2VcIixcInJlbWVtYmVyXCIsXCJyZXBseVwiLFwicmVzdFwiLFwicmV0dXJuXCIsXCJyZXdhcmRcIixcInJpY2hcIixcInJpZGVcIixcInJpZ2h0XCIsXCJyaW5nXCIsXCJyaXZlclwiLFwicm9hZFwiLFwicm9hclwiLFwicm9ja1wiLFwicm9kZVwiLFwicm9sbFwiLFwicm9vZlwiLFwicm9vbVwiLFwicm9wZVwiLFwicm91bmRcIixcInJvd1wiLFwicnViXCIsXCJydWxlXCIsXCJydW5cIixcInJ1c2hcIixcInNcIixcInNhZFwiLFwic2FmZVwiLFwic2FpZFwiLFwic2FpbFwiLFwic2FsZVwiLFwic2FsdFwiLFwic2FtZVwiLFwic2FuZFwiLFwic2FuZ1wiLFwic2F0XCIsXCJzYXZlXCIsXCJzYXdcIixcInNheVwiLFwic2NhcmVcIixcInNjaG9vbFwiLFwic2NvbGRcIixcInNjcmF0Y2hcIixcInNjcmVhbVwiLFwic2VhXCIsXCJzZWF0XCIsXCJzZWNvbmRcIixcInNlY3JldFwiLFwic2VlXCIsXCJzZWVkXCIsXCJzZWVtXCIsXCJzZWVuXCIsXCJzZWxsXCIsXCJzZW5kXCIsXCJzZW50XCIsXCJzZXZlblwiLFwic2V2ZXJhbFwiLFwic2V3XCIsXCJzaGFkb3dcIixcInNoYWtlXCIsXCJzaGFsbFwiLFwic2hhcGVcIixcInNoZVwiLFwic2hlZXBcIixcInNoZWxsXCIsXCJzaGluZVwiLFwic2hpcFwiLFwic2hvZVwiLFwic2hvbmVcIixcInNob29rXCIsXCJzaG9vdFwiLFwic2hvcFwiLFwic2hvcmVcIixcInNob3J0XCIsXCJzaG90XCIsXCJzaG91bGRcIixcInNob3dcIixcInNpY2tcIixcInNpZGVcIixcInNpZ2h0XCIsXCJzaWduXCIsXCJzaWduYWxcIixcInNpbGVudFwiLFwic2lsbHlcIixcInNpbHZlclwiLFwic2luY2VcIixcInNpbmdcIixcInNpc3RlclwiLFwic2l0XCIsXCJzaXhcIixcInNpemVcIixcInNraXBcIixcInNreVwiLFwic2xlZFwiLFwic2xlZXBcIixcInNsaWRcIixcInNsaWRlXCIsXCJzbG93XCIsXCJzbWFsbFwiLFwic21hcnRcIixcInNtZWxsXCIsXCJzbWlsZVwiLFwic21va2VcIixcInNuYXBcIixcInNuaWZmXCIsXCJzbm93XCIsXCJzb1wiLFwic29mdFwiLFwic29sZFwiLFwic29tZVwiLFwic29tZXRoaW5nXCIsXCJzb21ldGltZXNcIixcInNvblwiLFwic29uZ1wiLFwic29vblwiLFwic29ycnlcIixcInNvdW5kXCIsXCJzcGVha1wiLFwic3BlY2lhbFwiLFwic3BlbmRcIixcInNwaWxsXCIsXCJzcGxhc2hcIixcInNwb2tlXCIsXCJzcG90XCIsXCJzcHJlYWRcIixcInNwcmluZ1wiLFwic3F1aXJyZWxcIixcInN0YW5kXCIsXCJzdGFyXCIsXCJzdGFydFwiLFwic3RhdGlvblwiLFwic3RheVwiLFwic3RlcFwiLFwic3RpY2tcIixcInN0aWxsXCIsXCJzdG9uZVwiLFwic3Rvb2RcIixcInN0b3BcIixcInN0b3JlXCIsXCJzdG9yeVwiLFwic3RyYWlnaHRcIixcInN0cmFuZ2VcIixcInN0cmVldFwiLFwic3RyZXRjaFwiLFwic3RyaWtlXCIsXCJzdHJvbmdcIixcInN1Y2hcIixcInN1ZGRlblwiLFwic3VnYXJcIixcInN1aXRcIixcInN1bW1lclwiLFwic3VuXCIsXCJzdXBwZXJcIixcInN1cHBvc2VcIixcInN1cmVcIixcInN1cnByaXNlXCIsXCJzd2FsbG93XCIsXCJzd2VldFwiLFwic3dpbVwiLFwic3dpbmdcIixcInRcIixcInRhYmxlXCIsXCJ0YWlsXCIsXCJ0YWtlXCIsXCJ0YWxrXCIsXCJ0YWxsXCIsXCJ0YXBcIixcInRhc3RlXCIsXCJ0ZWFjaFwiLFwidGVhY2hlclwiLFwidGVhbVwiLFwidGVhclwiLFwidGVldGhcIixcInRlbGVwaG9uZVwiLFwidGVsbFwiLFwidGVuXCIsXCJ0ZW50XCIsXCJ0aGFuXCIsXCJ0aGFua1wiLFwidGhhdFwiLFwidGhhdCdzXCIsXCJ0aGVcIixcInRoZWlyXCIsXCJ0aGVtXCIsXCJ0aGVuXCIsXCJ0aGVyZVwiLFwidGhlc2VcIixcInRoZXlcIixcInRoaWNrXCIsXCJ0aGluXCIsXCJ0aGluZ1wiLFwidGhpbmtcIixcInRoaXJkXCIsXCJ0aGlzXCIsXCJ0aG9zZVwiLFwidGhvdWdoXCIsXCJ0aG91Z2h0XCIsXCJ0aHJlZVwiLFwidGhyZXdcIixcInRocm91Z2hcIixcInRocm93XCIsXCJ0aWVcIixcInRpZ2VyXCIsXCJ0aWdodFwiLFwidGltZVwiLFwidGlueVwiLFwidGlwXCIsXCJ0aXJlXCIsXCJ0b1wiLFwidG9kYXlcIixcInRvZVwiLFwidG9nZXRoZXJcIixcInRvbGRcIixcInRvbW9ycm93XCIsXCJ0b29cIixcInRvb2tcIixcInRvb3RoXCIsXCJ0b3BcIixcInRvdWNoXCIsXCJ0b3dhcmRcIixcInRvd2VyXCIsXCJ0b3duXCIsXCJ0b3lcIixcInRyYWNrXCIsXCJ0cmFmZmljXCIsXCJ0cmFpblwiLFwidHJhcFwiLFwidHJlZVwiLFwidHJpY2tcIixcInRyaXBcIixcInRyb3RcIixcInRydWNrXCIsXCJ0cnVlXCIsXCJ0cnVua1wiLFwidHJ5XCIsXCJ0dXJrZXlcIixcInR1cm5cIixcInR1cnRsZVwiLFwidHdlbHZlXCIsXCJ0d2luXCIsXCJ0d29cIixcInVcIixcInVnbHlcIixcInVuY2xlXCIsXCJ1bmRlclwiLFwidW5oYXBweVwiLFwidW50aWxcIixcInVwXCIsXCJ1cG9uXCIsXCJ1cHN0YWlyc1wiLFwidXNcIixcInVzZVwiLFwidXN1YWxcIixcInZcIixcInZhbGxleVwiLFwidmVnZXRhYmxlXCIsXCJ2ZXJ5XCIsXCJ2aWxsYWdlXCIsXCJ2aXNpdFwiLFwidm9pY2VcIixcIndcIixcIndhZ1wiLFwid2Fnb25cIixcIndhaXRcIixcIndha2VcIixcIndhbGtcIixcIndhbnRcIixcIndhclwiLFwid2FybVwiLFwid2FzXCIsXCJ3YXNoXCIsXCJ3YXN0ZVwiLFwid2F0Y2hcIixcIndhdGVyXCIsXCJ3YXZlXCIsXCJ3YXlcIixcIndlXCIsXCJ3ZWFyXCIsXCJ3ZWF0aGVyXCIsXCJ3ZWVrXCIsXCJ3ZWxsXCIsXCJ3ZW50XCIsXCJ3ZXJlXCIsXCJ3ZXRcIixcIndoYXRcIixcIndoZWVsXCIsXCJ3aGVuXCIsXCJ3aGVyZVwiLFwid2hpY2hcIixcIndoaWxlXCIsXCJ3aGlzcGVyXCIsXCJ3aGlzdGxlXCIsXCJ3aGl0ZVwiLFwid2hvXCIsXCJ3aG9sZVwiLFwid2hvc2VcIixcIndoeVwiLFwid2lkZVwiLFwid2lmZVwiLFwid2lsbFwiLFwid2luXCIsXCJ3aW5kXCIsXCJ3aW5kb3dcIixcIndpbmdcIixcIndpbmtcIixcIndpbnRlclwiLFwid2lyZVwiLFwid2lzZVwiLFwid2lzaFwiLFwid2l0aFwiLFwid2l0aG91dFwiLFwid29rZVwiLFwid29sZlwiLFwid29tYW5cIixcIndvbWVuXCIsXCJ3b24ndFwiLFwid29uZGVyXCIsXCJ3b29kXCIsXCJ3b3JkXCIsXCJ3b3JlXCIsXCJ3b3JrXCIsXCJ3b3JsZFwiLFwid29ybVwiLFwid29ycnlcIixcIndvcnRoXCIsXCJ3b3VsZFwiLFwid3JvbmdcIixcInhcIixcInlcIixcInlhcmRcIixcInllYXJcIixcInllbGxcIixcInllbGxvd1wiLFwieWVzXCIsXCJ5ZXRcIixcInlvdVwiLFwieW91bmdcIixcInlvdXJcIixcInpcIixcInpvb1wiXTtmdW5jdGlvbiBmZShuKXtyZXR1cm4gbiYmbi5zZW50ZW5jZSYmbi53b3JkPy42NTkrLjEyMSpuLndvcmQvbi5zZW50ZW5jZSsuMDgyKihuLnVuZmFtaWxpYXJXb3JkfHwwKS9uLndvcmQqMTAwOk51bWJlci5OYU59dmFyIEdlPWEoNDUwKSx3ZT1hKDUpLHZlPXthYmFsb25lOjQsYWJhcmU6MyxhYmJydXp6ZXNlOjQsYWJlZDoyLGFib3JpZ2luZTo1LGFicnV6emVzZTo0LGFjcmVhZ2U6MyxhZGFtZTozLGFkaWV1OjIsYWRvYmU6MyxhbmVtb25lOjQsYW55b25lOjMsYXBhY2hlOjMsYXBocm9kaXRlOjQsYXBvc3Ryb3BoZTo0LGFyaWFkbmU6NCxjYWZlOjIsY2FsbGlvcGU6NCxjYXRhc3Ryb3BoZTo0LGNoaWxlOjIsY2hsb2U6MixjaXJjZToyLGNveW90ZTozLGRhcGhuZToyLGVwaXRvbWU6NCxldXJ5ZGljZTo0LGV1dGVycGU6MyxldmVyeToyLGV2ZXJ5d2hlcmU6Myxmb3JldmVyOjMsZ2V0aHNlbWFuZTo0LGd1YWNhbW9sZTo0LGhlcm1pb25lOjQsaHlwZXJib2xlOjQsamVzc2U6MixqdWtlYm94OjIsa2FyYXRlOjMsbWFjaGV0ZTozLG1heWJlOjIsbmFpdmU6MixuZXdseXdlZDozLHBlbmVsb3BlOjQscGVvcGxlOjIscGVyc2VwaG9uZTo0LHBob2ViZToyLHB1bHNlOjEscXVldWU6MSxyZWNpcGU6MyxyaXZlcmJlZDozLHNlc2FtZTozLHNob3JlbGluZToyLHNpbWlsZTozLHNudWZmbGV1cGFndXM6NSxzb21ldGltZXM6MixzeW5jb3BlOjMsdGFtYWxlOjMsd2F0ZXJiZWQ6Myx3ZWRuZXNkYXk6Mix5b3NlbWl0ZTo0LHpvZToyfSxrZT17fS5oYXNPd25Qcm9wZXJ0eSxSZT1uZXcgUmVnRXhwKFtcImF3ZSgkfGR8c28pXCIsXCJjaWEoPzpsfCQpXCIsXCJ0aWFcIixcImNpdXNcIixcImNpb3VzXCIsXCJbXmFlaW91XWdpdVwiLFwiW2FlaW91eV1bXmFlaW91eV1pb25cIixcImlvdVwiLFwic2lhJFwiLFwiZW91cyRcIixcIltvYV1ndWUkXCIsXCIuW15hZWl1b3ljZ2x0ZGJdezIsfWVkJFwiLFwiLmVseSRcIixcIl5qdWFcIixcInVhaVwiLFwiZWF1XCIsXCJeYnVzaSRcIixcIig/OlthZWlvdXldKD86XCIrW1wiW2JjZmdrbG1ucHJzdnd4eXpdXCIsXCJjaFwiLFwiZGdcIixcImdbaG5dXCIsXCJsY2hcIixcImxbbHZdXCIsXCJtbVwiLFwibmNoXCIsXCJuW2Nnbl1cIixcInJbYmNuc3ZdXCIsXCJzcXVcIixcInNbY2hrbHNdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillZCQpXCIsXCIoPzpbYWVpb3V5XSg/OlwiK1tcIltiZGZrbG1ucHJzdHZ5XVwiLFwiY2hcIixcImdbaG5dXCIsXCJsY2hcIixcImxbbHZdXCIsXCJtbVwiLFwibmNoXCIsXCJublwiLFwicltuc3ZdXCIsXCJzcXVcIixcInNbY2tsc3RdXCIsXCJ0aFwiXS5qb2luKFwifFwiKStcIillcyQpXCJdLmpvaW4oXCJ8XCIpLFwiZ1wiKSxZZT1uZXcgUmVnRXhwKFwiW2FlaW91eV0oPzpcIitbXCJbYmNkZmdrbG1ucHJzdHZ5el1cIixcImNoXCIsXCJkZ1wiLFwiZ1tobl1cIixcImxbbHZdXCIsXCJtbVwiLFwibltjZ25zXVwiLFwicltjbnN2XVwiLFwic3F1XCIsXCJzW2NrbHN0XVwiLFwidGhcIl0uam9pbihcInxcIikrXCIpZSRcIixcImdcIiksQWU9bmV3IFJlZ0V4cChcIig/OlwiK1tcIihbXmFlaW91eV0pXFxcXDFsXCIsXCJbXmFlaW91eV1pZSg/OnJ8cz90KVwiLFwiW2FlaW91eW1dYmxcIixcImVvXCIsXCJpc21cIixcImFzbVwiLFwidGhtXCIsXCJkbnRcIixcInNudFwiLFwidWl0eVwiLFwiZGVhXCIsXCJnZWFuXCIsXCJvYVwiLFwidWFcIixcInJlYWN0P1wiLFwib3JiZWRcIixcInNocmVkXCIsXCJlaW5ncz9cIixcIlthZWlvdXldc2g/ZVtyc11cIl0uam9pbihcInxcIikrXCIpJFwiLFwiZ1wiKSxQZT1uZXcgUmVnRXhwKFtcImNyZWF0KD8hdSlcIixcIlteZ3FddWFbXmF1aWVvXVwiLFwiW2FlaW91XXszfVwiLFwiXig/OmlhfG1jfGNvYVtkZ2x4XS4pXCIsXCJecmUoYXBwfGVzfGltfHVzKVwiLFwiKHRofGQpZWlzdFwiXS5qb2luKFwifFwiKSxcImdcIiksQ2U9bmV3IFJlZ0V4cChbXCJbXmFlaW91XXlbYWVdXCIsXCJbXmxdbGllblwiLFwicmlldFwiLFwiZGllblwiLFwiaXVcIixcImlvXCIsXCJpaVwiLFwidWVuXCIsXCJbYWVpbG90dV1yZWFsXCIsXCJyZWFsW2FlaWxvdHVdXCIsXCJpZWxsXCIsXCJlb1teYWVpb3VdXCIsXCJbYWVpb3VdeVthZWlvdV1cIl0uam9pbihcInxcIiksXCJnXCIpLFRlPS9bXnNdaWEvLHhlPW5ldyBSZWdFeHAoW1wiXig/OlwiK1tcInVuXCIsXCJmb3JlXCIsXCJ3YXJlXCIsXCJub25lP1wiLFwib3V0XCIsXCJwb3N0XCIsXCJzdWJcIixcInByZVwiLFwicHJvXCIsXCJkaXNcIixcInNpZGVcIixcInNvbWVcIl0uam9pbihcInxcIikrXCIpXCIsXCIoPzpcIitbXCJseVwiLFwibGVzc1wiLFwic29tZVwiLFwiZnVsXCIsXCJlcnM/XCIsXCJuZXNzXCIsXCJjaWFucz9cIixcIm1lbnRzP1wiLFwiZXR0ZXM/XCIsXCJ2aWxsZXM/XCIsXCJzaGlwcz9cIixcInNpZGVzP1wiLFwicG9ydHM/XCIsXCJzaGlyZXM/XCIsXCJbZ25zdF1pb24oPzplZHxzKT9cIl0uam9pbihcInxcIikrXCIpJFwiXS5qb2luKFwifFwiKSxcImdcIiksemU9bmV3IFJlZ0V4cChbXCJeKD86XCIrW1wiYWJvdmVcIixcImFudGlcIixcImFudGVcIixcImNvdW50ZXJcIixcImh5cGVyXCIsXCJhZm9yZVwiLFwiYWdyaVwiLFwiaW5mcmFcIixcImludHJhXCIsXCJpbnRlclwiLFwib3ZlclwiLFwic2VtaVwiLFwidWx0cmFcIixcInVuZGVyXCIsXCJleHRyYVwiLFwiZGlhXCIsXCJtaWNyb1wiLFwibWVnYVwiLFwia2lsb1wiLFwicGljb1wiLFwibmFub1wiLFwibWFjcm9cIixcInNvbWVyXCJdLmpvaW4oXCJ8XCIpK1wiKVwiLFwiKD86ZnVsbHl8YmVycnl8d29tYW58d29tZW58ZWRseXx1bmlvbnwoKD86W2JjZGZnaGprbG1ucHFyc3R2d3h6XSl8W2FlaW91XSl5ZT9pbmcpJFwiXS5qb2luKFwifFwiKSxcImdcIiksRWU9LyhjcmVhdGlvbnM/fG9sb2d5fG9sb2dpc3R8b25vbXl8b25vbWlzdCkkL2c7ZnVuY3Rpb24gQmUobil7dmFyIGUsYSxpLHIsdCxvPTA7aWYoMD09PW4ubGVuZ3RoKXJldHVybiBvO2lmKG4ubGVuZ3RoPDMpcmV0dXJuIDE7aWYoa2UuY2FsbCh2ZSxuKSlyZXR1cm4gdmVbbl07aWYoYT1HZShuLDEpLGtlLmNhbGwodmUsYSkpcmV0dXJuIHZlW2FdO2ZvcihyPXMoMSksdD1zKC0xKSxpPShuPW4ucmVwbGFjZShFZSxNKDMpKS5yZXBsYWNlKHplLE0oMikpLnJlcGxhY2UoeGUsTSgxKSkpLnNwbGl0KC9bXmFlaW91eV0rLyksZT0tMTsrK2U8aS5sZW5ndGg7KVwiXCIhPT1pW2VdJiZvKys7cmV0dXJuIG4ucmVwbGFjZShSZSx0KS5yZXBsYWNlKFllLHQpLG4ucmVwbGFjZShBZSxyKS5yZXBsYWNlKFBlLHIpLnJlcGxhY2UoQ2UscikucmVwbGFjZShUZSxyKSxvfHwxO2Z1bmN0aW9uIE0obil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG8rPW4sXCJcIn19ZnVuY3Rpb24gcyhuKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG8rPW4sZX19fWNvbnN0IE5lPXt9Lmhhc093blByb3BlcnR5LFplPU1hdGguZmxvb3IsRmU9TWF0aC5yb3VuZCxJZT1NYXRoLmNlaWwsVWU9TWF0aC5zcXJ0O2Z1bmN0aW9uIGplKG49e30pe2NvbnN0IGU9bi5hZ2V8fDE2LGE9bi50aHJlc2hvbGR8fC41NzE0Mjg1NzE0Mjg1NzE0LGk9bnVsbD09PW4ubWluV29yZHN8fHZvaWQgMD09PW4ubWluV29yZHM/NTpuLm1pbldvcmRzO3JldHVybihuLHIpPT57X24obixcIlNlbnRlbmNlTm9kZVwiLChuPT57Y29uc3QgdD17fSxvPXt9O2xldCBNPTAscz0wLGw9MCxjPTAsUz0wLHU9MCxkPTA7aWYoX24obixcIldvcmROb2RlXCIsKG49Pntjb25zdCBlPXFuKG4pLGE9ZS50b0xvd2VyQ2FzZSgpLGk9ZnVuY3Rpb24obil7Zm9yKHZhciBlPXdlKFN0cmluZyhuKSkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bJ+KAmV0vZyxcIlwiKS5zcGxpdCgvXFxiL2cpLGE9LTEsaT0wOysrYTxlLmxlbmd0aDspaSs9QmUoZVthXS5yZXBsYWNlKC9bXmEtel0vZyxcIlwiKSk7cmV0dXJuIGl9KGUpO3UrKyxjKz1pLGQrPWUubGVuZ3RoLGk+PTMmJihsKyssZS5jaGFyQ29kZUF0KDApPT09YS5jaGFyQ29kZUF0KDApJiZNKyspLERlLmluY2x1ZGVzKGEpJiYhTmUuY2FsbCh0LGEpJiYodFthXT0hMCxzKyspLG1lLmluY2x1ZGVzKGEpJiYhTmUuY2FsbChvLGEpJiYob1thXT0hMCxTKyspfSkpLHU+PWkpe2NvbnN0IGk9e2NvbXBsZXhQb2x5c2lsbGFiaWNXb3JkOk0scG9seXNpbGxhYmljV29yZDpsLHVuZmFtaWxpYXJXb3JkOnUtcyxkaWZmaWN1bHRXb3JkOnUtUyxzeWxsYWJsZTpjLHNlbnRlbmNlOjEsd29yZDp1LGNoYXJhY3RlcjpkLGxldHRlcjpkfSx0PVtMZSgocD1oZShpKSxoPU1hdGguZmxvb3IocCksaDw1P2g9NDpoPjkmJihoPTEwKSxwZVtoXS5jb25jYXQoKSlbMV0pLExlKHVlKGkpKSxMZShkZShpKSksKG09Z2UoaSksMjAtWmUobS8xMCkpLHFlKGJlKGkpKSxMZSh5ZShpKSksTGUoZmUoaSkpXTtsZXQgbz0tMSxnPTA7Zm9yKDsrK288dC5sZW5ndGg7KXRbb10+ZSYmZysrO2NvbnN0IHk9Zy90Lmxlbmd0aDtpZih5Pj1hKXtjb25zdCBlPWcrXCIvXCIrdC5sZW5ndGg7T2JqZWN0LmFzc2lnbihyLm1lc3NhZ2UoXCJIYXJkIHRvIHJlYWQgc2VudGVuY2UgKGNvbmZpZGVuY2U6IFwiK2UrXCIpXCIsbixcInJldGV4dC1yZWFkYWJpbGl0eTpyZWFkYWJpbGl0eVwiKSx7YWN0dWFsOnFuKG4pLGV4cGVjdGVkOltdLHVybDpcImh0dHBzOi8vZ2l0aHViLmNvbS9yZXRleHRqcy9yZXRleHQtcmVhZGFiaWxpdHkjcmVhZG1lXCIsY29uZmlkZW5jZTp5LGNvbmZpZGVuY2VMYWJlbDplfSl9fXZhciBtLHAsaDtyZXR1cm4gUW59KSl9fWZ1bmN0aW9uIExlKG4pe3JldHVybiBGZShuKzUpfWZ1bmN0aW9uIHFlKG4pe3JldHVybiBJZShVZShuKSsyLjUpfWNvbnN0IEhlPVduKFwiU2VudGVuY2VOb2RlXCIpLEplPVduKFwiV2hpdGVTcGFjZU5vZGVcIiksT2U9XCJyZXRleHQtc2VudGVuY2Utc3BhY2luZ1wiO2Z1bmN0aW9uIFhlKG49e30pe2xldCBlPW4ucHJlZmVycmVkO2lmKFwibmV3bGluZVwiPT09ZSYmKGU9MCksbnVsbCE9ZSYmXCJzcGFjZVwiIT09ZXx8KGU9MSksXCJkb3VibGUtc3BhY2VcIj09PWUmJihlPTIpLFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBgb3B0aW9ucy5wcmVmZXJyZWRgIHRvIGJlIGAnc3BhY2UnYCwgYCduZXdsaW5lJ2AsIG9yIGEgYG51bWJlcmBcIik7aWYoZTwwfHxlPjIpdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgYG9wdGlvbnMucHJlZmVycmVkYCB0byBiZSBgJ3NwYWNlJ2AsIGAnbmV3bGluZSdgLCBvciBhIGBudW1iZXJgIGJldHdlZW4gKGluY2x1ZGluZykgYDBgIGFuZCBgMmBcIik7cmV0dXJuKG4sYSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57bGV0IGk9LTE7Zm9yKDsrK2k8bi5jaGlsZHJlbi5sZW5ndGg7KXtjb25zdCByPW4uY2hpbGRyZW5baV07aWYoIUhlKG4uY2hpbGRyZW5baS0xXSl8fCFKZShyKXx8IUhlKG4uY2hpbGRyZW5baSsxXSkpY29udGludWU7Y29uc3QgdD1xbihyKTtpZighL14gKyQvLnRlc3QodCkpY29udGludWU7Y29uc3Qgbz10Lmxlbmd0aDtsZXQgTTtpZigwPT09ZSlNPVwiRXhwZWN0ZWQgYSBuZXdsaW5lIGJldHdlZW4gc2VudGVuY2VzLCBub3QgYFwiK28rXCJgIHNwYWNlXCIrKDE9PT1vP1wiXCI6XCJzXCIpO2Vsc2V7aWYobz09PWUpY29udGludWU7TT1cIkV4cGVjdGVkIGBcIitlK1wiYCBzcGFjZVwiKygxPT09ZT9cIlwiOlwic1wiKStcIiBiZXR3ZWVuIHNlbnRlbmNlcywgbm90IGBcIitvK1wiYFwifU9iamVjdC5hc3NpZ24oYS5tZXNzYWdlKE0scixbT2UsMD09PWU/XCJuZXdsaW5lXCI6MT09PWU/XCJzcGFjZVwiOlwiZG91YmxlLXNwYWNlXCJdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOnQsZXhwZWN0ZWQ6WzA9PT1lP1wiXFxuXCI6MT09PWU/XCIgXCI6XCIgIFwiXSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LXNlbnRlbmNlLXNwYWNpbmcjcmVhZG1lXCJ9KX19KSl9fWZ1bmN0aW9uIFZlKG4sZSl7bGV0IGE9KFwic3RyaW5nXCI9PXR5cGVvZiBuP246cW4obikpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgv4oCZL2csXCInXCIpO3JldHVybiBlJiZlLmFsbG93RGFzaGVzfHwoYT1hLnJlcGxhY2UoLy0vZyxcIlwiKSksZSYmZS5hbGxvd0Fwb3N0cm9waGVzfHwoYT1hLnJlcGxhY2UoLycvZyxcIlwiKSksYX1jb25zdCBXZT1bXCItXCIsXCLigJNcIixcIuKAlFwiLFwiOlwiLFwiO1wiXSxLZT17XCIsXCI6W1wiLFwiXSxcIi1cIjpbXCItXCJdLFwi4oCTXCI6W1wi4oCTXCJdLFwi4oCUXCI6W1wi4oCUXCJdLCdcIic6WydcIiddLFwiJ1wiOltcIidcIl0sXCLigJhcIjpbXCLigJlcIl0sXCLigJpcIjpbXCLigJlcIl0sXCLigJlcIjpbXCLigJlcIixcIuKAmlwiXSxcIuKAnFwiOltcIuKAnVwiXSxcIuKAnVwiOltcIuKAnVwiXSxcIuKAnlwiOltcIuKAnVwiLFwi4oCcXCJdLFwiwqtcIjpbXCLCu1wiXSxcIsK7XCI6W1wiwqtcIl0sXCLigLlcIjpbXCLigLpcIl0sXCLigLpcIjpbXCLigLlcIl0sXCIoXCI6W1wiKVwiXSxcIltcIjpbXCJdXCJdLFwie1wiOltcIn1cIl0sXCLin6hcIjpbXCLin6lcIl0sXCLjgIxcIjpbXCLjgI1cIl19LCRlPU9iamVjdC5rZXlzKEtlKTtmdW5jdGlvbiBRZShuLGUpe2lmKCFufHwhbi5jaGlsZHJlbil0aHJvdyBuZXcgRXJyb3IoXCJQYXJlbnQgbXVzdCBiZSBhIG5vZGVcIik7aWYobnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlJiZcInR5cGVcImluIGUmJi0xPT09KGU9bi5jaGlsZHJlbi5pbmRleE9mKGUpKSl0aHJvdyBuZXcgRXJyb3IoXCJOb2RlIG11c3QgYmUgYSBjaGlsZCBvZiBgcGFyZW50YFwiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZXx8TnVtYmVyLmlzTmFOKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJJbmRleCBtdXN0IGJlIGEgbnVtYmVyXCIpO3JldHVybiBCb29sZWFuKCFuYShuLC0xLGUpJiZfZShuLGUsMSxXZSl8fCFuYShuLGUsbi5jaGlsZHJlbi5sZW5ndGgpJiZfZShuLGUsLTEsV2UpfHxmdW5jdGlvbihuLGUpe2NvbnN0IGE9X2UobixlLC0xLCRlKTtpZihhKXJldHVybiBfZShuLGUsMSxLZVtxbihhKV0pfShuLGUpKX1mdW5jdGlvbiBfZShuLGUsYSxpKXtsZXQgcj1lK2E7Zm9yKDtyPi0xJiZyPG4uY2hpbGRyZW4ubGVuZ3RoOyl7Y29uc3QgZT1uLmNoaWxkcmVuW3JdO2lmKFwiV29yZE5vZGVcIj09PWUudHlwZXx8XCJTb3VyY2VOb2RlXCI9PT1lLnR5cGUpcmV0dXJuO2lmKFwiV2hpdGVTcGFjZU5vZGVcIiE9PWUudHlwZSlyZXR1cm4gaS5pbmNsdWRlcyhxbihlKSk/ZTp2b2lkIDA7cis9YX19ZnVuY3Rpb24gbmEobixlLGEpe2Zvcig7KytlPGE7KWlmKFwiV29yZE5vZGVcIj09PW4uY2hpbGRyZW5bZV0udHlwZSlyZXR1cm4hMH1jb25zdCBlYT17fS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBhYShuLGUsYSxpKXtjb25zdCByPXtcIipcIjpbXX07bGV0IHQsbyxNPS0xO2lmKG89XCJib29sZWFuXCI9PXR5cGVvZiBpP2k/e2FsbG93QXBvc3Ryb3BoZXM6ITB9Ont9Oml8fHt9LCFufHwhbi50eXBlKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIG5vZGVcIik7aWYoXCJvYmplY3RcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG9iamVjdCBmb3IgcGhyYXNlc1wiKTtpZihBcnJheS5pc0FycmF5KGUpKWZvcig7KytNPGUubGVuZ3RoOylsKGVbTV0pO2Vsc2UgZm9yKHQgaW4gZSllYS5jYWxsKGUsdCkmJmwodCk7ZnVuY3Rpb24gcyhuLGUsYSl7Y29uc3QgaT1hLmNoaWxkcmVuLHI9ZSx0PW4uc3BsaXQoXCIgXCIpLnNsaWNlKDEpO2xldCBNPS0xO2ZvcihlKys7KytNPHQubGVuZ3RoOyl7Zm9yKDtlPGkubGVuZ3RoJiZcIldoaXRlU3BhY2VOb2RlXCI9PT1pW2VdLnR5cGU7KWUrKztpZighaVtlXXx8XCJXb3JkTm9kZVwiIT09aVtlXS50eXBlfHxcIipcIiE9PXRbTV0mJlZlKHRbTV0sbykhPT1WZShpW2VdLG8pKXJldHVybjtlKyt9cmV0dXJuIGkuc2xpY2UocixlKX1mdW5jdGlvbiBsKG4pe2NvbnN0IGU9VmUobi5zcGxpdChcIiBcIiwxKVswXSxvKTtlYS5jYWxsKHIsZSk/cltlXS5wdXNoKG4pOnJbZV09W25dfV9uKG4sXCJXb3JkTm9kZVwiLCgobixlLGkpPT57Y29uc3QgdD1pO2lmKCF0fHxudWxsPT09ZXx8IW8uYWxsb3dMaXRlcmFscyYmUWUodCxlKSlyZXR1cm47Y29uc3QgTT1WZShuLG8pLGw9cltcIipcIl0uY29uY2F0KGVhLmNhbGwocixNKT9yW01dOltdKTtsZXQgYz0tMTtmb3IoOysrYzxsLmxlbmd0aDspe2NvbnN0IG49cyhsW2NdLGUsdCk7biYmYShuLGUsdCxsW2NdKX19KSl9Y29uc3QgaWE9W1wiYXdva2VuXCIsXCJhd29rZVwiLFwiYmVhdGVuXCIsXCJiZWF0XCIsXCJiZWd1blwiLFwiYmVnYW5cIixcImJlbnRcIixcImJpdHRlblwiLFwiYml0XCIsXCJibGVkXCIsXCJibG93blwiLFwiYmxld1wiLFwiYnJva2VuXCIsXCJicm9rZVwiLFwiYnJvdWdodFwiLFwiYnVpbHRcIixcImJvdWdodFwiLFwiY2F1Z2h0XCIsXCJjaG9zZW5cIixcImNob3NlXCIsXCJkZWFsdFwiLFwiZG9uZVwiLFwiZGlkXCIsXCJkcmF3blwiLFwiZHJld1wiLFwiZHJpdmVuXCIsXCJkcm92ZVwiLFwiZWF0ZW5cIixcImF0ZVwiLFwiZmVkXCIsXCJmZWx0XCIsXCJmb3VnaHRcIixcImZvdW5kXCIsXCJmb3JiaWRkZW5cIixcImZvcmJhZGVcIixcImZvcmdvdHRlblwiLFwiZm9yZ290XCIsXCJmb3JnaXZlblwiLFwiZm9yZ2F2ZVwiLFwiZnJvemVuXCIsXCJmcm96ZVwiLFwiZ290dGVuXCIsXCJnb3RcIixcImdpdmVuXCIsXCJnYXZlXCIsXCJncm91bmRcIixcImdyaW5kZWRcIixcImh1bmdcIixcImhlYXJkXCIsXCJoaWRkZW5cIixcImhpZFwiLFwiaGl0XCIsXCJoZWxkXCIsXCJodXJ0XCIsXCJrZXB0XCIsXCJrbm93blwiLFwia25ld1wiLFwibGFpZFwiLFwibGVkXCIsXCJsZXRcIixcImxvc3RcIixcIm1hZGVcIixcIm1lYW50XCIsXCJtZXRcIixcInBhaWRcIixcInByb3ZlblwiLFwicHJvdmVkXCIsXCJwdXRcIixcInJlYWRcIixcInJpZGRlblwiLFwicm9kZVwiLFwicnVuZ1wiLFwicmFuZ1wiLFwicnVuXCIsXCJyYW5cIixcInNhaWRcIixcInNlZW5cIixcInNhd1wiLFwic29sZFwiLFwic2VudFwiLFwic2hha2VuXCIsXCJzaG9va1wiLFwic2hhdmVkXCIsXCJzaG90XCIsXCJzaG93blwiLFwic2h1dFwiLFwic3VuZ1wiLFwic3Vua1wiLFwic2xhaW5cIixcInNsZXdcIixcInNsaWRcIixcInNwb2tlblwiLFwic3Bva2VcIixcInNwZW50XCIsXCJzcHVuXCIsXCJzcGxpdFwiLFwic3ByZWFkXCIsXCJzdG9sZW5cIixcInN0b2xlXCIsXCJzdHJ1Y2tcIixcInN3ZXB0XCIsXCJzd3VuZ1wiLFwidGFrZW5cIixcInRvb2tcIixcInRhdWdodFwiLFwidG9yblwiLFwidG9yZVwiLFwidG9sZFwiLFwidGhvdWdodFwiLFwidGhyb3duXCIsXCJ0aHJld1wiLFwidW5kZXJnb25lXCIsXCJ1bmRlcndlbnRcIixcInVuZGVyc3Rvb2RcIixcInVwc2V0XCIsXCJ3b2tlblwiLFwid29rZVwiLFwid29yblwiLFwid29yZVwiLFwid29uXCIsXCJ3aXRoZHJhd25cIixcIndpdGhkcmV3XCIsXCJ3cml0dGVuXCIsXCJ3cm90ZVwiLFwiYmVlblwiLFwiYm9yblwiLFwiYmVjb21lXCIsXCJiZXNldFwiLFwiYmV0XCIsXCJiaWRcIixcImJpZGRlblwiLFwiYm91bmRcIixcImJyZWRcIixcImJyb2FkY2FzdFwiLFwiYnVybnRcIixcImJ1cnN0XCIsXCJjYXN0XCIsXCJjbHVuZ1wiLFwiY29tZVwiLFwiY29zdFwiLFwiY3JlcHRcIixcImN1dFwiLFwiZHVnXCIsXCJkaXZlZFwiLFwiZHJlYW10XCIsXCJkcnVua1wiLFwiZmFsbGVuXCIsXCJmaXRcIixcImZsZWRcIixcImZsdW5nXCIsXCJmbG93blwiLFwiZm9yZWdvbmVcIixcImZvcnNha2VuXCIsXCJnb25lXCIsXCJncm93blwiLFwia25lbHRcIixcImtuaXRcIixcImxlYXB0XCIsXCJsZWFybnRcIixcImxlZnRcIixcImxlbnRcIixcImxhaW5cIixcImxpZ2h0ZWRcIixcIm1pc3NwZWx0XCIsXCJtaXN0YWtlblwiLFwibW93blwiLFwib3ZlcmNvbWVcIixcIm92ZXJkb25lXCIsXCJvdmVydGFrZW5cIixcIm92ZXJ0aHJvd25cIixcInBsZWRcIixcInF1aXRcIixcInJpZFwiLFwicmlzZW5cIixcInNhd25cIixcInNvdWdodFwiLFwic2V0XCIsXCJzZXduXCIsXCJzaGF2ZW5cIixcInNob3JuXCIsXCJzaGVkXCIsXCJzaG9uZVwiLFwic2hvZFwiLFwic2hydW5rXCIsXCJzYXRcIixcInNsZXB0XCIsXCJzbHVuZ1wiLFwic2xpdFwiLFwic21pdHRlblwiLFwic293blwiLFwic3BlZFwiLFwic3BpbHRcIixcInNwaXRcIixcInNwcnVuZ1wiLFwic3Rvb2RcIixcInN0dWNrXCIsXCJzdHVuZ1wiLFwic3R1bmtcIixcInN0cmlkZGVuXCIsXCJzdHJ1bmdcIixcInN0cml2ZW5cIixcInN3b3JuXCIsXCJzd29sbGVuXCIsXCJzd3VtXCIsXCJ0aHJpdmVkXCIsXCJ0aHJ1c3RcIixcInRyb2RkZW5cIixcInVwaGVsZFwiLFwid292ZW5cIixcIndlZFwiLFwid2VwdFwiLFwid291bmRcIixcIndpdGhoZWxkXCIsXCJ3aXRoc3Rvb2RcIixcIndydW5nXCJdLHJhPVwicmV0ZXh0LXBhc3NpdmVcIix0YT1uZXcgU2V0KFtcImFtXCIsXCJhcmVcIixcIndlcmVcIixcImJlaW5nXCIsXCJpc1wiLFwiYmVlblwiLFwid2FzXCIsXCJiZVwiXSk7ZnVuY3Rpb24gb2Eobj17fSl7Y29uc3QgZT1uLmlnbm9yZXx8W10sYT1lLmxlbmd0aD4wP2lhLmZpbHRlcigobj0+IWUuaW5jbHVkZXMobikpKTppYTtyZXR1cm4obixlKT0+e2FhKG4sYSwoKG4sYSxpLHIpPT57Y29uc3QgdD1mdW5jdGlvbihuLGUsYSl7dmFyIGk9V24oXCJXb3JkTm9kZVwiKTtpZighbnx8IW4udHlwZXx8IW4uY2hpbGRyZW4pdGhyb3cgbmV3IEVycm9yKFwiRXhwZWN0ZWQgcGFyZW50IG5vZGVcIik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpe2lmKGU8MHx8ZT09PU51bWJlci5QT1NJVElWRV9JTkZJTklUWSl0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBwb3NpdGl2ZSBmaW5pdGUgbnVtYmVyIGFzIGluZGV4XCIpfWVsc2UgaWYoKGU9bi5jaGlsZHJlbi5pbmRleE9mKGUpKTwwKXRocm93IG5ldyBFcnJvcihcIkV4cGVjdGVkIGNoaWxkIG5vZGUgb3IgaW5kZXhcIik7Zm9yKGU+bi5jaGlsZHJlbi5sZW5ndGgmJihlPW4uY2hpbGRyZW4ubGVuZ3RoKTtlLS07KWlmKGkobi5jaGlsZHJlbltlXSxlLG4pKXJldHVybiBuLmNoaWxkcmVuW2VdO3JldHVybiBudWxsfShpLGEpO3QmJnRhLmhhcyhxbih0KS50b0xvd2VyQ2FzZSgpKSYmT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoXCJEb27igJl0IHVzZSB0aGUgcGFzc2l2ZSB2b2ljZVwiLHtzdGFydDp0ZShuWzBdKSxlbmQ6b2UobltuLmxlbmd0aC0xXSl9LFtyYSxyLnJlcGxhY2UoL1xccysvZyxcIi1cIikudG9Mb3dlckNhc2UoKV0uam9pbihcIjpcIikpLHthY3R1YWw6cW4obiksZXhwZWN0ZWQ6W10sdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1wYXNzaXZlI3JlYWRtZVwifSl9KSl9fWNvbnN0IE1hPXthaW50OlwiYWluJ3RcIixhcmVudDpcImFyZW4ndFwiLGNvdWxkbnQ6XCJjb3VsZG4ndFwiLGRpZG50OlwiZGlkbid0XCIsZG9lc250OlwiZG9lc24ndFwiLGRvbnQ6XCJkb24ndFwiLGhhZG50OlwiaGFkbid0XCIsaGFzbnQ6XCJoYXNuJ3RcIixoYXZlbnQ6XCJoYXZlbid0XCIsaGVkOlwiaGUnZFwiLGhlczpcImhlJ3NcIixob3dkOlwiaG93J2RcIixob3dzOlwiaG93J3NcIixob3dsbDpcImhvdydsbFwiLElkOlwiSSdkXCIsSW06XCJJJ21cIixJdmU6XCJJJ3ZlXCIsaXNudDpcImlzbid0XCIsbWlnaHRudDpcIm1pZ2h0bid0XCIsbXVzdHZlOlwibXVzdCd2ZVwiLG11c3RudDpcIm11c3RuJ3RcIixuZWVkbnQ6XCJuZWVkbid0XCIsb2Nsb2NrOlwibydjbG9ja1wiLHNoYW50Olwic2hhbid0XCIsc2hlczpcInNoZSdzXCIsc2hvdWxkdmU6XCJzaG91bGQndmVcIixzaG91bGRudDpcInNob3VsZG4ndFwiLHRoYXRkOlwidGhhdCdkXCIsdGhhdHM6XCJ0aGF0J3NcIix0aGVyZWQ6XCJ0aGVyZSdkXCIsdGhlcmVzOlwidGhlcmUnc1wiLHRoZXJlcmU6XCJ0aGVyZSdyZVwiLHRoZXlkOlwidGhleSdkXCIsdGhleWxsOlwidGhleSdsbFwiLHRoZXlyZTpcInRoZXkncmVcIix0aGV5dmU6XCJ0aGV5J3ZlXCIsdGlzOlwiJ3Rpc1wiLHR3YXM6XCIndHdhc1wiLHR3ZXJlOlwiJ3R3ZXJlXCIsd2FzbnQ6XCJ3YXNuJ3RcIix3ZXZlOlwid2UndmVcIix3ZXJlbnQ6XCJ3ZXJlbid0XCIsd2hhdGxsOlwid2hhdCdsbFwiLHdoYXRyZTpcIndoYXQncmVcIix3aGF0czpcIndoYXQnc1wiLHdoYXR2ZTpcIndoYXQndmVcIix3aGVuczpcIndoZW4nc1wiLHdoZXJlczpcIndoZXJlJ3NcIix3aGVyZXZlOlwid2hlcmUndmVcIix3aG9kOlwid2hvJ2RcIix3aG9sbDpcIndobydsbFwiLHdob3M6XCJ3aG8nc1wiLHdob3ZlOlwid2hvJ3ZlXCIsd2h5czpcIndoeSdzXCIsd291bGR2ZTpcIndvdWxkJ3ZlXCIsd291bGRudDpcIndvdWxkbid0XCIseWFsbDpcInknYWxsXCIseW91ZDpcInlvdSdkXCIseW91bGw6XCJ5b3UnbGxcIix5b3VyZTpcInlvdSdyZVwiLHlvdXZlOlwieW91J3ZlXCJ9LHNhPVwicmV0ZXh0LWNvbnRyYWN0aW9uc1wiLGxhPXt9Lmhhc093blByb3BlcnR5LGNhPWZ1bmN0aW9uKCl7Y29uc3Qgbj17fTtsZXQgZTtmb3IoZSBpbiBNYSlpZihsYS5jYWxsKE1hLGUpKXtjb25zdCBhPU1hW2VdO25bZV09YSxlPT09ZS50b0xvd2VyQ2FzZSgpJiYobltlLnRvVXBwZXJDYXNlKCldPWEudG9VcHBlckNhc2UoKSxuW2UuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKV09YS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSthLnNsaWNlKDEpKX1yZXR1cm4gbn0oKTtmdW5jdGlvbiBTYShuPXt9KXtjb25zdCBlPW4uYWxsb3dMaXRlcmFscyxhPW4uc3RyYWlnaHQ7cmV0dXJuKG4saSk9PntfbihuLFwiV29yZE5vZGVcIiwoKG4scix0KT0+e2NvbnN0IG89dCxNPXFuKG4pLHM9TS5yZXBsYWNlKC9bJ+KAmV0vZyxcIlwiKTtpZihsYS5jYWxsKGNhLHMpKXtsZXQgdD1jYVtzXTtpZihhfHwodD10LnJlcGxhY2UoLycvZyxcIuKAmVwiKSksTT09PXR8fG8mJm51bGwhPT1yJiYhZSYmUWUobyxyKSlyZXR1cm47T2JqZWN0LmFzc2lnbihpLm1lc3NhZ2Uocz09PU0/XCJFeHBlY3RlZCBhbiBhcG9zdHJvcGhlIGluIGBcIitNK1wiYCwgbGlrZSB0aGlzOiBgXCIrdCtcImBcIjpcIkV4cGVjdGVkIHRoZSBhcG9zdHJvcGhlIGluIGBcIitNK1wiYCB0byBiZSBsaWtlIHRoaXM6IGBcIit0K1wiYFwiLG4sW3NhLChzPT09TT9cIm1pc3NpbmctXCI6XCJcIikrKGE/XCJzdHJhaWdodC1hcG9zdHJvcGhlXCI6XCJzbWFydC1hcG9zdHJvcGhlXCIpXS5qb2luKFwiOlwiKSkse2FjdHVhbDpNLGV4cGVjdGVkOlt0XSx1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWNvbnRyYWN0aW9ucyNyZWFkbWVcIn0pfX0pKX19Y29uc3QgdWE9ZnVuY3Rpb24obixlLGEpe2NvbnN0IGk9ZXx8J1wiJyxyPWF8fGksdD1bXTtsZXQgbz0tMTtpZihBcnJheS5pc0FycmF5KG4pKXtmb3IoOysrbzxuLmxlbmd0aDspdFtvXT1pK25bb10rcjtyZXR1cm4gdH1pZihcInN0cmluZ1wiPT10eXBlb2YgbilyZXR1cm4gaStuK3I7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzXCIpfSxkYT17fS5oYXNPd25Qcm9wZXJ0eSxtYT1XbihcIldvcmROb2RlXCIpLHBhPVduKFwiV2hpdGVTcGFjZU5vZGVcIiksaGE9V24oXCJQdW5jdHVhdGlvbk5vZGVcIiksZ2E9ZnVuY3Rpb24obixlKXtjb25zdCBhPVwicmV0ZXh0LWVxdWFsaXR5XCIsaT17b3I6ZnVuY3Rpb24obixlLGEpe2xldCBpPS0xO2Zvcig7KytpPG4ubGVuZ3RoOyl7Y29uc3Qgcj1uW2ldLHQ9ci5wYXJlbnQuY2hpbGRyZW4sbz1uW2krMV07aWYobyYmby5wYXJlbnQ9PT1yLnBhcmVudCYmby50eXBlIT09ci50eXBlKXtsZXQgbj1yLmVuZDtmb3IoOysrbjxvLnN0YXJ0Oyl7Y29uc3QgZT10W25dO2lmKCEocGEoZSl8fG1hKGUpJiYvKGFuZHxvcikvLnRlc3QoVmUoZSkpfHxoYShlKSYmXCIvXCI9PT1WZShlKSkpYnJlYWt9aWYobj09PW8uc3RhcnQpe2krKztjb250aW51ZX19cyhhLHIsZSl9fSxiYXNpYzpmdW5jdGlvbihuLGUsYSl7bGV0IGk9LTE7Zm9yKDsrK2k8bi5sZW5ndGg7KXMoYSxuW2ldLGUpfX0scj17fSx0PVtdLG89W10sTT1bXTtyZXR1cm4gZnVuY3Rpb24oKXtsZXQgZT0tMTtmb3IoOysrZTxuLmxlbmd0aDspe2NvbnN0IGE9bltlXTtsZXQgaTtmb3IoaSBpbiByW2EuaWRdPWEsYS5pbmNvbnNpZGVyYXRlKWRhLmNhbGwoYS5pbmNvbnNpZGVyYXRlLGkpJiYoTS5wdXNoKGkpLHQucHVzaChhKSxhLmFwb3N0cm9waGUmJm8ucHVzaChpKSl9fSgpLChuPXt9KT0+e2NvbnN0IGU9bi5pZ25vcmV8fFtdLGE9bi5ub0JpbmFyeTtsZXQgcz0tMTtjb25zdCBsPVtdLGM9W107Zm9yKDsrK3M8TS5sZW5ndGg7KXtjb25zdCBuPU1bc107ZS5pbmNsdWRlcyhuKXx8KG8uaW5jbHVkZXMobik/bC5wdXNoKG4pOmMucHVzaChuKSl9cmV0dXJuKG4sZSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57Y29uc3Qgbz17fTtsZXQgcztmb3IocyBpbiBhYShuLGMsUyksYWEobixsLFMsITApLG8paWYoZGEuY2FsbChvLHMpKXtjb25zdCBuPXJbc107aVtcIm9yXCI9PT1uLnR5cGUmJmE/XCJiYXNpY1wiOm4udHlwZV0ob1tzXSxuLGUpfXJldHVybiBRbjtmdW5jdGlvbiBTKG4sZSxhLGkpe2NvbnN0IHI9TS5pbmRleE9mKGkpLHM9dFtyXSxsPXMuaWQ7aSE9PWkudG9Mb3dlckNhc2UoKSYmcW4obikhPT1pfHwobCBpbiBvfHwob1tsXT1bXSksb1tsXS5wdXNoKHt0eXBlOnMuaW5jb25zaWRlcmF0ZVtpXSxwYXJlbnQ6YSxub2RlczpuLHN0YXJ0OmUsZW5kOmUrbi5sZW5ndGgtMX0pKX19KSl9fTtmdW5jdGlvbiBzKG4sZSxpKXtjb25zdCByPXFuKGUubm9kZXMpO2xldCB0O2lmKGkuY29uc2lkZXJhdGUmJih0PU9iamVjdC5rZXlzKGkuY29uc2lkZXJhdGUpLHIuY2hhckF0KDApLnRvVXBwZXJDYXNlKCk9PT1yLmNoYXJBdCgwKSkpe2xldCBuPS0xO2Zvcig7KytuPHQubGVuZ3RoOyl0W25dPXRbbl0uY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdFtuXS5zbGljZSgxKX1PYmplY3QuYXNzaWduKG4ubWVzc2FnZSh1YShyLFwiYFwiKStcIiBtYXkgYmUgaW5zZW5zaXRpdmVcIisoaS5jb25kaXRpb24/XCIsIFwiK2kuY29uZGl0aW9uOlwiXCIpK1wiLCBcIisodD9cInVzZSBcIit1YSh0LFwiYFwiKS5qb2luKFwiLCBcIikrXCIgaW5zdGVhZFwiOlwidHJ5IG5vdCB0byB1c2UgaXRcIiksZS5ub2Rlc1swXSxbYSxpLmlkXS5qb2luKFwiOlwiKSkse2FjdHVhbDpyLGV4cGVjdGVkOnQsbm90ZTppLm5vdGUsdXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL3JldGV4dGpzL3JldGV4dC1lcXVhbGl0eSNyZWFkbWVcIn0pfX0oW3tpZDpcImxlYXJuaW5nLWRpc2FibGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGxlYXJuaW5nIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImxlYXJuaW5nIGRpc2FibGVkXCI6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgcGVyc29uLCByYXRoZXIgdGhhbiB0aGUgZGlzYWJpbGl0eSwgZmlyc3QuXCJ9LHtpZDpcImludmFsaWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widHVybmVkIG9mZlwiOlwiYVwiLFwiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGlzYWJsZWQ6XCJhXCIsaW52YWxpZDpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC5cIn0se2lkOlwiYmlydGgtZGVmZWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImhhcyBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmlydGggZGVmZWN0XCI6XCJhXCJ9LG5vdGU6XCJBc3N1bWVzL2ltcGxpZXMgdGhhdCBhIHBlcnNvbiB3aXRoIGEgZGlzYWJpbGl0eSBpcyBkZWZpY2llbnQgb3IgaW5mZXJpb3IgdG8gb3RoZXJzLiBXaGVuIHBvc3NpYmxlLCBzcGVjaWZ5IHRoZSBmdW5jdGlvbmFsIGFiaWxpdHkgb3IgaXRzIHJlc3RyaWN0aW9uLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwic3VmZmVycy1mcm9tLWRpc2FiaWxpdGllc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXMgYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBhIGRpc2FiaWxpdHlcIjpcImFcIixcInBlb3BsZSB3aXRoIGRpc2FiaWxpdGllc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBkaXNhYmlsaXRpZXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgZGlzYWJpbGl0eVwiOlwiYVwifSxub3RlOlwiQXNzdW1lcyB0aGF0IGEgcGVyc29uIHdpdGggYSBkaXNhYmlsaXR5IGhhcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiaW50ZWxsZWN0dWFsbHktZGlzYWJsZWQtcGVvcGxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aXRoIGludGVsbGVjdHVhbCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnRlbGxlY3R1YWxseSBkaXNhYmxlZCBwZW9wbGVcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBkaXNhYmlsaXR5LCBmaXJzdC4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImludGVsbGVjdHVhbGx5LWRpc2FibGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGFuIGludGVsbGVjdHVhbCBkaXNhYmlsaXR5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW50ZWxsZWN0dWFsbHkgZGlzYWJsZWRcIjpcImFcIixcImhhcyBpbnRlbGxlY3R1YWwgaXNzdWVzXCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYW4gaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGludGVsbGVjdHVhbCBkaXNhYmlsaXRpZXNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgaW50ZWxsZWN0dWFsIGRpc2FiaWxpdHlcIjpcImFcIn0sbm90ZTpcIkFzc3VtZXMgdGhhdCBhIHBlcnNvbiB3aXRoIGFuIGludGVsbGVjdHVhbCBkaXNhYmlsaXR5IGhhcyBhIHJlZHVjZWQgcXVhbGl0eSBvZiBsaWZlLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwibnV0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cnVkZTpcImFcIixtYWxpY2lvdXM6XCJhXCIsbWVhbjpcImFcIixkaXNndXN0aW5nOlwiYVwiLGluY3JlZGlibGU6XCJhXCIsdmlsZTpcImFcIixcInBlcnNvbiB3aXRoIHN5bXB0b21zIG9mIG1lbnRhbCBpbGxuZXNzXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBtZW50YWwgaWxsbmVzc1wiOlwiYVwiLFwicGVyc29uIHdpdGggc3ltcHRvbXMgb2YgYSBtZW50YWwgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIGEgbWVudGFsIGRpc29yZGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JhdHNoaXQ6XCJhXCIscHN5Y2hvOlwiYVwiLGNyYXp5OlwiYVwiLGRlbGlyaW91czpcImFcIixpbnNhbmU6XCJhXCIsaW5zYW5pdHk6XCJhXCIsbG9vbnk6XCJhXCIsbHVuYWN5OlwiYVwiLGx1bmF0aWM6XCJhXCIsXCJtZW50YWxseSBpbGxcIjpcImFcIixwc3ljaG9wYXRob2xvZ3k6XCJhXCIsXCJtZW50YWwgZGVmZWN0aXZlXCI6XCJhXCIsbW9yb246XCJhXCIsbW9yb25pYzpcImFcIixudXRzOlwiYVwiLFwibWVudGFsIGNhc2VcIjpcImFcIixtZW50YWw6XCJhXCJ9LG5vdGU6XCJEZXNjcmliZSB0aGUgYmVoYXZpb3Igb3IgaWxsbmVzcyB3aXRob3V0IGRlcm9nYXRvcnkgd29yZHMuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJpbnNhbmVseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW5jcmVkaWJseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zYW5lbHk6XCJhXCJ9LG5vdGU6XCJEZXNjcmliZSB0aGUgYmVoYXZpb3Igb3IgaWxsbmVzcyB3aXRob3V0IGRlcm9nYXRvcnkgd29yZHMuXCJ9LHtpZDpcInNhbmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NvcnJlY3Q6XCJhXCIsYWRlcXVhdGU6XCJhXCIsc3VmZmljaWVudDpcImFcIixjb25zaXN0ZW50OlwiYVwiLHZhbGlkOlwiYVwiLGNvaGVyZW50OlwiYVwiLHNlbnNpYmxlOlwiYVwiLHJlYXNvbmFibGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NhbmU6XCJhXCJ9LG5vdGU6XCJXaGVuIGRlc2NyaWJpbmcgYSBtYXRoZW1hdGljYWwgb3IgcHJvZ3JhbW1hdGljIHZhbHVlLCB1c2luZyB0aGUgd29yZCDigJxzYW5l4oCdIG5lZWRsZXNzbHkgaW52b2tlcyB0aGUgdG9waWMgb2YgbWVudGFsIGhlYWx0aC4gIENvbnNpZGVyIHVzaW5nIGEgZG9tYWluLXNwZWNpZmljIG9yIG5ldXRyYWwgdGVybSBpbnN0ZWFkLlwifSx7aWQ6XCJzYW5pdHktY2hlY2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NoZWNrOlwiYVwiLGFzc2VydGlvbjpcImFcIix2YWxpZGF0aW9uOlwiYVwiLFwic21va2UgdGVzdFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNhbml0eSBjaGVja1wiOlwiYVwifSxub3RlOlwiV2hlbiBkZXNjcmliaW5nIGEgbWF0aGVtYXRpY2FsIG9yIHByb2dyYW1tYXRpYyB2YWx1ZSwgdXNpbmcgdGhlIHBocmFzZSDigJxzYW5pdHkgY2hlY2vigJ0gbmVlZGxlc3NseSBpbnZva2VzIHRoZSB0b3BpYyBvZiBtZW50YWwgaGVhbHRoLiAgQ29uc2lkZXIgdXNpbmcgc2ltcGx5IOKAnGNoZWNr4oCdLCBvciBhIGRvbWFpbi1zcGVjaWZpYyBvciBuZXV0cmFsIHRlcm0sIGluc3RlYWQuXCJ9LHtpZDpcImJpcG9sYXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZsdWN0dWF0aW5nOlwiYVwiLFwicGVyc29uIHdpdGggYmlwb2xhciBkaXNvcmRlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaXBvbGFyOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcInNjaGl6b1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBzY2hpem9waHJlbmlhXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NjaGl6b3BocmVuaWM6XCJhXCIsc2NoaXpvOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcIm1hbmljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXJzIGZyb20gc2NoaXpvcGhyZW5pYVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gc2NoaXpvcGhyZW5pYVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggc2NoaXpvcGhyZW5pYVwiOlwiYVwiLG1hbmljOlwiYVwifSxub3RlOlwiQXNzdW1lcyBhIHBlcnNvbiB3aXRoIHNjaGl6b3BocmVuaWEgZXhwZXJpZW5jZXMgYSByZWR1Y2VkIHF1YWxpdHkgb2YgbGlmZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImhhbmRpY2FwcGVkLXBhcmtpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYWNjZXNzaWJsZSBwYXJraW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaGFuZGljYXBwZWQgcGFya2luZ1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJoYW5kaWNhcHBlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIGhhbmRpY2FwXCI6XCJhXCIsYWNjZXNzaWJsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZGljYXBwZWQ6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byB0aGUgcGVyc29uLCByYXRoZXIgdGhhbiB0aGUgZGlzYWJpbGl0eSwgZmlyc3QuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhbXB1dGVlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGFuIGFtcHV0YXRpb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YW1wdXRlZTpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBjb25kaXRpb24sIGZpcnN0LiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiZ2ltcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIGxpbXBcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y3JpcHBsZTpcImFcIixjcmlwcGxlZDpcImFcIixnaW1wOlwiYVwifSxub3RlOlwiUmVmZXIgdG8gdGhlIHNwZWNpZmljIGRpc2FiaWxpdHkuXCJ9LHtpZDpcIm1vbmdvbG9pZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBEb3duIFN5bmRyb21lXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vbmdvbG9pZDpcImFcIn19LHtpZDpcInN0cm9rZS12aWN0aW1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaW5kaXZpZHVhbCB3aG8gaGFzIGhhZCBhIHN0cm9rZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN0cm9rZSB2aWN0aW1cIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIGEgc3Ryb2tlXCI6XCJhXCIsXCJ2aWN0aW0gb2YgYSBzdHJva2VcIjpcImFcIn0sbm90ZTpcIlJlZmVyIHRvIHRoZSBwZXJzb24sIHJhdGhlciB0aGFuIHRoZSBjb25kaXRpb24sIGZpcnN0LlwifSx7aWQ6XCJtdWx0aXBsZS1zY2xlcm9zaXMtdmljdGltXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aG8gaGFzIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlcnMgZnJvbSBtdWx0aXBsZSBzY2xlcm9zaXNcIjpcImFcIixcInN1ZmZlcmluZyBmcm9tIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwidmljdGltIG9mIG11bHRpcGxlIHNjbGVyb3Npc1wiOlwiYVwiLFwibXVsdGlwbGUgc2NsZXJvc2lzIHZpY3RpbVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggbXVsdGlwbGUgc2NsZXJvc2lzXCI6XCJhXCJ9fSx7aWQ6XCJzdWZmZXJzLWZyb20tbWRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVycyBmcm9tIG11c2N1bGFyIGR5c3Ryb3BoeVwiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggbXVzY3VsYXIgZHlzdHJvcGh5XCI6XCJhXCIsXCJzdWZmZXJzIGZyb20gTURcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIE1EXCI6XCJhXCJ9LG5vdGU6XCJSZWZlciB0byBhIHBlcnNvbidzIGNvbmRpdGlvbiBhcyBhIHN0YXRlLCBub3QgYXMgYW4gYWZmbGljdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZSlcIn0se2lkOlwiZmFtaWx5LWJ1cmRlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ3aXRoIGZhbWlseSBzdXBwb3J0IG5lZWRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZmFtaWx5IGJ1cmRlblwiOlwiYVwifX0se2lkOlwiYXN5bHVtXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBzeWNoaWF0cmljIGhvc3BpdGFsXCI6XCJhXCIsXCJtZW50YWwgaGVhbHRoIGhvc3BpdGFsXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FzeWx1bTpcImFcIn19LHtpZDpcImJlZGxhbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2hhb3M6XCJhXCIsaGVjdGljOlwiYVwiLHBhbmRlbW9uaXVtOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiZWRsYW06XCJhXCIsbWFkaG91c2U6XCJhXCIsXCJsb29ueSBiaW5cIjpcImFcIn19LHtpZDpcImRvd25zLXN5bmRyb21lXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkRvd24gU3luZHJvbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJkb3ducyBzeW5kcm9tZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL21lZGlhLnNwZWNpYWxvbHltcGljcy5vcmcvc29pL2ZpbGVzL3ByZXNzLWtpdC8yMDE0X0ZhY3RTaGVldF9GaW5hbC5wZGZcIn0se2lkOlwicmV0YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzaWxseTpcImFcIixkdWxsYXJkOlwiYVwiLFwicGVyc29uIHdpdGggRG93biBTeW5kcm9tZVwiOlwiYVwiLFwicGVyc29uIHdpdGggZGV2ZWxvcG1lbnRhbCBkaXNhYmlsaXRpZXNcIjpcImFcIixkZWxheTpcImFcIixcImhvbGQgYmFja1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXRhcmQ6XCJhXCIscmV0YXJkZWQ6XCJhXCIsXCJzaG9ydCBidXNcIjpcImFcIn19LHtpZDpcInJldGFyZHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbGxpZXM6XCJhXCIsZHVsbGFyZHM6XCJhXCIsXCJwZW9wbGUgd2l0aCBkZXZlbG9wbWVudGFsIGRpc2FiaWxpdGllc1wiOlwiYVwiLFwicGVvcGxlIHdpdGggRG93buKAmXMgU3luZHJvbWVcIjpcImFcIixkZWxheXM6XCJhXCIsXCJob2xkcyBiYWNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3JldGFyZHM6XCJhXCJ9fSx7aWQ6XCJwc3ljaG90aWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggYSBwc3ljaG90aWMgY29uZGl0aW9uXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwc3ljaG9zaXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cHN5Y2hvdGljOlwiYVwiLFwic3VmZmVycyBmcm9tIHBzeWNob3Npc1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gcHN5Y2hvc2lzXCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBwc3ljaG9zaXNcIjpcImFcIixcInZpY3RpbSBvZiBwc3ljaG9zaXNcIjpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uXCJ9LHtpZDpcImxhbWVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2JvcmluZzpcImFcIixkdWxsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYW1lOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJhaWRzLXZpY3RpbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBBSURTXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VmZmVyaW5nIGZyb20gYWlkc1wiOlwiYVwiLFwic3VmZmVyIGZyb20gYWlkc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIGFpZHNcIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGFpZHNcIjpcImFcIixcInZpY3RpbSBvZiBhaWRzXCI6XCJhXCIsXCJhaWRzIHZpY3RpbVwiOlwiYVwifX0se2lkOlwid2hlZWxjaGFpci1ib3VuZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ1c2VzIGEgd2hlZWxjaGFpclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImNvbmZpbmVkIHRvIGEgd2hlZWxjaGFpclwiOlwiYVwiLFwiYm91bmQgdG8gYSB3aGVlbGNoYWlyXCI6XCJhXCIsXCJyZXN0cmljdGVkIHRvIGEgd2hlZWxjaGFpclwiOlwiYVwiLFwid2hlZWxjaGFpciBib3VuZFwiOlwiYVwifX0se2lkOlwic3BlY2lhbC1vbHltcGlhbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2F0aGxldGVzOlwiYVwiLFwiU3BlY2lhbCBPbHltcGljcyBhdGhsZXRlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNwZWNpYWwgb2x5bXBpYW5zXCI6XCJhXCIsXCJzcGVjaWFsIG9seW1waWMgYXRobGV0ZXNcIjpcImFcIn0sbm90ZTpcIldoZW4gcG9zc2libGUsIHVzZSB0aGUgZXhhY3QgZGlzY2lwbGluZSBvZiBzcG9ydC4gKHNvdXJjZTogaHR0cHM6Ly9tZWRpYS5zcGVjaWFsb2x5bXBpY3Mub3JnL3NvaS9maWxlcy9wcmVzcy1raXQvMjAxNF9GYWN0U2hlZXRfRmluYWwucGRmKVwifSx7aWQ6XCJhYmxlYm9kaWVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm5vbi1kaXNhYmxlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthYmxlYm9kaWVkOlwiYVwifSxub3RlOlwiQ2FuIGltcGx5IHRoYXQgcGVvcGxlIHdpdGggZGlzYWJpbGl0aWVzIGxhY2sgdGhlIGFiaWxpdHkgdG8gdXNlIHRoZWlyIGJvZGllcyB3ZWxsLiBTb21ldGltZXMgYHR5cGljYWxgIGNhbiBiZSB1c2VkLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwiYWRkaWN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgZHJ1ZyBhZGRpY3Rpb25cIjpcImFcIixcInBlcnNvbiByZWNvdmVyaW5nIGZyb20gYSBkcnVnIGFkZGljdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthZGRpY3Q6XCJhXCIsanVua2llOlwiYVwifSxub3RlOlwiQWRkaWN0aW9uIGlzIGEgbmV1cm9iaW9sb2dpY2FsIGRpc2Vhc2UuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJhZGRpY3RzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlb3BsZSB3aXRoIGEgZHJ1ZyBhZGRpY3Rpb25cIjpcImFcIixcInBlb3BsZSByZWNvdmVyaW5nIGZyb20gYSBkcnVnIGFkZGljdGlvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthZGRpY3RzOlwiYVwiLGp1bmtpZXM6XCJhXCJ9LG5vdGU6XCJBZGRpY3Rpb24gaXMgYSBuZXVyb2Jpb2xvZ2ljYWwgZGlzZWFzZS4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcImFsY29ob2xpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzb21lb25lIHdpdGggYW4gYWxjb2hvbCBwcm9ibGVtXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FsY29ob2xpYzpcImFcIixcImFsY29ob2wgYWJ1c2VyXCI6XCJhXCJ9LG5vdGU6XCJBbGNvaG9saXNtIGlzIGEgbmV1cm9iaW9sb2dpY2FsIGRpc2Vhc2UuIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJkZWFmbXV0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGVhZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJkZWFmIGFuZCBkdW1iXCI6XCJhXCIsZGVhZm11dGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNlbmlsZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkZW1lbnRpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkZW1lbnRlZDpcImFcIixzZW5pbGU6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcImRlcHJlc3NlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c2FkOlwiYVwiLGJsdWU6XCJhXCIsXCJidW1tZWQgb3V0XCI6XCJhXCIsXCJwZXJzb24gd2l0aCBzZWFzb25hbCBhZmZlY3RpdmUgZGlzb3JkZXJcIjpcImFcIixcInBlcnNvbiB3aXRoIHBzeWNob3RpYyBkZXByZXNzaW9uXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwb3N0cGFydHVtIGRlcHJlc3Npb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGVwcmVzc2VkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJkd2FyZlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkd2FyZmlzbVwiOlwiYVwiLFwibGl0dGxlIHBlcnNvblwiOlwiYVwiLFwibGl0dGxlIHBlb3BsZVwiOlwiYVwiLExQOlwiYVwiLFwicGVyc29uIG9mIHNob3J0IHN0YXR1cmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ2ZXJ0aWNhbGx5IGNoYWxsZW5nZWRcIjpcImFcIixtaWRnZXQ6XCJhXCIsXCJzbWFsbCBwZXJzb25cIjpcImFcIixkd2FyZjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8saHR0cHM6Ly93d3cubHBhb25saW5lLm9yZy9mYXEtI01pZGdldFwifSx7aWQ6XCJkeXNsZXhpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBkeXNsZXhpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkeXNsZXhpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiZXBpbGVwdGljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGVwaWxlcHN5XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2VwaWxlcHRpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwiaGVhcmluZy1pbXBhaXJlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJoYXJkIG9mIGhlYXJpbmdcIjpcImFcIixcInBhcnRpYWxseSBkZWFmXCI6XCJhXCIsXCJwYXJ0aWFsIGhlYXJpbmcgbG9zc1wiOlwiYVwiLGRlYWY6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaGVhcmluZyBpbXBhaXJlZFwiOlwiYVwiLFwiaGVhcmluZyBpbXBhaXJtZW50XCI6XCJhXCJ9LG5vdGU6XCJXaGVuIHBvc3NpYmxlLCBhc2sgdGhlIHBlcnNvbiB3aGF0IHRoZXkgcHJlZmVyLiAoc291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlLylcIn0se2lkOlwidmljdGltLW9mLXBvbGlvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwb2xpbzpcImFcIixcInBlcnNvbiB3aG8gaGFkIHBvbGlvXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5mYW50aWxlIHBhcmFseXNpc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIHBvbGlvXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBwb2xpb1wiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYSBwb2xpb1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggcG9saW9cIjpcImFcIixcImFmZmxpY3RlZCB3aXRoIGEgcG9saW9cIjpcImFcIixcInZpY3RpbSBvZiBwb2xpb1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJ2aWN0aW0tb2YtYW4taW5qdXJ5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1c3RhaW4gYW4gaW5qdXJ5XCI6XCJhXCIsXCJyZWNlaXZlIGFuIGluanVyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInN1ZmZlciBmcm9tIGFuIGluanVyeVwiOlwiYVwiLFwic3VmZmVycyBmcm9tIGFuIGluanVyeVwiOlwiYVwiLFwic3VmZmVyaW5nIGZyb20gYW4gaW5qdXJ5XCI6XCJhXCIsXCJhZmZsaWN0ZWQgd2l0aCBhbiBpbmp1cnlcIjpcImFcIixcInZpY3RpbSBvZiBhbiBpbmp1cnlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwidmljdGltLW9mLWluanVyaWVzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1c3RhaW4gaW5qdXJpZXNcIjpcImFcIixcInJlY2VpdmUgaW5qdXJpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWZmZXIgZnJvbSBpbmp1cmllc1wiOlwiYVwiLFwic3VmZmVycyBmcm9tIGluanVyaWVzXCI6XCJhXCIsXCJzdWZmZXJpbmcgZnJvbSBpbmp1cmllc1wiOlwiYVwiLFwiYWZmbGljdGVkIHdpdGggaW5qdXJpZXNcIjpcImFcIixcInZpY3RpbSBvZiBpbmp1cmllc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJwYXJhcGxlZ2ljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHBhcmFwbGVnaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cGFyYXBsZWdpYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicXVhZHJpcGxlZ2ljXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHF1YWRyaXBsZWdpYVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntxdWFkcmlwbGVnaWM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNwYXpcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdpdGggY2VyZWJyYWwgcGFsc3lcIjpcImFcIix0d2l0Y2g6XCJhXCIsZmxpbmNoOlwiYVwiLGhlY3RpYzpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhejpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwic3Bhc3RpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBjZXJlYnJhbCBwYWxzeVwiOlwiYVwiLHR3aXRjaDpcImFcIixmbGluY2g6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NwYXN0aWM6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInN0YW1tZXJpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3N0dXR0ZXJpbmc6XCJhXCIsXCJkaXNmbHVlbmN5IG9mIHNwZWVjaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGFtbWVyaW5nOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL25jZGoub3JnL3N0eWxlLWd1aWRlL1wifSx7aWQ6XCJzdHV0dGVyZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBzdHV0dGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdHV0dGVyZXI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInRvdXJldHRlcy1zeW5kcm9tZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJUb3VyZXR0ZSBzeW5kcm9tZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRvdXJldHRlcyBzeW5kcm9tZVwiOlwiYVwiLFwidG91cmV0dGVzIGRpc29yZGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInJlaGFiLWNlbnRlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0cmVhdG1lbnQgY2VudGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicmVoYWIgY2VudGVyXCI6XCJhXCIsXCJkZXRveCBjZW50ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS9cIn0se2lkOlwicmVoYWJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3RyZWF0bWVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmVoYWI6XCJhXCIsZGV0b3g6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvXCJ9LHtpZDpcInNvY2lvcGF0aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gd2l0aCBhIHBlcnNvbmFsaXR5IGRpc29yZGVyXCI6XCJhXCIsXCJwZXJzb24gd2l0aCBwc3ljaG9wYXRoaWMgcGVyc29uYWxpdHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c29jaW9wYXRoOlwiYVwifSxub3RlOlwiT25seSB1c2UgdGVybXMgZGVzY3JpYmluZyBtZW50YWwgaWxsbmVzcyB3aGVuIHJlZmVycmluZyB0byBhIHByb2Zlc3Npb25hbGx5IGRpYWdub3NlZCBtZWRpY2FsIGNvbmRpdGlvbi4gKHNvdXJjZTogaHR0cHM6Ly9uY2RqLm9yZy9zdHlsZS1ndWlkZS8pXCJ9LHtpZDpcInNvY2lvcGF0aHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVvcGxlIHdpdGggcHN5Y2hvcGF0aGljIHBlcnNvbmFsaXRpZXNcIjpcImFcIixcInBlb3BsZSB3aXRoIGEgcGVyc29uYWxpdHkgZGlzb3JkZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c29jaW9wYXRoczpcImFcIn0sbm90ZTpcIk9ubHkgdXNlIHRlcm1zIGRlc2NyaWJpbmcgbWVudGFsIGlsbG5lc3Mgd2hlbiByZWZlcnJpbmcgdG8gYSBwcm9mZXNzaW9uYWxseSBkaWFnbm9zZWQgbWVkaWNhbCBjb25kaXRpb24uIChzb3VyY2U6IGh0dHBzOi8vbmNkai5vcmcvc3R5bGUtZ3VpZGUvKVwifSx7aWQ6XCJkdW1iXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIixzcGVlY2hsZXNzOlwiYVwiLHNpbGVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZHVtYjpcImFcIn0sbm90ZTpcIkR1bWIgaGVyZSBpcyB1c2VkIGluIDIgZGlmZmVyZW50IGNvbnRleHRzICwgdGhlIGluYWJpbGl0eSB0byB0YWxrIG9yIGFzIGEgY3Vyc2Ugd29yZC4gKHNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWwpXCJ9LHtpZDpcIndhY2tvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIix1bmludGVsbGlnZW50OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaW1wbGV0b246XCJhXCIsc3R1cGlkOlwiYVwiLHdhY2tvOlwiYVwiLHdoYWNrbzpcImFcIixcImxvdyBpcVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwOi8vd3d3Lm1tb25qZWpyLmNvbS8yMDE0LzAyL2RlY29uc3RydWN0aW5nLXN0dXBpZC5odG1sXCJ9LHtpZDpcInBhbmljLWF0dGFja1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmaXQgb2YgdGVycm9yXCI6XCJhXCIsc2NhcmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wicGFuaWMgYXR0YWNrXCI6XCJhXCJ9fSx7aWQ6XCJib255XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0aGluOlwiYVwiLHNsaW06XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Fub3JleGljOlwiYVwiLGJvbnk6XCJhXCJ9fSx7aWQ6XCJvY2RcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGFuIGFueGlldHkgZGlzb3JkZXJcIjpcImFcIixvYnNlc3NpdmU6XCJhXCIscGVkYW50aWM6XCJhXCIsbmlnZ2x5OlwiYVwiLHBpY2t5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXVyb3RpYzpcImFcIixvY2Q6XCJhXCIsXCJvLmMuZFwiOlwiYVwiLFwiby5jLmQuXCI6XCJhXCJ9LG5vdGU6XCJPbmx5IHVzZSB0ZXJtcyBkZXNjcmliaW5nIG1lbnRhbCBpbGxuZXNzIHdoZW4gcmVmZXJyaW5nIHRvIGEgcHJvZmVzc2lvbmFsbHkgZGlhZ25vc2VkIG1lZGljYWwgY29uZGl0aW9uLiAoc291cmNlOiBodHRwczovL2VuZ2xpc2guc3RhY2tleGNoYW5nZS5jb20vcXVlc3Rpb25zLzI0NzU1MC8pXCJ9LHtpZDpcImluc29tbmlhXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyZXN0bGVzc25lc3M6XCJhXCIsc2xlZXBsZXNzbmVzczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWE6XCJhXCJ9fSx7aWQ6XCJpbnNvbW5pYWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wicGVyc29uIHdobyBoYXMgaW5zb21uaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWFjOlwiYVwifX0se2lkOlwiaW5zb21uaWFjc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZW9wbGUgd2hvIGhhdmUgaW5zb21uaWFcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aW5zb21uaWFjczpcImFcIn19LHtpZDpcImJhcnJlblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZW1wdHk6XCJhXCIsc3RlcmlsZTpcImFcIixpbmZlcnRpbGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JhcnJlbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiZGVhZi10b1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y2FyZWxlc3M6XCJhXCIsaGVhcnRsZXNzOlwiYVwiLGluZGlmZmVyZW50OlwiYVwiLGluc2Vuc2l0aXZlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImJsaW5kIHRvXCI6XCJhXCIsXCJibGluZCBleWUgdG9cIjpcImFcIixcImJsaW5kZWQgYnlcIjpcImFcIixcImRlYWYgdG9cIjpcImFcIixcImRlYWYgZWFyIHRvXCI6XCJhXCIsXCJkZWFmZW5lZCBieVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJjcmV0aW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NyZWVwOlwiYVwiLGZvb2w6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NyZXRpbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiZGFmdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YWJzdXJkOlwiYVwiLGZvb2xpc2g6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2RhZnQ6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sXCJ9LHtpZDpcImlkaW90XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmb29saXNoOlwiYVwiLGx1ZGljcm91czpcImFcIixzaWxseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVlYmxlbWluZGVkOlwiYVwiLFwiZmVlYmxlIG1pbmRlZFwiOlwiYVwiLGlkaW90OlwiYVwiLGltYmVjaWxlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJoYXJlbGlwcGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIGEgY2xlZnQtbGlwIGFuZCBwYWxhdGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFyZWxpcHBlZDpcImFcIixjbGVmdGxpcHBlZDpcImFcIn0sbm90ZTpcIlNvbWV0aW1lcyBpdCdzIGNsZWZ0IGxpcCBvciBwYWxhdGUsIG5vdCBib3RoLiBTcGVjaWZ5IHdoZW4gcG9zc2libGUuIChzb3VyY2U6IGh0dHBzOi8vd3d3LmF1dGlzdGljaG95YS5jb20vcC9hYmxlaXN0LXdvcmRzLWFuZC10ZXJtcy10by1hdm9pZC5odG1sKVwifSx7aWQ6XCJoYXJlbGlwXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNsZWZ0LWxpcCBhbmQgcGFsYXRlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhcmVsaXA6XCJhXCIsXCJoYXJlIGxpcFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJtYW5pYWNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZhbmF0aWM6XCJhXCIsemVhbG90OlwiYVwiLGVudGh1c2lhc3Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmlhYzpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYXV0aXN0aWNob3lhLmNvbS9wL2FibGVpc3Qtd29yZHMtYW5kLXRlcm1zLXRvLWF2b2lkLmh0bWxcIn0se2lkOlwiYnVja3RlZXRoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aXRoIHByb21pbmVudCB0ZWV0aFwiOlwiYVwiLFwicHJvbWluZW50IHRlZXRoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2J1Y2t0b290aGVkOlwiYVwiLGJ1Y2t0ZWV0aDpcImFcIn19LHtpZDpcInNwZWNpYWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiaGFzIGEgZGlzYWJpbGl0eVwiOlwiYVwiLFwicGVyc29uIHdpdGggYSBkaXNhYmlsaXR5XCI6XCJhXCIsXCJwZW9wbGUgd2l0aCBkaXNhYmlsaXRpZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhbGxlbmdlZDpcImFcIixkaWZmYWJpbGl0eTpcImFcIixcImRpZmZlcmVudGx5IGFibGVkXCI6XCJhXCIsaGFuZGljYXBhYmxlOlwiYVwiLHNwZWNpYWw6XCJhXCIsXCJzcGVjaWFsIG5lZWRzXCI6XCJhXCIsXCJzcGVjaWFsbHkgYWJsZWRcIjpcImFcIn0sbm90ZTpcIkV1cGhlbWlzbXMgZm9yIGRpc2FiaWxpdGllcyBjYW4gYmUgaW5mYW50aWxpemluZy4gKHNvdXJjZTogaHR0cDovL2Nkcm55cy5vcmcvYmxvZy9kaXNhYmlsaXR5LWRpYWxvZ3VlL3RoZS1kaXNhYmlsaXR5LWRpYWxvZ3VlLTQtZGlzYWJpbGl0eS1ldXBoZW1pc21zLXRoYXQtbmVlZC10by1iaXRlLXRoZS1kdXN0LyxodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbClcIn0se2lkOlwibGlidGFyZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzYWdyZWVhYmxlOlwiYVwiLHVuZWR1Y2F0ZWQ6XCJhXCIsaWdub3JhbnQ6XCJhXCIsbmFpdmU6XCJhXCIsaW5jb25zaWRlcmF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZnVja3RhcmQ6XCJhXCIsbGlidGFyZDpcImFcIixjb250YXJkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5hdXRpc3RpY2hveWEuY29tL3AvYWJsZWlzdC13b3Jkcy1hbmQtdGVybXMtdG8tYXZvaWQuaHRtbFwifSx7aWQ6XCJhZGRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Rpc29yZ2FuaXplZDpcImFcIixkaXN0cmFjdGVkOlwiYVwiLGVuZXJnZXRpYzpcImFcIixoeXBlcmFjdGl2ZTpcImFcIixpbXBldHVvdXM6XCJhXCIsaW1wdWxzaXZlOlwiYVwiLGluYXR0ZW50aXZlOlwiYVwiLHJlc3RsZXNzOlwiYVwiLHVuZm9jdXNlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7QUREOlwiYVwiLGFkaGQ6XCJhXCIsXCJhLmQuZC5cIjpcImFcIixcImEuZC5oLmQuXCI6XCJhXCJ9fSx7aWQ6XCJkdW1teVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0ZXN0IGRvdWJsZVwiOlwiYVwiLHBsYWNlaG9sZGVyOlwiYVwiLGZha2U6XCJhXCIsc3R1YjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZHVtbXl2YXJpYWJsZTpcImFcIixkdW1teXZhbHVlOlwiYVwiLGR1bW15b2JqZWN0OlwiYVwiLGR1bW15OlwiYVwifSxub3RlOlwiRHVtbXkgY2FuIHJlZmVyIHRvIHRoZSBpbmFiaWxpdHkgdG8gdGFsayBvciBiZSB1c2VkIGFzIGEgZGVyb2dhdG9yeSB3b3JkIG1lYW5pbmcgc3R1cGlkLiBJbiBjb21wdXRlciBwcm9ncmFtbWluZyBpdCBpcyB1c2VkIHdoZXJlIGEgdmFsdWUgb3IgYmVoYXZpb3IgaXMgdW5pbXBvcnRhbnQuIFRoZXJlIGFyZSBiZXR0ZXIgYWx0ZXJuYXRpdmVzIGZvciBvdGhlciB1c2UgY2FzZXMgYWxzby5cIn0se2lkOlwiYmluZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2VudGh1c2lhc3RpYzpcImFcIixzcHJlZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmluZ2U6XCJhXCJ9LG5vdGU6XCJCaW5nZSBtaWdodCBiZSBpbnNlbnNpdGl2ZSB0b3dhcmRzIGZvbGtzIHdpdGggZWF0aW5nIG9yIGRyaW5raW5nIGRpc29yZGVycyAoc291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vcmV0ZXh0anMvcmV0ZXh0LWVxdWFsaXR5L2lzc3Vlcy8xMTApXCJ9LHtpZDpcIm9idmlvdXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7b2J2aW91czpcImFcIixvYnZpb3VzbHk6XCJhXCJ9LG5vdGU6XCJOb3QgZXZlcnl0aGluZyBpcyBhcyBvYnZpb3VzIGFzIHlvdSBtaWdodCB0aGluay4gQW5kIGlmIGl0IGlzbuKAmXQgb2J2aW91cyB0byB0aGUgcmVhZGVyLCBpdCBjYW4gaHVydC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwianVzdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntqdXN0OlwiYVwifSxub3RlOlwiTm90IGV2ZXJ5dGhpbmcgaXMgYXMgZWFzeSBhcyB5b3UgbWlnaHQgdGhpbmsuIEFuZCBpZiBpdCBpc27igJl0IGVhc3kgZm9yIHRoZSByZWFkZXIsIGl0IGNhbiBodXJ0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJiYXNpY2FsbHlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7YmFzaWNhbGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IGJhc2ljLiBJZiB5b3XigJlyZSBnb2luZyB0byBleHBsYWluIGEgY29uZnVzaW5nIHByZXZpb3VzIHNlbnRlbmNlIHdpdGggYSBjbGVhcmVyIG5leHQgc2VudGVuY2UsIHdoeSBub3QgZHJvcCB0aGUgZm9ybWVyIGFuZCBvbmx5IHVzZSB0aGUgbGF0dGVyPyAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJzaW1wbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0saW5jb25zaWRlcmF0ZTp7c2ltcGxlOlwiYVwiLHNpbXBseTpcImFcIn0sbm90ZTpcIkl04oCZcyBwcm9iYWJseSBub3QgdGhhdCBzaW1wbGUuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwiZWFzeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntlYXN5OlwiYVwiLGVhc2lseTpcImFcIn0sbm90ZTpcIkl04oCZcyBwcm9iYWJseSBub3QgdGhhdCBlYXN5LiBFdmVuIGlmIGl0IGlzLCB5b3UgcHJvYmFibHkgZG9u4oCZdCBuZWVkIHRvIHNwZWNpZmljYWxseSBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcIm9mLWNvdXJzZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxpbmNvbnNpZGVyYXRlOntcIm9mIGNvdXJzZVwiOlwiYVwifSxub3RlOlwiSWYgaXTigJlzIHNlbGYtZXZpZGVudCB0aGVuIG1heWJlIHlvdSBkb27igJl0IG5lZWQgdG8gZGVzY3JpYmUgaXQuIElmIGl0IGlzbuKAmXQsIGRvbuKAmXQgc2F5IGl0LiAoc291cmNlOiBodHRwczovL2Nzcy10cmlja3MuY29tL3dvcmRzLWF2b2lkLWVkdWNhdGlvbmFsLXdyaXRpbmcvKVwifSx7aWQ6XCJjbGVhcmx5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e2NsZWFybHk6XCJhXCJ9LG5vdGU6XCJJZiBpdOKAmXMgc2VsZi1ldmlkZW50IHRoZW4gbWF5YmUgeW91IGRvbuKAmXQgbmVlZCB0byBkZXNjcmliZSBpdC4gSWYgaXQgaXNu4oCZdCwgZG9u4oCZdCBzYXkgaXQuIChzb3VyY2U6IGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vd29yZHMtYXZvaWQtZWR1Y2F0aW9uYWwtd3JpdGluZy8pXCJ9LHtpZDpcImV2ZXJ5b25lLWtub3dzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wiZXZlcnlvbmUga25vd3NcIjpcImFcIn0sbm90ZTpcIklmIGl04oCZcyBzZWxmLWV2aWRlbnQgdGhlbiBtYXliZSB5b3UgZG9u4oCZdCBuZWVkIHRvIGRlc2NyaWJlIGl0LiBJZiBpdCBpc27igJl0LCBkb27igJl0IHNheSBpdC4gKHNvdXJjZTogaHR0cHM6Ly9jc3MtdHJpY2tzLmNvbS93b3Jkcy1hdm9pZC1lZHVjYXRpb25hbC13cml0aW5nLylcIn0se2lkOlwic3RyYWlnaHRmb3J3YXJkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGluY29uc2lkZXJhdGU6e1wic3RyYWlnaHQgZm9yd2FyZFwiOlwiYVwiLHN0cmFpZ2h0Zm9yd2FyZDpcImFcIixcInN0cmFpZ2h0IGZvcndhcmRseVwiOlwiYVwiLHN0cmFpZ2h0Zm9yd2FyZGx5OlwiYVwifSxub3RlOlwiSXTigJlzIHByb2JhYmx5IG5vdCB0aGF0IHN0cmFpZ2h0IGZvcndhcmQuIEV2ZW4gaWYgaXQgaXMsIHlvdSBwcm9iYWJseSBkb27igJl0IG5lZWQgdG8gc3BlY2lmaWNhbGx5IHNheSBpdC5cIn0se2lkOlwiaGVyLWhpbVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0aGVpcjpcImFcIix0aGVpcnM6XCJhXCIsdGhlbTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyOlwiZmVtYWxlXCIsaGVyczpcImZlbWFsZVwiLGhpbTpcIm1hbGVcIixoaXM6XCJtYWxlXCJ9LGNvbmRpdGlvbjpcIndoZW4gcmVmZXJyaW5nIHRvIGEgcGVyc29uXCJ9LHtpZDpcImhlLXNoZVwiLHR5cGU6XCJvclwiLGFwb3N0cm9waGU6ITAsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RoZXk6XCJhXCIsaXQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NoZTpcImZlbWFsZVwiLGhlOlwibWFsZVwiLFwic2hlJ2RcIjpcImZlbWFsZVwiLFwiaGUnZFwiOlwibWFsZVwiLFwic2hlJ2xsXCI6XCJmZW1hbGVcIixcImhlJ2xsXCI6XCJtYWxlXCIsXCJzaGUnc1wiOlwiZmVtYWxlXCIsXCJoZSdzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJoZXJzZWxmLWhpbXNlbGZcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dGhlbXNlbHZlczpcImFcIix0aGVpcnNlbGY6XCJhXCIsc2VsZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVyc2VsZjpcImZlbWFsZVwiLGhpbXNlbGY6XCJtYWxlXCJ9fSx7aWQ6XCJib3ktZ2lybFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntraWQ6XCJhXCIsY2hpbGQ6XCJhXCIseW91dGg6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmw6XCJmZW1hbGVcIixib3k6XCJtYWxlXCJ9LGNvbmRpdGlvbjpcIndoZW4gcmVmZXJyaW5nIHRvIGEgcGVyc29uXCJ9LHtpZDpcImdhbHMtbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Blb3BsZTpcImFcIixwZXJzb25zOlwiYVwiLGZvbGtzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21lbjpcImZlbWFsZVwiLGdpcmxzOlwiZmVtYWxlXCIsZ2FsczpcImZlbWFsZVwiLGxhZGllczpcImZlbWFsZVwiLG1hbjpcIm1hbGVcIixib3lzOlwibWFsZVwiLG1lbjpcIm1hbGVcIixndXlzOlwibWFsZVwiLGR1ZGVzOlwibWFsZVwiLGdlbnRzOlwibWFsZVwiLGdlbnRsZW1lbjpcIm1hbGVcIn19LHtpZDpcImdhbC1ndXlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGVyc29uOlwiYVwiLGZyaWVuZDpcImFcIixwYWw6XCJhXCIsZm9sazpcImFcIixpbmRpdmlkdWFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21hbjpcImZlbWFsZVwiLGdhbDpcImZlbWFsZVwiLGxhZHk6XCJmZW1hbGVcIixiYWJlOlwiZmVtYWxlXCIsYmltYm86XCJmZW1hbGVcIixjaGljazpcImZlbWFsZVwiLGd1eTpcIm1hbGVcIixsYWQ6XCJtYWxlXCIsZmVsbG93OlwibWFsZVwiLGR1ZGU6XCJtYWxlXCIsYnJvOlwibWFsZVwiLGdlbnRsZW1hbjpcIm1hbGVcIn19LHtpZDpcImZhdGhlcmxhbmQtbW90aGVybGFuZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm5hdGl2ZSBsYW5kXCI6XCJhXCIsaG9tZWxhbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vdGhlcmxhbmQ6XCJmZW1hbGVcIixmYXRoZXJsYW5kOlwibWFsZVwifX0se2lkOlwiZmF0aGVyLXRvbmd1ZS1tb3RoZXItdG9uZ3VlXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibmF0aXZlIHRvbmd1ZVwiOlwiYVwiLFwibmF0aXZlIGxhbmd1YWdlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibW90aGVyIHRvbmd1ZVwiOlwiZmVtYWxlXCIsXCJmYXRoZXIgdG9uZ3VlXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmcmVzaG1lbi1mcmVzaHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QteWVhciBzdHVkZW50c1wiOlwiYVwiLGZyZXNoZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmcmVzaHdvbWVuOlwiZmVtYWxlXCIsZnJlc2htZW46XCJtYWxlXCJ9fSx7aWQ6XCJnYXJiYWdlbWFuLWdhcmJhZ2V3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImdhcmJhZ2UgY29sbGVjdG9yXCI6XCJhXCIsXCJ3YXN0ZSBjb2xsZWN0b3JcIjpcImFcIixcInRyYXNoIGNvbGxlY3RvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnYXJiYWdld29tYW46XCJmZW1hbGVcIixnYXJiYWdlbWFuOlwibWFsZVwifX0se2lkOlwiZ2FyYmFnZW1lbi1nYXJiYWdld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJnYXJiYWdlIGNvbGxlY3RvcnNcIjpcImFcIixcIndhc3RlIGNvbGxlY3RvcnNcIjpcImFcIixcInRyYXNoIGNvbGxlY3RvcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2FyYmFnZXdvbWVuOlwiZmVtYWxlXCIsZ2FyYmFnZW1lbjpcIm1hbGVcIn19LHtpZDpcImNoYWlybWFuLWNoYWlyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hhaXI6XCJhXCIsaGVhZDpcImFcIixjaGFpcnBlcnNvbjpcImFcIixjb29yZGluYXRvcjpcImFcIixcImNvbW1pdHRlZSBoZWFkXCI6XCJhXCIsbW9kZXJhdG9yOlwiYVwiLFwicHJlc2lkaW5nIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2hhaXJ3b21hbjpcImZlbWFsZVwiLGNoYWlybWFuOlwibWFsZVwifX0se2lkOlwiY29tbWl0dGVlLW1hbi1jb21taXR0ZWUtd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjb21taXR0ZWUgbWVtYmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbWl0dGVlIHdvbWFuXCI6XCJmZW1hbGVcIixcImNvbW1pdHRlZSBtYW5cIjpcIm1hbGVcIn19LHtpZDpcImNvd2JveS1jb3dnaXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Nvd2hhbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Nvd2dpcmw6XCJmZW1hbGVcIixjb3dib3k6XCJtYWxlXCJ9fSx7aWQ6XCJjb3dib3lzLWNvd2dpcmxzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Nvd2hhbmRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3dnaXJsczpcImZlbWFsZVwiLGNvd2JveXM6XCJtYWxlXCJ9fSx7aWQ6XCJjYXR0bGVtYW4tY2F0dGxld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYXR0bGUgcmFuY2hlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXR0bGV3b21hbjpcImZlbWFsZVwiLGNhdHRsZW1hbjpcIm1hbGVcIn19LHtpZDpcImNhdHRsZW1lbi1jYXR0bGV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNhdHRsZSByYW5jaGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXR0bGV3b21lbjpcImZlbWFsZVwiLGNhdHRsZW1lbjpcIm1hbGVcIn19LHtpZDpcImNoYWlybWVuLWNoYWlyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2hhaXJzOlwiYVwiLGNoYWlycGVyc29uczpcImFcIixjb29yZGluYXRvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NoYWlyd29tZW46XCJmZW1hbGVcIixjaGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcInBvc3RtYW4tcG9zdHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wibWFpbCBjYXJyaWVyXCI6XCJhXCIsXCJsZXR0ZXIgY2FycmllclwiOlwiYVwiLFwicG9zdGFsIHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwb3N0d29tYW46XCJmZW1hbGVcIixtYWlsd29tYW46XCJmZW1hbGVcIixwb3N0bWFuOlwibWFsZVwiLG1haWxtYW46XCJtYWxlXCJ9fSx7aWQ6XCJwb3N0bWVuLXBvc3R3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1haWwgY2FycmllcnNcIjpcImFcIixcImxldHRlciBjYXJyaWVyc1wiOlwiYVwiLFwicG9zdGFsIHdvcmtlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9zdHdvbWVuOlwiZmVtYWxlXCIsbWFpbHdvbWVuOlwiZmVtYWxlXCIscG9zdG1lbjpcIm1hbGVcIixtYWlsbWVuOlwibWFsZVwifX0se2lkOlwiY2hpY2stY29wLXBvbGljZW1hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntvZmZpY2VyOlwiYVwiLFwicG9saWNlIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7cG9saWNld29tYW46XCJmZW1hbGVcIixwb2xpY2VtYW46XCJtYWxlXCIsXCJjaGljayBjb3BcIjpcImZlbWFsZVwifX0se2lkOlwicG9saWNlbWVuLXBvbGljZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljZXJzOlwiYVwiLFwicG9saWNlIG9mZmljZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3BvbGljZXdvbWVuOlwiZmVtYWxlXCIscG9saWNlbWVuOlwibWFsZVwifX0se2lkOlwic3Rld2FyZC1zdGV3YXJkZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmxpZ2h0IGF0dGVuZGFudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGV3YXJkZXNzOlwiZmVtYWxlXCIsc3Rld2FyZDpcIm1hbGVcIn19LHtpZDpcInN0ZXdhcmRlc3Nlcy1zdGV3YXJkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImZsaWdodCBhdHRlbmRhbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXdhcmRlc3NlczpcImZlbWFsZVwiLHN0ZXdhcmRzOlwibWFsZVwifX0se2lkOlwiY29uZ3Jlc3NtYW4tY29uZ3Jlc3N3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1lbWJlciBvZiBjb25ncmVzc1wiOlwiYVwiLFwiY29uZ3Jlc3MgcGVyc29uXCI6XCJhXCIsbGVnaXNsYXRvcjpcImFcIixyZXByZXNlbnRhdGl2ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y29uZ3Jlc3N3b21hbjpcImZlbWFsZVwiLGNvbmdyZXNzbWFuOlwibWFsZVwifX0se2lkOlwiY29uZ3Jlc3NtZW4tY29uZ3Jlc3N3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1lbWJlcnMgb2YgY29uZ3Jlc3NcIjpcImFcIixcImNvbmdyZXNzIHBlcnNvbnNcIjpcImFcIixsZWdpc2xhdG9yczpcImFcIixyZXByZXNlbnRhdGl2ZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvbmdyZXNzd29tZW46XCJmZW1hbGVcIixjb25ncmVzc21lbjpcIm1hbGVcIn19LHtpZDpcImZpcmVtYW4tZmlyZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyZSBmaWdodGVyXCI6XCJhXCIsXCJmaXJlIG9mZmljZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmlyZXdvbWFuOlwiZmVtYWxlXCIsZmlyZW1hbjpcIm1hbGVcIn19LHtpZDpcImZpcmVtZW4tZmlyZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyZSBmaWdodGVyc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmaXJld29tZW46XCJmZW1hbGVcIixmaXJlbWVuOlwibWFsZVwifX0se2lkOlwiZmlzaGVybWFuLWZpc2hlcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Zpc2hlcjpcImFcIixcImNyZXcgbWVtYmVyXCI6XCJhXCIsZmlzaGVyZm9sazpcImFcIixhbmdsZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Zpc2hlcndvbWFuOlwiZmVtYWxlXCIsZmlzaGVybWFuOlwibWFsZVwifX0se2lkOlwiZmlzaGVybWVuLWZpc2hlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Zpc2hlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Zpc2hlcndvbWVuOlwiZmVtYWxlXCIsZmlzaGVybWVuOlwibWFsZVwifX0se2lkOlwiYnJvdGhlcmhvb2Qtc2lzdGVyaG9vZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntraW5zaGlwOlwiYVwiLGNvbW11bml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2lzdGVyaG9vZDpcImZlbWFsZVwiLGJyb3RoZXJob29kOlwibWFsZVwifX0se2lkOlwiY29tbW9uLWdpcmwtY29tbW9uLW1hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvbW1vbiBwZXJzb25cIjpcImFcIixcImF2ZXJhZ2UgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbW9uIGdpcmxcIjpcImZlbWFsZVwiLFwiY29tbW9uIG1hblwiOlwibWFsZVwifX0se2lkOlwic2FsYXJ5bWFuLXNhbGFyeXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiYnVzaW5lc3MgZXhlY3V0aXZlXCI6XCJhXCIsZW50cmVwcmVuZXVyOlwiYVwiLFwiYnVzaW5lc3MgcGVyc29uXCI6XCJhXCIscHJvZmVzc2lvbmFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntidXNpbmVzc3dvbWFuOlwiZmVtYWxlXCIsc2FsYXJ5d29tYW46XCJmZW1hbGVcIixidXNpbmVzc21hbjpcIm1hbGVcIixzYWxhcnltYW46XCJtYWxlXCJ9fSx7aWQ6XCJzYWxhcnltZW4tc2FsYXJ5d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJidXNpbmVzcyBleGVjdXRpdmVzXCI6XCJhXCIsZW50cmVwcmVuZXVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVzaW5lc3N3b21lbjpcImZlbWFsZVwiLHNhbGFyeXdvbWVuOlwiZmVtYWxlXCIsXCJjYXJlZXIgZ2lybFwiOlwiZmVtYWxlXCIsXCJjYXJlZXIgd29tYW5cIjpcImZlbWFsZVwiLGJ1c2luZXNzbWVuOlwibWFsZVwiLHNhbGFyeW1lbjpcIm1hbGVcIn19LHtpZDpcImphbml0b3ItamFuaXRyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZWFuZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY2xlYW5pbmcgbGFkeVwiOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBnaXJsXCI6XCJmZW1hbGVcIixcImNsZWFuaW5nIHdvbWFuXCI6XCJmZW1hbGVcIixqYW5pdHJlc3M6XCJmZW1hbGVcIixcImNsZWFuaW5nIG1hblwiOlwibWFsZVwiLFwiY2xlYW5pbmcgYm95XCI6XCJtYWxlXCIsamFuaXRvcjpcIm1hbGVcIn19LHtpZDpcImphbml0b3JzLWphbml0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZWFuZXJzOlwiYVwiLGhvdXNla2VlcGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjbGVhbmluZyBsYWRpZXNcIjpcImZlbWFsZVwiLFwiY2xlYW5pbmcgZ2lybHNcIjpcImZlbWFsZVwiLGphbml0cmVzc2VzOlwiZmVtYWxlXCIsXCJjbGVhbmluZyBtZW5cIjpcIm1hbGVcIixqYW5pdG9yczpcIm1hbGVcIn19LHtpZDpcImRlbGl2ZXJ5LWJveS1kZWxpdmVyeS1naXJsXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NvdXJpZXI6XCJhXCIsbWVzc2VuZ2VyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImRlbGl2ZXJ5IGdpcmxcIjpcImZlbWFsZVwiLFwiZGVsaXZlcnkgYm95XCI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlbWFuLWZvcmV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzdXBlcnZpc29yOlwiYVwiLFwic2hpZnQgYm9zc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3Jld29tYW46XCJmZW1hbGVcIixmb3JlbWFuOlwibWFsZVwifX0se2lkOlwiZnJvbnRtYW4sLWZyb250LW1hbi1mcm9udHdvbWFuLC1mcm9udC13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntsZWFkOlwiYVwiLGZyb250OlwiYVwiLGZpZ3VyZWhlYWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZnJvbnR3b21hbiwgZnJvbnQgd29tYW5cIjpcImZlbWFsZVwiLFwiZnJvbnRtYW4sIGZyb250IG1hblwiOlwibWFsZVwifX0se2lkOlwiZnJvbnQtbWVuLC1mcm9udG1lbi1mcm9udC13b21lbiwtZnJvbnR3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmaWd1cmVoZWFkczpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmcm9udCB3b21lbiwgZnJvbnR3b21lblwiOlwiZmVtYWxlXCIsXCJmcm9udCBtZW4sIGZyb250bWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlbWVuLWZvcmV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzdXBlcnZpc29yczpcImFcIixcInNoaWZ0IGJvc3Nlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntmb3Jld29tZW46XCJmZW1hbGVcIixmb3JlbWVuOlwibWFsZVwifX0se2lkOlwiaW5zdXJhbmNlLW1hbi1pbnN1cmFuY2Utd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2UgYWdlbnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2Ugd29tYW5cIjpcImZlbWFsZVwiLFwiaW5zdXJhbmNlIG1hblwiOlwibWFsZVwifX0se2lkOlwiaW5zdXJhbmNlLW1lbi1pbnN1cmFuY2Utd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJpbnN1cmFuY2UgYWdlbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaW5zdXJhbmNlIHdvbWVuXCI6XCJmZW1hbGVcIixcImluc3VyYW5jZSBtZW5cIjpcIm1hbGVcIn19LHtpZDpcImxhbmRsYWR5LWxhbmRsb3JkXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb3ByaWV0b3I6XCJhXCIsXCJidWlsZGluZyBtYW5hZ2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbmRsYWR5OlwiZmVtYWxlXCIsbGFuZGxvcmQ6XCJtYWxlXCJ9fSx7aWQ6XCJsYW5kbGFkaWVzLWxhbmRsb3Jkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcm9wcmlldG9yczpcImFcIixcImJ1aWxkaW5nIG1hbmFnZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhbmRsYWRpZXM6XCJmZW1hbGVcIixsYW5kbG9yZHM6XCJtYWxlXCJ9fSx7aWQ6XCJhbHVtbmEtYWx1bW51c1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntncmFkdWF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWx1bW5hOlwiZmVtYWxlXCIsYWx1bW51czpcIm1hbGVcIn19LHtpZDpcImFsdW1uYWUtYWx1bW5pXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYWR1YXRlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWx1bW5hZTpcImZlbWFsZVwiLGFsdW1uaTpcIm1hbGVcIn19LHtpZDpcIm5ld3NtYW4tbmV3c3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FuY2hvcjpcImFcIixqb3VybmFsaXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntuZXdzd29tYW46XCJmZW1hbGVcIixuZXdzcGFwZXJ3b21hbjpcImZlbWFsZVwiLGFuY2hvcndvbWFuOlwiZmVtYWxlXCIsbmV3c21hbjpcIm1hbGVcIixuZXdzcGFwZXJtYW46XCJtYWxlXCIsYW5jaG9ybWFuOlwibWFsZVwifX0se2lkOlwibmV3c21lbi1uZXdzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7YW5jaG9yczpcImFcIixqb3VybmFsaXN0czpcImFcIn0saW5jb25zaWRlcmF0ZTp7bmV3c3dvbWVuOlwiZmVtYWxlXCIsbmV3c3BhcGVyd29tZW46XCJmZW1hbGVcIixhbmNob3J3b21lbjpcImZlbWFsZVwiLG5ld3NtZW46XCJtYWxlXCIsbmV3c3BhcGVybWVuOlwibWFsZVwiLGFuY2hvcm1lbjpcIm1hbGVcIn19LHtpZDpcInJlcGFpcm1hbi1yZXBhaXJ3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntyZXBhaXJlcjpcImFcIix0ZWNobmljaWFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyZXBhaXJ3b21hbjpcImZlbWFsZVwiLHJlcGFpcm1hbjpcIm1hbGVcIn19LHtpZDpcInJlcGFpcm1lbi1yZXBhaXJ3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0ZWNobmljaWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7cmVwYWlyd29tZW46XCJmZW1hbGVcIixyZXBhaXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzYWxlc2xhZHktc2FsZXNtYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2FsZXNwZXJzb246XCJhXCIsXCJzYWxlcyBjbGVya1wiOlwiYVwiLFwic2FsZXMgcmVwXCI6XCJhXCIsXCJzYWxlcyBhZ2VudFwiOlwiYVwiLFwic2FsZXMgYXR0ZW5kYW50XCI6XCJhXCIsc2VsbGVyOlwiYVwiLFwic2hvcCBhc3Npc3RhbnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FsZXN3b21hbjpcImZlbWFsZVwiLFwic2FsZXMgd29tYW5cIjpcImZlbWFsZVwiLHNhbGVzbGFkeTpcImZlbWFsZVwiLHNhbGVzbWFuOlwibWFsZVwiLFwic2FsZXMgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJzYWxlc21lbi1zYWxlc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic2FsZXMgY2xlcmtzXCI6XCJhXCIsXCJzYWxlcyByZXBzXCI6XCJhXCIsXCJzYWxlcyBhZ2VudHNcIjpcImFcIixzZWxsZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYWxlc3dvbWVuOlwiZmVtYWxlXCIsXCJzYWxlcyB3b21lblwiOlwiZmVtYWxlXCIsc2FsZXNsYWRpZXM6XCJmZW1hbGVcIixzYWxlc21lbjpcIm1hbGVcIixcInNhbGVzIG1lblwiOlwibWFsZVwifX0se2lkOlwic2VydmljZW1hbi1zZXJ2aWNld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c29sZGllcjpcImFcIixcInNlcnZpY2UgcmVwcmVzZW50YXRpdmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2VydmljZXdvbWFuOlwiZmVtYWxlXCIsc2VydmljZW1hbjpcIm1hbGVcIn19LHtpZDpcInNlcnZpY2VtZW4tc2VydmljZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NvbGRpZXJzOlwiYVwiLFwic2VydmljZSByZXByZXNlbnRhdGl2ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2VydmljZXdvbWVuOlwiZmVtYWxlXCIsc2VydmljZW1lbjpcIm1hbGVcIn19LHtpZDpcIndhaXRlci13YWl0cmVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzZXJ2ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dhaXRyZXNzOlwiZmVtYWxlXCIsd2FpdGVyOlwibWFsZVwifX0se2lkOlwid2FpdGVycy13YWl0cmVzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NlcnZlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dhaXRyZXNzZXM6XCJmZW1hbGVcIix3YWl0ZXJzOlwibWFsZVwifX0se2lkOlwid29ya21hbi13b3Jrd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d29ya2VyOlwiYVwiLFwid2FnZSBlYXJuZXJcIjpcImFcIix0YXhwYXllcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya3dvbWFuOlwiZmVtYWxlXCIsXCJ3b3JraW5nIHdvbWFuXCI6XCJmZW1hbGVcIix3b3JrbWFuOlwibWFsZVwiLFwid29ya2luZyBtYW5cIjpcIm1hbGVcIn19LHtpZDpcIndvcmttZW4td29ya3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3dvcmtlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dvcmt3b21lbjpcImZlbWFsZVwiLHdvcmttZW46XCJtYWxlXCJ9fSx7aWQ6XCJhY3Rvci1hY3RyZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BlcmZvcm1lcjpcImFcIixzdGFyOlwiYVwiLGFydGlzdDpcImFcIixlbnRlcnRhaW5lcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWN0cmVzczpcImZlbWFsZVwiLGFjdG9yOlwibWFsZVwifX0se2lkOlwiYWN0b3JzLWFjdHJlc3Nlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwZXJmb3JtZXJzOlwiYVwiLHN0YXJzOlwiYVwiLGFydGlzdHM6XCJhXCIsZW50ZXJ0YWluZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthY3RyZXNzZXM6XCJmZW1hbGVcIixhY3RvcnM6XCJtYWxlXCJ9fSx7aWQ6XCJhaXJjcmV3d29tYW4tYWlybWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BpbG90OlwiYVwiLGF2aWF0b3I6XCJhXCIsYWlyc3RhZmY6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2FpcmNyZXd3b21hbjpcImZlbWFsZVwiLFwiYWlyY3JldyB3b21hblwiOlwiZmVtYWxlXCIsYWlyY3Jld21hbjpcIm1hbGVcIixhaXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJhaXJjcmV3d29tZW4tYWlybWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BpbG90czpcImFcIixhdmlhdG9yczpcImFcIixhaXJzdGFmZjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWlyY3Jld3dvbWVuOlwiZmVtYWxlXCIsXCJhaXJjcmV3IHdvbWVuXCI6XCJmZW1hbGVcIixhaXJjcmV3bWVuOlwibWFsZVwiLGFpcm1lbjpcIm1hbGVcIn19LHtpZDpcImFsZGVybWFuLWFsZGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYWJpbmV0IG1lbWJlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnthbGRlcndvbWFuOlwiZmVtYWxlXCIsYWxkZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJhbGRlcm1lbi1hbGRlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NhYmluZXQ6XCJhXCIsXCJjYWJpbmV0IG1lbWJlcnNcIjpcImFcIixhbGRlcnBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YWxkZXJ3b21lbjpcImZlbWFsZVwiLGFsZGVybWVuOlwibWFsZVwifX0se2lkOlwiYXNzZW1ibHltYW4tYXNzZW1ibHl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImFzc2VtYmx5IHBlcnNvblwiOlwiYVwiLFwiYXNzZW1ibHkgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2Fzc2VtYmx5d29tYW46XCJmZW1hbGVcIixhc3NlbWJseW1hbjpcIm1hbGVcIn19LHtpZDpcImF1bnQtdW5jbGVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cmVsYXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2tpbnN3b21hbjpcImZlbWFsZVwiLGF1bnQ6XCJmZW1hbGVcIixraW5zbWFuOlwibWFsZVwiLHVuY2xlOlwibWFsZVwifX0se2lkOlwiYXVudHMtdW5jbGVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3JlbGF0aXZlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7a2luc3dvbWVuOlwiZmVtYWxlXCIsYXVudHM6XCJmZW1hbGVcIixraW5zbWVuOlwibWFsZVwiLHVuY2xlczpcIm1hbGVcIn19LHtpZDpcImJvb2dleW1hbi1ib29nZXl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib29nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29nZXl3b21hbjpcImZlbWFsZVwiLGJvb2dleW1hbjpcIm1hbGVcIn19LHtpZDpcImJvb2dpZW1hbi1ib29naWV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib29nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29naWV3b21hbjpcImZlbWFsZVwiLGJvb2dpZW1hbjpcIm1hbGVcIn19LHtpZDpcImJvZ2V5bWFuLWJvZ2V5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib2dleXdvbWFuOlwiZmVtYWxlXCIsYm9nZXltYW46XCJtYWxlXCJ9fSx7aWQ6XCJib2dpZW1hbi1ib2dpZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JvZ2V5bW9uc3RlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9naWV3b21hbjpcImZlbWFsZVwiLGJvZ2llbWFuOlwibWFsZVwifX0se2lkOlwiYm9vZ2llbWVuLWJvb2dpZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2Jvb2dleW1vbnN0ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntib29naWV3b21lbjpcImZlbWFsZVwiLGJvb2dpZW1lbjpcIm1hbGVcIn19LHtpZDpcImJvZ2llbWVuLWJvZ2lld29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9nZXltb25zdGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9naWV3b21lbjpcImZlbWFsZVwiLGJvZ2llbWVuOlwibWFsZVwifX0se2lkOlwiYm9uZHNtYW4tYm9uZHN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntib25kZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JvbmRzd29tYW46XCJmZW1hbGVcIixib25kc21hbjpcIm1hbGVcIn19LHtpZDpcImJvbmRzbWVuLWJvbmRzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Ym9uZGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7Ym9uZHN3b21lbjpcImZlbWFsZVwiLGJvbmRzbWVuOlwibWFsZVwifX0se2lkOlwiaHVzYmFuZC13aWZlXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXI6XCJhXCIsXCJzaWduaWZpY2FudCBvdGhlclwiOlwiYVwiLHNwb3VzZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2lmZTpcImZlbWFsZVwiLGh1c2JhbmQ6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJodXNiYW5kcy13aXZlc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJ0bmVyczpcImFcIixcInNpZ25pZmljYW50IG90aGVyc1wiOlwiYVwiLHNwb3VzZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dpdmVzOlwiZmVtYWxlXCIsaHVzYmFuZHM6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lmcmllbmQtZ2lybGZyaWVuZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwYXJ0bmVyOlwiYVwiLGZyaWVuZDpcImFcIixcInNpZ25pZmljYW50IG90aGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmxmcmllbmQ6XCJmZW1hbGVcIixib3lmcmllbmQ6XCJtYWxlXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vd3d3LmJ1c3RsZS5jb20vYXJ0aWNsZXMvMTA4MzIxLTYtcmVhc29ucy10by1yZWZlci10by15b3VyLXNpZ25pZmljYW50LW90aGVyLWFzLXlvdXItcGFydG5lclwifSx7aWQ6XCJib3lmcmllbmRzLWdpcmxmcmllbmRzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcnRuZXJzOlwiYVwiLGZyaWVuZHM6XCJhXCIsXCJzaWduaWZpY2FudCBvdGhlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybGZyaWVuZHM6XCJmZW1hbGVcIixib3lmcmllbmRzOlwibWFsZVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy5idXN0bGUuY29tL2FydGljbGVzLzEwODMyMS02LXJlYXNvbnMtdG8tcmVmZXItdG8teW91ci1zaWduaWZpY2FudC1vdGhlci1hcy15b3VyLXBhcnRuZXJcIn0se2lkOlwiYm95aG9vZC1naXJsaG9vZFwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGlsZGhvb2Q6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dpcmxob29kOlwiZmVtYWxlXCIsYm95aG9vZDpcIm1hbGVcIn19LHtpZDpcImJveWlzaC1naXJseVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaGlsZGlzaDpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2lybHk6XCJmZW1hbGVcIixnaXJsaXNoOlwiZmVtYWxlXCIsYm95aXNoOlwibWFsZVwifX0se2lkOlwiam91cm5leW1hbi1qb3VybmV5d29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7am91cm5leXBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7am91cm5leXdvbWFuOlwiZmVtYWxlXCIsam91cm5leW1hbjpcIm1hbGVcIn19LHtpZDpcImpvdXJuZXltZW4tam91cm5leXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2pvdXJuZXlwZXJzb25zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntqb3VybmV5d29tZW46XCJmZW1hbGVcIixqb3VybmV5bWVuOlwibWFsZVwifX0se2lkOlwiZ29kZmF0aGVyLWdvZG1vdGhlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntnb2RwYXJlbnQ6XCJhXCIsZWxkZXI6XCJhXCIscGF0cm9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntnb2Rtb3RoZXI6XCJmZW1hbGVcIixwYXRyb25lc3M6XCJmZW1hbGVcIixnb2RmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJncmFuZGRhdWdodGVyLWdyYW5kc29uXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kY2hpbGQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kZGF1Z2h0ZXI6XCJmZW1hbGVcIixncmFuZHNvbjpcIm1hbGVcIn19LHtpZDpcImdyYW5kZGF1Z2h0ZXJzLWdyYW5kc29uc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntncmFuZGNoaWxkcmVuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFuZGRhdWdodGVyczpcImZlbWFsZVwiLGdyYW5kc29uczpcIm1hbGVcIn19LHtpZDpcImZvcmVmYXRoZXItZm9yZW1vdGhlclwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNlc3RvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Zm9yZW1vdGhlcjpcImZlbWFsZVwiLGZvcmVmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJmb3JlZmF0aGVycy1mb3JlbW90aGVyc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthbmNlc3RvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZvcmVtb3RoZXJzOlwiZmVtYWxlXCIsZm9yZWZhdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJncmFtcHMtZ3Jhbm55XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kcGFyZW50OlwiYVwiLGFuY2VzdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntncmFubnk6XCJmZW1hbGVcIixncmFuZG1hOlwiZmVtYWxlXCIsZ3JhbmRtb3RoZXI6XCJmZW1hbGVcIixncmFuZHBhcHB5OlwibWFsZVwiLGdyYW5kZGFkZHk6XCJtYWxlXCIsZ3JhbXBzOlwibWFsZVwiLGdyYW5kcGE6XCJtYWxlXCIsZ3JhbmRmYXRoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJncmFuZGZhdGhlcnMtZ3JhbmRtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2dyYW5kcGFyZW50czpcImFcIixhbmNlc3RvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2dyYW5kbW90aGVyczpcImZlbWFsZVwiLGdyYW5kZmF0aGVyczpcIm1hbGVcIn19LHtpZDpcImJyaWRlLWdyb29tXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Nwb3VzZTpcImFcIixuZXdseXdlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnJpZGU6XCJmZW1hbGVcIixncm9vbTpcIm1hbGVcIn19LHtpZDpcImJyb3RoZXItc2lzdGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpYmxpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Npc3RlcjpcImZlbWFsZVwiLGJyb3RoZXI6XCJtYWxlXCJ9fSx7aWQ6XCJicm90aGVycy1zaXN0ZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NpYmxpbmdzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaXN0ZXJzOlwiZmVtYWxlXCIsYnJvdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJjYW1lcmFtYW4tY2FtZXJhd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYW1lcmEgb3BlcmF0b3JcIjpcImFcIixcImNhbWVyYSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y2FtZXJhd29tYW46XCJmZW1hbGVcIixjYW1lcmFtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjYW1lcmFtZW4tY2FtZXJhd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJjYW1lcmEgb3BlcmF0b3JzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhbWVyYXdvbWVuOlwiZmVtYWxlXCIsY2FtZXJhbWVuOlwibWFsZVwifX0se2lkOlwiY2F2ZW1hbi1jYXZld29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7dHJvZ2xvZHl0ZTpcImFcIixob21pbmlkYWU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NhdmV3b21hbjpcImZlbWFsZVwiLGNhdmVtYW46XCJtYWxlXCJ9fSx7aWQ6XCJjYXZlbWVuLWNhdmV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt0cm9nbG9keXRhZTpcImFcIix0cm9nbG9keXRpOlwiYVwiLHRyb2dsb2R5dGVzOlwiYVwiLGhvbWluaWRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjYXZld29tZW46XCJmZW1hbGVcIixjYXZlbWVuOlwibWFsZVwifX0se2lkOlwiY2xlcmd5bWFuLWNsZXJneXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NsZXJneXBlcnNvbjpcImFcIixjbGVyZ3k6XCJhXCIsY2xlcmljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjbGVyZ3l3b21hbjpcImZlbWFsZVwiLGNsZXJneW1hbjpcIm1hbGVcIn19LHtpZDpcImNsZXJneW1lbi1jbGVyZ3l3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjbGVyZ2llczpcImFcIixjbGVyaWNzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjbGVyZ3l3b21lbjpcImZlbWFsZVwiLGNsZXJneW1lbjpcIm1hbGVcIn19LHtpZDpcImNvdW5jaWxtYW4tY291bmNpbHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bmNpbCBtZW1iZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Y291bmNpbHdvbWFuOlwiZmVtYWxlXCIsY291bmNpbG1hbjpcIm1hbGVcIn19LHtpZDpcImNvdW5jaWxtZW4tY291bmNpbHdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wiY291bmNpbCBtZW1iZXJzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW5jaWx3b21lbjpcImZlbWFsZVwiLGNvdW5jaWxtZW46XCJtYWxlXCJ9fSx7aWQ6XCJjb3VudHJ5bWFuLWNvdW50cnl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvdW50cnkgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2NvdW50cnl3b21hbjpcImZlbWFsZVwiLGNvdW50cnltYW46XCJtYWxlXCJ9fSx7aWQ6XCJjb3VudHJ5bWVuLWNvdW50cnl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImNvdW50cnkgZm9sa1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjb3VudHJ5d29tZW46XCJmZW1hbGVcIixjb3VudHJ5bWVuOlwibWFsZVwifX0se2lkOlwiaGFuZHltYW4taGFuZHl3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthcnRpc2FuOlwiYVwiLGNyYWZ0c3BlcnNvbjpcImFcIixcInNraWxsZWQgd29ya2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hhbmR5d29tYW46XCJmZW1hbGVcIixjcmFmdHN3b21hbjpcImZlbWFsZVwiLGhhbmR5bWFuOlwibWFsZVwiLGNyYWZ0c21hbjpcIm1hbGVcIn19LHtpZDpcImhvc3QtaG9zdGVzc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntwcmVzZW50ZXI6XCJhXCIsZW50ZXJ0YWluZXI6XCJhXCIsZW1jZWU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvc3Rlc3M6XCJmZW1hbGVcIixob3N0OlwibWFsZVwifX0se2lkOlwiaG9zdGVzc2VzLWhvc3RzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3ByZXNlbnRlcnM6XCJhXCIsZW50ZXJ0YWluZXJzOlwiYVwiLGVtY2VlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG9zdGVzc2VzOlwiZmVtYWxlXCIsaG9zdHM6XCJtYWxlXCJ9fSx7aWQ6XCJoYW5keW1lbi1oYW5keXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FydGlzYW5zOlwiYVwiLGNyYWZ0c3BlcnNvbnM6XCJhXCIsXCJza2lsbGVkIHdvcmtlcnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZHl3b21lbjpcImZlbWFsZVwiLGNyYWZ0c3dvbWVuOlwiZmVtYWxlXCIsaGFuZHltZW46XCJtYWxlXCIsY3JhZnRzbWVuOlwibWFsZVwifX0se2lkOlwiaGFuZ21hbi1oYW5nd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Z3VpbGxvdGluZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGFuZ3dvbWFuOlwiZmVtYWxlXCIsaGFuZ21hbjpcIm1hbGVcIn19LHtpZDpcImhhbmdtZW4taGFuZ3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2d1aWxsb3RpbmVzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nd29tZW46XCJmZW1hbGVcIixoYW5nbWVuOlwibWFsZVwifX0se2lkOlwiaGVuY2htYW4taGVuY2h3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaWRla2ljazpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVuY2h3b21hbjpcImZlbWFsZVwiLGhlbmNobWFuOlwibWFsZVwifX0se2lkOlwiaGVuY2htZW4taGVuY2h3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzaWRla2lja3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlbmNod29tZW46XCJmZW1hbGVcIixoZW5jaG1lbjpcIm1hbGVcIn19LHtpZDpcImhlcm8taGVyb2luZVwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInJvbGUtbW9kZWxcIjpcImFcIixtZW50b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm9pbmU6XCJmZW1hbGVcIixoZXJvOlwibWFsZVwifX0se2lkOlwiaGVyb2VzLWhlcm9pbmVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wicm9sZS1tb2RlbHNcIjpcImFcIixtZW50b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm9pbmVzOlwiZmVtYWxlXCIsaGVyb2VzOlwibWFsZVwifX0se2lkOlwibWF0ZXJuYWwtcGF0ZXJuYWxcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50YWw6XCJhXCIsd2FybTpcImFcIixpbnRpbWF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWF0ZXJuYWw6XCJmZW1hbGVcIixwYXRlcm5hbDpcIm1hbGVcIixmcmF0ZXJuYWw6XCJtYWxlXCJ9fSx7aWQ6XCJtYXRlcm5pdHktcGF0ZXJuaXR5XCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcmVudGFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXRlcm5pdHk6XCJmZW1hbGVcIixwYXRlcm5pdHk6XCJtYWxlXCJ9fSx7aWQ6XCJkYWRzLW1vbXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cGFyZW50czpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFtYXM6XCJmZW1hbGVcIixtb3RoZXJzOlwiZmVtYWxlXCIsbW9tczpcImZlbWFsZVwiLG11bXM6XCJmZW1hbGVcIixtb21tYXM6XCJmZW1hbGVcIixtb21taWVzOlwiZmVtYWxlXCIscGFwYXM6XCJtYWxlXCIsZmF0aGVyczpcIm1hbGVcIixkYWRzOlwibWFsZVwiLGRhZGRpZXM6XCJtYWxlXCJ9fSx7aWQ6XCJkYWQtbW9tXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3BhcmVudDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFtYTpcImZlbWFsZVwiLG1vdGhlcjpcImZlbWFsZVwiLG1vbTpcImZlbWFsZVwiLG11bTpcImZlbWFsZVwiLG1vbW1hOlwiZmVtYWxlXCIsbW9tbXk6XCJmZW1hbGVcIixwYXBhOlwibWFsZVwiLGZhdGhlcjpcIm1hbGVcIixkYWQ6XCJtYWxlXCIscG9wOlwibWFsZVwiLGRhZGR5OlwibWFsZVwifX0se2lkOlwiZGF1Z2h0ZXItc29uXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYXVnaHRlcjpcImZlbWFsZVwiLHNvbjpcIm1hbGVcIn19LHtpZDpcImRhdWdodGVycy1zb25zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NoaWxkcmVuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkYXVnaHRlcnM6XCJmZW1hbGVcIixzb25zOlwibWFsZVwifX0se2lkOlwiZG9vcm1hbi1kb29yd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y29uY2llcmdlOlwiYVwifSxpbmNvbnNpZGVyYXRlOntkb29yd29tYW46XCJmZW1hbGVcIixkb29ybWFuOlwibWFsZVwifX0se2lkOlwiZG9vcm1lbi1kb29yd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y29uY2llcmdlczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZG9vcndvbWVuOlwiZmVtYWxlXCIsZG9vcm1lbjpcIm1hbGVcIn19LHtpZDpcImZlbWluaW4tbWFubHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5seTpcImFcIixtYXR1cmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZlbWluaW46XCJmZW1hbGVcIixkdWRlbHk6XCJtYWxlXCIsbWFubHk6XCJtYWxlXCJ9fSx7aWQ6XCJmZW1hbGVzLW1hbGVzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2h1bWFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVtYWxlczpcImZlbWFsZVwiLG1hbGVzOlwibWFsZVwifX0se2lkOlwia2luZy1xdWVlblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntydWxlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZW1wcmVzczpcImZlbWFsZVwiLHF1ZWVuOlwiZmVtYWxlXCIsZW1wZXJvcjpcIm1hbGVcIixraW5nOlwibWFsZVwifX0se2lkOlwia2luZ3MtcXVlZW5zXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3J1bGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZW1wcmVzc2VzOlwiZmVtYWxlXCIscXVlZW5zOlwiZmVtYWxlXCIsZW1wZXJvcnM6XCJtYWxlXCIsa2luZ3M6XCJtYWxlXCJ9fSx7aWQ6XCJraW5nc2l6ZS1xdWVlbnNpemVcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7anVtYm86XCJhXCIsZ2lnYW50aWM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3F1ZWVuc2l6ZTpcImZlbWFsZVwiLGtpbmdzaXplOlwibWFsZVwifX0se2lkOlwia2luZ21ha2VyLXF1ZWVubWFrZXJcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJwb3dlciBiZWhpbmQgdGhlIHRocm9uZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntxdWVlbm1ha2VyOlwiZmVtYWxlXCIsa2luZ21ha2VyOlwibWFsZVwifX0se2lkOlwibGF5bWFuLWxheXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2NpdmlsaWFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntsYXl3b21hbjpcImZlbWFsZVwiLGxheW1hbjpcIm1hbGVcIn19LHtpZDpcImxheW1lbi1sYXl3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntjaXZpbGlhbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xheXdvbWVuOlwiZmVtYWxlXCIsbGF5bWVuOlwibWFsZVwifX0se2lkOlwiZGFtZS1sb3JkXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e29mZmljaWFsOlwiYVwiLG93bmVyOlwiYVwiLGV4cGVydDpcImFcIixzdXBlcmlvcjpcImFcIixjaGllZjpcImFcIixydWxlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFtZTpcImZlbWFsZVwiLGxvcmQ6XCJtYWxlXCJ9fSx7aWQ6XCJkYW1lcy1sb3Jkc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntvZmZpY2lhbHM6XCJhXCIsY2hpZWZzOlwiYVwiLHJ1bGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZGFtZXM6XCJmZW1hbGVcIixsb3JkczpcIm1hbGVcIn19LHtpZDpcIm1hbmhvb2Qtd29tYW5ob29kXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FkdWx0aG9vZDpcImFcIixwZXJzb25ob29kOlwiYVwiLG1hdHVyaXR5OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3b21hbmhvb2Q6XCJmZW1hbGVcIixtYXNjdWxpbml0eTpcIm1hbGVcIixtYW5ob29kOlwibWFsZVwifX0se2lkOlwiZmVtaW5pbml0eS1tYW5saW5lc3NcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aHVtYW5pdHk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZlbWluaW5pdHk6XCJmZW1hbGVcIixtYW5saW5lc3M6XCJtYWxlXCJ9fSx7aWQ6XCJtYXJrc21hbi1tYXJrc3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Nob290ZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hcmtzd29tYW46XCJmZW1hbGVcIixtYXJrc21hbjpcIm1hbGVcIn19LHtpZDpcIm1hcmtzbWVuLW1hcmtzd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2hvb3RlcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hcmtzd29tZW46XCJmZW1hbGVcIixtYXJrc21lbjpcIm1hbGVcIn19LHtpZDpcIm1pZGRsZW1hbi1taWRkbGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntpbnRlcm1lZGlhcnk6XCJhXCIsXCJnby1iZXR3ZWVuXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pZGRsZXdvbWFuOlwiZmVtYWxlXCIsbWlkZGxlbWFuOlwibWFsZVwifX0se2lkOlwibWlkZGxlbWVuLW1pZGRsZXdvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ludGVybWVkaWFyaWVzOlwiYVwiLFwiZ28tYmV0d2VlbnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWlkZGxld29tZW46XCJmZW1hbGVcIixtaWRkbGVtZW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWxrbWFuLW1pbGt3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1pbGsgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pbGt3b21hbjpcImZlbWFsZVwiLG1pbGttYW46XCJtYWxlXCJ9fSx7aWQ6XCJtaWxrbWVuLW1pbGt3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm1pbGsgcGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21pbGt3b21lbjpcImZlbWFsZVwiLG1pbGttZW46XCJtYWxlXCJ9fSx7aWQ6XCJuZXBoZXctbmllY2VcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7bmlibGluZzpcImFcIixcInNpYmxpbmfigJlzIGNoaWxkXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25pZWNlOlwiZmVtYWxlXCIsbmVwaGV3OlwibWFsZVwifX0se2lkOlwibmVwaGV3cy1uaWVjZXNcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7bmlibGluZ3M6XCJhXCIsXCJzaWJsaW5n4oCZcyBjaGlsZHJlblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntuaWVjZXM6XCJmZW1hbGVcIixuZXBoZXdzOlwibWFsZVwifX0se2lkOlwibm9ibGVtYW4tbm9ibGV3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub2JsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bm9ibGV3b21hbjpcImZlbWFsZVwiLG5vYmxlbWFuOlwibWFsZVwifX0se2lkOlwibm9ibGVtZW4tbm9ibGV3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub2JsZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e25vYmxld29tZW46XCJmZW1hbGVcIixub2JsZW1lbjpcIm1hbGVcIn19LHtpZDpcIm9tYnVkc21hbi1vbWJ1ZHN3b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub3Rhcnk6XCJhXCIsXCJjb25zdW1lciBhZHZvY2F0ZVwiOlwiYVwiLFwidHJvdWJsZSBzaG9vdGVyXCI6XCJhXCIsb21zYnVkcGVyc29uOlwiYVwiLG1lZGlhdG9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntvbWJ1ZHN3b21hbjpcImZlbWFsZVwiLG9tYnVkc21hbjpcIm1hbGVcIn19LHtpZDpcIm9tYnVkc21lbi1vbWJ1ZHN3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntub3RhcmllczpcImFcIixvbXNidWRwZXJzb25zOlwiYVwiLG9tc2J1ZHBlb3BsZTpcImFcIixtZWRpYXRvcnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29tYnVkc3dvbWVuOlwiZmVtYWxlXCIsb21idWRzbWVuOlwibWFsZVwifX0se2lkOlwicHJpbmNlLXByaW5jZXNzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2hlaXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW5jZXNzOlwiZmVtYWxlXCIscHJpbmNlOlwibWFsZVwifX0se2lkOlwicHJpbmNlcy1wcmluY2Vzc2VzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2hlaXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwcmluY2Vzc2VzOlwiZmVtYWxlXCIscHJpbmNlczpcIm1hbGVcIn19LHtpZDpcInNhbmRtYW4tc2FuZHdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2ZhaXJ5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntzYW5kd29tYW46XCJmZW1hbGVcIixzYW5kbWFuOlwibWFsZVwifX0se2lkOlwic2FuZG1lbi1zYW5kd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFpcmllczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2FuZHdvbWVuOlwiZmVtYWxlXCIsc2FuZG1lbjpcIm1hbGVcIn19LHtpZDpcInNob3dtYW4tc2hvd3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Byb21vdGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaG93d29tYW46XCJmZW1hbGVcIixzaG93bWFuOlwibWFsZVwifX0se2lkOlwic2hvd21lbi1zaG93d29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7cHJvbW90ZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzaG93d29tZW46XCJmZW1hbGVcIixcInNob3cgd29tZW5cIjpcImZlbWFsZVwiLHNob3dtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcGFjZW1hbi1zcGFjZXdvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2FzdHJvbmF1dDpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhY2V3b21hbjpcImZlbWFsZVwiLHNwYWNlbWFuOlwibWFsZVwifX0se2lkOlwic3BhY2VtZW4tc3BhY2V3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnthc3Ryb25hdXRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzcGFjZXdvbWVuOlwiZmVtYWxlXCIsc3BhY2VtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzcG9rZXNtYW4tc3Bva2Vzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c3BlYWtlcjpcImFcIixzcG9rZXNwZXJzb246XCJhXCIscmVwcmVzZW50YXRpdmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb2tlc3dvbWFuOlwiZmVtYWxlXCIsc3Bva2VzbWFuOlwibWFsZVwifX0se2lkOlwic3Bva2VzbWVuLXNwb2tlc3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NwZWFrZXJzOlwiYVwiLHNwb2tlc3BlcnNvbnM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb2tlc3dvbWVuOlwiZmVtYWxlXCIsc3Bva2VzbWVuOlwibWFsZVwifX0se2lkOlwic3BvcnRzbWFuLXNwb3J0c3dvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2F0aGxldGU6XCJhXCIsXCJzcG9ydHMgcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb3J0c3dvbWFuOlwiZmVtYWxlXCIsc3BvcnRzbWFuOlwibWFsZVwifX0se2lkOlwic3BvcnRzbWVuLXNwb3J0c3dvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2F0aGxldGVzOlwiYVwiLFwic3BvcnRzIHBlcnNvbnNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzd29tZW46XCJmZW1hbGVcIixzcG9ydHNtZW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGF0ZXNtYW4tc3RhdGVzd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7c2VuYXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RhdGVzd29tYW46XCJmZW1hbGVcIixzdGF0ZXNtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzdGVwYnJvdGhlci1zdGVwc2lzdGVyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1zaWJsaW5nXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBzaXN0ZXI6XCJmZW1hbGVcIixzdGVwYnJvdGhlcjpcIm1hbGVcIn19LHtpZDpcInN0ZXBicm90aGVycy1zdGVwc2lzdGVyc1wiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0ZXAtc2libGluZ3NcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3RlcHNpc3RlcnM6XCJmZW1hbGVcIixzdGVwYnJvdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJzdGVwZGFkLXN0ZXBtb21cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJzdGVwLXBhcmVudFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGVwbW9tOlwiZmVtYWxlXCIsc3RlcG1vdGhlcjpcImZlbWFsZVwiLHN0ZXBkYWQ6XCJtYWxlXCIsc3RlcGZhdGhlcjpcIm1hbGVcIn19LHtpZDpcInN0ZXBmYXRoZXJzLXN0ZXBtb3RoZXJzXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e1wic3RlcC1wYXJlbnRzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3N0ZXBtb3RoZXJzOlwiZmVtYWxlXCIsc3RlcGZhdGhlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJzdXBlcm1hbi1zdXBlcndvbWFuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RpdGFuOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdXBlcndvbWFuOlwiZmVtYWxlXCIsc3VwZXJtYW46XCJtYWxlXCJ9fSx7aWQ6XCJzdXBlcm1lbi1zdXBlcndvbWVuXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3RpdGFuczpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3VwZXJ3b21lbjpcImZlbWFsZVwiLHN1cGVybWVuOlwibWFsZVwifX0se2lkOlwidW5tYW5seS11bndvbWFubHlcIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7aW5odW1hbmU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Vud29tYW5seTpcImZlbWFsZVwiLHVud29tZW5seTpcImZlbWFsZVwiLHVubWFubHk6XCJtYWxlXCIsdW5tZW5seTpcIm1hbGVcIn19LHtpZDpcIndhdGNobWFuLXdhdGNod29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7d2F0Y2hlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2F0Y2h3b21hbjpcImZlbWFsZVwiLHdhdGNobWFuOlwibWFsZVwifX0se2lkOlwid2F0Y2htZW4td2F0Y2h3b21lblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt3YXRjaGVyczpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2F0Y2h3b21lbjpcImZlbWFsZVwiLHdhdGNobWVuOlwibWFsZVwifX0se2lkOlwid2VhdGhlcm1hbi13ZWF0aGVyd29tYW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ3ZWF0aGVyIGZvcmVjYXN0ZXJcIjpcImFcIixtZXRlb3JvbG9naXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3ZWF0aGVyd29tYW46XCJmZW1hbGVcIix3ZWF0aGVybWFuOlwibWFsZVwifX0se2lkOlwid2VhdGhlcm1lbi13ZWF0aGVyd29tZW5cIix0eXBlOlwib3JcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiLFwibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ3ZWF0aGVyIGZvcmVjYXN0ZXJzXCI6XCJhXCIsbWV0ZW9yb2xvZ2lzdHM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3dlYXRoZXJ3b21lbjpcImZlbWFsZVwiLHdlYXRoZXJtZW46XCJtYWxlXCJ9fSx7aWQ6XCJ3aWRvdy13aWRvd2VyXCIsdHlwZTpcIm9yXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIixcIm1hbGVcIl0sY29uc2lkZXJhdGU6e2JlcmVhdmVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aWRvdzpcImZlbWFsZVwiLHdpZG93czpcImZlbWFsZVwiLHdpZG93ZXI6XCJtYWxlXCIsd2lkb3dlcnM6XCJtYWxlXCJ9fSx7aWQ6XCJvd24tbWFuLW93bi13b21hblwiLHR5cGU6XCJvclwiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCIsXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIm93biBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJvd24gd29tYW5cIjpcImZlbWFsZVwiLFwib3duIG1hblwiOlwibWFsZVwifX0se2lkOlwiZnJlbmNobWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmcmVuY2g6XCJhXCIsXCJ0aGUgZnJlbmNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZW5jaG1lbjpcIm1hbGVcIn19LHtpZDpcImxhZHlsaWtlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e2NvdXJ0ZW91czpcImFcIixjdWx0dXJlZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bGFkeWxpa2U6XCJmZW1hbGVcIn19LHtpZDpcImxpa2UtYS1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Jlc29sdXRlbHk6XCJhXCIsYnJhdmVseTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsaWtlIGEgbWFuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tbmFtZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntcImJpcnRoIG5hbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gbmFtZVwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tdm95YWdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3Qgdm95YWdlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIHZveWFnZVwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYWlkZW4tZmxpZ2h0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJmZW1hbGVcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3QgZmxpZ2h0XCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIGZsaWdodFwiOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYW4tZW5vdWdoXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0cm9uZyBlbm91Z2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gZW5vdWdoXCI6XCJtYWxlXCJ9fSx7aWQ6XCJvbmV1cG1hbnNoaXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3Vwc3RhZ2luZzpcImFcIixjb21wZXRpdGl2ZW5lc3M6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29uZXVwbWFuc2hpcDpcIm1hbGVcIn19LHtpZDpcIm1ycy1cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJtcy5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtaXNzLlwiOlwiZmVtYWxlXCIsXCJtcnMuXCI6XCJmZW1hbGVcIn19LHtpZDpcIm1hbm1hZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e21hbnVmYWN0dXJlZDpcImFcIixhcnRpZmljaWFsOlwiYVwiLHN5bnRoZXRpYzpcImFcIixcIm1hY2hpbmUtbWFkZVwiOlwiYVwiLGNvbnN0cnVjdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5tYWRlOlwibWFsZVwifX0se2lkOlwibWFuLW9mLWFjdGlvblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZHluYW1vOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiBhY3Rpb25cIjpcIm1hbGVcIn19LHtpZDpcIm1hbi1vZi1sZXR0ZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzY2hvbGFyOlwiYVwiLHdyaXRlcjpcImFcIixcImxpdGVyYXJ5IGZpZ3VyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiBsZXR0ZXJzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW4tb2YtdGhlLXdvcmxkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntzb3BoaXN0aWNhdGU6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIG9mIHRoZSB3b3JsZFwiOlwibWFsZVwifX0se2lkOlwiZmVsbG93c2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7Y2FtYXJhZGVyaWU6XCJhXCIsY29tbXVuaXR5OlwiYVwiLG9yZ2FuaXphdGlvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZmVsbG93c2hpcDpcIm1hbGVcIn19LHtpZDpcImZyZXNobWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcImZpcnN0LXllYXIgc3R1ZGVudFwiOlwiYVwiLGZyZXNoZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2ZyZXNobWFuOlwibWFsZVwiLGZyZXNod29tYW46XCJtYWxlXCJ9fSx7aWQ6XCJ3b3JrbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJxdWFsaXR5IGNvbnN0cnVjdGlvblwiOlwiYVwiLGV4cGVydGlzZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7d29ya21hbnNoaXA6XCJtYWxlXCJ9fSx7aWQ6XCJob3VzZXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImZlbWFsZVwiXSxjb25zaWRlcmF0ZTp7aG9tZW1ha2VyOlwiYVwiLGhvbWV3b3JrZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hvdXNld2lmZTpcImZlbWFsZVwifX0se2lkOlwiaG91c2V3aXZlc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntob21lbWFrZXJzOlwiYVwiLGhvbWV3b3JrZXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob3VzZXdpdmVzOlwiZmVtYWxlXCJ9fSx7aWQ6XCJtb3RoZXJseVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiZmVtYWxlXCJdLGNvbnNpZGVyYXRlOntsb3Zpbmc6XCJhXCIsd2FybTpcImFcIixudXJ0dXJpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21vdGhlcmx5OlwiZmVtYWxlXCJ9fSx7aWQ6XCJtYW5wb3dlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJodW1hbiByZXNvdXJjZXNcIjpcImFcIix3b3JrZm9yY2U6XCJhXCIscGVyc29ubmVsOlwiYVwiLHN0YWZmOlwiYVwiLGxhYm9yOlwiYVwiLFwibGFib3IgZm9yY2VcIjpcImFcIixzdGFmZmluZzpcImFcIixcImNvbWJhdCBwZXJzb25uZWxcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFucG93ZXI6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXItb2YtY2VyZW1vbmllc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZW1jZWU6XCJhXCIsbW9kZXJhdG9yOlwiYVwiLGNvbnZlbm9yOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciBvZiBjZXJlbW9uaWVzXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJmdWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcIm1hbGVcIl0sY29uc2lkZXJhdGU6e3NraWxsZWQ6XCJhXCIsYXV0aG9yaXRhdGl2ZTpcImFcIixjb21tYW5kaW5nOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJmdWw6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJtaW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntnZW5pdXM6XCJhXCIsY3JlYXRvcjpcImFcIixpbnN0aWdhdG9yOlwiYVwiLG92ZXJzZWU6XCJhXCIsbGF1bmNoOlwiYVwiLG9yaWdpbmF0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVybWluZDpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnBpZWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcIndvcmsgb2YgZ2VuaXVzXCI6XCJhXCIsXCJjaGVmIGTigJlvZXV2cmVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVycGllY2U6XCJtYWxlXCJ9fSx7aWQ6XCJtYXN0ZXJwbGFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOnt2aXNpb246XCJhXCIsXCJjb21wcmVoZW5zaXZlIHBsYW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFzdGVycGxhbjpcIm1hbGVcIn19LHtpZDpcIm1hc3RlcnN0cm9rZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7XCJ0cnVtcCBjYXJkXCI6XCJhXCIsXCJzdHJva2Ugb2YgZ2VuaXVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcnN0cm9rZTpcIm1hbGVcIn19LHtpZDpcIm1hZG1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wibWFsZVwiXSxjb25zaWRlcmF0ZTp7ZmFuYXRpYzpcImFcIix6ZWFsb3Q6XCJhXCIsZW50aHVzaWFzdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFkbWFuOlwibWFsZVwiLFwibWFkIG1hblwiOlwibWFsZVwifX0se2lkOlwibWFkbWVuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntmYW5hdGljczpcImFcIix6ZWFsb3RzOlwiYVwiLGVudGh1c2lhc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYWRtZW46XCJtYWxlXCIsXCJtYWQgbWVuXCI6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5raW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntodW1hbmtpbmQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hbmtpbmQ6XCJtYWxlXCJ9fSx7aWQ6XCJtYW5ob3VyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIGhvdXJcIjpcImFcIixcImhvdXIgb2Ygd29ya1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5ob3VyOlwibWFsZVwiLFwibWFuIGhvdXJcIjpcIm1hbGVcIn19LHtpZDpcIm1hbmhvdXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJtYWxlXCJdLGNvbnNpZGVyYXRlOntcInN0YWZmIGhvdXJzXCI6XCJhXCIsXCJob3VycyBvZiB3b3JrXCI6XCJhXCIsXCJob3VycyBvZiBsYWJvclwiOlwiYVwiLGhvdXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5ob3VyczpcIm1hbGVcIixcIm1hbiBob3Vyc1wiOlwibWFsZVwifX0se2lkOlwibWFubmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzdGFmZmVkOlwiYVwiLGNyZXdlZDpcImFcIixwaWxvdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYW5uZWQ6XCJhXCJ9LG5vdGU6XCJVc2luZyBnZW5kZXIgbmV1dHJhbCBsYW5ndWFnZSBtZWFucyB1c2VycyB3aWxsIGhlbHAgdG8gYnJlYWsgdXAgZ2VuZGVyIHN0ZXJlb3R5cGVzLlwifSx7aWQ6XCJ1bm1hbm5lZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cm9ib3RpYzpcImFcIixhdXRvbWF0ZWQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3VubWFubmVkOlwiYVwifSxub3RlOlwiVXNpbmcgZ2VuZGVyIG5ldXRyYWwgbGFuZ3VhZ2UgbWVhbnMgdXNlcnMgd2lsbCBoZWxwIHRvIGJyZWFrIHVwIGdlbmRlciBzdGVyZW90eXBlcy5cIn0se2lkOlwibW9hbmluZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7d2hpbmluZzpcImFcIixjb21wbGFpbmluZzpcImFcIixjcnlpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpdGNoaW5nOlwiYVwiLG1vYW5pbmc6XCJhXCJ9fSx7aWQ6XCJtb2FuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt3aGluZTpcImFcIixjb21wbGFpbjpcImFcIixjcnk6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2JpdGNoOlwiYVwiLG1vYW46XCJhXCJ9fSx7aWQ6XCJ3aWZlYmVhdGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRhbmsgdG9wXCI6XCJhXCIsXCJzbGVldmVsZXNzIHVuZGVyc2hpcnRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3aWZlIGJlYXRlclwiOlwiYVwiLHdpZmViZWF0ZXI6XCJhXCJ9fSx7aWQ6XCJhbmNpZW50LW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhbmNpZW50IGNpdmlsaXphdGlvblwiOlwiYVwiLFwiYW5jaWVudCBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJhbmNpZW50IG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF1dGhvcmVzc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXV0aG9yOlwiYVwiLHdyaXRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXV0aG9yZXNzOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2ZXJhZ2UtaG91c2V3aWZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgY29uc3VtZXJcIjpcImFcIixcImF2ZXJhZ2UgaG91c2Vob2xkXCI6XCJhXCIsXCJhdmVyYWdlIGhvbWVtYWtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2UgaG91c2V3aWZlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYXZlcmFnZS1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJhdmVyYWdlIG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImF2ZXJhZ2Utd29ya2luZy1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYXZlcmFnZSB3YWdlIGVhcm5lclwiOlwiYVwiLFwiYXZlcmFnZSB0YXhwYXllclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImF2ZXJhZ2Ugd29ya2luZyBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJhdmlhdHJpeFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7YXZpYXRvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YXZpYXRyaXg6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiYnJvdGhlcmhvb2Qtb2YtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBodW1hbiBmYW1pbHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJicm90aGVyaG9vZCBvZiBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjYWxlbmRhci1naXJsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttb2RlbDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjYWxlbmRhciBnaXJsXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiY2FsbC1naXJsXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntlc2NvcnQ6XCJhXCIscHJvc3RpdHV0ZTpcImFcIixcInNleCB3b3JrZXJcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjYWxsIGdpcmxcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJjaHVyY2htYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NsZXJpYzpcImFcIixcInByYWN0aWNpbmcgQ2hyaXN0aWFuXCI6XCJhXCIsXCJwaWxsYXIgb2YgdGhlIENodXJjaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntjaHVyY2htYW46XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZW5nbGlzaC1tYXN0ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZW5nbGlzaCBjb29yZGluYXRvclwiOlwiYVwiLFwic2VuaW9yIHRlYWNoZXIgb2YgZW5nbGlzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImVuZ2xpc2ggbWFzdGVyXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiZW5nbGlzaG1lblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0aGUgZW5nbGlzaFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlbmdsaXNobWVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImV4ZWN1dHJpeFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZXhlY3V0b3I6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2V4ZWN1dHJpeDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJmYXRoZXItb2YtKlwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJmb3VuZGVyIG9mXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZmF0aGVyIG9mICpcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJmb3VuZGluZy1mYXRoZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widGhlIGZvdW5kZXJzXCI6XCJhXCIsXCJmb3VuZGluZyBsZWFkZXJzXCI6XCJhXCIsZm9yZWJlYXJzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImZvdW5kaW5nIGZhdGhlclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImhvdXNlbWFpZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJob3VzZSB3b3JrZXJcIjpcImFcIixcImRvbWVzdGljIGhlbHBcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aG91c2VtYWlkOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImluZHVzdHJpYWwtbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImluZHVzdHJpYWwgY2l2aWxpemF0aW9uXCI6XCJhXCIsXCJpbmR1c3RyaWFsIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluZHVzdHJpYWwgbWFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibGFkeS1kb2N0b3JcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RvY3RvcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsYWR5IGRvY3RvclwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcImxlYWRpbmctbGFkeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bGVhZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsZWFkaW5nIGxhZHlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYWlkZW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3ZpcmdpbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7bWFpZGVuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlbi1yYWNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImZpcnN0IHJhY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWlkZW4gcmFjZVwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1haWRlbi1zcGVlY2hcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZmlyc3Qgc3BlZWNoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFpZGVuIHNwZWVjaFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbi1hLWRlc2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wic3RhZmYgYSBkZXNrXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuIGEgZGVza1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbi1pbi10aGUtc3RyZWV0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIm9yZGluYXJ5IGNpdGl6ZW5cIjpcImFcIixcInR5cGljYWwgcGVyc29uXCI6XCJhXCIsXCJhdmVyYWdlIHBlcnNvblwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBpbiB0aGUgc3RyZWV0XCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLW9mLXRoZS1sYW5kXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntmYXJtZXI6XCJhXCIsXCJydXJhbCB3b3JrZXJcIjpcImFcIixncmF6aWVyOlwiYVwiLGxhbmRvd25lcjpcImFcIixcInJ1cmFsIGNvbW11bml0eVwiOlwiYVwiLFwiY291bnRyeSBwZW9wbGVcIjpcImFcIixcImNvdW50cnkgZm9sa1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hbiBvZiB0aGUgbGFuZFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbnMtYmVzdC1mcmllbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBmYWl0aGZ1bCBkb2dcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW5zIGJlc3QgZnJpZW5kXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLXRoZS1ib290aFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzdGFmZiB0aGUgYm9vdGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gdGhlIGJvb3RoXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFuLXRoZS1waG9uZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYW5zd2VyIHRoZSBwaG9uZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYW4gdGhlIHBob25lc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1hbnNpemVkLXRhc2tcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBkZW1hbmRpbmcgdGFza1wiOlwiYVwiLFwiYSBiaWcgam9iXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFuc2l6ZWQgdGFza1wiOlwiYVwiLFwibWFuIHNpemVkIHRhc2tcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXIta2V5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBhc3Mga2V5XCI6XCJhXCIsb3JpZ2luYWw6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wibWFzdGVyIGtleVwiOlwiYVwiLFwibWFzdGVyIGNvcHlcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJtYXN0ZXItcGxhblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJncmFuZCBzY2hlbWVcIjpcImFcIixcImd1aWRpbmcgcHJpbmNpcGxlc1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1hc3RlciBwbGFuXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWFzdGVyLXRoZS1hcnRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYmVjb21lIHNraWxsZWRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYXN0ZXIgdGhlIGFydFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1lbi1vZi1zY2llbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzY2llbnRpc3RzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1lbiBvZiBzY2llbmNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwibWlkd2lmZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiaXJ0aGluZyBudXJzZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttaWR3aWZlOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm1vZGVybi1tYW5cIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wibW9kZXJuIGNpdmlsaXphdGlvblwiOlwiYVwiLFwibW9kZXJuIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm1vZGVybiBtYW5cIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJuby1tYW5zLWxhbmRcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widW5vY2N1cGllZCB0ZXJyaXRvcnlcIjpcImFcIix3YXN0ZWxhbmQ6XCJhXCIsZGVhdGh0cmFwOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm5vIG1hbnMgbGFuZFwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcIm9mZmljZS1naXJsc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhZG1pbmlzdHJhdGl2ZSBzdGFmZlwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm9mZmljZSBnaXJsc1wiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInBvZXRlc3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3BvZXQ6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3BvZXRlc3M6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwicmFpbHdheW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJyYWlsd2F5IHdvcmtlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntyYWlsd2F5bWFuOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInNwb3J0c21hbmxpa2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2ZhaXI6XCJhXCIsc3BvcnRpbmc6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3Nwb3J0c21hbmxpa2U6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwic3BvcnRzbWFuc2hpcFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmFpcm5lc3M6XCJhXCIsXCJnb29kIGh1bW9yXCI6XCJhXCIsXCJzZW5zZSBvZiBmYWlyIHBsYXlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BvcnRzbWFuc2hpcDpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzdGF0ZXNtYW5saWtlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkaXBsb21hdGljOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdGF0ZXNtYW5saWtlOlwiYVwiLFwic3RhdGVzbWFuIGxpa2VcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJzdG9ja21hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJjYXR0bGUgd29ya2VyXCI6XCJhXCIsZmFybWhhbmQ6XCJhXCIsZHJvdmVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzdG9ja21hbjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ0cmFkZXNtYW5zLWVudHJhbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNlcnZpY2UgZW50cmFuY2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ0cmFkZXNtYW5zIGVudHJhbmNlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwidGF4LW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJ0YXggY29tbWlzc2lvbmVyXCI6XCJhXCIsXCJ0YXggb2ZmaWNlXCI6XCJhXCIsXCJ0YXggY29sbGVjdG9yXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1widGF4IG1hblwiOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3JhZHlhbmFuZGEud29yZHByZXNzLmNvbS8yMDA5LzA2LzA2L25vbnNleGlzdC1hbHRlcm5hdGl2ZS1sYW5ndWFnZS1oYW5kYm9vay1mb3ItY29uc2Npb3VzLXdyaXRlcnMvXCJ9LHtpZDpcInVzaGVyZXR0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dXNoZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3VzaGVyZXR0ZTpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b21hbi1sYXd5ZXJcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2xhd3llcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3b21hbiBsYXd5ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b21hbi1wYWludGVyXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYWludGVyOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIndvbWFuIHBhaW50ZXJcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly9yYWR5YW5hbmRhLndvcmRwcmVzcy5jb20vMjAwOS8wNi8wNi9ub25zZXhpc3QtYWx0ZXJuYXRpdmUtbGFuZ3VhZ2UtaGFuZGJvb2stZm9yLWNvbnNjaW91cy13cml0ZXJzL1wifSx7aWQ6XCJ3b3JraW5nLXdpZmVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wid2FnZSBvciBzYWxhcnkgZWFybmluZyB3b21hblwiOlwiYVwiLFwidHdvLWluY29tZSBmYW1pbHlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJ3b3JraW5nIG1vdGhlclwiOlwiYVwiLFwid29ya2luZyB3aWZlXCI6XCJhXCJ9LG5vdGU6XCJTb3VyY2U6IGh0dHBzOi8vcmFkeWFuYW5kYS53b3JkcHJlc3MuY29tLzIwMDkvMDYvMDYvbm9uc2V4aXN0LWFsdGVybmF0aXZlLWxhbmd1YWdlLWhhbmRib29rLWZvci1jb25zY2lvdXMtd3JpdGVycy9cIn0se2lkOlwiaG9tb3NleHVhbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Z2F5OlwiYVwiLFwiZ2F5IG1hblwiOlwiYVwiLGxlc2JpYW46XCJhXCIsXCJnYXkgcGVyc29uL3Blb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntob21vc2V4dWFsOlwiYVwifSxub3RlOlwiVGhpcyB0ZXJtIGhhcyBhIGNsaW5pY2FsIGhpc3RvcnkgYW5kIGlzIHVzZWQgdG8gaW1wbHkgTEdCVFErIHBlb3BsZSBhcmUgZGlzZWFzZWQgb3IgcHN5Y2hvbG9naWNhbGx5L2Vtb3Rpb25hbGx5IGRpc29yZGVyZWQgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImhvbW9zZXh1YWwtcmVsYXRpb25zXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntyZWxhdGlvbnNoaXA6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiaG9tb3NleHVhbCByZWxhdGlvbnNcIjpcImFcIixcImhvbW9zZXh1YWwgcmVsYXRpb25zaGlwXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBsYWJlbGluZyBzb21ldGhpbmcgYXMgTEdCVFErIHVubGVzcyB5b3Ugd291bGQgY2FsbCB0aGUgc2FtZSB0aGluZyDigJxzdHJhaWdodOKAnSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiaG9tb3NleHVhbC1jb3VwbGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2NvdXBsZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIGNvdXBsZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgbGFiZWxpbmcgc29tZXRoaW5nIGFzIExHQlRRKyB1bmxlc3MgeW91IHdvdWxkIGNhbGwgdGhlIHNhbWUgdGhpbmcg4oCcc3RyYWlnaHTigJ0gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcInNleHVhbC1wcmVmZXJlbmNlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInNleHVhbCBvcmllbnRhdGlvblwiOlwiYVwiLG9yaWVudGF0aW9uOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNleHVhbCBwcmVmZXJlbmNlXCI6XCJhXCJ9LG5vdGU6XCJJbXBsaWVzIHRoYXQgYmVpbmcgTEdCVFErIGlzIGEgY2hvaWNlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvb2ZmZW5zaXZlKVwifSx7aWQ6XCJnYXktbGlmZXN0eWxlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBsaXZlc1wiOlwiYVwiLFwiZ2F5L2xlc2JpYW4gbGl2ZXNcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJnYXkgbGlmZXN0eWxlXCI6XCJhXCIsXCJob21vc2V4dWFsIGxpZmVzdHlsZVwiOlwiYVwifSxub3RlOlwiSW1wbGllcyB0aGF0IGJlaW5nIExHQlRRKyBpcyBhIGNob2ljZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiZ2F5LWFnZW5kYVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJnYXkgaXNzdWVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiZ2F5IGFnZW5kYVwiOlwiYVwiLFwiaG9tb3NleHVhbCBhZ2VuZGFcIjpcImFcIn0sbm90ZTpcIlVzZWQgYnkgYW50aS1MR0JUUSsgZXh0cmVtaXN0cyB0byBjcmVhdGUgYSBjbGltYXRlIG9mIGZlYXIgYXJvdW5kIExHQlRRKyBpc3N1ZXMgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9vZmZlbnNpdmUpXCJ9LHtpZDpcImdheS1yaWdodHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiZXF1YWwgcmlnaHRzXCI6XCJhXCIsXCJjaXZpbCByaWdodHMgZm9yIGdheSBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzcGVjaWFsIHJpZ2h0c1wiOlwiYVwiLFwiZ2F5IHJpZ2h0c1wiOlwiYVwifSxub3RlOlwiTEdCVFErIHJpZ2h0cyBhcmUgaHVtYW4gcmlnaHRzIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcImZhZ1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Z2F5OlwiYVwifSxpbmNvbnNpZGVyYXRlOntmYWc6XCJhXCIsZmFnZ290OlwiYVwiLGR5a2U6XCJhXCIsaG9tbzpcImFcIixzb2RvbWl0ZTpcImFcIn0sbm90ZTpcIkRlcm9nYXRvcnkgdGVybXMgZm9yIExHQlRRKyBwZW9wbGUgYXJlIG9mZmVuc2l2ZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL29mZmVuc2l2ZSlcIn0se2lkOlwiYmlcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jpc2V4dWFsOlwiYVwifSxpbmNvbnNpZGVyYXRlOntiaTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHNsYW5nIHNob3J0aGFuZCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3N0eWxlKVwifSx7aWQ6XCJob21vc2V4dWFsLW1hcnJpYWdlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdheSBtYXJyaWFnZVwiOlwiYVwiLFwic2FtZS1zZXggbWFycmlhZ2VcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJob21vc2V4dWFsIG1hcnJpYWdlXCI6XCJhXCJ9LG5vdGU6XCJIb21vc2V4dWFsIGhhcyBhIGNsaW5pY2FsIGhpc3RvcnkgYW5kIGlzIHVzZWQgdG8gaW1wbHkgTEdCVFErIHBlb3BsZSBhcmUgZGlzZWFzZWQgb3IgcHN5Y2hvbG9naWNhbGx5L2Vtb3Rpb25hbGx5IGRpc29yZGVyZWQgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS9zdHlsZSlcIn0se2lkOlwidHJhbm55XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcjpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJhbm55OlwiYVwifSxub3RlOlwiRGVyb2dhdG9yeSB0ZXJtcyBmb3IgTEdCVFErIHBlb3BsZSBhcmUgb2ZmZW5zaXZlIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2Uvc3R5bGUpXCJ9LHtpZDpcInRyYW5zdmVzdGl0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJjcm9zcy1kcmVzc2VyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zdmVzdGl0ZTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIG91dGRhdGVkIC8gb2ZmZW5zaXZlIHRlcm1zIChzb3VyY2U6IGh0dHBzOi8vd3d3LmdsYWFkLm9yZy9yZWZlcmVuY2UvdHJhbnNnZW5kZXIpXCJ9LHtpZDpcInNleGNoYW5nZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJhbnNpdGlvbjpcImFcIixcImdlbmRlciBjb25maXJtYXRpb24gc3VyZ2VyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntzZXhjaGFuZ2U6XCJhXCIsXCJzZXggY2hhbmdlXCI6XCJhXCJ9LG5vdGU6XCJBdm9pZCBvdmVyZW1waGFzaXppbmcgc3VyZ2VyeSB3aGVuIGRpc2N1c3NpbmcgdHJhbnNnZW5kZXIgcGVvcGxlIG9yIHRoZSBwcm9jZXNzIG9mIHRyYW5zaXRpb24gLSBpdOKAmXMgbm90IGEgbmVjZXNzYXJ5IGNvbXBvbmVudCAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJzZXgtY2hhbmdlLW9wZXJhdGlvblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJzZXggcmVhc3NpZ25tZW50IHN1cmdlcnlcIjpcImFcIixcImdlbmRlciBjb25maXJtYXRpb24gc3VyZ2VyeVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNleCBjaGFuZ2Ugb3BlcmF0aW9uXCI6XCJhXCJ9LG5vdGU6XCJTaGlmdCBmb2N1cyBhd2F5IGZyb20gdGhlIGFzc2lnbmVkIHNleCBhbmQgdG93YXJkcyB0aGUgaWRlbnRpZmllZCBnZW5kZXIgKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwidHJhbnNnZW5kZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyYW5zZ2VuZGVyIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcnM6XCJhXCJ9LG5vdGU6XCJUcmFuc2dlbmRlciBzaG91bGQgYmUgdXNlZCBhcyBhbiBhZGplY3RpdmUsIG5vdCBhcyBhIG5vdW4gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwidHJhbnNnZW5kZXJlZFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7dHJhbnNnZW5kZXI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3RyYW5zZ2VuZGVyZWQ6XCJhXCJ9LG5vdGU6XCJUcmFuc2dlbmRlciBpcyBhbHJlYWR5IGFuIGFkamVjdGl2ZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJ0cmFuc2dlbmRlcmlzbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJiZWluZyB0cmFuc2dlbmRlclwiOlwiYVwiLFwidGhlIG1vdmVtZW50IGZvciB0cmFuc2dlbmRlciBlcXVhbGl0eVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt0cmFuc2dlbmRlcmlzbTpcImFcIn0sbm90ZTpcIlRoaXMgaXMgYSB0ZXJtIHVzZWQgYnkgYW50aS10cmFuc2dlbmRlciBhY3RpdmlzdHMgdG8gZGVodW1hbml6ZSB0cmFuc2dlbmRlciBwZW9wbGUgYW5kIHJlZHVjZSB3aG8gdGhleSBhcmUgdG8gYSBjb25kaXRpb24gKHNvdXJjZTogaHR0cHM6Ly93d3cuZ2xhYWQub3JnL3JlZmVyZW5jZS90cmFuc2dlbmRlcilcIn0se2lkOlwiYm9ybi1hLW1hblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhc3NpZ25lZCBtYWxlIGF0IGJpcnRoXCI6XCJhXCIsXCJkZXNpZ25hdGVkIG1hbGUgYXQgYmlydGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaW9sb2dpY2FsbHkgbWFsZVwiOlwiYVwiLFwiYm9ybiBhIG1hblwiOlwiYVwiLFwiZ2VuZXRpY2FsbHkgbWFsZVwiOlwiYVwifSxub3RlOlwiQXNzaWduZWQgYmlydGggZ2VuZGVyIGlzIGNvbXBsaWNhdGVkOyBnZW5kZXIgaWRlbnRpdHkgaXMgbW9yZSB0aGFuIHdoYXQgeW91ciBwYXJlbnRzIGRlY2lkZWQgeW91IHdlcmUgYXQgYmlydGhcIn0se2lkOlwiYm9ybi1hLXdvbWFuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImFzc2lnbmVkIGZlbWFsZSBhdCBiaXJ0aFwiOlwiYVwiLFwiZGVzaWduYXRlZCBmZW1hbGUgYXQgYmlydGhcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJiaW9sb2dpY2FsbHkgZmVtYWxlXCI6XCJhXCIsXCJib3JuIGEgd29tYW5cIjpcImFcIixcImdlbmV0aWNhbGx5IGZlbWFsZVwiOlwiYVwifSxub3RlOlwiQXNzaWduZWQgYmlydGggZ2VuZGVyIGlzIGNvbXBsaWNhdGVkOyBnZW5kZXIgaWRlbnRpdHkgaXMgbW9yZSB0aGFuIHdoYXQgeW91ciBwYXJlbnRzIGRlY2lkZWQgeW91IHdlcmUgYXQgYmlydGhcIn0se2lkOlwiYmF0aHJvb20tYmlsbFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJub24tZGlzY3JpbWluYXRpb24gbGF3XCI6XCJhXCIsXCJub24tZGlzY3JpbWluYXRpb24gb3JkaW5hbmNlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiYmF0aHJvb20gYmlsbFwiOlwiYVwifSxub3RlOlwiQSB0ZXJtIGNyZWF0ZWQgYW5kIHVzZWQgYnkgZmFyLXJpZ2h0IGV4dHJlbWlzdHMgdG8gb3Bwb3NlIG5vbmRpc2NyaW1pbmF0aW9uIGxhd3MgdGhhdCBwcm90ZWN0IHRyYW5zZ2VuZGVyIHBlb3BsZSAoc291cmNlOiBodHRwczovL3d3dy5nbGFhZC5vcmcvcmVmZXJlbmNlL3RyYW5zZ2VuZGVyKVwifSx7aWQ6XCJoZXJtYXBocm9kaXRpY1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW50ZXJzZXg6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2hlcm1hcGhyb2RpdGljOlwiYVwiLHBzZXVkb2hlcm1hcGhyb2RpdGljOlwiYVwiLFwicHNldWRvIGhlcm1hcGhyb2RpdGljXCI6XCJhXCJ9LG5vdGU6XCJUaGVzZSB0ZXJtcyBhcmUgc3RpZ21hdGl6aW5nIHRvIHBhdGllbnRzIGFuZCB0aGVpciBmYW1pbGllcyBiZWNhdXNlIGludGVyc2V4IHN0YXR1cyBpcyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4gdGhlIG1lcmUgcHJlc2VuY2Ugb3IgYWJzZW5jZSBvZiBjZXJ0YWluIGdvbmFkYWwgdGlzc3VlcyAoc291cmNlOiBodHRwOi8vd3d3LmlzbmEub3JnL25vZGUvOTc5KVwifSx7aWQ6XCJoZXJtYXBocm9kaXRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInBlcnNvbiB3aG8gaXMgaW50ZXJzZXhcIjpcImFcIixwZXJzb246XCJhXCIsXCJpbnRlcnNleCBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7aGVybWFwaHJvZGl0ZTpcImFcIixwc2V1ZG9oZXJtYXBocm9kaXRlOlwiYVwiLFwicHNldWRvIGhlcm1hcGhyb2RpdGVcIjpcImFcIn0sbm90ZTpcIlRoZXNlIHRlcm1zIGFyZSBzdGlnbWF0aXppbmcgdG8gcGF0aWVudHMgYW5kIHRoZWlyIGZhbWlsaWVzIGJlY2F1c2UgaW50ZXJzZXggc3RhdHVzIGlzIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiB0aGUgbWVyZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIGNlcnRhaW4gZ29uYWRhbCB0aXNzdWVzIChzb3VyY2U6IGh0dHA6Ly93d3cuaXNuYS5vcmcvbm9kZS85NzkpXCJ9LHtpZDpcImhlc2hlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRyYW5zZ2VuZGVyIHBlcnNvblwiOlwiYVwiLHBlcnNvbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hlbWFsZTpcImFcIixcInNoZSBtYWxlXCI6XCJhXCIsaGVzaGU6XCJhXCIsc2hlaGU6XCJhXCJ9LG5vdGU6XCJUaGlzIHdvcmQgZGVodW1hbml6ZXMgdHJhbnNnZW5kZXIgcGVvcGxlIChzb3VyY2U6IGh0dHBzOi8vd3d3LnJlZGRpdC5jb20vci9hc2t0cmFuc2dlbmRlci9jb21tZW50cy8yM3dicTEvaXNfdGhlX3Rlcm1fc2hlbWFsZV9zZWVuX2FzX29mZmVuc2l2ZS8pXCJ9LHtpZDpcImdlbmRlci1wcm9ub3VuXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcm9ub3VuOlwiYVwiLHByb25vdW5zOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInByZWZlcnJlZCBwcm9ub3VuXCI6XCJhXCIsXCJwcmVmZXJyZWQgcHJvbm91bnNcIjpcImFcIixcImdlbmRlciBwcm9ub3VuXCI6XCJhXCIsXCJnZW5kZXIgcHJvbm91bnNcIjpcImFcIn0sbm90ZTpcIlByZWZlcnJlZCBwcm9ub3VuIHNvdW5kcyBsaWtlIGl0IGlzIG9wdGlvbmFsIHRvIHVzZSBzb21lb25lJ3MgY29ycmVjdCBwcm9ub3VuIChzb3VyY2U6IGh0dHBzOi8vd3d3LnNlbGZkZWZpbmVkLmFwcC9kZWZpbml0aW9ucy9wcm9ub3Vucy8pXCJ9LHtpZDpcImlzbGFtaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOnttdXNsaW06XCJhXCIsXCJwZXJzb24gb2YgSXNsYW1pYyBmYWl0aFwiOlwiYVwiLGZhbmF0aWM6XCJhXCIsemVhbG90OlwiYVwiLFwiZm9sbG93ZXIgb2YgaXNsYW1cIjpcImFcIixcImZvbGxvd2VyIG9mIHRoZSBpc2xhbWljIGZhaXRoXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2lzbGFtaXN0OlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy51c25ld3MuY29tL25ld3MvbmV3c2dyYW0vYXJ0aWNsZXMvMjAxMy8wNC8wNC90aGUtYXNzb2NpYXRlZC1wcmVzcy1yZXZpc2VzLWlzbGFtaXN0LWFub3RoZXItcG9saXRpY2FsbHktY2hhcmdlZC10ZXJtXCJ9LHtpZDpcImlzbGFtaXN0c1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7bXVzbGltczpcImFcIixcInBlb3BsZSBvZiBJc2xhbWljIGZhaXRoXCI6XCJhXCIsZmFuYXRpY3M6XCJhXCIsemVhbG90czpcImFcIn0saW5jb25zaWRlcmF0ZTp7aXNsYW1pc3RzOlwiYVwifSxub3RlOlwiU291cmNlOiBodHRwczovL3d3dy51c25ld3MuY29tL25ld3MvbmV3c2dyYW0vYXJ0aWNsZXMvMjAxMy8wNC8wNC90aGUtYXNzb2NpYXRlZC1wcmVzcy1yZXZpc2VzLWlzbGFtaXN0LWFub3RoZXItcG9saXRpY2FsbHktY2hhcmdlZC10ZXJtXCJ9LHtpZDpcIm1hc3RlclwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7cHJpbWFyeTpcImFcIixsZWFkOlwiYVwiLGh1YjpcImFcIixyZWZlcmVuY2U6XCJhXCJ9LGluY29uc2lkZXJhdGU6e21hc3RlcjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBtYXN0ZXJgOyB0aGVzZSBzdWdnZXN0aW9ucyBhcmUgZm9yIHRoZSBjb21wdXRlciB0ZXJtLCBidXQgdGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIGNhc2VzIHRvb1wifSx7aWQ6XCJtYXN0ZXJzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcmltYXJpZXM6XCJhXCIsaHViczpcImFcIixyZWZlcmVuY2VzOlwiYVwifSxpbmNvbnNpZGVyYXRlOnttYXN0ZXJzOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGhlIHRlcm0gYG1hc3RlcmA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcInNsYXZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzZWNvbmRhcnk6XCJhXCIsd29ya2VyOlwiYVwiLHJlcGxpY2E6XCJhXCIsbm9kZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2xhdmU6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0aGUgdGVybSBgc2xhdmVgOyB0aGVzZSBzdWdnZXN0aW9ucyBhcmUgZm9yIHRoZSBjb21wdXRlciB0ZXJtLCBidXQgdGhlcmUgYXJlIGJldHRlciBhbHRlcm5hdGl2ZXMgZm9yIG90aGVyIGNhc2VzIHRvb1wifSx7aWQ6XCJzbGF2ZXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NlY29uZGFyaWVzOlwiYVwiLHdvcmtlcnM6XCJhXCIscmVwbGljYXM6XCJhXCIsbm9kZXM6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3NsYXZlczpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRoZSB0ZXJtIGBzbGF2ZWA7IHRoZXNlIHN1Z2dlc3Rpb25zIGFyZSBmb3IgdGhlIGNvbXB1dGVyIHRlcm0sIGJ1dCB0aGVyZSBhcmUgYmV0dGVyIGFsdGVybmF0aXZlcyBmb3Igb3RoZXIgY2FzZXMgdG9vXCJ9LHtpZDpcImJsYWNraGF0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInVuZXRoaWNhbCBoYWNrZXJcIjpcImFcIixcIm1hbGljaW91cyBhY3RvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2hhdDpcImFcIn19LHtpZDpcIndoaXRlaGF0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImV0aGljYWwgaGFja2VyXCI6XCJhXCIsXCJzZWN1cml0eSByZXNlYXJjaGVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlaGF0OlwiYVwifX0se2lkOlwiZXNraW1vXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntJbnVpdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7ZXNraW1vOlwiYVwifX0se2lkOlwiZXNraW1vc1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7SW51aXRzOlwiYVwifSxpbmNvbnNpZGVyYXRlOntlc2tpbW9zOlwiYVwifX0se2lkOlwib3JpZW50YWxcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiQXNpYW4gcGVyc29uXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e29yaWVudGFsOlwiYVwifX0se2lkOlwib3JpZW50YWxzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkFzaWFuIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntvcmllbnRhbHM6XCJhXCJ9fSx7aWQ6XCJub253aGl0ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJwZXJzb24gb2YgY29sb3JcIjpcImFcIixcInBlb3BsZSBvZiBjb2xvclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntub253aGl0ZTpcImFcIixcIm5vbiB3aGl0ZVwiOlwiYVwifX0se2lkOlwiZ2hldHRvXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwcm9qZWN0czpcImFcIix1cmJhbjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z2hldHRvOlwiYVwifX0se2lkOlwicmVkc2tpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJOYXRpdmUgQW1lcmljYW5cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJyZWQgaW5kaWFuXCI6XCJhXCIscG9jYWhvbnRhczpcImFcIixyZWRza2luOlwiYVwifX0se2lkOlwicmVkc2tpbnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiTmF0aXZlIEFtZXJpY2FuIFBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInJlZCBpbmRpYW5zXCI6XCJhXCIscmVkc2tpbnM6XCJhXCJ9fSx7aWQ6XCJ0b3RlbVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZmF2b3JpdGU6XCJhXCIsaW5zcGlyYXRpb246XCJhXCIsXCJwZXJzb25hbCBpbnRlcmVzdFwiOlwiYVwiLFwicGVyc29uYWxpdHkgdHlwZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImFuaW1hbCBzcGlyaXRcIjpcImFcIixcImRyZWFtIGNhdGNoZXJcIjpcImFcIixcInNwaXJpdCBhbmltYWxcIjpcImFcIix0b3RlbTpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgb3ZlcnNpbXBsaWZ5IHRoZSBjb21wbGV4IGFuZCB2YXJpZWQgYmVsaWVmcyBvZiBpbmRpZ2Vub3VzIHJlbGlnaW9ucy4gKHNvdXJjZTogaHR0cHM6Ly93d3cud29ybGRyZWxpZ2lvbm5ld3MuY29tL29waW5pb24vc3Bpcml0LWFuaW1hbC1ub3Qtam9rZS1vcHByZXNzaW9uLGh0dHBzOi8vd3d3LnNwaXJhbG5hdHVyZS5jb20vc3Bpcml0dWFsaXR5L3NwaXJpdC1hbmltYWwtY3VsdHVyYWwtYXBwcm9wcmlhdGlvbilcIn0se2lkOlwibG9uZy10aW1lLW5vLXNlZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJJIGhhdmVu4oCZdCBzZWVuIHlvdSBpbiBhIGxvbmcgdGltZVwiOlwiYVwiLFwiaXTigJlzIGJlZW4gYSBsb25nIHRpbWVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJsb25nIHRpbWUgbm8gaGVhclwiOlwiYVwiLFwibG9uZyB0aW1lIG5vIHNlZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyB0aGF0IGltcGxpY2l0bHkgbW9jayBwZW9wbGUgd2l0aCBsaW1pdGVkIGtub3dsZWRnZSBvZiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gKHNvdXJjZTogaHR0cHM6Ly93d3cubnByLm9yZy9zZWN0aW9ucy9jb2Rlc3dpdGNoLzIwMTQvMDMvMDkvMjg4MzAwMzAzL3doby1maXJzdC1zYWlkLWxvbmctdGltZS1uby1zZWUtYW5kLWluLXdoaWNoLWxhbmd1YWdlKVwifSx7aWQ6XCJpbmRpYW4tY291bnRyeVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJlbmVteSB0ZXJyaXRvcnlcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJJbmRpYW4gY291bnRyeVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gdGhlIGdlbm9jaWRhbCBVbml0ZWQgU3RhdGVzIOKAnEluZGlhbiBSZW1vdmFs4oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vbmV3c21hdmVuLmlvL2luZGlhbmNvdW50cnl0b2RheS9hcmNoaXZlL29mZi10aGUtcmVzZXJ2YXRpb24tYS10ZWFjaGFibGUtbW9tZW50LW5XMWQ3VTBKUmtPc3podGc4TjFWMUEvKVwifSx7aWQ6XCJvZmYtcmVzZXJ2ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7ZGlzb2JleTpcImFcIixlbmR1cmU6XCJhXCIsXCJvYmplY3QgdG9cIjpcImFcIixvcHBvc2U6XCJhXCIscmVzaXN0OlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImp1bXAgdGhlIHJlc2VydmF0aW9uXCI6XCJhXCIsXCJvZmYgcmVzZXJ2ZVwiOlwiYVwiLFwib2ZmIHRoZSByZXNlcnZhdGlvblwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gdGhlIGdlbm9jaWRhbCBVbml0ZWQgU3RhdGVzIOKAnEluZGlhbiBSZW1vdmFs4oCdIGxhd3MuIChzb3VyY2U6IGh0dHA6Ly9ibG9nLm5hdGl2ZXBhcnRuZXJzaGlwLm9yZy9vZmYtdGhlLXJlc2VydmF0aW9uLyxodHRwczovL3d3dy53c2ouY29tL2FydGljbGVzL29mZi10aGUtcmVzZXJ2YXRpb24taXMtYS1waHJhc2Utd2l0aC1hLWRhcmstcGFzdC0xNDYyNTUyODM3LGh0dHBzOi8vd3d3Lm5wci5vcmcvc2VjdGlvbnMvY29kZXN3aXRjaC8yMDE0LzA2LzI5LzMyNjY5MDk0Ny9zaG91bGQtc2F5aW5nLXNvbWVvbmUtaXMtb2ZmLXRoZS1yZXNlcnZhdGlvbi1iZS1vZmYtbGltaXRzLGh0dHBzOi8vbm93dG9yb250by5jb20vbmV3cy9uYXRpdmUtcmVmZXJlbmNlcy1hbmQtdGVybXMtdGhhdC1hcmUtb2ZmZW5zaXZlLXRvLWluZGlnZW5vdXMtcGVvcGxlLylcIn0se2lkOlwib24tdGhlLXdhcnBhdGhcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlZmVuZDpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjaXJjbGUgdGhlIHdhZ29uc1wiOlwiYVwiLFwib24gdGhlIHdhcnBhdGhcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIGNvbG9uaWFsIHN0ZXJlb3R5cGVzIHJlZ2FyZGluZyBOYXRpdmUgQW1lcmljYW5zLiAoc291cmNlOiBodHRwczovL2lkaW9tcy50aGVmcmVlZGljdGlvbmFyeS5jb20vY2lyY2xlK3RoZSt3YWdvbnMsaHR0cHM6Ly9pZGlvbXMudGhlZnJlZWRpY3Rpb25hcnkuY29tL2dvK29uK3RoZSt3YXJwYXRoKVwifSx7aWQ6XCJ0b28tbWFueS1jaGllZnNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1widG9vIG1hbnkgY2hlZnMgaW4gdGhlIGtpdGNoZW5cIjpcImFcIixcInRvbyBtYW55IGNvb2tzIHNwb2lsIHRoZSBicm90aFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInRvbyBtYW55IGNoaWVmc1wiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIE5hdGl2ZSBBbWVyaWNhbnMuIChzb3VyY2U6IGh0dHBzOi8vaWRpb21zLnRoZWZyZWVkaWN0aW9uYXJ5LmNvbS90b28rbWFueStjaGllZnMrYW5kK25vdCtlbm91Z2grSW5kaWFucylcIn0se2lkOlwibmF0aXZlcy1hcmUtcmVzdGxlc3NcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Rpc3NhdGlzZmllZDpcImFcIixmcnVzdHJhdGVkOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcIm5hdGl2ZXMgYXJlIHJlc3RsZXNzXCI6XCJhXCIsXCJuYXRpdmVzIGFyZSBiZWNvbWluZyByZXN0bGVzc1wiOlwiYVwiLFwibmF0aXZlcyBhcmUgZ2V0dGluZyByZXN0bGVzc1wiOlwiYVwiLFwibmF0aXZlcyBhcmUgZ3Jvd2luZyByZXN0bGVzc1wiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gY29sb25pYWwgc3RlcmVvdHlwZXMgcmVnYXJkaW5nIGluZGlnZW5vdXMgcGVvcGxlcy4gKHNvdXJjZTogaHR0cHM6Ly90dnRyb3Blcy5vcmcvcG13aWtpL3Btd2lraS5waHAvTWFpbi9UaGVOYXRpdmVzQXJlUmVzdGxlc3MpXCJ9LHtpZDpcInBvd3dvd1wiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7Y29uZmVyZW5jZTpcImFcIixnYXRoZXJpbmc6XCJhXCIsbWVldGluZzpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJwb3cgd293XCI6XCJhXCIscG93d293OlwiYVwifSxub3RlOlwiQXZvaWQgY2FzdWFsbHkgdXNpbmcgdGhpcyB0ZXJtLCB3aGljaCByZWZlcnMgdG8gdHJhZGl0aW9uYWwgaW5kaWdlbm91cyBjZWxlYnJhdGlvbiBjZXJlbW9uaWVzIHRoYXQgd2VyZSBiYW5uZWQgYnkgZ2Vub2NpZGFsIGxhd3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIENhbmFkYSDigJQgTmF0aXZlIHBlb3BsZSBkaWVkIGZpZ2h0aW5nIGZvciB0aGlzIHJpZ2h0LiAoc291cmNlOiBodHRwczovL3R3aXR0ZXIuY29tL2NoYWRsb2Rlci9zdGF0dXMvMTIwMzUwNzA3MDc3Mjc5MzM0NSxodHRwOi8vbmF0aXZlYXBwcm9wcmlhdGlvbnMuY29tLzIwMTIvMDkvcGF1bC1mcmFuay1vZmZlbmRzLWV2ZXJ5LW5hdGl2ZS1wZXJzb24tb24tdGhlLXBsYW5ldC13aXRoLWZhc2hpb24tbmlnaHQtb3V0LWRyZWFtLWNhdGNoaW4tcG93LXdvdy5odG1sLGh0dHBzOi8vd3d3LmJyaXRhbm5pY2EuY29tL3RvcGljL3Bvd3dvdyxodHRwczovL25vd3Rvcm9udG8uY29tL25ld3MvbmF0aXZlLXJlZmVyZW5jZXMtYW5kLXRlcm1zLXRoYXQtYXJlLW9mZmVuc2l2ZS10by1pbmRpZ2Vub3VzLXBlb3BsZS8pXCJ9LHtpZDpcImluZGlhbi1naXZlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImdvIGJhY2sgb24gb25l4oCZcyBvZmZlclwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcImluZGlhbiBnaXZlXCI6XCJhXCIsXCJpbmRpYW4gZ2l2ZXJcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIGNvbG9uaWFsIHN0ZXJlb3R5cGVzIHJlZ2FyZGluZyBOYXRpdmUgQW1lcmljYW5zLlwifSx7aWQ6XCJwaW5veXNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0ZpbGlwaW5vczpcImFcIixcIkZpbGlwaW5vIHBlb3BsZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntwaW5veXM6XCJhXCIscGluYXlzOlwiYVwifX0se2lkOlwidG93ZWwtaGVhZHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e0FyYWJzOlwiYVwiLFwiTWlkZGxlIEVhc3Rlcm4gUGVvcGxlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic2FuZCBuaWdnZXJzXCI6XCJhXCIsXCJ0b3dlbCBoZWFkc1wiOlwiYVwifX0se2lkOlwibGF0aW5vXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntMYXRpbng6XCJhXCJ9LGluY29uc2lkZXJhdGU6e2xhdGlubzpcImFcIixsYXRpbmE6XCJhXCJ9LG5vdGU6XCJXaGVuZXZlciBwb3NzaWJsZSwgdHJ5IHRvIGJlIGdlbmRlciBpbmNsdXNpdmUuXCJ9LHtpZDpcImphcHNcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiSmFwYW5lc2UgcGVyc29uXCI6XCJhXCIsXCJKYXBhbmVzZSBwZW9wbGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7amFwczpcImFcIn19LHtpZDpcImh5bWllXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcIkpld2lzaCBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c2hsb21vOlwiYVwiLHNoeXN0ZXI6XCJhXCIsaHltaWU6XCJhXCJ9fSx7aWQ6XCJnb3lcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBwZXJzb24gd2hvIGlzIG5vdCBKZXdpc2hcIjpcImFcIixcIm5vdCBKZXdpc2hcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z295aW06XCJhXCIsZ295dW06XCJhXCIsZ295OlwiYVwifX0se2lkOlwic3BhZGVcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e1wiYSBCbGFjayBwZXJzb25cIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7c3BhZGU6XCJhXCJ9fSx7aWQ6XCJneXBcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e05vbWFkOlwiYVwiLFRyYXZlbGVyOlwiYVwiLFJvbWE6XCJhXCIsUm9tYW5pOlwiYVwifSxpbmNvbnNpZGVyYXRlOntneXBwbzpcImFcIixneXBzeTpcImFcIixHaXBzeTpcImFcIixneXA6XCJhXCJ9LG5vdGU6XCJHeXBzeSBpcyBpbnNlbnNpdGl2ZSwgdXNlIFJvbWEgb3IgUm9tYW5pLiBUaGV54oCZcmUgbm90IEVneXB0aWFuIGFzIHRoZSBuYW1lIHN1Z2dlc3RzLiAoc291cmNlOiBlbi53aWtpcGVkaWEub3JnL3dpa2kvUm9tYW5pX3Blb3BsZSNjaXRlX3JlZi04MClcIn0se2lkOlwiYmxhY2tsaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntibG9ja2xpc3Q6XCJhXCIsd3JvbmdsaXN0OlwiYVwiLGJhbmxpc3Q6XCJhXCIsXCJkZW55IGxpc3RcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7YmxhY2tsaXN0OlwiYVwiLFwiYmxhY2sgbGlzdFwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcImJsYWNrbGlzdGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntibG9ja2xpc3RlZDpcImFcIix3cm9uZ2xpc3RlZDpcImFcIixiYW5saXN0ZWQ6XCJhXCIsXCJkZW55LWxpc3RlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3RlZDpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJibGFja2xpc3RpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2Jsb2NrbGlzdGluZzpcImFcIix3cm9uZ2xpc3Rpbmc6XCJhXCIsYmFubGlzdGluZzpcImFcIixcImRlbnktbGlzdGluZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntibGFja2xpc3Rpbmc6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVsaXN0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYXNzbGlzdDpcImFcIixhbHJpZ2h0bGlzdDpcImFcIixzYWZlbGlzdDpcImFcIixcImFsbG93IGxpc3RcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVsaXN0OlwiYVwiLFwid2hpdGUgbGlzdFwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlbGlzdGVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntwYXNzbGlzdGVkOlwiYVwiLGFscmlnaHRsaXN0ZWQ6XCJhXCIsc2FmZWxpc3RlZDpcImFcIixcImFsbG93LWxpc3RlZFwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3RlZDpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJ3aGl0ZWxpc3RpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3Bhc3NsaXN0aW5nOlwiYVwiLGFscmlnaHRsaXN0aW5nOlwiYVwiLHNhZmVsaXN0aW5nOlwiYVwiLFwiYWxsb3ctbGlzdGluZ1wiOlwiYVwifSxpbmNvbnNpZGVyYXRlOnt3aGl0ZWxpc3Rpbmc6XCJhXCJ9LG5vdGU6XCJSZXBsYWNlIHJhY2lhbGx5LWNoYXJnZWQgbGFuZ3VhZ2Ugd2l0aCBtb3JlIGFjY3VyYXRlIGFuZCBpbmNsdXNpdmUgd29yZHNcIn0se2lkOlwid2hpdGVzcGFjZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7c3BhY2U6XCJhXCIsYmxhbms6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3doaXRlc3BhY2U6XCJhXCIsXCJ3aGl0ZSBzcGFjZVwiOlwiYVwifSxub3RlOlwiUmVwbGFjZSByYWNpYWxseS1jaGFyZ2VkIGxhbmd1YWdlIHdpdGggbW9yZSBhY2N1cmF0ZSBhbmQgaW5jbHVzaXZlIHdvcmRzXCJ9LHtpZDpcIndoaXRlc3BhY2VzXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzcGFjZTpcImFcIixibGFuazpcImFcIn0saW5jb25zaWRlcmF0ZTp7d2hpdGVzcGFjZXM6XCJhXCIsXCJ3aGl0ZSBzcGFjZXNcIjpcImFcIn0sbm90ZTpcIlJlcGxhY2UgcmFjaWFsbHktY2hhcmdlZCBsYW5ndWFnZSB3aXRoIG1vcmUgYWNjdXJhdGUgYW5kIGluY2x1c2l2ZSB3b3Jkc1wifSx7aWQ6XCJzYXZhZ2VcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e3NpbXBsZTpcImFcIixpbmRpZ2Vub3VzOlwiYVwiLFwiaHVudGVyLWdhdGhlcmVyXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e3ByaW1pdGl2ZTpcImFcIixzYXZhZ2U6XCJhXCIsXCJzdG9uZSBhZ2VcIjpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHRlcm1zIHRoYXQgaW1wbHkgYSBncm91cCBoYXMgbm90IGNoYW5nZWQgb3ZlciB0aW1lIGFuZCB0aGF0IHRoZXkgYXJlIGluZmVyaW9yXCJ9LHtpZDpcInRyaWJlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntzb2NpZXR5OlwiYVwiLGNvbW11bml0eTpcImFcIn0saW5jb25zaWRlcmF0ZTp7dHJpYmU6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyB0ZXJtcyB0aGF0IG1ha2Ugc29tZSBncm91cHMgc291bmQgaW5mZXJpb3JcIn0se2lkOlwic29waGlzdGljYXRlZC1jdWx0dXJlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNvbXBsZXggY3VsdHVyZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNvcGhpc3RpY2F0ZWQgY3VsdHVyZVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBtYWtlIHNvbWUgZ3JvdXBzIHNvdW5kIGluZmVyaW9yLiBSZXBsYWNlIOKAnHNvcGhpc3RpY2F0ZWTigJ0gd2l0aCBhIG5ldXRyYWwgdGVybSBzdWNoIGFzIOKAnGNvbXBsZXjigJ1cIn0se2lkOlwic29waGlzdGljYXRlZC10ZWNobm9sb2d5XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImNvbXBsZXggdGVjaG5vbG9neVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntcInNvcGhpc3RpY2F0ZWQgdGVjaG5vbG9neVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgdGVybXMgdGhhdCBtYWtlIHNvbWUgZ3JvdXBzIHNvdW5kIGluZmVyaW9yLiBSZXBsYWNlIOKAnHNvcGhpc3RpY2F0ZWTigJ0gd2l0aCBhIG5ldXRyYWwgdGVybSBzdWNoIGFzIOKAnGNvbXBsZXjigJ1cIn0se2lkOlwiYnVncmVwb3J0XCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImJ1ZyByZXBvcnRcIjpcImFcIixzbmFwc2hvdDpcImFcIn0saW5jb25zaWRlcmF0ZTp7YnVncmVwb3J0OlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgYGJ1Z3JlcG9ydGAsIGFzIHRoZSB3b3JkIGBidWdyZWAgaXMgYSBzbHVyIGluIEJyYXppbGlhbiBQb3J0dWd1ZXNlXCJ9LHtpZDpcImdyYW5kZmF0aGVyLWNsYXVzZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJsZWdhY3kgcG9saWN5XCI6XCJhXCIsXCJsZWdhY3kgY2xhdXNlXCI6XCJhXCIsXCJkZXByZWNhdGlvbiBwb2xpY3lcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJncmFuZGZhdGhlciBjbGF1c2VcIjpcImFcIixcImdyYW5kZmF0aGVyIHBvbGljeVwiOlwiYVwifSxub3RlOlwiQXZvaWQgdXNpbmcgcGhyYXNlcyByZWZlcnJpbmcgdG8gcmFjaXN0IFVuaXRlZCBTdGF0ZXMg4oCcSmltIENyb3figJ0gbGF3cy4gKHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR3JhbmRmYXRoZXJfY2xhdXNlI09yaWdpbilcIn0se2lkOlwiZ3JhbmRmYXRoZXJpbmdcIix0eXBlOlwiYmFzaWNcIixjYXRlZ29yaWVzOltcImFcIl0sY29uc2lkZXJhdGU6e2RlcHJlY2F0ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRmYXRoZXJpbmc6XCJhXCJ9LG5vdGU6XCJBdm9pZCB1c2luZyBwaHJhc2VzIHJlZmVycmluZyB0byByYWNpc3QgVW5pdGVkIFN0YXRlcyDigJxKaW0gQ3Jvd+KAnSBsYXdzLiAoc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HcmFuZGZhdGhlcl9jbGF1c2UjT3JpZ2luKVwifSx7aWQ6XCJncmFuZGZhdGhlcmVkXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntkZXByZWNhdGVkOlwiYVwiLGxlZ2FjeTpcImFcIn0saW5jb25zaWRlcmF0ZTp7Z3JhbmRmYXRoZXJlZDpcImFcIn0sbm90ZTpcIkF2b2lkIHVzaW5nIHBocmFzZXMgcmVmZXJyaW5nIHRvIHJhY2lzdCBVbml0ZWQgU3RhdGVzIOKAnEppbSBDcm934oCdIGxhd3MuIChzb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dyYW5kZmF0aGVyX2NsYXVzZSNPcmlnaW4pXCJ9LHtpZDpcIm1ha2UtKi1ncmVhdC1hZ2FpblwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7aW1wcm92ZTpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJtYWtlICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqIGdyZWF0IGFnYWluXCI6XCJhXCIsXCJtYWtlICogKiAqIGdyZWF0IGFnYWluXCI6XCJhXCIsXCJtYWtlICogKiAqICogZ3JlYXQgYWdhaW5cIjpcImFcIixcIm1ha2UgKiAqICogKiAqIGdyZWF0IGFnYWluXCI6XCJhXCJ9fSx7aWQ6XCJjb21taXR0ZWQtc3VpY2lkZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJkaWVkIGJ5IHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJjb21taXR0ZWQgc3VpY2lkZVwiOlwiYVwiLFwiY29tcGxldGVkIHN1aWNpZGVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZSwgaHR0cHM6Ly93d3cuc3BlYWtpbmdvZnN1aWNpZGUuY29tLzIwMTMvMDQvMTMvbGFuZ3VhZ2UvXCJ9LHtpZDpcImNvbW1pdC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcImRpZSBieSBzdWljaWRlXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wiY29tbWl0IHN1aWNpZGVcIjpcImFcIixcImNvbXBsZXRlIHN1aWNpZGVcIjpcImFcIixcInN1Y2Nlc3NmdWwgc3VpY2lkZVwiOlwiYVwifSxub3RlOlwiQ29tbWl0dGluZyBzdWljaWRlIGlzIG5vdCBzdWNjZXNzZnVsL3Vuc3VjY2Vzc2Z1bCwgdGhhdCBzZW5kcyB0aGUgd3JvbmcgbWVzc2FnZSAoc291cmNlOiBodHRwczovL3d3dy5hZnNwLm9yZy9uZXdzLWV2ZW50cy9mb3ItdGhlLW1lZGlhL3JlcG9ydGluZy1vbi1zdWljaWRlLCBodHRwczovL3d3dy5zcGVha2luZ29mc3VpY2lkZS5jb20vMjAxMy8wNC8xMy9sYW5ndWFnZS8pXCJ9LHtpZDpcInN1aWNpZGUtcGFjdFwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJyaXNlIGluIHN1aWNpZGVzXCI6XCJhXCJ9LGluY29uc2lkZXJhdGU6e1wic3VpY2lkZSBlcGlkZW1pY1wiOlwiYVwiLFwiZXBpZGVtaWMgb2Ygc3VpY2lkZXNcIjpcImFcIixcInN1aWNpZGUgcGFjdFwiOlwiYVwifSxub3RlOlwiVXNpbmcgc2Vuc2F0aW9uYWwgd29yZHMgY2FuIGNhdXNlIGNvcHljYXQgc3VpY2lkZXMgb3IgY29udGFnaW9uIChzb3VyY2U6IGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUpXCJ9LHtpZDpcImZhaWxlZC1zdWljaWRlXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInN1aWNpZGUgYXR0ZW1wdFwiOlwiYVwiLFwiYXR0ZW1wdGVkIHN1aWNpZGVcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJmYWlsZWQgc3VpY2lkZVwiOlwiYVwiLFwiZmFpbGVkIGF0dGVtcHRcIjpcImFcIixcInN1aWNpZGUgZmFpbHVyZVwiOlwiYVwifSxub3RlOlwiQXR0ZW1wdGVkIHN1aWNpZGUgc2hvdWxkIG5vdCBiZSBkZXBpY3RlZCBhcyBhIGZhaWx1cmUgKHNvdXJjZTogaHR0cHM6Ly93d3cuc3BlYWtpbmdvZnN1aWNpZGUuY29tLzIwMTMvMDQvMTMvbGFuZ3VhZ2UsIGh0dHBzOi8vd3d3LmFmc3Aub3JnL25ld3MtZXZlbnRzL2Zvci10aGUtbWVkaWEvcmVwb3J0aW5nLW9uLXN1aWNpZGUpXCJ9LHtpZDpcInN1aWNpZGUtbm90ZVwiLHR5cGU6XCJiYXNpY1wiLGNhdGVnb3JpZXM6W1wiYVwiXSxjb25zaWRlcmF0ZTp7XCJhIG5vdGUgZnJvbSB0aGUgZGVjZWFzZWRcIjpcImFcIn0saW5jb25zaWRlcmF0ZTp7XCJzdWljaWRlIG5vdGVcIjpcImFcIn0sbm90ZTpcIlNvdXJjZTogaHR0cHM6Ly93d3cuYWZzcC5vcmcvbmV3cy1ldmVudHMvZm9yLXRoZS1tZWRpYS9yZXBvcnRpbmctb24tc3VpY2lkZVwifSx7aWQ6XCJoYW5nXCIsdHlwZTpcImJhc2ljXCIsY2F0ZWdvcmllczpbXCJhXCJdLGNvbnNpZGVyYXRlOntcInRoZSBhcHAgZnJvemVcIjpcImFcIixcInRoZSBhcHAgc3RvcHBlZCByZXNwb25kaW5nXCI6XCJhXCIsXCJ0aGUgYXBwIHN0b3BwZWQgcmVzcG9uZGluZyB0byBldmVudHNcIjpcImFcIixcInRoZSBhcHAgYmVjYW1lIHVucmVzcG9uc2l2ZVwiOlwiYVwifSxpbmNvbnNpZGVyYXRlOntoYW5nOlwiYVwiLGhhbmdlZDpcImFcIn0sbm90ZTpcIldoZW4gZGVzY3JpYmluZyB0aGUgYmVoYXZpb3Igb2YgY29tcHV0ZXIgc29mdHdhcmUsIHVzaW5nIHRoZSB3b3JkIOKAnGhhbmdlZOKAnSBuZWVkbGVzc2x5IGludm9rZXMgdGhlIHRvcGljIG9mIGRlYXRoIGJ5IHNlbGYtaGFybSBvciBseW5jaGluZy4gIENvbnNpZGVyIHVzaW5nIHRoZSB3b3JkIOKAnGZyb3pl4oCdIG9yIHRoZSBwaHJhc2Ug4oCcc3RvcHBlZCByZXNwb25kaW5nIHRvIGV2ZW50c+KAnSBvciDigJxiZWNhbWUgdW5yZXNwb25zaXZl4oCdIGluc3RlYWQuXCJ9XSkseWE9Z2E7dmFyIGJhPWEoNDI3KTtjb25zdCBEYT17fS5oYXNPd25Qcm9wZXJ0eSxmYT1cInJldGV4dC1zcGVsbFwiO2Z1bmN0aW9uIEdhKG49e30pe1wiZnVuY3Rpb25cIj09dHlwZW9mIG4mJihuPXtkaWN0aW9uYXJ5Om59KTtjb25zdHtkaWN0aW9uYXJ5OmUsaWdub3JlOmEsbWF4OmksaWdub3JlTGl0ZXJhbDpyLGlnbm9yZURpZ2l0czp0LG5vcm1hbGl6ZUFwb3N0cm9waGVzOm8scGVyc29uYWw6TX09bixzPVtdO2xldCBsO2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGBPYmplY3RgLCBnb3QgYFwiK2UrXCJgXCIpO2NvbnN0IGM9e2lnbm9yZUxpdGVyYWw6bnVsbD09cnx8cixpZ25vcmVEaWdpdHM6bnVsbD09dHx8dCxub3JtYWxpemVBcG9zdHJvcGhlczpudWxsPT1vfHxvLGlnbm9yZTphfHxbXSxtYXg6aXx8MzAsY291bnQ6MCxjYWNoZTp7fSxjaGVja2VyOnZvaWQgMH07cmV0dXJuIGUoKChuLGUpPT57bGV0IGE9LTE7Zm9yKGw9bixlJiYoYy5jaGVja2VyPWJhKGUpLE0mJmMuY2hlY2tlci5wZXJzb25hbChNKSk7KythPHMubGVuZ3RoOyl7Y29uc3QgZT1zW2FdLnNsaWNlKDAsMyk7bnx8d2EoLi4uZSksc1thXVszXShuKX1zLmxlbmd0aD0wfSkpLChuLGUsYSk9PntsP2EobCk6Yy5jaGVja2VyPyh3YShuLGUsYyksYSgpKTpzLnB1c2goW24sZSxjLGFdKX19ZnVuY3Rpb24gd2EobixlLGEpe2NvbnN0e2lnbm9yZTppLGlnbm9yZUxpdGVyYWw6cixpZ25vcmVEaWdpdHM6dCxub3JtYWxpemVBcG9zdHJvcGhlczpvLGNoZWNrZXI6TSxjYWNoZTpzfT1hO2Z1bmN0aW9uIGwobixlKXtyZXR1cm4gbitcIjsgZGlkIHlvdSBtZWFuIFwiK3VhKGUsXCJgXCIpLmpvaW4oXCIsIFwiKStcIj9cIn1mdW5jdGlvbiBjKG4pe3JldHVybiBpLmluY2x1ZGVzKG4pfHx0JiYvXlxcZCskLy50ZXN0KG4pfV9uKG4sXCJXb3JkTm9kZVwiLCgobixpLHQpPT57Y29uc3QgUz10LHU9bi5jaGlsZHJlbjtpZighU3x8bnVsbD09PWl8fHImJlFlKFMsaSkpcmV0dXJuO2xldCBkPXFuKG4pO2lmKG8mJihkPWQucmVwbGFjZSgv4oCZL2csXCInXCIpKSxjKGQpKXJldHVybjtsZXQgbT1NLmNvcnJlY3QoZCk7aWYoIW0mJnUubGVuZ3RoPjEpe2xldCBuPS0xO2ZvcihtPSEwOysrbjx1Lmxlbmd0aDspe2NvbnN0IGU9dVtuXTtcIlRleHROb2RlXCIhPT1lLnR5cGV8fGMoZS52YWx1ZSl8fE0uY29ycmVjdChlLnZhbHVlKXx8KG09ITEpfX1pZighbSl7bGV0IGkscj11YShkLFwiYFwiKStcIiBpcyBtaXNzcGVsdFwiO0RhLmNhbGwocyxkKT8oaT1zW2RdLHI9bChyLGkpKTooYS5jb3VudD09PWEubWF4JiZlLm1lc3NhZ2UoXCJUb28gbWFueSBtaXNzcGVsbGluZ3M7IG5vIGZ1cnRoZXIgc3BlbGwgc3VnZ2VzdGlvbnMgYXJlIGdpdmVuXCIsbixbZmEsXCJvdmVyZmxvd1wiXS5qb2luKFwiOlwiKSksYS5jb3VudCsrLGEuY291bnQ8YS5tYXgmJihpPU0uc3VnZ2VzdChkKSxpLmxlbmd0aD4wJiYocj1sKHIsaSkpKSxzW2RdPWl8fFtdKSxPYmplY3QuYXNzaWduKGUubWVzc2FnZShyLG4sW2ZhLGQudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFcrLyxcIi1cIildLmpvaW4oXCI6XCIpKSx7YWN0dWFsOmQsZXhwZWN0ZWQ6aXx8W119KX19KSl9Y29uc3QgdmE9W3tpZDpcImFyZS1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJhcmVuJ3RcIixjdXJseTpcImFyZW7igJl0XCJ9LGV4cGFuZGVkOltcImFyZSBub3RcIl19LHtpZDpcImNhbi1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjYW4ndFwiLGN1cmx5OlwiY2Fu4oCZdFwifSxleHBhbmRlZDpbXCJjYW4gbm90XCIsXCJjYW5ub3RcIl19LHtpZDpcImNvdWxkLWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjb3VsZCd2ZVwiLGN1cmx5OlwiY291bGTigJl2ZVwifSxleHBhbmRlZDpbXCJjb3VsZCBoYXZlXCJdfSx7aWQ6XCJjb3VsZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJjb3VsZG4ndFwiLGN1cmx5OlwiY291bGRu4oCZdFwifSxleHBhbmRlZDpbXCJjb3VsZCBub3RcIl19LHtpZDpcImRpZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkaWRuJ3RcIixjdXJseTpcImRpZG7igJl0XCJ9LGV4cGFuZGVkOltcImRpZCBub3RcIl19LHtpZDpcImRvZXMtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiZG9lc24ndFwiLGN1cmx5OlwiZG9lc27igJl0XCJ9LGV4cGFuZGVkOltcImRvZXMgbm90XCJdfSx7aWQ6XCJkby1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJkb24ndFwiLGN1cmx5OlwiZG9u4oCZdFwifSxleHBhbmRlZDpbXCJkbyBub3RcIl19LHtpZDpcImV2ZXJ5Ym9keS1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImV2ZXJ5Ym9keSdzXCIsY3VybHk6XCJldmVyeWJvZHnigJlzXCJ9LGV4cGFuZGVkOltcImV2ZXJ5Ym9keSBpc1wiXX0se2lkOlwiZXZlcnlvbmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJldmVyeW9uZSdzXCIsY3VybHk6XCJldmVyeW9uZeKAmXNcIn0sZXhwYW5kZWQ6W1wiZXZlcnlvbmUgaXNcIl19LHtpZDpcImhhZC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYWRuJ3RcIixjdXJseTpcImhhZG7igJl0XCJ9LGV4cGFuZGVkOltcImhhZCBub3RcIl19LHtpZDpcImhhcy1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoYXNuJ3RcIixjdXJseTpcImhhc27igJl0XCJ9LGV4cGFuZGVkOltcImhhcyBub3RcIl19LHtpZDpcImhhdmUtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGF2ZW4ndFwiLGN1cmx5OlwiaGF2ZW7igJl0XCJ9LGV4cGFuZGVkOltcImhhdmUgbm90XCJdfSx7aWQ6XCJoZS1oYWQtd291bGRcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJoZSdkXCIsY3VybHk6XCJoZeKAmWRcIn0sZXhwYW5kZWQ6W1wiaGUgaGFkXCIsXCJoZSB3b3VsZFwiXX0se2lkOlwiaGUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ2xsXCIsY3VybHk6XCJoZeKAmWxsXCJ9LGV4cGFuZGVkOltcImhlIHdpbGxcIl19LHtpZDpcImhlLWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImhlJ3NcIixjdXJseTpcImhl4oCZc1wifSxleHBhbmRlZDpbXCJoZSBoYXNcIixcImhlIGlzXCJdfSx7aWQ6XCJoZXJlLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwiaGVyZSdzXCIsY3VybHk6XCJoZXJl4oCZc1wifSxleHBhbmRlZDpbXCJoZXJlIGlzXCJdfSx7aWQ6XCJpLWhhZC13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknZFwiLGN1cmx5OlwiSeKAmWRcIn0sZXhwYW5kZWQ6W1wiSSBoYWRcIixcIkkgd291bGRcIl19LHtpZDpcImktd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkknbGxcIixjdXJseTpcIknigJlsbFwifSxleHBhbmRlZDpbXCJJIHdpbGxcIl19LHtpZDpcImktYW1cIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJJJ21cIixjdXJseTpcIknigJltXCJ9LGV4cGFuZGVkOltcIkkgYW1cIl19LHtpZDpcImktaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIkkndmVcIixjdXJseTpcIknigJl2ZVwifSxleHBhbmRlZDpbXCJJIGhhdmVcIl19LHtpZDpcImlzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcImlzbid0XCIsY3VybHk6XCJpc27igJl0XCJ9LGV4cGFuZGVkOltcImlzIG5vdFwiXX0se2lkOlwiaXQtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIml0J2xsXCIsY3VybHk6XCJpdOKAmWxsXCJ9LGV4cGFuZGVkOltcIml0IHdpbGxcIl19LHtpZDpcIml0LWhhcy1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIml0J3NcIixjdXJseTpcIml04oCZc1wifSxleHBhbmRlZDpbXCJpdCBoYXNcIixcIml0IGlzXCJdfSx7aWQ6XCJsZXQtdXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJsZXQnc1wiLGN1cmx5OlwibGV04oCZc1wifSxleHBhbmRlZDpbXCJsZXQgdXNcIl19LHtpZDpcIm1pZ2h0LWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJtaWdodCd2ZVwiLGN1cmx5OlwibWlnaHTigJl2ZVwifSxleHBhbmRlZDpbXCJtaWdodCBoYXZlXCJdfSx7aWQ6XCJtdXN0LWhhdmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJtdXN0J3ZlXCIsY3VybHk6XCJtdXN04oCZdmVcIn0sZXhwYW5kZWQ6W1wibXVzdCBoYXZlXCJdfSx7aWQ6XCJzaGUtaGFkLXdvdWxkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hlJ2RcIixjdXJseTpcInNoZeKAmWRcIn0sZXhwYW5kZWQ6W1wic2hlIGhhZFwiLFwic2hlIHdvdWxkXCJdfSx7aWQ6XCJzaGUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNoZSdsbFwiLGN1cmx5Olwic2hl4oCZbGxcIn0sZXhwYW5kZWQ6W1wic2hlIHdpbGxcIl19LHtpZDpcInNoZS1oYXMtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJzaGUnc1wiLGN1cmx5Olwic2hl4oCZc1wifSxleHBhbmRlZDpbXCJzaGUgaGFzXCIsXCJzaGUgaXNcIl19LHtpZDpcInNob3VsZC1oYXZlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic2hvdWxkJ3ZlXCIsY3VybHk6XCJzaG91bGTigJl2ZVwifSxleHBhbmRlZDpbXCJzaG91bGQgaGF2ZVwiXX0se2lkOlwic2hvdWxkLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNob3VsZG4ndFwiLGN1cmx5Olwic2hvdWxkbuKAmXRcIn0sZXhwYW5kZWQ6W1wic2hvdWxkIG5vdFwiXX0se2lkOlwic29tZWJvZHktaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZWJvZHknc1wiLGN1cmx5Olwic29tZWJvZHnigJlzXCJ9LGV4cGFuZGVkOltcInNvbWVib2R5IGhhc1wiLFwic29tZWJvZHkgaXNcIl19LHtpZDpcInNvbWVvbmUtaGFzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwic29tZW9uZSdzXCIsY3VybHk6XCJzb21lb25l4oCZc1wifSxleHBhbmRlZDpbXCJzb21lb25lIGhhc1wiLFwic29tZW9uZSBpc1wiXX0se2lkOlwic29tZXRoaW5nLWhhc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInNvbWV0aGluZydzXCIsY3VybHk6XCJzb21ldGhpbmfigJlzXCJ9LGV4cGFuZGVkOltcInNvbWV0aGluZyBoYXNcIixcInNvbWV0aGluZyBpc1wiXX0se2lkOlwidGhhdC13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhhdCdsbFwiLGN1cmx5OlwidGhhdOKAmWxsXCJ9LGV4cGFuZGVkOltcInRoYXQgd2lsbFwiXX0se2lkOlwidGhhdC1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoYXQnc1wiLGN1cmx5OlwidGhhdOKAmXNcIn0sZXhwYW5kZWQ6W1widGhhdCBpc1wiXX0se2lkOlwidGhlcmUtd2lsbFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXJlJ2xsXCIsY3VybHk6XCJ0aGVyZeKAmWxsXCJ9LGV4cGFuZGVkOltcInRoZXJlIHdpbGxcIl19LHtpZDpcInRoZXJlLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwidGhlcmUnc1wiLGN1cmx5OlwidGhlcmXigJlzXCJ9LGV4cGFuZGVkOltcInRoZXJlIGlzXCJdfSx7aWQ6XCJ0aGV5LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ0aGV5J2xsXCIsY3VybHk6XCJ0aGV54oCZbGxcIn0sZXhwYW5kZWQ6W1widGhleSB3aWxsXCJdfSx7aWQ6XCJ0aGV5LWFyZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInRoZXkncmVcIixjdXJseTpcInRoZXnigJlyZVwifSxleHBhbmRlZDpbXCJ0aGV5IGFyZVwiXX0se2lkOlwid2FzLW5vdFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndhc24ndFwiLGN1cmx5Olwid2FzbuKAmXRcIn0sZXhwYW5kZWQ6W1wid2FzIG5vdFwiXX0se2lkOlwid2UtaGFkLXdvdWxkLWRpZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndlJ2RcIixjdXJseTpcIndl4oCZZFwifSxleHBhbmRlZDpbXCJ3ZSBoYWRcIixcIndlIHdvdWxkXCIsXCJ3ZSBkaWRcIl19LHtpZDpcIndlLXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZSdsbFwiLGN1cmx5Olwid2XigJlsbFwifSxleHBhbmRlZDpbXCJ3ZSB3aWxsXCJdfSx7aWQ6XCJ3ZS1hcmVcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3ZSdyZVwiLGN1cmx5Olwid2XigJlyZVwifSxleHBhbmRlZDpbXCJ3ZSBhcmVcIl19LHtpZDpcIndlcmUtbm90XCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2VyZW4ndFwiLGN1cmx5Olwid2VyZW7igJl0XCJ9LGV4cGFuZGVkOltcIndlcmUgbm90XCJdfSx7aWQ6XCJ3aGF0LWlzLWRvZXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aGF0J3NcIixjdXJseTpcIndoYXTigJlzXCJ9LGV4cGFuZGVkOltcIndoYXQgaXNcIixcIndoYXQgZG9lc1wiXX0se2lkOlwid2hlbi1pc1wiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndoZW4nc1wiLGN1cmx5Olwid2hlbuKAmXNcIn0sZXhwYW5kZWQ6W1wid2hlbiBpc1wiXX0se2lkOlwid2hlcmUtaXNcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3aGVyZSdzXCIsY3VybHk6XCJ3aGVyZeKAmXNcIn0sZXhwYW5kZWQ6W1wid2hlcmUgaXNcIl19LHtpZDpcIndoby13aWxsXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hvJ2xsXCIsY3VybHk6XCJ3aG/igJlsbFwifSxleHBhbmRlZDpbXCJ3aG8gd2lsbFwiXX0se2lkOlwid2hvLWlzXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2hvJ3NcIixjdXJseTpcIndob+KAmXNcIn0sZXhwYW5kZWQ6W1wid2hvIGlzXCJdfSx7aWQ6XCJ3aHktZGlkXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0Olwid2h5J2RcIixjdXJseTpcIndoeeKAmWRcIn0sZXhwYW5kZWQ6W1wid2h5IGRpZFwiXX0se2lkOlwid2lsbC1ub3RcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ3b24ndFwiLGN1cmx5Olwid29u4oCZdFwifSxleHBhbmRlZDpbXCJ3aWxsIG5vdFwiXX0se2lkOlwid291bGQtaGF2ZVwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcIndvdWxkJ3ZlXCIsY3VybHk6XCJ3b3VsZOKAmXZlXCJ9LGV4cGFuZGVkOltcIndvdWxkIGhhdmVcIl19LHtpZDpcInlvdS13b3VsZFwiLHR5cGU6XCJiYXNpY1wiLGNvbnRyYWN0aW9uOntzdHJhaWdodDpcInlvdSdkXCIsY3VybHk6XCJ5b3XigJlkXCJ9LGV4cGFuZGVkOltcInlvdSB3b3VsZFwiXX0se2lkOlwieW91LXdpbGxcIix0eXBlOlwiYmFzaWNcIixjb250cmFjdGlvbjp7c3RyYWlnaHQ6XCJ5b3UnbGxcIixjdXJseTpcInlvdeKAmWxsXCJ9LGV4cGFuZGVkOltcInlvdSB3aWxsXCJdfSx7aWQ6XCJ5b3UtYXJlXCIsdHlwZTpcImJhc2ljXCIsY29udHJhY3Rpb246e3N0cmFpZ2h0OlwieW91J3JlXCIsY3VybHk6XCJ5b3XigJlyZVwifSxleHBhbmRlZDpbXCJ5b3UgYXJlXCJdfV07ZnVuY3Rpb24ga2EoKXtyZXR1cm4obixlKT0+e19uKG4sXCJQYXJhZ3JhcGhOb2RlXCIsKG49Pntjb25zdCBhPW4uY2hpbGRyZW4saT1cInJldGV4dC11c2UtY29udHJhY3Rpb25zXCI7YS5mb3JFYWNoKCgobixhKT0+e1ZuKG4sXCJTZW50ZW5jZU5vZGVcIikmJm4uY2hpbGRyZW4uZm9yRWFjaCgoKGEscik9Pntjb25zdCB0PW4uY2hpbGRyZW47aWYoVm4odFtyLTFdLFwiV29yZE5vZGVcIikmJlZuKGEsXCJXaGl0ZVNwYWNlTm9kZVwiKSYmVm4odFtyKzFdLFwiV29yZE5vZGVcIikpe2NvbnN0IG49cW4odFtyLTFdLmNoaWxkcmVuWzBdKStcIiBcIitxbih0W3IrMV0uY2hpbGRyZW5bMF0pO2xldCBvPVwiXCIsTT1cIlwiO2lmKHZhLnNvbWUoKGU9Pntjb25zdCBhPWUuZXhwYW5kZWQuc29tZSgoZT0+ZS50b0xvd2VyQ2FzZSgpPT09bi50b0xvd2VyQ2FzZSgpKSk7cmV0dXJuIG89W2UuY29udHJhY3Rpb24uY3VybHldLE09ZS5pZCxhfSkpKXtjb25zdCBuPXFuKHRbci0xXSkrcW4oYSkrcW4odFtyKzFdKTtyZXR1cm4gY29uc29sZS5sb2codFtyXSksT2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoYEV4cGVjdGVkIFwiJHtvfVwiIG5vdCBcIiR7bn1cImAse3N0YXJ0OnRlKHRbci0xXSksZW5kOm9lKHRbcisxXSl9LFtpLE1dLmpvaW4oXCI6XCIpKSx7YWN0dWFsOm4sZXhwZWN0ZWQ6byxub3RlOlwiXCIsdXJsOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2NvbnRyYWN0aW9ucy9cIn0pLGV9fX0pKX0pKX0pKX19V24oXCJTZW50ZW5jZU5vZGVcIiksV24oXCJXaGl0ZVNwYWNlTm9kZVwiKTtjb25zdCBSYT17bmV3UmVsaWM6W1wiTmV3IFJlbGljXCIsXCJ3ZVwiXSxuZXdSZWxpY09uZTpbXCJOZXcgUmVsaWMgT25lXCIsXCJOZXcgUmVsaWMgT25lIHBsYXRmb3JtXCJdLGZ1dHVyZVN0YWNrOltcIkZ1dHVyZVN0YWNrXCIsXCJ7RnV0dXJlfVN0YWNrXCJdLGNvZGVTdHJlYW06W1wiQ29kZVN0cmVhbVwiLFwiTmV3IFJlbGljIENvZGVTdHJlYW1cIl0sZXhwbG9yZXI6W1wiRXhwbG9yZXJcIixcIk5ldyBSZWxpYyBFeHBsb3JlclwiXSxpbnN0YW50T2JzZXJ2YWJpbGl0eTpbXCJJbnN0YW50IE9ic2VydmFiaWxpdHlcIixcIk5ldyBSZWxpYyBJL09cIixcIk5ldyBSZWxpYyBJbnN0YW50IE9ic2VydmFiaWxpdHlcIixcIk5ldyBSZWxpYyBJbnN0YW50IE9ic2VydmFiaWxpdHkgKEkvTylcIl0sbG9va291dDpbXCJOZXcgUmVsaWMgTG9va291dFwiLFwiTG9va291dFwiXSxsb29rb3V0OltcIk5ldyBSZWxpYyBOYXZpZ2F0b3JcIixcIk5hdmlnYXRvclwiXSxhcG06W1wiYXBwbGljYXRpb24gcGVyZm9ybWFuY2UgbW9uaXRvcmluZ1wiLFwiYXBwbGljYXRpb24gbW9uaXRvcmluZ1wiLFwiQVBNXCJdLHBpeGllOltcImF1dG8tdGVsZW1ldHJ5IHdpdGggUGl4aWVcIixcInRoZSBQaXhpZSBpbnRlZ3JhdGlvbiB3aXRoIE5ldyBSZWxpYyBPbmVcIixcIm91ciBQaXhpZSBpbnRlZ3JhdGlvblwiLFwidGhlIGludGVncmF0aW9uIHdpdGggUGl4aWVcIixcIlBpeGllXCJdLGRpZ2l0YWxFeHBlcmllbmNlTW9uaXRvcmluZzpbXCJkaWdpdGFsIGV4cGVyaWVuY2UgbW9uaXRvcmluZyAoREVNKVwiLFwiZGlnaXRhbCBleHBlcmllbmNlIG1vbml0b3JpbmdcIixcIkRFTVwiXSxpbmZyYXN0cnVjdHVyZU1vbml0b3Jpbmc6W1wiaW5mcmFzdHJ1Y3R1cmUgbW9uaXRvcmluZ1wiLFwiaW5mcmEgbW9uaXRvcmluZ1wiLFwiaW5mcmFcIl0sbG9nTWFuYWdlbWVudDpbXCJsb2cgbWFuYWdlbWVudFwiLFwibG9nc1wiXSxtZWx0OltcIm1ldHJpY3MsIGV2ZW50cywgbG9ncywgYW5kIHRyYWNlcyAoTUVMVClcIixcIm1ldHJpY3MsIGV2ZW50cywgbG9ncywgYW5kIHRyYWNlc1wiLFwiTUVMVFwiXSxuZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nOltcIm5ldHdvcmsgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyAoTlBNKVwiLFwibmV0d29yayBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJOUE1cIixcIm5ldHdvcmsgbW9uaXRvcmluZ1wiXSxvYnNlcnZhYmlsaXR5OltcIm9ic2VydmFiaWxpdHkgKG8xMXkpXCIsXCJvYnNlcnZhYmlsaXR5XCIsXCJmdWxsLXN0YWNrIG9ic2VydmFiaWxpdHlcIixcImVuZC10by1lbmQgb2JzZXJ2YWJpbGl0eVwiXSxxdWVyeTpbXCJxdWVyeVwiLFwicXVlcmllc1wiLFwicXVlcnlpbmdcIl0sc3ludGhldGljTW9uaXRvcmluZzpbXCJzeW50aGV0aWMgbW9uaXRvcmluZ1wiLFwic3ludGhldGljc1wiLFwic3ludGhldGljIG1vbml0b3JzXCJdfSxZYT17XCJOZXcgUmVsaWMnc1wiOlJhLm5ld1JlbGljLFwibmV3IHJlbGljXCI6UmEubmV3UmVsaWMsTlI6UmEubmV3UmVsaWMsXCJOZXcgUmVsaWMgT25lJ3NcIjpSYS5uZXdSZWxpY09uZSxcIk5ldyBSZWxpYyBvbmVcIjpSYS5uZXdSZWxpY09uZSxOUjE6UmEubmV3UmVsaWNPbmUsXCJGdXR1cmUgU3RhY2tcIjpSYS5mdXR1cmVTdGFjayxGdXR1cmVzdGFjazpSYS5mdXR1cmVTdGFjayxcIk5lcmQgR3JhcGhcIjpcIk5lcmRHcmFwaFwiLE5lcmRncmFwaDpcIk5lcmRHcmFwaFwiLFwiTmVyZCBHcmFwaFwiOlwiTmVyZEdyYXBoXCIsbmVyZGxldDpcIk5lcmRsZXRcIixuZXJkcGFjazpcIk5lcmRwYWNrXCIsXCJOZXJkIFBhY2tcIjpcIk5lcmRwYWNrXCIsTmVyZHN0b3JhZ2U6XCJOZXJkU3RvcmFnZVwiLFwiTmVyZCBTdG9yYWdlXCI6XCJOZXJkU3RvcmFnZVwiLFwiTmV3IFJlbGljIENvZGVTdHJlYW0nc1wiOlJhLmNvZGVTdHJlYW0sXCJOZXcgUmVsaWMgQ29kZSBTdHJlYW1cIjpSYS5jb2RlU3RyZWFtLFwiQ29kZSBTdHJlYW1cIjpSYS5jb2RlU3RyZWFtLGNvZGVzdHJlYW06UmEuY29kZVN0cmVhbSxcIk5ldyBSZWxpYyBFeHBsb3JlcidzXCI6UmEuZXhwbG9yZXIsZXhwbG9yZXI6UmEuZXhwbG9yZXIsXCJJbmZpbml0ZSB0cmFjaW5nXCI6XCJJbmZpbml0ZSBUcmFjaW5nXCIsXCJOZXcgUmVsaWMgaW5zdGFudCBvYnNlcnZhYmlsaXR5XCI6UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJpbnN0YW50IE9ic2VydmFiaWxpdHlcIjpSYS5pbnN0YW50T2JzZXJ2YWJpbGl0eSxOUklPOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LElPOlJhLmluc3RhbnRPYnNlcnZhYmlsaXR5LFwiSS9PXCI6UmEuaW5zdGFudE9ic2VydmFiaWxpdHksXCJOZXcgUmVsaWMgTG9va291dCdzXCI6UmEubG9va291dCxsb29rb3V0OlJhLmxvb2tvdXQsXCJOZXcgUmVsaWMgTmF2aWdhdG9yJ3NcIjpSYS5uYXZpZ2F0b3IsbmF2aWdhdG9yOlJhLm5hdmlnYXRvcixBbGVydHM6XCJhbGVydHNcIixcIkFub21hbHkgRGV0ZWN0aW9uXCI6XCJhbm9tYWx5IGRldGVjdGlvblwiLFwiQXBwbGljYXRpb24gUGVyZm9ybWFuY2UgTWFuYWdlbWVudFwiOlJhLmFwbSxcIkFwcGxpY2F0aW9uIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpSYS5hcG0sXCJBcHBsaWNhdGlvbiBNb25pdG9yaW5nXCI6UmEuYXBtLFwiQXBwbGllZCBJbnRlbGxpZ2VuY2VcIjpcImFwcGxpZWQgaW50ZWxsaWdlbmNlXCIsQUk6XCJhcHBsaWVkIGludGVsbGlnZW5jZVwiLEFJT3BzOlwiYXBwbGllZCBpbnRlbGxpZ2VuY2VcIixcIkF1dG8gbWFwXCI6XCJhdXRvbWFwXCIsXCJQaXhpZSdzXCI6UmEucGl4aWUscGl4aWU6UmEucGl4aWUsXCJBdXRvLXRlbGVtZXRyeSB3aXRoIFBpeGllXCI6UmEucGl4aWUsXCJCcm93c2VyIE1vbml0b3JpbmdcIjpcImJyb3dzZXIgbW9uaXRvcmluZ1wiLENvbnRhaW5lcnM6XCJjb250YWluZXJzXCIsRGFzaGJvYXJkOlwiZGFzaGJvYXJkXCIsRGFzaGJvYXJkczpcImRhc2hib2FyZHNcIixcIkRhdGEgRXhwbG9yZXJcIjpcImRhdGEgZXhwbG9yZXJcIixcIkRhdGEgaW5nZXN0XCI6XCJkYXRhIGluZ2VzdFwiLFwiRGlnaXRhbCBFeHBlcmllbmNlIE1vbml0b3JpbmdcIjpSYS5kaWdpdGFsRXhwZXJpZW5jZU1vbml0b3JpbmcsXCJkaWdpdGFsIG1vbml0b3JpbmdcIjpSYS5kaWdpdGFsRXhwZXJpZW5jZU1vbml0b3JpbmcsXCJEaXN0cmlidXRlZCBUcmFjaW5nXCI6XCJkaXN0cmlidXRlZCB0cmFjaW5nXCIsXCJFcnJvcnMgaW5ib3hcIjpcImVycm9ycyBpbmJveFwiLFwiRXZlbnQgQ29ycmVsYXRpb25cIjpcImV2ZW50IGNvcnJlbGF0aW9uXCIsXCJJbmNpZGVudCBJbnRlbGxpZ2VuY2VcIjpcImluY2lkZW50IGludGVsbGlnZW5jZVwiLFwiSW5mcmFzdHJ1Y3R1cmUgTW9uaXRvcmluZ1wiOlJhLmluZnJhc3RydWN0dXJlTW9uaXRvcmluZyxcIkt1YmVybmV0ZXMgQ2x1c3RlciBFeHBsb3JlclwiOlwiS3ViZXJuZXRlcyBjbHVzdGVyIGV4cGxvcmVyXCIsXCJLdWJlcm5ldGVzIE1vbml0b3JpbmdcIjpcIkt1YmVybmV0ZXMgbW9uaXRvcmluZ1wiLFwibWljcm8gc2VydmljZXNcIjpcIm1pY3Jvc2VydmljZXNcIixNaWNyb3NlcnZpY2VzOlwibWljcm9zZXJ2aWNlc1wiLEludGVncmF0aW9uczpcImludGVncmF0aW9uc1wiLFwiTG9nIE1hbmFnZW1lbnRcIjpSYS5sb2dNYW5hZ2VtZW50LExvZ3M6UmEubG9nTWFuYWdlbWVudCxcIk1ldHJpY3MsIEV2ZW50cywgTG9ncywgYW5kIFRyYWNlc1wiOlJhLm1lbHQsXCJNb2JpbGUgTW9uaXRvcmluZ1wiOlwibW9iaWxlIG1vbml0b3JpbmdcIixcIk1vZGVsIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk1MIG1vZGVsIG1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixcIk1MIG1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIjpcIm1vZGVsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmdcIixNUE06XCJtb2RlbCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nXCIsXCJOZXR3b3JrIFBlcmZvcm1hbmNlIE1vbml0b3JpbmdcIjpSYS5uZXR3b3JrUGVyZm9ybWFuY2VNb25pdG9yaW5nLFwiTmV0d29yayBNb25pdG9yaW5nXCI6UmEubmV0d29ya1BlcmZvcm1hbmNlTW9uaXRvcmluZyxPYnNlcnZhYmlsaXR5OlJhLm9ic2VydmFiaWxpdHksTzExeTpSYS5vYnNlcnZhYmlsaXR5LFwiRnVsbC1TdGFjayBPYnNlcnZhYmlsaXR5XCI6UmEub2JzZXJ2YWJpbGl0eSxRdWVyeTpSYS5xdWVyeSxRdWVyaWVzOlJhLnF1ZXJ5LFF1ZXJ5aW5nOlJhLnF1ZXJ5LFwiUXVlcnkgQnVpbGRlclwiOlwicXVlcnkgYnVpbGRlclwiLFwicXVpY2sgc3RhcnRzXCI6XCJxdWlja3N0YXJ0c1wiLFF1aWNrU3RhcnRzOlwicXVpY2tzdGFydHNcIixcIlNlcnZlcmxlc3MgbW9uaXRvcmluZ1wiOlwic2VydmVybGVzcyBtb25pdG9yaW5nXCIsXCJzeW50aGV0aWNzIG1vbml0b3JpbmdcIjpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFwiU3ludGhldGljIG1vbml0b3JpbmdcIjpSYS5zeW50aGV0aWNNb25pdG9yaW5nLFN5bnRoZXRpY3M6UmEuc3ludGhldGljTW9uaXRvcmluZyxcIkZ1bGwtc3RhY2sgT2JzZXJ2YWJpbGl0eVwiOlwiZnVsbC1zdGFjayBvYnNlcnZhYmlsaXR5XCIsXCJmdWxsIHN0YWNrIG9ic2VydmFiaWxpdHlcIjpcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLEZTTzpcImZ1bGwtc3RhY2sgb2JzZXJ2YWJpbGl0eVwiLFwiVGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIjpcInRlbGVtZXRyeSBkYXRhIHBsYXRmb3JtXCIsVERQOlwidGVsZW1ldHJ5IGRhdGEgcGxhdGZvcm1cIn0sQWE9T2JqZWN0LmtleXMoWWEpLFBhPVwicmV0ZXh0LWNhcGl0YWxpemF0aW9uXCI7ZnVuY3Rpb24gQ2EoKXtyZXR1cm4obixlKT0+e2FhKG4sQWEsKChuLGEsaSxyKT0+e2NvbnN0IHQ9cW4obik7bGV0IG89WWFbcl0sTT1cIlwiO2lmKCEoQXJyYXkuaXNBcnJheShvKT9vOltvXSkuc29tZSgobj0+bj09PXQpKSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8mJihvPVtvXSksTT0oZSxhLHIpPT57Y29uc3Qgbz1cInN0cmluZ1wiPT10eXBlb2YgcixNPUFycmF5LmlzQXJyYXkocik7aWYoIW8mJiFNKXJldHVybiBjb25zb2xlLmVycm9yKCdcImNoZWNrQ29udGV4dFwiIGV4cGVjdHMgdGhlIGFyZ3VtZW50IFwibWF0Y2hlc1RvQ2hlY2tcIiB0byBiZSBhbiBhcnJheSBvciBzdHJpbmdcXCcnKSxjb25zb2xlLmxvZyh0eXBlb2YgciksbnVsbDtpZihlIT09dClyZXR1cm4gbnVsbDtsZXQgcz1pLmNoaWxkcmVuLm1hcCgoKGUsaSxyKT0+e2lmKGU9PT1uWzBdKXtsZXQgbj1bXTtyZXR1cm5bLi4uQXJyYXkoMiphKV0uZm9yRWFjaCgoKGUsYSk9PntuLnVuc2hpZnQocltpLShhKzEpXSl9KSksbi5wdXNoKGUpLG59cmV0dXJuITF9KSkuZmlsdGVyKChuPT5uKSlbMF07cmV0dXJuIG8/cj09PXFuKHMpOk0/ci5zb21lKChuPT5uPT09cW4ocykpKTp2b2lkIDB9LE0oXCJPYnNlcnZhYmlsaXR5XCIsMSxcIkluc3RhbnQgT2JzZXJ2YWJpbGl0eVwiKXx8TShcIkkvT1wiLDEsXCJSZWxpYyBJL09cIikpcmV0dXJuIG51bGw7T2JqZWN0LmFzc2lnbihlLm1lc3NhZ2UoXCJSZXBsYWNlIFwiK3VhKHQsXCJgXCIpK1wiIHdpdGggXCIrdWEobyxcImBcIikse3N0YXJ0OnRlKG5bMF0pLGVuZDpvZShuW24ubGVuZ3RoLTFdKX0sW1BhLHIucmVwbGFjZSgvXFxzKy9nLFwiLVwiKS50b0xvd2VyQ2FzZSgpXS5qb2luKFwiOlwiKSkse2FjdHVhbDp0LGV4cGVjdGVkOm8sdXJsOlwiaHR0cHM6Ly9kb2NzLm5ld3JlbGljLmNvbS9kb2NzL3N0eWxlLWd1aWRlL2NhcGl0YWxpemF0aW9uL3Byb2R1Y3QtY2FwYWJpbGl0eS1mZWF0dXJlLXVzYWdlLyN3aGVuLXRvLXVzZS10aXRsZS1jYXNlXCJ9KX19KSl9fWZ1bmN0aW9uIFRhKCl7cmV0dXJuKG4sZSk9PntfbihuLFwiUGFyYWdyYXBoTm9kZVwiLChuPT57Y29uc3QgYT1uLmNoaWxkcmVuLGk9XCJyZXRleHQtbm8tZW1vamlzXCIscj1bXCJcIl07YS5mb3JFYWNoKCgobixhKT0+e1ZuKG4sXCJTZW50ZW5jZU5vZGVcIikmJm4uY2hpbGRyZW4uZm9yRWFjaCgoKGEsdCk9PntpZihuLmNoaWxkcmVuLFZuKGEsXCJTeW1ib2xOb2RlXCIpJiYvXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY30vdS50ZXN0KGEudmFsdWUpKXtjb25zdCBuPWEudmFsdWU7cmV0dXJuIE9iamVjdC5hc3NpZ24oZS5tZXNzYWdlKGBFeHBlY3RlZCBub3RoaW5nLCBub3QgXCIke259XCJgLHtzdGFydDp0ZShhKSxlbmQ6b2UoYSl9LFtpLGEudmFsdWVdLmpvaW4oXCI6XCIpKSx7YWN0dWFsOm4sZXhwZWN0ZWQ6cixub3RlOlwiXCIsdXJsOlwiaHR0cHM6Ly9vbmUtY29yZS5kYXRhbmVyZC51cy9mb3VuZGF0aW9uL2Rlc2lnbi93cml0aW5nL2Vtb2ppcy9cIn0pLGV9fSkpfSkpfSkpfX12YXIgeGE9W1wiTmV3IFJlbGljXCIsXCJOZXcgUmVsaWMgT25lXCIsXCJuZXJkZ3JhcGhcIixcImdyYXBocWwtZm9ybWF0XCIsXCJncmFwaHFsXCIsXCJncmFwaGlxbFwiLFwiRmlnbWFcIixcIlVJXCIsXCJOb2RlLmpzXCIsXCJBUE1cIixcInNlcnZlcmxlc3NcIixcImt1YmVybmV0ZXNcIixcIkFXU1wiLFwibGFtYmRhXCIsXCJBSVwiLFwib2JzZXJ2YWJpbGl0eVwiLFwibmVyZHBhY2tcIixcIm5lcmRsZXRcIixcIkNMSVwiLFwibGludXhcIixcInVidW50dVwiLFwiT1NcIixcIlNMT1wiLFwiU0xBXCIsXCJTTElcIixcIlNMTVwiLFwiTlIxXCIsXCJkZXZvcHNcIixcIm5ycWwvUEhQXCIsXCJwaS1ob2xlXCIsXCJETlNcIixcInJlZGlzXCIsXCJTREtcIixcIkFQSVwiLFwia2Fma2FcIixcIlMzXCIsXCJ2cG4vcGhwXCIsXCJwb3N0cmdyZXNxbFwiLFwibXlzcWxcIixcInByb21xbFwiLFwiVk1cIixcImZpcmViYXNlXCIsXCJrZW50aWtcIixcInZwY1wiLFwiZW5kcG9pbnRcIixcInBlcm1hbGlua1wiLFwiYXp1cmVcIixcIm9wc1wiLFwiY29kZXN0cmVhbVwiLFwiZmFzdGx5XCIsXCJnYXRzYnlcIixcImxhY2V3b3JrXCIsXCJtb25nb2RiXCIsXCJjcmlibFwiLFwiZGV2XCIsXCJnaWdhbW9uXCIsXCJzeXNsb2dcIixcImFra2FcIixcImFsZ29yaXRobWFcIixcImFuc2libGVcIixcIm1hY29zXCIsXCJjZW50b3NcIixcImFwaWdlZVwiLFwiamlyYVwiLFwiQysrXCIsXCJDXCIsXCJjb3VjaGJhc2VcIixcImNvbnN1bFwiLFwiY29yZG92YVwiLFwiZGphbmdvXCIsXCJmNVwiLFwiZmx1ZW50ZFwiLFwiR0NQXCIsXCJUQ1BcIixcInd3d1wiLFwieW1sXCIsXCJ3Z2V0XCIsXCJtZHhcIixcIm1hcmtkb3duXCIsXCJHcmFmYW5hXCIsXCJIZXJva3VcIixcImhhcHJveHlcIixcIkhUVFBTXCIsXCJxdWlja3N0YXJ0L2Nvd1wiLFwiZnJvbnRlbmRcIixcImJhY2tlbmRcIixcImJpdGJ1Y2tldFwiLFwiZ2l0bGFiXCIsXCJnaXRodWJcIixcInRyZWxsb1wiLFwiYXNhbmFcIixcImludGVncmF0aW9uc1wiXTtmdW5jdGlvbiB6YShuLGUpe3ZhciBhPU9iamVjdC5rZXlzKG4pO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobik7ZSYmKGk9aS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksYS5wdXNoLmFwcGx5KGEsaSl9cmV0dXJuIGF9ZnVuY3Rpb24gRWEobixlLGEpe3JldHVybiBlIGluIG4/T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sZSx7dmFsdWU6YSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOm5bZV09YSxufWZ1bmN0aW9uIEJhKG4sZSxhLGkscix0LG8pe3RyeXt2YXIgTT1uW3RdKG8pLHM9TS52YWx1ZX1jYXRjaChuKXtyZXR1cm4gdm9pZCBhKG4pfU0uZG9uZT9lKHMpOlByb21pc2UucmVzb2x2ZShzKS50aGVuKGkscil9ZnVuY3Rpb24gTmEobil7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9dGhpcyxhPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKGkscil7dmFyIHQ9bi5hcHBseShlLGEpO2Z1bmN0aW9uIG8obil7QmEodCxpLHIsbyxNLFwibmV4dFwiLG4pfWZ1bmN0aW9uIE0obil7QmEodCxpLHIsbyxNLFwidGhyb3dcIixuKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIFphKG4sZSl7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIG59KG4pfHxmdW5jdGlvbihuLGUpe3ZhciBhPW51bGw9PW4/bnVsbDpcInVuZGVmaW5lZFwiIT10eXBlb2YgU3ltYm9sJiZuW1N5bWJvbC5pdGVyYXRvcl18fG5bXCJAQGl0ZXJhdG9yXCJdO2lmKG51bGwhPWEpe3ZhciBpLHIsdD1bXSxvPSEwLE09ITE7dHJ5e2ZvcihhPWEuY2FsbChuKTshKG89KGk9YS5uZXh0KCkpLmRvbmUpJiYodC5wdXNoKGkudmFsdWUpLCFlfHx0Lmxlbmd0aCE9PWUpO289ITApO31jYXRjaChuKXtNPSEwLHI9bn1maW5hbGx5e3RyeXtvfHxudWxsPT1hLnJldHVybnx8YS5yZXR1cm4oKX1maW5hbGx5e2lmKE0pdGhyb3cgcn19cmV0dXJuIHR9fShuLGUpfHxJYShuLGUpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIil9KCl9ZnVuY3Rpb24gRmEobil7cmV0dXJuIGZ1bmN0aW9uKG4pe2lmKEFycmF5LmlzQXJyYXkobikpcmV0dXJuIFVhKG4pfShuKXx8ZnVuY3Rpb24obil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmbnVsbCE9bltTeW1ib2wuaXRlcmF0b3JdfHxudWxsIT1uW1wiQEBpdGVyYXRvclwiXSlyZXR1cm4gQXJyYXkuZnJvbShuKX0obil8fElhKG4pfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpfSgpfWZ1bmN0aW9uIElhKG4sZSl7aWYobil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4pcmV0dXJuIFVhKG4sZSk7dmFyIGE9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG4pLnNsaWNlKDgsLTEpO3JldHVyblwiT2JqZWN0XCI9PT1hJiZuLmNvbnN0cnVjdG9yJiYoYT1uLmNvbnN0cnVjdG9yLm5hbWUpLFwiTWFwXCI9PT1hfHxcIlNldFwiPT09YT9BcnJheS5mcm9tKG4pOlwiQXJndW1lbnRzXCI9PT1hfHwvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChhKT9VYShuLGUpOnZvaWQgMH19ZnVuY3Rpb24gVWEobixlKXsobnVsbD09ZXx8ZT5uLmxlbmd0aCkmJihlPW4ubGVuZ3RoKTtmb3IodmFyIGE9MCxpPW5ldyBBcnJheShlKTthPGU7YSsrKWlbYV09blthXTtyZXR1cm4gaX1mdW5jdGlvbiBqYShuLGUpe3ZhciBhLGkscix0PXhhO2V8fChlPW51bGwhPT0oYT13aW5kb3cpJiZ2b2lkIDAhPT1hJiZudWxsIT09KGk9YS5sb2NhbFN0b3JhZ2UpJiZ2b2lkIDAhPT1pJiZpLmxhbmd1YWdlTGludGVyQ3VzdG9tRGljdGlvbmFyeT9KU09OLnBhcnNlKG51bGw9PT0ocj13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09cj92b2lkIDA6ci5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpOltdKSx0LnB1c2guYXBwbHkodCxGYShlKSk7dmFyIG89e2RpY3Rpb25hcnk6ZnVuY3Rpb24obil7bihudWxsLHthZmY6XCJTRVQgVVRGLThcXG5UUlkgZXNpYW5ydG9sY2R1Z21waGJ5ZnZrd3pFU0lBTlJUT0xDRFVHTVBIQllGVktXWidcXG5JQ09OViAxXFxuSUNPTlYg4oCZICdcXG5OT1NVR0dFU1QgIVxcblxcbiMgb3JkaW5hbCBudW1iZXJzXFxuQ09NUE9VTkRNSU4gMVxcbiMgb25seSBpbiBjb21wb3VuZHM6IDF0aCwgMnRoLCAzdGhcXG5PTkxZSU5DT01QT1VORCBjXFxuIyBjb21wb3VuZCBydWxlczpcXG4jIDEuIFswLTldKjFbMC05XXRoICgxMHRoLCAxMXRoLCAxMnRoLCA1NjcxNHRoLCBldGMuKVxcbiMgMi4gWzAtOV0qWzAyLTldKDFzdHwybmR8M3JkfFs0LTlddGgpICgyMXN0LCAyMm5kLCAxMjNyZCwgMTIzNHRoLCBldGMuKVxcbkNPTVBPVU5EUlVMRSAyXFxuQ09NUE9VTkRSVUxFIG4qMXRcXG5DT01QT1VORFJVTEUgbiptcFxcbldPUkRDSEFSUyAwMTIzNDU2Nzg5XFxuXFxuUEZYIEEgWSAxXFxuUEZYIEEgICAwICAgICByZSAgICAgICAgIC5cXG5cXG5QRlggSSBZIDFcXG5QRlggSSAgIDAgICAgIGluICAgICAgICAgLlxcblxcblBGWCBVIFkgMVxcblBGWCBVICAgMCAgICAgdW4gICAgICAgICAuXFxuXFxuUEZYIEMgWSAxXFxuUEZYIEMgICAwICAgICBkZSAgICAgICAgICAuXFxuXFxuUEZYIEUgWSAxXFxuUEZYIEUgICAwICAgICBkaXMgICAgICAgICAuXFxuXFxuUEZYIEYgWSAxXFxuUEZYIEYgICAwICAgICBjb24gICAgICAgICAuXFxuXFxuUEZYIEsgWSAxXFxuUEZYIEsgICAwICAgICBwcm8gICAgICAgICAuXFxuXFxuU0ZYIFYgTiAyXFxuU0ZYIFYgICBlICAgICBpdmUgICAgICAgIGVcXG5TRlggViAgIDAgICAgIGl2ZSAgICAgICAgW15lXVxcblxcblNGWCBOIFkgM1xcblNGWCBOICAgZSAgICAgaW9uICAgICAgICBlXFxuU0ZYIE4gICB5ICAgICBpY2F0aW9uICAgIHlcXG5TRlggTiAgIDAgICAgIGVuICAgICAgICAgW15leV1cXG5cXG5TRlggWCBZIDNcXG5TRlggWCAgIGUgICAgIGlvbnMgICAgICAgZVxcblNGWCBYICAgeSAgICAgaWNhdGlvbnMgICB5XFxuU0ZYIFggICAwICAgICBlbnMgICAgICAgIFteZXldXFxuXFxuU0ZYIEggTiAyXFxuU0ZYIEggICB5ICAgICBpZXRoICAgICAgIHlcXG5TRlggSCAgIDAgICAgIHRoICAgICAgICAgW155XVxcblxcblNGWCBZIFkgMVxcblNGWCBZICAgMCAgICAgbHkgICAgICAgICAuXFxuXFxuU0ZYIEcgWSAyXFxuU0ZYIEcgICBlICAgICBpbmcgICAgICAgIGVcXG5TRlggRyAgIDAgICAgIGluZyAgICAgICAgW15lXVxcblxcblNGWCBKIFkgMlxcblNGWCBKICAgZSAgICAgaW5ncyAgICAgICBlXFxuU0ZYIEogICAwICAgICBpbmdzICAgICAgIFteZV1cXG5cXG5TRlggRCBZIDRcXG5TRlggRCAgIDAgICAgIGQgICAgICAgICAgZVxcblNGWCBEICAgeSAgICAgaWVkICAgICAgICBbXmFlaW91XXlcXG5TRlggRCAgIDAgICAgIGVkICAgICAgICAgW15leV1cXG5TRlggRCAgIDAgICAgIGVkICAgICAgICAgW2FlaW91XXlcXG5cXG5TRlggVCBOIDRcXG5TRlggVCAgIDAgICAgIHN0ICAgICAgICAgZVxcblNGWCBUICAgeSAgICAgaWVzdCAgICAgICBbXmFlaW91XXlcXG5TRlggVCAgIDAgICAgIGVzdCAgICAgICAgW2FlaW91XXlcXG5TRlggVCAgIDAgICAgIGVzdCAgICAgICAgW15leV1cXG5cXG5TRlggUiBZIDRcXG5TRlggUiAgIDAgICAgIHIgICAgICAgICAgZVxcblNGWCBSICAgeSAgICAgaWVyICAgICAgICBbXmFlaW91XXlcXG5TRlggUiAgIDAgICAgIGVyICAgICAgICAgW2FlaW91XXlcXG5TRlggUiAgIDAgICAgIGVyICAgICAgICAgW15leV1cXG5cXG5TRlggWiBZIDRcXG5TRlggWiAgIDAgICAgIHJzICAgICAgICAgZVxcblNGWCBaICAgeSAgICAgaWVycyAgICAgICBbXmFlaW91XXlcXG5TRlggWiAgIDAgICAgIGVycyAgICAgICAgW2FlaW91XXlcXG5TRlggWiAgIDAgICAgIGVycyAgICAgICAgW15leV1cXG5cXG5TRlggUyBZIDRcXG5TRlggUyAgIHkgICAgIGllcyAgICAgICAgW15hZWlvdV15XFxuU0ZYIFMgICAwICAgICBzICAgICAgICAgIFthZWlvdV15XFxuU0ZYIFMgICAwICAgICBlcyAgICAgICAgIFtzeHpoXVxcblNGWCBTICAgMCAgICAgcyAgICAgICAgICBbXnN4emh5XVxcblxcblNGWCBQIFkgM1xcblNGWCBQICAgeSAgICAgaW5lc3MgICAgICBbXmFlaW91XXlcXG5TRlggUCAgIDAgICAgIG5lc3MgICAgICAgW2FlaW91XXlcXG5TRlggUCAgIDAgICAgIG5lc3MgICAgICAgW155XVxcblxcblNGWCBNIFkgMVxcblNGWCBNICAgMCAgICAgJ3MgICAgICAgICAuXFxuXFxuU0ZYIEIgWSAzXFxuU0ZYIEIgICAwICAgICBhYmxlICAgICAgIFteYWVpb3VdXFxuU0ZYIEIgICAwICAgICBhYmxlICAgICAgIGVlXFxuU0ZYIEIgICBlICAgICBhYmxlICAgICAgIFteYWVpb3VdZVxcblxcblNGWCBMIFkgMVxcblNGWCBMICAgMCAgICAgbWVudCAgICAgICAuXFxuXFxuUkVQIDkwXFxuUkVQIGEgZWlcXG5SRVAgZWkgYVxcblJFUCBhIGV5XFxuUkVQIGV5IGFcXG5SRVAgYWkgaWVcXG5SRVAgaWUgYWlcXG5SRVAgYWxvdCBhX2xvdFxcblJFUCBhcmUgYWlyXFxuUkVQIGFyZSBlYXJcXG5SRVAgYXJlIGVpclxcblJFUCBhaXIgYXJlXFxuUkVQIGFpciBlcmVcXG5SRVAgZXJlIGFpclxcblJFUCBlcmUgZWFyXFxuUkVQIGVyZSBlaXJcXG5SRVAgZWFyIGFyZVxcblJFUCBlYXIgYWlyXFxuUkVQIGVhciBlcmVcXG5SRVAgZWlyIGFyZVxcblJFUCBlaXIgZXJlXFxuUkVQIGNoIHRlXFxuUkVQIHRlIGNoXFxuUkVQIGNoIHRpXFxuUkVQIHRpIGNoXFxuUkVQIGNoIHR1XFxuUkVQIHR1IGNoXFxuUkVQIGNoIHNcXG5SRVAgcyBjaFxcblJFUCBjaCBrXFxuUkVQIGsgY2hcXG5SRVAgZiBwaFxcblJFUCBwaCBmXFxuUkVQIGdoIGZcXG5SRVAgZiBnaFxcblJFUCBpIGlnaFxcblJFUCBpZ2ggaVxcblJFUCBpIHV5XFxuUkVQIHV5IGlcXG5SRVAgaSBlZVxcblJFUCBlZSBpXFxuUkVQIGogZGlcXG5SRVAgZGkgalxcblJFUCBqIGdnXFxuUkVQIGdnIGpcXG5SRVAgaiBnZVxcblJFUCBnZSBqXFxuUkVQIHMgdGlcXG5SRVAgdGkgc1xcblJFUCBzIGNpXFxuUkVQIGNpIHNcXG5SRVAgayBjY1xcblJFUCBjYyBrXFxuUkVQIGsgcXVcXG5SRVAgcXUga1xcblJFUCBrdyBxdVxcblJFUCBvIGVhdVxcblJFUCBlYXUgb1xcblJFUCBvIGV3XFxuUkVQIGV3IG9cXG5SRVAgb28gZXdcXG5SRVAgZXcgb29cXG5SRVAgZXcgdWlcXG5SRVAgdWkgZXdcXG5SRVAgb28gdWlcXG5SRVAgdWkgb29cXG5SRVAgZXcgdVxcblJFUCB1IGV3XFxuUkVQIG9vIHVcXG5SRVAgdSBvb1xcblJFUCB1IG9lXFxuUkVQIG9lIHVcXG5SRVAgdSBpZXVcXG5SRVAgaWV1IHVcXG5SRVAgdWUgZXdcXG5SRVAgZXcgdWVcXG5SRVAgdWZmIG91Z2hcXG5SRVAgb28gaWV1XFxuUkVQIGlldSBvb1xcblJFUCBpZXIgZWFyXFxuUkVQIGVhciBpZXJcXG5SRVAgZWFyIGFpclxcblJFUCBhaXIgZWFyXFxuUkVQIHcgcXVcXG5SRVAgcXUgd1xcblJFUCB6IHNzXFxuUkVQIHNzIHpcXG5SRVAgc2h1biB0aW9uXFxuUkVQIHNodW4gc2lvblxcblJFUCBzaHVuIGNpb25cXG5SRVAgc2l6ZSBjaXNlXCIsZGljOlwiNDk1NjhcXG4wL25tXFxuMHRoL3B0XFxuMS9uMVxcbjFzdC9wXFxuMXRoL3RjXFxuMi9ubVxcbjJuZC9wXFxuMnRoL3RjXFxuMy9ubVxcbjNyZC9wXFxuM3RoL3RjXFxuNC9ubVxcbjR0aC9wdFxcbjUvbm1cXG41dGgvcHRcXG42L25tXFxuNnRoL3B0XFxuNy9ubVxcbjd0aC9wdFxcbjgvbm1cXG44dGgvcHRcXG45L25tXFxuOXRoL3B0XFxuQS9TTVxcbkFBL01cXG5BQUFcXG5BQi9NXFxuQUJBXFxuQUJDL1NNXFxuQUJNL1NNXFxuQUJTXFxuQUMvTVxcbkFDTFUvTVxcbkFDVFxcbkFDVEgvTVxcbkFEL01cXG5BRENcXG5BRERcXG5BRE1cXG5BRFAvTVxcbkFGXFxuQUZBSUtcXG5BRkJcXG5BRkMvTVxcbkFGRENcXG5BRk5cXG5BRlRcXG5BSS9TTVxcbkFJRFMvTVxcbkFLXFxuQUxcXG5BTS9NXFxuQU1BXFxuQU1EL01cXG5BTlNJL1NcXG5BTlpVUy9NXFxuQU9ML01cXG5BUC9NXFxuQVBCXFxuQVBDXFxuQVBJXFxuQVBPXFxuQVBSXFxuQVJcXG5BUkNcXG5BU0FQXFxuQVNDSUkvU01cXG5BU0wvTVxcbkFTUENBXFxuQVRNL01cXG5BVFAvTVxcbkFUVlxcbkFWXFxuQVZJXFxuQVdBQ1MvTVxcbkFXT0wvTVxcbkFXUy9NXFxuQVovTVxcbkFaVC9NXFxuQWFjaGVuL01cXG5BYWxpeWFoL01cXG5BYXJvbi9NXFxuQWJiYXMvTVxcbkFiYmFzaWQvTVxcbkFiYm90dC9NXFxuQWJieS9NXFxuQWJkdWwvTVxcbkFiZS9NXFxuQWJlbC9NXFxuQWJlbGFyZC9NXFxuQWJlbHNvbi9NXFxuQWJlcmRlZW4vTVxcbkFiZXJuYXRoeS9NXFxuQWJpZGphbi9NXFxuQWJpZ2FpbC9NXFxuQWJpbGVuZS9NXFxuQWJuZXIvTVxcbkFib3JpZ2luZS9NU1xcbkFicmFoYW0vTVxcbkFicmFtL01TXFxuQWJyYW1zL01cXG5BYnNhbG9tL01cXG5BYnVqYS9NXFxuQWJ5c3NpbmlhL01cXG5BYnlzc2luaWFuL01cXG5BYy9NXFxuQWNhZGlhL01cXG5BY2FwdWxjby9NXFxuQWNjZW50dXJlL01cXG5BY2NyYS9NXFxuQWNldmVkby9NXFxuQWNoYWVhbi9NXFxuQWNoZWJlL01cXG5BY2hlcm5hci9NXFxuQWNoZXNvbi9NXFxuQWNoaWxsZXMvTVxcbkFjb25jYWd1YS9NXFxuQWNvc3RhL01cXG5BY3JvcG9saXNcXG5BY3J1eC9NXFxuQWN0YWVvbi9NXFxuQWN0b24vTVxcbkFjdHMvTVxcbkFjdWZmL01cXG5BZGEvU01cXG5BZGFtL1NNXFxuQWRhbXMvTVxcbkFkYW4vTVxcbkFkYW5hL01cXG5BZGFyL01cXG5BZGRhbXMvTVxcbkFkZGVybGV5L01cXG5BZGRpZS9NXFxuQWRkaXNvbi9NXFxuQWRlbGEvTVxcbkFkZWxhaWRlL01cXG5BZGVsZS9NXFxuQWRlbGluZS9NXFxuQWRlbi9NXFxuQWRlbmF1ZXIvTVxcbkFkaGFyYS9NXFxuQWRpZGFzL01cXG5BZGlyb25kYWNrL1NNXFxuQWRpcm9uZGFja3MvTVxcbkFka2lucy9NXFxuQWRsZXIvTVxcbkFkbVxcbkFkbWlyYWx0eVxcbkFkb2xmL01cXG5BZG9sZm8vTVxcbkFkb2xwaC9NXFxuQWRvbmlzL01TXFxuQWRyZW5hbGluL01TXFxuQWRyaWFuL01cXG5BZHJpYW5hL01cXG5BZHJpYXRpYy9NXFxuQWRyaWVubmUvTVxcbkFkdmVudC9NU1xcbkFkdmVudGlzdC9NU1xcbkFkdmlsL01cXG5BZWdlYW4vTVxcbkFlbGZyaWMvTVxcbkFlbmVhcy9NXFxuQWVuZWlkL01cXG5BZW9sdXMvTVxcbkFlcm9mbG90L01cXG5BZXNjaHlsdXMvTVxcbkFlc2N1bGFwaXVzL01cXG5BZXNvcC9NXFxuQWZnaGFuL1NNXFxuQWZnaGFuaS9NXFxuQWZnaGFuaXN0YW4vTVxcbkFmclxcbkFmcmljYS9NXFxuQWZyaWNhbi9TTVxcbkFmcmlrYWFucy9NXFxuQWZyaWthbmVyL1NNXFxuQWZyby9TTVxcbkFmcm9jZW50cmljXFxuQWZyb2NlbnRyaXNtL01cXG5BZy9NXFxuQWdhbWVtbm9uL01cXG5BZ2FuYVxcbkFnYXNzaS9NXFxuQWdhc3Npei9NXFxuQWdhdGhhL01cXG5BZ2dpZS9NXFxuQWdsYWlhL01cXG5BZ25lcy9NXFxuQWduZXcvTVxcbkFnbmkvTVxcbkFncmEvTVxcbkFncmljb2xhL01cXG5BZ3JpcHBhL01cXG5BZ3JpcHBpbmEvTVxcbkFndWFkaWxsYS9NXFxuQWd1YXNjYWxpZW50ZXNcXG5BZ3VpbGFyL01cXG5BZ3VpbmFsZG8vTVxcbkFndWlycmUvTVxcbkFndXN0aW4vTVxcbkFoYWIvTVxcbkFobWFkL01cXG5BaG1hZGFiYWQvTVxcbkFobWFkaW5lamFkL01cXG5BaG1lZC9NXFxuQWhyaW1hbi9NXFxuQWlkYS9NXFxuQWlrZW4vTVxcbkFpbGVlbi9NXFxuQWltZWUvTVxcbkFpbnUvTVxcbkFpcmVkYWxlL01TXFxuQWlyZXMvTVxcbkFpc2hhL01cXG5BamF4L01cXG5Ba2Jhci9NXFxuQWtobWF0b3ZhL01cXG5Ba2loaXRvL01cXG5Ba2l0YS9NXFxuQWtpdmEvTVxcbkFra2FkL01cXG5Ba3Jvbi9NXFxuQWwvTVxcbkFsYS9TXFxuQWxhYmFtYS9NXFxuQWxhYmFtYW4vTVNcXG5BbGFiYW1pYW4vU01cXG5BbGFkZGluL01cXG5BbGFtby9NXFxuQWxhbW9nb3Jkby9NXFxuQWxhbi9NXFxuQWxhbmEvTVxcbkFsYXIvTVxcbkFsYXJpYy9NXFxuQWxhc2thL01cXG5BbGFza2FuL01TXFxuQWxiYS9NXFxuQWxiYW5pYS9NXFxuQWxiYW5pYW4vTVNcXG5BbGJhbnkvTVxcbkFsYmVlL01cXG5BbGJlcmlvL01cXG5BbGJlcnQvTVxcbkFsYmVydGEvTVxcbkFsYmVydGFuXFxuQWxiZXJ0by9NXFxuQWxiaWdlbnNpYW4vTVxcbkFsYmlvbi9NXFxuQWxiaXJlby9NXFxuQWxidXF1ZXJxdWUvTVxcbkFsY2F0cmF6L01cXG5BbGNlc3Rpcy9NXFxuQWxjaWJpYWRlcy9NXFxuQWxjaW5kb3IvTVxcbkFsY21lbmEvTVxcbkFsY29hL01cXG5BbGNvdHQvTVxcbkFsY3Vpbi9NXFxuQWxjeW9uZS9NXFxuQWxkYW4vTVxcbkFsZGViYXJhbi9NXFxuQWxkZW4vTVxcbkFsZGVyYW1pbi9NXFxuQWxkby9NXFxuQWxkcmluL01cXG5BbGVjL01cXG5BbGVpY2hlbS9NXFxuQWxlamFuZHJhL01cXG5BbGVqYW5kcm8vTVxcbkFsZW1iZXJ0L01cXG5BbGVwcG8vTVxcbkFsZXV0L01TXFxuQWxldXRpYW4vU01cXG5BbGV4L01cXG5BbGV4YW5kZXIvTVNcXG5BbGV4YW5kcmEvTVxcbkFsZXhhbmRyaWEvTVxcbkFsZXhhbmRyaWFuXFxuQWxleGVpL01cXG5BbGV4aXMvTVxcbkFsZm9uc28vTVxcbkFsZm9uem8vTVxcbkFsZm9yZC9NXFxuQWxmcmVkL01cXG5BbGZyZWRhL01cXG5BbGZyZWRvL01cXG5BbGdlbmliL01cXG5BbGdlci9NXFxuQWxnZXJpYS9NXFxuQWxnZXJpYW4vU01cXG5BbGdpZWJhL01cXG5BbGdpZXJzL01cXG5BbGdvbC9NXFxuQWxnb25xdWlhbi9TTVxcbkFsZ29ucXVpbi9NU1xcbkFsaGFtYnJhL01cXG5BbGhlbmEvTVxcbkFsaS9NXFxuQWxpY2UvTVxcbkFsaWNpYS9NXFxuQWxpZ2hpZXJpL01cXG5BbGluZS9NXFxuQWxpb3RoL01cXG5BbGlzYS9NXFxuQWxpc2hhL01cXG5BbGlzb24vTVxcbkFsaXNzYS9NXFxuQWxpc3RhaXIvTVxcbkFsa2FpZC9NXFxuQWxsYWgvTVxcbkFsbGFoYWJhZC9NXFxuQWxsYW4vTVxcbkFsbGVnaGVuaWVzL01cXG5BbGxlZ2hlbnkvU01cXG5BbGxlZ3JhL01cXG5BbGxlbi9NXFxuQWxsZW5kZS9NXFxuQWxsZW50b3duL01cXG5BbGxoYWxsb3dzL01cXG5BbGxpZS9NU1xcbkFsbGlzb24vTVxcbkFsbHN0YXRlL01cXG5BbGx5c29uL01cXG5BbG1hL01cXG5BbG1hY2gvTVxcbkFsbWF0eS9NXFxuQWxtaWdodHkvTVxcbkFsbW9oYWQvTVxcbkFsbW9yYXZpZC9NXFxuQWxuaWxhbS9NXFxuQWxuaXRhay9NXFxuQWxvbnpvL01cXG5BbHBlcnQvTVxcbkFscGhhcmQvTVxcbkFscGhlY2NhL01cXG5BbHBoZXJhdHovTVxcbkFscGhvbnNlL01cXG5BbHBob25zby9NXFxuQWxwaW5lL01cXG5BbHBvL01cXG5BbHBzL01cXG5BbHNhY2UvTVxcbkFsc2F0aWFuL1NNXFxuQWxzb3AvTVxcbkFsc3Rvbi9NXFxuQWx0YS9NXFxuQWx0YWJhL01cXG5BbHRhaS9NXFxuQWx0YWljL01cXG5BbHRhaXIvTVxcbkFsdGFtaXJhL01cXG5BbHRoZWEvTVxcbkFsdGlwbGFuby9NXFxuQWx0bWFuL01cXG5BbHRvaWRzL01cXG5BbHRvbi9NXFxuQWx0b29uYS9NXFxuQWx1ZHJhL01cXG5BbHZhL01cXG5BbHZhcmFkby9NXFxuQWx2YXJlei9NXFxuQWx2YXJvL01cXG5BbHZpbi9NXFxuQWx5Y2UvTVxcbkFseXNvbi9NXFxuQWx5c3NhL01cXG5BbHpoZWltZXIvTVxcbkFtL01OUlxcbkFtYWRldXMvTVxcbkFtYWRvL01cXG5BbWFsaWEvTVxcbkFtYW5kYS9NXFxuQW1hcmlsbG8vTVxcbkFtYXJ1L01cXG5BbWF0ZXJhc3UvTVxcbkFtYXRpL01cXG5BbWF6b24vU01cXG5BbWF6b25pYW5cXG5BbWJlci9NXFxuQW1lbGlhL01cXG5BbWVuL01cXG5BbWVuaG90ZXAvTVxcbkFtZXJhc2lhbi9NXFxuQW1lcmljYS9TTVxcbkFtZXJpY2FuL01TXFxuQW1lcmljYW5hL01cXG5BbWVyaWNhbmlzbS9NU1xcbkFtZXJpY2FuaXphdGlvbi9NU1xcbkFtZXJpY2FuaXplL0dEU1xcbkFtZXJpbmQvU01cXG5BbWVyaW5kaWFuL01TXFxuQW1lcy9NXFxuQW1lc2xhbi9NXFxuQW1nZW4vTVxcbkFtaGFyaWMvTVxcbkFtaGVyc3QvTVxcbkFtaWUvTVxcbkFtaWdhL01cXG5BbWlzaC9NXFxuQW1tYW4vTVxcbkFtb2NvL01cXG5BbW9zL01cXG5BbXBhcm8vTVxcbkFtcGVyZS9NXFxuQW1yaXRzYXIvTVxcbkFtc3RlcmRhbS9NXFxuQW10cmFrL01cXG5BbXVuZHNlbi9NXFxuQW11ci9NXFxuQW13YXkvTVxcbkFteS9NXFxuQW5hL01cXG5BbmFiYXB0aXN0L01cXG5BbmFiZWwvTVxcbkFuYWNpbi9NXFxuQW5hY3Jlb24vTVxcbkFuYWhlaW0vTVxcbkFuYWxlY3RzL01cXG5BbmFuaWFzL01cXG5BbmFzYXppL01cXG5BbmFzdGFzaWEvTVxcbkFuYXRvbGUvTVxcbkFuYXRvbGlhL01cXG5BbmF0b2xpYW4vTVxcbkFuYXhhZ29yYXMvTVxcbkFuY2hvcmFnZS9NXFxuQW5kYWx1c2lhL01cXG5BbmRhbHVzaWFuL01cXG5BbmRhbWFuL01cXG5BbmRlYW4vTVxcbkFuZGVyc2VuL01cXG5BbmRlcnNvbi9NXFxuQW5kZXMvTVxcbkFuZG9ycmEvTVxcbkFuZG9ycmFuL1NNXFxuQW5kcmUvTVNcXG5BbmRyZWEvTVxcbkFuZHJlaS9NXFxuQW5kcmVzL01cXG5BbmRyZXR0aS9NXFxuQW5kcmV3L1NNXFxuQW5kcmV3cy9NXFxuQW5kcmlhbmFtcG9pbmltZXJpbmEvTVxcbkFuZHJvaWQvTVxcbkFuZHJvbWFjaGUvTVxcbkFuZHJvbWVkYS9NXFxuQW5kcm9wb3YvTVxcbkFuZHkvTVxcbkFuZ2FyYS9NXFxuQW5nZWwvTVxcbkFuZ2VsYS9NXFxuQW5nZWxlcy9NXFxuQW5nZWxpYS9NXFxuQW5nZWxpY2EvTVxcbkFuZ2VsaWNvL01cXG5BbmdlbGluYS9NXFxuQW5nZWxpbmUvTVxcbkFuZ2VsaXF1ZS9NXFxuQW5nZWxpdGEvTVxcbkFuZ2Vsby9NXFxuQW5nZWxvdS9NXFxuQW5nZXZpbi9NXFxuQW5naWUvTVxcbkFuZ2tvci9NXFxuQW5nbGUvTVNcXG5BbmdsZXRvbi9NXFxuQW5nbGlhL01cXG5BbmdsaWNhbi9TTVxcbkFuZ2xpY2FuaXNtL01TXFxuQW5nbGljaXNtL01TXFxuQW5nbGljaXphdGlvblxcbkFuZ2xpY2l6ZVxcbkFuZ2xvL01cXG5Bbmdsb3BoaWxlL01cXG5Bbmdsb3Bob2JlXFxuQW5nb2xhL01cXG5BbmdvbGFuL01TXFxuQW5nb3JhL1NNXFxuQW5nc3Ryb20vTVxcbkFuZ3VpbGxhL01cXG5Bbmd1cy9NXFxuQW5odWkvTVxcbkFuaWFrY2hhay9NXFxuQW5pYmFsL01cXG5Bbml0YS9NXFxuQW5rYXJhL01cXG5Bbm4vTVxcbkFubmEvTVxcbkFubmFiZWwvTVxcbkFubmFiZWxsZS9NXFxuQW5uYW0vTVxcbkFubmFwb2xpcy9NXFxuQW5uYXB1cm5hL01cXG5Bbm5lL01cXG5Bbm5ldHRlL01cXG5Bbm5pZS9NXFxuQW5uaXN0b24vTVxcbkFubm1hcmllL01cXG5Bbm51bmNpYXRpb24vU01cXG5Bbm91aWxoL01cXG5BbnNlbG0vTVxcbkFuc2VsbW8vTVxcbkFuc2hhbi9NXFxuQW50YWV1cy9NXFxuQW50YW5hbmFyaXZvL01cXG5BbnRhcmN0aWMvTVxcbkFudGFyY3RpY2EvTVxcbkFudGFyZXMvTVxcbkFudGhvbnkvTVxcbkFudGhyb3BvY2VuZVxcbkFudGljaHJpc3QvU01cXG5BbnRpZXRhbS9NXFxuQW50aWZhL01cXG5BbnRpZ29uZS9NXFxuQW50aWd1YS9NXFxuQW50aWxsZWFuXFxuQW50aWxsZXMvTVxcbkFudGlvY2gvTVxcbkFudGlwYXMvTVxcbkFudGlwb2Rlc1xcbkFudG9mYWdhc3RhL01cXG5BbnRvaW5lL01cXG5BbnRvaW5ldHRlL01cXG5BbnRvbi9NXFxuQW50b25lL01cXG5BbnRvbmlhL01cXG5BbnRvbmludXMvTVxcbkFudG9uaW8vTVxcbkFudG9uaXVzL01cXG5BbnRvbnkvTVxcbkFudHdhbi9NXFxuQW50d2VycC9NXFxuQW51YmlzL01cXG5BbnphYy9NXFxuQXBhY2hlL1NNXFxuQXBhbGFjaGljb2xhL01cXG5BcGF0b3NhdXJ1c1xcbkFwZW5uaW5lcy9NXFxuQXBocm9kaXRlL01cXG5BcGlhL01cXG5BcG9jYWx5cHNlL01cXG5BcG9jcnlwaGEvTVxcbkFwb2xsaW5haXJlL01cXG5BcG9sbG8vU01cXG5BcG9sbG9uaWFuL01cXG5BcG9zdGxlL01cXG5BcHBhbGFjaGlhL01cXG5BcHBhbGFjaGlhbi9TTVxcbkFwcGFsYWNoaWFucy9NXFxuQXBwYWxvb3NhL1NNXFxuQXBwbGUvTVxcbkFwcGxlc2VlZC9NXFxuQXBwbGV0b24vTVxcbkFwcG9tYXR0b3gvTVxcbkFwci9NXFxuQXByaWwvTVNcXG5BcHVsZWl1cy9NXFxuQXF1YWZyZXNoL01cXG5BcXVhcmlhblxcbkFxdWFyaXVzL01TXFxuQXF1aWxhL01cXG5BcXVpbmFzL01cXG5BcXVpbm8vTVxcbkFxdWl0YWluZS9NXFxuQXIvTVxcbkFyYS9NXFxuQXJhYi9TTVxcbkFyYWJpYS9NXFxuQXJhYmlhbi9NU1xcbkFyYWJpYy9NXFxuQXJhYmlzdC9NU1xcbkFyYWJ5L01cXG5BcmFjZWxpL01cXG5BcmFmYXQvTVxcbkFyYWdvblxcbkFyYWd1YXlhL01cXG5BcmFsL01cXG5BcmFtYWljL01cXG5BcmFtY28vTVxcbkFyYXBhaG8vTVNcXG5BcmFwYWhvZXNcXG5BcmFyYXQvTVxcbkFyYXVjYW5pYW4vTVxcbkFyYXdhay9NXFxuQXJhd2FrYW4vTVxcbkFyYml0cm9uL01cXG5BcmNhZGlhL01cXG5BcmNhZGlhbi9NXFxuQXJjaGVhbi9NXFxuQXJjaGliYWxkL01cXG5BcmNoaWUvTVxcbkFyY2hpbWVkZXMvTVxcbkFyY3RpYy9NXFxuQXJjdHVydXMvTVxcbkFyZGFiaWxcXG5BcmRlbi9NXFxuQXJkdWluby9NXFxuQXJlY2liby9NXFxuQXJlcXVpcGEvTVxcbkFyZXMvTVxcbkFyZ2VudGluYS9NXFxuQXJnZW50aW5lL01cXG5BcmdlbnRpbmVhblxcbkFyZ2VudGluaWFuL01TXFxuQXJnby9TTVxcbkFyZ29uYXV0L01TXFxuQXJnb25uZS9NXFxuQXJnb3MvTVxcbkFyZ3VzL01cXG5BcmlhZG5lL01cXG5BcmlhbmlzbS9NXFxuQXJpZWwvTVxcbkFyaWVzL01TXFxuQXJpb3N0by9NXFxuQXJpc3RhcmNodXMvTVxcbkFyaXN0aWRlcy9NXFxuQXJpc3RvcGhhbmVzL01cXG5BcmlzdG90ZWxpYW4vTVxcbkFyaXN0b3RsZS9NXFxuQXJpdXMvTVxcbkFyaXpcXG5Bcml6b25hL01cXG5Bcml6b25hbi9TTVxcbkFyaXpvbmlhbi9NU1xcbkFyanVuYS9NXFxuQXJrL01cXG5BcmthbnNhbi9NU1xcbkFya2Fuc2FzL01cXG5BcmtoYW5nZWxzay9NXFxuQXJrd3JpZ2h0L01cXG5BcmxlbmUvTVxcbkFybGluZS9NXFxuQXJsaW5ndG9uL01cXG5Bcm1hZ2VkZG9uL1NNXFxuQXJtYWduYWMvTVxcbkFybWFuZC9NXFxuQXJtYW5kby9NXFxuQXJtYW5pL01cXG5Bcm1lbmlhL01cXG5Bcm1lbmlhbi9TTVxcbkFybWluaXVzL01cXG5Bcm1vbmsvTVxcbkFybW91ci9NXFxuQXJtc3Ryb25nL01cXG5Bcm5lYi9NXFxuQXJuaGVtL01cXG5Bcm5vL01cXG5Bcm5vbGQvTVxcbkFybnVsZm8vTVxcbkFyb24vTVxcbkFycmhlbml1cy9NXFxuQXJyb24vTVxcbkFydC9NXFxuQXJ0YXhlcnhlcy9NXFxuQXJ0ZW1pcy9NXFxuQXJ0aHVyL01cXG5BcnRodXJpYW4vTVxcbkFydGllL01cXG5BcnR1cm8vTVxcbkFydWJhL01cXG5Bcnlhbi9NU1xcbkFzL01cXG5Bc2FtYS9NXFxuQXNjZWxsYS9NXFxuQXNjZW5zaW9uL01cXG5Bc2dhcmQvTVxcbkFzaGFudGkvTVxcbkFzaGNyb2Z0L01cXG5Bc2hlL01cXG5Bc2hldmlsbGUvTVxcbkFzaGdhYmF0XFxuQXNoaWthZ2EvTVxcbkFzaGtlbmF6aW0vTVxcbkFzaGtoYWJhZC9NXFxuQXNobGVlL01cXG5Bc2hsZXkvTVxcbkFzaG1vbGVhbi9NXFxuQXNodXJiYW5pcGFsL01cXG5Bc2lhL01cXG5Bc2lhZ29cXG5Bc2lhbi9NU1xcbkFzaWF0aWMvU01cXG5Bc2ltb3YvTVxcbkFzbWFyYS9NXFxuQXNva2EvTVxcbkFzcGVsbC9NXFxuQXNwZW4vTVxcbkFzcGVyZ2VyL01cXG5Bc3BpZGlza2UvTVxcbkFzcXVpdGgvTVxcbkFzc2FkL01cXG5Bc3NhbS9NXFxuQXNzYW1lc2UvTVxcbkFzc2VtYmx5XFxuQXNzaXNpL01cXG5Bc3N5cmlhL01cXG5Bc3N5cmlhbi9TTVxcbkFzdGFpcmUvTVxcbkFzdGFuYS9NXFxuQXN0YXJ0ZS9NXFxuQXN0b24vTVxcbkFzdG9yL01cXG5Bc3RvcmlhL01cXG5Bc3RyYWtoYW4vTVxcbkFzdHJvVHVyZi9NXFxuQXN0dXJpYXMvTVxcbkFzdW5jaW9uL01cXG5Bc3dhbi9NXFxuQXQvU01cXG5BdGFjYW1hL01cXG5BdGFodWFscGEvTVxcbkF0YWxhbnRhL01cXG5BdGFyaS9NXFxuQXRhc2NhZGVyby9NXFxuQXRhdHVyay9NXFxuQXRoYWJhc2NhL01cXG5BdGhhYmFza2FuL1NNXFxuQXRoYW5hc2l1c1xcbkF0aGVuYS9NXFxuQXRoZW5lL01cXG5BdGhlbmlhbi9TTVxcbkF0aGVucy9NXFxuQXRraW5zL01cXG5BdGtpbnNvbi9NXFxuQXRsYW50YS9NXFxuQXRsYW50ZXNcXG5BdGxhbnRpYy9NXFxuQXRsYW50aXMvTVxcbkF0bGFzL01TXFxuQXRtYW4vTVxcbkF0b25lbWVudFxcbkF0cmV1cy9NXFxuQXRyaWEvTVxcbkF0cm9wb3MvTVxcbkF0dGljL01cXG5BdHRpY2EvTVxcbkF0dGlsYS9NXFxuQXR0bGVlL01cXG5BdHRuXFxuQXR0dWNrcy9NXFxuQXR3b29kL01cXG5BdS9NXFxuQXVicmV5L01cXG5BdWJ1cm4vTVxcbkF1Y2tsYW5kL01cXG5BdWRlbi9NXFxuQXVkaS9NXFxuQXVkaW9uL01cXG5BdWRyYS9NXFxuQXVkcmV5L01cXG5BdWR1Ym9uL01cXG5BdWcvTVxcbkF1Z2Vhbi9NXFxuQXVnc2J1cmcvTVxcbkF1Z3VzdC9NU1xcbkF1Z3VzdGEvTVxcbkF1Z3VzdGFuL01cXG5BdWd1c3RpbmUvTVxcbkF1Z3VzdGluaWFuL01TXFxuQXVndXN0dXMvTVxcbkF1cmFuZ3plYi9NXFxuQXVyZWxpYS9NXFxuQXVyZWxpby9NXFxuQXVyZWxpdXMvTVxcbkF1cmVvbXljaW4vTVxcbkF1cmlnYS9NXFxuQXVyb3JhL01cXG5BdXNjaHdpdHovTVxcbkF1c3NpZS9NU1xcbkF1c3Rlbi9NXFxuQXVzdGVybGl0ei9NXFxuQXVzdGluL01TXFxuQXVzdHJhbGFzaWEvTVxcbkF1c3RyYWxhc2lhblxcbkF1c3RyYWxpYS9NXFxuQXVzdHJhbGlhbi9TTVxcbkF1c3RyYWxvaWQvTVxcbkF1c3RyYWxvcGl0aGVjdXMvTVxcbkF1c3RyaWEvTVxcbkF1c3RyaWFuL1NNXFxuQXVzdHJvbmVzaWFuL01cXG5BdXR1bW4vTVxcbkF2L01cXG5BdmEvTVxcbkF2YWxvbi9NXFxuQXZlL01cXG5BdmVudGluZS9NXFxuQXZlcm51cy9NXFxuQXZlcnJvZXMvTVxcbkF2ZXJ5L01cXG5BdmVzdGEvTVxcbkF2aWNlbm5hL01cXG5Bdmlnbm9uL01cXG5BdmlsYS9NXFxuQXZpb3IvTVxcbkF2aXMvTVxcbkF2b2dhZHJvL01cXG5Bdm9uL01cXG5Bdm9uZGFsZS9NXFxuQXhpc1xcbkF4dW0vTVxcbkF5YWxhL01cXG5BeWVycy9NXFxuQXltYXJhL01cXG5BeXJzaGlyZS9NXFxuQXl1cnZlZGEvTVxcbkF5eXViaWQvTVxcbkF6YW5hL01cXG5BemFuaWEvTVxcbkF6YXplbC9NXFxuQXplcmJhaWphbi9NXFxuQXplcmJhaWphbmkvTVNcXG5Bem9yZXMvTVxcbkF6b3YvTVxcbkF6dGVjL1NNXFxuQXp0ZWNhbi9NXFxuQXp0bGFuL01cXG5CL01OVFxcbkJBL01cXG5CQVNJQy9TTVxcbkJCL01cXG5CQkIvTVxcbkJCQy9NXFxuQkJRXFxuQkJTXFxuQkJTZXNcXG5CQy9NXFxuQkZGXFxuQklBXFxuQklPU1xcbkJJVE5FVFxcbkJMVC9TTVxcbkJNL01cXG5CTVcvTVxcbkJPXFxuQlAvTVxcbkJQT0VcXG5CUlxcbkJTL01cXG5CU0FcXG5CU0QvU01cXG5CVFVcXG5CVFdcXG5CWU9CXFxuQmEvTVxcbkJhYWwvU01cXG5CYWF0aC9NXFxuQmFhdGhpc3QvTVxcbkJhYmJhZ2UvTVxcbkJhYmJpdHQvTVxcbkJhYmVsL01TXFxuQmFieWxvbi9NU1xcbkJhYnlsb25pYS9NXFxuQmFieWxvbmlhbi9TTVxcbkJhY2FsbC9NXFxuQmFjYXJkaS9NXFxuQmFjY2hhbmFsaWEvTVxcbkJhY2NoaWNcXG5CYWNjaHVzL01cXG5CYWNoL01cXG5CYWNrdXMvTVxcbkJhY29uL01cXG5CYWN0cmlhL01cXG5CYWRlbi9NXFxuQmFkbGFuZHMvTVxcbkJhZWRla2VyL01TXFxuQmFlei9NXFxuQmFmZmluL01cXG5CYWdnaWVzL01cXG5CYWdoZGFkL01cXG5CYWd1aW8vTVxcbkJhaGEnaS9NXFxuQmFoYSd1bGxhaC9NXFxuQmFoYW1hL1NNXFxuQmFoYW1hbmlhblxcbkJhaGFtYXMvTVxcbkJhaGFtaWFuL01TXFxuQmFoaWEvTVxcbkJhaHJhaW4vTVxcbkJhaWR1L01cXG5CYWlrYWwvTVxcbkJhaWxleS9NXFxuQmFpcmQvTVxcbkJha2VsaXRlL01cXG5CYWtlci9NXFxuQmFrZXJzZmllbGQvTVxcbkJha3UvTVxcbkJha3VuaW4vTVxcbkJhbGFuY2hpbmUvTVxcbkJhbGF0b24vTVxcbkJhbGJvYS9NXFxuQmFsZGVyL01cXG5CYWxkd2luL1NNXFxuQmFsZWFyaWMvTVxcbkJhbGZvdXIvTVxcbkJhbGkvTVxcbkJhbGluZXNlL01cXG5CYWxrYW4vTVNcXG5CYWxrYW5zL01cXG5CYWxraGFzaC9NXFxuQmFsbC9NXFxuQmFsbGFyZC9NXFxuQmFsdGhhemFyL01cXG5CYWx0aWMvTVxcbkJhbHRpbW9yZS9NXFxuQmFsdWNoaXN0YW4vTVxcbkJhbHphYy9NXFxuQmFtYWtvL01cXG5CYW1iaS9NXFxuQmFuYWNoL01cXG5CYW5jcm9mdC9NXFxuQmFuZHVuZy9NXFxuQmFuZ2Fsb3JlL01cXG5CYW5na29rL01cXG5CYW5nbGFkZXNoL01cXG5CYW5nbGFkZXNoaS9TTVxcbkJhbmdvci9NXFxuQmFuZ3VpL01cXG5CYW5qYXJtYXNpbi9NXFxuQmFuanVsL01cXG5CYW5rcy9NXFxuQmFubmVrZXIvTVxcbkJhbm5pc3Rlci9NXFxuQmFudGluZy9NXFxuQmFudHUvTVNcXG5CYW90b3UvTVxcbkJhcHRpc3QvU01cXG5CYXB0aXN0ZS9NXFxuQmFyYWJiYXMvTVxcbkJhcmFjay9NXFxuQmFyYmFkaWFuL1NNXFxuQmFyYmFkb3MvTVxcbkJhcmJhcmEvTVxcbkJhcmJhcmVsbGEvTVxcbkJhcmJhcm9zc2EvTVxcbkJhcmJhcnkvTVxcbkJhcmJlci9NXFxuQmFyYmllL01cXG5CYXJib3VyL01cXG5CYXJicmEvTVxcbkJhcmJ1ZGEvTVxcbkJhcmNlbG9uYS9NXFxuQmFyY2Vsb25ldGEvTVxcbkJhcmNsYXkvU01cXG5CYXJjbGF5cy9NXFxuQmFyZGVlbi9NXFxuQmFyZW50cy9NXFxuQmFya2VyL01cXG5CYXJrbGV5L01cXG5CYXJsb3cvTVxcbkJhcm5hYmFzL01cXG5CYXJuYWJ5L01cXG5CYXJuYXJkL01cXG5CYXJuYXVsL01cXG5CYXJuZXMvTVxcbkJhcm5ldHQvTVxcbkJhcm5leS9NXFxuQmFybnVtL01cXG5CYXJvZGEvTVxcbkJhcnF1aXNpbWV0by9NXFxuQmFyci9NXFxuQmFycmFucXVpbGxhL01cXG5CYXJyZXJhL01cXG5CYXJyZXR0L01cXG5CYXJyaWUvTVxcbkJhcnJvbi9NXFxuQmFycnkvTVxcbkJhcnJ5bW9yZS9NXFxuQmFydC9NXFxuQmFydGgvTVNcXG5CYXJ0aG9sZGkvTVxcbkJhcnRob2xvbWV3L01cXG5CYXJ0bGV0dC9NXFxuQmFydG9rL01cXG5CYXJ0b24vTVxcbkJhcnVjaC9NXFxuQmFyeXNobmlrb3YvTVxcbkJhc2VsL01cXG5CYXNoby9NXFxuQmFzaWUvTVxcbkJhc2lsL01cXG5CYXNxdWUvTVNcXG5CYXNyYS9NXFxuQmFzcy9NXFxuQmFzc2V0ZXJyZS9NXFxuQmFzdGlsbGUvTVxcbkJhc3V0b2xhbmQvTVxcbkJhdGFhbi9NXFxuQmF0ZXMvTVxcbkJhdGhzaGViYS9NXFxuQmF0aXN0YS9NXFxuQmF0bWFuL01cXG5CYXR0bGUvTVxcbkJhdHUvTVxcbkJhdWRlbGFpcmUvTVxcbkJhdWRvdWluL01cXG5CYXVkcmlsbGFyZC9NXFxuQmF1ZXIvTVxcbkJhdWhhdXMvTVxcbkJhdW0vTVxcbkJhdmFyaWEvTVxcbkJhdmFyaWFuL01cXG5CYXh0ZXIvTVxcbkJheWFtb25cXG5CYXllci9NXFxuQmF5ZXMvTVxcbkJheWVzaWFuL01cXG5CYXlldXgvTVxcbkJheWxvci9NXFxuQmF5b25uZS9NXFxuQmF5cmV1dGgvTVxcbkJheXdhdGNoL01cXG5CZS9NSFxcbkJlYWNoL01cXG5CZWFkbGUvTVxcbkJlYW4vTVxcbkJlYXJkL01cXG5CZWFyZG1vcmUvTVxcbkJlYXJkc2xleS9NXFxuQmVhcm5haXNlL01cXG5CZWFzbGV5L01cXG5CZWF0bGVtYW5pYS9NXFxuQmVhdGxlcy9NXFxuQmVhdHJpY2UvTVxcbkJlYXRyaXgvTVxcbkJlYXRyaXovTVxcbkJlYXR0eS9NXFxuQmVhdS9NXFxuQmVhdWZvcnQvTVxcbkJlYXVqb2xhaXMvTVxcbkJlYXVtYXJjaGFpcy9NXFxuQmVhdW1vbnQvTVxcbkJlYXVyZWdhcmQvTVxcbkJlYXV2b2lyL01cXG5CZWNodGVsL01cXG5CZWNrL01SXFxuQmVja2VyL01cXG5CZWNrZXQvTVxcbkJlY2tldHQvTVxcbkJlY2tsZXkvTVxcbkJlY2ttYW5cXG5CZWNreS9NXFxuQmVjcXVlcmVsL01cXG5CZWRlL01cXG5CZWRvdWluL1NNXFxuQmVlYmUvTVxcbkJlZWNoZXIvTVxcbkJlZWZhcm9uaS9NXFxuQmVlbHplYnViL01cXG5CZWVyYm9obS9NXFxuQmVldGhvdmVuL01cXG5CZWV0b24vTVxcbkJlZ2luL01cXG5CZWhhbi9NXFxuQmVocmluZy9NXFxuQmVpZGVyYmVja2UvTVxcbkJlaWppbmcvTVxcbkJlaXJ1dC9NXFxuQmVrZXN5L01cXG5CZWxhL01cXG5CZWxhcnVzL01cXG5CZWxhcnVzaWFuXFxuQmVsYXUvTVxcbkJlbGVtL01cXG5CZWxmYXN0L01cXG5CZWxnXFxuQmVsZ2lhbi9TTVxcbkJlbGdpdW0vTVxcbkJlbGdyYWRlL01cXG5CZWxpbmRhL01cXG5CZWxpemUvTVxcbkJlbGwvTVxcbkJlbGxhL01cXG5CZWxsYW15L01cXG5CZWxsYXRyaXgvTVxcbkJlbGxlZWsvTVxcbkJlbGxpbmdoYW0vTVxcbkJlbGxpbmkvTVxcbkJlbGxvdy9NXFxuQmVsbW9udC9NXFxuQmVsbW9wYW4vTVxcbkJlbG9pdC9NXFxuQmVsb3J1c3NpYW4vTVNcXG5CZWxzaGF6emFyL01cXG5CZWx0YW5lL01cXG5CZWx1c2hpL01cXG5CZW4vTVxcbkJlbmFjZXJyYWYvTVxcbkJlbmNobGV5L01cXG5CZW5kL01SXFxuQmVuZGVyL01cXG5CZW5kaWN0dXNcXG5CZW5kaXgvTVxcbkJlbmVkaWN0L01cXG5CZW5lZGljdGluZS9NU1xcbkJlbmVsdXgvTVxcbkJlbmV0L01cXG5CZW5ldHRvbi9NXFxuQmVuZ2FsL1NNXFxuQmVuZ2FsaS9NXFxuQmVuZ2hhemkvTVxcbkJlbmluL01cXG5CZW5pbmVzZS9NXFxuQmVuaXRhL01cXG5CZW5pdG8vTVxcbkJlbmphbWluL01cXG5CZW5uZXR0L01cXG5CZW5uaWUvTVxcbkJlbm55L01cXG5CZW5zb24vTVxcbkJlbnRoYW0vTVxcbkJlbnRsZXkvTVxcbkJlbnRvbi9NXFxuQmVuei9NXFxuQmVuemVkcmluZS9NXFxuQmVvd3VsZi9NXFxuQmVyYmVyL1NNXFxuQmVyZW5pY2UvTVxcbkJlcmV0dGEvTVxcbkJlcmcvTU5SXFxuQmVyZ2VuL01cXG5CZXJnZXIvTVxcbkJlcmdlcmFjL01cXG5CZXJnbWFuL01cXG5CZXJnc29uL01cXG5CZXJpYS9NXFxuQmVyaW5nL01cXG5CZXJrZWxleS9NXFxuQmVya3NoaXJlL1NNXFxuQmVya3NoaXJlcy9NXFxuQmVybGUvTVxcbkJlcmxpbi9TWk1SXFxuQmVybGluZXIvTVxcbkJlcmxpb3ovTVxcbkJlcmxpdHovTVxcbkJlcm11ZGEvU01cXG5CZXJtdWRhbi9TTVxcbkJlcm11ZGlhbi9TTVxcbkJlcm4vTVxcbkJlcm5hZGV0dGUvTVxcbkJlcm5hZGluZS9NXFxuQmVybmFua2UvTVxcbkJlcm5hcmQvTVxcbkJlcm5hcmRvL01cXG5CZXJuYXlzL01cXG5CZXJuYmFjaC9NXFxuQmVybmVzZVxcbkJlcm5oYXJkdC9NXFxuQmVybmljZS9NXFxuQmVybmllL01cXG5CZXJuaW5pL01cXG5CZXJub3VsbGkvTVxcbkJlcm5zdGVpbi9NXFxuQmVycmEvTVxcbkJlcnJ5L01cXG5CZXJ0L01cXG5CZXJ0YS9NXFxuQmVydGVsc21hbm4vTVxcbkJlcnRoYS9NXFxuQmVydGllL01cXG5CZXJ0aWxsb24vTVxcbkJlcnRyYW0vTVxcbkJlcnRyYW5kL01cXG5CZXJ3aWNrL01cXG5CZXJ5bC9NXFxuQmVyemVsaXVzL01cXG5CZXNzL01cXG5CZXNzZWwvTVxcbkJlc3NlbWVyL01cXG5CZXNzaWUvTVxcbkJlc3QvTVxcbkJldGVsZ2V1c2UvTVxcbkJldGgvTVxcbkJldGhhbnkvTVxcbkJldGhlL01cXG5CZXRoZXNkYS9NXFxuQmV0aGxlaGVtL01cXG5CZXRodW5lL01cXG5CZXRzeS9NXFxuQmV0dGUvTVxcbkJldHRpZS9NXFxuQmV0dHkvTVxcbkJldHR5ZS9NXFxuQmV1bGFoL01cXG5CZXZlcmlkZ2VcXG5CZXZlcmxleS9NXFxuQmV2ZXJseS9NXFxuQmV5ZXIvTVxcbkJoYXJhdC9NXFxuQmhvcGFsL01cXG5CaHV0YW4vTVxcbkJodXRhbmVzZS9NXFxuQmh1dHRvL01cXG5CaS9NXFxuQmlhbHlzdG9rL01cXG5CaWFuY2EvTVxcbkJpYlxcbkJpYmxlL01TXFxuQmljL01cXG5CaWRkbGUvTVxcbkJpZGVuL01cXG5CaWVyY2UvTVxcbkJpZ1F1ZXJ5L01cXG5CaWdmb290L01cXG5CaWdnbGVzL01cXG5CaWtvL01cXG5CaWxiYW8vTVxcbkJpbGJvL01cXG5CaWxsL01KXFxuQmlsbGllL01cXG5CaWxsaW5ncy9NXFxuQmlsbHkvTVxcbkJpbWluaS9NXFxuQmluZ2hhbXRvbi9NXFxuQmlvZ2VuL01cXG5CaW9rby9NXFxuQmlyZC9NXFxuQmlyZHNleWUvTVxcbkJpcmtlbnN0b2NrL01cXG5CaXJtaW5naGFtL01cXG5CaXJvL01cXG5CaXNjYXkvTVxcbkJpc2NheW5lL01cXG5CaXNoa2VrL01cXG5CaXNob3AvTVxcbkJpc21hcmNrL01cXG5CaXNtYXJrL01cXG5CaXNxdWljay9NXFxuQmlzc2F1L01cXG5CaXRUb3JyZW50L01cXG5CaXpldC9NXFxuQmplcmtuZXMvTVxcbkJqb3JrL01cXG5Cay9NXFxuQmxhY2tCZXJyeS9NXFxuQmxhY2tiZWFyZC9NXFxuQmxhY2tidXJuL01cXG5CbGFja2ZlZXQvTVxcbkJsYWNrZm9vdC9NXFxuQmxhY2twb29sL01cXG5CbGFja3NidXJnL01cXG5CbGFja3NoaXJ0L01cXG5CbGFja3N0b25lL01cXG5CbGFja3dlbGwvTVxcbkJsYWluZS9NXFxuQmxhaXIvTVxcbkJsYWtlL01cXG5CbGFuY2EvTVxcbkJsYW5jaGFyZC9NXFxuQmxhbmNoZS9NXFxuQmxhbmtlbnNoaXAvTVxcbkJsYW50eXJlL01cXG5CbGF0ei9NXFxuQmxhdmF0c2t5L01cXG5CbGVuaGVpbS9NXFxuQmxldmlucy9NXFxuQmxpZ2gvTVxcbkJsb2NoL01cXG5CbG9ja2J1c3Rlci9NXFxuQmxvZW1mb250ZWluL01cXG5CbG9uZGVsL01cXG5CbG9uZGllL01cXG5CbG9vbS9NUlxcbkJsb29tZXIvTVxcbkJsb29tZmllbGQvTVxcbkJsb29taW5nZGFsZS9NXFxuQmxvb21pbmd0b24vTVxcbkJsb29tc2J1cmcvTVxcbkJsb29tc2J1cnkvTVxcbkJsdVxcbkJsdWNoZXIvTVxcbkJsdWViZWFyZC9NXFxuQmx1ZXRvb3RoL01cXG5CbHZkXFxuQmx5dGhlL01cXG5Cb2FkaWNlYVxcbkJvYXMvTVxcbkJvYi9NXFxuQm9iYmkvTVxcbkJvYmJpZS9NXFxuQm9iYml0dC9NXFxuQm9iYnkvTVxcbkJvY2NhY2Npby9NXFxuQm9kaGlkaGFybWEvTVxcbkJvZGhpc2F0dHZhL01cXG5Cb2RsZWlhblxcbkJvZWluZy9NXFxuQm9lb3RpYS9NXFxuQm9lb3RpYW4vTVxcbkJvZXIvU01cXG5Cb2V0aGl1cy9NXFxuQm9nYXJ0L01cXG5Cb2dvdGEvTVxcbkJvaGVtaWEvTVxcbkJvaGVtaWFuL1NNXFxuQm9oci9NXFxuQm9pc2UvTVxcbkJvamFuZ2xlcy9NXFxuQm9sZXluL01cXG5Cb2xpdmFyL01cXG5Cb2xpdmlhL01cXG5Cb2xpdmlhbi9NU1xcbkJvbGx5d29vZC9NXFxuQm9sb2duYS9NXFxuQm9sc2hldmlrL1NNXFxuQm9sc2hldmlraVxcbkJvbHNoZXZpc20vTVxcbkJvbHNoZXZpc3QvTVxcbkJvbHNob2kvTVxcbkJvbHRvbi9NXFxuQm9sdHptYW5uL01cXG5Cb21iYXkvTVxcbkJvbmFwYXJ0ZS9NXFxuQm9uYXZlbnR1cmUvTVxcbkJvbmQvTVxcbkJvbmhvZWZmZXIvTVxcbkJvbmlmYWNlL01cXG5Cb25pdGEvTVxcbkJvbm4vTVJcXG5Cb25uZXIvTVxcbkJvbm5ldmlsbGUvTVxcbkJvbm5pZS9NXFxuQm9uby9NXFxuQm9va2VyL01cXG5Cb29sZS9NXFxuQm9vbGVhbi9NXFxuQm9vbmUvTVxcbkJvb3Rlcy9NXFxuQm9vdGgvTVxcbkJvcmRlYXV4L01cXG5Cb3JkZW4vTVxcbkJvcmRvbi9NXFxuQm9yZWFzL01cXG5Cb3JnL1NNXFxuQm9yZ2VzL01cXG5Cb3JnaWEvTVxcbkJvcmdsdW0vTVxcbkJvcmlzL01cXG5Cb3JrL01cXG5Cb3JsYXVnL01cXG5Cb3JuL01cXG5Cb3JuZW8vTVxcbkJvcm9idWR1ci9NXFxuQm9yb2Rpbi9NXFxuQm9ydS9NXFxuQm9zY2gvTVxcbkJvc2UvTVxcbkJvc25pYS9NXFxuQm9zbmlhblxcbkJvc3BvcnVzL01cXG5Cb3N0b24vTVNcXG5Cb3N0b25pYW4vTVxcbkJvc3dlbGwvTVxcbkJvdGhhXFxuQm90b3hcXG5Cb3Rzd2FuYS9NXFxuQm90dGljZWxsaS9NXFxuQm91bGRlci9NXFxuQm91bGV6L01cXG5Cb3VyYmFraS9NXFxuQm91cmJvbi9TTVxcbkJvdXJuZW1vdXRoL01cXG5Cb3ZhcnkvTVxcbkJvd2RpdGNoL01cXG5Cb3dlbGwvTVxcbkJvd2VuL01cXG5Cb3dlcnMvTVxcbkJvd2VyeS9NXFxuQm93aWUvTVxcbkJvd21hbi9NXFxuQm95ZC9NXFxuQm95ZXIvTVxcbkJveWxlL01cXG5Cci9NVFxcbkJyYWQvTVlcXG5CcmFkYnVyeS9NXFxuQnJhZGRvY2svTVxcbkJyYWRlbnRvbi9NXFxuQnJhZGZvcmQvTVxcbkJyYWRsZXkvTVxcbkJyYWRseS9NXFxuQnJhZHNoYXcvTVxcbkJyYWRzdHJlZXQvTVxcbkJyYWR5L01cXG5CcmFnZy9NXFxuQnJhaGUvTVxcbkJyYWhtYS9NU1xcbkJyYWhtYWd1cHRhL01cXG5CcmFobWFuL01TXFxuQnJhaG1hbmlcXG5CcmFobWFuaXNtL1NNXFxuQnJhaG1hcHV0cmEvTVxcbkJyYWhtcy9NXFxuQnJhaWxsZS9NU1xcbkJyYWluL01cXG5CcmFtcHRvbi9NXFxuQnJhbi9NXFxuQnJhbmNoL01cXG5CcmFuZGVpcy9NXFxuQnJhbmRlbi9NXFxuQnJhbmRlbmJ1cmcvTVxcbkJyYW5kaS9NXFxuQnJhbmRpZS9NXFxuQnJhbmRvL01cXG5CcmFuZG9uL01cXG5CcmFuZHQvTVxcbkJyYW5keS9NXFxuQnJhbnQvTVxcbkJyYXF1ZS9NXFxuQnJhc2lsaWEvTVxcbkJyYXRpc2xhdmEvTVxcbkJyYXR0YWluL01cXG5CcmF5L01cXG5CcmF6aWwvTVxcbkJyYXppbGlhbi9NU1xcbkJyYXpvcy9NXFxuQnJhenphdmlsbGUvTVxcbkJyZWFrc3BlYXIvTVxcbkJyZWF0aGFseXplclxcbkJyZWNodC9NXFxuQnJlY2tlbnJpZGdlL01cXG5CcmVtZW4vTVxcbkJyZW1lcnRvbi9NXFxuQnJlbmRhL01cXG5CcmVuZGFuL01cXG5CcmVubmFuL01cXG5CcmVubmVyL01cXG5CcmVudC9NXFxuQnJlbnRvbi9NXFxuQnJlc3QvTVxcbkJyZXQvTVxcbkJyZXRvbi9NXFxuQnJldHQvTVxcbkJyZXdlci9NXFxuQnJld3N0ZXIvTVxcbkJyZXhpdFxcbkJyZXpobmV2L01cXG5Ccmlhbi9NXFxuQnJpYW5hL01cXG5Ccmlhbm5hL01cXG5CcmljZS9NXFxuQnJpZGFsdmVpbC9NXFxuQnJpZGdlcG9ydC9NXFxuQnJpZGdlci9NXFxuQnJpZGdlcy9NXFxuQnJpZGdldC9NXFxuQnJpZGdldG93bi9NXFxuQnJpZGdldHQvTVxcbkJyaWRnZXR0ZS9NXFxuQnJpZGdtYW4vTVxcbkJyaWUvU01cXG5CcmlnYWRvb24vTVxcbkJyaWdncy9NXFxuQnJpZ2hhbS9NXFxuQnJpZ2h0L01cXG5CcmlnaHRvbi9NXFxuQnJpZ2lkL01cXG5CcmlnaXR0ZS9NXFxuQnJpbGxvL01cXG5CcmlsbG91aW5cXG5Ccmlua2xleS9NXFxuQnJpc2JhbmUvTVxcbkJyaXN0b2wvTVxcbkJyaXQvU01cXG5Ccml0YWluL01cXG5Ccml0YW5uaWEvTVxcbkJyaXRhbm5pYy9NXFxuQnJpdGFubmljYS9NXFxuQnJpdGljaXNtL1NNXFxuQnJpdGlzaC9NUlpcXG5Ccml0aXNoZXIvTVxcbkJyaXRuZXkvTVxcbkJyaXRvbi9NU1xcbkJyaXR0L01OXFxuQnJpdHRhbnkvU01cXG5Ccml0dGVuL01cXG5Ccml0dG5leS9NXFxuQnJuby9NXFxuQnJvYWR3YXkvU01cXG5Ccm9iZGluZ25hZy9NXFxuQnJvYmRpbmduYWdpYW4vTVxcbkJyb2NrL01cXG5Ccm9rYXcvTVxcbkJyb25zb24vTVxcbkJyb250ZS9NXFxuQnJvbnRvc2F1cnVzXFxuQnJvbngvTVxcbkJyb29rZS9NU1xcbkJyb29rbHluL01cXG5Ccm9va3MvTVxcbkJyb3NcXG5Ccm93bi9NR1xcbkJyb3duZS9NXFxuQnJvd25pYW4vTVxcbkJyb3duaWUvU1xcbkJyb3duaW5nL01cXG5Ccm93bnNoaXJ0L01cXG5Ccm93bnN2aWxsZS9NXFxuQnJ1YmVjay9NXFxuQnJ1Y2UvTVxcbkJydWNrbmVyL01cXG5CcnVlZ2VsXFxuQnJ1bW1lbC9NXFxuQnJ1bmVpL01cXG5CcnVuZWlhbi9NU1xcbkJydW5lbGxlc2NoaS9NXFxuQnJ1bmhpbGRlL01cXG5CcnVuby9NXFxuQnJ1bnN3aWNrL01cXG5CcnVzc2Vscy9NXFxuQnJ1dC9NXFxuQnJ1dHVzL01cXG5Ccnlhbi9NXFxuQnJ5YW50L01cXG5CcnljZS9NXFxuQnJ5bm5lci9NXFxuQnJ5b24vTVxcbkJyemV6aW5za2kvTVxcbkJ0dS9NXFxuQnViZXIvTVxcbkJ1Y2hhbmFuL01cXG5CdWNoYXJlc3QvTVxcbkJ1Y2hlbndhbGQvTVxcbkJ1Y2h3YWxkL01cXG5CdWNrL01cXG5CdWNraW5naGFtL01cXG5CdWNrbGV5L01cXG5CdWNrbmVyL01cXG5CdWQvTVxcbkJ1ZGFwZXN0L01cXG5CdWRkaGEvU01cXG5CdWRkaGlzbS9TTVxcbkJ1ZGRoaXN0L1NNXFxuQnVkZHkvTVxcbkJ1ZHdlaXNlci9NXFxuQnVmZmFsby9NXFxuQnVmZnkvTVxcbkJ1Zm9yZC9NXFxuQnVnYXR0aS9NXFxuQnVnemlsbGEvTVxcbkJ1aWNrL01cXG5CdWp1bWJ1cmEvTVxcbkJ1a2hhcmEvTVxcbkJ1a2hhcmluL01cXG5CdWxhd2F5by9NXFxuQnVsZmluY2gvTVxcbkJ1bGdhbmluL01cXG5CdWxnYXIvTVxcbkJ1bGdhcmkvTVxcbkJ1bGdhcmlhL01cXG5CdWxnYXJpYW4vU01cXG5CdWxsb2NrL01cXG5CdWxsd2lua2xlL01cXG5CdWx0bWFubi9NXFxuQnVtcHBvL01cXG5CdW5jaGUvTVxcbkJ1bmRlc2JhbmsvTVxcbkJ1bmRlc3RhZy9NXFxuQnVuaW4vTVxcbkJ1bmtlci9NXFxuQnVuc2VuL01cXG5CdW51ZWwvTVxcbkJ1bnlhbi9NXFxuQnVyYmFuay9NXFxuQnVyYmVycnkvTVxcbkJ1cmNoL01cXG5CdXJnZXIvTVxcbkJ1cmdlc3MvTVxcbkJ1cmdveW5lL01cXG5CdXJndW5kaWFuL01cXG5CdXJndW5keS9TTVxcbkJ1cmtlL01cXG5CdXJrcy9NXFxuQnVybC9NXFxuQnVybGluZ3Rvbi9NXFxuQnVybWEvTVxcbkJ1cm1lc2UvTVxcbkJ1cm5ldHQvTVxcbkJ1cm5zL01cXG5CdXJuc2lkZS9NXFxuQnVyci9NXFxuQnVycmlzL01cXG5CdXJyb3VnaHMvTVxcbkJ1cnNhL01cXG5CdXJ0L01cXG5CdXJ0b24vTVxcbkJ1cnVuZGkvTVxcbkJ1cnVuZGlhbi9NU1xcbkJ1c2NoL01cXG5CdXNoL01cXG5CdXNoaWRvL01cXG5CdXNobmVsbC9NXFxuQnV0bGVyL01cXG5CdXR0ZXJmaW5nZXJzL01cXG5CdXh0ZWh1ZGUvTVxcbkJ5Ymxvcy9NXFxuQnllcnMvTVxcbkJ5cmQvTVxcbkJ5cm9uL01cXG5CeXJvbmljL01cXG5CeXphbnRpbmUvTVNcXG5CeXphbnRpdW0vTVxcbkMvU01cXG5DQVxcbkNBRC9NXFxuQ0FJXFxuQ0FNXFxuQ0FQXFxuQ0FSRVxcbkNBVFZcXG5DQlxcbkNCQy9NXFxuQ0JTL01cXG5DQ1RWXFxuQ0NVXFxuQ0QvU01cXG5DRENcXG5DRFRcXG5DRU8vTVxcbkNGXFxuQ0ZDL01cXG5DRk9cXG5DR0lcXG5DSUEvTVxcbkNJRFxcbkNOTi9NXFxuQ05TL01cXG5DTy9NXFxuQ09CT0wvU01cXG5DT0RcXG5DT0xcXG5DT0xBXFxuQ09WSURcXG5DUEEvTVxcbkNQSS9NXFxuQ1BPXFxuQ1BSL01cXG5DUFUvTVxcbkNSVC9TTVxcbkNTUy9NXFxuQ1NUL01cXG5DVC9NXFxuQ1ZcXG5DVlMvTVxcbkNaXFxuQ2EvTVxcbkNhYmVybmV0L01cXG5DYWJvdC9NXFxuQ2FicmFsL01cXG5DYWJyZXJhL01cXG5DYWJyaW5pL01cXG5DYWRldHRlXFxuQ2FkaWxsYWMvTVxcbkNhZGl6L01cXG5DYWVkbW9uL01cXG5DYWVycGhpbGx5L01cXG5DYWVzYXIvU01cXG5DYWdlL01cXG5DYWduZXkvTVxcbkNhaG9raWEvTVxcbkNhaWFwaGFzL01cXG5DYWluL1NNXFxuQ2Fpcm8vTVxcbkNhaXRsaW4vTVxcbkNhanVuL01TXFxuQ2FsL01cXG5DYWxhaXMvTVxcbkNhbGN1dHRhL01cXG5DYWxkZXIvTVxcbkNhbGRlcm9uL01cXG5DYWxkd2VsbC9NXFxuQ2FsZWIvTVxcbkNhbGVkb25pYS9NXFxuQ2FsZXhpY28vTVxcbkNhbGdhcnkvTVxcbkNhbGhvdW4vTVxcbkNhbGkvTVxcbkNhbGliYW4vTVxcbkNhbGlmXFxuQ2FsaWZvcm5pYS9NXFxuQ2FsaWZvcm5pYW4vU01cXG5DYWxpZ3VsYS9NXFxuQ2FsbGFnaGFuL01cXG5DYWxsYWhhbi9NXFxuQ2FsbGFvL01cXG5DYWxsYXMvTVxcbkNhbGxpZS9NXFxuQ2FsbGlvcGUvTVxcbkNhbGxpc3RvL01cXG5DYWxvb2Nhbi9NXFxuQ2FsdmFyeS9NXFxuQ2FsdmVydC9NXFxuQ2FsdmluL01cXG5DYWx2aW5pc20vTVNcXG5DYWx2aW5pc3QvTVNcXG5DYWx2aW5pc3RpY1xcbkNhbWFjaG8vTVxcbkNhbWFyaWxsby9NXFxuQ2FtYm9kaWEvTVxcbkNhbWJvZGlhbi9TTVxcbkNhbWJyaWFuL1NNXFxuQ2FtYnJpZGdlL01cXG5DYW1kZW4vTVxcbkNhbWVsL01cXG5DYW1lbG9wYXJkYWxpcy9NXFxuQ2FtZWxvdC9NU1xcbkNhbWVtYmVydC9NU1xcbkNhbWVyb24vTVxcbkNhbWVyb29uL1NNXFxuQ2FtZXJvb25pYW4vTVNcXG5DYW1pbGxhL01cXG5DYW1pbGxlL01cXG5DYW1vZW5zL01cXG5DYW1wYW5lbGxhL01cXG5DYW1wYmVsbC9NXFxuQ2FtcGluYXMvTVxcbkNhbXBvcy9NXFxuQ2FtcnkvTVxcbkNhbXVzL01cXG5DYW4vTVxcbkNhbmFhbi9NXFxuQ2FuYWFuaXRlL01TXFxuQ2FuYWRcXG5DYW5hZGEvTVxcbkNhbmFkaWFuL1NNXFxuQ2FuYWRpYW5pc21cXG5DYW5hbGV0dG8vTVxcbkNhbmFyaWVzL01cXG5DYW5hdmVyYWwvTVxcbkNhbmJlcnJhL01cXG5DYW5jZXIvU01cXG5DYW5jdW4vTVxcbkNhbmRhY2UvTVxcbkNhbmRpY2UvTVxcbkNhbmRpZGUvTVxcbkNhbmR5L01cXG5DYW5uZXMvTVxcbkNhbm5vbi9NXFxuQ2Fub24vTVxcbkNhbm9wdXMvTVxcbkNhbnRhYnJpZ2lhbi9NXFxuQ2FudGVyYnVyeS9NXFxuQ2FudG9uL01cXG5DYW50b25lc2UvTVxcbkNhbnRvci9NXFxuQ2FudHJlbGwvTVxcbkNhbnR1L01cXG5DYW51dGUvTVxcbkNhcGFibGFuY2EvTVxcbkNhcGVrL01cXG5DYXBlbGxhL01cXG5DYXBldC9NXFxuQ2FwZXRpYW4vTVxcbkNhcGV0b3duL01cXG5DYXBoL01cXG5DYXBpc3RyYW5vL01cXG5DYXBpdG9sL1NNXFxuQ2FwaXRvbGluZS9NXFxuQ2Fwb25lL01cXG5DYXBvdGUvTVxcbkNhcHJhL01cXG5DYXByaS9NXFxuQ2Fwcmljb3JuL01TXFxuQ2FwdFxcbkNhcHVjaGluL01cXG5DYXB1bGV0L01cXG5DYXJhL01cXG5DYXJhY2FsbGEvTVxcbkNhcmFjYXMvTVxcbkNhcmF2YWdnaW8vTVxcbkNhcmJvbG95L01cXG5DYXJib25kYWxlL01cXG5DYXJib25pZmVyb3VzL01cXG5DYXJib3J1bmR1bS9NXFxuQ2FyZGVuYXMvTVxcbkNhcmRpZmYvTVxcbkNhcmRpbi9NXFxuQ2FyZG96by9NXFxuQ2FyZXkvTVxcbkNhcmliL01TXFxuQ2FyaWJiZWFuL01TXFxuQ2FyaW5hL01cXG5DYXJpc3NhL01cXG5DYXJsL01cXG5DYXJsYS9NXFxuQ2FybGVuZS9NXFxuQ2FybGluL01cXG5DYXJsby9NU1xcbkNhcmxvcy9NXFxuQ2FybHNiYWQvTVxcbkNhcmxzb24vTVxcbkNhcmx0b24vTVxcbkNhcmx5L01cXG5DYXJseWxlL01cXG5DYXJtZWxhL01cXG5DYXJtZWxsYS9NXFxuQ2FybWVsby9NXFxuQ2FybWVuL01cXG5DYXJtaWNoYWVsL01cXG5DYXJtaW5lL01cXG5DYXJuYXAvTVxcbkNhcm5hdGlvbi9NXFxuQ2FybmVnaWUvTVxcbkNhcm5leS9NXFxuQ2Fybm90L01cXG5DYXJvbC9NXFxuQ2Fyb2xlL01cXG5DYXJvbGluYS9NXFxuQ2Fyb2xpbmUvTVxcbkNhcm9saW5naWFuL01cXG5DYXJvbGluaWFuL01cXG5DYXJvbHluL01cXG5DYXJwYXRoaWFuL1NNXFxuQ2FycGF0aGlhbnMvTVxcbkNhcnBlbnRlci9NXFxuQ2Fyci9NXFxuQ2FycmFuemEvTVxcbkNhcnJpZS9STVxcbkNhcnJpZXIvTVxcbkNhcnJpbGxvL01cXG5DYXJyb2xsL01cXG5DYXJzb24vTVxcbkNhcnRlci9NXFxuQ2FydGVyc3ZpbGxlL01cXG5DYXJ0ZXNpYW4vTVxcbkNhcnRoYWdlL01cXG5DYXJ0aGFnaW5pYW4vTVNcXG5DYXJ0aWVyL01cXG5DYXJ0d3JpZ2h0L01cXG5DYXJ1c28vTVxcbkNhcnZlci9NXFxuQ2FyeS9NXFxuQ2FzYWJsYW5jYS9NXFxuQ2FzYWxzL01cXG5DYXNhbmRyYS9NXFxuQ2FzYW5vdmEvU01cXG5DYXNjYWRlcy9NXFxuQ2FzZS9NXFxuQ2FzZXkvTVxcbkNhc2gvTVxcbkNhc2lvL01cXG5DYXNwYXIvTVxcbkNhc3Blci9NXFxuQ2FzcGlhbi9NXFxuQ2Fzc2FuZHJhL1NNXFxuQ2Fzc2F0dC9NXFxuQ2Fzc2lkeS9NXFxuQ2Fzc2llL01cXG5DYXNzaW9wZWlhL01cXG5DYXNzaXVzL01cXG5DYXN0YW5lZGEvTVxcbkNhc3RpbGlhblxcbkNhc3RpbGxvL01cXG5DYXN0bGVyZWFnaC9NXFxuQ2FzdG9yL01cXG5DYXN0cmllcy9NXFxuQ2FzdHJvL01cXG5DYXRhbGFuL1NNXFxuQ2F0YWxpbmEvTVxcbkNhdGFsb25pYS9NXFxuQ2F0YXdiYS9NXFxuQ2F0ZXJwaWxsYXIvTVxcbkNhdGhheS9NXFxuQ2F0aGVyL01cXG5DYXRoZXJpbmUvTVxcbkNhdGhsZWVuL01cXG5DYXRob2xpYy9NU1xcbkNhdGhvbGljaXNtL01TXFxuQ2F0aHJ5bi9NXFxuQ2F0aHkvTVxcbkNhdGlsaW5lL01cXG5DYXRvL01cXG5DYXRza2lsbC9TTVxcbkNhdHNraWxscy9NXFxuQ2F0dC9NXFxuQ2F0dWxsdXMvTVxcbkNhdWNhc2lhbi9NU1xcbkNhdWNhc29pZFxcbkNhdWNhc3VzL01cXG5DYXVjaHkvTVxcbkNhdmVuZGlzaC9NXFxuQ2F2b3VyL01cXG5DYXh0b24vTVxcbkNheWVubmUvTVxcbkNheW1hbi9NXFxuQ2F5dWdhL1NNXFxuQ2F5dXNlXFxuQ2JcXG5DZC9NXFxuQ2UvTVxcbkNlYXVzZXNjdS9NXFxuQ2VidS9NXFxuQ2VidWFuby9NXFxuQ2VjZWxpYS9NXFxuQ2VjaWwvTVxcbkNlY2lsZS9NXFxuQ2VjaWxpYS9NXFxuQ2VjaWx5L01cXG5DZWRyaWMvTVxcbkNlbGVzdGUvTVxcbkNlbGdlbmUvTVxcbkNlbGlhL01cXG5DZWxpbmEvTVxcbkNlbGxpbmkvTVxcbkNlbHNpdXMvTVxcbkNlbHQvU01cXG5DZWx0aWMvU01cXG5DZW5vem9pYy9NXFxuQ2VudGF1cnVzL01cXG5DZW50aWdyYWRlXFxuQ2VudHJhbFxcbkNlcGhlaWQvTVxcbkNlcGhldXMvTVxcbkNlcmJlcnVzL01cXG5DZXJlbmtvdi9NXFxuQ2VyZXMvTVxcbkNlcmYvTVxcbkNlcnZhbnRlcy9NXFxuQ2VzYXIvTVxcbkNlc2FyZWFuL01cXG5DZXNzbmEvTVxcbkNldHVzL01cXG5DZXlsb24vTVxcbkNleWxvbmVzZVxcbkNlemFubmUvTVxcbkNmL01cXG5DaCdpbi9NXFxuQ2gvTlxcbkNoYWJsaXMvTVxcbkNoYWQvTVxcbkNoYWRpYW4vTVNcXG5DaGFkd2ljay9NXFxuQ2hhZ2FsbC9NXFxuQ2hhaXRhbnlhL01cXG5DaGFpdGluL01cXG5DaGFsZGVhXFxuQ2hhbGRlYW4vTVxcbkNoYWxsZW5nZXIvTVxcbkNoYWxtZXJzXFxuQ2hhbWJlcmxhaW4vTVxcbkNoYW1iZXJzL01cXG5DaGFtYmVyc2J1cmcvTVxcbkNoYW1wYWlnbi9NXFxuQ2hhbXBsYWluL01cXG5DaGFtcG9sbGlvbi9NXFxuQ2hhbi9NXFxuQ2hhbmNlL01cXG5DaGFuY2VsbG9yc3ZpbGxlL01cXG5DaGFuZGlnYXJoL01cXG5DaGFuZGxlci9NXFxuQ2hhbmRvbi9NXFxuQ2hhbmRyYS9NXFxuQ2hhbmRyYWd1cHRhL01cXG5DaGFuZHJhc2VraGFyL01cXG5DaGFuZWwvTVxcbkNoYW5leS9NXFxuQ2hhbmcvTVxcbkNoYW5nY2h1bi9NXFxuQ2hhbmdzaGEvTVxcbkNoYW50aWxseS9NXFxuQ2hhcGxpbi9NXFxuQ2hhcGxpbmVzcXVlXFxuQ2hhcG1hbi9NXFxuQ2hhcHBhcXVpZGRpY2svTVxcbkNoYXB1bHRlcGVjL01cXG5DaGFyYnJheS9NXFxuQ2hhcmRvbm5heS9NXFxuQ2hhcml0eS9NXFxuQ2hhcmxlbWFnbmUvTVxcbkNoYXJsZW5lL01cXG5DaGFybGVzL01cXG5DaGFybGVzdG9uL01TXFxuQ2hhcmxleS9NXFxuQ2hhcmxpZS9NXFxuQ2hhcmxvdHRlL01cXG5DaGFybG90dGVzdmlsbGUvTVxcbkNoYXJsb3R0ZXRvd24vTVxcbkNoYXJtYWluZS9NXFxuQ2hhcm1pbi9NXFxuQ2hhcm9sYWlzL01cXG5DaGFyb24vTVxcbkNoYXJ0aXNtL01cXG5DaGFydHJlcy9NXFxuQ2hhcnliZGlzL01cXG5DaGFzZS9NXFxuQ2hhc2l0eS9NXFxuQ2hhdGVhdWJyaWFuZC9NXFxuQ2hhdHRhaG9vY2hlZS9NXFxuQ2hhdHRhbm9vZ2EvTVxcbkNoYXR0ZXJsZXkvTVxcbkNoYXR0ZXJ0b24vTVxcbkNoYXVjZXIvTVxcbkNoYXVuY2V5L01cXG5DaGF1dGF1cXVhL01cXG5DaGF2ZXovTVxcbkNoYXllZnNreS9NXFxuQ2hlL01cXG5DaGVjaGVuL01cXG5DaGVjaG55YS9NXFxuQ2hlZGRhci9NXFxuQ2hlZXIvTVxcbkNoZWVyaW9zL01cXG5DaGVldG9zL01cXG5DaGVldmVyL01cXG5DaGVraG92L01cXG5DaGVraG92aWFuXFxuQ2hlbHNlYS9NXFxuQ2hlbHlhYmluc2svTVxcbkNoZW4vTVxcbkNoZW5leS9NXFxuQ2hlbmdkdS9NXFxuQ2hlbm5haS9NXFxuQ2hlb3BzL01cXG5DaGVyaS9NXFxuQ2hlcmllL01cXG5DaGVybmVua28vTVxcbkNoZXJub2J5bC9NXFxuQ2hlcm5vbXlyZGluL01cXG5DaGVyb2tlZS9NU1xcbkNoZXJyeS9NXFxuQ2hlcnlsL01cXG5DaGVzYXBlYWtlL01cXG5DaGVzaGlyZS9NXFxuQ2hlc3Rlci9NXFxuQ2hlc3RlcmZpZWxkL01cXG5DaGVzdGVydG9uL01cXG5DaGV2YWxpZXIvTVxcbkNoZXZpb3QvTVxcbkNoZXZyb2xldC9NXFxuQ2hldnJvbi9NXFxuQ2hldnkvTVxcbkNoZXllbm5lL1NNXFxuQ2hpL01cXG5DaGlhbnRpL01TXFxuQ2hpYmEvTVxcbkNoaWJjaGEvTVxcbkNoaWNhZ28vTVxcbkNoaWNhZ29hbi9NXFxuQ2hpY2FuYS9NXFxuQ2hpY2Fuby9NXFxuQ2hpY2thc2F3L01TXFxuQ2hpY2xldHMvTVxcbkNoaWNvL01cXG5DaGlodWFodWEvTVNcXG5DaGlsZS9NXFxuQ2hpbGVhbi9NU1xcbkNoaW1ib3Jhem8vTVxcbkNoaW1lcmEvTVNcXG5DaGltdS9NXFxuQ2hpbi9NXFxuQ2hpbmEvTVxcbkNoaW5hdG93bi9NXFxuQ2hpbmVzZS9NXFxuQ2hpbm9vay9NU1xcbkNoaXBld3lhbi9NXFxuQ2hpcHBlbmRhbGUvTVxcbkNoaXBwZXdhL1NNXFxuQ2hpcXVpdGEvTVxcbkNoaXJpY28vTVxcbkNoaXNob2xtL01cXG5DaGlzaW5hdS9NXFxuQ2hpdHRhZ29uZy9NXFxuQ2hpdmFzL01cXG5DaGxvZS9NXFxuQ2hvY3Rhdy9TTVxcbkNob21za3kvTVxcbkNob25ncWluZy9NXFxuQ2hvcGluL01cXG5DaG9wcmEvTVxcbkNob3UvTVxcbkNocmV0aWVuL01cXG5DaHJpcy9NXFxuQ2hyaXN0L01TXFxuQ2hyaXN0YS9NXFxuQ2hyaXN0Y2h1cmNoL01cXG5DaHJpc3RlbmRvbS9NU1xcbkNocmlzdGVuc2VuL01cXG5DaHJpc3RpL01cXG5DaHJpc3RpYW4vU01cXG5DaHJpc3RpYW5pdHkvU01cXG5DaHJpc3RpYW5pemVcXG5DaHJpc3RpZS9NXFxuQ2hyaXN0aW5hL01cXG5DaHJpc3RpbmUvTVxcbkNocmlzdGxpa2VcXG5DaHJpc3RtYXMvTVNcXG5DaHJpc3RtYXN0aWRlL01TXFxuQ2hyaXN0bWFzdGltZS9NU1xcbkNocmlzdG9wZXIvTVxcbkNocmlzdG9waGVyL01cXG5DaHJvbWVib29rL01TXFxuQ2hyb25pY2xlc1xcbkNocnlzbGVyL01cXG5DaHJ5c29zdG9tL01cXG5DaHJ5c3RhbC9NXFxuQ2h1Y2svTVxcbkNodWtjaGkvTVxcbkNodW1hc2gvTVxcbkNodW5nL01cXG5DaHVyY2gvTVxcbkNodXJjaGlsbC9NXFxuQ2h1cnJpZ3VlcmEvTVxcbkNodXZhc2gvTVxcbkNpL01cXG5DaWNlcm8vTVxcbkNpZC9NXFxuQ2ltYWJ1ZS9NXFxuQ2luY2lubmF0aS9NXFxuQ2luZGVyZWxsYS9NU1xcbkNpbmR5L01cXG5DaW5lbWFTY29wZS9NXFxuQ2luZXJhbWEvTVxcbkNpcHJvL01cXG5DaXJjZS9NXFxuQ2lzY28vTVxcbkNpdGliYW5rL01cXG5DaXRpZ3JvdXAvTVxcbkNpdHJvZW4vTVxcbkNsL01WXFxuQ2xhaWJvcm5lL01cXG5DbGFpci9NXFxuQ2xhaXJlL01cXG5DbGFpcm9sL01cXG5DbGFuY3kvTVxcbkNsYXBleXJvbi9NXFxuQ2xhcHRvbi9NXFxuQ2xhcmEvTVxcbkNsYXJlL01cXG5DbGFyZW5jZS9NXFxuQ2xhcmVuZG9uL01cXG5DbGFyaWNlL01cXG5DbGFyaXNzYS9NXFxuQ2xhcmsvTVxcbkNsYXJrZS9NXFxuQ2xhcmtzdmlsbGUvTVxcbkNsYXVkZS9NXFxuQ2xhdWRldHRlL01cXG5DbGF1ZGlhL01cXG5DbGF1ZGluZS9NXFxuQ2xhdWRpby9NXFxuQ2xhdWRpdXMvTVxcbkNsYXVzL01cXG5DbGF1c2V3aXR6L01cXG5DbGF1c2l1cy9NXFxuQ2xheS9NXFxuQ2xheXRvbi9NXFxuQ2xlYXJhc2lsL01cXG5DbGVtL1hNXFxuQ2xlbWVuY2VhdS9NXFxuQ2xlbWVucy9NXFxuQ2xlbWVudC9NU1xcbkNsZW1lbnRpbmUvTVxcbkNsZW1lbnRzL01cXG5DbGVtb25zL01cXG5DbGVtc29uL01cXG5DbGVvL01cXG5DbGVvcGF0cmEvTVxcbkNsZXZlbGFuZC9NXFxuQ2xpYnVybi9NXFxuQ2xpZmYvTVxcbkNsaWZmb3JkL01cXG5DbGlmdG9uL01cXG5DbGluZS9NXFxuQ2xpbnQvTVxcbkNsaW50b24vTVxcbkNsaW8vTVxcbkNsaXZlL01cXG5DbG9qdXJlL01cXG5DbG9yZXRzL01cXG5DbG9yb3gvTVxcbkNsb3N1cmUvTVxcbkNsb3Roby9NXFxuQ2xvdXNlYXUvTVxcbkNsb3Zpcy9NXFxuQ2x5ZGUvTVxcbkNseWRlc2RhbGUvTVxcbkNseXRlbW5lc3RyYS9NXFxuQ20vTVxcbkNtZHJcXG5Dby9NXFxuQ29iYWluL01cXG5Db2JiL01cXG5Db2NoYWJhbWJhL01cXG5Db2NoaW4vTVxcbkNvY2hpc2UvTVxcbkNvY2hyYW4vTVxcbkNvY2tuZXkvTVxcbkNvY3RlYXUvTVxcbkNvZFxcbkNvZHkvTVxcbkNvZmZleS9NXFxuQ29nbmFjL01cXG5Db2hhbi9NXFxuQ29oZW4vTVxcbkNvaW1iYXRvcmUvTVxcbkNvaW50cmVhdS9NXFxuQ29rZS9TTVxcbkNvbC9NXFxuQ29sYmVydC9NXFxuQ29sYnkvTVxcbkNvbGUvTVxcbkNvbGVlbi9NXFxuQ29sZW1hbi9NXFxuQ29sZXJpZGdlL01cXG5Db2xldHRlL01cXG5Db2xmYXgvTVxcbkNvbGdhdGUvTVxcbkNvbGluL01cXG5Db2xsZWVuL01cXG5Db2xsaWVyL01cXG5Db2xsaW4vU01cXG5Db2xsaW5zL01cXG5Db2xvXFxuQ29sb2duZS9NXFxuQ29sb21iaWEvTVxcbkNvbG9tYmlhbi9NU1xcbkNvbG9tYm8vTVxcbkNvbG9uL01cXG5Db2xvcmFkYW4vU01cXG5Db2xvcmFkby9NXFxuQ29sb3JhZG9hblxcbkNvbG9zc2V1bS9NXFxuQ29sdC9NXFxuQ29sdHJhbmUvTVxcbkNvbHVtYmlhL01cXG5Db2x1bWJpbmUvTVxcbkNvbHVtYnVzL01cXG5Db21cXG5Db21hbmNoZS9NU1xcbkNvbWJzL01cXG5Db21kclxcbkNvbWludGVybi9NXFxuQ29tbWFuZG1lbnRcXG5Db21tb25zL01cXG5Db21tb253ZWFsdGhcXG5Db21tdW5pb24vU01cXG5Db21tdW5pc21cXG5Db21tdW5pc3QvU01cXG5Db21vL01cXG5Db21vcmFuXFxuQ29tb3Jvcy9NXFxuQ29tcGFxL01cXG5Db21wdG9uL01cXG5Db21wdVNlcnZlL01cXG5Db210ZS9NXFxuQ29uYWtyeS9NXFxuQ29uYW4vTVxcbkNvbmNlcGNpb24vTVxcbkNvbmNldHRhL01cXG5Db25jb3JkL1NNXFxuQ29uY29yZGUvTVxcbkNvbmRpbGxhYy9NXFxuQ29uZG9yY2V0L01cXG5Db25lc3RvZ2EvTVxcbkNvbmZlZGVyYWN5L01cXG5Db25mZWRlcmF0ZS9NU1xcbkNvbmZ1Y2lhbi9TTVxcbkNvbmZ1Y2lhbmlzbS9NU1xcbkNvbmZ1Y2l1cy9NXFxuQ29uZy9NXFxuQ29uZ28vTVxcbkNvbmdvbGVzZS9NXFxuQ29uZ3JlZ2F0aW9uYWxcXG5Db25ncmVnYXRpb25hbGlzdC9NU1xcbkNvbmdyZXNzL01TXFxuQ29uZ3Jlc3Npb25hbFxcbkNvbmdyZXZlL01cXG5Db25sZXkvTVxcbkNvbm4vTVJcXG5Db25uZWN0aWN1dC9NXFxuQ29ubmVsbHN2aWxsZS9NXFxuQ29ubmVtYXJhL01cXG5Db25uZXIvTVxcbkNvbm5lcnkvTVxcbkNvbm5pZS9NXFxuQ29ubm9sbHkvTVxcbkNvbm5vcnMvTVxcbkNvbnJhZC9NXFxuQ29ucmFpbC9NXFxuQ29ucm9lL01cXG5Db25zZXJ2YXRpdmVcXG5Db25zdGFibGUvTVxcbkNvbnN0YW5jZS9NXFxuQ29uc3RhbnRpbmUvTVxcbkNvbnN0YW50aW5vcGxlL01cXG5Db25zdGl0dXRpb25cXG5Db25zdWVsby9NXFxuQ29udGluZW50L01cXG5Db250aW5lbnRhbC9NXFxuQ29udHJlcmFzL01cXG5Db253YXkvTVxcbkNvb2svTVxcbkNvb2tlL01cXG5Db29sZXkvTVxcbkNvb2xpZGdlL01cXG5Db29wZXIvTVxcbkNvb3BlcnN0b3duL01cXG5Db29ycy9NXFxuQ29wYWNhYmFuYS9NXFxuQ29wZWxhbmQvTVxcbkNvcGVuaGFnZW4vTVxcbkNvcGVybmljYW4vTVxcbkNvcGVybmljdXMvTVxcbkNvcGxhbmQvTVxcbkNvcGxleS9NXFxuQ29wcGVyZmllbGQvTVxcbkNvcHBlcnRvbmUvTVxcbkNvcHBvbGEvTVxcbkNvcHRpYy9NXFxuQ29yYS9NXFxuQ29yZGVsaWEvTVxcbkNvcmRpbGxlcmFzL01cXG5Db3Jkb2JhL01cXG5Db3JleS9NXFxuQ29yZnUvTVxcbkNvcmluYS9NXFxuQ29yaW5lL01cXG5Db3Jpbm5lL01cXG5Db3JpbnRoL01cXG5Db3JpbnRoaWFuL01TXFxuQ29yaW50aGlhbnMvTVxcbkNvcmlvbGFudXMvTVxcbkNvcmlvbGlzL01cXG5Db3JrXFxuQ29ybGVvbmUvTVxcbkNvcm1hY2svTVxcbkNvcm5laWxsZS9NXFxuQ29ybmVsaWEvTVxcbkNvcm5lbGl1cy9NXFxuQ29ybmVsbC9NXFxuQ29ybmluZy9NXFxuQ29ybmlzaC9NU1xcbkNvcm53YWxsL01cXG5Db3Jud2FsbGlzL01cXG5Db3JvbmFkby9NXFxuQ29yb3QvTVxcbkNvcnBcXG5Db3JyZWdnaW8vTVxcbkNvcnJpbmUvTVxcbkNvcnNpY2EvTVxcbkNvcnNpY2FuL01cXG5Db3J0ZXMvTVNcXG5Db3J0bGFuZC9NXFxuQ29ydmFsbGlzL01cXG5Db3J2ZXR0ZS9NXFxuQ29ydnVzL01cXG5Db3J5L01cXG5Db3NieS9NXFxuQ29zbW9zREIvTVxcbkNvc3NhY2svTVxcbkNvc3Rjby9NXFxuQ29zdGVsbG8vTVxcbkNvc3RuZXIvTVxcbkNvdGUvTVxcbkNvdG9ub3UvTVxcbkNvdG9wYXhpL01cXG5Db3Rzd29sZC9NXFxuQ290dG9uL01cXG5Db3Vsb21iL01cXG5Db3VsdGVyL01cXG5Db3VwZXJpbi9NXFxuQ291cmJldC9NXFxuQ291cnRuZXkvTVxcbkNvdXN0ZWF1L01cXG5Db3ZlbnRyeS9TTVxcbkNvdmluZ3Rvbi9NXFxuQ293YXJkL01cXG5Db3dlbGwvTVxcbkNvd2xleS9NXFxuQ293cGVyL01cXG5Db3gvTVxcbkNveS9NXFxuQ295bGUvTVxcbkNvenVtZWwvTVxcbkNwbFxcbkNyL01UXFxuQ3JhYmJlL01cXG5DcmFmdC9NXFxuQ3JhaWcvTVxcbkNyYW5hY2gvTVxcbkNyYW5lL01cXG5DcmFubWVyL01cXG5DcmF0ZXIvTVxcbkNyYXdmb3JkL01cXG5DcmF5L01cXG5DcmF5b2xhL01cXG5DcmVhdGlvbi9NXFxuQ3JlYXRvci9NXFxuQ3JlY3kvTVxcbkNyZWUvRFNNXFxuQ3JlZWsvU01cXG5DcmVpZ2h0b24vTVxcbkNyZW9sZS9TTVxcbkNyZW9uL01cXG5DcmVzc2lkYS9NXFxuQ3Jlc3QvTVxcbkNyZXRhY2VvdXMvTVxcbkNyZXRhbi9TTVxcbkNyZXRlL01cXG5DcmljaHRvbi9NXFxuQ3JpY2svTVxcbkNyaW1lYS9NXFxuQ3JpbWVhbi9NXFxuQ3Jpb2xsby9NXFxuQ3Jpc2NvL01cXG5DcmlzdGluYS9NXFxuQ3JvYXQvU01cXG5Dcm9hdGlhL01cXG5Dcm9hdGlhbi9NU1xcbkNyb2NlL01cXG5Dcm9ja2V0dC9NXFxuQ3JvZXN1cy9NXFxuQ3JvbXdlbGwvTVxcbkNyb213ZWxsaWFuL01cXG5Dcm9uaW4vTVxcbkNyb25raXRlL01cXG5Dcm9udXMvTVxcbkNyb29rZXMvTVxcbkNyb3NieS9NXFxuQ3Jvc3MvTVxcbkNyb3cvU01cXG5Dcm93bGV5L01cXG5DcnVjaWZpeGlvbi9NU1xcbkNydWlrc2hhbmsvTVxcbkNydWlzZS9NXFxuQ3J1c2FkZXMnc1xcbkNydXNvZS9NXFxuQ3J1eC9NXFxuQ3J1ei9NXFxuQ3J5cHRvem9pYy9NXFxuQ3J5c3RhbC9NXFxuQ3NvbmthL01cXG5DdFxcbkN0ZXNpcGhvbi9NXFxuQ3RodWxodS9NXFxuQ3UvTVxcbkN1YmEvTVxcbkN1YmFuL1NNXFxuQ3VjaHVsYWluL01cXG5DdWlzaW5hcnQvTVxcbkN1bGJlcnRzb24vTVxcbkN1bGxlbi9NXFxuQ3VtYmVybGFuZC9NXFxuQ3VtbWluZ3MvTVxcbkN1bmFyZC9NXFxuQ3VubmluZ2hhbS9NXFxuQ3VwaWQvTVxcbkN1cmFjYW8vTVxcbkN1cmllL01cXG5DdXJpdGliYS9NXFxuQ3Vycmllci9NXFxuQ3VycnkvUk1cXG5DdXJ0L01cXG5DdXJ0aXMvTVxcbkN1c3Rlci9NXFxuQ3V2aWVyL01cXG5DdXpjby9NXFxuQ3liZWxlL01cXG5DeWNsYWRlcy9NXFxuQ3ljbG9wZXMvTVxcbkN5Y2xvcHMvTVxcbkN5Z251cy9NXFxuQ3ltYmVsaW5lL01cXG5DeW50aGlhL01cXG5DeXByaWFuL01cXG5DeXByaW90L01TXFxuQ3lwcnVzL01cXG5DeXJhbm8vTVxcbkN5cmlsL01cXG5DeXJpbGxpYy9NXFxuQ3lydXMvTVxcbkN6ZWNoL01cXG5DemVjaGlhL01cXG5DemVjaG9zbG92YWtcXG5DemVjaG9zbG92YWtpYS9NXFxuQ3plY2hvc2xvdmFraWFuL1NNXFxuQ3plY2hzXFxuQ3plcm55L01cXG5EL01cXG5EQS9NXFxuREFSXFxuREFUL01cXG5EQk1TL01cXG5EQy9NXFxuREQvTVxcbkREUy9NXFxuRERUL1NcXG5ERVxcbkRFQVxcbkRFQy9TRFxcbkRIXFxuREhTXFxuRElcXG5ESlxcbkRNQ0FcXG5ETUQvTVxcbkRNWlxcbkROQS9NXFxuRE9BXFxuRE9CXFxuRE9EXFxuRE9FXFxuRE9TL01cXG5ET1RcXG5EUC9TTVxcbkRQVFxcbkRTVFxcbkRUUFxcbkRVSVxcbkRWRC9TXFxuRFZSL1NNXFxuRFdJXFxuRGFjaGF1L01cXG5EYWNyb24vU01cXG5EYWRhL01cXG5EYWRhaXNtL01cXG5EYWVkYWx1cy9NXFxuRGFndWVycmUvTVxcbkRhZ3dvb2QvTVxcbkRhaG9tZXkvTVxcbkRhaW1sZXIvTVxcbkRhaXN5L01cXG5EYWthci9NXFxuRGFrb3RhL1NNXFxuRGFrb3Rhbi9NXFxuRGFsYWlcXG5EYWxlL01cXG5EYWxleS9NXFxuRGFsaS9NXFxuRGFsaWFuL01cXG5EYWxsYXMvTVxcbkRhbG1hdGlhL01cXG5EYWxtYXRpYW4vU01cXG5EYWx0b24vTVxcbkRhbWFzY3VzL01cXG5EYW1lL01OXFxuRGFtaWFuL01cXG5EYW1pZW4vTVxcbkRhbWlvbi9NXFxuRGFtb2NsZXMvTVxcbkRhbW9uL01cXG5EYW4vTVxcbkRhbmEvTVxcbkRhbmFlL01cXG5EYW5idXJ5L01cXG5EYW5lL1NNXFxuRGFuZWxhdy9NXFxuRGFuZ2VyZmllbGQvTVxcbkRhbmlhbC9NXFxuRGFuaWVsL1NNXFxuRGFuaWVsbGUvTVxcbkRhbmllbHMvTVxcbkRhbmlzaC9NXFxuRGFubmllL01cXG5EYW5ueS9NXFxuRGFub25lL01cXG5EYW50ZS9NXFxuRGFudG9uL01cXG5EYW51YmUvTVxcbkRhbnViaWFuL01cXG5EYW52aWxsZS9NXFxuRGFwaG5lL01cXG5EYXJieS9NXFxuRGFyY3kvTVxcbkRhcmRhbmVsbGVzL01cXG5EYXJlL01cXG5EYXJlbi9NXFxuRGFyZnVyL01cXG5EYXJpbi9NXFxuRGFyaW8vTVxcbkRhcml1cy9NXFxuRGFyamVlbGluZy9NXFxuRGFybGEvTVxcbkRhcmxlbmUvTVxcbkRhcmxpbmcvTVxcbkRhcm5lbGwvTVxcbkRhcnJlbC9NXFxuRGFycmVsbC9NXFxuRGFycmVuL01cXG5EYXJyaW4vTVxcbkRhcnJvdy9NXFxuRGFycnlsL01cXG5EYXJ0aC9NXFxuRGFydG1vb3IvTVxcbkRhcnRtb3V0aC9NXFxuRGFydm9uL01cXG5EYXJ3aW4vTVxcbkRhcndpbmlhbi9NXFxuRGFyd2luaXNtL1NNXFxuRGFyd2luaXN0XFxuRGFyeWwvTVxcbkRhdGFtYXRpb25cXG5EYXVnaGVydHkvTVxcbkRhdW1pZXIvTVxcbkRhdmFvL01cXG5EYXZlL01cXG5EYXZlbnBvcnQvTVxcbkRhdmlkL01TXFxuRGF2aWRzb24vTVxcbkRhdmllcy9NXFxuRGF2aXMvTVxcbkRhdnkvU01cXG5EYXdlcy9NXFxuRGF3a2luc1xcbkRhd24vTVxcbkRhd3Nvbi9NXFxuRGF5L01cXG5EYXlhblxcbkRheXRvbi9NXFxuRGVHZW5lcmVzL01cXG5EZUthbGIvTVxcbkRlYWRoZWFkL01cXG5EZWFuL01cXG5EZWFuYS9NXFxuRGVhbmRyZS9NXFxuRGVhbm4vTVxcbkRlYW5uYS9NXFxuRGVhbm5lL01cXG5EZWF0aC9NXFxuRGViYmllL01cXG5EZWJieS9NXFxuRGViaWFuL01cXG5EZWJvcmEvTVxcbkRlYm9yYWgvTVxcbkRlYm91aWxsZXQvTVxcbkRlYnJhL01cXG5EZWJzL01cXG5EZWJ1c3N5L01cXG5EZWMvTVxcbkRlY2Fsb2d1ZS9NXFxuRGVjYXR1ci9NXFxuRGVjY2EvTVxcbkRlY2Nhbi9NXFxuRGVjZW1iZXIvU01cXG5EZWNrZXIvTVxcbkRlZGVraW5kL01cXG5EZWUvTVxcbkRlZW5hL01cXG5EZWVyZS9NXFxuRGVmb2UvTVxcbkRlZ2FzL01cXG5EZWlkcmUvTVxcbkRlaW1vcy9NXFxuRGVpcmRyZS9NXFxuRGVpdHlcXG5EZWplc3VzL01cXG5EZWwvTVxcbkRlbGFjcm9peC9NXFxuRGVsYWNydXovTVxcbkRlbGFuZXkvTVxcbkRlbGFuby9NXFxuRGVsYXdhcmUvTVNcXG5EZWxhd2FyZWFuL1NNXFxuRGVsYmVydC9NXFxuRGVsZW9uL01cXG5EZWxnYWRvL01cXG5EZWxoaS9NXFxuRGVsaWEvTVxcbkRlbGliZXMvTVxcbkRlbGljaW91cy9NXFxuRGVsaWxhaC9NXFxuRGVsaWxhaHNcXG5EZWxpdXMvTVxcbkRlbGwvTVxcbkRlbGxhL01cXG5EZWxtYXIvTVxcbkRlbG1hcnZhL01cXG5EZWxtZXIvTVxcbkRlbG1vbmljby9NXFxuRGVsb3Jlcy9NXFxuRGVsb3Jpcy9NXFxuRGVscGhpL01cXG5EZWxwaGljL01cXG5EZWxwaGludXMvTVxcbkRlbHRhL01cXG5EZWx0b25hL01cXG5EZW0vR1xcbkRlbWF2ZW5kL01cXG5EZW1lcm9sL01cXG5EZW1ldGVyL01cXG5EZW1ldHJpdXMvTVxcbkRlbWluZy9NXFxuRGVtb2NyYXQvU01cXG5EZW1vY3JhdGljXFxuRGVtb2NyaXR1cy9NXFxuRGVtb3N0aGVuZXMvTVxcbkRlbXBzZXkvTVxcbkRlbmEvTVxcbkRlbmFsaVxcbkRlbmViL01cXG5EZW5lYm9sYS9NXFxuRGVuZy9NXFxuRGVuaXMvTVxcbkRlbmlzZS9NXFxuRGVubWFyay9NXFxuRGVubmlzL01cXG5EZW5ueS9NXFxuRGVudG9uL01cXG5EZW52ZXIvTVxcbkRlb24vTVxcbkRlcHAvTVxcbkRlcmJ5L01cXG5EZXJlay9NXFxuRGVyaWNrL01cXG5EZXJtb3QvTVxcbkRlcnJpY2svTVxcbkRlcnJpZGEvTVxcbkRlc2NhcnRlcy9NXFxuRGVzZGVtb25hL01cXG5EZXNpcmVlL01cXG5EZXNtb25kL01cXG5EZXRyb2l0L01cXG5EZXV0ZXJvbm9teS9NXFxuRGV2YW5hZ2FyaS9NXFxuRGV2aS9NXFxuRGV2aW4vTVxcbkRldm9uL01cXG5EZXZvbmlhbi9NXFxuRGV3YXIvTVxcbkRld2F5bmUvTVxcbkRld2V5L01cXG5EZXdpdHQvTVxcbkRleGVkcmluZS9NXFxuRGV4dGVyL01cXG5EaGFrYS9NXFxuRGhhdWxhZ2lyaS9NXFxuRGkvU01cXG5EaUNhcHJpby9NXFxuRGlNYWdnaW8vTVxcbkRpYWdoaWxldi9NXFxuRGlhbC9NXFxuRGlhbmEvTVxcbkRpYW5lL01cXG5EaWFubi9NXFxuRGlhbm5hL01cXG5EaWFubmUvTVxcbkRpYXNcXG5EaWFzcG9yYS9NU1xcbkRpY2svWE1cXG5EaWNrZW5zL01cXG5EaWNrZW5zaWFuXFxuRGlja2Vyc29uL01cXG5EaWNraW5zb24vTVxcbkRpY2tzb24vTVxcbkRpY3RhcGhvbmUvU01cXG5EaWRlcm90L01cXG5EaWRvL01cXG5EaWRyaWtzb24vTVxcbkRpZWZlbmJha2VyL01cXG5EaWVnby9NXFxuRGllbS9NXFxuRGlldHJpY2gvTVxcbkRpamtzdHJhL01cXG5EaWpvbi9NXFxuRGlsYmVydC9NU1xcbkRpbGxhcmQvTVxcbkRpbGxpbmdlci9NXFxuRGlsbG9uL01cXG5EaW5hL01cXG5EaW5haC9NXFxuRGluby9NXFxuRGlvY2xldGlhbi9NXFxuRGlvZ2VuZXMvTVxcbkRpb24vTVxcbkRpb25uZS9NXFxuRGlvbnlzaWFuL01cXG5EaW9ueXN1cy9NXFxuRGlvcGhhbnRpbmUvTVxcbkRpb3IvTVxcbkRpcHBlci9NXFxuRGlyXFxuRGlyYWMvTVxcbkRpcmljaGxldC9NXFxuRGlyay9NXFxuRGlzL01cXG5EaXNuZXkvTVxcbkRpc25leWxhbmQvTVxcbkRpc3JhZWxpL01cXG5EaXZpbmUvTVxcbkRpd2FsaS9NXFxuRGl4L01cXG5EaXhpZS9NXFxuRGl4aWVjcmF0L01cXG5EaXhpZWxhbmQvU01cXG5EaXhvbi9NXFxuRGphbmdvL01cXG5Eamlib3V0aS9NXFxuRG1pdHJpL01cXG5EbmVwcm9wZXRyb3Zzay9NXFxuRG5pZXN0ZXIvTVxcbkRvYmJpbi9NXFxuRG9iZXJtYW4vTVxcbkRvYnJvL01cXG5Eb2N0b3JcXG5Eb2N0b3Jvdy9NXFxuRG9kZ2UvTVxcbkRvZGdzb24vTVxcbkRvZG9tYS9NXFxuRG9kc29uL01cXG5Eb2UvTVxcbkRvaGEvTVxcbkRvbGJ5L01cXG5Eb2xlL01cXG5Eb2xsaWUvTVxcbkRvbGx5L01cXG5Eb2xvcmVzL01cXG5Eb21lc2RheS9NXFxuRG9taW5nby9NXFxuRG9taW5ndWV6L01cXG5Eb21pbmljL01cXG5Eb21pbmljYS9NXFxuRG9taW5pY2FuL01TXFxuRG9taW5pY2svTVxcbkRvbWluaW9uXFxuRG9taW5pcXVlL01cXG5Eb21pdGlhbi9NXFxuRG9uL1NNXFxuRG9uYS9NXFxuRG9uYWh1ZS9NXFxuRG9uYWxkL01cXG5Eb25hbGRzb24vTVxcbkRvbmF0ZWxsby9NXFxuRG9uZXRzay9NXFxuRG9uaXpldHRpL01cXG5Eb25uL01SXFxuRG9ubmEvTVxcbkRvbm5lL01cXG5Eb25uZWxsL01cXG5Eb25uZXIvTVxcbkRvbm5pZS9NXFxuRG9ubnkvTVxcbkRvbm92YW4vTVxcbkRvb2xleS9NXFxuRG9vbGl0dGxlL01cXG5Eb29uZXNidXJ5L01cXG5Eb3BwbGVyL01cXG5Eb3JhL01cXG5Eb3JjYXMvTVxcbkRvcmVlbi9NXFxuRG9yaWFuL01cXG5Eb3JpYy9NXFxuRG9yaXMvTVxcbkRvcml0b3MvTVxcbkRvcm90aGVhL01cXG5Eb3JvdGh5L01cXG5Eb3JzZXQvTVxcbkRvcnNleS9NXFxuRG9ydGh5L01cXG5Eb3J0bXVuZC9NXFxuRG9zdG9ldnNreS9NXFxuRG90L01cXG5Eb3RoYW4vTVxcbkRvdHNvbi9NXFxuRG91YWxhL01cXG5Eb3VheS9NXFxuRG91YmxlZGF5L01cXG5Eb3VnL01cXG5Eb3VnbGFzL01cXG5Eb3VnbGFzcy9NXFxuRG91cm8vTVxcbkRvdmVyL01cXG5Eb3cvTVxcbkRvd25zL01cXG5Eb3dueS9NXFxuRG95bGUvTVxcbkRyXFxuRHJhY28vTVxcbkRyYWNvbmlhbi9NXFxuRHJhY3VsYS9NXFxuRHJha2UvTVxcbkRyYW1hbWluZS9TTVxcbkRyYW1idWllL01cXG5EcmFuby9NXFxuRHJhdmlkaWFuL01cXG5EcmVpc2VyL01cXG5EcmVzZGVuL01cXG5EcmV3L01cXG5EcmV5ZnVzL01cXG5EcmlzdGFuL01cXG5Ecm9wYm94L01cXG5EcnVkZ2UvTVxcbkRydXBhbC9NXFxuRHJ5ZGVuL01cXG5Ec2NodWJiYS9NXFxuRHVcXG5EdVBvbnQvTVxcbkR1YW5lL01cXG5EdWJhaS9NXFxuRHViY2VrL01cXG5EdWJoZS9NXFxuRHVibGluL01cXG5EdWJyb3ZuaWsvTVxcbkR1YnVxdWUvTVxcbkR1Y2hhbXAvTVxcbkR1ZGxleS9NXFxuRHVmZnkvTVxcbkR1aXNidXJnL01cXG5EdWtlL01cXG5EdWxsZXMvTVxcbkR1bHV0aC9NXFxuRHVtYXMvTVxcbkR1bWJsZWRvcmUvTVxcbkR1bWJvL01cXG5EdW5hbnQvTVxcbkR1bmJhci9NXFxuRHVuY2FuL01cXG5EdW5kZWVcXG5EdW5lZGluL01cXG5EdW5raXJrL01cXG5EdW5sYXAvTVxcbkR1bm4vTVxcbkR1bm5lL01cXG5EdXJhY2VsbC9NXFxuRHVyYW4vTVxcbkR1cmFudC9NXFxuRHVyYW50ZS9NXFxuRHVyYmFuL01cXG5EdXJlci9NXFxuRHVyZXgvTVxcbkR1cmhhbS9NU1xcbkR1cmtoZWltL01cXG5EdXJvYy9NXFxuRHVyb2NoZXIvTVxcbkR1c2UvTVxcbkR1c2hhbmJlL01cXG5EdXNzZWxkb3JmL01cXG5EdXN0YnVzdGVyL01cXG5EdXN0aW4vTVxcbkR1c3R5L01cXG5EdXRjaC9NXFxuRHV0Y2htYW4vTVxcbkR1dGNobWVuL01cXG5EdXRjaHdvbWFuXFxuRHV2YWxpZXIvTVxcbkR2aW5hL01cXG5Edm9yYWsvTVxcbkR3YXluZS9NXFxuRHdpZ2h0L01cXG5EeS9NXFxuRHllci9NXFxuRHlsYW4vTVxcbkR5bmFtb0RCL01cXG5EeXNvbi9NXFxuRHplcnpoaW5za3kvTVxcbkR6dW5nYXJpYS9NXFxuRS9TTVxcbkVDXFxuRUNHL01cXG5FQ01BU2NyaXB0L01cXG5FRFAvTVxcbkVEVFxcbkVFQy9NXFxuRUVHL01cXG5FRU9cXG5FRU9DXFxuRUZMXFxuRUZUXFxuRUtHL01cXG5FTEYvTVxcbkVNXFxuRU1UXFxuRU5FL01cXG5FT0VcXG5FUEEvTVxcbkVSXFxuRVJBXFxuRVNFL01cXG5FU0xcXG5FU1AvTVxcbkVTUE4vTVxcbkVTUlxcbkVTVC9NXFxuRVRcXG5FVEFcXG5FVERcXG5FVVxcbkVVTEEvU1xcbkVha2lucy9NXFxuRWFyaGFydC9NXFxuRWFybC9NXFxuRWFybGUvTVxcbkVhcmxlbmUvTVxcbkVhcmxpbmUvTVxcbkVhcm5lc3QvTVxcbkVhcm5lc3RpbmUvTVxcbkVhcm5oYXJkdC9NXFxuRWFycC9NXFxuRWFzdC9TWk1SXFxuRWFzdGVyL01cXG5FYXN0ZXJuL1JcXG5FYXN0bWFuL01cXG5FYXN0d29vZC9NXFxuRWF0b24vTVxcbkViZW4vTVxcbkViZW5lZXplci9NXFxuRWJlcnQvTVxcbkVib2xhL01cXG5FYm9uaWNzL01cXG5FYm9ueS9NXFxuRWJyby9NXFxuRWNjbGVzaWFzdGVzL01cXG5FY28vTVxcbkVjc3Rhc3lcXG5FY3VhZG9yL01cXG5FY3VhZG9yYW4vU01cXG5FY3VhZG9yZWFuXFxuRWN1YWRvcmlhbi9TTVxcbkVkL01OWFxcbkVkYW0vU01cXG5FZGRhL01cXG5FZGRpZS9NXFxuRWRkaW5ndG9uL01cXG5FZGR5L01cXG5FZGVuL01cXG5FZGdhci9NXFxuRWRnYXJkby9NXFxuRWRpbmJ1cmdoL01cXG5FZGlzb24vTVxcbkVkaXRoL01cXG5FZG1vbmQvTVxcbkVkbW9udG9uL01cXG5FZG11bmQvTVxcbkVkbmEvTVxcbkVkc2VsL01cXG5FZHVhcmRvL01cXG5FZHdhcmQvU01cXG5FZHdhcmRpYW4vTVxcbkVkd2FyZG8vTVxcbkVkd2FyZHMvTVxcbkVkd2luL01cXG5FZHdpbmEvTVxcbkVleW9yZS9NXFxuRWZmaWUvTVxcbkVmcmFpbi9NXFxuRWZyZW4vTVxcbkVnZ28vTVxcbkVneXB0L01cXG5FZ3lwdGlhbi9NU1xcbkVneXB0b2xvZ3kvTVxcbkVocmVuYmVyZy9NXFxuRWhybGljaC9NXFxuRWljaG1hbm4vTVxcbkVpZmZlbC9NXFxuRWlsZWVuL01cXG5FaW5zdGVpbi9NU1xcbkVpcmUvTVxcbkVpc2VuaG93ZXIvTVxcbkVpc2Vuc3RlaW4vTVxcbkVpc25lci9NXFxuRWxhaW5lL01cXG5FbGFtL01cXG5FbGFub3IvTVxcbkVsYXN0aWNzZWFyY2gvTVxcbkVsYXN0b3BsYXN0L01cXG5FbGJhL01cXG5FbGJlL01cXG5FbGJlcnQvTVxcbkVsYnJ1cy9NXFxuRWxkZXJzYnVyZy9NXFxuRWxkb24vTVxcbkVsZWFub3IvTVxcbkVsZWF6YXIvTVxcbkVsZWN0cmEvTVxcbkVsZW5hL01cXG5FbGdhci9NXFxuRWxpL01cXG5FbGlhcy9NXFxuRWxpamFoL01cXG5FbGlub3IvTVxcbkVsaW90L01cXG5FbGlzYS9NXFxuRWxpc2FiZXRoL01cXG5FbGlzZS9NXFxuRWxpc2VvL01cXG5FbGlzaGEvTVxcbkVsaXphL01cXG5FbGl6YWJldGgvTVxcbkVsaXphYmV0aGFuL1NNXFxuRWxpemFiZXRodG93bi9NXFxuRWxraGFydC9NXFxuRWxsYS9NXFxuRWxsZW4vTVxcbkVsbGVzbWVyZS9NXFxuRWxsaWUvTVxcbkVsbGluZ3Rvbi9NXFxuRWxsaW90L01cXG5FbGxpb3R0L01cXG5FbGxpcy9NXFxuRWxsaXNvbi9NXFxuRWxtYS9NXFxuRWxtZXIvTVxcbkVsbWlyYS9NXFxuRWxtby9NXFxuRWxuYXRoL01cXG5FbG5vcmEvTVxcbkVsb2hpbS9NXFxuRWxvaXNlL01cXG5FbG95L01cXG5FbHJveS9NXFxuRWxzYS9NXFxuRWxzaWUvTVxcbkVsc2lub3JlL01cXG5FbHRhbmluL01cXG5FbHRvbi9NXFxuRWx1bC9NXFxuRWx2YS9NXFxuRWx2aWEvTVxcbkVsdmluL01cXG5FbHZpcmEvTVxcbkVsdmlzL01cXG5FbHdheS9NXFxuRWx3b29kL01cXG5FbHlyaWEvTVxcbkVseXNlZS9NXFxuRWx5c2lhbi9NXFxuRWx5c2l1bS9TTVxcbkVtYWNzL01cXG5FbWFudWVsL01cXG5FbWVyc29uL01cXG5FbWVyeS9NXFxuRW1pbC9NXFxuRW1pbGUvTVxcbkVtaWxpYS9NXFxuRW1pbGlvL01cXG5FbWlseS9NXFxuRW1pbmVtL01cXG5FbWluZW5jZVxcbkVtbWEvTVxcbkVtbWFudWVsL01cXG5FbW1ldHQvTVxcbkVtbXkvTVxcbkVtb3J5L01cXG5FbmNhcnRhL01cXG5FbmR5bWlvbi9NXFxuRW5nL01cXG5FbmdlbHMvTVxcbkVuZ2xhbmQvTVxcbkVuZ2xpc2gvTVJTXFxuRW5nbGlzaG1hbi9NXFxuRW5nbGlzaG1lbi9NXFxuRW5nbGlzaHdvbWFuL01cXG5FbmdsaXNod29tZW4vTVxcbkVuaWQvTVxcbkVuaWYvTVxcbkVuaXdldG9rL01cXG5FbmtpZHUvTVxcbkVub2NoL01cXG5Fbm9zL01cXG5FbnJpY28vTVxcbkVucmlxdWUvTVxcbkVucm9uL01cXG5FbnRlcnByaXNlL01cXG5Fb2NlbmUvTVxcbkVwY290L01cXG5FcGhlc2lhbi9NU1xcbkVwaGVzdXMvTVxcbkVwaHJhaW0vTVxcbkVwaWN0ZXR1cy9NXFxuRXBpY3VyZWFuL01cXG5FcGljdXJ1cy9NXFxuRXBpbWV0aGl1cy9NXFxuRXBpcGhhbnkvU01cXG5FcGlzY29wYWxcXG5FcGlzY29wYWxpYW4vTVNcXG5FcGlzdGxlXFxuRXBzb20vTVxcbkVwc29uL01cXG5FcHN0ZWluL01cXG5FcXV1bGV1cy9NXFxuRXIvTVxcbkVyYXNtdXMvTVxcbkVyYXRvL01cXG5FcmF0b3N0aGVuZXMvTVxcbkVyZWJ1cy9NXFxuRXJlY3Rvci9NXFxuRXJld2hvbi9NXFxuRXJoYXJkL01cXG5FcmljL01cXG5FcmljYS9NXFxuRXJpY2gvTVxcbkVyaWNrL01cXG5Fcmlja2EvTVxcbkVyaWNrc29uL01cXG5FcmlkYW51cy9NXFxuRXJpZS9NXFxuRXJpay9NXFxuRXJpa2EvTVxcbkVyaW4vTVxcbkVyaXMvTVNcXG5Fcml0cmVhL01cXG5Fcml0cmVhbi9TTVxcbkVybGFuZy9NXFxuRXJsZW5tZXllci9NXFxuRXJtYS9NXFxuRXJuYS9NXFxuRXJuZXN0L01cXG5Fcm5lc3RpbmUvTVxcbkVybmVzdG8vTVxcbkVybmllL01cXG5Fcm5zdC9NXFxuRXJvcy9NU1xcbkVycm9sL01cXG5FcnNlL01cXG5FcnZJbi9NXFxuRXJ3aW4vTVxcbkVzYXUvTVxcbkVzY2hlci9NXFxuRXNjaGVyaWNoaWEvTVxcbkVzY29uZGlkb1xcbkVza2ltby9NU1xcbkVzbWVyYWxkYS9NXFxuRXNwZXJhbnRvL01cXG5Fc3BlcmFuemEvTVxcbkVzcGlub3phL01cXG5Fc3EvTVxcbkVzcXVpcmUvTVNcXG5Fc3Nlbi9NXFxuRXNzZW5lL01cXG5Fc3NlcXVpYm8vTVxcbkVzc2V4L01cXG5Fc3NpZS9NXFxuRXN0YWJsaXNobWVudFxcbkVzdGViYW4vTVxcbkVzdGVsYS9NXFxuRXN0ZWxsYS9NXFxuRXN0ZWxsZS9NXFxuRXN0ZXIvTVxcbkVzdGVyaGF6eS9NXFxuRXN0ZXMvTVxcbkVzdGhlci9NXFxuRXN0b25pYS9NXFxuRXN0b25pYW4vU01cXG5Fc3RyYWRhL01cXG5FdGhhbi9NXFxuRXRoZWwvTVxcbkV0aGVscmVkL01cXG5FdGhlcm5ldC9NXFxuRXRoaW9waWEvTVxcbkV0aGlvcGlhbi9TTVxcbkV0bmEvTVxcbkV0b24vTVxcbkV0cnVyaWEvTVxcbkV0cnVzY2FuL01cXG5FdHRhL01cXG5FdS9NXFxuRXVjaGFyaXN0L01TXFxuRXVjaGFyaXN0aWNcXG5FdWNsaWQvTVxcbkV1Z2VuZS9NXFxuRXVnZW5pYS9NXFxuRXVnZW5pZS9NXFxuRXVnZW5pby9NXFxuRXVsYS9NXFxuRXVsZXIvTVxcbkV1bWVuaWRlcy9NXFxuRXVuaWNlL01cXG5FdXBocmF0ZXMvTVxcbkV1clxcbkV1cmFzaWEvTVxcbkV1cmFzaWFuL01TXFxuRXVyaXBpZGVzL01cXG5FdXJvZG9sbGFyL1NNXFxuRXVyb3BhL01cXG5FdXJvcGUvTVxcbkV1cm9wZWFuL01TXFxuRXVyeWRpY2UvTVxcbkV1c3RhY2hpYW4vTVxcbkV1c3Rpcy9NXFxuRXV0ZXJwZS9NXFxuRXZhL01cXG5FdmFuL1NNXFxuRXZhbmdlbGljYWxcXG5FdmFuZ2VsaW5hL01cXG5FdmFuZ2VsaW5lL01cXG5FdmFuZ2VsaXN0L01cXG5FdmFucy9NXFxuRXZhbnN2aWxsZS9NXFxuRXZlL01cXG5FdmVseW4vTVxcbkV2ZW5raS9NXFxuRXZlclJlYWR5L01cXG5FdmVyZXN0L01cXG5FdmVyZXR0L01cXG5FdmVyZXR0ZS9NXFxuRXZlcmdsYWRlcy9NXFxuRXZlcnQvTVxcbkV2aWFuL01cXG5Fdml0YS9NXFxuRXdpbmcvTVxcbkV4Y2FsaWJ1ci9NXFxuRXhjZWRyaW4vTVxcbkV4Y2VsbGVuY3kvU01cXG5FeGNoZXF1ZXJcXG5FeGVyY3ljbGUvTVxcbkV4b2NldC9NXFxuRXhvZHVzL01cXG5FeHhvbi9NXFxuRXljay9NXFxuRXlyZS9NXFxuRXlzZW5jay9NXFxuRXpla2llbC9NXFxuRXpyYS9NXFxuRi9NRFxcbkZBQVxcbkZBUS9TTVxcbkZCSS9NXFxuRkNDXFxuRkRcXG5GREFcXG5GRElDL01cXG5GRFIvTVxcbkZIQS9NXFxuRklDQS9NXFxuRklGT1xcbkZMXFxuRk0vU01cXG5GTk1BL01cXG5GT0ZMXFxuRk9SVFJBTi9NXFxuRlBPXFxuRlNGL01cXG5GU0xJQ1xcbkZUQ1xcbkZVRC9TXFxuRldEXFxuRldJV1xcbkZZXFxuRllJXFxuRmFiZXJnZS9NXFxuRmFiaWFuL01TXFxuRmFjZWJvb2svTVxcbkZhZXJvZS9NXFxuRmFmbmlyL01cXG5GYWdpbi9NXFxuRmFoZC9NXFxuRmFocmVuaGVpdC9NXFxuRmFpcmJhbmtzL01cXG5GYWlyZmllbGQvTVxcbkZhaXJob3BlL01cXG5GYWlzYWwvTVxcbkZhaXNhbGFiYWQvTVxcbkZhaXRoL01cXG5GYWphcmRvL01cXG5GYWxhc2hhL01cXG5GYWxrbGFuZC9TTVxcbkZhbGtsYW5kcy9NXFxuRmFsbG9waWFuL01cXG5GYWxzdGFmZi9NXFxuRmFsd2VsbC9NXFxuRmFubmllL01cXG5GYW5ueS9NXFxuRmFyYWRheS9NXFxuRmFyZ28vTVxcbkZhcmxleS9NXFxuRmFybWVyL01cXG5GYXJtaW5ndG9uL01cXG5GYXJyYWd1dC9NXFxuRmFycmFraGFuL01cXG5GYXJyZWxsL01cXG5GYXJyb3cvTVxcbkZhcnNpL01cXG5GYXNzYmluZGVyL01cXG5GYXRhaC9NXFxuRmF0ZXMvTVxcbkZhdGhlci9TTVxcbkZhdGltYS9NXFxuRmF0aW1pZC9NXFxuRmF1bGtuZXIvTVxcbkZhdWxrbmVyaWFuL01cXG5GYXVudGxlcm95L01cXG5GYXVzdC9NXFxuRmF1c3RpYW4vTVxcbkZhdXN0aW5vL01cXG5GYXVzdHVzL01cXG5GYXdrZXMvTVxcbkZheS9NXFxuRmF5ZS9NXFxuRmF5ZXR0ZXZpbGxlL01cXG5GZS9NXFxuRmViL01cXG5GZWJydWFyeS9TTVxcbkZlZC9TTVxcbkZlZEV4L01cXG5GZWRlcmFsL01TXFxuRmVkZXJhbGlzdC9NXFxuRmVkZXJpY28vTVxcbkZlZHMvTVxcbkZlbGVjaWEvTVxcbkZlbGljZS9NXFxuRmVsaWNpYS9NXFxuRmVsaWNpdHkvTVxcbkZlbGlwZS9NXFxuRmVsaXgvTVxcbkZlbGxpbmkvTVxcbkZlbmlhbi9NXFxuRmVyYmVyL01cXG5GZXJkaW5hbmQvTVxcbkZlcmd1cy9NXFxuRmVyZ3Vzb24vTVxcbkZlcmxpbmdoZXR0aS9NXFxuRmVybWF0L01cXG5GZXJtaS9NXFxuRmVybi9NXFxuRmVybmFuZGV6L01cXG5GZXJuYW5kby9NXFxuRmVycmFyaS9NXFxuRmVycmFyby9NXFxuRmVycmVsbC9NXFxuRmVycmlzL01cXG5GZXlubWFuL01cXG5GZXovTVxcbkZpYXQvTVxcbkZpYmVyZ2xhcy9NXFxuRmlib25hY2NpL01cXG5GaWNodGUvTVxcbkZpZGVsL01cXG5GaWRvL01cXG5GaWVsZGluZy9NXFxuRmllbGRzL01cXG5GaWdhcm8vTVxcbkZpZ3Vlcm9hL01cXG5GaWppL01cXG5GaWppYW4vTVNcXG5GaWxpcGluby9NU1xcbkZpbGxtb3JlL01cXG5GaWxvZmF4L01cXG5GaW5jaC9NXFxuRmlubGFuZC9NXFxuRmlubGF5L01cXG5GaW5sZXkvTVxcbkZpbm4vU01cXG5GaW5uYm9nYWRvdHRpci9NXFxuRmlubmVnYW4vTVxcbkZpbm5pc2gvTVxcbkZpb25hL01cXG5GaXJlYmFzZS9NXFxuRmlyZWZveC9NXFxuRmlyZXN0b25lL01cXG5GaXNjaGVyL01cXG5GaXNoZXIvTVxcbkZpc2svTVxcbkZpdGNoL01cXG5GaXRjaGJ1cmcvTVxcbkZpdHpnZXJhbGQvTVxcbkZpdHpwYXRyaWNrL01cXG5GaXR6cm95L01cXG5GaXplYXUvTVxcbkZsYVxcbkZsYWdzdGFmZi9NXFxuRmxhbmFnYW4vTVxcbkZsYW5kZXJzL01cXG5GbGF0aGVhZFxcbkZsYXR0L01cXG5GbGF1YmVydC9NXFxuRmxlaXNjaGVyL01cXG5GbGVtaW5nL01cXG5GbGVtaXNoL01cXG5GbGV0Y2hlci9NXFxuRmxpbnQvTVxcbkZsaW50c3RvbmVzL01cXG5GbG8vTVxcbkZsb3JhL01cXG5GbG9yZW5jZS9NXFxuRmxvcmVudGluZS9NXFxuRmxvcmVzL01cXG5GbG9yaWRhL01cXG5GbG9yaWRhbi9NXFxuRmxvcmlkaWFuL1NNXFxuRmxvcmluZS9NXFxuRmxvcnNoZWltL01cXG5GbG9yeS9NXFxuRmxvc3NpZS9NXFxuRmxvd2Vycy9NXFxuRmxveWQvTVxcbkZseW5uL01cXG5GbS9NXFxuRm9jaC9NXFxuRm9ra2VyL01cXG5Gb2xleS9NXFxuRm9sZ2Vycy9NXFxuRm9sc29tL01cXG5Gb21hbGhhdXQvTVxcbkZvbmRhL01cXG5Gb29zYmFsbC9NXFxuRm9yYmVzL01cXG5Gb3JkL01cXG5Gb3JlbWFuL01cXG5Gb3Jlc3QvTVJcXG5Gb3Jlc3Rlci9NXFxuRm9ybWljYS9NU1xcbkZvcm1vc2EvTVxcbkZvcm1vc2FuL01cXG5Gb3JyZXN0L01cXG5Gb3JzdGVyL01cXG5Gb3J0YWxlemEvTVxcbkZvc3NlL01cXG5Gb3N0ZXIvTVxcbkZvdG9tYXQvTVxcbkZvdWNhdWx0L01cXG5Gb3VyaWVyL01cXG5Gb3VybmV5cm9uL01cXG5Gb3VydGhcXG5Gb3dsZXIvTVxcbkZveC9NU1xcbkZyL01EXFxuRnJhZ29uYXJkL01cXG5GcmFuL01cXG5GcmFuY2UvU01cXG5GcmFuY2VzL01cXG5GcmFuY2VzY2EvTVxcbkZyYW5jaW5lL01cXG5GcmFuY2lzL01cXG5GcmFuY2lzY2EvTVxcbkZyYW5jaXNjYW4vTVNcXG5GcmFuY2lzY28vTVxcbkZyYW5jay9NXFxuRnJhbmNvL01cXG5GcmFuY29pcy9NXFxuRnJhbmNvaXNlL01cXG5GcmFuY29waGlsZVxcbkZyYW5nbGFpcy9NXFxuRnJhbmsvU01cXG5GcmFua2VsL01cXG5GcmFua2Vuc3RlaW4vTVxcbkZyYW5rZm9ydC9NXFxuRnJhbmtmdXJ0L01SXFxuRnJhbmtmdXJ0ZXIvTVxcbkZyYW5raWUvTVxcbkZyYW5raXNoXFxuRnJhbmtsaW4vTVxcbkZyYW5rcy9NXFxuRnJhbm55L01cXG5GcmFuei9NXFxuRnJhc2VyL01cXG5GcmF1L01OXFxuRnJhdWxlaW5cXG5GcmF6aWVyL01cXG5GcmVkL01cXG5GcmVkYS9NXFxuRnJlZGRpZS9NXFxuRnJlZGR5L01cXG5GcmVkZXJpYy9NXFxuRnJlZGVyaWNrL01cXG5GcmVkZXJpY2tzYnVyZy9NXFxuRnJlZGVyaWN0b24vTVxcbkZyZWRyaWMvTVxcbkZyZWRyaWNrL01cXG5GcmVlbWFuL01cXG5GcmVlbWFzb24vU01cXG5GcmVlbWFzb25yeS9TTVxcbkZyZWV0b3duL01cXG5GcmVpZGEvTVxcbkZyZW1vbnQvTVxcbkZyZW5jaC9NU1xcbkZyZW5jaG1hbi9NXFxuRnJlbmNobWVuL01cXG5GcmVuY2h3b21hbi9NXFxuRnJlbmNod29tZW4vTVxcbkZyZW9uL01cXG5GcmVzbmVsL01cXG5GcmVzbm8vTVxcbkZyZXVkL01cXG5GcmV1ZGlhbi9NXFxuRnJleS9NXFxuRnJleWEvTVxcbkZyaS9NXFxuRnJpZGF5L1NNXFxuRnJpZWRhL01cXG5GcmllZGFuL01cXG5GcmllZG1hbi9NXFxuRnJpZWRtYW5uL01cXG5GcmllbmQvU01cXG5GcmlnZ2EvTVxcbkZyaWdpZGFpcmUvTVxcbkZyaXNiZWUvTVxcbkZyaXNjby9NXFxuRnJpc2lhbi9NU1xcbkZyaXRvL01cXG5Gcml0ei9NXFxuRnJvYmlzaGVyL01cXG5Gcm9kby9NXFxuRnJvaXNzYXJ0L01cXG5Gcm9tbS9NXFxuRnJvbmRlL01cXG5Gcm9udGVuYWMvTVxcbkZyb3N0L01cXG5Gcm9zdGJlbHQvTVxcbkZydW56ZS9NXFxuRnJ5L01cXG5GcnllL01cXG5GdWNocy9NXFxuRnVlbnRlcy9NXFxuRnVnZ2VyL01cXG5GdWppL01cXG5GdWppYW4vTVxcbkZ1aml0c3UvTVxcbkZ1aml3YXJhL01cXG5GdWppeWFtYS9NXFxuRnVrdW9rYS9NXFxuRnVrdXlhbWEvTVxcbkZ1bGFuaS9NXFxuRnVsYnJpZ2h0L01cXG5GdWxsZXIvTVxcbkZ1bGxlcnRvbi9NXFxuRnVsdG9uL01cXG5GdW5hZnV0aS9NXFxuRnVuZHkvTVxcbkZ1cmllcy9NXFxuRnVybWFuL01cXG5GdXJ0d2FuZ2xlci9NXFxuRnVzaHVuL01cXG5GdXpob3UvTVxcbkZ1enpidXN0ZXIvTVxcbkcvTU5SQlxcbkdBXFxuR0FPXFxuR0FUVC9NXFxuR0IvTVxcbkdDQy9NXFxuR0RQL01cXG5HRS9NXFxuR0VEXFxuR0hRL01cXG5HSHpcXG5HSVxcbkdJRlxcbkdJR09cXG5HTS9NXFxuR01BVFxcbkdNT1xcbkdNVC9NXFxuR05QL01cXG5HTlUvTVxcbkdPUC9NXFxuR1AvTVxcbkdQQVxcbkdQT1xcbkdQU1xcbkdQVVxcbkdTQVxcbkdURS9NXFxuR1VcXG5HVUkvTVxcbkdhL01cXG5HYWJsZS9NXFxuR2Fib24vTVxcbkdhYm9uZXNlL01cXG5HYWJvcm9uZS9NXFxuR2FicmllbC9NXFxuR2FicmllbGEvTVxcbkdhYnJpZWxsZS9NXFxuR2FjcnV4L01cXG5HYWRzZGVuL01cXG5HYWVhL01cXG5HYWVsL1NNXFxuR2FlbGljL01cXG5HYWdhcmluL01cXG5HYWdlL01cXG5HYWlhL01cXG5HYWlsL01cXG5HYWltYW4vTVxcbkdhaW5lcy9NXFxuR2FpbmVzdmlsbGUvTVxcbkdhaW5zYm9yb3VnaC9NXFxuR2FsYWhhZC9TTVxcbkdhbGFwYWdvcy9NXFxuR2FsYXRlYS9NXFxuR2FsYXRpYS9NXFxuR2FsYXRpYW5zL01cXG5HYWxheHlcXG5HYWxicmFpdGgvTVxcbkdhbGUvTVxcbkdhbGVuL01cXG5HYWxpYmkvTVxcbkdhbGlsZWFuL1NNXFxuR2FsaWxlZS9NXFxuR2FsaWxlby9NXFxuR2FsbC9NXFxuR2FsbGFnaGVyL01cXG5HYWxsZWdvcy9NXFxuR2FsbGljL01cXG5HYWxsaWNpc20vU01cXG5HYWxsby9NXFxuR2FsbG93YXkvTVxcbkdhbGx1cC9NXFxuR2Fsb2lzL01cXG5HYWxzd29ydGh5L01cXG5HYWx2YW5pL01cXG5HYWx2ZXN0b24vTVxcbkdhbWFcXG5HYW1heS9NXFxuR2FtYmlhL01cXG5HYW1iaWFuL1NNXFxuR2FtYmxlL01cXG5HYW1vdy9NXFxuR2FuZGFsZi9NXFxuR2FuZGhpL01cXG5HYW5kaGlhbi9NXFxuR2FuZXNoYS9NXFxuR2FuZ2VzL01cXG5HYW5ndG9rL01cXG5HYW5zdS9NXFxuR2FudHJ5L01cXG5HYW55bWVkZS9NXFxuR2FwL01cXG5HYXJiby9NXFxuR2FyY2lhL01cXG5HYXJkbmVyL01cXG5HYXJldGgvTVxcbkdhcmZpZWxkL01cXG5HYXJmdW5rZWwvTVxcbkdhcmdhbnR1YS9NXFxuR2FyaWJhbGRpL01cXG5HYXJsYW5kL01cXG5HYXJuZXIvTVxcbkdhcnJldHQvTVxcbkdhcnJpY2svTVxcbkdhcnJpc29uL01cXG5HYXJyeS9NXFxuR2FydGgvTVxcbkdhcnZleS9NXFxuR2FyeS9NXFxuR2FyemEvTVxcbkdhc2NvbnkvTVxcbkdhc3Nlci9NXFxuR2FzdG9uaWEvTVxcbkdhc3Ryb2VudGVyb2xvZ3lcXG5HYXRlcy9NXFxuR2F0bGluZy9NXFxuR2F0b3JhZGUvTVxcbkdhdHNieS9NXFxuR2F0dW4vTVxcbkdhdWd1aW4vTVxcbkdhdWwvU01cXG5HYXVsaXNoXFxuR2F1c3MvTVxcbkdhdXNzaWFuL01cXG5HYXV0YW1hL01cXG5HYXV0aWVyL01cXG5HYXZpbi9NXFxuR2F3YWluL01cXG5HYXkvTVxcbkdheWxlL01cXG5HYXphL01cXG5HYXppYW50ZXAvTVxcbkdkL01cXG5HZGFuc2svTVxcbkdlL01cXG5HZWZmZW4vTVxcbkdlaGVubmEvTVxcbkdlaHJpZy9NXFxuR2VpZ2VyL01cXG5HZWxidmllaC9NXFxuR2VsbGVyL01cXG5HZW1pbmkvTVNcXG5HZW4vTVxcbkdlbmEvTVxcbkdlbmFyby9NXFxuR2VuZS9NXFxuR2VuZXNpcy9NXFxuR2VuZXQvTVxcbkdlbmV2YS9NXFxuR2VuZXZpZXZlL01cXG5HZW5naGlzL01cXG5HZW5vYS9TTVxcbkdlbnRvby9NXFxuR2VudHJ5L01cXG5HZW8vTVxcbkdlb2ZmcmV5L01cXG5HZW9yZ2UvTVNcXG5HZW9yZ2V0b3duL01cXG5HZW9yZ2V0dGUvTVxcbkdlb3JnaWEvTVxcbkdlb3JnaWFuL01TXFxuR2VvcmdpbmEvTVxcbkdlci9NXFxuR2VyYWxkL01cXG5HZXJhbGRpbmUvTVxcbkdlcmFyZC9NXFxuR2VyYXJkby9NXFxuR2VyYmVyL01cXG5HZXJlL01cXG5HZXJpdG9sL01cXG5HZXJtYW4vTVNcXG5HZXJtYW5pYy9NXFxuR2VybWFueS9NXFxuR2Vyb25pbW8vTVxcbkdlcnJ5L01cXG5HZXJzaHdpbi9NXFxuR2VydHJ1ZGUvTVxcbkdlc3RhcG8vU01cXG5HZXRoc2VtYW5lL01cXG5HZXR0eS9NXFxuR2V0dHlzYnVyZy9NXFxuR2V3dXJ6dHJhbWluZXIvTVxcbkdoYW5hL01cXG5HaGFuYWlhblxcbkdoYXRzL01cXG5HaGF6dmFuaWQvTVxcbkdoZW50L01cXG5HaGliZWxsaW5lL01cXG5HaWFjb21ldHRpL01cXG5HaWFubmluaS9NXFxuR2lhdXF1ZS9NXFxuR2liYm9uL01cXG5HaWJicy9NXFxuR2licmFsdGFyL01TXFxuR2lic29uL01cXG5HaWRlL01cXG5HaWRlb24vTVxcbkdpZWxndWQvTVxcbkdpZW5haC9NXFxuR2lsL01cXG5HaWxhL01cXG5HaWxiZXJ0L01cXG5HaWxiZXJ0by9NXFxuR2lsY2hyaXN0L01cXG5HaWxkYS9NXFxuR2lsZWFkL01cXG5HaWxlcy9NXFxuR2lsZ2FtZXNoL01cXG5HaWxsL01cXG5HaWxsZXNwaWUvTVxcbkdpbGxldHRlL01cXG5HaWxsaWFtL01cXG5HaWxsaWFuL01cXG5HaWxsaWdhbi9NXFxuR2lsbWFuXFxuR2lsbW9yZS9NXFxuR2lscm95L01cXG5HaW5hL01cXG5HaW5nZXIvTVxcbkdpbmdyaWNoL01cXG5HaW5ueS9NXFxuR2luby9NXFxuR2luc2JlcmcvTVxcbkdpbnNidXJnL01cXG5HaW5zdS9NXFxuR2lvcmdpb25lL01cXG5HaW90dG8vTVxcbkdpb3Zhbm5pL01cXG5HaXJhdWRvdXgvTVxcbkdpc2VsbGUvTVxcbkdpc2gvTVxcbkdpdEh1Yi9NXFxuR2l1bGlhbmkvTVxcbkdpdXNlcHBlL01cXG5HaXphL01cXG5Ha1xcbkdsYWRzdG9uZS9NU1xcbkdsYWR5cy9NXFxuR2xhc2VyL01cXG5HbGFzZ293L01cXG5HbGFzcy9NXFxuR2xhc3RvbmJ1cnkvTVxcbkdsYXN3ZWdpYW4vU01cXG5HbGF4by9NXFxuR2xlYXNvbi9NXFxuR2xlbi9NXFxuR2xlbmRhL01cXG5HbGVuZGFsZVxcbkdsZW5saXZldC9NXFxuR2xlbm4vTVxcbkdsZW5uYS9NXFxuR2xvcmlhL01cXG5HbG91Y2VzdGVyL01cXG5HbG92ZXIvTVxcbkdub3N0aWMvTVxcbkdub3N0aWNpc20vTVxcbkdudVBHXFxuR29hL01cXG5Hb2JpL01cXG5Hb2QvTVxcbkdvZGFyZC9NXFxuR29kZGFyZC9NXFxuR29kZWwvTVxcbkdvZGhlYWQvTVxcbkdvZGl2YS9NXFxuR29kb3QvTVxcbkdvZHNwZWVkL1NNXFxuR29kdGhhYWIvTVxcbkdvZHVub3YvTVxcbkdvZHppbGxhL01cXG5Hb2ViYmVscy9NXFxuR29lcmluZy9NXFxuR29ldGhhbHMvTVxcbkdvZXRoZS9NXFxuR29mZi9NXFxuR29nL01cXG5Hb2dvbC9NXFxuR29pYW5pYS9NXFxuR29sYW4vTVxcbkdvbGNvbmRhL01cXG5Hb2xkYS9NXFxuR29sZGJlcmcvTVxcbkdvbGRlbi9NXFxuR29sZGllL01cXG5Hb2xkaWxvY2tzL01cXG5Hb2xkaW5nL01cXG5Hb2xkbWFuL01cXG5Hb2xkc2Jvcm8vTVxcbkdvbGRzbWl0aC9NXFxuR29sZHdhdGVyL01cXG5Hb2xkd3luL01cXG5Hb2xnaS9NXFxuR29sZ290aGEvTVxcbkdvbGlhdGgvTVxcbkdvbWV6L01cXG5Hb21vcnJhaC9NXFxuR29tcGVycy9NXFxuR29tdWxrYS9NXFxuR29uZHdhbmFsYW5kL01cXG5Hb256YWxlcy9NXFxuR29uemFsZXovTVxcbkdvbnphbG8vTVxcbkdvb2QvTVxcbkdvb2RhbGwvTVxcbkdvb2RlL01cXG5Hb29kbWFuL01cXG5Hb29kcmljaC9NXFxuR29vZHdpbGwvTVxcbkdvb2R3aW4vTVxcbkdvb2R5ZWFyL01cXG5Hb29nbGUvTVxcbkdvb2xhZ29uZy9NXFxuR29waGVyXFxuR29yYmFjaGV2L01cXG5Hb3JkaWFuL01cXG5Hb3JkaW1lci9NXFxuR29yZG9uL01cXG5Hb3JlL01cXG5Hb3Jlbi9NXFxuR29yZXkvTVxcbkdvcmdhcy9NXFxuR29yZ29uL01cXG5Hb3Jnb256b2xhL01cXG5Hb3JreS9NXFxuR29zcGVsL01TXFxuR290ZWJvcmcvTVxcbkdvdGgvTVxcbkdvdGhhbS9NXFxuR290aGljL01TXFxuR290aHNcXG5Hb3VkYS9TTVxcbkdvdWxkL01cXG5Hb3Vub2QvTVxcbkdvdmVybm9yXFxuR295YS9NXFxuR3IvQlxcbkdyYWJsZS9NXFxuR3JhY2NodXMvTVxcbkdyYWNlL01cXG5HcmFjZWxhbmQvTVxcbkdyYWNpZS9NXFxuR3JhY2llbGEvTVxcbkdyYWR5L01cXG5HcmFmZmlhcy9NXFxuR3JhZnRvbi9NXFxuR3JhaGFtL01cXG5HcmFoYW1lL01cXG5HcmFpbC9NXFxuR3JhbW15L01cXG5HcmFtcGlhbnMvTVxcbkdyYW5hZGEvTVxcbkdyYW50L01cXG5HcmFzcy9NXFxuR3JhdmVzL01cXG5HcmF5L01cXG5HcmF5c2xha2UvTVxcbkdyZWNpYW4vTVxcbkdyZWVjZS9NXFxuR3JlZWsvU01cXG5HcmVlbGV5L01cXG5HcmVlbi9TTVxcbkdyZWVuZS9NXFxuR3JlZW5sYW5kL01cXG5HcmVlbmxhbmRpY1xcbkdyZWVucGVhY2UvTVxcbkdyZWVuc2Jvcm8vTVxcbkdyZWVuc2xlZXZlcy9NXFxuR3JlZW5zcGFuL01cXG5HcmVlbnZpbGxlL01cXG5HcmVlbndpY2gvTVxcbkdyZWVyL01cXG5HcmVnL01cXG5HcmVnZy9NXFxuR3JlZ29yaWFuL01cXG5HcmVnb3Jpby9NXFxuR3JlZ29yeS9NXFxuR3JlbmFkYS9NXFxuR3JlbmFkaWFuL01TXFxuR3JlbmFkaW5lcy9NXFxuR3JlbmRlbC9NXFxuR3Jlbm9ibGUvTVxcbkdyZXNoYW0vTVxcbkdyZXRhL01cXG5HcmV0Y2hlbi9NXFxuR3JldGVsL01cXG5HcmV0emt5L01cXG5HcmV5L01cXG5HcmllZy9NXFxuR3JpZmZpbi9NXFxuR3JpZmZpdGgvTVxcbkdyaW1lcy9NXFxuR3JpbW0vTVxcbkdyaW5jaC9NXFxuR3Jpcy9NXFxuR3JvbXlrby9NXFxuR3JvcGl1cy9NXFxuR3Jvc3MvTVxcbkdyb3N6L01cXG5Hcm90aXVzL01cXG5Hcm92ZXIvTVxcbkdyb3pueVxcbkdydW1tYW4vTVxcbkdydW5keS9NXFxuR3J1bmV3YWxkL01cXG5HcnVzL01cXG5HcnV5ZXJlL1NNXFxuR3VhZGFsYWphcmEvTVxcbkd1YWRhbGNhbmFsL01cXG5HdWFkYWxxdWl2aXIvTVxcbkd1YWRhbHVwZS9NXFxuR3VhZGVsb3VwZS9NXFxuR3VhbGxhdGlyaS9NXFxuR3VhbS9NXFxuR3VhbWFuaWFuXFxuR3Vhbmdkb25nL01cXG5HdWFuZ3pob3UvTVxcbkd1YW50YW5hbW8vTVxcbkd1YXJhbmkvTVxcbkd1YXJuaWVyaS9NXFxuR3VhdGVtYWxhL01cXG5HdWF0ZW1hbGFuL01TXFxuR3VheWFtYS9NXFxuR3VheWFxdWlsL01cXG5HdWNjaS9NXFxuR3VlbHBoL01cXG5HdWVybnNleS9NU1xcbkd1ZXJyYS9NXFxuR3VlcnJlcm8vTVxcbkd1ZXZhcmEvTVxcbkd1Z2dlbmhlaW0vTVxcbkd1aWFuYS9NXFxuR3VpZG9cXG5HdWlsbGVybW8vTVxcbkd1aW5lYS9NXFxuR3VpbmVhbi9NU1xcbkd1aW5ldmVyZS9NXFxuR3Vpbm5lc3MvTVxcbkd1aXlhbmcvTVxcbkd1aXpob3UvTVxcbkd1aXpvdC9NXFxuR3VqYXJhdC9NXFxuR3VqYXJhdGkvTVxcbkd1anJhbndhbGEvTVxcbkd1bGZwb3J0L01cXG5HdWxsYWgvTVxcbkd1bGxpdmVyL01cXG5HdW1iZWwvTVxcbkd1bnRoZXIvTVxcbkd1b2ZlbmcvTVxcbkd1cHRhL01cXG5HdXJraGEvTVxcbkd1cy9NXFxuR3VzdGF2L01cXG5HdXN0YXZvL01cXG5HdXN0YXZ1cy9NXFxuR3V0ZW5iZXJnL01cXG5HdXRocmllL01cXG5HdXRpZXJyZXovTVxcbkd1eS9NXFxuR3V5YW5hL01cXG5HdXlhbmVzZS9NXFxuR3V6bWFuL01cXG5Hd2FsaW9yL01cXG5Hd2VuL01cXG5Hd2VuZG9saW5lL01cXG5Hd2VuZG9seW4vTVxcbkd3eW4vTVxcbkd5cHN5L1NNXFxuSC9NXFxuSEJPL01cXG5IQmFzZS9NXFxuSEREXFxuSERNSVxcbkhEVFZcXG5IRi9NXFxuSEhTXFxuSElcXG5ISVYvTVxcbkhNXFxuSE1PL01cXG5ITVNcXG5IT1ZcXG5IUC9NXFxuSFBWXFxuSFEvTVxcbkhSXFxuSFJIXFxuSFNcXG5IU0JDL01cXG5IU1RcXG5IVFxcbkhUTUwvTVxcbkhUVFBcXG5IVUQvTVxcbkhhL01cXG5IYWFzL01cXG5IYWJha2t1ay9NXFxuSGFiZXIvTVxcbkhhZGFyL01cXG5IYWRlcy9NXFxuSGFkb29wL01cXG5IYWRyaWFuL01cXG5IYWZpei9NXFxuSGFnYXIvTVxcbkhhZ2Vyc3Rvd24vTVxcbkhhZ2dhaS9NXFxuSGFnaW9ncmFwaGEvTVxcbkhhZ3VlL01cXG5IYWhuL01cXG5IYWlkYS9TTVxcbkhhaWZhL01cXG5IYWluYW4vTVxcbkhhaXBob25nL01cXG5IYWl0aS9NXFxuSGFpdGlhbi9NU1xcbkhha2thL01cXG5IYWtsdXl0L01cXG5IYWwvU01cXG5IYWxkYW5lL01cXG5IYWxlL01cXG5IYWxlYWthbGEvTVxcbkhhbGV5L01cXG5IYWxpZmF4L01cXG5IYWxsL01cXG5IYWxsZXkvTVxcbkhhbGxpYnVydG9uL01cXG5IYWxsaWUvTVxcbkhhbGxtYXJrL01cXG5IYWxsb3dlZW4vTVNcXG5IYWxsc3RhdHQvTVxcbkhhbG9uL01cXG5IYWxzL01cXG5IYWxzZXkvTVxcbkhhbS9NXFxuSGFtYW4vTVxcbkhhbWJ1cmcvTVNcXG5IYW1odW5nL01cXG5IYW1pbGNhci9NXFxuSGFtaWxsL01cXG5IYW1pbHRvbi9NXFxuSGFtaWx0b25pYW4vTVxcbkhhbWl0aWMvTVxcbkhhbWxldC9NXFxuSGFtbGluL01cXG5IYW1tYXJza2pvbGQvTVxcbkhhbW1lcnN0ZWluL01cXG5IYW1tZXR0L01cXG5IYW1tb25kL01cXG5IYW1tdXJhYmkvTVxcbkhhbXBzaGlyZS9NXFxuSGFtcHRvbi9NXFxuSGFtc3VuL01cXG5IYW4vU01cXG5IYW5jb2NrL01cXG5IYW5kZWwvTVxcbkhhbmR5L01cXG5IYW5leS9NXFxuSGFuZm9yZC9NXFxuSGFuZ3VsL01cXG5IYW5nemhvdS9NXFxuSGFuay9NXFxuSGFubmEvTVxcbkhhbm5haC9NXFxuSGFubmliYWwvTVxcbkhhbm9pL01cXG5IYW5vdmVyL01cXG5IYW5vdmVyaWFuL01cXG5IYW5zL01OXFxuSGFuc2VsL01cXG5IYW5zZW4vTVxcbkhhbnNvbi9NXFxuSGFudWthXFxuSGFudWtrYWgvTVxcbkhhbnVra2Foc1xcbkhhcHNidXJnL01cXG5IYXJhcmUvTVxcbkhhcmJpbi9NXFxuSGFyZGluL01cXG5IYXJkaW5nL01cXG5IYXJkeS9NXFxuSGFyZ3JlYXZlcy9NXFxuSGFybGFuL01cXG5IYXJsZW0vTVxcbkhhcmxlcXVpbi9NXFxuSGFybGV5L01cXG5IYXJsaW5nZW4vTVxcbkhhcmxvdy9NXFxuSGFybW9uL01cXG5IYXJvbGQvTVxcbkhhcnBlci9NXFxuSGFycHkvU01cXG5IYXJyZWxsL01cXG5IYXJyaWV0L01cXG5IYXJyaWV0dC9NXFxuSGFycmluZ3Rvbi9NXFxuSGFycmlzL01cXG5IYXJyaXNidXJnL01cXG5IYXJyaXNvbi9NXFxuSGFycmlzb25idXJnL01cXG5IYXJyb2RzL01cXG5IYXJyeS9NXFxuSGFydC9NXFxuSGFydGUvTVxcbkhhcnRmb3JkL01cXG5IYXJ0bGluZS9NXFxuSGFydG1hbi9NXFxuSGFydmFyZC9NXFxuSGFydmV5L01cXG5IYXNicm8vTVxcbkhhc2lkaW0vTVxcbkhhc2tlbGwvTVxcbkhhc3RpbmdzL01cXG5IYXRmaWVsZC9NXFxuSGF0aGF3YXkvTVxcbkhhdHNoZXB1dC9NXFxuSGF0dGVyYXMvTVxcbkhhdHRpZS9NXFxuSGF0dGllc2J1cmcvTVxcbkhhdXB0bWFubi9NXFxuSGF1c2EvTVxcbkhhdXNkb3JmZi9NXFxuSGF2YW5hL01TXFxuSGF2YXJ0aS9NXFxuSGF2ZWwvTVxcbkhhdm9saW5lL01cXG5IYXdcXG5IYXdhaWkvTVxcbkhhd2FpaWFuL1NNXFxuSGF3a2luZy9NXFxuSGF3a2lucy9NXFxuSGF3a3NcXG5IYXd0aG9ybmUvTVxcbkhheS9TTVxcbkhheWRlbi9NXFxuSGF5ZG4vTVxcbkhheWVrL01cXG5IYXllcy9NXFxuSGF5bmVzL01cXG5IYXlzL01cXG5IYXl3YXJkL01cXG5IYXl3b29kL01cXG5IYXl3b3J0aC9NXFxuSGF6ZWwvTVxcbkhhemxldG9uL01cXG5IYXpsaXR0L01cXG5IZS9NXFxuSGVhZC9NXFxuSGVhcnN0L01cXG5IZWF0aC9NUlxcbkhlYXRoZXIvTVxcbkhlYXZpc2lkZS9NXFxuSGViXFxuSGViZS9NXFxuSGViZWkvTVxcbkhlYmVydC9NXFxuSGVicmFpYy9NXFxuSGVicmFpc20vU01cXG5IZWJyZXcvTVNcXG5IZWJyZXdzL01cXG5IZWJyaWRlcy9NXFxuSGVjYXRlL01cXG5IZWN0b3IvTVxcbkhlY3ViYS9NXFxuSGVlcC9NXFxuSGVmbmVyL01cXG5IZWdlbC9NXFxuSGVnZWxpYW4vTVxcbkhlZ2lyYS9NXFxuSGVpZGVnZ2VyL01cXG5IZWlkZWxiZXJnL01cXG5IZWlkaS9NXFxuSGVpZmV0ei9NXFxuSGVpbG9uZ2ppYW5nL01cXG5IZWltbGljaC9NXFxuSGVpbmUvTVxcbkhlaW5la2VuL01cXG5IZWlubGVpbi9NXFxuSGVpbnJpY2gvTVxcbkhlaW56L01cXG5IZWlzZW5iZXJnL01cXG5IZWlzbWFuL01cXG5IZWxlbi9NXFxuSGVsZW5hL01cXG5IZWxlbmUvTVxcbkhlbGdhL01cXG5IZWxpY29iYWN0ZXJcXG5IZWxpY29uL01cXG5IZWxpb3BvbGlzL01cXG5IZWxpb3MvTVxcbkhlbGxlbmUvU01cXG5IZWxsZW5pYy9NXFxuSGVsbGVuaXNtL01TXFxuSGVsbGVuaXN0XFxuSGVsbGVuaXN0aWMvTVxcbkhlbGxlbml6YXRpb24vTVxcbkhlbGxlbml6ZS9NXFxuSGVsbGVyL01cXG5IZWxsZXNwb250L01cXG5IZWxsbWFuL01cXG5IZWxtaG9sdHovTVxcbkhlbG9pc2UvTVxcbkhlbHNpbmtpL01cXG5IZWx2ZXRpYW5cXG5IZWx2ZXRpdXMvTVxcbkhlbWV0L01cXG5IZW1pbmd3YXkvTVxcbkhlbmFuL01cXG5IZW5jaC9NXFxuSGVuZGVyc29uL01cXG5IZW5kcmljay9NU1xcbkhlbmRyaWNrcy9NXFxuSGVuZHJpeC9NXFxuSGVubGV5L01cXG5IZW5uZXNzeS9NXFxuSGVucmkvTVxcbkhlbnJpZXR0YS9NXFxuSGVucmlrL01cXG5IZW5yeS9NXFxuSGVuc2xleS9NXFxuSGVuc29uL01cXG5IZXBidXJuL01cXG5IZXBoYWVzdHVzL01cXG5IZXBwbGV3aGl0ZS9NXFxuSGVyYS9NXFxuSGVyYWNsZXMvTVxcbkhlcmFjbGl0dXMvTVxcbkhlcmFrbGVzL01cXG5IZXJiYXJ0L01cXG5IZXJiZXJ0L01cXG5IZXJjdWxhbmV1bS9NXFxuSGVyY3VsZWFuXFxuSGVyY3VsZXMvTVxcbkhlcmRlci9NXFxuSGVyZWZvcmQvU01cXG5IZXJlcm8vTVxcbkhlcmliZXJ0by9NXFxuSGVybWFuL01cXG5IZXJtYXBocm9kaXR1cy9NXFxuSGVybWVzL01cXG5IZXJtaW5pYS9NXFxuSGVybWl0YWdlL01cXG5IZXJtaXRlL01cXG5IZXJtb3NpbGxvL01cXG5IZXJuYW5kZXovTVxcbkhlcm9kL01cXG5IZXJvZG90dXMvTVxcbkhlcm9rdS9NXFxuSGVyci9NR1xcbkhlcnJlcmEvTVxcbkhlcnJpY2svTVxcbkhlcnJpbmcvTVxcbkhlcnNjaGVsL01cXG5IZXJzZXkvTVxcbkhlcnNoZWwvTVxcbkhlcnNoZXkvTVxcbkhlcnR6L01cXG5IZXJ0enNwcnVuZy9NXFxuSGVyemVnb3ZpbmEvTVxcbkhlcnpsL01cXG5IZXNodmFuL01cXG5IZXNpb2QvTVxcbkhlc3BlcmlhL01cXG5IZXNwZXJ1cy9NXFxuSGVzcy9NXFxuSGVzc2UvTVxcbkhlc3NpYW4vTVxcbkhlc3Rlci9NXFxuSGVzdG9uL01cXG5IZXR0aWUvTVxcbkhld2l0dC9NXFxuSGV3bGV0dC9NXFxuSGV5ZXJkYWhsL01cXG5IZXl3b29kL01cXG5IZXpib2xsYWgvTVxcbkhlemVraWFoL01cXG5IZi9NXFxuSGcvTVxcbkhpYWxlYWgvTVxcbkhpYXdhdGhhL01cXG5IaWJlcm5pYS9NXFxuSGliZXJuaWFuXFxuSGlja21hbi9NXFxuSGlja29rL01cXG5IaWNrb3J5L01cXG5IaWNrcy9NXFxuSGllcm9ueW11cy9NXFxuSGlnYXNoaW9zYWthXFxuSGlnZ2lucy9NXFxuSGlnaGxhbmRlci9TTVxcbkhpZ2hsYW5kc1xcbkhpZ2huZXNzL01cXG5IaWdodHN0b3duL01cXG5IaWxhcmlvL01cXG5IaWxhcnkvTVxcbkhpbGJlcnQvTVxcbkhpbGRhL01cXG5IaWxkZWJyYW5kL01cXG5IaWxmaWdlci9NXFxuSGlsbC9NXFxuSGlsbGFyeS9NXFxuSGlsbGVsL01cXG5IaWx0b24vTVxcbkhpbWFsYXlhL1NNXFxuSGltYWxheWFuXFxuSGltYWxheWFzL01cXG5IaW1tbGVyL01cXG5IaW5heWFuYS9NXFxuSGluZGVtaXRoL01cXG5IaW5kZW5idXJnL01cXG5IaW5kaS9NXFxuSGluZHUvU01cXG5IaW5kdWlzbS9TTVxcbkhpbmR1c3Rhbi9NXFxuSGluZHVzdGFuaS9TTVxcbkhpbmVzL01cXG5IaW5lc3ZpbGxlL01cXG5IaW50b24vTVxcbkhpcHBhcmNodXMvTVxcbkhpcHBvY3JhdGVzL01cXG5IaXBwb2NyYXRpYy9NXFxuSGlyYW0vTVxcbkhpcm9idW1pL01cXG5IaXJvaGl0by9NXFxuSGlyb3NoaW1hL01cXG5IaXNwYW5pYy9TTVxcbkhpc3BhbmlvbGEvTVxcbkhpc3MvTVxcbkhpdGFjaGkvTVxcbkhpdGNoY29jay9NXFxuSGl0bGVyL01TXFxuSGl0dGl0ZS9TTVxcbkhtb25nL01cXG5Iby9NXFxuSG9iYXJ0L01cXG5Ib2JiZXMvTVxcbkhvYmJzL01cXG5Ib2NrbmV5L01cXG5Ib2RnZS9TTVxcbkhvZGdlcy9NXFxuSG9kZ2tpbi9NXFxuSG9mZi9NXFxuSG9mZmEvTVxcbkhvZmZtYW4vTVxcbkhvZnN0YWR0ZXIvTVxcbkhvZ2FuL01cXG5Ib2dhcnRoL01cXG5Ib2d3YXJ0cy9NXFxuSG9oZW5sb2hlL01cXG5Ib2hlbnN0YXVmZW4vTVxcbkhvaGVuem9sbGVybi9NXFxuSG9oaG90L01cXG5Ib2hva2FtL01cXG5Ib2trYWlkby9NXFxuSG9rdXNhaS9NXFxuSG9sYmVpbi9NXFxuSG9sY29tYi9NXFxuSG9sZGVuL01cXG5Ib2xkZXIvTVxcbkhvbGlkYXkvTVxcbkhvbGluZXNzXFxuSG9sbGFuZC9aU01SXFxuSG9sbGFuZGVyL01cXG5Ib2xsZXJpdGgvTVxcbkhvbGxleS9NXFxuSG9sbGllL01cXG5Ib2xsaXMvTVxcbkhvbGxvd2F5L01cXG5Ib2xseS9NXFxuSG9sbHl3b29kL01cXG5Ib2xtYW4vTVxcbkhvbG1lcy9NXFxuSG9sb2NhdXN0L01cXG5Ib2xvY2VuZS9NXFxuSG9sc3QvTVxcbkhvbHN0ZWluL1NNXFxuSG9sdC9NXFxuSG9tZXIvTVxcbkhvbWVyaWMvTVxcbkhvblxcbkhvbmRhL01cXG5Ib25kdXJhbi9NU1xcbkhvbmR1cmFzL01cXG5Ib25lY2tlci9NXFxuSG9uZXl3ZWxsL01cXG5Ib25nXFxuSG9uaWFyYS9NXFxuSG9ub2x1bHUvTVxcbkhvbm9yYWJsZVxcbkhvbnNodS9NXFxuSG9vZC9NXFxuSG9va2UvUk1cXG5Ib29rZXIvTVxcbkhvb3Blci9NXFxuSG9vc2llci9NU1xcbkhvb3RlcnMvTVxcbkhvb3Zlci9NU1xcbkhvcGUvTVxcbkhvcGV3ZWxsL01cXG5Ib3BpL1NNXFxuSG9wa2lucy9NXFxuSG9wcGVyL01cXG5Ib3JhY2UvTVxcbkhvcmFjaW8vTVxcbkhvcmF0aW8vTVxcbkhvcm1lbC9NXFxuSG9ybXV6L01cXG5Ib3JuL01cXG5Ib3JuYmxvd2VyL01cXG5Ib3JuZS9NXFxuSG9yb3dpdHovTVxcbkhvcnRoeS9NXFxuSG9ydG9uL01cXG5Ib3J1cy9NXFxuSG9zZWEvTVxcbkhvc3QvU01cXG5Ib3Rwb2ludC9NXFxuSG90dGVudG90L1NNXFxuSG91ZGluaS9NXFxuSG91bWEvTVxcbkhvdXNlL01cXG5Ib3VzbWFuL01cXG5Ib3VzdG9uL01cXG5Ib3V5aG5obm0vTVxcbkhvdmhhbmVzcy9NXFxuSG93YXJkL01cXG5Ib3dlL01cXG5Ib3dlbGwvTVNcXG5Ib3dlbGxzL01cXG5Ib3dyYWhcXG5Ib3lsZS9NXFxuSHJvdGhnYXIvTVxcbkh0c1xcbkh1YW5nL01cXG5IdWJiYXJkL01cXG5IdWJibGUvTVxcbkh1YmVpL01cXG5IdWJlci9NXFxuSHViZXJ0L01cXG5IdWNrL01cXG5IdWRkZXJzZmllbGRcXG5IdWRzb24vTVxcbkh1ZXJ0YS9NXFxuSHVleS9NXFxuSHVmZi9NXFxuSHVmZm1hbi9NXFxuSHVnZ2lucy9NXFxuSHVnaC9NU1xcbkh1Z2hlcy9NXFxuSHVnby9NXFxuSHVndWVub3QvTVNcXG5IdWkvTVxcbkh1aXR6aWxvcG90Y2hsaS9NXFxuSHVsbC9NXFxuSHVtYmVydG8vTVxcbkh1bWJvbGR0L01cXG5IdW1lL01cXG5IdW1tZWwvTVxcbkh1bW1lci9NXFxuSHVtcGhyZXkvU01cXG5IdW12ZWUvTVxcbkh1bi9TTVxcbkh1bmFuL01cXG5IdW5nL01cXG5IdW5nYXJpYW4vU01cXG5IdW5nYXJ5L01cXG5IdW5zcGVsbC9NXFxuSHVudC9NUlxcbkh1bnRlci9NXFxuSHVudGluZ3Rvbi9NXFxuSHVudGxleS9NXFxuSHVudHN2aWxsZS9NXFxuSHVyZC9NXFxuSHVybGV5L01cXG5IdXJvbi9NXFxuSHVyc3QvTVxcbkh1cy9NXFxuSHVzc2Vpbi9NXFxuSHVzc2VybC9NXFxuSHVzc2l0ZS9NXFxuSHVzdG9uL01cXG5IdXRjaGluc29uL01cXG5IdXR0b24vTVxcbkh1dHUvTVxcbkh1eGxleS9NXFxuSHV5Z2Vucy9NXFxuSHlhZGVzL01cXG5IeWRlL01cXG5IeWRlcmFiYWQvTVxcbkh5ZHJhL01cXG5IeW1lbi9NXFxuSHlwZXJpb24vTVxcbkh5dW5kYWkvTVxcbkh6L01cXG5JJ2RcXG5JJ2xsXFxuSSdtXFxuSSd2ZVxcbkkvTVxcbklBXFxuSUJNL01cXG5JQ0JNL1NNXFxuSUNDXFxuSUNVXFxuSUQvU01cXG5JREVcXG5JRVxcbklFRFxcbklFRUVcXG5JS0VBL01cXG5JTFxcbklNRi9NXFxuSU1IT1xcbklNTlNIT1xcbklNT1xcbklOXFxuSU5HL01cXG5JTlJJXFxuSU5TXFxuSU9VL01cXG5JUFxcbklQQVxcbklQT1xcbklRL01cXG5JUkEvU01cXG5JUkNcXG5JUlMvTVxcbklTQk5cXG5JU0lTXFxuSVNPL01cXG5JU1BcXG5JU1NcXG5JVFxcbklVRFxcbklWL1NNXFxuSVZGXFxuSWFcXG5JYWNjb2NhL01cXG5JYWdvL01cXG5JYW4vTVxcbklhcGV0dXMvTVxcbkliYWRhbi9NXFxuSWJlcmlhL01cXG5JYmVyaWFuL01cXG5JYml6YS9NXFxuSWJsaXMvTVxcbkliby9NXFxuSWJzZW4vTVxcbkljYWhuL01cXG5JY2FydXMvTVxcbkljZVxcbkljZWxhbmQvTVJaXFxuSWNlbGFuZGVyL01cXG5JY2VsYW5kaWMvTVxcbklkYS9NXFxuSWRhaG8vU01cXG5JZGFob2FuL01TXFxuSWRhaG9lc1xcbklleWFzdS9NXFxuSWduYWNpby9NXFxuSWduYXRpdXMvTVxcbklnb3IvTVxcbklndWFzc3UvTVxcbklqc3NlbG1lZXIvTVxcbklrZS9NXFxuSWtobmF0b24vTVxcbklsYS9NXFxuSWxlbmUvTVxcbklsaWFkL1NNXFxuSWxsXFxuSWxsaW5vaXMvTVxcbklsbGlub2lzYW4vTVNcXG5JbGx1bWluYXRpL01cXG5JbHl1c2hpbi9NXFxuSW1lbGRhL01cXG5JbWhvdGVwL01cXG5JbW9kaXVtL01cXG5JbW9nZW5lL01cXG5JbXVzL01cXG5Jbi9NXFxuSW5hL01cXG5JbmNcXG5JbmNhL1NNXFxuSW5jaG9uL01cXG5JbmNvcnBvcmF0ZWRcXG5JbmRcXG5JbmRlcGVuZGVuY2UvTVxcbkluZGlhL01cXG5JbmRpYW4vTVNcXG5JbmRpYW5hL01cXG5JbmRpYW5hbi9TTVxcbkluZGlhbmFwb2xpcy9NXFxuSW5kaWFuaWFuXFxuSW5kaWVzL01cXG5JbmRpby9NXFxuSW5kaXJhL01cXG5JbmRvY2hpbmEvTVxcbkluZG9jaGluZXNlL01cXG5JbmRvbmVzaWEvTVxcbkluZG9uZXNpYW4vU01cXG5JbmRvcmUvTVxcbkluZHJhL01cXG5JbmR1cy9NXFxuSW5keS9TTVxcbkluZXMvTVxcbkluZXovTVxcbkluZ2UvTVxcbkluZ2xld29vZFxcbkluZ3JhbS9NXFxuSW5ncmVzL01cXG5JbmdyaWQvTVxcbklubm9jZW50L01cXG5Jbm5zYnJ1Y2tcXG5Jbm9udS9NXFxuSW5xdWlzaXRpb24vTVxcbkluc3RcXG5JbnN0YWdyYW0vTVxcbkluc3RhbWF0aWMvTVxcbkludGVsL01cXG5JbnRlbHNhdC9NXFxuSW50ZXJuYXRpb25hbGUvTVxcbkludGVybmV0L1NNXFxuSW50ZXJwb2wvTVxcbkludWl0L01TXFxuSW51a3RpdHV0L01cXG5JbnZhci9NXFxuSW8vTVxcbklvbmVzY28vTVxcbklvbmlhbi9NU1xcbklvbmljL1NNXFxuSW93YS9TTVxcbklvd2FuL01TXFxuSXBoaWdlbmlhL01cXG5JcHN3aWNoXFxuSXFhbHVpdC9NXFxuSXFiYWwvTVxcbklxdWl0b3MvTVxcbklyL01cXG5JcmEvTVxcbklyYW4vTVxcbklyYW5pYW4vU01cXG5JcmFxL01cXG5JcmFxaS9NU1xcbklyZWxhbmQvTVxcbklyZW5lL01cXG5JcmlzL01cXG5JcmlzaC9NUlxcbklyaXNobWFuL01cXG5JcmlzaG1lbi9NXFxuSXJpc2h3b21hbi9NXFxuSXJpc2h3b21lbi9NXFxuSXJrdXRzay9NXFxuSXJtYS9NXFxuSXJvcXVvaWFuL1NNXFxuSXJvcXVvaXMvTVxcbklycmF3YWRkeS9NXFxuSXJ0aXNoL01cXG5JcnZpbi9NXFxuSXJ2aW5lL01cXG5JcnZpbmcvTVxcbklyd2luL01cXG5Jc2FhYy9NXFxuSXNhYmVsL01cXG5Jc2FiZWxhL01cXG5Jc2FiZWxsYS9NXFxuSXNhYmVsbGUvTVxcbklzYWlhaC9NXFxuSXNjYXJpb3QvTVxcbklzZmFoYW4vTVxcbklzaGVyd29vZC9NXFxuSXNoaW0vTVxcbklzaG1hZWwvTVxcbklzaHRhci9NXFxuSXNpYWgvTVxcbklzaWRyby9NXFxuSXNpcy9NXFxuSXNsYW0vTVNcXG5Jc2xhbWFiYWQvTVxcbklzbGFtaWMvTVxcbklzbGFtaXNtL01cXG5Jc2xhbWlzdC9NXFxuSXNsYW1vcGhvYmlhXFxuSXNsYW1vcGhvYmljXFxuSXNtYWVsL01cXG5Jc21haWwvTVxcbklzb2xkZS9NXFxuSXNwZWxsL01cXG5Jc3JhZWwvU01cXG5Jc3JhZWxpL1NNXFxuSXNyYWVsaXRlL01cXG5Jc3NhYy9NXFxuSXNzYWNoYXIvTVxcbklzdGFuYnVsL01cXG5Jc3V6dS9NXFxuSXRcXG5JdGFpcHUvTVxcbkl0YWxcXG5JdGFsaWFuL1NNXFxuSXRhbGlhbmF0ZVxcbkl0YWx5L01cXG5JdGFzY2EvTVxcbkl0aGFjYS9NXFxuSXRoYWNhbi9NXFxuSXRvL01cXG5JdmEvTVxcbkl2YW4vTVxcbkl2YW5ob2UvTVxcbkl2ZXMvTVxcbkl2b3JpYW5cXG5Jdm9yeS9NXFxuSXZ5L01cXG5JeWFyL01cXG5JemFhay9NXFxuSXphbmFnaS9NXFxuSXphbmFtaS9NXFxuSXpoZXZzay9NXFxuSXptaXIvTVxcbkl6b2QvTVxcbkl6dmVzdGlhL01cXG5KL01EXFxuSkNTXFxuSkRcXG5KRksvTVxcbkpQXFxuSlBFR1xcbkpWXFxuSmFjay9NXFxuSmFja2llL01cXG5KYWNrbHluL01cXG5KYWNrc29uL01cXG5KYWNrc29uaWFuL01cXG5KYWNrc29udmlsbGUvTVxcbkphY2t5L01cXG5KYWNseW4vTVxcbkphY29iL1NNXFxuSmFjb2JlYW4vTVxcbkphY29iaS9NXFxuSmFjb2Jpbi9NXFxuSmFjb2JpdGUvTVxcbkphY29icy9NXFxuSmFjb2Jzb24vTVxcbkphY3F1YXJkL01cXG5KYWNxdWVsaW5lL01cXG5KYWNxdWVseW4vTVxcbkphY3F1ZXMvTVxcbkphY3V6emkvTVxcbkphZ2dlci9NXFxuSmFnaWVsbG9uL01cXG5KYWd1YXIvTVxcbkphaGFuZ2lyL01cXG5KYWltZS9NXFxuSmFpbi9NXFxuSmFpbmlzbS9NXFxuSmFpcHVyL01cXG5KYWthcnRhL01cXG5KYWtlL01cXG5KYW1hYWwvTVxcbkphbWFpY2EvTVxcbkphbWFpY2FuL1NNXFxuSmFtYWwvTVxcbkphbWFyL01cXG5KYW1lL1NNXFxuSmFtZWwvTVxcbkphbWVzL01cXG5KYW1lc3Rvd24vTVxcbkphbWkvTVxcbkphbWllL01cXG5KYW4vTVxcbkphbmEvTVxcbkphbmFjZWsvTVxcbkphbmUvTVxcbkphbmVsbC9NXFxuSmFuZWxsZS9NXFxuSmFuZXN2aWxsZS9NXFxuSmFuZXQvTVxcbkphbmV0dGUvTVxcbkphbmljZS9NXFxuSmFuaWUvTVxcbkphbmluZS9NXFxuSmFuaXMvTVxcbkphbmlzc2FyeS9NXFxuSmFuamF3ZWVkL01cXG5KYW5uYS9NXFxuSmFubmllL01cXG5KYW5zZW4vTVxcbkphbnNlbmlzdC9NXFxuSmFudWFyeS9TTVxcbkphbnVzL01cXG5KYXAvU01cXG5KYXBhbi9NXFxuSmFwYW5lc2UvTVNcXG5KYXB1cmEvTVxcbkphcmVkL01cXG5KYXJsc2JlcmcvTVxcbkphcnJlZC9NXFxuSmFycmV0dC9NXFxuSmFycm9kL01cXG5KYXJ2aXMvTVxcbkphc21pbmUvTVxcbkphc29uL01cXG5KYXNwZXIvTVxcbkphdGFrYS9NXFxuSmF2YS9TTVxcbkphdmFTY3JpcHQvTVxcbkphdmFuZXNlL01cXG5KYXZpZXIvTVxcbkpheGFydGVzL01cXG5KYXkvTVxcbkpheWFwdXJhL01cXG5KYXlhd2FyZGVuZS9NXFxuSmF5Y2VlL01TXFxuSmF5Y2Vlcy9NXFxuSmF5bmUvTVxcbkpheXNvbi9NXFxuSmVhbi9NXFxuSmVhbmV0dGUvTVxcbkplYW5pZS9NXFxuSmVhbmluZS9NXFxuSmVhbm5lL01cXG5KZWFubmV0dGUvTVxcbkplYW5uaWUvTVxcbkplYW5uaW5lL01cXG5KZWQvTVxcbkplZGkvTVxcbkplZXAvTVxcbkplZXZlcy9NXFxuSmVmZi9NXFxuSmVmZmVyZXkvTVxcbkplZmZlcnNvbi9NXFxuSmVmZmVyc29uaWFuL01cXG5KZWZmZXJ5L01cXG5KZWZmcmV5L01cXG5KZWZmcnkvTVxcbkplaG9zaGFwaGF0L01cXG5KZWhvdmFoL01cXG5KZWt5bGwvTVxcbkplbmlmZXIvTVxcbkplbmtpbnMvTVxcbkplbm5hL01cXG5KZW5uZXIvTVxcbkplbm5pZS9NXFxuSmVubmlmZXIvTVxcbkplbm5pbmdzL01cXG5KZW5ueS9NXFxuSmVuc2VuL01cXG5KZXBodGhhaC9NXFxuSmVyYWxkL01cXG5KZXJlbWlhaC9NXFxuSmVyZW1pYWhzXFxuSmVyZW15L01cXG5KZXJpL01cXG5KZXJpY2hvL01cXG5KZXJtYWluZS9NXFxuSmVyb2JvYW0vTVxcbkplcm9sZC9NXFxuSmVyb21lL01cXG5KZXJyaS9NXFxuSmVycm9kL01cXG5KZXJyb2xkL01cXG5KZXJyeS9NXFxuSmVyc2V5L01TXFxuSmVydXNhbGVtL01cXG5KZXNzL01cXG5KZXNzZS9NXFxuSmVzc2ljYS9NXFxuSmVzc2llL01cXG5KZXN1aXQvTVNcXG5KZXN1cy9NXFxuSmV0d2F5L01cXG5KZXcvU01cXG5KZXdlbC9NXFxuSmV3ZWxsL01cXG5KZXdlc3MvTVNcXG5KZXdpc2gvUE1cXG5KZXdyeS9NXFxuSmV6ZWJlbC9TTVxcbkppYW5nc3UvTVxcbkppYW5neGkvTVxcbkppZGRhL01cXG5KaWxpbi9NXFxuSmlsbC9NXFxuSmlsbGlhbi9NXFxuSmltL01cXG5KaW1lbmV6L01cXG5KaW1taWUvTVxcbkppbW15L01cXG5KaW5hbi9NXFxuSmlubmFoL01cXG5KaW5ueS9NXFxuSml2YXJvL01cXG5Kby9NXFxuSm9hbi9NXFxuSm9hbm4vTVxcbkpvYW5uYS9NXFxuSm9hbm5lL01cXG5Kb2FxdWluL01cXG5Kb2IvU01cXG5Kb2JzL01cXG5Kb2Nhc3RhL01cXG5Kb2NlbHluL01cXG5Kb2NrL01cXG5Kb2NrZXkvTVxcbkpvZGkvTVxcbkpvZGllL01cXG5Kb2R5L01cXG5Kb2UvTVxcbkpvZWwvTVxcbkpvZXkvTVxcbkpvZ2pha2FydGEvTVxcbkpvaGFubi9NXFxuSm9oYW5uYS9NXFxuSm9oYW5uZXMvTVxcbkpvaGFubmVzYnVyZy9NXFxuSm9obi9TTVxcbkpvaG5hdGhhbi9NXFxuSm9obmF0aG9uL01cXG5Kb2huaWUvTVxcbkpvaG5uaWUvTVxcbkpvaG5ueS9NXFxuSm9obnMvTVxcbkpvaG5zb24vTVxcbkpvaG5zdG9uL01cXG5Kb2huc3Rvd24vTVxcbkpvbGVuZS9NXFxuSm9sc29uL01cXG5Kb24vTVxcbkpvbmFoL01cXG5Kb25haHNcXG5Kb25hcy9NXFxuSm9uYXRoYW4vTVxcbkpvbmF0aG9uL01cXG5Kb25lcy9NXFxuSm9uZXNib3JvL01cXG5Kb25pL01cXG5Kb25zb24vTVxcbkpvcGxpbi9NXFxuSm9yZGFuL01cXG5Kb3JkYW5pYW4vTVNcXG5Kb3JnZS9NXFxuSm9zZS9NXFxuSm9zZWYvTVxcbkpvc2VmYS9NXFxuSm9zZWZpbmEvTVxcbkpvc2VwaC9NXFxuSm9zZXBoaW5lL01cXG5Kb3NlcGhzXFxuSm9zZXBoc29uL01cXG5Kb3NlcGh1cy9NXFxuSm9zaC9NXFxuSm9zaHVhL01cXG5Kb3NpYWgvTVxcbkpvc2llL01cXG5Kb3N1ZS9NXFxuSm91bGUvTVxcbkpvdmUvTVxcbkpvdmlhbi9NXFxuSm95L01cXG5Kb3ljZS9NXFxuSm95Y2Vhbi9NXFxuSm95bmVyL01cXG5KcG5cXG5Kci9NXFxuSnVhbi9NXFxuSnVhbmEvTVxcbkp1YW5pdGEvTVxcbkp1YXJlei9NXFxuSnViYWwvTVxcbkp1ZGFlb1xcbkp1ZGFoL01cXG5KdWRhaWNcXG5KdWRhaWNhbFxcbkp1ZGFpc20vTVNcXG5KdWRhcy9NU1xcbkp1ZGQvTVxcbkp1ZGUvTVxcbkp1ZGVhL01cXG5KdWRnZXNcXG5KdWRpdGgvTVxcbkp1ZHNvbi9NXFxuSnVkeS9NXFxuSnVnZ2VybmF1dC9NXFxuSnVsXFxuSnVsZXMvTVxcbkp1bGlhL01cXG5KdWxpYW4vTVxcbkp1bGlhbmEvTVxcbkp1bGlhbm5lL01cXG5KdWxpZS9NXFxuSnVsaWV0L01cXG5KdWxpZXR0ZS9NXFxuSnVsaW8vTVxcbkp1bGl1cy9NXFxuSnVsbGlhcmQvTVxcbkp1bHkvU01cXG5KdW4vTVxcbkp1bmUvU01cXG5KdW5lYXUvTVxcbkp1bmcvTVxcbkp1bmdmcmF1L01cXG5KdW5naWFuL01cXG5KdW5pb3IvU01cXG5KdW5rZXIvU01cXG5KdW5vL01cXG5KdXBpdGVyL01cXG5KdXJhc3NpYy9NXFxuSnVydWEvTVxcbkp1c3RpY2UvTVxcbkp1c3Rpbi9NXFxuSnVzdGluZS9NXFxuSnVzdGluaWFuL01cXG5KdXRsYW5kL01cXG5KdXZlbmFsL01cXG5LL1NNTkdKXFxuS0IvTVxcbktDXFxuS0ZDL01cXG5LR0IvTVxcbktJQVxcbktLSy9NXFxuS08vTVxcbktQXFxuS1NcXG5LWVxcbkthYWJhL01cXG5LYWJ1bC9NXFxuS2Fma2EvTVxcbkthZmthZXNxdWUvTVxcbkthZ29zaGltYS9NXFxuS2FobHVhL01cXG5LYWh1bHVpL01cXG5LYWlmZW5nL01cXG5LYWlsdWEvTVxcbkthaXNlci9NU1xcbkthaXRsaW4vTVxcbkthbGFoYXJpL01cXG5LYWxhbWF6b28vTVxcbkthbGFzaG5pa292L01cXG5LYWxiL01cXG5LYWxldmFsYS9NXFxuS2FsZ29vcmxpZS9NXFxuS2FsaS9NXFxuS2FsbXlrL01cXG5LYW1hL01cXG5LYW1jaGF0a2EvTVxcbkthbWVoYW1laGEvTVxcbkthbXBhbGEvTVxcbkthbXB1Y2hlYS9NXFxuS2FuL1NNXFxuS2FuY2hlbmp1bmdhL01cXG5LYW5kYWhhci9NXFxuS2FuZGluc2t5L01cXG5LYW5lL01cXG5LYW5lb2hlL01cXG5LYW5rYWtlZS9NXFxuS2FubmFkYS9NXFxuS2Fuby9NXFxuS2FucHVyL01cXG5LYW5zYW4vTVNcXG5LYW5zYXMvTVxcbkthbnQvTVxcbkthbnRpYW4vTVxcbkthb2hzaXVuZy9NXFxuS2Fwb3NpL01cXG5LYXJhL01cXG5LYXJhY2hpL01cXG5LYXJhZ2FuZGEvTVxcbkthcmFrb3J1bS9NXFxuS2FyYW1hem92L01cXG5LYXJlZW0vTVxcbkthcmVuL01cXG5LYXJlbmluYS9NXFxuS2FyaS9NXFxuS2FyaW4vTVxcbkthcmluYS9NXFxuS2FybC9NXFxuS2FybGEvTVxcbkthcmxvZmYvTVxcbkthcm8vTVxcbkthcm9sL01cXG5LYXJyb28vTVxcbkthcnluL01cXG5LYXNhaS9NXFxuS2FzZXkvTVxcbkthc2htaXIvU01cXG5LYXNwYXJvdi9NXFxuS2F0ZS9NXFxuS2F0ZWx5bi9NXFxuS2F0aGFyaW5lL01cXG5LYXRoZXJpbmUvTVxcbkthdGhlcnluL01cXG5LYXRoaWF3YXIvTVxcbkthdGhpZS9NXFxuS2F0aGxlZW4vTVxcbkthdGhtYW5kdS9NXFxuS2F0aHJpbmUvTVxcbkthdGhyeW4vTVxcbkthdGh5L01cXG5LYXRpZS9NXFxuS2F0aW5hL01cXG5LYXRtYWkvTVxcbkthdG93aWNlL01cXG5LYXRyaW5hL01cXG5LYXR5L01cXG5LYXVhaS9NXFxuS2F1Zm1hbi9NXFxuS2F1bmFzL01cXG5LYXVuZGEvTVxcbkthd2FiYXRhL01cXG5LYXdhc2FraS9NXFxuS2F5L01cXG5LYXllL01cXG5LYXlsYS9NXFxuS2F6YWtoL01cXG5LYXpha2hzXFxuS2F6YWtoc3Rhbi9NXFxuS2F6YW4vTVxcbkthemFudHpha2lzL01cXG5LYi9NXFxuS2VhdG9uL01cXG5LZWF0cy9NXFxuS2Vjay9NXFxuS2VlbmFuL01cXG5LZWV3YXRpbi9NXFxuS2VpbGxvci9NXFxuS2Vpc2hhL01cXG5LZWl0aC9NXFxuS2VsbGVyL01cXG5LZWxsZXkvTVxcbktlbGxpL01cXG5LZWxsaWUvTVxcbktlbGxvZ2cvTVxcbktlbGx5L01cXG5LZWxzZXkvTVxcbktlbHZpbi9NXFxuS2VtZXJvdm8vTVxcbktlbXAvTVxcbktlbXBpcy9NXFxuS2VuL01cXG5LZW5kYWxsL01cXG5LZW5kcmEvTVxcbktlbmRyaWNrL01cXG5LZW5tb3JlL01cXG5LZW5uYW4vTVxcbktlbm5lZHkvTVxcbktlbm5ldGgvTVxcbktlbm5ld2ljay9NXFxuS2Vubml0aC9NXFxuS2VubnkvTVxcbktlbm9zaGEvTVxcbktlbnQvTVxcbktlbnRvbi9NXFxuS2VudHVja2lhbi9NU1xcbktlbnR1Y2t5L01cXG5LZW55YS9NXFxuS2VueWFuL1NNXFxuS2VueWF0dGEvTVxcbktlbnlvbi9NXFxuS2VvZ2gvTVxcbktlb2t1ay9NXFxuS2VwbGVyL01cXG5LZXJlbnNreS9NXFxuS2VyaS9NXFxuS2VybWl0L01cXG5LZXJuL01cXG5LZXJvdWFjL01cXG5LZXJyL01cXG5LZXJyaS9NXFxuS2VycnkvTVxcbktldHRlcmluZy9NXFxuS2V2ZW4vTVxcbktldmluL01cXG5LZXZsYXIvTVxcbktldm9ya2lhbi9NXFxuS2V3cGllL01cXG5LZXkvTVxcbktleW5lcy9NXFxuS2V5bmVzaWFuL01cXG5LaGFiYXJvdnNrL01cXG5LaGFjaGF0dXJpYW4vTVxcbktoYWxpZC9NXFxuS2hhbi9NXFxuS2hhcmtvdi9NXFxuS2hhcnRvdW0vTVxcbktoYXl5YW0vTVxcbktoYXphci9NXFxuS2htZXIvTVxcbktob2lraG9pL01cXG5LaG9pc2FuL01cXG5LaG9tZWluaS9NXFxuS2hvcmFuYS9NXFxuS2hydXNoY2hldi9NXFxuS2h1ZnUvTVxcbktodWxuYS9NXFxuS2h3YXJpem1pL01cXG5LaHliZXIvTVxcbktpY2thcG9vL01cXG5LaWRkL01cXG5LaWVsL01cXG5LaWVya2VnYWFyZC9NXFxuS2lldGgvTVxcbktpZXYvTVxcbktpZ2FsaS9NXFxuS2lrdXl1L01cXG5LaWxhdWVhL01cXG5LaWxpbWFuamFyby9NXFxuS2lsbGVlbi9NXFxuS2lscm95L01cXG5LaW0vTVxcbktpbWJlcmxleS9NXFxuS2ltYmVybHkvTVxcbktpbmcvTVxcbktpbmdzcG9ydC9NXFxuS2luZ3N0b24vTVxcbktpbmdzdG93bi9NXFxuS2lua28nc1xcbktpbm5leS9NXFxuS2luc2V5L01cXG5LaW5zaGFzYS9NXFxuS2lvd2EvTVNcXG5LaXAvTVxcbktpcGxpbmcvTVxcbktpcmJ5L01cXG5LaXJjaGhvZmYvTVxcbktpcmNobmVyL01cXG5LaXJnaGlzdGFuL01cXG5LaXJnaGl6L01cXG5LaXJnaGl6aWEvTVxcbktpcmliYXRpL01cXG5LaXJpbnlhZ2EvTVxcbktpcmsvTVxcbktpcmtsYW5kL01cXG5LaXJrcGF0cmljay9NXFxuS2lyb3YvTVxcbktpcnN0ZW4vTVxcbktpc2FuZ2FuaS9NXFxuS2lzaGluZXYvTVxcbktpc2xldi9NXFxuS2lzc2ltbWVlL01cXG5LaXNzaW5nZXIvTVxcbktpdC9NXFxuS2l0YWt5dXNodS9NXFxuS2l0Y2hlbmVyL01cXG5LaXR0eS9NXFxuS2l3YW5pcy9NXFxuS2xhbi9NXFxuS2xhbnNtYW4vTVxcbktsYXVzL01cXG5LbGVlL01cXG5LbGVlbmV4L01TXFxuS2xlaW4vTVxcbktsaW10L01cXG5LbGluZS9NXFxuS2xpbmdvbi9NXFxuS2xvbmRpa2UvTVNcXG5LbWFydC9NXFxuS25hcHAvTVxcbktuZXNzZXQvTVxcbktuZ3dhcnJleWUvTVxcbktuaWNrZXJib2NrZXIvTVxcbktuaWV2ZWwvTVxcbktuaWdodC9NXFxuS25vcGYvTVxcbktub3Nzb3MvTVxcbktub3dsZXMvTVxcbktub3gvTVxcbktub3h2aWxsZS9NXFxuS251ZHNlbi9NXFxuS251dGgvTVxcbktudXRoc1xcbktvYmUvTVxcbktvY2gvTVxcbktvY2hhYi9NXFxuS29kYWNocm9tZS9NXFxuS29kYWsvTVxcbktvZGFseS9NXFxuS29kaWFrL01cXG5Lb2VzdGxlci9NXFxuS29oaW5vb3IvTVxcbktvaGwvTVxcbktvaXp1bWkvTVxcbktvamFrL01cXG5Lb2tvbW8vTVxcbktvbHltYS9NXFxuS29tbXVuaXptYS9NXFxuS29uZy9NXFxuS29uZ28vTVxcbktvbnJhZC9NXFxuS29vbnR6L01cXG5Lb3BwZWwvTVxcbktvcmVhL01cXG5Lb3JlYW4vU01cXG5Lb3JuYmVyZy9NXFxuS29yeS9NXFxuS29yenlic2tpL01cXG5Lb3NjaXVza28vTVxcbktvc3N1dGgvTVxcbktvc3lnaW4vTVxcbktvdGxpbi9NXFxuS291ZmF4L01cXG5Lb3dsb29uL01cXG5Lci9NXFxuS3JhZnQvTVxcbktyYWthdG9hL01cXG5LcmFrb3cvTVxcbktyYW1lci9NXFxuS3Jhc25vZGFyL01cXG5LcmFzbm95YXJzay9NXFxuS3JlYnMvTVxcbktyZW1saW4vTVxcbktyZW1saW5vbG9naXN0XFxuS3JlbWxpbm9sb2d5XFxuS3Jlc2dlL01cXG5LcmluZ2xlL01cXG5LcmlzL01cXG5LcmlzaG5hL01cXG5LcmlzaG5hbXVydGkvTVxcbktyaXN0YS9NXFxuS3Jpc3Rlbi9NXFxuS3Jpc3RpL01cXG5LcmlzdGllL01cXG5LcmlzdGluL01cXG5LcmlzdGluYS9NXFxuS3Jpc3RpbmUvTVxcbktyaXN0b3BoZXIvTVxcbktyaXN0eS9NXFxuS3JvYy9NXFxuS3JvZ2VyL01cXG5Lcm9uZWNrZXIvTVxcbktyb3BvdGtpbi9NXFxuS3J1Z2VyL01cXG5LcnVnZXJyYW5kL01cXG5LcnVwcC9NXFxuS3J5c3RhbC9NXFxuS3NoYXRyaXlhL01cXG5LdWJsYWkvTVxcbkt1YnJpY2svTVxcbkt1aG4vTVxcbkt1aWJ5c2hldi9NXFxuS3VsdGh1bW0vTVxcbkt1bm1pbmcvTVxcbkt1b21pbnRhbmcvTVxcbkt1cmQvTVxcbkt1cmRpc2gvTVxcbkt1cmRpc3Rhbi9NXFxuS3Vyb3Nhd2EvTVxcbkt1cnQvTVxcbkt1cnRpcy9NXFxuS3VzY2gvTVxcbkt1dHV6b3YvTVxcbkt1d2FpdC9NXFxuS3V3YWl0aS9TTVxcbkt1em5ldHMvTVxcbkt1em5ldHNrL01cXG5Ld2FraXV0bC9NXFxuS3dhbi9NXFxuS3dhbmdqdS9NXFxuS3dhbnphYS9NU1xcbkt5L01IXFxuS3lsZS9NXFxuS3lvdG8vTVxcbkt5cmd5enN0YW4vTVxcbkt5dXNodS9NXFxuTCdBbW91ci9NXFxuTCdFbmZhbnRcXG5MJ09yZWFsL01cXG5MJ091dmVydHVyZS9NXFxuTC9NTlxcbkxBXFxuTEFOL01cXG5MQkovTVxcbkxDXFxuTENEL01cXG5MQ01cXG5MRENcXG5MRUQvTVxcbkxHL01cXG5MR0JUXFxuTElGT1xcbkxMXFxuTExCL01cXG5MTEQvTVxcbkxOR1xcbkxPR09cXG5MUC9NXFxuTFBHXFxuTFBOL1NNXFxuTFNBVFxcbkxTRC9NXFxuTFZOXFxuTGEvU01cXG5MYWJcXG5MYWJhbi9NXFxuTGFicmFkb3IvU01cXG5MYWJyYWRvcmVhblxcbkxhY2V5L01cXG5MYWNoZXNpcy9NXFxuTGFjdG9iYWNpbGx1c1xcbkxhY3kvTVxcbkxhZG9nYS9NXFxuTGFkb25uYS9NXFxuTGFkeS9NXFxuTGFkeXNoaXAvTVNcXG5MYWZheWV0dGUvTVxcbkxhZml0dGUvTVxcbkxhZ29zL01cXG5MYWdyYW5nZS9NXFxuTGFncmFuZ2lhbi9NXFxuTGFob3JlL01cXG5MYWl1cy9NXFxuTGFqb3MvTVxcbkxha2Vpc2hhL01cXG5MYWtlbGFuZC9NXFxuTGFrZXdvb2RcXG5MYWtpc2hhL01cXG5MYWtvdGEvTVxcbkxha3NobWkvTVxcbkxhbWFpc20vU01cXG5MYW1hci9NXFxuTGFtYXJjay9NXFxuTGFtYXplL01cXG5MYW1iL01cXG5MYW1iZXJ0L01cXG5MYW1ib3JnaGluaS9NXFxuTGFtYnJ1c2NvL01cXG5MYW1lbnRhdGlvbnNcXG5MYW1vbnQvTVxcbkxhbmEvTVxcbkxhbmFpL01cXG5MYW5jYXNoaXJlL01cXG5MYW5jYXN0ZXIvTVxcbkxhbmNlL01cXG5MYW5jZWxvdC9NXFxuTGFuZC9NXFxuTGFuZG9uL01cXG5MYW5kcnkvTVxcbkxhbmRzYXQvTVxcbkxhbmRzdGVpbmVyL01cXG5MYW5lL01cXG5MYW5nL01cXG5MYW5nZXJoYW5zL01cXG5MYW5nbGFuZC9NXFxuTGFuZ2xleS9NXFxuTGFuZ211aXIvTVxcbkxhbmthL01cXG5MYW5rYW4vTVxcbkxhbm55L01cXG5MYW5zaW5nL01cXG5MYW56aG91L01cXG5MYW8vU01cXG5MYW9jb29uL01cXG5MYW9zL01cXG5MYW90aWFuL1NNXFxuTGFwbGFjZS9NXFxuTGFwbGFjaWFuXFxuTGFwbGFuZC9NUlxcbkxhcHAvU01cXG5MYXJhL01cXG5MYXJhbWllL01cXG5MYXJkbmVyL01cXG5MYXJlZG8vTVxcbkxhcm91c3NlL01cXG5MYXJyeS9NXFxuTGFycy9NTlxcbkxhcnNlbi9NXFxuTGFyc29uL01cXG5MYXNjYXV4L01cXG5MYXNzYS9NXFxuTGFzc2VuL01cXG5MYXNzaWUvTVxcbkxhdC9NXFxuTGF0YXNoYS9NXFxuTGF0ZXJhbi9NXFxuTGF0aGFtL01cXG5MYXRpbi9NUlNcXG5MYXRpbmFcXG5MYXRpbm8vU01cXG5MYXRpbnhcXG5MYXRpc2hhL01cXG5MYXRvbnlhL01cXG5MYXRveWEvTVxcbkxhdHJvYmUvTVxcbkxhdHZpYS9NXFxuTGF0dmlhbi9NU1xcbkxhdWQvTVJcXG5MYXVkZXIvTVxcbkxhdWUvTVxcbkxhdW5kcm9tYXQvTVxcbkxhdXJhL01cXG5MYXVyYXNpYS9NXFxuTGF1cmVsL01cXG5MYXVyZW4vTVxcbkxhdXJlbmNlL01cXG5MYXVyZW50L01cXG5MYXVyaS9NXFxuTGF1cmllL01cXG5MYXZhbC9NXFxuTGF2ZXJuL01cXG5MYXZlcm5lL01cXG5MYXZvaXNpZXIvTVxcbkxhdm9ubmUvTVxcbkxhd2FuZGEvTVxcbkxhd3JlbmNlL01cXG5MYXdzb24vTVxcbkxhd3Rvbi9NXFxuTGF5YW1vbi9NXFxuTGF5bGEvTVxcbkxheXRvbi9NXFxuTGF6YXJvL01cXG5MYXphcnVzL01cXG5MZS9TTVxcbkxlYS9NXFxuTGVhY2gvTVxcbkxlYWRiZWxseS9NXFxuTGVhaC9NXFxuTGVha2V5L01cXG5MZWFuL01cXG5MZWFuZGVyL01cXG5MZWFubi9NXFxuTGVhbm5hL01cXG5MZWFubmUvTVxcbkxlYXIvTVxcbkxlYXJqZXQvTVxcbkxlYXJ5L01cXG5MZWF2ZW53b3J0aC9NXFxuTGViYW5lc2UvTVxcbkxlYmFub24vTVxcbkxlYmVzZ3VlL01cXG5MZWJsYW5jL01cXG5MZWRhL01cXG5MZWRlcmJlcmcvTVxcbkxlZS9NXFxuTGVlZHMvTVxcbkxlZXNidXJnL01cXG5MZWV1d2VuaG9lay9NXFxuTGVld2FyZC9NXFxuTGVmdFxcbkxlZ2VuZHJlL01cXG5MZWdlci9NXFxuTGVnaG9ybi9NXFxuTGVnby9NXFxuTGVncmVlL01cXG5MZWhtYW4vTVxcbkxlaWJuaXovTVxcbkxlaWNlc3Rlci9TTVxcbkxlaWRlbi9NXFxuTGVpZi9NXFxuTGVpZ2gvTVxcbkxlaWxhL01cXG5MZWlwemlnL01cXG5MZWxhL01cXG5MZWxhbmQvTVxcbkxlbGlhL01cXG5MZW1haXRyZS9NXFxuTGVtdWVsL01cXG5MZW11cmlhL01cXG5MZW4vTVxcbkxlbmEvTVxcbkxlbmFyZC9NXFxuTGVuaW4vTVxcbkxlbmluZ3JhZC9NXFxuTGVuaW5pc20vTVxcbkxlbmluaXN0L01cXG5MZW5ub24vTVxcbkxlbm55L01cXG5MZW5vL01cXG5MZW5vaXIvTVxcbkxlbm9yYS9NXFxuTGVub3JlL01cXG5MZW50L1NNTlxcbkxlbnRlbi9NXFxuTGVvL1NNXFxuTGVvbGEvTVxcbkxlb21pbnN0ZXIvTVxcbkxlb24vTVxcbkxlb25hL01cXG5MZW9uYXJkL01cXG5MZW9uYXJkby9NXFxuTGVvbmNhdmFsbG8vTVxcbkxlb25lbC9NXFxuTGVvbmlkL01cXG5MZW9uaWRhcy9NXFxuTGVvbm9yL01cXG5MZW9wb2xkL01cXG5MZW9wb2xkby9NXFxuTGVwaWR1cy9NXFxuTGVwa2UvTVxcbkxlcHVzL01cXG5MZXJuZXIvTVxcbkxlcm95L01cXG5MZXMvTVxcbkxlc2EvTVxcbkxlc2xleS9NXFxuTGVzbGllL01cXG5MZXNvdGhvL01cXG5MZXNzZXBzL01cXG5MZXNzaWUvTVxcbkxlc3Rlci9NXFxuTGVzdHJhZGUvTVxcbkxldGEvTVxcbkxldGhhL01cXG5MZXRoZS9NXFxuTGV0aWNpYS9NXFxuTGV0aXRpYS9NXFxuTGV0dGVybWFuL01cXG5MZXZhbnQvTVxcbkxldmVzcXVlL01cXG5MZXZpL1NNXFxuTGV2aWF0aGFuL01cXG5MZXZpbmUvTVxcbkxldml0aWN1cy9NXFxuTGV2aXR0L01cXG5MZXZ5L01cXG5MZXcvTVxcbkxld2luc2t5L01cXG5MZXdpcy9NXFxuTGV3aXN0b24vTVxcbkxld2lzdmlsbGUvTVxcbkxleGluZ3Rvbi9NXFxuTGV4dXMvTVxcbkxoYXNhL01TXFxuTGhvdHNlL01cXG5MaS9NWVxcbkxpYW9uaW5nL01cXG5MaWJieS9NXFxuTGliZXJhY2UvTVxcbkxpYmVyYWxcXG5MaWJlcmlhL01cXG5MaWJlcmlhbi9TTVxcbkxpYnJhL01TXFxuTGlicmVPZmZpY2UvTVxcbkxpYnJldmlsbGUvTVxcbkxpYnJpdW0vTVxcbkxpYnlhL01cXG5MaWJ5YW4vU01cXG5MaWNodGVuc3RlaW4vTVxcbkxpZGlhL01cXG5MaWUvTVxcbkxpZWJlcm1hbi9NXFxuTGllYmZyYXVtaWxjaC9NXFxuTGllY2h0ZW5zdGVpbi9aTVJcXG5MaWVjaHRlbnN0ZWluZXIvTVxcbkxpZWdlL01cXG5MaWV1dFxcbkxpbGEvTVxcbkxpbGlhL01cXG5MaWxpYW4vTVxcbkxpbGlhbmEvTVxcbkxpbGl0aC9NXFxuTGlsaXVva2FsYW5pL01cXG5MaWxsZS9NXFxuTGlsbGlhbi9NXFxuTGlsbGllL01cXG5MaWxsaXB1dC9NXFxuTGlsbGlwdXRpYW4vTVNcXG5MaWxseS9NXFxuTGlsb25nd2UvTVxcbkxpbHkvTVxcbkxpbWEvTVxcbkxpbWJhdWdoL01cXG5MaW1ib1xcbkxpbWJ1cmdlci9NXFxuTGltb2dlcy9NXFxuTGltb3VzaW4vTVxcbkxpbXBvcG8vTVxcbkxpbi9NXFxuTGluYS9NXFxuTGluY29sbi9NU1xcbkxpbmQvTVxcbkxpbmRhL01cXG5MaW5kYmVyZ2gvTVxcbkxpbmRzYXkvTVxcbkxpbmRzZXkvTVxcbkxpbmR5L01cXG5MaW5uYWV1cy9NXFxuTGlub3R5cGUvTVxcbkxpbnRvbi9NXFxuTGludXMvTVxcbkxpbnV4L01TXFxuTGlud29vZC9NXFxuTGlvbmVsL01cXG5MaXBpenphbmVyL01cXG5MaXBwaS9NXFxuTGlwcG1hbm4vTVxcbkxpcHNjb21iL01cXG5MaXB0b24vTVxcbkxpc2EvTVxcbkxpc2Jvbi9NXFxuTGlzc2Fqb3VzL01cXG5MaXN0ZXIvTVxcbkxpc3RlcmluZS9NXFxuTGlzdG9uL01cXG5MaXN6dC9NXFxuTGl0aHVhbmlhL01cXG5MaXRodWFuaWFuL01TXFxuTGl0dGxlL01cXG5MaXR0b24vTVxcbkxpdmVybW9yZS9NXFxuTGl2ZXJwb29sL01cXG5MaXZlcnB1ZGxpYW4vU01cXG5MaXZpYS9NXFxuTGl2aW5nc3Rvbi9NXFxuTGl2aW5nc3RvbmUvTVxcbkxpdm9uaWEvTVxcbkxpdnkvTVxcbkxpei9NXFxuTGl6YS9NXFxuTGl6emllL01cXG5MaXp6eS9NXFxuTGp1YmxqYW5hL01cXG5MbGV3ZWxseW4vTVxcbkxsb3lkL01cXG5MblxcbkxvYWZlci9TTVxcbkxvYmFjaGV2c2t5L01cXG5Mb2NoaW52YXIvTVxcbkxvY2tlL01cXG5Mb2NrZWFuL01cXG5Mb2NraGVlZC9NXFxuTG9ja3dvb2QvTVxcbkxvZGdlL01cXG5Mb2RpL01cXG5Mb2R6L01cXG5Mb2V3ZS9NXFxuTG9ld2kvTVxcbkxvZXdzL01cXG5Mb2dhbi9NXFxuTG9oZW5ncmluL01cXG5Mb2lyZS9NXFxuTG9pcy9NXFxuTG9raS9NXFxuTG9sYS9NXFxuTG9saXRhL01cXG5Mb2xsYXJkL01cXG5Mb2xsb2JyaWdpZGEvTVxcbkxvbWJhcmQvTVxcbkxvbWJhcmRpL01cXG5Mb21iYXJkeS9NXFxuTG9tZS9NXFxuTG9tcG9jL01cXG5Mb24vTVxcbkxvbmRvbi9NUlpcXG5Mb25kb25lci9NXFxuTG9uZy9NXFxuTG9uZ2ZlbGxvdy9NXFxuTG9uZ21vbnQvTVxcbkxvbmdzdHJlZXQvTVxcbkxvbmd1ZXVpbFxcbkxvbmd2aWV3L01cXG5Mb25uaWUvTVxcbkxvcGV6L01cXG5Mb3JhL01cXG5Mb3JhaW4vTVxcbkxvcmFpbmUvTVxcbkxvcmQvU01cXG5Mb3Jkc2hpcC9TTVxcbkxvcmVsZWkvTVxcbkxvcmVuL01cXG5Mb3JlbmEvTVxcbkxvcmVuZS9NXFxuTG9yZW50ei9NXFxuTG9yZW50emlhblxcbkxvcmVuei9NXFxuTG9yZW56by9NXFxuTG9yZXR0YS9NXFxuTG9yaS9NXFxuTG9yaWUvTVxcbkxvcm5hL01cXG5Mb3JyYWluZS9NXFxuTG9ycmUvTVxcbkxvcnJpZS9NXFxuTG9zXFxuTG90L01cXG5Mb3RoYXJpby9TTVxcbkxvdHQvTVxcbkxvdHRpZS9NXFxuTG91L01cXG5Mb3VlbGxhL01cXG5Mb3VpZS9NXFxuTG91aXMvTVxcbkxvdWlzYS9NXFxuTG91aXNlL01cXG5Mb3Vpc2lhbmEvTVxcbkxvdWlzaWFuYW4vTVNcXG5Mb3Vpc2lhbmlhbi9NU1xcbkxvdWlzdmlsbGUvTVxcbkxvdXJkZXMvTVxcbkxvdXZyZS9NXFxuTG92ZS9NXFxuTG92ZWNyYWZ0L01cXG5Mb3ZlbGFjZS9NXFxuTG93ZS9NXFxuTG93ZWxsL01cXG5Mb3dlbmJyYXUvTVxcbkxvd2VyeS9NXFxuTG93bGFuZHNcXG5Mb3lhbmcvTVxcbkxveWQvTVxcbkxveW9sYS9NXFxuTHJcXG5MdFxcbkx0ZFxcbkx1L01cXG5MdWFuZGEvTVxcbkx1YW5uL01cXG5MdWJhdml0Y2hlci9NXFxuTHViYm9jay9NXFxuTHVidW1iYXNoaS9NXFxuTHVjYXMvTVxcbkx1Y2UvTVxcbkx1Y2lhL01cXG5MdWNpYW4vTVxcbkx1Y2lhbm8vTVxcbkx1Y2llbi9NXFxuTHVjaWZlci9NXFxuTHVjaWxlL01cXG5MdWNpbGxlL01cXG5MdWNpbmRhL01cXG5MdWNpby9NXFxuTHVjaXRlL1NNXFxuTHVjaXVzL01cXG5MdWNrbm93L01cXG5MdWNyZXRpYS9NXFxuTHVjcmV0aXVzL01cXG5MdWN5L01cXG5MdWRkaXRlL01TXFxuTHVkaGlhbmEvTVxcbkx1ZHdpZy9NXFxuTHVlbGxhL01cXG5MdWZ0aGFuc2EvTVxcbkx1ZnR3YWZmZS9NXFxuTHVnZXIvTVxcbkx1Z29zaS9NXFxuTHVpZ2kvTVxcbkx1aXMvTVxcbkx1aXNhL01cXG5MdWtlL01cXG5MdWxhL01cXG5MdWxseS9NXFxuTHVsdS9NXFxuTHVtaWVyZS9NXFxuTHVuYS9NXFxuTHVwZS9NXFxuTHVwZXJjYWxpYS9NXFxuTHVwdXMvTVxcbkx1cmlhL01cXG5MdXNha2EvTVxcbkx1c2l0YW5pYS9NXFxuTHV0aGVyL01cXG5MdXRoZXJhbi9TTVxcbkx1dGhlcmFuaXNtL01TXFxuTHV2cy9NXFxuTHV4ZW1ib3VyZy9aTVJcXG5MdXhlbWJvdXJnZXIvTVxcbkx1eGVtYm91cmdpYW5cXG5MdXovTVxcbkx1em9uL01cXG5Mdm92L01cXG5MeVgvTVxcbkx5YWxscHVyXFxuTHljcmEvTVxcbkx5Y3VyZ3VzL01cXG5MeWRpYS9NXFxuTHlkaWFuL1NNXFxuTHllbGwvTVxcbkx5bGUvTVxcbkx5bHkvTVxcbkx5bWFuL01cXG5MeW1lL01cXG5MeW5jaC9NXFxuTHluY2hidXJnL01cXG5MeW5kYS9NXFxuTHluZG9uL01cXG5MeW5ldHRlL01cXG5MeW5uL01cXG5MeW5uZS9NXFxuTHlubmV0dGUvTVxcbkx5b24vU01cXG5MeW9ucy9NXFxuTHlyYS9NXFxuTHlzZW5rby9NXFxuTHlzaXN0cmF0YS9NXFxuTHlzb2wvTVxcbk0vU01HQlxcbk1BL01cXG5NQVNIXFxuTUIvTVxcbk1CQS9NXFxuTUNcXG5NQ0kvTVxcbk1EL01cXG5NRFRcXG5NRVxcbk1FR08vU1xcbk1GQS9NXFxuTUdNL01cXG5NSHpcXG5NSS9NXFxuTUlBXFxuTUlESS9NXFxuTUlQU1xcbk1JUlZcXG5NSVQvTVxcbk1NXFxuTU5cXG5NT1xcbk1PT0NcXG5NUC9NXFxuTVBFR1xcbk1SSS9NXFxuTVMvTVxcbk1TRy9NXFxuTVNUL01cXG5NU1dcXG5NVC9NXFxuTVRWL01cXG5NVlAvTVxcbk1XXFxuTWFhbG94L01cXG5NYWJlbC9NXFxuTWFibGUvTVxcbk1hYy9NXFxuTWFjQXJ0aHVyL01cXG5NYWNCcmlkZS9NXFxuTWFjRG9uYWxkL01cXG5NYWNMZWlzaC9NXFxuTWFjYW8vTVxcbk1hY2F1bGF5L01cXG5NYWNiZXRoL01cXG5NYWNjYWJlZXNcXG5NYWNjYWJldXMvTVxcbk1hY2UvTVxcbk1hY2Vkb24vTVxcbk1hY2Vkb25pYS9NXFxuTWFjZWRvbmlhbi9TTVxcbk1hY2gvTVxcbk1hY2hpYXZlbGxpL01cXG5NYWNoaWF2ZWxsaWFuL01cXG5NYWNpYXMvTVxcbk1hY2ludG9zaC9NXFxuTWFjay9NXFxuTWFja2VuemllL01cXG5NYWNraW5hYy9NXFxuTWFja2luYXcvTVxcbk1hY21pbGxhbi9NXFxuTWFjb24vTVxcbk1hY3VtYmEvTVxcbk1hY3kvTVxcbk1hZGFnYXNjYW4vU01cXG5NYWRhZ2FzY2FyL01cXG5NYWRhbVxcbk1hZGRlbi9NXFxuTWFkZG94L01cXG5NYWRlaXJhL1NNXFxuTWFkZWxlaW5lL01cXG5NYWRlbGluZS9NXFxuTWFkZWx5bi9NXFxuTWFkZXJhL01cXG5NYWRnZS9NXFxuTWFkaXNvbi9NXFxuTWFkb25uYS9TTVxcbk1hZHJhcy9NXFxuTWFkcmlkL01cXG5NYWR1cmFpL01cXG5NYWUvTVxcbk1hZXRlcmxpbmNrL01cXG5NYWZpYS9NU1xcbk1hZmlvc28vTVxcbk1hZ2RhbGVuYS9NXFxuTWFnZGFsZW5lL01cXG5NYWdlbGxhbi9NXFxuTWFnZWxsYW5pYy9NXFxuTWFnZ2llL01cXG5NYWdocmViL01cXG5NYWdpXFxuTWFnaW5vdC9NXFxuTWFnbmlmaWNhdFxcbk1hZ25pdG9nb3Jzay9NXFxuTWFnb2cvTVxcbk1hZ29vL01cXG5NYWdyaXR0ZS9NXFxuTWFnc2F5c2F5L01cXG5NYWd1c1xcbk1hZ3lhci9TTVxcbk1haGFiaGFyYXRhL01cXG5NYWhhcmFzaHRyYS9NXFxuTWFoYXZpcmEvTVxcbk1haGF5YW5hL01cXG5NYWhheWFuaXN0L01cXG5NYWhkaS9NXFxuTWFoZm91ei9NXFxuTWFoaWNhbi9TTVxcbk1haGxlci9NXFxuTWFpL01cXG5NYWlkZW5mb3JtL01cXG5NYWlncmV0L01cXG5NYWlsZXIvTVxcbk1haWxsb2wvTVxcbk1haW1hbi9NXFxuTWFpbW9uaWRlcy9NXFxuTWFpbmUvTVpSXFxuTWFpbmVyL01cXG5NYWlzaWUvTVxcbk1haXRyZXlhL01cXG5NYWpcXG5NYWplc3R5XFxuTWFqb3IvTVxcbk1ham9yY2EvTVxcbk1hanVyby9NXFxuTWFrYXJpb3MvTVxcbk1ha2VyL01cXG5NYWxhYmFyL01cXG5NYWxhYm8vTVxcbk1hbGFjY2EvTVxcbk1hbGFjaGkvTVxcbk1hbGFnYXN5L01cXG5NYWxhbXVkL01cXG5NYWxhcHJvcC9NXFxuTWFsYXdpL01cXG5NYWxhd2lhbi9TTVxcbk1hbGF5L01TXFxuTWFsYXlhL01cXG5NYWxheWFsYW0vTVxcbk1hbGF5YW4vTVNcXG5NYWxheXNpYS9NXFxuTWFsYXlzaWFuL01TXFxuTWFsY29sbS9NXFxuTWFsZGl2ZS9NU1xcbk1hbGRpdmVzL01cXG5NYWxkaXZpYW4vTVNcXG5NYWxkb25hZG8vTVxcbk1hbGUvTVxcbk1hbGkvTVxcbk1hbGlhbi9TTVxcbk1hbGlidS9NXFxuTWFsaW5kYS9NXFxuTWFsaW5vd3NraS9NXFxuTWFsbGFybWUvTVxcbk1hbGxvbWFycy9NXFxuTWFsbG9yeS9NXFxuTWFsb25lL01cXG5NYWxvcnkvTVxcbk1hbHBsYXF1ZXQvTVxcbk1hbHJhdXgvTVxcbk1hbHRhL01cXG5NYWx0ZXNlL01cXG5NYWx0aHVzL01cXG5NYWx0aHVzaWFuL1NNXFxuTWFtZWx1a2UvTVxcbk1hbWV0L01cXG5NYW1pZS9NXFxuTWFtb3JlL01cXG5NYW4vTVxcbk1hbmFndWEvTVxcbk1hbmFtYS9NXFxuTWFuYXNzZWgvTVxcbk1hbmNoZXN0ZXIvTVxcbk1hbmNodS9TTVxcbk1hbmNodXJpYS9NXFxuTWFuY2h1cmlhbi9NXFxuTWFuY2luaS9NXFxuTWFuY3VuaWFuL01TXFxuTWFuZGFsYXkvTVxcbk1hbmRhcmluL01cXG5NYW5kZWxhL01cXG5NYW5kZWxicm90L01cXG5NYW5kZXZpbGxlL01cXG5NYW5kaW5nby9NXFxuTWFuZHJlbGwvTVxcbk1hbmR5L01cXG5NYW5ldC9NXFxuTWFuZnJlZC9NXFxuTWFuaGF0dGFuL1NNXFxuTWFuaS9NXFxuTWFuaWNoZWFuL01cXG5NYW5pbGEvU01cXG5NYW5pdG9iYS9NXFxuTWFuaXRvdWxpbi9NXFxuTWFua2F0by9NXFxuTWFubGV5L01cXG5NYW5uL0dNXFxuTWFubmhlaW0vTVxcbk1hbm5pbmcvTVxcbk1hbnNmaWVsZC9NXFxuTWFuc29uL01cXG5NYW50ZWNhL01cXG5NYW50ZWduYS9NXFxuTWFudGxlL01cXG5NYW51ZWwvTVxcbk1hbnVlbGEvTVxcbk1hbngvTVxcbk1hby9NXFxuTWFvaXNtL1NNXFxuTWFvaXN0L1NNXFxuTWFvcmkvTVNcXG5NYXBwbGV0aG9ycGUvTVxcbk1hcHV0by9NXFxuTWFyL1NNXFxuTWFyYS9NXFxuTWFyYWNhaWJvL01cXG5NYXJhdC9NXFxuTWFyYXRoYS9NXFxuTWFyYXRoaS9NXFxuTWFyYXRob24vTVxcbk1hcmMvTVxcbk1hcmNlYXUvTVxcbk1hcmNlbC9NXFxuTWFyY2VsaW5vL01cXG5NYXJjZWxsYS9NXFxuTWFyY2Vsby9NXFxuTWFyY2gvTVNcXG5NYXJjaS9NXFxuTWFyY2lhL01cXG5NYXJjaWFuby9NXFxuTWFyY2llL01cXG5NYXJjby9NU1xcbk1hcmNvbmkvTVxcbk1hcmNvcy9NXFxuTWFyY3VzL01cXG5NYXJjdXNlXFxuTWFyY3kvTVxcbk1hcmR1ay9NXFxuTWFyZ2FyZXQvTVxcbk1hcmdhcml0YS9NXFxuTWFyZ2FyaXRvL01cXG5NYXJnZS9NXFxuTWFyZ2VyeS9NXFxuTWFyZ2llL01cXG5NYXJnby9NXFxuTWFyZ290XFxuTWFyZ3JldC9NXFxuTWFyZ3JldGhlL01cXG5NYXJndWVyaXRlL01cXG5NYXJpL1NNXFxuTWFyaWEvTVxcbk1hcmlhREIvTVxcbk1hcmlhbi9NXFxuTWFyaWFuYS9TTVxcbk1hcmlhbmFzL01cXG5NYXJpYW5uZS9NXFxuTWFyaWFuby9NXFxuTWFyaWJlbC9NXFxuTWFyaWNlbGEvTVxcbk1hcmllL01cXG5NYXJpZXR0YS9NXFxuTWFyaWx5bi9NXFxuTWFyaW4vTVxcbk1hcmluYS9NXFxuTWFyaW5lL1NNXFxuTWFyaW8vTVxcbk1hcmlvbi9NXFxuTWFyaXMvTVxcbk1hcmlzYS9NXFxuTWFyaXNvbC9NXFxuTWFyaXNzYS9NXFxuTWFyaXRhaW4vTVxcbk1hcml0emEvTVxcbk1hcml1cG9sXFxuTWFyaXVzL01cXG5NYXJqb3JpZS9NXFxuTWFyam9yeS9NXFxuTWFyay9TTVxcbk1hcmthYi9NXFxuTWFya2hhbS9NXFxuTWFya292L01cXG5NYXJrcy9NXFxuTWFybGEvTVxcbk1hcmxib3JvL01cXG5NYXJsYm9yb3VnaC9NXFxuTWFybGVuZS9NXFxuTWFybGV5L01cXG5NYXJsaW4vTVxcbk1hcmxvbi9NXFxuTWFybG93ZS9NXFxuTWFybWFyYS9NXFxuTWFybmUvTVxcbk1hcm9uaXRlL01cXG5NYXJwbGUvTVxcbk1hcnF1ZXNhcy9NXFxuTWFycXVldHRlL01cXG5NYXJxdWV6L01cXG5NYXJxdWlzL01cXG5NYXJxdWl0YS9NXFxuTWFycmFrZXNoL01cXG5NYXJyaW90dC9NXFxuTWFycy9NU1xcbk1hcnNhbGEvTVxcbk1hcnNlaWxsYWlzZS9NU1xcbk1hcnNlaWxsZXMvTVxcbk1hcnNoL01cXG5NYXJzaGEvTVxcbk1hcnNoYWxsL01cXG5NYXJ0YS9NXFxuTWFydGVsL01cXG5NYXJ0aGEvTVxcbk1hcnRpYWwvTVxcbk1hcnRpYW4vU01cXG5NYXJ0aW4vTVxcbk1hcnRpbmEvTVxcbk1hcnRpbmV6L01cXG5NYXJ0aW5pcXVlL01cXG5NYXJ0eS9NXFxuTWFydmEvTVxcbk1hcnZlbGwvTVxcbk1hcnZpbi9NXFxuTWFyeC9NXFxuTWFyeGlhblxcbk1hcnhpc20vU01cXG5NYXJ4aXN0L1NNXFxuTWFyeS9NXFxuTWFyeWFubi9NXFxuTWFyeWFubmUvTVxcbk1hcnllbGxlbi9NXFxuTWFyeWxhbmQvTVJcXG5NYXJ5bGFuZGVyL01cXG5NYXJ5bG91L01cXG5NYXJ5c3ZpbGxlL01cXG5NYXNhZGEvTVxcbk1hc2FpL01cXG5NYXNhcnlrL01cXG5NYXNjYWduaS9NXFxuTWFzZWZpZWxkL01cXG5NYXNlcmF0aS9NXFxuTWFzZXJ1L01cXG5NYXNoaGFkL01cXG5NYXNvbi9NU1xcbk1hc29uaWMvTVxcbk1hc29uaXRlL01cXG5NYXNzL01TXFxuTWFzc2FjaHVzZXR0cy9NXFxuTWFzc2Fzb2l0L01cXG5NYXNzZW5ldC9NXFxuTWFzc2V5L01cXG5NYXN0ZXIvU1xcbk1hc3RlckNhcmQvTVxcbk1hc3RlcnMvTVxcbk1hdGhlci9NXFxuTWF0aGVzb24vTVxcbk1hdGhldy9TTVxcbk1hdGhld3MvTVxcbk1hdGhld3Nvbi9NXFxuTWF0aGlhcy9NXFxuTWF0aGlzL01cXG5NYXRpbGRhL01cXG5NYXRpc3NlL01cXG5NYXRsYWIvTVxcbk1hdHQvTVxcbk1hdHRlbC9NXFxuTWF0dGVyaG9ybi9NXFxuTWF0dGhldy9TTVxcbk1hdHRoZXdzL01cXG5NYXR0aGlhcy9NXFxuTWF0dGllL01cXG5NYXVkL01cXG5NYXVkZS9NXFxuTWF1Z2hhbS9NXFxuTWF1aS9NXFxuTWF1bGRpbi9NXFxuTWF1cGFzc2FudC9NXFxuTWF1cmEvTVxcbk1hdXJlZW4vTVxcbk1hdXJpYWMvTVxcbk1hdXJpY2UvTVxcbk1hdXJpY2lvL01cXG5NYXVyaW5lL01cXG5NYXVyaXRhbmlhL01cXG5NYXVyaXRhbmlhbi9TTVxcbk1hdXJpdGlhbi9TTVxcbk1hdXJpdGl1cy9NXFxuTWF1cm8vTVxcbk1hdXJvaXMvTVxcbk1hdXJ5YW4vTVxcbk1hdXNlci9NXFxuTWF2aXMvTVxcbk1heC9NXFxuTWF4aW1pbGlhbi9NXFxuTWF4aW5lL01cXG5NYXh3ZWxsL01cXG5NYXkvU01SXFxuTWF5YS9TTVxcbk1heWFuL01TXFxuTWF5ZXIvTVxcbk1heWZhaXIvTVxcbk1heWZsb3dlci9NXFxuTWF5bmFyZC9NXFxuTWF5by9NXFxuTWF5cG9sZVxcbk1heXJhL01cXG5NYXlzL01cXG5NYXl0YWcvTVxcbk1hemFtYS9NXFxuTWF6YXJpbi9NXFxuTWF6YXRsYW4vTVxcbk1hemRhL01cXG5NYXpvbGEvTVxcbk1henppbmkvTVxcbk1iL01cXG5NYmFiYW5lL01cXG5NYmluaS9NXFxuTWNBZGFtL01cXG5NY0FsbGVuL01cXG5NY0JyaWRlL01cXG5NY0NhaW4vTVxcbk1jQ2FsbC9NXFxuTWNDYXJ0aHkvTVxcbk1jQ2FydGh5aXNtL01cXG5NY0NhcnRuZXkvTVxcbk1jQ2FydHkvTVxcbk1jQ2xhaW4vTVxcbk1jQ2xlbGxhbi9NXFxuTWNDbHVyZS9NXFxuTWNDb25uZWxsL01cXG5NY0Nvcm1pY2svTVxcbk1jQ295L01cXG5NY0NyYXkvTVxcbk1jQ3VsbG91Z2gvTVxcbk1jRGFuaWVsL01cXG5NY0RvbmFsZC9NXFxuTWNEb25uZWxsL01cXG5NY0Rvd2VsbC9NXFxuTWNFbnJvZS9NXFxuTWNGYWRkZW4vTVxcbk1jRmFybGFuZC9NXFxuTWNHZWUvTVxcbk1jR292ZXJuL01cXG5NY0dvd2FuL01cXG5NY0d1ZmZleS9NXFxuTWNHdWlyZS9NXFxuTWNIZW5yeS9NXFxuTWNJbnRvc2gvTVxcbk1jSW50eXJlL01cXG5NY0pvYlxcbk1jS2F5L01cXG5NY0tlZS9NXFxuTWNLZW56aWUvTVxcbk1jS2lubGV5L01cXG5NY0tpbm5leS9NXFxuTWNLbmlnaHQvTVxcbk1jTGF1Z2hsaW4vTVxcbk1jTGVhbi9NXFxuTWNMZW9kL01cXG5NY0x1aGFuL01cXG5NY01haG9uL01cXG5NY01pbGxhbi9NXFxuTWNOYW1hcmEvTVxcbk1jTmF1Z2h0b24vTVxcbk1jTmVpbC9NXFxuTWNQaGVyc29uL01cXG5NY1F1ZWVuL01cXG5NY1ZlaWdoL01cXG5NZC9NXFxuTWVcXG5NZWFkL01cXG5NZWFkZS9NXFxuTWVhZG93cy9NXFxuTWVhZ2FuL01cXG5NZWFueS9NXFxuTWVjY2EvTVNcXG5NZWRhbi9NXFxuTWVkZWEvTVxcbk1lZGVsbGluL01cXG5NZWRmb3JkL01cXG5NZWRpYS9NXFxuTWVkaWNhaWQvU01cXG5NZWRpY2FyZS9TTVxcbk1lZGljaS9NXFxuTWVkaW5hL01cXG5NZWRpdGVycmFuZWFuL01TXFxuTWVkdXNhL01cXG5NZWcvTVxcbk1lZ2FuL01cXG5NZWdoYW4vTVxcbk1laWVyL01cXG5NZWlnaGVuL01cXG5NZWlqaS9NXFxuTWVpci9NXFxuTWVqaWEvTVxcbk1la29uZy9NXFxuTWVsL01cXG5NZWxhbmVzaWEvTVxcbk1lbGFuZXNpYW4vTVxcbk1lbGFuaWUvTVxcbk1lbGJhL01cXG5NZWxib3VybmUvTVxcbk1lbGNoaW9yL01cXG5NZWxjaGl6ZWRlay9NXFxuTWVsZW5kZXovTVxcbk1lbGluZGEvTVxcbk1lbGlzYS9NXFxuTWVsaXNhbmRlL01cXG5NZWxpc3NhL01cXG5NZWxsb24vTVxcbk1lbG9keS9NXFxuTWVscG9tZW5lL01cXG5NZWx0b24vTVxcbk1lbHZhL01cXG5NZWx2aWxsZS9NXFxuTWVsdmluL01cXG5NZW1jYWNoZWQvTVxcbk1lbWxpbmcvTVxcbk1lbXBoaXMvTVxcbk1lbmFuZGVyL01cXG5NZW5jaXVzL01cXG5NZW5ja2VuL01cXG5NZW5kZWwvTVxcbk1lbmRlbGVldi9NXFxuTWVuZGVsaWFuL01cXG5NZW5kZWxzc29obi9NXFxuTWVuZGV6L01cXG5NZW5kb2Npbm8vTVxcbk1lbmRvemEvTVxcbk1lbmVsYXVzL01cXG5NZW5lbGlrL01cXG5NZW5lcy9NXFxuTWVuZ3ppXFxuTWVuaWZlZS9NXFxuTWVua2FsaW5hbi9NXFxuTWVua2FyL01cXG5NZW5rZW50L01cXG5NZW5uZW4vTVxcbk1lbm5vbml0ZS9NU1xcbk1lbm9taW5lZS9NXFxuTWVub3R0aS9NXFxuTWVuc2EvTVxcbk1lbnRob2xhdHVtL01cXG5NZW51aGluL01cXG5NZW56aWVzL01cXG5NZXBoaXN0b1xcbk1lcGhpc3RvcGhlbGVzL01cXG5NZXJhay9NXFxuTWVyY2Fkby9NXFxuTWVyY2F0b3IvTVxcbk1lcmNlZC9NXFxuTWVyY2VkZXMvTVxcbk1lcmNlci9NXFxuTWVyY2lhL01cXG5NZXJjay9NXFxuTWVyY3Vyb2Nocm9tZS9NXFxuTWVyY3VyeS9TTVxcbk1lcmVkaXRoL01cXG5NZXJpbm8vTVxcbk1lcmxlL01cXG5NZXJsaW4vTVxcbk1lcmxvdC9NXFxuTWVyb3ZpbmdpYW4vTVxcbk1lcnJpYW0vTVxcbk1lcnJpY2svTVxcbk1lcnJpbGwvTVxcbk1lcnJpbWFjay9NXFxuTWVycml0dC9NXFxuTWVydGhpb2xhdGUvTVxcbk1lcnRvbi9NXFxuTWVydmluL01cXG5NZXNhL01cXG5NZXNhYmkvTVxcbk1lc21lci9NXFxuTWVzb2xpdGhpYy9NXFxuTWVzb3BvdGFtaWEvTVxcbk1lc29wb3RhbWlhblxcbk1lc296b2ljL01cXG5NZXNzZXJzY2htaWR0L01cXG5NZXNzaWFlbi9NXFxuTWVzc2lhaC9NXFxuTWVzc2lhaHNcXG5NZXNzaWFuaWNcXG5NZXNzaWV1cnNcXG5NZXRhbGxpY2EvTVxcbk1ldGFtdWNpbC9NXFxuTWV0aG9kaXNtL1NNXFxuTWV0aG9kaXN0L1NNXFxuTWV0aHVzZWxhaC9NXFxuTWV0dGVybmljaC9NXFxuTWV1c2UvTVxcbk1leFxcbk1leGljYWxpL01cXG5NZXhpY2FuL01TXFxuTWV4aWNvL01cXG5NZXllci9NU1xcbk1leWVyYmVlci9NXFxuTWV5ZXJzL01cXG5NZnVtZS9NXFxuTWcvTVxcbk1nclxcbk1pRy9NXFxuTWlhL01cXG5NaWFtaS9NU1xcbk1pYXBsYWNpZHVzL01cXG5NaWNhaC9NXFxuTWljYXdiZXIvTVxcbk1pY2gvTVxcbk1pY2hhZWwvTVxcbk1pY2hhZWxtYXMvTVNcXG5NaWNoZWFsL01cXG5NaWNoZWwvTVxcbk1pY2hlbGFuZ2Vsby9NXFxuTWljaGVsZS9NXFxuTWljaGVsaW4vTVxcbk1pY2hlbGxlL01cXG5NaWNoZWxvYi9NXFxuTWljaGVsc29uL01cXG5NaWNoaWdhbi9NXFxuTWljaGlnYW5kZXIvTVNcXG5NaWNoaWdhbml0ZVxcbk1pY2svTVxcbk1pY2tleS9NXFxuTWlja2llL01cXG5NaWNreS9NXFxuTWljbWFjL1NNXFxuTWljcm9uZXNpYS9NXFxuTWljcm9uZXNpYW4vTVxcbk1pY3Jvc29mdC9NXFxuTWlkYXMvTVxcbk1pZGRsZXRvbi9NXFxuTWlkZGxldG93bi9NXFxuTWlkZWFzdFxcbk1pZGVhc3Rlcm5cXG5NaWRsYW5kL01TXFxuTWlkd2F5L01cXG5NaWR3ZXN0L01cXG5NaWR3ZXN0ZXJuL01SXFxuTWlndWVsL01cXG5NaWtlL01cXG5NaWtoYWlsL01cXG5NaWtveWFuL01cXG5NaWxhZ3Jvcy9NXFxuTWlsYW4vTVxcbk1pbGFuZXNlXFxuTWlsZHJlZC9NXFxuTWlsZXMvTVxcbk1pbGZvcmQvTVxcbk1pbGtlbi9NXFxuTWlsbC9TTVJcXG5NaWxsYXJkL01cXG5NaWxsYXkvTVxcbk1pbGxlci9NXFxuTWlsbGV0L01cXG5NaWxsaWNlbnQvTVxcbk1pbGxpZS9NXFxuTWlsbGlrYW4vTVxcbk1pbGxzL01cXG5NaWxuZS9NXFxuTWlsby9NXFxuTWlsb3NldmljL01cXG5NaWxxdWV0b2FzdC9NXFxuTWlsdGlhZGVzL01cXG5NaWx0b24vTVxcbk1pbHRvbmlhblxcbk1pbHRvbmljL01cXG5NaWx0b3duL01cXG5NaWx3YXVrZWUvTVxcbk1pbWkvTVxcbk1pbW9zYS9NXFxuTWluL01cXG5NaW5hbW90by9NXFxuTWluZGFuYW8vTVxcbk1pbmRvcm8vTVxcbk1pbmR5L01cXG5NaW5lcnZhL01cXG5NaW5nL01cXG5NaW5ndXMvTVxcbk1pbm5cXG5NaW5uZWFwb2xpcy9NXFxuTWlubmVsbGkvTVxcbk1pbm5lc290YS9NXFxuTWlubmVzb3Rhbi9TTVxcbk1pbm5pZS9NXFxuTWlub2FuL01TXFxuTWlub2x0YS9NXFxuTWlub3MvTVxcbk1pbm90L01cXG5NaW5vdGF1ci9NXFxuTWluc2svTVxcbk1pbnNreS9NXFxuTWludGFrYS9NXFxuTWludWl0L01cXG5NaW51dGVtYW4vTVxcbk1pb2NlbmUvTVxcbk1pci9NXFxuTWlyYS9NXFxuTWlyYWJlYXUvTVxcbk1pcmFjaC9NXFxuTWlyYW5kYS9NXFxuTWlyZmFrL01cXG5NaXJpYW0vTVxcbk1pcm8vTVxcbk1pcnphbS9NXFxuTWlza2l0by9NXFxuTWlzc1xcbk1pc3Npc3NhdWdhL01cXG5NaXNzaXNzaXBwaS9NXFxuTWlzc2lzc2lwcGlhbi9TTVxcbk1pc3NvdWxhL01cXG5NaXNzb3VyaS9NXFxuTWlzc291cmlhbi9NU1xcbk1pc3N5L01cXG5NaXN0YXNzaW5pL01cXG5NaXN0ZXJcXG5NaXN0cmVzc1xcbk1pc3R5L01cXG5NaXRjaC9NXFxuTWl0Y2hlbC9NXFxuTWl0Y2hlbGwvTVxcbk1pdGZvcmQvTVxcbk1pdGhyYS9NXFxuTWl0aHJpZGF0ZXMvTVxcbk1pdHN1YmlzaGkvTVxcbk1pdHRlcnJhbmQvTVxcbk1pdHR5L01cXG5NaXR6aS9NXFxuTWl4dGVjL01cXG5NaXphci9NXFxuTWtcXG5NbGxlXFxuTW1lL1NcXG5Nbi9NXFxuTW5lbW9zeW5lL01cXG5Nby9NXFxuTW9iaWwvTVxcbk1vYmlsZS9NXFxuTW9idXR1L01cXG5Nb2Rlc3RvL01cXG5Nb2RpZ2xpYW5pL01cXG5Nb2UvTVxcbk1vZXQvTVxcbk1vZ2FkaXNodS9NXFxuTW9ndWwvTVNcXG5Nb2hhY3MvTVxcbk1vaGFtZWQvTVxcbk1vaGFtbWFkL01cXG5Nb2hhbW1lZGFuL1NNXFxuTW9oYW1tZWRhbmlzbS9TTVxcbk1vaGF2ZS9TTVxcbk1vaGF3ay9TTVxcbk1vaGVnYW5cXG5Nb2hvL01cXG5Nb2hvcm92aWNpYy9NXFxuTW9pcmEvTVxcbk1vaXNlcy9NXFxuTW9pc2V5ZXYvTVxcbk1vamF2ZS9TTVxcbk1vbGRhdmlhL01cXG5Nb2xkYXZpYW5cXG5Nb2xkb3ZhL01cXG5Nb2xkb3Zhblxcbk1vbGllcmUvTVxcbk1vbGluYS9NXFxuTW9sbC9NXFxuTW9sbGllL01cXG5Nb2xseS9NXFxuTW9sbmFyL01cXG5Nb2xvY2gvTVxcbk1vbG9rYWkvTVxcbk1vbG90b3YvTVxcbk1vbHVjY2FzL01cXG5Nb21iYXNhL01cXG5Nb24vU01cXG5Nb25hL01cXG5Nb25hY2FuXFxuTW9uYWNvL01cXG5Nb25kYWxlL01cXG5Nb25kYXkvU01cXG5Nb25kcmlhbi9NXFxuTW9uZWdhc3F1ZS9TTVxcbk1vbmVyYS9NXFxuTW9uZXNzZW4vTVxcbk1vbmV0L01cXG5Nb25nb0RCL01cXG5Nb25nb2wvU01cXG5Nb25nb2xpYS9NXFxuTW9uZ29saWFuL1NNXFxuTW9uZ29saWMvTVxcbk1vbmdvbG9pZFxcbk1vbmljYS9NXFxuTW9uaXF1ZS9NXFxuTW9uay9NXFxuTW9ubW91dGgvTVxcbk1vbm9uZ2FoZWxhL01cXG5Nb25yb2UvTVxcbk1vbnJvdmlhL01cXG5Nb25zYW50by9NXFxuTW9uc2lldXIvTVxcbk1vbnNpZ25vci9TTVxcbk1vbnQvTVxcbk1vbnRhZ3VlL01cXG5Nb250YWlnbmUvTVxcbk1vbnRhbmEvTVxcbk1vbnRhbmFuL1NNXFxuTW9udGNhbG0vTVxcbk1vbnRlL01cXG5Nb250ZW5lZ3Jpbi9NXFxuTW9udGVuZWdyby9NXFxuTW9udGVyZXkvTVxcbk1vbnRlcnJleS9NXFxuTW9udGVzcXVpZXUvTVxcbk1vbnRlc3NvcmkvTVxcbk1vbnRldmVyZGkvTVxcbk1vbnRldmlkZW8vTVxcbk1vbnRlenVtYS9NXFxuTW9udGdvbGZpZXIvTVxcbk1vbnRnb21lcnkvTVxcbk1vbnRpY2VsbG8vTVxcbk1vbnRveWEvTVxcbk1vbnRwZWxpZXIvTVxcbk1vbnRyYWNoZXQvTVxcbk1vbnRyZWFsL01cXG5Nb250c2VycmF0L01cXG5Nb250eS9NXFxuTW9vZHkvTVxcbk1vb2cvTVxcbk1vb24vTVxcbk1vb25leS9NXFxuTW9vci9TTVxcbk1vb3JlL01cXG5Nb29yaXNoL01cXG5Nb3JhbGVzL01cXG5Nb3Jhbi9NXFxuTW9yYXZpYS9NXFxuTW9yYXZpYW4vTVxcbk1vcmRyZWQvTVxcbk1vcmUvTVxcbk1vcmVuby9NXFxuTW9yZ2FuL1NNXFxuTW9yZ2FudG93bi9NXFxuTW9yaWFydHkvTVxcbk1vcmluL01cXG5Nb3Jpc29uL01cXG5Nb3JpdGEvTVxcbk1vcmxleS9NXFxuTW9ybW9uL1NNXFxuTW9ybW9uaXNtL1NNXFxuTW9yby9NXFxuTW9yb2NjYW4vU01cXG5Nb3JvY2NvL01cXG5Nb3JvbmkvTVxcbk1vcnBoZXVzL01cXG5Nb3JwaHkvTVxcbk1vcnJpcy9NXFxuTW9ycmlzb24vTVxcbk1vcnJpc3Rvd24vTVxcbk1vcnJvdy9NXFxuTW9yc2UvTVxcbk1vcnQvTVxcbk1vcnRpbWVyL01cXG5Nb3J0b24vTVxcbk1vc2FpYy9NXFxuTW9zY293L01cXG5Nb3NlbGV5L01cXG5Nb3NlbGxlL01cXG5Nb3Nlcy9NXFxuTW9zbGV5L01cXG5Nb3NzL01cXG5Nb3N1bC9NXFxuTW90b3JvbGEvTVxcbk1vdG93bi9NXFxuTW90cmluL01cXG5Nb3R0L01cXG5Nb3VsdG9uL01cXG5Nb3VudC9NXFxuTW91bnRiYXR0ZW4vTVxcbk1vdW50aWUvTVNcXG5Nb3Vzc29yZ3NreS9NXFxuTW91dGhlL01cXG5Nb3V0b24vTVxcbk1vd2dsaS9NXFxuTW96YW1iaWNhbi9TTVxcbk1vemFtYmlxdWUvTVxcbk1vemFydC9NXFxuTW96aWxsYS9NXFxuTXIvU01cXG5Ncy9TXFxuTXNnclxcbk10XFxuTXVhd2l5YS9NXFxuTXViYXJhay9NXFxuTXVlbGxlci9NXFxuTXVlbnN0ZXIvTVNcXG5NdWdhYmUvTVxcbk11aGFtbWFkL01cXG5NdWhhbW1hZGFuL01TXFxuTXVoYW1tYWRhbmlzbS9TTVxcbk11aXIvTVxcbk11amliL01cXG5NdWxkZXIvTVxcbk11bGxlbi9NXFxuTXVsbGVyL01cXG5NdWxsaWdhbi9NXFxuTXVsbGlrYW4vTVxcbk11bGxpbnMvTVxcbk11bHJvbmV5L01cXG5NdWx0YW4vTVxcbk11bHRpY3NcXG5NdW1iYWkvTVxcbk11bWZvcmQvTVxcbk11bmNoL01cXG5NdW5jaGhhdXNlbi9NXFxuTXVuY2llL01cXG5NdW5pY2gvTVxcbk11bm96L01cXG5NdW5yby9NXFxuTXVuc3Rlci9NXFxuTXVwcGV0L01cXG5NdXJhc2FraS9NXFxuTXVyYXQvTVxcbk11cmNoaXNvbi9NXFxuTXVyY2lhXFxuTXVyZG9jaC9NXFxuTXVyZnJlZXNib3JvL01cXG5NdXJpZWwvTVxcbk11cmlsbG8vTVxcbk11cmluZS9NXFxuTXVybWFuc2svTVxcbk11cnBoeS9NXFxuTXVycmF5L01cXG5NdXJyaWV0YS9NXFxuTXVycm93L01cXG5NdXJydW1iaWRnZWUvTVxcbk11c2NhdC9NXFxuTXVzY292aXRlL01cXG5NdXNjb3Z5L01cXG5NdXNlL01cXG5NdXNoYXJyYWYvTVxcbk11c2lhbC9NXFxuTXVza2Vnb24vTVxcbk11c2tvZ2VlL01cXG5NdXNsaW0vTVNcXG5NdXNzb2xpbmkvTVxcbk11c3Nvcmdza3kvTVxcbk11dHN1aGl0by9NXFxuTXV6YWsvTVxcbk15U1FML01cXG5NeVNwYWNlL01cXG5NeWFubWFyL01cXG5NeWNlbmFlL01cXG5NeWNlbmFlYW4vTVxcbk15ZXJzL01cXG5NeWxhci9NU1xcbk15bGVzL01cXG5NeXJhL01cXG5NeXJkYWwvTVxcbk15cm5hL01cXG5NeXJvbi9NXFxuTXlydGxlL01cXG5NeXNvcmUvTVxcbk15c3QvTVxcbk4nRGphbWVuYVxcbk4vTURcXG5OQUFDUC9NXFxuTkFGVEEvTVxcbk5BU0EvTVxcbk5BU0NBUi9NXFxuTkFTREFRL01cXG5OQVRPL01cXG5OQlxcbk5CQS9NXFxuTkJDL01cXG5OQlNcXG5OQ1xcbk5DQUEvTVxcbk5DT1xcbk5EXFxuTkUvTVxcbk5FSFxcbk5GXFxuTkZDXFxuTkZML01cXG5OSFxcbk5ITC9NXFxuTklIXFxuTklNQllcXG5OSlxcbk5MUkJcXG5OTVxcbk5PUkFEL01cXG5OT1dcXG5OUFxcbk5QUi9NXFxuTlJcXG5OUkFcXG5OUkNcXG5OU1xcbk5TQS9NXFxuTlNDXFxuTlNGXFxuTlNGV1xcbk5UXFxuTlZcXG5OVklESUEvTVxcbk5XL01cXG5OV1RcXG5OWVxcbk5ZQ1xcbk5ZU0VcXG5OWlxcbk5hL01cXG5OYWJpc2NvL01cXG5OYWJva292L01cXG5OYWRlci9NXFxuTmFkaWEvTVxcbk5hZGluZS9NXFxuTmFnYXNha2kvTVxcbk5hZ295YS9NXFxuTmFncHVyL01cXG5OYWd5L01cXG5OYWh1YXRsL01TXFxuTmFodW0vTVxcbk5haXBhdWwvTVxcbk5haXIvTVxcbk5haXJvYmkvTVxcbk5haXNtaXRoL01cXG5OYW0vTVxcbk5hbWF0aC9NXFxuTmFtaWJpYS9NXFxuTmFtaWJpYW4vTVNcXG5OYW1wYS9NXFxuTmFuL01cXG5OYW5hay9NXFxuTmFuY2hhbmcvTVxcbk5hbmN5L01cXG5OYW5ldHRlL01cXG5OYW5qaW5nL01cXG5OYW5uaWUvTVxcbk5hbm9vay9NXFxuTmFuc2VuL01cXG5OYW50ZXMvTVxcbk5hbnR1Y2tldC9NXFxuTmFvbWkvTVxcbk5hcGEvTVxcbk5hcGh0YWxpL01cXG5OYXBpZXIvTVxcbk5hcGxlcy9NXFxuTmFwb2xlb24vTVNcXG5OYXBvbGVvbmljL01cXG5OYXBzdGVyL01cXG5OYXJjaXNzdXMvTVxcbk5hcm1hZGEvTVxcbk5hcm5pYS9NXFxuTmFycmFnYW5zZXRcXG5OYXJyYWdhbnNldHQvTVxcbk5hc2gvTVxcbk5hc2h1YS9NXFxuTmFzaHZpbGxlL01cXG5OYXNzYXUvTVxcbk5hc3Nlci9NXFxuTmF0L01cXG5OYXRhbGlhL01cXG5OYXRhbGllL01cXG5OYXRhc2hhL01cXG5OYXRjaGV6L01cXG5OYXRlL01OXFxuTmF0aGFuL1NNXFxuTmF0aGFuaWVsL01cXG5OYXRoYW5zL01cXG5OYXRpb24vTVxcbk5hdGlvbndpZGUvTVxcbk5hdGl2aXR5L01cXG5OYXVnYWh5ZGUvTVxcbk5hdXJ1L01cXG5OYXV0aWx1cy9NXFxuTmF2YWpvL1NNXFxuTmF2YWpvZXNcXG5OYXZhcnJlL01cXG5OYXZhcnJvL01cXG5OYXZyYXRpbG92YS9NXFxuTmF2eVxcbk5hemFyZW5lL01cXG5OYXphcmV0aC9NXFxuTmF6Y2EvTVxcbk5hemkvU01cXG5OYXppc20vTVNcXG5OYi9NXFxuTmQvTVxcbk5kamFtZW5hL01cXG5OZS9NXFxuTmVXU1xcbk5lV1Nlc1xcbk5lYWwvTVxcbk5lYW5kZXJ0aGFsL1NNXFxuTmVhcG9saXRhbi9NXFxuTmViXFxuTmViclxcbk5lYnJhc2thL01cXG5OZWJyYXNrYW4vTVNcXG5OZWJ1Y2hhZG5lenphci9NXFxuTmVkL01cXG5OZWZlcnRpdGkvTVxcbk5lZ2V2L01cXG5OZWdyZXNzL01TXFxuTmVncml0dWRlXFxuTmVncm8vTVNcXG5OZWdyb2VzXFxuTmVncm9pZC9TTVxcbk5lZ3Jvcy9NXFxuTmVoZW1pYWgvTVxcbk5laHJ1L01cXG5OZWlsL01cXG5OZWxkYS9NXFxuTmVsbC9NXFxuTmVsbGllL01cXG5OZWxseS9NXFxuTmVsc2VuL01cXG5OZWxzb24vTVxcbk5lbWJ1dGFsL01cXG5OZW1lc2lzL01cXG5OZW8vTVxcbk5lb2dlbmUvTVxcbk5lb2xpdGhpY1xcbk5lcGFsL01cXG5OZXBhbGVzZS9NXFxuTmVwYWxpL01TXFxuTmVwdHVuZS9NXFxuTmVyZWlkL01cXG5OZXJmL01cXG5OZXJvL01cXG5OZXJ1ZGEvTVxcbk5lc2NhZmUvTVxcbk5lc3NlbHJvZGUvTVxcbk5lc3RsZS9NXFxuTmVzdG9yL01cXG5OZXN0b3JpdXMvTVxcbk5ldGZsaXgvTVxcbk5ldGhlcmxhbmRlci9TTVxcbk5ldGhlcmxhbmRzL01cXG5OZXRzY2FwZS9NXFxuTmV0dGllL01cXG5OZXR6YWh1YWxjb3lvdGwvTVxcbk5ldi9NXFxuTmV2YS9NXFxuTmV2YWRhL01cXG5OZXZhZGFuL1NNXFxuTmV2YWRpYW5cXG5OZXZpcy9NXFxuTmV2c2t5L01cXG5OZXdhcmsvTVxcbk5ld2J1cmdoL01cXG5OZXdjYXN0bGUvTVxcbk5ld2ZvdW5kbGFuZC9NUlNcXG5OZXdtYW4vTVxcbk5ld3BvcnQvTVxcbk5ld3N3ZWVrL01cXG5OZXd0b24vTVxcbk5ld3Rvbmlhbi9NXFxuTmV4aXMvTVxcbk5nYWxpZW1hL01cXG5OZ3V5ZW4vTVxcbk5pL01cXG5OaWFnYXJhL01cXG5OaWFtZXkvTVxcbk5pYmVsdW5nL01cXG5OaWNhZWEvTVxcbk5pY2FyYWd1YS9NXFxuTmljYXJhZ3Vhbi9TTVxcbk5pY2NvbG8vTVxcbk5pY2UvTVxcbk5pY2VuZS9NXFxuTmljaGlyZW4vTVxcbk5pY2hvbGFzL01cXG5OaWNob2xlL01cXG5OaWNob2xzL01cXG5OaWNob2xzb24vTVxcbk5pY2svTVxcbk5pY2tlbG9kZW9uL01cXG5OaWNrbGF1cy9NXFxuTmlja29sYXMvTVxcbk5pY29iYXIvTVxcbk5pY29kZW11cy9NXFxuTmljb2xhL1NNXFxuTmljb2xhcy9NXFxuTmljb2xlL01cXG5OaWNvc2lhL01cXG5OaWVidWhyL01cXG5OaWVsc2VuL01cXG5OaWV0enNjaGUvTVxcbk5pZXZlcy9NXFxuTmlnZWwvTVxcbk5pZ2VyL01cXG5OaWdlcmlhL01cXG5OaWdlcmlhbi9NU1xcbk5pZ2VyaWVuL01cXG5OaWdodGluZ2FsZS9NXFxuTmlqaW5za3kvTVxcbk5pa2UvTVxcbk5pa2l0YS9NXFxuTmlra2VpL01cXG5OaWtraS9NXFxuTmlrb2xhaS9NXFxuTmlrb24vTVxcbk5pbGUvTVxcbk5pbWl0ei9NXFxuTmltcm9kL01cXG5OaW5hL01cXG5OaW5ldmVoL01cXG5OaW50ZW5kby9NXFxuTmlvYmUvTVxcbk5pcHBvbi9NXFxuTmlwcG9uZXNlL01cXG5OaXJlbmJlcmcvTVxcbk5pcnZhbmEvTVxcbk5pc2FuL01cXG5OaXNlaS9NXFxuTmlzc2FuL01cXG5OaXRhL01cXG5OaXZlYS9NXFxuTml4b24vTVxcbk5rcnVtYWgvTVxcbk5vL1NNXFxuTm9Eb3ovTVxcbk5vYWgvTVxcbk5vYmVsL01cXG5Ob2JlbGlzdC9NU1xcbk5vYmxlL01cXG5Ob2UvTVxcbk5vZWwvU01cXG5Ob2VsbGUvTVxcbk5vZW1pL01cXG5Ob2tpYS9NXFxuTm9sYS9NXFxuTm9sYW4vTVxcbk5vbWUvTVxcbk5vbmEvTVxcbk5vb3RrYS9NXFxuTm9yYS9NXFxuTm9yYmVydC9NXFxuTm9yYmVydG8vTVxcbk5vcmRpYy9NU1xcbk5vcmVlbi9NXFxuTm9yZm9say9NXFxuTm9yaWVnYS9NXFxuTm9ybWEvTVxcbk5vcm1hbC9NXFxuTm9ybWFuL01TXFxuTm9ybWFuZC9NXFxuTm9ybWFuZHkvTVxcbk5vcnBsYW50L01cXG5Ob3JyaXMvTVxcbk5vcnNlL01cXG5Ob3JzZW1hbi9NXFxuTm9yc2VtZW4vTVxcbk5vcnRoL01cXG5Ob3J0aGFtcHRvbi9NXFxuTm9ydGhlYXN0L01TXFxuTm9ydGhlcm5lci9NXFxuTm9ydGhyb3AvTVxcbk5vcnRocnVwL01cXG5Ob3J0aHNcXG5Ob3J0aHdlc3QvU01cXG5Ob3J0b24vTVxcbk5vcndcXG5Ob3J3YXkvTVxcbk5vcndlZ2lhbi9TTVxcbk5vcndpY2gvTVxcbk5vc2ZlcmF0dS9NXFxuTm9zdHJhZGFtdXMvTVxcbk5vdHRpbmdoYW0vTVxcbk5vdWFrY2hvdHQvTVxcbk5vdW1lYS9NXFxuTm92L01cXG5Ob3ZhL01cXG5Ob3ZhcnRpcy9NXFxuTm92ZW1iZXIvTVNcXG5Ob3Znb3JvZC9NXFxuTm92b2NhaW4vTVNcXG5Ob3ZvY2FpbmVcXG5Ob3Zva3V6bmV0c2svTVxcbk5vdm9zaWJpcnNrL01cXG5Ob3h6ZW1hL01cXG5Ob3ljZS9NXFxuTm95ZXMvTVxcbk5wL01cXG5OdWJpYS9NXFxuTnViaWFuL01cXG5OdWt1YWxvZmEvTVxcbk51bWJlcnMvTVxcbk51bmF2dXQvTVxcbk51bmV6L01cXG5OdW5raS9NXFxuTnVyZW1iZXJnL01cXG5OdXJleWV2L01cXG5OdXRyYVN3ZWV0L01cXG5OeVF1aWwvTVxcbk55YXNhL01cXG5OeWVyZXJlL01cXG5PJ0JyaWVuL01cXG5PJ0Nhc2V5L01cXG5PJ0Nvbm5lbGwvTVxcbk8nQ29ubm9yL01cXG5PJ0Rvbm5lbGwvTVxcbk8nSGFyYS9NXFxuTydIaWdnaW5zL01cXG5PJ0tlZWZmZS9NXFxuTydOZWlsL01cXG5PJ05laWxsL01cXG5PJ1JvdXJrZS9NXFxuTydUb29sZS9NXFxuTy9TTVxcbk9BUy9NXFxuT0JcXG5PQ1JcXG5PRC9TTVxcbk9FXFxuT0VEXFxuT0hcXG5PSFNBL01cXG5PSlxcbk9LL1NNREdcXG5PTUIvTVxcbk9OXFxuT1BFQy9NXFxuT1JcXG5PUy9NXFxuT1NIQS9NXFxuT1Nlc1xcbk9UXFxuT1RCXFxuT1RDXFxuT1RPSFxcbk9haHUvTVxcbk9ha2xhbmQvTVxcbk9ha2xleS9NXFxuT2F0ZXMvTVxcbk9heGFjYS9NXFxuT2IvTVxcbk9iYWRpYWgvTVxcbk9iYW1hL01cXG5PYmFtYWNhcmVcXG5PYmVybGluL01cXG5PYmVyb24vTVxcbk9jYWxhL01cXG5PY2FtbC9NXFxuT2NjYW0vTVxcbk9jY2lkZW50XFxuT2NjaWRlbnRhbC9NU1xcbk9jZWFuaWEvTVxcbk9jZWFuc2lkZVxcbk9jZWFudXMvTVxcbk9jaG9hL01cXG5PY3QvTVxcbk9jdGF2aWEvTVxcbk9jdGF2aWFuL01cXG5PY3RhdmlvL01cXG5PY3RvYmVyL1NNXFxuT2RlbGwvTVxcbk9kZXIvTVxcbk9kZXNzYS9NXFxuT2RldHMvTVxcbk9kaW4vTVxcbk9kaXMvTVxcbk9kb20vTVxcbk9keXNzZXVzL01cXG5PZHlzc2V5L01cXG5PZWRpcGFsL01cXG5PZWRpcHVzL01cXG5PZXJzdGVkL01cXG5PZmVsaWEvTVxcbk9mZmVuYmFjaC9NXFxuT2ZmaWNlTWF4L01cXG5PZ2JvbW9zaG8vTVxcbk9nZGVuL01cXG5PZ2lsdnkvTVxcbk9nbGV0aG9ycGUvTVxcbk9oaW8vTVxcbk9oaW9hbi9TTVxcbk9pc2UvTVxcbk9qaWJ3YS9TTVxcbk9rYXlhbWFcXG5Pa2VlY2hvYmVlL01cXG5Pa2VmZW5va2VlL01cXG5Pa2hvdHNrL01cXG5Pa2luYXdhL01cXG5Pa2luYXdhblxcbk9rbGFcXG5Pa2xhaG9tYS9NXFxuT2tsYWhvbWFuL01cXG5Pa3RvYmVyZmVzdC9NXFxuT2xhL01cXG5PbGFmL01cXG5PbGFqdXdvbi9NXFxuT2xhdi9NXFxuT2xkZW5idXJnL01cXG5PbGRmaWVsZC9NXFxuT2xkc21vYmlsZS9NXFxuT2xkdXZhaS9NXFxuT2xlbi9NXFxuT2xlbmVrL01cXG5PbGdhL01cXG5PbGlnb2NlbmUvTVxcbk9saW4vTVxcbk9saXZlL01SXFxuT2xpdmVyL01cXG5PbGl2ZXR0aS9NXFxuT2xpdmlhL01cXG5PbGl2aWVyL01cXG5PbGxpZS9NXFxuT2xtZWMvTVxcbk9sbXN0ZWQvTVxcbk9sc2VuL01cXG5PbHNvbi9NXFxuT2x5bXBpYS9TTVxcbk9seW1waWFkL01TXFxuT2x5bXBpYW4vTVNcXG5PbHltcGljL1NNXFxuT2x5bXBpY3MvTVxcbk9seW1wdXMvTVxcbk9tYWhhL01TXFxuT21hbi9NXFxuT21hbmkvTVNcXG5PbWFyL01cXG5PbWF5eWFkL01cXG5PbWR1cm1hbi9NXFxuT21uaXBvdGVudFxcbk9tc2svTVxcbk9uYXNzaXMvTVxcbk9uZWFsL01cXG5PbmVnYS9NXFxuT25lZ2luL01cXG5PbmVpZGEvTVNcXG5Pbmlvbi9NXFxuT25vL01cXG5Pbm9uZGFnYS9NU1xcbk9uc2FnZXIvTVxcbk9udFxcbk9udGFyaWFuXFxuT250YXJpby9NXFxuT29ydC9NXFxuT3BhbC9NXFxuT3BlbC9NXFxuT3Blbk9mZmljZS9NXFxuT3BoZWxpYS9NXFxuT3BoaXVjaHVzL01cXG5PcHBlbmhlaW1lci9NXFxuT3Bwb3NpdGlvblxcbk9wcmFoL01cXG5PcmEvTVxcbk9yYWNsZS9NXFxuT3Jhbi9NXFxuT3JhbmdlL01cXG5PcmFuamVzdGFkL01cXG5PcmJpc29uL01cXG5PcmRvdmljaWFuL01cXG5PcmUvTlxcbk9yZWdcXG5PcmVnb24vTVxcbk9yZWdvbmlhbi9TTVxcbk9yZW0vTVxcbk9yZW8vTVxcbk9yZXN0ZXMvTVxcbk9yaWVudC9NXFxuT3JpZW50YWwvTVNcXG5PcmllbnRhbGlzbVxcbk9yaW4vTVxcbk9yaW5vY28vTVxcbk9yaW9uL01cXG5Pcml5YS9NXFxuT3JpemFiYS9NXFxuT3JrbmV5L01cXG5PcmxhbmRvL01cXG5PcmxlYW5zL01cXG5Pcmxvbi9NU1xcbk9ybHkvTVxcbk9ycGhldXMvTVxcbk9ycGhpYy9NXFxuT3JyL01cXG5PcnRlZ2EvTVxcbk9ydGhvZG94XFxuT3J0aXovTVxcbk9ydmFsL01cXG5PcnZpbGxlL01cXG5PcndlbGwvTVxcbk9yd2VsbGlhbi9NXFxuT3MvTVxcbk9zYWdlL01TXFxuT3Nha2EvTVxcbk9zYmVydC9NXFxuT3Nib3JuL01cXG5Pc2Jvcm5lL01cXG5Pc2Nhci9NU1xcbk9zY2VvbGEvTVxcbk9zZ29vZC9NXFxuT3NoYXdhL01cXG5Pc2hrb3NoL01cXG5Pc2lyaXMvTVxcbk9zbG8vTVxcbk9zbWFuL01cXG5Pc3Ryb2dvdGgvTVxcbk9zdHdhbGQvTVxcbk9zdmFsZG8vTVxcbk9zd2FsZC9NXFxuT3RoZWxsby9NXFxuT3Rpcy9NXFxuT3R0YXdhL1NNXFxuT3R0by9NXFxuT3R0b21hbi9NXFxuT3VhZ2Fkb3Vnb3UvTVxcbk91aWphL01TXFxuT3ZpZC9NXFxuT3dlbi9TTVxcbk93ZW5zL01cXG5Pd2Vuc2Jvcm8vTVxcbk94Zm9yZC9TTVxcbk94bmFyZC9NXFxuT3hvbmlhbi9NXFxuT3h1cy9NXFxuT3h5Y29udGluL01cXG5Pei9NXFxuT3phcmsvTVNcXG5PemFya3MvTVxcbk96eW1hbmRpYXMvTVxcbk96emllL01cXG5QL01OXFxuUEEvTVxcblBBQy9NXFxuUEFSQy9TXFxuUEFTQ0FMXFxuUEJTL01cXG5QQlhcXG5QQy9TTVxcblBDQlxcblBDTUNJQVxcblBDUC9NXFxuUERcXG5QREZcXG5QRFFcXG5QRFRcXG5QRVxcblBFVC9NXFxuUEZDXFxuUEdcXG5QR1BcXG5QSFAvTVxcblBJTlxcblBKJ3NcXG5QTE8vTVxcblBNL1NNREdcXG5QTVMvTVxcblBPXFxuUE9XL01cXG5QUFxcblBQU1xcblBSXFxuUFJDL01cXG5QUk9cXG5QUy9NXFxuUFNUL01cXG5QVFxcblBUQS9NXFxuUFRPXFxuUFZDL01cXG5QV1xcblBYXFxuUGEvTVxcblBhYXIvTVxcblBhYmxvL01cXG5QYWJsdW0vTVxcblBhYnN0L01cXG5QYWNlL01cXG5QYWNoZWNvL01cXG5QYWNpZmljL01cXG5QYWNpbm8vTVxcblBhY2thcmQvTVxcblBhZGFuZ1xcblBhZGVyZXdza2kvTVxcblBhZGlsbGEvTVxcblBhZ2FuaW5pL01cXG5QYWdlL01cXG5QYWdsaWEvTVxcblBhaGxhdmkvTVxcblBhaWdlL01cXG5QYWluZS9NXFxuUGFpdXRlL1NNXFxuUGFraXN0YW4vTVxcblBha2lzdGFuaS9TTVxcblBhbGVtYmFuZy9NXFxuUGFsZW9jZW5lL01cXG5QYWxlb2dlbmUvTVxcblBhbGVvbGl0aGljL01cXG5QYWxlb3pvaWMvTVxcblBhbGVybW8vTVxcblBhbGVzdGluZS9NXFxuUGFsZXN0aW5pYW4vU01cXG5QYWxlc3RyaW5hL01cXG5QYWxleS9NXFxuUGFsaWtpci9NXFxuUGFsaXNhZGVzL01cXG5QYWxsYWRpby9NXFxuUGFsbWRhbGUvTVxcblBhbG1lci9NXFxuUGFsbWVyc3Rvbi9NXFxuUGFsbW9saXZlL01cXG5QYWxteXJhL01cXG5QYWxvbWFyL01cXG5QYW0vTVxcblBhbWVsYS9NXFxuUGFtaXJzL01cXG5QYW1wZXJzL01cXG5QYW4vTVxcblBhbmFtYS9TTVxcblBhbmFtYW5pYW4vTVNcXG5QYW5hc29uaWMvTVxcblBhbmRvcmEvTVxcblBhbmdhZWEvTVxcblBhbmtodXJzdC9NXFxuUGFubXVuam9tL01cXG5QYW5zeS9NXFxuUGFudGFncnVlbC9NXFxuUGFudGFsb29uL01cXG5QYW50aGVvbi9NXFxuUGFuemEvTVxcblBhcmFjZWxzdXMvTVxcblBhcmFjbGV0ZS9NXFxuUGFyYWRpc2VcXG5QYXJhZ3VheS9NXFxuUGFyYWd1YXlhbi9NU1xcblBhcmFseW1waWMvU1xcblBhcmFtYXJpYm8vTVxcblBhcmFtb3VudC9NXFxuUGFyYW5hL01cXG5QYXJjaGVlc2kvTVxcblBhcmV0by9NXFxuUGFyaXMvTVxcblBhcmlzaWFuL01TXFxuUGFyay9TTVJcXG5QYXJrZXIvTVxcblBhcmtlcnNidXJnL01cXG5QYXJraW5zb24vTVxcblBhcmtpbnNvbmlzbVxcblBhcmttYW4vTVxcblBhcmtzL01cXG5QYXJsaWFtZW50L01cXG5QYXJtZW5pZGVzXFxuUGFybWVzYW4vTVNcXG5QYXJuYXNzdXMvTVNcXG5QYXJuZWxsL01cXG5QYXJyL01cXG5QYXJyaXNoL01cXG5QYXJzaWZhbC9NXFxuUGFyc29ucy9NXFxuUGFydGhlbm9uL01cXG5QYXJ0aGlhL01cXG5QYXNhZGVuYS9NXFxuUGFzY2Fnb3VsYS9NXFxuUGFzY2FsL1NNXFxuUGFzY28vTVxcblBhc3F1YWxlL01cXG5QYXNzaW9uL1NNXFxuUGFzc292ZXIvTVNcXG5QYXN0ZXJuYWsvTVxcblBhc3RldXIvTVxcblBhdC9NXFxuUGF0YWdvbmlhL01cXG5QYXRhZ29uaWFuL01cXG5QYXRlL01cXG5QYXRlbC9NXFxuUGF0ZXJzb24vTVxcblBhdG5hL01cXG5QYXRyaWNhL01cXG5QYXRyaWNlL01cXG5QYXRyaWNpYS9NXFxuUGF0cmljay9NXFxuUGF0c3kvTVxcblBhdHRlcnNvbi9NXFxuUGF0dGkvTVxcblBhdHRvbi9NXFxuUGF0dHkvTVxcblBhdWwvR01cXG5QYXVsYS9NXFxuUGF1bGV0dGUvTVxcblBhdWxpL01cXG5QYXVsaW5lL01cXG5QYXVsaW5nL01cXG5QYXZhcm90dGkvTVxcblBhdmxvdi9NXFxuUGF2bG92YS9NXFxuUGF2bG92aWFuL01cXG5QYXduZWUvU01cXG5QYXlQYWwvTVxcblBheW5lL01cXG5QYi9NXFxuUGQvTVxcblBlYWJvZHkvTVxcblBlYWNlL01cXG5QZWFsZS9NXFxuUGVhcmwvTVxcblBlYXJsaWUvTVxcblBlYXJzb24vTVxcblBlYXJ5L01cXG5QZWNob3JhL01cXG5QZWNrL01cXG5QZWNraW5wYWgvTVxcblBlY29zL01cXG5QZWRyby9NXFxuUGVlbC9NXFxuUGVnL01cXG5QZWdhc3VzL01TXFxuUGVnZ3kvTVxcblBlaS9NXFxuUGVpcGluZy9NXFxuUGVraW5nL1NNXFxuUGVraW5nZXNlL1NNXFxuUGVsZS9NXFxuUGVsZWUvTVxcblBlbG9wb25uZXNlL01cXG5QZW1icm9rZS9NXFxuUGVuL01cXG5QZW5hL01cXG5QZW5kZXJlY2tpL01cXG5QZW5lbG9wZS9NXFxuUGVubi9NXFxuUGVubmFcXG5QZW5uZXkvTVxcblBlbm5pbmd0b24vTVxcblBlbm5zeWx2YW5pYS9NXFxuUGVubnN5bHZhbmlhbi9NU1xcblBlbm55L01cXG5QZW5uem9pbC9NXFxuUGVuc2Fjb2xhL01cXG5QZW50YWdvbi9NXFxuUGVudGF0ZXVjaC9NXFxuUGVudGF4L01cXG5QZW50ZWNvc3QvU01cXG5QZW50ZWNvc3RhbC9NU1xcblBlbnRlY29zdGFsaXNtXFxuUGVudGl1bS9TTVxcblBlb3JpYS9NXFxuUGVwaW4vTVxcblBlcHNpL01cXG5QZXB5cy9NXFxuUGVxdW90L01cXG5QZXJjaGVyb24vTVxcblBlcmNpdmFsL01cXG5QZXJjeS9NXFxuUGVyZWxtYW4vTVxcblBlcmV6L01cXG5QZXJpY2xlYW4vTVxcblBlcmljbGVzL01cXG5QZXJraW5zL01cXG5QZXJsL1NNXFxuUGVybS9NXFxuUGVybWFsbG95L01cXG5QZXJtaWFuL01cXG5QZXJub2QvTVxcblBlcm9uL01cXG5QZXJvdC9NXFxuUGVycmllci9NXFxuUGVycnkvUk1cXG5QZXJzZWlkL01cXG5QZXJzZXBob25lL01cXG5QZXJzZXBvbGlzL01cXG5QZXJzZXVzL01cXG5QZXJzaGluZy9NXFxuUGVyc2lhL01cXG5QZXJzaWFuL1NNXFxuUGVydGgvTVxcblBlcnUvTVxcblBlcnV2aWFuL01TXFxuUGVzaGF3YXIvTVxcblBldGFpbi9NXFxuUGV0YWx1bWEvTVxcblBldGUvUk1aXFxuUGV0ZXIvTVxcblBldGVycy9NTlxcblBldGVyc2VuL01cXG5QZXRlcnNvbi9NXFxuUGV0cmEvTVxcblBldHJhcmNoL01cXG5QZXR0eS9NXFxuUGV1Z2VvdC9NXFxuUGZjXFxuUGZpemVyL01cXG5QaEQvTVxcblBoYWVkcmEvTVxcblBoYWV0aG9uL01cXG5QaGFuZXJvem9pYy9NXFxuUGhhcmFvaC9NXFxuUGhhcmFvaHNcXG5QaGFyaXNhaWNcXG5QaGFyaXNhaWNhbFxcblBoYXJpc2VlL01TXFxuUGhla2RhL01cXG5QaGVscHMvTVxcblBoaWRpYXMvTVxcblBoaWwvTVlcXG5QaGlsYWRlbHBoaWEvTVxcblBoaWxieS9NXFxuUGhpbGVtb24vTVxcblBoaWxpcC9NU1xcblBoaWxpcHBlL01cXG5QaGlsaXBwaWFucy9NXFxuUGhpbGlwcGluZS9TTVxcblBoaWxpcHBpbmVzL01cXG5QaGlsaXBzL01cXG5QaGlsaXN0aW5lL01cXG5QaGlsbGlwL1NNXFxuUGhpbGxpcGEvTVxcblBoaWxsaXBzL01cXG5QaGlsbHkvTVxcblBoaXBwcy9NXFxuUGhvYm9zL01cXG5QaG9lYmUvTVxcblBob2VuaWNpYS9NXFxuUGhvZW5pY2lhbi9TTVxcblBob2VuaXgvTVxcblBob3Rvc3RhdC9NU1xcblBob3Rvc3RhdHRlZFxcblBob3Rvc3RhdHRpbmdcXG5QaHJ5Z2lhL01cXG5QaHlsbGlzL01cXG5QaWFmL01cXG5QaWFnZXQvTVxcblBpYW5vbGEvTVxcblBpY2Fzc28vTVxcblBpY2NhZGlsbHkvTVxcblBpY2tlcmluZy9NXFxuUGlja2V0dC9NXFxuUGlja2ZvcmQvTVxcblBpY2t3aWNrL01cXG5QaWN0L01cXG5QaWVkbW9udC9NXFxuUGllcmNlL01cXG5QaWVycmUvTVxcblBpZXJyb3QvTVxcblBpa2UvTVxcblBpbGF0ZS9NU1xcblBpbGF0ZXMvTVxcblBpbGNvbWF5by9NXFxuUGlsZ3JpbS9TTVxcblBpbGxzYnVyeS9NXFxuUGluYXR1Ym8vTVxcblBpbmN1cy9NXFxuUGluZGFyL01cXG5QaW5rZXJ0b24vTVxcblBpbm9jY2hpby9NXFxuUGlub2NoZXQvTVxcblBpbnRlci9NXFxuUGlueWluXFxuUGlwcGluL01cXG5QaXJhZXVzL01cXG5QaXJhbmRlbGxvL01cXG5QaXNhL01cXG5QaXNjZXMvTVxcblBpc2lzdHJhdHVzL01cXG5QaXNzYXJvL01cXG5QaXRjYWlybi9NXFxuUGl0dC9TTVxcblBpdHRtYW4vTVxcblBpdHRzL01cXG5QaXR0c2J1cmdoL01cXG5QaXR0c2ZpZWxkL01cXG5QaXVzL01cXG5QaXphcnJvL01cXG5Qa3d5XFxuUGxcXG5QbGFuY2svTVxcblBsYW5vXFxuUGxhbnRhZ2VuZXQvTVxcblBsYXN0aWNpbmUvTVxcblBsYXRhZWEvTVxcblBsYXRoL01cXG5QbGF0by9NXFxuUGxhdG9uaWNcXG5QbGF0b25pc20vTVxcblBsYXRvbmlzdC9NXFxuUGxhdHRlL01cXG5QbGF1dHVzL01cXG5QbGF5U3RhdGlvbi9NXFxuUGxheWJveS9NXFxuUGxheXRleC9NXFxuUGxlaWFkZXMvTVxcblBsZWlzdG9jZW5lL01cXG5QbGV4aWdsYXMvTVNcXG5QbGlueS9NXFxuUGxpb2NlbmUvU01cXG5QbHV0YXJjaC9NXFxuUGx1dG8vTVxcblBseW1vdXRoL01cXG5QbS9NXFxuUG8vTVxcblBvY2Fob250YXMvTVxcblBvY2F0ZWxsby9NXFxuUG9jb25vL1NNXFxuUG9jb25vcy9NXFxuUG9kZ29yaWNhL01cXG5Qb2Rob3JldHovTVxcblBvZHVuay9NXFxuUG9lL01cXG5Qb2dvL01cXG5Qb2luY2FyZS9NXFxuUG9pcmV0L01cXG5Qb2lyb3QvTVxcblBvaXNzb24vTVxcblBvaXRpZXIvTVxcblBva2Vtb24vTVxcblBvbC9NWVxcblBvbGFuZC9NXFxuUG9sYW5za2kvTVxcblBvbGFyaXMvTVxcblBvbGFyb2lkL01TXFxuUG9sZS9TTVxcblBvbGlzaC9NXFxuUG9saXRidXJvL01cXG5Qb2xrL01cXG5Qb2xsYXJkL01cXG5Qb2xsb2NrL01cXG5Qb2xsdXgvTVxcblBvbGx5L01cXG5Qb2xseWFubmEvTVxcblBvbG8vTVxcblBvbHRhdmEvTVxcblBvbHloeW1uaWEvTVxcblBvbHluZXNpYS9NXFxuUG9seW5lc2lhbi9NU1xcblBvbHlwaGVtdXMvTVxcblBvbWVyYW5pYS9NXFxuUG9tZXJhbmlhbi9NXFxuUG9tb25hL01cXG5Qb21wYWRvdXIvTVxcblBvbXBlaWFuXFxuUG9tcGVpaS9NXFxuUG9tcGV5L01cXG5Qb25jZS9NXFxuUG9udGNoYXJ0cmFpbi9NXFxuUG9udGlhYy9NXFxuUG9udGlhbmFrL01cXG5Qb29oL01cXG5Qb29sZS9NXFxuUG9vbmEvTVxcblBvcGUvTVxcblBvcGV5ZS9NXFxuUG9wb2NhdGVwZXRsL01cXG5Qb3BwZXIvTVxcblBvcHBpbnMvTVxcblBvcHNpY2xlL01cXG5Qb3JmaXJpby9NXFxuUG9ycmltYS9NXFxuUG9yc2NoZS9NXFxuUG9ydC9NUlxcblBvcnRlci9NXFxuUG9ydGVydmlsbGUvTVxcblBvcnRpYS9NXFxuUG9ydGxhbmQvTVxcblBvcnRvL01cXG5Qb3J0c21vdXRoL01cXG5Qb3J0dWdhbC9NXFxuUG9ydHVndWVzZS9NXFxuUG9zZWlkb24vTVxcblBvc3QvTVxcblBvc3RncmVTUUwvTVxcblBvdGVta2luL01cXG5Qb3RvbWFjL01cXG5Qb3RzZGFtL01cXG5Qb3R0YXdhdG9taWUvTVxcblBvdHRlci9NXFxuUG90dHMvTVxcblBvdHRzdG93bi9NXFxuUG91Z2hrZWVwc2llL01cXG5Qb3VuZC9NXFxuUG91c3Npbi9NXFxuUG93ZWxsL01cXG5Qb3dlclBDL01cXG5Qb3dlclBvaW50L01cXG5Qb3dlcnMvTVxcblBvd2hhdGFuL01cXG5Qb3puYW4vTVxcblByL01cXG5QcmFkYS9NXFxuUHJhZG8vTVxcblByYWV0b3JpYW4vTVxcblByYWd1ZS9NXFxuUHJhaWEvTVxcblByYWtyaXQvTVxcblByYXRjaGV0dC9NXFxuUHJhdHQvTVxcblByYXZkYS9NXFxuUHJheGl0ZWxlcy9NXFxuUHJlYWtuZXNzL01cXG5QcmVjYW1icmlhbi9NXFxuUHJlbWluZ2VyL01cXG5QcmVteXNsaWQvTVxcblByZW5zYS9NXFxuUHJlbnRpY2UvTVxcblByZXNcXG5QcmVzYnl0ZXJpYW4vU01cXG5QcmVzYnl0ZXJpYW5pc20vTVNcXG5QcmVzY290dC9NXFxuUHJlc2xleS9NXFxuUHJlc3Rvbi9NXFxuUHJldG9yaWEvTVxcblByaWFtL01cXG5QcmliaWxvZi9NXFxuUHJpY2UvTVxcblByaWNlbGluZS9NXFxuUHJpZXN0bGV5L01cXG5QcmluY2UvTVxcblByaW5jZXRvbi9NXFxuUHJpbmNpcGUvTVxcblByaXNjaWxsYS9NXFxuUHJpdXMvTVxcblByaXZhdGVcXG5Qcm9jcnVzdGVhbi9NXFxuUHJvY3J1c3Rlcy9NXFxuUHJvY3Rlci9NXFxuUHJvY3lvbi9NXFxuUHJvZlxcblByb2hpYml0aW9uXFxuUHJva29maWV2L01cXG5Qcm9tZXRoZWFuL01cXG5Qcm9tZXRoZXVzL01cXG5Qcm9waGV0c1xcblByb3NlcnBpbmEvTVxcblByb3NlcnBpbmUvTVxcblByb3RhZ29yYXMvTVxcblByb3Rlcm96b2ljL01cXG5Qcm90ZXN0YW50L01TXFxuUHJvdGVzdGFudGlzbS9TTVxcblByb3RldXMvTVxcblByb3VkaG9uL01cXG5Qcm91c3QvTVxcblByb3ZlbmNhbC9NU1xcblByb3ZlbmNlL01cXG5Qcm92ZXJic1xcblByb3ZpZGVuY2UvU01cXG5Qcm92by9NXFxuUHJvemFjL01TXFxuUHJ1ZGVuY2UvTVxcblBydWRlbnRpYWwvTVxcblBydWl0dC9NXFxuUHJ1c3NpYS9NXFxuUHJ1c3NpYW4vTVNcXG5QcnV0L01cXG5Qcnlvci9NXFxuUHNhbG1zL01cXG5Qc2FsdGVyL01TXFxuUHN5Y2hlL01cXG5QdC9NXFxuUHRhaC9NXFxuUHRvbGVtYWljL01cXG5QdG9sZW15L1NNXFxuUHUvTVxcblB1Y2NpbmkvTVxcblB1Y2svTVxcblB1Y2tldHQvTVxcblB1ZWJsYS9NXFxuUHVlYmxvL01cXG5QdWVydG9cXG5QdWdldC9NXFxuUHVnaC9NXFxuUHVsYXNraS9NXFxuUHVsaXR6ZXIvTVxcblB1bGxtYW4vTVNcXG5QdW5jaC9NXFxuUHVuaWMvTVxcblB1bmphYi9NXFxuUHVuamFiaS9NXFxuUHVyYW5hL01cXG5QdXJjZWxsL01cXG5QdXJkdWUvTVxcblB1cmltL01TXFxuUHVyaW5hL01cXG5QdXJpdGFuL01cXG5QdXJpdGFuaXNtL01TXFxuUHVydXMvTVxcblB1c2FuL01cXG5QdXNleS9NXFxuUHVzaGtpbi9NXFxuUHVzaHR1L01cXG5QdXRpbi9NXFxuUHV0bmFtL01cXG5QdXpvL01cXG5QdnRcXG5QeVRvcmNoL01cXG5QeWdtYWxpb24vTVxcblB5Z215L1NNXFxuUHlsZS9NXFxuUHltL01cXG5QeW5jaG9uL01cXG5QeW9uZ3lhbmcvTVxcblB5b3RyL01cXG5QeXJlbmVlcy9NXFxuUHlyZXgvTVNcXG5QeXJyaGljL01cXG5QeXRoYWdvcmFzL01cXG5QeXRoYWdvcmVhbi9NXFxuUHl0aGlhcy9NXFxuUHl0aG9uL01cXG5RXFxuUUFcXG5RQlxcblFDXFxuUUVEXFxuUU1cXG5RV0VSVFlcXG5RYWRkYWZpL01cXG5RYW50YXMvTVxcblFhdGFyL01cXG5RYXRhcmkvTVNcXG5RaW5nZGFvL01cXG5RaW5naGFpL01cXG5RaXFpaGFyL01cXG5Rb20vTVxcblF1YWFsdWRlL01cXG5RdWFrZXIvTVNcXG5RdWFrZXJpc20vU01cXG5RdWFsY29tbS9NXFxuUXVhb2FyL01cXG5RdWFzaW1vZG8vTVxcblF1YXRlcm5hcnkvTVxcblF1YXlsZS9NXFxuUXVlXFxuUXVlYmVjL01cXG5RdWViZWNvaXMvTVxcblF1ZWNodWEvTVxcblF1ZWVuL01TXFxuUXVlZW5zL01cXG5RdWVlbnNsYW5kL01cXG5RdWVudGluL01cXG5RdWV0emFsY29hdGwvTVxcblF1ZXpvbi9NXFxuUXVpbmN5L01cXG5RdWlubi9NXFxuUXVpbnRpbGlhbi9NXFxuUXVpbnRvbi9NXFxuUXVpcmluYWwvTVxcblF1aXNsaW5nL01cXG5RdWl0by9NXFxuUXVpeG90ZS9NXFxuUXVpeG90aXNtL01cXG5RdW1yYW4vTVxcblF1b25zZXQvTVxcblF1cmFuXFxuUXVyYW5pY1xcblIvTVxcblJBRi9NXFxuUkFNL1NNXFxuUkJJXFxuUkNcXG5SQ0EvTVxcblJDTVBcXG5SRFxcblJEQVxcblJEUy9NXFxuUkVJVFxcblJFTS9TTVxcblJGXFxuUkZDL1NcXG5SRkRcXG5SSVxcblJJRlxcblJJUFxcblJJU0NcXG5STi9NXFxuUk5BL01cXG5ST0ZMXFxuUk9NL01cXG5ST1RDL01cXG5SUFxcblJSXFxuUlNGU1JcXG5SU0lcXG5SU1ZcXG5SU1ZQXFxuUlRGTVxcblJWL1NNXFxuUmEvTVxcblJhYmF0L01cXG5SYWJlbGFpcy9NXFxuUmFiZWxhaXNpYW4vTVxcblJhYmluL01cXG5SYWNoYWVsL01cXG5SYWNoZWwvTVxcblJhY2hlbGxlL01cXG5SYWNobWFuaW5vZmYvTVxcblJhY2luZS9NXFxuUmFkY2xpZmYvTVxcblJhZGNsaWZmZS9NXFxuUmFlL01cXG5SYWZhZWwvTVxcblJhZmZsZXMvTVxcblJhZ25hcm9rL01cXG5SYWluaWVyL01cXG5SYWxlaWdoL01cXG5SYWxwaC9NXFxuUmFtYS9NXFxuUmFtYWRhL01cXG5SYW1hZGFuL01TXFxuUmFtYWtyaXNobmEvTVxcblJhbWFudWphbi9NXFxuUmFtYXlhbmEvTVxcblJhbWJvL01cXG5SYW1pcmV6L01cXG5SYW1pcm8vTVxcblJhbW9uL01cXG5SYW1vbmEvTVxcblJhbW9zL01cXG5SYW1zYXkvTVxcblJhbXNlcy9NXFxuUmFtc2V5L01cXG5SYW5kL01cXG5SYW5kYWwvTVxcblJhbmRhbGwvTVxcblJhbmRlbGwvTVxcblJhbmRpL01cXG5SYW5kb2xwaC9NXFxuUmFuZHkvTVxcblJhbmdvb24vTVxcblJhbmtpbi9NXFxuUmFua2luZS9NXFxuUmFvdWwvTVxcblJhcGhhZWwvTVxcblJhcHBhcG9ydC9NXFxuUmFwdW56ZWwvTVxcblJhcXVlbC9NXFxuUmFzYWxnZXRoaS9NXFxuUmFzYWxoYWd1ZS9NXFxuUmFzbXVzc2VuL01cXG5SYXNwdXRpbi9NXFxuUmFzdGFcXG5SYXN0YWJhbi9NXFxuUmFzdGFmYXJpYW4vTVNcXG5SYXN0YWZhcmlhbmlzbVxcblJhdGhlci9NXFxuUmF0bGlmZi9NXFxuUmF1bC9NXFxuUmF2ZWwvTVxcblJhd2FscGluZGkvTVxcblJheS9NXFxuUmF5QmFuL01cXG5SYXlidXJuL01cXG5SYXlsZWlnaC9NXFxuUmF5bW9uZC9NXFxuUmF5bXVuZG8vTVxcblJiL01cXG5SZFxcblJlL01cXG5SZWFkaW5nL01cXG5SZWFnYW4vTVxcblJlYWdhbm9taWNzL01cXG5SZWFsdG9yL01cXG5SZWFzb25lci9NXFxuUmViYS9NXFxuUmViZWthaC9NXFxuUmVjaWZlL01cXG5SZWNvbnN0cnVjdGlvbi9NXFxuUmVkZGluZy9NXFxuUmVkZWVtZXIvTVxcblJlZGZvcmQvTVxcblJlZGdyYXZlL01cXG5SZWRpcy9NXFxuUmVkbW9uZC9NXFxuUmVkc2hpZnQvTVxcblJlZWJvay9NXFxuUmVlZC9NXFxuUmVlc2UvTVxcblJlZXZlcy9NXFxuUmVmb3JtYXRpb24vTVNcXG5SZWZ1Z2lvL01cXG5SZWdnaWUvTVxcblJlZ2luYS9NXFxuUmVnaW5hZS9NXFxuUmVnaW5hbGQvTVxcblJlZ29yL01cXG5SZWd1bHVzL01cXG5SZWhucXVpc3QvTVxcblJlaWNoL01cXG5SZWljaHN0YWcnc1xcblJlaWQvTVxcblJlaWxseS9NXFxuUmVpbmFsZG8vTVxcblJlaW5oYXJkdC9NXFxuUmVpbmhvbGQvTVxcblJlbWFycXVlL01cXG5SZW1icmFuZHQvTVxcblJlbWluZ3Rvbi9NXFxuUmVtdXMvTVxcblJlbmEvTVxcblJlbmFpc3NhbmNlL1NNXFxuUmVuYXNjZW5jZVxcblJlbmF1bHQvTVxcblJlbmUvTVxcblJlbmVlL01cXG5SZW5vL01cXG5SZW5vaXIvTVxcblJlcFxcblJlcHJlc2VudGF0aXZlXFxuUmVwdWJsaWNhbi9TTVxcblJlcHVibGljYW5pc21cXG5SZXF1aWVtL01TXFxuUmVzaXN0YW5jZVxcblJlc3RvcmF0aW9uL01cXG5SZXN1cnJlY3Rpb25cXG5SZXViZW4vTVxcblJldW5pb24vTVxcblJldXRlcnMvTVxcblJldXRoZXIvTVxcblJldlxcblJldmEvTVxcblJldmVsYXRpb24vU01cXG5SZXZlbGF0aW9ucy9NXFxuUmV2ZXJlL01cXG5SZXZlcmVuZC9NXFxuUmV2bG9uL01cXG5SZXgvTVxcblJleWVzL01cXG5SZXlramF2aWsvTVxcblJleW5hL01cXG5SZXluYWxkby9NXFxuUmV5bm9sZHMvTVxcblJmL01cXG5SaC9NXFxuUmhlYS9NXFxuUmhlZS9NXFxuUmhlaW5nYXUvTVxcblJoZW5pc2gvTVxcblJoaWFubm9uL01cXG5SaGluZS9NXFxuUmhpbmVsYW5kL01cXG5SaG9kYS9NXFxuUmhvZGUvU1xcblJob2Rlcy9NXFxuUmhvZGVzaWEvTVxcblJob2Rlc2lhblxcblJob25kYS9NXFxuUmhvbmUvTVxcblJpYmJlbnRyb3AvTVxcblJpY2FyZG8vTVxcblJpY2UvTVxcblJpY2gvTVxcblJpY2hhcmQvTVNcXG5SaWNoYXJkcy9NXFxuUmljaGFyZHNvbi9NXFxuUmljaGVsaWV1L01cXG5SaWNoaWUvTVxcblJpY2htb25kL01cXG5SaWNodGVyL01cXG5SaWNodGhvZmVuL01cXG5SaWNrL01cXG5SaWNrZW5iYWNrZXIvTVxcblJpY2tleS9NXFxuUmlja2llL01cXG5SaWNrb3Zlci9NXFxuUmlja3kvTVxcblJpY28vTVxcblJpZGRsZS9NXFxuUmlkZS9NXFxuUmllZmVuc3RhaGwvTVxcblJpZWwvTVxcblJpZW1hbm4vTVxcblJpZXNsaW5nL01TXFxuUmlnYS9NXFxuUmlnZWwvTVxcblJpZ2dzL01cXG5SaWdodFxcblJpZ29iZXJ0by9NXFxuUmlnb2xldHRvL01cXG5SaWxleS9NXFxuUmlsa2UvTVxcblJpbWJhdWQvTVxcblJpbmdsaW5nL01cXG5SaW5nby9NXFxuUmlvL1NNXFxuUmlvcy9NXFxuUmlwbGV5L01cXG5SaXNvcmdpbWVudG8vTVxcblJpdGEvTVxcblJpdGFsaW4vTVxcblJpdHovTVxcblJpdmFzL01cXG5SaXZlcmEvTVxcblJpdmVycy9NXFxuUml2ZXJzaWRlL01cXG5SaXZpZXJhL01TXFxuUml5YWRoL01cXG5SaXphbC9NXFxuUm4vTVxcblJvYWNoL01cXG5Sb2Fub2tlL01cXG5Sb2IvTVxcblJvYmJpZS9NXFxuUm9iYmluL01TXFxuUm9iYmlucy9NXFxuUm9iYnkvTVxcblJvYmVyc29uL01cXG5Sb2JlcnQvTVNcXG5Sb2JlcnRhL01cXG5Sb2JlcnRvL01cXG5Sb2JlcnRzL01cXG5Sb2JlcnRzb24vTVxcblJvYmVzb24vTVxcblJvYmVzcGllcnJlL01cXG5Sb2Jpbi9NXFxuUm9iaW5zb24vTVxcblJvYml0dXNzaW4vTVxcblJvYmxlcy9NXFxuUm9ic29uL01cXG5Sb2J0L01cXG5Sb2J5bi9NXFxuUm9jY28vTVxcblJvY2hhL01cXG5Sb2NoYW1iZWF1L01cXG5Sb2NoZS9NXFxuUm9jaGVsbGUvTVxcblJvY2hlc3Rlci9NXFxuUm9jay9NXFxuUm9ja2VmZWxsZXIvTVxcblJvY2tmb3JkL01cXG5Sb2NraWVzL01cXG5Sb2NrbmUvTVxcblJvY2t3ZWxsL01cXG5Sb2NreS9TTVxcblJvZC9NXFxuUm9kZGVuYmVycnkvTVxcblJvZGVyaWNrL01cXG5Sb2RnZXIvTVNcXG5Sb2RnZXJzL01cXG5Sb2Rpbi9NXFxuUm9kbmV5L01cXG5Sb2RvbGZvL01cXG5Sb2RyaWNrL01cXG5Sb2RyaWdvL01cXG5Sb2RyaWd1ZXovTVxcblJvZHJpcXVlei9NXFxuUm9lZy9NXFxuUm9lbnRnZW5cXG5Sb2dlbGlvL01cXG5Sb2dlci9NU1xcblJvZ2Vycy9NXFxuUm9nZXQvTVxcblJvamFzL01cXG5Sb2t1L01cXG5Sb2xhaWRzL01cXG5Sb2xhbmQvTVxcblJvbGFuZG8vTVxcblJvbGV4L01cXG5Sb2xsYW5kL01cXG5Sb2xsZXJibGFkZS9NXFxuUm9sbGlucy9NXFxuUm9sb2RleC9NXFxuUm9sdmFhZy9NXFxuUm9tXFxuUm9tYW4vTVNcXG5Sb21hbmVzcXVlL01TXFxuUm9tYW5pYS9NXFxuUm9tYW5pYW4vTVNcXG5Sb21hbm8vTVxcblJvbWFub3YvTVxcblJvbWFucy9NXFxuUm9tYW5zaC9NXFxuUm9tYW50aWNpc21cXG5Sb21hbnkvU01cXG5Sb21lL1NNXFxuUm9tZW8vTVxcblJvbWVyby9NXFxuUm9tbWVsL01cXG5Sb21uZXkvTVxcblJvbXVsdXMvTVxcblJvbi9NXFxuUm9uYWxkL01cXG5Sb25kYS9NXFxuUm9ubmllL01cXG5Sb25ueS9NXFxuUm9uc3RhZHQvTVxcblJvbnRnZW5cXG5Sb29uZXkvTVxcblJvb3NldmVsdC9NXFxuUm9vdC9NXFxuUm9xdWVmb3J0L1NNXFxuUm9yc2NoYWNoL01cXG5Sb3J5L01cXG5Sb3NhL01cXG5Sb3NhbGVzL01cXG5Sb3NhbGllL01cXG5Sb3NhbGluZC9NXFxuUm9zYWxpbmRhL01cXG5Sb3NhbHluL01cXG5Sb3Nhbm5hL01cXG5Sb3Nhbm5lL01cXG5Sb3NhcmlvL01cXG5Sb3Njb2UvTVxcblJvc2UvTVxcblJvc2Vhbm4vTVxcblJvc2VhdS9NXFxuUm9zZWNyYW5zL01cXG5Sb3NlbGxhL01cXG5Sb3NlbWFyaWUvTVxcblJvc2VtYXJ5L01cXG5Sb3NlbmJlcmcvTVxcblJvc2VuZG8vTVxcblJvc2VuendlaWcvTVxcblJvc2V0dGEvTVxcblJvc2ljcnVjaWFuL01cXG5Sb3NpZS9NXFxuUm9zbHluL01cXG5Sb3NzL01cXG5Sb3NzZXR0aS9NXFxuUm9zc2luaS9NXFxuUm9zdGFuZC9NXFxuUm9zdG92L01cXG5Sb3N0cm9wb3ZpY2gvTVxcblJvc3dlbGwvTVxcblJvdGFyaWFuL01cXG5Sb3RoL01cXG5Sb3Roa28vTVxcblJvdGhzY2hpbGQvTVxcblJvdHRlcmRhbS9NXFxuUm90dHdlaWxlci9NXFxuUm91YXVsdC9NXFxuUm91cmtlL01cXG5Sb3Vzc2VhdS9NXFxuUm92ZS9STVxcblJvdmVyL01cXG5Sb3dlL01cXG5Sb3dlbmEvTVxcblJvd2xhbmQvTVxcblJvd2xpbmcvTVxcblJveGFubmUvTVxcblJveGllL01cXG5Sb3h5L01cXG5Sb3kvTVxcblJveWFsL01cXG5Sb3ljZS9NXFxuUm96ZWxsZS9NXFxuUnRlXFxuUnUvTUhcXG5SdWJhaXlhdC9NXFxuUnViYmVybWFpZC9NXFxuUnViZW4vU01cXG5SdWJlbnMvTVxcblJ1Ymljb24vTVNcXG5SdWJpay9NXFxuUnViaW4vTVxcblJ1Ymluc3RlaW4vTVxcblJ1YnkvTVxcblJ1Y2hiYWgvTVxcblJ1ZG9sZi9NXFxuUnVkb2xwaC9NXFxuUnVkeS9NXFxuUnVkeWFyZC9NXFxuUnVmdXMvTVxcblJ1aHIvTVxcblJ1aXovTVxcblJ1a2V5c2VyL01cXG5SdW1wZWxzdGlsdHNraW4vTVxcblJ1bXNmZWxkL01cXG5SdW5ueW1lZGUvTVxcblJ1bnlvbi9NXFxuUnVwZXJ0L01cXG5SdXNoL01cXG5SdXNoZGllL01cXG5SdXNobW9yZS9NXFxuUnVza2luL01cXG5SdXNzL01cXG5SdXNzZWwvTVxcblJ1c3NlbGwvTVxcblJ1c3NpYS9NXFxuUnVzc2lhbi9TTVxcblJ1c3NvL01cXG5SdXN0YmVsdC9NXFxuUnVzdHkvTVxcblJ1dGFuL01cXG5SdXRnZXJzL01cXG5SdXRoL01cXG5SdXRoZXJmb3JkL01cXG5SdXRoaWUvTVxcblJ1dGxlZGdlL01cXG5Sd2FuZGEvTVNcXG5Sd2FuZGFuL1NNXFxuUnd5XFxuUnhcXG5SeVxcblJ5YW4vTVxcblJ5ZGJlcmcvTVxcblJ5ZGVyL01cXG5SeXVreXUvTVxcblMvTU5cXG5TQVxcblNBQ1xcblNBTFQvTVxcblNBTS9NXFxuU0FQL01cXG5TQVJTL01cXG5TQVNFXFxuU0FUXFxuU0JBXFxuU0MvTVxcblNDU0kvTVxcblNEXFxuU0RJXFxuU0UvTVxcblNFQVRPXFxuU0VDL01cXG5TRlxcblNHTUwvTVxcblNJRFMvTVxcblNKXFxuU0pXXFxuU0tcXG5TTFJcXG5TTy9TXFxuU09CL01cXG5TT1AvTVxcblNPUy9NXFxuU09TZXNcXG5TUENBXFxuU1BGXFxuU1FMXFxuU1FMaXRlL01cXG5TUk9cXG5TU1xcblNTQVxcblNTRS9NXFxuU1NTXFxuU1NUXFxuU1NXL01cXG5TVFxcblNURFxcblNUT0xcXG5TVVNFL01cXG5TVVZcXG5TVk4vTVxcblNXL01cXG5TV0FLXFxuU1dBVFxcblNhYWIvTVxcblNhYXIvTVxcblNhYXJpbmVuL01cXG5TYWF0Y2hpL01cXG5TYWJiYXRoL01cXG5TYWJiYXRoc1xcblNhYmlrL01cXG5TYWJpbi9NXFxuU2FiaW5hL01cXG5TYWJpbmUvTVxcblNhYnJlL01cXG5TYWJyaW5hL01cXG5TYWNhamF3ZWEvTVxcblNhY2NvL01cXG5TYWNocy9NXFxuU2FjcmFtZW50by9NXFxuU2FkYXQvTVxcblNhZGRhbS9NXFxuU2FkZHVjZWUvTVxcblNhZGUvTVxcblNhZGllL01cXG5TYWRyL01cXG5TYWZhdmlkL01cXG5TYWZld2F5L01cXG5TYWdhbi9NXFxuU2FnaW5hdy9NXFxuU2FnaXR0YXJpdXMvTVNcXG5TYWhhcmEvTVxcblNhaGFyYW4vTVxcblNhaGVsL01cXG5TYWlnb24vTVxcblNhaXBoL01cXG5TYWthaS9NXFxuU2FraGEvTVxcblNha2hhbGluL01cXG5TYWtoYXJvdi9NXFxuU2FraS9NXFxuU2Frcy9NXFxuU2FsL01ZXFxuU2FsYWRpbi9NXFxuU2FsYWRvL01cXG5TYWxhbWlzL01cXG5TYWxhcy9NXFxuU2FsYXphci9NXFxuU2FsZW0vTVxcblNhbGVybm8vTVxcblNhbGVzZm9yY2UvTVxcblNhbGluYXMvTVxcblNhbGluZ2VyL01cXG5TYWxpc2J1cnkvTVxcblNhbGlzaC9NXFxuU2Fsay9NXFxuU2FsbGllL01cXG5TYWxsdXN0L01cXG5TYWxseS9NXFxuU2Fsb21lL01cXG5TYWxvbmlrYS9NXFxuU2FsdG9uL01cXG5TYWx2YWRvci9NXFxuU2FsdmFkb3Jhbi9TTVxcblNhbHZhZG9yZWFuL01TXFxuU2FsdmFkb3JpYW4vTVNcXG5TYWx2YXRvcmUvTVxcblNhbHdlZW4vTVxcblNhbHl1dC9NXFxuU2FtL01cXG5TYW1hbnRoYS9NXFxuU2FtYXIvTVxcblNhbWFyYS9NXFxuU2FtYXJpdGFuL01TXFxuU2FtYXJrYW5kL01cXG5TYW1taWUvTVxcblNhbW15L01cXG5TYW1vYS9NXFxuU2Ftb2FuL1NNXFxuU2Ftb3NldC9NXFxuU2Ftb3llZC9NXFxuU2FtcHNvbi9NXFxuU2Ftc29uL01cXG5TYW1zb25pdGUvTVxcblNhbXN1bmcvTVxcblNhbXVlbC9NXFxuU2FtdWVsc29uL01cXG5TYW4nYVxcblNhbi9NXFxuU2FuYS9NXFxuU2FuY2hlei9NXFxuU2FuY2hvL01cXG5TYW5kL1pNXFxuU2FuZGJ1cmcvTVxcblNhbmRlcnMvTVxcblNhbmRpbmlzdGEvTVxcblNhbmRvdmFsL01cXG5TYW5kcmEvTVxcblNhbmR5L01cXG5TYW5mb3JkL01cXG5TYW5mb3JpemVkL01cXG5TYW5nL01SXFxuU2FuZ2VyL01cXG5TYW5oZWRyaW4vTVxcblNhbmthL01cXG5TYW5rYXJhL01cXG5TYW5za3JpdC9NXFxuU2FudGEvTVxcblNhbnRhbmEvTVxcblNhbnRheWFuYS9NXFxuU2FudGVyaWEvTVxcblNhbnRpYWdvL01cXG5TYW50b3MvTVxcblNhcHBoby9NXFxuU2FwcG9yby9NXFxuU2FyYS9NXFxuU2FyYWNlbi9NU1xcblNhcmFnb3NzYS9NXFxuU2FyYWgvTVxcblNhcmFqZXZvL01cXG5TYXJhbi9NXFxuU2FyYXNvdGEvTVxcblNhcmF0b3YvTVxcblNhcmF3YWsvTVxcblNhcmRpbmlhL01cXG5TYXJnYXNzby9NXFxuU2FyZ2VudC9NXFxuU2FyZ29uL01cXG5TYXJub2ZmL01cXG5TYXJveWFuL01cXG5TYXJ0by9NXFxuU2FydHJlL01cXG5TYXNoYS9NXFxuU2Fza1xcblNhc2thdGNoZXdhbi9NXFxuU2Fza2F0b29uL01cXG5TYXNxdWF0Y2gvTVNcXG5TYXNzYW5pYW4vTVxcblNhc3Nvb24vTVxcblNhdC9NXFxuU2F0YW4vTVxcblNhdGFuaXNtL01cXG5TYXRhbmlzdC9NXFxuU2F0dXJkYXkvTVNcXG5TYXR1cm4vTVxcblNhdHVybmFsaWEvTVxcblNhdWRpL01TXFxuU2F1bC9NXFxuU2F1bmRlcnMvTVxcblNhdW5kcmEvTVxcblNhdXNzdXJlL01cXG5TYXV0ZXJuZXNcXG5TYXZhZ2UvTVxcblNhdmFubmFoL01cXG5TYXZpb3IvTVxcblNhdm9uYXJvbGEvTVxcblNhdm95L01cXG5TYXZveWFyZC9NXFxuU2F3eWVyL01cXG5TYXhvbi9NU1xcblNheG9ueS9NXFxuU2F5ZXJzL01cXG5TYi9NXFxuU2MvTVxcblNjYWxhL01cXG5TY2FuXFxuU2NhbmRpbmF2aWEvTVxcblNjYW5kaW5hdmlhbi9NU1xcblNjYXJhbW91Y2gvTVxcblNjYXJib3JvdWdoL01cXG5TY2FybGF0dGkvTVxcblNjaGVhdC9NXFxuU2NoZWRhci9NXFxuU2NoZWhlcmF6YWRlL01cXG5TY2hlbGxpbmcvTVxcblNjaGVuZWN0YWR5L01cXG5TY2hpYXBhcmVsbGkvTVxcblNjaGljay9NXFxuU2NoaWxsZXIvTVxcblNjaGluZGxlci9NXFxuU2NobGVzaW5nZXIvTVxcblNjaGxpZW1hbm4vTVxcblNjaGxpdHovTVxcblNjaGxvc3MvTVxcblNjaG1pZHQvTVxcblNjaG5hYmVsL01cXG5TY2huYXV6ZXIvTVxcblNjaG5laWRlci9NXFxuU2Nob2VuYmVyZy9NXFxuU2Nob3BlbmhhdWVyL01cXG5TY2hyaWVmZmVyL01cXG5TY2hyb2Rpbmdlci9NXFxuU2Nocm9lZGVyL01cXG5TY2h1YmVydC9NXFxuU2NodWx0ei9NXFxuU2NodWx6L01cXG5TY2h1bWFubi9NXFxuU2NodW1wZXRlci9NXFxuU2NodXlsZXIvTVxcblNjaHV5bGtpbGwvTVxcblNjaHdhcnR6L01cXG5TY2h3YXJ6ZW5lZ2dlci9NXFxuU2Nod2FyemtvcGYvTVxcblNjaHdlaXR6ZXIvTVxcblNjaHdlcHBlcy9NXFxuU2Nod2luZ2VyL01cXG5TY2h3aW5uL01cXG5TY2llbnRvbG9naXN0L1NNXFxuU2NpZW50b2xvZ3kvTVxcblNjaXBpby9NXFxuU2NvcGVzL01cXG5TY29ycGlvL1NNXFxuU2NvcnBpdXMvTVxcblNjb3JzZXNlL01cXG5TY290L1NNXFxuU2NvdGNoL01TXFxuU2NvdGNobWFuL01cXG5TY290Y2htZW4vTVxcblNjb3RjaHdvbWFuL01cXG5TY290Y2h3b21lbi9NXFxuU2NvdGlhL01cXG5TY290bGFuZC9NXFxuU2NvdHNtYW4vTVxcblNjb3RzbWVuL01cXG5TY290c3dvbWFuL01cXG5TY290c3dvbWVuL01cXG5TY290dC9NXFxuU2NvdHRpZS9TTVxcblNjb3R0aXNoL01cXG5TY290dHNkYWxlL01cXG5TY3JhYmJsZS9NU1xcblNjcmFudG9uL01cXG5TY3JpYWJpbi9NXFxuU2NyaWJuZXIvTVxcblNjcmlwdHVyZS9TTVxcblNjcm9vZ2UvTVxcblNjcnVnZ3MvTVxcblNjdWQvTVxcblNjdWxsZXkvTVxcblNjeWxsYS9NXFxuU2N5dGhpYS9NXFxuU2N5dGhpYW4vTVxcblNlL01IXFxuU2VhYm9yZy9NXFxuU2VhZ3JhbS9NXFxuU2Vhbi9NXFxuU2VhcnMvTVxcblNlYXNpZGUvTVxcblNlYXR0bGUvTVxcblNlYmFzdGlhbi9NXFxuU2VicmluZy9NXFxuU2VjXFxuU2Vjb25hbC9NXFxuU2VjcmV0YXJpYXQvTVxcblNlY3JldGFyeVxcblNlZGVyL01TXFxuU2VkbmEvTVxcblNlZWJlY2svTVxcblNlZWdlci9NXFxuU2VnYS9NXFxuU2Vnb3ZpYS9NXFxuU2VncmUvTVxcblNlZ3VuZG8vTVxcblNlZ3dheS9TXFxuU2Vpa28vTVxcblNlaW5lL01cXG5TZWluZmVsZC9NXFxuU2Vqb25nL01cXG5TZWxhc3NpZS9NXFxuU2VsZWN0cmljL01cXG5TZWxlbmEvTVxcblNlbGV1Y2lkL01cXG5TZWxldWN1cy9NXFxuU2VsaW0vTVxcblNlbGp1ay9NXFxuU2Vsa2lyay9NXFxuU2VsbGVycy9NXFxuU2VsbWEvTVxcblNlbHpuaWNrL01cXG5TZW1hcmFuZy9NXFxuU2VtaW5vbGUvTVNcXG5TZW1pcmFtaXMvTVxcblNlbWl0ZS9NU1xcblNlbWl0aWMvU01cXG5TZW10ZXgvTVxcblNlbmF0ZS9NU1xcblNlbmRhaS9NXFxuU2VuZWNhL01TXFxuU2VuZWdhbC9NXFxuU2VuZWdhbGVzZS9NXFxuU2VuZ2hvci9NXFxuU2VuaW9yL01cXG5TZW5uYWNoZXJpYi9NXFxuU2VubmV0dC9NXFxuU2Vuc3Vycm91bmQvTVxcblNlb3VsL01cXG5TZXBcXG5TZXBoYXJkaS9NXFxuU2Vwb3kvTVxcblNlcHQvTVxcblNlcHRlbWJlci9NU1xcblNlcHR1YWdpbnQvTVNcXG5TZXF1b3lhL01cXG5TZXJiL1NNXFxuU2VyYmlhL01cXG5TZXJiaWFuL01TXFxuU2VyZW5hL01cXG5TZXJlbmdldGkvTVxcblNlcmdlaS9NXFxuU2VyZ2lvL01cXG5TZXJwZW5zL01cXG5TZXJyYS9NXFxuU2VycmFuby9NXFxuU2V0L01cXG5TZXRoL01cXG5TZXRvbi9NXFxuU2V1cmF0L01cXG5TZXVzcy9NXFxuU2V2YXN0b3BvbC9NXFxuU2V2ZXJuL01cXG5TZXZlcnVzL01cXG5TZXZpbGxlL01cXG5TZXZyZXMvTVxcblNld2FyZC9NXFxuU2V4dGFucy9NXFxuU2V4dG9uL01cXG5TZXljaGVsbGVzL01cXG5TZXlmZXJ0L01cXG5TZXltb3VyL01cXG5TZ3RcXG5TaGFhbnhpL01cXG5TaGFja2xldG9uL01cXG5TaGFmZmVyL01cXG5TaGFoL01cXG5TaGFrYS9NXFxuU2hha2VyXFxuU2hha2VzcGVhcmUvTVxcblNoYWtlc3BlYXJlYW4vTVxcblNoYW5hL01cXG5TaGFuZG9uZy9NXFxuU2hhbmUvTVxcblNoYW5naGFpL01cXG5TaGFua2FyYS9NXFxuU2hhbm5hL01cXG5TaGFubm9uL01cXG5TaGFudHVuZy9NXFxuU2hhbnhpL01cXG5TaGFwaXJvL01cXG5TaGFyZVBvaW50L01cXG5TaGFyaSdhL01cXG5TaGFyaS9NXFxuU2hhcmlmL01cXG5TaGFybGVuZS9NXFxuU2hhcm9uL01cXG5TaGFycC9NXFxuU2hhcnBlL01cXG5TaGFycm9uL01cXG5TaGFzdGEvTVxcblNoYXVsYS9NXFxuU2hhdW4vTVxcblNoYXVuYS9NXFxuU2hhdmlhbi9NXFxuU2hhdnVvdC9NXFxuU2hhdy9NXFxuU2hhd24vTVxcblNoYXduYS9NXFxuU2hhd25lZS9TTVxcblNoY2hhcmFuc2t5L01cXG5TaGVhL01cXG5TaGViYS9NXFxuU2hlYmVsaS9NXFxuU2hlYm95Z2FuL01cXG5TaGVlbmEvTVxcblNoZWV0cm9jay9NXFxuU2hlZmZpZWxkL01cXG5TaGVpbGEvTVxcblNoZWxieS9NXFxuU2hlbGRvbi9NXFxuU2hlbGlhL01cXG5TaGVsbC9NXFxuU2hlbGxleS9NXFxuU2hlbGx5L01cXG5TaGVsdG9uL01cXG5TaGVuYW5kb2FoL01cXG5TaGVueWFuZy9NXFxuU2hlb2wvTVxcblNoZXBhcmQvTVxcblNoZXBoZXJkL01cXG5TaGVwcGFyZC9NXFxuU2hlcmF0YW4vTVxcblNoZXJhdG9uL01cXG5TaGVyZWUvTVxcblNoZXJpL01cXG5TaGVyaWRhbi9NXFxuU2hlcmxvY2svTVxcblNoZXJtYW4vTVxcblNoZXJwYS9NXFxuU2hlcnJpL01cXG5TaGVycmllL01cXG5TaGVycnkvTVxcblNoZXJ3b29kL01cXG5TaGVyeWwvTVxcblNoZXRsYW5kL1NNXFxuU2hldGxhbmRzL01cXG5TaGV2YXJkbmFkemUvTVxcblNoZXZhdC9NXFxuU2hpJ2l0ZS9NXFxuU2hpZWxkcy9NXFxuU2hpaXRlL01TXFxuU2hpamlhemh1YW5nL01cXG5TaGlrb2t1L01cXG5TaGlsbG9uZy9NXFxuU2hpbG9oL01cXG5TaGludG8vTVNcXG5TaGludG9pc20vTVNcXG5TaGludG9pc3QvTVNcXG5TaGlyYXovTVxcblNoaXJsZXkvTVxcblNoaXZhL01cXG5TaG9ja2xleS9NXFxuU2hvcnQvTVxcblNob3J0aG9ybi9NXFxuU2hvc2hvbmUvU01cXG5TaG9zdGFrb3ZpdGNoL01cXG5TaHJlay9NXFxuU2hyZXZlcG9ydC9NXFxuU2hyaW5lci9NXFxuU2hyb3BzaGlyZS9NXFxuU2h1bGEvTVxcblNoeWxvY2svTVxcblNoeWxvY2tpYW4vTVxcblNpL01cXG5TaWFtL01cXG5TaWFtZXNlL01cXG5TaWJlbGl1cy9NXFxuU2liZXJpYS9NXFxuU2liZXJpYW4vTVNcXG5TaWJ5bC9NXFxuU2ljaHVhbi9NXFxuU2ljaWxpYW4vU01cXG5TaWNpbHkvTVxcblNpZC9NXFxuU2lkZGhhcnRoYS9NXFxuU2lkbmV5L01cXG5TaWVnZnJpZWQvTVxcblNpZW1lbnMvTVxcblNpZXJwaW5za2kvTVxcblNpZXJyYXNcXG5TaWdpc211bmQvTVxcblNpZ211bmQvTVxcblNpZ3VyZC9NXFxuU2loYW5vdWsvTVxcblNpa2gvTVxcblNpa2hpc21cXG5TaWtoc1xcblNpa2tpbS9NXFxuU2lra2ltZXNlL01cXG5TaWtvcnNreS9NXFxuU2lsYXMvTVxcblNpbGVzaWEvTVxcblNpbHVyaWFuL1NNXFxuU2lsdmEvTVxcblNpbHZpYS9NXFxuU2ltZW5vbi9NXFxuU2ltbWVudGFsL01cXG5TaW1tb25zL01cXG5TaW1vbi9NXFxuU2ltb25lL01cXG5TaW1wc29uL1NNXFxuU2ltcHNvbnMvTVxcblNpbXBzb252aWxsZS9NXFxuU2ltcy9NXFxuU2luYWkvTVxcblNpbmF0cmEvTVxcblNpbmJhZC9NXFxuU2luY2xhaXIvTVxcblNpbmRiYWQvTVxcblNpbmRoaS9NXFxuU2luZ2Fwb3JlL01cXG5TaW5nYXBvcmVhbi9TTVxcblNpbmdlci9NXFxuU2luZ2gvTVxcblNpbmdsZXRvbi9NXFxuU2luaGFsZXNlL01cXG5TaW5raWFuZy9NXFxuU2lvdXgvTVxcblNpci9TTVxcblNpcml1cy9NXFxuU2lzdGluZS9NXFxuU2lzeXBoZWFuL01cXG5TaXN5cGh1cy9NXFxuU2l2YS9NXFxuU2l2YW4vTVxcblNqYWVsbGFuZC9NXFxuU2tpbm5lci9NXFxuU2tpcHB5L01cXG5Ta29wamUvTVxcblNreWUvTVxcblNreWxhYi9NXFxuU2t5cGUvTVxcblNsYWNrd2FyZS9NXFxuU2xhc2hkb3QvTVxcblNsYXRlci9NXFxuU2xhdi9TTVxcblNsYXZpYy9NXFxuU2xhdm9uaWMvTVxcblNsaWRlbGwvTVxcblNsaW5reS9NXFxuU2xvYW4vTVxcblNsb2FuZS9NXFxuU2xvY3VtL01cXG5TbG92YWsvU01cXG5TbG92YWtpYS9NXFxuU2xvdmFraWFuXFxuU2xvdmVuZS9TTVxcblNsb3ZlbmlhL01cXG5TbG92ZW5pYW4vTVNcXG5TbHVycGVlL01cXG5TbS9NXFxuU21hbGwvTVxcblNtZXRhbmEvTVxcblNtaXJub2ZmL01cXG5TbWl0aC9NXFxuU21pdGhzb24vTVxcblNtaXRoc29uaWFuL01cXG5TbW9rZXkvTVxcblNtb2xlbnNrL01cXG5TbW9sbGV0dC9NXFxuU211dHMvTVxcblNteXJuYVxcblNuL01cXG5TbmFrZS9NXFxuU25hcHBsZS9NXFxuU25lYWQvTVxcblNuZWxsL01cXG5Tbmlja2Vycy9NXFxuU25pZGVyL01cXG5Tbm9vcHkvTVxcblNub3cvTVxcblNub3diZWx0L01cXG5TbnlkZXIvTVxcblNvYXZlL01cXG5Tb2NcXG5Tb2Nhc3RlZS9NXFxuU29jb3Jyby9NXFxuU29jcmF0ZXMvTVxcblNvY3JhdGljL01cXG5Tb2RkeS9NXFxuU29kb20vTVxcblNvZmlhL01cXG5Tb2hvL01cXG5Tb2wvTVxcblNvbGlzL01cXG5Tb2xvbW9uL01cXG5Tb2xvbi9NXFxuU29semhlbml0c3luL01cXG5Tb21hbGkvU01cXG5Tb21hbGlhL01cXG5Tb21hbGlhbi9NU1xcblNvbW1lL01cXG5Tb21vemEvTVxcblNvbi9NXFxuU29uZGhlaW0vTVxcblNvbmRyYS9NXFxuU29uZ2hhaS9NXFxuU29uZ2h1YS9NXFxuU29uaWEvTVxcblNvbmphL01cXG5Tb25ueS9NXFxuU29ub3JhL01cXG5Tb250YWcvTVxcblNvbnkvTVxcblNvbnlhL01cXG5Tb3BoaWEvTVxcblNvcGhpZS9NXFxuU29waG9jbGVhbi9NXFxuU29waG9jbGVzL01cXG5Tb3B3aXRoL01cXG5Tb3Jib25uZS9NXFxuU29zYS9NXFxuU290by9NXFxuU291cGhhbm91dm9uZy9NXFxuU291cmNlZm9yZ2UvTVxcblNvdXNhL01cXG5Tb3V0aC9NXFxuU291dGhhbXB0b24vTVxcblNvdXRoZWFzdC9NU1xcblNvdXRoZXJuZXIvU01cXG5Tb3V0aGV5L01cXG5Tb3V0aHNcXG5Tb3V0aHdlc3QvTVNcXG5Tb3ZpZXQvTVxcblNvd2V0by9NXFxuU295aW5rYS9NXFxuU295dXovTVxcblNwXFxuU3BhYXR6L01cXG5TcGFja2xlL01cXG5TcGFobi9NXFxuU3BhaW4vTVxcblNwYW0vTVxcblNwYW5cXG5TcGFuZ2xpc2hcXG5TcGFuaWFyZC9TTVxcblNwYW5pc2gvTVxcblNwYXJrcy9NXFxuU3BhcnRhL01cXG5TcGFydGFjdXMvTVxcblNwYXJ0YW4vTVNcXG5TcGFydGFuYnVyZy9NXFxuU3BlYXJzL01cXG5TcGVlci9NXFxuU3BlbmNlL1JNXFxuU3BlbmNlci9NXFxuU3BlbmNlcmlhbi9NXFxuU3BlbmdsZXIvTVxcblNwZW5nbGVyaWFuL01cXG5TcGVuc2VyL01cXG5TcGVuc2VyaWFuL01cXG5TcGVycnkvTVxcblNwaGlueC9NXFxuU3BpY2EvTVxcblNwaWVsYmVyZy9NXFxuU3BpbGxhbmUvTVxcblNwaW5vemEvTVxcblNwaW54L01cXG5TcGlyby9NXFxuU3Bpcm9ncmFwaC9NXFxuU3BpdHNiZXJnZW4vTVxcblNwaXR6L01cXG5TcG9jay9NXFxuU3Bva2FuZS9NXFxuU3ByaW5nZGFsZS9NXFxuU3ByaW5nZmllbGQvTVxcblNwcmluZ3N0ZWVuL01cXG5TcHJpbnQvTVxcblNwcml0ZS9NXFxuU3B1dG5pay9NXFxuU3FcXG5TcXVhbnRvL01cXG5TcXVpYmIvTVxcblNyL01cXG5TcmluYWdhci9NXFxuU3JpdmlqYXlhL01cXG5TdFxcblN0YVxcblN0YWNleS9NXFxuU3RhY2kvTVxcblN0YWNpZS9NXFxuU3RhY3kvTVxcblN0YWVsL01cXG5TdGFmZm9yZC9NXFxuU3RhaXJNYXN0ZXIvTVxcblN0YWxpbi9NXFxuU3RhbGluZ3JhZC9NXFxuU3RhbGluaXN0L01cXG5TdGFsbG9uZS9NXFxuU3RhbWZvcmQvTVxcblN0YW4vTVxcblN0YW5kaXNoL01cXG5TdGFuZm9yZC9NXFxuU3RhbmlzbGF2c2t5L01cXG5TdGFubGV5L01cXG5TdGFudG9uL01cXG5TdGFwbGVzL01cXG5TdGFyYnVja3MvTVxcblN0YXJrL01cXG5TdGFya2V5L01cXG5TdGFyci9NXFxuU3RhdGVuL01cXG5TdGF0ZXNcXG5TdGF1YmFjaC9NXFxuU3RhdW50b24vTVxcblN0ZVxcblN0ZWFkaWNhbS9NXFxuU3RlZWxlL01cXG5TdGVmYW4vTVxcblN0ZWZhbmllL01cXG5TdGVpbi9NUlxcblN0ZWluYmVjay9NXFxuU3RlaW5lbS9NXFxuU3RlaW5lci9NXFxuU3RlaW5tZXR6L01cXG5TdGVpbndheS9NXFxuU3RlbGxhL01cXG5TdGVuZGhhbC9NXFxuU3RlbmdlbC9NXFxuU3RlcGhhbi9NXFxuU3RlcGhhbmllL01cXG5TdGVwaGVuL01TXFxuU3RlcGhlbnMvTVxcblN0ZXBoZW5zb24vTVxcblN0ZXJsaW5nL01cXG5TdGVybi9NXFxuU3Rlcm5lL01cXG5TdGVybm8vTVxcblN0ZXRzb24vTVxcblN0ZXViZW4vTVxcblN0ZXViZW52aWxsZS9NXFxuU3RldmUvTVxcblN0ZXZlbi9NU1xcblN0ZXZlbnMvTVxcblN0ZXZlbnNvbi9NXFxuU3RldmllL01cXG5TdGV3YXJ0L01cXG5TdGllZ2xpdHovTVxcblN0aWx0b24vU01cXG5TdGltc29uL01cXG5TdGluZS9NXFxuU3RpcmxpbmcvTVxcblN0b2NraGF1c2VuL01cXG5TdG9ja2hvbG0vTVxcblN0b2NrdG9uL01cXG5TdG9pYy9TTVxcblN0b2ljaXNtL01TXFxuU3Rva2VzL01cXG5TdG9saWNobmF5YS9NXFxuU3RvbHlwaW4vTVxcblN0b25lL01cXG5TdG9uZWhlbmdlL01cXG5TdG9wcGFyZC9NXFxuU3RvdXQvTVxcblN0b3dlL01cXG5TdHJhYm8vTVxcblN0cmFkaXZhcmlcXG5TdHJhZGl2YXJpdXMvTVxcblN0cmFzYm91cmcvTVxcblN0cmF1c3MvTVxcblN0cmF2aW5za3kvTVxcblN0cmVpc2FuZC9NXFxuU3RyaWNrbGFuZC9NXFxuU3RyaW5kYmVyZy9NXFxuU3Ryb21ib2xpL01cXG5TdHJvbmcvTVxcblN0dS9NXFxuU3R1YXJ0L01TXFxuU3R1ZGViYWtlci9NXFxuU3R1dHRnYXJ0L01cXG5TdHV5dmVzYW50L01cXG5TdHlnaWFuL01cXG5TdHlyb2ZvYW0vU01cXG5TdHlyb24vTVxcblN0eXgvTVxcblN1YXJlei9NXFxuU3ViYXJ1L01cXG5TdWNyZS9NXFxuU3VjcmV0cy9NXFxuU3VkYW4vTVxcblN1ZGFuZXNlL01cXG5TdWRldGVubGFuZC9NXFxuU3Vkb2t1L01cXG5TdWRyYS9NXFxuU3VlL01cXG5TdWV0b25pdXMvTVxcblN1ZXovTVxcblN1ZmZvbGsvTVxcblN1ZmkvTVxcblN1ZmlzbS9NXFxuU3VoYXJ0by9NXFxuU3VpL01cXG5TdWthcm5vL01cXG5TdWtrb3RcXG5TdWxhd2VzaS9NXFxuU3VsZWltYW4vTVxcblN1bGxhL01cXG5TdWxsaXZhbi9NXFxuU3VtYXRyYS9NXFxuU3VtYXRyYW4vU01cXG5TdW1lcmlhL01cXG5TdW1lcmlhbi9TTVxcblN1bW1lci9NU1xcblN1bW1lcnMvTVxcblN1bW5lci9NXFxuU3VtdGVyL01cXG5TdW4vU01cXG5TdW5iZWFtL01cXG5TdW5iZWx0L01cXG5TdW5kYW5lc2UvTVxcblN1bmRhcy9NXFxuU3VuZGF5L01TXFxuU3VuZy9NXFxuU3Vua2lzdC9NXFxuU3VubmkvU01cXG5TdW5uaXRlL01TXFxuU3Vubnl2YWxlL01cXG5TdXBlcmJvd2wvTVxcblN1cGVyZnVuZC9NXFxuU3VwZXJnbHVlL01cXG5TdXBlcmlvci9NXFxuU3VwZXJtYW4vTVxcblN1cHRcXG5TdXJhYmF5YS9NXFxuU3VyYXQvTVxcblN1cmluYW1lL01cXG5TdXJpbmFtZXNlXFxuU3VyeWEvTVxcblN1c2FuL01cXG5TdXNhbmEvTVxcblN1c2FubmEvTVxcblN1c2FubmUvTVxcblN1c2llL01cXG5TdXNxdWVoYW5uYS9NXFxuU3Vzc2V4L01cXG5TdXRoZXJsYW5kL01cXG5TdXR0b24vTVxcblN1dmEvTVxcblN1d2FuZWUvTVxcblN1emFubmUvTVxcblN1emV0dGUvTVxcblN1emhvdS9NXFxuU3V6dWtpL01cXG5TdXp5L01cXG5TdmFsYmFyZC9NXFxuU3Zlbi9NXFxuU3ZlbmdhbGkvTVxcblN2ZXJkbG92c2tcXG5Td2FoaWxpL1NNXFxuU3dhbW1lcmRhbS9NXFxuU3dhbmVlL01cXG5Td2Fuc2VhL01cXG5Td2Fuc29uL01cXG5Td2F6aS9TTVxcblN3YXppbGFuZC9NXFxuU3dlZC9OXFxuU3dlZGUvU01cXG5Td2VkZW4vTVxcblN3ZWRlbmJvcmcvTVxcblN3ZWRpc2gvTVxcblN3ZWVuZXkvTVxcblN3ZWV0L01cXG5Td2lmdC9NXFxuU3dpbmJ1cm5lL01cXG5Td2lzcy9NU1xcblN3aXNzYWlyL01cXG5Td2l0elxcblN3aXR6ZXJsYW5kL01cXG5TeWJpbC9NXFxuU3lkbmV5L01cXG5TeWtlcy9NXFxuU3lsdmVzdGVyL01cXG5TeWx2aWEvTVxcblN5bHZpZS9NXFxuU3luZ2UvTVxcblN5cmFjdXNlL01cXG5TeXJpYS9NXFxuU3lyaWFjL01cXG5TeXJpYW4vTVNcXG5TemlsYXJkL01cXG5TenltYm9yc2thL01cXG5UJ2FuZy9NXFxuVC9NREdcXG5UQVxcblRBUlBcXG5UQi9NXFxuVEJBXFxuVERcXG5URERcXG5URUZMXFxuVEVMTkVUL1NcXG5URUxORVRUZWRcXG5URUxORVRUaW5nXFxuVEVTTFxcblRFU09MXFxuVEdJRlxcblRIQ1xcblRLTy9NXFxuVExDL01cXG5UTVxcblROXFxuVE5UL01cXG5UT0VGTFxcblRRTVxcblRWL1NNXFxuVFZBXFxuVFdBL01cXG5UV1hcXG5UWFxcblRhL01cXG5UYWJhc2NvL1NNXFxuVGFiYXRoYS9NXFxuVGFiZXJuYWNsZS9NU1xcblRhYml0aGEvTVxcblRhYnJpei9NU1xcblRhY2l0dXMvTVxcblRhY29tYS9NXFxuVGFkL01cXG5UYWR6aGlrL01cXG5UYWVndS9NXFxuVGFlam9uL01cXG5UYWZ0L01cXG5UYWdhbG9nL1NNXFxuVGFnb3JlL01cXG5UYWd1cy9NXFxuVGFoaXRpL01cXG5UYWhpdGlhbi9NU1xcblRhaG9lL01cXG5UYWljaHVuZy9NXFxuVGFpbmFuXFxuVGFpbmUvTVxcblRhaXBlaS9NXFxuVGFpcGluZy9NXFxuVGFpd2FuL01cXG5UYWl3YW5lc2UvTVxcblRhaXl1YW4vTVxcblRhamlraXN0YW4vTVxcblRha2xhbWFrYW4vTVxcblRhbGJvdC9NXFxuVGFsaWJhbi9NXFxuVGFsaWVzaW4vTVxcblRhbGxhaGFzc2VlL01cXG5UYWxsY2hpZWYvTVxcblRhbGxleS9NXFxuVGFsbGV5cmFuZC9NXFxuVGFsbGlubi9NXFxuVGFsbXVkL01TXFxuVGFsbXVkaWNcXG5UYWxtdWRpc3RcXG5UYW1hcmEvTVxcblRhbWVrYS9NXFxuVGFtZXJhL01cXG5UYW1lcmxhbmUvTVxcblRhbWkvTVxcblRhbWlrYS9NXFxuVGFtaWwvTVNcXG5UYW1tYW55L01cXG5UYW1taS9NXFxuVGFtbWllL01cXG5UYW1tdXovTVxcblRhbW15L01cXG5UYW1wYS9NXFxuVGFtcGF4L01cXG5UYW1yYS9NXFxuVGFtd29ydGgvTVxcblRhbmNyZWQvTVxcblRhbmV5L01cXG5UYW5nYW55aWthL01cXG5UYW5naWVyL01TXFxuVGFuZ3NoYW4vTVxcblRhbmlhL01cXG5UYW5pc2hhL01cXG5UYW5uZXIvTVxcblRhbm5oYXVzZXIvTVxcblRhbnRhbHVzL01cXG5UYW55YS9NXFxuVGFuemFuaWEvTVxcblRhbnphbmlhbi9TTVxcblRhby9NXFxuVGFvaXNtL01TXFxuVGFvaXN0L01TXFxuVGFyYS9NXFxuVGFyYW50aW5vL01cXG5UYXJhd2EvTVxcblRhcmF6ZWQvTVxcblRhcmJlbGwvTVxcblRhcmdldC9NXFxuVGFyaW0vTVxcblRhcmtlbnRvbi9NXFxuVGFya2luZ3Rvbi9NXFxuVGFydGFyeS9NXFxuVGFydHVmZmUvTVxcblRhcnphbi9NXFxuVGFzaGEvTVxcblRhc2hrZW50L01cXG5UYXNtYW4vTVxcblRhc21hbmlhL01cXG5UYXNtYW5pYW4vTVxcblRhc3MvTVxcblRhdGFyL01TXFxuVGF0ZS9NXFxuVGF0dW0vTVxcblRhdXJ1cy9NU1xcblRhdmFyZXMvTVxcblRhd25leS9NXFxuVGF5bG9yL01cXG5UYi9NXFxuVGJpbGlzaS9NXFxuVGMvTVxcblRjaGFpa292c2t5L01cXG5UZS9NXFxuVGVYXFxuVGVYZXNcXG5UZWFzZGFsZS9NXFxuVGVjaG5pY29sb3IvTVxcblRlY3Vtc2VoL01cXG5UZWQvTVxcblRlZGR5L01cXG5UZWZsb24vTVNcXG5UZWd1Y2lnYWxwYS9NXFxuVGVocmFuXFxuVGVsZVByb21wVGVyXFxuVGVsZVByb21wdGVyL01cXG5UZWxlbWFjaHVzL01cXG5UZWxlbWFubi9NXFxuVGVsZXR5cGVcXG5UZWxsL01SXFxuVGVsbGVyL01cXG5UZWx1Z3UvTVxcblRlbWVjdWxhL01cXG5UZW1wZVxcblRlbXBsYXIvTVxcblRlbXBsZS9NXFxuVGVubi9NXFxuVGVubmVzc2Vhbi9TTVxcblRlbm5lc3NlZS9NXFxuVGVubnlzb24vTVxcblRlbm55c29uaWFuXFxuVGVub2NodGl0bGFuL01cXG5UZW5zb3JGbG93L01cXG5UZW90aWh1YWNhbi9NXFxuVGVyZW5jZS9NXFxuVGVyZXNhL01cXG5UZXJlc2hrb3ZhL01cXG5UZXJpL01cXG5UZXJrZWwvTVxcblRlcnBzaWNob3JlL01cXG5UZXJyL01cXG5UZXJyYS9NXFxuVGVycmFuL01cXG5UZXJyYW5jZS9NXFxuVGVycmVsbC9NXFxuVGVycmVuY2UvTVxcblRlcnJpL01cXG5UZXJyaWUvTVxcblRlcnJ5L01cXG5UZXJ0aWFyeS9NXFxuVGVzbGEvTVxcblRlc3MvTVxcblRlc3NhL01cXG5UZXNzaWUvTVxcblRldC9NXFxuVGV0aHlzL01cXG5UZXRvbnMvTVxcblRldXRvbi9NU1xcblRldXRvbmljL01cXG5UZXZldC9NXFxuVGV4L01cXG5UZXhhY28vTVxcblRleGFuL01TXFxuVGV4YXJrYW5hL01cXG5UZXhhcy9NXFxuVGgvTVxcblRoYWNrZXJheS9NXFxuVGhhZC9NXFxuVGhhZGRldXMvTVxcblRoYWkvU01cXG5UaGFpbGFuZC9NXFxuVGhhbGVzL01cXG5UaGFsaWEvTVxcblRoYW1lcy9NXFxuVGhhbmgvTVxcblRoYW5rc2dpdmluZy9NU1xcblRoYW50L01cXG5UaGFyL01cXG5UaGFycC9NXFxuVGhhdGNoZXIvTVxcblRoZWEvTVxcblRoZWJlcy9NXFxuVGhlaWxlci9NXFxuVGhlbG1hL01cXG5UaGVtaXN0b2NsZXMvTVxcblRoZW9jcml0dXMvTVxcblRoZW9kb3JhL01cXG5UaGVvZG9yZS9NXFxuVGhlb2RvcmljL01cXG5UaGVvZG9zaXVzL01cXG5UaGVvc29waHkvTVxcblRoZXJhdmFkYS9NXFxuVGhlcmVzYS9NXFxuVGhlcmVzZS9NXFxuVGhlcm1vcHlsYWUvTVxcblRoZXJtb3NcXG5UaGVyb24vTVxcblRoZXNldXMvTVxcblRoZXNwaWFuL01cXG5UaGVzcGlzL01cXG5UaGVzc2Fsb25pYW4vU01cXG5UaGVzc2Fsb25pa2kvTVxcblRoZXNzYWx5L01cXG5UaGlldS9NXFxuVGhpbWJ1L01cXG5UaGltcGh1XFxuVGhvbWFzL01cXG5UaG9taXNtL01cXG5UaG9taXN0aWMvTVxcblRob21wc29uL01cXG5UaG9tc29uL01cXG5UaG9yL01cXG5UaG9yYXppbmUvTVxcblRob3JlYXUvTVxcblRob3JudG9uL01cXG5UaG9yb3VnaGJyZWQvTVxcblRob3JwZS9NXFxuVGhvdGgvTVxcblRocmFjZS9NXFxuVGhyYWNpYW4vTVxcblRodVxcblRodWN5ZGlkZXMvTVxcblRodWxlL01cXG5UaHVuZGVyYmlyZC9NXFxuVGh1ci9TXFxuVGh1cmJlci9NXFxuVGh1cm1hbi9NXFxuVGh1cm1vbmQvTVxcblRodXJzZGF5L1NNXFxuVGh1dG1vc2UvTVxcblRpL01cXG5UaWEvTVxcblRpYW5qaW4vTVxcblRpYmVyL01cXG5UaWJlcml1cy9NXFxuVGliZXQvTVxcblRpYmV0YW4vTVNcXG5UaWNrZXRtYXN0ZXIvTVxcblRpY29uZGVyb2dhL01cXG5UaWRlL01cXG5UaWVuYW5tZW4vTVxcblRpZmZhbnkvTVxcblRpZ3Jpcy9NXFxuVGlqdWFuYS9NXFxuVGlsbGljaC9NXFxuVGlsbG1hbi9NXFxuVGlsc2l0L01cXG5UaW0vTVxcblRpbWJ1a3R1L01cXG5UaW1leC9NXFxuVGltbXkvTVxcblRpbW9uL01cXG5UaW1vci9NXFxuVGltb3RoeS9NXFxuVGltdXIvTVxcblRpbXVyaWQvTVxcblRpbmEvTVxcblRpbmcvTVxcblRpbmtlcmJlbGwvTVxcblRpbmtlcnRveS9NXFxuVGluc2VsdG93bi9NXFxuVGludG9yZXR0by9NXFxuVGlwcGVjYW5vZS9NXFxuVGlwcGVyYXJ5L01cXG5UaXJhbmVcXG5UaXJlc2lhcy9NXFxuVGlyb2wvTVxcblRpcm9sZWFuXFxuVGlzaGEvTVxcblRpc2hyaS9NXFxuVGl0YW4vU01cXG5UaXRhbmlhL01cXG5UaXRhbmljL01cXG5UaXRpYW4vTVxcblRpdGljYWNhL01cXG5UaXRvL01cXG5UaXR1cy9NXFxuVGl0dXN2aWxsZS9NXFxuVGwvTVxcblRsYWxvYy9NXFxuVGxpbmdpdC9NXFxuVG0vTVxcblRvYmFnby9NXFxuVG9iaXQvTVxcblRvYnkvTVxcblRvY2FudGlucy9NXFxuVG9jcXVldmlsbGUvTVxcblRvZC9NXFxuVG9kZC9NXFxuVG9nby9NXFxuVG9nb2xlc2UvTVxcblRvam8vTVxcblRva2F5L01cXG5Ub2t1Z2F3YS9NXFxuVG9reW8vTVxcblRva3lvaXRlXFxuVG9sZWRvL01TXFxuVG9sa2llbi9NXFxuVG9sc3RveS9NXFxuVG9sdGVjL01cXG5Ub2x5YXR0aS9NXFxuVG9tL01cXG5Ub21hcy9NXFxuVG9tYmF1Z2gvTVxcblRvbWxpbi9NXFxuVG9tbWllL01cXG5Ub21teS9NXFxuVG9tcGtpbnMvTVxcblRvbXNrL01cXG5Ub25nYS9NXFxuVG9uZ2FuL01TXFxuVG9uaS9NXFxuVG9uaWEvTVxcblRvbnRvL01cXG5Ub255L01cXG5Ub255YS9NXFxuVG9wZWthL01cXG5Ub3BzeS9NXFxuVG9yYWgvTVxcblRvcmFoc1xcblRvcm9udG8vTVxcblRvcnF1ZW1hZGEvTVxcblRvcnJhbmNlL01cXG5Ub3JyZW5zL01cXG5Ub3JyZXMvTVxcblRvcnJpY2VsbGkvTVxcblRvcnRvbGEvTVxcblRvcnR1Z2EvTVxcblRvcnZhbGRzL01cXG5Ub3J5L1NNXFxuVG9zY2EvTVxcblRvc2NhbmluaS9NXFxuVG9zaGliYS9NXFxuVG90by9NXFxuVG91bG91c2UvTVxcblRvd25lcy9NXFxuVG93bnNlbmQvTVxcblRveW5iZWUvTVxcblRveW9kYS9NXFxuVG95b3RhL01cXG5UcmFjZXkvTVxcblRyYWNpL01cXG5UcmFjaWUvTVxcblRyYWN5L01cXG5UcmFmYWxnYXIvTVxcblRyYWlsd2F5cy9NXFxuVHJhamFuL01cXG5UcmFuL01cXG5UcmFuc2NhdWNhc2lhL01cXG5UcmFuc3ZhYWwvTVxcblRyYW5zeWx2YW5pYS9NXFxuVHJhbnN5bHZhbmlhbi9NXFxuVHJhcHBpc3QvU01cXG5UcmF2aXMvTVxcblRyYXZvbHRhL01cXG5UcmVhc3VyeS9TTVxcblRyZWJsaW5rYS9NXFxuVHJla2tpZS9NXFxuVHJlbnQvTVxcblRyZW50b24vTVxcblRyZXZlbHlhbi9NXFxuVHJldmluby9NXFxuVHJldm9yL01cXG5UcmV5L01cXG5Ucmlhbmd1bHVtL01cXG5Ucmlhc3NpYy9NXFxuVHJpY2lhL01cXG5UcmlkZW50L01cXG5Ucmllc3RlL01cXG5UcmltdXJ0aS9NXFxuVHJpbmEvTVxcblRyaW5pZGFkL01cXG5UcmluaWRhZGlhbi9NU1xcblRyaW5pdHkvU01cXG5UcmlwaXRha2EvTVxcblRyaXBvbGkvTVxcblRyaXBwZS9NXFxuVHJpc2hhL01cXG5UcmlzdGFuL01cXG5Ucml0b24vTVxcblRyb2JyaWFuZC9NXFxuVHJvaWx1cy9NXFxuVHJvamFuL01TXFxuVHJvbGxvcGUvTVxcblRyb25kaGVpbS9NXFxuVHJvcGljYW5hL01cXG5Ucm90c2t5L01cXG5Ucm95L01cXG5Ucm95ZXNcXG5UcnVja2VlL01cXG5UcnVkZWF1L01cXG5UcnVkeS9NXFxuVHJ1ZmZhdXQvTVxcblRydWppbGxvL01cXG5UcnVtYW4vTVxcblRydW1idWxsL01cXG5UcnVtcC9NXFxuVHJ1dGgvTVxcblRzaW1zaGlhbi9NXFxuVHNpb2xrb3Zza3kvTVxcblRzaXRzaWhhci9NXFxuVHNvbmdraGFwYS9NXFxuVHN3YW5hL01cXG5UdS9NXFxuVHVhbW90dS9NXFxuVHVhcmVnL01cXG5UdWJtYW4vTVxcblR1Y2tlci9NXFxuVHVjc29uL01cXG5UdWN1bWFuL01cXG5UdWRvci9TTVxcblR1ZS9TXFxuVHVlcy9NXFxuVHVlc2RheS9NU1xcblR1bGFuZS9NXFxuVHVsbC9NXFxuVHVsc2EvTVxcblR1bHNpZGFzL01cXG5UdW1zL01cXG5UdW5ndXMvTVxcblR1bmd1c2thL01cXG5UdW5pcy9NXFxuVHVuaXNpYS9NXFxuVHVuaXNpYW4vTVNcXG5UdW5uZXkvTVxcblR1cGkvTVxcblR1cHBlcndhcmUvTVxcblR1cHVuZ2F0by9NXFxuVHVyZ2VuZXYvTVxcblR1cmluL01cXG5UdXJpbmcvTVxcblR1cmsvU01cXG5UdXJrZXN0YW4vTVxcblR1cmtleS9NXFxuVHVya2ljL01TXFxuVHVya2lzaC9NXFxuVHVya21lbmlzdGFuL01cXG5UdXJsb2NrL01cXG5UdXJuZXIvTVxcblR1cnBpbi9NXFxuVHVzY2Fsb29zYS9NXFxuVHVzY2FuL01cXG5UdXNjYW55L01cXG5UdXNjYXJvcmEvTVNcXG5UdXNjb24vTVxcblR1c2tlZ2VlL01cXG5UdXNzYXVkL01cXG5UdXQvTVxcblR1dGFua2hhbWVuL01cXG5UdXRzaS9NXFxuVHV0dS9NXFxuVHV2YWx1L01cXG5UdXZhbHVhblxcblR3YWluL01cXG5Ud2VlZC9NXFxuVHdlZWRsZWRlZS9NXFxuVHdlZWRsZWR1bS9NXFxuVHdpbGEvTVxcblR3aW5raWVzL01cXG5Ud2l0dGVyL01cXG5Ud2l6emxlcnMvTVxcblR3cFxcblR5L01cXG5UeWNoby9NXFxuVHlsZW5vbC9NXFxuVHlsZXIvTVxcblR5bmRhbGUvTVxcblR5bmRhbGwvTVxcblR5cmUvTVxcblR5cmVlL01cXG5UeXJvbGVhblxcblR5cm9uZS9NXFxuVHlzb24vTVxcblUvTVxcblVBUlxcblVBV1xcblVCUy9NXFxuVUNMQS9NXFxuVUZPL1NNXFxuVUhGL01cXG5VSy9NXFxuVUxcXG5VTi9NXFxuVU5FU0NPL01cXG5VTklDRUYvTVxcblVOSVgvTVxcblVQQ1xcblVQSS9NXFxuVVBTL01cXG5VUkwvU1xcblVTL01cXG5VU0EvTVxcblVTQUZcXG5VU0JcXG5VU0NHXFxuVVNEQS9NXFxuVVNJQVxcblVTTUNcXG5VU05cXG5VU09cXG5VU1BcXG5VU1BTXFxuVVNTXFxuVVNTUi9NXFxuVVQvTVxcblVUQ1xcblVWL01cXG5VYmFuZ2kvTVxcblVidW50dS9NXFxuVWNheWFsaS9NXFxuVWNjZWxsby9NXFxuVWRhbGwvTVxcblVmYS9NXFxuVWdhbmRhL01cXG5VZ2FuZGFuL01TXFxuVWlnaHVyL01cXG5VanVuZ3BhbmRhbmcvTVxcblVrcmFpbmUvTVxcblVrcmFpbmlhbi9TTVxcblVsc3Rlci9NXFxuVWx0cmFzdWVkZS9NXFxuVWx5YW5vdnNrL01cXG5VbHlzc2VzL01cXG5VbWJyaWVsL01cXG5VbmRlcndvb2QvTVxcblVuZ2F2YS9NXFxuVW5pY29kZS9NXFxuVW5pbGV2ZXIvTVxcblVuaW9uL1NNXFxuVW5pb25pc3RcXG5VbmlvbnRvd24vTVxcblVuaXJveWFsL01cXG5Vbml0YXJpYW4vTVNcXG5Vbml0YXJpYW5pc20vTVNcXG5Vbml0YXMvTVxcblVuaXgvU1xcblVudWthbGhhaS9NXFxuVXBhbmlzaGFkcy9NXFxuVXBkaWtlL01cXG5VcGpvaG4vTVxcblVwdG9uL01cXG5Vci9NXFxuVXJhbC9TTVxcblVyYWxzL01cXG5VcmFuaWEvTVxcblVyYW51cy9NXFxuVXJiYW4vTVxcblVyZHUvTVxcblVyZXkvTVxcblVyaWFoL01cXG5VcmllbC9NXFxuVXJpcy9NXFxuVXJxdWhhcnQvTVxcblVyc2EvTVxcblVyc3VsYS9NXFxuVXJzdWxpbmUvTVxcblVydWd1YXkvTVxcblVydWd1YXlhbi9NU1xcblVydW1xaS9NXFxuVXNlbmV0L01TXFxuVXN0aW5vdi9NXFxuVXRcXG5VdGFoL01cXG5VdGFoYW4vTVNcXG5VdGUvU01cXG5VdGljYS9NXFxuVXRvcGlhL1NNXFxuVXRvcGlhbi9TTVxcblV0cmVjaHQvTVxcblV0cmlsbG8vTVxcblV6YmVrL01cXG5VemJla2lzdGFuL01cXG5VemkvU01cXG5WL01cXG5WQVxcblZBVC9NXFxuVkFYXFxuVkFYZXNcXG5WQkEvTVxcblZDUi9NXFxuVkQvTVxcblZEVFxcblZEVVxcblZGXFxuVkZXL01cXG5WR1xcblZHQVxcblZIRi9NXFxuVkhTXFxuVkkvTVxcblZJUC9TTVxcblZJU1RBXFxuVkpcXG5WTEYvTVxcblZPQVxcblZQXFxuVlRcXG5WVE9MXFxuVmEvTVxcblZhY2F2aWxsZS9NXFxuVmFkZXIvTVxcblZhZHV6L01cXG5WYWwvTVxcblZhbGFyaWUvTVxcblZhbGRlei9NXFxuVmFsZG9zdGEvTVxcblZhbGVuY2lhL1NNXFxuVmFsZW50aS9NXFxuVmFsZW50aW4vTVxcblZhbGVudGluZS9NXFxuVmFsZW50aW5vL01cXG5WYWxlbnp1ZWxhL01cXG5WYWxlcmlhL01cXG5WYWxlcmlhbi9NXFxuVmFsZXJpZS9NXFxuVmFsZXJ5L01cXG5WYWxoYWxsYS9NXFxuVmFsaXVtL01TXFxuVmFsa3lyaWUvU01cXG5WYWxsZWpvL01cXG5WYWxsZXR0YS9NXFxuVmFsb2lzL01cXG5WYWxwYXJhaXNvL01cXG5WYWx2b2xpbmUvTVxcblZhbi9NXFxuVmFuY2UvTVxcblZhbmNvdXZlci9NXFxuVmFuZGFsL01TXFxuVmFuZGVyYmlsdC9NXFxuVmFuZHlrZS9NXFxuVmFuZXNzYS9NXFxuVmFuZy9NXFxuVmFudWF0dS9NXFxuVmFuemV0dGkvTVxcblZhcmFuYXNpL01cXG5WYXJlc2UvTVxcblZhcmdhcy9NXFxuVmFzZWxpbmUvU01cXG5WYXNxdWV6L01cXG5WYXNzYXIvTVxcblZhdGljYW4vTVxcblZhdWJhbi9NXFxuVmF1Z2hhbi9NXFxuVmF1Z2huL01cXG5WYXpxdWV6L01cXG5WZWJsZW4vTVxcblZlZGEvU01cXG5WZWRhbnRhL01cXG5WZWdhL1NNXFxuVmVnYXMvTVxcblZlZ2VtaXRlL01cXG5WZWxhL01cXG5WZWxhc3F1ZXovTVxcblZlbGF6cXVlei9NXFxuVmVsY3JvL01TXFxuVmVsZXovTVxcblZlbG1hL01cXG5WZWx2ZWV0YS9NXFxuVmVuZXRpYW4vU01cXG5WZW5lenVlbGEvTVxcblZlbmV6dWVsYW4vU01cXG5WZW5pY2UvTVxcblZlbm4vTVxcblZlbnRvbGluL01cXG5WZW51cy9NU1xcblZlbnVzaWFuL01cXG5WZXJhL01cXG5WZXJhY3J1ei9NXFxuVmVyZGUvTVxcblZlcmRpL01cXG5WZXJkdW4vTVxcblZlcml6b24vTVxcblZlcmxhaW5lL01cXG5WZXJtZWVyL01cXG5WZXJtb250L1pNUlxcblZlcm1vbnRlci9NXFxuVmVybi9NXFxuVmVybmEvTVxcblZlcm5lL01cXG5WZXJub24vTVxcblZlcm9uYS9NXFxuVmVyb25lc2UvTVxcblZlcm9uaWNhL01cXG5WZXJzYWlsbGVzL01cXG5WZXNhbGl1cy9NXFxuVmVzcGFzaWFuL01cXG5WZXNwdWNjaS9NXFxuVmVzdGEvTVxcblZlc3V2aXVzL01cXG5WaWFjb20vTVxcblZpYWdyYS9NXFxuVmljL01cXG5WaWNlbnRlL01cXG5WaWNoeS9NXFxuVmlja2kvTVxcblZpY2tpZS9NXFxuVmlja3NidXJnL01cXG5WaWNreS9NXFxuVmljdG9yL01cXG5WaWN0b3JpYS9NXFxuVmljdG9yaWFuL01TXFxuVmljdG9yaWFuaXNtXFxuVmljdG9ydmlsbGUvTVxcblZpY3Ryb2xhL01cXG5WaWRhbC9NXFxuVmllbm5hL01cXG5WaWVubmVzZS9NXFxuVmllbnRpYW5lL01cXG5WaWV0Y29uZy9NXFxuVmlldG1pbmgvTVxcblZpZXRuYW0vTVxcblZpZXRuYW1lc2UvTVxcblZpamF5YW5hZ2FyL01cXG5WaWpheWF3YWRhL01cXG5WaWtpbmcvTVNcXG5WaWxhL01cXG5WaWxsYS9TTVxcblZpbGxhcnJlYWwvTVxcblZpbGxhcy9NXFxuVmlsbG9uL01cXG5WaWxtYS9NXFxuVmlsbml1cy9NXFxuVmlseXVpL01cXG5WaW5jZS9NXFxuVmluY2VudC9NXFxuVmluZGVtaWF0cml4L01cXG5WaW5lbGFuZC9NXFxuVmluc29uL01cXG5WaW9sYS9NXFxuVmlvbGV0L01cXG5WaXJnaWUvTVxcblZpcmdpbC9NXFxuVmlyZ2luaWEvTVxcblZpcmdpbmlhbi9TTVxcblZpcmdvL1NNXFxuVmlzYS9NXFxuVmlzYWxpYS9NXFxuVmlzYXlhbnMvTVxcblZpc2hudS9NXFxuVmlzaWdvdGgvTVxcblZpc2lnb3Roc1xcblZpc3R1bGEvTVxcblZpdGltL01cXG5WaXRvL01cXG5WaXR1cy9NXFxuVml2YWxkaS9NXFxuVml2ZWthbmFuZGEvTVxcblZpdmlhbi9NXFxuVml2aWVubmUvTVxcblZsYWQvTVxcblZsYWRpbWlyL01cXG5WbGFkaXZvc3Rvay9NXFxuVmxhbWluY2svTVxcblZsYXNpYy9NXFxuVm9JUFxcblZvZ3VlL01cXG5Wb2xja2VyL01cXG5Wb2xkZW1vcnQvTVxcblZvbGdhL01cXG5Wb2xnb2dyYWQvTVxcblZvbGtzd2FnZW4vTVxcblZvbHN0ZWFkL01cXG5Wb2x0YS9NXFxuVm9sdGFpcmUvTVxcblZvbHZvL01cXG5Wb25kYS9NXFxuVm9ubmVndXQvTVxcblZvcm9uZXpoL01cXG5Wb3JzdGVyL01cXG5Wb3lhZ2VyL01cXG5WdFxcblZ1aXR0b24vTVxcblZ1bGNhbi9NXFxuVnVsZ1xcblZ1bGdhdGUvU01cXG5XL01EVFxcbldBXFxuV0FDXFxuV0FTUC9NXFxuV0FUUy9NXFxuV0NcXG5XSE8vTVxcbldJXFxuV01EXFxuV05XL01cXG5XUFxcbldTVy9NXFxuV1RPXFxuV1ZcXG5XV1xcbldXSVxcbldXSUlcXG5XV1cvTVxcbldZXFxuV1lTSVdZR1xcbldhYmFzaC9NXFxuV2FjXFxuV2Fjby9NXFxuV2FkZS9NXFxuV2FnbmVyL01cXG5XYWduZXJpYW4vTVxcbldhaGhhYmkvTVxcbldhaWtpa2kvTVxcbldhaXRlL01cXG5XYWtlL01cXG5XYWtzbWFuL01cXG5XYWxkL01OXFxuV2FsZGVtYXIvTVxcbldhbGRlbi9NXFxuV2FsZGVuc2lhbi9NXFxuV2FsZGhlaW0vTVxcbldhbGRvL01cXG5XYWxkb3JmL01cXG5XYWxlcy9NXFxuV2FsZXNhL01cXG5XYWxncmVlbi9TTVxcbldhbGdyZWVucy9NXFxuV2Fsa2VyL01cXG5XYWxrbWFuL01cXG5XYWxsL1NNUlxcbldhbGxhY2UvTVxcbldhbGxlbnN0ZWluL01cXG5XYWxsZXIvTVxcbldhbGxpcy9NXFxuV2FsbG9vbi9NXFxuV2FsbHMvTVxcbldhbG1hcnQvTVxcbldhbHBvbGUvTVxcbldhbHB1cmdpc25hY2h0L01cXG5XYWxzaC9NXFxuV2FsdC9NUlpcXG5XYWx0ZXIvTVxcbldhbHRlcnMvTVxcbldhbHRvbi9NXFxuV2FuYW1ha2VyL01cXG5XYW5kYS9NXFxuV2FuZy9NXFxuV2Fua2VsL01cXG5XYXJkL01cXG5XYXJlL01HXFxuV2FyaG9sL01cXG5XYXJpbmcvTVxcbldhcm5lci9NXFxuV2FycmVuL01cXG5XYXJzYXcvTVxcbldhcndpY2svTVxcbldhc2F0Y2gvTVxcbldhc2gvTVxcbldhc2hpbmd0b24vTVxcbldhc2hpbmd0b25pYW4vTVNcXG5XYXNzZXJtYW5uL01cXG5XYXRlcmJ1cnkvTVxcbldhdGVyZm9yZC9NXFxuV2F0ZXJnYXRlL01cXG5XYXRlcmxvby9NU1xcbldhdGVycy9NXFxuV2F0ZXJ0b3duL01cXG5XYXRraW5zL01cXG5XYXRzb24vTVxcbldhdHNvbnZpbGxlL01cXG5XYXR0L1NNXFxuV2F0dGVhdS9NXFxuV2F0dHMvTVxcbldhdHVzaS9NXFxuV2F1Z2gvTVxcbldhdXNhdS9NXFxuV2F2ZVxcbldheW5lL01cXG5XYXluZXNib3JvL01cXG5XZWF2ZXIvTVxcbldlYi9NUlxcbldlYmIvTVxcbldlYmVyL01cXG5XZWJlcm4vTVxcbldlYnN0ZXIvTVNcXG5XZWQvTVxcbldlZGRlbGwvTVxcbldlZGd3b29kL01cXG5XZWRuZXNkYXkvTVNcXG5XZWVrcy9NXFxuV2Vocm1hY2h0L01cXG5XZWkvTVxcbldlaWVyc3RyYXNzL01cXG5XZWlsbC9NXFxuV2VpbmJlcmcvTVxcbldlaXJ0b24vTVxcbldlaXNzL01cXG5XZWlzc211bGxlci9NXFxuV2Vpem1hbm4vTVxcbldlbGRvbi9NXFxuV2VsbGFuZC9NXFxuV2VsbGVyL01cXG5XZWxsZXMvTVxcbldlbGxpbmd0b24vU01cXG5XZWxscy9NXFxuV2Vsc2gvTVxcbldlbHNobWFuL01cXG5XZWxzaG1lbi9NXFxuV2Vsc2h3b21hblxcbldlbmF0Y2hlZS9NXFxuV2VuZGVsbC9NXFxuV2VuZGkvTVxcbldlbmR5L01cXG5XZXNhay9NXFxuV2VzbGV5L01cXG5XZXNsZXlhbi9NXFxuV2Vzc2V4L01cXG5XZXNzb24vTVxcbldlc3QvU01cXG5XZXN0ZXJuL01SU1xcbldlc3Rpbmdob3VzZS9NXFxuV2VzdG1pbnN0ZXIvTVxcbldlc3Rvbi9NXFxuV2VzdHBoYWxpYS9NXFxuV2V5ZGVuL01cXG5XZXplbi9NXFxuV2hhcnRvbi9NXFxuV2hlYXRpZXMvTVxcbldoZWF0c3RvbmUvTVxcbldoZWVsZXIvTVxcbldoZWVsaW5nL01cXG5XaGlnL1NNXFxuV2hpcHBsZS9NXFxuV2hpcmxwb29sL01cXG5XaGlzdGxlci9NXFxuV2hpdGFrZXIvTVxcbldoaXRlL1NNXFxuV2hpdGVmaWVsZC9NXFxuV2hpdGVoYWxsL01cXG5XaGl0ZWhlYWQvTVxcbldoaXRlaG9yc2UvTVxcbldoaXRlbGV5L01cXG5XaGl0ZmllbGQvTVxcbldoaXRsZXkvTVxcbldoaXRtYW4vTVxcbldoaXRuZXkvTVxcbldoaXRzdW5kYXkvTVNcXG5XaGl0dGllci9NXFxuV2lGaVxcbldpY2NhL01cXG5XaWNoaXRhL01cXG5XaWVtYXIvTVxcbldpZXNlbC9NXFxuV2llc2VudGhhbC9NXFxuV2lnZ2lucy9NXFxuV2lnbmVyL01cXG5XaWkvTVxcbldpa2lsZWFrc1xcbldpa2lwZWRpYS9NXFxuV2lsYmVyZm9yY2UvTVxcbldpbGJlcnQvTVxcbldpbGJ1ci9NXFxuV2lsYnVybi9NXFxuV2lsY294L01cXG5XaWxkYS9NXFxuV2lsZGUvTVJcXG5XaWxkZXIvTVxcbldpbGVzL01cXG5XaWxleS9NXFxuV2lsZm9yZC9NXFxuV2lsZnJlZC9NXFxuV2lsZnJlZG8vTVxcbldpbGhlbG0vTVxcbldpbGhlbG1pbmEvTVxcbldpbGtlcnNvbi9NXFxuV2lsa2VzL01cXG5XaWxraW5zL01cXG5XaWxraW5zb24vTVxcbldpbGwvTVxcbldpbGxhL01cXG5XaWxsYW1ldHRlL01cXG5XaWxsYXJkL01cXG5XaWxsZW1zdGFkL01cXG5XaWxsaWFtL1NNXFxuV2lsbGlhbXMvTVxcbldpbGxpYW1zYnVyZy9NXFxuV2lsbGlhbXNvbi9NXFxuV2lsbGlhbXNwb3J0L01cXG5XaWxsaWUvTVxcbldpbGxpcy9NXFxuV2lsbHkvTVxcbldpbG1hL01cXG5XaWxtZXIvTVxcbldpbG1pbmd0b24vTVxcbldpbHNvbi9NXFxuV2lsc29uaWFuL01cXG5XaWx0b24vTVxcbldpbWJsZWRvbi9NXFxuV2ltc2V5L01cXG5XaW5jaGVsbC9NXFxuV2luY2hlc3Rlci9NU1xcbldpbmRicmVha2VyL01cXG5XaW5kZXgvTVxcbldpbmRob2VrL01cXG5XaW5kb3dzL01cXG5XaW5kc29yL1NNXFxuV2luZHdhcmQvTVxcbldpbmVzYXAvTVxcbldpbmZyZWQvTVxcbldpbmZyZXkvTVxcbldpbmlmcmVkL01cXG5XaW5rbGUvTVxcbldpbm5lYmFnby9NXFxuV2lubmllL01cXG5XaW5uaXBlZy9NXFxuV2luc3Rvbi9NXFxuV2ludGVycy9NXFxuV2ludGhyb3AvTVxcbldpc1xcbldpc2NcXG5XaXNjb25zaW4vTVxcbldpc2NvbnNpbml0ZS9NU1xcbldpc2UvTVxcbldpdHQvTVxcbldpdHRnZW5zdGVpbi9NXFxuV2l0d2F0ZXJzcmFuZC9NXFxuV20vTVxcbldvYmVnb24vTVxcbldvZGVob3VzZS9NXFxuV29sZi9NXFxuV29sZmUvTVxcbldvbGZmL01cXG5Xb2xmZ2FuZy9NXFxuV29sbG9uZ29uZy9NXFxuV29sbHN0b25lY3JhZnQvTVxcbldvbHNleS9NXFxuV29sdmVyaGFtcHRvblxcbldvbmRlci9NXFxuV29uZGVyYnJhL01cXG5Xb25nL01cXG5Xb29kL1NNXFxuV29vZGFyZC9NXFxuV29vZGh1bGwvTVxcbldvb2RsYW5kL01cXG5Xb29kcm93L01cXG5Xb29kcy9NXFxuV29vZHN0b2NrL01cXG5Xb29kd2FyZC9NXFxuV29vbGYvTVxcbldvb2xpdGUvTVxcbldvb2xvbmdvbmcvTVxcbldvb2x3b3J0aC9NXFxuV29vc3Rlci9NXFxuV29vdGVuL01cXG5Xb3JjZXN0ZXIvU01cXG5Xb3JjZXN0ZXJzaGlyZS9NXFxuV29yZFByZXNzL01cXG5Xb3Jkc3dvcnRoL01cXG5Xb3JrbWFuL01cXG5Xb3Jtcy9NXFxuV290YW4vTVxcbldvdm9rYS9NXFxuV296bmlhay9NXFxuV296emVjay9NXFxuV3JhbmdlbGwvTVxcbldyZW4vTVxcbldyaWdodC9NXFxuV3JpZ2xleS9NXFxuV3JvY2xhdy9NXFxuV3UvTVxcbld1aGFuL01cXG5XdXJsaXR6ZXIvTVxcbld5YXR0L01cXG5XeWNoZXJsZXkvTVxcbld5Y2xpZmZlL01cXG5XeWV0aC9NXFxuV3lsaWUvTVxcbld5bm4vTVxcbld5b1xcbld5b21pbmcvTVxcbld5b21pbmdpdGUvU01cXG5YL01cXG5YRW1hY3MvTVxcblhML01cXG5YTUxcXG5YU1xcblhYTFxcblhhbWFyaW4vTVxcblhhbmFkdS9NXFxuWGFudGhpcHBlL01cXG5YYXZpZXIvTVxcblhlL1NNXFxuWGVuYWtpcy9NXFxuWGVuaWEvTVxcblhlbm9waG9uL01cXG5YZXJveC9NU1xcblhlcnhlcy9NXFxuWGhvc2EvTVxcblhpJ2FuL01cXG5YaWFuL1NNXFxuWGlhb3BpbmcvTVxcblhpbWVuZXMvTVxcblhpbmd1L01cXG5YaW5qaWFuZy9NXFxuWGlvbmdudS9NXFxuWGl6YW5nL01cXG5YbWFzL01TXFxuWG9jaGlwaWxsaS9NXFxuWHV6aG91L01cXG5ZL01cXG5ZTUNBL01cXG5ZTUhBXFxuWU1NVlxcbllUXFxuWVdDQS9NXFxuWVdIQVxcbllhY2MvTVxcbllhaG9vL01cXG5ZYWh0emVlL01cXG5ZYWh3ZWgvTVxcbllha2ltYS9NXFxuWWFrdXQvTVxcbllha3V0c2svTVxcbllhbGUvTVxcbllhbG93L01cXG5ZYWx0YS9NXFxuWWFsdS9NXFxuWWFtYWdhdGEvTVxcbllhbWFoYS9NXFxuWWFtb3Vzc291a3JvL01cXG5ZYW5nL01cXG5ZYW5nb24vTVxcbllhbmd0emUvTVxcbllhbmsvU01cXG5ZYW5rZWUvU01cXG5ZYW9iYW5nL01cXG5ZYW91bmRlL01cXG5ZYXF1aS9NXFxuWWFyZW5cXG5ZYXJvc2xhdmwvTVxcbllhdGFyby9NXFxuWWF0ZXMvTVxcbllhdWNvL01cXG5ZYi9NXFxuWWVhZ2VyL01cXG5ZZWF0cy9NXFxuWWVrYXRlcmluYnVyZy9NXFxuWWVsbG93a25pZmUvTVxcblllbGxvd3N0b25lL01cXG5ZZWx0c2luL01cXG5ZZW1lbi9NXFxuWWVtZW5pL1NNXFxuWWVtZW5pdGVcXG5ZZW5pc2VpL01cXG5ZZXJldmFuL01cXG5ZZXJrZXMvTVxcblllc2VuaWEvTVxcbllldnR1c2hlbmtvL01cXG5ZZ2dkcmFzaWwvTVxcbllpZGRpc2gvTVxcblltaXIvTVxcbllvZGEvTVxcbllva25hcGF0YXdwaGEvTVxcbllva28vTVxcbllva29oYW1hL01cXG5Zb2xhbmRhL01cXG5Zb25nL01cXG5Zb25rZXJzL01cXG5Zb3JrL01cXG5Zb3JraWUvTVxcbllvcmtzaGlyZS9NU1xcbllvcmt0b3duL01cXG5Zb3J1YmEvTVxcbllvc2VtaXRlL01cXG5Zb3NzYXJpYW4vTVxcbllvdVR1YmUvTVxcbllvdW5nL01cXG5Zb3VuZ3N0b3duL01cXG5ZcHJlcy9NXFxuWXBzaWxhbnRpL01cXG5ZdWFuL01cXG5ZdWNhdGFuL01cXG5ZdWdvL01cXG5ZdWdvc2xhdi9NU1xcbll1Z29zbGF2aWEvTVxcbll1Z29zbGF2aWFuL1NNXFxuWXVrb24vTVxcbll1bGUvU01cXG5ZdWxldGlkZS9NU1xcbll1bWEvU01cXG5ZdW5uYW4vTVxcbll1cmkvTVxcbll2ZXMvTVxcbll2ZXR0ZS9NXFxuWXZvbm5lL01cXG5aL1NNTlhUXFxuWmFjaGFyaWFoL01cXG5aYWNoYXJ5L01cXG5aYWNoZXJ5L01cXG5aYWdyZWIvTVxcblphaXJlL01cXG5aYWlyaWFuXFxuWmFtYmV6aS9NXFxuWmFtYmlhL01cXG5aYW1iaWFuL1NNXFxuWmFtYm9uaS9NXFxuWmFtZW5ob2YvTVxcblphbW9yYS9NXFxuWmFuZS9NXFxuWmFudWNrL01cXG5aYW56aWJhci9NXFxuWmFwYXRhL01cXG5aYXBvcm96aHllL01cXG5aYXBvdGVjL01cXG5aYXBwYS9NXFxuWmFyYS9NXFxuWmFyYXRodXN0cmEvTVxcblplYWxhbmQvTVxcblplYmVkZWUvTVxcblplY2hhcmlhaC9NXFxuWmVkZWtpYWgvTVxcblplZG9uZy9NXFxuWmVmZmlyZWxsaS9NXFxuWmVrZS9NXFxuWmVsaWcvTVxcblplbG1hL01cXG5aZW4vTVxcblplbmdlci9NXFxuWmVuby9NXFxuWmVwaGFuaWFoL01cXG5aZXBoeXJoaWxscy9NXFxuWmVwaHlydXMvTVxcblplc3QvTVxcblpldXMvTVxcblpoZGFub3ZcXG5aaGVqaWFuZy9NXFxuWmhlbmd6aG91L01cXG5aaGl2YWdvL01cXG5aaHVrb3YvTVxcblppYm8vTVxcblppZWdmZWxkL01cXG5aaWVnbGVyL01cXG5aaWdneS9NXFxuWmlrYVxcblppbWJhYndlL01cXG5aaW1iYWJ3ZWFuL1NNXFxuWmltbWVybWFuL01cXG5aaW5mYW5kZWwvTVxcblppb24vU01cXG5aaW9uaXNtL1NNXFxuWmlvbmlzdC9TTVxcblppcGxvYy9NXFxuWm4vTVxcblpvZS9NXFxuWm9sYS9NXFxuWm9sbHZlcmVpbi9NXFxuWm9sb2Z0L01cXG5ab21iYS9NXFxuWm9ybi9NXFxuWm9yb2FzdGVyL01cXG5ab3JvYXN0cmlhbi9NU1xcblpvcm9hc3RyaWFuaXNtL1NNXFxuWm9ycm8vTVxcblpvc21hL01cXG5aci9NXFxuWnNpZ21vbmR5L01cXG5adWJlbmVsZ2VudWJpL01cXG5adWJlbmVzY2hhbWFsaS9NXFxuWnVrb3IvTVxcblp1bHUvU01cXG5adWx1bGFuZFxcblp1bmkvTVxcblp1cmljaC9NXFxuWndpbmdsaS9NXFxuWndvcnlraW4vTVxcblp5cnRlYy9NXFxuWnl1Z2Fub3YvTVxcblp6elxcbmEvU1xcbmFhaFxcbmFhcmR2YXJrL1NNXFxuYWIvU0RZXFxuYWJhY2tcXG5hYmFjdXMvTVNcXG5hYmFmdFxcbmFiYWxvbmUvU01cXG5hYmFuZG9uL0xTREdcXG5hYmFuZG9ubWVudC9NXFxuYWJhc2UvTEdEU1xcbmFiYXNlbWVudC9NXFxuYWJhc2gvR0xEU1xcbmFiYXNoZWQvVVlcXG5hYmFzaG1lbnQvTVxcbmFiYXRlL0xHRFNcXG5hYmF0ZWQvVVxcbmFiYXRlbWVudC9NXFxuYWJhdHRvaXIvTVNcXG5hYmJlL1NNXFxuYWJiZXNzL01TXFxuYWJiZXkvTVNcXG5hYmJvdC9NU1xcbmFiYnJcXG5hYmJyZXYvU1xcbmFiYnJldmlhdGUvRFNHTlhcXG5hYmJyZXZpYXRpb24vTVxcbmFiZGljYXRlL0dORFNYXFxuYWJkaWNhdGlvbi9NXFxuYWJkb21lbi9TTVxcbmFiZG9taW5hbFxcbmFiZHVjdC9EU0dcXG5hYmR1Y3RlZS9NU1xcbmFiZHVjdGlvbi9TTVxcbmFiZHVjdG9yL01TXFxuYWJlYW1cXG5hYmVycmFudFxcbmFiZXJyYXRpb24vTVNcXG5hYmVycmF0aW9uYWxcXG5hYmV0L1NcXG5hYmV0dGVkXFxuYWJldHRpbmdcXG5hYmV0dG9yL1NNXFxuYWJleWFuY2UvTVxcbmFiaG9yL1NcXG5hYmhvcnJlZFxcbmFiaG9ycmVuY2UvTVxcbmFiaG9ycmVudC9ZXFxuYWJob3JyaW5nXFxuYWJpZGFuY2UvTVxcbmFiaWRlL0dTXFxuYWJpZGluZy9ZXFxuYWJpbGl0eS9JRU1TXFxuYWJqZWN0L1lQXFxuYWJqZWN0aW9uL01cXG5hYmplY3RuZXNzL01cXG5hYmp1cmF0aW9uL1NNXFxuYWJqdXJhdG9yeVxcbmFianVyZS9aR0RSU1xcbmFianVyZXIvTVxcbmFibGF0ZS9YR05WRFNcXG5hYmxhdGlvbi9NXFxuYWJsYXRpdmUvTVNcXG5hYmxhemVcXG5hYmxlL1VUXFxuYWJsZXJcXG5hYmxvb21cXG5hYmx1dGlvbi9TTVxcbmFibmVnYXRlL0dORFNcXG5hYm5lZ2F0aW9uL01cXG5hYm5vcm1hbC9ZXFxuYWJub3JtYWxpdHkvU01cXG5hYm9hcmRcXG5hYm9kZS9NU1xcbmFib2xpc2gvR0RTXFxuYWJvbGl0aW9uL01cXG5hYm9saXRpb25pc20vTVxcbmFib2xpdGlvbmlzdC9TTVxcbmFib21pbmFibGVcXG5hYm9taW5hYmx5XFxuYWJvbWluYXRlL0RTR05YXFxuYWJvbWluYXRpb24vTVxcbmFib3JpZ2luYWwvTVNcXG5hYm9yaWdpbmUvU01cXG5hYm9ybmluZ1xcbmFib3J0L0dWRFNcXG5hYm9ydGlvbi9NU1xcbmFib3J0aW9uaXN0L01TXFxuYWJvcnRpdmUvWVxcbmFib3VuZC9EU0dcXG5hYm91dFxcbmFib3ZlL01cXG5hYm92ZWJvYXJkXFxuYWJyYWNhZGFicmEvTVxcbmFicmFkZS9HRFNcXG5hYnJhc2lvbi9NU1xcbmFicmFzaXZlL01ZUFNcXG5hYnJhc2l2ZW5lc3MvTVxcbmFicmVhc3RcXG5hYnJpZGdlL0RTR1xcbmFicmlkZ21lbnQvTVNcXG5hYnJvYWRcXG5hYnJvZ2F0ZS9YR05EU1xcbmFicm9nYXRpb24vTVxcbmFicm9nYXRvci9NU1xcbmFicnVwdC9UUFJZXFxuYWJydXB0bmVzcy9NXFxuYWJzL01cXG5hYnNjZXNzL01EU0dcXG5hYnNjaXNzYS9TTVxcbmFic2Npc3Npb24vTVxcbmFic2NvbmQvWkdTRFJcXG5hYnNjb25kZXIvTVxcbmFic2VpbC9NRFNHXFxuYWJzZW5jZS9TTVxcbmFic2VudC9EWVNHXFxuYWJzZW50ZWUvTVNcXG5hYnNlbnRlZWlzbS9NXFxuYWJzZW50bWluZGVkL1lQXFxuYWJzZW50bWluZGVkbmVzcy9NXFxuYWJzaW50aGUvTVxcbmFic29sdXRlL1BNWVROU1xcbmFic29sdXRlbmVzcy9NXFxuYWJzb2x1dGlvbi9NXFxuYWJzb2x1dGlzbS9NXFxuYWJzb2x1dGlzdC9NU1xcbmFic29sdmUvRFNHXFxuYWJzb3JiL0FHRFNcXG5hYnNvcmJhbmNlXFxuYWJzb3JiZW5jeS9NXFxuYWJzb3JiZW50L1NNXFxuYWJzb3JiaW5nL1lcXG5hYnNvcnB0aW9uL01cXG5hYnNvcnB0aXZlXFxuYWJzdGFpbi9EUlpHU1xcbmFic3RhaW5lci9NXFxuYWJzdGVtaW91cy9QWVxcbmFic3RlbWlvdXNuZXNzL01cXG5hYnN0ZW50aW9uL01TXFxuYWJzdGluZW5jZS9NXFxuYWJzdGluZW50XFxuYWJzdHJhY3QvR1NQTURZXFxuYWJzdHJhY3RlZC9ZUFxcbmFic3RyYWN0ZWRuZXNzL01cXG5hYnN0cmFjdGlvbi9TTVxcbmFic3RyYWN0bmVzcy9NU1xcbmFic3RydXNlL1lQXFxuYWJzdHJ1c2VuZXNzL01cXG5hYnN1cmQvVFBSWVxcbmFic3VyZGlzdC9NU1xcbmFic3VyZGl0eS9TTVxcbmFic3VyZG5lc3MvTVxcbmFidW5kYW5jZS9TTVxcbmFidW5kYW50L1lcXG5hYnVzZSdzXFxuYWJ1c2UvRUdWRFNcXG5hYnVzZXIvTVNcXG5hYnVzaXZlL1lQXFxuYWJ1c2l2ZW5lc3MvTVxcbmFidXQvU0xcXG5hYnV0bWVudC9NU1xcbmFidXR0ZWRcXG5hYnV0dGluZ1xcbmFidXp6XFxuYWJ5c21hbC9ZXFxuYWJ5c3MvTVNcXG5hYnlzc2FsXFxuYWNcXG5hY2FjaWEvTVNcXG5hY2FkZW1lL01cXG5hY2FkZW1pYS9NXFxuYWNhZGVtaWMvU01cXG5hY2FkZW1pY2FsL1lcXG5hY2FkZW1pY2lhbi9NU1xcbmFjYWRlbXkvU01cXG5hY2FudGh1cy9NU1xcbmFjY2VkZS9HRFNcXG5hY2NlbGVyYXRlL0dOWERTXFxuYWNjZWxlcmF0aW9uL01cXG5hY2NlbGVyYXRvci9TTVxcbmFjY2VudC9NRFNHXFxuYWNjZW50ZWQvVVxcbmFjY2VudHVhbFxcbmFjY2VudHVhdGUvR05EU1xcbmFjY2VudHVhdGlvbi9NXFxuYWNjZXB0L0RTQkdcXG5hY2NlcHRhYmlsaXR5L01cXG5hY2NlcHRhYmxlbmVzcy9NXFxuYWNjZXB0YWJseS9VXFxuYWNjZXB0YW5jZS9TTVxcbmFjY2VwdGF0aW9uL01TXFxuYWNjZXB0ZWQvVVxcbmFjY2Vzcy9NRFNHXFxuYWNjZXNzaWJpbGl0eS9JTVxcbmFjY2Vzc2libGUvSVxcbmFjY2Vzc2libHkvSVxcbmFjY2Vzc2lvbi9NREdTXFxuYWNjZXNzb3JpemUvRFNHXFxuYWNjZXNzb3J5L1NNXFxuYWNjaWRlbnQvTVNcXG5hY2NpZGVudGFsL1NNWVxcbmFjY2xhaW0vTURHU1xcbmFjY2xhbWF0aW9uL01cXG5hY2NsaW1hdGUvRFNHTlxcbmFjY2xpbWF0aW9uL01cXG5hY2NsaW1hdGl6YXRpb24vTVxcbmFjY2xpbWF0aXplL0RTR1xcbmFjY2xpdml0eS9TTVxcbmFjY29sYWRlL1NNXFxuYWNjb21tb2RhdGUvWEdORFNcXG5hY2NvbW1vZGF0aW5nL1lcXG5hY2NvbW1vZGF0aW9uL01cXG5hY2NvbXBhbmllZC9VXFxuYWNjb21wYW5pbWVudC9NU1xcbmFjY29tcGFuaXN0L1NNXFxuYWNjb21wYW55L0RTR1xcbmFjY29tcGxpY2UvU01cXG5hY2NvbXBsaXNoL0RTTEdcXG5hY2NvbXBsaXNoZWQvVVxcbmFjY29tcGxpc2htZW50L01TXFxuYWNjb3JkL0dNRFNcXG5hY2NvcmRhbmNlL01cXG5hY2NvcmRhbnRcXG5hY2NvcmRpbmcvWVxcbmFjY29yZGlvbi9NU1xcbmFjY29yZGlvbmlzdC9NU1xcbmFjY29zdC9HTURTXFxuYWNjb3VudC9NRFNCR1xcbmFjY291bnRhYmlsaXR5L01cXG5hY2NvdW50YWJsZS9VXFxuYWNjb3VudGFuY3kvTVxcbmFjY291bnRhbnQvTVNcXG5hY2NvdW50ZWQvVVxcbmFjY291bnRpbmcvTVxcbmFjY291dGVyL1NHRFxcbmFjY291dGVybWVudHMvTVxcbmFjY3JlZGl0L1NHRFxcbmFjY3JlZGl0YXRpb24vTVxcbmFjY3JlZGl0ZWQvVVxcbmFjY3JldGlvbi9NU1xcbmFjY3J1YWwvTVNcXG5hY2NydWUvR0RTXFxuYWNjdFxcbmFjY3VsdHVyYXRlL0RTR05cXG5hY2N1bHR1cmF0aW9uL01cXG5hY2N1bXVsYXRlL1hHTlZEU1xcbmFjY3VtdWxhdGlvbi9NXFxuYWNjdW11bGF0b3IvTVNcXG5hY2N1cmFjeS9JTVxcbmFjY3VyYXRlL0lZXFxuYWNjdXJhdGVuZXNzL01cXG5hY2N1cnNlZC9QXFxuYWNjdXJzZWRuZXNzL01cXG5hY2N1c2F0aW9uL01TXFxuYWNjdXNhdGl2ZS9NU1xcbmFjY3VzYXRvcnlcXG5hY2N1c2UvWkdEUlNcXG5hY2N1c2VyL01cXG5hY2N1c2luZy9ZXFxuYWNjdXN0b20vRFNHXFxuYWNjdXN0b21lZC9VXFxuYWNlL0RTTUdcXG5hY2VyYmF0ZS9EU0dcXG5hY2VyYmljXFxuYWNlcmJpY2FsbHlcXG5hY2VyYml0eS9NXFxuYWNldGFtaW5vcGhlbi9NXFxuYWNldGF0ZS9NU1xcbmFjZXRpY1xcbmFjZXRvbmUvTVxcbmFjZXRvbmljXFxuYWNldHlsXFxuYWNldHlsZW5lL01cXG5hY2hlL0RTTUdcXG5hY2hlbmUvTVNcXG5hY2hpZXZhYmxlL1VcXG5hY2hpZXZlL0JMWkdEUlNcXG5hY2hpZXZlbWVudC9TTVxcbmFjaGlldmVyL01cXG5hY2hpbmcvWVxcbmFjaG9vL01cXG5hY2hyb21hdGljXFxuYWNoeS9UUlxcbmFjaWQvU01ZXFxuYWNpZGljXFxuYWNpZGlmeS9HRFNcXG5hY2lkaXR5L01cXG5hY2lkb3Npcy9NXFxuYWNpZHVsb3VzXFxuYWNrbm93bGVkZ2UvRFNHXFxuYWNrbm93bGVkZ2VkL1VcXG5hY2tub3dsZWRnbWVudC9TTVxcbmFjbWUvU01cXG5hY25lL01cXG5hY29seXRlL01TXFxuYWNvbml0ZS9NU1xcbmFjb3JuL01TXFxuYWNvdXN0aWMvU1xcbmFjb3VzdGljYWwvWVxcbmFjb3VzdGljcy9NXFxuYWNxdWFpbnQvQUdTRFxcbmFjcXVhaW50YW5jZS9TTVxcbmFjcXVhaW50YW5jZXNoaXAvTVxcbmFjcXVhaW50ZWQvVVxcbmFjcXVpZXNjZS9EU0dcXG5hY3F1aWVzY2VuY2UvTVxcbmFjcXVpZXNjZW50L1lcXG5hY3F1aXJlL1pHQkRSU0xcXG5hY3F1aXJlbWVudC9NXFxuYWNxdWlzaXRpb24vTVNcXG5hY3F1aXNpdGl2ZS9ZUFxcbmFjcXVpc2l0aXZlbmVzcy9NXFxuYWNxdWl0L1NcXG5hY3F1aXR0YWwvTVNcXG5hY3F1aXR0ZWRcXG5hY3F1aXR0aW5nXFxuYWNyZS9TTVxcbmFjcmVhZ2UvTVNcXG5hY3JpZC9QVFJZXFxuYWNyaWRpdHkvTVxcbmFjcmlkbmVzcy9NXFxuYWNyaW1vbmlvdXMvWVBcXG5hY3JpbW9uaW91c25lc3MvTVxcbmFjcmltb255L01cXG5hY3JvYmF0L01TXFxuYWNyb2JhdGljL1NcXG5hY3JvYmF0aWNhbGx5XFxuYWNyb2JhdGljcy9NXFxuYWNyb255bS9NU1xcbmFjcm9waG9iaWEvTVxcbmFjcm9wb2xpcy9NU1xcbmFjcm9zc1xcbmFjcm9zdGljL1NNXFxuYWNyeWxhbWlkZVxcbmFjcnlsaWMvTVNcXG5hY3Qnc1xcbmFjdC9BU0RHVlxcbmFjdGluZy9NXFxuYWN0aW5pdW0vTVxcbmFjdGlvbi9BU01cXG5hY3Rpb25hYmxlXFxuYWN0aXZhdGUvSUNBTkdTRFxcbmFjdGl2YXRpb24vSUNBTVxcbmFjdGl2YXRvci9NU1xcbmFjdGl2ZSdzXFxuYWN0aXZlL0lLWVxcbmFjdGl2ZW5lc3MvTVxcbmFjdGl2ZXNcXG5hY3RpdmlzbS9NXFxuYWN0aXZpc3QvTVNcXG5hY3Rpdml0aWVzXFxuYWN0aXZpdHkvSU1cXG5hY3Rvci9BTVNcXG5hY3RyZXNzL01TXFxuYWN0dWFsL1lcXG5hY3R1YWxpdHkvU01cXG5hY3R1YWxpemF0aW9uL01cXG5hY3R1YWxpemUvR0RTXFxuYWN0dWFyaWFsXFxuYWN0dWFyeS9TTVxcbmFjdHVhdGUvR05EU1xcbmFjdHVhdGlvbi9NXFxuYWN0dWF0b3IvU01cXG5hY3VpdHkvTVxcbmFjdW1lbi9NXFxuYWN1cHJlc3N1cmUvTVxcbmFjdXB1bmN0dXJlL01cXG5hY3VwdW5jdHVyaXN0L1NNXFxuYWN1dGUvUE1ZVFJTXFxuYWN1dGVuZXNzL01cXG5hY3ljbG92aXIvTVxcbmFjeWxcXG5hZC9TTVxcbmFkYWdlL01TXFxuYWRhZ2lvL01TXFxuYWRhbWFudC9NWVxcbmFkYXB0L0JaR1ZEUlNcXG5hZGFwdGFiaWxpdHkvTVxcbmFkYXB0YXRpb24vTVNcXG5hZGFwdGVyL01cXG5hZGFwdGlvbi9TXFxuYWRkL1NEUkJaR1xcbmFkZGVuZC9NU1xcbmFkZGVuZGFcXG5hZGRlbmR1bS9NXFxuYWRkZXIvTVxcbmFkZGljdC9HVk1EU1xcbmFkZGljdGlvbi9TTVxcbmFkZGl0aW9uL1NNXFxuYWRkaXRpb25hbC9ZXFxuYWRkaXRpdmUvU01cXG5hZGRsZS9HRFNcXG5hZGRyZXNzJ3NcXG5hZGRyZXNzL0FHRFNcXG5hZGRyZXNzYWJsZVxcbmFkZHJlc3NlZC9VXFxuYWRkcmVzc2VlL1NNXFxuYWRkdWNlL0dEU1xcbmFkZW5pbmUvTVxcbmFkZW5vY2FyY2lub21hXFxuYWRlbm9pZC9TTVxcbmFkZW5vaWRhbFxcbmFkZXB0L01ZUFNcXG5hZGVwdG5lc3MvTVxcbmFkZXF1YWN5L0lNXFxuYWRlcXVhdGUvSVlcXG5hZGVxdWF0ZW5lc3MvTVxcbmFkaGVyZS9HRFNcXG5hZGhlcmVuY2UvTVxcbmFkaGVyZW50L1NNXFxuYWRoZXNpb24vTVxcbmFkaGVzaXZlL1BTTVxcbmFkaGVzaXZlbmVzcy9NXFxuYWRpYWJhdGljXFxuYWRpZXUvTVNcXG5hZGlvc1xcbmFkaXBvc2VcXG5hZGpcXG5hZGphY2VuY3kvTVxcbmFkamFjZW50L1lcXG5hZGplY3RpdmFsL1lcXG5hZGplY3RpdmUvTVNcXG5hZGpvaW4vR0RTXFxuYWRqb3Vybi9ER0xTXFxuYWRqb3Vybm1lbnQvU01cXG5hZGp1ZGdlL0dEU1xcbmFkanVkaWNhdGUvR05WWERTXFxuYWRqdWRpY2F0aW9uL01cXG5hZGp1ZGljYXRvci9TTVxcbmFkanVkaWNhdG9yeVxcbmFkanVuY3QvTVNcXG5hZGp1cmF0aW9uL01TXFxuYWRqdXJlL0dEU1xcbmFkanVzdC9BR0RTTFxcbmFkanVzdGFibGVcXG5hZGp1c3Rlci9TTVxcbmFkanVzdG1lbnQvQU1TXFxuYWRqdXRhbnQvU01cXG5hZG1hbi9NXFxuYWRtZW5cXG5hZG1pbi9TXFxuYWRtaW5pc3Rlci9ER1NcXG5hZG1pbmlzdHJhdGUvWERTR05WXFxuYWRtaW5pc3RyYXRpb24vTVxcbmFkbWluaXN0cmF0aXZlL1lcXG5hZG1pbmlzdHJhdG9yL01TXFxuYWRtaXJhYmx5XFxuYWRtaXJhbC9NU1xcbmFkbWlyYWx0eS9NXFxuYWRtaXJhdGlvbi9NXFxuYWRtaXJlL0JaR0RSU1xcbmFkbWlyZXIvTVxcbmFkbWlyaW5nL1lcXG5hZG1pc3NpYmlsaXR5L0lNXFxuYWRtaXNzaWJsZS9JXFxuYWRtaXNzaWJseVxcbmFkbWlzc2lvbi9BTVxcbmFkbWlzc2lvbnNcXG5hZG1pdC9BU1xcbmFkbWl0dGFuY2UvTVxcbmFkbWl0dGVkL1lcXG5hZG1pdHRpbmcvQVxcbmFkbWl4L0dEU1xcbmFkbWl4dHVyZS9TTVxcbmFkbW9uaXNoL0xEU0dcXG5hZG1vbmlzaG1lbnQvTVNcXG5hZG1vbml0aW9uL01TXFxuYWRtb25pdG9yeVxcbmFkby9NXFxuYWRvYmUvTVNcXG5hZG9sZXNjZW5jZS9TTVxcbmFkb2xlc2NlbnQvU01cXG5hZG9wdC9BR1ZEU1xcbmFkb3B0YWJsZVxcbmFkb3B0ZXIvTVNcXG5hZG9wdGlvbi9TTVxcbmFkb3JhYmxlbmVzcy9NXFxuYWRvcmFibHlcXG5hZG9yYXRpb24vTVxcbmFkb3JlL0JaR0RSU1xcbmFkb3Jlci9NXFxuYWRvcmluZy9ZXFxuYWRvcm4vTEdEU1xcbmFkb3JuZWQvVVxcbmFkb3JubWVudC9NU1xcbmFkcmVuYWwvTVNcXG5hZHJlbmFsaW4nc1xcbmFkcmVuYWxpbmUvTVxcbmFkcmVuZXJnaWNcXG5hZHJpZnRcXG5hZHJvaXQvUFlcXG5hZHJvaXRuZXNzL01cXG5hZHNvcmIvU0RHXFxuYWRzb3JiZW50L01TXFxuYWRzb3JwdGlvbi9TTVxcbmFkdWxhdGUvRFNHTlxcbmFkdWxhdGlvbi9NXFxuYWR1bGF0b3IvTVNcXG5hZHVsYXRvcnlcXG5hZHVsdC9NU1xcbmFkdWx0ZXJhbnQvTVNcXG5hZHVsdGVyYXRlL0dORFNcXG5hZHVsdGVyYXRlZC9VXFxuYWR1bHRlcmF0aW9uL01cXG5hZHVsdGVyZXIvU01cXG5hZHVsdGVyZXNzL01TXFxuYWR1bHRlcm91c1xcbmFkdWx0ZXJ5L1NNXFxuYWR1bHRob29kL01cXG5hZHVtYnJhdGUvR05EU1xcbmFkdW1icmF0aW9uL01cXG5hZHZcXG5hZHZhbmNlL0xEU01HXFxuYWR2YW5jZW1lbnQvU01cXG5hZHZhbnRhZ2UvRURTTUdcXG5hZHZhbnRhZ2VvdXMvRVlcXG5hZHZlbnQvU01cXG5hZHZlbnRpdGlvdXMvWVxcbmFkdmVudHVyZS9EUlNNWkdcXG5hZHZlbnR1cmVyL01cXG5hZHZlbnR1cmVzb21lXFxuYWR2ZW50dXJlc3MvTVNcXG5hZHZlbnR1cmlzbVxcbmFkdmVudHVyaXN0L1NcXG5hZHZlbnR1cm91cy9ZUFxcbmFkdmVudHVyb3VzbmVzcy9NXFxuYWR2ZXJiL1NNXFxuYWR2ZXJiaWFsL1NNWVxcbmFkdmVyc2FyaWFsXFxuYWR2ZXJzYXJ5L1NNXFxuYWR2ZXJzZS9QUllUXFxuYWR2ZXJzZW5lc3MvTVxcbmFkdmVyc2l0eS9TTVxcbmFkdmVydC9TTURHXFxuYWR2ZXJ0aXNlL0xaR0RSU1xcbmFkdmVydGlzZWQvVVxcbmFkdmVydGlzZW1lbnQvTVNcXG5hZHZlcnRpc2VyL01cXG5hZHZlcnRpc2luZy9NXFxuYWR2ZXJ0b3JpYWwvU01cXG5hZHZpY2UvTVxcbmFkdmlzYWJpbGl0eS9JTVxcbmFkdmlzYWJsZS9JXFxuYWR2aXNhYmx5XFxuYWR2aXNlL0xEUlNaR0JcXG5hZHZpc2VkL1VZXFxuYWR2aXNlbWVudC9NXFxuYWR2aXNlci9NXFxuYWR2aXNvci9TTVxcbmFkdmlzb3J5L1NNXFxuYWR2b2NhY3kvTVxcbmFkdm9jYXRlL01HRFNcXG5hZHZ0XFxuYWR3YXJlXFxuYWR6ZS9TTVxcbmFlZ2lzL01cXG5hZXJhdGUvRFNHTlxcbmFlcmF0aW9uL01cXG5hZXJhdG9yL1NNXFxuYWVyaWFsL1NNWVxcbmFlcmlhbGlzdC9NU1xcbmFlcmllL01TXFxuYWVyb2JhdGljL1NcXG5hZXJvYmF0aWNzL01cXG5hZXJvYmljL1NcXG5hZXJvYmljYWxseVxcbmFlcm9iaWNzL01cXG5hZXJvZHJvbWUvTVNcXG5hZXJvZHluYW1pYy9TXFxuYWVyb2R5bmFtaWNhbGx5XFxuYWVyb2R5bmFtaWNzL01cXG5hZXJvZ3JhbS9TXFxuYWVyb25hdXRpYy9TXFxuYWVyb25hdXRpY2FsXFxuYWVyb25hdXRpY3MvTVxcbmFlcm9zb2wvTVNcXG5hZXJvc3BhY2UvTVxcbmFlcnlcXG5hZXN0aGV0ZS9NU1xcbmFlc3RoZXRpYy9TXFxuYWVzdGhldGljYWxseVxcbmFlc3RoZXRpY2lzbS9NXFxuYWVzdGhldGljcy9NXFxuYWZhclxcbmFmZmFiaWxpdHkvTVxcbmFmZmFibGVcXG5hZmZhYmx5XFxuYWZmYWlyL01TXFxuYWZmZWN0J3NcXG5hZmZlY3QvRUdEU1xcbmFmZmVjdGF0aW9uL1NNXFxuYWZmZWN0ZWQvVVlcXG5hZmZlY3RpbmcvWVxcbmFmZmVjdGlvbi9FTVxcbmFmZmVjdGlvbmF0ZS9ZXFxuYWZmZWN0aW9uc1xcbmFmZmVyZW50XFxuYWZmaWFuY2UvR0RTXFxuYWZmaWRhdml0L1NNXFxuYWZmaWxpYXRlJ3NcXG5hZmZpbGlhdGUvRUdORFNcXG5hZmZpbGlhdGVkL1VcXG5hZmZpbGlhdGlvbi9FTVxcbmFmZmlsaWF0aW9uc1xcbmFmZmluZVxcbmFmZmluaXR5L1NNXFxuYWZmaXJtL0FHRFNcXG5hZmZpcm1hdGlvbi9BTVNcXG5hZmZpcm1hdGl2ZS9NWVNcXG5hZmZpeC9HTURTXFxuYWZmbGF0dXMvTVxcbmFmZmxpY3QvR0RTXFxuYWZmbGljdGlvbi9TTVxcbmFmZmx1ZW5jZS9NXFxuYWZmbHVlbnQvWVxcbmFmZm9yZC9HRFNCXFxuYWZmb3JkYWJpbGl0eVxcbmFmZm9yZGFibHlcXG5hZmZvcmVzdC9FR1NEXFxuYWZmb3Jlc3RhdGlvbi9NXFxuYWZmcmF5L01TXFxuYWZmcm9udC9HTURTXFxuYWZnaGFuL01TXFxuYWZpY2lvbmFkby9NU1xcbmFmaWVsZFxcbmFmaXJlXFxuYWZsYW1lXFxuYWZsb2F0XFxuYWZsdXR0ZXJcXG5hZm9vdFxcbmFmb3JlbWVudGlvbmVkXFxuYWZvcmVzYWlkXFxuYWZvcmV0aG91Z2h0XFxuYWZvdWxcXG5hZnJhaWQvVVxcbmFmcmVzaFxcbmFmdC9SWlxcbmFmdGVyYmlydGgvTVxcbmFmdGVyYmlydGhzXFxuYWZ0ZXJidXJuZXIvTVNcXG5hZnRlcmNhcmUvTVxcbmFmdGVyZWZmZWN0L01TXFxuYWZ0ZXJnbG93L1NNXFxuYWZ0ZXJpbWFnZS9NU1xcbmFmdGVybGlmZS9NXFxuYWZ0ZXJsaXZlc1xcbmFmdGVybWFya2V0L01TXFxuYWZ0ZXJtYXRoL01cXG5hZnRlcm1hdGhzXFxuYWZ0ZXJub29uL01TXFxuYWZ0ZXJzaGF2ZS9TTVxcbmFmdGVyc2hvY2svU01cXG5hZnRlcnRhc3RlL1NNXFxuYWZ0ZXJ0aG91Z2h0L1NNXFxuYWZ0ZXJ3YXJkL1NcXG5hZnRlcndvcmQvTVNcXG5hZ2FpblxcbmFnYWluc3RcXG5hZ2FwZS9NXFxuYWdhci9NXFxuYWdhdGUvTVNcXG5hZ2F2ZS9NXFxuYWdlL0RTTUdKXFxuYWdlaXNtL01cXG5hZ2Vpc3QvU01cXG5hZ2VsZXNzL1lQXFxuYWdlbGVzc25lc3MvTVxcbmFnZW5jeS9TTVxcbmFnZW5kYS9TTVxcbmFnZW5lc2lzXFxuYWdlbnQvQU1TXFxuYWdlcmF0dW0vTVxcbmFnZ2xvbWVyYXRlL0RTTUdOWFxcbmFnZ2xvbWVyYXRpb24vTVxcbmFnZ2x1dGluYXRlL0RTWEdOXFxuYWdnbHV0aW5hdGlvbi9NXFxuYWdncmFuZGl6ZS9HTERTXFxuYWdncmFuZGl6ZW1lbnQvTVxcbmFnZ3JhdmF0ZS9HTlhEU1xcbmFnZ3JhdmF0aW5nL1lcXG5hZ2dyYXZhdGlvbi9NXFxuYWdncmVnYXRlL01HTkRTWFxcbmFnZ3JlZ2F0aW9uL01cXG5hZ2dyZWdhdG9yL1NNXFxuYWdncmVzc2lvbi9NXFxuYWdncmVzc2l2ZS9QWVxcbmFnZ3Jlc3NpdmVuZXNzL01cXG5hZ2dyZXNzb3IvU01cXG5hZ2dyaWV2ZS9EU0dcXG5hZ2dyb1xcbmFnaGFzdFxcbmFnaWxlL1lcXG5hZ2lsaXR5L01cXG5hZ2luZy9NXFxuYWdpdGF0ZS9YR05EU1xcbmFnaXRhdGlvbi9NXFxuYWdpdGF0b3IvTVNcXG5hZ2l0cHJvcC9NXFxuYWdsZWFtXFxuYWdsaXR0ZXJcXG5hZ2xvd1xcbmFnbm9zdGljL01TXFxuYWdub3N0aWNpc20vTVxcbmFnb1xcbmFnb2dcXG5hZ29uaXN0L1NcXG5hZ29uaXplL0dEU1xcbmFnb25pemluZy9ZXFxuYWdvbnkvU01cXG5hZ29yYXBob2JpYS9NXFxuYWdvcmFwaG9iaWMvTVNcXG5hZ3Jhcmlhbi9NU1xcbmFncmFyaWFuaXNtL01cXG5hZ3JlZS9FQkxEU1xcbmFncmVlYWJsZW5lc3MvRU1cXG5hZ3JlZWFibHkvRVxcbmFncmVlaW5nL0VcXG5hZ3JlZW1lbnQvRVNNXFxuYWdyaWJ1c2luZXNzL01TXFxuYWdyaWN1bHR1cmFsL1lcXG5hZ3JpY3VsdHVyYWxpc3QvTVNcXG5hZ3JpY3VsdHVyZS9NXFxuYWdyaWN1bHR1cmlzdC9NU1xcbmFncm9ub21pY1xcbmFncm9ub21pc3QvTVNcXG5hZ3Jvbm9teS9NXFxuYWdyb3VuZFxcbmFndWUvTVxcbmFoXFxuYWhhXFxuYWhjaG9vXFxuYWhlYWRcXG5haGVtXFxuYWhveVxcbmFpZC9TTURHXFxuYWlkZS9TTVxcbmFpZGVkL1VcXG5haWdyZXR0ZS9NU1xcbmFpbC9TRExHXFxuYWlsZXJvbi9TTVxcbmFpbG1lbnQvU01cXG5haW0vU01ER1xcbmFpbWxlc3MvWVBcXG5haW1sZXNzbmVzcy9NXFxuYWluJ3RcXG5haXIvU01ESkdcXG5haXJiYWcvTVNcXG5haXJiYXNlL1NNXFxuYWlyYmVkL1NcXG5haXJib3JuZVxcbmFpcmJydXNoL01EU0dcXG5haXJidXMvTVNcXG5haXJjcmFmdC9NXFxuYWlyY3JhZnRtYW5cXG5haXJjcmFmdG1lblxcbmFpcmNyZXcvU1xcbmFpcmRyb21lL1NcXG5haXJkcm9wL1NNXFxuYWlyZHJvcHBlZFxcbmFpcmRyb3BwaW5nXFxuYWlyZmFyZS9TTVxcbmFpcmZpZWxkL1NNXFxuYWlyZmxvdy9NXFxuYWlyZm9pbC9TTVxcbmFpcmZyZWlnaHQvTVxcbmFpcmd1bnNcXG5haXJoZWFkL1NNXFxuYWlyaWx5XFxuYWlyaW5lc3MvTVxcbmFpcmluZy9NXFxuYWlybGVzcy9QXFxuYWlybGVzc25lc3MvTVxcbmFpcmxldHRlcnNcXG5haXJsaWZ0L1NHTURcXG5haXJsaW5lL1JTTVpcXG5haXJsaW5lci9NXFxuYWlybG9jay9TTVxcbmFpcm1haWwvR1NNRFxcbmFpcm1hbi9NXFxuYWlybWVuXFxuYWlycGxhbmUvTVNcXG5haXJwbGF5L01cXG5haXJwb3J0L1NNXFxuYWlyc2hpcC9TTVxcbmFpcnNob3cvU1xcbmFpcnNpY2svUFxcbmFpcnNpY2tuZXNzL01cXG5haXJzcGFjZS9NXFxuYWlyc3BlZWRcXG5haXJzdHJpa2UvTVNcXG5haXJzdHJpcC9TTVxcbmFpcnRpZ2h0XFxuYWlydGltZS9NXFxuYWlyd2F2ZXMvTVxcbmFpcndheS9NU1xcbmFpcndvbWFuXFxuYWlyd29tZW5cXG5haXJ3b3J0aGluZXNzL01cXG5haXJ3b3J0aHkvUFxcbmFpcnkvUFRSXFxuYWlzbGUvTVNcXG5haXRjaC9NU1xcbmFqYXJcXG5ha2FcXG5ha2ltYm9cXG5ha2luXFxuYWxhYmFzdGVyL01cXG5hbGFja1xcbmFsYWNyaXR5L01cXG5hbGFybS9HTURTXFxuYWxhcm1pbmcvWVxcbmFsYXJtaXN0L1NNXFxuYWxhc1xcbmFsYi9TTVxcbmFsYmFjb3JlL1NNXFxuYWxiYXRyb3NzL01TXFxuYWxiZWl0XFxuYWxiaW5pc20vTVxcbmFsYmluby9NU1xcbmFsYnVtL01OU1xcbmFsYnVtZW4vTVxcbmFsYnVtaW4vTVxcbmFsYnVtaW5vdXNcXG5hbGNoZW1pc3QvU01cXG5hbGNoZW15L01cXG5hbGNvaG9sL1NNXFxuYWxjb2hvbGljL01TXFxuYWxjb2hvbGljYWxseVxcbmFsY29ob2xpc20vTVxcbmFsY292ZS9NU1xcbmFsZGVyL01TXFxuYWxkZXJtYW4vTVxcbmFsZGVybWVuXFxuYWxkZXJ3b21hbi9NXFxuYWxkZXJ3b21lblxcbmFsZS9TTVZcXG5hbGVhdG9yeVxcbmFsZWhvdXNlL1NNXFxuYWxlbWJpYy9TTVxcbmFsZXJ0L0dNRFlQU1xcbmFsZXJ0bmVzcy9NXFxuYWxld2lmZS9NXFxuYWxld2l2ZXNcXG5hbGZhbGZhL01cXG5hbGZyZXNjb1xcbmFsZ2EvTVxcbmFsZ2FlXFxuYWxnYWxcXG5hbGdlYnJhL1NNXFxuYWxnZWJyYWljXFxuYWxnZWJyYWljYWxseVxcbmFsZ29yaXRobS9TTVxcbmFsZ29yaXRobWljXFxuYWxpYXMvR01EU1xcbmFsaWJpL0dNRFNcXG5hbGllbi9CR01EU1xcbmFsaWVuYWJsZS9JVVxcbmFsaWVuYXRlL0RTR05cXG5hbGllbmF0aW9uL01cXG5hbGllbmlzdC9TTVxcbmFsaWdodC9HRFNcXG5hbGlnbi9BTEdEU1xcbmFsaWduZWQvVVxcbmFsaWduZXIvTVNcXG5hbGlnbm1lbnQvQU1TXFxuYWxpa2UvVVxcbmFsaW1lbnQvTURTR1xcbmFsaW1lbnRhcnlcXG5hbGltb255L01cXG5hbGl2ZW5lc3MvTVxcbmFsaXlhaC9NXFxuYWxpeWFoc1xcbmFsa2FsaS9NXFxuYWxrYWxpZXNcXG5hbGthbGluZVxcbmFsa2FsaW5pdHkvTVxcbmFsa2FsaXplL0RTR1xcbmFsa2Fsb2lkL1NNXFxuYWxreWQvTVNcXG5hbGwvTVxcbmFsbGF5L0dEU1xcbmFsbGVnYXRpb24vTVNcXG5hbGxlZ2UvR0RTXFxuYWxsZWdlZC9ZXFxuYWxsZWdpYW5jZS9NU1xcbmFsbGVnb3JpY1xcbmFsbGVnb3JpY2FsL1lcXG5hbGxlZ29yaXN0L01TXFxuYWxsZWdvcnkvU01cXG5hbGxlZ3JldHRvL01TXFxuYWxsZWdyby9NU1xcbmFsbGVsZS9NU1xcbmFsbGVsdWlhL1NNXFxuYWxsZXJnZW4vU01cXG5hbGxlcmdlbmljXFxuYWxsZXJnaWNcXG5hbGxlcmdpY2FsbHlcXG5hbGxlcmdpc3QvU01cXG5hbGxlcmd5L1NNXFxuYWxsZXZpYXRlL0RTR05cXG5hbGxldmlhdGlvbi9NXFxuYWxsZXkvTVNcXG5hbGxleXdheS9TTVxcbmFsbGlhbmNlL1NNXFxuYWxsaWdhdG9yL01TXFxuYWxsaXRlcmF0ZS9EU1hHTlZcXG5hbGxpdGVyYXRpb24vTVxcbmFsbGl0ZXJhdGl2ZS9ZXFxuYWxsb2NhdGUvQURTR05cXG5hbGxvY2F0aW9uL0FNXFxuYWxsb2NhdGlvbnNcXG5hbGxvdC9MU1xcbmFsbG90bWVudC9TTVxcbmFsbG90dGVkXFxuYWxsb3R0aW5nXFxuYWxsb3ZlclxcbmFsbG93L0VHRFNcXG5hbGxvd2FibGUvVVxcbmFsbG93YWJseVxcbmFsbG93YW5jZS9TTVxcbmFsbG95L0dNRFNcXG5hbGxveWVkL1VcXG5hbGxzcGljZS9NXFxuYWxsdWRlL0dEU1xcbmFsbHVyZS9NR0xEU1xcbmFsbHVyZW1lbnQvTVNcXG5hbGx1cmluZy9ZXFxuYWxsdXNpb24vU01cXG5hbGx1c2l2ZS9QWVxcbmFsbHVzaXZlbmVzcy9NXFxuYWxsdXZpYWwvTVxcbmFsbHV2aXVtL1NNXFxuYWxseS9HRFNNXFxuYWxtYW5hYy9TTVxcbmFsbWlnaHR5XFxuYWxtb25kL01TXFxuYWxtb25lci9TTVxcbmFsbW9zdFxcbmFsbXMvTVxcbmFsbXNob3VzZS9NU1xcbmFsb2UvU01cXG5hbG9mdFxcbmFsb2hhL01TXFxuYWxvbmVcXG5hbG9uZ1xcbmFsb25nc2hvcmVcXG5hbG9uZ3NpZGVcXG5hbG9vZi9QWVxcbmFsb29mbmVzcy9NXFxuYWxvdWRcXG5hbHAvU01cXG5hbHBhY2EvTVNcXG5hbHBoYS9NU1xcbmFscGhhYmV0L1NNXFxuYWxwaGFiZXRpY1xcbmFscGhhYmV0aWNhbC9ZXFxuYWxwaGFiZXRpemF0aW9uL1NNXFxuYWxwaGFiZXRpemUvWkdEUlNcXG5hbHBoYWJldGl6ZXIvTVxcbmFscGhhbnVtZXJpY1xcbmFscGhhbnVtZXJpY2FsL1lcXG5hbHBpbmUvU1xcbmFscmVhZHlcXG5hbHJpZ2h0XFxuYWxzb1xcbmFsdC9TXFxuYWx0YXIvTVNcXG5hbHRhcnBpZWNlL1NNXFxuYWx0ZXIvR0RCU1xcbmFsdGVyYWJsZS9VXFxuYWx0ZXJhdGlvbi9NU1xcbmFsdGVyY2F0aW9uL1NNXFxuYWx0ZXJlZC9VXFxuYWx0ZXJuYXRlL0RTTVlHTlZYXFxuYWx0ZXJuYXRpb24vTVxcbmFsdGVybmF0aXZlL01ZU1xcbmFsdGVybmF0b3IvU01cXG5hbHRob3VnaFxcbmFsdGltZXRlci9NU1xcbmFsdGl0dWRlL01TXFxuYWx0by9TTVxcbmFsdG9nZXRoZXJcXG5hbHRydWlzbS9NXFxuYWx0cnVpc3QvU01cXG5hbHRydWlzdGljXFxuYWx0cnVpc3RpY2FsbHlcXG5hbHVtL1NNXFxuYWx1bWluYS9NXFxuYWx1bWludW0vTVxcbmFsdW1uYS9NXFxuYWx1bW5hZVxcbmFsdW1uaVxcbmFsdW1udXMvTVxcbmFsdmVvbGFyL1NcXG5hbHdheXNcXG5hbS9OXFxuYW1hbGdhbS9TTVxcbmFtYWxnYW1hdGUvWEdORFNcXG5hbWFsZ2FtYXRpb24vTVxcbmFtYW51ZW5zZXNcXG5hbWFudWVuc2lzL01cXG5hbWFyYW50aC9NXFxuYW1hcmFudGhzXFxuYW1hcmV0dG8vTVxcbmFtYXJ5bGxpcy9NU1xcbmFtYXNzL0dEU1xcbmFtYXRldXIvU01cXG5hbWF0ZXVyaXNoL1lQXFxuYW1hdGV1cmlzaG5lc3MvTVxcbmFtYXRldXJpc20vTVxcbmFtYXRvcnlcXG5hbWF6ZS9MTUdEU1xcbmFtYXplbWVudC9NXFxuYW1hemluZy9ZXFxuYW1hem9uL01TXFxuYW1hem9uaWFuXFxuYW1iYXNzYWRvci9TTVxcbmFtYmFzc2Fkb3JpYWxcXG5hbWJhc3NhZG9yc2hpcC9NU1xcbmFtYmFzc2FkcmVzcy9NU1xcbmFtYmVyL01cXG5hbWJlcmdyaXMvTVxcbmFtYmlhbmNlL01TXFxuYW1iaWRleHRlcml0eS9NXFxuYW1iaWRleHRyb3VzL1lcXG5hbWJpZW50XFxuYW1iaWd1aXR5L1NNXFxuYW1iaWd1b3VzL1VZXFxuYW1iaXRcXG5hbWJpdGlvbi9NU1xcbmFtYml0aW91cy9ZUFxcbmFtYml0aW91c25lc3MvTVxcbmFtYml2YWxlbmNlL01cXG5hbWJpdmFsZW50L1lcXG5hbWJsZS9NWkdEUlNcXG5hbWJsZXIvTVxcbmFtYnJvc2lhL01cXG5hbWJyb3NpYWxcXG5hbWJ1bGFuY2UvTVNcXG5hbWJ1bGFuY2VtYW5cXG5hbWJ1bGFuY2VtZW5cXG5hbWJ1bGFuY2V3b21hblxcbmFtYnVsYW5jZXdvbWVuXFxuYW1idWxhbnRcXG5hbWJ1bGF0ZS9EU1hHTlxcbmFtYnVsYXRpb24vTVxcbmFtYnVsYXRvcnkvU01cXG5hbWJ1c2NhZGUvTUdEU1xcbmFtYnVzaC9HTURTXFxuYW1lbGlvcmF0ZS9HTlZEU1xcbmFtZWxpb3JhdGlvbi9NXFxuYW1lbi9CXFxuYW1lbmFiaWxpdHkvTVxcbmFtZW5hYmx5XFxuYW1lbmQvQkxHRFNcXG5hbWVuZG1lbnQvU01cXG5hbWVuaXR5L1NNXFxuYW1lcmNlL0dMRFNcXG5hbWVyY2VtZW50L1NNXFxuYW1lcmljaXVtL01cXG5hbWV0aHlzdC9TTVxcbmFtaWFiaWxpdHkvTVxcbmFtaWFibGVcXG5hbWlhYmx5XFxuYW1pY2FiaWxpdHkvTVxcbmFtaWNhYmxlXFxuYW1pY2FibHlcXG5hbWlkXFxuYW1pZGUvTVNcXG5hbWlkc2hpcC9TXFxuYW1pZ28vTVNcXG5hbWluZS9TXFxuYW1pbm9cXG5hbWlzc1xcbmFtaXRyaXB0eWxpbmVcXG5hbWl0eS9NXFxuYW1tZXRlci9TTVxcbmFtbW8vTVxcbmFtbW9uaWEvTVxcbmFtbW9uaXVtXFxuYW1tdW5pdGlvbi9NXFxuYW1uZXNpYS9NXFxuYW1uZXNpYWMvTVNcXG5hbW5lc2ljL1NNXFxuYW1uZXN0eS9HRFNNXFxuYW1uaW9jZW50ZXNlc1xcbmFtbmlvY2VudGVzaXMvTVxcbmFtbmlvbi9NU1xcbmFtbmlvdGljXFxuYW1vZWJhL01TXFxuYW1vZWJhZVxcbmFtb2ViaWNcXG5hbW9rXFxuYW1vbmdcXG5hbW9udGlsbGFkby9TTVxcbmFtb3JhbC9ZXFxuYW1vcmFsaXR5L01cXG5hbW9yb3VzL1lQXFxuYW1vcm91c25lc3MvTVxcbmFtb3JwaG91cy9QWVxcbmFtb3JwaG91c25lc3MvTVxcbmFtb3J0aXphdGlvbi9TTVxcbmFtb3J0aXplL0RTR0JcXG5hbW91bnQvR01EU1xcbmFtb3VyL01TXFxuYW1veGljaWxsaW5cXG5hbXAvU01ZXFxuYW1wZXJhZ2UvTVxcbmFtcGVyZS9NU1xcbmFtcGVyc2FuZC9NU1xcbmFtcGhldGFtaW5lL1NNXFxuYW1waGliaWFuL01TXFxuYW1waGliaW91cy9ZXFxuYW1waGl0aGVhdGVyL1NNXFxuYW1waG9yYS9NXFxuYW1waG9yYWVcXG5hbXBpY2lsbGluXFxuYW1wbGUvVFJcXG5hbXBsaWZpY2F0aW9uL01cXG5hbXBsaWZpZXIvTVxcbmFtcGxpZnkvTkRSU1haR1xcbmFtcGxpdHVkZS9TTVxcbmFtcHVsZS9NU1xcbmFtcHV0YXRlL0dORFNYXFxuYW1wdXRhdGlvbi9NXFxuYW1wdXRlZS9NU1xcbmFtdFxcbmFtdWxldC9NU1xcbmFtdXNlL0xHRFNcXG5hbXVzZW1lbnQvTVNcXG5hbXVzaW5nL1lcXG5hbXlnZGFsYVxcbmFteWxhc2UvTVxcbmFteWxvaWRcXG5hbi9DU1xcbmFuYWJvbGlzbS9NXFxuYW5hY2hyb25pc20vU01cXG5hbmFjaHJvbmlzdGljXFxuYW5hY2hyb25pc3RpY2FsbHlcXG5hbmFjb25kYS9TTVxcbmFuYWVyb2JlL1NNXFxuYW5hZXJvYmljXFxuYW5hZXJvYmljYWxseVxcbmFuYWdyYW0vTVNcXG5hbmFsL1lcXG5hbmFsZ2VzaWEvTVxcbmFuYWxnZXNpYy9TTVxcbmFuYWxvZy9NU1xcbmFuYWxvZ2ljYWwvWVxcbmFuYWxvZ2l6ZS9HRFNcXG5hbmFsb2dvdXMvWVBcXG5hbmFsb2dvdXNuZXNzL01cXG5hbmFsb2d1ZS9TTVxcbmFuYWxvZ3kvU01cXG5hbmFseXNhbmQvTVNcXG5hbmFseXNlcy9BXFxuYW5hbHlzaXMvQU1cXG5hbmFseXN0L1NNXFxuYW5hbHl0aWMvU1xcbmFuYWx5dGljYWwvWVxcbmFuYWx5emFibGVcXG5hbmFseXplL0FEU0dcXG5hbmFseXplci9TTVxcbmFuYXBlc3QvU01cXG5hbmFwZXN0aWMvTVNcXG5hbmFyY2hpY1xcbmFuYXJjaGljYWxseVxcbmFuYXJjaGlzbS9NXFxuYW5hcmNoaXN0L01TXFxuYW5hcmNoaXN0aWNcXG5hbmFyY2h5L01cXG5hbmF0aGVtYS9TTVxcbmFuYXRoZW1hdGl6ZS9EU0dcXG5hbmF0b21pY1xcbmFuYXRvbWljYWwvWVxcbmFuYXRvbWlzdC9TTVxcbmFuYXRvbWl6ZS9EU0dcXG5hbmF0b215L1NNXFxuYW5jZXN0b3IvU01cXG5hbmNlc3RyYWwvWVxcbmFuY2VzdHJlc3MvTVNcXG5hbmNlc3RyeS9TTVxcbmFuY2hvci9NREdTXFxuYW5jaG9yYWdlL01TXFxuYW5jaG9yaXRlL01TXFxuYW5jaG9ybWFuL01cXG5hbmNob3JtZW5cXG5hbmNob3JwZW9wbGVcXG5hbmNob3JwZXJzb24vU01cXG5hbmNob3J3b21hbi9NXFxuYW5jaG9yd29tZW5cXG5hbmNob3Z5L1NNXFxuYW5jaWVudC9TUE1SWVRcXG5hbmNpZW50bmVzcy9NXFxuYW5jaWxsYXJ5L1NNXFxuYW5kXFxuYW5kYW50ZS9TTVxcbmFuZGlyb24vU01cXG5hbmRyb2dlbi9NXFxuYW5kcm9nZW5pY1xcbmFuZHJvZ3lub3VzXFxuYW5kcm9neW55L01cXG5hbmRyb2lkL1NNXFxuYW5lY2RvdGFsL1lcXG5hbmVjZG90ZS9NU1xcbmFuZW1pYS9NXFxuYW5lbWljXFxuYW5lbWljYWxseVxcbmFuZW1vbWV0ZXIvU01cXG5hbmVtb25lL1NNXFxuYW5lbnRcXG5hbmVzdGhlc2lhL01cXG5hbmVzdGhlc2lvbG9naXN0L1NNXFxuYW5lc3RoZXNpb2xvZ3kvTVxcbmFuZXN0aGV0aWMvU01cXG5hbmVzdGhldGlzdC9NU1xcbmFuZXN0aGV0aXphdGlvbi9NXFxuYW5lc3RoZXRpemUvR0RTXFxuYW5ldXJ5c20vU01cXG5hbmV3XFxuYW5nZWwvTVNcXG5hbmdlbGZpc2gvTVNcXG5hbmdlbGljXFxuYW5nZWxpY2EvTVxcbmFuZ2VsaWNhbC9ZXFxuYW5nZXIvR01EU1xcbmFuZ2luYS9NXFxuYW5naW9wbGFzdHkvU01cXG5hbmdpb3NwZXJtL1NNXFxuYW5nbGUvTVpHRFJTXFxuYW5nbGVyL01cXG5hbmdsZXdvcm0vTVNcXG5hbmdsaWNpc20vU1xcbmFuZ2xpY2l6ZS9HRFNcXG5hbmdsaW5nL01cXG5hbmdsb3BoaWxlL1NcXG5hbmdsb3Bob25lL1NcXG5hbmdvcmEvTVNcXG5hbmdvc3R1cmFcXG5hbmdyaWx5XFxuYW5ncnkvVFJcXG5hbmdzdC9NXFxuYW5nc3Ryb20vTVNcXG5hbmd1aXNoL0dNRFNcXG5hbmd1bGFyXFxuYW5ndWxhcml0eS9TTVxcbmFuZ3VsYXRpb25cXG5hbmh5ZHJvdXNcXG5hbmlsaW5lL01cXG5hbmlsaW5ndXNcXG5hbmltYWR2ZXJzaW9uL01TXFxuYW5pbWFkdmVydC9HU0RcXG5hbmltYWwvTVNcXG5hbmltYWxjdWxlL1NNXFxuYW5pbWF0ZS9BRFNHTlxcbmFuaW1hdGVkL1lcXG5hbmltYXRpb24vQU1cXG5hbmltYXRpb25zXFxuYW5pbWF0b3IvTVNcXG5hbmltZS9NXFxuYW5pbWlzbS9NXFxuYW5pbWlzdC9TTVxcbmFuaW1pc3RpY1xcbmFuaW1vc2l0eS9TTVxcbmFuaW11cy9NXFxuYW5pb24vTVNcXG5hbmlvbmljXFxuYW5pc2UvTVxcbmFuaXNlZWQvTVxcbmFuaXNldHRlL01cXG5hbmtoL01cXG5hbmtoc1xcbmFua2xlL01TXFxuYW5rbGVib25lL01TXFxuYW5rbGV0L01TXFxuYW5uYWxpc3QvU01cXG5hbm5hbHMvTVxcbmFubmVhbC9HRFNcXG5hbm5lbGlkL01TXFxuYW5uZXgvR01EU1xcbmFubmV4YXRpb24vTVNcXG5hbm5paGlsYXRlL0RTR05cXG5hbm5paGlsYXRpb24vTVxcbmFubmloaWxhdG9yL1NNXFxuYW5uaXZlcnNhcnkvU01cXG5hbm5vdGF0ZS9EU1hHTlZcXG5hbm5vdGF0aW9uL01cXG5hbm5vdGF0b3IvTVNcXG5hbm5vdW5jZS9EUlNMWkdcXG5hbm5vdW5jZWQvVVxcbmFubm91bmNlbWVudC9NU1xcbmFubm91bmNlci9NXFxuYW5ub3kvR0RTXFxuYW5ub3lhbmNlL01TXFxuYW5ub3lpbmcvWVxcbmFubnVhbC9NWVNcXG5hbm51YWxpemVkXFxuYW5udWl0YW50L1NNXFxuYW5udWl0eS9TTVxcbmFubnVsL0xTXFxuYW5udWxhclxcbmFubnVsbGVkXFxuYW5udWxsaW5nXFxuYW5udWxtZW50L1NNXFxuYW5udWx1c1xcbmFubnVuY2lhdGlvbi9TTVxcbmFub2RlL01TXFxuYW5vZGl6ZS9HRFNcXG5hbm9keW5lL01TXFxuYW5vaW50L0dETFNcXG5hbm9pbnRtZW50L01cXG5hbm9tYWxvdXMvWVxcbmFub21hbHkvU01cXG5hbm9uL1NcXG5hbm9ueW1pdHkvTVxcbmFub255bW91cy9ZXFxuYW5vcGhlbGVzL01cXG5hbm9yYWsvTVNcXG5hbm9yZWN0aWMvU01cXG5hbm9yZXhpYS9NXFxuYW5vcmV4aWMvTVNcXG5hbm90aGVyXFxuYW5zd2VyL0JNREdTXFxuYW5zd2VyYWJsZS9VXFxuYW5zd2VyZWQvVVxcbmFuc3dlcnBob25lL1NcXG5hbnQvU01EXFxuYW50YWNpZC9TTVxcbmFudGFnb25pc20vU01cXG5hbnRhZ29uaXN0L1NNXFxuYW50YWdvbmlzdGljXFxuYW50YWdvbmlzdGljYWxseVxcbmFudGFnb25pemUvRFNHXFxuYW50YXJjdGljXFxuYW50ZS9TTVxcbmFudGVhdGVyL01TXFxuYW50ZWJlbGx1bVxcbmFudGVjZWRlbmNlL01cXG5hbnRlY2VkZW50L1NNXFxuYW50ZWNoYW1iZXIvU01cXG5hbnRlZGF0ZS9HRFNcXG5hbnRlZGlsdXZpYW5cXG5hbnRlaW5nXFxuYW50ZWxvcGUvTVNcXG5hbnRlbmF0YWxcXG5hbnRlbm5hL1NNXFxuYW50ZW5uYWVcXG5hbnRlcmlvclxcbmFudGVyb29tL01TXFxuYW50aGVtL01TXFxuYW50aGVyL01TXFxuYW50aGlsbC9TTVxcbmFudGhvbG9naXN0L1NNXFxuYW50aG9sb2dpemUvRFNHXFxuYW50aG9sb2d5L1NNXFxuYW50aHJhY2l0ZS9NXFxuYW50aHJheC9NXFxuYW50aHJvcG9jZW50cmljXFxuYW50aHJvcG9pZC9NU1xcbmFudGhyb3BvbG9naWNhbC9ZXFxuYW50aHJvcG9sb2dpc3QvU01cXG5hbnRocm9wb2xvZ3kvTVxcbmFudGhyb3BvbW9ycGhpY1xcbmFudGhyb3BvbW9ycGhpY2FsbHlcXG5hbnRocm9wb21vcnBoaXNtL01cXG5hbnRocm9wb21vcnBoaXplXFxuYW50aHJvcG9tb3JwaG91c1xcbmFudGkvU01cXG5hbnRpYWJvcnRpb25cXG5hbnRpYWJvcnRpb25pc3QvTVNcXG5hbnRpYWlyY3JhZnRcXG5hbnRpYmFjdGVyaWFsL01TXFxuYW50aWJpb3RpYy9NU1xcbmFudGlib2R5L1NNXFxuYW50aWMvTVNcXG5hbnRpY2FuY2VyXFxuYW50aWNpcGF0ZS9HTlhEU1xcbmFudGljaXBhdGVkL1VcXG5hbnRpY2lwYXRpb24vTVxcbmFudGljaXBhdG9yeVxcbmFudGlja2VkXFxuYW50aWNraW5nXFxuYW50aWNsZXJpY2FsXFxuYW50aWNsaW1hY3RpY1xcbmFudGljbGltYWN0aWNhbGx5XFxuYW50aWNsaW1heC9NU1xcbmFudGljbGluZS9TTVxcbmFudGljbG9ja3dpc2VcXG5hbnRpY29hZ3VsYW50L01TXFxuYW50aWNvbW11bmlzbS9NXFxuYW50aWNvbW11bmlzdC9TTVxcbmFudGljeWNsb25lL1NNXFxuYW50aWN5Y2xvbmljXFxuYW50aWRlbW9jcmF0aWNcXG5hbnRpZGVwcmVzc2FudC9NU1xcbmFudGlkb3RlL01TXFxuYW50aWZhc2Npc3QvTVNcXG5hbnRpZmVycm9tYWduZXRpY1xcbmFudGlmcmVlemUvTVxcbmFudGlnZW4vU01cXG5hbnRpZ2VuaWNcXG5hbnRpZ2VuaWNpdHkvTVxcbmFudGloZXJvL01cXG5hbnRpaGVyb2VzXFxuYW50aWhpc3RhbWluZS9TTVxcbmFudGlrbm9jay9NXFxuYW50aWxhYm9yXFxuYW50aWxvZ2FyaXRobS9TTVxcbmFudGltYWNhc3Nhci9NU1xcbmFudGltYWxhcmlhbFxcbmFudGltYXR0ZXIvTVxcbmFudGltaWNyb2JpYWxcXG5hbnRpbWlzc2lsZVxcbmFudGltb255L01cXG5hbnRpbmV1dHJpbm8vU01cXG5hbnRpbmV1dHJvbi9NU1xcbmFudGludWNsZWFyXFxuYW50aW94aWRhbnQvTVNcXG5hbnRpcGFydGljbGUvU01cXG5hbnRpcGFzdGlcXG5hbnRpcGFzdG8vTVNcXG5hbnRpcGF0aGV0aWNcXG5hbnRpcGF0aHkvU01cXG5hbnRpcGVyc29ubmVsXFxuYW50aXBlcnNwaXJhbnQvU01cXG5hbnRpcGhvbi9TTVxcbmFudGlwaG9uYWwvTVlTXFxuYW50aXBvZGFsL1NcXG5hbnRpcG9kZWFuL01TXFxuYW50aXBvZGVzL01cXG5hbnRpcG9sbHV0aW9uXFxuYW50aXBvdmVydHlcXG5hbnRpcHJvdG9uL01TXFxuYW50aXF1YXJpYW4vU01cXG5hbnRpcXVhcmlhbmlzbS9NXFxuYW50aXF1YXJ5L1NNXFxuYW50aXF1YXRlL0dEU1xcbmFudGlxdWUvRFNNR1xcbmFudGlxdWl0eS9TTVxcbmFudGlycmhpbnVtL1NcXG5hbnRpc2NpZW5jZVxcbmFudGlzZW1pdGljXFxuYW50aXNlbWl0aXNtL01cXG5hbnRpc2Vwc2lzL01cXG5hbnRpc2VwdGljL1NNXFxuYW50aXNlcHRpY2FsbHlcXG5hbnRpc2VydW0vTVNcXG5hbnRpc2xhdmVyeVxcbmFudGlzb2NpYWwvWVxcbmFudGlzcGFzbW9kaWMvTVNcXG5hbnRpc3VibWFyaW5lXFxuYW50aXRhbmtcXG5hbnRpdGhlc2VzXFxuYW50aXRoZXNpcy9NXFxuYW50aXRoZXRpY1xcbmFudGl0aGV0aWNhbC9ZXFxuYW50aXRveGluL01TXFxuYW50aXRydXN0XFxuYW50aXZlbmluL01TXFxuYW50aXZlbm9tXFxuYW50aXZpcmFsL01TXFxuYW50aXZpcnVzXFxuYW50aXZpdmlzZWN0aW9uaXN0L01TXFxuYW50aXdhclxcbmFudGxlci9NRFNcXG5hbnRvbnltL1NNXFxuYW50b255bW91c1xcbmFudHJ1bVxcbmFudHN5L1RSXFxuYW51cy9NU1xcbmFudmlsL01TXFxuYW54aWV0eS9TTVxcbmFueGlvdXMvWVBcXG5hbnhpb3VzbmVzcy9NXFxuYW55XFxuYW55Ym9keS9TTVxcbmFueWhvd1xcbmFueW1vcmVcXG5hbnlvbmUvTVxcbmFueXBsYWNlXFxuYW55dGhpbmcvU01cXG5hbnl0aW1lXFxuYW55d2F5L1NcXG5hbnl3aGVyZVxcbmFueXdpc2VcXG5hb3J0YS9NU1xcbmFvcnRpY1xcbmFwYWNlXFxuYXBhcnRcXG5hcGFydGhlaWQvTVxcbmFwYXJ0bWVudC9NU1xcbmFwYXRoZXRpY1xcbmFwYXRoZXRpY2FsbHlcXG5hcGF0aHkvTVxcbmFwYXRpdGUvTVxcbmFwZS9EU01HXFxuYXBlbGlrZVxcbmFwZXJpdGlmL01TXFxuYXBlcnR1cmUvU01cXG5hcGV4L01TXFxuYXBoYXNpYS9NXFxuYXBoYXNpYy9NU1xcbmFwaGVsaWFcXG5hcGhlbGlvbi9TTVxcbmFwaGlkL01TXFxuYXBob3Jpc20vTVNcXG5hcGhvcmlzdGljXFxuYXBob3Jpc3RpY2FsbHlcXG5hcGhyb2Rpc2lhYy9TTVxcbmFwaWFyaXN0L1NNXFxuYXBpYXJ5L1NNXFxuYXBpY2FsL1lcXG5hcGllY2VcXG5hcGlzaC9ZXFxuYXBsZW50eVxcbmFwbG9tYi9NXFxuYXBvY2FseXBzZS9TTVxcbmFwb2NhbHlwdGljXFxuYXBvY3J5cGhhL01cXG5hcG9jcnlwaGFsL1lcXG5hcG9nZWUvTVNcXG5hcG9saXRpY2FsL1lcXG5hcG9sb2dldGljL1VcXG5hcG9sb2dldGljYWxseVxcbmFwb2xvZ2lhL1NNXFxuYXBvbG9naXN0L01TXFxuYXBvbG9naXplL0dEU1xcbmFwb2xvZ3kvU01cXG5hcG9wbGVjdGljXFxuYXBvcGxleHkvU01cXG5hcG9wdG9zaXNcXG5hcG9wdG90aWNcXG5hcG9zdGFzeS9TTVxcbmFwb3N0YXRlL1NNXFxuYXBvc3RhdGl6ZS9HRFNcXG5hcG9zdGxlL01TXFxuYXBvc3RsZXNoaXAvTVxcbmFwb3N0b2xpY1xcbmFwb3N0cm9waGUvTVNcXG5hcG90aGVjYXJ5L1NNXFxuYXBvdGhlZ20vU01cXG5hcG90aGVvc2VzXFxuYXBvdGhlb3Npcy9NXFxuYXBwL1NNXFxuYXBwYWxsL0dEU1xcbmFwcGFsbGluZy9ZXFxuYXBwYWxvb3NhL01TXFxuYXBwYXJhdGNoaWsvU1xcbmFwcGFyYXR1cy9NU1xcbmFwcGFyZWwvTURHU1xcbmFwcGFyZW50L1lcXG5hcHBhcml0aW9uL1NNXFxuYXBwZWFsL0dNRFNcXG5hcHBlYWxpbmcvVVlcXG5hcHBlYXIvQUVTREdcXG5hcHBlYXJhbmNlL0VBTVNcXG5hcHBlYXNlL0xaR0RSU1xcbmFwcGVhc2VtZW50L1NNXFxuYXBwZWFzZXIvTVxcbmFwcGVsbGFudC9TTVxcbmFwcGVsbGF0ZS9YTlxcbmFwcGVsbGF0aW9uL01cXG5hcHBlbmQvR0RTXFxuYXBwZW5kYWdlL1NNXFxuYXBwZW5kZWN0b215L1NNXFxuYXBwZW5kaWNlc1xcbmFwcGVuZGljaXRpcy9NXFxuYXBwZW5kaXgvTVNcXG5hcHBlcnRhaW4vR0RTXFxuYXBwZXRpdGUvU01cXG5hcHBldGl6ZXIvTVNcXG5hcHBldGl6aW5nL1lcXG5hcHBsYXVkL1pHRFJTXFxuYXBwbGF1ZGVyL01cXG5hcHBsYXVzZS9NXFxuYXBwbGUvTVNcXG5hcHBsZWphY2svTVxcbmFwcGxlc2F1Y2UvTVxcbmFwcGxldC9NU1xcbmFwcGxpYW5jZS9TTVxcbmFwcGxpY2FiaWxpdHkvTVxcbmFwcGxpY2FibGUvSVxcbmFwcGxpY2FibHlcXG5hcHBsaWNhbnQvU01cXG5hcHBsaWNhdGlvbi9BTVxcbmFwcGxpY2F0b3IvU01cXG5hcHBsaWVyL01TXFxuYXBwbGlxdWUvRFNNXFxuYXBwbGlxdWVpbmdcXG5hcHBseS9BTlhHRFNcXG5hcHBvaW50L0FFTFNWR0RcXG5hcHBvaW50ZWUvU01cXG5hcHBvaW50bWVudCdzL0FcXG5hcHBvaW50bWVudC9FU01cXG5hcHBvcnRpb24vQUdETFNcXG5hcHBvcnRpb25tZW50L0FNXFxuYXBwb3NlL0dEU1xcbmFwcG9zaXRlL1lOVlBcXG5hcHBvc2l0ZW5lc3MvTVxcbmFwcG9zaXRpb24vTVxcbmFwcG9zaXRpdmUvU01cXG5hcHByYWlzYWwvQU1TXFxuYXBwcmFpc2UvQURTR1xcbmFwcHJhaXNlci9NU1xcbmFwcHJlY2lhYmxlL0lcXG5hcHByZWNpYWJseS9JXFxuYXBwcmVjaWF0ZS9EU1hHTlZcXG5hcHByZWNpYXRlZC9VXFxuYXBwcmVjaWF0aW9uL01cXG5hcHByZWNpYXRpdmUvWVxcbmFwcHJlY2lhdG9yL01TXFxuYXBwcmVjaWF0b3J5XFxuYXBwcmVoZW5kL0dEU1xcbmFwcHJlaGVuc2lvbi9NU1xcbmFwcHJlaGVuc2l2ZS9ZUFxcbmFwcHJlaGVuc2l2ZW5lc3MvTVxcbmFwcHJlbnRpY2UvRFNNR1xcbmFwcHJlbnRpY2VzaGlwL01TXFxuYXBwcmlzZS9HRFNcXG5hcHByaXplL0dEU1xcbmFwcHJvYWNoL0dCTURTXFxuYXBwcm9hY2hhYmxlL1VJXFxuYXBwcm9iYXRpb24vRU1cXG5hcHByb2JhdGlvbnNcXG5hcHByb3ByaWF0ZS9QWUdOWERTXFxuYXBwcm9wcmlhdGVkL1VcXG5hcHByb3ByaWF0ZW5lc3MvSU1cXG5hcHByb3ByaWF0aW9uL01cXG5hcHByb3ByaWF0b3IvU01cXG5hcHByb3ZhbC9FTVxcbmFwcHJvdmFsc1xcbmFwcHJvdmUvRUdEU1xcbmFwcHJvdmVkL1VcXG5hcHByb3ZpbmcvRVlcXG5hcHByb3hcXG5hcHByb3hpbWF0ZS9EU1hZR05cXG5hcHByb3hpbWF0aW9uL01cXG5hcHB1cnRlbmFuY2UvU01cXG5hcHB1cnRlbmFudFxcbmFwcmljb3QvTVNcXG5hcHJvbi9NU1xcbmFwcm9wb3NcXG5hcHNlL1NNXFxuYXB0L0lZUFRcXG5hcHRlclxcbmFwdGl0dWRlL1NNXFxuYXB0bmVzcy9JTVxcbmFxdWEvU01cXG5hcXVhY3VsdHVyZS9NXFxuYXF1YWx1bmcvTVNcXG5hcXVhbWFyaW5lL1NNXFxuYXF1YW5hdXQvTVNcXG5hcXVhcGxhbmUvTUdEU1xcbmFxdWFyaXVtL01TXFxuYXF1YXRpYy9TTVxcbmFxdWF0aWNhbGx5XFxuYXF1YXRpY3MvTVxcbmFxdWF0aW50L1NcXG5hcXVhdml0L01cXG5hcXVlZHVjdC9NU1xcbmFxdWVvdXNcXG5hcXVpZmVyL1NNXFxuYXF1aWxpbmVcXG5hcmFiZXNxdWUvTVNcXG5hcmFiaWxpdHkvTVxcbmFyYWNobmlkL01TXFxuYXJhY2hub3Bob2JpYVxcbmFyYml0ZXIvU01cXG5hcmJpdHJhZ2UvTVpHRFJTXFxuYXJiaXRyYWdlci9NXFxuYXJiaXRyYWdldXIvU01cXG5hcmJpdHJhbWVudC9TTVxcbmFyYml0cmFyaWx5XFxuYXJiaXRyYXJpbmVzcy9NXFxuYXJiaXRyYXJ5L1BcXG5hcmJpdHJhdGUvR05EU1xcbmFyYml0cmF0aW9uL01cXG5hcmJpdHJhdG9yL01TXFxuYXJib3IvTVNcXG5hcmJvcmVhbFxcbmFyYm9yZXR1bS9TTVxcbmFyYm9ydml0YWUvU01cXG5hcmJ1dHVzL01TXFxuYXJjL1NNREdcXG5hcmNhZGUvTVNcXG5hcmNhbmVcXG5hcmNoL1BaVEdWTURSU1lcXG5hcmNoYWVvbG9naWNhbC9ZXFxuYXJjaGFlb2xvZ2lzdC9TTVxcbmFyY2hhZW9sb2d5L01cXG5hcmNoYWljXFxuYXJjaGFpY2FsbHlcXG5hcmNoYWlzbS9NU1xcbmFyY2hhaXN0L01TXFxuYXJjaGFuZ2VsL01TXFxuYXJjaGJpc2hvcC9TTVxcbmFyY2hiaXNob3ByaWMvU01cXG5hcmNoZGVhY29uL1NNXFxuYXJjaGRpb2Nlc2FuXFxuYXJjaGRpb2Nlc2UvTVNcXG5hcmNoZHVjaGVzcy9NU1xcbmFyY2hkdWtlL01TXFxuYXJjaGVuZW15L1NNXFxuYXJjaGVyL01cXG5hcmNoZXJ5L01cXG5hcmNoZXR5cGFsXFxuYXJjaGV0eXBlL01TXFxuYXJjaGZpZW5kL01TXFxuYXJjaGllcGlzY29wYWxcXG5hcmNoaXBlbGFnby9NU1xcbmFyY2hpdGVjdC9TTVxcbmFyY2hpdGVjdG9uaWMvU1xcbmFyY2hpdGVjdG9uaWNzL01cXG5hcmNoaXRlY3R1cmFsL1lcXG5hcmNoaXRlY3R1cmUvTVNcXG5hcmNoaXRyYXZlL1NNXFxuYXJjaGl2YWxcXG5hcmNoaXZlL0RTTUdcXG5hcmNoaXZpc3QvTVNcXG5hcmNobmVzcy9NXFxuYXJjaHdheS9TTVxcbmFyY3RpYy9NU1xcbmFyZGVudC9ZXFxuYXJkb3IvTVNcXG5hcmR1b3VzL1lQXFxuYXJkdW91c25lc3MvTVxcbmFyZS9TTUJcXG5hcmVhL1NNXFxuYXJlYWxcXG5hcmVuJ3RcXG5hcmVuYS9NU1xcbmFyZ2VudC9NXFxuYXJnaW5pbmVcXG5hcmdvbi9NXFxuYXJnb3N5L1NNXFxuYXJnb3QvTVNcXG5hcmd1YWJsZS9JVVxcbmFyZ3VhYmx5L1VcXG5hcmd1ZS9aR0RSU1xcbmFyZ3Vlci9NXFxuYXJndW1lbnQvTVNcXG5hcmd1bWVudGF0aW9uL01cXG5hcmd1bWVudGF0aXZlL1BZXFxuYXJndW1lbnRhdGl2ZW5lc3MvTVxcbmFyZ3lsZS9NU1xcbmFyaWEvU01cXG5hcmlkL1lcXG5hcmlkaXR5L01cXG5hcmlnaHRcXG5hcmlzZS9HU1xcbmFyaXNlblxcbmFyaXN0b2NyYWN5L1NNXFxuYXJpc3RvY3JhdC9TTVxcbmFyaXN0b2NyYXRpY1xcbmFyaXN0b2NyYXRpY2FsbHlcXG5hcml0aG1ldGljL01cXG5hcml0aG1ldGljYWwvWVxcbmFyaXRobWV0aWNpYW4vTVNcXG5hcmsvU01cXG5hcm0nc1xcbmFybS9FQUdEU1xcbmFybWFkYS9NU1xcbmFybWFkaWxsby9TTVxcbmFybWFtZW50L0FFTVxcbmFybWFtZW50c1xcbmFybWF0dXJlL01TXFxuYXJtYmFuZC9NU1xcbmFybWNoYWlyL01TXFxuYXJtZWQvVVxcbmFybWZ1bC9NU1xcbmFybWhvbGUvU01cXG5hcm1pc3RpY2UvU01cXG5hcm1sZXQvTVNcXG5hcm1sb2FkL1NcXG5hcm1vci9aR01EUlNcXG5hcm1vcmVkL1VcXG5hcm1vcmVyL01cXG5hcm1vcmlhbFxcbmFybW9yeS9TTVxcbmFybXBpdC9NU1xcbmFybXJlc3QvU01cXG5hcm15L1NNXFxuYXJvbWEvTVNcXG5hcm9tYXRoZXJhcGlzdC9NU1xcbmFyb21hdGhlcmFweS9NXFxuYXJvbWF0aWMvTVNcXG5hcm9tYXRpY2FsbHlcXG5hcm9zZVxcbmFyb3VuZFxcbmFyb3VzYWwvTVxcbmFyb3VzZS9HRFNcXG5hcnBlZ2dpby9NU1xcbmFyclxcbmFycmFpZ24vREdTTFxcbmFycmFpZ25tZW50L1NNXFxuYXJyYW5nZS9BRVNETEdcXG5hcnJhbmdlbWVudCdzL0VcXG5hcnJhbmdlbWVudC9BU01cXG5hcnJhbmdlci9TTVxcbmFycmFudFxcbmFycmFzL01TXFxuYXJyYXkvRUdNRFNcXG5hcnJlYXJzL01cXG5hcnJlc3QvQUdNRFNcXG5hcnJoeXRobWlhL01cXG5hcnJoeXRobWljXFxuYXJyaHl0aG1pY2FsXFxuYXJyaXZhbC9NU1xcbmFycml2ZS9HRFNcXG5hcnJvZ2FuY2UvTVxcbmFycm9nYW50L1lcXG5hcnJvZ2F0ZS9HTkRTXFxuYXJyb2dhdGlvbi9NXFxuYXJyb3cvTVNcXG5hcnJvd2hlYWQvTVNcXG5hcnJvd3Jvb3QvTVxcbmFycm95by9NU1xcbmFyc2VkXFxuYXJzZW5hbC9NU1xcbmFyc2VuaWMvTVxcbmFyc2luZ1xcbmFyc29uL01cXG5hcnNvbmlzdC9TTVxcbmFydC9TTVxcbmFydGVyaWFsXFxuYXJ0ZXJpb2xlL01TXFxuYXJ0ZXJpb3NjbGVyb3Npcy9NXFxuYXJ0ZXJ5L1NNXFxuYXJ0ZnVsL1BZXFxuYXJ0ZnVsbmVzcy9NXFxuYXJ0aHJpdGljL01TXFxuYXJ0aHJpdGlzL01cXG5hcnRocm9wb2QvTVNcXG5hcnRocm9zY29wZS9TTVxcbmFydGhyb3Njb3BpY1xcbmFydGhyb3Njb3B5XFxuYXJ0aWNob2tlL1NNXFxuYXJ0aWNsZS9NRFNcXG5hcnRpY3VsYWN5L0lcXG5hcnRpY3VsYXJcXG5hcnRpY3VsYXRlL1lHTlBEU1hcXG5hcnRpY3VsYXRlbmVzcy9JTVxcbmFydGljdWxhdGlvbi9NXFxuYXJ0aWZhY3QvU01cXG5hcnRpZmljZS9SU01aXFxuYXJ0aWZpY2VyL01cXG5hcnRpZmljaWFsL1lcXG5hcnRpZmljaWFsaXR5L01cXG5hcnRpbGxlcnkvTVxcbmFydGlsbGVyeW1hbi9NXFxuYXJ0aWxsZXJ5bWVuXFxuYXJ0aW5lc3MvTVxcbmFydGlzYW4vTVNcXG5hcnRpc3QvTVNcXG5hcnRpc3RlL01TXFxuYXJ0aXN0aWMvSVxcbmFydGlzdGljYWxseVxcbmFydGlzdHJ5L01cXG5hcnRsZXNzL1BZXFxuYXJ0bGVzc25lc3MvTVxcbmFydHN5L1RSXFxuYXJ0d29yay9NU1xcbmFydHkvUFRSXFxuYXJ1Z3VsYVxcbmFydW0vU01cXG5hc2FwXFxuYXNiZXN0b3MvTVxcbmFzY2VuZC9BR0RTXFxuYXNjZW5kYW5jZS9NXFxuYXNjZW5kYW5jeS9NXFxuYXNjZW5kYW50L1NNXFxuYXNjZW5zaW9uL01TXFxuYXNjZW50L01TXFxuYXNjZXJ0YWluL0dEU0JMXFxuYXNjZXJ0YWlubWVudC9NXFxuYXNjZXRpYy9NU1xcbmFzY2V0aWNhbGx5XFxuYXNjZXRpY2lzbS9NXFxuYXNjb3QvTVNcXG5hc2NyaWJlL0dCRFNcXG5hc2NyaXB0aW9uL01cXG5hc2VwdGljXFxuYXNlcHRpY2FsbHlcXG5hc2V4dWFsL1lcXG5hc2V4dWFsaXR5L01cXG5hc2gvTUROU0dcXG5hc2hhbWVkL1VZXFxuYXNoY2FuL01TXFxuYXNobGFyL01TXFxuYXNob3JlXFxuYXNocmFtL01TXFxuYXNodHJheS9TTVxcbmFzaHkvVFJcXG5hc2lkZS9NU1xcbmFzaW5pbmUvWVxcbmFzaW5pbml0eS9TTVxcbmFzay9TREdcXG5hc2thbmNlXFxuYXNrZWQvVVxcbmFza2V3XFxuYXNsYW50XFxuYXNsZWVwXFxuYXNvY2lhbFxcbmFzcC9TTU5YXFxuYXNwYXJhZ3VzL01cXG5hc3BhcnRhbWUvTVxcbmFzcGVjdC9NU1xcbmFzcGVuL01cXG5hc3Blcml0eS9TTVxcbmFzcGVyc2lvbi9NU1xcbmFzcGhhbHQvTURHU1xcbmFzcGhvZGVsL1NNXFxuYXNwaHl4aWEvTVxcbmFzcGh5eGlhdGUvRFNYR05cXG5hc3BoeXhpYXRpb24vTVxcbmFzcGljL01TXFxuYXNwaWRpc3RyYS9NU1xcbmFzcGlyYW50L01TXFxuYXNwaXJhdGUvTUdORFNYXFxuYXNwaXJhdGlvbi9NXFxuYXNwaXJhdG9yL1NNXFxuYXNwaXJlL0dEU1xcbmFzcGlyaW4vTVNcXG5hc3MvTVNcXG5hc3NhaWwvR0JEU1xcbmFzc2FpbGFibGUvVVxcbmFzc2FpbGFudC9TTVxcbmFzc2Fzc2luL1NNXFxuYXNzYXNzaW5hdGUvR05YRFNcXG5hc3Nhc3NpbmF0aW9uL01cXG5hc3NhdWx0L01EUkdTXFxuYXNzYXkvWkdNRFJTXFxuYXNzYXllci9NXFxuYXNzZW1ibGFnZS9TTVxcbmFzc2VtYmxlL0FFR1NEXFxuYXNzZW1ibGVyL01TXFxuYXNzZW1ibGllc1xcbmFzc2VtYmx5L0FNXFxuYXNzZW1ibHltYW4vTVxcbmFzc2VtYmx5bWVuXFxuYXNzZW1ibHl3b21hbi9NXFxuYXNzZW1ibHl3b21lblxcbmFzc2VudC9HTURTXFxuYXNzZXJ0L0FHVkRTXFxuYXNzZXJ0aW9uL0FNXFxuYXNzZXJ0aW9uc1xcbmFzc2VydGl2ZS9ZUFxcbmFzc2VydGl2ZW5lc3MvTVxcbmFzc2Vzcy9BTEdEU1xcbmFzc2Vzc21lbnQvQVNNXFxuYXNzZXNzb3IvTVNcXG5hc3NldC9NU1xcbmFzc2V2ZXJhdGUvRFNHTlxcbmFzc2V2ZXJhdGlvbi9NXFxuYXNzaG9sZS9NUyFcXG5hc3NpZHVpdHkvTVxcbmFzc2lkdW91cy9QWVxcbmFzc2lkdW91c25lc3MvTVxcbmFzc2lnbidzXFxuYXNzaWduL0FMR0RTXFxuYXNzaWduYWJsZVxcbmFzc2lnbmF0aW9uL01TXFxuYXNzaWduZWQvVVxcbmFzc2lnbmVlL01cXG5hc3NpZ25lci9NU1xcbmFzc2lnbm1lbnQvQU1TXFxuYXNzaWdub3IvTVNcXG5hc3NpbWlsYXRlL0RTR05cXG5hc3NpbWlsYXRlZC9VXFxuYXNzaW1pbGF0aW9uL01cXG5hc3Npc3QvR1ZNRFNcXG5hc3Npc3RhbmNlL01cXG5hc3Npc3RhbnQvU01cXG5hc3Npc3RlZC9VXFxuYXNzaXplL01TXFxuYXNzblxcbmFzc29jXFxuYXNzb2NpYXRlJ3NcXG5hc3NvY2lhdGUvRURTR05WXFxuYXNzb2NpYXRpb24vRU1cXG5hc3NvY2lhdGlvbnNcXG5hc3NvY2lhdGl2aXR5XFxuYXNzb25hbmNlL01cXG5hc3NvbmFudC9NU1xcbmFzc29ydC9HTERTXFxuYXNzb3J0YXRpdmVcXG5hc3NvcnRtZW50L01TXFxuYXNzdFxcbmFzc3VhZ2UvR0RTXFxuYXNzdW1lL0JHRFNcXG5hc3N1bXB0aW9uL1NNXFxuYXNzdW1wdGl2ZVxcbmFzc3VyYW5jZS9BU01cXG5hc3N1cmUvQUdEU1xcbmFzc3VyZWQvTVlTXFxuYXN0YXRpbmUvTVxcbmFzdGVyL0VNU1xcbmFzdGVyaXNrL0dNRFNcXG5hc3Rlcm5cXG5hc3Rlcm9pZC9NU1xcbmFzdGhtYS9NXFxuYXN0aG1hdGljL1NNXFxuYXN0aG1hdGljYWxseVxcbmFzdGlnbWF0aWNcXG5hc3RpZ21hdGlzbS9TTVxcbmFzdGlyXFxuYXN0b25pc2gvRFNMR1xcbmFzdG9uaXNoaW5nL1lcXG5hc3RvbmlzaG1lbnQvTVxcbmFzdG91bmQvR0RTXFxuYXN0b3VuZGluZy9ZXFxuYXN0cmFkZGxlXFxuYXN0cmFraGFuL01cXG5hc3RyYWxcXG5hc3RyYXlcXG5hc3RyaWRlXFxuYXN0cmluZ2VuY3kvTVxcbmFzdHJpbmdlbnQvU01ZXFxuYXN0cm9sYWJlL1NNXFxuYXN0cm9sb2dlci9TTVxcbmFzdHJvbG9naWNhbC9ZXFxuYXN0cm9sb2dpc3QvTVNcXG5hc3Ryb2xvZ3kvTVxcbmFzdHJvbmF1dC9NU1xcbmFzdHJvbmF1dGljL1NcXG5hc3Ryb25hdXRpY2FsXFxuYXN0cm9uYXV0aWNzL01cXG5hc3Ryb25vbWVyL1NNXFxuYXN0cm9ub21pY1xcbmFzdHJvbm9taWNhbC9ZXFxuYXN0cm9ub215L01cXG5hc3Ryb3BoeXNpY2FsXFxuYXN0cm9waHlzaWNpc3QvTVNcXG5hc3Ryb3BoeXNpY3MvTVxcbmFzdHV0ZS9QWVRSXFxuYXN0dXRlbmVzcy9NXFxuYXN1bmRlclxcbmFzeWx1bS9TTVxcbmFzeW1tZXRyaWNcXG5hc3ltbWV0cmljYWwvWVxcbmFzeW1tZXRyeS9TTVxcbmFzeW1wdG9tYXRpY1xcbmFzeW1wdG90aWNcXG5hc3ltcHRvdGljYWxseVxcbmFzeW5jaHJvbm91cy9ZXFxuYXRcXG5hdGF2aXNtL01cXG5hdGF2aXN0L1NNXFxuYXRhdmlzdGljXFxuYXRheGlhL01cXG5hdGF4aWMvTVNcXG5hdGVcXG5hdGVsaWVyL1NNXFxuYXRoZWlzbS9NXFxuYXRoZWlzdC9NU1xcbmF0aGVpc3RpY1xcbmF0aGVyb3NjbGVyb3Npcy9NXFxuYXRoZXJvc2NsZXJvdGljXFxuYXRoaXJzdFxcbmF0aGxldGUvTVNcXG5hdGhsZXRpYy9TXFxuYXRobGV0aWNhbGx5XFxuYXRobGV0aWNpc21cXG5hdGhsZXRpY3MvTVxcbmF0aHdhcnRcXG5hdGlsdFxcbmF0aXNob29cXG5hdGxhcy9NU1xcbmF0bW9zcGhlcmUvTVNcXG5hdG1vc3BoZXJpYy9TXFxuYXRtb3NwaGVyaWNhbGx5XFxuYXRtb3NwaGVyaWNzL01cXG5hdG9sbC9NU1xcbmF0b20vU01cXG5hdG9taWNcXG5hdG9taWNhbGx5XFxuYXRvbWl6ZS9aR0RSU1xcbmF0b21pemVyL01cXG5hdG9uYWwvWVxcbmF0b25hbGl0eS9NXFxuYXRvbmUvTEdEU1xcbmF0b25lbWVudC9NXFxuYXRvcFxcbmF0cmlhXFxuYXRyaWFsXFxuYXRyaW92ZW50cmljdWxhclxcbmF0cml1bS9NXFxuYXRyb2Npb3VzL1BZXFxuYXRyb2Npb3VzbmVzcy9NXFxuYXRyb2NpdHkvU01cXG5hdHJvcGh5L0RTTUdcXG5hdHJvcGluZS9NXFxuYXR0YWNoL0FMR0RTXFxuYXR0YWNoZS9CTVxcbmF0dGFjaGVkL1VcXG5hdHRhY2htZW50L0FNXFxuYXR0YWNobWVudHNcXG5hdHRhY2svWkdNRFJTXFxuYXR0YWNrZXIvTVxcbmF0dGFpbi9BR0RTXFxuYXR0YWluYWJpbGl0eS9NXFxuYXR0YWluYWJsZS9VXFxuYXR0YWluZGVyL01cXG5hdHRhaW5tZW50L1NNXFxuYXR0YXIvTVxcbmF0dGVtcHQnc1xcbmF0dGVtcHQvQVNER1xcbmF0dGVuZC9TRFJaR1xcbmF0dGVuZGFuY2UvU01cXG5hdHRlbmRhbnQvU01cXG5hdHRlbmRlZC9VXFxuYXR0ZW5kZWUvU01cXG5hdHRlbnRpb24vSU1cXG5hdHRlbnRpb25zXFxuYXR0ZW50aXZlL0lQWVxcbmF0dGVudGl2ZW5lc3MvSU1cXG5hdHRlbnVhdGUvRFNHTlxcbmF0dGVudWF0aW9uL01cXG5hdHRlc3QvU0RHXFxuYXR0ZXN0YXRpb24vU01cXG5hdHRlc3RlZC9VXFxuYXR0aWMvU01cXG5hdHRpcmUvRFNNR1xcbmF0dGl0dWRlL1NNXFxuYXR0aXR1ZGluYWxcXG5hdHRpdHVkaW5pemUvR0RTXFxuYXR0blxcbmF0dG9ybmV5L01TXFxuYXR0cmFjdC9TR1ZEQlxcbmF0dHJhY3RhbnQvTVNcXG5hdHRyYWN0aW9uL01TXFxuYXR0cmFjdGl2ZS9VWVxcbmF0dHJhY3RpdmVuZXNzL01cXG5hdHRyaWJ1dGUvRFNNR05WQlhcXG5hdHRyaWJ1dGVkL1VcXG5hdHRyaWJ1dGlvbi9NXFxuYXR0cmlidXRpdmUvTVlTXFxuYXR0cml0aW9uL01cXG5hdHR1bmUvRFNHXFxuYXR0eVxcbmF0d2l0dGVyXFxuYXR5cGljYWwvWVxcbmF1YmVyZ2luZS9TXFxuYXVidXJuL01cXG5hdWN0aW9uL01ER1NcXG5hdWN0aW9uZWVyL1NNXFxuYXVkYWNpb3VzL1lQXFxuYXVkYWNpb3VzbmVzcy9NXFxuYXVkYWNpdHkvTVxcbmF1ZGliaWxpdHkvSU1cXG5hdWRpYmxlL01TXFxuYXVkaWJseS9JXFxuYXVkaWVuY2UvTVNcXG5hdWRpby9NU1xcbmF1ZGlvbG9naWNhbFxcbmF1ZGlvbG9naXN0L1NNXFxuYXVkaW9sb2d5L01cXG5hdWRpb21ldGVyL1NNXFxuYXVkaW9waGlsZS9TTVxcbmF1ZGlvdGFwZS9TTVxcbmF1ZGlvdmlzdWFsL1NcXG5hdWRpb3Zpc3VhbHMvTVxcbmF1ZGl0L0dNRFNcXG5hdWRpdGlvbi9TTURHXFxuYXVkaXRvci9NU1xcbmF1ZGl0b3JpdW0vU01cXG5hdWRpdG9yeVxcbmF1Z2VyL01TXFxuYXVnaHQvTVNcXG5hdWdtZW50L0RSWkdTXFxuYXVnbWVudGF0aW9uL01TXFxuYXVnbWVudGF0aXZlXFxuYXVnbWVudGVyL01cXG5hdWd1ci9HTURTXFxuYXVndXJ5L1NNXFxuYXVndXN0L1BUUllcXG5hdWd1c3RuZXNzL01cXG5hdWsvU01cXG5hdW50L1NNXFxuYXVudGllL1NNXFxuYXVyYS9NU1xcbmF1cmFsL1lcXG5hdXJlb2xlL1NNXFxuYXVyZXVzXFxuYXVyaWNsZS9TTVxcbmF1cmljdWxhclxcbmF1cm9yYS9TTVxcbmF1c2N1bHRhdGUvR05EU1hcXG5hdXNjdWx0YXRpb24vTVxcbmF1c3BpY2UvU01cXG5hdXNwaWNpb3VzL0lZXFxuYXVzcGljaW91c25lc3MvTVxcbmF1c3RlcmUvUllUXFxuYXVzdGVyaXR5L1NNXFxuYXVzdHJhbFxcbmF1dGhlbnRpYy9JVVxcbmF1dGhlbnRpY2FsbHlcXG5hdXRoZW50aWNhdGUvWEdORFNcXG5hdXRoZW50aWNhdGVkL1VcXG5hdXRoZW50aWNhdGlvbi9NXFxuYXV0aGVudGljaXR5L01cXG5hdXRob3IvU01ER1xcbmF1dGhvcmVzcy9NU1xcbmF1dGhvcmlhbFxcbmF1dGhvcml0YXJpYW4vTVNcXG5hdXRob3JpdGFyaWFuaXNtL01cXG5hdXRob3JpdGF0aXZlL1lQXFxuYXV0aG9yaXRhdGl2ZW5lc3MvTVxcbmF1dGhvcml0eS9TTVxcbmF1dGhvcml6YXRpb24vTVNcXG5hdXRob3JpemUvQUdEU1xcbmF1dGhvcml6ZWQvVVxcbmF1dGhvcnNoaXAvTVxcbmF1dGlzbS9NXFxuYXV0aXN0aWNcXG5hdXRvL01TXFxuYXV0b2JhaG4vU01cXG5hdXRvYmlvZ3JhcGhlci9TTVxcbmF1dG9iaW9ncmFwaGljXFxuYXV0b2Jpb2dyYXBoaWNhbC9ZXFxuYXV0b2Jpb2dyYXBoeS9TTVxcbmF1dG9jbGF2ZS9NU1xcbmF1dG9jcmFjeS9TTVxcbmF1dG9jcmF0L1NNXFxuYXV0b2NyYXRpY1xcbmF1dG9jcmF0aWNhbGx5XFxuYXV0b2Nyb3NzXFxuYXV0b2RpZGFjdC9TTVxcbmF1dG9ncmFwaC9NREdcXG5hdXRvZ3JhcGhzXFxuYXV0b2ltbXVuZVxcbmF1dG9pbW11bml0eS9NXFxuYXV0b21ha2VyL1NNXFxuYXV0b21hdGUvR05EU1xcbmF1dG9tYXRpYy9TTVxcbmF1dG9tYXRpY2FsbHlcXG5hdXRvbWF0aW9uL01cXG5hdXRvbWF0aXNtL01cXG5hdXRvbWF0aXplL0dEU1xcbmF1dG9tYXRvbi9TTVxcbmF1dG9tb2JpbGUvRFNNR1xcbmF1dG9tb3RpdmVcXG5hdXRvbm9taWNcXG5hdXRvbm9tb3VzL1lcXG5hdXRvbm9teS9NXFxuYXV0b3BpbG90L1NNXFxuYXV0b3BzeS9HRFNNXFxuYXV0b3N1Z2dlc3Rpb25cXG5hdXRvd29ya2VyL01TXFxuYXV0dW1uL1NNXFxuYXV0dW1uYWxcXG5hdXhcXG5hdXhpbGlhcnkvU01cXG5hdXhpbi9NXFxuYXYvUlpcXG5hdmFpbC9CR01EU1xcbmF2YWlsYWJpbGl0eS9VTVxcbmF2YWlsYWJsZS9VXFxuYXZhbGFuY2hlL1NNXFxuYXZhcmljZS9NXFxuYXZhcmljaW91cy9ZXFxuYXZhc3RcXG5hdmF0YXIvTVNcXG5hdmF1bnRcXG5hdmRwXFxuYXZlXFxuYXZlbmdlL1pHRFJTXFxuYXZlbmdlci9NXFxuYXZlbnVlL01TXFxuYXZlcmFnZS9NWUdEU1xcbmF2ZXJyZWRcXG5hdmVycmluZ1xcbmF2ZXJzZS9YTlxcbmF2ZXJzaW9uL01cXG5hdmVydC9HRFNcXG5hdmdcXG5hdmlhblxcbmF2aWFyeS9TTVxcbmF2aWF0aW9uL01cXG5hdmlhdG9yL01TXFxuYXZpYXRyaWNlc1xcbmF2aWF0cml4L01TXFxuYXZpZC9ZXFxuYXZpZGl0eS9NXFxuYXZpb25pYy9TXFxuYXZpb25pY3MvTVxcbmF2aXRhbWlub3Npcy9NXFxuYXZvY2Fkby9TTVxcbmF2b2NhdGlvbi9NU1xcbmF2b2NhdGlvbmFsXFxuYXZvaWQvU0RHQlxcbmF2b2lkYWJsZS9VXFxuYXZvaWRhYmx5L1VcXG5hdm9pZGFuY2UvTVxcbmF2b2lkYW50XFxuYXZvaXJkdXBvaXMvTVxcbmF2b3VjaC9EU0dcXG5hdm93L0VER1NcXG5hdm93YWwvRVNNXFxuYXZvd2VkL1lcXG5hdnVuY3VsYXIvWVxcbmF3XFxuYXdhaXQvR0RTXFxuYXdha2UvR1NcXG5hd2FrZW4vQUdEU1xcbmF3YWtlbmluZy9TTVxcbmF3YXJkL0dNRFNcXG5hd2FyZGVlL1NcXG5hd2FyZS9VUFxcbmF3YXJlbmVzcy9VTVxcbmF3YXNoXFxuYXdheVxcbmF3ZS9EU01HXFxuYXdlaWdoXFxuYXdlc29tZS9ZUFxcbmF3ZXNvbWVuZXNzL01cXG5hd2VzdHJ1Y2tcXG5hd2Z1bC9ZUFxcbmF3ZnVsbGVyXFxuYXdmdWxsZXN0XFxuYXdmdWxuZXNzL01cXG5hd2hpbGVcXG5hd2t3YXJkL1JZUFRcXG5hd2t3YXJkbmVzcy9NXFxuYXdsL1NNXFxuYXduL0dKU01cXG5hd25pbmcvTVxcbmF3b2tlXFxuYXdva2VuXFxuYXdyeVxcbmF4L01EU0dcXG5heGlhbC9ZXFxuYXhpb20vU01cXG5heGlvbWF0aWNcXG5heGlvbWF0aWNhbGx5XFxuYXhpcy9NXFxuYXhsZS9NU1xcbmF4bGV0cmVlL1NNXFxuYXhvbG90bC9TTVxcbmF4b24vTVNcXG5heWFoL01cXG5heWFoc1xcbmF5YXRvbGxhaC9NXFxuYXlhdG9sbGFoc1xcbmF5ZS9TTVxcbmF6YWxlYS9TTVxcbmF6aW11dGgvTVxcbmF6aW11dGhzXFxuYXp1cmUvU01cXG5iL0tEVFxcbmJhYS9TTURHXFxuYmFiYmxlL01aR0RSU1xcbmJhYmJsZXIvTVxcbmJhYmUvU01cXG5iYWJlbC9NU1xcbmJhYm9vbi9NU1xcbmJhYnVzaGthL1NNXFxuYmFieS9UR0RSU01cXG5iYWJ5aG9vZC9NXFxuYmFieWlzaFxcbmJhYnlzYXRcXG5iYWJ5c2l0L1NcXG5iYWJ5c2l0dGVyL01TXFxuYmFieXNpdHRpbmcvTVxcbmJhY2NhbGF1cmVhdGUvU01cXG5iYWNjYXJhdC9NXFxuYmFjY2hhbmFsL01TXFxuYmFjY2hhbmFsaWEvTVxcbmJhY2NoYW5hbGlhbi9NU1xcbmJhY2N5XFxuYmFjaGVsb3IvU01cXG5iYWNoZWxvcmhvb2QvTVxcbmJhY2lsbGFyeVxcbmJhY2lsbGlcXG5iYWNpbGx1cy9NXFxuYmFjay9TSlpHTURSXFxuYmFja2FjaGUvTVNcXG5iYWNrYmVuY2gvU1xcbmJhY2tiaXRcXG5iYWNrYml0ZS9aR1JTXFxuYmFja2JpdGVyL01cXG5iYWNrYml0dGVuXFxuYmFja2JvYXJkL1NNXFxuYmFja2JvbmUvTVNcXG5iYWNrYnJlYWtpbmdcXG5iYWNrY2hhdFxcbmJhY2tjbG90aFxcbmJhY2tjbG90aHNcXG5iYWNrY29tYi9EU0dcXG5iYWNrZGF0ZS9HRFNcXG5iYWNrZG9vclxcbmJhY2tkcm9wL01TXFxuYmFja2VyL01cXG5iYWNrZmllbGQvU01cXG5iYWNrZmlyZS9NR0RTXFxuYmFja2dhbW1vbi9NXFxuYmFja2dyb3VuZC9NUlpTXFxuYmFja2dyb3VuZGVyL01cXG5iYWNraGFuZC9NRFJTWkdcXG5iYWNraGFuZGVkL1lcXG5iYWNraGFuZGVyL01cXG5iYWNraG9lL01TXFxuYmFja2luZy9NXFxuYmFja2xhc2gvTVNcXG5iYWNrbGVzc1xcbmJhY2tsb2cvTVNcXG5iYWNrbG9nZ2VkXFxuYmFja2xvZ2dpbmdcXG5iYWNrcGFjay9aR01EUlNcXG5iYWNrcGFja2VyL01cXG5iYWNrcGFja2luZy9NXFxuYmFja3BlZGFsL1NER1xcbmJhY2tyZXN0L1NNXFxuYmFja3Jvb20vU1xcbmJhY2tzY3JhdGNoaW5nL01cXG5iYWNrc2VhdC9TTVxcbmJhY2tzaWRlL1NNXFxuYmFja3NsYXBwZXIvU01cXG5iYWNrc2xhcHBpbmcvTVxcbmJhY2tzbGFzaC9NU1xcbmJhY2tzbGlkXFxuYmFja3NsaWRlL1JTWkdcXG5iYWNrc2xpZGVyL01cXG5iYWNrc3BhY2UvRFNNR1xcbmJhY2tzcGluL01cXG5iYWNrc3RhYmJlci9NU1xcbmJhY2tzdGFiYmluZ1xcbmJhY2tzdGFnZS9NXFxuYmFja3N0YWlyL1NcXG5iYWNrc3RvcC9TTVxcbmJhY2tzdG9wcGVkXFxuYmFja3N0b3BwaW5nXFxuYmFja3N0b3J5L1NcXG5iYWNrc3RyZWV0L1NcXG5iYWNrc3RyZXRjaC9NU1xcbmJhY2tzdHJva2UvTUdEU1xcbmJhY2t0YWxrL01cXG5iYWNrdHJhY2svU0RHXFxuYmFja3VwL01TXFxuYmFja3dhcmQvUFNZXFxuYmFja3dhcmRuZXNzL01cXG5iYWNrd2FzaC9NXFxuYmFja3dhdGVyL1NNXFxuYmFja3dvb2RzL01cXG5iYWNrd29vZHNtYW4vTVxcbmJhY2t3b29kc21lblxcbmJhY2t5YXJkL1NNXFxuYmFjb24vTVxcbmJhY3RlcmlhL01cXG5iYWN0ZXJpYWxcXG5iYWN0ZXJpY2lkYWxcXG5iYWN0ZXJpY2lkZS9TTVxcbmJhY3RlcmlvbG9naWNcXG5iYWN0ZXJpb2xvZ2ljYWxcXG5iYWN0ZXJpb2xvZ2lzdC9TTVxcbmJhY3RlcmlvbG9neS9NXFxuYmFjdGVyaXVtL01cXG5iYWQvTVlQXFxuYmFkZGVyXFxuYmFkZGVzdFxcbmJhZGRpZS9NU1xcbmJhZGVcXG5iYWRnZS9NWlJTXFxuYmFkZ2VyL0dNRFxcbmJhZGluYWdlL01cXG5iYWRsYW5kcy9NXFxuYmFkbWFuL01cXG5iYWRtZW5cXG5iYWRtaW50b24vTVxcbmJhZG1vdXRoL0dEXFxuYmFkbW91dGhzXFxuYmFkbmVzcy9NXFxuYmFmZmxlL01aR0RSU0xcXG5iYWZmbGVtZW50L01cXG5iYWZmbGVyL01cXG5iYWcvU01cXG5iYWdhdGVsbGUvU01cXG5iYWdlbC9NU1xcbmJhZ2Z1bC9NU1xcbmJhZ2dhZ2UvTVxcbmJhZ2dlZFxcbmJhZ2dpZS9NXFxuYmFnZ2lseVxcbmJhZ2dpbmVzcy9NXFxuYmFnZ2luZ1xcbmJhZ2d5L1BUUlNcXG5iYWdwaXBlL01aUlNcXG5iYWdwaXBlci9NXFxuYmFndWV0dGUvTVNcXG5iYWhcXG5iYWh0L1NNXFxuYmFpbC9TQkdNRFxcbmJhaWxleS9TXFxuYmFpbGlmZi9TXFxuYmFpbGl3aWNrL01TXFxuYmFpbG91dC9TTVxcbmJhaWxzbWFuL01cXG5iYWlsc21lblxcbmJhaXJuL01TXFxuYmFpdC9TR01EXFxuYmFpemUvTVxcbmJha2UvRFJTTVpHXFxuYmFrZWQvVVxcbmJha2VyL01cXG5iYWtlcnkvU01cXG5iYWtlc2hvcC9NU1xcbmJha2xhdmEvTVxcbmJha3NoZWVzaC9NXFxuYmFsYWNsYXZhL01TXFxuYmFsYWxhaWthL01TXFxuYmFsYW5jZSdzXFxuYmFsYW5jZS9VRFNHXFxuYmFsYm9hL1NNXFxuYmFsY29ueS9TTVxcbmJhbGQvU1RHUERSWVxcbmJhbGRlcmRhc2gvTVxcbmJhbGRmYWNlZFxcbmJhbGRuZXNzL01cXG5iYWxkcmljL1NNXFxuYmFsZHkvU1xcbmJhbGUvRFJTTVpHXFxuYmFsZWVuL01cXG5iYWxlZnVsL1BZXFxuYmFsZWZ1bG5lc3MvTVxcbmJhbGVyL01cXG5iYWxrL1NHTURcXG5iYWxreS9SVFxcbmJhbGwvU0dNRFxcbmJhbGxhZC9TTVxcbmJhbGxhZGVlci9NU1xcbmJhbGxhZHJ5L01cXG5iYWxsYXN0L0dTTURcXG5iYWxsY29jay9NU1xcbmJhbGxlcmluYS9TTVxcbmJhbGxldC9TTVxcbmJhbGxldGljXFxuYmFsbGdhbWUvTVNcXG5iYWxsZ2lybC9TXFxuYmFsbGdvd24vU1xcbmJhbGxpc3RpYy9TXFxuYmFsbGlzdGljcy9NXFxuYmFsbG9vbi9TR01EXFxuYmFsbG9vbmlzdC9NU1xcbmJhbGxvdC9TTURHXFxuYmFsbHBhcmsvTVNcXG5iYWxscGxheWVyL01TXFxuYmFsbHBvaW50L01TXFxuYmFsbHJvb20vTVNcXG5iYWxscy9EU0dcXG5iYWxsc3kvUlRcXG5iYWxseVxcbmJhbGx5aG9vL1NNREdcXG5iYWxtL1NNXFxuYmFsbWluZXNzL01cXG5iYWxteS9SVFBcXG5iYWxvbmV5L01cXG5iYWxzYS9NU1xcbmJhbHNhbS9TTVxcbmJhbHNhbWljXFxuYmFsdXN0ZXIvU01cXG5iYWx1c3RyYWRlL01TXFxuYmFtYm9vL1NNXFxuYmFtYm9vemxlL0RTR1xcbmJhbi9TTVxcbmJhbmFsL1lcXG5iYW5hbGl0eS9TTVxcbmJhbmFuYS9TTVxcbmJhbmQnc1xcbmJhbmQvRVNHRFxcbmJhbmRhZ2UvRFNNR1xcbmJhbmRhbm5hL01TXFxuYmFuZGJveC9NU1xcbmJhbmRlYXUvTVxcbmJhbmRlYXV4XFxuYmFuZGl0L1NNXFxuYmFuZGl0cnkvTVxcbmJhbmRsZWFkZXIvU1xcbmJhbmRtYXN0ZXIvU01cXG5iYW5kb2xlZXIvU01cXG5iYW5kc21hbi9NXFxuYmFuZHNtZW5cXG5iYW5kc3RhbmQvU01cXG5iYW5kd2Fnb24vU01cXG5iYW5kd2lkdGhcXG5iYW5kd2lkdGhzXFxuYmFuZHkvRFJTVEdcXG5iYW5lL1NNXFxuYmFuZWZ1bFxcbmJhbmcvU0dNRFJcXG5iYW5nbGUvU01cXG5iYW5pXFxuYmFuaXNoL0dMRFNcXG5iYW5pc2htZW50L01cXG5iYW5pc3Rlci9TTVxcbmJhbmpvL01TXFxuYmFuam9pc3QvU01cXG5iYW5rL1NaR0JNRFJcXG5iYW5rYm9vay9TTVxcbmJhbmtjYXJkL1NNXFxuYmFua2VyL01cXG5iYW5raW5nL01cXG5iYW5rbm90ZS9TTVxcbmJhbmtyb2xsL1NHTURcXG5iYW5rcnVwdC9TR01EXFxuYmFua3J1cHRjeS9TTVxcbmJhbm5lZFxcbmJhbm5lci9TTVxcbmJhbm5pbmdcXG5iYW5ub2NrL01TXFxuYmFubnMvTVxcbmJhbnF1ZXQvWkdNRFJTXFxuYmFucXVldGVyL01cXG5iYW5xdWV0dGUvU01cXG5iYW5zaGVlL01TXFxuYmFudGFtL1NNXFxuYmFudGFtd2VpZ2h0L1NNXFxuYmFudGVyL0dTTURcXG5iYW50ZXJpbmcvWVxcbmJhbnlhbi9TTVxcbmJhbnphaS9TTVxcbmJhb2JhYi9TTVxcbmJhcC9TXFxuYmFwdGlzbS9NU1xcbmJhcHRpc21hbFxcbmJhcHRpc3QvU1xcbmJhcHRpc3RlcnkvU01cXG5iYXB0aXplL1pHRFJTXFxuYmFwdGl6ZWQvVVxcbmJhcHRpemVyL01cXG5iYXInc1xcbmJhci9FQ1VUU1xcbmJhcmIvU1pHTURSXFxuYmFyYmFjb2FcXG5iYXJiYXJpYW4vU01cXG5iYXJiYXJpYW5pc20vTVNcXG5iYXJiYXJpY1xcbmJhcmJhcmljYWxseVxcbmJhcmJhcmlzbS9TTVxcbmJhcmJhcml0eS9TTVxcbmJhcmJhcml6ZS9EU0dcXG5iYXJiYXJvdXMvWVxcbmJhcmJlY3VlL0RTTUdcXG5iYXJiZWwvU01cXG5iYXJiZWxsL01TXFxuYmFyYmVyL0dNRFxcbmJhcmJlcnJ5L1NNXFxuYmFyYmVyc2hvcC9NU1xcbmJhcmJpZS9TXFxuYmFyYml0dXJhdGUvU01cXG5iYXJid2lyZS9NXFxuYmFyY2Fyb2xlL1NNXFxuYmFyZC9TTVxcbmJhcmRpY1xcbmJhcmUvRFJTUFlHXFxuYmFyZWJhY2svRFxcbmJhcmVmYWNlZC9ZXFxuYmFyZWZvb3QvRFxcbmJhcmVoYW5kZWRcXG5iYXJlaGVhZGVkXFxuYmFyZWxlZ2dlZFxcbmJhcmVuZXNzL01cXG5iYXJmL1NHTURZXFxuYmFyZmx5L1NNXFxuYmFyZ2Fpbi9NRFJaR1NcXG5iYXJnYWluZXIvTVxcbmJhcmdlL01HRFNcXG5iYXJnZW1hbi9NXFxuYmFyZ2VtZW5cXG5iYXJob3AvU1xcbmJhcmhvcHBlZFxcbmJhcmhvcHBpbmdcXG5iYXJpc3RhL01TXFxuYmFyaXRvbmUvTVNcXG5iYXJpdW0vTVxcbmJhcmsnc1xcbmJhcmsvQ1NHRFxcbmJhcmtlZXAvWk1SU1xcbmJhcmtlZXBlci9NXFxuYmFya2VyL1NNXFxuYmFybGV5L01cXG5iYXJtYWlkL01TXFxuYmFybWFuL01cXG5iYXJtZW5cXG5iYXJteS9SVFxcbmJhcm4vU01cXG5iYXJuYWNsZS9NRFNcXG5iYXJuZXkvU1xcbmJhcm5zdG9ybS9TRFJaR1xcbmJhcm5zdG9ybWVyL01cXG5iYXJueWFyZC9TTVxcbmJhcm9tZXRlci9NU1xcbmJhcm9tZXRyaWNcXG5iYXJvbWV0cmljYWxseVxcbmJhcm9uL01TXFxuYmFyb25hZ2UvTVNcXG5iYXJvbmVzcy9NU1xcbmJhcm9uZXQvTVNcXG5iYXJvbmV0Y3kvU01cXG5iYXJvbmlhbFxcbmJhcm9ueS9TTVxcbmJhcm9xdWUvTVxcbmJhcnJhY2svTURHU1xcbmJhcnJhY3VkYS9TTVxcbmJhcnJhZ2UvTUdEU1xcbmJhcnJlL01HSkRTXFxuYmFycmVkL1VFQ1xcbmJhcnJlbC9HU01EXFxuYmFycmVuL1RQU01SXFxuYmFycmVubmVzcy9NXFxuYmFycmV0dGUvU01cXG5iYXJyaWNhZGUvTUdEU1xcbmJhcnJpZXIvTVNcXG5iYXJyaW5nL0VDVVxcbmJhcnJpby9TTVxcbmJhcnJpc3Rlci9NU1xcbmJhcnJvb20vTVNcXG5iYXJyb3cvU01cXG5iYXJ0ZW5kZXIvU01cXG5iYXJ0ZXIvWkdTTURSXFxuYmFydGVyZXIvTVxcbmJhcnlvbi9TTVxcbmJhc2FsL1lcXG5iYXNhbHQvTVxcbmJhc2FsdGljXFxuYmFzZSdzXFxuYmFzZS9DRFNMVEdcXG5iYXNlYmFsbC9TTVxcbmJhc2Vib2FyZC9NU1xcbmJhc2VsZXNzXFxuYmFzZWxpbmUvTVNcXG5iYXNlbHlcXG5iYXNlbWFuL01cXG5iYXNlbWVuXFxuYmFzZW1lbnQvQ01TXFxuYmFzZW5lc3MvTVxcbmJhc2VyXFxuYmFzaC9HTURTXFxuYmFzaGZ1bC9QWVxcbmJhc2hmdWxuZXNzL01cXG5iYXNoaW5nL01cXG5iYXNpYy9NU1xcbmJhc2ljYWxseVxcbmJhc2lsL01cXG5iYXNpbGljYS9NU1xcbmJhc2lsaXNrL01TXFxuYmFzaW4vTVNcXG5iYXNpbmZ1bC9NU1xcbmJhc2lzL01cXG5iYXNrL1NHRFxcbmJhc2tldC9TTVxcbmJhc2tldGJhbGwvTVNcXG5iYXNrZXRyeS9NXFxuYmFza2V0d29yay9NXFxuYmFzcXVlL1NcXG5iYXNzL01TXFxuYmFzc2V0L1NNXFxuYmFzc2luZXQvTVNcXG5iYXNzaXN0L01TXFxuYmFzc28vTVNcXG5iYXNzb29uL01TXFxuYmFzc29vbmlzdC9TTVxcbmJhc3N3b29kL01TXFxuYmFzdC9NXFxuYmFzdGFyZC9NU1xcbmJhc3RhcmRpemF0aW9uL01TXFxuYmFzdGFyZGl6ZS9HRFNcXG5iYXN0YXJkeS9NXFxuYmFzdGUvWkdOWERSU1xcbmJhc3Rlci9NXFxuYmFzdGlvbi9NXFxuYmF0L1NNXFxuYmF0Y2gvTURTR1xcbmJhdGUvS0FDR1NEXFxuYmF0aC9aR01EUlNcXG5iYXRoZS9NXFxuYmF0aGVyL01cXG5iYXRoZXRpY1xcbmJhdGhob3VzZS9NU1xcbmJhdGhpbmcvTVxcbmJhdGhtYXQvTVNcXG5iYXRob3MvTVxcbmJhdGhyb2JlL1NNXFxuYmF0aHJvb20vU01cXG5iYXRoc1xcbmJhdGh0dWIvTVNcXG5iYXRod2F0ZXJcXG5iYXRoeXNjYXBoZS9TTVxcbmJhdGh5c3BoZXJlL01TXFxuYmF0aWsvTVNcXG5iYXRpc3RlL01cXG5iYXRtYW4vTVxcbmJhdG1lblxcbmJhdG9uL01TXFxuYmF0c21hbi9NXFxuYmF0c21lblxcbmJhdHRhbGlvbi9TTVxcbmJhdHRlZFxcbmJhdHRlbi9HU01EXFxuYmF0dGVyL0paR1NNRFJcXG5iYXR0ZXJlci9NXFxuYmF0dGVyeS9TTVxcbmJhdHRpbmcvTVxcbmJhdHRsZS9MRFJTTVpHXFxuYmF0dGxlYXhlL01TXFxuYmF0dGxlZG9yZS9TTVxcbmJhdHRsZWRyZXNzXFxuYmF0dGxlZmllbGQvTVNcXG5iYXR0bGVmcm9udC9NU1xcbmJhdHRsZWdyb3VuZC9NU1xcbmJhdHRsZW1lbnQvU01cXG5iYXR0bGVyL01cXG5iYXR0bGVzaGlwL1NNXFxuYmF0dHkvUlRcXG5iYXVibGUvU01cXG5iYXVkL1NNXFxuYmF1eGl0ZS9NXFxuYmF3ZC9TTVxcbmJhd2RpbHlcXG5iYXdkaW5lc3MvTVxcbmJhd2R5L1BSVFxcbmJhd2wvU0dNRFxcbmJheS9TTURHXFxuYmF5YmVycnkvU01cXG5iYXlvbmV0L1NNREdcXG5iYXlvdS9NU1xcbmJhemFhci9TTVxcbmJhemlsbGlvbi9TXFxuYmF6b29rYS9TTVxcbmJibFxcbmJkcm1cXG5iZVxcbmJlYWNoL01EU0dcXG5iZWFjaGNvbWJlci9TTVxcbmJlYWNoZnJvbnRcXG5iZWFjaGhlYWQvTVNcXG5iZWFjaHdlYXIvTVxcbmJlYWNvbi9TTVxcbmJlYWQvU0dNRFxcbmJlYWRpbmcvTVxcbmJlYWRsZS9TTVxcbmJlYWR5L1JUXFxuYmVhZ2xlL1NNXFxuYmVhay9TWk1EUlxcbmJlYWtlci9NXFxuYmVhbS9TR01EXFxuYmVhbi9TR01EXFxuYmVhbmJhZy9NU1xcbmJlYW5mZWFzdC9TXFxuYmVhbmllL1NNXFxuYmVhbnBvbGUvTVNcXG5iZWFuc3Byb3V0L1NcXG5iZWFuc3RhbGsvTVNcXG5iZWFyL1NaR0JKTVJcXG5iZWFyYWJsZS9VXFxuYmVhcmFibHkvVVxcbmJlYXJkL01ER1NcXG5iZWFyZGxlc3NcXG5iZWFyZXIvTVxcbmJlYXJpbmcvTVxcbmJlYXJpc2gvUFlcXG5iZWFyaXNobmVzcy9NXFxuYmVhcmxpa2VcXG5iZWFyc2tpbi9NU1xcbmJlYXN0L01TXFxuYmVhc3RsaW5lc3MvTVxcbmJlYXN0bHkvVFBSTVxcbmJlYXQvU1pHQk1OUkpcXG5iZWF0YWJsZS9VXFxuYmVhdGVuL1VcXG5iZWF0ZXIvTVxcbmJlYXRpZmljXFxuYmVhdGlmaWNhbGx5XFxuYmVhdGlmaWNhdGlvbi9NXFxuYmVhdGlmeS9HWE5EU1xcbmJlYXRpbmcvTVxcbmJlYXRpdHVkZS9TTVxcbmJlYXRuaWsvTVNcXG5iZWF1L1NNXFxuYmVhdXQvTVNcXG5iZWF1dGVvdXMvWVxcbmJlYXV0aWNpYW4vU01cXG5iZWF1dGlmaWNhdGlvbi9NXFxuYmVhdXRpZmllci9NXFxuYmVhdXRpZnVsL1lcXG5iZWF1dGlmeS9ORFJTWkdcXG5iZWF1dHkvU01cXG5iZWF2ZXIvU0dNRFxcbmJlYm9wL01TXFxuYmVjYWxtL0dTRFxcbmJlY2FtZVxcbmJlY2F1c2VcXG5iZWNrL1NNXFxuYmVja29uL1NHRFxcbmJlY2xvdWQvR0RTXFxuYmVjb21lL1NcXG5iZWNvbWluZy9VWVxcbmJlY3F1ZXJlbC9TXFxuYmVkL1NNXFxuYmVkYXViL0dTRFxcbmJlZGF6emxlL0dEU0xcXG5iZWRhenpsZW1lbnQvTVxcbmJlZGJ1Zy9TTVxcbmJlZGNoYW1iZXIvU1xcbmJlZGNsb3RoZXMvTVxcbmJlZGRlZFxcbmJlZGRlclxcbmJlZGRpbmcvTVxcbmJlZGVjay9HU0RcXG5iZWRldmlsL0xHRFNcXG5iZWRldmlsbWVudC9NXFxuYmVkZmVsbG93L1NNXFxuYmVkaGVhZC9TXFxuYmVkaW0vU1xcbmJlZGltbWVkXFxuYmVkaW1taW5nXFxuYmVkaXplbi9HRFNcXG5iZWRsYW0vU01cXG5iZWRwYW4vU01cXG5iZWRwb3N0L1NNXFxuYmVkcmFnZ2xlL0dEU1xcbmJlZHJpZGRlblxcbmJlZHJvY2svU01cXG5iZWRyb2xsL1NNXFxuYmVkcm9vbS9TTVxcbmJlZHNpZGUvU01cXG5iZWRzaXQvU1xcbmJlZHNpdHRlci9TXFxuYmVkc29yZS9TTVxcbmJlZHNwcmVhZC9TTVxcbmJlZHN0ZWFkL1NNXFxuYmVkdGltZS9TTVxcbmJlZS9SU01aR0pcXG5iZWVicmVhZC9NXFxuYmVlY2gvTVNcXG5iZWVjaG51dC9NU1xcbmJlZWYvU0dNRFxcbmJlZWZidXJnZXIvU01cXG5iZWVmY2FrZS9NU1xcbmJlZWZpbmVzcy9NXFxuYmVlZnN0ZWFrL01TXFxuYmVlZnkvUlBUXFxuYmVlaGl2ZS9NU1xcbmJlZWtlZXBlci9NU1xcbmJlZWtlZXBpbmcvTVxcbmJlZWxpbmUvTVNcXG5iZWVuXFxuYmVlcC9TWkdNRFJcXG5iZWVwZXIvTVxcbmJlZXIvTVxcbmJlZXJ5L1RSXFxuYmVlc3dheC9NXFxuYmVldC9TTVxcbmJlZXRsZS9NR0RTXFxuYmVldHJvb3QvU1xcbmJlZXZlc1xcbmJlZmFsbC9TR05cXG5iZWZlbGxcXG5iZWZpdC9TXFxuYmVmaXR0ZWRcXG5iZWZpdHRpbmcvWVxcbmJlZm9nL1NcXG5iZWZvZ2dlZFxcbmJlZm9nZ2luZ1xcbmJlZm9yZVxcbmJlZm9yZWhhbmRcXG5iZWZvdWwvREdTXFxuYmVmcmllbmQvU0dEXFxuYmVmdWRkbGUvR0xEU1xcbmJlZnVkZGxlbWVudC9NXFxuYmVnL1NcXG5iZWdhblxcbmJlZ2F0XFxuYmVnZXQvU1xcbmJlZ2V0dGVyL1NcXG5iZWdldHRpbmdcXG5iZWdnYXIvTURZR1NcXG5iZWdnYXJ5L01cXG5iZWdnZWRcXG5iZWdnaW5nXFxuYmVnaW4vU1xcbmJlZ2lubmVyL1NNXFxuYmVnaW5uaW5nL01TXFxuYmVnb25lXFxuYmVnb25pYS9TTVxcbmJlZ290XFxuYmVnb3R0ZW5cXG5iZWdyaW1lL0RTR1xcbmJlZ3J1ZGdlL0RTR1xcbmJlZ3J1ZGdpbmcvWVxcbmJlZ3VpbGUvRFJTWkdMXFxuYmVndWlsZW1lbnQvTVxcbmJlZ3VpbGVyL01cXG5iZWd1aWxpbmcvWVxcbmJlZ3VpbmUvU01cXG5iZWd1bS9NU1xcbmJlZ3VuXFxuYmVoYWxmL01cXG5iZWhhbHZlc1xcbmJlaGF2ZS9HRFNcXG5iZWhhdmlvci9TTVxcbmJlaGF2aW9yYWwvWVxcbmJlaGF2aW9yaXNtL01cXG5iZWhhdmlvcmlzdC9NU1xcbmJlaGVhZC9ER1NcXG5iZWhlbGRcXG5iZWhlbW90aC9NXFxuYmVoZW1vdGhzXFxuYmVoZXN0L01TXFxuYmVoaW5kL01TXFxuYmVoaW5kaGFuZFxcbmJlaG9sZC9OUlpHU1xcbmJlaG9sZGVyL01cXG5iZWhvb3ZlL0RTR1xcbmJlaWdlL01cXG5iZWluZy9NXFxuYmVqZXdlbC9TREdcXG5iZWxhYm9yL1NER1xcbmJlbGF0ZWQvWVxcbmJlbGF5L0dEU1xcbmJlbGNoL0dNRFNcXG5iZWxlYWd1ZXIvR1NEXFxuYmVsZnJ5L1NNXFxuYmVsaWUvRFNcXG5iZWxpZWYvRVVNXFxuYmVsaWVmc1xcbmJlbGlldmFibGUvVVxcbmJlbGlldmFibHkvVVxcbmJlbGlldmUvRURSU1pHXFxuYmVsaWV2ZXIvRVVNU1xcbmJlbGlldmluZy9VXFxuYmVsaXR0bGUvTERTR1xcbmJlbGl0dGxlbWVudC9NXFxuYmVsbC9TR01EXFxuYmVsbGFkb25uYS9NXFxuYmVsbGJveS9TTVxcbmJlbGxlL01TXFxuYmVsbGVkL0FcXG5iZWxsZXRyaXN0L01TXFxuYmVsbGV0cmlzdGljXFxuYmVsbGhvcC9TTVxcbmJlbGxpY29zZVxcbmJlbGxpY29zaXR5L01cXG5iZWxsaWdlcmVuY2UvTVxcbmJlbGxpZ2VyZW5jeS9NXFxuYmVsbGlnZXJlbnQvTVlTXFxuYmVsbGluZy9BXFxuYmVsbG1hbi9NXFxuYmVsbG1lblxcbmJlbGxvdy9NREdTXFxuYmVsbHdldGhlci9NU1xcbmJlbGx5L0dEU01cXG5iZWxseWFjaGUvTUdEU1xcbmJlbGx5YnV0dG9uL1NNXFxuYmVsbHlmdWwvTVNcXG5iZWxvbmcvSkRHU1xcbmJlbG9uZ2luZy9NXFxuYmVsb3ZlZC9TTVxcbmJlbG93XFxuYmVsdC9TR01EXFxuYmVsdHdheS9TTVxcbmJlbHVnYS9NU1xcbmJlbHlpbmdcXG5iZW1pcmUvR0RTXFxuYmVtb2FuL0RHU1xcbmJlbXVzZS9MR0RTXFxuYmVtdXNlZC9ZXFxuYmVtdXNlbWVudC9NXFxuYmVuY2gvR01EU1xcbmJlbmNobWFyay9NU1xcbmJlbmQvQlNaR01SXFxuYmVuZGVyL01cXG5iZW5keS9UUlxcbmJlbmVhdGhcXG5iZW5lZGljdGluZVxcbmJlbmVkaWN0aW9uL1NNXFxuYmVuZWRpY3RvcnlcXG5iZW5lZmFjdGlvbi9TTVxcbmJlbmVmYWN0b3IvTVNcXG5iZW5lZmFjdHJlc3MvTVNcXG5iZW5lZmljZS9TTVxcbmJlbmVmaWNlbmNlL01cXG5iZW5lZmljZW50L1lcXG5iZW5lZmljaWFsL1lcXG5iZW5lZmljaWFyeS9TTVxcbmJlbmVmaXQvU01ER1xcbmJlbmV2b2xlbmNlL1NNXFxuYmVuZXZvbGVudC9ZXFxuYmVuaWdodGVkL1lcXG5iZW5pZ24vWVxcbmJlbmlnbmFudFxcbmJlbmlnbml0eS9NXFxuYmVudC9TTVxcbmJlbnRvbml0ZVxcbmJlbnR3b29kL01cXG5iZW51bWIvRFNHXFxuYmVuemVuZS9NXFxuYmVuemluZS9NXFxuYmVuenlsXFxuYmVxdWVhdGgvREdcXG5iZXF1ZWF0aHNcXG5iZXF1ZXN0L01TXFxuYmVyYXRlL0dEU1xcbmJlcmVhdmUvRFNMR1xcbmJlcmVhdmVtZW50L01TXFxuYmVyZWZ0XFxuYmVyZXQvTVNcXG5iZXJnL1NNXFxuYmVyaWJlcmkvTVxcbmJlcmsvU1xcbmJlcmtlbGl1bS9NXFxuYmVybS9TTVxcbmJlcnJ5L0dEU01cXG5iZXJyeWxpa2VcXG5iZXJzZXJrXFxuYmVydGgvR01EXFxuYmVydGhzXFxuYmVyeWwvTVNcXG5iZXJ5bGxpdW0vTVxcbmJlc2VlY2gvWkdSU1xcbmJlc2VlY2hlci9NXFxuYmVzZWVjaGluZy9ZXFxuYmVzZWVtL0RTR1xcbmJlc2V0L1NcXG5iZXNldHRpbmdcXG5iZXNpZGUvU1xcbmJlc2llZ2UvWkdEUlNcXG5iZXNpZWdlci9NXFxuYmVzbWVhci9EU0dcXG5iZXNtaXJjaC9HRFNcXG5iZXNvbS9NU1xcbmJlc290L1NcXG5iZXNvdHRlZFxcbmJlc290dGluZ1xcbmJlc291Z2h0XFxuYmVzcGFuZ2xlL0RTR1xcbmJlc3BhdHRlci9HU0RcXG5iZXNwZWFrL1NHXFxuYmVzcGVjdGFjbGVkXFxuYmVzcG9rZVxcbmJlc3Bva2VuXFxuYmVzdC9TR01EXFxuYmVzdGlhbC9ZXFxuYmVzdGlhbGl0eS9NXFxuYmVzdGlhcnkvU01cXG5iZXN0aXIvU1xcbmJlc3RpcnJlZFxcbmJlc3RpcnJpbmdcXG5iZXN0b3cvREdTXFxuYmVzdG93YWwvU01cXG5iZXN0cmV3L1NER1xcbmJlc3RyZXduXFxuYmVzdHJpZGRlblxcbmJlc3RyaWRlL1NHXFxuYmVzdHJvZGVcXG5iZXN0c2VsbGVyL01TXFxuYmVzdHNlbGxpbmdcXG5iZXQvU01cXG5iZXRhL1NNXFxuYmV0YWtlL0dTXFxuYmV0YWtlblxcbmJldGNoYVxcbmJldGVsL01cXG5iZXRoaW5rL1NHXFxuYmV0aG91Z2h0XFxuYmV0aWRlL0dEU1xcbmJldGltZXNcXG5iZXRva2VuL0dEU1xcbmJldG9va1xcbmJldHJheS9EUlpHU1xcbmJldHJheWFsL1NNXFxuYmV0cmF5ZXIvTVxcbmJldHJvdGgvREdcXG5iZXRyb3RoYWwvU01cXG5iZXRyb3RoZWQvTVxcbmJldHJvdGhzXFxuYmV0dGVyL01ER0xTXFxuYmV0dGVybWVudC9NXFxuYmV0dGluZ1xcbmJldHRvci9NU1xcbmJldHdlZW5cXG5iZXR3aXh0XFxuYmV2ZWwvR01EU1xcbmJldmVyYWdlL1NNXFxuYmV2dnkvU1xcbmJldnkvU01cXG5iZXdhaWwvREdTXFxuYmV3YXJlL0dEU1xcbmJld2hpc2tlcmVkXFxuYmV3aWdnZWRcXG5iZXdpbGRlci9MU0dEXFxuYmV3aWxkZXJpbmcvWVxcbmJld2lsZGVybWVudC9NXFxuYmV3aXRjaC9HTERTXFxuYmV3aXRjaGluZy9ZXFxuYmV3aXRjaG1lbnQvTVxcbmJleS9TTVxcbmJleW9uZFxcbmJlemVsL01TXFxuYmZcXG5iaGFqaVxcbmJpL1NNUlpcXG5iaWFubnVhbC9ZXFxuYmlhcy9HTURTXFxuYmlhc2VkL1VcXG5iaWF0aGxvbi9TTVxcbmJpYi9TTVxcbmJpYmxlL01TXFxuYmlibGljYWxcXG5iaWJsaW9ncmFwaGVyL01TXFxuYmlibGlvZ3JhcGhpY1xcbmJpYmxpb2dyYXBoaWNhbC9ZXFxuYmlibGlvZ3JhcGh5L1NNXFxuYmlibGlvcGhpbGUvU01cXG5iaWJ1bG91c1xcbmJpY2FtZXJhbFxcbmJpY2FtZXJhbGlzbS9NXFxuYmljYXJiL01TXFxuYmljYXJib25hdGUvTVNcXG5iaWNlbnRlbmFyeS9TTVxcbmJpY2VudGVubmlhbC9TTVxcbmJpY2VwL01TXFxuYmljZXBzL01cXG5iaWNrZXIvTURSWkdTXFxuYmlja2VyZXIvTVxcbmJpY29uY2F2ZVxcbmJpY29udmV4XFxuYmljdXNwaWQvTVNcXG5iaWN5Y2xlL0RSU01aR1xcbmJpY3ljbGVyL01cXG5iaWN5Y2xpc3QvU01cXG5iaWQvU01HXFxuYmlkZGFibGVcXG5iaWRkZW4vVVxcbmJpZGRlci9NU1xcbmJpZGRpbmcvTVxcbmJpZGR5L1NNXFxuYmlkZS9TXFxuYmlkZXQvTVNcXG5iaWRpcmVjdGlvbmFsL1lcXG5iaWVubmlhbC9NWVNcXG5iaWVubml1bS9NU1xcbmJpZXIvTVxcbmJpZmYvU0dEXFxuYmlmb2NhbC9TXFxuYmlmb2NhbHMvTVxcbmJpZnVyY2F0ZS9YRFNHTlxcbmJpZnVyY2F0aW9uL01cXG5iaWcvUFxcbmJpZ2FtaXN0L1NNXFxuYmlnYW1vdXNcXG5iaWdhbXkvTVxcbmJpZ2dlclxcbmJpZ2dlc3RcXG5iaWdnaWUvTVNcXG5iaWdnaXNoXFxuYmlnaGVhZC9TTVxcbmJpZ2hlYXJ0ZWQvUFxcbmJpZ2hlYXJ0ZWRuZXNzL01cXG5iaWdob3JuL1NNXFxuYmlnaHQvTVNcXG5iaWdtb3V0aC9NXFxuYmlnbW91dGhzXFxuYmlnbmVzcy9NXFxuYmlnb3QvTURTXFxuYmlnb3RyeS9TTVxcbmJpZ3dpZy9NU1xcbmJpam91L01cXG5iaWpvdXhcXG5iaWtlL0RSU01aR1xcbmJpa2VyL01cXG5iaWtpbmkvTVNcXG5iaWxhYmlhbC9NU1xcbmJpbGF0ZXJhbC9ZXFxuYmlsYmVycnkvU1xcbmJpbGUvTVxcbmJpbGdlL01TXFxuYmlsaW5ndWFsL1NNWVxcbmJpbGluZ3VhbGlzbS9NXFxuYmlsaW91cy9QXFxuYmlsaW91c25lc3MvTVxcbmJpbGlydWJpblxcbmJpbGsvU1pHRFJcXG5iaWxrZXIvTVxcbmJpbGwvU0JKR01EXFxuYmlsbGJvYXJkL01TXFxuYmlsbGV0L0dNRFNcXG5iaWxsZm9sZC9TTVxcbmJpbGxob29rL1NcXG5iaWxsaWFyZC9TXFxuYmlsbGlhcmRzL01cXG5iaWxsaW5nL01cXG5iaWxsaW5nc2dhdGUvTVxcbmJpbGxpb24vTUhTXFxuYmlsbGlvbmFpcmUvU01cXG5iaWxsaW9udGgvTVxcbmJpbGxpb250aHNcXG5iaWxsb3cvR01EU1xcbmJpbGxvd3lcXG5iaWxseS9TTVxcbmJpbGx5Y2FuL1NcXG5iaW1iby9NU1xcbmJpbWV0YWxsaWMvU01cXG5iaW1ldGFsbGlzbS9NXFxuYmltb2RhbFxcbmJpbW9udGhseS9TTVxcbmJpbi9TTVxcbmJpbmFyeS9TTVxcbmJpbmF1cmFsXFxuYmluZCdzXFxuYmluZC9BVUdTXFxuYmluZGVyL01TXFxuYmluZGVyeS9TTVxcbmJpbmRpbmcvTVNcXG5iaW5kd2VlZC9NXFxuYmluZ2UvTURTXFxuYmluZ28vTVxcbmJpbm1hblxcbmJpbm1lblxcbmJpbm5hY2xlL1NNXFxuYmlubmVkXFxuYmlubmluZ1xcbmJpbm9jdWxhci9NU1xcbmJpbm9taWFsL1NNXFxuYmlvL1NNXFxuYmlvY2hlbWljYWwvU01ZXFxuYmlvY2hlbWlzdC9NU1xcbmJpb2NoZW1pc3RyeS9NXFxuYmlvZGVncmFkYWJpbGl0eS9NXFxuYmlvZGVncmFkZS9EU0dCXFxuYmlvZGl2ZXJzaXR5L01cXG5iaW9ldGhpY3MvTVxcbmJpb2ZlZWRiYWNrL01cXG5iaW9maWxtL01TXFxuYmlvZ1xcbmJpb2dyYXBoZXIvU01cXG5iaW9ncmFwaGljXFxuYmlvZ3JhcGhpY2FsL1lcXG5iaW9ncmFwaHkvU01cXG5iaW9sXFxuYmlvbG9naWNcXG5iaW9sb2dpY2FsL1lcXG5iaW9sb2dpc3QvTVNcXG5iaW9sb2d5L01cXG5iaW9tYXJrZXIvTVNcXG5iaW9tYXNzL01cXG5iaW9tZWRpY2FsXFxuYmlvbmljL1NcXG5iaW9uaWNhbGx5XFxuYmlvbmljcy9NXFxuYmlvcGh5c2ljYWxcXG5iaW9waHlzaWNpc3QvTVNcXG5iaW9waHlzaWNzL01cXG5iaW9waWMvTVNcXG5iaW9wc3kvR0RTTVxcbmJpb3JlYWN0b3IvU1xcbmJpb3JoeXRobS9NU1xcbmJpb3NlbnNvci9TXFxuYmlvc3BoZXJlL1NNXFxuYmlvc3ludGhlc2lzXFxuYmlvdGVjaFxcbmJpb3RlY2hub2xvZ2ljYWxcXG5iaW90ZWNobm9sb2d5L01cXG5iaW90aW4vTVxcbmJpcGFydGlzYW5cXG5iaXBhcnRpc2Fuc2hpcC9NXFxuYmlwYXJ0aXRlXFxuYmlwZWQvTVNcXG5iaXBlZGFsXFxuYmlwbGFuZS9NU1xcbmJpcG9sYXJcXG5iaXBvbGFyaXR5L01cXG5iaXJhY2lhbFxcbmJpcmNoL0dNRFNcXG5iaXJkL1NaR01EUlxcbmJpcmRiYXRoL01cXG5iaXJkYmF0aHNcXG5iaXJkYnJhaW4vU01EXFxuYmlyZGNhZ2UvU1xcbmJpcmRlci9NXFxuYmlyZGhvdXNlL01TXFxuYmlyZGllL01EU1xcbmJpcmRpZWluZ1xcbmJpcmRsaWtlXFxuYmlyZGxpbWUvTVxcbmJpcmRzZWVkL01cXG5iaXJkc29uZ1xcbmJpcmR3YXRjaGVyL1NNXFxuYmlyZHlpbmdcXG5iaXJldHRhL1NNXFxuYmlydGgvWkdNRFJcXG5iaXJ0aGRheS9NU1xcbmJpcnRoZXIvTVxcbmJpcnRobWFyay9NU1xcbmJpcnRocGxhY2UvTVNcXG5iaXJ0aHJhdGUvTVNcXG5iaXJ0aHJpZ2h0L01TXFxuYmlydGhzL0FcXG5iaXJ0aHN0b25lL1NNXFxuYmlzY3VpdC9TTVxcbmJpc2VjdC9ER1NcXG5iaXNlY3Rpb24vTVNcXG5iaXNlY3Rvci9TTVxcbmJpc2V4dWFsL01ZU1xcbmJpc2V4dWFsaXR5L01cXG5iaXNob3AvTVNcXG5iaXNob3ByaWMvU01cXG5iaXNtdXRoL01cXG5iaXNvbi9NXFxuYmlzcXVlL01cXG5iaXN0cm8vTVNcXG5iaXQvQ1NNR1xcbmJpdGNoL0dNRFNcXG5iaXRjaGlseVxcbmJpdGNoaW5lc3MvTVxcbmJpdGNoeS9QUlRcXG5iaXRjb2luL1NNXFxuYml0ZS9SU01aXFxuYml0ZXIvTVxcbmJpdGluZy9ZXFxuYml0bWFwL1NcXG5iaXR0ZW5cXG5iaXR0ZXIvUE1SWVRTXFxuYml0dGVybi9TTVxcbmJpdHRlcm5lc3MvTVxcbmJpdHRlcnMvTVxcbmJpdHRlcnN3ZWV0L01TXFxuYml0dHkvVFJcXG5iaXR1bWVuL01cXG5iaXR1bWlub3VzXFxuYml2YWxlbnRcXG5iaXZhbHZlL1NNXFxuYml2b3VhYy9NU1xcbmJpdm91YWNrZWRcXG5iaXZvdWFja2luZ1xcbmJpd2Vla2x5L1NNXFxuYml5ZWFybHlcXG5iaXovTVxcbmJpemFycmUvWVxcbmJrXFxuYmwvREdcXG5ibGFiL1NNXFxuYmxhYmJlZFxcbmJsYWJiZXIvREdTXFxuYmxhYmJlcm1vdXRoL01cXG5ibGFiYmVybW91dGhzXFxuYmxhYmJpbmdcXG5ibGFjay9QWFRHTUROUllTXFxuYmxhY2thbW9vci9NU1xcbmJsYWNrYmFsbC9TR01EXFxuYmxhY2tiZXJyeS9HU01cXG5ibGFja2JpcmQvU01cXG5ibGFja2JvYXJkL01TXFxuYmxhY2tjdXJyYW50L1NcXG5ibGFja2VuL0RHXFxuYmxhY2tmYWNlXFxuYmxhY2tndWFyZC9TTVxcbmJsYWNraGVhZC9NU1xcbmJsYWNraW5nL01cXG5ibGFja2lzaFxcbmJsYWNramFjay9NREdTXFxuYmxhY2tsZWcvU1xcbmJsYWNrbGlzdC9NRFNHXFxuYmxhY2ttYWlsL01EUlNaR1xcbmJsYWNrbWFpbGVyL01cXG5ibGFja25lc3MvTVxcbmJsYWNrb3V0L1NNXFxuYmxhY2tzbWl0aC9NXFxuYmxhY2tzbWl0aHNcXG5ibGFja3NuYWtlL1NNXFxuYmxhY2t0aG9ybi9TTVxcbmJsYWNrdG9wL1NNXFxuYmxhY2t0b3BwZWRcXG5ibGFja3RvcHBpbmdcXG5ibGFkZGVyL01TXFxuYmxhZGUvTURTXFxuYmxhZy9TXFxuYmxhZ2dlZFxcbmJsYWdnaW5nXFxuYmxhaC9NXFxuYmxhaHMvTVxcbmJsYW1lL0JNR0RSU1xcbmJsYW1lbGVzcy9ZUFxcbmJsYW1lbGVzc25lc3MvTVxcbmJsYW1ld29ydGhpbmVzcy9NXFxuYmxhbWV3b3J0aHkvUFxcbmJsYW1tb1xcbmJsYW5jaC9HRFNcXG5ibGFuY21hbmdlL01TXFxuYmxhbmQvUFRSWVxcbmJsYW5kaXNoL0RTTEdcXG5ibGFuZGlzaG1lbnQvU01cXG5ibGFuZG5lc3MvTVxcbmJsYW5rL1RHUE1EUllTXFxuYmxhbmtldC9HTURTXFxuYmxhbmtuZXNzL01cXG5ibGFyZS9NR0RTXFxuYmxhcm5leS9TTURHXFxuYmxhc2VcXG5ibGFzcGhlbWUvWkdEUlNcXG5ibGFzcGhlbWVyL01cXG5ibGFzcGhlbW91cy9ZXFxuYmxhc3BoZW15L1NNXFxuYmxhc3QvWkdNRFJTXFxuYmxhc3Rlci9NXFxuYmxhc3RvZmYvTVNcXG5ibGF0L1NcXG5ibGF0YW5jeS9TTVxcbmJsYXRhbnQvWVxcbmJsYXRoZXIvU01ER1xcbmJsYXplL01aR0RSU1xcbmJsYXplci9NXFxuYmxhem9uL01ER1NcXG5ibGRnXFxuYmxlYWNoL01EUlNaR1xcbmJsZWFjaGVkL1VcXG5ibGVhY2hlci9NXFxuYmxlYWsvVFBSWVxcbmJsZWFrbmVzcy9NXFxuYmxlYXJcXG5ibGVhcmlseVxcbmJsZWFyaW5lc3MvTVxcbmJsZWFyeS9QUlRcXG5ibGVhdC9HTURTXFxuYmxlZWQvWkdSU1xcbmJsZWVkZXIvTVxcbmJsZWVkaW5nL01cXG5ibGVlcC9aR01EUlNcXG5ibGVlcGVyL01cXG5ibGVtaXNoL0dNRFNcXG5ibGVtaXNoZWQvVVxcbmJsZW5jaC9EU0dcXG5ibGVuZC9aR01EUlNcXG5ibGVuZGVyL01cXG5ibGVzcy9HRFNKXFxuYmxlc3NlZC9ZUFxcbmJsZXNzZWRuZXNzL01cXG5ibGVzc2luZy9NXFxuYmxldGNoXFxuYmxld1xcbmJsaWdodC9aR01EUlNcXG5ibGltZXlcXG5ibGltcC9NU1xcbmJsaW1waXNoXFxuYmxpbmQvUFpUR01EUllTXFxuYmxpbmRlci9NXFxuYmxpbmRmb2xkL1NNREdcXG5ibGluZGluZy9ZXFxuYmxpbmRuZXNzL01cXG5ibGluZHNpZGUvRFNHXFxuYmxpbmkvTVNcXG5ibGluay9aR01EUlNcXG5ibGlua2VyL01ER1xcbmJsaW50ei9NU1xcbmJsaW50emUvTVxcbmJsaXAvU01cXG5ibGlzcy9NXFxuYmxpc3NmdWwvWVBcXG5ibGlzc2Z1bG5lc3MvTVxcbmJsaXN0ZXIvR01EU1xcbmJsaXN0ZXJpbmcvWVxcbmJsaXN0ZXJ5XFxuYmxpdGhlL1BZVFJcXG5ibGl0aGVuZXNzL01cXG5ibGl0aGVyL0dcXG5ibGl0aGVzb21lXFxuYmxpdHovR01EU1xcbmJsaXR6a3JpZWcvTVNcXG5ibGl2ZXQvU1xcbmJsaXp6YXJkL1NNXFxuYmxvYXQvWkdEUlNcXG5ibG9hdHdhcmVcXG5ibG9iL1NNXFxuYmxvYmJlZFxcbmJsb2JiaW5nXFxuYmxvYy9TTVxcbmJsb2NrJ3NcXG5ibG9jay9VR0RTXFxuYmxvY2thZGUvTVpHRFJTXFxuYmxvY2thZGVyL01cXG5ibG9ja2FnZS9NU1xcbmJsb2NrYnVzdGVyL1NNXFxuYmxvY2tidXN0aW5nL01cXG5ibG9ja2NoYWluL01TXFxuYmxvY2tlci9NU1xcbmJsb2NraGVhZC9TTVxcbmJsb2NraG91c2UvTVNcXG5ibG9nL1NNXFxuYmxvZ2dlZFxcbmJsb2dnZXIvTVNcXG5ibG9nZ2luZ1xcbmJsb2tlL01TXFxuYmxva2lzaFxcbmJsb25kL1BUTVJTXFxuYmxvbmRlL01TXFxuYmxvbmRpc2hcXG5ibG9uZG5lc3MvTVxcbmJsb29kL0dNRFNcXG5ibG9vZGJhdGgvTVxcbmJsb29kYmF0aHNcXG5ibG9vZGN1cmRsaW5nXFxuYmxvb2Rob3VuZC9TTVxcbmJsb29kaWx5XFxuYmxvb2RpbmVzcy9NXFxuYmxvb2RsZXNzL1lQXFxuYmxvb2RsZXNzbmVzcy9NXFxuYmxvb2RsZXR0aW5nL01cXG5ibG9vZGxpbmUvU01cXG5ibG9vZG1vYmlsZS9NU1xcbmJsb29kc2hlZC9NXFxuYmxvb2RzaG90XFxuYmxvb2RzdGFpbi9TTURcXG5ibG9vZHN0b2NrL01cXG5ibG9vZHN0cmVhbS9TTVxcbmJsb29kc3Vja2VyL1NNXFxuYmxvb2RzdWNraW5nXFxuYmxvb2R0aGlyc3RpbHlcXG5ibG9vZHRoaXJzdGluZXNzL01cXG5ibG9vZHRoaXJzdHkvUlBUXFxuYmxvb2R5L1BUR0RSU1xcbmJsb29tL1pHTURSU1xcbmJsb29tZXIvTVxcbmJsb29wL1pHTURSU1xcbmJsb29wZXIvTVxcbmJsb3Nzb20vR01EU1xcbmJsb3Nzb215XFxuYmxvdC9TTVxcbmJsb3RjaC9HTURTXFxuYmxvdGNoeS9UUlxcbmJsb3R0ZWRcXG5ibG90dGVyL01TXFxuYmxvdHRpbmdcXG5ibG90dG9cXG5ibG91c2UvTUdEU1xcbmJsb3cvU1pHTVJcXG5ibG93ZXIvTVxcbmJsb3dmbHkvU01cXG5ibG93Z3VuL01TXFxuYmxvd2hhcmQvTVNcXG5ibG93aG9sZS9TXFxuYmxvd2pvYi9TTVxcbmJsb3dsYW1wL1NcXG5ibG93blxcbmJsb3dvdXQvU01cXG5ibG93cGlwZS9TTVxcbmJsb3d0b3JjaC9NU1xcbmJsb3d1cC9NU1xcbmJsb3d5L1RSXFxuYmxvd3p5L1JUXFxuYmx1YmJlci9HU01EXFxuYmx1YmJlcnlcXG5ibHVkZ2Vvbi9NREdTXFxuYmx1ZS9EUlNQTVRHXFxuYmx1ZWJlbGwvTVNcXG5ibHVlYmVycnkvU01cXG5ibHVlYmlyZC9NU1xcbmJsdWVib25uZXQvU01cXG5ibHVlYm90dGxlL1NNXFxuYmx1ZWZpc2gvTVNcXG5ibHVlZ2lsbC9NU1xcbmJsdWVncmFzcy9NXFxuYmx1ZWlzaFxcbmJsdWVqYWNrZXQvU01cXG5ibHVlamVhbnMvTVxcbmJsdWVuZXNzL01cXG5ibHVlbm9zZS9NU1xcbmJsdWVwb2ludC9NU1xcbmJsdWVwcmludC9NREdTXFxuYmx1ZXN0b2NraW5nL1NNXFxuYmx1ZXN5L1JUXFxuYmx1ZXQvTVNcXG5ibHVmZi9aVEdQTURSWVNcXG5ibHVmZmVyL01cXG5ibHVmZm5lc3MvTVxcbmJsdWluZy9NXFxuYmx1aXNoXFxuYmx1bmRlci9NRFJaR1NcXG5ibHVuZGVyYnVzcy9NU1xcbmJsdW5kZXJlci9NXFxuYmx1bnQvUFRHRFJZU1xcbmJsdW50bmVzcy9NXFxuYmx1ci9TTVxcbmJsdXJiL01TXFxuYmx1cnJlZFxcbmJsdXJyaW5lc3MvTVxcbmJsdXJyaW5nXFxuYmx1cnJ5L1RSUFxcbmJsdXJ0L0dEU1xcbmJsdXNoL1pHTURSU1xcbmJsdXNoZXIvTVxcbmJsdXN0ZXIvTURSU1pHXFxuYmx1c3RlcmVyL01cXG5ibHVzdGVyb3VzXFxuYmx1c3RlcnlcXG5ibHZkXFxuYm9hL1NNXFxuYm9hci9TTVxcbmJvYXJkL1pHTURSU1xcbmJvYXJkZXIvTVxcbmJvYXJkaW5nL01cXG5ib2FyZGluZ2hvdXNlL01TXFxuYm9hcmRyb29tL01TXFxuYm9hcmR3YWxrL01TXFxuYm9hc3QvWkdNRFJTXFxuYm9hc3Rlci9NXFxuYm9hc3RmdWwvUFlcXG5ib2FzdGZ1bG5lc3MvTVxcbmJvYXQvU1pHTURSXFxuYm9hdGVyL01cXG5ib2F0aG91c2UvTVNcXG5ib2F0aW5nL01cXG5ib2F0bG9hZC9TXFxuYm9hdG1hbi9NXFxuYm9hdG1lblxcbmJvYXRzd2Fpbi9TTVxcbmJvYXR5YXJkL1NcXG5ib2IvU01cXG5ib2JiZWRcXG5ib2JiaW4vTVNcXG5ib2JiaW5nXFxuYm9iYmxlL01HRFNcXG5ib2JieS9TTVxcbmJvYmJ5c294ZXIvU01cXG5ib2JjYXQvTVNcXG5ib2JvbGluay9TTVxcbmJvYnNsZWQvU01cXG5ib2JzbGVkZGVkXFxuYm9ic2xlZGRlci9NU1xcbmJvYnNsZWRkaW5nXFxuYm9ic2xlaWdoL01cXG5ib2JzbGVpZ2hzXFxuYm9idGFpbC9TTVxcbmJvYndoaXRlL01TXFxuYm9jY2llL01cXG5ib2NrL01cXG5ib2QvU01ER1xcbmJvZGFjaW91c1xcbmJvZGUvU1xcbmJvZGVnYS9NU1xcbmJvZGdlL0dEU1xcbmJvZGljZS9NU1xcbmJvZGlseVxcbmJvZGtpbi9NU1xcbmJvZHkvRFNNXFxuYm9keWJ1aWxkZXIvU01cXG5ib2R5YnVpbGRpbmcvTVxcbmJvZHlndWFyZC9NU1xcbmJvZHlzdWl0L1NNXFxuYm9keXdvcmsvTVxcbmJvZmZpbi9TXFxuYm9mZm9cXG5ib2cvU01cXG5ib2dhXFxuYm9nZXkvR01EU1xcbmJvZ2V5bWFuL01cXG5ib2dleW1lblxcbmJvZ2dlZFxcbmJvZ2dpbmdcXG5ib2dnbGUvR0RTXFxuYm9nZ3kvVFJcXG5ib2dpZS9NU1xcbmJvZ29uXFxuYm9nb3NpdHlcXG5ib2d1c1xcbmJvZ3ltYW4vTVxcbmJvZ3ltZW5cXG5ib2hlbWlhbi9TTVxcbmJvaGVtaWFuaXNtL01cXG5ib2lsL1NKWkdNRFJcXG5ib2lsZXIvTVxcbmJvaWxlcm1ha2VyL1NNXFxuYm9pbGVycGxhdGUvTVxcbmJvaW5rL0dEU1xcbmJvaXN0ZXJvdXMvWVBcXG5ib2lzdGVyb3VzbmVzcy9NXFxuYm9sYS9TTVxcbmJvbGQvUFRSWVxcbmJvbGRmYWNlL0RNXFxuYm9sZG5lc3MvTVxcbmJvbGUvU01cXG5ib2xlcm8vTVNcXG5ib2xpdmFyL01TXFxuYm9saXZhcmVzXFxuYm9sbC9TTVxcbmJvbGxhcmQvU1xcbmJvbGxpeC9HTURTXFxuYm9sbG9ja2luZy9TXFxuYm9sbG9ja3NcXG5ib2xvZ25hL01cXG5ib2xzaGllXFxuYm9sc3Rlci9HTURTXFxuYm9sdCdzXFxuYm9sdC9VU0dEXFxuYm9sdGhvbGUvU1xcbmJvbHVzL01TXFxuYm9tYi9TSlpHTURSXFxuYm9tYmFyZC9HRExTXFxuYm9tYmFyZGllci9NU1xcbmJvbWJhcmRtZW50L1NNXFxuYm9tYmFzdC9NXFxuYm9tYmFzdGljXFxuYm9tYmFzdGljYWxseVxcbmJvbWJlci9NXFxuYm9tYnByb29mXFxuYm9tYnNoZWxsL1NNXFxuYm9tYnNpdGUvU1xcbmJvbmFuemEvTVNcXG5ib25ib24vTVNcXG5ib25jZS9TXFxuYm9uZC9TR01EXFxuYm9uZGFnZS9NXFxuYm9uZGhvbGRlci9NU1xcbmJvbmRpbmcvTVxcbmJvbmRtYW4vTVxcbmJvbmRtZW5cXG5ib25kc21hbi9NXFxuYm9uZHNtZW5cXG5ib25kd29tYW4vTVxcbmJvbmR3b21lblxcbmJvbmUvRFJTTVpHXFxuYm9uZWhlYWQvU01EXFxuYm9uZWxlc3NcXG5ib25lci9NXFxuYm9uZXNoYWtlci9TXFxuYm9uZXlhcmRcXG5ib25maXJlL01TXFxuYm9uZy9TR01EXFxuYm9uZ28vTVNcXG5ib25ob21pZS9NXFxuYm9uaW5lc3MvTVxcbmJvbml0by9NU1xcbmJvbmsvU1pHRFxcbmJvbm5ldC9NU1xcbmJvbm55L1RSXFxuYm9ub2JvL01TXFxuYm9uc2FpL01cXG5ib251cy9NU1xcbmJvbnkvUFRSXFxuYm9vL1NNREhHXFxuYm9vYi9TR01EXFxuYm9vYnkvU01cXG5ib29kbGUvTVNcXG5ib29nZXIvU1xcbmJvb2dleW1hbi9NXFxuYm9vZ2V5bWVuXFxuYm9vZ2llL01EU1xcbmJvb2dpZWluZ1xcbmJvb2dpZW1hbi9NXFxuYm9vaG9vL0dNRFNcXG5ib29rL1NCSkdNRFxcbmJvb2tiaW5kZXIvU01cXG5ib29rYmluZGVyeS9TTVxcbmJvb2tiaW5kaW5nL01cXG5ib29rY2FzZS9NU1xcbmJvb2tlbmQvTVNcXG5ib29raWUvTVNcXG5ib29raW5nL01cXG5ib29raXNoXFxuYm9va2tlZXBlci9NU1xcbmJvb2trZWVwaW5nL01cXG5ib29rbGV0L01TXFxuYm9va21ha2VyL1NNXFxuYm9va21ha2luZy9NXFxuYm9va21hcmsvU01ER1xcbmJvb2ttb2JpbGUvU01cXG5ib29rcGxhdGUvTVNcXG5ib29rc2VsbGVyL01TXFxuYm9va3NoZWxmL01cXG5ib29rc2hlbHZlc1xcbmJvb2tzaG9wL1NNXFxuYm9va3N0YWxsL1NcXG5ib29rc3RvcmUvTVNcXG5ib29rd29ybS9TTVxcbmJvb2xlYW5cXG5ib29tL1NaR01EUlxcbmJvb21ib3gvTVNcXG5ib29tZXJhbmcvTURHU1xcbmJvb24vU01cXG5ib29uZG9ja3MvTVxcbmJvb25kb2dnbGUvTVpHRFJTXFxuYm9vbmRvZ2dsZXIvTVxcbmJvb25pZXMvTVxcbmJvb3IvU01cXG5ib29yaXNoL1BZXFxuYm9vcmlzaG5lc3MvTVNcXG5ib29zdC9aR01EUlNcXG5ib29zdGVyL01cXG5ib290J3NcXG5ib290L0FTR0RcXG5ib290YmxhY2svU01cXG5ib290ZWUvTVNcXG5ib290aC9NXFxuYm9vdGhzXFxuYm9vdGxhY2UvU1xcbmJvb3RsZWcvTVNcXG5ib290bGVnZ2VkXFxuYm9vdGxlZ2dlci9NU1xcbmJvb3RsZWdnaW5nL01cXG5ib290bGVzc1xcbmJvb3RzdHJhcC9NU1xcbmJvb3RzdHJhcHBlZFxcbmJvb3RzdHJhcHBpbmdcXG5ib290eS9TTVxcbmJvb3plL01aR0RSU1xcbmJvb3plci9NXFxuYm9venkvVFJcXG5ib3AvU01cXG5ib3BwZWRcXG5ib3BwaW5nXFxuYm9yYXgvTVxcbmJvcmRlbGxvL01TXFxuYm9yZGVyL0dNRFNcXG5ib3JkZXJsYW5kL01TXFxuYm9yZGVybGluZS9NU1xcbmJvcmUvRFJTTVpHXFxuYm9yZWRvbS9NXFxuYm9yZWhvbGUvU1xcbmJvcmVyL01cXG5ib3JpbmcvWVxcbmJvcm4vSUFVXFxuYm9ybmVcXG5ib3Jvbi9NXFxuYm9yb3VnaC9NXFxuYm9yb3VnaHNcXG5ib3Jyb3cvU0RSWkdKXFxuYm9ycm93ZXIvTVxcbmJvcnJvd2luZy9NXFxuYm9yc2NodC9NXFxuYm9yc3RhbC9TXFxuYm9yem9pL1NNXFxuYm9zaC9NXFxuYm9zb20nc1xcbmJvc29tL1VTXFxuYm9zb215XFxuYm9zcy9EU0dNXFxuYm9zc2lseVxcbmJvc3NpbmVzcy9NXFxuYm9zc2lzbS9NXFxuYm9zc3kvUlRQXFxuYm90L1NcXG5ib3RhbmljXFxuYm90YW5pY2FsL1lcXG5ib3RhbmlzdC9TTVxcbmJvdGFueS9NXFxuYm90Y2gvRFJTWkdNXFxuYm90Y2hlci9NXFxuYm90aFxcbmJvdGhlci9TTURHXFxuYm90aGVyYXRpb25cXG5ib3RoZXJlZC9VXFxuYm90aGVyc29tZVxcbmJvdG5ldC9TTVxcbmJvdHRsZS9EUlNNWkdcXG5ib3R0bGVuZWNrL01TXFxuYm90dGxlci9NXFxuYm90dG9tL1NNREdcXG5ib3R0b21sZXNzXFxuYm90dWxpbnVtXFxuYm90dWxpc20vTVxcbmJvdWRvaXIvU01cXG5ib3VmZmFudC9TTVxcbmJvdWdhaW52aWxsZWEvTVNcXG5ib3VnaC9NXFxuYm91Z2hzXFxuYm91Z2h0XFxuYm91aWxsYWJhaXNzZS9TTVxcbmJvdWlsbG9uL01TXFxuYm91bGRlci9TTVxcbmJvdWxlc1xcbmJvdWxldmFyZC9TTVxcbmJvdW5jZS9EUlNNWkdcXG5ib3VuY2VyL01cXG5ib3VuY2lseVxcbmJvdW5jaW5lc3MvTVxcbmJvdW5jeS9SVFBcXG5ib3VuZC9BU01HRFxcbmJvdW5kYXJ5L1NNXFxuYm91bmRlblxcbmJvdW5kZXIvU01cXG5ib3VuZGxlc3MvUFlcXG5ib3VuZGxlc3NuZXNzL01cXG5ib3VudGVvdXMvWVBcXG5ib3VudGVvdXNuZXNzL01cXG5ib3VudGlmdWwvWVBcXG5ib3VudGlmdWxuZXNzL01cXG5ib3VudHkvU01cXG5ib3VxdWV0L1NNXFxuYm91cmJvbi9TTVxcbmJvdXJnZW9pcy9NXFxuYm91cmdlb2lzaWUvTVxcbmJvdXN0cm9waGVkb25cXG5ib3V0L01TXFxuYm91dGlxdWUvU01cXG5ib3V0b25uaWVyZS9NU1xcbmJvdXpvdWtpL01TXFxuYm92aW5lL1NNXFxuYm92dmVyXFxuYm93L1pHU01EUlxcbmJvd2RsZXJpemF0aW9uL01TXFxuYm93ZGxlcml6ZS9EU0dcXG5ib3dlZC9VXFxuYm93ZWwvU01cXG5ib3dlci9NXFxuYm93bC9NRFJaR1NcXG5ib3dsZWcvU01cXG5ib3dsZWdnZWRcXG5ib3dsZXIvTVxcbmJvd2xmdWwvU01cXG5ib3dsaW5lL1NNXFxuYm93bGluZy9NXFxuYm93bWFuL01cXG5ib3dtZW5cXG5ib3dzcHJpdC9TTVxcbmJvd3N0cmluZy9TTVxcbmJvd3dvdy9TTVxcbmJveC9aR01ETlJTXFxuYm94Y2FyL1NNXFxuYm94ZXIvTVxcbmJveGluZy9NXFxuYm94bGlrZVxcbmJveHJvb20vU1xcbmJveHdvb2QvTVxcbmJveHkvUlRcXG5ib3kvU01cXG5ib3ljb3R0L1NHTURcXG5ib3lmcmllbmQvTVNcXG5ib3lob29kL1NNXFxuYm95aXNoL1lQXFxuYm95aXNobmVzcy9NXFxuYm95c2VuYmVycnkvU01cXG5ib3pvL01TXFxuYnBtXFxuYnBzXFxuYnJhL1NNXFxuYnJhY2UvTVpHRFJTXFxuYnJhY2VsZXQvTVNcXG5icmFjZXIvTVxcbmJyYWNlcm8vTVNcXG5icmFja2VuL01cXG5icmFja2V0L0dNRFNcXG5icmFja2lzaC9QXFxuYnJhY2tpc2huZXNzL01cXG5icmFjdC9NU1xcbmJyYWQvU01cXG5icmFkYXdsL1NcXG5icmFkeWNhcmRpYVxcbmJyYWUvU01cXG5icmFnL1NNXFxuYnJhZ2dhZG9jaW8vU01cXG5icmFnZ2FydC9TTVxcbmJyYWdnZWRcXG5icmFnZ2VyL01TXFxuYnJhZ2dpbmdcXG5icmFpZC9HTURTXFxuYnJhaWRpbmcvTVxcbmJyYWlsbGUvTVxcbmJyYWluL0dNRFNcXG5icmFpbmNoaWxkL01cXG5icmFpbmNoaWxkcmVuL01cXG5icmFpbmluZXNzL01cXG5icmFpbmxlc3MvWVxcbmJyYWlucG93ZXJcXG5icmFpbnN0b3JtL1NNREdcXG5icmFpbnN0b3JtaW5nL01cXG5icmFpbnRlYXNlci9TTVxcbmJyYWlud2FzaC9EU0dcXG5icmFpbndhc2hpbmcvTVxcbmJyYWlud2F2ZS9TXFxuYnJhaW55L1BUUlxcbmJyYWlzZS9HRFNcXG5icmFrZS9NR0RTXFxuYnJha2VtYW4vTVxcbmJyYWtlbWVuXFxuYnJhbWJsZS9NU1xcbmJyYW1ibHlcXG5icmFuL01cXG5icmFuY2gvR01EU1xcbmJyYW5jaGxpa2VcXG5icmFuZC9aR01EUlNcXG5icmFuZGVkL1VcXG5icmFuZGVyL01cXG5icmFuZGlzaC9EU0dcXG5icmFuZHkvR0RTTVxcbmJyYXNoL1BUUllcXG5icmFzaG5lc3MvTVxcbmJyYXNzL01TXFxuYnJhc3NlcmllL01TXFxuYnJhc3NpZXJlL01TXFxuYnJhc3NpbHlcXG5icmFzc2luZXNzL01cXG5icmFzc3kvUFRSXFxuYnJhdC9TTVxcbmJyYXR0eS9SVFxcbmJyYXR3dXJzdC9TTVxcbmJyYXZhZG8vTVxcbmJyYXZlL0dQTVlEVFJTXFxuYnJhdmVuZXNzL01cXG5icmF2ZXJ5L01cXG5icmF2by9TTVxcbmJyYXZ1cmEvU01cXG5icmF3bC9TRFJaR01cXG5icmF3bGVyL01cXG5icmF3bi9NXFxuYnJhd25pbmVzcy9NXFxuYnJhd255L1JUUFxcbmJyYXkvREdTTVxcbmJyYXplL0RSU1pHXFxuYnJhemVuL1NEWUdQXFxuYnJhemVubmVzcy9NXFxuYnJhemVyL01cXG5icmF6aWVyL1NNXFxuYnJlYWNoL0dNRFNcXG5icmVhZC9HTURIU1xcbmJyZWFkYmFza2V0L1NNXFxuYnJlYWRib2FyZC9TTVxcbmJyZWFkYm94L01TXFxuYnJlYWRjcnVtYi9NU1xcbmJyZWFkZnJ1aXQvU01cXG5icmVhZGxpbmUvTVNcXG5icmVhZHRoL01cXG5icmVhZHRoc1xcbmJyZWFkd2lubmVyL1NNXFxuYnJlYWsvQk1aR1JTXFxuYnJlYWthYmxlL01TXFxuYnJlYWthZ2UvTVNcXG5icmVha2F3YXkvTVNcXG5icmVha2Rvd24vTVNcXG5icmVha2VyL01cXG5icmVha2Zhc3QvTURHU1xcbmJyZWFrZnJvbnQvTVNcXG5icmVha25lY2tcXG5icmVha291dC9NU1xcbmJyZWFrcG9pbnRzXFxuYnJlYWt0aHJvdWdoL01cXG5icmVha3Rocm91Z2hzXFxuYnJlYWt1cC9TTVxcbmJyZWFrd2F0ZXIvU01cXG5icmVhbS9NU1xcbmJyZWFzdC9TTURHXFxuYnJlYXN0Ym9uZS9NU1xcbmJyZWFzdGZlZFxcbmJyZWFzdGZlZWQvR1NcXG5icmVhc3RwbGF0ZS9TTVxcbmJyZWFzdHN0cm9rZS9TTVxcbmJyZWFzdHdvcmsvTVNcXG5icmVhdGgvTURSU1pHQlxcbmJyZWF0aGFseXplL1pHRFJTXFxuYnJlYXRoZVxcbmJyZWF0aGVyL01cXG5icmVhdGhpbmcvTVxcbmJyZWF0aGxlc3MvUFlcXG5icmVhdGhsZXNzbmVzcy9NXFxuYnJlYXRoc1xcbmJyZWF0aHRha2luZy9ZXFxuYnJlYXRoeS9SVFxcbmJyZWQvSVxcbmJyZWVjaC9NU1xcbmJyZWVkL1NSWkdNXFxuYnJlZWRlci9NXFxuYnJlZWRpbmcvSU1cXG5icmVlemUvRFNNR1xcbmJyZWV6ZXdheS9TTVxcbmJyZWV6aWx5XFxuYnJlZXppbmVzcy9NXFxuYnJlZXp5L1JUUFxcbmJyZXRocmVuXFxuYnJldmUvU01cXG5icmV2ZXQvU01cXG5icmV2ZXR0ZWRcXG5icmV2ZXR0aW5nXFxuYnJldmlhcnkvU01cXG5icmV2aXR5L01cXG5icmV3L01EUlpHU1xcbmJyZXdlci9NXFxuYnJld2VyeS9TTVxcbmJyZXdwdWIvU01cXG5icmliZS9EUlNNWkdcXG5icmliZXIvTVxcbmJyaWJlcnkvTVxcbmJyaWNrL1NNREdcXG5icmlja2JhdC9TTVxcbmJyaWNraWUvU1xcbmJyaWNrbGF5ZXIvTVNcXG5icmlja2xheWluZy9NXFxuYnJpY2t3b3JrL01cXG5icmlja3lhcmQvU1xcbmJyaWRhbC9TTVxcbmJyaWRlL1NNXFxuYnJpZGVncm9vbS9TTVxcbmJyaWRlc21haWQvTVNcXG5icmlkZ2UvRFNNR1xcbmJyaWRnZWFibGUvVVxcbmJyaWRnZWhlYWQvU01cXG5icmlkZ2V3b3JrL01cXG5icmlkbGUvRFNNR1xcbmJyaWRsZWQvVVxcbmJyaWRsZXdheS9TXFxuYnJpZS9NWlJcXG5icmllZidzXFxuYnJpZWYvQ1NEVEdKXFxuYnJpZWZjYXNlL1NNXFxuYnJpZWZlclxcbmJyaWVmaW5nL0NNXFxuYnJpZWZseVxcbmJyaWVmbmVzcy9NXFxuYnJpZXIvTVxcbmJyaWcvTVNcXG5icmlnYWRlL1NNXFxuYnJpZ2FkaWVyL01TXFxuYnJpZ2FuZC9TTVxcbmJyaWdhbmRhZ2UvTVxcbmJyaWdhbnRpbmUvTVNcXG5icmlnaHQvU1BOUllYVFxcbmJyaWdodGVuL0RSWkdcXG5icmlnaHRlbmVyL01cXG5icmlnaHRuZXNzL01cXG5icmlnaHRzL01cXG5icmlsbFxcbmJyaWxsaWFuY2UvTVxcbmJyaWxsaWFuY3kvTVxcbmJyaWxsaWFudC9NWVNcXG5icmlsbGlhbnRpbmUvTVxcbmJyaW0vTVNcXG5icmltZnVsXFxuYnJpbWxlc3NcXG5icmltbWVkXFxuYnJpbW1pbmdcXG5icmltc3RvbmUvTVxcbmJyaW5kbGUvRE1cXG5icmluZS9NXFxuYnJpbmcvU1JaR1xcbmJyaW5nZXIvTVxcbmJyaW5pbmVzcy9NXFxuYnJpbmsvU01cXG5icmlua21hbnNoaXAvTVxcbmJyaW55L1JUUFxcbmJyaW9jaGUvU01cXG5icmlxdWV0dGUvTVNcXG5icmlzay9TRFJZVEdQXFxuYnJpc2tldC9TTVxcbmJyaXNrbmVzcy9NXFxuYnJpc3RsZS9EU01HXFxuYnJpc3RseS9UUlxcbmJyaXRjaGVzL01cXG5icml0dGxlL1BSTVRcXG5icml0dGxlbmVzcy9NXFxuYnJvL1NNSFxcbmJyb2FjaC9NRFNHXFxuYnJvYWQvU01OUllYVFBcXG5icm9hZGJhbmQvTVxcbmJyb2FkY2FzdC9BTUdTXFxuYnJvYWRjYXN0ZXIvTVNcXG5icm9hZGNhc3RpbmcvTVxcbmJyb2FkY2xvdGgvTVxcbmJyb2FkZW4vREdcXG5icm9hZGxvb20vTVxcbmJyb2FkbWluZGVkXFxuYnJvYWRuZXNzL01cXG5icm9hZHNoZWV0L1NNXFxuYnJvYWRzaWRlL01HRFNcXG5icm9hZHN3b3JkL1NNXFxuYnJvY2FkZS9EU01HXFxuYnJvY2NvbGkvTVxcbmJyb2NoZXR0ZS9TTVxcbmJyb2NodXJlL01TXFxuYnJvZ2FuL1NNXFxuYnJvZ3VlL1NNXFxuYnJvaWwvU01EUlpHXFxuYnJvaWxlci9NXFxuYnJva2VcXG5icm9rZW4vWVBcXG5icm9rZW5oZWFydGVkL1lcXG5icm9rZW5uZXNzL01cXG5icm9rZXIvU01ER1xcbmJyb2tlcmFnZS9NU1xcbmJyb2xseS9TXFxuYnJvbWlkZS9TTVxcbmJyb21pZGljXFxuYnJvbWluZS9NXFxuYnJvbmMvU01cXG5icm9uY2hpXFxuYnJvbmNoaWFsXFxuYnJvbmNoaXRpY1xcbmJyb25jaGl0aXMvTVxcbmJyb25jaHVzL01cXG5icm9uY28vU01cXG5icm9uY29idXN0ZXIvU01cXG5icm9udG9zYXVyL01TXFxuYnJvbnRvc2F1cnVzL01TXFxuYnJvbnplL0RTTUdcXG5icm9vY2gvTVNcXG5icm9vZC9TTURSWkdcXG5icm9vZGVyL01cXG5icm9vZGlseVxcbmJyb29kaW5nL01ZXFxuYnJvb2RtYXJlL01TXFxuYnJvb2R5L1JNUFRcXG5icm9vay9TTURHXFxuYnJvb2tsZXQvU01cXG5icm9vbS9TTVxcbmJyb29tc3RpY2svTVNcXG5icm90aC9NUlpcXG5icm90aGVsL01TXFxuYnJvdGhlci9NWVxcbmJyb3RoZXJob29kL01TXFxuYnJvdGhlcmxpbmVzcy9NXFxuYnJvdGhzXFxuYnJvdWdoYW0vU01cXG5icm91Z2h0XFxuYnJvdWhhaGEvU01cXG5icm93L01TXFxuYnJvd2JlYXQvU05HXFxuYnJvd24vU01EUlBUR1xcbmJyb3duZmllbGRcXG5icm93bmllL01TXFxuYnJvd25pc2hcXG5icm93bm5lc3MvTVxcbmJyb3dub3V0L1NNXFxuYnJvd25zdG9uZS9NU1xcbmJyb3dzZS9EUlNNWkdcXG5icm93c2VyL01cXG5icnJcXG5icnVpbi9TTVxcbmJydWlzZS9EUlNNWkdcXG5icnVpc2VyL01cXG5icnVpc2luZy9NXFxuYnJ1aXQvU0RHXFxuYnJ1bmNoL01EU0dcXG5icnVuZXQvU01cXG5icnVuZXR0ZS9NU1xcbmJydW50L01cXG5icnVzaC9NRFNHXFxuYnJ1c2hvZmYvU01cXG5icnVzaHN0cm9rZS9TXFxuYnJ1c2h3b29kL01cXG5icnVzaHdvcmsvTVxcbmJydXNxdWUvUlBZVFxcbmJydXNxdWVuZXNzL01cXG5icnV0YWwvWVxcbmJydXRhbGl0eS9TTVxcbmJydXRhbGl6YXRpb24vTVxcbmJydXRhbGl6ZS9HRFNcXG5icnV0ZS9TTVxcbmJydXRpc2gvUFlcXG5icnV0aXNobmVzcy9NXFxuYnVcXG5idWIvU01cXG5idWJibGUvRFNNR1xcbmJ1YmJsZWd1bS9NXFxuYnViYmx5L1JNVFxcbmJ1Ym8vTVxcbmJ1Ym9lc1xcbmJ1Y2NhbmVlci9TR01EXFxuYnVjay9NREdTXFxuYnVja2Fyb28vU01cXG5idWNrYm9hcmQvTVNcXG5idWNrZXQvU0dNRFxcbmJ1Y2tldGZ1bC9NU1xcbmJ1Y2tleWUvTVNcXG5idWNrbGUnc1xcbmJ1Y2tsZS9VRFNHXFxuYnVja2xlci9NU1xcbmJ1Y2tyYW0vTVxcbmJ1Y2tzYXcvTVNcXG5idWNrc2hvdC9NXFxuYnVja3NraW4vTVNcXG5idWNrdGVldGhcXG5idWNrdG9vdGgvTURcXG5idWNrd2hlYXQvTVxcbmJ1Y2t5YmFsbC9TTVxcbmJ1Y29saWMvTVNcXG5idWNvbGljYWxseVxcbmJ1ZC9TTVxcbmJ1ZGRlZFxcbmJ1ZGRpbmcvU1xcbmJ1ZGR5L1NNXFxuYnVkZ2UvRFNHXFxuYnVkZ2VyaWdhci9NU1xcbmJ1ZGdldC9TR01EXFxuYnVkZ2V0YXJ5XFxuYnVkZ2llL1NNXFxuYnVmZi9BTURHU1xcbmJ1ZmZhbG8vTURHXFxuYnVmZmFsb2VzXFxuYnVmZmVyL1NNREdcXG5idWZmZXQvU01ER0pcXG5idWZmb29uL1NNXFxuYnVmZm9vbmVyeS9NXFxuYnVmZm9vbmlzaFxcbmJ1ZydzXFxuYnVnL0NTXFxuYnVnYWJvby9TTVxcbmJ1Z2JlYXIvU01cXG5idWdnZWQvQ1xcbmJ1Z2dlci9TTURHXFxuYnVnZ2VyeVxcbmJ1Z2dpbmcvQ1xcbmJ1Z2d5L1JTTVRcXG5idWdsZS9EUlNNWkdcXG5idWdsZXIvTVxcbmJ1aWxkL1NNUlpHSlxcbmJ1aWxkZXIvTVxcbmJ1aWxkaW5nL01cXG5idWlsZHVwL1NNXFxuYnVpbHQvQUlcXG5idWlsdGluXFxuYnVsYi9NU1xcbmJ1bGJvdXNcXG5idWxnZS9EU01HXFxuYnVsZ3kvUlRcXG5idWxpbWFyZXhpYS9NXFxuYnVsaW1pYS9NXFxuYnVsaW1pYy9TTVxcbmJ1bGsvTURHU1xcbmJ1bGtoZWFkL01TXFxuYnVsa2luZXNzL01cXG5idWxreS9SVFBcXG5idWxsL01ER1NcXG5idWxsZG9nL1NNXFxuYnVsbGRvZ2dlZFxcbmJ1bGxkb2dnaW5nXFxuYnVsbGRvemUvWkdEUlNcXG5idWxsZG96ZXIvTVxcbmJ1bGxldC9TTURcXG5idWxsZXRpbi9NREdTXFxuYnVsbGV0cHJvb2YvU0RHXFxuYnVsbGZpZ2h0L1NNUlpHXFxuYnVsbGZpZ2h0ZXIvTVxcbmJ1bGxmaWdodGluZy9NXFxuYnVsbGZpbmNoL01TXFxuYnVsbGZyb2cvTVNcXG5idWxsaGVhZC9NRFNcXG5idWxsaGVhZGVkL1BZXFxuYnVsbGhlYWRlZG5lc3MvTVxcbmJ1bGxob3JuL01TXFxuYnVsbGlvbi9NXFxuYnVsbGlzaC9ZUFxcbmJ1bGxpc2huZXNzL01cXG5idWxsb2NrL1NNXFxuYnVsbHBlbi9TTVxcbmJ1bGxyaW5nL01TXFxuYnVsbHNleWVcXG5idWxsc2hpdC9NUyFcXG5idWxsc2hpdHRlZC8hXFxuYnVsbHNoaXR0ZXIvU00hXFxuYnVsbHNoaXR0aW5nLyFcXG5idWxsd2hpcC9TXFxuYnVsbHkvRFNNR1xcbmJ1bHJ1c2gvTVNcXG5idWx3YXJrL01TXFxuYnVtL1NNXFxuYnVtYmFnL1NcXG5idW1ibGUvRFJTWkdcXG5idW1ibGViZWUvU01cXG5idW1ibGVyL01cXG5idW1mXFxuYnVtbWVkXFxuYnVtbWVyL1NNXFxuYnVtbWVzdFxcbmJ1bW1pbmdcXG5idW1wL01EUlpHU1xcbmJ1bXBlci9NXFxuYnVtcGhcXG5idW1waW5lc3MvTVxcbmJ1bXBraW4vTVNcXG5idW1wdGlvdXMvUFlcXG5idW1wdGlvdXNuZXNzL01cXG5idW1weS9QUlRcXG5idW4vU01cXG5idW5jaC9NRFNHXFxuYnVuY2h5L1JUXFxuYnVuY28vU01ER1xcbmJ1bmRsZS9EU01HXFxuYnVuZy9NREdTXFxuYnVuZ2Fsb3cvTVNcXG5idW5nZWUvU01cXG5idW5naG9sZS9NU1xcbmJ1bmdsZS9EUlNNWkdcXG5idW5nbGVyL01cXG5idW5pb24vU01cXG5idW5rJ3NcXG5idW5rL0NER1NcXG5idW5rZXIvU01cXG5idW5raG91c2UvU01cXG5idW5rdW0vTVxcbmJ1bm55L1NNXFxuYnVudC9NREdTSlxcbmJ1bnRpbmcvTVxcbmJ1b3kvTURHU1xcbmJ1b3lhbmN5L01cXG5idW95YW50L1lcXG5idXIvU01ZXFxuYnVyYmxlL0RTTUdcXG5idXJicy9NXFxuYnVyZGVuJ3NcXG5idXJkZW4vVVNHRFxcbmJ1cmRlbnNvbWVcXG5idXJkb2NrL01cXG5idXJlYXUvU01cXG5idXJlYXVjcmFjeS9TTVxcbmJ1cmVhdWNyYXQvTVNcXG5idXJlYXVjcmF0aWNcXG5idXJlYXVjcmF0aWNhbGx5XFxuYnVyZWF1Y3JhdGl6YXRpb24vTVxcbmJ1cmVhdWNyYXRpemUvR0RTXFxuYnVyZy9NUlpTXFxuYnVyZ2Vvbi9EU0dcXG5idXJnZXIvTVxcbmJ1cmdoL01SWlxcbmJ1cmdoZXIvTVxcbmJ1cmdoc1xcbmJ1cmdsYXIvTVNcXG5idXJnbGFyaXplL0dEU1xcbmJ1cmdsYXJwcm9vZlxcbmJ1cmdsYXJ5L1NNXFxuYnVyZ2xlL0RTR1xcbmJ1cmdvbWFzdGVyL1NNXFxuYnVyZ3VuZHkvU01cXG5idXJpYWwvQVNNXFxuYnVya2EvU01cXG5idXJsL01EU1xcbmJ1cmxhcC9NXFxuYnVybGVzcXVlL01HRFNcXG5idXJsaW5lc3MvTVxcbmJ1cmx5L1JQVFxcbmJ1cm4vTURSWkdTQlxcbmJ1cm5hYmxlL1NNXFxuYnVybmVyL01cXG5idXJuaXNoL1pHTURSU1xcbmJ1cm5pc2hlci9NXFxuYnVybm9vc2UvTVNcXG5idXJub3V0L01TXFxuYnVybnRcXG5idXJwL01ER1NcXG5idXJyL01ER1NcXG5idXJyaXRvL01TXFxuYnVycm8vU01cXG5idXJyb3cvU01EUlpHXFxuYnVycm93ZXIvTVxcbmJ1cnNhL01cXG5idXJzYWVcXG5idXJzYXIvU01cXG5idXJzYXJ5L1NNXFxuYnVyc2l0aXMvTVxcbmJ1cnN0L1NNR1xcbmJ1cnkvQURTR1xcbmJ1cy9BTVNcXG5idXNib3kvU01cXG5idXNieS9TTVxcbmJ1c2VkXFxuYnVzZ2lybC9NU1xcbmJ1c2gvTURTR0pcXG5idXNoZWwvU0dNRFxcbmJ1c2hpbmVzcy9NXFxuYnVzaGluZy9NXFxuYnVzaG1hbi9NXFxuYnVzaG1hc3Rlci9TTVxcbmJ1c2htZW5cXG5idXNod2hhY2svRFJTWkdcXG5idXNod2hhY2tlci9NXFxuYnVzaHkvUlBUXFxuYnVzaWx5XFxuYnVzaW5lc3MvTVNcXG5idXNpbmVzc2xpa2VcXG5idXNpbmVzc21hbi9NXFxuYnVzaW5lc3NtZW5cXG5idXNpbmVzc3BlcnNvbi9TTVxcbmJ1c2luZXNzd29tYW4vTVxcbmJ1c2luZXNzd29tZW5cXG5idXNpbmcvTVxcbmJ1c2svRFJaR1NcXG5idXNraW4vU01cXG5idXNsb2FkL1NcXG5idXNzL01EU0dcXG5idXN0L01EUlpHU1xcbmJ1c3Rlci9NXFxuYnVzdGxlL0RTTUdcXG5idXN0eS9SWlRcXG5idXN5L0RSU1RHUFxcbmJ1c3lib2R5L1NNXFxuYnVzeW5lc3MvTVxcbmJ1c3l3b3JrL01cXG5idXQvQUNTXFxuYnV0YW5lL01cXG5idXRjaC9NUlNaXFxuYnV0Y2hlci9NREdcXG5idXRjaGVyeS9TTVxcbmJ1dGxlci9TTVxcbmJ1dHQvTURSWkdTXFxuYnV0dGUvU01cXG5idXR0ZWQvQVxcbmJ1dHRlci9NREdcXG5idXR0ZXJiYWxsL01TXFxuYnV0dGVyY3JlYW1cXG5idXR0ZXJjdXAvU01cXG5idXR0ZXJmYXQvTVxcbmJ1dHRlcmZpbmdlcmVkXFxuYnV0dGVyZmluZ2Vycy9NXFxuYnV0dGVyZmx5L0dEU01cXG5idXR0ZXJtaWxrL01cXG5idXR0ZXJudXQvU01cXG5idXR0ZXJzY290Y2gvTVxcbmJ1dHRlcnkvVFJTTVxcbmJ1dHRpbmcvQVxcbmJ1dHRvY2svU01cXG5idXR0b24nc1xcbmJ1dHRvbi9VU0RHXFxuYnV0dG9uaG9sZS9EU01HXFxuYnV0dG9ud29vZC9NU1xcbmJ1dHRyZXNzL01EU0dcXG5idXR0eS9TXFxuYnV4b21cXG5idXkvWkdTTVJcXG5idXliYWNrL1NNXFxuYnV5ZXIvTVxcbmJ1eW91dC9TTVxcbmJ1enovTURSU1pHXFxuYnV6emFyZC9NU1xcbmJ1enplci9NXFxuYnV6emtpbGwvU01cXG5idXp6d29yZC9TTVxcbmJ4XFxuYnhzXFxuYnkvTVxcbmJ5ZS9TTVxcbmJ5Z29uZS9TTVxcbmJ5bGF3L1NNXFxuYnlsaW5lL1NNXFxuYnlwYXNzL0dNRFNcXG5ieXBhdGgvTVxcbmJ5cGF0aHNcXG5ieXBsYXkvTVxcbmJ5cHJvZHVjdC9NU1xcbmJ5cmUvU1xcbmJ5cm9hZC9TTVxcbmJ5c3RhbmRlci9NU1xcbmJ5dGUvTVNcXG5ieXdheS9TTVxcbmJ5d29yZC9TTVxcbmJ5emFudGluZVxcbmMvSUVTXFxuY2FcXG5jYWIvU01SWlxcbmNhYmFsL01TXFxuY2FiYWxhJ3NcXG5jYWJhbGxlcm8vTVNcXG5jYWJhbmEvU01cXG5jYWJhcmV0L1NNXFxuY2FiYmFnZS9NU1xcbmNhYmJlZFxcbmNhYmJpbmdcXG5jYWJieS9TTVxcbmNhYmRyaXZlci9TTVxcbmNhYmluL01TXFxuY2FiaW5ldC9TTVxcbmNhYmluZXRtYWtlci9NU1xcbmNhYmluZXRtYWtpbmcvTVxcbmNhYmluZXRyeS9NXFxuY2FiaW5ldHdvcmsvTVxcbmNhYmxlL01HRFNcXG5jYWJsZWNhc3QvR01TXFxuY2FibGVncmFtL01TXFxuY2Fib2Nob24vU01cXG5jYWJvb2RsZS9NXFxuY2Fib29zZS9TTVxcbmNhYnJpb2xldC9TTVxcbmNhYnN0YW5kL1NNXFxuY2FjYW8vTVNcXG5jYWNoZS9NR0RTXFxuY2FjaGVwb3QvU01cXG5jYWNoZXQvTVNcXG5jYWNrbGUvTVpHRFJTXFxuY2Fja2xlci9NXFxuY2Fjb3Bob25vdXNcXG5jYWNvcGhvbnkvU01cXG5jYWN0aVxcbmNhY3R1cy9NXFxuY2FkL1NNXFxuY2FkYXZlci9TTVxcbmNhZGF2ZXJvdXNcXG5jYWRkaWUvTURTXFxuY2FkZGlzaC9ZUFxcbmNhZGRpc2huZXNzL01cXG5jYWRkeWluZ1xcbmNhZGVuY2UvRFNNXFxuY2FkZW56YS9TTVxcbmNhZGV0L01TXFxuY2FkZ2UvWkdEUlNcXG5jYWRnZXIvTVxcbmNhZG1pdW0vTVxcbmNhZHJlL01TXFxuY2FkdWNlaVxcbmNhZHVjZXVzL01cXG5jYWVzdXJhL1NNXFxuY2FmZS9TTVxcbmNhZmV0ZXJpYS9NU1xcbmNhZmV0aWVyZS9TXFxuY2FmZi9DU1xcbmNhZmZlaW5hdGVkXFxuY2FmZmVpbmUvTVxcbmNhZnRhbi9NU1xcbmNhZ2UvRFNNR1xcbmNhZ2V5XFxuY2FnaWVyXFxuY2FnaWVzdFxcbmNhZ2lseVxcbmNhZ2luZXNzL01cXG5jYWdvdWxlL1NcXG5jYWhvb3QvTVNcXG5jYWltYW4vTVNcXG5jYWlybi9NU1xcbmNhaXNzb24vU01cXG5jYWl0aWZmL1NNXFxuY2Fqb2xlL1pHTERSU1xcbmNham9sZW1lbnQvTVxcbmNham9sZXIvTVxcbmNham9sZXJ5L01cXG5jYWtlL0RTTUdcXG5jYWtld2Fsay9TTVxcbmNhbFxcbmNhbGFiYXNoL01TXFxuY2FsYWJvb3NlL1NNXFxuY2FsYW1hcmkvU01cXG5jYWxhbWluZS9NXFxuY2FsYW1pdG91cy9ZXFxuY2FsYW1pdHkvU01cXG5jYWxjYXJlb3VzXFxuY2FsY2lmZXJvdXNcXG5jYWxjaWZpY2F0aW9uL01cXG5jYWxjaWZ5L0dORFNcXG5jYWxjaW1pbmUvRFNNR1xcbmNhbGNpbmUvRFNHXFxuY2FsY2l0ZS9NXFxuY2FsY2l1bS9NXFxuY2FsY3VsYWJsZS9JXFxuY2FsY3VsYXRlL0FHTlZEU1hcXG5jYWxjdWxhdGVkL1lcXG5jYWxjdWxhdGluZy9ZXFxuY2FsY3VsYXRpb24vQU1cXG5jYWxjdWxhdG9yL1NNXFxuY2FsY3VsaVxcbmNhbGN1bHVzL01cXG5jYWxkZXJhL1NNXFxuY2FsZW5kYXIvTURHU1xcbmNhbGYvTVxcbmNhbGZza2luL01cXG5jYWxpYmVyL1NNXFxuY2FsaWJyYXRlL0dORFNYXFxuY2FsaWJyYXRpb24vTVxcbmNhbGlicmF0b3IvU01cXG5jYWxpY28vTVxcbmNhbGljb2VzXFxuY2FsaWZvcm5pdW0vTVxcbmNhbGlwZXIvU0dNRFxcbmNhbGlwaC9NXFxuY2FsaXBoYXRlL01TXFxuY2FsaXBoc1xcbmNhbGlzdGhlbmljL1NcXG5jYWxpc3RoZW5pY3MvTVxcbmNhbGsvU0dNRFxcbmNhbGwvQVNHTURcXG5jYWxsYS9NU1xcbmNhbGxhYmxlXFxuY2FsbGJhY2svTVNcXG5jYWxsZWQvVVxcbmNhbGxlci9NU1xcbmNhbGxpZ3JhcGhlci9TTVxcbmNhbGxpZ3JhcGhpY1xcbmNhbGxpZ3JhcGhpc3QvTVNcXG5jYWxsaWdyYXBoeS9NXFxuY2FsbGluZy9TTVxcbmNhbGxpb3BlL01TXFxuY2FsbG9zaXR5L1NNXFxuY2FsbG91cy9QR0RTWVxcbmNhbGxvdXNuZXNzL01cXG5jYWxsb3cvUlBUXFxuY2FsbG93bmVzcy9NXFxuY2FsbHVzL01EU0dcXG5jYWxtL1BTVEdNRFJZXFxuY2FsbW5lc3MvTVxcbmNhbG9yaWNcXG5jYWxvcmllL01TXFxuY2Fsb3JpZmljXFxuY2FsdW1ldC9NU1xcbmNhbHVtbmlhdGUvR05EU1xcbmNhbHVtbmlhdGlvbi9NXFxuY2FsdW1uaWF0b3IvTVNcXG5jYWx1bW5pb3VzXFxuY2FsdW1ueS9TTVxcbmNhbHZlL0dEU1xcbmNhbHlwc28vTVNcXG5jYWx5eC9NU1xcbmNhbS9TTVxcbmNhbWFyYWRlcmllL01cXG5jYW1iZXIvTURTR1xcbmNhbWJpYWxcXG5jYW1iaXVtL1NNXFxuY2FtYnJpYy9NXFxuY2FtY29yZGVyL1NNXFxuY2FtZVxcbmNhbWVsL01TXFxuY2FtZWxoYWlyXFxuY2FtZWxsaWEvTVNcXG5jYW1lby9NU1xcbmNhbWVyYS9NU1xcbmNhbWVyYW1hbi9NXFxuY2FtZXJhbWVuXFxuY2FtZXJhcGVvcGxlXFxuY2FtZXJhcGVyc29uXFxuY2FtZXJhd29tYW4vTVxcbmNhbWVyYXdvbWVuXFxuY2FtZXJhd29ya1xcbmNhbWlrbmlja2Vyc1xcbmNhbWlzb2xlL1NNXFxuY2Ftb3VmbGFnZS9NWkdEUlNcXG5jYW1vdWZsYWdlci9NXFxuY2FtcCdzXFxuY2FtcC9DU0dEXFxuY2FtcGFpZ24vU01EUlpHXFxuY2FtcGFpZ25lci9NXFxuY2FtcGFuaWxlL1NNXFxuY2FtcGFub2xvZ2lzdC9NU1xcbmNhbXBhbm9sb2d5L01cXG5jYW1wZXIvTVNcXG5jYW1wZmlyZS9TTVxcbmNhbXBncm91bmQvU01cXG5jYW1waG9yL01cXG5jYW1waW5nL01cXG5jYW1wc2l0ZS9TTVxcbmNhbXB1cy9NU1xcbmNhbXB5L1RSXFxuY2Ftc2hhZnQvU01cXG5jYW4ndFxcbmNhbi9TTURSWkdcXG5jYW5hbC9NU1xcbmNhbmFsaXphdGlvbi9NXFxuY2FuYWxpemUvR0RTXFxuY2FuYXBlL01TXFxuY2FuYXJkL01TXFxuY2FuYXJ5L1NNXFxuY2FuYXN0YS9NXFxuY2FuY2FuL01TXFxuY2FuY2VsL0RSU1pHXFxuY2FuY2VsZXIvTVxcbmNhbmNlbGxhdGlvbi9TTVxcbmNhbmNlbG91c1xcbmNhbmNlci9NU1xcbmNhbmNlcm91c1xcbmNhbmRlbGFicmEvU01cXG5jYW5kZWxhYnJ1bS9NXFxuY2FuZGlkL1lQXFxuY2FuZGlkYVxcbmNhbmRpZGFjeS9TTVxcbmNhbmRpZGF0ZS9NU1xcbmNhbmRpZGF0dXJlL1NNXFxuY2FuZGlkbmVzcy9NXFxuY2FuZGxlL01aR0RSU1xcbmNhbmRsZWxpZ2h0L01cXG5jYW5kbGVsaXRcXG5jYW5kbGVwb3dlci9NXFxuY2FuZGxlci9NXFxuY2FuZGxlc3RpY2svTVNcXG5jYW5kbGV3aWNrL1NNXFxuY2FuZG9yL01cXG5jYW5keS9HRFNNXFxuY2FuZHlmbG9zc1xcbmNhbmUvU01cXG5jYW5lYnJha2UvTVNcXG5jYW5lci9NXFxuY2FuaW5lL01TXFxuY2FuaXN0ZXIvU01cXG5jYW5rZXIvR01EU1xcbmNhbmtlcm91c1xcbmNhbm5hYmlzL01TXFxuY2FubmVkXFxuY2FubmVsbG9uaS9NXFxuY2FubmVyeS9TTVxcbmNhbm5pYmFsL1NNXFxuY2FubmliYWxpc20vTVxcbmNhbm5pYmFsaXN0aWNcXG5jYW5uaWJhbGl6YXRpb24vTVxcbmNhbm5pYmFsaXplL0dEU1xcbmNhbm5pbHkvVVxcbmNhbm5pbmVzcy9NXFxuY2FubmluZ1xcbmNhbm5vbi9HTURTXFxuY2Fubm9uYWRlL01HRFNcXG5jYW5ub25iYWxsL1NNXFxuY2Fubm90XFxuY2FubnkvVVRSXFxuY2Fub2UvTURTXFxuY2Fub2VpbmdcXG5jYW5vZWlzdC9TTVxcbmNhbm9sYS9NXFxuY2Fub24vTVNcXG5jYW5vbmljYWwvWVxcbmNhbm9uaXphdGlvbi9TTVxcbmNhbm9uaXplL0RTR1xcbmNhbm9vZGxlL0RTR1xcbmNhbm9weS9HRFNNXFxuY2Fuc3RcXG5jYW50J3NcXG5jYW50L0NaUkRHU1xcbmNhbnRhYmlsZVxcbmNhbnRhbG91cGUvU01cXG5jYW50YW5rZXJvdXMvUFlcXG5jYW50YW5rZXJvdXNuZXNzL01cXG5jYW50YXRhL01TXFxuY2FudGVlbi9NU1xcbmNhbnRlci9DTVxcbmNhbnRlcmVkXFxuY2FudGVyaW5nXFxuY2FudGljbGUvTVNcXG5jYW50aWxldmVyL01ER1NcXG5jYW50by9NU1xcbmNhbnRvbi9NTFNcXG5jYW50b25hbFxcbmNhbnRvbm1lbnQvTVNcXG5jYW50b3IvTVNcXG5jYW52YXMvTUdEU1xcbmNhbnZhc2JhY2svU01cXG5jYW52YXNzL01EUlNaR1xcbmNhbnZhc3Nlci9NXFxuY2FueW9uL01HU1xcbmNhcC9TTURSQlpcXG5jYXBhYmlsaXRpZXNcXG5jYXBhYmlsaXR5L0lNXFxuY2FwYWJsZS9JXFxuY2FwYWJseS9JXFxuY2FwYWNpb3VzL1BZXFxuY2FwYWNpb3VzbmVzcy9NXFxuY2FwYWNpdGFuY2UvTVxcbmNhcGFjaXRpZXNcXG5jYXBhY2l0b3IvU01cXG5jYXBhY2l0eS9JTVxcbmNhcGFyaXNvbi9NREdTXFxuY2FwZS9TTVxcbmNhcGVyL0dNRFxcbmNhcGVza2luL01cXG5jYXBpbGxhcml0eS9NXFxuY2FwaWxsYXJ5L1NNXFxuY2FwaXRhbC9NU1lcXG5jYXBpdGFsaXNtL01cXG5jYXBpdGFsaXN0L1NNXFxuY2FwaXRhbGlzdGljXFxuY2FwaXRhbGlzdGljYWxseVxcbmNhcGl0YWxpemF0aW9uL01cXG5jYXBpdGFsaXplL0FEU0dcXG5jYXBpdGF0aW9uL0NTTVxcbmNhcGl0b2wvU01cXG5jYXBpdHVsYXRlL0FEU1hHTlxcbmNhcGl0dWxhdGlvbi9BTVxcbmNhcGxldC9NU1xcbmNhcG8vU01cXG5jYXBvbi9NU1xcbmNhcHBlZC9VQVxcbmNhcHBpbmcvVUFcXG5jYXBwdWNjaW5vL1NNXFxuY2FwcmljZS9TTVxcbmNhcHJpY2lvdXMvUFlcXG5jYXByaWNpb3VzbmVzcy9NXFxuY2Fwc2ljdW0vU01cXG5jYXBzaXplL0RTR1xcbmNhcHN0YW4vU01cXG5jYXBzdG9uZS9NU1xcbmNhcHN1bGFyXFxuY2Fwc3VsZS9EU01HXFxuY2Fwc3VsaXplL0RTR1xcbmNhcHRcXG5jYXB0YWluL1NNREdcXG5jYXB0YWluY3kvU01cXG5jYXB0aW9uL1NNREdcXG5jYXB0aW91cy9ZUFxcbmNhcHRpb3VzbmVzcy9NXFxuY2FwdGl2YXRlL0RTR05cXG5jYXB0aXZhdGlvbi9NXFxuY2FwdGl2YXRvci9TTVxcbmNhcHRpdmUvU01cXG5jYXB0aXZpdHkvU01cXG5jYXB0b3IvTVNcXG5jYXB0dXJlL0FEU01HXFxuY2FyL1NNRFJaR1xcbmNhcmFmZS9NU1xcbmNhcmFtZWwvU01cXG5jYXJhbWVsaXplL0RTR1xcbmNhcmFwYWNlL1NNXFxuY2FyYXQvTVNcXG5jYXJhdmFuL1NNXFxuY2FyYXZhbnNhcnkvU01cXG5jYXJhdmVsL1NNXFxuY2FyYXdheS9TTVxcbmNhcmJpZGUvU01cXG5jYXJiaW5lL1NNXFxuY2FyYm9oeWRyYXRlL1NNXFxuY2FyYm9saWNcXG5jYXJib24vTVNcXG5jYXJib25hY2VvdXNcXG5jYXJib25hdGUvTUdORFNcXG5jYXJib25hdGlvbi9NXFxuY2FyYm9uaWZlcm91c1xcbmNhcmJvbml6ZS9HRFNcXG5jYXJib3J1bmR1bS9NXFxuY2FyYm95L01TXFxuY2FyYnNcXG5jYXJidW5jbGUvU01cXG5jYXJidW5jdWxhclxcbmNhcmJ1cmV0b3IvU01cXG5jYXJjYXNzL01TXFxuY2FyY2lub2dlbi9TTVxcbmNhcmNpbm9nZW5pYy9NU1xcbmNhcmNpbm9nZW5pY2l0eS9NXFxuY2FyY2lub21hL01TXFxuY2FyZC9FU0dNRFxcbmNhcmRhbW9tL1NNXFxuY2FyZGFtb24vU1xcbmNhcmRib2FyZC9NXFxuY2FyZGVyL01TXFxuY2FyZGhvbGRlci9TXFxuY2FyZGlhY1xcbmNhcmRpZS9TXFxuY2FyZGlnYW4vU01cXG5jYXJkaW5hbC9TTVlcXG5jYXJkaW9cXG5jYXJkaW9ncmFtL1NNXFxuY2FyZGlvZ3JhcGgvTVxcbmNhcmRpb2dyYXBoc1xcbmNhcmRpb2xvZ2lzdC9NU1xcbmNhcmRpb2xvZ3kvTVxcbmNhcmRpb215b3BhdGh5XFxuY2FyZGlvcHVsbW9uYXJ5XFxuY2FyZGlvdmFzY3VsYXJcXG5jYXJkc2hhcnAvTVJaU1xcbmNhcmRzaGFycGVyL01cXG5jYXJlL1NNXFxuY2FyZWVuL0RHU1xcbmNhcmVlci9NREdTXFxuY2FyZWVyaXNtXFxuY2FyZWVyaXN0L1NNXFxuY2FyZWZyZWVcXG5jYXJlZnVsL1lQXFxuY2FyZWZ1bGxlclxcbmNhcmVmdWxsZXN0XFxuY2FyZWZ1bG5lc3MvTVxcbmNhcmVnaXZlci9TTVxcbmNhcmVsZXNzL1BZXFxuY2FyZWxlc3NuZXNzL01cXG5jYXJlci9NXFxuY2FyZXNzL01EU0dcXG5jYXJldC9NU1xcbmNhcmV0YWtlci9NU1xcbmNhcmV3b3JuXFxuY2FyZmFyZS9NXFxuY2FyZ28vTVxcbmNhcmdvZXNcXG5jYXJob3AvTVNcXG5jYXJpYm91L1NNXFxuY2FyaWNhdHVyZS9NR0RTXFxuY2FyaWNhdHVyaXN0L1NNXFxuY2FyaWVzL01cXG5jYXJpbGxvbi9TTVxcbmNhcmluZy9NXFxuY2FyaW91c1xcbmNhcmphY2svSlNEUlpHXFxuY2FyamFja2VyL01cXG5jYXJqYWNraW5nL01cXG5jYXJsb2FkL1NNXFxuY2FybWFrZXIvU1xcbmNhcm1pbmUvU01cXG5jYXJuYWdlL01cXG5jYXJuYWwvWVxcbmNhcm5hbGl0eS9NXFxuY2FybmF0aW9uL0lNU1xcbmNhcm5lbGlhbi9NU1xcbmNhcm5pdmFsL01TXFxuY2Fybml2b3JhXFxuY2Fybml2b3JlL1NNXFxuY2Fybml2b3JvdXMvUFlcXG5jYXJuaXZvcm91c25lc3MvTVxcbmNhcm55L1NNXFxuY2Fyb2IvTVNcXG5jYXJvbC9aR01EUlNcXG5jYXJvbGVyL01cXG5jYXJvbS9HTURTXFxuY2Fyb3RlbmUvTVxcbmNhcm90aWQvU01cXG5jYXJvdXNhbC9TTVxcbmNhcm91c2UvRFJTTVpHXFxuY2Fyb3VzZWwvU01cXG5jYXJvdXNlci9NXFxuY2FycC9TWkdNRFJcXG5jYXJwYWwvTVNcXG5jYXJwZWwvTVNcXG5jYXJwZW50ZXIvTURHU1xcbmNhcnBlbnRyeS9NXFxuY2FycGVyL01cXG5jYXJwZXQvTURHU1xcbmNhcnBldGJhZy9NU1xcbmNhcnBldGJhZ2dlZFxcbmNhcnBldGJhZ2dlci9NU1xcbmNhcnBldGJhZ2dpbmdcXG5jYXJwZXRpbmcvTVxcbmNhcnBpXFxuY2FycG9vbC9TTURHXFxuY2FycG9ydC9TTVxcbmNhcnB1cy9NXFxuY2FycmVsL01TXFxuY2FycmlhZ2UvU01cXG5jYXJyaWFnZXdheS9TXFxuY2Fycmllci9NXFxuY2Fycmlvbi9NXFxuY2Fycm90L01TXFxuY2Fycm90eVxcbmNhcnJ5L1pHRFJTTVxcbmNhcnJ5YWxsL1NNXFxuY2Fycnljb3QvU1xcbmNhcnJ5b3V0XFxuY2FycnlvdmVyL01TXFxuY2Fyc2ljay9QXFxuY2Fyc2lja25lc3MvTVxcbmNhcnQvU1pHTURSXFxuY2FydGFnZS9NXFxuY2FydGVsL01TXFxuY2FydGVyL01cXG5jYXJ0aG9yc2UvU01cXG5jYXJ0aWxhZ2UvU01cXG5jYXJ0aWxhZ2lub3VzXFxuY2FydGxvYWQvU01cXG5jYXJ0b2dyYXBoZXIvU01cXG5jYXJ0b2dyYXBoaWNcXG5jYXJ0b2dyYXBoeS9NXFxuY2FydG9uL01TXFxuY2FydG9vbi9TTURHXFxuY2FydG9vbmlzdC9NU1xcbmNhcnRyaWRnZS9NU1xcbmNhcnR3aGVlbC9HTURTXFxuY2FydmUvSlpHRFJTXFxuY2FydmVyL01cXG5jYXJ2ZXJ5L1NcXG5jYXJ2aW5nL01cXG5jYXJ5YXRpZC9NU1xcbmNhc2FiYS9NU1xcbmNhc2NhZGUvRFNNR1xcbmNhc2NhcmEvU01cXG5jYXNlL0xEU0pNR1xcbmNhc2Vib29rL1NcXG5jYXNlZC9VXFxuY2FzZWhhcmRlbi9ER1NcXG5jYXNlaW4vTVxcbmNhc2Vsb2FkL01TXFxuY2FzZW1lbnQvTVNcXG5jYXNld29yay9aTVJcXG5jYXNld29ya2VyL01cXG5jYXNoL0dNRFNcXG5jYXNoYmFjay9NXFxuY2FzaGJvb2svTVNcXG5jYXNoZXcvTVNcXG5jYXNoaWVyL0dTTURcXG5jYXNobGVzc1xcbmNhc2htZXJlL01cXG5jYXNpbmcvTVxcbmNhc2luby9NU1xcbmNhc2svU01cXG5jYXNrZXQvTVNcXG5jYXNzYXZhL1NNXFxuY2Fzc2Vyb2xlL0RTTUdcXG5jYXNzZXR0ZS9NU1xcbmNhc3NpYS9NU1xcbmNhc3NvY2svU01cXG5jYXNzb3dhcnkvU01cXG5jYXN0L0FTR01cXG5jYXN0YW5ldC9NU1xcbmNhc3Rhd2F5L01TXFxuY2FzdGUvSk1aUlNcXG5jYXN0ZWxsYXRlZFxcbmNhc3Rlci9NXFxuY2FzdGlnYXRlL0RTR05cXG5jYXN0aWdhdGlvbi9NXFxuY2FzdGlnYXRvci9TTVxcbmNhc3RpbmcvQU1cXG5jYXN0bGUvTUdEU1xcbmNhc3RvZmYvU01cXG5jYXN0b3IvTVNcXG5jYXN0cmF0ZS9HTlhEU1xcbmNhc3RyYXRpb24vTVxcbmNhc3VhbC9QTVlTXFxuY2FzdWFsbmVzcy9NXFxuY2FzdWFsdHkvU01cXG5jYXN1aXN0L1NNXFxuY2FzdWlzdGljXFxuY2FzdWlzdHJ5L01cXG5jYXQvU01cXG5jYXRhY2x5c20vTVNcXG5jYXRhY2x5c21hbFxcbmNhdGFjbHlzbWljXFxuY2F0YWNvbWIvU01cXG5jYXRhZmFscXVlL01TXFxuY2F0YWxlcHN5L01cXG5jYXRhbGVwdGljL01TXFxuY2F0YWxvZy9aR1NNRFJcXG5jYXRhbG9nZXIvTVxcbmNhdGFscGEvU01cXG5jYXRhbHlzZXNcXG5jYXRhbHlzaXMvTVxcbmNhdGFseXN0L01TXFxuY2F0YWx5dGljL01cXG5jYXRhbHl6ZS9HRFNcXG5jYXRhbWFyYW4vU01cXG5jYXRhcHVsdC9HTURTXFxuY2F0YXJhY3QvTVNcXG5jYXRhcnJoL01cXG5jYXRhc3Ryb3BoZS9NU1xcbmNhdGFzdHJvcGhpY1xcbmNhdGFzdHJvcGhpY2FsbHlcXG5jYXRhdG9uaWEvTVxcbmNhdGF0b25pYy9TTVxcbmNhdGJpcmQvU01cXG5jYXRib2F0L1NNXFxuY2F0Y2FsbC9HU01EXFxuY2F0Y2gvWkdKTE1SU1xcbmNhdGNoYWxsL01TXFxuY2F0Y2hlci9NXFxuY2F0Y2htZW50L01TXFxuY2F0Y2hwZW5ueVxcbmNhdGNocGhyYXNlL1NNXFxuY2F0Y2h3b3JkL01TXFxuY2F0Y2h5L1JUXFxuY2F0ZWNoaXNtL1NNXFxuY2F0ZWNoaXN0L1NNXFxuY2F0ZWNoaXplL0RTR1xcbmNhdGVnb3JpY2FsL1lcXG5jYXRlZ29yaXphdGlvbi9NU1xcbmNhdGVnb3JpemUvR0RTXFxuY2F0ZWdvcnkvU01cXG5jYXRlci9aR0pEUlNcXG5jYXRlcmNvcm5lclxcbmNhdGVyZXIvTVxcbmNhdGVycGlsbGFyL01TXFxuY2F0ZXJ3YXVsL1NNREdcXG5jYXRmaXNoL01TXFxuY2F0Z3V0L01cXG5jYXRoYXJzZXNcXG5jYXRoYXJzaXMvTVxcbmNhdGhhcnRpYy9TTVxcbmNhdGhlZHJhbC9TTVxcbmNhdGhldGVyL1NNXFxuY2F0aGV0ZXJpemUvRFNHXFxuY2F0aG9kZS9TTVxcbmNhdGhvZGljXFxuY2F0aG9saWNcXG5jYXRob2xpY2l0eS9NXFxuY2F0aW9uL01TXFxuY2F0a2luL01TXFxuY2F0bGlrZVxcbmNhdG5hcC9NU1xcbmNhdG5hcHBlZFxcbmNhdG5hcHBpbmdcXG5jYXRuaXAvTVxcbmNhdHN1aXQvU1xcbmNhdHRhaWwvU01cXG5jYXR0ZWRcXG5jYXR0ZXJ5L1NcXG5jYXR0aWx5XFxuY2F0dGluZXNzL01cXG5jYXR0aW5nXFxuY2F0dGxlL01cXG5jYXR0bGVtYW4vTVxcbmNhdHRsZW1lblxcbmNhdHR5L1RQUlxcbmNhdHdhbGsvU01cXG5jYXVjdXMvTURTR1xcbmNhdWRhbC9ZXFxuY2F1Z2h0L1VcXG5jYXVsZHJvbi9NU1xcbmNhdWxpZmxvd2VyL1NNXFxuY2F1bGsvWkdNRFJTXFxuY2F1bGtlci9NXFxuY2F1c2FsL1lcXG5jYXVzYWxpdHkvU01cXG5jYXVzYXRpb24vTVxcbmNhdXNhdGl2ZVxcbmNhdXNlL01aR0RSU1xcbmNhdXNlbGVzc1xcbmNhdXNlci9NXFxuY2F1c2VyaWUvU01cXG5jYXVzZXdheS9TTVxcbmNhdXN0aWMvU01cXG5jYXVzdGljYWxseVxcbmNhdXN0aWNpdHkvTVxcbmNhdXRlcml6YXRpb24vTVxcbmNhdXRlcml6ZS9HRFNcXG5jYXV0aW9uL1NNREdcXG5jYXV0aW9uYXJ5XFxuY2F1dGlvdXMvSVlcXG5jYXV0aW91c25lc3MvTVxcbmNhdmFsY2FkZS9NU1xcbmNhdmFsaWVyL1NNWVxcbmNhdmFscnkvU01cXG5jYXZhbHJ5bWFuL01cXG5jYXZhbHJ5bWVuXFxuY2F2ZS9EUlNNWkdcXG5jYXZlYXQvTVNcXG5jYXZlbWFuL01cXG5jYXZlbWVuXFxuY2F2ZXJuL01TXFxuY2F2ZXJub3VzL1lcXG5jYXZpYXIvTVxcbmNhdmlsL1pHSk1EUlNcXG5jYXZpbGVyL01cXG5jYXZpbmcvTVxcbmNhdml0YXRpb25cXG5jYXZpdHkvRlNNXFxuY2F2b3J0L0RHU1xcbmNhdy9TTURHXFxuY2F5L0NTTVxcbmNheWVubmUvTVxcbmNheXVzZS9NU1xcbmNjXFxuY2Vhc2UvQ01HRFNcXG5jZWFzZWZpcmUvTVNcXG5jZWFzZWxlc3MvWVBcXG5jZWFzZWxlc3NuZXNzL01cXG5jZWNhXFxuY2VjYWxcXG5jZWN1bS9NXFxuY2VkYXIvTVNcXG5jZWRlL0ZBR1NEXFxuY2VkZXIvTVNcXG5jZWRpbGxhL1NNXFxuY2VpbGlkaFxcbmNlaWxpZGhzXFxuY2VpbGluZy9NU1xcbmNlbGFuZGluZS9NXFxuY2VsZWIvU1xcbmNlbGVicmFudC9TTVxcbmNlbGVicmF0ZS9EU0dOWFxcbmNlbGVicmF0aW9uL01cXG5jZWxlYnJhdG9yL1NNXFxuY2VsZWJyYXRvcnlcXG5jZWxlYnJpdHkvU01cXG5jZWxlcmlhY1xcbmNlbGVyaXR5L01cXG5jZWxlcnkvTVxcbmNlbGVzdGEvTVNcXG5jZWxlc3RpYWwvWVxcbmNlbGliYWN5L01cXG5jZWxpYmF0ZS9NU1xcbmNlbGwvU01EXFxuY2VsbGFyL01TXFxuY2VsbGlzdC9TTVxcbmNlbGxtYXRlL1NNXFxuY2VsbG8vTVNcXG5jZWxsb3BoYW5lL01cXG5jZWxscGhvbmUvTVNcXG5jZWxsdWxhci9TTVxcbmNlbGx1bGl0ZS9NXFxuY2VsbHVsaXRpc1xcbmNlbGx1bG9pZC9NXFxuY2VsbHVsb3NlL01cXG5jZW1lbnQvTURSWkdTXFxuY2VtZW50ZXIvTVxcbmNlbWVudHVtL01cXG5jZW1ldGVyeS9TTVxcbmNlbm9iaXRlL01TXFxuY2Vub2JpdGljXFxuY2Vub3RhcGgvTVxcbmNlbm90YXBoc1xcbmNlbnNlci9NU1xcbmNlbnNvci9NREdTXFxuY2Vuc29yZWQvVVxcbmNlbnNvcmlhbFxcbmNlbnNvcmlvdXMvUFlcXG5jZW5zb3Jpb3VzbmVzcy9NXFxuY2Vuc29yc2hpcC9NXFxuY2Vuc3VyZS9CRFJTTVpHXFxuY2Vuc3VyZXIvTVxcbmNlbnN1cy9NRFNHXFxuY2VudC9TWk1SXFxuY2VudGF1ci9TTVxcbmNlbnRhdm8vU01cXG5jZW50ZW5hcmlhbi9NU1xcbmNlbnRlbmFyeS9TTVxcbmNlbnRlbm5pYWwvTVlTXFxuY2VudGVyL01ER1xcbmNlbnRlcmJvYXJkL1NNXFxuY2VudGVyZm9sZC9NU1xcbmNlbnRlcnBpZWNlL01TXFxuY2VudGlncmFkZVxcbmNlbnRpZ3JhbS9TTVxcbmNlbnRpbGl0ZXIvTVNcXG5jZW50aW1lL1NNXFxuY2VudGltZXRlci9NU1xcbmNlbnRpcGVkZS9TTVxcbmNlbnRyYWwvU01ZXFxuY2VudHJhbGlzbVxcbmNlbnRyYWxpc3RcXG5jZW50cmFsaXR5L01cXG5jZW50cmFsaXphdGlvbi9DTVxcbmNlbnRyYWxpemUvQ0dEU1xcbmNlbnRyYWxpemVyL01TXFxuY2VudHJpZnVnYWwvWVxcbmNlbnRyaWZ1Z2UvRFNNR1xcbmNlbnRyaXBldGFsL1lcXG5jZW50cmlzbS9NXFxuY2VudHJpc3QvTVNcXG5jZW50dXJpb24vU01cXG5jZW50dXJ5L1NNXFxuY2VwaGFsaWNcXG5jZXJhbWljL1NNXFxuY2VyYW1pY2lzdC9TTVxcbmNlcmFtaWNzL01cXG5jZXJhbWlzdC9NU1xcbmNlcmVhbC9NU1xcbmNlcmViZWxsYXJcXG5jZXJlYmVsbHVtL1NNXFxuY2VyZWJyYVxcbmNlcmVicmFsXFxuY2VyZWJyYXRlL0dORFNcXG5jZXJlYnJhdGlvbi9NXFxuY2VyZWJyb3Zhc2N1bGFyXFxuY2VyZWJydW0vTVNcXG5jZXJlbWVudC9NU1xcbmNlcmVtb25pYWwvU01ZXFxuY2VyZW1vbmlvdXMvVVlcXG5jZXJlbW9uaW91c25lc3MvTVxcbmNlcmVtb255L1NNXFxuY2VyaXNlL01cXG5jZXJpdW0vTVxcbmNlcm1ldC9NXFxuY2VydC9TXFxuY2VydGFpbi9VWVxcbmNlcnRhaW50eS9VU01cXG5jZXJ0aWZpYWJsZVxcbmNlcnRpZmlhYmx5XFxuY2VydGlmaWNhdGUvTUdOWERTXFxuY2VydGlmaWNhdGlvbi9NXFxuY2VydGlmeS9EU0dcXG5jZXJ0aXR1ZGUvSU1cXG5jZXJ0aXR1ZGVzXFxuY2VydWxlYW4vTVxcbmNlcnZpY2FsXFxuY2VydmljZXNcXG5jZXJ2aXgvTVxcbmNlc2FyZWFuL01TXFxuY2VzaXVtL01cXG5jZXNzYXRpb24vTVNcXG5jZXNzaW9uL0tBRlNNXFxuY2Vzc3BpdC9TXFxuY2Vzc3Bvb2wvTVNcXG5jZXRhY2Vhbi9NU1xcbmNldGVyaXNcXG5jZlxcbmNnXFxuY2gvSUZWVFxcbmNoYWQvU1xcbmNoYWZlL0dEU1xcbmNoYWZmL0dNRFNcXG5jaGFmZmluY2gvTVNcXG5jaGFncmluL0dTTURcXG5jaGFpbidzXFxuY2hhaW4vVUdEU1xcbmNoYWluc2F3L01ER1NcXG5jaGFpci9HTURTXFxuY2hhaXJsaWZ0L01TXFxuY2hhaXJtYW4vTVxcbmNoYWlybWFuc2hpcC9TTVxcbmNoYWlybWVuXFxuY2hhaXJwZXJzb24vU01cXG5jaGFpcndvbWFuL01cXG5jaGFpcndvbWVuXFxuY2hhaXNlL01TXFxuY2hhbGNlZG9ueS9NXFxuY2hhbGV0L01TXFxuY2hhbGljZS9TTVxcbmNoYWxrL0dNRFNcXG5jaGFsa2JvYXJkL1NNXFxuY2hhbGtpbmVzcy9NXFxuY2hhbGt5L1BSVFxcbmNoYWxsZW5nZS9EUlNNWkdcXG5jaGFsbGVuZ2VkL1VcXG5jaGFsbGVuZ2VyL01cXG5jaGFsbGlzL01cXG5jaGFtYmVyL1NNRFxcbmNoYW1iZXJsYWluL01TXFxuY2hhbWJlcm1haWQvTVNcXG5jaGFtYnJheS9NXFxuY2hhbWVsZW9uL1NNXFxuY2hhbW9pcy9NXFxuY2hhbW9taWxlL01TXFxuY2hhbXAvWkdNRFNcXG5jaGFtcGFnbmUvTVNcXG5jaGFtcGlvbi9HTURTXFxuY2hhbXBpb25zaGlwL01TXFxuY2hhbmNlL01HRFNcXG5jaGFuY2VsL1NNXFxuY2hhbmNlbGxlcnkvU01cXG5jaGFuY2VsbG9yL01TXFxuY2hhbmNlbGxvcnNoaXAvTVxcbmNoYW5jZXJ5L1NNXFxuY2hhbmNpbmVzcy9NXFxuY2hhbmNyZS9TTVxcbmNoYW5jeS9QUlRcXG5jaGFuZGVsaWVyL1NNXFxuY2hhbmRsZXIvTVNcXG5jaGFuZ2UvTVpHRFJTXFxuY2hhbmdlYWJpbGl0eS9NXFxuY2hhbmdlYWJsZS9QXFxuY2hhbmdlYWJsZW5lc3MvTVxcbmNoYW5nZWFibHlcXG5jaGFuZ2VkL1VcXG5jaGFuZ2VsZXNzL1lcXG5jaGFuZ2VsaW5nL1NNXFxuY2hhbmdlb3Zlci9TTVxcbmNoYW5nZXIvTVxcbmNoYW5naW5nL1VcXG5jaGFubmVsL0dTTURcXG5jaGFubmVsaXphdGlvbi9NXFxuY2hhbm5lbGl6ZS9EU0dcXG5jaGFuc29uL1NNXFxuY2hhbnQvWkdNRFJTXFxuY2hhbnRlci9NXFxuY2hhbnRldXNlL01TXFxuY2hhbnRleS9TTVxcbmNoYW50aWNsZWVyL01TXFxuY2hhb3MvTVxcbmNoYW90aWNcXG5jaGFvdGljYWxseVxcbmNoYXAvU01cXG5jaGFwYXJyYWwvU01cXG5jaGFwYXRpL1NcXG5jaGFwYXR0aS9TXFxuY2hhcGJvb2svTVNcXG5jaGFwZWF1L1NNXFxuY2hhcGVsL01TXFxuY2hhcGVyb24vTURHU1xcbmNoYXBlcm9uYWdlL01cXG5jaGFwZXJvbmVkL1VcXG5jaGFwbGFpbi9NU1xcbmNoYXBsYWluY3kvU01cXG5jaGFwbGV0L1NNXFxuY2hhcHBlZFxcbmNoYXBwaW5nXFxuY2hhcHB5L1NcXG5jaGFwdGVyL1NNXFxuY2hhci9TTVxcbmNoYXJhYmFuYy9NU1xcbmNoYXJhY3Rlci9NU1xcbmNoYXJhY3RlcmZ1bFxcbmNoYXJhY3RlcmlzdGljL1NNXFxuY2hhcmFjdGVyaXN0aWNhbGx5L1VcXG5jaGFyYWN0ZXJpemF0aW9uL01TXFxuY2hhcmFjdGVyaXplL0RTR1xcbmNoYXJhY3Rlcmxlc3NcXG5jaGFyYWRlL1NNXFxuY2hhcmJyb2lsL0dEU1xcbmNoYXJjb2FsL01TXFxuY2hhcmQvTVxcbmNoYXJkb25uYXkvU01cXG5jaGFyZ2UvQUVTREdNXFxuY2hhcmdlYWJsZS9BXFxuY2hhcmdlZC9VXFxuY2hhcmdlci9TTVxcbmNoYXJpbHlcXG5jaGFyaW5lc3MvTVxcbmNoYXJpb3QvU01cXG5jaGFyaW90ZWVyL01TXFxuY2hhcmlzbWEvTVxcbmNoYXJpc21hdGljL01TXFxuY2hhcml0YWJsZS9QXFxuY2hhcml0YWJsZW5lc3MvTVxcbmNoYXJpdGFibHkvVVxcbmNoYXJpdHkvU01cXG5jaGFybGFkeS9TXFxuY2hhcmxhdGFuL1NNXFxuY2hhcmxhdGFuaXNtL01cXG5jaGFybGF0YW5yeS9NXFxuY2hhcmxpZS9TXFxuY2hhcm0vWkdNRFJTXFxuY2hhcm1lci9NXFxuY2hhcm1pbmcvWVxcbmNoYXJtbGVzc1xcbmNoYXJyZWRcXG5jaGFycmluZ1xcbmNoYXJ0L0dNRFNcXG5jaGFydGVkL1VcXG5jaGFydGVyJ3NcXG5jaGFydGVyL0FTR0RcXG5jaGFydGVyZXIvTVNcXG5jaGFydHJldXNlL01cXG5jaGFyd29tYW4vTVxcbmNoYXJ3b21lblxcbmNoYXJ5L1RSUFxcbmNoYXNlL01aR0RSU1xcbmNoYXNlci9NXFxuY2hhc20vTVNcXG5jaGFzc2lzL01cXG5jaGFzdGUvUFlUUlxcbmNoYXN0ZW4vREdTXFxuY2hhc3RlbmVzcy9NXFxuY2hhc3Rpc2UvRFJTWkdMXFxuY2hhc3Rpc2VtZW50L1NNXFxuY2hhc3Rpc2VyL01cXG5jaGFzdGl0eS9NXFxuY2hhc3VibGUvU01cXG5jaGF0L1NNXFxuY2hhdGVhdS9TTVxcbmNoYXRlYXV4XFxuY2hhdGVsYWluZS9TTVxcbmNoYXRsaW5lL1NcXG5jaGF0cm9vbS9NXFxuY2hhdHRlZFxcbmNoYXR0ZWwvTVNcXG5jaGF0dGVyL01EUlpHU1xcbmNoYXR0ZXJib3gvTVNcXG5jaGF0dGVyZXIvTVxcbmNoYXR0aWx5XFxuY2hhdHRpbmVzcy9NXFxuY2hhdHRpbmdcXG5jaGF0dHkvVFBSXFxuY2hhdWZmZXVyL0dNRFNcXG5jaGF1dmluaXNtL01cXG5jaGF1dmluaXN0L1NNXFxuY2hhdXZpbmlzdGljXFxuY2hhdXZpbmlzdGljYWxseVxcbmNoZWFwL1BYVE5SWVxcbmNoZWFwZW4vREdcXG5jaGVhcG5lc3MvTVxcbmNoZWFwb1xcbmNoZWFwc2thdGUvTVNcXG5jaGVhdC9aR01EUlNcXG5jaGVhdGVyL01cXG5jaGVjay9BR01EU1xcbmNoZWNrYm9vay9TTVxcbmNoZWNrYm94XFxuY2hlY2tlZC9VXFxuY2hlY2tlci9NREdTXFxuY2hlY2tlcmJvYXJkL1NNXFxuY2hlY2tlcnMvTVxcbmNoZWNrbGlzdC9NU1xcbmNoZWNrbWF0ZS9NR0RTXFxuY2hlY2tvZmYvU01cXG5jaGVja291dC9TTVxcbmNoZWNrcG9pbnQvU01cXG5jaGVja3Jvb20vTVNcXG5jaGVja3N1bVxcbmNoZWNrdXAvTVNcXG5jaGVkZGFyL01cXG5jaGVlay9HTURTXFxuY2hlZWtib25lL1NNXFxuY2hlZWtpbHlcXG5jaGVla2luZXNzL01cXG5jaGVla3kvVFBSXFxuY2hlZXAvR01EU1xcbmNoZWVyL1pHTURSU1xcbmNoZWVyZXIvTVxcbmNoZWVyZnVsL1lQXFxuY2hlZXJmdWxsZXJcXG5jaGVlcmZ1bGxlc3RcXG5jaGVlcmZ1bG5lc3MvTVxcbmNoZWVyaWx5XFxuY2hlZXJpbmVzcy9NXFxuY2hlZXJpby9NU1xcbmNoZWVybGVhZGVyL1NNXFxuY2hlZXJsZXNzL1BZXFxuY2hlZXJsZXNzbmVzcy9NXFxuY2hlZXJ5L1RQUlxcbmNoZWVzZS9NR0RTXFxuY2hlZXNlYm9hcmQvU1xcbmNoZWVzZWJ1cmdlci9TTVxcbmNoZWVzZWNha2UvU01cXG5jaGVlc2VjbG90aC9NXFxuY2hlZXNlcGFyaW5nL01cXG5jaGVlc2luZXNzL01cXG5jaGVlc3kvVFBSXFxuY2hlZXRhaC9NXFxuY2hlZXRhaHNcXG5jaGVmL1NNXFxuY2hlbVxcbmNoZW1pY2FsL1NNWVxcbmNoZW1pc2UvTVNcXG5jaGVtaXN0L01TXFxuY2hlbWlzdHJ5L01cXG5jaGVtby9NXFxuY2hlbW90aGVyYXBldXRpY1xcbmNoZW1vdGhlcmFweS9NXFxuY2hlbXVyZ3kvTVxcbmNoZW5pbGxlL01cXG5jaGVyaXNoL0RTR1xcbmNoZXJvb3QvTVNcXG5jaGVycnkvU01cXG5jaGVydC9NXFxuY2hlcnViL01TXFxuY2hlcnViaWNcXG5jaGVydWJpbVxcbmNoZXJ2aWwvTVxcbmNoZXNzL01cXG5jaGVzc2JvYXJkL01TXFxuY2hlc3NtYW4vTVxcbmNoZXNzbWVuXFxuY2hlc3QvTURTXFxuY2hlc3RlcmZpZWxkL1NNXFxuY2hlc3RmdWwvU01cXG5jaGVzdG51dC9TTVxcbmNoZXN0eS9UUlxcbmNoZXZhbGllci9TTVxcbmNoZXZpb3QvTVxcbmNoZXZyb24vTVNcXG5jaGV3L1NaR01EUlxcbmNoZXdlci9NXFxuY2hld2luZXNzL01cXG5jaGV3eS9QVFJcXG5jaGdcXG5jaGdlXFxuY2hpL1NNXFxuY2hpYXJvc2N1cm8vTVxcbmNoaWMvUFRNUlxcbmNoaWNhbmUvTVNcXG5jaGljYW5lcnkvU01cXG5jaGljaGkvTVNcXG5jaGljay9YTU5TXFxuY2hpY2thZGVlL1NNXFxuY2hpY2tlbi9NREdcXG5jaGlja2VuZmVlZC9NXFxuY2hpY2tlbmhlYXJ0ZWRcXG5jaGlja2VucG94L01cXG5jaGlja2Vuc2hpdC9TIVxcbmNoaWNrcGVhL1NNXFxuY2hpY2t3ZWVkL01cXG5jaGljbGUvTVxcbmNoaWNuZXNzL01cXG5jaGljb3J5L1NNXFxuY2hpZGUvR0RTXFxuY2hpZGluZy9ZXFxuY2hpZWYvVE1SWVNcXG5jaGllZmRvbS9NXFxuY2hpZWZ0YWluL01TXFxuY2hpZWZ0YWluc2hpcC9TTVxcbmNoaWZmb24vTVxcbmNoaWZmb25pZXIvTVNcXG5jaGlnZ2VyL01TXFxuY2hpZ25vbi9NU1xcbmNoaWh1YWh1YS9TTVxcbmNoaWxibGFpbi9TTVxcbmNoaWxkL01cXG5jaGlsZGJlYXJpbmcvTVxcbmNoaWxkYmlydGgvTVxcbmNoaWxkYmlydGhzXFxuY2hpbGRjYXJlL01cXG5jaGlsZGhvb2QvU01cXG5jaGlsZGlzaC9ZUFxcbmNoaWxkaXNobmVzcy9NXFxuY2hpbGRsZXNzL1BcXG5jaGlsZGxlc3NuZXNzL01cXG5jaGlsZGxpa2VcXG5jaGlsZG1pbmRlci9TXFxuY2hpbGRtaW5kaW5nXFxuY2hpbGRwcm9vZi9HU0RcXG5jaGlsZHJlbi9NXFxuY2hpbGkvTVxcbmNoaWxpZXNcXG5jaGlsbC9KUFpUR01EUlNcXG5jaGlsbGVyL01cXG5jaGlsbGluZXNzL01cXG5jaGlsbGluZy9ZXFxuY2hpbGxuZXNzL01cXG5jaGlsbHkvVFBSXFxuY2hpbWUvTVpHRFJTXFxuY2hpbWVyL01cXG5jaGltZXJhL01TXFxuY2hpbWVyaWNcXG5jaGltZXJpY2FsXFxuY2hpbW5leS9NU1xcbmNoaW1wL01TXFxuY2hpbXBhbnplZS9TTVxcbmNoaW4vU01cXG5jaGluYS9NXFxuY2hpbmF3YXJlL01cXG5jaGluY2hpbGxhL01TXFxuY2hpbmUvTVNcXG5jaGluay9HTURTXFxuY2hpbmxlc3NcXG5jaGlubmVkXFxuY2hpbm5pbmdcXG5jaGluby9NU1xcbmNoaW5zdHJhcC9NU1xcbmNoaW50ei9NXFxuY2hpbnR6eS9SVFxcbmNoaW53YWcvU1xcbmNoaXAvU01cXG5jaGlwYm9hcmRcXG5jaGlwbXVuay9TTVxcbmNoaXBvbGF0YS9TXFxuY2hpcHBlZFxcbmNoaXBwZXIvTVNcXG5jaGlwcGllXFxuY2hpcHBpbmcvU1xcbmNoaXBweS9TXFxuY2hpcm9ncmFwaHkvTVxcbmNoaXJvcG9kaXN0L01TXFxuY2hpcm9wb2R5L01cXG5jaGlyb3ByYWN0aWMvU01cXG5jaGlyb3ByYWN0b3IvU01cXG5jaGlycC9HTURTXFxuY2hpcnBpbHlcXG5jaGlycHkvUFRSXFxuY2hpcnJ1cC9HTURTXFxuY2hpc2VsL1pHTURSU1xcbmNoaXNlbGVyL01cXG5jaGl0L1NNXFxuY2hpdGNoYXQvU01cXG5jaGl0Y2hhdHRlZFxcbmNoaXRjaGF0dGluZ1xcbmNoaXRpbi9NXFxuY2hpdGlub3VzXFxuY2hpdG9zYW5cXG5jaGl0dGVybGluZ3MvTVxcbmNoaXZhbHJvdXMvUFlcXG5jaGl2YWxyb3VzbmVzcy9NXFxuY2hpdmFscnkvTVxcbmNoaXZlL01TXFxuY2hpdnkvR0RTXFxuY2hsYW15ZGlhL01TXFxuY2hsYW15ZGlhZVxcbmNobG9yYWwvTVxcbmNobG9yZGFuZS9NXFxuY2hsb3JpZGUvTVNcXG5jaGxvcmluYXRlL0dORFNcXG5jaGxvcmluYXRpb24vTVxcbmNobG9yaW5lL01cXG5jaGxvcm9mbHVvcm9jYXJib24vU01cXG5jaGxvcm9mb3JtL1NHTURcXG5jaGxvcm9waHlsbC9NXFxuY2hsb3JvcGxhc3QvTVNcXG5jaG1cXG5jaG9jL1NcXG5jaG9jay9HTURTXFxuY2hvY2thYmxvY2tcXG5jaG9jb2hvbGljL1NNXFxuY2hvY29sYXRlL01TXFxuY2hvY29sYXR5XFxuY2hvaWNlL01UUlNcXG5jaG9pci9NU1xcbmNob2lyYm95L01TXFxuY2hvaXJtYXN0ZXIvU01cXG5jaG9rZS9NWkdEUlNcXG5jaG9rZWNoZXJyeS9TTVxcbmNob2tlci9NXFxuY2hvbGVjeXN0ZWN0b215XFxuY2hvbGVjeXN0aXRpc1xcbmNob2xlci9NXFxuY2hvbGVyYS9NXFxuY2hvbGVyaWNcXG5jaG9sZXN0ZXJvbC9NXFxuY2hvbXAvWkdNRFJTXFxuY2hvb3NlL1pHUlNcXG5jaG9vc2VyL01cXG5jaG9vc2luZXNzL01cXG5jaG9vc3kvVFBSXFxuY2hvcC9TTVxcbmNob3Bob3VzZS9TTVxcbmNob3BwZWRcXG5jaG9wcGVyL01ER1NcXG5jaG9wcGlseVxcbmNob3BwaW5lc3MvTVxcbmNob3BwaW5nXFxuY2hvcHB5L1RQUlxcbmNob3BzdGljay9TTVxcbmNob3JhbC9NWVNcXG5jaG9yYWxlL01TXFxuY2hvcmQvTVNcXG5jaG9yZGFsXFxuY2hvcmRhdGUvU01cXG5jaG9yZS9NU1xcbmNob3JlYS9NXFxuY2hvcmVvZ3JhcGgvRFJaR1xcbmNob3Jlb2dyYXBoZXIvTVxcbmNob3Jlb2dyYXBoaWNcXG5jaG9yZW9ncmFwaGljYWxseVxcbmNob3Jlb2dyYXBoc1xcbmNob3Jlb2dyYXBoeS9NXFxuY2hvcmlzdGVyL1NNXFxuY2hvcm9pZC9NU1xcbmNob3J0bGUvTVpHRFJTXFxuY2hvcnRsZXIvTVxcbmNob3J1cy9HTURTXFxuY2hvc2VcXG5jaG9zZW5cXG5jaG93L1NHTURcXG5jaG93ZGVyL01TXFxuY2hyaXNtL01cXG5jaHJpc3Rlbi9BU0dEXFxuY2hyaXN0ZW5pbmcvTVNcXG5jaHJpc3RpYW4vVVxcbmNocmlzdG9sb2d5XFxuY2hyb21hdGljXFxuY2hyb21hdGljYWxseVxcbmNocm9tYXRpbi9NXFxuY2hyb21hdG9ncmFwaHlcXG5jaHJvbWUvTUdEU1xcbmNocm9taXVtL01cXG5jaHJvbW9zb21hbFxcbmNocm9tb3NvbWUvTVNcXG5jaHJvbmljXFxuY2hyb25pY2FsbHlcXG5jaHJvbmljbGUvRFJTTVpHXFxuY2hyb25pY2xlci9NXFxuY2hyb25vZ3JhcGgvTVxcbmNocm9ub2dyYXBoc1xcbmNocm9ub2xvZ2ljYWwvWVxcbmNocm9ub2xvZ2lzdC9NU1xcbmNocm9ub2xvZ3kvU01cXG5jaHJvbm9tZXRlci9TTVxcbmNocnlzYWxpcy9NU1xcbmNocnlzYW50aGVtdW0vTVNcXG5jaHViL1NNXFxuY2h1YmJpbmVzcy9NXFxuY2h1YmJ5L1RQUlxcbmNodWNrL0dNRFNcXG5jaHVja2hvbGUvU01cXG5jaHVja2xlL01HRFNcXG5jaHVmZmVkXFxuY2h1Zy9TTVxcbmNodWdnZWRcXG5jaHVnZ2luZ1xcbmNodWtrYS9NU1xcbmNodW0vU01cXG5jaHVtbWVkXFxuY2h1bW1pbHlcXG5jaHVtbWluZXNzL01cXG5jaHVtbWluZ1xcbmNodW1teS9QVFJcXG5jaHVtcC9NU1xcbmNodW5kZXIvR0RTXFxuY2h1bmsvR01EU1xcbmNodW5raW5lc3MvTVxcbmNodW5reS9QVFJcXG5jaHVudGVyL0RHU1xcbmNodXJjaC9NU1xcbmNodXJjaGdvZXIvU01cXG5jaHVyY2hnb2luZy9NXFxuY2h1cmNobWFuL01cXG5jaHVyY2htZW5cXG5jaHVyY2h3YXJkZW4vTVNcXG5jaHVyY2h3b21hblxcbmNodXJjaHdvbWVuXFxuY2h1cmNoeWFyZC9TTVxcbmNodXJsL01TXFxuY2h1cmxpc2gvUFlcXG5jaHVybGlzaG5lc3MvTVxcbmNodXJuL1pHTURSU1xcbmNodXJuZXIvTVxcbmNodXRlL01TXFxuY2h1dG5leS9NU1xcbmNodXR6cGFoL01cXG5jaHltZS9NXFxuY2h5cm9uL01TXFxuY2lhYmF0dGEvU01cXG5jaWFvL1NcXG5jaWNhZGEvTVNcXG5jaWNhdHJpY2VzXFxuY2ljYXRyaXgvTVxcbmNpY2Vyb25lL1NNXFxuY2ljZXJvbmlcXG5jaWRlcidzXFxuY2lkZXIvU1xcbmNpZ2FyL01TXFxuY2lnYXJldHRlL01TXFxuY2lnYXJpbGxvL01TXFxuY2lsYW50cm8vTVxcbmNpbGlhXFxuY2lsaXVtL01cXG5jaW5jaC9HTURTXFxuY2luY2hvbmEvU01cXG5jaW5jdHVyZS9TTVxcbmNpbmRlci9HTURTXFxuY2luZVxcbmNpbmVtYS9NU1xcbmNpbmVtYXRpY1xcbmNpbmVtYXRvZ3JhcGhlci9NU1xcbmNpbmVtYXRvZ3JhcGhpY1xcbmNpbmVtYXRvZ3JhcGh5L01cXG5jaW5uYWJhci9NXFxuY2lubmFtb24vTVxcbmNpcGhlcidzXFxuY2lwaGVyL0NHRFNcXG5jaXJcXG5jaXJjYVxcbmNpcmNhZGlhblxcbmNpcmNsZS9NR0RTXFxuY2lyY2xldC9NU1xcbmNpcmN1aXQvTURHU1xcbmNpcmN1aXRhbFxcbmNpcmN1aXRvdXMvWVBcXG5jaXJjdWl0b3VzbmVzcy9NXFxuY2lyY3VpdHJ5L01cXG5jaXJjdWl0eS9NXFxuY2lyY3VsYXIvU01ZXFxuY2lyY3VsYXJpdHkvTVxcbmNpcmN1bGFyaXplL0RTR1xcbmNpcmN1bGF0ZS9BRFNHXFxuY2lyY3VsYXRpb24vU01cXG5jaXJjdWxhdG9yeVxcbmNpcmN1bWNpc2UvWERTR05cXG5jaXJjdW1jaXNlZC9VXFxuY2lyY3VtY2lzaW9uL01cXG5jaXJjdW1mZXJlbmNlL01TXFxuY2lyY3VtZmVyZW50aWFsXFxuY2lyY3VtZmxleC9NU1xcbmNpcmN1bWxvY3V0aW9uL01TXFxuY2lyY3VtbG9jdXRvcnlcXG5jaXJjdW1uYXZpZ2F0ZS9YR05EU1xcbmNpcmN1bW5hdmlnYXRpb24vTVxcbmNpcmN1bXBvbGFyXFxuY2lyY3Vtc2NyaWJlL0dEU1xcbmNpcmN1bXNjcmlwdGlvbi9NU1xcbmNpcmN1bXNwZWN0L1lcXG5jaXJjdW1zcGVjdGlvbi9NXFxuY2lyY3Vtc3RhbmNlL01HRFNcXG5jaXJjdW1zdGFudGlhbC9ZXFxuY2lyY3VtdmVudC9EU0dcXG5jaXJjdW12ZW50aW9uL01cXG5jaXJjdXMvTVNcXG5jaXJxdWUvTVNcXG5jaXJyaG9zaXMvTVxcbmNpcnJob3RpYy9TTVxcbmNpcnJpXFxuY2lycnVzL01cXG5jaXNcXG5jaXNnZW5kZXJcXG5jaXN0ZXJuL01TXFxuY2l0XFxuY2l0YWRlbC9NU1xcbmNpdGF0aW9uL0FNU1xcbmNpdGUnc1xcbmNpdGUvSUFHU0RcXG5jaXRpZmllZFxcbmNpdGl6ZW4vTVNcXG5jaXRpemVucnkvTVxcbmNpdGl6ZW5zaGlwL01cXG5jaXRyaWNcXG5jaXRyb24vTVNcXG5jaXRyb25lbGxhL01cXG5jaXRydXMvTVNcXG5jaXR5L1NNXFxuY2l0eXdpZGVcXG5jaXZldC9NU1xcbmNpdmljL1NcXG5jaXZpY2FsbHlcXG5jaXZpY3MvTVxcbmNpdmlsL1VZXFxuY2l2aWxpYW4vTVNcXG5jaXZpbGl0eS9JU01cXG5jaXZpbGl6YXRpb24vTVNcXG5jaXZpbGl6ZS9HRFNcXG5jaXZpbGl6ZWQvVVxcbmNpdnZpZXMvTVxcbmNrXFxuY2xcXG5jbGFjay9HTURTXFxuY2xhZC9VXFxuY2xhZGRpbmcvTVxcbmNsYWRlXFxuY2xhaW0nc1xcbmNsYWltL0NLRUFHRFNcXG5jbGFpbWFibGUvQVxcbmNsYWltYW50L01TXFxuY2xhaW1lZC9VXFxuY2xhaW1lci9FQ1NNXFxuY2xhaXJ2b3lhbmNlL01cXG5jbGFpcnZveWFudC9NU1xcbmNsYW0vU01cXG5jbGFtYmFrZS9NU1xcbmNsYW1iZXIvWkdNRFJTXFxuY2xhbWJlcmVyL01cXG5jbGFtbWVkXFxuY2xhbW1pbHlcXG5jbGFtbWluZXNzL01cXG5jbGFtbWluZ1xcbmNsYW1teS9QVFJcXG5jbGFtb3IvR01EU1xcbmNsYW1vcm91c1xcbmNsYW1wL0dNRFNcXG5jbGFtcGRvd24vTVNcXG5jbGFuL1NNXFxuY2xhbmRlc3RpbmUvWVxcbmNsYW5nL1pHTURSU1xcbmNsYW5nb3IvTVxcbmNsYW5nb3JvdXMvWVxcbmNsYW5rL0dNRFNcXG5jbGFubmlzaC9QXFxuY2xhbm5pc2huZXNzL01cXG5jbGFuc21hbi9NXFxuY2xhbnNtZW5cXG5jbGFuc3dvbWFuXFxuY2xhbnN3b21lblxcbmNsYXAvU01cXG5jbGFwYm9hcmQvTURHU1xcbmNsYXBwZWRcXG5jbGFwcGVyL01TXFxuY2xhcHBlcmJvYXJkL1NcXG5jbGFwcGluZy9NXFxuY2xhcHRyYXAvTVxcbmNsYXF1ZS9NU1xcbmNsYXJldC9NU1xcbmNsYXJpZmljYXRpb24vTVxcbmNsYXJpZnkvWERTTkdcXG5jbGFyaW5ldC9TTVxcbmNsYXJpbmV0aXN0L1NNXFxuY2xhcmlvbi9NREdTXFxuY2xhcml0eS9NXFxuY2xhc2gvR01EU1xcbmNsYXNwJ3NcXG5jbGFzcC9VR0RTXFxuY2xhc3MvR01EU1xcbmNsYXNzaWMvTVNcXG5jbGFzc2ljYWwvTVlcXG5jbGFzc2ljaXNtL01cXG5jbGFzc2ljaXN0L01TXFxuY2xhc3NpZmlhYmxlXFxuY2xhc3NpZmljYXRpb24vQ0FNXFxuY2xhc3NpZmljYXRpb25zXFxuY2xhc3NpZmllZCdzXFxuY2xhc3NpZmllZC9VXFxuY2xhc3NpZmllZHNcXG5jbGFzc2lmaWVyL01TXFxuY2xhc3NpZnkvQUNTREdOXFxuY2xhc3NpbmVzcy9NXFxuY2xhc3Npc21cXG5jbGFzc2xlc3MvUFxcbmNsYXNzbWF0ZS9NU1xcbmNsYXNzcm9vbS9NU1xcbmNsYXNzd29yay9NXFxuY2xhc3N5L1RSUFxcbmNsYXR0ZXIvR01EU1xcbmNsYXVzYWxcXG5jbGF1c2UvTVNcXG5jbGF1c3Ryb3Bob2JpYS9NXFxuY2xhdXN0cm9waG9iaWNcXG5jbGF2aWNob3JkL1NNXFxuY2xhdmljbGUvTVNcXG5jbGF2aWVyL01TXFxuY2xhdydzXFxuY2xhdy9DU0dEXFxuY2xheS9NXFxuY2xheWV5XFxuY2xheWllclxcbmNsYXlpZXN0XFxuY2xlYW4vQkpQWlRHRFJZU1xcbmNsZWFuZXIvTVxcbmNsZWFuaW5nL01cXG5jbGVhbmxpbmVzcy9VTVxcbmNsZWFubHkvVVRQUlxcbmNsZWFubmVzcy9VTVxcbmNsZWFuc2UvWkdEUlNcXG5jbGVhbnNlci9NXFxuY2xlYW51cC9NU1xcbmNsZWFyL0pQVEdNRFJZU1xcbmNsZWFyYW5jZS9TTVxcbmNsZWFyaGVhZGVkXFxuY2xlYXJpbmcvTVxcbmNsZWFyaW5naG91c2UvU01cXG5jbGVhcm5lc3MvTVxcbmNsZWFyd2F5L1NcXG5jbGVhdC9NU1xcbmNsZWF2YWdlL01TXFxuY2xlYXZlL1pHRFJTXFxuY2xlYXZlci9NXFxuY2xlZi9TTVxcbmNsZWZ0L01TXFxuY2xlbWF0aXMvTVNcXG5jbGVtZW5jeS9JTVxcbmNsZW1lbnQvWVxcbmNsZW1lbnRpbmUvU1xcbmNsZW5jaC9HTURTXFxuY2xlcmVzdG9yeS9TTVxcbmNsZXJneS9TTVxcbmNsZXJneW1hbi9NXFxuY2xlcmd5bWVuXFxuY2xlcmd5d29tYW4vTVxcbmNsZXJneXdvbWVuXFxuY2xlcmljL01TXFxuY2xlcmljYWwvWVxcbmNsZXJpY2FsaXNtL01cXG5jbGVyay9HTURTXFxuY2xlcmtzaGlwL01cXG5jbGV2ZXIvUFRSWVxcbmNsZXZlcm5lc3MvTVxcbmNsZXZpcy9NU1xcbmNsZXcvU0dNRFxcbmNsaWNoZS9NRFNcXG5jbGljay9CWkdNRFJTXFxuY2xpY2tiYWl0XFxuY2xpY2tlci9NXFxuY2xpZW50L01TXFxuY2xpZW50ZWxlL01TXFxuY2xpZmYvTVNcXG5jbGlmZmhhbmdlci9TTVxcbmNsaWZmaGFuZ2luZ1xcbmNsaWZmdG9wL1NcXG5jbGlpXFxuY2xpbWFjdGVyaWMvTVxcbmNsaW1hY3RpY1xcbmNsaW1hdGUvU01cXG5jbGltYXRpY1xcbmNsaW1hdGljYWxseVxcbmNsaW1hdG9sb2dpc3QvU01cXG5jbGltYXRvbG9neS9NXFxuY2xpbWF4L01EU0dcXG5jbGltYi9TTURSWkdCXFxuY2xpbWJlci9NXFxuY2xpbWJpbmcvTVxcbmNsaW1lL1NNXFxuY2xpbmNoL01EUlNaR1xcbmNsaW5jaGVyL01cXG5jbGluZy9TTVJaR1xcbmNsaW5nZXIvTVxcbmNsaW5nZmlsbVxcbmNsaW5neS9SVFxcbmNsaW5pYy9TTVxcbmNsaW5pY2FsL1lcXG5jbGluaWNpYW4vU01cXG5jbGluay9TTURSWkdcXG5jbGlua2VyL01cXG5jbGlvbWV0cmljL1NcXG5jbGlvbWV0cmljaWFuL01TXFxuY2xpb21ldHJpY3MvTVxcbmNsaXAvU01cXG5jbGlwYm9hcmQvTVNcXG5jbGlwcGVkXFxuY2xpcHBlci9TTVxcbmNsaXBwaW5nL1NNXFxuY2xpcXVlL1NNXFxuY2xpcXVleVxcbmNsaXF1aXNoL1lQXFxuY2xpcXVpc2huZXNzL01cXG5jbGl0L1NNXFxuY2xpdG9yYWxcXG5jbGl0b3JpZGVzXFxuY2xpdG9yaXMvTVNcXG5jbGl4XFxuY2xvYWNhL01cXG5jbG9hY2FlXFxuY2xvYWsnc1xcbmNsb2FrL1VTREdcXG5jbG9ha3Jvb20vTVNcXG5jbG9iYmVyL1NNREdcXG5jbG9jaGUvU01cXG5jbG9jay9TTURHXFxuY2xvY2t3aXNlXFxuY2xvY2t3b3JrL1NNXFxuY2xvZC9NU1xcbmNsb2RkaXNoXFxuY2xvZGhvcHBlci9NU1xcbmNsb2cnc1xcbmNsb2cvVVNcXG5jbG9nZ2VkL1VcXG5jbG9nZ2luZy9VXFxuY2xvaXNvbm5lL01cXG5jbG9pc3Rlci9TTURHXFxuY2xvaXN0cmFsXFxuY2xvbXAvU0RHXFxuY2xvbmFsXFxuY2xvbmUvRFNNR1xcbmNsb25pZGluZVxcbmNsb25rL1NNREdcXG5jbG9wL01TXFxuY2xvcHBlZFxcbmNsb3BwaW5nXFxuY2xvc2UvRFJTTVlUR0pQXFxuY2xvc2VmaXN0ZWRcXG5jbG9zZW1vdXRoZWRcXG5jbG9zZW5lc3MvTVxcbmNsb3Nlb3V0L01TXFxuY2xvc2V0L1NNREdcXG5jbG9zZXVwL1NNXFxuY2xvc2luZy9NXFxuY2xvc3VyZS9FU01cXG5jbG90L01TXFxuY2xvdGgvTVxcbmNsb3RoZS9VRFNHXFxuY2xvdGhlc2hvcnNlL01TXFxuY2xvdGhlc2xpbmUvU01cXG5jbG90aGVzcGluL1NNXFxuY2xvdGhpZXIvTVNcXG5jbG90aGluZy9NXFxuY2xvdGhzXFxuY2xvdHRlZFxcbmNsb3R0aW5nXFxuY2xvdHVyZS9TTVxcbmNsb3VkL1NNREdcXG5jbG91ZGJ1cnN0L1NNXFxuY2xvdWRlZC9VXFxuY2xvdWRpbmVzcy9NXFxuY2xvdWRsZXNzXFxuY2xvdWR5L1JQVFxcbmNsb3V0L1NNREdcXG5jbG92ZS9SU01aXFxuY2xvdmVuXFxuY2xvdmVyL01cXG5jbG92ZXJsZWFmL1NNXFxuY2xvdmVybGVhdmVzXFxuY2xvd24vU01ER1xcbmNsb3duaXNoL1lQXFxuY2xvd25pc2huZXNzL01cXG5jbG95L0RHU1xcbmNsb3lpbmcvWVxcbmNsdWIvTVNcXG5jbHViYmFibGVcXG5jbHViYmVkXFxuY2x1YmJlci9TXFxuY2x1YmJpbmdcXG5jbHViZmVldFxcbmNsdWJmb290L01EXFxuY2x1YmhvdXNlL1NNXFxuY2x1YmxhbmRcXG5jbHVjay9TTURHXFxuY2x1ZS9NR0RTXFxuY2x1ZWxlc3NcXG5jbHVtcC9TTURHXFxuY2x1bXB5L1RSXFxuY2x1bXNpbHlcXG5jbHVtc2luZXNzL01cXG5jbHVtc3kvVFJQXFxuY2x1bmdcXG5jbHVuay9TTURSWkdcXG5jbHVua2VyL01cXG5jbHVua3kvVFJcXG5jbHVzdGVyL01EU0dcXG5jbHV0Y2gvR01EU1xcbmNsdXR0ZXInc1xcbmNsdXR0ZXIvVURTR1xcbmNsdmlcXG5jbHZpaVxcbmNseGlcXG5jbHhpaVxcbmNseGl2XFxuY2x4aXhcXG5jbHh2aVxcbmNseHZpaVxcbmNtXFxuY25pZGFyaWFuL01TXFxuY28vRVNEXFxuY29hY2gvTURTR1xcbmNvYWNobG9hZC9TXFxuY29hY2htYW4vTVxcbmNvYWNobWVuXFxuY29hY2h3b3JrXFxuY29hZGp1dG9yL01TXFxuY29hZ3VsYW50L01TXFxuY29hZ3VsYXRlL0dORFNcXG5jb2FndWxhdGlvbi9NXFxuY29hZ3VsYXRvci9NU1xcbmNvYWwvTURHU1xcbmNvYWxlc2NlL0dEU1xcbmNvYWxlc2NlbmNlL01cXG5jb2FsZXNjZW50XFxuY29hbGZhY2UvTVNcXG5jb2FsZmllbGQvU1xcbmNvYWxpdGlvbi9NU1xcbmNvYWxpdGlvbmlzdC9NU1xcbmNvYWxtaW5lL1NcXG5jb2Fyc2UvUllUUFxcbmNvYXJzZW4vU0RHXFxuY29hcnNlbmVzcy9NXFxuY29hc3QvU01EUlpHXFxuY29hc3RhbFxcbmNvYXN0ZXIvTVxcbmNvYXN0Z3VhcmQvU1xcbmNvYXN0bGluZS9NU1xcbmNvYXQvTURHSlNcXG5jb2F0aW5nL01cXG5jb2F0cm9vbS9TXFxuY29hdHRhaWwvU01cXG5jb2F1dGhvci9NREdTXFxuY29heC9EUlNaR1xcbmNvYXhlci9NXFxuY29heGlhbFxcbmNvYXhpbmcvWVxcbmNvYi9TTVxcbmNvYmFsdC9NXFxuY29iYmVyL1NcXG5jb2JibGUvRFJTTVpHXFxuY29iYmxlci9NXFxuY29iYmxlc3RvbmUvU01cXG5jb2JudXQvU1xcbmNvYnJhL1NNXFxuY29id2ViL1NNXFxuY29id2ViYmVkXFxuY29id2ViYnkvUlRcXG5jb2NhL01cXG5jb2NhaW5lL01cXG5jb2NjaS9TXFxuY29jY3VzL01cXG5jb2NjeWdlc1xcbmNvY2N5eC9NXFxuY29jaGluZWFsL01cXG5jb2NobGVhL1NNXFxuY29jaGxlYWVcXG5jb2NobGVhclxcbmNvY2svTURHU1xcbmNvY2thZGUvU01cXG5jb2NrYW1hbWllXFxuY29ja2F0aWVsL01TXFxuY29ja2F0b28vU01cXG5jb2NrYXRyaWNlL1NNXFxuY29ja2NoYWZlci9TXFxuY29ja2Nyb3cvU01cXG5jb2NrZXJlbC9TTVxcbmNvY2tleWVkXFxuY29ja2ZpZ2h0L01HU1xcbmNvY2tmaWdodGluZy9NXFxuY29ja2lseVxcbmNvY2tpbmVzcy9NXFxuY29ja2xlL1NNXFxuY29ja2xlc2hlbGwvU01cXG5jb2NrbmV5L1NNXFxuY29ja3BpdC9TTVxcbmNvY2tyb2FjaC9NU1xcbmNvY2tzY29tYi9TTVxcbmNvY2tzdWNrZXIvTVMhXFxuY29ja3N1cmVcXG5jb2NrdGFpbC9NU1xcbmNvY2t5L1JUUFxcbmNvY28vTVNcXG5jb2NvYS9TTVxcbmNvY29udXQvU01cXG5jb2Nvb24vU01ER1xcbmNvZC9TTVxcbmNvZGEvTVNcXG5jb2RkZWRcXG5jb2RkaW5nXFxuY29kZGxlL0RTR1xcbmNvZGUnc1xcbmNvZGUvQ1pHRFJTXFxuY29kZWluZS9NXFxuY29kZXBlbmRlbmN5L01cXG5jb2RlcGVuZGVudC9TTVxcbmNvZGVyL0NNXFxuY29kZXgvTVxcbmNvZGZpc2gvTVNcXG5jb2RnZXIvU01cXG5jb2RpY2VzXFxuY29kaWNpbC9TTVxcbmNvZGlmaWNhdGlvbi9NXFxuY29kaWZpZXIvTVxcbmNvZGlmeS9YRFJTTlpHXFxuY29kb24vU1xcbmNvZHBpZWNlL01TXFxuY29kc3dhbGxvcFxcbmNvZWQvTVNcXG5jb2VkdWNhdGlvbi9NXFxuY29lZHVjYXRpb25hbFxcbmNvZWZmaWNpZW50L01TXFxuY29lbGVudGVyYXRlL01TXFxuY29lbnp5bWVcXG5jb2VxdWFsL01ZU1xcbmNvZXJjZS9EUlNaR05WXFxuY29lcmNlci9NXFxuY29lcmNpb24vTVxcbmNvZXZhbC9TTVlcXG5jb2V4aXN0L0RTR1xcbmNvZXhpc3RlbmNlL01cXG5jb2V4aXN0ZW50XFxuY29leHRlbnNpdmVcXG5jb2ZmZWUvU01cXG5jb2ZmZWVjYWtlL1NNXFxuY29mZmVlaG91c2UvTVNcXG5jb2ZmZWVtYWtlci9TTVxcbmNvZmZlZXBvdC9NU1xcbmNvZmZlci9TTVxcbmNvZmZlcmRhbS9NU1xcbmNvZmZpbi9TTURHXFxuY29nL1NNXFxuY29nZW5jeS9NXFxuY29nZW50L1lcXG5jb2dpdGF0ZS9EU1hHTlZcXG5jb2dpdGF0aW9uL01cXG5jb2dpdGF0b3IvTVNcXG5jb2duYWMvU01cXG5jb2duYXRlL01TXFxuY29nbml0aW9uL0FNXFxuY29nbml0aW9uYWxcXG5jb2duaXRpdmUvWVxcbmNvZ25pemFibGVcXG5jb2duaXphbmNlL0FNXFxuY29nbml6YW50XFxuY29nbm9tZW4vU01cXG5jb2dub3NjZW50ZS9NXFxuY29nbm9zY2VudGlcXG5jb2d3aGVlbC9TTVxcbmNvaGFiaXQvU0dEXFxuY29oYWJpdGFudC9NU1xcbmNvaGFiaXRhdGlvbi9NXFxuY29oZWlyL1NNXFxuY29oZXJlL0RTR1xcbmNvaGVyZW5jZS9JTVxcbmNvaGVyZW5jeS9NXFxuY29oZXJlbnQvSVlcXG5jb2hlc2lvbi9NXFxuY29oZXNpdmUvWVBcXG5jb2hlc2l2ZW5lc3MvTVxcbmNvaG8vTVNcXG5jb2hvcnQvU01cXG5jb2lmL01TXFxuY29pZmZlZFxcbmNvaWZmaW5nXFxuY29pZmZ1cmUvRFNNR1xcbmNvaWwncy9BXFxuY29pbC9VQURHU1xcbmNvaW4vTURSWkdTXFxuY29pbmFnZS9TTVxcbmNvaW5jaWRlL0RTR1xcbmNvaW5jaWRlbmNlL01TXFxuY29pbmNpZGVudFxcbmNvaW5jaWRlbnRhbC9ZXFxuY29pbmVyL01cXG5jb2luc3VyYW5jZS9NXFxuY29pclxcbmNvaXRhbFxcbmNvaXR1cy9NXFxuY29rZS9NR0RTXFxuY29sL1NcXG5jb2xhL01TXFxuY29sYW5kZXIvU01cXG5jb2xkL01SWVRQU1xcbmNvbGRibG9vZGVkXFxuY29sZG5lc3MvTVxcbmNvbGVzbGF3L01cXG5jb2xldXMvTVNcXG5jb2xleS9TXFxuY29saWMvTVxcbmNvbGlja3lcXG5jb2xpc2V1bS9NU1xcbmNvbGl0aXMvTVxcbmNvbGxcXG5jb2xsYWJvcmF0ZS9EU1hHTlZcXG5jb2xsYWJvcmF0aW9uL01cXG5jb2xsYWJvcmF0aW9uaXN0XFxuY29sbGFib3JhdGl2ZS9ZXFxuY29sbGFib3JhdG9yL01TXFxuY29sbGFnZS9TTVxcbmNvbGxhZ2VuXFxuY29sbGFwc2UvTUdEU1xcbmNvbGxhcHNpYmxlXFxuY29sbGFyL1NNREdcXG5jb2xsYXJib25lL1NNXFxuY29sbGFyZC9TTVxcbmNvbGxhcmxlc3NcXG5jb2xsYXRlL0RTWEdOXFxuY29sbGF0ZXJhbC9NWVxcbmNvbGxhdGVyYWxpemVcXG5jb2xsYXRpb24vTVxcbmNvbGxhdG9yL01TXFxuY29sbGVhZ3VlL01TXFxuY29sbGVjdCdzXFxuY29sbGVjdC9BU0dWRFxcbmNvbGxlY3RlZC9VXFxuY29sbGVjdGVkbHlcXG5jb2xsZWN0aWJsZS9TTVxcbmNvbGxlY3Rpb24vQU1TXFxuY29sbGVjdGl2ZS9NWVNcXG5jb2xsZWN0aXZpc20vTVxcbmNvbGxlY3RpdmlzdC9TTVxcbmNvbGxlY3Rpdml6YXRpb24vTVxcbmNvbGxlY3Rpdml6ZS9EU0dcXG5jb2xsZWN0b3IvTVNcXG5jb2xsZWVuL1NNXFxuY29sbGVnZS9TTVxcbmNvbGxlZ2lhbGl0eS9NXFxuY29sbGVnaWFuL01TXFxuY29sbGVnaWF0ZVxcbmNvbGxpZGUvRFJTWkdcXG5jb2xsaWUvUlNNWlxcbmNvbGxpZXIvTVxcbmNvbGxpZXJ5L1NNXFxuY29sbGlzaW9uL1NNXFxuY29sbG9jYXRlL01HTkRTWFxcbmNvbGxvY2F0aW9uL01cXG5jb2xsb2lkL1NNXFxuY29sbG9pZGFsXFxuY29sbG9xXFxuY29sbG9xdWlhbC9ZXFxuY29sbG9xdWlhbGlzbS9TTVxcbmNvbGxvcXVpZXNcXG5jb2xsb3F1aXVtL01TXFxuY29sbG9xdXkvTVxcbmNvbGx1ZGUvRFNHXFxuY29sbHVzaW9uL01cXG5jb2xsdXNpdmVcXG5jb2xvZ25lL1NNXFxuY29sb24vU01cXG5jb2xvbmVsL1NNXFxuY29sb25lbGN5L01cXG5jb2xvbmVzXFxuY29sb25pYWwvU01ZXFxuY29sb25pYWxpc20vTVxcbmNvbG9uaWFsaXN0L01TXFxuY29sb25pc3QvU01cXG5jb2xvbml6YXRpb24vQUNNXFxuY29sb25pemUvQ0FHU0RcXG5jb2xvbml6ZXIvTVNcXG5jb2xvbm5hZGUvTURTXFxuY29sb25vc2NvcHkvU01cXG5jb2xvbnkvU01cXG5jb2xvcGhvbi9TTVxcbmNvbG9yJ3NcXG5jb2xvci9BRUdEU1xcbmNvbG9yYW50L1NNXFxuY29sb3JhdGlvbi9FTVxcbmNvbG9yYXR1cmEvTVNcXG5jb2xvcmJsaW5kL1BcXG5jb2xvcmJsaW5kbmVzcy9NXFxuY29sb3JlZCdzXFxuY29sb3JlZC9VXFxuY29sb3JlZHNcXG5jb2xvcmZhc3QvUFxcbmNvbG9yZmFzdG5lc3MvTVxcbmNvbG9yZnVsL1BZXFxuY29sb3JmdWxuZXNzL01cXG5jb2xvcmluZydzXFxuY29sb3Jpc3QvU1xcbmNvbG9yaXphdGlvbi9NXFxuY29sb3JpemUvRFNHXFxuY29sb3JsZXNzL1BZXFxuY29sb3JsZXNzbmVzcy9NXFxuY29sb3J3YXkvU1xcbmNvbG9zc2FsL1lcXG5jb2xvc3NpXFxuY29sb3NzdXMvTVxcbmNvbG9zdG9teS9TTVxcbmNvbG9zdHJ1bS9NXFxuY29sdC9NU1xcbmNvbHRpc2hcXG5jb2x1bWJpbmUvU01cXG5jb2x1bW4vU01EXFxuY29sdW1uYXJcXG5jb2x1bW5pc3QvU01cXG5jb20vSkxcXG5jb21hL01TXFxuY29tYWtlci9TTVxcbmNvbWF0b3NlXFxuY29tYi9NRFJaR0pTXFxuY29tYmF0L1NNREdWXFxuY29tYmF0YW50L1NNXFxuY29tYmF0aXZlbmVzcy9NXFxuY29tYmVkL1VcXG5jb21iZXIvTVxcbmNvbWJpbmF0aW9uL1NNXFxuY29tYmluZSdzXFxuY29tYmluZS9BRFNHXFxuY29tYmluZWQvVVxcbmNvbWJpbmVyL01TXFxuY29tYmluZ3MvTVxcbmNvbWJvL1NNXFxuY29tYnVzdC9TR1ZEXFxuY29tYnVzdGliaWxpdHkvTVxcbmNvbWJ1c3RpYmxlL01TXFxuY29tYnVzdGlvbi9NXFxuY29tZS9JTVpHUlNcXG5jb21lYmFjay9NU1xcbmNvbWVkaWFuL01TXFxuY29tZWRpY1xcbmNvbWVkaWVubmUvTVNcXG5jb21lZG93bi9NU1xcbmNvbWVkeS9TTVxcbmNvbWVsaW5lc3MvTVxcbmNvbWVseS9SUFRcXG5jb21lcidzXFxuY29tZXN0aWJsZS9TTVxcbmNvbWV0L1NNXFxuY29tZXVwcGFuY2UvU01cXG5jb21maXQnc1xcbmNvbWZpdC9FU1xcbmNvbWZvcnQvRVNNREdcXG5jb21mb3J0YWJsZS9QXFxuY29tZm9ydGFibGVuZXNzL01cXG5jb21mb3J0YWJseS9VXFxuY29tZm9ydGVyL01TXFxuY29tZm9ydGluZy9ZXFxuY29tZm9ydGxlc3NcXG5jb21meS9SVFxcbmNvbWljL1NNXFxuY29taWNhbC9ZXFxuY29taWNhbGl0eS9NXFxuY29taW5nL01cXG5jb21pdHkvTVxcbmNvbW1cXG5jb21tYS9TTVxcbmNvbW1hbmQvU01EUkxaR1xcbmNvbW1hbmRhbnQvTVNcXG5jb21tYW5kZWVyL0dEU1xcbmNvbW1hbmRlci9NXFxuY29tbWFuZG1lbnQvTVNcXG5jb21tYW5kby9TTVxcbmNvbW1lbW9yYXRlL1hHTlZEU1xcbmNvbW1lbW9yYXRpb24vTVxcbmNvbW1lbW9yYXRvci9NU1xcbmNvbW1lbmNlL0FEU0xHXFxuY29tbWVuY2VtZW50L0FNXFxuY29tbWVuY2VtZW50c1xcbmNvbW1lbmQvQVNEQkdcXG5jb21tZW5kYWJseVxcbmNvbW1lbmRhdGlvbi9BTVNcXG5jb21tZW5kYXRvcnlcXG5jb21tZW5zdXJhYmxlXFxuY29tbWVuc3VyYXRlL0lZXFxuY29tbWVudC9HU01EXFxuY29tbWVudGFyeS9TTVxcbmNvbW1lbnRhdGUvRFNHXFxuY29tbWVudGF0b3IvU01cXG5jb21tZXJjZS9NXFxuY29tbWVyY2lhbC9TTVlcXG5jb21tZXJjaWFsaXNtL01cXG5jb21tZXJjaWFsaXphdGlvbi9NXFxuY29tbWVyY2lhbGl6ZS9HRFNcXG5jb21taWUvU01cXG5jb21taW5nbGUvRFNHXFxuY29tbWlzZXJhdGUvR05WRFNYXFxuY29tbWlzZXJhdGlvbi9NXFxuY29tbWlzc2FyL1NNXFxuY29tbWlzc2FyaWF0L1NNXFxuY29tbWlzc2FyeS9TTVxcbmNvbW1pc3Npb24nc1xcbmNvbW1pc3Npb24vQUNTR0RcXG5jb21taXNzaW9uYWlyZS9TXFxuY29tbWlzc2lvbmVyL1NNXFxuY29tbWl0L0FTXFxuY29tbWl0bWVudC9NU1xcbmNvbW1pdHRhbC9TTVxcbmNvbW1pdHRlZC9BVVxcbmNvbW1pdHRlZS9TTVxcbmNvbW1pdHRlZW1hbi9NXFxuY29tbWl0dGVlbWVuXFxuY29tbWl0dGVld29tYW4vTVxcbmNvbW1pdHRlZXdvbWVuXFxuY29tbWl0dGVyL1NcXG5jb21taXR0aW5nL0FcXG5jb21tb2RlJ3NcXG5jb21tb2RlL0VJU1xcbmNvbW1vZGlmaWNhdGlvblxcbmNvbW1vZGlvdXMvWVxcbmNvbW1vZGl0eS9TTVxcbmNvbW1vZG9yZS9TTVxcbmNvbW1vbidzXFxuY29tbW9uL1VQUllUXFxuY29tbW9uYWxpdHkvU1xcbmNvbW1vbmFsdHkvTVxcbmNvbW1vbmVyL01TXFxuY29tbW9ubmVzcy9VTVxcbmNvbW1vbnBsYWNlL01TXFxuY29tbW9uc1xcbmNvbW1vbnNlbnNlXFxuY29tbW9ud2VhbC9NSFxcbmNvbW1vbndlYWx0aC9NXFxuY29tbW9ud2VhbHRoc1xcbmNvbW1vdGlvbi9TTVxcbmNvbW11bmFsL1lcXG5jb21tdW5lL1hEU01HTlxcbmNvbW11bmljYWJpbGl0eS9NXFxuY29tbXVuaWNhYmxlL0lcXG5jb21tdW5pY2FibHlcXG5jb21tdW5pY2FudC9NU1xcbmNvbW11bmljYXRlL0dOVkRTWFxcbmNvbW11bmljYXRpb24vTVxcbmNvbW11bmljYXRpdmUvVVxcbmNvbW11bmljYXRvci9TTVxcbmNvbW11bmlvbi9NXFxuY29tbXVuaXF1ZS9TTVxcbmNvbW11bmlzbS9NXFxuY29tbXVuaXN0L1NNXFxuY29tbXVuaXN0aWNcXG5jb21tdW5pdHkvU01cXG5jb21tdXRhdGlvbi9NU1xcbmNvbW11dGF0aXZlXFxuY29tbXV0YXRpdml0eVxcbmNvbW11dGF0b3IvU01cXG5jb21tdXRlL0JEUlNNWkdcXG5jb21tdXRlci9NXFxuY29tb3JiaWRpdHlcXG5jb21wL01EWUdTXFxuY29tcGFjdC9UR1NNRFJZUFxcbmNvbXBhY3Rpb25cXG5jb21wYWN0bmVzcy9NXFxuY29tcGFjdG9yL1NNXFxuY29tcGFuaW9uL1NCTVxcbmNvbXBhbmlvbmFibHlcXG5jb21wYW5pb25zaGlwL01cXG5jb21wYW5pb253YXkvTVNcXG5jb21wYW55L1NNXFxuY29tcGFyYWJpbGl0eS9NXFxuY29tcGFyYWJsZS9JXFxuY29tcGFyYWJseS9JXFxuY29tcGFyYXRpdmUvTVlTXFxuY29tcGFyZS9CRFNHXFxuY29tcGFyaXNvbi9NU1xcbmNvbXBhcnRtZW50L1NNXFxuY29tcGFydG1lbnRhbFxcbmNvbXBhcnRtZW50YWxpemF0aW9uL01cXG5jb21wYXJ0bWVudGFsaXplL0RTR1xcbmNvbXBhc3MvR01EU1xcbmNvbXBhc3Npb24vTVxcbmNvbXBhc3Npb25hdGUvWVxcbmNvbXBhdGliaWxpdHkvSU1cXG5jb21wYXRpYmxlL0lNU1xcbmNvbXBhdGlibHkvSVxcbmNvbXBhdHJpb3QvTVNcXG5jb21wZWVyL1NNXFxuY29tcGVsL1NcXG5jb21wZWxsZWRcXG5jb21wZWxsaW5nL1lcXG5jb21wZW5kaW91c1xcbmNvbXBlbmRpdW0vU01cXG5jb21wZW5zYXRlL0RTWEdOXFxuY29tcGVuc2F0ZWQvVVxcbmNvbXBlbnNhdGlvbi9NXFxuY29tcGVuc2F0b3J5XFxuY29tcGVyZS9EU0dcXG5jb21wZXRlL0RTR1xcbmNvbXBldGVuY2UvSU1cXG5jb21wZXRlbmNlc1xcbmNvbXBldGVuY2llc1xcbmNvbXBldGVuY3kvSU1cXG5jb21wZXRlbnQvSVlcXG5jb21wZXRpdGlvbi9TTVxcbmNvbXBldGl0aXZlL1BZXFxuY29tcGV0aXRpdmVuZXNzL01cXG5jb21wZXRpdG9yL1NNXFxuY29tcGlsYXRpb24vU01cXG5jb21waWxlL0RSU1pHXFxuY29tcGlsZXIvTVxcbmNvbXBsYWNlbmNlL01cXG5jb21wbGFjZW5jeS9NXFxuY29tcGxhY2VudC9ZXFxuY29tcGxhaW4vRFJaR1NcXG5jb21wbGFpbmFudC9NU1xcbmNvbXBsYWluZXIvTVxcbmNvbXBsYWludC9TTVxcbmNvbXBsYWlzYW5jZS9NXFxuY29tcGxhaXNhbnQvWVxcbmNvbXBsZWN0ZWRcXG5jb21wbGVtZW50L1NHTURcXG5jb21wbGVtZW50YXJ5XFxuY29tcGxldGUvUFlUR05YRFJTXFxuY29tcGxldGVkL1VcXG5jb21wbGV0ZW5lc3MvSU1cXG5jb21wbGV0aW9uL01cXG5jb21wbGV4L01TWVxcbmNvbXBsZXhpb24vTURTXFxuY29tcGxleGlvbmFsXFxuY29tcGxleGl0eS9TTVxcbmNvbXBsaWFuY2UvTVxcbmNvbXBsaWFudC9ZXFxuY29tcGxpY2F0ZS9HRFNcXG5jb21wbGljYXRlZC9ZXFxuY29tcGxpY2F0aW9uL01cXG5jb21wbGljaXRcXG5jb21wbGljaXR5L01cXG5jb21wbGltZW50L01ER1NcXG5jb21wbGltZW50YXJ5L1VcXG5jb21wbHkvTkRTWEdcXG5jb21wby9TXFxuY29tcG9uZW50L1NNXFxuY29tcG9ydC9MU0dEXFxuY29tcG9ydG1lbnQvTVxcbmNvbXBvc2UvQUVDR1NEXFxuY29tcG9zZWRseVxcbmNvbXBvc2VyL01TXFxuY29tcG9zaXRlL01ZR05YRFNcXG5jb21wb3NpdGlvbi9DTVxcbmNvbXBvc2l0aW9uYWxcXG5jb21wb3NpdG9yL1NNXFxuY29tcG9zdC9TR01EXFxuY29tcG9zdXJlL0VNXFxuY29tcG90ZS9TTVxcbmNvbXBvdW5kL0dNREJTXFxuY29tcG91bmRlZC9VXFxuY29tcHJlaGVuZC9TREdcXG5jb21wcmVoZW5zaWJpbGl0eS9JTVxcbmNvbXByZWhlbnNpYmxlL0lcXG5jb21wcmVoZW5zaWJseS9JXFxuY29tcHJlaGVuc2lvbi9JTVxcbmNvbXByZWhlbnNpb25zXFxuY29tcHJlaGVuc2l2ZS9QTVlTXFxuY29tcHJlaGVuc2l2ZW5lc3MvTVxcbmNvbXByZXNzJ3NcXG5jb21wcmVzcy9DR1ZEU1xcbmNvbXByZXNzZWQvVVxcbmNvbXByZXNzaWJsZVxcbmNvbXByZXNzaW9uL0NNXFxuY29tcHJlc3Nvci9TTVxcbmNvbXByaXNlL0dEU1xcbmNvbXByb21pc2UvTUdEU1xcbmNvbXB0cm9sbGVyL01TXFxuY29tcHVsc2lvbi9NU1xcbmNvbXB1bHNpdmUvWVBcXG5jb21wdWxzaXZlbmVzcy9NXFxuY29tcHVsc29yaWx5XFxuY29tcHVsc29yeS9TTVxcbmNvbXB1bmN0aW9uL1NNXFxuY29tcHV0YXRpb24vU01cXG5jb21wdXRhdGlvbmFsL1lcXG5jb21wdXRlL0FEU0dcXG5jb21wdXRlci9NU1xcbmNvbXB1dGVyYXRlXFxuY29tcHV0ZXJpemF0aW9uL01cXG5jb21wdXRlcml6ZS9HRFNcXG5jb21wdXRpbmcvTVxcbmNvbXJhZGUvU01ZXFxuY29tcmFkZXNoaXAvTVxcbmNvbi9HU01cXG5jb25jYXRlbmF0ZS9YRFNHTlxcbmNvbmNhdGVuYXRpb24vTVxcbmNvbmNhdmUvWVBcXG5jb25jYXZlbmVzcy9NXFxuY29uY2VhbC9TRFJaR0JMXFxuY29uY2VhbGVkL1VcXG5jb25jZWFsZXIvTVxcbmNvbmNlYWxtZW50L01cXG5jb25jZWl0L1NNRFxcbmNvbmNlaXRlZC9QWVxcbmNvbmNlaXRlZG5lc3MvTVxcbmNvbmNlaXZhYmxlL0lcXG5jb25jZWl2YWJseS9JXFxuY29uY2VpdmUvRFNHQlxcbmNvbmNlbnRyYXRlL0RTTUdOWFxcbmNvbmNlbnRyYXRpb24vTVxcbmNvbmNlbnRyaWNcXG5jb25jZW50cmljYWxseVxcbmNvbmNlcHQvU01cXG5jb25jZXB0aW9uL1NNXFxuY29uY2VwdGlvbmFsXFxuY29uY2VwdHVhbC9ZXFxuY29uY2VwdHVhbGl6YXRpb24vTVNcXG5jb25jZXB0dWFsaXplL0RTR1xcbmNvbmNlcm4vVU1EXFxuY29uY2VybmVkL1VZXFxuY29uY2VybmluZ1xcbmNvbmNlcm5zXFxuY29uY2VydCdzXFxuY29uY2VydC9FU0RHXFxuY29uY2VydGVkL1lcXG5jb25jZXJ0Z29lci9TXFxuY29uY2VydGluYS9TR01EXFxuY29uY2VydGl6ZS9EU0dcXG5jb25jZXJ0bWFzdGVyL01TXFxuY29uY2VydG8vU01cXG5jb25jZXNzaW9uYWlyZS9NU1xcbmNvbmNlc3Npb25hbFxcbmNvbmNlc3Npb25hcnlcXG5jb25jaC9NXFxuY29uY2hpZS9TXFxuY29uY2hzXFxuY29uY2llcmdlL01TXFxuY29uY2lsaWF0ZS9EU0dOXFxuY29uY2lsaWF0aW9uL0FNXFxuY29uY2lsaWF0b3IvU01cXG5jb25jaWxpYXRvcnlcXG5jb25jaXNlL1JQWVROXFxuY29uY2lzZW5lc3MvTVxcbmNvbmNpc2lvbi9NXFxuY29uY2xhdmUvU01cXG5jb25jbHVkZS9EU0dcXG5jb25jbHVzaW9uL01TXFxuY29uY2x1c2l2ZS9JWVBcXG5jb25jbHVzaXZlbmVzcy9JTVxcbmNvbmNvY3QvU0RHXFxuY29uY29jdGlvbi9NU1xcbmNvbmNvbWl0YW50L01ZU1xcbmNvbmNvcmQvTVxcbmNvbmNvcmRhbmNlL1NNXFxuY29uY29yZGFudFxcbmNvbmNvcmRhdC9TTVxcbmNvbmNvdXJzZS9TTVxcbmNvbmNyZXRlL0RTUE1ZR05YXFxuY29uY3JldGVuZXNzL01cXG5jb25jcmV0aW9uL01cXG5jb25jdWJpbmFnZS9NXFxuY29uY3ViaW5lL01TXFxuY29uY3VwaXNjZW5jZS9NXFxuY29uY3VwaXNjZW50XFxuY29uY3VyL1NcXG5jb25jdXJyZWRcXG5jb25jdXJyZW5jZS9TTVxcbmNvbmN1cnJlbmN5XFxuY29uY3VycmluZ1xcbmNvbmN1c3MvVlxcbmNvbmN1c3Npb24vU01cXG5jb25kZW1uL1NEUlpHXFxuY29uZGVtbmF0aW9uL01TXFxuY29uZGVtbmF0b3J5XFxuY29uZGVtbmVyL01cXG5jb25kZW5zYXRlL01OWFNcXG5jb25kZW5zYXRpb24vTVxcbmNvbmRlbnNlL0RSU1pHXFxuY29uZGVuc2VyL01cXG5jb25kZXNjZW5kaW5nL1lcXG5jb25kZXNjZW5zaW9uL01cXG5jb25kaWduXFxuY29uZGltZW50L01TXFxuY29uZGl0aW9uJ3NcXG5jb25kaXRpb24vQUdTRFxcbmNvbmRpdGlvbmFsL1NNWVxcbmNvbmRpdGlvbmFsaXR5XFxuY29uZGl0aW9uZWQvVVxcbmNvbmRpdGlvbmVyL1NNXFxuY29uZGl0aW9uaW5nL01cXG5jb25kby9TTVxcbmNvbmRvbGVuY2UvU01cXG5jb25kb20vU01cXG5jb25kb21pbml1bS9NU1xcbmNvbmRvbmUvRFNHXFxuY29uZG9yL1NNXFxuY29uZHVjZS9EU0dWXFxuY29uZHVjdC9NREdWXFxuY29uZHVjdGFuY2UvTVxcbmNvbmR1Y3RpYmlsaXR5L01cXG5jb25kdWN0aWJsZVxcbmNvbmR1Y3Rpb24vTVxcbmNvbmR1Y3Rpdml0eS9NXFxuY29uZHVjdG9yL01TXFxuY29uZHVjdHJlc3MvTVNcXG5jb25kdWl0L1NNXFxuY29uZS9NXFxuY29uZXlzXFxuY29uZmFiL1NNXFxuY29uZmFiYmVkXFxuY29uZmFiYmluZ1xcbmNvbmZhYnVsYXRlL1hEU0dOXFxuY29uZmFidWxhdGlvbi9NXFxuY29uZmVjdGlvbi9TWk1SXFxuY29uZmVjdGlvbmVyL01cXG5jb25mZWN0aW9uZXJ5L1NNXFxuY29uZmVkZXJhY3kvU01cXG5jb25mZWRlcmF0ZS9NXFxuY29uZmVyL1NcXG5jb25mZXJlZS9TTVxcbmNvbmZlcmVuY2UvTUdTXFxuY29uZmVycmFibGVcXG5jb25mZXJyYWwvTVxcbmNvbmZlcnJlZFxcbmNvbmZlcnJlci9NU1xcbmNvbmZlcnJpbmdcXG5jb25mZXNzZWQvWVxcbmNvbmZlc3Npb24vU01cXG5jb25mZXNzaW9uYWwvU01cXG5jb25mZXNzb3IvTVNcXG5jb25mZXR0aS9NXFxuY29uZmlkYW50L01TXFxuY29uZmlkYW50ZS9TTVxcbmNvbmZpZGUvRFJTWkdcXG5jb25maWRlbmNlL1NNXFxuY29uZmlkZW50L1lcXG5jb25maWRlbnRpYWwvWVxcbmNvbmZpZGVudGlhbGl0eS9NXFxuY29uZmlkZXIvTVxcbmNvbmZpZGluZy9ZXFxuY29uZmlndXJhdGlvbi9TXFxuY29uZmlndXJlL0JcXG5jb25maW5lZC9VXFxuY29uZmluZW1lbnQvTVNcXG5jb25maXJtL0FTREdcXG5jb25maXJtYXRpb24vQVNNXFxuY29uZmlybWF0b3J5XFxuY29uZmlybWVkL1VcXG5jb25maXNjYXRlL0RTR05YXFxuY29uZmlzY2F0aW9uL01cXG5jb25maXNjYXRvci9TTVxcbmNvbmZpc2NhdG9yeVxcbmNvbmZsYWdyYXRpb24vTVNcXG5jb25mbGF0ZS9YRFNHTlxcbmNvbmZsYXRpb24vTVxcbmNvbmZsaWN0L1NHTURcXG5jb25mbHVlbmNlL01TXFxuY29uZmx1ZW50XFxuY29uZm9ybS9aQlxcbmNvbmZvcm1hYmxlL1VcXG5jb25mb3JtYWxcXG5jb25mb3JtYW5jZS9NXFxuY29uZm9ybWlzbS9NXFxuY29uZm9ybWlzdC9TTVxcbmNvbmZvcm1pdHkvTVxcbmNvbmZyZXJlL01TXFxuY29uZnJvbnRhdGlvbi9TTVxcbmNvbmZyb250YXRpb25hbFxcbmNvbmZ1c2UvUlpcXG5jb25mdXNlZC9ZXFxuY29uZnVzaW5nL1lcXG5jb25mdXRhdGlvbi9NXFxuY29uZnV0ZS9EU0dcXG5jb25nYS9TTURHXFxuY29uZ2VhbC9TTERHXFxuY29uZ2VhbG1lbnQvTVxcbmNvbmdlci9TTVxcbmNvbmdlcmllcy9NXFxuY29uZ2VzdC9TREdWXFxuY29uZ2VzdGlvbi9NXFxuY29uZ2xvbWVyYXRlL0RTWE1HTlxcbmNvbmdsb21lcmF0aW9uL01cXG5jb25ncmF0cy9NXFxuY29uZ3JhdHVsYXRlL1hHTkRTXFxuY29uZ3JhdHVsYXRpb24vTVxcbmNvbmdyYXR1bGF0b3J5XFxuY29uZ3JlZ2FudC9NU1xcbmNvbmdyZWdhdGUvR05EU1hcXG5jb25ncmVnYXRpb24vTVxcbmNvbmdyZWdhdGlvbmFsXFxuY29uZ3JlZ2F0aW9uYWxpc20vTVxcbmNvbmdyZWdhdGlvbmFsaXN0L01TXFxuY29uZ3Jlc3MvTVNcXG5jb25ncmVzc2lvbmFsXFxuY29uZ3Jlc3NtYW4vTVxcbmNvbmdyZXNzbWVuXFxuY29uZ3Jlc3NwZW9wbGVcXG5jb25ncmVzc3BlcnNvbi9NU1xcbmNvbmdyZXNzd29tYW4vTVxcbmNvbmdyZXNzd29tZW5cXG5jb25ncnVlbmNlL01cXG5jb25ncnVlbnQvWVxcbmNvbmdydWl0eS9JU01cXG5jb25ncnVvdXNcXG5jb25pYy9TTVxcbmNvbmljYWwvWVxcbmNvbmlmZXIvU01cXG5jb25pZmVyb3VzXFxuY29uamVjdHVyYWxcXG5jb25qZWN0dXJlL01HRFNcXG5jb25qb2ludFxcbmNvbmp1Z2FsL1lcXG5jb25qdWdhdGUvRFNYR05cXG5jb25qdWdhdGlvbi9NXFxuY29uanVuY3QvVk1TXFxuY29uanVuY3RpdmEvU01cXG5jb25qdW5jdGl2ZS9TTVxcbmNvbmp1bmN0aXZpdGlzL01cXG5jb25qdXJhdGlvbi9NU1xcbmNvbmp1cmUvRFJTWkdcXG5jb25qdXJlci9NXFxuY29uay9NRFJaXFxuY29ubWFuXFxuY29ubmVjdC9BRURWR1NcXG5jb25uZWN0YWJsZVxcbmNvbm5lY3RlZC9VXFxuY29ubmVjdGlvbi9FTVNcXG5jb25uZWN0aXZlL01TXFxuY29ubmVjdGl2aXR5L01cXG5jb25uZWN0b3IvTVNcXG5jb25uZWRcXG5jb25uaW5nXFxuY29ubmlwdGlvbi9NU1xcbmNvbm5pdmFuY2UvTVxcbmNvbm5pdmUvRFJTWkdcXG5jb25uaXZlci9NXFxuY29ubm9pc3NldXIvU01cXG5jb25ub3RhdGl2ZVxcbmNvbm51YmlhbFxcbmNvbnF1ZXIvQVNER1xcbmNvbnF1ZXJhYmxlL1VcXG5jb25xdWVyZWQvVVxcbmNvbnF1ZXJvci9NU1xcbmNvbnF1ZXN0L0FNXFxuY29ucXVpc3RhZG9yL1NNXFxuY29ucy9EU0dcXG5jb25zYW5ndWluZW91c1xcbmNvbnNhbmd1aW5pdHkvTVxcbmNvbnNjaWVuY2VsZXNzXFxuY29uc2NpZW50aW91cy9QWVxcbmNvbnNjaWVudGlvdXNuZXNzL01cXG5jb25zY2lvdXMvVVlQXFxuY29uc2Npb3VzbmVzcy9VTVxcbmNvbnNjaW91c25lc3Nlc1xcbmNvbnNjcmlwdGlvbi9NXFxuY29uc2VjcmF0ZS9BRFNHTlxcbmNvbnNlY3JhdGVkL1VcXG5jb25zZWNyYXRpb24vQU1cXG5jb25zZWNyYXRpb25zXFxuY29uc2VjdXRpdmUvWVxcbmNvbnNlbnN1YWxcXG5jb25zZW5zdXMvTVNcXG5jb25zZW50L1NNREdcXG5jb25zZXF1ZW5jZS9TTVxcbmNvbnNlcXVlbnQvWVxcbmNvbnNlcXVlbnRpYWwvSVlcXG5jb25zZXJ2YW5jeS9TTVxcbmNvbnNlcnZhdGlvbi9NXFxuY29uc2VydmF0aW9uaXNtL01cXG5jb25zZXJ2YXRpb25pc3QvU01cXG5jb25zZXJ2YXRpc20vTVxcbmNvbnNlcnZhdGl2ZS9NWVNcXG5jb25zZXJ2YXRvaXJlL1NcXG5jb25zZXJ2YXRvci9TTVxcbmNvbnNlcnZhdG9yeS9TTVxcbmNvbnNpZGVyL0FHU0RcXG5jb25zaWRlcmFibGUvSVxcbmNvbnNpZGVyYWJseVxcbmNvbnNpZGVyYXRlL0lQWU5cXG5jb25zaWRlcmF0ZW5lc3MvSU1cXG5jb25zaWRlcmF0aW9uL0FJTVxcbmNvbnNpZGVyYXRpb25zXFxuY29uc2lkZXJlZC9VXFxuY29uc2lnbi9BU0RHXFxuY29uc2lnbmVlL01TXFxuY29uc2lnbm1lbnQvTVNcXG5jb25zaXN0L1NER1xcbmNvbnNpc3RlbmNlL01TXFxuY29uc2lzdGVuY3kvSVNNXFxuY29uc2lzdGVudC9JWVxcbmNvbnNpc3RvcnkvU01cXG5jb25zb2xhYmxlL0lcXG5jb25zb2xhdGlvbi9NU1xcbmNvbnNvbGF0b3J5XFxuY29uc29saWRhdGUvWERTR05cXG5jb25zb2xpZGF0ZWQvVVxcbmNvbnNvbGlkYXRpb24vTVxcbmNvbnNvbGlkYXRvci9NU1xcbmNvbnNvbGluZy9ZXFxuY29uc29tbWUvTVxcbmNvbnNvbmFuY2UvU01cXG5jb25zb25hbnQvU01ZXFxuY29uc29ydGlhXFxuY29uc29ydGl1bS9NXFxuY29uc3BlY3R1cy9NU1xcbmNvbnNwaWN1b3VzL0lQWVxcbmNvbnNwaWN1b3VzbmVzcy9JTVxcbmNvbnNwaXJhY3kvU01cXG5jb25zcGlyYXRvci9NU1xcbmNvbnNwaXJhdG9yaWFsL1lcXG5jb25zcGlyZS9HRFxcbmNvbnN0YWJsZS9TTVxcbmNvbnN0YWJ1bGFyeS9TTVxcbmNvbnN0YW5jeS9JTVxcbmNvbnN0YW50L01ZU1xcbmNvbnN0ZWxsYXRpb24vU01cXG5jb25zdGVybmF0aW9uL01cXG5jb25zdGlwYXRlL0dORFNcXG5jb25zdGlwYXRpb24vTVxcbmNvbnN0aXR1ZW5jeS9TTVxcbmNvbnN0aXR1ZW50L1NNXFxuY29uc3RpdHV0ZS9BRFNHTlZcXG5jb25zdGl0dXRpb24vQU1cXG5jb25zdGl0dXRpb25hbC9NWVNcXG5jb25zdGl0dXRpb25hbGlzbVxcbmNvbnN0aXR1dGlvbmFsaXR5L1VNXFxuY29uc3RpdHV0aW9uc1xcbmNvbnN0cmFpbmVkL1VcXG5jb25zdHJhaW50L1NNXFxuY29uc3RyaWN0L0dWU0RcXG5jb25zdHJpY3Rpb24vU01cXG5jb25zdHJpY3Rvci9TTVxcbmNvbnN0cnVhYmxlXFxuY29uc3RydWN0J3NcXG5jb25zdHJ1Y3QvQ0FEVkdTXFxuY29uc3RydWN0aW9uL0NBTVNcXG5jb25zdHJ1Y3Rpb25hbFxcbmNvbnN0cnVjdGlvbmlzdCdzXFxuY29uc3RydWN0aW9uaXN0L0NTXFxuY29uc3RydWN0aXZlL1lQXFxuY29uc3RydWN0aXZlbmVzcy9NXFxuY29uc3RydWN0b3IvTVNcXG5jb25zdHJ1ZS9HRFNcXG5jb25zdWwvS1NNXFxuY29uc3VsYXIvS1xcbmNvbnN1bGF0ZS9TTVxcbmNvbnN1bHNoaXAvTVxcbmNvbnN1bHQvR1NEXFxuY29uc3VsdGFuY3kvU01cXG5jb25zdWx0YW50L01TXFxuY29uc3VsdGF0aW9uL01TXFxuY29uc3VsdGF0aXZlXFxuY29uc3VtYWJsZS9TTVxcbmNvbnN1bWUvQkRSU1pHXFxuY29uc3VtZWQvVVxcbmNvbnN1bWVyL01cXG5jb25zdW1lcmlzbS9NXFxuY29uc3VtZXJpc3QvTVNcXG5jb25zdW1tYXRlL1lHTlhEU1xcbmNvbnN1bW1hdGVkL1VcXG5jb25zdW1wdGlvbi9NXFxuY29uc3VtcHRpdmUvU01cXG5jb250XFxuY29udGFjdC9BU0RHXFxuY29udGFjdGFibGVcXG5jb250YWN0bGVzc1xcbmNvbnRhZ2lvbi9NU1xcbmNvbnRhZ2lvdXMvUFlcXG5jb250YWdpb3VzbmVzcy9NXFxuY29udGFpbi9TQkxEUlpHXFxuY29udGFpbmVyL01cXG5jb250YWluZXJpemF0aW9uL01cXG5jb250YWluZXJpemUvRFNHXFxuY29udGFpbm1lbnQvTVxcbmNvbnRhbWluYW50L1NNXFxuY29udGFtaW5hdGUvQUNEU0dcXG5jb250YW1pbmF0ZWQvVVxcbmNvbnRhbWluYXRpb24vQ01cXG5jb250YW1pbmF0b3IvU01cXG5jb250ZFxcbmNvbnRlbW4vU0RHXFxuY29udGVtcGxhdGUvRFNHTlZcXG5jb250ZW1wbGF0aW9uL01cXG5jb250ZW1wbGF0aXZlL1NNWVxcbmNvbnRlbXBvcmFuZWl0eS9NXFxuY29udGVtcG9yYW5lb3VzL1lcXG5jb250ZW1wdC9NXFxuY29udGVtcHRpYmxlXFxuY29udGVtcHRpYmx5XFxuY29udGVtcHR1b3VzL1lQXFxuY29udGVtcHR1b3VzbmVzcy9NXFxuY29udGVuZGVyL01TXFxuY29udGVudC9FU0xNREdcXG5jb250ZW50ZWQvRVlcXG5jb250ZW50ZWRuZXNzL01cXG5jb250ZW50aW9uL1NNXFxuY29udGVudGlvdXMvWVBcXG5jb250ZW50aW91c25lc3MvTVxcbmNvbnRlbnRseVxcbmNvbnRlbnRtZW50L0VNXFxuY29udGVybWlub3VzL1lcXG5jb250ZXN0YWJsZS9JXFxuY29udGVzdGFudC9NU1xcbmNvbnRlc3RlZC9VXFxuY29udGV4dHVhbGl6YXRpb25cXG5jb250ZXh0dWFsaXplL0RTR1xcbmNvbnRpZ3VpdHkvTVxcbmNvbnRpZ3VvdXMvWVxcbmNvbnRpbmVuY2UvSU1cXG5jb250aW5lbnQvU01cXG5jb250aW5lbnRhbC9TTVxcbmNvbnRpbmdlbmN5L1NNXFxuY29udGluZ2VudC9TTVlcXG5jb250aW51YVxcbmNvbnRpbnVhbC9ZXFxuY29udGludWFuY2UvRU1TXFxuY29udGludWF0aW9uL0VNU1xcbmNvbnRpbnVlL0VHRFNcXG5jb250aW51aXR5L0VTTVxcbmNvbnRpbnVvdXMvRVlcXG5jb250aW51dW0vTVxcbmNvbnRvcnQvR0RcXG5jb250b3J0aW9uL01TXFxuY29udG9ydGlvbmlzdC9TTVxcbmNvbnRyYVxcbmNvbnRyYWJhbmQvTVxcbmNvbnRyYWJhc3Nvb24vU1xcbmNvbnRyYWNlcHRpb24vTVxcbmNvbnRyYWNlcHRpdmUvU01cXG5jb250cmFjdC9NREdcXG5jb250cmFjdGlibGVcXG5jb250cmFjdGlsZVxcbmNvbnRyYWN0aWxpdHlcXG5jb250cmFjdGlvbi9TXFxuY29udHJhY3R1YWwvWVxcbmNvbnRyYWRpY3QvU0RHXFxuY29udHJhZGljdGlvbi9TTVxcbmNvbnRyYWRpY3RvcnlcXG5jb250cmFkaXN0aW5jdGlvbi9NU1xcbmNvbnRyYWZsb3cvU1xcbmNvbnRyYWlsL01TXFxuY29udHJhaW5kaWNhdGUvR05YRFNcXG5jb250cmFpbmRpY2F0aW9uL01cXG5jb250cmFsdG8vU01cXG5jb250cmFwdGlvbi9TTVxcbmNvbnRyYXB1bnRhbC9ZXFxuY29udHJhcmlhbi9TTVxcbmNvbnRyYXJpYW5pc21cXG5jb250cmFyaWV0eS9NXFxuY29udHJhcmlseVxcbmNvbnRyYXJpbmVzcy9NXFxuY29udHJhcml3aXNlXFxuY29udHJhcnkvUFNNXFxuY29udHJhc3QvTURHU1xcbmNvbnRyYXZlbmUvR0RTXFxuY29udHJhdmVudGlvbi9TTVxcbmNvbnRyZXRlbXBzL01cXG5jb250cmlidXRlL1hHTkRcXG5jb250cmlidXRpb24vTVxcbmNvbnRyaWJ1dG9yL01TXFxuY29udHJpYnV0b3J5XFxuY29udHJpdGlvbi9NXFxuY29udHJpdmFuY2UvTVNcXG5jb250cml2ZS9aR0RSU1xcbmNvbnRyaXZlci9NXFxuY29udHJvbCdzXFxuY29udHJvbC9DU1xcbmNvbnRyb2xsYWJsZS9VXFxuY29udHJvbGxlZC9VQ1xcbmNvbnRyb2xsZXIvTVNcXG5jb250cm9sbGluZy9DXFxuY29udHJvdmVyc2lhbC9ZXFxuY29udHJvdmVyc3kvU01cXG5jb250cm92ZXJ0L0RTR1xcbmNvbnRyb3ZlcnRpYmxlL0lcXG5jb250dW1hY2lvdXMvWVxcbmNvbnR1bWFjeS9NXFxuY29udHVtZWxpb3VzXFxuY29udHVtZWx5L1NNXFxuY29udHVzZS9YRFNHTlxcbmNvbnR1c2lvbi9NXFxuY29udW5kcnVtL1NNXFxuY29udXJiYXRpb24vTVNcXG5jb252YWxlc2NlL0RTR1xcbmNvbnZhbGVzY2VuY2UvTVNcXG5jb252YWxlc2NlbnQvU01cXG5jb252ZWN0aW9uL01cXG5jb252ZWN0aW9uYWxcXG5jb252ZWN0aXZlXFxuY29udmVjdG9yL1NcXG5jb252ZW5lL0FEU0dcXG5jb252ZW5lci9NU1xcbmNvbnZlbmllbmNlL0lNU1xcbmNvbnZlbmllbnQvSVlcXG5jb252ZW50L1NNXFxuY29udmVudGljbGUvTVNcXG5jb252ZW50aW9uL1NNXFxuY29udmVudGlvbmFsL1VZXFxuY29udmVudGlvbmFsaXR5L1VNXFxuY29udmVudGlvbmFsaXplL0dEU1xcbmNvbnZlbnRpb25lZXIvU1xcbmNvbnZlcmdlbmNlL01TXFxuY29udmVyZ2VudFxcbmNvbnZlcnNhbnRcXG5jb252ZXJzYXRpb24vTVNcXG5jb252ZXJzYXRpb25hbC9ZXFxuY29udmVyc2F0aW9uYWxpc3QvU01cXG5jb252ZXJzZS9ZXFxuY29udmVydCdzXFxuY29udmVydC9BR1NEXFxuY29udmVydGVkL1VcXG5jb252ZXJ0ZXIvU01cXG5jb252ZXJ0aWJpbGl0eS9NXFxuY29udmVydGlibGUvU01cXG5jb252ZXgvWVxcbmNvbnZleGl0eS9NXFxuY29udmV5L1NCREdcXG5jb252ZXlhbmNlL01HU1xcbmNvbnZleW9yL01TXFxuY29udmljdC9HU01EXFxuY29udmljdGlvbi9NU1xcbmNvbnZpbmNlL0dEU1xcbmNvbnZpbmNlZC9VXFxuY29udmluY2luZy9VWVxcbmNvbnZpdmlhbC9ZXFxuY29udml2aWFsaXR5L01cXG5jb252b2tlL0RTR1xcbmNvbnZvbHV0ZWRcXG5jb252b2x1dGlvbi9NU1xcbmNvbnZveS9TTURHXFxuY29udnVsc2UvR05WWERTXFxuY29udnVsc2lvbi9NXFxuY29udnVsc2l2ZS9ZXFxuY29ueS9NXFxuY29vL0dTTURcXG5jb29rJ3NcXG5jb29rL0FER1NcXG5jb29rYm9vay9NU1xcbmNvb2tlZC9VXFxuY29va2VyL1NNXFxuY29va2VyeS9TTVxcbmNvb2tob3VzZS9TXFxuY29va2llL1NNXFxuY29va2luZy9NXFxuY29va291dC9TTVxcbmNvb2t3YXJlL1NNXFxuY29vbC9NRFJZWlRHUFNcXG5jb29sYW50L1NNXFxuY29vbGVyL01cXG5jb29saWUvU01cXG5jb29sbmVzcy9NXFxuY29vbi9NUyFcXG5jb29uc2tpbi9NU1xcbmNvb3AvTURSWkdTXFxuY29vcGVyL01ER1xcbmNvb3BlcmFnZS9NXFxuY29vcGVyYXRlL0RTR05WXFxuY29vcGVyYXRpb24vTVxcbmNvb3BlcmF0aXZlL1BNWVNcXG5jb29wZXJhdGl2ZW5lc3MvTVxcbmNvb3BlcmF0b3IvU01cXG5jb29yZGluYXRlL0RTTVlHTlxcbmNvb3JkaW5hdGVkL1VcXG5jb29yZGluYXRpb24vTVxcbmNvb3JkaW5hdG9yL01TXFxuY29vdC9NU1xcbmNvb3RpZS9TTVxcbmNvcC9HSlNNRFxcbmNvcGFjZXRpY1xcbmNvcGF5L01cXG5jb3BlL01TXFxuY29waWVyL1NNXFxuY29waWxvdC9TTVxcbmNvcGluZy9NXFxuY29waW91cy9QWVxcbmNvcGlvdXNuZXNzL01cXG5jb3BwZWRcXG5jb3BwZXIvU01cXG5jb3BwZXJoZWFkL1NNXFxuY29wcGVycGxhdGUvTVxcbmNvcHBlcnlcXG5jb3BwaW5nXFxuY29wcmEvTVxcbmNvcHNlL1NNXFxuY29wdGVyL1NNXFxuY29wdWxhL1NNXFxuY29wdWxhdGUvR05WRFNcXG5jb3B1bGF0aW9uL01cXG5jb3B1bGF0aXZlL1NNXFxuY29weSdzXFxuY29weS9BRFNHXFxuY29weWJvb2svU01cXG5jb3B5Y2F0L01TXFxuY29weWNhdHRlZFxcbmNvcHljYXR0aW5nXFxuY29weWlzdC9NU1xcbmNvcHlsZWZ0XFxuY29weXJpZ2h0L0dTTURcXG5jb3B5d3JpdGVyL01TXFxuY29xdWV0cnkvU01cXG5jb3F1ZXR0ZS9EU01HXFxuY29xdWV0dGlzaC9ZXFxuY29yXFxuY29yYWNsZS9TTVxcbmNvcmFsL1NNXFxuY29yYmVsL1NNXFxuY29yZC9FQVNHRE1cXG5jb3JkYWdlL01cXG5jb3JkaWFsL1NNWVxcbmNvcmRpYWxpdHkvTVxcbmNvcmRpbGxlcmEvTVNcXG5jb3JkaXRlL01cXG5jb3JkbGVzc1xcbmNvcmRvbi9TTURHXFxuY29yZG92YW4vTVxcbmNvcmR1cm95L01TXFxuY29yZHVyb3lzL01cXG5jb3JlL01aR0RSU1xcbmNvcmVsaWdpb25pc3QvU1xcbmNvcmVyL01cXG5jb3Jlc3BvbmRlbnQvTVNcXG5jb3JnaS9TTVxcbmNvcmlhbmRlci9NXFxuY29yaydzXFxuY29yay9VREdTXFxuY29ya2FnZVxcbmNvcmtlci9TTVxcbmNvcmtzY3Jldy9TTURHXFxuY29ybS9NU1xcbmNvcm1vcmFudC9TTVxcbmNvcm4vTURSWkdTXFxuY29ybmJhbGwvTVNcXG5jb3JuYnJlYWQvTVxcbmNvcm5jb2IvTVNcXG5jb3JuY3Jha2UvU1xcbmNvcm5lYS9TTVxcbmNvcm5lYWxcXG5jb3JuZXIvR01EXFxuY29ybmVyc3RvbmUvU01cXG5jb3JuZXQvU01cXG5jb3JuZmllbGQvU1xcbmNvcm5mbGFrZXMvTVxcbmNvcm5mbG91clxcbmNvcm5mbG93ZXIvU01cXG5jb3JuaWNlL01TXFxuY29ybmlseVxcbmNvcm5pbmVzcy9NXFxuY29ybm1lYWwvTVxcbmNvcm5yb3cvTURHU1xcbmNvcm5zdGFsay9TTVxcbmNvcm5zdGFyY2gvTVxcbmNvcm51Y29waWEvTVNcXG5jb3JueS9QUlRcXG5jb3JvbGxhL01TXFxuY29yb2xsYXJ5L1NNXFxuY29yb25hL1NNXFxuY29yb25hbC9NU1xcbmNvcm9uYXJ5L1NNXFxuY29yb25hdGlvbi9TTVxcbmNvcm9uYXZpcnVzL01TXFxuY29yb25lci9NU1xcbmNvcm9uZXQvTVNcXG5jb3JwXFxuY29ycG9yYVxcbmNvcnBvcmFsL1NNXFxuY29ycG9yYXRlL1hZTlxcbmNvcnBvcmF0aW9uL0lNXFxuY29ycG9yYXRpc21cXG5jb3Jwb3JlYWwvWVxcbmNvcnBvcmVhbGl0eS9NXFxuY29ycHMvTVNcXG5jb3Jwc2UvTVxcbmNvcnBzbWFuL01cXG5jb3Jwc21lblxcbmNvcnB1bGVuY2UvTVxcbmNvcnB1bGVudFxcbmNvcnB1cy9NXFxuY29ycHVzY2xlL01TXFxuY29ycHVzY3VsYXJcXG5jb3JyXFxuY29ycmFsL1NNXFxuY29ycmFsbGVkXFxuY29ycmFsbGluZ1xcbmNvcnJlY3QvRFJZVEdWU0JQXFxuY29ycmVjdGVkL1VcXG5jb3JyZWN0aW9uL1NNXFxuY29ycmVjdGlvbmFsXFxuY29ycmVjdGl2ZS9TTVxcbmNvcnJlY3RuZXNzL0lNXFxuY29ycmVjdG9yXFxuY29ycmVsYXRlL1hEU01HTlZcXG5jb3JyZWxhdGVkL1VcXG5jb3JyZWxhdGlvbi9NXFxuY29ycmVsYXRpb25hbFxcbmNvcnJlbGF0aXZlL01TXFxuY29ycmVzcG9uZC9TREdcXG5jb3JyZXNwb25kZW5jZS9TTVxcbmNvcnJlc3BvbmRlbnQvU01cXG5jb3JyZXNwb25kaW5nL1lcXG5jb3JyaWRvci9TTVxcbmNvcnJpZS9TXFxuY29ycm9ib3JhdGUvR05WRFNYXFxuY29ycm9ib3JhdGVkL1VcXG5jb3Jyb2JvcmF0aW9uL01cXG5jb3Jyb2JvcmF0b3IvU01cXG5jb3Jyb2JvcmF0b3J5XFxuY29ycm9kZS9HRFNcXG5jb3Jyb3Npb24vTVxcbmNvcnJvc2l2ZS9TTVlcXG5jb3JydWdhdGUvR05YRFNcXG5jb3JydWdhdGlvbi9NXFxuY29ycnVwdC9EUllQU1RHXFxuY29ycnVwdGliaWxpdHkvSU1cXG5jb3JydXB0aWJsZS9JXFxuY29ycnVwdGlvbi9NU1xcbmNvcnJ1cHRuZXNzL01cXG5jb3JzYWdlL01TXFxuY29yc2Fpci9NU1xcbmNvcnNldC9TR01EXFxuY29ydGVnZS9NU1xcbmNvcnRleC9NXFxuY29ydGljYWxcXG5jb3J0aWNlc1xcbmNvcnRpc29sXFxuY29ydGlzb25lL01cXG5jb3J1bmR1bS9NXFxuY29ydXNjYXRlL0dORFNcXG5jb3J1c2NhdGlvbi9NXFxuY29ydmV0dGUvU01cXG5jb3MvTVxcbmNvc2gvRFNHXFxuY29zaWduL1pHU0RSXFxuY29zaWduYXRvcnkvU01cXG5jb3NpZ25lci9NXFxuY29zaW5lL1NNXFxuY29zbWV0aWMvU01cXG5jb3NtZXRpY2FsbHlcXG5jb3NtZXRpY2lhbi9NU1xcbmNvc21ldG9sb2dpc3QvTVNcXG5jb3NtZXRvbG9neS9NXFxuY29zbWljXFxuY29zbWljYWxseVxcbmNvc21vZ29uaXN0L1NNXFxuY29zbW9nb255L1NNXFxuY29zbW9sb2dpY2FsXFxuY29zbW9sb2dpc3QvU01cXG5jb3Ntb2xvZ3kvU01cXG5jb3Ntb25hdXQvU01cXG5jb3Ntb3BvbGl0YW4vTVNcXG5jb3Ntb3BvbGl0YW5pc20vTVxcbmNvc21vcy9NU1xcbmNvc3BsYXlcXG5jb3Nwb25zb3IvR1NNRFxcbmNvc3NldC9TR0RcXG5jb3NzZXR0ZWRcXG5jb3NzZXR0aW5nXFxuY29zdC9NRFlHU0pcXG5jb3N0YXIvU01cXG5jb3N0YXJyZWRcXG5jb3N0YXJyaW5nXFxuY29zdGxpbmVzcy9NXFxuY29zdGx5L1BUUlxcbmNvc3R1bWUvTVpHRFJTXFxuY29zdHVtZXIvTVxcbmNvc3R1bWllci9TXFxuY290L1NNXFxuY290YW5nZW50L01TXFxuY290ZS9NU1xcbmNvdGVyaWUvTVNcXG5jb3Rlcm1pbm91c1xcbmNvdGlsbGlvbi9TTVxcbmNvdHRhZ2UvTVpHUlNcXG5jb3R0YWdlci9NXFxuY290dGFyL1NNXFxuY290dGVyL1NNXFxuY290dG9uL1NHTURcXG5jb3R0b25tb3V0aC9NXFxuY290dG9ubW91dGhzXFxuY290dG9uc2VlZC9NU1xcbmNvdHRvbnRhaWwvTVNcXG5jb3R0b253b29kL1NNXFxuY290dG9ueVxcbmNvdHlsZWRvbi9NU1xcbmNvdWNoL01EU0dcXG5jb3VjaGV0dGUvU1xcbmNvdWdhci9TTVxcbmNvdWdoL01ER1xcbmNvdWdoc1xcbmNvdWxkXFxuY291bGQndmVcXG5jb3VsZG4ndFxcbmNvdWxlZS9TTVxcbmNvdWxpc1xcbmNvdWxvbWIvTVNcXG5jb3VuY2lsL01TXFxuY291bmNpbG1hbi9NXFxuY291bmNpbG1lblxcbmNvdW5jaWxvci9NU1xcbmNvdW5jaWxwZXJzb24vU01cXG5jb3VuY2lsd29tYW4vTVxcbmNvdW5jaWx3b21lblxcbmNvdW5zZWwvSk1ER1NcXG5jb3Vuc2Vsb3IvTVNcXG5jb3VudC9FQVNNREdcXG5jb3VudGFibGUvVVxcbmNvdW50YWJseVxcbmNvdW50ZG93bi9NU1xcbmNvdW50ZWQvVVxcbmNvdW50ZW5hbmNlJ3NcXG5jb3VudGVuYW5jZS9FR0RTXFxuY291bnRlci9FTVNcXG5jb3VudGVyYWN0L1NHVkRcXG5jb3VudGVyYWN0aW9uL01TXFxuY291bnRlcmFyZ3VtZW50L1NcXG5jb3VudGVyYXR0YWNrL0dNRFNcXG5jb3VudGVyYmFsYW5jZS9NR0RTXFxuY291bnRlcmJsYXN0L1NcXG5jb3VudGVyY2xhaW0vR1NNRFxcbmNvdW50ZXJjbG9ja3dpc2VcXG5jb3VudGVyY3VsdHVyZS9TTVxcbmNvdW50ZXJlZFxcbmNvdW50ZXJlc3Bpb25hZ2UvTVxcbmNvdW50ZXJleGFtcGxlL1NcXG5jb3VudGVyZmFjdHVhbFxcbmNvdW50ZXJmZWl0L1pHTURSU1xcbmNvdW50ZXJmZWl0ZXIvTVxcbmNvdW50ZXJmb2lsL01TXFxuY291bnRlcmluZ1xcbmNvdW50ZXJpbnN1cmdlbmN5L1NNXFxuY291bnRlcmludGVsbGlnZW5jZS9NXFxuY291bnRlcm1hbi9NXFxuY291bnRlcm1hbmQvR01EU1xcbmNvdW50ZXJtZWFzdXJlL1NNXFxuY291bnRlcm1lbG9keS9TXFxuY291bnRlcm1lblxcbmNvdW50ZXJtb3ZlL1NcXG5jb3VudGVyb2ZmZW5zaXZlL1NNXFxuY291bnRlcm9mZmVyL1NNXFxuY291bnRlcnBhbmUvU01cXG5jb3VudGVycGFydC9TTVxcbmNvdW50ZXJwZXRpdGlvblxcbmNvdW50ZXJwb2ludC9NREdTXFxuY291bnRlcnBvaXNlL01HRFNcXG5jb3VudGVycHJvZHVjdGl2ZVxcbmNvdW50ZXJyZXZvbHV0aW9uL1NNXFxuY291bnRlcnJldm9sdXRpb25hcnkvU01cXG5jb3VudGVyc2lnbi9HU01EXFxuY291bnRlcnNpZ25hdHVyZS9NU1xcbmNvdW50ZXJzaW5rL0dTTVxcbmNvdW50ZXJzcHkvU01cXG5jb3VudGVyc3Ryb2tlL1NNXFxuY291bnRlcnN1bmtcXG5jb3VudGVydGVub3IvTVNcXG5jb3VudGVydmFpbC9HU0RcXG5jb3VudGVyd2VpZ2h0L01TXFxuY291bnRlc3MvTVNcXG5jb3VudGxlc3NcXG5jb3VudHJpZmllZFxcbmNvdW50cnkvU01cXG5jb3VudHJ5bWFuL01cXG5jb3VudHJ5bWVuXFxuY291bnRyeXNpZGUvTVNcXG5jb3VudHJ5d2lkZVxcbmNvdW50cnl3b21hbi9NXFxuY291bnRyeXdvbWVuXFxuY291bnR5L1NNXFxuY291bnR5d2lkZVxcbmNvdXAnc1xcbmNvdXAvQVNcXG5jb3VwZS9TTVxcbmNvdXBsZSdzXFxuY291cGxlL1VDR1NEXFxuY291cGxldC9NU1xcbmNvdXBsaW5nL1NNXFxuY291cG9uL1NNXFxuY291cmFnZS9NXFxuY291cmFnZW91cy9ZUFxcbmNvdXJhZ2VvdXNuZXNzL01cXG5jb3VyZ2V0dGUvU1xcbmNvdXJpZXIvTURTR1xcbmNvdXJzZS9FREdNU1xcbmNvdXJzZWJvb2svU1xcbmNvdXJzZXIvTVNcXG5jb3Vyc2V3b3JrXFxuY291cnQvU01EWUdcXG5jb3VydGVvdXMvRVlcXG5jb3VydGVvdXNuZXNzL01cXG5jb3VydGVzYW4vU01cXG5jb3VydGVzeS9FU01cXG5jb3VydGhvdXNlL01TXFxuY291cnRpZXIvU01cXG5jb3VydGxpbmVzcy9NXFxuY291cnRseS9QUlRcXG5jb3VydHJvb20vTVNcXG5jb3VydHNoaXAvTVNcXG5jb3VydHlhcmQvTVNcXG5jb3VzY291cy9NXFxuY291c2luL1NNXFxuY291dHVyZS9NXFxuY291dHVyaWVyL01TXFxuY292YWxlbnRcXG5jb3ZhcmlhbmNlXFxuY292YXJpYW50XFxuY292ZS9NU1xcbmNvdmVuL1NNXFxuY292ZW5hbnQvTURTR1xcbmNvdmVyJ3NcXG5jb3Zlci9BRVVHRFNcXG5jb3ZlcmFnZS9NXFxuY292ZXJhbGwvTVNcXG5jb3ZlcmluZydzXFxuY292ZXJpbmdzXFxuY292ZXJsZXQvTVNcXG5jb3ZlcnQvU1BNWVxcbmNvdmVydG5lc3MvTVxcbmNvdmV0L1NER1xcbmNvdmV0b3VzL1lQXFxuY292ZXRvdXNuZXNzL01cXG5jb3ZleS9TTVxcbmNvdy9aR1NNRFJcXG5jb3dhcmQvU01ZXFxuY293YXJkaWNlL01cXG5jb3dhcmRsaW5lc3MvTVxcbmNvd2JlbGwvTVNcXG5jb3diaXJkL01TXFxuY293Ym95L1NNXFxuY293Y2F0Y2hlci9NU1xcbmNvd2VyL0RHXFxuY293Z2lybC9NU1xcbmNvd2hhbmQvTVNcXG5jb3doZXJkL01TXFxuY293aGlkZS9NU1xcbmNvd2wvTUdTSlxcbmNvd2xpY2svTVNcXG5jb3dsaW5nL01cXG5jb3dtYW4vTVxcbmNvd21lblxcbmNvd29ya2VyL01TXFxuY293cGF0L1NcXG5jb3dwb2tlL01TXFxuY293cG94L01cXG5jb3dwdW5jaGVyL1NNXFxuY293cmllL1NNXFxuY293c2hlZC9TXFxuY293c2xpcC9TTVxcbmNveC9HRFNcXG5jb3hjb21iL01TXFxuY294c3dhaW4vTVNcXG5jb3kvVFBSWVxcbmNveW5lc3MvTVxcbmNveW90ZS9TTVxcbmNveXB1L1NNXFxuY296ZW4vU0RHXFxuY296ZW5hZ2UvTVxcbmNvemlseVxcbmNvemluZXNzL01cXG5jb3p5L1JTTVRQXFxuY3BkXFxuY3BsXFxuY3BzXFxuY3JhYi9NU1xcbmNyYWJiZWRcXG5jcmFiYmVyL1NNXFxuY3JhYmJpbHlcXG5jcmFiYmluZXNzL01cXG5jcmFiYmluZ1xcbmNyYWJieS9QUlRcXG5jcmFiZ3Jhc3MvTVxcbmNyYWJsaWtlXFxuY3JhYndpc2VcXG5jcmFjay9TTURSWVpHSlxcbmNyYWNrZG93bi9NU1xcbmNyYWNrZXIvTVxcbmNyYWNrZXJqYWNrL01TXFxuY3JhY2toZWFkL01TXFxuY3JhY2tsZS9EU0pNR1xcbmNyYWNrbGluZy9NXFxuY3JhY2twb3QvTVNcXG5jcmFja3VwL1NNXFxuY3JhZGxlL0RTTUdcXG5jcmFmdC9TTURHXFxuY3JhZnRpbHlcXG5jcmFmdGluZXNzL01cXG5jcmFmdHNtYW4vTVxcbmNyYWZ0c21hbnNoaXAvTVxcbmNyYWZ0c21lblxcbmNyYWZ0c3Blb3BsZVxcbmNyYWZ0c3dvbWFuL01cXG5jcmFmdHN3b21lblxcbmNyYWZ0eS9SVFBcXG5jcmFnL01TXFxuY3JhZ2dpbmVzcy9NXFxuY3JhZ2d5L1JQVFxcbmNyYW0vU1xcbmNyYW1tZWRcXG5jcmFtbWVyL1NcXG5jcmFtbWluZ1xcbmNyYW1wL1NNREdcXG5jcmFtcGluZy9NXFxuY3JhbXBvbi9TTVxcbmNyYW5iZXJyeS9TTVxcbmNyYW5lL0RTTUdcXG5jcmFuaWFsXFxuY3Jhbml1bS9TTVxcbmNyYW5rL1NNREdcXG5jcmFua2Nhc2UvU01cXG5jcmFua2lseVxcbmNyYW5raW5lc3MvTVxcbmNyYW5rc2hhZnQvTVNcXG5jcmFua3kvUFJUXFxuY3Jhbm55L0RTTVxcbmNyYXAvTVNcXG5jcmFwZS9TTVxcbmNyYXBwZWRcXG5jcmFwcGVyL1NcXG5jcmFwcGllL1JTTVRcXG5jcmFwcGluZ1xcbmNyYXBweVxcbmNyYXBzL01cXG5jcmFwc2hvb3Rlci9NU1xcbmNyYXNoL01EU0dcXG5jcmFzcy9SWVRQXFxuY3Jhc3NuZXNzL01cXG5jcmF0ZS9EUlNNWkdcXG5jcmF0ZXIvTURHXFxuY3JhdmF0L1NNXFxuY3JhdmUvRFNHSlxcbmNyYXZlbi9TTVlQXFxuY3JhdmVubmVzcy9NXFxuY3JhdmluZy9NXFxuY3Jhdy9NU1xcbmNyYXdkYWQvU01cXG5jcmF3bC9TTURSWkdcXG5jcmF3bGVyL01cXG5jcmF3bHNwYWNlL1NNXFxuY3Jhd2x5L1RSU01cXG5jcmF5L1NcXG5jcmF5ZmlzaC9NU1xcbmNyYXlvbGEvU1xcbmNyYXlvbi9HU01EXFxuY3JhemUvRFNNR1xcbmNyYXppbHlcXG5jcmF6aW5lc3MvTVxcbmNyYXp5L1BSU01UXFxuY3JlYWsvU01ER1xcbmNyZWFraWx5XFxuY3JlYWtpbmVzcy9NXFxuY3JlYWt5L1JQVFxcbmNyZWFtL1NNRFJaR1xcbmNyZWFtZXIvTVxcbmNyZWFtZXJ5L1NNXFxuY3JlYW1pbHlcXG5jcmVhbWluZXNzL01cXG5jcmVhbXkvUlBUXFxuY3JlYXNlL0lDR01TRFxcbmNyZWF0ZS9LQURTR05WXFxuY3JlYXRpb24ncy9LXFxuY3JlYXRpb24vQVNNXFxuY3JlYXRpb25pc20vU01cXG5jcmVhdGlvbmlzdC9TTVxcbmNyZWF0aXZlL1NNWVBcXG5jcmVhdGl2ZW5lc3MvTVxcbmNyZWF0aXZpdHkvTVxcbmNyZWF0b3IvTVNcXG5jcmVhdHVyZS9TTVxcbmNyZWNoZS9TTVxcbmNyZWRcXG5jcmVkZW5jZS9NXFxuY3JlZGVudGlhbC9TR01EXFxuY3JlZGVuemEvU01cXG5jcmVkaWJpbGl0eS9JTVxcbmNyZWRpYmxlL0lcXG5jcmVkaWJseS9JXFxuY3JlZGl0L0VHU0JNRFxcbmNyZWRpdGFibHkvRVxcbmNyZWRpdG9yL1NNXFxuY3JlZGl0d29ydGh5L1BcXG5jcmVkby9TTVxcbmNyZWR1bGl0eS9JTVxcbmNyZWR1bG91cy9JWVxcbmNyZWR1bG91c25lc3MvTVxcbmNyZWVkL1NNXFxuY3JlZWsvU01cXG5jcmVlbC9TTVxcbmNyZWVwL1NNUlpHXFxuY3JlZXBlci9NXFxuY3JlZXBpbHlcXG5jcmVlcGluZXNzL01cXG5jcmVlcHkvVFBSXFxuY3JlbWFpbnMvTVxcbmNyZW1hdGUvR05EU1hcXG5jcmVtYXRpb24vTVxcbmNyZW1hdG9yaWFcXG5jcmVtYXRvcml1bS9NU1xcbmNyZW1hdG9yeS9TTVxcbmNyZW1lL1NNXFxuY3JlbmVsYXRlL1hHTkRTXFxuY3JlbmVsYXRpb24vTVxcbmNyZW9sZS9TTVxcbmNyZW9zb3RlL01HRFNcXG5jcmVwZS9TTVxcbmNyZXB0XFxuY3JlcHVzY3VsYXJcXG5jcmVzY2VuZG8vQ1NNXFxuY3Jlc2NlbnQvTVNcXG5jcmVzcy9NXFxuY3Jlc3QvU01ER1xcbmNyZXN0ZmFsbGVuXFxuY3Jlc3RsZXNzXFxuY3JldGFjZW91c1xcbmNyZXRpbi9TTVxcbmNyZXRpbmlzbS9NXFxuY3JldGlub3VzXFxuY3JldG9ubmUvTVxcbmNyZXZhc3NlL1NNXFxuY3JldmljZS9NU1xcbmNyZXcvTURHU1xcbmNyZXdlbC9NXFxuY3Jld2Vsd29yay9NXFxuY3Jld21hbi9NXFxuY3Jld21lblxcbmNyaWIvTVNcXG5jcmliYmFnZS9NXFxuY3JpYmJlZFxcbmNyaWJiZXIvTVNcXG5jcmliYmluZ1xcbmNyaWNrL1NNREdcXG5jcmlja2V0L01SU1pHXFxuY3JpY2tldGVyL01cXG5jcmllci9NXFxuY3Jpa2V5XFxuY3JpbWUvU01cXG5jcmltaW5hbC9NWVNcXG5jcmltaW5hbGl0eS9NXFxuY3JpbWluYWxpemUvQ0dEU1xcbmNyaW1pbm9sb2dpc3QvTVNcXG5jcmltaW5vbG9neS9NXFxuY3JpbXAvU01ER1xcbmNyaW1zb24vU01ER1xcbmNyaW5nZS9EU01HXFxuY3JpbmtsZS9EU01HXFxuY3JpbmtseS9SVFxcbmNyaW5vbGluZS9TTVxcbmNyaXBlc1xcbmNyaXBwbGUvRFJTTVpHXFxuY3JpcHBsZXIvTVxcbmNyaXBwbGV3YXJlXFxuY3JpcHBsaW5nL1lcXG5jcmlzZXNcXG5jcmlzaXMvTVxcbmNyaXNwL1NNRFJZVEdQXFxuY3Jpc3BicmVhZC9TXFxuY3Jpc3BpbmVzcy9NXFxuY3Jpc3BuZXNzL01cXG5jcmlzcHkvUFJUXFxuY3Jpc3Njcm9zcy9HTURTXFxuY3JpdGVyaWFcXG5jcml0ZXJpb24vTVxcbmNyaXRpYy9TTVxcbmNyaXRpY2FsL1VZXFxuY3JpdGljYWxpdHlcXG5jcml0aWNpc20vTVNcXG5jcml0aWNpemUvWkdEUlNcXG5jcml0aWNpemVyL01cXG5jcml0aXF1ZS9NR0RTXFxuY3JpdHRlci9TTVxcbmNyb2FrL1NNREdcXG5jcm9ha3kvUlRcXG5jcm9jaGV0L1NNRFJaR1xcbmNyb2NoZXRlci9NXFxuY3JvY2hldGluZy9NXFxuY3JvY2svU01EXFxuY3JvY2tlcnkvTVxcbmNyb2NvZGlsZS9TTVxcbmNyb2N1cy9NU1xcbmNyb2Z0L1NSWkdcXG5jcm9pc3NhbnQvTVNcXG5jcm9uZS9TTVxcbmNyb255L1NNXFxuY3Jvbnlpc20vTVxcbmNyb29rL1NNREdcXG5jcm9va2VkL1BUUllcXG5jcm9va2VkbmVzcy9NXFxuY3Jvb2tuZWNrL1NNXFxuY3Jvb24vU01EUlpHXFxuY3Jvb25lci9NXFxuY3JvcC9NU1xcbmNyb3BsYW5kL1NNXFxuY3JvcHBlZFxcbmNyb3BwZXIvTVNcXG5jcm9wcGluZ1xcbmNyb3F1ZXQvTVxcbmNyb3F1ZXR0ZS9TTVxcbmNyb3NpZXIvTVNcXG5jcm9zcydzXFxuY3Jvc3MvQVVHVFNEXFxuY3Jvc3NiYXIvU01cXG5jcm9zc2JlYW0vTVNcXG5jcm9zc2JvbmVzL01cXG5jcm9zc2Jvdy9TTVxcbmNyb3NzYm93bWFuL01cXG5jcm9zc2Jvd21lblxcbmNyb3NzYnJlZFxcbmNyb3NzYnJlZWQvU0dNXFxuY3Jvc3NjaGVjay9TTURHXFxuY3Jvc3NjdXJyZW50L01TXFxuY3Jvc3NjdXQvU01cXG5jcm9zc2N1dHRpbmdcXG5jcm9zc2VyXFxuY3Jvc3NmaXJlL01TXFxuY3Jvc3NoYXRjaC9HRFNcXG5jcm9zc2luZy9TTVxcbmNyb3NzbHlcXG5jcm9zc25lc3MvTVxcbmNyb3Nzb3Zlci9NU1xcbmNyb3NzcGF0Y2gvTVNcXG5jcm9zc3BpZWNlL1NNXFxuY3Jvc3Nyb2FkL01TXFxuY3Jvc3Nyb2Fkcy9NXFxuY3Jvc3N0b3duXFxuY3Jvc3N3YWxrL01TXFxuY3Jvc3N3aW5kL01TXFxuY3Jvc3N3aXNlXFxuY3Jvc3N3b3JkL01TXFxuY3JvdGNoL01TXFxuY3JvdGNoZXQvU01cXG5jcm90Y2hldHlcXG5jcm91Y2gvR01EU1xcbmNyb3VwL01cXG5jcm91cGllci9NXFxuY3JvdXB5L1pUUlxcbmNyb3V0b24vTVNcXG5jcm93L01ER1NcXG5jcm93YmFyL01TXFxuY3Jvd2QvU01ER1xcbmNyb3dkZWQvVVxcbmNyb3dkZnVuZC9TREdcXG5jcm93ZmVldFxcbmNyb3dmb290L1NNXFxuY3Jvd24vU01ER1xcbmNyb3duZWQvVVxcbmNydWNpYWwvWVxcbmNydWNpYmxlL1NNXFxuY3J1Y2lmaXgvTVNcXG5jcnVjaWZpeGlvbi9TTVxcbmNydWNpZm9ybS9TTVxcbmNydWNpZnkvRFNHXFxuY3J1ZC9NXFxuY3J1ZGR5L1RSXFxuY3J1ZGUvUk1ZVFBcXG5jcnVkZW5lc3MvTVxcbmNydWRpdGVzL01cXG5jcnVkaXR5L1NNXFxuY3J1ZWwvUllQVFxcbmNydWVsbmVzcy9NXFxuY3J1ZWx0eS9TTVxcbmNydWV0L1NNXFxuY3J1ZnQvU0RcXG5jcnVmdHlcXG5jcnVpc2UvRFJTTVpHXFxuY3J1aXNlci9NXFxuY3J1bGxlci9NU1xcbmNydW1iL1NNRFlHXFxuY3J1bWJsZS9NR0RTXFxuY3J1bWJsaW5lc3MvTVxcbmNydW1ibHkvVFBSXFxuY3J1bWJ5L1RSXFxuY3J1bW1pbmVzcy9NXFxuY3J1bW15L1BUUlxcbmNydW1wZXQvTVNcXG5jcnVtcGxlL01HRFNcXG5jcnVuY2gvR01EUlNcXG5jcnVuY2hpbmVzcy9NXFxuY3J1bmNoeS9UUlBcXG5jcnVwcGVyL01TXFxuY3J1c2FkZS9NWkdEUlNcXG5jcnVzYWRlci9NXFxuY3J1c2UvU01cXG5jcnVzaC9NRFJTWkdcXG5jcnVzaGVyL01cXG5jcnVzaGluZy9ZXFxuY3J1c3QvU01ER1xcbmNydXN0YWNlYW4vU01cXG5jcnVzdGFsXFxuY3J1c3RpbHlcXG5jcnVzdGluZXNzL01cXG5jcnVzdHkvVFJQXFxuY3J1dGNoL01TXFxuY3J1eC9NU1xcbmNyeS9aR0pEUlNNXFxuY3J5YmFieS9TTVxcbmNyeW9nZW5pYy9TXFxuY3J5b2dlbmljcy9NXFxuY3J5b25pY3NcXG5jcnlvc3VyZ2VyeS9NXFxuY3J5cHQvU01cXG5jcnlwdGFuYWx5c2lzXFxuY3J5cHRpY1xcbmNyeXB0aWNhbGx5XFxuY3J5cHRvY3VycmVuY3kvU01cXG5jcnlwdG9ncmFtL1NNXFxuY3J5cHRvZ3JhcGhlci9TTVxcbmNyeXB0b2dyYXBoeS9NXFxuY3J5c3RhbC9TTVxcbmNyeXN0YWxsaW5lXFxuY3J5c3RhbGxpemF0aW9uL01cXG5jcnlzdGFsbGl6ZS9BRFNHXFxuY3J5c3RhbGxvZ3JhcGhpY1xcbmNyeXN0YWxsb2dyYXBoeVxcbmN0XFxuY3RuXFxuY3RyXFxuY3VcXG5jdWIvWkdTTURSXFxuY3ViYnlob2xlL01TXFxuY3ViZS9NU1xcbmN1YmVyL01cXG5jdWJpY1xcbmN1YmljYWxcXG5jdWJpY2xlL01TXFxuY3ViaXNtL01cXG5jdWJpc3QvU01cXG5jdWJpdC9TTVxcbmN1Ym9pZC9TXFxuY3Vja29sZC9NRFNHXFxuY3Vja29sZHJ5L01cXG5jdWNrb28vU01cXG5jdWN1bWJlci9TTVxcbmN1ZC9TTVxcbmN1ZGRsZS9EU01HXFxuY3VkZGx5L1RSXFxuY3VkZ2VsL1NHTURKXFxuY3VlL0RTTUdcXG5jdWZmL01ER1NcXG5jdWlzaW5lL1NNXFxuY3VsaW5hcnlcXG5jdWxsL01ER1NcXG5jdWxtaW5hdGUvWERTR05cXG5jdWxtaW5hdGlvbi9NXFxuY3Vsb3R0ZS9TTVxcbmN1bHBhYmlsaXR5L01cXG5jdWxwYWJsZS9JXFxuY3VscGFibHlcXG5jdWxwcml0L1NNXFxuY3VsdC9NU1xcbmN1bHRpc20vTVxcbmN1bHRpc3QvTVNcXG5jdWx0aXZhYmxlXFxuY3VsdGl2YXIvU01cXG5jdWx0aXZhdGUvQkRTR05cXG5jdWx0aXZhdGVkL1VcXG5jdWx0aXZhdGlvbi9NXFxuY3VsdGl2YXRvci9NU1xcbmN1bHR1cmFsL1lcXG5jdWx0dXJlL01HRFNcXG5jdWx0dXJlZC9VXFxuY3VsdmVydC9NU1xcbmN1bS9TTVxcbmN1bWJlci9TREdcXG5jdW1iZXJzb21lL1BcXG5jdW1iZXJzb21lbmVzcy9NXFxuY3VtYnJvdXNcXG5jdW1pbi9NXFxuY3VtbWVyYnVuZC9NU1xcbmN1bW1pbmdcXG5jdW11bGF0aXZlL1lcXG5jdW11bGlcXG5jdW11bG9uaW1iaVxcbmN1bXVsb25pbWJ1cy9NXFxuY3VtdWx1cy9NXFxuY3VuZWlmb3JtL01cXG5jdW5uaWxpbmd1cy9NXFxuY3VubmluZy9NUllUXFxuY3VudC9NUyFcXG5jdXAvU01cXG5jdXBib2FyZC9TTVxcbmN1cGNha2UvTVNcXG5jdXBmdWwvU01cXG5jdXBpZC9TTVxcbmN1cGlkaXR5L01cXG5jdXBvbGEvU01EXFxuY3VwcGEvU1xcbmN1cHBlZFxcbmN1cHBpbmdcXG5jdXByaWNcXG5jdXIvU01ZXFxuY3VyYWJpbGl0eS9NXFxuY3VyYWNhb1xcbmN1cmFjeS9TTVxcbmN1cmFyZS9NXFxuY3VyYXRlL0RTTUdWXFxuY3VyYXRpdmUvTVNcXG5jdXJhdG9yL0tNU1xcbmN1cmF0b3JpYWxcXG5jdXJiL01ER1NcXG5jdXJiaW5nL01cXG5jdXJic2lkZVxcbmN1cmJzdG9uZS9TTVxcbmN1cmQvTVNcXG5jdXJkbGUvRFNHXFxuY3VyZSdzXFxuY3VyZS9LWkdCRFJTXFxuY3VyZWQvVVxcbmN1cmVyL0tNXFxuY3VyZXR0YWdlL01cXG5jdXJmZXcvU01cXG5jdXJpYS9NXFxuY3VyaWFlXFxuY3VyaWUvU01cXG5jdXJpby9TTVxcbmN1cmlvc2l0eS9TTVxcbmN1cmlvdXMvWVBcXG5jdXJpb3VzbmVzcy9NXFxuY3VyaXVtL01cXG5jdXJsJ3NcXG5jdXJsL1VER1NcXG5jdXJsZXIvU01cXG5jdXJsZXcvU01cXG5jdXJsaWN1ZS9EU01HXFxuY3VybGluZXNzL01cXG5jdXJsaW5nL01cXG5jdXJseS9SUFRcXG5jdXJtdWRnZW9uL01ZU1xcbmN1cnJhbnQvTVNcXG5jdXJyZW5jeS9TTVxcbmN1cnJlbnQnc1xcbmN1cnJlbnQvRkFZXFxuY3VycmVudHNcXG5jdXJyaWN1bGFcXG5jdXJyaWN1bGFyXFxuY3VycmljdWx1bS9NXFxuY3VycnkvRFNNR1xcbmN1cnJ5Y29tYi9TR01EXFxuY3Vyc2UvRFNNR1ZcXG5jdXJzZWQvWVxcbmN1cnNpdmUnc1xcbmN1cnNpdmUvRUFZXFxuY3Vyc29yL1NNXFxuY3Vyc29yaWx5XFxuY3Vyc29yaW5lc3MvTVxcbmN1cnNvcnkvUFxcbmN1cnQvUllUUFxcbmN1cnRhaWwvR0RTTFxcbmN1cnRhaWxtZW50L1NNXFxuY3VydGFpbi9HTURTXFxuY3VydG5lc3MvTVxcbmN1cnRzeS9HRFNNXFxuY3VydmFjZW91cy9QXFxuY3VydmFjZW91c25lc3MvTVxcbmN1cnZhdHVyZS9TTVxcbmN1cnZlL0RTTUdcXG5jdXJ2eS9SVFxcbmN1c2hpb24vTURTR1xcbmN1c2h5L1JUXFxuY3VzcC9NU1xcbmN1c3BpZC9TTVxcbmN1c3BpZG9yL1NNXFxuY3VzcydzXFxuY3Vzcy9GRUdTRFxcbmN1c3NlZC9QWVxcbmN1c3RhcmQvTVNcXG5jdXN0b2RpYWxcXG5jdXN0b2RpYW4vTVNcXG5jdXN0b2RpYW5zaGlwL01cXG5jdXN0b2R5L01cXG5jdXN0b20vU1pNUlxcbmN1c3RvbWFyaWx5XFxuY3VzdG9tYXJ5L1VcXG5jdXN0b21lci9NXFxuY3VzdG9taG91c2UvU01cXG5jdXN0b21pemF0aW9uL01cXG5jdXN0b21pemUvRFNHXFxuY3V0L1RTTVJcXG5jdXRhbmVvdXNcXG5jdXRhd2F5L01TXFxuY3V0YmFjay9NU1xcbmN1dGUvWVBcXG5jdXRlbmVzcy9NXFxuY3V0ZXN5L1RSXFxuY3V0ZXkvU1xcbmN1dGljbGUvTVNcXG5jdXRpZS9TTVxcbmN1dGxhc3MvTVNcXG5jdXRsZXIvU01cXG5jdXRsZXJ5L01cXG5jdXRsZXQvU01cXG5jdXRvZmYvU01cXG5jdXRvdXQvU01cXG5jdXR0ZXIvU01cXG5jdXR0aHJvYXQvU01cXG5jdXR0aW5nL01ZU1xcbmN1dHRsZWZpc2gvTVNcXG5jdXR1cC9TTVxcbmN1dHdvcm0vTVNcXG5jd1xcbmN3dFxcbmN5YW4vTVxcbmN5YW5pZGUvTVxcbmN5YW5vYmFjdGVyaWFcXG5jeWJlcmJ1bGx5L1NNXFxuY3liZXJjYWZlL1NcXG5jeWJlcm5ldGljL1NcXG5jeWJlcm5ldGljcy9NXFxuY3liZXJwdW5rL1NNXFxuY3liZXJzZXhcXG5jeWJlcnNwYWNlL01TXFxuY3lib3JnL1NNXFxuY3ljbGFtZW4vTVNcXG5jeWNsZS9BRFNNR1xcbmN5Y2xpY1xcbmN5Y2xpY2FsL1lcXG5jeWNsaXN0L01TXFxuY3ljbG9tZXRlci9NU1xcbmN5Y2xvbmUvTVNcXG5jeWNsb25pY1xcbmN5Y2xvcGVkaWEvTVNcXG5jeWNsb3Blc1xcbmN5Y2xvcHMvTVxcbmN5Y2xvdHJvbi9NU1xcbmN5Z25ldC9NU1xcbmN5bGluZGVyL01TXFxuY3lsaW5kcmljYWxcXG5jeW1iYWwvTVNcXG5jeW1iYWxpc3QvTVNcXG5jeW5pYy9TTVxcbmN5bmljYWwvWVxcbmN5bmljaXNtL01cXG5jeW5vc3VyZS9NU1xcbmN5cHJlc3MvTVNcXG5jeXN0L01TXFxuY3lzdGljXFxuY3lzdGl0aXNcXG5jeXRva2luZXNcXG5jeXRvbG9naXN0L1NNXFxuY3l0b2xvZ3kvTVxcbmN5dG9wbGFzbS9NXFxuY3l0b3BsYXNtaWNcXG5jeXRvc2luZS9NXFxuY3phci9NU1xcbmN6YXJpbmEvU01cXG5jemFyaXNtXFxuY3phcmlzdC9TTVxcbmQnQXJlenpvL01cXG5kJ0VzdGFpbmcvTVxcbmQvTlhHSlxcbmRCXFxuZGFiL1NNXFxuZGFiYmVkXFxuZGFiYmVyL01TXFxuZGFiYmluZ1xcbmRhYmJsZS9aR0RSU1xcbmRhYmJsZXIvTVxcbmRhY2UvU01cXG5kYWNoYS9NU1xcbmRhY2hzaHVuZC9NU1xcbmRhY3R5bC9NU1xcbmRhY3R5bGljL01TXFxuZGFkL1NNXFxuZGFkYWlzbS9NXFxuZGFkYWlzdC9NU1xcbmRhZGR5L1NNXFxuZGFkby9NXFxuZGFkb2VzXFxuZGFlbW9uL01TXFxuZGFlbW9uaWNcXG5kYWZmaW5lc3MvTVxcbmRhZmZvZGlsL1NNXFxuZGFmZnkvUFRSXFxuZGFmdC9QVFJZXFxuZGFmdG5lc3MvTVxcbmRhZy9TXFxuZGFnZ2VyL01TXFxuZGFnby9TXFxuZGFnb2VzXFxuZGFndWVycmVvdHlwZS9EU01HXFxuZGFobGlhL01TXFxuZGFpbGluZXNzL01cXG5kYWlseS9QU01cXG5kYWludGlseVxcbmRhaW50aW5lc3MvTVxcbmRhaW50eS9SU01UUFxcbmRhaXF1aXJpL01TXFxuZGFpcnkvR1NNXFxuZGFpcnlpbmcvTVxcbmRhaXJ5bWFpZC9NU1xcbmRhaXJ5bWFuL01cXG5kYWlyeW1lblxcbmRhaXJ5d29tYW4vTVxcbmRhaXJ5d29tZW5cXG5kYWlzL01TXFxuZGFpc3kvU01cXG5kYWxlL1NNXFxuZGFsbGlhbmNlL01TXFxuZGFsbGllci9NXFxuZGFsbHkvWkdEUlNcXG5kYWxtYXRpYW4vTVNcXG5kYW0vU01cXG5kYW1hZ2UvTUdEU1xcbmRhbWFnZWFibGVcXG5kYW1hZ2VkL1VcXG5kYW1hZ2VzL01cXG5kYW1hc2svTURHU1xcbmRhbWUvU01cXG5kYW1tZWRcXG5kYW1taW5nXFxuZGFtbWl0XFxuZGFtbi9TQkdNRFxcbmRhbW5hYmx5XFxuZGFtbmF0aW9uL01cXG5kYW1uZWQvVFxcbmRhbXAvU1BYWlRHTUROUllcXG5kYW1wZW4vWkdEUlxcbmRhbXBlbmVyL01cXG5kYW1wZXIvTVxcbmRhbXBuZXNzL01cXG5kYW1zZWwvTVNcXG5kYW1zZWxmbHkvU01cXG5kYW1zb24vTVNcXG5kYW5jZS9NWkdEUlNcXG5kYW5jZXIvTVxcbmRhbmNpbmcvTVxcbmRhbmRlbGlvbi9TTVxcbmRhbmRlci9NXFxuZGFuZGlmeS9HRFNcXG5kYW5kbGUvR0RTXFxuZGFuZHJ1ZmYvTVxcbmRhbmR5L1RSU01cXG5kYW5nL1NaR0RSXFxuZGFuZ2VyL01cXG5kYW5nZXJvdXMvWVxcbmRhbmdsZS9aR0RSU1xcbmRhbmdsZXIvTVxcbmRhbmlzaC9NU1xcbmRhbmsvUFRSWVxcbmRhbmtuZXNzL01cXG5kYW5zZXVzZS9NU1xcbmRhcHBlci9UUlxcbmRhcHBsZS9NR0RTXFxuZGFyZS9EUlNNWkdcXG5kYXJlZGV2aWwvTVNcXG5kYXJlZGV2aWxyeS9NXFxuZGFyZXIvTVxcbmRhcmVzYXlcXG5kYXJpbmcvTVlcXG5kYXJrL1BYVE1OUllcXG5kYXJrZW4vWkdEUlxcbmRhcmtlbmVyL01cXG5kYXJraWUvU1xcbmRhcmtuZXNzL01cXG5kYXJrcm9vbS9NU1xcbmRhcmxpbmcvTVNcXG5kYXJuL1NaR01EUlxcbmRhcm5lZC9UUlxcbmRhcm5lci9NXFxuZGFydC9TWkdNRFJcXG5kYXJ0Ym9hcmQvTVNcXG5kYXJ0ZXIvTVxcbmRhc2gvWkdNRFJTXFxuZGFzaGJvYXJkL1NNXFxuZGFzaGVyL01cXG5kYXNoaWtpL01TXFxuZGFzaGluZy9ZXFxuZGFzdGFyZC9NWVNcXG5kYXN0YXJkbGluZXNzL01cXG5kYXRhXFxuZGF0YWJhc2UvU01cXG5kYXRhc2V0L01TXFxuZGF0YXR5cGVcXG5kYXRlL0RSU01aR1ZcXG5kYXRlYm9vay9TXFxuZGF0ZWQvVVxcbmRhdGVsZXNzXFxuZGF0ZWxpbmUvTUdEU1xcbmRhdGVyL01cXG5kYXRlc2V0XFxuZGF0aXZlL01TXFxuZGF0dW0vTVxcbmRhdWIvU1pHTURSXFxuZGF1YmVyL01cXG5kYXVnaHRlci9TTVlcXG5kYXVudC9HRFNcXG5kYXVudGluZy9ZXFxuZGF1bnRsZXNzL1lQXFxuZGF1bnRsZXNzbmVzcy9NXFxuZGF1cGhpbi9NU1xcbmRhdmVucG9ydC9NU1xcbmRhdml0L01TXFxuZGF3ZGxlL1pHRFJTXFxuZGF3ZGxlci9NXFxuZGF3bi9TR01EXFxuZGF5L1NNXFxuZGF5YmVkL01TXFxuZGF5YnJlYWsvTVxcbmRheWNhcmUvTVxcbmRheWRyZWFtL01EUlpHU1xcbmRheWRyZWFtZXIvTVxcbmRheWxpZ2h0L01TXFxuZGF5bGlnaHRzL01cXG5kYXlsb25nXFxuZGF5dGltZS9NXFxuZGF6ZS9EU01HXFxuZGF6ZWQvWVxcbmRhenpsZS9NWkdEUlNcXG5kYXp6bGVyL01cXG5kYXp6bGluZy9ZXFxuZGJcXG5kYmxcXG5kY1xcbmRkL1NER1xcbmRkZWQvS1xcbmRkaW5nL0tcXG5kZWFjb24vTVNcXG5kZWFjb25lc3MvTVNcXG5kZWFkL1hUTU5SWVxcbmRlYWRiZWF0L01TXFxuZGVhZGJvbHQvU01cXG5kZWFkZW4vR0RcXG5kZWFkaGVhZC9TREdcXG5kZWFkbGluZS9TTVxcbmRlYWRsaW5lc3MvTVxcbmRlYWRsb2NrL0dTTURcXG5kZWFkbHkvVFBSXFxuZGVhZHBhbi9NU1xcbmRlYWRwYW5uZWRcXG5kZWFkcGFubmluZ1xcbmRlYWR3b29kL01cXG5kZWFmL1BYVE5SXFxuZGVhZmVuL0dEXFxuZGVhZmVuaW5nL1lcXG5kZWFmbmVzcy9NXFxuZGVhbC9TSlpHTVJcXG5kZWFsZXIvTVxcbmRlYWxlcnNoaXAvU01cXG5kZWFsaW5nL01cXG5kZWFsdFxcbmRlYW4vTVxcbmRlYW5lcnkvU01cXG5kZWFuc2hpcC9NXFxuZGVhci9TUFRNUllIXFxuZGVhcmVzdC9TXFxuZGVhcm5lc3MvTVxcbmRlYXJ0aC9NXFxuZGVhcnRoc1xcbmRlYXJ5L1NNXFxuZGVhdGgvTVlcXG5kZWF0aGJlZC9TTVxcbmRlYXRoYmxvdy9NU1xcbmRlYXRobGVzcy9ZXFxuZGVhdGhsaWtlXFxuZGVhdGhzXFxuZGVhdGh0cmFwL01TXFxuZGVhdGh3YXRjaC9NU1xcbmRlYXZlc1xcbmRlYi9TTVxcbmRlYmFjbGUvTVNcXG5kZWJhcmthdGlvbi9NXFxuZGViYXJtZW50L01cXG5kZWJhdGUvQk1aUlxcbmRlYmF0ZXIvTVxcbmRlYmF0aW5nL01cXG5kZWJhdWNoL01EU0dcXG5kZWJhdWNoZWUvTVNcXG5kZWJhdWNoZXJ5L1NNXFxuZGViZW50dXJlL01TXFxuZGViaWxpdGF0ZS9EU0dOXFxuZGViaWxpdGF0aW9uL01cXG5kZWJpbGl0eS9TTVxcbmRlYml0L0RcXG5kZWJvbmFpci9QWVxcbmRlYm9uYWlybmVzcy9NXFxuZGVib3VjaC9HRFNcXG5kZWJyaWRlbWVudFxcbmRlYnJpcy9NXFxuZGVidC9TTVxcbmRlYnRvci9NU1xcbmRlYnVnZ2VyL1NcXG5kZWJ1dC9HTURcXG5kZWJ1dGFudGUvU01cXG5kZWNhZGUvTVNcXG5kZWNhZGVuY2UvTVxcbmRlY2FkZW5jeS9NXFxuZGVjYWRlbnQvTVlTXFxuZGVjYWYvTVNcXG5kZWNhZmZlaW5hdGUvRFNHXFxuZGVjYWdvbi9NU1xcbmRlY2FsL01TXFxuZGVjYW1wbWVudC9NXFxuZGVjYXBpdGF0ZS9YR05EU1xcbmRlY2FwaXRhdG9yL01TXFxuZGVjYXRobGV0ZS9TXFxuZGVjYXRobG9uL1NNXFxuZGVjYXkvR0RcXG5kZWNlYXNlZC9NXFxuZGVjZWRlbnQvTVNcXG5kZWNlaXQvTVNcXG5kZWNlaXRmdWwvWVBcXG5kZWNlaXRmdWxuZXNzL01cXG5kZWNlaXZlL1VHRFNcXG5kZWNlaXZlci9NU1xcbmRlY2VpdmluZy9ZXFxuZGVjZWxlcmF0ZS9HTkRTXFxuZGVjZWxlcmF0aW9uL01cXG5kZWNlbGVyYXRvci9TTVxcbmRlY2VuY3kvSVNNXFxuZGVjZW5uaWFsL1NNXFxuZGVjZW50L0lZXFxuZGVjZXB0aW9uL01TXFxuZGVjZXB0aXZlL1lQXFxuZGVjZXB0aXZlbmVzcy9NXFxuZGVjaWJlbC9NU1xcbmRlY2lkYWJsZS9VXFxuZGVjaWRlL0JaR0RSU1xcbmRlY2lkZWQvWVxcbmRlY2lkdW91c1xcbmRlY2lsaXRlci9NU1xcbmRlY2ltYWwvU01cXG5kZWNpbWFsaXphdGlvblxcbmRlY2ltYXRlL0RTR05cXG5kZWNpbWF0aW9uL01cXG5kZWNpbWV0ZXIvTVNcXG5kZWNpcGhlcmFibGUvVUlcXG5kZWNpc2lvbi9JTVxcbmRlY2lzaW9uc1xcbmRlY2lzaXZlL0lQWVxcbmRlY2lzaXZlbmVzcy9JTVxcbmRlY2svU0dNRFxcbmRlY2tjaGFpci9TXFxuZGVja2hhbmQvU01cXG5kZWNrbGUvU1xcbmRlY2xhbWF0aW9uL01TXFxuZGVjbGFtYXRvcnlcXG5kZWNsYXJhdGlvbi9NU1xcbmRlY2xhcmF0aXZlXFxuZGVjbGFyYXRvcnlcXG5kZWNsYXJlL0RSU1pHQlxcbmRlY2xhcmVkL1VcXG5kZWNsYXJlci9NXFxuZGVjbGVuc2lvbi9TTVxcbmRlY2xpbmF0aW9uL01cXG5kZWNsaW5lL0RSU01aR1xcbmRlY2xpbmVyL01cXG5kZWNsaXZpdHkvU01cXG5kZWNvaGVyZW5jZVxcbmRlY29sbGV0YWdlL1NNXFxuZGVjb2xsZXRlXFxuZGVjb25nZXN0YW50L01TXFxuZGVjb25zdHJ1Y3Rpb25pc21cXG5kZWNvci9NU1xcbmRlY29yYXRlL0FHTlZEU1xcbmRlY29yYXRpbmcvTVxcbmRlY29yYXRpb24vQU1cXG5kZWNvcmF0aW9uc1xcbmRlY29yYXRpdmUvWVxcbmRlY29yYXRvci9NU1xcbmRlY29yb3VzL0lZXFxuZGVjb3JvdXNuZXNzL01cXG5kZWNvcnVtL01cXG5kZWNvdXBhZ2UvRFNNR1xcbmRlY295L0dNRFNcXG5kZWNyZWFzaW5nL1lcXG5kZWNyZWUvTURTXFxuZGVjcmVlaW5nXFxuZGVjcmVtZW50L0dEU1xcbmRlY3JlcGl0XFxuZGVjcmVwaXR1ZGUvTVxcbmRlY3JpbWluYWxpemF0aW9uL01cXG5kZWNyeS9HRFNcXG5kZWNyeXB0aW9uXFxuZGVkaWNhdGUvQUdEU1xcbmRlZGljYXRpb24vU01cXG5kZWRpY2F0b3IvU01cXG5kZWRpY2F0b3J5XFxuZGVkdWNlL0dEU1xcbmRlZHVjaWJsZVxcbmRlZHVjdC9HVkRcXG5kZWR1Y3RpYmxlL1NNXFxuZGVkdWN0aW9uL1NNXFxuZGVkdWN0aXZlL1lcXG5kZWVkL0dEXFxuZGVlamF5L01TXFxuZGVlbS9BU0dEXFxuZGVlcC9TUFhUTU5SWVxcbmRlZXBlbi9HRFxcbmRlZXBmYWtlL1NNXFxuZGVlcG5lc3MvTVxcbmRlZXIvTVxcbmRlZXJza2luL01cXG5kZWVyc3RhbGtlci9TXFxuZGVmL1pcXG5kZWZhY2VtZW50L01cXG5kZWZhY2VyL1NNXFxuZGVmYWxjYXRlL0RTWEdOXFxuZGVmYWxjYXRpb24vTVxcbmRlZmFtYXRpb24vTVxcbmRlZmFtYXRvcnlcXG5kZWZhbWUvWkdEUlNcXG5kZWZhbWVyL01cXG5kZWZhdWx0ZXIvU01cXG5kZWZlYXQvTURSWkdTXFxuZGVmZWF0ZWQvVVxcbmRlZmVhdGVyL01cXG5kZWZlYXRpc20vTVxcbmRlZmVhdGlzdC9NU1xcbmRlZmVjYXRlL0dORFNcXG5kZWZlY2F0aW9uL01cXG5kZWZlY3QvTURHVlNcXG5kZWZlY3Rpb24vTVNcXG5kZWZlY3RpdmUvTVBZU1xcbmRlZmVjdGl2ZW5lc3MvTVxcbmRlZmVjdG9yL01TXFxuZGVmZW5kYW50L1NNXFxuZGVmZW5kZWQvVVxcbmRlZmVuZXN0cmF0aW9uL1NcXG5kZWZlbnNlL0RTTUdWXFxuZGVmZW5zZWxlc3MvWVBcXG5kZWZlbnNlbGVzc25lc3MvTVxcbmRlZmVuc2libGUvSVxcbmRlZmVuc2libHkvSVxcbmRlZmVuc2l2ZS9NWVBcXG5kZWZlbnNpdmVuZXNzL01cXG5kZWZlcmVuY2UvTVxcbmRlZmVyZW50aWFsL1lcXG5kZWZlcnJhbC9NU1xcbmRlZmVycmVkXFxuZGVmZXJyaW5nXFxuZGVmZmVyXFxuZGVmZmVzdFxcbmRlZmlhbnQvWVxcbmRlZmlicmlsbGF0aW9uXFxuZGVmaWJyaWxsYXRvci9TXFxuZGVmaWNpZW5jeS9TTVxcbmRlZmljaWVudFxcbmRlZmljaXQvU01cXG5kZWZpbGVtZW50L01cXG5kZWZpbmFibGUvSVVcXG5kZWZpbmUvQUdEU1xcbmRlZmluZWQvVVxcbmRlZmluZXIvTVNcXG5kZWZpbml0ZS9JWVZQXFxuZGVmaW5pdGVuZXNzL0lNXFxuZGVmaW5pdGlvbi9BTVxcbmRlZmluaXRpb25zXFxuZGVmaW5pdGl2ZS9ZXFxuZGVmbGF0ZS9HTkRTXFxuZGVmbGF0aW9uL01cXG5kZWZsYXRpb25hcnlcXG5kZWZsZWN0L0RHVlNcXG5kZWZsZWN0aW9uL01TXFxuZGVmbGVjdG9yL1NNXFxuZGVmb2dnZXIvU01cXG5kZWZvbGlhbnQvU01cXG5kZWZvbGlhdGUvRFNHTlxcbmRlZm9saWF0aW9uL01cXG5kZWZvbGlhdG9yL01TXFxuZGVmb3JtaXR5L1NNXFxuZGVmcmF1ZC9EUlpHU1xcbmRlZnJhdWRlci9NXFxuZGVmcmF5YWwvTVxcbmRlZnJvY2svREdcXG5kZWZyb3N0ZXIvTVNcXG5kZWZ0L1BUUllcXG5kZWZ0bmVzcy9NXFxuZGVmdW5jdFxcbmRlZnkvR0RTXFxuZGVnXFxuZGVnZW5lcmFjeS9NXFxuZGVnZW5lcmF0ZS9NVlxcbmRlZ3JhZGUvQlxcbmRlZ3JlZS9NU1xcbmRlaHlkcmF0b3IvU01cXG5kZWh5ZHJvZ2VuYXNlXFxuZGVpY2VyL01TXFxuZGVpZmljYXRpb24vTVxcbmRlaWZ5L05HRFNcXG5kZWlnbi9HRFNcXG5kZWlzdC9NU1xcbmRlaXN0aWNcXG5kZWl0eS9TTVxcbmRlamVjdC9HRFNcXG5kZWplY3RlZC9ZXFxuZGVqZWN0aW9uL01cXG5kZWxheS9aRFJcXG5kZWxlY3RhYmxlXFxuZGVsZWN0YWJseVxcbmRlbGVjdGF0aW9uL01cXG5kZWxlZ2F0ZS9HRFxcbmRlbGV0ZS9YR05EU1xcbmRlbGV0ZXJpb3VzXFxuZGVsZXRpb24vTVxcbmRlbGZ0L01cXG5kZWxmdHdhcmUvTVxcbmRlbGkvU01cXG5kZWxpYmVyYXRlL1hZVlBcXG5kZWxpYmVyYXRlbmVzcy9NXFxuZGVsaWNhY3kvSVNNXFxuZGVsaWNhdGUvSVlcXG5kZWxpY2F0ZW5lc3MvTVxcbmRlbGljYXRlc3Nlbi9TTVxcbmRlbGljaW91cy9QWVxcbmRlbGljaW91c25lc3MvTVxcbmRlbGlnaHRlZC9ZXFxuZGVsaWdodGZ1bC9ZXFxuZGVsaW1pbmF0b3JcXG5kZWxpbmVhdGUvR05YRFNcXG5kZWxpbmVhdGlvbi9NXFxuZGVsaW5xdWVuY3kvU01cXG5kZWxpbnF1ZW50L1NNWVxcbmRlbGlxdWVzY2UvRFNHXFxuZGVsaXF1ZXNjZW50XFxuZGVsaXJpb3VzL1lQXFxuZGVsaXJpb3VzbmVzcy9NXFxuZGVsaXJpdW0vU01cXG5kZWxpdmVyL0FER1NcXG5kZWxpdmVyYWJsZS9TXFxuZGVsaXZlcmFuY2UvTVxcbmRlbGl2ZXJlZC9VXFxuZGVsaXZlcmVyL1NNXFxuZGVsbC9TTVxcbmRlbHBoaW5pdW0vTVNcXG5kZWx0YS9NU1xcbmRlbHVkZS9HRFNcXG5kZWx1Z2UvTUdEU1xcbmRlbHVzaW9uL01TXFxuZGVsdXNpb25hbFxcbmRlbHVzaXZlL1lcXG5kZWx1eGVcXG5kZWx2ZS9aR0RSU1xcbmRlbHZlci9NXFxuZGVtYWdvZ2ljXFxuZGVtYWdvZ2ljYWxseVxcbmRlbWFnb2d1ZS9TTVxcbmRlbWFnb2d1ZXJ5L01cXG5kZW1hZ29neS9NXFxuZGVtYW5kL0dNRFNcXG5kZW1hbmRpbmcvVVxcbmRlbWFyY2F0ZS9EU0dOWFxcbmRlbWFyY2F0aW9uL01cXG5kZW1lYW4vR0RTXFxuZGVtZWFub3IvTVxcbmRlbWVudGVkL1lcXG5kZW1lbnRpYS9NXFxuZGVtZXNuZS9NU1xcbmRlbWlnb2QvTVNcXG5kZW1pZ29kZGVzcy9NU1xcbmRlbWlqb2huL1NNXFxuZGVtaW1vbmRhaW5lL1NNXFxuZGVtaW1vbmRlL01cXG5kZW1pc2UvTUdEU1xcbmRlbWl0YXNzZS9NU1xcbmRlbW8vR01EXFxuZGVtb2NyYWN5L1NNXFxuZGVtb2NyYXQvTVNcXG5kZW1vY3JhdGljL1VcXG5kZW1vY3JhdGljYWxseVxcbmRlbW9jcmF0aXphdGlvbi9NXFxuZGVtb2NyYXRpemUvR0RTXFxuZGVtb2RlXFxuZGVtb2dyYXBoZXIvU01cXG5kZW1vZ3JhcGhpYy9TTVxcbmRlbW9ncmFwaGljYWxseVxcbmRlbW9ncmFwaGljcy9NXFxuZGVtb2dyYXBoeS9NXFxuZGVtb2xpc2gvRFNHXFxuZGVtb2xpdGlvbi9NU1xcbmRlbW9uL01TXFxuZGVtb25ldGl6YXRpb24vTVxcbmRlbW9uaWFjXFxuZGVtb25pYWNhbC9ZXFxuZGVtb25pY1xcbmRlbW9uaWNhbGx5XFxuZGVtb25pemUvR0RTXFxuZGVtb25vbG9neS9TTVxcbmRlbW9uc3RyYWJpbGl0eVxcbmRlbW9uc3RyYWJsZS9JXFxuZGVtb25zdHJhYmx5XFxuZGVtb25zdHJhdGUvWEdOVkRTXFxuZGVtb25zdHJhdGlvbi9NXFxuZGVtb25zdHJhdGl2ZS9NWVNQXFxuZGVtb25zdHJhdGl2ZW5lc3MvTVxcbmRlbW9uc3RyYXRvci9NU1xcbmRlbW90ZS9HRFxcbmRlbW90aWNcXG5kZW1vdW50XFxuZGVtdWxjZW50L1NNXFxuZGVtdXIvVE1SU1xcbmRlbXVyZS9QWVxcbmRlbXVyZW5lc3MvTVxcbmRlbXVycmFsL1NNXFxuZGVtdXJyZWRcXG5kZW11cnJlci9TTVxcbmRlbXVycmluZ1xcbmRlbi9NXFxuZGVuYXRpb25hbGl6YXRpb25cXG5kZW5hdHVyYXRpb25cXG5kZW5hdHVyZS9ER1xcbmRlbmRyaXRlL1NNXFxuZGVuZ3VlL01cXG5kZW5pYWJpbGl0eVxcbmRlbmlhYmxlL1VcXG5kZW5pYWwvTVNcXG5kZW5pZXIvTVxcbmRlbmlncmF0ZS9EU0dOXFxuZGVuaWdyYXRpb24vTVxcbmRlbmltL01TXFxuZGVuaXRyaWZpY2F0aW9uXFxuZGVuaXplbi9NU1xcbmRlbm9taW5hdGlvbmFsXFxuZGVub3RhdGl2ZVxcbmRlbm91ZW1lbnQvTVNcXG5kZW5vdW5jZS9MRFNHXFxuZGVub3VuY2VtZW50L1NNXFxuZGVuc2UvUFlUUlxcbmRlbnNlbmVzcy9NXFxuZGVuc2l0eS9TTVxcbmRlbnQvSVNHTURcXG5kZW50YWwvWVxcbmRlbnRpZnJpY2UvU01cXG5kZW50aW4vTVxcbmRlbnRpc3QvTVNcXG5kZW50aXN0cnkvTVxcbmRlbnRpdGlvbi9NXFxuZGVudHVyZS9JTVNcXG5kZW51Y2xlYXJpemUvR0RTXFxuZGVudWRhdGlvbi9NXFxuZGVudWRlL0dEU1xcbmRlbnVuY2lhdGlvbi9TTVxcbmRlbnkvWkdEUlNcXG5kZW9kb3JhbnQvU01cXG5kZW9kb3JpemF0aW9uL01cXG5kZW9kb3JpemUvRFJTWkdcXG5kZW9kb3JpemVyL01cXG5kZXBhcnRlZC9NXFxuZGVwYXJ0bWVudC9NU1xcbmRlcGFydG1lbnRhbC9ZXFxuZGVwYXJ0bWVudGFsaXphdGlvbi9NXFxuZGVwYXJ0bWVudGFsaXplL0dEU1xcbmRlcGFydHVyZS9TTVxcbmRlcGVuZGFiaWxpdHkvTVxcbmRlcGVuZGFibGUvVVxcbmRlcGVuZGFibHlcXG5kZXBlbmRlbmNlL0lNXFxuZGVwZW5kZW5jeS9TTVxcbmRlcGVuZGVudC9JTVlTXFxuZGVwaWN0L0dEU1xcbmRlcGljdGlvbi9NU1xcbmRlcGlsYXRvcnkvU01cXG5kZXBsZXRlL0dORFNcXG5kZXBsZXRpb24vTVxcbmRlcGxvcmFibHlcXG5kZXBsb3JlL0JHRFNcXG5kZXBsb3kvQUxHRFNcXG5kZXBsb3ltZW50L0FNXFxuZGVwbG95bWVudHNcXG5kZXBvbmVudC9NU1xcbmRlcG9ydGF0aW9uL01TXFxuZGVwb3J0ZWUvTVNcXG5kZXBvcnRtZW50L01cXG5kZXBvc2l0L0FHTURTXFxuZGVwb3NpdG9yL01TXFxuZGVwb3NpdG9yeS9TTVxcbmRlcHJhdmUvR0RTXFxuZGVwcmF2aXR5L1NNXFxuZGVwcmVjYXRlL0dORFNcXG5kZXByZWNhdGluZy9ZXFxuZGVwcmVjYXRpb24vTVxcbmRlcHJlY2F0b3J5XFxuZGVwcmVjaWF0ZS9EU0dOXFxuZGVwcmVjaWF0aW9uL01cXG5kZXByZWRhdGlvbi9TTVxcbmRlcHJlc3NhbnQvU01cXG5kZXByZXNzaW5nL1lcXG5kZXByZXNzaW9uL1NNXFxuZGVwcmVzc2l2ZS9TTVxcbmRlcHJlc3Nvci9NU1xcbmRlcHJlc3N1cml6YXRpb25cXG5kZXByaXZlL0dEU1xcbmRlcHJvZ3JhbW1pbmdcXG5kZXB0aC9NXFxuZGVwdGhzXFxuZGVwdXRhdGlvbi9NU1xcbmRlcHV0ZS9EU0dcXG5kZXB1dGl6ZS9EU0dcXG5kZXB1dHkvU01cXG5kZXJhaWxsZXVyL1NNXFxuZGVyYWlsbWVudC9TTVxcbmRlcmFuZ2VtZW50L01cXG5kZXJieS9TTVxcbmRlcmVsaWN0L01TXFxuZGVyZWxpY3Rpb24vTVxcbmRlcmlkZS9HRFNcXG5kZXJpc2lvbi9NXFxuZGVyaXNpdmUvUFlcXG5kZXJpc2l2ZW5lc3MvTVxcbmRlcmlzb3J5XFxuZGVyaXZhdGlvbi9NU1xcbmRlcml2YXRpdmUvTVNcXG5kZXJpdmUvQlxcbmRlcm1hbFxcbmRlcm1hdGl0aXMvTVxcbmRlcm1hdG9sb2dpY2FsXFxuZGVybWF0b2xvZ2lzdC9TTVxcbmRlcm1hdG9sb2d5L01cXG5kZXJtaXMvTVxcbmRlcm9nYXRlL0RTR05cXG5kZXJvZ2F0aW9uL01cXG5kZXJvZ2F0b3JpbHlcXG5kZXJvZ2F0b3J5XFxuZGVycmljay9TTVxcbmRlcnJpZXJlL1NNXFxuZGVycmluZ2VyL1NNXFxuZGVydlxcbmRlcnZpc2gvTVNcXG5kZXNhbGluYXRlL0dORFNcXG5kZXNhbGluYXRpb24vTVxcbmRlc2FsaW5pemF0aW9uL01cXG5kZXNhbGluaXplL0dEU1xcbmRlc2NhbnQvTVxcbmRlc2NlbmQvRkdEU1xcbmRlc2NlbmRhbnQvTVNcXG5kZXNjZW5kZXJcXG5kZXNjcmliYWJsZS9JXFxuZGVzY3JpYmUvQlpHRFJcXG5kZXNjcmliZXIvTVxcbmRlc2NyaXB0aW9uL1NNXFxuZGVzY3JpcHRpdmUvUFlcXG5kZXNjcmlwdGl2ZW5lc3MvTVxcbmRlc2NyaXB0b3IvU1xcbmRlc2NyeS9HRFNcXG5kZXNlY3JhdGUvRFNHTlxcbmRlc2VjcmF0aW9uL01cXG5kZXNlbGVjdGlvblxcbmRlc2VydC9TRFJaR01cXG5kZXNlcnRlci9NXFxuZGVzZXJ0aWZpY2F0aW9uXFxuZGVzZXJ0aW9uL1NNXFxuZGVzZXJ2ZWQvVVlcXG5kZXNlcnZpbmcvVVxcbmRlc2ljY2FudC9TTVxcbmRlc2ljY2F0ZS9EU0dOXFxuZGVzaWNjYXRpb24vTVxcbmRlc2ljY2F0b3IvU01cXG5kZXNpZGVyYXRhXFxuZGVzaWRlcmF0dW0vTVxcbmRlc2lnbi9BU0RHXFxuZGVzaWduYXRlL0RTR05YXFxuZGVzaWduYXRpb24vTVxcbmRlc2lyYWJpbGl0eS9VTVxcbmRlc2lyYWJsZW5lc3MvTVxcbmRlc2lyYWJseS9VXFxuZGVzaXJlL0JcXG5kZXNpcmVkL1VcXG5kZXNpcm91c1xcbmRlc2lzdC9TREdcXG5kZXNrL1NNXFxuZGVza2lsbC9HXFxuZGVza3RvcC9TTVxcbmRlc29sYXRlL1BEU1lHTlxcbmRlc29sYXRlbmVzcy9NXFxuZGVzb2xhdGlvbi9NXFxuZGVzcGFpci9TTURHXFxuZGVzcGFpcmluZy9ZXFxuZGVzcGVyYWRvL01cXG5kZXNwZXJhZG9lc1xcbmRlc3BlcmF0ZS9ZTlBcXG5kZXNwZXJhdGVuZXNzL01cXG5kZXNwZXJhdGlvbi9NXFxuZGVzcGljYWJsZVxcbmRlc3BpY2FibHlcXG5kZXNwaXNlL0RTR1xcbmRlc3BpdGVcXG5kZXNwb2lsbWVudC9NXFxuZGVzcG9uZGVuY2UvTVxcbmRlc3BvbmRlbmN5L01cXG5kZXNwb25kZW50L1lcXG5kZXNwb3RpY1xcbmRlc3BvdGljYWxseVxcbmRlc3BvdGlzbS9NXFxuZGVzc2VydC9TTVxcbmRlc3NlcnRzcG9vbi9TXFxuZGVzc2VydHNwb29uZnVsL1NcXG5kZXN0aW5hdGlvbi9TTVxcbmRlc3RpbmUvRFNHXFxuZGVzdGlueS9TTVxcbmRlc3RpdHV0ZS9OXFxuZGVzdGl0dXRpb24vTVxcbmRlc3Ryb3kvU1pHRFJcXG5kZXN0cm95ZXIvTVxcbmRlc3RydWN0L0dWTURTXFxuZGVzdHJ1Y3RpYmlsaXR5L0lNXFxuZGVzdHJ1Y3RpYmxlL0lcXG5kZXN0cnVjdGlvbi9NXFxuZGVzdHJ1Y3RpdmUvUFlcXG5kZXN0cnVjdGl2ZW5lc3MvTVxcbmRlc3VldHVkZS9NXFxuZGVzdWx0b3JpbHlcXG5kZXN1bHRvcnlcXG5kZXRhY2gvQkxHRFNcXG5kZXRhY2htZW50L01TXFxuZGV0YWluL0xHRFNcXG5kZXRhaW5lZS9NU1xcbmRldGFpbm1lbnQvTVxcbmRldGVjdC9TREdWQlxcbmRldGVjdGFibGUvVVxcbmRldGVjdGVkL1VcXG5kZXRlY3Rpb24vTVxcbmRldGVjdGl2ZS9TTVxcbmRldGVjdG9yL1NNXFxuZGV0ZW50ZS9TTU5YXFxuZGV0ZW50aW9uL01cXG5kZXRlci9TTFxcbmRldGVyZ2VudC9TTVxcbmRldGVyaW9yYXRlL0RTR05cXG5kZXRlcmlvcmF0aW9uL01cXG5kZXRlcm1lbnQvTVxcbmRldGVybWluYWJsZS9JXFxuZGV0ZXJtaW5hbnQvU01cXG5kZXRlcm1pbmF0ZVxcbmRldGVybWluZS9BR0RTXFxuZGV0ZXJtaW5lZC9VXFxuZGV0ZXJtaW5lZGx5XFxuZGV0ZXJtaW5lci9TTVxcbmRldGVybWluaXNtL01cXG5kZXRlcm1pbmlzdGljXFxuZGV0ZXJtaW5pc3RpY2FsbHlcXG5kZXRlcnJlZC9VXFxuZGV0ZXJyZW5jZS9NXFxuZGV0ZXJyZW50L01TXFxuZGV0ZXJyaW5nXFxuZGV0ZXN0YWJseVxcbmRldGVzdGF0aW9uL01cXG5kZXRocm9uZS9EU0xHXFxuZGV0aHJvbmVtZW50L01cXG5kZXRvbmF0ZS9HTkRTWFxcbmRldG9uYXRpb24vTVxcbmRldG9uYXRvci9TTVxcbmRldG94L01EU0dcXG5kZXRveGlmaWNhdGlvbi9NXFxuZGV0b3hpZnkvRFNHTlxcbmRldHJhY3QvR0RcXG5kZXRyaW1lbnQvU01cXG5kZXRyaW1lbnRhbC9ZXFxuZGV0cml0dXMvTVxcbmRldWNlL1NNXFxuZGV1dGVyaXVtL01cXG5kZXZhc3RhdGUvR05EU1xcbmRldmFzdGF0aW5nL1lcXG5kZXZhc3RhdGlvbi9NXFxuZGV2YXN0YXRvci9NU1xcbmRldmVsb3AvQVNHRExcXG5kZXZlbG9wZWQvVVxcbmRldmVsb3Blci9TTVxcbmRldmVsb3BtZW50L0FTTVxcbmRldmVsb3BtZW50YWwvWVxcbmRldmlhbmNlL01cXG5kZXZpYW5jeS9NXFxuZGV2aWFudC9TTVxcbmRldmlhdGUvRFNNR05YXFxuZGV2aWF0aW5nL1VcXG5kZXZpYXRpb24vTVxcbmRldmlsL1NNREdMXFxuZGV2aWxpc2gvWVBcXG5kZXZpbGlzaG5lc3MvTVxcbmRldmlsbWVudC9NXFxuZGV2aWxyeS9TTVxcbmRldmlsdHJ5L1NNXFxuZGV2aW91cy9ZUFxcbmRldmlvdXNuZXNzL01cXG5kZXZvaWRcXG5kZXZvbHV0aW9uL01cXG5kZXZvbHZlL0RTR1xcbmRldm90ZWQvWVxcbmRldm90ZWUvU01cXG5kZXZvdGlvbi9NU1xcbmRldm90aW9uYWwvU01cXG5kZXZvdXIvU0RHXFxuZGV2b3V0L1BSWVRcXG5kZXZvdXRuZXNzL01cXG5kZXcvTVxcbmRld2JlcnJ5L1NNXFxuZGV3Y2xhdy9TTVxcbmRld2Ryb3AvU01cXG5kZXdpbmVzcy9NXFxuZGV3bGFwL1NNXFxuZGV3eS9SVFBcXG5kZXh0ZXJpdHkvTVxcbmRleHRlcm91cy9ZUFxcbmRleHRlcm91c25lc3MvTVxcbmRleHRyb3NlL01cXG5kaGFybWFcXG5kaG90aS9TTVxcbmRob3cvTVNcXG5kaWFiZXRlcy9NXFxuZGlhYmV0aWMvU01cXG5kaWFib2xpY1xcbmRpYWJvbGljYWwvWVxcbmRpYWNyaXRpYy9NU1xcbmRpYWNyaXRpY2FsXFxuZGlhZGVtL1NNXFxuZGlhZXJlc2VzXFxuZGlhZXJlc2lzL01cXG5kaWFnbm9zZS9EU0dcXG5kaWFnbm9zaXMvTVxcbmRpYWdub3N0aWMvU1xcbmRpYWdub3N0aWNhbGx5XFxuZGlhZ25vc3RpY2lhbi9TTVxcbmRpYWdub3N0aWNzL01cXG5kaWFnb25hbC9TTVlcXG5kaWFncmFtL1NNXFxuZGlhZ3JhbW1hdGljXFxuZGlhZ3JhbW1hdGljYWxseVxcbmRpYWdyYW1tZWRcXG5kaWFncmFtbWluZ1xcbmRpYWwvQU1ER1NcXG5kaWFsZWN0L1NNXFxuZGlhbGVjdGFsXFxuZGlhbGVjdGljL1NNXFxuZGlhbGVjdGljYWxcXG5kaWFsZWN0aWNzL01cXG5kaWFsaW5nL1NcXG5kaWFsb2dcXG5kaWFsb2d1ZS9TTVxcbmRpYWx5c2VzXFxuZGlhbHlzaXMvTVxcbmRpYWx5emVzXFxuZGlhbVxcbmRpYW1hZ25ldGljXFxuZGlhbWFnbmV0aXNtXFxuZGlhbWFudGVcXG5kaWFtZXRlci9TTVxcbmRpYW1ldHJpY1xcbmRpYW1ldHJpY2FsL1lcXG5kaWFtb25kL1NNXFxuZGlhbW9uZGJhY2svTVNcXG5kaWFwYXNvbi9TTVxcbmRpYXBlci9TTURHXFxuZGlhcGhhbm91c1xcbmRpYXBocmFnbS9TTVxcbmRpYXBocmFnbWF0aWNcXG5kaWFyaXN0L1NNXFxuZGlhcnJoZWEvTVxcbmRpYXJ5L1NNXFxuZGlhc3BvcmEvU01cXG5kaWFzdGFzZS9NXFxuZGlhc3RvbGUvTVxcbmRpYXN0b2xpY1xcbmRpYXRoZXJteS9NXFxuZGlhdG9tL1NNXFxuZGlhdG9taWNcXG5kaWF0b25pY1xcbmRpYXRyaWJlL1NNXFxuZGlhemVwYW1cXG5kaWJibGUvRFNNR1xcbmRpYnMvTVxcbmRpY2UvR0RTXFxuZGljZXMvSVxcbmRpY2V5XFxuZGljaG90b21vdXNcXG5kaWNob3RvbXkvU01cXG5kaWNpZXJcXG5kaWNpZXN0XFxuZGljay9NUlhaU1xcbmRpY2tlci9ER1xcbmRpY2tleS9TTVxcbmRpY2toZWFkL1NcXG5kaWNreWJpcmQvU1xcbmRpY290eWxlZG9uL01TXFxuZGljb3R5bGVkb25vdXNcXG5kaWN0XFxuZGljdGFcXG5kaWN0YXRlL0RTTUdOWFxcbmRpY3RhdGlvbi9NXFxuZGljdGF0b3IvU01cXG5kaWN0YXRvcmlhbC9ZXFxuZGljdGF0b3JzaGlwL1NNXFxuZGljdGlvbi9NXFxuZGljdGlvbmFyeS9TTVxcbmRpY3R1bS9NXFxuZGlkL0FVXFxuZGlkYWN0aWNcXG5kaWRhY3RpY2FsbHlcXG5kaWRkbGUvRFJTWkdcXG5kaWRkbGVyL01cXG5kaWRkbHlcXG5kaWRkbHlzcXVhdFxcbmRpZGR1bXNcXG5kaWRnZXJpZG9vL1NcXG5kaWRuJ3RcXG5kaWRvL01cXG5kaWRvZXNcXG5kaWRzdFxcbmRpZS9EU01cXG5kaWVsZWN0cmljL01TXFxuZGllcmVzZXNcXG5kaWVyZXNpcy9NXFxuZGllc2VsL1NNREdcXG5kaWV0L01EUlpHU1xcbmRpZXRhcnkvU01cXG5kaWV0ZXIvTVxcbmRpZXRldGljL1NcXG5kaWV0ZXRpY3MvTVxcbmRpZXRpdGlhbi9NU1xcbmRpZmYvRFJaR1NcXG5kaWZmZXIvREdcXG5kaWZmZXJlbmNlL0lNXFxuZGlmZmVyZW5jZXNcXG5kaWZmZXJlbnQvSVlcXG5kaWZmZXJlbnRpYWJsZVxcbmRpZmZlcmVudGlhbC9TTVxcbmRpZmZlcmVudGlhdGUvRFNHTlxcbmRpZmZlcmVudGlhdGVkL1VcXG5kaWZmZXJlbnRpYXRpb24vTVxcbmRpZmZpY3VsdC9ZXFxuZGlmZmljdWx0eS9TTVxcbmRpZmZpZGVuY2UvTVxcbmRpZmZpZGVudC9ZXFxuZGlmZnJhY3QvR1NEXFxuZGlmZnJhY3Rpb24vTVxcbmRpZmZ1c2UvRFNZR05WUFxcbmRpZmZ1c2VuZXNzL01cXG5kaWZmdXNpb24vTVxcbmRpZmZ1c2l2aXR5XFxuZGlnL1NNXFxuZGlnZXJhdGkvTVxcbmRpZ2VzdC9TTURHVlxcbmRpZ2VzdGVkL1VcXG5kaWdlc3RpYmlsaXR5L01cXG5kaWdlc3RpYmxlL0lcXG5kaWdlc3Rpb24vSU1cXG5kaWdlc3Rpb25zXFxuZGlnZXN0aXZlL1NcXG5kaWdnZXIvU01cXG5kaWdnaW5nL1NcXG5kaWdnaW5ncy9NXFxuZGlnaWNhbS9TXFxuZGlnaXQvU01cXG5kaWdpdGFsL1lcXG5kaWdpdGFsaXMvTVxcbmRpZ2l0aXphdGlvblxcbmRpZ2l0aXplL0dEU1xcbmRpZ25pZmllZC9VXFxuZGlnbmlmeS9EU0dcXG5kaWduaXRhcnkvU01cXG5kaWduaXR5L0lTTVxcbmRpZ3JhcGgvTVxcbmRpZ3JhcGhzXFxuZGlncmVzcy9HVkRTXFxuZGlncmVzc2lvbi9NU1xcbmRpa2UvTUdEU1xcbmRpa3RhdC9TXFxuZGlsYXBpZGF0ZWRcXG5kaWxhcGlkYXRpb24vTVxcbmRpbGF0YXRpb24vTVxcbmRpbGF0ZS9EU0dOXFxuZGlsYXRpb24vTVxcbmRpbGF0b3IvU01cXG5kaWxhdG9yeVxcbmRpbGRvL1NcXG5kaWxlbW1hL01TXFxuZGlsZXR0YW50ZS9TTVxcbmRpbGV0dGFudGlzaFxcbmRpbGV0dGFudGlzbS9NXFxuZGlsaWdlbmNlL01cXG5kaWxpZ2VudC9ZXFxuZGlsbC9NU1xcbmRpbGx5L1NNXFxuZGlsbHlkYWxseS9EU0dcXG5kaWx1ZW50XFxuZGlsdXRlL0RTR05YXFxuZGlsdXRlZC9VXFxuZGlsdXRpb24vTVxcbmRpbS9QU1JZXFxuZGltZS9NU1xcbmRpbWVuc2lvbi9TTVxcbmRpbWVuc2lvbmFsXFxuZGltZW5zaW9ubGVzc1xcbmRpbWluaXNoL0dEU1xcbmRpbWluaXNoZWQvVVxcbmRpbWludWVuZG8vU01cXG5kaW1pbnV0aW9uL1NNXFxuZGltaW51dGl2ZS9TTVxcbmRpbWl0eS9NXFxuZGltbWVkL1VcXG5kaW1tZXIvU01cXG5kaW1tZXN0XFxuZGltbWluZ1xcbmRpbW5lc3MvTVxcbmRpbXBsZS9EU01HXFxuZGltcGx5XFxuZGltd2l0L1NNXFxuZGltd2l0dGVkXFxuZGluL1pHU01EUlxcbmRpbmFyL1NNXFxuZGluZS9TXFxuZGluZXIvTVxcbmRpbmV0dGUvTVNcXG5kaW5nL01ER1xcbmRpbmdiYXQvTVNcXG5kaW5naHkvU01cXG5kaW5naWx5XFxuZGluZ2luZXNzL01cXG5kaW5nbGUvU01cXG5kaW5nby9NXFxuZGluZ29lc1xcbmRpbmd1cy9NU1xcbmRpbmd5L1JQVFxcbmRpbmsvUlxcbmRpbmt5L1JTTVRcXG5kaW5uZWRcXG5kaW5uZXIvU01ER1xcbmRpbm5lcnRpbWUvTVxcbmRpbm5lcndhcmUvTVxcbmRpbm5pbmdcXG5kaW5vc2F1ci9TTVxcbmRpbnQvTVxcbmRpb2Nlc2FuL01TXFxuZGlvY2VzZS9NU1xcbmRpb2RlL1NNXFxuZGlvcmFtYS9TTVxcbmRpb3hpZGUvU01cXG5kaW94aW4vU01cXG5kaXAvU01cXG5kaXBodGhlcmlhL01cXG5kaXBodGhvbmcvU01cXG5kaXBsb2lkL1NNXFxuZGlwbG9tYS9TTVxcbmRpcGxvbWFjeS9NXFxuZGlwbG9tYXQvTVNcXG5kaXBsb21hdGFcXG5kaXBsb21hdGljL1VcXG5kaXBsb21hdGljYWxseVxcbmRpcGxvbWF0aXN0L01TXFxuZGlwbG9waWFcXG5kaXBvbGUvU01cXG5kaXBwZWRcXG5kaXBwZXIvU01cXG5kaXBwaW5nXFxuZGlwcHkvUlRcXG5kaXBzby9TXFxuZGlwc29tYW5pYS9NXFxuZGlwc29tYW5pYWMvTVNcXG5kaXBzdGljay9TTVxcbmRpcHRlcm91c1xcbmRpcHR5Y2gvTVxcbmRpcHR5Y2hzXFxuZGlyZS9ZVFJcXG5kaXJlY3QvQVNER1ZUXFxuZGlyZWN0ZXJcXG5kaXJlY3Rpb24vSU1cXG5kaXJlY3Rpb25hbFxcbmRpcmVjdGlvbmxlc3NcXG5kaXJlY3Rpb25zXFxuZGlyZWN0aXZlL1NNXFxuZGlyZWN0bHlcXG5kaXJlY3RuZXNzL0lNXFxuZGlyZWN0b3IvTVNcXG5kaXJlY3RvcmF0ZS9TTVxcbmRpcmVjdG9yaWFsXFxuZGlyZWN0b3JzaGlwL1NNXFxuZGlyZWN0b3J5L1NNXFxuZGlyZWZ1bFxcbmRpcmdlL1NNXFxuZGlyaWdpYmxlL01TXFxuZGlyay9NU1xcbmRpcm5kbC9TTVxcbmRpcnQvTVxcbmRpcnRiYWxsL1NcXG5kaXJ0aWx5XFxuZGlydGluZXNzL01cXG5kaXJ0eS9EUlNUR1BcXG5kaXMvTVxcbmRpc2FibGUvRFNHTFxcbmRpc2FibGVtZW50L01cXG5kaXNhbWJpZ3VhdGUvTlxcbmRpc2FwcG9pbnRpbmcvWVxcbmRpc2FybWluZy9ZXFxuZGlzYXNzZW1ibHlcXG5kaXNhc3Ryb3VzL1lcXG5kaXNiYW5kbWVudC9NXFxuZGlzYmFybWVudC9NXFxuZGlzYmVsaWV2aW5nL1lcXG5kaXNidXJzYWwvTVxcbmRpc2J1cnNlL0RTR0xcXG5kaXNidXJzZW1lbnQvTVNcXG5kaXNjL01cXG5kaXNjZXJuL0xTREdcXG5kaXNjZXJuaWJsZS9JXFxuZGlzY2VybmlibHlcXG5kaXNjZXJuaW5nL1lcXG5kaXNjZXJubWVudC9NXFxuZGlzY2hhcmdlZC9VXFxuZGlzY2lwbGUvU01cXG5kaXNjaXBsZXNoaXAvTVxcbmRpc2NpcGxpbmFyaWFuL1NNXFxuZGlzY2lwbGluYXJ5XFxuZGlzY2lwbGluZS9EU01HXFxuZGlzY2lwbGluZWQvVVxcbmRpc2Nsb3NlL0RTR1xcbmRpc2Nsb3NlZC9VXFxuZGlzY28vTUdcXG5kaXNjb2dyYXBoeS9TTVxcbmRpc2NvbG9yYXRpb24vU1xcbmRpc2NvbWJvYnVsYXRlL0RTR05cXG5kaXNjb21ib2J1bGF0aW9uL01cXG5kaXNjb21maXQvREdcXG5kaXNjb21maXR1cmUvTVxcbmRpc2NvbW1vZGUvREdcXG5kaXNjb25jZXJ0aW5nL1lcXG5kaXNjb25uZWN0ZWQvUFlcXG5kaXNjb25uZWN0ZWRuZXNzL01cXG5kaXNjb25zb2xhdGUvWVxcbmRpc2NvcmRhbmNlL01cXG5kaXNjb3JkYW50L1lcXG5kaXNjb3RoZXF1ZS9TTVxcbmRpc2NvdXJhZ2UvTEdEU1xcbmRpc2NvdXJhZ2VtZW50L1NNXFxuZGlzY291cmFnaW5nL1lcXG5kaXNjb3Zlci9BU0RHXFxuZGlzY292ZXJlZC9VXFxuZGlzY292ZXJlci9NU1xcbmRpc2NvdmVyeS9BU01cXG5kaXNjcmVldC9QUllUXFxuZGlzY3JlZXRuZXNzL01cXG5kaXNjcmVwYW5jeS9TTVxcbmRpc2NyZXBhbnRcXG5kaXNjcmV0ZS9QWU5cXG5kaXNjcmV0ZW5lc3MvTVxcbmRpc2NyZXRpb24vSU1cXG5kaXNjcmV0aW9uYXJ5XFxuZGlzY3JpbWluYW50XFxuZGlzY3JpbWluYXRlL0dORFNcXG5kaXNjcmltaW5hdGluZy9VXFxuZGlzY3JpbWluYXRpb24vTVxcbmRpc2NyaW1pbmF0b3IvTVNcXG5kaXNjcmltaW5hdG9yeVxcbmRpc2N1cnNpdmVuZXNzL01cXG5kaXNjdXMvTVNcXG5kaXNjdXNzYW50L1NNXFxuZGlzY3Vzc2lvbi9TTVxcbmRpc2RhaW4vU01ER1xcbmRpc2RhaW5mdWwvWVxcbmRpc2VtYm93ZWwvU0RMR1xcbmRpc2VtYm93ZWxtZW50L01cXG5kaXNmaWd1cmVtZW50L1NNXFxuZGlzZnJhbmNoaXNlbWVudC9NXFxuZGlzZ29yZ2VtZW50L01cXG5kaXNncnVudGxlL0xHRFNcXG5kaXNncnVudGxlbWVudC9NXFxuZGlzZ3Vpc2UvR0RcXG5kaXNndWlzZWQvVVxcbmRpc2d1c3RlZC9ZXFxuZGlzZ3VzdGluZy9ZXFxuZGlzaC9NRFNHXFxuZGlzaGFiaWxsZS9NXFxuZGlzaGFybW9uaW91c1xcbmRpc2hjbG90aC9NXFxuZGlzaGNsb3Roc1xcbmRpc2hlYXJ0ZW5pbmcvWVxcbmRpc2hldmVsL0RHTFNcXG5kaXNoZXZlbG1lbnQvTVxcbmRpc2hwYW4vU01cXG5kaXNocmFnL1NNXFxuZGlzaHRvd2VsL01TXFxuZGlzaHdhcmUvTVxcbmRpc2h3YXNoZXIvTVNcXG5kaXNod2F0ZXIvTVxcbmRpc2h5XFxuZGlzaWxsdXNpb24vR0xEXFxuZGlzaWxsdXNpb25tZW50L01cXG5kaXNpbmZlY3RhbnQvTVNcXG5kaXNpbmZlY3Rpb24vTVxcbmRpc2ludGVyZXN0ZWQvUFlcXG5kaXNpbnRlcmVzdGVkbmVzcy9NXFxuZGlzam9pbnRlZC9ZUFxcbmRpc2pvaW50ZWRuZXNzL01cXG5kaXNqdW5jdGl2ZVxcbmRpc2p1bmN0dXJlXFxuZGlzay9NU1xcbmRpc2tldHRlL01TXFxuZGlzbG9kZ2UvR0RTXFxuZGlzbWFsL1lcXG5kaXNtYW50bGVtZW50L01cXG5kaXNtYXkvU01ER1xcbmRpc21heWVkL1VcXG5kaXNtZW1iZXIvTEdEXFxuZGlzbWVtYmVybWVudC9NXFxuZGlzbWlzc2l2ZS9ZXFxuZGlzb3JkZXIvWVxcbmRpc29yZ2FuaXphdGlvbi9NXFxuZGlzcGFyYWdlL0RTR0xcXG5kaXNwYXJhZ2VtZW50L01cXG5kaXNwYXJhZ2luZy9ZXFxuZGlzcGFyYXRlL1lcXG5kaXNwYXRjaGVyL01TXFxuZGlzcGVsL1NcXG5kaXNwZWxsZWRcXG5kaXNwZWxsaW5nXFxuZGlzcGVuc2FyeS9TTVxcbmRpc3BlbnNhdGlvbi9NU1xcbmRpc3BlbnNlL0JaR0RSU1xcbmRpc3BlbnNlci9NXFxuZGlzcGVyc2FsL01cXG5kaXNwZXJzZS9HTkRTXFxuZGlzcGVyc2lvbi9NXFxuZGlzcGlyaXQvR0RTXFxuZGlzcGxlYXN1cmUvTVxcbmRpc3Bvc2FibGUvU01cXG5kaXNwb3NhbC9TTVxcbmRpc3Bvc2VkL0lcXG5kaXNwb3NpdGlvbi9JU01cXG5kaXNwb3NzZXNzaW9uL01cXG5kaXNwcm9vZi9TTVxcbmRpc3Byb3BvcnRpb25hbFxcbmRpc3Byb3ZlL0JcXG5kaXNwdXRhYmxlL0lcXG5kaXNwdXRhYmx5L0lcXG5kaXNwdXRhbnQvTVNcXG5kaXNwdXRhdGlvbi9TTVxcbmRpc3B1dGF0aW91cy9ZXFxuZGlzcHV0ZS9EUlNNWkdCXFxuZGlzcHV0ZWQvVVxcbmRpc3B1dGVyL01cXG5kaXNxdWlldC9HU01EXFxuZGlzcXVpc2l0aW9uL01TXFxuZGlzcmVnYXJkZnVsXFxuZGlzcmVwYWlyL01cXG5kaXNyZXB1dGUvTUJcXG5kaXNydXB0L0dWU0RcXG5kaXNydXB0aW9uL1NNXFxuZGlzcnVwdGl2ZS9ZXFxuZGlzc2VjdC9TREdcXG5kaXNzZWRcXG5kaXNzZW1ibGFuY2UvTVxcbmRpc3NlbWJsZS9aR0RSU1xcbmRpc3NlbWJsZXIvTVxcbmRpc3NlbWluYXRlL0dORFNcXG5kaXNzZW1pbmF0aW9uL01cXG5kaXNzZW5zaW9uL1NNXFxuZGlzc2VudC9TTURSWkdcXG5kaXNzZW50ZXIvTVxcbmRpc3NlcnRhdGlvbi9TTVxcbmRpc3Nlc1xcbmRpc3NpZGVuY2UvTVxcbmRpc3NpZGVudC9NU1xcbmRpc3NpbWlsYXJcXG5kaXNzaW1pbGl0dWRlL1NcXG5kaXNzaW5nXFxuZGlzc2lwYXRlL0dORFNcXG5kaXNzaXBhdGlvbi9NXFxuZGlzc29jaWF0ZS9HTlZEU1xcbmRpc3NvY2lhdGlvbi9NXFxuZGlzc29sdWJsZS9JXFxuZGlzc29sdXRlL1lOUFxcbmRpc3NvbHV0ZW5lc3MvTVxcbmRpc3NvbHZlL0FHRFNcXG5kaXNzb2x2ZWQvVVxcbmRpc3NvbmFuY2UvU01cXG5kaXNzb25hbnRcXG5kaXNzdWFkZS9HRFNcXG5kaXNzdWFzaXZlXFxuZGlzdFxcbmRpc3RhZmYvU01cXG5kaXN0YWwvWVxcbmRpc3RhbmNlL0RTTUdcXG5kaXN0YW50L1lcXG5kaXN0YXN0ZS9TTVxcbmRpc3RlbXBlci9NXFxuZGlzdGVudGlvbi9TTVxcbmRpc3RpbGxhdGUvU01OWFxcbmRpc3RpbGxhdGlvbi9NXFxuZGlzdGlsbGVyeS9TTVxcbmRpc3RpbmN0L0lZVFZQXFxuZGlzdGluY3RlclxcbmRpc3RpbmN0aW9uL1NNXFxuZGlzdGluY3RpdmUvWVBcXG5kaXN0aW5jdGl2ZW5lc3MvTVxcbmRpc3RpbmN0bmVzcy9JTVxcbmRpc3Rpbmd1aXNoL0dEU0JcXG5kaXN0aW5ndWlzaGFibGUvSVxcbmRpc3Rpbmd1aXNoZWQvVVxcbmRpc3RvcnQvR0RSXFxuZGlzdG9ydGlvbi9NU1xcbmRpc3RyYWN0L0RHXFxuZGlzdHJhY3RlZC9ZXFxuZGlzdHJhY3Rpb24vU1xcbmRpc3RyYWl0XFxuZGlzdHJhdWdodFxcbmRpc3RyZXNzL0RHXFxuZGlzdHJlc3NmdWxcXG5kaXN0cmVzc2luZy9ZXFxuZGlzdHJpYnV0ZS9BR05WRFNcXG5kaXN0cmlidXRlZC9VXFxuZGlzdHJpYnV0aW9uL0FNXFxuZGlzdHJpYnV0aW9uYWxcXG5kaXN0cmlidXRpb25zXFxuZGlzdHJpYnV0aXZlL1lcXG5kaXN0cmlidXRvcidzXFxuZGlzdHJpYnV0b3IvQVNcXG5kaXN0cmlidXRvcnNoaXAvU1xcbmRpc3RyaWN0J3NcXG5kaXN0cmljdC9BU1xcbmRpc3R1cmIvWkdTRFJcXG5kaXN0dXJiYW5jZS9TTVxcbmRpc3R1cmJlZC9VXFxuZGlzdHVyYmVyL01cXG5kaXN0dXJiaW5nL1lcXG5kaXN1bmlvbi9NXFxuZGlzeWxsYWJpY1xcbmRpdGNoL01EU0dcXG5kaXRoZXIvU01EUlpHXFxuZGl0aGVyZXIvTVxcbmRpdHJhbnNpdGl2ZVxcbmRpdHN5XFxuZGl0dG8vU01ER1xcbmRpdHR5L1NNXFxuZGl0ei9NU1xcbmRpdXJldGljL01TXFxuZGl1cm5hbC9ZXFxuZGl2XFxuZGl2YS9NU1xcbmRpdmFsZW50XFxuZGl2YW4vU01cXG5kaXZlL01aVEdEUlNcXG5kaXZlci9NXFxuZGl2ZXJnZS9EU0dcXG5kaXZlcmdlbmNlL01TXFxuZGl2ZXJnZW50XFxuZGl2ZXJzZS9YWU5QXFxuZGl2ZXJzZW5lc3MvTVxcbmRpdmVyc2lmaWNhdGlvbi9NXFxuZGl2ZXJzaWZ5L0dORFNcXG5kaXZlcnNpb24vTVxcbmRpdmVyc2lvbmFyeVxcbmRpdmVyc2l0eS9TTVxcbmRpdmVydC9TREdcXG5kaXZlcnRpY3VsaXRpcy9NXFxuZGl2ZXN0L1NMREdcXG5kaXZlc3RpdHVyZS9NU1xcbmRpdmVzdG1lbnQvTVxcbmRpdmlkZS9EUlNNWkdCXFxuZGl2aWRlZC9VXFxuZGl2aWRlbmQvTVNcXG5kaXZpZGVyL01cXG5kaXZpbmF0aW9uL01cXG5kaXZpbmUvRFJTTVlaVEdcXG5kaXZpbmVyL01cXG5kaXZpbmcvTVxcbmRpdmluaXR5L1NNXFxuZGl2aXNpYmlsaXR5L0lNXFxuZGl2aXNpYmxlL0lcXG5kaXZpc2lvbi9NU1xcbmRpdmlzaW9uYWxcXG5kaXZpc2l2ZS9QWVxcbmRpdmlzaXZlbmVzcy9NXFxuZGl2aXNvci9TTVxcbmRpdm9yY2UvRFNMTUdcXG5kaXZvcmNlZS9NU1xcbmRpdm9yY2VtZW50L01TXFxuZGl2b3QvU01cXG5kaXZ1bGdlL0dEU1xcbmRpdnZ5L0RTTUdcXG5kaXhpZWxhbmQvTVxcbmRpenppbHlcXG5kaXp6aW5lc3MvTVxcbmRpenp5L0RSU1BUR1xcbmRqZWxsYWJhL01TXFxuZG8vU0pNUkhaR1xcbmRvYWJsZVxcbmRvYi9TXFxuZG9iYmVkXFxuZG9iYmluL1NNXFxuZG9iYmluZ1xcbmRvYmVybWFuL01TXFxuZG9icm9cXG5kb2MvU01cXG5kb2NlbnQvU01cXG5kb2NpbGUvWVxcbmRvY2lsaXR5L01cXG5kb2NrL01EUlpHU1xcbmRvY2tldC9TTURHXFxuZG9ja2xhbmQvU1xcbmRvY2tzaWRlXFxuZG9ja3dvcmtlci9NU1xcbmRvY2t5YXJkL01TXFxuZG9jdG9yL1NNREdcXG5kb2N0b3JhbFxcbmRvY3RvcmF0ZS9NU1xcbmRvY3RyaW5haXJlL01TXFxuZG9jdHJpbmFsXFxuZG9jdHJpbmUvTVNcXG5kb2N1ZHJhbWEvU01cXG5kb2N1bWVudC9HTURTXFxuZG9jdW1lbnRhcnkvU01cXG5kb2N1bWVudGF0aW9uL1NNXFxuZG9jdW1lbnRlZC9VXFxuZG9kZGVyL1NNREdcXG5kb2RkZXJ5XFxuZG9kZGxlXFxuZG9kZ2UvRFJTTVpHXFxuZG9kZ2VtL1NcXG5kb2RnZXIvTVxcbmRvZGd5L1JUXFxuZG9kby9NU1xcbmRvZS9TTVxcbmRvZXIvTVxcbmRvZXMvQVVcXG5kb2Vza2luL01TXFxuZG9lc24ndFxcbmRvZmYvREdTXFxuZG9nL1NNXFxuZG9nY2FydC9TTVxcbmRvZ2NhdGNoZXIvU01cXG5kb2dlL01TXFxuZG9nZWFyZWRcXG5kb2dmaWdodC9TTVxcbmRvZ2Zpc2gvTVNcXG5kb2dnZWQvUFlcXG5kb2dnZWRuZXNzL01cXG5kb2dnZXJlbC9NXFxuZG9nZ2luZ1xcbmRvZ2dvbmUvVEdSU1xcbmRvZ2d5L1JTTVRcXG5kb2dob3VzZS9TTVxcbmRvZ2llL1NNXFxuZG9nbGVnL1NNXFxuZG9nbGVnZ2VkXFxuZG9nbGVnZ2luZ1xcbmRvZ2xpa2VcXG5kb2dtYS9TTVxcbmRvZ21hdGljXFxuZG9nbWF0aWNhbGx5XFxuZG9nbWF0aXNtL01cXG5kb2dtYXRpc3QvU01cXG5kb2duYXBwZXJcXG5kb2dzYm9keS9TXFxuZG9nc2xlZC9TXFxuZG9ndHJvdC9NU1xcbmRvZ3Ryb3R0ZWRcXG5kb2d0cm90dGluZ1xcbmRvZ3dvb2QvTVNcXG5kb2lseS9TTVxcbmRvaW5nL1VTTVxcbmRvbGRydW1zL01cXG5kb2xlJ3NcXG5kb2xlL0ZHRFNcXG5kb2xlZnVsL1lQXFxuZG9sZWZ1bG5lc3MvTVxcbmRvbGwvTURHU1xcbmRvbGxhci9TTVxcbmRvbGxob3VzZS9TTVxcbmRvbGxvcC9TR01EXFxuZG9sbHkvU01cXG5kb2xtZW4vU01cXG5kb2xvbWl0ZS9NXFxuZG9sb3IvTVxcbmRvbG9yb3VzL1lcXG5kb2xwaGluL01TXFxuZG9sdC9NU1xcbmRvbHRpc2gvWVBcXG5kb2x0aXNobmVzcy9NXFxuZG9tYWluL1NNXFxuZG9tZS9NR0RTXFxuZG9tZXN0aWMvU01cXG5kb21lc3RpY2FsbHlcXG5kb21lc3RpY2F0ZS9EU0dOXFxuZG9tZXN0aWNhdGVkL1VcXG5kb21lc3RpY2F0aW9uL01cXG5kb21lc3RpY2l0eS9NXFxuZG9taWNpbGUvRFNNR1xcbmRvbWljaWxpYXJ5XFxuZG9taW5hbmNlL01cXG5kb21pbmFudC9TTVlcXG5kb21pbmF0ZS9EU0dOXFxuZG9taW5hdGlvbi9NXFxuZG9taW5hdHJpY2VzXFxuZG9taW5hdHJpeC9NXFxuZG9taW5lZXIvU0dEXFxuZG9taW5lZXJpbmcvWVxcbmRvbWluaW9uL1NNXFxuZG9taW5vL01cXG5kb21pbm9lc1xcbmRvbid0XFxuZG9uL1NNXFxuZG9uYS9NU1xcbmRvbmF0ZS9EU1hHTlxcbmRvbmF0aW9uL01cXG5kb25lL0ZBVVxcbmRvbmcvTURHU1xcbmRvbmdsZS9TTVxcbmRvbmtleS9TTVxcbmRvbm5lZFxcbmRvbm5pbmdcXG5kb25uaXNoXFxuZG9ubnlicm9vay9NU1xcbmRvbm9yL1NNXFxuZG9udXRzXFxuZG9vZGFkL1NNXFxuZG9vZGFoXFxuZG9vZGFoc1xcbmRvb2RsZS9EUlNNWkdcXG5kb29kbGVidWcvU01cXG5kb29kbGVyL01cXG5kb29oaWNrZXkvU01cXG5kb29sYWxseVxcbmRvb20vTURHU1xcbmRvb21zYXllci9NU1xcbmRvb21zZGF5L01cXG5kb29tc3Rlci9TXFxuZG9vcidzXFxuZG9vci9JU1xcbmRvb3JiZWxsL01TXFxuZG9vcmphbWIvU1xcbmRvb3JrZWVwZXIvTVNcXG5kb29ya25vYi9NU1xcbmRvb3Jrbm9ja2VyL1NcXG5kb29ybWFuL01cXG5kb29ybWF0L1NNXFxuZG9vcm1lblxcbmRvb3JwbGF0ZS9TTVxcbmRvb3Jwb3N0L1NcXG5kb29yc3RlcC9NU1xcbmRvb3JzdGVwcGVkXFxuZG9vcnN0ZXBwaW5nXFxuZG9vcnN0b3AvTVNcXG5kb29yd2F5L1NNXFxuZG9vcnlhcmQvTVNcXG5kb3BhL01cXG5kb3BhbWluZVxcbmRvcGUvTVpHRFJTXFxuZG9wZXIvTVxcbmRvcGV5XFxuZG9waWVyXFxuZG9waWVzdFxcbmRvcGluZXNzL01cXG5kb3BpbmcvTVxcbmRvcHBlbGdhbmdlci9TXFxuZG9yay9NU1xcbmRvcmt5L1JUXFxuZG9ybS9NUlpTXFxuZG9ybWFuY3kvTVxcbmRvcm1hbnRcXG5kb3JtZXIvTVxcbmRvcm1pY2VcXG5kb3JtaXRvcnkvU01cXG5kb3Jtb3VzZS9NXFxuZG9yc2FsL1lcXG5kb3J5L1NNXFxuZG9zYWdlL1NNXFxuZG9zZS9NR0RTXFxuZG9zaFxcbmRvc2ltZXRlci9TTVxcbmRvc3MvRFJTWkdcXG5kb3NzaG91c2UvU1xcbmRvc3NpZXIvTVNcXG5kb3N0XFxuZG90L1pHU01EUlxcbmRvdGFnZS9NXFxuZG90YXJkL1NNXFxuZG90Y29tL1NNXFxuZG90ZS9TXFxuZG90ZXIvTVxcbmRvdGluZy9ZXFxuZG90dGVkXFxuZG90dGluZ1xcbmRvdHR5L1JUXFxuZG91YmxlJ3NcXG5kb3VibGUvQURTR1xcbmRvdWJsZWhlYWRlci9NU1xcbmRvdWJsZXNwZWFrL01cXG5kb3VibGV0L01TXFxuZG91Ymxvb24vU01cXG5kb3VibHlcXG5kb3VidC9TTURSWkdcXG5kb3VidGVyL01cXG5kb3VidGZ1bC9QWVxcbmRvdWJ0ZnVsbmVzcy9NXFxuZG91YnRpbmcvWVxcbmRvdWJ0bGVzcy9ZXFxuZG91Y2hlL0RTTUdcXG5kb3VnaC9NXFxuZG91Z2hudXQvU01cXG5kb3VnaHR5L1JUXFxuZG91Z2h5L1RSXFxuZG91ci9SWVRQXFxuZG91cm5lc3MvTVxcbmRvdXNlL0RTR1xcbmRvdmUvTVNcXG5kb3ZlY290L1NcXG5kb3ZlY290ZS9TTVxcbmRvdmV0YWlsL01EU0dcXG5kb3Zpc2hcXG5kb3dhZ2VyL01TXFxuZG93ZGlseVxcbmRvd2RpbmVzcy9NXFxuZG93ZHkvUlNQVFxcbmRvd2VsL1NNREdcXG5kb3dlci9TTURHXFxuZG93bi9NRFJaR1NcXG5kb3duYmVhdC9TTVxcbmRvd25jYXN0XFxuZG93bmRyYWZ0L01TXFxuZG93bmVyL01cXG5kb3duZmFsbC9TTU5cXG5kb3duZmllbGRcXG5kb3duZ3JhZGUvRFNNR1xcbmRvd25oZWFydGVkL1BZXFxuZG93bmhlYXJ0ZWRuZXNzL01cXG5kb3duaGlsbC9NU1xcbmRvd25sb2FkL01EQlNHXFxuZG93bm1hcmtldFxcbmRvd25wbGF5L0RTR1xcbmRvd25wb3VyL01TXFxuZG93bnJhbmdlXFxuZG93bnJpZ2h0XFxuZG93bnJpdmVyXFxuZG93bnNjYWxlXFxuZG93bnNoaWZ0L1NHRFxcbmRvd25zaWRlL01TXFxuZG93bnNpemUvR0RTXFxuZG93bnNpemluZy9NXFxuZG93bnNwb3V0L01TXFxuZG93bnN0YWdlXFxuZG93bnN0YWlycy9NXFxuZG93bnN0YXRlL01cXG5kb3duc3RyZWFtXFxuZG93bnN3aW5nL01TXFxuZG93bnRlbXBvXFxuZG93bnRpbWUvTVxcbmRvd250b3duL01cXG5kb3dudHJlbmQvTVNcXG5kb3dudHJvZGRlblxcbmRvd250dXJuL01TXFxuZG93bndhcmQvU1xcbmRvd253aW5kXFxuZG93bnkvUlRcXG5kb3dyeS9TTVxcbmRvd3NlL0RSU1pHXFxuZG93c2VyL01cXG5kb3hvbG9neS9TTVxcbmRveWVuL1NNXFxuZG95ZW5uZS9NU1xcbmRvei9YR0ROU1xcbmRvemUvTVxcbmRvemVuL01IXFxuZG96aWx5XFxuZG96eS9SVFBcXG5kcGlcXG5kcHRcXG5kcmFiL01ZU1BcXG5kcmFiYmVyXFxuZHJhYmJlc3RcXG5kcmFibmVzcy9NXFxuZHJhY2htYS9NU1xcbmRyYWNvbmlhblxcbmRyYWZ0J3NcXG5kcmFmdC9BU0RHXFxuZHJhZnRlZS9TTVxcbmRyYWZ0ZXIvU01cXG5kcmFmdGlseVxcbmRyYWZ0aW5lc3MvTVxcbmRyYWZ0aW5nL01cXG5kcmFmdHNtYW4vTVxcbmRyYWZ0c21hbnNoaXAvTVxcbmRyYWZ0c21lblxcbmRyYWZ0c3dvbWFuL01cXG5kcmFmdHN3b21lblxcbmRyYWZ0eS9SVFBcXG5kcmFnL01TXFxuZHJhZ2dlZFxcbmRyYWdnaW5nXFxuZHJhZ2d5L1RSXFxuZHJhZ25ldC9TTVxcbmRyYWdvbi9TTVxcbmRyYWdvbmZseS9TTVxcbmRyYWdvb24vU01ER1xcbmRyYWdzdGVyL1NcXG5kcmFpbi9TTURSWkdcXG5kcmFpbmFnZS9NXFxuZHJhaW5ib2FyZC9TTVxcbmRyYWluZXIvTVxcbmRyYWlucGlwZS9NU1xcbmRyYWtlL1NNXFxuZHJhbS9NU1xcbmRyYW1hL1NNXFxuZHJhbWF0aWMvU1xcbmRyYW1hdGljYWxseVxcbmRyYW1hdGljcy9NXFxuZHJhbWF0aXN0L1NNXFxuZHJhbWF0aXphdGlvbi9TTVxcbmRyYW1hdGl6ZS9EU0dcXG5kcmFua1xcbmRyYXBlL0RSU01aR1xcbmRyYXBlci9NXFxuZHJhcGVyeS9TTVxcbmRyYXN0aWNcXG5kcmFzdGljYWxseVxcbmRyYXRcXG5kcmF0dGVkXFxuZHJhdWdodGJvYXJkL1NcXG5kcmF3L01SWkdTSlxcbmRyYXdiYWNrL01TXFxuZHJhd2JyaWRnZS9NU1xcbmRyYXdlci9NXFxuZHJhd2luZy9NXFxuZHJhd2wvU01ER1xcbmRyYXduL0FcXG5kcmF3c3RyaW5nL01TXFxuZHJheS9NU1xcbmRyZWFkL1NNREdcXG5kcmVhZGZ1bC9QWVxcbmRyZWFkZnVsbmVzcy9NXFxuZHJlYWRsb2Nrcy9NXFxuZHJlYWRub3VnaHQvTVNcXG5kcmVhbS9TTURSWkdcXG5kcmVhbWJvYXQvTVNcXG5kcmVhbWVkL1VcXG5kcmVhbWVyL01cXG5kcmVhbWlseVxcbmRyZWFtaW5lc3MvTVxcbmRyZWFtbGFuZC9NXFxuZHJlYW1sZXNzXFxuZHJlYW1saWtlXFxuZHJlYW13b3JsZC9TTVxcbmRyZWFteS9SUFRcXG5kcmVhclxcbmRyZWFyaWx5XFxuZHJlYXJpbmVzcy9NXFxuZHJlYXJ5L1JQVFxcbmRyZWRnZS9EUlNNWkdcXG5kcmVkZ2VyL01cXG5kcmVncy9NXFxuZHJlbmNoL0dEU1xcbmRyZXNzL0FVR1NETVxcbmRyZXNzYWdlL01cXG5kcmVzc2VyL01TXFxuZHJlc3NpbmVzcy9NXFxuZHJlc3NpbmcvU01cXG5kcmVzc21ha2VyL1NNXFxuZHJlc3NtYWtpbmcvTVxcbmRyZXNzeS9UUFJcXG5kcmV3L0FcXG5kcmliYmxlL01aR0RSU1xcbmRyaWJibGVyL01cXG5kcmlibGV0L01TXFxuZHJpZXIvTVxcbmRyaWZ0L1NNRFJaR1xcbmRyaWZ0ZXIvTVxcbmRyaWZ0bmV0L1NcXG5kcmlmdHdvb2QvTVxcbmRyaWxsL1NNRFJaR1xcbmRyaWxsZXIvTVxcbmRyaWxsbWFzdGVyL1NNXFxuZHJpbmsvU01SQkpaR1xcbmRyaW5rYWJsZS9VXFxuZHJpbmtlci9NXFxuZHJpcC9NU1xcbmRyaXBwZWRcXG5kcmlwcGluZy9TTVxcbmRyaXBweS9UUlxcbmRyaXZlL1JTTVpHSlxcbmRyaXZlbC9TWkdNRFJcXG5kcml2ZWxlci9NXFxuZHJpdmVuXFxuZHJpdmVyL01cXG5kcml2ZXNoYWZ0L1NNXFxuZHJpdmV3YXkvTVNcXG5kcml6emxlL01HRFNcXG5kcml6emx5XFxuZHJvZ3VlL1NNXFxuZHJvaWQvU1xcbmRyb2xsL1JQVFxcbmRyb2xsZXJ5L1NNXFxuZHJvbGxuZXNzL01cXG5kcm9sbHlcXG5kcm9tZWRhcnkvU01cXG5kcm9uZS9EU01HXFxuZHJvb2wvU01ER1xcbmRyb29wL0dTTURcXG5kcm9vcGluZXNzL01cXG5kcm9vcHkvVFBSXFxuZHJvcC9NU1xcbmRyb3BraWNrL01TXFxuZHJvcGxldC9TTVxcbmRyb3BvdXQvU01cXG5kcm9wcGVkXFxuZHJvcHBlci9TTVxcbmRyb3BwaW5nL1NcXG5kcm9wcGluZ3MvTVxcbmRyb3BzaWNhbFxcbmRyb3BzeS9NXFxuZHJvc3MvTVxcbmRyb3VnaHQvU01cXG5kcm92ZS9SU01aXFxuZHJvdmVyL01cXG5kcm93bi9HU0pEXFxuZHJvd25pbmcvTVxcbmRyb3dzZS9NR0RTXFxuZHJvd3NpbHlcXG5kcm93c2luZXNzL01cXG5kcm93c3kvUlRQXFxuZHJ1Yi9TXFxuZHJ1YmJlZFxcbmRydWJiZXIvU01cXG5kcnViYmluZy9NU1xcbmRydWRnZS9NR0RTXFxuZHJ1ZGdlcnkvTVxcbmRydWcvTVNcXG5kcnVnZ2VkXFxuZHJ1Z2dpZS9TTVxcbmRydWdnaW5nXFxuZHJ1Z2dpc3QvU01cXG5kcnVnZ3lcXG5kcnVnc3RvcmUvTVNcXG5kcnVpZC9TTVxcbmRydWlkaXNtL01cXG5kcnVtL01TXFxuZHJ1bWJlYXQvU01cXG5kcnVtbGluL1NNXFxuZHJ1bW1lZFxcbmRydW1tZXIvU01cXG5kcnVtbWluZ1xcbmRydW1zdGljay9TTVxcbmRydW5rL1NUTU5SXFxuZHJ1bmthcmQvTVNcXG5kcnVua2VuL1BZXFxuZHJ1bmtlbm5lc3MvTVxcbmRydXBlL1NNXFxuZHJ1dGhlcnMvTVxcbmRyeS9aVEdEUlNNWVxcbmRyeWFkL1NNXFxuZHJ5ZXIvU01cXG5kcnluZXNzL01cXG5kcnlzXFxuZHJ5d2FsbC9NXFxuZHVhbFxcbmR1YWxpc20vTVxcbmR1YWxpdHkvTVxcbmR1Yi9TTVxcbmR1YmJlZFxcbmR1YmJlci9TTVxcbmR1YmJpbi9NXFxuZHViYmluZ1xcbmR1YmlldHkvTVxcbmR1YmlvdXMvWVBcXG5kdWJpb3VzbmVzcy9NXFxuZHVjYWxcXG5kdWNhdC9TTVxcbmR1Y2hlc3MvTVNcXG5kdWNoeS9TTVxcbmR1Y2svTURHU1xcbmR1Y2tiaWxsL1NNXFxuZHVja2JvYXJkc1xcbmR1Y2tsaW5nL1NNXFxuZHVja3BpbnMvTVxcbmR1Y2t3ZWVkL01cXG5kdWNreS9UUlNNXFxuZHVjdCdzL0tcXG5kdWN0L0NLSUZTXFxuZHVjdGlsZVxcbmR1Y3RpbGl0eS9NXFxuZHVjdGluZ1xcbmR1Y3RsZXNzXFxuZHVkL0dTTURcXG5kdWRlL01TXFxuZHVkZ2Vvbi9NXFxuZHVlL1NNXFxuZHVlbC9NRFJKWkdTXFxuZHVlbGVyL01cXG5kdWVsaXN0L1NNXFxuZHVlbm5hL01TXFxuZHVldC9NU1xcbmR1ZmYvTURSWkdTXFxuZHVmZmVyL01cXG5kdWdcXG5kdWdvdXQvTVNcXG5kdWhcXG5kdWtlL01TXFxuZHVrZWRvbS9TTVxcbmR1bGNldFxcbmR1bGNpbWVyL01TXFxuZHVsbC9EUlBUR1NcXG5kdWxsYXJkL1NNXFxuZHVsbG5lc3MvTVxcbmR1bGx5XFxuZHVseS9VXFxuZHVtYi9SWVBUXFxuZHVtYmJlbGwvU01cXG5kdW1iZm91bmQvU0RHXFxuZHVtYm5lc3MvTVxcbmR1bWJvL1NcXG5kdW1ic3RydWNrXFxuZHVtYndhaXRlci9TTVxcbmR1bWR1bS9NU1xcbmR1bW15L1NNXFxuZHVtcC9NRFJaR1NcXG5kdW1waW5lc3MvTVxcbmR1bXBsaW5nL1NNXFxuZHVtcHNpdGUvU1xcbmR1bXBzdGVyL1NNXFxuZHVtcHkvUFRSXFxuZHVuL1NNXFxuZHVuY2UvU01cXG5kdW5kZXJoZWFkL01TXFxuZHVuZS9NU1xcbmR1bmcvTURHU1xcbmR1bmdhcmVlL01TXFxuZHVuZ2Vvbi9TTVxcbmR1bmdoaWxsL01TXFxuZHVuay9NREdTXFxuZHVubmVkXFxuZHVubmVyXFxuZHVubmVzdFxcbmR1bm5pbmdcXG5kdW5ub1xcbmR1by9TTVxcbmR1b2RlY2ltYWxcXG5kdW9kZW5hXFxuZHVvZGVuYWxcXG5kdW9kZW51bS9NXFxuZHVvcG9seS9TXFxuZHVwZS9NWkdEUlNcXG5kdXBlci9NXFxuZHVwbGVcXG5kdXBsZXgvTVNcXG5kdXBsaWNhdGUnc1xcbmR1cGxpY2F0ZS9BR05EU1xcbmR1cGxpY2F0aW9uL0FNXFxuZHVwbGljYXRvci9NU1xcbmR1cGxpY2l0b3VzXFxuZHVwbGljaXR5L01cXG5kdXJhYmlsaXR5L01cXG5kdXJhYmxlXFxuZHVyYWJseVxcbmR1cmFuY2UvTVxcbmR1cmF0aW9uL01cXG5kdXJlc3MvTVxcbmR1cmluZ1xcbmR1cnN0XFxuZHVydW0vTVxcbmR1c2svTVxcbmR1c2tpbmVzcy9NXFxuZHVza3kvUlRQXFxuZHVzdC9NRFJaR1NcXG5kdXN0YmluL1NNXFxuZHVzdGNhcnQvU1xcbmR1c3Rlci9NXFxuZHVzdGluZXNzL01cXG5kdXN0bGVzc1xcbmR1c3RtYW5cXG5kdXN0bWVuXFxuZHVzdHBhbi9TTVxcbmR1c3RzaGVldC9TXFxuZHVzdHkvUlRQXFxuZHV0Y2hcXG5kdXRlb3VzL1lcXG5kdXRpYWJsZVxcbmR1dGlmdWwvWVBcXG5kdXRpZnVsbmVzcy9NXFxuZHV0eS9TTVxcbmR1dmV0L1NNXFxuZHdhcmYvU0dNRFxcbmR3YXJmaXNoXFxuZHdhcmZpc20vTVxcbmR3ZWViL1NNXFxuZHdlbGwvU0paR1JcXG5kd2VsbGVyL01cXG5kd2VsbGluZy9NXFxuZHdlbHQvSVxcbmR3aW5kbGUvRFNHXFxuZHlhZGljXFxuZHliYnVrL1NNXFxuZHliYnVraW1cXG5keWUvRFJTTVpHXFxuZHllaW5nL0FcXG5keWVyL01cXG5keWVzdHVmZi9NXFxuZHlpbmcvTVxcbmR5a2UvTVNcXG5keW5hbWljL01TXFxuZHluYW1pY2FsL1lcXG5keW5hbWljcy9NXFxuZHluYW1pc20vTVxcbmR5bmFtaXRlL01aR0RSU1xcbmR5bmFtaXRlci9NXFxuZHluYW1vL1NNXFxuZHluYXN0aWNcXG5keW5hc3R5L1NNXFxuZHlzZW50ZXJ5L01cXG5keXNmdW5jdGlvbi9NU1xcbmR5c2Z1bmN0aW9uYWxcXG5keXNsZWN0aWMvU01cXG5keXNsZXhpYS9NXFxuZHlzbGV4aWMvU01cXG5keXNwZXBzaWEvTVxcbmR5c3BlcHRpYy9NU1xcbmR5c3BoYWdpYVxcbmR5c3Bob3JpYVxcbmR5c3Bob3JpY1xcbmR5c3Byb3NpdW0vTVxcbmR5c3RvbmlhXFxuZHlzdG9waVxcbmR5c3RvcGlhXFxuZHlzdG9waWFuXFxuZHpcXG5lJ2VuXFxuZSdlclxcbmUvRkRTVFxcbmVCYXkvTVxcbmVNdXNpYy9NXFxuZWFcXG5lYWNoXFxuZWFnZXIvUFRSWVxcbmVhZ2VybmVzcy9NXFxuZWFnbGUvTVNcXG5lYWdsZXQvTVNcXG5lYXIvU01EWVxcbmVhcmFjaGUvU01cXG5lYXJidWQvU01cXG5lYXJkcnVtL1NNXFxuZWFyZnVsL1NNXFxuZWFybC9NU1xcbmVhcmxkb20vU01cXG5lYXJsaW5lc3MvTVxcbmVhcmxvYmUvU01cXG5lYXJseS9SVFBcXG5lYXJtYXJrL1NNREdcXG5lYXJtdWZmL1NNXFxuZWFybi9EUlpUR0pTXFxuZWFybmVkL1VcXG5lYXJuZXIvTVxcbmVhcm5lc3QvU01ZUFxcbmVhcm5lc3RuZXNzL01cXG5lYXJuaW5ncy9NXFxuZWFycGhvbmUvTVNcXG5lYXJwaWVjZS9TXFxuZWFycGx1Zy9TTVxcbmVhcnJpbmcvU01cXG5lYXJzaG90L01cXG5lYXJzcGxpdHRpbmdcXG5lYXJ0aCdzXFxuZWFydGgvVURZR1xcbmVhcnRoYm91bmRcXG5lYXJ0aGVuXFxuZWFydGhlbndhcmUvTVxcbmVhcnRoaW5lc3MvTVxcbmVhcnRobGluZy9NU1xcbmVhcnRobHkvUlRcXG5lYXJ0aHF1YWtlL1NNXFxuZWFydGhzL1VcXG5lYXJ0aHNoYWtpbmdcXG5lYXJ0aHdhcmQvU1xcbmVhcnRod29yay9NU1xcbmVhcnRod29ybS9NU1xcbmVhcnRoeS9SVFBcXG5lYXJ3YXgvTVxcbmVhcndpZy9TTVxcbmVhc2UvRURTTVxcbmVhc2VsL1NNXFxuZWFzZW1lbnQvU01cXG5lYXNpbHkvVVxcbmVhc2luZXNzL1VNXFxuZWFzaW5nXFxuZWFzdC9NXFxuZWFzdGJvdW5kXFxuZWFzdGVybHkvU01cXG5lYXN0ZXJuL1pSXFxuZWFzdGVybmVyL01cXG5lYXN0ZXJubW9zdFxcbmVhc3R3YXJkL1NcXG5lYXN5L1VSVFBcXG5lYXN5Z29pbmdcXG5lYXQvWkdCU05SXFxuZWF0YWJsZS9TTVxcbmVhdGVuL1VcXG5lYXRlci9NXFxuZWF0ZXJ5L1NNXFxuZWF2ZS9NU1xcbmVhdmVzZHJvcC9TXFxuZWF2ZXNkcm9wcGVkXFxuZWF2ZXNkcm9wcGVyL1NNXFxuZWF2ZXNkcm9wcGluZ1xcbmViYi9TTURHXFxuZWJvbnkvU01cXG5lYnVsbGllbmNlL01cXG5lYnVsbGllbnQvWVxcbmVidWxsaXRpb24vTVxcbmVjY2VudHJpYy9TTVxcbmVjY2VudHJpY2FsbHlcXG5lY2NlbnRyaWNpdHkvU01cXG5lY2NsXFxuZWNjbGVzaWFsXFxuZWNjbGVzaWFzdGljL1NNXFxuZWNjbGVzaWFzdGljYWwvWVxcbmVjaGVsb24vU01cXG5lY2hpZG5hXFxuZWNoaW5vZGVybS9TTVxcbmVjaG8nc1xcbmVjaG8vQURHXFxuZWNob2VzL0FcXG5lY2hvaWNcXG5lY2hvbG9jYXRpb24vTVxcbmVjaG9zXFxuZWNsYWlyL1NNXFxuZWNsYXQvTVxcbmVjbGVjdGljL1NNXFxuZWNsZWN0aWNhbGx5XFxuZWNsZWN0aWNpc20vTVxcbmVjbGlwc2UvRFNNR1xcbmVjbGlwdGljL01cXG5lY2xvZ3VlL1NNXFxuZWNvY2lkZS9NXFxuZWNvbFxcbmVjb2xvZ2ljXFxuZWNvbG9naWNhbC9ZXFxuZWNvbG9naXN0L01TXFxuZWNvbG9neS9NXFxuZWNvblxcbmVjb25vbWV0cmljL1NcXG5lY29ub21pYy9TXFxuZWNvbm9taWNhbC9VWVxcbmVjb25vbWljcy9NXFxuZWNvbm9taXN0L1NNXFxuZWNvbm9taXplL0RSU1pHXFxuZWNvbm9taXplci9NXFxuZWNvbm9teS9TTVxcbmVjb3N5c3RlbS9NU1xcbmVjb3RvdXJpc20vTVxcbmVjb3RvdXJpc3QvTVNcXG5lY3J1L01cXG5lY3N0YXN5L1NNXFxuZWNzdGF0aWNcXG5lY3N0YXRpY2FsbHlcXG5lY3UvU1xcbmVjdW1lbmljYWwvWVxcbmVjdW1lbmljaXNtL01cXG5lY3VtZW5pc20vTVxcbmVjemVtYS9NXFxuZWQvQUNTTVxcbmVkYW1hbWVcXG5lZGR5L0RTTUdcXG5lZGVsd2Vpc3MvTVxcbmVkZW1hL1NNXFxuZWRnZS9NWkdKRFJTXFxuZWRnZXIvTVxcbmVkZ2V3aXNlXFxuZWRnaWx5XFxuZWRnaW5lc3MvTVxcbmVkZ2luZy9NXFxuZWRneS9SVFBcXG5lZGliaWxpdHkvTVxcbmVkaWJsZS9TTVBcXG5lZGlibGVuZXNzL01cXG5lZGljdC9TTVxcbmVkaWZpY2F0aW9uL01cXG5lZGlmaWNlL1NNXFxuZWRpZmllci9NXFxuZWRpZnkvRFJTWkdOXFxuZWRpZnlpbmcvVVxcbmVkaXQnc1xcbmVkaXQvQURHU1xcbmVkaXRhYmxlXFxuZWRpdGVkL1VcXG5lZGl0aW9uL01TXFxuZWRpdG9yL1NNXFxuZWRpdG9yaWFsL1NNWVxcbmVkaXRvcmlhbGl6ZS9EU0dcXG5lZGl0b3JzaGlwL01cXG5lZHVjXFxuZWR1Y2FiaWxpdHkvTVxcbmVkdWNhYmxlL0lcXG5lZHVjYXRlL0FEU0dOVlxcbmVkdWNhdGVkL1VcXG5lZHVjYXRpb24vQU1cXG5lZHVjYXRpb25hbC9ZXFxuZWR1Y2F0aW9uYWxpc3QvU1xcbmVkdWNhdGlvbmlzdC9TXFxuZWR1Y2F0aW9uc1xcbmVkdWNhdG9yL01TXFxuZWR1Y2UvRFNHQlxcbmVkdXRhaW5tZW50L01cXG5lZWtcXG5lZWwvU01cXG5lZXJpZS9SVFxcbmVlcmlseVxcbmVlcmluZXNzL01cXG5lZmYvR1NEXFxuZWZmYWNlL0RTTEdcXG5lZmZhY2VtZW50L01cXG5lZmZlY3QvU01ER1ZcXG5lZmZlY3RpdmUvSVBZXFxuZWZmZWN0aXZlbmVzcy9JTVxcbmVmZmVjdHVhbC9JWVxcbmVmZmVjdHVhdGUvRFNHXFxuZWZmZW1pbmFjeS9NXFxuZWZmZW1pbmF0ZS9ZXFxuZWZmZW5kaS9TTVxcbmVmZmVyZW50XFxuZWZmZXJ2ZXNjZS9HRFNcXG5lZmZlcnZlc2NlbmNlL01cXG5lZmZlcnZlc2NlbnQvWVxcbmVmZmV0ZS9ZUFxcbmVmZmV0ZW5lc3MvTVxcbmVmZmljYWNpb3VzL1lcXG5lZmZpY2FjeS9JTVxcbmVmZmljaWVuY3kvSVNNXFxuZWZmaWNpZW50L0lZXFxuZWZmaWd5L1NNXFxuZWZmbG9yZXNjZW5jZS9NXFxuZWZmbG9yZXNjZW50XFxuZWZmbHVlbmNlL01cXG5lZmZsdWVudC9NU1xcbmVmZmx1dmlhXFxuZWZmbHV2aXVtL01cXG5lZmZsdXhcXG5lZmZvcnQvU01cXG5lZmZvcnRmdWxcXG5lZmZvcnRsZXNzL1lQXFxuZWZmb3J0bGVzc25lc3MvTVxcbmVmZnJvbnRlcnkvTVxcbmVmZnVsZ2VuY2UvTVxcbmVmZnVsZ2VudFxcbmVmZnVzZS9EU0dOVlhcXG5lZmZ1c2lvbi9NXFxuZWZmdXNpdmUvWVBcXG5lZmZ1c2l2ZW5lc3MvTVxcbmVnYWRcXG5lZ2FsaXRhcmlhbi9TTVxcbmVnYWxpdGFyaWFuaXNtL01cXG5lZ2cvR1NNRFxcbmVnZ2JlYXRlci9NU1xcbmVnZ2N1cC9TTVxcbmVnZ2hlYWQvU01cXG5lZ2dub2cvTVxcbmVnZ3BsYW50L01TXFxuZWdnc2hlbGwvU01cXG5lZ2xhbnRpbmUvU01cXG5lZ28vU01cXG5lZ29jZW50cmljL01TXFxuZWdvY2VudHJpY2FsbHlcXG5lZ29jZW50cmljaXR5L01cXG5lZ29pc20vTVxcbmVnb2lzdC9TTVxcbmVnb2lzdGljXFxuZWdvaXN0aWNhbC9ZXFxuZWdvbWFuaWEvTVxcbmVnb21hbmlhYy9NU1xcbmVnb3Rpc20vTVxcbmVnb3Rpc3QvU01cXG5lZ290aXN0aWNcXG5lZ290aXN0aWNhbC9ZXFxuZWdyZWdpb3VzL1BZXFxuZWdyZWdpb3VzbmVzcy9NXFxuZWdyZXNzL01TXFxuZWdyZXQvU01cXG5laFxcbmVpZGVyL1NNXFxuZWlkZXJkb3duL01TXFxuZWlnZW52YWx1ZS9TXFxuZWlnZW52ZWN0b3IvU1xcbmVpZ2h0L1NNXFxuZWlnaHRlZW4vTUhTXFxuZWlnaHRlZW50aC9NXFxuZWlnaHRlZW50aHNcXG5laWdodGgvTVxcbmVpZ2h0aHNcXG5laWdodGlldGgvTVxcbmVpZ2h0aWV0aHNcXG5laWdodHkvU01IXFxuZWluc3RlaW5pdW0vTVxcbmVpc3RlZGRmb2QvU1xcbmVpdGhlclxcbmVqYWN1bGF0ZS9HTlhEU1xcbmVqYWN1bGF0aW9uL01cXG5lamFjdWxhdG9yeVxcbmVqZWN0L1NER1xcbmVqZWN0aW9uL01TXFxuZWplY3Rvci9TTVxcbmVrZS9EU0dcXG5lbGFib3JhdGUvWUdORFNQWFxcbmVsYWJvcmF0ZW5lc3MvTVxcbmVsYWJvcmF0aW9uL01cXG5lbGFuL01cXG5lbGFuZC9TTVxcbmVsYXBzZS9EU0dcXG5lbGFzdGljL01TXFxuZWxhc3RpY2FsbHlcXG5lbGFzdGljYXRlZFxcbmVsYXN0aWNpdHkvTVxcbmVsYXN0aWNpemUvRFNHXFxuZWxhdGUvRFNHTlxcbmVsYXRlZC9ZXFxuZWxhdGlvbi9NXFxuZWxib3cvU01ER1xcbmVsYm93cm9vbS9NXFxuZWxkZXIvU01ZXFxuZWxkZXJiZXJyeS9TTVxcbmVsZGVyY2FyZS9NXFxuZWxkZXN0XFxuZWxkcml0Y2hcXG5lbGVjdCdzXFxuZWxlY3QvQVNER1ZcXG5lbGVjdGFibGVcXG5lbGVjdGlvbi9BTVNcXG5lbGVjdGlvbmVlci9ER1NcXG5lbGVjdGl2ZS9NU1xcbmVsZWN0b3IvTVNcXG5lbGVjdG9yYWwvWVxcbmVsZWN0b3JhdGUvTVNcXG5lbGVjdHJpYy9TXFxuZWxlY3RyaWNhbC9ZXFxuZWxlY3RyaWNpYW4vTVNcXG5lbGVjdHJpY2l0eS9NXFxuZWxlY3RyaWZpY2F0aW9uL01cXG5lbGVjdHJpZmllci9NXFxuZWxlY3RyaWZ5L1pHTkRSU1xcbmVsZWN0cm9jYXJkaW9ncmFtL01TXFxuZWxlY3Ryb2NhcmRpb2dyYXBoL01cXG5lbGVjdHJvY2FyZGlvZ3JhcGhzXFxuZWxlY3Ryb2NhcmRpb2dyYXBoeS9NXFxuZWxlY3Ryb2N1dGUvRFNYR05cXG5lbGVjdHJvY3V0aW9uL01cXG5lbGVjdHJvZGUvU01cXG5lbGVjdHJvZHluYW1pY3NcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhbS9NU1xcbmVsZWN0cm9lbmNlcGhhbG9ncmFwaC9NXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoaWNcXG5lbGVjdHJvZW5jZXBoYWxvZ3JhcGhzXFxuZWxlY3Ryb2VuY2VwaGFsb2dyYXBoeS9NXFxuZWxlY3Ryb2xvZ2lzdC9TTVxcbmVsZWN0cm9seXNpcy9NXFxuZWxlY3Ryb2x5dGUvTVNcXG5lbGVjdHJvbHl0aWNcXG5lbGVjdHJvbWFnbmV0L01TXFxuZWxlY3Ryb21hZ25ldGljXFxuZWxlY3Ryb21hZ25ldGljYWxseVxcbmVsZWN0cm9tYWduZXRpc20vTVxcbmVsZWN0cm9tb3RpdmVcXG5lbGVjdHJvbi9NU1xcbmVsZWN0cm9uaWMvU1xcbmVsZWN0cm9uaWNhL01cXG5lbGVjdHJvbmljYWxseVxcbmVsZWN0cm9uaWNzL01cXG5lbGVjdHJvcGxhdGUvRFNHXFxuZWxlY3Ryb3Njb3BlL1NNXFxuZWxlY3Ryb3Njb3BpY1xcbmVsZWN0cm9zaG9jay9NXFxuZWxlY3Ryb3N0YXRpYy9TXFxuZWxlY3Ryb3N0YXRpY3MvTVxcbmVsZWN0cm90eXBlL01TXFxuZWxlY3Ryb3dlYWtcXG5lbGVlbW9zeW5hcnlcXG5lbGVnYW5jZS9JTVxcbmVsZWdhbnQvSVlcXG5lbGVnaWFjL01TXFxuZWxlZ2lhY2FsXFxuZWxlZ3kvU01cXG5lbGVtXFxuZWxlbWVudC9NU1xcbmVsZW1lbnRhbC9ZXFxuZWxlbWVudGFyeVxcbmVsZXBoYW50L1NNXFxuZWxlcGhhbnRpYXNpcy9NXFxuZWxlcGhhbnRpbmVcXG5lbGV2XFxuZWxldmF0ZS9YRFNHTlxcbmVsZXZhdGlvbi9NXFxuZWxldmF0b3IvTVNcXG5lbGV2ZW4vU01IXFxuZWxldmVucy9TXFxuZWxldmVudGgvTVxcbmVsZXZlbnRoc1xcbmVsZi9NXFxuZWxmaW5cXG5lbGZpc2hcXG5lbGljaXQvU0RHXFxuZWxpY2l0YXRpb24vTVxcbmVsaWRlL0RTR1xcbmVsaWdpYmlsaXR5L0lNXFxuZWxpZ2libGVcXG5lbGltaW5hdGUvWERTR05cXG5lbGltaW5hdGlvbi9NXFxuZWxpbWluYXRvci9TXFxuZWxpc2lvbi9NU1xcbmVsaXRlL1NNXFxuZWxpdGlzbS9NXFxuZWxpdGlzdC9NU1xcbmVsaXhpci9TTVxcbmVsay9TTVxcbmVsbC9TTVxcbmVsbGlwc2UvTVNcXG5lbGxpcHNpcy9NXFxuZWxsaXBzb2lkL1NNXFxuZWxsaXBzb2lkYWxcXG5lbGxpcHRpY1xcbmVsbGlwdGljYWwvWVxcbmVsbS9TTVxcbmVsb2N1dGlvbi9NXFxuZWxvY3V0aW9uYXJ5XFxuZWxvY3V0aW9uaXN0L1NNXFxuZWxvZGVhL1NNXFxuZWxvbmdhdGUvRFNHTlhcXG5lbG9uZ2F0aW9uL01cXG5lbG9wZS9EU0dMXFxuZWxvcGVtZW50L01TXFxuZWxvcXVlbmNlL01cXG5lbG9xdWVudC9ZXFxuZWxzZVxcbmVsc2V3aGVyZVxcbmVsdWNpZGF0ZS9EU0dOWFxcbmVsdWNpZGF0aW9uL01cXG5lbHVkZS9EU0dcXG5lbHVzaXZlL1lQXFxuZWx1c2l2ZW5lc3MvTVxcbmVsdmVyL1NNXFxuZWx2ZXNcXG5lbHZpc2hcXG5lbSdzXFxuZW0vU1xcbmVtYWNpYXRlL0dORFNcXG5lbWFjaWF0aW9uL01cXG5lbWFpbC9TTURHXFxuZW1hbmF0ZS9YRFNHTlxcbmVtYW5hdGlvbi9NXFxuZW1hbmNpcGF0ZS9EU0dOXFxuZW1hbmNpcGF0aW9uL01cXG5lbWFuY2lwYXRvci9NU1xcbmVtYXNjdWxhdGUvR05EU1xcbmVtYXNjdWxhdGlvbi9NXFxuZW1iYWxtL1NaR0RSXFxuZW1iYWxtZXIvTVxcbmVtYmFuay9TTEdEXFxuZW1iYW5rbWVudC9TTVxcbmVtYmFyZ28vTURHXFxuZW1iYXJnb2VzXFxuZW1iYXJrL0FFR0RTXFxuZW1iYXJrYXRpb24vRU1cXG5lbWJhcmthdGlvbnNcXG5lbWJhcnJhc3MvR0xEU1xcbmVtYmFycmFzc2VkL1VcXG5lbWJhcnJhc3NpbmcvWVxcbmVtYmFycmFzc21lbnQvU01cXG5lbWJhc3N5L1NNXFxuZW1iYXR0bGVkXFxuZW1iZWQvU1xcbmVtYmVkZGVkXFxuZW1iZWRkaW5nXFxuZW1iZWxsaXNoL0xHRFNcXG5lbWJlbGxpc2htZW50L1NNXFxuZW1iZXIvU01cXG5lbWJlenpsZS9aR0xEUlNcXG5lbWJlenpsZW1lbnQvTVxcbmVtYmV6emxlci9NXFxuZW1iaXR0ZXIvR0xEU1xcbmVtYml0dGVybWVudC9NXFxuZW1ibGF6b24vR0RMU1xcbmVtYmxhem9ubWVudC9NXFxuZW1ibGVtL1NNXFxuZW1ibGVtYXRpY1xcbmVtYmxlbWF0aWNhbGx5XFxuZW1ib2RpbWVudC9FTVxcbmVtYm9keS9BRUdTRFxcbmVtYm9sZGVuL0RHU1xcbmVtYm9saXNtL01TXFxuZW1ib2xpemF0aW9uXFxuZW1ib3NzL0RSU1pHXFxuZW1ib3NzZXIvTVxcbmVtYm91Y2h1cmUvTVxcbmVtYm93ZXIvU0dEXFxuZW1icmFjZS9EU01HXFxuZW1icmFjZWFibGVcXG5lbWJyYXN1cmUvTVNcXG5lbWJyb2NhdGlvbi9NU1xcbmVtYnJvaWRlci9TRFJaR1xcbmVtYnJvaWRlcmVyL01cXG5lbWJyb2lkZXJ5L1NNXFxuZW1icm9pbC9ER0xTXFxuZW1icm9pbG1lbnQvTVxcbmVtYnJ5by9TTVxcbmVtYnJ5b2xvZ2ljYWxcXG5lbWJyeW9sb2dpc3QvTVNcXG5lbWJyeW9sb2d5L01cXG5lbWJyeW9uaWNcXG5lbWNlZS9EU01cXG5lbWNlZWluZ1xcbmVtZW5kL1NER1xcbmVtZW5kYXRpb24vTVNcXG5lbWVyYWxkL01TXFxuZW1lcmdlL0FEU0dcXG5lbWVyZ2VuY2UvQU1cXG5lbWVyZ2VuY3kvU01cXG5lbWVyZ2VudFxcbmVtZXJpdGFcXG5lbWVyaXR1c1xcbmVtZXJ5L01cXG5lbWV0aWMvU01cXG5lbWYvU1xcbmVtaWdyYW50L1NNXFxuZW1pZ3JhdGUvRFNYR05cXG5lbWlncmF0aW9uL01cXG5lbWlncmUvU01cXG5lbWluZW5jZS9NU1xcbmVtaW5lbnQvWVxcbmVtaXIvTVNcXG5lbWlyYXRlL01TXFxuZW1pc3NhcnkvU01cXG5lbWlzc2lvbi9TTVxcbmVtaXQvU1xcbmVtaXR0ZWRcXG5lbWl0dGVyL01TXFxuZW1pdHRpbmdcXG5lbW8vU01cXG5lbW9qaS9TTVxcbmVtb2xsaWVudC9NU1xcbmVtb2x1bWVudC9NU1xcbmVtb3RlL1hEU0dOVlxcbmVtb3RpY29uL1NNXFxuZW1vdGlvbi9NXFxuZW1vdGlvbmFsL1VZXFxuZW1vdGlvbmFsaXNtL01cXG5lbW90aW9uYWxpemUvR0RTXFxuZW1vdGlvbmxlc3NcXG5lbW90aXZlL1lcXG5lbXBhdGhldGljXFxuZW1wYXRoaWNhbGx5XFxuZW1wYXRoaXplL0RTR1xcbmVtcGF0aHkvTVxcbmVtcGVyb3IvTVNcXG5lbXBoYXNlc1xcbmVtcGhhc2lzL01cXG5lbXBoYXNpemUvQUdEU1xcbmVtcGhhdGljL1VcXG5lbXBoYXRpY2FsbHlcXG5lbXBoeXNlbWEvTVxcbmVtcGlyZS9TTVxcbmVtcGlyaWNcXG5lbXBpcmljYWwvWVxcbmVtcGlyaWNpc20vTVxcbmVtcGlyaWNpc3QvU01cXG5lbXBsYWNlbWVudC9TTVxcbmVtcGxveSdzXFxuZW1wbG95L0FER0xTXFxuZW1wbG95YWJsZS9VXFxuZW1wbG95ZWUvU01cXG5lbXBsb3llci9TTVxcbmVtcGxveW1lbnQvVUFNXFxuZW1wbG95bWVudHNcXG5lbXBvcml1bS9TTVxcbmVtcG93ZXIvU0RHTFxcbmVtcG93ZXJtZW50L01cXG5lbXByZXNzL01TXFxuZW1wdGlseVxcbmVtcHRpbmVzcy9NXFxuZW1wdHkvVEdQRFJTTVxcbmVtcHlyZWFuL01cXG5lbXUvU01cXG5lbXVsYXRlL0RTR05WWFxcbmVtdWxhdGlvbi9NXFxuZW11bGF0b3IvU01cXG5lbXVsc2lmaWNhdGlvbi9NXFxuZW11bHNpZmllci9NXFxuZW11bHNpZnkvTkRSU1pHXFxuZW11bHNpb24vTVNcXG5lbi9TTVxcbmVuYWJsZS9EUlNaR1xcbmVuYWJsZXIvTVxcbmVuYWN0L0FTTERHXFxuZW5hY3RtZW50L0FTTVxcbmVuYW1lbC9KU1pHTURSXFxuZW5hbWVsZXIvTVxcbmVuYW1lbHdhcmUvTVxcbmVuYW1vci9TR0RcXG5lbmNcXG5lbmNhbXAvTFNHRFxcbmVuY2FtcG1lbnQvTVNcXG5lbmNhcHN1bGF0ZS9YR05EU1xcbmVuY2Fwc3VsYXRpb24vTVxcbmVuY2FzZS9MRFNHXFxuZW5jYXNlbWVudC9NXFxuZW5jZXBoYWxpdGljXFxuZW5jZXBoYWxpdGlzL01cXG5lbmNoYWluL0RHU1xcbmVuY2hhbnQvRUxER1NcXG5lbmNoYW50ZXIvTVNcXG5lbmNoYW50aW5nL1lcXG5lbmNoYW50bWVudC9FTVxcbmVuY2hhbnRtZW50c1xcbmVuY2hhbnRyZXNzL01TXFxuZW5jaGlsYWRhL1NNXFxuZW5jaXBoZXIvU0dEXFxuZW5jaXJjbGUvRFNHTFxcbmVuY2lyY2xlbWVudC9NXFxuZW5jbFxcbmVuY2xhdmUvTVNcXG5lbmNsb3NlL0dEU1xcbmVuY2xvc2VkL1VcXG5lbmNsb3N1cmUvU01cXG5lbmNvZGUvRFJTWkdcXG5lbmNvZGVyL01cXG5lbmNvbWl1bS9NU1xcbmVuY29tcGFzcy9HRFNcXG5lbmNvcmUvRFNNR1xcbmVuY291bnRlci9HU01EXFxuZW5jb3VyYWdlL0RTTEdcXG5lbmNvdXJhZ2VtZW50L1NNXFxuZW5jb3VyYWdpbmcvWVxcbmVuY3JvYWNoL0dMRFNcXG5lbmNyb2FjaG1lbnQvU01cXG5lbmNydXN0L0RHU1xcbmVuY3J1c3RhdGlvbi9TTVxcbmVuY3J5cHQvREdTXFxuZW5jcnlwdGlvblxcbmVuY3VtYmVyL0VHU0RcXG5lbmN1bWJlcmVkL1VcXG5lbmN1bWJyYW5jZS9NU1xcbmVuY3lcXG5lbmN5Y2xpY2FsL1NNXFxuZW5jeWNsb3BlZGlhL01TXFxuZW5jeWNsb3BlZGljXFxuZW5jeXN0L0xTR0RcXG5lbmN5c3RtZW50L01cXG5lbmQvR1ZTSk1EXFxuZW5kYW5nZXIvU0dETFxcbmVuZGFuZ2VybWVudC9NXFxuZW5kZWFyL1NHTERcXG5lbmRlYXJpbmcvWVxcbmVuZGVhcm1lbnQvU01cXG5lbmRlYXZvci9HU01EXFxuZW5kZW1pYy9NU1xcbmVuZGVtaWNhbGx5XFxuZW5kZ2FtZS9TXFxuZW5kaW5nL01cXG5lbmRpdmUvU01cXG5lbmRsZXNzL1BZXFxuZW5kbGVzc25lc3MvTVxcbmVuZG1vc3RcXG5lbmRvY2FyZGl0aXNcXG5lbmRvY3JpbmUvTVNcXG5lbmRvY3Jpbm9sb2dpc3QvTVNcXG5lbmRvY3Jpbm9sb2d5L01cXG5lbmRvZ2Vub3VzL1lcXG5lbmRvbWV0cmlhbFxcbmVuZG9tZXRyaW9zaXNcXG5lbmRvbWV0cml1bVxcbmVuZG9ycGhpbi9NU1xcbmVuZG9yc2UvTFpHRFJTXFxuZW5kb3JzZW1lbnQvTVNcXG5lbmRvcnNlci9NXFxuZW5kb3Njb3BlL01TXFxuZW5kb3Njb3BpY1xcbmVuZG9zY29weS9NXFxuZW5kb3RoZWxpYWxcXG5lbmRvdGhlcm1pY1xcbmVuZG90cmFjaGVhbFxcbmVuZG93L1NETEdcXG5lbmRvd21lbnQvTVNcXG5lbmRwb2ludC9TTVxcbmVuZHVlL0RTR1xcbmVuZHVyYWJsZS9VXFxuZW5kdXJhbmNlL01cXG5lbmR1cmUvRFNCR1xcbmVuZHdheXNcXG5lbmVtYS9TTVxcbmVuZW15L1NNXFxuZW5lcmdldGljXFxuZW5lcmdldGljYWxseVxcbmVuZXJnaXplL1pHRFJTXFxuZW5lcmdpemVyL01cXG5lbmVyZ3kvU01cXG5lbmVydmF0ZS9HTkRTXFxuZW5lcnZhdGlvbi9NXFxuZW5mZWVibGUvR0RTTFxcbmVuZmVlYmxlbWVudC9NXFxuZW5maWxhZGUvRFNNR1xcbmVuZm9sZC9TR0RcXG5lbmZvcmNlL0xaR0RSU1xcbmVuZm9yY2VhYmxlL1VcXG5lbmZvcmNlZC9VXFxuZW5mb3JjZW1lbnQvTVxcbmVuZm9yY2VyL01cXG5lbmZyYW5jaGlzZS9FR0RTTFxcbmVuZnJhbmNoaXNlbWVudC9FTVxcbmVuZ2FnZS9FQURTR1xcbmVuZ2FnZW1lbnQvRU1TXFxuZW5nYWdpbmdseVxcbmVuZ2VuZGVyL1NHRFxcbmVuZ2luZS9TTVxcbmVuZ2luZWVyL01ER1NcXG5lbmdpbmVlcmluZy9NXFxuZW5nb3JnZS9MR0RTXFxuZW5nb3JnZW1lbnQvTVxcbmVuZ3JhbS9TTVxcbmVuZ3JhdmUvWkdKRFJTXFxuZW5ncmF2ZXIvTVxcbmVuZ3JhdmluZy9NXFxuZW5ncm9zcy9HTERTXFxuZW5ncm9zc21lbnQvTVxcbmVuZ3VsZi9TTEdEXFxuZW5ndWxmbWVudC9NXFxuZW5oYW5jZS9MWkdEUlNcXG5lbmhhbmNlbWVudC9TTVxcbmVuaWdtYS9TTVxcbmVuaWdtYXRpY1xcbmVuaWdtYXRpY2FsbHlcXG5lbmphbWJtZW50L1NNXFxuZW5qb2luL1NHRFxcbmVuam95L0dCTFNEXFxuZW5qb3lhYmx5XFxuZW5qb3ltZW50L1NNXFxuZW5sYXJnZS9MWkdEUlNcXG5lbmxhcmdlYWJsZVxcbmVubGFyZ2VtZW50L01TXFxuZW5sYXJnZXIvTVxcbmVubGlnaHRlbi9TR0xEXFxuZW5saWdodGVuZWQvVVxcbmVubGlnaHRlbm1lbnQvTVxcbmVubGlzdC9BREdTTFxcbmVubGlzdGVlL1NNXFxuZW5saXN0bWVudC9BTVxcbmVubGlzdG1lbnRzXFxuZW5saXZlbi9TTERHXFxuZW5saXZlbm1lbnQvTVxcbmVubWVzaC9EU0dMXFxuZW5tZXNobWVudC9NXFxuZW5taXR5L1NNXFxuZW5ub2JsZS9EU0dMXFxuZW5ub2JsZW1lbnQvTVxcbmVubnVpL01cXG5lbm9ybWl0eS9TTVxcbmVub3Jtb3VzL1BZXFxuZW5vcm1vdXNuZXNzL01cXG5lbm91Z2gvTVxcbmVucGxhbmUvRFNHXFxuZW5xdWV1ZS9EU1xcbmVucXVpcmVyL1NcXG5lbnF1aXJpbmdseVxcbmVucmFnZS9HRFNcXG5lbnJhcHR1cmUvRFNHXFxuZW5yaWNoL0RTTEdcXG5lbnJpY2htZW50L01cXG5lbnJvbGwvRExTR1xcbmVucm9sbG1lbnQvTVNcXG5lbnNjb25jZS9EU0dcXG5lbnNlbWJsZS9TTVxcbmVuc2hyaW5lL0dMRFNcXG5lbnNocmluZW1lbnQvTVxcbmVuc2hyb3VkL0RHU1xcbmVuc2lnbi9NU1xcbmVuc2lsYWdlL01cXG5lbnNsYXZlL0RTR0xcXG5lbnNsYXZlbWVudC9NXFxuZW5zbmFyZS9EU0xHXFxuZW5zbmFyZW1lbnQvTVxcbmVuc3VlL0RTR1xcbmVuc3VyZS9aR0RSU1xcbmVuc3VyZXIvTVxcbmVudGFpbC9EU0dMXFxuZW50YWlsbWVudC9NXFxuZW50YW5nbGUvRURTTEdcXG5lbnRhbmdsZW1lbnQvRU1cXG5lbnRhbmdsZW1lbnRzXFxuZW50ZW50ZS9TTVxcbmVudGVyL0FTR0RcXG5lbnRlcmFsXFxuZW50ZXJpY1xcbmVudGVyaXRpcy9NXFxuZW50ZXJwcmlzZS9NR1NcXG5lbnRlcnByaXNpbmcvWVxcbmVudGVydGFpbi9aR0RSU0xcXG5lbnRlcnRhaW5lci9NXFxuZW50ZXJ0YWluaW5nL01ZXFxuZW50ZXJ0YWlubWVudC9NU1xcbmVudGhyYWxsL0dEU0xcXG5lbnRocmFsbG1lbnQvTVxcbmVudGhyb25lL0dEU0xcXG5lbnRocm9uZW1lbnQvU01cXG5lbnRodXNlL0RTR1xcbmVudGh1c2lhc20vTVNcXG5lbnRodXNpYXN0L01TXFxuZW50aHVzaWFzdGljL1VcXG5lbnRodXNpYXN0aWNhbGx5XFxuZW50aWNlL0dEU0xcXG5lbnRpY2VtZW50L01TXFxuZW50aWNpbmcvWVxcbmVudGlyZS9ZXFxuZW50aXJldHkvTVxcbmVudGl0bGUvRFNHTFxcbmVudGl0bGVtZW50L1NNXFxuZW50aXR5L1NNXFxuZW50b21iL0RTR0xcXG5lbnRvbWJtZW50L01cXG5lbnRvbW9sb2dpY2FsXFxuZW50b21vbG9naXN0L01TXFxuZW50b21vbG9neS9NXFxuZW50b3VyYWdlL1NNXFxuZW50cidhY3RlXFxuZW50cmFpbHMvTVxcbmVudHJhaW5lZFxcbmVudHJhbmNlL0xEU01HXFxuZW50cmFuY2VtZW50L01cXG5lbnRyYW5jaW5nL1lcXG5lbnRyYW50L1NNXFxuZW50cmFwL0xTXFxuZW50cmFwbWVudC9NXFxuZW50cmFwcGVkXFxuZW50cmFwcGluZ1xcbmVudHJlYXQvR1NEXFxuZW50cmVhdGluZy9ZXFxuZW50cmVhdHkvU01cXG5lbnRyZWUvTVNcXG5lbnRyZW5jaC9EU0dMXFxuZW50cmVuY2htZW50L01TXFxuZW50cmVwcmVuZXVyL1NNXFxuZW50cmVwcmVuZXVyaWFsXFxuZW50cmVwcmVuZXVyc2hpcFxcbmVudHJvcHkvTVxcbmVudHJ1c3QvU0dEXFxuZW50cnkvQVNNXFxuZW50cnlwaG9uZS9TXFxuZW50cnl3YXkvTVNcXG5lbnR3aW5lL0RTR1xcbmVudW1lcmFibGVcXG5lbnVtZXJhdGUvRFNHTlhcXG5lbnVtZXJhdGlvbi9NXFxuZW51bWVyYXRvci9TTVxcbmVudW5jaWF0ZS9EU0dOXFxuZW51bmNpYXRpb24vTVxcbmVudXJlc2lzL01cXG5lbnZlbG9wL1NMRFJaR1xcbmVudmVsb3BlL1NNXFxuZW52ZWxvcGVyL01cXG5lbnZlbG9wbWVudC9NXFxuZW52ZW5vbS9TREdcXG5lbnZpYWJsZS9VXFxuZW52aWFibHlcXG5lbnZpb3VzL1BZXFxuZW52aW91c25lc3MvTVxcbmVudmlyb25tZW50L01TXFxuZW52aXJvbm1lbnRhbC9ZXFxuZW52aXJvbm1lbnRhbGlzbS9NXFxuZW52aXJvbm1lbnRhbGlzdC9TTVxcbmVudmlyb25zL01cXG5lbnZpc2FnZS9HRFNcXG5lbnZpc2lvbi9ER1NcXG5lbnZveS9TTVxcbmVudnkvRFNNR1xcbmVudnlpbmcvWVxcbmVuenltYXRpY1xcbmVuenltZS9TTVxcbmVvbGlhblxcbmVvbi9TTVxcbmVvc2lub3BoaWwvU1xcbmVvc2lub3BoaWxpY1xcbmVwYXVsZXQvU01cXG5lcGVlL01TXFxuZXBoZWRyaW5lL01cXG5lcGhlbWVyYS9NXFxuZXBoZW1lcmFsL1lcXG5lcGljL01TXFxuZXBpY2VudGVyL01TXFxuZXBpY3VyZS9TTVxcbmVwaWN1cmVhbi9NU1xcbmVwaWRlbWljL1NNXFxuZXBpZGVtaWNhbGx5XFxuZXBpZGVtaW9sb2dpY2FsXFxuZXBpZGVtaW9sb2dpc3QvU01cXG5lcGlkZW1pb2xvZ3kvTVxcbmVwaWRlcm1hbFxcbmVwaWRlcm1pY1xcbmVwaWRlcm1pcy9NU1xcbmVwaWR1cmFsL1NcXG5lcGlnbG90dGlzL01TXFxuZXBpZ3JhbS9TTVxcbmVwaWdyYW1tYXRpY1xcbmVwaWdyYXBoL01cXG5lcGlncmFwaHNcXG5lcGlncmFwaHkvTVxcbmVwaWxlcHN5L01cXG5lcGlsZXB0aWMvU01cXG5lcGlsb2d1ZS9NU1xcbmVwaW5lcGhyaW5lL01cXG5lcGlwaGFueS9TTVxcbmVwaXNjb3BhY3kvTVxcbmVwaXNjb3BhbFxcbmVwaXNjb3BhdGUvTVxcbmVwaXNvZGUvU01cXG5lcGlzb2RpY1xcbmVwaXNvZGljYWxseVxcbmVwaXN0ZW1pY1xcbmVwaXN0ZW1vbG9naWNhbFxcbmVwaXN0ZW1vbG9neVxcbmVwaXN0bGUvU01cXG5lcGlzdG9sYXJ5XFxuZXBpdGFwaC9NXFxuZXBpdGFwaHNcXG5lcGl0aGVsaWFsXFxuZXBpdGhlbGl1bS9NXFxuZXBpdGhldC9TTVxcbmVwaXRvbWUvU01cXG5lcGl0b21pemUvR0RTXFxuZXBvY2gvTVxcbmVwb2NoYWxcXG5lcG9jaHNcXG5lcG9ueW1vdXNcXG5lcG94eS9EU01HXFxuZXBzaWxvbi9TTVxcbmVxdWFiaWxpdHkvTVxcbmVxdWFibGVcXG5lcXVhYmx5XFxuZXF1YWwvU01EWUdcXG5lcXVhbGl0eS9JTVxcbmVxdWFsaXphdGlvbi9NXFxuZXF1YWxpemUvWkdEUlNcXG5lcXVhbGl6ZXIvTVxcbmVxdWFuaW1pdHkvTVxcbmVxdWF0ZS9EU0dOQlhcXG5lcXVhdGlvbi9NXFxuZXF1YXRvci9TTVxcbmVxdWF0b3JpYWxcXG5lcXVlcnJ5L1NNXFxuZXF1ZXN0cmlhbi9TTVxcbmVxdWVzdHJpYW5pc20vTVxcbmVxdWVzdHJpZW5uZS9TTVxcbmVxdWlkaXN0YW50L1lcXG5lcXVpbGF0ZXJhbC9TTVxcbmVxdWlsaWJyaXVtL0VNXFxuZXF1aW5lL1NNXFxuZXF1aW5vY3RpYWxcXG5lcXVpbm94L01TXFxuZXF1aXAvQVNcXG5lcXVpcGFnZS9NU1xcbmVxdWlwbWVudC9NXFxuZXF1aXBvaXNlL01cXG5lcXVpcHBlZC9VQVxcbmVxdWlwcGluZy9BXFxuZXF1aXRhYmxlL0lcXG5lcXVpdGFibHkvSVxcbmVxdWl0YXRpb24vTVxcbmVxdWl0eS9JU01cXG5lcXVpdlxcbmVxdWl2YWxlbmNlL01TXFxuZXF1aXZhbGVuY3kvU01cXG5lcXVpdmFsZW50L01ZU1xcbmVxdWl2b2NhbC9VWVxcbmVxdWl2b2NhbG5lc3MvTVxcbmVxdWl2b2NhdGUvR05YRFNcXG5lcXVpdm9jYXRpb24vTVxcbmVxdWl2b2NhdG9yL1NNXFxuZXIvQ1xcbmVyYS9TTVxcbmVyYWRpY2FibGUvSVxcbmVyYWRpY2F0ZS9EU0dOXFxuZXJhZGljYXRpb24vTVxcbmVyYWRpY2F0b3IvTVNcXG5lcmFzZS9EUlNCWkdcXG5lcmFzZXIvTVxcbmVyYXN1cmUvU01cXG5lcmJpdW0vTVxcbmVyZVxcbmVyZWN0L1BTR0RZXFxuZXJlY3RpbGVcXG5lcmVjdGlvbi9TTVxcbmVyZWN0bmVzcy9NXFxuZXJlY3Rvci9NU1xcbmVyZWxvbmdcXG5lcmVtaXRlL01TXFxuZXJnL1NNXFxuZXJnb1xcbmVyZ29ub21pYy9TXFxuZXJnb25vbWljYWxseVxcbmVyZ29ub21pY3MvTVxcbmVyZ29zdGVyb2wvTVxcbmVyZ290L01cXG5lcm1pbmUvU01cXG5lcm9kZS9EU0dcXG5lcm9kaWJsZVxcbmVyb2dlbm91c1xcbmVyb3Npb24vTVxcbmVyb3NpdmVcXG5lcm90aWMvU1xcbmVyb3RpY2EvTVxcbmVyb3RpY2FsbHlcXG5lcm90aWNpc20vTVxcbmVyci9HU0RcXG5lcnJhbmQvU01cXG5lcnJhbnQvSVxcbmVycmF0YS9TTVxcbmVycmF0aWNcXG5lcnJhdGljYWxseVxcbmVycmF0dW0vTVxcbmVycm9uZW91cy9ZXFxuZXJyb3IvU01cXG5lcnNhdHovTVNcXG5lcnN0XFxuZXJzdHdoaWxlXFxuZXJ1Y3QvU0RHXFxuZXJ1Y3RhdGlvbi9TTVxcbmVydWRpdGUvWU5cXG5lcnVkaXRpb24vTVxcbmVydXB0L1NER1ZcXG5lcnVwdGlvbi9NU1xcbmVyeXNpcGVsYXMvTVxcbmVyeXRocm9jeXRlL1NNXFxuZXJ5dGhyb215Y2luXFxuZXNjYWxhdGUvQ0RTR05cXG5lc2NhbGF0aW9uL0NNXFxuZXNjYWxhdGlvbnNcXG5lc2NhbGF0b3IvTVNcXG5lc2NhbGxvcC9TR01EXFxuZXNjYWxvcGUvU1xcbmVzY2FwYWRlL01TXFxuZXNjYXBlL0xNR0RTXFxuZXNjYXBlZS9NU1xcbmVzY2FwZW1lbnQvU01cXG5lc2NhcGlzbS9NXFxuZXNjYXBpc3QvTVNcXG5lc2NhcG9sb2dpc3QvU1xcbmVzY2Fwb2xvZ3lcXG5lc2NhcmdvdC9NU1xcbmVzY2Fyb2xlL01TXFxuZXNjYXJwbWVudC9NU1xcbmVzY2hhdG9sb2dpY2FsXFxuZXNjaGF0b2xvZ3lcXG5lc2NoZXcvU0RHXFxuZXNjb3J0L1NNREdcXG5lc2NyaXRvaXJlL01TXFxuZXNjcm93L1NNXFxuZXNjdWRvL1NNXFxuZXNjdXRjaGVvbi9TTVxcbmVzb3BoYWdlYWxcXG5lc29waGFnaVxcbmVzb3BoYWd1cy9NXFxuZXNvdGVyaWNcXG5lc290ZXJpY2FsbHlcXG5lc3BcXG5lc3BhZHJpbGxlL01TXFxuZXNwYWxpZXIvTURTR1xcbmVzcGVjaWFsL1lcXG5lc3Bpb25hZ2UvTVxcbmVzcGxhbmFkZS9NU1xcbmVzcG91c2FsL01cXG5lc3BvdXNlL0dEU1xcbmVzcHJlc3NvL01TXFxuZXNwcml0L01cXG5lc3B5L0RTR1xcbmVzcXVpcmUvU01cXG5lc3NheS9TTURSWkdcXG5lc3NheWVyL01cXG5lc3NheWlzdC9TTVxcbmVzc2VuY2UvU01cXG5lc3NlbnRpYWwvSU1TXFxuZXNzZW50aWFsbHlcXG5lc3RhYmxpc2gvQUVTREdMXFxuZXN0YWJsaXNobWVudC9BRU1cXG5lc3RhYmxpc2htZW50c1xcbmVzdGF0ZS9TTVxcbmVzdGVlbS9FU01ER1xcbmVzdGVyL1NNXFxuZXN0aW1hYmxlL0lcXG5lc3RpbWF0ZS9NR05EU1hcXG5lc3RpbWF0aW9uL01cXG5lc3RpbWF0b3IvU01cXG5lc3RvcHBlbFxcbmVzdHJhZGlvbFxcbmVzdHJhbmdlL0xEU0dcXG5lc3RyYW5nZW1lbnQvTVNcXG5lc3Ryb2dlbi9NU1xcbmVzdHJvdXNcXG5lc3RydXMvTVNcXG5lc3R1YXJ5L1NNXFxuZXRhL1NNXFxuZXRjXFxuZXRjaC9EUlNaR0pcXG5ldGNoZXIvTVxcbmV0Y2hpbmcvTVxcbmV0ZXJuYWwvWVBcXG5ldGVybmFsbmVzcy9NXFxuZXRlcm5pdHkvU01cXG5ldGhhbmUvTVxcbmV0aGFub2wvTVxcbmV0aGVyL01cXG5ldGhlcmVhbC9ZXFxuZXRoaWMvU01cXG5ldGhpY2FsL1VZXFxuZXRoaWNzL01cXG5ldGhtb2lkXFxuZXRobmljL1NNXFxuZXRobmljYWxseVxcbmV0aG5pY2l0eS9NXFxuZXRobm9jZW50cmljXFxuZXRobm9jZW50cmlzbS9NXFxuZXRobm9ncmFwaGVyL1NcXG5ldGhub2dyYXBoaWNcXG5ldGhub2dyYXBoaWNhbGx5XFxuZXRobm9ncmFwaHlcXG5ldGhub2xvZ2ljYWwvWVxcbmV0aG5vbG9naXN0L1NNXFxuZXRobm9sb2d5L01cXG5ldGhvbG9naWNhbFxcbmV0aG9sb2dpc3QvTVNcXG5ldGhvbG9neS9NXFxuZXRob3MvTVxcbmV0aHlsL01cXG5ldGh5bGVuZS9NXFxuZXRpb2xhdGVkXFxuZXRpb2xvZ2ljXFxuZXRpb2xvZ2ljYWxcXG5ldGlvbG9neS9TTVxcbmV0aXF1ZXR0ZS9NXFxuZXR1ZGUvU01cXG5ldHltb2xvZ2ljYWwvWVxcbmV0eW1vbG9naXN0L1NNXFxuZXR5bW9sb2d5L1NNXFxuZXVjYWx5cHRpXFxuZXVjYWx5cHR1cy9NU1xcbmV1Y2hyZS9EU01HXFxuZXVjbGlkZWFuXFxuZXVnZW5pYy9TXFxuZXVnZW5pY2FsbHlcXG5ldWdlbmljaXN0L01TXFxuZXVnZW5pY3MvTVxcbmV1a2FyeW90ZS9TTVxcbmV1a2FyeW90aWNcXG5ldWxvZ2lzdC9NU1xcbmV1bG9naXN0aWNcXG5ldWxvZ2l6ZS9aR0RSU1xcbmV1bG9naXplci9NXFxuZXVsb2d5L1NNXFxuZXVudWNoL01cXG5ldW51Y2hzXFxuZXVwaGVtaXNtL1NNXFxuZXVwaGVtaXN0aWNcXG5ldXBoZW1pc3RpY2FsbHlcXG5ldXBob25pb3VzL1lcXG5ldXBob255L01cXG5ldXBob3JpYS9NXFxuZXVwaG9yaWNcXG5ldXBob3JpY2FsbHlcXG5ldXJla2FcXG5ldXJvL01TXFxuZXVyb3BpdW0vTVxcbmV1dGVjdGljXFxuZXV0aGFuYXNpYS9NXFxuZXV0aGFuaXplL0RTR1xcbmV1dGhlbmljcy9NXFxuZXV0cm9waGljYXRpb25cXG5ldmFjdWF0ZS9YRFNHTlxcbmV2YWN1YXRpb24vTVxcbmV2YWN1ZWUvTVNcXG5ldmFkZS9EUlNaR1xcbmV2YWRlci9NXFxuZXZhbHVhdGUvQUdOVkRTWFxcbmV2YWx1YXRpb24vQU1cXG5ldmFsdWF0b3IvU1xcbmV2YW5lc2NlbmNlL01cXG5ldmFuZXNjZW50XFxuZXZhbmdlbGljXFxuZXZhbmdlbGljYWwvU01ZXFxuZXZhbmdlbGljYWxpc20vTVxcbmV2YW5nZWxpc20vTVxcbmV2YW5nZWxpc3QvTVNcXG5ldmFuZ2VsaXN0aWNcXG5ldmFuZ2VsaXplL0dEU1xcbmV2YXBvcmF0ZS9HTkRTXFxuZXZhcG9yYXRpb24vTVxcbmV2YXBvcmF0b3IvU01cXG5ldmFzaW9uL1NNXFxuZXZhc2l2ZS9ZUFxcbmV2YXNpdmVuZXNzL01cXG5ldmUvQVNNXFxuZXZlbi9NRFJZVEdTSlBcXG5ldmVuaGFuZGVkL1lcXG5ldmVuaW5nL01cXG5ldmVubmVzcy9VTVxcbmV2ZW5zb25nL01cXG5ldmVudC9TTVxcbmV2ZW50ZnVsL1VZXFxuZXZlbnRmdWxuZXNzL01cXG5ldmVudGlkZS9NXFxuZXZlbnR1YWwvWVxcbmV2ZW50dWFsaXR5L1NNXFxuZXZlbnR1YXRlL0dEU1xcbmV2ZXJcXG5ldmVyZ2xhZGUvU01cXG5ldmVyZ3JlZW4vU01cXG5ldmVybGFzdGluZy9NWVNcXG5ldmVybW9yZVxcbmV2ZXJ5XFxuZXZlcnlib2R5L01cXG5ldmVyeWRheVxcbmV2ZXJ5b25lL01cXG5ldmVyeXBsYWNlXFxuZXZlcnl0aGluZy9NXFxuZXZlcnl3aGVyZVxcbmV2aWN0L1NER1xcbmV2aWN0aW9uL01TXFxuZXZpZGVuY2UvTUdEU1xcbmV2aWRlbnQvWVxcbmV2aWwvTVJZVFNQXFxuZXZpbGRvZXIvU01cXG5ldmlsZG9pbmcvTVxcbmV2aWxsZXJcXG5ldmlsbGVzdFxcbmV2aWxuZXNzL01cXG5ldmluY2UvRFNHXFxuZXZpc2NlcmF0ZS9EU0dOXFxuZXZpc2NlcmF0aW9uL01cXG5ldm9jYXRpb24vTVNcXG5ldm9jYXRpdmUvWVxcbmV2b2tlL0RTR1xcbmV2b2x1dGlvbi9NXFxuZXZvbHV0aW9uYXJ5XFxuZXZvbHV0aW9uaXN0L1NNXFxuZXZvbHZlL0RTR1xcbmV3ZS9SU01aXFxuZXdlci9NXFxuZXgvTVNcXG5leGFieXRlL01TXFxuZXhhY2VyYmF0ZS9HTkRTXFxuZXhhY2VyYmF0aW9uL01cXG5leGFjdC9TUERSWVRHXFxuZXhhY3RpbmcvWVxcbmV4YWN0aW9uL01cXG5leGFjdGl0dWRlL01cXG5leGFjdG5lc3MvSU1cXG5leGFnZ2VyYXRlL1hEU0dOXFxuZXhhZ2dlcmF0ZWQvWVxcbmV4YWdnZXJhdGlvbi9NXFxuZXhhZ2dlcmF0b3IvTVNcXG5leGFqb3VsZS9TXFxuZXhhbHQvU0RHXFxuZXhhbHRhdGlvbi9NXFxuZXhhbS9NU1xcbmV4YW1pbmF0aW9uL0FNU1xcbmV4YW1pbmUvQUdEU1xcbmV4YW1pbmVyL01TXFxuZXhhbXBsZS9NR0RTXFxuZXhhbXBsZWQvVVxcbmV4YXNwZXJhdGUvRFNHTlxcbmV4YXNwZXJhdGVkL1lcXG5leGFzcGVyYXRpbmcvWVxcbmV4YXNwZXJhdGlvbi9NXFxuZXhjYXZhdGUvR05EU1hcXG5leGNhdmF0aW9uL01cXG5leGNhdmF0b3IvU01cXG5leGNlZWQvR1NEXFxuZXhjZWVkaW5nL1lcXG5leGNlbC9TXFxuZXhjZWxsZWRcXG5leGNlbGxlbmNlL01cXG5leGNlbGxlbmN5L1NNXFxuZXhjZWxsZW50L1lcXG5leGNlbGxpbmdcXG5leGNlbHNpb3IvTVxcbmV4Y2VwdC9HU0RcXG5leGNlcHRpb24vQlNNXFxuZXhjZXB0aW9uYWJsZS9VXFxuZXhjZXB0aW9uYWwvVVlcXG5leGNlcHRpb25hbGlzbVxcbmV4Y2VycHQvTURHU1xcbmV4Y2Vzcy9WTVNcXG5leGNlc3NpdmUvWVxcbmV4Y2hhbmdlL0RTTUdcXG5leGNoYW5nZWFibGVcXG5leGNoZXF1ZXIvU01cXG5leGNpc2UvWERTTUdOXFxuZXhjaXNpb24vTVxcbmV4Y2l0YWJpbGl0eS9NXFxuZXhjaXRhYmx5XFxuZXhjaXRhdGlvbi9NXFxuZXhjaXRlL0JEUlNMWkdcXG5leGNpdGVkL1lcXG5leGNpdGVtZW50L1NNXFxuZXhjaXRlci9NXFxuZXhjaXRpbmcvWVxcbmV4Y2l0b25cXG5leGNsXFxuZXhjbGFpbS9ER1NcXG5leGNsYW1hdGlvbi9TTVxcbmV4Y2xhbWF0b3J5XFxuZXhjbHVkZS9HRFNcXG5leGNsdXNpb24vTVNcXG5leGNsdXNpb25hcnlcXG5leGNsdXNpdmUvUE1ZU1xcbmV4Y2x1c2l2ZW5lc3MvTVxcbmV4Y2x1c2l2aXR5L01cXG5leGNvbW11bmljYXRlL0dORFNYXFxuZXhjb21tdW5pY2F0aW9uL01cXG5leGNvcmlhdGUvRFNHTlhcXG5leGNvcmlhdGlvbi9NXFxuZXhjcmVtZW50L01cXG5leGNyZW1lbnRhbFxcbmV4Y3Jlc2NlbmNlL01TXFxuZXhjcmVzY2VudFxcbmV4Y3JldGEvTVxcbmV4Y3JldGUvWEdORFNcXG5leGNyZXRpb24vTVxcbmV4Y3JldG9yeVxcbmV4Y3J1Y2lhdGluZy9ZXFxuZXhjdWxwYXRlL0RTR05cXG5leGN1bHBhdGlvbi9NXFxuZXhjdWxwYXRvcnlcXG5leGN1cnNpb24vTVNcXG5leGN1cnNpb25pc3QvTVNcXG5leGN1cnNpdmUvWVBcXG5leGN1cnNpdmVuZXNzL01cXG5leGN1c2FibGUvSVxcbmV4Y3VzYWJseS9JXFxuZXhjdXNlL0RTQk1HXFxuZXhjdXNlZC9VXFxuZXhlYy9NU1xcbmV4ZWNyYWJsZVxcbmV4ZWNyYWJseVxcbmV4ZWNyYXRlL0RTR05cXG5leGVjcmF0aW9uL01cXG5leGVjdXRlL0JYR05WRFNcXG5leGVjdXRpb24vWk1SXFxuZXhlY3V0aW9uZXIvTVxcbmV4ZWN1dGl2ZS9TTVxcbmV4ZWN1dG9yL01TXFxuZXhlY3V0cmljZXNcXG5leGVjdXRyaXgvTVxcbmV4ZWdlc2VzXFxuZXhlZ2VzaXMvTVxcbmV4ZWdldGljXFxuZXhlZ2V0aWNhbFxcbmV4ZW1wbGFyL1NNXFxuZXhlbXBsYXJ5XFxuZXhlbXBsaWZpY2F0aW9uL01cXG5leGVtcGxpZnkvR0RTWE5cXG5leGVtcHQvU0dEXFxuZXhlbXB0aW9uL1NNXFxuZXhlcmNpc2UvRFJTTVpHXFxuZXhlcmNpc2VyL01cXG5leGVydC9TREdcXG5leGVydGlvbi9NU1xcbmV4ZXVudFxcbmV4Zm9saWF0ZS9HTkRTXFxuZXhoYWxhdGlvbi9NU1xcbmV4aGFsZS9EU0dcXG5leGhhdXN0L0dWTURTXFxuZXhoYXVzdGlibGUvSVxcbmV4aGF1c3Rpb24vTVxcbmV4aGF1c3RpdmUvWVBcXG5leGhhdXN0aXZlbmVzcy9NXFxuZXhoaWJpdC9HTURTXFxuZXhoaWJpdGlvbi9NU1xcbmV4aGliaXRpb25pc20vTVxcbmV4aGliaXRpb25pc3QvTVNcXG5leGhpYml0b3IvU01cXG5leGhpbGFyYXRlL0RTR05cXG5leGhpbGFyYXRpb24vTVxcbmV4aG9ydC9TREdcXG5leGhvcnRhdGlvbi9NU1xcbmV4aHVtYXRpb24vTVNcXG5leGh1bWUvRFNHXFxuZXhpZ2VuY2UvTVNcXG5leGlnZW5jeS9TTVxcbmV4aWdlbnRcXG5leGlndWl0eS9NXFxuZXhpZ3VvdXNcXG5leGlsZS9EU01HXFxuZXhpbGljXFxuZXhpc3QvU0RHXFxuZXhpc3RlbmNlL01TXFxuZXhpc3RlbnRcXG5leGlzdGVudGlhbC9ZXFxuZXhpc3RlbnRpYWxpc20vTVxcbmV4aXN0ZW50aWFsaXN0L01TXFxuZXhpdC9NREdTXFxuZXhvYmlvbG9neS9NXFxuZXhvZHVzL01TXFxuZXhvZ2Vub3VzXFxuZXhvbi9NU1xcbmV4b25lcmF0ZS9HTkRTXFxuZXhvbmVyYXRpb24vTVxcbmV4b3BsYW5ldC9NU1xcbmV4b3JiaXRhbmNlL01cXG5leG9yYml0YW50L1lcXG5leG9yY2lzZS9EU0dcXG5leG9yY2lzbS9TTVxcbmV4b3JjaXN0L1NNXFxuZXhvc2tlbGV0b24vU01cXG5leG9zcGhlcmUvU01cXG5leG90aGVybWljXFxuZXhvdGljL1NNXFxuZXhvdGljYVxcbmV4b3RpY2FsbHlcXG5leG90aWNpc20vTVxcbmV4cFxcbmV4cGFuZC9CR1NEXFxuZXhwYW5zZS9YTU5WU1xcbmV4cGFuc2libGVcXG5leHBhbnNpb24vTVxcbmV4cGFuc2lvbmFyeVxcbmV4cGFuc2lvbmlzbS9NXFxuZXhwYW5zaW9uaXN0L01TXFxuZXhwYW5zaXZlL1lQXFxuZXhwYW5zaXZlbmVzcy9NXFxuZXhwYXQvU1xcbmV4cGF0aWF0ZS9HTkRTXFxuZXhwYXRpYXRpb24vTVxcbmV4cGF0cmlhdGUvRFNNR05cXG5leHBhdHJpYXRpb24vTVxcbmV4cGVjdC9HU0RcXG5leHBlY3RhbmN5L01cXG5leHBlY3RhbnQvWVxcbmV4cGVjdGF0aW9uL1NNXFxuZXhwZWN0b3JhbnQvU01cXG5leHBlY3RvcmF0ZS9EU0dOXFxuZXhwZWN0b3JhdGlvbi9NXFxuZXhwZWRpZW5jZS9JTVxcbmV4cGVkaWVuY2VzXFxuZXhwZWRpZW5jaWVzXFxuZXhwZWRpZW5jeS9JTVxcbmV4cGVkaWVudC9TTVlcXG5leHBlZGl0ZS9EUlNaR05YXFxuZXhwZWRpdGVyL01cXG5leHBlZGl0aW9uL01cXG5leHBlZGl0aW9uYXJ5XFxuZXhwZWRpdGlvdXMvUFlcXG5leHBlZGl0aW91c25lc3MvTVxcbmV4cGVsL1NcXG5leHBlbGxlZFxcbmV4cGVsbGluZ1xcbmV4cGVuZC9HU0JEXFxuZXhwZW5kYWJsZS9TTVxcbmV4cGVuZGl0dXJlL1NNXFxuZXhwZW5zZS9NU1xcbmV4cGVuc2l2ZS9JWVBcXG5leHBlbnNpdmVuZXNzL0lNXFxuZXhwZXJpZW5jZS9JTURcXG5leHBlcmllbmNlc1xcbmV4cGVyaWVuY2luZ1xcbmV4cGVyaWVudGlhbFxcbmV4cGVyaW1lbnQvTURSU1pHXFxuZXhwZXJpbWVudGFsL1lcXG5leHBlcmltZW50YXRpb24vTVxcbmV4cGVyaW1lbnRlci9NXFxuZXhwZXJ0L1NQTVlcXG5leHBlcnRpc2UvTVxcbmV4cGVydG5lc3MvTVxcbmV4cGlhdGUvR05EU1xcbmV4cGlhdGlvbi9NXFxuZXhwaWF0b3J5XFxuZXhwaXJhdGlvbi9NXFxuZXhwaXJlL0RTR1xcbmV4cGlyZWQvVVxcbmV4cGlyeS9NXFxuZXhwbGFpbi9BREdTXFxuZXhwbGFpbmFibGVcXG5leHBsYWluZWQvVVxcbmV4cGxhbmF0aW9uL01TXFxuZXhwbGFuYXRvcnlcXG5leHBsZXRpdmUvTVNcXG5leHBsaWNhYmxlL0lcXG5leHBsaWNhdGUvWEdORFNcXG5leHBsaWNhdGlvbi9NXFxuZXhwbGljaXQvUFlcXG5leHBsaWNpdG5lc3MvTVxcbmV4cGxvZGUvR0RTXFxuZXhwbG9pdC9aR0JNRFJTXFxuZXhwbG9pdGF0aW9uL01cXG5leHBsb2l0YXRpdmVcXG5leHBsb2l0ZWQvVVxcbmV4cGxvaXRlci9NXFxuZXhwbG9yYXRpb24vTVNcXG5leHBsb3JhdG9yeVxcbmV4cGxvcmUvWkdEUlNcXG5leHBsb3JlZC9VXFxuZXhwbG9yZXIvTVxcbmV4cGxvc2lvbi9TTVxcbmV4cGxvc2l2ZS9TUE1ZXFxuZXhwbG9zaXZlbmVzcy9NXFxuZXhwby9NU1xcbmV4cG9uZW50L01TXFxuZXhwb25lbnRpYWwvWVxcbmV4cG9uZW50aWF0aW9uXFxuZXhwb3J0L0JTWkdNRFJcXG5leHBvcnRhdGlvbi9NXFxuZXhwb3J0ZXIvTVxcbmV4cG9zZS9EU01HXFxuZXhwb3NlZC9VXFxuZXhwb3NpdGlvbi9TTVxcbmV4cG9zaXRvci9TTVxcbmV4cG9zaXRvcnlcXG5leHBvc3R1bGF0ZS9HTlhEU1xcbmV4cG9zdHVsYXRpb24vTVxcbmV4cG9zdXJlL01TXFxuZXhwb3VuZC9aR0RSU1xcbmV4cG91bmRlci9NXFxuZXhwcmVzcy9HVk1EU1lcXG5leHByZXNzZWQvVVxcbmV4cHJlc3NpYmxlL0lcXG5leHByZXNzaW9uL1NNXFxuZXhwcmVzc2lvbmlzbS9NXFxuZXhwcmVzc2lvbmlzdC9TTVxcbmV4cHJlc3Npb25pc3RpY1xcbmV4cHJlc3Npb25sZXNzL1lcXG5leHByZXNzaXZlL1BZXFxuZXhwcmVzc2l2ZW5lc3MvTVxcbmV4cHJlc3N3YXkvU01cXG5leHByb3ByaWF0ZS9HTlhEU1xcbmV4cHJvcHJpYXRpb24vTVxcbmV4cHJvcHJpYXRvci9TTVxcbmV4cHVsc2lvbi9NU1xcbmV4cHVuZ2UvR0RTXFxuZXhwdXJnYXRlL0RTR05YXFxuZXhwdXJnYXRlZC9VXFxuZXhwdXJnYXRpb24vTVxcbmV4cXVpc2l0ZS9ZUFxcbmV4cXVpc2l0ZW5lc3MvTVxcbmV4dFxcbmV4dGFudFxcbmV4dGVtcG9yYW5lb3VzL1BZXFxuZXh0ZW1wb3JhbmVvdXNuZXNzL01cXG5leHRlbXBvcmVcXG5leHRlbXBvcml6YXRpb24vTVxcbmV4dGVtcG9yaXplL0dEU1xcbmV4dGVuZC9TWkdEUkJcXG5leHRlbmRlci9NXFxuZXh0ZW5zaWJpbGl0eVxcbmV4dGVuc2libGVcXG5leHRlbnNpb24vU01cXG5leHRlbnNpb25hbFxcbmV4dGVuc2l2ZS9ZUFxcbmV4dGVuc2l2ZW5lc3MvTVxcbmV4dGVudC9TTVxcbmV4dGVudWF0ZS9EU0dOXFxuZXh0ZW51YXRpb24vTVxcbmV4dGVyaW9yL01TXFxuZXh0ZXJtaW5hdGUvRFNYR05cXG5leHRlcm1pbmF0aW9uL01cXG5leHRlcm1pbmF0b3IvTVNcXG5leHRlcm5hbC9NWVNcXG5leHRlcm5hbGl6YXRpb24vU01cXG5leHRlcm5hbGl6ZS9EU0dcXG5leHRpbmN0L0dEU1xcbmV4dGluY3Rpb24vTVNcXG5leHRpbmd1aXNoL1pHQkRSU1xcbmV4dGluZ3Vpc2hhYmxlL0lcXG5leHRpbmd1aXNoZXIvTVxcbmV4dGlycGF0ZS9HTkRTXFxuZXh0aXJwYXRpb24vTVxcbmV4dG9sL1NcXG5leHRvbGxlZFxcbmV4dG9sbGluZ1xcbmV4dG9ydC9TR0RcXG5leHRvcnRpb24vTVJaXFxuZXh0b3J0aW9uYXRlL1lcXG5leHRvcnRpb25lci9NXFxuZXh0b3J0aW9uaXN0L01TXFxuZXh0cmEvU01cXG5leHRyYWNlbGx1bGFyXFxuZXh0cmFjdC9NREdWU1xcbmV4dHJhY3Rpb24vU01cXG5leHRyYWN0b3IvTVNcXG5leHRyYWN1cnJpY3VsYXJcXG5leHRyYWRpdGUvR05CWERTXFxuZXh0cmFkaXRpb24vTVxcbmV4dHJhanVkaWNpYWxcXG5leHRyYWxlZ2FsXFxuZXh0cmFtYXJpdGFsXFxuZXh0cmFtdXJhbFxcbmV4dHJhbmVvdXMvWVxcbmV4dHJhb3JkaW5haXJlXFxuZXh0cmFvcmRpbmFyaWx5XFxuZXh0cmFvcmRpbmFyeVxcbmV4dHJhcG9sYXRlL1hHTkRTXFxuZXh0cmFwb2xhdGlvbi9NXFxuZXh0cmFzZW5zb3J5XFxuZXh0cmF0ZXJyZXN0cmlhbC9NU1xcbmV4dHJhdGVycml0b3JpYWxcXG5leHRyYXRlcnJpdG9yaWFsaXR5L01cXG5leHRyYXZhZ2FuY2UvTVNcXG5leHRyYXZhZ2FudC9ZXFxuZXh0cmF2YWdhbnphL01TXFxuZXh0cmF2ZWhpY3VsYXJcXG5leHRyZW1lL1BNWVRSU1xcbmV4dHJlbWVuZXNzL01cXG5leHRyZW1pc20vTVxcbmV4dHJlbWlzdC9NU1xcbmV4dHJlbWl0eS9TTVxcbmV4dHJpY2FibGUvSVxcbmV4dHJpY2F0ZS9HTkRTXFxuZXh0cmljYXRpb24vTVxcbmV4dHJpbnNpY1xcbmV4dHJpbnNpY2FsbHlcXG5leHRyb3ZlcnNpb24vTVxcbmV4dHJvdmVydC9TTURcXG5leHRydWRlL0dEU1xcbmV4dHJ1c2lvbi9TTVxcbmV4dHJ1c2l2ZVxcbmV4dWJlcmFuY2UvTVxcbmV4dWJlcmFudC9ZXFxuZXh1ZGF0aW9uL01cXG5leHVkZS9EU0dcXG5leHVsdC9TREdcXG5leHVsdGFudC9ZXFxuZXh1bHRhdGlvbi9NXFxuZXh1cmIvU01cXG5leHVyYmFuXFxuZXh1cmJhbml0ZS9TTVxcbmV4dXJiaWEvTVxcbmV5ZS9EU01cXG5leWViYWxsL0dNRFNcXG5leWVicm93L1NNXFxuZXllZHJvcHBlci9TTVxcbmV5ZWZ1bC9TTVxcbmV5ZWdsYXNzL01TXFxuZXllaW5nXFxuZXllbGFzaC9NU1xcbmV5ZWxlc3NcXG5leWVsZXQvU01cXG5leWVsaWQvU01cXG5leWVsaW5lci9NU1xcbmV5ZW9wZW5lci9NU1xcbmV5ZW9wZW5pbmdcXG5leWVwaWVjZS9NU1xcbmV5ZXNpZ2h0L01cXG5leWVzb3JlL01TXFxuZXllc3RyYWluL01cXG5leWV0ZWV0aFxcbmV5ZXRvb3RoL01cXG5leWV3YXNoL01cXG5leWV3aXRuZXNzL01TXFxuZi9DSUFWVFJcXG5mTVJJXFxuZmEvTVxcbmZhYlxcbmZhYmxlL0RTTVxcbmZhYnJpYy9TTVxcbmZhYnJpY2F0ZS9EU0dOWFxcbmZhYnJpY2F0aW9uL01cXG5mYWJyaWNhdG9yL1NNXFxuZmFidWxvdXMvWVxcbmZhY2FkZS9TTVxcbmZhY2Unc1xcbmZhY2UvQUNTREdcXG5mYWNlY2xvdGgvTVxcbmZhY2VjbG90aHNcXG5mYWNlbGVzc1xcbmZhY2VwYWxtL1NER1xcbmZhY2V0L1NNREdcXG5mYWNldGlvdXMvWVBcXG5mYWNldGlvdXNuZXNzL01cXG5mYWNpYWwvU01ZXFxuZmFjaWxlL1lcXG5mYWNpbGl0YXRlL0dORFNcXG5mYWNpbGl0YXRpb24vTVxcbmZhY2lsaXRhdG9yL01TXFxuZmFjaWxpdHkvU01cXG5mYWNpbmcvU01cXG5mYWNzaW1pbGUvRFNNXFxuZmFjc2ltaWxlaW5nXFxuZmFjdC9NU1xcbmZhY3Rpb24vU01cXG5mYWN0aW9uYWxcXG5mYWN0aW9uYWxpc20vTVxcbmZhY3Rpb3VzXFxuZmFjdGl0aW91c1xcbmZhY3RvaWQvU01cXG5mYWN0b3Inc1xcbmZhY3Rvci9BU0RHXFxuZmFjdG9yaWFsL01TXFxuZmFjdG9yaXphdGlvblxcbmZhY3Rvcml6ZS9HRFNcXG5mYWN0b3J5L1NNXFxuZmFjdG90dW0vU01cXG5mYWN0dWFsL1lcXG5mYWN1bHR5L1NNXFxuZmFkL0dTTURcXG5mYWRkaXNoL1BcXG5mYWRkaXN0L01TXFxuZmFkZHkvUFxcbmZhZGUvTVNcXG5mYWRpbmcvVVxcbmZhZXJpZS9TTVxcbmZhZmYvREdTXFxuZmFnL1NNXFxuZmFnZ2VkXFxuZmFnZ2luZ1xcbmZhZ2dvdC9TTVxcbmZhZ290L1NNR1xcbmZhaWVuY2UvTVxcbmZhaWwvREdKU1xcbmZhaWxpbmcvTVxcbmZhaWxsZS9NXFxuZmFpbHVyZS9TTVxcbmZhaW4vUlRcXG5mYWludC9TTURSWVRHUFxcbmZhaW50aGVhcnRlZFxcbmZhaW50bmVzcy9NXFxuZmFpci9NUllUR0pQU1xcbmZhaXJncm91bmQvTVNcXG5mYWlyaW5nL01cXG5mYWlybmVzcy9VTVxcbmZhaXJ3YXkvU01cXG5mYWlyeS9TTVxcbmZhaXJ5bGFuZC9TTVxcbmZhaXRoL01cXG5mYWl0aGZ1bCdzXFxuZmFpdGhmdWwvVVBZXFxuZmFpdGhmdWxuZXNzL1VNXFxuZmFpdGhmdWxzXFxuZmFpdGhsZXNzL1BZXFxuZmFpdGhsZXNzbmVzcy9NXFxuZmFpdGhzXFxuZmFqaXRhL1NNXFxuZmFqaXRhcy9NXFxuZmFrZS9NWkdEUlNcXG5mYWtlci9NXFxuZmFraXIvU01cXG5mYWxjb24vU01SWlxcbmZhbGNvbmVyL01cXG5mYWxjb25yeS9NXFxuZmFsbC9NTkdTXFxuZmFsbGFjaW91cy9ZXFxuZmFsbGFjeS9TTVxcbmZhbGxiYWNrXFxuZmFsbGliaWxpdHkvSU1cXG5mYWxsaWJsZS9QXFxuZmFsbGlibGVuZXNzL01cXG5mYWxsaWJseS9JXFxuZmFsbG9mZi9TTVxcbmZhbGxvdXQvTVxcbmZhbGxvdy9TTURHXFxuZmFsc2UvUFJZVFxcbmZhbHNlaG9vZC9TTVxcbmZhbHNlbmVzcy9NXFxuZmFsc2V0dG8vU01cXG5mYWxzaWUvU01cXG5mYWxzaWZpYWJsZVxcbmZhbHNpZmljYXRpb24vTVxcbmZhbHNpZmllci9NXFxuZmFsc2lmeS9EUlNaR05YXFxuZmFsc2l0eS9TTVxcbmZhbHRlci9HU0pNRFxcbmZhbHRlcmluZy9ZXFxuZmFtZSdzXFxuZmFtZS9EXFxuZmFtaWxpYWxcXG5mYW1pbGlhci9NWVNcXG5mYW1pbGlhcml0eS9VTVxcbmZhbWlsaWFyaXphdGlvbi9NXFxuZmFtaWxpYXJpemUvR0RTXFxuZmFtaWx5L1NNXFxuZmFtaW5lL1NNXFxuZmFtaXNoL0RTR1xcbmZhbW91cy9JWVxcbmZhbi9TTVxcbmZhbmF0aWMvU01cXG5mYW5hdGljYWwvWVxcbmZhbmF0aWNpc20vTVxcbmZhbmJveS9TTVxcbmZhbmNpYWJsZVxcbmZhbmNpZXIvTVxcbmZhbmNpZnVsL1lQXFxuZmFuY2lmdWxuZXNzL01cXG5mYW5jaWx5XFxuZmFuY2luZXNzL01cXG5mYW5jeS9EUlNNWlRHUFxcbmZhbmN5d29yay9NXFxuZmFuZGFuZ28vTVNcXG5mYW5kb21cXG5mYW5mYXJlL1NNXFxuZmFuZy9NRFNcXG5mYW5saWdodC9TTVxcbmZhbm5lZFxcbmZhbm5pbmdcXG5mYW5ueS9TTVxcbmZhbnRhaWwvTVNcXG5mYW50YXNpYS9TTVxcbmZhbnRhc2lzdC9TXFxuZmFudGFzaXplL0dEU1xcbmZhbnRhc3RpY1xcbmZhbnRhc3RpY2FsL1lcXG5mYW50YXN5L0RTTUdcXG5mYW56aW5lL01TXFxuZmFyXFxuZmFyYWQvU01cXG5mYXJhZGl6ZS9ER1xcbmZhcmF3YXlcXG5mYXJjZS9TTVxcbmZhcmNpY2FsL1lcXG5mYXJlL01HRFNcXG5mYXJld2VsbC9TTVxcbmZhcmluYS9NXFxuZmFyaW5hY2VvdXNcXG5mYXJtL01EUlpHU0pcXG5mYXJtZXIvTVxcbmZhcm1oYW5kL1NNXFxuZmFybWhvdXNlL1NNXFxuZmFybWluZy9NXFxuZmFybWxhbmQvTVNcXG5mYXJtc3RlYWQvTVNcXG5mYXJteWFyZC9NU1xcbmZhcm8vTVxcbmZhcnJhZ28vTVxcbmZhcnJhZ29lc1xcbmZhcnJpZXIvTVNcXG5mYXJyb3cvU01ER1xcbmZhcnNlZWluZ1xcbmZhcnNpZ2h0ZWQvUFxcbmZhcnNpZ2h0ZWRuZXNzL01cXG5mYXJ0L01ER1NcXG5mYXJ0aGVyXFxuZmFydGhlcm1vc3RcXG5mYXJ0aGVzdFxcbmZhcnRoaW5nL1NNXFxuZmFzY2lhL1NNXFxuZmFzY2ljbGUvU01cXG5mYXNjaW5hdGUvR05EU1hcXG5mYXNjaW5hdGluZy9ZXFxuZmFzY2luYXRpb24vTVxcbmZhc2Npc20vTVxcbmZhc2Npc3QvTVNcXG5mYXNjaXN0aWNcXG5mYXNoaW9uL1pHQk1EUlNcXG5mYXNoaW9uYWJsZS9VXFxuZmFzaGlvbmFibHkvVVxcbmZhc2hpb25lci9NXFxuZmFzaGlvbmlzdGEvTVNcXG5mYXN0L01EUlRHU1BcXG5mYXN0YmFjay9TTVxcbmZhc3RiYWxsL1NNXFxuZmFzdGVuL1VBR0RTXFxuZmFzdGVuZXIvU01cXG5mYXN0ZW5pbmcvTVNcXG5mYXN0aWRpb3VzL1BZXFxuZmFzdGlkaW91c25lc3MvTVxcbmZhc3RuZXNzL01TXFxuZmF0L0dTUE1EXFxuZmF0YWwvWVxcbmZhdGFsaXNtL01cXG5mYXRhbGlzdC9TTVxcbmZhdGFsaXN0aWNcXG5mYXRhbGlzdGljYWxseVxcbmZhdGFsaXR5L1NNXFxuZmF0YmFjay9NXFxuZmF0ZS9NU1xcbmZhdGVmdWwvWVBcXG5mYXRlZnVsbmVzcy9NXFxuZmF0aGVhZC9NRFNcXG5mYXRoZXIvU0dNRFlcXG5mYXRoZXJob29kL01cXG5mYXRoZXJsYW5kL01TXFxuZmF0aGVybGVzc1xcbmZhdGhvbS9TTURHQlxcbmZhdGhvbWFibGUvVVxcbmZhdGhvbWxlc3NcXG5mYXRpZ3VlL01EU0dcXG5mYXRpZ3Vlcy9NXFxuZmF0bmVzcy9NXFxuZmF0c28vU1xcbmZhdHRlbi9TREdcXG5mYXR0ZXJcXG5mYXR0ZXN0XFxuZmF0dGluZXNzL01cXG5mYXR0eS9SU01UUFxcbmZhdHVpdHkvTVxcbmZhdHVvdXMvWVBcXG5mYXR1b3VzbmVzcy9NXFxuZmF0d2EvU01cXG5mYXVjZXQvU01cXG5mYXVsdC9DU01ER1xcbmZhdWx0ZmluZGVyL1NNXFxuZmF1bHRmaW5kaW5nL01cXG5mYXVsdGlseVxcbmZhdWx0aW5lc3MvTVxcbmZhdWx0bGVzcy9QWVxcbmZhdWx0bGVzc25lc3MvTVxcbmZhdWx0eS9QUlRcXG5mYXVuL01TXFxuZmF1bmEvU01cXG5mYXV2aXNtL01cXG5mYXV2aXN0L1NNXFxuZmF1eFxcbmZhdmUvU1xcbmZhdm9yL0VTTURHXFxuZmF2b3JhYmxlL1VcXG5mYXZvcmFibHkvVVxcbmZhdm9yaXRlL1NNXFxuZmF2b3JpdGlzbS9NXFxuZmF3bi9NRFJaR1NcXG5mYXduZXIvTVxcbmZheC9HTURTXFxuZmF5L1RTTVJcXG5mYXplL0dEU1xcbmZhemVkL1VcXG5mZWFsdHkvTVxcbmZlYXIvTURHU1xcbmZlYXJmdWwvWVBcXG5mZWFyZnVsbmVzcy9NXFxuZmVhcmxlc3MvUFlcXG5mZWFybGVzc25lc3MvTVxcbmZlYXJzb21lXFxuZmVhc2liaWxpdHkvTVxcbmZlYXNpYmxlL0lVXFxuZmVhc2libHlcXG5mZWFzdC9TTURSWkdcXG5mZWFzdGVyL01cXG5mZWF0L01TXFxuZmVhdGhlci9TR01EXFxuZmVhdGhlcmJlZGRpbmcvTVxcbmZlYXRoZXJicmFpbmVkXFxuZmVhdGhlcmxlc3NcXG5mZWF0aGVyd2VpZ2h0L01TXFxuZmVhdGhlcnkvVFJcXG5mZWF0dXJlL0RTTUdcXG5mZWF0dXJlbGVzc1xcbmZlYnJpbGVcXG5mZWNhbFxcbmZlY2VzL01cXG5mZWNrbGVzcy9QWVxcbmZlY3VuZFxcbmZlY3VuZGF0ZS9HTkRTXFxuZmVjdW5kYXRpb24vTVxcbmZlY3VuZGl0eS9NXFxuZmVkL1NNXFxuZmVkZXJhbC9TTVlcXG5mZWRlcmFsaXNtL01cXG5mZWRlcmFsaXN0L01TXFxuZmVkZXJhbGl6YXRpb24vTVxcbmZlZGVyYWxpemUvR0RTXFxuZmVkZXJhdGUvRlhEU0dOXFxuZmVkZXJhdGlvbi9GTVxcbmZlZG9yYS9TTVxcbmZlZS9TTVxcbmZlZWJsZS9SVFBcXG5mZWVibGVuZXNzL01cXG5mZWVibHlcXG5mZWVkL01SWkdTSlxcbmZlZWRiYWNrL01cXG5mZWVkYmFnL1NNXFxuZmVlZGVyL01cXG5mZWVkaW5nL01cXG5mZWVkbG90L1NNXFxuZmVlbC9NUlpHU0pcXG5mZWVsZXIvTVxcbmZlZWxnb29kXFxuZmVlbGluZy9NWVxcbmZlZXRcXG5mZWlnbi9TREdcXG5mZWlnbmVkL1VcXG5mZWludC9TTURHXFxuZmVpc3R5L1RSXFxuZmVsZHNwYXIvTVxcbmZlbGljaXRhdGUvR05YRFNcXG5mZWxpY2l0YXRpb24vTVxcbmZlbGljaXRvdXMvWVxcbmZlbGljaXR5L0lTTVxcbmZlbGluZS9TTVxcbmZlbGwvTURSWlRHU1xcbmZlbGxhL1NcXG5mZWxsYXRpby9NXFxuZmVsbG93L1NNXFxuZmVsbG93bWFuL01cXG5mZWxsb3dtZW5cXG5mZWxsb3dzaGlwL01TXFxuZmVsb24vU01cXG5mZWxvbmlvdXNcXG5mZWxvbnkvU01cXG5mZWx0L01ER1NcXG5mZW1cXG5mZW1hbGUvUFNNXFxuZmVtYWxlbmVzcy9NXFxuZmVtaW5pbmUvU01ZXFxuZmVtaW5pbml0eS9NXFxuZmVtaW5pc20vTVxcbmZlbWluaXN0L1NNXFxuZmVtaW5pemUvRFNHXFxuZmVtb3JhbFxcbmZlbXVyL1NNXFxuZmVuL1NNXFxuZmVuY2UvRFJTTVpHXFxuZmVuY2VyL01cXG5mZW5jaW5nL01cXG5mZW5kL0NEUlpHU1xcbmZlbmRlci9DTVxcbmZlbmVzdHJhdGlvbi9NXFxuZmVubmVsL01cXG5mZW50YW55bC9NXFxuZmVyYWxcXG5mZXJtZW50L0ZDTVNcXG5mZXJtZW50YXRpb24vTVxcbmZlcm1lbnRlZFxcbmZlcm1lbnRpbmdcXG5mZXJtaXVtL01cXG5mZXJuL01TXFxuZmVybnkvUlRcXG5mZXJvY2lvdXMvUFlcXG5mZXJvY2lvdXNuZXNzL01cXG5mZXJvY2l0eS9NXFxuZmVycmV0L0dTTURcXG5mZXJyaWNcXG5mZXJyb21hZ25ldGljXFxuZmVycm9tYWduZXRpc21cXG5mZXJyb3VzXFxuZmVycnVsZS9NU1xcbmZlcnJ5L0RTTUdcXG5mZXJyeWJvYXQvU01cXG5mZXJyeW1hbi9NXFxuZmVycnltZW5cXG5mZXJ0aWxlL0lcXG5mZXJ0aWxpdHkvSU1cXG5mZXJ0aWxpemF0aW9uL01cXG5mZXJ0aWxpemUvRFJTWkdcXG5mZXJ0aWxpemVkL1VcXG5mZXJ0aWxpemVyL01cXG5mZXJ1bGUvU01cXG5mZXJ2ZW5jeS9NXFxuZmVydmVudC9ZXFxuZmVydmlkL1lcXG5mZXJ2b3IvTVxcbmZlc3MvRktHU0RcXG5mZXN0L01SWlZTXFxuZmVzdGFsXFxuZmVzdGVyL0dNRFxcbmZlc3RpdmFsL1NNXFxuZmVzdGl2ZS9ZUFxcbmZlc3RpdmVuZXNzL01cXG5mZXN0aXZpdHkvU01cXG5mZXN0b29uL0dNRFNcXG5mZXRhL01cXG5mZXRhbFxcbmZldGNoL0RSU1pHXFxuZmV0Y2hlci9NXFxuZmV0Y2hpbmcvWVxcbmZldGUvTUdEU1xcbmZldGlkL1BcXG5mZXRpZG5lc3MvTVxcbmZldGlzaC9NU1xcbmZldGlzaGlzbS9NXFxuZmV0aXNoaXN0L1NNXFxuZmV0aXNoaXN0aWNcXG5mZXRsb2NrL01TXFxuZmV0dGVyJ3NcXG5mZXR0ZXIvVVNHRFxcbmZldHRsZS9NXFxuZmV0dHVjY2luZS9NXFxuZmV0dXMvTVNcXG5mZXVkL01ER1NcXG5mZXVkYWxcXG5mZXVkYWxpc20vTVxcbmZldWRhbGlzdGljXFxuZmV2ZXIvU01EXFxuZmV2ZXJpc2gvWVBcXG5mZXZlcmlzaG5lc3MvTVxcbmZldy9UUE1SXFxuZmV3bmVzcy9NXFxuZmV5XFxuZmV6L01cXG5mZXp6ZXNcXG5mZlxcbmZpYW5jZS9DTVxcbmZpYW5jZWUvTVNcXG5maWFuY2VzXFxuZmlhc2NvL01cXG5maWFzY29lc1xcbmZpYXQvTVNcXG5maWIvWlNNUlxcbmZpYmJlZFxcbmZpYmJlci9TTVxcbmZpYmJpbmdcXG5maWJlci9NXFxuZmliZXJib2FyZC9NXFxuZmliZXJmaWxsL01cXG5maWJlcmdsYXNzL01cXG5maWJyaWwvU01cXG5maWJyaWxsYXRlL0dORFNcXG5maWJyaWxsYXRpb24vTVxcbmZpYnJpbi9NXFxuZmlicm9pZFxcbmZpYnJvc2lzL01cXG5maWJyb3VzXFxuZmlidWxhL01cXG5maWJ1bGFlXFxuZmlidWxhclxcbmZpY2hlL1NNXFxuZmljaHUvU01cXG5maWNrbGUvUlBUXFxuZmlja2xlbmVzcy9NXFxuZmljdGlvbi9NU1xcbmZpY3Rpb25hbC9ZXFxuZmljdGlvbmFsaXphdGlvbi9TTVxcbmZpY3Rpb25hbGl6ZS9EU0dcXG5maWN0aXRpb3VzL1lcXG5maWN0aXZlXFxuZmljdXMvTVxcbmZpZGRsZS9EUlNNWkdcXG5maWRkbGVyL01cXG5maWRkbGVzdGlja3NcXG5maWRkbHkvVFJcXG5maWRlbGl0eS9JTVxcbmZpZGdldC9TR01EXFxuZmlkZ2V0eVxcbmZpZHVjaWFyeS9TTVxcbmZpZVxcbmZpZWYvTVNcXG5maWVmZG9tL01TXFxuZmllbGQvSVNNUlpcXG5maWVsZGVkXFxuZmllbGRlci9JTVxcbmZpZWxkaW5nXFxuZmllbGRzbWFuXFxuZmllbGRzbWVuXFxuZmllbGR3b3JrL01SWlxcbmZpZWxkd29ya2VyL01cXG5maWVuZC9TTVxcbmZpZW5kaXNoL1lcXG5maWVyY2UvUFJZVFxcbmZpZXJjZW5lc3MvTVxcbmZpZXJpbmVzcy9NXFxuZmllcnkvUlBUXFxuZmllc3RhL1NNXFxuZmlmZS9NWlJTXFxuZmlmZXIvTVxcbmZpZnRlZW4vTUhTXFxuZmlmdGVlbnRoL01cXG5maWZ0ZWVudGhzXFxuZmlmdGgvTVlcXG5maWZ0aHNcXG5maWZ0aWV0aC9NXFxuZmlmdGlldGhzXFxuZmlmdHkvU01IXFxuZmlnL1NMTVxcbmZpZ2h0L1NNUlpHXFxuZmlnaHRiYWNrXFxuZmlnaHRlci9JTVNcXG5maWdodGluZy9JTVxcbmZpZ21lbnQvTVNcXG5maWd1cmF0aW9uL0ZNXFxuZmlndXJhdGl2ZS9ZXFxuZmlndXJlJ3NcXG5maWd1cmUvRkVHU0RcXG5maWd1cmVoZWFkL1NNXFxuZmlndXJpbmUvTVNcXG5maWxhbWVudC9NU1xcbmZpbGFtZW50b3VzXFxuZmlsYmVydC9NU1xcbmZpbGNoL0RTR1xcbmZpbGUncy9LQ1xcbmZpbGUvQ0FLR0RTXFxuZmlsZW5hbWUvU1xcbmZpbGVyL0NTTVxcbmZpbGV0XFxuZmlsaWFsXFxuZmlsaWJ1c3Rlci9NRFJTWkdcXG5maWxpYnVzdGVyZXIvTVxcbmZpbGlncmVlL0RTTVxcbmZpbGlncmVlaW5nXFxuZmlsaW5nJ3NcXG5maWxpbmdzXFxuZmlsbCdzXFxuZmlsbC9BSURHU1xcbmZpbGxlZC9VXFxuZmlsbGVyL01TXFxuZmlsbGV0L01ER1NcXG5maWxsaW5nL1NNXFxuZmlsbGlwL01ER1NcXG5maWxseS9TTVxcbmZpbG0vTURHU1xcbmZpbG1pbmVzcy9NXFxuZmlsbW1ha2VyL1NNXFxuZmlsbXN0cmlwL01TXFxuZmlsbXkvVFBSXFxuZmlsb1xcbmZpbHRlci9NRFJCU1pHXFxuZmlsdGVyZWQvVVxcbmZpbHRlcmVyL01cXG5maWx0aC9NXFxuZmlsdGhpbHlcXG5maWx0aGluZXNzL01cXG5maWx0aHkvUlBUXFxuZmlsdHJhdGUnc1xcbmZpbHRyYXRlL0lHTkRTXFxuZmlsdHJhdGlvbi9JTVxcbmZpbi9TTVJcXG5maW5hZ2xlL0RSU1pHXFxuZmluYWdsZXIvTVxcbmZpbmFsL1NNWVxcbmZpbmFsZS9NU1xcbmZpbmFsaXN0L1NNXFxuZmluYWxpdHkvTVxcbmZpbmFsaXphdGlvbi9NXFxuZmluYWxpemUvRFNHXFxuZmluYW5jZSdzXFxuZmluYW5jZS9BRFNHXFxuZmluYW5jaWFsL1lcXG5maW5hbmNpZXIvTVNcXG5maW5hbmNpbmcvTVxcbmZpbmNoL01TXFxuZmluZC9KTVJaR1NcXG5maW5kZXIvTVxcbmZpbmRpbmcvTVxcbmZpbmRpbmdzL01cXG5maW5lJ3MvRlxcbmZpbmUvQ0FGVEdEU1xcbmZpbmVseVxcbmZpbmVuZXNzL01cXG5maW5lcnkvQU1cXG5maW5lc3B1blxcbmZpbmVzc2UvRFNNR1xcbmZpbmdlci9NREdTSlxcbmZpbmdlcmJvYXJkL1NNXFxuZmluZ2VyaW5nL01cXG5maW5nZXJsaW5nL1NNXFxuZmluZ2VybWFyay9TXFxuZmluZ2VybmFpbC9TTVxcbmZpbmdlcnByaW50L1NHTURcXG5maW5nZXJ0aXAvTVNcXG5maW5pYWwvTVNcXG5maW5pY2FsXFxuZmluaWNraW5lc3MvTVxcbmZpbmlja3kvUlBUXFxuZmluaXMvTVNcXG5maW5pc2gnc1xcbmZpbmlzaC9BRFNHXFxuZmluaXNoZWQvVVxcbmZpbmlzaGVyL01TXFxuZmluaXRlL0lZXFxuZmluay9NREdTXFxuZmlubmVkXFxuZmlubnlcXG5maXIvWkdTSk1EUkhcXG5maXJlL01TXFxuZmlyZWFybS9TTVxcbmZpcmViYWxsL01TXFxuZmlyZWJvbWIvTURTSkdcXG5maXJlYm94L01TXFxuZmlyZWJyYW5kL1NNXFxuZmlyZWJyZWFrL1NNXFxuZmlyZWJyaWNrL1NNXFxuZmlyZWJ1Zy9TTVxcbmZpcmVjcmFja2VyL1NNXFxuZmlyZWRhbXAvTVxcbmZpcmVmaWdodC9NUlNaR1xcbmZpcmVmaWdodGVyL01cXG5maXJlZmlnaHRpbmcvTVxcbmZpcmVmbHkvU01cXG5maXJlZ3VhcmQvU1xcbmZpcmVob3VzZS9TTVxcbmZpcmVsaWdodC9aTVJcXG5maXJlbWFuL01cXG5maXJlbWVuXFxuZmlyZXBsYWNlL1NNXFxuZmlyZXBsdWcvTVNcXG5maXJlcG93ZXIvTVxcbmZpcmVwcm9vZi9EU0dcXG5maXJlci9NXFxuZmlyZXNjcmVlbi9TXFxuZmlyZXNpZGUvTVNcXG5maXJlc3Rvcm0vTVNcXG5maXJldHJhcC9NU1xcbmZpcmV0cnVjay9NU1xcbmZpcmV3YWxsL01TXFxuZmlyZXdhdGVyL01cXG5maXJld29vZC9NXFxuZmlyZXdvcmsvU01cXG5maXJtL01EUllQVEdTXFxuZmlybWFtZW50L1NNXFxuZmlybW5lc3MvTVxcbmZpcm13YXJlL01cXG5maXJzdC9TTVlcXG5maXJzdGJvcm4vU01cXG5maXJzdGhhbmRcXG5maXJ0aC9NXFxuZmlydGhzXFxuZmlzY2FsL01ZU1xcbmZpc2gvTURSU1pHXFxuZmlzaGJvd2wvU01cXG5maXNoY2FrZS9TTVxcbmZpc2hlci9NXFxuZmlzaGVybWFuL01cXG5maXNoZXJtZW5cXG5maXNoZXJ5L1NNXFxuZmlzaGhvb2svU01cXG5maXNoaWx5XFxuZmlzaGluZXNzL01cXG5maXNoaW5nL01cXG5maXNobW9uZ2VyL01TXFxuZmlzaG5ldC9TTVxcbmZpc2hwb25kL01TXFxuZmlzaHRhaWwvREdTXFxuZmlzaHdpZmUvTVxcbmZpc2h3aXZlc1xcbmZpc2h5L1RSUFxcbmZpc3NpbGVcXG5maXNzaW9uL0JNXFxuZmlzc3VyZS9TTVxcbmZpc3QvTVNcXG5maXN0ZmlnaHQvTVNcXG5maXN0ZnVsL1NNXFxuZmlzdGljdWZmcy9NXFxuZmlzdHVsYS9TTVxcbmZpc3R1bG91cy9NXFxuZml0L0tBTVNcXG5maXRmdWwvWVBcXG5maXRmdWxuZXNzL01cXG5maXRseVxcbmZpdG1lbnQvU1xcbmZpdG5lc3MvVU1cXG5maXR0ZWQvVUFcXG5maXR0ZXIvTVNcXG5maXR0ZXN0XFxuZml0dGluZy9TTVlcXG5maXZlL01aUlNcXG5maXgvWkdCSk1EUlNcXG5maXhhdGUvR05WRFNYXFxuZml4YXRpb24vTVxcbmZpeGF0aXZlL01TXFxuZml4ZWQvWVxcbmZpeGVyL01cXG5maXhpbmdzL01cXG5maXhpdHkvTVxcbmZpeHR1cmUvTVNcXG5maXp6L01EU0dcXG5maXp6bGUvRFNNR1xcbmZpenp5L1JUXFxuZmpvcmQvU01cXG5mbC9KREdcXG5mbGFiL01cXG5mbGFiYmVyZ2FzdC9TR0RcXG5mbGFiYmlseVxcbmZsYWJiaW5lc3MvTVxcbmZsYWJieS9SUFRcXG5mbGFjY2lkL1lcXG5mbGFjY2lkaXR5L01cXG5mbGFjay9TTVxcbmZsYWcvTVNcXG5mbGFnZWxsYVxcbmZsYWdlbGxhbnQvU1xcbmZsYWdlbGxhdGUvR05EU1xcbmZsYWdlbGxhdGlvbi9NXFxuZmxhZ2VsbHVtL01cXG5mbGFnZ2VkXFxuZmxhZ2dpbmcvVVxcbmZsYWdtYW4vTVxcbmZsYWdtZW5cXG5mbGFnb24vTVNcXG5mbGFncG9sZS9TTVxcbmZsYWdyYW5jZS9NXFxuZmxhZ3JhbmN5L01cXG5mbGFncmFudC9ZXFxuZmxhZ3NoaXAvU01cXG5mbGFnc3RhZmYvTVNcXG5mbGFnc3RvbmUvTVNcXG5mbGFpbC9TR01EXFxuZmxhaXIvU01cXG5mbGFrL01cXG5mbGFrZS9EU01HXFxuZmxha2luZXNzL01cXG5mbGFreS9UUlBcXG5mbGFtYWdlXFxuZmxhbWJlL01TXFxuZmxhbWJlZWRcXG5mbGFtYmVpbmdcXG5mbGFtYm95YW5jZS9NXFxuZmxhbWJveWFuY3kvTVxcbmZsYW1ib3lhbnQvWVxcbmZsYW1lL0RSU0pNWkdcXG5mbGFtZW5jby9NU1xcbmZsYW1lcHJvb2YvREdTXFxuZmxhbWV0aHJvd2VyL1NNXFxuZmxhbWluZ28vTVNcXG5mbGFtbWFiaWxpdHkvSU1cXG5mbGFtbWFibGUvU01cXG5mbGFuL01TXFxuZmxhbmdlL01TXFxuZmxhbmsvU1pHTURSXFxuZmxhbmtlci9NXFxuZmxhbm5lbC9TR01EXFxuZmxhbm5lbGV0dGUvTVxcbmZsYXAvTVNcXG5mbGFwamFjay9NU1xcbmZsYXBwZWRcXG5mbGFwcGVyL1NNXFxuZmxhcHBpbmdcXG5mbGFyZS9EU01HXFxuZmxhcmV1cC9TTVxcbmZsYXNoL1pUR01EUlNcXG5mbGFzaGJhY2svU01cXG5mbGFzaGJ1bGIvU01cXG5mbGFzaGNhcmQvU01cXG5mbGFzaGN1YmUvU01cXG5mbGFzaGVyL01cXG5mbGFzaGd1bi9TTVxcbmZsYXNoaWx5XFxuZmxhc2hpbmVzcy9NXFxuZmxhc2hpbmcvTVxcbmZsYXNobGlnaHQvTVNcXG5mbGFzaHkvUlRQXFxuZmxhc2svU01cXG5mbGF0L01ZUFNcXG5mbGF0YmVkL1NNXFxuZmxhdGJvYXQvU01cXG5mbGF0YnJlYWRcXG5mbGF0Y2FyL1NNXFxuZmxhdGZlZXRcXG5mbGF0ZmlzaC9NU1xcbmZsYXRmb290L1NNRFxcbmZsYXRpcm9uL1NNXFxuZmxhdGxhbmQvTVxcbmZsYXRsZXQvU1xcbmZsYXRtYXRlL1NcXG5mbGF0bmVzcy9NXFxuZmxhdHRlZFxcbmZsYXR0ZW4vU0RHXFxuZmxhdHRlci9TRFJaR1xcbmZsYXR0ZXJlci9NXFxuZmxhdHRlcmluZy9ZXFxuZmxhdHRlcnkvTVxcbmZsYXR0ZXN0XFxuZmxhdHRpbmdcXG5mbGF0dGlzaFxcbmZsYXR0b3AvU01cXG5mbGF0dWxlbmNlL01cXG5mbGF0dWxlbnRcXG5mbGF0dXMvTVxcbmZsYXR3YXJlL01cXG5mbGF0d29ybS9TTVxcbmZsYXVudC9NRFNHXFxuZmxhdW50aW5nL1lcXG5mbGF2b3IvTURTR0pcXG5mbGF2b3JlZC9VXFxuZmxhdm9yZnVsXFxuZmxhdm9yaW5nL01cXG5mbGF2b3JsZXNzXFxuZmxhdm9yc29tZVxcbmZsYXcvTURHU1xcbmZsYXdsZXNzL1BZXFxuZmxhd2xlc3NuZXNzL01cXG5mbGF4L01OXFxuZmxheS9ER1NcXG5mbGVhL01TXFxuZmxlYWJhZy9TTVxcbmZsZWFiaXRlL1NcXG5mbGVhcGl0L1NcXG5mbGVjay9TR01EXFxuZmxlZGdlZC9VXFxuZmxlZGdsaW5nL01TXFxuZmxlZS9TXFxuZmxlZWNlL01aR0RSU1xcbmZsZWVjZXIvTVxcbmZsZWVjaW5lc3MvTVxcbmZsZWVjeS9SVFBcXG5mbGVlaW5nXFxuZmxlZXQvU1RHTURSWVBcXG5mbGVldGluZ2x5L01cXG5mbGVldGluZ25lc3MvTVxcbmZsZWV0bmVzcy9NXFxuZmxlc2gvR01EU1lcXG5mbGVzaGx5L1RSXFxuZmxlc2hwb3QvTVNcXG5mbGVzaHkvUlRcXG5mbGV3XFxuZmxleC9BTVNcXG5mbGV4ZWRcXG5mbGV4aWJpbGl0eS9JTVxcbmZsZXhpYmxlL0lcXG5mbGV4aWJseS9JXFxuZmxleGluZ1xcbmZsZXhpb25cXG5mbGV4dGltZS9NXFxuZmxpYmJlcnRpZ2liYmV0L1NNXFxuZmxpY2svU1pHTURSXFxuZmxpY2tlci9HTURcXG5mbGllci9NXFxuZmxpZ2h0L01TXFxuZmxpZ2h0aW5lc3MvTVxcbmZsaWdodGxlc3NcXG5mbGlnaHR5L1BUUlxcbmZsaW1mbGFtL1NNXFxuZmxpbWZsYW1tZWRcXG5mbGltZmxhbW1pbmdcXG5mbGltc2lseVxcbmZsaW1zaW5lc3MvTVxcbmZsaW1zeS9UUlBcXG5mbGluY2gvR01EU1xcbmZsaW5nL0dNXFxuZmxpbnQvU01cXG5mbGludGxvY2svU01cXG5mbGludHkvVFJcXG5mbGlwL01TXFxuZmxpcHBhbmN5L01cXG5mbGlwcGFudC9ZXFxuZmxpcHBlZFxcbmZsaXBwZXIvTVNcXG5mbGlwcGVzdFxcbmZsaXBwaW5nXFxuZmxpcHB5L1NcXG5mbGlydC9TR01EXFxuZmxpcnRhdGlvbi9NU1xcbmZsaXJ0YXRpb3VzL1lQXFxuZmxpcnRhdGlvdXNuZXNzL01cXG5mbGlydHlcXG5mbGl0L01TXFxuZmxpdHRlZFxcbmZsaXR0aW5nXFxuZmxvYXQvU01EUlpHXFxuZmxvYXRlci9NXFxuZmxvY2svU01ER1xcbmZsb2NraW5nL01cXG5mbG9lL01TXFxuZmxvZy9TXFxuZmxvZ2dlZFxcbmZsb2dnZXIvU01cXG5mbG9nZ2luZy9NU1xcbmZsb29kL1NNRFJHXFxuZmxvb2RnYXRlL01TXFxuZmxvb2RsaWdodC9NRFNHXFxuZmxvb2RsaXRcXG5mbG9vZHBsYWluL01TXFxuZmxvb2R3YXRlci9NU1xcbmZsb29yL1NNREdcXG5mbG9vcmJvYXJkL01TXFxuZmxvb3JpbmcvTVxcbmZsb29yd2Fsa2VyL1NNXFxuZmxvb3p5L1NNXFxuZmxvcC9NU1xcbmZsb3Bob3VzZS9NU1xcbmZsb3BwZWRcXG5mbG9wcGlseVxcbmZsb3BwaW5lc3MvTVxcbmZsb3BwaW5nXFxuZmxvcHB5L1BSU01UXFxuZmxvcmEvU01cXG5mbG9yYWxcXG5mbG9yZXNjZW5jZS9JTVxcbmZsb3Jlc2NlbnQvSVxcbmZsb3JldC9TTVxcbmZsb3JpZC9QWVxcbmZsb3JpZG5lc3MvTVxcbmZsb3Jpbi9TTVxcbmZsb3Jpc3QvU01cXG5mbG9zcy9NRFNHXFxuZmxvc3N5L1JUXFxuZmxvdGF0aW9uL1NNXFxuZmxvdGlsbGEvTVNcXG5mbG90c2FtL01cXG5mbG91bmNlL0RTTUdcXG5mbG91bmN5XFxuZmxvdW5kZXIvTURTR1xcbmZsb3VyL1NNREdcXG5mbG91cmlzaC9HTURTXFxuZmxvdXJ5XFxuZmxvdXQvU01EUlpHXFxuZmxvdXRlci9NXFxuZmxvdy9NREdTXFxuZmxvd2NoYXJ0L1NNXFxuZmxvd2VyJ3NcXG5mbG93ZXIvQ1NER1xcbmZsb3dlcmJlZC9NU1xcbmZsb3dlcmluZXNzL01cXG5mbG93ZXJpbmcvU1xcbmZsb3dlcmxlc3NcXG5mbG93ZXJwb3QvTVNcXG5mbG93ZXJ5L1BUUlxcbmZsb3duXFxuZmx0XFxuZmx1L01cXG5mbHViL01TXFxuZmx1YmJlZFxcbmZsdWJiaW5nXFxuZmx1Y3R1YXRlL0dORFNYXFxuZmx1Y3R1YXRpb24vTVxcbmZsdWUvTVNcXG5mbHVlbmN5L01cXG5mbHVlbnQvWVxcbmZsdWZmL1NNREdcXG5mbHVmZmluZXNzL01cXG5mbHVmZnkvUlBUXFxuZmx1aWQvU01ZXFxuZmx1aWRpdHkvTVxcbmZsdWtlL1NNXFxuZmx1a3kvUlRcXG5mbHVtZS9TTVxcbmZsdW1tb3gvRFNHXFxuZmx1bmdcXG5mbHVuay9TTURHXFxuZmx1bmt5L1NNXFxuZmx1b3Jlc2NlL0RTR1xcbmZsdW9yZXNjZW5jZS9NXFxuZmx1b3Jlc2NlbnRcXG5mbHVvcmlkYXRlL0dORFNcXG5mbHVvcmlkYXRpb24vTVxcbmZsdW9yaWRlL1NNXFxuZmx1b3JpbmUvTVxcbmZsdW9yaXRlL01cXG5mbHVvcm9jYXJib24vTVNcXG5mbHVvcm9zY29wZS9TTVxcbmZsdW9yb3Njb3BpY1xcbmZsdW94ZXRpbmVcXG5mbHVycnkvR0RTTVxcbmZsdXNoL01EUlNUR1xcbmZsdXN0ZXIvTURTR1xcbmZsdXRlL0RTTUdcXG5mbHV0aW5nL01cXG5mbHV0aXN0L01TXFxuZmx1dHRlci9NRFNHXFxuZmx1dHRlcnlcXG5mbHV2aWFsXFxuZmx1eC9JTVNcXG5mbHV4ZWRcXG5mbHV4aW5nXFxuZmx5L1pUR0JEUlNNXFxuZmx5YXdheVxcbmZseWJsb3duXFxuZmx5YnkvTVxcbmZseWJ5c1xcbmZseWNhdGNoZXIvTVNcXG5mbHlpbmcvTVxcbmZseWxlYWYvTVxcbmZseWxlYXZlc1xcbmZseW92ZXIvTVNcXG5mbHlwYXBlci9TTVxcbmZseXBhc3QvU1xcbmZseXNoZWV0L1NcXG5mbHlzcGVjay9HTURTXFxuZmx5c3dhdHRlci9NU1xcbmZseXRyYXAvU1xcbmZseXdheS9TTVxcbmZseXdlaWdodC9TTVxcbmZseXdoZWVsL01TXFxuZm9hbC9NREdTXFxuZm9hbS9NREdTXFxuZm9hbWluZXNzL01cXG5mb2FteS9SVFBcXG5mb2IvU01cXG5mb2JiZWRcXG5mb2JiaW5nXFxuZm9jYWwvWVxcbmZvY3VzJ3NcXG5mb2N1cy9BRFNHXFxuZm9jdXNlZC9VXFxuZm9kZGVyL1NNXFxuZm9lL1NNXFxuZm9nJ3NcXG5mb2cvQ1NcXG5mb2dib3VuZFxcbmZvZ2dlZC9DXFxuZm9nZ2lseVxcbmZvZ2dpbmVzcy9NXFxuZm9nZ2luZy9DXFxuZm9nZ3kvUlRQXFxuZm9naG9ybi9NU1xcbmZvZ3kvU01cXG5mb2d5aXNoXFxuZm9pYmxlL1NNXFxuZm9pbC9NREdTXFxuZm9pc3QvU0RHXFxuZm9sXFxuZm9sZCdzXFxuZm9sZC9BVVNHRFxcbmZvbGRhd2F5XFxuZm9sZGVyL1NNXFxuZm9sZG91dC9NU1xcbmZvbGlhZ2UvTVxcbmZvbGljXFxuZm9saW8vU01cXG5mb2xrL01TXFxuZm9sa2xvcmUvTVxcbmZvbGtsb3JpY1xcbmZvbGtsb3Jpc3QvTVNcXG5mb2xrc2luZXNzL01cXG5mb2xrc2luZ2VyL1NNXFxuZm9sa3NpbmdpbmcvTVxcbmZvbGtzeS9QVFJcXG5mb2xrdGFsZS9NU1xcbmZvbGt3YXkvTVNcXG5mb2xsXFxuZm9sbGljbGUvTVNcXG5mb2xsb3cvU0RSWkdKXFxuZm9sbG93ZXIvTVxcbmZvbGxvd2luZy9NXFxuZm9sbG93dXAvU1xcbmZvbGx5L1NNXFxuZm9tZW50L1NHRFxcbmZvbWVudGF0aW9uL01cXG5mb25kL1JZVFBcXG5mb25kYW50L01TXFxuZm9uZGxlL0RTR1xcbmZvbmRuZXNzL01cXG5mb25kdWUvU01cXG5mb250L01TXFxuZm9udGFuZWwvTVNcXG5mb29cXG5mb29iYXJcXG5mb29kL01TXFxuZm9vZGllL1NNXFxuZm9vZHN0dWZmL1NNXFxuZm9vbC9NREdTXFxuZm9vbGVyeS9TTVxcbmZvb2xoYXJkaWx5XFxuZm9vbGhhcmRpbmVzcy9NXFxuZm9vbGhhcmR5L1RQUlxcbmZvb2xpc2gvWVBcXG5mb29saXNobmVzcy9NXFxuZm9vbHByb29mXFxuZm9vbHNjYXAvTVxcbmZvb3QvTURSWkdTSlxcbmZvb3RhZ2UvTVxcbmZvb3RiYWxsL01SWkdTXFxuZm9vdGJhbGxlci9NXFxuZm9vdGJyaWRnZS9TTVxcbmZvb3RmYWxsL01TXFxuZm9vdGhpbGwvTVNcXG5mb290aG9sZC9NU1xcbmZvb3RpZVxcbmZvb3RpbmcvTVxcbmZvb3RsZXNzXFxuZm9vdGxpZ2h0cy9NXFxuZm9vdGxpbmcvTVNcXG5mb290bG9ja2VyL1NNXFxuZm9vdGxvb3NlXFxuZm9vdG1hbi9NXFxuZm9vdG1lblxcbmZvb3Rub3RlL01HRFNcXG5mb290cGF0aC9NXFxuZm9vdHBhdGhzXFxuZm9vdHBsYXRlL1NcXG5mb290cHJpbnQvU01cXG5mb290cmFjZS9NU1xcbmZvb3RyZXN0L01TXFxuZm9vdHNpZS9TTVxcbmZvb3RzbG9nZ2luZ1xcbmZvb3Rzb3JlXFxuZm9vdHN0ZXAvTVNcXG5mb290c3Rvb2wvU01cXG5mb290d2Vhci9NXFxuZm9vdHdvcmsvTVxcbmZvb3R5XFxuZm9wL1NNXFxuZm9wcGVyeS9NXFxuZm9wcGlzaC9QXFxuZm9wcGlzaG5lc3MvTVxcbmZvci9IXFxuZm9yYVxcbmZvcmFnZS9EUlNNWkdcXG5mb3JhZ2VyL01cXG5mb3JheS9TTURHXFxuZm9yYmFkZVxcbmZvcmJlYXIvU01HXFxuZm9yYmVhcmFuY2UvTVxcbmZvcmJpZC9TXFxuZm9yYmlkZGVuXFxuZm9yYmlkZGluZy9ZU1xcbmZvcmJvcmVcXG5mb3Jib3JuZVxcbmZvcmNlL0RTTUdcXG5mb3JjZWQvVVxcbmZvcmNlZnVsL1BZXFxuZm9yY2VmdWxuZXNzL01cXG5mb3JjZXBzL01cXG5mb3JjaWJsZVxcbmZvcmNpYmx5XFxuZm9yZC9NREdTQlxcbmZvcmUvTVNcXG5mb3JlYXJtL0dTTURcXG5mb3JlYmVhci9NU1xcbmZvcmVib2RlL0dKRFNcXG5mb3JlYm9kaW5nL01cXG5mb3JlY2FzdC9NUlpHU1xcbmZvcmVjYXN0ZXIvTVxcbmZvcmVjYXN0bGUvTVNcXG5mb3JlY2xvc2UvRFNHXFxuZm9yZWNsb3N1cmUvTVNcXG5mb3JlY291cnQvU01cXG5mb3JlZG9vbS9ER1NcXG5mb3JlZmF0aGVyL01TXFxuZm9yZWZlZXRcXG5mb3JlZmluZ2VyL1NNXFxuZm9yZWZvb3QvTVxcbmZvcmVmcm9udC9TTVxcbmZvcmVnby9HXFxuZm9yZWdvZXNcXG5mb3JlZ29uZVxcbmZvcmVncm91bmQvR01EU1xcbmZvcmVoYW5kL01TXFxuZm9yZWhlYWQvTVNcXG5mb3JlaWduL1pSUFxcbmZvcmVpZ25lci9NXFxuZm9yZWlnbm5lc3MvTVxcbmZvcmVrbmV3XFxuZm9yZWtub3cvR1NcXG5mb3Jla25vd2xlZGdlL01cXG5mb3Jla25vd25cXG5mb3JlbGVnL1NNXFxuZm9yZWxpbWIvTVNcXG5mb3JlbG9jay9NU1xcbmZvcmVtYW4vTVxcbmZvcmVtYXN0L01TXFxuZm9yZW1lblxcbmZvcmVtb3N0XFxuZm9yZW5hbWUvTURTXFxuZm9yZW5vb24vTVNcXG5mb3JlbnNpYy9NU1xcbmZvcmVuc2ljYWxseVxcbmZvcmVuc2ljcy9NXFxuZm9yZW9yZGFpbi9HU0RcXG5mb3JlcGFydC9NU1xcbmZvcmVwZXJzb24vU01cXG5mb3JlcGxheS9NXFxuZm9yZXF1YXJ0ZXIvTVNcXG5mb3JlcnVubmVyL01TXFxuZm9yZXNhaWwvTVNcXG5mb3Jlc2F3XFxuZm9yZXNlZS9SU0JaXFxuZm9yZXNlZWFibGUvVVxcbmZvcmVzZWVpbmdcXG5mb3Jlc2Vlbi9VXFxuZm9yZXNlZXIvTVxcbmZvcmVzaGFkb3cvR0RTXFxuZm9yZXNob3JlL1NcXG5mb3Jlc2hvcnRlbi9EU0dcXG5mb3Jlc2lnaHQvTURcXG5mb3Jlc2lnaHRlZG5lc3MvTVxcbmZvcmVza2luL01TXFxuZm9yZXN0J3NcXG5mb3Jlc3QvQUNHRFNcXG5mb3Jlc3RhbGwvU0dEXFxuZm9yZXN0YXRpb24vQUNNXFxuZm9yZXN0ZXIvTVNcXG5mb3Jlc3RsYW5kL01cXG5mb3Jlc3RyeS9NXFxuZm9yZXRhc3RlL0RTTUdcXG5mb3JldGVsbC9HU1xcbmZvcmV0aG91Z2h0L01cXG5mb3JldG9sZFxcbmZvcmV2ZXIvTVxcbmZvcmV2ZXJtb3JlXFxuZm9yZXdhcm4vRFNHXFxuZm9yZXdlbnRcXG5mb3Jld29tYW4vTVxcbmZvcmV3b21lblxcbmZvcmV3b3JkL01TXFxuZm9yZmVpdC9HU01EXFxuZm9yZmVpdHVyZS9TTVxcbmZvcmdhdGhlci9TREdcXG5mb3JnYXZlXFxuZm9yZ2UvRFJTTVpHVkpcXG5mb3JnZXIvTVxcbmZvcmdlcnkvU01cXG5mb3JnZXQvU1xcbmZvcmdldGZ1bC9ZUFxcbmZvcmdldGZ1bG5lc3MvTVxcbmZvcmdldHRhYmxlL1VcXG5mb3JnZXR0aW5nXFxuZm9yZ2luZy9NXFxuZm9yZ2l2YWJsZS9VXFxuZm9yZ2l2ZS9CUlNaR1BcXG5mb3JnaXZlblxcbmZvcmdpdmVuZXNzL01cXG5mb3JnaXZlci9NXFxuZm9yZ2l2aW5nL1VcXG5mb3Jnby9SWkdcXG5mb3Jnb2VyL01cXG5mb3Jnb2VzXFxuZm9yZ29uZVxcbmZvcmdvdFxcbmZvcmdvdHRlbi9VXFxuZm9yay9NREdTXFxuZm9ya2Z1bC9TTVxcbmZvcmtsaWZ0L01TXFxuZm9ybG9ybi9ZXFxuZm9ybSdzXFxuZm9ybS9DQUlGREdTXFxuZm9ybWFsL1NNWVxcbmZvcm1hbGRlaHlkZS9NXFxuZm9ybWFsaW5cXG5mb3JtYWxpc20vTVxcbmZvcm1hbGlzdC9NU1xcbmZvcm1hbGl0aWVzXFxuZm9ybWFsaXR5L0lNXFxuZm9ybWFsaXphdGlvbi9NXFxuZm9ybWFsaXplL0dEU1xcbmZvcm1hdC9TTVZcXG5mb3JtYXRpb24vQ0ZBU01cXG5mb3JtYXR0ZWQvQVxcbmZvcm1hdHRpbmcvTVxcbmZvcm1lZC9VXFxuZm9ybWVyL0ZJQU1cXG5mb3JtZXJseVxcbmZvcm1maXR0aW5nXFxuZm9ybWljXFxuZm9ybWlkYWJsZVxcbmZvcm1pZGFibHlcXG5mb3JtbGVzcy9QWVxcbmZvcm1sZXNzbmVzcy9NXFxuZm9ybXVsYS9NU1xcbmZvcm11bGFlXFxuZm9ybXVsYWljXFxuZm9ybXVsYXRlL0FEU0dOWFxcbmZvcm11bGF0ZWQvVVxcbmZvcm11bGF0aW9uL0FNXFxuZm9ybXVsYXRvci9TTVxcbmZvcm5pY2F0ZS9HTkRTXFxuZm9ybmljYXRpb24vTVxcbmZvcm5pY2F0b3IvTVNcXG5mb3JzYWtlL0dTXFxuZm9yc2FrZW5cXG5mb3Jzb29rXFxuZm9yc29vdGhcXG5mb3Jzd2Vhci9TR1xcbmZvcnN3b3JlXFxuZm9yc3dvcm5cXG5mb3JzeXRoaWEvU01cXG5mb3J0L01TXFxuZm9ydGUvU01cXG5mb3J0aGNvbWluZy9NXFxuZm9ydGhyaWdodC9ZUFxcbmZvcnRocmlnaHRuZXNzL01cXG5mb3J0aHdpdGhcXG5mb3J0aWV0aC9NXFxuZm9ydGlldGhzXFxuZm9ydGlmaWNhdGlvbi9NXFxuZm9ydGlmaWVkL1VcXG5mb3J0aWZpZXIvTVxcbmZvcnRpZnkvRFJTTlpHWFxcbmZvcnRpc3NpbW9cXG5mb3J0aXR1ZGUvTVxcbmZvcnRuaWdodC9NWVNcXG5mb3J0cmVzcy9NU1xcbmZvcnR1aXRvdXMvWVBcXG5mb3J0dWl0b3VzbmVzcy9NXFxuZm9ydHVpdHkvTVxcbmZvcnR1bmF0ZS9VWVxcbmZvcnR1bmUvTVNcXG5mb3J0dW5ldGVsbGVyL1NNXFxuZm9ydHVuZXRlbGxpbmcvTVxcbmZvcnR5L1NNSFxcbmZvcnVtL1NNXFxuZm9yd2FyZC9NRFJZWlRHU1BcXG5mb3J3YXJkZXIvTVxcbmZvcndhcmRuZXNzL01cXG5mb3J3ZW50XFxuZm9zc2FcXG5mb3NzaWwvU01cXG5mb3NzaWxpemF0aW9uL01cXG5mb3NzaWxpemUvR0RTXFxuZm9zdGVyL0dTRFxcbmZvdWdodFxcbmZvdWwvTURSWVRHU1BcXG5mb3VsYXJkL01cXG5mb3VsbW91dGhlZFxcbmZvdWxuZXNzL01cXG5mb3VuZC9GU0RHXFxuZm91bmRhdGlvbi9TTVxcbmZvdW5kYXRpb25hbFxcbmZvdW5kZWQvVVxcbmZvdW5kZXIvR01EU1xcbmZvdW5kbGluZy9TTVxcbmZvdW5kcnkvU01cXG5mb3VudC9TTVxcbmZvdW50YWluL1NNXFxuZm91bnRhaW5oZWFkL01TXFxuZm91ci9NSFNcXG5mb3VyZm9sZFxcbmZvdXJwb3N0ZXIvU01cXG5mb3Vyc2NvcmUvTVxcbmZvdXJzb21lL1NNXFxuZm91cnNxdWFyZVxcbmZvdXJ0ZWVuL1NNSFxcbmZvdXJ0ZWVudGgvTVxcbmZvdXJ0ZWVudGhzXFxuZm91cnRoL01ZXFxuZm91cnRoc1xcbmZvd2wvTURHU1xcbmZveC9HTURTXFxuZm94ZmlyZS9NXFxuZm94Z2xvdmUvU01cXG5mb3hob2xlL01TXFxuZm94aG91bmQvU01cXG5mb3hodW50L0dTXFxuZm94aWx5XFxuZm94aW5lc3MvTVxcbmZveHRyb3QvTVNcXG5mb3h0cm90dGVkXFxuZm94dHJvdHRpbmdcXG5mb3h5L1JUUFxcbmZveWVyL1NNXFxuZnBzXFxuZnJcXG5mcmFjYXMvTVNcXG5mcmFjay9TREdcXG5mcmFjdGFsL1NNXFxuZnJhY3Rpb24vSVNNXFxuZnJhY3Rpb25hbC9ZXFxuZnJhY3Rpb3VzL1lQXFxuZnJhY3Rpb3VzbmVzcy9NXFxuZnJhY3R1cmUvTUdEU1xcbmZyYWcvU1xcbmZyYWdpbGUvUlRcXG5mcmFnaWxpdHkvTVxcbmZyYWdtZW50L0dNRFNcXG5mcmFnbWVudGFyeS9NXFxuZnJhZ21lbnRhdGlvbi9NXFxuZnJhZ3JhbmNlL01TXFxuZnJhZ3JhbnQvWVxcbmZyYWlsL1JZVFBcXG5mcmFpbG5lc3MvTVxcbmZyYWlsdHkvU01cXG5mcmFtZS9EUlNNWkdcXG5mcmFtZWQvVVxcbmZyYW1lci9NXFxuZnJhbWV3b3JrL1NNXFxuZnJhbmMvU01cXG5mcmFuY2hpc2Unc1xcbmZyYW5jaGlzZS9FRFNHXFxuZnJhbmNoaXNlZS9TTVxcbmZyYW5jaGlzZXIvU01cXG5mcmFuY2l1bS9NXFxuZnJhbmNvcGhvbmVcXG5mcmFuZ2liaWxpdHkvTVxcbmZyYW5naWJsZVxcbmZyYW5rL1NNRFJZVEdQXFxuZnJhbmtmdXJ0ZXIvTVNcXG5mcmFua2luY2Vuc2UvTVxcbmZyYW5rbmVzcy9NXFxuZnJhbnRpY1xcbmZyYW50aWNhbGx5XFxuZnJhcHBlL1NNXFxuZnJhdC9NU1xcbmZyYXRlcm5hbC9ZXFxuZnJhdGVybml0eS9GU01cXG5mcmF0ZXJuaXphdGlvbi9NXFxuZnJhdGVybml6ZS9aR0RSU1xcbmZyYXRlcm5pemVyL01cXG5mcmF0cmljaWRhbFxcbmZyYXRyaWNpZGUvTVNcXG5mcmF1ZCdzXFxuZnJhdWQvU1xcbmZyYXVkc3Rlci9TXFxuZnJhdWR1bGVuY2UvTVxcbmZyYXVkdWxlbnQvWVxcbmZyYXVnaHRcXG5mcmF5J3NcXG5mcmF5L0NER1NcXG5mcmF6emxlL01HRFNcXG5mcmVhay9TTURHXFxuZnJlYWtpc2gvWVBcXG5mcmVha2lzaG5lc3MvTVxcbmZyZWFreS9SVFxcbmZyZWNrbGUvRFNNR1xcbmZyZWNrbHlcXG5mcmVlL1lURFJTXFxuZnJlZWJhc2UvTUdEU1xcbmZyZWViaWUvU01cXG5mcmVlYm9vdGVyL1NNXFxuZnJlZWJvcm5cXG5mcmVlZG1hbi9NXFxuZnJlZWRtZW5cXG5mcmVlZG9tL1NNXFxuZnJlZWhhbmRcXG5mcmVlaG9sZC9aTVJTXFxuZnJlZWhvbGRlci9NXFxuZnJlZWluZ1xcbmZyZWVsYW5jZS9EUlNNWkdcXG5mcmVlbGFuY2VyL01cXG5mcmVlbG9hZC9TRFJaR1xcbmZyZWVsb2FkZXIvTVxcbmZyZWVtYW4vTVxcbmZyZWVtYXNvbnJ5XFxuZnJlZW1lblxcbmZyZWVwaG9uZVxcbmZyZWVzaWEvU1xcbmZyZWVzdGFuZGluZ1xcbmZyZWVzdG9uZS9TTVxcbmZyZWVzdHlsZS9TTVxcbmZyZWV0aGlua2VyL1NNXFxuZnJlZXRoaW5raW5nL01cXG5mcmVld2FyZS9NXFxuZnJlZXdheS9NU1xcbmZyZWV3aGVlbC9ER1NcXG5mcmVld2lsbFxcbmZyZWV6YWJsZVxcbmZyZWV6ZSdzXFxuZnJlZXplL1VBR1NcXG5mcmVlemVyL01TXFxuZnJlZXppbmcnc1xcbmZyZWlnaHQvTURSWkdTXFxuZnJlaWdodGVyL01cXG5mcmVuY2hcXG5mcmVuZW15L1NcXG5mcmVuZXRpY1xcbmZyZW5ldGljYWxseVxcbmZyZW56aWVkL1lcXG5mcmVuenkvRFNNXFxuZnJlcVxcbmZyZXF1ZW5jaWVzXFxuZnJlcXVlbmN5L0lNXFxuZnJlcXVlbnQvRFJZU1pUR1xcbmZyZXF1ZW50ZWQvVVxcbmZyZXF1ZW50ZXIvTVxcbmZyZXNjby9NXFxuZnJlc2NvZXNcXG5mcmVzaC9QTlJZWFpUXFxuZnJlc2hlbi9aR0RSXFxuZnJlc2hlbmVyL01cXG5mcmVzaGV0L01TXFxuZnJlc2htYW4vTVxcbmZyZXNobWVuXFxuZnJlc2huZXNzL01cXG5mcmVzaHdhdGVyL01cXG5mcmV0L01TXFxuZnJldGZ1bC9ZUFxcbmZyZXRmdWxuZXNzL01cXG5mcmV0c2F3L01TXFxuZnJldHRlZFxcbmZyZXR0aW5nXFxuZnJldHdvcmsvTVxcbmZyaWFibGVcXG5mcmlhci9TTVxcbmZyaWFyeS9TTVxcbmZyaWNhc3NlZS9EU01cXG5mcmljYXNzZWVpbmdcXG5mcmljYXRpdmUvU01cXG5mcmljdGlvbi9TTVxcbmZyaWN0aW9uYWxcXG5mcmlkZ2UvU01cXG5mcmllZGNha2UvTVNcXG5mcmllbmQnc1xcbmZyaWVuZC9VR1NEWVxcbmZyaWVuZGxlc3NcXG5mcmllbmRsaWVzXFxuZnJpZW5kbGluZXNzL1VNXFxuZnJpZW5kbHknc1xcbmZyaWVuZGx5L1VQVFJcXG5mcmllbmRzaGlwL01TXFxuZnJpZXplL1NNXFxuZnJpZy9TXFxuZnJpZ2F0ZS9NU1xcbmZyaWdnZWRcXG5mcmlnZ2luZ1xcbmZyaWdodC9TWEdNRE5cXG5mcmlnaHRlbi9ER1xcbmZyaWdodGVuaW5nL1lcXG5mcmlnaHRmdWwvUFlcXG5mcmlnaHRmdWxuZXNzL01cXG5mcmlnaWQvWVBcXG5mcmlnaWRpdHkvTVxcbmZyaWdpZG5lc3MvTVxcbmZyaWxsL1NNRFxcbmZyaWxseS9UUlxcbmZyaW5nZSdzXFxuZnJpbmdlL0lEU0dcXG5mcmlwcGVyeS9TTVxcbmZyaXNrL1NER1xcbmZyaXNraWx5XFxuZnJpc2tpbmVzcy9NXFxuZnJpc2t5L1RSUFxcbmZyaXNzb24vU1xcbmZyaXR0ZXIvTURTR1xcbmZyaXR6L01cXG5mcml2b2xpdHkvU01cXG5mcml2b2xvdXMvUFlcXG5mcml2b2xvdXNuZXNzL01cXG5mcml6ei9NRFNZR1xcbmZyaXp6bGUvTUdEU1xcbmZyaXp6eS9UUlxcbmZyb1xcbmZyb2NrJ3NcXG5mcm9jay9DVVNcXG5mcm9nL01TXFxuZnJvZ2dpbmcvU1xcbmZyb2dtYW4vTVxcbmZyb2dtYXJjaC9HRFNcXG5mcm9nbWVuXFxuZnJvZ3NwYXduXFxuZnJvbGljL1NNXFxuZnJvbGlja2VkXFxuZnJvbGlja2VyL1NNXFxuZnJvbGlja2luZ1xcbmZyb2xpY3NvbWVcXG5mcm9tXFxuZnJvbmQvU01cXG5mcm9udCdzXFxuZnJvbnQvRlNER1xcbmZyb250YWdlL01TXFxuZnJvbnRhbC9ZXFxuZnJvbnRiZW5jaC9aUlNcXG5mcm9udGllci9NU1xcbmZyb250aWVyc21hbi9NXFxuZnJvbnRpZXJzbWVuXFxuZnJvbnRpZXJzd29tYW5cXG5mcm9udGllcnN3b21lblxcbmZyb250aXNwaWVjZS9NU1xcbmZyb250d2FyZC9TXFxuZnJvc2gvTVxcbmZyb3N0J3NcXG5mcm9zdC9DU0RHXFxuZnJvc3RiaXRcXG5mcm9zdGJpdGUvTUdTXFxuZnJvc3RiaXR0ZW5cXG5mcm9zdGlseVxcbmZyb3N0aW5lc3MvTVxcbmZyb3N0aW5nL1NNXFxuZnJvc3R5L1RQUlxcbmZyb3RoL01ER1xcbmZyb3RoaW5lc3MvTVxcbmZyb3Roc1xcbmZyb3RoeS9UUFJcXG5mcm91ZnJvdS9NXFxuZnJvd24vU01ER1xcbmZyb3d6aWx5XFxuZnJvd3ppbmVzcy9NXFxuZnJvd3p5L1RQUlxcbmZyb3plL0FVXFxuZnJvemVuL1VBXFxuZnJ1Y3RpZnkvRFNHXFxuZnJ1Y3Rvc2UvTVxcbmZydWdhbC9ZXFxuZnJ1Z2FsaXR5L01cXG5mcnVpdC9TTURHXFxuZnJ1aXRjYWtlL01TXFxuZnJ1aXRlcmVyL1NcXG5mcnVpdGZ1bC9ZUFxcbmZydWl0ZnVsbmVzcy9NXFxuZnJ1aXRpbmVzcy9NXFxuZnJ1aXRpb24vTVxcbmZydWl0bGVzcy9QWVxcbmZydWl0bGVzc25lc3MvTVxcbmZydWl0eS9UUFJcXG5mcnVtcC9TTVxcbmZydW1waXNoXFxuZnJ1bXB5L1RSXFxuZnJ1c3RyYXRlL0dOWERTXFxuZnJ1c3RyYXRpbmcvWVxcbmZydXN0cmF0aW9uL01cXG5mcnVzdHVtL01TXFxuZnJ5L0dEU01cXG5mcnllci9TTVxcbmZ0XFxuZnRwL1pHU1xcbmZ1Y2hzaWEvTVNcXG5mdWNrL1NNR0RSWiFcXG5mdWNrZXIvTSFcXG5mdWNraGVhZC9TIVxcbmZ1ZGRsZS9EU01HXFxuZnVkZ2UvRFNNR1xcbmZ1ZWhyZXIvTVNcXG5mdWVsJ3NcXG5mdWVsL0FER1NcXG5mdWdcXG5mdWdhbFxcbmZ1Z2d5XFxuZnVnaXRpdmUvTVNcXG5mdWd1ZS9TTVxcbmZ1aHJlci9TTVxcbmZ1bGNydW0vTVNcXG5mdWxmaWxsL0xER1NcXG5mdWxmaWxsZWQvVVxcbmZ1bGZpbGxpbmcvVVxcbmZ1bGZpbGxtZW50L01cXG5mdWxsL01EUlpUR1NQXFxuZnVsbGJhY2svTVNcXG5mdWxsZXIvTVxcbmZ1bGxuZXNzL01cXG5mdWxseVxcbmZ1bG1pbmF0ZS9EU1hHTlxcbmZ1bG1pbmF0aW9uL01cXG5mdWxzb21lL1BZXFxuZnVsc29tZW5lc3MvTVxcbmZ1bS9TXFxuZnVtYmxlL0RSU01aR1xcbmZ1bWJsZXIvTVxcbmZ1bWJsaW5nL1lcXG5mdW1lL01HRFNcXG5mdW1pZ2FudC9NU1xcbmZ1bWlnYXRlL0dORFNcXG5mdW1pZ2F0aW9uL01cXG5mdW1pZ2F0b3IvU01cXG5mdW15L1JUXFxuZnVuL01cXG5mdW5jdGlvbi9NREdTXFxuZnVuY3Rpb25hbC9ZXFxuZnVuY3Rpb25hbGlzbVxcbmZ1bmN0aW9uYWxpc3QvU1xcbmZ1bmN0aW9uYWxpdHkvU1xcbmZ1bmN0aW9uYXJ5L1NNXFxuZnVuY3RvclxcbmZ1bmQvQU1ER1NcXG5mdW5kYW1lbnRhbC9TTVlcXG5mdW5kYW1lbnRhbGlzbS9NXFxuZnVuZGFtZW50YWxpc3QvU01cXG5mdW5kZWQvVVxcbmZ1bmRpbmcvTVxcbmZ1bmRyYWlzZXIvTVNcXG5mdW5kcmFpc2luZ1xcbmZ1bmVyYWwvTVNcXG5mdW5lcmFyeVxcbmZ1bmVyZWFsL1lcXG5mdW5mYWlyL1NcXG5mdW5nYWxcXG5mdW5naVxcbmZ1bmdpYmxlL01TXFxuZnVuZ2ljaWRhbFxcbmZ1bmdpY2lkZS9NU1xcbmZ1bmdvaWRcXG5mdW5nb3VzXFxuZnVuZ3VzL01cXG5mdW5pY3VsYXIvU01cXG5mdW5rL01ER1NcXG5mdW5raW5lc3MvTVxcbmZ1bmt5L1BSVFxcbmZ1bm5lbC9NREdTXFxuZnVubmVyXFxuZnVubmVzdFxcbmZ1bm5pbHlcXG5mdW5uaW5lc3MvTVxcbmZ1bm55L1RQUlNNXFxuZnVubnltYW4vTVxcbmZ1bm55bWVuXFxuZnVyL1NNXFxuZnVyYmVsb3cvTVxcbmZ1cmJpc2gvQURTR1xcbmZ1cmlvdXMvWVxcbmZ1cmwnc1xcbmZ1cmwvVURHU1xcbmZ1cmxvbmcvU01cXG5mdXJsb3VnaC9HTURcXG5mdXJsb3VnaHNcXG5mdXJuXFxuZnVybmFjZS9TTVxcbmZ1cm5pc2gvQURTR1xcbmZ1cm5pc2hlZC9VXFxuZnVybmlzaGluZ3MvTVxcbmZ1cm5pdHVyZS9NXFxuZnVyb3IvU01cXG5mdXJvc2VtaWRlXFxuZnVycmVkXFxuZnVycmllci9NXFxuZnVycmluZXNzL01cXG5mdXJyaW5nL01cXG5mdXJyb3cvTURTR1xcbmZ1cnJ5L1pUUlBcXG5mdXJ0aGVyL1NHRFxcbmZ1cnRoZXJhbmNlL01cXG5mdXJ0aGVybW9yZVxcbmZ1cnRoZXJtb3N0XFxuZnVydGhlc3RcXG5mdXJ0aXZlL1lQXFxuZnVydGl2ZW5lc3MvTVxcbmZ1cnkvU01cXG5mdXJ6ZS9NXFxuZnVzZSdzL0FcXG5mdXNlL0NBSUZHRFNcXG5mdXNlZS9TTVxcbmZ1c2VsYWdlL1NNXFxuZnVzaWJpbGl0eS9NXFxuZnVzaWJsZVxcbmZ1c2lsaWVyL1NNXFxuZnVzaWxsYWRlL01TXFxuZnVzaW9uL0lGS1NNXFxuZnVzcy9NRFNHXFxuZnVzc2J1ZGdldC9NU1xcbmZ1c3NpbHlcXG5mdXNzaW5lc3MvTVxcbmZ1c3Nwb3QvU01cXG5mdXNzeS9UUlBcXG5mdXN0aWFuL01cXG5mdXN0aW5lc3MvTVxcbmZ1c3R5L1RSUFxcbmZ1dFxcbmZ1dGlsZS9ZXFxuZnV0aWxpdHkvTVxcbmZ1dG9uL1NNXFxuZnV0dXJlL01TXFxuZnV0dXJpc20vTVxcbmZ1dHVyaXN0L01TXFxuZnV0dXJpc3RpY1xcbmZ1dHVyaXR5L1NNXFxuZnV0dXJvbG9naXN0L01TXFxuZnV0dXJvbG9neS9NXFxuZnV0ei9EU0dcXG5mdXp6L01EU0dcXG5mdXp6YmFsbC9TXFxuZnV6emlseVxcbmZ1enppbmVzcy9NXFxuZnV6enkvUFRSXFxuZndkXFxuZnd5XFxuZy9TTlhWQlxcbmdhYi9TTVxcbmdhYmFyZGluZS9TTVxcbmdhYmJlZFxcbmdhYmJpbmVzcy9NXFxuZ2FiYmluZ1xcbmdhYmJsZS9EU01HXFxuZ2FiYnkvUlRQXFxuZ2FiZXJkaW5lL1NNXFxuZ2FiZmVzdC9NU1xcbmdhYmxlL0RTTVxcbmdhZC9TXFxuZ2FkYWJvdXQvU01cXG5nYWRkZWRcXG5nYWRkZXIvU01cXG5nYWRkaW5nXFxuZ2FkZmx5L1NNXFxuZ2FkZ2V0L1NNXFxuZ2FkZ2V0cnkvTVxcbmdhZG9saW5pdW0vTVxcbmdhZmYvTURSWkdTXFxuZ2FmZmUvU01cXG5nYWZmZXIvTVxcbmdhZy9TTVxcbmdhZ2FcXG5nYWdnZWRcXG5nYWdnaW5nXFxuZ2FnZ2xlL1NNXFxuZ2FpZXR5L01cXG5nYWlseVxcbmdhaW4nc1xcbmdhaW4vQURHU1xcbmdhaW5lci9TTVxcbmdhaW5mdWwvWVxcbmdhaW5zYWlkXFxuZ2FpbnNheS9aR1JTXFxuZ2FpbnNheWVyL01cXG5nYWl0L01SWlNcXG5nYWl0ZXIvTVxcbmdhbC9TTVxcbmdhbGEvTVNcXG5nYWxhY3RpY1xcbmdhbGF4eS9TTVxcbmdhbGUnc1xcbmdhbGUvQVNcXG5nYWxlbmEvTVxcbmdhbGwvTURHU1xcbmdhbGxhbnQvU01ZXFxuZ2FsbGFudHJ5L01cXG5nYWxsYmxhZGRlci9NU1xcbmdhbGxlb24vU01cXG5nYWxsZXJpYS9NU1xcbmdhbGxlcnkvU01cXG5nYWxsZXkvU01cXG5nYWxsaW1hdWZyeS9TTVxcbmdhbGxpdW0vTVxcbmdhbGxpdmFudC9HU0RcXG5nYWxsb24vU01cXG5nYWxsb3AvU01ER1xcbmdhbGxvd3MvTVxcbmdhbGxzdG9uZS9NU1xcbmdhbG9vdC9TTVxcbmdhbG9yZVxcbmdhbG9zaC9NU1xcbmdhbHVtcGgvREdcXG5nYWx1bXBoc1xcbmdhbHZhbmljXFxuZ2FsdmFuaXNtL01cXG5nYWx2YW5pemF0aW9uL01cXG5nYWx2YW5pemUvRFNHXFxuZ2FsdmFub21ldGVyL01TXFxuZ2FtYml0L1NNXFxuZ2FtYmxlL0RSU01aR1xcbmdhbWJsZXIvTVxcbmdhbWJsaW5nL01cXG5nYW1ib2wvU01ER1xcbmdhbWUvTVlUR0RSU1BcXG5nYW1lY29jay9NU1xcbmdhbWVrZWVwZXIvTVNcXG5nYW1lbmVzcy9NXFxuZ2FtZXNtYW5zaGlwL01cXG5nYW1lc3Rlci9NU1xcbmdhbWV0ZS9TTVxcbmdhbWV0aWNcXG5nYW1pbi9TTVxcbmdhbWluZS9TTVxcbmdhbWluZXNzL01cXG5nYW1pbmcvTVxcbmdhbW1hL1NNXFxuZ2FtbW9uL01cXG5nYW1teVxcbmdhbXV0L1NNXFxuZ2FteS9SVFBcXG5nYW5kZXIvU01cXG5nYW5nL01ER1NcXG5nYW5nYnVzdGVycy9NXFxuZ2FuZ2xhbmQvTVxcbmdhbmdsaWFcXG5nYW5nbGluZ1xcbmdhbmdsaW9uL01cXG5nYW5nbGlvbmljXFxuZ2FuZ3BsYW5rL1NNXFxuZ2FuZ3JlbmUvRFNNR1xcbmdhbmdyZW5vdXNcXG5nYW5nc3RhL1NcXG5nYW5nc3Rlci9TTVxcbmdhbmd3YXkvTVNcXG5nYW5qYVxcbmdhbm5ldC9TTVxcbmdhbnRsZXQvTVNcXG5nYW50cnkvU01cXG5nYXAvR1NNRFxcbmdhcGUvTVNcXG5nYXIvU0xNXFxuZ2FyYWdlL0RTTUdcXG5nYXJiL01ER1NcXG5nYXJiYWdlL01cXG5nYXJiYWdlbWFuXFxuZ2FyYmFuem8vU01cXG5nYXJibGUvRFNHXFxuZ2FyY29uL1NNXFxuZ2FyZGVuL1NaR01EUlxcbmdhcmRlbmVyL01cXG5nYXJkZW5pYS9NU1xcbmdhcmRlbmluZy9NXFxuZ2FyZmlzaC9NU1xcbmdhcmdhbnR1YW5cXG5nYXJnbGUvRFNNR1xcbmdhcmdveWxlL1NNXFxuZ2FyaXNoL1BZXFxuZ2FyaXNobmVzcy9NXFxuZ2FybGFuZC9NREdTXFxuZ2FybGljL01cXG5nYXJsaWNreVxcbmdhcm1lbnQvTVNcXG5nYXJuZXIvU0dEXFxuZ2FybmV0L1NNXFxuZ2FybmlzaC9HTE1EU1xcbmdhcm5pc2hlZS9EU01cXG5nYXJuaXNoZWVpbmdcXG5nYXJuaXNobWVudC9TTVxcbmdhcnJldC9TTVxcbmdhcnJpc29uL01EU0dcXG5nYXJyb3RlL01aR0RSU1xcbmdhcnJvdGVyL01cXG5nYXJydWxpdHkvTVxcbmdhcnJ1bG91cy9QWVxcbmdhcnJ1bG91c25lc3MvTVxcbmdhcnRlci9TTVxcbmdhcydzXFxuZ2FzL0NTXFxuZ2FzYmFnL1NNXFxuZ2FzZW91c1xcbmdhc2gvTURTR1xcbmdhc2hvbGRlci9TXFxuZ2Fza2V0L1NNXFxuZ2FzbGlnaHQvTVNcXG5nYXNtYW5cXG5nYXNtZW5cXG5nYXNvaG9sL01cXG5nYXNvbGluZS9NXFxuZ2Fzb21ldGVyL1NcXG5nYXNwL01ER1NcXG5nYXNzZWQvQ1xcbmdhc3Nlc1xcbmdhc3NpbmcvQ1xcbmdhc3N5L1JUXFxuZ2FzdHJpY1xcbmdhc3RyaXRpcy9NXFxuZ2FzdHJvZW50ZXJpdGlzL01cXG5nYXN0cm9pbnRlc3RpbmFsXFxuZ2FzdHJvbm9tZS9TXFxuZ2FzdHJvbm9taWNcXG5nYXN0cm9ub21pY2FsL1lcXG5nYXN0cm9ub215L01cXG5nYXN0cm9wb2QvU01cXG5nYXN3b3Jrcy9NXFxuZ2F0ZS9NR0RTXFxuZ2F0ZWF1XFxuZ2F0ZWF1eFxcbmdhdGVjcmFzaC9EUlNaR1xcbmdhdGVjcmFzaGVyL01cXG5nYXRlaG91c2UvU01cXG5nYXRla2VlcGVyL01TXFxuZ2F0ZXBvc3QvTVNcXG5nYXRld2F5L01TXFxuZ2F0aGVyL1NKWkdNRFJcXG5nYXRoZXJlci9NXFxuZ2F0aGVyaW5nL01cXG5nYXRvci9TTVxcbmdhdWNoZS9SUFlUXFxuZ2F1Y2hlbmVzcy9NXFxuZ2F1Y2hlcmllL01cXG5nYXVjaG8vU01cXG5nYXVkaWx5XFxuZ2F1ZGluZXNzL01cXG5nYXVkeS9SUFRcXG5nYXVnZS9EU01HXFxuZ2F1bnQvUlBUXFxuZ2F1bnRsZXQvTVNcXG5nYXVudG5lc3MvTVxcbmdhdXplL01cXG5nYXV6aW5lc3MvTVxcbmdhdXp5L1JQVFxcbmdhdmVcXG5nYXZlbC9TTVxcbmdhdm90dGUvTVNcXG5nYXdkXFxuZ2F3ay9ER1NcXG5nYXdraWx5XFxuZ2F3a2luZXNzL01cXG5nYXdreS9SUFRcXG5nYXdwL0RHU1xcbmdheS9UU1BNUlxcbmdheW5lc3MvTVxcbmdhemUvTVpHRFJTXFxuZ2F6ZWJvL1NNXFxuZ2F6ZWxsZS9NU1xcbmdhemVyL01cXG5nYXpldHRlL01HRFNcXG5nYXpldHRlZXIvTVNcXG5nYXppbGxpb24vU1xcbmdhenBhY2hvL01cXG5nYXp1bXAvREdTXFxuZ2Vhci9NREdTXFxuZ2VhcmJveC9NU1xcbmdlYXJpbmcvTVxcbmdlYXJzaGlmdC9NU1xcbmdlYXJ3aGVlbC9TTVxcbmdlY2tvL1NNXFxuZ2VkZGl0XFxuZ2VlL0RTXFxuZ2VlaW5nXFxuZ2Vlay9NU1xcbmdlZWt5L1JUXFxuZ2Vlc2VcXG5nZWV6ZXIvTVNcXG5nZWlzaGEvTVxcbmdlbC9TTVxcbmdlbGF0aW4vTVxcbmdlbGF0aW5vdXNcXG5nZWxjYXAvTVxcbmdlbGQvREpHU1xcbmdlbGRpbmcvTVxcbmdlbGlkXFxuZ2VsaWduaXRlL01cXG5nZWxsZWRcXG5nZWxsaW5nXFxuZ2VtL1NNXFxuZ2Vtb2xvZ2ljYWxcXG5nZW1vbG9naXN0L01TXFxuZ2Vtb2xvZ3kvTVxcbmdlbXN0b25lL01TXFxuZ2VuZGFybWUvTVNcXG5nZW5kZXIvTURTXFxuZ2VuZS9NU1xcbmdlbmVhbG9naWNhbC9ZXFxuZ2VuZWFsb2dpc3QvTVNcXG5nZW5lYWxvZ3kvU01cXG5nZW5lcmFcXG5nZW5lcmFsL1NNWVxcbmdlbmVyYWxpc3NpbW8vTVNcXG5nZW5lcmFsaXN0L01TXFxuZ2VuZXJhbGl0eS9TTVxcbmdlbmVyYWxpemF0aW9uL01TXFxuZ2VuZXJhbGl6ZS9HRFNcXG5nZW5lcmFsc2hpcC9NXFxuZ2VuZXJhdGUvQ0FWTkdTRFxcbmdlbmVyYXRpb24vQUNNXFxuZ2VuZXJhdGlvbmFsXFxuZ2VuZXJhdGlvbnNcXG5nZW5lcmF0b3IvU01cXG5nZW5lcmljL1NNXFxuZ2VuZXJpY2FsbHlcXG5nZW5lcm9zaXR5L1NNXFxuZ2VuZXJvdXMvUFlcXG5nZW5lcm91c25lc3MvTVxcbmdlbmVzL1NcXG5nZW5lc2lzL01cXG5nZW5ldGljL1NcXG5nZW5ldGljYWxseVxcbmdlbmV0aWNpc3QvTVNcXG5nZW5ldGljcy9NXFxuZ2VuaWFsL0ZZXFxuZ2VuaWFsaXR5L0ZNXFxuZ2VuaWN1bGF0ZVxcbmdlbmllL1NNXFxuZ2VuaWlcXG5nZW5pdGFsL0ZZXFxuZ2VuaXRhbGlhL01cXG5nZW5pdGFscy9NXFxuZ2VuaXRpdmUvTVNcXG5nZW5pdG91cmluYXJ5XFxuZ2VuaXVzL01TXFxuZ2VubmVkXFxuZ2VubmluZ1xcbmdlbm9jaWRhbFxcbmdlbm9jaWRlL01TXFxuZ2Vub21lL01TXFxuZ2Vub21pY3NcXG5nZW5yZS9TTVxcbmdlbnQvQU1TXFxuZ2VudGVlbC9ZUFxcbmdlbnRlZWxuZXNzL01cXG5nZW50aWFuL1NNXFxuZ2VudGlsZS9TTVxcbmdlbnRpbGl0eS9NXFxuZ2VudGxlL1RHRFJTUFxcbmdlbnRsZWZvbGsvTVNcXG5nZW50bGVmb2xrcy9NXFxuZ2VudGxlbWFuL01ZXFxuZ2VudGxlbWFubHkvVVxcbmdlbnRsZW1lblxcbmdlbnRsZW5lc3MvTVxcbmdlbnRsZXdvbWFuL01cXG5nZW50bGV3b21lblxcbmdlbnRseVxcbmdlbnRyaWZpY2F0aW9uL01cXG5nZW50cmlmeS9EU0dOXFxuZ2VudHJ5L1NNXFxuZ2VudWZsZWN0L0RHU1xcbmdlbnVmbGVjdGlvbi9NU1xcbmdlbnVpbmUvUFlcXG5nZW51aW5lbmVzcy9NXFxuZ2VudXMvTVxcbmdlb2NhY2hlL0RTR1xcbmdlb2NlbnRyaWNcXG5nZW9jZW50cmljYWxseVxcbmdlb2NoZW1pc3RyeS9NXFxuZ2VvZGUvU01cXG5nZW9kZXNpYy9TTVxcbmdlb2Rlc3kvTVxcbmdlb2RldGljXFxuZ2VvZW5naW5lZXJpbmdcXG5nZW9nXFxuZ2VvZ3JhcGhlci9TTVxcbmdlb2dyYXBoaWNcXG5nZW9ncmFwaGljYWwvWVxcbmdlb2dyYXBoeS9TTVxcbmdlb2xvZ2ljXFxuZ2VvbG9naWNhbC9ZXFxuZ2VvbG9naXN0L01TXFxuZ2VvbG9neS9TTVxcbmdlb21cXG5nZW9tYWduZXRpY1xcbmdlb21hZ25ldGlzbS9NXFxuZ2VvbWV0ZXJcXG5nZW9tZXRyaWNcXG5nZW9tZXRyaWNhbC9ZXFxuZ2VvbWV0cnkvU01cXG5nZW9waHlzaWNhbFxcbmdlb3BoeXNpY2lzdC9TTVxcbmdlb3BoeXNpY3MvTVxcbmdlb3BvbGl0aWNhbFxcbmdlb3BvbGl0aWNzL01cXG5nZW9zdGF0aW9uYXJ5XFxuZ2Vvc3luY2hyb25vdXNcXG5nZW9zeW5jbGluZS9NU1xcbmdlb3RoZXJtYWxcXG5nZW90aGVybWljXFxuZ2VyYW5pdW0vTVNcXG5nZXJiaWwvTVNcXG5nZXJpYXRyaWMvU1xcbmdlcmlhdHJpY2lhbi9TXFxuZ2VyaWF0cmljcy9NXFxuZ2VybS9NU1xcbmdlcm1hbmVcXG5nZXJtYW5pdW0vTVxcbmdlcm1pY2lkYWxcXG5nZXJtaWNpZGUvTVNcXG5nZXJtaW5hbC9NXFxuZ2VybWluYXRlL0dORFNcXG5nZXJtaW5hdGlvbi9NXFxuZ2Vyb250b2xvZ2ljYWxcXG5nZXJvbnRvbG9naXN0L01TXFxuZ2Vyb250b2xvZ3kvTVxcbmdlcnJ5bWFuZGVyL0dNRFNcXG5nZXJyeW1hbmRlcmluZy9NXFxuZ2VydW5kL01TXFxuZ2VzdGFsdC9TXFxuZ2VzdGFwby9NU1xcbmdlc3RhdGUvR05EU1xcbmdlc3RhdGlvbi9NXFxuZ2VzdGF0aW9uYWxcXG5nZXN0aWN1bGF0ZS9EU0dOWFxcbmdlc3RpY3VsYXRpb24vTVxcbmdlc3R1cmFsXFxuZ2VzdHVyZS9NR0RTXFxuZ2VzdW5kaGVpdFxcbmdldC9TXFxuZ2V0YXdheS9TTVxcbmdldHRpbmdcXG5nZXR1cC9NXFxuZ2V3Z2F3L1NNXFxuZ2V5c2VyL1NNXFxuZ2hhc3RsaW5lc3MvTVxcbmdoYXN0bHkvVFBSXFxuZ2hhdC9NU1xcbmdoZWVcXG5naGVya2luL01TXFxuZ2hldHRvL1NNXFxuZ2hldHRvaXplL0dEU1xcbmdob3N0L1NNRFlHXFxuZ2hvc3RsaW5lc3MvTVxcbmdob3N0bHkvUlRQXFxuZ2hvc3R3cml0ZS9aR1JTXFxuZ2hvc3R3cml0ZXIvTVxcbmdob3N0d3JpdHRlblxcbmdob3N0d3JvdGVcXG5naG91bC9TTVxcbmdob3VsaXNoL1lQXFxuZ2hvdWxpc2huZXNzL01cXG5naWFudC9TTVxcbmdpYW50ZXNzL01TXFxuZ2liYmVyL0dEU1xcbmdpYmJlcmlzaC9NXFxuZ2liYmV0L0dNRFNcXG5naWJib24vTVNcXG5naWJib3VzXFxuZ2liZS9NR0RTXFxuZ2libGV0L1NNXFxuZ2lkZGlseVxcbmdpZGRpbmVzcy9NXFxuZ2lkZHkvUlRQXFxuZ2lmdC9NREdTXFxuZ2lnL1NNXFxuZ2lnYWJpdC9TTVxcbmdpZ2FieXRlL01TXFxuZ2lnYWdyYW0vU1xcbmdpZ2FoZXJ0ei9NXFxuZ2lnYWpvdWxlL1NcXG5naWdhbWV0ZXIvU1xcbmdpZ2FudGljXFxuZ2lnYW50aWNhbGx5XFxuZ2lnYXBhc2NhbC9TXFxuZ2lnYXBpeGVsL01TXFxuZ2lnYXdhdHQvU01cXG5naWdnZWRcXG5naWdnaW5nXFxuZ2lnZ2xlL0RSU01aR1xcbmdpZ2dsZXIvTVxcbmdpZ2dseS9SVFxcbmdpZ29sby9TTVxcbmdpbGQvTURSWkdTXFxuZ2lsZGVyL01cXG5naWxkaW5nL01cXG5naWxsL01TXFxuZ2lsbGllL1NcXG5naWxsaW9uL1NcXG5naWx0L01TXFxuZ2ltYmFscy9NXFxuZ2ltY3JhY2svU01cXG5naW1jcmFja2VyeS9NXFxuZ2ltbGV0L0dTTURcXG5naW1tZS9TTVxcbmdpbW1pY2svTVNcXG5naW1taWNrcnkvTVxcbmdpbW1pY2t5XFxuZ2ltcC9NREdTXFxuZ2ltcHlcXG5naW4vU01cXG5naW5nZXIvR1NNRFlcXG5naW5nZXJicmVhZC9NXFxuZ2luZ2Vyc25hcC9TTVxcbmdpbmdlcnlcXG5naW5naGFtL01cXG5naW5naXZpdGlzL01cXG5naW5rZ28vTVxcbmdpbmtnb2VzXFxuZ2lubmVkXFxuZ2lubmluZ1xcbmdpbm9ybW91c1xcbmdpbnNlbmcvTVxcbmdpcmFmZmUvTVNcXG5naXJkL0RSWkdTXFxuZ2lyZGVyL01cXG5naXJkbGUvRFNNR1xcbmdpcmwvTVNcXG5naXJsZnJpZW5kL01TXFxuZ2lybGhvb2QvU01cXG5naXJsaXNoL1lQXFxuZ2lybGlzaG5lc3MvTVxcbmdpcmx5XFxuZ2lyby9TXFxuZ2lydC9NREdTXFxuZ2lydGgvTVxcbmdpcnRoc1xcbmdpc3QvTVxcbmdpdC9TXFxuZ2l0ZS9TXFxuZ2l2ZS9aR0pSU1xcbmdpdmVhd2F5L01TXFxuZ2l2ZWJhY2svTVNcXG5naXZlbi9TTVxcbmdpdmVyL01cXG5naXptby9TTVxcbmdpenphcmQvTVNcXG5nbGFjZS9TXFxuZ2xhY2VlZFxcbmdsYWNlaW5nXFxuZ2xhY2lhbC9ZXFxuZ2xhY2lhdGUvWEdORFNcXG5nbGFjaWF0aW9uL01cXG5nbGFjaWVyL01TXFxuZ2xhZC9NWVNQXFxuZ2xhZGRlbi9HRFNcXG5nbGFkZGVyXFxuZ2xhZGRlc3RcXG5nbGFkZS9TTVxcbmdsYWRpYXRvci9TTVxcbmdsYWRpYXRvcmlhbFxcbmdsYWRpb2xhL1NNXFxuZ2xhZGlvbGlcXG5nbGFkaW9sdXMvTVxcbmdsYWRuZXNzL01cXG5nbGFkc29tZVxcbmdsYW1cXG5nbGFtb3JpemF0aW9uL01cXG5nbGFtb3JpemUvRFNHXFxuZ2xhbW9yb3VzL1lcXG5nbGFtb3VyL0dNRFNcXG5nbGFuY2UvRFNNR1xcbmdsYW5kL1NNXFxuZ2xhbmRlc1xcbmdsYW5kdWxhclxcbmdsYW5zL01cXG5nbGFyZS9EU01HXFxuZ2xhcmluZy9ZXFxuZ2xhc25vc3QvTVxcbmdsYXNzL01EU0dcXG5nbGFzc2Jsb3dlci9NU1xcbmdsYXNzYmxvd2luZy9NXFxuZ2xhc3NmdWwvU01cXG5nbGFzc2hvdXNlL1NcXG5nbGFzc2lseVxcbmdsYXNzaW5lc3MvTVxcbmdsYXNzd2FyZS9NXFxuZ2xhc3N5L1JUUFxcbmdsYXVjb21hL01cXG5nbGF6ZS9EU01HXFxuZ2xhemllci9TTVxcbmdsYXppbmcvTVxcbmdsZWFtL1NNREdKXFxuZ2xlYW4vU0RSWkdKXFxuZ2xlYW5lci9NXFxuZ2xlYW5pbmdzL01cXG5nbGVlL01cXG5nbGVlZnVsL1lQXFxuZ2xlZWZ1bG5lc3MvTVxcbmdsZW4vTVNcXG5nbGVub2h1bWVyYWxcXG5nbGVub2lkXFxuZ2xpYi9ZUFxcbmdsaWJiZXJcXG5nbGliYmVzdFxcbmdsaWJuZXNzL01cXG5nbGlkZS9EUlNNWkdcXG5nbGlkZXIvTVxcbmdsaWRpbmcvTVxcbmdsaW1tZXIvTURHSlNcXG5nbGltbWVyaW5nL01cXG5nbGltcHNlL01HRFNcXG5nbGludC9TTURHXFxuZ2xpc3NhbmRpXFxuZ2xpc3NhbmRvL01cXG5nbGlzdGVuL01EU0dcXG5nbGlzdGVyL0RTR1xcbmdsaXRjaC9HTURTXFxuZ2xpdHRlci9NRFNHXFxuZ2xpdHRlcmF0aVxcbmdsaXR0ZXJ5XFxuZ2xpdHovTVxcbmdsaXR6eS9UUlxcbmdsb2FtaW5nL1NNXFxuZ2xvYXQvU01ER1xcbmdsb2F0aW5nL1lcXG5nbG9iL01ER1NcXG5nbG9iYWwvWVxcbmdsb2JhbGlzbS9NXFxuZ2xvYmFsaXN0L01TXFxuZ2xvYmFsaXphdGlvbi9NXFxuZ2xvYmFsaXplL0dEU1xcbmdsb2JlL1NNXFxuZ2xvYmV0cm90dGVyL01TXFxuZ2xvYmV0cm90dGluZ1xcbmdsb2J1bGFyXFxuZ2xvYnVsZS9NU1xcbmdsb2J1bGluL01cXG5nbG9ja2Vuc3BpZWwvU01cXG5nbG9vbS9NXFxuZ2xvb21pbHlcXG5nbG9vbWluZXNzL01cXG5nbG9vbXkvVFJQXFxuZ2xvcC9NXFxuZ2xvcHB5XFxuZ2xvcmlmaWNhdGlvbi9NXFxuZ2xvcmlmeS9HRFNOXFxuZ2xvcmlvdXMvSVlcXG5nbG9yeS9EU01HXFxuZ2xvc3MvTURTR1xcbmdsb3NzYXJ5L1NNXFxuZ2xvc3NpbHlcXG5nbG9zc2luZXNzL01cXG5nbG9zc29sYWxpYS9NXFxuZ2xvc3N5L1BUUlNNXFxuZ2xvdHRhbFxcbmdsb3R0aXMvTVNcXG5nbG92ZS9EU01HXFxuZ2xvdy9NRFJaR1NcXG5nbG93ZXIvR01EXFxuZ2xvd2luZy9ZXFxuZ2xvd3dvcm0vTVNcXG5nbHVjYWdvblxcbmdsdWNvc2UvTVxcbmdsdWUvTUdEU1xcbmdsdWVkL1VcXG5nbHVleVxcbmdsdWllclxcbmdsdWllc3RcXG5nbHVtL1lQXFxuZ2x1bW1lclxcbmdsdW1tZXN0XFxuZ2x1bW5lc3MvTVxcbmdsdW9uL1NcXG5nbHV0L01OU1xcbmdsdXRlbi9NXFxuZ2x1dGVub3VzXFxuZ2x1dGlub3VzL1lcXG5nbHV0dGVkXFxuZ2x1dHRpbmdcXG5nbHV0dG9uL01TXFxuZ2x1dHRvbm91cy9ZXFxuZ2x1dHRvbnkvTVxcbmdseWNlcmluL01cXG5nbHljZXJvbC9NXFxuZ2x5Y29nZW4vTVxcbmdseWNvbFxcbmdseXBoXFxuZ21cXG5nbmFybC9TTURHXFxuZ25hcmx5L1RSXFxuZ25hc2gvTURTR1xcbmduYXQvTVNcXG5nbmF3L0RHU1xcbmduZWlzcy9NXFxuZ25vY2NoaVxcbmdub21lL1NNXFxuZ25vbWljXFxuZ25vbWlzaFxcbmdudS9TTVxcbmdvL0pNUkhaR1xcbmdvYWQvTURHU1xcbmdvYWwvTVNcXG5nb2FsaWUvU01cXG5nb2Fsa2VlcGVyL01TXFxuZ29hbGtlZXBpbmcvTVxcbmdvYWxsZXNzXFxuZ29hbG1vdXRoXFxuZ29hbG1vdXRoc1xcbmdvYWxwb3N0L01TXFxuZ29hbHNjb3Jlci9TXFxuZ29hbHRlbmRlci9NU1xcbmdvYXQvTVNcXG5nb2F0ZWUvU01cXG5nb2F0aGVyZC9NU1xcbmdvYXRza2luL01TXFxuZ29iL1NNXFxuZ29iYmVkXFxuZ29iYmV0L1NNXFxuZ29iYmluZ1xcbmdvYmJsZS9EUlNNWkdcXG5nb2JibGVkeWdvb2svTVxcbmdvYmJsZXIvTVxcbmdvYmxldC9TTVxcbmdvYmxpbi9TTVxcbmdvYnNtYWNrZWRcXG5nb2JzdG9wcGVyL1NcXG5nb2QvU01cXG5nb2Rhd2Z1bFxcbmdvZGNoaWxkL01cXG5nb2RjaGlsZHJlbi9NXFxuZ29kZGFtbWl0XFxuZ29kZGFtbi9EXFxuZ29kZGF1Z2h0ZXIvTVNcXG5nb2RkZXNzL01TXFxuZ29kZmF0aGVyL1NNXFxuZ29kZm9yc2FrZW5cXG5nb2RoZWFkL01cXG5nb2Rob29kL01cXG5nb2RsZXNzL1BZXFxuZ29kbGVzc25lc3MvTVxcbmdvZGxpa2VcXG5nb2RsaW5lc3MvVU1cXG5nb2RseS9VUlRQXFxuZ29kbW90aGVyL1NNXFxuZ29kcGFyZW50L1NNXFxuZ29kc2VuZC9TTVxcbmdvZHNvbi9TTVxcbmdvZHNwZWVkXFxuZ29lci9NXFxuZ29lc1xcbmdvZmVyL1NNXFxuZ29nZ2xlL0RTTUdcXG5nb2dnbGVzL01cXG5nb2luZy9NXFxuZ29pdGVyL1NNXFxuZ29sZC9NTlNcXG5nb2xkYnJpY2svWkdTTURSXFxuZ29sZGJyaWNrZXIvTVxcbmdvbGRlbi9UUlxcbmdvbGRlbnJvZC9NXFxuZ29sZGZpZWxkL1NcXG5nb2xkZmluY2gvTVNcXG5nb2xkZmlzaC9NU1xcbmdvbGRtaW5lL1NNXFxuZ29sZHNtaXRoL01cXG5nb2xkc21pdGhzXFxuZ29sZi9NRFJaR1NcXG5nb2xmZXIvTVxcbmdvbGxpd29nL1NcXG5nb2xseS9TTVxcbmdvbmFkL1NNXFxuZ29uYWRhbFxcbmdvbmRvbGEvTVNcXG5nb25kb2xpZXIvU01cXG5nb25lL1pSXFxuZ29uZXIvTVxcbmdvbmcvTURHU1xcbmdvbmsvU1xcbmdvbm5hXFxuZ29ub3JyaGVhL01cXG5nb25vcnJoZWFsXFxuZ29uem9cXG5nb28vTVxcbmdvb2Jlci9TTVxcbmdvb2QvTVlTUFxcbmdvb2RieWUvTVNcXG5nb29kaGVhcnRlZFxcbmdvb2Rpc2hcXG5nb29kbHkvVFJcXG5nb29kbmVzcy9NXFxuZ29vZG5pZ2h0XFxuZ29vZHMvTVxcbmdvb2R3aWxsL01cXG5nb29keS9TTVxcbmdvb2V5XFxuZ29vZi9NREdTXFxuZ29vZmJhbGwvU01cXG5nb29maW5lc3MvTVxcbmdvb2Z5L1JQVFxcbmdvb2dsZS9EU01HXFxuZ29vZ2x5L1NcXG5nb29pZXJcXG5nb29pZXN0XFxuZ29vay9NU1xcbmdvb24vTVNcXG5nb29wL01cXG5nb29zZS9EU01HXFxuZ29vc2ViZXJyeS9TTVxcbmdvb3NlYnVtcHMvTVxcbmdvb3Nlc3RlcC9TXFxuZ29vc2VzdGVwcGVkXFxuZ29vc2VzdGVwcGluZ1xcbmdvcGhlci9TTVxcbmdvcmUvTUdEU1xcbmdvcmdlJ3NcXG5nb3JnZS9FRFNHXFxuZ29yZ2VvdXMvWVBcXG5nb3JnZW91c25lc3MvTVxcbmdvcmdvbi9TTVxcbmdvcmlsbGEvTVNcXG5nb3JpbHlcXG5nb3JpbmVzcy9NXFxuZ29ybWFuZGl6ZS9EUlNaR1xcbmdvcm1hbmRpemVyL01cXG5nb3JtbGVzc1xcbmdvcnAvTVNcXG5nb3JzZS9NXFxuZ29yeS9SVFBcXG5nb3NoXFxuZ29zaGF3ay9NU1xcbmdvc2xpbmcvU01cXG5nb3NwZWwvTVNcXG5nb3NzYW1lci9NXFxuZ29zc2lwL01EUlpHU1xcbmdvc3NpcGVyL01cXG5nb3NzaXB5XFxuZ290XFxuZ290Y2hhL1NcXG5nb3Roc1xcbmdvdHRhXFxuZ290dGVuXFxuZ291YWNoZS9TXFxuZ291Z2UvRFJTTVpHXFxuZ291Z2VyL01cXG5nb3VsYXNoL01TXFxuZ291cmQvU01cXG5nb3VyZGUvTVNcXG5nb3VybWFuZC9TTVxcbmdvdXJtZXQvU01cXG5nb3V0L01cXG5nb3V0eS9UUlxcbmdvdlxcbmdvdmVybi9ER1NCTFxcbmdvdmVybmFibGUvVVxcbmdvdmVybmFuY2UvTVxcbmdvdmVybmVkL1VcXG5nb3Zlcm5lc3MvTVNcXG5nb3Zlcm5tZW50L01TXFxuZ292ZXJubWVudGFsXFxuZ292ZXJub3IvU01cXG5nb3Zlcm5vcnNoaXAvTVxcbmdvdnRcXG5nb3duL01ER1NcXG5nclxcbmdyYWIvTVNcXG5ncmFiYmVkXFxuZ3JhYmJlci9NU1xcbmdyYWJiaW5nXFxuZ3JhYmJ5L1RSXFxuZ3JhY2UvRURTTUdcXG5ncmFjZWZ1bC9FUFlcXG5ncmFjZWZ1bG5lc3MvRU1cXG5ncmFjZWxlc3MvUFlcXG5ncmFjZWxlc3NuZXNzL01cXG5ncmFjaW91cy9VWVxcbmdyYWNpb3VzbmVzcy9NXFxuZ3JhY2tsZS9NU1xcbmdyYWQvTVJaU0JcXG5ncmFkYXRlL1hHTkRTXFxuZ3JhZGF0aW9uL0NNXFxuZ3JhZGUnc1xcbmdyYWRlL0NBRFNHXFxuZ3JhZGVkL1VcXG5ncmFkZXIvTVxcbmdyYWRpZW50L01TXFxuZ3JhZHVhbC9QWVxcbmdyYWR1YWxpc20vTVxcbmdyYWR1YWxuZXNzL01cXG5ncmFkdWF0ZS9YTUdORFNcXG5ncmFkdWF0aW9uL01cXG5ncmFmZml0aVxcbmdyYWZmaXRvL01cXG5ncmFmdC9TTURSWkdcXG5ncmFmdGVyL01cXG5ncmFoYW0vU1xcbmdyYWlsXFxuZ3JhaW4vSVNNRFxcbmdyYWluaW5lc3MvTVxcbmdyYWlueS9QVFJcXG5ncmFtL0tNU1xcbmdyYW1tYXIvTVNcXG5ncmFtbWFyaWFuL1NNXFxuZ3JhbW1hdGljYWwvVVlcXG5ncmFtb3Bob25lL01TXFxuZ3JhbXB1cy9NU1xcbmdyYW4vU1xcbmdyYW5hcnkvU01cXG5ncmFuZC9TTVJZUFRcXG5ncmFuZGFtL01TXFxuZ3JhbmRhdW50L01TXFxuZ3JhbmRjaGlsZC9NXFxuZ3JhbmRjaGlsZHJlbi9NXFxuZ3JhbmRkYWQvU01cXG5ncmFuZGRhZGR5L1NNXFxuZ3JhbmRkYXVnaHRlci9TTVxcbmdyYW5kZWUvTVNcXG5ncmFuZGV1ci9NXFxuZ3JhbmRmYXRoZXIvR01EWVNcXG5ncmFuZGlsb3F1ZW5jZS9NXFxuZ3JhbmRpbG9xdWVudFxcbmdyYW5kaW9zZS9ZXFxuZ3JhbmRpb3NpdHkvTVxcbmdyYW5kbWEvTVNcXG5ncmFuZG1vdGhlci9NWVNcXG5ncmFuZG5lcGhldy9NU1xcbmdyYW5kbmVzcy9NXFxuZ3JhbmRuaWVjZS9NU1xcbmdyYW5kcGEvTVNcXG5ncmFuZHBhcmVudC9NU1xcbmdyYW5kc29uL01TXFxuZ3JhbmRzdGFuZC9TR01EXFxuZ3JhbmR1bmNsZS9TTVxcbmdyYW5nZS9TTVxcbmdyYW5pdGUvTVxcbmdyYW5pdGljXFxuZ3Jhbm55L1NNXFxuZ3Jhbm9sYS9NXFxuZ3JhbnQvU01EUlpHXFxuZ3JhbnRlZS9NU1xcbmdyYW50ZXIvTVxcbmdyYW50c21hbnNoaXAvTVxcbmdyYW51bGFyXFxuZ3JhbnVsYXJpdHkvTVxcbmdyYW51bGF0ZS9HTkRTXFxuZ3JhbnVsYXRpb24vTVxcbmdyYW51bGUvTVNcXG5ncmFwZS9TTVxcbmdyYXBlZnJ1aXQvTVNcXG5ncmFwZXNob3QvTVxcbmdyYXBldmluZS9TTVxcbmdyYXBoL01ER1xcbmdyYXBoaWMvTVNcXG5ncmFwaGljYWwvWVxcbmdyYXBoaXRlL01cXG5ncmFwaG9sb2dpc3QvTVNcXG5ncmFwaG9sb2d5L01cXG5ncmFwaHNcXG5ncmFwbmVsL01TXFxuZ3JhcHBsZS9NR0RTXFxuZ3Jhc3AvU01EQkdcXG5ncmFzcy9NRFNHXFxuZ3Jhc3Nob3BwZXIvTVNcXG5ncmFzc2xhbmQvTVNcXG5ncmFzc3Jvb3RzXFxuZ3Jhc3N5L1RSXFxuZ3JhdGUvRFJTTVpHSlxcbmdyYXRlZnVsL1VZUFxcbmdyYXRlZnVsbmVzcy9VTVxcbmdyYXRlci9NXFxuZ3JhdGlmaWNhdGlvbi9NXFxuZ3JhdGlmeS9HTlhEU1xcbmdyYXRpZnlpbmcvWVxcbmdyYXRpbi9TXFxuZ3JhdGluZy9NWVxcbmdyYXRpc1xcbmdyYXRpdHVkZS9JTVxcbmdyYXR1aXRvdXMvWVBcXG5ncmF0dWl0b3VzbmVzcy9NXFxuZ3JhdHVpdHkvU01cXG5ncmF2YW1lbi9NU1xcbmdyYXZlL0RSU01ZVEdQXFxuZ3JhdmVkaWdnZXIvU01cXG5ncmF2ZWwvU0dNRFlcXG5ncmF2ZW5cXG5ncmF2ZW5lc3MvTVxcbmdyYXZlc2lkZS9NU1xcbmdyYXZlc3RvbmUvU01cXG5ncmF2ZXlhcmQvTVNcXG5ncmF2aWRcXG5ncmF2aW1ldGVyL01TXFxuZ3Jhdml0YXNcXG5ncmF2aXRhdGUvR05EU1xcbmdyYXZpdGF0aW9uL01cXG5ncmF2aXRhdGlvbmFsXFxuZ3Jhdml0eS9NXFxuZ3JhdnkvU01cXG5ncmF5L01EUlRHU1BcXG5ncmF5YmVhcmQvU01cXG5ncmF5aXNoXFxuZ3JheW5lc3MvTVxcbmdyYXplL0RSU01aR1xcbmdyYXplci9NXFxuZ3JlYXNlL0RSU01aR1xcbmdyZWFzZXBhaW50L01cXG5ncmVhc2lseVxcbmdyZWFzaW5lc3MvTVxcbmdyZWFzeS9QVFJcXG5ncmVhdC9TTVJZUFRcXG5ncmVhdGNvYXQvU01cXG5ncmVhdGhlYXJ0ZWRcXG5ncmVhdG5lc3MvTVxcbmdyZWJlL1NNXFxuZ3JlZWQvTVxcbmdyZWVkaWx5XFxuZ3JlZWRpbmVzcy9NXFxuZ3JlZWR5L1BUUlxcbmdyZWVuL0dQU01EUllUXFxuZ3JlZW5iYWNrL01TXFxuZ3JlZW5iZWx0L01TXFxuZ3JlZW5lcnkvTVxcbmdyZWVuZmllbGRcXG5ncmVlbmZseS9TXFxuZ3JlZW5nYWdlL01TXFxuZ3JlZW5ncm9jZXIvU01cXG5ncmVlbmhvcm4vU01cXG5ncmVlbmhvdXNlL1NNXFxuZ3JlZW5pc2hcXG5ncmVlbm1haWwvTVxcbmdyZWVubmVzcy9NXFxuZ3JlZW5yb29tL1NNXFxuZ3JlZW5zdG9uZVxcbmdyZWVuc3dhcmQvTVxcbmdyZWVud29vZC9NXFxuZ3JlZXQvWkdKU0RSXFxuZ3JlZXRlci9NXFxuZ3JlZXRpbmcvTVxcbmdyZWdhcmlvdXMvUFlcXG5ncmVnYXJpb3VzbmVzcy9NXFxuZ3JlbWxpbi9TTVxcbmdyZW5hZGUvU01cXG5ncmVuYWRpZXIvTVNcXG5ncmVuYWRpbmUvTVxcbmdyZXAvU1xcbmdyZXBwZWRcXG5ncmVwcGluZ1xcbmdyZXcvQVxcbmdyZXlob3VuZC9TTVxcbmdyaWJibGUvU1xcbmdyaWQvTVNcXG5ncmlkZGxlL1NNXFxuZ3JpZGRsZWNha2UvU01cXG5ncmlkaXJvbi9TTVxcbmdyaWRsb2NrL1NNRFxcbmdyaWVmL1NNXFxuZ3JpZXZhbmNlL01TXFxuZ3JpZXZlL1pHRFJTXFxuZ3JpZXZlci9NXFxuZ3JpZXZvdXMvUFlcXG5ncmlldm91c25lc3MvTVxcbmdyaWZmaW4vU01cXG5ncmlmZm9uL1NNXFxuZ3JpbGwvU0dNREpcXG5ncmlsbGUvTVNcXG5ncmltL0RZUEdcXG5ncmltYWNlL0RTTUdcXG5ncmltZS9TTVxcbmdyaW1pbmVzcy9NXFxuZ3JpbW1lclxcbmdyaW1tZXN0XFxuZ3JpbW5lc3MvTVxcbmdyaW15L1RSUFxcbmdyaW4vTVNcXG5ncmluZC9TWkdNUkpcXG5ncmluZGVyL01cXG5ncmluZHN0b25lL01TXFxuZ3JpbmdvL01TXFxuZ3Jpbm5lZFxcbmdyaW5uaW5nXFxuZ3JpcC9NRFJTWkdcXG5ncmlwZS9TTVxcbmdyaXBlci9NXFxuZ3JpcHBlL01aR0RSXFxuZ3JpcHBlci9NXFxuZ3Jpc2xpbmVzcy9NXFxuZ3Jpc2x5L1JUUFxcbmdyaXN0L01ZXFxuZ3Jpc3RsZS9NXFxuZ3Jpc3RtaWxsL01TXFxuZ3JpdC9NU1xcbmdyaXRzL01cXG5ncml0dGVkXFxuZ3JpdHRlci9TTVxcbmdyaXR0aW5lc3MvTVxcbmdyaXR0aW5nXFxuZ3JpdHR5L1JUUFxcbmdyaXp6bGUvRFNHXFxuZ3JpenpseS9UUlNNXFxuZ3JvYW4vU0dNRFxcbmdyb2F0L1NNXFxuZ3JvY2VyL01TXFxuZ3JvY2VyeS9TTVxcbmdyb2cvTVxcbmdyb2dnaWx5XFxuZ3JvZ2dpbmVzcy9NXFxuZ3JvZ2d5L1BSVFxcbmdyb2luL1NNXFxuZ3Jvay9TXFxuZ3Jva2tlZFxcbmdyb2traW5nXFxuZ3JvbW1ldC9TTVxcbmdyb29tL1NaR01EUlxcbmdyb29tZXIvTVxcbmdyb29taW5nL01cXG5ncm9vbXNtYW4vTVxcbmdyb29tc21lblxcbmdyb292ZS9NR0RTXFxuZ3Jvb3Z5L1JUXFxuZ3JvcGUvRFJTTVpHXFxuZ3JvcGVyL01cXG5ncm9zYmVhay9NU1xcbmdyb3NncmFpbi9NXFxuZ3Jvc3MvUFRHTURSU1lcXG5ncm9zc25lc3MvTVxcbmdyb3Rlc3F1ZS9TUE1ZXFxuZ3JvdGVzcXVlbmVzcy9NXFxuZ3JvdHRvL01cXG5ncm90dG9lc1xcbmdyb3R0eS9UUlxcbmdyb3VjaC9HTURTXFxuZ3JvdWNoaWx5XFxuZ3JvdWNoaW5lc3MvTVxcbmdyb3VjaHkvUlRQXFxuZ3JvdW5kL1pHTURSSlNcXG5ncm91bmRicmVha2luZy9NU1xcbmdyb3VuZGNsb3RoXFxuZ3JvdW5kY2xvdGhzXFxuZ3JvdW5kZXIvTVxcbmdyb3VuZGhvZy9NU1xcbmdyb3VuZGluZy9NXFxuZ3JvdW5kbGVzcy9ZXFxuZ3JvdW5kbnV0L01TXFxuZ3JvdW5kc2hlZXQvU1xcbmdyb3VuZHNrZWVwZXIvU1xcbmdyb3VuZHNtYW5cXG5ncm91bmRzbWVuXFxuZ3JvdW5kc3dlbGwvU01cXG5ncm91bmR3YXRlci9NXFxuZ3JvdW5kd29yay9NXFxuZ3JvdXAvSlNaR01EUlxcbmdyb3VwZXIvTVxcbmdyb3VwaWUvTVNcXG5ncm91cGluZy9NXFxuZ3JvdXB3YXJlL01cXG5ncm91c2UvTVpHRFJTXFxuZ3JvdXNlci9NXFxuZ3JvdXQvU0dNRFxcbmdyb3ZlL1NNXFxuZ3JvdmVsL1pHRFJTXFxuZ3JvdmVsZXIvTVxcbmdyb3ZlbGxlZFxcbmdyb3ZlbGxpbmdcXG5ncm93L0FIU0dcXG5ncm93ZXIvTVNcXG5ncm93aW5nL0lcXG5ncm93bC9TWkdNRFJcXG5ncm93bGVyL01cXG5ncm93bi9BSVxcbmdyb3dudXAvTVNcXG5ncm93dGgvQU1cXG5ncm93dGhzXFxuZ3J1Yi9NU1xcbmdydWJiZWRcXG5ncnViYmVyL01TXFxuZ3J1YmJpbHlcXG5ncnViYmluZXNzL01cXG5ncnViYmluZ1xcbmdydWJieS9UUlBcXG5ncnVic3Rha2UvTVxcbmdydWRnZS9NR0RTXFxuZ3J1ZGdpbmcvWVxcbmdydWUvU1xcbmdydWVsL0dKTVxcbmdydWVsaW5nL1lcXG5ncnVlc29tZS9SWVRQXFxuZ3J1ZXNvbWVuZXNzL01cXG5ncnVmZi9UUFJZXFxuZ3J1ZmZuZXNzL01cXG5ncnVtYmxlL0RSU01aR0pcXG5ncnVtYmxlci9NXFxuZ3J1bXAvU01cXG5ncnVtcGlseVxcbmdydW1waW5lc3MvTVxcbmdydW1weS9QUlRcXG5ncnVuZ2UvTVNcXG5ncnVuZ3kvUlRcXG5ncnVuaW9uL1NNXFxuZ3J1bnQvU0dNRFxcbmd0XFxuZ3VhY2Ftb2xlL01cXG5ndWFuaW5lL01cXG5ndWFuby9NXFxuZ3VhcmFuaS9NU1xcbmd1YXJhbnRlZS9NRFNcXG5ndWFyYW50ZWVpbmdcXG5ndWFyYW50b3IvTVNcXG5ndWFyYW50eS9HRFNNXFxuZ3VhcmQvU1pHTURSXFxuZ3VhcmRlZC9ZXFxuZ3VhcmRlci9NXFxuZ3VhcmRob3VzZS9TTVxcbmd1YXJkaWFuL1NNXFxuZ3VhcmRpYW5zaGlwL01cXG5ndWFyZHJhaWwvU01cXG5ndWFyZHJvb20vU01cXG5ndWFyZHNtYW4vTVxcbmd1YXJkc21lblxcbmd1YXZhL1NNXFxuZ3ViZXJuYXRvcmlhbFxcbmd1ZXJyaWxsYS9TTVxcbmd1ZXNzL1pHQk1EUlNcXG5ndWVzc2VyL01cXG5ndWVzc3RpbWF0ZS9EU01HXFxuZ3Vlc3N3b3JrL01cXG5ndWVzdC9TR01EXFxuZ3Vlc3Rib29rL1NNXFxuZ3Vlc3Rob3VzZS9TXFxuZ3Vlc3Ryb29tL1NcXG5ndWZmL01cXG5ndWZmYXcvTURHU1xcbmd1aWRhbmNlL01cXG5ndWlkZS9EUlNNWkdcXG5ndWlkZWJvb2svU01cXG5ndWlkZWQvVVxcbmd1aWRlbGluZS9TTVxcbmd1aWRlcG9zdC9TTVxcbmd1aWRlci9NXFxuZ3VpbGQvU1pNUlxcbmd1aWxkZXIvTVxcbmd1aWxkaGFsbC9NU1xcbmd1aWxlL01cXG5ndWlsZWZ1bFxcbmd1aWxlbGVzcy9ZUFxcbmd1aWxlbGVzc25lc3MvTVxcbmd1aWxsZW1vdC9TXFxuZ3VpbGxvdGluZS9EU01HXFxuZ3VpbHQvTVxcbmd1aWx0aWx5XFxuZ3VpbHRpbmVzcy9NXFxuZ3VpbHRsZXNzXFxuZ3VpbHR5L1BSVFxcbmd1aW5lYS9NU1xcbmd1aXNlL0VTTVxcbmd1aXRhci9NU1xcbmd1aXRhcmlzdC9TTVxcbmd1bGFnL1NNXFxuZ3VsY2gvTVNcXG5ndWxkZW4vTVNcXG5ndWxmL01TXFxuZ3VsbC9NRFNHXFxuZ3VsbGV0L01TXFxuZ3VsbGliaWxpdHkvTVxcbmd1bGxpYmxlXFxuZ3VsbHkvU01cXG5ndWxwL01EUlNaR1xcbmd1bHBlci9NXFxuZ3VtL1NNXFxuZ3VtYmFsbC9TXFxuZ3VtYm8vU01cXG5ndW1ib2lsL1NNXFxuZ3VtYm9vdC9TXFxuZ3VtZHJvcC9TTVxcbmd1bW1lZFxcbmd1bW1pbmdcXG5ndW1teS9UUlxcbmd1bXB0aW9uL01cXG5ndW1zaG9lL01EU1xcbmd1bXNob2VpbmdcXG5ndW4vU01cXG5ndW5ib2F0L1NNXFxuZ3VuZmlnaHQvTVJaU1xcbmd1bmZpZ2h0ZXIvTVxcbmd1bmZpcmUvTVxcbmd1bmdlXFxuZ3VuZ3lcXG5ndW5rL01cXG5ndW5reVxcbmd1bm1hbi9NXFxuZ3VubWVuXFxuZ3VubWV0YWwvTVxcbmd1bm5lZFxcbmd1bm5lbC9NU1xcbmd1bm5lci9NU1xcbmd1bm5lcnkvTVxcbmd1bm5pbmdcXG5ndW5ueS9NXFxuZ3VubnlzYWNrL01TXFxuZ3VucG9pbnQvTVxcbmd1bnBvd2Rlci9NXFxuZ3VucnVubmVyL01TXFxuZ3VucnVubmluZy9NXFxuZ3Vuc2hpcC9NU1xcbmd1bnNob3QvTVNcXG5ndW5zbGluZ2VyL1NNXFxuZ3Vuc21pdGgvTVxcbmd1bnNtaXRoc1xcbmd1bndhbGUvTVNcXG5ndXBweS9TTVxcbmd1cmdsZS9NR0RTXFxuZ3VybmV5L01TXFxuZ3VydS9NU1xcbmd1c2gvTURSU1pHXFxuZ3VzaGVyL01cXG5ndXNoaW5nL1lcXG5ndXNoeS9UUlxcbmd1c3NldC9NU0RHXFxuZ3Vzc3kvRFNHXFxuZ3VzdC9FTURTR1xcbmd1c3RhdG9yeVxcbmd1c3RpbHlcXG5ndXN0by9NXFxuZ3VzdHkvUlRcXG5ndXQvU01cXG5ndXRsZXNzL1BcXG5ndXRsZXNzbmVzcy9NXFxuZ3V0c3kvUlRcXG5ndXR0ZWRcXG5ndXR0ZXIvU01ER1xcbmd1dHRlcnNuaXBlL01TXFxuZ3V0dGluZ1xcbmd1dHR1cmFsL01TXFxuZ3V0dHkvUlRcXG5ndXYvU1xcbmd1dm5vci9TXFxuZ3V5L1NHTURcXG5ndXp6bGUvRFJTWkdcXG5ndXp6bGVyL01cXG5neW0vU01cXG5neW1raGFuYS9NU1xcbmd5bW5hc2l1bS9NU1xcbmd5bW5hc3QvTVNcXG5neW1uYXN0aWMvU1xcbmd5bW5hc3RpY2FsbHlcXG5neW1uYXN0aWNzL01cXG5neW1ub3NwZXJtL1NNXFxuZ3ltc2xpcC9TXFxuZ3luZWNvbG9naWNcXG5neW5lY29sb2dpY2FsXFxuZ3luZWNvbG9naXN0L1NNXFxuZ3luZWNvbG9neS9NXFxuZ3lwL1NNXFxuZ3lwcGVkXFxuZ3lwcGVyL1NNXFxuZ3lwcGluZ1xcbmd5cHN0ZXIvU01cXG5neXBzdW0vTVxcbmd5cHN5L1NNXFxuZ3lyYXRlL0RTR05YXFxuZ3lyYXRpb24vTVxcbmd5cmF0b3IvU01cXG5neXJmYWxjb24vTVNcXG5neXJvL01TXFxuZ3lyb3Njb3BlL01TXFxuZ3lyb3Njb3BpY1xcbmd5dmUvTUdEU1xcbmgnbVxcbmgvTlJTWFpHVkpcXG5oYS9TSFxcbmhhYmVyZGFzaGVyL1NNXFxuaGFiZXJkYXNoZXJ5L1NNXFxuaGFiaWxpbWVudC9TTVxcbmhhYml0J3NcXG5oYWJpdC9JU0JcXG5oYWJpdGFiaWxpdHkvTVxcbmhhYml0YXQvU01cXG5oYWJpdGF0aW9uL01TXFxuaGFiaXR1YWwvWVBcXG5oYWJpdHVhbG5lc3MvTVxcbmhhYml0dWF0ZS9HTkRTXFxuaGFiaXR1YXRpb24vTVxcbmhhYml0dWUvU01cXG5oYWNpZW5kYS9TTVxcbmhhY2svTURSWkdTXFxuaGFja2VyL01cXG5oYWNraW5nL01cXG5oYWNraXNoXFxuaGFja2xlL01TXFxuaGFja25leS9TTURHXFxuaGFja3Nhdy9TTVxcbmhhY2t0aXZpc3QvTVNcXG5oYWNrd29yay9NXFxuaGFkXFxuaGFkZG9jay9TTVxcbmhhZGl0aFxcbmhhZG4ndFxcbmhhZHN0XFxuaGFmbml1bS9NXFxuaGFmdC9NU1xcbmhhZy9TTVxcbmhhZ2dhcmQvWVBcXG5oYWdnYXJkbmVzcy9NXFxuaGFnZ2lzL01TXFxuaGFnZ2lzaFxcbmhhZ2dsZS9NWkdEUlNcXG5oYWdnbGVyL01cXG5oYWdpb2dyYXBoZXIvU01cXG5oYWdpb2dyYXBoeS9TTVxcbmhhaG5pdW0vTVxcbmhhaWt1L01cXG5oYWlsL01ER1NcXG5oYWlsc3RvbmUvTVNcXG5oYWlsc3Rvcm0vTVNcXG5oYWlyL01EU1xcbmhhaXJiYWxsL01TXFxuaGFpcmJhbmQvU1xcbmhhaXJicmVhZHRoL01cXG5oYWlyYnJlYWR0aHNcXG5oYWlyYnJ1c2gvTVNcXG5oYWlyY2xvdGgvTVxcbmhhaXJjdXQvU01cXG5oYWlyZG8vTVNcXG5oYWlyZHJlc3Nlci9TTVxcbmhhaXJkcmVzc2luZy9NXFxuaGFpcmRyeWVyL01TXFxuaGFpcmdyaXAvU1xcbmhhaXJpbmVzcy9NXFxuaGFpcmxlc3NcXG5oYWlybGlrZVxcbmhhaXJsaW5lL1NNXFxuaGFpcm5ldC9TTVxcbmhhaXJwaWVjZS9NU1xcbmhhaXJwaW4vU01cXG5oYWlyc2JyZWFkdGgvTVxcbmhhaXJzYnJlYWR0aHNcXG5oYWlyc3BsaXR0ZXIvU01cXG5oYWlyc3BsaXR0aW5nL01cXG5oYWlyc3ByYXkvU1xcbmhhaXJzcHJpbmcvTVNcXG5oYWlyc3R5bGUvTVNcXG5oYWlyc3R5bGlzdC9TTVxcbmhhaXJ5L1RSUFxcbmhhalxcbmhhamovTVxcbmhhamplc1xcbmhhamppL1NNXFxuaGFrZS9NU1xcbmhhbGFsL01cXG5oYWxiZXJkL1NNXFxuaGFsY3lvblxcbmhhbGUvSVRHRFJTXFxuaGFsZi9NXFxuaGFsZmJhY2svU01cXG5oYWxmaGVhcnRlZC9QWVxcbmhhbGZoZWFydGVkbmVzcy9NXFxuaGFsZnBlbmNlXFxuaGFsZnBlbm55L1NNXFxuaGFsZnRpbWUvTVNcXG5oYWxmdG9uZS9NU1xcbmhhbGZ3YXlcXG5oYWxmd2l0L1NNXFxuaGFsaWJ1dC9TTVxcbmhhbGl0ZS9NXFxuaGFsaXRvc2lzL01cXG5oYWxsL01TXFxuaGFsbGVsdWphaC9NXFxuaGFsbGVsdWphaHNcXG5oYWxsbWFyay9HTURTXFxuaGFsbG9vL01TR1xcbmhhbGxvdy9EU0dcXG5oYWxsb3dlZC9VXFxuaGFsbHVjaW5hdGUvR05YRFNcXG5oYWxsdWNpbmF0aW9uL01cXG5oYWxsdWNpbmF0b3J5XFxuaGFsbHVjaW5vZ2VuL1NNXFxuaGFsbHVjaW5vZ2VuaWMvU01cXG5oYWxsd2F5L1NNXFxuaGFsby9NREdTXFxuaGFsb2dlbi9TTVxcbmhhbG9uXFxuaGFsdC9NRFJaR1NcXG5oYWx0ZXIvR01EXFxuaGFsdGVybmVjay9TXFxuaGFsdGluZy9ZXFxuaGFsdmUvRFNHXFxuaGFseWFyZC9NU1xcbmhhbS9TTVxcbmhhbWJ1cmcvU1pNUlxcbmhhbWJ1cmdlci9NXFxuaGFtbGV0L01TXFxuaGFtbWVkXFxuaGFtbWVyL01EUlNKWkdcXG5oYW1tZXJlci9NXFxuaGFtbWVyaGVhZC9TTVxcbmhhbW1lcmxvY2svU01cXG5oYW1tZXJ0b2UvTVNcXG5oYW1taW5nXFxuaGFtbW9jay9TTVxcbmhhbW15L1RSXFxuaGFtcGVyL0dNRFNcXG5oYW1wZXJlZC9VXFxuaGFtc3Rlci9NU1xcbmhhbXN0cmluZy9HU01cXG5oYW1zdHJ1bmdcXG5oYW5kJ3NcXG5oYW5kL1VER1NcXG5oYW5kYmFnL1NNXFxuaGFuZGJhbGwvTVNcXG5oYW5kYmFycm93L1NNXFxuaGFuZGJpbGwvTVNcXG5oYW5kYm9vay9NU1xcbmhhbmRicmFrZS9TXFxuaGFuZGNhci9TTVxcbmhhbmRjYXJ0L01TXFxuaGFuZGNsYXNwL01TXFxuaGFuZGNyYWZ0L1NNREdcXG5oYW5kY3VmZi9NREdTXFxuaGFuZGVkL1BcXG5oYW5kZnVsL1NNXFxuaGFuZGd1bi9TTVxcbmhhbmRoZWxkL01TXFxuaGFuZGhvbGQvTVNcXG5oYW5kaWNhcC9NU1xcbmhhbmRpY2FwcGVkXFxuaGFuZGljYXBwZXIvTVNcXG5oYW5kaWNhcHBpbmdcXG5oYW5kaWNyYWZ0L01TXFxuaGFuZGlseVxcbmhhbmRpbmVzcy9NXFxuaGFuZGl3b3JrL01cXG5oYW5ka2VyY2hpZWYvTVNcXG5oYW5kbGUvTVpHRFJTXFxuaGFuZGxlYmFyL01TXFxuaGFuZGxlci9NXFxuaGFuZG1hZGVcXG5oYW5kbWFpZC9YTU5TXFxuaGFuZG1haWRlbi9NXFxuaGFuZG91dC9TTVxcbmhhbmRvdmVyL1NcXG5oYW5kcGljay9HRFNcXG5oYW5kcmFpbC9NU1xcbmhhbmRzYXcvU01cXG5oYW5kc2V0L1NNXFxuaGFuZHNoYWtlL0pNR1NcXG5oYW5kc29tZS9QWVRSXFxuaGFuZHNvbWVuZXNzL01cXG5oYW5kc3ByaW5nL01TXFxuaGFuZHN0YW5kL1NNXFxuaGFuZHdvcmsvTVxcbmhhbmR3b3ZlblxcbmhhbmR3cml0aW5nL01cXG5oYW5kd3JpdHRlblxcbmhhbmR5L1VUUlxcbmhhbmR5bWFuL01cXG5oYW5keW1lblxcbmhhbmcvTURSSlpHU1xcbmhhbmdhci9NU1xcbmhhbmdkb2dcXG5oYW5nZXIvTVxcbmhhbmdpbmcvTVxcbmhhbmdtYW4vTVxcbmhhbmdtZW5cXG5oYW5nbmFpbC9NU1xcbmhhbmdvdXQvU01cXG5oYW5nb3Zlci9NU1xcbmhhbmd1cC9NU1xcbmhhbmsvTVJaU1xcbmhhbmtlci9HSkRcXG5oYW5rZXJpbmcvTVxcbmhhbmtpZS9NU1xcbmhhbnNvbS9NU1xcbmhhcC9NWVxcbmhhcGhhemFyZC9ZUFxcbmhhcGhhemFyZG5lc3MvTVxcbmhhcGxlc3MvWVBcXG5oYXBsZXNzbmVzcy9NXFxuaGFwbG9pZC9NU1xcbmhhcHBlbi9TREdKXFxuaGFwcGVuaW5nL01cXG5oYXBwZW5zdGFuY2UvU01cXG5oYXBwaWx5L1VcXG5oYXBwaW5lc3MvVU1cXG5oYXBweS9VUlRQXFxuaGFwdGljXFxuaGFyYW5ndWUvTUdEU1xcbmhhcmFzcy9MWkdEUlNcXG5oYXJhc3Nlci9NXFxuaGFyYXNzbWVudC9NXFxuaGFyYmluZ2VyL1NNXFxuaGFyYm9yL0dNRFNcXG5oYXJib3JtYXN0ZXIvU1xcbmhhcmQvTlJZWFRQXFxuaGFyZGJhY2svTVNcXG5oYXJkYmFsbC9NXFxuaGFyZGJvYXJkL01cXG5oYXJkYm91bmRcXG5oYXJkY29yZVxcbmhhcmRjb3Zlci9TTVxcbmhhcmRlbi9aR0RSXFxuaGFyZGVuZWQvVVxcbmhhcmRlbmVyL01cXG5oYXJkaGF0L01TXFxuaGFyZGhlYWRlZC9QWVxcbmhhcmRoZWFkZWRuZXNzL01cXG5oYXJkaGVhcnRlZC9QWVxcbmhhcmRoZWFydGVkbmVzcy9NXFxuaGFyZGlob29kL01cXG5oYXJkaWx5XFxuaGFyZGluZXNzL01cXG5oYXJkbGluZXIvTVNcXG5oYXJkbmVzcy9NXFxuaGFyZHNjcmFiYmxlXFxuaGFyZHNoaXAvU01cXG5oYXJkc3RhbmQvU01cXG5oYXJkdGFjay9NXFxuaGFyZHRvcC9TTVxcbmhhcmR3YXJlL01cXG5oYXJkd2lyZWRcXG5oYXJkd29vZC9TTVxcbmhhcmR3b3JraW5nXFxuaGFyZHkvUFRSXFxuaGFyZS9NR0RTXFxuaGFyZWJlbGwvTVNcXG5oYXJlYnJhaW5lZFxcbmhhcmVsaXAvU01cXG5oYXJlbGlwcGVkXFxuaGFyZW0vU01cXG5oYXJpY290L1NcXG5oYXJrL0RHU1xcbmhhcmxlcXVpbi9TTVxcbmhhcmxvdC9TTVxcbmhhcmxvdHJ5L01cXG5oYXJtL01ER1NcXG5oYXJtZWQvVVxcbmhhcm1mdWwvWVBcXG5oYXJtZnVsbmVzcy9NXFxuaGFybWxlc3MvUFlcXG5oYXJtbGVzc25lc3MvTVxcbmhhcm1vbmljL1NNXFxuaGFybW9uaWNhL01TXFxuaGFybW9uaWNhbGx5XFxuaGFybW9uaWVzXFxuaGFybW9uaW91cy9QWVxcbmhhcm1vbmlvdXNuZXNzL01cXG5oYXJtb25pdW0vTVNcXG5oYXJtb25pemF0aW9uL01cXG5oYXJtb25pemUvWkdEUlNcXG5oYXJtb25pemVyL01cXG5oYXJtb255L0VNXFxuaGFybmVzcydzXFxuaGFybmVzcy9VRFNHXFxuaGFycC9NREdTXFxuaGFycGlzdC9TTVxcbmhhcnBvb24vWkdTTURSXFxuaGFycG9vbmVyL01cXG5oYXJwc2ljaG9yZC9NU1xcbmhhcnBzaWNob3JkaXN0L1NNXFxuaGFycHkvU01cXG5oYXJyaWRhbi9NU1xcbmhhcnJpZXIvTVxcbmhhcnJvdy9TTURHXFxuaGFycnVtcGgvR0RcXG5oYXJydW1waHNcXG5oYXJyeS9EUlNaR1xcbmhhcnNoL1JZVFBcXG5oYXJzaG5lc3MvTVxcbmhhcnQvTVNcXG5oYXJ2ZXN0L1NNRFJaR1xcbmhhcnZlc3RlZC9VXFxuaGFydmVzdGVyL01cXG5oYXNoL0FNRFNHXFxuaGFzaGlzaC9NXFxuaGFzaHRhZy9TTVxcbmhhc24ndFxcbmhhc3AvTVNcXG5oYXNzbGUvRFNNR1xcbmhhc3NvY2svU01cXG5oYXN0L0ROWEdcXG5oYXN0ZS9TTVxcbmhhc3Rlbi9ER1xcbmhhc3RpbHlcXG5oYXN0aW5lc3MvTVxcbmhhc3R5L1JUUFxcbmhhdC9aR1NNRFJcXG5oYXRiYW5kL1NcXG5oYXRib3gvTVNcXG5oYXRjaC9NRFNHXFxuaGF0Y2hiYWNrL01TXFxuaGF0Y2hlY2svU01cXG5oYXRjaGVkL1VcXG5oYXRjaGVyeS9TTVxcbmhhdGNoZXQvU01cXG5oYXRjaGluZy9NXFxuaGF0Y2h3YXkvU01cXG5oYXRlL01TXFxuaGF0ZWZ1bC9QWVxcbmhhdGVmdWxuZXNzL01cXG5oYXRlbW9uZ2VyL01TXFxuaGF0ZXIvTVxcbmhhdHBpbi9TXFxuaGF0cmVkL1NNXFxuaGF0c3RhbmQvU1xcbmhhdHRlZFxcbmhhdHRlci9TTVxcbmhhdHRpbmdcXG5oYXViZXJrL1NNXFxuaGF1Z2h0aWx5XFxuaGF1Z2h0aW5lc3MvTVxcbmhhdWdodHkvUFJUXFxuaGF1bC9NRFJaR1NcXG5oYXVsYWdlL01cXG5oYXVsZXIvTVxcbmhhdWxpZXIvU1xcbmhhdW5jaC9NU1xcbmhhdW50L1NNRFJaR1xcbmhhdW50ZXIvTVxcbmhhdW50aW5nL1lcXG5oYXV0ZXVyL01cXG5oYXZlL01HU1xcbmhhdmVuJ3RcXG5oYXZlbi9TTVxcbmhhdmVyc2Fjay9TTVxcbmhhdm9jL01cXG5oYXcvR1NNRFxcbmhhd2svTURSWkdTXFxuaGF3a2VyL01cXG5oYXdraXNoL1BcXG5oYXdraXNobmVzcy9NXFxuaGF3c2VyL1NNXFxuaGF3dGhvcm4vTVNcXG5oYXkvR1NNRFxcbmhheWNvY2svU01cXG5oYXlsb2Z0L1NNXFxuaGF5bWFrZXIvU1xcbmhheW1ha2luZ1xcbmhheW1vdy9TTVxcbmhheXJpY2svTVNcXG5oYXlyaWRlL01TXFxuaGF5c2VlZC9NU1xcbmhheXN0YWNrL1NNXFxuaGF5d2lyZVxcbmhhemFyZC9TTURHXFxuaGF6YXJkb3VzL1lcXG5oYXplL01aR0pEUlNcXG5oYXplbC9TTVxcbmhhemVsbnV0L01TXFxuaGF6ZXIvTVxcbmhhemlseVxcbmhhemluZXNzL01cXG5oYXppbmcvTVxcbmhhem1hdFxcbmhhenkvUlRQXFxuaGRxcnNcXG5oZSdkXFxuaGUnbGxcXG5oZS9NXFxuaGVhZC9NRFJaR0pTXFxuaGVhZGFjaGUvTVNcXG5oZWFkYmFuZC9NU1xcbmhlYWRiYW5nZXIvU1xcbmhlYWRiYW5naW5nXFxuaGVhZGJvYXJkL1NNXFxuaGVhZGJ1dHQvRFNHXFxuaGVhZGNhc2UvU1xcbmhlYWRjaGVlc2VcXG5oZWFkY291bnQvU1xcbmhlYWRkcmVzcy9NU1xcbmhlYWRlci9NXFxuaGVhZGZpcnN0XFxuaGVhZGdlYXIvTVxcbmhlYWRodW50L0RSU1pHXFxuaGVhZGh1bnRlci9NXFxuaGVhZGh1bnRpbmcvTVxcbmhlYWRpbHlcXG5oZWFkaW5lc3MvTVxcbmhlYWRpbmcvTVxcbmhlYWRsYW1wL01TXFxuaGVhZGxhbmQvTVNcXG5oZWFkbGVzc1xcbmhlYWRsaWdodC9NU1xcbmhlYWRsaW5lL01aR0RSU1xcbmhlYWRsaW5lci9NXFxuaGVhZGxvY2svTVNcXG5oZWFkbG9uZ1xcbmhlYWRtYW4vTVxcbmhlYWRtYXN0ZXIvU01cXG5oZWFkbWVuXFxuaGVhZG1pc3RyZXNzL01TXFxuaGVhZHBob25lL01TXFxuaGVhZHBpZWNlL01TXFxuaGVhZHBpbi9TTVxcbmhlYWRxdWFydGVyL1NER1xcbmhlYWRxdWFydGVycy9NXFxuaGVhZHJlc3QvTVNcXG5oZWFkcm9vbS9NXFxuaGVhZHNjYXJmXFxuaGVhZHNjYXJ2ZXNcXG5oZWFkc2V0L1NNXFxuaGVhZHNoaXAvU01cXG5oZWFkc2hyaW5rZXIvU01cXG5oZWFkc21hbi9NXFxuaGVhZHNtZW5cXG5oZWFkc3RhbGwvU01cXG5oZWFkc3RhbmQvU01cXG5oZWFkc3RvbmUvU01cXG5oZWFkc3Ryb25nXFxuaGVhZHRlYWNoZXIvU1xcbmhlYWR3YWl0ZXIvU01cXG5oZWFkd2F0ZXJzL01cXG5oZWFkd2F5L01cXG5oZWFkd2luZC9TTVxcbmhlYWR3b3JkL1NNXFxuaGVhZHkvUlRQXFxuaGVhbC9EUkhaR1NcXG5oZWFsZWQvVVxcbmhlYWxlci9NXFxuaGVhbHRoL01cXG5oZWFsdGhjYXJlXFxuaGVhbHRoZnVsL1BZXFxuaGVhbHRoZnVsbmVzcy9NXFxuaGVhbHRoaWx5L1VcXG5oZWFsdGhpbmVzcy9VTVxcbmhlYWx0aHkvVVRSUFxcbmhlYXAvTURHU1xcbmhlYXIvQUhHSlNcXG5oZWFyZC9BVVxcbmhlYXJlci9TTVxcbmhlYXJpbmcvQU1cXG5oZWFya2VuL1NHRFxcbmhlYXJzYXkvTVxcbmhlYXJzZSdzXFxuaGVhcnNlL0FTXFxuaGVhcnQvU01cXG5oZWFydGFjaGUvTVNcXG5oZWFydGJlYXQvTVNcXG5oZWFydGJyZWFrL1NNR1xcbmhlYXJ0YnJva2VuXFxuaGVhcnRidXJuL01cXG5oZWFydGVuL0VTR0RcXG5oZWFydGZlbHRcXG5oZWFydGgvTVxcbmhlYXJ0aHJ1Zy9TXFxuaGVhcnRoc1xcbmhlYXJ0aHN0b25lL1NNXFxuaGVhcnRpbHlcXG5oZWFydGluZXNzL01cXG5oZWFydGxhbmQvTVNcXG5oZWFydGxlc3MvUFlcXG5oZWFydGxlc3NuZXNzL01cXG5oZWFydHJlbmRpbmcvWVxcbmhlYXJ0c2ljay9QXFxuaGVhcnRzaWNrbmVzcy9NXFxuaGVhcnRzdHJpbmdzL01cXG5oZWFydHRocm9iL01TXFxuaGVhcnR3YXJtaW5nXFxuaGVhcnR3b29kL01cXG5oZWFydHkvUlNNUFRcXG5oZWF0J3NcXG5oZWF0L0FER1NcXG5oZWF0ZWQvVVxcbmhlYXRlZGx5XFxuaGVhdGVyL1NNXFxuaGVhdGgvTU5SWFxcbmhlYXRoZW4vTVxcbmhlYXRoZW5kb20vTVxcbmhlYXRoZW5pc2hcXG5oZWF0aGVuaXNtL01cXG5oZWF0aGVyL01cXG5oZWF0aHNcXG5oZWF0aW5nL01cXG5oZWF0cHJvb2ZcXG5oZWF0c3Ryb2tlL01cXG5oZWF0d2F2ZS9TXFxuaGVhdmUvRFJTTVpHXFxuaGVhdmVuL1NNWVxcbmhlYXZlbmx5L1RSXFxuaGVhdmVucy9NXFxuaGVhdmVud2FyZC9TXFxuaGVhdmVyL01cXG5oZWF2aWx5XFxuaGVhdmluZXNzL01cXG5oZWF2eS9SU01UUFxcbmhlYXZ5aGVhcnRlZFxcbmhlYXZ5c2V0XFxuaGVhdnl3ZWlnaHQvTVNcXG5oZWNrL01cXG5oZWNrbGUvRFJTTVpHXFxuaGVja2xlci9NXFxuaGVja2xpbmcvTVxcbmhlY3RhcmUvU01cXG5oZWN0aWNcXG5oZWN0aWNhbGx5XFxuaGVjdG9ncmFtL1NNXFxuaGVjdG9tZXRlci9NU1xcbmhlY3Rvci9TTURHXFxuaGVkZ2UvRFJTTVpHXFxuaGVkZ2Vob2cvTVNcXG5oZWRnZWhvcC9TXFxuaGVkZ2Vob3BwZWRcXG5oZWRnZWhvcHBpbmdcXG5oZWRnZXIvTVxcbmhlZGdlcm93L1NNXFxuaGVkb25pc20vTVxcbmhlZG9uaXN0L01TXFxuaGVkb25pc3RpY1xcbmhlZWQvTURHU1xcbmhlZWRlZC9VXFxuaGVlZGZ1bC9ZXFxuaGVlZGxlc3MvUFlcXG5oZWVkbGVzc25lc3MvTVxcbmhlZWhhdy9TTURHXFxuaGVlbC9NREdTXFxuaGVlbGxlc3NcXG5oZWZ0L01ER1NcXG5oZWZ0aWx5XFxuaGVmdGluZXNzL01cXG5oZWZ0eS9QUlRcXG5oZWdlbW9uaWNcXG5oZWdlbW9ueS9NXFxuaGVnaXJhL1NNXFxuaGVpZmVyL1NNXFxuaGVpZ2h0L1hTTU5cXG5oZWlnaHRlbi9ER1xcbmhlaW5vdXMvWVBcXG5oZWlub3VzbmVzcy9NXFxuaGVpci9NU1xcbmhlaXJlc3MvTVNcXG5oZWlybG9vbS9TTVxcbmhlaXN0L1NNREdcXG5oZWxkXFxuaGVsaWNhbFxcbmhlbGljZXNcXG5oZWxpY29wdGVyL1NHTURcXG5oZWxpb2NlbnRyaWNcXG5oZWxpb3Ryb3BlL1NNXFxuaGVsaXBhZC9TXFxuaGVsaXBvcnQvTVNcXG5oZWxpdW0vTVxcbmhlbGl4L01cXG5oZWxsL01cXG5oZWxsYmVudFxcbmhlbGxjYXQvTVNcXG5oZWxsZWJvcmUvTVxcbmhlbGxmaXJlXFxuaGVsbGhvbGUvTVNcXG5oZWxsaW9uL01TXFxuaGVsbGlzaC9ZUFxcbmhlbGxpc2huZXNzL01cXG5oZWxsby9TTVxcbmhlbGx1dmFcXG5oZWxtL01TXFxuaGVsbWV0L1NNRFxcbmhlbG1zbWFuL01cXG5oZWxtc21lblxcbmhlbG90L1NNXFxuaGVscC9NRFJaR1NKXFxuaGVscGVyL01cXG5oZWxwZnVsL1VZXFxuaGVscGZ1bG5lc3MvTVxcbmhlbHBpbmcvTVxcbmhlbHBsZXNzL1BZXFxuaGVscGxlc3NuZXNzL01cXG5oZWxwbGluZS9TTVxcbmhlbHBtYXRlL1NNXFxuaGVsdmUvU01cXG5oZW0vU01cXG5oZW1hdGl0ZS9NXFxuaGVtYXRvbG9naWNcXG5oZW1hdG9sb2dpY2FsXFxuaGVtYXRvbG9naXN0L01TXFxuaGVtYXRvbG9neS9NXFxuaGVtZS9NXFxuaGVtaXBsZWdpYVxcbmhlbWlzcGhlcmUvU01cXG5oZW1pc3BoZXJpY1xcbmhlbWlzcGhlcmljYWxcXG5oZW1saW5lL1NNXFxuaGVtbG9jay9TTVxcbmhlbW1lZFxcbmhlbW1lci9TTVxcbmhlbW1pbmdcXG5oZW1vZ2xvYmluL01cXG5oZW1vcGhpbGlhL01cXG5oZW1vcGhpbGlhYy9NU1xcbmhlbW9ycmhhZ2UvTUdEU1xcbmhlbW9ycmhhZ2ljXFxuaGVtb3JyaG9pZC9NU1xcbmhlbW9zdGF0L01TXFxuaGVtcC9NTlxcbmhlbXN0aXRjaC9NRFNHXFxuaGVuL01cXG5oZW5jZVxcbmhlbmNlZm9ydGhcXG5oZW5jZWZvcndhcmRcXG5oZW5jaG1hbi9NXFxuaGVuY2htZW5cXG5oZW5uYS9TTURHXFxuaGVucGVjay9HU0RcXG5oZXBcXG5oZXBhcmluL01cXG5oZXBhdGljXFxuaGVwYXRpdGlzL01cXG5oZXBhdG9jeXRlL1NcXG5oZXBwZXJcXG5oZXBwZXN0XFxuaGVwdGFnb24vTVNcXG5oZXB0YWdvbmFsXFxuaGVwdGF0aGxvbi9TTVxcbmhlcmFsZC9TTURHXFxuaGVyYWxkZWQvVVxcbmhlcmFsZGljXFxuaGVyYWxkcnkvTVxcbmhlcmIvTVNcXG5oZXJiYWNlb3VzXFxuaGVyYmFnZS9NXFxuaGVyYmFsL1NcXG5oZXJiYWxpc3QvTVNcXG5oZXJiaWNpZGFsXFxuaGVyYmljaWRlL01TXFxuaGVyYml2b3JlL1NNXFxuaGVyYml2b3JvdXNcXG5oZXJjdWxlYW5cXG5oZXJkL01EUlpHU1xcbmhlcmRlci9NXFxuaGVyZHNtYW4vTVxcbmhlcmRzbWVuXFxuaGVyZS9NXFxuaGVyZWFib3V0L1NcXG5oZXJlYWZ0ZXIvU01cXG5oZXJlYnlcXG5oZXJlZGl0YXJ5XFxuaGVyZWRpdHkvTVxcbmhlcmVpblxcbmhlcmVpbmFmdGVyXFxuaGVyZW9mXFxuaGVyZW9uXFxuaGVyZXN5L1NNXFxuaGVyZXRpYy9TTVxcbmhlcmV0aWNhbFxcbmhlcmV0b1xcbmhlcmV0b2ZvcmVcXG5oZXJldW5kZXJcXG5oZXJldW50b1xcbmhlcmV1cG9uXFxuaGVyZXdpdGhcXG5oZXJpdGFibGUvSVxcbmhlcml0YWdlL01TXFxuaGVybWFwaHJvZGl0ZS9TTVxcbmhlcm1hcGhyb2RpdGljXFxuaGVybWV0aWNcXG5oZXJtZXRpY2FsL1lcXG5oZXJtaXQvU01cXG5oZXJtaXRhZ2UvTVNcXG5oZXJtaXRpYW5cXG5oZXJuaWEvU01cXG5oZXJuaWFsXFxuaGVybmlhdGUvR05EU1xcbmhlcm5pYXRpb24vTVxcbmhlcm8vTVxcbmhlcm9lc1xcbmhlcm9pYy9TXFxuaGVyb2ljYWxseVxcbmhlcm9pY3MvTVxcbmhlcm9pbi9TTVxcbmhlcm9pbmUvU01cXG5oZXJvaXNtL01cXG5oZXJvbi9TTVxcbmhlcnBlcy9NXFxuaGVycGV0b2xvZ2lzdC9TTVxcbmhlcnBldG9sb2d5L01cXG5oZXJyaW5nL01TXFxuaGVycmluZ2JvbmUvTVxcbmhlcnNlbGZcXG5oZXJ0ei9NXFxuaGVzaXRhbmNlL01cXG5oZXNpdGFuY3kvTVxcbmhlc2l0YW50L1lcXG5oZXNpdGF0ZS9EU0dOWFxcbmhlc2l0YXRpbmcvVVlcXG5oZXNpdGF0aW9uL01cXG5oZXNzaWFuXFxuaGV0ZXJvL1NNXFxuaGV0ZXJvZG94XFxuaGV0ZXJvZG94eS9NXFxuaGV0ZXJvZ2VuZWl0eS9NXFxuaGV0ZXJvZ2VuZW91cy9ZXFxuaGV0ZXJvc2V4dWFsL01ZU1xcbmhldGVyb3NleHVhbGl0eS9NXFxuaGV1cmlzdGljL01TXFxuaGV1cmlzdGljYWxseVxcbmhldXJpc3RpY3MvTVxcbmhldy9aR1NEUlxcbmhld2VyL01cXG5oZXgvR01EU1xcbmhleGFkZWNpbWFsL1NcXG5oZXhhZ29uL01TXFxuaGV4YWdvbmFsXFxuaGV4YWdyYW0vU01cXG5oZXhhbWV0ZXIvU01cXG5oZXlcXG5oZXlkYXkvU01cXG5oZlxcbmhndFxcbmhnd3lcXG5oaS9TRFxcbmhpYXR1cy9NU1xcbmhpYmFjaGkvTVNcXG5oaWJlcm5hdGUvR05EU1xcbmhpYmVybmF0aW9uL01cXG5oaWJlcm5hdG9yL01TXFxuaGliaXNjdXMvTVNcXG5oaWNjb3VnaC9ER1xcbmhpY2NvdWdoc1xcbmhpY2N1cC9HU01EXFxuaGljay9NU1xcbmhpY2tleS9TTVxcbmhpY2tvcnkvU01cXG5oaWRcXG5oaWRkZW5cXG5oaWRlL01aR0pEUlNcXG5oaWRlYXdheS9TTVxcbmhpZGVib3VuZFxcbmhpZGVvdXMvWVBcXG5oaWRlb3VzbmVzcy9NXFxuaGlkZW91dC9NU1xcbmhpZGVyL01cXG5oaWRpbmcvTVxcbmhpZS9TXFxuaGllaW5nXFxuaGllcmFyY2hpY1xcbmhpZXJhcmNoaWNhbC9ZXFxuaGllcmFyY2h5L1NNXFxuaGllcm9nbHlwaC9NXFxuaGllcm9nbHlwaGljL01TXFxuaGllcm9nbHlwaHNcXG5oaWdoL01SWVpUUFxcbmhpZ2hiYWxsL1NNXFxuaGlnaGJvcm5cXG5oaWdoYm95L01TXFxuaGlnaGJyb3cvU01cXG5oaWdoY2hhaXIvTVNcXG5oaWdoZmFsdXRpblxcbmhpZ2hoYW5kZWQvUFlcXG5oaWdoaGFuZGVkbmVzcy9NXFxuaGlnaGxhbmQvTVJaU1xcbmhpZ2hsYW5kZXIvTVxcbmhpZ2hsaWdodC9TTURSWkdcXG5oaWdobGlnaHRlci9NXFxuaGlnaG5lc3MvTVxcbmhpZ2hyb2FkL01TXFxuaGlnaHNcXG5oaWdodGFpbC9EU0dcXG5oaWdod2F5L01TXFxuaGlnaHdheW1hbi9NXFxuaGlnaHdheW1lblxcbmhpamFiL1NNXFxuaGlqYWNrL1NKWkdNRFJcXG5oaWphY2tlci9NXFxuaGlqYWNraW5nL01cXG5oaWtlL01aR0RSU1xcbmhpa2VyL01cXG5oaWtpbmcvTVxcbmhpbGFyaW91cy9QWVxcbmhpbGFyaW91c25lc3MvTVxcbmhpbGFyaXR5L01cXG5oaWxsL01TXFxuaGlsbGJpbGx5L1NNXFxuaGlsbGluZXNzL01cXG5oaWxsb2NrL01TXFxuaGlsbHNpZGUvU01cXG5oaWxsdG9wL01TXFxuaGlsbHkvUFJUXFxuaGlsdC9NU1xcbmhpbS9TXFxuaGltc2VsZlxcbmhpbmQvTVJaU1xcbmhpbmRlci9HRFxcbmhpbmRlcmVkL1VcXG5oaW5kbW9zdFxcbmhpbmRxdWFydGVyL01TXFxuaGluZHJhbmNlL1NNXFxuaGluZHNpZ2h0L01cXG5oaW5nZSdzXFxuaGluZ2UvVURTR1xcbmhpbnQvTURSWkdTXFxuaGludGVyL01cXG5oaW50ZXJsYW5kL1NNXFxuaGlwL1NQTVxcbmhpcGJhdGhcXG5oaXBiYXRoc1xcbmhpcGJvbmUvTVNcXG5oaXBodWdnZXJzXFxuaGlwbmVzcy9NXFxuaGlwcGVkXFxuaGlwcGVyXFxuaGlwcGVzdFxcbmhpcHBpZS9TTVxcbmhpcHBpbmdcXG5oaXBwby9TTVxcbmhpcHBvY2FtcHVzXFxuaGlwcG9kcm9tZS9TTVxcbmhpcHBvcG90YW11cy9NU1xcbmhpcHB5XFxuaGlwc3Rlci9NU1xcbmhpcmFnYW5hXFxuaGlyZSdzXFxuaGlyZS9BR0RTXFxuaGlyZWxpbmcvTVNcXG5oaXJzdXRlL1BcXG5oaXJzdXRlbmVzcy9NXFxuaGlzcy9NRFNHXFxuaGlzdFxcbmhpc3RhbWluZS9NU1xcbmhpc3RvZ3JhbS9NU1xcbmhpc3RvbG9naXN0L1NNXFxuaGlzdG9sb2d5L01cXG5oaXN0b3BhdGhvbG9neVxcbmhpc3Rvcmlhbi9NU1xcbmhpc3RvcmljXFxuaGlzdG9yaWNhbC9ZXFxuaGlzdG9yaWNpdHkvTVxcbmhpc3RvcmlvZ3JhcGhlci9NU1xcbmhpc3RvcmlvZ3JhcGh5L01cXG5oaXN0b3J5L1NNXFxuaGlzdHJpb25pYy9TXFxuaGlzdHJpb25pY2FsbHlcXG5oaXN0cmlvbmljcy9NXFxuaGl0L1NNXFxuaGl0Y2gnc1xcbmhpdGNoL1VEU0dcXG5oaXRjaGVyL01TXFxuaGl0Y2hoaWtlL0RSU01aR1xcbmhpdGNoaGlrZXIvTVxcbmhpdGhlclxcbmhpdGhlcnRvXFxuaGl0dGVyL1NNXFxuaGl0dGluZ1xcbmhpdmUvTUdEU1xcbmhpdmVtaW5kL1NNXFxuaGl5YVxcbmhtbVxcbmhvL1NNRFJZWlxcbmhvYWdpZS9NU1xcbmhvYXJkL1NaR01EUkpcXG5ob2FyZGVyL01cXG5ob2FyZGluZy9NXFxuaG9hcmZyb3N0L01cXG5ob2FyaW5lc3MvTVxcbmhvYXJzZS9ZVFJQXFxuaG9hcnNlbmVzcy9NXFxuaG9hcnkvVFJQXFxuaG9heC9NRFJTWkdcXG5ob2F4ZXIvTVxcbmhvYi9TTVxcbmhvYmJpdC9TXFxuaG9iYmxlL01aR0RSU1xcbmhvYmJsZXIvTVxcbmhvYmJ5L1NNXFxuaG9iYnlob3JzZS9NU1xcbmhvYmJ5aXN0L1NNXFxuaG9iZ29ibGluL01TXFxuaG9ibmFpbC9TR01EXFxuaG9ibm9iL1NcXG5ob2Jub2JiZWRcXG5ob2Jub2JiaW5nXFxuaG9iby9NU1xcbmhvY1xcbmhvY2svTURTR1xcbmhvY2tleS9NXFxuaG9ja3Nob3AvTVNcXG5ob2QvU01cXG5ob2RnZXBvZGdlL1NNXFxuaG9lL1NNXFxuaG9lY2FrZS9TTVxcbmhvZWRvd24vU01cXG5ob2VpbmdcXG5ob2VyL01cXG5ob2cvU01cXG5ob2dhbi9TTVxcbmhvZ2JhY2svU01cXG5ob2dnZWRcXG5ob2dnaW5nXFxuaG9nZ2lzaC9ZXFxuaG9nc2hlYWQvU01cXG5ob2d0aWUvRFNcXG5ob2d0eWluZ1xcbmhvZ3dhc2gvTVxcbmhvaWNrL1NHRFxcbmhvaXN0L1NHTURcXG5ob2tlL0dEU1xcbmhva2V5XFxuaG9raWVyXFxuaG9raWVzdFxcbmhva3VtL01cXG5ob2xkL01SSlNaR1xcbmhvbGRhbGwvU1xcbmhvbGRlci9NXFxuaG9sZGluZy9NXFxuaG9sZG91dC9TTVxcbmhvbGRvdmVyL1NNXFxuaG9sZHVwL01TXFxuaG9sZS9NR0RTXFxuaG9sZXlcXG5ob2xpZGF5L1NNREdcXG5ob2xpZGF5bWFrZXIvU1xcbmhvbGluZXNzL1VNXFxuaG9saXNtXFxuaG9saXN0aWNcXG5ob2xpc3RpY2FsbHlcXG5ob2xsZXIvTURHU1xcbmhvbGxvdy9NRFJZUFNUR1xcbmhvbGxvd25lc3MvTVxcbmhvbGx5L1NNXFxuaG9sbHlob2NrL01TXFxuaG9sbWl1bS9NXFxuaG9sb2NhdXN0L1NNXFxuaG9sb2dyYW0vTVNcXG5ob2xvZ3JhcGgvTVxcbmhvbG9ncmFwaGljXFxuaG9sb2dyYXBoc1xcbmhvbG9ncmFwaHkvTVxcbmhvbHNcXG5ob2xzdGVyL1NNREdcXG5ob2x5L1VSUFRcXG5ob21hZ2UvTVNcXG5ob21icmUvTVNcXG5ob21idXJnL1NNXFxuaG9tZS9NWVpHRFJTXFxuaG9tZWJvZHkvU01cXG5ob21lYm95L1NNXFxuaG9tZWNvbWluZy9TTVxcbmhvbWVncm93blxcbmhvbWVsYW5kL01TXFxuaG9tZWxlc3MvTVBcXG5ob21lbGVzc25lc3MvTVxcbmhvbWVsaWtlXFxuaG9tZWxpbmVzcy9NXFxuaG9tZWx5L1BSVFxcbmhvbWVtYWRlXFxuaG9tZW1ha2VyL1NNXFxuaG9tZW1ha2luZy9NXFxuaG9tZW9wYXRoL01cXG5ob21lb3BhdGhpY1xcbmhvbWVvcGF0aHNcXG5ob21lb3BhdGh5L01cXG5ob21lb3N0YXNpcy9NXFxuaG9tZW9zdGF0aWNcXG5ob21lb3duZXIvTVNcXG5ob21lcGFnZS9NU1xcbmhvbWVyL0dNRFxcbmhvbWVyb29tL01TXFxuaG9tZXNjaG9vbGluZy9NXFxuaG9tZXNpY2svUFxcbmhvbWVzaWNrbmVzcy9NXFxuaG9tZXNwdW4vTVxcbmhvbWVzdGVhZC9TTURSWkdcXG5ob21lc3RlYWRlci9NXFxuaG9tZXN0cmV0Y2gvTVNcXG5ob21ldG93bi9NU1xcbmhvbWV3YXJkL1NcXG5ob21ld29yay9NUlpHXFxuaG9tZXdyZWNrZXIvU01cXG5ob21leS9TTVBcXG5ob21leW5lc3MvTVxcbmhvbWljaWRhbFxcbmhvbWljaWRlL01TXFxuaG9taWVyXFxuaG9taWVzdFxcbmhvbWlsZXRpY1xcbmhvbWlseS9TTVxcbmhvbWluaWQvU01cXG5ob21pbm9pZC9TXFxuaG9taW55L01cXG5ob21vL01TXFxuaG9tb2Vyb3RpY1xcbmhvbW9nZW5laXR5L01cXG5ob21vZ2VuZW91cy9ZXFxuaG9tb2dlbml6YXRpb24vTVxcbmhvbW9nZW5pemUvRFNHXFxuaG9tb2dyYXBoL01cXG5ob21vZ3JhcGhzXFxuaG9tb2xvZ291c1xcbmhvbW9sb2d5XFxuaG9tb255bS9TTVxcbmhvbW9waG9iaWEvTVxcbmhvbW9waG9iaWNcXG5ob21vcGhvbmUvTVNcXG5ob21vc2V4dWFsL1NNXFxuaG9tb3NleHVhbGl0eS9NXFxuaG9uL1NaVEdNRFJcXG5ob25jaG8vTVNcXG5ob25lL01TXFxuaG9uZXIvTVxcbmhvbmVzdC9FWVRcXG5ob25lc3RlclxcbmhvbmVzdHkvRU1cXG5ob25leS9TR01EXFxuaG9uZXliZWUvU01cXG5ob25leWNvbWIvTURTR1xcbmhvbmV5ZGV3L1NNXFxuaG9uZXlsb2N1c3QvTVxcbmhvbmV5bW9vbi9aR01EUlNcXG5ob25leW1vb25lci9NXFxuaG9uZXlwb3QvU1xcbmhvbmV5c3Vja2xlL1NNXFxuaG9uay9NRFJTWkdcXG5ob25rZXIvTVxcbmhvbmt5L1NNXFxuaG9ub3IvRVNHTURCXFxuaG9ub3JhYmxlbmVzcy9NXFxuaG9ub3JhYmx5L0VcXG5ob25vcmFyaWx5XFxuaG9ub3Jhcml1bS9NU1xcbmhvbm9yYXJ5XFxuaG9ub3JlZS9TTVxcbmhvbm9yZXIvU01cXG5ob25vcmlmaWMvTVNcXG5ob29jaC9NXFxuaG9vZC9NRFNHXFxuaG9vZGllL01TXFxuaG9vZGx1bS9TTVxcbmhvb2Rvby9NRFNHXFxuaG9vZHdpbmsvREdTXFxuaG9vZXkvTVxcbmhvb2YvTURSU1pHXFxuaG9vaydzXFxuaG9vay9VRFNHXFxuaG9va2FoL01cXG5ob29rYWhzXFxuaG9va2VyL01TXFxuaG9va3VwL01TXFxuaG9va3dvcm0vTVNcXG5ob29reS9NXFxuaG9vbGlnYW4vTVNcXG5ob29saWdhbmlzbS9NXFxuaG9vcC9NRFNHXFxuaG9vcGxhL01cXG5ob29yYXlcXG5ob29zZWdvdy9TTVxcbmhvb3QvTURSU1pHXFxuaG9vdGVuYW5ueS9TTVxcbmhvb3Rlci9NXFxuaG9vdmVyL0RTR1xcbmhvb3Zlc1xcbmhvcC9TR01EXFxuaG9wZS9NU1xcbmhvcGVmdWwvUFNNWVxcbmhvcGVmdWxuZXNzL01cXG5ob3BlbGVzcy9ZUFxcbmhvcGVsZXNzbmVzcy9NXFxuaG9wcGVkXFxuaG9wcGVyL01TXFxuaG9wcGluZ1xcbmhvcHNjb3RjaC9NRFNHXFxuaG9yYS9NU1xcbmhvcmRlL0RTTUdcXG5ob3JlaG91bmQvU01cXG5ob3Jpem9uL1NNXFxuaG9yaXpvbnRhbC9TTVlcXG5ob3Jtb25hbFxcbmhvcm1vbmUvU01cXG5ob3JuL01EU1xcbmhvcm5iZWFtXFxuaG9ybmJsZW5kZS9NXFxuaG9ybmV0L01TXFxuaG9ybmxlc3NcXG5ob3JubGlrZVxcbmhvcm5waXBlL01TXFxuaG9ybnkvVFJcXG5ob3JvbG9naWNcXG5ob3JvbG9naWNhbFxcbmhvcm9sb2dpc3QvTVNcXG5ob3JvbG9neS9NXFxuaG9yb3Njb3BlL1NNXFxuaG9ycmVuZG91cy9ZXFxuaG9ycmlibGUvUFxcbmhvcnJpYmxlbmVzcy9NXFxuaG9ycmlibHlcXG5ob3JyaWQvWVxcbmhvcnJpZmljXFxuaG9ycmlmaWNhbGx5XFxuaG9ycmlmeS9EU0dcXG5ob3JyaWZ5aW5nL1lcXG5ob3Jyb3IvTVNcXG5ob3JzZSdzXFxuaG9yc2UvVURTR1xcbmhvcnNlYmFjay9NXFxuaG9yc2Vib3gvU1xcbmhvcnNlZmxlc2gvTVxcbmhvcnNlZmx5L1NNXFxuaG9yc2VoYWlyL01cXG5ob3JzZWhpZGUvTVxcbmhvcnNlbGF1Z2gvTVxcbmhvcnNlbGF1Z2hzXFxuaG9yc2VsZXNzXFxuaG9yc2VtYW4vTVxcbmhvcnNlbWFuc2hpcC9NXFxuaG9yc2VtZW5cXG5ob3JzZXBsYXkvTVxcbmhvcnNlcG93ZXIvTVxcbmhvcnNlcmFkaXNoL01TXFxuaG9yc2VzaGl0LyFcXG5ob3JzZXNob2UvRFNNXFxuaG9yc2VzaG9laW5nXFxuaG9yc2V0YWlsL1NNXFxuaG9yc2V0cmFkaW5nXFxuaG9yc2V3aGlwL1NNXFxuaG9yc2V3aGlwcGVkXFxuaG9yc2V3aGlwcGluZ1xcbmhvcnNld29tYW4vTVxcbmhvcnNld29tZW5cXG5ob3JzZXlcXG5ob3JzaWVyXFxuaG9yc2llc3RcXG5ob3J0YXRvcnlcXG5ob3J0aWN1bHR1cmFsXFxuaG9ydGljdWx0dXJhbGlzdC9TXFxuaG9ydGljdWx0dXJlL01cXG5ob3J0aWN1bHR1cmlzdC9NU1xcbmhvc2FubmEvU01cXG5ob3NlL01HRFNcXG5ob3NlcGlwZS9TXFxuaG9zaWVyL01TXFxuaG9zaWVyeS9NXFxuaG9zcFxcbmhvc3Bob2xpcGFzZVxcbmhvc3BpY2UvTVNcXG5ob3NwaXRhYmxlL0lcXG5ob3NwaXRhYmx5L0lcXG5ob3NwaXRhbC9TTVxcbmhvc3BpdGFsaXR5L01cXG5ob3NwaXRhbGl6YXRpb24vU01cXG5ob3NwaXRhbGl6ZS9EU0dcXG5ob3N0L01EU0dcXG5ob3N0YWdlL01TXFxuaG9zdGVsL1pHTURSU1xcbmhvc3RlbGVyL01cXG5ob3N0ZWxyeS9TTVxcbmhvc3Rlc3MvTURTR1xcbmhvc3RpbGUvTVlTXFxuaG9zdGlsaXRpZXMvTVxcbmhvc3RpbGl0eS9TTVxcbmhvc3RsZXIvTVNcXG5ob3QvU1lQXFxuaG90YmVkL01TXFxuaG90Ymxvb2RlZFxcbmhvdGJveC9NU1xcbmhvdGNha2UvU01cXG5ob3RlbC9TTVxcbmhvdGVsaWVyL01TXFxuaG90Zm9vdC9NREdTXFxuaG90aGVhZC9EU01cXG5ob3RoZWFkZWQvWVBcXG5ob3RoZWFkZWRuZXNzL01cXG5ob3Rob3VzZS9TTVxcbmhvdGtleS9TXFxuaG90bGluay9TXFxuaG90bmVzcy9NXFxuaG90cGxhdGUvU01cXG5ob3Rwb3QvU1xcbmhvdHMvTVxcbmhvdHNob3QvTVNcXG5ob3R0ZWRcXG5ob3R0ZXJcXG5ob3R0ZXN0XFxuaG90dGllL1NcXG5ob3R0aW5nXFxuaG91bmQvU0dNRFxcbmhvdXIvTVlTXFxuaG91cmdsYXNzL01TXFxuaG91cmkvU01cXG5ob3VzZSdzXFxuaG91c2UvQURTR1xcbmhvdXNlYm9hdC9TTVxcbmhvdXNlYm91bmRcXG5ob3VzZWJveS9TTVxcbmhvdXNlYnJlYWsvUlNaR1xcbmhvdXNlYnJlYWtlci9NXFxuaG91c2VicmVha2luZy9NXFxuaG91c2Vicm9rZVxcbmhvdXNlYnJva2VuXFxuaG91c2VjbGVhbi9EU0dcXG5ob3VzZWNsZWFuaW5nL01cXG5ob3VzZWNvYXQvU01cXG5ob3VzZWZseS9TTVxcbmhvdXNlZnVsL1NNXFxuaG91c2Vob2xkL1NNUlpcXG5ob3VzZWhvbGRlci9NXFxuaG91c2VodXNiYW5kL1NNXFxuaG91c2VrZWVwZXIvTVNcXG5ob3VzZWtlZXBpbmcvTVxcbmhvdXNlbGlnaHRzL01cXG5ob3VzZW1haWQvU01cXG5ob3VzZW1hbi9NXFxuaG91c2VtYXN0ZXIvU1xcbmhvdXNlbWF0ZS9TXFxuaG91c2VtZW5cXG5ob3VzZW1pc3RyZXNzL1NcXG5ob3VzZW1vdGhlci9TTVxcbmhvdXNlcGFyZW50L1NNXFxuaG91c2VwbGFudC9NU1xcbmhvdXNlcHJvdWRcXG5ob3VzZXJvb21cXG5ob3VzZXRvcC9TTVxcbmhvdXNld2FyZXMvTVxcbmhvdXNld2FybWluZy9TTVxcbmhvdXNld2lmZS9NWVxcbmhvdXNld2l2ZXNcXG5ob3VzZXdvcmsvTVxcbmhvdXNpbmcvTVNcXG5ob3ZlXFxuaG92ZWwvU01cXG5ob3Zlci9TR0RcXG5ob3ZlcmJvYXJkL01TXFxuaG92ZXJjcmFmdC9NU1xcbmhvdydkXFxuaG93J3JlXFxuaG93L1NNXFxuaG93YmVpdFxcbmhvd2RhaC9NXFxuaG93ZGFoc1xcbmhvd2R5XFxuaG93ZXZlclxcbmhvd2l0emVyL1NNXFxuaG93bC9NRFJTWkdcXG5ob3dsZXIvTVxcbmhvd3NvZXZlclxcbmhveWRlbi9NU1xcbmhveWRlbmlzaFxcbmhwXFxuaHIvU1xcbmh0XFxuaHVhcmFjaGUvU01cXG5odWIvU01cXG5odWJidWIvU01cXG5odWJieS9TTVxcbmh1YmNhcC9TTVxcbmh1YnJpcy9NXFxuaHVja2xlYmVycnkvU01cXG5odWNrc3Rlci9TR01EXFxuaHVja3N0ZXJpc20vTVxcbmh1ZGRsZS9EU01HXFxuaHVlL0RTTVxcbmh1ZmYvTURTR1xcbmh1ZmZpbHlcXG5odWZmaW5lc3MvTVxcbmh1ZmZ5L1BSVFxcbmh1Zy9TVE1SXFxuaHVnZS9ZUFxcbmh1Z2VuZXNzL01cXG5odWdnZWRcXG5odWdnaW5nXFxuaHVoXFxuaHVsYS9NU1xcbmh1bGsvTVNHXFxuaHVsbC9NRFJTWkdcXG5odWxsYWJhbG9vL1NNXFxuaHVsbGVyL01cXG5odW0vU01cXG5odW1hbi9TTVJZVFBcXG5odW1hbmUvUFlcXG5odW1hbmVuZXNzL01cXG5odW1hbmlzbS9NXFxuaHVtYW5pc3QvU01cXG5odW1hbmlzdGljXFxuaHVtYW5pdGFyaWFuL01TXFxuaHVtYW5pdGFyaWFuaXNtL01cXG5odW1hbml0aWVzL01cXG5odW1hbml0eS9JU01cXG5odW1hbml6YXRpb24vQ01cXG5odW1hbml6ZS9DRFNHXFxuaHVtYW5pemVyL1NNXFxuaHVtYW5raW5kL01cXG5odW1hbm5lc3MvTVxcbmh1bWFub2lkL1NNXFxuaHVtYmxlL0RSU1pUR0pQXFxuaHVtYmxlbmVzcy9NXFxuaHVtYmxlci9NXFxuaHVtYmx5XFxuaHVtYnVnL1NNXFxuaHVtYnVnZ2VkXFxuaHVtYnVnZ2luZ1xcbmh1bWRpbmdlci9NU1xcbmh1bWRydW0vTVxcbmh1bWVyYWxcXG5odW1lcmlcXG5odW1lcnVzL01cXG5odW1pZC9ZXFxuaHVtaWRpZmljYXRpb24vTVxcbmh1bWlkaWZpZXIvQ01cXG5odW1pZGlmeS9DWkdEUlNcXG5odW1pZGl0eS9NXFxuaHVtaWRvci9TTVxcbmh1bWlsaWF0ZS9EU0dOWFxcbmh1bWlsaWF0aW5nL1lcXG5odW1pbGlhdGlvbi9NXFxuaHVtaWxpdHkvTVxcbmh1bW1lZFxcbmh1bW1lci9TTVxcbmh1bW1pbmdcXG5odW1taW5nYmlyZC9TTVxcbmh1bW1vY2svU01cXG5odW1tb2NreVxcbmh1bW11cy9NXFxuaHVtb25nb3VzXFxuaHVtb3IvU01ER1xcbmh1bW9yZXNxdWVcXG5odW1vcmlzdC9NU1xcbmh1bW9ybGVzcy9ZUFxcbmh1bW9ybGVzc25lc3MvTVxcbmh1bW9yb3VzL1BZXFxuaHVtb3JvdXNuZXNzL01cXG5odW1wL01EU0dcXG5odW1wYmFjay9NRFNcXG5odW1waC9ER1xcbmh1bXBoc1xcbmh1bXVzL01cXG5odW5jaC9NRFNHXFxuaHVuY2hiYWNrL1NNRFxcbmh1bmRyZWQvU01IXFxuaHVuZHJlZGZvbGRcXG5odW5kcmVkdGgvTVxcbmh1bmRyZWR0aHNcXG5odW5kcmVkd2VpZ2h0L1NNXFxuaHVuZ1xcbmh1bmdlci9TTURHXFxuaHVuZ292ZXJcXG5odW5ncmlseVxcbmh1bmdyaW5lc3MvTVxcbmh1bmdyeS9QUlRcXG5odW5rL01SU1pcXG5odW5rZXIvREdcXG5odW5reS9SVFxcbmh1bnQvTURSU1pHXFxuaHVudGVyL01cXG5odW50aW5nL01cXG5odW50cmVzcy9NU1xcbmh1bnRzbWFuL01cXG5odW50c21lblxcbmh1cmRsZS9EUlNNWkdcXG5odXJkbGVyL01cXG5odXJkbGluZy9NXFxuaHVybC9NRFJTWkdcXG5odXJsZXIvTVxcbmh1cmxpbmcvTVxcbmh1cnJhaC9HTURcXG5odXJyYWhzXFxuaHVycmljYW5lL01TXFxuaHVycmllZC9VWVxcbmh1cnJ5L0RTTUdcXG5odXJ0L01TR1xcbmh1cnRmdWwvWVBcXG5odXJ0ZnVsbmVzcy9NXFxuaHVydGxlL0RTR1xcbmh1c2JhbmQvR01EU1xcbmh1c2JhbmRtYW4vTVxcbmh1c2JhbmRtZW5cXG5odXNiYW5kcnkvTVxcbmh1c2gvTURTR1xcbmh1c2svTURSU1pHXFxuaHVza2VyL01cXG5odXNraWx5XFxuaHVza2luZXNzL01cXG5odXNreS9QUlNNVFxcbmh1c3Nhci9TTVxcbmh1c3N5L1NNXFxuaHVzdGluZ3MvTVxcbmh1c3RsZS9EUlNNWkdcXG5odXN0bGVyL01cXG5odXQvU01cXG5odXRjaC9NU1xcbmh1enphaC9NREdcXG5odXp6YWhzXFxuaHd5XFxuaHlhY2ludGgvTVxcbmh5YWNpbnRoc1xcbmh5YnJpZC9TTVxcbmh5YnJpZGlzbS9NXFxuaHlicmlkaXphdGlvbi9NXFxuaHlicmlkaXplL0RTR1xcbmh5ZHJhL1NNXFxuaHlkcmFuZ2VhL1NNXFxuaHlkcmFudC9NU1xcbmh5ZHJhdGUnc1xcbmh5ZHJhdGUvQ0dORFNcXG5oeWRyYXRpb24vQ01cXG5oeWRyYXVsaWMvU1xcbmh5ZHJhdWxpY2FsbHlcXG5oeWRyYXVsaWNzL01cXG5oeWRyby9NXFxuaHlkcm9jYXJib24vTVNcXG5oeWRyb2NlcGhhbHVzL01cXG5oeWRyb2NobG9yaWRlXFxuaHlkcm9jb3J0aXNvbmVcXG5oeWRyb2R5bmFtaWMvU1xcbmh5ZHJvZHluYW1pY3MvTVxcbmh5ZHJvZWxlY3RyaWNcXG5oeWRyb2VsZWN0cmljYWxseVxcbmh5ZHJvZWxlY3RyaWNpdHkvTVxcbmh5ZHJvZm9pbC9NU1xcbmh5ZHJvZ2VuL01cXG5oeWRyb2dlbmF0ZS9DR0RTXFxuaHlkcm9nZW5hdGlvbi9NXFxuaHlkcm9nZW5vdXNcXG5oeWRyb2xvZ2lzdC9NU1xcbmh5ZHJvbG9neS9NXFxuaHlkcm9seXNlc1xcbmh5ZHJvbHlzaXMvTVxcbmh5ZHJvbHl6ZS9EU0dcXG5oeWRyb21ldGVyL1NNXFxuaHlkcm9tZXRyeS9NXFxuaHlkcm9waGlsaWNcXG5oeWRyb3Bob2JpYS9NXFxuaHlkcm9waG9iaWNcXG5oeWRyb3Bob25lL1NNXFxuaHlkcm9wbGFuZS9HRFNNXFxuaHlkcm9wb25pYy9TXFxuaHlkcm9wb25pY2FsbHlcXG5oeWRyb3Bvbmljcy9NXFxuaHlkcm9zcGhlcmUvTVxcbmh5ZHJvdGhlcmFweS9NXFxuaHlkcm90aGVybWFsXFxuaHlkcm91c1xcbmh5ZHJveGlkZS9TTVxcbmh5ZW5hL1NNXFxuaHlnaWVuZS9NXFxuaHlnaWVuaWMvVVxcbmh5Z2llbmljYWxseVxcbmh5Z2llbmlzdC9NU1xcbmh5Z3JvbWV0ZXIvU01cXG5oeWluZ1xcbmh5bWVuL1NNXFxuaHltZW5lYWxcXG5oeW1uL01EU0dcXG5oeW1uYWwvTVNcXG5oeW1uYm9vay9TTVxcbmh5cGUvTUdEUlNcXG5oeXBlcmFjdGl2ZVxcbmh5cGVyYWN0aXZpdHkvTVxcbmh5cGVyYm9sYS9TTVxcbmh5cGVyYm9sZS9NXFxuaHlwZXJib2xpY1xcbmh5cGVyY3JpdGljYWwvWVxcbmh5cGVyY3ViZVxcbmh5cGVyZ2x5Y2VtaWEvTVxcbmh5cGVyaW5mbGF0aW9uXFxuaHlwZXJsaW5rL0dTTURcXG5oeXBlcm1hcmtldC9TXFxuaHlwZXJtZWRpYS9NXFxuaHlwZXJwYXJhdGh5cm9pZGlzbVxcbmh5cGVycGxhbmVcXG5oeXBlcnNlbnNpdGl2ZS9QXFxuaHlwZXJzZW5zaXRpdmVuZXNzL01cXG5oeXBlcnNlbnNpdGl2aXR5L1NNXFxuaHlwZXJzcGFjZS9TXFxuaHlwZXJ0ZW5zaW9uL01cXG5oeXBlcnRlbnNpdmUvU01cXG5oeXBlcnRleHQvTVxcbmh5cGVydGh5cm9pZC9NXFxuaHlwZXJ0aHlyb2lkaXNtL01cXG5oeXBlcnRyb3BoeS9EU01HXFxuaHlwZXJ2ZW50aWxhdGUvR05EU1xcbmh5cGVydmVudGlsYXRpb24vTVxcbmh5cGVydmlzb3IvTVNcXG5oeXBoZW4vTURTR1xcbmh5cGhlbmF0ZS9YRFNNR05cXG5oeXBoZW5hdGlvbi9NXFxuaHlwbm9zZXNcXG5oeXBub3Npcy9NXFxuaHlwbm90aGVyYXBpc3QvU1xcbmh5cG5vdGhlcmFweS9NXFxuaHlwbm90aWMvU01cXG5oeXBub3RpY2FsbHlcXG5oeXBub3Rpc20vTVxcbmh5cG5vdGlzdC9NU1xcbmh5cG5vdGl6ZS9HRFNcXG5oeXBvL01TXFxuaHlwb2FsbGVyZ2VuaWNcXG5oeXBvY2hvbmRyaWEvTVxcbmh5cG9jaG9uZHJpYWMvU01cXG5oeXBvY3Jpc3kvU01cXG5oeXBvY3JpdGUvTVNcXG5oeXBvY3JpdGljYWwvWVxcbmh5cG9kZXJtaWMvTVNcXG5oeXBvZ2x5Y2VtaWEvTVxcbmh5cG9nbHljZW1pYy9TTVxcbmh5cG90ZW51c2UvTVNcXG5oeXBvdGhhbGFtaVxcbmh5cG90aGFsYW11cy9NXFxuaHlwb3RoZXJtaWEvTVxcbmh5cG90aGVzZXNcXG5oeXBvdGhlc2lzL01cXG5oeXBvdGhlc2l6ZS9EU0dcXG5oeXBvdGhldGljYWwvWVxcbmh5cG90aHlyb2lkL01cXG5oeXBvdGh5cm9pZGlzbS9NXFxuaHlzc29wL01cXG5oeXN0ZXJlY3RvbXkvU01cXG5oeXN0ZXJlc2lzXFxuaHlzdGVyaWEvTVxcbmh5c3RlcmljL1NNXFxuaHlzdGVyaWNhbC9ZXFxuaHlzdGVyaWNzL01cXG5pL1VTXFxuaU9TL01cXG5pUGFkL01cXG5pUGhvbmUvTVxcbmlQb2QvTVxcbmlUdW5lcy9NXFxuaWFtYi9NU1xcbmlhbWJpXFxuaWFtYmljL1NNXFxuaWFtYnVzL01TXFxuaWJleC9NU1xcbmliaWRcXG5pYmlkZW1cXG5pYmlzL01TXFxuaWJ1cHJvZmVuL01cXG5pY2Unc1xcbmljZS9DRFNHXFxuaWNlYmVyZy9TTVxcbmljZWJvYXQvU01cXG5pY2Vib3VuZFxcbmljZWJveC9NU1xcbmljZWJyZWFrZXIvU01cXG5pY2VjYXAvU01cXG5pY2VtYW4vTVxcbmljZW1lblxcbmljaHRoeW9sb2dpc3QvTVNcXG5pY2h0aHlvbG9neS9NXFxuaWNpY2xlL1NNXFxuaWNpbHlcXG5pY2luZXNzL01cXG5pY2luZy9TTVxcbmlja3kvUlRcXG5pY29uL01TXFxuaWNvbmljXFxuaWNvbm9jbGFzbS9NXFxuaWNvbm9jbGFzdC9TTVxcbmljb25vY2xhc3RpY1xcbmljb25vZ3JhcGh5L01cXG5pY3R1cy9NXFxuaWN5L1RQUlxcbmlkL1NNWVxcbmlkZWEvTVNcXG5pZGVhbC9TTVlcXG5pZGVhbGlzbS9NXFxuaWRlYWxpc3QvU01cXG5pZGVhbGlzdGljXFxuaWRlYWxpc3RpY2FsbHlcXG5pZGVhbGl6YXRpb24vTVNcXG5pZGVhbGl6ZS9EU0dcXG5pZGVtXFxuaWRlbXBvdGVudFxcbmlkZW50aWNhbC9ZXFxuaWRlbnRpZmlhYmxlL1VcXG5pZGVudGlmaWNhdGlvbi9NXFxuaWRlbnRpZmllZC9VXFxuaWRlbnRpZnkvWkdORFJTWFxcbmlkZW50aWtpdC9TXFxuaWRlbnRpdHkvU01cXG5pZGVvZ3JhbS9TTVxcbmlkZW9ncmFwaC9NXFxuaWRlb2dyYXBoc1xcbmlkZW9sb2dpY2FsL1lcXG5pZGVvbG9naXN0L1NNXFxuaWRlb2xvZ3VlL01TXFxuaWRlb2xvZ3kvU01cXG5pZGVzL01cXG5pZGlvY3kvU01cXG5pZGlvbS9TTVxcbmlkaW9tYXRpYy9VXFxuaWRpb21hdGljYWxseVxcbmlkaW9wYXRoaWNcXG5pZGlvc3luY3Jhc3kvU01cXG5pZGlvc3luY3JhdGljXFxuaWRpb3N5bmNyYXRpY2FsbHlcXG5pZGlvdC9TTVxcbmlkaW90aWNcXG5pZGlvdGljYWxseVxcbmlkbGUvTVpUR0RSU1BcXG5pZGxlbmVzcy9NXFxuaWRsZXIvTVxcbmlkb2wvTVNcXG5pZG9sYXRlci9TTVxcbmlkb2xhdHJlc3MvTVNcXG5pZG9sYXRyb3VzXFxuaWRvbGF0cnkvTVxcbmlkb2xpemF0aW9uL01cXG5pZG9saXplL0dEU1xcbmlkeWxsL1NNXFxuaWR5bGxpY1xcbmlkeWxsaWNhbGx5XFxuaWYvU01cXG5pZmZpbmVzcy9NXFxuaWZmeS9SVFBcXG5pZ2xvby9TTVxcbmlnbmVvdXNcXG5pZ25pdGFibGVcXG5pZ25pdGUvQUdEU1xcbmlnbml0aW9uL01TXFxuaWdub2JsZVxcbmlnbm9ibHlcXG5pZ25vbWluaW91cy9ZXFxuaWdub21pbnkvU01cXG5pZ25vcmFtdXMvTVNcXG5pZ25vcmFuY2UvTVxcbmlnbm9yYW50L1lcXG5pZ25vcmUvR0RTXFxuaWd1YW5hL01TXFxuaWlcXG5paWlcXG5pbGVhXFxuaWxlaXRpcy9NXFxuaWxldW0vTVxcbmlsaWFcXG5pbGl1bS9NXFxuaWxrL1NNXFxuaWxsL1NNUFxcbmlsbGVnYWwvTVlTXFxuaWxsZWdhbGl0eS9TTVxcbmlsbGVnaWJpbGl0eS9NXFxuaWxsZWdpYmxlXFxuaWxsZWdpYmx5XFxuaWxsZWdpdGltYWN5L01cXG5pbGxlZ2l0aW1hdGUvWVxcbmlsbGliZXJhbC9ZXFxuaWxsaWJlcmFsaXR5L01cXG5pbGxpY2l0L1lQXFxuaWxsaWNpdG5lc3MvTVxcbmlsbGltaXRhYmxlXFxuaWxsaXRlcmFjeS9NXFxuaWxsaXRlcmF0ZS9NWVNcXG5pbGxuZXNzL01TXFxuaWxsb2dpY2FsL1lcXG5pbGxvZ2ljYWxpdHkvTVxcbmlsbHVtaW5hdGUvR05YRFNcXG5pbGx1bWluYXRpbmcvWVxcbmlsbHVtaW5hdGlvbi9NXFxuaWxsdW1pbmUvRFNCR1xcbmlsbHVzL1ZcXG5pbGx1c2lvbi9FTVNcXG5pbGx1c2lvbmlzdC9TTVxcbmlsbHVzb3J5XFxuaWxsdXN0cmF0ZS9HTlZYRFNcXG5pbGx1c3RyYXRpb24vTVxcbmlsbHVzdHJhdGl2ZS9ZXFxuaWxsdXN0cmF0b3IvU01cXG5pbGx1c3RyaW91cy9QWVxcbmlsbHVzdHJpb3VzbmVzcy9NXFxuaW1hZ2UvRFNNR1xcbmltYWdlcnkvTVxcbmltYWdpbmFibGUvVVxcbmltYWdpbmFibHkvVVxcbmltYWdpbmFsXFxuaW1hZ2luYXJ5XFxuaW1hZ2luYXRpb24vTVNcXG5pbWFnaW5hdGl2ZS9VWVxcbmltYWdpbmUvRFNCSkdcXG5pbWFnby9NXFxuaW1hZ29lc1xcbmltYW0vTVNcXG5pbWJhbGFuY2UvRFNNXFxuaW1iZWNpbGUvTVNcXG5pbWJlY2lsaWNcXG5pbWJlY2lsaXR5L1NNXFxuaW1iaWJlL1pHRFJTXFxuaW1iaWJlci9NXFxuaW1icmljYXRpb24vTVxcbmltYnJvZ2xpby9TTVxcbmltYnVlL0RTR1xcbmltaXRhYmxlL0lcXG5pbWl0YXRlL0RTR05WWFxcbmltaXRhdGlvbi9NXFxuaW1pdGF0aXZlL1BZXFxuaW1pdGF0aXZlbmVzcy9NXFxuaW1pdGF0b3IvU01cXG5pbW1hY3VsYXRlL1BZXFxuaW1tYWN1bGF0ZW5lc3MvTVxcbmltbWFuZW5jZS9NXFxuaW1tYW5lbmN5L01cXG5pbW1hbmVudC9ZXFxuaW1tYXRlcmlhbC9ZUFxcbmltbWF0ZXJpYWxpdHkvTVxcbmltbWF0ZXJpYWxuZXNzL01cXG5pbW1hdHVyZS9ZXFxuaW1tYXR1cml0eS9NXFxuaW1tZWFzdXJhYmxlXFxuaW1tZWFzdXJhYmx5XFxuaW1tZWRpYWNpZXMvTVxcbmltbWVkaWFjeS9TTVxcbmltbWVkaWF0ZS9QWVxcbmltbWVkaWF0ZW5lc3MvTVxcbmltbWVtb3JpYWwvWVxcbmltbWVuc2UvWVxcbmltbWVuc2l0eS9TTVxcbmltbWVyc2UvWERTR05WXFxuaW1tZXJzaWJsZVxcbmltbWVyc2lvbi9NXFxuaW1taWdyYW50L1NNXFxuaW1taWdyYXRlL0RTR05cXG5pbW1pZ3JhdGlvbi9NXFxuaW1taW5lbmNlL01cXG5pbW1pbmVudC9ZXFxuaW1tb2JpbGVcXG5pbW1vYmlsaXR5L01cXG5pbW1vYmlsaXphdGlvbi9NXFxuaW1tb2JpbGl6ZS9aR0RSU1xcbmltbW9kZXJhdGUvWVxcbmltbW9kZXN0L1lcXG5pbW1vZGVzdHkvTVxcbmltbW9sYXRlL0RTR05cXG5pbW1vbGF0aW9uL01cXG5pbW1vcmFsL1lcXG5pbW1vcmFsaXR5L1NNXFxuaW1tb3J0YWwvTVlTXFxuaW1tb3J0YWxpdHkvTVxcbmltbW9ydGFsaXplL0RTR1xcbmltbW92YWJpbGl0eS9NXFxuaW1tb3ZhYmxlXFxuaW1tb3ZhYmx5XFxuaW1tdW5lXFxuaW1tdW5pdHkvTVxcbmltbXVuaXphdGlvbi9TTVxcbmltbXVuaXplL0dEU1xcbmltbXVub2RlZmljaWVuY3kvTVxcbmltbXVub2RlZmljaWVudFxcbmltbXVub2dsb2J1bGluL1NcXG5pbW11bm9sb2dpY1xcbmltbXVub2xvZ2ljYWxcXG5pbW11bm9sb2dpc3QvTVNcXG5pbW11bm9sb2d5L01cXG5pbW11cmUvRFNHXFxuaW1tdXRhYmlsaXR5L01cXG5pbW11dGFibGVcXG5pbW11dGFibHlcXG5pbXAvU01SXFxuaW1wYWN0L1NNREdcXG5pbXBhaXIvU0RHTFxcbmltcGFpcmVkL1VcXG5pbXBhaXJtZW50L01TXFxuaW1wYWxhL1NNXFxuaW1wYWxlL0RTR0xcXG5pbXBhbGVtZW50L01cXG5pbXBhbHBhYmxlXFxuaW1wYWxwYWJseVxcbmltcGFuZWwvU0RHXFxuaW1wYXJ0L1NER1xcbmltcGFydGlhbC9ZXFxuaW1wYXJ0aWFsaXR5L01cXG5pbXBhc3NhYmx5XFxuaW1wYXNzZS9CU01WXFxuaW1wYXNzaWJpbGl0eS9NXFxuaW1wYXNzaWJsZVxcbmltcGFzc2libHlcXG5pbXBhc3Npb25lZFxcbmltcGFzc2l2ZS9ZUFxcbmltcGFzc2l2ZW5lc3MvTVxcbmltcGFzc2l2aXR5L01cXG5pbXBhc3RvL01cXG5pbXBhdGllbmNlL01TXFxuaW1wYXRpZW5zL01cXG5pbXBhdGllbnQvWVxcbmltcGVhY2gvWkdCTERSU1xcbmltcGVhY2hhYmxlL1VcXG5pbXBlYWNoZXIvTVxcbmltcGVhY2htZW50L1NNXFxuaW1wZWNjYWJpbGl0eS9NXFxuaW1wZWNjYWJsZVxcbmltcGVjY2FibHlcXG5pbXBlY3VuaW91cy9QWVxcbmltcGVjdW5pb3VzbmVzcy9NXFxuaW1wZWRhbmNlL01cXG5pbXBlZGUvRFNHXFxuaW1wZWRlZC9VXFxuaW1wZWRpbWVudC9TTVxcbmltcGVkaW1lbnRhL01cXG5pbXBlbC9TXFxuaW1wZWxsZWRcXG5pbXBlbGxlci9NU1xcbmltcGVsbGluZ1xcbmltcGVuZC9TREdcXG5pbXBlbmV0cmFiaWxpdHkvTVxcbmltcGVuZXRyYWJsZVxcbmltcGVuZXRyYWJseVxcbmltcGVuaXRlbmNlL01cXG5pbXBlbml0ZW50L1lcXG5pbXBlcmF0aXZlL1NNWVxcbmltcGVyY2VwdGliaWxpdHkvTVxcbmltcGVyY2VwdGlibGVcXG5pbXBlcmNlcHRpYmx5XFxuaW1wZXJjZXB0aXZlXFxuaW1wZXJmXFxuaW1wZXJmZWN0L1NNWVBcXG5pbXBlcmZlY3Rpb24vTVNcXG5pbXBlcmZlY3RuZXNzL01cXG5pbXBlcmlhbC9NWVNcXG5pbXBlcmlhbGlzbS9NXFxuaW1wZXJpYWxpc3QvU01cXG5pbXBlcmlhbGlzdGljXFxuaW1wZXJpYWxpc3RpY2FsbHlcXG5pbXBlcmlsL0dTTERcXG5pbXBlcmlsbWVudC9NXFxuaW1wZXJpb3VzL1BZXFxuaW1wZXJpb3VzbmVzcy9NXFxuaW1wZXJpc2hhYmxlXFxuaW1wZXJpc2hhYmx5XFxuaW1wZXJtYW5lbmNlL01cXG5pbXBlcm1hbmVudC9ZXFxuaW1wZXJtZWFiaWxpdHkvTVxcbmltcGVybWVhYmxlXFxuaW1wZXJtZWFibHlcXG5pbXBlcm1pc3NpYmxlXFxuaW1wZXJzb25hbC9ZXFxuaW1wZXJzb25hdGUvR05YRFNcXG5pbXBlcnNvbmF0aW9uL01cXG5pbXBlcnNvbmF0b3IvU01cXG5pbXBlcnRpbmVuY2UvTVNcXG5pbXBlcnRpbmVudC9ZXFxuaW1wZXJ0dXJiYWJpbGl0eS9NXFxuaW1wZXJ0dXJiYWJsZVxcbmltcGVydHVyYmFibHlcXG5pbXBlcnZpb3VzL1lcXG5pbXBldGlnby9NXFxuaW1wZXR1b3NpdHkvTVxcbmltcGV0dW91cy9ZUFxcbmltcGV0dW91c25lc3MvTVxcbmltcGV0dXMvTVNcXG5pbXBpZXR5L1NNXFxuaW1waW5nZS9MRFNHXFxuaW1waW5nZW1lbnQvTVxcbmltcGlvdXMvUFlcXG5pbXBpb3VzbmVzcy9NXFxuaW1waXNoL1lQXFxuaW1waXNobmVzcy9NXFxuaW1wbGFjYWJpbGl0eS9NXFxuaW1wbGFjYWJsZVxcbmltcGxhY2FibHlcXG5pbXBsYW50L0JTR01EXFxuaW1wbGFudGF0aW9uL01cXG5pbXBsYXVzaWJpbGl0eS9TTVxcbmltcGxhdXNpYmxlXFxuaW1wbGF1c2libHlcXG5pbXBsZW1lbnQvR0JNRFJTXFxuaW1wbGVtZW50YWJsZS9VXFxuaW1wbGVtZW50YXRpb24vU01cXG5pbXBsZW1lbnRlZC9VXFxuaW1wbGljYXRlL0RTR1xcbmltcGxpY2F0aW9uL01cXG5pbXBsaWNpdC9QWVxcbmltcGxpY2l0bmVzcy9NXFxuaW1wbG9kZS9EU0dcXG5pbXBsb3JlL0RTR1xcbmltcGxvcmluZy9ZXFxuaW1wbG9zaW9uL01TXFxuaW1wbG9zaXZlXFxuaW1wbHkvWERTR05cXG5pbXBvbGl0ZS9ZUFxcbmltcG9saXRlbmVzcy9NU1xcbmltcG9saXRpY1xcbmltcG9uZGVyYWJsZS9NU1xcbmltcG9ydC9aR0JTTURSXFxuaW1wb3J0YW5jZS9NXFxuaW1wb3J0YW50L1lcXG5pbXBvcnRhdGlvbi9NU1xcbmltcG9ydGVyL01cXG5pbXBvcnR1bmF0ZS9ZXFxuaW1wb3J0dW5lL0dEU1xcbmltcG9ydHVuaXR5L01cXG5pbXBvc2UvQURTR1xcbmltcG9zZXIvTVNcXG5pbXBvc2luZy9VXFxuaW1wb3NpbmdseVxcbmltcG9zaXRpb24vTVNcXG5pbXBvc3NpYmlsaXR5L1NNXFxuaW1wb3NzaWJsZS9TXFxuaW1wb3NzaWJseVxcbmltcG9zdC9TTVxcbmltcG9zdG9yL1NNXFxuaW1wb3N0dXJlL01TXFxuaW1wb3RlbmNlL01cXG5pbXBvdGVuY3kvTVxcbmltcG90ZW50L1lcXG5pbXBvdW5kL0RHU1xcbmltcG92ZXJpc2gvRFNMR1xcbmltcG92ZXJpc2htZW50L01cXG5pbXByYWN0aWNhYmlsaXR5XFxuaW1wcmFjdGljYWJsZVxcbmltcHJhY3RpY2FibHlcXG5pbXByYWN0aWNhbC9ZXFxuaW1wcmFjdGljYWxpdHkvTVxcbmltcHJlY2F0ZS9EU1hHTlxcbmltcHJlY2F0aW9uL01cXG5pbXByZWNpc2UvUFlOXFxuaW1wcmVjaXNlbmVzcy9NXFxuaW1wcmVjaXNpb24vTVxcbmltcHJlZ25hYmlsaXR5L01cXG5pbXByZWduYWJsZVxcbmltcHJlZ25hYmx5XFxuaW1wcmVnbmF0ZS9HTkRTXFxuaW1wcmVnbmF0aW9uL01cXG5pbXByZXNhcmlvL1NNXFxuaW1wcmVzcy9NRFNHVlxcbmltcHJlc3NlZC9VXFxuaW1wcmVzc2liaWxpdHkvTVxcbmltcHJlc3NpYmxlXFxuaW1wcmVzc2lvbi9CU01cXG5pbXByZXNzaW9uYWJpbGl0eS9NXFxuaW1wcmVzc2lvbmlzbS9NXFxuaW1wcmVzc2lvbmlzdC9TTVxcbmltcHJlc3Npb25pc3RpY1xcbmltcHJlc3NpdmUvUFlcXG5pbXByZXNzaXZlbmVzcy9NXFxuaW1wcmltYXR1ci9TTVxcbmltcHJpbnQvTURSWkdTXFxuaW1wcmludGVyL01cXG5pbXByaXNvbi9TRExHXFxuaW1wcmlzb25tZW50L1NNXFxuaW1wcm9iYWJpbGl0eS9TTVxcbmltcHJvYmFibGVcXG5pbXByb2JhYmx5XFxuaW1wcm9tcHR1L1NNXFxuaW1wcm9wZXIvWVxcbmltcHJvcHJpZXR5L1NNXFxuaW1wcm92ZS9HQkRTTFxcbmltcHJvdmVkL1VcXG5pbXByb3ZlbWVudC9NU1xcbmltcHJvdmlkZW5jZS9NXFxuaW1wcm92aWRlbnQvWVxcbmltcHJvdmlzYXRpb24vU01cXG5pbXByb3Zpc2F0aW9uYWxcXG5pbXByb3Zpc2UvWkdEUlNcXG5pbXByb3Zpc2VyL01cXG5pbXBydWRlbmNlL01cXG5pbXBydWRlbnQvWVxcbmltcHVkZW5jZS9NXFxuaW1wdWRlbnQvWVxcbmltcHVnbi9aR1NEUlxcbmltcHVnbmVyL01cXG5pbXB1bHNlL01HTlZEU1xcbmltcHVsc2lvbi9NXFxuaW1wdWxzaXZlL1BZXFxuaW1wdWxzaXZlbmVzcy9NXFxuaW1wdWxzaXZpdHlcXG5pbXB1bml0eS9NXFxuaW1wdXJlL1JZVFxcbmltcHVyaXR5L1NNXFxuaW1wdXRhdGlvbi9TTVxcbmltcHV0ZS9CRFNHXFxuaW4vQVNNXFxuaW5hY2N1cmFjeS9TXFxuaW5hY3Rpb24vTVxcbmluYWRlcXVhY3kvU1xcbmluYWR2ZXJ0ZW5jZS9NXFxuaW5hZHZlcnRlbnQvWVxcbmluYWxpZW5hYmlsaXR5L01cXG5pbmFsaWVuYWJseVxcbmluYW1vcmF0YS9TTVxcbmluYW5lL1JZVFxcbmluYW5pbWF0ZS9QWVxcbmluYW5pbWF0ZW5lc3MvTVxcbmluYW5pdHkvU01cXG5pbmFwcHJvcHJpYXRlL1lcXG5pbmFydGljdWxhdGUvWVxcbmluYXNtdWNoXFxuaW5hdWRpYmxlXFxuaW5hdWd1cmFsL1NNXFxuaW5hdWd1cmF0ZS9YR05EU1xcbmluYXVndXJhdGlvbi9NXFxuaW5ib2FyZC9NU1xcbmluYm91bmRcXG5pbmJveC9NU1xcbmluYnJlZWQvU1xcbmluYy9UR0RcXG5pbmNhbGN1bGFibHlcXG5pbmNhbmRlc2NlbmNlL01cXG5pbmNhbmRlc2NlbnQvWVxcbmluY2FudGF0aW9uL1NNXFxuaW5jYXBhY2l0YXRlL0dORFNcXG5pbmNhcmNlcmF0ZS9YRFNHTlxcbmluY2FyY2VyYXRpb24vTVxcbmluY2FybmFkaW5lL0RTR1xcbmluY2FybmF0ZS9BWEdORFNcXG5pbmNhcm5hdGlvbi9BTVxcbmluY2VuZGlhcnkvU01cXG5pbmNlbnNlL01HRFNcXG5pbmNlbnRpdmUnc1xcbmluY2VudGl2ZS9FU1xcbmluY2VwdGlvbi9TTVxcbmluY2Vzc2FudC9ZXFxuaW5jZXN0L01cXG5pbmNlc3R1b3VzL1BZXFxuaW5jZXN0dW91c25lc3MvTVxcbmluY2gvTURTR1xcbmluY2hvYXRlXFxuaW5jaHdvcm0vU01cXG5pbmNpZGVuY2UvU01cXG5pbmNpZGVudC9TTVxcbmluY2lkZW50YWwvTVlTXFxuaW5jaW5lcmF0ZS9EU0dOXFxuaW5jaW5lcmF0aW9uL01cXG5pbmNpbmVyYXRvci9NU1xcbmluY2lwaWVuY2UvTVxcbmluY2lwaWVudC9ZXFxuaW5jaXNlL1hHTlZEU1xcbmluY2lzaW9uL01cXG5pbmNpc2l2ZS9QWVxcbmluY2lzaXZlbmVzcy9NXFxuaW5jaXNvci9NU1xcbmluY2l0ZW1lbnQvTVNcXG5pbmNpdGVyL01TXFxuaW5jbFxcbmluY2xlbWVudFxcbmluY2xpbmF0aW9uL0VNXFxuaW5jbGluYXRpb25zXFxuaW5jbGluZSdzXFxuaW5jbGluZS9FR0RTXFxuaW5jbHVkZS9HRFNcXG5pbmNsdXNpb24vTVNcXG5pbmNsdXNpdmUvWVBcXG5pbmNsdXNpdmVuZXNzL01cXG5pbmNvZ25pdG8vTVNcXG5pbmNvbWJ1c3RpYmxlXFxuaW5jb21tb2RlL0dEXFxuaW5jb21tb2Rpb3VzXFxuaW5jb21tdW5pY2Fkb1xcbmluY29tcGF0aWJpbGl0eS9TXFxuaW5jb21wZXRlbnQvTVNcXG5pbmNvbXBsZXRlL1lcXG5pbmNvbmNlaXZhYmlsaXR5L01cXG5pbmNvbmdydW91cy9QWVxcbmluY29uZ3J1b3VzbmVzcy9NXFxuaW5jb25zb2xhYmx5XFxuaW5jb25zdGFudC9ZXFxuaW5jb250ZXN0YWJpbGl0eS9NXFxuaW5jb250ZXN0YWJseVxcbmluY29udGluZW50XFxuaW5jb250cm92ZXJ0aWJseVxcbmluY29udmVuaWVuY2UvR0RcXG5pbmNvcnBvcmF0ZS9BRFNHTlxcbmluY29ycG9yYXRlZC9VXFxuaW5jb3Jwb3JhdGlvbi9BTVxcbmluY29ycG9yZWFsXFxuaW5jb3JyZWN0L1lcXG5pbmNvcnJpZ2liaWxpdHkvTVxcbmluY29ycmlnaWJsZVxcbmluY29ycmlnaWJseVxcbmluY29ycnVwdGlibHlcXG5pbmNyZWFzaW5nL1lcXG5pbmNyZW1lbnQvU01ER1xcbmluY3JlbWVudGFsL1lcXG5pbmNyZW1lbnRhbGlzbVxcbmluY3JlbWVudGFsaXN0L1NNXFxuaW5jcmltaW5hdGUvR05EU1xcbmluY3JpbWluYXRpb24vTVxcbmluY3JpbWluYXRvcnlcXG5pbmNydXN0YXRpb24vU01cXG5pbmN1YmF0ZS9HTkRTXFxuaW5jdWJhdGlvbi9NXFxuaW5jdWJhdG9yL1NNXFxuaW5jdWJ1cy9NU1xcbmluY3VsY2F0ZS9EU0dOXFxuaW5jdWxjYXRpb24vTVxcbmluY3VscGF0ZS9EU0dcXG5pbmN1bWJlbmN5L1NNXFxuaW5jdW1iZW50L1NNXFxuaW5jdW5hYnVsYVxcbmluY3VuYWJ1bHVtL01cXG5pbmN1ci9TQlxcbmluY3VyYWJsZS9NU1xcbmluY3VyYWJseVxcbmluY3VyaW91c1xcbmluY3VycmVkXFxuaW5jdXJyaW5nXFxuaW5jdXJzaW9uL01TXFxuaW5kXFxuaW5kZWJ0ZWQvUFxcbmluZGVidGVkbmVzcy9NXFxuaW5kZWVkXFxuaW5kZWZhdGlnYWJsZVxcbmluZGVmYXRpZ2FibHlcXG5pbmRlZmVhc2libGVcXG5pbmRlZmVhc2libHlcXG5pbmRlZmluYWJseVxcbmluZGVsaWJsZVxcbmluZGVsaWJseVxcbmluZGVtbmlmaWNhdGlvbi9NXFxuaW5kZW1uaWZ5L0dEU1hOXFxuaW5kZW1uaXR5L1NNXFxuaW5kZW50YXRpb24vTVNcXG5pbmRlbnRpb24vTVxcbmluZGVudHVyZS9ER1xcbmluZGVzY3JpYmFibHlcXG5pbmRlc3RydWN0aWJseVxcbmluZGV0ZXJtaW5hYmx5XFxuaW5kZXRlcm1pbmFjeS9NXFxuaW5kZXRlcm1pbmF0ZS9ZXFxuaW5kZXgvWkdNRFJTXFxuaW5kZXhhdGlvbi9TTVxcbmluZGV4ZXIvTVxcbmluZGljYXRlL1hEU0dOVlxcbmluZGljYXRpb24vTVxcbmluZGljYXRpdmUvU01ZXFxuaW5kaWNhdG9yL01TXFxuaW5kaWN0L0dEU0JMXFxuaW5kaWN0bWVudC9TTVxcbmluZGllL1NcXG5pbmRpZ2VuY2UvTVxcbmluZGlnZW5vdXNcXG5pbmRpZ2VudC9TTVlcXG5pbmRpZ25hbnQvWVxcbmluZGlnbmF0aW9uL01cXG5pbmRpZ28vTVxcbmluZGlyZWN0L1lcXG5pbmRpc2NpcGxpbmVcXG5pbmRpc2NyZWV0L1lcXG5pbmRpc2NyZXRpb24vU1xcbmluZGlzY3JpbWluYXRlL1lcXG5pbmRpc3BlbnNhYmlsaXR5L01cXG5pbmRpc3BlbnNhYmxlL01TXFxuaW5kaXNwZW5zYWJseVxcbmluZGlzc29sdWJpbGl0eVxcbmluZGlzc29sdWJseVxcbmluZGlzdGluZ3Vpc2hhYmx5XFxuaW5kaXRlL0dEU1xcbmluZGl1bS9NXFxuaW5kaXZpZHVhbC9NWVNcXG5pbmRpdmlkdWFsaXNtL01cXG5pbmRpdmlkdWFsaXN0L01TXFxuaW5kaXZpZHVhbGlzdGljXFxuaW5kaXZpZHVhbGlzdGljYWxseVxcbmluZGl2aWR1YWxpdHkvTVxcbmluZGl2aWR1YWxpemF0aW9uL01cXG5pbmRpdmlkdWFsaXplL0dEU1xcbmluZGl2aWR1YXRlL0RTR05cXG5pbmRpdmlkdWF0aW9uL01cXG5pbmRpdmlzaWJseVxcbmluZG9jdHJpbmF0ZS9HTkRTXFxuaW5kb2N0cmluYXRpb24vTVxcbmluZG9sZW5jZS9NXFxuaW5kb2xlbnQvWVxcbmluZG9taXRhYmxlXFxuaW5kb21pdGFibHlcXG5pbmR1Yml0YWJsZVxcbmluZHViaXRhYmx5XFxuaW5kdWNlL0RSU1pHTFxcbmluZHVjZW1lbnQvU01cXG5pbmR1Y2VyL01cXG5pbmR1Y3QvREdWXFxuaW5kdWN0YW5jZS9NXFxuaW5kdWN0ZWUvU01cXG5pbmR1Y3Rpb24vTVNcXG5pbmR1Y3RpdmUvWVxcbmluZHVsZ2UvRFNHXFxuaW5kdWxnZW5jZS9TTVxcbmluZHVsZ2VudC9ZXFxuaW5kdXN0cmlhbC9ZXFxuaW5kdXN0cmlhbGlzbS9NXFxuaW5kdXN0cmlhbGlzdC9TTVxcbmluZHVzdHJpYWxpemF0aW9uL01cXG5pbmR1c3RyaWFsaXplL0RTR1xcbmluZHVzdHJpb3VzL1lQXFxuaW5kdXN0cmlvdXNuZXNzL01cXG5pbmR1c3RyeS9TTVxcbmluZHdlbGwvU0dcXG5pbmVicmlhdGUvTUdORFNcXG5pbmVicmlhdGlvbi9NXFxuaW5lZGlibGVcXG5pbmVmZmFiaWxpdHkvTVxcbmluZWZmYWJsZVxcbmluZWZmYWJseVxcbmluZWxhc3RpY1xcbmluZWxpZ2libGUvTVNcXG5pbmVsaWdpYmx5XFxuaW5lbHVjdGFibGVcXG5pbmVsdWN0YWJseVxcbmluZXB0L1lQXFxuaW5lcHRpdHVkZS9NXFxuaW5lcHRuZXNzL01cXG5pbmVxdWFsaXR5L1NcXG5pbmVydC9ZUFxcbmluZXJ0aWEvTVxcbmluZXJ0aWFsXFxuaW5lcnRuZXNzL01cXG5pbmVzY2FwYWJsZVxcbmluZXNjYXBhYmx5XFxuaW5lc3RpbWFibHlcXG5pbmV2aXRhYmlsaXR5L01cXG5pbmV2aXRhYmxlL01cXG5pbmV2aXRhYmx5XFxuaW5leGFjdC9ZXFxuaW5leGhhdXN0aWJseVxcbmluZXhvcmFiaWxpdHlcXG5pbmV4b3JhYmxlXFxuaW5leG9yYWJseVxcbmluZXhwZWRpZW50XFxuaW5leHBlcnQvWVxcbmluZXhwaWFibGVcXG5pbmV4cGxpY2FibHlcXG5pbmV4cHJlc3NpYmx5XFxuaW5leHByZXNzaXZlXFxuaW5leHRyaWNhYmx5XFxuaW5mL1pUXFxuaW5mYWxsaWJsZVxcbmluZmFteS9TTVxcbmluZmFuY3kvTVxcbmluZmFudC9NU1xcbmluZmFudGljaWRlL01TXFxuaW5mYW50aWxlXFxuaW5mYW50cnkvU01cXG5pbmZhbnRyeW1hbi9NXFxuaW5mYW50cnltZW5cXG5pbmZhcmN0L01TXFxuaW5mYXJjdGlvbi9NXFxuaW5mYXR1YXRlL0RTWEdOXFxuaW5mYXR1YXRpb24vTVxcbmluZmVjdC9BRVNER1xcbmluZmVjdGVkL1VcXG5pbmZlY3Rpb24vQVNNXFxuaW5mZWN0aW91cy9QWVxcbmluZmVjdGlvdXNuZXNzL01cXG5pbmZlbGljaXRvdXNcXG5pbmZlcmVuY2UvU01cXG5pbmZlcmVudGlhbFxcbmluZmVyaW9yL01TXFxuaW5mZXJpb3JpdHkvTVxcbmluZmVybmFsL1lcXG5pbmZlcm5vL01TXFxuaW5mZXJyZWRcXG5pbmZlcnJpbmdcXG5pbmZlc3QvR0RTXFxuaW5mZXN0YXRpb24vTVNcXG5pbmZpZGVsL01TXFxuaW5maWRlbGl0eS9TXFxuaW5maWx0cmF0b3IvU01cXG5pbmZpbml0ZS9NVlxcbmluZmluaXRlc2ltYWwvU01ZXFxuaW5maW5pdGl2YWxcXG5pbmZpbml0aXZlL01TXFxuaW5maW5pdHVkZS9NXFxuaW5maW5pdHkvU01cXG5pbmZpcm1cXG5pbmZpcm1hcnkvU01cXG5pbmZpcm1pdHkvU01cXG5pbmZpeFxcbmluZmxhbWUvRFNHXFxuaW5mbGFtbWFibGVcXG5pbmZsYW1tYXRpb24vU01cXG5pbmZsYW1tYXRvcnlcXG5pbmZsYXRhYmxlL1NNXFxuaW5mbGF0ZS9BRFNHXFxuaW5mbGF0aW9uL0VNXFxuaW5mbGF0aW9uYXJ5XFxuaW5mbGVjdC9TREdcXG5pbmZsZWN0aW9uL01TXFxuaW5mbGVjdGlvbmFsXFxuaW5mbGljdC9TREdWXFxuaW5mbGljdGlvbi9NXFxuaW5mbG93L1NNXFxuaW5mbHVlbmNlL01HRFNcXG5pbmZsdWVuY2VkL1VcXG5pbmZsdWVudGlhbC9ZXFxuaW5mbHVlbnphL01cXG5pbmZvL01cXG5pbmZvbWVyY2lhbC9TTVxcbmluZm9ybS9aXFxuaW5mb3JtYWwvWVxcbmluZm9ybWFudC9TTVxcbmluZm9ybWF0aWNzXFxuaW5mb3JtYXRpb24vRU1cXG5pbmZvcm1hdGlvbmFsXFxuaW5mb3JtYXRpdmUvUFlcXG5pbmZvcm1hdGl2ZW5lc3MvTVxcbmluZm9ybWVkL1VcXG5pbmZvdGFpbm1lbnQvTVxcbmluZnJhXFxuaW5mcmFyZWQvTVxcbmluZnJhc29uaWNcXG5pbmZyYXN0cnVjdHVyYWxcXG5pbmZyYXN0cnVjdHVyZS9TTVxcbmluZnJlcXVlbmNlL01cXG5pbmZyZXF1ZW50L1lcXG5pbmZyaW5nZW1lbnQvTVNcXG5pbmZ1cmlhdGUvR0RTXFxuaW5mdXJpYXRpbmcvWVxcbmluZnVzZXIvU01cXG5pbmdlbmlvdXMvUFlcXG5pbmdlbmlvdXNuZXNzL01cXG5pbmdlbnVlL1NNXFxuaW5nZW51aXR5L01cXG5pbmdlbnVvdXMvRVlcXG5pbmdlbnVvdXNuZXNzL01cXG5pbmdlc3QvU0RHXFxuaW5nZXN0aW9uL01cXG5pbmdsZW5vb2svU01cXG5pbmdvdC9TTVxcbmluZ3JhaW4vR1xcbmluZ3JhdGUvU01cXG5pbmdyYXRpYXRlL0dORFNcXG5pbmdyYXRpYXRpbmcvWVxcbmluZ3JhdGlhdGlvbi9NXFxuaW5ncmVkaWVudC9NU1xcbmluZ3Jlc3MvTVNcXG5pbmd1aW5hbFxcbmluaGFiaXQvREdcXG5pbmhhYml0YWJsZS9VXFxuaW5oYWJpdGFudC9TTVxcbmluaGFiaXRlZC9VXFxuaW5oYWxhbnQvU01cXG5pbmhhbGF0aW9uL01TXFxuaW5oYWxhdG9yL01TXFxuaW5oYWxlci9TTVxcbmluaGFybW9uaW91c1xcbmluaGVyZS9EU0dcXG5pbmhlcmVudC9ZXFxuaW5oZXJpdC9FR1NEXFxuaW5oZXJpdGFuY2UvRU1cXG5pbmhlcml0YW5jZXNcXG5pbmhlcml0b3IvU01cXG5pbmhpYml0L0dTRFxcbmluaGliaXRpb24vU01cXG5pbmhpYml0b3IvU01cXG5pbmhpYml0b3J5XFxuaW5odW1hbi9ZXFxuaW5odW1hbmUvWVxcbmluaW1pY2FsL1lcXG5pbmltaXRhYmx5XFxuaW5pcXVpdG91cy9ZXFxuaW5pcXVpdHkvU01cXG5pbml0aWFsL1NHTURZXFxuaW5pdGlhbGlzbVxcbmluaXRpYWxpemF0aW9uXFxuaW5pdGlhbGl6ZS9EU0dcXG5pbml0aWFsaXplZC9BVVxcbmluaXRpYXRlL1hNR05WRFNcXG5pbml0aWF0ZWQvVVxcbmluaXRpYXRpb24vTVxcbmluaXRpYXRpdmUvU01cXG5pbml0aWF0b3IvTVNcXG5pbml0aWF0b3J5XFxuaW5pdGlvXFxuaW5qZWN0L1NER1xcbmluamVjdGlvbi9TTVxcbmluamVjdG9yL1NNXFxuaW5qdW5jdGl2ZVxcbmluanVyZS9EUlNaR1xcbmluanVyZWQvVVxcbmluanVyZXIvTVxcbmluanVyaW91c1xcbmluay9NRFxcbmlua2Jsb3QvU01cXG5pbmtpbmVzcy9NXFxuaW5rbGluZy9TTVxcbmlua3N0YW5kL1NNXFxuaW5rd2VsbC9NU1xcbmlua3kvUlRQXFxuaW5sYW5kL01cXG5pbmxpbmVcXG5pbm1hdGUvU01cXG5pbm1vc3RcXG5pbm4vU0dNUkpcXG5pbm5hcmRzL01cXG5pbm5hdGUvUFlcXG5pbm5hdGVuZXNzL01cXG5pbm5lcm1vc3RcXG5pbm5lcnNvbGUvU01cXG5pbm5lcnNwcmluZ1xcbmlubmVydmF0ZS9HTkRTXFxuaW5uZXJ2YXRpb24vTVxcbmlubmluZy9NXFxuaW5uaXRcXG5pbm5rZWVwZXIvTVNcXG5pbm5vY2VuY2UvTVxcbmlubm9jZW50L01ZU1xcbmlubm9jdW91cy9QWVxcbmlubm9jdW91c25lc3MvTVxcbmlubm92YXRlL1hEU0dOVlxcbmlubm92YXRpb24vTVxcbmlubm92YXRvci9NU1xcbmlubm92YXRvcnlcXG5pbm51ZW5kby9TTVxcbmlubnVtZXJhYmx5XFxuaW5udW1lcmF0ZVxcbmlub2N1bGF0ZS9BR0RTXFxuaW5vY3VsYXRpb24vTVNcXG5pbm9wZXJhdGl2ZVxcbmlub3JkaW5hdGUvWVxcbmlub3JnYW5pY1xcbmlub3NpdG9sXFxuaW5xdWlyZS9aR0RSXFxuaW5xdWlyZXIvTVxcbmlucXVpcmluZy9ZXFxuaW5xdWlyeS9TTVxcbmlucXVpc2l0aW9uL01TXFxuaW5xdWlzaXRpb25hbFxcbmlucXVpc2l0aXZlL1lQXFxuaW5xdWlzaXRpdmVuZXNzL01cXG5pbnF1aXNpdG9yL1NNXFxuaW5xdWlzaXRvcmlhbFxcbmlucnVzaC9NU1xcbmluc2FuZS9UXFxuaW5zYXRpYWJpbGl0eS9NXFxuaW5zYXRpYWJseVxcbmluc2NyaWJlL1pHRFJcXG5pbnNjcmliZXIvTVxcbmluc2NyaXB0aW9uL01TXFxuaW5zY3J1dGFiaWxpdHkvTVxcbmluc2NydXRhYmxlL1BcXG5pbnNjcnV0YWJsZW5lc3MvTVxcbmluc2NydXRhYmx5XFxuaW5zZWFtL1NNXFxuaW5zZWN0aWNpZGFsXFxuaW5zZWN0aWNpZGUvTVNcXG5pbnNlY3Rpdm9yZS9NU1xcbmluc2VjdGl2b3JvdXNcXG5pbnNlY3VyZS9ZXFxuaW5zZW1pbmF0ZS9EU0dOXFxuaW5zZW1pbmF0aW9uL01cXG5pbnNlbnNhdGVcXG5pbnNlbnNpYmxlXFxuaW5zZW5zaXRpdmUvWVxcbmluc2VwYXJhYmxlL01TXFxuaW5zZXJ0J3NcXG5pbnNlcnQvQUdTRFxcbmluc2VydGlvbi9BTVxcbmluc2VydGlvbnNcXG5pbnNldHRpbmdcXG5pbnNob3JlXFxuaW5zaWRlL1JTTVpcXG5pbnNpZGVyL01cXG5pbnNpZGlvdXMvWVBcXG5pbnNpZGlvdXNuZXNzL01cXG5pbnNpZ2h0L01TXFxuaW5zaWdodGZ1bFxcbmluc2lnbmlhL01cXG5pbnNpbnVhdGUvR05WRFNYXFxuaW5zaW51YXRpb24vTVxcbmluc2ludWF0b3IvU01cXG5pbnNpcGlkL1BZXFxuaW5zaXBpZGl0eS9NXFxuaW5zaXN0L1NHRFxcbmluc2lzdGVuY2UvTVxcbmluc2lzdGVudC9ZXFxuaW5zaXN0aW5nL1lcXG5pbnNvZmFyXFxuaW5zb2xlL1NNXFxuaW5zb2xlbmNlL01cXG5pbnNvbGVudC9ZXFxuaW5zb2x1YmxlXFxuaW5zb2x1Ymx5XFxuaW5zb2x2ZW5jeS9TXFxuaW5zb21uaWEvTVxcbmluc29tbmlhYy9TTVxcbmluc29tdWNoXFxuaW5zb3VjaWFuY2UvTVxcbmluc291Y2lhbnRcXG5pbnNwZWN0L0FHRFNcXG5pbnNwZWN0aW9uL1NNXFxuaW5zcGVjdG9yL01TXFxuaW5zcGVjdG9yYXRlL01TXFxuaW5zcGlyYXRpb24vTVNcXG5pbnNwaXJhdGlvbmFsXFxuaW5zcGlyYXRvcnlcXG5pbnNwaXJlZC9VXFxuaW5zcGlyaW5nL1VcXG5pbnN0XFxuaW5zdGFiaWxpdHkvU1xcbmluc3RhbGwvVUJaUlNER1xcbmluc3RhbGxhdGlvbi9NU1xcbmluc3RhbGxlci9VTVxcbmluc3RhbGxtZW50L1NNXFxuaW5zdGFuY2UvR0RcXG5pbnN0YW50L01SWVNcXG5pbnN0YW50YW5lb3VzL1lcXG5pbnN0YW50aWF0ZS9EU0dcXG5pbnN0YXJcXG5pbnN0YXRlL0FHRFNcXG5pbnN0ZWFkXFxuaW5zdGlnYXRlL0RTR05cXG5pbnN0aWdhdGlvbi9NXFxuaW5zdGlnYXRvci9NU1xcbmluc3RpbGxhdGlvbi9NXFxuaW5zdGluY3QvVk1TXFxuaW5zdGluY3RpdmUvWVxcbmluc3RpbmN0dWFsXFxuaW5zdGl0dXRlL1hNWkdORFJTXFxuaW5zdGl0dXRlci9NXFxuaW5zdGl0dXRpb24vTVxcbmluc3RpdHV0aW9uYWwvWVxcbmluc3RpdHV0aW9uYWxpemF0aW9uL01cXG5pbnN0aXR1dGlvbmFsaXplL0RTR1xcbmluc3RyXFxuaW5zdHJ1Y3QvU0RHVlxcbmluc3RydWN0ZWQvVVxcbmluc3RydWN0aW9uL01TXFxuaW5zdHJ1Y3Rpb25hbFxcbmluc3RydWN0aXZlL1lcXG5pbnN0cnVjdG9yL01TXFxuaW5zdHJ1bWVudC9NRFNHXFxuaW5zdHJ1bWVudGFsL01ZU1xcbmluc3RydW1lbnRhbGlzdC9TTVxcbmluc3RydW1lbnRhbGl0eS9NXFxuaW5zdHJ1bWVudGF0aW9uL01cXG5pbnN1Ym9yZGluYXRlXFxuaW5zdWZmZXJhYmxlXFxuaW5zdWZmZXJhYmx5XFxuaW5zdWxhXFxuaW5zdWxhclxcbmluc3VsYXJpdHkvTVxcbmluc3VsYXRlL0dORFNcXG5pbnN1bGF0aW9uL01cXG5pbnN1bGF0b3IvTVNcXG5pbnN1bGluL01cXG5pbnN1bHQvU01ER1xcbmluc3VsdGluZy9ZXFxuaW5zdXBlcmFibGVcXG5pbnN1cGVyYWJseVxcbmluc3VyYW5jZS9TTVxcbmluc3VyZS9EUlNaR0JcXG5pbnN1cmVkL1NNXFxuaW5zdXJlci9NXFxuaW5zdXJnZW5jZS9TTVxcbmluc3VyZ2VuY3kvU01cXG5pbnN1cmdlbnQvTVNcXG5pbnN1cm1vdW50YWJseVxcbmluc3VycmVjdGlvbi9TTVxcbmluc3VycmVjdGlvbmlzdC9TTVxcbmludFxcbmludGFjdFxcbmludGFnbGlvL01TXFxuaW50ZWdlci9NU1xcbmludGVncmFsL1NNWVxcbmludGVncmF0ZS9BRVZOR1NEXFxuaW50ZWdyYXRpb24vRUFNXFxuaW50ZWdyYXRvclxcbmludGVncml0eS9NXFxuaW50ZWd1bWVudC9TTVxcbmludGVsL01cXG5pbnRlbGxlY3QvTVNcXG5pbnRlbGxlY3R1YWwvTVlTXFxuaW50ZWxsZWN0dWFsaXNtL01cXG5pbnRlbGxlY3R1YWxpemUvR0RTXFxuaW50ZWxsaWdlbmNlL01cXG5pbnRlbGxpZ2VudC9ZXFxuaW50ZWxsaWdlbnRzaWEvTVxcbmludGVsbGlnaWJpbGl0eS9NXFxuaW50ZWxsaWdpYmxlL1VcXG5pbnRlbGxpZ2libHkvVVxcbmludGVuZGVkL1NNXFxuaW50ZW5zZS9ZVFZSXFxuaW50ZW5zaWZpY2F0aW9uL01cXG5pbnRlbnNpZmllci9NXFxuaW50ZW5zaWZ5L0RSU1pHTlxcbmludGVuc2l0eS9TXFxuaW50ZW5zaXZlL01ZUFNcXG5pbnRlbnNpdmVuZXNzL01cXG5pbnRlbnQvU01ZUFxcbmludGVudGlvbi9NU1xcbmludGVudGlvbmFsL1VZXFxuaW50ZW50bmVzcy9NXFxuaW50ZXIvRVNMXFxuaW50ZXJhY3QvU0dWRFxcbmludGVyYWN0aW9uL1NNXFxuaW50ZXJhY3RpdmUvWVxcbmludGVyYWN0aXZpdHlcXG5pbnRlcmJyZWRcXG5pbnRlcmJyZWVkL0dTXFxuaW50ZXJjZWRlL0dEU1xcbmludGVyY2VwdC9HTURTXFxuaW50ZXJjZXB0aW9uL01TXFxuaW50ZXJjZXB0b3IvU01cXG5pbnRlcmNlc3Npb24vU01cXG5pbnRlcmNlc3Nvci9NU1xcbmludGVyY2Vzc29yeVxcbmludGVyY2hhbmdlL0RTTUdcXG5pbnRlcmNoYW5nZWFiaWxpdHlcXG5pbnRlcmNoYW5nZWFibGVcXG5pbnRlcmNoYW5nZWFibHlcXG5pbnRlcmNpdHlcXG5pbnRlcmNvbGxlZ2lhdGVcXG5pbnRlcmNvbS9TTVxcbmludGVyY29tbXVuaWNhdGUvRFNHTlxcbmludGVyY29tbXVuaWNhdGlvbi9NXFxuaW50ZXJjb25uZWN0L0dEU1xcbmludGVyY29ubmVjdGlvbi9TTVxcbmludGVyY29udGluZW50YWxcXG5pbnRlcmNvdXJzZS9NXFxuaW50ZXJjdWx0dXJhbFxcbmludGVyZGVub21pbmF0aW9uYWxcXG5pbnRlcmRlcGFydG1lbnRhbFxcbmludGVyZGVwZW5kZW5jZS9NXFxuaW50ZXJkZXBlbmRlbnQvWVxcbmludGVyZGljdC9HTURTXFxuaW50ZXJkaWN0aW9uL01cXG5pbnRlcmRpc2NpcGxpbmFyeVxcbmludGVyZXN0L0VTTURcXG5pbnRlcmVzdGVkL1VcXG5pbnRlcmVzdGluZy9ZXFxuaW50ZXJmYWNlL01HRFNcXG5pbnRlcmZhaXRoXFxuaW50ZXJmZXJlL0dEU1xcbmludGVyZmVyZW5jZS9NXFxuaW50ZXJmZXJvbi9NXFxuaW50ZXJmaWxlL0dEU1xcbmludGVyZ2FsYWN0aWNcXG5pbnRlcmdvdmVybm1lbnRhbFxcbmludGVyaW0vTVxcbmludGVyaW9yL1NNXFxuaW50ZXJqXFxuaW50ZXJqZWN0L0dEU1xcbmludGVyamVjdGlvbi9TTVxcbmludGVybGFjZS9HRFNcXG5pbnRlcmxhcmQvREdTXFxuaW50ZXJsZWF2ZS9EU0dcXG5pbnRlcmxldWtpbi9NXFxuaW50ZXJsaW5lL0dEU0pcXG5pbnRlcmxpbmVhclxcbmludGVybGluaW5nL01cXG5pbnRlcmxpbmsvRFNHXFxuaW50ZXJsb2NrL0dNRFNcXG5pbnRlcmxvY3V0b3IvU01cXG5pbnRlcmxvY3V0b3J5XFxuaW50ZXJsb3BlL1pHRFJTXFxuaW50ZXJsb3Blci9NXFxuaW50ZXJsdWRlL01HRFNcXG5pbnRlcm1hcnJpYWdlL1NNXFxuaW50ZXJtYXJyeS9HRFNcXG5pbnRlcm1lZGlhcnkvU01cXG5pbnRlcm1lZGlhdGUvTVlTXFxuaW50ZXJtZW50L0VNXFxuaW50ZXJtZW50c1xcbmludGVybWV6emlcXG5pbnRlcm1lenpvL01TXFxuaW50ZXJtaW5hYmx5XFxuaW50ZXJtaW5nbGUvRFNHXFxuaW50ZXJtaXNzaW9uL1NNXFxuaW50ZXJtaXR0ZW5jZVxcbmludGVybWl0dGVuY3lcXG5pbnRlcm1pdHRlbnQvWVxcbmludGVybWl4L0dEU1xcbmludGVybi9HRExcXG5pbnRlcm5hbC9TWVxcbmludGVybmFsaXphdGlvbi9NXFxuaW50ZXJuYWxpemUvR0RTXFxuaW50ZXJuYXRpb25hbC9TTVlcXG5pbnRlcm5hdGlvbmFsaXNtL01cXG5pbnRlcm5hdGlvbmFsaXN0L1NNXFxuaW50ZXJuYXRpb25hbGl6YXRpb25cXG5pbnRlcm5hdGlvbmFsaXplL0RTR1xcbmludGVybmVjaW5lXFxuaW50ZXJuZWUvU01cXG5pbnRlcm5ldFxcbmludGVybmlzdC9NU1xcbmludGVybm1lbnQvTVxcbmludGVybnNoaXAvTVNcXG5pbnRlcm9mZmljZVxcbmludGVyb3BlcmFiaWxpdHlcXG5pbnRlcm9wZXJhYmxlXFxuaW50ZXJvcGVyYXRlL1NcXG5pbnRlcnBlbmV0cmF0ZS9EU0dOXFxuaW50ZXJwZXJzb25hbFxcbmludGVycGxhbmV0YXJ5XFxuaW50ZXJwbGF5L01cXG5pbnRlcnBvbGF0ZS9YRFNHTlxcbmludGVycG9sYXRpb24vTVxcbmludGVycG9zZS9HRFNcXG5pbnRlcnBvc2l0aW9uL01cXG5pbnRlcnByZXQvQUdWRFNcXG5pbnRlcnByZXRhdGlvbi9BTVNcXG5pbnRlcnByZXRhdGl2ZVxcbmludGVycHJldGVkL1VcXG5pbnRlcnByZXRlci9NU1xcbmludGVycmFjaWFsXFxuaW50ZXJyZWQvRVxcbmludGVycmVnbnVtL1NNXFxuaW50ZXJyZWxhdGUvWERTR05cXG5pbnRlcnJlbGF0aW9uL01cXG5pbnRlcnJlbGF0aW9uc2hpcC9NU1xcbmludGVycmluZy9FXFxuaW50ZXJyb2dhdGUvRFNHTlZYXFxuaW50ZXJyb2dhdGlvbi9NXFxuaW50ZXJyb2dhdGl2ZS9NWVNcXG5pbnRlcnJvZ2F0b3IvU01cXG5pbnRlcnJvZ2F0b3J5L1NNXFxuaW50ZXJydXB0L1pHTURSU1xcbmludGVycnVwdGVyL01cXG5pbnRlcnJ1cHRpb24vTVNcXG5pbnRlcnNjaG9sYXN0aWNcXG5pbnRlcnNlY3QvR0RTXFxuaW50ZXJzZWN0aW9uL1NNXFxuaW50ZXJzZWN0aW9uYWxcXG5pbnRlcnNlY3Rpb25hbGl0eVxcbmludGVyc2Vzc2lvbi9TTVxcbmludGVyc2V4XFxuaW50ZXJzcGVyc2UvR05EU1xcbmludGVyc3BlcnNpb24vTVxcbmludGVyc3RhdGUvTVNcXG5pbnRlcnN0ZWxsYXJcXG5pbnRlcnN0aWNlL01TXFxuaW50ZXJzdGl0aWFsXFxuaW50ZXJ0d2luZS9HRFNcXG5pbnRlcnVyYmFuXFxuaW50ZXJ2YWwvU01cXG5pbnRlcnZlbmUvR0RTXFxuaW50ZXJ2ZW50aW9uL1NNXFxuaW50ZXJ2ZW50aW9uaXNtL01cXG5pbnRlcnZlbnRpb25pc3QvU01cXG5pbnRlcnZpZXcvWkdNRFJTXFxuaW50ZXJ2aWV3ZWUvTVNcXG5pbnRlcnZpZXdlci9NXFxuaW50ZXJ2b2NhbGljXFxuaW50ZXJ3YXJcXG5pbnRlcndlYXZlL0dTXFxuaW50ZXJ3b3ZlXFxuaW50ZXJ3b3ZlblxcbmludGVzdGFjeS9NXFxuaW50ZXN0YXRlXFxuaW50ZXN0aW5hbFxcbmludGVzdGluZS9NU1xcbmludGlmYWRhXFxuaW50aW1hY3kvU01cXG5pbnRpbWF0ZS9NWUdORFNYXFxuaW50aW1hdGlvbi9NXFxuaW50aW1pZGF0ZS9HTkRTXFxuaW50aW1pZGF0aW5nL1lcXG5pbnRpbWlkYXRpb24vTVxcbmludG9uYXRpb24vU01cXG5pbnRveGljYW50L1NNXFxuaW50b3hpY2F0ZS9EU0dOXFxuaW50b3hpY2F0aW9uL01cXG5pbnRyYWNyYW5pYWxcXG5pbnRyYW11cmFsXFxuaW50cmFtdXNjdWxhclxcbmludHJhbmV0L01TXFxuaW50cmFuc2lnZW5jZS9NXFxuaW50cmFuc2lnZW50L01ZU1xcbmludHJhc3RhdGVcXG5pbnRyYXV0ZXJpbmVcXG5pbnRyYXZlbm91cy9NU1lcXG5pbnRyZXBpZC9ZXFxuaW50cmVwaWRpdHkvTVxcbmludHJpY2FjeS9TTVxcbmludHJpY2F0ZS9ZXFxuaW50cmlndWUvRFJTTVpHXFxuaW50cmlndWVyL01cXG5pbnRyaWd1aW5nL1lcXG5pbnRyaW5zaWNcXG5pbnRyaW5zaWNhbGx5XFxuaW50cm8vU01cXG5pbnRyb2R1Y2UvQUdEU1xcbmludHJvZHVjdGlvbi9BTVxcbmludHJvZHVjdGlvbnNcXG5pbnRyb2R1Y3RvcnlcXG5pbnRyb2l0L1NNXFxuaW50cm9zcGVjdC9HVkRTXFxuaW50cm9zcGVjdGlvbi9NXFxuaW50cm9zcGVjdGl2ZS9ZXFxuaW50cm92ZXJzaW9uL01cXG5pbnRyb3ZlcnQvTURTXFxuaW50cnVkZS9EUlNaR1xcbmludHJ1ZGVyL01cXG5pbnRydXNpb24vU01cXG5pbnRydXNpdmUvWVBcXG5pbnRydXNpdmVuZXNzL01cXG5pbnR1aXQvU0RHVlxcbmludHVpdGlvbi9TXFxuaW50dWl0aXZlL1BZXFxuaW50dWl0aXZlbmVzcy9NXFxuaW51bmRhdGUvWERTR05cXG5pbnVuZGF0aW9uL01cXG5pbnVyZS9EU0dcXG5pbnZhZGUvRFJTWkdcXG5pbnZhZGVyL01cXG5pbnZhbGlkL0dNRFlTXFxuaW52YWxpZGlzbS9NXFxuaW52YWx1YWJsZVxcbmludmFsdWFibHlcXG5pbnZhcmlhbnRcXG5pbnZhc2lvbi9NU1xcbmludmFzaXZlXFxuaW52ZWN0aXZlL01cXG5pbnZlaWdoL0dEXFxuaW52ZWlnaHNcXG5pbnZlaWdsZS9aR0RSU1xcbmludmVpZ2xlci9NXFxuaW52ZW50L0FTR1ZEXFxuaW52ZW50aW9uL0FNU1xcbmludmVudGl2ZS9QWVxcbmludmVudGl2ZW5lc3MvTVxcbmludmVudG9yL01TXFxuaW52ZW50b3J5L0RTTUdcXG5pbnZlcnNlL1NNWVxcbmludmVydC9TTURSWkdcXG5pbnZlcnRlci9NXFxuaW52ZXN0L0FTREdMXFxuaW52ZXN0aWdhdGUvR05WRFNYXFxuaW52ZXN0aWdhdGlvbi9NXFxuaW52ZXN0aWdhdG9yL1NNXFxuaW52ZXN0aWdhdG9yeVxcbmludmVzdGl0dXJlL01TXFxuaW52ZXN0bWVudC9BRU1cXG5pbnZlc3Rvci9TTVxcbmludmV0ZXJhY3kvTVxcbmludmV0ZXJhdGVcXG5pbnZpZGlvdXMvWVBcXG5pbnZpZGlvdXNuZXNzL01cXG5pbnZpZ2lsYXRlL0dORFNcXG5pbnZpZ2lsYXRvci9TXFxuaW52aWdvcmF0ZS9BRFNHXFxuaW52aWdvcmF0aW5nL1lcXG5pbnZpZ29yYXRpb24vTVxcbmludmluY2liaWxpdHkvTVxcbmludmluY2libHlcXG5pbnZpb2xhYmlsaXR5L01cXG5pbnZpb2xhYmx5XFxuaW52aW9sYXRlXFxuaW52aXRhdGlvbi9TTVxcbmludml0YXRpb25hbC9TTVxcbmludml0ZS9EU01HXFxuaW52aXRlZC9VXFxuaW52aXRlZS9TTVxcbmludml0aW5nL1lcXG5pbnZva2UvRFNHXFxuaW52b2x1bnRhcmluZXNzL01cXG5pbnZvbHVudGFyeS9QXFxuaW52b2x1dGlvbi9NXFxuaW52b2x2ZS9MRFNHXFxuaW52b2x2ZWQvVVxcbmludm9sdmVtZW50L1NNXFxuaW53YXJkL1NZXFxuaW9jdGxcXG5pb2RpZGUvU01cXG5pb2RpbmUvTVxcbmlvZGl6ZS9EU0dcXG5pb24vVVNNXFxuaW9uaWNcXG5pb25pemF0aW9uL1VNXFxuaW9uaXplL1VEU0dcXG5pb25pemVyL01TXFxuaW9ub3NwaGVyZS9NU1xcbmlvbm9zcGhlcmljXFxuaW90YS9NU1xcbmlwZWNhYy9TTVxcbmlyYXNjaWJpbGl0eS9NXFxuaXJhc2NpYmxlXFxuaXJhc2NpYmx5XFxuaXJhdGUvWVBcXG5pcmF0ZW5lc3MvTVxcbmlyZS9NXFxuaXJlZnVsXFxuaXJlbmljXFxuaXJpZGVzXFxuaXJpZGVzY2VuY2UvTVxcbmlyaWRlc2NlbnQvWVxcbmlyaWRpdW0vTVxcbmlyaXMvTVNcXG5pcmsvU0dEXFxuaXJrc29tZS9ZUFxcbmlya3NvbWVuZXNzL01cXG5pcm9uL01EU0dcXG5pcm9uY2xhZC9NU1xcbmlyb25pY1xcbmlyb25pY2FsL1lcXG5pcm9uaW5nL01cXG5pcm9ubW9uZ2VyL1NcXG5pcm9ubW9uZ2VyeVxcbmlyb25zdG9uZS9NXFxuaXJvbndhcmUvTVxcbmlyb253b29kL01TXFxuaXJvbndvcmsvTVxcbmlyb255L1NNXFxuaXJyYWRpYXRlL0RTR05cXG5pcnJhZGlhdGlvbi9NXFxuaXJyYXRpb25hbC9TTVlcXG5pcnJhdGlvbmFsaXR5L01cXG5pcnJlY2xhaW1hYmxlXFxuaXJyZWNvbmNpbGFiaWxpdHkvTVxcbmlycmVjb25jaWxhYmxlXFxuaXJyZWNvbmNpbGFibHlcXG5pcnJlY292ZXJhYmxlXFxuaXJyZWNvdmVyYWJseVxcbmlycmVkZWVtYWJsZVxcbmlycmVkZWVtYWJseVxcbmlycmVkdWNpYmxlXFxuaXJyZWR1Y2libHlcXG5pcnJlZnV0YWJsZVxcbmlycmVmdXRhYmx5XFxuaXJyZWd1bGFyL01ZU1xcbmlycmVndWxhcml0eS9TTVxcbmlycmVsZXZhbmNlL01TXFxuaXJyZWxldmFuY3kvTVNcXG5pcnJlbGV2YW50L1lcXG5pcnJlbGlnaW9uXFxuaXJyZWxpZ2lvdXNcXG5pcnJlbWVkaWFibGVcXG5pcnJlbWVkaWFibHlcXG5pcnJlbW92YWJsZVxcbmlycmVwYXJhYmxlXFxuaXJyZXBhcmFibHlcXG5pcnJlcGxhY2VhYmxlXFxuaXJyZXByZXNzaWJsZVxcbmlycmVwcmVzc2libHlcXG5pcnJlcHJvYWNoYWJsZVxcbmlycmVwcm9hY2hhYmx5XFxuaXJyZXNpc3RpYmxlXFxuaXJyZXNpc3RpYmx5XFxuaXJyZXNvbHV0ZS9QWU5cXG5pcnJlc29sdXRlbmVzcy9NXFxuaXJyZXNvbHV0aW9uL01cXG5pcnJlc3BlY3RpdmVcXG5pcnJlc3BvbnNpYmlsaXR5L01cXG5pcnJlc3BvbnNpYmxlXFxuaXJyZXNwb25zaWJseVxcbmlycmV0cmlldmFibGVcXG5pcnJldHJpZXZhYmx5XFxuaXJyZXZlcmVuY2UvTVxcbmlycmV2ZXJlbnQvWVxcbmlycmV2ZXJzaWJsZVxcbmlycmV2ZXJzaWJseVxcbmlycmV2b2NhYmxlXFxuaXJyZXZvY2FibHlcXG5pcnJpZ2FibGVcXG5pcnJpZ2F0ZS9EU0dOXFxuaXJyaWdhdGlvbi9NXFxuaXJyaXRhYmlsaXR5L01cXG5pcnJpdGFibGVcXG5pcnJpdGFibHlcXG5pcnJpdGFudC9TTVxcbmlycml0YXRlL0RTWEdOXFxuaXJyaXRhdGluZy9ZXFxuaXJyaXRhdGlvbi9NXFxuaXJydXB0L0RHVlNcXG5pcnJ1cHRpb24vU01cXG5pc2NoZW1pYVxcbmlzY2hlbWljXFxuaXNpbmdsYXNzL01cXG5pc2xcXG5pc2xhbmQvU1pNUlxcbmlzbGFuZGVyL01cXG5pc2xlL01TXFxuaXNsZXQvU01cXG5pc20vQ01cXG5pc21zXFxuaXNuJ3RcXG5pc29iYXIvTVNcXG5pc29iYXJpY1xcbmlzb2xhdGUvRFNNR05cXG5pc29sYXRpb24vTVxcbmlzb2xhdGlvbmlzbS9NXFxuaXNvbGF0aW9uaXN0L1NNXFxuaXNvbWVyL01TXFxuaXNvbWVyaWNcXG5pc29tZXJpc20vTVxcbmlzb21ldHJpYy9TXFxuaXNvbWV0cmljYWxseVxcbmlzb21ldHJpY3MvTVxcbmlzb21vcnBoaWNcXG5pc29tb3JwaGlzbVxcbmlzb3NjZWxlc1xcbmlzb3RoZXJtL1NNXFxuaXNvdG9wZS9TTVxcbmlzb3RvcGljXFxuaXNvdHJvcGljXFxuaXNzdWFuY2UvTVxcbmlzc3VlL0FEU01HXFxuaXNzdWVyL01TXFxuaXN0aG1pYW5cXG5pc3RobXVzL01TXFxuaXQnZFxcbml0J2xsXFxuaXQvVVNNXFxuaXRhbFxcbml0YWxpYy9TTVxcbml0YWxpY2l6YXRpb24vTVxcbml0YWxpY2l6ZS9HRFNcXG5pdGFsaWNzL01cXG5pdGNoL01EU0dcXG5pdGNoaW5lc3MvTVxcbml0Y2h5L1JQVFxcbml0ZW0vTVNcXG5pdGVtaXphdGlvbi9NXFxuaXRlbWl6ZS9HRFNcXG5pdGVyYXRlL0FYR05WRFNcXG5pdGVyYXRpb24vQU1cXG5pdGVyYXRvci9TXFxuaXRpbmVyYW50L1NNXFxuaXRpbmVyYXJ5L1NNXFxuaXRzZWxmXFxuaXYvVVxcbml2b3J5L1NNXFxuaXZ5L0RTTVxcbml4XFxuai9GXFxuamFiL1NNXFxuamFiYmVkXFxuamFiYmVyL1NNRFJaR1xcbmphYmJlcmVyL01cXG5qYWJiaW5nXFxuamFib3QvU01cXG5qYWNhcmFuZGEvTVNcXG5qYWNrL01ER1NcXG5qYWNrYWwvU01cXG5qYWNrYXNzL01TXFxuamFja2Jvb3QvU01EXFxuamFja2Rhdy9NU1xcbmphY2tldC9TTURcXG5qYWNraGFtbWVyL01TXFxuamFja2tuaWZlL01HRFNcXG5qYWNra25pdmVzXFxuamFja3BvdC9NU1xcbmphY2tyYWJiaXQvTVNcXG5qYWNrc3RyYXcvTVNcXG5qYWNxdWFyZC9NXFxuamFkZS9NR0RTXFxuamFkZWQvUFlcXG5qYWRlZG5lc3MvTVxcbmphZGVpdGUvTVxcbmphZy9TTVxcbmphZ2dlZC9UUFJZXFxuamFnZ2VkbmVzcy9NXFxuamFnZ2llc1xcbmphZ3Vhci9TTVxcbmphaWwvTURSWkdTXFxuamFpbGJpcmQvU01cXG5qYWlsYnJlYWsvU01cXG5qYWlsZXIvTVxcbmphaWxob3VzZS9TXFxuamFsYXBlbm8vTVNcXG5qYWxvcHkvU01cXG5qYWxvdXNpZS9NU1xcbmphbS9TTVxcbmphbWIvTVNcXG5qYW1iYWxheWEvTVxcbmphbWJvcmVlL01TXFxuamFtbWVkXFxuamFtbWluZ1xcbmphbW15L1JUXFxuamFuZ2xlL0RSU01aR1xcbmphbmdsZXIvTVxcbmphbml0b3IvU01cXG5qYW5pdG9yaWFsXFxuamFwYW4vU01cXG5qYXBhbm5lZFxcbmphcGFubmluZ1xcbmphcGUvTUdEU1xcbmphci9TTVxcbmphcmRpbmllcmUvU01cXG5qYXJmdWwvTVNcXG5qYXJnb24vTVxcbmphcnJlZFxcbmphcnJpbmcvWVxcbmphc21pbmUvU01cXG5qYXNwZXIvTVxcbmphdG8vTVNcXG5qYXVuZGljZS9EU01HXFxuamF1bnQvU0dNRFxcbmphdW50aWx5XFxuamF1bnRpbmVzcy9NXFxuamF1bnR5L1JQVFxcbmphdmEvTVxcbmphdmVsaW4vU01cXG5qYXcvU0dNRFxcbmphd2JvbmUvRFNNR1xcbmphd2JyZWFrZXIvTVNcXG5qYXdsaW5lL1NcXG5qYXkvU01cXG5qYXliaXJkL1NNXFxuamF5d2Fsay9EUlNaR1xcbmpheXdhbGtlci9NXFxuamF5d2Fsa2luZy9NXFxuamF6ei9NRFNHXFxuamF6enkvVFJcXG5qY3RcXG5qZWFsb3VzL1lcXG5qZWFsb3VzeS9TTVxcbmplYW4vTVNcXG5qZWFucy9NXFxuamVlcC9NU1xcbmplZXIvTURTR1xcbmplZXJpbmcvTVlcXG5qZWV6XFxuamVqdW5hXFxuamVqdW5lXFxuamVqdW51bS9NXFxuamVsbC9EU0dcXG5qZWxsby9TXFxuamVsbHkvR0RTTVxcbmplbGx5YmVhbi9NU1xcbmplbGx5ZmlzaC9NU1xcbmplbGx5bGlrZVxcbmplbGx5cm9sbC9TTVxcbmplbW15L0dEU1xcbmplbm5ldC9NU1xcbmplbm55L1NNXFxuamVvcGFyZGl6ZS9HRFNcXG5qZW9wYXJkeS9NXFxuamVyZW1pYWQvTVNcXG5qZXJrL01EU0dcXG5qZXJraWx5XFxuamVya2luL01TXFxuamVya2luZXNzL01cXG5qZXJrd2F0ZXJcXG5qZXJreS9UUk1QXFxuamVyb2JvYW0vU1xcbmplcnJ5YnVpbHRcXG5qZXJyeWNhbi9TXFxuamVyc2V5L01TXFxuamVzdC9NRFJTWkdcXG5qZXN0ZXIvTVxcbmplc3RpbmcvWVxcbmpldC9TTVxcbmpldGxpbmVyL1NNXFxuamV0cG9ydC9NU1xcbmpldHNhbS9NXFxuamV0dGVkXFxuamV0dGluZ1xcbmpldHRpc29uL01EU0dcXG5qZXR0eS9TTVxcbmpld2VsL1NaR01EUlxcbmpld2VsZXIvTVxcbmpld2VscnkvU01cXG5qZ1xcbmppYi9TR01EXFxuamliYmVkXFxuamliYmluZ1xcbmppYmUvTVNcXG5qaWZmL01TXFxuamlmZnkvU01cXG5qaWcnc1xcbmppZy9BU1xcbmppZ2dlZC9BXFxuamlnZ2VyJ3NcXG5qaWdnZXIvQVNER1xcbmppZ2dpbmcvQVxcbmppZ2dsZS9EU01HXFxuamlnZ2x5XFxuamlnc2F3L1NNREdcXG5qaWhhZC9TTVxcbmppaGFkaXN0L1NNXFxuamlsdC9NRFNHXFxuamltbXkvRFNNR1xcbmppbXNvbndlZWQvTVxcbmppbmdsZS9EU01HXFxuamluZ2x5XFxuamluZ29pc20vTVxcbmppbmdvaXN0L1NNXFxuamluZ29pc3RpY1xcbmppbmsvRFNHXFxuamlublxcbmppbm5pL01cXG5qaW5yaWtpc2hhL1NNXFxuamlueC9NRFNHXFxuaml0bmV5L1NNXFxuaml0dGVyYnVnL01TXFxuaml0dGVyYnVnZ2VkXFxuaml0dGVyYnVnZ2VyL01cXG5qaXR0ZXJidWdnaW5nXFxuaml0dGVycy9NXFxuaml0dGVyeS9SVFxcbmppdmUvTUdEU1xcbmpvYi9TTVxcbmpvYmJlZFxcbmpvYmJlci9TTVxcbmpvYmJpbmdcXG5qb2Job2xkZXIvTVNcXG5qb2JsZXNzL1BcXG5qb2JsZXNzbmVzcy9NXFxuam9ic2hhcmUvU1xcbmpvYnN3b3J0aFxcbmpvYnN3b3J0aHNcXG5qb2NrL01TXFxuam9ja2V5L1NHTURcXG5qb2Nrc3RyYXAvTVNcXG5qb2Nvc2UvUFlcXG5qb2Nvc2VuZXNzL01cXG5qb2Nvc2l0eS9NXFxuam9jdWxhci9ZXFxuam9jdWxhcml0eS9NXFxuam9jdW5kL1lcXG5qb2N1bmRpdHkvTVxcbmpvZGhwdXJzL01cXG5qb2V5L1NcXG5qb2cvU01cXG5qb2dnZWRcXG5qb2dnZXIvU01cXG5qb2dnaW5nL01cXG5qb2dnbGUvRFNNR1xcbmpvaG4vTVNcXG5qb2hubnkvU01cXG5qb2hubnljYWtlL01TXFxuam9pbidzXFxuam9pbi9BRkRTR1xcbmpvaW5lci9GTVNcXG5qb2luZXJ5L01cXG5qb2ludCdzXFxuam9pbnQvRUdTRFxcbmpvaW50bHkvRlxcbmpvaXN0L1NNXFxuam9qb2JhXFxuam9rZS9NWkdEUlNcXG5qb2tlci9NXFxuam9rZXlcXG5qb2tpZXJcXG5qb2tpZXN0XFxuam9raW5nL1lcXG5qb2xsaWZpY2F0aW9uL1NNXFxuam9sbGlseVxcbmpvbGxpbmVzcy9NXFxuam9sbGl0eS9NXFxuam9sbHkvVEdQRFJTTVxcbmpvbHQvTURSU1pHXFxuam9sdGVyL01cXG5qb25xdWlsL1NNXFxuam9zaC9NRFJTWkdcXG5qb3NoZXIvTVxcbmpvc3RsZS9NR0RTXFxuam90L1NNXFxuam90dGVkXFxuam90dGVyL01TXFxuam90dGluZy9NU1xcbmpvdWxlL1NNXFxuam91bmNlL01HRFNcXG5qb3VuY3lcXG5qb3VybmFsL01TXFxuam91cm5hbGVzZS9NXFxuam91cm5hbGlzbS9NXFxuam91cm5hbGlzdC9TTVxcbmpvdXJuYWxpc3RpY1xcbmpvdXJuZXkvWkdNRFJTXFxuam91cm5leWVyL01cXG5qb3VybmV5bWFuL01cXG5qb3VybmV5bWVuXFxuam91cm5vL1NcXG5qb3VzdC9TWkdNRFJcXG5qb3VzdGVyL01cXG5qb3VzdGluZy9NXFxuam92aWFsL1lcXG5qb3ZpYWxpdHkvTVxcbmpvd2wvTVNcXG5qb3dseS9UUlxcbmpveS9TR01EXFxuam95ZnVsL1lQXFxuam95ZnVsbGVyXFxuam95ZnVsbGVzdFxcbmpveWZ1bG5lc3MvTVxcbmpveWxlc3MvUFlcXG5qb3lsZXNzbmVzcy9NXFxuam95b3VzL1lQXFxuam95b3VzbmVzcy9NXFxuam95cmlkZGVuXFxuam95cmlkZS9SU01aR1xcbmpveXJpZGVyL01cXG5qb3lyaWRpbmcvTVxcbmpveXJvZGVcXG5qb3lzdGljay9TTVxcbmpyXFxuanViaWxhbnQvWVxcbmp1YmlsYXRpb24vTVxcbmp1YmlsZWUvU01cXG5qdWRkZXIvR0RTXFxuanVkZ2Unc1xcbmp1ZGdlL0FEU0dcXG5qdWRnZXNoaXAvTVxcbmp1ZGdtZW50L1NNXFxuanVkZ21lbnRhbC9ZXFxuanVkaWNhdG9yeS9TTVxcbmp1ZGljYXR1cmUvTVxcbmp1ZGljaWFsL1lcXG5qdWRpY2lhcnkvU01cXG5qdWRpY2lvdXMvSVlQXFxuanVkaWNpb3VzbmVzcy9JTVxcbmp1ZG8vTVxcbmp1Zy9TTVxcbmp1Z2Z1bC9NU1xcbmp1Z2dlZFxcbmp1Z2dlcm5hdXQvU01cXG5qdWdnaW5nXFxuanVnZ2xlL01aR0RSU1xcbmp1Z2dsZXIvTVxcbmp1Z2dsZXJ5L01cXG5qdWd1bGFyL1NNXFxuanVpY2UvRFJTTVpHXFxuanVpY2VyL01cXG5qdWljaWx5XFxuanVpY2luZXNzL01cXG5qdWljeS9QVFJcXG5qdWppdHN1L01cXG5qdWp1YmUvTVNcXG5qdWtlYm94L01TXFxuanVsZXAvU01cXG5qdWxpZW5uZVxcbmp1bWJsZS9NR0RTXFxuanVtYm8vU01cXG5qdW1wL01EUlNaR1xcbmp1bXBlci9NXFxuanVtcGlseVxcbmp1bXBpbmVzcy9NXFxuanVtcHN1aXQvTVNcXG5qdW1weS9UUlBcXG5qdW5cXG5qdW5jby9TTVxcbmp1bmN0aW9uL0ZJU01cXG5qdW5jdHVyZS9GTVNcXG5qdW5nbGUvTVNcXG5qdW5pb3IvTVNcXG5qdW5pcGVyL1NNXFxuanVuay9NRFJTWkdcXG5qdW5rZXIvTVxcbmp1bmtldC9NRFNHXFxuanVua2V0ZWVyL01TXFxuanVua2llL01UUlNcXG5qdW5reWFyZC9NU1xcbmp1bnRhL1NNXFxuanVyaWRpY1xcbmp1cmlkaWNhbC9ZXFxuanVyaXNkaWN0aW9uL1NNXFxuanVyaXNkaWN0aW9uYWxcXG5qdXJpc3BydWRlbmNlL01cXG5qdXJpc3QvTVNcXG5qdXJpc3RpY1xcbmp1cm9yL1NNXFxuanVyeS9JU01cXG5qdXJ5bWFuL01cXG5qdXJ5bWVuXFxuanVyeXdvbWFuL01cXG5qdXJ5d29tZW5cXG5qdXN0L1JZUFRcXG5qdXN0aWNlL0lNU1xcbmp1c3RpZmlhYmxlL1VcXG5qdXN0aWZpYWJseS9VXFxuanVzdGlmaWNhdGlvbi9NXFxuanVzdGlmaWVkL1VcXG5qdXN0aWZ5L1hHRFNOXFxuanVzdG5lc3MvTVxcbmp1dC9TTVxcbmp1dGUvTVxcbmp1dHRlZFxcbmp1dHRpbmdcXG5qdXZlbmlsZS9TTVxcbmp1eHRhcG9zZS9EU0dcXG5qdXh0YXBvc2l0aW9uL1NNXFxuay9JRkdTXFxua0h6XFxua1dcXG5rV2hcXG5rYWJiYWxhaFxcbmthYm9vbVxcbmthYnVraS9NXFxua2FkZGlzaC9NU1xcbmthZmZlZWtsYXRjaC9NU1xcbmthZmZlZWtsYXRzY2gvTVNcXG5rYWh1bmEvU1xcbmthaXNlci9NU1xcbmthbGUvTVxcbmthbGVpZG9zY29wZS9NU1xcbmthbGVpZG9zY29waWNcXG5rYWxlaWRvc2NvcGljYWxseVxcbmthbWlrYXplL01TXFxua2FuYVxcbmthbmdhcm9vL01TXFxua2FuamlcXG5rYW9saW4vTVxcbmthcG9rL01cXG5rYXBwYS9TTVxcbmthcHV0XFxua2FyYWt1bC9NXFxua2FyYW9rZS9NU1xcbmthcmF0L1NNXFxua2FyYXRlL01cXG5rYXJtYS9NXFxua2FybWljXFxua2FydC9NU1xcbmthdGFrYW5hXFxua2F0eWRpZC9TTVxcbmtheWFrL1NNREdcXG5rYXlha2luZy9NXFxua2F5by9NRFNHXFxua2F6b28vU01cXG5rY1xcbmtlYmFiL1NNXFxua2VkZ2VyZWVcXG5rZWVsL01EU0dcXG5rZWVsaGF1bC9ER1NcXG5rZWVuL01EUllTVEdQXFxua2Vlbm5lc3MvTVxcbmtlZXAvTVJTWkdcXG5rZWVwZXIvTVxcbmtlZXBpbmcvTVxcbmtlZXBzYWtlL01TXFxua2VnL1NNXFxua2VscC9NXFxua2VsdmluL1NNXFxua2VuL1NNXFxua2VubmVkXFxua2VubmVsL1NHTURcXG5rZW5uaW5nXFxua2Vuby9NXFxua2VwaS9NU1xcbmtlcHRcXG5rZXJhdGluL01cXG5rZXJhdGl0aXNcXG5rZXJic2lkZVxcbmtlcmNoaWVmL1NNXFxua2VyZnVmZmxlL1NcXG5rZXJuZWwvU01cXG5rZXJvc2VuZS9NXFxua2VzdHJlbC9NU1xcbmtldGNoL01TXFxua2V0Y2h1cC9NXFxua2V0b1xcbmtldG9nZW5pY1xcbmtldG9uZS9TXFxua2V0dGxlL1NNXFxua2V0dGxlZHJ1bS9TTVxcbmtleS9TR01EXFxua2V5YmluZGluZy9TXFxua2V5Ym9hcmQvWkdTTURSXFxua2V5Ym9hcmRlci9NXFxua2V5Ym9hcmRpc3QvU01cXG5rZXlob2xlL01TXFxua2V5bm90ZS9NWkdEUlNcXG5rZXlub3Rlci9NXFxua2V5cGFkL1NNXFxua2V5cHVuY2gvWkdNRFJTXFxua2V5cHVuY2hlci9NXFxua2V5c3RvbmUvTVNcXG5rZXlzdHJva2UvU01cXG5rZXl3b3JkL01TXFxua2dcXG5raGFraS9TTVxcbmtoYW4vTVNcXG5raWJibGUvRFNNR1xcbmtpYmJ1dHovTVNcXG5raWJidXR6aW1cXG5raWJpdHovWkdEUlNcXG5raWJpdHplci9NXFxua2lib3NoL01cXG5raWNrL01EUlNaR1xcbmtpY2tiYWNrL1NNXFxua2lja2JhbGwvTVxcbmtpY2tib3hpbmdcXG5raWNrZXIvTVxcbmtpY2tvZmYvTVNcXG5raWNrc3RhbmQvTVNcXG5raWNreS9SVFxcbmtpZC9TTVxcbmtpZGRlZFxcbmtpZGRlci9TTVxcbmtpZGRpZS9TTVxcbmtpZGRpbmdcXG5raWRkaXNoXFxua2lkZG8vU01cXG5raWRuYXAvU1xcbmtpZG5hcHBlZFxcbmtpZG5hcHBlci9NU1xcbmtpZG5hcHBpbmcvTVNcXG5raWRuZXkvU01cXG5raWRza2luL01cXG5raWVsYmFzYS9NU1xcbmtpZWxiYXNpXFxua2lrZS9TXFxua2lsbC9KTURSU1pHXFxua2lsbGRlZXIvU01cXG5raWxsZXIvTVxcbmtpbGxpbmcvTVxcbmtpbGxqb3kvU01cXG5raWxuL01EU0dcXG5raWxvL01TXFxua2lsb2J5dGUvU01cXG5raWxvY291bG9tYi9TXFxua2lsb2N5Y2xlL1NNXFxua2lsb2dyYW0vU01cXG5raWxvaGVydHovTVxcbmtpbG9qb3VsZS9TXFxua2lsb2xpdGVyL01TXFxua2lsb21ldGVyL01TXFxua2lsb25ld3Rvbi9TXFxua2lsb3Bhc2NhbC9TXFxua2lsb3Rvbi9TTVxcbmtpbG92b2x0L1NcXG5raWxvd2F0dC9TTVxcbmtpbHQvTURSU1xcbmtpbHRlci9NXFxua2ltb25vL01TXFxua2luL01cXG5raW5hc2VcXG5raW5kJ3NcXG5raW5kL1VQUllUXFxua2luZGFcXG5raW5kZXJnYXJ0ZW4vTVNcXG5raW5kZXJnYXJ0bmVyL1NNXFxua2luZGhlYXJ0ZWQvUFlcXG5raW5kaGVhcnRlZG5lc3MvTVxcbmtpbmRsZS9BR0RTXFxua2luZGxpbmVzcy9NXFxua2luZGxpbmcvTVxcbmtpbmRseS9VUlRcXG5raW5kbmVzcy9VTVxcbmtpbmRuZXNzZXNcXG5raW5kcmVkL01cXG5raW5kc1xcbmtpbmUvU1xcbmtpbmVtYXRpYy9TXFxua2luZW1hdGljcy9NXFxua2luZXRpYy9TXFxua2luZXRpY2FsbHlcXG5raW5ldGljcy9NXFxua2luZm9say9TTVxcbmtpbmZvbGtzL01cXG5raW5nL01ZU1xcbmtpbmdkb20vU01cXG5raW5nZmlzaGVyL1NNXFxua2luZ2x5L1JUXFxua2luZ21ha2VyL1NcXG5raW5ncGluL1NNXFxua2luZ3NoaXAvTVxcbmtpbmsvTURTR1xcbmtpbmtpbHlcXG5raW5raW5lc3MvTVxcbmtpbmt5L1RQUlxcbmtpbnNmb2xrL01cXG5raW5zaGlwL01cXG5raW5zbWFuL01cXG5raW5zbWVuXFxua2luc3dvbWFuL01cXG5raW5zd29tZW5cXG5raW9zay9TTVxcbmtpcC9TTVxcbmtpcHBlZFxcbmtpcHBlci9NREdTXFxua2lwcGluZ1xcbmtpcnNjaC9NU1xcbmtpc21ldC9NXFxua2lzcy9NRFJTQlpHXFxua2lzc2VyL01cXG5raXNzb2ZmL1NNXFxua2lzc29ncmFtL1NcXG5raXQvU0dNRFxcbmtpdGNoZW4vU01cXG5raXRjaGVuZXR0ZS9NU1xcbmtpdGNoZW53YXJlL01cXG5raXRlL01TXFxua2l0aC9NXFxua2l0c2NoL01cXG5raXRzY2h5XFxua2l0dGVkXFxua2l0dGVuL01TXFxua2l0dGVuaXNoXFxua2l0dGluZ1xcbmtpdHR5L1NNXFxua2l3aS9NU1xcbmtpd2lmcnVpdC9NU1xcbmtsXFxua2xheG9uL1NcXG5rbGVwdG9jcmFjeVxcbmtsZXB0b21hbmlhL01cXG5rbGVwdG9tYW5pYWMvU01cXG5rbHVkZ2UvR0RTXFxua2x1Z2UvRFNcXG5rbHV0ei9NU1xcbmtsdXR6aW5lc3MvTVxcbmtsdXR6eS9UUlBcXG5rbVxcbmtuXFxua25hY2svU1pNUlxcbmtuYWNrZXIvR0RcXG5rbmFwc2Fjay9NU1xcbmtuYXZlL1NNXFxua25hdmVyeS9NXFxua25hdmlzaC9ZXFxua25lYWQvU1pHRFJcXG5rbmVhZGVyL01cXG5rbmVlL01EU1xcbmtuZWVjYXAvU01cXG5rbmVlY2FwcGVkXFxua25lZWNhcHBpbmdcXG5rbmVlaW5nXFxua25lZWwvU0dcXG5rbmVsbC9TR01EXFxua25lbHRcXG5rbmV3XFxua25pY2tlci9TXFxua25pY2tlcmJvY2tlcnMvTVxcbmtuaWNrZXJzL01cXG5rbmlja2tuYWNrL01TXFxua25pZmUvRFNNR1xcbmtuaWdodC9NRFlTR1xcbmtuaWdodGhvb2QvTVNcXG5rbmlnaHRsaW5lc3MvTVxcbmtuaXNoL01TXFxua25pdC9NU1xcbmtuaXR0ZWRcXG5rbml0dGVyL1NNXFxua25pdHRpbmcvTVxcbmtuaXR3ZWFyL01cXG5rbml2ZXNcXG5rbm9iL01TXFxua25vYmJseVxcbmtub2JieS9UUlxcbmtub2NrL1NaR01EUlxcbmtub2NrYWJvdXRcXG5rbm9ja2Rvd24vU01cXG5rbm9ja2VyL01cXG5rbm9ja29mZi9TTVxcbmtub2Nrb3V0L1NNXFxua25vY2t3dXJzdC9TTVxcbmtub2xsL1NNXFxua25vdC9NU1xcbmtub3Rob2xlL1NNXFxua25vdHRlZFxcbmtub3R0aW5nXFxua25vdHR5L1RSXFxua25vdy9TQlxcbmtub3dpbmcvVVlTXFxua25vd2xlZGdlL01cXG5rbm93bGVkZ2VhYmxlXFxua25vd2xlZGdlYWJseVxcbmtub3duXFxua251Y2tsZS9EU01HXFxua251Y2tsZWR1c3Rlci9TXFxua251Y2tsZWhlYWQvTVNcXG5rbnVybC9TR01EXFxua29hbGEvU01cXG5rb2FuL1NcXG5rb2hsXFxua29obHJhYmkvTVxcbmtvaGxyYWJpZXNcXG5rb2xhL01TXFxua29vay9NU1xcbmtvb2thYnVycmEvU01cXG5rb29raW5lc3MvTVxcbmtvb2t5L1RQUlxcbmtvcGVjay9NU1xcbmtvcm1hXFxua29zaGVyL0RTR1xcbmtvd3Rvdy9HTURTXFxua3BoXFxua3JhYWwvU01cXG5rcmF1dC9TTSFcXG5rcmlsbC9NXFxua3JvbmEvTVxcbmtyb25lL1JNXFxua3Jvbm9yXFxua3JvbnVyXFxua3J5cHRvbi9NXFxua3RcXG5rdWNoZW4vU01cXG5rdWRvcy9NXFxua3VkenUvU01cXG5rdW1xdWF0L01TXFxua3ZldGNoL1pHTURSU1xcbmt2ZXRjaGVyL01cXG5rd1xcbmwvU0RYVEdKXFxubGEvTVxcbmxhYi9TTVxcbmxhYmVsJ3NcXG5sYWJlbC9BU0RHXFxubGFiZWxlZC9VXFxubGFiaWFcXG5sYWJpYWwvU01cXG5sYWJpbGVcXG5sYWJpdW0vTVxcbmxhYm9yL1NNRFJaR1xcbmxhYm9yYXRvcnkvU01cXG5sYWJvcmVyL01cXG5sYWJvcmlvdXMvUFlcXG5sYWJvcmlvdXNuZXNzL01cXG5sYWJvcnNhdmluZ1xcbmxhYnVybnVtL01TXFxubGFieXJpbnRoL01cXG5sYWJ5cmludGhpbmVcXG5sYWJ5cmludGhzXFxubGFjL01cXG5sYWNlJ3NcXG5sYWNlL1VHRFNcXG5sYWNlcmF0ZS9EU0dOWFxcbmxhY2VyYXRpb24vTVxcbmxhY2V3aW5nL1NNXFxubGFjZXdvcmsvTVxcbmxhY2hyeW1hbFxcbmxhY2hyeW1vc2VcXG5sYWNrL01EU0dcXG5sYWNrYWRhaXNpY2FsL1lcXG5sYWNrZXkvU01cXG5sYWNrbHVzdGVyXFxubGFjb25pY1xcbmxhY29uaWNhbGx5XFxubGFjcXVlci9HTURTXFxubGFjcm9zc2UvTVxcbmxhY3RhdGUvR05EU1xcbmxhY3RhdGlvbi9NXFxubGFjdGVhbFxcbmxhY3RpY1xcbmxhY3Rvc2UvTVxcbmxhY3VuYS9NXFxubGFjdW5hZVxcbmxhY3kvUlRcXG5sYWQvU0dNRE5KXFxubGFkZGVyL0dTTURcXG5sYWRkaWUvU01cXG5sYWRkaXNoL1BcXG5sYWRlL1NcXG5sYWRlbi9VXFxubGFkaW5nL01cXG5sYWRsZS9EU01HXFxubGFkeS9TTVxcbmxhZHliaXJkL1NNXFxubGFkeWJ1Zy9NU1xcbmxhZHlmaW5nZXIvTVNcXG5sYWR5bGlrZS9VXFxubGFkeWxvdmUvTVNcXG5sYWR5c2hpcC9NU1xcbmxhZXRyaWxlL01cXG5sYWcvU1pNUlxcbmxhZ2VyL01cXG5sYWdnYXJkL01ZU1xcbmxhZ2dlZFxcbmxhZ2dpbmcvTVxcbmxhZ25pYXBwZS9TTVxcbmxhZ29vbi9TTVxcbmxhaWQvSUFcXG5sYWluXFxubGFpci9NU1xcbmxhaXJkL1NNXFxubGFpdHkvTVxcbmxha2UvTVNcXG5sYWtlZnJvbnQvU1xcbmxha2VzaWRlXFxubGFtL1NNXFxubGFtYS9NU1xcbmxhbWFzZXJ5L1NNXFxubGFtYi9NRFNHXFxubGFtYmFkYS9NU1xcbmxhbWJhc3RlL0dEU1xcbmxhbWJkYS9TTVxcbmxhbWJlbmN5L01cXG5sYW1iZW50L1lcXG5sYW1ia2luL1NNXFxubGFtYnNraW4vU01cXG5sYW1ic3dvb2xcXG5sYW1lL01ZWlRHRFJTUFxcbmxhbWVicmFpbi9NRFNcXG5sYW1lbmVzcy9NXFxubGFtZW50L0JTTURHXFxubGFtZW50YWJseVxcbmxhbWVudGF0aW9uL01TXFxubGFtaW5hL01cXG5sYW1pbmFlXFxubGFtaW5hclxcbmxhbWluYXRlL01HTkRTXFxubGFtaW5hdGlvbi9NXFxubGFtbWVkXFxubGFtbWluZ1xcbmxhbXAvTVNcXG5sYW1wYmxhY2svTVxcbmxhbXBsaWdodC9NUlpcXG5sYW1wbGlnaHRlci9NXFxubGFtcG9vbi9TR01EXFxubGFtcHBvc3QvU01cXG5sYW1wcmV5L01TXFxubGFtcHNoYWRlL1NNXFxubGFuYWkvU01cXG5sYW5jZS9EUlNNWkdcXG5sYW5jZXIvTVxcbmxhbmNldC9TTVxcbmxhbmQvTURSU0dKXFxubGFuZGF1L1NNXFxubGFuZGZhbGwvTVNcXG5sYW5kZmlsbC9NU1xcbmxhbmRob2xkZXIvU01cXG5sYW5kaG9sZGluZy9NU1xcbmxhbmRpbmcvTVxcbmxhbmRsYWR5L1NNXFxubGFuZGxlc3MvTVxcbmxhbmRsaW5lL01TXFxubGFuZGxvY2tlZFxcbmxhbmRsb3JkL01TXFxubGFuZGx1YmJlci9NU1xcbmxhbmRtYXJrL01TXFxubGFuZG1hc3MvTVNcXG5sYW5kbWluZS9TXFxubGFuZG93bmVyL01TXFxubGFuZG93bmVyc2hpcFxcbmxhbmRvd25pbmcvU01cXG5sYW5kc2NhcGUvTVpHRFJTXFxubGFuZHNjYXBlci9NXFxubGFuZHNsaWRcXG5sYW5kc2xpZGUvTUdTXFxubGFuZHNsaXAvU1xcbmxhbmRzbWFuL01cXG5sYW5kc21lblxcbmxhbmR3YXJkL1NcXG5sYW5lL01TXFxubGFuZ3VhZ2UvTVNcXG5sYW5ndWlkL1BZXFxubGFuZ3VpZG5lc3MvTVxcbmxhbmd1aXNoL0RTR1xcbmxhbmd1b3IvU01cXG5sYW5ndW9yb3VzL1lcXG5sYW5rL1JZVFBcXG5sYW5raW5lc3MvTVxcbmxhbmtuZXNzL01cXG5sYW5reS9SVFBcXG5sYW5vbGluL01cXG5sYW50ZXJuL01TXFxubGFudGhhbnVtL01cXG5sYW55YXJkL01TXFxubGFwL1NNXFxubGFwYXJvc2NvcGljXFxubGFwYXJvc2NvcHlcXG5sYXBhcm90b215XFxubGFwYm9hcmQvU01cXG5sYXBkb2cvU01cXG5sYXBlbC9TTVxcbmxhcGlkYXJ5L1NNXFxubGFwaW4vU01cXG5sYXBwZWRcXG5sYXBwZXQvU01cXG5sYXBwaW5nXFxubGFwc2UvQUtHTVNEXFxubGFwdG9wL1NNXFxubGFwd2luZy9NU1xcbmxhcmJvYXJkL1NNXFxubGFyY2VuaXN0L1NNXFxubGFyY2Vub3VzXFxubGFyY2VueS9TTVxcbmxhcmNoL01TXFxubGFyZC9NRFJTWkdcXG5sYXJkZXIvTVxcbmxhcmR5L1JUXFxubGFyZ2UvUlNQTVlUXFxubGFyZ2VoZWFydGVkXFxubGFyZ2VuZXNzL01cXG5sYXJnZXNzL01cXG5sYXJnaXNoXFxubGFyZ28vU01cXG5sYXJpYXQvU01cXG5sYXJrL01EU0dcXG5sYXJrc3B1ci9TTVxcbmxhcnZhL01cXG5sYXJ2YWVcXG5sYXJ2YWxcXG5sYXJ5bmdlYWxcXG5sYXJ5bmdlc1xcbmxhcnluZ2l0aXMvTVxcbmxhcnlueC9NXFxubGFzYWduYS9NU1xcbmxhc2NpdmlvdXMvWVBcXG5sYXNjaXZpb3VzbmVzcy9NXFxubGFzZS9aR0RSU1xcbmxhc2VyL01cXG5sYXNoL01EU0dKXFxubGFzaGluZy9NXFxubGFzcy9NU1xcbmxhc3NpZS9TTVxcbmxhc3NpdHVkZS9NXFxubGFzc28vU01ER1xcbmxhc3QvTURZU0dcXG5sYXN0aW5nL1lcXG5sYXQvU1xcbmxhdGNoJ3NcXG5sYXRjaC9VRFNHXFxubGF0Y2hrZXkvU01cXG5sYXRlL1lUUlBcXG5sYXRlY29tZXIvTVNcXG5sYXRlbmN5L01cXG5sYXRlbmVzcy9NXFxubGF0ZW50XFxubGF0ZXJhbC9NRFlTR1xcbmxhdGVzdC9NXFxubGF0ZXgvTVxcbmxhdGgvTURSU1pHXFxubGF0aGUvTVxcbmxhdGhlci9HTURcXG5sYXRoZXJ5XFxubGF0aHNcXG5sYXRpY2VzXFxubGF0aXNoXFxubGF0aXR1ZGUvTVNcXG5sYXRpdHVkaW5hbFxcbmxhdGl0dWRpbmFyaWFuL01TXFxubGF0cmluZS9NU1xcbmxhdHRlL1JTTVxcbmxhdHRlci9NWVxcbmxhdHRpY2UvTURTXFxubGF0dGljZXdvcmsvU01cXG5sYXVkL01EU0dCXFxubGF1ZGFibHlcXG5sYXVkYW51bS9NXFxubGF1ZGF0b3J5XFxubGF1Z2gvQk1ER1xcbmxhdWdoYWJseVxcbmxhdWdoaW5nL01ZXFxubGF1Z2hpbmdzdG9jay9TTVxcbmxhdWdoc1xcbmxhdWdodGVyL01cXG5sYXVuY2gvQUdNRFNcXG5sYXVuY2hlci9TTVxcbmxhdW5jaHBhZC9TTVxcbmxhdW5kZXIvRFJaR1NcXG5sYXVuZGVyZXIvTVxcbmxhdW5kZXJldHRlL1NNXFxubGF1bmRyZXNzL01TXFxubGF1bmRyb21hdC9NU1xcbmxhdW5kcnkvU01cXG5sYXVuZHJ5bWFuL01cXG5sYXVuZHJ5bWVuXFxubGF1bmRyeXdvbWFuL01cXG5sYXVuZHJ5d29tZW5cXG5sYXVyZWF0ZS9NU1xcbmxhdXJlYXRlc2hpcC9NXFxubGF1cmVsL1NNXFxubGF2L1NHRFxcbmxhdmEvTVxcbmxhdmFnZS9NXFxubGF2YWxpZXJlL1NNXFxubGF2YXRvcmlhbFxcbmxhdmF0b3J5L1NNXFxubGF2ZS9TXFxubGF2ZW5kZXIvU01cXG5sYXZpc2gvUFRHRFJTWVxcbmxhdmlzaG5lc3MvTVxcbmxhdy9TTVxcbmxhd2JyZWFrZXIvU01cXG5sYXdicmVha2luZy9NXFxubGF3ZnVsL1VQWVxcbmxhd2Z1bG5lc3MvVU1cXG5sYXdnaXZlci9NU1xcbmxhd2xlc3MvUFlcXG5sYXdsZXNzbmVzcy9NXFxubGF3bWFrZXIvTVNcXG5sYXdtYWtpbmcvTVxcbmxhd21hbi9NXFxubGF3bWVuXFxubGF3bi9NU1xcbmxhd25tb3dlci9TTVxcbmxhd3JlbmNpdW0vTVxcbmxhd3N1aXQvTVNcXG5sYXd5ZXIvU01cXG5sYXgvVFJZUFxcbmxheGF0aXZlL01TXFxubGF4aXR5L01cXG5sYXhuZXNzL01cXG5sYXkvQUlDU0dNXFxubGF5YWJvdXQvU1xcbmxheWF3YXkvTVxcbmxheWVyL0NTTVxcbmxheWVyZWRcXG5sYXllcmluZy9NXFxubGF5ZXR0ZS9NU1xcbmxheW1hbi9NXFxubGF5bWVuXFxubGF5b2ZmL1NNXFxubGF5b3V0L1NNXFxubGF5b3Zlci9NU1xcbmxheXBlb3BsZVxcbmxheXBlcnNvbi9NU1xcbmxheXVwL1NNXFxubGF5d29tYW4vTVxcbmxheXdvbWVuXFxubGF6ZS9NR0RTXFxubGF6aWx5XFxubGF6aW5lc3MvTVxcbmxhenkvRFJTVEdQXFxubGF6eWJvbmVzL01cXG5sYi9TXFxubGJ3XFxubGVhL1NNXFxubGVhY2gvRFNHXFxubGVhZC9NRE5SU1pHXFxubGVhZGVyL01cXG5sZWFkZXJsZXNzXFxubGVhZGVyc2hpcC9TTVxcbmxlYWRpbmcvTVxcbmxlYWYvTURTR1xcbmxlYWZhZ2UvTVxcbmxlYWZsZXNzXFxubGVhZmxldC9HTURTXFxubGVhZnN0YWxrL01TXFxubGVhZnkvUlRcXG5sZWFndWUvRFNNR1xcbmxlYWsvTURTR1xcbmxlYWthZ2UvTVNcXG5sZWFraW5lc3MvTVxcbmxlYWt5L1BSVFxcbmxlYW4vTURSU1RHSlBcXG5sZWFuaW5nL01cXG5sZWFubmVzcy9NXFxubGVhcC9NRFJTWkdcXG5sZWFwZXIvTVxcbmxlYXBmcm9nL01TXFxubGVhcGZyb2dnZWRcXG5sZWFwZnJvZ2dpbmdcXG5sZWFwdFxcbmxlYXJuL0FVR0RTXFxubGVhcm5hYmlsaXR5XFxubGVhcm5hYmxlXFxubGVhcm5lZGx5XFxubGVhcm5lci9NU1xcbmxlYXJuaW5nJ3NcXG5sZWFzZS9BRFNNR1xcbmxlYXNlYmFjay9TTVxcbmxlYXNlaG9sZC9NUlNaXFxubGVhc2Vob2xkZXIvTVxcbmxlYXNlci9TTVxcbmxlYXNoJ3NcXG5sZWFzaC9VRFNHXFxubGVhc3QvTVxcbmxlYXN0d2lzZVxcbmxlYXRoZXIvTVNcXG5sZWF0aGVyZXR0ZS9NXFxubGVhdGhlcm5lY2svTVNcXG5sZWF0aGVyeVxcbmxlYXZlL0RSU01aR0pcXG5sZWF2ZW4vU0dNRFxcbmxlYXZlbmVkL1VcXG5sZWF2ZW5pbmcvTVxcbmxlYXZlci9NXFxubGVhdmluZ3MvTVxcbmxlY2gvTURSU1pHXFxubGVjaGVyL01cXG5sZWNoZXJvdXMvUFlcXG5sZWNoZXJvdXNuZXNzL01cXG5sZWNoZXJ5L01cXG5sZWNpdGhpbi9NXFxubGVjdGVybi9NU1xcbmxlY3R1cmUvTVpHRFJTXFxubGVjdHVyZXIvTVxcbmxlY3R1cmVzaGlwL1NNXFxubGVkZ2UvUlNNWlxcbmxlZGdlci9NXFxubGVlL1JTTVpcXG5sZWVjaC9NRFNHXFxubGVlay9NU1xcbmxlZXIvTURHXFxubGVlcmluZXNzL01cXG5sZWVyeS9SUFRcXG5sZWV3YXJkL1NNXFxubGVld2F5L01cXG5sZWZ0L01SU1RcXG5sZWZ0aXNtL01cXG5sZWZ0aXN0L1NNXFxubGVmdG1vc3RcXG5sZWZ0b3Zlci9TTVxcbmxlZnR3YXJkL1NcXG5sZWZ0eS9TTVxcbmxlZy9TTVxcbmxlZ2FjeS9TTVxcbmxlZ2FsL1NNWVxcbmxlZ2FsZXNlL01cXG5sZWdhbGlzbS9NU1xcbmxlZ2FsaXN0aWNcXG5sZWdhbGlzdGljYWxseVxcbmxlZ2FsaXR5L1NNXFxubGVnYWxpemF0aW9uL01cXG5sZWdhbGl6ZS9HRFNcXG5sZWdhdGUvQ1hNTlNcXG5sZWdhdGVlL01TXFxubGVnYXRpb24ncy9BQ1xcbmxlZ2F0by9TTVxcbmxlZ2VuZC9TTVxcbmxlZ2VuZGFyaWx5XFxubGVnZW5kYXJ5XFxubGVnZXJkZW1haW4vTVxcbmxlZ2dlZFxcbmxlZ2dpbmVzcy9NXFxubGVnZ2luZy9NU1xcbmxlZ2d5L1JQVFxcbmxlZ2hvcm4vTVNcXG5sZWdpYmlsaXR5L01cXG5sZWdpYmxlXFxubGVnaWJseVxcbmxlZ2lvbi9TTVxcbmxlZ2lvbmFyeS9TTVxcbmxlZ2lvbm5haXJlL1NNXFxubGVnaXNsYXRlL0RTR05WXFxubGVnaXNsYXRpb24vTVxcbmxlZ2lzbGF0aXZlL1lcXG5sZWdpc2xhdG9yL01TXFxubGVnaXNsYXR1cmUvU01cXG5sZWdpdFxcbmxlZ2l0aW1hY3kvTVxcbmxlZ2l0aW1hdGUvRFNZR1xcbmxlZ2l0aW1hdGl6ZS9HRFNcXG5sZWdpdGltaXphdGlvbi9NXFxubGVnaXRpbWl6ZS9EU0dcXG5sZWdsZXNzXFxubGVnbWFuL01cXG5sZWdtZW5cXG5sZWdyb29tL1NNXFxubGVndW1lL01TXFxubGVndW1pbm91c1xcbmxlZ3dhcm1lci9TXFxubGVnd29yay9NXFxubGVpL1NNXFxubGVpc3VyZS9ETVlcXG5sZWlzdXJlbGluZXNzL01cXG5sZWlzdXJld2Vhci9NXFxubGVpdG1vdGlmL01TXFxubGVpdG1vdGl2L01TXFxubGVtbWEvU1xcbmxlbW1lL0pHXFxubGVtbWluZy9NXFxubGVtb24vU01cXG5sZW1vbmFkZS9TTVxcbmxlbW9uZ3Jhc3NcXG5sZW1vbnlcXG5sZW11ci9TTVxcbmxlbmQvUlNaR1xcbmxlbmRlci9NXFxubGVuZ3RoL01OWFxcbmxlbmd0aGVuL0dEXFxubGVuZ3RoaWx5XFxubGVuZ3RoaW5lc3MvTVxcbmxlbmd0aHNcXG5sZW5ndGh3aXNlXFxubGVuZ3RoeS9QUlRcXG5sZW5pZW5jZS9NXFxubGVuaWVuY3kvTVxcbmxlbmllbnQvWVxcbmxlbml0aXZlXFxubGVucy9NU1xcbmxlbnRcXG5sZW50aWwvTVNcXG5sZW50b1xcbmxlb25pbmVcXG5sZW9wYXJkL1NNXFxubGVvcGFyZGVzcy9NU1xcbmxlb3RhcmQvU01cXG5sZXBlci9TTVxcbmxlcHJlY2hhdW4vTVNcXG5sZXByb3N5L01cXG5sZXByb3VzXFxubGVwdGFcXG5sZXB0b24vTVNcXG5sZXNiaWFuL1NNXFxubGVzYmlhbmlzbS9NXFxubGVzaW9uL01TXFxubGVzcy9NTlJYXFxubGVzc2VlL01TXFxubGVzc2VuL0dEXFxubGVzc29uL01TXFxubGVzc29yL01TXFxubGV0L0lTTVxcbmxldGRvd24vU01cXG5sZXRoYWwvWVxcbmxldGhhcmdpY1xcbmxldGhhcmdpY2FsbHlcXG5sZXRoYXJneS9NXFxubGV0dGVyL1pHTURSU1xcbmxldHRlcmJvbWIvU1xcbmxldHRlcmJveC9TXFxubGV0dGVyZWQvVVxcbmxldHRlcmVyL01cXG5sZXR0ZXJoZWFkL01TXFxubGV0dGVyaW5nL01cXG5sZXR0ZXJwcmVzcy9NXFxubGV0dGluZy9TXFxubGV0dHVjZS9NU1xcbmxldHVwL1NNXFxubGV1Y2luZVxcbmxldWNvdG9teS9TXFxubGV1a2VtaWEvTVxcbmxldWtlbWljL1NNXFxubGV1a29jeXRlL01TXFxubGV2ZWUvU01cXG5sZXZlbC9QU1pHTURSWVxcbmxldmVsZXIvTVxcbmxldmVsaGVhZGVkL1BcXG5sZXZlbGhlYWRlZG5lc3MvTVxcbmxldmVsbmVzcy9NXFxubGV2ZXIvU0dNRFxcbmxldmVyYWdlJ3NcXG5sZXZlcmFnZS9DRFNHXFxubGV2aWF0aGFuL01TXFxubGV2aWVyL01cXG5sZXZpdGF0ZS9EU0dOXFxubGV2aXRhdGlvbi9NXFxubGV2aXR5L01cXG5sZXZ5L0RSU01aR1xcbmxld2QvUllQVFxcbmxld2RuZXNzL01cXG5sZXhlci9TXFxubGV4aWNhbFxcbmxleGljb2dyYXBoZXIvTVNcXG5sZXhpY29ncmFwaGljXFxubGV4aWNvZ3JhcGhpY2FsXFxubGV4aWNvZ3JhcGh5L01cXG5sZXhpY29uL1NNXFxubGV4aXNcXG5sZ1xcbmxpYWJpbGl0aWVzXFxubGlhYmlsaXR5L0FNXFxubGlhYmxlL0FcXG5saWFpc2UvR0RTXFxubGlhaXNvbi9NU1xcbmxpYXIvTVNcXG5saWIvTVxcbmxpYmF0aW9uL1NNXFxubGliYmVyL01TXFxubGliZWwvU1pHTURSXFxubGliZWxlci9NXFxubGliZWxvdXNcXG5saWJlcmFsL01ZUFNcXG5saWJlcmFsaXNtL01cXG5saWJlcmFsaXR5L01cXG5saWJlcmFsaXphdGlvbi9TTVxcbmxpYmVyYWxpemUvR0RTXFxubGliZXJhbG5lc3MvTVxcbmxpYmVyYXRlL0NEU0dOXFxubGliZXJhdGlvbi9DTVxcbmxpYmVyYXRvci9NU1xcbmxpYmVydGFyaWFuL1NNXFxubGliZXJ0aW5lL01TXFxubGliZXJ0eS9TTVxcbmxpYmlkaW5hbFxcbmxpYmlkaW5vdXNcXG5saWJpZG8vTVNcXG5saWJyYXJpYW4vTVNcXG5saWJyYXJpYW5zaGlwXFxubGlicmFyeS9TTVxcbmxpYnJldHRpc3QvTVNcXG5saWJyZXR0by9TTVxcbmxpY2VcXG5saWNlbnNlL01HRFNcXG5saWNlbnNlZC9VXFxubGljZW5zZWUvTVNcXG5saWNlbnRpYXRlL1NNXFxubGljZW50aW91cy9ZUFxcbmxpY2VudGlvdXNuZXNzL01cXG5saWNoZW4vTVNcXG5saWNpdC9ZXFxubGljay9NREpTR1xcbmxpY2tpbmcvTVxcbmxpY29yaWNlL1NNXFxubGlkL1NNXFxubGlkZGVkXFxubGlkbGVzc1xcbmxpZG8vTVNcXG5saWUvRFNNXFxubGllZC9NUlxcbmxpZWYvUlRcXG5saWVnZS9TTVxcbmxpZW4vTVNcXG5saWV1L01cXG5saWV1dGVuYW5jeS9NXFxubGlldXRlbmFudC9NU1xcbmxpZmUvTVpSXFxubGlmZWJlbHQvU1xcbmxpZmVibG9vZC9NXFxubGlmZWJvYXQvTVNcXG5saWZlYnVveS9NU1xcbmxpZmVmb3Jtc1xcbmxpZmVndWFyZC9TTVxcbmxpZmVsZXNzL1lQXFxubGlmZWxlc3NuZXNzL01cXG5saWZlbGlrZVxcbmxpZmVsaW5lL01TXFxubGlmZWxvbmdcXG5saWZlci9NXFxubGlmZXNhdmVyL1NNXFxubGlmZXNhdmluZy9NXFxubGlmZXNwYW4vU1xcbmxpZmVzdHlsZS9TTVxcbmxpZmV0aW1lL01TXFxubGlmZXdvcmsvTVNcXG5saWZ0L01EUlNaR1xcbmxpZnRlci9NXFxubGlmdG9mZi9TTVxcbmxpZ2FtZW50L01TXFxubGlnYXRlL0dORFNcXG5saWdhdGlvbi9NXFxubGlnYXR1cmUvTUdEU1xcbmxpZ2h0J3MvQ1xcbmxpZ2h0L0NBU1RHRFxcbmxpZ2h0ZWQvVVxcbmxpZ2h0ZW4vU0RSWkdcXG5saWdodGVuZXIvTVxcbmxpZ2h0ZXIvU01cXG5saWdodGZhY2UvTURcXG5saWdodGhlYWRlZFxcbmxpZ2h0aGVhcnRlZC9ZUFxcbmxpZ2h0aGVhcnRlZG5lc3MvTVxcbmxpZ2h0aG91c2UvTVNcXG5saWdodGluZydzXFxubGlnaHRseVxcbmxpZ2h0bmVzcy9NXFxubGlnaHRuaW5nL01EU1xcbmxpZ2h0cHJvb2ZcXG5saWdodHNoaXAvTVNcXG5saWdodHdlaWdodC9TTVxcbmxpZ25lb3VzXFxubGlnbmluXFxubGlnbml0ZS9NXFxubGlpXFxubGlrYWJpbGl0eS9NXFxubGlrYWJsZS9QXFxubGlrYWJsZW5lc3MvTVxcbmxpa2UvRU1HRFNUXFxubGlrZWxpaG9vZC9VTVxcbmxpa2VsaWhvb2RzXFxubGlrZWxpbmVzcy9VTVxcbmxpa2VseS9VUFJUXFxubGlrZW4vU0dEXFxubGlrZW5lc3MvVU1cXG5saWtlbmVzc2VzXFxubGlrZXJcXG5saWtld2lzZVxcbmxpa2luZy9NXFxubGlsYWMvU01cXG5saWxsaXB1dGlhblxcbmxpbG8vU1xcbmxpbHQvTURTR1xcbmxpbHkvU01cXG5saW1iL01TXFxubGltYmVyL1VEU0dcXG5saW1iZXJuZXNzL01cXG5saW1ibGVzc1xcbmxpbWJvL1NNXFxubGltZS9NR0RTXFxubGltZWFkZS9TTVxcbmxpbWVsaWdodC9NXFxubGltZXJpY2svU01cXG5saW1lc2NhbGVcXG5saW1lc3RvbmUvTVxcbmxpbWV5L1NcXG5saW1pdCdzXFxubGltaXQvQ1NaR0RSXFxubGltaXRhdGlvbi9DTVxcbmxpbWl0YXRpb25zXFxubGltaXRlZC9VXFxubGltaXRlcidzXFxubGltaXRpbmcvU1xcbmxpbWl0bGVzcy9QXFxubGltaXRsZXNzbmVzcy9NXFxubGltbi9EU0dcXG5saW1vL01TXFxubGltb3VzaW5lL01TXFxubGltcC9NRFJZU1BUR1xcbmxpbXBldC9NU1xcbmxpbXBpZC9ZUFxcbmxpbXBpZGl0eS9NXFxubGltcGlkbmVzcy9NXFxubGltcG5lc3MvTVxcbmxpbXkvUlRcXG5saW5hZ2UvTVxcbmxpbmNocGluL1NNXFxubGluZGVuL01TXFxubGluZS9NWkdEUlNKXFxubGluZWFnZS9NU1xcbmxpbmVhbC9ZXFxubGluZWFtZW50L1NNXFxubGluZWFyL1lcXG5saW5lYXJpdHkvTVxcbmxpbmViYWNrZXIvTVNcXG5saW5lZC9VXFxubGluZWZlZWRcXG5saW5lbWFuL01cXG5saW5lbWVuXFxubGluZW4vU01cXG5saW5lbnMvTVxcbmxpbmVyL01cXG5saW5lc21hbi9NXFxubGluZXNtZW5cXG5saW5ldXAvTVNcXG5saW5nL01cXG5saW5nZXIvWkdKRFJTXFxubGluZ2VyZXIvTVxcbmxpbmdlcmllL01cXG5saW5nZXJpbmcvWVxcbmxpbmdvL01cXG5saW5nb2VzXFxubGluZ3VhbFxcbmxpbmd1aW5lL01cXG5saW5ndWlzdC9TTVxcbmxpbmd1aXN0aWMvU1xcbmxpbmd1aXN0aWNhbGx5XFxubGluZ3Vpc3RpY3MvTVxcbmxpbmltZW50L1NNXFxubGluaW5nL01cXG5saW5rL01EUlNHXFxubGlua2FnZS9NU1xcbmxpbmttYW5cXG5saW5rbWVuXFxubGlua3VwL01TXFxubGlubmV0L01TXFxubGlub1xcbmxpbm9sZXVtL01cXG5saW5zZWVkL01cXG5saW50J3NcXG5saW50L0NER1xcbmxpbnRlbC9NU1xcbmxpbnRzXFxubGludHkvVFJcXG5saW9uL01TXFxubGlvbmVzcy9NU1xcbmxpb25oZWFydGVkXFxubGlvbml6YXRpb24vTVxcbmxpb25pemUvR0RTXFxubGlwL1NNXFxubGlwaWQvU01cXG5saXBvc3VjdGlvbi9NXFxubGlwcGVkXFxubGlwcHlcXG5saXByZWFkL0dSU1xcbmxpcHJlYWRlci9NXFxubGlwcmVhZGluZy9NXFxubGlwc3RpY2svTURTR1xcbmxpcVxcbmxpcXVlZmFjdGlvbi9NXFxubGlxdWVmeS9EU0dcXG5saXF1ZXVyL1NNXFxubGlxdWlkL01TXFxubGlxdWlkYXRlL1hHTkRTXFxubGlxdWlkYXRpb24vTVxcbmxpcXVpZGF0b3IvTVNcXG5saXF1aWRpdHkvTVxcbmxpcXVpZGl6ZS9aR0RSU1xcbmxpcXVpZGl6ZXIvTVxcbmxpcXVvci9NREdTXFxubGlyYS9NXFxubGlyZVxcbmxpc2xlL01cXG5saXNwL01EUlNaR1xcbmxpc3Blci9NXFxubGlzc29tZVxcbmxpc3QvTUROU0pYR1xcbmxpc3RlZC9VXFxubGlzdGVuL0JNRFJaR1xcbmxpc3RlbmVyL01cXG5saXN0ZXJpYVxcbmxpc3RpbmcvTVxcbmxpc3RsZXNzL1lQXFxubGlzdGxlc3NuZXNzL01cXG5saXQvWlJcXG5saXRhbnkvU01cXG5saXRjaGkvTVNcXG5saXRlXFxubGl0ZXIvTVxcbmxpdGVyYWN5L01cXG5saXRlcmFsL1NNWVBcXG5saXRlcmFsbmVzcy9NXFxubGl0ZXJhcmluZXNzL01cXG5saXRlcmFyeS9QXFxubGl0ZXJhdGUvU01ZXFxubGl0ZXJhdGkvTVxcbmxpdGVyYXR1cmUvTVxcbmxpdGhlL1JQWVRcXG5saXRoZW5lc3MvTVxcbmxpdGhlc29tZVxcbmxpdGhpdW0vTVxcbmxpdGhvZ3JhcGgvTURSWkdcXG5saXRob2dyYXBoZXIvTVxcbmxpdGhvZ3JhcGhpY1xcbmxpdGhvZ3JhcGhpY2FsbHlcXG5saXRob2dyYXBoc1xcbmxpdGhvZ3JhcGh5L01cXG5saXRob3NwaGVyZS9TTVxcbmxpdGlnYW50L1NNXFxubGl0aWdhdGUvRFNHTlxcbmxpdGlnYXRpb24vTVxcbmxpdGlnYXRvci9NU1xcbmxpdGlnaW91cy9QXFxubGl0aWdpb3VzbmVzcy9NXFxubGl0bXVzL01cXG5saXRvdGVzL01cXG5saXR0ZXIvTURSU1pHXFxubGl0dGVyYXRldXIvTVNcXG5saXR0ZXJidWcvTVNcXG5saXR0ZXJlci9NXFxubGl0dGxlL01UUlBcXG5saXR0bGVuZXNzL01cXG5saXR0b3JhbC9TTVxcbmxpdHVyZ2ljYWwvWVxcbmxpdHVyZ2lzdC9TTVxcbmxpdHVyZ3kvU01cXG5saXZhYmlsaXR5L01cXG5saXZhYmxlL1VcXG5saXZlL0FUR0RTQlxcbmxpdmVsaWhvb2QvU01cXG5saXZlbGluZXNzL01cXG5saXZlbG9uZy9TXFxubGl2ZWx5L1BSVFxcbmxpdmVuL1NHRFxcbmxpdmVyJ3NcXG5saXZlci9TXFxubGl2ZXJpZWRcXG5saXZlcmlzaFxcbmxpdmVyd29ydC9NU1xcbmxpdmVyd3Vyc3QvTVxcbmxpdmVyeS9DU01cXG5saXZlcnltYW4vQ01cXG5saXZlcnltZW4vQ1xcbmxpdmVzdG9jay9NXFxubGl2ZXdhcmVcXG5saXZpZC9ZXFxubGl2aW5nL01TXFxubGl4L0tcXG5saXphcmQvTVNcXG5sbFxcbmxsYW1hL1NNXFxubGxhbm8vU01cXG5sb1xcbmxvYWQnc1xcbmxvYWQvQVVHU0RcXG5sb2FkYWJsZVxcbmxvYWRlci9NU1xcbmxvYWRpbmcnc1xcbmxvYWYvTURSU1pHXFxubG9hZmVyL01cXG5sb2FtL01cXG5sb2FteS9UUlxcbmxvYW4vTURSU1pHXFxubG9hbmVyL01cXG5sb2Fuc2hhcmtpbmcvTVxcbmxvYW53b3JkL01TXFxubG9hdGgvSlpHRFJTXFxubG9hdGhlXFxubG9hdGhlci9NXFxubG9hdGhpbmcvTVxcbmxvYXRoc29tZS9QWVxcbmxvYXRoc29tZW5lc3MvTVxcbmxvYXZlc1xcbmxvYi9TTURcXG5sb2JhclxcbmxvYmJlZFxcbmxvYmJlci9NU1xcbmxvYmJpbmdcXG5sb2JieS9HRFNNXFxubG9iYnlpc3QvTVNcXG5sb2JlL01TXFxubG9ib3RvbWl6ZS9EU0dcXG5sb2JvdG9teS9TTVxcbmxvYnN0ZXIvTVNcXG5sb2NhbC9TTVlcXG5sb2NhbGUvTVNcXG5sb2NhbGl0eS9TTVxcbmxvY2FsaXphdGlvbi9NXFxubG9jYWxpemUvRFNHXFxubG9jYXRlL0VBR05EU1xcbmxvY2F0aW9uJ3MvQVxcbmxvY2F0aW9uL0VTTVxcbmxvY2F0b3IvTVNcXG5sb2Nhdm9yZS9TTVxcbmxvY2lcXG5sb2NrL01EUlNCWkdcXG5sb2NrZXIvTVxcbmxvY2tldC9NU1xcbmxvY2tqYXcvTVxcbmxvY2tvdXQvTVNcXG5sb2Nrc21pdGgvTVxcbmxvY2tzbWl0aHNcXG5sb2Nrc3RlcC9NXFxubG9ja3VwL01TXFxubG9jby9TXFxubG9jb21vdGlvbi9NXFxubG9jb21vdGl2ZS9NU1xcbmxvY293ZWVkL1NNXFxubG9jdW0vU1xcbmxvY3VzL01cXG5sb2N1c3QvU01cXG5sb2N1dGlvbi9NU1xcbmxvZGUvTVNcXG5sb2Rlc3Rhci9NU1xcbmxvZGVzdG9uZS9NU1xcbmxvZGdlL0RSU0pNWkdcXG5sb2RnZXIvTVxcbmxvZGdpbmcvTVxcbmxvZGdpbmdzL01cXG5sb2Z0L01EU0dcXG5sb2Z0aWx5XFxubG9mdGluZXNzL01cXG5sb2Z0eS9QUlRcXG5sb2cvU01cXG5sb2dhbmJlcnJ5L1NNXFxubG9nYXJpdGhtL1NNXFxubG9nYXJpdGhtaWNcXG5sb2dib29rL1NNXFxubG9nZS9NU1xcbmxvZ2dlZFxcbmxvZ2dlci9TTVxcbmxvZ2dlcmhlYWQvU01cXG5sb2dnaWEvU01cXG5sb2dnaW5nL01cXG5sb2dpYy9NXFxubG9naWNhbC9ZXFxubG9naWNhbGl0eS9NXFxubG9naWNpYW4vTVNcXG5sb2dpbi9TTVxcbmxvZ2lzdGljL1NcXG5sb2dpc3RpY2FsL1lcXG5sb2dpc3RpY3MvTVxcbmxvZ2phbS9TTVxcbmxvZ28vTVNcXG5sb2dvZmYvU01cXG5sb2dvbi9TTVxcbmxvZ290eXBlL1NNXFxubG9nb3V0L1NNXFxubG9ncm9sbGluZy9NXFxubG9neS9SVFxcbmxvaW4vTVNcXG5sb2luY2xvdGgvTVxcbmxvaW5jbG90aHNcXG5sb2l0ZXIvWkdTRFJcXG5sb2l0ZXJlci9NXFxubG9pdGVyaW5nL01cXG5sb2xjYXQvU01cXG5sb2xsL0RTR1xcbmxvbGxpcG9wL1NNXFxubG9sbG9wL0dTRFxcbmxvbGx5L1NcXG5sb2xseWdhZy9TXFxubG9sbHlnYWdnZWRcXG5sb2xseWdhZ2dpbmdcXG5sb25lL1laUlxcbmxvbmVsaW5lc3MvTVxcbmxvbmVseS9QVFJcXG5sb25lci9NXFxubG9uZXNvbWUvWVBcXG5sb25lc29tZW5lc3MvTVxcbmxvbmcnc1xcbmxvbmcvS0RTVEdcXG5sb25nYm9hdC9NU1xcbmxvbmdib3cvTVNcXG5sb25nZXJcXG5sb25nZXZpdHkvTVxcbmxvbmdoYWlyL01TXFxubG9uZ2hhbmQvTVxcbmxvbmdob3JuL01TXFxubG9uZ2hvdXNlL1NcXG5sb25naW5nL01ZU1xcbmxvbmdpc2hcXG5sb25naXR1ZGUvTVNcXG5sb25naXR1ZGluYWwvWVxcbmxvbmdzaG9yZW1hbi9NXFxubG9uZ3Nob3JlbWVuXFxubG9uZ3NpZ2h0ZWRcXG5sb25nc3RhbmRpbmdcXG5sb25ndGltZVxcbmxvbmd1ZXVyL1NNXFxubG9uZ3dheXNcXG5sb29cXG5sb29mYWgvTVxcbmxvb2ZhaHNcXG5sb29rL01EUlNaR1xcbmxvb2thbGlrZS9NU1xcbmxvb2tlci9NXFxubG9va291dC9NU1xcbmxvb2t1cFxcbmxvb20vTURTR1xcbmxvb24vTVNcXG5sb29uaWUvTVxcbmxvb255L1JTTVRcXG5sb29wL01EU0dcXG5sb29waG9sZS9NU1xcbmxvb3B5L1JUXFxubG9vcy9OUlhcXG5sb29zZS9VRFNUR1xcbmxvb3NlbHlcXG5sb29zZW4vVUdTRFxcbmxvb3NlbmVzcy9NXFxubG9vdC9NRFJTWkdcXG5sb290ZXIvTVxcbmxvb3RpbmcvTVxcbmxvcC9TXFxubG9wZS9NR0RTXFxubG9wcGVkXFxubG9wcGluZ1xcbmxvcHNpZGVkL1lQXFxubG9wc2lkZWRuZXNzL01cXG5sb3F1YWNpb3VzL1BZXFxubG9xdWFjaW91c25lc3MvTVxcbmxvcXVhY2l0eS9NXFxubG9yZC9NRFlTR1xcbmxvcmRsaW5lc3MvTVxcbmxvcmRseS9UUFJcXG5sb3Jkc2hpcC9TTVxcbmxvcmUvTVxcbmxvcmduZXR0ZS9TTVxcbmxvcmlzL01TXFxubG9yblxcbmxvcnJ5L1NNXFxubG9zZS9aR1JTSlxcbmxvc2VyL01cXG5sb3NpbmcvTVxcbmxvc3MvTVNcXG5sb3NzbGVzc1xcbmxvc3RcXG5sb3QvU01cXG5sb3Rpb24vU01cXG5sb3R0ZXJ5L1NNXFxubG90dG8vTVxcbmxvdHVzL01TXFxubG91Y2hlXFxubG91ZC9SWVRQXFxubG91ZGhhaWxlci9TTVxcbmxvdWRtb3V0aC9NRFxcbmxvdWRtb3V0aHNcXG5sb3VkbmVzcy9NXFxubG91ZHNwZWFrZXIvTVNcXG5sb3VnaFxcbmxvdWdoc1xcbmxvdW5nZS9NWkdEUlNcXG5sb3VuZ2VyL01cXG5sb3VyL0RTR1xcbmxvdXNlJ3NcXG5sb3VzZS9DRFNHXFxubG91c2lseVxcbmxvdXNpbmVzcy9NXFxubG91c3kvVFBSXFxubG91dC9NU1xcbmxvdXRpc2gvUFlcXG5sb3V2ZXIvTURTXFxubG92YWJsZW5lc3MvTVxcbmxvdmFibHlcXG5sb3ZlL01ZWkdEUlNCXFxubG92ZWJpcmQvU01cXG5sb3ZlY2hpbGQvTVxcbmxvdmVkL1VcXG5sb3ZlbGVzc1xcbmxvdmVsaW5lc3MvTVxcbmxvdmVsb3JuXFxubG92ZWx5L1JTTVRQXFxubG92ZW1ha2luZy9NXFxubG92ZXIvTVxcbmxvdmVzaWNrXFxubG92ZXkvU1xcbmxvdmluZy9ZXFxubG93L1NaVEdNRFJZUFxcbmxvd2Jvcm5cXG5sb3dib3kvTVNcXG5sb3dicm93L1NNXFxubG93ZG93bi9NXFxubG93ZXIvR0RcXG5sb3dlcmNhc2UvTVxcbmxvd2VybW9zdFxcbmxvd2lzaFxcbmxvd2xhbmQvU1pNUlxcbmxvd2xhbmRlci9NXFxubG93bGlmZS9TTVxcbmxvd2xpbmVzcy9NXFxubG93bHkvVFBSXFxubG93bmVzcy9NXFxubG94L01cXG5sb3lhbC9FVFlcXG5sb3lhbGVyXFxubG95YWxpc20vTVxcbmxveWFsaXN0L1NNXFxubG95YWx0aWVzXFxubG95YWx0eS9FTVxcbmxvemVuZ2UvU01cXG5sdGRcXG5sdWF1L01TXFxubHViYmVyL01ZU1xcbmx1YmUvTUdEU1xcbmx1YnJpY2FudC9TTVxcbmx1YnJpY2F0ZS9EU0dOXFxubHVicmljYXRpb24vTVxcbmx1YnJpY2F0b3IvTVNcXG5sdWJyaWNpb3VzL1lcXG5sdWJyaWNpdHkvTVxcbmx1Y2lkL1BZXFxubHVjaWRpdHkvTVxcbmx1Y2lkbmVzcy9NXFxubHVjay9NRFNHXFxubHVja2lseS9VXFxubHVja2luZXNzL1VNXFxubHVja2xlc3NcXG5sdWNreS9VUFRSXFxubHVjcmF0aXZlL1lQXFxubHVjcmF0aXZlbmVzcy9NXFxubHVjcmUvTVxcbmx1Y3VicmF0ZS9HTkRTXFxubHVjdWJyYXRpb24vTVxcbmx1ZGljcm91cy9ZUFxcbmx1ZGljcm91c25lc3MvTVxcbmx1ZG9cXG5sdWZmL0RTR1xcbmx1Zy9TTVxcbmx1Z2UvU1xcbmx1Z2dhZ2UvTVxcbmx1Z2dlZFxcbmx1Z2dlci9NU1xcbmx1Z2dpbmdcXG5sdWdob2xlL1NcXG5sdWdzYWlsL1NNXFxubHVndWJyaW91cy9ZUFxcbmx1Z3VicmlvdXNuZXNzL01cXG5sdWtld2FybS9ZUFxcbmx1a2V3YXJtbmVzcy9NXFxubHVsbC9NRFNHXFxubHVsbGFieS9TTVxcbmx1bHUvU1xcbmx1bWJhZ28vTVxcbmx1bWJhclxcbmx1bWJlci9NRFJaR1NcXG5sdW1iZXJlci9NXFxubHVtYmVyaW5nL01cXG5sdW1iZXJqYWNrL1NNXFxubHVtYmVybWFuL01cXG5sdW1iZXJtZW5cXG5sdW1iZXJ5YXJkL1NNXFxubHVtZW5cXG5sdW1pbmFyeS9TTVxcbmx1bWluZXNjZW5jZS9NXFxubHVtaW5lc2NlbnRcXG5sdW1pbm9zaXR5L01cXG5sdW1pbm91cy9ZXFxubHVtbW94L01TXFxubHVtcC9NRE5TR1xcbmx1bXBlY3RvbXkvU1xcbmx1bXBlbnByb2xldGFyaWF0XFxubHVtcGluZXNzL01cXG5sdW1waXNoXFxubHVtcHkvVFJQXFxubHVuYWN5L1NNXFxubHVuYXJcXG5sdW5hdGljL1NNXFxubHVuY2gvR01EU1xcbmx1bmNoYm94L1NcXG5sdW5jaGVvbi9TTVxcbmx1bmNoZW9uZXR0ZS9TTVxcbmx1bmNocm9vbS9NU1xcbmx1bmNodGltZS9NU1xcbmx1bmcvTURTR1xcbmx1bmdlL1NNXFxubHVuZ2Zpc2gvTVNcXG5sdW5nZnVsL1NcXG5sdW5raGVhZC9NU1xcbmx1cGluZS9NU1xcbmx1cHVzL01cXG5sdXJjaC9HTURTXFxubHVyZS9NR0RTXFxubHVyZ3lcXG5sdXJpZC9QWVxcbmx1cmlkbmVzcy9NXFxubHVyay9EUlNaR1xcbmx1c2Npb3VzL1BZXFxubHVzY2lvdXNuZXNzL01cXG5sdXNoL01SU1lQVFxcbmx1c2huZXNzL01cXG5sdXN0L01EUlNHXFxubHVzdGVyL01cXG5sdXN0ZXJsZXNzXFxubHVzdGZ1bC9ZXFxubHVzdGlseVxcbmx1c3RpbmVzcy9NXFxubHVzdHJvdXMvWVxcbmx1c3R5L1BUUlxcbmx1dGFuaXN0L1NNXFxubHV0ZS9NU1xcbmx1dGVuaXN0L1NNXFxubHV0ZXRpdW0vTVxcbmx1eFxcbmx1eHVyaWFuY2UvTVxcbmx1eHVyaWFudC9ZXFxubHV4dXJpYXRlL0RTR05cXG5sdXh1cmlhdGlvbi9NXFxubHV4dXJpb3VzL1BZXFxubHV4dXJpb3VzbmVzcy9NXFxubHV4dXJ5L1NNXFxubHZpXFxubHZpaVxcbmx4aVxcbmx4aWlcXG5seGl2XFxubHhpeFxcbmx4dmlcXG5seHZpaVxcbmx5Y2V1bS9NU1xcbmx5Y2hnYXRlL1NcXG5seWUvTUdcXG5seWluZy9NXFxubHltcGgvTVxcbmx5bXBoYXRpYy9TTVxcbmx5bXBob2N5dGUvU01cXG5seW1waG9pZFxcbmx5bXBob21hL1NNXFxubHluY2gvSlpHRFJTXFxubHluY2hlci9NXFxubHluY2hpbmcvTVxcbmx5bngvTVNcXG5seXJlL01TXFxubHlyZWJpcmQvTVNcXG5seXJpYy9TTVxcbmx5cmljYWwvWVxcbmx5cmljaXNtL01cXG5seXJpY2lzdC9TTVxcbmx5c29zb21hbFxcbmx5c29zb21lc1xcbm0vS0FTXFxubWEnYW1cXG5tYS9TTUhcXG5tYWMvU0dNRFxcbm1hY2FicmVcXG5tYWNhZGFtL01cXG5tYWNhZGFtaWEvU01cXG5tYWNhZGFtaXplL0dEU1xcbm1hY2FxdWUvTVNcXG5tYWNhcm9uaS9NU1xcbm1hY2Fyb29uL01TXFxubWFjYXcvU01cXG5tYWNlL01TXFxubWFjZXJhdGUvRFNHTlxcbm1hY2VyYXRpb24vTVxcbm1hY2gvTVxcbm1hY2hldGUvU01cXG5tYWNoaW5hdGUvR05EU1hcXG5tYWNoaW5hdGlvbi9NXFxubWFjaGluZS9EU01HQlxcbm1hY2hpbmVyeS9NXFxubWFjaGluaXN0L01TXFxubWFjaGlzbW8vTVxcbm1hY2hvL01cXG5tYWNrZXJlbC9TTVxcbm1hY2tpbmF3L1NNXFxubWFja2ludG9zaC9NU1xcbm1hY3JhbWUvTVxcbm1hY3JvL1NNXFxubWFjcm9iaW90aWMvU1xcbm1hY3JvYmlvdGljcy9NXFxubWFjcm9jb3NtL1NNXFxubWFjcm9lY29ub21pYy9TXFxubWFjcm9lY29ub21pY3MvTVxcbm1hY3JvbG9neS9TXFxubWFjcm9uL01TXFxubWFjcm9waGFnZXNcXG5tYWNyb3Njb3BpY1xcbm1hZC9TTVlQXFxubWFkYW0vU01cXG5tYWRhbWUvTVxcbm1hZGNhcC9NU1xcbm1hZGRlbi9ER1NcXG5tYWRkZW5pbmcvWVxcbm1hZGRlci9NU1xcbm1hZGRlc3RcXG5tYWRkaW5nXFxubWFkZS9BVVxcbm1hZGVtb2lzZWxsZS9NU1xcbm1hZGhvdXNlL1NNXFxubWFkbWFuL01cXG5tYWRtZW5cXG5tYWRuZXNzL01cXG5tYWRyYXMvTVNcXG5tYWRyYXNhL1NNXFxubWFkcmFzYWgvTVxcbm1hZHJhc2Foc1xcbm1hZHJhc3NhL1NNXFxubWFkcmlnYWwvU01cXG5tYWR3b21hbi9NXFxubWFkd29tZW5cXG5tYWVsc3Ryb20vU01cXG5tYWVzdHJvL1NNXFxubWFmaWEvU01cXG5tYWZpb3NpXFxubWFmaW9zby9NXFxubWFnL1NNXFxubWFnYXppbmUvU01cXG5tYWdlL01TXFxubWFnZW50YS9NXFxubWFnZ290L01TXFxubWFnZ290eVxcbm1hZ2kvTVxcbm1hZ2ljL1NNXFxubWFnaWNhbC9ZXFxubWFnaWNpYW4vU01cXG5tYWdpY2tlZFxcbm1hZ2lja2luZ1xcbm1hZ2lzdGVyaWFsL1lcXG5tYWdpc3RyYWN5L01cXG5tYWdpc3RyYXRlL1NNXFxubWFnbWEvTVxcbm1hZ25hbmltaXR5L01cXG5tYWduYW5pbW91cy9ZXFxubWFnbmF0ZS9TTVxcbm1hZ25lc2lhL01cXG5tYWduZXNpdW0vTVxcbm1hZ25ldC9NU1xcbm1hZ25ldGljXFxubWFnbmV0aWNhbGx5XFxubWFnbmV0aXNtL01cXG5tYWduZXRpdGUvTVxcbm1hZ25ldGl6YWJsZVxcbm1hZ25ldGl6YXRpb24vQ01cXG5tYWduZXRpemUvQ0dEU1xcbm1hZ25ldG8vU01cXG5tYWduZXRvbWV0ZXIvU01cXG5tYWduZXRvc3BoZXJlXFxubWFnbmlmaWNhdGlvbi9NXFxubWFnbmlmaWNlbmNlL01cXG5tYWduaWZpY2VudC9ZXFxubWFnbmlmaWVyL01cXG5tYWduaWZ5L1pHWERSU05cXG5tYWduaWxvcXVlbmNlL01cXG5tYWduaWxvcXVlbnRcXG5tYWduaXR1ZGUvU01cXG5tYWdub2xpYS9NU1xcbm1hZ25vblxcbm1hZ251bS9NU1xcbm1hZ3BpZS9NU1xcbm1hZ3VzL01cXG5tYWhhcmFqYWgvTVxcbm1haGFyYWphaHNcXG5tYWhhcmFuaS9TTVxcbm1haGFyaXNoaS9TTVxcbm1haGF0bWEvU01cXG5tYWhvZ2FueS9TTVxcbm1haG91dC9NU1xcbm1haWQvTU5TWFxcbm1haWRlbi9NWVxcbm1haWRlbmhhaXIvTVxcbm1haWRlbmhlYWQvU01cXG5tYWlkZW5ob29kL01cXG5tYWlkc2VydmFudC9TTVxcbm1haWwvSk1EUlNaR1xcbm1haWxiYWcvU01cXG5tYWlsYm9tYi9HU0RcXG5tYWlsYm94L01TXFxubWFpbGVyL01cXG5tYWlsaW5nL01cXG5tYWlsbG90L1NNXFxubWFpbG1hbi9NXFxubWFpbG1lblxcbm1haWxzaG90L1NcXG5tYWltL0RTR1xcbm1haW4vTVlTXFxubWFpbmZyYW1lL1NNXFxubWFpbmxhbmQvTVNcXG5tYWlubGluZS9NR0RTXFxubWFpbm1hc3QvTVNcXG5tYWluc2FpbC9NU1xcbm1haW5zcHJpbmcvTVNcXG5tYWluc3RheS9NU1xcbm1haW5zdHJlYW0vU01ER1xcbm1haW50YWluL1pHQkRSU1xcbm1haW50YWluYWJpbGl0eVxcbm1haW50YWluYWJsZS9VXFxubWFpbnRhaW5lZC9VXFxubWFpbnRlbmFuY2UvTVxcbm1haW50b3AvU01cXG5tYWlzb25ldHRlL01TXFxubWFpemUvU01cXG5tYWplc3RpY1xcbm1hamVzdGljYWxseVxcbm1hamVzdHkvU01cXG5tYWpvbGljYS9NXFxubWFqb3IvU0dNRFlcXG5tYWpvcmRvbW8vTVNcXG5tYWpvcmV0dGUvTVNcXG5tYWpvcml0YXJpYW4vU01cXG5tYWpvcml0YXJpYW5pc21cXG5tYWpvcml0eS9TTVxcbm1ha2Uncy9BXFxubWFrZS9VQUdTXFxubWFrZW92ZXIvTVNcXG5tYWtlci9TTVxcbm1ha2VzaGlmdC9TTVxcbm1ha2V1cC9NU1xcbm1ha2V3ZWlnaHQvU1xcbm1ha2luZy9NU1xcbm1ha2luZ3MvTVxcbm1hbGFjaGl0ZS9NXFxubWFsYWRqdXN0ZWRcXG5tYWxhZGp1c3RtZW50L01cXG5tYWxhZG1pbmlzdHJhdGlvblxcbm1hbGFkcm9pdC9QWVxcbm1hbGFkcm9pdG5lc3MvTVxcbm1hbGFkeS9TTVxcbm1hbGFpc2UvTVxcbm1hbGFtdXRlL01TXFxubWFsYXByb3Bpc20vU01cXG5tYWxhcmlhL01cXG5tYWxhcmlhbFxcbm1hbGFya2V5L01cXG5tYWxhdGhpb24vTVxcbm1hbGNvbnRlbnQvTVNcXG5tYWxlL01QU1xcbm1hbGVkaWN0aW9uL1NNXFxubWFsZWZhY3Rpb24vTVxcbm1hbGVmYWN0b3IvU01cXG5tYWxlZmljXFxubWFsZWZpY2VuY2UvTVxcbm1hbGVmaWNlbnRcXG5tYWxlbmVzcy9NXFxubWFsZXZvbGVuY2UvTVxcbm1hbGV2b2xlbnQvWVxcbm1hbGZlYXNhbmNlL01cXG5tYWxmb3JtYXRpb24vU01cXG5tYWxmb3JtZWRcXG5tYWxmdW5jdGlvbi9NRFNHXFxubWFsaWNlL01cXG5tYWxpY2lvdXMvUFlcXG5tYWxpY2lvdXNuZXNzL01cXG5tYWxpZ24vRFNHXFxubWFsaWduYW5jeS9TTVxcbm1hbGlnbmFudC9ZXFxubWFsaWduaXR5L01cXG5tYWxpbmdlci9aR1NEUlxcbm1hbGluZ2VyZXIvTVxcbm1hbGwvTVNcXG5tYWxsYXJkL1NNXFxubWFsbGVhYmlsaXR5L01cXG5tYWxsZWFibGVcXG5tYWxsZXQvTVNcXG5tYWxsb3cvTVNcXG5tYWxub3VyaXNoZWRcXG5tYWxudXRyaXRpb24vTVxcbm1hbG9jY2x1c2lvbi9NXFxubWFsb2Rvcm91c1xcbm1hbHByYWN0aWNlL1NNXFxubWFsdC9NRFNHXFxubWFsdGVkL01TXFxubWFsdG9zZS9NXFxubWFsdHJlYXQvR0xEU1xcbm1hbHRyZWF0bWVudC9NXFxubWFsdHkvVFJcXG5tYWx3YXJlL01cXG5tYW0vU1xcbm1hbWEvTVNcXG5tYW1iYS9TTVxcbm1hbWJvL1NHTURcXG5tYW1tYS9NXFxubWFtbWFsL01TXFxubWFtbWFsaWFuL01TXFxubWFtbWFyeVxcbm1hbW1vZ3JhbS9NU1xcbm1hbW1vZ3JhcGh5L01cXG5tYW1tb24vTVxcbm1hbW1vdGgvTVxcbm1hbW1vdGhzXFxubWFtbXkvU01cXG5tYW4ncy9GXFxubWFuL1VTWVxcbm1hbmFjbGUvRFNNR1xcbm1hbmFnZS9aR0RSU0xcXG5tYW5hZ2VhYmlsaXR5L01cXG5tYW5hZ2VhYmxlL1VcXG5tYW5hZ2VtZW50L01TXFxubWFuYWdlci9NXFxubWFuYWdlcmVzcy9TXFxubWFuYWdlcmlhbFxcbm1hbmFuYS9NU1xcbm1hbmF0ZWUvU01cXG5tYW5kYWxhL1NNXFxubWFuZGFtdXMvTVNcXG5tYW5kYXJpbi9NU1xcbm1hbmRhdGUvRFNNR1xcbm1hbmRhdG9yeVxcbm1hbmRpYmxlL01TXFxubWFuZGlidWxhclxcbm1hbmRvbGluL01TXFxubWFuZHJha2UvTVNcXG5tYW5kcmVsL1NNXFxubWFuZHJpbGwvTVNcXG5tYW5lL01EU1xcbm1hbmVnZS9NXFxubWFuZXV2ZXIvTURHU0JKXFxubWFuZXV2ZXJhYmlsaXR5L01cXG5tYW5mdWwvWVxcbm1hbmdhL01cXG5tYW5nYW5lc2UvTVxcbm1hbmdlL0RSTVpcXG5tYW5nZXIvTVxcbm1hbmdldG91dC9TXFxubWFuZ2luZXNzL01cXG5tYW5nbGUvTVpHRFJTXFxubWFuZ28vTVxcbm1hbmdvZXNcXG5tYW5ncm92ZS9NU1xcbm1hbmd5L1RSUFxcbm1hbmhhbmRsZS9HRFNcXG5tYW5ob2xlL1NNXFxubWFuaG9vZC9NXFxubWFuaHVudC9TTVxcbm1hbmlhL1NNXFxubWFuaWFjL01TXFxubWFuaWFjYWwvWVxcbm1hbmljL1NNXFxubWFuaWNhbGx5XFxubWFuaWN1cmUvTUdEU1xcbm1hbmljdXJpc3QvTVNcXG5tYW5pZmVzdC9NRFlTR1xcbm1hbmlmZXN0YXRpb24vU01cXG5tYW5pZmVzdG8vU01cXG5tYW5pZm9sZC9HTURTXFxubWFuaWtpbi9TTVxcbm1hbmlsYS9NXFxubWFuaW9jL01TXFxubWFuaXB1bGFibGVcXG5tYW5pcHVsYXRlL1hHTlZEU1xcbm1hbmlwdWxhdGlvbi9NXFxubWFuaXB1bGF0aXZlL1lcXG5tYW5pcHVsYXRvci9NU1xcbm1hbmtpbmQvTVxcbm1hbmt5XFxubWFubGlrZVxcbm1hbmxpbmVzcy9NXFxubWFubHkvVVRSXFxubWFubmEvTVxcbm1hbm5lZC9VXFxubWFubmVxdWluL1NNXFxubWFubmVyL01EWVNcXG5tYW5uZXJpc20vU01cXG5tYW5uZXJseS9VXFxubWFubmluZy9VXFxubWFubmlzaC9ZUFxcbm1hbm5pc2huZXNzL01cXG5tYW5vbWV0ZXIvU01cXG5tYW5vci9TTVxcbm1hbm9yaWFsXFxubWFucG93ZXIvTVxcbm1hbnF1ZVxcbm1hbnNhcmQvTVNcXG5tYW5zZS9TWE1OXFxubWFuc2VydmFudC9NXFxubWFuc2lvbi9NXFxubWFuc2xhdWdodGVyL01cXG5tYW50YS9TTVxcbm1hbnRlbC9NU1xcbm1hbnRlbHBpZWNlL1NNXFxubWFudGVsc2hlbGZcXG5tYW50ZWxzaGVsdmVzXFxubWFudGVzXFxubWFudGlsbGEvU01cXG5tYW50aXMvTVNcXG5tYW50aXNzYS9TTVxcbm1hbnRsZSdzXFxubWFudGxlL0VHRFNcXG5tYW50cmEvTVNcXG5tYW51YWwvTVlTXFxubWFudWZhY3R1cmUvRFJTTVpHXFxubWFudWZhY3R1cmVyL01cXG5tYW51ZmFjdHVyaW5nL01cXG5tYW51bWlzc2lvbi9TTVxcbm1hbnVtaXQvU1xcbm1hbnVtaXR0ZWRcXG5tYW51bWl0dGluZ1xcbm1hbnVyZS9NR0RTXFxubWFudXNjcmlwdC9NU1xcbm1hbnkvTVxcbm1hcCdzXFxubWFwL0FTXFxubWFwbGUvU01cXG5tYXBtYWtlci9TTVxcbm1hcHBlZC9BXFxubWFwcGVyL01TXFxubWFwcGluZy9TXFxubWFyL1NcXG5tYXJhYm91L01TXFxubWFyYWJvdXQvU01cXG5tYXJhY2EvTVNcXG5tYXJhc2NoaW5vL01TXFxubWFyYXRob24vU01SWlxcbm1hcmF0aG9uZXIvTVxcbm1hcmF1ZC9aR0RSU1xcbm1hcmF1ZGVyL01cXG5tYXJibGUvTUdEU1xcbm1hcmJsZWl6ZS9HRFNcXG5tYXJibGluZy9NXFxubWFyY2gvWkdNRFJTXFxubWFyY2hlci9NXFxubWFyY2hpb25lc3MvTVNcXG5tYXJlL01TXFxubWFyZ2FyaW5lL01cXG5tYXJnYXJpdGEvTVNcXG5tYXJnZVxcbm1hcmdpbi9NU1xcbm1hcmdpbmFsL1lTXFxubWFyZ2luYWxpYS9NXFxubWFyZ2luYWxpemF0aW9uL01cXG5tYXJnaW5hbGl6ZS9HRFNcXG5tYXJpYS9NXFxubWFyaWFjaGkvTVNcXG5tYXJpZ29sZC9NU1xcbm1hcmlqdWFuYS9NXFxubWFyaW1iYS9TTVxcbm1hcmluYS9NU1xcbm1hcmluYWRlL0RTTUdcXG5tYXJpbmFyYS9NXFxubWFyaW5hdGUvRFNHTlxcbm1hcmluYXRpb24vTVxcbm1hcmluZS9NWlJTXFxubWFyaW5lci9NXFxubWFyaW9uZXR0ZS9NU1xcbm1hcml0YWwvWVxcbm1hcml0aW1lXFxubWFyam9yYW0vTVxcbm1hcmsvQU1EU0dcXG5tYXJrZG93bi9TTVxcbm1hcmtlZC9VXFxubWFya2VkbHlcXG5tYXJrZXIvTVNcXG5tYXJrZXQvTURSWkdCU1xcbm1hcmtldGFiaWxpdHkvTVxcbm1hcmtldGFibGUvVVxcbm1hcmtldGVlci9TTVxcbm1hcmtldGVyL01cXG5tYXJrZXRpbmcvTVxcbm1hcmtldHBsYWNlL1NNXFxubWFya2luZy9TTVxcbm1hcmtrYS9NXFxubWFya2thYVxcbm1hcmtzbWFuL01cXG5tYXJrc21hbnNoaXAvTVxcbm1hcmtzbWVuXFxubWFya3VwL01TXFxubWFybC9NXFxubWFybGluL01TXFxubWFybGluZXNwaWtlL1NNXFxubWFybWFsYWRlL01cXG5tYXJtb3JlYWxcXG5tYXJtb3NldC9TTVxcbm1hcm1vdC9NU1xcbm1hcm9vbi9NREdTXFxubWFycXVlL01TXFxubWFycXVlZS9TTVxcbm1hcnF1ZXNzL01TXFxubWFycXVldHJ5L01cXG5tYXJxdWlzL01TXFxubWFycXVpc2UvTVxcbm1hcnF1aXNldHRlL01cXG5tYXJyZWQvVVxcbm1hcnJpYWdlL0FTTVxcbm1hcnJpYWdlYWJpbGl0eS9NXFxubWFycmlhZ2VhYmxlXFxubWFycmllZC9TTVxcbm1hcnJpbmdcXG5tYXJyb3cvTVNcXG5tYXJyeS9BR0RTXFxubWFyc2gvTVNcXG5tYXJzaGFsL1NNREdcXG5tYXJzaGxhbmQvU01cXG5tYXJzaG1hbGxvdy9TTVxcbm1hcnNoeS9SVFxcbm1hcnN1cGlhbC9NU1xcbm1hcnQvTU5TWFxcbm1hcnRlbi9NXFxubWFydGVuc2l0ZVxcbm1hcnRpYWwvWVxcbm1hcnRpYW4vU1xcbm1hcnRpbi9NU1xcbm1hcnRpbmV0L01TXFxubWFydGluZ2FsZS9NU1xcbm1hcnRpbmkvU01cXG5tYXJ0eXIvTURHU1xcbm1hcnR5cmRvbS9NXFxubWFydmVsL01ER1NcXG5tYXJ2ZWxvdXMvWVxcbm1hcnppcGFuL01cXG5tYXNjXFxubWFzY2FyYS9HTURTXFxubWFzY290L01TXFxubWFzY3VsaW5lL1NNXFxubWFzY3VsaW5pdHkvTVxcbm1hc2VyL1NNXFxubWFzaC9NRFJTWkdcXG5tYXNoZXIvTVxcbm1hc2h1cC9NU1xcbm1hc2snc1xcbm1hc2svVURTR1xcbm1hc2tlci9NU1xcbm1hc29jaGlzbS9NXFxubWFzb2NoaXN0L1NNXFxubWFzb2NoaXN0aWNcXG5tYXNvY2hpc3RpY2FsbHlcXG5tYXNvbi9TTVxcbm1hc29uaWNcXG5tYXNvbnJ5L01cXG5tYXNxdWUvTVNcXG5tYXNxdWVyYWRlL0RSU01aR1xcbm1hc3F1ZXJhZGVyL01cXG5tYXNzL01EU0dWXFxubWFzc2FjcmUvTUdEU1xcbm1hc3NhZ2UvRFNNR1xcbm1hc3NldXIvU01cXG5tYXNzZXVzZS9NU1xcbm1hc3NpZi9NU1xcbm1hc3NpdmUvUFlcXG5tYXNzaXZlbmVzcy9NXFxubWFzdC9NRFNcXG5tYXN0ZWN0b215L1NNXFxubWFzdGVyJ3NcXG5tYXN0ZXIvQURHU1xcbm1hc3RlcmNsYXNzL1NcXG5tYXN0ZXJmdWwvWVxcbm1hc3Rlcmx5XFxubWFzdGVybWluZC9TR01EXFxubWFzdGVycGllY2UvTVNcXG5tYXN0ZXJzdHJva2UvU01cXG5tYXN0ZXJ3b3JrL01TXFxubWFzdGVyeS9NXFxubWFzdGhlYWQvTVNcXG5tYXN0aWMvTVxcbm1hc3RpY2F0ZS9HTkRTXFxubWFzdGljYXRpb24vTVxcbm1hc3RpZmYvU01cXG5tYXN0aXRpc1xcbm1hc3RvZG9uL1NNXFxubWFzdG9pZC9TTVxcbm1hc3R1cmJhdGUvR05EU1xcbm1hc3R1cmJhdGlvbi9NXFxubWFzdHVyYmF0b3J5XFxubWF0L1NaR01EUlxcbm1hdGFkb3IvU01cXG5tYXRjaC9BTVNcXG5tYXRjaGJvb2svU01cXG5tYXRjaGJveC9NU1xcbm1hdGNoZWQvVVxcbm1hdGNoaW5nXFxubWF0Y2hsZXNzXFxubWF0Y2hsb2NrL1NNXFxubWF0Y2htYWtlci9NU1xcbm1hdGNobWFraW5nL01cXG5tYXRjaHN0aWNrL01TXFxubWF0Y2h3b29kL01cXG5tYXRlL01TXFxubWF0ZXJpYWwvU01ZXFxubWF0ZXJpYWxpc20vTVxcbm1hdGVyaWFsaXN0L1NNXFxubWF0ZXJpYWxpc3RpY1xcbm1hdGVyaWFsaXN0aWNhbGx5XFxubWF0ZXJpYWxpemF0aW9uL01cXG5tYXRlcmlhbGl6ZS9EU0dcXG5tYXRlcmllbC9NXFxubWF0ZXJuYWwvWVxcbm1hdGVybml0eS9NXFxubWF0ZXkvU1xcbm1hdGhlbWF0aWNhbC9ZXFxubWF0aGVtYXRpY2lhbi9TTVxcbm1hdGhlbWF0aWNzL01cXG5tYXRpbmVlL1NNXFxubWF0aW5nL01cXG5tYXRpbnMvTVxcbm1hdHJpYXJjaC9NXFxubWF0cmlhcmNoYWxcXG5tYXRyaWFyY2hzXFxubWF0cmlhcmNoeS9TTVxcbm1hdHJpY2VzXFxubWF0cmljaWRhbFxcbm1hdHJpY2lkZS9NU1xcbm1hdHJpY3VsYXRlL0RTR05cXG5tYXRyaWN1bGF0aW9uL01cXG5tYXRyaW1vbmlhbFxcbm1hdHJpbW9ueS9NXFxubWF0cml4L01cXG5tYXRyb24vTVlTXFxubWF0dGUvRFJTTVpHXFxubWF0dGVyL01ER1xcbm1hdHRpbmcvTVxcbm1hdHRvY2svU01cXG5tYXR0cmVzcy9NU1xcbm1hdHVyYXRlL0dORFNcXG5tYXR1cmF0aW9uL01cXG5tYXR1cmUvWVRHRFJTXFxubWF0dXJpdHkvU01cXG5tYXR6by9TTUhcXG5tYXR6b2gvTVxcbm1hdHpvaHNcXG5tYXR6b3RcXG5tYXVkbGluXFxubWF1bC9NRFJTWkdcXG5tYXVsZXIvTVxcbm1hdW5kZXIvU0RHXFxubWF1c29sZXVtL1NNXFxubWF1dmUvTVxcbm1hdmVuL1NNXFxubWF2ZXJpY2svU01cXG5tYXcvU01cXG5tYXdraXNoL1BZXFxubWF3a2lzaG5lc3MvTVxcbm1heC9HTURTXFxubWF4aS9NU1xcbm1heGlsbGEvTVxcbm1heGlsbGFlXFxubWF4aWxsYXJ5XFxubWF4aW0vU01cXG5tYXhpbWFcXG5tYXhpbWFsL1lcXG5tYXhpbWl6YXRpb24vTVxcbm1heGltaXplL0dEU1xcbm1heGltdW0vU01cXG5tYXkvTVxcbm1heWJlL1NNXFxubWF5ZGF5L01TXFxubWF5Zmxvd2VyL01TXFxubWF5Zmx5L1NNXFxubWF5aGVtL01cXG5tYXluJ3RcXG5tYXlvL01cXG5tYXlvbm5haXNlL01cXG5tYXlvci9TTVxcbm1heW9yYWxcXG5tYXlvcmFsdHkvTVxcbm1heW9yZXNzL01TXFxubWF5cG9sZS9TTVxcbm1heXN0XFxubWF6ZS9NU1xcbm1henVya2EvTVNcXG5tZHNlXFxubWUvRFNIXFxubWVhZC9NXFxubWVhZG93L01TXFxubWVhZG93bGFyay9NU1xcbm1lYWdlci9QWVxcbm1lYWdlcm5lc3MvTVxcbm1lYWwvTVNcXG5tZWFsaW5lc3MvTVxcbm1lYWx0aW1lL1NNXFxubWVhbHkvVFBSXFxubWVhbHlidWcvU01cXG5tZWFseW1vdXRoZWRcXG5tZWFuL01SWUpQU1RHXFxubWVhbmRlci9TTURKR1xcbm1lYW5kZXJpbmdzL01cXG5tZWFuaWUvTVxcbm1lYW5pbmcvTVxcbm1lYW5pbmdmdWwvUFlcXG5tZWFuaW5nZnVsbmVzcy9NXFxubWVhbmluZ2xlc3MvWVBcXG5tZWFuaW5nbGVzc25lc3MvTVxcbm1lYW5uZXNzL01cXG5tZWFudC9VXFxubWVhbnRpbWUvTVxcbm1lYW53aGlsZS9NXFxubWVhbnkvU01cXG5tZWFzXFxubWVhc2xlcy9NXFxubWVhc2x5L1JUXFxubWVhc3VyYWJsZVxcbm1lYXN1cmFibHlcXG5tZWFzdXJlJ3NcXG5tZWFzdXJlL0FEU0dcXG5tZWFzdXJlZC9VXFxubWVhc3VyZWxlc3NcXG5tZWFzdXJlbWVudC9NU1xcbm1lYXQvTVNcXG5tZWF0YmFsbC9NU1xcbm1lYXRoZWFkL01TXFxubWVhdGluZXNzL01cXG5tZWF0bGVzc1xcbm1lYXRsb2FmL01cXG5tZWF0bG9hdmVzXFxubWVhdHBhY2tpbmcvTVxcbm1lYXR5L1RQUlxcbm1lY2NhL1NNXFxubWVjaGFuaWMvTVNcXG5tZWNoYW5pY2FsL1lcXG5tZWNoYW5pY3MvTVxcbm1lY2hhbmlzbS9TTVxcbm1lY2hhbmlzdGljXFxubWVjaGFuaXN0aWNhbGx5XFxubWVjaGFuaXphdGlvbi9NXFxubWVjaGFuaXplL0RTR1xcbm1lZGFsL1NNXFxubWVkYWxpc3QvTVNcXG5tZWRhbGxpb24vU01cXG5tZWRkbGUvWkdEUlNcXG5tZWRkbGVyL01cXG5tZWRkbGVzb21lXFxubWVkaWEvU01cXG5tZWRpYWwvQVlcXG5tZWRpYW4vTVNcXG5tZWRpYXRlL0FEU0dOXFxubWVkaWF0ZWQvVVxcbm1lZGlhdGlvbi9BTVxcbm1lZGlhdG9yL01TXFxubWVkaWMvU01cXG5tZWRpY2FpZC9NXFxubWVkaWNhbC9TTVlcXG5tZWRpY2FtZW50L01cXG5tZWRpY2FyZS9NXFxubWVkaWNhdGUvR05YRFNcXG5tZWRpY2F0aW9uL01cXG5tZWRpY2luYWwvWVxcbm1lZGljaW5lL01TXFxubWVkaWNvL01TXFxubWVkaWV2YWxcXG5tZWRpZXZhbGlzdC9NU1xcbm1lZGlvY3JlXFxubWVkaW9jcml0eS9TTVxcbm1lZGl0YXRlL0RTR05WWFxcbm1lZGl0YXRpb24vTVxcbm1lZGl0YXRpdmUvWVxcbm1lZGl1bS9NU1xcbm1lZGxleS9NU1xcbm1lZHVsbGEvU01cXG5tZWR1c2FcXG5tZWR1c2FlXFxubWVlZC9NXFxubWVlay9SWVBUXFxubWVla25lc3MvTVxcbm1lZXJzY2hhdW0vU01cXG5tZWV0L01KU0dcXG5tZWV0aW5nL01cXG5tZWV0aW5naG91c2UvU01cXG5tZWV0dXAvTVNcXG5tZWcvU1xcbm1lZ2FcXG5tZWdhYml0L1NNXFxubWVnYWJ1Y2tzL01cXG5tZWdhYnl0ZS9NU1xcbm1lZ2FjaHVyY2gvTVNcXG5tZWdhY3ljbGUvU01cXG5tZWdhZGVhdGgvTVxcbm1lZ2FkZWF0aHNcXG5tZWdhZ3JhbS9TXFxubWVnYWhlcnR6L01cXG5tZWdham91bGUvU1xcbm1lZ2FsaXRoL01cXG5tZWdhbGl0aGljXFxubWVnYWxpdGhzXFxubWVnYWxvbWFuaWEvTVxcbm1lZ2Fsb21hbmlhYy9TTVxcbm1lZ2Fsb3BvbGlzL01TXFxubWVnYW1ldGVyL1NcXG5tZWdhcGFzY2FsL1NcXG5tZWdhcGhvbmUvRFNNR1xcbm1lZ2FwaXhlbC9TTVxcbm1lZ2FzdGFyL1NcXG5tZWdhdG9uL1NNXFxubWVnYXdhdHQvTVNcXG5tZWhcXG5tZWlvc2lzL01cXG5tZWlvdGljXFxubWVsYW1pbmUvTVxcbm1lbGFuY2hvbGlhL01cXG5tZWxhbmNob2xpYy9TXFxubWVsYW5jaG9seS9NXFxubWVsYW5nZS9NU1xcbm1lbGFuaW4vTVxcbm1lbGFub21hL1NNXFxubWVsZC9NRFNHXFxubWVsZWUvU01cXG5tZWxpb3JhdGUvR05WRFNcXG5tZWxpb3JhdGlvbi9NXFxubWVsbGlmbHVvdXMvUFlcXG5tZWxsaWZsdW91c25lc3MvTVxcbm1lbGxvdy9QVEdEUllTXFxubWVsbG93bmVzcy9NXFxubWVsb2RpY1xcbm1lbG9kaWNhbGx5XFxubWVsb2Rpb3VzL1lQXFxubWVsb2Rpb3VzbmVzcy9NXFxubWVsb2RyYW1hL01TXFxubWVsb2RyYW1hdGljL1NcXG5tZWxvZHJhbWF0aWNhbGx5XFxubWVsb2RyYW1hdGljcy9NXFxubWVsb2R5L1NNXFxubWVsb24vU01cXG5tZWx0J3NcXG5tZWx0L0FEU0dcXG5tZWx0ZG93bi9TTVxcbm1lbWJlcidzXFxubWVtYmVyL0VBU1xcbm1lbWJlcnNoaXAvU01cXG5tZW1icmFuZS9TTVxcbm1lbWJyYW5vdXNcXG5tZW1lL01TXFxubWVtZW50by9NU1xcbm1lbW8vTVNcXG5tZW1vaXIvTVNcXG5tZW1vcmFiaWxpYS9NXFxubWVtb3JhYmlsaXR5L01cXG5tZW1vcmFibGUvVVxcbm1lbW9yYWJseVxcbm1lbW9yYW5kdW0vTVNcXG5tZW1vcmlhbC9TTVxcbm1lbW9yaWFsaXplL0RTR1xcbm1lbW9yaXphdGlvbi9NXFxubWVtb3JpemUvRFNHXFxubWVtb3J5L1NNXFxubWVtc2FoaWIvU1xcbm1lbi9NXFxubWVuYWNlL01HRFNcXG5tZW5hY2luZy9ZXFxubWVuYWdlL01TXFxubWVuYWdlcmllL01TXFxubWVuZC9NRFJTWkdcXG5tZW5kYWNpb3VzL1lcXG5tZW5kYWNpdHkvTVxcbm1lbmRlbGV2aXVtL01cXG5tZW5kZXIvTVxcbm1lbmRpY2FuY3kvTVxcbm1lbmRpY2FudC9TTVxcbm1lbmRpbmcvTVxcbm1lbmZvbGsvTVNcXG5tZW5mb2xrcy9NXFxubWVuaGFkZW4vTVxcbm1lbmlhbC9NWVNcXG5tZW5pbmdlYWxcXG5tZW5pbmdlc1xcbm1lbmluZ2l0aXMvTVxcbm1lbmlueC9NXFxubWVuaXNjaVxcbm1lbmlzY3VzL01cXG5tZW5vcGF1c2FsXFxubWVub3BhdXNlL01cXG5tZW5vcmFoL01cXG5tZW5vcmFoc1xcbm1lbnNjaC9NU1xcbm1lbnNlcnZhbnRzXFxubWVuc2VzL01cXG5tZW5zdHJ1YWxcXG5tZW5zdHJ1YXRlL0dORFNcXG5tZW5zdHJ1YXRpb24vTVxcbm1lbnN1cmFibGVcXG5tZW5zdXJhdGlvbi9NXFxubWVuc3dlYXIvTVxcbm1lbnRhbC9ZXFxubWVudGFsaXN0L1NNXFxubWVudGFsaXR5L1NNXFxubWVudGhvbC9NXFxubWVudGhvbGF0ZWRcXG5tZW50aW9uL0dTTURcXG5tZW50aW9uZWQvVVxcbm1lbnRvci9NRFNHXFxubWVudG9yc2hpcFxcbm1lbnUvTVNcXG5tZW93L01EU0dcXG5tZXJjYW50aWxlXFxubWVyY2FudGlsaXNtL01cXG5tZXJjZW5hcnkvU01cXG5tZXJjZXIvTVNcXG5tZXJjZXJpemUvR0RTXFxubWVyY2hhbmRpc2UvTVpHRFJTXFxubWVyY2hhbmRpc2VyL01cXG5tZXJjaGFuZGlzaW5nL01cXG5tZXJjaGFudC9NQlNcXG5tZXJjaGFudG1hbi9NXFxubWVyY2hhbnRtZW5cXG5tZXJjaWZ1bC9VWVxcbm1lcmNpbGVzcy9QWVxcbm1lcmNpbGVzc25lc3MvTVxcbm1lcmN1cmlhbC9ZXFxubWVyY3VyaWNcXG5tZXJjdXJ5L01cXG5tZXJjeS9TTVxcbm1lcmUvTVlUU1xcbm1lcmV0cmljaW91cy9ZUFxcbm1lcmV0cmljaW91c25lc3MvTVxcbm1lcmdhbnNlci9NU1xcbm1lcmdlL0RSU1pHXFxubWVyZ2VyL01cXG5tZXJpZGlhbi9NU1xcbm1lcmluZ3VlL01TXFxubWVyaW5vL01TXFxubWVyaXQvQ1NNXFxubWVyaXRlZC9VXFxubWVyaXRpbmdcXG5tZXJpdGxlc3NcXG5tZXJpdG9jcmFjeS9TTVxcbm1lcml0b2NyYXRpY1xcbm1lcml0b3Jpb3VzL1BZXFxubWVyaXRvcmlvdXNuZXNzL01cXG5tZXJtYWlkL1NNXFxubWVybWFuL01cXG5tZXJtZW5cXG5tZXJyaWx5XFxubWVycmltZW50L01cXG5tZXJyaW5lc3MvTVxcbm1lcnJ5L1RSUFxcbm1lcnJ5bWFrZXIvTVNcXG5tZXJyeW1ha2luZy9NXFxubWVzYS9NU1xcbm1lc2NhbC9NU1xcbm1lc2NhbGluXFxubWVzY2FsaW5lL01cXG5tZXNkYW1lc1xcbm1lc2RlbW9pc2VsbGVzXFxubWVzaC9NRFNHXFxubWVzbWVyaWNcXG5tZXNtZXJpc20vTVxcbm1lc21lcml6ZS9aR0RSU1xcbm1lc21lcml6ZXIvTVxcbm1lc29tb3JwaC9NXFxubWVzb21vcnBoc1xcbm1lc29uL1NNXFxubWVzb3NwaGVyZS9TTVxcbm1lc3F1aXRlL1NNXFxubWVzcy9NRFNHXFxubWVzc2FnZS9NR0RTXFxubWVzc2VpZ25ldXJzXFxubWVzc2VuZ2VyL1NNXFxubWVzc2lhaC9NXFxubWVzc2lhaHNcXG5tZXNzaWFuaWNcXG5tZXNzaWV1cnNcXG5tZXNzaWx5XFxubWVzc2luZXNzL01cXG5tZXNzbWF0ZS9TTVxcbm1lc3N5L1BUUlxcbm1lc3Rpem8vTVNcXG5tZXRcXG5tZXRhXFxubWV0YWJvbGljXFxubWV0YWJvbGljYWxseVxcbm1ldGFib2xpc20vU01cXG5tZXRhYm9saXRlL1NNXFxubWV0YWJvbGl6ZS9EU0dcXG5tZXRhY2FycGFsL1NNXFxubWV0YWNhcnBpXFxubWV0YWNhcnB1cy9NXFxubWV0YWRhdGFcXG5tZXRhbC9TTURcXG5tZXRhbGFuZ3VhZ2UvTVNcXG5tZXRhbGxpY1xcbm1ldGFsbHVyZ2ljXFxubWV0YWxsdXJnaWNhbFxcbm1ldGFsbHVyZ2lzdC9NU1xcbm1ldGFsbHVyZ3kvTVxcbm1ldGFsd29yay9NUlpHXFxubWV0YWx3b3JrZXIvTVxcbm1ldGFsd29ya2luZy9NXFxubWV0YW1vcnBoaWNcXG5tZXRhbW9ycGhpc20vTVxcbm1ldGFtb3JwaG9zZS9HRFNcXG5tZXRhbW9ycGhvc2lzL01cXG5tZXRhcGhvci9NU1xcbm1ldGFwaG9yaWNcXG5tZXRhcGhvcmljYWwvWVxcbm1ldGFwaHlzaWNhbC9ZXFxubWV0YXBoeXNpY3MvTVxcbm1ldGFzdGFzZXNcXG5tZXRhc3Rhc2lzL01cXG5tZXRhc3Rhc2l6ZS9EU0dcXG5tZXRhc3RhdGljXFxubWV0YXRhcnNhbC9NU1xcbm1ldGF0YXJzaVxcbm1ldGF0YXJzdXMvTVxcbm1ldGF0aGVzZXNcXG5tZXRhdGhlc2lzL01cXG5tZXRlL01aR0RSU1xcbm1ldGVtcHN5Y2hvc2VzXFxubWV0ZW1wc3ljaG9zaXMvTVxcbm1ldGVvci9NU1xcbm1ldGVvcmljXFxubWV0ZW9yaWNhbGx5XFxubWV0ZW9yaXRlL1NNXFxubWV0ZW9yb2lkL1NNXFxubWV0ZW9yb2xvZ2ljXFxubWV0ZW9yb2xvZ2ljYWxcXG5tZXRlb3JvbG9naXN0L1NNXFxubWV0ZW9yb2xvZ3kvTVxcbm1ldGVyL0dNRFxcbm1ldGZvcm1pblxcbm1ldGhhZG9uZS9NXFxubWV0aGFtcGhldGFtaW5lL01cXG5tZXRoYW5lL01cXG5tZXRoYW5vbC9NXFxubWV0aGlua3NcXG5tZXRob2QvTVNcXG5tZXRob2RpY2FsL1lQXFxubWV0aG9kaWNhbG5lc3MvTVxcbm1ldGhvZG9sb2dpY2FsL1lcXG5tZXRob2RvbG9neS9TTVxcbm1ldGhvdHJleGF0ZVxcbm1ldGhvdWdodFxcbm1ldGhzXFxubWV0aHlsL01cXG5tZXRpY3Vsb3VzL1lQXFxubWV0aWN1bG91c25lc3MvTVxcbm1ldGllci9NU1xcbm1ldHJpYy9TXFxubWV0cmljYWwvWVxcbm1ldHJpY2F0ZS9HTkRTXFxubWV0cmljYXRpb24vTVxcbm1ldHJpY2l6ZS9HRFNcXG5tZXRyby9TTVxcbm1ldHJvbm9tZS9NU1xcbm1ldHJvcG9saXMvTVNcXG5tZXRyb3BvbGl0YW5cXG5tZXR0bGUvTVxcbm1ldHRsZXNvbWVcXG5tZXcvU0dNRFxcbm1ld2wvRFNHXFxubWV3cy9NXFxubWV6emFuaW5lL01TXFxubWV6em8vU01cXG5tZmdcXG5tZnIvU1xcbm1nXFxubWdyXFxubWkvTU5YXFxubWlhc21hL01TXFxubWljL1NcXG5taWNhL01cXG5taWNlXFxubWljay9TXFxubWlja2V5L01TXFxubWljcm8vU01cXG5taWNyb2FnZ3Jlc3Npb24vU01cXG5taWNyb2JlL01TXFxubWljcm9iaWFsXFxubWljcm9iaW9sb2dpY2FsXFxubWljcm9iaW9sb2dpc3QvTVNcXG5taWNyb2Jpb2xvZ3kvTVxcbm1pY3JvYnJld2VyeS9TTVxcbm1pY3JvY2hpcC9NU1xcbm1pY3JvY2lyY3VpdC9TTVxcbm1pY3JvY29kZVxcbm1pY3JvY29tcHV0ZXIvTVNcXG5taWNyb2Nvc20vTVNcXG5taWNyb2Nvc21pY1xcbm1pY3JvZG90L1NNXFxubWljcm9lY29ub21pY3MvTVxcbm1pY3JvZWxlY3Ryb25pYy9TXFxubWljcm9lbGVjdHJvbmljcy9NXFxubWljcm9maWJlci9NU1xcbm1pY3JvZmljaGUvTVxcbm1pY3JvZmlsbS9HTURTXFxubWljcm9maW5hbmNlXFxubWljcm9mbG9wcGllc1xcbm1pY3JvZ3Jvb3ZlL1NNXFxubWljcm9saWdodC9NU1xcbm1pY3JvbG9hbi9NU1xcbm1pY3JvbWFuYWdlL1pHRFJTTFxcbm1pY3JvbWFuYWdlbWVudC9NXFxubWljcm9tYW5hZ2VyL01cXG5taWNyb21ldGVvcml0ZS9TTVxcbm1pY3JvbWV0ZXIvTVNcXG5taWNyb24vTVNcXG5taWNyb29yZ2FuaXNtL01TXFxubWljcm9waG9uZS9TTVxcbm1pY3JvcGxhc3RpY3NcXG5taWNyb3Byb2Nlc3Nvci9NU1xcbm1pY3Jvc2NvcGUvU01cXG5taWNyb3Njb3BpY1xcbm1pY3Jvc2NvcGljYWwvWVxcbm1pY3Jvc2NvcHkvTVxcbm1pY3Jvc2Vjb25kL01TXFxubWljcm9zdXJnZXJ5L01cXG5taWNyb3dhdmUvRFNNR0JcXG5taWNyb3dhdmVhYmxlXFxubWlkXFxubWlkYWlyL01cXG5taWRkYXkvTVxcbm1pZGRlbi9NU1xcbm1pZGRsZS9NR1NcXG5taWRkbGVicm93L1NNXFxubWlkZGxlbWFuL01cXG5taWRkbGVtZW5cXG5taWRkbGVtb3N0XFxubWlkZGxld2VpZ2h0L01TXFxubWlkZHkvU01cXG5taWRmaWVsZC9SWlxcbm1pZGdlL1NNXFxubWlkZ2V0L01TXFxubWlkaS9NU1xcbm1pZGxhbmQvTVNcXG5taWRsaWZlL01cXG5taWRtb3N0XFxubWlkbmlnaHQvTVxcbm1pZHBvaW50L01TXFxubWlkcmliL01TXFxubWlkcmlmZi9NU1xcbm1pZHNlY3Rpb24vTVNcXG5taWRzaGlwbWFuL01cXG5taWRzaGlwbWVuXFxubWlkc2hpcHNcXG5taWRzaXplXFxubWlkc3QvTVxcbm1pZHN0cmVhbS9NXFxubWlkc3VtbWVyL01cXG5taWR0ZXJtL01TXFxubWlkdG93bi9NXFxubWlkd2F5L01TXFxubWlkd2Vlay9NU1xcbm1pZHdpZmUvTUdEU1xcbm1pZHdpZmVyeS9TTVxcbm1pZHdpbnRlci9NXFxubWlkd2l2ZXNcXG5taWR5ZWFyL01TXFxubWllbi9NXFxubWlmZi9EU0dcXG5taWdodCd2ZVxcbm1pZ2h0L01cXG5taWdodGlseVxcbm1pZ2h0aW5lc3MvTVxcbm1pZ2h0bid0XFxubWlnaHR5L1RSUFxcbm1pZ25vbmV0dGUvU01cXG5taWdyYWluZS9NU1xcbm1pZ3JhbnQvTVNcXG5taWdyYXRlL0FHRFNcXG5taWdyYXRpb24vU01cXG5taWdyYXRvcnlcXG5taWthZG8vTVNcXG5taWtlL01HRFNcXG5taWwvU1pNUlxcbm1pbGFkeS9TTVxcbm1pbGNoXFxubWlsZC9NUllUUFxcbm1pbGRldy9TTURHXFxubWlsZG5lc3MvTVxcbm1pbGUvTVNcXG5taWxlYWdlL1NNXFxubWlsZXBvc3QvTVNcXG5taWxlci9NXFxubWlsZXN0b25lL01TXFxubWlsZi9NU1xcbm1pbGlldS9TTVxcbm1pbGl0YW5jeS9NXFxubWlsaXRhbnQvTVlTXFxubWlsaXRhcmlseVxcbm1pbGl0YXJpc20vTVxcbm1pbGl0YXJpc3QvU01cXG5taWxpdGFyaXN0aWNcXG5taWxpdGFyaXphdGlvbi9DTVxcbm1pbGl0YXJpemUvQ0RTR1xcbm1pbGl0YXJ5L01cXG5taWxpdGF0ZS9HRFNcXG5taWxpdGlhL1NNXFxubWlsaXRpYW1hbi9NXFxubWlsaXRpYW1lblxcbm1pbGsvTURSU1pHXFxubWlsa2VyL01cXG5taWxraW5lc3MvTVxcbm1pbGttYWlkL01TXFxubWlsa21hbi9NXFxubWlsa21lblxcbm1pbGtzaGFrZS9TTVxcbm1pbGtzb3AvTVNcXG5taWxrd2VlZC9TTVxcbm1pbGt5L1JUUFxcbm1pbGwvTURSU1pHSlxcbm1pbGxhZ2UvTVxcbm1pbGxlbm5pYVxcbm1pbGxlbm5pYWwvTVxcbm1pbGxlbm5pdW0vTVNcXG5taWxsZXIvTVxcbm1pbGxldC9NXFxubWlsbGlhcmQvTVNcXG5taWxsaWJhci9NU1xcbm1pbGxpZ3JhbS9NU1xcbm1pbGxpbGl0ZXIvTVNcXG5taWxsaW1ldGVyL01TXFxubWlsbGluZXIvTVNcXG5taWxsaW5lcnkvTVxcbm1pbGxpbmcvTVxcbm1pbGxpb24vSFNNXFxubWlsbGlvbmFpcmUvU01cXG5taWxsaW9uYWlyZXNzL1NcXG5taWxsaW9udGgvTVxcbm1pbGxpb250aHNcXG5taWxsaXBlZGUvU01cXG5taWxsaXNlY29uZC9TTVxcbm1pbGxwb25kL1NNXFxubWlsbHJhY2UvU01cXG5taWxsc3RvbmUvU01cXG5taWxsc3RyZWFtL01TXFxubWlsbHdyaWdodC9TTVxcbm1pbG9tZXRlci9TXFxubWlscXVldG9hc3QvU01cXG5taWx0L01EU0dcXG5taW1lL01HRFNcXG5taW1lb2dyYXBoL0dNRFxcbm1pbWVvZ3JhcGhzXFxubWltZXRpY1xcbm1pbWljL1NNXFxubWltaWNrZWRcXG5taW1pY2tlci9TTVxcbm1pbWlja2luZ1xcbm1pbWljcnkvU01cXG5taW1vc2EvU01cXG5taW5cXG5taW5hcmV0L01TXFxubWluYXRvcnlcXG5taW5jZS9EUlNNWkdcXG5taW5jZW1lYXQvTVxcbm1pbmNlci9NXFxubWluZCdzXFxubWluZC9BRFJTWkdcXG5taW5kYm9nZ2xpbmdseVxcbm1pbmRlZC9QXFxubWluZGZ1bC9ZUFxcbm1pbmRmdWxuZXNzL01cXG5taW5kbGVzcy9ZUFxcbm1pbmRsZXNzbmVzcy9NXFxubWluZHNldC9NU1xcbm1pbmUvTVpHTkRSU1hcXG5taW5lZmllbGQvU01cXG5taW5lci9NXFxubWluZXJhbC9NU1xcbm1pbmVyYWxvZ2ljYWxcXG5taW5lcmFsb2dpc3QvTVNcXG5taW5lcmFsb2d5L01cXG5taW5lc3Ryb25lL01cXG5taW5lc3dlZXBlci9TTVxcbm1pbmdsZS9EU0dcXG5taW5neVxcbm1pbmkvTVNcXG5taW5pYXR1cmUvTVNcXG5taW5pYXR1cmlzdC9NU1xcbm1pbmlhdHVyaXphdGlvbi9NXFxubWluaWF0dXJpemUvR0RTXFxubWluaWJhci9TXFxubWluaWJpa2UvU01cXG5taW5pYnVzL01TXFxubWluaWNhYi9TXFxubWluaWNhbS9NU1xcbm1pbmljb21wdXRlci9TTVxcbm1pbmlmbG9wcGllc1xcbm1pbmltL1NNXFxubWluaW1hXFxubWluaW1hbC9ZXFxubWluaW1hbGlzbS9NXFxubWluaW1hbGlzdC9NU1xcbm1pbmltaXphdGlvbi9NXFxubWluaW1pemUvRFNHXFxubWluaW11bS9NU1xcbm1pbmluZy9NXFxubWluaW9uL01cXG5taW5pc2VyaWVzL01cXG5taW5pc2tpcnQvTVNcXG5taW5pc3Rlci9TR01EXFxubWluaXN0ZXJpYWxcXG5taW5pc3RyYW50L01TXFxubWluaXN0cmF0aW9uL01TXFxubWluaXN0cnkvU01cXG5taW5pdmFuL01TXFxubWluay9NU1xcbm1pbm5lc2luZ2VyL01TXFxubWlubm93L1NNXFxubWlub3IvU01ER1xcbm1pbm9yaXR5L1NNXFxubWlub3hpZGlsL01cXG5taW5zdGVyL01TXFxubWluc3RyZWwvU01cXG5taW5zdHJlbHN5L01cXG5taW50L01EUlNaR1xcbm1pbnRhZ2UvTVxcbm1pbnRlci9NXFxubWludHkvUlRcXG5taW51ZW5kL01TXFxubWludWV0L1NNXFxubWludXMvTVNcXG5taW51c2N1bGUvTVNcXG5taW51dGUvUERSU01ZVEdcXG5taW51dGVtYW4vTVxcbm1pbnV0ZW1lblxcbm1pbnV0ZW5lc3MvTVxcbm1pbnV0aWEvTVxcbm1pbnV0aWFlXFxubWlueC9NU1xcbm1pcmFjbGUvTVNcXG5taXJhY3Vsb3VzL1lcXG5taXJhZ2UvU01cXG5taXJlL01HRFNcXG5taXJyb3IvR1NNRFxcbm1pcnRoL01cXG5taXJ0aGZ1bC9QWVxcbm1pcnRoZnVsbmVzcy9NXFxubWlydGhsZXNzL1lcXG5taXJ5L1JUXFxubWlzYWRkcmVzcy9EU0dcXG5taXNhZHZlbnR1cmUvTVNcXG5taXNhbGlnbmVkXFxubWlzYWxpZ25tZW50L01cXG5taXNhbGxpYW5jZS9NU1xcbm1pc2FudGhyb3BlL1NNXFxubWlzYW50aHJvcGljXFxubWlzYW50aHJvcGljYWxseVxcbm1pc2FudGhyb3Bpc3QvTVNcXG5taXNhbnRocm9weS9NXFxubWlzYXBwbGljYXRpb24vTVxcbm1pc2FwcGx5L0RTR05YXFxubWlzYXBwcmVoZW5kL0dTRFxcbm1pc2FwcHJlaGVuc2lvbi9NU1xcbm1pc2FwcHJvcHJpYXRlL1hEU0dOXFxubWlzYXBwcm9wcmlhdGlvbi9NXFxubWlzYmVnb3R0ZW5cXG5taXNiZWhhdmUvR0RTXFxubWlzYmVoYXZpb3IvTVxcbm1pc2NcXG5taXNjYWxjdWxhdGUvRFNYR05cXG5taXNjYWxjdWxhdGlvbi9NXFxubWlzY2FsbC9EU0dcXG5taXNjYXJyaWFnZS9NU1xcbm1pc2NhcnJ5L0dEU1xcbm1pc2Nhc3QvU0dcXG5taXNjZWdlbmF0aW9uL01cXG5taXNjZWxsYW5lb3VzL1lcXG5taXNjZWxsYW55L1NNXFxubWlzY2hhbmNlL1NNXFxubWlzY2hpZWYvTVxcbm1pc2NoaWV2b3VzL1lQXFxubWlzY2hpZXZvdXNuZXNzL01cXG5taXNjaWJpbGl0eS9NXFxubWlzY2libGVcXG5taXNjbGFzc2lmaWVkXFxubWlzY29tbXVuaWNhdGlvbi9TXFxubWlzY29uY2VpdmUvR0RTXFxubWlzY29uY2VwdGlvbi9TTVxcbm1pc2NvbmR1Y3QvTURHU1xcbm1pc2NvbnN0cnVjdGlvbi9NU1xcbm1pc2NvbnN0cnVlL0dEU1xcbm1pc2NvdW50L01EU0dcXG5taXNjcmVhbnQvU01cXG5taXNjdWUvRFNNR1xcbm1pc2RlYWwvR01TXFxubWlzZGVhbHRcXG5taXNkZWVkL01TXFxubWlzZGVtZWFub3IvTVNcXG5taXNkaWFnbm9zZS9HRFNcXG5taXNkaWFnbm9zaXMvTVxcbm1pc2RpZFxcbm1pc2RpcmVjdC9TREdcXG5taXNkaXJlY3Rpb24vTVxcbm1pc2RvL0pHXFxubWlzZG9lc1xcbm1pc2RvaW5nL01cXG5taXNkb25lXFxubWlzZXIvU0JNWVxcbm1pc2VyYWJsZW5lc3MvTVxcbm1pc2VyYWJseVxcbm1pc2VybGluZXNzL01cXG5taXNlcnkvU01cXG5taXNmZWFzYW5jZS9NXFxubWlzZmVhdHVyZS9TXFxubWlzZmlsZS9HRFNcXG5taXNmaXJlL01HRFNcXG5taXNmaXQvU01cXG5taXNmaXR0ZWRcXG5taXNmaXR0aW5nXFxubWlzZm9ydHVuZS9TTVxcbm1pc2dpdmluZy9NU1xcbm1pc2dvdmVybi9TREdMXFxubWlzZ292ZXJubWVudC9NXFxubWlzZ3VpZGFuY2UvTVxcbm1pc2d1aWRlL0RTR1xcbm1pc2d1aWRlZC9ZXFxubWlzaGFuZGxlL0RTR1xcbm1pc2hhcC9TTVxcbm1pc2hlYXIvR1NcXG5taXNoZWFyZFxcbm1pc2hpdC9TXFxubWlzaGl0dGluZ1xcbm1pc2htYXNoL01TXFxubWlzaWRlbnRpZnkvR0RTXFxubWlzaW5mb3JtL0RHU1xcbm1pc2luZm9ybWF0aW9uL01cXG5taXNpbnRlcnByZXQvU0dEXFxubWlzaW50ZXJwcmV0YXRpb24vU01cXG5taXNqdWRnZS9EU0dcXG5taXNqdWRnbWVudC9TTVxcbm1pc2xhYmVsL0dTRFxcbm1pc2xhaWRcXG5taXNsYXkvR1NcXG5taXNsZWFkL0dTXFxubWlzbGVhZGluZy9ZXFxubWlzbGVkXFxubWlzbWFuYWdlL0xHRFNcXG5taXNtYW5hZ2VtZW50L01cXG5taXNtYXRjaC9HTURTXFxubWlzbmFtZS9HRFNcXG5taXNub21lci9NU1xcbm1pc29nYW1pc3QvTVNcXG5taXNvZ2FteS9NXFxubWlzb2d5bmlzdC9TTVxcbm1pc29neW5pc3RpY1xcbm1pc29neW5vdXNcXG5taXNvZ3lueS9NXFxubWlzcGxhY2UvR0xEU1xcbm1pc3BsYWNlbWVudC9NXFxubWlzcGxheS9HTURTXFxubWlzcHJpbnQvR01EU1xcbm1pc3ByaXNpb24vTVxcbm1pc3Byb25vdW5jZS9EU0dcXG5taXNwcm9udW5jaWF0aW9uL1NNXFxubWlzcXVvdGF0aW9uL01TXFxubWlzcXVvdGUvTUdEU1xcbm1pc3JlYWQvR0pTXFxubWlzcmVhZGluZy9NXFxubWlzcmVtZW1iZXIvR0RTXFxubWlzcmVwb3J0L01ER1NcXG5taXNyZXByZXNlbnQvR0RTXFxubWlzcmVwcmVzZW50YXRpb24vTVNcXG5taXNydWxlL01HRFNcXG5taXNzJ3NcXG5taXNzL0VEU0dWXFxubWlzc2FsL0VTTVxcbm1pc3NlZC9VXFxubWlzc2hhcGUvR0RTXFxubWlzc2hhcGVuXFxubWlzc2lsZS9NU1xcbm1pc3NpbGVyeS9NXFxubWlzc2lvbi9BTVNcXG5taXNzaW9uYXJ5L1NNXFxubWlzc2lvbmVyL1NNXFxubWlzc2l2ZS9NU1xcbm1pc3NwZWFrL0dTXFxubWlzc3BlbGwvR0RKU1xcbm1pc3NwZWxsaW5nL01cXG5taXNzcGVuZC9HU1xcbm1pc3NwZW50XFxubWlzc3Bva2VcXG5taXNzcG9rZW5cXG5taXNzdGF0ZS9HRFNMXFxubWlzc3RhdGVtZW50L1NNXFxubWlzc3RlcC9NU1xcbm1pc3N1cy9NU1xcbm1pc3Qnc1xcbm1pc3QvQ0RSU1pHXFxubWlzdGFrYWJsZS9VXFxubWlzdGFrZS9CTUdTXFxubWlzdGFrZW4vWVxcbm1pc3RlcidzXFxubWlzdGlseVxcbm1pc3RpbWUvR0RTXFxubWlzdGluZXNzL01cXG5taXN0bGV0b2UvTVxcbm1pc3Rvb2tcXG5taXN0cmFsL01TXFxubWlzdHJhbnNsYXRlZFxcbm1pc3RyZWF0L0xER1NcXG5taXN0cmVhdG1lbnQvTVxcbm1pc3RyZXNzL01TXFxubWlzdHJpYWwvTVNcXG5taXN0cnVzdC9NRFNHXFxubWlzdHJ1c3RmdWwvWVxcbm1pc3R5L1BSVFxcbm1pc3R5cGUvR1NcXG5taXN1bmRlcnN0YW5kL1NHSlxcbm1pc3VuZGVyc3RhbmRpbmcvTVxcbm1pc3VuZGVyc3Rvb2RcXG5taXN1c2UvRFNNR1xcbm1pdGUvTVpSU1xcbm1pdGVyL01ER1xcbm1pdGlnYXRlL0RTR05cXG5taXRpZ2F0ZWQvVVxcbm1pdGlnYXRpb24vTVxcbm1pdG9jaG9uZHJpYVxcbm1pdG9jaG9uZHJpYWxcXG5taXRvY2hvbmRyaW9uXFxubWl0b3Nlc1xcbm1pdG9zaXMvTVxcbm1pdG90aWNcXG5taXRyYWxcXG5taXR0L01OU1hcXG5taXR0ZW4vTVxcbm1pdHp2YWhcXG5taXgvWkdNRFJTQlxcbm1peGVkL1VcXG5taXhlci9NXFxubWl4dHVyZS9TTVxcbm1penplbi9NU1xcbm1penplbm1hc3QvU01cXG5ta2F5XFxubWtzXFxubWxcXG5tbVxcbm1uZW1vbmljL01TXFxubW5lbW9uaWNhbGx5XFxubW8vQ0tIU1xcbm1vYW4vTURSU1pHXFxubW9hbmVyL01cXG5tb2F0L01EU1xcbm1vYidzXFxubW9iL0NTXFxubW9iYmVkL0NcXG5tb2JiaW5nL0NcXG5tb2JpbGUvTVNcXG5tb2JpbGl0eS9NXFxubW9iaWxpemF0aW9uL0NNXFxubW9iaWxpemF0aW9uc1xcbm1vYmlsaXplL0NEU0dcXG5tb2JpbGl6ZXIvU01cXG5tb2JzdGVyL1NNXFxubW9jY2FzaW4vU01cXG5tb2NoYS9TTVxcbm1vY2svRFJTWkdcXG5tb2NrZXIvTVxcbm1vY2tlcnkvU01cXG5tb2NraW5nL1lcXG5tb2NraW5nYmlyZC9TTVxcbm1vZC9TVE1cXG5tb2RhbC9TTVxcbm1vZGFsaXR5L1NcXG5tb2RkZWRcXG5tb2RkaW5nXFxubW9kZS9NU1xcbm1vZGVsL1pHU0pNRFJcXG5tb2RlbGVyL01cXG5tb2RlbGluZy9NXFxubW9kZW0vU01cXG5tb2RlcmF0ZS9NWUdOUERTXFxubW9kZXJhdGVuZXNzL01cXG5tb2RlcmF0aW9uL01cXG5tb2RlcmF0b3IvU01cXG5tb2Rlcm4vTVlQU1xcbm1vZGVybmlzbS9NXFxubW9kZXJuaXN0L1NNXFxubW9kZXJuaXN0aWNcXG5tb2Rlcm5pdHkvTVxcbm1vZGVybml6YXRpb24vTVxcbm1vZGVybml6ZS9EUlNaR1xcbm1vZGVybml6ZXIvTVxcbm1vZGVybm5lc3MvTVxcbm1vZGVzdC9ZXFxubW9kZXN0eS9NXFxubW9kaWN1bS9TTVxcbm1vZGlmaWFibGVcXG5tb2RpZmljYXRpb24vTVxcbm1vZGlmaWVkL1VcXG5tb2RpZmllci9NXFxubW9kaWZ5L0RSU1haR05cXG5tb2Rpc2gvWVBcXG5tb2Rpc2huZXNzL01cXG5tb2R1bGFyXFxubW9kdWxhcml6YXRpb25cXG5tb2R1bGF0ZS9DR05EU1xcbm1vZHVsYXRpb24vQ01cXG5tb2R1bGF0aW9uc1xcbm1vZHVsYXRvci9NU1xcbm1vZHVsZS9NU1xcbm1vZHVsb1xcbm1vZHVsdXNcXG5tb2dneVxcbm1vZ3VsL1NNXFxubW9oYWlyL01cXG5tb2lcXG5tb2lldHkvU01cXG5tb2lsL01EU0dcXG5tb2lyZS9TTVxcbm1vaXN0L1hUUE5SWVxcbm1vaXN0ZW4vRFJaR1xcbm1vaXN0ZW5lci9NXFxubW9pc3RuZXNzL01cXG5tb2lzdHVyZS9NXFxubW9pc3R1cml6ZS9aR0RSU1xcbm1vaXN0dXJpemVyL01cXG5tb2xhci9TTVxcbm1vbGFzc2VzL01cXG5tb2xkL01EUkpTWkdcXG5tb2xkYm9hcmQvU01cXG5tb2xkZXIvR01EXFxubW9sZGluZXNzL01cXG5tb2xkaW5nL01cXG5tb2xkeS9UUFJcXG5tb2xlL01TXFxubW9sZWN1bGFyXFxubW9sZWN1bGFyaXR5L01cXG5tb2xlY3VsZS9TTVxcbm1vbGVoaWxsL1NNXFxubW9sZXNraW4vTVxcbm1vbGVzdC9EUlpHU1xcbm1vbGVzdGF0aW9uL01cXG5tb2xlc3RlZC9VXFxubW9sZXN0ZXIvTVxcbm1vbGwvTVNcXG5tb2xsaWZpY2F0aW9uL01cXG5tb2xsaWZ5L0RTTkdcXG5tb2xsdXNjYW5cXG5tb2xsdXNrL1NNXFxubW9sbHkvU01cXG5tb2xseWNvZGRsZS9EU01HXFxubW9sdC9NRE5SU1pHXFxubW9sdGVyL01cXG5tb2x5YmRlbnVtL01cXG5tb20vU01cXG5tb21lbnQvTVNcXG5tb21lbnRhXFxubW9tZW50YXJpbHlcXG5tb21lbnRhcmluZXNzL01cXG5tb21lbnRhcnkvUFxcbm1vbWVudG91cy9QWVxcbm1vbWVudG91c25lc3MvTVxcbm1vbWVudHVtL01cXG5tb21teS9TTVxcbm1vbmFkXFxubW9uYXJjaC9NXFxubW9uYXJjaGljXFxubW9uYXJjaGljYWxcXG5tb25hcmNoaXNtL01cXG5tb25hcmNoaXN0L01TXFxubW9uYXJjaGlzdGljXFxubW9uYXJjaHNcXG5tb25hcmNoeS9TTVxcbm1vbmFzdGVyeS9TTVxcbm1vbmFzdGljL01TXFxubW9uYXN0aWNhbC9ZXFxubW9uYXN0aWNpc20vTVxcbm1vbmF1cmFsXFxubW9uZXRhcmlseVxcbm1vbmV0YXJpc20vTVxcbm1vbmV0YXJpc3QvTVNcXG5tb25ldGFyeVxcbm1vbmV0aXphdGlvbi9DXFxubW9uZXRpemUvQ0dEU1xcbm1vbmV5L1NNRFxcbm1vbmV5YmFnL01TXFxubW9uZXlib3gvU1xcbm1vbmV5bGVuZGVyL1NNXFxubW9uZXltYWtlci9TTVxcbm1vbmV5bWFraW5nL01cXG5tb25nZXIvTURHU1xcbm1vbmdvbC9TXFxubW9uZ29saXNtL01cXG5tb25nb2xvaWQvTVNcXG5tb25nb29zZS9NU1xcbm1vbmdyZWwvU01cXG5tb25pZXNcXG5tb25pa2VyL1NNXFxubW9uaXNtL01cXG5tb25pc3QvTVNcXG5tb25pdGlvbi9TTVxcbm1vbml0b3IvU01ER1xcbm1vbml0b3J5XFxubW9uay9NU1xcbm1vbmtleS9NREdTXFxubW9ua2V5c2hpbmUvU01cXG5tb25raXNoXFxubW9ua3Nob29kL1NNXFxubW9uby9NXFxubW9ub2Nocm9tYXRpY1xcbm1vbm9jaHJvbWUvTVNcXG5tb25vY2xlL0RTTVxcbm1vbm9jbG9uYWxcXG5tb25vY290eWxlZG9uL1NNXFxubW9ub2NvdHlsZWRvbm91c1xcbm1vbm9jdWxhclxcbm1vbm9kaWNcXG5tb25vZGlzdC9TTVxcbm1vbm9keS9TTVxcbm1vbm9nYW1pc3QvTVNcXG5tb25vZ2Ftb3VzL1lcXG5tb25vZ2FteS9NXFxubW9ub2dyYW0vU01cXG5tb25vZ3JhbW1lZFxcbm1vbm9ncmFtbWluZ1xcbm1vbm9ncmFwaC9NXFxubW9ub2dyYXBoc1xcbm1vbm9saW5ndWFsL01TXFxubW9ub2xpdGgvTVxcbm1vbm9saXRoaWNcXG5tb25vbGl0aHNcXG5tb25vbG9naXN0L1NNXFxubW9ub2xvZ3VlL1NNXFxubW9ub21hbmlhL01cXG5tb25vbWFuaWFjL01TXFxubW9ub21hbmlhY2FsXFxubW9ub21lci9TTVxcbm1vbm9udWNsZW9zaXMvTVxcbm1vbm9waG9uaWNcXG5tb25vcGxhbmUvU01cXG5tb25vcG9saXN0L1NNXFxubW9ub3BvbGlzdGljXFxubW9ub3BvbGl6YXRpb24vTVxcbm1vbm9wb2xpemUvRFJTWkdcXG5tb25vcG9saXplci9NXFxubW9ub3BvbHkvU01cXG5tb25vcmFpbC9NU1xcbm1vbm9zeWxsYWJpY1xcbm1vbm9zeWxsYWJsZS9NU1xcbm1vbm90aGVpc20vTVxcbm1vbm90aGVpc3QvU01cXG5tb25vdGhlaXN0aWNcXG5tb25vdG9uZS9NU1xcbm1vbm90b25pY1xcbm1vbm90b25pY2FsbHlcXG5tb25vdG9ub3VzL1BZXFxubW9ub3Rvbm91c25lc3MvTVxcbm1vbm90b255L01cXG5tb25vdW5zYXR1cmF0ZWRcXG5tb25veGlkZS9NU1xcbm1vbnNlaWduZXVyL01cXG5tb25zaWV1ci9NXFxubW9uc2lnbm9yL1NNXFxubW9uc29vbi9TTVxcbm1vbnNvb25hbFxcbm1vbnN0ZXIvU01cXG5tb25zdHJhbmNlL0FTTVxcbm1vbnN0cm9zaXR5L1NNXFxubW9uc3Ryb3VzL1lcXG5tb250YWdlL1NNXFxubW9udGgvTVlcXG5tb250aGx5L1NNXFxubW9udGhzXFxubW9udW1lbnQvTVNcXG5tb251bWVudGFsL1lcXG5tb28vU0dNRFxcbm1vb2NoL1pHTURSU1xcbm1vb2NoZXIvTVxcbm1vb2QvTVNcXG5tb29kaWx5XFxubW9vZGluZXNzL01cXG5tb29keS9UUFJcXG5tb29uL01EU0dcXG5tb29uYmVhbS9NU1xcbm1vb25sZXNzXFxubW9vbmxpZ2h0L1NNRFJaR1xcbm1vb25saWdodGVyL01cXG5tb29ubGlnaHRpbmcvTVxcbm1vb25saXRcXG5tb29uc2NhcGUvU01cXG5tb29uc2hpbmUvTVpSU1xcbm1vb25zaGluZXIvTVxcbm1vb25zaG90L01TXFxubW9vbnN0b25lL01TXFxubW9vbnN0cnVja1xcbm1vb253YWxrL01TXFxubW9vci9NREpTR1xcbm1vb3JoZW4vU1xcbm1vb3JpbmcvTVxcbm1vb3JsYW5kL01TXFxubW9vc2UvTVxcbm1vb3QvRFNHXFxubW9wL1NaR01EUlxcbm1vcGUvTVNcXG5tb3BlZC9TTVxcbm1vcGVyL01cXG5tb3BleVxcbm1vcGllclxcbm1vcGllc3RcXG5tb3Bpc2hcXG5tb3BwZWRcXG5tb3BwZXQvTVNcXG5tb3BwaW5nXFxubW9yYWluZS9TTVxcbm1vcmFsL1NNWVxcbm1vcmFsZS9NXFxubW9yYWxpc21cXG5tb3JhbGlzdC9NU1xcbm1vcmFsaXN0aWNcXG5tb3JhbGlzdGljYWxseVxcbm1vcmFsaXRpZXNcXG5tb3JhbGl0eS9VTVxcbm1vcmFsaXphdGlvbi9DTVxcbm1vcmFsaXplL0NHRFNcXG5tb3JhbGl6ZXIvTVNcXG5tb3Jhc3MvTVNcXG5tb3JhdG9yaXVtL1NNXFxubW9yYXkvU01cXG5tb3JiaWQvWVBcXG5tb3JiaWRpdHkvTVxcbm1vcmJpZG5lc3MvTVxcbm1vcmRhbmN5L01cXG5tb3JkYW50L1NNWVxcbm1vcmUvTVNcXG5tb3JlaXNoXFxubW9yZWwvU01cXG5tb3Jlb3Zlclxcbm1vcmVzL01cXG5tb3JndWUvTVNcXG5tb3JpYnVuZFxcbm1vcm4vTUpTR1xcbm1vcm5pbmcvTVxcbm1vcm9jY28vTVxcbm1vcm9uL1NNXFxubW9yb25pY1xcbm1vcm9uaWNhbGx5XFxubW9yb3NlL1lQXFxubW9yb3NlbmVzcy9NXFxubW9ycGgvR0RcXG5tb3JwaGVtZS9NU1xcbm1vcnBoZW1pY1xcbm1vcnBoaWEvTVxcbm1vcnBoaW5lL01cXG5tb3JwaGluZy9NXFxubW9ycGhvbG9naWNhbFxcbm1vcnBob2xvZ3kvTVxcbm1vcnBoc1xcbm1vcnJvdy9NU1xcbm1vcnNlbC9NU1xcbm1vcnRhbC9NWVNcXG5tb3J0YWxpdHkvTVxcbm1vcnRhci9NRFNHXFxubW9ydGFyYm9hcmQvU01cXG5tb3J0Z2FnZSdzXFxubW9ydGdhZ2UvQUdEU1xcbm1vcnRnYWdlZS9NU1xcbm1vcnRnYWdvci9NU1xcbm1vcnRpY2lhbi9NU1xcbm1vcnRpZmljYXRpb24vTVxcbm1vcnRpZnkvTkdEU1xcbm1vcnRpc2UvRFNNR1xcbm1vcnR1YXJ5L1NNXFxubW9zYWljL01TXFxubW9zZXkvU0dEXFxubW9zaC9EU0dcXG5tb3NxdWUvTVNcXG5tb3NxdWl0by9NXFxubW9zcXVpdG9lc1xcbm1vc3MvTVNcXG5tb3NzYmFjay9TTVxcbm1vc3N5L1RSXFxubW9zdC9NWVxcbm1vdC9TTVxcbm1vdGUnc1xcbm1vdGUvS0NYU1ZOXFxubW90ZWwvU01cXG5tb3RldC9TTVxcbm1vdGgvTVxcbm1vdGhiYWxsL0dNRFNcXG5tb3RoZXIvTURZU0dcXG5tb3RoZXJib2FyZC9TTVxcbm1vdGhlcmZ1Y2tlci9NUyFcXG5tb3RoZXJmdWNraW5nLyFcXG5tb3RoZXJob29kL01cXG5tb3RoZXJsYW5kL01TXFxubW90aGVybGVzc1xcbm1vdGhlcmxpbmVzcy9NXFxubW90aHNcXG5tb3RpZi9TTVxcbm1vdGlsZS9TXFxubW90aWxpdHkvTVxcbm1vdGlvbi9LQ01cXG5tb3Rpb25lZFxcbm1vdGlvbmluZ1xcbm1vdGlvbmxlc3MvWVBcXG5tb3Rpb25sZXNzbmVzcy9NXFxubW90aXZhdGUvQ0RTR1xcbm1vdGl2YXRlZC9VXFxubW90aXZhdGlvbi9TTVxcbm1vdGl2YXRpb25hbFxcbm1vdGl2YXRvci9TTVxcbm1vdGl2ZS9NU1xcbm1vdGl2ZWxlc3NcXG5tb3RsZXkvTVNcXG5tb3RsaWVyXFxubW90bGllc3RcXG5tb3RvY3Jvc3MvTVNcXG5tb3Rvci9TR01EXFxubW90b3JiaWtlL01HRFNcXG5tb3RvcmJvYXQvTVNcXG5tb3RvcmNhZGUvTVNcXG5tb3RvcmNhci9TTVxcbm1vdG9yY3ljbGUvRFNNR1xcbm1vdG9yY3ljbGlzdC9NU1xcbm1vdG9yaXN0L1NNXFxubW90b3JpemF0aW9uL01cXG5tb3Rvcml6ZS9EU0dcXG5tb3Rvcm1hbi9NXFxubW90b3JtZW5cXG5tb3Rvcm1vdXRoL01cXG5tb3Rvcm1vdXRoc1xcbm1vdG9yd2F5L1NNXFxubW90dGxlL0dEU1xcbm1vdHRvL01cXG5tb3R0b2VzXFxubW91ZS9NU1xcbm1vdW5kL1NHTURcXG5tb3VudC9FQVNHTURcXG5tb3VudGFibGVcXG5tb3VudGFpbi9TTVxcbm1vdW50YWluZWVyL1NNREdcXG5tb3VudGFpbmVlcmluZy9NXFxubW91bnRhaW5vdXNcXG5tb3VudGFpbnNpZGUvU01cXG5tb3VudGFpbnRvcC9TTVxcbm1vdW50ZWJhbmsvTVNcXG5tb3VudGVkL1VcXG5tb3VudGVyL01TXFxubW91bnRpbmcvU01cXG5tb3Vybi9TWkdEUlxcbm1vdXJuZWQvVVxcbm1vdXJuZXIvTVxcbm1vdXJuZnVsL1lQXFxubW91cm5mdWxuZXNzL01cXG5tb3VybmluZy9NXFxubW91c2UvRFJTTVpHXFxubW91c2VyL01cXG5tb3VzZXRyYXAvU01cXG5tb3VzZXRyYXBwZWRcXG5tb3VzZXRyYXBwaW5nXFxubW91c2luZXNzL01cXG5tb3Vzc2FrYS9TXFxubW91c3NlL01HRFNcXG5tb3VzeS9QVFJcXG5tb3V0aC9HTURcXG5tb3V0aGZlZWxcXG5tb3V0aGZ1bC9NU1xcbm1vdXRoaW5lc3MvTVxcbm1vdXRocGllY2UvTVNcXG5tb3V0aHNcXG5tb3V0aHdhc2gvTVNcXG5tb3V0aHdhdGVyaW5nXFxubW91dGh5L1BUUlxcbm1vdXRvbi9NXFxubW92YWJsZS9TTVxcbm1vdmUvQU1aR0RSU0JcXG5tb3ZlZC9VXFxubW92ZW1lbnQvU01cXG5tb3Zlci9BTVxcbm1vdmllL1NNXFxubW92aWVnb2VyL1NNXFxubW92aW5nL1lcXG5tb3cvU1pHTURSXFxubW93ZXIvTVxcbm1veGllL01cXG5tb3p6YXJlbGxhL01cXG5tcFxcbm1wZ1xcbm1waFxcbm10XFxubXRnXFxubXRnZVxcbm11L1NNXFxubXVjaC9NXFxubXVjaWxhZ2UvTVxcbm11Y2lsYWdpbm91c1xcbm11Y2svTURTR1xcbm11Y2tyYWtlL0RSU1pHXFxubXVja3Jha2VyL01cXG5tdWNreS9UUlxcbm11Y291c1xcbm11Y3VzL01cXG5tdWQvTVxcbm11ZGRpbHlcXG5tdWRkaW5lc3MvTVxcbm11ZGRsZS9NR0RTXFxubXVkZGxlaGVhZGVkXFxubXVkZHkvUFRHRFJTXFxubXVkZmxhcC9TXFxubXVkZmxhdC9NU1xcbm11ZGd1YXJkL1NNXFxubXVkcGFjay9TXFxubXVkcm9vbS9NU1xcbm11ZHNsaWRlL01TXFxubXVkc2xpbmdlci9TTVxcbm11ZHNsaW5naW5nL01cXG5tdWVuc3Rlci9NXFxubXVlc2xpXFxubXVlenppbi9NU1xcbm11ZmYvTURTR1xcbm11ZmZpbi9NU1xcbm11ZmZsZS9aR0RSU1xcbm11ZmZsZXIvTVxcbm11ZnRpL1NNXFxubXVnL1NNXFxubXVnZnVsL01TXFxubXVnZ2VkXFxubXVnZ2VyL01TXFxubXVnZ2luZXNzL01cXG5tdWdnaW5nL01TXFxubXVnZ2luc1xcbm11Z2dsZS9NU1xcbm11Z2d5L1BUUlxcbm11Z3Nob3QvTVNcXG5tdWd3dW1wL01TXFxubXVqYWhlZGRpblxcbm11a2x1ay9NU1xcbm11bGF0dG8vTVxcbm11bGF0dG9lc1xcbm11bGJlcnJ5L1NNXFxubXVsY2gvR01EU1xcbm11bGN0L1NHTURcXG5tdWxlL01TXFxubXVsZXNraW5uZXIvTVNcXG5tdWxldGVlci9NU1xcbm11bGlzaC9QWVxcbm11bGlzaG5lc3MvTVxcbm11bGwvRFNHXFxubXVsbGFoL01cXG5tdWxsYWhzXFxubXVsbGVpbi9NXFxubXVsbGV0L01TXFxubXVsbGlnYW4vU01cXG5tdWxsaWdhdGF3bnkvTVxcbm11bGxpb24vU01EXFxubXVsdGlcXG5tdWx0aWNlbGx1bGFyXFxubXVsdGljaGFubmVsXFxubXVsdGljb2xvcmVkXFxubXVsdGljdWx0dXJhbFxcbm11bHRpY3VsdHVyYWxpc20vTVxcbm11bHRpZGltZW5zaW9uYWxcXG5tdWx0aWRpc2NpcGxpbmFyeVxcbm11bHRpZmFjZXRlZFxcbm11bHRpZmFtaWx5XFxubXVsdGlmYXJpb3VzL1BZXFxubXVsdGlmYXJpb3VzbmVzcy9NXFxubXVsdGlmb3JtXFxubXVsdGlncmFpblxcbm11bHRpbGF0ZXJhbC9ZXFxubXVsdGlsYXllcmVkXFxubXVsdGlsZXZlbFxcbm11bHRpbGluZ3VhbFxcbm11bHRpbGluZ3VhbGlzbS9NXFxubXVsdGltZWRpYS9NXFxubXVsdGltaWxsaW9uYWlyZS9TTVxcbm11bHRpbmF0aW9uYWwvU01cXG5tdWx0aXBhcnRcXG5tdWx0aXBhcnR5XFxubXVsdGlwbGF5ZXIvTVxcbm11bHRpcGxlL01TXFxubXVsdGlwbGV4L1pHTURSU1xcbm11bHRpcGxleGVyL01cXG5tdWx0aXBsaWNhbmQvTVNcXG5tdWx0aXBsaWNhdGlvbi9NXFxubXVsdGlwbGljYXRpdmVcXG5tdWx0aXBsaWNpdHkvU01cXG5tdWx0aXBsaWVyL01cXG5tdWx0aXBseS9OWkdEUlNYXFxubXVsdGlwcm9jZXNzaW5nXFxubXVsdGlwcm9jZXNzb3IvU01cXG5tdWx0aXB1cnBvc2VcXG5tdWx0aXJhY2lhbFxcbm11bHRpc3RhZ2VcXG5tdWx0aXN0b3J5XFxubXVsdGl0YXNrL0dTXFxubXVsdGl0YXNraW5nL01cXG5tdWx0aXR1ZGUvU01cXG5tdWx0aXR1ZGlub3VzXFxubXVsdGl2YXJpYXRlXFxubXVsdGl2ZXJzZS9TTVxcbm11bHRpdml0YW1pbi9NU1xcbm11bHRpeWVhclxcbm11bVxcbm11bWJsZS9NWkdEUlNcXG5tdW1ibGVyL01cXG5tdW1ibGV0eXBlZy9NXFxubXVtbWVyL01TXFxubXVtbWVyeS9NXFxubXVtbWlmaWNhdGlvbi9NXFxubXVtbWlmeS9HTkRTXFxubXVtbXkvU01cXG5tdW1wcy9NXFxubXVuXFxubXVuY2gvR0RTXFxubXVuY2hpZS9TXFxubXVuY2hpZXMvTVxcbm11bmNoa2luL1NNXFxubXVuZGFuZS9TWVxcbm11bmcvRFNHXFxubXVuaWNpcGFsL1NNWVxcbm11bmljaXBhbGl0eS9TTVxcbm11bmlmaWNlbmNlL01cXG5tdW5pZmljZW50L1lcXG5tdW5pdGlvbi9NREdTXFxubXVyYWwvU01cXG5tdXJhbGlzdC9TTVxcbm11cmRlci9aR01EUlNcXG5tdXJkZXJlci9NXFxubXVyZGVyZXNzL01TXFxubXVyZGVyb3VzL1lcXG5tdXJrL01TXFxubXVya2lseVxcbm11cmtpbmVzcy9NXFxubXVya3kvUFRSXFxubXVybXVyL1pHSk1EUlNcXG5tdXJtdXJlci9NXFxubXVybXVyaW5nL01cXG5tdXJtdXJvdXNcXG5tdXJyYWluL01cXG5tdXNjYXQvTVNcXG5tdXNjYXRlbC9TTVxcbm11c2NsZS9NR0RTXFxubXVzY2xlYm91bmRcXG5tdXNjbGVtYW5cXG5tdXNjbGVtZW5cXG5tdXNjbHlcXG5tdXNjdWxhci9ZXFxubXVzY3VsYXJpdHkvTVxcbm11c2N1bGF0dXJlL01cXG5tdXNjdWxvc2tlbGV0YWxcXG5tdXNlL01HRFNKXFxubXVzZXR0ZS9NU1xcbm11c2V1bS9NU1xcbm11c2gvTURSU1pHXFxubXVzaGluZXNzL01cXG5tdXNocm9vbS9HU01EXFxubXVzaHkvUFRSXFxubXVzaWMvU01cXG5tdXNpY2FsL01ZU1xcbm11c2ljYWxlL01TXFxubXVzaWNhbGl0eS9NXFxubXVzaWNpYW4vU01ZXFxubXVzaWNpYW5zaGlwL01cXG5tdXNpY29sb2dpY2FsXFxubXVzaWNvbG9naXN0L01TXFxubXVzaWNvbG9neS9NXFxubXVzaW5nL01ZXFxubXVzay9NXFxubXVza2VnL01TXFxubXVza2VsbHVuZ2UvTVNcXG5tdXNrZXQvTVNcXG5tdXNrZXRlZXIvTVNcXG5tdXNrZXRyeS9NXFxubXVza2llL01cXG5tdXNraW5lc3MvTVxcbm11c2ttZWxvbi9TTVxcbm11c2tveC9NTlxcbm11c2tyYXQvTVNcXG5tdXNreS9QVFJTXFxubXVzbGluL01cXG5tdXNzL01EU0dcXG5tdXNzZWwvTVNcXG5tdXNzeS9UUlxcbm11c3QndmVcXG5tdXN0L01SU1pcXG5tdXN0YWNoZS9NRFNcXG5tdXN0YWNoaW8vU01EXFxubXVzdGFuZy9NU1xcbm11c3RhcmQvTVxcbm11c3Rlci9HTURcXG5tdXN0aWx5XFxubXVzdGluZXNzL01cXG5tdXN0bid0XFxubXVzdHkvUFRSXFxubXV0YWJpbGl0eS9NXFxubXV0YWJseVxcbm11dGFnZW4vTVNcXG5tdXRhZ2VuaWNcXG5tdXRhbnQvTVNcXG5tdXRhdGUvWEdOVkRTXFxubXV0YXRpb24vTVxcbm11dGF0aW9uYWxcXG5tdXRlL01ZVEdEUlNQQlxcbm11dGVuZXNzL01cXG5tdXRpbGF0ZS9EU0dOWFxcbm11dGlsYXRpb24vTVxcbm11dGlsYXRvci9TTVxcbm11dGluZWVyL1NNXFxubXV0aW5vdXMvWVxcbm11dGlueS9HRFNNXFxubXV0dC9NU1xcbm11dHRlci9aR0pNRFJTXFxubXV0dGVyZXIvTVxcbm11dHRlcmluZy9NXFxubXV0dG9uL01cXG5tdXR0b25jaG9wcy9NXFxubXV0dG9ueVxcbm11dHVhbC9ZXFxubXV0dWFsaXR5L01cXG5tdXVtdXUvTVNcXG5tdXpha1xcbm11enppbHlcXG5tdXp6bGUvRFNNR1xcbm11enp5L1BcXG5teVxcbm15Y29sb2dpc3QvU01cXG5teWNvbG9neS9NXFxubXllbGl0aXMvTVxcbm15bmEvTVNcXG5teW9jYXJkaWFsXFxubXlvY2FyZGl1bVxcbm15b3BpYS9NXFxubXlvcGljXFxubXlvcGljYWxseVxcbm15cmlhZC9TTVxcbm15cm1pZG9uL01TXFxubXlycmgvTVxcbm15cnRsZS9TTVxcbm15c1xcbm15c2VsZlxcbm15c3RlcmlvdXMvUFlcXG5teXN0ZXJpb3VzbmVzcy9NXFxubXlzdGVyeS9TTVxcbm15c3RpYy9TTVxcbm15c3RpY2FsL1lcXG5teXN0aWNpc20vTVxcbm15c3RpZmljYXRpb24vQ01cXG5teXN0aWZ5L0NEU0dOXFxubXlzdGlxdWUvTVxcbm15dGgvTVxcbm15dGhpY1xcbm15dGhpY2FsXFxubXl0aG9sb2dpY2FsXFxubXl0aG9sb2dpc3QvU01cXG5teXRob2xvZ2l6ZS9EU0dcXG5teXRob2xvZ3kvU01cXG5teXRoc1xcbm15eG9tYXRvc2lzXFxubi9JS1RIXFxubmFhbi9TXFxubmFiL1NcXG5uYWJiZWRcXG5uYWJiaW5nXFxubmFib2IvU01cXG5uYWNlbGxlL1NNXFxubmFjaG8vU01cXG5uYWNyZS9NXFxubmFjcmVvdXNcXG5uYWRpci9TTVxcbm5hZVxcbm5hZmYvUlRcXG5uYWcvU01cXG5uYWdnZWRcXG5uYWdnZXIvTVNcXG5uYWdnaW5nXFxubmFnd2FyZVxcbm5haFxcbm5haWFkL1NNXFxubmFpZi9NU1xcbm5haWwvTURTR1xcbm5haWxicnVzaC9NU1xcbm5haXZlL1JZVFxcbm5haXZldGUvTVxcbm5haXZldHkvTVxcbm5ha2VkL1BZXFxubmFrZWRuZXNzL01cXG5uYW1lJ3NcXG5uYW1lL0FHRFNcXG5uYW1lYWJsZS9VXFxubmFtZWQvVVxcbm5hbWVsZXNzL1lcXG5uYW1lbHlcXG5uYW1lcGxhdGUvTVNcXG5uYW1lc2FrZS9TTVxcbm5hbm55L1NNXFxubmFub2JvdC9TXFxubmFub21ldGVyL1NcXG5uYW5vc2Vjb25kL1NNXFxubmFub3RlY2hub2xvZ3kvU01cXG5uYW5vdHViZVxcbm5hcC9TTVxcbm5hcGFsbS9NRFNHXFxubmFwZS9NU1xcbm5hcGh0aGEvTVxcbm5hcGh0aGFsZW5lL01cXG5uYXBraW4vTVNcXG5uYXBsZXNzXFxubmFwb2xlb24vU01cXG5uYXBwZWRcXG5uYXBwZXIvTVNcXG5uYXBwaW5nXFxubmFwcHkvVFJTTVxcbm5hcmMvTVNcXG5uYXJjaXNzaXNtL01cXG5uYXJjaXNzaXN0L01TXFxubmFyY2lzc2lzdGljXFxubmFyY2lzc3VzL01cXG5uYXJjb2xlcHN5L01cXG5uYXJjb2xlcHRpY1xcbm5hcmNvc2VzXFxubmFyY29zaXMvTVxcbm5hcmNvdGljL1NNXFxubmFyY290aXphdGlvbi9NXFxubmFyY290aXplL0dEU1xcbm5hcmtcXG5uYXJreVxcbm5hcnJhdGUvR05WRFNYXFxubmFycmF0aW9uL01cXG5uYXJyYXRpdmUvU01cXG5uYXJyYXRvci9TTVxcbm5hcnJvdy9QVEdNRFJZU1xcbm5hcnJvd25lc3MvTVxcbm5hcndoYWwvTVNcXG5uYXJ5XFxubmFzYWwvU01ZXFxubmFzYWxpdHkvTVxcbm5hc2FsaXphdGlvbi9NXFxubmFzYWxpemUvRFNHXFxubmFzY2VuY2UvQU1cXG5uYXNjZW50L0FcXG5uYXN0aWx5XFxubmFzdGluZXNzL01cXG5uYXN0dXJ0aXVtL1NNXFxubmFzdHkvUFRSXFxubmF0YWxcXG5uYXRjaFxcbm5hdGlvbi9NU1xcbm5hdGlvbmFsL01ZU1xcbm5hdGlvbmFsaXNtL01cXG5uYXRpb25hbGlzdC9TTVxcbm5hdGlvbmFsaXN0aWNcXG5uYXRpb25hbGlzdGljYWxseVxcbm5hdGlvbmFsaXR5L1NNXFxubmF0aW9uYWxpemF0aW9uL01TXFxubmF0aW9uYWxpemUvQ0RTR1xcbm5hdGlvbmhvb2QvTVxcbm5hdGlvbndpZGVcXG5uYXRpdmUvTVNcXG5uYXRpdml0eS9TTVxcbm5hdGxcXG5uYXR0ZXIvR01EU1xcbm5hdHRpbHlcXG5uYXR0aW5lc3MvTVxcbm5hdHR5L1BUUlxcbm5hdHVyYWwnc1xcbm5hdHVyYWwvVVBZXFxubmF0dXJhbGlzbS9NXFxubmF0dXJhbGlzdC9TTVxcbm5hdHVyYWxpc3RpY1xcbm5hdHVyYWxpemF0aW9uL01cXG5uYXR1cmFsaXplL0RTR1xcbm5hdHVyYWxuZXNzL1VNXFxubmF0dXJhbHNcXG5uYXR1cmUnc1xcbm5hdHVyZS9DU1xcbm5hdHVyaXNtXFxubmF0dXJpc3QvU1xcbm5hdWdodC9NU1xcbm5hdWdodGlseVxcbm5hdWdodGluZXNzL01cXG5uYXVnaHR5L1BUUlxcbm5hdXNlYS9NXFxubmF1c2VhbVxcbm5hdXNlYXRlL0dEU1xcbm5hdXNlYXRpbmcvWVxcbm5hdXNlb3VzL1BZXFxubmF1c2VvdXNuZXNzL01cXG5uYXV0aWNhbC9ZXFxubmF1dGlsdXMvTVNcXG5uYXZhbFxcbm5hdmUvTVNcXG5uYXZlbC9TTVxcbm5hdmlnYWJpbGl0eS9NXFxubmF2aWdhYmxlXFxubmF2aWdhdGUvRFNHTlxcbm5hdmlnYXRpb24vTVxcbm5hdmlnYXRpb25hbFxcbm5hdmlnYXRvci9NU1xcbm5hdnZ5L1NcXG5uYXZ5L1NNXFxubmF5L1NNXFxubmF5c2F5ZXIvTVNcXG5uZSdlclxcbm5lYW5kZXJ0aGFsL01TXFxubmVhcC9NU1xcbm5lYXIvRFJZU1BUR1xcbm5lYXJieVxcbm5lYXJuZXNzL01cXG5uZWFyc2hvcmVcXG5uZWFyc2lkZVxcbm5lYXJzaWdodGVkL1lQXFxubmVhcnNpZ2h0ZWRuZXNzL01cXG5uZWF0L05SWVBYVFxcbm5lYXRlbi9HRFxcbm5lYXRoXFxubmVhdG5lc3MvTVxcbm5lYnVsYS9NXFxubmVidWxhZVxcbm5lYnVsYXJcXG5uZWJ1bG91cy9QWVxcbm5lYnVsb3VzbmVzcy9NXFxubmVjZXNzYXJpbHkvVVxcbm5lY2Vzc2FyeS9TTVxcbm5lY2Vzc2l0YXRlL0RTR1xcbm5lY2Vzc2l0b3VzXFxubmVjZXNzaXR5L1NNXFxubmVjay9NRFNHXFxubmVja2JhbmQvU1xcbm5lY2tlcmNoaWVmL01TXFxubmVja2luZy9NXFxubmVja2xhY2UvTUdEU0pcXG5uZWNrbGluZS9NU1xcbm5lY2t0aWUvTVNcXG5uZWNyb2xvZ3kvTVxcbm5lY3JvbWFuY2VyL1NNXFxubmVjcm9tYW5jeS9NXFxubmVjcm9waGlsaWFcXG5uZWNyb3BoaWxpYWMvU1xcbm5lY3JvcG9saXMvTVNcXG5uZWNyb3Nlc1xcbm5lY3Jvc2lzL01cXG5uZWNyb3RpY1xcbm5lY3Rhci9NXFxubmVjdGFyaW5lL01TXFxubmVlXFxubmVlZC9NRFNHXFxubmVlZGVkL1VcXG5uZWVkZnVsL1lcXG5uZWVkaW5lc3MvTVxcbm5lZWRsZS9NR0RTXFxubmVlZGxlcG9pbnQvTVxcbm5lZWRsZXNzL1lQXFxubmVlZGxlc3NuZXNzL01cXG5uZWVkbGV3b21hbi9NXFxubmVlZGxld29tZW5cXG5uZWVkbGV3b3JrL01cXG5uZWVkbid0XFxubmVlZHkvUFRSXFxubmVmYXJpb3VzL1lQXFxubmVmYXJpb3VzbmVzcy9NXFxubmVnXFxubmVnYXRlL0RTR05WWFxcbm5lZ2F0aW9uL01cXG5uZWdhdGl2ZS9NWUdQRFNcXG5uZWdhdGl2ZW5lc3MvTVxcbm5lZ2F0aXZpc20vTVxcbm5lZ2F0aXZpdHkvTVxcbm5lZ2xlY3QvU0dNRFxcbm5lZ2xlY3RmdWwvWVBcXG5uZWdsZWN0ZnVsbmVzcy9NXFxubmVnbGlnZWUvTVNcXG5uZWdsaWdlbmNlL01cXG5uZWdsaWdlbnQvWVxcbm5lZ2xpZ2libGVcXG5uZWdsaWdpYmx5XFxubmVnb3RpYWJpbGl0eS9NXFxubmVnb3RpYWJsZS9BXFxubmVnb3RpYXRlL0FEU0dOXFxubmVnb3RpYXRpb24vQU1cXG5uZWdvdGlhdGlvbnNcXG5uZWdvdGlhdG9yL01TXFxubmVncml0dWRlL01cXG5uZWdyb1xcbm5lZ3JvaWRcXG5uZWlnaC9NREdcXG5uZWlnaGJvci9TTURZR1xcbm5laWdoYm9yaG9vZC9TTVxcbm5laWdoYm9ybGluZXNzL01cXG5uZWlnaHNcXG5uZWl0aGVyXFxubmVsc29uL1NNXFxubmVtYXRvZGUvU01cXG5uZW1lc2VzXFxubmVtZXNpcy9NXFxubmVvY2xhc3NpY1xcbm5lb2NsYXNzaWNhbFxcbm5lb2NsYXNzaWNpc20vTVxcbm5lb2NvbG9uaWFsaXNtL01cXG5uZW9jb2xvbmlhbGlzdC9NU1xcbm5lb2Nvbi9TTVxcbm5lb2NvbnNlcnZhdGl2ZS9TTVxcbm5lb2NvcnRleFxcbm5lb2R5bWl1bS9NXFxubmVvbGl0aGljXFxubmVvbG9naXNtL1NNXFxubmVvbi9NXFxubmVvbmF0YWxcXG5uZW9uYXRlL01TXFxubmVvcGhpbGlhXFxubmVvcGh5dGUvTVNcXG5uZW9wbGFzbS9NU1xcbm5lb3BsYXN0aWNcXG5uZW9wcmVuZS9NXFxubmVwZW50aGUvTVxcbm5lcGhldy9TTVxcbm5lcGhyaXRlL01cXG5uZXBocml0aWNcXG5uZXBocml0aXMvTVxcbm5lcGhyb3BhdGh5XFxubmVwb3Rpc20vTVxcbm5lcG90aXN0L1NNXFxubmVwb3Rpc3RpY1xcbm5lcHR1bml1bS9NXFxubmVyZC9NU1xcbm5lcmR5L1JUXFxubmVydmUnc1xcbm5lcnZlL1VEU0dcXG5uZXJ2ZWxlc3MvWVBcXG5uZXJ2ZWxlc3NuZXNzL01cXG5uZXJ2aW5lc3MvTVxcbm5lcnZvdXMvWVBcXG5uZXJ2b3VzbmVzcy9NXFxubmVydnkvVFBSXFxubmVzdC9NRFNHXFxubmVzdGxlL0dKRFNcXG5uZXN0bGluZy9NXFxubmV0L1NNXFxubmV0YmFsbFxcbm5ldGJvb2svTVNcXG5uZXRoZXJcXG5uZXRoZXJtb3N0XFxubmV0aGVyd29ybGQvTVxcbm5ldGlxdWV0dGUvU1xcbm5ldHRlZFxcbm5ldHRlci9TXFxubmV0dGluZy9NXFxubmV0dGxlL01HRFNcXG5uZXR0bGVzb21lXFxubmV0d29yay9TR01EXFxubmV0d29ya2luZy9NXFxubmV1cmFsL1lcXG5uZXVyYWxnaWEvTVxcbm5ldXJhbGdpY1xcbm5ldXJhc3RoZW5pYS9NXFxubmV1cmFzdGhlbmljL01TXFxubmV1cml0aWMvTVNcXG5uZXVyaXRpcy9NXFxubmV1cm9sb2dpY2FsL1lcXG5uZXVyb2xvZ2lzdC9TTVxcbm5ldXJvbG9neS9NXFxubmV1cm9uL01TXFxubmV1cm9uYWxcXG5uZXVyb3NjaWVuY2VcXG5uZXVyb3Nlc1xcbm5ldXJvc2lzL01cXG5uZXVyb3N1cmdlb24vTVNcXG5uZXVyb3N1cmdlcnkvTVxcbm5ldXJvc3VyZ2ljYWxcXG5uZXVyb3RpYy9NU1xcbm5ldXJvdGljYWxseVxcbm5ldXJvdGljaXNtXFxubmV1cm90cmFuc21pdHRlci9TTVxcbm5ldXRcXG5uZXV0ZXIvTURHU1xcbm5ldXRyYWwvU01ZXFxubmV1dHJhbGlzbS9NXFxubmV1dHJhbGlzdC9TTVxcbm5ldXRyYWxpdHkvTVxcbm5ldXRyYWxpemF0aW9uL01cXG5uZXV0cmFsaXplL0RSU1pHXFxubmV1dHJhbGl6ZXIvTVxcbm5ldXRyaW5vL1NNXFxubmV1dHJvbi9TTVxcbm5ldmVyXFxubmV2ZXJtb3JlXFxubmV2ZXJ0aGVsZXNzXFxubmV2aVxcbm5ldnVzL01cXG5uZXcvU1RNUllQXFxubmV3YmllL01TXFxubmV3Ym9ybi9TTVxcbm5ld2NvbWVyL1NNXFxubmV3ZWwvU01cXG5uZXdmYW5nbGVkXFxubmV3Zm91bmRcXG5uZXdsaW5lL1NcXG5uZXdseXdlZC9TTVxcbm5ld25lc3MvTVxcbm5ld3MvTVxcbm5ld3NhZ2VudC9TXFxubmV3c2JveS9TTVxcbm5ld3NjYXN0L1NNUlpcXG5uZXdzY2FzdGVyL01cXG5uZXdzZGVhbGVyL1NNXFxubmV3c2ZsYXNoL1NcXG5uZXdzZ2lybC9TTVxcbm5ld3Nncm91cC9NU1xcbm5ld3Nob3VuZC9TXFxubmV3c2xldHRlci9NU1xcbm5ld3NtYW4vTVxcbm5ld3NtZW5cXG5uZXdzcGFwZXIvTVNcXG5uZXdzcGFwZXJtYW4vTVxcbm5ld3NwYXBlcm1lblxcbm5ld3NwYXBlcndvbWFuL01cXG5uZXdzcGFwZXJ3b21lblxcbm5ld3NwZWFrXFxubmV3c3ByaW50L01cXG5uZXdzcmVhZGVyL1NcXG5uZXdzcmVlbC9NU1xcbm5ld3Nyb29tL01TXFxubmV3c3N0YW5kL1NNXFxubmV3c3dlZWtseS9TTVxcbm5ld3N3b21hbi9NXFxubmV3c3dvbWVuXFxubmV3c3dvcnRoaW5lc3MvTVxcbm5ld3N3b3J0aHkvUFxcbm5ld3N5L1RSXFxubmV3dC9NU1xcbm5ld3Rvbi9NU1xcbm5leHQvTVxcbm5leHVzL01TXFxubmlhY2luL01cXG5uaWIvU01cXG5uaWJibGUvTVpHRFJTXFxubmliYmxlci9NXFxubmljZS9QWVRSXFxubmljZW5lc3MvTVxcbm5pY2V0eS9TTVxcbm5pY2hlL1NNXFxubmljay9NRFJTWkdcXG5uaWNrZWwvTVNcXG5uaWNrZWxvZGVvbi9TTVxcbm5pY2tlci9NREdcXG5uaWNrbGUvU1xcbm5pY2tuYW1lL0RTTUdcXG5uaWNvdGluZS9NXFxubmllY2UvU01cXG5uaWZlZGlwaW5lXFxubmlmZlxcbm5pZmZ5XFxubmlmdHkvVFJcXG5uaWdnYS9NUyFcXG5uaWdnYXJkL1NNWVxcbm5pZ2dhcmRsaW5lc3MvTVxcbm5pZ2dhei8hXFxubmlnZ2VyL1NNIVxcbm5pZ2dsZS9NWkdEUlNcXG5uaWdnbGVyL01cXG5uaWdoL1JUXFxubmlnaHQvU01ZXFxubmlnaHRjYXAvU01cXG5uaWdodGNsb3RoZXMvTVxcbm5pZ2h0Y2x1Yi9TTVxcbm5pZ2h0Y2x1YmJlZFxcbm5pZ2h0Y2x1YmJpbmdcXG5uaWdodGRyZXNzL01TXFxubmlnaHRmYWxsL01cXG5uaWdodGdvd24vU01cXG5uaWdodGhhd2svU01cXG5uaWdodGllL1NNXFxubmlnaHRpbmdhbGUvU01cXG5uaWdodGxpZmUvTVxcbm5pZ2h0bGlnaHQvU1xcbm5pZ2h0bG9uZ1xcbm5pZ2h0bWFyZS9TTVxcbm5pZ2h0bWFyaXNoXFxubmlnaHRzaGFkZS9TTVxcbm5pZ2h0c2hpcnQvU01cXG5uaWdodHNwb3QvTVNcXG5uaWdodHN0YW5kL1NNXFxubmlnaHRzdGljay9TTVxcbm5pZ2h0dGltZS9NXFxubmlnaHR3YXRjaG1hblxcbm5pZ2h0d2F0Y2htZW5cXG5uaWdodHdlYXIvTVxcbm5paGlsaXNtL01cXG5uaWhpbGlzdC9NU1xcbm5paGlsaXN0aWNcXG5uaWwvTVxcbm5pbWJpXFxubmltYmxlL1RQUlxcbm5pbWJsZW5lc3MvTVxcbm5pbWJseVxcbm5pbWJ1cy9NXFxubmltYnlcXG5uaW1yb2QvTVNcXG5uaW5jb21wb29wL1NNXFxubmluZS9NU1xcbm5pbmVwaW4vTVNcXG5uaW5lcGlucy9NXFxubmluZXRlZW4vU01IXFxubmluZXRlZW50aC9NXFxubmluZXRlZW50aHNcXG5uaW5ldGlldGgvTVxcbm5pbmV0aWV0aHNcXG5uaW5ldHkvSFNNXFxubmluamEvU01cXG5uaW5ueS9TTVxcbm5pbnRoL01cXG5uaW50aHNcXG5uaW9iaXVtL01cXG5uaXAvU01cXG5uaXBwZWRcXG5uaXBwZXIvTVNcXG5uaXBwaW5lc3MvTVxcbm5pcHBpbmdcXG5uaXBwbGUvTVNcXG5uaXBweS9UUFJcXG5uaXJ2YW5hL01cXG5uaXNlaS9NXFxubml0L1NNUlxcbm5pdGVyL01cXG5uaXRwaWNrL1NaR0RSXFxubml0cGlja2VyL01cXG5uaXRwaWNraW5nL01cXG5uaXRyYXRlL0RTTUdOXFxubml0cmF0aW9uL01cXG5uaXRyaWNcXG5uaXRyaWZpY2F0aW9uL01cXG5uaXRyaXRlL1NNXFxubml0cm9cXG5uaXRyb2NlbGx1bG9zZS9NXFxubml0cm9nZW4vTVxcbm5pdHJvZ2Vub3VzXFxubml0cm9nbHljZXJpbi9NXFxubml0d2l0L01TXFxubml4L0dNRFNcXG5uby9TTVxcbm5vYi9TWVxcbm5vYmJsZS9HRFNcXG5ub2JlbGl1bS9NXFxubm9iaWxpdHkvTVxcbm5vYmxlL1JTUE1UXFxubm9ibGVtYW4vTVxcbm5vYmxlbWVuXFxubm9ibGVuZXNzL01cXG5ub2JsZXdvbWFuL01cXG5ub2JsZXdvbWVuXFxubm9ib2R5L1NNXFxubm9jdHVybmFsL1lcXG5ub2N0dXJuZS9NU1xcbm5vZC9TTVxcbm5vZGFsXFxubm9kZGVkXFxubm9kZGluZ1xcbm5vZGRsZS9NU1xcbm5vZGR5XFxubm9kZS9NU1xcbm5vZHVsYXJcXG5ub2R1bGUvTVNcXG5ub2VsL01TXFxubm9lc1xcbm5vZ2dpbi9NU1xcbm5vaG93XFxubm9pc2UvRFNNR1xcbm5vaXNlbGVzcy9QWVxcbm5vaXNlbGVzc25lc3MvTVxcbm5vaXNlbWFrZXIvTVNcXG5ub2lzaWx5XFxubm9pc2luZXNzL01cXG5ub2lzb21lXFxubm9pc3kvUFRSXFxubm9tYWQvU01cXG5ub21hZGljXFxubm9tZW5jbGF0dXJlL01TXFxubm9taW5hbC9ZXFxubm9taW5hdGUvQUNHTlZEU1xcbm5vbWluYXRpb24ncy9BXFxubm9taW5hdGlvbi9DU01cXG5ub21pbmF0aXZlL1NNXFxubm9taW5hdG9yL0NTTVxcbm5vbWluZWUvTVNcXG5ub25cXG5ub25hYnJhc2l2ZVxcbm5vbmFic29yYmVudC9TTVxcbm5vbmFjYWRlbWljXFxubm9uYWNjZXB0YW5jZS9NXFxubm9uYWNpZFxcbm5vbmFjdGl2ZS9NU1xcbm5vbmFkZGljdGl2ZVxcbm5vbmFkaGVzaXZlXFxubm9uYWRqYWNlbnRcXG5ub25hZGp1c3RhYmxlXFxubm9uYWRtaW5pc3RyYXRpdmVcXG5ub25hZ2UvTVNcXG5ub25hZ2VuYXJpYW4vTVNcXG5ub25hZ2dyZXNzaW9uL01cXG5ub25hbGNvaG9saWNcXG5ub25hbGlnbmVkXFxubm9uYWxpZ25tZW50L01cXG5ub25hbGxlcmdpY1xcbm5vbmFwcGVhcmFuY2UvTVNcXG5ub25hc3NpZ25hYmxlXFxubm9uYXRobGV0aWNcXG5ub25hdHRlbmRhbmNlL01cXG5ub25hdXRvbW90aXZlXFxubm9uYXZhaWxhYmlsaXR5L01cXG5ub25iYXNpY1xcbm5vbmJlbGlldmVyL01TXFxubm9uYmVsbGlnZXJlbnQvTVNcXG5ub25iaW5kaW5nXFxubm9uYnJlYWthYmxlXFxubm9uYnVybmFibGVcXG5ub25jYWxvcmljXFxubm9uY2FuY2Vyb3VzXFxubm9uY2UvTVxcbm5vbmNoYWxhbmNlL01cXG5ub25jaGFsYW50L1lcXG5ub25jaGFyZ2VhYmxlXFxubm9uY2xlcmljYWwvTVNcXG5ub25jbGluaWNhbFxcbm5vbmNvbGxlY3RhYmxlXFxubm9uY29tL01TXFxubm9uY29tYmF0XFxubm9uY29tYmF0YW50L01TXFxubm9uY29tYnVzdGlibGVcXG5ub25jb21tZXJjaWFsL01TXFxubm9uY29tbWl0dGFsL1lcXG5ub25jb21tdW5pY2FibGVcXG5ub25jb21wZXRpbmdcXG5ub25jb21wZXRpdGl2ZVxcbm5vbmNvbXBsaWFuY2UvTVxcbm5vbmNvbXBseWluZ1xcbm5vbmNvbXByZWhlbmRpbmdcXG5ub25jb25kdWN0aW5nXFxubm9uY29uZHVjdG9yL01TXFxubm9uY29uZm9ybWluZ1xcbm5vbmNvbmZvcm1pc21cXG5ub25jb25mb3JtaXN0L01TXFxubm9uY29uZm9ybWl0eS9NXFxubm9uY29uc2VjdXRpdmVcXG5ub25jb25zdHJ1Y3RpdmVcXG5ub25jb250YWdpb3VzXFxubm9uY29udGludW91c1xcbm5vbmNvbnRyaWJ1dGluZ1xcbm5vbmNvbnRyaWJ1dG9yeVxcbm5vbmNvbnRyb3ZlcnNpYWxcXG5ub25jb252ZXJ0aWJsZVxcbm5vbmNvb3BlcmF0aW9uL01cXG5ub25jb3Jyb2RpbmdcXG5ub25jb3Jyb3NpdmVcXG5ub25jcmVkaXRcXG5ub25jcmltaW5hbC9TTVxcbm5vbmNyaXRpY2FsXFxubm9uY3J5c3RhbGxpbmVcXG5ub25jdW11bGF0aXZlXFxubm9uY3VzdG9kaWFsXFxubm9uZGFpcnlcXG5ub25kZWR1Y3RpYmxlL01cXG5ub25kZWxpdmVyeS9TTVxcbm5vbmRlbW9jcmF0aWNcXG5ub25kZW5vbWluYXRpb25hbFxcbm5vbmRlcGFydG1lbnRhbFxcbm5vbmRlcHJlY2lhdGluZ1xcbm5vbmRlc2NyaXB0XFxubm9uZGVzdHJ1Y3RpdmVcXG5ub25kZXRhY2hhYmxlXFxubm9uZGV0ZXJtaW5pc21cXG5ub25kZXRlcm1pbmlzdGljXFxubm9uZGlzY2lwbGluYXJ5XFxubm9uZGlzY2xvc3VyZS9NXFxubm9uZGlzY3JpbWluYXRpb24vTVxcbm5vbmRpc2NyaW1pbmF0b3J5XFxubm9uZHJhbWF0aWNcXG5ub25kcmlua2VyL01TXFxubm9uZHJ5aW5nXFxubm9uZVxcbm5vbmVkdWNhdGlvbmFsXFxubm9uZWZmZWN0aXZlXFxubm9uZWxhc3RpY1xcbm5vbmVsZWN0cmljXFxubm9uZWxlY3RyaWNhbFxcbm5vbmVtcHR5XFxubm9uZW5mb3JjZWFibGVcXG5ub25lbnRpdHkvU01cXG5ub25lcXVpdmFsZW50L01TXFxubm9uZXNzZW50aWFsXFxubm9uZXN1Y2gvTVNcXG5ub25ldGhlbGVzc1xcbm5vbmV2ZW50L01TXFxubm9uZXhjaGFuZ2VhYmxlXFxubm9uZXhjbHVzaXZlXFxubm9uZXhlbXB0L01cXG5ub25leGlzdGVuY2UvTVxcbm5vbmV4aXN0ZW50XFxubm9uZXhwbG9zaXZlL01TXFxubm9uZmFjdHVhbFxcbm5vbmZhZGluZ1xcbm5vbmZhdFxcbm5vbmZhdGFsXFxubm9uZmF0dGVuaW5nXFxubm9uZmVycm91c1xcbm5vbmZpY3Rpb24vTVxcbm5vbmZpY3Rpb25hbFxcbm5vbmZsYW1tYWJsZVxcbm5vbmZsb3dlcmluZ1xcbm5vbmZsdWN0dWF0aW5nXFxubm9uZmx5aW5nXFxubm9uZm9vZC9NXFxubm9uZnJlZXppbmdcXG5ub25mdW5jdGlvbmFsXFxubm9uZ292ZXJubWVudGFsXFxubm9uZ3JhbnVsYXJcXG5ub25oYXphcmRvdXNcXG5ub25oZXJlZGl0YXJ5XFxubm9uaHVtYW5cXG5ub25pZGVudGljYWxcXG5ub25pbmNsdXNpdmVcXG5ub25pbmRlcGVuZGVudFxcbm5vbmluZHVzdHJpYWxcXG5ub25pbmZlY3Rpb3VzXFxubm9uaW5mbGFtbWF0b3J5XFxubm9uaW5mbGF0aW9uYXJ5XFxubm9uaW5mbGVjdGVkXFxubm9uaW50ZWxsZWN0dWFsL01TXFxubm9uaW50ZXJjaGFuZ2VhYmxlXFxubm9uaW50ZXJmZXJlbmNlL01cXG5ub25pbnRlcnZlbnRpb24vTVxcbm5vbmludG94aWNhdGluZ1xcbm5vbmludmFzaXZlXFxubm9uaXJyaXRhdGluZ1xcbm5vbmlzc3VlXFxubm9uanVkZ21lbnRhbFxcbm5vbmp1ZGljaWFsXFxubm9ubGVnYWxcXG5ub25sZXRoYWxcXG5ub25saW5lYXJcXG5ub25saXRlcmFyeVxcbm5vbmxpdmluZy9NXFxubm9ubWFnbmV0aWNcXG5ub25tYWxpZ25hbnRcXG5ub25tZW1iZXIvTVNcXG5ub25tZXRhbC9TTVxcbm5vbm1ldGFsbGljXFxubm9ubWlncmF0b3J5XFxubm9ubWlsaXRhbnRcXG5ub25taWxpdGFyeVxcbm5vbm5hcmNvdGljL1NNXFxubm9ubmF0aXZlL01TXFxubm9ubmVnb3RpYWJsZVxcbm5vbm51Y2xlYXJcXG5ub25udW1lcmljYWxcXG5ub25vYmplY3RpdmVcXG5ub25vYmxpZ2F0b3J5XFxubm9ub2JzZXJ2YW5jZS9NXFxubm9ub2JzZXJ2YW50XFxubm9ub2NjdXBhdGlvbmFsXFxubm9ub2NjdXJlbmNlXFxubm9ub2ZmaWNpYWxcXG5ub25vcGVyYXRpb25hbFxcbm5vbm9wZXJhdGl2ZVxcbm5vbnBhcmFsbGVsL01TXFxubm9ucGFyZWlsL01TXFxubm9ucGFydGljaXBhbnQvTVNcXG5ub25wYXJ0aWNpcGF0aW5nXFxubm9ucGFydGlzYW4vU01cXG5ub25wYXlpbmdcXG5ub25wYXltZW50L1NNXFxubm9ucGVyZm9ybWFuY2UvTVxcbm5vbnBlcmZvcm1pbmdcXG5ub25wZXJpc2hhYmxlXFxubm9ucGVyc29uL01TXFxubm9ucGh5c2ljYWwvWVxcbm5vbnBsdXMvU1xcbm5vbnBsdXNzZWRcXG5ub25wbHVzc2luZ1xcbm5vbnBvaXNvbm91c1xcbm5vbnBvbGl0aWNhbFxcbm5vbnBvbGx1dGluZ1xcbm5vbnBvcm91c1xcbm5vbnByYWN0aWNpbmdcXG5ub25wcmVqdWRpY2lhbFxcbm5vbnByZXNjcmlwdGlvblxcbm5vbnByb2R1Y3RpdmVcXG5ub25wcm9mZXNzaW9uYWwvU01cXG5ub25wcm9maXQvU01CXFxubm9ucHJvbGlmZXJhdGlvbi9NXFxubm9ucHVibGljXFxubm9ucHVuaXNoYWJsZVxcbm5vbnJhY2lhbFxcbm5vbnJhZGlvYWN0aXZlXFxubm9ucmFuZG9tXFxubm9ucmVhY3RpdmVcXG5ub25yZWNpcHJvY2FsL1NNXFxubm9ucmVjaXByb2NhdGluZ1xcbm5vbnJlY29nbml0aW9uL01cXG5ub25yZWNvdmVyYWJsZVxcbm5vbnJlY3VycmluZ1xcbm5vbnJlZGVlbWFibGVcXG5ub25yZWZpbGxhYmxlXFxubm9ucmVmdW5kYWJsZVxcbm5vbnJlbGlnaW91c1xcbm5vbnJlbmV3YWJsZVxcbm5vbnJlcHJlc2VudGF0aW9uYWxcXG5ub25yZXNpZGVudC9NU1xcbm5vbnJlc2lkZW50aWFsXFxubm9ucmVzaWR1YWwvTVxcbm5vbnJlc2lzdGFuY2UvTVxcbm5vbnJlc2lzdGFudFxcbm5vbnJlc3RyaWN0aXZlXFxubm9ucmV0dXJuYWJsZS9NU1xcbm5vbnJoeXRobWljXFxubm9ucmlnaWRcXG5ub25zYWxhcmllZFxcbm5vbnNjaGVkdWxlZFxcbm5vbnNjaWVudGlmaWNcXG5ub25zY29yaW5nXFxubm9uc2Vhc29uYWxcXG5ub25zZWN0YXJpYW5cXG5ub25zZWN1bGFyXFxubm9uc2VncmVnYXRlZFxcbm5vbnNlbnNlL01cXG5ub25zZW5zaWNhbC9ZXFxubm9uc2Vuc2l0aXZlXFxubm9uc2V4aXN0XFxubm9uc2V4dWFsXFxubm9uc2tpZFxcbm5vbnNsaXBcXG5ub25zbW9rZXIvU01cXG5ub25zbW9raW5nXFxubm9uc29jaWFsXFxubm9uc3BlYWtpbmdcXG5ub25zcGVjaWFsaXN0L01TXFxubm9uc3BlY2lhbGl6aW5nXFxubm9uc3BlY2lmaWNcXG5ub25zcGlyaXR1YWwvU01cXG5ub25zdGFpbmluZ1xcbm5vbnN0YW5kYXJkXFxubm9uc3RhcnRlci9NU1xcbm5vbnN0aWNrXFxubm9uc3RvcFxcbm5vbnN0cmF0ZWdpY1xcbm5vbnN0cmlraW5nXFxubm9uc3RydWN0dXJhbFxcbm5vbnN1Y2Nlc3NpdmVcXG5ub25zdXBwb3J0L0dNXFxubm9uc3VyZ2ljYWxcXG5ub25zdXN0YWluaW5nXFxubm9uc3ltcGF0aGl6ZXIvTVxcbm5vbnRhcm5pc2hhYmxlXFxubm9udGF4YWJsZVxcbm5vbnRlY2huaWNhbFxcbm5vbnRlbnVyZWRcXG5ub250aGVhdHJpY2FsXFxubm9udGhpbmtpbmdcXG5ub250aHJlYXRlbmluZ1xcbm5vbnRveGljXFxubm9udHJhZGl0aW9uYWxcXG5ub250cmFuc2ZlcmFibGVcXG5ub250cmFuc3BhcmVudFxcbm5vbnRyaXZpYWxcXG5ub250cm9waWNhbFxcbm5vbnVuaWZvcm1cXG5ub251bmlvblxcbm5vbnVzZXIvTVNcXG5ub252ZW5vbW91c1xcbm5vbnZlcmJhbFxcbm5vbnZpYWJsZVxcbm5vbnZpb2xlbmNlL01cXG5ub252aW9sZW50L1lcXG5ub252aXJ1bGVudFxcbm5vbnZvY2FsXFxubm9udm9jYXRpb25hbFxcbm5vbnZvbGF0aWxlXFxubm9udm90ZXIvTVNcXG5ub252b3RpbmdcXG5ub253aGl0ZS9NU1xcbm5vbndvcmtpbmdcXG5ub255aWVsZGluZ1xcbm5vbnplcm9cXG5ub29kbGUvTUdEU1xcbm5vb2svTVNcXG5ub29raWVcXG5ub29reVxcbm5vb24vTVxcbm5vb25kYXkvTVxcbm5vb250aWRlL01cXG5ub29udGltZS9NXFxubm9vc2UvU01cXG5ub3BlXFxubm9yXFxubm9yJ2Vhc3Rlclxcbm5vcm0vTVNcXG5ub3JtYWwvTVlcXG5ub3JtYWxjeS9NXFxubm9ybWFsaXR5L01cXG5ub3JtYWxpemF0aW9uL01cXG5ub3JtYWxpemUvRFNHXFxubm9ybWF0aXZlXFxubm9ydGgvWk1SXFxubm9ydGhib3VuZFxcbm5vcnRoZWFzdC9NUlpcXG5ub3J0aGVhc3Rlci9NWVxcbm5vcnRoZWFzdGVyblxcbm5vcnRoZWFzdHdhcmQvU1xcbm5vcnRoZXIvTVlcXG5ub3J0aGVybHkvU01cXG5ub3J0aGVybi9aUlxcbm5vcnRoZXJuZXIvTVxcbm5vcnRoZXJubW9zdFxcbm5vcnRod2FyZC9TXFxubm9ydGh3ZXN0L1pNUlxcbm5vcnRod2VzdGVyL01ZXFxubm9ydGh3ZXN0ZXJuXFxubm9ydGh3ZXN0d2FyZC9TXFxubm9zZS9NR0RTXFxubm9zZWJhZy9TXFxubm9zZWJsZWVkL01TXFxubm9zZWNvbmUvU01cXG5ub3NlZGl2ZS9EU01HXFxubm9zZWdheS9TTVxcbm5vc2gvTURSU1pHXFxubm9zaGVyL01cXG5ub3NpbHlcXG5ub3NpbmVzcy9NXFxubm9zdGFsZ2lhL01cXG5ub3N0YWxnaWNcXG5ub3N0YWxnaWNhbGx5XFxubm9zdHJpbC9NU1xcbm5vc3RydW0vTVNcXG5ub3N5L1JQVFxcbm5vdC9CXFxubm90YWJpbGl0eS9TTVxcbm5vdGFibGUvU01cXG5ub3RhYmx5XFxubm90YXJpYWxcXG5ub3Rhcml6YXRpb24vTVxcbm5vdGFyaXplL0dEU1xcbm5vdGFyeS9TTVxcbm5vdGF0ZS9HRFNcXG5ub3RhdGlvbi9GQ1NNXFxubm90Y2gvR01EU1xcbm5vdGUnc1xcbm5vdGUvRkNTREdcXG5ub3RlYm9vay9NU1xcbm5vdGVsZXQvU1xcbm5vdGVwYWQvU1xcbm5vdGVwYXBlci9NXFxubm90ZXdvcnRoaW5lc3MvTVxcbm5vdGV3b3J0aHkvUFxcbm5vdGhpbmcvUFNNXFxubm90aGluZ25lc3MvTVxcbm5vdGljZS9NR0RTXFxubm90aWNlYWJsZS9VXFxubm90aWNlYWJseVxcbm5vdGljZWJvYXJkL1NcXG5ub3RpY2VkL1VcXG5ub3RpZmlhYmxlXFxubm90aWZpY2F0aW9uL01cXG5ub3RpZmllci9NXFxubm90aWZ5L05EUlNYWkdcXG5ub3Rpb24vTVNcXG5ub3Rpb25hbC9ZXFxubm90b3JpZXR5L01cXG5ub3RvcmlvdXMvWVxcbm5vdHdpdGhzdGFuZGluZ1xcbm5vdHdvcmsvU1xcbm5vdWdhdC9NU1xcbm5vdW4vS01TXFxubm91cmlzaC9EU0xHXFxubm91cmlzaG1lbnQvTVxcbm5vdXNcXG5ub3ZhL01TXFxubm92YWVcXG5ub3ZlbC9TTVxcbm5vdmVsZXR0ZS9TTVxcbm5vdmVsaXN0L1NNXFxubm92ZWxpemF0aW9uL01TXFxubm92ZWxpemUvRFNHXFxubm92ZWxsYS9NU1xcbm5vdmVsdHkvU01cXG5ub3ZlbmEvTVNcXG5ub3ZlbmVcXG5ub3ZpY2UvTVNcXG5ub3ZpdGlhdGUvTVNcXG5ub3cvTVxcbm5vd2FkYXlzL01cXG5ub3dheS9TXFxubm93aGVyZS9NXFxubm93aXNlXFxubm93dFxcbm5veGlvdXNcXG5ub3p6bGUvTVNcXG5udS9TTVxcbm51YW5jZS9NRFNcXG5udWIvU01cXG5udWJiaW4vTVNcXG5udWJieS9UUlxcbm51YmlsZVxcbm51Y2xlYXIvS1xcbm51Y2xlYXRlL0RTR05cXG5udWNsZWF0aW9uL01cXG5udWNsZWlcXG5udWNsZWljXFxubnVjbGVvbGlcXG5udWNsZW9sdXMvTVxcbm51Y2xlb24vU01cXG5udWNsZW9zaWRlXFxubnVjbGVvdGlkZVxcbm51Y2xldXMvTVxcbm51ZGUvTVRSU1xcbm51ZGdlL0dEU01cXG5udWRpc20vTVxcbm51ZGlzdC9TTVxcbm51ZGl0eS9NXFxubnVnYXRvcnlcXG5udWdnZXQvU01cXG5udWlzYW5jZS9NU1xcbm51a2UvTUdEU1xcbm51bGwvU1xcbm51bGxpZmljYXRpb24vTVxcbm51bGxpZnkvTkRTR1xcbm51bGxpdHkvTVxcbm51bWIvWlRHUERSWVNcXG5udW1iZXInc1xcbm51bWJlci9BU0RHXFxubnVtYmVyZWQvVVxcbm51bWJlcmxlc3NcXG5udW1ibmVzcy9NXFxubnVtZXJhYmxlL0lcXG5udW1lcmFjeS9JTVxcbm51bWVyYWwvU01cXG5udW1lcmF0ZS9YR05EU1xcbm51bWVyYXRpb24vTVxcbm51bWVyYXRvci9NU1xcbm51bWVyaWNcXG5udW1lcmljYWwvWVxcbm51bWVyb2xvZ2lzdC9NU1xcbm51bWVyb2xvZ3kvTVxcbm51bWVyb3VzL1lcXG5udW1pbm91c1xcbm51bWlzbWF0aWMvU1xcbm51bWlzbWF0aWNzL01cXG5udW1pc21hdGlzdC9TTVxcbm51bXNrdWxsL01TXFxubnVuL1NNXFxubnVuY2lvL1NNXFxubnVubmVyeS9TTVxcbm51cHRpYWwvTVNcXG5udXJzZS9NWkdEUlNcXG5udXJzZWxpbmdzXFxubnVyc2VtYWlkL01TXFxubnVyc2VyL01cXG5udXJzZXJ5L1NNXFxubnVyc2VyeW1hbi9NXFxubnVyc2VyeW1lblxcbm51cnNpbmcvTVxcbm51cnNsaW5nL1NNXFxubnVydHVyZS9EUlNNWkdcXG5udXJ0dXJlci9NXFxubnV0L1NNXFxubnV0Y2FzZS9TXFxubnV0Y3JhY2tlci9NU1xcbm51dGhhdGNoL01TXFxubnV0aG91c2UvU1xcbm51dG1lYXQvU01cXG5udXRtZWcvU01cXG5udXRwaWNrL1NNXFxubnV0cmlhL1NNXFxubnV0cmllbnQvTVNcXG5udXRyaW1lbnQvTVNcXG5udXRyaXRpb24vTVxcbm51dHJpdGlvbmFsL1lcXG5udXRyaXRpb25pc3QvU01cXG5udXRyaXRpb3VzL1lQXFxubnV0cml0aW91c25lc3MvTVxcbm51dHJpdGl2ZVxcbm51dHNoZWxsL01TXFxubnV0dGVkXFxubnV0dGVyL1NcXG5udXR0aW5lc3MvTVxcbm51dHRpbmdcXG5udXR0eS9SVFBcXG5udXp6bGUvRFJTTVpHXFxubnV6emxlci9NXFxubnliYmxlL1NcXG5ueWxvbi9NU1xcbm55bG9ucy9NXFxubnltcGgvTVxcbm55bXBoZXQvTVNcXG5ueW1waG8vU1xcbm55bXBob21hbmlhL01cXG5ueW1waG9tYW5pYWMvU01cXG5ueW1waHNcXG5vXFxubydjbG9ja1xcbm8nZXJcXG5vYWYvU01cXG5vYWZpc2gvUFlcXG5vYWZpc2huZXNzL01cXG5vYWsvU01OXFxub2FrdW0vTVxcbm9hci9TR01EXFxub2FybG9jay9TTVxcbm9hcnNtYW4vTVxcbm9hcnNtZW5cXG5vYXJzd29tYW4vTVxcbm9hcnN3b21lblxcbm9hc2VzXFxub2FzaXMvTVxcbm9hdC9TTU5cXG5vYXRjYWtlL1NNXFxub2F0aC9NXFxub2F0aHNcXG5vYXRtZWFsL01cXG5vYXRzL01cXG5vYi9TXFxub2JibGlnYXRvL01TXFxub2JkdXJhY3kvTVxcbm9iZHVyYXRlL1BZXFxub2JkdXJhdGVuZXNzL01cXG5vYmVkaWVuY2UvRU1cXG5vYmVkaWVudC9FWVxcbm9iZWlzYW5jZS9TTVxcbm9iZWlzYW50XFxub2JlbGlzay9NU1xcbm9iZXNlXFxub2Jlc2l0eS9NXFxub2JleS9FRFNHXFxub2JmdXNjYXRlL0dOWERTXFxub2JmdXNjYXRpb24vTVxcbm9iaS9TTVxcbm9iaXQvTVNcXG5vYml0dWFyeS9TTVxcbm9ialxcbm9iamVjdC9TR1ZNRFxcbm9iamVjdGlmeS9OR0RTXFxub2JqZWN0aW9uL1NNQlxcbm9iamVjdGlvbmFibGUvVVxcbm9iamVjdGlvbmFibHlcXG5vYmplY3RpdmUvU01ZUFxcbm9iamVjdGl2ZW5lc3MvTVxcbm9iamVjdGl2aXR5L01cXG5vYmplY3Rvci9NU1xcbm9ianVyZ2F0ZS9YR05EU1xcbm9ianVyZ2F0aW9uL01cXG5vYmxhdGUvTlhcXG5vYmxhdGlvbi9NXFxub2JsaWdhdGUvRFNYR05cXG5vYmxpZ2F0aW9uL01cXG5vYmxpZ2F0b3JpbHlcXG5vYmxpZ2F0b3J5XFxub2JsaWdlL0VHRFNcXG5vYmxpZ2luZy9ZXFxub2JsaXF1ZS9TTVlQXFxub2JsaXF1ZW5lc3MvTVxcbm9ibGlxdWl0eS9NXFxub2JsaXRlcmF0ZS9EU0dOXFxub2JsaXRlcmF0aW9uL01cXG5vYmxpdmlvbi9NXFxub2JsaXZpb3VzL1lQXFxub2JsaXZpb3VzbmVzcy9NXFxub2Jsb25nL01TXFxub2Jsb3F1eS9NXFxub2Jub3hpb3VzL1lQXFxub2Jub3hpb3VzbmVzcy9NXFxub2JvZS9NU1xcbm9ib2lzdC9NU1xcbm9ic2NlbmUvUllUXFxub2JzY2VuaXR5L1NNXFxub2JzY3VyYW50aXNtL01cXG5vYnNjdXJhbnRpc3QvU01cXG5vYnNjdXJlL0RSU1lUR1xcbm9ic2N1cml0eS9TTVxcbm9ic2VxdWllc1xcbm9ic2VxdWlvdXMvUFlcXG5vYnNlcXVpb3VzbmVzcy9NXFxub2JzZXF1eS9NXFxub2JzZXJ2YWJseVxcbm9ic2VydmFuY2UvTVNcXG5vYnNlcnZhbnQvWVxcbm9ic2VydmF0aW9uL1NNXFxub2JzZXJ2YXRpb25hbFxcbm9ic2VydmF0b3J5L1NNXFxub2JzZXJ2ZS9EUlNCWkdcXG5vYnNlcnZlZC9VXFxub2JzZXJ2ZXIvTVxcbm9ic2Vzcy9EU0dWXFxub2JzZXNzaW9uL1NNXFxub2JzZXNzaW9uYWwvWVxcbm9ic2Vzc2l2ZS9QU01ZXFxub2JzZXNzaXZlbmVzcy9NXFxub2JzaWRpYW4vTVxcbm9ic29sZXNjZS9EU0dcXG5vYnNvbGVzY2VuY2UvTVxcbm9ic29sZXNjZW50XFxub2Jzb2xldGUvR0RTXFxub2JzdGFjbGUvTVNcXG5vYnN0ZXRyaWMvU1xcbm9ic3RldHJpY2FsXFxub2JzdGV0cmljaWFuL1NNXFxub2JzdGV0cmljcy9NXFxub2JzdGluYWN5L01cXG5vYnN0aW5hdGUvWVxcbm9ic3RyZXBlcm91cy9ZUFxcbm9ic3RyZXBlcm91c25lc3MvTVxcbm9ic3RydWN0L0RHVlNcXG5vYnN0cnVjdGVkL1VcXG5vYnN0cnVjdGlvbi9TTVxcbm9ic3RydWN0aW9uaXNtL01cXG5vYnN0cnVjdGlvbmlzdC9NU1xcbm9ic3RydWN0aXZlL1lQXFxub2JzdHJ1Y3RpdmVuZXNzL01cXG5vYnRhaW4vREJMR1NcXG5vYnRhaW5hYmxlL1VcXG5vYnRhaW5tZW50L01cXG5vYnRydWRlL0RTR1xcbm9idHJ1c2lvbi9NXFxub2J0cnVzaXZlL1VQWVxcbm9idHJ1c2l2ZW5lc3MvVU1cXG5vYnR1c2UvWVRSUFxcbm9idHVzZW5lc3MvTVxcbm9idmVyc2UvU01cXG5vYnZpYXRlL0RTR05cXG5vYnZpYXRpb24vTVxcbm9idmlvdXMvUFlcXG5vYnZpb3VzbmVzcy9NXFxub2NhcmluYS9NU1xcbm9jY2FzaW9uL0dNRFNcXG5vY2Nhc2lvbmFsL1lcXG5vY2NpZGVudGFsL1NNXFxub2NjbHVkZS9HRFNcXG5vY2NsdXNpb24vU01cXG5vY2NsdXNpdmVcXG5vY2N1bHQvTVxcbm9jY3VsdGlzbS9NXFxub2NjdWx0aXN0L1NNXFxub2NjdXBhbmN5L01cXG5vY2N1cGFudC9TTVxcbm9jY3VwYXRpb24vQU1cXG5vY2N1cGF0aW9uYWwvWVxcbm9jY3VwYXRpb25zXFxub2NjdXBpZWQvVVxcbm9jY3VwaWVyL1NNXFxub2NjdXB5L0FEU0dcXG5vY2N1ci9BU1xcbm9jY3VycmVkL0FcXG5vY2N1cnJlbmNlL1NNXFxub2NjdXJyaW5nL0FcXG5vY2Vhbi9TTVxcbm9jZWFuZnJvbnQvU01cXG5vY2VhbmdvaW5nXFxub2NlYW5pYy9NXFxub2NlYW5vZ3JhcGhlci9TTVxcbm9jZWFub2dyYXBoaWNcXG5vY2Vhbm9ncmFwaHkvTVxcbm9jZWFub2xvZ3kvTVxcbm9jZWxvdC9NU1xcbm9jaC9SXFxub2NoZXIvTVxcbm9ja2VyL1NcXG5vY3RhZ29uL01TXFxub2N0YWdvbmFsXFxub2N0YWxcXG5vY3RhbmUvTVNcXG5vY3RhdmUvTVNcXG5vY3Rhdm8vTVNcXG5vY3RldC9TTVxcbm9jdG9nZW5hcmlhbi9TTVxcbm9jdG9wdXMvTVNcXG5vY3VsYXIvTVNcXG5vY3VsaXN0L1NNXFxub2N1bG9tb3Rvclxcbm9kYWxpc3F1ZS9TTVxcbm9kZC9TVFJZTFBcXG5vZGRiYWxsL1NNXFxub2RkaXR5L1NNXFxub2RkbWVudC9TTVxcbm9kZG5lc3MvTVxcbm9kZHMvTVxcbm9kZS9TTVxcbm9kaW91cy9ZUFxcbm9kaW91c25lc3MvTVxcbm9kaXVtL01cXG5vZG9tZXRlci9NU1xcbm9kb3IvTURTXFxub2RvcmlmZXJvdXNcXG5vZG9ybGVzc1xcbm9kb3JvdXNcXG5vZHlzc2V5L01TXFxub2VkaXBhbFxcbm9lbm9sb2d5L01cXG5vZW5vcGhpbGUvU01cXG5vZXV2cmUvTVNcXG5vZlxcbm9mZi9TWkdEUkpcXG5vZmZhbC9NXFxub2ZmYmVhdC9NU1xcbm9mZmVuZC9aR0RSU1xcbm9mZmVuZGVyL01cXG5vZmZlbnNlL01TXFxub2ZmZW5zaXZlJ3NcXG5vZmZlbnNpdmUvSVBZXFxub2ZmZW5zaXZlbmVzcy9JTVxcbm9mZmVuc2l2ZXNcXG5vZmZlci9KR01EXFxub2ZmZXJpbmcvTVxcbm9mZmVydG9yeS9TTVxcbm9mZmhhbmRcXG5vZmZoYW5kZWQvUFlcXG5vZmZoYW5kZWRuZXNzL01cXG5vZmZpY2UvTVpSU1xcbm9mZmljZWhvbGRlci9TTVxcbm9mZmljZXIvTVxcbm9mZmljaWFsL01ZU1xcbm9mZmljaWFsZG9tL01cXG5vZmZpY2lhbGVzZVxcbm9mZmljaWFsaXNtL01cXG5vZmZpY2lhbnQvU01cXG5vZmZpY2lhdGUvRFNHXFxub2ZmaWNpYXRvci9NU1xcbm9mZmljaW91cy9QWVxcbm9mZmljaW91c25lc3MvTVxcbm9mZmluZy9NXFxub2ZmaXNoXFxub2ZmbGluZVxcbm9mZmxvYWQvU0RHXFxub2ZmcHJpbnQvU01cXG5vZmZzZXQvTVNcXG5vZmZzZXR0aW5nXFxub2Zmc2hvb3QvTVNcXG5vZmZzaG9yZS9HXFxub2Zmc2lkZVxcbm9mZnNpdGVcXG5vZmZzcHJpbmcvTVxcbm9mZnN0YWdlL1NcXG5vZmZ0cmFja1xcbm9mdFxcbm9mdGVuL1RSXFxub2Z0ZW50aW1lc1xcbm9mdHRpbWVzXFxub2dsZS9NWkdEUlNcXG5vZ2xlci9NXFxub2dyZS9NU1xcbm9ncmVpc2hcXG5vZ3Jlc3MvTVNcXG5vaC9NXFxub2htL1NNXFxub2htbWV0ZXIvTVNcXG5vaG9cXG5vaHNcXG5vaVxcbm9pay9TXFxub2lsL1NHTURcXG5vaWxjYW4vU1xcbm9pbGNsb3RoL01cXG5vaWxjbG90aHNcXG5vaWxmaWVsZC9TXFxub2lsaW5lc3MvTVxcbm9pbG1hblxcbm9pbG1lblxcbm9pbHNraW4vTVNcXG5vaWxza2lucy9NXFxub2lseS9SUFRcXG5vaW5rL01EU0dcXG5vaW50bWVudC9TTVxcbm9rYXBpL1NNXFxub2theS9NU0dcXG5va3JhL01TXFxub2xkL1RNTlJQXFxub2xkaWUvU01cXG5vbGRpc2hcXG5vbGRuZXNzL01cXG5vbGRzdGVyL01TXFxub2xlL1NNVlxcbm9sZWFnaW5vdXNcXG5vbGVhbmRlci9NU1xcbm9sZW8vTVxcbm9sZW9tYXJnYXJpbmUvTVxcbm9sZmFjdG9yeS9TTVxcbm9saWdhcmNoL01cXG5vbGlnYXJjaGljXFxub2xpZ2FyY2hpY2FsXFxub2xpZ2FyY2hzXFxub2xpZ2FyY2h5L1NNXFxub2xpZ29udWNsZW90aWRlL1NcXG5vbGlnb3BvbHkvU01cXG5vbGl2ZS9TTVxcbm9tL1NNTlhcXG5vbWJ1ZHNtYW4vTVxcbm9tYnVkc21lblxcbm9tZWdhL1NNXFxub21lbGV0L01TXFxub21lbi9NXFxub21pY3Jvbi9NU1xcbm9taW5vdXMvWVBcXG5vbWlub3VzbmVzcy9NXFxub21pc3Npb24vTVNcXG5vbWl0L1NcXG5vbWl0dGVkXFxub21pdHRpbmdcXG5vbW5pYnVzL01TXFxub21uaXBvdGVuY2UvTVxcbm9tbmlwb3RlbnRcXG5vbW5pcHJlc2VuY2UvTVxcbm9tbmlwcmVzZW50XFxub21uaXNjaWVuY2UvTVxcbm9tbmlzY2llbnRcXG5vbW5pdm9yZS9NU1xcbm9tbml2b3JvdXMvUFlcXG5vbW5pdm9yb3VzbmVzcy9NXFxub24vWVxcbm9uYm9hcmRcXG5vbmNlL01cXG5vbmNvZ2VuZS9TTVxcbm9uY29sb2dpc3QvU01cXG5vbmNvbG9neS9NXFxub25jb21pbmdcXG5vbmUvU1hNTlBcXG5vbmVuZXNzL01cXG5vbmVyb3VzL1BZXFxub25lcm91c25lc3MvTVxcbm9uZXNlbGZcXG5vbmV0aW1lXFxub25nb2luZ1xcbm9uaW9uL01cXG5vbmlvbnNraW4vTVxcbm9ubGluZVxcbm9ubG9va2VyL1NNXFxub25sb29raW5nXFxub25vbWF0b3BvZWlhL01cXG5vbm9tYXRvcG9laWNcXG5vbm9tYXRvcG9ldGljXFxub25ydXNoL01TR1xcbm9uc2NyZWVuXFxub25zZXQvTVNcXG5vbnNob3JlXFxub25zaWRlXFxub25zaXRlXFxub25zbGF1Z2h0L01TXFxub25zdGFnZVxcbm9udG9cXG5vbnRvZ2VueS9NXFxub250b2xvZ2ljYWxcXG5vbnRvbG9neS9NXFxub251cy9NU1xcbm9ud2FyZFxcbm9ueXgvTVNcXG5vb2RsZXMvTVxcbm9vaC9HRFxcbm9vaHNcXG5vb21waFxcbm9vcHNcXG5vb3plL01HRFNcXG5vb3p5L1RSXFxub3AvU01ER1xcbm9wYWNpdHkvTVxcbm9wYWwvTVNcXG5vcGFsZXNjZW5jZS9NXFxub3BhbGVzY2VudFxcbm9wYXF1ZS9QWVRHRFJTXFxub3BhcXVlbmVzcy9NXFxub3Bjb2RlL1NcXG5vcGUvU1xcbm9wZW4vWlRHSlBNRFJZU1xcbm9wZW5jYXN0XFxub3BlbmVkL1VcXG5vcGVuZXIvTVxcbm9wZW5oYW5kZWQvUFxcbm9wZW5oYW5kZWRuZXNzL01cXG5vcGVuaGVhcnRlZFxcbm9wZW5pbmcvTVxcbm9wZW5uZXNzL01cXG5vcGVud29yay9NXFxub3BlcmEvTVNcXG5vcGVyYWJsZS9JXFxub3BlcmFuZC9TXFxub3BlcmF0ZS9EU0dOVlhcXG5vcGVyYXRpY1xcbm9wZXJhdGljYWxseVxcbm9wZXJhdGlvbi9NXFxub3BlcmF0aW9uYWwvWVxcbm9wZXJhdGl2ZS9TTVxcbm9wZXJhdG9yL1NNXFxub3BlcmV0dGEvU01cXG5vcGh0aGFsbWljXFxub3BodGhhbG1vbG9naXN0L1NNXFxub3BodGhhbG1vbG9neS9NXFxub3BpYXRlL1NNXFxub3BpbmUvR05YRFNcXG5vcGluaW9uL01cXG5vcGluaW9uYXRlZFxcbm9waW9pZC9TTVxcbm9waXVtL01cXG5vcG9zc3VtL01TXFxub3BwXFxub3Bwb25lbnQvU01cXG5vcHBvcnR1bmUvSVlcXG5vcHBvcnR1bmlzbS9NXFxub3Bwb3J0dW5pc3QvU01cXG5vcHBvcnR1bmlzdGljXFxub3Bwb3J0dW5pc3RpY2FsbHlcXG5vcHBvcnR1bml0eS9TTVxcbm9wcG9zZS9EU0dcXG5vcHBvc2VkL1VcXG5vcHBvc2l0ZS9TTVlOWFxcbm9wcG9zaXRpb24vTVxcbm9wcHJlc3MvRFNHVlxcbm9wcHJlc3Npb24vTVxcbm9wcHJlc3NpdmUvWVBcXG5vcHByZXNzaXZlbmVzcy9NXFxub3BwcmVzc29yL01TXFxub3Bwcm9icmlvdXMvWVxcbm9wcHJvYnJpdW0vTVxcbm9wdC9TR0RcXG5vcHRpYy9NU1xcbm9wdGljYWwvWVxcbm9wdGljaWFuL1NNXFxub3B0aWNzL01cXG5vcHRpbWFcXG5vcHRpbWFsL1lcXG5vcHRpbWlzbS9TTVxcbm9wdGltaXN0L1NNXFxub3B0aW1pc3RpY1xcbm9wdGltaXN0aWNhbGx5XFxub3B0aW1pemF0aW9uL01TXFxub3B0aW1pemUvRFJTR1xcbm9wdGltdW0vU01cXG5vcHRpb24vU01ER1xcbm9wdGlvbmFsL1lcXG5vcHRvbWV0cmlzdC9NU1xcbm9wdG9tZXRyeS9NXFxub3B1bGVuY2UvTVxcbm9wdWxlbnQvWVxcbm9wdXMvTVNcXG5vclxcbm9yYWNsZS9TTVxcbm9yYWN1bGFyXFxub3JhbC9NWVNcXG5vcmFsaXR5XFxub3JhbmdlL1NNUFxcbm9yYW5nZWFkZS9NU1xcbm9yYW5nZXJ5L1NNXFxub3Jhbmd1dGFuL1NNXFxub3JhdGUvR05YRFNcXG5vcmF0aW9uL01cXG5vcmF0b3IvU01cXG5vcmF0b3JpY2FsL1lcXG5vcmF0b3Jpby9NU1xcbm9yYXRvcnkvU01cXG5vcmIvU01cXG5vcmJpY3VsYXJcXG5vcmJpdC9NRFJaR1NcXG5vcmJpdGFsL1NNXFxub3JiaXRlci9NXFxub3JjL1NNXFxub3JjaGFyZC9TTVxcbm9yY2hlc3RyYS9NU1xcbm9yY2hlc3RyYWxcXG5vcmNoZXN0cmF0ZS9EU1hHTlxcbm9yY2hlc3RyYXRpb24vTVxcbm9yY2hpZC9TTVxcbm9yZGFpbi9TRExHXFxub3JkYWlubWVudC9NXFxub3JkZWFsL1NNXFxub3JkZXIvRUFNREdTXFxub3JkZXJlZC9VXFxub3JkZXJpbmdzXFxub3JkZXJsaW5lc3MvRU1cXG5vcmRlcmx5L1BTTVxcbm9yZGluYWwvU01cXG5vcmRpbmFuY2UvU01cXG5vcmRpbmFyaWx5XFxub3JkaW5hcmluZXNzL01cXG5vcmRpbmFyeS9TTVBcXG5vcmRpbmF0ZS9NTlNYXFxub3JkaW5hdGlvbi9NXFxub3JkbmFuY2UvTVxcbm9yZHVyZS9NXFxub3JlL1NNXFxub3JlZ2Fuby9NXFxub3JnXFxub3JnYW4vTVNcXG5vcmdhbmR5L01cXG5vcmdhbmVsbGUvTVNcXG5vcmdhbmljL1NNXFxub3JnYW5pY2FsbHkvSVxcbm9yZ2FuaXNtL01TXFxub3JnYW5pc21pY1xcbm9yZ2FuaXN0L01TXFxub3JnYW5pemF0aW9uL0FTTVxcbm9yZ2FuaXphdGlvbmFsL1lcXG5vcmdhbml6ZS9BRVNER1xcbm9yZ2FuaXplZC9VXFxub3JnYW5pemVyL01TXFxub3JnYW56YS9NXFxub3JnYXNtL1NNXFxub3JnYXNtaWNcXG5vcmdpYXN0aWNcXG5vcmd5L1NNXFxub3JpZWwvTVNcXG5vcmllbnQnc1xcbm9yaWVudC9BRURHU1xcbm9yaWVudGFsL01TXFxub3JpZW50YWxpc3QvU1xcbm9yaWVudGF0ZS9FRFNHTlxcbm9yaWVudGF0aW9uL0FFTVxcbm9yaWVudGF0aW9uc1xcbm9yaWVudGVlcmluZ1xcbm9yaWZpY2UvTVNcXG5vcmlnXFxub3JpZ2FtaS9NXFxub3JpZ2luL1NNXFxub3JpZ2luYWwvTVlTXFxub3JpZ2luYWxpdHkvTVxcbm9yaWdpbmF0ZS9EU0dOXFxub3JpZ2luYXRpb24vTVxcbm9yaWdpbmF0b3IvU01cXG5vcmlvbGUvU01cXG5vcmlzb24vU01cXG5vcm1vbHUvTVxcbm9ybmFtZW50L1NHTURcXG5vcm5hbWVudGFsXFxub3JuYW1lbnRhdGlvbi9NXFxub3JuYXRlL1lQXFxub3JuYXRlbmVzcy9NXFxub3JuZXJpbmVzcy9NXFxub3JuZXJ5L1BSVFxcbm9ybml0aG9sb2dpY2FsXFxub3JuaXRob2xvZ2lzdC9NU1xcbm9ybml0aG9sb2d5L01cXG5vcm90dW5kXFxub3JvdHVuZGl0eS9TTVxcbm9ycGhhbi9TTURHXFxub3JwaGFuYWdlL01TXFxub3JyaXMvTVNcXG5vcnRob2RvbnRpYS9NXFxub3J0aG9kb250aWMvU1xcbm9ydGhvZG9udGljcy9NXFxub3J0aG9kb250aXN0L1NNXFxub3J0aG9kb3gvVVxcbm9ydGhvZG94eS9TTVxcbm9ydGhvZ29uYWxcXG5vcnRob2dvbmFsaXR5XFxub3J0aG9ncmFwaGljXFxub3J0aG9ncmFwaGljYWxseVxcbm9ydGhvZ3JhcGh5L1NNXFxub3J0aG9wZWRpYy9TXFxub3J0aG9wZWRpY3MvTVxcbm9ydGhvcGVkaXN0L01TXFxub3J6by9NXFxub3NjaWxsYXRlL0dORFNYXFxub3NjaWxsYXRpb24vTVxcbm9zY2lsbGF0b3IvU01cXG5vc2NpbGxhdG9yeVxcbm9zY2lsbG9zY29wZS9NU1xcbm9zY3VsYXRlL0RTWEdOXFxub3NjdWxhdGlvbi9NXFxub3NpZXIvTVNcXG5vc21pdW0vTVxcbm9zbW9zaXMvTVxcbm9zbW90aWNcXG5vc3ByZXkvU01cXG5vc3NpY2xlc1xcbm9zc2lmaWNhdGlvbi9NXFxub3NzaWZ5L05HRFNcXG5vc3RlbnNpYmxlXFxub3N0ZW5zaWJseVxcbm9zdGVudGF0aW9uL01cXG5vc3RlbnRhdGlvdXMvWVxcbm9zdGVvYXJ0aHJpdGlzL01cXG5vc3Rlb3BhdGgvTVxcbm9zdGVvcGF0aGljXFxub3N0ZW9wYXRoc1xcbm9zdGVvcGF0aHkvTVxcbm9zdGVvcG9yb3Npcy9NXFxub3N0bGVyL1NcXG5vc3RyYWNpc20vTVxcbm9zdHJhY2l6ZS9HRFNcXG5vc3RyaWNoL01TXFxub3RoZXIvTVNQXFxub3RoZXJ3aXNlXFxub3RoZXJ3b3JsZGx5XFxub3Rpb3NlXFxub3R0ZXIvTVNcXG5vdHRvbWFuL01TXFxub3VibGlldHRlL01TXFxub3VjaFxcbm91Z2h0XFxub3VnaHRuJ3RcXG5vdW5jZS9NU1xcbm91ci9TXFxub3Vyc2VsdmVzXFxub3VzdC9aR0RSU1xcbm91c3Rlci9NXFxub3V0L1NKR01EUlxcbm91dGFnZS9TTVxcbm91dGFyZ3VlL0dEU1xcbm91dGJhY2svTVNcXG5vdXRiYWxhbmNlL0RTR1xcbm91dGJpZC9TXFxub3V0YmlkZGluZ1xcbm91dGJvYXJkL01TXFxub3V0Ym9hc3QvRFNHXFxub3V0Ym91bmRcXG5vdXRib3gvTVNcXG5vdXRicmVhay9NU1xcbm91dGJ1aWxkaW5nL01TXFxub3V0YnVyc3QvU01cXG5vdXRjYXN0L01TXFxub3V0Y2xhc3MvRFNHXFxub3V0Y29tZS9NU1xcbm91dGNyb3AvTVNcXG5vdXRjcm9wcGVkXFxub3V0Y3JvcHBpbmcvU01cXG5vdXRjcnkvU01cXG5vdXRkYXRlZFxcbm91dGRpZFxcbm91dGRpc3RhbmNlL0dEU1xcbm91dGRvL0dcXG5vdXRkb2VzXFxub3V0ZG9uZVxcbm91dGRvb3IvU1xcbm91dGRvb3JzL01cXG5vdXRkb29yc3lcXG5vdXRkcmF3L0dTXFxub3V0ZHJhd25cXG5vdXRkcmV3XFxub3V0ZXJjb3Vyc2VcXG5vdXRlcm1vc3RcXG5vdXRlcndlYXIvTVxcbm91dGZhY2UvR0RTXFxub3V0ZmFsbC9TXFxub3V0ZmllbGQvU01SWlxcbm91dGZpZWxkZXIvTVxcbm91dGZpZ2h0L1NHXFxub3V0Zml0L1NNXFxub3V0Zml0dGVkXFxub3V0Zml0dGVyL01TXFxub3V0Zml0dGluZ1xcbm91dGZsYW5rL0dTRFxcbm91dGZsb3cvTVNcXG5vdXRmb3VnaHRcXG5vdXRmb3gvR0RTXFxub3V0Z28vTUpHXFxub3V0Z29lc1xcbm91dGdyZXdcXG5vdXRncm93L0hHU1xcbm91dGdyb3duXFxub3V0Z3Jvd3RoL01cXG5vdXRncm93dGhzXFxub3V0Z3Vlc3MvR0RTXFxub3V0Z3VuL1NcXG5vdXRndW5uZWRcXG5vdXRndW5uaW5nXFxub3V0aGl0L1NcXG5vdXRoaXR0aW5nXFxub3V0aG91c2UvU01cXG5vdXRpbmcvTVxcbm91dGxhaWRcXG5vdXRsYW5kaXNoL1BZXFxub3V0bGFuZGlzaG5lc3MvTVxcbm91dGxhc3QvRFNHXFxub3V0bGF3L1NHTURcXG5vdXRsYXkvU0dNXFxub3V0bGV0L1NNXFxub3V0bGllci9TXFxub3V0bGluZS9NR0RTXFxub3V0bGl2ZS9HRFNcXG5vdXRsb29rL01TXFxub3V0bHlpbmdcXG5vdXRtYW5ldXZlci9HRFNcXG5vdXRtYXRjaC9HRFNcXG5vdXRtb2RlZFxcbm91dG51bWJlci9EU0dcXG5vdXRwYWNlL0dEU1xcbm91dHBhdGllbnQvTVNcXG5vdXRwZXJmb3JtL0dTRFxcbm91dHBsYWNlL0xcXG5vdXRwbGFjZW1lbnQvTVxcbm91dHBsYXkvR0RTXFxub3V0cG9pbnQvREdTXFxub3V0cG9zdC9NU1xcbm91dHBvdXJpbmcvTVNcXG5vdXRwcm9kdWNlL0RTR1xcbm91dHB1dC9TTVxcbm91dHB1dHRlZFxcbm91dHB1dHRpbmdcXG5vdXRyYWNlL0dEU1xcbm91dHJhZ2UvTUdEU1xcbm91dHJhZ2VvdXMvWVxcbm91dHJhblxcbm91dHJhbmsvR0RTXFxub3V0cmVcXG5vdXRyZWFjaC9NRFNHXFxub3V0cmlkZXIvTVNcXG5vdXRyaWdnZXIvU01cXG5vdXRyaWdodFxcbm91dHJ1bi9TXFxub3V0cnVubmluZ1xcbm91dHNjb3JlL0dEU1xcbm91dHNlbGwvR1NcXG5vdXRzZXQvU01cXG5vdXRzaGluZS9HU1xcbm91dHNob25lXFxub3V0c2hvdXQvR0RTXFxub3V0c2lkZS9NWlJTXFxub3V0c2lkZXIvTVxcbm91dHNpemUvTVNcXG5vdXRza2lydC9NU1xcbm91dHNtYXJ0L0dEU1xcbm91dHNvbGRcXG5vdXRzb3VyY2UvRFNHXFxub3V0c291cmNpbmcvTVxcbm91dHNwZW5kL1NHXFxub3V0c3BlbnRcXG5vdXRzcG9rZW4vWVBcXG5vdXRzcG9rZW5uZXNzL01cXG5vdXRzcHJlYWQvR1NcXG5vdXRzdGFuZGluZy9ZXFxub3V0c3RhdGlvbi9NU1xcbm91dHN0YXkvREdTXFxub3V0c3RyZXRjaC9EU0dcXG5vdXRzdHJpcC9TXFxub3V0c3RyaXBwZWRcXG5vdXRzdHJpcHBpbmdcXG5vdXR0YVxcbm91dHRha2UvTVNcXG5vdXR2b3RlL0dEU1xcbm91dHdhcmQvWVNcXG5vdXR3ZWFyL0dTXFxub3V0d2VpZ2gvR0RcXG5vdXR3ZWlnaHNcXG5vdXR3aXQvU1xcbm91dHdpdGhcXG5vdXR3aXR0ZWRcXG5vdXR3aXR0aW5nXFxub3V0d29yZVxcbm91dHdvcmsvTURSU1pHXFxub3V0d29yblxcbm91em8vTVNcXG5vdmFcXG5vdmFsL01TXFxub3Zhcmlhblxcbm92YXJ5L1NNXFxub3ZhdGUvTlhcXG5vdmF0aW9uL01cXG5vdmVuL01TXFxub3ZlbmJpcmQvU01cXG5vdmVucHJvb2ZcXG5vdmVud2FyZVxcbm92ZXIvTVlTXFxub3ZlcmFidW5kYW5jZS9NXFxub3ZlcmFidW5kYW50XFxub3ZlcmFjaGlldmUvWkdEUlNcXG5vdmVyYWNoaWV2ZXIvTVxcbm92ZXJhY3QvR1ZTRFxcbm92ZXJhZ2UvU01cXG5vdmVyYWdncmVzc2l2ZVxcbm92ZXJhbGwvU01cXG5vdmVyYWxscy9NXFxub3ZlcmFtYml0aW91c1xcbm92ZXJhbnhpb3VzXFxub3ZlcmFyY2hpbmdcXG5vdmVyYXJtL0dTRFxcbm92ZXJhdGVcXG5vdmVyYXR0ZW50aXZlXFxub3ZlcmF3ZS9EU0dcXG5vdmVyYmFsYW5jZS9NR0RTXFxub3ZlcmJlYXIvR1NcXG5vdmVyYmVhcmluZy9ZXFxub3ZlcmJpZC9TTVxcbm92ZXJiaWRkaW5nXFxub3ZlcmJpdGUvTVNcXG5vdmVyYmxvd25cXG5vdmVyYm9hcmRcXG5vdmVyYm9sZFxcbm92ZXJib29rL0RHU1xcbm92ZXJib3JlXFxub3ZlcmJvcm5lXFxub3ZlcmJvdWdodFxcbm92ZXJidWlsZC9TR1xcbm92ZXJidWlsdFxcbm92ZXJidXJkZW4vR1NEXFxub3ZlcmJ1eS9HU1xcbm92ZXJjYW1lXFxub3ZlcmNhcGFjaXR5L01cXG5vdmVyY2FwaXRhbGl6ZS9EU0dcXG5vdmVyY2FyZWZ1bFxcbm92ZXJjYXN0L01HU1xcbm92ZXJjYXV0aW91c1xcbm92ZXJjaGFyZ2UvRFNNR1xcbm92ZXJjbG9jay9HRFxcbm92ZXJjbG91ZC9TR0RcXG5vdmVyY29hdC9NU1xcbm92ZXJjb21lL0dTXFxub3ZlcmNvbXBlbnNhdGUvRFNHTlxcbm92ZXJjb21wZW5zYXRpb24vTVxcbm92ZXJjb25maWRlbmNlL01cXG5vdmVyY29uZmlkZW50XFxub3ZlcmNvbnNjaWVudGlvdXNcXG5vdmVyY29vay9ER1NcXG5vdmVyY3JpdGljYWxcXG5vdmVyY3Jvd2QvU0RHXFxub3ZlcmNyb3dkaW5nL01cXG5vdmVyZGVjb3JhdGUvRFNHXFxub3ZlcmRlcGVuZGVudFxcbm92ZXJkZXZlbG9wL1NER1xcbm92ZXJkaWRcXG5vdmVyZG8vR1xcbm92ZXJkb2VzXFxub3ZlcmRvbmVcXG5vdmVyZG9zZS9NR0RTXFxub3ZlcmRyYWZ0L1NNXFxub3ZlcmRyYXcvR1NcXG5vdmVyZHJhd25cXG5vdmVyZHJlc3MvR01EU1xcbm92ZXJkcmV3XFxub3ZlcmRyaXZlL1NNXFxub3ZlcmR1Yi9TTVxcbm92ZXJkdWJiZWRcXG5vdmVyZHViYmluZ1xcbm92ZXJkdWVcXG5vdmVyZWFnZXJcXG5vdmVyZWF0L0dTTlxcbm92ZXJlbW90aW9uYWxcXG5vdmVyZW1waGFzaXMvTVxcbm92ZXJlbXBoYXNpemUvR0RTXFxub3ZlcmVudGh1c2lhc3RpY1xcbm92ZXJlc3RpbWF0ZS9NR05EU1xcbm92ZXJlc3RpbWF0aW9uL01cXG5vdmVyZXhjaXRlL0RTR1xcbm92ZXJleGVyY2lzZS9HRFNcXG5vdmVyZXhlcnQvU0RHXFxub3ZlcmV4ZXJ0aW9uL01cXG5vdmVyZXhwb3NlL0dEU1xcbm92ZXJleHBvc3VyZS9NXFxub3ZlcmV4dGVuZC9ER1NcXG5vdmVyZmVkXFxub3ZlcmZlZWQvR1NcXG5vdmVyZmlsbC9ER1NcXG5vdmVyZmxld1xcbm92ZXJmbGlnaHQvTVNcXG5vdmVyZmxvdy9NRFNHXFxub3ZlcmZsb3duXFxub3ZlcmZseS9HU1xcbm92ZXJmb25kXFxub3ZlcmZ1bGxcXG5vdmVyZ2VuZXJhbGl6ZS9EU0dcXG5vdmVyZ2VuZXJvdXNcXG5vdmVyZ3JhemUvRFNHXFxub3ZlcmdyZXdcXG5vdmVyZ3JvdW5kXFxub3Zlcmdyb3cvSFNHXFxub3Zlcmdyb3duXFxub3Zlcmdyb3d0aC9NXFxub3ZlcmhhbmQvTURTXFxub3ZlcmhhbmcvTVNHXFxub3Zlcmhhc3R5XFxub3ZlcmhhdWwvTURTR1xcbm92ZXJoZWFkL01TXFxub3ZlcmhlYXIvU0dcXG5vdmVyaGVhcmRcXG5vdmVyaGVhdC9EU0dcXG5vdmVyaHVuZ1xcbm92ZXJpbmR1bGdlL0dEU1xcbm92ZXJpbmR1bGdlbmNlL01cXG5vdmVyaW5kdWxnZW50XFxub3ZlcmluZmxhdGVkXFxub3ZlcmpveS9HU0RcXG5vdmVya2lsbC9NXFxub3ZlcmxhZGVuXFxub3ZlcmxhaWRcXG5vdmVybGFpblxcbm92ZXJsYW5kXFxub3ZlcmxhcC9TTVxcbm92ZXJsYXBwZWRcXG5vdmVybGFwcGluZ1xcbm92ZXJsYXJnZVxcbm92ZXJsYXkvR1NNXFxub3ZlcmxlYWZcXG5vdmVybGllXFxub3ZlcmxvYWQvR01EU1xcbm92ZXJsb25nXFxub3Zlcmxvb2svR01EU1xcbm92ZXJsb3JkL01TXFxub3Zlcmx5L1NHXFxub3Zlcm1hbm5lZFxcbm92ZXJtYW5uaW5nXFxub3Zlcm1hc3Rlci9TREdcXG5vdmVybW9kZXN0XFxub3Zlcm11Y2gvU1xcbm92ZXJuaWNlXFxub3Zlcm5pZ2h0L01TXFxub3Zlcm9wdGltaXNtL01cXG5vdmVyb3B0aW1pc3RpY1xcbm92ZXJwYWlkXFxub3ZlcnBhcnRpY3VsYXJcXG5vdmVycGFzcy9NU1xcbm92ZXJwYXkvR1NcXG5vdmVycGxheS9HRFNcXG5vdmVycG9wdWxhdGUvR05EU1xcbm92ZXJwb3B1bGF0aW9uL01cXG5vdmVycG93ZXIvU0RHXFxub3ZlcnBvd2VyaW5nL1lcXG5vdmVycHJhaXNlL0RTR1xcbm92ZXJwcmVjaXNlXFxub3ZlcnByaWNlL0RTR1xcbm92ZXJwcmludC9TTURHXFxub3ZlcnByb2R1Y2UvR0RTXFxub3ZlcnByb2R1Y3Rpb24vTVxcbm92ZXJwcm90ZWN0L1NER1ZcXG5vdmVycXVhbGlmaWVkXFxub3ZlcnJhblxcbm92ZXJyYXRlL0dEU1xcbm92ZXJyZWFjaC9HRFNcXG5vdmVycmVhY3QvU0RHXFxub3ZlcnJlYWN0aW9uL1NNXFxub3ZlcnJlZmluZWRcXG5vdmVycmlkZGVuXFxub3ZlcnJpZGUvTUdTXFxub3ZlcnJpcGUvTVxcbm92ZXJyb2RlXFxub3ZlcnJ1bGUvR0RTXFxub3ZlcnJ1bi9TTVxcbm92ZXJydW5uaW5nXFxub3ZlcnNhbXBsaW5nXFxub3ZlcnNhd1xcbm92ZXJzZWEvU1xcbm92ZXJzZWUvUlNaXFxub3ZlcnNlZWluZ1xcbm92ZXJzZWVuXFxub3ZlcnNlZXIvTVxcbm92ZXJzZWxsL0dTXFxub3ZlcnNlbnNpdGl2ZS9QXFxub3ZlcnNlbnNpdGl2ZW5lc3MvTVxcbm92ZXJzZXhlZFxcbm92ZXJzaGFkb3cvRFNHXFxub3ZlcnNoYXJlL0RTR1xcbm92ZXJzaG9lL01TXFxub3ZlcnNob290L0dTXFxub3ZlcnNob3RcXG5vdmVyc2lnaHQvU01cXG5vdmVyc2ltcGxlXFxub3ZlcnNpbXBsaWZpY2F0aW9uL01cXG5vdmVyc2ltcGxpZnkvRFNOR1hcXG5vdmVyc2l6ZVxcbm92ZXJzbGVlcC9HU1xcbm92ZXJzbGVwdFxcbm92ZXJzb2xkXFxub3ZlcnNwZWNpYWxpemF0aW9uL01cXG5vdmVyc3BlY2lhbGl6ZS9HRFNcXG5vdmVyc3BlbmQvU0dcXG5vdmVyc3BlbnRcXG5vdmVyc3ByZWFkL0dTXFxub3ZlcnN0YWZmZWRcXG5vdmVyc3RhdGUvRFNMR1xcbm92ZXJzdGF0ZW1lbnQvTVNcXG5vdmVyc3RheS9EU0dcXG5vdmVyc3RlcC9TXFxub3ZlcnN0ZXBwZWRcXG5vdmVyc3RlcHBpbmdcXG5vdmVyc3RpbXVsYXRlL0RTR1xcbm92ZXJzdG9jay9HU0RcXG5vdmVyc3RyZXRjaC9HRFNcXG5vdmVyc3RyaWN0XFxub3ZlcnN0cnVuZ1xcbm92ZXJzdHVmZmVkXFxub3ZlcnN1YnNjcmliZS9EU0dcXG5vdmVyc3VidGxlXFxub3ZlcnN1cHBseS9HRFNcXG5vdmVyc3VzcGljaW91c1xcbm92ZXJ0L1lcXG5vdmVydGFrZS9HU1xcbm92ZXJ0YWtlblxcbm92ZXJ0YXgvR0RTXFxub3ZlcnRoaW5rL1NHXFxub3ZlcnRob3VnaHRcXG5vdmVydGhyZXdcXG5vdmVydGhyb3cvU01HXFxub3ZlcnRocm93blxcbm92ZXJ0aW1lL01TXFxub3ZlcnRpcmUvR0RTXFxub3ZlcnRvbmUvTVNcXG5vdmVydG9va1xcbm92ZXJ0dXJlL01TXFxub3ZlcnR1cm4vRFNHXFxub3ZlcnVzZS9EU01HXFxub3ZlcnZhbHVhdGlvbi9TXFxub3ZlcnZhbHVlL0RTR1xcbm92ZXJ2aWV3L01TXFxub3ZlcndlZW5pbmcvWVxcbm92ZXJ3ZWlnaHQvTVxcbm92ZXJ3aGVsbS9TR0RcXG5vdmVyd2hlbG1pbmcvWVxcbm92ZXJ3aW50ZXIvU0RHXFxub3ZlcndvcmsvR01EU1xcbm92ZXJ3cml0ZS9HU1xcbm92ZXJ3cml0dGVuXFxub3Zlcndyb3RlXFxub3Zlcndyb3VnaHRcXG5vdmVyemVhbG91c1xcbm92aWR1Y3QvU01cXG5vdmlwYXJvdXNcXG5vdm9pZC9NU1xcbm92dWxhclxcbm92dWxhdGUvRFNHTlxcbm92dWxhdGlvbi9NXFxub3Z1bGUvTVNcXG5vdnVtL01cXG5vd1xcbm93ZS9EU0dcXG5vd2wvU01cXG5vd2xldC9NU1xcbm93bGlzaC9ZXFxub3duL0VTR0RcXG5vd25lci9NU1xcbm93bmVyc2hpcC9NXFxub3gvTU5cXG5veGFsYXRlXFxub3hibG9vZC9NXFxub3hib3cvTVNcXG5veGNhcnQvU01cXG5veGZvcmQvU01cXG5veGlkYW50L01TXFxub3hpZGFzZVxcbm94aWRhdGlvbi9NXFxub3hpZGF0aXZlXFxub3hpZGUvTVNcXG5veGlkaXphdGlvbi9NXFxub3hpZGl6ZS9aR0RSU1xcbm94aWRpemVyL01cXG5veHRhaWwvU1xcbm94eWFjZXR5bGVuZS9NXFxub3h5Z2VuL01cXG5veHlnZW5hdGUvRFNHTlxcbm94eWdlbmF0aW9uL01cXG5veHltb3JhXFxub3h5bW9yb24vTVxcbm95c3Rlci9TTVxcbm96XFxub3pvbmUvTVxcbnAvTlJYVEdKXFxucEhcXG5wYS9TTUhcXG5wYWJsdW0vTVxcbnBhYnVsdW0vTVxcbnBhY2UvTVpHRFJTXFxucGFjZW1ha2VyL1NNXFxucGFjZXIvTVxcbnBhY2VzZXR0ZXIvU01cXG5wYWNleVxcbnBhY2h5ZGVybS9NU1xcbnBhY2h5c2FuZHJhL01TXFxucGFjaWZpY1xcbnBhY2lmaWNhbGx5XFxucGFjaWZpY2F0aW9uL01cXG5wYWNpZmllci9NXFxucGFjaWZpc20vTVxcbnBhY2lmaXN0L1NNXFxucGFjaWZpc3RpY1xcbnBhY2lmeS9aR0RSU05cXG5wYWNrJ3NcXG5wYWNrL0FVR1NEXFxucGFja2FnZSdzXFxucGFja2FnZS9BR0RTXFxucGFja2FnZXIvU01cXG5wYWNrYWdpbmcvTVxcbnBhY2tlci9NU1xcbnBhY2tldC9NU1xcbnBhY2tpbmcnc1xcbnBhY2tpbmdob3VzZS9TTVxcbnBhY2tzYWRkbGUvTVNcXG5wYWN0L01TXFxucGFjeS9SVFxcbnBhZC9TTVxcbnBhZGRlZFxcbnBhZGRpbmcvTVxcbnBhZGRsZS9NWkdEUlNcXG5wYWRkbGVyL01cXG5wYWRkb2NrL01ER1NcXG5wYWRkeS9TTVxcbnBhZGxvY2svTURTR1xcbnBhZHJlL1NNXFxucGFlYW4vU01cXG5wYWVsbGEvTVNcXG5wYWdhbi9TTVxcbnBhZ2FuaXNtL01cXG5wYWdlL01aR0RSU1xcbnBhZ2VhbnQvTVNcXG5wYWdlYW50cnkvTVxcbnBhZ2Vib3kvU01cXG5wYWdlci9NXFxucGFnaW5hdGUvRFNHTlxcbnBhZ2luYXRpb24vTVxcbnBhZ29kYS9NU1xcbnBhaFxcbnBhaWQvQVVcXG5wYWlsL01TXFxucGFpbGZ1bC9TTVxcbnBhaW4vTURTR1xcbnBhaW5mdWwvUFlcXG5wYWluZnVsbGVyXFxucGFpbmZ1bGxlc3RcXG5wYWluZnVsbmVzcy9NXFxucGFpbmtpbGxlci9NU1xcbnBhaW5raWxsaW5nXFxucGFpbmxlc3MvUFlcXG5wYWlubGVzc25lc3MvTVxcbnBhaW5zdGFraW5nL01ZXFxucGFpbnQvU1pHSk1EUlxcbnBhaW50YmFsbFxcbnBhaW50Ym94L01TXFxucGFpbnRicnVzaC9NU1xcbnBhaW50ZWQvVVxcbnBhaW50ZXIvTVlcXG5wYWludGluZy9NXFxucGFpbnR3b3JrXFxucGFpci9BTURTR1xcbnBhaXJlZC9VXFxucGFpcmluZy9TXFxucGFpcndpc2VcXG5wYWlzbGV5L1NNXFxucGFqYW1hL1NcXG5wYWphbWFzL01cXG5wYWwvU01ZXFxucGFsYWNlL01TXFxucGFsYWRpbi9TTVxcbnBhbGFucXVpbi9TTVxcbnBhbGF0YWJsZS9VXFxucGFsYXRhbC9TTVxcbnBhbGF0YWxpemF0aW9uL01cXG5wYWxhdGFsaXplL0dEU1xcbnBhbGF0ZS9NQlNcXG5wYWxhdGlhbC9ZXFxucGFsYXRpbmF0ZS9NU1xcbnBhbGF0aW5lL01TXFxucGFsYXZlci9HU01EXFxucGFsYXp6aVxcbnBhbGF6em9cXG5wYWxlL01ZVEdQRFJTSlxcbnBhbGVmYWNlL01TXFxucGFsZW5lc3MvTVxcbnBhbGVvXFxucGFsZW9ncmFwaGVyL01TXFxucGFsZW9ncmFwaHkvTVxcbnBhbGVvbGl0aGljXFxucGFsZW9udG9sb2dpc3QvU01cXG5wYWxlb250b2xvZ3kvTVxcbnBhbGV0dGUvU01cXG5wYWxmcmV5L1NNXFxucGFsaW1vbnkvTVxcbnBhbGltcHNlc3QvTVNcXG5wYWxpbmRyb21lL01TXFxucGFsaW5kcm9taWNcXG5wYWxpbmcvTVxcbnBhbGlzYWRlL1NNXFxucGFsaXNoXFxucGFsbC9NRFNHXFxucGFsbGFkaXVtL01cXG5wYWxsYmVhcmVyL01TXFxucGFsbGV0L01TXFxucGFsbGlhdGUvRFNHTlZcXG5wYWxsaWF0aW9uL01cXG5wYWxsaWF0aXZlL1NNXFxucGFsbGlkL1lQXFxucGFsbGlkbmVzcy9NXFxucGFsbG9yL01cXG5wYWxtL01EU0dcXG5wYWxtYXRlXFxucGFsbWV0dG8vU01cXG5wYWxtaXN0L1NNXFxucGFsbWlzdHJ5L01cXG5wYWxtdG9wL1NNXFxucGFsbXkvVFJcXG5wYWxvbWluby9NU1xcbnBhbHBhYmxlXFxucGFscGFibHlcXG5wYWxwYXRlL0RTR05cXG5wYWxwYXRpb24vTVxcbnBhbHBpdGF0ZS9YR05EU1xcbnBhbHBpdGF0aW9uL01cXG5wYWxzeS9HRFNNXFxucGFsdHJpbmVzcy9NXFxucGFsdHJ5L1JQVFxcbnBhbXBhcy9NXFxucGFtcGVyL0RTR1xcbnBhbXBobGV0L01TXFxucGFtcGhsZXRlZXIvTVNcXG5wYW4vU01cXG5wYW5hY2VhL1NNXFxucGFuYWNoZS9NXFxucGFuYW1hL01TXFxucGFuYXRlbGxhL1NcXG5wYW5jYWtlL0RTTUdcXG5wYW5jaHJvbWF0aWNcXG5wYW5jcmVhcy9NU1xcbnBhbmNyZWF0aWNcXG5wYW5jcmVhdGl0aXNcXG5wYW5kYS9TTVxcbnBhbmRlbWljL1NNXFxucGFuZGVtb25pdW0vTVxcbnBhbmRlci9NRFJaR1NcXG5wYW5kZXJlci9NXFxucGFuZS9LTVxcbnBhbmVneXJpYy9TTVxcbnBhbmVsL1NHSk1EXFxucGFuZWxpbmcvTVxcbnBhbmVsaXN0L01TXFxucGFuZXNcXG5wYW5nL01TXFxucGFuaGFuZGxlL0RSU01aR1xcbnBhbmhhbmRsZXIvTVxcbnBhbmljL1NNXFxucGFuaWNrZWRcXG5wYW5pY2tpbmdcXG5wYW5pY2t5XFxucGFubmVkXFxucGFubmllci9TTVxcbnBhbm5pbmdcXG5wYW5vcGx5L1NNXFxucGFub3JhbWEvU01cXG5wYW5vcmFtaWNcXG5wYW5waXBlcy9NXFxucGFuc3kvU01cXG5wYW50L01EU0dcXG5wYW50YWxvb25zL01cXG5wYW50ZWNobmljb24vU1xcbnBhbnRoZWlzbS9NXFxucGFudGhlaXN0L1NNXFxucGFudGhlaXN0aWNcXG5wYW50aGVvbi9TTVxcbnBhbnRoZXIvTVNcXG5wYW50aWUvTVNcXG5wYW50by9TXFxucGFudG9taW1lL01HRFNcXG5wYW50b21pbWljXFxucGFudG9taW1pc3QvU01cXG5wYW50cnkvU01cXG5wYW50c3VpdC9TTVxcbnBhbnR5aG9zZS9NXFxucGFudHlsaW5lci9NXFxucGFudHl3YWlzdC9TTVxcbnBhcC9TTVxcbnBhcGEvTVNcXG5wYXBhY3kvU01cXG5wYXBhbFxcbnBhcGFyYXp6aS9NXFxucGFwYXJhenpvXFxucGFwYXlhL01TXFxucGFwZXIvU1pHTURSXFxucGFwZXJiYWNrL1NNXFxucGFwZXJiYXJrL1NcXG5wYXBlcmJvYXJkL01cXG5wYXBlcmJveS9TTVxcbnBhcGVyY2xpcC9TXFxucGFwZXJlci9NXFxucGFwZXJnaXJsL1NNXFxucGFwZXJoYW5nZXIvU01cXG5wYXBlcmhhbmdpbmcvTVxcbnBhcGVybGVzc1xcbnBhcGVyd2VpZ2h0L01TXFxucGFwZXJ3b3JrL01cXG5wYXBlcnlcXG5wYXBpbGxhL01cXG5wYXBpbGxhZVxcbnBhcGlsbGFyeVxcbnBhcGlzdC9NU1xcbnBhcG9vc2UvTVNcXG5wYXBweS9TTVxcbnBhcHJpa2EvTVxcbnBhcHlyaVxcbnBhcHlydXMvTVxcbnBhci9TWkdNRFJCSlxcbnBhcmEvTVNcXG5wYXJhYmxlL01TXFxucGFyYWJvbGEvU01cXG5wYXJhYm9saWNcXG5wYXJhY2V0YW1vbC9TXFxucGFyYWNodXRlL0RTTUdcXG5wYXJhY2h1dGlzdC9NU1xcbnBhcmFkZS9NWkdEUlNcXG5wYXJhZGVyL01cXG5wYXJhZGlnbS9TTVxcbnBhcmFkaWdtYXRpY1xcbnBhcmFkaXNhaWNhbFxcbnBhcmFkaXNlL1NNXFxucGFyYWRveC9NU1xcbnBhcmFkb3hpY2FsL1lcXG5wYXJhZmZpbi9NXFxucGFyYWdsaWRpbmdcXG5wYXJhZ29uL01TXFxucGFyYWdyYXBoL0dNRFxcbnBhcmFncmFwaHNcXG5wYXJha2VldC9TTVxcbnBhcmFsZWdhbC9NU1xcbnBhcmFsbGF4L01TXFxucGFyYWxsZWwvU0dNRFxcbnBhcmFsbGVsZWQvVVxcbnBhcmFsbGVsaXNtL01TXFxucGFyYWxsZWxpemF0aW9uXFxucGFyYWxsZWxpemVkXFxucGFyYWxsZWxvZ3JhbS9TTVxcbnBhcmFseXNlc1xcbnBhcmFseXNpcy9NXFxucGFyYWx5dGljL1NNXFxucGFyYWx5emUvRFNHXFxucGFyYWx5emluZy9ZXFxucGFyYW1hZ25ldGljXFxucGFyYW1lY2lhXFxucGFyYW1lY2l1bS9NXFxucGFyYW1lZGljL01TXFxucGFyYW1lZGljYWwvTVNcXG5wYXJhbWV0ZXIvTVNcXG5wYXJhbWV0ZXJpemUvRFxcbnBhcmFtZXRyaWNcXG5wYXJhbWlsaXRhcnkvU01cXG5wYXJhbW91bnRcXG5wYXJhbW91bnRjeVxcbnBhcmFtb3VyL1NNXFxucGFyYW5vaWEvTVxcbnBhcmFub2lhYy9NU1xcbnBhcmFub2lkL1NNXFxucGFyYW5vcm1hbFxcbnBhcmFwZXQvTVNcXG5wYXJhcGhlcm5hbGlhL01cXG5wYXJhcGhyYXNlL0RTTUdcXG5wYXJhcGxlZ2lhL01cXG5wYXJhcGxlZ2ljL1NNXFxucGFyYXByb2Zlc3Npb25hbC9NU1xcbnBhcmFwc3ljaG9sb2dpc3QvTVNcXG5wYXJhcHN5Y2hvbG9neS9NXFxucGFyYXF1YXQvTVxcbnBhcmFzYWlsaW5nXFxucGFyYXNjZW5kaW5nXFxucGFyYXNpdGUvU01cXG5wYXJhc2l0aWNcXG5wYXJhc2l0aWNhbC9ZXFxucGFyYXNpdGlzbS9NXFxucGFyYXNvbC9NU1xcbnBhcmFzeW1wYXRoZXRpYy9TXFxucGFyYXRoaW9uL01cXG5wYXJhdGh5cm9pZC9NU1xcbnBhcmF0cm9vcC9SWlNcXG5wYXJhdHJvb3Blci9NXFxucGFyYXRyb29wcy9NXFxucGFyYXR5cGhvaWQvTVxcbnBhcmJvaWwvRFNHXFxucGFyY2VsL0dNRFNcXG5wYXJjaC9MR0RTXFxucGFyY2htZW50L1NNXFxucGFyZG5lci9TXFxucGFyZG9uL1pHTURSQlNcXG5wYXJkb25hYmxlL1VcXG5wYXJkb25hYmx5L1VcXG5wYXJkb25lci9NXFxucGFyZS9TXFxucGFyZWdvcmljL01cXG5wYXJlbnQvR01EU1xcbnBhcmVudGFnZS9NXFxucGFyZW50YWxcXG5wYXJlbnRoZXNlc1xcbnBhcmVudGhlc2lzL01cXG5wYXJlbnRoZXNpemUvRFNHXFxucGFyZW50aGV0aWNcXG5wYXJlbnRoZXRpY2FsL1lcXG5wYXJlbnRob29kL01cXG5wYXJlbnRpbmcvTVxcbnBhcmVyL01cXG5wYXJlcy9TXFxucGFyZXNpcy9NXFxucGFyZmFpdC9NU1xcbnBhcmlhaC9NXFxucGFyaWFoc1xcbnBhcmlidXNcXG5wYXJpZXRhbFxcbnBhcmltdXR1ZWwvTVNcXG5wYXJpbmcvTVxcbnBhcmlzaC9NU1xcbnBhcmlzaGlvbmVyL01TXFxucGFyaXR5L0VTTVxcbnBhcmsvTURTR1xcbnBhcmthL1NNXFxucGFya2luZy9NXFxucGFya2xhbmRcXG5wYXJrb3VyXFxucGFya3dheS9NU1xcbnBhcmt5XFxucGFybGFuY2UvTVxcbnBhcmxheS9HTURTXFxucGFybGV5L0dNRFNcXG5wYXJsaWFtZW50L1NNXFxucGFybGlhbWVudGFyaWFuL1NNXFxucGFybGlhbWVudGFyeVxcbnBhcmxvci9NU1xcbnBhcmxvdXNcXG5wYXJtaWdpYW5hXFxucGFyb2NoaWFsL1lcXG5wYXJvY2hpYWxpc20vTVxcbnBhcm9kaXN0L1NNXFxucGFyb2R5L0dEU01cXG5wYXJvbGUvTUdEU1xcbnBhcm9sZWUvTVNcXG5wYXJvdGlkXFxucGFyb3h5c20vU01cXG5wYXJveHlzbWFsXFxucGFycXVldC9NRFNHXFxucGFycXVldHJ5L01cXG5wYXJyZWRcXG5wYXJyaWNpZGFsXFxucGFycmljaWRlL01TXFxucGFycmluZ1xcbnBhcnJvdC9HTURTXFxucGFycnkvR0RTTVxcbnBhcnNlL0RSU0dcXG5wYXJzZWMvTVNcXG5wYXJzaW1vbmlvdXMvWVxcbnBhcnNpbW9ueS9NXFxucGFyc2xleS9NXFxucGFyc25pcC9NU1xcbnBhcnNvbi9NU1xcbnBhcnNvbmFnZS9NU1xcbnBhcnQnc1xcbnBhcnQvQ0RTR1xcbnBhcnRha2UvWkdSU1xcbnBhcnRha2VuXFxucGFydGFrZXIvTVxcbnBhcnRlcnJlL1NNXFxucGFydGhlbm9nZW5lc2lzL01cXG5wYXJ0aWFsL01ZU1xcbnBhcnRpYWxpdHkvTVxcbnBhcnRpY2lwYW50L1NNXFxucGFydGljaXBhdGUvRFNHTlxcbnBhcnRpY2lwYXRpb24vTVxcbnBhcnRpY2lwYXRvci9NU1xcbnBhcnRpY2lwYXRvcnlcXG5wYXJ0aWNpcGlhbC9NXFxucGFydGljaXBsZS9NU1xcbnBhcnRpY2xlL1NNXFxucGFydGljbGVib2FyZC9NXFxucGFydGljdWxhci9TTVlcXG5wYXJ0aWN1bGFyaXR5L1NNXFxucGFydGljdWxhcml6YXRpb24vTVxcbnBhcnRpY3VsYXJpemUvRFNHXFxucGFydGljdWxhdGUvU01cXG5wYXJ0aW5nL01TXFxucGFydGlzYW4vU01cXG5wYXJ0aXNhbnNoaXAvTVxcbnBhcnRpdGlvbi9HTURTXFxucGFydGl0aXZlL01TXFxucGFydGx5XFxucGFydG5lci9NRFNHXFxucGFydG5lcnNoaXAvTVNcXG5wYXJ0b29rXFxucGFydHJpZGdlL1NNXFxucGFydHVyaXRpb24vTVxcbnBhcnR3YXlcXG5wYXJ0eS9HRFNNXFxucGFydmVudS9NU1xcbnBhc2NhbC9NU1xcbnBhc2NoYWxcXG5wYXNoYS9TTVxcbnBhc3MvTVxcbnBhc3NhYmx5XFxucGFzc2FnZS9NU1xcbnBhc3NhZ2V3YXkvTVNcXG5wYXNzYm9vay9NU1xcbnBhc3NlL0RSU0JYWkdOVlxcbnBhc3NlbC9NU1xcbnBhc3Nlbmdlci9TTVxcbnBhc3Nlci9NXFxucGFzc2VyYnkvTVxcbnBhc3NlcnNieVxcbnBhc3NpbVxcbnBhc3NpbmcvTVlcXG5wYXNzaW9uL0VNXFxucGFzc2lvbmF0ZS9FWVxcbnBhc3Npb25mbG93ZXIvU01cXG5wYXNzaW9ubGVzc1xcbnBhc3NpdmUvUE1ZU1xcbnBhc3NpdmVuZXNzL01cXG5wYXNzaXZpdHkvTVxcbnBhc3Npdml6YXRpb25cXG5wYXNzaXZpemUvRFNHXFxucGFzc2tleS9NU1xcbnBhc3NwaHJhc2UvU1xcbnBhc3Nwb3J0L01TXFxucGFzc3dvcmQvTVNcXG5wYXN0L0FNU1xcbnBhc3RhL1NNXFxucGFzdGUvRFNNR1xcbnBhc3RlYm9hcmQvTVxcbnBhc3RlbC9NU1xcbnBhc3Rlcm4vTVNcXG5wYXN0ZXVyaXphdGlvbi9NXFxucGFzdGV1cml6ZS9aR0RSU1xcbnBhc3RldXJpemVkL1VcXG5wYXN0ZXVyaXplci9NXFxucGFzdGljaGUvTVNcXG5wYXN0aWVcXG5wYXN0aWxsZS9NU1xcbnBhc3RpbWUvTVNcXG5wYXN0aW5lc3MvTVxcbnBhc3Rvci9NU1xcbnBhc3RvcmFsL01TXFxucGFzdG9yYXRlL01TXFxucGFzdHJhbWkvTVxcbnBhc3RyeS9TTVxcbnBhc3R1cmFnZS9NXFxucGFzdHVyZS9EU01HXFxucGFzdHVyZWxhbmQvTVxcbnBhc3R5L1BUUlNNXFxucGF0L1NNXFxucGF0Y2gvRUdNRFNcXG5wYXRjaGlseVxcbnBhdGNoaW5lc3MvTVxcbnBhdGNob3VsaVxcbnBhdGNod29yay9TTVxcbnBhdGNoeS9UUFJcXG5wYXRlL01TXFxucGF0ZWxsYS9NU1xcbnBhdGVsbGFlXFxucGF0ZW50L0dNRFlTXFxucGF0ZXJmYW1pbGlhcy9NU1xcbnBhdGVybmFsL1lcXG5wYXRlcm5hbGlzbS9NXFxucGF0ZXJuYWxpc3QvU1xcbnBhdGVybmFsaXN0aWNcXG5wYXRlcm5pdHkvTVxcbnBhdGVybm9zdGVyL01TXFxucGF0aC9NXFxucGF0aGV0aWNcXG5wYXRoZXRpY2FsbHlcXG5wYXRoZmluZGVyL1NNXFxucGF0aGxlc3NcXG5wYXRob2dlbi9TTVxcbnBhdGhvZ2VuaWNcXG5wYXRob2xvZ2ljYWwvWVxcbnBhdGhvbG9naXN0L1NNXFxucGF0aG9sb2d5L01cXG5wYXRob3MvTVxcbnBhdGhzXFxucGF0aHdheS9NU1xcbnBhdGllbmNlL01cXG5wYXRpZW50L0lNU1RcXG5wYXRpZW50ZXJcXG5wYXRpZW50bHlcXG5wYXRpbmEvTVNcXG5wYXRpbmVcXG5wYXRpby9TTVxcbnBhdGlzc2VyaWUvU1xcbnBhdG9pcy9NXFxucGF0cmVzZmFtaWxpYXNcXG5wYXRyaWFyY2gvTVxcbnBhdHJpYXJjaGFsXFxucGF0cmlhcmNoYXRlL01TXFxucGF0cmlhcmNoc1xcbnBhdHJpYXJjaHkvU01cXG5wYXRyaWNpYW4vU01cXG5wYXRyaWNpZGFsXFxucGF0cmljaWRlL1NNXFxucGF0cmltb25pYWxcXG5wYXRyaW1vbnkvU01cXG5wYXRyaW90L1NNXFxucGF0cmlvdGljL1VcXG5wYXRyaW90aWNhbGx5XFxucGF0cmlvdGlzbS9NXFxucGF0cm9sL01TXFxucGF0cm9sbGVkXFxucGF0cm9sbGluZ1xcbnBhdHJvbG1hbi9NXFxucGF0cm9sbWVuXFxucGF0cm9sd29tYW4vTVxcbnBhdHJvbHdvbWVuXFxucGF0cm9uL01TXFxucGF0cm9uYWdlL01TXFxucGF0cm9uZXNzL01TXFxucGF0cm9uaXplL1pHRFJTXFxucGF0cm9uaXplci9NXFxucGF0cm9uaXppbmcvWVxcbnBhdHJvbnltaWMvU01cXG5wYXRyb255bWljYWxseVxcbnBhdHJvb24vU01cXG5wYXRzeS9TTVxcbnBhdHRlZFxcbnBhdHRlci9NREdTXFxucGF0dGVybi9TTURHXFxucGF0dGluZ1xcbnBhdHR5L1NNXFxucGF1Y2l0eS9NXFxucGF1bmNoL01TXFxucGF1bmNoeS9SVFxcbnBhdXBlci9NU1xcbnBhdXBlcmlzbS9NXFxucGF1cGVyaXplL0RTR1xcbnBhdXNlL0RTTUdcXG5wYXZlL0FHRFNcXG5wYXZlZC9VXFxucGF2ZW1lbnQvTVNcXG5wYXZpbGlvbi9TTVxcbnBhdmluZy9NU1xcbnBhdmxvdmEvU1xcbnBhdy9TR01EXFxucGF3bC9NU1xcbnBhd24vTURTR1xcbnBhd25icm9rZXIvTVNcXG5wYXduYnJva2luZy9NXFxucGF3bnNob3AvTVNcXG5wYXdwYXcvTVNcXG5wYXknc1xcbnBheS9BU0dCTFxcbnBheWJhY2svU01cXG5wYXljaGVjay9NU1xcbnBheWRheS9NU1xcbnBheWVkXFxucGF5ZWUvU01cXG5wYXllci9TTVxcbnBheWxvYWQvU01cXG5wYXltYXN0ZXIvU01cXG5wYXltZW50L0FTTVxcbnBheW9mZi9NU1xcbnBheW9sYS9NXFxucGF5b3V0L01TXFxucGF5cGhvbmUvU1xcbnBheXJvbGwvU01cXG5wYXlzbGlwL1NNXFxucGF5d2FsbC9TTVxcbnBheXdhcmVcXG5wY3RcXG5wZFxcbnBlYS9TTVxcbnBlYWNlL1NNXFxucGVhY2VhYmxlXFxucGVhY2VhYmx5XFxucGVhY2VmdWwvUFlcXG5wZWFjZWZ1bG5lc3MvTVxcbnBlYWNla2VlcGVyL1NNXFxucGVhY2VrZWVwaW5nL01cXG5wZWFjZW1ha2VyL01TXFxucGVhY2VtYWtpbmcvTVxcbnBlYWNldGltZS9NXFxucGVhY2gvTVNcXG5wZWFjaHkvVFJcXG5wZWFjb2NrL01TXFxucGVhZm93bC9NU1xcbnBlYWhlbi9NU1xcbnBlYWsvTURTR1xcbnBlYWt5XFxucGVhbC9BTURTR1xcbnBlYW51dC9NU1xcbnBlYXIvTVlTXFxucGVhcmwvU0dNRFxcbnBlYXJseS9SVFxcbnBlYXNhbnQvU01cXG5wZWFzYW50cnkvTVxcbnBlYXNob290ZXIvU01cXG5wZWF0L01cXG5wZWF0eS9UUlxcbnBlYmJsZS9NR0RTXFxucGViYmx5XFxucGVjYW4vU01cXG5wZWNjYWRpbGxvL01cXG5wZWNjYWRpbGxvZXNcXG5wZWNjYXJ5L1NNXFxucGVjay9NRFJTWkdcXG5wZWNraXNoXFxucGVjc1xcbnBlY3RpY1xcbnBlY3Rpbi9NXFxucGVjdG9yYWwvTVNcXG5wZWN0b3JhbGlzXFxucGVjdWxhdGUvR05EU1xcbnBlY3VsYXRpb24vTVxcbnBlY3VsYXRvci9TTVxcbnBlY3VsaWFyL1lcXG5wZWN1bGlhcml0eS9TTVxcbnBlY3VuaWFyeVxcbnBlZGFnb2dpY1xcbnBlZGFnb2dpY2FsL1lcXG5wZWRhZ29ndWUvU01cXG5wZWRhZ29neS9NXFxucGVkYWwvU0dNRFxcbnBlZGFsby9TXFxucGVkYW50L01TXFxucGVkYW50aWNcXG5wZWRhbnRpY2FsbHlcXG5wZWRhbnRyeS9NXFxucGVkZGxlL1pHRFJTXFxucGVkZGxlci9NXFxucGVkZXJhc3QvTVNcXG5wZWRlcmFzdHkvTVxcbnBlZGVzdGFsL01TXFxucGVkZXN0cmlhbi9TTVxcbnBlZGVzdHJpYW5pemF0aW9uXFxucGVkZXN0cmlhbml6ZS9HRFNcXG5wZWRpYXRyaWMvU1xcbnBlZGlhdHJpY2lhbi9NU1xcbnBlZGlhdHJpY3MvTVxcbnBlZGljYWIvU01cXG5wZWRpY3VyZS9NR0RTXFxucGVkaWN1cmlzdC9NU1xcbnBlZGlncmVlL01EU1xcbnBlZGltZW50L01TXFxucGVkb21ldGVyL01TXFxucGVkb3BoaWxlL1NcXG5wZWRvcGhpbGlhXFxucGVkdW5jbGUvTVNcXG5wZWUvRFJTTVpcXG5wZWVpbmdcXG5wZWVrL01EU0dcXG5wZWVrYWJvby9NXFxucGVlbC9NRFJTSlpHXFxucGVlbGVkL1VcXG5wZWVsZXIvTVxcbnBlZWxpbmcvTVxcbnBlZW4vTVNcXG5wZWVwL01EUlNaR1xcbnBlZXBib1xcbnBlZXBlci9NXFxucGVlcGhvbGUvTVNcXG5wZWVwc2hvdy9NU1xcbnBlZXIvTURHXFxucGVlcmFnZS9TTVxcbnBlZXJlc3MvTVNcXG5wZWVybGVzc1xcbnBlZXZlL0RTTUdcXG5wZWV2aXNoL1BZXFxucGVldmlzaG5lc3MvTVxcbnBlZXdlZS9NU1xcbnBlZXdpdC9TXFxucGVnL1NNXFxucGVnYm9hcmQvTVNcXG5wZWdnZWRcXG5wZWdnaW5nXFxucGVpZ25vaXIvU01cXG5wZWpvcmF0aW9uL01cXG5wZWpvcmF0aXZlL1NNWVxcbnBla2UvTVNcXG5wZWtpbmVzZXNcXG5wZWtpbmdlc2UvU01cXG5wZWtvZS9NXFxucGVsYWdpY1xcbnBlbGYvTVxcbnBlbGljYW4vTVNcXG5wZWxsYWdyYS9NXFxucGVsbGV0L0dNRFNcXG5wZWxsdWNpZFxcbnBlbG1ldC9TXFxucGVsdC9NRFNHXFxucGVsdmljXFxucGVsdmlzL01TXFxucGVtbWljYW4vTVxcbnBlbi9NXFxucGVuYWxcXG5wZW5hbGl6YXRpb24vTVxcbnBlbmFsaXplL0RTR1xcbnBlbmFsdHkvU01cXG5wZW5hbmNlL01TXFxucGVuY2VcXG5wZW5jaGFudC9TTVxcbnBlbmNpbC9HTURKU1xcbnBlbmQvQ0RTR1xcbnBlbmRhbnQvTVNcXG5wZW5kZW50L01TXFxucGVuZHVsb3VzXFxucGVuZHVsdW0vTVNcXG5wZW5ldHJhYmlsaXR5L01cXG5wZW5ldHJhYmxlXFxucGVuZXRyYXRlL0RTR05WWFxcbnBlbmV0cmF0aW5nL1lcXG5wZW5ldHJhdGlvbi9NXFxucGVuZnJpZW5kL1NcXG5wZW5ndWluL01TXFxucGVuaWNpbGxpbi9NXFxucGVuaWxlXFxucGVuaW5zdWxhL1NNXFxucGVuaW5zdWxhclxcbnBlbmlzL01TXFxucGVuaXRlbmNlL01cXG5wZW5pdGVudC9TTVlcXG5wZW5pdGVudGlhbFxcbnBlbml0ZW50aWFyeS9TTVxcbnBlbmtuaWZlL01cXG5wZW5rbml2ZXNcXG5wZW5saWdodC9TTVxcbnBlbm1hbi9NXFxucGVubWFuc2hpcC9NXFxucGVubWVuXFxucGVubmFudC9NU1xcbnBlbm5lZFxcbnBlbm5pbGVzc1xcbnBlbm5pbmdcXG5wZW5ub24vTVNcXG5wZW5ueS9TTVxcbnBlbm55d2VpZ2h0L01TXFxucGVubnl3b3J0aFxcbnBlbm9sb2dpc3QvTVNcXG5wZW5vbG9neS9NXFxucGVuc2lvbi9CWkdNRFJTXFxucGVuc2lvbmVyL01cXG5wZW5zaXZlL1BZXFxucGVuc2l2ZW5lc3MvTVxcbnBlbnRcXG5wZW50YWNsZS9NU1xcbnBlbnRhZ29uL01TXFxucGVudGFnb25hbFxcbnBlbnRhZ3JhbS9TTVxcbnBlbnRhbWV0ZXIvU01cXG5wZW50YXRobGV0ZS9NU1xcbnBlbnRhdGhsb24vTVNcXG5wZW50aG91c2UvU01cXG5wZW51Y2hlL01cXG5wZW51bHRpbWF0ZS9TTVxcbnBlbnVtYnJhL01TXFxucGVudW1icmFlXFxucGVudXJpb3VzL1BZXFxucGVudXJpb3VzbmVzcy9NXFxucGVudXJ5L01cXG5wZW9uL01TXFxucGVvbmFnZS9NXFxucGVvbnkvU01cXG5wZW9wbGUvTUdEU1xcbnBlcC9TTVxcbnBlcHBlZFxcbnBlcHBlci9HTURTXFxucGVwcGVyY29ybi9TTVxcbnBlcHBlcm1pbnQvU01cXG5wZXBwZXJvbmkvTVNcXG5wZXBwZXJ5XFxucGVwcGluZXNzL01cXG5wZXBwaW5nXFxucGVwcHkvVFBSXFxucGVwc2luL01cXG5wZXB0aWMvTVNcXG5wZXB0aWRlL1NcXG5wZXJhZHZlbnR1cmUvTVxcbnBlcmFtYnVsYXRlL1hHTkRTXFxucGVyYW1idWxhdGlvbi9NXFxucGVyYW1idWxhdG9yL01TXFxucGVyY2FsZS9NU1xcbnBlcmNlaXZlL0JHRFNcXG5wZXJjZWl2ZWQvVVxcbnBlcmNlbnQvTVNcXG5wZXJjZW50YWdlL1NNXFxucGVyY2VudGlsZS9TTVxcbnBlcmNlcHRpYmxlXFxucGVyY2VwdGlibHlcXG5wZXJjZXB0aW9uL1NNXFxucGVyY2VwdGlvbmFsXFxucGVyY2VwdGl2ZS9QWVxcbnBlcmNlcHRpdmVuZXNzL01cXG5wZXJjZXB0dWFsL1lcXG5wZXJjaC9HTURTXFxucGVyY2hhbmNlXFxucGVyY2lwaWVuY2UvTVxcbnBlcmNpcGllbnRcXG5wZXJjb2xhdGUvR05EU1xcbnBlcmNvbGF0aW9uL01cXG5wZXJjb2xhdG9yL1NNXFxucGVyY3Vzc2lvbi9BTVxcbnBlcmN1c3Npb25pc3QvTVNcXG5wZXJjdXNzaXZlXFxucGVyZGl0aW9uL01cXG5wZXJkdXJhYmxlXFxucGVyZWdyaW5hdGUvRFNYR05cXG5wZXJlZ3JpbmF0aW9uL01cXG5wZXJlZ3JpbmUvTVNcXG5wZXJlbXB0b3JpbHlcXG5wZXJlbXB0b3J5XFxucGVyZW5uaWFsL1NNWVxcbnBlcmVzdHJvaWthL01cXG5wZXJmZWN0L1BUR01EUllTXFxucGVyZmVjdGEvTVNcXG5wZXJmZWN0aWJpbGl0eS9NXFxucGVyZmVjdGlibGVcXG5wZXJmZWN0aW9uL1NNXFxucGVyZmVjdGlvbmlzbS9NXFxucGVyZmVjdGlvbmlzdC9TTVxcbnBlcmZlY3RuZXNzL01cXG5wZXJmaWRpb3VzL1lcXG5wZXJmaWR5L1NNXFxucGVyZm9yYXRlL0dOWERTXFxucGVyZm9yYXRpb24vTVxcbnBlcmZvcmNlXFxucGVyZm9ybS9TRFJaR1xcbnBlcmZvcm1hbmNlL1NNXFxucGVyZm9ybWF0aXZlXFxucGVyZm9ybWVkL1VcXG5wZXJmb3JtZXIvTVxcbnBlcmZ1bWUvRFJTTVpHXFxucGVyZnVtZXIvTVxcbnBlcmZ1bWVyeS9TTVxcbnBlcmZ1bmN0b3JpbHlcXG5wZXJmdW5jdG9yeVxcbnBlcmZ1c2lvblxcbnBlcmdvbGEvU01cXG5wZXJoYXBzXFxucGVyaWNhcmRpYVxcbnBlcmljYXJkaWFsXFxucGVyaWNhcmRpdGlzXFxucGVyaWNhcmRpdW0vTVxcbnBlcmlnZWUvU01cXG5wZXJpaGVsaWFcXG5wZXJpaGVsaW9uL01cXG5wZXJpbC9TR01EXFxucGVyaWxvdXMvWVxcbnBlcmltZXRlci9TTVxcbnBlcmluYXRhbFxcbnBlcmluZWFcXG5wZXJpbmV1bS9NXFxucGVyaW9kL01TXFxucGVyaW9kaWNcXG5wZXJpb2RpY2FsL1NNWVxcbnBlcmlvZGljaXR5L01cXG5wZXJpb2RvbnRhbFxcbnBlcmlvZG9udGljcy9NXFxucGVyaW9kb250aXN0L1NNXFxucGVyaXBhdGV0aWMvTVNcXG5wZXJpcGhlcmFsL01ZU1xcbnBlcmlwaGVyeS9TTVxcbnBlcmlwaHJhc2VzXFxucGVyaXBocmFzaXMvTVxcbnBlcmlwaHJhc3RpY1xcbnBlcmlzY29wZS9TTVxcbnBlcmlzaC9CRFJTWkdcXG5wZXJpc2hhYmxlL01TXFxucGVyaXN0YWxzZXNcXG5wZXJpc3RhbHNpcy9NXFxucGVyaXN0YWx0aWNcXG5wZXJpc3R5bGUvU01cXG5wZXJpdG9uZWFsXFxucGVyaXRvbmV1bS9NU1xcbnBlcml0b25pdGlzL01cXG5wZXJpd2lnL1NNXFxucGVyaXdpbmtsZS9TTVxcbnBlcmp1cmUvRFJTWkdcXG5wZXJqdXJlci9NXFxucGVyanVyeS9TTVxcbnBlcmsvTURTR1xcbnBlcmtpbHlcXG5wZXJraW5lc3MvTVxcbnBlcmt5L1RQUlxcbnBlcm0vTURTR1xcbnBlcm1hZnJvc3QvTVxcbnBlcm1hbmVuY2UvTVxcbnBlcm1hbmVuY3kvTVxcbnBlcm1hbmVudC9TTVlcXG5wZXJtZWFiaWxpdHkvTVxcbnBlcm1lYWJsZVxcbnBlcm1lYXRlL0dORFNcXG5wZXJtZWF0aW9uL01cXG5wZXJtaXNzaWJsZVxcbnBlcm1pc3NpYmx5XFxucGVybWlzc2lvbi9NU1xcbnBlcm1pc3NpdmUvUFlcXG5wZXJtaXNzaXZlbmVzcy9NXFxucGVybWl0L01TXFxucGVybWl0dGVkXFxucGVybWl0dGluZ1xcbnBlcm1pdHRpdml0eVxcbnBlcm11dGF0aW9uL1NNXFxucGVybXV0ZS9EU0dcXG5wZXJuaWNpb3VzL1lQXFxucGVybmljaW91c25lc3MvTVxcbnBlcm9yYXRpb24vTVNcXG5wZXJveGlkZS9NR0RTXFxucGVycGVuZGljdWxhci9TTVlcXG5wZXJwZW5kaWN1bGFyaXR5L01cXG5wZXJwZXRyYXRlL0RTR05cXG5wZXJwZXRyYXRpb24vTVxcbnBlcnBldHJhdG9yL01TXFxucGVycGV0dWFsL1NNWVxcbnBlcnBldHVhdGUvRFNHTlxcbnBlcnBldHVhdGlvbi9NXFxucGVycGV0dWl0eS9NXFxucGVycGxleC9HRFNcXG5wZXJwbGV4ZWQvWVxcbnBlcnBsZXhpbmcvWVxcbnBlcnBsZXhpdHkvU01cXG5wZXJxdWlzaXRlL1NNXFxucGVyc2VjdXRlL0dOWERTXFxucGVyc2VjdXRpb24vTVxcbnBlcnNlY3V0b3IvU01cXG5wZXJzZXZlcmFuY2UvTVxcbnBlcnNldmVyZS9EU0dcXG5wZXJzaWZsYWdlL01cXG5wZXJzaW1tb24vU01cXG5wZXJzaXN0L1NHRFxcbnBlcnNpc3RlbmNlL01cXG5wZXJzaXN0ZW50L1lcXG5wZXJzbmlja2V0eVxcbnBlcnNvbi9VTVNcXG5wZXJzb25hL1NNXFxucGVyc29uYWJsZVxcbnBlcnNvbmFlXFxucGVyc29uYWdlL01TXFxucGVyc29uYWwvTVlTXFxucGVyc29uYWxpdHkvU01cXG5wZXJzb25hbGl6ZS9DRFNHXFxucGVyc29uYWx0eS9NXFxucGVyc29uaWZpY2F0aW9uL01cXG5wZXJzb25pZnkvR0RTTlhcXG5wZXJzb25uZWwvTVxcbnBlcnNwZWN0aXZlL01TXFxucGVyc3BleFxcbnBlcnNwaWNhY2lvdXMvWVxcbnBlcnNwaWNhY2l0eS9NXFxucGVyc3BpY3VpdHkvTVxcbnBlcnNwaWN1b3VzXFxucGVyc3BpcmF0aW9uL01cXG5wZXJzcGlyZS9HRFNcXG5wZXJzdWFkZS9CWkdEUlNcXG5wZXJzdWFkZWQvVVxcbnBlcnN1YWRlci9NXFxucGVyc3Vhc2lvbi9TTVxcbnBlcnN1YXNpdmUvUFlcXG5wZXJzdWFzaXZlbmVzcy9NXFxucGVydC9SWVBUXFxucGVydGFpbi9HU0RcXG5wZXJ0aW5hY2lvdXMvWVxcbnBlcnRpbmFjaXR5L01cXG5wZXJ0aW5lbmNlL01cXG5wZXJ0aW5lbnQvWVxcbnBlcnRuZXNzL01cXG5wZXJ0dXJiL0RHU1xcbnBlcnR1cmJhdGlvbi9TTVxcbnBlcnR1cmJlZC9VXFxucGVydHVzc2lzL01cXG5wZXJ1a2UvTVNcXG5wZXJ1c2FsL01TXFxucGVydXNlL0dEU1xcbnBlcnYvU1xcbnBlcnZhZGUvRFNHXFxucGVydmFzaXZlL1BZXFxucGVydmFzaXZlbmVzcy9NXFxucGVydmVyc2UvUFhZTlxcbnBlcnZlcnNlbmVzcy9NXFxucGVydmVyc2lvbi9NXFxucGVydmVyc2l0eS9NXFxucGVydmVydC9TR01EXFxucGVzZXRhL01TXFxucGVza2lseVxcbnBlc2tpbmVzcy9NXFxucGVza3kvVFBSXFxucGVzby9NU1xcbnBlc3NhcnkvU1xcbnBlc3NpbWFsXFxucGVzc2ltaXNtL01cXG5wZXNzaW1pc3QvU01cXG5wZXNzaW1pc3RpY1xcbnBlc3NpbWlzdGljYWxseVxcbnBlc3QvTVJTWlxcbnBlc3Rlci9HRFxcbnBlc3RpY2lkZS9NU1xcbnBlc3RpZmVyb3VzXFxucGVzdGlsZW5jZS9TTVxcbnBlc3RpbGVudFxcbnBlc3RpbGVudGlhbFxcbnBlc3RsZS9NR0RTXFxucGVzdG8vTVxcbnBldC9TWk1SXFxucGV0YWJ5dGUvTVNcXG5wZXRham91bGUvU1xcbnBldGFsL1NNRFxcbnBldGFyZC9NU1xcbnBldGF3YXR0L1NcXG5wZXRjb2NrL1NNXFxucGV0ZXIvR01EXFxucGV0aW9sZS9TTVxcbnBldGl0ZS9NU1xcbnBldGl0aW9uL1pHTURSU1xcbnBldGl0aW9uYXJ5XFxucGV0aXRpb25lci9NXFxucGV0cmVsL01TXFxucGV0cmlmYWN0aW9uL01cXG5wZXRyaWZ5L0RTR1xcbnBldHJvY2hlbWljYWwvU01cXG5wZXRyb2RvbGxhci9NU1xcbnBldHJvbC9NXFxucGV0cm9sYXR1bS9NXFxucGV0cm9sZXVtL01cXG5wZXRyb2xvZ2lzdC9TTVxcbnBldHJvbG9neS9NXFxucGV0dGVkXFxucGV0dGljb2F0L01TXFxucGV0dGlmb2cvU1xcbnBldHRpZm9nZ2VkXFxucGV0dGlmb2dnZXIvU01cXG5wZXR0aWZvZ2dlcnkvTVxcbnBldHRpZm9nZ2luZ1xcbnBldHRpbHlcXG5wZXR0aW5lc3MvTVxcbnBldHRpbmcvTVxcbnBldHRpc2gvWVxcbnBldHR5L1BUUlxcbnBldHVsYW5jZS9NXFxucGV0dWxhbnQvWVxcbnBldHVuaWEvTVNcXG5wZXcvU01cXG5wZXdlZS9TTVxcbnBld2l0L1NNXFxucGV3dGVyL01TXFxucGV5b3RlL01cXG5wZlxcbnBmZW5uaWcvTVNcXG5wZ1xcbnBoYWV0b24vTVNcXG5waGFnZS9TXFxucGhhZ29jeXRlL1NNXFxucGhhbGFuZ2VyL1NNXFxucGhhbGFuZ2VzXFxucGhhbGFueC9NU1xcbnBoYWxsaVxcbnBoYWxsaWNcXG5waGFsbG9jZW50cmljXFxucGhhbGxvY2VudHJpc21cXG5waGFsbHVzL01cXG5waGFudGFzbS9NU1xcbnBoYW50YXNtYWdvcmlhL01TXFxucGhhbnRhc21hZ29yaWNhbFxcbnBoYW50YXNtYWxcXG5waGFudG9tL1NNXFxucGhhcmFvaC9NXFxucGhhcmFvaHNcXG5waGFyaXNhaWNcXG5waGFyaXNlZS9TTVxcbnBoYXJtYWNldXRpYy9NU1xcbnBoYXJtYWNldXRpY2FsL1NNXFxucGhhcm1hY2V1dGljcy9NXFxucGhhcm1hY2lzdC9NU1xcbnBoYXJtYWNvbG9naWNcXG5waGFybWFjb2xvZ2ljYWxcXG5waGFybWFjb2xvZ2lzdC9TTVxcbnBoYXJtYWNvbG9neS9NXFxucGhhcm1hY29wb2VpYS9NU1xcbnBoYXJtYWNvdGhlcmFweVxcbnBoYXJtYWN5L1NNXFxucGhhcnluZ2VhbFxcbnBoYXJ5bmdlc1xcbnBoYXJ5bmdpdGlzL01cXG5waGFyeW54L01cXG5waGFzZS9EU01HXFxucGhhc2VvdXQvU01cXG5waGF0XFxucGhlYXNhbnQvTVNcXG5waGVuYWNldGluL01cXG5waGVub2JhcmJpdGFsL01cXG5waGVub2wvTVxcbnBoZW5vbS9NU1xcbnBoZW5vbWVuYVxcbnBoZW5vbWVuYWwvWVxcbnBoZW5vbWVub2xvZ2ljYWxcXG5waGVub21lbm9sb2d5XFxucGhlbm9tZW5vbi9NU1xcbnBoZW5vdHlwZVxcbnBoZW55dG9pblxcbnBoZXJvbW9uZS9NU1xcbnBoZXdcXG5waGkvU01cXG5waGlhbC9TTVxcbnBoaWxhbmRlci9aR0RSU1xcbnBoaWxhbmRlcmVyL01cXG5waGlsYW5kZXJpbmcvTVxcbnBoaWxhbnRocm9waWNcXG5waGlsYW50aHJvcGljYWxseVxcbnBoaWxhbnRocm9waXN0L01TXFxucGhpbGFudGhyb3B5L1NNXFxucGhpbGF0ZWxpY1xcbnBoaWxhdGVsaXN0L01TXFxucGhpbGF0ZWx5L01cXG5waGlsaGFybW9uaWMvU01cXG5waGlsaXBwaWMvTVNcXG5waGlsaXN0aW5lL01TXFxucGhpbGlzdGluaXNtL01cXG5waGlsb2RlbmRyb24vU01cXG5waGlsb2xvZ2ljYWxcXG5waGlsb2xvZ2lzdC9NU1xcbnBoaWxvbG9neS9NXFxucGhpbG9zb3BoZXIvTVNcXG5waGlsb3NvcGhpY1xcbnBoaWxvc29waGljYWwvWVxcbnBoaWxvc29waGl6ZS9EUlNaR1xcbnBoaWxvc29waGl6ZXIvTVxcbnBoaWxvc29waHkvU01cXG5waGlsdGVyL01TXFxucGhpc2gvWkdEUlxcbnBoaXNoZXIvTVxcbnBobGViaXRpcy9NXFxucGhsZWdtL01cXG5waGxlZ21hdGljXFxucGhsZWdtYXRpY2FsbHlcXG5waGxvZW0vTVxcbnBobG94L01cXG5waG9iaWEvTVNcXG5waG9iaWMvTVNcXG5waG9lYmUvTVNcXG5waG9lbml4L01TXFxucGhvbmUvRFNNR1xcbnBob25lY2FyZC9TXFxucGhvbmVtZS9NU1xcbnBob25lbWljXFxucGhvbmVtaWNhbGx5XFxucGhvbmV0aWMvU1xcbnBob25ldGljYWxseVxcbnBob25ldGljaWFuL1NNXFxucGhvbmV0aWNzL01cXG5waG9uZXllZFxcbnBob25leWluZ1xcbnBob25pYy9TXFxucGhvbmljYWxseVxcbnBob25pY3MvTVxcbnBob25pbmVzcy9NXFxucGhvbm9ncmFwaC9NXFxucGhvbm9ncmFwaGljXFxucGhvbm9ncmFwaHNcXG5waG9ub2xvZ2ljYWwvWVxcbnBob25vbG9naXN0L01TXFxucGhvbm9sb2d5L01cXG5waG9ub25cXG5waG9ueS9QVEdEUlNNXFxucGhvb2V5XFxucGhvc3BoYXRlL01TXFxucGhvc3Bob2RpZXN0ZXJhc2VcXG5waG9zcGhvci9NU1xcbnBob3NwaG9yZXNjZW5jZS9NXFxucGhvc3Bob3Jlc2NlbnQvWVxcbnBob3NwaG9yaWNcXG5waG9zcGhvcm91c1xcbnBob3NwaG9ydXMvTVxcbnBob3NwaG9yeWxhdGlvblxcbnBob3RvL1NHTURcXG5waG90b2NlbGwvTVNcXG5waG90b2NvcGllci9NXFxucGhvdG9jb3B5L0RSU01aR1xcbnBob3RvZWxlY3RyaWNcXG5waG90b2VsZWN0cmljYWxseVxcbnBob3RvZW5ncmF2ZS9EUlNKWkdcXG5waG90b2VuZ3JhdmVyL01cXG5waG90b2VuZ3JhdmluZy9NXFxucGhvdG9maW5pc2hpbmcvTVxcbnBob3RvZ2VuaWNcXG5waG90b2dlbmljYWxseVxcbnBob3RvZ3JhcGgvTURSWkdcXG5waG90b2dyYXBoZXIvTVxcbnBob3RvZ3JhcGhpY1xcbnBob3RvZ3JhcGhpY2FsbHlcXG5waG90b2dyYXBocy9BXFxucGhvdG9ncmFwaHkvTVxcbnBob3Rvam91cm5hbGlzbS9NXFxucGhvdG9qb3VybmFsaXN0L1NNXFxucGhvdG9tZXRlci9NU1xcbnBob3Rvbi9NU1xcbnBob3Rvc2Vuc2l0aXZlXFxucGhvdG9zdGF0L1NNXFxucGhvdG9zdGF0aWNcXG5waG90b3N0YXR0ZWRcXG5waG90b3N0YXR0aW5nXFxucGhvdG9zeW50aGVzaXMvTVxcbnBob3Rvc3ludGhlc2l6ZS9HRFNcXG5waG90b3N5bnRoZXRpY1xcbnBob3RvdHJvcGljXFxucGhvdG90cm9waXNtXFxucGhvdG90eXBlc2V0dGVyXFxucGhvdG90eXBlc2V0dGluZ1xcbnBob3Rvdm9sdGFpY1xcbnBocmFzYWxcXG5waHJhc2Unc1xcbnBocmFzZS9BR0RTXFxucGhyYXNlYm9vay9TXFxucGhyYXNlb2xvZ3kvTVxcbnBocmFzaW5nL01TXFxucGhyZWFraW5nXFxucGhyZW5vbG9naXN0L1NNXFxucGhyZW5vbG9neS9NXFxucGh5bGFcXG5waHlsYWN0ZXJ5L1NNXFxucGh5bG9nZW55L01cXG5waHlsdW0vTVxcbnBoeXNcXG5waHlzaWMvU01cXG5waHlzaWNhbC9NWVNcXG5waHlzaWNhbGl0eVxcbnBoeXNpY2lhbi9TTVxcbnBoeXNpY2lzdC9TTVxcbnBoeXNpY2tlZFxcbnBoeXNpY2tpbmdcXG5waHlzaWNzL01cXG5waHlzaW8vU1xcbnBoeXNpb2dub215L1NNXFxucGh5c2lvZ3JhcGh5L01cXG5waHlzaW9sb2dpY1xcbnBoeXNpb2xvZ2ljYWwvWVxcbnBoeXNpb2xvZ2lzdC9NU1xcbnBoeXNpb2xvZ3kvTVxcbnBoeXNpb3RoZXJhcGlzdC9NU1xcbnBoeXNpb3RoZXJhcHkvTVxcbnBoeXNpcXVlL01TXFxucGh5dG9wbGFua3RvblxcbnBpL1NNRFJIWkdcXG5waWFuaXNzaW1vL1NNXFxucGlhbmlzdC9NU1xcbnBpYW5vL1NNXFxucGlhbm9mb3J0ZS9TTVxcbnBpYW5vbGEvU1xcbnBpYXN0ZXIvTVNcXG5waWF6emEvTVNcXG5waWJyb2NoL01cXG5waWJyb2Noc1xcbnBpYy9TTVxcbnBpY2EvTVxcbnBpY2Fkb3IvTVNcXG5waWNhbnRlXFxucGljYXJlc3F1ZVxcbnBpY2F5dW5lXFxucGljY2FsaWxsaS9NXFxucGljY29sby9NU1xcbnBpY2svTURSU0paR1xcbnBpY2theC9HTURTXFxucGlja2VyL01cXG5waWNrZXJlbC9NU1xcbnBpY2tldC9aR01EUlNcXG5waWNraW5ncy9NXFxucGlja2xlL01HRFNcXG5waWNrcG9ja2V0L1NNXFxucGlja3VwL01TXFxucGlja3kvUFRSXFxucGljbmljL01TXFxucGljbmlja2VkXFxucGljbmlja2VyL1NNXFxucGljbmlja2luZ1xcbnBpY290L1NNXFxucGljdG9ncmFtL1NcXG5waWN0b2dyYXBoL01cXG5waWN0b2dyYXBoc1xcbnBpY3RvcmlhbC9NWVNcXG5waWN0dXJlL01HRFNcXG5waWN0dXJlc3F1ZS9QWVxcbnBpY3R1cmVzcXVlbmVzcy9NXFxucGlkZGxlL01HRFNcXG5waWRkbHlcXG5waWRnaW4vTVNcXG5waWUvU01cXG5waWViYWxkL01TXFxucGllY2UvRFNNR1xcbnBpZWNlbWVhbFxcbnBpZWNld29yay9NUlpcXG5waWVjZXdvcmtlci9NXFxucGllY3J1c3QvU01cXG5waWVpbmdcXG5waWVyL01cXG5waWVyY2UvSkdEU1xcbnBpZXJjaW5nL01ZXFxucGlldHkvTVxcbnBpZXpvZWxlY3RyaWNcXG5waWZmbGUvTUdcXG5waWcvU01MXFxucGlnZW9uL01TXFxucGlnZW9uaG9sZS9EU01HXFxucGlnZ2VkXFxucGlnZ2VyeS9TXFxucGlnZ2luZ1xcbnBpZ2dpc2gvUFlcXG5waWdnaXNobmVzcy9NXFxucGlnZ3kvVFJTTVxcbnBpZ2d5YmFjay9NRFNHXFxucGlnaGVhZGVkL1BZXFxucGlnaGVhZGVkbmVzcy9NXFxucGlnbGV0L01TXFxucGlnbWVudC9NRFNcXG5waWdtZW50YXRpb24vTVxcbnBpZ3Blbi9NU1xcbnBpZ3NraW4vTVNcXG5waWdzdHkvU01cXG5waWdzd2lsbFxcbnBpZ3RhaWwvTVNcXG5waWtlL01aR0RSU1xcbnBpa2VyL01cXG5waWtlc3RhZmYvU01cXG5waWxhZi9TTVxcbnBpbGFzdGVyL01TXFxucGlsY2hhcmQvTVNcXG5waWxlL01HRFNKXFxucGlsZXVwL01TXFxucGlsZmVyL1pHRFJTXFxucGlsZmVyYWdlL01cXG5waWxmZXJlci9NXFxucGlsZ3JpbS9NU1xcbnBpbGdyaW1hZ2UvTVNcXG5waWxpbmcvTVxcbnBpbGwvTURTR1xcbnBpbGxhZ2UvTVpHRFJTXFxucGlsbGFnZXIvTVxcbnBpbGxhci9NRFNcXG5waWxsYm94L01TXFxucGlsbGlvbi9NU1xcbnBpbGxvY2svU1xcbnBpbGxvcnkvR0RTTVxcbnBpbGxvdy9HTURTXFxucGlsbG93Y2FzZS9NU1xcbnBpbGxvd3NsaXAvTVNcXG5waWxvdC9ER1NNXFxucGlsb3Rob3VzZS9TTVxcbnBpbWVudG8vTVNcXG5waW1pZW50by9NU1xcbnBpbXAvR01EWVNcXG5waW1wZXJuZWwvTVNcXG5waW1wbGUvRFNNXFxucGltcGx5L1JUXFxucGluL1NNXFxucGluYWZvcmUvTVNcXG5waW5hdGEvTVNcXG5waW5iYWxsL01cXG5waW5jZXIvTVNcXG5waW5jaC9HTURTXFxucGluY3VzaGlvbi9NU1xcbnBpbmUnc1xcbnBpbmUvQUdEU1xcbnBpbmVhcHBsZS9NU1xcbnBpbmV3b29kL1NcXG5waW5leVxcbnBpbmZlYXRoZXIvU01cXG5waW5nL0dNRFxcbnBpbmhlYWQvU01cXG5waW5ob2xlL1NNXFxucGluaWVyXFxucGluaWVzdFxcbnBpbmlvbi9TTURHXFxucGluay9UR1BNRFJTXFxucGlua2V5ZS9NXFxucGlua2llL1NNXFxucGlua2lzaFxcbnBpbmtuZXNzL01cXG5waW5rby9NU1xcbnBpbm5hY2xlL1NNXFxucGlubmF0ZVxcbnBpbm5lZC9VXFxucGlubmluZy9VXFxucGlubnkvU1xcbnBpbm9jaGxlL01cXG5waW5vbi9NU1xcbnBpbnBvaW50L1NHTURcXG5waW5wcmljay9NU1xcbnBpbnNldHRlci9TTVxcbnBpbnN0cmlwZS9EU01cXG5waW50L01TXFxucGludG8vTVNcXG5waW51cC9NU1xcbnBpbndoZWVsL0dTTURcXG5waW55aW4vTVxcbnBpbnlvbi9TTVxcbnBpb25lZXIvU0dNRFxcbnBpb3VzL1lQXFxucGlvdXNuZXNzL01cXG5waXAvU1pHTURSXFxucGlwZS9NU1xcbnBpcGVsaW5lL1NNXFxucGlwZXIvTVxcbnBpcGV0dGUvU01cXG5waXBld29ya1xcbnBpcGluZy9NXFxucGlwaXQvTVNcXG5waXBwZWRcXG5waXBwaW4vU01cXG5waXBwaW5nXFxucGlwc3F1ZWFrL1NNXFxucGlxdWFuY3kvTVxcbnBpcXVhbnQvWVxcbnBpcXVlL01HRFNcXG5waXJhY3kvTVxcbnBpcmFuaGEvU01cXG5waXJhdGUvRFNNR1xcbnBpcmF0aWNhbC9ZXFxucGlyb2dpL01cXG5waXJvc2hraS9NXFxucGlyb3VldHRlL0RTTUdcXG5waXNjYXRvcmlhbFxcbnBpc21pcmUvU01cXG5waXNzL1pHTURSU1xcbnBpc3NvaXIvU1xcbnBpc3RhY2hpby9TTVxcbnBpc3RlL1NcXG5waXN0aWwvU01cXG5waXN0aWxsYXRlXFxucGlzdG9sL1NNXFxucGlzdG9uL1NNXFxucGl0L1NNXFxucGl0YS9NU1xcbnBpdGFwYXQvU01cXG5waXRjaC9NRFJTWkdcXG5waXRjaGJsZW5kZS9NXFxucGl0Y2hlci9NXFxucGl0Y2hmb3JrL01EU0dcXG5waXRjaG1hbi9NXFxucGl0Y2htZW5cXG5waXRlb3VzL1lQXFxucGl0ZW91c25lc3MvTVxcbnBpdGZhbGwvU01cXG5waXRoL01cXG5waXRoZWFkL1NcXG5waXRoaWx5XFxucGl0aGluZXNzL01cXG5waXRoeS9SVFBcXG5waXRpYWJsZVxcbnBpdGlhYmx5XFxucGl0aWZ1bC9ZXFxucGl0aWxlc3MvUFlcXG5waXRpbGVzc25lc3MvTVxcbnBpdG9uL01TXFxucGl0dGEvU1xcbnBpdHRhbmNlL01TXFxucGl0dGVkXFxucGl0dGluZ1xcbnBpdHVpdGFyeS9TTVxcbnBpdHkvR0RTTVxcbnBpdHlpbmcvWVxcbnBpdm90L01ER1NcXG5waXZvdGFsXFxucGl4L01cXG5waXhlbC9NU1xcbnBpeGllL01TXFxucGl6emEvTVNcXG5waXp6YXp6L01cXG5waXp6ZXJpYS9TTVxcbnBpenppY2F0aVxcbnBpenppY2F0by9NXFxucGonc1xcbnBrXFxucGtnXFxucGt0XFxucGt3eVxcbnBsXFxucGxhY2FyZC9TTURHXFxucGxhY2F0ZS9EU0dOXFxucGxhY2F0aW9uL01cXG5wbGFjYXRvcnlcXG5wbGFjZSdzXFxucGxhY2UvQUVTRExHXFxucGxhY2Viby9TTVxcbnBsYWNlZC9VXFxucGxhY2Vob2xkZXIvTVNcXG5wbGFjZWtpY2svTURSWkdTXFxucGxhY2VraWNrZXIvTVxcbnBsYWNlbWVudC9FQVNNXFxucGxhY2VudGEvU01cXG5wbGFjZW50YWwvU1xcbnBsYWNlci9TTVxcbnBsYWNpZC9ZXFxucGxhY2lkaXR5L01cXG5wbGFjaW5nc1xcbnBsYWNrZXQvU01cXG5wbGFnaWFyaXNtL1NNXFxucGxhZ2lhcmlzdC9TTVxcbnBsYWdpYXJpemUvRFJTWkdcXG5wbGFnaWFyaXplci9NXFxucGxhZ2lhcnkvTVxcbnBsYWd1ZS9EU01HXFxucGxhaWNlXFxucGxhaWQvTVNcXG5wbGFpbi9NUllUU1BcXG5wbGFpbmNoYW50XFxucGxhaW5jbG90aGVzXFxucGxhaW5jbG90aGVzbWFuL01cXG5wbGFpbmNsb3RoZXNtZW5cXG5wbGFpbm5lc3MvTVxcbnBsYWluc21hbi9NXFxucGxhaW5zbWVuXFxucGxhaW5zb25nL01cXG5wbGFpbnNwb2tlblxcbnBsYWludC9TTVZcXG5wbGFpbnRpZmYvU01cXG5wbGFpbnRpdmUvWVxcbnBsYWl0L01ER1NcXG5wbGFuL1pNUlNcXG5wbGFuYXJcXG5wbGFuZSdzXFxucGxhbmUvQ0dEU1xcbnBsYW5lbG9hZC9NU1xcbnBsYW5lci9NXFxucGxhbmV0L1NNXFxucGxhbmV0YXJpdW0vU01cXG5wbGFuZXRhcnlcXG5wbGFuZ2VuY3kvTVxcbnBsYW5nZW50XFxucGxhbmsvTURHU1xcbnBsYW5raW5nL01cXG5wbGFua3Rvbi9NXFxucGxhbm5lZC9VXFxucGxhbm5lci9TTVxcbnBsYW5uaW5nL1NcXG5wbGFudC9NRFJaR1NKXFxucGxhbnRhaW4vU01cXG5wbGFudGFyXFxucGxhbnRhdGlvbi9NU1xcbnBsYW50ZXIvTVxcbnBsYW50aW5nL01cXG5wbGFudGxpa2VcXG5wbGFxdWUvU01cXG5wbGFzaC9NRFNHXFxucGxhc21hL01cXG5wbGFzbW9uXFxucGxhc3Rlci9TWkdNRFJcXG5wbGFzdGVyYm9hcmQvTVxcbnBsYXN0ZXJlci9NXFxucGxhc3RpYy9TTVxcbnBsYXN0aWNpdHkvTVxcbnBsYXN0aWNpemUvRFNHXFxucGxhc3RpcXVlXFxucGxhdC9YR01ETlNcXG5wbGF0ZS9NU1xcbnBsYXRlYXUvU01ER1xcbnBsYXRlZnVsL1NNXFxucGxhdGVsZXQvU01cXG5wbGF0ZW4vTVxcbnBsYXRmb3JtL1NHTURcXG5wbGF0aW5nL01cXG5wbGF0aW51bS9NXFxucGxhdGl0dWRlL1NNXFxucGxhdGl0dWRpbm91c1xcbnBsYXRvbmljXFxucGxhdG9vbi9TR01EXFxucGxhdHRlZFxcbnBsYXR0ZXIvU01cXG5wbGF0dGluZ1xcbnBsYXR5L01cXG5wbGF0eXB1cy9NU1xcbnBsYXR5c1xcbnBsYXVkaXQvU01cXG5wbGF1c2liaWxpdHkvTVxcbnBsYXVzaWJsZVxcbnBsYXVzaWJseVxcbnBsYXkvQUVHTURTXFxucGxheWFibGUvRVVcXG5wbGF5YWN0L1NHRFxcbnBsYXlhY3RpbmcvTVxcbnBsYXliYWNrL01TXFxucGxheWJpbGwvTVNcXG5wbGF5Ym9vay9NU1xcbnBsYXlib3kvU01cXG5wbGF5ZXIvU01cXG5wbGF5ZmVsbG93L1NNXFxucGxheWZ1bC9QWVxcbnBsYXlmdWxuZXNzL01cXG5wbGF5Z2lybC9NU1xcbnBsYXlnb2VyL01TXFxucGxheWdyb3VuZC9TTVxcbnBsYXlncm91cC9TXFxucGxheWhvdXNlL01TXFxucGxheWxpc3QvTVNcXG5wbGF5bWF0ZS9NU1xcbnBsYXlvZmYvU01cXG5wbGF5cGVuL1NNXFxucGxheXJvb20vU01cXG5wbGF5c2Nob29sL1NcXG5wbGF5dGhpbmcvU01cXG5wbGF5dGltZS9NXFxucGxheXdyaWdodC9TTVxcbnBsYXphL01TXFxucGxlYS9NU1xcbnBsZWFkL0RSWkdTSlxcbnBsZWFkZXIvTVxcbnBsZWFkaW5nL01ZXFxucGxlYXNhbnQvVVRZUFxcbnBsZWFzYW50ZXJcXG5wbGVhc2FudG5lc3MvVU1cXG5wbGVhc2FudHJ5L1NNXFxucGxlYXNlL0VEU0dcXG5wbGVhc2luZy9ZU1xcbnBsZWFzdXJhYmx5XFxucGxlYXN1cmUvTUdEU0JcXG5wbGVhc3VyZWZ1bFxcbnBsZWF0L01ER1NcXG5wbGViL1NcXG5wbGViYnlcXG5wbGViZS9NU1xcbnBsZWJlaWFuL01TXFxucGxlYmlzY2l0ZS9NU1xcbnBsZWN0cmFcXG5wbGVjdHJ1bS9NU1xcbnBsZWRnZS9EU01HXFxucGxlbmFyeS9TTVxcbnBsZW5pcG90ZW50aWFyeS9TTVxcbnBsZW5pdHVkZS9TTVxcbnBsZW50ZW91c1xcbnBsZW50aWZ1bC9ZXFxucGxlbnR5L01cXG5wbGVudW0vU1xcbnBsZW9uYXNtL01TXFxucGxldGhvcmEvTVxcbnBsZXVyYS9NXFxucGxldXJhZVxcbnBsZXVyaXN5L01cXG5wbGV4dXMvTVNcXG5wbGlhYmlsaXR5L01cXG5wbGlhYmxlXFxucGxpYW5jeS9NXFxucGxpYW50L1lcXG5wbGllcnMvTVxcbnBsaWdodC9TTURHXFxucGxpbXNvbGwvU1xcbnBsaW50aC9NXFxucGxpbnRoc1xcbnBsb2QvU1xcbnBsb2RkZWRcXG5wbG9kZGVyL01TXFxucGxvZGRpbmcvU1xcbnBsb25rL0RSU1pHXFxucGxvcC9NU1xcbnBsb3BwZWRcXG5wbG9wcGluZ1xcbnBsb3NpdmUvU1xcbnBsb3QvTVNcXG5wbG90dGVkXFxucGxvdHRlci9TTVxcbnBsb3R0aW5nXFxucGxvdmVyL1NNXFxucGxvdy9HTURTXFxucGxvd21hbi9NXFxucGxvd21lblxcbnBsb3dzaGFyZS9NU1xcbnBsb3knc1xcbnBsb3kvU1xcbnBsdWNrL01EU0dcXG5wbHVja2lseVxcbnBsdWNraW5lc3MvTVxcbnBsdWNreS9SUFRcXG5wbHVnJ3NcXG5wbHVnL1VTXFxucGx1Z2dlZC9VXFxucGx1Z2dpbmcvVVxcbnBsdWdob2xlL1NcXG5wbHVnaW4vU01cXG5wbHVtL0dNRFNcXG5wbHVtYWdlL01cXG5wbHVtYi9NRFJTWkdKXFxucGx1bWJlZC9VXFxucGx1bWJlci9NXFxucGx1bWJpbmcvTVxcbnBsdW1lL01TXFxucGx1bW1ldC9TR01EXFxucGx1bW15XFxucGx1bXAvTURSWVNUR1BcXG5wbHVtcG5lc3MvTVxcbnBsdW15L1JUXFxucGx1bmRlci9TWkdNRFJcXG5wbHVuZGVyZXIvTVxcbnBsdW5nZS9EUlNNWkdcXG5wbHVuZ2VyL01cXG5wbHVuay9NRFNHXFxucGx1cGVyZmVjdC9TTVxcbnBsdXJhbC9TTVxcbnBsdXJhbGlzbS9NXFxucGx1cmFsaXN0L01TXFxucGx1cmFsaXN0aWNcXG5wbHVyYWxpdHkvU01cXG5wbHVyYWxpemF0aW9uL01cXG5wbHVyYWxpemUvR0RTXFxucGx1cy9NU1xcbnBsdXNoL01SWVRQXFxucGx1c2huZXNzL01cXG5wbHVzaHkvUlRcXG5wbHV0b2NyYWN5L1NNXFxucGx1dG9jcmF0L1NNXFxucGx1dG9jcmF0aWNcXG5wbHV0b25pdW0vTVxcbnBsdXZpYWxcXG5wbHkvQUdEU01cXG5wbHl3b29kL01cXG5wbVxcbnBuZXVtYXRpY1xcbnBuZXVtYXRpY2FsbHlcXG5wbmV1bW9jb2NjYWxcXG5wbmV1bW9jb2NjaVxcbnBuZXVtb2NvY2N1c1xcbnBuZXVtb25pYS9NXFxucG9hY2gvRFJTWkdcXG5wb2FjaGVyL01cXG5wb2FjaGluZy9NXFxucG9jay9HTURTXFxucG9ja2V0L1NNREdcXG5wb2NrZXRib29rL1NNXFxucG9ja2V0ZnVsL1NNXFxucG9ja2V0a25pZmUvTVxcbnBvY2tldGtuaXZlc1xcbnBvY2ttYXJrL01ER1NcXG5wb2QvU01cXG5wb2RjYXN0L1NNR1xcbnBvZGRlZFxcbnBvZGRpbmdcXG5wb2RpYXRyaXN0L1NNXFxucG9kaWF0cnkvTVxcbnBvZGl1bS9TTVxcbnBvZW0vTVNcXG5wb2VzeS9NXFxucG9ldC9NU1xcbnBvZXRhc3Rlci9NU1xcbnBvZXRlc3MvTVNcXG5wb2V0aWMvU1xcbnBvZXRpY2FsL1lcXG5wb2V0cnkvTVxcbnBvZ3JvbS9TTVxcbnBvaS9NXFxucG9pZ25hbmN5L01cXG5wb2lnbmFudC9ZXFxucG9pbmNpYW5hL1NNXFxucG9pbnNldHRpYS9TTVxcbnBvaW50L01EUlNaR1xcbnBvaW50YmxhbmtcXG5wb2ludGVkL1lcXG5wb2ludGVyL01cXG5wb2ludGlsbGlzbS9NXFxucG9pbnRpbGxpc3QvU01cXG5wb2ludGxlc3MvUFlcXG5wb2ludGxlc3NuZXNzL01cXG5wb2ludHkvVFJcXG5wb2lzZS9NR0RTXFxucG9pc29uL1NKWkdNRFJcXG5wb2lzb25lci9NXFxucG9pc29uaW5nL01cXG5wb2lzb25vdXMvWVxcbnBva2UvTVpHRFJTXFxucG9rZXIvTVxcbnBva2V5L01TXFxucG9reS9UUlxcbnBvbC9TR01EXFxucG9sYXJcXG5wb2xhcml0eS9TTVxcbnBvbGFyaXphdGlvbi9DTVxcbnBvbGFyaXplL0NEU0dcXG5wb2xlL01TXFxucG9sZWF4ZS9HRFNcXG5wb2xlY2F0L01TXFxucG9sZW1pYy9NU1xcbnBvbGVtaWNhbC9ZXFxucG9sZW1pY2lzdC9TTVxcbnBvbGVtaWNzL01cXG5wb2xlc3Rhci9TTVxcbnBvbGljZS9EU01HXFxucG9saWNlbWFuL01cXG5wb2xpY2VtZW5cXG5wb2xpY2V3b21hbi9NXFxucG9saWNld29tZW5cXG5wb2xpY3kvU01cXG5wb2xpY3lob2xkZXIvTVNcXG5wb2xpY3ltYWtlci9TXFxucG9saW8vTVNcXG5wb2xpb215ZWxpdGlzL01cXG5wb2xpc2gvWkdNRFJTXFxucG9saXNoZWQvVVxcbnBvbGlzaGVyL01cXG5wb2xpdGJ1cm8vTVNcXG5wb2xpdGUvUllUUFxcbnBvbGl0ZW5lc3MvTVxcbnBvbGl0ZXNzZS9NXFxucG9saXRpYy9TXFxucG9saXRpY2FsL1lcXG5wb2xpdGljaWFuL1NNXFxucG9saXRpY2l6YXRpb24vTVxcbnBvbGl0aWNpemUvQ0RTR1xcbnBvbGl0aWNraW5nL01cXG5wb2xpdGljby9TTVxcbnBvbGl0aWNzL01cXG5wb2xpdHkvU01cXG5wb2xrYS9NRFNHXFxucG9sbC9HTUROU1xcbnBvbGxhY2svTVNcXG5wb2xsYXJkL1NcXG5wb2xsZW4vTVxcbnBvbGxpbmF0ZS9HTkRTXFxucG9sbGluYXRpb24vTVxcbnBvbGxpbmF0b3IvU01cXG5wb2xsaW5nL01cXG5wb2xsaXdvZy9TTVxcbnBvbGxzdGVyL1NNXFxucG9sbHV0YW50L01TXFxucG9sbHV0ZS9aR05EUlNcXG5wb2xsdXRlZC9VXFxucG9sbHV0ZXIvTVxcbnBvbGx1dGlvbi9NXFxucG9sby9NXFxucG9sb25haXNlL1NNXFxucG9sb25pdW0vTVxcbnBvbHRlcmdlaXN0L01TXFxucG9sdHJvb24vU01cXG5wb2x5XFxucG9seWFjcnlsYW1pZGVcXG5wb2x5YW1vcnkvU1xcbnBvbHlhbmRyb3VzXFxucG9seWFuZHJ5L01cXG5wb2x5Y2xpbmljL1NNXFxucG9seWVzdGVyL01TXFxucG9seWV0aHlsZW5lL01cXG5wb2x5Z2FtaXN0L01TXFxucG9seWdhbW91c1xcbnBvbHlnYW15L01cXG5wb2x5Z2xvdC9TTVxcbnBvbHlnb24vU01cXG5wb2x5Z29uYWxcXG5wb2x5Z3JhcGgvR01EXFxucG9seWdyYXBoc1xcbnBvbHloZWRyYWxcXG5wb2x5aGVkcm9uL1NNXFxucG9seW1hdGgvTVxcbnBvbHltYXRoc1xcbnBvbHltZXIvU01cXG5wb2x5bWVyaWNcXG5wb2x5bWVyaXphdGlvbi9NXFxucG9seW1lcml6ZS9HRFNcXG5wb2x5bW9ycGhpY1xcbnBvbHltb3JwaG91c1xcbnBvbHlub21pYWwvTVNcXG5wb2x5cC9NU1xcbnBvbHlwaG9uaWNcXG5wb2x5cGhvbnkvTVxcbnBvbHlwcm9weWxlbmUvTVxcbnBvbHlzXFxucG9seXNlbW91c1xcbnBvbHlzdHlyZW5lL01cXG5wb2x5c3lsbGFiaWNcXG5wb2x5c3lsbGFibGUvTVNcXG5wb2x5dGVjaG5pYy9NU1xcbnBvbHl0aGVpc20vTVxcbnBvbHl0aGVpc3QvU01cXG5wb2x5dGhlaXN0aWNcXG5wb2x5dGhlbmVcXG5wb2x5dW5zYXR1cmF0ZS9EU1xcbnBvbHl1cmV0aGFuZS9NU1xcbnBvbHl2aW55bFxcbnBvbS9TXFxucG9tYWRlL0RTTUdcXG5wb21hbmRlci9TTVxcbnBvbWVncmFuYXRlL01TXFxucG9tbWVsL1NHTURcXG5wb21teS9TXFxucG9tcC9NXFxucG9tcGFkb3VyL1NNRFxcbnBvbXBhbm8vTVNcXG5wb21wb20vU01cXG5wb21wb3NpdHkvTVxcbnBvbXBvdXMvWVBcXG5wb21wb3VzbmVzcy9NXFxucG9uY2UvR0RTXFxucG9uY2hvL1NNXFxucG9uY3lcXG5wb25kL01TXFxucG9uZGVyL1NaR0RSXFxucG9uZGVyZXIvTVxcbnBvbmRlcm91cy9ZUFxcbnBvbmRlcm91c25lc3MvTVxcbnBvbmUvTVNcXG5wb25nL0dEU1xcbnBvbmdlZS9NXFxucG9uaWFyZC9NU1xcbnBvbnRpZmYvU01cXG5wb250aWZpY2FsL1lcXG5wb250aWZpY2F0ZS9EU01HXFxucG9udG9vbi9TTVxcbnBvbnkvR0RTTVxcbnBvbnl0YWlsL01TXFxucG9vL1NHRFxcbnBvb2NoL01EU0dcXG5wb29kbGUvU01cXG5wb29mL01TXFxucG9vZnRlci9TXFxucG9vaC9HTURcXG5wb29oc1xcbnBvb2wvR01EU1xcbnBvb2xyb29tL01TXFxucG9vbHNpZGUvU1xcbnBvb3AvR01EU1xcbnBvb3IvVFJZUFxcbnBvb3Jib3kvTVxcbnBvb3Job3VzZS9TTVxcbnBvb3JuZXNzL01cXG5wb3AvU01cXG5wb3Bjb3JuL01cXG5wb3BlL01TXFxucG9wZ3VuL1NNXFxucG9waW5qYXkvTVNcXG5wb3BsYXIvU01cXG5wb3BsaW4vTVxcbnBvcG92ZXIvU01cXG5wb3BwYS9NU1xcbnBvcHBhZG9tL1NcXG5wb3BwZWRcXG5wb3BwZXIvU01cXG5wb3BwZXQvU1xcbnBvcHBpbmdcXG5wb3BweS9TTVxcbnBvcHB5Y29jay9NXFxucG9wdWxhY2UvTVNcXG5wb3B1bGFyL1lcXG5wb3B1bGFyaXR5L1VNXFxucG9wdWxhcml6YXRpb24vTVxcbnBvcHVsYXJpemUvRFNHXFxucG9wdWxhdGUvQUNHRFNcXG5wb3B1bGF0ZWQvVVxcbnBvcHVsYXRpb24vQ01cXG5wb3B1bGF0aW9uc1xcbnBvcHVsaXNtL01cXG5wb3B1bGlzdC9NU1xcbnBvcHVsb3VzL1BcXG5wb3B1bG91c25lc3MvTVxcbnBvcHVwL01TXFxucG9yY2VsYWluL1NNXFxucG9yY2gvTVNcXG5wb3JjaW5lXFxucG9yY3VwaW5lL1NNXFxucG9yZS9NR0RTXFxucG9yZ3kvU01cXG5wb3JrL1pNUlxcbnBvcmtlci9NXFxucG9ya3kvUlNNVFxcbnBvcm4vTVxcbnBvcm5vL01cXG5wb3Jub2dyYXBoZXIvTVNcXG5wb3Jub2dyYXBoaWNcXG5wb3Jub2dyYXBoaWNhbGx5XFxucG9ybm9ncmFwaHkvTVxcbnBvcm9zaXR5L01cXG5wb3JvdXMvUFxcbnBvcm91c25lc3MvTVxcbnBvcnBoeXJpdGljXFxucG9ycGh5cnkvTVxcbnBvcnBvaXNlL01HRFNcXG5wb3JyaWRnZS9NXFxucG9ycmluZ2VyL1NNXFxucG9ydCdzL0FcXG5wb3J0L0NBRUdEU1xcbnBvcnRhYmlsaXR5L01cXG5wb3J0YWJsZS9NU1xcbnBvcnRhZ2UvRFNNR1xcbnBvcnRhbC9TTVxcbnBvcnRjdWxsaXMvTVNcXG5wb3J0ZW5kL1NHRFxcbnBvcnRlbnQvU01cXG5wb3J0ZW50b3VzL1lQXFxucG9ydGVyL0FTTVxcbnBvcnRlcmhvdXNlL1NNXFxucG9ydGZvbGlvL01TXFxucG9ydGhvbGUvTVNcXG5wb3J0aWNvL01cXG5wb3J0aWNvZXNcXG5wb3J0aWVyZS9NU1xcbnBvcnRpb24vS1NHTURcXG5wb3J0bGluZXNzL01cXG5wb3J0bHkvUlBUXFxucG9ydG1hbnRlYXUvTVNcXG5wb3J0cmFpdC9NU1xcbnBvcnRyYWl0aXN0L1NNXFxucG9ydHJhaXR1cmUvTVxcbnBvcnRyYXkvU0dEXFxucG9ydHJheWFsL01TXFxucG9ydHVsYWNhL01cXG5wb3NlJ3MvQVxcbnBvc2UvQ0FLRUdEU1xcbnBvc2VyL0VLU01cXG5wb3NldXIvU01cXG5wb3NoL1RSXFxucG9zaXQvRFNHVlxcbnBvc2l0aW9uL0NLRU1TXFxucG9zaXRpb25hbC9LRVxcbnBvc2l0aW9uZWQvS1xcbnBvc2l0aW9uaW5nL0FLXFxucG9zaXRpdmUvTVlQU1xcbnBvc2l0aXZlbmVzcy9NXFxucG9zaXRpdmlzbVxcbnBvc2l0aXZpc3QvU1xcbnBvc2l0cm9uL01TXFxucG9zc1xcbnBvc3NlL01TXFxucG9zc2Vzcy9BRVZHU0RcXG5wb3NzZXNzaW9uL0FTTVxcbnBvc3Nlc3NpdmUvU01ZUFxcbnBvc3Nlc3NpdmVuZXNzL01cXG5wb3NzZXNzb3IvU01cXG5wb3NzaWJpbGl0eS9TTVxcbnBvc3NpYmxlL1NNXFxucG9zc2libHlcXG5wb3NzdW0vU01cXG5wb3N0L1pHTURSU0pcXG5wb3N0YWdlL01cXG5wb3N0YWxcXG5wb3N0YmFnL1NcXG5wb3N0Ym94L1NcXG5wb3N0Y2FyZC9TTVxcbnBvc3Rjb2RlL1NcXG5wb3N0Y29sb25pYWxcXG5wb3N0Y29uc29uYW50YWxcXG5wb3N0ZGF0ZS9EU0dcXG5wb3N0ZG9jL01TXFxucG9zdGRvY3RvcmFsXFxucG9zdGVyL01cXG5wb3N0ZXJpb3IvU01cXG5wb3N0ZXJpdHkvTVxcbnBvc3RncmFkdWF0ZS9TTVxcbnBvc3RoYXN0ZVxcbnBvc3RodW1vdXMvWVxcbnBvc3RoeXBub3RpY1xcbnBvc3RpZS9TXFxucG9zdGlsaW9uL1NNXFxucG9zdGluZHVzdHJpYWxcXG5wb3N0aW5nL01cXG5wb3N0bHVkZS9TTVxcbnBvc3RtYW4vTVxcbnBvc3RtYXJrL1NNREdcXG5wb3N0bWFzdGVyL01TXFxucG9zdG1lblxcbnBvc3RtZW5vcGF1c2FsXFxucG9zdG1lcmlkaWFuXFxucG9zdG1pc3RyZXNzL01TXFxucG9zdG1vZGVyblxcbnBvc3Rtb2Rlcm5pc20vTVxcbnBvc3Rtb2Rlcm5pc3QvTVNcXG5wb3N0bW9ydGVtL1NNXFxucG9zdG5hc2FsXFxucG9zdG5hdGFsXFxucG9zdG9wZXJhdGl2ZVxcbnBvc3RwYWlkXFxucG9zdHBhcnR1bVxcbnBvc3Rwb25lL0RTR0xcXG5wb3N0cG9uZW1lbnQvU01cXG5wb3N0cHJhbmRpYWxcXG5wb3N0c2NyaXB0L1NNXFxucG9zdHNlYXNvbi9TTVxcbnBvc3RzeW5hcHRpY1xcbnBvc3R1bGF0ZS9YRFNNR05cXG5wb3N0dWxhdGlvbi9NXFxucG9zdHVyYWxcXG5wb3N0dXJlL01HSkRTXFxucG9zdHVyaW5nL01cXG5wb3N0d2FyXFxucG9zdHdvbWFuXFxucG9zdHdvbWVuXFxucG9zeS9TTVxcbnBvdC9DU01cXG5wb3RhYmlsaXR5L01cXG5wb3RhYmxlL1NNXFxucG90YXNoL01cXG5wb3Rhc3NpdW0vTVxcbnBvdGF0by9NXFxucG90YXRvZXNcXG5wb3RiZWxseS9EU01cXG5wb3Rib2lsZXIvU01cXG5wb3RlbmN5L01cXG5wb3RlbnQvWVxcbnBvdGVudGF0ZS9NU1xcbnBvdGVudGlhbC9NWVNcXG5wb3RlbnRpYWxpdHkvU01cXG5wb3RlbnRpYXRlL0dEU1xcbnBvdGZ1bC9TTVxcbnBvdGhlYWQvU01cXG5wb3RoZXIvU01ER1xcbnBvdGhlcmIvU01cXG5wb3Rob2xkZXIvTVNcXG5wb3Rob2xlL0RSU01aR1xcbnBvdGhvb2svU01cXG5wb3Rpb24vU01cXG5wb3RsdWNrL01TXFxucG90cGllL1NNXFxucG90cG91cnJpL1NNXFxucG90c2hlcmQvU01cXG5wb3RzaG90L01TXFxucG90dGFnZS9NXFxucG90dGVkXFxucG90dGVyL0dTTURcXG5wb3R0ZXJ5L1NNXFxucG90dGluZ1xcbnBvdHR5L1BSU01UXFxucG91Y2gvTURTR1xcbnBvdWYvU1xcbnBvdWZmZS9TXFxucG91bHRlcmVyL01TXFxucG91bHRpY2UvRFNNR1xcbnBvdWx0cnkvTVxcbnBvdW5jZS9EU01HXFxucG91bmQnc1xcbnBvdW5kL0tEU0dcXG5wb3VuZGFnZS9NXFxucG91bmRpbmcvU01cXG5wb3VyL0dEU0pcXG5wb3V0L1pHTURSU1xcbnBvdXRlci9NXFxucG92ZXJ0eS9NXFxucG93XFxucG93ZGVyL0dTTURcXG5wb3dkZXJ5XFxucG93ZXIvTURTR1xcbnBvd2VyYm9hdC9NU1xcbnBvd2VyZnVsL1lcXG5wb3dlcmhvdXNlL1NNXFxucG93ZXJsZXNzL1BZXFxucG93ZXJsZXNzbmVzcy9NXFxucG93d293L1NHTURcXG5wb3gvTVNcXG5wcFxcbnBwbVxcbnBwclxcbnByXFxucHJhY3RpY2FiaWxpdHkvTVxcbnByYWN0aWNhYmx5XFxucHJhY3RpY2FsL1NNWVxcbnByYWN0aWNhbGl0eS9TTVxcbnByYWN0aWNlL0RTTUdCXFxucHJhY3RpY2VkL1VcXG5wcmFjdGljdW0vU01cXG5wcmFjdGl0aW9uZXIvU01cXG5wcmFldG9yL1NNXFxucHJhZXRvcmlhblxcbnByYWdtYXRpYy9NU1xcbnByYWdtYXRpY2FsL1lcXG5wcmFnbWF0aXNtL01cXG5wcmFnbWF0aXN0L01TXFxucHJhaXJpZS9TTVxcbnByYWlzZS9FRFNNR1xcbnByYWlzZXdvcnRoaW5lc3MvTVxcbnByYWlzZXdvcnRoeS9QXFxucHJhbGluZS9TTVxcbnByYW0vTVNcXG5wcmFuY2UvRFJTTVpHXFxucHJhbmNlci9NXFxucHJhbmNpbmcvWVxcbnByYW5nL0RTR1xcbnByYW5rL01TXFxucHJhbmtzdGVyL1NNXFxucHJhc2VvZHltaXVtL01cXG5wcmF0L1NcXG5wcmF0ZS9NWkdEUlNcXG5wcmF0ZXIvTVxcbnByYXRmYWxsL1NNXFxucHJhdHRsZS9EUlNNWkdcXG5wcmF0dGxlci9NXFxucHJhd24vTURTR1xcbnByYXkvWkdEUlNcXG5wcmF5ZXIvTVxcbnByYXllcmZ1bC9ZXFxucHJlYWNoL0RSU1pHTFxcbnByZWFjaGVyL01cXG5wcmVhY2htZW50L01cXG5wcmVhY2h5L1JUXFxucHJlYWRvbGVzY2VuY2UvU01cXG5wcmVhZG9sZXNjZW50XFxucHJlYW1ibGUvTUdEU1xcbnByZWFycmFuZ2UvTEdEU1xcbnByZWFycmFuZ2VtZW50L01cXG5wcmVhc3NpZ25lZFxcbnByZWNhbmNlbC9TTURHXFxucHJlY2FuY2Vyb3VzXFxucHJlY2FyaW91cy9QWVxcbnByZWNhcmlvdXNuZXNzL01cXG5wcmVjYXN0XFxucHJlY2F1dGlvbi9NU1xcbnByZWNhdXRpb25hcnlcXG5wcmVjZWRlL0RTR1xcbnByZWNlZGVuY2UvTVxcbnByZWNlZGVudC9TTVxcbnByZWNlcHQvU01cXG5wcmVjZXB0b3IvU01cXG5wcmVjaW5jdC9NU1xcbnByZWNpb3NpdHkvTVxcbnByZWNpb3VzL1lQXFxucHJlY2lvdXNuZXNzL01cXG5wcmVjaXBpY2UvU01cXG5wcmVjaXBpdGFudC9NU1xcbnByZWNpcGl0YXRlL1hNWUdORFNcXG5wcmVjaXBpdGF0aW9uL01cXG5wcmVjaXBpdG91cy9ZXFxucHJlY2lzL01cXG5wcmVjaXNlL0RSU1lUR05QXFxucHJlY2lzZW5lc3MvTVxcbnByZWNpc2lvbi9NXFxucHJlY2x1ZGUvR0RTXFxucHJlY2x1c2lvbi9NXFxucHJlY29jaW91cy9ZUFxcbnByZWNvY2lvdXNuZXNzL01cXG5wcmVjb2NpdHkvTVxcbnByZWNvZ25pdGlvbi9NXFxucHJlY29nbml0aXZlXFxucHJlY29sb25pYWxcXG5wcmVjb25jZWl2ZS9HRFNcXG5wcmVjb25jZXB0aW9uL1NNXFxucHJlY29uZGl0aW9uL01ER1NcXG5wcmVjb29rL0dTRFxcbnByZWN1cnNvci9TTVxcbnByZWN1cnNvcnlcXG5wcmVkYXRlL0RTR1xcbnByZWRhdG9yL01TXFxucHJlZGF0b3J5XFxucHJlZGF3blxcbnByZWRlY2Vhc2UvR0RTXFxucHJlZGVjZXNzb3IvU01cXG5wcmVkZWZpbmVkXFxucHJlZGVzaWduYXRlL0dEU1xcbnByZWRlc3RpbmF0aW9uL01cXG5wcmVkZXN0aW5lL0RTR1xcbnByZWRldGVybWluYXRpb24vTVxcbnByZWRldGVybWluZS9aR0RSU1xcbnByZWRldGVybWluZXIvTVxcbnByZWRpY2FibGVcXG5wcmVkaWNhbWVudC9NU1xcbnByZWRpY2F0ZS9NR05WRFNcXG5wcmVkaWNhdGlvbi9NXFxucHJlZGljYXRpdmUvWVxcbnByZWRpY3QvQkdWU0RcXG5wcmVkaWN0YWJpbGl0eS9VTVxcbnByZWRpY3RhYmxlL1VcXG5wcmVkaWN0YWJseS9VXFxucHJlZGljdGlvbi9TTVxcbnByZWRpY3Rvci9NU1xcbnByZWRpZ2VzdC9HRFNcXG5wcmVkaWxlY3Rpb24vU01cXG5wcmVkaXNwb3NlL0dEU1xcbnByZWRpc3Bvc2l0aW9uL01TXFxucHJlZG5pc29uZVxcbnByZWRvbWluYW5jZS9NXFxucHJlZG9taW5hbnQvWVxcbnByZWRvbWluYXRlL1lHRFNcXG5wcmVlbWllL1NNXFxucHJlZW1pbmVuY2UvTVxcbnByZWVtaW5lbnQvWVxcbnByZWVtcHQvR1ZTRFxcbnByZWVtcHRpb24vTVxcbnByZWVtcHRpdmUvWVxcbnByZWVuL0RTR1xcbnByZWV4aXN0L0RHU1xcbnByZWV4aXN0ZW5jZS9NXFxucHJlZlxcbnByZWZhYi9TTVxcbnByZWZhYmJlZFxcbnByZWZhYmJpbmdcXG5wcmVmYWJyaWNhdGUvRFNHTlxcbnByZWZhYnJpY2F0aW9uL01cXG5wcmVmYWNlL0RTTUdcXG5wcmVmYXRvcnlcXG5wcmVmZWN0L1NNXFxucHJlZmVjdHVyZS9NU1xcbnByZWZlci9TQkxcXG5wcmVmZXJhYmx5XFxucHJlZmVyZW5jZS9NU1xcbnByZWZlcmVudGlhbC9ZXFxucHJlZmVybWVudC9NXFxucHJlZmVycmVkXFxucHJlZmVycmluZ1xcbnByZWZpZ3VyZS9HRFNcXG5wcmVmaXgvTURTR1xcbnByZWZvcm0vR1NEXFxucHJlZnJvbnRhbFxcbnByZWdhbWUvU01cXG5wcmVnbmFuY3kvU01cXG5wcmVnbmFudFxcbnByZWhlYXQvR1NEXFxucHJlaGVuc2lsZVxcbnByZWhpc3Rvcmlhbi9TXFxucHJlaGlzdG9yaWNcXG5wcmVoaXN0b3JpY2FsL1lcXG5wcmVoaXN0b3J5L01cXG5wcmVodW1hblxcbnByZWluc3RhbGxlZFxcbnByZWp1ZGdlL0dEU1xcbnByZWp1ZGdtZW50L1NNXFxucHJlanVkaWNlL01HRFNcXG5wcmVqdWRpY2VkL1VcXG5wcmVqdWRpY2lhbFxcbnByZWtpbmRlcmdhcnRlbi9TTVxcbnByZWxhY3kvTVxcbnByZWxhdGUvU01cXG5wcmVsaW0vU01cXG5wcmVsaW1pbmFyeS9TTVxcbnByZWxpdGVyYXRlXFxucHJlbHVkZS9NU1xcbnByZW1hcml0YWxcXG5wcmVtYXR1cmUvWVxcbnByZW1lZC9TTVxcbnByZW1lZGljYWxcXG5wcmVtZWRpdGF0ZS9EU0dOXFxucHJlbWVkaXRhdGVkL1VcXG5wcmVtZWRpdGF0aW9uL01cXG5wcmVtZW5zdHJ1YWxcXG5wcmVtaWVyL1NHTURcXG5wcmVtaWVyZS9NU1xcbnByZW1pZXJzaGlwL01TXFxucHJlbWlzZS9EU01HXFxucHJlbWl1bS9TTVxcbnByZW1peC9HRFNcXG5wcmVtb2xhci9TTVxcbnByZW1vbml0aW9uL01TXFxucHJlbW9uaXRvcnlcXG5wcmVuYXRhbC9ZXFxucHJlbnVwL1NNXFxucHJlbnVwdGlhbFxcbnByZW9jY3VwYXRpb24vU01cXG5wcmVvY2N1cHkvRFNHXFxucHJlb3BlcmF0aXZlXFxucHJlb3JkYWluL0dEU1xcbnByZW93bmVkXFxucHJlcC9NU1xcbnByZXBhY2thZ2UvRFNHXFxucHJlcGFja2VkXFxucHJlcGFpZFxcbnByZXBhcmF0aW9uL1NNXFxucHJlcGFyYXRvcnlcXG5wcmVwYXJlL0dEU1xcbnByZXBhcmVkL1VQXFxucHJlcGFyZWRuZXNzL1VNXFxucHJlcGF5L0dTTFxcbnByZXBheW1lbnQvTVNcXG5wcmVwZW5kXFxucHJlcG9uZGVyYW5jZS9TTVxcbnByZXBvbmRlcmFudC9ZXFxucHJlcG9uZGVyYXRlL0dEU1xcbnByZXBvc2l0aW9uL1NNXFxucHJlcG9zaXRpb25hbC9ZXFxucHJlcG9zc2Vzcy9HRFNcXG5wcmVwb3NzZXNzaW5nL1VcXG5wcmVwb3NzZXNzaW9uL1NNXFxucHJlcG9zdGVyb3VzL1lcXG5wcmVwcGVkXFxucHJlcHBpbmdcXG5wcmVwcHkvVFJTTVxcbnByZXB1YmVzY2VuY2UvTVxcbnByZXB1YmVzY2VudC9TTVxcbnByZXB1Y2UvTVNcXG5wcmVxdWVsL01TXFxucHJlcmVjb3JkL0dTRFxcbnByZXJlZ2lzdGVyL1NHRFxcbnByZXJlZ2lzdHJhdGlvbi9NXFxucHJlcmVxdWlzaXRlL01TXFxucHJlcm9nYXRpdmUvU01cXG5wcmVzXFxucHJlc2FnZS9NR0RTXFxucHJlc2J5b3BpYS9NXFxucHJlc2J5dGVyL1NNXFxucHJlc2J5dGVyeS9TTVxcbnByZXNjaG9vbC9TWk1SXFxucHJlc2Nob29sZXIvTVxcbnByZXNjaWVuY2UvTVxcbnByZXNjaWVudC9ZXFxucHJlc2NyaWJlL0RTR1xcbnByZXNjcmlwdC9TVk1cXG5wcmVzY3JpcHRpb24vU01cXG5wcmVzY3JpcHRpdmUvWVxcbnByZXNlYXNvbi9TTVxcbnByZXNlbmNlL1NNXFxucHJlc2VudC9MTURSWVpHU0JcXG5wcmVzZW50YWJseVxcbnByZXNlbnRhdGlvbi9BU01cXG5wcmVzZW50ZXIvTVxcbnByZXNlbnRpbWVudC9TTVxcbnByZXNlbnRtZW50L1NNXFxucHJlc2VydmF0aW9uL01cXG5wcmVzZXJ2YXRpb25pc3QvU01cXG5wcmVzZXJ2YXRpdmUvU01cXG5wcmVzZXJ2ZS9CRFJTTVpHXFxucHJlc2VydmVyL01cXG5wcmVzZXQvU1xcbnByZXNldHRpbmdcXG5wcmVzaHJhbmtcXG5wcmVzaHJpbmsvR1NcXG5wcmVzaHJ1bmtcXG5wcmVzaWRlL0dEU1xcbnByZXNpZGVuY3kvU01cXG5wcmVzaWRlbnQvTVNcXG5wcmVzaWRlbnRpYWxcXG5wcmVzaWRpdW0vTVxcbnByZXNvcnQvREdTXFxucHJlc3Mnc1xcbnByZXNzL0FDR1NEXFxucHJlc3NlZC9VXFxucHJlc3Nlci9NU1xcbnByZXNzaWUvU1xcbnByZXNzaW5nL1NNWVxcbnByZXNzbWFuL01cXG5wcmVzc21lblxcbnByZXNzdXJlL0RTTUdcXG5wcmVzc3VyaXphdGlvbi9NXFxucHJlc3N1cml6ZS9DR0RTXFxucHJlc3N1cml6ZXIvU01cXG5wcmVzdGlkaWdpdGF0aW9uL01cXG5wcmVzdGlnZS9NXFxucHJlc3RpZ2lvdXNcXG5wcmVzdG8vU01cXG5wcmVzdW1hYmx5XFxucHJlc3VtZS9HRFNCXFxucHJlc3VtcHRpb24vU01cXG5wcmVzdW1wdGl2ZVxcbnByZXN1bXB0dW91cy9ZUFxcbnByZXN1bXB0dW91c25lc3MvTVxcbnByZXN1cHBvc2UvRFNHXFxucHJlc3VwcG9zaXRpb24vTVNcXG5wcmV0YXhcXG5wcmV0ZWVuL01TXFxucHJldGVuZC9EUlpHU1xcbnByZXRlbmRlci9NXFxucHJldGVuc2UvU1hNTlxcbnByZXRlbnNpb24vTVxcbnByZXRlbnRpb3VzL1VZXFxucHJldGVudGlvdXNuZXNzL01cXG5wcmV0ZXJpdC9TTVxcbnByZXRlcm1cXG5wcmV0ZXJuYXR1cmFsL1lcXG5wcmV0ZXN0L0RHU1xcbnByZXRleHQvTVNcXG5wcmV0cmlhbC9TXFxucHJldHRpZnkvR0RTXFxucHJldHRpbHlcXG5wcmV0dGluZXNzL01cXG5wcmV0dHkvVEdEUlNNUFxcbnByZXR6ZWwvTVNcXG5wcmV2YWlsL0RHU1xcbnByZXZhbGVuY2UvTVxcbnByZXZhbGVudFxcbnByZXZhcmljYXRlL0RTR05YXFxucHJldmFyaWNhdGlvbi9NXFxucHJldmFyaWNhdG9yL1NNXFxucHJldmVudC9EQlNHVlxcbnByZXZlbnRhYmxlL1VcXG5wcmV2ZW50YXRpdmUvTVNcXG5wcmV2ZW50aW9uL01cXG5wcmV2ZW50aXZlL1NNXFxucHJldmlldy9NRFJTWkdcXG5wcmV2aW91cy9ZXFxucHJldmlzaW9uL01TXFxucHJld2FyXFxucHJleS9HTURTXFxucHJlenppZS9TXFxucHJpYXBpY1xcbnByaWNlJ3NcXG5wcmljZS9BR0RTXFxucHJpY2VsZXNzXFxucHJpY2V5XFxucHJpY2llclxcbnByaWNpZXN0XFxucHJpY2svTURSWVNaR1xcbnByaWNrZXIvTVxcbnByaWNrbGUvTUdEU1xcbnByaWNrbGluZXNzL01cXG5wcmlja2x5L1BSVFxcbnByaWRlL01HRFNcXG5wcmlkZWZ1bC9ZXFxucHJpZXIvTVxcbnByaWVzdC9TTVlcXG5wcmllc3Rlc3MvTVNcXG5wcmllc3Rob29kL1NNXFxucHJpZXN0bGluZXNzL01cXG5wcmllc3RseS9SVFBcXG5wcmlnL01TXFxucHJpZ2dpc2gvUFxcbnByaWdnaXNobmVzcy9NXFxucHJpbS9aR0RSWVBcXG5wcmltYWN5L01cXG5wcmltYWxcXG5wcmltYXJpbHlcXG5wcmltYXJ5L1NNXFxucHJpbWF0ZS9NU1xcbnByaW1lL01TXFxucHJpbWVyL01cXG5wcmltZXZhbFxcbnByaW1pbmcvTVxcbnByaW1pdGl2ZS9TUE1ZXFxucHJpbWl0aXZlbmVzcy9NXFxucHJpbW1lclxcbnByaW1tZXN0XFxucHJpbW5lc3MvTVxcbnByaW1vZ2VuaXRvci9TTVxcbnByaW1vZ2VuaXR1cmUvTVxcbnByaW1vcmRpYWwvWVxcbnByaW1wL0RTR1xcbnByaW1yb3NlL1NNXFxucHJpbXVsYS9TXFxucHJpbmNlL1NNWVxcbnByaW5jZWRvbS9TTVxcbnByaW5jZWxpbmVzcy9NXFxucHJpbmNlbHkvUFJUXFxucHJpbmNlc3MvTVNcXG5wcmluY2lwYWwvU01ZXFxucHJpbmNpcGFsaXR5L1NNXFxucHJpbmNpcGxlL0RTTVxcbnByaW5jaXBsZWQvVVxcbnByaW50L0FNRFNHXFxucHJpbnRhYmxlL1VcXG5wcmludGVyL01TXFxucHJpbnRpbmcvU01cXG5wcmludG1ha2luZ1xcbnByaW50b3V0L1NNXFxucHJpb24vU1xcbnByaW9yL01TXFxucHJpb3Jlc3MvTVNcXG5wcmlvcml0aXphdGlvblxcbnByaW9yaXRpemUvRFNHXFxucHJpb3JpdHkvU01cXG5wcmlvcnkvU01cXG5wcmlzbS9NU1xcbnByaXNtYXRpY1xcbnByaXNvbi9TWk1SXFxucHJpc29uZXIvTVxcbnByaXNzaWx5XFxucHJpc3NpbmVzcy9NXFxucHJpc3N5L1BUUlxcbnByaXN0aW5lXFxucHJpdGhlZVxcbnByaXZhY3kvTVxcbnByaXZhdGUvWE1ZVE5SU1xcbnByaXZhdGVlci9TTVxcbnByaXZhdGlvbi9DU01cXG5wcml2YXRpemF0aW9uL1NNXFxucHJpdmF0aXplL0RTR1xcbnByaXZldC9TTVxcbnByaXZpbGVnZS9EU01HXFxucHJpdmlsZWdlZC9VXFxucHJpdmlseVxcbnByaXZ5L1JTTVRcXG5wcml6ZS9NR0RTXFxucHJpemVkL0FcXG5wcml6ZWZpZ2h0L1pHU01SXFxucHJpemVmaWdodGVyL01cXG5wcml6ZWZpZ2h0aW5nL01cXG5wcml6ZXdpbm5lci9NU1xcbnByaXpld2lubmluZ1xcbnByby9TTVxcbnByb2JhYmlsaXN0aWNcXG5wcm9iYWJpbGl0eS9TTVxcbnByb2JhYmxlL1NNXFxucHJvYmFibHlcXG5wcm9iYXRlL01OXFxucHJvYmF0aW9uL1pNUlxcbnByb2JhdGlvbmFsXFxucHJvYmF0aW9uYXJ5XFxucHJvYmF0aW9uZXIvTVxcbnByb2JlL01HRFNCSlxcbnByb2JpdHkvTVxcbnByb2JsZW0vTVNcXG5wcm9ibGVtYXRpYy9VXFxucHJvYmxlbWF0aWNhbC9ZXFxucHJvYm9zY2VzXFxucHJvYm9zY2lzL01TXFxucHJvY2FpbmUvTVxcbnByb2NlZHVyYWxcXG5wcm9jZWR1cmUvU01cXG5wcm9jZWVkL0dKRFNcXG5wcm9jZWVkaW5nL01cXG5wcm9jZWVkcy9NXFxucHJvY2VzcydzXFxucHJvY2Vzcy9BR0RTXFxucHJvY2Vzc2FibGVcXG5wcm9jZXNzZWQvVVxcbnByb2Nlc3Npb24vR0RcXG5wcm9jZXNzaW9uYWwvTVNcXG5wcm9jZXNzb3IvU01cXG5wcm9jbGFtYXRpb24vTVNcXG5wcm9jbGl2aXR5L1NNXFxucHJvY3Jhc3RpbmF0ZS9EU0dOXFxucHJvY3Jhc3RpbmF0aW9uL01cXG5wcm9jcmFzdGluYXRvci9NU1xcbnByb2NyZWF0ZS9WXFxucHJvY3Rvci9HTURTXFxucHJvY3VyZW1lbnQvTVxcbnByb2QvTVNcXG5wcm9kaWdhbC9NWVNcXG5wcm9kaWdhbGl0eS9NXFxucHJvZGlnaW91cy9ZXFxucHJvZGlneS9TTVxcbnByb2R1Y2Unc1xcbnByb2R1Y2UvQVpHRFJTXFxucHJvZHVjZXIvQU1cXG5wcm9kdWNpYmxlL0FcXG5wcm9kdWN0aW9uL0FTTVxcbnByb2R1Y3RpdmUvVVlcXG5wcm9kdWN0aXZlbmVzcy9NXFxucHJvZHVjdGl2aXR5L01cXG5wcm9mL01TXFxucHJvZmFuYXRpb24vTVNcXG5wcm9mYW5lL1BZR0RTXFxucHJvZmFuZW5lc3MvTVxcbnByb2Zhbml0eS9TTVxcbnByb2Zlc3NlZC9ZXFxucHJvZmVzc2lvbi9TTVxcbnByb2Zlc3Npb25hbC9NWVNcXG5wcm9mZXNzaW9uYWxpc20vTVxcbnByb2Zlc3Npb25hbGl6YXRpb25cXG5wcm9mZXNzaW9uYWxpemUvRFNHXFxucHJvZmVzc29yL1NNXFxucHJvZmVzc29yaWFsL1lcXG5wcm9mZXNzb3JzaGlwL1NNXFxucHJvZmZlci9HTURTXFxucHJvZmljaWVuY3kvTVxcbnByb2ZpY2llbnQvTVlTXFxucHJvZml0L0JHRFxcbnByb2ZpdGFiaWxpdHkvTVxcbnByb2ZpdGFibGUvVVxcbnByb2ZpdGFibHkvVVxcbnByb2ZpdGVlci9NREdTXFxucHJvZml0ZWVyaW5nL01cXG5wcm9maXRlcm9sZS9TTVxcbnByb2ZpdGxlc3NcXG5wcm9mbGlnYWN5L01cXG5wcm9mbGlnYXRlL1NNWVxcbnByb2Zvcm1hXFxucHJvZm91bmQvUllUUFxcbnByb2ZvdW5kbmVzcy9NXFxucHJvZnVuZGl0eS9TTVxcbnByb2Z1c2UvUFlcXG5wcm9mdXNlbmVzcy9NXFxucHJvZ2VuaXRvci9TTVxcbnByb2dlbnkvTVxcbnByb2dlc3Rlcm9uZS9NXFxucHJvZ2VzdGluL1NcXG5wcm9nbmF0aG91c1xcbnByb2dub3Nlc1xcbnByb2dub3Npcy9NXFxucHJvZ25vc3RpYy9NU1xcbnByb2dub3N0aWNhdGUvWEdORFNcXG5wcm9nbm9zdGljYXRpb24vTVxcbnByb2dub3N0aWNhdG9yL01TXFxucHJvZ3JhbS9DQVNcXG5wcm9ncmFtbWFibGUvTVNcXG5wcm9ncmFtbWF0aWNcXG5wcm9ncmFtbWVkL0FDXFxucHJvZ3JhbW1lci9NU1xcbnByb2dyYW1taW5nL1NNXFxucHJvZ3Jlc3MvTURTR1ZcXG5wcm9ncmVzc2lvbi9NU1xcbnByb2dyZXNzaXZlL1BNWVNcXG5wcm9ncmVzc2l2ZW5lc3MvTVxcbnByb2hpYml0L0RHVlNcXG5wcm9oaWJpdGlvbi9TTVxcbnByb2hpYml0aW9uaXN0L01TXFxucHJvaGliaXRpdmUvWVxcbnByb2hpYml0b3J5XFxucHJvamVjdC9HTURTXFxucHJvamVjdGlsZS9TTVxcbnByb2plY3Rpb24vU01cXG5wcm9qZWN0aW9uaXN0L1NNXFxucHJvamVjdG9yL01TXFxucHJva2FyeW90ZS9NU1xcbnByb2thcnlvdGljXFxucHJvbGUvU1xcbnByb2xldGFyaWFuL01TXFxucHJvbGV0YXJpYXQvTVxcbnByb2xpZmVyYXRlL0RTR05cXG5wcm9saWZlcmF0aW9uL01cXG5wcm9saWZpY1xcbnByb2xpZmljYWxseVxcbnByb2xpeC9ZXFxucHJvbGl4aXR5L01cXG5wcm9sb2d1ZS9TTVxcbnByb2xvbmdhdGlvbi9TTVxcbnByb20vTVxcbnByb21lbmFkZS9NR0RTXFxucHJvbWV0aGl1bS9NXFxucHJvbWluZW5jZS9NXFxucHJvbWluZW50L1lcXG5wcm9taXNjdWl0eS9NXFxucHJvbWlzY3VvdXMvWVxcbnByb21pc2UvRFNNR1xcbnByb21pc2luZy9ZXFxucHJvbWlzc29yeVxcbnByb21vL01cXG5wcm9tb250b3J5L1NNXFxucHJvbW90ZS9EUlpHXFxucHJvbW90ZXIvTVxcbnByb21vdGlvbmFsXFxucHJvbXB0L0pQU01EUllaVEdcXG5wcm9tcHRlZC9VXFxucHJvbXB0ZXIvTVxcbnByb21wdGluZy9NXFxucHJvbXB0aXR1ZGUvTVxcbnByb21wdG5lc3MvTVxcbnByb211bGdhdGUvR05EU1xcbnByb211bGdhdGlvbi9NXFxucHJvbXVsZ2F0b3IvTVNcXG5wcm9uZS9QXFxucHJvbmVuZXNzL01cXG5wcm9uZy9NRFNcXG5wcm9uZ2hvcm4vTVNcXG5wcm9ub21pbmFsL01cXG5wcm9ub3VuY2UvRFNMR1xcbnByb25vdW5jZWFibGUvVVxcbnByb25vdW5jZW1lbnQvU01cXG5wcm9udG9cXG5wcm9udW5jaWF0aW9uL01TXFxucHJvb2YvQURHU01cXG5wcm9vZnJlYWQvU1JaR1xcbnByb29mcmVhZGVyL01cXG5wcm9wL01TXFxucHJvcGFnYW5kYS9NXFxucHJvcGFnYW5kaXN0L01TXFxucHJvcGFnYW5kaXplL0dEU1xcbnByb3BhZ2F0ZS9EU0dOXFxucHJvcGFnYXRpb24vTVxcbnByb3BhZ2F0b3IvU01cXG5wcm9wZWwvU1xcbnByb3BlbGxhbnQvTVNcXG5wcm9wZWxsZWRcXG5wcm9wZWxsZXIvU01cXG5wcm9wZWxsaW5nXFxucHJvcGVuc2l0eS9TTVxcbnByb3Blci9NUllUXFxucHJvcGVydHkvRFNNXFxucHJvcGhlY3kvU01cXG5wcm9waGVzaWVyL01cXG5wcm9waGVzeS9EUlNNWkdcXG5wcm9waGV0L1NNXFxucHJvcGhldGVzcy9NU1xcbnByb3BoZXRpY1xcbnByb3BoZXRpY2FsL1lcXG5wcm9waHlsYWN0aWMvU01cXG5wcm9waHlsYXhlc1xcbnByb3BoeWxheGlzL01cXG5wcm9waW5xdWl0eS9NXFxucHJvcGl0aWF0ZS9EU0dOXFxucHJvcGl0aWF0aW9uL01cXG5wcm9waXRpYXRvcnlcXG5wcm9waXRpb3VzL1lcXG5wcm9wb25lbnQvU01cXG5wcm9wb3J0aW9uL0VTTVxcbnByb3BvcnRpb25hbC9ZU1xcbnByb3BvcnRpb25hbGl0eVxcbnByb3BvcnRpb25hdGUvRVlcXG5wcm9wb3NhbC9NU1xcbnByb3BwZWRcXG5wcm9wcGluZ1xcbnByb3ByYW5vbG9sXFxucHJvcHJpZXRhcnkvU01cXG5wcm9wcmlldGllcy9NXFxucHJvcHJpZXRvci9TTVxcbnByb3ByaWV0b3JpYWwvWVxcbnByb3ByaWV0b3JzaGlwL01cXG5wcm9wcmlldHJlc3MvTVNcXG5wcm9wcmlldHkvU01cXG5wcm9wdWxzaW9uL01cXG5wcm9wdWxzaXZlXFxucHJvcmF0ZS9EU0dcXG5wcm9yb2dhdGlvbi9NXFxucHJvcm9ndWUvR0RcXG5wcm9zYWljXFxucHJvc2FpY2FsbHlcXG5wcm9zY2VuaXVtL1NNXFxucHJvc2NpdXR0by9NXFxucHJvc2NyaWJlL0RHXFxucHJvc2NyaXB0aW9uL01TXFxucHJvc2UvTVxcbnByb3NlY3V0ZS9EU1hHTlxcbnByb3NlY3V0aW9uL01cXG5wcm9zZWN1dG9yL01TXFxucHJvc2VseXRlL0RTTUdcXG5wcm9zZWx5dGlzbS9NXFxucHJvc2VseXRpemUvRFJTWkdcXG5wcm9zZWx5dGl6ZXIvTVxcbnByb3NvY2lhbFxcbnByb3NvZHkvU01cXG5wcm9zcGVjdC9NREdWU1xcbnByb3NwZWN0aXZlL1lcXG5wcm9zcGVjdG9yL1NNXFxucHJvc3BlY3R1cy9NU1xcbnByb3NwZXIvR1NEXFxucHJvc3Blcml0eS9NXFxucHJvc3Blcm91cy9ZXFxucHJvc3RhdGUvTVNcXG5wcm9zdGhlc2VzXFxucHJvc3RoZXNpcy9NXFxucHJvc3RoZXRpY1xcbnByb3N0aXR1dGUvTUdORFNcXG5wcm9zdGl0dXRpb24vTVxcbnByb3N0cmF0ZS9HTlhEU1xcbnByb3N0cmF0aW9uL01cXG5wcm9zeS9SVFxcbnByb3RhY3Rpbml1bS9NXFxucHJvdGFnb25pc3QvU01cXG5wcm90ZWFuXFxucHJvdGVjdC9HVlNEXFxucHJvdGVjdGVkL1VcXG5wcm90ZWN0aW9uL1NNXFxucHJvdGVjdGlvbmlzbS9NXFxucHJvdGVjdGlvbmlzdC9NU1xcbnByb3RlY3RpdmUvUFlcXG5wcm90ZWN0aXZlbmVzcy9NXFxucHJvdGVjdG9yL01TXFxucHJvdGVjdG9yYXRlL01TXFxucHJvdGVnZS9TTVxcbnByb3RlZ2VlL1NcXG5wcm90ZWluL1NNXFxucHJvdGVzdGFudC9TXFxucHJvdGVzdGF0aW9uL01TXFxucHJvdG9jb2wvTVNcXG5wcm90b24vU01cXG5wcm90b3BsYXNtL01cXG5wcm90b3BsYXNtaWNcXG5wcm90b3R5cGUvTUdTXFxucHJvdG90eXBpY2FsXFxucHJvdG96b2FcXG5wcm90b3pvYW4vTVNcXG5wcm90b3pvaWNcXG5wcm90cmFjdC9HRFxcbnByb3RydWRlL0dEU1xcbnByb3RydXNpbGVcXG5wcm90cnVzaW9uL01TXFxucHJvdHViZXJhbmNlL01TXFxucHJvdHViZXJhbnRcXG5wcm91ZC9SWVRcXG5wcm92L05CXFxucHJvdmFiaWxpdHkvTVxcbnByb3ZhYmx5XFxucHJvdmUvRUFHRFNcXG5wcm92ZWQvVVxcbnByb3Zlbi9VXFxucHJvdmVuYW5jZS9TTVxcbnByb3ZlbmRlci9NXFxucHJvdmVuaWVuY2UvTVxcbnByb3ZlcmJpYWwvWVxcbnByb3ZpZGUvRFJTWkdcXG5wcm92aWRlZC9VXFxucHJvdmlkZW5jZS9NXFxucHJvdmlkZW50L1lcXG5wcm92aWRlbnRpYWwvWVxcbnByb3ZpZGVyL01cXG5wcm92aW5jZS9NU1xcbnByb3ZpbmNpYWwvU01ZXFxucHJvdmluY2lhbGlzbS9NXFxucHJvdmlzaW9uYWwvWVxcbnByb3Zpc28vU01cXG5wcm92b2NhdGV1ci9TXFxucHJvdm9jYXRpdmUvUFlcXG5wcm92b2NhdGl2ZW5lc3MvTVxcbnByb3Zva2UvRFJTWkdcXG5wcm92b2tlZC9VXFxucHJvdm9rZXIvTVxcbnByb3Zva2luZy9ZXFxucHJvdm9sb25lL01cXG5wcm92b3N0L1NNXFxucHJvdy9NU1xcbnByb3dlc3MvTVxcbnByb3dsL01EUlNaR1xcbnByb3dsZXIvTVxcbnByb3hpbWFsXFxucHJveGltYXRlXFxucHJveGltaXR5L01cXG5wcm94eS9TTVxcbnBydWRlL01TXFxucHJ1ZGVuY2UvTVxcbnBydWRlbnQvWVxcbnBydWRlbnRpYWwvWVxcbnBydWRlcnkvTVxcbnBydWRpc2gvWVBcXG5wcnVkaXNobmVzcy9NXFxucHJ1bmUvTVpHRFJTXFxucHJ1bmVyL01cXG5wcnVyaWVuY2UvTVxcbnBydXJpZW50L1lcXG5wcnkvWlRHRFJTTVxcbnBzYWxtL01TXFxucHNhbG1pc3QvU01cXG5wc2FsdGVyeS9TTVxcbnBzZXBob2xvZ2lzdC9TXFxucHNlcGhvbG9neVxcbnBzZXVkL1NcXG5wc2V1ZG8vU1xcbnBzZXVkb255bS9TTVxcbnBzZXVkb255bW91c1xcbnBzZXVkb3NjaWVuY2UvTVNcXG5wc2V1ZHlcXG5wc2hhdy9NU1xcbnBzaS9TTVxcbnBzaXR0YWNvc2lzL01cXG5wc29yaWFzaXMvTVxcbnBzc3RcXG5wc3ljaC9NRFNHXFxucHN5Y2hlL01cXG5wc3ljaGVkZWxpYVxcbnBzeWNoZWRlbGljL1NNXFxucHN5Y2hlZGVsaWNhbGx5XFxucHN5Y2hpYXRyaWNcXG5wc3ljaGlhdHJpc3QvU01cXG5wc3ljaGlhdHJ5L01cXG5wc3ljaGljL01TXFxucHN5Y2hpY2FsL1lcXG5wc3ljaG8vU01cXG5wc3ljaG9hY3RpdmVcXG5wc3ljaG9hbmFseXNlc1xcbnBzeWNob2FuYWx5c2lzL01cXG5wc3ljaG9hbmFseXN0L1NNXFxucHN5Y2hvYW5hbHl0aWNcXG5wc3ljaG9hbmFseXRpY2FsL1lcXG5wc3ljaG9hbmFseXplL0RTR1xcbnBzeWNob2JhYmJsZS9NXFxucHN5Y2hvZHJhbWEvTVNcXG5wc3ljaG9nZW5pY1xcbnBzeWNob2tpbmVzaXNcXG5wc3ljaG9raW5ldGljXFxucHN5Y2hvbG9naWNhbC9ZXFxucHN5Y2hvbG9naXN0L01TXFxucHN5Y2hvbG9neS9TTVxcbnBzeWNob21ldHJpY1xcbnBzeWNob25ldXJvc2VzXFxucHN5Y2hvbmV1cm9zaXMvTVxcbnBzeWNob3BhdGgvTVxcbnBzeWNob3BhdGhpY1xcbnBzeWNob3BhdGhvbG9neVxcbnBzeWNob3BhdGhzXFxucHN5Y2hvcGF0aHkvTVxcbnBzeWNob3BoYXJtYWNvbG9neVxcbnBzeWNob3BoeXNpb2xvZ3lcXG5wc3ljaG9zL1NcXG5wc3ljaG9zaXMvTVxcbnBzeWNob3NvbWF0aWNcXG5wc3ljaG90aGVyYXBpc3QvTVNcXG5wc3ljaG90aGVyYXB5L1NNXFxucHN5Y2hvdGljL1NNXFxucHN5Y2hvdGljYWxseVxcbnBzeWNob3Ryb3BpYy9NU1xcbnBzeWNoc1xcbnB0L0NcXG5wdGFybWlnYW4vTVNcXG5wdGVyb2RhY3R5bC9NU1xcbnB0b21haW5lL1NNXFxucHViL1NNXFxucHViZXJ0YWxcXG5wdWJlcnR5L01cXG5wdWJlcy9NXFxucHViZXNjZW5jZS9NXFxucHViZXNjZW50XFxucHViaWNcXG5wdWJpcy9NXFxucHVibGljL0FNXFxucHVibGljYW4vQU1TXFxucHVibGljYXRpb24vQVNNXFxucHVibGljaXN0L01TXFxucHVibGljaXR5L01cXG5wdWJsaWNpemUvR0RTXFxucHVibGljbHlcXG5wdWJsaXNoL0FHRFNcXG5wdWJsaXNoYWJsZVxcbnB1Ymxpc2hlZC9VXFxucHVibGlzaGVyL01TXFxucHVibGlzaGluZy9NXFxucHVjZS9NXFxucHVjay9aTVJTXFxucHVja2VyL01ER1xcbnB1Y2tpc2gvWVBcXG5wdWNraXNobmVzcy9NXFxucHVkL1NcXG5wdWRkaW5nL1NNXFxucHVkZGxlL0RTTUdcXG5wdWRkbGluZy9NXFxucHVkZW5kYVxcbnB1ZGVuZHVtL01cXG5wdWRnaW5lc3MvTVxcbnB1ZGd5L1BSVFxcbnB1ZWJsby9TTVxcbnB1ZXJpbGVcXG5wdWVyaWxpdHkvTVxcbnB1ZXJwZXJhbFxcbnB1ZmYvWkdNRFJTXFxucHVmZmJhbGwvU01cXG5wdWZmZXIvTVxcbnB1ZmZpbi9TTVxcbnB1ZmZpbmVzcy9NXFxucHVmZnkvUFJUXFxucHVnL1NNXFxucHVnaWxpc20vTVxcbnB1Z2lsaXN0L1NNXFxucHVnaWxpc3RpY1xcbnB1Z25hY2lvdXMvWVBcXG5wdWduYWNpb3VzbmVzcy9NXFxucHVnbmFjaXR5L01cXG5wdWtlL01HRFNcXG5wdWtrYVxcbnB1bGNocml0dWRlL01cXG5wdWxjaHJpdHVkaW5vdXNcXG5wdWxlL0dEU1xcbnB1bGwvWkdNRFJTXFxucHVsbGJhY2svTVNcXG5wdWxsZXIvTVxcbnB1bGxldC9TTVxcbnB1bGxleS9TTVxcbnB1bGxvdXQvTVNcXG5wdWxsb3Zlci9TTVxcbnB1bG1vbmFyeVxcbnB1bHAvR01EU1xcbnB1bHBpbmVzcy9NXFxucHVscGl0L1NNXFxucHVscHdvb2QvTVxcbnB1bHB5L1JQVFxcbnB1bHNhci9TTVxcbnB1bHNhdGUvWEdORFNcXG5wdWxzYXRpb24vTVxcbnB1bHNlL0FNR0RTXFxucHVsdmVyaXphdGlvbi9NXFxucHVsdmVyaXplL0RTR1xcbnB1bWEvTVNcXG5wdW1pY2UvU01cXG5wdW1tZWwvU0dEXFxucHVtcC9aR01EUlNcXG5wdW1wZXIvTVxcbnB1bXBlcm5pY2tlbC9NXFxucHVtcGtpbi9NU1xcbnB1bi9TTVxcbnB1bmNoL01EUlNaR1xcbnB1bmNoYmFnL1NcXG5wdW5jaGVvbi9NU1xcbnB1bmNoZXIvTVxcbnB1bmNobGluZS9TXFxucHVuY2h5L1RSXFxucHVuY3RpbGlvL01cXG5wdW5jdGlsaW91cy9QWVxcbnB1bmN0aWxpb3VzbmVzcy9NXFxucHVuY3R1YWwvWVxcbnB1bmN0dWFsaXR5L01cXG5wdW5jdHVhdGUvR05EU1xcbnB1bmN0dWF0aW9uL01cXG5wdW5jdHVyZS9EU01HXFxucHVuZGl0L1NNXFxucHVuZGl0cnkvTVxcbnB1bmdlbmN5L01cXG5wdW5nZW50L1lcXG5wdW5pbmVzcy9NXFxucHVuaXNoL0JMR0RTXFxucHVuaXNoZWQvVVxcbnB1bmlzaGluZy9ZXFxucHVuaXNobWVudC9NU1xcbnB1bml0aXZlL1lcXG5wdW5rL1RNUlNcXG5wdW5uZWRcXG5wdW5uZXQvU1xcbnB1bm5pbmdcXG5wdW5zdGVyL1NNXFxucHVudC9aR01EUlNcXG5wdW50ZXIvTVxcbnB1bnkvVFJQXFxucHVwL1NNXFxucHVwYS9NXFxucHVwYWVcXG5wdXBhbFxcbnB1cGF0ZS9EU0dcXG5wdXBpbC9NU1xcbnB1cHBlZFxcbnB1cHBldC9NU1xcbnB1cHBldGVlci9TTVxcbnB1cHBldHJ5L01cXG5wdXBwaW5nXFxucHVwcHkvU01cXG5wdXJibGluZFxcbnB1cmNoYXNlL0RSU01aR0JcXG5wdXJjaGFzZXIvTVxcbnB1cmRhaC9NXFxucHVyZS9QWVRSXFxucHVyZWJyZWQvU01cXG5wdXJlZS9NRFNcXG5wdXJlZWluZ1xcbnB1cmVuZXNzL01cXG5wdXJnYXRpdmUvU01cXG5wdXJnYXRvcmlhbFxcbnB1cmdhdG9yeS9TTVxcbnB1cmdlL01aR0RSU1xcbnB1cmdlci9NXFxucHVyaWZpY2F0aW9uL01cXG5wdXJpZmllci9NXFxucHVyaWZ5L05EUlNaR1xcbnB1cmluZS9NU1xcbnB1cmlzbS9NXFxucHVyaXN0L01TXFxucHVyaXN0aWNcXG5wdXJpdGFuL1NNXFxucHVyaXRhbmljYWwvWVxcbnB1cml0YW5pc20vTVxcbnB1cml0eS9NXFxucHVybC9HTURTXFxucHVybGlldS9TTVxcbnB1cmxvaW4vU0dEXFxucHVycGxlL01UUlNcXG5wdXJwbGlzaFxcbnB1cnBvcnQvU01ER1xcbnB1cnBvcnRlZC9ZXFxucHVycG9zZS9EU01ZR1xcbnB1cnBvc2VkL0FcXG5wdXJwb3NlZnVsL1lQXFxucHVycG9zZWZ1bG5lc3MvTVxcbnB1cnBvc2VsZXNzL1BZXFxucHVyci9HTURTXFxucHVyc2UvTVpHRFJTXFxucHVyc2VyL01cXG5wdXJzdWFuY2UvTVxcbnB1cnN1YW50XFxucHVyc3VlL1pHRFJTXFxucHVyc3Vlci9NXFxucHVyc3VpdC9TTVxcbnB1cnVsZW5jZS9NXFxucHVydWxlbnRcXG5wdXJ2ZXkvRFNHXFxucHVydmV5YW5jZS9NXFxucHVydmV5b3IvU01cXG5wdXJ2aWV3L01cXG5wdXMvTVxcbnB1c2gvWkdNRFJTXFxucHVzaGJpa2UvU1xcbnB1c2hjYXJ0L1NNXFxucHVzaGNoYWlyL1NcXG5wdXNoZXIvTVxcbnB1c2hpbHlcXG5wdXNoaW5lc3MvTVxcbnB1c2hvdmVyL01TXFxucHVzaHBpbi9TXFxucHVzaHkvVFJQXFxucHVzaWxsYW5pbWl0eS9NXFxucHVzaWxsYW5pbW91cy9ZXFxucHVzcy9NU1xcbnB1c3N5L1RSU01cXG5wdXNzeWNhdC9NU1xcbnB1c3N5Zm9vdC9EU0dcXG5wdXN0dWxhclxcbnB1c3R1bGUvU01cXG5wdXQvSVNNXFxucHV0YXRpdmVcXG5wdXRvdXQvTVNcXG5wdXRyZWZhY3Rpb24vTVxcbnB1dHJlZmFjdGl2ZVxcbnB1dHJlZnkvR0RTXFxucHV0cmVzY2VuY2UvTVxcbnB1dHJlc2NlbnRcXG5wdXRyaWRcXG5wdXRzY2gvTVNcXG5wdXR0L1pHTURSU1xcbnB1dHRlZC9JXFxucHV0dGVlL01TXFxucHV0dGVyL01EUlpHXFxucHV0dGVyZXIvTVxcbnB1dHRpbmcvSVxcbnB1dHR5L0dEU01cXG5wdXR6L1NcXG5wdXp6bGUvTVpHRFJTTFxcbnB1enpsZW1lbnQvTVxcbnB1enpsZXIvTVxcbnB2dFxcbnB3bi9TR0RcXG5weWVsb25lcGhyaXRpc1xcbnB5Z215L1NNXFxucHlsb24vU01cXG5weWxvcmlcXG5weWxvcmljXFxucHlsb3J1cy9NXFxucHlvcnJoZWEvTVxcbnB5cmFtaWQvR1NNRFxcbnB5cmFtaWRhbFxcbnB5cmUvTVNcXG5weXJpbWlkaW5lL01TXFxucHlyaXRlL1NNXFxucHlyaXRlcy9NXFxucHlyb21hbmlhL01cXG5weXJvbWFuaWFjL1NNXFxucHlyb3RlY2huaWMvU1xcbnB5cm90ZWNobmljYWxcXG5weXJvdGVjaG5pY3MvTVxcbnB5cnV2YXRlXFxucHl0aG9uL1NNXFxucHl4L01TXFxucHphenpcXG5xXFxucXJcXG5xdC9TXFxucXR5XFxucXVhXFxucXVhY2svR01EU1xcbnF1YWNrZXJ5L01cXG5xdWFkL01TXFxucXVhZHJhbmdsZS9TTVxcbnF1YWRyYW5ndWxhclxcbnF1YWRyYW50L01TXFxucXVhZHJhcGhvbmljXFxucXVhZHJhdGljL01TXFxucXVhZHJhdHVyZVxcbnF1YWRyZW5uaWFsXFxucXVhZHJlbm5pdW0vTVNcXG5xdWFkcmljZXBzL01TXFxucXVhZHJpbGF0ZXJhbC9TTVxcbnF1YWRyaWxsZS9YTU5TXFxucXVhZHJpbGxpb24vTVxcbnF1YWRyaXBsZWdpYS9NXFxucXVhZHJpcGxlZ2ljL1NNXFxucXVhZHJpdml1bS9NXFxucXVhZHJ1cGVkL01TXFxucXVhZHJ1cGVkYWxcXG5xdWFkcnVwbGUvTUdEU1xcbnF1YWRydXBsZXQvTVNcXG5xdWFkcnVwbGljYXRlL01HTkRTXFxucXVhZHJ1cGxpY2F0aW9uL01cXG5xdWFmZi9HTURTXFxucXVhZ21pcmUvU01cXG5xdWFob2cvTVNcXG5xdWFpbC9HTURTXFxucXVhaW50L1BSWVRcXG5xdWFpbnRuZXNzL01cXG5xdWFrZS9NR0RTXFxucXVha3lcXG5xdWFsaWZpY2F0aW9uL0VNXFxucXVhbGlmaWVkL1VcXG5xdWFsaWZpZXIvU01cXG5xdWFsaWZ5L0VHWE5EU1xcbnF1YWxpdGF0aXZlL1lcXG5xdWFsaXR5L1NNXFxucXVhbG0vTVNcXG5xdWFsbWlzaFxcbnF1YW5kYXJ5L1NNXFxucXVhbmdvL1NcXG5xdWFudGFcXG5xdWFudGlmaWFibGVcXG5xdWFudGlmaWNhdGlvbi9NXFxucXVhbnRpZmllci9NXFxucXVhbnRpZnkvTkRSU1pHXFxucXVhbnRpdGF0aW9uXFxucXVhbnRpdGF0aXZlL1lcXG5xdWFudGl0eS9TTVxcbnF1YW50aXphdGlvblxcbnF1YW50aXplXFxucXVhbnR1bS9NXFxucXVhcmFudGluZS9NR0RTXFxucXVhcmsvTVNcXG5xdWFycmVsL1NaR01EUlxcbnF1YXJyZWxlci9NXFxucXVhcnJlbHNvbWUvUFxcbnF1YXJyZWxzb21lbmVzcy9NXFxucXVhcnJ5L0RTTUdcXG5xdWFydC9NU1xcbnF1YXJ0ZXIvU0dNRFlcXG5xdWFydGVyYmFjay9HTURTXFxucXVhcnRlcmRlY2svTVNcXG5xdWFydGVyZmluYWwvU01cXG5xdWFydGVybHkvU01cXG5xdWFydGVybWFzdGVyL01TXFxucXVhcnRlcnN0YWZmL01cXG5xdWFydGVyc3RhdmVzXFxucXVhcnRldC9TTVxcbnF1YXJ0by9NU1xcbnF1YXJ0ei9NXFxucXVhc2FyL01TXFxucXVhc2gvR0RTXFxucXVhc2lcXG5xdWF0cmFpbi9NU1xcbnF1YXZlci9NRFNHXFxucXVhdmVyeVxcbnF1YXkvTVNcXG5xdWF5c2lkZS9TXFxucXVlYXNpbHlcXG5xdWVhc2luZXNzL01cXG5xdWVhc3kvVFBSXFxucXVlZW4vR01EWVNcXG5xdWVlbmx5L1JUXFxucXVlZXIvUFRHTURSWVNcXG5xdWVlcm5lc3MvTVxcbnF1ZWxsL0dEU1xcbnF1ZW5jaC9aR0RSU0JcXG5xdWVuY2hhYmxlL1VcXG5xdWVuY2hlci9NXFxucXVlbmNobGVzc1xcbnF1ZXJ1bG91cy9ZUFxcbnF1ZXJ1bG91c25lc3MvTVxcbnF1ZXJ5L0RTTUdcXG5xdWVzXFxucXVlc2FkaWxsYS9NU1xcbnF1ZXN0L0lGQU1TXFxucXVlc3RlZFxcbnF1ZXN0aW5nXFxucXVlc3Rpb24vU01EUlpHQkpcXG5xdWVzdGlvbmFibGUvVVxcbnF1ZXN0aW9uYWJseS9VXFxucXVlc3Rpb25lZC9VXFxucXVlc3Rpb25lci9NXFxucXVlc3Rpb25pbmcvTVlcXG5xdWVzdGlvbm5haXJlL1NNXFxucXVldWUnc1xcbnF1ZXVlL0NEU1xcbnF1ZXVpbmdcXG5xdWliYmxlL0RSU01aR1xcbnF1aWJibGVyL01cXG5xdWljaGUvU01cXG5xdWljay9NTlJZWFRQXFxucXVpY2tlbi9ER1xcbnF1aWNrZmlyZVxcbnF1aWNraWUvU01cXG5xdWlja2xpbWUvTVxcbnF1aWNrbmVzcy9NXFxucXVpY2tzYW5kL01TXFxucXVpY2tzaWx2ZXIvTVxcbnF1aWNrc3RlcC9NU1xcbnF1aWQvTVNcXG5xdWllc2NlbmNlL01cXG5xdWllc2NlbnQvWVxcbnF1aWV0L1NNRE5SWVhUR1BcXG5xdWlldGVuL0RHXFxucXVpZXRpc21cXG5xdWlldG5lc3MvTVxcbnF1aWV0dWRlL0lFTVxcbnF1aWV0dXMvTVNcXG5xdWlmZi9TXFxucXVpbGwvU01cXG5xdWlsdC9TTURSWkdcXG5xdWlsdGVyL01cXG5xdWlsdGluZy9NXFxucXVpbi9TXFxucXVpbmNlL1NNXFxucXVpbmUvU1xcbnF1aW5pZGluZVxcbnF1aW5pbmUvTVxcbnF1aW5vYVxcbnF1aW5zeS9NXFxucXVpbnQvU01cXG5xdWludGVzc2VuY2UvU01cXG5xdWludGVzc2VudGlhbC9ZXFxucXVpbnRldC9TTVxcbnF1aW50dXBsZS9NR0RTXFxucXVpbnR1cGxldC9NU1xcbnF1aXAvTVNcXG5xdWlwcGVkXFxucXVpcHBpbmdcXG5xdWlwc3Rlci9TTVxcbnF1aXJlJ3NcXG5xdWlyZS9JQVNcXG5xdWlyay9TTURHXFxucXVpcmtpbmVzcy9NXFxucXVpcmt5L1JUUFxcbnF1aXJ0L1NNXFxucXVpc2xpbmcvU01cXG5xdWl0L1NcXG5xdWl0Y2xhaW0vTVNcXG5xdWl0ZVxcbnF1aXR0YW5jZS9NXFxucXVpdHRlci9TTVxcbnF1aXR0aW5nXFxucXVpdmVyL1NNREdcXG5xdWl2ZXJ5XFxucXVpeG90aWNcXG5xdWl4b3RpY2FsbHlcXG5xdWl6L01cXG5xdWl6emVkXFxucXVpenplci9TTVxcbnF1aXp6ZXNcXG5xdWl6emljYWwvWVxcbnF1aXp6aW5nXFxucXVvL0hcXG5xdW9pbi9TTVxcbnF1b2l0L1NNREdcXG5xdW9uZGFtXFxucXVvcmF0ZS9JXFxucXVvcnVtL1NNXFxucXVvdC9CXFxucXVvdGEvU01cXG5xdW90YWJpbGl0eS9NXFxucXVvdGF0aW9uL1NNXFxucXVvdGUnc1xcbnF1b3RlL1VEU0dcXG5xdW90aWRpYW5cXG5xdW90aWVudC9TTVxcbnF3ZXJ0eVxcbnIvU1xcbnJhYmJldC9HTURTXFxucmFiYmkvU01cXG5yYWJiaW5hdGUvTVxcbnJhYmJpbmljXFxucmFiYmluaWNhbFxcbnJhYmJpdC9HTURTXFxucmFiYmxlL01TXFxucmFiaWQvUFlcXG5yYWJpZG5lc3MvTVxcbnJhYmllcy9NXFxucmFjY29vbi9NU1xcbnJhY2UvTVpHRFJTXFxucmFjZWNvdXJzZS9TTVxcbnJhY2Vnb2VyL1NcXG5yYWNlaG9yc2UvTVNcXG5yYWNlbWUvTVNcXG5yYWNlci9NXFxucmFjZXRyYWNrL01TXFxucmFjZXdheS9NU1xcbnJhY2lhbC9ZXFxucmFjaWFsaXNtL01cXG5yYWNpYWxpc3QvTVNcXG5yYWNpbHlcXG5yYWNpbmVzcy9NXFxucmFjaW5nL01cXG5yYWNpc20vTVxcbnJhY2lzdC9TTVxcbnJhY2svR01EU1xcbnJhY2tldC9TTURHXFxucmFja2V0ZWVyL1NNREdcXG5yYWNrZXRlZXJpbmcvTVxcbnJhY29udGV1ci9TTVxcbnJhY3F1ZXRiYWxsL1NNXFxucmFjeS9QUlRcXG5yYWQvU01cXG5yYWRhci9TTVxcbnJhZGFyc2NvcGUvU01cXG5yYWRkbGVkXFxucmFkaWFsL1NNWVxcbnJhZGlhbi9TXFxucmFkaWFuY2UvTVxcbnJhZGlhbnQvWVxcbnJhZGlhdGUvRFNHTlhcXG5yYWRpYXRpb24vTVxcbnJhZGlhdG9yL1NNXFxucmFkaWNhbC9TTVlcXG5yYWRpY2FsaXNtL01cXG5yYWRpY2FsaXphdGlvbi9NXFxucmFkaWNhbGl6ZS9EU0dcXG5yYWRpY2NoaW8vTVxcbnJhZGlpXFxucmFkaW8vTURHU1xcbnJhZGlvYWN0aXZlL1lcXG5yYWRpb2FjdGl2aXR5L01cXG5yYWRpb2NhcmJvbi9NXFxucmFkaW9ncmFtL01TXFxucmFkaW9ncmFwaGVyL1NNXFxucmFkaW9ncmFwaHkvTVxcbnJhZGlvaXNvdG9wZS9NU1xcbnJhZGlvbG9naXN0L1NNXFxucmFkaW9sb2d5L01cXG5yYWRpb21hbi9NXFxucmFkaW9tZW5cXG5yYWRpb21ldGVyL01TXFxucmFkaW9tZXRyaWNcXG5yYWRpb21ldHJ5L01cXG5yYWRpb3Bob25lL1NNXFxucmFkaW9zY29weS9NXFxucmFkaW9zb25kZS9TTVxcbnJhZGlvc3VyZ2VyeVxcbnJhZGlvdGVsZWdyYXBoL01cXG5yYWRpb3RlbGVncmFwaHNcXG5yYWRpb3RlbGVncmFwaHkvTVxcbnJhZGlvdGVsZXBob25lL01TXFxucmFkaW90aGVyYXBpc3QvTVNcXG5yYWRpb3RoZXJhcHkvTVxcbnJhZGlzaC9NU1xcbnJhZGl1bS9NXFxucmFkaXVzL01cXG5yYWRvbi9NXFxucmFmZmlhL01cXG5yYWZmaXNoL1lQXFxucmFmZmlzaG5lc3MvTVxcbnJhZmZsZS9EU01HXFxucmFmdC9aR01EUlNcXG5yYWZ0ZXIvTVxcbnJhZnRpbmcvTVxcbnJhZy9TR01EXFxucmFnYS9NU1xcbnJhZ2FtdWZmaW4vTVNcXG5yYWdiYWcvTVxcbnJhZ2UvTVNcXG5yYWdnYVxcbnJhZ2dlZC9SWVRQXFxucmFnZ2VkbmVzcy9NXFxucmFnZ2VkeS9SVFxcbnJhZ2dpbmdcXG5yYWdpbmcvWVxcbnJhZ2xhbi9TTVxcbnJhZ291dC9TTVxcbnJhZ3RhZy9TXFxucmFndGltZS9NXFxucmFnd2VlZC9NXFxucmFnd29ydFxcbnJhaFxcbnJhaWQvWkdNRFJTXFxucmFpZGVyL01cXG5yYWlsJ3NcXG5yYWlsL0NHRFNcXG5yYWlsY2FyZC9TXFxucmFpbGluZy9TTVxcbnJhaWxsZXJ5L1NNXFxucmFpbHJvYWQvU1pHTURSXFxucmFpbHJvYWRlci9NXFxucmFpbHJvYWRpbmcvTVxcbnJhaWx3YXkvU01cXG5yYWlsd2F5bWFuXFxucmFpbHdheW1lblxcbnJhaW1lbnQvTVxcbnJhaW4vR01EU1xcbnJhaW5ib3cvU01cXG5yYWluY29hdC9TTVxcbnJhaW5kcm9wL1NNXFxucmFpbmZhbGwvU01cXG5yYWlubWFrZXIvU01cXG5yYWlubWFraW5nL01cXG5yYWlucHJvb2ZcXG5yYWluc3Rvcm0vTVNcXG5yYWlud2F0ZXIvTVxcbnJhaW55L1JUXFxucmFpc2UvTVpHRFJTXFxucmFpc2VyL01cXG5yYWlzaW4vU01cXG5yYWphaC9NXFxucmFqYWhzXFxucmFrZS9NR0RTXFxucmFraXNoL1lQXFxucmFraXNobmVzcy9NXFxucmFsbHkvRFNNR1xcbnJhbS9TTVxcbnJhbWJsZS9EUlNNWkdKXFxucmFtYmxlci9NXFxucmFtYnVuY3Rpb3VzL1BZXFxucmFtYnVuY3Rpb3VzbmVzcy9NXFxucmFtZWtpbi9TTVxcbnJhbWllL01cXG5yYW1pZmljYXRpb24vTVxcbnJhbWlmeS9EU1hOR1xcbnJhbWpldC9TTVxcbnJhbW1lZFxcbnJhbW1pbmdcXG5yYW1wL0dNU1xcbnJhbXBhZ2UvRFNNR1xcbnJhbXBhbmN5L01cXG5yYW1wYW50L1lcXG5yYW1wYXJ0L1NNXFxucmFtcm9kL1NNXFxucmFtcm9kZGVkXFxucmFtcm9kZGluZ1xcbnJhbXNoYWNrbGVcXG5yYW4vQVxcbnJhbmNoL01EUlNaR1xcbnJhbmNoZXIvTVxcbnJhbmNoaW5nL01cXG5yYW5jaWQvUFxcbnJhbmNpZGl0eS9NXFxucmFuY2lkbmVzcy9NXFxucmFuY29yL01cXG5yYW5jb3JvdXMvWVxcbnJhbmQvTVxcbnJhbmRpbmVzcy9NXFxucmFuZG9tL1BTWVxcbnJhbmRvbWl6YXRpb24vTVxcbnJhbmRvbWl6ZS9EU0dcXG5yYW5kb21uZXNzL01TXFxucmFuZHkvUlRQXFxucmFuZWUvTVNcXG5yYW5nL1pSXFxucmFuZ2Unc1xcbnJhbmdlL0NHRFNcXG5yYW5nZWZpbmRlci9TXFxucmFuZ2VyL01cXG5yYW5naW5lc3MvTVxcbnJhbmd5L1JUUFxcbnJhbmsvVEdKUE1EUllTXFxucmFua2luZy9NXFxucmFua2xlL0RTR1xcbnJhbmtuZXNzL01cXG5yYW5zYWNrL1NHRFxcbnJhbnNvbS9TWkdNRFJcXG5yYW5zb21lci9NXFxucmFuc29td2FyZVxcbnJhbnQvWkdNREpSU1xcbnJhbnRlci9NXFxucmFwL1NaR01EUlxcbnJhcGFjaW91cy9QWVxcbnJhcGFjaW91c25lc3MvTVxcbnJhcGFjaXR5L01cXG5yYXBlL01TXFxucmFwZXIvTVxcbnJhcGVzZWVkL01cXG5yYXBpZC9QTVJZVFNcXG5yYXBpZGl0eS9NXFxucmFwaWRuZXNzL01cXG5yYXBpZXIvU01cXG5yYXBpbmUvTVxcbnJhcGlzdC9TTVxcbnJhcHBlZFxcbnJhcHBlbC9TTVxcbnJhcHBlbGxlZFxcbnJhcHBlbGxpbmdcXG5yYXBwZXIvU01cXG5yYXBwaW5nXFxucmFwcG9ydC9NU1xcbnJhcHBvcnRldXIvU1xcbnJhcHByb2NoZW1lbnQvU01cXG5yYXBzY2FsbGlvbi9NU1xcbnJhcHQvWVBcXG5yYXB0bmVzcy9NXFxucmFwdG9yL1NcXG5yYXB0dXJlL01TXFxucmFwdHVyb3VzL1lcXG5yYXJlL1lUR1BEUlNcXG5yYXJlYml0L01TXFxucmFyZWZhY3Rpb24vTVxcbnJhcmVmeS9HRFNcXG5yYXJlbmVzcy9NXFxucmFyaXR5L1NNXFxucmFzY2FsL1NNWVxcbnJhc2gvWlRNUlNZUFxcbnJhc2hlci9NXFxucmFzaG5lc3MvTVxcbnJhc3AvR01EU1xcbnJhc3BiZXJyeS9TTVxcbnJhc3B5L1JUXFxucmFzdGVyXFxucmF0L1NNXFxucmF0YXRvdWlsbGUvTVxcbnJhdGJhZy9TXFxucmF0Y2hldC9HTURTXFxucmF0ZS9KWE1aR05EUlNcXG5yYXRlZC9VXFxucmF0ZXBheWVyL1NcXG5yYXRlci9NXFxucmF0aGVyXFxucmF0aHNrZWxsZXIvU01cXG5yYXRpZmljYXRpb24vTVxcbnJhdGlmaWVyL01cXG5yYXRpZnkvTkRSU1pHXFxucmF0aW5nL01cXG5yYXRpby9NU1xcbnJhdGlvY2luYXRlL0dORFNcXG5yYXRpb2NpbmF0aW9uL01cXG5yYXRpb24vTURHXFxucmF0aW9uYWwvU01ZXFxucmF0aW9uYWxlL01TXFxucmF0aW9uYWxpc20vTVxcbnJhdGlvbmFsaXN0L1NNXFxucmF0aW9uYWxpc3RpY1xcbnJhdGlvbmFsaXR5L01cXG5yYXRpb25hbGl6YXRpb24vTVNcXG5yYXRpb25hbGl6ZS9EU0dcXG5yYXRsaWtlXFxucmF0bGluZS9TTVxcbnJhdHRhbi9TTVxcbnJhdHRlZFxcbnJhdHRlci9TTVxcbnJhdHRpbmdcXG5yYXR0bGUvRFJTTVpHSlxcbnJhdHRsZWJyYWluL1NNRFxcbnJhdHRsZXIvTVxcbnJhdHRsZXNuYWtlL1NNXFxucmF0dGxldHJhcC9TTVxcbnJhdHRseVxcbnJhdHRyYXAvU01cXG5yYXR0eS9SVFxcbnJhdWNvdXMvWVBcXG5yYXVjb3VzbmVzcy9NXFxucmF1bmNoaWx5XFxucmF1bmNoaW5lc3MvTVxcbnJhdW5jaHkvVFJQXFxucmF2YWdlL0RSU01aR1xcbnJhdmFnZXIvTVxcbnJhdmFnZXMvTVxcbnJhdmUvSk1aR0RSU1xcbnJhdmVsJ3NcXG5yYXZlbC9VRFNHXFxucmF2ZWxpbmcvU1xcbnJhdmVuL01EU0dcXG5yYXZlbm91cy9ZXFxucmF2aW5lL1NNXFxucmF2aW5nL01cXG5yYXZpb2xpL1NNXFxucmF2aXNoL0RSU1pHTFxcbnJhdmlzaGVyL01cXG5yYXZpc2hpbmcvWVxcbnJhdmlzaG1lbnQvTVxcbnJhdy9QVE1SXFxucmF3Ym9uZWRcXG5yYXdoaWRlL01cXG5yYXduZXNzL01cXG5yYXkvU01cXG5yYXlvbi9NXFxucmF6ZS9HRFNcXG5yYXpvci9NU1xcbnJhem9yYmFjay9NU1xcbnJhenovR01EU1xcbnJhenptYXRhenovTVxcbnJjcHRcXG5yZFxcbnJlL0RTTVlUR1ZKXFxucmVhY2gvTURTR0JcXG5yZWFjaGFibGUvVVxcbnJlYWNxdWlyZS9EU0dcXG5yZWFjdC9WXFxucmVhY3RhbmNlXFxucmVhY3RhbnQvU01cXG5yZWFjdGlvbmFyeS9TTVxcbnJlYWN0aXZpdHlcXG5yZWFkL1pHTVJCSlNcXG5yZWFkYWJpbGl0eS9TTVxcbnJlYWRlci9NXFxucmVhZGVyc2hpcC9TTVxcbnJlYWRpbHlcXG5yZWFkaW5lc3MvTVxcbnJlYWRpbmcvTVxcbnJlYWRtaXR0ZWRcXG5yZWFkb3V0L1NNXFxucmVhZHkvRFJTVEdQXFxucmVhZmZvcmVzdGF0aW9uXFxucmVhbC9UTVJZUFNcXG5yZWFsaXNtL01cXG5yZWFsaXN0L1NNXFxucmVhbGlzdGljL1VcXG5yZWFsaXN0aWNhbGx5L1VcXG5yZWFsaXRpZXNcXG5yZWFsaXR5L1VNXFxucmVhbGl6YXRpb24vTVNcXG5yZWFsaXplL0RTQkdcXG5yZWFsaXplZC9VXFxucmVhbG0vTVNcXG5yZWFsbmVzcy9NXFxucmVhbHBvbGl0aWsvTVxcbnJlYWx0eS9NXFxucmVhbS9aR01EUlNcXG5yZWFtZXIvTVxcbnJlYXAvWkdEUlNcXG5yZWFwZXIvTVxcbnJlYXIvR01EU1xcbnJlYXJndWFyZC9NU1xcbnJlYXJtb3N0XFxucmVhcndhcmQvU1xcbnJlYXNvbi9TTURSWkdCXFxucmVhc29uYWJsZS9VUFxcbnJlYXNvbmFibGVuZXNzL1VNXFxucmVhc29uYWJseS9VXFxucmVhc29uZXIvTVxcbnJlYXNvbmluZy9NXFxucmVhc3N1cmluZy9ZXFxucmViYXRlL01cXG5yZWJlbC9NU1xcbnJlYmVsbGlvbi9NU1xcbnJlYmVsbGlvdXMvWVBcXG5yZWJlbGxpb3VzbmVzcy9NXFxucmViaWQvU1xcbnJlYmlkZGluZ1xcbnJlYmlydGgvTVxcbnJlYm9pbC9TREdcXG5yZWJ1aWxkL1NHXFxucmVidWtlL0RTTUdcXG5yZWJ1a2luZy9ZXFxucmVidXR0YWwvTVNcXG5yZWMnZFxcbnJlYy9NXFxucmVjYWxjaXRyYW5jZS9NXFxucmVjYWxjaXRyYW50XFxucmVjYW50L1NER1xcbnJlY2FudGF0aW9uL1NNXFxucmVjYXAvTVNcXG5yZWNhcGl0YWxpemF0aW9uXFxucmVjY2UvU1xcbnJlY2RcXG5yZWNlaXB0L1NNREdcXG5yZWNlaXZhYmxlcy9NXFxucmVjZWl2ZS9EUlNaR0JcXG5yZWNlaXZlci9NXFxucmVjZWl2ZXJzaGlwL01cXG5yZWNlbnQvUllUUFxcbnJlY2VudG5lc3MvTVxcbnJlY2VwdGFjbGUvU01cXG5yZWNlcHRpb24vTVNcXG5yZWNlcHRpb25pc3QvU01cXG5yZWNlcHRpdmUvUFlcXG5yZWNlcHRpdmVuZXNzL01cXG5yZWNlcHRpdml0eS9NXFxucmVjZXB0b3IvU01cXG5yZWNlc3MvTURTR1ZcXG5yZWNlc3Npb25hbC9TTVxcbnJlY2Vzc2lvbmFyeVxcbnJlY2Vzc2l2ZS9TTVxcbnJlY2hlcmNoZVxcbnJlY2lkaXZpc20vTVxcbnJlY2lkaXZpc3QvU01cXG5yZWNpcGUvU01cXG5yZWNpcGllbnQvU01cXG5yZWNpcHJvY2FsL1NNWVxcbnJlY2lwcm9jYXRlL0dORFNcXG5yZWNpcHJvY2F0aW9uL01cXG5yZWNpcHJvY2l0eS9NXFxucmVjaXRhbC9TTVxcbnJlY2l0YWxpc3QvTVNcXG5yZWNpdGF0aXZlL01TXFxucmVjaXRlci9TTVxcbnJlY2tsZXNzL1lQXFxucmVja2xlc3NuZXNzL01cXG5yZWNrb24vU0pER1xcbnJlY2tvbmluZy9NXFxucmVjbGFtYXRpb24vTVxcbnJlY2xpbmUvRFJTWkdcXG5yZWNsaW5lci9NXFxucmVjbHVzZS9TTVZcXG5yZWNvZ25pemFibGUvVVxcbnJlY29nbml6YWJseS9VXFxucmVjb2duaXplL0RSU0dCXFxucmVjb2duaXplZC9VXFxucmVjb21iaW5hdGlvblxcbnJlY29tcGVuc2UvRFNNR1xcbnJlY29tcGlsYXRpb25cXG5yZWNvbXBpbGUvR0RcXG5yZWNvbi9TXFxucmVjb25jaWxlL0dEU0JcXG5yZWNvbmNpbGlhdGlvbi9TXFxucmVjb25kaXRlXFxucmVjb25maWd1cmF0aW9uXFxucmVjb25maWd1cmUvRFxcbnJlY29ubmFpc3NhbmNlL01TXFxucmVjb25ub2l0ZXIvREdTXFxucmVjb25zdHJ1Y3QvVlxcbnJlY29uc3RydWN0ZWQvVVxcbnJlY29yZGVkL1VcXG5yZWNvcmRlci9NU1xcbnJlY29yZGluZy9NU1xcbnJlY291cC9ER1xcbnJlY291cnNlL01cXG5yZWNvdmVyYWJsZS9VXFxucmVjb3ZlcnkvU01cXG5yZWNyZWFudC9NU1xcbnJlY3JlYXRpb25hbFxcbnJlY3JpbWluYXRlL0RTR05YXFxucmVjcmltaW5hdGlvbi9NXFxucmVjcmltaW5hdG9yeVxcbnJlY3J1ZGVzY2UvR0RTXFxucmVjcnVkZXNjZW5jZS9NXFxucmVjcnVkZXNjZW50XFxucmVjcnVpdC9MU01EUlpHXFxucmVjcnVpdGVyL01cXG5yZWNydWl0bWVudC9NXFxucmVjdGFsL1lcXG5yZWN0YW5nbGUvTVNcXG5yZWN0YW5ndWxhclxcbnJlY3RpZmlhYmxlXFxucmVjdGlmaWNhdGlvbi9NXFxucmVjdGlmaWVyL01cXG5yZWN0aWZ5L1hORFJTWkdcXG5yZWN0aWxpbmVhclxcbnJlY3RpdHVkZS9NXFxucmVjdG8vTVNcXG5yZWN0b3IvU01cXG5yZWN0b3J5L1NNXFxucmVjdHVtL1NNXFxucmVjdW1iZW50XFxucmVjdXBlcmF0ZS9HTlZEU1xcbnJlY3VwZXJhdGlvbi9NXFxucmVjdXIvU1xcbnJlY3VycmVkXFxucmVjdXJyZW5jZS9TTVxcbnJlY3VycmluZ1xcbnJlY3Vyc2lvbi9TXFxucmVjdXNlL0RTR1xcbnJlY3ljbGFibGUvU01cXG5yZWN5Y2xpbmcvTVxcbnJlZC9QU01cXG5yZWRhY3QvU0RHXFxucmVkYWN0aW9uL01cXG5yZWRhY3Rvci9TTVxcbnJlZGJpcmQvU01cXG5yZWRicmVhc3QvTVNcXG5yZWRicmlja1xcbnJlZGNhcC9TTVxcbnJlZGNvYXQvU01cXG5yZWRjdXJyYW50L1NcXG5yZWRkZW4vU0RHXFxucmVkZGVyXFxucmVkZGVzdFxcbnJlZGRpc2hcXG5yZWRlZW0vUlpCXFxucmVkZWVtZXIvTVxcbnJlZGVtcHRpb24vTVxcbnJlZGVtcHRpdmVcXG5yZWRoZWFkL1NNRFxcbnJlZGlyZWN0aW9uXFxucmVkaXN0cmljdC9HRFxcbnJlZGl2aWRlL0dEU1xcbnJlZGxpbmluZy9NXFxucmVkbmVjay9TTVxcbnJlZG5lc3MvTVxcbnJlZG8vR1xcbnJlZG9sZW5jZS9NXFxucmVkb2xlbnRcXG5yZWRvdWJ0L1NCTVxcbnJlZG91YnRhYmx5XFxucmVkb3VuZC9TREdcXG5yZWRyYXcvU0dcXG5yZWRza2luL1NNXFxucmVkdWNlL0RSU1pHXFxucmVkdWNlci9NXFxucmVkdWNpYmxlXFxucmVkdWN0YXNlL01cXG5yZWR1Y3Rpb24vU01cXG5yZWR1Y3Rpb25pc3RcXG5yZWR1Y3RpdmVcXG5yZWR1bmRhbmN5L1NNXFxucmVkdW5kYW50L1lcXG5yZWR3b29kL1NNXFxucmVkeWUvRFNcXG5yZWVkaW5lc3MvTVxcbnJlZWR5L1JUUFxcbnJlZWYvWkdNRFJTXFxucmVlZmVyL01cXG5yZWVrL0dNRFNcXG5yZWVsJ3NcXG5yZWVsL1VHRFNcXG5yZWV2ZS9HXFxucmVleHBvcnQvU0RHXFxucmVmL1NaTVxcbnJlZmFzaGlvbi9ER1NcXG5yZWZlY3Rpb24vTVxcbnJlZmVjdG9yeS9TTVxcbnJlZmVyL0JcXG5yZWZlcmVlL0RTTVxcbnJlZmVyZWVpbmdcXG5yZWZlcmVuY2UvTUdEU1xcbnJlZmVyZW5kdW0vTVNcXG5yZWZlcmVudC9TTVxcbnJlZmVyZW50aWFsXFxucmVmZXJyYWwvU01cXG5yZWZlcnJlZFxcbnJlZmVycmVyL1NNXFxucmVmZXJyaW5nXFxucmVmZmVkXFxucmVmZmluZ1xcbnJlZmlsbC9CTVxcbnJlZmluZWQvVVxcbnJlZmluZW1lbnQvU01cXG5yZWZpbmVyL1NNXFxucmVmaW5lcnkvU1xcbnJlZml0dGluZ1xcbnJlZmxhdGUvWERTR05cXG5yZWZsYXRpb25hcnlcXG5yZWZsZWN0L0dWU0RcXG5yZWZsZWN0aW9uL01TXFxucmVmbGVjdGl2ZS9ZXFxucmVmbGVjdGl2aXR5XFxucmVmbGVjdG9yL01TXFxucmVmbGV4aXZlL1NNWVxcbnJlZmxleGl2aXR5XFxucmVmbGV4b2xvZ3lcXG5yZWZvcmdlL0RTR1xcbnJlZm9ybS9NWlxcbnJlZm9ybWF0L1ZcXG5yZWZvcm1hdG9yeS9TTVxcbnJlZm9ybWF0dGluZ1xcbnJlZm9ybWVkL1VcXG5yZWZvcm1pc3QvU1xcbnJlZm9ydGlmeS9HRFNcXG5yZWZyYWN0L1NHVkRcXG5yZWZyYWN0aW9uL01cXG5yZWZyYWN0b3J5L1NNXFxucmVmcmFpbi9TR01EXFxucmVmcmVzaC9aR0xEUlNcXG5yZWZyZXNoZXIvTVxcbnJlZnJlc2hpbmcvWVxcbnJlZnJlc2htZW50L1NNXFxucmVmcmVzaG1lbnRzL01cXG5yZWZyaWdlcmFudC9TTVxcbnJlZnJpZ2VyYXRlL0RTR05cXG5yZWZyaWdlcmF0aW9uL01cXG5yZWZyaWdlcmF0b3IvTVNcXG5yZWZ1Z2UvU01cXG5yZWZ1Z2VlL1NNXFxucmVmdWxnZW5jZS9NXFxucmVmdWxnZW50XFxucmVmdW5kL0JcXG5yZWZ1cmJpc2htZW50L01TXFxucmVmdXNhbC9NU1xcbnJlZnV0YXRpb24vTVNcXG5yZWZ1dGUvQkRSU1pHXFxucmVmdXRlci9NXFxucmVnXFxucmVnYWwvRFlHXFxucmVnYWxlbWVudC9NXFxucmVnYWxpYS9NXFxucmVnYXJkL0VTTURHXFxucmVnYXJkbGVzc1xcbnJlZ2FyZHMvTVxcbnJlZ2F0aGVyL0RHU1xcbnJlZ2F0dGEvU01cXG5yZWdlbmN5L1NNXFxucmVnZW5lcmFjeS9NXFxucmVnZW5lcmF0ZS9WXFxucmVnZXgvTVxcbnJlZ2V4cC9TXFxucmVnZ2FlL01cXG5yZWdpY2lkYWxcXG5yZWdpY2lkZS9NU1xcbnJlZ2ltZS9TTVxcbnJlZ2ltZW4vU01cXG5yZWdpbWVudC9NREdTXFxucmVnaW1lbnRhbFxcbnJlZ2ltZW50YXRpb24vTVxcbnJlZ2lvbi9TTVxcbnJlZ2lvbmFsL1lcXG5yZWdpb25hbGlzbS9NU1xcbnJlZ2lzdGVyL0dNRFNcXG5yZWdpc3RlcmVkL1VcXG5yZWdpc3RyYW50L01TXFxucmVnaXN0cmFyL01TXFxucmVnaXN0cmF0aW9uL1NNXFxucmVnaXN0cnkvU01cXG5yZWduYW50XFxucmVncmVzcy9NRFNHVlxcbnJlZ3Jlc3Npb24vTVNcXG5yZWdyZXQvU01cXG5yZWdyZXRmdWwvWVxcbnJlZ3JldHRhYmxlXFxucmVncmV0dGFibHlcXG5yZWdyZXR0ZWRcXG5yZWdyZXR0aW5nXFxucmVncmluZC9HU1xcbnJlZ3JvdW5kXFxucmVncm91cC9ER1NcXG5yZWd1bGFyL01ZU1xcbnJlZ3VsYXJpdHkvU01cXG5yZWd1bGFyaXphdGlvbi9NXFxucmVndWxhcml6ZS9EU0dcXG5yZWd1bGF0ZS9DRFNHTlZcXG5yZWd1bGF0ZWQvVVxcbnJlZ3VsYXRpb24vQ01cXG5yZWd1bGF0aW9uc1xcbnJlZ3VsYXRvci9NU1xcbnJlZ3VsYXRvcnlcXG5yZWd1cmdpdGF0ZS9EU0dOXFxucmVndXJnaXRhdGlvbi9NXFxucmVoYWIvTVNcXG5yZWhhYmJlZFxcbnJlaGFiYmluZ1xcbnJlaGFiaWxpdGF0ZS9HTlZEU1xcbnJlaGFiaWxpdGF0aW9uL01cXG5yZWhhbmcvU0RHXFxucmVoZWFycy9HRFxcbnJlaGVhcnNhbC9NU1xcbnJlaGVhcnNlZC9VXFxucmVoaVxcbnJlaHVuZ1xcbnJlaWZ5L05EU0dcXG5yZWlnbi9NRFNHXFxucmVpbWJ1cnNlL0JEU0dMXFxucmVpbWJ1cnNlbWVudC9NU1xcbnJlaW4vR0RcXG5yZWluZGVlci9NXFxucmVpbmZvcmNlL0xHRFNcXG5yZWluZm9yY2VtZW50L1NNXFxucmVpbml0aWFsaXplXFxucmVpbnN0YWxsL0RHXFxucmVpbnN0YXRlbWVudC9NXFxucmVpbnN1cmFuY2VcXG5yZWl0ZXJhdGUvVlxcbnJlamVjdC9HU01EXFxucmVqZWN0aW9uL1NNXFxucmVqb2ljZS9KR0RTXFxucmVqb2ljaW5nL01cXG5yZWpvaW5kZXIvU01cXG5yZWp1dmVuYXRlL0RTR05cXG5yZWp1dmVuYXRpb24vTVxcbnJlbFxcbnJlbGF0ZS9EUlNCWFpHTlZcXG5yZWxhdGVkbmVzcy9NXFxucmVsYXRlci9NXFxucmVsYXRpb24vTVxcbnJlbGF0aW9uYWxcXG5yZWxhdGlvbnNoaXAvTVNcXG5yZWxhdGl2ZS9NWVNcXG5yZWxhdGl2aXNtL01cXG5yZWxhdGl2aXN0L1NcXG5yZWxhdGl2aXN0aWNcXG5yZWxhdGl2aXR5L01cXG5yZWxheC9EUlNaR1xcbnJlbGF4YW50L01TXFxucmVsYXhhdGlvbi9TTVxcbnJlbGF4ZXIvTVxcbnJlbGF5L0RcXG5yZWxlYXNlL0JcXG5yZWxlYXNlZC9VXFxucmVsZWdhdGUvR05EU1xcbnJlbGVudC9TR0RcXG5yZWxlbnRsZXNzL1BZXFxucmVsZW50bGVzc25lc3MvTVxcbnJlbGV2YW5jZS9NXFxucmVsZXZhbmN5L01cXG5yZWxldmFudC9ZXFxucmVsaWFiaWxpdHkvVU1cXG5yZWxpYWJsZS9VXFxucmVsaWFibHkvVVxcbnJlbGlhbmNlL01cXG5yZWxpYW50XFxucmVsaWMvTVNcXG5yZWxpZWYvU01cXG5yZWxpZXZlL1pHRFJTXFxucmVsaWV2ZXIvTVxcbnJlbGlnaW9uL1NNXFxucmVsaWdpb3NpdHlcXG5yZWxpZ2lvdXMvTVlQXFxucmVsaWdpb3VzbmVzcy9NXFxucmVsaW5lL0RTR1xcbnJlbGlucXVpc2gvTERTR1xcbnJlbGlucXVpc2htZW50L01cXG5yZWxpcXVhcnkvU01cXG5yZWxpc2gvR01EU1xcbnJlbGlzdC9TR0RcXG5yZWxvY2F0ZS9CXFxucmVsdWN0YW5jZS9NXFxucmVsdWN0YW50L1lcXG5yZWx5L0dEU1xcbnJlbS9NXFxucmVtYWluL1NHRFxcbnJlbWFpbmRlci9HTURTXFxucmVtYW5kL1NHRFxcbnJlbWFwcGluZ1xcbnJlbWFyay9CXFxucmVtYXJrYWJsZW5lc3MvTVxcbnJlbWFya2FibHlcXG5yZW1hcmtlZC9VXFxucmVtZWRpYWJsZVxcbnJlbWVkeS9HRFNNXFxucmVtZW1iZXIvREdcXG5yZW1lbWJlcmVkL1VcXG5yZW1lbWJyYW5jZS9NU1xcbnJlbWluZGVyL01cXG5yZW1pbmlzY2UvR0RTXFxucmVtaW5pc2NlbmNlL01TXFxucmVtaW5pc2NlbnQvWVxcbnJlbWlzcy9QWVxcbnJlbWlzc25lc3MvTVxcbnJlbWl0L1NcXG5yZW1pdHRhbmNlL1NNXFxucmVtaXR0ZWRcXG5yZW1pdHRpbmcvVVxcbnJlbWl4L0RTR1xcbnJlbW5hbnQvTVNcXG5yZW1vZGVsL0dEU1xcbnJlbW9sZC9TR0RcXG5yZW1vbnN0cmFudC9TTVxcbnJlbW9uc3RyYXRlL0RTR1xcbnJlbW9yc2UvTVxcbnJlbW9yc2VmdWwvWVxcbnJlbW9yc2VsZXNzL1BZXFxucmVtb3JzZWxlc3NuZXNzL01cXG5yZW1vdGUvUlNNWVRQXFxucmVtb3RlbmVzcy9NXFxucmVtb3ZhbC9TTVxcbnJlbXVuZXJhdGUvR05WWERTXFxucmVtdW5lcmF0aW9uL01cXG5yZW5haXNzYW5jZS9NU1xcbnJlbmFsXFxucmVuYXNjZW5jZS9TXFxucmVuZC9HU1xcbnJlbmRlci9TR01ESlxcbnJlbmRlcmluZy9NXFxucmVuZGV6dm91cy9HTURTXFxucmVuZGl0aW9uL01TXFxucmVuZWdhZGUvRFNNR1xcbnJlbmVnZS9EUlNaR1xcbnJlbmVnZXIvTVxcbnJlbmV3L0RTQkdcXG5yZW5ld2FsL01TXFxucmVubmV0L01cXG5yZW5uaW4vTVxcbnJlbm91bmNlL0xEU0dcXG5yZW5vdW5jZW1lbnQvTVxcbnJlbm92YXRlL0RTWEdOXFxucmVub3ZhdGlvbi9NXFxucmVub3ZhdG9yL01TXFxucmVub3duL01EXFxucmVudC9aR01EUlNcXG5yZW50YWwvU01cXG5yZW50ZXIvTVxcbnJlbnVuY2lhdGlvbi9TTVxcbnJlb3Blbi9TREdcXG5yZW9yZy9NRFNHXFxucmVwL1NNXFxucmVwYWludC9HRFNcXG5yZXBhaXIvQlpSXFxucmVwYWlyZXIvTVxcbnJlcGFpcm1hbi9NXFxucmVwYWlybWVuXFxucmVwYXJhYmxlXFxucmVwYXJhdGlvbi9NU1xcbnJlcGFyYXRpb25zL01cXG5yZXBhcnRlZS9NXFxucmVwYXRyaWF0ZS9YRFNNR05cXG5yZXBhdHJpYXRpb24vTVxcbnJlcGVhdC9TTURSWkdCXFxucmVwZWF0YWJpbGl0eVxcbnJlcGVhdGFibGUvVVxcbnJlcGVhdGFibHlcXG5yZXBlYXRlZC9ZXFxucmVwZWF0ZXIvTVxcbnJlcGVhdGluZy9NXFxucmVwZWwvU1xcbnJlcGVsbGVkXFxucmVwZWxsZW50L1NNXFxucmVwZWxsaW5nXFxucmVwZW50L1NER1xcbnJlcGVudGFuY2UvTVxcbnJlcGVudGFudC9ZXFxucmVwZXJjdXNzaW9uL1NcXG5yZXBlcnRvaXJlL01TXFxucmVwZXJ0b3J5L1NNXFxucmVwZXRpdGlvbi9NU1xcbnJlcGV0aXRpb3VzL1lQXFxucmVwZXRpdGlvdXNuZXNzL01cXG5yZXBldGl0aXZlL1lQXFxucmVwZXRpdGl2ZW5lc3MvTVxcbnJlcGhvdG9ncmFwaC9ER1xcbnJlcGxhY2VhYmxlXFxucmVwbGFudC9HU0RcXG5yZXBsZW5pc2gvTEdEU1xcbnJlcGxlbmlzaG1lbnQvTVxcbnJlcGxldGUvUERTR05cXG5yZXBsZXRlbmVzcy9NXFxucmVwbGV0aW9uL01cXG5yZXBsaWNhL1NNXFxucmVwbGljYXRlL0RTR05YXFxucmVwbGljYXRpb24vTVxcbnJlcGxpY2F0b3IvU1xcbnJlcG9ydGFnZS9NXFxucmVwb3J0ZWQvWVxcbnJlcG9ydG9yaWFsXFxucmVwb3NlZnVsXFxucmVwb3NpdGlvblxcbnJlcG9zaXRvcnkvU01cXG5yZXByZWhlbmQvREdTXFxucmVwcmVoZW5zaWJpbGl0eS9NXFxucmVwcmVoZW5zaWJsZVxcbnJlcHJlaGVuc2libHlcXG5yZXByZWhlbnNpb24vTVxcbnJlcHJlc2VudC9HRFNcXG5yZXByZXNlbnRhdGlvbmFsXFxucmVwcmVzZW50YXRpdmUvTVNcXG5yZXByZXNlbnRlZC9VXFxucmVwcmVzc2lvbi9NU1xcbnJlcHJlc3NpdmUvUFlcXG5yZXByaWV2ZS9EU01HXFxucmVwcmltYW5kL0dTTURcXG5yZXByaXNhbC9TTVxcbnJlcHJpc2UvU01HXFxucmVwcm9hY2gvR01EU0JcXG5yZXByb2FjaGZ1bC9ZXFxucmVwcm9iYXRlL01TXFxucmVwcm9kdWN0aXZlXFxucmVwcm9ncmFtbWluZ1xcbnJlcHJvdmluZy9ZXFxucmVwdGlsZS9TTVxcbnJlcHRpbGlhbi9NU1xcbnJlcHVibGljL1NcXG5yZXB1YmxpY2FuaXNtL01cXG5yZXB1ZGlhdGUvWEdORFNcXG5yZXB1ZGlhdGlvbi9NXFxucmVwdWRpYXRvci9NU1xcbnJlcHVnbmFuY2UvTVxcbnJlcHVnbmFudFxcbnJlcHVsc2lvbi9NXFxucmVwdWxzaXZlL1lQXFxucmVwdWxzaXZlbmVzcy9NXFxucmVwdXJjaGFzZS9HRFNcXG5yZXB1dGFiaWxpdHkvTVxcbnJlcHV0YWJseS9FXFxucmVwdXRhdGlvbi9NU1xcbnJlcHV0ZS9EU01HQlxcbnJlcHV0ZWQvWVxcbnJlcXVlc3QvR0RSXFxucmVxdWllbS9TTVxcbnJlcXVpcmUvTERHXFxucmVxdWlyZW1lbnQvTVNcXG5yZXF1aXNpdGUvWE1OU1xcbnJlcXVpc2l0aW9uL0dNRFxcbnJlcXVpdGFsL01cXG5yZXF1aXRlL0RSU1pHXFxucmVxdWl0ZWQvVVxcbnJlcXVpdGVyL01cXG5yZXJlYWQvU0dcXG5yZXJlY29yZC9HRFNcXG5yZXJ1bm5pbmdcXG5yZXNhbXBsZS9HRFNcXG5yZXNhdFxcbnJlc2NpbmQvU0RHXFxucmVzY2lzc2lvbi9NXFxucmVzY3VlL0RSU01aR1xcbnJlc2N1ZXIvTVxcbnJlc2VhbC9CXFxucmVzZW1ibGUvRFNHXFxucmVzZW5kXFxucmVzZW50L0xTREdcXG5yZXNlbnRmdWwvWVBcXG5yZXNlbnRmdWxuZXNzL01cXG5yZXNlbnRtZW50L01TXFxucmVzZXJwaW5lL01cXG5yZXNlcnZhdGlvbi9NU1xcbnJlc2VydmVkL1VZXFxucmVzZXJ2ZWRuZXNzL01cXG5yZXNlcnZpc3QvU01cXG5yZXNlcnZvaXIvU01cXG5yZXNldHRpbmdcXG5yZXNoaXBwaW5nXFxucmVzaWRlbmNlL1NNXFxucmVzaWRlbmN5L1NNXFxucmVzaWRlbnQvTVNcXG5yZXNpZGVudGlhbFxcbnJlc2lkdWFcXG5yZXNpZHVhbC9NU1xcbnJlc2lkdWUvU01cXG5yZXNpZHV1bS9NXFxucmVzaWduYXRpb24vU01cXG5yZXNpZ25lZC9ZXFxucmVzaWxpZW5jZS9NXFxucmVzaWxpZW5jeS9NXFxucmVzaWxpZW50L1lcXG5yZXNpbm91c1xcbnJlc2lzdC9TTURSWkdcXG5yZXNpc3RhbmNlL1NNXFxucmVzaXN0YW50L1VcXG5yZXNpc3RpYmxlXFxucmVzaXN0aXZpdHlcXG5yZXNpc3RsZXNzXFxucmVzaXN0b3IvTVNcXG5yZXNpdC9TXFxucmVzaXR0aW5nXFxucmVzb2xkXFxucmVzb2xlL0RTR1xcbnJlc29sdXRlL1BZXFxucmVzb2x1dGVuZXNzL01cXG5yZXNvbHZlL1JCTVxcbnJlc29sdmVkL1VcXG5yZXNvbmFuY2UvU01cXG5yZXNvbmFudC9ZXFxucmVzb25hdGUvR0RTXFxucmVzb25hdG9yL1NNXFxucmVzb3JwdGlvbi9NXFxucmVzb3VuZC9TR0RcXG5yZXNvdW5kaW5nL1lcXG5yZXNvdXJjZWZ1bC9ZUFxcbnJlc291cmNlZnVsbmVzcy9NXFxucmVzcFxcbnJlc3BlY3QvRVNHVk1EXFxucmVzcGVjdGFiaWxpdHkvTVxcbnJlc3BlY3RhYmxlXFxucmVzcGVjdGFibHlcXG5yZXNwZWN0ZnVsL0VZXFxucmVzcGVjdGZ1bG5lc3MvTVxcbnJlc3BlY3RpdmUvWVxcbnJlc3BlbGwvU0dEXFxucmVzcGlyYXRpb24vTVxcbnJlc3BpcmF0b3IvU01cXG5yZXNwaXJhdG9yeVxcbnJlc3BpcmUvREdcXG5yZXNwbGVuZGVuY2UvTVxcbnJlc3BsZW5kZW50L1lcXG5yZXNwb25kL1NHRFxcbnJlc3BvbmRlbnQvU01cXG5yZXNwb25zZS9NU1xcbnJlc3BvbnNpYmlsaXR5L1NNXFxucmVzcG9uc2libGVcXG5yZXNwb25zaWJseVxcbnJlc3BvbnNpdmUvVVlQXFxucmVzcG9uc2l2ZW5lc3MvVU1cXG5yZXN0L0dWTURTXFxucmVzdGF0ZS9HRFNcXG5yZXN0YXVyYW50L1NNXFxucmVzdGF1cmF0ZXVyL01TXFxucmVzdGZ1bC9ZUFxcbnJlc3RmdWxsZXJcXG5yZXN0ZnVsbGVzdFxcbnJlc3RmdWxuZXNzL01cXG5yZXN0aXR1dGlvbi9NXFxucmVzdGl2ZS9ZUFxcbnJlc3RpdmVuZXNzL01cXG5yZXN0bGVzcy9QWVxcbnJlc3RsZXNzbmVzcy9NXFxucmVzdG9yYXRpb24vU01cXG5yZXN0b3JhdGl2ZS9TTVxcbnJlc3RvcmVyL1NNXFxucmVzdHJhaW5lZC9VXFxucmVzdHJhaW50L01TXFxucmVzdHJpY3QvU0RHVlxcbnJlc3RyaWN0ZWQvVVxcbnJlc3RyaWN0aW9uL01TXFxucmVzdHJpY3RpdmUvWVBcXG5yZXN0cmljdGl2ZW5lc3MvTVxcbnJlc3RyaW5nL1NHXFxucmVzdHJvb20vU01cXG5yZXN0cnVjdHVyaW5nL1NNXFxucmVzdWx0L0dTTURcXG5yZXN1bHRhbnQvU01cXG5yZXN1bWUvRFNNR1xcbnJlc3VtcHRpb24vTVNcXG5yZXN1cHBseS9EU0dcXG5yZXN1cmdlbmNlL01TXFxucmVzdXJnZW50XFxucmVzdXJyZWN0L0dTRFxcbnJlc3VycmVjdGlvbi9NU1xcbnJlc3VzY2l0YXRlL0dORFNcXG5yZXN1c2NpdGF0aW9uL01cXG5yZXN1c2NpdGF0b3IvU01cXG5yZXRhaWxlci9NU1xcbnJldGFpbi9TRFJaR1xcbnJldGFpbmVyL01cXG5yZXRha2UvR1xcbnJldGFsaWF0ZS9EU0dOVlhcXG5yZXRhbGlhdGlvbi9NXFxucmV0YWxpYXRvcnlcXG5yZXRhcmQvU01EUlpHXFxucmV0YXJkYW50L1NNXFxucmV0YXJkYXRpb24vTVxcbnJldGFyZGVyL01cXG5yZXRjaC9EU0dcXG5yZXRlYWNoL0dTXFxucmV0ZW50aW9uL01cXG5yZXRlbnRpdmUvWVBcXG5yZXRlbnRpdmVuZXNzL01cXG5yZXRoaW5rL1NHTVxcbnJldGhvdWdodFxcbnJldGljZW5jZS9NXFxucmV0aWNlbnQvWVxcbnJldGljdWxhdGVkXFxucmV0aWN1bGF0aW9uL01TXFxucmV0aWN1bHVtXFxucmV0aW5hL1NNXFxucmV0aW5hbFxcbnJldGlub2JsYXN0b21hXFxucmV0aW51ZS9TTVxcbnJldGlyZWUvU01cXG5yZXRpcmVtZW50L01TXFxucmV0b3J0L0dNRFxcbnJldHJhY2UvR0RTXFxucmV0cmFjdC9EQkdcXG5yZXRyYWN0aWxlXFxucmV0cmFjdGlvbi9TXFxucmV0cmFpbi9ER1NcXG5yZXRyZWFkL0RcXG5yZXRyZW5jaG1lbnQvTVNcXG5yZXRyaWJ1dGlvbi9NU1xcbnJldHJpYnV0aXZlXFxucmV0cmlldmFsL1NNXFxucmV0cmlldmUvRFJTTVpHQlxcbnJldHJpZXZlci9NXFxucmV0cm8vTVNcXG5yZXRyb2FjdGl2ZS9ZXFxucmV0cm9maXJlL0dEU1xcbnJldHJvZml0L1NNXFxucmV0cm9maXR0ZWRcXG5yZXRyb2ZpdHRpbmdcXG5yZXRyb2dyYWRlL0RTR1xcbnJldHJvZ3Jlc3MvR1ZEU1xcbnJldHJvZ3Jlc3Npb24vTVxcbnJldHJvcm9ja2V0L01TXFxucmV0cm9zcGVjdC9NRFNHVlxcbnJldHJvc3BlY3Rpb24vTVxcbnJldHJvc3BlY3RpdmUvTVlTXFxucmV0cm92aXJ1cy9NU1xcbnJldHNpbmEvTVxcbnJldHVybmFibGUvU01cXG5yZXR1cm5lZS9TTVxcbnJldi9aVk1cXG5yZXZhbXBpbmcvTVxcbnJldmVhbC9HSlNEXFxucmV2ZWFsZWQvVVxcbnJldmVhbGluZy9ZXFxucmV2ZWlsbGUvTVxcbnJldmVsL0pNRFJTWkdcXG5yZXZlbGF0aW9uL1NNXFxucmV2ZWxhdG9yeVxcbnJldmVsZXIvTVxcbnJldmVscnkvU01cXG5yZXZlbmdlL01HRFNcXG5yZXZlbnVlci9TTVxcbnJldmVyYlxcbnJldmVyYmVyYXRlL0RTR05YXFxucmV2ZXJiZXJhdGlvbi9NXFxucmV2ZXJlL0RTR1xcbnJldmVyZW5jZS9EU01HXFxucmV2ZXJlbmQvU01cXG5yZXZlcmVudC9ZXFxucmV2ZXJlbnRpYWwvWVxcbnJldmVyaWUvTVNcXG5yZXZlcnMvTVxcbnJldmVyc2FsL1NNXFxucmV2ZXJzZS9ZXFxucmV2ZXJzaWJpbGl0eVxcbnJldmVyc2libGVcXG5yZXZlcnNpYmx5XFxucmV2ZXJ0L0dTRFxcbnJldmVydGlibGVcXG5yZXZldG1lbnQvU01cXG5yZXZpbGUvRFJTTFpHXFxucmV2aWxlbWVudC9NXFxucmV2aWxlci9NXFxucmV2aXNlci9NU1xcbnJldmlzaW9uL1NNXFxucmV2aXNpb25pc20vTVxcbnJldmlzaW9uaXN0L1NNXFxucmV2aXZhbC9NU1xcbnJldml2YWxpc20vTVxcbnJldml2YWxpc3QvU01cXG5yZXZpdmUvRFNHXFxucmV2aXZpZmljYXRpb24vTVxcbnJldm9jYWJsZVxcbnJldm9rZS9EU0dcXG5yZXZvbHQvR0RcXG5yZXZvbHRpbmcvWVxcbnJldm9sdXRpb24vU01cXG5yZXZvbHV0aW9uYXJ5L1NNXFxucmV2b2x1dGlvbmlzdC9TTVxcbnJldm9sdXRpb25pemUvRFNHXFxucmV2b2x2ZS9CWkdEUlNcXG5yZXZvbHZlci9NXFxucmV2dWUvTVNcXG5yZXZ1bHNpb24vTVxcbnJldnZlZFxcbnJldnZpbmdcXG5yZXdhcmRlZC9VXFxucmV3YXJkaW5nL1VcXG5yZXdhcm0vR1NEXFxucmV3YXNoL0dEU1xcbnJld2VhdmUvR1NcXG5yZXdlZGRpbmdcXG5yZXdpbmQvTUJcXG5yZXdvdW5kXFxucmV3cml0ZS9NR1NcXG5yaGFwc29kaWNcXG5yaGFwc29kaWNhbFxcbnJoYXBzb2RpemUvR0RTXFxucmhhcHNvZHkvU01cXG5yaGVhL01TXFxucmhlbml1bS9NXFxucmhlb3N0YXQvU01cXG5yaGVzdXMvTVNcXG5yaGV0b3JpYy9NXFxucmhldG9yaWNhbC9ZXFxucmhldG9yaWNpYW4vU01cXG5yaGV1bS9NXFxucmhldW1hdGljL01TXFxucmhldW1hdGljYWxseVxcbnJoZXVtYXRpc20vTVxcbnJoZXVtYXRvaWRcXG5yaGV1bXlcXG5yaGluZXN0b25lL1NNXFxucmhpbml0aXMvTVxcbnJoaW5vL01TXFxucmhpbm9jZXJvcy9NU1xcbnJoaW5vcGxhc3R5XFxucmhpbm92aXJ1cy9NU1xcbnJoaXpvbWUvTVNcXG5yaG8vU01cXG5yaG9kaXVtL01cXG5yaG9kb2RlbmRyb24vU01cXG5yaG9tYm9pZC9TTVxcbnJob21ib2lkYWxcXG5yaG9tYnVzL01TXFxucmh1YmFyYi9NU1xcbnJoeW1lL01aR0RSU1xcbnJoeW1lci9NXFxucmh5bWVzdGVyL01TXFxucmh5dGhtL1NNXFxucmh5dGhtaWNcXG5yaHl0aG1pY2FsL1lcXG5yaWFsL01TXFxucmliL1NNXFxucmliYWxkXFxucmliYWxkcnkvTVxcbnJpYmJlZFxcbnJpYmJlci9TTVxcbnJpYmJpbmdcXG5yaWJib24vU01cXG5yaWJvZmxhdmluL01cXG5yaWNlL01aR0RSU1xcbnJpY2VyL01cXG5yaWNoL1RNUlNZUFxcbnJpY2huZXNzL01cXG5yaWNrL0dNRFNcXG5yaWNrZXRzL01cXG5yaWNrZXR5L1JUXFxucmlja3JhY2svTVxcbnJpY2tzaGF3L01TXFxucmljb2NoZXQvR01EU1xcbnJpY290dGEvTVxcbnJpZC9TXFxucmlkZGFuY2UvTVxcbnJpZGRlblxcbnJpZGRpbmdcXG5yaWRkbGUvRFNNR1xcbnJpZGUvTVpHUlNcXG5yaWRlci9NXFxucmlkZXJsZXNzXFxucmlkZXJzaGlwL01cXG5yaWRnZS9NR0RTXFxucmlkZ2Vwb2xlL1NNXFxucmlkZ3lcXG5yaWRpY3VsZS9NR0RTXFxucmlkaWN1bG91cy9ZUFxcbnJpZGljdWxvdXNuZXNzL01cXG5yaWRpbmcvTVxcbnJpZmUvVFJcXG5yaWZmL0dNRFNcXG5yaWZmbGUvRFNNR1xcbnJpZmZyYWZmL01cXG5yaWZsZS9NWkdEUlNcXG5yaWZsZW1hbi9NXFxucmlmbGVtZW5cXG5yaWZsZXIvTVxcbnJpZmxpbmcvTVxcbnJpZnQvR01EU1xcbnJpZy9TTVxcbnJpZ2F0b25pL01cXG5yaWdnZWRcXG5yaWdnZXIvU01cXG5yaWdnaW5nL01cXG5yaWdodC9NRFJZU1BUR1xcbnJpZ2h0ZW91cy9VUFxcbnJpZ2h0ZW91c2x5XFxucmlnaHRlb3VzbmVzcy9VTVxcbnJpZ2h0ZnVsL1BZXFxucmlnaHRmdWxuZXNzL01cXG5yaWdodGlzbS9NXFxucmlnaHRpc3QvU01cXG5yaWdodG1vc3RcXG5yaWdodG5lc3MvTVxcbnJpZ2h0b1xcbnJpZ2h0c2l6ZS9EU0dcXG5yaWdodHdhcmQvU1xcbnJpZ2lkL1lQXFxucmlnaWRpdHkvTVxcbnJpZ2lkbmVzcy9NXFxucmlnbWFyb2xlL01TXFxucmlnb3IvTVNcXG5yaWdvcm91cy9ZUFxcbnJpZ29yb3VzbmVzcy9NXFxucmlsZS9HRFNcXG5yaWxsL01TXFxucmltL1NHTURcXG5yaW1lL01TXFxucmltbGVzc1xcbnJpbW1lZFxcbnJpbW1pbmdcXG5yaW5kL01TXFxucmluZy9aR01EUkpcXG5yaW5nZXIvTVxcbnJpbmdnaXQvTVNcXG5yaW5nbGVhZGVyL01TXFxucmluZ2xldC9NU1xcbnJpbmdsaWtlXFxucmluZ21hc3Rlci9NU1xcbnJpbmdzaWRlL01cXG5yaW5ndG9uZS9TTVxcbnJpbmd3b3JtL01cXG5yaW5rL01TXFxucmluc2UvTUdEU1xcbnJpb3QvWkdNRFJTXFxucmlvdGVyL01cXG5yaW90aW5nL01cXG5yaW90b3VzL1BZXFxucmlwL1NYVE1OUlxcbnJpcGFyaWFuXFxucmlwY29yZC9NU1xcbnJpcGUvWVBcXG5yaXBlbi9ER1xcbnJpcGVuZWQvVVxcbnJpcGVuZXNzL01cXG5yaXBvZmYvU01cXG5yaXBvc3RlL01HRFNcXG5yaXBwZWRcXG5yaXBwZXIvU01cXG5yaXBwaW5nXFxucmlwcGxlL0RTTUdcXG5yaXBwbHlcXG5yaXBzYXcvU01cXG5yaXB0aWRlL01TXFxucmlzZS9KTVpHUlNcXG5yaXNlblxcbnJpc2VyL01cXG5yaXNpYmlsaXR5L01cXG5yaXNpYmxlXFxucmlzaW5nL01cXG5yaXNrL0dNRFNcXG5yaXNraWx5XFxucmlza2luZXNzL01cXG5yaXNreS9SUFRcXG5yaXNvdHRvL01TXFxucmlzcXVlXFxucmlzc29sZS9TXFxucml0ZS9NU1xcbnJpdHVhbC9TTVlcXG5yaXR1YWxpc20vTVxcbnJpdHVhbGlzdGljXFxucml0dWFsaXN0aWNhbGx5XFxucml0dWFsaXplZFxcbnJpdHp5L1JUXFxucml2L1pOUlxcbnJpdmFsL01EU0dcXG5yaXZhbGVkL1VcXG5yaXZhbHJ5L1NNXFxucml2ZS9DR0RTXFxucml2ZXIvTVxcbnJpdmVyYmFuay9TTVxcbnJpdmVyYmVkL01TXFxucml2ZXJib2F0L1NNXFxucml2ZXJmcm9udFxcbnJpdmVyc2lkZS9NU1xcbnJpdmV0L01EUlNaR1xcbnJpdmV0ZXIvTVxcbnJpdmllcmEvU1xcbnJpdnVsZXQvTVNcXG5yaXlhbC9NU1xcbnJtXFxucm9hY2gvR01EU1xcbnJvYWQvSU1TXFxucm9hZGJlZC9TTVxcbnJvYWRibG9jay9NRFNHXFxucm9hZGhvdXNlL1NNXFxucm9hZGllL01TXFxucm9hZGtpbGwvTVxcbnJvYWRydW5uZXIvU01cXG5yb2Fkc2hvdy9TTVxcbnJvYWRzaWRlL1NNXFxucm9hZHN0ZXIvU01cXG5yb2Fkd2F5L1NNXFxucm9hZHdvcmsvU01cXG5yb2Fkd29ydGh5XFxucm9hbS9aR0RSU1xcbnJvYW1lci9NXFxucm9hbWluZy9NXFxucm9hbi9NU1xcbnJvYXIvWkdNRFJTXFxucm9hcmVyL01cXG5yb2FyaW5nL01cXG5yb2FzdC9aR01EUlNKXFxucm9hc3Rlci9NXFxucm9hc3RpbmcvTVxcbnJvYi9TXFxucm9iYmVkXFxucm9iYmVyL01TXFxucm9iYmVyeS9TTVxcbnJvYmJpbmdcXG5yb2JlJ3NcXG5yb2JlL0VHRFNcXG5yb2Jpbi9NU1xcbnJvYm9jYWxsL1NHTURcXG5yb2JvdC9NU1xcbnJvYm90aWMvU1xcbnJvYm90aWNzL01cXG5yb2JvdGl6ZS9HRFNcXG5yb2J1c3QvUllQVFxcbnJvYnVzdG5lc3MvTVxcbnJvY2svWkdNRFJTXFxucm9ja2FiaWxseS9NXFxucm9ja2JvdW5kXFxucm9ja2VyL01cXG5yb2NrZXJ5L1NcXG5yb2NrZXQvTURTR1xcbnJvY2tldHJ5L01cXG5yb2NrZmFsbC9TTVxcbnJvY2tpbmVzcy9NXFxucm9ja3kvVFJQXFxucm9jb2NvL01cXG5yb2QvU01cXG5yb2RlXFxucm9kZW50L01TXFxucm9kZW8vTVNcXG5yb2UvU01cXG5yb2VidWNrL1NNXFxucm9lbnRnZW4vTVNcXG5yb2dlci9HRFNcXG5yb2d1ZSdzXFxucm9ndWUvS1NcXG5yb2d1ZXJ5L01cXG5yb2d1aXNoL1lQXFxucm9ndWlzaG5lc3MvTVxcbnJvaWwvR0RTXFxucm9pc3Rlci9aR0RSU1xcbnJvaXN0ZXJlci9NXFxucm9sZS9NU1xcbnJvbGwvTURSWkdKU1xcbnJvbGxiYWNrL1NNXFxucm9sbGVyL01cXG5yb2xsZXJibGFkaW5nXFxucm9sbGVyc2thdGluZy9NXFxucm9sbGljay9TREdcXG5yb2xsaWNraW5nL01cXG5yb2xsbW9wL1NcXG5yb2xsb3Zlci9TTVxcbnJvbWFpbmUvTVNcXG5yb21hbi9NXFxucm9tYW5jZS9NWkdEUlNcXG5yb21hbmNlci9NXFxucm9tYW50aWMvTVNcXG5yb21hbnRpY2FsbHlcXG5yb21hbnRpY2lzbS9NXFxucm9tYW50aWNpc3QvU01cXG5yb21hbnRpY2l6ZS9EU0dcXG5yb21lby9NU1xcbnJvbXAvTURSWkdTXFxucm9tcGVyL01cXG5yb25kby9TTVxcbnJvb2QvTVNcXG5yb29mL01EUlpHU1xcbnJvb2Zlci9NXFxucm9vZmluZy9NXFxucm9vZmxlc3NcXG5yb29mdG9wL1NNXFxucm9vay9NREdTXFxucm9va2VyeS9TTVxcbnJvb2tpZS9TTVxcbnJvb20vTURSWkdTXFxucm9vbWVyL01cXG5yb29tZXR0ZS9TTVxcbnJvb21mdWwvU01cXG5yb29taW5lc3MvTVxcbnJvb21tYXRlL1NNXFxucm9vbXkvUlRQXFxucm9vc3QvU01EUlpHXFxucm9vc3Rlci9NXFxucm9vdC9NRFJaR1NcXG5yb290ZXIvTVxcbnJvb3RraXQvU01cXG5yb290bGVzcy9QXFxucm9vdGxldC9TTVxcbnJvcGUvTVpHRFJTXFxucm9wZXIvTVxcbnJvcHkvUlRcXG5yb3NhcnkvU01cXG5yb3NlL01TXFxucm9zZWF0ZVxcbnJvc2VidWQvU01cXG5yb3NlYnVzaC9NU1xcbnJvc2VtYXJ5L01cXG5yb3NldHRlL1NNXFxucm9zZXdhdGVyL01cXG5yb3Nld29vZC9NU1xcbnJvc2lseVxcbnJvc2luL1NNREdcXG5yb3NpbmVzcy9NXFxucm9zdGVyL1NNXFxucm9zdHJ1bS9NU1xcbnJvc3kvUlRQXFxucm90L1NNXFxucm90YS9TXFxucm90YXJ5L1NNXFxucm90YXRlL0RTR05YXFxucm90YXRpb24vTVxcbnJvdGF0aW9uYWxcXG5yb3RhdG9yeVxcbnJvdGUvTVxcbnJvdGd1dC9NXFxucm90aXNzZXJpZS9TTVxcbnJvdG9ncmF2dXJlL01TXFxucm90b3IvU01cXG5yb3RvdGlsbGVyL01TXFxucm90dGVkXFxucm90dGVuL1RQUllcXG5yb3R0ZW5uZXNzL01cXG5yb3R0ZXIvU1xcbnJvdHRpbmdcXG5yb3R0d2VpbGVyL1NcXG5yb3R1bmQvUFxcbnJvdHVuZGEvTVNcXG5yb3R1bmRpdHkvTVxcbnJvdHVuZG5lc3MvTVxcbnJvdWUvTVNcXG5yb3VnZS9EU01HXFxucm91Z2gvTUROUllYVEdQXFxucm91Z2hhZ2UvTVxcbnJvdWdoY2FzdFxcbnJvdWdoZW4vR0RcXG5yb3VnaGhvdXNlL01HRFNcXG5yb3VnaG5lY2svR01EU1xcbnJvdWdobmVzcy9NXFxucm91Z2hzXFxucm91Z2hzaG9kXFxucm91bGV0dGUvTVxcbnJvdW5kL1BTTURSWVpUR1xcbnJvdW5kYWJvdXQvU01cXG5yb3VuZGVsL1NcXG5yb3VuZGVsYXkvTVNcXG5yb3VuZGhvdXNlL1NNXFxucm91bmRpc2hcXG5yb3VuZG5lc3MvTVxcbnJvdW5kdXAvTVNcXG5yb3VuZHdvcm0vU01cXG5yb3VzZS9EU0dcXG5yb3VzdC9TREdcXG5yb3VzdGFib3V0L1NNXFxucm91dC9NUlpTXFxucm91dGUnc1xcbnJvdXRlL0FEU0dcXG5yb3V0ZWluZ1xcbnJvdXRlci9NXFxucm91dGluZS9NWVNcXG5yb3V0aW5pemUvR0RTXFxucm91eFxcbnJvdmUvWkdEUlNcXG5yb3Zlci9NXFxucm93L1NaR01EUlxcbnJvd2FuL1NcXG5yb3dib2F0L01TXFxucm93ZGlseVxcbnJvd2RpbmVzcy9NXFxucm93ZHkvUFJTTVRcXG5yb3dkeWlzbS9NXFxucm93ZWwvU01ER1xcbnJvd2VyL01cXG5yb3dpbmcvTVxcbnJvd2xvY2svU1xcbnJveWFsL1NNWVxcbnJveWFsaXN0L1NNXFxucm95YWx0aWVzL01cXG5yb3lhbHR5L1NNXFxucnBtXFxucnBzXFxucnRcXG5ydGVcXG5ydWIvU01cXG5ydWJhdG8vU01cXG5ydWJiZWRcXG5ydWJiZXIvU01cXG5ydWJiZXJpemUvR0RTXFxucnViYmVybmVjay9NRFJTWkdcXG5ydWJiZXJuZWNrZXIvTVxcbnJ1YmJlcnlcXG5ydWJiaW5nL1NcXG5ydWJiaXNoL01EU0dcXG5ydWJiaXNoeVxcbnJ1YmJsZS9NXFxucnViZG93bi9TTVxcbnJ1YmUvTVNcXG5ydWJlbGxhL01cXG5ydWJpY3VuZFxcbnJ1YmlkaXVtL01cXG5ydWJsZS9TTVxcbnJ1YnJpYy9TTVxcbnJ1YnkvUlNNVFxcbnJ1Y2hlZFxcbnJ1Y2svREdTXFxucnVja3NhY2svTVNcXG5ydWNrdXMvTVNcXG5ydWN0aW9uc1xcbnJ1ZGRlci9TTVxcbnJ1ZGRlcmxlc3NcXG5ydWRkaW5lc3MvTVxcbnJ1ZGR5L1JUUFxcbnJ1ZGUvWVRSUFxcbnJ1ZGVuZXNzL01cXG5ydWRpbWVudC9TTVxcbnJ1ZGltZW50YXJ5XFxucnVlL0RTTUdcXG5ydWVmdWwvUFlcXG5ydWVmdWxuZXNzL01cXG5ydWZmL01EWUdTXFxucnVmZmlhbi9NWVNcXG5ydWZmbGUvRFNNR1xcbnJ1ZmZsZWQvVVxcbnJ1Zy9TTVxcbnJ1Z2J5L01cXG5ydWdnZWQvUFRSWVxcbnJ1Z2dlZG5lc3MvTVxcbnJ1Z2dlclxcbnJ1Z3JhdC9TTVxcbnJ1aW4vTURHU1xcbnJ1aW5hdGlvbi9NXFxucnVpbm91cy9ZXFxucnVsZS9NWkdKRFJTXFxucnVsZXIvTVxcbnJ1bGluZy9NXFxucnVtL1NNXFxucnVtYmEvU01ER1xcbnJ1bWJsZS9EU0pNR1xcbnJ1bWJsaW5nL01cXG5ydW1idXN0aW91c1xcbnJ1bWluYW50L01TXFxucnVtaW5hdGUvWEdOVkRTXFxucnVtaW5hdGlvbi9NXFxucnVtaW5hdGl2ZS9ZXFxucnVtbWFnZS9EU01HXFxucnVtbWVyXFxucnVtbWVzdFxcbnJ1bW15L01cXG5ydW1vci9TTURHXFxucnVtb3Jtb25nZXIvU01cXG5ydW1wL01ZU1xcbnJ1bXBsZS9EU01HXFxucnVtcHVzL01TXFxucnVuL0FTTVxcbnJ1bmFib3V0L01TXFxucnVuYXJvdW5kL1NNXFxucnVuYXdheS9NU1xcbnJ1bmRvd24vU01cXG5ydW5lL01TXFxucnVuZy9NU1xcbnJ1bmljXFxucnVubGV0L1NNXFxucnVubmVsL1NNXFxucnVubmVyL1NNXFxucnVubmluZy9NXFxucnVubnkvUlRcXG5ydW5vZmYvU01cXG5ydW50L01TXFxucnVudGltZVxcbnJ1bnR5L1JUXFxucnVud2F5L1NNXFxucnVwZWUvU01cXG5ydXBpYWgvTVxcbnJ1cGlhaHNcXG5ydXB0dXJlL01HRFNcXG5ydXJhbFxcbnJ1c2UvTVNcXG5ydXNoL01EUlNaR1xcbnJ1c2hlci9NXFxucnVzaHlcXG5ydXNrL01TXFxucnVzc2V0L1NNXFxucnVzdC9NREdTXFxucnVzdGljL1NNXFxucnVzdGljYWxseVxcbnJ1c3RpY2F0ZS9HRFNcXG5ydXN0aWNhdGlvbi9NXFxucnVzdGljaXR5L01cXG5ydXN0aW5lc3MvTVxcbnJ1c3RsZS9EUlNKTVpHXFxucnVzdGxlci9NXFxucnVzdHByb29mL1NER1xcbnJ1c3R5L1JQTlRcXG5ydXQvU01cXG5ydXRhYmFnYS9TTVxcbnJ1dGhlbml1bS9NXFxucnV0aGVyZm9yZGl1bS9NXFxucnV0aGxlc3MvWVBcXG5ydXRobGVzc25lc3MvTVxcbnJ1dHRlZFxcbnJ1dHRpbmdcXG5ydXR0eS9SVFxcbnJ5ZS9NXFxucy9OWVhCXFxuc2FiYmF0aC9NXFxuc2FiYmF0aHNcXG5zYWJiYXRpY2FsL1NNXFxuc2FiZXIvTVNcXG5zYWJsZS9NU1xcbnNhYm90L01TXFxuc2Fib3RhZ2UvRFNNR1xcbnNhYm90ZXVyL1NNXFxuc2FicmEvTVNcXG5zYWMvU01cXG5zYWNjaGFyaW4vTVxcbnNhY2NoYXJpbmVcXG5zYWNlcmRvdGFsXFxuc2FjaGVtL1NNXFxuc2FjaGV0L1NNXFxuc2Fjay9aR01EUkpTXFxuc2Fja2Nsb3RoL01cXG5zYWNrZXIvTVxcbnNhY2tmdWwvTVNcXG5zYWNraW5nL01cXG5zYWNyYVxcbnNhY3JhbWVudC9NU1xcbnNhY3JhbWVudGFsXFxuc2FjcmVkL1lQXFxuc2FjcmVkbmVzcy9NXFxuc2FjcmlmaWNlL0RTTUdcXG5zYWNyaWZpY2lhbC9ZXFxuc2FjcmlsZWdlL01TXFxuc2FjcmlsZWdpb3VzL1lcXG5zYWNyaXN0YW4vTVNcXG5zYWNyaXN0eS9TTVxcbnNhY3JvaWxpYWMvTVNcXG5zYWNyb3NhbmN0L1BcXG5zYWNyb3NhbmN0bmVzcy9NXFxuc2FjcnVtL01cXG5zYWQvUFlcXG5zYWRkZW4vU0RHXFxuc2FkZGVyXFxuc2FkZGVzdFxcbnNhZGRsZSdzXFxuc2FkZGxlL1VEU0dcXG5zYWRkbGViYWcvTVNcXG5zYWRkbGVyL1NcXG5zYWRkbGVyeVxcbnNhZGVzXFxuc2FkaHUvU1xcbnNhZGlzbS9NXFxuc2FkaXN0L1NNXFxuc2FkaXN0aWNcXG5zYWRpc3RpY2FsbHlcXG5zYWRuZXNzL01cXG5zYWRvbWFzb2NoaXNtL01cXG5zYWRvbWFzb2NoaXN0L01TXFxuc2Fkb21hc29jaGlzdGljXFxuc2FmYXJpL1NHTURcXG5zYWZlL01ZVFBSU1xcbnNhZmVndWFyZC9TTURHXFxuc2FmZWtlZXBpbmcvTVxcbnNhZmVuZXNzL01cXG5zYWZldHkvU01cXG5zYWZmbG93ZXIvTVNcXG5zYWZmcm9uL01TXFxuc2FnL1NNXFxuc2FnYS9NU1xcbnNhZ2FjaW91cy9ZXFxuc2FnYWNpdHkvTVxcbnNhZ2UvTVlUUlNcXG5zYWdlYnJ1c2gvTVxcbnNhZ2dlZFxcbnNhZ2dpbmdcXG5zYWdneS9SVFxcbnNhZ28vTVxcbnNhZ3Vhcm8vTVNcXG5zYWhpYi9NU1xcbnNhaWQvVVxcbnNhaWwvR01EU0pcXG5zYWlsYm9hcmQvTVJaR1NcXG5zYWlsYm9hcmRlci9NXFxuc2FpbGJvYXJkaW5nL01cXG5zYWlsYm9hdC9NU1xcbnNhaWxjbG90aC9NXFxuc2FpbGZpc2gvTVNcXG5zYWlsaW5nL01cXG5zYWlsb3IvU01cXG5zYWlscGxhbmUvTVNcXG5zYWludC9NRFlTXFxuc2FpbnRob29kL01cXG5zYWludGxpa2VcXG5zYWludGxpbmVzcy9NXFxuc2FpbnRseS9QUlRcXG5zYWl0aFxcbnNha2UvTVxcbnNhbGFhbS9TTURHXFxuc2FsYWJsZS9VXFxuc2FsYWNpb3VzL1BZXFxuc2FsYWNpb3VzbmVzcy9NXFxuc2FsYWNpdHkvTVxcbnNhbGFkL01TXFxuc2FsYW1hbmRlci9TTVxcbnNhbGFtaS9TTVxcbnNhbGFyeS9EU01cXG5zYWxlL0FCTVNcXG5zYWxlcm9vbS9TXFxuc2FsZXNjbGVyay9TTVxcbnNhbGVzZ2lybC9TTVxcbnNhbGVzbGFkeS9TTVxcbnNhbGVzbWFuL01cXG5zYWxlc21hbnNoaXAvTVxcbnNhbGVzbWVuXFxuc2FsZXNwZW9wbGUvTVxcbnNhbGVzcGVyc29uL01TXFxuc2FsZXNyb29tL1NcXG5zYWxlc3dvbWFuL01cXG5zYWxlc3dvbWVuXFxuc2FsaWVuY2UvTVxcbnNhbGllbnQvU01ZXFxuc2FsaW5lL1NNXFxuc2FsaW5pdHkvTVxcbnNhbGl2YS9NXFxuc2FsaXZhcnlcXG5zYWxpdmF0ZS9HTkRTXFxuc2FsaXZhdGlvbi9NXFxuc2FsbG93L1JUUFxcbnNhbGxvd25lc3MvTVxcbnNhbGx5L0RTTUdcXG5zYWxtb24vU01cXG5zYWxtb25lbGxhL01cXG5zYWxtb25lbGxhZVxcbnNhbG9uL01TXFxuc2Fsb29uL1NNXFxuc2Fsc2EvTVNcXG5zYWx0J3NcXG5zYWx0L0NUR0RTXFxuc2FsdGJveC9NU1xcbnNhbHRjZWxsYXIvU01cXG5zYWx0ZWQvVVxcbnNhbHRlclxcbnNhbHRpbmUvU01cXG5zYWx0aW5lc3MvTVxcbnNhbHRwZXRlci9NXFxuc2FsdHNoYWtlci9TTVxcbnNhbHR3YXRlci9NXFxuc2FsdHkvUlRQXFxuc2FsdWJyaW91cy9JXFxuc2FsdXRhcnlcXG5zYWx1dGF0aW9uL01TXFxuc2FsdXRhdG9yaWFuL01TXFxuc2FsdXRhdG9yeVxcbnNhbHV0ZS9EU01HXFxuc2FsdmFnZS9EU01HXFxuc2FsdmFnZWFibGVcXG5zYWx2YXRpb24vTVxcbnNhbHZlL01aR0RSU1xcbnNhbHZlci9NXFxuc2Fsdm8vTVNcXG5zYW1hcml1bS9NXFxuc2FtYmEvTURTR1xcbnNhbWUvU1BcXG5zYW1lbmVzcy9NXFxuc2FtZXlcXG5zYW1pemRhdC9TXFxuc2Ftb3NhL1NcXG5zYW1vdmFyL1NNXFxuc2FtcGFuL1NNXFxuc2FtcGxlL0RSU01aR0pcXG5zYW1wbGVyL01cXG5zYW1wbGluZy9NXFxuc2FtdXJhaS9TTVxcbnNhbmF0b3JpdW0vU01cXG5zYW5jdGlmaWNhdGlvbi9NXFxuc2FuY3RpZnkvR0RTTlxcbnNhbmN0aW1vbmlvdXMvWVBcXG5zYW5jdGltb25pb3VzbmVzcy9NXFxuc2FuY3RpbW9ueS9NXFxuc2FuY3Rpb24vR1NNRFxcbnNhbmN0aW9uZWQvVVxcbnNhbmN0aXR5L01cXG5zYW5jdHVhcnkvU01cXG5zYW5jdHVtL1NNXFxuc2FuZC9aR01EUlNcXG5zYW5kYWwvU01cXG5zYW5kYWx3b29kL01cXG5zYW5kYmFnL1NNXFxuc2FuZGJhZ2dlZFxcbnNhbmRiYWdnZXIvU01cXG5zYW5kYmFnZ2luZ1xcbnNhbmRiYW5rL01TXFxuc2FuZGJhci9TTVxcbnNhbmRibGFzdC9aR01EUlNcXG5zYW5kYmxhc3Rlci9NXFxuc2FuZGJveC9NU1xcbnNhbmRjYXN0bGUvTVNcXG5zYW5kZXIvTVxcbnNhbmRob2cvU01cXG5zYW5kaW5lc3MvTVxcbnNhbmRsb3QvU01cXG5zYW5kbG90dGVyL01TXFxuc2FuZG1hbi9NXFxuc2FuZG1lblxcbnNhbmRwYXBlci9HTURTXFxuc2FuZHBpcGVyL01TXFxuc2FuZHBpdC9TXFxuc2FuZHN0b25lL01cXG5zYW5kc3Rvcm0vU01cXG5zYW5kd2ljaC9NRFNHXFxuc2FuZHkvUlRQXFxuc2FuZS9JWVRSXFxuc2FuZW5lc3MvTVxcbnNhbmcvU1xcbnNhbmdmcm9pZC9NXFxuc2FuZ3JpYS9NXFxuc2FuZ3VpbmFyeVxcbnNhbmd1aW5lL1lcXG5zYW5pdGFyaWFuL1NNXFxuc2FuaXRhcml1bS9TTVxcbnNhbml0YXJ5L0lVXFxuc2FuaXRhdGlvbi9NXFxuc2FuaXRpemUvWkdEUlNcXG5zYW5pdHkvSU1cXG5zYW5rXFxuc2Fuc1xcbnNhbnNlcmlmXFxuc2FwL1NNXFxuc2FwaWVuY2UvTVxcbnNhcGllbnNcXG5zYXBpZW50XFxuc2FwbGVzc1xcbnNhcGxpbmcvTVNcXG5zYXBwZWRcXG5zYXBwZXIvU1xcbnNhcHBoaXJlL1NNXFxuc2FwcGluZXNzL01cXG5zYXBwaW5nXFxuc2FwcHkvUFJUXFxuc2Fwcm9waHl0ZS9TTVxcbnNhcHJvcGh5dGljXFxuc2Fwc3Vja2VyL1NNXFxuc2Fwd29vZC9NXFxuc2FyYW4vTVxcbnNhcmNhc20vTVNcXG5zYXJjYXN0aWNcXG5zYXJjYXN0aWNhbGx5XFxuc2FyY29tYS9NU1xcbnNhcmNvcGhhZ2lcXG5zYXJjb3BoYWd1cy9NXFxuc2FyZGluZS9NU1xcbnNhcmRvbmljXFxuc2FyZG9uaWNhbGx5XFxuc2FyZ2UvTVNcXG5zYXJpL01TXFxuc2Fya3lcXG5zYXJuaWUvU1xcbnNhcm9uZy9TTVxcbnNhcnNhcGFyaWxsYS9NU1xcbnNhcnRvcmlhbC9ZXFxuc2FzaC9NU1xcbnNhc2hheS9TR01EXFxuc2Fzcy9HTURTXFxuc2Fzc2FmcmFzL01TXFxuc2Fzc3kvUlRcXG5zYXRcXG5zYXRhbmljXFxuc2F0YW5pY2FsL1lcXG5zYXRhbmlzbS9NXFxuc2F0YW5pc3QvTVNcXG5zYXRheVxcbnNhdGNoZWwvTVNcXG5zYXRlL0dEU1xcbnNhdGVlbi9NXFxuc2F0ZWxsaXRlL0RTTUdcXG5zYXRpYWJsZS9JXFxuc2F0aWF0ZS9HTkRTXFxuc2F0aWF0aW9uL01cXG5zYXRpZXR5L01cXG5zYXRpbi9NXFxuc2F0aW53b29kL1NNXFxuc2F0aW55XFxuc2F0aXJlL1NNXFxuc2F0aXJpY1xcbnNhdGlyaWNhbC9ZXFxuc2F0aXJpc3QvU01cXG5zYXRpcml6ZS9EU0dcXG5zYXRpc2ZhY3Rpb24vRU1cXG5zYXRpc2ZhY3Rpb25zXFxuc2F0aXNmYWN0b3JpbHkvVVxcbnNhdGlzZmFjdG9yeS9VXFxuc2F0aXNmaWVkL1VcXG5zYXRpc2Z5L0VEU0dcXG5zYXRpc2Z5aW5nL1VcXG5zYXRpc2Z5aW5nbHlcXG5zYXRvcmkvTVxcbnNhdHJhcC9TTVxcbnNhdHN1bWEvU1xcbnNhdHVyYXRlL0RTR05cXG5zYXR1cmF0ZWQvVVxcbnNhdHVyYXRpb24vTVxcbnNhdHVybmluZVxcbnNhdHlyL01TXFxuc2F0eXJpYXNpcy9NXFxuc2F0eXJpY1xcbnNhdWNlL01aR0RSU1xcbnNhdWNlcGFuL1NNXFxuc2F1Y2VyL01cXG5zYXVjaWx5XFxuc2F1Y2luZXNzL01cXG5zYXVjeS9SUFRcXG5zYXVlcmtyYXV0L01cXG5zYXVuYS9NRFNHXFxuc2F1bnRlci9NREdTXFxuc2F1cmlhblxcbnNhdXJvcG9kL1NNXFxuc2F1c2FnZS9NU1xcbnNhdXRlL01TXFxuc2F1dGVlZFxcbnNhdXRlaW5nXFxuc2F2YWdlL0RSU01ZVEdQXFxuc2F2YWdlbmVzcy9NXFxuc2F2YWdlcnkvU01cXG5zYXZhbm5hL01TXFxuc2F2YW50L1NNXFxuc2F2ZS9CSk1aR0RSU1xcbnNhdmVkL1VcXG5zYXZlci9NXFxuc2F2aW5nL01cXG5zYXZpbmdzL01cXG5zYXZpb3IvU01cXG5zYXZvci9NRFNHXFxuc2F2b3JpbmVzcy9NXFxuc2F2b3J5L1BUUlNNXFxuc2F2b3kvTVNcXG5zYXZ2eS9EUlNNVEdcXG5zYXcvU0dNRFxcbnNhd2JvbmVzL01cXG5zYXdidWNrL01TXFxuc2F3ZHVzdC9NXFxuc2F3Zmx5L1NNXFxuc2F3aG9yc2UvU01cXG5zYXdtaWxsL01TXFxuc2F3eWVyL1NNXFxuc2F4L01TXFxuc2F4aWZyYWdlL1NNXFxuc2F4b3Bob25lL01TXFxuc2F4b3Bob25pc3QvU01cXG5zYXknc1xcbnNheS9VU0dcXG5zYXlpbmcvU01cXG5zY2FiL01TXFxuc2NhYmJhcmQvTVNcXG5zY2FiYmVkXFxuc2NhYmJpbmVzcy9NXFxuc2NhYmJpbmdcXG5zY2FiYnkvUFRSXFxuc2NhYmllcy9NXFxuc2NhYnJvdXNcXG5zY2FkL01TXFxuc2NhZmZvbGQvU01HXFxuc2NhZmZvbGRpbmcvTVxcbnNjYWcvU1xcbnNjYWdnZWRcXG5zY2FsYWJpbGl0eVxcbnNjYWxhci9TXFxuc2NhbGF3YWcvTVNcXG5zY2FsZC9NRFNHXFxuc2NhbGUnc1xcbnNjYWxlL0NHRFNcXG5zY2FsZWxlc3NcXG5zY2FsZW5lXFxuc2NhbGluZXNzL01cXG5zY2FsbGlvbi9NU1xcbnNjYWxsb3AvR1NNRFxcbnNjYWxwL01EUlNaR1xcbnNjYWxwZWwvU01cXG5zY2FscGVyL01cXG5zY2FseS9SVFBcXG5zY2FtL01TXFxuc2NhbW1lZFxcbnNjYW1tZXIvU1xcbnNjYW1taW5nXFxuc2NhbXAvTVJTWlxcbnNjYW1wZXIvR01EXFxuc2NhbXBpL01cXG5zY2FuL01TXFxuc2NhbmRhbC9TTVxcbnNjYW5kYWxpemUvRFNHXFxuc2NhbmRhbG1vbmdlci9TTVxcbnNjYW5kYWxvdXMvWVxcbnNjYW5kaXVtL01cXG5zY2FubmVkXFxuc2Nhbm5lci9TTVxcbnNjYW5uaW5nXFxuc2NhbnNpb24vTVxcbnNjYW50L0NEU1RHXFxuc2NhbnRlclxcbnNjYW50aWx5XFxuc2NhbnRpbmVzcy9NXFxuc2NhbnRseVxcbnNjYW50bmVzcy9NXFxuc2NhbnR5L1JTUFRcXG5zY2FwZWdvYXQvU0dNRFxcbnNjYXBlZ3JhY2UvTVNcXG5zY2FwdWxhL01cXG5zY2FwdWxhZVxcbnNjYXB1bGFyL1NNXFxuc2Nhci9HTURTXFxuc2NhcmFiL1NNXFxuc2NhcmNlL1JZVFBcXG5zY2FyY2VuZXNzL01cXG5zY2FyY2l0eS9TTVxcbnNjYXJlL01TXFxuc2NhcmVjcm93L01TXFxuc2NhcmVtb25nZXIvU01HXFxuc2NhcmYvTURTR1xcbnNjYXJpZmljYXRpb24vTVxcbnNjYXJpZnkvTkRTR1xcbnNjYXJpbHlcXG5zY2FyaW5lc3MvTVxcbnNjYXJsYXRpbmEvTVxcbnNjYXJsZXQvTVxcbnNjYXJwL01EUlNaR1xcbnNjYXJwZXIvREdcXG5zY2FycmVkXFxuc2NhcnJpbmdcXG5zY2FydmVzXFxuc2NhcnkvUlRQXFxuc2NhdC9NU1xcbnNjYXRoaW5nL1lcXG5zY2F0b2xvZ2ljYWxcXG5zY2F0b2xvZ3kvTVxcbnNjYXR0ZWRcXG5zY2F0dGVyL0dKU01EXFxuc2NhdHRlcmJyYWluL1NNRFxcbnNjYXR0ZXJpbmcvTVxcbnNjYXR0ZXJzaG90XFxuc2NhdHRpbmdcXG5zY2F0dHlcXG5zY2F2ZW5nZS9aR0RSU1xcbnNjYXZlbmdlci9NXFxuc2NlbmFyaW8vTVNcXG5zY2VuYXJpc3QvTVNcXG5zY2VuZS9NU1xcbnNjZW5lcnkvTVxcbnNjZW5pY1xcbnNjZW5pY2FsbHlcXG5zY2VudC9DTVNcXG5zY2VudGVkL1VcXG5zY2VudGluZ1xcbnNjZW50bGVzc1xcbnNjZXB0ZXIvTVNcXG5zY2hcXG5zY2hhZGVuZnJldWRlXFxuc2NoZWR1bGUnc1xcbnNjaGVkdWxlL0FEU0dcXG5zY2hlZHVsZWQvVVxcbnNjaGVkdWxlci9TXFxuc2NoZW1hXFxuc2NoZW1hdGFcXG5zY2hlbWF0aWMvU01cXG5zY2hlbWF0aWNhbGx5XFxuc2NoZW1hdGl6ZS9HRFNcXG5zY2hlbWUvRFJTTVpHXFxuc2NoZW1lci9NXFxuc2NoZXJ6by9NU1xcbnNjaGlsbGluZy9NU1xcbnNjaGlzbS9TTVxcbnNjaGlzbWF0aWMvU01cXG5zY2hpc3QvTVxcbnNjaGlzdG9zb21pYXNpc1xcbnNjaGl6by9TTVxcbnNjaGl6b2lkL01TXFxuc2NoaXpvcGhyZW5pYS9NXFxuc2NoaXpvcGhyZW5pYy9TTVxcbnNjaGxlbWllbC9TTVxcbnNjaGxlcC9TTVxcbnNjaGxlcHBlZFxcbnNjaGxlcHBpbmdcXG5zY2hsb2NrL01cXG5zY2htYWx0ei9NXFxuc2NobWFsdHp5L1RSXFxuc2NobW8vTVxcbnNjaG1vZXNcXG5zY2htb296ZS9EUlNaR1xcbnNjaG11Y2svTVNcXG5zY2huYXBwcy9NXFxuc2NobmF1emVyL1NNXFxuc2Nobml0emVsL1NNXFxuc2Nobm9vay9NU1xcbnNjaG5vei9NU1xcbnNjaG5venpsZS9TTVxcbnNjaG9sYXIvTVlTXFxuc2Nob2xhcnNoaXAvTVNcXG5zY2hvbGFzdGljXFxuc2Nob2xhc3RpY2FsbHlcXG5zY2hvbGFzdGljaXNtXFxuc2Nob29sL1NHTURcXG5zY2hvb2xiYWcvTVNcXG5zY2hvb2xib29rL1NNXFxuc2Nob29sYm95L01TXFxuc2Nob29sY2hpbGQvTVxcbnNjaG9vbGNoaWxkcmVuL01cXG5zY2hvb2xkYXlzXFxuc2Nob29sZWQvVVxcbnNjaG9vbGZlbGxvdy9TTVxcbnNjaG9vbGdpcmwvU01cXG5zY2hvb2xob3VzZS9TTVxcbnNjaG9vbGluZy9NXFxuc2Nob29sa2lkL1NcXG5zY2hvb2xtYXJtL1NNXFxuc2Nob29sbWFybWlzaFxcbnNjaG9vbG1hc3Rlci9NU1xcbnNjaG9vbG1hdGUvU01cXG5zY2hvb2xtaXN0cmVzcy9NU1xcbnNjaG9vbHJvb20vU01cXG5zY2hvb2x0ZWFjaGVyL01TXFxuc2Nob29sd29yay9NXFxuc2Nob29seWFyZC9TTVxcbnNjaG9vbmVyL1NNXFxuc2NodXNzL0dNRFNcXG5zY2h1c3Nib29tZXIvTVNcXG5zY2h3YS9NU1xcbnNjaVxcbnNjaWF0aWNcXG5zY2lhdGljYS9NXFxuc2NpZW5jZS9GTVNcXG5zY2llbnRpZmljL1VcXG5zY2llbnRpZmljYWxseS9VXFxuc2NpZW50aXN0L1NNXFxuc2NpbWl0YXIvU01cXG5zY2ludGlsbGEvTVNcXG5zY2ludGlsbGF0ZS9EU0dOXFxuc2NpbnRpbGxhdGlvbi9NXFxuc2Npb24vTVNcXG5zY2lzc29yL0dEU1xcbnNjbGVyb3Nlc1xcbnNjbGVyb3Npcy9NXFxuc2NsZXJvdGljXFxuc2NvZmYvTURSU1pHXFxuc2NvZmZlci9NXFxuc2NvZmZsYXcvTVNcXG5zY29sZC9NRFNHSlxcbnNjb2xkaW5nL01cXG5zY29saW9zaXMvTVxcbnNjb25jZS9TTVxcbnNjb25lL01TXFxuc2Nvb3AvTURTR1xcbnNjb29wZnVsL01TXFxuc2Nvb3QvRFJTWkdcXG5zY29vdGVyL01cXG5zY29wZS9NR0RTXFxuc2NvcmJ1dGljXFxuc2NvcmNoL01EUlNaR1xcbnNjb3JjaGVyL01cXG5zY29yZS9NWkdEUlNcXG5zY29yZWJvYXJkL1NNXFxuc2NvcmVjYXJkL01TXFxuc2NvcmVrZWVwZXIvTVNcXG5zY29yZWxlc3NcXG5zY29yZWxpbmUvU1xcbnNjb3Jlci9NXFxuc2Nvcm4vTURSU1pHXFxuc2Nvcm5lci9NXFxuc2Nvcm5mdWwvWVxcbnNjb3JwaW9uL01TXFxuc2NvdGNoL01EU0dcXG5zY290Y2hzXFxuc2NvdW5kcmVsL01TXFxuc2NvdXIvRFJTWkdcXG5zY291cmVyL01cXG5zY291cmdlL0RTTUdcXG5zY291dC9NRFJTWkdcXG5zY291dGluZy9NXFxuc2NvdXRtYXN0ZXIvTVNcXG5zY293L01TXFxuc2Nvd2wvTURTR1xcbnNjcmFiYmxlL01aR0RSU1xcbnNjcmFiYmxlci9NXFxuc2NyYWcvTVNcXG5zY3JhZ2dseS9SVFxcbnNjcmFnZ3kvVFJcXG5zY3JhbS9TXFxuc2NyYW1ibGUnc1xcbnNjcmFtYmxlL1VHRFNcXG5zY3JhbWJsZXIvTVNcXG5zY3JhbW1lZFxcbnNjcmFtbWluZ1xcbnNjcmFwL01EUlNaR0pcXG5zY3JhcGJvb2svU01cXG5zY3JhcGUvU01cXG5zY3JhcGVyL01cXG5zY3JhcGhlYXAvU01cXG5zY3JhcGllXFxuc2NyYXBwZWRcXG5zY3JhcHBlci9NU1xcbnNjcmFwcGluZ1xcbnNjcmFwcHkvVFJcXG5zY3JhcHlhcmQvU01cXG5zY3JhdGNoL0dNRFNcXG5zY3JhdGNoY2FyZC9TXFxuc2NyYXRjaGVkL1VcXG5zY3JhdGNoaWx5XFxuc2NyYXRjaGluZXNzL01cXG5zY3JhdGNocGFkL1NcXG5zY3JhdGNoeS9QUlRcXG5zY3Jhd2wvU01ER1xcbnNjcmF3bHlcXG5zY3Jhd25pbmVzcy9NXFxuc2NyYXdueS9QVFJcXG5zY3JlYW0vU01EUlpHXFxuc2NyZWFtZXIvTVxcbnNjcmVhbWluZy9ZXFxuc2NyZWUvTURTXFxuc2NyZWVjaC9HTURTXFxuc2NyZWVjaHkvVFJcXG5zY3JlZWQvU1xcbnNjcmVlbi9TSk1ER1xcbnNjcmVlbmluZy9NXFxuc2NyZWVucGxheS9TTVxcbnNjcmVlbnNhdmVyL1NNXFxuc2NyZWVuc2hvdC9TXFxuc2NyZWVud3JpdGVyL1NNXFxuc2NyZWVud3JpdGluZy9NXFxuc2NyZXcnc1xcbnNjcmV3L1VEU0dcXG5zY3Jld2JhbGwvTVNcXG5zY3Jld2RyaXZlci9NU1xcbnNjcmV3aW5lc3MvTVxcbnNjcmV3d29ybS9TTVxcbnNjcmV3eS9QUlRcXG5zY3JpYmFsXFxuc2NyaWJibGUvTVpHRFJTXFxuc2NyaWJibGVyL01cXG5zY3JpYmUnc1xcbnNjcmliZS9DS0lTXFxuc2NyaW0vTVNcXG5zY3JpbW1hZ2UvTUdEU1xcbnNjcmltcC9TREdcXG5zY3JpbXNoYXcvTURHU1xcbnNjcmlwL01TXFxuc2NyaXB0L0ZTTURHXFxuc2NyaXB0ZWQvVVxcbnNjcmlwdHVyYWxcXG5zY3JpcHR1cmUvTVNcXG5zY3JpcHR3cml0ZXIvU01cXG5zY3JpdmVuZXIvU01cXG5zY3JvZC9NXFxuc2Nyb2Z1bGEvTVxcbnNjcm9mdWxvdXNcXG5zY3JvZy9TXFxuc2Nyb2xsL0dTTURcXG5zY3Jvb2dlL01TXFxuc2Nyb3RhXFxuc2Nyb3RhbFxcbnNjcm90dW0vTVxcbnNjcm91bmdlL0RSU1pHXFxuc2Nyb3VuZ2VyL01cXG5zY3JvdW5neS9UUlxcbnNjcnViL01TXFxuc2NydWJiZWRcXG5zY3J1YmJlci9TTVxcbnNjcnViYmluZ1xcbnNjcnViYnkvUlRcXG5zY3J1ZmYvU01cXG5zY3J1ZmZpbHlcXG5zY3J1ZmZpbmVzcy9NXFxuc2NydWZmeS9SUFRcXG5zY3J1bS9TXFxuc2NydW1oYWxmXFxuc2NydW1oYWx2ZXNcXG5zY3J1bW1hZ2UvU1xcbnNjcnVtbWVkXFxuc2NydW1taW5nXFxuc2NydW1wL1NHRFxcbnNjcnVtcHRpb3VzL1lcXG5zY3J1bXB5XFxuc2NydW5jaC9NRFNHXFxuc2NydW5jaHkvU01cXG5zY3J1cGxlL01HRFNcXG5zY3J1cHVsb3NpdHkvTVxcbnNjcnVwdWxvdXMvVVBZXFxuc2NydXB1bG91c25lc3MvVU1cXG5zY3J1dGluZWVyL1NcXG5zY3J1dGluaXplL0dEU1xcbnNjcnV0aW55L01cXG5zY3ViYS9NRFNHXFxuc2N1ZC9NU1xcbnNjdWRkZWRcXG5zY3VkZGluZ1xcbnNjdWZmL01EU0dcXG5zY3VmZmxlL01HRFNcXG5zY3VsbC9NRFJTWkdcXG5zY3VsbGVyL01cXG5zY3VsbGVyeS9TTVxcbnNjdWxsaW9uL1NNXFxuc2N1bHB0L1NHRFxcbnNjdWxwdG9yL1NNXFxuc2N1bHB0cmVzcy9NU1xcbnNjdWxwdHVyYWxcXG5zY3VscHR1cmUvRFNNR1xcbnNjdW0vTVNcXG5zY3VtYmFnL01TXFxuc2N1bW1lZFxcbnNjdW1taW5nXFxuc2N1bW15L1RSXFxuc2N1cHBlci9NREdTXFxuc2N1cmYvTVxcbnNjdXJmeVxcbnNjdXJyaWxpdHkvTVxcbnNjdXJyaWxvdXMvUFlcXG5zY3Vycmlsb3VzbmVzcy9NXFxuc2N1cnJ5L0dEU01cXG5zY3VydmlseVxcbnNjdXJ2eS9UUk1cXG5zY3V0Y2hlb24vU01cXG5zY3V0dGxlL01HRFNcXG5zY3V0dGxlYnV0dC9NXFxuc2N1enp5L1RSXFxuc2N5dGhlL0RTTUdcXG5zZWEvU01cXG5zZWFiZWQvU01cXG5zZWFiaXJkL01TXFxuc2VhYm9hcmQvU01cXG5zZWFib3JuZVxcbnNlYWNvYXN0L1NNXFxuc2VhZmFyZXIvU01cXG5zZWFmYXJpbmcvTVxcbnNlYWZsb29yL1NNXFxuc2VhZm9vZC9NXFxuc2VhZnJvbnQvU01cXG5zZWFnb2luZ1xcbnNlYWd1bGwvTVNcXG5zZWFob3JzZS9NU1xcbnNlYWwnc1xcbnNlYWwvQVVTREdcXG5zZWFsYW50L01TXFxuc2VhbGVyL1NNXFxuc2VhbHNraW4vTVxcbnNlYW0vR01ETlNcXG5zZWFtYW4vTVxcbnNlYW1hbnNoaXAvTVxcbnNlYW1sZXNzL1lcXG5zZWFtb3VudC9NU1xcbnNlYW1zdHJlc3MvTVNcXG5zZWFteS9SVFxcbnNlYW5jZS9TTVxcbnNlYXBsYW5lL1NNXFxuc2VhcG9ydC9NU1xcbnNlYXIvR01EU1xcbnNlYXJjaC9BWkdNRFJTXFxuc2VhcmNoYWJsZS9VXFxuc2VhcmNoZXIvQU1cXG5zZWFyY2hpbmcvWVxcbnNlYXJjaGxpZ2h0L01TXFxuc2VhcmluZy9ZXFxuc2Vhc2NhcGUvU01cXG5zZWFzaGVsbC9TTVxcbnNlYXNob3JlL1NNXFxuc2Vhc2ljay9QXFxuc2Vhc2lja25lc3MvTVxcbnNlYXNpZGUvTVNcXG5zZWFzb24vU0dNREJKXFxuc2Vhc29uYWJsZS9VXFxuc2Vhc29uYWJseS9VXFxuc2Vhc29uYWwvWVxcbnNlYXNvbmFsaXR5XFxuc2Vhc29uZWQvVVxcbnNlYXNvbmluZy9NXFxuc2VhdCdzXFxuc2VhdC9VR0RTXFxuc2VhdGluZy9NXFxuc2VhdG1hdGUvU01cXG5zZWF3YWxsL01TXFxuc2Vhd2FyZC9NU1xcbnNlYXdhdGVyL01cXG5zZWF3YXkvU01cXG5zZWF3ZWVkL01TXFxuc2Vhd29ydGhpbmVzcy9NXFxuc2Vhd29ydGh5L1BcXG5zZWJhY2VvdXNcXG5zZWJvcnJoZWEvTVxcbnNlYnVtXFxuc2VjJ3lcXG5zZWMvU01cXG5zZWNhbnQvU01cXG5zZWNhdGV1cnNcXG5zZWNlZGUvRFNHXFxuc2VjZXNzaW9uL01cXG5zZWNlc3Npb25pc3QvTVNcXG5zZWNsdWRlL0dEU1xcbnNlY2x1c2lvbi9NXFxuc2VjbHVzaXZlXFxuc2Vjb25kL1NMWkdNRFJZXFxuc2Vjb25kYXJpbHlcXG5zZWNvbmRhcnkvU01cXG5zZWNvbmRlci9NXFxuc2Vjb25kaGFuZFxcbnNlY29uZG1lbnQvU1xcbnNlY3JlY3kvTVxcbnNlY3JldC9TR1ZNRFlcXG5zZWNyZXRhcmlhbFxcbnNlY3JldGFyaWF0L01TXFxuc2VjcmV0YXJ5L1NNXFxuc2VjcmV0YXJ5c2hpcC9NXFxuc2VjcmV0ZS9YTlNcXG5zZWNyZXRpb24vTVxcbnNlY3JldGl2ZS9QWVxcbnNlY3JldGl2ZW5lc3MvTVxcbnNlY3JldG9yeVxcbnNlY3QvSU1TXFxuc2VjdGFyaWFuL01TXFxuc2VjdGFyaWFuaXNtL01cXG5zZWN0YXJ5L1NNXFxuc2VjdGlvbi9BRVNNXFxuc2VjdGlvbmFsL01TXFxuc2VjdGlvbmFsaXNtL01cXG5zZWN0aW9uZWRcXG5zZWN0aW9uaW5nXFxuc2VjdG9yL0VTTVxcbnNlY3VsYXJcXG5zZWN1bGFyaXNtL01cXG5zZWN1bGFyaXN0L1NNXFxuc2VjdWxhcml6YXRpb24vTVxcbnNlY3VsYXJpemUvRFNHXFxuc2VjdXJlL0RSU1lUR1xcbnNlY3VyZWQvVVxcbnNlY3VyaXR5L0lTTVxcbnNlY3lcXG5zZWRhbi9NU1xcbnNlZGF0ZS9EUlNZVEdOVlBcXG5zZWRhdGVuZXNzL01cXG5zZWRhdGlvbi9NXFxuc2VkYXRpdmUvU01cXG5zZWRlbnRhcnlcXG5zZWRnZS9NXFxuc2VkZ3lcXG5zZWRpbWVudC9NU1xcbnNlZGltZW50YXJ5XFxuc2VkaW1lbnRhdGlvbi9NXFxuc2VkaXRpb24vTVxcbnNlZGl0aW91c1xcbnNlZHVjZS9EUlNaR1xcbnNlZHVjZXIvTVxcbnNlZHVjdGlvbi9TTVxcbnNlZHVjdGl2ZS9ZUFxcbnNlZHVjdGl2ZW5lc3MvTVxcbnNlZHVjdHJlc3MvTVNcXG5zZWR1bG91cy9ZXFxuc2VlL1JTTVpcXG5zZWVkJ3NcXG5zZWVkL0FHRFNcXG5zZWVkYmVkL01TXFxuc2VlZGNhc2UvTVNcXG5zZWVkZWQvVVxcbnNlZWRlci9TTVxcbnNlZWRpbmVzcy9NXFxuc2VlZGxlc3NcXG5zZWVkbGluZy9NU1xcbnNlZWRwb2QvTVNcXG5zZWVkeS9SUFRcXG5zZWVpbmcvU1xcbnNlZWsvWkdSU1xcbnNlZWtlci9NXFxuc2VlbS9HRFNcXG5zZWVtaW5nL1lcXG5zZWVtbGluZXNzL1VNXFxuc2VlbWx5L1VSVFBcXG5zZWVuL1VcXG5zZWVwL0dEU1xcbnNlZXBhZ2UvTVxcbnNlZXIvTVxcbnNlZXJzdWNrZXIvTVxcbnNlZXNhdy9TTURHXFxuc2VldGhlL0RTR1xcbnNlZ2ZhdWx0L1NcXG5zZWdtZW50L0dTTURcXG5zZWdtZW50YXRpb24vTVxcbnNlZ21lbnRlZC9VXFxuc2VncmVnYXRlL0NEU0dOXFxuc2VncmVnYXRlZC9VXFxuc2VncmVnYXRpb24vQ01cXG5zZWdyZWdhdGlvbmlzdC9NU1xcbnNlZ3VlL01HRFNcXG5zZWd1ZWluZ1xcbnNlaWduZXVyL1NNXFxuc2VpZ25pb3IvU01cXG5zZWluZS9NWkdEUlNcXG5zZWluZXIvTVxcbnNlaXNtaWNcXG5zZWlzbWljYWxseVxcbnNlaXNtb2dyYXBoL1pNUlxcbnNlaXNtb2dyYXBoZXIvTVxcbnNlaXNtb2dyYXBoaWNcXG5zZWlzbW9ncmFwaHNcXG5zZWlzbW9ncmFwaHkvTVxcbnNlaXNtb2xvZ2ljXFxuc2Vpc21vbG9naWNhbFxcbnNlaXNtb2xvZ2lzdC9NU1xcbnNlaXNtb2xvZ3kvTVxcbnNlaXplL0dEU1xcbnNlaXp1cmUvTVNcXG5zZWxkb21cXG5zZWxlY3QvQ1NHVkRcXG5zZWxlY3Rpb24vU01cXG5zZWxlY3RpdmUvWVxcbnNlbGVjdGl2aXR5L01cXG5zZWxlY3RtYW4vTVxcbnNlbGVjdG1lblxcbnNlbGVjdG5lc3MvTVxcbnNlbGVjdG9yL01TXFxuc2VsZW5pdW0vTVxcbnNlbGVub2dyYXBoZXIvTVNcXG5zZWxlbm9ncmFwaHkvTVxcbnNlbGYvTVxcbnNlbGZpZS9TTVxcbnNlbGZpc2gvVVlQXFxuc2VsZmlzaG5lc3MvVU1cXG5zZWxmbGVzcy9QWVxcbnNlbGZsZXNzbmVzcy9NXFxuc2VsZnNhbWVcXG5zZWxsJ3NcXG5zZWxsL0FaR1JTXFxuc2VsbGVyJ3NcXG5zZWxsb2ZmL01TXFxuc2VsbG90YXBlL0RTR1xcbnNlbGxvdXQvTVNcXG5zZWx0emVyL01TXFxuc2VsdmFnZS9NU1xcbnNlbHZlc1xcbnNlbWFudGljL1NcXG5zZW1hbnRpY2FsbHlcXG5zZW1hbnRpY2lzdC9NU1xcbnNlbWFudGljcy9NXFxuc2VtYXBob3JlL0RTTUdcXG5zZW1ibGFuY2UvQVNNXFxuc2VtZW4vTVxcbnNlbWVzdGVyL1NNXFxuc2VtaS9NU1xcbnNlbWlhbm51YWwvWVxcbnNlbWlhcmlkXFxuc2VtaWF1dG9tYXRpYy9NU1xcbnNlbWlicmV2ZS9TXFxuc2VtaWNpcmNsZS9TTVxcbnNlbWljaXJjdWxhclxcbnNlbWljb2xvbi9NU1xcbnNlbWljb25kdWN0aW5nXFxuc2VtaWNvbmR1Y3Rvci9NU1xcbnNlbWljb25zY2lvdXNcXG5zZW1pZGFya25lc3MvTVxcbnNlbWlkZXRhY2hlZFxcbnNlbWlmaW5hbC9TTVxcbnNlbWlmaW5hbGlzdC9NU1xcbnNlbWlnbG9zcy9TXFxuc2VtaW1vbnRobHkvU01cXG5zZW1pbmFsXFxuc2VtaW5hci9NU1xcbnNlbWluYXJpYW4vU01cXG5zZW1pbmFyeS9TTVxcbnNlbWlvZmZpY2lhbFxcbnNlbWlvdGljL1NcXG5zZW1pb3RpY3MvTVxcbnNlbWlwZXJtZWFibGVcXG5zZW1pcHJlY2lvdXNcXG5zZW1pcHJpdmF0ZVxcbnNlbWlwcm8vU1xcbnNlbWlwcm9mZXNzaW9uYWwvU01cXG5zZW1pcXVhdmVyL1NcXG5zZW1pcmV0aXJlZFxcbnNlbWlza2lsbGVkXFxuc2VtaXNvbGlkXFxuc2VtaXN3ZWV0XFxuc2VtaXRvbmUvU01cXG5zZW1pdHJhaWxlci9NU1xcbnNlbWl0cmFuc3BhcmVudFxcbnNlbWl0cm9waWNhbFxcbnNlbWl2b3dlbC9TTVxcbnNlbWl3ZWVrbHkvU01cXG5zZW1peWVhcmx5XFxuc2Vtb2xpbmEvTVxcbnNlbXBzdHJlc3MvTVNcXG5zZW5hdGUvU01cXG5zZW5hdG9yL01TXFxuc2VuYXRvcmlhbFxcbnNlbmQvWkdSU1xcbnNlbmRlci9NXFxuc2VuZG9mZi9NU1xcbnNlbmVzY2VuY2UvTVxcbnNlbmVzY2VudFxcbnNlbmlsZVxcbnNlbmlsaXR5L01cXG5zZW5pb3IvU01cXG5zZW5pb3JpdHkvTVxcbnNlbm5hL01cXG5zZW5vci9NU1xcbnNlbm9yYS9TTVxcbnNlbm9yaXRhL1NNXFxuc2Vuc2F0aW9uL01TXFxuc2Vuc2F0aW9uYWwvWVxcbnNlbnNhdGlvbmFsaXNtL01cXG5zZW5zYXRpb25hbGlzdC9NU1xcbnNlbnNhdGlvbmFsaXplL0dEU1xcbnNlbnNlL01HRFNcXG5zZW5zZWxlc3MvUFlcXG5zZW5zZWxlc3NuZXNzL01cXG5zZW5zaWJpbGl0aWVzXFxuc2Vuc2liaWxpdHkvSU1cXG5zZW5zaWJsZS9QXFxuc2Vuc2libGVuZXNzL01cXG5zZW5zaWJseS9JXFxuc2Vuc2l0aXZlL1NNWVBcXG5zZW5zaXRpdmVuZXNzL01cXG5zZW5zaXRpdml0aWVzXFxuc2Vuc2l0aXZpdHkvSU1cXG5zZW5zaXRpemF0aW9uL0NNXFxuc2Vuc2l0aXplL0NEU0dcXG5zZW5zb3IvU01cXG5zZW5zb3J5XFxuc2Vuc3VhbC9ZXFxuc2Vuc3VhbGlzdC9TTVxcbnNlbnN1YWxpdHkvTVxcbnNlbnN1b3VzL1lQXFxuc2Vuc3VvdXNuZXNzL01cXG5zZW50L0ZBVVxcbnNlbnRlbmNlL01HRFNcXG5zZW50ZW50aW91cy9ZXFxuc2VudGllbmNlL0lNXFxuc2VudGllbnQvSVxcbnNlbnRpbWVudC9TTVxcbnNlbnRpbWVudGFsL1lcXG5zZW50aW1lbnRhbGlzbS9NXFxuc2VudGltZW50YWxpc3QvTVNcXG5zZW50aW1lbnRhbGl0eS9NXFxuc2VudGltZW50YWxpemF0aW9uL01cXG5zZW50aW1lbnRhbGl6ZS9HRFNcXG5zZW50aW5lbC9NU1xcbnNlbnRyeS9TTVxcbnNlcGFsL01TXFxuc2VwYXJhYmlsaXR5L0lNXFxuc2VwYXJhYmxlXFxuc2VwYXJhYmx5L0lcXG5zZXBhcmF0ZS9YTVlHTlZEU1BcXG5zZXBhcmF0ZW5lc3MvTVxcbnNlcGFyYXRpb24vTVxcbnNlcGFyYXRpc20vTVxcbnNlcGFyYXRpc3QvTVNcXG5zZXBhcmF0b3IvTVNcXG5zZXBpYS9NXFxuc2Vwc2lzL01cXG5zZXB0YVxcbnNlcHRhbFxcbnNlcHRldC9TTVxcbnNlcHRpY1xcbnNlcHRpY2VtaWEvTVxcbnNlcHRpY2VtaWNcXG5zZXB0dWFnZW5hcmlhbi9NU1xcbnNlcHR1bS9NXFxuc2VwdWxjaGVyL0dNRFNcXG5zZXB1bGNocmFsXFxuc2VxXFxuc2VxdWVsL1NNXFxuc2VxdWVuY2UvTVpHRFJTXFxuc2VxdWVuY2luZy9NXFxuc2VxdWVudGlhbC9GWVxcbnNlcXVlc3Rlci9TREdcXG5zZXF1ZXN0cmF0ZS9YR05EU1xcbnNlcXVlc3RyYXRpb24vTVxcbnNlcXVpbi9TTURcXG5zZXF1aW5uZWRcXG5zZXF1aXR1clxcbnNlcXVvaWEvTVNcXG5zZXJhZ2xpby9NU1xcbnNlcmFwZS9TTVxcbnNlcmFwaC9NXFxuc2VyYXBoaWNcXG5zZXJhcGhzXFxuc2VyZS9UUlxcbnNlcmVuYWRlL01HRFNcXG5zZXJlbmRpcGl0b3VzXFxuc2VyZW5kaXBpdHkvTVxcbnNlcmVuZS9SUFlUXFxuc2VyZW5lbmVzcy9NXFxuc2VyZW5pdHkvTVxcbnNlcmYvTVNcXG5zZXJmZG9tL01cXG5zZXJnZS9NXFxuc2VyZ2VhbnQvTVNcXG5zZXJpYWwvU01ZXFxuc2VyaWFsaXphdGlvbi9TTVxcbnNlcmlhbGl6ZS9HRFNCXFxuc2VyaWVzL01cXG5zZXJpZi9NU1xcbnNlcmlncmFwaC9NXFxuc2VyaWdyYXBoc1xcbnNlcmluZVxcbnNlcmlvdXMvUFlcXG5zZXJpb3VzbmVzcy9NXFxuc2VybW9uL1NNXFxuc2VybW9uaXplL0dEU1xcbnNlcm9sb2d5L01cXG5zZXJvdG9uaW5cXG5zZXJvdXNcXG5zZXJwZW50L01TXFxuc2VycGVudGluZS9NXFxuc2VycmF0ZS9YTkRcXG5zZXJyYXRpb24vTVxcbnNlcnJpZWRcXG5zZXJ1bS9NU1xcbnNlcnZhbnQvTVNcXG5zZXJ2ZSdzL0FGXFxuc2VydmUvRkFDR0RTXFxuc2VydmVyL1NNXFxuc2VydmVyeS9TXFxuc2VydmljZS9FTVNcXG5zZXJ2aWNlYWJpbGl0eS9NXFxuc2VydmljZWFibGVcXG5zZXJ2aWNlZFxcbnNlcnZpY2VtYW4vTVxcbnNlcnZpY2VtZW5cXG5zZXJ2aWNld29tYW4vTVxcbnNlcnZpY2V3b21lblxcbnNlcnZpY2luZ1xcbnNlcnZpZXR0ZS9NU1xcbnNlcnZpbGVcXG5zZXJ2aWxpdHkvTVxcbnNlcnZpbmcnc1xcbnNlcnZpbmdzXFxuc2Vydml0b3IvTVNcXG5zZXJ2aXR1ZGUvTVxcbnNlcnZvL01TXFxuc2Vydm9tZWNoYW5pc20vU01cXG5zZXJ2b21vdG9yL01TXFxuc2VzYW1lL1NNXFxuc2VzcXVpY2VudGVubmlhbC9NU1xcbnNlc3Npb24vTVNcXG5zZXQvQUlTTVxcbnNldGJhY2svTVNcXG5zZXRzY3Jldy9TTVxcbnNldHNxdWFyZS9TXFxuc2V0dC9CSlpHUlNcXG5zZXR0ZWUvTVNcXG5zZXR0ZXIvTVxcbnNldHRpbmcvTVxcbnNldHRsZSdzXFxuc2V0dGxlL0FVR0RTXFxuc2V0dGxlbWVudC9BTVxcbnNldHRsZW1lbnRzXFxuc2V0dGxlci9TTVxcbnNldHVwL01TXFxuc2V2ZW4vTUhTXFxuc2V2ZW50ZWVuL1NNSFxcbnNldmVudGVlbnRoL01cXG5zZXZlbnRlZW50aHNcXG5zZXZlbnRoL01cXG5zZXZlbnRoc1xcbnNldmVudGlldGgvTVxcbnNldmVudGlldGhzXFxuc2V2ZW50eS9TTUhcXG5zZXZlci9FVEdEU1xcbnNldmVyYWwvTVlcXG5zZXZlcmFuY2UvU01cXG5zZXZlcmUvWVBSXFxuc2V2ZXJlbmVzcy9NXFxuc2V2ZXJpdHkvTVxcbnNldy9BU0dEXFxuc2V3YWdlL01cXG5zZXdlci9NU1xcbnNld2VyYWdlL01cXG5zZXdpbmcvTVxcbnNld24vQVxcbnNleC9HTURTXFxuc2V4YWdlbmFyaWFuL1NNXFxuc2V4aWx5XFxuc2V4aW5lc3MvTVxcbnNleGlzbS9NXFxuc2V4aXN0L01TXFxuc2V4bGVzc1xcbnNleG9sb2dpc3QvU01cXG5zZXhvbG9neS9NXFxuc2V4cG90L01TXFxuc2V4dGFudC9TTVxcbnNleHRldC9NU1xcbnNleHRpbmdcXG5zZXh0b24vTVNcXG5zZXh0dXBsZXQvU01cXG5zZXh1YWwvWVxcbnNleHVhbGl0eS9NXFxuc2V4eS9QVFJcXG5zZlxcbnNoXFxuc2hhYmJpbHlcXG5zaGFiYmluZXNzL01cXG5zaGFiYnkvUFRSXFxuc2hhY2svTURTR1xcbnNoYWNrbGUnc1xcbnNoYWNrbGUvVUdEU1xcbnNoYWQvR01EU0pcXG5zaGFkZS9NU1xcbnNoYWRpbHlcXG5zaGFkaW5lc3MvTVxcbnNoYWRpbmcvTVxcbnNoYWRvdy9TR01EXFxuc2hhZG93Ym94L0dEU1xcbnNoYWRvd3kvUlRcXG5zaGFkeS9SUFRcXG5zaGFmdC9NRFNHXFxuc2hhZy9NU1xcbnNoYWdnZWRcXG5zaGFnZ2luZXNzL01cXG5zaGFnZ2luZ1xcbnNoYWdneS9UUFJcXG5zaGFoL01cXG5zaGFoc1xcbnNoYWtlL01aR1JTXFxuc2hha2Vkb3duL1NNXFxuc2hha2VuL1VcXG5zaGFrZW91dC9NU1xcbnNoYWtlci9NXFxuc2hha2V1cC9NU1xcbnNoYWtpbHlcXG5zaGFraW5lc3MvTVxcbnNoYWt5L1JQVFxcbnNoYWxlL01cXG5zaGFsbFxcbnNoYWxsb3QvTVNcXG5zaGFsbG93L1RQTVJZU1xcbnNoYWxsb3duZXNzL01cXG5zaGFsb21cXG5zaGFsdFxcbnNoYW0vR01EU1xcbnNoYW1hbi9TTVxcbnNoYW1hbmljXFxuc2hhbWFuaXNtXFxuc2hhbWFuaXN0aWNcXG5zaGFtYmxlL01HRFNcXG5zaGFtYmxlcy9NXFxuc2hhbWJvbGljXFxuc2hhbWUvTVNcXG5zaGFtZWZhY2VkL1lcXG5zaGFtZWZ1bC9QWVxcbnNoYW1lZnVsbmVzcy9NXFxuc2hhbWVsZXNzL1lQXFxuc2hhbWVsZXNzbmVzcy9NXFxuc2hhbW1lZFxcbnNoYW1taW5nXFxuc2hhbXBvby9aR01EUlNcXG5zaGFtcG9vZXIvTVxcbnNoYW1yb2NrL01TXFxuc2hhbid0XFxuc2hhbmR5L1NcXG5zaGFuZ2hhaS9EU0dcXG5zaGFuay9NU1xcbnNoYW50dW5nL01cXG5zaGFudHkvU01cXG5zaGFudHl0b3duL1NNXFxuc2hhcGUnc1xcbnNoYXBlL0FHRFNcXG5zaGFwZWQvVVxcbnNoYXBlbGVzcy9ZUFxcbnNoYXBlbGVzc25lc3MvTVxcbnNoYXBlbGluZXNzL01cXG5zaGFwZWx5L1BUUlxcbnNoYXJkL01TXFxuc2hhcmUvTVpHRFJTXFxuc2hhcmVhYmxlXFxuc2hhcmVjcm9wL1NcXG5zaGFyZWNyb3BwZWRcXG5zaGFyZWNyb3BwZXIvTVNcXG5zaGFyZWNyb3BwaW5nXFxuc2hhcmVob2xkZXIvU01cXG5zaGFyZWhvbGRpbmcvU1xcbnNoYXJlci9NXFxuc2hhcmV3YXJlL01cXG5zaGFyaWEvTVxcbnNoYXJpYWhcXG5zaGFyay9NRFNHXFxuc2hhcmtza2luL01cXG5zaGFycC9NRE5SWVNQWFpUR1xcbnNoYXJwZW4vQURHU1xcbnNoYXJwZW5lci9NU1xcbnNoYXJwZXIvTVxcbnNoYXJwaWUvTVNcXG5zaGFycGlzaFxcbnNoYXJwbmVzcy9NXFxuc2hhcnBzaG9vdGVyL1NNXFxuc2hhcnBzaG9vdGluZy9NXFxuc2hhdHRlci9HTURTXFxuc2hhdHRlcnByb29mXFxuc2hhdmUvTVpHRFJTSlxcbnNoYXZlbi9VXFxuc2hhdmVyL01cXG5zaGF2aW5nL01cXG5zaGF3bC9NU1xcbnNoYXkvTVNcXG5zaGUnZFxcbnNoZSdsbFxcbnNoZS9EU01cXG5zaGVhZi9NXFxuc2hlYXIvTURSU1pHXFxuc2hlYXJlci9NXFxuc2hlYXRoL0pNXFxuc2hlYXRoZS9VR0RTXFxuc2hlYXRoaW5nL01cXG5zaGVhdGhzXFxuc2hlYXZlL0RTTUdcXG5zaGViYW5nL01TXFxuc2hlYmVlbi9TXFxuc2hlZC9NU1xcbnNoZWRkaW5nXFxuc2hlZW4vTVxcbnNoZWVueS9UUlxcbnNoZWVwL01cXG5zaGVlcGRvZy9NU1xcbnNoZWVwZm9sZC9TTVxcbnNoZWVwaGVyZGVyL01TXFxuc2hlZXBpc2gvWVBcXG5zaGVlcGlzaG5lc3MvTVxcbnNoZWVwc2tpbi9NU1xcbnNoZWVyL01EUlNQVEdcXG5zaGVlcm5lc3MvTVxcbnNoZWV0L01TR1xcbnNoZWV0aW5nL01cXG5zaGVldGxpa2VcXG5zaGVpa2RvbS9NU1xcbnNoZWlraC9NXFxuc2hlaWtoc1xcbnNoZWlsYS9TXFxuc2hla2VsL1NNXFxuc2hlbGYvTVxcbnNoZWxsL01EUlNHXFxuc2hlbGxhYy9NU1xcbnNoZWxsYWNrZWRcXG5zaGVsbGFja2luZy9NU1xcbnNoZWxsZmlyZS9NXFxuc2hlbGxmaXNoL01TXFxuc2hlbHRlci9HTURTXFxuc2hlbHZlL0dEU1xcbnNoZWx2aW5nL01cXG5zaGVuYW5pZ2FuL1NNXFxuc2hlcGhlcmQvU01ER1xcbnNoZXBoZXJkZXNzL01TXFxuc2hlcmJldC9TTVxcbnNoZXJpZmYvU01cXG5zaGVycnkvU01cXG5zaGV3L0dEU1xcbnNoZXduXFxuc2hoXFxuc2hpYXRzdS9NXFxuc2hpYmJvbGV0aC9NXFxuc2hpYmJvbGV0aHNcXG5zaGllbGQvTURHU1xcbnNoaWZ0L0dNRFNcXG5zaGlmdGlseVxcbnNoaWZ0aW5lc3MvTVxcbnNoaWZ0bGVzcy9QWVxcbnNoaWZ0bGVzc25lc3MvTVxcbnNoaWZ0eS9SUFRcXG5zaGlpdGFrZS9TTVxcbnNoaWxsL0dNRFNKXFxuc2hpbGxlbGFnaC9NXFxuc2hpbGxlbGFnaHNcXG5zaGlsbGluZy9NXFxuc2hpbS9NU1xcbnNoaW1tZWRcXG5zaGltbWVyL1NNREdcXG5zaGltbWVyeVxcbnNoaW1taW5nXFxuc2hpbW15L0RTTUdcXG5zaGluL1pHTURSU1xcbnNoaW5ib25lL1NNXFxuc2hpbmRpZy9TTVxcbnNoaW5lL01TXFxuc2hpbmVyL01cXG5zaGluZ2xlL0RTTUdcXG5zaGluZ3VhcmQvTVxcbnNoaW5pbmVzcy9NXFxuc2hpbm5lZFxcbnNoaW5uaW5nXFxuc2hpbm55L0RTR1xcbnNoaW5zcGxpbnRzL01cXG5zaGlueS9UUlBcXG5zaGlwJ3NcXG5zaGlwL0FMU1xcbnNoaXBib2FyZC9NU1xcbnNoaXBidWlsZGVyL1NNXFxuc2hpcGJ1aWxkaW5nL01cXG5zaGlwbG9hZC9TTVxcbnNoaXBtYXRlL1NNXFxuc2hpcG1lbnQvQU1cXG5zaGlwbWVudHNcXG5zaGlwb3duZXIvTVNcXG5zaGlwcGVkL0FcXG5zaGlwcGVyL1NNXFxuc2hpcHBpbmcvTVxcbnNoaXBzaGFwZVxcbnNoaXB3cmVjay9HTURTXFxuc2hpcHdyaWdodC9NU1xcbnNoaXB5YXJkL1NNXFxuc2hpcmUvTVNcXG5zaGlyay9aR0RSU1xcbnNoaXJrZXIvTVxcbnNoaXJyL0dNRFNKXFxuc2hpcnJpbmcvTVxcbnNoaXJ0L0dNRFNcXG5zaGlydGZyb250L1NNXFxuc2hpcnRpbmcvTVxcbnNoaXJ0bGVzc1xcbnNoaXJ0c2xlZXZlL1NNXFxuc2hpcnR0YWlsL1NNXFxuc2hpcnR3YWlzdC9NU1xcbnNoaXJ0eVxcbnNoaXQvU00hXFxuc2hpdGZhY2VkLyFcXG5zaGl0aGVhZC9TIVxcbnNoaXRsb2FkLyFcXG5zaGl0dGVkLyFcXG5zaGl0dGluZy8hXFxuc2hpdHR5L1JUIVxcbnNoaXYvWk1SU1xcbnNoaXZlci9NREdcXG5zaGl2ZXJ5XFxuc2hvYWwvR01EU1xcbnNob2F0L01TXFxuc2hvY2svWkdNRFJTXFxuc2hvY2tlci9NXFxuc2hvY2tpbmcvWVxcbnNob2NrcHJvb2ZcXG5zaG9kL1VcXG5zaG9kZGlseVxcbnNob2RkaW5lc3MvTVxcbnNob2RkeS9QUk1UXFxuc2hvZS9NU1xcbnNob2Vob3JuL0dNRFNcXG5zaG9laW5nXFxuc2hvZWxhY2UvTVNcXG5zaG9lbWFrZXIvU01cXG5zaG9lc2hpbmUvU01cXG5zaG9lc3RyaW5nL1NNXFxuc2hvZXRyZWUvTVNcXG5zaG9ndW4vTVNcXG5zaG9ndW5hdGUvTVxcbnNob25lXFxuc2hvby9HRFNcXG5zaG9va1xcbnNob290L1pHTVJTSlxcbnNob290ZXIvTVxcbnNob290aW5nL01cXG5zaG9vdG91dC9NU1xcbnNob3AvTVNcXG5zaG9wYWhvbGljL01TXFxuc2hvcGZpdHRlci9TXFxuc2hvcGZpdHRpbmdcXG5zaG9wZnJvbnQvU1xcbnNob3BrZWVwZXIvTVNcXG5zaG9wbGlmdC9EUlpHU1xcbnNob3BsaWZ0ZXIvTVxcbnNob3BsaWZ0aW5nL01cXG5zaG9wcGUvTVpHRFJTXFxuc2hvcHBlci9NXFxuc2hvcHBpbmcvTVxcbnNob3B0YWxrL01cXG5zaG9wd29yblxcbnNob3JlL01HRFNcXG5zaG9yZWJpcmQvU01cXG5zaG9yZWxpbmUvTVNcXG5zaG9yaW5nL01cXG5zaG9ydC9YVEdNRE5SWVNQXFxuc2hvcnRhZ2UvTVNcXG5zaG9ydGJyZWFkL01cXG5zaG9ydGNha2UvTVNcXG5zaG9ydGNoYW5nZS9EU0dcXG5zaG9ydGNvbWluZy9NU1xcbnNob3J0Y3J1c3RcXG5zaG9ydGN1dC9NU1xcbnNob3J0ZW4vSkdEXFxuc2hvcnRlbmluZy9NXFxuc2hvcnRmYWxsL01TXFxuc2hvcnRoYW5kL01EXFxuc2hvcnRob3JuL01TXFxuc2hvcnRpc2hcXG5zaG9ydGxpc3QvREdTXFxuc2hvcnRuZXNzL01cXG5zaG9ydHNpZ2h0ZWQvUFlcXG5zaG9ydHNpZ2h0ZWRuZXNzL01cXG5zaG9ydHN0b3AvTVNcXG5zaG9ydHdhdmUvTVNcXG5zaG9ydHkvU01cXG5zaG90L01TXFxuc2hvdGd1bi9TTVxcbnNob3RndW5uZWRcXG5zaG90Z3VubmluZ1xcbnNob3VsZFxcbnNob3VsZCd2ZVxcbnNob3VsZGVyL01ER1NcXG5zaG91bGRuJ3RcXG5zaG91dC9aR01EUlNcXG5zaG91dGVyL01cXG5zaG92ZS9NR0RTXFxuc2hvdmVsL01EU0dcXG5zaG92ZWxmdWwvU01cXG5zaG93L0paR01EUlNcXG5zaG93Yml6L01cXG5zaG93Ym9hdC9NREdTXFxuc2hvd2Nhc2UvTUdEU1xcbnNob3dkb3duL01TXFxuc2hvd2VyL01ER1xcbnNob3dlcnByb29mXFxuc2hvd2VyeVxcbnNob3dnaXJsL01TXFxuc2hvd2dyb3VuZC9TXFxuc2hvd2lseVxcbnNob3dpbmVzcy9NXFxuc2hvd2luZy9NXFxuc2hvd2p1bXBpbmdcXG5zaG93bWFuL01cXG5zaG93bWFuc2hpcC9NXFxuc2hvd21lblxcbnNob3duXFxuc2hvd29mZi9TTVxcbnNob3dwaWVjZS9TTVxcbnNob3dwbGFjZS9TTVxcbnNob3dyb29tL01TXFxuc2hvd3N0b3BwZXIvTVNcXG5zaG93c3RvcHBpbmdcXG5zaG93dGltZVxcbnNob3d5L1RSUFxcbnNocHRcXG5zaHJhbmtcXG5zaHJhcG5lbC9NXFxuc2hyZWQvTVNcXG5zaHJlZGRlZFxcbnNocmVkZGVyL01TXFxuc2hyZWRkaW5nXFxuc2hyZXcvTVNcXG5zaHJld2QvUllQVFxcbnNocmV3ZG5lc3MvTVxcbnNocmV3aXNoXFxuc2hyaWVrL01EU0dcXG5zaHJpZnQvTVxcbnNocmlrZS9NU1xcbnNocmlsbC9EUlNQVEdcXG5zaHJpbGxuZXNzL01cXG5zaHJpbGx5XFxuc2hyaW1wL01EUlNaR1xcbnNocmluZS9NU1xcbnNocmluay9NU0JHXFxuc2hyaW5rYWdlL01cXG5zaHJpdmUvR0RTXFxuc2hyaXZlbC9TR0RcXG5zaHJpdmVuXFxuc2hyb3VkL0dNRFNcXG5zaHJ1Yi9NU1xcbnNocnViYmVyeS9TTVxcbnNocnViYnkvUlRcXG5zaHJ1Zy9NU1xcbnNocnVnZ2VkXFxuc2hydWdnaW5nXFxuc2hydW5rL05cXG5zaHRpY2svTVNcXG5zaHVjay9HTURTXFxuc2h1Y2tzL1NcXG5zaHVkZGVyL01EU0dcXG5zaHVmZmxlL0FNR0RTXFxuc2h1ZmZsZWJvYXJkL1NNXFxuc2h1ZmZsZXIvU01cXG5zaHVuL1NcXG5zaHVubmVkXFxuc2h1bm5pbmdcXG5zaHVudC9NU0RHXFxuc2h1c2gvRFNHXFxuc2h1dC9TXFxuc2h1dGRvd24vU01cXG5zaHV0ZXllL01cXG5zaHV0b2ZmL1NNXFxuc2h1dG91dC9TTVxcbnNodXR0ZXIvU01ER1xcbnNodXR0ZXJidWcvTVNcXG5zaHV0dGluZ1xcbnNodXR0bGUvRFNNR1xcbnNodXR0bGVjb2NrL0dNRFNcXG5zaHkvVEdEUlNNWVxcbnNoeWVyXFxuc2h5ZXN0XFxuc2h5bmVzcy9NXFxuc2h5c3Rlci9TTVxcbnNpYmlsYW50L1NNXFxuc2libGluZy9TTVxcbnNpYnlsL01TXFxuc2lieWxsaW5lXFxuc2ljL1NcXG5zaWNjZWRcXG5zaWNjaW5nXFxuc2ljay9QWFRHRE5SWVNcXG5zaWNrYmF5L1NcXG5zaWNrYmVkL1NNXFxuc2lja2VuL0RHXFxuc2lja2VuaW5nL1lcXG5zaWNraWUvTVNcXG5zaWNraXNoXFxuc2lja2xlL01TXFxuc2lja2x5L1JUXFxuc2lja25lc3MvTVNcXG5zaWNrby9NU1xcbnNpY2tvdXQvU01cXG5zaWNrcm9vbS9NU1xcbnNpZGUnc1xcbnNpZGUvQUdEU1xcbnNpZGVhcm0vU01cXG5zaWRlYmFyL1NNXFxuc2lkZWJvYXJkL1NNXFxuc2lkZWJ1cm5zL01cXG5zaWRlY2FyL1NNXFxuc2lkZWtpY2svU01cXG5zaWRlbGlnaHQvTVNcXG5zaWRlbGluZS9EU01HXFxuc2lkZWxvbmdcXG5zaWRlbWFuL01cXG5zaWRlbWVuXFxuc2lkZXBpZWNlL01TXFxuc2lkZXJlYWxcXG5zaWRlc2FkZGxlL01TXFxuc2lkZXNob3cvTVNcXG5zaWRlc3BsaXR0aW5nXFxuc2lkZXN0ZXAvTVNcXG5zaWRlc3RlcHBlZFxcbnNpZGVzdGVwcGluZ1xcbnNpZGVzdHJva2UvRFNNR1xcbnNpZGVzd2lwZS9EU01HXFxuc2lkZXRyYWNrL1NNREdcXG5zaWRld2Fsay9NU1xcbnNpZGV3YWxsL01TXFxuc2lkZXdheXNcXG5zaWRld2luZGVyL1NNXFxuc2lkaW5nL01TXFxuc2lkbGUvTUdEU1xcbnNpZWdlL01TXFxuc2llbm5hL01cXG5zaWVycmEvTVNcXG5zaWVzdGEvTVNcXG5zaWV2ZS9NR0RTXFxuc2lmdC9aR0RSU1xcbnNpZnRlZC9VXFxuc2lmdGVyL01cXG5zaWdoL0dNRFxcbnNpZ2hzXFxuc2lnaHQvR01EWVNKXFxuc2lnaHRpbmcvTVxcbnNpZ2h0bGVzc1xcbnNpZ2h0bHkvVVRSXFxuc2lnaHRyZWFkXFxuc2lnaHRzZWVpbmcvTVxcbnNpZ2h0c2Vlci9NU1xcbnNpZ21hL01TXFxuc2lnbidzL0NcXG5zaWduL0FGQ0dEU1xcbnNpZ25hZ2UvTVxcbnNpZ25hbC9NRFJZU1pHXFxuc2lnbmFsZXIvTVxcbnNpZ25hbGl6YXRpb24vTVxcbnNpZ25hbGl6ZS9HRFNcXG5zaWduYWxtYW4vTVxcbnNpZ25hbG1lblxcbnNpZ25hdG9yeS9TTVxcbnNpZ25hdHVyZS9NU1xcbnNpZ25ib2FyZC9NU1xcbnNpZ25lZC9VXFxuc2lnbmVyL0NNU1xcbnNpZ25ldC9NU1xcbnNpZ25pZmljYW5jZS9JTVxcbnNpZ25pZmljYW50L0lZXFxuc2lnbmlmaWNhdGlvbi9NXFxuc2lnbmlmeS9YRFNOR1xcbnNpZ25pbmcncy9DXFxuc2lnbmluZ3NcXG5zaWdub3IvRk1TXFxuc2lnbm9yYS9TTVxcbnNpZ25vcmVcXG5zaWdub3JpXFxuc2lnbm9yaW5hL01TXFxuc2lnbm9yaW5lXFxuc2lnbnBvc3QvR1NNRFxcbnNpbGFnZS9NXFxuc2lsZW5jZS9EUlNNWkdcXG5zaWxlbmNlci9NXFxuc2lsZW50L01SWVNUXFxuc2lsaG91ZXR0ZS9EU01HXFxuc2lsaWNhL01cXG5zaWxpY2F0ZS9NU1xcbnNpbGljZW91c1xcbnNpbGljb24vU01cXG5zaWxpY29uZS9NXFxuc2lsaWNvc2lzL01cXG5zaWxrL01OU1xcbnNpbGtpbHlcXG5zaWxraW5lc3MvTVxcbnNpbGtzY3JlZW4vU01cXG5zaWxrd29ybS9NU1xcbnNpbGt5L1RSUFxcbnNpbGwvTVNcXG5zaWxsaW5lc3MvTVxcbnNpbGx5L1RSU01QXFxuc2lsby9NU1xcbnNpbHQvR01EU1xcbnNpbHR5L1RSXFxuc2lsdmVyL0dNRFNcXG5zaWx2ZXJmaXNoL01TXFxuc2lsdmVyc21pdGgvTVxcbnNpbHZlcnNtaXRoc1xcbnNpbHZlcndhcmUvTVxcbnNpbHZlcnlcXG5zaW0vU01cXG5zaW1pYW4vTVNcXG5zaW1pbGFyL1lcXG5zaW1pbGFyaXR5L0VTTVxcbnNpbWlsZS9NU1xcbnNpbWlsaXR1ZGUvRU1cXG5zaW1tZXIvR01EU1xcbnNpbW9uaXplL0RTR1xcbnNpbW9ueS9NXFxuc2ltcGF0aWNvXFxuc2ltcGVyL0dNRFNcXG5zaW1wZXJpbmcvWVxcbnNpbXBsZS9UUlBcXG5zaW1wbGVtaW5kZWRcXG5zaW1wbGVuZXNzL01cXG5zaW1wbGV0b24vU01cXG5zaW1wbGV4XFxuc2ltcGxpY2l0eS9NXFxuc2ltcGxpZmljYXRpb24vTVxcbnNpbXBsaWZ5L0RTWE5HXFxuc2ltcGxpc3RpY1xcbnNpbXBsaXN0aWNhbGx5XFxuc2ltcGx5XFxuc2ltdWxhY3JhXFxuc2ltdWxhY3J1bS9TXFxuc2ltdWxhdGUvRURTR05cXG5zaW11bGF0aW9uL0VNXFxuc2ltdWxhdGlvbnNcXG5zaW11bGF0b3IvRU1TXFxuc2ltdWxjYXN0L0dNRFNcXG5zaW11bHRhbmVpdHkvTVxcbnNpbXVsdGFuZW91cy9ZXFxuc2luL0FTTVxcbnNpbmNlXFxuc2luY2VyZS9JWVRcXG5zaW5jZXJlclxcbnNpbmNlcml0eS9JTVxcbnNpbmUvTVNcXG5zaW5lY3VyZS9NU1xcbnNpbmV3L01TXFxuc2luZXd5XFxuc2luZnVsL1BZXFxuc2luZnVsbmVzcy9NXFxuc2luZy9CWkdNRFJZU1xcbnNpbmdhbG9uZy9TXFxuc2luZ2UvTVNcXG5zaW5nZWluZ1xcbnNpbmdlci9NXFxuc2luZ2luZy9NXFxuc2luZ2xlL1BNR0RTXFxuc2luZ2xlbmVzcy9NXFxuc2luZ2xlcy9NXFxuc2luZ2xldC9TXFxuc2luZ2xldG9uL1NNXFxuc2luZ2xldHJlZS9TTVxcbnNpbmdzb25nL1NNREdcXG5zaW5ndWxhci9TTVlcXG5zaW5ndWxhcml0eS9TTVxcbnNpbmlzdGVyXFxuc2luay9CWkdNUlNcXG5zaW5rYWJsZS9VXFxuc2lua2VyL01cXG5zaW5raG9sZS9TTVxcbnNpbmxlc3NcXG5zaW5uZWRcXG5zaW5uZXIvTVNcXG5zaW5uaW5nXFxuc2lub2xvZ3lcXG5zaW51b3NpdHkvTVxcbnNpbnVvdXMvWVxcbnNpbnVzL01TXFxuc2ludXNpdGlzL01cXG5zaW51c29pZGFsXFxuc2lwL1NNXFxuc2lwaG9uL0dNRFNcXG5zaXBwZWRcXG5zaXBwZXIvU01cXG5zaXBwaW5nXFxuc2lyL1NYTU5cXG5zaXJlL0NNR0RTXFxuc2lyZW4vTVxcbnNpcmxvaW4vU01cXG5zaXJvY2NvL1NNXFxuc2lycmFoXFxuc2lycmVlL01cXG5zaXMvTVNcXG5zaXNhbC9NXFxuc2lzc2lmaWVkXFxuc2lzc3kvUlNNVFxcbnNpc3Rlci9BU01cXG5zaXN0ZXJob29kL01TXFxuc2lzdGVybGluZXNzL01cXG5zaXN0ZXJseS9QXFxuc2l0L1NcXG5zaXRhci9TTVxcbnNpdGFyaXN0L01TXFxuc2l0Y29tL1NNXFxuc2l0ZS9NR0RTXFxuc2l0ZW1hcC9TTVxcbnNpdHRlci9TTVxcbnNpdHRpbmcvU01cXG5zaXR1XFxuc2l0dWF0ZS9EU1hHTlxcbnNpdHVhdGlvbi9NXFxuc2l0dWF0aW9uYWxcXG5zaXgvTVNIXFxuc2l4Zm9sZFxcbnNpeHBlbmNlL01TXFxuc2l4c2hvb3Rlci9NXFxuc2l4dGVlbi9TTUhcXG5zaXh0ZWVudGgvTVxcbnNpeHRlZW50aHNcXG5zaXh0aC9NXFxuc2l4dGhzXFxuc2l4dGlldGgvTVxcbnNpeHRpZXRoc1xcbnNpeHR5L1NNSFxcbnNpemFibGVcXG5zaXplJ3NcXG5zaXplL0FHRFNcXG5zaXplclxcbnNpemluZy9NXFxuc2l6emxlL0RSU01aR1xcbnNrYS9NXFxuc2thdGUvTVpHRFJTXFxuc2thdGVib2FyZC9NRFJTWkdcXG5za2F0ZWJvYXJkZXIvTVxcbnNrYXRlYm9hcmRpbmcvTVxcbnNrYXRlci9NXFxuc2thdGluZy9NXFxuc2tlZGFkZGxlL01HRFNcXG5za2VldC9aTVJcXG5za2Vpbi9NU1xcbnNrZWxldGFsXFxuc2tlbGV0b24vU01cXG5za2VwdGljL1NNXFxuc2tlcHRpY2FsL1lcXG5za2VwdGljaXNtL01cXG5za2V0Y2gvTURSU1pHXFxuc2tldGNoYm9vay9TXFxuc2tldGNoZXIvTVxcbnNrZXRjaGlseVxcbnNrZXRjaGluZXNzL01cXG5za2V0Y2hwYWQvU1xcbnNrZXRjaHkvUlRQXFxuc2tldy9NRFJaR1NcXG5za2V3YmFsZC9TXFxuc2tld2VyL01ER1xcbnNraS9TWkdNRFJcXG5za2lib2IvU1xcbnNraWQvTVNcXG5za2lkZGVkXFxuc2tpZGRpbmdcXG5za2lkcGFuL1NcXG5za2llci9NXFxuc2tpZmYvU01cXG5za2lmZmxlXFxuc2tpaW5nL01cXG5za2lsbCdzXFxuc2tpbGwvQ1NEXFxuc2tpbGxlZC9VXFxuc2tpbGxldC9TTVxcbnNraWxsZnVsL1VZXFxuc2tpbGxmdWxuZXNzL01cXG5za2ltL01TXFxuc2tpbW1lZFxcbnNraW1tZXIvU01cXG5za2ltbWluZ1xcbnNraW1wL1NER1xcbnNraW1waWx5XFxuc2tpbXBpbmVzcy9NXFxuc2tpbXB5L1JUUFxcbnNraW4vTVNcXG5za2luY2FyZS9NXFxuc2tpbmZsaW50L01TXFxuc2tpbmZ1bFxcbnNraW5oZWFkL01TXFxuc2tpbmxlc3NcXG5za2lubmVkXFxuc2tpbm5pbmVzcy9NXFxuc2tpbm5pbmdcXG5za2lubnkvUk1UUFxcbnNraW50XFxuc2tpbnRpZ2h0XFxuc2tpcC9NU1xcbnNraXBwZWRcXG5za2lwcGVyL1NNREdcXG5za2lwcGluZ1xcbnNraXJtaXNoL1pHTURSU1xcbnNraXJ0L1NNREdcXG5za2l0L01TXFxuc2tpdHRlci9HU0RcXG5za2l0dGlzaC9ZUFxcbnNraXR0aXNobmVzcy9NXFxuc2tpdHRsZS9TXFxuc2tpdmUvRFJTWkdcXG5za2l2dnkvRFNNR1xcbnNrb2FsL1NNXFxuc2t1YS9TXFxuc2t1bGR1Z2dlcnkvTVxcbnNrdWxrL1NEUlpHXFxuc2t1bGtlci9NXFxuc2t1bGwvU01cXG5za3VsbGNhcC9NU1xcbnNrdW5rL1NNREdcXG5za3kvR1NNXFxuc2t5Y2FwL1NNXFxuc2t5ZGl2ZS9EUlNaR1xcbnNreWRpdmVyL01cXG5za3lkaXZpbmcvTVxcbnNreWphY2svSlpHU0RSXFxuc2t5amFja2VyL01cXG5za3lqYWNraW5nL01cXG5za3lsYXJrL1NHTURcXG5za3lsaWdodC9NU1xcbnNreWxpbmUvU01cXG5za3lyb2NrZXQvR1NNRFxcbnNreXNjcmFwZXIvU01cXG5za3l3YXJkL1NcXG5za3l3cml0ZXIvU01cXG5za3l3cml0aW5nL01cXG5zbGFiL01TXFxuc2xhYmJlZFxcbnNsYWJiaW5nXFxuc2xhY2svUFhaVEdNRE5SWVNcXG5zbGFja2VuL0RHXFxuc2xhY2tlci9NXFxuc2xhY2tuZXNzL01cXG5zbGFja3MvTVxcbnNsYWcvTVNcXG5zbGFnZ2VkXFxuc2xhZ2dpbmdcXG5zbGFnaGVhcC9TXFxuc2xhaW5cXG5zbGFrZS9HRFNcXG5zbGFsb20vTVNER1xcbnNsYW0vTVNcXG5zbGFtbWVkXFxuc2xhbW1lci9TTVxcbnNsYW1taW5nXFxuc2xhbmRlci9NWkdEUlNcXG5zbGFuZGVyZXIvTVxcbnNsYW5kZXJvdXNcXG5zbGFuZy9NXFxuc2xhbmd5L1JUXFxuc2xhbnQvTVNER1xcbnNsYW50aW5nL1lcXG5zbGFudHdpc2VcXG5zbGFwL01TXFxuc2xhcGRhc2hcXG5zbGFwaGFwcHlcXG5zbGFwcGVkXFxuc2xhcHBlci9TXFxuc2xhcHBpbmdcXG5zbGFwc3RpY2svTVxcbnNsYXNoL01EUlNaR1xcbnNsYXNoZXIvTVxcbnNsYXQvTURHU1xcbnNsYXRlL1NNXFxuc2xhdGhlci9TREdcXG5zbGF0dGVkXFxuc2xhdHRlcm4vU01ZXFxuc2xhdWdodGVyL01EUlpHU1xcbnNsYXVnaHRlcmVyL01cXG5zbGF1Z2h0ZXJob3VzZS9NU1xcbnNsYXZlL0RSU01aR1xcbnNsYXZlaG9sZGVyL01TXFxuc2xhdmVyL01ER1xcbnNsYXZlcnkvTVxcbnNsYXZpc2gvUFlcXG5zbGF2aXNobmVzcy9NXFxuc2xhdy9NXFxuc2xheS9EUlpHSlNcXG5zbGF5ZXIvTVxcbnNsYXlpbmcvTVxcbnNsZWF6ZS9TTVxcbnNsZWF6ZWJhZy9TXFxuc2xlYXplYmFsbC9TXFxuc2xlYXppbHlcXG5zbGVhemluZXNzL01cXG5zbGVhenkvUFJUXFxuc2xlZC9NU1xcbnNsZWRkZWRcXG5zbGVkZGVyL1NNXFxuc2xlZGRpbmdcXG5zbGVkZ2UvRFNNR1xcbnNsZWRnZWhhbW1lci9HU01EXFxuc2xlZWsvU0RSWVRHUFxcbnNsZWVrbmVzcy9NXFxuc2xlZXAvU01SWkdcXG5zbGVlcGVyL01cXG5zbGVlcGlseVxcbnNsZWVwaW5lc3MvTVxcbnNsZWVwbGVzcy9QWVxcbnNsZWVwbGVzc25lc3MvTVxcbnNsZWVwb3Zlci9TTVxcbnNsZWVwd2Fsay9aR1NEUlxcbnNsZWVwd2Fsa2VyL01cXG5zbGVlcHdhbGtpbmcvTVxcbnNsZWVwd2Vhci9NXFxuc2xlZXB5L1JQVFxcbnNsZWVweWhlYWQvTVNcXG5zbGVldC9TTURHXFxuc2xlZXR5XFxuc2xlZXZlL0RTTVxcbnNsZWV2ZWxlc3NcXG5zbGVpZ2gvTURHXFxuc2xlaWdoc1xcbnNsZWlnaHQvU01cXG5zbGVuZGVyL1BSVFxcbnNsZW5kZXJpemUvRFNHXFxuc2xlbmRlcm5lc3MvTVxcbnNsZXB0XFxuc2xldXRoL01HXFxuc2xldXRoc1xcbnNsZXcvTURHU1xcbnNsaWNlL0RSU01aR1xcbnNsaWNlci9NXFxuc2xpY2svU01EUllaVEdQXFxuc2xpY2tlci9NXFxuc2xpY2tuZXNzL01cXG5zbGlkXFxuc2xpZGUvUlNNWkdcXG5zbGlkZXIvTVxcbnNsaWRlc2hvdy9NU1xcbnNsaWdodC9TTURSWVRHUFxcbnNsaWdodG5lc3MvTVxcbnNsaW0vUFNcXG5zbGltZS9NXFxuc2xpbWluZXNzL01cXG5zbGltbGluZVxcbnNsaW1tZWRcXG5zbGltbWVyL1NcXG5zbGltbWVzdFxcbnNsaW1taW5nL01cXG5zbGltbmVzcy9NXFxuc2xpbXkvUlRQXFxuc2xpbmcvU01HXFxuc2xpbmdiYWNrL1NcXG5zbGluZ3Nob3QvU01cXG5zbGluay9TR1xcbnNsaW5reS9SVFxcbnNsaXAvTVNcXG5zbGlwY2FzZS9NU1xcbnNsaXBjb3Zlci9NU1xcbnNsaXBrbm90L01TXFxuc2xpcHBhZ2UvTVNcXG5zbGlwcGVkXFxuc2xpcHBlci9TTVxcbnNsaXBwZXJpbmVzcy9NXFxuc2xpcHBlcnkvUFJUXFxuc2xpcHBpbmdcXG5zbGlwcHlcXG5zbGlwc2hvZFxcbnNsaXBzdHJlYW0vU01cXG5zbGlwd2F5L1NNXFxuc2xpdC9NU1xcbnNsaXRoZXIvU0dNRFxcbnNsaXRoZXJ5XFxuc2xpdHRlclxcbnNsaXR0aW5nXFxuc2xpdmVyL0dTTURcXG5zbG9iL01TXFxuc2xvYmJlZFxcbnNsb2JiZXIvTURTR1xcbnNsb2JiZXJ5XFxuc2xvYmJpbmdcXG5zbG9lL01TXFxuc2xvZy9NU1xcbnNsb2dhbi9TTVxcbnNsb2dhbmVlcmluZ1xcbnNsb2dnZWRcXG5zbG9nZ2luZ1xcbnNsb29wL1NNXFxuc2xvcC9NREdTXFxuc2xvcGUvU01cXG5zbG9wcGVkXFxuc2xvcHBpbHlcXG5zbG9wcGluZXNzL01cXG5zbG9wcGluZ1xcbnNsb3BweS9QVFJcXG5zbG9wcy9NXFxuc2xvc2gvRFNHXFxuc2xvdC9NU1xcbnNsb3RoL01cXG5zbG90aGZ1bC9ZUFxcbnNsb3RoZnVsbmVzcy9NXFxuc2xvdGhzXFxuc2xvdHRlZFxcbnNsb3R0aW5nXFxuc2xvdWNoL1pHTURSU1xcbnNsb3VjaGVyL01cXG5zbG91Y2h5L1RSXFxuc2xvdWdoL0dNRFxcbnNsb3VnaHNcXG5zbG92ZW4vU01ZXFxuc2xvdmVubGluZXNzL01cXG5zbG92ZW5seS9QVFJcXG5zbG93L0RSWVRHU1BcXG5zbG93Y29hY2gvU1xcbnNsb3dkb3duL1NNXFxuc2xvd25lc3MvTVxcbnNsb3dwb2tlL1NNXFxuc2x1ZGdlL01cXG5zbHVkZ3kvUlRcXG5zbHVlL01HRFNcXG5zbHVnL01TXFxuc2x1Z2dhcmQvTVNcXG5zbHVnZ2VkXFxuc2x1Z2dlci9TTVxcbnNsdWdnaW5nXFxuc2x1Z2dpc2gvUFlcXG5zbHVnZ2lzaG5lc3MvTVxcbnNsdWljZS9EU01HXFxuc2x1bS9NU1xcbnNsdW1iZXIvR1NNRFxcbnNsdW1iZXJvdXNcXG5zbHVtZG9nL1NNXFxuc2x1bWxvcmQvTVNcXG5zbHVtbWVkXFxuc2x1bW1lclxcbnNsdW1taW5nXFxuc2x1bW15L1JUXFxuc2x1bXAvU01ER1xcbnNsdW5nXFxuc2x1bmtcXG5zbHVyL01TXFxuc2x1cnAvU01ER1xcbnNsdXJyZWRcXG5zbHVycmluZ1xcbnNsdXJyeS9NXFxuc2x1c2gvTVxcbnNsdXNoaW5lc3MvTVxcbnNsdXNoeS9SUFRcXG5zbHV0L01TXFxuc2x1dHRpc2hcXG5zbHV0dHkvUlRcXG5zbHkvVFJZXFxuc2x5bmVzcy9NXFxuc21hY2svU01EUlpHXFxuc21hY2tlci9NXFxuc21hbGwvU01SVFBcXG5zbWFsbGhvbGRlci9TXFxuc21hbGxob2xkaW5nL1NcXG5zbWFsbGlzaFxcbnNtYWxsbmVzcy9NXFxuc21hbGxwb3gvTVxcbnNtYXJteS9SVFxcbnNtYXJ0L1NNRE5SWVhUR1BcXG5zbWFydGVuL0RHXFxuc21hcnRuZXNzL01cXG5zbWFydHBob25lL1NNXFxuc21hcnRzL01cXG5zbWFydHdhdGNoL01TXFxuc21hcnR5L1NNXFxuc21hcnR5cGFudHMvTVxcbnNtYXNoL01EUlNaR1xcbnNtYXNoZXIvTVxcbnNtYXNodXAvU01cXG5zbWF0dGVyaW5nL01TXFxuc21lYXIvU01ER1xcbnNtZWFyeS9SVFxcbnNtZWxsL1NNREdcXG5zbWVsbGluZXNzL01cXG5zbWVsbHkvUlBUXFxuc21lbHQvU01EUlpHXFxuc21lbHRlci9NXFxuc21pZGdlbi9NU1xcbnNtaWxheC9NXFxuc21pbGUvRFNNR1xcbnNtaWxleS9TTVxcbnNtaWxpbmcvWVxcbnNtaXJjaC9HTURTXFxuc21pcmsvU01ER1xcbnNtaXRlL1NHXFxuc21pdGgvTVxcbnNtaXRoZXJlZW5zL01cXG5zbWl0aHNcXG5zbWl0aHkvU01cXG5zbWl0dGVuXFxuc21vY2svU01ER1xcbnNtb2NraW5nL01cXG5zbW9nL01TXFxuc21vZ2d5L1JUXFxuc21va2UvRFJTTVpHXFxuc21va2Vob3VzZS9NU1xcbnNtb2tlbGVzc1xcbnNtb2tlci9NXFxuc21va2VzY3JlZW4vU01cXG5zbW9rZXN0YWNrL1NNXFxuc21va2V5XFxuc21va2luZXNzL01cXG5zbW9raW5nL01cXG5zbW9reS9SVFBcXG5zbW9sZGVyL1NHTURcXG5zbW9vY2gvTURTR1xcbnNtb29jaHlcXG5zbW9vdGgvUERSWVRHXFxuc21vb3RoaWUvTVNcXG5zbW9vdGhuZXNzL01cXG5zbW9vdGhzXFxuc21vcmdhc2JvcmQvU01cXG5zbW90ZVxcbnNtb3RoZXIvR1NNRFxcbnNtdWRnZS9EU01HXFxuc211ZGd5L1RSXFxuc211Zy9ZUFxcbnNtdWdnZXJcXG5zbXVnZ2VzdFxcbnNtdWdnbGUvWkdEUlNcXG5zbXVnZ2xlci9NXFxuc211Z2dsaW5nL01cXG5zbXVnbmVzcy9NXFxuc211cmYvU1xcbnNtdXQvTVNcXG5zbXV0dGluZXNzL01cXG5zbXV0dHkvVFJQXFxuc25hY2svU01ER1xcbnNuYWZmbGUvRFNNR1xcbnNuYWZ1L1NNXFxuc25hZy9NU1xcbnNuYWdnZWRcXG5zbmFnZ2luZ1xcbnNuYWlsL1NNREdcXG5zbmFrZS9EU01HXFxuc25ha2ViaXRlL01TXFxuc25ha2VsaWtlXFxuc25ha2Vza2luXFxuc25ha3kvUlRcXG5zbmFwJ3NcXG5zbmFwL1VTXFxuc25hcGRyYWdvbi9TTVxcbnNuYXBwZWQvVVxcbnNuYXBwZXIvTVNcXG5zbmFwcGlseVxcbnNuYXBwaW5lc3MvTVxcbnNuYXBwaW5nL1VcXG5zbmFwcGlzaC9ZUFxcbnNuYXBwaXNobmVzcy9NXFxuc25hcHB5L1RSUFxcbnNuYXBzaG90L1NNXFxuc25hcmUvRFNNR1xcbnNuYXJmL1NER1xcbnNuYXJrL1NcXG5zbmFya3kvVFJcXG5zbmFybCdzXFxuc25hcmwvVVNER1xcbnNuYXJsaW5nL1lcXG5zbmFybHkvVFJcXG5zbmF0Y2gvWkdNRFJTXFxuc25hdGNoZXIvTVxcbnNuYXp6aWx5XFxuc25henp5L1RSXFxuc25lYWsvU01EUlpHXFxuc25lYWtlci9NXFxuc25lYWtpbHlcXG5zbmVha2luZXNzL01cXG5zbmVha2luZy9ZXFxuc25lYWt5L1RSUFxcbnNuZWVyL1NKTURHXFxuc25lZXJpbmcvWVxcbnNuZWV6ZS9EU01HXFxuc25pY2svU0RSWkdcXG5zbmlja2VyL01ER1xcbnNuaWRlL1JZVFxcbnNuaWZmL1NNRFJaR1xcbnNuaWZmZXIvTVxcbnNuaWZmbGUvRFNNR1xcbnNuaWZmeS9SVFxcbnNuaWZ0ZXIvU01cXG5zbmlwL01EUlpHU1xcbnNuaXBlL1NNXFxuc25pcGVyL01cXG5zbmlwcGVkXFxuc25pcHBldC9TTVxcbnNuaXBwaW5nXFxuc25pcHB5L1JUXFxuc25pcHMvTVxcbnNuaXQvTVNcXG5zbml0Y2gvTURTR1xcbnNuaXZlbC9TTURSWkdcXG5zbml2ZWxlci9NXFxuc25vYi9NU1xcbnNub2JiZXJ5L01cXG5zbm9iYmlzaC9QWVxcbnNub2JiaXNobmVzcy9NXFxuc25vYmJ5L1JUXFxuc25vZy9TXFxuc25vZ2dlZFxcbnNub2dnaW5nXFxuc25vb2QvU01cXG5zbm9va2VyL01EU0dcXG5zbm9vcC9TTURSWkdcXG5zbm9vcGVyL01cXG5zbm9vcHkvVFJcXG5zbm9vdC9TTVxcbnNub290aWx5XFxuc25vb3RpbmVzcy9NXFxuc25vb3R5L1BUUlxcbnNub296ZS9EU01HXFxuc25vcmUvRFJTTVpHXFxuc25vcmVyL01cXG5zbm9ya2VsL1pHTURSU1xcbnNub3JrZWxlci9NXFxuc25vcmtlbGluZy9NXFxuc25vcnQvU01EUlpHXFxuc25vcnRlci9NXFxuc25vdC9NU1xcbnNub3R0aWx5XFxuc25vdHRpbmVzcy9NXFxuc25vdHR5L1RQUlxcbnNub3V0L1NNXFxuc25vdy9NREdTXFxuc25vd2JhbGwvR1NNRFxcbnNub3diYW5rL1NNXFxuc25vd2JpcmQvU01cXG5zbm93Ymxvd2VyL01TXFxuc25vd2JvYXJkL1pHTURSU1xcbnNub3dib2FyZGVyL01cXG5zbm93Ym9hcmRpbmcvTVxcbnNub3dib3VuZFxcbnNub3dkcmlmdC9TTVxcbnNub3dkcm9wL1NNXFxuc25vd2ZhbGwvU01cXG5zbm93ZmllbGQvU01cXG5zbm93Zmxha2UvU01cXG5zbm93aW5lc3MvTVxcbnNub3dsaW5lXFxuc25vd21hbi9NXFxuc25vd21lblxcbnNub3dtb2JpbGUvRFNNR1xcbnNub3dwbG93L1NHTURcXG5zbm93c2hlZFxcbnNub3dzaG9lL1NNXFxuc25vd3Nob2VpbmdcXG5zbm93c3Rvcm0vU01cXG5zbm93c3VpdC9TTVxcbnNub3d5L1BSVFxcbnNudWIvTVNcXG5zbnViYmVkXFxuc251YmJpbmdcXG5zbnVmZi9TTURSWVpHXFxuc251ZmZib3gvTVNcXG5zbnVmZmVyL01cXG5zbnVmZmxlL01HRFNcXG5zbnVnL01ZU1BcXG5zbnVnZ2VkXFxuc251Z2dlclxcbnNudWdnZXN0XFxuc251Z2dpbmdcXG5zbnVnZ2xlL01HRFNcXG5zbnVnbmVzcy9NXFxuc29cXG5zb2FrL01ER1NKXFxuc29ha2luZy9NXFxuc29hcC9NREdTXFxuc29hcGJveC9NU1xcbnNvYXBpbmVzcy9NXFxuc29hcHN0b25lL01cXG5zb2Fwc3Vkcy9NXFxuc29hcHkvUlBUXFxuc29hci9NREdTXFxuc29iL1NNXFxuc29iYmVkXFxuc29iYmluZy9ZXFxuc29iZXIvU0RSWVBUR1xcbnNvYmVybmVzcy9NXFxuc29icmlldHkvSU1cXG5zb2JyaXF1ZXQvU01cXG5zb2NcXG5zb2NjZXIvTVxcbnNvY2lhYmlsaXR5L01cXG5zb2NpYWJsZS9TTVxcbnNvY2lhYmx5XFxuc29jaWFsL1NNWVxcbnNvY2lhbGlzbS9NXFxuc29jaWFsaXN0L1NNXFxuc29jaWFsaXN0aWNcXG5zb2NpYWxpdGUvU01cXG5zb2NpYWxpemF0aW9uL01cXG5zb2NpYWxpemUvRFNHXFxuc29jaWV0YWxcXG5zb2NpZXR5L1NNXFxuc29jaW9lY29ub21pY1xcbnNvY2lvZWNvbm9taWNhbGx5XFxuc29jaW9sb2dpY2FsL1lcXG5zb2Npb2xvZ2lzdC9TTVxcbnNvY2lvbG9neS9NXFxuc29jaW9wYXRoL01cXG5zb2Npb3BhdGhzXFxuc29jaW9wb2xpdGljYWxcXG5zb2NrL01ER1NcXG5zb2NrZXQvU01cXG5zb2NrZXllL1NNXFxuc29kL1NNXFxuc29kYS9NU1xcbnNvZGRlZFxcbnNvZGRlbi9ZXFxuc29kZGluZ1xcbnNvZGl1bS9NXFxuc29kb21pdGUvTVNcXG5zb2RvbWl6ZS9HRFNcXG5zb2RvbXkvTVxcbnNvZXZlclxcbnNvZmEvTVNcXG5zb2Z0L05SWVhUUFxcbnNvZnRiYWNrXFxuc29mdGJhbGwvTVNcXG5zb2Z0Ym91bmRcXG5zb2Z0Y292ZXJcXG5zb2Z0ZW4vRFJaR1xcbnNvZnRlbmVyL01cXG5zb2Z0aGVhcnRlZFxcbnNvZnRuZXNzL01cXG5zb2Z0d2FyZS9NXFxuc29mdHdvb2QvU01cXG5zb2Z0eS9TTVxcbnNvZ2dpbHlcXG5zb2dnaW5lc3MvTVxcbnNvZ2d5L1JUUFxcbnNvaWduZVxcbnNvaWduZWVcXG5zb2lsL01ER1NcXG5zb2lsZWQvVVxcbnNvaXJlZS9TTVxcbnNvam91cm4vWkdNRFJTXFxuc29qb3VybmVyL01cXG5zb2wvU01cXG5zb2xhY2UvRFNNR1xcbnNvbGFyXFxuc29sYXJpYVxcbnNvbGFyaXVtL01cXG5zb2xkXFxuc29sZGVyL1pHU01EUlxcbnNvbGRlcmVyL01cXG5zb2xkaWVyL01EWVNHXFxuc29sZGllcnkvTVxcbnNvbGUvRlNER01cXG5zb2xlY2lzbS9TTVxcbnNvbGVseVxcbnNvbGVtbi9QVFJZXFxuc29sZW1uZXNzL01cXG5zb2xlbW5pZnkvRFNHXFxuc29sZW1uaXR5L1NNXFxuc29sZW1uaXphdGlvbi9NXFxuc29sZW1uaXplL0RTR1xcbnNvbGVtbm5lc3MvTVxcbnNvbGVub2lkL01TXFxuc29saWNpdC9HRFNcXG5zb2xpY2l0YXRpb24vU01cXG5zb2xpY2l0ZWQvVVxcbnNvbGljaXRvci9TTVxcbnNvbGljaXRvdXMvUFlcXG5zb2xpY2l0b3VzbmVzcy9NXFxuc29saWNpdHVkZS9NXFxuc29saWQvUFNNUllUXFxuc29saWRhcml0eS9NXFxuc29saWRpXFxuc29saWRpZmljYXRpb24vTVxcbnNvbGlkaWZ5L0RTTkdcXG5zb2xpZGl0eS9NXFxuc29saWRuZXNzL01cXG5zb2xpZHVzL01cXG5zb2xpbG9xdWllc1xcbnNvbGlsb3F1aXplL0RTR1xcbnNvbGlsb3F1eS9NXFxuc29saXBzaXNtL01cXG5zb2xpcHNpc3RpY1xcbnNvbGl0YWlyZS9NU1xcbnNvbGl0YXJpbmVzcy9NXFxuc29saXRhcnkvU01QXFxuc29saXR1ZGUvTVxcbnNvbG8vTURHU1xcbnNvbG9pc3QvTVNcXG5zb2xzdGljZS9NU1xcbnNvbHViaWxpdHkvSU1cXG5zb2x1YmxlL01TXFxuc29sdXRlJ3NcXG5zb2x1dGUvQVhOXFxuc29sdXRlc1xcbnNvbHV0aW9uJ3MvQUVcXG5zb2x2YWJsZS9JVVxcbnNvbHZlL0VBRFNHXFxuc29sdmVkL1VcXG5zb2x2ZW5jeS9JTVxcbnNvbHZlbnQvSU1TXFxuc29sdmVyL1NNXFxuc29tYXRpY1xcbnNvbWF0b3NlbnNvcnlcXG5zb21iZXIvUFlcXG5zb21iZXJuZXNzL01cXG5zb21icmVyby9NU1xcbnNvbWVcXG5zb21lYm9keS9TTVxcbnNvbWVkYXlcXG5zb21laG93XFxuc29tZW9uZS9NU1xcbnNvbWVwbGFjZVxcbnNvbWVyc2F1bHQvTURHU1xcbnNvbWVyc2V0L1NNXFxuc29tZXJzZXR0ZWRcXG5zb21lcnNldHRpbmdcXG5zb21ldGhpbmcvU01cXG5zb21ldGltZS9TXFxuc29tZXdheS9TXFxuc29tZXdoYXQvU1xcbnNvbWV3aGVyZVxcbnNvbW5hbWJ1bGlzbS9NXFxuc29tbmFtYnVsaXN0L1NNXFxuc29tbm9sZW5jZS9NXFxuc29tbm9sZW50XFxuc29uL1NNXFxuc29uYXIvU01cXG5zb25hdGEvU01cXG5zb25hdGluYS9TTVxcbnNvbmcvTVNcXG5zb25nYmlyZC9TTVxcbnNvbmdib29rL1NNXFxuc29uZ2Zlc3QvU01cXG5zb25nc3Rlci9NU1xcbnNvbmdzdHJlc3MvTVNcXG5zb25nd3JpdGVyL1NNXFxuc29uZ3dyaXRpbmdcXG5zb25pY1xcbnNvbm5ldC9TTVxcbnNvbm55L1NNXFxuc29ub2dyYW0vU01cXG5zb25vcml0eS9NXFxuc29ub3JvdXMvWVBcXG5zb25vcm91c25lc3MvTVxcbnNvbnNvZmJpdGNoZXNcXG5zb29uL1JUXFxuc29vdC9NXFxuc29vdGgvTURSU1pHXFxuc29vdGhlXFxuc29vdGhlci9NXFxuc29vdGhpbmcvWVxcbnNvb3Roc2F5ZXIvTVNcXG5zb290aHNheWluZy9NXFxuc29vdHkvUlRcXG5zb3AvU01cXG5zb3BoXFxuc29waGlzbS9NXFxuc29waGlzdC9NU1xcbnNvcGhpc3RpY1xcbnNvcGhpc3RpY2FsXFxuc29waGlzdGljYXRlL0RTTUdOXFxuc29waGlzdGljYXRlZC9VXFxuc29waGlzdGljYXRpb24vTVxcbnNvcGhpc3RyeS9TTVxcbnNvcGhvbW9yZS9NU1xcbnNvcGhvbW9yaWNcXG5zb3BvcmlmaWMvTVNcXG5zb3BvcmlmaWNhbGx5XFxuc29wcGVkXFxuc29wcGluZ1xcbnNvcHB5L1JUXFxuc29wcmFuby9NU1xcbnNvcmJldC9TTVxcbnNvcmNlcmVyL01TXFxuc29yY2VyZXNzL01TXFxuc29yY2VyeS9NXFxuc29yZGlkL1BZXFxuc29yZGlkbmVzcy9NXFxuc29yZS9NWVRSU1BcXG5zb3JlaGVhZC9NU1xcbnNvcmVuZXNzL01cXG5zb3JnaHVtL01cXG5zb3Jvcml0eS9TTVxcbnNvcnJlbC9TTVxcbnNvcnJpbHlcXG5zb3JyaW5lc3MvTVxcbnNvcnJvdy9TTURHXFxuc29ycm93ZnVsL1lQXFxuc29ycm93ZnVsbmVzcy9NXFxuc29ycnkvUlRQXFxuc29ydC9GQVNHRE1cXG5zb3J0YVxcbnNvcnRlZC9VXFxuc29ydGVyL1NNXFxuc29ydGllL0RTTVxcbnNvcnRpZWluZ1xcbnNvdC9TTVxcbnNvdHRpc2hcXG5zb3Und2VzdGVyXFxuc291L1NNSFxcbnNvdWZmbGUvU01cXG5zb3VnaC9NREdcXG5zb3VnaHNcXG5zb3VnaHQvVVxcbnNvdWsvU1xcbnNvdWwvTVNcXG5zb3VsZnVsL1lQXFxuc291bGZ1bG5lc3MvTVxcbnNvdWxsZXNzL1lQXFxuc291bG1hdGUvU01cXG5zb3VuZC9KUFNNRFJZWlRHXFxuc291bmRhbGlrZS9TXFxuc291bmRiYXIvU1xcbnNvdW5kYml0ZS9TXFxuc291bmRib2FyZC9NU1xcbnNvdW5kY2hlY2svU1xcbnNvdW5kZXIvTVxcbnNvdW5kaW5nL01cXG5zb3VuZGxlc3MvWVxcbnNvdW5kbmVzcy9VTVxcbnNvdW5kcHJvb2YvR0RTXFxuc291bmRwcm9vZmluZy9NXFxuc291bmRzY2FwZS9TXFxuc291bmR0cmFjay9TTVxcbnNvdXAvTURHU1xcbnNvdXBjb24vTVNcXG5zb3VweS9SVFxcbnNvdXIvTURSWVRHU1BcXG5zb3VyY2UvQURTTUdcXG5zb3VyZG91Z2gvTVxcbnNvdXJkb3VnaHNcXG5zb3VyaXNoXFxuc291cm5lc3MvTVxcbnNvdXJwdXNzL01TXFxuc291c2FwaG9uZS9NU1xcbnNvdXNlL0RTTUdcXG5zb3V0aC9NXFxuc291dGhib3VuZFxcbnNvdXRoZWFzdC9aTVJcXG5zb3V0aGVhc3Rlci9NWVxcbnNvdXRoZWFzdGVyblxcbnNvdXRoZWFzdHdhcmQvU1xcbnNvdXRoZXJseS9TTVxcbnNvdXRoZXJuL1NaTVJcXG5zb3V0aGVybmVyL01cXG5zb3V0aGVybm1vc3RcXG5zb3V0aHBhdy9TTVxcbnNvdXRod2FyZC9NU1xcbnNvdXRod2VzdC9aTVJcXG5zb3V0aHdlc3Rlci9NWVxcbnNvdXRod2VzdGVyblxcbnNvdXRod2VzdHdhcmQvU1xcbnNvdXZlbmlyL1NNXFxuc292ZXJlaWduL1NNXFxuc292ZXJlaWdudHkvTVxcbnNvdmlldC9TTVxcbnNvdydzXFxuc293L0FTR0RcXG5zb3dlci9TTVxcbnNvd24vQVxcbnNveS9NXFxuc295YmVhbi9NU1xcbnNvenpsZWRcXG5zcGEvU01cXG5zcGFjZS9EUlNNWkdcXG5zcGFjZWNyYWZ0L01TXFxuc3BhY2VmbGlnaHQvTVNcXG5zcGFjZW1hbi9NXFxuc3BhY2VtZW5cXG5zcGFjZXBvcnQvU01cXG5zcGFjZXIvTVxcbnNwYWNlc2hpcC9TTVxcbnNwYWNlc3VpdC9TTVxcbnNwYWNldGltZVxcbnNwYWNld2Fsay9TR01EXFxuc3BhY2V3b21hbi9NXFxuc3BhY2V3b21lblxcbnNwYWNleVxcbnNwYWNpYWxcXG5zcGFjaWVyXFxuc3BhY2llc3RcXG5zcGFjaW5lc3MvTVxcbnNwYWNpbmcvTVxcbnNwYWNpb3VzL1lQXFxuc3BhY2lvdXNuZXNzL01cXG5zcGFkZS9EU01HXFxuc3BhZGVmdWwvTVNcXG5zcGFkZXdvcmsvTVxcbnNwYWRpY2VzXFxuc3BhZGl4L01cXG5zcGFnaGV0dGkvTVxcbnNwYWtlXFxuc3BhbS9NU1xcbnNwYW1tZWRcXG5zcGFtbWVyL1NNXFxuc3BhbW1pbmdcXG5zcGFuL01TXFxuc3BhbmRleC9NXFxuc3BhbmdsZS9EU01HXFxuc3BhbmdseVxcbnNwYW5pZWwvU01cXG5zcGFuay9TTURHSlxcbnNwYW5raW5nL01cXG5zcGFubmVkXFxuc3Bhbm5lci9TTVxcbnNwYW5uaW5nXFxuc3Bhci9NU1xcbnNwYXJlL0RSU01ZVEdQXFxuc3BhcmVuZXNzL01cXG5zcGFyZXJpYnMvTVxcbnNwYXJpbmcvVVlcXG5zcGFyay9TTURZR1xcbnNwYXJrbGUvRFJTTVpHXFxuc3BhcmtsZXIvTVxcbnNwYXJreS9SVFxcbnNwYXJyZWRcXG5zcGFycmluZ1xcbnNwYXJyb3cvU01cXG5zcGFycm93aGF3ay9TXFxuc3BhcnNlL1JZVFBcXG5zcGFyc2VuZXNzL01cXG5zcGFyc2l0eS9NXFxuc3BhcnRhblxcbnNwYXNtL1NNXFxuc3Bhc21vZGljXFxuc3Bhc21vZGljYWxseVxcbnNwYXN0aWMvU01cXG5zcGF0L01TXFxuc3BhdGUvU01cXG5zcGF0aGUvU01cXG5zcGF0aWFsL1lcXG5zcGF0dGVkXFxuc3BhdHRlci9TR01EXFxuc3BhdHRpbmdcXG5zcGF0dWxhL1NNXFxuc3BhdmluL01EXFxuc3Bhd24vU01ER1xcbnNwYXkvREdTXFxuc3BlYWsvU1JaR0pcXG5zcGVha2Vhc3kvU01cXG5zcGVha2VyL01cXG5zcGVha2VycGhvbmUvU1xcbnNwZWFyL1NNREdcXG5zcGVhcmZpc2gvR01EU1xcbnNwZWFyZ3VuXFxuc3BlYXJoZWFkL0dNRFNcXG5zcGVhcm1pbnQvTVxcbnNwZWMvTVNcXG5zcGVjaWFsL1NNWVxcbnNwZWNpYWxpc20vU1xcbnNwZWNpYWxpc3QvTVNcXG5zcGVjaWFsaXphdGlvbi9NU1xcbnNwZWNpYWxpemUvR0RTXFxuc3BlY2lhbHR5L1NNXFxuc3BlY2llL1NNXFxuc3BlY2llcy9NXFxuc3BlY2lmXFxuc3BlY2lmaWFibGVcXG5zcGVjaWZpYy9NU1xcbnNwZWNpZmljYWxseVxcbnNwZWNpZmljYXRpb24vTVxcbnNwZWNpZmljaXR5L01cXG5zcGVjaWZpZWQvVVxcbnNwZWNpZnkvWE5aRFJTR1xcbnNwZWNpbWVuL1NNXFxuc3BlY2lvdXMvWVBcXG5zcGVjaW91c25lc3MvTVxcbnNwZWNrL1NNREdcXG5zcGVja2xlL01HRFNcXG5zcGVjcy9NXFxuc3BlY3RhY2xlL1NNXFxuc3BlY3RhY2xlcy9NXFxuc3BlY3RhY3VsYXIvTVlTXFxuc3BlY3RhdGUvRFNHXFxuc3BlY3RhdG9yL1NNXFxuc3BlY3Rlci9BTVNcXG5zcGVjdHJhXFxuc3BlY3RyYWxcXG5zcGVjdHJvbWV0ZXIvTVNcXG5zcGVjdHJvc2NvcGUvTVNcXG5zcGVjdHJvc2NvcGljXFxuc3BlY3Ryb3Njb3B5L01cXG5zcGVjdHJ1bS9NXFxuc3BlY3VsYXRlL0RTWEdOVlxcbnNwZWN1bGF0aW9uL01cXG5zcGVjdWxhdGl2ZS9ZXFxuc3BlY3VsYXRvci9NU1xcbnNwZWRcXG5zcGVlY2gvTVNcXG5zcGVlY2hpZnkvRFNHXFxuc3BlZWNobGVzcy9ZUFxcbnNwZWVjaGxlc3NuZXNzL01cXG5zcGVlY2h3cml0ZXIvU1xcbnNwZWVkL1NNUlpHXFxuc3BlZWRib2F0L1NNXFxuc3BlZWRlci9NXFxuc3BlZWRpbHlcXG5zcGVlZGluZXNzL01cXG5zcGVlZGluZy9NXFxuc3BlZWRvbWV0ZXIvTVNcXG5zcGVlZHN0ZXIvU01cXG5zcGVlZHVwL01TXFxuc3BlZWR3YXkvU01cXG5zcGVlZHdlbGwvTVxcbnNwZWVkeS9UUFJcXG5zcGVsZW9sb2dpY2FsXFxuc3BlbGVvbG9naXN0L01TXFxuc3BlbGVvbG9neS9NXFxuc3BlbGwvSlNNRFJaR1xcbnNwZWxsYmluZC9aR1JTXFxuc3BlbGxiaW5kZXIvTVxcbnNwZWxsYm91bmRcXG5zcGVsbGNoZWNrL01EUlpHU1xcbnNwZWxsY2hlY2tlci9NXFxuc3BlbGxkb3duL1NNXFxuc3BlbGxlci9NXFxuc3BlbGxpbmcvTVxcbnNwZWx1bmtlci9NU1xcbnNwZWx1bmtpbmcvTVxcbnNwZW5kL0JTUlpHXFxuc3BlbmRlci9NXFxuc3BlbmRpbmcvTVxcbnNwZW5kdGhyaWZ0L01TXFxuc3BlbnQvVVxcbnNwZXJtL1NNXFxuc3Blcm1hdG96b2FcXG5zcGVybWF0b3pvb24vTVxcbnNwZXJtaWNpZGFsXFxuc3Blcm1pY2lkZS9NU1xcbnNwZXcvTURSWkdTXFxuc3Bld2VyL01cXG5zcGhhZ251bS9NU1xcbnNwaGVyZS9TTVxcbnNwaGVyaWNhbC9ZXFxuc3BoZXJvaWQvU01cXG5zcGhlcm9pZGFsXFxuc3BoaW5jdGVyL01TXFxuc3BoaW54L01TXFxuc3BpYy9TXFxuc3BpY2UvRFNNR1xcbnNwaWNpbHlcXG5zcGljaW5lc3MvTVxcbnNwaWN1bGUvTVNcXG5zcGljeS9QUlRcXG5zcGlkZXIvU01cXG5zcGlkZXJ3ZWIvTVNcXG5zcGlkZXJ5XFxuc3BpZWwvU01ER1xcbnNwaWZmL1NER1xcbnNwaWZmeS9UUlxcbnNwaWdvdC9TTVxcbnNwaWtlL0RTTUdcXG5zcGlraW5lc3MvTVxcbnNwaWt5L1JQVFxcbnNwaWxsL1NNREdcXG5zcGlsbGFnZS9NU1xcbnNwaWxsb3Zlci9TTVxcbnNwaWxsd2F5L01TXFxuc3Bpbi9NU1xcbnNwaW5hY2gvTVxcbnNwaW5hbC9TTVlcXG5zcGluZGxlL01HRFNcXG5zcGluZGx5L1RSXFxuc3BpbmUvU01cXG5zcGluZWxlc3MvWVBcXG5zcGluZXQvU01cXG5zcGlubGVzc1xcbnNwaW5uYWtlci9TTVxcbnNwaW5uZXIvTVNcXG5zcGlubmVyZXQvU01cXG5zcGlubmV5L1NcXG5zcGlubmluZy9NXFxuc3BpbnN0ZXIvU01cXG5zcGluc3Rlcmhvb2QvTVxcbnNwaW5zdGVyaXNoXFxuc3BpbnkvUlRcXG5zcGlyYWNsZS9TTVxcbnNwaXJhbC9TR01EWVxcbnNwaXJlJ3NcXG5zcGlyZS9JRkFTXFxuc3BpcmVhL1NNXFxuc3Bpcml0J3NcXG5zcGlyaXQvSVNHRFxcbnNwaXJpdGVkL1lcXG5zcGlyaXRsZXNzXFxuc3Bpcml0dWFsL01ZU1xcbnNwaXJpdHVhbGlzbS9NXFxuc3Bpcml0dWFsaXN0L01TXFxuc3Bpcml0dWFsaXN0aWNcXG5zcGlyaXR1YWxpdHkvTVxcbnNwaXJpdHVvdXNcXG5zcGlyb2NoZXRlL1NNXFxuc3BpcnlcXG5zcGl0L01ER1NcXG5zcGl0YmFsbC9TTVxcbnNwaXRlL0FTTVxcbnNwaXRlZnVsL1BZXFxuc3BpdGVmdWxsZXJcXG5zcGl0ZWZ1bGxlc3RcXG5zcGl0ZWZ1bG5lc3MvTVxcbnNwaXRmaXJlL1NNXFxuc3BpdHRlZFxcbnNwaXR0aW5nXFxuc3BpdHRsZS9NXFxuc3BpdHRvb24vTVNcXG5zcGl2L1NcXG5zcGxhbmNobmljXFxuc3BsYXNoL0dNRFNcXG5zcGxhc2hkb3duL01TXFxuc3BsYXNoaWx5XFxuc3BsYXNoaW5lc3MvTVxcbnNwbGFzaHkvUlRQXFxuc3BsYXQvU01cXG5zcGxhdHRlZFxcbnNwbGF0dGVyL0dTTURcXG5zcGxhdHRpbmdcXG5zcGxheS9TTURHXFxuc3BsYXlmZWV0XFxuc3BsYXlmb290L01EXFxuc3BsZWVuL1NNXFxuc3BsZW5kaWQvUllUXFxuc3BsZW5kb3IvTVNcXG5zcGxlbmRvcm91c1xcbnNwbGVuZWN0b215XFxuc3BsZW5ldGljXFxuc3BsaWNlL0RSU01aR1xcbnNwbGljZXIvTVxcbnNwbGlmZi9TXFxuc3BsaW5lL1NcXG5zcGxpbnQvU1pHTURSXFxuc3BsaW50ZXIvTURHXFxuc3BsaW50ZXJ5XFxuc3BsaXQvU01cXG5zcGxpdHRpbmcvTVNcXG5zcGxvZGdlL1NcXG5zcGxvc2gvRFNHXFxuc3Bsb3RjaC9NRFNHXFxuc3Bsb3RjaHkvVFJcXG5zcGx1cmdlL0RTTUdcXG5zcGx1dHRlci9HTURTXFxuc3BvaWwnc1xcbnNwb2lsL0NTRFJaR1xcbnNwb2lsYWdlL01cXG5zcG9pbGVkL1VcXG5zcG9pbGVyL0NNXFxuc3BvaWxzcG9ydC9NU1xcbnNwb2tlL1NNXFxuc3Bva2VuL1VcXG5zcG9rZXNtYW4vTVxcbnNwb2tlc21lblxcbnNwb2tlc3Blb3BsZVxcbnNwb2tlc3BlcnNvbi9NU1xcbnNwb2tlc3dvbWFuL01cXG5zcG9rZXN3b21lblxcbnNwb2xpYXRpb24vQ01cXG5zcG9uZ2UvRFJTTVpHXFxuc3Bvbmdlci9NXFxuc3BvbmdpbmVzcy9NXFxuc3Bvbmd5L1JQVFxcbnNwb25zb3IvTURHU1xcbnNwb25zb3JzaGlwL01cXG5zcG9udGFuZWl0eS9NXFxuc3BvbnRhbmVvdXMvWVxcbnNwb29mL1NNREdcXG5zcG9vay9TTURHXFxuc3Bvb2tpbmVzcy9NXFxuc3Bvb2t5L1JQVFxcbnNwb29sL1NNREdcXG5zcG9vbi9TTURHXFxuc3Bvb25iaWxsL01TXFxuc3Bvb25lcmlzbS9NU1xcbnNwb29uZnVsL1NNXFxuc3Bvb3IvU01ER1xcbnNwb3JhZGljXFxuc3BvcmFkaWNhbGx5XFxuc3BvcmUvRFNNR1xcbnNwb3JyYW4vU1xcbnNwb3J0L1NNREdWXFxuc3BvcnRpbmVzcy9NXFxuc3BvcnRpbmcvWVxcbnNwb3J0aXZlL1lcXG5zcG9ydHNjYXN0L01SWkdTXFxuc3BvcnRzY2FzdGVyL01cXG5zcG9ydHNtYW4vTVxcbnNwb3J0c21hbmxpa2UvVVxcbnNwb3J0c21hbnNoaXAvTVxcbnNwb3J0c21lblxcbnNwb3J0c3Blb3BsZVxcbnNwb3J0c3BlcnNvblxcbnNwb3J0c3dlYXIvTVxcbnNwb3J0c3dvbWFuL01cXG5zcG9ydHN3b21lblxcbnNwb3J0c3dyaXRlci9TTVxcbnNwb3J0eS9UUFJcXG5zcG90L0NNU1xcbnNwb3RsZXNzL1BZXFxuc3BvdGxlc3NuZXNzL01cXG5zcG90bGlnaHQvR1NNRFxcbnNwb3RsaXRcXG5zcG90dGVkXFxuc3BvdHRlci9NU1xcbnNwb3R0aWx5XFxuc3BvdHRpbmVzcy9NXFxuc3BvdHRpbmdcXG5zcG90dHkvVFBSXFxuc3BvdXNhbC9NU1xcbnNwb3VzZS9TTVxcbnNwb3V0L1NNREdcXG5zcHJhaW4vR1NNRFxcbnNwcmFuZ1xcbnNwcmF0L1NNXFxuc3ByYXdsL0dTTURcXG5zcHJheSdzXFxuc3ByYXkvQVNER1xcbnNwcmF5ZXIvTVNcXG5zcHJlYWQvWkdCU01SXFxuc3ByZWFkZWFnbGVkXFxuc3ByZWFkZXIvTVxcbnNwcmVhZHNoZWV0L01TXFxuc3ByZWUvRFNNXFxuc3ByZWVpbmdcXG5zcHJpZy9TTVxcbnNwcmlnZ2VkXFxuc3ByaWdodGxpbmVzcy9NXFxuc3ByaWdodGx5L1JUUFxcbnNwcmluZy9HU01cXG5zcHJpbmdib2FyZC9NU1xcbnNwcmluZ2Jvay9NU1xcbnNwcmluZ2lseVxcbnNwcmluZ2luZXNzL01cXG5zcHJpbmdsaWtlXFxuc3ByaW5ndGltZS9NXFxuc3ByaW5neS9SUFRcXG5zcHJpbmtsZS9EUlNKTVpHXFxuc3ByaW5rbGVyL01cXG5zcHJpbmtsaW5nL01cXG5zcHJpbnQvWkdTTURSXFxuc3ByaW50ZXIvTVxcbnNwcml0ZS9TTVxcbnNwcml0ei9aR01EUlNcXG5zcHJpdHplci9NXFxuc3Byb2NrZXQvTVNcXG5zcHJvZy9TXFxuc3Byb3V0L0dTTURcXG5zcHJ1Y2UvRFJTUE1ZVEdcXG5zcHJ1Y2VuZXNzL01cXG5zcHJ1bmdcXG5zcHJ5L1JZVFxcbnNwcnluZXNzL01cXG5zcHVkL01TXFxuc3B1bWUvRFNNR1xcbnNwdW1vbmkvTVxcbnNwdW15XFxuc3B1blxcbnNwdW5rL1NNXFxuc3B1bmt5L1RSXFxuc3B1ci9NU1xcbnNwdXJnZS9NXFxuc3B1cmlvdXMvUFlcXG5zcHVyaW91c25lc3MvTVxcbnNwdXJuL1NER1xcbnNwdXJyZWRcXG5zcHVycmluZ1xcbnNwdXJ0L1NNREdcXG5zcHV0YVxcbnNwdXRuaWsvTVNcXG5zcHV0dGVyL01ER1NcXG5zcHV0dW0vTVxcbnNweS9HRFNNXFxuc3B5Z2xhc3MvTVNcXG5zcHltYXN0ZXIvU1xcbnNweXdhcmUvTVxcbnNxXFxuc3FxXFxuc3F1YWIvU01cXG5zcXVhYmJsZS9NWkdEUlNcXG5zcXVhYmJsZXIvTVxcbnNxdWFkL1NNXFxuc3F1YWRyb24vTVNcXG5zcXVhbGlkL1BUUllcXG5zcXVhbGlkbmVzcy9NXFxuc3F1YWxsL1NHTURcXG5zcXVhbGx5XFxuc3F1YWxvci9NXFxuc3F1YW1vdXNcXG5zcXVhbmRlci9HRFNcXG5zcXVhcmUvUERSU01ZVEdcXG5zcXVhcmVuZXNzL01cXG5zcXVhcmlzaFxcbnNxdWFzaC9HTURTXFxuc3F1YXNoeS9UUlxcbnNxdWF0L1NNUFxcbnNxdWF0bmVzcy9NXFxuc3F1YXR0ZWRcXG5zcXVhdHRlci9NU1xcbnNxdWF0dGVzdFxcbnNxdWF0dGluZ1xcbnNxdWF3L1NNXFxuc3F1YXdrL1NaR01EUlxcbnNxdWF3a2VyL01cXG5zcXVlYWsvU1pHTURSXFxuc3F1ZWFrZXIvTVxcbnNxdWVha2lseVxcbnNxdWVha2luZXNzL01cXG5zcXVlYWt5L1RSUFxcbnNxdWVhbC9TWkdNRFJcXG5zcXVlYWxlci9NXFxuc3F1ZWFtaXNoL1BZXFxuc3F1ZWFtaXNobmVzcy9NXFxuc3F1ZWVnZWUvTURTXFxuc3F1ZWVnZWVpbmdcXG5zcXVlZXplL0JNWkdEUlNcXG5zcXVlZXplYm94L1NcXG5zcXVlZXplci9NXFxuc3F1ZWxjaC9HTURTXFxuc3F1ZWxjaHlcXG5zcXVpYi9TTVxcbnNxdWlkL1NNXFxuc3F1aWRneVxcbnNxdWlmZnlcXG5zcXVpZ2dsZS9EU01HXFxuc3F1aWdnbHlcXG5zcXVpbnQvU1RHTURSXFxuc3F1aXJlL0RTTUdcXG5zcXVpcm0vU0dNRFxcbnNxdWlybXkvUlRcXG5zcXVpcnJlbC9TR01EXFxuc3F1aXJ0L1NHTURcXG5zcXVpc2gvR01EU1xcbnNxdWlzaHkvUlRcXG5zcmlyYWNoYVxcbnNzaFxcbnN0XFxuc3RhYi9NWVNcXG5zdGFiYmVkXFxuc3RhYmJlci9NU1xcbnN0YWJiaW5nL01TXFxuc3RhYmlsaXR5L0lNXFxuc3RhYmlsaXphdGlvbi9DTVxcbnN0YWJpbGl6ZS9DRFNHXFxuc3RhYmlsaXplci9NU1xcbnN0YWJsZS9EUlNNVEdcXG5zdGFibGVtYW4vTVxcbnN0YWJsZW1hdGUvU1xcbnN0YWJsZW1lblxcbnN0YWJseS9VXFxuc3RhY2NhdG8vTVNcXG5zdGFjay9TTURHXFxuc3RhZGl1bS9NU1xcbnN0YWZmJ3NcXG5zdGFmZi9BU0RHXFxuc3RhZmZlci9NU1xcbnN0YWZmaW5nL01cXG5zdGFnL01ER1NKXFxuc3RhZ2UvU01cXG5zdGFnZWNvYWNoL01TXFxuc3RhZ2VjcmFmdC9NXFxuc3RhZ2VoYW5kL01TXFxuc3RhZ2VzdHJ1Y2tcXG5zdGFnZmxhdGlvbi9NXFxuc3RhZ2dlci9NREdTXFxuc3RhZ2dlcmluZy9ZXFxuc3RhZ2luZy9NXFxuc3RhZ25hbmN5L01cXG5zdGFnbmFudC9ZXFxuc3RhZ25hdGUvRFNHTlxcbnN0YWduYXRpb24vTVxcbnN0YWd5L1JUXFxuc3RhaWQvUFJZVFxcbnN0YWlkbmVzcy9NXFxuc3RhaW4vU01ER1xcbnN0YWluZWQvVVxcbnN0YWlubGVzcy9NXFxuc3RhaXIvU01cXG5zdGFpcmNhc2UvTVNcXG5zdGFpcndheS9NU1xcbnN0YWlyd2VsbC9TTVxcbnN0YWtlL0RTTUdcXG5zdGFrZWhvbGRlci9NU1xcbnN0YWtlb3V0L1NNXFxuc3RhbGFjdGl0ZS9NU1xcbnN0YWxhZ21pdGUvTVNcXG5zdGFsZS9EUlNUR1BcXG5zdGFsZW1hdGUvRFNNR1xcbnN0YWxlbmVzcy9NXFxuc3RhbGsvU01EUkpaR1xcbnN0YWxrZXIvTVxcbnN0YWxraW5nL01cXG5zdGFsbCdzXFxuc3RhbGwvU0RHXFxuc3RhbGxob2xkZXIvU1xcbnN0YWxsaW9uL01TXFxuc3RhbHdhcnQvTVlTXFxuc3RhbWVuL1NNXFxuc3RhbWluYS9NXFxuc3RhbW1lci9aR01EUlNcXG5zdGFtbWVyZXIvTVxcbnN0YW1tZXJpbmcvWVxcbnN0YW1wL1NNRFJaR1xcbnN0YW1wZWRlL01HRFNcXG5zdGFtcGVyL01cXG5zdGFuY2UvSVNNXFxuc3RhbmNoL1RHRFJTXFxuc3RhbmNoaW9uL1NNXFxuc3RhbmQvU01SSlpHXFxuc3RhbmRhbG9uZVxcbnN0YW5kYXJkL01TXFxuc3RhbmRhcmRpemF0aW9uL01cXG5zdGFuZGFyZGl6ZS9EU0dcXG5zdGFuZGJ5L01cXG5zdGFuZGJ5c1xcbnN0YW5kZWUvTVNcXG5zdGFuZGVyL01cXG5zdGFuZGluZy9NXFxuc3RhbmRvZmYvTVNcXG5zdGFuZG9mZmlzaFxcbnN0YW5kb3V0L01TXFxuc3RhbmRwaXBlL1NNXFxuc3RhbmRwb2ludC9NU1xcbnN0YW5kc3RpbGwvTVNcXG5zdGFua1xcbnN0YW56YS9TTVxcbnN0YXBoL01cXG5zdGFwaHlsb2NvY2NhbFxcbnN0YXBoeWxvY29jY2lcXG5zdGFwaHlsb2NvY2N1cy9NXFxuc3RhcGxlL0RSU01aR1xcbnN0YXBsZXIvTVxcbnN0YXIvTURSWkdTXFxuc3RhcmJvYXJkL01cXG5zdGFyYnVyc3QvU1xcbnN0YXJjaC9HTURTXFxuc3RhcmNoaWx5XFxuc3RhcmNoaW5lc3MvTVxcbnN0YXJjaHkvUFRSXFxuc3RhcmRvbS9NXFxuc3RhcmR1c3QvTVxcbnN0YXJlL1NNXFxuc3RhcmVyL01cXG5zdGFyZmlzaC9NU1xcbnN0YXJmcnVpdFxcbnN0YXJnYXplL0RSU1pHXFxuc3RhcmdhemVyL01cXG5zdGFyay9SWVBaVFxcbnN0YXJrbmVzcy9NXFxuc3Rhcmxlc3NcXG5zdGFybGV0L01TXFxuc3RhcmxpZ2h0L01cXG5zdGFybGluZy9TTVxcbnN0YXJsaXRcXG5zdGFycmVkXFxuc3RhcnJpbmdcXG5zdGFycnkvVFJcXG5zdGFyc3RydWNrXFxuc3RhcnQvQVNNREdcXG5zdGFydGVyL01TXFxuc3RhcnRsZS9HRFNcXG5zdGFydGxpbmcvWVxcbnN0YXJ0dXAvTVNcXG5zdGFydmF0aW9uL01cXG5zdGFydmUvRFNKR1xcbnN0YXJ2ZWxpbmcvTVNcXG5zdGFzaC9NRFNHXFxuc3Rhc2lzXFxuc3RhdC9NU1xcbnN0YXRlL0RSU01ZR05MWFxcbnN0YXRlY3JhZnQvTVxcbnN0YXRlZC9VXFxuc3RhdGVob29kL01cXG5zdGF0ZWhvdXNlL01TXFxuc3RhdGVsZXNzL1BcXG5zdGF0ZWxlc3NuZXNzL01cXG5zdGF0ZWxpbmVzcy9NXFxuc3RhdGVseS9QUlRcXG5zdGF0ZW1lbnQvQU1TXFxuc3RhdGVtZW50ZWRcXG5zdGF0ZW1lbnRpbmdcXG5zdGF0ZXJvb20vTVNcXG5zdGF0ZXNpZGVcXG5zdGF0ZXNtYW4vTVxcbnN0YXRlc21hbmxpa2VcXG5zdGF0ZXNtYW5zaGlwL01cXG5zdGF0ZXNtZW5cXG5zdGF0ZXN3b21hbi9NXFxuc3RhdGVzd29tZW5cXG5zdGF0ZXdpZGVcXG5zdGF0aWMvU01cXG5zdGF0aWNhbGx5XFxuc3RhdGlvbi9NRFJaR1xcbnN0YXRpb25hcnlcXG5zdGF0aW9uZXIvTVxcbnN0YXRpb25lcnkvTVxcbnN0YXRpb25tYXN0ZXIvU1xcbnN0YXRpc3RpYy9NU1xcbnN0YXRpc3RpY2FsL1lcXG5zdGF0aXN0aWNpYW4vU01cXG5zdGF0dWFyeS9NXFxuc3RhdHVlL1NNXFxuc3RhdHVlc3F1ZVxcbnN0YXR1ZXR0ZS9NU1xcbnN0YXR1cmUvTVNcXG5zdGF0dXMvTVNcXG5zdGF0dXRlL01TXFxuc3RhdHV0b3JpbHlcXG5zdGF0dXRvcnlcXG5zdGF1bmNoL1BEUlNZVEdcXG5zdGF1bmNobmVzcy9NXFxuc3RhdmUvRFNNR1xcbnN0YXkvTURSWkdTXFxuc3RkXFxuc3RkaW9cXG5zdGVhZC9TTVxcbnN0ZWFkZmFzdC9ZUFxcbnN0ZWFkZmFzdG5lc3MvTVxcbnN0ZWFkaWx5L1VcXG5zdGVhZGluZXNzL1VNXFxuc3RlYWR5L1RHUERSU01cXG5zdGVhay9TTVxcbnN0ZWFraG91c2UvU01cXG5zdGVhbC9TTUhHXFxuc3RlYWx0aC9NXFxuc3RlYWx0aGlseVxcbnN0ZWFsdGhpbmVzcy9NXFxuc3RlYWx0aHkvVFBSXFxuc3RlYW0vU01EUlpHXFxuc3RlYW1ib2F0L01TXFxuc3RlYW1lci9NXFxuc3RlYW1maXR0ZXIvU01cXG5zdGVhbWZpdHRpbmcvTVxcbnN0ZWFtaW5lc3MvTVxcbnN0ZWFtcHVua1xcbnN0ZWFtcm9sbC9aR0RSU1xcbnN0ZWFtcm9sbGVyL01ER1xcbnN0ZWFtc2hpcC9NU1xcbnN0ZWFteS9UUFJcXG5zdGVlZC9TTVxcbnN0ZWVsL1NNREdcXG5zdGVlbGluZXNzL01cXG5zdGVlbG1ha2VyL1NcXG5zdGVlbHdvcmtlci9TTVxcbnN0ZWVsd29ya3MvTVxcbnN0ZWVseS9QVFJcXG5zdGVlbHlhcmQvU01cXG5zdGVlcC9TTUROUllQWFRHXFxuc3RlZXBlbi9HRFxcbnN0ZWVwbGUvTVNcXG5zdGVlcGxlY2hhc2UvTVNcXG5zdGVlcGxlamFjay9TTVxcbnN0ZWVwbmVzcy9NXFxuc3RlZXIvU01EQkdcXG5zdGVlcmFnZS9NXFxuc3RlZXJpbmcvTVxcbnN0ZWVyc21hbi9NXFxuc3RlZXJzbWVuXFxuc3RlZ29zYXVyaVxcbnN0ZWdvc2F1cnVzL01TXFxuc3RlaW4vU01cXG5zdGVsbGFyXFxuc3RlbS9NU1xcbnN0ZW1sZXNzXFxuc3RlbW1lZFxcbnN0ZW1taW5nXFxuc3RlbXdhcmUvTVxcbnN0ZW5jaC9NU1xcbnN0ZW5jaWwvR01EU1xcbnN0ZW5vL1NNXFxuc3Rlbm9ncmFwaGVyL1NNXFxuc3Rlbm9ncmFwaGljXFxuc3Rlbm9ncmFwaHkvTVxcbnN0ZW5vc2lzXFxuc3RlbnQvU01cXG5zdGVudG9yaWFuXFxuc3RlcC9JTVNcXG5zdGVwYnJvdGhlci9TTVxcbnN0ZXBjaGlsZC9NXFxuc3RlcGNoaWxkcmVuL01cXG5zdGVwZGFkL01TXFxuc3RlcGRhdWdodGVyL1NNXFxuc3RlcGZhdGhlci9TTVxcbnN0ZXBsYWRkZXIvTVNcXG5zdGVwbW9tL01TXFxuc3RlcG1vdGhlci9TTVxcbnN0ZXBwYXJlbnQvU01cXG5zdGVwcGUvRFJTTVpHXFxuc3RlcHBlci9NXFxuc3RlcHBpbmdzdG9uZS9TTVxcbnN0ZXBzaXN0ZXIvTVNcXG5zdGVwc29uL01TXFxuc3RlcmVvL1NNXFxuc3RlcmVvcGhvbmljXFxuc3RlcmVvc2NvcGUvTVNcXG5zdGVyZW9zY29waWNcXG5zdGVyZW90eXBlL0RTTUdcXG5zdGVyZW90eXBpY2FsXFxuc3RlcmlsZVxcbnN0ZXJpbGl0eS9NXFxuc3RlcmlsaXphdGlvbi9TTVxcbnN0ZXJpbGl6ZS9EUlNaR1xcbnN0ZXJpbGl6ZXIvTVxcbnN0ZXJsaW5nL01cXG5zdGVybi9TTVJZUFRcXG5zdGVybm5lc3MvTVxcbnN0ZXJudW0vTVNcXG5zdGVyb2lkL01TXFxuc3Rlcm9pZGFsXFxuc3RlcnRvcm91c1xcbnN0ZXQvU1xcbnN0ZXRob3Njb3BlL01TXFxuc3RldHNvbi9NU1xcbnN0ZXR0ZWRcXG5zdGV0dGluZ1xcbnN0ZXZlZG9yZS9TTVxcbnN0ZXcvTURHU1xcbnN0ZXdhcmQvR01EU1xcbnN0ZXdhcmRlc3MvTVNcXG5zdGV3YXJkc2hpcC9NXFxuc3RpY2svU01SWkdcXG5zdGlja2VyL01cXG5zdGlja2lseVxcbnN0aWNraW5lc3MvTVxcbnN0aWNrbGViYWNrL1NNXFxuc3RpY2tsZXIvTVNcXG5zdGlja3Bpbi9NU1xcbnN0aWNrdXAvTVNcXG5zdGlja3kvUFRSU01cXG5zdGlmZi9TTUROUllQWFRHXFxuc3RpZmZlbi9aR0RSXFxuc3RpZmZlbmVyL01cXG5zdGlmZmVuaW5nL01cXG5zdGlmZm5lc3MvTVxcbnN0aWZsZS9EU0pHXFxuc3RpZmxpbmcvWVxcbnN0aWdtYS9TTVxcbnN0aWdtYXRhXFxuc3RpZ21hdGljXFxuc3RpZ21hdGl6YXRpb24vTVxcbnN0aWdtYXRpemUvR0RTXFxuc3RpbGUvU01cXG5zdGlsZXR0by9TTVxcbnN0aWxsJ3NcXG5zdGlsbC9JVEdTRFxcbnN0aWxsYmlydGgvTVxcbnN0aWxsYmlydGhzXFxuc3RpbGxib3JuXFxuc3RpbGxlclxcbnN0aWxsbmVzcy9NXFxuc3RpbHQvU01EXFxuc3RpbHRlZC9ZXFxuc3RpbXVsYW50L1NNXFxuc3RpbXVsYXRlL0RTR05WXFxuc3RpbXVsYXRpb24vTVxcbnN0aW11bGlcXG5zdGltdWx1cy9NXFxuc3RpbmcvWkdTTVJcXG5zdGluZ2VyL01cXG5zdGluZ2lseVxcbnN0aW5naW5lc3MvTVxcbnN0aW5ncmF5L1NNXFxuc3Rpbmd5L1JUUFxcbnN0aW5rL1pHU01SXFxuc3RpbmtidWcvU01cXG5zdGlua2VyL01cXG5zdGlua3kvUlRcXG5zdGludC9HU01EXFxuc3RpcGVuZC9TTVxcbnN0aXBlbmRpYXJ5L1NcXG5zdGlwcGxlL0RTTUdcXG5zdGlwcGxpbmcvTVxcbnN0aXB1bGF0ZS9YRFNHTlxcbnN0aXB1bGF0aW9uL01cXG5zdGlyL01TXFxuc3RpcnJlZFxcbnN0aXJyZXIvU01cXG5zdGlycmluZy9TWVxcbnN0aXJydXAvU01cXG5zdGl0Y2gnc1xcbnN0aXRjaC9BRFNHXFxuc3RpdGNoZXJ5L01cXG5zdGl0Y2hpbmcvTVxcbnN0b2F0L1NNXFxuc3RvY2hhc3RpY1xcbnN0b2NrJ3NcXG5zdG9jay9BR1NEXFxuc3RvY2thZGUvRFNNR1xcbnN0b2NrYnJlZWRlci9NU1xcbnN0b2NrYnJva2VyL1NNXFxuc3RvY2ticm9raW5nL01cXG5zdG9ja2hvbGRlci9TTVxcbnN0b2NraWx5XFxuc3RvY2tpbmVzcy9NXFxuc3RvY2tpbmV0dGUvTVxcbnN0b2NraW5nL1NNXFxuc3RvY2tpc3QvU1xcbnN0b2NrcGlsZS9NR0RTXFxuc3RvY2twb3QvU01cXG5zdG9ja3Jvb20vTVNcXG5zdG9ja3Rha2luZy9NXFxuc3RvY2t5L1JUUFxcbnN0b2NreWFyZC9NU1xcbnN0b2RnZVxcbnN0b2RnaWx5XFxuc3RvZGdpbmVzcy9NXFxuc3RvZGd5L1JUUFxcbnN0b2dpZS9NU1xcbnN0b2ljL1NNXFxuc3RvaWNhbC9ZXFxuc3RvaWNpc20vTVxcbnN0b2tlL0RSU1pHXFxuc3Rva2VyL01cXG5zdG9sZS9TTVxcbnN0b2xlblxcbnN0b2xpZC9SWVRQXFxuc3RvbGlkaXR5L01cXG5zdG9saWRuZXNzL01cXG5zdG9sb24vTVNcXG5zdG9tYWNoL01EUlpHXFxuc3RvbWFjaGFjaGUvU01cXG5zdG9tYWNoZXIvTVxcbnN0b21hY2hzXFxuc3RvbXAvR1NNRFxcbnN0b25lL0RSU01aR1xcbnN0b25lbWFzb24vTVNcXG5zdG9uZXIvTVxcbnN0b25ld2FsbC9HU0RcXG5zdG9uZXdhcmUvTVxcbnN0b25ld2FzaGVkXFxuc3RvbmV3b3JrL01cXG5zdG9uaWx5XFxuc3RvbmluZXNzL01cXG5zdG9ua2VyZWRcXG5zdG9ua2luZ1xcbnN0b255L1RSUFxcbnN0b29kXFxuc3Rvb2dlL01TXFxuc3Rvb2wvU01cXG5zdG9vcC9HU01EXFxuc3RvcCdzXFxuc3RvcC9VU1xcbnN0b3Bjb2NrL1NNXFxuc3RvcGdhcC9TTVxcbnN0b3BsaWdodC9NU1xcbnN0b3BvdmVyL01TXFxuc3RvcHBhYmxlL1VcXG5zdG9wcGFnZS9NU1xcbnN0b3BwZWQvVVxcbnN0b3BwZXIvR1NNRFxcbnN0b3BwaW5nL1VcXG5zdG9wcGxlL0RTTUdcXG5zdG9wd2F0Y2gvTVNcXG5zdG9yYWdlL01cXG5zdG9yZSdzXFxuc3RvcmUvQURTR1xcbnN0b3JlZnJvbnQvTVNcXG5zdG9yZWhvdXNlL01TXFxuc3RvcmVrZWVwZXIvU01cXG5zdG9yZXJvb20vU01cXG5zdG9yay9TTVxcbnN0b3JtL0dTTURcXG5zdG9ybWlseVxcbnN0b3JtaW5lc3MvTVxcbnN0b3JteS9SUFRcXG5zdG9yeS9EU01cXG5zdG9yeWJvYXJkL01TXFxuc3Rvcnlib29rL1NNXFxuc3Rvcnl0ZWxsZXIvTVNcXG5zdG9yeXRlbGxpbmcvTVxcbnN0b3VwL1NNXFxuc3RvdXQvVFNNUllQXFxuc3RvdXRoZWFydGVkXFxuc3RvdXRuZXNzL01cXG5zdG92ZS9TTVxcbnN0b3ZlcGlwZS9TTVxcbnN0b3cvREdTXFxuc3Rvd2FnZS9NXFxuc3Rvd2F3YXkvTVNcXG5zdHJhZGRsZS9EUlNNWkdcXG5zdHJhZGRsZXIvTVxcbnN0cmFmZS9NR0RTXFxuc3RyYWdnbGUvRFJTWkdcXG5zdHJhZ2dsZXIvTVxcbnN0cmFnZ2x5L1RSXFxuc3RyYWlnaHQvU1BYVE1OUllcXG5zdHJhaWdodGF3YXkvU01cXG5zdHJhaWdodGVkZ2UvU01cXG5zdHJhaWdodGVuL1pHRFJcXG5zdHJhaWdodGVuZXIvTVxcbnN0cmFpZ2h0Zm9yd2FyZC9ZUFNcXG5zdHJhaWdodGZvcndhcmRuZXNzL01cXG5zdHJhaWdodG5lc3MvTVxcbnN0cmFpZ2h0d2F5XFxuc3RyYWluJ3NcXG5zdHJhaW4vRkFEU0dcXG5zdHJhaW5lci9BU01cXG5zdHJhaXQvTU5TWFxcbnN0cmFpdGVuL0dEXFxuc3RyYWl0amFja2V0L1NHTURcXG5zdHJhaXRsYWNlZFxcbnN0cmFuZC9NRFNHXFxuc3RyYW5nZS9QUllaVFxcbnN0cmFuZ2VuZXNzL01cXG5zdHJhbmdlci9NXFxuc3RyYW5nbGUvWkdEUlNcXG5zdHJhbmdsZWhvbGQvU01cXG5zdHJhbmdsZXIvTVxcbnN0cmFuZ3VsYXRlL0dORFNcXG5zdHJhbmd1bGF0aW9uL01cXG5zdHJhcCdzXFxuc3RyYXAvVVNcXG5zdHJhcGxlc3MvTVNcXG5zdHJhcHBlZC9VXFxuc3RyYXBwaW5nL01cXG5zdHJhdGFcXG5zdHJhdGFnZW0vU01cXG5zdHJhdGVnaWMvU1xcbnN0cmF0ZWdpY2FsL1lcXG5zdHJhdGVnaWNzL01cXG5zdHJhdGVnaXN0L1NNXFxuc3RyYXRlZ3kvU01cXG5zdHJhdGlcXG5zdHJhdGlmaWNhdGlvbi9NXFxuc3RyYXRpZnkvRFNHTlxcbnN0cmF0b3NwaGVyZS9TTVxcbnN0cmF0b3NwaGVyaWNcXG5zdHJhdHVtL01cXG5zdHJhdHVzL01cXG5zdHJhdy9HU01EXFxuc3RyYXdiZXJyeS9TTVxcbnN0cmF5L0dTTURcXG5zdHJlYWsvTURSU1pHXFxuc3RyZWFrZXIvTVxcbnN0cmVha3kvVFJcXG5zdHJlYW0vTURSU1pHXFxuc3RyZWFtZXIvTVxcbnN0cmVhbWxpbmUvRFNHXFxuc3RyZWV0L01TXFxuc3RyZWV0Y2FyL01TXFxuc3RyZWV0bGFtcC9TXFxuc3RyZWV0bGlnaHQvU01cXG5zdHJlZXR3YWxrZXIvU01cXG5zdHJlZXR3aXNlXFxuc3RyZW5ndGgvTVxcbnN0cmVuZ3RoZW4vQUdEU1xcbnN0cmVuZ3RoZW5lci9NU1xcbnN0cmVuZ3Roc1xcbnN0cmVudW91cy9QWVxcbnN0cmVudW91c25lc3MvTVxcbnN0cmVwL01cXG5zdHJlcHRvY29jY2FsXFxuc3RyZXB0b2NvY2NpXFxuc3RyZXB0b2NvY2N1cy9NXFxuc3RyZXB0b215Y2luL01cXG5zdHJlc3MvTURTR1xcbnN0cmVzc2VkL1VcXG5zdHJlc3NmdWxcXG5zdHJlc3NvcnNcXG5zdHJldGNoL0JaR01EUlNcXG5zdHJldGNoZXIvTURHXFxuc3RyZXRjaG1hcmtzXFxuc3RyZXRjaHkvVFJcXG5zdHJldy9HU0RIXFxuc3RyZXduXFxuc3RyaWEvTVxcbnN0cmlhZVxcbnN0cmlhdGVkXFxuc3RyaWF0aW9uL01TXFxuc3RyaWNrZW5cXG5zdHJpY3QvUllQVFxcbnN0cmljdG5lc3MvTVxcbnN0cmljdHVyZS9TTVxcbnN0cmlkZGVuXFxuc3RyaWRlL01HU1xcbnN0cmlkZW5jeS9NXFxuc3RyaWRlbnQvWVxcbnN0cmlmZS9NXFxuc3RyaWtlL01aR1JTSlxcbnN0cmlrZWJvdW5kXFxuc3RyaWtlYnJlYWtlci9TTVxcbnN0cmlrZWJyZWFraW5nXFxuc3RyaWtlb3V0L01TXFxuc3RyaWtlci9NXFxuc3RyaWtpbmcvWVxcbnN0cmluZy9NRFJTWkdcXG5zdHJpbmdlbmN5L01cXG5zdHJpbmdlbnQvWVxcbnN0cmluZ2VyL01cXG5zdHJpbmdpbmVzcy9NXFxuc3RyaW5neS9QVFJcXG5zdHJpcC9HU01EXFxuc3RyaXBlL01TXFxuc3RyaXBleVxcbnN0cmlwbGluZy9NU1xcbnN0cmlwcGVkXFxuc3RyaXBwZXIvTVNcXG5zdHJpcHBpbmdcXG5zdHJpcHRlYXNlL01aR0RSU1xcbnN0cmlwdGVhc2VyL01cXG5zdHJpcHlcXG5zdHJpdmUvR1NcXG5zdHJpdmVuXFxuc3Ryb2JlL01TXFxuc3Ryb2Jvc2NvcGUvTVNcXG5zdHJvYm9zY29waWNcXG5zdHJvZGVcXG5zdHJva2UvTUdEU1xcbnN0cm9sbC9NRFJTWkdcXG5zdHJvbGxlci9NXFxuc3Ryb25nL1JZVFxcbnN0cm9uZ2JveC9NU1xcbnN0cm9uZ2hvbGQvTVNcXG5zdHJvbmdtYW4vTVxcbnN0cm9uZ21lblxcbnN0cm9uZ3Jvb20vU1xcbnN0cm9udGl1bS9NXFxuc3Ryb3AvU01cXG5zdHJvcGhlL1NNXFxuc3Ryb3BoaWNcXG5zdHJvcHBlZFxcbnN0cm9wcGlseVxcbnN0cm9wcGluZ1xcbnN0cm9wcHkvVFJQXFxuc3Ryb3ZlXFxuc3RydWNrXFxuc3RydWN0dXJhbC9ZXFxuc3RydWN0dXJhbGlzbVxcbnN0cnVjdHVyYWxpc3QvU1xcbnN0cnVjdHVyZSdzXFxuc3RydWN0dXJlL0FHRFNcXG5zdHJ1Y3R1cmVkL1VcXG5zdHJ1ZGVsL1NNXFxuc3RydWdnbGUvTUdEU1xcbnN0cnVtL1NNXFxuc3RydW1tZWRcXG5zdHJ1bW1pbmdcXG5zdHJ1bXBldC9NU1xcbnN0cnVuZy9VQVxcbnN0cnV0L1NNXFxuc3RydXR0ZWRcXG5zdHJ1dHRpbmdcXG5zdHJ5Y2huaW5lL01cXG5zdHViL01TXFxuc3R1YmJlZFxcbnN0dWJiaW5nXFxuc3R1YmJsZS9NXFxuc3R1YmJseVxcbnN0dWJib3JuL1JZUFRcXG5zdHViYm9ybm5lc3MvTVxcbnN0dWJieS9SVFxcbnN0dWNjby9NREdcXG5zdHVjY29lc1xcbnN0dWNrL1VcXG5zdHVkL01ZU1xcbnN0dWRib29rL01TXFxuc3R1ZGRlZFxcbnN0dWRkaW5nL01cXG5zdHVkZW50L1NNXFxuc3R1ZGVudHNoaXAvU1xcbnN0dWRpZWQvVVxcbnN0dWRpZWRseVxcbnN0dWRpby9NU1xcbnN0dWRpb3VzL1BZXFxuc3R1ZGlvdXNuZXNzL01cXG5zdHVkbHkvUlRcXG5zdHVkeSdzXFxuc3R1ZHkvQUdEU1xcbnN0dWZmL0dTTURKXFxuc3R1ZmZpbHlcXG5zdHVmZmluZXNzL01cXG5zdHVmZmluZy9NXFxuc3R1ZmZ5L1JQVFxcbnN0dWx0aWZpY2F0aW9uL01cXG5zdHVsdGlmeS9EU05HXFxuc3R1bWJsZS9EUlNNWkdcXG5zdHVtYmxlci9NXFxuc3R1bXAvR1NNRFxcbnN0dW1weS9UUlxcbnN0dW4vU1xcbnN0dW5nXFxuc3R1bmtcXG5zdHVubmVkXFxuc3R1bm5lci9TXFxuc3R1bm5pbmcvWVxcbnN0dW50L0dTTURcXG5zdHVudG1hblxcbnN0dW50bWVuXFxuc3R1cGVmYWN0aW9uL01cXG5zdHVwZWZ5L0RTR1xcbnN0dXBlbmRvdXMvWVxcbnN0dXBpZC9UTVJZU1xcbnN0dXBpZGl0eS9TTVxcbnN0dXBvci9NU1xcbnN0dXJkaWx5XFxuc3R1cmRpbmVzcy9NXFxuc3R1cmR5L1RSUFxcbnN0dXJnZW9uL1NNXFxuc3R1dHRlci9NRFJTWkdcXG5zdHV0dGVyZXIvTVxcbnN0eS9TTVxcbnN0eWxlJ3NcXG5zdHlsZS9BRFNHXFxuc3R5bGlcXG5zdHlsaXNoL1BZXFxuc3R5bGlzaG5lc3MvTVxcbnN0eWxpc3QvU01cXG5zdHlsaXN0aWMvU1xcbnN0eWxpc3RpY2FsbHlcXG5zdHlsaXplL0RTR1xcbnN0eWx1cy9NU1xcbnN0eW1pZS9NRFNcXG5zdHltaWVpbmdcXG5zdHlwdGljL1NNXFxuc3Vhc2lvbi9FTVxcbnN1YXZlL1JZVFBcXG5zdWF2ZW5lc3MvTVxcbnN1YXZpdHkvTVxcbnN1Yi9TTVxcbnN1YmFsdGVybi9NU1xcbnN1YmFxdWFcXG5zdWJhcmN0aWNcXG5zdWJhcmVhL01TXFxuc3ViYXRvbWljXFxuc3ViYmFzZW1lbnQvU01cXG5zdWJiZWRcXG5zdWJiaW5nXFxuc3ViYnJhbmNoL01TXFxuc3ViY2F0ZWdvcnkvU01cXG5zdWJjbGFzc1xcbnN1YmNvbW1pdHRlZS9TTVxcbnN1YmNvbXBhY3QvU01cXG5zdWJjb25zY2lvdXMvUE1ZXFxuc3ViY29uc2Npb3VzbmVzcy9NXFxuc3ViY29udGluZW50L1NNXFxuc3ViY29udGluZW50YWxcXG5zdWJjb250cmFjdC9NRFNHXFxuc3ViY29udHJhY3Rvci9NU1xcbnN1YmN1bHR1cmUvTVNcXG5zdWJjdXRhbmVvdXMvWVxcbnN1YmRpdmlkZS9HRFNcXG5zdWJkaXZpc2lvbi9TTVxcbnN1YmRvbWFpbi9NU1xcbnN1YmRvbWluYW50XFxuc3ViZHVlL0RTR1xcbnN1YmVkaXRvci9TXFxuc3ViZmFtaWx5L1NNXFxuc3ViZnJlZXppbmdcXG5zdWJncm91cC9NU1xcbnN1YmhlYWQvR0pNU1xcbnN1YmhlYWRpbmcvTVxcbnN1Ymh1bWFuL01TXFxuc3VialxcbnN1YmplY3QvR1ZNRFNcXG5zdWJqZWN0aW9uL01cXG5zdWJqZWN0aXZlL1lcXG5zdWJqZWN0aXZpdHkvTVxcbnN1YmpvaW4vR0RTXFxuc3VianVnYXRlL0dORFNcXG5zdWJqdWdhdGlvbi9NXFxuc3VianVuY3RpdmUvU01cXG5zdWJsZWFzZS9NR0RTXFxuc3VibGV0L1NNXFxuc3VibGV0dGluZ1xcbnN1YmxpZXV0ZW5hbnQvU1xcbnN1YmxpbWF0ZS9HTkRTXFxuc3VibGltYXRpb24vTVxcbnN1YmxpbWUvWVRHRFJTXFxuc3VibGltaW5hbC9ZXFxuc3VibGltaXR5L01cXG5zdWJsaW5ndWFsXFxuc3VibWFyZ2luYWxcXG5zdWJtYXJpbmUvTVpSU1xcbnN1Ym1hcmluZXIvTVxcbnN1Ym1lcmdlL0dEU1xcbnN1Ym1lcmdlbmNlL01cXG5zdWJtZXJzZS9HTkRTXFxuc3VibWVyc2libGUvTVNcXG5zdWJtZXJzaW9uL01cXG5zdWJtaWNyb3Njb3BpY1xcbnN1Ym1pc3Npb24vTVNcXG5zdWJtaXNzaXZlL1BZXFxuc3VibWlzc2l2ZW5lc3MvTVxcbnN1Ym1pdC9BU1xcbnN1Ym1pdHRlZC9BXFxuc3VibWl0dGVyXFxuc3VibWl0dGluZy9BXFxuc3Vibm9ybWFsXFxuc3Vib3JiaXRhbFxcbnN1Ym9yZGVyL01TXFxuc3Vib3JkaW5hdGUvRFNNR05cXG5zdWJvcmRpbmF0aW9uL0lNXFxuc3Vib3JuL1NHRFxcbnN1Ym9ybmF0aW9uL01cXG5zdWJwYXJcXG5zdWJwYXJhZ3JhcGhcXG5zdWJwYXJ0XFxuc3VicGxvdC9NU1xcbnN1YnBvZW5hL0dNRFNcXG5zdWJwcmltZVxcbnN1YnByb2Zlc3Npb25hbC9TTVxcbnN1YnByb2dyYW0vU1xcbnN1YnJvdXRpbmUvU01cXG5zdWJzY3JpYmUvVUFTREdcXG5zdWJzY3JpYmVyL01TXFxuc3Vic2NyaXB0L01TXFxuc3Vic2NyaXB0aW9uL01TXFxuc3Vic2VjdGlvbi9NU1xcbnN1YnNlcXVlbnQvWVxcbnN1YnNlcnZpZW5jZS9NXFxuc3Vic2VydmllbnQvWVxcbnN1YnNldC9TTVxcbnN1YnNpZGUvR0RTXFxuc3Vic2lkZW5jZS9NXFxuc3Vic2lkaWFyaXR5XFxuc3Vic2lkaWFyeS9TTVxcbnN1YnNpZGl6YXRpb24vTVxcbnN1YnNpZGl6ZS9aR0RSU1xcbnN1YnNpZGl6ZXIvTVxcbnN1YnNpZHkvU01cXG5zdWJzaXN0L1NER1xcbnN1YnNpc3RlbmNlL01cXG5zdWJzb2lsL01cXG5zdWJzb25pY1xcbnN1YnNwYWNlXFxuc3Vic3BlY2llcy9NXFxuc3Vic3RhbmNlL1NNXFxuc3Vic3RhbmRhcmRcXG5zdWJzdGFudGlhbC9JWVxcbnN1YnN0YW50aWF0ZS9HTkRTWFxcbnN1YnN0YW50aWF0ZWQvVVxcbnN1YnN0YW50aWF0aW9uL0ZNXFxuc3Vic3RhbnRpdmUvU01ZXFxuc3Vic3RhdGlvbi9NU1xcbnN1YnN0aXR1ZW50XFxuc3Vic3RpdHV0ZS9YTUdORFNcXG5zdWJzdGl0dXRpb24vTVxcbnN1YnN0cmF0YVxcbnN1YnN0cmF0ZS9NU1xcbnN1YnN0cmF0dW0vTVxcbnN1YnN0cnVjdHVyZS9TTVxcbnN1YnN1bWUvRFNHXFxuc3Vic3VtcHRpb25cXG5zdWJzdXJmYWNlL01cXG5zdWJzeXN0ZW0vU01cXG5zdWJ0ZWVuL1NNXFxuc3VidGVuYW5jeS9NXFxuc3VidGVuYW50L1NNXFxuc3VidGVuZC9TREdcXG5zdWJ0ZXJmdWdlL1NNXFxuc3VidGVycmFuZWFuXFxuc3VidGV4dC9TTVxcbnN1YnRpdGxlL0RTTUdcXG5zdWJ0bGUvVFJcXG5zdWJ0bGV0eS9TTVxcbnN1YnRseVxcbnN1YnRvcGljL1NNXFxuc3VidG90YWwvU0dNRFxcbnN1YnRyYWN0L0dTRFxcbnN1YnRyYWN0aW9uL1NNXFxuc3VidHJhaGVuZC9TTVxcbnN1YnRyb3BpYy9TXFxuc3VidHJvcGljYWxcXG5zdWJ0cm9waWNzL01cXG5zdWJ1cmIvTVNcXG5zdWJ1cmJhbi9TTVxcbnN1YnVyYmFuaXRlL1NNXFxuc3VidXJiaWEvTVxcbnN1YnZlbnRpb24vU01cXG5zdWJ2ZXJzaW9uL01cXG5zdWJ2ZXJzaXZlL1NQTVlcXG5zdWJ2ZXJzaXZlbmVzcy9NXFxuc3VidmVydC9TREdcXG5zdWJ3YXkvTVNcXG5zdWJ6ZXJvXFxuc3VjY2VlZC9HRFNcXG5zdWNjZXNzL1ZNU1xcbnN1Y2Nlc3NmdWwvVVlcXG5zdWNjZXNzaW9uL1NNXFxuc3VjY2Vzc2l2ZS9ZXFxuc3VjY2Vzc29yL1NNXFxuc3VjY2luY3QvUllUUFxcbnN1Y2NpbmN0bmVzcy9NXFxuc3VjY29yL1NHTURcXG5zdWNjb3Rhc2gvTVxcbnN1Y2N1YmlcXG5zdWNjdWJ1c1xcbnN1Y2N1bGVuY2UvTVxcbnN1Y2N1bGVuY3kvTVxcbnN1Y2N1bGVudC9TTVxcbnN1Y2N1bWIvR0RTXFxuc3VjaFxcbnN1Y2hsaWtlXFxuc3Vjay9NRFJaR1NcXG5zdWNrZXIvR01EXFxuc3Vja2xlL0RTSkdcXG5zdWNrbGluZy9NXFxuc3Vjcm9zZS9NXFxuc3VjdGlvbi9TTURHXFxuc3VkZGVuL1BZXFxuc3VkZGVubmVzcy9NXFxuc3Vkcy9NXFxuc3Vkc3kvVFJcXG5zdWUvRFNHXFxuc3VlZGUvTVxcbnN1ZXQvTVxcbnN1ZXR5XFxuc3VmZmVyL0RSWkdTSlxcbnN1ZmZlcmFuY2UvTVxcbnN1ZmZlcmVyL01cXG5zdWZmZXJpbmcvTVxcbnN1ZmZpY2UvRFNHXFxuc3VmZmljaWVuY3kvSU1cXG5zdWZmaWNpZW50L0lZXFxuc3VmZml4L01EU0dcXG5zdWZmaXhhdGlvbi9NXFxuc3VmZm9jYXRlL0dORFNcXG5zdWZmb2NhdGlvbi9NXFxuc3VmZnJhZ2FuL01TXFxuc3VmZnJhZ2UvTVxcbnN1ZmZyYWdldHRlL1NNXFxuc3VmZnJhZ2lzdC9NU1xcbnN1ZmZ1c2UvRFNHTlxcbnN1ZmZ1c2lvbi9NXFxuc3VnYXIvR1NNRFxcbnN1Z2FyY2FuZS9NXFxuc3VnYXJjb2F0L0dEU1xcbnN1Z2FybGVzc1xcbnN1Z2FycGx1bS9NU1xcbnN1Z2FyeS9SVFxcbnN1Z2dlc3QvR1ZTRFJcXG5zdWdnZXN0aWJpbGl0eS9NXFxuc3VnZ2VzdGlibGVcXG5zdWdnZXN0aW9uL1NNXFxuc3VnZ2VzdGl2ZS9ZUFxcbnN1Z2dlc3RpdmVuZXNzL01cXG5zdWljaWRhbFxcbnN1aWNpZGUvU01cXG5zdWl0L0JNREdTXFxuc3VpdGFiaWxpdHkvVU1cXG5zdWl0YWJsZW5lc3MvTVxcbnN1aXRhYmx5L1VcXG5zdWl0Y2FzZS9TTVxcbnN1aXRlL1NNXFxuc3VpdGVkL1VcXG5zdWl0aW5nL01cXG5zdWl0b3IvTVNcXG5zdWtpeWFraS9NXFxuc3VsZmEvTVxcbnN1bGZhdGUvU01cXG5zdWxmaWRlL1NNXFxuc3VsZm9uYW1pZGVzXFxuc3VsZnVyL01EU0dcXG5zdWxmdXJpY1xcbnN1bGZ1cm91c1xcbnN1bGsvTURHU1xcbnN1bGtpbHlcXG5zdWxraW5lc3MvTVxcbnN1bGt5L1RSU01QXFxuc3VsbGVuL1JZUFRcXG5zdWxsZW5uZXNzL01cXG5zdWxsaWVkL1VcXG5zdWxseS9HRFNcXG5zdWx0YW4vTVNcXG5zdWx0YW5hL1NNXFxuc3VsdGFuYXRlL01TXFxuc3VsdHJpbHlcXG5zdWx0cmluZXNzL01cXG5zdWx0cnkvUlBUXFxuc3VtL1NNXFxuc3VtYWMvTVxcbnN1bW1hcmlseVxcbnN1bW1hcml6ZS9HRFNcXG5zdW1tYXJ5L1NNXFxuc3VtbWF0XFxuc3VtbWF0aW9uL0ZNU1xcbnN1bW1lZFxcbnN1bW1lci9NRFNHXFxuc3VtbWVyaG91c2UvU01cXG5zdW1tZXJ0aW1lL01cXG5zdW1tZXJ5XFxuc3VtbWluZ1xcbnN1bW1pdC9NU1xcbnN1bW1pdHJ5L01cXG5zdW1tb24vRFJTWkdcXG5zdW1tb25lci9NXFxuc3VtbW9ucy9HTURTXFxuc3Vtby9NXFxuc3VtcC9NU1xcbnN1bXB0dW91cy9QWVxcbnN1bXB0dW91c25lc3MvTVxcbnN1bi9TTVxcbnN1bmJhdGgvWkdNRFJTXFxuc3VuYmF0aGVcXG5zdW5iYXRoZXIvTVxcbnN1bmJhdGhpbmcvTVxcbnN1bmJhdGhzXFxuc3VuYmVhbS9TTVxcbnN1bmJlZC9TXFxuc3VuYmVsdC9TTVxcbnN1bmJsb2NrL01TXFxuc3VuYm9ubmV0L1NNXFxuc3VuYnVybi9TR01EXFxuc3VuYnVyc3QvTVNcXG5zdW5kYWUvTVNcXG5zdW5kZWNrL1NcXG5zdW5kZXIvRFNHXFxuc3VuZGlhbC9TTVxcbnN1bmRvd24vU01cXG5zdW5kcmVzcy9TXFxuc3VuZHJpZXMvTVxcbnN1bmRyeS9TXFxuc3VuZmlzaC9NU1xcbnN1bmZsb3dlci9NU1xcbnN1bmcvVVxcbnN1bmdsYXNzZXMvTVxcbnN1bmhhdC9TXFxuc3Vuay9OXFxuc3VubGFtcC9TTVxcbnN1bmxlc3NcXG5zdW5saWdodC9NXFxuc3VubGl0XFxuc3VubmVkXFxuc3VubmluZXNzL01cXG5zdW5uaW5nXFxuc3VubnkvVFJQXFxuc3VucmlzZS9TTVxcbnN1bnJvb2YvU01cXG5zdW5zY3JlZW4vTVNcXG5zdW5zZXQvTVNcXG5zdW5zaGFkZS9NU1xcbnN1bnNoaW5lL01cXG5zdW5zaGlueVxcbnN1bnNwb3QvU01cXG5zdW5zdHJva2UvTVxcbnN1bnRhbi9NU1xcbnN1bnRhbm5lZFxcbnN1bnRhbm5pbmdcXG5zdW50cmFwL1NcXG5zdW51cC9NXFxuc3VwL1NaTVJcXG5zdXBlci9NXFxuc3VwZXJhYnVuZGFuY2UvTVNcXG5zdXBlcmFidW5kYW50XFxuc3VwZXJhbm51YXRlL0dORFNcXG5zdXBlcmFubnVhdGlvbi9NXFxuc3VwZXJiL1JZVFxcbnN1cGVyY2FyZ28vTVxcbnN1cGVyY2FyZ29lc1xcbnN1cGVyY2hhcmdlL1pHRFJTXFxuc3VwZXJjaGFyZ2VyL01cXG5zdXBlcmNpbGlvdXMvUFlcXG5zdXBlcmNpbGlvdXNuZXNzL01cXG5zdXBlcmNpdHkvU01cXG5zdXBlcmNvbXB1dGVyL01TXFxuc3VwZXJjb25kdWN0aW5nXFxuc3VwZXJjb25kdWN0aXZlXFxuc3VwZXJjb25kdWN0aXZpdHkvTVxcbnN1cGVyY29uZHVjdG9yL1NNXFxuc3VwZXJjcml0aWNhbFxcbnN1cGVyZWdvL01TXFxuc3VwZXJlcm9nYXRpb24vTVxcbnN1cGVyZXJvZ2F0b3J5XFxuc3VwZXJmaWNpYWwvWVxcbnN1cGVyZmljaWFsaXR5L01cXG5zdXBlcmZpbmVcXG5zdXBlcmZsdWl0eS9NXFxuc3VwZXJmbHVvdXMvWVBcXG5zdXBlcmZsdW91c25lc3MvTVxcbnN1cGVyZ2x1ZVxcbnN1cGVyZ3Jhc3MvU1xcbnN1cGVyaGVyby9NU1xcbnN1cGVyaGVyb2VzXFxuc3VwZXJoaWdod2F5L1NNXFxuc3VwZXJodW1hblxcbnN1cGVyaW1wb3NlL0dEU1xcbnN1cGVyaW1wb3NpdGlvbi9NXFxuc3VwZXJpbnRlbmQvRFNHXFxuc3VwZXJpbnRlbmRlbmNlL01cXG5zdXBlcmludGVuZGVuY3kvTVxcbnN1cGVyaW50ZW5kZW50L1NNXFxuc3VwZXJpb3IvTVNcXG5zdXBlcmlvcml0eS9NXFxuc3VwZXJsYXRpdmUvU01ZXFxuc3VwZXJtYW4vTVxcbnN1cGVybWFya2V0L1NNXFxuc3VwZXJtYXNzaXZlXFxuc3VwZXJtZW5cXG5zdXBlcm1vZGVsL1NNXFxuc3VwZXJtb20vTVNcXG5zdXBlcm5hbFxcbnN1cGVybmF0dXJhbC9TWVxcbnN1cGVybm92YS9NU1xcbnN1cGVybm92YWVcXG5zdXBlcm51bWVyYXJ5L1NNXFxuc3VwZXJwb3NlL0dEU1xcbnN1cGVycG9zaXRpb24vTVxcbnN1cGVycG93ZXIvU01cXG5zdXBlcnNhdHVyYXRlL0dORFNcXG5zdXBlcnNhdHVyYXRpb24vTVxcbnN1cGVyc2NyaWJlL0dEU1xcbnN1cGVyc2NyaXB0L01TXFxuc3VwZXJzY3JpcHRpb24vTVxcbnN1cGVyc2VkZS9HRFNcXG5zdXBlcnNpemUvR0RTXFxuc3VwZXJzb25pY1xcbnN1cGVyc3ByZWFkZXIvU01cXG5zdXBlcnN0YXIvTVNcXG5zdXBlcnN0YXJkb21cXG5zdXBlcnN0YXRlL1NcXG5zdXBlcnN0aXRpb24vTVNcXG5zdXBlcnN0aXRpb3VzL1lcXG5zdXBlcnN0b3JlL01TXFxuc3VwZXJzdHJ1Y3R1cmUvTVNcXG5zdXBlcnRhbmtlci9NU1xcbnN1cGVydXNlci9TXFxuc3VwZXJ2ZW5lL0dEU1xcbnN1cGVydmVudGlvbi9NXFxuc3VwZXJ2aXNlL1hHTkRTXFxuc3VwZXJ2aXNlZC9VXFxuc3VwZXJ2aXNpb24vTVxcbnN1cGVydmlzb3IvTVNcXG5zdXBlcnZpc29yeVxcbnN1cGVyd29tYW4vTVxcbnN1cGVyd29tZW5cXG5zdXBpbmUvWVxcbnN1cHAvRFJaR1xcbnN1cHBlci9NXFxuc3VwcGVydGltZVxcbnN1cHBsXFxuc3VwcGxhbnQvU0RHXFxuc3VwcGxlL1RMUFJcXG5zdXBwbGVtZW50L01ER1NcXG5zdXBwbGVtZW50YWxcXG5zdXBwbGVtZW50YXJ5XFxuc3VwcGxlbWVudGF0aW9uL01cXG5zdXBwbGVuZXNzL01cXG5zdXBwbGlhbnQvU01cXG5zdXBwbGljYW50L01TXFxuc3VwcGxpY2F0ZS9HRFNcXG5zdXBwbGljYXRpb24vTVxcbnN1cHBsaWVyL01cXG5zdXBwbHkvWkdEUlNNWE5cXG5zdXBwb3J0L01EUlNCWkdWXFxuc3VwcG9ydGFibGUvVUlcXG5zdXBwb3J0ZWQvVVxcbnN1cHBvcnRlci9NXFxuc3VwcG9zZS9HRFNcXG5zdXBwb3NlZC9ZXFxuc3VwcG9zaXRpb24vTVNcXG5zdXBwb3NpdG9yeS9TTVxcbnN1cHByZXNzL0dWRFNcXG5zdXBwcmVzc2FudC9NU1xcbnN1cHByZXNzaWJsZVxcbnN1cHByZXNzaW9uL01cXG5zdXBwcmVzc29yL1NNXFxuc3VwcHVyYXRlL0RTR05cXG5zdXBwdXJhdGlvbi9NXFxuc3VwcmFcXG5zdXByYW5hdGlvbmFsXFxuc3VwcmVtYWNpc3QvTVNcXG5zdXByZW1hY3kvTVxcbnN1cHJlbWUvWVxcbnN1cHJlbW8vU1xcbnN1cHRcXG5zdXJjZWFzZS9EU01HXFxuc3VyY2hhcmdlL0RTTUdcXG5zdXJjaW5nbGUvU01cXG5zdXJlL1BZVFJcXG5zdXJlZmlyZVxcbnN1cmVmb290ZWRcXG5zdXJlbmVzcy9NXFxuc3VyZXR5L1NNXFxuc3VyZi9NRFJaR1NcXG5zdXJmYWNlJ3NcXG5zdXJmYWNlL0FHRFNcXG5zdXJmYm9hcmQvTURTR1xcbnN1cmZlaXQvTURTR1xcbnN1cmZlci9NXFxuc3VyZmluZy9NXFxuc3VyZ2UvRFNNR1xcbnN1cmdlb24vTVNcXG5zdXJnZXJ5L1NNXFxuc3VyZ2ljYWwvWVxcbnN1cmxpbmVzcy9NXFxuc3VybHkvUFRSXFxuc3VybWlzZS9NR0RTXFxuc3VybW91bnQvREdTQlxcbnN1cm1vdW50YWJsZS9JXFxuc3VybmFtZS9NU1xcbnN1cnBhc3MvR0RTXFxuc3VycGFzc2VkL1VcXG5zdXJwbGljZS9NU1xcbnN1cnBsdXMvTVNcXG5zdXJwbHVzc2VkXFxuc3VycGx1c3NpbmdcXG5zdXJwcmlzZS9EU01HSlxcbnN1cnByaXNpbmcvVVlcXG5zdXJyZWFsXFxuc3VycmVhbGlzbS9NXFxuc3VycmVhbGlzdC9TTVxcbnN1cnJlYWxpc3RpY1xcbnN1cnJlYWxpc3RpY2FsbHlcXG5zdXJyZW5kZXIvTURTR1xcbnN1cnJlcHRpdGlvdXMvUFlcXG5zdXJyZXB0aXRpb3VzbmVzcy9NXFxuc3VycmV5L01TXFxuc3Vycm9nYWN5L01cXG5zdXJyb2dhdGUvU01cXG5zdXJyb3VuZC9HU0RKXFxuc3Vycm91bmRpbmcvTVxcbnN1cnJvdW5kaW5ncy9NXFxuc3VydGF4L01EU0dcXG5zdXJ0aXRsZS9TXFxuc3VydmVpbGxhbmNlL01cXG5zdXJ2ZXknc1xcbnN1cnZleS9BREdTXFxuc3VydmV5aW5nL01cXG5zdXJ2ZXlvci9TTVxcbnN1cnZpdmFsL1NNXFxuc3Vydml2YWxpc3QvU01cXG5zdXJ2aXZlL0RTR0JcXG5zdXJ2aXZvci9TTVxcbnN1c2NlcHRpYmlsaXR5L1NNXFxuc3VzY2VwdGlibGUvSVxcbnN1c2hpL01cXG5zdXNwZWN0L1NNREdcXG5zdXNwZWN0ZWQvVVxcbnN1c3BlbmQvU0RSWkdcXG5zdXNwZW5kZXIvTVxcbnN1c3BlbnNlL1hNTlxcbnN1c3BlbnNlZnVsXFxuc3VzcGVuc2lvbi9NXFxuc3VzcGljaW9uL1NNXFxuc3VzcGljaW91cy9ZXFxuc3Vzcy9EU0dcXG5zdXN0YWluL1NEQkdcXG5zdXN0YWluYWJpbGl0eVxcbnN1c3RhaW5hYmxlL1VcXG5zdXN0YWluYWJseVxcbnN1c3RlbmFuY2UvTVxcbnN1dGxlci9NU1xcbnN1dHRlZVxcbnN1dHVyZS9NR0RTXFxuc3V6ZXJhaW4vTVNcXG5zdXplcmFpbnR5L01cXG5zdmVsdGUvVFJcXG5zd2FiL01TXFxuc3dhYmJlZFxcbnN3YWJiaW5nXFxuc3dhZGRsZS9EU0dcXG5zd2FnL01TXFxuc3dhZ2dlZFxcbnN3YWdnZXIvU01EUkdcXG5zd2FnZ2luZ1xcbnN3YWluL1NNXFxuc3dhbGxvdy9HU01EXFxuc3dhbGxvd3RhaWwvTVNcXG5zd2FtXFxuc3dhbWkvU01cXG5zd2FtcC9HU01EXFxuc3dhbXBsYW5kL01cXG5zd2FtcHkvUlRcXG5zd2FuL01TXFxuc3dhbmsvVEdTTURSXFxuc3dhbmtpbHlcXG5zd2Fua2luZXNzL01cXG5zd2Fua3kvUlBUXFxuc3dhbm5lZFxcbnN3YW5uaW5nXFxuc3dhbnNvbmcvU1xcbnN3YXAvTVNcXG5zd2FwcGVkXFxuc3dhcHBpbmdcXG5zd2FyZC9TTVxcbnN3YXJtL0dTTURcXG5zd2FydGh5L1RSXFxuc3dhc2gvR01EU1xcbnN3YXNoYnVja2xlci9TTVxcbnN3YXNoYnVja2xpbmcvTVxcbnN3YXN0aWthL1NNXFxuc3dhdC9NU1xcbnN3YXRjaC9NU1xcbnN3YXRoL0dNRFNcXG5zd2F0aGUvTVxcbnN3YXRoc1xcbnN3YXR0ZWRcXG5zd2F0dGVyL1NNREdcXG5zd2F0dGluZ1xcbnN3YXkvTURHU1xcbnN3YXliYWNrL01EXFxuc3dheWVkL1VcXG5zd2Vhci9aR1NSXFxuc3dlYXJlci9NXFxuc3dlYXJ3b3JkL01TXFxuc3dlYXQvWkdTTURSXFxuc3dlYXRiYW5kL01TXFxuc3dlYXRlci9NXFxuc3dlYXRwYW50cy9NXFxuc3dlYXRzL01cXG5zd2VhdHNoaXJ0L1NNXFxuc3dlYXRzaG9wL01TXFxuc3dlYXRzdWl0L1NcXG5zd2VhdHkvUlRcXG5zd2VkZS9TTVxcbnN3ZWVwL1pHU01SSlxcbnN3ZWVwZXIvTVxcbnN3ZWVwaW5nL01ZXFxuc3dlZXBpbmdzL01cXG5zd2VlcHN0YWtlcy9NXFxuc3dlZXQvWFRTTU5SWVBcXG5zd2VldGJyZWFkL1NNXFxuc3dlZXRicmllci9TTVxcbnN3ZWV0Y29yblxcbnN3ZWV0ZW5lZC9VXFxuc3dlZXRlbmVyL01TXFxuc3dlZXRlbmluZy9NXFxuc3dlZXRoZWFydC9TTVxcbnN3ZWV0aWUvU01cXG5zd2VldGlzaFxcbnN3ZWV0bWVhdC9NU1xcbnN3ZWV0bmVzcy9NXFxuc3dlbGwvVEdTTURSSlxcbnN3ZWxsaGVhZC9NRFNcXG5zd2VsbGluZy9NXFxuc3dlbHRlci9TR01EXFxuc3dlcHRcXG5zd2VwdGJhY2tcXG5zd2VydmUvTUdEU1xcbnN3ZXJ2aW5nL1VcXG5zd2lmdC9QVFNNUllcXG5zd2lmdG5lc3MvTVxcbnN3aWcvTVNcXG5zd2lnZ2VkXFxuc3dpZ2dpbmdcXG5zd2lsbC9HU01EXFxuc3dpbS9NU1xcbnN3aW1tZXIvU01cXG5zd2ltbWluZy9NWVxcbnN3aW1zdWl0L1NNXFxuc3dpbXdlYXJcXG5zd2luZGxlL0RSU01aR1xcbnN3aW5kbGVyL01cXG5zd2luZS9TTVxcbnN3aW5laGVyZC9TTVxcbnN3aW5nL1pHU01SXFxuc3dpbmdlaW5nXFxuc3dpbmdlci9NXFxuc3dpbmlzaFxcbnN3aXBlL0RTTUdcXG5zd2lybC9HU01EXFxuc3dpcmx5XFxuc3dpc2gvVEdNRFJTXFxuc3dpdGNoL01EUlNaR0JcXG5zd2l0Y2hiYWNrL01TXFxuc3dpdGNoYmxhZGUvU01cXG5zd2l0Y2hib2FyZC9TTVxcbnN3aXRjaGVyL01cXG5zd2l0Y2hvdmVyXFxuc3dpdmVsL01ER1NcXG5zd2l6XFxuc3dpenpcXG5zd2l6emxlL0RTR1xcbnN3b2xsZW5cXG5zd29vbi9TR01EXFxuc3dvb3AvU0dNRFxcbnN3b29zaC9NRFNHXFxuc3dvcmQvU01cXG5zd29yZGZpc2gvTVNcXG5zd29yZHBsYXkvTVxcbnN3b3Jkc21hbi9NXFxuc3dvcmRzbWFuc2hpcC9NXFxuc3dvcmRzbWVuXFxuc3dvcmVcXG5zd29yblxcbnN3b3QvU1xcbnN3b3R0ZWRcXG5zd290dGluZ1xcbnN3dW1cXG5zd3VuZ1xcbnN5YmFyaXRlL1NNXFxuc3liYXJpdGljXFxuc3ljYW1vcmUvTVNcXG5zeWNvcGhhbmN5L01cXG5zeWNvcGhhbnQvU01cXG5zeWNvcGhhbnRpY1xcbnN5bGxhYmljXFxuc3lsbGFiaWNhdGUvR05EU1xcbnN5bGxhYmljYXRpb24vTVxcbnN5bGxhYmlmaWNhdGlvbi9NXFxuc3lsbGFiaWZ5L0RTTkdcXG5zeWxsYWJsZS9NU1xcbnN5bGxhYnViL1NcXG5zeWxsYWJ1cy9NU1xcbnN5bGxvZ2lzbS9NU1xcbnN5bGxvZ2lzdGljXFxuc3lscGgvTVxcbnN5bHBoaWNcXG5zeWxwaGxpa2VcXG5zeWxwaHNcXG5zeWx2YW5cXG5zeW1iaW9zZXNcXG5zeW1iaW9zaXMvTVxcbnN5bWJpb3RpY1xcbnN5bWJpb3RpY2FsbHlcXG5zeW1ib2wvTVNcXG5zeW1ib2xpY1xcbnN5bWJvbGljYWwvWVxcbnN5bWJvbGlzbS9NXFxuc3ltYm9saXphdGlvbi9NXFxuc3ltYm9saXplL0RTR1xcbnN5bWJvbG9neVxcbnN5bW1ldHJpY1xcbnN5bW1ldHJpY2FsL1lcXG5zeW1tZXRyeS9TTVxcbnN5bXBhdGhldGljL1VcXG5zeW1wYXRoZXRpY2FsbHkvVVxcbnN5bXBhdGhpZXMvTVxcbnN5bXBhdGhpemUvWkdEUlNcXG5zeW1wYXRoaXplci9NXFxuc3ltcGF0aHkvU01cXG5zeW1waG9uaWNcXG5zeW1waG9ueS9TTVxcbnN5bXBvc2l1bS9NU1xcbnN5bXB0b20vTVNcXG5zeW1wdG9tYXRpY1xcbnN5bXB0b21hdGljYWxseVxcbnN5bi9IXFxuc3luYWdvZ2FsXFxuc3luYWdvZ3VlL1NNXFxuc3luYXBzZS9NU1xcbnN5bmFwdGljXFxuc3luYy9NRFNHXFxuc3luY2hyb25pY2l0eVxcbnN5bmNocm9uaXphdGlvbi9TTVxcbnN5bmNocm9uaXplL0dEU1xcbnN5bmNocm9ub3VzL1lcXG5zeW5jaHJvbnlcXG5zeW5jb3BhdGUvRFNHTlxcbnN5bmNvcGF0aW9uL01cXG5zeW5jb3BlL01cXG5zeW5kaWNhbGlzbVxcbnN5bmRpY2FsaXN0L1NcXG5zeW5kaWNhdGUvRFNNR05cXG5zeW5kaWNhdGlvbi9NXFxuc3luZHJvbWUvU01cXG5zeW5lcmdpc20vTVxcbnN5bmVyZ2lzdGljXFxuc3luZXJneS9TTVxcbnN5bmZ1ZWwvTVNcXG5zeW5vZC9TTVxcbnN5bm9ueW0vU01cXG5zeW5vbnltb3VzXFxuc3lub255bXkvTVxcbnN5bm9wc2VzXFxuc3lub3BzaXMvTVxcbnN5bm9wdGljXFxuc3lub3ZpYWxcXG5zeW50YWN0aWNcXG5zeW50YWN0aWNhbC9ZXFxuc3ludGF4L01cXG5zeW50aGVzZXNcXG5zeW50aGVzaXMvTVxcbnN5bnRoZXNpemUvWkdEUlNcXG5zeW50aGVzaXplci9NXFxuc3ludGhldGljL1NNXFxuc3ludGhldGljYWxseVxcbnN5bnRoc1xcbnN5cGhpbGlzL01cXG5zeXBoaWxpdGljL1NNXFxuc3lyaW5nZS9EU01HXFxuc3lydXAvU01cXG5zeXJ1cHlcXG5zeXNhZG1pbi9TXFxuc3lzb3AvU1xcbnN5c3RlbS9TTVxcbnN5c3RlbWF0aWMvVVxcbnN5c3RlbWF0aWNhbC9ZXFxuc3lzdGVtYXRpemF0aW9uL01cXG5zeXN0ZW1hdGl6ZS9HRFNcXG5zeXN0ZW1pYy9NU1xcbnN5c3RlbWljYWxseVxcbnN5c3RvbGUvU01cXG5zeXN0b2xpY1xcbnQvU0ROWEdCSlxcbnRhXFxudGFiL1NNXFxudGFiYmVkXFxudGFiYmluZ1xcbnRhYmJvdWxlaC9NXFxudGFiYnkvU01cXG50YWJlcm5hY2xlL1NNXFxudGFibGEvTVNcXG50YWJsZS9NR0RTXFxudGFibGVhdS9NXFxudGFibGVhdXhcXG50YWJsZWNsb3RoL01cXG50YWJsZWNsb3Roc1xcbnRhYmxlbGFuZC9TTVxcbnRhYmxlc3Bvb24vU01cXG50YWJsZXNwb29uZnVsL1NNXFxudGFibGV0L1NNXFxudGFibGV0b3AvTVNcXG50YWJsZXdhcmUvTVxcbnRhYmxvaWQvU01cXG50YWJvby9NRFNHXFxudGFib3IvTVNcXG50YWJ1bGFyXFxudGFidWxhdGUvRFNHTlhcXG50YWJ1bGF0aW9uL01cXG50YWJ1bGF0b3IvU01cXG50YWNob2dyYXBoXFxudGFjaG9ncmFwaHNcXG50YWNob21ldGVyL1NNXFxudGFjaHljYXJkaWEvTVxcbnRhY2h5b25cXG50YWNpdC9QWVxcbnRhY2l0bmVzcy9NXFxudGFjaXR1cm4vWVxcbnRhY2l0dXJuaXR5L01cXG50YWNrL1pHTURSU1xcbnRhY2tlci9NXFxudGFja2luZXNzL01cXG50YWNrbGUvRFJTTVpHXFxudGFja2xlci9NXFxudGFja3kvUlRQXFxudGFjby9NU1xcbnRhY3QvRk1cXG50YWN0ZnVsL1lQXFxudGFjdGZ1bG5lc3MvTVxcbnRhY3RpYy9TTVxcbnRhY3RpY2FsL1lcXG50YWN0aWNpYW4vTVNcXG50YWN0aWxlXFxudGFjdGlsaXR5L01cXG50YWN0bGVzcy9QWVxcbnRhY3RsZXNzbmVzcy9NXFxudGFkL1NNXFxudGFkcG9sZS9NU1xcbnRhZmZldGEvTVxcbnRhZmZyYWlsL1NNXFxudGFmZnkvU01cXG50YWcvU01cXG50YWdnZWRcXG50YWdnZXIvU01cXG50YWdnaW5nXFxudGFnbGlhdGVsbGVcXG50YWdsaW5lL01TXFxudGFpZ2EvTVNcXG50YWlsL0FDU0RNR1xcbnRhaWxiYWNrL01TXFxudGFpbGJvYXJkL1NcXG50YWlsYm9uZS9TXFxudGFpbGNvYXQvTVNcXG50YWlsZ2F0ZS9NWkdEUlNcXG50YWlsZ2F0ZXIvTVxcbnRhaWxsZXNzXFxudGFpbGxpZ2h0L01TXFxudGFpbG9yL1NHTURcXG50YWlsb3JpbmcvTVxcbnRhaWxwaWVjZS9TXFxudGFpbHBpcGUvU01cXG50YWlsc3Bpbi9TTVxcbnRhaWx3aW5kL1NNXFxudGFpbnQvTURTR1xcbnRhaW50ZWQvVVxcbnRha2UvQUlNU1xcbnRha2Vhd2F5L1NcXG50YWtlbi9BXFxudGFrZW9mZi9NU1xcbnRha2VvdXQvTVNcXG50YWtlb3Zlci9TTVxcbnRha2VyL01TXFxudGFraW5nL1NNXFxudGFraW5ncy9NXFxudGFsYy9NXFxudGFsY3VtL01cXG50YWxlL01TXFxudGFsZWJlYXJlci9NU1xcbnRhbGVudC9TTURcXG50YWxlbnRlZC9VXFxudGFsaVxcbnRhbGlzbWFuL01TXFxudGFsay9aR01EUlNcXG50YWxrYXRpdmUvUFlcXG50YWxrYXRpdmVuZXNzL01cXG50YWxrZXIvTVxcbnRhbGtpZS9SU01UXFxudGFsa3lcXG50YWxsL1RSUFxcbnRhbGxib3kvTVNcXG50YWxsaWVyL01cXG50YWxsaXNoXFxudGFsbG5lc3MvTVxcbnRhbGxvdy9NXFxudGFsbG93eVxcbnRhbGx5L0RSU01aR1xcbnRhbGx5aG8vTURHU1xcbnRhbG9uL01TXFxudGFsdXMvTVNcXG50YW0vU01cXG50YW1hbGUvU01cXG50YW1hcmFjay9NU1xcbnRhbWFyaW5kL01TXFxudGFtYm91cmluZS9NU1xcbnRhbWUvQllaVEdEUlNQXFxudGFtZWQvVVxcbnRhbWVuZXNzL01cXG50YW1lci9NXFxudGFtb3hpZmVuXFxudGFtcC9aR0RSU1xcbnRhbXBlci9aR0RSXFxudGFtcGVyZXIvTVxcbnRhbXBvbi9TTVxcbnRhbi9TTVxcbnRhbmFnZXIvTVNcXG50YW5iYXJrL01cXG50YW5kZW0vU01cXG50YW5kb29yaS9NXFxudGFuZy9NU1xcbnRhbmdlbG8vTVNcXG50YW5nZW50L01TXFxudGFuZ2VudGlhbC9ZXFxudGFuZ2VyaW5lL01TXFxudGFuZ2liaWxpdHkvSU1cXG50YW5naWJsZS9JTVNcXG50YW5naWJsZW5lc3MvTVxcbnRhbmdpYmx5L0lcXG50YW5nbGUnc1xcbnRhbmdsZS9VRFNHXFxudGFuZ28vTURTR1xcbnRhbmd5L1JUXFxudGFuay9aR01EUlNcXG50YW5rYXJkL01TXFxudGFua2VyL01cXG50YW5rZnVsL01TXFxudGFubmVkL1VcXG50YW5uZXIvU01cXG50YW5uZXJ5L1NNXFxudGFubmVzdFxcbnRhbm5pbi9NXFxudGFubmluZy9NXFxudGFuc3kvTVxcbnRhbnRhbGl6YXRpb24vTVxcbnRhbnRhbGl6ZS9aR0RSU1xcbnRhbnRhbGl6ZXIvTVxcbnRhbnRhbGl6aW5nL1lcXG50YW50YWx1bS9NXFxudGFudGFtb3VudFxcbnRhbnRyYS9NXFxudGFudHJ1bS9TTVxcbnRhcC9TWkdNRFJcXG50YXBhc1xcbnRhcGUvTVNcXG50YXBlbGluZS9NU1xcbnRhcGVyL01ER1xcbnRhcGVzdHJ5L1NNXFxudGFwZXdvcm0vTVNcXG50YXBpb2NhL01cXG50YXBpci9NU1xcbnRhcHBlZC9VXFxudGFwcGVyL01TXFxudGFwcGV0L01TXFxudGFwcGluZ1xcbnRhcHJvb20vU01cXG50YXByb290L1NNXFxudGFyL1NHTURcXG50YXJhbWFzYWxhdGFcXG50YXJhbnRlbGxhL01TXFxudGFyYW50dWxhL1NNXFxudGFyYmFsbC9TXFxudGFyZGlseVxcbnRhcmRpbmVzcy9NXFxudGFyZHkvVFBSXFxudGFyZS9NU1xcbnRhcmdldC9NREdTXFxudGFyaWZmL01TXFxudGFybWFjL01TXFxudGFybWFjYWRhbVxcbnRhcm1hY2tlZFxcbnRhcm1hY2tpbmdcXG50YXJuL01TXFxudGFybmlzaC9HTURTXFxudGFybmlzaGVkL1VcXG50YXJvL01TXFxudGFyb3QvTVNcXG50YXJwL01TXFxudGFycGF1bGluL01TXFxudGFycG9uL01TXFxudGFycmFnb24vU01cXG50YXJyZWRcXG50YXJyaW5nXFxudGFycnkvVEdEUlNcXG50YXJzYWwvTVNcXG50YXJzaVxcbnRhcnN1cy9NXFxudGFydC9QVEdNRFJZU1xcbnRhcnRhbi9NU1xcbnRhcnRhci9NU1xcbnRhcnRhcmljXFxudGFydG5lc3MvTVxcbnRhcnR5L1RcXG50YXNlci9HTURTXFxudGFzay9HTURTXFxudGFza2JhclxcbnRhc2ttYXN0ZXIvTVNcXG50YXNrbWlzdHJlc3MvTVNcXG50YXNzZWwvTURTR1xcbnRhc3RlL0pNWkdEUlNcXG50YXN0ZWQvVVxcbnRhc3RlZnVsL0VQWVxcbnRhc3RlZnVsbmVzcy9FTVxcbnRhc3RlbGVzcy9QWVxcbnRhc3RlbGVzc25lc3MvTVxcbnRhc3Rlci9NXFxudGFzdGlseVxcbnRhc3RpbmVzcy9NXFxudGFzdGluZy9NXFxudGFzdHkvVFJQXFxudGF0L1NaUlxcbnRhdGFtaS9NU1xcbnRhdGVyL01cXG50YXR0ZWRcXG50YXR0ZXIvTURTR1xcbnRhdHRlcmRlbWFsaW9uL01TXFxudGF0dGllXFxudGF0dGluZy9NXFxudGF0dGxlL01aR0RSU1xcbnRhdHRsZXIvTVxcbnRhdHRsZXRhbGUvTVNcXG50YXR0b28vTURSU1pHXFxudGF0dG9vZXIvTVxcbnRhdHRvb2lzdC9TTVxcbnRhdHR5L1RSU1xcbnRhdS9TTVxcbnRhdWdodC9VQVxcbnRhdW50L1pHTURSU1xcbnRhdW50ZXIvTVxcbnRhdW50aW5nL1lcXG50YXVwZS9NXFxudGF1dC9QWFROUllcXG50YXV0ZW4vREdcXG50YXV0bmVzcy9NXFxudGF1dG9sb2dpY2FsL1lcXG50YXV0b2xvZ291c1xcbnRhdXRvbG9neS9TTVxcbnRhdmVybi9NU1xcbnRhd2RyaWx5XFxudGF3ZHJpbmVzcy9NXFxudGF3ZHJ5L1JUUFxcbnRhd255L1RSTVxcbnRheC9CWkdNRFJTXFxudGF4YVxcbnRheGF0aW9uL01cXG50YXhlci9NXFxudGF4aS9HTURTXFxudGF4aWNhYi9TTVxcbnRheGlkZXJtaXN0L1NNXFxudGF4aWRlcm15L01cXG50YXhpbWV0ZXIvTVNcXG50YXhpd2F5L1NcXG50YXhtYW5cXG50YXhtZW5cXG50YXhvblxcbnRheG9ub21pY1xcbnRheG9ub21pc3QvTVNcXG50YXhvbm9teS9TTVxcbnRheHBheWVyL01TXFxudGF4cGF5aW5nXFxudGIvU1xcbnRic3BcXG50ZWEvU01cXG50ZWFiYWcvU1xcbnRlYWNha2UvU01cXG50ZWFjaC9aR1JTQkpcXG50ZWFjaGFibGUvVVxcbnRlYWNoZXIvTVxcbnRlYWNoaW5nL01cXG50ZWFjdXAvTVNcXG50ZWFjdXBmdWwvTVNcXG50ZWFrL01TXFxudGVha2V0dGxlL1NNXFxudGVhbC9NU1xcbnRlYWxpZ2h0L01TXFxudGVhbS9HTURTXFxudGVhbW1hdGUvTVNcXG50ZWFtc3Rlci9NU1xcbnRlYW13b3JrL01cXG50ZWFwb3QvTVNcXG50ZWFyL0dNRFNcXG50ZWFyYXdheS9TXFxudGVhcmRyb3AvU01cXG50ZWFyZnVsL1lcXG50ZWFyZ2FzL01TXFxudGVhcmdhc3NlZFxcbnRlYXJnYXNzaW5nXFxudGVhcmplcmtlci9NU1xcbnRlYXJvb20vU01cXG50ZWFyeS9UUlxcbnRlYXNlL01aR0RSU1xcbnRlYXNlbC9NU1xcbnRlYXNlci9NXFxudGVhc2luZy9ZXFxudGVhc3Bvb24vU01cXG50ZWFzcG9vbmZ1bC9TTVxcbnRlYXQvTVNcXG50ZWF0aW1lL1NcXG50ZWNoL01cXG50ZWNoaWUvU1xcbnRlY2huZXRpdW0vTVxcbnRlY2huaWNhbC9ZXFxudGVjaG5pY2FsaXR5L1NNXFxudGVjaG5pY2lhbi9TTVxcbnRlY2huaWNvbG9yXFxudGVjaG5pcXVlL1NNXFxudGVjaG5vXFxudGVjaG5vYmFiYmxlXFxudGVjaG5vY3JhY3kvU01cXG50ZWNobm9jcmF0L01TXFxudGVjaG5vY3JhdGljXFxudGVjaG5vbG9naWNhbC9ZXFxudGVjaG5vbG9naXN0L01TXFxudGVjaG5vbG9neS9TTVxcbnRlY2hub3Bob2JlL1NcXG50ZWNoc1xcbnRlY3RvbmljL1NcXG50ZWN0b25pY3MvTVxcbnRlZC9TXFxudGVkZHkvU1xcbnRlZGlvdXMvUFlcXG50ZWRpb3VzbmVzcy9NXFxudGVkaXVtL01cXG50ZWUvRFNNSFxcbnRlZWluZ1xcbnRlZW0vR0RTXFxudGVlbi9NU1xcbnRlZW5hZ2UvUlpcXG50ZWVuYWdlci9NXFxudGVlbnkvVFJcXG50ZWVueWJvcHBlci9NU1xcbnRlZXRlci9NRFNHXFxudGVldGhlL0dEU1xcbnRlZXRoaW5nL01cXG50ZWV0b3RhbC9SWlxcbnRlZXRvdGFsZXIvTVxcbnRlZXRvdGFsaXNtL01cXG50ZWt0aXRlL1NNXFxudGVsXFxudGVsZWNhc3QvU1pHTVJcXG50ZWxlY2FzdGVyL01cXG50ZWxlY29tbXVuaWNhdGlvbi9NU1xcbnRlbGVjb21tdW5pY2F0aW9ucy9NXFxudGVsZWNvbW11dGUvWkdEUlNcXG50ZWxlY29tbXV0ZXIvTVxcbnRlbGVjb21tdXRpbmcvTVxcbnRlbGVjb25mZXJlbmNlL01HRFNcXG50ZWxlY29uZmVyZW5jaW5nL01cXG50ZWxlZ2VuaWNcXG50ZWxlZ3JhbS9NU1xcbnRlbGVncmFwaC9NRFJaR1xcbnRlbGVncmFwaGVyL01cXG50ZWxlZ3JhcGhlc2VcXG50ZWxlZ3JhcGhpY1xcbnRlbGVncmFwaGljYWxseVxcbnRlbGVncmFwaGlzdC9TTVxcbnRlbGVncmFwaHNcXG50ZWxlZ3JhcGh5L01cXG50ZWxla2luZXNpcy9NXFxudGVsZWtpbmV0aWNcXG50ZWxlbWFya2V0ZXIvU01cXG50ZWxlbWFya2V0aW5nL01cXG50ZWxlbWV0ZXIvU01cXG50ZWxlbWV0cnkvU01cXG50ZWxlb2xvZ2ljYWxcXG50ZWxlb2xvZ3lcXG50ZWxlcGF0aGljXFxudGVsZXBhdGhpY2FsbHlcXG50ZWxlcGF0aHkvTVxcbnRlbGVwaG9uZS9EUlNNWkdcXG50ZWxlcGhvbmVyL01cXG50ZWxlcGhvbmljXFxudGVsZXBob25pc3QvU1xcbnRlbGVwaG9ueS9NXFxudGVsZXBob3RvL1NNXFxudGVsZXBob3RvZ3JhcGh5L01cXG50ZWxlcGxheS9NU1xcbnRlbGVwb3J0XFxudGVsZXBvcnRhdGlvblxcbnRlbGVwcmludGVyL01TXFxudGVsZXByb2Nlc3NpbmcvTVxcbnRlbGVwcm9tcHRlci9TTVxcbnRlbGVzYWxlc1xcbnRlbGVzY29wZS9EU01HXFxudGVsZXNjb3BpY1xcbnRlbGVzY29waWNhbGx5XFxudGVsZXRleHQvTVNcXG50ZWxldGhvbi9NU1xcbnRlbGV0eXBlL1NcXG50ZWxldHlwZXdyaXRlci9NU1xcbnRlbGV2YW5nZWxpc20vTVxcbnRlbGV2YW5nZWxpc3QvTVNcXG50ZWxldmlzZS9YR05EU1xcbnRlbGV2aXNpb24vTVxcbnRlbGV3b3JrZXIvU1xcbnRlbGV3b3JraW5nXFxudGVsZXgvTURTR1xcbnRlbGwvQUdTXFxudGVsbGVyL1NNXFxudGVsbGluZy9ZXFxudGVsbHRhbGUvU01cXG50ZWxsdXJpdW0vTVxcbnRlbGx5L1NNXFxudGVsbmV0XFxudGVtYmxvci9NU1xcbnRlbWVyaXR5L01cXG50ZW1wL01EUlpUR1NcXG50ZW1wZXIvTURHXFxudGVtcGVyYS9MU01cXG50ZW1wZXJhbWVudC9NU1xcbnRlbXBlcmFtZW50YWwvWVxcbnRlbXBlcmFuY2UvSU1cXG50ZW1wZXJhdGUvSVlcXG50ZW1wZXJhdGVuZXNzL01cXG50ZW1wZXJhdHVyZS9TTVxcbnRlbXBlc3QvU01cXG50ZW1wZXN0dW91cy9ZUFxcbnRlbXBlc3R1b3VzbmVzcy9NXFxudGVtcGxhdGUnc1xcbnRlbXBsYXRlL1NcXG50ZW1wbGUvU01cXG50ZW1wby9TTVxcbnRlbXBvcmFsL1lcXG50ZW1wb3JhcmlseVxcbnRlbXBvcmFyaW5lc3MvTVxcbnRlbXBvcmFyeS9GU01cXG50ZW1wb3JpemUvWkdEUlNcXG50ZW1wb3JpemVyL01cXG50ZW1wdC9TRFJaR1xcbnRlbXB0YXRpb24vTVNcXG50ZW1wdGVyL01cXG50ZW1wdGluZy9ZXFxudGVtcHRyZXNzL01TXFxudGVtcHVyYS9NXFxudGVuL0JNSFxcbnRlbmFiaWxpdHkvTVxcbnRlbmFibGUvVVxcbnRlbmFibHlcXG50ZW5hY2lvdXMvWVBcXG50ZW5hY2lvdXNuZXNzL01cXG50ZW5hY2l0eS9NXFxudGVuYW5jeS9TTVxcbnRlbmFudC9TTURHXFxudGVuYW50ZWQvVVxcbnRlbmFudHJ5L01cXG50ZW5jaFxcbnRlbmQvSUVGREdTXFxudGVuZGVkL1VcXG50ZW5kZW5jeS9TTVxcbnRlbmRlbnRpb3VzL1lQXFxudGVuZGVudGlvdXNuZXNzL01cXG50ZW5kZXIvU01EUllUR1BcXG50ZW5kZXJmb290L01TXFxudGVuZGVyaGVhcnRlZC9QXFxudGVuZGVyaGVhcnRlZG5lc3MvTVxcbnRlbmRlcml6ZS9aR0RSU1xcbnRlbmRlcml6ZXIvTVxcbnRlbmRlcmxvaW4vU01cXG50ZW5kZXJuZXNzL01cXG50ZW5kaW5pdGlzL01cXG50ZW5kb24vU01cXG50ZW5kcmlsL1NNXFxudGVuZW1lbnQvU01cXG50ZW5ldC9TTVxcbnRlbmZvbGRcXG50ZW5uZXIvU1xcbnRlbm5pcy9NXFxudGVub24vU01ER1xcbnRlbm9yL1NNXFxudGVucGluL1NNXFxudGVucGlucy9NXFxudGVuc2UvRFJTTVlUR05YUFxcbnRlbnNlbmVzcy9NXFxudGVuc2lsZVxcbnRlbnNpb24vRVNNXFxudGVuc2l0eS9JTVxcbnRlbnNvci9TXFxudGVudC9ER1NNXFxudGVudGFjbGUvRFNNXFxudGVudGF0aXZlL1BZXFxudGVudGF0aXZlbmVzcy9NXFxudGVudGVyaG9vay9NU1xcbnRlbnRoL01ZXFxudGVudGhzXFxudGVudWl0eS9NXFxudGVudW91cy9QWVxcbnRlbnVvdXNuZXNzL01cXG50ZW51cmUvRFNNR1xcbnRlcGVlL1NNXFxudGVwaWQvWVBcXG50ZXBpZGl0eS9NXFxudGVwaWRuZXNzL01cXG50ZXF1aWxhL1NNXFxudGVyYWJpdC9TTVxcbnRlcmFieXRlL01TXFxudGVyYWhlcnR6L01cXG50ZXJham91bGUvU1xcbnRlcmFwaXhlbC9NU1xcbnRlcmF3YXR0L1NcXG50ZXJiaXVtL01cXG50ZXJjZW50ZW5hcnkvU01cXG50ZXJjZW50ZW5uaWFsL1NNXFxudGVyaXlha2lcXG50ZXJtL01EWUdTXFxudGVybWFnYW50L01TXFxudGVybWluYWJsZS9JQ1xcbnRlcm1pbmFsL01ZU1xcbnRlcm1pbmF0ZS9EU0dOWFxcbnRlcm1pbmF0aW9uL0NTTVxcbnRlcm1pbmF0b3IvU1xcbnRlcm1pbmlcXG50ZXJtaW5vbG9naWNhbC9ZXFxudGVybWlub2xvZ3kvU01cXG50ZXJtaW51cy9NXFxudGVybWl0ZS9TTVxcbnRlcm4vSU1TXFxudGVybmFyeS9TTVxcbnRlcnJcXG50ZXJyYWNlL0RTTUdcXG50ZXJyYWNvdHRhL01cXG50ZXJyYWluL1NNXFxudGVycmFwaW4vTVNcXG50ZXJyYXJpdW0vU01cXG50ZXJyYXp6by9NU1xcbnRlcnJlc3RyaWFsL1NNWVxcbnRlcnJpYmxlL1BcXG50ZXJyaWJsZW5lc3MvTVxcbnRlcnJpYmx5XFxudGVycmllci9NXFxudGVycmlmaWNcXG50ZXJyaWZpY2FsbHlcXG50ZXJyaWZ5L0dEU1xcbnRlcnJpZnlpbmcvWVxcbnRlcnJpbmUvU1xcbnRlcnJpdG9yaWFsL01TXFxudGVycml0b3JpYWxpdHlcXG50ZXJyaXRvcnkvU01cXG50ZXJyb3IvU01cXG50ZXJyb3Jpc20vTVxcbnRlcnJvcmlzdC9TTVxcbnRlcnJvcml6ZS9EU0dcXG50ZXJyeS9STVpcXG50ZXJyeWNsb3RoL01cXG50ZXJzZS9SWVRQXFxudGVyc2VuZXNzL01cXG50ZXJ0aWFyeVxcbnRlc3NlbGxhdGUvRFNYR05cXG50ZXNzZWxsYXRpb24vTVxcbnRlc3Qncy9BRktcXG50ZXN0L0FLRkNER1NcXG50ZXN0YWJsZS9DRlxcbnRlc3RhbWVudC9NU1xcbnRlc3RhbWVudGFyeVxcbnRlc3RhdGUvU1xcbnRlc3RhdG9yL01TXFxudGVzdGF0cmljZXNcXG50ZXN0YXRyaXgvTVxcbnRlc3RlZC9VXFxudGVzdGVyL0tTTVxcbnRlc3Rlc1xcbnRlc3RpY2xlL01TXFxudGVzdGljdWxhclxcbnRlc3RpZmllci9NXFxudGVzdGlmeS9aR0RSU1xcbnRlc3RpbHlcXG50ZXN0aW1vbmlhbC9NU1xcbnRlc3RpbW9ueS9TTVxcbnRlc3RpbmVzcy9NXFxudGVzdGluZ3NcXG50ZXN0aXMvTVxcbnRlc3Rvc3Rlcm9uZS9NXFxudGVzdHkvUFJUXFxudGV0YW51cy9NXFxudGV0Y2hpbHlcXG50ZXRjaHkvUFJUXFxudGV0aGVyL1NNREdcXG50ZXRyYS9TTVxcbnRldHJhY3ljbGluZS9NXFxudGV0cmFoZWRyYWxcXG50ZXRyYWhlZHJvbi9NU1xcbnRldHJhbWV0ZXIvU01cXG50ZXh0L0ZNU1xcbnRleHRib29rL1NNXFxudGV4dGVkXFxudGV4dGlsZS9NU1xcbnRleHRpbmdcXG50ZXh0dWFsL0ZZXFxudGV4dHVyYWxcXG50ZXh0dXJlL01HRFNcXG50aGFsYW1pXFxudGhhbGFtdXMvTVxcbnRoYWxpZG9taWRlL01cXG50aGFsbGl1bS9NXFxudGhhblxcbnRoYW5lL1NNXFxudGhhbmsvU0RHXFxudGhhbmtmdWwvWVBcXG50aGFua2Z1bG5lc3MvTVxcbnRoYW5rbGVzcy9QWVxcbnRoYW5rbGVzc25lc3MvTVxcbnRoYW5rc2dpdmluZy9TTVxcbnRoYXQnZFxcbnRoYXQnbGxcXG50aGF0L01cXG50aGF0Y2gvTURSU1pHXFxudGhhdGNoZXIvTVxcbnRoYXRjaGluZy9NXFxudGhhdy9NREdTXFxudGhlL0pHXFxudGhlYXRlci9TTVxcbnRoZWF0ZXJnb2VyL1NNXFxudGhlYXRyaWNhbC9ZU1xcbnRoZWF0cmljYWxpdHkvTVxcbnRoZWF0cmljYWxzL01cXG50aGVhdHJpY3MvTVxcbnRoZWUvU1xcbnRoZWZ0L1NNXFxudGhlaXIvU1xcbnRoZWlzbS9NXFxudGhlaXN0L1NNXFxudGhlaXN0aWNcXG50aGVtXFxudGhlbWF0aWNcXG50aGVtYXRpY2FsbHlcXG50aGVtZS9EU01cXG50aGVtc2VsdmVzXFxudGhlbi9NXFxudGhlbmNlXFxudGhlbmNlZm9ydGhcXG50aGVuY2Vmb3J3YXJkXFxudGhlb2NyYWN5L1NNXFxudGhlb2NyYXRpY1xcbnRoZW9kb2xpdGUvU1xcbnRoZW9sb2dpYW4vU01cXG50aGVvbG9naWNhbC9ZXFxudGhlb2xvZ3kvU01cXG50aGVvcmVtL01TXFxudGhlb3JldGljXFxudGhlb3JldGljYWwvWVxcbnRoZW9yZXRpY2lhbi9TTVxcbnRoZW9yaXN0L1NNXFxudGhlb3JpemUvRFNHXFxudGhlb3J5L1NNXFxudGhlb3NvcGhpY1xcbnRoZW9zb3BoaWNhbFxcbnRoZW9zb3BoaXN0L1NNXFxudGhlb3NvcGh5L01cXG50aGVyYXBldXRpYy9TXFxudGhlcmFwZXV0aWNhbGx5XFxudGhlcmFwZXV0aWNzL01cXG50aGVyYXBpc3QvU01cXG50aGVyYXB5L1NNXFxudGhlcmUvTVxcbnRoZXJlYWJvdXQvU1xcbnRoZXJlYWZ0ZXJcXG50aGVyZWF0XFxudGhlcmVieVxcbnRoZXJlZm9yXFxudGhlcmVmb3JlXFxudGhlcmVmcm9tXFxudGhlcmVpblxcbnRoZXJlbWluL1NNXFxudGhlcmVvZlxcbnRoZXJlb25cXG50aGVyZXRvXFxudGhlcmV0b2ZvcmVcXG50aGVyZXVuZGVyXFxudGhlcmV1bnRvXFxudGhlcmV1cG9uXFxudGhlcmV3aXRoXFxudGhlcm0vU01cXG50aGVybWFsL01ZU1xcbnRoZXJtaW9uaWNcXG50aGVybW9keW5hbWljL1NcXG50aGVybW9keW5hbWljcy9NXFxudGhlcm1vbWV0ZXIvTVNcXG50aGVybW9tZXRyaWNcXG50aGVybW9udWNsZWFyXFxudGhlcm1vcGxhc3RpYy9TTVxcbnRoZXJtb3MvTVNcXG50aGVybW9zdGF0L01TXFxudGhlcm1vc3RhdGljXFxudGhlcm1vc3RhdGljYWxseVxcbnRoZXNhdXJpXFxudGhlc2F1cnVzL01TXFxudGhlc2UvU1xcbnRoZXNpcy9NXFxudGhlc3BpYW4vU01cXG50aGV0YS9TTVxcbnRoZXcvTVNcXG50aGV5XFxudGhleSdkXFxudGhleSdsbFxcbnRoZXkncmVcXG50aGV5J3ZlXFxudGhpYW1pbmUvTVxcbnRoaWNrL1BNTlJZWFRcXG50aGlja2VuL0RSSlpHXFxudGhpY2tlbmVyL01cXG50aGlja2VuaW5nL01cXG50aGlja2V0L01TXFxudGhpY2toZWFkZWQvTVxcbnRoaWNrbmVzcy9NU1xcbnRoaWNrby9TXFxudGhpY2tzZXRcXG50aGllZi9NXFxudGhpZXZlL0RTR1xcbnRoaWV2ZXJ5L01cXG50aGlldmluZy9NXFxudGhpZXZpc2hcXG50aGlnaC9NXFxudGhpZ2hib25lL01TXFxudGhpZ2hzXFxudGhpbWJsZS9NU1xcbnRoaW1ibGVmdWwvU01cXG50aGluL1lTUFxcbnRoaW5lXFxudGhpbmcvTVxcbnRoaW5nYW1hYm9iL1NNXFxudGhpbmdhbWFqaWcvU01cXG50aGluZ3VtYWJvYi9TXFxudGhpbmd1bW15L1NcXG50aGluZ3kvU1xcbnRoaW5rL1NSQlpHXFxudGhpbmthYmxlL1VcXG50aGlua2VyL01cXG50aGlua2luZydzXFxudGhpbm5lZFxcbnRoaW5uZXIvTVNcXG50aGlubmVzcy9NXFxudGhpbm5lc3RcXG50aGlubmluZ1xcbnRoaXJkL1NNWVxcbnRoaXJzdC9TR01EXFxudGhpcnN0aWx5XFxudGhpcnN0aW5lc3MvTVxcbnRoaXJzdHkvVFBSXFxudGhpcnRlZW4vU01IXFxudGhpcnRlZW50aC9NXFxudGhpcnRlZW50aHNcXG50aGlydGlldGgvTVxcbnRoaXJ0aWV0aHNcXG50aGlydHkvSFNNXFxudGhpc1xcbnRoaXN0bGUvTVNcXG50aGlzdGxlZG93bi9NXFxudGhpdGhlclxcbnRob1xcbnRob2xlL1NNXFxudGhvbmcvU01cXG50aG9yYWNpY1xcbnRob3JheC9NU1xcbnRob3JpdW0vTVxcbnRob3JuL1NNXFxudGhvcm5pbmVzcy9NXFxudGhvcm55L1BSVFxcbnRob3JvdWdoL1JZUFRcXG50aG9yb3VnaGJyZWQvTVNcXG50aG9yb3VnaGZhcmUvTVNcXG50aG9yb3VnaGdvaW5nXFxudGhvcm91Z2huZXNzL01cXG50aG9zZVxcbnRob3UvTVNcXG50aG91Z2hcXG50aG91Z2h0L1NNXFxudGhvdWdodGZ1bC9ZUFxcbnRob3VnaHRmdWxuZXNzL01cXG50aG91Z2h0bGVzcy9QWVxcbnRob3VnaHRsZXNzbmVzcy9NXFxudGhvdXNhbmQvTUhTXFxudGhvdXNhbmRmb2xkXFxudGhvdXNhbmR0aC9NXFxudGhvdXNhbmR0aHNcXG50aHJhbGwvU01ER1xcbnRocmFsbGRvbS9NXFxudGhyYXNoL0pNRFJTWkdcXG50aHJhc2hlci9NXFxudGhyYXNoaW5nL01cXG50aHJlYWQvU01EUlpHXFxudGhyZWFkYmFyZVxcbnRocmVhZGVyL01cXG50aHJlYWRsaWtlXFxudGhyZWFkeS9UUlxcbnRocmVhdC9TTU5YXFxudGhyZWF0ZW4vREdcXG50aHJlYXRlbmluZy9ZXFxudGhyZWUvU01cXG50aHJlZWZvbGRcXG50aHJlZXBlbmNlL01cXG50aHJlZXNjb3JlL01TXFxudGhyZWVzb21lL1NNXFxudGhyZW5vZHkvU01cXG50aHJlc2gvTURSU1pHXFxudGhyZXNoZXIvTVxcbnRocmVzaG9sZC9TTVxcbnRocmV3XFxudGhyaWNlXFxudGhyaWZ0L1NNXFxudGhyaWZ0aWx5XFxudGhyaWZ0aW5lc3MvTVxcbnRocmlmdGxlc3NcXG50aHJpZnR5L1BUUlxcbnRocmlsbC9TTURSWkdcXG50aHJpbGxlci9NXFxudGhyaWxsaW5nL1lcXG50aHJpdmUvRFNHXFxudGhyb2F0L1NNXFxudGhyb2F0aWx5XFxudGhyb2F0aW5lc3MvTVxcbnRocm9hdHkvUlRQXFxudGhyb2IvU01cXG50aHJvYmJlZFxcbnRocm9iYmluZ1xcbnRocm9lL1NNXFxudGhyb21iaVxcbnRocm9tYm9seXRpY1xcbnRocm9tYm9zZXNcXG50aHJvbWJvc2lzL01cXG50aHJvbWJvdGljXFxudGhyb21idXMvTVxcbnRocm9uZSdzXFxudGhyb25lL1NcXG50aHJvbmcvR1NNRFxcbnRocm90dGxlL0RSU01aR1xcbnRocm90dGxlci9NXFxudGhyb3VnaFxcbnRocm91Z2hvdXRcXG50aHJvdWdocHV0L01cXG50aHJvdy9TTVJaR1xcbnRocm93YXdheS9TTVxcbnRocm93YmFjay9TTVxcbnRocm93ZXIvTVxcbnRocm93blxcbnRocnVcXG50aHJ1bS9TTVxcbnRocnVtbWVkXFxudGhydW1taW5nXFxudGhydXNoL01TXFxudGhydXN0L0dTTVxcbnRocnV3YXkvTVNcXG50aHVkL01TXFxudGh1ZGRlZFxcbnRodWRkaW5nXFxudGh1Zy9NU1xcbnRodWdnZXJ5L01cXG50aHVnZ2lzaFxcbnRodWxpdW0vTVxcbnRodW1iL1NNREdcXG50aHVtYm5haWwvU01cXG50aHVtYnByaW50L1NNXFxudGh1bWJzY3Jldy9TTVxcbnRodW1idGFjay9TTVxcbnRodW1wL1NNREdcXG50aHVtcGluZy9NXFxudGh1bmRlci9aR01EUlNcXG50aHVuZGVyYm9sdC9TTVxcbnRodW5kZXJjbGFwL1NNXFxudGh1bmRlcmNsb3VkL01TXFxudGh1bmRlcmVyL01cXG50aHVuZGVyaGVhZC9TTVxcbnRodW5kZXJvdXMvWVxcbnRodW5kZXJzaG93ZXIvU01cXG50aHVuZGVyc3Rvcm0vU01cXG50aHVuZGVyc3RydWNrXFxudGh1bmRlcnlcXG50aHVuay9TXFxudGh1c1xcbnRod2Fjay9aR1NNRFJcXG50aHdhY2tlci9NXFxudGh3YXJ0L0dTTURcXG50aHlcXG50aHltZS9NXFxudGh5bWluZS9NXFxudGh5bXVzL01TXFxudGh5cm9pZC9NU1xcbnRoeXJvaWRhbFxcbnRoeXNlbGZcXG50aS9NUlpcXG50aWFyYS9TTVxcbnRpYmlhL01cXG50aWJpYWVcXG50aWJpYWxcXG50aWMvU01cXG50aWNrL01EUlpHU1xcbnRpY2tlci9NXFxudGlja2V0L0dTTURcXG50aWNraW5nL01cXG50aWNrbGUvRFJTTVpHXFxudGlja2xlci9NXFxudGlja2xpc2gvWVBcXG50aWNrbGlzaG5lc3MvTVxcbnRpY2t0YWNrdG9lL01cXG50aWNrdG9jay9NU1xcbnRpZGFsL1lcXG50aWRiaXQvU01cXG50aWRkbGVyL1NcXG50aWRkbHlcXG50aWRkbHl3aW5rL1NcXG50aWRkbHl3aW5rcy9NXFxudGlkZS9NR0pEU1xcbnRpZGVsYW5kL1NNXFxudGlkZW1hcmsvU1xcbnRpZGV3YXRlci9NU1xcbnRpZGV3YXkvTVNcXG50aWRpbHkvVVxcbnRpZGluZXNzL1VNXFxudGlkaW5ncy9NXFxudGlkeS9EUlNNVEdQXFxudGllJ3NcXG50aWUvQVVTRFxcbnRpZWJhY2svTVNcXG50aWVicmVhay9SU1pcXG50aWVicmVha2VyL01cXG50aWVwaW4vU1xcbnRpZXIvTURcXG50aWZmL01ER1NcXG50aWdlci9TTVxcbnRpZ2VyaXNoXFxudGlnaHQvU05SWVBYVFxcbnRpZ2h0ZW4vWkdEUlxcbnRpZ2h0ZW5lci9NXFxudGlnaHRmaXN0ZWRcXG50aWdodG5lc3MvTVxcbnRpZ2h0cm9wZS9NU1xcbnRpZ2h0cy9NXFxudGlnaHR3YWQvTVNcXG50aWdyZXNzL01TXFxudGlsXFxudGlsYXBpYVxcbnRpbGRlL1NNXFxudGlsZS9NWkdEUlNcXG50aWxlci9NXFxudGlsaW5nL01cXG50aWxsJ3NcXG50aWxsL0VEUlpHU1xcbnRpbGxhYmxlXFxudGlsbGFnZS9NXFxudGlsbGVyL0VNXFxudGlsdC9NREdTXFxudGltYmVyL1NNREdcXG50aW1iZXJsYW5kL01cXG50aW1iZXJsaW5lL01TXFxudGltYnJlL1NNXFxudGltYnJlbC9TTVxcbnRpbWUvTVlaR0pEUlNcXG50aW1la2VlcGVyL01TXFxudGltZWtlZXBpbmcvTVxcbnRpbWVsZXNzL1BZXFxudGltZWxlc3NuZXNzL01cXG50aW1lbGluZS9NU1xcbnRpbWVsaW5lc3MvVU1cXG50aW1lbHkvVVBSVFxcbnRpbWVvdXQvU01cXG50aW1lcGllY2UvTVNcXG50aW1lci9NXFxudGltZXNjYWxlL1NcXG50aW1lc2VydmVyL1NNXFxudGltZXNlcnZpbmcvTVxcbnRpbWVzaGFyZS9TXFxudGltZXN0YW1wL1NNRFxcbnRpbWV0YWJsZS9EU01HXFxudGltZXdvcm5cXG50aW1lem9uZVxcbnRpbWlkL1JZVFBcXG50aW1pZGl0eS9NXFxudGltaWRuZXNzL01cXG50aW1pbmcvTVxcbnRpbW9yb3VzL1BZXFxudGltb3JvdXNuZXNzL01cXG50aW1vdGh5L01cXG50aW1wYW5pL01cXG50aW1wYW5pc3QvU01cXG50aW4vU01cXG50aW5jdHVyZS9NR0RTXFxudGluZGVyL01cXG50aW5kZXJib3gvTVNcXG50aW5lL01TXFxudGluZm9pbC9NXFxudGluZy9NRFlHXFxudGluZ2UvU01cXG50aW5nZWluZ1xcbnRpbmdsZS9EU01HSlxcbnRpbmdsaW5nL01cXG50aW5pbmVzcy9NXFxudGlua2VyL1pHU01EUlxcbnRpbmtlcmVyL01cXG50aW5rbGUvRFNNR1xcbnRpbm5lZFxcbnRpbm5pbmVzcy9NXFxudGlubmluZ1xcbnRpbm5pdHVzL01cXG50aW5ueS9QUlRcXG50aW5wbGF0ZS9NXFxudGlucG90XFxudGluc2VsL0dTTURcXG50aW5zbWl0aC9NXFxudGluc21pdGhzXFxudGludC9NREdTXFxudGludGlubmFidWxhdGlvbi9NU1xcbnRpbnR5cGUvTVNcXG50aW53YXJlL01cXG50aW55L1JUUFxcbnRpcC9TTVxcbnRpcHBlZFxcbnRpcHBlci9TTVxcbnRpcHBldC9TTVxcbnRpcHBleC9HRFNcXG50aXBwaW5nXFxudGlwcGxlL0RSU01aR1xcbnRpcHBsZXIvTVxcbnRpcHNpbHlcXG50aXBzaW5lc3MvTVxcbnRpcHN0ZXIvTVNcXG50aXBzeS9SUFRcXG50aXB0b2UvRFNNXFxudGlwdG9laW5nXFxudGlwdG9wL1NNXFxudGlyYWRlL1NNXFxudGlyYW1pc3UvTVNcXG50aXJlJ3NcXG50aXJlL0FHRFNcXG50aXJlZC9QUllUXFxudGlyZWRuZXNzL01cXG50aXJlbGVzcy9ZUFxcbnRpcmVsZXNzbmVzcy9NXFxudGlyZXNvbWUvUFlcXG50aXJlc29tZW5lc3MvTVxcbnRpc3N1ZS9TTVxcbnRpdC9TTVxcbnRpdGFuL1NNXFxudGl0YW5pY1xcbnRpdGFuaXVtL01cXG50aXRjaC9TXFxudGl0Y2h5XFxudGl0aGUvRFJTTVpHXFxudGl0aGVyL01cXG50aXRpYW4vTVxcbnRpdGlsbGF0ZS9EU0dOXFxudGl0aWxsYXRpbmcvWVxcbnRpdGlsbGF0aW9uL01cXG50aXRpdmF0ZS9EU0dOXFxudGl0aXZhdGlvbi9NXFxudGl0bGUvRFNNR1xcbnRpdGxlZC9VXFxudGl0bGVob2xkZXIvTVNcXG50aXRsaXN0L01TXFxudGl0bWljZVxcbnRpdG1vdXNlL01cXG50aXR0ZXIvU0dNRFxcbnRpdHRsZS9TTVxcbnRpdHR5L1NcXG50aXR1bGFyXFxudGl6elxcbnRpenp5L1NNXFxudG5cXG50bnBrXFxudG8vSVVcXG50b2FkL01TXFxudG9hZHN0b29sL01TXFxudG9hZHkvRFNNR1xcbnRvYWR5aXNtL01cXG50b2FzdC9TTURSWkdcXG50b2FzdGVyL01cXG50b2FzdG1hc3Rlci9TTVxcbnRvYXN0bWlzdHJlc3MvTVNcXG50b2FzdHkvVFJTXFxudG9iYWNjby9NU1xcbnRvYmFjY29uaXN0L1NNXFxudG9ib2dnYW4vWkdTTURSXFxudG9ib2dnYW5lci9NXFxudG9ib2dnYW5pbmcvTVxcbnRvY2NhdGEvU1xcbnRvY29waGVyb2xcXG50b2NzaW4vU01cXG50b2RheS9NXFxudG9kZGxlL0RSU01aR1xcbnRvZGRsZXIvTVxcbnRvZGR5L1NNXFxudG9lL0RTTVxcbnRvZWNhcC9TTVxcbnRvZWhvbGQvTVNcXG50b2VpbmdcXG50b2VuYWlsL01TXFxudG9lcmFnL1NcXG50b2ZmL1NcXG50b2ZmZWUvU01cXG50b2Z1L01cXG50b2cvU01cXG50b2dhL01EU1xcbnRvZ2V0aGVyL1BcXG50b2dldGhlcm5lc3MvTVxcbnRvZ2dlZFxcbnRvZ2dpbmdcXG50b2dnbGUvRFNNR1xcbnRvZ3MvTVxcbnRvaWwvTURSWkdTXFxudG9pbGVyL01cXG50b2lsZXQvTURHU1xcbnRvaWxldHJ5L1NNXFxudG9pbGV0dGUvTVxcbnRvaWxzb21lXFxudG9rZS9NR0RTXFxudG9rZW4vU01cXG50b2tlbmlzbS9NXFxudG9sZC9BVVxcbnRvbGUvTVxcbnRvbGVyYWJsZS9JXFxudG9sZXJhYmx5L0lcXG50b2xlcmFuY2UvSU1cXG50b2xlcmFuY2VzXFxudG9sZXJhbnQvSVlcXG50b2xlcmF0ZS9HTkRTXFxudG9sZXJhdGlvbi9NXFxudG9sbC9NREdTXFxudG9sbGJvb3RoL01cXG50b2xsYm9vdGhzXFxudG9sbGdhdGUvU01cXG50b2xsd2F5L1NNXFxudG9sdWVuZS9NXFxudG9tL1NNXFxudG9tYWhhd2svU0dNRFxcbnRvbWF0by9NXFxudG9tYXRvZXNcXG50b21iL01ER1NcXG50b21ib2xhL1NcXG50b21ib3kvTVNcXG50b21ib3lpc2hcXG50b21ic3RvbmUvTVNcXG50b21jYXQvTVNcXG50b21lL01TXFxudG9tZm9vbGVyeS9TTVxcbnRvbW9ncmFwaGljXFxudG9tb2dyYXBoeS9NXFxudG9tb3Jyb3cvTVNcXG50b210aXQvTVNcXG50b24vU01cXG50b25hbC9ZXFxudG9uYWxpdHkvU01cXG50b25lJ3NcXG50b25lL0laR0RSU1xcbnRvbmVhcm0vU01cXG50b25lbGVzcy9ZXFxudG9uZXIvSU1cXG50b25nL01ER1NcXG50b25ndWUvTUdEU1xcbnRvbmd1ZWxlc3NcXG50b25pYy9TTVxcbnRvbmlnaHQvTVxcbnRvbm5hZ2UvU01cXG50b25uZS9TTVxcbnRvbnNpbC9NU1xcbnRvbnNpbGxlY3RvbXkvU01cXG50b25zaWxsaXRpcy9NXFxudG9uc29yaWFsXFxudG9uc3VyZS9EU01HXFxudG9ueS9SVFxcbnRvb1xcbnRvb2svQVxcbnRvb2wnc1xcbnRvb2wvQURHU1xcbnRvb2xiYXIvU01cXG50b29sYm94L01TXFxudG9vbGtpdFxcbnRvb2xtYWtlci9NU1xcbnRvb3QvTURSWkdTXFxudG9vdGVyL01cXG50b290aC9NRFxcbnRvb3RoYWNoZS9NU1xcbnRvb3RoYnJ1c2gvTVNcXG50b290aGlseVxcbnRvb3RobGVzc1xcbnRvb3RocGFzdGUvU01cXG50b290aHBpY2svU01cXG50b290aHNvbWVcXG50b290aHkvUlRcXG50b290bGUvR0RTXFxudG9vdHNpZS9TXFxudG9wL1NNXFxudG9wYXovTVNcXG50b3Bjb2F0L1NNXFxudG9wZHJlc3NpbmcvU01cXG50b3BlZS9TXFxudG9wZmxpZ2h0XFxudG9waVxcbnRvcGlhcnkvTVxcbnRvcGljL1NNXFxudG9waWNhbC9ZXFxudG9waWNhbGl0eS9NXFxudG9wa25vdC9TTVxcbnRvcGxlc3NcXG50b3BtYXN0L1NNXFxudG9wbW9zdFxcbnRvcG5vdGNoXFxudG9wb2dyYXBoZXIvU01cXG50b3BvZ3JhcGhpY1xcbnRvcG9ncmFwaGljYWwvWVxcbnRvcG9ncmFwaHkvU01cXG50b3BvbG9naWNhbC9ZXFxudG9wb2xvZ3lcXG50b3BwZWRcXG50b3BwZXIvTVNcXG50b3BwaW5nL1NNXFxudG9wcGxlL0dEU1xcbnRvcHNhaWwvU01cXG50b3BzaWRlL1NNXFxudG9wc29pbC9NXFxudG9wc3Bpbi9NXFxudG9xdWUvU01cXG50b3IvU01cXG50b3JjaC9HTURTXFxudG9yY2hiZWFyZXIvTVNcXG50b3JjaGxpZ2h0L01cXG50b3JlXFxudG9yZWFkb3IvTVNcXG50b3JtZW50L1NNREdcXG50b3JtZW50aW5nL1lcXG50b3JtZW50b3IvTVNcXG50b3JuXFxudG9ybmFkby9NXFxudG9ybmFkb2VzXFxudG9ycGVkby9HTURcXG50b3JwZWRvZXNcXG50b3JwaWQvWVxcbnRvcnBpZGl0eS9NXFxudG9ycG9yL01cXG50b3JxdWUvTUdEU1xcbnRvcnJlbnQvU01cXG50b3JyZW50aWFsXFxudG9ycmlkL1lQXFxudG9ycmlkaXR5L01cXG50b3JyaWRuZXNzL01cXG50b3JzaW9uL01cXG50b3JzaW9uYWxcXG50b3Jzby9TTVxcbnRvcnQnc1xcbnRvcnQvRkVBU1xcbnRvcnRlL1NNXFxudG9ydGVsbGluaS9NXFxudG9ydGlsbGEvTVNcXG50b3J0b2lzZS9NU1xcbnRvcnRvaXNlc2hlbGwvU01cXG50b3J0b25pL01cXG50b3J0dW91cy9QWVxcbnRvcnR1b3VzbmVzcy9NXFxudG9ydHVyZS9EUlNNWkdcXG50b3J0dXJlci9NXFxudG9ydHVyb3VzXFxudG9ydXNcXG50b3NoXFxudG9zcy9NRFJTWkdcXG50b3NzdXAvTVNcXG50b3QvU0dNRFxcbnRvdGFsL0dTTURZXFxudG90YWxpdGFyaWFuL1NNXFxudG90YWxpdGFyaWFuaXNtL01cXG50b3RhbGl0eS9TTVxcbnRvdGFsaXphdG9yL1NNXFxudG90ZS9NU1xcbnRvdGVtL1NNXFxudG90ZW1pY1xcbnRvdHRlZFxcbnRvdHRlci9aR01EUlNcXG50b3R0ZXJlci9NXFxudG90dGluZ1xcbnRvdWNhbi9NU1xcbnRvdWNoL0FHTURTXFxudG91Y2hkb3duL1NNXFxudG91Y2hlL0JKXFxudG91Y2hlZC9VXFxudG91Y2hpbHlcXG50b3VjaGluZXNzL01cXG50b3VjaGluZy9ZXFxudG91Y2hsaW5lL1NcXG50b3VjaHBhcGVyL1NcXG50b3VjaHNjcmVlbi9NU1xcbnRvdWNoc3RvbmUvTVNcXG50b3VjaHkvUlBUXFxudG91Z2gvWFRHTUROUllQXFxudG91Z2hlbi9aR0RSXFxudG91Z2hlbmVyL01cXG50b3VnaGllL1NNXFxudG91Z2huZXNzL01cXG50b3VnaHNcXG50b3VwZWUvTVNcXG50b3VyL0NGU0dETVxcbnRvdXJpc20vTVxcbnRvdXJpc3QvTVNcXG50b3VyaXN0aWNcXG50b3VyaXN0eVxcbnRvdXJtYWxpbmUvTVxcbnRvdXJuYW1lbnQvU01cXG50b3VybmV5L01TXFxudG91cm5pcXVldC9NU1xcbnRvdXNsZS9HRFNcXG50b3V0L01ER1NcXG50b3cvU1pHTURSXFxudG93YXJkL1NcXG50b3dib2F0L01TXFxudG93ZWwvSkdTTURcXG50b3dlbGV0dGUvU01cXG50b3dlbGluZy9NXFxudG93ZXIvR01EXFxudG93aGVhZC9NRFNcXG50b3doZWUvTVNcXG50b3dsaW5lL01TXFxudG93bi9NU1xcbnRvd25lZS9TXFxudG93bmhvdXNlL01TXFxudG93bmllL01TXFxudG93bnNmb2xrL01cXG50b3duc2hpcC9NU1xcbnRvd25zbWFuL01cXG50b3duc21lblxcbnRvd25zcGVvcGxlL01cXG50b3duc3dvbWFuL01cXG50b3duc3dvbWVuXFxudG93cGF0aC9NXFxudG93cGF0aHNcXG50b3dyb3BlL1NNXFxudG94ZW1pYS9NXFxudG94aWNcXG50b3hpY2l0eS9TTVxcbnRveGljb2xvZ2ljYWxcXG50b3hpY29sb2dpc3QvU01cXG50b3hpY29sb2d5L01cXG50b3hpbi9TTVxcbnRveS9TR01EXFxudG95Ym95L1NcXG50clxcbnRyYWJlY3VsYVxcbnRyYWJlY3VsYXJcXG50cmFiZWN1bGVcXG50cmFjZS9KRFJTTVpHXFxudHJhY2VhYmlsaXR5XFxudHJhY2VhYmxlL1VcXG50cmFjZXIvTVxcbnRyYWNlcnkvU01cXG50cmFjaGVhL01cXG50cmFjaGVhZVxcbnRyYWNoZWFsXFxudHJhY2hlb3RvbXkvU01cXG50cmFjaW5nL01cXG50cmFjay9aR1NNRFJcXG50cmFja2JhbGwvU01cXG50cmFja2VyL01cXG50cmFja2xlc3NcXG50cmFja3N1aXQvU1xcbnRyYWN0J3NcXG50cmFjdC9DRUtGQVNcXG50cmFjdGFiaWxpdHkvSU1cXG50cmFjdGFibGUvSVxcbnRyYWN0YWJseS9JXFxudHJhY3Rpb24vRUZBQ0tNXFxudHJhY3Rvci9GQ0tNU1xcbnRyYWRcXG50cmFkZS9KRFJTTVpHXFxudHJhZGVtYXJrL1NHTURcXG50cmFkZXIvTVxcbnRyYWRlc21hbi9NXFxudHJhZGVzbWVuXFxudHJhZGVzcGVvcGxlL01cXG50cmFkZXN3b21hbi9NXFxudHJhZGVzd29tZW5cXG50cmFkaW5nL01cXG50cmFkaXRpb24vTVNcXG50cmFkaXRpb25hbC9ZXFxudHJhZGl0aW9uYWxpc20vTVxcbnRyYWRpdGlvbmFsaXN0L1NNXFxudHJhZHVjZS9EUlNaR1xcbnRyYWR1Y2VyL01cXG50cmFmZmljL1NNXFxudHJhZmZpY2tlZFxcbnRyYWZmaWNrZXIvU01cXG50cmFmZmlja2luZy9NXFxudHJhZ2VkaWFuL1NNXFxudHJhZ2VkaWVubmUvTVNcXG50cmFnZWR5L1NNXFxudHJhZ2ljXFxudHJhZ2ljYWxseVxcbnRyYWdpY29tZWR5L1NNXFxudHJhZ2ljb21pY1xcbnRyYWlsL1pHU01EUlxcbnRyYWlsYmxhemVyL01TXFxudHJhaWxibGF6aW5nL01cXG50cmFpbGVyL01cXG50cmFpbi9aR1NNRFJCXFxudHJhaW5lZC9VXFxudHJhaW5lZS9TTVxcbnRyYWluZXIvTVxcbnRyYWluaW5nL01cXG50cmFpbmxvYWQvTVNcXG50cmFpbm1hbi9NXFxudHJhaW5tZW5cXG50cmFpbnNwb3R0ZXIvU1xcbnRyYWluc3BvdHRpbmdcXG50cmFpcHNlL0RTTUdcXG50cmFpdC9TTVxcbnRyYWl0b3IvU01cXG50cmFpdG9yb3VzL1lcXG50cmFqZWN0b3J5L1NNXFxudHJhbS9NU1xcbnRyYW1jYXIvU1xcbnRyYW1saW5lc1xcbnRyYW1tZWRcXG50cmFtbWVsL1NHTURcXG50cmFtbWVsZWQvVVxcbnRyYW1taW5nXFxudHJhbXAvWkdTTURSXFxudHJhbXBlci9NXFxudHJhbXBsZS9EUlNNWkdcXG50cmFtcGxlci9NXFxudHJhbXBvbGluZS9NR0RTXFxudHJhbXdheS9TXFxudHJhbmNlL01TXFxudHJhbmNoZS9TXFxudHJhbnF1aWwvUllUXFxudHJhbnF1aWxpdHkvTVxcbnRyYW5xdWlsaXplL1pHRFJTXFxudHJhbnF1aWxpemVyL01cXG50cmFucy9JXFxudHJhbnNhY3QvREdTXFxudHJhbnNhY3Rpb24vU01cXG50cmFuc2FjdGlvbmFsXFxudHJhbnNhY3Rvci9NU1xcbnRyYW5zYXRsYW50aWNcXG50cmFuc2NlaXZlci9TTVxcbnRyYW5zY2VuZC9HU0RcXG50cmFuc2NlbmRlbmNlL01cXG50cmFuc2NlbmRlbnRcXG50cmFuc2NlbmRlbnRhbC9ZXFxudHJhbnNjZW5kZW50YWxpc20vTVxcbnRyYW5zY2VuZGVudGFsaXN0L1NNXFxudHJhbnNjb250aW5lbnRhbFxcbnRyYW5zY3JpYmUvWkdEUlNcXG50cmFuc2NyaWJlci9NXFxudHJhbnNjcmlwdC9NU1xcbnRyYW5zY3JpcHRpb24vU01cXG50cmFuc2R1Y2VyL01TXFxudHJhbnNkdWN0aW9uXFxudHJhbnNlY3QvRFNHXFxudHJhbnNlcHQvTVNcXG50cmFuc2Zlci9NQlNcXG50cmFuc2ZlcmFsL01TXFxudHJhbnNmZXJlbmNlL01cXG50cmFuc2ZlcnJlZFxcbnRyYW5zZmVycmluZ1xcbnRyYW5zZmlndXJhdGlvbi9NXFxudHJhbnNmaWd1cmUvR0RTXFxudHJhbnNmaW5pdGVcXG50cmFuc2ZpeC9EU0dcXG50cmFuc2Zvcm0vQlNaR01EUlxcbnRyYW5zZm9ybWF0aW9uL1NNXFxudHJhbnNmb3JtYXRpb25hbFxcbnRyYW5zZm9ybWVyL01cXG50cmFuc2Z1c2UvRFNYR05cXG50cmFuc2Z1c2lvbi9NXFxudHJhbnNnZW5kZXIvU1xcbnRyYW5zZ2VuaWNcXG50cmFuc2dyZXNzL0dEU1xcbnRyYW5zZ3Jlc3Npb24vU01cXG50cmFuc2dyZXNzb3IvU01cXG50cmFuc2llbmNlL01cXG50cmFuc2llbmN5L01cXG50cmFuc2llbnQvU01ZXFxudHJhbnNpc3Rvci9TTVxcbnRyYW5zaXN0b3JpemUvRFNHXFxudHJhbnNpdC9TR01EXFxudHJhbnNpdGlvbi9HU01EXFxudHJhbnNpdGlvbmFsL1lcXG50cmFuc2l0aXZlL0lTTVlcXG50cmFuc2l0aXZlbmVzcy9NXFxudHJhbnNpdGl2aXR5L01cXG50cmFuc2l0b3J5XFxudHJhbnNsXFxudHJhbnNsYXRhYmxlL1VcXG50cmFuc2xhdGUvRFNHTkJYXFxudHJhbnNsYXRlZC9VXFxudHJhbnNsYXRpb24vTVxcbnRyYW5zbGF0b3IvU01cXG50cmFuc2xpdGVyYXRlL0RTR05YXFxudHJhbnNsaXRlcmF0aW9uL01cXG50cmFuc2xvY2F0aW9uXFxudHJhbnNsdWNlbmNlL01cXG50cmFuc2x1Y2VuY3kvTVxcbnRyYW5zbHVjZW50L1lcXG50cmFuc21pZ3JhdGUvR05EU1xcbnRyYW5zbWlncmF0aW9uL01cXG50cmFuc21pc3NpYmxlXFxudHJhbnNtaXNzaW9uL01TXFxudHJhbnNtaXQvU1xcbnRyYW5zbWl0dGFibGVcXG50cmFuc21pdHRhbC9NXFxudHJhbnNtaXR0YW5jZS9NXFxudHJhbnNtaXR0ZWRcXG50cmFuc21pdHRlci9TTVxcbnRyYW5zbWl0dGluZ1xcbnRyYW5zbW9ncmlmaWNhdGlvbi9NXFxudHJhbnNtb2dyaWZ5L0RTTkdcXG50cmFuc211dGF0aW9uL1NNXFxudHJhbnNtdXRlL0JEU0dcXG50cmFuc25hdGlvbmFsL01TXFxudHJhbnNvY2VhbmljXFxudHJhbnNvbS9TTVxcbnRyYW5zcGFjaWZpY1xcbnRyYW5zcGFyZW5jeS9TTVxcbnRyYW5zcGFyZW50L1lcXG50cmFuc3Bob2JpYS9NXFxudHJhbnNwaG9iaWNcXG50cmFuc3BpcmF0aW9uL01cXG50cmFuc3BpcmUvRFNHXFxudHJhbnNwbGFudC9NREdTXFxudHJhbnNwbGFudGF0aW9uL01cXG50cmFuc3BvbGFyXFxudHJhbnNwb25kZXIvU01cXG50cmFuc3BvcnQvQlNaR01EUlxcbnRyYW5zcG9ydGF0aW9uL01cXG50cmFuc3BvcnRlci9NXFxudHJhbnNwb3NlL0RTR1xcbnRyYW5zcG9zaXRpb24vTVNcXG50cmFuc3NleHVhbC9TTVxcbnRyYW5zc2V4dWFsaXNtL01cXG50cmFuc3NoaXAvU0xcXG50cmFuc3NoaXBtZW50L01cXG50cmFuc3NoaXBwZWRcXG50cmFuc3NoaXBwaW5nXFxudHJhbnN1YnN0YW50aWF0aW9uL01cXG50cmFuc3ZlcnNhbFxcbnRyYW5zdmVyc2UvTVlTXFxudHJhbnN2ZXN0aXNtL01cXG50cmFuc3Zlc3RpdGUvTVNcXG50cmFwL01TXFxudHJhcGRvb3IvTVNcXG50cmFwZXplL1NNXFxudHJhcGV6aXVtL1NNXFxudHJhcGV6b2lkL1NNXFxudHJhcGV6b2lkYWxcXG50cmFwcGFibGVcXG50cmFwcGVkXFxudHJhcHBlci9TTVxcbnRyYXBwaW5nL1NcXG50cmFwcGluZ3MvTVxcbnRyYXBzaG9vdGluZy9NXFxudHJhc2gvR01EU1xcbnRyYXNoY2FuL01TXFxudHJhc2hpbmVzcy9NXFxudHJhc2h5L1JQVFxcbnRyYXVtYS9NU1xcbnRyYXVtYXRpY1xcbnRyYXVtYXRpY2FsbHlcXG50cmF1bWF0aXplL0dEU1xcbnRyYXZhaWwvU0dNRFxcbnRyYXZlbC9NRFJTWkdKXFxudHJhdmVsZWQvVVxcbnRyYXZlbGVyL01cXG50cmF2ZWxpbmcvTVxcbnRyYXZlbG9ndWUvTVNcXG50cmF2ZXJzYWwvU01cXG50cmF2ZXJzZS9EU01HXFxudHJhdmVzdHkvR0RTTVxcbnRyYXdsL1pHU01EUlxcbnRyYXdsZXIvTVxcbnRyYXkvTVNcXG50cmVhY2hlcm91cy9QWVxcbnRyZWFjaGVyb3VzbmVzcy9NXFxudHJlYWNoZXJ5L1NNXFxudHJlYWNsZS9NXFxudHJlYWNseVxcbnRyZWFkL0FHU01cXG50cmVhZGxlL0RTTUdcXG50cmVhZG1pbGwvTVNcXG50cmVhc1xcbnRyZWFzb24vQk1cXG50cmVhc29ub3VzXFxudHJlYXN1cmUvRFJTTVpHXFxudHJlYXN1cmVyL01cXG50cmVhc3VyeS9TTVxcbnRyZWF0L0FHU01EXFxudHJlYXRhYmxlXFxudHJlYXRlZC9VXFxudHJlYXRpc2UvU01cXG50cmVhdG1lbnQvTVNcXG50cmVhdHkvU01cXG50cmVibGUvTUdEU1xcbnRyZWUvTURTXFxudHJlZWluZ1xcbnRyZWVsZXNzXFxudHJlZWxpa2VcXG50cmVlbGluZVxcbnRyZWV0b3AvU01cXG50cmVmb2lsL1NNXFxudHJlay9NU1xcbnRyZWtrZWRcXG50cmVra2VyL1NNXFxudHJla2tpbmdcXG50cmVsbGlzL0dNRFNcXG50cmVtYXRvZGUvTVNcXG50cmVtYmxlL0RTTUdcXG50cmVtZW5kb3VzL1lcXG50cmVtb2xvL1NNXFxudHJlbW9yL01TXFxudHJlbXVsb3VzL1BZXFxudHJlbXVsb3VzbmVzcy9NXFxudHJlbmNoJ3NcXG50cmVuY2gvQURTR1xcbnRyZW5jaGFuY3kvTVxcbnRyZW5jaGFudC9ZXFxudHJlbmNoZXIvTVNcXG50cmVuY2hlcm1hbi9NXFxudHJlbmNoZXJtZW5cXG50cmVuZC9HU01EXFxudHJlbmRpbHlcXG50cmVuZGluZXNzL01cXG50cmVuZHNldHRlci9TXFxudHJlbmRzZXR0aW5nXFxudHJlbmR5L1JTTVBUXFxudHJlcGlkYXRpb24vTVxcbnRyZXNwYXNzL01EUlNaR1xcbnRyZXNwYXNzZXIvTVxcbnRyZXNzL0VNU1xcbnRyZXN0bGUvTVNcXG50cmV3c1xcbnRyZXkvTVNcXG50cmlhZC9TTVxcbnRyaWFnZS9NRFxcbnRyaWFsL0FTTVxcbnRyaWFsZWRcXG50cmlhbGluZ1xcbnRyaWFuZ2xlL1NNXFxudHJpYW5ndWxhci9ZXFxudHJpYW5ndWxhdGUvR05EU1xcbnRyaWFuZ3VsYXRpb24vTVxcbnRyaWF0aGxldGUvU1xcbnRyaWF0aGxvbi9TTVxcbnRyaWJhbFxcbnRyaWJhbGlzbS9NXFxudHJpYmUvU01cXG50cmliZXNtYW4vTVxcbnRyaWJlc21lblxcbnRyaWJlc3dvbWFuL01cXG50cmliZXN3b21lblxcbnRyaWJ1bGF0aW9uL1NNXFxudHJpYnVuYWwvU01cXG50cmlidW5lL01TXFxudHJpYnV0YXJ5L1NNXFxudHJpYnV0ZSdzXFxudHJpYnV0ZS9GU1xcbnRyaWNlL01cXG50cmljZW50ZW5uaWFsL01TXFxudHJpY2Vwcy9NU1xcbnRyaWNlcmF0b3BzL01cXG50cmljaGluYS9NXFxudHJpY2hpbmFlXFxudHJpY2hpbm9zaXMvTVxcbnRyaWNrL0dTTURcXG50cmlja2VyeS9NXFxudHJpY2tpbHlcXG50cmlja2luZXNzL01cXG50cmlja2xlL01HRFNcXG50cmlja3N0ZXIvU01cXG50cmlja3kvVFJQXFxudHJpY29sb3IvU01cXG50cmljeWNsZS9TTVxcbnRyaWRlbnQvTVNcXG50cmllZC9VXFxudHJpZW5uaWFsL01ZU1xcbnRyaWVyL1NNXFxudHJpZmVjdGEvU01cXG50cmlmbGUvTVpHRFJTXFxudHJpZmxlci9NXFxudHJpZm9jYWxzL01cXG50cmlnL01cXG50cmlnZ2VyL01EU0dcXG50cmlnbHljZXJpZGUvTVNcXG50cmlnb25vbWV0cmljXFxudHJpZ29ub21ldHJpY2FsXFxudHJpZ29ub21ldHJ5L01cXG50cmlrZS9TTVxcbnRyaWxhdGVyYWwvU1xcbnRyaWxieS9TTVxcbnRyaWxsL0dTTURcXG50cmlsbGlvbi9TTUhcXG50cmlsbGlvbnRoL01cXG50cmlsbGlvbnRoc1xcbnRyaWxsaXVtL01cXG50cmlsb2JpdGUvU01cXG50cmlsb2d5L1NNXFxudHJpbS9QTVlTXFxudHJpbWFyYW4vTVNcXG50cmltZXN0ZXIvU01cXG50cmltbWVkL1VcXG50cmltbWVyL1NNXFxudHJpbW1lc3RcXG50cmltbWluZy9TTVxcbnRyaW1taW5ncy9NXFxudHJpbW5lc3MvTVxcbnRyaW1vbnRobHlcXG50cmluaXRyb3RvbHVlbmUvTVxcbnRyaW5pdHkvU01cXG50cmlua2V0L1NNXFxudHJpby9NU1xcbnRyaXAvTVlTXFxudHJpcGFydGl0ZVxcbnRyaXBlL01cXG50cmlwbGUvTUdEU1xcbnRyaXBsZXQvU01cXG50cmlwbGV4L01TXFxudHJpcGxpY2F0ZS9NR0RTXFxudHJpcG9kL01TXFxudHJpcG9kYWxcXG50cmlwb3NcXG50cmlwcGVkXFxudHJpcHBlci9TTVxcbnRyaXBwaW5nXFxudHJpcHR5Y2gvTVxcbnRyaXB0eWNoc1xcbnRyaXB3aXJlL1NcXG50cmlyZW1lL1NNXFxudHJpc2VjdC9TREdcXG50cmlzZWN0aW9uL01cXG50cml0ZS9GUFlUXFxudHJpdGVuZXNzL0ZNXFxudHJpdGVyXFxudHJpdGl1bS9NXFxudHJpdW1waC9HTURcXG50cml1bXBoYWxcXG50cml1bXBoYWxpc21cXG50cml1bXBoYWxpc3RcXG50cml1bXBoYW50L1lcXG50cml1bXBoc1xcbnRyaXVtdmlyL01TXFxudHJpdW12aXJhdGUvU01cXG50cml2YWxlbnRcXG50cml2ZXQvTVNcXG50cml2aWEvTVxcbnRyaXZpYWwvWVxcbnRyaXZpYWxpdHkvU01cXG50cml2aWFsaXphdGlvbi9NXFxudHJpdmlhbGl6ZS9HRFNcXG50cml2aXVtL01cXG50cm9jaGFpY1xcbnRyb2NoZWUvU01cXG50cm9kL0FVXFxudHJvZGRlbi9BXFxudHJvZ2xvZHl0ZS9TTVxcbnRyb2lrYS9NU1xcbnRyb2xsL1NHTURcXG50cm9sbGV5L1NNXFxudHJvbGxleWJ1cy9NU1xcbnRyb2xsb3AvU01cXG50cm9tYm9uZS9NU1xcbnRyb21ib25pc3QvTVNcXG50cm9tcC9TR0RcXG50cm9uL1NcXG50cm9vcC9TWkdNRFJcXG50cm9vcGVyL01cXG50cm9vcHNoaXAvTVNcXG50cm9wZS9TTVxcbnRyb3BoeS9TTVxcbnRyb3BpYy9NU1xcbnRyb3BpY2FsL1lcXG50cm9waWNzL01cXG50cm9waXNtL1NNXFxudHJvcG9zcGhlcmUvU01cXG50cm90L01TXFxudHJvdGgvTVxcbnRyb3R0ZWRcXG50cm90dGVyL1NNXFxudHJvdHRpbmdcXG50cm91YmFkb3VyL01TXFxudHJvdWJsZS9EU01HXFxudHJvdWJsZWQvVVxcbnRyb3VibGVtYWtlci9NU1xcbnRyb3VibGVzaG9vdC9EUlpHU1xcbnRyb3VibGVzaG9vdGVyL01cXG50cm91Ymxlc2hvb3RpbmcvTVxcbnRyb3VibGVzaG90XFxudHJvdWJsZXNvbWUvWVxcbnRyb3VnaC9NXFxudHJvdWdoc1xcbnRyb3VuY2UvRFJTWkdcXG50cm91bmNlci9NXFxudHJvdXBlL01aR0RSU1xcbnRyb3VwZXIvTVxcbnRyb3VzZXIvU01cXG50cm91c2Vycy9NXFxudHJvdXNzZWF1L01cXG50cm91c3NlYXV4XFxudHJvdXQvU01cXG50cm92ZS9TTVxcbnRyb3cvRFNHXFxudHJvd2VsL01EU0dcXG50cm95L1NcXG50cnVhbmN5L01cXG50cnVhbnQvR01EU1xcbnRydWNlL1NNXFxudHJ1Y2svU1pHTURSXFxudHJ1Y2tlci9NXFxudHJ1Y2tpbmcvTVxcbnRydWNrbGUvTUdEU1xcbnRydWNrbG9hZC9TTVxcbnRydWN1bGVuY2UvTVxcbnRydWN1bGVudC9ZXFxudHJ1ZGdlL01HRFNcXG50cnVlL01UR0RSU1xcbnRydWVsb3ZlL1NNXFxudHJ1ZmZsZS9NU1xcbnRydWcvU1xcbnRydWlzbS9NU1xcbnRydWx5L1VcXG50cnVtcC9TR01EXFxudHJ1bXBlcnkvTVxcbnRydW1wZXQvWkdNRFJTXFxudHJ1bXBldGVyL01cXG50cnVuY2F0ZS9HTkRTXFxudHJ1bmNhdGlvbi9NXFxudHJ1bmNoZW9uL1NNXFxudHJ1bmRsZS9NWkdEUlNcXG50cnVuZGxlci9NXFxudHJ1bmsvU0dNXFxudHJ1c3MvR01EU1xcbnRydXN0L0VTR01EXFxudHJ1c3RlZS9NU1xcbnRydXN0ZWVzaGlwL1NNXFxudHJ1c3RmdWwvRVlcXG50cnVzdGZ1bG5lc3MvTVxcbnRydXN0aW5nL1lcXG50cnVzdHdvcnRoaW5lc3MvTVxcbnRydXN0d29ydGh5L1RQUlxcbnRydXN0eS9UUlNNXFxudHJ1dGgvWk1SXFxudHJ1dGhlci9NXFxudHJ1dGhmdWwvVVlQXFxudHJ1dGhmdWxuZXNzL1VNXFxudHJ1dGhpbmVzc1xcbnRydXRocy9VXFxudHJ5J3NcXG50cnkvQUdEU1xcbnRyeWluZy9ZXFxudHJ5b3V0L1NNXFxudHJ5cHRvcGhhblxcbnRyeXN0L1NNREdcXG50c2FyaXN0c1xcbnRzZXRzZS9NU1xcbnRzcFxcbnRzdW5hbWkvU01cXG50dHlzXFxudHViL1NaR01EUlxcbnR1YmEvTVNcXG50dWJhbFxcbnR1YmJ5L1RSXFxudHViZS9NU1xcbnR1YmVsZXNzL01cXG50dWJlci9NXFxudHViZXJjbGUvU01cXG50dWJlcmN1bGFyXFxudHViZXJjdWxpbi9NXFxudHViZXJjdWxvc2lzL01cXG50dWJlcmN1bG91c1xcbnR1YmVyb3NlL01cXG50dWJlcm91c1xcbnR1YmZ1bC9NU1xcbnR1YmluZy9NXFxudHVidWxhclxcbnR1YnVsZS9NU1xcbnR1Y2svTURSU1pHXFxudHVja2VyL01ER1xcbnR1ZnQvTURSU1pHXFxudHVmdGVyL01cXG50dWcvU01cXG50dWdib2F0L01TXFxudHVnZ2VkXFxudHVnZ2luZ1xcbnR1aXRpb24vSU1cXG50dWxhcmVtaWEvTVxcbnR1bGlwL1NNXFxudHVsbGUvTVxcbnR1bS9TXFxudHVtYmxlL0RSU01aR1xcbnR1bWJsZWRvd25cXG50dW1ibGVyL01cXG50dW1ibGV3ZWVkL1NNXFxudHVtYmxpbmcvTVxcbnR1bWJyZWwvU01cXG50dW1lc2NlbmNlL01cXG50dW1lc2NlbnRcXG50dW1pZFxcbnR1bWlkaXR5L01cXG50dW1teS9TTVxcbnR1bW9yL1NNXFxudHVtb3JvdXNcXG50dW11bHQvU01cXG50dW11bHR1b3VzL1lcXG50dW4vU1pHTURSXFxudHVuYS9NU1xcbnR1bmRyYS9TTVxcbnR1bmUvTVNcXG50dW5lZnVsL1lQXFxudHVuZWZ1bG5lc3MvTVxcbnR1bmVsZXNzL1lcXG50dW5lci9NXFxudHVuZXVwL1NNXFxudHVuZ3N0ZW4vTVxcbnR1bmljL1NNXFxudHVubmVsL0pTTURSWkdcXG50dW5uZWxlci9NXFxudHVubnkvU01cXG50dXBsZS9TXFxudHVwcGVuY2VcXG50dXBwZW5ueVxcbnR1cXVlL1NNXFxudHVyYmFuL1NNRFxcbnR1cmJpZFxcbnR1cmJpZGl0eS9NXFxudHVyYmluZS9TTVxcbnR1cmJvL1NNXFxudHVyYm9jaGFyZ2UvWkdEUlNcXG50dXJib2NoYXJnZXIvTVxcbnR1cmJvZmFuL1NNXFxudHVyYm9qZXQvU01cXG50dXJib3Byb3AvU01cXG50dXJib3QvU01cXG50dXJidWxlbmNlL01cXG50dXJidWxlbnQvWVxcbnR1cmQvTVNcXG50dXJkdWNrZW4vU01cXG50dXJlZW4vU01cXG50dXJmL01EU0dcXG50dXJmeVxcbnR1cmdpZC9ZXFxudHVyZ2lkaXR5L01cXG50dXJrZXkvU01cXG50dXJtZXJpYy9TTVxcbnR1cm1vaWwvTVNcXG50dXJuL0FNRFJTWkdcXG50dXJuYWJvdXQvU01cXG50dXJuYXJvdW5kL1NNXFxudHVybmJ1Y2tsZS9TTVxcbnR1cm5jb2F0L1NNXFxudHVybmVyL0FNXFxudHVybmluZy9NU1xcbnR1cm5pcC9TTVxcbnR1cm5rZXkvTVNcXG50dXJub2ZmL01TXFxudHVybm91dC9NU1xcbnR1cm5vdmVyL01TXFxudHVybnBpa2UvTVNcXG50dXJuc3RpbGUvU01cXG50dXJudGFibGUvU01cXG50dXJwZW50aW5lL01cXG50dXJwaXR1ZGUvTVxcbnR1cnBzXFxudHVycXVvaXNlL1NNXFxudHVycmV0L1NNRFxcbnR1cnRsZS9TTVxcbnR1cnRsZWRvdmUvU01cXG50dXJ0bGVuZWNrL1NNRFxcbnR1c2gvTVNcXG50dXNrL01EU1xcbnR1c3NsZS9EU01HXFxudHVzc29jay9NU1xcbnR1c3NvY2t5XFxudHV0L1NNXFxudHV0ZWxhZ2UvTVxcbnR1dGVsYXJ5XFxudHV0b3IvU01ER1xcbnR1dG9yZWQvVVxcbnR1dG9yaWFsL1NNXFxudHV0b3JzaGlwL01cXG50dXR0ZWRcXG50dXR0aS9TTVxcbnR1dHRpbmdcXG50dXR1L01TXFxudHV4L01TXFxudHV4ZWRvL1NNXFxudHdhZGRsZS9NWkdEUlNcXG50d2FkZGxlci9NXFxudHdhaW4vTVxcbnR3YW5nL1NNREdcXG50d2FuZ3kvUlRcXG50d2FzXFxudHdhdC9TXFxudHdlYWsvU01ER1xcbnR3ZWVcXG50d2VlZC9TTVxcbnR3ZWVkcy9NXFxudHdlZWR5L1JUXFxudHdlZW5cXG50d2VldCdzXFxudHdlZXQvQVNER1xcbnR3ZWV0ZXIvU01cXG50d2VlemVycy9NXFxudHdlbGZ0aC9NXFxudHdlbGZ0aHNcXG50d2VsdmUvU01cXG50d2VsdmVtb250aC9NXFxudHdlbHZlbW9udGhzXFxudHdlbnRpZXRoL01cXG50d2VudGlldGhzXFxudHdlbnR5L1NNSFxcbnR3ZXJrL1NER1xcbnR3ZXJwL1NNXFxudHdpY2VcXG50d2lkZGxlL01HRFNcXG50d2lkZGx5XFxudHdpZy9NU1xcbnR3aWdnZWRcXG50d2lnZ2luZ1xcbnR3aWdneS9UUlxcbnR3aWxpZ2h0L01cXG50d2lsaXRcXG50d2lsbC9NRFxcbnR3aW4vTURSU1pHXFxudHdpbmUvU01cXG50d2luZXIvTVxcbnR3aW5nZS9EU01HXFxudHdpbmsvU1lcXG50d2lua2xlL01HSkRTXFxudHdpbmtsaW5nL01cXG50d2lubmVkXFxudHdpbm5pbmdcXG50d2luc2V0L1NcXG50d2lybC9TTURSWkdcXG50d2lybGVyL01cXG50d2lybHlcXG50d2lzdCdzXFxudHdpc3QvVVNER1xcbnR3aXN0ZXIvTVNcXG50d2lzdHkvVFJcXG50d2l0L01TXFxudHdpdGNoL0dNRFNcXG50d2l0Y2h5L1JUXFxudHdpdHRlZFxcbnR3aXR0ZXIvTURTR1xcbnR3aXR0ZXJ5XFxudHdpdHRpbmdcXG50d2l4dFxcbnR3by9TTVxcbnR3b2Zlci9TTVxcbnR3b2ZvbGRcXG50d29wZW5jZS9TTVxcbnR3b3Blbm55XFxudHdvc29tZS9TTVxcbnR3cFxcbnR5Y29vbi9TTVxcbnR5aW5nL0FVXFxudHlrZS9NU1xcbnR5bXBhbmkvTVxcbnR5bXBhbmljXFxudHltcGFuaXN0L01TXFxudHltcGFudW0vU01cXG50eXBlJ3NcXG50eXBlL0FHRFNcXG50eXBlY2FzdC9HU1xcbnR5cGVmYWNlL01TXFxudHlwZXNjcmlwdC9NU1xcbnR5cGVzZXQvU1xcbnR5cGVzZXR0ZXIvTVNcXG50eXBlc2V0dGluZy9NXFxudHlwZXdyaXRlL1JTWkdcXG50eXBld3JpdGVyL01cXG50eXBld3JpdGluZy9NXFxudHlwZXdyaXR0ZW5cXG50eXBld3JvdGVcXG50eXBob2lkL01cXG50eXBob29uL01TXFxudHlwaHVzL01cXG50eXBpY2FsL1VZXFxudHlwaWNhbGl0eS9NXFxudHlwaWZpY2F0aW9uL01cXG50eXBpZnkvTkdEU1xcbnR5cGluZy9NXFxudHlwaXN0L1NNXFxudHlwby9NU1xcbnR5cG9ncmFwaGVyL1NNXFxudHlwb2dyYXBoaWNcXG50eXBvZ3JhcGhpY2FsL1lcXG50eXBvZ3JhcGh5L01cXG50eXBvbG9neS9TTVxcbnR5cmFubmljXFxudHlyYW5uaWNhbC9ZXFxudHlyYW5uaWNpZGFsXFxudHlyYW5uaWNpZGUvU1xcbnR5cmFubml6ZS9HRFNcXG50eXJhbm5vc2F1ci9NU1xcbnR5cmFubm9zYXVydXMvTVNcXG50eXJhbm5vdXNcXG50eXJhbm55L1NNXFxudHlyYW50L1NNXFxudHlyby9NU1xcbnR6YXR6aWtpXFxudS9TXFxudWJpcXVpdG91cy9ZXFxudWJpcXVpdHkvTVxcbnVkZGVyL1NNXFxudWZvbG9naXN0L1NNXFxudWZvbG9neS9NXFxudWdoXFxudWdsaW5lc3MvTVxcbnVnbHkvUlRQXFxudWhcXG51aGZcXG51a2FzZS9TTVxcbnVrdWxlbGUvU01cXG51bGNlci9TTVxcbnVsY2VyYXRlL1hEU0dOXFxudWxjZXJhdGlvbi9NXFxudWxjZXJvdXNcXG51bG5hL01cXG51bG5hZVxcbnVsbmFyXFxudWxzdGVyL01TXFxudWx0XFxudWx0ZXJpb3JcXG51bHRpbWF0ZS9NWVxcbnVsdGltYXR1bS9NU1xcbnVsdGltb1xcbnVsdHJhL1NNXFxudWx0cmFjb25zZXJ2YXRpdmUvU01cXG51bHRyYWhpZ2hcXG51bHRyYWxpZ2h0L1NNXFxudWx0cmFtYXJpbmUvTVxcbnVsdHJhbW9kZXJuXFxudWx0cmFzZW5zaXRpdmVcXG51bHRyYXNob3J0XFxudWx0cmFzb25pY1xcbnVsdHJhc29uaWNhbGx5XFxudWx0cmFzb3VuZC9NU1xcbnVsdHJhdmlvbGV0L01cXG51bHVsYXRlL0RTR05YXFxudWx1bGF0aW9uL01cXG51bVxcbnVtYmVsL1NNXFxudW1iZXIvTVxcbnVtYmlsaWNhbFxcbnVtYmlsaWNpXFxudW1iaWxpY3VzL01cXG51bWJyYS9TTVxcbnVtYnJhZ2UvTVxcbnVtYnJlbGxhL1NNXFxudW1pYWsvU01cXG51bWxhdXQvTVNcXG51bXAvU0dNRFxcbnVtcGlyZS9NR0RTXFxudW1wdGVlbi9IXFxudW5hYnJpZGdlZC9NU1xcbnVuYWNjZXB0YWJpbGl0eVxcbnVuYWNjZXB0YWJsZVxcbnVuYWNjb21tb2RhdGluZ1xcbnVuYWNjb3VudGFibHlcXG51bmFkdmVudHVyb3VzXFxudW5hZXN0aGV0aWNcXG51bmFsdGVyYWJseVxcbnVuYW1iaXRpb3VzXFxudW5hbmltaXR5L01cXG51bmFuaW1vdXMvWVxcbnVuYXBwYXJlbnRcXG51bmFwcGV0aXppbmdcXG51bmFwcHJlY2lhdGl2ZVxcbnVuYXJ5XFxudW5hc3NlcnRpdmVcXG51bmFzc2ltaWxhYmxlXFxudW5hc3N1bWluZy9ZXFxudW5hdmFpbGluZy9ZXFxudW5hd2FyZS9TXFxudW5iZWtub3duc3RcXG51bmJlbmQvU0dcXG51bmJlbnRcXG51bmJpZFxcbnVuYmxpbmtpbmcvWVxcbnVuYmx1c2hpbmcvWVxcbnVuYm9zb20vREdcXG51bmJvdW5kL0RcXG51bmJveC9HRFNcXG51bmJyZWFrYWJsZVxcbnVuYnJva2VuXFxudW5jYW5ueS9UXFxudW5jYXAvU1xcbnVuY2FyaW5nXFxudW5jYXRhbG9ndWVkXFxudW5jZWFzaW5nL1lcXG51bmNoYW5nZWFibGVcXG51bmNoYXJhY3RlcmlzdGljXFxudW5jaGFyaXRhYmxlXFxudW5jaGFzdGUvUlRcXG51bmNpYWwvTVxcbnVuY2xlL1NNXFxudW5jbGVhbi9EUlBUXFxudW5jbGVhbmx5L1RcXG51bmNsZWFyL0RSVFxcbnVuY29tZm9ydGFibGVcXG51bmNvbW1vbi9UXFxudW5jb21wZWxsaW5nXFxudW5jb21wbGFpbmluZy9ZXFxudW5jb21wbGljYXRlZFxcbnVuY29tcHJlaGVuZGluZy9ZXFxudW5jb21wcm9taXNpbmcvWVxcbnVuY29uZGl0aW9uYWwvWVxcbnVuY29uZ2VuaWFsXFxudW5jb25zY2lvbmFibGVcXG51bmNvbnNjaW9uYWJseVxcbnVuY29uc2Npb3VzL01cXG51bmNvbnN0aXR1dGlvbmFsL1lcXG51bmNvbnRyb2xsYWJseVxcbnVuY29udHJvdmVyc2lhbFxcbnVuY29vbFxcbnVuY29vcGVyYXRpdmVcXG51bmNvdXRoL1lcXG51bmNydXNoYWJsZVxcbnVuY3Rpb24vU01cXG51bmN0dW91cy9ZUFxcbnVuY3R1b3VzbmVzcy9NXFxudW5jdXRcXG51bmRhdW50ZWQvWVxcbnVuZGVjaWRlZC9TTVxcbnVuZGVtb25zdHJhdGl2ZS9ZXFxudW5kZW5pYWJseVxcbnVuZGVyXFxudW5kZXJhY2hpZXZlL0xaR0RSU1xcbnVuZGVyYWNoaWV2ZXIvTVxcbnVuZGVyYWN0L1NER1xcbnVuZGVyYWdlXFxudW5kZXJhcHByZWNpYXRlZFxcbnVuZGVyYXJtL1NNXFxudW5kZXJiZWxseS9TTVxcbnVuZGVyYmlkL1NcXG51bmRlcmJpZGRpbmdcXG51bmRlcmJydXNoL01cXG51bmRlcmNhcnJpYWdlL01TXFxudW5kZXJjaGFyZ2UvTUdEU1xcbnVuZGVyY2xhc3MvTVNcXG51bmRlcmNsYXNzbWFuL01cXG51bmRlcmNsYXNzbWVuXFxudW5kZXJjbG90aGVzL01cXG51bmRlcmNsb3RoaW5nL01cXG51bmRlcmNvYXQvR0pTTURcXG51bmRlcmNvYXRpbmcvTVxcbnVuZGVyY292ZXJcXG51bmRlcmN1cnJlbnQvU01cXG51bmRlcmN1dC9TTVxcbnVuZGVyY3V0dGluZ1xcbnVuZGVyZGV2ZWxvcGVkXFxudW5kZXJkZXZlbG9wbWVudC9NXFxudW5kZXJkb2cvU01cXG51bmRlcmRvbmVcXG51bmRlcmVtcGxveWVkXFxudW5kZXJlbXBsb3ltZW50L01cXG51bmRlcmVzdGltYXRlL0RTTUdOWFxcbnVuZGVyZXN0aW1hdGlvbi9NXFxudW5kZXJleHBvc2UvR0RTXFxudW5kZXJleHBvc3VyZS9NU1xcbnVuZGVyZmVkXFxudW5kZXJmZWVkL0dTXFxudW5kZXJmbG9vclxcbnVuZGVyZmxvd1xcbnVuZGVyZm9vdFxcbnVuZGVyZnVuZGVkXFxudW5kZXJmdXIvTVxcbnVuZGVyZ2FybWVudC9TTVxcbnVuZGVyZ28vR1xcbnVuZGVyZ29lc1xcbnVuZGVyZ29uZVxcbnVuZGVyZ3JhZC9TXFxudW5kZXJncmFkdWF0ZS9TTVxcbnVuZGVyZ3JvdW5kL01TXFxudW5kZXJncm93dGgvTVxcbnVuZGVyaGFuZFxcbnVuZGVyaGFuZGVkL1BZXFxudW5kZXJoYW5kZWRuZXNzL01cXG51bmRlcmluZmxhdGVkXFxudW5kZXJsYWluXFxudW5kZXJsYXkvU01cXG51bmRlcmxpZS9TXFxudW5kZXJsaW5lL01HRFNcXG51bmRlcmxpbmcvTVNcXG51bmRlcmxpcC9TTVxcbnVuZGVybHlpbmdcXG51bmRlcm1hbm5lZFxcbnVuZGVybWVudGlvbmVkXFxudW5kZXJtaW5lL0dEU1xcbnVuZGVybW9zdFxcbnVuZGVybmVhdGgvTVxcbnVuZGVybmVhdGhzXFxudW5kZXJub3VyaXNoZWRcXG51bmRlcm5vdXJpc2htZW50L01cXG51bmRlcnBhaWRcXG51bmRlcnBhbnRzL01cXG51bmRlcnBhcnQvTVNcXG51bmRlcnBhc3MvTVNcXG51bmRlcnBheS9HU0xcXG51bmRlcnBheW1lbnQvU01cXG51bmRlcnBpbi9TXFxudW5kZXJwaW5uZWRcXG51bmRlcnBpbm5pbmcvTVNcXG51bmRlcnBsYXkvREdTXFxudW5kZXJwb3B1bGF0ZWRcXG51bmRlcnByaXZpbGVnZWRcXG51bmRlcnByb2R1Y3Rpb24vTVxcbnVuZGVycmF0ZS9HRFNcXG51bmRlcnJlcHJlc2VudGVkXFxudW5kZXJzY29yZS9EU01HXFxudW5kZXJzZWEvU1xcbnVuZGVyc2VjcmV0YXJ5L1NNXFxudW5kZXJzZWxsL0dTXFxudW5kZXJzZXhlZFxcbnVuZGVyc2hpcnQvU01cXG51bmRlcnNob290L1NHXFxudW5kZXJzaG9ydHMvTVxcbnVuZGVyc2hvdFxcbnVuZGVyc2lkZS9NU1xcbnVuZGVyc2lnbi9ER1NcXG51bmRlcnNpZ25lZC9NXFxudW5kZXJzaXplZFxcbnVuZGVyc2tpcnQvU01cXG51bmRlcnNvbGRcXG51bmRlcnN0YWZmZWRcXG51bmRlcnN0YW5kL1NHQkpcXG51bmRlcnN0YW5kYWJseVxcbnVuZGVyc3RhbmRpbmcvTVlcXG51bmRlcnN0YXRlL0RTTEdcXG51bmRlcnN0YXRlbWVudC9TTVxcbnVuZGVyc3Rvb2RcXG51bmRlcnN0dWR5L0dEU01cXG51bmRlcnRha2UvWkdKUlNcXG51bmRlcnRha2VuXFxudW5kZXJ0YWtlci9NXFxudW5kZXJ0YWtpbmcvTVxcbnVuZGVydGhpbmdzL01cXG51bmRlcnRvbmUvTVNcXG51bmRlcnRvb2tcXG51bmRlcnRvdy9TTVxcbnVuZGVydXNlZFxcbnVuZGVydXRpbGl6ZWRcXG51bmRlcnZhbHVhdGlvbi9NXFxudW5kZXJ2YWx1ZS9EU0dcXG51bmRlcndhdGVyXFxudW5kZXJ3YXlcXG51bmRlcndlYXIvTVxcbnVuZGVyd2VpZ2h0L01cXG51bmRlcndlbnRcXG51bmRlcndoZWxtL0RHU1xcbnVuZGVyd2lyZS9EU1xcbnVuZGVyd29ybGQvTVNcXG51bmRlcndyaXRlL1pHUlNcXG51bmRlcndyaXRlci9NXFxudW5kZXJ3cml0dGVuXFxudW5kZXJ3cm90ZVxcbnVuZGVzaXJhYmxlL01TXFxudW5kaWVzL01cXG51bmRvXFxudW5kb3VidGVkL1lcXG51bmRyYW1hdGljXFxudW5kdWVcXG51bmR1bGFudFxcbnVuZHVsYXRlL0RTWEdOXFxudW5kdWxhdGlvbi9NXFxudW5keWluZ1xcbnVuZWFydGhsaW5lc3MvTVxcbnVuZWFzZS9NXFxudW5lYXN5L1RcXG51bmVhdGFibGVcXG51bmVjb25vbWljXFxudW5lbXBsb3llZC9NXFxudW5lbmRpbmdcXG51bmVudGVycHJpc2luZ1xcbnVuZXF1YWwvRFlcXG51bmVycmluZy9ZXFxudW5lc3NlbnRpYWxcXG51bmV2ZW4vWVxcbnVuZXhjZXB0aW9uYWJseVxcbnVuZXhjaXRlZFxcbnVuZXhjaXRpbmdcXG51bmV4cGVjdGVkL1lQXFxudW5leHBlY3RlZG5lc3MvTVxcbnVuZmFpbGluZy9ZXFxudW5mYWlyL1BUUllcXG51bmZhbHRlcmluZ1xcbnVuZmFtaWxpYXJcXG51bmZhdGhvbWFibHlcXG51bmZlZFxcbnVuZmVlbGluZy9ZXFxudW5mZW1pbmluZVxcbnVuZml0L1NcXG51bmZpdHRpbmdcXG51bmZpeC9HRFNcXG51bmZsYWdnaW5nL1lcXG51bmZsYXBwYWJpbGl0eS9NXFxudW5mbGFwcGFibGVcXG51bmZsYXBwYWJseVxcbnVuZmxhdHRlcmluZ1xcbnVuZmxpbmNoaW5nL1lcXG51bmZvcmdldHRhYmx5XFxudW5mb3JnaXZhYmx5XFxudW5mb3J0dW5hdGUvTVNcXG51bmZyaWVuZGx5L1RcXG51bmZyb2NrL0RHXFxudW5mcnVpdGZ1bFxcbnVuZnVubnlcXG51bmdhaW5saW5lc3MvTVxcbnVuZ2Fpbmx5L1JQVFxcbnVuZ2VuZXJvdXNcXG51bmdlbnRsZVxcbnVuZ29kbHkvVFxcbnVuZ3JhY2VmdWwvWVxcbnVuZ3J1ZGdpbmdcXG51bmd1YXJkZWRcXG51bmd1ZW50L1NNXFxudW5ndWxhdGUvTVNcXG51bmhhbmR5L1RcXG51bmhhcHB5L1RcXG51bmhlYWx0aGZ1bFxcbnVuaGVhbHRoeS9UXFxudW5oaXN0b3JpY2FsXFxudW5ob2x5L1RcXG51bmh1cnRcXG51bmljYW1lcmFsXFxudW5pY2VsbHVsYXJcXG51bmljb3JuL1NNXFxudW5pY3ljbGUvU01cXG51bmlkaXJlY3Rpb25hbFxcbnVuaWZpY2F0aW9uL0FNXFxudW5pZm9ybS9TTURZR1xcbnVuaWZvcm1pdHkvTVxcbnVuaWZ5L0FHRFNOXFxudW5pbGF0ZXJhbC9ZXFxudW5pbGF0ZXJhbGlzbVxcbnVuaW1wb3J0YW50XFxudW5pbXByZXNzaXZlXFxudW5pbmZvcm1hdGl2ZVxcbnVuaW5oaWJpdGVkL1lcXG51bmluc3VyZWRcXG51bmludGVsbGlnZW50XFxudW5pbnRlbmRlZFxcbnVuaW50ZXJlc3RpbmdcXG51bmludGVycnVwdGVkL1lcXG51bmludGVycnVwdGlibGVcXG51bmludml0aW5nXFxudW5pb24vQVNNXFxudW5pb25pc20vTVxcbnVuaW9uaXN0L01TXFxudW5pcXVlL1lUUlBcXG51bmlxdWVuZXNzL01cXG51bmlzZXgvTVxcbnVuaXNvbi9NXFxudW5pdGFyeVxcbnVuaXRlL0FFR1NEXFxudW5pdGVkbHlcXG51bml0aWVzXFxudW5pdGl6ZS9EU0dcXG51bml0eS9FTVxcbnVuaXZhbGVudFxcbnVuaXZhbHZlL1NNXFxudW5pdmVyc2FsL01ZU1xcbnVuaXZlcnNhbGlzbVxcbnVuaXZlcnNhbGlzdFxcbnVuaXZlcnNhbGl0eS9NXFxudW5pdmVyc2FsaXplL0RTR1xcbnVuaXZlcnNlL1NNXFxudW5pdmVyc2l0eS9TTVxcbnVuaXZvY2FsXFxudW5qdXN0L1lcXG51bmtlbXB0XFxudW5raW5kL1RcXG51bmtpbmRseS9UXFxudW5rbm93YWJsZS9NXFxudW5rbm93bi9TTVxcbnVubGVhZGVkL01cXG51bmxlc3NcXG51bmxpa2UvUEJcXG51bmxpa2VseS9UXFxudW5saXRcXG51bmxvY2svRFNHXFxudW5sb3ZhYmxlXFxudW5sb3ZlbHkvVFJcXG51bmxvdmluZ1xcbnVubHVja3kvVFxcbnVubWFubHkvVFxcbnVubWFycmllZFxcbnVubWVhbmluZ1xcbnVubWVudGlvbmFibGUvTVNcXG51bm1lbnRpb25hYmxlcy9NXFxudW5tZXRcXG51bm1pbmRmdWxcXG51bm1pc3NhYmxlXFxudW5taXN0YWthYmx5XFxudW5tb3JhbFxcbnVubW92YWJsZVxcbnVubXVzaWNhbFxcbnVubmVjZXNzYXJ5XFxudW5uZXJ2aW5nL1lcXG51bm9ic2VydmFudFxcbnVub2ZmZW5zaXZlXFxudW5vZmZpY2lhbC9ZXFxudW5vcmlnaW5hbFxcbnVucGVvcGxlXFxudW5wZXJjZXB0aXZlXFxudW5wZXJzdWFzaXZlXFxudW5waWNrL0dEU1xcbnVucGluL1NcXG51bnBsZWFzaW5nXFxudW5wb2xpdGljYWxcXG51bnBvcHVsYXJcXG51bnByYWN0aWNhbFxcbnVucHJlY2VkZW50ZWQvWVxcbnVucHJvZmVzc2lvbmFsL1lcXG51bnByb21pc2luZ1xcbnVucHJvcGl0aW91c1xcbnVucXVlc3Rpb25pbmcvWVxcbnVucXVpZXQvVFJcXG51bnJlYWQvQlxcbnVucmVhZHlcXG51bnJlYWxcXG51bnJlYXNvbmluZ1xcbnVucmVnZW5lcmF0ZVxcbnVucmVsYXRlZFxcbnVucmVsZW50aW5nL1lcXG51bnJlbGlldmVkL1lcXG51bnJlbWFya2FibGVcXG51bnJlbWl0dGluZy9ZXFxudW5yZXBlbnRhbnRcXG51bnJlcG9ydGVkXFxudW5yZXByZXNlbnRhdGl2ZVxcbnVucmVzdC9NXFxudW5yZXZlYWxpbmdcXG51bnJpcGUvVFJcXG51bnJvbGwvR0RTXFxudW5yb21hbnRpY1xcbnVucnVsaW5lc3MvTVxcbnVucnVseS9SVFBcXG51bnNhZmUvWVRSXFxudW5zYWxlYWJsZVxcbnVuc2F2b3J5XFxudW5zY2F0aGVkXFxudW5zZWVpbmcvWVxcbnVuc2VlbWx5L1RcXG51bnNlZW4vTVxcbnVuc2VudGltZW50YWxcXG51bnNldFxcbnVuc2hha2FibGVcXG51bnNoYWthYmx5XFxudW5zaGFwZWx5XFxudW5zaG9ja2FibGVcXG51bnNob3JuXFxudW5zaWdodGxpbmVzcy9NXFxudW5zaWdodGx5L1BUXFxudW5zbWlsaW5nXFxudW5zb2NpYWJsZVxcbnVuc29jaWFsXFxudW5zb2xkXFxudW5zb3VuZC9QUllUXFxudW5zcGVha2FibGVcXG51bnNwZWFrYWJseVxcbnVuc3BlY2lmaWNcXG51bnNwZWN0YWN1bGFyXFxudW5zcG9ydGluZ1xcbnVuc3RhYmxlXFxudW5zdGVhZHkvVFJQXFxudW5zdGludGluZy9ZXFxudW5zdHJhcHBpbmdcXG51bnN1YnN0YW50aWFsXFxudW5zdWJ0bGVcXG51bnN1aXRhYmxlXFxudW5zdXJlXFxudW5zdXNwZWN0aW5nL1lcXG51bnN5bW1ldHJpY2FsXFxudW50YWN0ZnVsXFxudW50aGlua2FibHlcXG51bnRoaW5raW5nL1lcXG51bnRpZHkvUFRSXFxudW50aWxcXG51bnRpbWVseS9UXFxudW50aXJpbmcvWVxcbnVudG91Y2hhYmxlL01TXFxudW50b3dhcmRcXG51bnRydWUvUlRcXG51bnRydXN0d29ydGh5XFxudW50cnV0aC9NXFxudW51dHRlcmFibGVcXG51bnV0dGVyYWJseVxcbnVud2FycmFudGFibGVcXG51bndhcnkvVFxcbnVud2F2ZXJpbmdcXG51bndlZFxcbnVud2VsY29tZS9HXFxudW53ZWxsXFxudW53aWVsZGluZXNzL01cXG51bndpZWxkeS9UUlBcXG51bndpc2UvUllUXFxudW53b3JyaWVkXFxudW53b3J0aHkvVFxcbnVud291bmRcXG51bndyYXBwaW5nXFxudW55aWVsZGluZ1xcbnVwL1NcXG51cGJlYXQvTVNcXG51cGJyYWlkL1NHRFxcbnVwYnJpbmdpbmcvTVNcXG51cGNodWNrL1NHRFxcbnVwY29taW5nXFxudXBjb3VudHJ5L01cXG51cGRhdGUvTUdEUlNcXG51cGRyYWZ0L01TXFxudXBlbmQvU0dEXFxudXBmcm9udFxcbnVwZ3JhZGUvTUdEU1xcbnVwaGVhdmFsL01TXFxudXBoZWxkXFxudXBoaWxsL01TXFxudXBob2xkL1pHUlNcXG51cGhvbGRlci9NXFxudXBob2xzdGVyL0FTR0RcXG51cGhvbHN0ZXJlci9NU1xcbnVwaG9sc3RlcnkvTVxcbnVwa2VlcC9NXFxudXBsYW5kL01TXFxudXBsaWZ0L0pTTURHXFxudXBsb2FkL1NER1xcbnVwbWFya2V0XFxudXBtb3N0XFxudXBvblxcbnVwcGVkXFxudXBwZXIvU01cXG51cHBlcmNhc2UvTVxcbnVwcGVyY2xhc3NtYW4vTVxcbnVwcGVyY2xhc3NtZW5cXG51cHBlcmNsYXNzd29tYW5cXG51cHBlcmNsYXNzd29tZW5cXG51cHBlcmN1dC9NU1xcbnVwcGVyY3V0dGluZ1xcbnVwcGVybW9zdFxcbnVwcGluZ1xcbnVwcGlzaFxcbnVwcGl0eVxcbnVwcmFpc2UvRFNHXFxudXByZWFyL0dTRFxcbnVwcmlnaHQvTVlQU1xcbnVwcmlnaHRuZXNzL01cXG51cHJpc2luZy9TTVxcbnVwcml2ZXJcXG51cHJvYXIvU01cXG51cHJvYXJpb3VzL1lcXG51cHJvb3QvR1NEXFxudXBzY2FsZVxcbnVwc2V0L1NNXFxudXBzZXR0aW5nXFxudXBzaG90L1NNXFxudXBzaWRlL1NNXFxudXBzaWxvbi9NU1xcbnVwc3RhZ2UvR0RTXFxudXBzdGFpcnNcXG51cHN0YW5kaW5nXFxudXBzdGFydC9NRFNHXFxudXBzdGF0ZS9NXFxudXBzdHJlYW1cXG51cHN0cm9rZS9TTVxcbnVwc3VyZ2UvTUdEU1xcbnVwc3dpbmcvTVNcXG51cHRha2UvU01cXG51cHRlbXBvXFxudXB0aHJ1c3QvR1NNXFxudXB0aWNrL1NNXFxudXB0aWdodFxcbnVwdG93bi9NXFxudXB0cmVuZFxcbnVwdHVybi9HU01EXFxudXB3YXJkL1NZXFxudXB3aW5kXFxudXJhY2lsL01cXG51cmFuaXVtL01cXG51cmJhblxcbnVyYmFuZS9SWVRcXG51cmJhbml0eS9NXFxudXJiYW5pemF0aW9uL01cXG51cmJhbml6ZS9EU0dcXG51cmJhbm9sb2dpc3QvTVNcXG51cmJhbm9sb2d5L01cXG51cmNoaW4vU01cXG51cmVhL01cXG51cmVtaWEvTVxcbnVyZW1pY1xcbnVyZXRlci9TTVxcbnVyZXRoYW5lL01cXG51cmV0aHJhL01cXG51cmV0aHJhZVxcbnVyZXRocmFsXFxudXJnZS9NR0RTXFxudXJnZW5jeS9NXFxudXJnZW50L1lcXG51cmljXFxudXJpbmFsL1NNXFxudXJpbmFseXNlc1xcbnVyaW5hbHlzaXMvTVxcbnVyaW5hcnlcXG51cmluYXRlL0dORFNcXG51cmluYXRpb24vTVxcbnVyaW5lL01cXG51cm4vU01cXG51cm9nZW5pdGFsXFxudXJvbG9naWNhbFxcbnVyb2xvZ2lzdC9NU1xcbnVyb2xvZ3kvTVxcbnVyc2luZVxcbnVydGljYXJpYS9NXFxudXNhYmlsaXR5L01cXG51c2FibGUvVUFcXG51c2FnZS9TTVxcbnVzZS9BRURTTUdcXG51c2VkL1VcXG51c2VmdWwvUFlcXG51c2VmdWxuZXNzL01cXG51c2VsZXNzL1lQXFxudXNlbGVzc25lc3MvTVxcbnVzZXIvTVNcXG51c2VybmFtZS9NU1xcbnVzaGVyL1NNREdcXG51c2hlcmV0dGUvU01cXG51c3VcXG51c3VhbCdzXFxudXN1YWwvVVlcXG51c3VyZXIvU01cXG51c3VyaW91c1xcbnVzdXJwL1NEUlpHXFxudXN1cnBhdGlvbi9NXFxudXN1cnBlci9NXFxudXN1cnkvTVxcbnV0ZW5zaWwvU01cXG51dGVyaVxcbnV0ZXJpbmVcXG51dGVydXMvTVxcbnV0aWxpdGFyaWFuL01TXFxudXRpbGl0YXJpYW5pc20vTVxcbnV0aWxpdHkvU01cXG51dGlsaXphdGlvbi9NXFxudXRpbGl6ZS9HQkRTXFxudXRtb3N0L01cXG51dG9waWEvU01cXG51dHRlci9TRFlHXFxudXR0ZXJhbmNlL1NNXFxudXR0ZXJtb3N0L01cXG51dmVpdGlzXFxudXZ1bGEvU01cXG51dnVsYXIvTVNcXG51eG9yaW91c1xcbnYvQVNcXG52YWMvU1xcbnZhY2FuY3kvU01cXG52YWNhbnQvWVxcbnZhY2F0ZS9EU0dcXG52YWNhdGlvbi9aR01EUlNcXG52YWNhdGlvbmVyL01cXG52YWNhdGlvbmlzdC9TTVxcbnZhY2NpbmF0ZS9HTkRTWFxcbnZhY2NpbmF0aW9uL01cXG52YWNjaW5lL1NNXFxudmFjaWxsYXRlL1hHTkRTXFxudmFjaWxsYXRpb24vTVxcbnZhY3VpdHkvTVxcbnZhY3VvbGUvTVNcXG52YWN1b3VzL1lQXFxudmFjdW91c25lc3MvTVxcbnZhY3V1bS9HU01EXFxudmFnYWJvbmQvU01ER1xcbnZhZ2Fib25kYWdlL01cXG52YWdhcmlvdXNcXG52YWdhcnkvU01cXG52YWdpbmEvU01cXG52YWdpbmFlXFxudmFnaW5hbC9ZXFxudmFnaW5pdGlzXFxudmFncmFuY3kvTVxcbnZhZ3JhbnQvTVNcXG52YWd1ZS9SWVRQXFxudmFndWVuZXNzL01cXG52YWd1c1xcbnZhaW4vUllUXFxudmFpbmdsb3Jpb3VzL1lcXG52YWluZ2xvcnkvTVxcbnZhbFxcbnZhbGFuY2UvTVNcXG52YWxlL01TXFxudmFsZWRpY3Rpb24vTVNcXG52YWxlZGljdG9yaWFuL1NNXFxudmFsZWRpY3RvcnkvU01cXG52YWxlbmNlL01TXFxudmFsZW5jeS9TTVxcbnZhbGVudGluZS9TTVxcbnZhbGV0L1NNREdcXG52YWxldHVkaW5hcmlhbi9NU1xcbnZhbGV0dWRpbmFyaWFuaXNtL01cXG52YWxpYW5jZS9NXFxudmFsaWFudC9ZXFxudmFsaWQvWVxcbnZhbGlkYXRlL0lHTkRTXFxudmFsaWRhdGlvbi9JTVxcbnZhbGlkYXRpb25zXFxudmFsaWRpdHkvSU1cXG52YWxpZG5lc3MvTVxcbnZhbGlzZS9TTVxcbnZhbGxleS9TTVxcbnZhbG9yL01cXG52YWxvcm91cy9ZXFxudmFsdWFibGUvTVNcXG52YWx1YXRlL0RTR1xcbnZhbHVhdGlvbi9DQU1TXFxudmFsdWUnc1xcbnZhbHVlL0NBR1NEXFxudmFsdWVsZXNzXFxudmFsdWVyL1NNXFxudmFsdmUvRFNNR1xcbnZhbHZlbGVzc1xcbnZhbHZ1bGFyXFxudmFtb29zZS9EU0dcXG52YW1wL0FNREdTXFxudmFtcGlyZS9TTVxcbnZhbi9TTVxcbnZhbmFkaXVtL01cXG52YW5kYWwvU01cXG52YW5kYWxpc20vTVxcbnZhbmRhbGl6ZS9EU0dcXG52YW5lL01TXFxudmFuZ3VhcmQvTVNcXG52YW5pbGxhL1NNXFxudmFuaXNoL0pEU0dcXG52YW5pdHkvU01cXG52YW5uZWRcXG52YW5uaW5nXFxudmFucXVpc2gvWkdEUlNcXG52YW5xdWlzaGVyL01cXG52YW50YWdlL1NNXFxudmFwZS9HRFNcXG52YXBpZC9ZUFxcbnZhcGlkaXR5L01cXG52YXBpZG5lc3MvTVxcbnZhcG9yL1NNXFxudmFwb3JpemF0aW9uL01cXG52YXBvcml6ZS9EUlNaR1xcbnZhcG9yaXplci9NXFxudmFwb3JvdXNcXG52YXBvcndhcmVcXG52YXBvcnlcXG52YXF1ZXJvL01TXFxudmFyL1NcXG52YXJpYWJpbGl0eS9JTVxcbnZhcmlhYmxlL0lTTVxcbnZhcmlhYmx5L0lcXG52YXJpYW5jZS9TTVxcbnZhcmlhbnQvTVNcXG52YXJpYXRlL05YXFxudmFyaWF0aW9uL01cXG52YXJpY29sb3JlZFxcbnZhcmljb3NlXFxudmFyaWVkL1VcXG52YXJpZWdhdGUvRFNHTlxcbnZhcmllZ2F0aW9uL01cXG52YXJpZXRhbC9TTVxcbnZhcmlldHkvU01cXG52YXJpb3VzL1lcXG52YXJsZXQvU01cXG52YXJtaW50L01TXFxudmFybmlzaC9HTURTXFxudmFybmlzaGVkL1VcXG52YXJzaXR5L1NNXFxudmFyeS9EU0dcXG52YXJ5aW5nL1VcXG52YXNjdWxhclxcbnZhc2UvTVNcXG52YXNlY3RvbXkvU01cXG52YXNvY29uc3RyaWN0aW9uXFxudmFzb21vdG9yXFxudmFzc2FsL1NNXFxudmFzc2FsYWdlL01cXG52YXN0L01SWVRTUFxcbnZhc3RuZXNzL01cXG52YXQvU01cXG52YXR0ZWRcXG52YXR0aW5nXFxudmF1ZGV2aWxsZS9NXFxudmF1ZGV2aWxsaWFuL01TXFxudmF1bHQvU01EUlpHXFxudmF1bHRlci9NXFxudmF1bHRpbmcvTVxcbnZhdW50L1NNREdcXG52YlxcbnZlYWwvTVxcbnZlY3Rvci9TR01EXFxudmVlamF5L1NNXFxudmVlcC9NU1xcbnZlZXIvTURHU1xcbnZlZy9NXFxudmVnYW4vU01cXG52ZWdhbmlzbVxcbnZlZ2VidXJnZXIvU1xcbnZlZ2VzXFxudmVnZXRhYmxlL1NNXFxudmVnZXRhcmlhbi9TTVxcbnZlZ2V0YXJpYW5pc20vTVxcbnZlZ2V0YXRlL0dOVkRTXFxudmVnZXRhdGlvbi9NXFxudmVnZ2VkXFxudmVnZ2VzXFxudmVnZ2llL1NNXFxudmVnZ2llYnVyZ2VyL1NcXG52ZWdnaW5nXFxudmVoZW1lbmNlL01cXG52ZWhlbWVuY3kvTVxcbnZlaGVtZW50L1lcXG52ZWhpY2xlL01TXFxudmVoaWN1bGFyXFxudmVpbCdzXFxudmVpbC9VREdTXFxudmVpbi9NREdTXFxudmVsYVxcbnZlbGFyL1NNXFxudmVsZC9NU1xcbnZlbGx1bS9NXFxudmVsb2NpcGVkZS9NU1xcbnZlbG9jaXR5L1NNXFxudmVsb2Ryb21lL1NcXG52ZWxvdXIvTVNcXG52ZWx1bS9NXFxudmVsdmV0L01cXG52ZWx2ZXRlZW4vTVxcbnZlbHZldHlcXG52ZW5hbC9ZXFxudmVuYWxpdHkvTVxcbnZlbmF0aW9uL01cXG52ZW5kL0RHU1xcbnZlbmRldHRhL1NNXFxudmVuZGlibGVcXG52ZW5kb3IvTVNcXG52ZW5lZXIvTURHU1xcbnZlbmVyYWJpbGl0eS9NXFxudmVuZXJhYmxlXFxudmVuZXJhdGUvRFNHTlxcbnZlbmVyYXRpb24vTVxcbnZlbmVyZWFsXFxudmVuZ2VhbmNlL01cXG52ZW5nZWZ1bC9BWVxcbnZlbmlhbFxcbnZlbmlyZW1hbi9NXFxudmVuaXJlbWVuXFxudmVuaXNvbi9NXFxudmVub20vTVxcbnZlbm9tb3VzL1lcXG52ZW5vdXNcXG52ZW50J3NcXG52ZW50L0RHU1xcbnZlbnRpbGF0ZS9HTkRTXFxudmVudGlsYXRpb24vTVxcbnZlbnRpbGF0b3IvU01cXG52ZW50aWxhdG9yeVxcbnZlbnRyYWxcXG52ZW50cmljbGUvU01cXG52ZW50cmljdWxhclxcbnZlbnRyaWxvcXVpc20vTVxcbnZlbnRyaWxvcXVpc3QvU01cXG52ZW50cmlsb3F1eS9NXFxudmVudHVyZS9EU01HXFxudmVudHVyZXNvbWUvUFlcXG52ZW50dXJlc29tZW5lc3MvTVxcbnZlbnR1cm91cy9QWVxcbnZlbnR1cm91c25lc3MvTVxcbnZlbnVlL0FTTVxcbnZlcmFjaW91cy9ZXFxudmVyYWNpdHkvTVxcbnZlcmFuZGEvU01cXG52ZXJhcGFtaWxcXG52ZXJiL0tNU1xcbnZlcmJhbC9NWVNcXG52ZXJiYWxpemF0aW9uL01cXG52ZXJiYWxpemUvR0RTXFxudmVyYmF0aW1cXG52ZXJiZW5hL1NNXFxudmVyYmlhZ2UvTVNcXG52ZXJib3NlL1lcXG52ZXJib3NpdHkvTVxcbnZlcmJvdGVuXFxudmVyZGFudC9ZXFxudmVyZGljdC9TTVxcbnZlcmRpZ3Jpcy9HTURTXFxudmVyZHVyZS9NXFxudmVyZ2Unc1xcbnZlcmdlL0ZEU0dcXG52ZXJnZXIvTVNcXG52ZXJpZmlhYmxlL1VcXG52ZXJpZmljYXRpb24vTVxcbnZlcmlmaWVkL1VcXG52ZXJpZnkvRFNOR1xcbnZlcmlseVxcbnZlcmlzaW1pbGl0dWRlL01cXG52ZXJpdGFibGVcXG52ZXJpdGFibHlcXG52ZXJpdHkvU01cXG52ZXJtaWNlbGxpL01cXG52ZXJtaWN1bGl0ZS9NXFxudmVybWlmb3JtXFxudmVybWlsaW9uL01cXG52ZXJtaW4vTVxcbnZlcm1pbm91c1xcbnZlcm1vdXRoL01cXG52ZXJuYWN1bGFyL01TXFxudmVybmFsXFxudmVybmllci9TTVxcbnZlcm9uaWNhL01cXG52ZXJydWNhL1NNXFxudmVycnVjYWVcXG52ZXJzYVxcbnZlcnNhdGlsZVxcbnZlcnNhdGlsaXR5L01cXG52ZXJzZS9BRk5HTVNEWFxcbnZlcnNlZC9VXFxudmVyc2lmaWNhdGlvbi9NXFxudmVyc2lmaWVyL01cXG52ZXJzaWZ5L1pHTkRSU1xcbnZlcnNpb24vQUZJTVNcXG52ZXJzaW9uZWRcXG52ZXJzaW9uaW5nXFxudmVyc28vU01cXG52ZXJzdXNcXG52ZXJ0L0FcXG52ZXJ0ZWJyYS9NXFxudmVydGVicmFlXFxudmVydGVicmFsXFxudmVydGVicmF0ZS9JTVNcXG52ZXJ0ZXgvTVNcXG52ZXJ0aWNhbC9NWVNcXG52ZXJ0aWNlc1xcbnZlcnRpZ2lub3VzXFxudmVydGlnby9NXFxudmVydmUvTVxcbnZlcnkvUlRcXG52ZXNpY2xlL1NNXFxudmVzaWN1bGFyXFxudmVzaWN1bGF0ZVxcbnZlc3Blci9NU1xcbnZlc3NlbC9NU1xcbnZlc3Qnc1xcbnZlc3QvSUxER1NcXG52ZXN0YWwvTVNcXG52ZXN0aWJ1bGUvTVNcXG52ZXN0aWdlL1NNXFxudmVzdGlnaWFsL1lcXG52ZXN0aW5nL01cXG52ZXN0bWVudC9JTVNcXG52ZXN0cnkvU01cXG52ZXN0cnltYW4vTVxcbnZlc3RyeW1lblxcbnZldC9TTVxcbnZldGNoL01TXFxudmV0ZXJhbi9TTVxcbnZldGVyaW5hcmlhbi9NU1xcbnZldGVyaW5hcnkvU01cXG52ZXRvL01ER1xcbnZldG9lc1xcbnZldHRlZFxcbnZldHRpbmdcXG52ZXgvR0RTXFxudmV4YXRpb24vU01cXG52ZXhhdGlvdXMvWVxcbnZoZlxcbnZpXFxudmlhXFxudmlhYmlsaXR5L01cXG52aWFibGVcXG52aWFibHlcXG52aWFkdWN0L1NNXFxudmlhbC9NU1xcbnZpYW5kL1NNXFxudmliZS9NU1xcbnZpYmVzL01cXG52aWJyYWhhcnAvU01cXG52aWJyYW5jeS9NXFxudmlicmFudC9ZXFxudmlicmFwaG9uZS9NU1xcbnZpYnJhcGhvbmlzdC9NU1xcbnZpYnJhdGUvR05EU1hcXG52aWJyYXRpb24vTVxcbnZpYnJhdG8vTVNcXG52aWJyYXRvci9TTVxcbnZpYnJhdG9yeVxcbnZpYnVybnVtL1NNXFxudmljYXIvU01cXG52aWNhcmFnZS9TTVxcbnZpY2FyaW91cy9ZUFxcbnZpY2FyaW91c25lc3MvTVxcbnZpY2UvQ01TXFxudmljZWRcXG52aWNlZ2VyZW50L1NNXFxudmljZW5uaWFsXFxudmljZXJlZ2FsXFxudmljZXJveS9NU1xcbnZpY2h5c3NvaXNlL01cXG52aWNpbmdcXG52aWNpbml0eS9NXFxudmljaW91cy9ZUFxcbnZpY2lvdXNuZXNzL01cXG52aWNpc3NpdHVkZS9TTVxcbnZpY3RpbS9NU1xcbnZpY3RpbWl6YXRpb24vTVxcbnZpY3RpbWl6ZS9HRFNcXG52aWN0aW1sZXNzXFxudmljdG9yL01TXFxudmljdG9yaW91cy9ZXFxudmljdG9yeS9TTVxcbnZpY3R1YWwvU01ER1xcbnZpY3VuYS9NU1xcbnZpZGVsaWNldFxcbnZpZGVvL0dTTURcXG52aWRlb2Nhc3NldHRlL1NNXFxudmlkZW9jb25mZXJlbmNpbmdcXG52aWRlb2Rpc2MvTVNcXG52aWRlb3Bob25lL01TXFxudmlkZW90YXBlL0RTTUdcXG52aWRlb3RleFxcbnZpZS9EU1xcbnZpZXcvQU1EUlNaR1xcbnZpZXdhYmxlXFxudmlld2VyL0FNXFxudmlld2Vyc2hpcC9NXFxudmlld2ZpbmRlci9TTVxcbnZpZXdpbmcvU01cXG52aWV3cG9pbnQvTVNcXG52aWdlc2ltYWxcXG52aWdpbC9TTVxcbnZpZ2lsYW5jZS9NXFxudmlnaWxhbnQvWVxcbnZpZ2lsYW50ZS9TTVxcbnZpZ2lsYW50aXNtL01cXG52aWdpbGFudGlzdC9NXFxudmlnbmV0dGUvRFNNR1xcbnZpZ25ldHRpc3QvTVNcXG52aWdvci9NXFxudmlnb3JvdXMvWVxcbnZpaVxcbnZpaWlcXG52aWtpbmcvTVNcXG52aWxlL1lUUFJcXG52aWxlbmVzcy9NXFxudmlsaWZpY2F0aW9uL01cXG52aWxpZnkvRFNOR1xcbnZpbGxhL1NNXFxudmlsbGFnZS9SU01aXFxudmlsbGFnZXIvTVxcbnZpbGxhaW4vU01cXG52aWxsYWlub3VzXFxudmlsbGFpbnkvU01cXG52aWxsZWluL1NNXFxudmlsbGVpbmFnZS9NXFxudmlsbGlcXG52aWxsdXMvTVxcbnZpbS9NXFxudmluYWlncmV0dGUvTVxcbnZpbmNpYmxlL0lcXG52aW5kaWNhdGUvWERTR05cXG52aW5kaWNhdGlvbi9NXFxudmluZGljYXRvci9NU1xcbnZpbmRpY3RpdmUvUFlcXG52aW5kaWN0aXZlbmVzcy9NXFxudmluZS9NU1xcbnZpbmVnYXIvTVxcbnZpbmVnYXJ5XFxudmluZXlhcmQvTVNcXG52aW5vL01cXG52aW5vdXNcXG52aW50YWdlL01TXFxudmludG5lci9NU1xcbnZpbnlsL1NNXFxudmlvbC9NQlNcXG52aW9sYS9TTVxcbnZpb2xhYmxlL0lcXG52aW9sYXRlL0dORFNYXFxudmlvbGF0aW9uL01cXG52aW9sYXRvci9TTVxcbnZpb2xlbmNlL01cXG52aW9sZW50L1lcXG52aW9sZXQvTVNcXG52aW9saW4vTVNcXG52aW9saW5jZWxsby9TXFxudmlvbGluaXN0L1NNXFxudmlvbGlzdC9NU1xcbnZpb2xvbmNlbGxpc3QvU01cXG52aW9sb25jZWxsby9NU1xcbnZpcGVyL1NNXFxudmlwZXJvdXNcXG52aXJhZ28vTVxcbnZpcmFnb2VzXFxudmlyYWxcXG52aXJlby9TTVxcbnZpcmdpbi9NU1xcbnZpcmdpbmFsL1NNXFxudmlyZ2luaXR5L01cXG52aXJndWxlL01TXFxudmlyaWxlXFxudmlyaWxpdHkvTVxcbnZpcm9sb2dpc3QvU01cXG52aXJvbG9neS9NXFxudmlydHVhbC9ZXFxudmlydHVhbGl6YXRpb25cXG52aXJ0dWUvU01cXG52aXJ0dW9zaXR5L01cXG52aXJ0dW9zby9NXFxudmlydHVvdXMvWVBcXG52aXJ0dW91c25lc3MvTVxcbnZpcnVsZW5jZS9NXFxudmlydWxlbnQvWVxcbnZpcnVzL01TXFxudmlzYS9NRFNHXFxudmlzYWdlL01TXFxudmlzY2VyYVxcbnZpc2NlcmFsL1lcXG52aXNjaWRcXG52aXNjb3NlL01cXG52aXNjb3NpdHkvTVxcbnZpc2NvdW50L1NNXFxudmlzY291bnRjeS9TTVxcbnZpc2NvdW50ZXNzL01TXFxudmlzY291c1xcbnZpc2N1cy9NXFxudmlzZS9BQ01HRFNcXG52aXNpYmlsaXR5L0lNXFxudmlzaWJsZS9JXFxudmlzaWJseS9JXFxudmlzaW9uL0tHRFNNXFxudmlzaW9uYXJ5L1NNXFxudmlzaXQnc1xcbnZpc2l0L0FTR0RcXG52aXNpdGFudC9NU1xcbnZpc2l0YXRpb24vTVNcXG52aXNpdG9yL01TXFxudmlzb3IvU01cXG52aXN0YS9TTVxcbnZpc3VhbC9TTVlcXG52aXN1YWxpemF0aW9uL1NNXFxudmlzdWFsaXplL0RSU1pHXFxudmlzdWFsaXplci9NXFxudml0YS9NXFxudml0YWVcXG52aXRhbC9TWVxcbnZpdGFsaXR5L01cXG52aXRhbGl6YXRpb24vQU1cXG52aXRhbGl6ZS9DQUdTRFxcbnZpdGFscy9NXFxudml0YW1pbi9NU1xcbnZpdGlhdGUvR05EU1xcbnZpdGlhdGlvbi9NXFxudml0aWN1bHR1cmUvTVxcbnZpdGljdWx0dXJpc3QvTVNcXG52aXRyZW91c1xcbnZpdHJpZmFjdGlvbi9NXFxudml0cmlmaWNhdGlvbi9NXFxudml0cmlmeS9HTkRTXFxudml0cmluZS9TTVxcbnZpdHJpb2wvTVxcbnZpdHJpb2xpY1xcbnZpdHJpb2xpY2FsbHlcXG52aXR0bGVzL01cXG52aXR1cGVyYXRlL0dOVkRTXFxudml0dXBlcmF0aW9uL01cXG52aXZhL01TXFxudml2YWNlXFxudml2YWNpb3VzL1BZXFxudml2YWNpb3VzbmVzcy9NXFxudml2YWNpdHkvTVxcbnZpdmFyaWFcXG52aXZhcml1bS9TTVxcbnZpdmlkL1JZVFBcXG52aXZpZG5lc3MvTVxcbnZpdmlmeS9BRFNHXFxudml2aXBhcm91c1xcbnZpdmlzZWN0L0RHU1xcbnZpdmlzZWN0aW9uL01cXG52aXZpc2VjdGlvbmFsXFxudml2aXNlY3Rpb25pc3QvU01cXG52aXhlbi9TTVxcbnZpeGVuaXNoL1lcXG52aXpcXG52aXppZXIvU01cXG52bGZcXG52b2NhYlxcbnZvY2FibGUvTVNcXG52b2NhYnVsYXJ5L1NNXFxudm9jYWwvU01ZXFxudm9jYWxpY1xcbnZvY2FsaXN0L1NNXFxudm9jYWxpemF0aW9uL01TXFxudm9jYWxpemUvRFNHXFxudm9jYXRpb24vRklLQVNNXFxudm9jYXRpb25hbC9ZXFxudm9jYXRpdmUvTVNcXG52b2NpZmVyYXRlL0RTR05cXG52b2NpZmVyYXRpb24vTVxcbnZvY2lmZXJvdXMvWVBcXG52b2NpZmVyb3VzbmVzcy9NXFxudm9ka2EvU01cXG52b2d1ZS9TTVxcbnZvZ3Vpc2hcXG52b2ljZS9JRFNNR1xcbnZvaWNlZC9VXFxudm9pY2VsZXNzL1BZXFxudm9pY2VsZXNzbmVzcy9NXFxudm9pY2VtYWlsL1NNXFxudm9pZC9NRFNHQlxcbnZvaWxhXFxudm9pbGUvTVxcbnZvbC9TXFxudm9sYXRpbGVcXG52b2xhdGlsaXR5L01cXG52b2xhdGlsaXplL0RTR1xcbnZvbGNhbmljXFxudm9sY2FuaXNtXFxudm9sY2Fuby9NXFxudm9sY2Fub2VzXFxudm9sZS9NU1xcbnZvbGl0aW9uL01cXG52b2xpdGlvbmFsXFxudm9sbGV5L0dTTURcXG52b2xsZXliYWxsL01TXFxudm9sdC9BTVNcXG52b2x0YWdlL01TXFxudm9sdGFpY1xcbnZvbHRtZXRlci9TTVxcbnZvbHViaWxpdHkvTVxcbnZvbHVibGVcXG52b2x1Ymx5XFxudm9sdW1lL1NNXFxudm9sdW1ldHJpY1xcbnZvbHVtaW5vdXMvWVBcXG52b2x1bWlub3VzbmVzcy9NXFxudm9sdW50YXJpbHkvSVxcbnZvbHVudGFyaXNtL01cXG52b2x1bnRhcnkvU01cXG52b2x1bnRlZXIvU0dNRFxcbnZvbHVudGVlcmlzbS9NXFxudm9sdXB0dWFyeS9TTVxcbnZvbHVwdHVvdXMvUFlcXG52b2x1cHR1b3VzbmVzcy9NXFxudm9sdXRlL1NNXFxudm9taXQvU01ER1xcbnZvb2Rvby9HU01EXFxudm9vZG9vaXNtL01cXG52b3JhY2lvdXMvUFlcXG52b3JhY2lvdXNuZXNzL01cXG52b3JhY2l0eS9NXFxudm9ydGV4L01TXFxudm90YXJ5L1NNXFxudm90ZSdzXFxudm90ZS9DR1ZEU1xcbnZvdGVyL1NNXFxudm91Y2gvRFJTWkdcXG52b3VjaGVyL01cXG52b3VjaHNhZmUvRFNHXFxudm93L1NHTURcXG52b3dlbC9TTVxcbnZveWFnZS9NWkdEUlNcXG52b3lhZ2VyL01cXG52b3lhZ2V1ci9TTVxcbnZveWV1ci9NU1xcbnZveWV1cmlzbS9NXFxudm95ZXVyaXN0aWNcXG52dWxjYW5pemF0aW9uL01cXG52dWxjYW5pemUvR0RTXFxudnVsZ2FyL1JZVFxcbnZ1bGdhcmlhbi9NU1xcbnZ1bGdhcmlzbS9NU1xcbnZ1bGdhcml0eS9TTVxcbnZ1bGdhcml6YXRpb24vTVxcbnZ1bGdhcml6ZS9aR0RSU1xcbnZ1bGdhcml6ZXIvTVxcbnZ1bG5lcmFiaWxpdGllc1xcbnZ1bG5lcmFiaWxpdHkvSU1cXG52dWxuZXJhYmxlL0lcXG52dWxuZXJhYmx5L0lcXG52dWxwaW5lXFxudnVsdHVyZS9TTVxcbnZ1bHR1cm91c1xcbnZ1bHZhL01cXG52dWx2YWVcXG52dXZ1emVsYS9NU1xcbnZ5aW5nXFxudy9ETlhUR1ZKXFxud2FiYml0L1NcXG53YWNrL01SVFNcXG53YWNraW5lc3MvTVxcbndhY2tvL1NNXFxud2Fja3kvUlBUXFxud2FkL1NaR01EUlxcbndhZGRlZFxcbndhZGRpbmcvTVxcbndhZGRsZS9EU01HXFxud2FkZS9NU1xcbndhZGVyL01cXG53YWRlcnMvTVxcbndhZGdlL1NcXG53YWRpL01TXFxud2FmZXIvU01cXG53YWZmbGUvTVpHRFJTXFxud2FmZmxlci9NXFxud2FmdC9NREdTXFxud2FnL1NaR01EUlxcbndhZ2UvTVNcXG53YWdlZC9VXFxud2FnZXIvWkdNRFJcXG53YWdlcmVyL01cXG53YWdnZWRcXG53YWdnZXJ5L1NNXFxud2FnZ2luZ1xcbndhZ2dpc2gvWVBcXG53YWdnaXNobmVzcy9NXFxud2FnZ2xlL01HRFNcXG53YWdvbi9aU01SXFxud2Fnb25lci9NXFxud2FndGFpbC9TTVxcbndhaWYvTVNcXG53YWlsL01EUlpHU1xcbndhaWxlci9NXFxud2FpbGluZy9NXFxud2Fpbi9NU1xcbndhaW5zY290L1NKTURHXFxud2FpbnNjb3RpbmcvTVxcbndhaW53cmlnaHQvTVNcXG53YWlzdC9TTVxcbndhaXN0YmFuZC9NU1xcbndhaXN0Y29hdC9NU1xcbndhaXN0bGluZS9NU1xcbndhaXQvTURSWkdTXFxud2FpdGVyL01cXG53YWl0aW5nL01cXG53YWl0cGVyc29uL01TXFxud2FpdHJlc3MvTVNcXG53YWl0c3RhZmYvTVxcbndhaXZlL0RSU1pHXFxud2FpdmVyL01cXG53YWtlL01HSkRTXFxud2FrZWZ1bC9QWVxcbndha2VmdWxuZXNzL01cXG53YWtlbi9HU0RcXG53YWxkby9TXFxud2FsZG9lc1xcbndhbGUvTUdEU1xcbndhbGsvTURSWkdTXFxud2Fsa2Fib3V0L1NcXG53YWxrYXdheS9NU1xcbndhbGtlci9NXFxud2Fsa2llc1xcbndhbGtpbmcvTVxcbndhbGtvdXQvU01cXG53YWxrb3Zlci9NU1xcbndhbGt3YXkvU01cXG53YWxsL01ER1NcXG53YWxsYWJ5L1NNXFxud2FsbGFoXFxud2FsbGFoc1xcbndhbGxib2FyZC9NXFxud2FsbGV0L01TXFxud2FsbGV5ZS9EU01cXG53YWxsZmxvd2VyL01TXFxud2FsbG9wL01EU0pHXFxud2FsbG9waW5nL01cXG53YWxsb3cvTURTR1xcbndhbGxwYXBlci9TTURHXFxud2FsbHkvU1xcbndhbG51dC9NU1xcbndhbHJ1cy9NU1xcbndhbHR6L1pHTURSU1xcbndhbHR6ZXIvTVxcbndhbXB1bS9NXFxud2FuL0dQRFlcXG53YW5kL01TXFxud2FuZGVyL0RSU0paR1xcbndhbmRlcmVyL01cXG53YW5kZXJpbmdzL01cXG53YW5kZXJsdXN0L1NNXFxud2FuZS9NU1xcbndhbmdsZS9NWkdEUlNcXG53YW5nbGVyL01cXG53YW5rL0RSWkdTXFxud2FubmFcXG53YW5uYWJlL1NNXFxud2FubmFiZWUvU1xcbndhbm5lclxcbndhbm5lc3MvTVxcbndhbm5lc3RcXG53YW50L01ER1NcXG53YW50ZWQvVVxcbndhbnRvbi9NRFlTUEdcXG53YW50b25uZXNzL01cXG53YXBpdGkvTVNcXG53YXIvU01cXG53YXJibGUvTVpHRFJTXFxud2FyYmxlci9NXFxud2FyYm9ubmV0L1NNXFxud2FyZC9BTURHU1xcbndhcmRlbi9NU1xcbndhcmRlci9NU1xcbndhcmRyZXNzL1NcXG53YXJkcm9iZS9TTVxcbndhcmRyb29tL1NNXFxud2FyZS9NU1xcbndhcmVob3VzZS9EU01HXFxud2FyZXpcXG53YXJmYXJlL01cXG53YXJmYXJpblxcbndhcmhlYWQvTVNcXG53YXJob3JzZS9TTVxcbndhcmlseS9VXFxud2FyaW5lc3MvVU1cXG53YXJsaWtlXFxud2FybG9jay9NU1xcbndhcmxvcmQvTVNcXG53YXJtL1BEUllIWlRHU1xcbndhcm1ibG9vZGVkXFxud2FybWVyL01cXG53YXJtaGVhcnRlZC9QXFxud2FybWhlYXJ0ZWRuZXNzL01cXG53YXJtaXNoXFxud2FybW5lc3MvTVxcbndhcm1vbmdlci9TTUdcXG53YXJtb25nZXJpbmcvTVxcbndhcm10aC9NXFxud2Fybi9KREdTXFxud2FybmluZy9NXFxud2FycC9NREdTXFxud2FycGFpbnRcXG53YXJwYXRoL01cXG53YXJwYXRoc1xcbndhcnBsYW5lL01TXFxud2FycmFudC9HTURTXFxud2FycmFudGVkL1VcXG53YXJyYW50eS9EU01HXFxud2FycmVkXFxud2FycmVuL01TXFxud2FycmluZ1xcbndhcnJpb3IvU01cXG53YXJzaGlwL1NNXFxud2FydC9NU1xcbndhcnRob2cvU01cXG53YXJ0aW1lL01cXG53YXJ0eS9UUlxcbndhcnkvVVBSVFxcbndhc1xcbndhc2FiaVxcbndhc2gvQkpNRFJTWkdcXG53YXNoYWJsZS9TTVxcbndhc2hiYXNpbi9TTVxcbndhc2hib2FyZC9TTVxcbndhc2hib3dsL1NNXFxud2FzaGNsb3RoL01cXG53YXNoY2xvdGhzXFxud2FzaGVkL1VcXG53YXNoZXIvTVxcbndhc2hlcndvbWFuL01cXG53YXNoZXJ3b21lblxcbndhc2hpbmcvTVxcbndhc2hvdXQvTVNcXG53YXNocmFnL01TXFxud2FzaHJvb20vTVNcXG53YXNoc3RhbmQvU01cXG53YXNodHViL01TXFxud2FzaHkvVFJcXG53YXNuJ3RcXG53YXNwL01TXFxud2FzcGlzaC9ZUFxcbndhc3Bpc2huZXNzL01cXG53YXNzYWlsL1NNREdcXG53YXN0XFxud2FzdGFnZS9NXFxud2FzdGUvRFJTTVpHXFxud2FzdGViYXNrZXQvTVNcXG53YXN0ZWZ1bC9QWVxcbndhc3RlZnVsbmVzcy9NXFxud2FzdGVsYW5kL1NNXFxud2FzdGVwYXBlci9NXFxud2FzdGVyL01cXG53YXN0ZXdhdGVyXFxud2FzdHJlbC9TTVxcbndhdGNoL0JaR01EUlNcXG53YXRjaGFibGUvVVxcbndhdGNoYmFuZC9NU1xcbndhdGNoZG9nL1NNXFxud2F0Y2hlci9NXFxud2F0Y2hmdWwvWVBcXG53YXRjaGZ1bG5lc3MvTVxcbndhdGNobWFrZXIvTVNcXG53YXRjaG1ha2luZy9NXFxud2F0Y2htYW4vTVxcbndhdGNobWVuXFxud2F0Y2hzdHJhcC9TXFxud2F0Y2h0b3dlci9TTVxcbndhdGNod29yZC9NU1xcbndhdGVyL0dTTURcXG53YXRlcmJlZC9NU1xcbndhdGVyYmlyZC9TTVxcbndhdGVyYm9hcmQvTURKU0dcXG53YXRlcmJvYXJkaW5nL01cXG53YXRlcmJvcm5lXFxud2F0ZXJjb2xvci9NU1xcbndhdGVyY291cnNlL1NNXFxud2F0ZXJjcmFmdC9NXFxud2F0ZXJjcmVzcy9NXFxud2F0ZXJmYWxsL1NNXFxud2F0ZXJmb3dsL1NNXFxud2F0ZXJmcm9udC9NU1xcbndhdGVyaG9sZS9TTVxcbndhdGVyaW5lc3MvTVxcbndhdGVybGlseS9TTVxcbndhdGVybGluZS9NU1xcbndhdGVybG9nZ2VkXFxud2F0ZXJtYXJrL01ER1NcXG53YXRlcm1lbG9uL1NNXFxud2F0ZXJtaWxsL01TXFxud2F0ZXJwcm9vZi9TTURHXFxud2F0ZXJwcm9vZmluZy9NXFxud2F0ZXJzL01cXG53YXRlcnNoZWQvTVNcXG53YXRlcnNpZGUvTVNcXG53YXRlcnNwb3V0L1NNXFxud2F0ZXJ0aWdodFxcbndhdGVyd2F5L01TXFxud2F0ZXJ3aGVlbC9TTVxcbndhdGVyd29ya3MvTVxcbndhdGVyeS9QVFJcXG53YXR0L01TXFxud2F0dGFnZS9NXFxud2F0dGxlL01HRFNcXG53YXZlL01aR0RSU1xcbndhdmViYW5kL1NcXG53YXZlZm9ybVxcbndhdmVmcm9udFxcbndhdmVsZW5ndGgvTVxcbndhdmVsZW5ndGhzXFxud2F2ZWxldC9TTVxcbndhdmVsaWtlXFxud2F2ZXIvWkdNRFJcXG53YXZlcmVyL01cXG53YXZlcmluZy9ZXFxud2F2aW5lc3MvTVxcbndhdnkvUFJUXFxud2F4L0dNRE5TXFxud2F4aW5lc3MvTVxcbndheHdpbmcvU01cXG53YXh3b3JrL1NNXFxud2F4eS9SUFRcXG53YXkvU01cXG53YXliaWxsL1NNXFxud2F5ZmFyZXIvTVNcXG53YXlmYXJpbmcvU01cXG53YXlsYWlkXFxud2F5bGF5L1JTWkdcXG53YXlsYXllci9NXFxud2F5c2lkZS9TTVxcbndheXdhcmQvUFlcXG53YXl3YXJkbmVzcy9NXFxud2F6b28vU1xcbndlXFxud2UnZFxcbndlJ2xsXFxud2UncmVcXG53ZSd2ZVxcbndlYWsvUE5SWVhUXFxud2Vha2VuL0RSWkdcXG53ZWFrZW5lci9NXFxud2Vha2Zpc2gvTVNcXG53ZWFraXNoXFxud2Vha2xpbmcvU01cXG53ZWFrbmVzcy9NU1xcbndlYWwvTUhTXFxud2VhbHRoL01cXG53ZWFsdGhpbmVzcy9NXFxud2VhbHRoeS9UUlBcXG53ZWFuL0RHU1xcbndlYXBvbi9NU1xcbndlYXBvbml6ZS9HRFNcXG53ZWFwb25sZXNzXFxud2VhcG9ucnkvTVxcbndlYXIvTVJCSlNaR1xcbndlYXJhYmxlL1VcXG53ZWFyZXIvTVxcbndlYXJpZWQvVVxcbndlYXJpbHlcXG53ZWFyaW5lc3MvTVxcbndlYXJpc29tZS9ZXFxud2VhcnkvVEdEUlNQXFxud2Vhc2VsL01EWVNHXFxud2VhdGhlci9TTURHXFxud2VhdGhlcmJvYXJkL1NHXFxud2VhdGhlcmNvY2svTVNcXG53ZWF0aGVyaW5nL01cXG53ZWF0aGVyaXphdGlvbi9NXFxud2VhdGhlcml6ZS9EU0dcXG53ZWF0aGVybWFuL01cXG53ZWF0aGVybWVuXFxud2VhdGhlcnBlcnNvbi9NU1xcbndlYXRoZXJwcm9vZi9HU0RcXG53ZWF0aGVyc3RyaXAvU1xcbndlYXRoZXJzdHJpcHBlZFxcbndlYXRoZXJzdHJpcHBpbmcvTVxcbndlYXZlL0RSU01aR1xcbndlYXZlci9NXFxud2VhdmluZy9NXFxud2ViL1NNXFxud2ViYmVkXFxud2ViYmluZy9NXFxud2ViY2FtL01TXFxud2ViY2FzdC9TTUdcXG53ZWJmZWV0XFxud2ViZm9vdC9NXFxud2ViaW5hci9TTVxcbndlYmlzb2RlL01TXFxud2VibG9nL01TXFxud2VibWFzdGVyL1NNXFxud2VibWlzdHJlc3MvTVNcXG53ZWJzaXRlL1NNXFxud2VkL0FTXFxud2VkZGVkL0FcXG53ZWRkZXJcXG53ZWRkaW5nL1NNXFxud2VkZ2UvRFNNR1xcbndlZGdpZS9NU1xcbndlZGxvY2svTVxcbndlZS9SU01UXFxud2VlZC9NRFJTWkdcXG53ZWVkZXIvTVxcbndlZWRraWxsZXIvU1xcbndlZWRsZXNzXFxud2VlZHkvVFJcXG53ZWVpbmdcXG53ZWVrL01ZU1xcbndlZWtkYXkvU01cXG53ZWVrZW5kL1NaR01EUlxcbndlZWtseS9TTVxcbndlZWtuaWdodC9TTVxcbndlZW4vRFNHXFxud2VlbmllL01UUlNcXG53ZWVuc3kvUlRcXG53ZWVueVxcbndlZXAvTVJKU1pHXFxud2VlcGVyL01cXG53ZWVwaWVcXG53ZWVweS9UUlNNXFxud2VldmlsL01TXFxud2VmdC9NU1xcbndlaWdoJ3NcXG53ZWlnaC9BR0RcXG53ZWlnaGJyaWRnZS9TXFxud2VpZ2hzL0FcXG53ZWlnaHQvTURTSkdcXG53ZWlnaHRlZC9VXFxud2VpZ2h0aWx5XFxud2VpZ2h0aW5lc3MvTVxcbndlaWdodGxlc3MvWVBcXG53ZWlnaHRsZXNzbmVzcy9NXFxud2VpZ2h0bGlmdGVyL01TXFxud2VpZ2h0bGlmdGluZy9NXFxud2VpZ2h0eS9QVFJcXG53ZWlyL01TXFxud2VpcmQvUFRSWVxcbndlaXJkaWUvTVNcXG53ZWlyZG5lc3MvTVxcbndlaXJkby9NU1xcbndlbGNvbWUvTUdEU1xcbndlbGQvTURSQlNaR1xcbndlbGRlci9NXFxud2VsZmFyZS9NXFxud2Vsa2luL01cXG53ZWxsL01EUFNHXFxud2VsbGhlYWQvU01cXG53ZWxsaWVcXG53ZWxsaW5ndG9uL01TXFxud2VsbG5lc3MvTVxcbndlbGxzcHJpbmcvTVNcXG53ZWxseS9TXFxud2Vsc2gvWkdEUlNcXG53ZWxzaGVyL01cXG53ZWx0L01EUlNaR1xcbndlbHRlci9HTURcXG53ZWx0ZXJ3ZWlnaHQvU01cXG53ZW4vTVxcbndlbmNoL01TXFxud2VuZC9EU0dcXG53ZW50XFxud2VwdFxcbndlcmVcXG53ZXJlbid0XFxud2VyZXdvbGYvTVxcbndlcmV3b2x2ZXNcXG53ZXN0L01cXG53ZXN0Ym91bmRcXG53ZXN0ZXJseS9TTVxcbndlc3Rlcm4vU1pNUlxcbndlc3Rlcm5lci9NXFxud2VzdGVybml6YXRpb24vTVxcbndlc3Rlcm5pemUvR0RTXFxud2VzdGVybm1vc3RcXG53ZXN0d2FyZC9TXFxud2V0L1NNWVBcXG53ZXRiYWNrL1NNXFxud2V0bGFuZC9TTVxcbndldG5lc3MvTVxcbndldHRlci9TTVxcbndldHRlc3RcXG53ZXR0aW5nXFxud2V0d2FyZS9TXFxud2hhY2svU0paR01EUlxcbndoYWNrZXIvTVxcbndoYWxlL0RSU01aR1xcbndoYWxlYm9hdC9NU1xcbndoYWxlYm9uZS9NXFxud2hhbGVyL01cXG53aGFsaW5nL01cXG53aGFtL01TXFxud2hhbW1lZFxcbndoYW1taW5nXFxud2hhbW15L1NNXFxud2hhcmYvTVxcbndoYXJ2ZXNcXG53aGF0L01TXFxud2hhdGNoYW1hY2FsbGl0L01TXFxud2hhdGV2ZXJcXG53aGF0bm90L01cXG53aGF0c2hlcm5hbWVcXG53aGF0c2hpc25hbWVcXG53aGF0c2l0L1NcXG53aGF0c29ldmVyXFxud2hlYWwvU01cXG53aGVhdC9NTlxcbndoZWF0Z2VybVxcbndoZWF0bWVhbFxcbndoZWVcXG53aGVlZGxlL0RSU1pHXFxud2hlZWRsZXIvTVxcbndoZWVsL1NNRFJHXFxud2hlZWxiYXJyb3cvU01cXG53aGVlbGJhc2UvU01cXG53aGVlbGNoYWlyL1NNXFxud2hlZWxob3VzZS9NU1xcbndoZWVsaWUvU01cXG53aGVlbHdyaWdodC9NU1xcbndoZWV6ZS9EU01HXFxud2hlZXppbHlcXG53aGVlemluZXNzL01cXG53aGVlenkvUFJUXFxud2hlbGsvU01EXFxud2hlbG0vU0RHXFxud2hlbHAvU01ER1xcbndoZW4vTVNcXG53aGVuY2VcXG53aGVuZXZlclxcbndoZW5zb2V2ZXJcXG53aGVyZS9TTVxcbndoZXJlYWJvdXRzL01cXG53aGVyZWFzXFxud2hlcmVhdFxcbndoZXJlYnlcXG53aGVyZWZvcmUvTVNcXG53aGVyZWluXFxud2hlcmVvZlxcbndoZXJlb25cXG53aGVyZXNvZXZlclxcbndoZXJldG9cXG53aGVyZXVwb25cXG53aGVyZXZlclxcbndoZXJld2l0aFxcbndoZXJld2l0aGFsL01cXG53aGVycnkvU01cXG53aGV0L1NcXG53aGV0aGVyXFxud2hldHN0b25lL1NNXFxud2hldHRlZFxcbndoZXR0aW5nXFxud2hld1xcbndoZXkvTVxcbndoaWNoXFxud2hpY2hldmVyXFxud2hpZmYvU01ER1xcbndoaWZmbGV0cmVlL01TXFxud2hpbGUvRFNNR1xcbndoaWxvbVxcbndoaWxzdFxcbndoaW0vTVNcXG53aGltcGVyL01ER1NcXG53aGltc2ljYWwvWVxcbndoaW1zaWNhbGl0eS9NXFxud2hpbXN5L1NNXFxud2hpbmUvRFJTTVpHXFxud2hpbmVyL01cXG53aGluZ2UvRFJTWkdcXG53aGluZ2VpbmdcXG53aGlubnkvR0RTTVxcbndoaW55L1JUXFxud2hpcC9NU1xcbndoaXBjb3JkL01cXG53aGlwbGFzaC9NU1xcbndoaXBwZWRcXG53aGlwcGVyL01TXFxud2hpcHBlcnNuYXBwZXIvTVNcXG53aGlwcGV0L01TXFxud2hpcHBpbmcvU01cXG53aGlwcGxldHJlZS9TTVxcbndoaXBwb29yd2lsbC9NU1xcbndoaXBzYXcvTURHU1xcbndoaXIvTVNcXG53aGlybC9TTURHXFxud2hpcmxpZ2lnL01TXFxud2hpcmxwb29sL01TXFxud2hpcmx3aW5kL01TXFxud2hpcmx5YmlyZC9TTVxcbndoaXJyZWRcXG53aGlycmluZ1xcbndoaXNrL1NNRFJaR1xcbndoaXNrZXIvTURcXG53aGlza2VyeVxcbndoaXNrZXkvTVNcXG53aGlza3lzXFxud2hpc3Blci9NRFJTWkdcXG53aGlzcGVyZXIvTVxcbndoaXN0L01cXG53aGlzdGxlL01aR0RSU1xcbndoaXN0bGVyL01cXG53aGl0L01ETlJTWFRHSlxcbndoaXRlL1NQTVxcbndoaXRlYmFpdFxcbndoaXRlYm9hcmQvU1xcbndoaXRlY2FwL1NNXFxud2hpdGVmaXNoL01TXFxud2hpdGVoZWFkL01TXFxud2hpdGVsaXN0L0dEU1xcbndoaXRlbi9aR0RSSlxcbndoaXRlbmVyL01cXG53aGl0ZW5lc3MvTVxcbndoaXRlbmluZy9NXFxud2hpdGVvdXQvU01cXG53aGl0ZXRhaWwvTVNcXG53aGl0ZXdhbGwvU01cXG53aGl0ZXdhc2gvTURTR1xcbndoaXRld2F0ZXIvTVxcbndoaXRleS9TTVxcbndoaXRoZXJcXG53aGl0aW5nL01cXG53aGl0aXNoXFxud2hpdHRsZS9aR0RSU1xcbndoaXR0bGVyL01cXG53aGl6L01cXG53aGl6a2lkL01cXG53aGl6emJhbmcvTVNcXG53aGl6emVkXFxud2hpenplc1xcbndoaXp6aW5nXFxud2hvJ2RcXG53aG8nbGxcXG53aG8ncmVcXG53aG8ndmVcXG53aG8vTVxcbndob2FcXG53aG9kdW5pdC9NU1xcbndob2V2ZXJcXG53aG9sZS9TTVBcXG53aG9sZWZvb2QvU1xcbndob2xlZ3JhaW5cXG53aG9sZWhlYXJ0ZWQvWVBcXG53aG9sZWhlYXJ0ZWRuZXNzL01cXG53aG9sZW1lYWxcXG53aG9sZW5lc3MvTVxcbndob2xlc2FsZS9NWkdEUlNcXG53aG9sZXNhbGVyL01cXG53aG9sZXNvbWUvVVBcXG53aG9sZXNvbWVseVxcbndob2xlc29tZW5lc3MvVU1cXG53aG9sZXdoZWF0XFxud2hvbGx5XFxud2hvbVxcbndob21ldmVyXFxud2hvbXNvZXZlclxcbndob29wL1NNRFJaR1xcbndob29wZWUvU1xcbndob29wZXIvTVxcbndob29zaC9NRFNHXFxud2hvcC9TXFxud2hvcHBlZFxcbndob3BwZXIvU01cXG53aG9wcGluZ1xcbndob3JlL1NNR1xcbndob3JlaG91c2UvTVNcXG53aG9yZWlzaFxcbndob3Jpc2hcXG53aG9ybC9TTURcXG53aG9zZVxcbndob3NvXFxud2hvc29ldmVyXFxud2h1cC9TXFxud2h1cHBlZFxcbndodXBwaW5nXFxud2h5J2RcXG53aHkvTVxcbndoeXNcXG53aWNrL01EUlNaXFxud2lja2VkL1RQUllcXG53aWNrZWRuZXNzL01cXG53aWNrZXIvTVxcbndpY2tlcndvcmsvTVxcbndpY2tldC9TTVxcbndpZGUvWVRSUFxcbndpZGVtb3V0aGVkXFxud2lkZW4vU0RSWkdcXG53aWRlbmVyL01cXG53aWRlbmVzcy9NXFxud2lkZXNjcmVlbi9NU1xcbndpZGVzcHJlYWRcXG53aWRnZXQvU1xcbndpZG93L1NNRFJaR1xcbndpZG93ZXIvTVxcbndpZG93aG9vZC9NXFxud2lkdGgvTVxcbndpZHRoc1xcbndpZWxkL1NEUlpHXFxud2llbGRlci9NXFxud2llbmVyL1NNXFxud2llbmllL1NNXFxud2lmZS9NWVxcbndpZmVsZXNzXFxud2lnL1NNXFxud2lnZW9uL01cXG53aWdnZWRcXG53aWdnaW5nXFxud2lnZ2xlL0RSU01aR1xcbndpZ2dsZXIvTVxcbndpZ2dseS9UUlxcbndpZ2h0L1NNXFxud2lnbGV0L1NNXFxud2lnd2FnL1NNXFxud2lnd2FnZ2VkXFxud2lnd2FnZ2luZ1xcbndpZ3dhbS9TTVxcbndpa2kvTVNcXG53aWxkL01SWVNUUFxcbndpbGRjYXJkL01TXFxud2lsZGNhdC9NU1xcbndpbGRjYXR0ZWRcXG53aWxkY2F0dGVyL01TXFxud2lsZGNhdHRpbmdcXG53aWxkZWJlZXN0L01TXFxud2lsZGVybmVzcy9NU1xcbndpbGRmaXJlL01TXFxud2lsZGZsb3dlci9TTVxcbndpbGRmb3dsL01cXG53aWxkbGlmZS9NXFxud2lsZG5lc3MvTVxcbndpbGRzL01cXG53aWxlL01HRFNcXG53aWxpbmVzcy9NXFxud2lsbC9NRFNcXG53aWxsZnVsL1BZXFxud2lsbGZ1bG5lc3MvTVxcbndpbGxpZXMvTVxcbndpbGxpbmcvVVBZXFxud2lsbGluZ25lc3MvVU1cXG53aWxsaXdhdy9NU1xcbndpbGxvdy9TTVxcbndpbGxvd3lcXG53aWxscG93ZXIvTVxcbndpbGx5L1NcXG53aWx0L01EU0dcXG53aWx5L1JUUFxcbndpbXAvTURTR1xcbndpbXBpc2hcXG53aW1wbGUvRFNNR1xcbndpbXB5L1JUXFxud2luL1NHTURcXG53aW5jZS9EU01HXFxud2luY2gvTURTR1xcbndpbmQnc1xcbndpbmQvVUFTR1xcbndpbmRiYWcvU01cXG53aW5kYmxvd25cXG53aW5kYnJlYWsvU1pNUlxcbndpbmRicmVha2VyL01cXG53aW5kYnVybi9NRFxcbndpbmRjaGVhdGVyL1NcXG53aW5kY2hpbGwvTVxcbndpbmRlZFxcbndpbmRlci9TTVxcbndpbmRmYWxsL01TXFxud2luZGZsb3dlci9NU1xcbndpbmRpbHlcXG53aW5kaW5lc3MvTVxcbndpbmRpbmcnc1xcbndpbmRqYW1tZXIvU01cXG53aW5kbGFzcy9NU1xcbndpbmRsZXNzXFxud2luZG1pbGwvTURHU1xcbndpbmRvdy9TTURHXFxud2luZG93bGVzc1xcbndpbmRvd3BhbmUvU01cXG53aW5kb3dzaWxsL1NNXFxud2luZHBpcGUvTVNcXG53aW5kcHJvb2ZcXG53aW5kcm93L1NNXFxud2luZHNjcmVlbi9TTVxcbndpbmRzaGllbGQvU01cXG53aW5kc29jay9NU1xcbndpbmRzdG9ybS9NU1xcbndpbmRzdXJmL1pHRFJTXFxud2luZHN1cmZlci9NXFxud2luZHN1cmZpbmcvTVxcbndpbmRzd2VwdFxcbndpbmR1cC9TTVxcbndpbmR3YXJkL01cXG53aW5keS9SVFBcXG53aW5lL01TXFxud2luZWdsYXNzL01TXFxud2luZWdyb3dlci9NU1xcbndpbmVtYWtlci9NU1xcbndpbmVyeS9TTVxcbndpbmcvTURSWkdcXG53aW5nZGluZy9NU1xcbndpbmdsZXNzXFxud2luZ2xpa2VcXG53aW5nbnV0L1NNXFxud2luZ3NwYW4vTVNcXG53aW5nc3ByZWFkL1NNXFxud2luZ3RpcC9TTVxcbndpbmsvTURSU1pHXFxud2lua2VyL01cXG53aW5rbGUvRFNNR1xcbndpbm5hYmxlL1VcXG53aW5uZXIvU01cXG53aW5uaW5nL01ZU1xcbndpbm5vdy9aR1NEUlxcbndpbm5vd2VyL01cXG53aW5vL01TXFxud2luc29tZS9ZVFJQXFxud2luc29tZW5lc3MvTVxcbndpbnRlci9HU01EXFxud2ludGVyZ3JlZW4vTVxcbndpbnRlcml6ZS9HRFNcXG53aW50ZXJ0aW1lL01cXG53aW50cnkvVFJcXG53aW55L1JUXFxud2lwZS9NWkdEUlNcXG53aXBlci9NXFxud2lyZSdzXFxud2lyZS9BR0RTXFxud2lyZWQvU1xcbndpcmVoYWlyL01TXFxud2lyZWxlc3MvTVNcXG53aXJldGFwL01TXFxud2lyZXRhcHBlZFxcbndpcmV0YXBwZXIvU01cXG53aXJldGFwcGluZy9NXFxud2lyaW5lc3MvTVxcbndpcmluZy9NXFxud2lyeS9SVFBcXG53aXNkb20vTVxcbndpc2UvTVlUR0RSU1xcbndpc2VhY3JlL1NNXFxud2lzZWNyYWNrL01EU0dcXG53aXNlZ3V5L1NcXG53aXNoL01EUlNaR1xcbndpc2hib25lL1NNXFxud2lzaGVyL01cXG53aXNoZnVsL1lcXG53aXNobGlzdCdzXFxud2lzcC9NU1xcbndpc3B5L1JUXFxud2lzdFxcbndpc3RlcmlhL1NNXFxud2lzdGZ1bC9ZUFxcbndpc3RmdWxuZXNzL01cXG53aXQvU01cXG53aXRjaC9NRFNHXFxud2l0Y2hjcmFmdC9NXFxud2l0Y2hlcnkvTVxcbndpdGhcXG53aXRoYWxcXG53aXRoZHJhdy9TR1xcbndpdGhkcmF3YWwvTVNcXG53aXRoZHJhd25cXG53aXRoZHJld1xcbndpdGhlL0RSU01aR1xcbndpdGhlci9KR0RcXG53aXRoZXJpbmcvWVxcbndpdGhlcnMvTVxcbndpdGhoZWxkXFxud2l0aGhvbGQvU0dcXG53aXRoaG9sZGluZy9NXFxud2l0aGluL01cXG53aXRob3V0XFxud2l0aHN0YW5kL0dTXFxud2l0aHN0b29kXFxud2l0bGVzcy9QWVxcbndpdGxlc3NuZXNzL01cXG53aXRuZXNzL01EU0dcXG53aXRzL01cXG53aXR0ZWRcXG53aXR0ZXIvU0dEXFxud2l0dGljaXNtL1NNXFxud2l0dGlseVxcbndpdHRpbmVzcy9NXFxud2l0dGluZy9VWVxcbndpdHR5L1JQVFxcbndpdmUvR0RTXFxud2l6XFxud2l6YXJkL1NNWVxcbndpemFyZHJ5L01cXG53aXplbmVkXFxud2svWVxcbndvYWQvTVxcbndvYmJsZS9NR0RTXFxud29iYmxpbmVzcy9NXFxud29iYmx5L1JUUFxcbndvZGdlL1NcXG53b2UvU01cXG53b2ViZWdvbmVcXG53b2VmdWwvWVBcXG53b2VmdWxsZXJcXG53b2VmdWxsZXN0XFxud29lZnVsbmVzcy9NXFxud29nL1NcXG53b2svU01OXFxud29rZVxcbndvbGQvTVNcXG53b2xmL01EU0dcXG53b2xmaG91bmQvU01cXG53b2xmaXNoXFxud29sZnJhbS9NXFxud29sdmVyaW5lL1NNXFxud29sdmVzXFxud29tYW4vTVxcbndvbWFuaG9vZC9NXFxud29tYW5pc2hcXG53b21hbml6ZS9EUlNaR1xcbndvbWFuaXplci9NXFxud29tYW5raW5kL01cXG53b21hbmxpa2UvTVxcbndvbWFubGluZXNzL01cXG53b21hbmx5L1JQVFxcbndvbWIvTVNcXG53b21iYXQvTVNcXG53b21ibGUvU1xcbndvbWVuL01cXG53b21lbmZvbGsvU01cXG53b21lbmZvbGtzL01cXG53b24ndFxcbndvbi9NXFxud29uZGVyL01ER0xTXFxud29uZGVyZnVsL1lQXFxud29uZGVyZnVsbmVzcy9NXFxud29uZGVyaW5nL1lcXG53b25kZXJsYW5kL01TXFxud29uZGVybWVudC9NXFxud29uZHJvdXMvWVxcbndvbmsvTVNcXG53b25reS9UUlxcbndvbnQvTURcXG53b250ZWQvVVxcbndvby9TWkdEUlxcbndvb2QvTUROU0dcXG53b29kYmluZS9NXFxud29vZGJsb2NrL01TXFxud29vZGNhcnZlci9NU1xcbndvb2RjYXJ2aW5nL1NNXFxud29vZGNodWNrL01TXFxud29vZGNvY2svU01cXG53b29kY3JhZnQvTVxcbndvb2RjdXQvU01cXG53b29kY3V0dGVyL1NNXFxud29vZGN1dHRpbmcvTVxcbndvb2Rlbi9SWVRQXFxud29vZGVubmVzcy9NXFxud29vZGluZXNzL01cXG53b29kbGFuZC9TTVxcbndvb2RsaWNlXFxud29vZGxvdC9TTVxcbndvb2Rsb3VzZVxcbndvb2RtYW4vTVxcbndvb2RtZW5cXG53b29kcGVja2VyL01TXFxud29vZHBpbGUvU01cXG53b29kcy9NXFxud29vZHNoZWQvU01cXG53b29kc2luZXNzL01cXG53b29kc21hbi9NXFxud29vZHNtZW5cXG53b29kc3kvUlRQXFxud29vZHdpbmQvTVNcXG53b29kd29yay9NUlpHXFxud29vZHdvcmtlci9NXFxud29vZHdvcmtpbmcvTVxcbndvb2R3b3JtL1NcXG53b29keS9UUFJTTVxcbndvb2VyL01cXG53b29mL01EUlNaR1xcbndvb2Zlci9NXFxud29vbC9NTlhcXG53b29sZW4vTVxcbndvb2xnYXRoZXJpbmcvTVxcbndvb2xpbmVzc1xcbndvb2xsaW5lc3MvTVxcbndvb2xseS9SU01QVFxcbndvb3ppbHlcXG53b296aW5lc3MvTVxcbndvb3p5L1RSUFxcbndvcC9TIVxcbndvcmQnc1xcbndvcmQvQURTR1xcbndvcmRhZ2UvTVxcbndvcmRib29rL1NNXFxud29yZGlseVxcbndvcmRpbmVzcy9NXFxud29yZGluZy9TTVxcbndvcmRsZXNzL1lcXG53b3JkcGxheS9NXFxud29yZHNtaXRoXFxud29yZHNtaXRoc1xcbndvcmR5L1RQUlxcbndvcmVcXG53b3JrJ3NcXG53b3JrL0FESlNHXFxud29ya2FibGUvVVxcbndvcmthZGF5XFxud29ya2Fob2xpYy9TTVxcbndvcmthcm91bmQvU1xcbndvcmtiYXNrZXQvU1xcbndvcmtiZW5jaC9NU1xcbndvcmtib29rL01TXFxud29ya2RheS9TTVxcbndvcmtlci9NU1xcbndvcmtmYXJlL01cXG53b3JrZmxvdy9NU1xcbndvcmtmb3JjZS9NXFxud29ya2hvcnNlL1NNXFxud29ya2hvdXNlL1NNXFxud29ya2luZydzXFxud29ya2luZ21hbi9NXFxud29ya2luZ21lblxcbndvcmtpbmdzL01cXG53b3JraW5nd29tYW4vTVxcbndvcmtpbmd3b21lblxcbndvcmtsb2FkL01TXFxud29ya21hbi9NXFxud29ya21hbmxpa2VcXG53b3JrbWFuc2hpcC9NXFxud29ya21hdGUvU1xcbndvcmttZW5cXG53b3Jrb3V0L1NNXFxud29ya3BsYWNlL01TXFxud29ya3Jvb20vTVNcXG53b3Jrcy9NXFxud29ya3NoZWV0L01TXFxud29ya3Nob3AvTVNcXG53b3Jrc2h5XFxud29ya3NpdGUvU1xcbndvcmtzcGFjZVxcbndvcmtzdGF0aW9uL01TXFxud29ya3RhYmxlL01TXFxud29ya3RvcC9TXFxud29ya3VwL01TXFxud29ya3dlZWsvU01cXG53b3JsZC9TTVxcbndvcmxkbGllclxcbndvcmxkbGluZXNzL1VNXFxud29ybGRseS9VVFBcXG53b3JsZHZpZXcvU01cXG53b3JsZHdpZGVcXG53b3JtL01EU0dcXG53b3JtaG9sZS9NU1xcbndvcm13b29kL01cXG53b3JteS9UUlxcbndvcm4vVVxcbndvcnJpZWQvWVxcbndvcnJpZXIvTVxcbndvcnJpbWVudC9NXFxud29ycmlzb21lXFxud29ycnkvWkdEUlNNSlxcbndvcnJ5aW5nL1lcXG53b3JyeXdhcnQvU01cXG53b3JzZS9NXFxud29yc2VuL0RTR1xcbndvcnNoaXAvWkdTTURSXFxud29yc2hpcGVyL01cXG53b3JzaGlwZnVsXFxud29yc3QvU0dNRFxcbndvcnN0ZWQvTVxcbndvcnQvTVxcbndvcnRoL01cXG53b3J0aGllc1xcbndvcnRoaWx5L1VcXG53b3J0aGluZXNzL1VNXFxud29ydGhsZXNzL1BZXFxud29ydGhsZXNzbmVzcy9NXFxud29ydGh3aGlsZVxcbndvcnRoeSdzXFxud29ydGh5L1VQUlRcXG53b3RcXG53b3RjaGFcXG53b3VsZCd2ZVxcbndvdWxkL1NcXG53b3VsZG4ndFxcbndvdWxkc3RcXG53b3VuZC9TR01EUlxcbndvdmUvQVxcbndvdmVuL0FVXFxud293L1NHTURcXG53cG1cXG53cmFjay9HU01EXFxud3JhaXRoL01cXG53cmFpdGhzXFxud3JhbmdsZS9EUlNNWkdKXFxud3JhbmdsZXIvTVxcbndyYXAnc1xcbndyYXAvVVNcXG53cmFwYXJvdW5kL1NNXFxud3JhcHBlZC9VXFxud3JhcHBlci9TTVxcbndyYXBwaW5nL01TXFxud3Jhc3NlL01TXFxud3JhdGgvTVxcbndyYXRoZnVsL1lcXG53cmVhay9TR0RcXG53cmVhdGgvTURTR1xcbndyZWF0aGVcXG53cmVhdGhzXFxud3JlY2svU1pHTURSXFxud3JlY2thZ2UvTVxcbndyZWNrZXIvTVxcbndyZW4vTVNcXG53cmVuY2gvTURTR1xcbndyZXN0L1NHTURcXG53cmVzdGxlL01aR0RSU1xcbndyZXN0bGVyL01cXG53cmVzdGxpbmcvTVxcbndyZXRjaC9NU1xcbndyZXRjaGVkL1RQUllcXG53cmV0Y2hlZG5lc3MvTVxcbndyaWdnbGUvTVpHRFJTXFxud3JpZ2dsZXIvTVxcbndyaWdnbHlcXG53cmlnaHQvTVNcXG53cmluZy9TWkdNUlxcbndyaW5nZXIvTVxcbndyaW5rbGUvTUdEU1xcbndyaW5rbGVkL1VcXG53cmlua2x5L1RSU01cXG53cmlzdC9TTVxcbndyaXN0YmFuZC9NU1xcbndyaXN0d2F0Y2gvTVNcXG53cml0L01SQkpTWkdcXG53cml0ZS9TXFxud3JpdGVyL01cXG53cml0aGUvTUdEU1xcbndyaXRpbmcvTVxcbndyaXR0ZW4vQVVcXG53cm9uZy9TVEdNUERSWVxcbndyb25nZG9lci9TTVxcbndyb25nZG9pbmcvU01cXG53cm9uZ2Z1bC9QWVxcbndyb25nZnVsbmVzcy9NXFxud3JvbmdoZWFkZWQvWVBcXG53cm9uZ2hlYWRlZG5lc3MvTVxcbndyb25nbmVzcy9NXFxud3JvdGUvQVxcbndyb3RoXFxud3JvdWdodFxcbndydW5nXFxud3J5L1lcXG53cnllclxcbndyeWVzdFxcbndyeW5lc3MvTVxcbnd0XFxud3VuZGVya2luZC9TXFxud3Vyc3QvU01cXG53dXNzL01TXFxud3Vzc3kvUlNNVFxcbnhcXG54Y2lcXG54Y2lpXFxueGNpdlxcbnhjaXhcXG54Y3ZpXFxueGN2aWlcXG54ZW5vbi9NXFxueGVub3Bob2JlL01TXFxueGVub3Bob2JpYS9NXFxueGVub3Bob2JpY1xcbnhlcm9ncmFwaGljXFxueGVyb2dyYXBoeS9NXFxueGVyb3gvTURTR1xcbnhpL1NNXFxueGlpXFxueGlpaVxcbnhpdlxcbnhpeFxcbnhvclxcbnhyZWYvU1xcbnh0ZXJtL01cXG54dlxcbnh2aVxcbnh2aWlcXG54dmlpaVxcbnh4XFxueHhpXFxueHhpaVxcbnh4aWlpXFxueHhpdlxcbnh4aXhcXG54eHZcXG54eHZpXFxueHh2aWlcXG54eHZpaWlcXG54eHhcXG54eHhpXFxueHh4aWlcXG54eHhpaWlcXG54eHhpdlxcbnh4eGl4XFxueHh4dlxcbnh4eHZpXFxueHh4dmlpXFxueHh4dmlpaVxcbnh5bGVtL01cXG54eWxlbmVcXG54eWxvcGhvbmUvU01cXG54eWxvcGhvbmlzdC9NU1xcbnknYWxsXFxueS9GXFxueWFcXG55YWNodC9TTURHXFxueWFjaHRpbmcvTVxcbnlhY2h0c21hbi9NXFxueWFjaHRzbWVuXFxueWFjaHRzd29tYW4vTVxcbnlhY2h0c3dvbWVuXFxueWFob28vU01cXG55YWsvU01cXG55YWtrZWRcXG55YWtraW5nXFxueWFtL1NNXFxueWFtbWVyL1NaR01EUlxcbnlhbW1lcmVyL01cXG55YW5nL01cXG55YW5rL01EU0dcXG55YXAvU01cXG55YXBwZWRcXG55YXBwaW5nXFxueWFyZC9NU1xcbnlhcmRhZ2UvTVNcXG55YXJkYXJtL01TXFxueWFyZG1hbi9NXFxueWFyZG1hc3Rlci9NU1xcbnlhcmRtZW5cXG55YXJkc3RpY2svTVNcXG55YXJtdWxrZS9TTVxcbnlhcm4vTVNcXG55YXJyb3cvTVxcbnlhc2htYWsvU1xcbnlhdy9TR01EXFxueWF3bC9NU1xcbnlhd24vTURSU1pHXFxueWF3bmVyL01cXG55YXdzL01cXG55ZFxcbnllL1JTVFxcbnllYS9TTVxcbnllYWgvTVxcbnllYWhzXFxueWVhci9NWVNcXG55ZWFyYm9vay9NU1xcbnllYXJsaW5nL01TXFxueWVhcmxvbmdcXG55ZWFybHkvU01cXG55ZWFybi9HU0pEXFxueWVhcm5pbmcvTVxcbnllYXN0L1NNXFxueWVhc3R5L1JUXFxueWVnZy9NU1xcbnllbGwvTURTR1xcbnllbGxvdy9NRFJUR1BTXFxueWVsbG93aGFtbWVyL1NcXG55ZWxsb3dpc2hcXG55ZWxsb3duZXNzL01cXG55ZWxsb3d5XFxueWVscC9NRFNHXFxueWVuL1NNXFxueWVvbWFuL01cXG55ZW9tYW5yeS9NXFxueWVvbWVuXFxueWVwL1NNXFxueWVzL01TXFxueWVzaGl2YS9TTVxcbnllc3NlZFxcbnllc3NpbmdcXG55ZXN0ZXJkYXkvTVNcXG55ZXN0ZXJ5ZWFyL01cXG55ZXRcXG55ZXRpL01TXFxueWV3L1NNXFxueWlkL1NcXG55aWVsZC9KU0dNRFxcbnlpa2VzXFxueWluL01cXG55aXAvU01cXG55aXBlXFxueWlwcGVkXFxueWlwcGVlXFxueWlwcGluZ1xcbnlvXFxueW9iL1NcXG55b2Jiby9TXFxueW9kZWwvU01EUlpHXFxueW9kZWxlci9NXFxueW9nYS9NXFxueW9naS9NU1xcbnlvZ2ljXFxueW9ndXJ0L1NNXFxueW9rZSdzXFxueW9rZS9VR0RTXFxueW9rZWwvU01cXG55b2xrL01EU1xcbnlvblxcbnlvbmRlclxcbnlvbmtzXFxueW9yZS9NXFxueW91J2RcXG55b3UnbGxcXG55b3UncmVcXG55b3UndmVcXG55b3UvU01IXFxueW91bmcvVE1SXFxueW91bmdpc2hcXG55b3VuZ3N0ZXIvTVNcXG55b3VyL1NcXG55b3Vyc2VsZlxcbnlvdXJzZWx2ZXNcXG55b3V0aC9NXFxueW91dGhmdWwvWVBcXG55b3V0aGZ1bG5lc3MvTVxcbnlvdXRoc1xcbnlvd1xcbnlvd2wvTURTR1xcbnlyL1NcXG55dHRlcmJpdW0vTVxcbnl0dHJpdW0vTVxcbnl1YW4vTVxcbnl1Y2NhL1NNXFxueXVja1xcbnl1Y2t5L1RSXFxueXVrL1NNXFxueXVra2VkXFxueXVra2luZ1xcbnl1a2t5XFxueXVsZS9NXFxueXVsZXRpZGUvTVxcbnl1bVxcbnl1bW15L1RSXFxueXVwL1NNXFxueXVwcGllL01TXFxueXVwcGlmeS9HRFNcXG55dXJ0L01TXFxuei9ETlhUR0pcXG56YW5pbmVzcy9NXFxuemFueS9SU01QVFxcbnphcC9TTVxcbnphcHBlZFxcbnphcHBlci9NU1xcbnphcHBpbmdcXG56YXBweVxcbnplYWwvTVxcbnplYWxvdC9NU1xcbnplYWxvdHJ5L01cXG56ZWFsb3VzL1lQXFxuemVhbG91c25lc3MvTVxcbnplYnJhL1NNXFxuemVidS9NU1xcbnplZC9TTVxcbnplaXRnZWlzdC9TTVxcbnplbml0aC9NXFxuemVuaXRoc1xcbnplbm5lZFxcbnplb2xpdGUvU1xcbnplcGh5ci9NU1xcbnplcHBlbGluL01TXFxuemVyby9NREhTR1xcbnplcm9lc1xcbnplc3QvTVNcXG56ZXN0ZnVsL1lQXFxuemVzdGZ1bG5lc3MvTVxcbnplc3R5L1JUXFxuemV0YS9NU1xcbnppZ3phZy9TTVxcbnppZ3phZ2dlZFxcbnppZ3phZ2dpbmdcXG56aWxjaC9NXFxuemlsbGlvbi9NU1xcbnppbmMvTVNcXG56aW5ja2VkXFxuemluY2tpbmdcXG56aW5lL1NcXG56aW5mYW5kZWwvTVxcbnppbmcvTURSWkdcXG56aW5nZXIvTVxcbnppbmd5L1JUXFxuemlubmlhL01TXFxuemlwJ3NcXG56aXAvVVNcXG56aXBwZWQvVVxcbnppcHBlci9NREdTXFxuemlwcGluZy9VXFxuemlwcHkvVFJcXG56aXJjb24vTVNcXG56aXJjb25pdW0vTVxcbnppdC9TTVxcbnppdGhlci9NU1xcbnpsb3R5L1NNXFxuemxvdHlzXFxuem9kaWFjL01TXFxuem9kaWFjYWxcXG56b21iaWUvTVNcXG56b25hbC9ZXFxuem9uZSdzXFxuem9uZS9BR0RTXFxuem9uaW5nL01cXG56b25rZWRcXG56b28vU01cXG56b29rZWVwZXIvU01cXG56b29sb2dpY2FsL1lcXG56b29sb2dpc3QvU01cXG56b29sb2d5L01cXG56b29tL01EU0dcXG56b29waHl0ZS9TTVxcbnpvb3BoeXRpY1xcbnpvb3BsYW5rdG9uXFxuem9yY2hcXG56b3N0ZXJcXG56b3VuZHNcXG56dWNjaGluaS9NU1xcbnp3aWViYWNrL01cXG56eWRlY28vTVxcbnp5Z290ZS9TTVxcbnp5Z290aWNcXG56eW11cmd5L01cIn0pfSxwZXJzb25hbDp0LmpvaW4oXCJcXG5cIiksbWF4OjV9O3JldHVybiBPbigpLnVzZShTYSkudXNlKEdhLG8pLnVzZShjZSkudXNlKGllKS51c2UoeWEse2lnbm9yZTpbXCJkaXNhYmxlZFwiLFwiaG9zdFwiLFwiaG9zdHNcIixcImludmFsaWRcIixcImp1c3RcIl19KS51c2Uoa2EpLnVzZShDYSkudXNlKFRhKS51c2UoamUse2FnZToxOX0pLnVzZShYZSkudXNlKG9hKS51c2UoSm4pLnByb2Nlc3MobikudGhlbigoZnVuY3Rpb24obil7cmV0dXJuIG59KSl9ZnVuY3Rpb24gTGEoZSl7dmFyIGEsaT1aYSgoMCxuLnVzZVN0YXRlKSh7fSksMikscj1pWzBdLHQ9aVsxXSxvPVphKCgwLG4udXNlU3RhdGUpKFtdKSwyKSxNPW9bMF0scz1vWzFdLGw9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxjPWxbMF0sUz1sWzFdLHU9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxkPXVbMF0sbT11WzFdLHA9WmEoKDAsbi51c2VTdGF0ZSkoKSwyKSxoPXBbMF0sZz1wWzFdLHk9WmEoKDAsbi51c2VTdGF0ZSkoMCksMiksYj15WzBdLEQ9eVsxXSxHPWUuc2FtcGxlVGV4dCx3PWUuc2V0U2FtcGxlVGV4dCx2PWUudXBkYXRlVGltZXIsaz12b2lkIDA9PT12PzMwMDp2LFI9ZS5wbGFjZWhvbGRlcixZPXZvaWQgMD09PVI/XCJQcm92aWRlIHNvbWUgdGV4dCB0byBnZXQgc3RhcnRlZFwiOlIsQT1lLmN1c3RvbURpY3Rpb25hcnksUD1lLmFkZFRvRGljdGlvbmFyeSxDPWUub3BlbkxpbmtzSW5OZXdUYWIsVD12b2lkIDAhPT1DJiZDOygwLG4udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gUyhzZXRUaW1lb3V0KE5hKHJlZ2VuZXJhdG9yUnVudGltZS5tYXJrKChmdW5jdGlvbiBuKCl7cmV0dXJuIHJlZ2VuZXJhdG9yUnVudGltZS53cmFwKChmdW5jdGlvbihuKXtmb3IoOzspc3dpdGNoKG4ucHJldj1uLm5leHQpe2Nhc2UgMDpyZXR1cm4gbi50MD10LG4ubmV4dD0zLGphKEcsQSk7Y2FzZSAzOm4udDE9bi5zZW50LCgwLG4udDApKG4udDEpO2Nhc2UgNTpjYXNlXCJlbmRcIjpyZXR1cm4gbi5zdG9wKCl9fSksbil9KSkpLGspKSxmdW5jdGlvbigpe3JldHVybiBjbGVhclRpbWVvdXQoYyl9fSksW0ddKSwoMCxuLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGcoITApLG0oc2V0VGltZW91dChOYShyZWdlbmVyYXRvclJ1bnRpbWUubWFyaygoZnVuY3Rpb24gbigpe3JldHVybiByZWdlbmVyYXRvclJ1bnRpbWUud3JhcCgoZnVuY3Rpb24obil7Zm9yKDs7KXN3aXRjaChuLnByZXY9bi5uZXh0KXtjYXNlIDA6ZyghMSk7Y2FzZSAxOmNhc2VcImVuZFwiOnJldHVybiBuLnN0b3AoKX19KSxuKX0pKSksNGUzKSksZnVuY3Rpb24oKXtyZXR1cm4gY2xlYXJUaW1lb3V0KGQpfX0pLFtHXSk7dmFyIHgseixFLEIsTj1mdW5jdGlvbihuKXt2YXIgZT1mdW5jdGlvbihuKXtmb3IodmFyIGU9MTtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXt2YXIgYT1udWxsIT1hcmd1bWVudHNbZV0/YXJndW1lbnRzW2VdOnt9O2UlMj96YShPYmplY3QoYSksITApLmZvckVhY2goKGZ1bmN0aW9uKGUpe0VhKG4sZSxhW2VdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyhuLE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGEpKTp6YShPYmplY3QoYSkpLmZvckVhY2goKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLGUsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhLGUpKX0pKX1yZXR1cm4gbn0oe30scik7ZS5tZXNzYWdlcz1yLm1lc3NhZ2VzLmZpbHRlcigoZnVuY3Rpb24oZSl7cmV0dXJuIGUubmFtZSE9PW59KSksdChlKTt2YXIgYT1GYShNKTthLnB1c2gobikscyhhKX0sWj1mdW5jdGlvbigpe3ZhciBuLGU9KG51bGw9PXJ8fG51bGw9PT0obj1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09bj92b2lkIDA6bi5sZW5ndGgpPjAsYT0hMTtpZihlKXJldHVybiByLm1lc3NhZ2VzLmZvckVhY2goKGZ1bmN0aW9uKG4pe00uc29tZSgoZnVuY3Rpb24oZSl7bi5uYW1lLGE9ITB9KSl9KSksYX0sRj1mdW5jdGlvbihuLGUpe3ZhciBhO2lmKG51bGw9PT0oYT13aW5kb3cubG9jYWxTdG9yYWdlKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpe3ZhciBpPUpTT04ucGFyc2Uod2luZG93LmxvY2FsU3RvcmFnZS5sYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnkpO2kucHVzaChuKSx3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJsYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnlcIixKU09OLnN0cmluZ2lmeShpKSl9ZWxzZSB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oXCJsYW5ndWFnZUxpbnRlckN1c3RvbURpY3Rpb25hcnlcIixKU09OLnN0cmluZ2lmeShbbl0pKTtOKGUpfTtyZXR1cm4gbi5jcmVhdGVFbGVtZW50KG4uRnJhZ21lbnQsbnVsbCxaKCksKG51bGw9PXJ8fG51bGw9PT0oYT1yLm1lc3NhZ2VzKXx8dm9pZCAwPT09YT92b2lkIDA6YS5sZW5ndGgpPjA/bi5jcmVhdGVFbGVtZW50KFwidWxcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbi1saXN0XCJ9LChudWxsPT1yfHxudWxsPT09KEI9ci5tZXNzYWdlcyl8fHZvaWQgMD09PUI/dm9pZCAwOkIubGVuZ3RoKT4wP3IubWVzc2FnZXMubWFwKChmdW5jdGlvbihlLGEpe3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoZix7a2V5OmEsc3VnZ2VzdGlvbjplLHNvdXJjZVRleHQ6ci52YWx1ZSxzYW1wbGVUZXh0Okcsc2V0U2FtcGxlVGV4dDp3LHJlbW92ZVN1Z2dlc3Rpb246TixkaXNtaXNzZWRTdWdnZXN0aW9uczpNLGlzQWN0aXZlOmE9PT1iLG9uQ2xpY2s6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24obil7RChuKX0oYSl9LGFkZFRvRGljdGlvbmFyeTpQfHxGLG9wZW5MaW5rc0luTmV3VGFiOlR9KX0pKTpuLmNyZWF0ZUVsZW1lbnQoXCJoNFwiLG51bGwsXCJObyBzdWdnZXN0aW9ucyB0byBzaG93Li4uXCIpKTpuLmNyZWF0ZUVsZW1lbnQoXCJkaXZcIix7Y2xhc3NOYW1lOlwic3VnZ2VzdGlvbnMtZW1wdHktc3RhdGVcIn0sKHo9XCJcIiE9PUcsRT0obnVsbD09cnx8bnVsbD09PSh4PXIubWVzc2FnZXMpfHx2b2lkIDA9PT14P3ZvaWQgMDp4Lmxlbmd0aCk+MCx6P2g/bi5jcmVhdGVFbGVtZW50KFwiaW1nXCIse2NsYXNzTmFtZTpcImxvYWRpbmctc3Bpbm5lclwiLHNyYzpcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUENFdExTQkNlU0JUWVcwZ1NHVnlZbVZ5ZENBb1FITm9aWEppS1N3Z1ptOXlJR1YyWlhKNWIyNWxMaUJOYjNKbElFQWdhSFIwY0RvdkwyZHZieTVuYkM4M1FVcDZZa3dnTFMwK0NqeHpkbWNnZDJsa2RHZzlJak00SWlCb1pXbG5hSFE5SWpNNElpQjJhV1YzUW05NFBTSXdJREFnTXpnZ016Z2lJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDaUFnSUNBOFpHVm1jejRLSUNBZ0lDQWdJQ0E4YkdsdVpXRnlSM0poWkdsbGJuUWdlREU5SWpndU1EUXlKU0lnZVRFOUlqQWxJaUI0TWowaU5qVXVOamd5SlNJZ2VUSTlJakl6TGpnMk5TVWlJR2xrUFNKaElqNEtJQ0FnSUNBZ0lDQWdJQ0FnUEhOMGIzQWdjM1J2Y0MxamIyeHZjajBpSXpreU9XRmhNU0lnYzNSdmNDMXZjR0ZqYVhSNVBTSXdJaUJ2Wm1aelpYUTlJakFsSWk4K0NpQWdJQ0FnSUNBZ0lDQWdJRHh6ZEc5d0lITjBiM0F0WTI5c2IzSTlJaU01TWpsaFlURWlJSE4wYjNBdGIzQmhZMmwwZVQwaUxqWXpNU0lnYjJabWMyVjBQU0kyTXk0eE5EWWxJaTgrQ2lBZ0lDQWdJQ0FnSUNBZ0lEeHpkRzl3SUhOMGIzQXRZMjlzYjNJOUlpTTVNamxoWVRFaUlHOW1abk5sZEQwaU1UQXdKU0l2UGdvZ0lDQWdJQ0FnSUR3dmJHbHVaV0Z5UjNKaFpHbGxiblErQ2lBZ0lDQThMMlJsWm5NK0NpQWdJQ0E4WnlCbWFXeHNQU0p1YjI1bElpQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlQZ29nSUNBZ0lDQWdJRHhuSUhSeVlXNXpabTl5YlQwaWRISmhibk5zWVhSbEtERWdNU2tpUGdvZ0lDQWdJQ0FnSUNBZ0lDQThjR0YwYUNCa1BTSk5NellnTVRoak1DMDVMamswTFRndU1EWXRNVGd0TVRndE1UZ2lJR2xrUFNKUGRtRnNMVElpSUhOMGNtOXJaVDBpZFhKc0tDTmhLU0lnYzNSeWIydGxMWGRwWkhSb1BTSXlJajRLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJRHhoYm1sdFlYUmxWSEpoYm5ObWIzSnRDaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWVhSMGNtbGlkWFJsVG1GdFpUMGlkSEpoYm5ObWIzSnRJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhSNWNHVTlJbkp2ZEdGMFpTSUtJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JtY205dFBTSXdJREU0SURFNElnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJSFJ2UFNJek5qQWdNVGdnTVRnaUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaSFZ5UFNJd0xqVnpJZ29nSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhKbGNHVmhkRU52ZFc1MFBTSnBibVJsWm1sdWFYUmxJaUF2UGdvZ0lDQWdJQ0FnSUNBZ0lDQThMM0JoZEdnK0NpQWdJQ0FnSUNBZ0lDQWdJRHhqYVhKamJHVWdabWxzYkQwaUkyWm1aaUlnWTNnOUlqTTJJaUJqZVQwaU1UZ2lJSEk5SWpFaVBnb2dJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ1BHRnVhVzFoZEdWVWNtRnVjMlp2Y20wS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkSFJ5YVdKMWRHVk9ZVzFsUFNKMGNtRnVjMlp2Y20waUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkSGx3WlQwaWNtOTBZWFJsSWdvZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHWnliMjA5SWpBZ01UZ2dNVGdpQ2lBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RHODlJak0yTUNBeE9DQXhPQ0lLSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCa2RYSTlJakF1TlhNaUNpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjbVZ3WldGMFEyOTFiblE5SW1sdVpHVm1hVzVwZEdVaUlDOCtDaUFnSUNBZ0lDQWdJQ0FnSUR3dlkybHlZMnhsUGdvZ0lDQWdJQ0FnSUR3dlp6NEtJQ0FnSUR3dlp6NEtQQzl6ZG1jK0NnPT1cIixhbHQ6XCJsb2FkaW5nLi4uXCJ9KTp6JiYhRXx8WigpJiZ6P24uY3JlYXRlRWxlbWVudChuLkZyYWdtZW50LG51bGwsbi5jcmVhdGVFbGVtZW50KFwiaDNcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtaGVhZGluZ1wifSxcIk5vIGlzc3VlcyBmb3VuZFwiKSxuLmNyZWF0ZUVsZW1lbnQoXCJwXCIse2NsYXNzTmFtZTpcImVtcHR5LXN0YXRlLWRlc2NyaXB0aW9uXCJ9LFwiV2UgcmFuIHNldmVyYWwgY2hlY2tzIG9uIHlvdXIgdGV4dCBhbmQgZm91bmQgbm8gd3JpdGluZyBpc3N1ZXMuIFRoaW5rIHdlIG1pc3NlZCBzb21ldGhpbmc/IFwiLFwiIFwiLG4uY3JlYXRlRWxlbWVudChcImFcIix7aHJlZjpcImh0dHBzOi8vbmV3cmVsaWMuc2xhY2suY29tL2FyY2hpdmVzL0MwMUE3NlAzRFBVXCIsdGFyZ2V0OlQ/XCJfYmxhbmtcIjpcIl9zZWxmXCJ9LFwiTGV0IHVzIGtub3dcIiksXCIuXCIpKTp2b2lkIDA6bi5jcmVhdGVFbGVtZW50KFwiaDNcIix7Y2xhc3NOYW1lOlwiZW1wdHktc3RhdGUtaGVhZGluZ1wifSxZKSkpKX1MYS5wcm9wVHlwZXM9e3NhbXBsZVRleHQ6cigpLnN0cmluZyxwbGFjZWhvbGRlcjpyKCkuc3RyaW5nLHNldFNhbXBsZVRleHQ6cigpLmZ1bmMsdXBkYXRlVGltZXI6cigpLm51bWJlcixjdXN0b21EaWN0aW9uYXJ5OnIoKS5hcnJheSxhZGRUb0RpY3Rpb25hcnk6cigpLmZ1bmMsb3BlbkxpbmtzSW5OZXdUYWI6cigpLmJvb2x9O2NvbnN0IHFhPUxhfSkoKSxtb2R1bGUuZXhwb3J0cz1pfSkoKTsiLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbnVtYmVySXNOYU4gPSBmdW5jdGlvbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB2YWx1ZTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXMoYSwgYikge1xuXHRpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG5cdFx0cmV0dXJuIDEgLyBhID09PSAxIC8gYjtcblx0fVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmIChudW1iZXJJc05hTihhKSAmJiBudW1iZXJJc05hTihiKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC5pcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5pcyA6IGltcGxlbWVudGF0aW9uO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbU9iamVjdElzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IGlzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0aXM6IGZ1bmN0aW9uIHRlc3RPYmplY3RJcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QuaXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBrZXlzU2hpbTtcbmlmICghT2JqZWN0LmtleXMpIHtcblx0Ly8gbW9kaWZpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW1cblx0dmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cdHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cdHZhciBpc0FyZ3MgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2xvYmFsLXJlcXVpcmVcblx0dmFyIGlzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cdHZhciBoYXNEb250RW51bUJ1ZyA9ICFpc0VudW1lcmFibGUuY2FsbCh7IHRvU3RyaW5nOiBudWxsIH0sICd0b1N0cmluZycpO1xuXHR2YXIgaGFzUHJvdG9FbnVtQnVnID0gaXNFbnVtZXJhYmxlLmNhbGwoZnVuY3Rpb24gKCkge30sICdwcm90b3R5cGUnKTtcblx0dmFyIGRvbnRFbnVtcyA9IFtcblx0XHQndG9TdHJpbmcnLFxuXHRcdCd0b0xvY2FsZVN0cmluZycsXG5cdFx0J3ZhbHVlT2YnLFxuXHRcdCdoYXNPd25Qcm9wZXJ0eScsXG5cdFx0J2lzUHJvdG90eXBlT2YnLFxuXHRcdCdwcm9wZXJ0eUlzRW51bWVyYWJsZScsXG5cdFx0J2NvbnN0cnVjdG9yJ1xuXHRdO1xuXHR2YXIgZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUgPSBmdW5jdGlvbiAobykge1xuXHRcdHZhciBjdG9yID0gby5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gY3RvciAmJiBjdG9yLnByb3RvdHlwZSA9PT0gbztcblx0fTtcblx0dmFyIGV4Y2x1ZGVkS2V5cyA9IHtcblx0XHQkYXBwbGljYXRpb25DYWNoZTogdHJ1ZSxcblx0XHQkY29uc29sZTogdHJ1ZSxcblx0XHQkZXh0ZXJuYWw6IHRydWUsXG5cdFx0JGZyYW1lOiB0cnVlLFxuXHRcdCRmcmFtZUVsZW1lbnQ6IHRydWUsXG5cdFx0JGZyYW1lczogdHJ1ZSxcblx0XHQkaW5uZXJIZWlnaHQ6IHRydWUsXG5cdFx0JGlubmVyV2lkdGg6IHRydWUsXG5cdFx0JG9ubW96ZnVsbHNjcmVlbmNoYW5nZTogdHJ1ZSxcblx0XHQkb25tb3pmdWxsc2NyZWVuZXJyb3I6IHRydWUsXG5cdFx0JG91dGVySGVpZ2h0OiB0cnVlLFxuXHRcdCRvdXRlcldpZHRoOiB0cnVlLFxuXHRcdCRwYWdlWE9mZnNldDogdHJ1ZSxcblx0XHQkcGFnZVlPZmZzZXQ6IHRydWUsXG5cdFx0JHBhcmVudDogdHJ1ZSxcblx0XHQkc2Nyb2xsTGVmdDogdHJ1ZSxcblx0XHQkc2Nyb2xsVG9wOiB0cnVlLFxuXHRcdCRzY3JvbGxYOiB0cnVlLFxuXHRcdCRzY3JvbGxZOiB0cnVlLFxuXHRcdCRzZWxmOiB0cnVlLFxuXHRcdCR3ZWJraXRJbmRleGVkREI6IHRydWUsXG5cdFx0JHdlYmtpdFN0b3JhZ2VJbmZvOiB0cnVlLFxuXHRcdCR3aW5kb3c6IHRydWVcblx0fTtcblx0dmFyIGhhc0F1dG9tYXRpb25FcXVhbGl0eUJ1ZyA9IChmdW5jdGlvbiAoKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm4gZmFsc2U7IH1cblx0XHRmb3IgKHZhciBrIGluIHdpbmRvdykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCFleGNsdWRlZEtleXNbJyQnICsga10gJiYgaGFzLmNhbGwod2luZG93LCBrKSAmJiB3aW5kb3dba10gIT09IG51bGwgJiYgdHlwZW9mIHdpbmRvd1trXSA9PT0gJ29iamVjdCcpIHtcblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0ZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUod2luZG93W2tdKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fSgpKTtcblx0dmFyIGVxdWFsc0NvbnN0cnVjdG9yUHJvdG90eXBlSWZOb3RCdWdneSA9IGZ1bmN0aW9uIChvKSB7XG5cdFx0LyogZ2xvYmFsIHdpbmRvdyAqL1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fCAhaGFzQXV0b21hdGlvbkVxdWFsaXR5QnVnKSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4gZXF1YWxzQ29uc3RydWN0b3JQcm90b3R5cGUobyk7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fTtcblxuXHRrZXlzU2hpbSA9IGZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG5cdFx0dmFyIGlzT2JqZWN0ID0gb2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnO1xuXHRcdHZhciBpc0Z1bmN0aW9uID0gdG9TdHIuY2FsbChvYmplY3QpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHRcdHZhciBpc0FyZ3VtZW50cyA9IGlzQXJncyhvYmplY3QpO1xuXHRcdHZhciBpc1N0cmluZyA9IGlzT2JqZWN0ICYmIHRvU3RyLmNhbGwob2JqZWN0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG5cdFx0dmFyIHRoZUtleXMgPSBbXTtcblxuXHRcdGlmICghaXNPYmplY3QgJiYgIWlzRnVuY3Rpb24gJiYgIWlzQXJndW1lbnRzKSB7XG5cdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qua2V5cyBjYWxsZWQgb24gYSBub24tb2JqZWN0Jyk7XG5cdFx0fVxuXG5cdFx0dmFyIHNraXBQcm90byA9IGhhc1Byb3RvRW51bUJ1ZyAmJiBpc0Z1bmN0aW9uO1xuXHRcdGlmIChpc1N0cmluZyAmJiBvYmplY3QubGVuZ3RoID4gMCAmJiAhaGFzLmNhbGwob2JqZWN0LCAwKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcblx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhpKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGlzQXJndW1lbnRzICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG9iamVjdC5sZW5ndGg7ICsraikge1xuXHRcdFx0XHR0aGVLZXlzLnB1c2goU3RyaW5nKGopKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICh2YXIgbmFtZSBpbiBvYmplY3QpIHtcblx0XHRcdFx0aWYgKCEoc2tpcFByb3RvICYmIG5hbWUgPT09ICdwcm90b3R5cGUnKSAmJiBoYXMuY2FsbChvYmplY3QsIG5hbWUpKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKFN0cmluZyhuYW1lKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoaGFzRG9udEVudW1CdWcpIHtcblx0XHRcdHZhciBza2lwQ29uc3RydWN0b3IgPSBlcXVhbHNDb25zdHJ1Y3RvclByb3RvdHlwZUlmTm90QnVnZ3kob2JqZWN0KTtcblxuXHRcdFx0Zm9yICh2YXIgayA9IDA7IGsgPCBkb250RW51bXMubGVuZ3RoOyArK2spIHtcblx0XHRcdFx0aWYgKCEoc2tpcENvbnN0cnVjdG9yICYmIGRvbnRFbnVtc1trXSA9PT0gJ2NvbnN0cnVjdG9yJykgJiYgaGFzLmNhbGwob2JqZWN0LCBkb250RW51bXNba10pKSB7XG5cdFx0XHRcdFx0dGhlS2V5cy5wdXNoKGRvbnRFbnVtc1trXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoZUtleXM7XG5cdH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGtleXNTaGltO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgaXNBcmdzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpO1xuXG52YXIgb3JpZ0tleXMgPSBPYmplY3Qua2V5cztcbnZhciBrZXlzU2hpbSA9IG9yaWdLZXlzID8gZnVuY3Rpb24ga2V5cyhvKSB7IHJldHVybiBvcmlnS2V5cyhvKTsgfSA6IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxudmFyIG9yaWdpbmFsS2V5cyA9IE9iamVjdC5rZXlzO1xuXG5rZXlzU2hpbS5zaGltID0gZnVuY3Rpb24gc2hpbU9iamVjdEtleXMoKSB7XG5cdGlmIChPYmplY3Qua2V5cykge1xuXHRcdHZhciBrZXlzV29ya3NXaXRoQXJndW1lbnRzID0gKGZ1bmN0aW9uICgpIHtcblx0XHRcdC8vIFNhZmFyaSA1LjAgYnVnXG5cdFx0XHR2YXIgYXJncyA9IE9iamVjdC5rZXlzKGFyZ3VtZW50cyk7XG5cdFx0XHRyZXR1cm4gYXJncyAmJiBhcmdzLmxlbmd0aCA9PT0gYXJndW1lbnRzLmxlbmd0aDtcblx0XHR9KDEsIDIpKTtcblx0XHRpZiAoIWtleXNXb3Jrc1dpdGhBcmd1bWVudHMpIHtcblx0XHRcdE9iamVjdC5rZXlzID0gZnVuY3Rpb24ga2V5cyhvYmplY3QpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBmdW5jLW5hbWUtbWF0Y2hpbmdcblx0XHRcdFx0aWYgKGlzQXJncyhvYmplY3QpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9yaWdpbmFsS2V5cyhzbGljZS5jYWxsKG9iamVjdCkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEtleXMob2JqZWN0KTtcblx0XHRcdH07XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdE9iamVjdC5rZXlzID0ga2V5c1NoaW07XG5cdH1cblx0cmV0dXJuIE9iamVjdC5rZXlzIHx8IGtleXNTaGltO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzU2hpbTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRvU3RyID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZSkge1xuXHR2YXIgc3RyID0gdG9TdHIuY2FsbCh2YWx1ZSk7XG5cdHZhciBpc0FyZ3MgPSBzdHIgPT09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXHRpZiAoIWlzQXJncykge1xuXHRcdGlzQXJncyA9IHN0ciAhPT0gJ1tvYmplY3QgQXJyYXldJyAmJlxuXHRcdFx0dmFsdWUgIT09IG51bGwgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiZcblx0XHRcdHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmXG5cdFx0XHR2YWx1ZS5sZW5ndGggPj0gMCAmJlxuXHRcdFx0dG9TdHIuY2FsbCh2YWx1ZS5jYWxsZWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXHR9XG5cdHJldHVybiBpc0FyZ3M7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBtb2RpZmllZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczYtc2hpbVxudmFyIGtleXMgPSByZXF1aXJlKCdvYmplY3Qta2V5cycpO1xudmFyIGNhbkJlT2JqZWN0ID0gZnVuY3Rpb24gKG9iaikge1xuXHRyZXR1cm4gdHlwZW9mIG9iaiAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqICE9PSBudWxsO1xufTtcbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMvc2hhbXMnKSgpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciB0b09iamVjdCA9IE9iamVjdDtcbnZhciAkcHVzaCA9IGNhbGxCb3VuZCgnQXJyYXkucHJvdG90eXBlLnB1c2gnKTtcbnZhciAkcHJvcElzRW51bWVyYWJsZSA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZScpO1xudmFyIG9yaWdpbmFsR2V0U3ltYm9scyA9IGhhc1N5bWJvbHMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzIDogbnVsbDtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZTEpIHtcblx0aWYgKCFjYW5CZU9iamVjdCh0YXJnZXQpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ3RhcmdldCBtdXN0IGJlIGFuIG9iamVjdCcpOyB9XG5cdHZhciBvYmpUYXJnZXQgPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgcywgc291cmNlLCBpLCBwcm9wcywgc3ltcywgdmFsdWUsIGtleTtcblx0Zm9yIChzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7ICsrcykge1xuXHRcdHNvdXJjZSA9IHRvT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cdFx0cHJvcHMgPSBrZXlzKHNvdXJjZSk7XG5cdFx0dmFyIGdldFN5bWJvbHMgPSBoYXNTeW1ib2xzICYmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzIHx8IG9yaWdpbmFsR2V0U3ltYm9scyk7XG5cdFx0aWYgKGdldFN5bWJvbHMpIHtcblx0XHRcdHN5bXMgPSBnZXRTeW1ib2xzKHNvdXJjZSk7XG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgc3ltcy5sZW5ndGg7ICsraSkge1xuXHRcdFx0XHRrZXkgPSBzeW1zW2ldO1xuXHRcdFx0XHRpZiAoJHByb3BJc0VudW1lcmFibGUoc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdFx0JHB1c2gocHJvcHMsIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Zm9yIChpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgKytpKSB7XG5cdFx0XHRrZXkgPSBwcm9wc1tpXTtcblx0XHRcdHZhbHVlID0gc291cmNlW2tleV07XG5cdFx0XHRpZiAoJHByb3BJc0VudW1lcmFibGUoc291cmNlLCBrZXkpKSB7XG5cdFx0XHRcdG9ialRhcmdldFtrZXldID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmpUYXJnZXQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZGVmaW5lUHJvcGVydGllcyA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQuYXBwbHkoZ2V0UG9seWZpbGwoKSk7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbnZhciBib3VuZCA9IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQsIHNvdXJjZTEpIHtcblx0cmV0dXJuIHBvbHlmaWxsKE9iamVjdCwgYXJndW1lbnRzKTtcbn07XG5cbmRlZmluZVByb3BlcnRpZXMoYm91bmQsIHtcblx0Z2V0UG9seWZpbGw6IGdldFBvbHlmaWxsLFxuXHRpbXBsZW1lbnRhdGlvbjogaW1wbGVtZW50YXRpb24sXG5cdHNoaW06IHNoaW1cbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJvdW5kO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbnZhciBsYWNrc1Byb3BlckVudW1lcmF0aW9uT3JkZXIgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXHQvKlxuXHQgKiB2OCwgc3BlY2lmaWNhbGx5IGluIG5vZGUgNC54LCBoYXMgYSBidWcgd2l0aCBpbmNvcnJlY3QgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXJcblx0ICogbm90ZTogdGhpcyBkb2VzIG5vdCBkZXRlY3QgdGhlIGJ1ZyB1bmxlc3MgdGhlcmUncyAyMCBjaGFyYWN0ZXJzXG5cdCAqL1xuXHR2YXIgc3RyID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0Jztcblx0dmFyIGxldHRlcnMgPSBzdHIuc3BsaXQoJycpO1xuXHR2YXIgbWFwID0ge307XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGV0dGVycy5sZW5ndGg7ICsraSkge1xuXHRcdG1hcFtsZXR0ZXJzW2ldXSA9IGxldHRlcnNbaV07XG5cdH1cblx0dmFyIG9iaiA9IE9iamVjdC5hc3NpZ24oe30sIG1hcCk7XG5cdHZhciBhY3R1YWwgPSAnJztcblx0Zm9yICh2YXIgayBpbiBvYmopIHtcblx0XHRhY3R1YWwgKz0gaztcblx0fVxuXHRyZXR1cm4gc3RyICE9PSBhY3R1YWw7XG59O1xuXG52YXIgYXNzaWduSGFzUGVuZGluZ0V4Y2VwdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG5cdGlmICghT2JqZWN0LmFzc2lnbiB8fCAhT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdC8qXG5cdCAqIEZpcmVmb3ggMzcgc3RpbGwgaGFzIFwicGVuZGluZyBleGNlcHRpb25cIiBsb2dpYyBpbiBpdHMgT2JqZWN0LmFzc2lnbiBpbXBsZW1lbnRhdGlvbixcblx0ICogd2hpY2ggaXMgNzIlIHNsb3dlciB0aGFuIG91ciBzaGltLCBhbmQgRmlyZWZveCA0MCdzIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbi5cblx0ICovXG5cdHZhciB0aHJvd2VyID0gT2JqZWN0LnByZXZlbnRFeHRlbnNpb25zKHsgMTogMiB9KTtcblx0dHJ5IHtcblx0XHRPYmplY3QuYXNzaWduKHRocm93ZXIsICd4eScpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHRocm93ZXJbMV0gPT09ICd5Jztcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRyZXR1cm4gaW1wbGVtZW50YXRpb247XG5cdH1cblx0aWYgKGxhY2tzUHJvcGVyRW51bWVyYXRpb25PcmRlcigpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdGlmIChhc3NpZ25IYXNQZW5kaW5nRXhjZXB0aW9ucygpKSB7XG5cdFx0cmV0dXJuIGltcGxlbWVudGF0aW9uO1xuXHR9XG5cdHJldHVybiBPYmplY3QuYXNzaWduO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2hpbUFzc2lnbigpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKFxuXHRcdE9iamVjdCxcblx0XHR7IGFzc2lnbjogcG9seWZpbGwgfSxcblx0XHR7IGFzc2lnbjogZnVuY3Rpb24gKCkgeyByZXR1cm4gT2JqZWN0LmFzc2lnbiAhPT0gcG9seWZpbGw7IH0gfVxuXHQpO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJ2VzLWFic3RyYWN0LzIwMjEvUmVxdWlyZU9iamVjdENvZXJjaWJsZScpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciAkaXNFbnVtZXJhYmxlID0gY2FsbEJvdW5kKCdPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlJyk7XG52YXIgJHB1c2ggPSBjYWxsQm91bmQoJ0FycmF5LnByb3RvdHlwZS5wdXNoJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZW50cmllcyhPKSB7XG5cdHZhciBvYmogPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuXHR2YXIgZW50cnlzID0gW107XG5cdGZvciAodmFyIGtleSBpbiBvYmopIHtcblx0XHRpZiAoJGlzRW51bWVyYWJsZShvYmosIGtleSkpIHsgLy8gY2hlY2tzIG93bi1uZXNzIGFzIHdlbGxcblx0XHRcdCRwdXNoKGVudHJ5cywgW2tleSwgb2JqW2tleV1dKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGVudHJ5cztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBkZWZpbmUgPSByZXF1aXJlKCdkZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kJyk7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcbnZhciBnZXRQb2x5ZmlsbCA9IHJlcXVpcmUoJy4vcG9seWZpbGwnKTtcbnZhciBzaGltID0gcmVxdWlyZSgnLi9zaGltJyk7XG5cbnZhciBwb2x5ZmlsbCA9IGNhbGxCaW5kKGdldFBvbHlmaWxsKCksIE9iamVjdCk7XG5cbmRlZmluZShwb2x5ZmlsbCwge1xuXHRnZXRQb2x5ZmlsbDogZ2V0UG9seWZpbGwsXG5cdGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvbixcblx0c2hpbTogc2hpbVxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9seWZpbGw7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRQb2x5ZmlsbCgpIHtcblx0cmV0dXJuIHR5cGVvZiBPYmplY3QuZW50cmllcyA9PT0gJ2Z1bmN0aW9uJyA/IE9iamVjdC5lbnRyaWVzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltRW50cmllcygpIHtcblx0dmFyIHBvbHlmaWxsID0gZ2V0UG9seWZpbGwoKTtcblx0ZGVmaW5lKE9iamVjdCwgeyBlbnRyaWVzOiBwb2x5ZmlsbCB9LCB7XG5cdFx0ZW50cmllczogZnVuY3Rpb24gdGVzdEVudHJpZXMoKSB7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmVudHJpZXMgIT09IHBvbHlmaWxsO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiBwb2x5ZmlsbDtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnZXMtYWJzdHJhY3QvMjAyMS9SZXF1aXJlT2JqZWN0Q29lcmNpYmxlJyk7XG52YXIgY2FsbEJvdW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kL2NhbGxCb3VuZCcpO1xuXG52YXIgJGlzRW51bWVyYWJsZSA9IGNhbGxCb3VuZCgnT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZScpO1xudmFyICRwdXNoID0gY2FsbEJvdW5kKCdBcnJheS5wcm90b3R5cGUucHVzaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHZhbHVlcyhPKSB7XG5cdHZhciBvYmogPSBSZXF1aXJlT2JqZWN0Q29lcmNpYmxlKE8pO1xuXHR2YXIgdmFscyA9IFtdO1xuXHRmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG5cdFx0aWYgKCRpc0VudW1lcmFibGUob2JqLCBrZXkpKSB7IC8vIGNoZWNrcyBvd24tbmVzcyBhcyB3ZWxsXG5cdFx0XHQkcHVzaCh2YWxzLCBvYmpba2V5XSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWxzO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1wcm9wZXJ0aWVzJyk7XG52YXIgY2FsbEJpbmQgPSByZXF1aXJlKCdjYWxsLWJpbmQnKTtcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xudmFyIGdldFBvbHlmaWxsID0gcmVxdWlyZSgnLi9wb2x5ZmlsbCcpO1xudmFyIHNoaW0gPSByZXF1aXJlKCcuL3NoaW0nKTtcblxudmFyIHBvbHlmaWxsID0gY2FsbEJpbmQoZ2V0UG9seWZpbGwoKSwgT2JqZWN0KTtcblxuZGVmaW5lKHBvbHlmaWxsLCB7XG5cdGdldFBvbHlmaWxsOiBnZXRQb2x5ZmlsbCxcblx0aW1wbGVtZW50YXRpb246IGltcGxlbWVudGF0aW9uLFxuXHRzaGltOiBzaGltXG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBwb2x5ZmlsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGltcGxlbWVudGF0aW9uID0gcmVxdWlyZSgnLi9pbXBsZW1lbnRhdGlvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldFBvbHlmaWxsKCkge1xuXHRyZXR1cm4gdHlwZW9mIE9iamVjdC52YWx1ZXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QudmFsdWVzIDogaW1wbGVtZW50YXRpb247XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgZ2V0UG9seWZpbGwgPSByZXF1aXJlKCcuL3BvbHlmaWxsJyk7XG52YXIgZGVmaW5lID0gcmVxdWlyZSgnZGVmaW5lLXByb3BlcnRpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzaGltVmFsdWVzKCkge1xuXHR2YXIgcG9seWZpbGwgPSBnZXRQb2x5ZmlsbCgpO1xuXHRkZWZpbmUoT2JqZWN0LCB7IHZhbHVlczogcG9seWZpbGwgfSwge1xuXHRcdHZhbHVlczogZnVuY3Rpb24gdGVzdFZhbHVlcygpIHtcblx0XHRcdHJldHVybiBPYmplY3QudmFsdWVzICE9PSBwb2x5ZmlsbDtcblx0XHR9XG5cdH0pO1xuXHRyZXR1cm4gcG9seWZpbGw7XG59O1xuIiwiT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF90eXBlb2YgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIiA/IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH0gOiBmdW5jdGlvbiAob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBpc1BsYWluT2JqZWN0O1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh4KSB7XG4gIHJldHVybiB4ICYmICh0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcgPyAndW5kZWZpbmVkJyA6IF90eXBlb2YoeCkpID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh4KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNQbGFpbk9iamVjdC5qcy5tYXAiLCJPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0c1snZGVmYXVsdCddID0gZm9yYmlkRXh0cmFQcm9wcztcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKCdvYmplY3QuYXNzaWduJyk7XG5cbnZhciBfb2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdCk7XG5cbnZhciBfaGFzID0gcmVxdWlyZSgnaGFzJyk7XG5cbnZhciBfaGFzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhcyk7XG5cbnZhciBfaXNQbGFpbk9iamVjdCA9IHJlcXVpcmUoJy4vaGVscGVycy9pc1BsYWluT2JqZWN0Jyk7XG5cbnZhciBfaXNQbGFpbk9iamVjdDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9pc1BsYWluT2JqZWN0KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG52YXIgemVyb1dpZHRoU3BhY2UgPSAnXFx1MjAwQic7XG52YXIgc3BlY2lhbFByb3BlcnR5ID0gJ3Byb3AtdHlwZXMtZXhhY3Q6ICcgKyB6ZXJvV2lkdGhTcGFjZTtcbnZhciBzZW1hcGhvcmUgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nID8gU3ltYm9sWydmb3InXShzcGVjaWFsUHJvcGVydHkpIDogLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9zcGVjaWFsUHJvcGVydHk7XG5cbmZ1bmN0aW9uIGJyYW5kKGZuKSB7XG4gIHJldHVybiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoZm4sIF9kZWZpbmVQcm9wZXJ0eSh7fSwgc3BlY2lhbFByb3BlcnR5LCBzZW1hcGhvcmUpKTtcbn1cblxuZnVuY3Rpb24gaXNCcmFuZGVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiB2YWx1ZVtzcGVjaWFsUHJvcGVydHldID09PSBzZW1hcGhvcmU7XG59XG5cbmZ1bmN0aW9uIGZvcmJpZEV4dHJhUHJvcHMocHJvcFR5cGVzKSB7XG4gIGlmICghKDAsIF9pc1BsYWluT2JqZWN0MlsnZGVmYXVsdCddKShwcm9wVHlwZXMpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZ2l2ZW4gcHJvcFR5cGVzIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cbiAgaWYgKCgwLCBfaGFzMlsnZGVmYXVsdCddKShwcm9wVHlwZXMsIHNwZWNpYWxQcm9wZXJ0eSkgJiYgIWlzQnJhbmRlZChwcm9wVHlwZXNbc3BlY2lhbFByb3BlcnR5XSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBZ2FpbnN0IGFsbCBvZGRzLCB5b3UgY3JlYXRlZCBhIHByb3BUeXBlIGZvciBhIHByb3AgdGhhdCB1c2VzIGJvdGggdGhlIHplcm8td2lkdGggc3BhY2UgYW5kIG91ciBjdXN0b20gc3RyaW5nIC0gd2hpY2gsIHNhZGx5LCBjb25mbGljdHMgd2l0aCBgcHJvcC10eXBlcy1leGFjdGAnKTtcbiAgfVxuXG4gIHJldHVybiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoe30sIHByb3BUeXBlcywgX2RlZmluZVByb3BlcnR5KHt9LCBzcGVjaWFsUHJvcGVydHksIGJyYW5kKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBmb3JiaWRVbmtub3duUHJvcHMocHJvcHMsIF8sIGNvbXBvbmVudE5hbWUpIHtcbiAgICAgIHZhciB1bmtub3duUHJvcHMgPSBPYmplY3Qua2V5cyhwcm9wcykuZmlsdGVyKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgIHJldHVybiAhKDAsIF9oYXMyWydkZWZhdWx0J10pKHByb3BUeXBlcywgcHJvcCk7XG4gICAgICB9KTtcbiAgICAgIGlmICh1bmtub3duUHJvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbmV3IFR5cGVFcnJvcihTdHJpbmcoY29tcG9uZW50TmFtZSkgKyAnOiB1bmtub3duIHByb3BzIGZvdW5kOiAnICsgU3RyaW5nKHVua25vd25Qcm9wcy5qb2luKCcsICcpKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9yYmlkVW5rbm93blByb3BzO1xuICB9KCkpKSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDEzLXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24oKSB7fTtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgdmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gcmVxdWlyZSgnLi9saWIvUmVhY3RQcm9wVHlwZXNTZWNyZXQnKTtcbiAgdmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xuICB2YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG5cbiAgcHJpbnRXYXJuaW5nID0gZnVuY3Rpb24odGV4dCkge1xuICAgIHZhciBtZXNzYWdlID0gJ1dhcm5pbmc6ICcgKyB0ZXh0O1xuICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAvLyAtLS0gV2VsY29tZSB0byBkZWJ1Z2dpbmcgUmVhY3QgLS0tXG4gICAgICAvLyBUaGlzIGVycm9yIHdhcyB0aHJvd24gYXMgYSBjb252ZW5pZW5jZSBzbyB0aGF0IHlvdSBjYW4gdXNlIHRoaXMgc3RhY2tcbiAgICAgIC8vIHRvIGZpbmQgdGhlIGNhbGxzaXRlIHRoYXQgY2F1c2VkIHRoaXMgd2FybmluZyB0byBmaXJlLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgIH0gY2F0Y2ggKHgpIHsgLyoqLyB9XG4gIH07XG59XG5cbi8qKlxuICogQXNzZXJ0IHRoYXQgdGhlIHZhbHVlcyBtYXRjaCB3aXRoIHRoZSB0eXBlIHNwZWNzLlxuICogRXJyb3IgbWVzc2FnZXMgYXJlIG1lbW9yaXplZCBhbmQgd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHR5cGVTcGVjcyBNYXAgb2YgbmFtZSB0byBhIFJlYWN0UHJvcFR5cGVcbiAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZXMgUnVudGltZSB2YWx1ZXMgdGhhdCBuZWVkIHRvIGJlIHR5cGUtY2hlY2tlZFxuICogQHBhcmFtIHtzdHJpbmd9IGxvY2F0aW9uIGUuZy4gXCJwcm9wXCIsIFwiY29udGV4dFwiLCBcImNoaWxkIGNvbnRleHRcIlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbXBvbmVudE5hbWUgTmFtZSBvZiB0aGUgY29tcG9uZW50IGZvciBlcnJvciBtZXNzYWdlcy5cbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBnZXRTdGFjayBSZXR1cm5zIHRoZSBjb21wb25lbnQgc3RhY2suXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGdldFN0YWNrKSB7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYW4gaW52YXJpYW50IHRoYXQgZ2V0cyBjYXVnaHQuIEl0J3MgdGhlIHNhbWVcbiAgICAgICAgICAvLyBiZWhhdmlvciBhcyB3aXRob3V0IHRoaXMgc3RhdGVtZW50IGV4Y2VwdCB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UuXG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFyIGVyciA9IEVycm9yKFxuICAgICAgICAgICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgICAgICAgICAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICtcbiAgICAgICAgICAgICAgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLidcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBlcnIubmFtZSA9ICdJbnZhcmlhbnQgVmlvbGF0aW9uJztcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZXJyb3IgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICBlcnJvciA9IGV4O1xuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvciAmJiAhKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJyArXG4gICAgICAgICAgICBsb2NhdGlvbiArICcgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyB0aGUgdHlwZSBjaGVja2VyICcgK1xuICAgICAgICAgICAgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICcgKyB0eXBlb2YgZXJyb3IgKyAnLiAnICtcbiAgICAgICAgICAgICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICtcbiAgICAgICAgICAgICdjcmVhdG9yIChhcnJheU9mLCBpbnN0YW5jZU9mLCBvYmplY3RPZiwgb25lT2YsIG9uZU9mVHlwZSwgYW5kICcgK1xuICAgICAgICAgICAgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yLm1lc3NhZ2VdID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrID8gZ2V0U3RhY2soKSA6ICcnO1xuXG4gICAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICAgJ0ZhaWxlZCAnICsgbG9jYXRpb24gKyAnIHR5cGU6ICcgKyBlcnJvci5tZXNzYWdlICsgKHN0YWNrICE9IG51bGwgPyBzdGFjayA6ICcnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXNldHMgd2FybmluZyBjYWNoZSB3aGVuIHRlc3RpbmcuXG4gKlxuICogQHByaXZhdGVcbiAqL1xuY2hlY2tQcm9wVHlwZXMucmVzZXRXYXJuaW5nQ2FjaGUgPSBmdW5jdGlvbigpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBsb2dnZWRUeXBlRmFpbHVyZXMgPSB7fTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNoZWNrUHJvcFR5cGVzO1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdElzID0gcmVxdWlyZSgncmVhY3QtaXMnKTtcbnZhciBhc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG52YXIgaGFzID0gcmVxdWlyZSgnLi9saWIvaGFzJyk7XG52YXIgY2hlY2tQcm9wVHlwZXMgPSByZXF1aXJlKCcuL2NoZWNrUHJvcFR5cGVzJyk7XG5cbnZhciBwcmludFdhcm5pbmcgPSBmdW5jdGlvbigpIHt9O1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBwcmludFdhcm5pbmcgPSBmdW5jdGlvbih0ZXh0KSB7XG4gICAgdmFyIG1lc3NhZ2UgPSAnV2FybmluZzogJyArIHRleHQ7XG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIC8vIC0tLSBXZWxjb21lIHRvIGRlYnVnZ2luZyBSZWFjdCAtLS1cbiAgICAgIC8vIFRoaXMgZXJyb3Igd2FzIHRocm93biBhcyBhIGNvbnZlbmllbmNlIHNvIHRoYXQgeW91IGNhbiB1c2UgdGhpcyBzdGFja1xuICAgICAgLy8gdG8gZmluZCB0aGUgY2FsbHNpdGUgdGhhdCBjYXVzZWQgdGhpcyB3YXJuaW5nIHRvIGZpcmUuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgfSBjYXRjaCAoeCkge31cbiAgfTtcbn1cblxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXNWYWxpZEVsZW1lbnQsIHRocm93T25EaXJlY3RBY2Nlc3MpIHtcbiAgLyogZ2xvYmFsIFN5bWJvbCAqL1xuICB2YXIgSVRFUkFUT1JfU1lNQk9MID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wuaXRlcmF0b3I7XG4gIHZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJzsgLy8gQmVmb3JlIFN5bWJvbCBzcGVjLlxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBpdGVyYXRvciBtZXRob2QgZnVuY3Rpb24gY29udGFpbmVkIG9uIHRoZSBpdGVyYWJsZSBvYmplY3QuXG4gICAqXG4gICAqIEJlIHN1cmUgdG8gaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSBpdGVyYWJsZSBhcyBjb250ZXh0OlxuICAgKlxuICAgKiAgICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG15SXRlcmFibGUpO1xuICAgKiAgICAgaWYgKGl0ZXJhdG9yRm4pIHtcbiAgICogICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG15SXRlcmFibGUpO1xuICAgKiAgICAgICAuLi5cbiAgICogICAgIH1cbiAgICpcbiAgICogQHBhcmFtIHs/b2JqZWN0fSBtYXliZUl0ZXJhYmxlXG4gICAqIEByZXR1cm4gez9mdW5jdGlvbn1cbiAgICovXG4gIGZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICAgIHZhciBpdGVyYXRvckZuID0gbWF5YmVJdGVyYWJsZSAmJiAoSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXSk7XG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gaXRlcmF0b3JGbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdGlvbiBvZiBtZXRob2RzIHRoYXQgYWxsb3cgZGVjbGFyYXRpb24gYW5kIHZhbGlkYXRpb24gb2YgcHJvcHMgdGhhdCBhcmVcbiAgICogc3VwcGxpZWQgdG8gUmVhY3QgY29tcG9uZW50cy4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICB2YXIgUHJvcHMgPSByZXF1aXJlKCdSZWFjdFByb3BUeXBlcycpO1xuICAgKiAgIHZhciBNeUFydGljbGUgPSBSZWFjdC5jcmVhdGVDbGFzcyh7XG4gICAqICAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAgLy8gQW4gb3B0aW9uYWwgc3RyaW5nIHByb3AgbmFtZWQgXCJkZXNjcmlwdGlvblwiLlxuICAgKiAgICAgICBkZXNjcmlwdGlvbjogUHJvcHMuc3RyaW5nLFxuICAgKlxuICAgKiAgICAgICAvLyBBIHJlcXVpcmVkIGVudW0gcHJvcCBuYW1lZCBcImNhdGVnb3J5XCIuXG4gICAqICAgICAgIGNhdGVnb3J5OiBQcm9wcy5vbmVPZihbJ05ld3MnLCdQaG90b3MnXSkuaXNSZXF1aXJlZCxcbiAgICpcbiAgICogICAgICAgLy8gQSBwcm9wIG5hbWVkIFwiZGlhbG9nXCIgdGhhdCByZXF1aXJlcyBhbiBpbnN0YW5jZSBvZiBEaWFsb2cuXG4gICAqICAgICAgIGRpYWxvZzogUHJvcHMuaW5zdGFuY2VPZihEaWFsb2cpLmlzUmVxdWlyZWRcbiAgICogICAgIH0sXG4gICAqICAgICByZW5kZXI6IGZ1bmN0aW9uKCkgeyAuLi4gfVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBBIG1vcmUgZm9ybWFsIHNwZWNpZmljYXRpb24gb2YgaG93IHRoZXNlIG1ldGhvZHMgYXJlIHVzZWQ6XG4gICAqXG4gICAqICAgdHlwZSA6PSBhcnJheXxib29sfGZ1bmN8b2JqZWN0fG51bWJlcnxzdHJpbmd8b25lT2YoWy4uLl0pfGluc3RhbmNlT2YoLi4uKVxuICAgKiAgIGRlY2wgOj0gUmVhY3RQcm9wVHlwZXMue3R5cGV9KC5pc1JlcXVpcmVkKT9cbiAgICpcbiAgICogRWFjaCBhbmQgZXZlcnkgZGVjbGFyYXRpb24gcHJvZHVjZXMgYSBmdW5jdGlvbiB3aXRoIHRoZSBzYW1lIHNpZ25hdHVyZS4gVGhpc1xuICAgKiBhbGxvd3MgdGhlIGNyZWF0aW9uIG9mIGN1c3RvbSB2YWxpZGF0aW9uIGZ1bmN0aW9ucy4gRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqICB2YXIgTXlMaW5rID0gUmVhY3QuY3JlYXRlQ2xhc3Moe1xuICAgKiAgICBwcm9wVHlwZXM6IHtcbiAgICogICAgICAvLyBBbiBvcHRpb25hbCBzdHJpbmcgb3IgVVJJIHByb3AgbmFtZWQgXCJocmVmXCIuXG4gICAqICAgICAgaHJlZjogZnVuY3Rpb24ocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gICAqICAgICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgKiAgICAgICAgaWYgKHByb3BWYWx1ZSAhPSBudWxsICYmIHR5cGVvZiBwcm9wVmFsdWUgIT09ICdzdHJpbmcnICYmXG4gICAqICAgICAgICAgICAgIShwcm9wVmFsdWUgaW5zdGFuY2VvZiBVUkkpKSB7XG4gICAqICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoXG4gICAqICAgICAgICAgICAgJ0V4cGVjdGVkIGEgc3RyaW5nIG9yIGFuIFVSSSBmb3IgJyArIHByb3BOYW1lICsgJyBpbiAnICtcbiAgICogICAgICAgICAgICBjb21wb25lbnROYW1lXG4gICAqICAgICAgICAgICk7XG4gICAqICAgICAgICB9XG4gICAqICAgICAgfVxuICAgKiAgICB9LFxuICAgKiAgICByZW5kZXI6IGZ1bmN0aW9uKCkgey4uLn1cbiAgICogIH0pO1xuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG5cbiAgdmFyIEFOT05ZTU9VUyA9ICc8PGFub255bW91cz4+JztcblxuICAvLyBJbXBvcnRhbnQhXG4gIC8vIEtlZXAgdGhpcyBsaXN0IGluIHN5bmMgd2l0aCBwcm9kdWN0aW9uIHZlcnNpb24gaW4gYC4vZmFjdG9yeVdpdGhUaHJvd2luZ1NoaW1zLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYXJyYXknKSxcbiAgICBiaWdpbnQ6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdiaWdpbnQnKSxcbiAgICBib29sOiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcignYm9vbGVhbicpLFxuICAgIGZ1bmM6IGNyZWF0ZVByaW1pdGl2ZVR5cGVDaGVja2VyKCdmdW5jdGlvbicpLFxuICAgIG51bWJlcjogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ251bWJlcicpLFxuICAgIG9iamVjdDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ29iamVjdCcpLFxuICAgIHN0cmluZzogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N0cmluZycpLFxuICAgIHN5bWJvbDogY3JlYXRlUHJpbWl0aXZlVHlwZUNoZWNrZXIoJ3N5bWJvbCcpLFxuXG4gICAgYW55OiBjcmVhdGVBbnlUeXBlQ2hlY2tlcigpLFxuICAgIGFycmF5T2Y6IGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcixcbiAgICBlbGVtZW50OiBjcmVhdGVFbGVtZW50VHlwZUNoZWNrZXIoKSxcbiAgICBlbGVtZW50VHlwZTogY3JlYXRlRWxlbWVudFR5cGVUeXBlQ2hlY2tlcigpLFxuICAgIGluc3RhbmNlT2Y6IGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIsXG4gICAgbm9kZTogY3JlYXRlTm9kZUNoZWNrZXIoKSxcbiAgICBvYmplY3RPZjogY3JlYXRlT2JqZWN0T2ZUeXBlQ2hlY2tlcixcbiAgICBvbmVPZjogY3JlYXRlRW51bVR5cGVDaGVja2VyLFxuICAgIG9uZU9mVHlwZTogY3JlYXRlVW5pb25UeXBlQ2hlY2tlcixcbiAgICBzaGFwZTogY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcixcbiAgICBleGFjdDogY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcixcbiAgfTtcblxuICAvKipcbiAgICogaW5saW5lZCBPYmplY3QuaXMgcG9seWZpbGwgdG8gYXZvaWQgcmVxdWlyaW5nIGNvbnN1bWVycyBzaGlwIHRoZWlyIG93blxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAgICovXG4gIC8qZXNsaW50LWRpc2FibGUgbm8tc2VsZi1jb21wYXJlKi9cbiAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgIC8vIFNhbWVWYWx1ZSBhbGdvcml0aG1cbiAgICBpZiAoeCA9PT0geSkge1xuICAgICAgLy8gU3RlcHMgMS01LCA3LTEwXG4gICAgICAvLyBTdGVwcyA2LmItNi5lOiArMCAhPSAtMFxuICAgICAgcmV0dXJuIHggIT09IDAgfHwgMSAvIHggPT09IDEgLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdGVwIDYuYTogTmFOID09IE5hTlxuICAgICAgcmV0dXJuIHggIT09IHggJiYgeSAhPT0geTtcbiAgICB9XG4gIH1cbiAgLyplc2xpbnQtZW5hYmxlIG5vLXNlbGYtY29tcGFyZSovXG5cbiAgLyoqXG4gICAqIFdlIHVzZSBhbiBFcnJvci1saWtlIG9iamVjdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBhcyBwZW9wbGUgbWF5IGNhbGxcbiAgICogUHJvcFR5cGVzIGRpcmVjdGx5IGFuZCBpbnNwZWN0IHRoZWlyIG91dHB1dC4gSG93ZXZlciwgd2UgZG9uJ3QgdXNlIHJlYWxcbiAgICogRXJyb3JzIGFueW1vcmUuIFdlIGRvbid0IGluc3BlY3QgdGhlaXIgc3RhY2sgYW55d2F5LCBhbmQgY3JlYXRpbmcgdGhlbVxuICAgKiBpcyBwcm9oaWJpdGl2ZWx5IGV4cGVuc2l2ZSBpZiB0aGV5IGFyZSBjcmVhdGVkIHRvbyBvZnRlbiwgc3VjaCBhcyB3aGF0XG4gICAqIGhhcHBlbnMgaW4gb25lT2ZUeXBlKCkgZm9yIGFueSB0eXBlIGJlZm9yZSB0aGUgb25lIHRoYXQgbWF0Y2hlZC5cbiAgICovXG4gIGZ1bmN0aW9uIFByb3BUeXBlRXJyb3IobWVzc2FnZSwgZGF0YSkge1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgdGhpcy5kYXRhID0gZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcgPyBkYXRhOiB7fTtcbiAgICB0aGlzLnN0YWNrID0gJyc7XG4gIH1cbiAgLy8gTWFrZSBgaW5zdGFuY2VvZiBFcnJvcmAgc3RpbGwgd29yayBmb3IgcmV0dXJuZWQgZXJyb3JzLlxuICBQcm9wVHlwZUVycm9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcblxuICBmdW5jdGlvbiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSkge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICB2YXIgbWFudWFsUHJvcFR5cGVDYWxsQ2FjaGUgPSB7fTtcbiAgICAgIHZhciBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCA9IDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNoZWNrVHlwZShpc1JlcXVpcmVkLCBwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgY29tcG9uZW50TmFtZSA9IGNvbXBvbmVudE5hbWUgfHwgQU5PTllNT1VTO1xuICAgICAgcHJvcEZ1bGxOYW1lID0gcHJvcEZ1bGxOYW1lIHx8IHByb3BOYW1lO1xuXG4gICAgICBpZiAoc2VjcmV0ICE9PSBSZWFjdFByb3BUeXBlc1NlY3JldCkge1xuICAgICAgICBpZiAodGhyb3dPbkRpcmVjdEFjY2Vzcykge1xuICAgICAgICAgIC8vIE5ldyBiZWhhdmlvciBvbmx5IGZvciB1c2VycyBvZiBgcHJvcC10eXBlc2AgcGFja2FnZVxuICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAnVXNlIGBQcm9wVHlwZXMuY2hlY2tQcm9wVHlwZXMoKWAgdG8gY2FsbCB0aGVtLiAnICtcbiAgICAgICAgICAgICdSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzJ1xuICAgICAgICAgICk7XG4gICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgLy8gT2xkIGJlaGF2aW9yIGZvciBwZW9wbGUgdXNpbmcgUmVhY3QuUHJvcFR5cGVzXG4gICAgICAgICAgdmFyIGNhY2hlS2V5ID0gY29tcG9uZW50TmFtZSArICc6JyArIHByb3BOYW1lO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICFtYW51YWxQcm9wVHlwZUNhbGxDYWNoZVtjYWNoZUtleV0gJiZcbiAgICAgICAgICAgIC8vIEF2b2lkIHNwYW1taW5nIHRoZSBjb25zb2xlIGJlY2F1c2UgdGhleSBhcmUgb2Z0ZW4gbm90IGFjdGlvbmFibGUgZXhjZXB0IGZvciBsaWIgYXV0aG9yc1xuICAgICAgICAgICAgbWFudWFsUHJvcFR5cGVXYXJuaW5nQ291bnQgPCAzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBwcmludFdhcm5pbmcoXG4gICAgICAgICAgICAgICdZb3UgYXJlIG1hbnVhbGx5IGNhbGxpbmcgYSBSZWFjdC5Qcm9wVHlwZXMgdmFsaWRhdGlvbiAnICtcbiAgICAgICAgICAgICAgJ2Z1bmN0aW9uIGZvciB0aGUgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBwcm9wIG9uIGAnICsgY29tcG9uZW50TmFtZSArICdgLiBUaGlzIGlzIGRlcHJlY2F0ZWQgJyArXG4gICAgICAgICAgICAgICdhbmQgd2lsbCB0aHJvdyBpbiB0aGUgc3RhbmRhbG9uZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAgICAgICAgICdZb3UgbWF5IGJlIHNlZWluZyB0aGlzIHdhcm5pbmcgZHVlIHRvIGEgdGhpcmQtcGFydHkgUHJvcFR5cGVzICcgK1xuICAgICAgICAgICAgICAnbGlicmFyeS4gU2VlIGh0dHBzOi8vZmIubWUvcmVhY3Qtd2FybmluZy1kb250LWNhbGwtcHJvcHR5cGVzICcgKyAnZm9yIGRldGFpbHMuJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIG1hbnVhbFByb3BUeXBlQ2FsbENhY2hlW2NhY2hlS2V5XSA9IHRydWU7XG4gICAgICAgICAgICBtYW51YWxQcm9wVHlwZVdhcm5pbmdDb3VudCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGlmIChpc1JlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdUaGUgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIGlzIG1hcmtlZCBhcyByZXF1aXJlZCAnICsgKCdpbiBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgYnV0IGl0cyB2YWx1ZSBpcyBgbnVsbGAuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1RoZSAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2AgaXMgbWFya2VkIGFzIHJlcXVpcmVkIGluICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBidXQgaXRzIHZhbHVlIGlzIGB1bmRlZmluZWRgLicpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBjaGFpbmVkQ2hlY2tUeXBlID0gY2hlY2tUeXBlLmJpbmQobnVsbCwgZmFsc2UpO1xuICAgIGNoYWluZWRDaGVja1R5cGUuaXNSZXF1aXJlZCA9IGNoZWNrVHlwZS5iaW5kKG51bGwsIHRydWUpO1xuXG4gICAgcmV0dXJuIGNoYWluZWRDaGVja1R5cGU7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcihleHBlY3RlZFR5cGUpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICBpZiAocHJvcFR5cGUgIT09IGV4cGVjdGVkVHlwZSkge1xuICAgICAgICAvLyBgcHJvcFZhbHVlYCBiZWluZyBpbnN0YW5jZSBvZiwgc2F5LCBkYXRlL3JlZ2V4cCwgcGFzcyB0aGUgJ29iamVjdCdcbiAgICAgICAgLy8gY2hlY2ssIGJ1dCB3ZSBjYW4gb2ZmZXIgYSBtb3JlIHByZWNpc2UgZXJyb3IgbWVzc2FnZSBoZXJlIHJhdGhlciB0aGFuXG4gICAgICAgIC8vICdvZiB0eXBlIGBvYmplY3RgJy5cbiAgICAgICAgdmFyIHByZWNpc2VUeXBlID0gZ2V0UHJlY2lzZVR5cGUocHJvcFZhbHVlKTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAgICAgJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcmVjaXNlVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCAnKSArICgnYCcgKyBleHBlY3RlZFR5cGUgKyAnYC4nKSxcbiAgICAgICAgICB7ZXhwZWN0ZWRUeXBlOiBleHBlY3RlZFR5cGV9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFueVR5cGVDaGVja2VyKCkge1xuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcihlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUFycmF5T2ZUeXBlQ2hlY2tlcih0eXBlQ2hlY2tlcikge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKHR5cGVvZiB0eXBlQ2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ1Byb3BlcnR5IGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgY29tcG9uZW50IGAnICsgY29tcG9uZW50TmFtZSArICdgIGhhcyBpbnZhbGlkIFByb3BUeXBlIG5vdGF0aW9uIGluc2lkZSBhcnJheU9mLicpO1xuICAgICAgfVxuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICAgIHZhciBwcm9wVHlwZSA9IGdldFByb3BUeXBlKHByb3BWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agb2YgdHlwZSAnICsgKCdgJyArIHByb3BUeXBlICsgJ2Agc3VwcGxpZWQgdG8gYCcgKyBjb21wb25lbnROYW1lICsgJ2AsIGV4cGVjdGVkIGFuIGFycmF5LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcFZhbHVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBlcnJvciA9IHR5cGVDaGVja2VyKHByb3BWYWx1ZSwgaSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICdbJyArIGkgKyAnXScsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlRWxlbWVudFR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghaXNWYWxpZEVsZW1lbnQocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQuJykpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVFbGVtZW50VHlwZVR5cGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIHByb3BWYWx1ZSA9IHByb3BzW3Byb3BOYW1lXTtcbiAgICAgIGlmICghUmVhY3RJcy5pc1ZhbGlkRWxlbWVudFR5cGUocHJvcFZhbHVlKSkge1xuICAgICAgICB2YXIgcHJvcFR5cGUgPSBnZXRQcm9wVHlwZShwcm9wVmFsdWUpO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBwcm9wVHlwZSArICdgIHN1cHBsaWVkIHRvIGAnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIHNpbmdsZSBSZWFjdEVsZW1lbnQgdHlwZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlVHlwZUNoZWNrZXIoZXhwZWN0ZWRDbGFzcykge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCEocHJvcHNbcHJvcE5hbWVdIGluc3RhbmNlb2YgZXhwZWN0ZWRDbGFzcykpIHtcbiAgICAgICAgdmFyIGV4cGVjdGVkQ2xhc3NOYW1lID0gZXhwZWN0ZWRDbGFzcy5uYW1lIHx8IEFOT05ZTU9VUztcbiAgICAgICAgdmFyIGFjdHVhbENsYXNzTmFtZSA9IGdldENsYXNzTmFtZShwcm9wc1twcm9wTmFtZV0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHR5cGUgJyArICgnYCcgKyBhY3R1YWxDbGFzc05hbWUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgJykgKyAoJ2luc3RhbmNlIG9mIGAnICsgZXhwZWN0ZWRDbGFzc05hbWUgKyAnYC4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVudW1UeXBlQ2hlY2tlcihleHBlY3RlZFZhbHVlcykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShleHBlY3RlZFZhbHVlcykpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIHByaW50V2FybmluZyhcbiAgICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50cyBzdXBwbGllZCB0byBvbmVPZiwgZXhwZWN0ZWQgYW4gYXJyYXksIGdvdCAnICsgYXJndW1lbnRzLmxlbmd0aCArICcgYXJndW1lbnRzLiAnICtcbiAgICAgICAgICAgICdBIGNvbW1vbiBtaXN0YWtlIGlzIHRvIHdyaXRlIG9uZU9mKHgsIHksIHopIGluc3RlYWQgb2Ygb25lT2YoW3gsIHksIHpdKS4nXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmludFdhcm5pbmcoJ0ludmFsaWQgYXJndW1lbnQgc3VwcGxpZWQgdG8gb25lT2YsIGV4cGVjdGVkIGFuIGFycmF5LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZW1wdHlGdW5jdGlvblRoYXRSZXR1cm5zTnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIHZhciBwcm9wVmFsdWUgPSBwcm9wc1twcm9wTmFtZV07XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkVmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpcyhwcm9wVmFsdWUsIGV4cGVjdGVkVmFsdWVzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB2YWx1ZXNTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShleHBlY3RlZFZhbHVlcywgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGdldFByZWNpc2VUeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKHR5cGUgPT09ICdzeW1ib2wnKSB7XG4gICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIHZhbHVlIGAnICsgU3RyaW5nKHByb3BWYWx1ZSkgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgb25lIG9mICcgKyB2YWx1ZXNTdHJpbmcgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdE9mVHlwZUNoZWNrZXIodHlwZUNoZWNrZXIpIHtcbiAgICBmdW5jdGlvbiB2YWxpZGF0ZShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUpIHtcbiAgICAgIGlmICh0eXBlb2YgdHlwZUNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdQcm9wZXJ0eSBgJyArIHByb3BGdWxsTmFtZSArICdgIG9mIGNvbXBvbmVudCBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCBoYXMgaW52YWxpZCBQcm9wVHlwZSBub3RhdGlvbiBpbnNpZGUgb2JqZWN0T2YuJyk7XG4gICAgICB9XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlICcgKyAoJ2AnICsgcHJvcFR5cGUgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYW4gb2JqZWN0LicpKTtcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wVmFsdWUpIHtcbiAgICAgICAgaWYgKGhhcyhwcm9wVmFsdWUsIGtleSkpIHtcbiAgICAgICAgICB2YXIgZXJyb3IgPSB0eXBlQ2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVVuaW9uVHlwZUNoZWNrZXIoYXJyYXlPZlR5cGVDaGVja2Vycykge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheU9mVHlwZUNoZWNrZXJzKSkge1xuICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHByaW50V2FybmluZygnSW52YWxpZCBhcmd1bWVudCBzdXBwbGllZCB0byBvbmVPZlR5cGUsIGV4cGVjdGVkIGFuIGluc3RhbmNlIG9mIGFycmF5LicpIDogdm9pZCAwO1xuICAgICAgcmV0dXJuIGVtcHR5RnVuY3Rpb25UaGF0UmV0dXJuc051bGw7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheU9mVHlwZUNoZWNrZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICBpZiAodHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJpbnRXYXJuaW5nKFxuICAgICAgICAgICdJbnZhbGlkIGFyZ3VtZW50IHN1cHBsaWVkIHRvIG9uZU9mVHlwZS4gRXhwZWN0ZWQgYW4gYXJyYXkgb2YgY2hlY2sgZnVuY3Rpb25zLCBidXQgJyArXG4gICAgICAgICAgJ3JlY2VpdmVkICcgKyBnZXRQb3N0Zml4Rm9yVHlwZVdhcm5pbmcoY2hlY2tlcikgKyAnIGF0IGluZGV4ICcgKyBpICsgJy4nXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBlbXB0eUZ1bmN0aW9uVGhhdFJldHVybnNOdWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgdmFyIGV4cGVjdGVkVHlwZXMgPSBbXTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlPZlR5cGVDaGVja2Vycy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hlY2tlciA9IGFycmF5T2ZUeXBlQ2hlY2tlcnNbaV07XG4gICAgICAgIHZhciBjaGVja2VyUmVzdWx0ID0gY2hlY2tlcihwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIFJlYWN0UHJvcFR5cGVzU2VjcmV0KTtcbiAgICAgICAgaWYgKGNoZWNrZXJSZXN1bHQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja2VyUmVzdWx0LmRhdGEgJiYgaGFzKGNoZWNrZXJSZXN1bHQuZGF0YSwgJ2V4cGVjdGVkVHlwZScpKSB7XG4gICAgICAgICAgZXhwZWN0ZWRUeXBlcy5wdXNoKGNoZWNrZXJSZXN1bHQuZGF0YS5leHBlY3RlZFR5cGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgPSAoZXhwZWN0ZWRUeXBlcy5sZW5ndGggPiAwKSA/ICcsIGV4cGVjdGVkIG9uZSBvZiB0eXBlIFsnICsgZXhwZWN0ZWRUeXBlcy5qb2luKCcsICcpICsgJ10nOiAnJztcbiAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcignSW52YWxpZCAnICsgbG9jYXRpb24gKyAnIGAnICsgcHJvcEZ1bGxOYW1lICsgJ2Agc3VwcGxpZWQgdG8gJyArICgnYCcgKyBjb21wb25lbnROYW1lICsgJ2AnICsgZXhwZWN0ZWRUeXBlc01lc3NhZ2UgKyAnLicpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vZGVDaGVja2VyKCkge1xuICAgIGZ1bmN0aW9uIHZhbGlkYXRlKHByb3BzLCBwcm9wTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSkge1xuICAgICAgaWYgKCFpc05vZGUocHJvcHNbcHJvcE5hbWVdKSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoJ0ludmFsaWQgJyArIGxvY2F0aW9uICsgJyBgJyArIHByb3BGdWxsTmFtZSArICdgIHN1cHBsaWVkIHRvICcgKyAoJ2AnICsgY29tcG9uZW50TmFtZSArICdgLCBleHBlY3RlZCBhIFJlYWN0Tm9kZS4nKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIGNyZWF0ZUNoYWluYWJsZVR5cGVDaGVja2VyKHZhbGlkYXRlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGludmFsaWRWYWxpZGF0b3JFcnJvcihjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBrZXksIHR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFByb3BUeXBlRXJyb3IoXG4gICAgICAoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHByb3BGdWxsTmFtZSArICcuJyArIGtleSArICdgIGlzIGludmFsaWQ7ICcgK1xuICAgICAgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZSArICdgLidcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIga2V5IGluIHNoYXBlVHlwZXMpIHtcbiAgICAgICAgdmFyIGNoZWNrZXIgPSBzaGFwZVR5cGVzW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgY2hlY2tlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBpbnZhbGlkVmFsaWRhdG9yRXJyb3IoY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwga2V5LCBnZXRQcmVjaXNlVHlwZShjaGVja2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gY3JlYXRlQ2hhaW5hYmxlVHlwZUNoZWNrZXIodmFsaWRhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RyaWN0U2hhcGVUeXBlQ2hlY2tlcihzaGFwZVR5cGVzKSB7XG4gICAgZnVuY3Rpb24gdmFsaWRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lKSB7XG4gICAgICB2YXIgcHJvcFZhbHVlID0gcHJvcHNbcHJvcE5hbWVdO1xuICAgICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICAgIGlmIChwcm9wVHlwZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9wVHlwZUVycm9yKCdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBvZiB0eXBlIGAnICsgcHJvcFR5cGUgKyAnYCAnICsgKCdzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYCwgZXhwZWN0ZWQgYG9iamVjdGAuJykpO1xuICAgICAgfVxuICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayBhbGwga2V5cyBpbiBjYXNlIHNvbWUgYXJlIHJlcXVpcmVkIGJ1dCBtaXNzaW5nIGZyb20gcHJvcHMuXG4gICAgICB2YXIgYWxsS2V5cyA9IGFzc2lnbih7fSwgcHJvcHNbcHJvcE5hbWVdLCBzaGFwZVR5cGVzKTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgIHZhciBjaGVja2VyID0gc2hhcGVUeXBlc1trZXldO1xuICAgICAgICBpZiAoaGFzKHNoYXBlVHlwZXMsIGtleSkgJiYgdHlwZW9mIGNoZWNrZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gaW52YWxpZFZhbGlkYXRvckVycm9yKGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIGtleSwgZ2V0UHJlY2lzZVR5cGUoY2hlY2tlcikpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2hlY2tlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgUHJvcFR5cGVFcnJvcihcbiAgICAgICAgICAgICdJbnZhbGlkICcgKyBsb2NhdGlvbiArICcgYCcgKyBwcm9wRnVsbE5hbWUgKyAnYCBrZXkgYCcgKyBrZXkgKyAnYCBzdXBwbGllZCB0byBgJyArIGNvbXBvbmVudE5hbWUgKyAnYC4nICtcbiAgICAgICAgICAgICdcXG5CYWQgb2JqZWN0OiAnICsgSlNPTi5zdHJpbmdpZnkocHJvcHNbcHJvcE5hbWVdLCBudWxsLCAnICAnKSArXG4gICAgICAgICAgICAnXFxuVmFsaWQga2V5czogJyArIEpTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHNoYXBlVHlwZXMpLCBudWxsLCAnICAnKVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yID0gY2hlY2tlcihwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSArICcuJyArIGtleSwgUmVhY3RQcm9wVHlwZXNTZWNyZXQpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBjcmVhdGVDaGFpbmFibGVUeXBlQ2hlY2tlcih2YWxpZGF0ZSk7XG4gIH1cblxuICBmdW5jdGlvbiBpc05vZGUocHJvcFZhbHVlKSB7XG4gICAgc3dpdGNoICh0eXBlb2YgcHJvcFZhbHVlKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAhcHJvcFZhbHVlO1xuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvcFZhbHVlKSkge1xuICAgICAgICAgIHJldHVybiBwcm9wVmFsdWUuZXZlcnkoaXNOb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbHVlID09PSBudWxsIHx8IGlzVmFsaWRFbGVtZW50KHByb3BWYWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihwcm9wVmFsdWUpO1xuICAgICAgICBpZiAoaXRlcmF0b3JGbikge1xuICAgICAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChwcm9wVmFsdWUpO1xuICAgICAgICAgIHZhciBzdGVwO1xuICAgICAgICAgIGlmIChpdGVyYXRvckZuICE9PSBwcm9wVmFsdWUuZW50cmllcykge1xuICAgICAgICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICAgICAgICBpZiAoIWlzTm9kZShzdGVwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJdGVyYXRvciB3aWxsIHByb3ZpZGUgZW50cnkgW2ssdl0gdHVwbGVzIHJhdGhlciB0aGFuIHZhbHVlcy5cbiAgICAgICAgICAgIHdoaWxlICghKHN0ZXAgPSBpdGVyYXRvci5uZXh0KCkpLmRvbmUpIHtcbiAgICAgICAgICAgICAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc05vZGUoZW50cnlbMV0pKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpIHtcbiAgICAvLyBOYXRpdmUgU3ltYm9sLlxuICAgIGlmIChwcm9wVHlwZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIGZhbHN5IHZhbHVlIGNhbid0IGJlIGEgU3ltYm9sXG4gICAgaWYgKCFwcm9wVmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAxOS40LjMuNSBTeW1ib2wucHJvdG90eXBlW0BAdG9TdHJpbmdUYWddID09PSAnU3ltYm9sJ1xuICAgIGlmIChwcm9wVmFsdWVbJ0BAdG9TdHJpbmdUYWcnXSA9PT0gJ1N5bWJvbCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrIGZvciBub24tc3BlYyBjb21wbGlhbnQgU3ltYm9scyB3aGljaCBhcmUgcG9seWZpbGxlZC5cbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBwcm9wVmFsdWUgaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIEVxdWl2YWxlbnQgb2YgYHR5cGVvZmAgYnV0IHdpdGggc3BlY2lhbCBoYW5kbGluZyBmb3IgYXJyYXkgYW5kIHJlZ2V4cC5cbiAgZnVuY3Rpb24gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKSB7XG4gICAgdmFyIHByb3BUeXBlID0gdHlwZW9mIHByb3BWYWx1ZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgaWYgKHByb3BWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gT2xkIHdlYmtpdHMgKGF0IGxlYXN0IHVudGlsIEFuZHJvaWQgNC4wKSByZXR1cm4gJ2Z1bmN0aW9uJyByYXRoZXIgdGhhblxuICAgICAgLy8gJ29iamVjdCcgZm9yIHR5cGVvZiBhIFJlZ0V4cC4gV2UnbGwgbm9ybWFsaXplIHRoaXMgaGVyZSBzbyB0aGF0IC9ibGEvXG4gICAgICAvLyBwYXNzZXMgUHJvcFR5cGVzLm9iamVjdC5cbiAgICAgIHJldHVybiAnb2JqZWN0JztcbiAgICB9XG4gICAgaWYgKGlzU3ltYm9sKHByb3BUeXBlLCBwcm9wVmFsdWUpKSB7XG4gICAgICByZXR1cm4gJ3N5bWJvbCc7XG4gICAgfVxuICAgIHJldHVybiBwcm9wVHlwZTtcbiAgfVxuXG4gIC8vIFRoaXMgaGFuZGxlcyBtb3JlIHR5cGVzIHRoYW4gYGdldFByb3BUeXBlYC4gT25seSB1c2VkIGZvciBlcnJvciBtZXNzYWdlcy5cbiAgLy8gU2VlIGBjcmVhdGVQcmltaXRpdmVUeXBlQ2hlY2tlcmAuXG4gIGZ1bmN0aW9uIGdldFByZWNpc2VUeXBlKHByb3BWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAndW5kZWZpbmVkJyB8fCBwcm9wVmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJyArIHByb3BWYWx1ZTtcbiAgICB9XG4gICAgdmFyIHByb3BUeXBlID0gZ2V0UHJvcFR5cGUocHJvcFZhbHVlKTtcbiAgICBpZiAocHJvcFR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAocHJvcFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICByZXR1cm4gJ2RhdGUnO1xuICAgICAgfSBlbHNlIGlmIChwcm9wVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgcmV0dXJuICdyZWdleHAnO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJvcFR5cGU7XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgc3RyaW5nIHRoYXQgaXMgcG9zdGZpeGVkIHRvIGEgd2FybmluZyBhYm91dCBhbiBpbnZhbGlkIHR5cGUuXG4gIC8vIEZvciBleGFtcGxlLCBcInVuZGVmaW5lZFwiIG9yIFwib2YgdHlwZSBhcnJheVwiXG4gIGZ1bmN0aW9uIGdldFBvc3RmaXhGb3JUeXBlV2FybmluZyh2YWx1ZSkge1xuICAgIHZhciB0eXBlID0gZ2V0UHJlY2lzZVR5cGUodmFsdWUpO1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnYXJyYXknOlxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgcmV0dXJuICdhbiAnICsgdHlwZTtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICBjYXNlICdyZWdleHAnOlxuICAgICAgICByZXR1cm4gJ2EgJyArIHR5cGU7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gIH1cblxuICAvLyBSZXR1cm5zIGNsYXNzIG5hbWUgb2YgdGhlIG9iamVjdCwgaWYgYW55LlxuICBmdW5jdGlvbiBnZXRDbGFzc05hbWUocHJvcFZhbHVlKSB7XG4gICAgaWYgKCFwcm9wVmFsdWUuY29uc3RydWN0b3IgfHwgIXByb3BWYWx1ZS5jb25zdHJ1Y3Rvci5uYW1lKSB7XG4gICAgICByZXR1cm4gQU5PTllNT1VTO1xuICAgIH1cbiAgICByZXR1cm4gcHJvcFZhbHVlLmNvbnN0cnVjdG9yLm5hbWU7XG4gIH1cblxuICBSZWFjdFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcyA9IGNoZWNrUHJvcFR5cGVzO1xuICBSZWFjdFByb3BUeXBlcy5yZXNldFdhcm5pbmdDYWNoZSA9IGNoZWNrUHJvcFR5cGVzLnJlc2V0V2FybmluZ0NhY2hlO1xuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9ICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCc7XG5cbm1vZHVsZS5leHBvcnRzID0gUmVhY3RQcm9wVHlwZXNTZWNyZXQ7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC1kb20uZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUmVhY3QgPSByZXF1aXJlKCdyZWFjdCcpO1xudmFyIF9hc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG52YXIgU2NoZWR1bGVyID0gcmVxdWlyZSgnc2NoZWR1bGVyJyk7XG52YXIgdHJhY2luZyA9IHJlcXVpcmUoJ3NjaGVkdWxlci90cmFjaW5nJyk7XG5cbnZhciBSZWFjdFNoYXJlZEludGVybmFscyA9IFJlYWN0Ll9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEO1xuXG4vLyBieSBjYWxscyB0byB0aGVzZSBtZXRob2RzIGJ5IGEgQmFiZWwgcGx1Z2luLlxuLy9cbi8vIEluIFBST0QgKG9yIGluIHBhY2thZ2VzIHdpdGhvdXQgYWNjZXNzIHRvIFJlYWN0IGludGVybmFscyksXG4vLyB0aGV5IGFyZSBsZWZ0IGFzIHRoZXkgYXJlIGluc3RlYWQuXG5cbmZ1bmN0aW9uIHdhcm4oZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ3dhcm4nLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcbiAge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XG4gICAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHByaW50V2FybmluZygnZXJyb3InLCBmb3JtYXQsIGFyZ3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHByaW50V2FybmluZyhsZXZlbCwgZm9ybWF0LCBhcmdzKSB7XG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xuICAvLyB1cGRhdGUgY29uc29sZVdpdGhTdGFja0Rldi53d3cuanMgYXMgd2VsbC5cbiAge1xuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbiAgICB2YXIgc3RhY2sgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldFN0YWNrQWRkZW5kdW0oKTtcblxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcbiAgICAgIGZvcm1hdCArPSAnJXMnO1xuICAgICAgYXJncyA9IGFyZ3MuY29uY2F0KFtzdGFja10pO1xuICAgIH1cblxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICByZXR1cm4gJycgKyBpdGVtO1xuICAgIH0pOyAvLyBDYXJlZnVsOiBSTiBjdXJyZW50bHkgZGVwZW5kcyBvbiB0aGlzIHByZWZpeFxuXG4gICAgYXJnc1dpdGhGb3JtYXQudW5zaGlmdCgnV2FybmluZzogJyArIGZvcm1hdCk7IC8vIFdlIGludGVudGlvbmFsbHkgZG9uJ3QgdXNlIHNwcmVhZCAob3IgLmFwcGx5KSBkaXJlY3RseSBiZWNhdXNlIGl0XG4gICAgLy8gYnJlYWtzIElFOTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMzYxMFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcblxuICAgIEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseS5jYWxsKGNvbnNvbGVbbGV2ZWxdLCBjb25zb2xlLCBhcmdzV2l0aEZvcm1hdCk7XG4gIH1cbn1cblxuaWYgKCFSZWFjdCkge1xuICB7XG4gICAgdGhyb3cgRXJyb3IoIFwiUmVhY3RET00gd2FzIGxvYWRlZCBiZWZvcmUgUmVhY3QuIE1ha2Ugc3VyZSB5b3UgbG9hZCB0aGUgUmVhY3QgcGFja2FnZSBiZWZvcmUgbG9hZGluZyBSZWFjdERPTS5cIiApO1xuICB9XG59XG5cbnZhciBGdW5jdGlvbkNvbXBvbmVudCA9IDA7XG52YXIgQ2xhc3NDb21wb25lbnQgPSAxO1xudmFyIEluZGV0ZXJtaW5hdGVDb21wb25lbnQgPSAyOyAvLyBCZWZvcmUgd2Uga25vdyB3aGV0aGVyIGl0IGlzIGZ1bmN0aW9uIG9yIGNsYXNzXG5cbnZhciBIb3N0Um9vdCA9IDM7IC8vIFJvb3Qgb2YgYSBob3N0IHRyZWUuIENvdWxkIGJlIG5lc3RlZCBpbnNpZGUgYW5vdGhlciBub2RlLlxuXG52YXIgSG9zdFBvcnRhbCA9IDQ7IC8vIEEgc3VidHJlZS4gQ291bGQgYmUgYW4gZW50cnkgcG9pbnQgdG8gYSBkaWZmZXJlbnQgcmVuZGVyZXIuXG5cbnZhciBIb3N0Q29tcG9uZW50ID0gNTtcbnZhciBIb3N0VGV4dCA9IDY7XG52YXIgRnJhZ21lbnQgPSA3O1xudmFyIE1vZGUgPSA4O1xudmFyIENvbnRleHRDb25zdW1lciA9IDk7XG52YXIgQ29udGV4dFByb3ZpZGVyID0gMTA7XG52YXIgRm9yd2FyZFJlZiA9IDExO1xudmFyIFByb2ZpbGVyID0gMTI7XG52YXIgU3VzcGVuc2VDb21wb25lbnQgPSAxMztcbnZhciBNZW1vQ29tcG9uZW50ID0gMTQ7XG52YXIgU2ltcGxlTWVtb0NvbXBvbmVudCA9IDE1O1xudmFyIExhenlDb21wb25lbnQgPSAxNjtcbnZhciBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQgPSAxNztcbnZhciBEZWh5ZHJhdGVkRnJhZ21lbnQgPSAxODtcbnZhciBTdXNwZW5zZUxpc3RDb21wb25lbnQgPSAxOTtcbnZhciBGdW5kYW1lbnRhbENvbXBvbmVudCA9IDIwO1xudmFyIFNjb3BlQ29tcG9uZW50ID0gMjE7XG52YXIgQmxvY2sgPSAyMjtcbnZhciBPZmZzY3JlZW5Db21wb25lbnQgPSAyMztcbnZhciBMZWdhY3lIaWRkZW5Db21wb25lbnQgPSAyNDtcblxuLy8gRmlsdGVyIGNlcnRhaW4gRE9NIGF0dHJpYnV0ZXMgKGUuZy4gc3JjLCBocmVmKSBpZiB0aGVpciB2YWx1ZXMgYXJlIGVtcHR5IHN0cmluZ3MuXG5cbnZhciBlbmFibGVQcm9maWxlclRpbWVyID0gdHJ1ZTsgLy8gUmVjb3JkIGR1cmF0aW9ucyBmb3IgY29tbWl0IGFuZCBwYXNzaXZlIGVmZmVjdHMgcGhhc2VzLlxuXG52YXIgZW5hYmxlRnVuZGFtZW50YWxBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIFNjb3BlIHN1cHBvcnQuXG52YXIgZW5hYmxlTmV3UmVjb25jaWxlciA9IGZhbHNlOyAvLyBFcnJvcnMgdGhhdCBhcmUgdGhyb3duIHdoaWxlIHVubW91bnRpbmcgKG9yIGFmdGVyIGluIHRoZSBjYXNlIG9mIHBhc3NpdmUgZWZmZWN0cylcbnZhciB3YXJuQWJvdXRTdHJpbmdSZWZzID0gZmFsc2U7XG5cbnZhciBhbGxOYXRpdmVFdmVudHMgPSBuZXcgU2V0KCk7XG4vKipcbiAqIE1hcHBpbmcgZnJvbSByZWdpc3RyYXRpb24gbmFtZSB0byBldmVudCBuYW1lXG4gKi9cblxuXG52YXIgcmVnaXN0cmF0aW9uTmFtZURlcGVuZGVuY2llcyA9IHt9O1xuLyoqXG4gKiBNYXBwaW5nIGZyb20gbG93ZXJjYXNlIHJlZ2lzdHJhdGlvbiBuYW1lcyB0byB0aGUgcHJvcGVybHkgY2FzZWQgdmVyc2lvbixcbiAqIHVzZWQgdG8gd2FybiBpbiB0aGUgY2FzZSBvZiBtaXNzaW5nIGV2ZW50IGhhbmRsZXJzLiBBdmFpbGFibGVcbiAqIG9ubHkgaW4gdHJ1ZS5cbiAqIEB0eXBlIHtPYmplY3R9XG4gKi9cblxudmFyIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSAge30gOyAvLyBUcnVzdCB0aGUgZGV2ZWxvcGVyIHRvIG9ubHkgdXNlIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgaW4gdHJ1ZVxuXG5mdW5jdGlvbiByZWdpc3RlclR3b1BoYXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKSB7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgZGVwZW5kZW5jaWVzKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lICsgJ0NhcHR1cmUnLCBkZXBlbmRlbmNpZXMpO1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJEaXJlY3RFdmVudChyZWdpc3RyYXRpb25OYW1lLCBkZXBlbmRlbmNpZXMpIHtcbiAge1xuICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdKSB7XG4gICAgICBlcnJvcignRXZlbnRSZWdpc3RyeTogTW9yZSB0aGFuIG9uZSBwbHVnaW4gYXR0ZW1wdGVkIHRvIHB1Ymxpc2ggdGhlIHNhbWUgJyArICdyZWdpc3RyYXRpb24gbmFtZSwgYCVzYC4nLCByZWdpc3RyYXRpb25OYW1lKTtcbiAgICB9XG4gIH1cblxuICByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzW3JlZ2lzdHJhdGlvbk5hbWVdID0gZGVwZW5kZW5jaWVzO1xuXG4gIHtcbiAgICB2YXIgbG93ZXJDYXNlZE5hbWUgPSByZWdpc3RyYXRpb25OYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gPSByZWdpc3RyYXRpb25OYW1lO1xuXG4gICAgaWYgKHJlZ2lzdHJhdGlvbk5hbWUgPT09ICdvbkRvdWJsZUNsaWNrJykge1xuICAgICAgcG9zc2libGVSZWdpc3RyYXRpb25OYW1lcy5vbmRibGNsaWNrID0gcmVnaXN0cmF0aW9uTmFtZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRlcGVuZGVuY2llcy5sZW5ndGg7IGkrKykge1xuICAgIGFsbE5hdGl2ZUV2ZW50cy5hZGQoZGVwZW5kZW5jaWVzW2ldKTtcbiAgfVxufVxuXG52YXIgY2FuVXNlRE9NID0gISEodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50ICE9PSAndW5kZWZpbmVkJyk7XG5cbi8vIEEgcmVzZXJ2ZWQgYXR0cmlidXRlLlxuLy8gSXQgaXMgaGFuZGxlZCBieSBSZWFjdCBzZXBhcmF0ZWx5IGFuZCBzaG91bGRuJ3QgYmUgd3JpdHRlbiB0byB0aGUgRE9NLlxudmFyIFJFU0VSVkVEID0gMDsgLy8gQSBzaW1wbGUgc3RyaW5nIGF0dHJpYnV0ZS5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmVuJ3QgaW4gdGhlIGZpbHRlciBhcmUgcHJlc3VtZWQgdG8gaGF2ZSB0aGlzIHR5cGUuXG5cbnZhciBTVFJJTkcgPSAxOyAvLyBBIHN0cmluZyBhdHRyaWJ1dGUgdGhhdCBhY2NlcHRzIGJvb2xlYW5zIGluIFJlYWN0LiBJbiBIVE1MLCB0aGVzZSBhcmUgY2FsbGVkXG4vLyBcImVudW1lcmF0ZWRcIiBhdHRyaWJ1dGVzIHdpdGggXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIiBhcyBwb3NzaWJsZSB2YWx1ZXMuXG4vLyBXaGVuIHRydWUsIGl0IHNob3VsZCBiZSBzZXQgdG8gYSBcInRydWVcIiBzdHJpbmcuXG4vLyBXaGVuIGZhbHNlLCBpdCBzaG91bGQgYmUgc2V0IHRvIGEgXCJmYWxzZVwiIHN0cmluZy5cblxudmFyIEJPT0xFQU5JU0hfU1RSSU5HID0gMjsgLy8gQSByZWFsIGJvb2xlYW4gYXR0cmlidXRlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG5cbnZhciBCT09MRUFOID0gMzsgLy8gQW4gYXR0cmlidXRlIHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBmbGFnIGFzIHdlbGwgYXMgd2l0aCBhIHZhbHVlLlxuLy8gV2hlbiB0cnVlLCBpdCBzaG91bGQgYmUgcHJlc2VudCAoc2V0IGVpdGhlciB0byBhbiBlbXB0eSBzdHJpbmcgb3IgaXRzIG5hbWUpLlxuLy8gV2hlbiBmYWxzZSwgaXQgc2hvdWxkIGJlIG9taXR0ZWQuXG4vLyBGb3IgYW55IG90aGVyIHZhbHVlLCBzaG91bGQgYmUgcHJlc2VudCB3aXRoIHRoYXQgdmFsdWUuXG5cbnZhciBPVkVSTE9BREVEX0JPT0xFQU4gPSA0OyAvLyBBbiBhdHRyaWJ1dGUgdGhhdCBtdXN0IGJlIG51bWVyaWMgb3IgcGFyc2UgYXMgYSBudW1lcmljLlxuLy8gV2hlbiBmYWxzeSwgaXQgc2hvdWxkIGJlIHJlbW92ZWQuXG5cbnZhciBOVU1FUklDID0gNTsgLy8gQW4gYXR0cmlidXRlIHRoYXQgbXVzdCBiZSBwb3NpdGl2ZSBudW1lcmljIG9yIHBhcnNlIGFzIGEgcG9zaXRpdmUgbnVtZXJpYy5cbi8vIFdoZW4gZmFsc3ksIGl0IHNob3VsZCBiZSByZW1vdmVkLlxuXG52YXIgUE9TSVRJVkVfTlVNRVJJQyA9IDY7XG5cbi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbnZhciBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSID0gXCI6QS1aX2EtelxcXFx1MDBDMC1cXFxcdTAwRDZcXFxcdTAwRDgtXFxcXHUwMEY2XFxcXHUwMEY4LVxcXFx1MDJGRlxcXFx1MDM3MC1cXFxcdTAzN0RcXFxcdTAzN0YtXFxcXHUxRkZGXFxcXHUyMDBDLVxcXFx1MjAwRFxcXFx1MjA3MC1cXFxcdTIxOEZcXFxcdTJDMDAtXFxcXHUyRkVGXFxcXHUzMDAxLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkZEXCI7XG4vKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxudmFyIEFUVFJJQlVURV9OQU1FX0NIQVIgPSBBVFRSSUJVVEVfTkFNRV9TVEFSVF9DSEFSICsgXCJcXFxcLS4wLTlcXFxcdTAwQjdcXFxcdTAzMDAtXFxcXHUwMzZGXFxcXHUyMDNGLVxcXFx1MjA0MFwiO1xudmFyIFJPT1RfQVRUUklCVVRFX05BTUUgPSAnZGF0YS1yZWFjdHJvb3QnO1xudmFyIFZBTElEX0FUVFJJQlVURV9OQU1FX1JFR0VYID0gbmV3IFJlZ0V4cCgnXlsnICsgQVRUUklCVVRFX05BTUVfU1RBUlRfQ0hBUiArICddWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG52YXIgdmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlID0ge307XG5mdW5jdGlvbiBpc0F0dHJpYnV0ZU5hbWVTYWZlKGF0dHJpYnV0ZU5hbWUpIHtcbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwodmFsaWRhdGVkQXR0cmlidXRlTmFtZUNhY2hlLCBhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoaWxsZWdhbEF0dHJpYnV0ZU5hbWVDYWNoZSwgYXR0cmlidXRlTmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoVkFMSURfQVRUUklCVVRFX05BTUVfUkVHRVgudGVzdChhdHRyaWJ1dGVOYW1lKSkge1xuICAgIHZhbGlkYXRlZEF0dHJpYnV0ZU5hbWVDYWNoZVthdHRyaWJ1dGVOYW1lXSA9IHRydWU7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpbGxlZ2FsQXR0cmlidXRlTmFtZUNhY2hlW2F0dHJpYnV0ZU5hbWVdID0gdHJ1ZTtcblxuICB7XG4gICAgZXJyb3IoJ0ludmFsaWQgYXR0cmlidXRlIG5hbWU6IGAlc2AnLCBhdHRyaWJ1dGVOYW1lKTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIHNob3VsZElnbm9yZUF0dHJpYnV0ZShuYW1lLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEO1xuICB9XG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5hbWUubGVuZ3RoID4gMiAmJiAobmFtZVswXSA9PT0gJ28nIHx8IG5hbWVbMF0gPT09ICdPJykgJiYgKG5hbWVbMV0gPT09ICduJyB8fCBuYW1lWzFdID09PSAnTicpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVBdHRyaWJ1dGVXaXRoV2FybmluZyhuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsICYmIHByb3BlcnR5SW5mby50eXBlID09PSBSRVNFUlZFRCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XG4gICAgY2FzZSAnZnVuY3Rpb24nOiAvLyAkRmxvd0lzc3VlIHN5bWJvbCBpcyBwZXJmZWN0bHkgdmFsaWQgaGVyZVxuXG4gICAgY2FzZSAnc3ltYm9sJzpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIGlmIChpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gIXByb3BlcnR5SW5mby5hY2NlcHRzQm9vbGVhbnM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHByZWZpeCA9IG5hbWUudG9Mb3dlckNhc2UoKS5zbGljZSgwLCA1KTtcbiAgICAgICAgICByZXR1cm4gcHJlZml4ICE9PSAnZGF0YS0nICYmIHByZWZpeCAhPT0gJ2FyaWEtJztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAocHJvcGVydHlJbmZvICE9PSBudWxsKSB7XG5cbiAgICBzd2l0Y2ggKHByb3BlcnR5SW5mby50eXBlKSB7XG4gICAgICBjYXNlIEJPT0xFQU46XG4gICAgICAgIHJldHVybiAhdmFsdWU7XG5cbiAgICAgIGNhc2UgT1ZFUkxPQURFRF9CT09MRUFOOlxuICAgICAgICByZXR1cm4gdmFsdWUgPT09IGZhbHNlO1xuXG4gICAgICBjYXNlIE5VTUVSSUM6XG4gICAgICAgIHJldHVybiBpc05hTih2YWx1ZSk7XG5cbiAgICAgIGNhc2UgUE9TSVRJVkVfTlVNRVJJQzpcbiAgICAgICAgcmV0dXJuIGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA8IDE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0UHJvcGVydHlJbmZvKG5hbWUpIHtcbiAgcmV0dXJuIHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBwcm9wZXJ0aWVzW25hbWVdIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIHR5cGUsIG11c3RVc2VQcm9wZXJ0eSwgYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlTmFtZXNwYWNlLCBzYW5pdGl6ZVVSTCwgcmVtb3ZlRW1wdHlTdHJpbmcpIHtcbiAgdGhpcy5hY2NlcHRzQm9vbGVhbnMgPSB0eXBlID09PSBCT09MRUFOSVNIX1NUUklORyB8fCB0eXBlID09PSBCT09MRUFOIHx8IHR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTjtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZTtcbiAgdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2UgPSBhdHRyaWJ1dGVOYW1lc3BhY2U7XG4gIHRoaXMubXVzdFVzZVByb3BlcnR5ID0gbXVzdFVzZVByb3BlcnR5O1xuICB0aGlzLnByb3BlcnR5TmFtZSA9IG5hbWU7XG4gIHRoaXMudHlwZSA9IHR5cGU7XG4gIHRoaXMuc2FuaXRpemVVUkwgPSBzYW5pdGl6ZVVSTDtcbiAgdGhpcy5yZW1vdmVFbXB0eVN0cmluZyA9IHJlbW92ZUVtcHR5U3RyaW5nO1xufSAvLyBXaGVuIGFkZGluZyBhdHRyaWJ1dGVzIHRvIHRoaXMgbGlzdCwgYmUgc3VyZSB0byBhbHNvIGFkZCB0aGVtIHRvXG4vLyB0aGUgYHBvc3NpYmxlU3RhbmRhcmROYW1lc2AgbW9kdWxlIHRvIGVuc3VyZSBjYXNpbmcgYW5kIGluY29ycmVjdFxuLy8gbmFtZSB3YXJuaW5ncy5cblxuXG52YXIgcHJvcGVydGllcyA9IHt9OyAvLyBUaGVzZSBwcm9wcyBhcmUgcmVzZXJ2ZWQgYnkgUmVhY3QuIFRoZXkgc2hvdWxkbid0IGJlIHdyaXR0ZW4gdG8gdGhlIERPTS5cblxudmFyIHJlc2VydmVkUHJvcHMgPSBbJ2NoaWxkcmVuJywgJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJywgLy8gVE9ETzogVGhpcyBwcmV2ZW50cyB0aGUgYXNzaWdubWVudCBvZiBkZWZhdWx0VmFsdWUgdG8gcmVndWxhclxuLy8gZWxlbWVudHMgKG5vdCBqdXN0IGlucHV0cykuIE5vdyB0aGF0IFJlYWN0RE9NSW5wdXQgYXNzaWducyB0byB0aGVcbi8vIGRlZmF1bHRWYWx1ZSBwcm9wZXJ0eSAtLSBkbyB3ZSBuZWVkIHRoaXM/XG4nZGVmYXVsdFZhbHVlJywgJ2RlZmF1bHRDaGVja2VkJywgJ2lubmVySFRNTCcsICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLCAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJywgJ3N0eWxlJ107XG5yZXNlcnZlZFByb3BzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgUkVTRVJWRUQsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBBIGZldyBSZWFjdCBzdHJpbmcgYXR0cmlidXRlcyBoYXZlIGEgZGlmZmVyZW50IG5hbWUuXG4vLyBUaGlzIGlzIGEgbWFwcGluZyBmcm9tIFJlYWN0IHByb3AgbmFtZXMgdG8gdGhlIGF0dHJpYnV0ZSBuYW1lcy5cblxuW1snYWNjZXB0Q2hhcnNldCcsICdhY2NlcHQtY2hhcnNldCddLCBbJ2NsYXNzTmFtZScsICdjbGFzcyddLCBbJ2h0bWxGb3InLCAnZm9yJ10sIFsnaHR0cEVxdWl2JywgJ2h0dHAtZXF1aXYnXV0uZm9yRWFjaChmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbmFtZSA9IF9yZWZbMF0sXG4gICAgICBhdHRyaWJ1dGVOYW1lID0gX3JlZlsxXTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIFwiZW51bWVyYXRlZFwiIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFjY2VwdCBcInRydWVcIiBhbmQgXCJmYWxzZVwiLlxuLy8gSW4gUmVhY3QsIHdlIGxldCB1c2VycyBwYXNzIGB0cnVlYCBhbmQgYGZhbHNlYCBldmVuIHRob3VnaCB0ZWNobmljYWxseVxuLy8gdGhlc2UgYXJlbid0IGJvb2xlYW4gYXR0cmlidXRlcyAodGhleSBhcmUgY29lcmNlZCB0byBzdHJpbmdzKS5cblxuWydjb250ZW50RWRpdGFibGUnLCAnZHJhZ2dhYmxlJywgJ3NwZWxsQ2hlY2snLCAndmFsdWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gIHByb3BlcnRpZXNbbmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKG5hbWUsIEJPT0xFQU5JU0hfU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgXCJlbnVtZXJhdGVkXCIgU1ZHIGF0dHJpYnV0ZXMgdGhhdCBhY2NlcHQgXCJ0cnVlXCIgYW5kIFwiZmFsc2VcIi5cbi8vIEluIFJlYWN0LCB3ZSBsZXQgdXNlcnMgcGFzcyBgdHJ1ZWAgYW5kIGBmYWxzZWAgZXZlbiB0aG91Z2ggdGVjaG5pY2FsbHlcbi8vIHRoZXNlIGFyZW4ndCBib29sZWFuIGF0dHJpYnV0ZXMgKHRoZXkgYXJlIGNvZXJjZWQgdG8gc3RyaW5ncykuXG4vLyBTaW5jZSB0aGVzZSBhcmUgU1ZHIGF0dHJpYnV0ZXMsIHRoZWlyIGF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUuXG5cblsnYXV0b1JldmVyc2UnLCAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsICdmb2N1c2FibGUnLCAncHJlc2VydmVBbHBoYSddLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTklTSF9TVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgbmFtZSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgSFRNTCBib29sZWFuIGF0dHJpYnV0ZXMuXG5cblsnYWxsb3dGdWxsU2NyZWVuJywgJ2FzeW5jJywgLy8gTm90ZTogdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgdGhhdCBwcmV2ZW50cyBpdCBmcm9tIGJlaW5nIHdyaXR0ZW4gdG8gdGhlIERPTVxuLy8gb24gdGhlIGNsaWVudCBzaWRlIGJlY2F1c2UgdGhlIGJyb3dzZXJzIGFyZSBpbmNvbnNpc3RlbnQuIEluc3RlYWQgd2UgY2FsbCBmb2N1cygpLlxuJ2F1dG9Gb2N1cycsICdhdXRvUGxheScsICdjb250cm9scycsICdkZWZhdWx0JywgJ2RlZmVyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJywgJ2Rpc2FibGVSZW1vdGVQbGF5YmFjaycsICdmb3JtTm9WYWxpZGF0ZScsICdoaWRkZW4nLCAnbG9vcCcsICdub01vZHVsZScsICdub1ZhbGlkYXRlJywgJ29wZW4nLCAncGxheXNJbmxpbmUnLCAncmVhZE9ubHknLCAncmVxdWlyZWQnLCAncmV2ZXJzZWQnLCAnc2NvcGVkJywgJ3NlYW1sZXNzJywgLy8gTWljcm9kYXRhXG4naXRlbVNjb3BlJ10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBCT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBUaGVzZSBhcmUgdGhlIGZldyBSZWFjdCBwcm9wcyB0aGF0IHdlIHNldCBhcyBET00gcHJvcGVydGllc1xuLy8gcmF0aGVyIHRoYW4gYXR0cmlidXRlcy4gVGhlc2UgYXJlIGFsbCBib29sZWFucy5cblxuWydjaGVja2VkJywgLy8gTm90ZTogYG9wdGlvbi5zZWxlY3RlZGAgaXMgbm90IHVwZGF0ZWQgaWYgYHNlbGVjdC5tdWx0aXBsZWAgaXNcbi8vIGRpc2FibGVkIHdpdGggYHJlbW92ZUF0dHJpYnV0ZWAuIFdlIGhhdmUgc3BlY2lhbCBsb2dpYyBmb3IgaGFuZGxpbmcgdGhpcy5cbidtdWx0aXBsZScsICdtdXRlZCcsICdzZWxlY3RlZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgQk9PTEVBTiwgdHJ1ZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IGFyZSBcIm92ZXJsb2FkZWQgYm9vbGVhbnNcIjogdGhleSBiZWhhdmUgbGlrZVxuLy8gYm9vbGVhbnMsIGJ1dCBjYW4gYWxzbyBhY2NlcHQgYSBzdHJpbmcgdmFsdWUuXG5cblsnY2FwdHVyZScsICdkb3dubG9hZCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgT1ZFUkxPQURFRF9CT09MRUFOLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgcG9zaXRpdmUgbnVtYmVycy5cblxuWydjb2xzJywgJ3Jvd3MnLCAnc2l6ZScsICdzcGFuJyAvLyBOT1RFOiBpZiB5b3UgYWRkIGEgY2FtZWxDYXNlZCBwcm9wIHRvIHRoaXMgbGlzdCxcbi8vIHlvdSdsbCBuZWVkIHRvIHNldCBhdHRyaWJ1dGVOYW1lIHRvIG5hbWUudG9Mb3dlckNhc2UoKVxuLy8gaW5zdGVhZCBpbiB0aGUgYXNzaWdubWVudCBiZWxvdy5cbl0uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBQT1NJVElWRV9OVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUsIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gVGhlc2UgYXJlIEhUTUwgYXR0cmlidXRlcyB0aGF0IG11c3QgYmUgbnVtYmVycy5cblxuWydyb3dTcGFuJywgJ3N0YXJ0J10uZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBOVU1FUklDLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIG5hbWUudG9Mb3dlckNhc2UoKSwgLy8gYXR0cmlidXRlTmFtZVxuICBudWxsLCAvLyBhdHRyaWJ1dGVOYW1lc3BhY2VcbiAgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pO1xudmFyIENBTUVMSVpFID0gL1tcXC1cXDpdKFthLXpdKS9nO1xuXG52YXIgY2FwaXRhbGl6ZSA9IGZ1bmN0aW9uICh0b2tlbikge1xuICByZXR1cm4gdG9rZW5bMV0udG9VcHBlckNhc2UoKTtcbn07IC8vIFRoaXMgaXMgYSBsaXN0IG9mIGFsbCBTVkcgYXR0cmlidXRlcyB0aGF0IG5lZWQgc3BlY2lhbCBjYXNpbmcsIG5hbWVzcGFjaW5nLFxuLy8gb3IgYm9vbGVhbiB2YWx1ZSBhc3NpZ25tZW50LiBSZWd1bGFyIGF0dHJpYnV0ZXMgdGhhdCBqdXN0IGFjY2VwdCBzdHJpbmdzXG4vLyBhbmQgaGF2ZSB0aGUgc2FtZSBuYW1lcyBhcmUgb21pdHRlZCwganVzdCBsaWtlIGluIHRoZSBIVE1MIGF0dHJpYnV0ZSBmaWx0ZXIuXG4vLyBTb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMgY2FuIGJlIGhhcmQgdG8gZmluZC4gVGhpcyBsaXN0IHdhcyBjcmVhdGVkIGJ5XG4vLyBzY3JhcGluZyB0aGUgTUROIGRvY3VtZW50YXRpb24uXG5cblxuWydhY2NlbnQtaGVpZ2h0JywgJ2FsaWdubWVudC1iYXNlbGluZScsICdhcmFiaWMtZm9ybScsICdiYXNlbGluZS1zaGlmdCcsICdjYXAtaGVpZ2h0JywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnZG9taW5hbnQtYmFzZWxpbmUnLCAnZW5hYmxlLWJhY2tncm91bmQnLCAnZmlsbC1vcGFjaXR5JywgJ2ZpbGwtcnVsZScsICdmbG9vZC1jb2xvcicsICdmbG9vZC1vcGFjaXR5JywgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXNpemUtYWRqdXN0JywgJ2ZvbnQtc3RyZXRjaCcsICdmb250LXN0eWxlJywgJ2ZvbnQtdmFyaWFudCcsICdmb250LXdlaWdodCcsICdnbHlwaC1uYW1lJywgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnLCAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnLCAnaG9yaXotYWR2LXgnLCAnaG9yaXotb3JpZ2luLXgnLCAnaW1hZ2UtcmVuZGVyaW5nJywgJ2xldHRlci1zcGFjaW5nJywgJ2xpZ2h0aW5nLWNvbG9yJywgJ21hcmtlci1lbmQnLCAnbWFya2VyLW1pZCcsICdtYXJrZXItc3RhcnQnLCAnb3ZlcmxpbmUtcG9zaXRpb24nLCAnb3ZlcmxpbmUtdGhpY2tuZXNzJywgJ3BhaW50LW9yZGVyJywgJ3Bhbm9zZS0xJywgJ3BvaW50ZXItZXZlbnRzJywgJ3JlbmRlcmluZy1pbnRlbnQnLCAnc2hhcGUtcmVuZGVyaW5nJywgJ3N0b3AtY29sb3InLCAnc3RvcC1vcGFjaXR5JywgJ3N0cmlrZXRocm91Z2gtcG9zaXRpb24nLCAnc3RyaWtldGhyb3VnaC10aGlja25lc3MnLCAnc3Ryb2tlLWRhc2hhcnJheScsICdzdHJva2UtZGFzaG9mZnNldCcsICdzdHJva2UtbGluZWNhcCcsICdzdHJva2UtbGluZWpvaW4nLCAnc3Ryb2tlLW1pdGVybGltaXQnLCAnc3Ryb2tlLW9wYWNpdHknLCAnc3Ryb2tlLXdpZHRoJywgJ3RleHQtYW5jaG9yJywgJ3RleHQtZGVjb3JhdGlvbicsICd0ZXh0LXJlbmRlcmluZycsICd1bmRlcmxpbmUtcG9zaXRpb24nLCAndW5kZXJsaW5lLXRoaWNrbmVzcycsICd1bmljb2RlLWJpZGknLCAndW5pY29kZS1yYW5nZScsICd1bml0cy1wZXItZW0nLCAndi1hbHBoYWJldGljJywgJ3YtaGFuZ2luZycsICd2LWlkZW9ncmFwaGljJywgJ3YtbWF0aGVtYXRpY2FsJywgJ3ZlY3Rvci1lZmZlY3QnLCAndmVydC1hZHYteScsICd2ZXJ0LW9yaWdpbi14JywgJ3ZlcnQtb3JpZ2luLXknLCAnd29yZC1zcGFjaW5nJywgJ3dyaXRpbmctbW9kZScsICd4bWxuczp4bGluaycsICd4LWhlaWdodCcgLy8gTk9URTogaWYgeW91IGFkZCBhIGNhbWVsQ2FzZWQgcHJvcCB0byB0aGlzIGxpc3QsXG4vLyB5b3UnbGwgbmVlZCB0byBzZXQgYXR0cmlidXRlTmFtZSB0byBuYW1lLnRvTG93ZXJDYXNlKClcbi8vIGluc3RlYWQgaW4gdGhlIGFzc2lnbm1lbnQgYmVsb3cuXG5dLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZU5hbWUpIHtcbiAgdmFyIG5hbWUgPSBhdHRyaWJ1dGVOYW1lLnJlcGxhY2UoQ0FNRUxJWkUsIGNhcGl0YWxpemUpO1xuICBwcm9wZXJ0aWVzW25hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChuYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZSwgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIGZhbHNlLCAvLyBzYW5pdGl6ZVVSTFxuICBmYWxzZSk7XG59KTsgLy8gU3RyaW5nIFNWRyBhdHRyaWJ1dGVzIHdpdGggdGhlIHhsaW5rIG5hbWVzcGFjZS5cblxuWyd4bGluazphY3R1YXRlJywgJ3hsaW5rOmFyY3JvbGUnLCAneGxpbms6cm9sZScsICd4bGluazpzaG93JywgJ3hsaW5rOnRpdGxlJywgJ3hsaW5rOnR5cGUnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgZmFsc2UsIC8vIHNhbml0aXplVVJMXG4gIGZhbHNlKTtcbn0pOyAvLyBTdHJpbmcgU1ZHIGF0dHJpYnV0ZXMgd2l0aCB0aGUgeG1sIG5hbWVzcGFjZS5cblxuWyd4bWw6YmFzZScsICd4bWw6bGFuZycsICd4bWw6c3BhY2UnIC8vIE5PVEU6IGlmIHlvdSBhZGQgYSBjYW1lbENhc2VkIHByb3AgdG8gdGhpcyBsaXN0LFxuLy8geW91J2xsIG5lZWQgdG8gc2V0IGF0dHJpYnV0ZU5hbWUgdG8gbmFtZS50b0xvd2VyQ2FzZSgpXG4vLyBpbnN0ZWFkIGluIHRoZSBhc3NpZ25tZW50IGJlbG93LlxuXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHZhciBuYW1lID0gYXR0cmlidXRlTmFtZS5yZXBsYWNlKENBTUVMSVpFLCBjYXBpdGFsaXplKTtcbiAgcHJvcGVydGllc1tuYW1lXSA9IG5ldyBQcm9wZXJ0eUluZm9SZWNvcmQobmFtZSwgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4gIGF0dHJpYnV0ZU5hbWUsICdodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UnLCBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZSBleGlzdHMgYm90aCBpbiBIVE1MIGFuZCBTVkcuXG4vLyBUaGUgYXR0cmlidXRlIG5hbWUgaXMgY2FzZS1zZW5zaXRpdmUgaW4gU1ZHIHNvIHdlIGNhbid0IGp1c3QgdXNlXG4vLyB0aGUgUmVhY3QgbmFtZSBsaWtlIHdlIGRvIGZvciBhdHRyaWJ1dGVzIHRoYXQgZXhpc3Qgb25seSBpbiBIVE1MLlxuXG5bJ3RhYkluZGV4JywgJ2Nyb3NzT3JpZ2luJ10uZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlTmFtZSkge1xuICBwcm9wZXJ0aWVzW2F0dHJpYnV0ZU5hbWVdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZChhdHRyaWJ1dGVOYW1lLCBTVFJJTkcsIGZhbHNlLCAvLyBtdXN0VXNlUHJvcGVydHlcbiAgYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpLCAvLyBhdHRyaWJ1dGVOYW1lXG4gIG51bGwsIC8vIGF0dHJpYnV0ZU5hbWVzcGFjZVxuICBmYWxzZSwgLy8gc2FuaXRpemVVUkxcbiAgZmFsc2UpO1xufSk7IC8vIFRoZXNlIGF0dHJpYnV0ZXMgYWNjZXB0IFVSTHMuIFRoZXNlIG11c3Qgbm90IGFsbG93IGphdmFzY3JpcHQ6IFVSTFMuXG4vLyBUaGVzZSB3aWxsIGFsc28gbmVlZCB0byBhY2NlcHQgVHJ1c3RlZCBUeXBlcyBvYmplY3QgaW4gdGhlIGZ1dHVyZS5cblxudmFyIHhsaW5rSHJlZiA9ICd4bGlua0hyZWYnO1xucHJvcGVydGllc1t4bGlua0hyZWZdID0gbmV3IFByb3BlcnR5SW5mb1JlY29yZCgneGxpbmtIcmVmJywgU1RSSU5HLCBmYWxzZSwgLy8gbXVzdFVzZVByb3BlcnR5XG4neGxpbms6aHJlZicsICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rJywgdHJ1ZSwgLy8gc2FuaXRpemVVUkxcbmZhbHNlKTtcblsnc3JjJywgJ2hyZWYnLCAnYWN0aW9uJywgJ2Zvcm1BY3Rpb24nXS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGVOYW1lKSB7XG4gIHByb3BlcnRpZXNbYXR0cmlidXRlTmFtZV0gPSBuZXcgUHJvcGVydHlJbmZvUmVjb3JkKGF0dHJpYnV0ZU5hbWUsIFNUUklORywgZmFsc2UsIC8vIG11c3RVc2VQcm9wZXJ0eVxuICBhdHRyaWJ1dGVOYW1lLnRvTG93ZXJDYXNlKCksIC8vIGF0dHJpYnV0ZU5hbWVcbiAgbnVsbCwgLy8gYXR0cmlidXRlTmFtZXNwYWNlXG4gIHRydWUsIC8vIHNhbml0aXplVVJMXG4gIHRydWUpO1xufSk7XG5cbi8vIGFuZCBhbnkgbmV3bGluZSBvciB0YWIgYXJlIGZpbHRlcmVkIG91dCBhcyBpZiB0aGV5J3JlIG5vdCBwYXJ0IG9mIHRoZSBVUkwuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybC1wYXJzaW5nXG4vLyBUYWIgb3IgbmV3bGluZSBhcmUgZGVmaW5lZCBhcyBcXHJcXG5cXHQ6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktdGFiLW9yLW5ld2xpbmVcbi8vIEEgQzAgY29udHJvbCBpcyBhIGNvZGUgcG9pbnQgaW4gdGhlIHJhbmdlIFxcdTAwMDAgTlVMTCB0byBcXHUwMDFGXG4vLyBJTkZPUk1BVElPTiBTRVBBUkFUT1IgT05FLCBpbmNsdXNpdmU6XG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYzAtY29udHJvbC1vci1zcGFjZVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cbnZhciBpc0phdmFTY3JpcHRQcm90b2NvbCA9IC9eW1xcdTAwMDAtXFx1MDAxRiBdKmpbXFxyXFxuXFx0XSphW1xcclxcblxcdF0qdltcXHJcXG5cXHRdKmFbXFxyXFxuXFx0XSpzW1xcclxcblxcdF0qY1tcXHJcXG5cXHRdKnJbXFxyXFxuXFx0XSppW1xcclxcblxcdF0qcFtcXHJcXG5cXHRdKnRbXFxyXFxuXFx0XSpcXDovaTtcbnZhciBkaWRXYXJuID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHNhbml0aXplVVJMKHVybCkge1xuICB7XG4gICAgaWYgKCFkaWRXYXJuICYmIGlzSmF2YVNjcmlwdFByb3RvY29sLnRlc3QodXJsKSkge1xuICAgICAgZGlkV2FybiA9IHRydWU7XG5cbiAgICAgIGVycm9yKCdBIGZ1dHVyZSB2ZXJzaW9uIG9mIFJlYWN0IHdpbGwgYmxvY2sgamF2YXNjcmlwdDogVVJMcyBhcyBhIHNlY3VyaXR5IHByZWNhdXRpb24uICcgKyAnVXNlIGV2ZW50IGhhbmRsZXJzIGluc3RlYWQgaWYgeW91IGNhbi4gSWYgeW91IG5lZWQgdG8gZ2VuZXJhdGUgdW5zYWZlIEhUTUwgdHJ5ICcgKyAndXNpbmcgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgaW5zdGVhZC4gUmVhY3Qgd2FzIHBhc3NlZCAlcy4nLCBKU09OLnN0cmluZ2lmeSh1cmwpKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgXCJleHBlY3RlZFwiIGFyZ3VtZW50IGlzIHVzZWQgYXMgYSBoaW50IG9mIHdoYXQgdGhlIGV4cGVjdGVkIHZhbHVlIGlzLlxuICogU29tZSBwcm9wZXJ0aWVzIGhhdmUgbXVsdGlwbGUgZXF1aXZhbGVudCB2YWx1ZXMuXG4gKi9cbmZ1bmN0aW9uIGdldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgbmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbykge1xuICB7XG4gICAgaWYgKHByb3BlcnR5SW5mby5tdXN0VXNlUHJvcGVydHkpIHtcbiAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eUluZm8ucHJvcGVydHlOYW1lO1xuICAgICAgcmV0dXJuIG5vZGVbcHJvcGVydHlOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCBwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBmdWxseSBkaXNhYmxlZCBqYXZhc2NyaXB0OiBVUkxzLCBhbmQgaWZcbiAgICAgICAgLy8gdGhlIGh5ZHJhdGlvbiBpcyBzdWNjZXNzZnVsIG9mIGEgamF2YXNjcmlwdDogVVJMLCB3ZVxuICAgICAgICAvLyBzdGlsbCB3YW50IHRvIHdhcm4gb24gdGhlIGNsaWVudC5cbiAgICAgICAgc2FuaXRpemVVUkwoJycgKyBleHBlY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhdHRyaWJ1dGVOYW1lID0gcHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWU7XG4gICAgICB2YXIgc3RyaW5nVmFsdWUgPSBudWxsO1xuXG4gICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IE9WRVJMT0FERURfQk9PTEVBTikge1xuICAgICAgICBpZiAobm9kZS5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBub2RlLmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcblxuICAgICAgICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgIGlmIChzaG91bGRSZW1vdmVBdHRyaWJ1dGUobmFtZSwgZXhwZWN0ZWQsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICAgICAgLy8gV2UgaGFkIGFuIGF0dHJpYnV0ZSBidXQgc2hvdWxkbid0IGhhdmUgaGFkIG9uZSwgc28gcmVhZCBpdFxuICAgICAgICAgIC8vIGZvciB0aGUgZXJyb3IgbWVzc2FnZS5cbiAgICAgICAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnR5cGUgPT09IEJPT0xFQU4pIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIHdhcyBhIGJvb2xlYW4sIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgdGhlIHZhbHVlIGlzXG4gICAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGl0IGlzIHRoZSBzYW1lIGFzIHRoZSBleHBlY3RlZC5cbiAgICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICAgIH0gLy8gRXZlbiBpZiB0aGlzIHByb3BlcnR5IHVzZXMgYSBuYW1lc3BhY2Ugd2UgdXNlIGdldEF0dHJpYnV0ZVxuICAgICAgICAvLyBiZWNhdXNlIHdlIGFzc3VtZSBpdHMgbmFtZXNwYWNlZCBuYW1lIGlzIHRoZSBzYW1lIGFzIG91ciBjb25maWcuXG4gICAgICAgIC8vIFRvIHVzZSBnZXRBdHRyaWJ1dGVOUyB3ZSBuZWVkIHRoZSBsb2NhbCBuYW1lIHdoaWNoIHdlIGRvbid0IGhhdmVcbiAgICAgICAgLy8gaW4gb3VyIGNvbmZpZyBhdG0uXG5cblxuICAgICAgICBzdHJpbmdWYWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlKG5hbWUsIGV4cGVjdGVkLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWUgPT09IG51bGwgPyBleHBlY3RlZCA6IHN0cmluZ1ZhbHVlO1xuICAgICAgfSBlbHNlIGlmIChzdHJpbmdWYWx1ZSA9PT0gJycgKyBleHBlY3RlZCkge1xuICAgICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3RyaW5nVmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEdldCB0aGUgdmFsdWUgZm9yIGEgYXR0cmlidXRlIG9uIGEgbm9kZS4gT25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKiBUaGUgdGhpcmQgYXJndW1lbnQgaXMgdXNlZCBhcyBhIGhpbnQgb2Ygd2hhdCB0aGUgZXhwZWN0ZWQgdmFsdWUgaXMuIFNvbWVcbiAqIGF0dHJpYnV0ZXMgaGF2ZSBtdWx0aXBsZSBlcXVpdmFsZW50IHZhbHVlcy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRWYWx1ZUZvckF0dHJpYnV0ZShub2RlLCBuYW1lLCBleHBlY3RlZCkge1xuICB7XG4gICAgaWYgKCFpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBJZiB0aGUgb2JqZWN0IGlzIGFuIG9wYXF1ZSByZWZlcmVuY2UgSUQsIGl0J3MgZXhwZWN0ZWQgdGhhdFxuICAgIC8vIHRoZSBuZXh0IHByb3AgaXMgZGlmZmVyZW50IHRoYW4gdGhlIHNlcnZlciB2YWx1ZSwgc28ganVzdCByZXR1cm5cbiAgICAvLyBleHBlY3RlZFxuXG5cbiAgICBpZiAoaXNPcGFxdWVIeWRyYXRpbmdPYmplY3QoZXhwZWN0ZWQpKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKCFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKSkge1xuICAgICAgcmV0dXJuIGV4cGVjdGVkID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBudWxsO1xuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXG4gICAgaWYgKHZhbHVlID09PSAnJyArIGV4cGVjdGVkKSB7XG4gICAgICByZXR1cm4gZXhwZWN0ZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHByb3BlcnR5IG9uIGEgbm9kZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKi9cblxuZnVuY3Rpb24gc2V0VmFsdWVGb3JQcm9wZXJ0eShub2RlLCBuYW1lLCB2YWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpIHtcbiAgdmFyIHByb3BlcnR5SW5mbyA9IGdldFByb3BlcnR5SW5mbyhuYW1lKTtcblxuICBpZiAoc2hvdWxkSWdub3JlQXR0cmlidXRlKG5hbWUsIHByb3BlcnR5SW5mbywgaXNDdXN0b21Db21wb25lbnRUYWcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHNob3VsZFJlbW92ZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICB2YWx1ZSA9IG51bGw7XG4gIH0gLy8gSWYgdGhlIHByb3AgaXNuJ3QgaW4gdGhlIHNwZWNpYWwgbGlzdCwgdHJlYXQgaXQgYXMgYSBzaW1wbGUgYXR0cmlidXRlLlxuXG5cbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnIHx8IHByb3BlcnR5SW5mbyA9PT0gbnVsbCkge1xuICAgIGlmIChpc0F0dHJpYnV0ZU5hbWVTYWZlKG5hbWUpKSB7XG4gICAgICB2YXIgX2F0dHJpYnV0ZU5hbWUgPSBuYW1lO1xuXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoX2F0dHJpYnV0ZU5hbWUsICAnJyArIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgbXVzdFVzZVByb3BlcnR5ID0gcHJvcGVydHlJbmZvLm11c3RVc2VQcm9wZXJ0eTtcblxuICBpZiAobXVzdFVzZVByb3BlcnR5KSB7XG4gICAgdmFyIHByb3BlcnR5TmFtZSA9IHByb3BlcnR5SW5mby5wcm9wZXJ0eU5hbWU7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHZhciB0eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgICBub2RlW3Byb3BlcnR5TmFtZV0gPSB0eXBlID09PSBCT09MRUFOID8gZmFsc2UgOiAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29udHJhcnkgdG8gYHNldEF0dHJpYnV0ZWAsIG9iamVjdCBwcm9wZXJ0aWVzIGFyZSBwcm9wZXJseVxuICAgICAgLy8gYHRvU3RyaW5nYGVkIGJ5IElFOC85LlxuICAgICAgbm9kZVtwcm9wZXJ0eU5hbWVdID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9IC8vIFRoZSByZXN0IGFyZSB0cmVhdGVkIGFzIGF0dHJpYnV0ZXMgd2l0aCBzcGVjaWFsIGNhc2VzLlxuXG5cbiAgdmFyIGF0dHJpYnV0ZU5hbWUgPSBwcm9wZXJ0eUluZm8uYXR0cmlidXRlTmFtZSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVzcGFjZSA9IHByb3BlcnR5SW5mby5hdHRyaWJ1dGVOYW1lc3BhY2U7XG5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgbm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF90eXBlID0gcHJvcGVydHlJbmZvLnR5cGU7XG4gICAgdmFyIGF0dHJpYnV0ZVZhbHVlO1xuXG4gICAgaWYgKF90eXBlID09PSBCT09MRUFOIHx8IF90eXBlID09PSBPVkVSTE9BREVEX0JPT0xFQU4gJiYgdmFsdWUgPT09IHRydWUpIHtcbiAgICAgIC8vIElmIGF0dHJpYnV0ZSB0eXBlIGlzIGJvb2xlYW4sIHdlIGtub3cgZm9yIHN1cmUgaXQgd29uJ3QgYmUgYW4gZXhlY3V0aW9uIHNpbmtcbiAgICAgIC8vIGFuZCB3ZSB3b24ndCByZXF1aXJlIFRydXN0ZWQgVHlwZSBoZXJlLlxuICAgICAgYXR0cmlidXRlVmFsdWUgPSAnJztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYHNldEF0dHJpYnV0ZWAgd2l0aCBvYmplY3RzIGJlY29tZXMgb25seSBgW29iamVjdF1gIGluIElFOC85LFxuICAgICAgLy8gKCcnICsgdmFsdWUpIG1ha2VzIGl0IG91dHB1dCB0aGUgY29ycmVjdCB0b1N0cmluZygpLXZhbHVlLlxuICAgICAge1xuICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChwcm9wZXJ0eUluZm8uc2FuaXRpemVVUkwpIHtcbiAgICAgICAgc2FuaXRpemVVUkwoYXR0cmlidXRlVmFsdWUudG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGF0dHJpYnV0ZU5hbWVzcGFjZSkge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGVOUyhhdHRyaWJ1dGVOYW1lc3BhY2UsIGF0dHJpYnV0ZU5hbWUsIGF0dHJpYnV0ZVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgYXR0cmlidXRlVmFsdWUpO1xuICAgIH1cbiAgfVxufVxuXG4vLyBBVFRFTlRJT05cbi8vIFdoZW4gYWRkaW5nIG5ldyBzeW1ib2xzIHRvIHRoaXMgZmlsZSxcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcbi8vIFRoZSBTeW1ib2wgdXNlZCB0byB0YWcgdGhlIFJlYWN0RWxlbWVudC1saWtlIHR5cGVzLiBJZiB0aGVyZSBpcyBubyBuYXRpdmUgU3ltYm9sXG4vLyBub3IgcG9seWZpbGwsIHRoZW4gYSBwbGFpbiBudW1iZXIgaXMgdXNlZCBmb3IgcGVyZm9ybWFuY2UuXG52YXIgUkVBQ1RfRUxFTUVOVF9UWVBFID0gMHhlYWM3O1xudmFyIFJFQUNUX1BPUlRBTF9UWVBFID0gMHhlYWNhO1xudmFyIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSAweGVhY2I7XG52YXIgUkVBQ1RfU1RSSUNUX01PREVfVFlQRSA9IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG52YXIgUkVBQ1RfU1VTUEVOU0VfVFlQRSA9IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gMHhlYWQ5O1xudmFyIFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFID0gMHhlYWRhO1xudmFyIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSAweGVhZDU7XG52YXIgUkVBQ1RfU0NPUEVfVFlQRSA9IDB4ZWFkNztcbnZhciBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IDB4ZWFlMDtcbnZhciBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRSA9IDB4ZWFlMTtcbnZhciBSRUFDVF9PRkZTQ1JFRU5fVFlQRSA9IDB4ZWFlMjtcbnZhciBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSAweGVhZTM7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciA9IFN5bWJvbC5mb3I7XG4gIFJFQUNUX0VMRU1FTlRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZWxlbWVudCcpO1xuICBSRUFDVF9QT1JUQUxfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QucG9ydGFsJyk7XG4gIFJFQUNUX0ZSQUdNRU5UX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XG4gIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN0cmljdF9tb2RlJyk7XG4gIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb2ZpbGVyJyk7XG4gIFJFQUNUX1BST1ZJREVSX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnByb3ZpZGVyJyk7XG4gIFJFQUNUX0NPTlRFWFRfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuY29udGV4dCcpO1xuICBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mb3J3YXJkX3JlZicpO1xuICBSRUFDVF9TVVNQRU5TRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZScpO1xuICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnN1c3BlbnNlX2xpc3QnKTtcbiAgUkVBQ1RfTUVNT19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5tZW1vJyk7XG4gIFJFQUNUX0xBWllfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubGF6eScpO1xuICBSRUFDVF9CTE9DS19UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5ibG9jaycpO1xuICBSRUFDVF9TRVJWRVJfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Quc2VydmVyLmJsb2NrJyk7XG4gIFJFQUNUX0ZVTkRBTUVOVEFMX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmZ1bmRhbWVudGFsJyk7XG4gIFJFQUNUX1NDT1BFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNjb3BlJyk7XG4gIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vcGFxdWUuaWQnKTtcbiAgUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmRlYnVnX3RyYWNlX21vZGUnKTtcbiAgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0Lm9mZnNjcmVlbicpO1xuICBSRUFDVF9MRUdBQ1lfSElEREVOX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxlZ2FjeV9oaWRkZW4nKTtcbn1cblxudmFyIE1BWUJFX0lURVJBVE9SX1NZTUJPTCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLml0ZXJhdG9yO1xudmFyIEZBVVhfSVRFUkFUT1JfU1lNQk9MID0gJ0BAaXRlcmF0b3InO1xuZnVuY3Rpb24gZ2V0SXRlcmF0b3JGbihtYXliZUl0ZXJhYmxlKSB7XG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIG1heWJlSXRlcmF0b3IgPSBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgJiYgbWF5YmVJdGVyYWJsZVtNQVlCRV9JVEVSQVRPUl9TWU1CT0xdIHx8IG1heWJlSXRlcmFibGVbRkFVWF9JVEVSQVRPUl9TWU1CT0xdO1xuXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXliZUl0ZXJhdG9yO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8vIEhlbHBlcnMgdG8gcGF0Y2ggY29uc29sZS5sb2dzIHRvIGF2b2lkIGxvZ2dpbmcgZHVyaW5nIHNpZGUtZWZmZWN0IGZyZWVcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XG4vLyBsYXppbHkgd2hpY2ggd29uJ3QgY292ZXIgaWYgdGhlIGxvZyBmdW5jdGlvbiB3YXMgZXh0cmFjdGVkIGVhZ2VybHkuXG4vLyBXZSBjb3VsZCBhbHNvIGVhZ2VybHkgcGF0Y2ggdGhlIG1ldGhvZC5cbnZhciBkaXNhYmxlZERlcHRoID0gMDtcbnZhciBwcmV2TG9nO1xudmFyIHByZXZJbmZvO1xudmFyIHByZXZXYXJuO1xudmFyIHByZXZFcnJvcjtcbnZhciBwcmV2R3JvdXA7XG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xudmFyIHByZXZHcm91cEVuZDtcblxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxuXG5kaXNhYmxlZExvZy5fX3JlYWN0RGlzYWJsZWRMb2cgPSB0cnVlO1xuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XG4gIHtcbiAgICBpZiAoZGlzYWJsZWREZXB0aCA9PT0gMCkge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgICBwcmV2TG9nID0gY29uc29sZS5sb2c7XG4gICAgICBwcmV2SW5mbyA9IGNvbnNvbGUuaW5mbztcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xuICAgICAgcHJldkVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgICAgIHByZXZHcm91cCA9IGNvbnNvbGUuZ3JvdXA7XG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xuICAgICAgcHJldkdyb3VwRW5kID0gY29uc29sZS5ncm91cEVuZDsgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xOTA5OVxuXG4gICAgICB2YXIgcHJvcHMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBpbmZvOiBwcm9wcyxcbiAgICAgICAgbG9nOiBwcm9wcyxcbiAgICAgICAgd2FybjogcHJvcHMsXG4gICAgICAgIGVycm9yOiBwcm9wcyxcbiAgICAgICAgZ3JvdXA6IHByb3BzLFxuICAgICAgICBncm91cENvbGxhcHNlZDogcHJvcHMsXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGRpc2FibGVkRGVwdGgrKztcbiAgfVxufVxuZnVuY3Rpb24gcmVlbmFibGVMb2dzKCkge1xuICB7XG4gICAgZGlzYWJsZWREZXB0aC0tO1xuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lIEZsb3cgdGhpbmtzIGNvbnNvbGUgaXMgaW1tdXRhYmxlLlxuXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XG4gICAgICAgIGxvZzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xuICAgICAgICB9KSxcbiAgICAgICAgaW5mbzogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkluZm9cbiAgICAgICAgfSksXG4gICAgICAgIHdhcm46IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZXYXJuXG4gICAgICAgIH0pLFxuICAgICAgICBlcnJvcjogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cENvbGxhcHNlZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwQ29sbGFwc2VkXG4gICAgICAgIH0pLFxuICAgICAgICBncm91cEVuZDogX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXG4gICAgfVxuXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XG4gICAgICBlcnJvcignZGlzYWJsZWREZXB0aCBmZWxsIGJlbG93IHplcm8uICcgKyAnVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cbiAgICAvLyBmb3Igd2FybmluZ3MuXG5cbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xuICAgIGRpc2FibGVMb2dzKCk7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRoaXMgc2hvdWxkIHRocm93LlxuICAgIGlmIChjb25zdHJ1Y3QpIHtcbiAgICAgIC8vIFNvbWV0aGluZyBzaG91bGQgYmUgc2V0dGluZyB0aGUgcHJvcHMgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgICAgdmFyIEZha2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lXG5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEZha2UucHJvdG90eXBlLCAncHJvcHMnLCB7XG4gICAgICAgIHNldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIFdlIHVzZSBhIHRocm93aW5nIHNldHRlciBpbnN0ZWFkIG9mIGZyb3plbiBvciBub24td3JpdGFibGUgcHJvcHNcbiAgICAgICAgICAvLyBiZWNhdXNlIHRoYXQgd29uJ3QgdGhyb3cgaW4gYSBub24tc3RyaWN0IG1vZGUgZnVuY3Rpb24uXG4gICAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gJ29iamVjdCcgJiYgUmVmbGVjdC5jb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gV2UgY29uc3RydWN0IGEgZGlmZmVyZW50IGNvbnRyb2wgZm9yIHRoaXMgY2FzZSB0byBpbmNsdWRlIGFueSBleHRyYVxuICAgICAgICAvLyBmcmFtZXMgYWRkZWQgYnkgdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZmxlY3QuY29uc3RydWN0KEZha2UsIFtdKTtcbiAgICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICAgIGNvbnRyb2wgPSB4O1xuICAgICAgICB9XG5cbiAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgRmFrZS5jYWxsKCk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfSBjYXRjaCAoeCkge1xuICAgICAgICBjb250cm9sID0geDtcbiAgICAgIH1cblxuICAgICAgZm4oKTtcbiAgICB9XG4gIH0gY2F0Y2ggKHNhbXBsZSkge1xuICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXG4gICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBUaGlzIGV4dHJhY3RzIHRoZSBmaXJzdCBmcmFtZSBmcm9tIHRoZSBzYW1wbGUgdGhhdCBpc24ndCBhbHNvIGluIHRoZSBjb250cm9sLlxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXG4gICAgICB2YXIgc2FtcGxlTGluZXMgPSBzYW1wbGUuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2wuc3RhY2suc3BsaXQoJ1xcbicpO1xuICAgICAgdmFyIHMgPSBzYW1wbGVMaW5lcy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGMgPSBjb250cm9sTGluZXMubGVuZ3RoIC0gMTtcblxuICAgICAgd2hpbGUgKHMgPj0gMSAmJiBjID49IDAgJiYgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAvLyBXZSBleHBlY3QgYXQgbGVhc3Qgb25lIHN0YWNrIGZyYW1lIHRvIGJlIHNoYXJlZC5cbiAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxuICAgICAgICAvLyBjdXQgb2ZmIGR1ZSB0byBtYXhpbXVtIHN0YWNrIGxpbWl0cy4gSW4gdGhpcyBjYXNlLCBvbmUgbWF5YmUgY3V0IG9mZlxuICAgICAgICAvLyBlYXJsaWVyIHRoYW4gdGhlIG90aGVyLiBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtcGxlIGlzIGxvbmdlciBvciB0aGUgc2FtZVxuICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxuICAgICAgICAvLyB0aGUgc2FtcGxlIHNvbWV3aGVyZSBpbiB0aGUgY29udHJvbC5cbiAgICAgICAgYy0tO1xuICAgICAgfVxuXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcbiAgICAgICAgLy8gTmV4dCB3ZSBmaW5kIHRoZSBmaXJzdCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSB3aGljaCBzaG91bGQgYmUgdGhlXG4gICAgICAgIC8vIGZyYW1lIHRoYXQgY2FsbGVkIG91ciBzYW1wbGUgZnVuY3Rpb24gYW5kIHRoZSBjb250cm9sLlxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgIC8vIEluIFY4LCB0aGUgZmlyc3QgbGluZSBpcyBkZXNjcmliaW5nIHRoZSBtZXNzYWdlIGJ1dCBvdGhlciBWTXMgZG9uJ3QuXG4gICAgICAgICAgLy8gSWYgd2UncmUgYWJvdXQgdG8gcmV0dXJuIHRoZSBmaXJzdCBsaW5lLCBhbmQgdGhlIGNvbnRyb2wgaXMgYWxzbyBvbiB0aGUgc2FtZVxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXG4gICAgICAgICAgLy8gdGhlIGNvbnRyb2wuIEkuZS4gYmVmb3JlIHdlIGVudGVyZWQgdGhlIHNhbXBsZSBmcmFtZS4gU28gd2UgaWdub3JlIHRoaXMgcmVzdWx0LlxuICAgICAgICAgIC8vIFRoaXMgY2FuIGhhcHBlbiBpZiB5b3UgcGFzc2VkIGEgY2xhc3MgdG8gZnVuY3Rpb24gY29tcG9uZW50LCBvciBub24tZnVuY3Rpb24uXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICBzLS07XG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxuICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBvbmUgdGhhdCBpc24ndCB0aGUgc2FtZSBzaG91bGQgYmUgb3VyIG1hdGNoIHRob3VnaC5cblxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xuICAgICAgICAgICAgICAgIC8vIFY4IGFkZHMgYSBcIm5ld1wiIHByZWZpeCBmb3IgbmF0aXZlIGNsYXNzZXMuIExldCdzIHJlbW92ZSBpdCB0byBtYWtlIGl0IHByZXR0aWVyLlxuICAgICAgICAgICAgICAgIHZhciBfZnJhbWUgPSAnXFxuJyArIHNhbXBsZUxpbmVzW3NdLnJlcGxhY2UoJyBhdCBuZXcgJywgJyBhdCAnKTtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSAvLyBSZXR1cm4gdGhlIGxpbmUgd2UgZm91bmQuXG5cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJhbWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gd2hpbGUgKHMgPj0gMSAmJiBjID49IDApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlZW50cnkgPSBmYWxzZTtcblxuICAgIHtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShjdG9yLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGN0b3IsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVGaWJlcihmaWJlcikge1xuICB2YXIgb3duZXIgPSAgZmliZXIuX2RlYnVnT3duZXIgPyBmaWJlci5fZGVidWdPd25lci50eXBlIDogbnVsbCA7XG4gIHZhciBzb3VyY2UgPSAgZmliZXIuX2RlYnVnU291cmNlIDtcblxuICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGNhc2UgTGF6eUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnTGF6eScpO1xuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcblxuICAgIGNhc2UgU3VzcGVuc2VMaXN0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZmliZXIudHlwZSk7XG5cbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUucmVuZGVyKTtcblxuICAgIGNhc2UgQmxvY2s6XG4gICAgICByZXR1cm4gZGVzY3JpYmVGdW5jdGlvbkNvbXBvbmVudEZyYW1lKGZpYmVyLnR5cGUuX3JlbmRlcik7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIGRlc2NyaWJlQ2xhc3NDb21wb25lbnRGcmFtZShmaWJlci50eXBlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gJyc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0U3RhY2tCeUZpYmVySW5EZXZBbmRQcm9kKHdvcmtJblByb2dyZXNzKSB7XG4gIHRyeSB7XG4gICAgdmFyIGluZm8gPSAnJztcbiAgICB2YXIgbm9kZSA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgZG8ge1xuICAgICAgaW5mbyArPSBkZXNjcmliZUZpYmVyKG5vZGUpO1xuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH0gd2hpbGUgKG5vZGUpO1xuXG4gICAgcmV0dXJuIGluZm87XG4gIH0gY2F0Y2ggKHgpIHtcbiAgICByZXR1cm4gJ1xcbkVycm9yIGdlbmVyYXRpbmcgc3RhY2s6ICcgKyB4Lm1lc3NhZ2UgKyAnXFxuJyArIHguc3RhY2s7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0V3JhcHBlZE5hbWUob3V0ZXJUeXBlLCBpbm5lclR5cGUsIHdyYXBwZXJOYW1lKSB7XG4gIHZhciBmdW5jdGlvbk5hbWUgPSBpbm5lclR5cGUuZGlzcGxheU5hbWUgfHwgaW5uZXJUeXBlLm5hbWUgfHwgJyc7XG4gIHJldHVybiBvdXRlclR5cGUuZGlzcGxheU5hbWUgfHwgKGZ1bmN0aW9uTmFtZSAhPT0gJycgPyB3cmFwcGVyTmFtZSArIFwiKFwiICsgZnVuY3Rpb25OYW1lICsgXCIpXCIgOiB3cmFwcGVyTmFtZSk7XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHROYW1lKHR5cGUpIHtcbiAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgJ0NvbnRleHQnO1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnROYW1lKHR5cGUpIHtcbiAgaWYgKHR5cGUgPT0gbnVsbCkge1xuICAgIC8vIEhvc3Qgcm9vdCwgdGV4dCBub2RlIG9yIGp1c3QgaW52YWxpZCB0eXBlLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICh0eXBlb2YgdHlwZS50YWcgPT09ICdudW1iZXInKSB7XG4gICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZSgpLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHlwZTtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgIHJldHVybiAnRnJhZ21lbnQnO1xuXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgIHJldHVybiAnUG9ydGFsJztcblxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgIHJldHVybiAnUHJvZmlsZXInO1xuXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG52YXIgY3VycmVudCA9IG51bGw7XG52YXIgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlck93bmVyTmFtZUluRGV2T3JOdWxsKCkge1xuICB7XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBvd25lciA9IGN1cnJlbnQuX2RlYnVnT3duZXI7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgdHlwZW9mIG93bmVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlclN0YWNrSW5EZXYoKSB7XG4gIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gLy8gU2FmZSBiZWNhdXNlIGlmIGN1cnJlbnQgZmliZXIgZXhpc3RzLCB3ZSBhcmUgcmVjb25jaWxpbmcsXG4gICAgLy8gYW5kIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgdmVyc2lvbi5cblxuXG4gICAgcmV0dXJuIGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChjdXJyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldEN1cnJlbnRGaWJlcigpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gbnVsbDtcbiAgICBjdXJyZW50ID0gbnVsbDtcbiAgICBpc1JlbmRlcmluZyA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiBzZXRDdXJyZW50RmliZXIoZmliZXIpIHtcbiAge1xuICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0Q3VycmVudFN0YWNrID0gZ2V0Q3VycmVudEZpYmVyU3RhY2tJbkRldjtcbiAgICBjdXJyZW50ID0gZmliZXI7XG4gICAgaXNSZW5kZXJpbmcgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gc2V0SXNSZW5kZXJpbmcocmVuZGVyaW5nKSB7XG4gIHtcbiAgICBpc1JlbmRlcmluZyA9IHJlbmRlcmluZztcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SXNSZW5kZXJpbmcoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNSZW5kZXJpbmc7XG4gIH1cbn1cblxuLy8gRmxvdyBkb2VzIG5vdCBhbGxvdyBzdHJpbmcgY29uY2F0ZW5hdGlvbiBvZiBtb3N0IG5vbi1zdHJpbmcgdHlwZXMuIFRvIHdvcmtcbi8vIGFyb3VuZCB0aGlzIGxpbWl0YXRpb24sIHdlIHVzZSBhbiBvcGFxdWUgdHlwZSB0aGF0IGNhbiBvbmx5IGJlIG9idGFpbmVkIGJ5XG4vLyBwYXNzaW5nIHRoZSB2YWx1ZSB0aHJvdWdoIGdldFRvU3RyaW5nVmFsdWUgZmlyc3QuXG5mdW5jdGlvbiB0b1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gJycgKyB2YWx1ZTtcbn1cbmZ1bmN0aW9uIGdldFRvU3RyaW5nVmFsdWUodmFsdWUpIHtcbiAgc3dpdGNoICh0eXBlb2YgdmFsdWUpIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICBjYXNlICdudW1iZXInOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnc3RyaW5nJzpcbiAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGZ1bmN0aW9uLCBzeW1ib2wgYXJlIGFzc2lnbmVkIGFzIGVtcHR5IHN0cmluZ3NcbiAgICAgIHJldHVybiAnJztcbiAgfVxufVxuXG52YXIgaGFzUmVhZE9ubHlWYWx1ZSA9IHtcbiAgYnV0dG9uOiB0cnVlLFxuICBjaGVja2JveDogdHJ1ZSxcbiAgaW1hZ2U6IHRydWUsXG4gIGhpZGRlbjogdHJ1ZSxcbiAgcmFkaW86IHRydWUsXG4gIHJlc2V0OiB0cnVlLFxuICBzdWJtaXQ6IHRydWVcbn07XG5mdW5jdGlvbiBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKHRhZ05hbWUsIHByb3BzKSB7XG4gIHtcbiAgICBpZiAoIShoYXNSZWFkT25seVZhbHVlW3Byb3BzLnR5cGVdIHx8IHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLm9uSW5wdXQgfHwgcHJvcHMucmVhZE9ubHkgfHwgcHJvcHMuZGlzYWJsZWQgfHwgcHJvcHMudmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgdmFsdWVgIHByb3AgdG8gYSBmb3JtIGZpZWxkIHdpdGhvdXQgYW4gJyArICdgb25DaGFuZ2VgIGhhbmRsZXIuIFRoaXMgd2lsbCByZW5kZXIgYSByZWFkLW9ubHkgZmllbGQuIElmICcgKyAndGhlIGZpZWxkIHNob3VsZCBiZSBtdXRhYmxlIHVzZSBgZGVmYXVsdFZhbHVlYC4gT3RoZXJ3aXNlLCAnICsgJ3NldCBlaXRoZXIgYG9uQ2hhbmdlYCBvciBgcmVhZE9ubHlgLicpO1xuICAgIH1cblxuICAgIGlmICghKHByb3BzLm9uQ2hhbmdlIHx8IHByb3BzLnJlYWRPbmx5IHx8IHByb3BzLmRpc2FibGVkIHx8IHByb3BzLmNoZWNrZWQgPT0gbnVsbCkpIHtcbiAgICAgIGVycm9yKCdZb3UgcHJvdmlkZWQgYSBgY2hlY2tlZGAgcHJvcCB0byBhIGZvcm0gZmllbGQgd2l0aG91dCBhbiAnICsgJ2BvbkNoYW5nZWAgaGFuZGxlci4gVGhpcyB3aWxsIHJlbmRlciBhIHJlYWQtb25seSBmaWVsZC4gSWYgJyArICd0aGUgZmllbGQgc2hvdWxkIGJlIG11dGFibGUgdXNlIGBkZWZhdWx0Q2hlY2tlZGAuIE90aGVyd2lzZSwgJyArICdzZXQgZWl0aGVyIGBvbkNoYW5nZWAgb3IgYHJlYWRPbmx5YC4nKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDaGVja2FibGUoZWxlbSkge1xuICB2YXIgdHlwZSA9IGVsZW0udHlwZTtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIG5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdpbnB1dCcgJiYgKHR5cGUgPT09ICdjaGVja2JveCcgfHwgdHlwZSA9PT0gJ3JhZGlvJyk7XG59XG5cbmZ1bmN0aW9uIGdldFRyYWNrZXIobm9kZSkge1xuICByZXR1cm4gbm9kZS5fdmFsdWVUcmFja2VyO1xufVxuXG5mdW5jdGlvbiBkZXRhY2hUcmFja2VyKG5vZGUpIHtcbiAgbm9kZS5fdmFsdWVUcmFja2VyID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWVGcm9tTm9kZShub2RlKSB7XG4gIHZhciB2YWx1ZSA9ICcnO1xuXG4gIGlmICghbm9kZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChpc0NoZWNrYWJsZShub2RlKSkge1xuICAgIHZhbHVlID0gbm9kZS5jaGVja2VkID8gJ3RydWUnIDogJ2ZhbHNlJztcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IG5vZGUudmFsdWU7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHRyYWNrVmFsdWVPbk5vZGUobm9kZSkge1xuICB2YXIgdmFsdWVGaWVsZCA9IGlzQ2hlY2thYmxlKG5vZGUpID8gJ2NoZWNrZWQnIDogJ3ZhbHVlJztcbiAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG5vZGUuY29uc3RydWN0b3IucHJvdG90eXBlLCB2YWx1ZUZpZWxkKTtcbiAgdmFyIGN1cnJlbnRWYWx1ZSA9ICcnICsgbm9kZVt2YWx1ZUZpZWxkXTsgLy8gaWYgc29tZW9uZSBoYXMgYWxyZWFkeSBkZWZpbmVkIGEgdmFsdWUgb3IgU2FmYXJpLCB0aGVuIGJhaWxcbiAgLy8gYW5kIGRvbid0IHRyYWNrIHZhbHVlIHdpbGwgY2F1c2Ugb3ZlciByZXBvcnRpbmcgb2YgY2hhbmdlcyxcbiAgLy8gYnV0IGl0J3MgYmV0dGVyIHRoZW4gYSBoYXJkIGZhaWx1cmVcbiAgLy8gKG5lZWRlZCBmb3IgY2VydGFpbiB0ZXN0cyB0aGF0IHNweU9uIGlucHV0IHZhbHVlcyBhbmQgU2FmYXJpKVxuXG4gIGlmIChub2RlLmhhc093blByb3BlcnR5KHZhbHVlRmllbGQpIHx8IHR5cGVvZiBkZXNjcmlwdG9yID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZGVzY3JpcHRvci5nZXQgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGRlc2NyaXB0b3Iuc2V0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGdldCA9IGRlc2NyaXB0b3IuZ2V0LFxuICAgICAgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGdldC5jYWxsKHRoaXMpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgICBzZXQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfVxuICB9KTsgLy8gV2UgY291bGQndmUgcGFzc2VkIHRoaXMgdGhlIGZpcnN0IHRpbWVcbiAgLy8gYnV0IGl0IHRyaWdnZXJzIGEgYnVnIGluIElFMTEgYW5kIEVkZ2UgMTQvMTUuXG4gIC8vIENhbGxpbmcgZGVmaW5lUHJvcGVydHkoKSBhZ2FpbiBzaG91bGQgYmUgZXF1aXZhbGVudC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTc2OFxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShub2RlLCB2YWx1ZUZpZWxkLCB7XG4gICAgZW51bWVyYWJsZTogZGVzY3JpcHRvci5lbnVtZXJhYmxlXG4gIH0pO1xuICB2YXIgdHJhY2tlciA9IHtcbiAgICBnZXRWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRWYWx1ZTtcbiAgICB9LFxuICAgIHNldFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRWYWx1ZSA9ICcnICsgdmFsdWU7XG4gICAgfSxcbiAgICBzdG9wVHJhY2tpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGRldGFjaFRyYWNrZXIobm9kZSk7XG4gICAgICBkZWxldGUgbm9kZVt2YWx1ZUZpZWxkXTtcbiAgICB9XG4gIH07XG4gIHJldHVybiB0cmFja2VyO1xufVxuXG5mdW5jdGlvbiB0cmFjayhub2RlKSB7XG4gIGlmIChnZXRUcmFja2VyKG5vZGUpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIFRPRE86IE9uY2UgaXQncyBqdXN0IEZpYmVyIHdlIGNhbiBtb3ZlIHRoaXMgdG8gbm9kZS5fd3JhcHBlclN0YXRlXG5cblxuICBub2RlLl92YWx1ZVRyYWNrZXIgPSB0cmFja1ZhbHVlT25Ob2RlKG5vZGUpO1xufVxuZnVuY3Rpb24gdXBkYXRlVmFsdWVJZkNoYW5nZWQobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdHJhY2tlciA9IGdldFRyYWNrZXIobm9kZSk7IC8vIGlmIHRoZXJlIGlzIG5vIHRyYWNrZXIgYXQgdGhpcyBwb2ludCBpdCdzIHVubGlrZWx5XG4gIC8vIHRoYXQgdHJ5aW5nIGFnYWluIHdpbGwgc3VjY2VlZFxuXG4gIGlmICghdHJhY2tlcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdmFyIGxhc3RWYWx1ZSA9IHRyYWNrZXIuZ2V0VmFsdWUoKTtcbiAgdmFyIG5leHRWYWx1ZSA9IGdldFZhbHVlRnJvbU5vZGUobm9kZSk7XG5cbiAgaWYgKG5leHRWYWx1ZSAhPT0gbGFzdFZhbHVlKSB7XG4gICAgdHJhY2tlci5zZXRWYWx1ZShuZXh0VmFsdWUpO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRBY3RpdmVFbGVtZW50KGRvYykge1xuICBkb2MgPSBkb2MgfHwgKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBkb2N1bWVudCA6IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHR5cGVvZiBkb2MgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBkb2MuYWN0aXZlRWxlbWVudCB8fCBkb2MuYm9keTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBkb2MuYm9keTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlID0gZmFsc2U7XG52YXIgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IGZhbHNlO1xudmFyIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSBmYWxzZTtcbnZhciBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gZmFsc2U7XG5cbmZ1bmN0aW9uIGlzQ29udHJvbGxlZChwcm9wcykge1xuICB2YXIgdXNlc0NoZWNrZWQgPSBwcm9wcy50eXBlID09PSAnY2hlY2tib3gnIHx8IHByb3BzLnR5cGUgPT09ICdyYWRpbyc7XG4gIHJldHVybiB1c2VzQ2hlY2tlZCA/IHByb3BzLmNoZWNrZWQgIT0gbnVsbCA6IHByb3BzLnZhbHVlICE9IG51bGw7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPGlucHV0PiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIHRoZXNlIG9wdGlvbmFsXG4gKiBwcm9wczogYGNoZWNrZWRgLCBgdmFsdWVgLCBgZGVmYXVsdENoZWNrZWRgLCBhbmQgYGRlZmF1bHRWYWx1ZWAuXG4gKlxuICogSWYgYGNoZWNrZWRgIG9yIGB2YWx1ZWAgYXJlIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnNcbiAqIHRoYXQgYWZmZWN0IHRoZSBjaGVja2VkIHN0YXRlIG9yIHZhbHVlIHdpbGwgdHJpZ2dlciB1cGRhdGVzIHRvIHRoZSBlbGVtZW50LlxuICpcbiAqIElmIHRoZXkgYXJlIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBub3RcbiAqIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIHByb3BzIG11c3QgY2hhbmdlIGluIG9yZGVyIGZvclxuICogdGhlIHJlbmRlcmVkIGVsZW1lbnQgdG8gYmUgdXBkYXRlZC5cbiAqXG4gKiBUaGUgcmVuZGVyZWQgZWxlbWVudCB3aWxsIGJlIGluaXRpYWxpemVkIGFzIHVuY2hlY2tlZCAob3IgYGRlZmF1bHRDaGVja2VkYClcbiAqIHdpdGggYW4gZW1wdHkgdmFsdWUgKG9yIGBkZWZhdWx0VmFsdWVgKS5cbiAqXG4gKiBTZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMi9XRC1odG1sNS0yMDEyMTAyNS90aGUtaW5wdXQtZWxlbWVudC5odG1sXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgZGVmYXVsdENoZWNrZWQ6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgIGNoZWNrZWQ6IGNoZWNrZWQgIT0gbnVsbCA/IGNoZWNrZWQgOiBub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWRcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ2lucHV0JywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLmNoZWNrZWQgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5kZWZhdWx0Q2hlY2tlZCAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuQ2hlY2tlZERlZmF1bHRDaGVja2VkKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYW4gaW5wdXQgb2YgdHlwZSAlcyB3aXRoIGJvdGggY2hlY2tlZCBhbmQgZGVmYXVsdENoZWNrZWQgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIGNoZWNrZWQgcHJvcCwgb3IgdGhlIGRlZmF1bHRDaGVja2VkIHByb3AsIGJ1dCBub3QgJyArICdib3RoKS4gRGVjaWRlIGJldHdlZW4gdXNpbmcgYSBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCBpbnB1dCAnICsgJ2VsZW1lbnQgYW5kIHJlbW92ZSBvbmUgb2YgdGhlc2UgcHJvcHMuIE1vcmUgaW5mbzogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJywgZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKSB8fCAnQSBjb21wb25lbnQnLCBwcm9wcy50eXBlKTtcblxuICAgICAgZGlkV2FybkNoZWNrZWREZWZhdWx0Q2hlY2tlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWx1ZURlZmF1bHRWYWx1ZSkge1xuICAgICAgZXJyb3IoJyVzIGNvbnRhaW5zIGFuIGlucHV0IG9mIHR5cGUgJXMgd2l0aCBib3RoIHZhbHVlIGFuZCBkZWZhdWx0VmFsdWUgcHJvcHMuICcgKyAnSW5wdXQgZWxlbWVudHMgbXVzdCBiZSBlaXRoZXIgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgJyArICcoc3BlY2lmeSBlaXRoZXIgdGhlIHZhbHVlIHByb3AsIG9yIHRoZSBkZWZhdWx0VmFsdWUgcHJvcCwgYnV0IG5vdCAnICsgJ2JvdGgpLiBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcsIHByb3BzLnR5cGUpO1xuXG4gICAgICBkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSA9PSBudWxsID8gJycgOiBwcm9wcy5kZWZhdWx0VmFsdWU7XG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsQ2hlY2tlZDogcHJvcHMuY2hlY2tlZCAhPSBudWxsID8gcHJvcHMuY2hlY2tlZCA6IHByb3BzLmRlZmF1bHRDaGVja2VkLFxuICAgIGluaXRpYWxWYWx1ZTogZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSAhPSBudWxsID8gcHJvcHMudmFsdWUgOiBkZWZhdWx0VmFsdWUpLFxuICAgIGNvbnRyb2xsZWQ6IGlzQ29udHJvbGxlZChwcm9wcylcbiAgfTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgY2hlY2tlZCA9IHByb3BzLmNoZWNrZWQ7XG5cbiAgaWYgKGNoZWNrZWQgIT0gbnVsbCkge1xuICAgIHNldFZhbHVlRm9yUHJvcGVydHkobm9kZSwgJ2NoZWNrZWQnLCBjaGVja2VkLCBmYWxzZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHVwZGF0ZVdyYXBwZXIoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuXG4gIHtcbiAgICB2YXIgY29udHJvbGxlZCA9IGlzQ29udHJvbGxlZChwcm9wcyk7XG5cbiAgICBpZiAoIW5vZGUuX3dyYXBwZXJTdGF0ZS5jb250cm9sbGVkICYmIGNvbnRyb2xsZWQgJiYgIWRpZFdhcm5VbmNvbnRyb2xsZWRUb0NvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhbiB1bmNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgY29udHJvbGxlZC4gJyArICdUaGlzIGlzIGxpa2VseSBjYXVzZWQgYnkgdGhlIHZhbHVlIGNoYW5naW5nIGZyb20gdW5kZWZpbmVkIHRvICcgKyAnYSBkZWZpbmVkIHZhbHVlLCB3aGljaCBzaG91bGQgbm90IGhhcHBlbi4gJyArICdEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkIGlucHV0ICcgKyAnZWxlbWVudCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBjb21wb25lbnQuIE1vcmUgaW5mbzogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2NvbnRyb2xsZWQtY29tcG9uZW50cycpO1xuXG4gICAgICBkaWRXYXJuVW5jb250cm9sbGVkVG9Db250cm9sbGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZS5fd3JhcHBlclN0YXRlLmNvbnRyb2xsZWQgJiYgIWNvbnRyb2xsZWQgJiYgIWRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyBhIGNvbnRyb2xsZWQgaW5wdXQgdG8gYmUgdW5jb250cm9sbGVkLiAnICsgJ1RoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSB0aGUgdmFsdWUgY2hhbmdpbmcgZnJvbSBhIGRlZmluZWQgdG8gJyArICd1bmRlZmluZWQsIHdoaWNoIHNob3VsZCBub3QgaGFwcGVuLiAnICsgJ0RlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgaW5wdXQgJyArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4gTW9yZSBpbmZvOiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY29udHJvbGxlZC1jb21wb25lbnRzJyk7XG5cbiAgICAgIGRpZFdhcm5Db250cm9sbGVkVG9VbmNvbnRyb2xsZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZUNoZWNrZWQoZWxlbWVudCwgcHJvcHMpO1xuICB2YXIgdmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLnZhbHVlKTtcbiAgdmFyIHR5cGUgPSBwcm9wcy50eXBlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAodmFsdWUgPT09IDAgJiYgbm9kZS52YWx1ZSA9PT0gJycgfHwgLy8gV2UgZXhwbGljaXRseSB3YW50IHRvIGNvZXJjZSB0byBudW1iZXIgaGVyZSBpZiBwb3NzaWJsZS5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgbm9kZS52YWx1ZSAhPSB2YWx1ZSkge1xuICAgICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAobm9kZS52YWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLnZhbHVlID0gdG9TdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnKSB7XG4gICAgLy8gU3VibWl0L3Jlc2V0IGlucHV0cyBuZWVkIHRoZSBhdHRyaWJ1dGUgcmVtb3ZlZCBjb21wbGV0ZWx5IHRvIGF2b2lkXG4gICAgLy8gYmxhbmstdGV4dCBidXR0b25zLlxuICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKCd2YWx1ZScpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIHZhbHVlIGF0dHJpYnV0ZSwgdGhlIHZhbHVlIGNvbWVzIGZyb20gYSBjYXNjYWRlIG9mXG4gICAgLy8gcHJvcGVydGllczpcbiAgICAvLyAgMS4gVGhlIHZhbHVlIFJlYWN0IHByb3BlcnR5XG4gICAgLy8gIDIuIFRoZSBkZWZhdWx0VmFsdWUgUmVhY3QgcHJvcGVydHlcbiAgICAvLyAgMy4gT3RoZXJ3aXNlIHRoZXJlIHNob3VsZCBiZSBubyBjaGFuZ2VcbiAgICBpZiAocHJvcHMuaGFzT3duUHJvcGVydHkoJ3ZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChwcm9wcy5oYXNPd25Qcm9wZXJ0eSgnZGVmYXVsdFZhbHVlJykpIHtcbiAgICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCBwcm9wcy50eXBlLCBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyBXaGVuIHN5bmNpbmcgdGhlIGNoZWNrZWQgYXR0cmlidXRlLCBpdCBvbmx5IGNoYW5nZXMgd2hlbiBpdCBuZWVkc1xuICAgIC8vIHRvIGJlIHJlbW92ZWQsIHN1Y2ggYXMgdHJhbnNpdGlvbmluZyBmcm9tIGEgY2hlY2tib3ggaW50byBhIHRleHQgaW5wdXRcbiAgICBpZiAocHJvcHMuY2hlY2tlZCA9PSBudWxsICYmIHByb3BzLmRlZmF1bHRDaGVja2VkICE9IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIXByb3BzLmRlZmF1bHRDaGVja2VkO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlcihlbGVtZW50LCBwcm9wcywgaXNIeWRyYXRpbmcpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50OyAvLyBEbyBub3QgYXNzaWduIHZhbHVlIGlmIGl0IGlzIGFscmVhZHkgc2V0LiBUaGlzIHByZXZlbnRzIHVzZXIgdGV4dCBpbnB1dFxuICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgaWYgKHByb3BzLmhhc093blByb3BlcnR5KCd2YWx1ZScpIHx8IHByb3BzLmhhc093blByb3BlcnR5KCdkZWZhdWx0VmFsdWUnKSkge1xuICAgIHZhciB0eXBlID0gcHJvcHMudHlwZTtcbiAgICB2YXIgaXNCdXR0b24gPSB0eXBlID09PSAnc3VibWl0JyB8fCB0eXBlID09PSAncmVzZXQnOyAvLyBBdm9pZCBzZXR0aW5nIHZhbHVlIGF0dHJpYnV0ZSBvbiBzdWJtaXQvcmVzZXQgaW5wdXRzIGFzIGl0IG92ZXJyaWRlcyB0aGVcbiAgICAvLyBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSBicm93c2VyLiBTZWU6ICMxMjg3MlxuXG4gICAgaWYgKGlzQnV0dG9uICYmIChwcm9wcy52YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHByb3BzLnZhbHVlID09PSBudWxsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBpbml0aWFsVmFsdWUgPSB0b1N0cmluZyhub2RlLl93cmFwcGVyU3RhdGUuaW5pdGlhbFZhbHVlKTsgLy8gRG8gbm90IGFzc2lnbiB2YWx1ZSBpZiBpdCBpcyBhbHJlYWR5IHNldC4gVGhpcyBwcmV2ZW50cyB1c2VyIHRleHQgaW5wdXRcbiAgICAvLyBmcm9tIGJlaW5nIGxvc3QgZHVyaW5nIFNTUiBoeWRyYXRpb24uXG5cbiAgICBpZiAoIWlzSHlkcmF0aW5nKSB7XG4gICAgICB7XG4gICAgICAgIC8vIFdoZW4gc3luY2luZyB0aGUgdmFsdWUgYXR0cmlidXRlLCB0aGUgdmFsdWUgcHJvcGVydHkgc2hvdWxkIHVzZVxuICAgICAgICAvLyB0aGUgd3JhcHBlclN0YXRlLl9pbml0aWFsVmFsdWUgcHJvcGVydHkuIFRoaXMgdXNlczpcbiAgICAgICAgLy9cbiAgICAgICAgLy8gICAxLiBUaGUgdmFsdWUgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgICAgIC8vICAgMi4gVGhlIGRlZmF1bHRWYWx1ZSBSZWFjdCBwcm9wZXJ0eSB3aGVuIHByZXNlbnRcbiAgICAgICAgLy8gICAzLiBBbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgaWYgKGluaXRpYWxWYWx1ZSAhPT0gbm9kZS52YWx1ZSkge1xuICAgICAgICAgIG5vZGUudmFsdWUgPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICAvLyBPdGhlcndpc2UsIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgaXMgc3luY2hyb25pemVkIHRvIHRoZSBwcm9wZXJ0eSxcbiAgICAgIC8vIHNvIHdlIGFzc2lnbiBkZWZhdWx0VmFsdWUgdG8gdGhlIHNhbWUgdGhpbmcgYXMgdGhlIHZhbHVlIHByb3BlcnR5XG4gICAgICAvLyBhc3NpZ25tZW50IHN0ZXAgYWJvdmUuXG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IGluaXRpYWxWYWx1ZTtcbiAgICB9XG4gIH0gLy8gTm9ybWFsbHksIHdlJ2QganVzdCBkbyBgbm9kZS5jaGVja2VkID0gbm9kZS5jaGVja2VkYCB1cG9uIGluaXRpYWwgbW91bnQsIGxlc3MgdGhpcyBidWdcbiAgLy8gdGhpcyBpcyBuZWVkZWQgdG8gd29yayBhcm91bmQgYSBjaHJvbWUgYnVnIHdoZXJlIHNldHRpbmcgZGVmYXVsdENoZWNrZWRcbiAgLy8gd2lsbCBzb21ldGltZXMgaW5mbHVlbmNlIHRoZSB2YWx1ZSBvZiBjaGVja2VkIChldmVuIGFmdGVyIGRldGFjaG1lbnQpLlxuICAvLyBSZWZlcmVuY2U6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTYwODQxNlxuICAvLyBXZSBuZWVkIHRvIHRlbXBvcmFyaWx5IHVuc2V0IG5hbWUgdG8gYXZvaWQgZGlzcnVwdGluZyByYWRpbyBidXR0b24gZ3JvdXBzLlxuXG5cbiAgdmFyIG5hbWUgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5hbWUgIT09ICcnKSB7XG4gICAgbm9kZS5uYW1lID0gJyc7XG4gIH1cblxuICB7XG4gICAgLy8gV2hlbiBzeW5jaW5nIHRoZSBjaGVja2VkIGF0dHJpYnV0ZSwgYm90aCB0aGUgY2hlY2tlZCBwcm9wZXJ0eSBhbmRcbiAgICAvLyBhdHRyaWJ1dGUgYXJlIGFzc2lnbmVkIGF0IHRoZSBzYW1lIHRpbWUgdXNpbmcgZGVmYXVsdENoZWNrZWQuIFRoaXMgdXNlczpcbiAgICAvL1xuICAgIC8vICAgMS4gVGhlIGNoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAyLiBUaGUgZGVmYXVsdENoZWNrZWQgUmVhY3QgcHJvcGVydHkgd2hlbiBwcmVzZW50XG4gICAgLy8gICAzLiBPdGhlcndpc2UsIGZhbHNlXG4gICAgbm9kZS5kZWZhdWx0Q2hlY2tlZCA9ICFub2RlLmRlZmF1bHRDaGVja2VkO1xuICAgIG5vZGUuZGVmYXVsdENoZWNrZWQgPSAhIW5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZDtcbiAgfVxuXG4gIGlmIChuYW1lICE9PSAnJykge1xuICAgIG5vZGUubmFtZSA9IG5hbWU7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc3RvcmVDb250cm9sbGVkU3RhdGUoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB1cGRhdGVXcmFwcGVyKG5vZGUsIHByb3BzKTtcbiAgdXBkYXRlTmFtZWRDb3VzaW5zKG5vZGUsIHByb3BzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTmFtZWRDb3VzaW5zKHJvb3ROb2RlLCBwcm9wcykge1xuICB2YXIgbmFtZSA9IHByb3BzLm5hbWU7XG5cbiAgaWYgKHByb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmFtZSAhPSBudWxsKSB7XG4gICAgdmFyIHF1ZXJ5Um9vdCA9IHJvb3ROb2RlO1xuXG4gICAgd2hpbGUgKHF1ZXJ5Um9vdC5wYXJlbnROb2RlKSB7XG4gICAgICBxdWVyeVJvb3QgPSBxdWVyeVJvb3QucGFyZW50Tm9kZTtcbiAgICB9IC8vIElmIGByb290Tm9kZS5mb3JtYCB3YXMgbm9uLW51bGwsIHRoZW4gd2UgY291bGQgdHJ5IGBmb3JtLmVsZW1lbnRzYCxcbiAgICAvLyBidXQgdGhhdCBzb21ldGltZXMgYmVoYXZlcyBzdHJhbmdlbHkgaW4gSUU4LiBXZSBjb3VsZCBhbHNvIHRyeSB1c2luZ1xuICAgIC8vIGBmb3JtLmdldEVsZW1lbnRzQnlOYW1lYCwgYnV0IHRoYXQgd2lsbCBvbmx5IHJldHVybiBkaXJlY3QgY2hpbGRyZW5cbiAgICAvLyBhbmQgd29uJ3QgaW5jbHVkZSBpbnB1dHMgdGhhdCB1c2UgdGhlIEhUTUw1IGBmb3JtPWAgYXR0cmlidXRlLiBTaW5jZVxuICAgIC8vIHRoZSBpbnB1dCBtaWdodCBub3QgZXZlbiBiZSBpbiBhIGZvcm0uIEl0IG1pZ2h0IG5vdCBldmVuIGJlIGluIHRoZVxuICAgIC8vIGRvY3VtZW50LiBMZXQncyBqdXN0IHVzZSB0aGUgbG9jYWwgYHF1ZXJ5U2VsZWN0b3JBbGxgIHRvIGVuc3VyZSB3ZSBkb24ndFxuICAgIC8vIG1pc3MgYW55dGhpbmcuXG5cblxuICAgIHZhciBncm91cCA9IHF1ZXJ5Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCdpbnB1dFtuYW1lPScgKyBKU09OLnN0cmluZ2lmeSgnJyArIG5hbWUpICsgJ11bdHlwZT1cInJhZGlvXCJdJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGdyb3VwLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgb3RoZXJOb2RlID0gZ3JvdXBbaV07XG5cbiAgICAgIGlmIChvdGhlck5vZGUgPT09IHJvb3ROb2RlIHx8IG90aGVyTm9kZS5mb3JtICE9PSByb290Tm9kZS5mb3JtKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBUaGlzIHdpbGwgdGhyb3cgaWYgcmFkaW8gYnV0dG9ucyByZW5kZXJlZCBieSBkaWZmZXJlbnQgY29waWVzIG9mIFJlYWN0XG4gICAgICAvLyBhbmQgdGhlIHNhbWUgbmFtZSBhcmUgcmVuZGVyZWQgaW50byB0aGUgc2FtZSBmb3JtIChzYW1lIGFzICMxOTM5KS5cbiAgICAgIC8vIFRoYXQncyBwcm9iYWJseSBva2F5OyB3ZSBkb24ndCBzdXBwb3J0IGl0IGp1c3QgYXMgd2UgZG9uJ3Qgc3VwcG9ydFxuICAgICAgLy8gbWl4aW5nIFJlYWN0IHJhZGlvIGJ1dHRvbnMgd2l0aCBub24tUmVhY3Qgb25lcy5cblxuXG4gICAgICB2YXIgb3RoZXJQcm9wcyA9IGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUob3RoZXJOb2RlKTtcblxuICAgICAgaWYgKCFvdGhlclByb3BzKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJSZWFjdERPTUlucHV0OiBNaXhpbmcgUmVhY3QgYW5kIG5vbi1SZWFjdCByYWRpbyBpbnB1dHMgd2l0aCB0aGUgc2FtZSBgbmFtZWAgaXMgbm90IHN1cHBvcnRlZC5cIiApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFdlIG5lZWQgdXBkYXRlIHRoZSB0cmFja2VkIHZhbHVlIG9uIHRoZSBuYW1lZCBjb3VzaW4gc2luY2UgdGhlIHZhbHVlXG4gICAgICAvLyB3YXMgY2hhbmdlZCBidXQgdGhlIGlucHV0IHNhdyBubyBldmVudCBvciB2YWx1ZSBzZXRcblxuXG4gICAgICB1cGRhdGVWYWx1ZUlmQ2hhbmdlZChvdGhlck5vZGUpOyAvLyBJZiB0aGlzIGlzIGEgY29udHJvbGxlZCByYWRpbyBidXR0b24gZ3JvdXAsIGZvcmNpbmcgdGhlIGlucHV0IHRoYXRcbiAgICAgIC8vIHdhcyBwcmV2aW91c2x5IGNoZWNrZWQgdG8gdXBkYXRlIHdpbGwgY2F1c2UgaXQgdG8gYmUgY29tZSByZS1jaGVja2VkXG4gICAgICAvLyBhcyBhcHByb3ByaWF0ZS5cblxuICAgICAgdXBkYXRlV3JhcHBlcihvdGhlck5vZGUsIG90aGVyUHJvcHMpO1xuICAgIH1cbiAgfVxufSAvLyBJbiBDaHJvbWUsIGFzc2lnbmluZyBkZWZhdWx0VmFsdWUgdG8gY2VydGFpbiBpbnB1dCB0eXBlcyB0cmlnZ2VycyBpbnB1dCB2YWxpZGF0aW9uLlxuLy8gRm9yIG51bWJlciBpbnB1dHMsIHRoZSBkaXNwbGF5IHZhbHVlIGxvc2VzIHRyYWlsaW5nIGRlY2ltYWwgcG9pbnRzLiBGb3IgZW1haWwgaW5wdXRzLFxuLy8gQ2hyb21lIHJhaXNlcyBcIlRoZSBzcGVjaWZpZWQgdmFsdWUgPHg+IGlzIG5vdCBhIHZhbGlkIGVtYWlsIGFkZHJlc3NcIi5cbi8vXG4vLyBIZXJlIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgZGVmYXVsdFZhbHVlIGhhcyBhY3R1YWxseSBjaGFuZ2VkLCBhdm9pZGluZyB0aGVzZSBwcm9ibGVtc1xuLy8gd2hlbiB0aGUgdXNlciBpcyBpbnB1dHRpbmcgdGV4dFxuLy9cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNzI1M1xuXG5cbmZ1bmN0aW9uIHNldERlZmF1bHRWYWx1ZShub2RlLCB0eXBlLCB2YWx1ZSkge1xuICBpZiAoIC8vIEZvY3VzZWQgbnVtYmVyIGlucHV0cyBzeW5jaHJvbml6ZSBvbiBibHVyLiBTZWUgQ2hhbmdlRXZlbnRQbHVnaW4uanNcbiAgdHlwZSAhPT0gJ251bWJlcicgfHwgZ2V0QWN0aXZlRWxlbWVudChub2RlLm93bmVyRG9jdW1lbnQpICE9PSBub2RlKSB7XG4gICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSk7XG4gICAgfSBlbHNlIGlmIChub2RlLmRlZmF1bHRWYWx1ZSAhPT0gdG9TdHJpbmcodmFsdWUpKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IHRvU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TZWxlY3RlZFNldE9uT3B0aW9uID0gZmFsc2U7XG52YXIgZGlkV2FybkludmFsaWRDaGlsZCA9IGZhbHNlO1xuXG5mdW5jdGlvbiBmbGF0dGVuQ2hpbGRyZW4oY2hpbGRyZW4pIHtcbiAgdmFyIGNvbnRlbnQgPSAnJzsgLy8gRmxhdHRlbiBjaGlsZHJlbi4gV2UnbGwgd2FybiBpZiB0aGV5IGFyZSBpbnZhbGlkXG4gIC8vIGR1cmluZyB2YWxpZGF0ZVByb3BzKCkgd2hpY2ggcnVucyBmb3IgaHlkcmF0aW9uIHRvby5cbiAgLy8gTm90ZSB0aGF0IHRoaXMgd291bGQgdGhyb3cgb24gbm9uLWVsZW1lbnQgb2JqZWN0cy5cbiAgLy8gRWxlbWVudHMgYXJlIHN0cmluZ2lmaWVkICh3aGljaCBpcyBub3JtYWxseSBpcnJlbGV2YW50XG4gIC8vIGJ1dCBtYXR0ZXJzIGZvciA8ZmJ0PikuXG5cbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgaWYgKGNoaWxkID09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250ZW50ICs9IGNoaWxkOyAvLyBOb3RlOiB3ZSBkb24ndCB3YXJuIGFib3V0IGludmFsaWQgY2hpbGRyZW4gaGVyZS5cbiAgICAvLyBJbnN0ZWFkLCB0aGlzIGlzIGRvbmUgc2VwYXJhdGVseSBiZWxvdyBzbyB0aGF0XG4gICAgLy8gaXQgaGFwcGVucyBkdXJpbmcgdGhlIGh5ZHJhdGlvbiBjb2RlIHBhdGggdG9vLlxuICB9KTtcbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4vKipcbiAqIEltcGxlbWVudHMgYW4gPG9wdGlvbj4gaG9zdCBjb21wb25lbnQgdGhhdCB3YXJucyB3aGVuIGBzZWxlY3RlZGAgaXMgc2V0LlxuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhlbGVtZW50LCBwcm9wcykge1xuICB7XG4gICAgLy8gVGhpcyBtaXJyb3JzIHRoZSBjb2RlIHBhdGggYWJvdmUsIGJ1dCBydW5zIGZvciBoeWRyYXRpb24gdG9vLlxuICAgIC8vIFdhcm4gYWJvdXQgaW52YWxpZCBjaGlsZHJlbiBoZXJlIHNvIHRoYXQgY2xpZW50IGFuZCBoeWRyYXRpb24gYXJlIGNvbnNpc3RlbnQuXG4gICAgLy8gVE9ETzogdGhpcyBzZWVtcyBsaWtlIGl0IGNvdWxkIGNhdXNlIGEgREVWLW9ubHkgdGhyb3cgZm9yIGh5ZHJhdGlvblxuICAgIC8vIGlmIGNoaWxkcmVuIGNvbnRhaW5zIGEgbm9uLWVsZW1lbnQgb2JqZWN0LiBXZSBzaG91bGQgdHJ5IHRvIGF2b2lkIHRoYXQuXG4gICAgaWYgKHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ29iamVjdCcgJiYgcHJvcHMuY2hpbGRyZW4gIT09IG51bGwpIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2gocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGNoaWxkLnR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRXYXJuSW52YWxpZENoaWxkKSB7XG4gICAgICAgICAgZGlkV2FybkludmFsaWRDaGlsZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignT25seSBzdHJpbmdzIGFuZCBudW1iZXJzIGFyZSBzdXBwb3J0ZWQgYXMgPG9wdGlvbj4gY2hpbGRyZW4uJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVE9ETzogUmVtb3ZlIHN1cHBvcnQgZm9yIGBzZWxlY3RlZGAgaW4gPG9wdGlvbj4uXG5cblxuICAgIGlmIChwcm9wcy5zZWxlY3RlZCAhPSBudWxsICYmICFkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbikge1xuICAgICAgZXJyb3IoJ1VzZSB0aGUgYGRlZmF1bHRWYWx1ZWAgb3IgYHZhbHVlYCBwcm9wcyBvbiA8c2VsZWN0PiBpbnN0ZWFkIG9mICcgKyAnc2V0dGluZyBgc2VsZWN0ZWRgIG9uIDxvcHRpb24+LicpO1xuXG4gICAgICBkaWRXYXJuU2VsZWN0ZWRTZXRPbk9wdGlvbiA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3N0TW91bnRXcmFwcGVyJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gdmFsdWU9XCJcIiBzaG91bGQgbWFrZSBhIHZhbHVlIGF0dHJpYnV0ZSAoIzYyMTkpXG4gIGlmIChwcm9wcy52YWx1ZSAhPSBudWxsKSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJywgdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSkpKTtcbiAgfVxufVxuZnVuY3Rpb24gZ2V0SG9zdFByb3BzJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe1xuICAgIGNoaWxkcmVuOiB1bmRlZmluZWRcbiAgfSwgcHJvcHMpO1xuXG4gIHZhciBjb250ZW50ID0gZmxhdHRlbkNoaWxkcmVuKHByb3BzLmNoaWxkcmVuKTtcblxuICBpZiAoY29udGVudCkge1xuICAgIGhvc3RQcm9wcy5jaGlsZHJlbiA9IGNvbnRlbnQ7XG4gIH1cblxuICByZXR1cm4gaG9zdFByb3BzO1xufVxuXG52YXIgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDE7XG5cbntcbiAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICB2YXIgb3duZXJOYW1lID0gZ2V0Q3VycmVudEZpYmVyT3duZXJOYW1lSW5EZXZPck51bGwoKTtcblxuICBpZiAob3duZXJOYW1lKSB7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbnZhciB2YWx1ZVByb3BOYW1lcyA9IFsndmFsdWUnLCAnZGVmYXVsdFZhbHVlJ107XG4vKipcbiAqIFZhbGlkYXRpb24gZnVuY3Rpb24gZm9yIGB2YWx1ZWAgYW5kIGBkZWZhdWx0VmFsdWVgLlxuICovXG5cbmZ1bmN0aW9uIGNoZWNrU2VsZWN0UHJvcFR5cGVzKHByb3BzKSB7XG4gIHtcbiAgICBjaGVja0NvbnRyb2xsZWRWYWx1ZVByb3BzKCdzZWxlY3QnLCBwcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlUHJvcE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcHJvcE5hbWUgPSB2YWx1ZVByb3BOYW1lc1tpXTtcblxuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkocHJvcHNbcHJvcE5hbWVdKTtcblxuICAgICAgaWYgKHByb3BzLm11bHRpcGxlICYmICFpc0FycmF5KSB7XG4gICAgICAgIGVycm9yKCdUaGUgYCVzYCBwcm9wIHN1cHBsaWVkIHRvIDxzZWxlY3Q+IG11c3QgYmUgYW4gYXJyYXkgaWYgJyArICdgbXVsdGlwbGVgIGlzIHRydWUuJXMnLCBwcm9wTmFtZSwgZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkpO1xuICAgICAgfSBlbHNlIGlmICghcHJvcHMubXVsdGlwbGUgJiYgaXNBcnJheSkge1xuICAgICAgICBlcnJvcignVGhlIGAlc2AgcHJvcCBzdXBwbGllZCB0byA8c2VsZWN0PiBtdXN0IGJlIGEgc2NhbGFyICcgKyAndmFsdWUgaWYgYG11bHRpcGxlYCBpcyBmYWxzZS4lcycsIHByb3BOYW1lLCBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9wdGlvbnMobm9kZSwgbXVsdGlwbGUsIHByb3BWYWx1ZSwgc2V0RGVmYXVsdFNlbGVjdGVkKSB7XG4gIHZhciBvcHRpb25zID0gbm9kZS5vcHRpb25zO1xuXG4gIGlmIChtdWx0aXBsZSkge1xuICAgIHZhciBzZWxlY3RlZFZhbHVlcyA9IHByb3BWYWx1ZTtcbiAgICB2YXIgc2VsZWN0ZWRWYWx1ZSA9IHt9O1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxlY3RlZFZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gUHJlZml4IHRvIGF2b2lkIGNoYW9zIHdpdGggc3BlY2lhbCBrZXlzLlxuICAgICAgc2VsZWN0ZWRWYWx1ZVsnJCcgKyBzZWxlY3RlZFZhbHVlc1tpXV0gPSB0cnVlO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvcHRpb25zLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHNlbGVjdGVkID0gc2VsZWN0ZWRWYWx1ZS5oYXNPd25Qcm9wZXJ0eSgnJCcgKyBvcHRpb25zW19pXS52YWx1ZSk7XG5cbiAgICAgIGlmIChvcHRpb25zW19pXS5zZWxlY3RlZCAhPT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgb3B0aW9uc1tfaV0uc2VsZWN0ZWQgPSBzZWxlY3RlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHNlbGVjdGVkICYmIHNldERlZmF1bHRTZWxlY3RlZCkge1xuICAgICAgICBvcHRpb25zW19pXS5kZWZhdWx0U2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgc2V0IGBzZWxlY3QudmFsdWVgIGFzIGV4YWN0IGJlaGF2aW9yIGlzbid0IGNvbnNpc3RlbnQgYWNyb3NzIGFsbFxuICAgIC8vIGJyb3dzZXJzIGZvciBhbGwgY2FzZXMuXG4gICAgdmFyIF9zZWxlY3RlZFZhbHVlID0gdG9TdHJpbmcoZ2V0VG9TdHJpbmdWYWx1ZShwcm9wVmFsdWUpKTtcblxuICAgIHZhciBkZWZhdWx0U2VsZWN0ZWQgPSBudWxsO1xuXG4gICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgb3B0aW9ucy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBpZiAob3B0aW9uc1tfaTJdLnZhbHVlID09PSBfc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBvcHRpb25zW19pMl0uc2VsZWN0ZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmIChzZXREZWZhdWx0U2VsZWN0ZWQpIHtcbiAgICAgICAgICBvcHRpb25zW19pMl0uZGVmYXVsdFNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGRlZmF1bHRTZWxlY3RlZCA9PT0gbnVsbCAmJiAhb3B0aW9uc1tfaTJdLmRpc2FibGVkKSB7XG4gICAgICAgIGRlZmF1bHRTZWxlY3RlZCA9IG9wdGlvbnNbX2kyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFNlbGVjdGVkICE9PSBudWxsKSB7XG4gICAgICBkZWZhdWx0U2VsZWN0ZWQuc2VsZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHNlbGVjdD4gaG9zdCBjb21wb25lbnQgdGhhdCBhbGxvd3Mgb3B0aW9uYWxseSBzZXR0aW5nIHRoZVxuICogcHJvcHMgYHZhbHVlYCBhbmQgYGRlZmF1bHRWYWx1ZWAuIElmIGBtdWx0aXBsZWAgaXMgZmFsc2UsIHRoZSBwcm9wIG11c3QgYmUgYVxuICogc3RyaW5nYWJsZS4gSWYgYG11bHRpcGxlYCBpcyB0cnVlLCB0aGUgcHJvcCBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ2FibGVzLlxuICpcbiAqIElmIGB2YWx1ZWAgaXMgbm90IHN1cHBsaWVkIChvciBudWxsL3VuZGVmaW5lZCksIHVzZXIgYWN0aW9ucyB0aGF0IGNoYW5nZSB0aGVcbiAqIHNlbGVjdGVkIG9wdGlvbiB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgcmVuZGVyZWQgb3B0aW9ucy5cbiAqXG4gKiBJZiBpdCBpcyBzdXBwbGllZCAoYW5kIG5vdCBudWxsL3VuZGVmaW5lZCksIHRoZSByZW5kZXJlZCBvcHRpb25zIHdpbGwgbm90XG4gKiB1cGRhdGUgaW4gcmVzcG9uc2UgdG8gdXNlciBhY3Rpb25zLiBJbnN0ZWFkLCB0aGUgYHZhbHVlYCBwcm9wIG11c3QgY2hhbmdlIGluXG4gKiBvcmRlciBmb3IgdGhlIHJlbmRlcmVkIG9wdGlvbnMgdG8gdXBkYXRlLlxuICpcbiAqIElmIGBkZWZhdWx0VmFsdWVgIGlzIHByb3ZpZGVkLCBhbnkgb3B0aW9ucyB3aXRoIHRoZSBzdXBwbGllZCB2YWx1ZXMgd2lsbCBiZVxuICogc2VsZWN0ZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRIb3N0UHJvcHMkMihlbGVtZW50LCBwcm9wcykge1xuICByZXR1cm4gX2Fzc2lnbih7fSwgcHJvcHMsIHtcbiAgICB2YWx1ZTogdW5kZWZpbmVkXG4gIH0pO1xufVxuZnVuY3Rpb24gaW5pdFdyYXBwZXJTdGF0ZSQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICB7XG4gICAgY2hlY2tTZWxlY3RQcm9wVHlwZXMocHJvcHMpO1xuICB9XG5cbiAgbm9kZS5fd3JhcHBlclN0YXRlID0ge1xuICAgIHdhc011bHRpcGxlOiAhIXByb3BzLm11bHRpcGxlXG4gIH07XG5cbiAge1xuICAgIGlmIChwcm9wcy52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmICFkaWRXYXJuVmFsdWVEZWZhdWx0VmFsdWUkMSkge1xuICAgICAgZXJyb3IoJ1NlbGVjdCBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgc2VsZWN0ICcgKyAnZWxlbWVudCBhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnKTtcblxuICAgICAgZGlkV2FyblZhbHVlRGVmYXVsdFZhbHVlJDEgPSB0cnVlO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQyKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgbm9kZS5tdWx0aXBsZSA9ICEhcHJvcHMubXVsdGlwbGU7XG4gIHZhciB2YWx1ZSA9IHByb3BzLnZhbHVlO1xuXG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCB2YWx1ZSwgZmFsc2UpO1xuICB9IGVsc2UgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgdXBkYXRlT3B0aW9ucyhub2RlLCAhIXByb3BzLm11bHRpcGxlLCBwcm9wcy5kZWZhdWx0VmFsdWUsIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBwb3N0VXBkYXRlV3JhcHBlcihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG4gIHZhciB3YXNNdWx0aXBsZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZTtcbiAgbm9kZS5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlID0gISFwcm9wcy5tdWx0aXBsZTtcbiAgdmFyIHZhbHVlID0gcHJvcHMudmFsdWU7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHZhbHVlLCBmYWxzZSk7XG4gIH0gZWxzZSBpZiAod2FzTXVsdGlwbGUgIT09ICEhcHJvcHMubXVsdGlwbGUpIHtcbiAgICAvLyBGb3Igc2ltcGxpY2l0eSwgcmVhcHBseSBgZGVmYXVsdFZhbHVlYCBpZiBgbXVsdGlwbGVgIGlzIHRvZ2dsZWQuXG4gICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZSAhPSBudWxsKSB7XG4gICAgICB1cGRhdGVPcHRpb25zKG5vZGUsICEhcHJvcHMubXVsdGlwbGUsIHByb3BzLmRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFJldmVydCB0aGUgc2VsZWN0IGJhY2sgdG8gaXRzIGRlZmF1bHQgdW5zZWxlY3RlZCBzdGF0ZS5cbiAgICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgcHJvcHMubXVsdGlwbGUgPyBbXSA6ICcnLCBmYWxzZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDEoZWxlbWVudCwgcHJvcHMpIHtcbiAgdmFyIG5vZGUgPSBlbGVtZW50O1xuICB2YXIgdmFsdWUgPSBwcm9wcy52YWx1ZTtcblxuICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZU9wdGlvbnMobm9kZSwgISFwcm9wcy5tdWx0aXBsZSwgdmFsdWUsIGZhbHNlKTtcbiAgfVxufVxuXG52YXIgZGlkV2FyblZhbERlZmF1bHRWYWwgPSBmYWxzZTtcblxuLyoqXG4gKiBJbXBsZW1lbnRzIGEgPHRleHRhcmVhPiBob3N0IGNvbXBvbmVudCB0aGF0IGFsbG93cyBzZXR0aW5nIGB2YWx1ZWAsIGFuZFxuICogYGRlZmF1bHRWYWx1ZWAuIFRoaXMgZGlmZmVycyBmcm9tIHRoZSB0cmFkaXRpb25hbCBET00gQVBJIGJlY2F1c2UgdmFsdWUgaXNcbiAqIHVzdWFsbHkgc2V0IGFzIFBDREFUQSBjaGlsZHJlbi5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIG5vdCBzdXBwbGllZCAob3IgbnVsbC91bmRlZmluZWQpLCB1c2VyIGFjdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gKiB2YWx1ZSB3aWxsIHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC5cbiAqXG4gKiBJZiBgdmFsdWVgIGlzIHN1cHBsaWVkIChhbmQgbm90IG51bGwvdW5kZWZpbmVkKSwgdGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbFxuICogbm90IHRyaWdnZXIgdXBkYXRlcyB0byB0aGUgZWxlbWVudC4gSW5zdGVhZCwgdGhlIGB2YWx1ZWAgcHJvcCBtdXN0IGNoYW5nZSBpblxuICogb3JkZXIgZm9yIHRoZSByZW5kZXJlZCBlbGVtZW50IHRvIGJlIHVwZGF0ZWQuXG4gKlxuICogVGhlIHJlbmRlcmVkIGVsZW1lbnQgd2lsbCBiZSBpbml0aWFsaXplZCB3aXRoIGFuIGVtcHR5IHZhbHVlLCB0aGUgcHJvcFxuICogYGRlZmF1bHRWYWx1ZWAgaWYgc3BlY2lmaWVkLCBvciB0aGUgY2hpbGRyZW4gY29udGVudCAoZGVwcmVjYXRlZCkuXG4gKi9cbmZ1bmN0aW9uIGdldEhvc3RQcm9wcyQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcblxuICBpZiAoIShwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImBkYW5nZXJvdXNseVNldElubmVySFRNTGAgZG9lcyBub3QgbWFrZSBzZW5zZSBvbiA8dGV4dGFyZWE+LlwiICk7XG4gICAgfVxuICB9IC8vIEFsd2F5cyBzZXQgY2hpbGRyZW4gdG8gdGhlIHNhbWUgdGhpbmcuIEluIElFOSwgdGhlIHNlbGVjdGlvbiByYW5nZSB3aWxsXG4gIC8vIGdldCByZXNldCBpZiBgdGV4dENvbnRlbnRgIGlzIG11dGF0ZWQuICBXZSBjb3VsZCBhZGQgYSBjaGVjayBpbiBzZXRUZXh0Q29udGVudFxuICAvLyB0byBvbmx5IHNldCB0aGUgdmFsdWUgaWYvd2hlbiB0aGUgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBub2RlIHZhbHVlICh3aGljaCB3b3VsZFxuICAvLyBjb21wbGV0ZWx5IHNvbHZlIHRoaXMgSUU5IGJ1ZyksIGJ1dCBTZWJhc3RpYW4rU29waGllIHNlZW1lZCB0byBsaWtlIHRoaXNcbiAgLy8gc29sdXRpb24uIFRoZSB2YWx1ZSBjYW4gYmUgYSBib29sZWFuIG9yIG9iamVjdCBzbyB0aGF0J3Mgd2h5IGl0J3MgZm9yY2VkXG4gIC8vIHRvIGJlIGEgc3RyaW5nLlxuXG5cbiAgdmFyIGhvc3RQcm9wcyA9IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICBkZWZhdWx0VmFsdWU6IHVuZGVmaW5lZCxcbiAgICBjaGlsZHJlbjogdG9TdHJpbmcobm9kZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSlcbiAgfSk7XG5cbiAgcmV0dXJuIGhvc3RQcm9wcztcbn1cbmZ1bmN0aW9uIGluaXRXcmFwcGVyU3RhdGUkMihlbGVtZW50LCBwcm9wcykge1xuICB2YXIgbm9kZSA9IGVsZW1lbnQ7XG5cbiAge1xuICAgIGNoZWNrQ29udHJvbGxlZFZhbHVlUHJvcHMoJ3RleHRhcmVhJywgcHJvcHMpO1xuXG4gICAgaWYgKHByb3BzLnZhbHVlICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQgJiYgIWRpZFdhcm5WYWxEZWZhdWx0VmFsKSB7XG4gICAgICBlcnJvcignJXMgY29udGFpbnMgYSB0ZXh0YXJlYSB3aXRoIGJvdGggdmFsdWUgYW5kIGRlZmF1bHRWYWx1ZSBwcm9wcy4gJyArICdUZXh0YXJlYSBlbGVtZW50cyBtdXN0IGJlIGVpdGhlciBjb250cm9sbGVkIG9yIHVuY29udHJvbGxlZCAnICsgJyhzcGVjaWZ5IGVpdGhlciB0aGUgdmFsdWUgcHJvcCwgb3IgdGhlIGRlZmF1bHRWYWx1ZSBwcm9wLCBidXQgbm90ICcgKyAnYm90aCkuIERlY2lkZSBiZXR3ZWVuIHVzaW5nIGEgY29udHJvbGxlZCBvciB1bmNvbnRyb2xsZWQgdGV4dGFyZWEgJyArICdhbmQgcmVtb3ZlIG9uZSBvZiB0aGVzZSBwcm9wcy4gTW9yZSBpbmZvOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9jb250cm9sbGVkLWNvbXBvbmVudHMnLCBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpIHx8ICdBIGNvbXBvbmVudCcpO1xuXG4gICAgICBkaWRXYXJuVmFsRGVmYXVsdFZhbCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGluaXRpYWxWYWx1ZSA9IHByb3BzLnZhbHVlOyAvLyBPbmx5IGJvdGhlciBmZXRjaGluZyBkZWZhdWx0IHZhbHVlIGlmIHdlJ3JlIGdvaW5nIHRvIHVzZSBpdFxuXG4gIGlmIChpbml0aWFsVmFsdWUgPT0gbnVsbCkge1xuICAgIHZhciBjaGlsZHJlbiA9IHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBwcm9wcy5kZWZhdWx0VmFsdWU7XG5cbiAgICBpZiAoY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICBlcnJvcignVXNlIHRoZSBgZGVmYXVsdFZhbHVlYCBvciBgdmFsdWVgIHByb3BzIGluc3RlYWQgb2Ygc2V0dGluZyAnICsgJ2NoaWxkcmVuIG9uIDx0ZXh0YXJlYT4uJyk7XG4gICAgICB9XG5cbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZGVmYXVsdFZhbHVlID09IG51bGwpKSB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSWYgeW91IHN1cHBseSBgZGVmYXVsdFZhbHVlYCBvbiBhIDx0ZXh0YXJlYT4sIGRvIG5vdCBwYXNzIGNoaWxkcmVuLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgaWYgKCEoY2hpbGRyZW4ubGVuZ3RoIDw9IDEpKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRocm93IEVycm9yKCBcIjx0ZXh0YXJlYT4gY2FuIG9ubHkgaGF2ZSBhdCBtb3N0IG9uZSBjaGlsZC5cIiApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNoaWxkcmVuID0gY2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0VmFsdWUgPSBjaGlsZHJlbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGVmYXVsdFZhbHVlID09IG51bGwpIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIGluaXRpYWxWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgfVxuXG4gIG5vZGUuX3dyYXBwZXJTdGF0ZSA9IHtcbiAgICBpbml0aWFsVmFsdWU6IGdldFRvU3RyaW5nVmFsdWUoaW5pdGlhbFZhbHVlKVxuICB9O1xufVxuZnVuY3Rpb24gdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDtcbiAgdmFyIHZhbHVlID0gZ2V0VG9TdHJpbmdWYWx1ZShwcm9wcy52YWx1ZSk7XG4gIHZhciBkZWZhdWx0VmFsdWUgPSBnZXRUb1N0cmluZ1ZhbHVlKHByb3BzLmRlZmF1bHRWYWx1ZSk7XG5cbiAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAvLyBDYXN0IGB2YWx1ZWAgdG8gYSBzdHJpbmcgdG8gZW5zdXJlIHRoZSB2YWx1ZSBpcyBzZXQgY29ycmVjdGx5LiBXaGlsZVxuICAgIC8vIGJyb3dzZXJzIHR5cGljYWxseSBkbyB0aGlzIGFzIG5lY2Vzc2FyeSwganNkb20gZG9lc24ndC5cbiAgICB2YXIgbmV3VmFsdWUgPSB0b1N0cmluZyh2YWx1ZSk7IC8vIFRvIGF2b2lkIHNpZGUgZWZmZWN0cyAoc3VjaCBhcyBsb3NpbmcgdGV4dCBzZWxlY3Rpb24pLCBvbmx5IHNldCB2YWx1ZSBpZiBjaGFuZ2VkXG5cbiAgICBpZiAobmV3VmFsdWUgIT09IG5vZGUudmFsdWUpIHtcbiAgICAgIG5vZGUudmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvcHMuZGVmYXVsdFZhbHVlID09IG51bGwgJiYgbm9kZS5kZWZhdWx0VmFsdWUgIT09IG5ld1ZhbHVlKSB7XG4gICAgICBub2RlLmRlZmF1bHRWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT0gbnVsbCkge1xuICAgIG5vZGUuZGVmYXVsdFZhbHVlID0gdG9TdHJpbmcoZGVmYXVsdFZhbHVlKTtcbiAgfVxufVxuZnVuY3Rpb24gcG9zdE1vdW50V3JhcHBlciQzKGVsZW1lbnQsIHByb3BzKSB7XG4gIHZhciBub2RlID0gZWxlbWVudDsgLy8gVGhpcyBpcyBpbiBwb3N0TW91bnQgYmVjYXVzZSB3ZSBuZWVkIGFjY2VzcyB0byB0aGUgRE9NIG5vZGUsIHdoaWNoIGlzIG5vdFxuICAvLyBhdmFpbGFibGUgdW50aWwgYWZ0ZXIgdGhlIGNvbXBvbmVudCBoYXMgbW91bnRlZC5cblxuICB2YXIgdGV4dENvbnRlbnQgPSBub2RlLnRleHRDb250ZW50OyAvLyBPbmx5IHNldCBub2RlLnZhbHVlIGlmIHRleHRDb250ZW50IGlzIGVxdWFsIHRvIHRoZSBleHBlY3RlZFxuICAvLyBpbml0aWFsIHZhbHVlLiBJbiBJRTEwL0lFMTEgdGhlcmUgaXMgYSBidWcgd2hlcmUgdGhlIHBsYWNlaG9sZGVyIGF0dHJpYnV0ZVxuICAvLyB3aWxsIHBvcHVsYXRlIHRleHRDb250ZW50IGFzIHdlbGwuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1pY3Jvc29mdC5jb20vbWljcm9zb2Z0LWVkZ2UvcGxhdGZvcm0vaXNzdWVzLzEwMTUyNS9cblxuICBpZiAodGV4dENvbnRlbnQgPT09IG5vZGUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUpIHtcbiAgICBpZiAodGV4dENvbnRlbnQgIT09ICcnICYmIHRleHRDb250ZW50ICE9PSBudWxsKSB7XG4gICAgICBub2RlLnZhbHVlID0gdGV4dENvbnRlbnQ7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiByZXN0b3JlQ29udHJvbGxlZFN0YXRlJDIoZWxlbWVudCwgcHJvcHMpIHtcbiAgLy8gRE9NIGNvbXBvbmVudCBpcyBzdGlsbCBtb3VudGVkOyB1cGRhdGVcbiAgdXBkYXRlV3JhcHBlciQxKGVsZW1lbnQsIHByb3BzKTtcbn1cblxudmFyIEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xudmFyIE1BVEhfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwnO1xudmFyIFNWR19OQU1FU1BBQ0UgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xudmFyIE5hbWVzcGFjZXMgPSB7XG4gIGh0bWw6IEhUTUxfTkFNRVNQQUNFLFxuICBtYXRobWw6IE1BVEhfTkFNRVNQQUNFLFxuICBzdmc6IFNWR19OQU1FU1BBQ0Vcbn07IC8vIEFzc3VtZXMgdGhlcmUgaXMgbm8gcGFyZW50IG5hbWVzcGFjZS5cblxuZnVuY3Rpb24gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpIHtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnc3ZnJzpcbiAgICAgIHJldHVybiBTVkdfTkFNRVNQQUNFO1xuXG4gICAgY2FzZSAnbWF0aCc6XG4gICAgICByZXR1cm4gTUFUSF9OQU1FU1BBQ0U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIEhUTUxfTkFNRVNQQUNFO1xuICB9XG59XG5mdW5jdGlvbiBnZXRDaGlsZE5hbWVzcGFjZShwYXJlbnROYW1lc3BhY2UsIHR5cGUpIHtcbiAgaWYgKHBhcmVudE5hbWVzcGFjZSA9PSBudWxsIHx8IHBhcmVudE5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAvLyBObyAob3IgZGVmYXVsdCkgcGFyZW50IG5hbWVzcGFjZTogcG90ZW50aWFsIGVudHJ5IHBvaW50LlxuICAgIHJldHVybiBnZXRJbnRyaW5zaWNOYW1lc3BhY2UodHlwZSk7XG4gIH1cblxuICBpZiAocGFyZW50TmFtZXNwYWNlID09PSBTVkdfTkFNRVNQQUNFICYmIHR5cGUgPT09ICdmb3JlaWduT2JqZWN0Jykge1xuICAgIC8vIFdlJ3JlIGxlYXZpbmcgU1ZHLlxuICAgIHJldHVybiBIVE1MX05BTUVTUEFDRTtcbiAgfSAvLyBCeSBkZWZhdWx0LCBwYXNzIG5hbWVzcGFjZSBiZWxvdy5cblxuXG4gIHJldHVybiBwYXJlbnROYW1lc3BhY2U7XG59XG5cbi8qIGdsb2JhbHMgTVNBcHAgKi9cblxuLyoqXG4gKiBDcmVhdGUgYSBmdW5jdGlvbiB3aGljaCBoYXMgJ3Vuc2FmZScgcHJpdmlsZWdlcyAocmVxdWlyZWQgYnkgd2luZG93czggYXBwcylcbiAqL1xudmFyIGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24gPSBmdW5jdGlvbiAoZnVuYykge1xuICBpZiAodHlwZW9mIE1TQXBwICE9PSAndW5kZWZpbmVkJyAmJiBNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYXJnMCwgYXJnMSwgYXJnMiwgYXJnMykge1xuICAgICAgTVNBcHAuZXhlY1Vuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZnVuYyhhcmcwLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZ1bmM7XG4gIH1cbn07XG5cbnZhciByZXVzYWJsZVNWR0NvbnRhaW5lcjtcbi8qKlxuICogU2V0IHRoZSBpbm5lckhUTUwgcHJvcGVydHkgb2YgYSBub2RlXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fSBub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuICogQGludGVybmFsXG4gKi9cblxudmFyIHNldElubmVySFRNTCA9IGNyZWF0ZU1pY3Jvc29mdFVuc2FmZUxvY2FsRnVuY3Rpb24oZnVuY3Rpb24gKG5vZGUsIGh0bWwpIHtcbiAgaWYgKG5vZGUubmFtZXNwYWNlVVJJID09PSBOYW1lc3BhY2VzLnN2Zykge1xuXG4gICAgaWYgKCEoJ2lubmVySFRNTCcgaW4gbm9kZSkpIHtcbiAgICAgIC8vIElFIGRvZXMgbm90IGhhdmUgaW5uZXJIVE1MIGZvciBTVkcgbm9kZXMsIHNvIGluc3RlYWQgd2UgaW5qZWN0IHRoZVxuICAgICAgLy8gbmV3IG1hcmt1cCBpbiBhIHRlbXAgbm9kZSBhbmQgdGhlbiBtb3ZlIHRoZSBjaGlsZCBub2RlcyBhY3Jvc3MgaW50b1xuICAgICAgLy8gdGhlIHRhcmdldCBub2RlXG4gICAgICByZXVzYWJsZVNWR0NvbnRhaW5lciA9IHJldXNhYmxlU1ZHQ29udGFpbmVyIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgcmV1c2FibGVTVkdDb250YWluZXIuaW5uZXJIVE1MID0gJzxzdmc+JyArIGh0bWwudmFsdWVPZigpLnRvU3RyaW5nKCkgKyAnPC9zdmc+JztcbiAgICAgIHZhciBzdmdOb2RlID0gcmV1c2FibGVTVkdDb250YWluZXIuZmlyc3RDaGlsZDtcblxuICAgICAgd2hpbGUgKG5vZGUuZmlyc3RDaGlsZCkge1xuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChzdmdOb2RlLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgbm9kZS5hcHBlbmRDaGlsZChzdmdOb2RlLmZpcnN0Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS5pbm5lckhUTUwgPSBodG1sO1xufSk7XG5cbi8qKlxuICogSFRNTCBub2RlVHlwZSB2YWx1ZXMgdGhhdCByZXByZXNlbnQgdGhlIHR5cGUgb2YgdGhlIG5vZGVcbiAqL1xudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xudmFyIERPQ1VNRU5UX05PREUgPSA5O1xudmFyIERPQ1VNRU5UX0ZSQUdNRU5UX05PREUgPSAxMTtcblxuLyoqXG4gKiBTZXQgdGhlIHRleHRDb250ZW50IHByb3BlcnR5IG9mIGEgbm9kZS4gRm9yIHRleHQgdXBkYXRlcywgaXQncyBmYXN0ZXJcbiAqIHRvIHNldCB0aGUgYG5vZGVWYWx1ZWAgb2YgdGhlIFRleHQgbm9kZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHVzaW5nXG4gKiBgLnRleHRDb250ZW50YCB3aGljaCB3aWxsIHJlbW92ZSB0aGUgZXhpc3Rpbmcgbm9kZSBhbmQgY3JlYXRlIGEgbmV3IG9uZS5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAaW50ZXJuYWxcbiAqL1xuXG52YXIgc2V0VGV4dENvbnRlbnQgPSBmdW5jdGlvbiAobm9kZSwgdGV4dCkge1xuICBpZiAodGV4dCkge1xuICAgIHZhciBmaXJzdENoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuXG4gICAgaWYgKGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZCA9PT0gbm9kZS5sYXN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFKSB7XG4gICAgICBmaXJzdENoaWxkLm5vZGVWYWx1ZSA9IHRleHQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgbm9kZS50ZXh0Q29udGVudCA9IHRleHQ7XG59O1xuXG4vLyBMaXN0IGRlcml2ZWQgZnJvbSBHZWNrbyBzb3VyY2UgY29kZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iLzRlNjM4ZWZjNzEvbGF5b3V0L3N0eWxlL3Rlc3QvcHJvcGVydHlfZGF0YWJhc2UuanNcbnZhciBzaG9ydGhhbmRUb0xvbmdoYW5kID0ge1xuICBhbmltYXRpb246IFsnYW5pbWF0aW9uRGVsYXknLCAnYW5pbWF0aW9uRGlyZWN0aW9uJywgJ2FuaW1hdGlvbkR1cmF0aW9uJywgJ2FuaW1hdGlvbkZpbGxNb2RlJywgJ2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50JywgJ2FuaW1hdGlvbk5hbWUnLCAnYW5pbWF0aW9uUGxheVN0YXRlJywgJ2FuaW1hdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIGJhY2tncm91bmQ6IFsnYmFja2dyb3VuZEF0dGFjaG1lbnQnLCAnYmFja2dyb3VuZENsaXAnLCAnYmFja2dyb3VuZENvbG9yJywgJ2JhY2tncm91bmRJbWFnZScsICdiYWNrZ3JvdW5kT3JpZ2luJywgJ2JhY2tncm91bmRQb3NpdGlvblgnLCAnYmFja2dyb3VuZFBvc2l0aW9uWScsICdiYWNrZ3JvdW5kUmVwZWF0JywgJ2JhY2tncm91bmRTaXplJ10sXG4gIGJhY2tncm91bmRQb3NpdGlvbjogWydiYWNrZ3JvdW5kUG9zaXRpb25YJywgJ2JhY2tncm91bmRQb3NpdGlvblknXSxcbiAgYm9yZGVyOiBbJ2JvcmRlckJvdHRvbUNvbG9yJywgJ2JvcmRlckJvdHRvbVN0eWxlJywgJ2JvcmRlckJvdHRvbVdpZHRoJywgJ2JvcmRlckltYWdlT3V0c2V0JywgJ2JvcmRlckltYWdlUmVwZWF0JywgJ2JvcmRlckltYWdlU2xpY2UnLCAnYm9yZGVySW1hZ2VTb3VyY2UnLCAnYm9yZGVySW1hZ2VXaWR0aCcsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyTGVmdFN0eWxlJywgJ2JvcmRlckxlZnRXaWR0aCcsICdib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCcsICdib3JkZXJUb3BDb2xvcicsICdib3JkZXJUb3BTdHlsZScsICdib3JkZXJUb3BXaWR0aCddLFxuICBib3JkZXJCbG9ja0VuZDogWydib3JkZXJCbG9ja0VuZENvbG9yJywgJ2JvcmRlckJsb2NrRW5kU3R5bGUnLCAnYm9yZGVyQmxvY2tFbmRXaWR0aCddLFxuICBib3JkZXJCbG9ja1N0YXJ0OiBbJ2JvcmRlckJsb2NrU3RhcnRDb2xvcicsICdib3JkZXJCbG9ja1N0YXJ0U3R5bGUnLCAnYm9yZGVyQmxvY2tTdGFydFdpZHRoJ10sXG4gIGJvcmRlckJvdHRvbTogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJCb3R0b21XaWR0aCddLFxuICBib3JkZXJDb2xvcjogWydib3JkZXJCb3R0b21Db2xvcicsICdib3JkZXJMZWZ0Q29sb3InLCAnYm9yZGVyUmlnaHRDb2xvcicsICdib3JkZXJUb3BDb2xvciddLFxuICBib3JkZXJJbWFnZTogWydib3JkZXJJbWFnZU91dHNldCcsICdib3JkZXJJbWFnZVJlcGVhdCcsICdib3JkZXJJbWFnZVNsaWNlJywgJ2JvcmRlckltYWdlU291cmNlJywgJ2JvcmRlckltYWdlV2lkdGgnXSxcbiAgYm9yZGVySW5saW5lRW5kOiBbJ2JvcmRlcklubGluZUVuZENvbG9yJywgJ2JvcmRlcklubGluZUVuZFN0eWxlJywgJ2JvcmRlcklubGluZUVuZFdpZHRoJ10sXG4gIGJvcmRlcklubGluZVN0YXJ0OiBbJ2JvcmRlcklubGluZVN0YXJ0Q29sb3InLCAnYm9yZGVySW5saW5lU3RhcnRTdHlsZScsICdib3JkZXJJbmxpbmVTdGFydFdpZHRoJ10sXG4gIGJvcmRlckxlZnQ6IFsnYm9yZGVyTGVmdENvbG9yJywgJ2JvcmRlckxlZnRTdHlsZScsICdib3JkZXJMZWZ0V2lkdGgnXSxcbiAgYm9yZGVyUmFkaXVzOiBbJ2JvcmRlckJvdHRvbUxlZnRSYWRpdXMnLCAnYm9yZGVyQm90dG9tUmlnaHRSYWRpdXMnLCAnYm9yZGVyVG9wTGVmdFJhZGl1cycsICdib3JkZXJUb3BSaWdodFJhZGl1cyddLFxuICBib3JkZXJSaWdodDogWydib3JkZXJSaWdodENvbG9yJywgJ2JvcmRlclJpZ2h0U3R5bGUnLCAnYm9yZGVyUmlnaHRXaWR0aCddLFxuICBib3JkZXJTdHlsZTogWydib3JkZXJCb3R0b21TdHlsZScsICdib3JkZXJMZWZ0U3R5bGUnLCAnYm9yZGVyUmlnaHRTdHlsZScsICdib3JkZXJUb3BTdHlsZSddLFxuICBib3JkZXJUb3A6IFsnYm9yZGVyVG9wQ29sb3InLCAnYm9yZGVyVG9wU3R5bGUnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgYm9yZGVyV2lkdGg6IFsnYm9yZGVyQm90dG9tV2lkdGgnLCAnYm9yZGVyTGVmdFdpZHRoJywgJ2JvcmRlclJpZ2h0V2lkdGgnLCAnYm9yZGVyVG9wV2lkdGgnXSxcbiAgY29sdW1uUnVsZTogWydjb2x1bW5SdWxlQ29sb3InLCAnY29sdW1uUnVsZVN0eWxlJywgJ2NvbHVtblJ1bGVXaWR0aCddLFxuICBjb2x1bW5zOiBbJ2NvbHVtbkNvdW50JywgJ2NvbHVtbldpZHRoJ10sXG4gIGZsZXg6IFsnZmxleEJhc2lzJywgJ2ZsZXhHcm93JywgJ2ZsZXhTaHJpbmsnXSxcbiAgZmxleEZsb3c6IFsnZmxleERpcmVjdGlvbicsICdmbGV4V3JhcCddLFxuICBmb250OiBbJ2ZvbnRGYW1pbHknLCAnZm9udEZlYXR1cmVTZXR0aW5ncycsICdmb250S2VybmluZycsICdmb250TGFuZ3VhZ2VPdmVycmlkZScsICdmb250U2l6ZScsICdmb250U2l6ZUFkanVzdCcsICdmb250U3RyZXRjaCcsICdmb250U3R5bGUnLCAnZm9udFZhcmlhbnQnLCAnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbicsICdmb250V2VpZ2h0JywgJ2xpbmVIZWlnaHQnXSxcbiAgZm9udFZhcmlhbnQ6IFsnZm9udFZhcmlhbnRBbHRlcm5hdGVzJywgJ2ZvbnRWYXJpYW50Q2FwcycsICdmb250VmFyaWFudEVhc3RBc2lhbicsICdmb250VmFyaWFudExpZ2F0dXJlcycsICdmb250VmFyaWFudE51bWVyaWMnLCAnZm9udFZhcmlhbnRQb3NpdGlvbiddLFxuICBnYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkOiBbJ2dyaWRBdXRvQ29sdW1ucycsICdncmlkQXV0b0Zsb3cnLCAnZ3JpZEF1dG9Sb3dzJywgJ2dyaWRUZW1wbGF0ZUFyZWFzJywgJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnLCAnZ3JpZFRlbXBsYXRlUm93cyddLFxuICBncmlkQXJlYTogWydncmlkQ29sdW1uRW5kJywgJ2dyaWRDb2x1bW5TdGFydCcsICdncmlkUm93RW5kJywgJ2dyaWRSb3dTdGFydCddLFxuICBncmlkQ29sdW1uOiBbJ2dyaWRDb2x1bW5FbmQnLCAnZ3JpZENvbHVtblN0YXJ0J10sXG4gIGdyaWRDb2x1bW5HYXA6IFsnY29sdW1uR2FwJ10sXG4gIGdyaWRHYXA6IFsnY29sdW1uR2FwJywgJ3Jvd0dhcCddLFxuICBncmlkUm93OiBbJ2dyaWRSb3dFbmQnLCAnZ3JpZFJvd1N0YXJ0J10sXG4gIGdyaWRSb3dHYXA6IFsncm93R2FwJ10sXG4gIGdyaWRUZW1wbGF0ZTogWydncmlkVGVtcGxhdGVBcmVhcycsICdncmlkVGVtcGxhdGVDb2x1bW5zJywgJ2dyaWRUZW1wbGF0ZVJvd3MnXSxcbiAgbGlzdFN0eWxlOiBbJ2xpc3RTdHlsZUltYWdlJywgJ2xpc3RTdHlsZVBvc2l0aW9uJywgJ2xpc3RTdHlsZVR5cGUnXSxcbiAgbWFyZ2luOiBbJ21hcmdpbkJvdHRvbScsICdtYXJnaW5MZWZ0JywgJ21hcmdpblJpZ2h0JywgJ21hcmdpblRvcCddLFxuICBtYXJrZXI6IFsnbWFya2VyRW5kJywgJ21hcmtlck1pZCcsICdtYXJrZXJTdGFydCddLFxuICBtYXNrOiBbJ21hc2tDbGlwJywgJ21hc2tDb21wb3NpdGUnLCAnbWFza0ltYWdlJywgJ21hc2tNb2RlJywgJ21hc2tPcmlnaW4nLCAnbWFza1Bvc2l0aW9uWCcsICdtYXNrUG9zaXRpb25ZJywgJ21hc2tSZXBlYXQnLCAnbWFza1NpemUnXSxcbiAgbWFza1Bvc2l0aW9uOiBbJ21hc2tQb3NpdGlvblgnLCAnbWFza1Bvc2l0aW9uWSddLFxuICBvdXRsaW5lOiBbJ291dGxpbmVDb2xvcicsICdvdXRsaW5lU3R5bGUnLCAnb3V0bGluZVdpZHRoJ10sXG4gIG92ZXJmbG93OiBbJ292ZXJmbG93WCcsICdvdmVyZmxvd1knXSxcbiAgcGFkZGluZzogWydwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nVG9wJ10sXG4gIHBsYWNlQ29udGVudDogWydhbGlnbkNvbnRlbnQnLCAnanVzdGlmeUNvbnRlbnQnXSxcbiAgcGxhY2VJdGVtczogWydhbGlnbkl0ZW1zJywgJ2p1c3RpZnlJdGVtcyddLFxuICBwbGFjZVNlbGY6IFsnYWxpZ25TZWxmJywgJ2p1c3RpZnlTZWxmJ10sXG4gIHRleHREZWNvcmF0aW9uOiBbJ3RleHREZWNvcmF0aW9uQ29sb3InLCAndGV4dERlY29yYXRpb25MaW5lJywgJ3RleHREZWNvcmF0aW9uU3R5bGUnXSxcbiAgdGV4dEVtcGhhc2lzOiBbJ3RleHRFbXBoYXNpc0NvbG9yJywgJ3RleHRFbXBoYXNpc1N0eWxlJ10sXG4gIHRyYW5zaXRpb246IFsndHJhbnNpdGlvbkRlbGF5JywgJ3RyYW5zaXRpb25EdXJhdGlvbicsICd0cmFuc2l0aW9uUHJvcGVydHknLCAndHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uJ10sXG4gIHdvcmRXcmFwOiBbJ292ZXJmbG93V3JhcCddXG59O1xuXG4vKipcbiAqIENTUyBwcm9wZXJ0aWVzIHdoaWNoIGFjY2VwdCBudW1iZXJzIGJ1dCBhcmUgbm90IGluIHVuaXRzIG9mIFwicHhcIi5cbiAqL1xudmFyIGlzVW5pdGxlc3NOdW1iZXIgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiB0cnVlLFxuICBib3JkZXJJbWFnZU91dHNldDogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcbiAgYm9yZGVySW1hZ2VXaWR0aDogdHJ1ZSxcbiAgYm94RmxleDogdHJ1ZSxcbiAgYm94RmxleEdyb3VwOiB0cnVlLFxuICBib3hPcmRpbmFsR3JvdXA6IHRydWUsXG4gIGNvbHVtbkNvdW50OiB0cnVlLFxuICBjb2x1bW5zOiB0cnVlLFxuICBmbGV4OiB0cnVlLFxuICBmbGV4R3JvdzogdHJ1ZSxcbiAgZmxleFBvc2l0aXZlOiB0cnVlLFxuICBmbGV4U2hyaW5rOiB0cnVlLFxuICBmbGV4TmVnYXRpdmU6IHRydWUsXG4gIGZsZXhPcmRlcjogdHJ1ZSxcbiAgZ3JpZEFyZWE6IHRydWUsXG4gIGdyaWRSb3c6IHRydWUsXG4gIGdyaWRSb3dFbmQ6IHRydWUsXG4gIGdyaWRSb3dTcGFuOiB0cnVlLFxuICBncmlkUm93U3RhcnQ6IHRydWUsXG4gIGdyaWRDb2x1bW46IHRydWUsXG4gIGdyaWRDb2x1bW5FbmQ6IHRydWUsXG4gIGdyaWRDb2x1bW5TcGFuOiB0cnVlLFxuICBncmlkQ29sdW1uU3RhcnQ6IHRydWUsXG4gIGZvbnRXZWlnaHQ6IHRydWUsXG4gIGxpbmVDbGFtcDogdHJ1ZSxcbiAgbGluZUhlaWdodDogdHJ1ZSxcbiAgb3BhY2l0eTogdHJ1ZSxcbiAgb3JkZXI6IHRydWUsXG4gIG9ycGhhbnM6IHRydWUsXG4gIHRhYlNpemU6IHRydWUsXG4gIHdpZG93czogdHJ1ZSxcbiAgekluZGV4OiB0cnVlLFxuICB6b29tOiB0cnVlLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiB0cnVlLFxuICBmbG9vZE9wYWNpdHk6IHRydWUsXG4gIHN0b3BPcGFjaXR5OiB0cnVlLFxuICBzdHJva2VEYXNoYXJyYXk6IHRydWUsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IHRydWUsXG4gIHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG4gIHN0cm9rZU9wYWNpdHk6IHRydWUsXG4gIHN0cm9rZVdpZHRoOiB0cnVlXG59O1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJlZml4IHZlbmRvci1zcGVjaWZpYyBwcmVmaXgsIGVnOiBXZWJraXRcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgc3R5bGUgbmFtZSwgZWc6IHRyYW5zaXRpb25EdXJhdGlvblxuICogQHJldHVybiB7c3RyaW5nfSBzdHlsZSBuYW1lIHByZWZpeGVkIHdpdGggYHByZWZpeGAsIHByb3Blcmx5IGNhbWVsQ2FzZWQsIGVnOlxuICogV2Via2l0VHJhbnNpdGlvbkR1cmF0aW9uXG4gKi9cblxuZnVuY3Rpb24gcHJlZml4S2V5KHByZWZpeCwga2V5KSB7XG4gIHJldHVybiBwcmVmaXggKyBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc3Vic3RyaW5nKDEpO1xufVxuLyoqXG4gKiBTdXBwb3J0IHN0eWxlIG5hbWVzIHRoYXQgbWF5IGNvbWUgcGFzc2VkIGluIHByZWZpeGVkIGJ5IGFkZGluZyBwZXJtdXRhdGlvbnNcbiAqIG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciBwcmVmaXhlcyA9IFsnV2Via2l0JywgJ21zJywgJ01veicsICdPJ107IC8vIFVzaW5nIE9iamVjdC5rZXlzIGhlcmUsIG9yIGVsc2UgdGhlIHZhbmlsbGEgZm9yLWluIGxvb3AgbWFrZXMgSUU4IGdvIGludG8gYW5cbi8vIGluZmluaXRlIGxvb3AsIGJlY2F1c2UgaXQgaXRlcmF0ZXMgb3ZlciB0aGUgbmV3bHkgYWRkZWQgcHJvcHMgdG9vLlxuXG5PYmplY3Qua2V5cyhpc1VuaXRsZXNzTnVtYmVyKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wKSB7XG4gIHByZWZpeGVzLmZvckVhY2goZnVuY3Rpb24gKHByZWZpeCkge1xuICAgIGlzVW5pdGxlc3NOdW1iZXJbcHJlZml4S2V5KHByZWZpeCwgcHJvcCldID0gaXNVbml0bGVzc051bWJlcltwcm9wXTtcbiAgfSk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgdmFsdWUgaW50byB0aGUgcHJvcGVyIGNzcyB3cml0YWJsZSB2YWx1ZS4gVGhlIHN0eWxlIG5hbWUgYG5hbWVgXG4gKiBzaG91bGQgYmUgbG9naWNhbCAobm8gaHlwaGVucyksIGFzIHNwZWNpZmllZFxuICogaW4gYENTU1Byb3BlcnR5LmlzVW5pdGxlc3NOdW1iZXJgLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIENTUyBwcm9wZXJ0eSBuYW1lIHN1Y2ggYXMgYHRvcE1hcmdpbmAuXG4gKiBAcGFyYW0geyp9IHZhbHVlIENTUyBwcm9wZXJ0eSB2YWx1ZSBzdWNoIGFzIGAxMHB4YC5cbiAqIEByZXR1cm4ge3N0cmluZ30gTm9ybWFsaXplZCBzdHlsZSB2YWx1ZSB3aXRoIGRpbWVuc2lvbnMgYXBwbGllZC5cbiAqL1xuXG5mdW5jdGlvbiBkYW5nZXJvdXNTdHlsZVZhbHVlKG5hbWUsIHZhbHVlLCBpc0N1c3RvbVByb3BlcnR5KSB7XG4gIC8vIE5vdGUgdGhhdCB3ZSd2ZSByZW1vdmVkIGVzY2FwZVRleHRGb3JCcm93c2VyKCkgY2FsbHMgaGVyZSBzaW5jZSB0aGVcbiAgLy8gd2hvbGUgc3RyaW5nIHdpbGwgYmUgZXNjYXBlZCB3aGVuIHRoZSBhdHRyaWJ1dGUgaXMgaW5qZWN0ZWQgaW50b1xuICAvLyB0aGUgbWFya3VwLiBJZiB5b3UgcHJvdmlkZSB1bnNhZmUgdXNlciBkYXRhIGhlcmUgdGhleSBjYW4gaW5qZWN0XG4gIC8vIGFyYml0cmFyeSBDU1Mgd2hpY2ggbWF5IGJlIHByb2JsZW1hdGljIChJIGNvdWxkbid0IHJlcHJvIHRoaXMpOlxuICAvLyBodHRwczovL3d3dy5vd2FzcC5vcmcvaW5kZXgucGhwL1hTU19GaWx0ZXJfRXZhc2lvbl9DaGVhdF9TaGVldFxuICAvLyBodHRwOi8vd3d3LnRoZXNwYW5uZXIuY28udWsvMjAwNy8xMS8yNi91bHRpbWF0ZS14c3MtY3NzLWluamVjdGlvbi9cbiAgLy8gVGhpcyBpcyBub3QgYW4gWFNTIGhvbGUgYnV0IGluc3RlYWQgYSBwb3RlbnRpYWwgQ1NTIGluamVjdGlvbiBpc3N1ZVxuICAvLyB3aGljaCBoYXMgbGVhZCB0byBhIGdyZWF0ZXIgZGlzY3Vzc2lvbiBhYm91dCBob3cgd2UncmUgZ29pbmcgdG9cbiAgLy8gdHJ1c3QgVVJMcyBtb3ZpbmcgZm9yd2FyZC4gU2VlICMyMTE1OTAxXG4gIHZhciBpc0VtcHR5ID0gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJyB8fCB2YWx1ZSA9PT0gJyc7XG5cbiAgaWYgKGlzRW1wdHkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAoIWlzQ3VzdG9tUHJvcGVydHkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCAmJiAhKGlzVW5pdGxlc3NOdW1iZXIuaGFzT3duUHJvcGVydHkobmFtZSkgJiYgaXNVbml0bGVzc051bWJlcltuYW1lXSkpIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnOyAvLyBQcmVzdW1lcyBpbXBsaWNpdCAncHgnIHN1ZmZpeCBmb3IgdW5pdGxlc3MgbnVtYmVyc1xuICB9XG5cbiAgcmV0dXJuICgnJyArIHZhbHVlKS50cmltKCk7XG59XG5cbnZhciB1cHBlcmNhc2VQYXR0ZXJuID0gLyhbQS1aXSkvZztcbnZhciBtc1BhdHRlcm4gPSAvXm1zLS87XG4vKipcbiAqIEh5cGhlbmF0ZXMgYSBjYW1lbGNhc2VkIENTUyBwcm9wZXJ0eSBuYW1lLCBmb3IgZXhhbXBsZTpcbiAqXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdiYWNrZ3JvdW5kQ29sb3InKVxuICogICA8IFwiYmFja2dyb3VuZC1jb2xvclwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdNb3pUcmFuc2l0aW9uJylcbiAqICAgPCBcIi1tb3otdHJhbnNpdGlvblwiXG4gKiAgID4gaHlwaGVuYXRlU3R5bGVOYW1lKCdtc1RyYW5zaXRpb24nKVxuICogICA8IFwiLW1zLXRyYW5zaXRpb25cIlxuICpcbiAqIEFzIE1vZGVybml6ciBzdWdnZXN0cyAoaHR0cDovL21vZGVybml6ci5jb20vZG9jcy8jcHJlZml4ZWQpLCBhbiBgbXNgIHByZWZpeFxuICogaXMgY29udmVydGVkIHRvIGAtbXMtYC5cbiAqL1xuXG5mdW5jdGlvbiBoeXBoZW5hdGVTdHlsZU5hbWUobmFtZSkge1xuICByZXR1cm4gbmFtZS5yZXBsYWNlKHVwcGVyY2FzZVBhdHRlcm4sICctJDEnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UobXNQYXR0ZXJuLCAnLW1zLScpO1xufVxuXG52YXIgd2FyblZhbGlkU3R5bGUgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICAvLyAnbXNUcmFuc2Zvcm0nIGlzIGNvcnJlY3QsIGJ1dCB0aGUgb3RoZXIgcHJlZml4ZXMgc2hvdWxkIGJlIGNhcGl0YWxpemVkXG4gIHZhciBiYWRWZW5kb3JlZFN0eWxlTmFtZVBhdHRlcm4gPSAvXig/OndlYmtpdHxtb3p8bylbQS1aXS87XG4gIHZhciBtc1BhdHRlcm4kMSA9IC9eLW1zLS87XG4gIHZhciBoeXBoZW5QYXR0ZXJuID0gLy0oLikvZzsgLy8gc3R5bGUgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uXG5cbiAgdmFyIGJhZFN0eWxlVmFsdWVXaXRoU2VtaWNvbG9uUGF0dGVybiA9IC87XFxzKiQvO1xuICB2YXIgd2FybmVkU3R5bGVOYW1lcyA9IHt9O1xuICB2YXIgd2FybmVkU3R5bGVWYWx1ZXMgPSB7fTtcbiAgdmFyIHdhcm5lZEZvck5hTlZhbHVlID0gZmFsc2U7XG4gIHZhciB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gZmFsc2U7XG5cbiAgdmFyIGNhbWVsaXplID0gZnVuY3Rpb24gKHN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmcucmVwbGFjZShoeXBoZW5QYXR0ZXJuLCBmdW5jdGlvbiAoXywgY2hhcmFjdGVyKSB7XG4gICAgICByZXR1cm4gY2hhcmFjdGVyLnRvVXBwZXJDYXNlKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgdmFyIHdhcm5IeXBoZW5hdGVkU3R5bGVOYW1lID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAod2FybmVkU3R5bGVOYW1lcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSAmJiB3YXJuZWRTdHlsZU5hbWVzW25hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVOYW1lc1tuYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignVW5zdXBwb3J0ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCAvLyBBcyBBbmRpIFNtaXRoIHN1Z2dlc3RzXG4gICAgLy8gKGh0dHA6Ly93d3cuYW5kaXNtaXRoLmNvbS9ibG9nLzIwMTIvMDIvbW9kZXJuaXpyLXByZWZpeGVkLyksIGFuIGAtbXNgIHByZWZpeFxuICAgIC8vIGlzIGNvbnZlcnRlZCB0byBsb3dlcmNhc2UgYG1zYC5cbiAgICBjYW1lbGl6ZShuYW1lLnJlcGxhY2UobXNQYXR0ZXJuJDEsICdtcy0nKSkpO1xuICB9O1xuXG4gIHZhciB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZU5hbWVzLmhhc093blByb3BlcnR5KG5hbWUpICYmIHdhcm5lZFN0eWxlTmFtZXNbbmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRTdHlsZU5hbWVzW25hbWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKCdVbnN1cHBvcnRlZCB2ZW5kb3ItcHJlZml4ZWQgc3R5bGUgcHJvcGVydHkgJXMuIERpZCB5b3UgbWVhbiAlcz8nLCBuYW1lLCBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKSk7XG4gIH07XG5cbiAgdmFyIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbiA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmICh3YXJuZWRTdHlsZVZhbHVlcy5oYXNPd25Qcm9wZXJ0eSh2YWx1ZSkgJiYgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkU3R5bGVWYWx1ZXNbdmFsdWVdID0gdHJ1ZTtcblxuICAgIGVycm9yKFwiU3R5bGUgcHJvcGVydHkgdmFsdWVzIHNob3VsZG4ndCBjb250YWluIGEgc2VtaWNvbG9uLiBcIiArICdUcnkgXCIlczogJXNcIiBpbnN0ZWFkLicsIG5hbWUsIHZhbHVlLnJlcGxhY2UoYmFkU3R5bGVWYWx1ZVdpdGhTZW1pY29sb25QYXR0ZXJuLCAnJykpO1xuICB9O1xuXG4gIHZhciB3YXJuU3R5bGVWYWx1ZUlzTmFOID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvck5hTlZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FybmVkRm9yTmFOVmFsdWUgPSB0cnVlO1xuXG4gICAgZXJyb3IoJ2BOYU5gIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB2YXIgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5ID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHdhcm5lZEZvckluZmluaXR5VmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3YXJuZWRGb3JJbmZpbml0eVZhbHVlID0gdHJ1ZTtcblxuICAgIGVycm9yKCdgSW5maW5pdHlgIGlzIGFuIGludmFsaWQgdmFsdWUgZm9yIHRoZSBgJXNgIGNzcyBzdHlsZSBwcm9wZXJ0eS4nLCBuYW1lKTtcbiAgfTtcblxuICB3YXJuVmFsaWRTdHlsZSA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIGlmIChuYW1lLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICB3YXJuSHlwaGVuYXRlZFN0eWxlTmFtZShuYW1lKTtcbiAgICB9IGVsc2UgaWYgKGJhZFZlbmRvcmVkU3R5bGVOYW1lUGF0dGVybi50ZXN0KG5hbWUpKSB7XG4gICAgICB3YXJuQmFkVmVuZG9yZWRTdHlsZU5hbWUobmFtZSk7XG4gICAgfSBlbHNlIGlmIChiYWRTdHlsZVZhbHVlV2l0aFNlbWljb2xvblBhdHRlcm4udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHdhcm5TdHlsZVZhbHVlV2l0aFNlbWljb2xvbihuYW1lLCB2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc05hTihuYW1lLCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICAgICAgd2FyblN0eWxlVmFsdWVJc0luZmluaXR5KG5hbWUsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG5cbnZhciB3YXJuVmFsaWRTdHlsZSQxID0gd2FyblZhbGlkU3R5bGU7XG5cbi8qKlxuICogT3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoIENTUyBwcm9wZXJ0aWVzLlxuICovXG5cbi8qKlxuICogVGhpcyBjcmVhdGVzIGEgc3RyaW5nIHRoYXQgaXMgZXhwZWN0ZWQgdG8gYmUgZXF1aXZhbGVudCB0byB0aGUgc3R5bGVcbiAqIGF0dHJpYnV0ZSBnZW5lcmF0ZWQgYnkgc2VydmVyLXNpZGUgcmVuZGVyaW5nLiBJdCBieS1wYXNzZXMgd2FybmluZ3MgYW5kXG4gKiBzZWN1cml0eSBjaGVja3Mgc28gaXQncyBub3Qgc2FmZSB0byB1c2UgdGhpcyB2YWx1ZSBmb3IgYW55dGhpbmcgb3RoZXIgdGhhblxuICogY29tcGFyaXNvbi4gSXQgaXMgb25seSB1c2VkIGluIERFViBmb3IgU1NSIHZhbGlkYXRpb24uXG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlRGFuZ2Vyb3VzU3RyaW5nRm9yU3R5bGVzKHN0eWxlcykge1xuICB7XG4gICAgdmFyIHNlcmlhbGl6ZWQgPSAnJztcbiAgICB2YXIgZGVsaW1pdGVyID0gJyc7XG5cbiAgICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgICBpZiAoIXN0eWxlcy5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3R5bGVWYWx1ZSA9IHN0eWxlc1tzdHlsZU5hbWVdO1xuXG4gICAgICBpZiAoc3R5bGVWYWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIHZhciBpc0N1c3RvbVByb3BlcnR5ID0gc3R5bGVOYW1lLmluZGV4T2YoJy0tJykgPT09IDA7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGVsaW1pdGVyICsgKGlzQ3VzdG9tUHJvcGVydHkgPyBzdHlsZU5hbWUgOiBoeXBoZW5hdGVTdHlsZU5hbWUoc3R5bGVOYW1lKSkgKyAnOic7XG4gICAgICAgIHNlcmlhbGl6ZWQgKz0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlVmFsdWUsIGlzQ3VzdG9tUHJvcGVydHkpO1xuICAgICAgICBkZWxpbWl0ZXIgPSAnOyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcmlhbGl6ZWQgfHwgbnVsbDtcbiAgfVxufVxuLyoqXG4gKiBTZXRzIHRoZSB2YWx1ZSBmb3IgbXVsdGlwbGUgc3R5bGVzIG9uIGEgbm9kZS4gIElmIGEgdmFsdWUgaXMgc3BlY2lmaWVkIGFzXG4gKiAnJyAoZW1wdHkgc3RyaW5nKSwgdGhlIGNvcnJlc3BvbmRpbmcgc3R5bGUgcHJvcGVydHkgd2lsbCBiZSB1bnNldC5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdHlsZXNcbiAqL1xuXG5mdW5jdGlvbiBzZXRWYWx1ZUZvclN0eWxlcyhub2RlLCBzdHlsZXMpIHtcbiAgdmFyIHN0eWxlID0gbm9kZS5zdHlsZTtcblxuICBmb3IgKHZhciBzdHlsZU5hbWUgaW4gc3R5bGVzKSB7XG4gICAgaWYgKCFzdHlsZXMuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBzdHlsZU5hbWUuaW5kZXhPZignLS0nKSA9PT0gMDtcblxuICAgIHtcbiAgICAgIGlmICghaXNDdXN0b21Qcm9wZXJ0eSkge1xuICAgICAgICB3YXJuVmFsaWRTdHlsZSQxKHN0eWxlTmFtZSwgc3R5bGVzW3N0eWxlTmFtZV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzdHlsZVZhbHVlID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZShzdHlsZU5hbWUsIHN0eWxlc1tzdHlsZU5hbWVdLCBpc0N1c3RvbVByb3BlcnR5KTtcblxuICAgIGlmIChzdHlsZU5hbWUgPT09ICdmbG9hdCcpIHtcbiAgICAgIHN0eWxlTmFtZSA9ICdjc3NGbG9hdCc7XG4gICAgfVxuXG4gICAgaWYgKGlzQ3VzdG9tUHJvcGVydHkpIHtcbiAgICAgIHN0eWxlLnNldFByb3BlcnR5KHN0eWxlTmFtZSwgc3R5bGVWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlW3N0eWxlTmFtZV0gPSBzdHlsZVZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1ZhbHVlRW1wdHkodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdmFsdWUgPT09ICcnO1xufVxuLyoqXG4gKiBHaXZlbiB7Y29sb3I6ICdyZWQnLCBvdmVyZmxvdzogJ2hpZGRlbid9IHJldHVybnMge1xuICogICBjb2xvcjogJ2NvbG9yJyxcbiAqICAgb3ZlcmZsb3dYOiAnb3ZlcmZsb3cnLFxuICogICBvdmVyZmxvd1k6ICdvdmVyZmxvdycsXG4gKiB9LiBUaGlzIGNhbiBiZSByZWFkIGFzIFwidGhlIG92ZXJmbG93WSBwcm9wZXJ0eSB3YXMgc2V0IGJ5IHRoZSBvdmVyZmxvd1xuICogc2hvcnRoYW5kXCIuIFRoYXQgaXMsIHRoZSB2YWx1ZXMgYXJlIHRoZSBwcm9wZXJ0eSB0aGF0IGVhY2ggd2FzIGRlcml2ZWQgZnJvbS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZXMpIHtcbiAgdmFyIGV4cGFuZGVkID0ge307XG5cbiAgZm9yICh2YXIga2V5IGluIHN0eWxlcykge1xuICAgIHZhciBsb25naGFuZHMgPSBzaG9ydGhhbmRUb0xvbmdoYW5kW2tleV0gfHwgW2tleV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvbmdoYW5kcy5sZW5ndGg7IGkrKykge1xuICAgICAgZXhwYW5kZWRbbG9uZ2hhbmRzW2ldXSA9IGtleTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwYW5kZWQ7XG59XG4vKipcbiAqIFdoZW4gbWl4aW5nIHNob3J0aGFuZCBhbmQgbG9uZ2hhbmQgcHJvcGVydHkgbmFtZXMsIHdlIHdhcm4gZHVyaW5nIHVwZGF0ZXMgaWZcbiAqIHdlIGV4cGVjdCBhbiBpbmNvcnJlY3QgcmVzdWx0IHRvIG9jY3VyLiBJbiBwYXJ0aWN1bGFyLCB3ZSB3YXJuIGZvcjpcbiAqXG4gKiBVcGRhdGluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBvdmVyd3JpdHRlbik6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udDogJ2JheicsIGZvbnRWYXJpYW50OiAnYmFyJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udCA9ICdiYXonXG4gKiBSZW1vdmluZyBhIHNob3J0aGFuZCBwcm9wZXJ0eSAobG9uZ2hhbmQgZ2V0cyBsb3N0IHRvbyk6XG4gKiAgIHtmb250OiAnZm9vJywgZm9udFZhcmlhbnQ6ICdiYXInfSAtPiB7Zm9udFZhcmlhbnQ6ICdiYXInfVxuICogICBiZWNvbWVzIC5zdHlsZS5mb250ID0gJydcbiAqIFJlbW92aW5nIGEgbG9uZ2hhbmQgcHJvcGVydHkgKHNob3VsZCByZXZlcnQgdG8gc2hvcnRoYW5kOyBkb2Vzbid0KTpcbiAqICAge2ZvbnQ6ICdmb28nLCBmb250VmFyaWFudDogJ2Jhcid9IC0+IHtmb250OiAnZm9vJ31cbiAqICAgYmVjb21lcyAuc3R5bGUuZm9udFZhcmlhbnQgPSAnJ1xuICovXG5cblxuZnVuY3Rpb24gdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFN0eWxlcykge1xuICB7XG4gICAgaWYgKCFuZXh0U3R5bGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGV4cGFuZGVkVXBkYXRlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChzdHlsZVVwZGF0ZXMpO1xuICAgIHZhciBleHBhbmRlZFN0eWxlcyA9IGV4cGFuZFNob3J0aGFuZE1hcChuZXh0U3R5bGVzKTtcbiAgICB2YXIgd2FybmVkQWJvdXQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBleHBhbmRlZFVwZGF0ZXMpIHtcbiAgICAgIHZhciBvcmlnaW5hbEtleSA9IGV4cGFuZGVkVXBkYXRlc1trZXldO1xuICAgICAgdmFyIGNvcnJlY3RPcmlnaW5hbEtleSA9IGV4cGFuZGVkU3R5bGVzW2tleV07XG5cbiAgICAgIGlmIChjb3JyZWN0T3JpZ2luYWxLZXkgJiYgb3JpZ2luYWxLZXkgIT09IGNvcnJlY3RPcmlnaW5hbEtleSkge1xuICAgICAgICB2YXIgd2FybmluZ0tleSA9IG9yaWdpbmFsS2V5ICsgJywnICsgY29ycmVjdE9yaWdpbmFsS2V5O1xuXG4gICAgICAgIGlmICh3YXJuZWRBYm91dFt3YXJuaW5nS2V5XSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2FybmVkQWJvdXRbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclcyBhIHN0eWxlIHByb3BlcnR5IGR1cmluZyByZXJlbmRlciAoJXMpIHdoZW4gYSAnICsgJ2NvbmZsaWN0aW5nIHByb3BlcnR5IGlzIHNldCAoJXMpIGNhbiBsZWFkIHRvIHN0eWxpbmcgYnVncy4gVG8gJyArIFwiYXZvaWQgdGhpcywgZG9uJ3QgbWl4IHNob3J0aGFuZCBhbmQgbm9uLXNob3J0aGFuZCBwcm9wZXJ0aWVzIFwiICsgJ2ZvciB0aGUgc2FtZSB2YWx1ZTsgaW5zdGVhZCwgcmVwbGFjZSB0aGUgc2hvcnRoYW5kIHdpdGggJyArICdzZXBhcmF0ZSB2YWx1ZXMuJywgaXNWYWx1ZUVtcHR5KHN0eWxlVXBkYXRlc1tvcmlnaW5hbEtleV0pID8gJ1JlbW92aW5nJyA6ICdVcGRhdGluZycsIG9yaWdpbmFsS2V5LCBjb3JyZWN0T3JpZ2luYWxLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBGb3IgSFRNTCwgY2VydGFpbiB0YWdzIHNob3VsZCBvbWl0IHRoZWlyIGNsb3NlIHRhZy4gV2Uga2VlcCBhIGxpc3QgZm9yXG4vLyB0aG9zZSBzcGVjaWFsLWNhc2UgdGFncy5cbnZhciBvbWl0dGVkQ2xvc2VUYWdzID0ge1xuICBhcmVhOiB0cnVlLFxuICBiYXNlOiB0cnVlLFxuICBicjogdHJ1ZSxcbiAgY29sOiB0cnVlLFxuICBlbWJlZDogdHJ1ZSxcbiAgaHI6IHRydWUsXG4gIGltZzogdHJ1ZSxcbiAgaW5wdXQ6IHRydWUsXG4gIGtleWdlbjogdHJ1ZSxcbiAgbGluazogdHJ1ZSxcbiAgbWV0YTogdHJ1ZSxcbiAgcGFyYW06IHRydWUsXG4gIHNvdXJjZTogdHJ1ZSxcbiAgdHJhY2s6IHRydWUsXG4gIHdicjogdHJ1ZSAvLyBOT1RFOiBtZW51aXRlbSdzIGNsb3NlIHRhZyBzaG91bGQgYmUgb21pdHRlZCwgYnV0IHRoYXQgY2F1c2VzIHByb2JsZW1zLlxuXG59O1xuXG4vLyBgb21pdHRlZENsb3NlVGFnc2AgZXhjZXB0IHRoYXQgYG1lbnVpdGVtYCBzaG91bGQgc3RpbGwgaGF2ZSBpdHMgY2xvc2luZyB0YWcuXG5cbnZhciB2b2lkRWxlbWVudFRhZ3MgPSBfYXNzaWduKHtcbiAgbWVudWl0ZW06IHRydWVcbn0sIG9taXR0ZWRDbG9zZVRhZ3MpO1xuXG52YXIgSFRNTCA9ICdfX2h0bWwnO1xuXG5mdW5jdGlvbiBhc3NlcnRWYWxpZFByb3BzKHRhZywgcHJvcHMpIHtcbiAgaWYgKCFwcm9wcykge1xuICAgIHJldHVybjtcbiAgfSAvLyBOb3RlIHRoZSB1c2Ugb2YgYD09YCB3aGljaCBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkLlxuXG5cbiAgaWYgKHZvaWRFbGVtZW50VGFnc1t0YWddKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCAmJiBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCA9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggdGFnICsgXCIgaXMgYSB2b2lkIGVsZW1lbnQgdGFnIGFuZCBtdXN0IG5laXRoZXIgaGF2ZSBgY2hpbGRyZW5gIG5vciB1c2UgYGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MYC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTCAhPSBudWxsKSB7XG4gICAgaWYgKCEocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2FuIG9ubHkgc2V0IG9uZSBvZiBgY2hpbGRyZW5gIG9yIGBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIEhUTUwgaW4gcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImBwcm9wcy5kYW5nZXJvdXNseVNldElubmVySFRNTGAgbXVzdCBiZSBpbiB0aGUgZm9ybSBge19faHRtbDogLi4ufWAuIFBsZWFzZSB2aXNpdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGFuZ2Vyb3VzbHktc2V0LWlubmVyLWh0bWwgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKCFwcm9wcy5zdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgJiYgcHJvcHMuY29udGVudEVkaXRhYmxlICYmIHByb3BzLmNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGVycm9yKCdBIGNvbXBvbmVudCBpcyBgY29udGVudEVkaXRhYmxlYCBhbmQgY29udGFpbnMgYGNoaWxkcmVuYCBtYW5hZ2VkIGJ5ICcgKyAnUmVhY3QuIEl0IGlzIG5vdyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGd1YXJhbnRlZSB0aGF0IG5vbmUgb2YgJyArICd0aG9zZSBub2RlcyBhcmUgdW5leHBlY3RlZGx5IG1vZGlmaWVkIG9yIGR1cGxpY2F0ZWQuIFRoaXMgaXMgJyArICdwcm9iYWJseSBub3QgaW50ZW50aW9uYWwuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocHJvcHMuc3R5bGUgPT0gbnVsbCB8fCB0eXBlb2YgcHJvcHMuc3R5bGUgPT09ICdvYmplY3QnKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoZSBgc3R5bGVgIHByb3AgZXhwZWN0cyBhIG1hcHBpbmcgZnJvbSBzdHlsZSBwcm9wZXJ0aWVzIHRvIHZhbHVlcywgbm90IGEgc3RyaW5nLiBGb3IgZXhhbXBsZSwgc3R5bGU9e3ttYXJnaW5SaWdodDogc3BhY2luZyArICdlbSd9fSB3aGVuIHVzaW5nIEpTWC5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0N1c3RvbUNvbXBvbmVudCh0YWdOYW1lLCBwcm9wcykge1xuICBpZiAodGFnTmFtZS5pbmRleE9mKCctJykgPT09IC0xKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBzd2l0Y2ggKHRhZ05hbWUpIHtcbiAgICAvLyBUaGVzZSBhcmUgcmVzZXJ2ZWQgU1ZHIGFuZCBNYXRoTUwgZWxlbWVudHMuXG4gICAgLy8gV2UgZG9uJ3QgbWluZCB0aGlzIGxpc3QgdG9vIG11Y2ggYmVjYXVzZSB3ZSBleHBlY3QgaXQgdG8gbmV2ZXIgZ3Jvdy5cbiAgICAvLyBUaGUgYWx0ZXJuYXRpdmUgaXMgdG8gdHJhY2sgdGhlIG5hbWVzcGFjZSBpbiBhIGZldyBwbGFjZXMgd2hpY2ggaXMgY29udm9sdXRlZC5cbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViY29tcG9uZW50cy9zcGVjL2N1c3RvbS8jY3VzdG9tLWVsZW1lbnRzLWNvcmUtY29uY2VwdHNcbiAgICBjYXNlICdhbm5vdGF0aW9uLXhtbCc6XG4gICAgY2FzZSAnY29sb3ItcHJvZmlsZSc6XG4gICAgY2FzZSAnZm9udC1mYWNlJzpcbiAgICBjYXNlICdmb250LWZhY2Utc3JjJzpcbiAgICBjYXNlICdmb250LWZhY2UtdXJpJzpcbiAgICBjYXNlICdmb250LWZhY2UtZm9ybWF0JzpcbiAgICBjYXNlICdmb250LWZhY2UtbmFtZSc6XG4gICAgY2FzZSAnbWlzc2luZy1nbHlwaCc6XG4gICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cblxuLy8gV2hlbiBhZGRpbmcgYXR0cmlidXRlcyB0byB0aGUgSFRNTCBvciBTVkcgYWxsb3dlZCBhdHRyaWJ1dGUgbGlzdCwgYmUgc3VyZSB0b1xuLy8gYWxzbyBhZGQgdGhlbSB0byB0aGlzIG1vZHVsZSB0byBlbnN1cmUgY2FzaW5nIGFuZCBpbmNvcnJlY3QgbmFtZVxuLy8gd2FybmluZ3MuXG52YXIgcG9zc2libGVTdGFuZGFyZE5hbWVzID0ge1xuICAvLyBIVE1MXG4gIGFjY2VwdDogJ2FjY2VwdCcsXG4gIGFjY2VwdGNoYXJzZXQ6ICdhY2NlcHRDaGFyc2V0JyxcbiAgJ2FjY2VwdC1jaGFyc2V0JzogJ2FjY2VwdENoYXJzZXQnLFxuICBhY2Nlc3NrZXk6ICdhY2Nlc3NLZXknLFxuICBhY3Rpb246ICdhY3Rpb24nLFxuICBhbGxvd2Z1bGxzY3JlZW46ICdhbGxvd0Z1bGxTY3JlZW4nLFxuICBhbHQ6ICdhbHQnLFxuICBhczogJ2FzJyxcbiAgYXN5bmM6ICdhc3luYycsXG4gIGF1dG9jYXBpdGFsaXplOiAnYXV0b0NhcGl0YWxpemUnLFxuICBhdXRvY29tcGxldGU6ICdhdXRvQ29tcGxldGUnLFxuICBhdXRvY29ycmVjdDogJ2F1dG9Db3JyZWN0JyxcbiAgYXV0b2ZvY3VzOiAnYXV0b0ZvY3VzJyxcbiAgYXV0b3BsYXk6ICdhdXRvUGxheScsXG4gIGF1dG9zYXZlOiAnYXV0b1NhdmUnLFxuICBjYXB0dXJlOiAnY2FwdHVyZScsXG4gIGNlbGxwYWRkaW5nOiAnY2VsbFBhZGRpbmcnLFxuICBjZWxsc3BhY2luZzogJ2NlbGxTcGFjaW5nJyxcbiAgY2hhbGxlbmdlOiAnY2hhbGxlbmdlJyxcbiAgY2hhcnNldDogJ2NoYXJTZXQnLFxuICBjaGVja2VkOiAnY2hlY2tlZCcsXG4gIGNoaWxkcmVuOiAnY2hpbGRyZW4nLFxuICBjaXRlOiAnY2l0ZScsXG4gIGNsYXNzOiAnY2xhc3NOYW1lJyxcbiAgY2xhc3NpZDogJ2NsYXNzSUQnLFxuICBjbGFzc25hbWU6ICdjbGFzc05hbWUnLFxuICBjb2xzOiAnY29scycsXG4gIGNvbHNwYW46ICdjb2xTcGFuJyxcbiAgY29udGVudDogJ2NvbnRlbnQnLFxuICBjb250ZW50ZWRpdGFibGU6ICdjb250ZW50RWRpdGFibGUnLFxuICBjb250ZXh0bWVudTogJ2NvbnRleHRNZW51JyxcbiAgY29udHJvbHM6ICdjb250cm9scycsXG4gIGNvbnRyb2xzbGlzdDogJ2NvbnRyb2xzTGlzdCcsXG4gIGNvb3JkczogJ2Nvb3JkcycsXG4gIGNyb3Nzb3JpZ2luOiAnY3Jvc3NPcmlnaW4nLFxuICBkYW5nZXJvdXNseXNldGlubmVyaHRtbDogJ2Rhbmdlcm91c2x5U2V0SW5uZXJIVE1MJyxcbiAgZGF0YTogJ2RhdGEnLFxuICBkYXRldGltZTogJ2RhdGVUaW1lJyxcbiAgZGVmYXVsdDogJ2RlZmF1bHQnLFxuICBkZWZhdWx0Y2hlY2tlZDogJ2RlZmF1bHRDaGVja2VkJyxcbiAgZGVmYXVsdHZhbHVlOiAnZGVmYXVsdFZhbHVlJyxcbiAgZGVmZXI6ICdkZWZlcicsXG4gIGRpcjogJ2RpcicsXG4gIGRpc2FibGVkOiAnZGlzYWJsZWQnLFxuICBkaXNhYmxlcGljdHVyZWlucGljdHVyZTogJ2Rpc2FibGVQaWN0dXJlSW5QaWN0dXJlJyxcbiAgZGlzYWJsZXJlbW90ZXBsYXliYWNrOiAnZGlzYWJsZVJlbW90ZVBsYXliYWNrJyxcbiAgZG93bmxvYWQ6ICdkb3dubG9hZCcsXG4gIGRyYWdnYWJsZTogJ2RyYWdnYWJsZScsXG4gIGVuY3R5cGU6ICdlbmNUeXBlJyxcbiAgZW50ZXJrZXloaW50OiAnZW50ZXJLZXlIaW50JyxcbiAgZm9yOiAnaHRtbEZvcicsXG4gIGZvcm06ICdmb3JtJyxcbiAgZm9ybW1ldGhvZDogJ2Zvcm1NZXRob2QnLFxuICBmb3JtYWN0aW9uOiAnZm9ybUFjdGlvbicsXG4gIGZvcm1lbmN0eXBlOiAnZm9ybUVuY1R5cGUnLFxuICBmb3Jtbm92YWxpZGF0ZTogJ2Zvcm1Ob1ZhbGlkYXRlJyxcbiAgZm9ybXRhcmdldDogJ2Zvcm1UYXJnZXQnLFxuICBmcmFtZWJvcmRlcjogJ2ZyYW1lQm9yZGVyJyxcbiAgaGVhZGVyczogJ2hlYWRlcnMnLFxuICBoZWlnaHQ6ICdoZWlnaHQnLFxuICBoaWRkZW46ICdoaWRkZW4nLFxuICBoaWdoOiAnaGlnaCcsXG4gIGhyZWY6ICdocmVmJyxcbiAgaHJlZmxhbmc6ICdocmVmTGFuZycsXG4gIGh0bWxmb3I6ICdodG1sRm9yJyxcbiAgaHR0cGVxdWl2OiAnaHR0cEVxdWl2JyxcbiAgJ2h0dHAtZXF1aXYnOiAnaHR0cEVxdWl2JyxcbiAgaWNvbjogJ2ljb24nLFxuICBpZDogJ2lkJyxcbiAgaW5uZXJodG1sOiAnaW5uZXJIVE1MJyxcbiAgaW5wdXRtb2RlOiAnaW5wdXRNb2RlJyxcbiAgaW50ZWdyaXR5OiAnaW50ZWdyaXR5JyxcbiAgaXM6ICdpcycsXG4gIGl0ZW1pZDogJ2l0ZW1JRCcsXG4gIGl0ZW1wcm9wOiAnaXRlbVByb3AnLFxuICBpdGVtcmVmOiAnaXRlbVJlZicsXG4gIGl0ZW1zY29wZTogJ2l0ZW1TY29wZScsXG4gIGl0ZW10eXBlOiAnaXRlbVR5cGUnLFxuICBrZXlwYXJhbXM6ICdrZXlQYXJhbXMnLFxuICBrZXl0eXBlOiAna2V5VHlwZScsXG4gIGtpbmQ6ICdraW5kJyxcbiAgbGFiZWw6ICdsYWJlbCcsXG4gIGxhbmc6ICdsYW5nJyxcbiAgbGlzdDogJ2xpc3QnLFxuICBsb29wOiAnbG9vcCcsXG4gIGxvdzogJ2xvdycsXG4gIG1hbmlmZXN0OiAnbWFuaWZlc3QnLFxuICBtYXJnaW53aWR0aDogJ21hcmdpbldpZHRoJyxcbiAgbWFyZ2luaGVpZ2h0OiAnbWFyZ2luSGVpZ2h0JyxcbiAgbWF4OiAnbWF4JyxcbiAgbWF4bGVuZ3RoOiAnbWF4TGVuZ3RoJyxcbiAgbWVkaWE6ICdtZWRpYScsXG4gIG1lZGlhZ3JvdXA6ICdtZWRpYUdyb3VwJyxcbiAgbWV0aG9kOiAnbWV0aG9kJyxcbiAgbWluOiAnbWluJyxcbiAgbWlubGVuZ3RoOiAnbWluTGVuZ3RoJyxcbiAgbXVsdGlwbGU6ICdtdWx0aXBsZScsXG4gIG11dGVkOiAnbXV0ZWQnLFxuICBuYW1lOiAnbmFtZScsXG4gIG5vbW9kdWxlOiAnbm9Nb2R1bGUnLFxuICBub25jZTogJ25vbmNlJyxcbiAgbm92YWxpZGF0ZTogJ25vVmFsaWRhdGUnLFxuICBvcGVuOiAnb3BlbicsXG4gIG9wdGltdW06ICdvcHRpbXVtJyxcbiAgcGF0dGVybjogJ3BhdHRlcm4nLFxuICBwbGFjZWhvbGRlcjogJ3BsYWNlaG9sZGVyJyxcbiAgcGxheXNpbmxpbmU6ICdwbGF5c0lubGluZScsXG4gIHBvc3RlcjogJ3Bvc3RlcicsXG4gIHByZWxvYWQ6ICdwcmVsb2FkJyxcbiAgcHJvZmlsZTogJ3Byb2ZpbGUnLFxuICByYWRpb2dyb3VwOiAncmFkaW9Hcm91cCcsXG4gIHJlYWRvbmx5OiAncmVhZE9ubHknLFxuICByZWZlcnJlcnBvbGljeTogJ3JlZmVycmVyUG9saWN5JyxcbiAgcmVsOiAncmVsJyxcbiAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gIHJldmVyc2VkOiAncmV2ZXJzZWQnLFxuICByb2xlOiAncm9sZScsXG4gIHJvd3M6ICdyb3dzJyxcbiAgcm93c3BhbjogJ3Jvd1NwYW4nLFxuICBzYW5kYm94OiAnc2FuZGJveCcsXG4gIHNjb3BlOiAnc2NvcGUnLFxuICBzY29wZWQ6ICdzY29wZWQnLFxuICBzY3JvbGxpbmc6ICdzY3JvbGxpbmcnLFxuICBzZWFtbGVzczogJ3NlYW1sZXNzJyxcbiAgc2VsZWN0ZWQ6ICdzZWxlY3RlZCcsXG4gIHNoYXBlOiAnc2hhcGUnLFxuICBzaXplOiAnc2l6ZScsXG4gIHNpemVzOiAnc2l6ZXMnLFxuICBzcGFuOiAnc3BhbicsXG4gIHNwZWxsY2hlY2s6ICdzcGVsbENoZWNrJyxcbiAgc3JjOiAnc3JjJyxcbiAgc3JjZG9jOiAnc3JjRG9jJyxcbiAgc3JjbGFuZzogJ3NyY0xhbmcnLFxuICBzcmNzZXQ6ICdzcmNTZXQnLFxuICBzdGFydDogJ3N0YXJ0JyxcbiAgc3RlcDogJ3N0ZXAnLFxuICBzdHlsZTogJ3N0eWxlJyxcbiAgc3VtbWFyeTogJ3N1bW1hcnknLFxuICB0YWJpbmRleDogJ3RhYkluZGV4JyxcbiAgdGFyZ2V0OiAndGFyZ2V0JyxcbiAgdGl0bGU6ICd0aXRsZScsXG4gIHR5cGU6ICd0eXBlJyxcbiAgdXNlbWFwOiAndXNlTWFwJyxcbiAgdmFsdWU6ICd2YWx1ZScsXG4gIHdpZHRoOiAnd2lkdGgnLFxuICB3bW9kZTogJ3dtb2RlJyxcbiAgd3JhcDogJ3dyYXAnLFxuICAvLyBTVkdcbiAgYWJvdXQ6ICdhYm91dCcsXG4gIGFjY2VudGhlaWdodDogJ2FjY2VudEhlaWdodCcsXG4gICdhY2NlbnQtaGVpZ2h0JzogJ2FjY2VudEhlaWdodCcsXG4gIGFjY3VtdWxhdGU6ICdhY2N1bXVsYXRlJyxcbiAgYWRkaXRpdmU6ICdhZGRpdGl2ZScsXG4gIGFsaWdubWVudGJhc2VsaW5lOiAnYWxpZ25tZW50QmFzZWxpbmUnLFxuICAnYWxpZ25tZW50LWJhc2VsaW5lJzogJ2FsaWdubWVudEJhc2VsaW5lJyxcbiAgYWxsb3dyZW9yZGVyOiAnYWxsb3dSZW9yZGVyJyxcbiAgYWxwaGFiZXRpYzogJ2FscGhhYmV0aWMnLFxuICBhbXBsaXR1ZGU6ICdhbXBsaXR1ZGUnLFxuICBhcmFiaWNmb3JtOiAnYXJhYmljRm9ybScsXG4gICdhcmFiaWMtZm9ybSc6ICdhcmFiaWNGb3JtJyxcbiAgYXNjZW50OiAnYXNjZW50JyxcbiAgYXR0cmlidXRlbmFtZTogJ2F0dHJpYnV0ZU5hbWUnLFxuICBhdHRyaWJ1dGV0eXBlOiAnYXR0cmlidXRlVHlwZScsXG4gIGF1dG9yZXZlcnNlOiAnYXV0b1JldmVyc2UnLFxuICBhemltdXRoOiAnYXppbXV0aCcsXG4gIGJhc2VmcmVxdWVuY3k6ICdiYXNlRnJlcXVlbmN5JyxcbiAgYmFzZWxpbmVzaGlmdDogJ2Jhc2VsaW5lU2hpZnQnLFxuICAnYmFzZWxpbmUtc2hpZnQnOiAnYmFzZWxpbmVTaGlmdCcsXG4gIGJhc2Vwcm9maWxlOiAnYmFzZVByb2ZpbGUnLFxuICBiYm94OiAnYmJveCcsXG4gIGJlZ2luOiAnYmVnaW4nLFxuICBiaWFzOiAnYmlhcycsXG4gIGJ5OiAnYnknLFxuICBjYWxjbW9kZTogJ2NhbGNNb2RlJyxcbiAgY2FwaGVpZ2h0OiAnY2FwSGVpZ2h0JyxcbiAgJ2NhcC1oZWlnaHQnOiAnY2FwSGVpZ2h0JyxcbiAgY2xpcDogJ2NsaXAnLFxuICBjbGlwcGF0aDogJ2NsaXBQYXRoJyxcbiAgJ2NsaXAtcGF0aCc6ICdjbGlwUGF0aCcsXG4gIGNsaXBwYXRodW5pdHM6ICdjbGlwUGF0aFVuaXRzJyxcbiAgY2xpcHJ1bGU6ICdjbGlwUnVsZScsXG4gICdjbGlwLXJ1bGUnOiAnY2xpcFJ1bGUnLFxuICBjb2xvcjogJ2NvbG9yJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgJ2NvbG9yLWludGVycG9sYXRpb24nOiAnY29sb3JJbnRlcnBvbGF0aW9uJyxcbiAgY29sb3JpbnRlcnBvbGF0aW9uZmlsdGVyczogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICAnY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzJzogJ2NvbG9ySW50ZXJwb2xhdGlvbkZpbHRlcnMnLFxuICBjb2xvcnByb2ZpbGU6ICdjb2xvclByb2ZpbGUnLFxuICAnY29sb3ItcHJvZmlsZSc6ICdjb2xvclByb2ZpbGUnLFxuICBjb2xvcnJlbmRlcmluZzogJ2NvbG9yUmVuZGVyaW5nJyxcbiAgJ2NvbG9yLXJlbmRlcmluZyc6ICdjb2xvclJlbmRlcmluZycsXG4gIGNvbnRlbnRzY3JpcHR0eXBlOiAnY29udGVudFNjcmlwdFR5cGUnLFxuICBjb250ZW50c3R5bGV0eXBlOiAnY29udGVudFN0eWxlVHlwZScsXG4gIGN1cnNvcjogJ2N1cnNvcicsXG4gIGN4OiAnY3gnLFxuICBjeTogJ2N5JyxcbiAgZDogJ2QnLFxuICBkYXRhdHlwZTogJ2RhdGF0eXBlJyxcbiAgZGVjZWxlcmF0ZTogJ2RlY2VsZXJhdGUnLFxuICBkZXNjZW50OiAnZGVzY2VudCcsXG4gIGRpZmZ1c2Vjb25zdGFudDogJ2RpZmZ1c2VDb25zdGFudCcsXG4gIGRpcmVjdGlvbjogJ2RpcmVjdGlvbicsXG4gIGRpc3BsYXk6ICdkaXNwbGF5JyxcbiAgZGl2aXNvcjogJ2Rpdmlzb3InLFxuICBkb21pbmFudGJhc2VsaW5lOiAnZG9taW5hbnRCYXNlbGluZScsXG4gICdkb21pbmFudC1iYXNlbGluZSc6ICdkb21pbmFudEJhc2VsaW5lJyxcbiAgZHVyOiAnZHVyJyxcbiAgZHg6ICdkeCcsXG4gIGR5OiAnZHknLFxuICBlZGdlbW9kZTogJ2VkZ2VNb2RlJyxcbiAgZWxldmF0aW9uOiAnZWxldmF0aW9uJyxcbiAgZW5hYmxlYmFja2dyb3VuZDogJ2VuYWJsZUJhY2tncm91bmQnLFxuICAnZW5hYmxlLWJhY2tncm91bmQnOiAnZW5hYmxlQmFja2dyb3VuZCcsXG4gIGVuZDogJ2VuZCcsXG4gIGV4cG9uZW50OiAnZXhwb25lbnQnLFxuICBleHRlcm5hbHJlc291cmNlc3JlcXVpcmVkOiAnZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCcsXG4gIGZpbGw6ICdmaWxsJyxcbiAgZmlsbG9wYWNpdHk6ICdmaWxsT3BhY2l0eScsXG4gICdmaWxsLW9wYWNpdHknOiAnZmlsbE9wYWNpdHknLFxuICBmaWxscnVsZTogJ2ZpbGxSdWxlJyxcbiAgJ2ZpbGwtcnVsZSc6ICdmaWxsUnVsZScsXG4gIGZpbHRlcjogJ2ZpbHRlcicsXG4gIGZpbHRlcnJlczogJ2ZpbHRlclJlcycsXG4gIGZpbHRlcnVuaXRzOiAnZmlsdGVyVW5pdHMnLFxuICBmbG9vZG9wYWNpdHk6ICdmbG9vZE9wYWNpdHknLFxuICAnZmxvb2Qtb3BhY2l0eSc6ICdmbG9vZE9wYWNpdHknLFxuICBmbG9vZGNvbG9yOiAnZmxvb2RDb2xvcicsXG4gICdmbG9vZC1jb2xvcic6ICdmbG9vZENvbG9yJyxcbiAgZm9jdXNhYmxlOiAnZm9jdXNhYmxlJyxcbiAgZm9udGZhbWlseTogJ2ZvbnRGYW1pbHknLFxuICAnZm9udC1mYW1pbHknOiAnZm9udEZhbWlseScsXG4gIGZvbnRzaXplOiAnZm9udFNpemUnLFxuICAnZm9udC1zaXplJzogJ2ZvbnRTaXplJyxcbiAgZm9udHNpemVhZGp1c3Q6ICdmb250U2l6ZUFkanVzdCcsXG4gICdmb250LXNpemUtYWRqdXN0JzogJ2ZvbnRTaXplQWRqdXN0JyxcbiAgZm9udHN0cmV0Y2g6ICdmb250U3RyZXRjaCcsXG4gICdmb250LXN0cmV0Y2gnOiAnZm9udFN0cmV0Y2gnLFxuICBmb250c3R5bGU6ICdmb250U3R5bGUnLFxuICAnZm9udC1zdHlsZSc6ICdmb250U3R5bGUnLFxuICBmb250dmFyaWFudDogJ2ZvbnRWYXJpYW50JyxcbiAgJ2ZvbnQtdmFyaWFudCc6ICdmb250VmFyaWFudCcsXG4gIGZvbnR3ZWlnaHQ6ICdmb250V2VpZ2h0JyxcbiAgJ2ZvbnQtd2VpZ2h0JzogJ2ZvbnRXZWlnaHQnLFxuICBmb3JtYXQ6ICdmb3JtYXQnLFxuICBmcm9tOiAnZnJvbScsXG4gIGZ4OiAnZngnLFxuICBmeTogJ2Z5JyxcbiAgZzE6ICdnMScsXG4gIGcyOiAnZzInLFxuICBnbHlwaG5hbWU6ICdnbHlwaE5hbWUnLFxuICAnZ2x5cGgtbmFtZSc6ICdnbHlwaE5hbWUnLFxuICBnbHlwaG9yaWVudGF0aW9uaG9yaXpvbnRhbDogJ2dseXBoT3JpZW50YXRpb25Ib3Jpem9udGFsJyxcbiAgJ2dseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwnOiAnZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWwnLFxuICBnbHlwaG9yaWVudGF0aW9udmVydGljYWw6ICdnbHlwaE9yaWVudGF0aW9uVmVydGljYWwnLFxuICAnZ2x5cGgtb3JpZW50YXRpb24tdmVydGljYWwnOiAnZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsJyxcbiAgZ2x5cGhyZWY6ICdnbHlwaFJlZicsXG4gIGdyYWRpZW50dHJhbnNmb3JtOiAnZ3JhZGllbnRUcmFuc2Zvcm0nLFxuICBncmFkaWVudHVuaXRzOiAnZ3JhZGllbnRVbml0cycsXG4gIGhhbmdpbmc6ICdoYW5naW5nJyxcbiAgaG9yaXphZHZ4OiAnaG9yaXpBZHZYJyxcbiAgJ2hvcml6LWFkdi14JzogJ2hvcml6QWR2WCcsXG4gIGhvcml6b3JpZ2lueDogJ2hvcml6T3JpZ2luWCcsXG4gICdob3Jpei1vcmlnaW4teCc6ICdob3Jpek9yaWdpblgnLFxuICBpZGVvZ3JhcGhpYzogJ2lkZW9ncmFwaGljJyxcbiAgaW1hZ2VyZW5kZXJpbmc6ICdpbWFnZVJlbmRlcmluZycsXG4gICdpbWFnZS1yZW5kZXJpbmcnOiAnaW1hZ2VSZW5kZXJpbmcnLFxuICBpbjI6ICdpbjInLFxuICBpbjogJ2luJyxcbiAgaW5saXN0OiAnaW5saXN0JyxcbiAgaW50ZXJjZXB0OiAnaW50ZXJjZXB0JyxcbiAgazE6ICdrMScsXG4gIGsyOiAnazInLFxuICBrMzogJ2szJyxcbiAgazQ6ICdrNCcsXG4gIGs6ICdrJyxcbiAga2VybmVsbWF0cml4OiAna2VybmVsTWF0cml4JyxcbiAga2VybmVsdW5pdGxlbmd0aDogJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICBrZXJuaW5nOiAna2VybmluZycsXG4gIGtleXBvaW50czogJ2tleVBvaW50cycsXG4gIGtleXNwbGluZXM6ICdrZXlTcGxpbmVzJyxcbiAga2V5dGltZXM6ICdrZXlUaW1lcycsXG4gIGxlbmd0aGFkanVzdDogJ2xlbmd0aEFkanVzdCcsXG4gIGxldHRlcnNwYWNpbmc6ICdsZXR0ZXJTcGFjaW5nJyxcbiAgJ2xldHRlci1zcGFjaW5nJzogJ2xldHRlclNwYWNpbmcnLFxuICBsaWdodGluZ2NvbG9yOiAnbGlnaHRpbmdDb2xvcicsXG4gICdsaWdodGluZy1jb2xvcic6ICdsaWdodGluZ0NvbG9yJyxcbiAgbGltaXRpbmdjb25lYW5nbGU6ICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gIGxvY2FsOiAnbG9jYWwnLFxuICBtYXJrZXJlbmQ6ICdtYXJrZXJFbmQnLFxuICAnbWFya2VyLWVuZCc6ICdtYXJrZXJFbmQnLFxuICBtYXJrZXJoZWlnaHQ6ICdtYXJrZXJIZWlnaHQnLFxuICBtYXJrZXJtaWQ6ICdtYXJrZXJNaWQnLFxuICAnbWFya2VyLW1pZCc6ICdtYXJrZXJNaWQnLFxuICBtYXJrZXJzdGFydDogJ21hcmtlclN0YXJ0JyxcbiAgJ21hcmtlci1zdGFydCc6ICdtYXJrZXJTdGFydCcsXG4gIG1hcmtlcnVuaXRzOiAnbWFya2VyVW5pdHMnLFxuICBtYXJrZXJ3aWR0aDogJ21hcmtlcldpZHRoJyxcbiAgbWFzazogJ21hc2snLFxuICBtYXNrY29udGVudHVuaXRzOiAnbWFza0NvbnRlbnRVbml0cycsXG4gIG1hc2t1bml0czogJ21hc2tVbml0cycsXG4gIG1hdGhlbWF0aWNhbDogJ21hdGhlbWF0aWNhbCcsXG4gIG1vZGU6ICdtb2RlJyxcbiAgbnVtb2N0YXZlczogJ251bU9jdGF2ZXMnLFxuICBvZmZzZXQ6ICdvZmZzZXQnLFxuICBvcGFjaXR5OiAnb3BhY2l0eScsXG4gIG9wZXJhdG9yOiAnb3BlcmF0b3InLFxuICBvcmRlcjogJ29yZGVyJyxcbiAgb3JpZW50OiAnb3JpZW50JyxcbiAgb3JpZW50YXRpb246ICdvcmllbnRhdGlvbicsXG4gIG9yaWdpbjogJ29yaWdpbicsXG4gIG92ZXJmbG93OiAnb3ZlcmZsb3cnLFxuICBvdmVybGluZXBvc2l0aW9uOiAnb3ZlcmxpbmVQb3NpdGlvbicsXG4gICdvdmVybGluZS1wb3NpdGlvbic6ICdvdmVybGluZVBvc2l0aW9uJyxcbiAgb3ZlcmxpbmV0aGlja25lc3M6ICdvdmVybGluZVRoaWNrbmVzcycsXG4gICdvdmVybGluZS10aGlja25lc3MnOiAnb3ZlcmxpbmVUaGlja25lc3MnLFxuICBwYWludG9yZGVyOiAncGFpbnRPcmRlcicsXG4gICdwYWludC1vcmRlcic6ICdwYWludE9yZGVyJyxcbiAgcGFub3NlMTogJ3Bhbm9zZTEnLFxuICAncGFub3NlLTEnOiAncGFub3NlMScsXG4gIHBhdGhsZW5ndGg6ICdwYXRoTGVuZ3RoJyxcbiAgcGF0dGVybmNvbnRlbnR1bml0czogJ3BhdHRlcm5Db250ZW50VW5pdHMnLFxuICBwYXR0ZXJudHJhbnNmb3JtOiAncGF0dGVyblRyYW5zZm9ybScsXG4gIHBhdHRlcm51bml0czogJ3BhdHRlcm5Vbml0cycsXG4gIHBvaW50ZXJldmVudHM6ICdwb2ludGVyRXZlbnRzJyxcbiAgJ3BvaW50ZXItZXZlbnRzJzogJ3BvaW50ZXJFdmVudHMnLFxuICBwb2ludHM6ICdwb2ludHMnLFxuICBwb2ludHNhdHg6ICdwb2ludHNBdFgnLFxuICBwb2ludHNhdHk6ICdwb2ludHNBdFknLFxuICBwb2ludHNhdHo6ICdwb2ludHNBdFonLFxuICBwcmVmaXg6ICdwcmVmaXgnLFxuICBwcmVzZXJ2ZWFscGhhOiAncHJlc2VydmVBbHBoYScsXG4gIHByZXNlcnZlYXNwZWN0cmF0aW86ICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgcHJpbWl0aXZldW5pdHM6ICdwcmltaXRpdmVVbml0cycsXG4gIHByb3BlcnR5OiAncHJvcGVydHknLFxuICByOiAncicsXG4gIHJhZGl1czogJ3JhZGl1cycsXG4gIHJlZng6ICdyZWZYJyxcbiAgcmVmeTogJ3JlZlknLFxuICByZW5kZXJpbmdpbnRlbnQ6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICAncmVuZGVyaW5nLWludGVudCc6ICdyZW5kZXJpbmdJbnRlbnQnLFxuICByZXBlYXRjb3VudDogJ3JlcGVhdENvdW50JyxcbiAgcmVwZWF0ZHVyOiAncmVwZWF0RHVyJyxcbiAgcmVxdWlyZWRleHRlbnNpb25zOiAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgcmVxdWlyZWRmZWF0dXJlczogJ3JlcXVpcmVkRmVhdHVyZXMnLFxuICByZXNvdXJjZTogJ3Jlc291cmNlJyxcbiAgcmVzdGFydDogJ3Jlc3RhcnQnLFxuICByZXN1bHQ6ICdyZXN1bHQnLFxuICByZXN1bHRzOiAncmVzdWx0cycsXG4gIHJvdGF0ZTogJ3JvdGF0ZScsXG4gIHJ4OiAncngnLFxuICByeTogJ3J5JyxcbiAgc2NhbGU6ICdzY2FsZScsXG4gIHNlY3VyaXR5OiAnc2VjdXJpdHknLFxuICBzZWVkOiAnc2VlZCcsXG4gIHNoYXBlcmVuZGVyaW5nOiAnc2hhcGVSZW5kZXJpbmcnLFxuICAnc2hhcGUtcmVuZGVyaW5nJzogJ3NoYXBlUmVuZGVyaW5nJyxcbiAgc2xvcGU6ICdzbG9wZScsXG4gIHNwYWNpbmc6ICdzcGFjaW5nJyxcbiAgc3BlY3VsYXJjb25zdGFudDogJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICBzcGVjdWxhcmV4cG9uZW50OiAnc3BlY3VsYXJFeHBvbmVudCcsXG4gIHNwZWVkOiAnc3BlZWQnLFxuICBzcHJlYWRtZXRob2Q6ICdzcHJlYWRNZXRob2QnLFxuICBzdGFydG9mZnNldDogJ3N0YXJ0T2Zmc2V0JyxcbiAgc3RkZGV2aWF0aW9uOiAnc3RkRGV2aWF0aW9uJyxcbiAgc3RlbWg6ICdzdGVtaCcsXG4gIHN0ZW12OiAnc3RlbXYnLFxuICBzdGl0Y2h0aWxlczogJ3N0aXRjaFRpbGVzJyxcbiAgc3RvcGNvbG9yOiAnc3RvcENvbG9yJyxcbiAgJ3N0b3AtY29sb3InOiAnc3RvcENvbG9yJyxcbiAgc3RvcG9wYWNpdHk6ICdzdG9wT3BhY2l0eScsXG4gICdzdG9wLW9wYWNpdHknOiAnc3RvcE9wYWNpdHknLFxuICBzdHJpa2V0aHJvdWdocG9zaXRpb246ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICAnc3RyaWtldGhyb3VnaC1wb3NpdGlvbic6ICdzdHJpa2V0aHJvdWdoUG9zaXRpb24nLFxuICBzdHJpa2V0aHJvdWdodGhpY2tuZXNzOiAnc3RyaWtldGhyb3VnaFRoaWNrbmVzcycsXG4gICdzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyc6ICdzdHJpa2V0aHJvdWdoVGhpY2tuZXNzJyxcbiAgc3RyaW5nOiAnc3RyaW5nJyxcbiAgc3Ryb2tlOiAnc3Ryb2tlJyxcbiAgc3Ryb2tlZGFzaGFycmF5OiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgJ3N0cm9rZS1kYXNoYXJyYXknOiAnc3Ryb2tlRGFzaGFycmF5JyxcbiAgc3Ryb2tlZGFzaG9mZnNldDogJ3N0cm9rZURhc2hvZmZzZXQnLFxuICAnc3Ryb2tlLWRhc2hvZmZzZXQnOiAnc3Ryb2tlRGFzaG9mZnNldCcsXG4gIHN0cm9rZWxpbmVjYXA6ICdzdHJva2VMaW5lY2FwJyxcbiAgJ3N0cm9rZS1saW5lY2FwJzogJ3N0cm9rZUxpbmVjYXAnLFxuICBzdHJva2VsaW5lam9pbjogJ3N0cm9rZUxpbmVqb2luJyxcbiAgJ3N0cm9rZS1saW5lam9pbic6ICdzdHJva2VMaW5lam9pbicsXG4gIHN0cm9rZW1pdGVybGltaXQ6ICdzdHJva2VNaXRlcmxpbWl0JyxcbiAgJ3N0cm9rZS1taXRlcmxpbWl0JzogJ3N0cm9rZU1pdGVybGltaXQnLFxuICBzdHJva2V3aWR0aDogJ3N0cm9rZVdpZHRoJyxcbiAgJ3N0cm9rZS13aWR0aCc6ICdzdHJva2VXaWR0aCcsXG4gIHN0cm9rZW9wYWNpdHk6ICdzdHJva2VPcGFjaXR5JyxcbiAgJ3N0cm9rZS1vcGFjaXR5JzogJ3N0cm9rZU9wYWNpdHknLFxuICBzdXBwcmVzc2NvbnRlbnRlZGl0YWJsZXdhcm5pbmc6ICdzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcnLFxuICBzdXBwcmVzc2h5ZHJhdGlvbndhcm5pbmc6ICdzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcnLFxuICBzdXJmYWNlc2NhbGU6ICdzdXJmYWNlU2NhbGUnLFxuICBzeXN0ZW1sYW5ndWFnZTogJ3N5c3RlbUxhbmd1YWdlJyxcbiAgdGFibGV2YWx1ZXM6ICd0YWJsZVZhbHVlcycsXG4gIHRhcmdldHg6ICd0YXJnZXRYJyxcbiAgdGFyZ2V0eTogJ3RhcmdldFknLFxuICB0ZXh0YW5jaG9yOiAndGV4dEFuY2hvcicsXG4gICd0ZXh0LWFuY2hvcic6ICd0ZXh0QW5jaG9yJyxcbiAgdGV4dGRlY29yYXRpb246ICd0ZXh0RGVjb3JhdGlvbicsXG4gICd0ZXh0LWRlY29yYXRpb24nOiAndGV4dERlY29yYXRpb24nLFxuICB0ZXh0bGVuZ3RoOiAndGV4dExlbmd0aCcsXG4gIHRleHRyZW5kZXJpbmc6ICd0ZXh0UmVuZGVyaW5nJyxcbiAgJ3RleHQtcmVuZGVyaW5nJzogJ3RleHRSZW5kZXJpbmcnLFxuICB0bzogJ3RvJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNmb3JtJyxcbiAgdHlwZW9mOiAndHlwZW9mJyxcbiAgdTE6ICd1MScsXG4gIHUyOiAndTInLFxuICB1bmRlcmxpbmVwb3NpdGlvbjogJ3VuZGVybGluZVBvc2l0aW9uJyxcbiAgJ3VuZGVybGluZS1wb3NpdGlvbic6ICd1bmRlcmxpbmVQb3NpdGlvbicsXG4gIHVuZGVybGluZXRoaWNrbmVzczogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gICd1bmRlcmxpbmUtdGhpY2tuZXNzJzogJ3VuZGVybGluZVRoaWNrbmVzcycsXG4gIHVuaWNvZGU6ICd1bmljb2RlJyxcbiAgdW5pY29kZWJpZGk6ICd1bmljb2RlQmlkaScsXG4gICd1bmljb2RlLWJpZGknOiAndW5pY29kZUJpZGknLFxuICB1bmljb2RlcmFuZ2U6ICd1bmljb2RlUmFuZ2UnLFxuICAndW5pY29kZS1yYW5nZSc6ICd1bmljb2RlUmFuZ2UnLFxuICB1bml0c3BlcmVtOiAndW5pdHNQZXJFbScsXG4gICd1bml0cy1wZXItZW0nOiAndW5pdHNQZXJFbScsXG4gIHVuc2VsZWN0YWJsZTogJ3Vuc2VsZWN0YWJsZScsXG4gIHZhbHBoYWJldGljOiAndkFscGhhYmV0aWMnLFxuICAndi1hbHBoYWJldGljJzogJ3ZBbHBoYWJldGljJyxcbiAgdmFsdWVzOiAndmFsdWVzJyxcbiAgdmVjdG9yZWZmZWN0OiAndmVjdG9yRWZmZWN0JyxcbiAgJ3ZlY3Rvci1lZmZlY3QnOiAndmVjdG9yRWZmZWN0JyxcbiAgdmVyc2lvbjogJ3ZlcnNpb24nLFxuICB2ZXJ0YWR2eTogJ3ZlcnRBZHZZJyxcbiAgJ3ZlcnQtYWR2LXknOiAndmVydEFkdlknLFxuICB2ZXJ0b3JpZ2lueDogJ3ZlcnRPcmlnaW5YJyxcbiAgJ3ZlcnQtb3JpZ2luLXgnOiAndmVydE9yaWdpblgnLFxuICB2ZXJ0b3JpZ2lueTogJ3ZlcnRPcmlnaW5ZJyxcbiAgJ3ZlcnQtb3JpZ2luLXknOiAndmVydE9yaWdpblknLFxuICB2aGFuZ2luZzogJ3ZIYW5naW5nJyxcbiAgJ3YtaGFuZ2luZyc6ICd2SGFuZ2luZycsXG4gIHZpZGVvZ3JhcGhpYzogJ3ZJZGVvZ3JhcGhpYycsXG4gICd2LWlkZW9ncmFwaGljJzogJ3ZJZGVvZ3JhcGhpYycsXG4gIHZpZXdib3g6ICd2aWV3Qm94JyxcbiAgdmlld3RhcmdldDogJ3ZpZXdUYXJnZXQnLFxuICB2aXNpYmlsaXR5OiAndmlzaWJpbGl0eScsXG4gIHZtYXRoZW1hdGljYWw6ICd2TWF0aGVtYXRpY2FsJyxcbiAgJ3YtbWF0aGVtYXRpY2FsJzogJ3ZNYXRoZW1hdGljYWwnLFxuICB2b2NhYjogJ3ZvY2FiJyxcbiAgd2lkdGhzOiAnd2lkdGhzJyxcbiAgd29yZHNwYWNpbmc6ICd3b3JkU3BhY2luZycsXG4gICd3b3JkLXNwYWNpbmcnOiAnd29yZFNwYWNpbmcnLFxuICB3cml0aW5nbW9kZTogJ3dyaXRpbmdNb2RlJyxcbiAgJ3dyaXRpbmctbW9kZSc6ICd3cml0aW5nTW9kZScsXG4gIHgxOiAneDEnLFxuICB4MjogJ3gyJyxcbiAgeDogJ3gnLFxuICB4Y2hhbm5lbHNlbGVjdG9yOiAneENoYW5uZWxTZWxlY3RvcicsXG4gIHhoZWlnaHQ6ICd4SGVpZ2h0JyxcbiAgJ3gtaGVpZ2h0JzogJ3hIZWlnaHQnLFxuICB4bGlua2FjdHVhdGU6ICd4bGlua0FjdHVhdGUnLFxuICAneGxpbms6YWN0dWF0ZSc6ICd4bGlua0FjdHVhdGUnLFxuICB4bGlua2FyY3JvbGU6ICd4bGlua0FyY3JvbGUnLFxuICAneGxpbms6YXJjcm9sZSc6ICd4bGlua0FyY3JvbGUnLFxuICB4bGlua2hyZWY6ICd4bGlua0hyZWYnLFxuICAneGxpbms6aHJlZic6ICd4bGlua0hyZWYnLFxuICB4bGlua3JvbGU6ICd4bGlua1JvbGUnLFxuICAneGxpbms6cm9sZSc6ICd4bGlua1JvbGUnLFxuICB4bGlua3Nob3c6ICd4bGlua1Nob3cnLFxuICAneGxpbms6c2hvdyc6ICd4bGlua1Nob3cnLFxuICB4bGlua3RpdGxlOiAneGxpbmtUaXRsZScsXG4gICd4bGluazp0aXRsZSc6ICd4bGlua1RpdGxlJyxcbiAgeGxpbmt0eXBlOiAneGxpbmtUeXBlJyxcbiAgJ3hsaW5rOnR5cGUnOiAneGxpbmtUeXBlJyxcbiAgeG1sYmFzZTogJ3htbEJhc2UnLFxuICAneG1sOmJhc2UnOiAneG1sQmFzZScsXG4gIHhtbGxhbmc6ICd4bWxMYW5nJyxcbiAgJ3htbDpsYW5nJzogJ3htbExhbmcnLFxuICB4bWxuczogJ3htbG5zJyxcbiAgJ3htbDpzcGFjZSc6ICd4bWxTcGFjZScsXG4gIHhtbG5zeGxpbms6ICd4bWxuc1hsaW5rJyxcbiAgJ3htbG5zOnhsaW5rJzogJ3htbG5zWGxpbmsnLFxuICB4bWxzcGFjZTogJ3htbFNwYWNlJyxcbiAgeTE6ICd5MScsXG4gIHkyOiAneTInLFxuICB5OiAneScsXG4gIHljaGFubmVsc2VsZWN0b3I6ICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgejogJ3onLFxuICB6b29tYW5kcGFuOiAnem9vbUFuZFBhbidcbn07XG5cbnZhciBhcmlhUHJvcGVydGllcyA9IHtcbiAgJ2FyaWEtY3VycmVudCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWRldGFpbHMnOiAwLFxuICAnYXJpYS1kaXNhYmxlZCc6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWhpZGRlbic6IDAsXG4gIC8vIHN0YXRlXG4gICdhcmlhLWludmFsaWQnOiAwLFxuICAvLyBzdGF0ZVxuICAnYXJpYS1rZXlzaG9ydGN1dHMnOiAwLFxuICAnYXJpYS1sYWJlbCc6IDAsXG4gICdhcmlhLXJvbGVkZXNjcmlwdGlvbic6IDAsXG4gIC8vIFdpZGdldCBBdHRyaWJ1dGVzXG4gICdhcmlhLWF1dG9jb21wbGV0ZSc6IDAsXG4gICdhcmlhLWNoZWNrZWQnOiAwLFxuICAnYXJpYS1leHBhbmRlZCc6IDAsXG4gICdhcmlhLWhhc3BvcHVwJzogMCxcbiAgJ2FyaWEtbGV2ZWwnOiAwLFxuICAnYXJpYS1tb2RhbCc6IDAsXG4gICdhcmlhLW11bHRpbGluZSc6IDAsXG4gICdhcmlhLW11bHRpc2VsZWN0YWJsZSc6IDAsXG4gICdhcmlhLW9yaWVudGF0aW9uJzogMCxcbiAgJ2FyaWEtcGxhY2Vob2xkZXInOiAwLFxuICAnYXJpYS1wcmVzc2VkJzogMCxcbiAgJ2FyaWEtcmVhZG9ubHknOiAwLFxuICAnYXJpYS1yZXF1aXJlZCc6IDAsXG4gICdhcmlhLXNlbGVjdGVkJzogMCxcbiAgJ2FyaWEtc29ydCc6IDAsXG4gICdhcmlhLXZhbHVlbWF4JzogMCxcbiAgJ2FyaWEtdmFsdWVtaW4nOiAwLFxuICAnYXJpYS12YWx1ZW5vdyc6IDAsXG4gICdhcmlhLXZhbHVldGV4dCc6IDAsXG4gIC8vIExpdmUgUmVnaW9uIEF0dHJpYnV0ZXNcbiAgJ2FyaWEtYXRvbWljJzogMCxcbiAgJ2FyaWEtYnVzeSc6IDAsXG4gICdhcmlhLWxpdmUnOiAwLFxuICAnYXJpYS1yZWxldmFudCc6IDAsXG4gIC8vIERyYWctYW5kLURyb3AgQXR0cmlidXRlc1xuICAnYXJpYS1kcm9wZWZmZWN0JzogMCxcbiAgJ2FyaWEtZ3JhYmJlZCc6IDAsXG4gIC8vIFJlbGF0aW9uc2hpcCBBdHRyaWJ1dGVzXG4gICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnOiAwLFxuICAnYXJpYS1jb2xjb3VudCc6IDAsXG4gICdhcmlhLWNvbGluZGV4JzogMCxcbiAgJ2FyaWEtY29sc3Bhbic6IDAsXG4gICdhcmlhLWNvbnRyb2xzJzogMCxcbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiAwLFxuICAnYXJpYS1lcnJvcm1lc3NhZ2UnOiAwLFxuICAnYXJpYS1mbG93dG8nOiAwLFxuICAnYXJpYS1sYWJlbGxlZGJ5JzogMCxcbiAgJ2FyaWEtb3ducyc6IDAsXG4gICdhcmlhLXBvc2luc2V0JzogMCxcbiAgJ2FyaWEtcm93Y291bnQnOiAwLFxuICAnYXJpYS1yb3dpbmRleCc6IDAsXG4gICdhcmlhLXJvd3NwYW4nOiAwLFxuICAnYXJpYS1zZXRzaXplJzogMFxufTtcblxudmFyIHdhcm5lZFByb3BlcnRpZXMgPSB7fTtcbnZhciByQVJJQSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xudmFyIHJBUklBQ2FtZWwgPSBuZXcgUmVnRXhwKCdeKGFyaWEpW0EtWl1bJyArIEFUVFJJQlVURV9OQU1FX0NIQVIgKyAnXSokJyk7XG52YXIgaGFzT3duUHJvcGVydHkkMSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcGVydHkodGFnTmFtZSwgbmFtZSkge1xuICB7XG4gICAgaWYgKGhhc093blByb3BlcnR5JDEuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzLCBuYW1lKSAmJiB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAockFSSUFDYW1lbC50ZXN0KG5hbWUpKSB7XG4gICAgICB2YXIgYXJpYU5hbWUgPSAnYXJpYS0nICsgbmFtZS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpO1xuICAgICAgdmFyIGNvcnJlY3ROYW1lID0gYXJpYVByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoYXJpYU5hbWUpID8gYXJpYU5hbWUgOiBudWxsOyAvLyBJZiB0aGlzIGlzIGFuIGFyaWEtKiBhdHRyaWJ1dGUsIGJ1dCBpcyBub3QgbGlzdGVkIGluIHRoZSBrbm93biBET01cbiAgICAgIC8vIERPTSBwcm9wZXJ0aWVzLCB0aGVuIGl0IGlzIGFuIGludmFsaWQgYXJpYS0qIGF0dHJpYnV0ZS5cblxuICAgICAgaWYgKGNvcnJlY3ROYW1lID09IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgQVJJQSBhdHRyaWJ1dGUgYCVzYC4gQVJJQSBhdHRyaWJ1dGVzIGZvbGxvdyB0aGUgcGF0dGVybiBhcmlhLSogYW5kIG11c3QgYmUgbG93ZXJjYXNlLicsIG5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IGNvcnJlY3ROYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIEFSSUEgYXR0cmlidXRlIGAlc2AuIERpZCB5b3UgbWVhbiBgJXNgPycsIG5hbWUsIGNvcnJlY3ROYW1lKTtcblxuICAgICAgICB3YXJuZWRQcm9wZXJ0aWVzW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJBUklBLnRlc3QobmFtZSkpIHtcbiAgICAgIHZhciBsb3dlckNhc2VkTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBhcmlhUHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkgPyBsb3dlckNhc2VkTmFtZSA6IG51bGw7IC8vIElmIHRoaXMgaXMgYW4gYXJpYS0qIGF0dHJpYnV0ZSwgYnV0IGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGtub3duIERPTVxuICAgICAgLy8gRE9NIHByb3BlcnRpZXMsIHRoZW4gaXQgaXMgYW4gaW52YWxpZCBhcmlhLSogYXR0cmlidXRlLlxuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lID09IG51bGwpIHtcbiAgICAgICAgd2FybmVkUHJvcGVydGllc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0gLy8gYXJpYS0qIGF0dHJpYnV0ZXMgc2hvdWxkIGJlIGxvd2VyY2FzZTsgc3VnZ2VzdCB0aGUgbG93ZXJjYXNlIHZlcnNpb24uXG5cblxuICAgICAgaWYgKG5hbWUgIT09IHN0YW5kYXJkTmFtZSkge1xuICAgICAgICBlcnJvcignVW5rbm93biBBUklBIGF0dHJpYnV0ZSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXNbbmFtZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gd2FybkludmFsaWRBUklBUHJvcHModHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHZhciBpbnZhbGlkUHJvcHMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgdmFyIGlzVmFsaWQgPSB2YWxpZGF0ZVByb3BlcnR5KHR5cGUsIGtleSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICBpbnZhbGlkUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IGludmFsaWRQcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAoaW52YWxpZFByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgYXJpYSBwcm9wICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCBhcmlhIHByb3BzICVzIG9uIDwlcz4gdGFnLiAnICsgJ0ZvciBkZXRhaWxzLCBzZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtYXJpYS1wcm9wcycsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKSB7XG4gIGlmIChpc0N1c3RvbUNvbXBvbmVudCh0eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB3YXJuSW52YWxpZEFSSUFQcm9wcyh0eXBlLCBwcm9wcyk7XG59XG5cbnZhciBkaWRXYXJuVmFsdWVOdWxsID0gZmFsc2U7XG5mdW5jdGlvbiB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcykge1xuICB7XG4gICAgaWYgKHR5cGUgIT09ICdpbnB1dCcgJiYgdHlwZSAhPT0gJ3RleHRhcmVhJyAmJiB0eXBlICE9PSAnc2VsZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wcyAhPSBudWxsICYmIHByb3BzLnZhbHVlID09PSBudWxsICYmICFkaWRXYXJuVmFsdWVOdWxsKSB7XG4gICAgICBkaWRXYXJuVmFsdWVOdWxsID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGUgPT09ICdzZWxlY3QnICYmIHByb3BzLm11bHRpcGxlKSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgYXJyYXkgd2hlbiBgbXVsdGlwbGVgIGlzIHNldCB0byBgdHJ1ZWAgJyArICd0byBjbGVhciB0aGUgY29tcG9uZW50IG9yIGB1bmRlZmluZWRgIGZvciB1bmNvbnRyb2xsZWQgY29tcG9uZW50cy4nLCB0eXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdgdmFsdWVgIHByb3Agb24gYCVzYCBzaG91bGQgbm90IGJlIG51bGwuICcgKyAnQ29uc2lkZXIgdXNpbmcgYW4gZW1wdHkgc3RyaW5nIHRvIGNsZWFyIHRoZSBjb21wb25lbnQgb3IgYHVuZGVmaW5lZGAgJyArICdmb3IgdW5jb250cm9sbGVkIGNvbXBvbmVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciB2YWxpZGF0ZVByb3BlcnR5JDEgPSBmdW5jdGlvbiAoKSB7fTtcblxue1xuICB2YXIgd2FybmVkUHJvcGVydGllcyQxID0ge307XG4gIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuICB2YXIgRVZFTlRfTkFNRV9SRUdFWCA9IC9eb24uLztcbiAgdmFyIElOVkFMSURfRVZFTlRfTkFNRV9SRUdFWCA9IC9eb25bXkEtWl0vO1xuICB2YXIgckFSSUEkMSA9IG5ldyBSZWdFeHAoJ14oYXJpYSktWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuICB2YXIgckFSSUFDYW1lbCQxID0gbmV3IFJlZ0V4cCgnXihhcmlhKVtBLVpdWycgKyBBVFRSSUJVVEVfTkFNRV9DSEFSICsgJ10qJCcpO1xuXG4gIHZhbGlkYXRlUHJvcGVydHkkMSA9IGZ1bmN0aW9uICh0YWdOYW1lLCBuYW1lLCB2YWx1ZSwgZXZlbnRSZWdpc3RyeSkge1xuICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRQcm9wZXJ0aWVzJDEsIG5hbWUpICYmIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgaWYgKGxvd2VyQ2FzZWROYW1lID09PSAnb25mb2N1c2luJyB8fCBsb3dlckNhc2VkTmFtZSA9PT0gJ29uZm9jdXNvdXQnKSB7XG4gICAgICBlcnJvcignUmVhY3QgdXNlcyBvbkZvY3VzIGFuZCBvbkJsdXIgaW5zdGVhZCBvZiBvbkZvY3VzSW4gYW5kIG9uRm9jdXNPdXQuICcgKyAnQWxsIFJlYWN0IGV2ZW50cyBhcmUgbm9ybWFsaXplZCB0byBidWJibGUsIHNvIG9uRm9jdXNJbiBhbmQgb25Gb2N1c091dCAnICsgJ2FyZSBub3QgbmVlZGVkL3N1cHBvcnRlZCBieSBSZWFjdC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gLy8gV2UgY2FuJ3QgcmVseSBvbiB0aGUgZXZlbnQgc3lzdGVtIGJlaW5nIGluamVjdGVkIG9uIHRoZSBzZXJ2ZXIuXG5cblxuICAgIGlmIChldmVudFJlZ2lzdHJ5ICE9IG51bGwpIHtcbiAgICAgIHZhciByZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzID0gZXZlbnRSZWdpc3RyeS5yZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLFxuICAgICAgICAgIHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMgPSBldmVudFJlZ2lzdHJ5LnBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXM7XG5cbiAgICAgIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVnaXN0cmF0aW9uTmFtZSA9IHBvc3NpYmxlUmVnaXN0cmF0aW9uTmFtZXMuaGFzT3duUHJvcGVydHkobG93ZXJDYXNlZE5hbWUpID8gcG9zc2libGVSZWdpc3RyYXRpb25OYW1lc1tsb3dlckNhc2VkTmFtZV0gOiBudWxsO1xuXG4gICAgICBpZiAocmVnaXN0cmF0aW9uTmFtZSAhPSBudWxsKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIGV2ZW50IGhhbmRsZXIgcHJvcGVydHkgYCVzYC4gRGlkIHlvdSBtZWFuIGAlc2A/JywgbmFtZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ1Vua25vd24gZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiBJdCB3aWxsIGJlIGlnbm9yZWQuJywgbmFtZSk7XG5cbiAgICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChFVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgIC8vIElmIG5vIGV2ZW50IHBsdWdpbnMgaGF2ZSBiZWVuIGluamVjdGVkLCB3ZSBhcmUgaW4gYSBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gICAgICAvLyBTbyB3ZSBjYW4ndCB0ZWxsIGlmIHRoZSBldmVudCBuYW1lIGlzIGNvcnJlY3QgZm9yIHN1cmUsIGJ1dCB3ZSBjYW4gZmlsdGVyXG4gICAgICAvLyBvdXQga25vd24gYmFkIG9uZXMgbGlrZSBgb25jbGlja2AuIFdlIGNhbid0IHN1Z2dlc3QgYSBzcGVjaWZpYyByZXBsYWNlbWVudCB0aG91Z2guXG4gICAgICBpZiAoSU5WQUxJRF9FVkVOVF9OQU1FX1JFR0VYLnRlc3QobmFtZSkpIHtcbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgZXZlbnQgaGFuZGxlciBwcm9wZXJ0eSBgJXNgLiAnICsgJ1JlYWN0IGV2ZW50cyB1c2UgdGhlIGNhbWVsQ2FzZSBuYW1pbmcgY29udmVudGlvbiwgZm9yIGV4YW1wbGUgYG9uQ2xpY2tgLicsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBMZXQgdGhlIEFSSUEgYXR0cmlidXRlIGhvb2sgdmFsaWRhdGUgQVJJQSBhdHRyaWJ1dGVzXG5cblxuICAgIGlmIChyQVJJQSQxLnRlc3QobmFtZSkgfHwgckFSSUFDYW1lbCQxLnRlc3QobmFtZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lubmVyaHRtbCcpIHtcbiAgICAgIGVycm9yKCdEaXJlY3RseSBzZXR0aW5nIHByb3BlcnR5IGBpbm5lckhUTUxgIGlzIG5vdCBwZXJtaXR0ZWQuICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIGxvb2t1cCBkb2N1bWVudGF0aW9uIG9uIGBkYW5nZXJvdXNseVNldElubmVySFRNTGAuJyk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAobG93ZXJDYXNlZE5hbWUgPT09ICdhcmlhJykge1xuICAgICAgZXJyb3IoJ1RoZSBgYXJpYWAgYXR0cmlidXRlIGlzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlIGluIFJlYWN0LiAnICsgJ1Bhc3MgaW5kaXZpZHVhbCBgYXJpYS1gIGF0dHJpYnV0ZXMgaW5zdGVhZC4nKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChsb3dlckNhc2VkTmFtZSA9PT0gJ2lzJyAmJiB2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBhIGAlc2AgZm9yIGEgc3RyaW5nIGF0dHJpYnV0ZSBgaXNgLiBJZiB0aGlzIGlzIGV4cGVjdGVkLCBjYXN0ICcgKyAndGhlIHZhbHVlIHRvIGEgc3RyaW5nLicsIHR5cGVvZiB2YWx1ZSk7XG5cbiAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgIGVycm9yKCdSZWNlaXZlZCBOYU4gZm9yIHRoZSBgJXNgIGF0dHJpYnV0ZS4gSWYgdGhpcyBpcyBleHBlY3RlZCwgY2FzdCAnICsgJ3RoZSB2YWx1ZSB0byBhIHN0cmluZy4nLCBuYW1lKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8obmFtZSk7XG4gICAgdmFyIGlzUmVzZXJ2ZWQgPSBwcm9wZXJ0eUluZm8gIT09IG51bGwgJiYgcHJvcGVydHlJbmZvLnR5cGUgPT09IFJFU0VSVkVEOyAvLyBLbm93biBhdHRyaWJ1dGVzIHNob3VsZCBtYXRjaCB0aGUgY2FzaW5nIHNwZWNpZmllZCBpbiB0aGUgcHJvcGVydHkgY29uZmlnLlxuXG4gICAgaWYgKHBvc3NpYmxlU3RhbmRhcmROYW1lcy5oYXNPd25Qcm9wZXJ0eShsb3dlckNhc2VkTmFtZSkpIHtcbiAgICAgIHZhciBzdGFuZGFyZE5hbWUgPSBwb3NzaWJsZVN0YW5kYXJkTmFtZXNbbG93ZXJDYXNlZE5hbWVdO1xuXG4gICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBuYW1lKSB7XG4gICAgICAgIGVycm9yKCdJbnZhbGlkIERPTSBwcm9wZXJ0eSBgJXNgLiBEaWQgeW91IG1lYW4gYCVzYD8nLCBuYW1lLCBzdGFuZGFyZE5hbWUpO1xuXG4gICAgICAgIHdhcm5lZFByb3BlcnRpZXMkMVtuYW1lXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIWlzUmVzZXJ2ZWQgJiYgbmFtZSAhPT0gbG93ZXJDYXNlZE5hbWUpIHtcbiAgICAgIC8vIFVua25vd24gYXR0cmlidXRlcyBzaG91bGQgaGF2ZSBsb3dlcmNhc2UgY2FzaW5nIHNpbmNlIHRoYXQncyBob3cgdGhleVxuICAgICAgLy8gd2lsbCBiZSBjYXNlZCBhbnl3YXkgd2l0aCBzZXJ2ZXIgcmVuZGVyaW5nLlxuICAgICAgZXJyb3IoJ1JlYWN0IGRvZXMgbm90IHJlY29nbml6ZSB0aGUgYCVzYCBwcm9wIG9uIGEgRE9NIGVsZW1lbnQuIElmIHlvdSAnICsgJ2ludGVudGlvbmFsbHkgd2FudCBpdCB0byBhcHBlYXIgaW4gdGhlIERPTSBhcyBhIGN1c3RvbSAnICsgJ2F0dHJpYnV0ZSwgc3BlbGwgaXQgYXMgbG93ZXJjYXNlIGAlc2AgaW5zdGVhZC4gJyArICdJZiB5b3UgYWNjaWRlbnRhbGx5IHBhc3NlZCBpdCBmcm9tIGEgcGFyZW50IGNvbXBvbmVudCwgcmVtb3ZlICcgKyAnaXQgZnJvbSB0aGUgRE9NIGVsZW1lbnQuJywgbmFtZSwgbG93ZXJDYXNlZE5hbWUpO1xuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nICYmIHNob3VsZFJlbW92ZUF0dHJpYnV0ZVdpdGhXYXJuaW5nKG5hbWUsIHZhbHVlLCBwcm9wZXJ0eUluZm8sIGZhbHNlKSkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uJywgdmFsdWUsIG5hbWUsIG5hbWUsIHZhbHVlLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCdSZWNlaXZlZCBgJXNgIGZvciBhIG5vbi1ib29sZWFuIGF0dHJpYnV0ZSBgJXNgLlxcblxcbicgKyAnSWYgeW91IHdhbnQgdG8gd3JpdGUgaXQgdG8gdGhlIERPTSwgcGFzcyBhIHN0cmluZyBpbnN0ZWFkOiAnICsgJyVzPVwiJXNcIiBvciAlcz17dmFsdWUudG9TdHJpbmcoKX0uXFxuXFxuJyArICdJZiB5b3UgdXNlZCB0byBjb25kaXRpb25hbGx5IG9taXQgaXQgd2l0aCAlcz17Y29uZGl0aW9uICYmIHZhbHVlfSwgJyArICdwYXNzICVzPXtjb25kaXRpb24gPyB2YWx1ZSA6IHVuZGVmaW5lZH0gaW5zdGVhZC4nLCB2YWx1ZSwgbmFtZSwgbmFtZSwgdmFsdWUsIG5hbWUsIG5hbWUsIG5hbWUpO1xuICAgICAgfVxuXG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBOb3cgdGhhdCB3ZSd2ZSB2YWxpZGF0ZWQgY2FzaW5nLCBkbyBub3QgdmFsaWRhdGVcbiAgICAvLyBkYXRhIHR5cGVzIGZvciByZXNlcnZlZCBwcm9wc1xuXG5cbiAgICBpZiAoaXNSZXNlcnZlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSAvLyBXYXJuIHdoZW4gYSBrbm93biBhdHRyaWJ1dGUgaXMgYSBiYWQgdHlwZVxuXG5cbiAgICBpZiAoc2hvdWxkUmVtb3ZlQXR0cmlidXRlV2l0aFdhcm5pbmcobmFtZSwgdmFsdWUsIHByb3BlcnR5SW5mbywgZmFsc2UpKSB7XG4gICAgICB3YXJuZWRQcm9wZXJ0aWVzJDFbbmFtZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gV2FybiB3aGVuIHBhc3NpbmcgdGhlIHN0cmluZ3MgJ2ZhbHNlJyBvciAndHJ1ZScgaW50byBhIGJvb2xlYW4gcHJvcFxuXG5cbiAgICBpZiAoKHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlID09PSAndHJ1ZScpICYmIHByb3BlcnR5SW5mbyAhPT0gbnVsbCAmJiBwcm9wZXJ0eUluZm8udHlwZSA9PT0gQk9PTEVBTikge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIHRoZSBzdHJpbmcgYCVzYCBmb3IgdGhlIGJvb2xlYW4gYXR0cmlidXRlIGAlc2AuICcgKyAnJXMgJyArICdEaWQgeW91IG1lYW4gJXM9eyVzfT8nLCB2YWx1ZSwgbmFtZSwgdmFsdWUgPT09ICdmYWxzZScgPyAnVGhlIGJyb3dzZXIgd2lsbCBpbnRlcnByZXQgaXQgYXMgYSB0cnV0aHkgdmFsdWUuJyA6ICdBbHRob3VnaCB0aGlzIHdvcmtzLCBpdCB3aWxsIG5vdCB3b3JrIGFzIGV4cGVjdGVkIGlmIHlvdSBwYXNzIHRoZSBzdHJpbmcgXCJmYWxzZVwiLicsIG5hbWUsIHZhbHVlKTtcblxuICAgICAgd2FybmVkUHJvcGVydGllcyQxW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xufVxuXG52YXIgd2FyblVua25vd25Qcm9wZXJ0aWVzID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzLCBldmVudFJlZ2lzdHJ5KSB7XG4gIHtcbiAgICB2YXIgdW5rbm93blByb3BzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgIHZhciBpc1ZhbGlkID0gdmFsaWRhdGVQcm9wZXJ0eSQxKHR5cGUsIGtleSwgcHJvcHNba2V5XSwgZXZlbnRSZWdpc3RyeSk7XG5cbiAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICB1bmtub3duUHJvcHMucHVzaChrZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB1bmtub3duUHJvcFN0cmluZyA9IHVua25vd25Qcm9wcy5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgIHJldHVybiAnYCcgKyBwcm9wICsgJ2AnO1xuICAgIH0pLmpvaW4oJywgJyk7XG5cbiAgICBpZiAodW5rbm93blByb3BzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgZXJyb3IoJ0ludmFsaWQgdmFsdWUgZm9yIHByb3AgJXMgb24gPCVzPiB0YWcuIEVpdGhlciByZW1vdmUgaXQgZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIGl0IGluIHRoZSBET00uICcgKyAnRm9yIGRldGFpbHMsIHNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvYXR0cmlidXRlLWJlaGF2aW9yICcsIHVua25vd25Qcm9wU3RyaW5nLCB0eXBlKTtcbiAgICB9IGVsc2UgaWYgKHVua25vd25Qcm9wcy5sZW5ndGggPiAxKSB7XG4gICAgICBlcnJvcignSW52YWxpZCB2YWx1ZXMgZm9yIHByb3BzICVzIG9uIDwlcz4gdGFnLiBFaXRoZXIgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgZWxlbWVudCwgJyArICdvciBwYXNzIGEgc3RyaW5nIG9yIG51bWJlciB2YWx1ZSB0byBrZWVwIHRoZW0gaW4gdGhlIERPTS4gJyArICdGb3IgZGV0YWlscywgc2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9hdHRyaWJ1dGUtYmVoYXZpb3IgJywgdW5rbm93blByb3BTdHJpbmcsIHR5cGUpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIGV2ZW50UmVnaXN0cnkpIHtcbiAgaWYgKGlzQ3VzdG9tQ29tcG9uZW50KHR5cGUsIHByb3BzKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHdhcm5Vbmtub3duUHJvcGVydGllcyh0eXBlLCBwcm9wcywgZXZlbnRSZWdpc3RyeSk7XG59XG5cbnZhciBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSA9IDE7XG52YXIgSVNfTk9OX0RFTEVHQVRFRCA9IDEgPDwgMTtcbnZhciBJU19DQVBUVVJFX1BIQVNFID0gMSA8PCAyO1xudmFyIElTX1JFUExBWUVEID0gMSA8PCA0O1xuLy8gc2V0IHRvIExFR0FDWV9GQl9TVVBQT1JULiBMRUdBQ1lfRkJfU1VQUE9SVCBvbmx5IGdldHMgc2V0IHdoZW5cbi8vIHdlIGNhbGwgd2lsbERlZmVyTGF0ZXJGb3JMZWdhY3lGQlN1cHBvcnQsIHRodXMgbm90IGJhaWxpbmcgb3V0XG4vLyB3aWxsIHJlc3VsdCBpbiBlbmRsZXNzIGN5Y2xlcyBsaWtlIGFuIGluZmluaXRlIGxvb3AuXG4vLyBXZSBhbHNvIGRvbid0IHdhbnQgdG8gZGVmZXIgZHVyaW5nIGV2ZW50IHJlcGxheWluZy5cblxudmFyIFNIT1VMRF9OT1RfUFJPQ0VTU19QT0xZRklMTF9FVkVOVF9QTFVHSU5TID0gSVNfRVZFTlRfSEFORExFX05PTl9NQU5BR0VEX05PREUgfCBJU19OT05fREVMRUdBVEVEIHwgSVNfQ0FQVFVSRV9QSEFTRTtcblxuLyoqXG4gKiBHZXRzIHRoZSB0YXJnZXQgbm9kZSBmcm9tIGEgbmF0aXZlIGJyb3dzZXIgZXZlbnQgYnkgYWNjb3VudGluZyBmb3JcbiAqIGluY29uc2lzdGVuY2llcyBpbiBicm93c2VyIERPTSBBUElzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge0RPTUV2ZW50VGFyZ2V0fSBUYXJnZXQgbm9kZS5cbiAqL1xuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkge1xuICAvLyBGYWxsYmFjayB0byBuYXRpdmVFdmVudC5zcmNFbGVtZW50IGZvciBJRTlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjUwNlxuICB2YXIgdGFyZ2V0ID0gbmF0aXZlRXZlbnQudGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LnNyY0VsZW1lbnQgfHwgd2luZG93OyAvLyBOb3JtYWxpemUgU1ZHIDx1c2U+IGVsZW1lbnQgZXZlbnRzICM0OTYzXG5cbiAgaWYgKHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudCkge1xuICAgIHRhcmdldCA9IHRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcbiAgfSAvLyBTYWZhcmkgbWF5IGZpcmUgZXZlbnRzIG9uIHRleHQgbm9kZXMgKE5vZGUuVEVYVF9OT0RFIGlzIDMpLlxuICAvLyBAc2VlIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX3Byb3BlcnRpZXMuaHRtbFxuXG5cbiAgcmV0dXJuIHRhcmdldC5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFID8gdGFyZ2V0LnBhcmVudE5vZGUgOiB0YXJnZXQ7XG59XG5cbnZhciByZXN0b3JlSW1wbCA9IG51bGw7XG52YXIgcmVzdG9yZVRhcmdldCA9IG51bGw7XG52YXIgcmVzdG9yZVF1ZXVlID0gbnVsbDtcblxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlT2ZUYXJnZXQodGFyZ2V0KSB7XG4gIC8vIFdlIHBlcmZvcm0gdGhpcyB0cmFuc2xhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBldmVudCBsb29wIHNvIHRoYXQgd2VcbiAgLy8gYWx3YXlzIHJlY2VpdmUgdGhlIGNvcnJlY3QgZmliZXIgaGVyZVxuICB2YXIgaW50ZXJuYWxJbnN0YW5jZSA9IGdldEluc3RhbmNlRnJvbU5vZGUodGFyZ2V0KTtcblxuICBpZiAoIWludGVybmFsSW5zdGFuY2UpIHtcbiAgICAvLyBVbm1vdW50ZWRcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoISh0eXBlb2YgcmVzdG9yZUltcGwgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwic2V0UmVzdG9yZUltcGxlbWVudGF0aW9uKCkgbmVlZHMgdG8gYmUgY2FsbGVkIHRvIGhhbmRsZSBhIHRhcmdldCBmb3IgY29udHJvbGxlZCBldmVudHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3RhdGVOb2RlID0gaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGU7IC8vIEd1YXJkIGFnYWluc3QgRmliZXIgYmVpbmcgdW5tb3VudGVkLlxuXG4gIGlmIChzdGF0ZU5vZGUpIHtcbiAgICB2YXIgX3Byb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gICAgcmVzdG9yZUltcGwoaW50ZXJuYWxJbnN0YW5jZS5zdGF0ZU5vZGUsIGludGVybmFsSW5zdGFuY2UudHlwZSwgX3Byb3BzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzZXRSZXN0b3JlSW1wbGVtZW50YXRpb24oaW1wbCkge1xuICByZXN0b3JlSW1wbCA9IGltcGw7XG59XG5mdW5jdGlvbiBlbnF1ZXVlU3RhdGVSZXN0b3JlKHRhcmdldCkge1xuICBpZiAocmVzdG9yZVRhcmdldCkge1xuICAgIGlmIChyZXN0b3JlUXVldWUpIHtcbiAgICAgIHJlc3RvcmVRdWV1ZS5wdXNoKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3RvcmVRdWV1ZSA9IFt0YXJnZXRdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXN0b3JlVGFyZ2V0ID0gdGFyZ2V0O1xuICB9XG59XG5mdW5jdGlvbiBuZWVkc1N0YXRlUmVzdG9yZSgpIHtcbiAgcmV0dXJuIHJlc3RvcmVUYXJnZXQgIT09IG51bGwgfHwgcmVzdG9yZVF1ZXVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gcmVzdG9yZVN0YXRlSWZOZWVkZWQoKSB7XG4gIGlmICghcmVzdG9yZVRhcmdldCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB0YXJnZXQgPSByZXN0b3JlVGFyZ2V0O1xuICB2YXIgcXVldWVkVGFyZ2V0cyA9IHJlc3RvcmVRdWV1ZTtcbiAgcmVzdG9yZVRhcmdldCA9IG51bGw7XG4gIHJlc3RvcmVRdWV1ZSA9IG51bGw7XG4gIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHRhcmdldCk7XG5cbiAgaWYgKHF1ZXVlZFRhcmdldHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlZFRhcmdldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3RvcmVTdGF0ZU9mVGFyZ2V0KHF1ZXVlZFRhcmdldHNbaV0pO1xuICAgIH1cbiAgfVxufVxuXG4vLyB0aGUgcmVuZGVyZXIuIFN1Y2ggYXMgd2hlbiB3ZSdyZSBkaXNwYXRjaGluZyBldmVudHMgb3IgaWYgdGhpcmQgcGFydHlcbi8vIGxpYnJhcmllcyBuZWVkIHRvIGNhbGwgYmF0Y2hlZFVwZGF0ZXMuIEV2ZW50dWFsbHksIHRoaXMgQVBJIHdpbGwgZ28gYXdheSB3aGVuXG4vLyBldmVyeXRoaW5nIGlzIGJhdGNoZWQgYnkgZGVmYXVsdC4gV2UnbGwgdGhlbiBoYXZlIGEgc2ltaWxhciBBUEkgdG8gb3B0LW91dCBvZlxuLy8gc2NoZWR1bGVkIHdvcmsgYW5kIGluc3RlYWQgZG8gc3luY2hyb25vdXMgd29yay5cbi8vIERlZmF1bHRzXG5cbnZhciBiYXRjaGVkVXBkYXRlc0ltcGwgPSBmdW5jdGlvbiAoZm4sIGJvb2trZWVwaW5nKSB7XG4gIHJldHVybiBmbihib29ra2VlcGluZyk7XG59O1xuXG52YXIgZGlzY3JldGVVcGRhdGVzSW1wbCA9IGZ1bmN0aW9uIChmbiwgYSwgYiwgYywgZCkge1xuICByZXR1cm4gZm4oYSwgYiwgYywgZCk7XG59O1xuXG52YXIgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJbXBsID0gZnVuY3Rpb24gKCkge307XG5cbnZhciBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCA9IGJhdGNoZWRVcGRhdGVzSW1wbDtcbnZhciBpc0luc2lkZUV2ZW50SGFuZGxlciA9IGZhbHNlO1xudmFyIGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMgPSBmYWxzZTtcblxuZnVuY3Rpb24gZmluaXNoRXZlbnRIYW5kbGVyKCkge1xuICAvLyBIZXJlIHdlIHdhaXQgdW50aWwgYWxsIHVwZGF0ZXMgaGF2ZSBwcm9wYWdhdGVkLCB3aGljaCBpcyBpbXBvcnRhbnRcbiAgLy8gd2hlbiB1c2luZyBjb250cm9sbGVkIGNvbXBvbmVudHMgd2l0aGluIGxheWVyczpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjk4XG4gIC8vIFRoZW4gd2UgcmVzdG9yZSBzdGF0ZSBvZiBhbnkgY29udHJvbGxlZCBjb21wb25lbnQuXG4gIHZhciBjb250cm9sbGVkQ29tcG9uZW50c0hhdmVQZW5kaW5nVXBkYXRlcyA9IG5lZWRzU3RhdGVSZXN0b3JlKCk7XG5cbiAgaWYgKGNvbnRyb2xsZWRDb21wb25lbnRzSGF2ZVBlbmRpbmdVcGRhdGVzKSB7XG4gICAgLy8gSWYgYSBjb250cm9sbGVkIGV2ZW50IHdhcyBmaXJlZCwgd2UgbWF5IG5lZWQgdG8gcmVzdG9yZSB0aGUgc3RhdGUgb2ZcbiAgICAvLyB0aGUgRE9NIG5vZGUgYmFjayB0byB0aGUgY29udHJvbGxlZCB2YWx1ZS4gVGhpcyBpcyBuZWNlc3Nhcnkgd2hlbiBSZWFjdFxuICAgIC8vIGJhaWxzIG91dCBvZiB0aGUgdXBkYXRlIHdpdGhvdXQgdG91Y2hpbmcgdGhlIERPTS5cbiAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICByZXN0b3JlU3RhdGVJZk5lZWRlZCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJhdGNoZWRVcGRhdGVzKGZuLCBib29ra2VlcGluZykge1xuICBpZiAoaXNJbnNpZGVFdmVudEhhbmRsZXIpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYm9va2tlZXBpbmcpO1xuICB9XG5cbiAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSB0cnVlO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGJhdGNoZWRVcGRhdGVzSW1wbChmbiwgYm9va2tlZXBpbmcpO1xuICB9IGZpbmFsbHkge1xuICAgIGlzSW5zaWRlRXZlbnRIYW5kbGVyID0gZmFsc2U7XG4gICAgZmluaXNoRXZlbnRIYW5kbGVyKCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGJhdGNoZWRFdmVudFVwZGF0ZXMoZm4sIGEsIGIpIHtcbiAgaWYgKGlzQmF0Y2hpbmdFdmVudFVwZGF0ZXMpIHtcbiAgICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGluc2lkZSBhbm90aGVyIGJhdGNoLCB3ZSBuZWVkIHRvIHdhaXQgdW50aWwgaXRcbiAgICAvLyBmdWxseSBjb21wbGV0ZXMgYmVmb3JlIHJlc3RvcmluZyBzdGF0ZS5cbiAgICByZXR1cm4gZm4oYSwgYik7XG4gIH1cblxuICBpc0JhdGNoaW5nRXZlbnRVcGRhdGVzID0gdHJ1ZTtcblxuICB0cnkge1xuICAgIHJldHVybiBiYXRjaGVkRXZlbnRVcGRhdGVzSW1wbChmbiwgYSwgYik7XG4gIH0gZmluYWxseSB7XG4gICAgaXNCYXRjaGluZ0V2ZW50VXBkYXRlcyA9IGZhbHNlO1xuICAgIGZpbmlzaEV2ZW50SGFuZGxlcigpO1xuICB9XG59XG5mdW5jdGlvbiBkaXNjcmV0ZVVwZGF0ZXMoZm4sIGEsIGIsIGMsIGQpIHtcbiAgdmFyIHByZXZJc0luc2lkZUV2ZW50SGFuZGxlciA9IGlzSW5zaWRlRXZlbnRIYW5kbGVyO1xuICBpc0luc2lkZUV2ZW50SGFuZGxlciA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZGlzY3JldGVVcGRhdGVzSW1wbChmbiwgYSwgYiwgYywgZCk7XG4gIH0gZmluYWxseSB7XG4gICAgaXNJbnNpZGVFdmVudEhhbmRsZXIgPSBwcmV2SXNJbnNpZGVFdmVudEhhbmRsZXI7XG5cbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmaW5pc2hFdmVudEhhbmRsZXIoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoRGlzY3JldGVVcGRhdGVzSWZOZWVkZWQodGltZVN0YW1wKSB7XG4gIHtcbiAgICBpZiAoIWlzSW5zaWRlRXZlbnRIYW5kbGVyKSB7XG4gICAgICBmbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oX2JhdGNoZWRVcGRhdGVzSW1wbCwgX2Rpc2NyZXRlVXBkYXRlc0ltcGwsIF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGwsIF9iYXRjaGVkRXZlbnRVcGRhdGVzSW1wbCkge1xuICBiYXRjaGVkVXBkYXRlc0ltcGwgPSBfYmF0Y2hlZFVwZGF0ZXNJbXBsO1xuICBkaXNjcmV0ZVVwZGF0ZXNJbXBsID0gX2Rpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGZsdXNoRGlzY3JldGVVcGRhdGVzSW1wbCA9IF9mbHVzaERpc2NyZXRlVXBkYXRlc0ltcGw7XG4gIGJhdGNoZWRFdmVudFVwZGF0ZXNJbXBsID0gX2JhdGNoZWRFdmVudFVwZGF0ZXNJbXBsO1xufVxuXG5mdW5jdGlvbiBpc0ludGVyYWN0aXZlKHRhZykge1xuICByZXR1cm4gdGFnID09PSAnYnV0dG9uJyB8fCB0YWcgPT09ICdpbnB1dCcgfHwgdGFnID09PSAnc2VsZWN0JyB8fCB0YWcgPT09ICd0ZXh0YXJlYSc7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFByZXZlbnRNb3VzZUV2ZW50KG5hbWUsIHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAobmFtZSkge1xuICAgIGNhc2UgJ29uQ2xpY2snOlxuICAgIGNhc2UgJ29uQ2xpY2tDYXB0dXJlJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrJzpcbiAgICBjYXNlICdvbkRvdWJsZUNsaWNrQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZURvd24nOlxuICAgIGNhc2UgJ29uTW91c2VEb3duQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZU1vdmUnOlxuICAgIGNhc2UgJ29uTW91c2VNb3ZlQ2FwdHVyZSc6XG4gICAgY2FzZSAnb25Nb3VzZVVwJzpcbiAgICBjYXNlICdvbk1vdXNlVXBDYXB0dXJlJzpcbiAgICBjYXNlICdvbk1vdXNlRW50ZXInOlxuICAgICAgcmV0dXJuICEhKHByb3BzLmRpc2FibGVkICYmIGlzSW50ZXJhY3RpdmUodHlwZSkpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gaW5zdCBUaGUgaW5zdGFuY2UsIHdoaWNoIGlzIHRoZSBzb3VyY2Ugb2YgZXZlbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZ2lzdHJhdGlvbk5hbWUgTmFtZSBvZiBsaXN0ZW5lciAoZS5nLiBgb25DbGlja2ApLlxuICogQHJldHVybiB7P2Z1bmN0aW9ufSBUaGUgc3RvcmVkIGNhbGxiYWNrLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0TGlzdGVuZXIoaW5zdCwgcmVnaXN0cmF0aW9uTmFtZSkge1xuICB2YXIgc3RhdGVOb2RlID0gaW5zdC5zdGF0ZU5vZGU7XG5cbiAgaWYgKHN0YXRlTm9kZSA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MgKGV4OiBvbmxvYWQgZXZlbnRzIGluIGluY3JlbWVudGFsIG1vZGUpLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BzID0gZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZShzdGF0ZU5vZGUpO1xuXG4gIGlmIChwcm9wcyA9PT0gbnVsbCkge1xuICAgIC8vIFdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2YXIgbGlzdGVuZXIgPSBwcm9wc1tyZWdpc3RyYXRpb25OYW1lXTtcblxuICBpZiAoc2hvdWxkUHJldmVudE1vdXNlRXZlbnQocmVnaXN0cmF0aW9uTmFtZSwgaW5zdC50eXBlLCBwcm9wcykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmICghKCFsaXN0ZW5lciB8fCB0eXBlb2YgbGlzdGVuZXIgPT09ICdmdW5jdGlvbicpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgYFwiICsgcmVnaXN0cmF0aW9uTmFtZSArIFwiYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGBcIiArIHR5cGVvZiBsaXN0ZW5lciArIFwiYCB0eXBlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuXG52YXIgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTsgLy8gQ2hlY2sgaWYgYnJvd3NlciBzdXBwb3J0IGV2ZW50cyB3aXRoIHBhc3NpdmUgbGlzdGVuZXJzXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRXZlbnRUYXJnZXQvYWRkRXZlbnRMaXN0ZW5lciNTYWZlbHlfZGV0ZWN0aW5nX29wdGlvbl9zdXBwb3J0XG5cbmlmIChjYW5Vc2VET00pIHtcbiAgdHJ5IHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9OyAvLyAkRmxvd0ZpeE1lOiBJZ25vcmUgRmxvdyBjb21wbGFpbmluZyBhYm91dCBuZWVkaW5nIGEgdmFsdWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvcHRpb25zLCAncGFzc2l2ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBwYXNzaXZlQnJvd3NlckV2ZW50c1N1cHBvcnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Rlc3QnLCBvcHRpb25zLCBvcHRpb25zKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsIG9wdGlvbnMsIG9wdGlvbnMpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcGFzc2l2ZUJyb3dzZXJFdmVudHNTdXBwb3J0ZWQgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kKG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICB0cnkge1xuICAgIGZ1bmMuYXBwbHkoY29udGV4dCwgZnVuY0FyZ3MpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRoaXMub25FcnJvcihlcnJvcik7XG4gIH1cbn1cblxudmFyIGludm9rZUd1YXJkZWRDYWxsYmFja0ltcGwgPSBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kO1xuXG57XG4gIC8vIEluIERFViBtb2RlLCB3ZSBzd2FwIG91dCBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgZm9yIGEgc3BlY2lhbCB2ZXJzaW9uXG4gIC8vIHRoYXQgcGxheXMgbW9yZSBuaWNlbHkgd2l0aCB0aGUgYnJvd3NlcidzIERldlRvb2xzLiBUaGUgaWRlYSBpcyB0byBwcmVzZXJ2ZVxuICAvLyBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvci4gQmVjYXVzZSBSZWFjdCB3cmFwcyBhbGwgdXNlci1wcm92aWRlZFxuICAvLyBmdW5jdGlvbnMgaW4gaW52b2tlR3VhcmRlZENhbGxiYWNrLCBhbmQgdGhlIHByb2R1Y3Rpb24gdmVyc2lvbiBvZlxuICAvLyBpbnZva2VHdWFyZGVkQ2FsbGJhY2sgdXNlcyBhIHRyeS1jYXRjaCwgYWxsIHVzZXIgZXhjZXB0aW9ucyBhcmUgdHJlYXRlZFxuICAvLyBsaWtlIGNhdWdodCBleGNlcHRpb25zLCBhbmQgdGhlIERldlRvb2xzIHdvbid0IHBhdXNlIHVubGVzcyB0aGUgZGV2ZWxvcGVyXG4gIC8vIHRha2VzIHRoZSBleHRyYSBzdGVwIG9mIGVuYWJsaW5nIHBhdXNlIG9uIGNhdWdodCBleGNlcHRpb25zLiBUaGlzIGlzXG4gIC8vIHVuaW50dWl0aXZlLCB0aG91Z2gsIGJlY2F1c2UgZXZlbiB0aG91Z2ggUmVhY3QgaGFzIGNhdWdodCB0aGUgZXJyb3IsIGZyb21cbiAgLy8gdGhlIGRldmVsb3BlcidzIHBlcnNwZWN0aXZlLCB0aGUgZXJyb3IgaXMgdW5jYXVnaHQuXG4gIC8vXG4gIC8vIFRvIHByZXNlcnZlIHRoZSBleHBlY3RlZCBcIlBhdXNlIG9uIGV4Y2VwdGlvbnNcIiBiZWhhdmlvciwgd2UgZG9uJ3QgdXNlIGFcbiAgLy8gdHJ5LWNhdGNoIGluIERFVi4gSW5zdGVhZCwgd2Ugc3luY2hyb25vdXNseSBkaXNwYXRjaCBhIGZha2UgZXZlbnQgdG8gYSBmYWtlXG4gIC8vIERPTSBub2RlLCBhbmQgY2FsbCB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayBmcm9tIGluc2lkZSBhbiBldmVudCBoYW5kbGVyXG4gIC8vIGZvciB0aGF0IGZha2UgZXZlbnQuIElmIHRoZSBjYWxsYmFjayB0aHJvd3MsIHRoZSBlcnJvciBpcyBcImNhcHR1cmVkXCIgdXNpbmdcbiAgLy8gYSBnbG9iYWwgZXZlbnQgaGFuZGxlci4gQnV0IGJlY2F1c2UgdGhlIGVycm9yIGhhcHBlbnMgaW4gYSBkaWZmZXJlbnRcbiAgLy8gZXZlbnQgbG9vcCBjb250ZXh0LCBpdCBkb2VzIG5vdCBpbnRlcnJ1cHQgdGhlIG5vcm1hbCBwcm9ncmFtIGZsb3cuXG4gIC8vIEVmZmVjdGl2ZWx5LCB0aGlzIGdpdmVzIHVzIHRyeS1jYXRjaCBiZWhhdmlvciB3aXRob3V0IGFjdHVhbGx5IHVzaW5nXG4gIC8vIHRyeS1jYXRjaC4gTmVhdCFcbiAgLy8gQ2hlY2sgdGhhdCB0aGUgYnJvd3NlciBzdXBwb3J0cyB0aGUgQVBJcyB3ZSBuZWVkIHRvIGltcGxlbWVudCBvdXIgc3BlY2lhbFxuICAvLyBERVYgdmVyc2lvbiBvZiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuZGlzcGF0Y2hFdmVudCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHZhciBmYWtlTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3JlYWN0Jyk7XG5cbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tJbXBsID0gZnVuY3Rpb24gaW52b2tlR3VhcmRlZENhbGxiYWNrRGV2KG5hbWUsIGZ1bmMsIGNvbnRleHQsIGEsIGIsIGMsIGQsIGUsIGYpIHtcbiAgICAgIC8vIElmIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3Qgd2Uga25vdyBmb3Igc3VyZSB3ZSB3aWxsIGNyYXNoIGluIHRoaXMgbWV0aG9kXG4gICAgICAvLyB3aGVuIHdlIGNhbGwgZG9jdW1lbnQuY3JlYXRlRXZlbnQoKS4gSG93ZXZlciB0aGlzIGNhbiBjYXVzZSBjb25mdXNpbmdcbiAgICAgIC8vIGVycm9yczogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29raW5jdWJhdG9yL2NyZWF0ZS1yZWFjdC1hcHAvaXNzdWVzLzM0ODJcbiAgICAgIC8vIFNvIHdlIHByZWVtcHRpdmVseSB0aHJvdyB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UgaW5zdGVhZC5cbiAgICAgIGlmICghKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGUgYGRvY3VtZW50YCBnbG9iYWwgd2FzIGRlZmluZWQgd2hlbiBSZWFjdCB3YXMgaW5pdGlhbGl6ZWQsIGJ1dCBpcyBub3QgZGVmaW5lZCBhbnltb3JlLiBUaGlzIGNhbiBoYXBwZW4gaW4gYSB0ZXN0IGVudmlyb25tZW50IGlmIGEgY29tcG9uZW50IHNjaGVkdWxlcyBhbiB1cGRhdGUgZnJvbSBhbiBhc3luY2hyb25vdXMgY2FsbGJhY2ssIGJ1dCB0aGUgdGVzdCBoYXMgYWxyZWFkeSBmaW5pc2hlZCBydW5uaW5nLiBUbyBzb2x2ZSB0aGlzLCB5b3UgY2FuIGVpdGhlciB1bm1vdW50IHRoZSBjb21wb25lbnQgYXQgdGhlIGVuZCBvZiB5b3VyIHRlc3QgKGFuZCBlbnN1cmUgdGhhdCBhbnkgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMgZ2V0IGNhbmNlbGVkIGluIGBjb21wb25lbnRXaWxsVW5tb3VudGApLCBvciB5b3UgY2FuIGNoYW5nZSB0aGUgdGVzdCBpdHNlbGYgdG8gYmUgYXN5bmNocm9ub3VzLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgICAgdmFyIGRpZENhbGwgPSBmYWxzZTsgLy8gS2VlcHMgdHJhY2sgb2Ygd2hldGhlciB0aGUgdXNlci1wcm92aWRlZCBjYWxsYmFjayB0aHJldyBhbiBlcnJvci4gV2VcbiAgICAgIC8vIHNldCB0aGlzIHRvIHRydWUgYXQgdGhlIGJlZ2lubmluZywgdGhlbiBzZXQgaXQgdG8gZmFsc2UgcmlnaHQgYWZ0ZXJcbiAgICAgIC8vIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiBJZiB0aGUgZnVuY3Rpb24gZXJyb3JzLCBgZGlkRXJyb3JgIHdpbGwgbmV2ZXIgYmVcbiAgICAgIC8vIHNldCB0byBmYWxzZS4gVGhpcyBzdHJhdGVneSB3b3JrcyBldmVuIGlmIHRoZSBicm93c2VyIGlzIGZsYWt5IGFuZFxuICAgICAgLy8gZmFpbHMgdG8gY2FsbCBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIsIGJlY2F1c2UgaXQgZG9lc24ndCByZWx5IG9uXG4gICAgICAvLyB0aGUgZXJyb3IgZXZlbnQgYXQgYWxsLlxuXG4gICAgICB2YXIgZGlkRXJyb3IgPSB0cnVlOyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgdmFsdWUgb2Ygd2luZG93LmV2ZW50IHNvIHRoYXQgd2UgY2FuIHJlc2V0IGl0XG4gICAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrIHRvIGxldCB1c2VyIGNvZGUgYWNjZXNzIHdpbmRvdy5ldmVudCBpbiB0aGVcbiAgICAgIC8vIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBpdC5cblxuICAgICAgdmFyIHdpbmRvd0V2ZW50ID0gd2luZG93LmV2ZW50OyAvLyBLZWVwcyB0cmFjayBvZiB0aGUgZGVzY3JpcHRvciBvZiB3aW5kb3cuZXZlbnQgdG8gcmVzdG9yZSBpdCBhZnRlciBldmVudFxuICAgICAgLy8gZGlzcGF0Y2hpbmc6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2ODhcblxuICAgICAgdmFyIHdpbmRvd0V2ZW50RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iod2luZG93LCAnZXZlbnQnKTtcblxuICAgICAgZnVuY3Rpb24gcmVzdG9yZUFmdGVyRGlzcGF0Y2goKSB7XG4gICAgICAgIC8vIFdlIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgY2FsbGJhY2sgZnJvbSBldmVudCBsaXN0ZW5lcnMgc28gdGhhdFxuICAgICAgICAvLyBuZXN0ZWQgYGludm9rZUd1YXJkZWRDYWxsYmFja2AgY2FsbHMgZG8gbm90IGNsYXNoLiBPdGhlcndpc2UsIGFcbiAgICAgICAgLy8gbmVzdGVkIGNhbGwgd291bGQgdHJpZ2dlciB0aGUgZmFrZSBldmVudCBoYW5kbGVycyBvZiBhbnkgY2FsbCBoaWdoZXJcbiAgICAgICAgLy8gaW4gdGhlIHN0YWNrLlxuICAgICAgICBmYWtlTm9kZS5yZW1vdmVFdmVudExpc3RlbmVyKGV2dFR5cGUsIGNhbGxDYWxsYmFjaywgZmFsc2UpOyAvLyBXZSBjaGVjayBmb3Igd2luZG93Lmhhc093blByb3BlcnR5KCdldmVudCcpIHRvIHByZXZlbnQgdGhlXG4gICAgICAgIC8vIHdpbmRvdy5ldmVudCBhc3NpZ25tZW50IGluIGJvdGggSUUgPD0gMTAgYXMgdGhleSB0aHJvdyBhbiBlcnJvclxuICAgICAgICAvLyBcIk1lbWJlciBub3QgZm91bmRcIiBpbiBzdHJpY3QgbW9kZSwgYW5kIGluIEZpcmVmb3ggd2hpY2ggZG9lcyBub3RcbiAgICAgICAgLy8gc3VwcG9ydCB3aW5kb3cuZXZlbnQuXG5cbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuZXZlbnQgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5oYXNPd25Qcm9wZXJ0eSgnZXZlbnQnKSkge1xuICAgICAgICAgIHdpbmRvdy5ldmVudCA9IHdpbmRvd0V2ZW50O1xuICAgICAgICB9XG4gICAgICB9IC8vIENyZWF0ZSBhbiBldmVudCBoYW5kbGVyIGZvciBvdXIgZmFrZSBldmVudC4gV2Ugd2lsbCBzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkaXNwYXRjaCBvdXIgZmFrZSBldmVudCB1c2luZyBgZGlzcGF0Y2hFdmVudGAuIEluc2lkZSB0aGUgaGFuZGxlciwgd2VcbiAgICAgIC8vIGNhbGwgdGhlIHVzZXItcHJvdmlkZWQgY2FsbGJhY2suXG5cblxuICAgICAgdmFyIGZ1bmNBcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKTtcblxuICAgICAgZnVuY3Rpb24gY2FsbENhbGxiYWNrKCkge1xuICAgICAgICBkaWRDYWxsID0gdHJ1ZTtcbiAgICAgICAgcmVzdG9yZUFmdGVyRGlzcGF0Y2goKTtcbiAgICAgICAgZnVuYy5hcHBseShjb250ZXh0LCBmdW5jQXJncyk7XG4gICAgICAgIGRpZEVycm9yID0gZmFsc2U7XG4gICAgICB9IC8vIENyZWF0ZSBhIGdsb2JhbCBlcnJvciBldmVudCBoYW5kbGVyLiBXZSB1c2UgdGhpcyB0byBjYXB0dXJlIHRoZSB2YWx1ZVxuICAgICAgLy8gdGhhdCB3YXMgdGhyb3duLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBlcnJvciBoYW5kbGVyIHdpbGwgZmlyZSBtb3JlXG4gICAgICAvLyB0aGFuIG9uY2U7IGZvciBleGFtcGxlLCBpZiBub24tUmVhY3QgY29kZSBhbHNvIGNhbGxzIGBkaXNwYXRjaEV2ZW50YFxuICAgICAgLy8gYW5kIGEgaGFuZGxlciBmb3IgdGhhdCBldmVudCB0aHJvd3MuIFdlIHNob3VsZCBiZSByZXNpbGllbnQgdG8gbW9zdCBvZlxuICAgICAgLy8gdGhvc2UgY2FzZXMuIEV2ZW4gaWYgb3VyIGVycm9yIGV2ZW50IGhhbmRsZXIgZmlyZXMgbW9yZSB0aGFuIG9uY2UsIHRoZVxuICAgICAgLy8gbGFzdCBlcnJvciBldmVudCBpcyBhbHdheXMgdXNlZC4gSWYgdGhlIGNhbGxiYWNrIGFjdHVhbGx5IGRvZXMgZXJyb3IsXG4gICAgICAvLyB3ZSBrbm93IHRoYXQgdGhlIGxhc3QgZXJyb3IgZXZlbnQgaXMgdGhlIGNvcnJlY3Qgb25lLCBiZWNhdXNlIGl0J3Mgbm90XG4gICAgICAvLyBwb3NzaWJsZSBmb3IgYW55dGhpbmcgZWxzZSB0byBoYXZlIGhhcHBlbmVkIGluIGJldHdlZW4gb3VyIGNhbGxiYWNrXG4gICAgICAvLyBlcnJvcmluZyBhbmQgdGhlIGNvZGUgdGhhdCBmb2xsb3dzIHRoZSBgZGlzcGF0Y2hFdmVudGAgY2FsbCBiZWxvdy4gSWZcbiAgICAgIC8vIHRoZSBjYWxsYmFjayBkb2Vzbid0IGVycm9yLCBidXQgdGhlIGVycm9yIGV2ZW50IHdhcyBmaXJlZCwgd2Uga25vdyB0b1xuICAgICAgLy8gaWdub3JlIGl0IGJlY2F1c2UgYGRpZEVycm9yYCB3aWxsIGJlIGZhbHNlLCBhcyBkZXNjcmliZWQgYWJvdmUuXG5cblxuICAgICAgdmFyIGVycm9yOyAvLyBVc2UgdGhpcyB0byB0cmFjayB3aGV0aGVyIHRoZSBlcnJvciBldmVudCBpcyBldmVyIGNhbGxlZC5cblxuICAgICAgdmFyIGRpZFNldEVycm9yID0gZmFsc2U7XG4gICAgICB2YXIgaXNDcm9zc09yaWdpbkVycm9yID0gZmFsc2U7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZVdpbmRvd0Vycm9yKGV2ZW50KSB7XG4gICAgICAgIGVycm9yID0gZXZlbnQuZXJyb3I7XG4gICAgICAgIGRpZFNldEVycm9yID0gdHJ1ZTtcblxuICAgICAgICBpZiAoZXJyb3IgPT09IG51bGwgJiYgZXZlbnQuY29sbm8gPT09IDAgJiYgZXZlbnQubGluZW5vID09PSAwKSB7XG4gICAgICAgICAgaXNDcm9zc09yaWdpbkVycm9yID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgLy8gU29tZSBvdGhlciBlcnJvciBoYW5kbGVyIGhhcyBwcmV2ZW50ZWQgZGVmYXVsdC5cbiAgICAgICAgICAvLyBCcm93c2VycyBzaWxlbmNlIHRoZSBlcnJvciByZXBvcnQgaWYgdGhpcyBoYXBwZW5zLlxuICAgICAgICAgIC8vIFdlJ2xsIHJlbWVtYmVyIHRoaXMgdG8gbGF0ZXIgZGVjaWRlIHdoZXRoZXIgdG8gbG9nIGl0IG9yIG5vdC5cbiAgICAgICAgICBpZiAoZXJyb3IgIT0gbnVsbCAmJiB0eXBlb2YgZXJyb3IgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBlcnJvci5fc3VwcHJlc3NMb2dnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGlubmVyKSB7Ly8gSWdub3JlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBDcmVhdGUgYSBmYWtlIGV2ZW50IHR5cGUuXG5cblxuICAgICAgdmFyIGV2dFR5cGUgPSBcInJlYWN0LVwiICsgKG5hbWUgPyBuYW1lIDogJ2ludm9rZWd1YXJkZWRjYWxsYmFjaycpOyAvLyBBdHRhY2ggb3VyIGV2ZW50IGhhbmRsZXJzXG5cbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcbiAgICAgIGZha2VOb2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZ0VHlwZSwgY2FsbENhbGxiYWNrLCBmYWxzZSk7IC8vIFN5bmNocm9ub3VzbHkgZGlzcGF0Y2ggb3VyIGZha2UgZXZlbnQuIElmIHRoZSB1c2VyLXByb3ZpZGVkIGZ1bmN0aW9uXG4gICAgICAvLyBlcnJvcnMsIGl0IHdpbGwgdHJpZ2dlciBvdXIgZ2xvYmFsIGVycm9yIGhhbmRsZXIuXG5cbiAgICAgIGV2dC5pbml0RXZlbnQoZXZ0VHlwZSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgIGZha2VOb2RlLmRpc3BhdGNoRXZlbnQoZXZ0KTtcblxuICAgICAgaWYgKHdpbmRvd0V2ZW50RGVzY3JpcHRvcikge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkod2luZG93LCAnZXZlbnQnLCB3aW5kb3dFdmVudERlc2NyaXB0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlkQ2FsbCAmJiBkaWRFcnJvcikge1xuICAgICAgICBpZiAoIWRpZFNldEVycm9yKSB7XG4gICAgICAgICAgLy8gVGhlIGNhbGxiYWNrIGVycm9yZWQsIGJ1dCB0aGUgZXJyb3IgZXZlbnQgbmV2ZXIgZmlyZWQuXG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoJ0FuIGVycm9yIHdhcyB0aHJvd24gaW5zaWRlIG9uZSBvZiB5b3VyIGNvbXBvbmVudHMsIGJ1dCBSZWFjdCAnICsgXCJkb2Vzbid0IGtub3cgd2hhdCBpdCB3YXMuIFRoaXMgaXMgbGlrZWx5IGR1ZSB0byBicm93c2VyIFwiICsgJ2ZsYWtpbmVzcy4gUmVhY3QgZG9lcyBpdHMgYmVzdCB0byBwcmVzZXJ2ZSB0aGUgXCJQYXVzZSBvbiAnICsgJ2V4Y2VwdGlvbnNcIiBiZWhhdmlvciBvZiB0aGUgRGV2VG9vbHMsIHdoaWNoIHJlcXVpcmVzIHNvbWUgJyArIFwiREVWLW1vZGUgb25seSB0cmlja3MuIEl0J3MgcG9zc2libGUgdGhhdCB0aGVzZSBkb24ndCB3b3JrIGluIFwiICsgJ3lvdXIgYnJvd3Nlci4gVHJ5IHRyaWdnZXJpbmcgdGhlIGVycm9yIGluIHByb2R1Y3Rpb24gbW9kZSwgJyArICdvciBzd2l0Y2hpbmcgdG8gYSBtb2Rlcm4gYnJvd3Nlci4gSWYgeW91IHN1c3BlY3QgdGhhdCB0aGlzIGlzICcgKyAnYWN0dWFsbHkgYW4gaXNzdWUgd2l0aCBSZWFjdCwgcGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDcm9zc09yaWdpbkVycm9yKSB7XG4gICAgICAgICAgZXJyb3IgPSBuZXcgRXJyb3IoXCJBIGNyb3NzLW9yaWdpbiBlcnJvciB3YXMgdGhyb3duLiBSZWFjdCBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIFwiICsgJ3RoZSBhY3R1YWwgZXJyb3Igb2JqZWN0IGluIGRldmVsb3BtZW50LiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvY3Jvc3NvcmlnaW4tZXJyb3IgZm9yIG1vcmUgaW5mb3JtYXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyb3IpO1xuICAgICAgfSAvLyBSZW1vdmUgb3VyIGV2ZW50IGxpc3RlbmVyc1xuXG5cbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIGhhbmRsZVdpbmRvd0Vycm9yKTtcblxuICAgICAgaWYgKCFkaWRDYWxsKSB7XG4gICAgICAgIC8vIFNvbWV0aGluZyB3ZW50IHJlYWxseSB3cm9uZywgYW5kIG91ciBldmVudCB3YXMgbm90IGRpc3BhdGNoZWQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTY3MzRcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNjU4NVxuICAgICAgICAvLyBGYWxsIGJhY2sgdG8gdGhlIHByb2R1Y3Rpb24gaW1wbGVtZW50YXRpb24uXG4gICAgICAgIHJlc3RvcmVBZnRlckRpc3BhdGNoKCk7XG4gICAgICAgIHJldHVybiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tQcm9kLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufVxuXG52YXIgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxID0gaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbDtcblxudmFyIGhhc0Vycm9yID0gZmFsc2U7XG52YXIgY2F1Z2h0RXJyb3IgPSBudWxsOyAvLyBVc2VkIGJ5IGV2ZW50IHN5c3RlbSB0byBjYXB0dXJlL3JldGhyb3cgdGhlIGZpcnN0IGVycm9yLlxuXG52YXIgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG52YXIgcmV0aHJvd0Vycm9yID0gbnVsbDtcbnZhciByZXBvcnRlciA9IHtcbiAgb25FcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn07XG4vKipcbiAqIENhbGwgYSBmdW5jdGlvbiB3aGlsZSBndWFyZGluZyBhZ2FpbnN0IGVycm9ycyB0aGF0IGhhcHBlbnMgd2l0aGluIGl0LlxuICogUmV0dXJucyBhbiBlcnJvciBpZiBpdCB0aHJvd3MsIG90aGVyd2lzZSBudWxsLlxuICpcbiAqIEluIHByb2R1Y3Rpb24sIHRoaXMgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSB0cnktY2F0Y2guIFRoZSByZWFzb24gd2UgZG9uJ3RcbiAqIHVzZSBhIHRyeS1jYXRjaCBkaXJlY3RseSBpcyBzbyB0aGF0IHdlIGNhbiBzd2FwIG91dCBhIGRpZmZlcmVudFxuICogaW1wbGVtZW50YXRpb24gaW4gREVWIG1vZGUuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgb2YgdGhlIGd1YXJkIHRvIHVzZSBmb3IgbG9nZ2luZyBvciBkZWJ1Z2dpbmdcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGludm9rZVxuICogQHBhcmFtIHsqfSBjb250ZXh0IFRoZSBjb250ZXh0IHRvIHVzZSB3aGVuIGNhbGxpbmcgdGhlIGZ1bmN0aW9uXG4gKiBAcGFyYW0gey4uLip9IGFyZ3MgQXJndW1lbnRzIGZvciBmdW5jdGlvblxuICovXG5cbmZ1bmN0aW9uIGludm9rZUd1YXJkZWRDYWxsYmFjayhuYW1lLCBmdW5jLCBjb250ZXh0LCBhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIGhhc0Vycm9yID0gZmFsc2U7XG4gIGNhdWdodEVycm9yID0gbnVsbDtcbiAgaW52b2tlR3VhcmRlZENhbGxiYWNrSW1wbCQxLmFwcGx5KHJlcG9ydGVyLCBhcmd1bWVudHMpO1xufVxuLyoqXG4gKiBTYW1lIGFzIGludm9rZUd1YXJkZWRDYWxsYmFjaywgYnV0IGluc3RlYWQgb2YgcmV0dXJuaW5nIGFuIGVycm9yLCBpdCBzdG9yZXNcbiAqIGl0IGluIGEgZ2xvYmFsIHNvIGl0IGNhbiBiZSByZXRocm93biBieSBgcmV0aHJvd0NhdWdodEVycm9yYCBsYXRlci5cbiAqIFRPRE86IFNlZSBpZiBjYXVnaHRFcnJvciBhbmQgcmV0aHJvd0Vycm9yIGNhbiBiZSB1bmlmaWVkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIG9mIHRoZSBndWFyZCB0byB1c2UgZm9yIGxvZ2dpbmcgb3IgZGVidWdnaW5nXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBpbnZva2VcbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBUaGUgY29udGV4dCB0byB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvblxuICogQHBhcmFtIHsuLi4qfSBhcmdzIEFyZ3VtZW50cyBmb3IgZnVuY3Rpb25cbiAqL1xuXG5mdW5jdGlvbiBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IobmFtZSwgZnVuYywgY29udGV4dCwgYSwgYiwgYywgZCwgZSwgZikge1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBpZiAoaGFzRXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICBpZiAoIWhhc1JldGhyb3dFcnJvcikge1xuICAgICAgaGFzUmV0aHJvd0Vycm9yID0gdHJ1ZTtcbiAgICAgIHJldGhyb3dFcnJvciA9IGVycm9yO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBEdXJpbmcgZXhlY3V0aW9uIG9mIGd1YXJkZWQgZnVuY3Rpb25zIHdlIHdpbGwgY2FwdHVyZSB0aGUgZmlyc3QgZXJyb3Igd2hpY2hcbiAqIHdlIHdpbGwgcmV0aHJvdyB0byBiZSBoYW5kbGVkIGJ5IHRoZSB0b3AgbGV2ZWwgZXJyb3IgaGFuZGxlci5cbiAqL1xuXG5mdW5jdGlvbiByZXRocm93Q2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNSZXRocm93RXJyb3IpIHtcbiAgICB2YXIgZXJyb3IgPSByZXRocm93RXJyb3I7XG4gICAgaGFzUmV0aHJvd0Vycm9yID0gZmFsc2U7XG4gICAgcmV0aHJvd0Vycm9yID0gbnVsbDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuZnVuY3Rpb24gaGFzQ2F1Z2h0RXJyb3IoKSB7XG4gIHJldHVybiBoYXNFcnJvcjtcbn1cbmZ1bmN0aW9uIGNsZWFyQ2F1Z2h0RXJyb3IoKSB7XG4gIGlmIChoYXNFcnJvcikge1xuICAgIHZhciBlcnJvciA9IGNhdWdodEVycm9yO1xuICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICAgIHJldHVybiBlcnJvcjtcbiAgfSBlbHNlIHtcbiAgICB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcImNsZWFyQ2F1Z2h0RXJyb3Igd2FzIGNhbGxlZCBidXQgbm8gZXJyb3Igd2FzIGNhcHR1cmVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogYFJlYWN0SW5zdGFuY2VNYXBgIG1haW50YWlucyBhIG1hcHBpbmcgZnJvbSBhIHB1YmxpYyBmYWNpbmcgc3RhdGVmdWxcbiAqIGluc3RhbmNlIChrZXkpIGFuZCB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gKHZhbHVlKS4gVGhpcyBhbGxvd3MgcHVibGljXG4gKiBtZXRob2RzIHRvIGFjY2VwdCB0aGUgdXNlciBmYWNpbmcgaW5zdGFuY2UgYXMgYW4gYXJndW1lbnQgYW5kIG1hcCB0aGVtIGJhY2tcbiAqIHRvIGludGVybmFsIG1ldGhvZHMuXG4gKlxuICogTm90ZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGN1cnJlbnRseSBzaGFyZWQgYW5kIGFzc3VtZWQgdG8gYmUgc3RhdGVsZXNzLlxuICogSWYgdGhpcyBiZWNvbWVzIGFuIGFjdHVhbCBNYXAsIHRoYXQgd2lsbCBicmVhay5cbiAqL1xuZnVuY3Rpb24gZ2V0KGtleSkge1xuICByZXR1cm4ga2V5Ll9yZWFjdEludGVybmFscztcbn1cbmZ1bmN0aW9uIGhhcyhrZXkpIHtcbiAgcmV0dXJuIGtleS5fcmVhY3RJbnRlcm5hbHMgIT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gIGtleS5fcmVhY3RJbnRlcm5hbHMgPSB2YWx1ZTtcbn1cblxuLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHR3byB2YWx1ZXMuIFRoZXkncmUgdXNlZCBieSBSZWFjdCBEZXYgVG9vbHMuXG52YXIgTm9GbGFncyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBQZXJmb3JtZWRXb3JrID1cbi8qICAgICAgICAgICAgICAgICovXG4xOyAvLyBZb3UgY2FuIGNoYW5nZSB0aGUgcmVzdCAoYW5kIGFkZCBtb3JlKS5cblxudmFyIFBsYWNlbWVudCA9XG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgVXBkYXRlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDtcbnZhciBQbGFjZW1lbnRBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG42O1xudmFyIERlbGV0aW9uID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjg7XG52YXIgQ29udGVudFJlc2V0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ2FsbGJhY2sgPVxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgRGlkQ2FwdHVyZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuNjQ7XG52YXIgUmVmID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMTI4O1xudmFyIFNuYXBzaG90ID1cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBQYXNzaXZlID1cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG41MTI7IC8vIFRPRE8gKGVmZmVjdHMpIFJlbW92ZSB0aGlzIGJpdCBvbmNlIHRoZSBuZXcgcmVjb25jaWxlciBpcyBzeW5jZWQgdG8gdGhlIG9sZC5cblxudmFyIFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldiA9XG4vKiAgICAgKi9cbjgxOTI7XG52YXIgSHlkcmF0aW5nID1cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuMTAyNDtcbnZhciBIeWRyYXRpbmdBbmRVcGRhdGUgPVxuLyogICAgICAgICAgICovXG4xMDI4OyAvLyBQYXNzaXZlICYgVXBkYXRlICYgQ2FsbGJhY2sgJiBSZWYgJiBTbmFwc2hvdFxuXG52YXIgTGlmZWN5Y2xlRWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAqL1xuOTMyOyAvLyBVbmlvbiBvZiBhbGwgaG9zdCBlZmZlY3RzXG5cbnZhciBIb3N0RWZmZWN0TWFzayA9XG4vKiAgICAgICAgICAgICAgICovXG4yMDQ3OyAvLyBUaGVzZSBhcmUgbm90IHJlYWxseSBzaWRlIGVmZmVjdHMsIGJ1dCB3ZSBzdGlsbCByZXVzZSB0aGlzIGZpZWxkLlxuXG52YXIgSW5jb21wbGV0ZSA9XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuMjA0ODtcbnZhciBTaG91bGRDYXB0dXJlID1cbi8qICAgICAgICAgICAgICAgICovXG40MDk2O1xudmFyIEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2UgPVxuLyogKi9cbjE2Mzg0OyAvLyBTdGF0aWMgdGFncyBkZXNjcmliZSBhc3BlY3RzIG9mIGEgZmliZXIgdGhhdCBhcmUgbm90IHNwZWNpZmljIHRvIGEgcmVuZGVyLFxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRPd25lcjtcbmZ1bmN0aW9uIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpIHtcbiAgdmFyIG5vZGUgPSBmaWJlcjtcbiAgdmFyIG5lYXJlc3RNb3VudGVkID0gZmliZXI7XG5cbiAgaWYgKCFmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAvLyBJZiB0aGVyZSBpcyBubyBhbHRlcm5hdGUsIHRoaXMgbWlnaHQgYmUgYSBuZXcgdHJlZSB0aGF0IGlzbid0IGluc2VydGVkXG4gICAgLy8geWV0LiBJZiBpdCBpcywgdGhlbiBpdCB3aWxsIGhhdmUgYSBwZW5kaW5nIGluc2VydGlvbiBlZmZlY3Qgb24gaXQuXG4gICAgdmFyIG5leHROb2RlID0gbm9kZTtcblxuICAgIGRvIHtcbiAgICAgIG5vZGUgPSBuZXh0Tm9kZTtcblxuICAgICAgaWYgKChub2RlLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYW4gaW5zZXJ0aW9uIG9yIGluLXByb2dyZXNzIGh5ZHJhdGlvbi4gVGhlIG5lYXJlc3QgcG9zc2libGVcbiAgICAgICAgLy8gbW91bnRlZCBmaWJlciBpcyB0aGUgcGFyZW50IGJ1dCB3ZSBuZWVkIHRvIGNvbnRpbnVlIHRvIGZpZ3VyZSBvdXRcbiAgICAgICAgLy8gaWYgdGhhdCBvbmUgaXMgc3RpbGwgbW91bnRlZC5cbiAgICAgICAgbmVhcmVzdE1vdW50ZWQgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dE5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChuZXh0Tm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKG5vZGUucmV0dXJuKSB7XG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIFRPRE86IENoZWNrIGlmIHRoaXMgd2FzIGEgbmVzdGVkIEhvc3RSb290IHdoZW4gdXNlZCB3aXRoXG4gICAgLy8gcmVuZGVyQ29udGFpbmVySW50b1N1YnRyZWUuXG4gICAgcmV0dXJuIG5lYXJlc3RNb3VudGVkO1xuICB9IC8vIElmIHdlIGRpZG4ndCBoaXQgdGhlIHJvb3QsIHRoYXQgbWVhbnMgdGhhdCB3ZSdyZSBpbiBhbiBkaXNjb25uZWN0ZWQgdHJlZVxuICAvLyB0aGF0IGhhcyBiZWVuIHVubW91bnRlZC5cblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihmaWJlcikge1xuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIGlmIChzdXNwZW5zZVN0YXRlID09PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudCA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3VzcGVuc2VTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5lckZyb21GaWJlcihmaWJlcikge1xuICByZXR1cm4gZmliZXIudGFnID09PSBIb3N0Um9vdCA/IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvIDogbnVsbDtcbn1cbmZ1bmN0aW9uIGlzRmliZXJNb3VudGVkKGZpYmVyKSB7XG4gIHJldHVybiBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKSA9PT0gZmliZXI7XG59XG5mdW5jdGlvbiBpc01vdW50ZWQoY29tcG9uZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50O1xuXG4gICAgaWYgKG93bmVyICE9PSBudWxsICYmIG93bmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG4gICAgICB2YXIgaW5zdGFuY2UgPSBvd25lckZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKCFpbnN0YW5jZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIpIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIGFjY2Vzc2luZyBpc01vdW50ZWQgaW5zaWRlIGl0cyByZW5kZXIoKSBmdW5jdGlvbi4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXJGaWJlci50eXBlKSB8fCAnQSBjb21wb25lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQoY29tcG9uZW50KTtcblxuICBpZiAoIWZpYmVyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcjtcbn1cblxuZnVuY3Rpb24gYXNzZXJ0SXNNb3VudGVkKGZpYmVyKSB7XG4gIGlmICghKGdldE5lYXJlc3RNb3VudGVkRmliZXIoZmliZXIpID09PSBmaWJlcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEN1cnJlbnRGaWJlclVzaW5nU2xvd1BhdGgoZmliZXIpIHtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoIWFsdGVybmF0ZSkge1xuICAgIC8vIElmIHRoZXJlIGlzIG5vIGFsdGVybmF0ZSwgdGhlbiB3ZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgaXQgaXMgbW91bnRlZC5cbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKGZpYmVyKTtcblxuICAgIGlmICghKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmVhcmVzdE1vdW50ZWQgIT09IGZpYmVyKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gSWYgd2UgaGF2ZSB0d28gcG9zc2libGUgYnJhbmNoZXMsIHdlJ2xsIHdhbGsgYmFja3dhcmRzIHVwIHRvIHRoZSByb290XG4gIC8vIHRvIHNlZSB3aGF0IHBhdGggdGhlIHJvb3QgcG9pbnRzIHRvLiBPbiB0aGUgd2F5IHdlIG1heSBoaXQgb25lIG9mIHRoZVxuICAvLyBzcGVjaWFsIGNhc2VzIGFuZCB3ZSdsbCBkZWFsIHdpdGggdGhlbS5cblxuXG4gIHZhciBhID0gZmliZXI7XG4gIHZhciBiID0gYWx0ZXJuYXRlO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgdmFyIHBhcmVudEEgPSBhLnJldHVybjtcblxuICAgIGlmIChwYXJlbnRBID09PSBudWxsKSB7XG4gICAgICAvLyBXZSdyZSBhdCB0aGUgcm9vdC5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBwYXJlbnRCID0gcGFyZW50QS5hbHRlcm5hdGU7XG5cbiAgICBpZiAocGFyZW50QiA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhlcmUgaXMgbm8gYWx0ZXJuYXRlLiBUaGlzIGlzIGFuIHVudXN1YWwgY2FzZS4gQ3VycmVudGx5LCBpdCBvbmx5XG4gICAgICAvLyBoYXBwZW5zIHdoZW4gYSBTdXNwZW5zZSBjb21wb25lbnQgaXMgaGlkZGVuLiBBbiBleHRyYSBmcmFnbWVudCBmaWJlclxuICAgICAgLy8gaXMgaW5zZXJ0ZWQgaW4gYmV0d2VlbiB0aGUgU3VzcGVuc2UgZmliZXIgYW5kIGl0cyBjaGlsZHJlbi4gU2tpcFxuICAgICAgLy8gb3ZlciB0aGlzIGV4dHJhIGZyYWdtZW50IGZpYmVyIGFuZCBwcm9jZWVkIHRvIHRoZSBuZXh0IHBhcmVudC5cbiAgICAgIHZhciBuZXh0UGFyZW50ID0gcGFyZW50QS5yZXR1cm47XG5cbiAgICAgIGlmIChuZXh0UGFyZW50ICE9PSBudWxsKSB7XG4gICAgICAgIGEgPSBiID0gbmV4dFBhcmVudDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIElmIHRoZXJlJ3Mgbm8gcGFyZW50LCB3ZSdyZSBhdCB0aGUgcm9vdC5cblxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIElmIGJvdGggY29waWVzIG9mIHRoZSBwYXJlbnQgZmliZXIgcG9pbnQgdG8gdGhlIHNhbWUgY2hpbGQsIHdlIGNhblxuICAgIC8vIGFzc3VtZSB0aGF0IHRoZSBjaGlsZCBpcyBjdXJyZW50LiBUaGlzIGhhcHBlbnMgd2hlbiB3ZSBiYWlsb3V0IG9uIGxvd1xuICAgIC8vIHByaW9yaXR5OiB0aGUgYmFpbGVkIG91dCBmaWJlcidzIGNoaWxkIHJldXNlcyB0aGUgY3VycmVudCBjaGlsZC5cblxuXG4gICAgaWYgKHBhcmVudEEuY2hpbGQgPT09IHBhcmVudEIuY2hpbGQpIHtcbiAgICAgIHZhciBjaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChjaGlsZCkge1xuICAgICAgICBpZiAoY2hpbGQgPT09IGEpIHtcbiAgICAgICAgICAvLyBXZSd2ZSBkZXRlcm1pbmVkIHRoYXQgQSBpcyB0aGUgY3VycmVudCBicmFuY2guXG4gICAgICAgICAgYXNzZXJ0SXNNb3VudGVkKHBhcmVudEEpO1xuICAgICAgICAgIHJldHVybiBmaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGlsZCA9PT0gYikge1xuICAgICAgICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBCIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICAgICAgICBhc3NlcnRJc01vdW50ZWQocGFyZW50QSk7XG4gICAgICAgICAgcmV0dXJuIGFsdGVybmF0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgIH0gLy8gV2Ugc2hvdWxkIG5ldmVyIGhhdmUgYW4gYWx0ZXJuYXRlIGZvciBhbnkgbW91bnRpbmcgbm9kZS4gU28gdGhlIG9ubHlcbiAgICAgIC8vIHdheSB0aGlzIGNvdWxkIHBvc3NpYmx5IGhhcHBlbiBpcyBpZiB0aGlzIHdhcyB1bm1vdW50ZWQsIGlmIGF0IGFsbC5cblxuXG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhLnJldHVybiAhPT0gYi5yZXR1cm4pIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlciBvZiBBIGFuZCB0aGUgcmV0dXJuIHBvaW50ZXIgb2YgQiBwb2ludCB0byBkaWZmZXJlbnRcbiAgICAgIC8vIGZpYmVycy4gV2UgYXNzdW1lIHRoYXQgcmV0dXJuIHBvaW50ZXJzIG5ldmVyIGNyaXNzLWNyb3NzLCBzbyBBIG11c3RcbiAgICAgIC8vIGJlbG9uZyB0byB0aGUgY2hpbGQgc2V0IG9mIEEucmV0dXJuLCBhbmQgQiBtdXN0IGJlbG9uZyB0byB0aGUgY2hpbGRcbiAgICAgIC8vIHNldCBvZiBCLnJldHVybi5cbiAgICAgIGEgPSBwYXJlbnRBO1xuICAgICAgYiA9IHBhcmVudEI7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSByZXR1cm4gcG9pbnRlcnMgcG9pbnQgdG8gdGhlIHNhbWUgZmliZXIuIFdlJ2xsIGhhdmUgdG8gdXNlIHRoZVxuICAgICAgLy8gZGVmYXVsdCwgc2xvdyBwYXRoOiBzY2FuIHRoZSBjaGlsZCBzZXRzIG9mIGVhY2ggcGFyZW50IGFsdGVybmF0ZSB0byBzZWVcbiAgICAgIC8vIHdoaWNoIGNoaWxkIGJlbG9uZ3MgdG8gd2hpY2ggc2V0LlxuICAgICAgLy9cbiAgICAgIC8vIFNlYXJjaCBwYXJlbnQgQSdzIGNoaWxkIHNldFxuICAgICAgdmFyIGRpZEZpbmRDaGlsZCA9IGZhbHNlO1xuICAgICAgdmFyIF9jaGlsZCA9IHBhcmVudEEuY2hpbGQ7XG5cbiAgICAgIHdoaWxlIChfY2hpbGQpIHtcbiAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgIGRpZEZpbmRDaGlsZCA9IHRydWU7XG4gICAgICAgICAgYSA9IHBhcmVudEE7XG4gICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICBiID0gcGFyZW50QTtcbiAgICAgICAgICBhID0gcGFyZW50QjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZEZpbmRDaGlsZCkge1xuICAgICAgICAvLyBTZWFyY2ggcGFyZW50IEIncyBjaGlsZCBzZXRcbiAgICAgICAgX2NoaWxkID0gcGFyZW50Qi5jaGlsZDtcblxuICAgICAgICB3aGlsZSAoX2NoaWxkKSB7XG4gICAgICAgICAgaWYgKF9jaGlsZCA9PT0gYSkge1xuICAgICAgICAgICAgZGlkRmluZENoaWxkID0gdHJ1ZTtcbiAgICAgICAgICAgIGEgPSBwYXJlbnRCO1xuICAgICAgICAgICAgYiA9IHBhcmVudEE7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2NoaWxkID09PSBiKSB7XG4gICAgICAgICAgICBkaWRGaW5kQ2hpbGQgPSB0cnVlO1xuICAgICAgICAgICAgYiA9IHBhcmVudEI7XG4gICAgICAgICAgICBhID0gcGFyZW50QTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIF9jaGlsZCA9IF9jaGlsZC5zaWJsaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFkaWRGaW5kQ2hpbGQpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJDaGlsZCB3YXMgbm90IGZvdW5kIGluIGVpdGhlciBwYXJlbnQgc2V0LiBUaGlzIGluZGljYXRlcyBhIGJ1ZyBpbiBSZWFjdCByZWxhdGVkIHRvIHRoZSByZXR1cm4gcG9pbnRlci4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIShhLmFsdGVybmF0ZSA9PT0gYikpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmV0dXJuIGZpYmVycyBzaG91bGQgYWx3YXlzIGJlIGVhY2ggb3RoZXJzJyBhbHRlcm5hdGVzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIElmIHRoZSByb290IGlzIG5vdCBhIGhvc3QgY29udGFpbmVyLCB3ZSdyZSBpbiBhIGRpc2Nvbm5lY3RlZCB0cmVlLiBJLmUuXG4gIC8vIHVubW91bnRlZC5cblxuXG4gIGlmICghKGEudGFnID09PSBIb3N0Um9vdCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYS5zdGF0ZU5vZGUuY3VycmVudCA9PT0gYSkge1xuICAgIC8vIFdlJ3ZlIGRldGVybWluZWQgdGhhdCBBIGlzIHRoZSBjdXJyZW50IGJyYW5jaC5cbiAgICByZXR1cm4gZmliZXI7XG4gIH0gLy8gT3RoZXJ3aXNlIEIgaGFzIHRvIGJlIGN1cnJlbnQgYnJhbmNoLlxuXG5cbiAgcmV0dXJuIGFsdGVybmF0ZTtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyKHBhcmVudCkge1xuICB2YXIgY3VycmVudFBhcmVudCA9IGZpbmRDdXJyZW50RmliZXJVc2luZ1Nsb3dQYXRoKHBhcmVudCk7XG5cbiAgaWYgKCFjdXJyZW50UGFyZW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTmV4dCB3ZSdsbCBkcmlsbCBkb3duIHRoaXMgY29tcG9uZW50IHRvIGZpbmQgdGhlIGZpcnN0IEhvc3RDb21wb25lbnQvVGV4dC5cblxuXG4gIHZhciBub2RlID0gY3VycmVudFBhcmVudDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gZWxzZSBpZiAobm9kZS5jaGlsZCkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKCFub2RlLnNpYmxpbmcpIHtcbiAgICAgIGlmICghbm9kZS5yZXR1cm4gfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnRQYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfSAvLyBGbG93IG5lZWRzIHRoZSByZXR1cm4gbnVsbCBoZXJlLCBidXQgRVNMaW50IGNvbXBsYWlucyBhYm91dCBpdC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVucmVhY2hhYmxlXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGZpbmRDdXJyZW50SG9zdEZpYmVyV2l0aE5vUG9ydGFscyhwYXJlbnQpIHtcbiAgdmFyIGN1cnJlbnRQYXJlbnQgPSBmaW5kQ3VycmVudEZpYmVyVXNpbmdTbG93UGF0aChwYXJlbnQpO1xuXG4gIGlmICghY3VycmVudFBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIE5leHQgd2UnbGwgZHJpbGwgZG93biB0aGlzIGNvbXBvbmVudCB0byBmaW5kIHRoZSBmaXJzdCBIb3N0Q29tcG9uZW50L1RleHQuXG5cblxuICB2YXIgbm9kZSA9IGN1cnJlbnRQYXJlbnQ7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgbm9kZS50YWcgPT09IEhvc3RUZXh0IHx8IGVuYWJsZUZ1bmRhbWVudGFsQVBJICkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICYmIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSBjdXJyZW50UGFyZW50KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB3aGlsZSAoIW5vZGUuc2libGluZykge1xuICAgICAgaWYgKCFub2RlLnJldHVybiB8fCBub2RlLnJldHVybiA9PT0gY3VycmVudFBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cblxuICAgIG5vZGUuc2libGluZy5yZXR1cm4gPSBub2RlLnJldHVybjtcbiAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICB9IC8vIEZsb3cgbmVlZHMgdGhlIHJldHVybiBudWxsIGhlcmUsIGJ1dCBFU0xpbnQgY29tcGxhaW5zIGFib3V0IGl0LlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5yZWFjaGFibGVcblxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gZG9lc0ZpYmVyQ29udGFpbihwYXJlbnRGaWJlciwgY2hpbGRGaWJlcikge1xuICB2YXIgbm9kZSA9IGNoaWxkRmliZXI7XG4gIHZhciBwYXJlbnRGaWJlckFsdGVybmF0ZSA9IHBhcmVudEZpYmVyLmFsdGVybmF0ZTtcblxuICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgIGlmIChub2RlID09PSBwYXJlbnRGaWJlciB8fCBub2RlID09PSBwYXJlbnRGaWJlckFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbjtcbmZ1bmN0aW9uIHNldEF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdFVzZXJCbG9ja2luZ0h5ZHJhdGlvbiA9IGZuO1xufVxudmFyIGF0dGVtcHRDb250aW51b3VzSHlkcmF0aW9uO1xuZnVuY3Rpb24gc2V0QXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oZm4pIHtcbiAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24gPSBmbjtcbn1cbnZhciBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkoZm4pIHtcbiAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5ID0gZm47XG59XG52YXIgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHk7XG5mdW5jdGlvbiBzZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShmbikge1xuICBhdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eSA9IGZuO1xufSAvLyBUT0RPOiBVcGdyYWRlIHRoaXMgZGVmaW5pdGlvbiBvbmNlIHdlJ3JlIG9uIGEgbmV3ZXIgdmVyc2lvbiBvZiBGbG93IHRoYXRcbnZhciBoYXNTY2hlZHVsZWRSZXBsYXlBdHRlbXB0ID0gZmFsc2U7IC8vIFRoZSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMgdG8gYmUgcmVwbGF5ZWQuXG5cbnZhciBxdWV1ZWREaXNjcmV0ZUV2ZW50cyA9IFtdOyAvLyBJbmRpY2F0ZXMgaWYgYW55IGNvbnRpbnVvdXMgZXZlbnQgdGFyZ2V0cyBhcmUgbm9uLW51bGwgZm9yIGVhcmx5IGJhaWxvdXQuXG4vLyBpZiB0aGUgbGFzdCB0YXJnZXQgd2FzIGRlaHlkcmF0ZWQuXG5cbnZhciBxdWV1ZWRGb2N1cyA9IG51bGw7XG52YXIgcXVldWVkRHJhZyA9IG51bGw7XG52YXIgcXVldWVkTW91c2UgPSBudWxsOyAvLyBGb3IgcG9pbnRlciBldmVudHMgdGhlcmUgY2FuIGJlIG9uZSBsYXRlc3QgZXZlbnQgcGVyIHBvaW50ZXJJZC5cblxudmFyIHF1ZXVlZFBvaW50ZXJzID0gbmV3IE1hcCgpO1xudmFyIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcyA9IG5ldyBNYXAoKTsgLy8gV2UgY291bGQgY29uc2lkZXIgcmVwbGF5aW5nIHNlbGVjdGlvbmNoYW5nZSBhbmQgdG91Y2htb3ZlcyB0b28uXG5cbnZhciBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMgPSBbXTtcbmZ1bmN0aW9uIGhhc1F1ZXVlZERpc2NyZXRlRXZlbnRzKCkge1xuICByZXR1cm4gcXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMDtcbn1cbnZhciBkaXNjcmV0ZVJlcGxheWFibGVFdmVudHMgPSBbJ21vdXNlZG93bicsICdtb3VzZXVwJywgJ3RvdWNoY2FuY2VsJywgJ3RvdWNoZW5kJywgJ3RvdWNoc3RhcnQnLCAnYXV4Y2xpY2snLCAnZGJsY2xpY2snLCAncG9pbnRlcmNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVydXAnLCAnZHJhZ2VuZCcsICdkcmFnc3RhcnQnLCAnZHJvcCcsICdjb21wb3NpdGlvbmVuZCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnaW5wdXQnLCAndGV4dElucHV0JywgLy8gSW50ZW50aW9uYWxseSBjYW1lbENhc2Vcbidjb3B5JywgJ2N1dCcsICdwYXN0ZScsICdjbGljaycsICdjaGFuZ2UnLCAnY29udGV4dG1lbnUnLCAncmVzZXQnLCAnc3VibWl0J107XG5mdW5jdGlvbiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGV2ZW50VHlwZSkge1xuICByZXR1cm4gZGlzY3JldGVSZXBsYXlhYmxlRXZlbnRzLmluZGV4T2YoZXZlbnRUeXBlKSA+IC0xO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBibG9ja2VkT246IGJsb2NrZWRPbixcbiAgICBkb21FdmVudE5hbWU6IGRvbUV2ZW50TmFtZSxcbiAgICBldmVudFN5c3RlbUZsYWdzOiBldmVudFN5c3RlbUZsYWdzIHwgSVNfUkVQTEFZRUQsXG4gICAgbmF0aXZlRXZlbnQ6IG5hdGl2ZUV2ZW50LFxuICAgIHRhcmdldENvbnRhaW5lcnM6IFt0YXJnZXRDb250YWluZXJdXG4gIH07XG59XG5cbmZ1bmN0aW9uIHF1ZXVlRGlzY3JldGVFdmVudChibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5wdXNoKHF1ZXVlZEV2ZW50KTtcbn0gLy8gUmVzZXRzIHRoZSByZXBsYXlpbmcgZm9yIHRoaXMgdHlwZSBvZiBjb250aW51b3VzIGV2ZW50IHRvIG5vIGV2ZW50LlxuXG5mdW5jdGlvbiBjbGVhcklmQ29udGludW91c0V2ZW50KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICBxdWV1ZWRGb2N1cyA9IG51bGw7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2xlYXZlJzpcbiAgICAgIHF1ZXVlZERyYWcgPSBudWxsO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJvdXQnOlxuICAgICAge1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gbmF0aXZlRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVycy5kZWxldGUocG9pbnRlcklkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgY2FzZSAnbG9zdHBvaW50ZXJjYXB0dXJlJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9wb2ludGVySWQgPSBuYXRpdmVFdmVudC5wb2ludGVySWQ7XG4gICAgICAgIHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5kZWxldGUoX3BvaW50ZXJJZCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoZXhpc3RpbmdRdWV1ZWRFdmVudCwgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgaWYgKGV4aXN0aW5nUXVldWVkRXZlbnQgPT09IG51bGwgfHwgZXhpc3RpbmdRdWV1ZWRFdmVudC5uYXRpdmVFdmVudCAhPT0gbmF0aXZlRXZlbnQpIHtcbiAgICB2YXIgcXVldWVkRXZlbnQgPSBjcmVhdGVRdWV1ZWRSZXBsYXlhYmxlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKGJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIF9maWJlcjIgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKGJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIEF0dGVtcHQgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mIHRoaXMgdGFyZ2V0LlxuICAgICAgICBhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihfZmliZXIyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcXVldWVkRXZlbnQ7XG4gIH0gLy8gSWYgd2UgaGF2ZSBhbHJlYWR5IHF1ZXVlZCB0aGlzIGV4YWN0IGV2ZW50LCB0aGVuIGl0J3MgYmVjYXVzZVxuICAvLyB0aGUgZGlmZmVyZW50IGV2ZW50IHN5c3RlbXMgaGF2ZSBkaWZmZXJlbnQgRE9NIGV2ZW50IGxpc3RlbmVycy5cbiAgLy8gV2UgY2FuIGFjY3VtdWxhdGUgdGhlIGZsYWdzLCBhbmQgdGhlIHRhcmdldENvbnRhaW5lcnMsIGFuZFxuICAvLyBzdG9yZSBhIHNpbmdsZSBldmVudCB0byBiZSByZXBsYXllZC5cblxuXG4gIGV4aXN0aW5nUXVldWVkRXZlbnQuZXZlbnRTeXN0ZW1GbGFncyB8PSBldmVudFN5c3RlbUZsYWdzO1xuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IGV4aXN0aW5nUXVldWVkRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICBpZiAodGFyZ2V0Q29udGFpbmVyICE9PSBudWxsICYmIHRhcmdldENvbnRhaW5lcnMuaW5kZXhPZih0YXJnZXRDb250YWluZXIpID09PSAtMSkge1xuICAgIHRhcmdldENvbnRhaW5lcnMucHVzaCh0YXJnZXRDb250YWluZXIpO1xuICB9XG5cbiAgcmV0dXJuIGV4aXN0aW5nUXVldWVkRXZlbnQ7XG59XG5cbmZ1bmN0aW9uIHF1ZXVlSWZDb250aW51b3VzRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpIHtcbiAgLy8gVGhlc2Ugc2V0IHJlbGF0ZWRUYXJnZXQgdG8gbnVsbCBiZWNhdXNlIHRoZSByZXBsYXllZCBldmVudCB3aWxsIGJlIHRyZWF0ZWQgYXMgaWYgd2VcbiAgLy8gbW92ZWQgZnJvbSBvdXRzaWRlIHRoZSB3aW5kb3cgKG5vIHRhcmdldCkgb250byB0aGUgdGFyZ2V0IG9uY2UgaXQgaHlkcmF0ZXMuXG4gIC8vIEluc3RlYWQgb2YgbXV0YXRpbmcgd2UgY291bGQgY2xvbmUgdGhlIGV2ZW50LlxuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAge1xuICAgICAgICB2YXIgZm9jdXNFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRGb2N1cyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRm9jdXMsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIGZvY3VzRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgICB7XG4gICAgICAgIHZhciBkcmFnRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICAgICAgcXVldWVkRHJhZyA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkRHJhZywgYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgZHJhZ0V2ZW50KTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgICAge1xuICAgICAgICB2YXIgbW91c2VFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICBxdWV1ZWRNb3VzZSA9IGFjY3VtdWxhdGVPckNyZWF0ZUNvbnRpbnVvdXNRdWV1ZWRSZXBsYXlhYmxlRXZlbnQocXVldWVkTW91c2UsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG1vdXNlRXZlbnQpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ3BvaW50ZXJvdmVyJzpcbiAgICAgIHtcbiAgICAgICAgdmFyIHBvaW50ZXJFdmVudCA9IG5hdGl2ZUV2ZW50O1xuICAgICAgICB2YXIgcG9pbnRlcklkID0gcG9pbnRlckV2ZW50LnBvaW50ZXJJZDtcbiAgICAgICAgcXVldWVkUG9pbnRlcnMuc2V0KHBvaW50ZXJJZCwgYWNjdW11bGF0ZU9yQ3JlYXRlQ29udGludW91c1F1ZXVlZFJlcGxheWFibGVFdmVudChxdWV1ZWRQb2ludGVycy5nZXQocG9pbnRlcklkKSB8fCBudWxsLCBibG9ja2VkT24sIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBwb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICBjYXNlICdnb3Rwb2ludGVyY2FwdHVyZSc6XG4gICAgICB7XG4gICAgICAgIHZhciBfcG9pbnRlckV2ZW50ID0gbmF0aXZlRXZlbnQ7XG4gICAgICAgIHZhciBfcG9pbnRlcklkMiA9IF9wb2ludGVyRXZlbnQucG9pbnRlcklkO1xuICAgICAgICBxdWV1ZWRQb2ludGVyQ2FwdHVyZXMuc2V0KF9wb2ludGVySWQyLCBhY2N1bXVsYXRlT3JDcmVhdGVDb250aW51b3VzUXVldWVkUmVwbGF5YWJsZUV2ZW50KHF1ZXVlZFBvaW50ZXJDYXB0dXJlcy5nZXQoX3BvaW50ZXJJZDIpIHx8IG51bGwsIGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIF9wb2ludGVyRXZlbnQpKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIENoZWNrIGlmIHRoaXMgdGFyZ2V0IGlzIHVuYmxvY2tlZC4gUmV0dXJucyB0cnVlIGlmIGl0J3MgdW5ibG9ja2VkLlxuXG5mdW5jdGlvbiBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQocXVldWVkVGFyZ2V0KSB7XG4gIC8vIFRPRE86IFRoaXMgZnVuY3Rpb24gc2hhcmVzIGEgbG90IG9mIGxvZ2ljIHdpdGggYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudC5cbiAgLy8gVHJ5IHRvIHVuaWZ5IHRoZW0uIEl0J3MgYSBiaXQgdHJpY2t5IHNpbmNlIGl0IHdvdWxkIHJlcXVpcmUgdHdvIHJldHVyblxuICAvLyB2YWx1ZXMuXG4gIHZhciB0YXJnZXRJbnN0ID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUocXVldWVkVGFyZ2V0LnRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkICE9PSBudWxsKSB7XG4gICAgICB2YXIgdGFnID0gbmVhcmVzdE1vdW50ZWQudGFnO1xuXG4gICAgICBpZiAodGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBnZXRTdXNwZW5zZUluc3RhbmNlRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSdyZSBibG9ja2VkIG9uIGh5ZHJhdGluZyB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIC8vIEluY3JlYXNlIGl0cyBwcmlvcml0eS5cbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gaW5zdGFuY2U7XG4gICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0UHJpb3JpdHkocXVldWVkVGFyZ2V0LmxhbmVQcmlvcml0eSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShxdWV1ZWRUYXJnZXQucHJpb3JpdHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgYXR0ZW1wdEh5ZHJhdGlvbkF0Q3VycmVudFByaW9yaXR5KG5lYXJlc3RNb3VudGVkKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICBxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID0gZ2V0Q29udGFpbmVyRnJvbUZpYmVyKG5lYXJlc3RNb3VudGVkKTsgLy8gV2UgZG9uJ3QgY3VycmVudGx5IGhhdmUgYSB3YXkgdG8gaW5jcmVhc2UgdGhlIHByaW9yaXR5IG9mXG4gICAgICAgICAgLy8gYSByb290IG90aGVyIHRoYW4gc3luYy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSB7XG4gIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gIT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgdGFyZ2V0Q29udGFpbmVycyA9IHF1ZXVlZEV2ZW50LnRhcmdldENvbnRhaW5lcnM7XG5cbiAgd2hpbGUgKHRhcmdldENvbnRhaW5lcnMubGVuZ3RoID4gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgIHZhciBuZXh0QmxvY2tlZE9uID0gYXR0ZW1wdFRvRGlzcGF0Y2hFdmVudChxdWV1ZWRFdmVudC5kb21FdmVudE5hbWUsIHF1ZXVlZEV2ZW50LmV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgcXVldWVkRXZlbnQubmF0aXZlRXZlbnQpO1xuXG4gICAgaWYgKG5leHRCbG9ja2VkT24gIT09IG51bGwpIHtcbiAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgIHZhciBfZmliZXIzID0gZ2V0SW5zdGFuY2VGcm9tTm9kZShuZXh0QmxvY2tlZE9uKTtcblxuICAgICAgaWYgKF9maWJlcjMgIT09IG51bGwpIHtcbiAgICAgICAgYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24oX2ZpYmVyMyk7XG4gICAgICB9XG5cbiAgICAgIHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9IG5leHRCbG9ja2VkT247XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBUaGlzIHRhcmdldCBjb250YWluZXIgd2FzIHN1Y2Nlc3NmdWxseSBkaXNwYXRjaGVkLiBUcnkgdGhlIG5leHQuXG5cblxuICAgIHRhcmdldENvbnRhaW5lcnMuc2hpZnQoKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50SW5NYXAocXVldWVkRXZlbnQsIGtleSwgbWFwKSB7XG4gIGlmIChhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEV2ZW50KSkge1xuICAgIG1hcC5kZWxldGUoa2V5KTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZXBsYXlVbmJsb2NrZWRFdmVudHMoKSB7XG4gIGhhc1NjaGVkdWxlZFJlcGxheUF0dGVtcHQgPSBmYWxzZTsgLy8gRmlyc3QgcmVwbGF5IGRpc2NyZXRlIGV2ZW50cy5cblxuICB3aGlsZSAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RGlzY3JldGVFdmVudCA9IHF1ZXVlZERpc2NyZXRlRXZlbnRzWzBdO1xuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIC8vIEluY3JlYXNlIHRoZSBwcmlvcml0eSBvZiB0aGlzIGJvdW5kYXJ5IHRvIHVuYmxvY2tcbiAgICAgIC8vIHRoZSBuZXh0IGRpc2NyZXRlIGV2ZW50LlxuICAgICAgdmFyIF9maWJlcjQgPSBnZXRJbnN0YW5jZUZyb21Ob2RlKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbik7XG5cbiAgICAgIGlmIChfZmliZXI0ICE9PSBudWxsKSB7XG4gICAgICAgIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24oX2ZpYmVyNCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciB0YXJnZXRDb250YWluZXJzID0gbmV4dERpc2NyZXRlRXZlbnQudGFyZ2V0Q29udGFpbmVycztcblxuICAgIHdoaWxlICh0YXJnZXRDb250YWluZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB0YXJnZXRDb250YWluZXIgPSB0YXJnZXRDb250YWluZXJzWzBdO1xuICAgICAgdmFyIG5leHRCbG9ja2VkT24gPSBhdHRlbXB0VG9EaXNwYXRjaEV2ZW50KG5leHREaXNjcmV0ZUV2ZW50LmRvbUV2ZW50TmFtZSwgbmV4dERpc2NyZXRlRXZlbnQuZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuZXh0RGlzY3JldGVFdmVudC5uYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChuZXh0QmxvY2tlZE9uICE9PSBudWxsKSB7XG4gICAgICAgIC8vIFdlJ3JlIHN0aWxsIGJsb2NrZWQuIFRyeSBhZ2FpbiBsYXRlci5cbiAgICAgICAgbmV4dERpc2NyZXRlRXZlbnQuYmxvY2tlZE9uID0gbmV4dEJsb2NrZWRPbjtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IC8vIFRoaXMgdGFyZ2V0IGNvbnRhaW5lciB3YXMgc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQuIFRyeSB0aGUgbmV4dC5cblxuXG4gICAgICB0YXJnZXRDb250YWluZXJzLnNoaWZ0KCk7XG4gICAgfVxuXG4gICAgaWYgKG5leHREaXNjcmV0ZUV2ZW50LmJsb2NrZWRPbiA9PT0gbnVsbCkge1xuICAgICAgLy8gV2UndmUgc3VjY2Vzc2Z1bGx5IHJlcGxheWVkIHRoZSBmaXJzdCBldmVudC4gTGV0J3MgdHJ5IHRoZSBuZXh0IG9uZS5cbiAgICAgIHF1ZXVlZERpc2NyZXRlRXZlbnRzLnNoaWZ0KCk7XG4gICAgfVxuICB9IC8vIE5leHQgcmVwbGF5IGFueSBjb250aW51b3VzIGV2ZW50cy5cblxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZEZvY3VzKSkge1xuICAgIHF1ZXVlZEZvY3VzID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsICYmIGF0dGVtcHRSZXBsYXlDb250aW51b3VzUXVldWVkRXZlbnQocXVldWVkRHJhZykpIHtcbiAgICBxdWV1ZWREcmFnID0gbnVsbDtcbiAgfVxuXG4gIGlmIChxdWV1ZWRNb3VzZSAhPT0gbnVsbCAmJiBhdHRlbXB0UmVwbGF5Q29udGludW91c1F1ZXVlZEV2ZW50KHF1ZXVlZE1vdXNlKSkge1xuICAgIHF1ZXVlZE1vdXNlID0gbnVsbDtcbiAgfVxuXG4gIHF1ZXVlZFBvaW50ZXJzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2goYXR0ZW1wdFJlcGxheUNvbnRpbnVvdXNRdWV1ZWRFdmVudEluTWFwKTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZEV2ZW50LCB1bmJsb2NrZWQpIHtcbiAgaWYgKHF1ZXVlZEV2ZW50LmJsb2NrZWRPbiA9PT0gdW5ibG9ja2VkKSB7XG4gICAgcXVldWVkRXZlbnQuYmxvY2tlZE9uID0gbnVsbDtcblxuICAgIGlmICghaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCkge1xuICAgICAgaGFzU2NoZWR1bGVkUmVwbGF5QXR0ZW1wdCA9IHRydWU7IC8vIFNjaGVkdWxlIGEgY2FsbGJhY2sgdG8gYXR0ZW1wdCByZXBsYXlpbmcgYXMgbWFueSBldmVudHMgYXMgYXJlXG4gICAgICAvLyBub3cgdW5ibG9ja2VkLiBUaGlzIGZpcnN0IG1pZ2h0IG5vdCBhY3R1YWxseSBiZSB1bmJsb2NrZWQgeWV0LlxuICAgICAgLy8gV2UgY291bGQgY2hlY2sgaXQgZWFybHkgdG8gYXZvaWQgc2NoZWR1bGluZyBhbiB1bm5lY2Vzc2FyeSBjYWxsYmFjay5cblxuICAgICAgU2NoZWR1bGVyLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2soU2NoZWR1bGVyLnVuc3RhYmxlX05vcm1hbFByaW9yaXR5LCByZXBsYXlVbmJsb2NrZWRFdmVudHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXRyeUlmQmxvY2tlZE9uKHVuYmxvY2tlZCkge1xuICAvLyBNYXJrIGFueXRoaW5nIHRoYXQgd2FzIGJsb2NrZWQgb24gdGhpcyBhcyBubyBsb25nZXIgYmxvY2tlZFxuICAvLyBhbmQgZWxpZ2libGUgZm9yIGEgcmVwbGF5LlxuICBpZiAocXVldWVkRGlzY3JldGVFdmVudHMubGVuZ3RoID4gMCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWREaXNjcmV0ZUV2ZW50c1swXSwgdW5ibG9ja2VkKTsgLy8gVGhpcyBpcyBhIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgZWFjaCBib3VuZGFyeSB0aGF0IGNvbW1pdHMuIEkgdGhpbmsgaXQnc1xuICAgIC8vIHdvcnRoIGl0IGJlY2F1c2Ugd2UgZXhwZWN0IHZlcnkgZmV3IGRpc2NyZXRlIGV2ZW50cyB0byBxdWV1ZSB1cCBhbmQgb25jZVxuICAgIC8vIHdlIGFyZSBhY3R1YWxseSBmdWxseSB1bmJsb2NrZWQgaXQgd2lsbCBiZSBmYXN0IHRvIHJlcGxheSB0aGVtLlxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBxdWV1ZWREaXNjcmV0ZUV2ZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHF1ZXVlZEV2ZW50ID0gcXVldWVkRGlzY3JldGVFdmVudHNbaV07XG5cbiAgICAgIGlmIChxdWV1ZWRFdmVudC5ibG9ja2VkT24gPT09IHVuYmxvY2tlZCkge1xuICAgICAgICBxdWV1ZWRFdmVudC5ibG9ja2VkT24gPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChxdWV1ZWRGb2N1cyAhPT0gbnVsbCkge1xuICAgIHNjaGVkdWxlQ2FsbGJhY2tJZlVuYmxvY2tlZChxdWV1ZWRGb2N1cywgdW5ibG9ja2VkKTtcbiAgfVxuXG4gIGlmIChxdWV1ZWREcmFnICE9PSBudWxsKSB7XG4gICAgc2NoZWR1bGVDYWxsYmFja0lmVW5ibG9ja2VkKHF1ZXVlZERyYWcsIHVuYmxvY2tlZCk7XG4gIH1cblxuICBpZiAocXVldWVkTW91c2UgIT09IG51bGwpIHtcbiAgICBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkTW91c2UsIHVuYmxvY2tlZCk7XG4gIH1cblxuICB2YXIgdW5ibG9jayA9IGZ1bmN0aW9uIChxdWV1ZWRFdmVudCkge1xuICAgIHJldHVybiBzY2hlZHVsZUNhbGxiYWNrSWZVbmJsb2NrZWQocXVldWVkRXZlbnQsIHVuYmxvY2tlZCk7XG4gIH07XG5cbiAgcXVldWVkUG9pbnRlcnMuZm9yRWFjaCh1bmJsb2NrKTtcbiAgcXVldWVkUG9pbnRlckNhcHR1cmVzLmZvckVhY2godW5ibG9jayk7XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHF1ZXVlZEV4cGxpY2l0SHlkcmF0aW9uVGFyZ2V0cy5sZW5ndGg7IF9pKyspIHtcbiAgICB2YXIgcXVldWVkVGFyZ2V0ID0gcXVldWVkRXhwbGljaXRIeWRyYXRpb25UYXJnZXRzW19pXTtcblxuICAgIGlmIChxdWV1ZWRUYXJnZXQuYmxvY2tlZE9uID09PSB1bmJsb2NrZWQpIHtcbiAgICAgIHF1ZXVlZFRhcmdldC5ibG9ja2VkT24gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHdoaWxlIChxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMubGVuZ3RoID4gMCkge1xuICAgIHZhciBuZXh0RXhwbGljaXRUYXJnZXQgPSBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHNbMF07XG5cbiAgICBpZiAobmV4dEV4cGxpY2l0VGFyZ2V0LmJsb2NrZWRPbiAhPT0gbnVsbCkge1xuICAgICAgLy8gV2UncmUgc3RpbGwgYmxvY2tlZC5cbiAgICAgIGJyZWFrO1xuICAgIH0gZWxzZSB7XG4gICAgICBhdHRlbXB0RXhwbGljaXRIeWRyYXRpb25UYXJnZXQobmV4dEV4cGxpY2l0VGFyZ2V0KTtcblxuICAgICAgaWYgKG5leHRFeHBsaWNpdFRhcmdldC5ibG9ja2VkT24gPT09IG51bGwpIHtcbiAgICAgICAgLy8gV2UncmUgdW5ibG9ja2VkLlxuICAgICAgICBxdWV1ZWRFeHBsaWNpdEh5ZHJhdGlvblRhcmdldHMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIERpc2NyZXRlRXZlbnQgPSAwO1xudmFyIFVzZXJCbG9ja2luZ0V2ZW50ID0gMTtcbnZhciBDb250aW51b3VzRXZlbnQgPSAyO1xuXG4vKipcbiAqIEdlbmVyYXRlIGEgbWFwcGluZyBvZiBzdGFuZGFyZCB2ZW5kb3IgcHJlZml4ZXMgdXNpbmcgdGhlIGRlZmluZWQgc3R5bGUgcHJvcGVydHkgYW5kIGV2ZW50IG5hbWUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0eWxlUHJvcFxuICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50TmFtZVxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBtYWtlUHJlZml4TWFwKHN0eWxlUHJvcCwgZXZlbnROYW1lKSB7XG4gIHZhciBwcmVmaXhlcyA9IHt9O1xuICBwcmVmaXhlc1tzdHlsZVByb3AudG9Mb3dlckNhc2UoKV0gPSBldmVudE5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcHJlZml4ZXNbJ1dlYmtpdCcgKyBzdHlsZVByb3BdID0gJ3dlYmtpdCcgKyBldmVudE5hbWU7XG4gIHByZWZpeGVzWydNb3onICsgc3R5bGVQcm9wXSA9ICdtb3onICsgZXZlbnROYW1lO1xuICByZXR1cm4gcHJlZml4ZXM7XG59XG4vKipcbiAqIEEgbGlzdCBvZiBldmVudCBuYW1lcyB0byBhIGNvbmZpZ3VyYWJsZSBsaXN0IG9mIHZlbmRvciBwcmVmaXhlcy5cbiAqL1xuXG5cbnZhciB2ZW5kb3JQcmVmaXhlcyA9IHtcbiAgYW5pbWF0aW9uZW5kOiBtYWtlUHJlZml4TWFwKCdBbmltYXRpb24nLCAnQW5pbWF0aW9uRW5kJyksXG4gIGFuaW1hdGlvbml0ZXJhdGlvbjogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvbkl0ZXJhdGlvbicpLFxuICBhbmltYXRpb25zdGFydDogbWFrZVByZWZpeE1hcCgnQW5pbWF0aW9uJywgJ0FuaW1hdGlvblN0YXJ0JyksXG4gIHRyYW5zaXRpb25lbmQ6IG1ha2VQcmVmaXhNYXAoJ1RyYW5zaXRpb24nLCAnVHJhbnNpdGlvbkVuZCcpXG59O1xuLyoqXG4gKiBFdmVudCBuYW1lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRldGVjdGVkIGFuZCBwcmVmaXhlZCAoaWYgYXBwbGljYWJsZSkuXG4gKi9cblxudmFyIHByZWZpeGVkRXZlbnROYW1lcyA9IHt9O1xuLyoqXG4gKiBFbGVtZW50IHRvIGNoZWNrIGZvciBwcmVmaXhlcyBvbi5cbiAqL1xuXG52YXIgc3R5bGUgPSB7fTtcbi8qKlxuICogQm9vdHN0cmFwIGlmIGEgRE9NIGV4aXN0cy5cbiAqL1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jykuc3R5bGU7IC8vIE9uIHNvbWUgcGxhdGZvcm1zLCBpbiBwYXJ0aWN1bGFyIHNvbWUgcmVsZWFzZXMgb2YgQW5kcm9pZCA0LngsXG4gIC8vIHRoZSB1bi1wcmVmaXhlZCBcImFuaW1hdGlvblwiIGFuZCBcInRyYW5zaXRpb25cIiBwcm9wZXJ0aWVzIGFyZSBkZWZpbmVkIG9uIHRoZVxuICAvLyBzdHlsZSBvYmplY3QgYnV0IHRoZSBldmVudHMgdGhhdCBmaXJlIHdpbGwgc3RpbGwgYmUgcHJlZml4ZWQsIHNvIHdlIG5lZWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlIHVuLXByZWZpeGVkIGV2ZW50cyBhcmUgdXNhYmxlLCBhbmQgaWYgbm90IHJlbW92ZSB0aGVtIGZyb20gdGhlIG1hcC5cblxuICBpZiAoISgnQW5pbWF0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uZW5kLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbjtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMuYW5pbWF0aW9uc3RhcnQuYW5pbWF0aW9uO1xuICB9IC8vIFNhbWUgYXMgYWJvdmVcblxuXG4gIGlmICghKCdUcmFuc2l0aW9uRXZlbnQnIGluIHdpbmRvdykpIHtcbiAgICBkZWxldGUgdmVuZG9yUHJlZml4ZXMudHJhbnNpdGlvbmVuZC50cmFuc2l0aW9uO1xuICB9XG59XG4vKipcbiAqIEF0dGVtcHRzIHRvIGRldGVybWluZSB0aGUgY29ycmVjdCB2ZW5kb3IgcHJlZml4ZWQgZXZlbnQgbmFtZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnROYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0VmVuZG9yUHJlZml4ZWRFdmVudE5hbWUoZXZlbnROYW1lKSB7XG4gIGlmIChwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBwcmVmaXhlZEV2ZW50TmFtZXNbZXZlbnROYW1lXTtcbiAgfSBlbHNlIGlmICghdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXSkge1xuICAgIHJldHVybiBldmVudE5hbWU7XG4gIH1cblxuICB2YXIgcHJlZml4TWFwID0gdmVuZG9yUHJlZml4ZXNbZXZlbnROYW1lXTtcblxuICBmb3IgKHZhciBzdHlsZVByb3AgaW4gcHJlZml4TWFwKSB7XG4gICAgaWYgKHByZWZpeE1hcC5oYXNPd25Qcm9wZXJ0eShzdHlsZVByb3ApICYmIHN0eWxlUHJvcCBpbiBzdHlsZSkge1xuICAgICAgcmV0dXJuIHByZWZpeGVkRXZlbnROYW1lc1tldmVudE5hbWVdID0gcHJlZml4TWFwW3N0eWxlUHJvcF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV2ZW50TmFtZTtcbn1cblxudmFyIEFOSU1BVElPTl9FTkQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uZW5kJyk7XG52YXIgQU5JTUFUSU9OX0lURVJBVElPTiA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCdhbmltYXRpb25pdGVyYXRpb24nKTtcbnZhciBBTklNQVRJT05fU1RBUlQgPSBnZXRWZW5kb3JQcmVmaXhlZEV2ZW50TmFtZSgnYW5pbWF0aW9uc3RhcnQnKTtcbnZhciBUUkFOU0lUSU9OX0VORCA9IGdldFZlbmRvclByZWZpeGVkRXZlbnROYW1lKCd0cmFuc2l0aW9uZW5kJyk7XG5cbnZhciB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoKTtcbnZhciBldmVudFByaW9yaXRpZXMgPSBuZXcgTWFwKCk7IC8vIFdlIHN0b3JlIG1vc3Qgb2YgdGhlIGV2ZW50cyBpbiB0aGlzIG1vZHVsZSBpbiBwYWlycyBvZiB0d28gc3RyaW5ncyBzbyB3ZSBjYW4gcmUtdXNlXG4vLyB0aGUgY29kZSByZXF1aXJlZCB0byBhcHBseSB0aGUgc2FtZSBsb2dpYyBmb3IgZXZlbnQgcHJpb3JpdGl6YXRpb24gYW5kIHRoYXQgb2YgdGhlXG4vLyBTaW1wbGVFdmVudFBsdWdpbi4gVGhpcyBjb21wbGljYXRlcyB0aGluZ3Mgc2xpZ2h0bHksIGJ1dCB0aGUgYWltIGlzIHRvIHJlZHVjZSBjb2RlXG4vLyBkdXBsaWNhdGlvbiAoZm9yIHdoaWNoIHRoZXJlIHdvdWxkIGJlIHF1aXRlIGEgYml0KS4gRm9yIHRoZSBldmVudHMgdGhhdCBhcmUgbm90IG5lZWRlZFxuLy8gZm9yIHRoZSBTaW1wbGVFdmVudFBsdWdpbiAob3RoZXJEaXNjcmV0ZUV2ZW50cykgd2UgcHJvY2VzcyB0aGVtIHNlcGFyYXRlbHkgYXMgYW5cbi8vIGFycmF5IG9mIHRvcCBsZXZlbCBldmVudHMuXG4vLyBMYXN0bHksIHdlIGlnbm9yZSBwcmV0dGllciBzbyB3ZSBjYW4ga2VlcCB0aGUgZm9ybWF0dGluZyBzYW5lLlxuLy8gcHJldHRpZXItaWdub3JlXG5cbnZhciBkaXNjcmV0ZUV2ZW50UGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiA9IFsnY2FuY2VsJywgJ2NhbmNlbCcsICdjbGljaycsICdjbGljaycsICdjbG9zZScsICdjbG9zZScsICdjb250ZXh0bWVudScsICdjb250ZXh0TWVudScsICdjb3B5JywgJ2NvcHknLCAnY3V0JywgJ2N1dCcsICdhdXhjbGljaycsICdhdXhDbGljaycsICdkYmxjbGljaycsICdkb3VibGVDbGljaycsIC8vIENhcmVmdWwhXG4nZHJhZ2VuZCcsICdkcmFnRW5kJywgJ2RyYWdzdGFydCcsICdkcmFnU3RhcnQnLCAnZHJvcCcsICdkcm9wJywgJ2ZvY3VzaW4nLCAnZm9jdXMnLCAvLyBDYXJlZnVsIVxuJ2ZvY3Vzb3V0JywgJ2JsdXInLCAvLyBDYXJlZnVsIVxuJ2lucHV0JywgJ2lucHV0JywgJ2ludmFsaWQnLCAnaW52YWxpZCcsICdrZXlkb3duJywgJ2tleURvd24nLCAna2V5cHJlc3MnLCAna2V5UHJlc3MnLCAna2V5dXAnLCAna2V5VXAnLCAnbW91c2Vkb3duJywgJ21vdXNlRG93bicsICdtb3VzZXVwJywgJ21vdXNlVXAnLCAncGFzdGUnLCAncGFzdGUnLCAncGF1c2UnLCAncGF1c2UnLCAncGxheScsICdwbGF5JywgJ3BvaW50ZXJjYW5jZWwnLCAncG9pbnRlckNhbmNlbCcsICdwb2ludGVyZG93bicsICdwb2ludGVyRG93bicsICdwb2ludGVydXAnLCAncG9pbnRlclVwJywgJ3JhdGVjaGFuZ2UnLCAncmF0ZUNoYW5nZScsICdyZXNldCcsICdyZXNldCcsICdzZWVrZWQnLCAnc2Vla2VkJywgJ3N1Ym1pdCcsICdzdWJtaXQnLCAndG91Y2hjYW5jZWwnLCAndG91Y2hDYW5jZWwnLCAndG91Y2hlbmQnLCAndG91Y2hFbmQnLCAndG91Y2hzdGFydCcsICd0b3VjaFN0YXJ0JywgJ3ZvbHVtZWNoYW5nZScsICd2b2x1bWVDaGFuZ2UnXTtcbnZhciBvdGhlckRpc2NyZXRlRXZlbnRzID0gWydjaGFuZ2UnLCAnc2VsZWN0aW9uY2hhbmdlJywgJ3RleHRJbnB1dCcsICdjb21wb3NpdGlvbnN0YXJ0JywgJ2NvbXBvc2l0aW9uZW5kJywgJ2NvbXBvc2l0aW9udXBkYXRlJ107XG5cblxudmFyIHVzZXJCbG9ja2luZ1BhaXJzRm9yU2ltcGxlRXZlbnRQbHVnaW4gPSBbJ2RyYWcnLCAnZHJhZycsICdkcmFnZW50ZXInLCAnZHJhZ0VudGVyJywgJ2RyYWdleGl0JywgJ2RyYWdFeGl0JywgJ2RyYWdsZWF2ZScsICdkcmFnTGVhdmUnLCAnZHJhZ292ZXInLCAnZHJhZ092ZXInLCAnbW91c2Vtb3ZlJywgJ21vdXNlTW92ZScsICdtb3VzZW91dCcsICdtb3VzZU91dCcsICdtb3VzZW92ZXInLCAnbW91c2VPdmVyJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJNb3ZlJywgJ3BvaW50ZXJvdXQnLCAncG9pbnRlck91dCcsICdwb2ludGVyb3ZlcicsICdwb2ludGVyT3ZlcicsICdzY3JvbGwnLCAnc2Nyb2xsJywgJ3RvZ2dsZScsICd0b2dnbGUnLCAndG91Y2htb3ZlJywgJ3RvdWNoTW92ZScsICd3aGVlbCcsICd3aGVlbCddOyAvLyBwcmV0dGllci1pZ25vcmVcblxudmFyIGNvbnRpbnVvdXNQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luID0gWydhYm9ydCcsICdhYm9ydCcsIEFOSU1BVElPTl9FTkQsICdhbmltYXRpb25FbmQnLCBBTklNQVRJT05fSVRFUkFUSU9OLCAnYW5pbWF0aW9uSXRlcmF0aW9uJywgQU5JTUFUSU9OX1NUQVJULCAnYW5pbWF0aW9uU3RhcnQnLCAnY2FucGxheScsICdjYW5QbGF5JywgJ2NhbnBsYXl0aHJvdWdoJywgJ2NhblBsYXlUaHJvdWdoJywgJ2R1cmF0aW9uY2hhbmdlJywgJ2R1cmF0aW9uQ2hhbmdlJywgJ2VtcHRpZWQnLCAnZW1wdGllZCcsICdlbmNyeXB0ZWQnLCAnZW5jcnlwdGVkJywgJ2VuZGVkJywgJ2VuZGVkJywgJ2Vycm9yJywgJ2Vycm9yJywgJ2dvdHBvaW50ZXJjYXB0dXJlJywgJ2dvdFBvaW50ZXJDYXB0dXJlJywgJ2xvYWQnLCAnbG9hZCcsICdsb2FkZWRkYXRhJywgJ2xvYWRlZERhdGEnLCAnbG9hZGVkbWV0YWRhdGEnLCAnbG9hZGVkTWV0YWRhdGEnLCAnbG9hZHN0YXJ0JywgJ2xvYWRTdGFydCcsICdsb3N0cG9pbnRlcmNhcHR1cmUnLCAnbG9zdFBvaW50ZXJDYXB0dXJlJywgJ3BsYXlpbmcnLCAncGxheWluZycsICdwcm9ncmVzcycsICdwcm9ncmVzcycsICdzZWVraW5nJywgJ3NlZWtpbmcnLCAnc3RhbGxlZCcsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAnc3VzcGVuZCcsICd0aW1ldXBkYXRlJywgJ3RpbWVVcGRhdGUnLCBUUkFOU0lUSU9OX0VORCwgJ3RyYW5zaXRpb25FbmQnLCAnd2FpdGluZycsICd3YWl0aW5nJ107XG4vKipcbiAqIFR1cm5zXG4gKiBbJ2Fib3J0JywgLi4uXVxuICpcbiAqIGludG9cbiAqXG4gKiB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcyA9IG5ldyBNYXAoW1xuICogICBbJ2Fib3J0JywgJ29uQWJvcnQnXSxcbiAqIF0pO1xuICpcbiAqIGFuZCByZWdpc3RlcnMgdGhlbS5cbiAqL1xuXG5mdW5jdGlvbiByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhldmVudFR5cGVzLCBwcmlvcml0eSkge1xuICAvLyBBcyB0aGUgZXZlbnQgdHlwZXMgYXJlIGluIHBhaXJzIG9mIHR3bywgd2UgbmVlZCB0byBpdGVyYXRlXG4gIC8vIHRocm91Z2ggaW4gdHdvcy4gVGhlIGV2ZW50cyBhcmUgaW4gcGFpcnMgb2YgdHdvIHRvIHNhdmUgY29kZVxuICAvLyBhbmQgaW1wcm92ZSBpbml0IHBlcmYgb2YgcHJvY2Vzc2luZyB0aGlzIGFycmF5LCBhcyBpdCB3aWxsXG4gIC8vIHJlc3VsdCBpbiBmYXIgZmV3ZXIgb2JqZWN0IGFsbG9jYXRpb25zIGFuZCBwcm9wZXJ0eSBhY2Nlc3Nlc1xuICAvLyBpZiB3ZSBvbmx5IHVzZSB0aHJlZSBhcnJheXMgdG8gcHJvY2VzcyBhbGwgdGhlIGNhdGVnb3JpZXMgb2ZcbiAgLy8gaW5zdGVhZCBvZiB0dXBsZXMuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHZhciB0b3BFdmVudCA9IGV2ZW50VHlwZXNbaV07XG4gICAgdmFyIGV2ZW50ID0gZXZlbnRUeXBlc1tpICsgMV07XG4gICAgdmFyIGNhcGl0YWxpemVkRXZlbnQgPSBldmVudFswXS50b1VwcGVyQ2FzZSgpICsgZXZlbnQuc2xpY2UoMSk7XG4gICAgdmFyIHJlYWN0TmFtZSA9ICdvbicgKyBjYXBpdGFsaXplZEV2ZW50O1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQodG9wRXZlbnQsIHByaW9yaXR5KTtcbiAgICB0b3BMZXZlbEV2ZW50c1RvUmVhY3ROYW1lcy5zZXQodG9wRXZlbnQsIHJlYWN0TmFtZSk7XG4gICAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KHJlYWN0TmFtZSwgW3RvcEV2ZW50XSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0RXZlbnRQcmlvcml0aWVzKGV2ZW50VHlwZXMsIHByaW9yaXR5KSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZXZlbnRUeXBlcy5sZW5ndGg7IGkrKykge1xuICAgIGV2ZW50UHJpb3JpdGllcy5zZXQoZXZlbnRUeXBlc1tpXSwgcHJpb3JpdHkpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50UHJpb3JpdHlGb3JQbHVnaW5TeXN0ZW0oZG9tRXZlbnROYW1lKSB7XG4gIHZhciBwcmlvcml0eSA9IGV2ZW50UHJpb3JpdGllcy5nZXQoZG9tRXZlbnROYW1lKTsgLy8gRGVmYXVsdCB0byBhIENvbnRpbnVvdXNFdmVudC4gTm90ZTogd2UgbWlnaHRcbiAgLy8gd2FudCB0byB3YXJuIGlmIHdlIGNhbid0IGRldGVjdCB0aGUgcHJpb3JpdHlcbiAgLy8gZm9yIHRoZSBldmVudC5cblxuICByZXR1cm4gcHJpb3JpdHkgPT09IHVuZGVmaW5lZCA/IENvbnRpbnVvdXNFdmVudCA6IHByaW9yaXR5O1xufVxuZnVuY3Rpb24gcmVnaXN0ZXJTaW1wbGVFdmVudHMoKSB7XG4gIHJlZ2lzdGVyU2ltcGxlUGx1Z2luRXZlbnRzQW5kU2V0VGhlaXJQcmlvcml0aWVzKGRpc2NyZXRlRXZlbnRQYWlyc0ZvclNpbXBsZUV2ZW50UGx1Z2luLCBEaXNjcmV0ZUV2ZW50KTtcbiAgcmVnaXN0ZXJTaW1wbGVQbHVnaW5FdmVudHNBbmRTZXRUaGVpclByaW9yaXRpZXModXNlckJsb2NraW5nUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgVXNlckJsb2NraW5nRXZlbnQpO1xuICByZWdpc3RlclNpbXBsZVBsdWdpbkV2ZW50c0FuZFNldFRoZWlyUHJpb3JpdGllcyhjb250aW51b3VzUGFpcnNGb3JTaW1wbGVFdmVudFBsdWdpbiwgQ29udGludW91c0V2ZW50KTtcbiAgc2V0RXZlbnRQcmlvcml0aWVzKG90aGVyRGlzY3JldGVFdmVudHMsIERpc2NyZXRlRXZlbnQpO1xufVxuXG52YXIgU2NoZWR1bGVyX25vdyA9IFNjaGVkdWxlci51bnN0YWJsZV9ub3c7XG5cbntcbiAgLy8gUHJvdmlkZSBleHBsaWNpdCBlcnJvciBtZXNzYWdlIHdoZW4gcHJvZHVjdGlvbitwcm9maWxpbmcgYnVuZGxlIG9mIGUuZy5cbiAgLy8gcmVhY3QtZG9tIGlzIHVzZWQgd2l0aCBwcm9kdWN0aW9uIChub24tcHJvZmlsaW5nKSBidW5kbGUgb2ZcbiAgLy8gc2NoZWR1bGVyL3RyYWNpbmdcbiAgaWYgKCEodHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZiAhPSBudWxsICYmIHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCAhPSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkl0IGlzIG5vdCBzdXBwb3J0ZWQgdG8gcnVuIHRoZSBwcm9maWxpbmcgdmVyc2lvbiBvZiBhIHJlbmRlcmVyIChmb3IgZXhhbXBsZSwgYHJlYWN0LWRvbS9wcm9maWxpbmdgKSB3aXRob3V0IGFsc28gcmVwbGFjaW5nIHRoZSBgc2NoZWR1bGVyL3RyYWNpbmdgIG1vZHVsZSB3aXRoIGBzY2hlZHVsZXIvdHJhY2luZy1wcm9maWxpbmdgLiBZb3VyIGJ1bmRsZXIgbWlnaHQgaGF2ZSBhIHNldHRpbmcgZm9yIGFsaWFzaW5nIGJvdGggbW9kdWxlcy4gTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcHJvZmlsaW5nXCIgKTtcbiAgICB9XG4gIH1cbn1cbi8vIGFzY2VuZGluZyBudW1iZXJzIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gbGlrZSBudW1iZXJzLiBUaGV5IHN0YXJ0IGF0IDkwIHRvXG4vLyBhdm9pZCBjbGFzaGluZyB3aXRoIFNjaGVkdWxlcidzIHByaW9yaXRpZXMuXG5cbnZhciBJbW1lZGlhdGVQcmlvcml0eSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gOTg7XG52YXIgTm9ybWFsUHJpb3JpdHkgPSA5NztcbnZhciBMb3dQcmlvcml0eSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSA9IDk1OyAvLyBOb1ByaW9yaXR5IGlzIHRoZSBhYnNlbmNlIG9mIHByaW9yaXR5LiBBbHNvIFJlYWN0LW9ubHkuXG5cbnZhciBOb1ByaW9yaXR5ID0gOTA7XG52YXIgaW5pdGlhbFRpbWVNcyA9IFNjaGVkdWxlcl9ub3coKTsgLy8gSWYgdGhlIGluaXRpYWwgdGltZXN0YW1wIGlzIHJlYXNvbmFibHkgc21hbGwsIHVzZSBTY2hlZHVsZXIncyBgbm93YCBkaXJlY3RseS5cblxudmFyIFN5bmNMYW5lUHJpb3JpdHkgPSAxNTtcbnZhciBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSA9IDE0O1xudmFyIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAxMztcbnZhciBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5ID0gMTI7XG52YXIgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5ID0gMTE7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5ID0gMTA7XG52YXIgRGVmYXVsdEh5ZHJhdGlvbkxhbmVQcmlvcml0eSA9IDk7XG52YXIgRGVmYXVsdExhbmVQcmlvcml0eSA9IDg7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvblByaW9yaXR5ID0gNztcbnZhciBUcmFuc2l0aW9uUHJpb3JpdHkgPSA2O1xudmFyIFJldHJ5TGFuZVByaW9yaXR5ID0gNTtcbnZhciBTZWxlY3RpdmVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSA0O1xudmFyIElkbGVIeWRyYXRpb25MYW5lUHJpb3JpdHkgPSAzO1xudmFyIElkbGVMYW5lUHJpb3JpdHkgPSAyO1xudmFyIE9mZnNjcmVlbkxhbmVQcmlvcml0eSA9IDE7XG52YXIgTm9MYW5lUHJpb3JpdHkgPSAwO1xudmFyIFRvdGFsTGFuZXMgPSAzMTtcbnZhciBOb0xhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjA7XG52YXIgTm9MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuMDtcbnZhciBTeW5jTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4xO1xudmFyIFN5bmNCYXRjaGVkTGFuZSA9XG4vKiAgICAgICAgICAgICAgICAgKi9cbjI7XG52YXIgSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAqL1xuNDtcbnZhciBJbnB1dERpc2NyZXRlTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgICovXG4yNDtcbnZhciBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAqL1xuMzI7XG52YXIgSW5wdXRDb250aW51b3VzTGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAqL1xuMTkyO1xudmFyIERlZmF1bHRIeWRyYXRpb25MYW5lID1cbi8qICAgICAgICAgICAgKi9cbjI1NjtcbnZhciBEZWZhdWx0TGFuZXMgPVxuLyogICAgICAgICAgICAgICAgICAgKi9cbjM1ODQ7XG52YXIgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAgKi9cbjQwOTY7XG52YXIgVHJhbnNpdGlvbkxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuNDE4NjExMjtcbnZhciBSZXRyeUxhbmVzID1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG42MjkxNDU2MDtcbnZhciBTb21lUmV0cnlMYW5lID1cbi8qICAgICAgICAgICAgICAgICAgKi9cbjMzNTU0NDMyO1xudmFyIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgKi9cbjY3MTA4ODY0O1xudmFyIE5vbklkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4xMzQyMTc3Mjc7XG52YXIgSWRsZUh5ZHJhdGlvbkxhbmUgPVxuLyogICAgICAgICAgICAgICAqL1xuMTM0MjE3NzI4O1xudmFyIElkbGVMYW5lcyA9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbjgwNTMwNjM2ODtcbnZhciBPZmZzY3JlZW5MYW5lID1cbi8qICAgICAgICAgICAgICAgICAgICovXG4xMDczNzQxODI0O1xudmFyIE5vVGltZXN0YW1wID0gLTE7XG5mdW5jdGlvbiBzZXRDdXJyZW50VXBkYXRlTGFuZVByaW9yaXR5KG5ld0xhbmVQcmlvcml0eSkge1xufSAvLyBcIlJlZ2lzdGVyc1wiIHVzZWQgdG8gXCJyZXR1cm5cIiBtdWx0aXBsZSB2YWx1ZXNcbi8vIFVzZWQgYnkgZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMgYW5kIGdldE5leHRMYW5lczpcblxudmFyIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gRGVmYXVsdExhbmVQcmlvcml0eTtcblxuZnVuY3Rpb24gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobGFuZXMpIHtcbiAgaWYgKChTeW5jTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gU3luY0xhbmU7XG4gIH1cblxuICBpZiAoKFN5bmNCYXRjaGVkTGFuZSAmIGxhbmVzKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIFN5bmNCYXRjaGVkTGFuZTtcbiAgfVxuXG4gIGlmICgoSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmUgJiBsYW5lcykgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0RGlzY3JldGVMYW5lcyA9IElucHV0RGlzY3JldGVMYW5lcyAmIGxhbmVzO1xuXG4gIGlmIChpbnB1dERpc2NyZXRlTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIGlucHV0RGlzY3JldGVMYW5lcztcbiAgfVxuXG4gIGlmICgobGFuZXMgJiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBJbnB1dENvbnRpbnVvdXNIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIGlucHV0Q29udGludW91c0xhbmVzID0gSW5wdXRDb250aW51b3VzTGFuZXMgJiBsYW5lcztcblxuICBpZiAoaW5wdXRDb250aW51b3VzTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaW5wdXRDb250aW51b3VzTGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgRGVmYXVsdEh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBEZWZhdWx0SHlkcmF0aW9uTGFuZTtcbiAgfVxuXG4gIHZhciBkZWZhdWx0TGFuZXMgPSBEZWZhdWx0TGFuZXMgJiBsYW5lcztcblxuICBpZiAoZGVmYXVsdExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBEZWZhdWx0TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBkZWZhdWx0TGFuZXM7XG4gIH1cblxuICBpZiAoKGxhbmVzICYgVHJhbnNpdGlvbkh5ZHJhdGlvbkxhbmUpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBUcmFuc2l0aW9uSHlkcmF0aW9uUHJpb3JpdHk7XG4gICAgcmV0dXJuIFRyYW5zaXRpb25IeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25MYW5lcyA9IFRyYW5zaXRpb25MYW5lcyAmIGxhbmVzO1xuXG4gIGlmICh0cmFuc2l0aW9uTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFRyYW5zaXRpb25Qcmlvcml0eTtcbiAgICByZXR1cm4gdHJhbnNpdGlvbkxhbmVzO1xuICB9XG5cbiAgdmFyIHJldHJ5TGFuZXMgPSBSZXRyeUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKHJldHJ5TGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IFJldHJ5TGFuZVByaW9yaXR5O1xuICAgIHJldHVybiByZXRyeUxhbmVzO1xuICB9XG5cbiAgaWYgKGxhbmVzICYgU2VsZWN0aXZlSHlkcmF0aW9uTGFuZSkge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZVByaW9yaXR5O1xuICAgIHJldHVybiBTZWxlY3RpdmVIeWRyYXRpb25MYW5lO1xuICB9XG5cbiAgaWYgKChsYW5lcyAmIElkbGVIeWRyYXRpb25MYW5lKSAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gSWRsZUh5ZHJhdGlvbkxhbmU7XG4gIH1cblxuICB2YXIgaWRsZUxhbmVzID0gSWRsZUxhbmVzICYgbGFuZXM7XG5cbiAgaWYgKGlkbGVMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gSWRsZUxhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gaWRsZUxhbmVzO1xuICB9XG5cbiAgaWYgKChPZmZzY3JlZW5MYW5lICYgbGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBPZmZzY3JlZW5MYW5lUHJpb3JpdHk7XG4gICAgcmV0dXJuIE9mZnNjcmVlbkxhbmU7XG4gIH1cblxuICB7XG4gICAgZXJyb3IoJ1Nob3VsZCBoYXZlIGZvdW5kIG1hdGNoaW5nIGxhbmVzLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICB9IC8vIFRoaXMgc2hvdWxkbid0IGJlIHJlYWNoYWJsZSwgYnV0IGFzIGEgZmFsbGJhY2ssIHJldHVybiB0aGUgZW50aXJlIGJpdG1hc2suXG5cblxuICByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eSA9IERlZmF1bHRMYW5lUHJpb3JpdHk7XG4gIHJldHVybiBsYW5lcztcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAoc2NoZWR1bGVyUHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0xhbmVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICBjYXNlIExvd1ByaW9yaXR5OlxuICAgICAgLy8gVE9ETzogSGFuZGxlIExvd1NjaGVkdWxlclByaW9yaXR5LCBzb21laG93LiBNYXliZSB0aGUgc2FtZSBsYW5lIGFzIGh5ZHJhdGlvbi5cbiAgICAgIHJldHVybiBEZWZhdWx0TGFuZVByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSWRsZUxhbmVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gTm9MYW5lUHJpb3JpdHk7XG4gIH1cbn1cbmZ1bmN0aW9uIGxhbmVQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkobGFuZVByaW9yaXR5KSB7XG4gIHN3aXRjaCAobGFuZVByaW9yaXR5KSB7XG4gICAgY2FzZSBTeW5jTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gSW1tZWRpYXRlUHJpb3JpdHk7XG5cbiAgICBjYXNlIElucHV0RGlzY3JldGVIeWRyYXRpb25MYW5lUHJpb3JpdHk6XG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuXG4gICAgY2FzZSBEZWZhdWx0SHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgRGVmYXVsdExhbmVQcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25IeWRyYXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTpcbiAgICBjYXNlIFNlbGVjdGl2ZUh5ZHJhdGlvbkxhbmVQcmlvcml0eTpcbiAgICBjYXNlIFJldHJ5TGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBJZGxlSHlkcmF0aW9uTGFuZVByaW9yaXR5OlxuICAgIGNhc2UgSWRsZUxhbmVQcmlvcml0eTpcbiAgICBjYXNlIE9mZnNjcmVlbkxhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJZGxlUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vTGFuZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vUHJpb3JpdHk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiSW52YWxpZCB1cGRhdGUgcHJpb3JpdHk6IFwiICsgbGFuZVByaW9yaXR5ICsgXCIuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cbmZ1bmN0aW9uIGdldE5leHRMYW5lcyhyb290LCB3aXBMYW5lcykge1xuICAvLyBFYXJseSBiYWlsb3V0IGlmIHRoZXJlJ3Mgbm8gcGVuZGluZyB3b3JrIGxlZnQuXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcblxuICBpZiAocGVuZGluZ0xhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICByZXR1cm4gTm9MYW5lcztcbiAgfVxuXG4gIHZhciBuZXh0TGFuZXMgPSBOb0xhbmVzO1xuICB2YXIgbmV4dExhbmVQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB2YXIgZXhwaXJlZExhbmVzID0gcm9vdC5leHBpcmVkTGFuZXM7XG4gIHZhciBzdXNwZW5kZWRMYW5lcyA9IHJvb3Quc3VzcGVuZGVkTGFuZXM7XG4gIHZhciBwaW5nZWRMYW5lcyA9IHJvb3QucGluZ2VkTGFuZXM7IC8vIENoZWNrIGlmIGFueSB3b3JrIGhhcyBleHBpcmVkLlxuXG4gIGlmIChleHBpcmVkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICBuZXh0TGFuZXMgPSBleHBpcmVkTGFuZXM7XG4gICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gU3luY0xhbmVQcmlvcml0eTtcbiAgfSBlbHNlIHtcbiAgICAvLyBEbyBub3Qgd29yayBvbiBhbnkgaWRsZSB3b3JrIHVudGlsIGFsbCB0aGUgbm9uLWlkbGUgd29yayBoYXMgZmluaXNoZWQsXG4gICAgLy8gZXZlbiBpZiB0aGUgd29yayBpcyBzdXNwZW5kZWQuXG4gICAgdmFyIG5vbklkbGVQZW5kaW5nTGFuZXMgPSBwZW5kaW5nTGFuZXMgJiBOb25JZGxlTGFuZXM7XG5cbiAgICBpZiAobm9uSWRsZVBlbmRpbmdMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgdmFyIG5vbklkbGVVbmJsb2NrZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiB+c3VzcGVuZGVkTGFuZXM7XG5cbiAgICAgIGlmIChub25JZGxlVW5ibG9ja2VkTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIG5vbklkbGVQaW5nZWRMYW5lcyA9IG5vbklkbGVQZW5kaW5nTGFuZXMgJiBwaW5nZWRMYW5lcztcblxuICAgICAgICBpZiAobm9uSWRsZVBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMobm9uSWRsZVBpbmdlZExhbmVzKTtcbiAgICAgICAgICBuZXh0TGFuZVByaW9yaXR5ID0gcmV0dXJuX2hpZ2hlc3RMYW5lUHJpb3JpdHk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIG9ubHkgcmVtYWluaW5nIHdvcmsgaXMgSWRsZS5cbiAgICAgIHZhciB1bmJsb2NrZWRMYW5lcyA9IHBlbmRpbmdMYW5lcyAmIH5zdXNwZW5kZWRMYW5lcztcblxuICAgICAgaWYgKHVuYmxvY2tlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIG5leHRMYW5lcyA9IGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKHVuYmxvY2tlZExhbmVzKTtcbiAgICAgICAgbmV4dExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHBpbmdlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgICAgbmV4dExhbmVzID0gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZXMocGluZ2VkTGFuZXMpO1xuICAgICAgICAgIG5leHRMYW5lUHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChuZXh0TGFuZXMgPT09IE5vTGFuZXMpIHtcbiAgICAvLyBUaGlzIHNob3VsZCBvbmx5IGJlIHJlYWNoYWJsZSBpZiB3ZSdyZSBzdXNwZW5kZWRcbiAgICAvLyBUT0RPOiBDb25zaWRlciB3YXJuaW5nIGluIHRoaXMgcGF0aCBpZiBhIGZhbGxiYWNrIHRpbWVyIGlzIG5vdCBzY2hlZHVsZWQuXG4gICAgcmV0dXJuIE5vTGFuZXM7XG4gIH0gLy8gSWYgdGhlcmUgYXJlIGhpZ2hlciBwcmlvcml0eSBsYW5lcywgd2UnbGwgaW5jbHVkZSB0aGVtIGV2ZW4gaWYgdGhleVxuICAvLyBhcmUgc3VzcGVuZGVkLlxuXG5cbiAgbmV4dExhbmVzID0gcGVuZGluZ0xhbmVzICYgZ2V0RXF1YWxPckhpZ2hlclByaW9yaXR5TGFuZXMobmV4dExhbmVzKTsgLy8gSWYgd2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIGEgcmVuZGVyLCBzd2l0Y2hpbmcgbGFuZXMgd2lsbCBpbnRlcnJ1cHRcbiAgLy8gaXQgYW5kIHdlJ2xsIGxvc2Ugb3VyIHByb2dyZXNzLiBXZSBzaG91bGQgb25seSBkbyB0aGlzIGlmIHRoZSBuZXcgbGFuZXMgYXJlXG4gIC8vIGhpZ2hlciBwcmlvcml0eS5cblxuICBpZiAod2lwTGFuZXMgIT09IE5vTGFuZXMgJiYgd2lwTGFuZXMgIT09IG5leHRMYW5lcyAmJiAvLyBJZiB3ZSBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHRoZW4gaW50ZXJydXB0aW5nIGlzIGZpbmUuIERvbid0XG4gIC8vIGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSByb290IGlzIGNvbXBsZXRlLlxuICAod2lwTGFuZXMgJiBzdXNwZW5kZWRMYW5lcykgPT09IE5vTGFuZXMpIHtcbiAgICBnZXRIaWdoZXN0UHJpb3JpdHlMYW5lcyh3aXBMYW5lcyk7XG4gICAgdmFyIHdpcExhbmVQcmlvcml0eSA9IHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xuXG4gICAgaWYgKG5leHRMYW5lUHJpb3JpdHkgPD0gd2lwTGFuZVByaW9yaXR5KSB7XG4gICAgICByZXR1cm4gd2lwTGFuZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5ID0gbmV4dExhbmVQcmlvcml0eTtcbiAgICB9XG4gIH0gLy8gQ2hlY2sgZm9yIGVudGFuZ2xlZCBsYW5lcyBhbmQgYWRkIHRoZW0gdG8gdGhlIGJhdGNoLlxuICAvL1xuICAvLyBBIGxhbmUgaXMgc2FpZCB0byBiZSBlbnRhbmdsZWQgd2l0aCBhbm90aGVyIHdoZW4gaXQncyBub3QgYWxsb3dlZCB0byByZW5kZXJcbiAgLy8gaW4gYSBiYXRjaCB0aGF0IGRvZXMgbm90IGFsc28gaW5jbHVkZSB0aGUgb3RoZXIgbGFuZS4gVHlwaWNhbGx5IHdlIGRvIHRoaXNcbiAgLy8gd2hlbiBtdWx0aXBsZSB1cGRhdGVzIGhhdmUgdGhlIHNhbWUgc291cmNlLCBhbmQgd2Ugb25seSB3YW50IHRvIHJlc3BvbmQgdG9cbiAgLy8gdGhlIG1vc3QgcmVjZW50IGV2ZW50IGZyb20gdGhhdCBzb3VyY2UuXG4gIC8vXG4gIC8vIE5vdGUgdGhhdCB3ZSBhcHBseSBlbnRhbmdsZW1lbnRzICphZnRlciogY2hlY2tpbmcgZm9yIHBhcnRpYWwgd29yayBhYm92ZS5cbiAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIGEgbGFuZSBpcyBlbnRhbmdsZWQgZHVyaW5nIGFuIGludGVybGVhdmVkIGV2ZW50IHdoaWxlXG4gIC8vIGl0J3MgYWxyZWFkeSByZW5kZXJpbmcsIHdlIHdvbid0IGludGVycnVwdCBpdC4gVGhpcyBpcyBpbnRlbnRpb25hbCwgc2luY2VcbiAgLy8gZW50YW5nbGVtZW50IGlzIHVzdWFsbHkgXCJiZXN0IGVmZm9ydFwiOiB3ZSdsbCB0cnkgb3VyIGJlc3QgdG8gcmVuZGVyIHRoZVxuICAvLyBsYW5lcyBpbiB0aGUgc2FtZSBiYXRjaCwgYnV0IGl0J3Mgbm90IHdvcnRoIHRocm93aW5nIG91dCBwYXJ0aWFsbHlcbiAgLy8gY29tcGxldGVkIHdvcmsgaW4gb3JkZXIgdG8gZG8gaXQuXG4gIC8vXG4gIC8vIEZvciB0aG9zZSBleGNlcHRpb25zIHdoZXJlIGVudGFuZ2xlbWVudCBpcyBzZW1hbnRpY2FsbHkgaW1wb3J0YW50LCBsaWtlXG4gIC8vIHVzZU11dGFibGVTb3VyY2UsIHdlIHNob3VsZCBlbnN1cmUgdGhhdCB0aGVyZSBpcyBubyBwYXJ0aWFsIHdvcmsgYXQgdGhlXG4gIC8vIHRpbWUgd2UgYXBwbHkgdGhlIGVudGFuZ2xlbWVudC5cblxuXG4gIHZhciBlbnRhbmdsZWRMYW5lcyA9IHJvb3QuZW50YW5nbGVkTGFuZXM7XG5cbiAgaWYgKGVudGFuZ2xlZExhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgdmFyIGVudGFuZ2xlbWVudHMgPSByb290LmVudGFuZ2xlbWVudHM7XG4gICAgdmFyIGxhbmVzID0gbmV4dExhbmVzICYgZW50YW5nbGVkTGFuZXM7XG5cbiAgICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICAgIG5leHRMYW5lcyB8PSBlbnRhbmdsZW1lbnRzW2luZGV4XTtcbiAgICAgIGxhbmVzICY9IH5sYW5lO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXh0TGFuZXM7XG59XG5mdW5jdGlvbiBnZXRNb3N0UmVjZW50RXZlbnRUaW1lKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBldmVudFRpbWVzID0gcm9vdC5ldmVudFRpbWVzO1xuICB2YXIgbW9zdFJlY2VudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgdmFyIGV2ZW50VGltZSA9IGV2ZW50VGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV2ZW50VGltZSA+IG1vc3RSZWNlbnRFdmVudFRpbWUpIHtcbiAgICAgIG1vc3RSZWNlbnRFdmVudFRpbWUgPSBldmVudFRpbWU7XG4gICAgfVxuXG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cblxuICByZXR1cm4gbW9zdFJlY2VudEV2ZW50VGltZTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IEV4cGlyYXRpb24gaGV1cmlzdGljIGlzIGNvbnN0YW50IHBlciBsYW5lLCBzbyBjb3VsZCB1c2UgYSBtYXAuXG4gIGdldEhpZ2hlc3RQcmlvcml0eUxhbmVzKGxhbmUpO1xuICB2YXIgcHJpb3JpdHkgPSByZXR1cm5faGlnaGVzdExhbmVQcmlvcml0eTtcblxuICBpZiAocHJpb3JpdHkgPj0gSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5KSB7XG4gICAgLy8gVXNlciBpbnRlcmFjdGlvbnMgc2hvdWxkIGV4cGlyZSBzbGlnaHRseSBtb3JlIHF1aWNrbHkuXG4gICAgLy9cbiAgICAvLyBOT1RFOiBUaGlzIGlzIHNldCB0byB0aGUgY29ycmVzcG9uZGluZyBjb25zdGFudCBhcyBpbiBTY2hlZHVsZXIuanMuIFdoZW5cbiAgICAvLyB3ZSBtYWRlIGl0IGxhcmdlciwgYSBwcm9kdWN0IG1ldHJpYyBpbiB3d3cgcmVncmVzc2VkLCBzdWdnZXN0aW5nIHRoZXJlJ3NcbiAgICAvLyBhIHVzZXIgaW50ZXJhY3Rpb24gdGhhdCdzIGJlaW5nIHN0YXJ2ZWQgYnkgYSBzZXJpZXMgb2Ygc3luY2hyb25vdXNcbiAgICAvLyB1cGRhdGVzLiBJZiB0aGF0IHRoZW9yeSBpcyBjb3JyZWN0LCB0aGUgcHJvcGVyIHNvbHV0aW9uIGlzIHRvIGZpeCB0aGVcbiAgICAvLyBzdGFydmF0aW9uLiBIb3dldmVyLCB0aGlzIHNjZW5hcmlvIHN1cHBvcnRzIHRoZSBpZGVhIHRoYXQgZXhwaXJhdGlvblxuICAgIC8vIHRpbWVzIGFyZSBhbiBpbXBvcnRhbnQgc2FmZWd1YXJkIHdoZW4gc3RhcnZhdGlvbiBkb2VzIGhhcHBlbi5cbiAgICAvL1xuICAgIC8vIEFsc28gbm90ZSB0aGF0LCBpbiB0aGUgY2FzZSBvZiB1c2VyIGlucHV0IHNwZWNpZmljYWxseSwgdGhpcyB3aWxsIHNvb24gbm9cbiAgICAvLyBsb25nZXIgYmUgYW4gaXNzdWUgYmVjYXVzZSB3ZSBwbGFuIHRvIG1ha2UgdXNlciBpbnB1dCBzeW5jaHJvbm91cyBieVxuICAgIC8vIGRlZmF1bHQgKHVudGlsIHlvdSBlbnRlciBgc3RhcnRUcmFuc2l0aW9uYCwgb2YgY291cnNlLilcbiAgICAvL1xuICAgIC8vIElmIHdlcmVuJ3QgcGxhbm5pbmcgdG8gbWFrZSB0aGVzZSB1cGRhdGVzIHN5bmNocm9ub3VzIHNvb24gYW55d2F5LCBJXG4gICAgLy8gd291bGQgcHJvYmFibHkgbWFrZSB0aGlzIG51bWJlciBhIGNvbmZpZ3VyYWJsZSBwYXJhbWV0ZXIuXG4gICAgcmV0dXJuIGN1cnJlbnRUaW1lICsgMjUwO1xuICB9IGVsc2UgaWYgKHByaW9yaXR5ID49IFRyYW5zaXRpb25Qcmlvcml0eSkge1xuICAgIHJldHVybiBjdXJyZW50VGltZSArIDUwMDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gQW55dGhpbmcgaWRsZSBwcmlvcml0eSBvciBsb3dlciBzaG91bGQgbmV2ZXIgZXhwaXJlLlxuICAgIHJldHVybiBOb1RpbWVzdGFtcDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrU3RhcnZlZExhbmVzQXNFeHBpcmVkKHJvb3QsIGN1cnJlbnRUaW1lKSB7XG4gIC8vIFRPRE86IFRoaXMgZ2V0cyBjYWxsZWQgZXZlcnkgdGltZSB3ZSB5aWVsZC4gV2UgY2FuIG9wdGltaXplIGJ5IHN0b3JpbmdcbiAgLy8gdGhlIGVhcmxpZXN0IGV4cGlyYXRpb24gdGltZSBvbiB0aGUgcm9vdC4gVGhlbiB1c2UgdGhhdCB0byBxdWlja2x5IGJhaWwgb3V0XG4gIC8vIG9mIHRoaXMgZnVuY3Rpb24uXG4gIHZhciBwZW5kaW5nTGFuZXMgPSByb290LnBlbmRpbmdMYW5lcztcbiAgdmFyIHN1c3BlbmRlZExhbmVzID0gcm9vdC5zdXNwZW5kZWRMYW5lcztcbiAgdmFyIHBpbmdlZExhbmVzID0gcm9vdC5waW5nZWRMYW5lcztcbiAgdmFyIGV4cGlyYXRpb25UaW1lcyA9IHJvb3QuZXhwaXJhdGlvblRpbWVzOyAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHBlbmRpbmcgbGFuZXMgYW5kIGNoZWNrIGlmIHdlJ3ZlIHJlYWNoZWQgdGhlaXJcbiAgLy8gZXhwaXJhdGlvbiB0aW1lLiBJZiBzbywgd2UnbGwgYXNzdW1lIHRoZSB1cGRhdGUgaXMgYmVpbmcgc3RhcnZlZCBhbmQgbWFya1xuICAvLyBpdCBhcyBleHBpcmVkIHRvIGZvcmNlIGl0IHRvIGZpbmlzaC5cblxuICB2YXIgbGFuZXMgPSBwZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICB2YXIgZXhwaXJhdGlvblRpbWUgPSBleHBpcmF0aW9uVGltZXNbaW5kZXhdO1xuXG4gICAgaWYgKGV4cGlyYXRpb25UaW1lID09PSBOb1RpbWVzdGFtcCkge1xuICAgICAgLy8gRm91bmQgYSBwZW5kaW5nIGxhbmUgd2l0aCBubyBleHBpcmF0aW9uIHRpbWUuIElmIGl0J3Mgbm90IHN1c3BlbmRlZCwgb3JcbiAgICAgIC8vIGlmIGl0J3MgcGluZ2VkLCBhc3N1bWUgaXQncyBDUFUtYm91bmQuIENvbXB1dGUgYSBuZXcgZXhwaXJhdGlvbiB0aW1lXG4gICAgICAvLyB1c2luZyB0aGUgY3VycmVudCB0aW1lLlxuICAgICAgaWYgKChsYW5lICYgc3VzcGVuZGVkTGFuZXMpID09PSBOb0xhbmVzIHx8IChsYW5lICYgcGluZ2VkTGFuZXMpICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIC8vIEFzc3VtZXMgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLlxuICAgICAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gY29tcHV0ZUV4cGlyYXRpb25UaW1lKGxhbmUsIGN1cnJlbnRUaW1lKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV4cGlyYXRpb25UaW1lIDw9IGN1cnJlbnRUaW1lKSB7XG4gICAgICAvLyBUaGlzIGxhbmUgZXhwaXJlZFxuICAgICAgcm9vdC5leHBpcmVkTGFuZXMgfD0gbGFuZTtcbiAgICB9XG5cbiAgICBsYW5lcyAmPSB+bGFuZTtcbiAgfVxufSAvLyBUaGlzIHJldHVybnMgdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcGVuZGluZyBsYW5lcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhleVxuZnVuY3Rpb24gZ2V0TGFuZXNUb1JldHJ5U3luY2hyb25vdXNseU9uRXJyb3Iocm9vdCkge1xuICB2YXIgZXZlcnl0aGluZ0J1dE9mZnNjcmVlbiA9IHJvb3QucGVuZGluZ0xhbmVzICYgfk9mZnNjcmVlbkxhbmU7XG5cbiAgaWYgKGV2ZXJ5dGhpbmdCdXRPZmZzY3JlZW4gIT09IE5vTGFuZXMpIHtcbiAgICByZXR1cm4gZXZlcnl0aGluZ0J1dE9mZnNjcmVlbjtcbiAgfVxuXG4gIGlmIChldmVyeXRoaW5nQnV0T2Zmc2NyZWVuICYgT2Zmc2NyZWVuTGFuZSkge1xuICAgIHJldHVybiBPZmZzY3JlZW5MYW5lO1xuICB9XG5cbiAgcmV0dXJuIE5vTGFuZXM7XG59XG5mdW5jdGlvbiByZXR1cm5OZXh0TGFuZXNQcmlvcml0eSgpIHtcbiAgcmV0dXJuIHJldHVybl9oaWdoZXN0TGFuZVByaW9yaXR5O1xufVxuZnVuY3Rpb24gaW5jbHVkZXNOb25JZGxlV29yayhsYW5lcykge1xuICByZXR1cm4gKGxhbmVzICYgTm9uSWRsZUxhbmVzKSAhPT0gTm9MYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVJldHJpZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIFJldHJ5TGFuZXMpID09PSBsYW5lcztcbn1cbmZ1bmN0aW9uIGluY2x1ZGVzT25seVRyYW5zaXRpb25zKGxhbmVzKSB7XG4gIHJldHVybiAobGFuZXMgJiBUcmFuc2l0aW9uTGFuZXMpID09PSBsYW5lcztcbn0gLy8gVG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyBtdWx0aXBsZSB1cGRhdGVzIGluIHRoZSBzYW1lIGV2ZW50LCB0aGlzIHNob3VsZFxuLy8gYmUgYSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFVwZGF0ZUxhbmUobGFuZVByaW9yaXR5LCB3aXBMYW5lcykge1xuICBzd2l0Y2ggKGxhbmVQcmlvcml0eSkge1xuICAgIGNhc2UgTm9MYW5lUHJpb3JpdHk6XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3luY0xhbmVQcmlvcml0eTpcbiAgICAgIHJldHVybiBTeW5jTGFuZTtcblxuICAgIGNhc2UgU3luY0JhdGNoZWRMYW5lUHJpb3JpdHk6XG4gICAgICByZXR1cm4gU3luY0JhdGNoZWRMYW5lO1xuXG4gICAgY2FzZSBJbnB1dERpc2NyZXRlTGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJbnB1dERpc2NyZXRlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgIGlmIChfbGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgLy8gU2hpZnQgdG8gdGhlIG5leHQgcHJpb3JpdHkgbGV2ZWxcbiAgICAgICAgICByZXR1cm4gZmluZFVwZGF0ZUxhbmUoSW5wdXRDb250aW51b3VzTGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmU7XG4gICAgICB9XG5cbiAgICBjYXNlIElucHV0Q29udGludW91c0xhbmVQcmlvcml0eTpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9sYW5lMiA9IHBpY2tBcmJpdHJhcnlMYW5lKElucHV0Q29udGludW91c0xhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUyID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBTaGlmdCB0byB0aGUgbmV4dCBwcmlvcml0eSBsZXZlbFxuICAgICAgICAgIHJldHVybiBmaW5kVXBkYXRlTGFuZShEZWZhdWx0TGFuZVByaW9yaXR5LCB3aXBMYW5lcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2xhbmUyO1xuICAgICAgfVxuXG4gICAgY2FzZSBEZWZhdWx0TGFuZVByaW9yaXR5OlxuICAgICAge1xuICAgICAgICB2YXIgX2xhbmUzID0gcGlja0FyYml0cmFyeUxhbmUoRGVmYXVsdExhbmVzICYgfndpcExhbmVzKTtcblxuICAgICAgICBpZiAoX2xhbmUzID09PSBOb0xhbmUpIHtcbiAgICAgICAgICAvLyBJZiBhbGwgdGhlIGRlZmF1bHQgbGFuZXMgYXJlIGFscmVhZHkgYmVpbmcgd29ya2VkIG9uLCBsb29rIGZvciBhXG4gICAgICAgICAgLy8gbGFuZSBpbiB0aGUgdHJhbnNpdGlvbiByYW5nZS5cbiAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICAgICAgaWYgKF9sYW5lMyA9PT0gTm9MYW5lKSB7XG4gICAgICAgICAgICAvLyBBbGwgdGhlIHRyYW5zaXRpb24gbGFuZXMgYXJlIHRha2VuLCB0b28uIFRoaXMgc2hvdWxkIGJlIHZlcnlcbiAgICAgICAgICAgIC8vIHJhcmUsIGJ1dCBhcyBhIGxhc3QgcmVzb3J0LCBwaWNrIGEgZGVmYXVsdCBsYW5lLiBUaGlzIHdpbGwgaGF2ZVxuICAgICAgICAgICAgLy8gdGhlIGVmZmVjdCBvZiBpbnRlcnJ1cHRpbmcgdGhlIGN1cnJlbnQgd29yay1pbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgICAgICBfbGFuZTMgPSBwaWNrQXJiaXRyYXJ5TGFuZShEZWZhdWx0TGFuZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfbGFuZTM7XG4gICAgICB9XG5cbiAgICBjYXNlIFRyYW5zaXRpb25Qcmlvcml0eTogLy8gU2hvdWxkIGJlIGhhbmRsZWQgYnkgZmluZFRyYW5zaXRpb25MYW5lIGluc3RlYWRcblxuICAgIGNhc2UgUmV0cnlMYW5lUHJpb3JpdHk6XG4gICAgICAvLyBTaG91bGQgYmUgaGFuZGxlZCBieSBmaW5kUmV0cnlMYW5lIGluc3RlYWRcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBJZGxlTGFuZVByaW9yaXR5OlxuICAgICAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShJZGxlTGFuZXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFuZTtcbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIHVwZGF0ZSBwcmlvcml0eTogXCIgKyBsYW5lUHJpb3JpdHkgKyBcIi4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC5cIiApO1xuICAgIH1cbiAgfVxufSAvLyBUbyBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzIG11bHRpcGxlIHVwZGF0ZXMgaW4gdGhlIHNhbWUgZXZlbnQsIHRoaXMgc2hvdWxkXG4vLyBiZSBwdXJlIGZ1bmN0aW9uLCBzbyB0aGF0IGl0IGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIGxhbmUgZm9yIGdpdmVuIGlucHV0cy5cblxuZnVuY3Rpb24gZmluZFRyYW5zaXRpb25MYW5lKHdpcExhbmVzLCBwZW5kaW5nTGFuZXMpIHtcbiAgLy8gRmlyc3QgbG9vayBmb3IgbGFuZXMgdGhhdCBhcmUgY29tcGxldGVseSB1bmNsYWltZWQsIGkuZS4gaGF2ZSBub1xuICAvLyBwZW5kaW5nIHdvcmsuXG4gIHZhciBsYW5lID0gcGlja0FyYml0cmFyeUxhbmUoVHJhbnNpdGlvbkxhbmVzICYgfnBlbmRpbmdMYW5lcyk7XG5cbiAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgIC8vIElmIGFsbCBsYW5lcyBoYXZlIHBlbmRpbmcgd29yaywgbG9vayBmb3IgYSBsYW5lIHRoYXQgaXNuJ3QgY3VycmVudGx5XG4gICAgLy8gYmVpbmcgd29ya2VkIG9uLlxuICAgIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShUcmFuc2l0aW9uTGFuZXMgJiB+d2lwTGFuZXMpO1xuXG4gICAgaWYgKGxhbmUgPT09IE5vTGFuZSkge1xuICAgICAgLy8gSWYgZXZlcnl0aGluZyBpcyBiZWluZyB3b3JrZWQgb24sIHBpY2sgYW55IGxhbmUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCB3b3JrLWluLXByb2dyZXNzLlxuICAgICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFRyYW5zaXRpb25MYW5lcyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59IC8vIFRvIGVuc3VyZSBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgdXBkYXRlcyBpbiB0aGUgc2FtZSBldmVudCwgdGhpcyBzaG91bGRcbi8vIGJlIHB1cmUgZnVuY3Rpb24sIHNvIHRoYXQgaXQgYWx3YXlzIHJldHVybnMgdGhlIHNhbWUgbGFuZSBmb3IgZ2l2ZW4gaW5wdXRzLlxuXG5mdW5jdGlvbiBmaW5kUmV0cnlMYW5lKHdpcExhbmVzKSB7XG4gIC8vIFRoaXMgaXMgYSBmb3JrIG9mIGBmaW5kVXBkYXRlTGFuZWAgZGVzaWduZWQgc3BlY2lmaWNhbGx5IGZvciBTdXNwZW5zZVxuICAvLyBcInJldHJpZXNcIiDigJQgYSBzcGVjaWFsIHVwZGF0ZSB0aGF0IGF0dGVtcHRzIHRvIGZsaXAgYSBTdXNwZW5zZSBib3VuZGFyeVxuICAvLyBmcm9tIGl0cyBwbGFjZWhvbGRlciBzdGF0ZSB0byBpdHMgcHJpbWFyeS9yZXNvbHZlZCBzdGF0ZS5cbiAgdmFyIGxhbmUgPSBwaWNrQXJiaXRyYXJ5TGFuZShSZXRyeUxhbmVzICYgfndpcExhbmVzKTtcblxuICBpZiAobGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKFJldHJ5TGFuZXMpO1xuICB9XG5cbiAgcmV0dXJuIGxhbmU7XG59XG5cbmZ1bmN0aW9uIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgcmV0dXJuIGxhbmVzICYgLWxhbmVzO1xufVxuXG5mdW5jdGlvbiBnZXRMb3dlc3RQcmlvcml0eUxhbmUobGFuZXMpIHtcbiAgLy8gVGhpcyBmaW5kcyB0aGUgbW9zdCBzaWduaWZpY2FudCBub24temVybyBiaXQuXG4gIHZhciBpbmRleCA9IDMxIC0gY2x6MzIobGFuZXMpO1xuICByZXR1cm4gaW5kZXggPCAwID8gTm9MYW5lcyA6IDEgPDwgaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGdldEVxdWFsT3JIaWdoZXJQcmlvcml0eUxhbmVzKGxhbmVzKSB7XG4gIHJldHVybiAoZ2V0TG93ZXN0UHJpb3JpdHlMYW5lKGxhbmVzKSA8PCAxKSAtIDE7XG59XG5cbmZ1bmN0aW9uIHBpY2tBcmJpdHJhcnlMYW5lKGxhbmVzKSB7XG4gIC8vIFRoaXMgd3JhcHBlciBmdW5jdGlvbiBnZXRzIGlubGluZWQuIE9ubHkgZXhpc3RzIHNvIHRvIGNvbW11bmljYXRlIHRoYXQgaXRcbiAgLy8gZG9lc24ndCBtYXR0ZXIgd2hpY2ggYml0IGlzIHNlbGVjdGVkOyB5b3UgY2FuIHBpY2sgYW55IGJpdCB3aXRob3V0XG4gIC8vIGFmZmVjdGluZyB0aGUgYWxnb3JpdGhtcyB3aGVyZSBpdHMgdXNlZC4gSGVyZSBJJ20gdXNpbmdcbiAgLy8gZ2V0SGlnaGVzdFByaW9yaXR5TGFuZSBiZWNhdXNlIGl0IHJlcXVpcmVzIHRoZSBmZXdlc3Qgb3BlcmF0aW9ucy5cbiAgcmV0dXJuIGdldEhpZ2hlc3RQcmlvcml0eUxhbmUobGFuZXMpO1xufVxuXG5mdW5jdGlvbiBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKSB7XG4gIHJldHVybiAzMSAtIGNsejMyKGxhbmVzKTtcbn1cblxuZnVuY3Rpb24gbGFuZVRvSW5kZXgobGFuZSkge1xuICByZXR1cm4gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lKTtcbn1cblxuZnVuY3Rpb24gaW5jbHVkZXNTb21lTGFuZShhLCBiKSB7XG4gIHJldHVybiAoYSAmIGIpICE9PSBOb0xhbmVzO1xufVxuZnVuY3Rpb24gaXNTdWJzZXRPZkxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiAoc2V0ICYgc3Vic2V0KSA9PT0gc3Vic2V0O1xufVxuZnVuY3Rpb24gbWVyZ2VMYW5lcyhhLCBiKSB7XG4gIHJldHVybiBhIHwgYjtcbn1cbmZ1bmN0aW9uIHJlbW92ZUxhbmVzKHNldCwgc3Vic2V0KSB7XG4gIHJldHVybiBzZXQgJiB+c3Vic2V0O1xufSAvLyBTZWVtcyByZWR1bmRhbnQsIGJ1dCBpdCBjaGFuZ2VzIHRoZSB0eXBlIGZyb20gYSBzaW5nbGUgbGFuZSAodXNlZCBmb3Jcbi8vIHVwZGF0ZXMpIHRvIGEgZ3JvdXAgb2YgbGFuZXMgKHVzZWQgZm9yIGZsdXNoaW5nIHdvcmspLlxuXG5mdW5jdGlvbiBsYW5lVG9MYW5lcyhsYW5lKSB7XG4gIHJldHVybiBsYW5lO1xufVxuZnVuY3Rpb24gaGlnaGVyUHJpb3JpdHlMYW5lKGEsIGIpIHtcbiAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBiaXQgcmFuZ2VzIGRlY3JlYXNlIGluIHByaW9yaXR5IGFzIHlvdSBnbyBsZWZ0LlxuICByZXR1cm4gYSAhPT0gTm9MYW5lICYmIGEgPCBiID8gYSA6IGI7XG59XG5mdW5jdGlvbiBjcmVhdGVMYW5lTWFwKGluaXRpYWwpIHtcbiAgLy8gSW50ZW50aW9uYWxseSBwdXNoaW5nIG9uZSBieSBvbmUuXG4gIC8vIGh0dHBzOi8vdjguZGV2L2Jsb2cvZWxlbWVudHMta2luZHMjYXZvaWQtY3JlYXRpbmctaG9sZXNcbiAgdmFyIGxhbmVNYXAgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IFRvdGFsTGFuZXM7IGkrKykge1xuICAgIGxhbmVNYXAucHVzaChpbml0aWFsKTtcbiAgfVxuXG4gIHJldHVybiBsYW5lTWFwO1xufVxuZnVuY3Rpb24gbWFya1Jvb3RVcGRhdGVkKHJvb3QsIHVwZGF0ZUxhbmUsIGV2ZW50VGltZSkge1xuICByb290LnBlbmRpbmdMYW5lcyB8PSB1cGRhdGVMYW5lOyAvLyBUT0RPOiBUaGVvcmV0aWNhbGx5LCBhbnkgdXBkYXRlIHRvIGFueSBsYW5lIGNhbiB1bmJsb2NrIGFueSBvdGhlciBsYW5lLiBCdXRcbiAgLy8gaXQncyBub3QgcHJhY3RpY2FsIHRvIHRyeSBldmVyeSBzaW5nbGUgcG9zc2libGUgY29tYmluYXRpb24uIFdlIG5lZWQgYVxuICAvLyBoZXVyaXN0aWMgdG8gZGVjaWRlIHdoaWNoIGxhbmVzIHRvIGF0dGVtcHQgdG8gcmVuZGVyLCBhbmQgaW4gd2hpY2ggYmF0Y2hlcy5cbiAgLy8gRm9yIG5vdywgd2UgdXNlIHRoZSBzYW1lIGhldXJpc3RpYyBhcyBpbiB0aGUgb2xkIEV4cGlyYXRpb25UaW1lcyBtb2RlbDpcbiAgLy8gcmV0cnkgYW55IGxhbmUgYXQgZXF1YWwgb3IgbG93ZXIgcHJpb3JpdHksIGJ1dCBkb24ndCB0cnkgdXBkYXRlcyBhdCBoaWdoZXJcbiAgLy8gcHJpb3JpdHkgd2l0aG91dCBhbHNvIGluY2x1ZGluZyB0aGUgbG93ZXIgcHJpb3JpdHkgdXBkYXRlcy4gVGhpcyB3b3JrcyB3ZWxsXG4gIC8vIHdoZW4gY29uc2lkZXJpbmcgdXBkYXRlcyBhY3Jvc3MgZGlmZmVyZW50IHByaW9yaXR5IGxldmVscywgYnV0IGlzbid0XG4gIC8vIHN1ZmZpY2llbnQgZm9yIHVwZGF0ZXMgd2l0aGluIHRoZSBzYW1lIHByaW9yaXR5LCBzaW5jZSB3ZSB3YW50IHRvIHRyZWF0XG4gIC8vIHRob3NlIHVwZGF0ZXMgYXMgcGFyYWxsZWwuXG4gIC8vIFVuc3VzcGVuZCBhbnkgdXBkYXRlIGF0IGVxdWFsIG9yIGxvd2VyIHByaW9yaXR5LlxuXG4gIHZhciBoaWdoZXJQcmlvcml0eUxhbmVzID0gdXBkYXRlTGFuZSAtIDE7IC8vIFR1cm5zIDBiMTAwMCBpbnRvIDBiMDExMVxuXG4gIHJvb3Quc3VzcGVuZGVkTGFuZXMgJj0gaGlnaGVyUHJpb3JpdHlMYW5lcztcbiAgcm9vdC5waW5nZWRMYW5lcyAmPSBoaWdoZXJQcmlvcml0eUxhbmVzO1xuICB2YXIgZXZlbnRUaW1lcyA9IHJvb3QuZXZlbnRUaW1lcztcbiAgdmFyIGluZGV4ID0gbGFuZVRvSW5kZXgodXBkYXRlTGFuZSk7IC8vIFdlIGNhbiBhbHdheXMgb3ZlcndyaXRlIGFuIGV4aXN0aW5nIHRpbWVzdGFtcCBiZWNhdXNlIHdlIHByZWZlciB0aGUgbW9zdFxuICAvLyByZWNlbnQgZXZlbnQsIGFuZCB3ZSBhc3N1bWUgdGltZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcuXG5cbiAgZXZlbnRUaW1lc1tpbmRleF0gPSBldmVudFRpbWU7XG59XG5mdW5jdGlvbiBtYXJrUm9vdFN1c3BlbmRlZChyb290LCBzdXNwZW5kZWRMYW5lcykge1xuICByb290LnN1c3BlbmRlZExhbmVzIHw9IHN1c3BlbmRlZExhbmVzO1xuICByb290LnBpbmdlZExhbmVzICY9IH5zdXNwZW5kZWRMYW5lczsgLy8gVGhlIHN1c3BlbmRlZCBsYW5lcyBhcmUgbm8gbG9uZ2VyIENQVS1ib3VuZC4gQ2xlYXIgdGhlaXIgZXhwaXJhdGlvbiB0aW1lcy5cblxuICB2YXIgZXhwaXJhdGlvblRpbWVzID0gcm9vdC5leHBpcmF0aW9uVGltZXM7XG4gIHZhciBsYW5lcyA9IHN1c3BlbmRlZExhbmVzO1xuXG4gIHdoaWxlIChsYW5lcyA+IDApIHtcbiAgICB2YXIgaW5kZXggPSBwaWNrQXJiaXRyYXJ5TGFuZUluZGV4KGxhbmVzKTtcbiAgICB2YXIgbGFuZSA9IDEgPDwgaW5kZXg7XG4gICAgZXhwaXJhdGlvblRpbWVzW2luZGV4XSA9IE5vVGltZXN0YW1wO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG5mdW5jdGlvbiBtYXJrUm9vdFBpbmdlZChyb290LCBwaW5nZWRMYW5lcywgZXZlbnRUaW1lKSB7XG4gIHJvb3QucGluZ2VkTGFuZXMgfD0gcm9vdC5zdXNwZW5kZWRMYW5lcyAmIHBpbmdlZExhbmVzO1xufVxuZnVuY3Rpb24gbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCkge1xuICByb290LmV4cGlyZWRMYW5lcyB8PSBJbnB1dERpc2NyZXRlTGFuZXMgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIGhhc0Rpc2NyZXRlTGFuZXMobGFuZXMpIHtcbiAgcmV0dXJuIChsYW5lcyAmIElucHV0RGlzY3JldGVMYW5lcykgIT09IE5vTGFuZXM7XG59XG5mdW5jdGlvbiBtYXJrUm9vdE11dGFibGVSZWFkKHJvb3QsIHVwZGF0ZUxhbmUpIHtcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzIHw9IHVwZGF0ZUxhbmUgJiByb290LnBlbmRpbmdMYW5lcztcbn1cbmZ1bmN0aW9uIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpIHtcbiAgdmFyIG5vTG9uZ2VyUGVuZGluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXMgJiB+cmVtYWluaW5nTGFuZXM7XG4gIHJvb3QucGVuZGluZ0xhbmVzID0gcmVtYWluaW5nTGFuZXM7IC8vIExldCdzIHRyeSBldmVyeXRoaW5nIGFnYWluXG5cbiAgcm9vdC5zdXNwZW5kZWRMYW5lcyA9IDA7XG4gIHJvb3QucGluZ2VkTGFuZXMgPSAwO1xuICByb290LmV4cGlyZWRMYW5lcyAmPSByZW1haW5pbmdMYW5lcztcbiAgcm9vdC5tdXRhYmxlUmVhZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICByb290LmVudGFuZ2xlZExhbmVzICY9IHJlbWFpbmluZ0xhbmVzO1xuICB2YXIgZW50YW5nbGVtZW50cyA9IHJvb3QuZW50YW5nbGVtZW50cztcbiAgdmFyIGV2ZW50VGltZXMgPSByb290LmV2ZW50VGltZXM7XG4gIHZhciBleHBpcmF0aW9uVGltZXMgPSByb290LmV4cGlyYXRpb25UaW1lczsgLy8gQ2xlYXIgdGhlIGxhbmVzIHRoYXQgbm8gbG9uZ2VyIGhhdmUgcGVuZGluZyB3b3JrXG5cbiAgdmFyIGxhbmVzID0gbm9Mb25nZXJQZW5kaW5nTGFuZXM7XG5cbiAgd2hpbGUgKGxhbmVzID4gMCkge1xuICAgIHZhciBpbmRleCA9IHBpY2tBcmJpdHJhcnlMYW5lSW5kZXgobGFuZXMpO1xuICAgIHZhciBsYW5lID0gMSA8PCBpbmRleDtcbiAgICBlbnRhbmdsZW1lbnRzW2luZGV4XSA9IE5vTGFuZXM7XG4gICAgZXZlbnRUaW1lc1tpbmRleF0gPSBOb1RpbWVzdGFtcDtcbiAgICBleHBpcmF0aW9uVGltZXNbaW5kZXhdID0gTm9UaW1lc3RhbXA7XG4gICAgbGFuZXMgJj0gfmxhbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIG1hcmtSb290RW50YW5nbGVkKHJvb3QsIGVudGFuZ2xlZExhbmVzKSB7XG4gIHJvb3QuZW50YW5nbGVkTGFuZXMgfD0gZW50YW5nbGVkTGFuZXM7XG4gIHZhciBlbnRhbmdsZW1lbnRzID0gcm9vdC5lbnRhbmdsZW1lbnRzO1xuICB2YXIgbGFuZXMgPSBlbnRhbmdsZWRMYW5lcztcblxuICB3aGlsZSAobGFuZXMgPiAwKSB7XG4gICAgdmFyIGluZGV4ID0gcGlja0FyYml0cmFyeUxhbmVJbmRleChsYW5lcyk7XG4gICAgdmFyIGxhbmUgPSAxIDw8IGluZGV4O1xuICAgIGVudGFuZ2xlbWVudHNbaW5kZXhdIHw9IGVudGFuZ2xlZExhbmVzO1xuICAgIGxhbmVzICY9IH5sYW5lO1xuICB9XG59XG52YXIgY2x6MzIgPSBNYXRoLmNsejMyID8gTWF0aC5jbHozMiA6IGNsejMyRmFsbGJhY2s7IC8vIENvdW50IGxlYWRpbmcgemVyb3MuIE9ubHkgdXNlZCBvbiBsYW5lcywgc28gYXNzdW1lIGlucHV0IGlzIGFuIGludGVnZXIuXG4vLyBCYXNlZCBvbjpcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcblxudmFyIGxvZyA9IE1hdGgubG9nO1xudmFyIExOMiA9IE1hdGguTE4yO1xuXG5mdW5jdGlvbiBjbHozMkZhbGxiYWNrKGxhbmVzKSB7XG4gIGlmIChsYW5lcyA9PT0gMCkge1xuICAgIHJldHVybiAzMjtcbiAgfVxuXG4gIHJldHVybiAzMSAtIChsb2cobGFuZXMpIC8gTE4yIHwgMCkgfCAwO1xufVxuXG4vLyBJbnRlbnRpb25hbGx5IG5vdCBuYW1lZCBpbXBvcnRzIGJlY2F1c2UgUm9sbHVwIHdvdWxkIHVzZSBkeW5hbWljIGRpc3BhdGNoIGZvclxudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEgPSBTY2hlZHVsZXIudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksXG4gICAgcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eTsgLy8gVE9ETzogY2FuIHdlIHN0b3AgZXhwb3J0aW5nIHRoZXNlP1xuXG52YXIgX2VuYWJsZWQgPSB0cnVlOyAvLyBUaGlzIGlzIGV4cG9ydGVkIGluIEZCIGJ1aWxkcyBmb3IgdXNlIGJ5IGxlZ2FjeSBGQiBsYXllciBpbmZyYS5cbi8vIFdlJ2QgbGlrZSB0byByZW1vdmUgdGhpcyBidXQgaXQncyBub3QgY2xlYXIgaWYgdGhpcyBpcyBzYWZlLlxuXG5mdW5jdGlvbiBzZXRFbmFibGVkKGVuYWJsZWQpIHtcbiAgX2VuYWJsZWQgPSAhIWVuYWJsZWQ7XG59XG5mdW5jdGlvbiBpc0VuYWJsZWQoKSB7XG4gIHJldHVybiBfZW5hYmxlZDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUV2ZW50TGlzdGVuZXJXcmFwcGVyV2l0aFByaW9yaXR5KHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBldmVudFByaW9yaXR5ID0gZ2V0RXZlbnRQcmlvcml0eUZvclBsdWdpblN5c3RlbShkb21FdmVudE5hbWUpO1xuICB2YXIgbGlzdGVuZXJXcmFwcGVyO1xuXG4gIHN3aXRjaCAoZXZlbnRQcmlvcml0eSkge1xuICAgIGNhc2UgRGlzY3JldGVFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoRGlzY3JldGVFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBVc2VyQmxvY2tpbmdFdmVudDpcbiAgICAgIGxpc3RlbmVyV3JhcHBlciA9IGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIENvbnRpbnVvdXNFdmVudDpcbiAgICBkZWZhdWx0OlxuICAgICAgbGlzdGVuZXJXcmFwcGVyID0gZGlzcGF0Y2hFdmVudDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIGxpc3RlbmVyV3JhcHBlci5iaW5kKG51bGwsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNJZk5lZWRlZChuYXRpdmVFdmVudC50aW1lU3RhbXApO1xuICB9XG5cbiAgZGlzY3JldGVVcGRhdGVzKGRpc3BhdGNoRXZlbnQsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoVXNlckJsb2NraW5nVXBkYXRlKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgY29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICB7XG4gICAgcnVuV2l0aFByaW9yaXR5KFVzZXJCbG9ja2luZ1ByaW9yaXR5JDEsIGRpc3BhdGNoRXZlbnQuYmluZChudWxsLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGNvbnRhaW5lciwgbmF0aXZlRXZlbnQpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEV2ZW50KGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCkge1xuICBpZiAoIV9lbmFibGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGFsbG93UmVwbGF5ID0gdHJ1ZTtcblxuICB7XG4gICAgLy8gVE9ETzogcmVwbGF5aW5nIGNhcHR1cmUgcGhhc2UgZXZlbnRzIGlzIGN1cnJlbnRseSBicm9rZW5cbiAgICAvLyBiZWNhdXNlIHdlIHVzZWQgdG8gZG8gaXQgZHVyaW5nIHRvcC1sZXZlbCBuYXRpdmUgYnViYmxlIGhhbmRsZXJzXG4gICAgLy8gYnV0IG5vdyB3ZSB1c2UgZGlmZmVyZW50IGJ1YmJsZSBhbmQgY2FwdHVyZSBoYW5kbGVycy5cbiAgICAvLyBJbiBlYWdlciBtb2RlLCB3ZSBhdHRhY2ggY2FwdHVyZSBsaXN0ZW5lcnMgZWFybHksIHNvIHdlIG5lZWRcbiAgICAvLyB0byBmaWx0ZXIgdGhlbSBvdXQgdW50aWwgd2UgZml4IHRoZSBsb2dpYyB0byBoYW5kbGUgdGhlbSBjb3JyZWN0bHkuXG4gICAgLy8gVGhpcyBjb3VsZCd2ZSBiZWVuIG91dHNpZGUgdGhlIGZsYWcgYnV0IEkgcHV0IGl0IGluc2lkZSB0byByZWR1Y2Ugcmlzay5cbiAgICBhbGxvd1JlcGxheSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgPT09IDA7XG4gIH1cblxuICBpZiAoYWxsb3dSZXBsYXkgJiYgaGFzUXVldWVkRGlzY3JldGVFdmVudHMoKSAmJiBpc1JlcGxheWFibGVEaXNjcmV0ZUV2ZW50KGRvbUV2ZW50TmFtZSkpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBxdWV1ZSBvZiBkaXNjcmV0ZSBldmVudHMsIGFuZCB0aGlzIGlzIGFub3RoZXIgZGlzY3JldGVcbiAgICAvLyBldmVudCwgdGhlbiB3ZSBjYW4ndCBkaXNwYXRjaCBpdCByZWdhcmRsZXNzIG9mIGl0cyB0YXJnZXQsIHNpbmNlIHRoZXlcbiAgICAvLyBuZWVkIHRvIGRpc3BhdGNoIGluIG9yZGVyLlxuICAgIHF1ZXVlRGlzY3JldGVFdmVudChudWxsLCAvLyBGbGFncyB0aGF0IHdlJ3JlIG5vdCBhY3R1YWxseSBibG9ja2VkIG9uIGFueXRoaW5nIGFzIGZhciBhcyB3ZSBrbm93LlxuICAgIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyLCBuYXRpdmVFdmVudCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGJsb2NrZWRPbiA9IGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KTtcblxuICBpZiAoYmxvY2tlZE9uID09PSBudWxsKSB7XG4gICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IGRpc3BhdGNoZWQgdGhpcyBldmVudC5cbiAgICBpZiAoYWxsb3dSZXBsYXkpIHtcbiAgICAgIGNsZWFySWZDb250aW51b3VzRXZlbnQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGFsbG93UmVwbGF5KSB7XG4gICAgaWYgKGlzUmVwbGF5YWJsZURpc2NyZXRlRXZlbnQoZG9tRXZlbnROYW1lKSkge1xuICAgICAgLy8gVGhpcyB0aGlzIHRvIGJlIHJlcGxheWVkIGxhdGVyIG9uY2UgdGhlIHRhcmdldCBpcyBhdmFpbGFibGUuXG4gICAgICBxdWV1ZURpc2NyZXRlRXZlbnQoYmxvY2tlZE9uLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lciwgbmF0aXZlRXZlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChxdWV1ZUlmQ29udGludW91c0V2ZW50KGJsb2NrZWRPbiwgZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2UgbmVlZCB0byBjbGVhciBvbmx5IGlmIHdlIGRpZG4ndCBxdWV1ZSBiZWNhdXNlXG4gICAgLy8gcXVldWVpbmcgaXMgYWNjdW1tdWxhdGl2ZS5cblxuXG4gICAgY2xlYXJJZkNvbnRpbnVvdXNFdmVudChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KTtcbiAgfSAvLyBUaGlzIGlzIG5vdCByZXBsYXlhYmxlIHNvIHdlJ2xsIGludm9rZSBpdCBidXQgd2l0aG91dCBhIHRhcmdldCxcbiAgLy8gaW4gY2FzZSB0aGUgZXZlbnQgc3lzdGVtIG5lZWRzIHRvIHRyYWNlIGl0LlxuXG5cbiAgZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIG51bGwsIHRhcmdldENvbnRhaW5lcik7XG59IC8vIEF0dGVtcHQgZGlzcGF0Y2hpbmcgYW4gZXZlbnQuIFJldHVybnMgYSBTdXNwZW5zZUluc3RhbmNlIG9yIENvbnRhaW5lciBpZiBpdCdzIGJsb2NrZWQuXG5cbmZ1bmN0aW9uIGF0dGVtcHRUb0Rpc3BhdGNoRXZlbnQoZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIsIG5hdGl2ZUV2ZW50KSB7XG4gIC8vIFRPRE86IFdhcm4gaWYgX2VuYWJsZWQgaXMgZmFsc2UuXG4gIHZhciBuYXRpdmVFdmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgdmFyIHRhcmdldEluc3QgPSBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgaWYgKHRhcmdldEluc3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmVhcmVzdE1vdW50ZWQgPSBnZXROZWFyZXN0TW91bnRlZEZpYmVyKHRhcmdldEluc3QpO1xuXG4gICAgaWYgKG5lYXJlc3RNb3VudGVkID09PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIHRyZWUgaGFzIGJlZW4gdW5tb3VudGVkIGFscmVhZHkuIERpc3BhdGNoIHdpdGhvdXQgYSB0YXJnZXQuXG4gICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHRhZyA9IG5lYXJlc3RNb3VudGVkLnRhZztcblxuICAgICAgaWYgKHRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0U3VzcGVuc2VJbnN0YW5jZUZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gUXVldWUgdGhlIGV2ZW50IHRvIGJlIHJlcGxheWVkIGxhdGVyLiBBYm9ydCBkaXNwYXRjaGluZyBzaW5jZSB3ZVxuICAgICAgICAgIC8vIGRvbid0IHdhbnQgdGhpcyBldmVudCBkaXNwYXRjaGVkIHR3aWNlIHRocm91Z2ggdGhlIGV2ZW50IHN5c3RlbS5cbiAgICAgICAgICAvLyBUT0RPOiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBkaXNjcmV0ZSBldmVudCBpbiB0aGUgcXVldWUuIFNjaGVkdWxlIGFuIGluY3JlYXNlZFxuICAgICAgICAgIC8vIHByaW9yaXR5IGZvciB0aGlzIGJvdW5kYXJ5LlxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfSAvLyBUaGlzIHNob3VsZG4ndCBoYXBwZW4sIHNvbWV0aGluZyB3ZW50IHdyb25nIGJ1dCB0byBhdm9pZCBibG9ja2luZ1xuICAgICAgICAvLyB0aGUgd2hvbGUgc3lzdGVtLCBkaXNwYXRjaCB0aGUgZXZlbnQgd2l0aG91dCBhIHRhcmdldC5cbiAgICAgICAgLy8gVE9ETzogV2Fybi5cblxuXG4gICAgICAgIHRhcmdldEluc3QgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RSb290KSB7XG4gICAgICAgIHZhciByb290ID0gbmVhcmVzdE1vdW50ZWQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAvLyBJZiB0aGlzIGhhcHBlbnMgZHVyaW5nIGEgcmVwbGF5IHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZCBpdCBtaWdodCBibG9ja1xuICAgICAgICAgIC8vIHRoZSB3aG9sZSBzeXN0ZW0uXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRhaW5lckZyb21GaWJlcihuZWFyZXN0TW91bnRlZCk7XG4gICAgICAgIH1cblxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAobmVhcmVzdE1vdW50ZWQgIT09IHRhcmdldEluc3QpIHtcbiAgICAgICAgLy8gSWYgd2UgZ2V0IGFuIGV2ZW50IChleDogaW1nIG9ubG9hZCkgYmVmb3JlIGNvbW1pdHRpbmcgdGhhdFxuICAgICAgICAvLyBjb21wb25lbnQncyBtb3VudCwgaWdub3JlIGl0IGZvciBub3cgKHRoYXQgaXMsIHRyZWF0IGl0IGFzIGlmIGl0IHdhcyBhblxuICAgICAgICAvLyBldmVudCBvbiBhIG5vbi1SZWFjdCB0cmVlKS4gV2UgbWlnaHQgYWxzbyBjb25zaWRlciBxdWV1ZWluZyBldmVudHMgYW5kXG4gICAgICAgIC8vIGRpc3BhdGNoaW5nIHRoZW0gYWZ0ZXIgdGhlIG1vdW50LlxuICAgICAgICB0YXJnZXRJbnN0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaEV2ZW50Rm9yUGx1Z2luRXZlbnRTeXN0ZW0oZG9tRXZlbnROYW1lLCBldmVudFN5c3RlbUZsYWdzLCBuYXRpdmVFdmVudCwgdGFyZ2V0SW5zdCwgdGFyZ2V0Q29udGFpbmVyKTsgLy8gV2UncmUgbm90IGJsb2NrZWQgb24gYW55dGhpbmcuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIGZhbHNlKTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRDYXB0dXJlTGlzdGVuZXIodGFyZ2V0LCBldmVudFR5cGUsIGxpc3RlbmVyKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICByZXR1cm4gbGlzdGVuZXI7XG59XG5mdW5jdGlvbiBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgcGFzc2l2ZTogcGFzc2l2ZVxuICB9KTtcbiAgcmV0dXJuIGxpc3RlbmVyO1xufVxuZnVuY3Rpb24gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXQsIGV2ZW50VHlwZSwgbGlzdGVuZXIsIHBhc3NpdmUpIHtcbiAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBsaXN0ZW5lciwge1xuICAgIHBhc3NpdmU6IHBhc3NpdmVcbiAgfSk7XG4gIHJldHVybiBsaXN0ZW5lcjtcbn1cblxuLyoqXG4gKiBUaGVzZSB2YXJpYWJsZXMgc3RvcmUgaW5mb3JtYXRpb24gYWJvdXQgdGV4dCBjb250ZW50IG9mIGEgdGFyZ2V0IG5vZGUsXG4gKiBhbGxvd2luZyBjb21wYXJpc29uIG9mIGNvbnRlbnQgYmVmb3JlIGFuZCBhZnRlciBhIGdpdmVuIGV2ZW50LlxuICpcbiAqIElkZW50aWZ5IHRoZSBub2RlIHdoZXJlIHNlbGVjdGlvbiBjdXJyZW50bHkgYmVnaW5zLCB0aGVuIG9ic2VydmVcbiAqIGJvdGggaXRzIHRleHQgY29udGVudCBhbmQgaXRzIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIERPTS4gU2luY2UgdGhlXG4gKiBicm93c2VyIG1heSBuYXRpdmVseSByZXBsYWNlIHRoZSB0YXJnZXQgbm9kZSBkdXJpbmcgY29tcG9zaXRpb24sIHdlIGNhblxuICogdXNlIGl0cyBwb3NpdGlvbiB0byBmaW5kIGl0cyByZXBsYWNlbWVudC5cbiAqXG4gKlxuICovXG52YXIgcm9vdCA9IG51bGw7XG52YXIgc3RhcnRUZXh0ID0gbnVsbDtcbnZhciBmYWxsYmFja1RleHQgPSBudWxsO1xuZnVuY3Rpb24gaW5pdGlhbGl6ZShuYXRpdmVFdmVudFRhcmdldCkge1xuICByb290ID0gbmF0aXZlRXZlbnRUYXJnZXQ7XG4gIHN0YXJ0VGV4dCA9IGdldFRleHQoKTtcbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiByZXNldCgpIHtcbiAgcm9vdCA9IG51bGw7XG4gIHN0YXJ0VGV4dCA9IG51bGw7XG4gIGZhbGxiYWNrVGV4dCA9IG51bGw7XG59XG5mdW5jdGlvbiBnZXREYXRhKCkge1xuICBpZiAoZmFsbGJhY2tUZXh0KSB7XG4gICAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbiAgfVxuXG4gIHZhciBzdGFydDtcbiAgdmFyIHN0YXJ0VmFsdWUgPSBzdGFydFRleHQ7XG4gIHZhciBzdGFydExlbmd0aCA9IHN0YXJ0VmFsdWUubGVuZ3RoO1xuICB2YXIgZW5kO1xuICB2YXIgZW5kVmFsdWUgPSBnZXRUZXh0KCk7XG4gIHZhciBlbmRMZW5ndGggPSBlbmRWYWx1ZS5sZW5ndGg7XG5cbiAgZm9yIChzdGFydCA9IDA7IHN0YXJ0IDwgc3RhcnRMZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoc3RhcnRWYWx1ZVtzdGFydF0gIT09IGVuZFZhbHVlW3N0YXJ0XSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIG1pbkVuZCA9IHN0YXJ0TGVuZ3RoIC0gc3RhcnQ7XG5cbiAgZm9yIChlbmQgPSAxOyBlbmQgPD0gbWluRW5kOyBlbmQrKykge1xuICAgIGlmIChzdGFydFZhbHVlW3N0YXJ0TGVuZ3RoIC0gZW5kXSAhPT0gZW5kVmFsdWVbZW5kTGVuZ3RoIC0gZW5kXSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIHNsaWNlVGFpbCA9IGVuZCA+IDEgPyAxIC0gZW5kIDogdW5kZWZpbmVkO1xuICBmYWxsYmFja1RleHQgPSBlbmRWYWx1ZS5zbGljZShzdGFydCwgc2xpY2VUYWlsKTtcbiAgcmV0dXJuIGZhbGxiYWNrVGV4dDtcbn1cbmZ1bmN0aW9uIGdldFRleHQoKSB7XG4gIGlmICgndmFsdWUnIGluIHJvb3QpIHtcbiAgICByZXR1cm4gcm9vdC52YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByb290LnRleHRDb250ZW50O1xufVxuXG4vKipcbiAqIGBjaGFyQ29kZWAgcmVwcmVzZW50cyB0aGUgYWN0dWFsIFwiY2hhcmFjdGVyIGNvZGVcIiBhbmQgaXMgc2FmZSB0byB1c2Ugd2l0aFxuICogYFN0cmluZy5mcm9tQ2hhckNvZGVgLiBBcyBzdWNoLCBvbmx5IGtleXMgdGhhdCBjb3JyZXNwb25kIHRvIHByaW50YWJsZVxuICogY2hhcmFjdGVycyBwcm9kdWNlIGEgdmFsaWQgYGNoYXJDb2RlYCwgdGhlIG9ubHkgZXhjZXB0aW9uIHRvIHRoaXMgaXMgRW50ZXIuXG4gKiBUaGUgVGFiLWtleSBpcyBjb25zaWRlcmVkIG5vbi1wcmludGFibGUgYW5kIGRvZXMgbm90IGhhdmUgYSBgY2hhckNvZGVgLFxuICogcHJlc3VtYWJseSBiZWNhdXNlIGl0IGRvZXMgbm90IHByb2R1Y2UgYSB0YWItY2hhcmFjdGVyIGluIGJyb3dzZXJzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudCBOYXRpdmUgYnJvd3NlciBldmVudC5cbiAqIEByZXR1cm4ge251bWJlcn0gTm9ybWFsaXplZCBgY2hhckNvZGVgIHByb3BlcnR5LlxuICovXG5mdW5jdGlvbiBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBjaGFyQ29kZTtcbiAgdmFyIGtleUNvZGUgPSBuYXRpdmVFdmVudC5rZXlDb2RlO1xuXG4gIGlmICgnY2hhckNvZGUnIGluIG5hdGl2ZUV2ZW50KSB7XG4gICAgY2hhckNvZGUgPSBuYXRpdmVFdmVudC5jaGFyQ29kZTsgLy8gRkYgZG9lcyBub3Qgc2V0IGBjaGFyQ29kZWAgZm9yIHRoZSBFbnRlci1rZXksIGNoZWNrIGFnYWluc3QgYGtleUNvZGVgLlxuXG4gICAgaWYgKGNoYXJDb2RlID09PSAwICYmIGtleUNvZGUgPT09IDEzKSB7XG4gICAgICBjaGFyQ29kZSA9IDEzO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJRTggZG9lcyBub3QgaW1wbGVtZW50IGBjaGFyQ29kZWAsIGJ1dCBga2V5Q29kZWAgaGFzIHRoZSBjb3JyZWN0IHZhbHVlLlxuICAgIGNoYXJDb2RlID0ga2V5Q29kZTtcbiAgfSAvLyBJRSBhbmQgRWRnZSAob24gV2luZG93cykgYW5kIENocm9tZSAvIFNhZmFyaSAob24gV2luZG93cyBhbmQgTGludXgpXG4gIC8vIHJlcG9ydCBFbnRlciBhcyBjaGFyQ29kZSAxMCB3aGVuIGN0cmwgaXMgcHJlc3NlZC5cblxuXG4gIGlmIChjaGFyQ29kZSA9PT0gMTApIHtcbiAgICBjaGFyQ29kZSA9IDEzO1xuICB9IC8vIFNvbWUgbm9uLXByaW50YWJsZSBrZXlzIGFyZSByZXBvcnRlZCBpbiBgY2hhckNvZGVgL2BrZXlDb2RlYCwgZGlzY2FyZCB0aGVtLlxuICAvLyBNdXN0IG5vdCBkaXNjYXJkIHRoZSAobm9uLSlwcmludGFibGUgRW50ZXIta2V5LlxuXG5cbiAgaWYgKGNoYXJDb2RlID49IDMyIHx8IGNoYXJDb2RlID09PSAxMykge1xuICAgIHJldHVybiBjaGFyQ29kZTtcbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZSgpIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGZ1bmN0aW9uVGhhdFJldHVybnNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgYSBmYWN0b3J5IHNvIHRoYXQgd2UgaGF2ZSBkaWZmZXJlbnQgcmV0dXJuZWQgY29uc3RydWN0b3JzLlxuLy8gSWYgd2UgaGFkIGEgc2luZ2xlIGNvbnN0cnVjdG9yLCBpdCB3b3VsZCBiZSBtZWdhbW9ycGhpYyBhbmQgZW5naW5lcyB3b3VsZCBkZW9wdC5cblxuXG5mdW5jdGlvbiBjcmVhdGVTeW50aGV0aWNFdmVudChJbnRlcmZhY2UpIHtcbiAgLyoqXG4gICAqIFN5bnRoZXRpYyBldmVudHMgYXJlIGRpc3BhdGNoZWQgYnkgZXZlbnQgcGx1Z2lucywgdHlwaWNhbGx5IGluIHJlc3BvbnNlIHRvIGFcbiAgICogdG9wLWxldmVsIGV2ZW50IGRlbGVnYXRpb24gaGFuZGxlci5cbiAgICpcbiAgICogVGhlc2Ugc3lzdGVtcyBzaG91bGQgZ2VuZXJhbGx5IHVzZSBwb29saW5nIHRvIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIGdhcmJhZ2VcbiAgICogY29sbGVjdGlvbi4gVGhlIHN5c3RlbSBzaG91bGQgY2hlY2sgYGlzUGVyc2lzdGVudGAgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlXG4gICAqIGV2ZW50IHNob3VsZCBiZSByZWxlYXNlZCBpbnRvIHRoZSBwb29sIGFmdGVyIGJlaW5nIGRpc3BhdGNoZWQuIFVzZXJzIHRoYXRcbiAgICogbmVlZCBhIHBlcnNpc3RlZCBldmVudCBzaG91bGQgaW52b2tlIGBwZXJzaXN0YC5cbiAgICpcbiAgICogU3ludGhldGljIGV2ZW50cyAoYW5kIHN1YmNsYXNzZXMpIGltcGxlbWVudCB0aGUgRE9NIExldmVsIDMgRXZlbnRzIEFQSSBieVxuICAgKiBub3JtYWxpemluZyBicm93c2VyIHF1aXJrcy4gU3ViY2xhc3NlcyBkbyBub3QgbmVjZXNzYXJpbHkgaGF2ZSB0byBpbXBsZW1lbnQgYVxuICAgKiBET00gaW50ZXJmYWNlOyBjdXN0b20gYXBwbGljYXRpb24tc3BlY2lmaWMgZXZlbnRzIGNhbiBhbHNvIHN1YmNsYXNzIHRoaXMuXG4gICAqL1xuICBmdW5jdGlvbiBTeW50aGV0aWNCYXNlRXZlbnQocmVhY3ROYW1lLCByZWFjdEV2ZW50VHlwZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gICAgdGhpcy5fcmVhY3ROYW1lID0gcmVhY3ROYW1lO1xuICAgIHRoaXMuX3RhcmdldEluc3QgPSB0YXJnZXRJbnN0O1xuICAgIHRoaXMudHlwZSA9IHJlYWN0RXZlbnRUeXBlO1xuICAgIHRoaXMubmF0aXZlRXZlbnQgPSBuYXRpdmVFdmVudDtcbiAgICB0aGlzLnRhcmdldCA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICAgIHRoaXMuY3VycmVudFRhcmdldCA9IG51bGw7XG5cbiAgICBmb3IgKHZhciBfcHJvcE5hbWUgaW4gSW50ZXJmYWNlKSB7XG4gICAgICBpZiAoIUludGVyZmFjZS5oYXNPd25Qcm9wZXJ0eShfcHJvcE5hbWUpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgbm9ybWFsaXplID0gSW50ZXJmYWNlW19wcm9wTmFtZV07XG5cbiAgICAgIGlmIChub3JtYWxpemUpIHtcbiAgICAgICAgdGhpc1tfcHJvcE5hbWVdID0gbm9ybWFsaXplKG5hdGl2ZUV2ZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNbX3Byb3BOYW1lXSA9IG5hdGl2ZUV2ZW50W19wcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRQcmV2ZW50ZWQgPSBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkICE9IG51bGwgPyBuYXRpdmVFdmVudC5kZWZhdWx0UHJldmVudGVkIDogbmF0aXZlRXZlbnQucmV0dXJuVmFsdWUgPT09IGZhbHNlO1xuXG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc0ZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSBmdW5jdGlvblRoYXRSZXR1cm5zRmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfYXNzaWduKFN5bnRoZXRpY0Jhc2VFdmVudC5wcm90b3R5cGUsIHtcbiAgICBwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24gKCkge1xuICAgICAgdGhpcy5kZWZhdWx0UHJldmVudGVkID0gdHJ1ZTtcbiAgICAgIHZhciBldmVudCA9IHRoaXMubmF0aXZlRXZlbnQ7XG5cbiAgICAgIGlmICghZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQucHJldmVudERlZmF1bHQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQucmV0dXJuVmFsdWUgIT09ICd1bmtub3duJykge1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IGZ1bmN0aW9uVGhhdFJldHVybnNUcnVlO1xuICAgIH0sXG4gICAgc3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgZXZlbnQgPSB0aGlzLm5hdGl2ZUV2ZW50O1xuXG4gICAgICBpZiAoIWV2ZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgLy8gJEZsb3dGaXhNZSAtIGZsb3cgaXMgbm90IGF3YXJlIG9mIGB1bmtub3duYCBpbiBJRVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXZlbnQuY2FuY2VsQnViYmxlICE9PSAndW5rbm93bicpIHtcbiAgICAgICAgLy8gVGhlIENoYW5nZUV2ZW50UGx1Z2luIHJlZ2lzdGVycyBhIFwicHJvcGVydHljaGFuZ2VcIiBldmVudCBmb3JcbiAgICAgICAgLy8gSUUuIFRoaXMgZXZlbnQgZG9lcyBub3Qgc3VwcG9ydCBidWJibGluZyBvciBjYW5jZWxsaW5nLCBhbmRcbiAgICAgICAgLy8gYW55IHJlZmVyZW5jZXMgdG8gY2FuY2VsQnViYmxlIHRocm93IFwiTWVtYmVyIG5vdCBmb3VuZFwiLiAgQVxuICAgICAgICAvLyB0eXBlb2YgY2hlY2sgb2YgXCJ1bmtub3duXCIgY2lyY3VtdmVudHMgdGhpcyBpc3N1ZSAoYW5kIGlzIGFsc29cbiAgICAgICAgLy8gSUUgc3BlY2lmaWMpLlxuICAgICAgICBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gZnVuY3Rpb25UaGF0UmV0dXJuc1RydWU7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFdlIHJlbGVhc2UgYWxsIGRpc3BhdGNoZWQgYFN5bnRoZXRpY0V2ZW50YHMgYWZ0ZXIgZWFjaCBldmVudCBsb29wLCBhZGRpbmdcbiAgICAgKiB0aGVtIGJhY2sgaW50byB0aGUgcG9vbC4gVGhpcyBhbGxvd3MgYSB3YXkgdG8gaG9sZCBvbnRvIGEgcmVmZXJlbmNlIHRoYXRcbiAgICAgKiB3b24ndCBiZSBhZGRlZCBiYWNrIGludG8gdGhlIHBvb2wuXG4gICAgICovXG4gICAgcGVyc2lzdDogZnVuY3Rpb24gKCkgey8vIE1vZGVybiBldmVudCBzeXN0ZW0gZG9lc24ndCB1c2UgcG9vbGluZy5cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2tzIGlmIHRoaXMgZXZlbnQgc2hvdWxkIGJlIHJlbGVhc2VkIGJhY2sgaW50byB0aGUgcG9vbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgdGhpcyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgaXNQZXJzaXN0ZW50OiBmdW5jdGlvblRoYXRSZXR1cm5zVHJ1ZVxuICB9KTtcblxuICByZXR1cm4gU3ludGhldGljQmFzZUV2ZW50O1xufVxuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBFdmVudEludGVyZmFjZSA9IHtcbiAgZXZlbnRQaGFzZTogMCxcbiAgYnViYmxlczogMCxcbiAgY2FuY2VsYWJsZTogMCxcbiAgdGltZVN0YW1wOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gZXZlbnQudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG4gIH0sXG4gIGRlZmF1bHRQcmV2ZW50ZWQ6IDAsXG4gIGlzVHJ1c3RlZDogMFxufTtcbnZhciBTeW50aGV0aWNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEV2ZW50SW50ZXJmYWNlKTtcblxudmFyIFVJRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICB2aWV3OiAwLFxuICBkZXRhaWw6IDBcbn0pO1xuXG52YXIgU3ludGhldGljVUlFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFVJRXZlbnRJbnRlcmZhY2UpO1xudmFyIGxhc3RNb3ZlbWVudFg7XG52YXIgbGFzdE1vdmVtZW50WTtcbnZhciBsYXN0TW91c2VFdmVudDtcblxuZnVuY3Rpb24gdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpIHtcbiAgaWYgKGV2ZW50ICE9PSBsYXN0TW91c2VFdmVudCkge1xuICAgIGlmIChsYXN0TW91c2VFdmVudCAmJiBldmVudC50eXBlID09PSAnbW91c2Vtb3ZlJykge1xuICAgICAgbGFzdE1vdmVtZW50WCA9IGV2ZW50LnNjcmVlblggLSBsYXN0TW91c2VFdmVudC5zY3JlZW5YO1xuICAgICAgbGFzdE1vdmVtZW50WSA9IGV2ZW50LnNjcmVlblkgLSBsYXN0TW91c2VFdmVudC5zY3JlZW5ZO1xuICAgIH0gZWxzZSB7XG4gICAgICBsYXN0TW92ZW1lbnRYID0gMDtcbiAgICAgIGxhc3RNb3ZlbWVudFkgPSAwO1xuICAgIH1cblxuICAgIGxhc3RNb3VzZUV2ZW50ID0gZXZlbnQ7XG4gIH1cbn1cbi8qKlxuICogQGludGVyZmFjZSBNb3VzZUV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBNb3VzZUV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBzY3JlZW5YOiAwLFxuICBzY3JlZW5ZOiAwLFxuICBjbGllbnRYOiAwLFxuICBjbGllbnRZOiAwLFxuICBwYWdlWDogMCxcbiAgcGFnZVk6IDAsXG4gIGN0cmxLZXk6IDAsXG4gIHNoaWZ0S2V5OiAwLFxuICBhbHRLZXk6IDAsXG4gIG1ldGFLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgYnV0dG9uOiAwLFxuICBidXR0b25zOiAwLFxuICByZWxhdGVkVGFyZ2V0OiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmVsYXRlZFRhcmdldCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZXZlbnQuZnJvbUVsZW1lbnQgPT09IGV2ZW50LnNyY0VsZW1lbnQgPyBldmVudC50b0VsZW1lbnQgOiBldmVudC5mcm9tRWxlbWVudDtcbiAgICByZXR1cm4gZXZlbnQucmVsYXRlZFRhcmdldDtcbiAgfSxcbiAgbW92ZW1lbnRYOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoJ21vdmVtZW50WCcgaW4gZXZlbnQpIHtcbiAgICAgIHJldHVybiBldmVudC5tb3ZlbWVudFg7XG4gICAgfVxuXG4gICAgdXBkYXRlTW91c2VNb3ZlbWVudFBvbHlmaWxsU3RhdGUoZXZlbnQpO1xuICAgIHJldHVybiBsYXN0TW92ZW1lbnRYO1xuICB9LFxuICBtb3ZlbWVudFk6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgnbW92ZW1lbnRZJyBpbiBldmVudCkge1xuICAgICAgcmV0dXJuIGV2ZW50Lm1vdmVtZW50WTtcbiAgICB9IC8vIERvbid0IG5lZWQgdG8gY2FsbCB1cGRhdGVNb3VzZU1vdmVtZW50UG9seWZpbGxTdGF0ZSgpIGhlcmVcbiAgICAvLyBiZWNhdXNlIGl0J3MgZ3VhcmFudGVlZCB0byBoYXZlIGFscmVhZHkgcnVuIHdoZW4gbW92ZW1lbnRYXG4gICAgLy8gd2FzIGNvcGllZC5cblxuXG4gICAgcmV0dXJuIGxhc3RNb3ZlbWVudFk7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljTW91c2VFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KE1vdXNlRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIERyYWdFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIERyYWdFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIE1vdXNlRXZlbnRJbnRlcmZhY2UsIHtcbiAgZGF0YVRyYW5zZmVyOiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0RyYWdFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KERyYWdFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRm9jdXNFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIEZvY3VzRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBVSUV2ZW50SW50ZXJmYWNlLCB7XG4gIHJlbGF0ZWRUYXJnZXQ6IDBcbn0pO1xuXG52YXIgU3ludGhldGljRm9jdXNFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KEZvY3VzRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtYW5pbWF0aW9ucy8jQW5pbWF0aW9uRXZlbnQtaW50ZXJmYWNlXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BbmltYXRpb25FdmVudFxuICovXG5cbnZhciBBbmltYXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGFuaW1hdGlvbk5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY0FuaW1hdGlvbkV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoQW5pbWF0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL2NsaXBib2FyZC1hcGlzL1xuICovXG5cbnZhciBDbGlwYm9hcmRFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGNsaXBib2FyZERhdGE6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIHJldHVybiAnY2xpcGJvYXJkRGF0YScgaW4gZXZlbnQgPyBldmVudC5jbGlwYm9hcmREYXRhIDogd2luZG93LmNsaXBib2FyZERhdGE7XG4gIH1cbn0pO1xuXG52YXIgU3ludGhldGljQ2xpcGJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChDbGlwYm9hcmRFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtY29tcG9zaXRpb25ldmVudHNcbiAqL1xuXG52YXIgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIEV2ZW50SW50ZXJmYWNlLCB7XG4gIGRhdGE6IDBcbn0pO1xuXG52YXIgU3ludGhldGljQ29tcG9zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KENvbXBvc2l0aW9uRXZlbnRJbnRlcmZhY2UpO1xuLyoqXG4gKiBAaW50ZXJmYWNlIEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1XG4gKiAgICAgIC8jZXZlbnRzLWlucHV0ZXZlbnRzXG4gKi9cbi8vIEhhcHBlbnMgdG8gc2hhcmUgdGhlIHNhbWUgbGlzdCBmb3Igbm93LlxuXG52YXIgU3ludGhldGljSW5wdXRFdmVudCA9IFN5bnRoZXRpY0NvbXBvc2l0aW9uRXZlbnQ7XG4vKipcbiAqIE5vcm1hbGl6YXRpb24gb2YgZGVwcmVjYXRlZCBIVE1MNSBga2V5YCB2YWx1ZXNcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIG5vcm1hbGl6ZUtleSA9IHtcbiAgRXNjOiAnRXNjYXBlJyxcbiAgU3BhY2ViYXI6ICcgJyxcbiAgTGVmdDogJ0Fycm93TGVmdCcsXG4gIFVwOiAnQXJyb3dVcCcsXG4gIFJpZ2h0OiAnQXJyb3dSaWdodCcsXG4gIERvd246ICdBcnJvd0Rvd24nLFxuICBEZWw6ICdEZWxldGUnLFxuICBXaW46ICdPUycsXG4gIE1lbnU6ICdDb250ZXh0TWVudScsXG4gIEFwcHM6ICdDb250ZXh0TWVudScsXG4gIFNjcm9sbDogJ1Njcm9sbExvY2snLFxuICBNb3pQcmludGFibGVLZXk6ICdVbmlkZW50aWZpZWQnXG59O1xuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIGxlZ2FjeSBga2V5Q29kZWAgdG8gSFRNTDUgYGtleWBcbiAqIE9ubHkgc3BlY2lhbCBrZXlzIHN1cHBvcnRlZCwgYWxsIG90aGVycyBkZXBlbmQgb24ga2V5Ym9hcmQgbGF5b3V0IG9yIGJyb3dzZXJcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0tleWJvYXJkRXZlbnQjS2V5X25hbWVzXG4gKi9cblxudmFyIHRyYW5zbGF0ZVRvS2V5ID0ge1xuICAnOCc6ICdCYWNrc3BhY2UnLFxuICAnOSc6ICdUYWInLFxuICAnMTInOiAnQ2xlYXInLFxuICAnMTMnOiAnRW50ZXInLFxuICAnMTYnOiAnU2hpZnQnLFxuICAnMTcnOiAnQ29udHJvbCcsXG4gICcxOCc6ICdBbHQnLFxuICAnMTknOiAnUGF1c2UnLFxuICAnMjAnOiAnQ2Fwc0xvY2snLFxuICAnMjcnOiAnRXNjYXBlJyxcbiAgJzMyJzogJyAnLFxuICAnMzMnOiAnUGFnZVVwJyxcbiAgJzM0JzogJ1BhZ2VEb3duJyxcbiAgJzM1JzogJ0VuZCcsXG4gICczNic6ICdIb21lJyxcbiAgJzM3JzogJ0Fycm93TGVmdCcsXG4gICczOCc6ICdBcnJvd1VwJyxcbiAgJzM5JzogJ0Fycm93UmlnaHQnLFxuICAnNDAnOiAnQXJyb3dEb3duJyxcbiAgJzQ1JzogJ0luc2VydCcsXG4gICc0Nic6ICdEZWxldGUnLFxuICAnMTEyJzogJ0YxJyxcbiAgJzExMyc6ICdGMicsXG4gICcxMTQnOiAnRjMnLFxuICAnMTE1JzogJ0Y0JyxcbiAgJzExNic6ICdGNScsXG4gICcxMTcnOiAnRjYnLFxuICAnMTE4JzogJ0Y3JyxcbiAgJzExOSc6ICdGOCcsXG4gICcxMjAnOiAnRjknLFxuICAnMTIxJzogJ0YxMCcsXG4gICcxMjInOiAnRjExJyxcbiAgJzEyMyc6ICdGMTInLFxuICAnMTQ0JzogJ051bUxvY2snLFxuICAnMTQ1JzogJ1Njcm9sbExvY2snLFxuICAnMjI0JzogJ01ldGEnXG59O1xuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnQgTmF0aXZlIGJyb3dzZXIgZXZlbnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IE5vcm1hbGl6ZWQgYGtleWAgcHJvcGVydHkuXG4gKi9cblxuZnVuY3Rpb24gZ2V0RXZlbnRLZXkobmF0aXZlRXZlbnQpIHtcbiAgaWYgKG5hdGl2ZUV2ZW50LmtleSkge1xuICAgIC8vIE5vcm1hbGl6ZSBpbmNvbnNpc3RlbnQgdmFsdWVzIHJlcG9ydGVkIGJ5IGJyb3dzZXJzIGR1ZSB0b1xuICAgIC8vIGltcGxlbWVudGF0aW9ucyBvZiBhIHdvcmtpbmcgZHJhZnQgc3BlY2lmaWNhdGlvbi5cbiAgICAvLyBGaXJlRm94IGltcGxlbWVudHMgYGtleWAgYnV0IHJldHVybnMgYE1velByaW50YWJsZUtleWAgZm9yIGFsbFxuICAgIC8vIHByaW50YWJsZSBjaGFyYWN0ZXJzIChub3JtYWxpemVkIHRvIGBVbmlkZW50aWZpZWRgKSwgaWdub3JlIGl0LlxuICAgIHZhciBrZXkgPSBub3JtYWxpemVLZXlbbmF0aXZlRXZlbnQua2V5XSB8fCBuYXRpdmVFdmVudC5rZXk7XG5cbiAgICBpZiAoa2V5ICE9PSAnVW5pZGVudGlmaWVkJykge1xuICAgICAgcmV0dXJuIGtleTtcbiAgICB9XG4gIH0gLy8gQnJvd3NlciBkb2VzIG5vdCBpbXBsZW1lbnQgYGtleWAsIHBvbHlmaWxsIGFzIG11Y2ggb2YgaXQgYXMgd2UgY2FuLlxuXG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICB2YXIgY2hhckNvZGUgPSBnZXRFdmVudENoYXJDb2RlKG5hdGl2ZUV2ZW50KTsgLy8gVGhlIGVudGVyLWtleSBpcyB0ZWNobmljYWxseSBib3RoIHByaW50YWJsZSBhbmQgbm9uLXByaW50YWJsZSBhbmQgY2FuXG4gICAgLy8gdGh1cyBiZSBjYXB0dXJlZCBieSBga2V5cHJlc3NgLCBubyBvdGhlciBub24tcHJpbnRhYmxlIGtleSBzaG91bGQuXG5cbiAgICByZXR1cm4gY2hhckNvZGUgPT09IDEzID8gJ0VudGVyJyA6IFN0cmluZy5mcm9tQ2hhckNvZGUoY2hhckNvZGUpO1xuICB9XG5cbiAgaWYgKG5hdGl2ZUV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBuYXRpdmVFdmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgLy8gV2hpbGUgdXNlciBrZXlib2FyZCBsYXlvdXQgZGV0ZXJtaW5lcyB0aGUgYWN0dWFsIG1lYW5pbmcgb2YgZWFjaFxuICAgIC8vIGBrZXlDb2RlYCB2YWx1ZSwgYWxtb3N0IGFsbCBmdW5jdGlvbiBrZXlzIGhhdmUgYSB1bml2ZXJzYWwgdmFsdWUuXG4gICAgcmV0dXJuIHRyYW5zbGF0ZVRvS2V5W25hdGl2ZUV2ZW50LmtleUNvZGVdIHx8ICdVbmlkZW50aWZpZWQnO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBUcmFuc2xhdGlvbiBmcm9tIG1vZGlmaWVyIGtleSB0byB0aGUgYXNzb2NpYXRlZCBwcm9wZXJ0eSBpbiB0aGUgZXZlbnQuXG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8ja2V5cy1Nb2RpZmllcnNcbiAqL1xuXG5cbnZhciBtb2RpZmllcktleVRvUHJvcCA9IHtcbiAgQWx0OiAnYWx0S2V5JyxcbiAgQ29udHJvbDogJ2N0cmxLZXknLFxuICBNZXRhOiAnbWV0YUtleScsXG4gIFNoaWZ0OiAnc2hpZnRLZXknXG59OyAvLyBPbGRlciBicm93c2VycyAoU2FmYXJpIDw9IDEwLCBpT1MgU2FmYXJpIDw9IDEwLjIpIGRvIG5vdCBzdXBwb3J0XG4vLyBnZXRNb2RpZmllclN0YXRlLiBJZiBnZXRNb2RpZmllclN0YXRlIGlzIG5vdCBzdXBwb3J0ZWQsIHdlIG1hcCBpdCB0byBhIHNldCBvZlxuLy8gbW9kaWZpZXIga2V5cyBleHBvc2VkIGJ5IHRoZSBldmVudC4gSW4gdGhpcyBjYXNlLCBMb2NrLWtleXMgYXJlIG5vdCBzdXBwb3J0ZWQuXG5cbmZ1bmN0aW9uIG1vZGlmaWVyU3RhdGVHZXR0ZXIoa2V5QXJnKSB7XG4gIHZhciBzeW50aGV0aWNFdmVudCA9IHRoaXM7XG4gIHZhciBuYXRpdmVFdmVudCA9IHN5bnRoZXRpY0V2ZW50Lm5hdGl2ZUV2ZW50O1xuXG4gIGlmIChuYXRpdmVFdmVudC5nZXRNb2RpZmllclN0YXRlKSB7XG4gICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmdldE1vZGlmaWVyU3RhdGUoa2V5QXJnKTtcbiAgfVxuXG4gIHZhciBrZXlQcm9wID0gbW9kaWZpZXJLZXlUb1Byb3Bba2V5QXJnXTtcbiAgcmV0dXJuIGtleVByb3AgPyAhIW5hdGl2ZUV2ZW50W2tleVByb3BdIDogZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldEV2ZW50TW9kaWZpZXJTdGF0ZShuYXRpdmVFdmVudCkge1xuICByZXR1cm4gbW9kaWZpZXJTdGF0ZUdldHRlcjtcbn1cbi8qKlxuICogQGludGVyZmFjZSBLZXlib2FyZEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy9cbiAqL1xuXG5cbnZhciBLZXlib2FyZEV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgVUlFdmVudEludGVyZmFjZSwge1xuICBrZXk6IGdldEV2ZW50S2V5LFxuICBjb2RlOiAwLFxuICBsb2NhdGlvbjogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgcmVwZWF0OiAwLFxuICBsb2NhbGU6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZSxcbiAgLy8gTGVnYWN5IEludGVyZmFjZVxuICBjaGFyQ29kZTogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgLy8gYGNoYXJDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5UHJlc3MgZXZlbnQgYW5kIHJlcHJlc2VudHMgdGhlIHZhbHVlIG9mXG4gICAgLy8gdGhlIGFjdHVhbCBwcmludGFibGUgY2hhcmFjdGVyLlxuICAgIC8vIEtleVByZXNzIGlzIGRlcHJlY2F0ZWQsIGJ1dCBpdHMgcmVwbGFjZW1lbnQgaXMgbm90IHlldCBmaW5hbCBhbmQgbm90XG4gICAgLy8gaW1wbGVtZW50ZWQgaW4gYW55IG1ham9yIGJyb3dzZXIuIE9ubHkgS2V5UHJlc3MgaGFzIGNoYXJDb2RlLlxuICAgIGlmIChldmVudC50eXBlID09PSAna2V5cHJlc3MnKSB7XG4gICAgICByZXR1cm4gZ2V0RXZlbnRDaGFyQ29kZShldmVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH0sXG4gIGtleUNvZGU6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGBrZXlDb2RlYCBpcyB0aGUgcmVzdWx0IG9mIGEgS2V5RG93bi9VcCBldmVudCBhbmQgcmVwcmVzZW50cyB0aGUgdmFsdWUgb2ZcbiAgICAvLyBwaHlzaWNhbCBrZXlib2FyZCBrZXkuXG4gICAgLy8gVGhlIGFjdHVhbCBtZWFuaW5nIG9mIHRoZSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSB1c2Vycycga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gd2hpY2ggY2Fubm90IGJlIGRldGVjdGVkLiBBc3N1bWluZyB0aGF0IGl0IGlzIGEgVVMga2V5Ym9hcmQgbGF5b3V0XG4gICAgLy8gcHJvdmlkZXMgYSBzdXJwcmlzaW5nbHkgYWNjdXJhdGUgbWFwcGluZyBmb3IgVVMgYW5kIEV1cm9wZWFuIHVzZXJzLlxuICAgIC8vIER1ZSB0byB0aGlzLCBpdCBpcyBsZWZ0IHRvIHRoZSB1c2VyIHRvIGltcGxlbWVudCBhdCB0aGlzIHRpbWUuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyB8fCBldmVudC50eXBlID09PSAna2V5dXAnKSB7XG4gICAgICByZXR1cm4gZXZlbnQua2V5Q29kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfSxcbiAgd2hpY2g6IGZ1bmN0aW9uIChldmVudCkge1xuICAgIC8vIGB3aGljaGAgaXMgYW4gYWxpYXMgZm9yIGVpdGhlciBga2V5Q29kZWAgb3IgYGNoYXJDb2RlYCBkZXBlbmRpbmcgb24gdGhlXG4gICAgLy8gdHlwZSBvZiB0aGUgZXZlbnQuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycpIHtcbiAgICAgIHJldHVybiBnZXRFdmVudENoYXJDb2RlKGV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcpIHtcbiAgICAgIHJldHVybiBldmVudC5rZXlDb2RlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG59KTtcblxudmFyIFN5bnRoZXRpY0tleWJvYXJkRXZlbnQgPSBjcmVhdGVTeW50aGV0aWNFdmVudChLZXlib2FyZEV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBQb2ludGVyRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvcG9pbnRlcmV2ZW50cy9cbiAqL1xuXG52YXIgUG9pbnRlckV2ZW50SW50ZXJmYWNlID0gX2Fzc2lnbih7fSwgTW91c2VFdmVudEludGVyZmFjZSwge1xuICBwb2ludGVySWQ6IDAsXG4gIHdpZHRoOiAwLFxuICBoZWlnaHQ6IDAsXG4gIHByZXNzdXJlOiAwLFxuICB0YW5nZW50aWFsUHJlc3N1cmU6IDAsXG4gIHRpbHRYOiAwLFxuICB0aWx0WTogMCxcbiAgdHdpc3Q6IDAsXG4gIHBvaW50ZXJUeXBlOiAwLFxuICBpc1ByaW1hcnk6IDBcbn0pO1xuXG52YXIgU3ludGhldGljUG9pbnRlckV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoUG9pbnRlckV2ZW50SW50ZXJmYWNlKTtcbi8qKlxuICogQGludGVyZmFjZSBUb3VjaEV2ZW50XG4gKiBAc2VlIGh0dHA6Ly93d3cudzMub3JnL1RSL3RvdWNoLWV2ZW50cy9cbiAqL1xuXG52YXIgVG91Y2hFdmVudEludGVyZmFjZSA9IF9hc3NpZ24oe30sIFVJRXZlbnRJbnRlcmZhY2UsIHtcbiAgdG91Y2hlczogMCxcbiAgdGFyZ2V0VG91Y2hlczogMCxcbiAgY2hhbmdlZFRvdWNoZXM6IDAsXG4gIGFsdEtleTogMCxcbiAgbWV0YUtleTogMCxcbiAgY3RybEtleTogMCxcbiAgc2hpZnRLZXk6IDAsXG4gIGdldE1vZGlmaWVyU3RhdGU6IGdldEV2ZW50TW9kaWZpZXJTdGF0ZVxufSk7XG5cbnZhciBTeW50aGV0aWNUb3VjaEV2ZW50ID0gY3JlYXRlU3ludGhldGljRXZlbnQoVG91Y2hFdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgRXZlbnRcbiAqIEBzZWUgaHR0cDovL3d3dy53My5vcmcvVFIvMjAwOS9XRC1jc3MzLXRyYW5zaXRpb25zLTIwMDkwMzIwLyN0cmFuc2l0aW9uLWV2ZW50cy1cbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1RyYW5zaXRpb25FdmVudFxuICovXG5cbnZhciBUcmFuc2l0aW9uRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBFdmVudEludGVyZmFjZSwge1xuICBwcm9wZXJ0eU5hbWU6IDAsXG4gIGVsYXBzZWRUaW1lOiAwLFxuICBwc2V1ZG9FbGVtZW50OiAwXG59KTtcblxudmFyIFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFRyYW5zaXRpb25FdmVudEludGVyZmFjZSk7XG4vKipcbiAqIEBpbnRlcmZhY2UgV2hlZWxFdmVudFxuICogQHNlZSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvXG4gKi9cblxudmFyIFdoZWVsRXZlbnRJbnRlcmZhY2UgPSBfYXNzaWduKHt9LCBNb3VzZUV2ZW50SW50ZXJmYWNlLCB7XG4gIGRlbHRhWDogZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgcmV0dXJuICdkZWx0YVgnIGluIGV2ZW50ID8gZXZlbnQuZGVsdGFYIDogLy8gRmFsbGJhY2sgdG8gYHdoZWVsRGVsdGFYYCBmb3IgV2Via2l0IGFuZCBub3JtYWxpemUgKHJpZ2h0IGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YVgnIGluIGV2ZW50ID8gLWV2ZW50LndoZWVsRGVsdGFYIDogMDtcbiAgfSxcbiAgZGVsdGFZOiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICByZXR1cm4gJ2RlbHRhWScgaW4gZXZlbnQgPyBldmVudC5kZWx0YVkgOiAvLyBGYWxsYmFjayB0byBgd2hlZWxEZWx0YVlgIGZvciBXZWJraXQgYW5kIG5vcm1hbGl6ZSAoZG93biBpcyBwb3NpdGl2ZSkuXG4gICAgJ3doZWVsRGVsdGFZJyBpbiBldmVudCA/IC1ldmVudC53aGVlbERlbHRhWSA6IC8vIEZhbGxiYWNrIHRvIGB3aGVlbERlbHRhYCBmb3IgSUU8OSBhbmQgbm9ybWFsaXplIChkb3duIGlzIHBvc2l0aXZlKS5cbiAgICAnd2hlZWxEZWx0YScgaW4gZXZlbnQgPyAtZXZlbnQud2hlZWxEZWx0YSA6IDA7XG4gIH0sXG4gIGRlbHRhWjogMCxcbiAgLy8gQnJvd3NlcnMgd2l0aG91dCBcImRlbHRhTW9kZVwiIGlzIHJlcG9ydGluZyBpbiByYXcgd2hlZWwgZGVsdGEgd2hlcmUgb25lXG4gIC8vIG5vdGNoIG9uIHRoZSBzY3JvbGwgaXMgYWx3YXlzICsvLSAxMjAsIHJvdWdobHkgZXF1aXZhbGVudCB0byBwaXhlbHMuXG4gIC8vIEEgZ29vZCBhcHByb3hpbWF0aW9uIG9mIERPTV9ERUxUQV9MSU5FICgxKSBpcyA1JSBvZiB2aWV3cG9ydCBzaXplIG9yXG4gIC8vIH40MCBwaXhlbHMsIGZvciBET01fREVMVEFfU0NSRUVOICgyKSBpdCBpcyA4Ny41JSBvZiB2aWV3cG9ydCBzaXplLlxuICBkZWx0YU1vZGU6IDBcbn0pO1xuXG52YXIgU3ludGhldGljV2hlZWxFdmVudCA9IGNyZWF0ZVN5bnRoZXRpY0V2ZW50KFdoZWVsRXZlbnRJbnRlcmZhY2UpO1xuXG52YXIgRU5EX0tFWUNPREVTID0gWzksIDEzLCAyNywgMzJdOyAvLyBUYWIsIFJldHVybiwgRXNjLCBTcGFjZVxuXG52YXIgU1RBUlRfS0VZQ09ERSA9IDIyOTtcbnZhciBjYW5Vc2VDb21wb3NpdGlvbkV2ZW50ID0gY2FuVXNlRE9NICYmICdDb21wb3NpdGlvbkV2ZW50JyBpbiB3aW5kb3c7XG52YXIgZG9jdW1lbnRNb2RlID0gbnVsbDtcblxuaWYgKGNhblVzZURPTSAmJiAnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCkge1xuICBkb2N1bWVudE1vZGUgPSBkb2N1bWVudC5kb2N1bWVudE1vZGU7XG59IC8vIFdlYmtpdCBvZmZlcnMgYSB2ZXJ5IHVzZWZ1bCBgdGV4dElucHV0YCBldmVudCB0aGF0IGNhbiBiZSB1c2VkIHRvXG4vLyBkaXJlY3RseSByZXByZXNlbnQgYGJlZm9yZUlucHV0YC4gVGhlIElFIGB0ZXh0aW5wdXRgIGV2ZW50IGlzIG5vdCBhc1xuLy8gdXNlZnVsLCBzbyB3ZSBkb24ndCB1c2UgaXQuXG5cblxudmFyIGNhblVzZVRleHRJbnB1dEV2ZW50ID0gY2FuVXNlRE9NICYmICdUZXh0RXZlbnQnIGluIHdpbmRvdyAmJiAhZG9jdW1lbnRNb2RlOyAvLyBJbiBJRTkrLCB3ZSBoYXZlIGFjY2VzcyB0byBjb21wb3NpdGlvbiBldmVudHMsIGJ1dCB0aGUgZGF0YSBzdXBwbGllZFxuLy8gYnkgdGhlIG5hdGl2ZSBjb21wb3NpdGlvbmVuZCBldmVudCBtYXkgYmUgaW5jb3JyZWN0LiBKYXBhbmVzZSBpZGVvZ3JhcGhpY1xuLy8gc3BhY2VzLCBmb3IgaW5zdGFuY2UgKFxcdTMwMDApIGFyZSBub3QgcmVjb3JkZWQgY29ycmVjdGx5LlxuXG52YXIgdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgPSBjYW5Vc2VET00gJiYgKCFjYW5Vc2VDb21wb3NpdGlvbkV2ZW50IHx8IGRvY3VtZW50TW9kZSAmJiBkb2N1bWVudE1vZGUgPiA4ICYmIGRvY3VtZW50TW9kZSA8PSAxMSk7XG52YXIgU1BBQ0VCQVJfQ09ERSA9IDMyO1xudmFyIFNQQUNFQkFSX0NIQVIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKFNQQUNFQkFSX0NPREUpO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cygpIHtcbiAgcmVnaXN0ZXJUd29QaGFzZUV2ZW50KCdvbkJlZm9yZUlucHV0JywgWydjb21wb3NpdGlvbmVuZCcsICdrZXlwcmVzcycsICd0ZXh0SW5wdXQnLCAncGFzdGUnXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvbkVuZCcsIFsnY29tcG9zaXRpb25lbmQnLCAnZm9jdXNvdXQnLCAna2V5ZG93bicsICdrZXlwcmVzcycsICdrZXl1cCcsICdtb3VzZWRvd24nXSk7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25Db21wb3NpdGlvblN0YXJ0JywgWydjb21wb3NpdGlvbnN0YXJ0JywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uQ29tcG9zaXRpb25VcGRhdGUnLCBbJ2NvbXBvc2l0aW9udXBkYXRlJywgJ2ZvY3Vzb3V0JywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnbW91c2Vkb3duJ10pO1xufSAvLyBUcmFjayB3aGV0aGVyIHdlJ3ZlIGV2ZXIgaGFuZGxlZCBhIGtleXByZXNzIG9uIHRoZSBzcGFjZSBrZXkuXG5cblxudmFyIGhhc1NwYWNlS2V5cHJlc3MgPSBmYWxzZTtcbi8qKlxuICogUmV0dXJuIHdoZXRoZXIgYSBuYXRpdmUga2V5cHJlc3MgZXZlbnQgaXMgYXNzdW1lZCB0byBiZSBhIGNvbW1hbmQuXG4gKiBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgRmlyZWZveCBmaXJlcyBga2V5cHJlc3NgIGV2ZW50cyBmb3Iga2V5IGNvbW1hbmRzXG4gKiAoY3V0LCBjb3B5LCBzZWxlY3QtYWxsLCBldGMuKSBldmVuIHRob3VnaCBubyBjaGFyYWN0ZXIgaXMgaW5zZXJ0ZWQuXG4gKi9cblxuZnVuY3Rpb24gaXNLZXlwcmVzc0NvbW1hbmQobmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIChuYXRpdmVFdmVudC5jdHJsS2V5IHx8IG5hdGl2ZUV2ZW50LmFsdEtleSB8fCBuYXRpdmVFdmVudC5tZXRhS2V5KSAmJiAvLyBjdHJsS2V5ICYmIGFsdEtleSBpcyBlcXVpdmFsZW50IHRvIEFsdEdyLCBhbmQgaXMgbm90IGEgY29tbWFuZC5cbiAgIShuYXRpdmVFdmVudC5jdHJsS2V5ICYmIG5hdGl2ZUV2ZW50LmFsdEtleSk7XG59XG4vKipcbiAqIFRyYW5zbGF0ZSBuYXRpdmUgdG9wIGxldmVsIGV2ZW50cyBpbnRvIGV2ZW50IHR5cGVzLlxuICovXG5cblxuZnVuY3Rpb24gZ2V0Q29tcG9zaXRpb25FdmVudFR5cGUoZG9tRXZlbnROYW1lKSB7XG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAnY29tcG9zaXRpb25zdGFydCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25TdGFydCc7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gJ29uQ29tcG9zaXRpb25FbmQnO1xuXG4gICAgY2FzZSAnY29tcG9zaXRpb251cGRhdGUnOlxuICAgICAgcmV0dXJuICdvbkNvbXBvc2l0aW9uVXBkYXRlJztcbiAgfVxufVxuLyoqXG4gKiBEb2VzIG91ciBmYWxsYmFjayBiZXN0LWd1ZXNzIG1vZGVsIHRoaW5rIHRoaXMgZXZlbnQgc2lnbmlmaWVzIHRoYXRcbiAqIGNvbXBvc2l0aW9uIGhhcyBiZWd1bj9cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzRmFsbGJhY2tDb21wb3NpdGlvblN0YXJ0KGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSA9PT0gJ2tleWRvd24nICYmIG5hdGl2ZUV2ZW50LmtleUNvZGUgPT09IFNUQVJUX0tFWUNPREU7XG59XG4vKipcbiAqIERvZXMgb3VyIGZhbGxiYWNrIG1vZGUgdGhpbmsgdGhhdCB0aGlzIGV2ZW50IGlzIHRoZSBlbmQgb2YgY29tcG9zaXRpb24/XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcG9zaXRpb25FbmQoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICBzd2l0Y2ggKGRvbUV2ZW50TmFtZSkge1xuICAgIGNhc2UgJ2tleXVwJzpcbiAgICAgIC8vIENvbW1hbmQga2V5cyBpbnNlcnQgb3IgY2xlYXIgSU1FIGlucHV0LlxuICAgICAgcmV0dXJuIEVORF9LRVlDT0RFUy5pbmRleE9mKG5hdGl2ZUV2ZW50LmtleUNvZGUpICE9PSAtMTtcblxuICAgIGNhc2UgJ2tleWRvd24nOlxuICAgICAgLy8gRXhwZWN0IElNRSBrZXlDb2RlIG9uIGVhY2gga2V5ZG93bi4gSWYgd2UgZ2V0IGFueSBvdGhlclxuICAgICAgLy8gY29kZSB3ZSBtdXN0IGhhdmUgZXhpdGVkIGVhcmxpZXIuXG4gICAgICByZXR1cm4gbmF0aXZlRXZlbnQua2V5Q29kZSAhPT0gU1RBUlRfS0VZQ09ERTtcblxuICAgIGNhc2UgJ2tleXByZXNzJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgIC8vIEV2ZW50cyBhcmUgbm90IHBvc3NpYmxlIHdpdGhvdXQgY2FuY2VsbGluZyBJTUUuXG4gICAgICByZXR1cm4gdHJ1ZTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbi8qKlxuICogR29vZ2xlIElucHV0IFRvb2xzIHByb3ZpZGVzIGNvbXBvc2l0aW9uIGRhdGEgdmlhIGEgQ3VzdG9tRXZlbnQsXG4gKiB3aXRoIHRoZSBgZGF0YWAgcHJvcGVydHkgcG9wdWxhdGVkIGluIHRoZSBgZGV0YWlsYCBvYmplY3QuIElmIHRoaXNcbiAqIGlzIGF2YWlsYWJsZSBvbiB0aGUgZXZlbnQgb2JqZWN0LCB1c2UgaXQuIElmIG5vdCwgdGhpcyBpcyBhIHBsYWluXG4gKiBjb21wb3NpdGlvbiBldmVudCBhbmQgd2UgaGF2ZSBub3RoaW5nIHNwZWNpYWwgdG8gZXh0cmFjdC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4gez9zdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUN1c3RvbUV2ZW50KG5hdGl2ZUV2ZW50KSB7XG4gIHZhciBkZXRhaWwgPSBuYXRpdmVFdmVudC5kZXRhaWw7XG5cbiAgaWYgKHR5cGVvZiBkZXRhaWwgPT09ICdvYmplY3QnICYmICdkYXRhJyBpbiBkZXRhaWwpIHtcbiAgICByZXR1cm4gZGV0YWlsLmRhdGE7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYSBjb21wb3NpdGlvbiBldmVudCB3YXMgdHJpZ2dlcmVkIGJ5IEtvcmVhbiBJTUUuXG4gKiBPdXIgZmFsbGJhY2sgbW9kZSBkb2VzIG5vdCB3b3JrIHdlbGwgd2l0aCBJRSdzIEtvcmVhbiBJTUUsXG4gKiBzbyBqdXN0IHVzZSBuYXRpdmUgY29tcG9zaXRpb24gZXZlbnRzIHdoZW4gS29yZWFuIElNRSBpcyB1c2VkLlxuICogQWx0aG91Z2ggQ29tcG9zaXRpb25FdmVudC5sb2NhbGUgcHJvcGVydHkgaXMgZGVwcmVjYXRlZCxcbiAqIGl0IGlzIGF2YWlsYWJsZSBpbiBJRSwgd2hlcmUgb3VyIGZhbGxiYWNrIG1vZGUgaXMgZW5hYmxlZC5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gbmF0aXZlRXZlbnRcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc1VzaW5nS29yZWFuSU1FKG5hdGl2ZUV2ZW50KSB7XG4gIHJldHVybiBuYXRpdmVFdmVudC5sb2NhbGUgPT09ICdrbyc7XG59IC8vIFRyYWNrIHRoZSBjdXJyZW50IElNRSBjb21wb3NpdGlvbiBzdGF0dXMsIGlmIGFueS5cblxuXG52YXIgaXNDb21wb3NpbmcgPSBmYWxzZTtcbi8qKlxuICogQHJldHVybiB7P29iamVjdH0gQSBTeW50aGV0aWNDb21wb3NpdGlvbkV2ZW50LlxuICovXG5cbmZ1bmN0aW9uIGV4dHJhY3RDb21wb3NpdGlvbkV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBldmVudFR5cGU7XG4gIHZhciBmYWxsYmFja0RhdGE7XG5cbiAgaWYgKGNhblVzZUNvbXBvc2l0aW9uRXZlbnQpIHtcbiAgICBldmVudFR5cGUgPSBnZXRDb21wb3NpdGlvbkV2ZW50VHlwZShkb21FdmVudE5hbWUpO1xuICB9IGVsc2UgaWYgKCFpc0NvbXBvc2luZykge1xuICAgIGlmIChpc0ZhbGxiYWNrQ29tcG9zaXRpb25TdGFydChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgICAgZXZlbnRUeXBlID0gJ29uQ29tcG9zaXRpb25TdGFydCc7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wb3NpdGlvbkVuZChkb21FdmVudE5hbWUsIG5hdGl2ZUV2ZW50KSkge1xuICAgIGV2ZW50VHlwZSA9ICdvbkNvbXBvc2l0aW9uRW5kJztcbiAgfVxuXG4gIGlmICghZXZlbnRUeXBlKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAodXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpKSB7XG4gICAgLy8gVGhlIGN1cnJlbnQgY29tcG9zaXRpb24gaXMgc3RvcmVkIHN0YXRpY2FsbHkgYW5kIG11c3Qgbm90IGJlXG4gICAgLy8gb3ZlcndyaXR0ZW4gd2hpbGUgY29tcG9zaXRpb24gY29udGludWVzLlxuICAgIGlmICghaXNDb21wb3NpbmcgJiYgZXZlbnRUeXBlID09PSAnb25Db21wb3NpdGlvblN0YXJ0Jykge1xuICAgICAgaXNDb21wb3NpbmcgPSBpbml0aWFsaXplKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50VHlwZSA9PT0gJ29uQ29tcG9zaXRpb25FbmQnKSB7XG4gICAgICBpZiAoaXNDb21wb3NpbmcpIHtcbiAgICAgICAgZmFsbGJhY2tEYXRhID0gZ2V0RGF0YSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgZXZlbnRUeXBlKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljQ29tcG9zaXRpb25FdmVudChldmVudFR5cGUsIGRvbUV2ZW50TmFtZSwgbnVsbCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBkaXNwYXRjaFF1ZXVlLnB1c2goe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNcbiAgICB9KTtcblxuICAgIGlmIChmYWxsYmFja0RhdGEpIHtcbiAgICAgIC8vIEluamVjdCBkYXRhIGdlbmVyYXRlZCBmcm9tIGZhbGxiYWNrIHBhdGggaW50byB0aGUgc3ludGhldGljIGV2ZW50LlxuICAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBwcm9wZXJ0eSBvZiBuYXRpdmUgQ29tcG9zaXRpb25FdmVudEludGVyZmFjZS5cbiAgICAgIGV2ZW50LmRhdGEgPSBmYWxsYmFja0RhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBjdXN0b21EYXRhID0gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICAgIGlmIChjdXN0b21EYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGV2ZW50LmRhdGEgPSBjdXN0b21EYXRhO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXROYXRpdmVCZWZvcmVJbnB1dENoYXJzKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpIHtcbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gZ2V0RGF0YUZyb21DdXN0b21FdmVudChuYXRpdmVFdmVudCk7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIElmIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudHMgYXJlIGF2YWlsYWJsZSwgb3VyIGdvYWwgaXMgdG8gbWFrZVxuICAgICAgICogdXNlIG9mIHRoZW0uIEhvd2V2ZXIsIHRoZXJlIGlzIGEgc3BlY2lhbCBjYXNlOiB0aGUgc3BhY2ViYXIga2V5LlxuICAgICAgICogSW4gV2Via2l0LCBwcmV2ZW50aW5nIGRlZmF1bHQgb24gYSBzcGFjZWJhciBgdGV4dElucHV0YCBldmVudFxuICAgICAgICogY2FuY2VscyBjaGFyYWN0ZXIgaW5zZXJ0aW9uLCBidXQgaXQgKmFsc28qIGNhdXNlcyB0aGUgYnJvd3NlclxuICAgICAgICogdG8gZmFsbCBiYWNrIHRvIGl0cyBkZWZhdWx0IHNwYWNlYmFyIGJlaGF2aW9yIG9mIHNjcm9sbGluZyB0aGVcbiAgICAgICAqIHBhZ2UuXG4gICAgICAgKlxuICAgICAgICogVHJhY2tpbmcgYXQ6XG4gICAgICAgKiBodHRwczovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9MzU1MTAzXG4gICAgICAgKlxuICAgICAgICogVG8gYXZvaWQgdGhpcyBpc3N1ZSwgdXNlIHRoZSBrZXlwcmVzcyBldmVudCBhcyBpZiBubyBgdGV4dElucHV0YFxuICAgICAgICogZXZlbnQgaXMgYXZhaWxhYmxlLlxuICAgICAgICovXG4gICAgICB2YXIgd2hpY2ggPSBuYXRpdmVFdmVudC53aGljaDtcblxuICAgICAgaWYgKHdoaWNoICE9PSBTUEFDRUJBUl9DT0RFKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICBoYXNTcGFjZUtleXByZXNzID0gdHJ1ZTtcbiAgICAgIHJldHVybiBTUEFDRUJBUl9DSEFSO1xuXG4gICAgY2FzZSAndGV4dElucHV0JzpcbiAgICAgIC8vIFJlY29yZCB0aGUgY2hhcmFjdGVycyB0byBiZSBhZGRlZCB0byB0aGUgRE9NLlxuICAgICAgdmFyIGNoYXJzID0gbmF0aXZlRXZlbnQuZGF0YTsgLy8gSWYgaXQncyBhIHNwYWNlYmFyIGNoYXJhY3RlciwgYXNzdW1lIHRoYXQgd2UgaGF2ZSBhbHJlYWR5IGhhbmRsZWRcbiAgICAgIC8vIGl0IGF0IHRoZSBrZXlwcmVzcyBsZXZlbCBhbmQgYmFpbCBpbW1lZGlhdGVseS4gQW5kcm9pZCBDaHJvbWVcbiAgICAgIC8vIGRvZXNuJ3QgZ2l2ZSB1cyBrZXljb2Rlcywgc28gd2UgbmVlZCB0byBpZ25vcmUgaXQuXG5cbiAgICAgIGlmIChjaGFycyA9PT0gU1BBQ0VCQVJfQ0hBUiAmJiBoYXNTcGFjZUtleXByZXNzKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hhcnM7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gRm9yIG90aGVyIG5hdGl2ZSBldmVudCB0eXBlcywgZG8gbm90aGluZy5cbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEZvciBicm93c2VycyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZSBgdGV4dElucHV0YCBldmVudCwgZXh0cmFjdCB0aGVcbiAqIGFwcHJvcHJpYXRlIHN0cmluZyB0byB1c2UgZm9yIFN5bnRoZXRpY0lucHV0RXZlbnQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCkge1xuICAvLyBJZiB3ZSBhcmUgY3VycmVudGx5IGNvbXBvc2luZyAoSU1FKSBhbmQgdXNpbmcgYSBmYWxsYmFjayB0byBkbyBzbyxcbiAgLy8gdHJ5IHRvIGV4dHJhY3QgdGhlIGNvbXBvc2VkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZmFsbGJhY2sgb2JqZWN0LlxuICAvLyBJZiBjb21wb3NpdGlvbiBldmVudCBpcyBhdmFpbGFibGUsIHdlIGV4dHJhY3QgYSBzdHJpbmcgb25seSBhdFxuICAvLyBjb21wb3NpdGlvbmV2ZW50LCBvdGhlcndpc2UgZXh0cmFjdCBpdCBhdCBmYWxsYmFjayBldmVudHMuXG4gIGlmIChpc0NvbXBvc2luZykge1xuICAgIGlmIChkb21FdmVudE5hbWUgPT09ICdjb21wb3NpdGlvbmVuZCcgfHwgIWNhblVzZUNvbXBvc2l0aW9uRXZlbnQgJiYgaXNGYWxsYmFja0NvbXBvc2l0aW9uRW5kKGRvbUV2ZW50TmFtZSwgbmF0aXZlRXZlbnQpKSB7XG4gICAgICB2YXIgY2hhcnMgPSBnZXREYXRhKCk7XG4gICAgICByZXNldCgpO1xuICAgICAgaXNDb21wb3NpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybiBjaGFycztcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoZG9tRXZlbnROYW1lKSB7XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgLy8gSWYgYSBwYXN0ZSBldmVudCBvY2N1cnMgYWZ0ZXIgYSBrZXlwcmVzcywgdGhyb3cgb3V0IHRoZSBpbnB1dFxuICAgICAgLy8gY2hhcnMuIFBhc3RlIGV2ZW50cyBzaG91bGQgbm90IGxlYWQgdG8gQmVmb3JlSW5wdXQgZXZlbnRzLlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvKipcbiAgICAgICAqIEFzIG9mIHYyNywgRmlyZWZveCBtYXkgZmlyZSBrZXlwcmVzcyBldmVudHMgZXZlbiB3aGVuIG5vIGNoYXJhY3RlclxuICAgICAgICogd2lsbCBiZSBpbnNlcnRlZC4gQSBmZXcgcG9zc2liaWxpdGllczpcbiAgICAgICAqXG4gICAgICAgKiAtIGB3aGljaGAgaXMgYDBgLiBBcnJvdyBrZXlzLCBFc2Mga2V5LCBldGMuXG4gICAgICAgKlxuICAgICAgICogLSBgd2hpY2hgIGlzIHRoZSBwcmVzc2VkIGtleSBjb2RlLCBidXQgbm8gY2hhciBpcyBhdmFpbGFibGUuXG4gICAgICAgKiAgIEV4OiAnQWx0R3IgKyBkYCBpbiBQb2xpc2guIFRoZXJlIGlzIG5vIG1vZGlmaWVkIGNoYXJhY3RlciBmb3JcbiAgICAgICAqICAgdGhpcyBrZXkgY29tYmluYXRpb24gYW5kIG5vIGNoYXJhY3RlciBpcyBpbnNlcnRlZCBpbnRvIHRoZVxuICAgICAgICogICBkb2N1bWVudCwgYnV0IEZGIGZpcmVzIHRoZSBrZXlwcmVzcyBmb3IgY2hhciBjb2RlIGAxMDBgIGFueXdheS5cbiAgICAgICAqICAgTm8gYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICpcbiAgICAgICAqIC0gYHdoaWNoYCBpcyB0aGUgcHJlc3NlZCBrZXkgY29kZSwgYnV0IGEgY29tbWFuZCBjb21iaW5hdGlvbiBpc1xuICAgICAgICogICBiZWluZyB1c2VkLiBFeDogYENtZCtDYC4gTm8gY2hhcmFjdGVyIGlzIGluc2VydGVkLCBhbmQgbm9cbiAgICAgICAqICAgYGlucHV0YCBldmVudCB3aWxsIG9jY3VyLlxuICAgICAgICovXG4gICAgICBpZiAoIWlzS2V5cHJlc3NDb21tYW5kKG5hdGl2ZUV2ZW50KSkge1xuICAgICAgICAvLyBJRSBmaXJlcyB0aGUgYGtleXByZXNzYCBldmVudCB3aGVuIGEgdXNlciB0eXBlcyBhbiBlbW9qaSB2aWFcbiAgICAgICAgLy8gVG91Y2gga2V5Ym9hcmQgb2YgV2luZG93cy4gIEluIHN1Y2ggYSBjYXNlLCB0aGUgYGNoYXJgIHByb3BlcnR5XG4gICAgICAgIC8vIGhvbGRzIGFuIGVtb2ppIGNoYXJhY3RlciBsaWtlIGBcXHVEODNEXFx1REUwQWAuICBCZWNhdXNlIGl0cyBsZW5ndGhcbiAgICAgICAgLy8gaXMgMiwgdGhlIHByb3BlcnR5IGB3aGljaGAgZG9lcyBub3QgcmVwcmVzZW50IGFuIGVtb2ppIGNvcnJlY3RseS5cbiAgICAgICAgLy8gSW4gc3VjaCBhIGNhc2UsIHdlIGRpcmVjdGx5IHJldHVybiB0aGUgYGNoYXJgIHByb3BlcnR5IGluc3RlYWQgb2ZcbiAgICAgICAgLy8gdXNpbmcgYHdoaWNoYC5cbiAgICAgICAgaWYgKG5hdGl2ZUV2ZW50LmNoYXIgJiYgbmF0aXZlRXZlbnQuY2hhci5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5hdGl2ZUV2ZW50LmNoYXI7XG4gICAgICAgIH0gZWxzZSBpZiAobmF0aXZlRXZlbnQud2hpY2gpIHtcbiAgICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuYXRpdmVFdmVudC53aGljaCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlICdjb21wb3NpdGlvbmVuZCc6XG4gICAgICByZXR1cm4gdXNlRmFsbGJhY2tDb21wb3NpdGlvbkRhdGEgJiYgIWlzVXNpbmdLb3JlYW5JTUUobmF0aXZlRXZlbnQpID8gbnVsbCA6IG5hdGl2ZUV2ZW50LmRhdGE7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbi8qKlxuICogRXh0cmFjdCBhIFN5bnRoZXRpY0lucHV0RXZlbnQgZm9yIGBiZWZvcmVJbnB1dGAsIGJhc2VkIG9uIGVpdGhlciBuYXRpdmVcbiAqIGB0ZXh0SW5wdXRgIG9yIGZhbGxiYWNrIGJlaGF2aW9yLlxuICpcbiAqIEByZXR1cm4gez9vYmplY3R9IEEgU3ludGhldGljSW5wdXRFdmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RCZWZvcmVJbnB1dEV2ZW50KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KSB7XG4gIHZhciBjaGFycztcblxuICBpZiAoY2FuVXNlVGV4dElucHV0RXZlbnQpIHtcbiAgICBjaGFycyA9IGdldE5hdGl2ZUJlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gZWxzZSB7XG4gICAgY2hhcnMgPSBnZXRGYWxsYmFja0JlZm9yZUlucHV0Q2hhcnMoZG9tRXZlbnROYW1lLCBuYXRpdmVFdmVudCk7XG4gIH0gLy8gSWYgbm8gY2hhcmFjdGVycyBhcmUgYmVpbmcgaW5zZXJ0ZWQsIG5vIEJlZm9yZUlucHV0IGV2ZW50IHNob3VsZFxuICAvLyBiZSBmaXJlZC5cblxuXG4gIGlmICghY2hhcnMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBsaXN0ZW5lcnMgPSBhY2N1bXVsYXRlVHdvUGhhc2VMaXN0ZW5lcnModGFyZ2V0SW5zdCwgJ29uQmVmb3JlSW5wdXQnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljSW5wdXRFdmVudCgnb25CZWZvcmVJbnB1dCcsICdiZWZvcmVpbnB1dCcsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgIGxpc3RlbmVyczogbGlzdGVuZXJzXG4gICAgfSk7XG4gICAgZXZlbnQuZGF0YSA9IGNoYXJzO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZSBhbiBgb25CZWZvcmVJbnB1dGAgZXZlbnQgdG8gbWF0Y2hcbiAqIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMTMxMTA1LyNldmVudHMtaW5wdXRldmVudHMuXG4gKlxuICogVGhpcyBldmVudCBwbHVnaW4gaXMgYmFzZWQgb24gdGhlIG5hdGl2ZSBgdGV4dElucHV0YCBldmVudFxuICogYXZhaWxhYmxlIGluIENocm9tZSwgU2FmYXJpLCBPcGVyYSwgYW5kIElFLiBUaGlzIGV2ZW50IGZpcmVzIGFmdGVyXG4gKiBgb25LZXlQcmVzc2AgYW5kIGBvbkNvbXBvc2l0aW9uRW5kYCwgYnV0IGJlZm9yZSBgb25JbnB1dGAuXG4gKlxuICogYGJlZm9yZUlucHV0YCBpcyBzcGVjJ2QgYnV0IG5vdCBpbXBsZW1lbnRlZCBpbiBhbnkgYnJvd3NlcnMsIGFuZFxuICogdGhlIGBpbnB1dGAgZXZlbnQgZG9lcyBub3QgcHJvdmlkZSBhbnkgdXNlZnVsIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgaGFzXG4gKiBhY3R1YWxseSBiZWVuIGFkZGVkLCBjb250cmFyeSB0byB0aGUgc3BlYy4gVGh1cywgYHRleHRJbnB1dGAgaXMgdGhlIGJlc3RcbiAqIGF2YWlsYWJsZSBldmVudCB0byBpZGVudGlmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGhhdmUgYWN0dWFsbHkgYmVlbiBpbnNlcnRlZFxuICogaW50byB0aGUgdGFyZ2V0IG5vZGUuXG4gKlxuICogVGhpcyBwbHVnaW4gaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgYGNvbXBvc2l0aW9uYCBldmVudHMsIHRodXNcbiAqIGFsbG93aW5nIHVzIHRvIHNoYXJlIGNvbXBvc2l0aW9uIGZhbGxiYWNrIGNvZGUgZm9yIGJvdGggYGJlZm9yZUlucHV0YCBhbmRcbiAqIGBjb21wb3NpdGlvbmAgZXZlbnQgdHlwZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgZXh0cmFjdENvbXBvc2l0aW9uRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICBleHRyYWN0QmVmb3JlSW5wdXRFdmVudChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG59XG5cbi8qKlxuICogQHNlZSBodHRwOi8vd3d3LndoYXR3Zy5vcmcvc3BlY3Mvd2ViLWFwcHMvY3VycmVudC13b3JrL211bHRpcGFnZS90aGUtaW5wdXQtZWxlbWVudC5odG1sI2lucHV0LXR5cGUtYXR0ci1zdW1tYXJ5XG4gKi9cbnZhciBzdXBwb3J0ZWRJbnB1dFR5cGVzID0ge1xuICBjb2xvcjogdHJ1ZSxcbiAgZGF0ZTogdHJ1ZSxcbiAgZGF0ZXRpbWU6IHRydWUsXG4gICdkYXRldGltZS1sb2NhbCc6IHRydWUsXG4gIGVtYWlsOiB0cnVlLFxuICBtb250aDogdHJ1ZSxcbiAgbnVtYmVyOiB0cnVlLFxuICBwYXNzd29yZDogdHJ1ZSxcbiAgcmFuZ2U6IHRydWUsXG4gIHNlYXJjaDogdHJ1ZSxcbiAgdGVsOiB0cnVlLFxuICB0ZXh0OiB0cnVlLFxuICB0aW1lOiB0cnVlLFxuICB1cmw6IHRydWUsXG4gIHdlZWs6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGlzVGV4dElucHV0RWxlbWVudChlbGVtKSB7XG4gIHZhciBub2RlTmFtZSA9IGVsZW0gJiYgZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKG5vZGVOYW1lID09PSAnaW5wdXQnKSB7XG4gICAgcmV0dXJuICEhc3VwcG9ydGVkSW5wdXRUeXBlc1tlbGVtLnR5cGVdO1xuICB9XG5cbiAgaWYgKG5vZGVOYW1lID09PSAndGV4dGFyZWEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIGV2ZW50IGlzIHN1cHBvcnRlZCBpbiB0aGUgY3VycmVudCBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gKlxuICogTk9URTogVGhpcyB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseSBmb3Igbm9uLWdlbmVyaWMgZXZlbnRzIHN1Y2ggYXMgYGNoYW5nZWAsXG4gKiBgcmVzZXRgLCBgbG9hZGAsIGBlcnJvcmAsIGFuZCBgc2VsZWN0YC5cbiAqXG4gKiBCb3Jyb3dzIGZyb20gTW9kZXJuaXpyLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBldmVudE5hbWVTdWZmaXggRXZlbnQgbmFtZSwgZS5nLiBcImNsaWNrXCIuXG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBldmVudCBpcyBzdXBwb3J0ZWQuXG4gKiBAaW50ZXJuYWxcbiAqIEBsaWNlbnNlIE1vZGVybml6ciAzLjAuMHByZSAoQ3VzdG9tIEJ1aWxkKSB8IE1JVFxuICovXG5cbmZ1bmN0aW9uIGlzRXZlbnRTdXBwb3J0ZWQoZXZlbnROYW1lU3VmZml4KSB7XG4gIGlmICghY2FuVXNlRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGV2ZW50TmFtZSA9ICdvbicgKyBldmVudE5hbWVTdWZmaXg7XG4gIHZhciBpc1N1cHBvcnRlZCA9IChldmVudE5hbWUgaW4gZG9jdW1lbnQpO1xuXG4gIGlmICghaXNTdXBwb3J0ZWQpIHtcbiAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGV2ZW50TmFtZSwgJ3JldHVybjsnKTtcbiAgICBpc1N1cHBvcnRlZCA9IHR5cGVvZiBlbGVtZW50W2V2ZW50TmFtZV0gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICByZXR1cm4gaXNTdXBwb3J0ZWQ7XG59XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRXZlbnRzJDEoKSB7XG4gIHJlZ2lzdGVyVHdvUGhhc2VFdmVudCgnb25DaGFuZ2UnLCBbJ2NoYW5nZScsICdjbGljaycsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2lucHV0JywgJ2tleWRvd24nLCAna2V5dXAnLCAnc2VsZWN0aW9uY2hhbmdlJ10pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgaW5zdCwgbmF0aXZlRXZlbnQsIHRhcmdldCkge1xuICAvLyBGbGFnIHRoaXMgZXZlbnQgbG9vcCBhcyBuZWVkaW5nIHN0YXRlIHJlc3RvcmUuXG4gIGVucXVldWVTdGF0ZVJlc3RvcmUodGFyZ2V0KTtcbiAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhpbnN0LCAnb25DaGFuZ2UnKTtcblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICB2YXIgZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnQoJ29uQ2hhbmdlJywgJ2NoYW5nZScsIG51bGwsIG5hdGl2ZUV2ZW50LCB0YXJnZXQpO1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59XG4vKipcbiAqIEZvciBJRSBzaGltc1xuICovXG5cblxudmFyIGFjdGl2ZUVsZW1lbnQgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0ID0gbnVsbDtcbi8qKlxuICogU0VDVElPTjogaGFuZGxlIGBjaGFuZ2VgIGV2ZW50XG4gKi9cblxuZnVuY3Rpb24gc2hvdWxkVXNlQ2hhbmdlRXZlbnQoZWxlbSkge1xuICB2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lID09PSAnc2VsZWN0JyB8fCBub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiBlbGVtLnR5cGUgPT09ICdmaWxlJztcbn1cblxuZnVuY3Rpb24gbWFudWFsRGlzcGF0Y2hDaGFuZ2VFdmVudChuYXRpdmVFdmVudCkge1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBjcmVhdGVBbmRBY2N1bXVsYXRlQ2hhbmdlRXZlbnQoZGlzcGF0Y2hRdWV1ZSwgYWN0aXZlRWxlbWVudEluc3QsIG5hdGl2ZUV2ZW50LCBnZXRFdmVudFRhcmdldChuYXRpdmVFdmVudCkpOyAvLyBJZiBjaGFuZ2UgYW5kIHByb3BlcnR5Y2hhbmdlIGJ1YmJsZWQsIHdlJ2QganVzdCBiaW5kIHRvIGl0IGxpa2UgYWxsIHRoZVxuICAvLyBvdGhlciBldmVudHMgYW5kIGhhdmUgaXQgZ28gdGhyb3VnaCBSZWFjdEJyb3dzZXJFdmVudEVtaXR0ZXIuIFNpbmNlIGl0XG4gIC8vIGRvZXNuJ3QsIHdlIG1hbnVhbGx5IGxpc3RlbiBmb3IgdGhlIGV2ZW50cyBhbmQgc28gd2UgaGF2ZSB0byBlbnF1ZXVlIGFuZFxuICAvLyBwcm9jZXNzIHRoZSBhYnN0cmFjdCBldmVudCBtYW51YWxseS5cbiAgLy9cbiAgLy8gQmF0Y2hpbmcgaXMgbmVjZXNzYXJ5IGhlcmUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgYWxsIGV2ZW50IGhhbmRsZXJzIHJ1blxuICAvLyBiZWZvcmUgdGhlIG5leHQgcmVyZW5kZXIgKGluY2x1ZGluZyBldmVudCBoYW5kbGVycyBhdHRhY2hlZCB0byBhbmNlc3RvclxuICAvLyBlbGVtZW50cyBpbnN0ZWFkIG9mIGRpcmVjdGx5IG9uIHRoZSBpbnB1dCkuIFdpdGhvdXQgdGhpcywgY29udHJvbGxlZFxuICAvLyBjb21wb25lbnRzIGRvbid0IHdvcmsgcHJvcGVybHkgaW4gY29uanVuY3Rpb24gd2l0aCBldmVudCBidWJibGluZyBiZWNhdXNlXG4gIC8vIHRoZSBjb21wb25lbnQgaXMgcmVyZW5kZXJlZCBhbmQgdGhlIHZhbHVlIHJldmVydGVkIGJlZm9yZSBhbGwgdGhlIGV2ZW50XG4gIC8vIGhhbmRsZXJzIGNhbiBydW4uIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzcwOC5cblxuICBiYXRjaGVkVXBkYXRlcyhydW5FdmVudEluQmF0Y2gsIGRpc3BhdGNoUXVldWUpO1xufVxuXG5mdW5jdGlvbiBydW5FdmVudEluQmF0Y2goZGlzcGF0Y2hRdWV1ZSkge1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCAwKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpIHtcbiAgdmFyIHRhcmdldE5vZGUgPSBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpO1xuXG4gIGlmICh1cGRhdGVWYWx1ZUlmQ2hhbmdlZCh0YXJnZXROb2RlKSkge1xuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2NoYW5nZScpIHtcbiAgICByZXR1cm4gdGFyZ2V0SW5zdDtcbiAgfVxufVxuLyoqXG4gKiBTRUNUSU9OOiBoYW5kbGUgYGlucHV0YCBldmVudFxuICovXG5cblxudmFyIGlzSW5wdXRFdmVudFN1cHBvcnRlZCA9IGZhbHNlO1xuXG5pZiAoY2FuVXNlRE9NKSB7XG4gIC8vIElFOSBjbGFpbXMgdG8gc3VwcG9ydCB0aGUgaW5wdXQgZXZlbnQgYnV0IGZhaWxzIHRvIHRyaWdnZXIgaXQgd2hlblxuICAvLyBkZWxldGluZyB0ZXh0LCBzbyB3ZSBpZ25vcmUgaXRzIGlucHV0IGV2ZW50cy5cbiAgaXNJbnB1dEV2ZW50U3VwcG9ydGVkID0gaXNFdmVudFN1cHBvcnRlZCgnaW5wdXQnKSAmJiAoIWRvY3VtZW50LmRvY3VtZW50TW9kZSB8fCBkb2N1bWVudC5kb2N1bWVudE1vZGUgPiA5KTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFN0YXJ0cyB0cmFja2luZyBwcm9wZXJ0eWNoYW5nZSBldmVudHMgb24gdGhlIHBhc3NlZC1pbiBlbGVtZW50XG4gKiBhbmQgb3ZlcnJpZGUgdGhlIHZhbHVlIHByb3BlcnR5IHNvIHRoYXQgd2UgY2FuIGRpc3Rpbmd1aXNoIHVzZXIgZXZlbnRzIGZyb21cbiAqIHZhbHVlIGNoYW5nZXMgaW4gSlMuXG4gKi9cblxuXG5mdW5jdGlvbiBzdGFydFdhdGNoaW5nRm9yVmFsdWVDaGFuZ2UodGFyZ2V0LCB0YXJnZXRJbnN0KSB7XG4gIGFjdGl2ZUVsZW1lbnQgPSB0YXJnZXQ7XG4gIGFjdGl2ZUVsZW1lbnRJbnN0ID0gdGFyZ2V0SW5zdDtcbiAgYWN0aXZlRWxlbWVudC5hdHRhY2hFdmVudCgnb25wcm9wZXJ0eWNoYW5nZScsIGhhbmRsZVByb3BlcnR5Q2hhbmdlKTtcbn1cbi8qKlxuICogKEZvciBJRSA8PTkpIFJlbW92ZXMgdGhlIGV2ZW50IGxpc3RlbmVycyBmcm9tIHRoZSBjdXJyZW50bHktdHJhY2tlZCBlbGVtZW50LFxuICogaWYgYW55IGV4aXN0cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCkge1xuICBpZiAoIWFjdGl2ZUVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBhY3RpdmVFbGVtZW50LmRldGFjaEV2ZW50KCdvbnByb3BlcnR5Y2hhbmdlJywgaGFuZGxlUHJvcGVydHlDaGFuZ2UpO1xuICBhY3RpdmVFbGVtZW50ID0gbnVsbDtcbiAgYWN0aXZlRWxlbWVudEluc3QgPSBudWxsO1xufVxuLyoqXG4gKiAoRm9yIElFIDw9OSkgSGFuZGxlcyBhIHByb3BlcnR5Y2hhbmdlIGV2ZW50LCBzZW5kaW5nIGEgYGNoYW5nZWAgZXZlbnQgaWZcbiAqIHRoZSB2YWx1ZSBvZiB0aGUgYWN0aXZlIGVsZW1lbnQgaGFzIGNoYW5nZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBoYW5kbGVQcm9wZXJ0eUNoYW5nZShuYXRpdmVFdmVudCkge1xuICBpZiAobmF0aXZlRXZlbnQucHJvcGVydHlOYW1lICE9PSAndmFsdWUnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGdldEluc3RJZlZhbHVlQ2hhbmdlZChhY3RpdmVFbGVtZW50SW5zdCkpIHtcbiAgICBtYW51YWxEaXNwYXRjaENoYW5nZUV2ZW50KG5hdGl2ZUV2ZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVFdmVudHNGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXQsIHRhcmdldEluc3QpIHtcbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgLy8gSW4gSUU5LCBwcm9wZXJ0eWNoYW5nZSBmaXJlcyBmb3IgbW9zdCBpbnB1dCBldmVudHMgYnV0IGlzIGJ1Z2d5IGFuZFxuICAgIC8vIGRvZXNuJ3QgZmlyZSB3aGVuIHRleHQgaXMgZGVsZXRlZCwgYnV0IGNvbnZlbmllbnRseSwgc2VsZWN0aW9uY2hhbmdlXG4gICAgLy8gYXBwZWFycyB0byBmaXJlIGluIGFsbCBvZiB0aGUgcmVtYWluaW5nIGNhc2VzIHNvIHdlIGNhdGNoIHRob3NlIGFuZFxuICAgIC8vIGZvcndhcmQgdGhlIGV2ZW50IGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZFxuICAgIC8vIEluIGVpdGhlciBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIGNhbGwgdGhlIGV2ZW50IGhhbmRsZXIgaWYgdGhlIHZhbHVlXG4gICAgLy8gaXMgY2hhbmdlZCBmcm9tIEpTIHNvIHdlIHJlZGVmaW5lIGEgc2V0dGVyIGZvciBgLnZhbHVlYCB0aGF0IHVwZGF0ZXNcbiAgICAvLyBvdXIgYWN0aXZlRWxlbWVudFZhbHVlIHZhcmlhYmxlLCBhbGxvd2luZyB1cyB0byBpZ25vcmUgdGhvc2UgY2hhbmdlc1xuICAgIC8vXG4gICAgLy8gc3RvcFdhdGNoaW5nKCkgc2hvdWxkIGJlIGEgbm9vcCBoZXJlIGJ1dCB3ZSBjYWxsIGl0IGp1c3QgaW4gY2FzZSB3ZVxuICAgIC8vIG1pc3NlZCBhIGJsdXIgZXZlbnQgc29tZWhvdy5cbiAgICBzdG9wV2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSgpO1xuICAgIHN0YXJ0V2F0Y2hpbmdGb3JWYWx1ZUNoYW5nZSh0YXJnZXQsIHRhcmdldEluc3QpO1xuICB9IGVsc2UgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ2ZvY3Vzb3V0Jykge1xuICAgIHN0b3BXYXRjaGluZ0ZvclZhbHVlQ2hhbmdlKCk7XG4gIH1cbn0gLy8gRm9yIElFOCBhbmQgSUU5LlxuXG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dEV2ZW50UG9seWZpbGwoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdzZWxlY3Rpb25jaGFuZ2UnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ2tleXVwJyB8fCBkb21FdmVudE5hbWUgPT09ICdrZXlkb3duJykge1xuICAgIC8vIE9uIHRoZSBzZWxlY3Rpb25jaGFuZ2UgZXZlbnQsIHRoZSB0YXJnZXQgaXMganVzdCBkb2N1bWVudCB3aGljaCBpc24ndFxuICAgIC8vIGhlbHBmdWwgZm9yIHVzIHNvIGp1c3QgY2hlY2sgYWN0aXZlRWxlbWVudCBpbnN0ZWFkLlxuICAgIC8vXG4gICAgLy8gOTklIG9mIHRoZSB0aW1lLCBrZXlkb3duIGFuZCBrZXl1cCBhcmVuJ3QgbmVjZXNzYXJ5LiBJRTggZmFpbHMgdG8gZmlyZVxuICAgIC8vIHByb3BlcnR5Y2hhbmdlIG9uIHRoZSBmaXJzdCBpbnB1dCBldmVudCBhZnRlciBzZXR0aW5nIGB2YWx1ZWAgZnJvbSBhXG4gICAgLy8gc2NyaXB0IGFuZCBmaXJlcyBvbmx5IGtleWRvd24sIGtleXByZXNzLCBrZXl1cC4gQ2F0Y2hpbmcga2V5dXAgdXN1YWxseVxuICAgIC8vIGdldHMgaXQgYW5kIGNhdGNoaW5nIGtleWRvd24gbGV0cyB1cyBmaXJlIGFuIGV2ZW50IGZvciB0aGUgZmlyc3RcbiAgICAvLyBrZXlzdHJva2UgaWYgdXNlciBkb2VzIGEga2V5IHJlcGVhdCAoaXQnbGwgYmUgYSBsaXR0bGUgZGVsYXllZDogcmlnaHRcbiAgICAvLyBiZWZvcmUgdGhlIHNlY29uZCBrZXlzdHJva2UpLiBPdGhlciBpbnB1dCBtZXRob2RzIChlLmcuLCBwYXN0ZSkgc2VlbSB0b1xuICAgIC8vIGZpcmUgc2VsZWN0aW9uY2hhbmdlIG5vcm1hbGx5LlxuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQoYWN0aXZlRWxlbWVudEluc3QpO1xuICB9XG59XG4vKipcbiAqIFNFQ1RJT046IGhhbmRsZSBgY2xpY2tgIGV2ZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRVc2VDbGlja0V2ZW50KGVsZW0pIHtcbiAgLy8gVXNlIHRoZSBgY2xpY2tgIGV2ZW50IHRvIGRldGVjdCBjaGFuZ2VzIHRvIGNoZWNrYm94IGFuZCByYWRpbyBpbnB1dHMuXG4gIC8vIFRoaXMgYXBwcm9hY2ggd29ya3MgYWNyb3NzIGFsbCBicm93c2Vycywgd2hlcmVhcyBgY2hhbmdlYCBkb2VzIG5vdCBmaXJlXG4gIC8vIHVudGlsIGBibHVyYCBpbiBJRTguXG4gIHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWU7XG4gIHJldHVybiBub2RlTmFtZSAmJiBub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAnaW5wdXQnICYmIChlbGVtLnR5cGUgPT09ICdjaGVja2JveCcgfHwgZWxlbS50eXBlID09PSAncmFkaW8nKTtcbn1cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdjbGljaycpIHtcbiAgICByZXR1cm4gZ2V0SW5zdElmVmFsdWVDaGFuZ2VkKHRhcmdldEluc3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQoZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0KSB7XG4gIGlmIChkb21FdmVudE5hbWUgPT09ICdpbnB1dCcgfHwgZG9tRXZlbnROYW1lID09PSAnY2hhbmdlJykge1xuICAgIHJldHVybiBnZXRJbnN0SWZWYWx1ZUNoYW5nZWQodGFyZ2V0SW5zdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cihub2RlKSB7XG4gIHZhciBzdGF0ZSA9IG5vZGUuX3dyYXBwZXJTdGF0ZTtcblxuICBpZiAoIXN0YXRlIHx8ICFzdGF0ZS5jb250cm9sbGVkIHx8IG5vZGUudHlwZSAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAgLy8gSWYgY29udHJvbGxlZCwgYXNzaWduIHRoZSB2YWx1ZSBhdHRyaWJ1dGUgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb24gYmx1clxuICAgIHNldERlZmF1bHRWYWx1ZShub2RlLCAnbnVtYmVyJywgbm9kZS52YWx1ZSk7XG4gIH1cbn1cbi8qKlxuICogVGhpcyBwbHVnaW4gY3JlYXRlcyBhbiBgb25DaGFuZ2VgIGV2ZW50IHRoYXQgbm9ybWFsaXplcyBjaGFuZ2UgZXZlbnRzXG4gKiBhY3Jvc3MgZm9ybSBlbGVtZW50cy4gVGhpcyBldmVudCBmaXJlcyBhdCBhIHRpbWUgd2hlbiBpdCdzIHBvc3NpYmxlIHRvXG4gKiBjaGFuZ2UgdGhlIGVsZW1lbnQncyB2YWx1ZSB3aXRob3V0IHNlZWluZyBhIGZsaWNrZXIuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gc2VsZWN0XG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDEoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgdGFyZ2V0Tm9kZSA9IHRhcmdldEluc3QgPyBnZXROb2RlRnJvbUluc3RhbmNlKHRhcmdldEluc3QpIDogd2luZG93O1xuICB2YXIgZ2V0VGFyZ2V0SW5zdEZ1bmMsIGhhbmRsZUV2ZW50RnVuYztcblxuICBpZiAoc2hvdWxkVXNlQ2hhbmdlRXZlbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JDaGFuZ2VFdmVudDtcbiAgfSBlbHNlIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkpIHtcbiAgICBpZiAoaXNJbnB1dEV2ZW50U3VwcG9ydGVkKSB7XG4gICAgICBnZXRUYXJnZXRJbnN0RnVuYyA9IGdldFRhcmdldEluc3RGb3JJbnB1dE9yQ2hhbmdlRXZlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICAgIGhhbmRsZUV2ZW50RnVuYyA9IGhhbmRsZUV2ZW50c0ZvcklucHV0RXZlbnRQb2x5ZmlsbDtcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2hvdWxkVXNlQ2xpY2tFdmVudCh0YXJnZXROb2RlKSkge1xuICAgIGdldFRhcmdldEluc3RGdW5jID0gZ2V0VGFyZ2V0SW5zdEZvckNsaWNrRXZlbnQ7XG4gIH1cblxuICBpZiAoZ2V0VGFyZ2V0SW5zdEZ1bmMpIHtcbiAgICB2YXIgaW5zdCA9IGdldFRhcmdldEluc3RGdW5jKGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCk7XG5cbiAgICBpZiAoaW5zdCkge1xuICAgICAgY3JlYXRlQW5kQWNjdW11bGF0ZUNoYW5nZUV2ZW50KGRpc3BhdGNoUXVldWUsIGluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKGhhbmRsZUV2ZW50RnVuYykge1xuICAgIGhhbmRsZUV2ZW50RnVuYyhkb21FdmVudE5hbWUsIHRhcmdldE5vZGUsIHRhcmdldEluc3QpO1xuICB9IC8vIFdoZW4gYmx1cnJpbmcsIHNldCB0aGUgdmFsdWUgYXR0cmlidXRlIGZvciBudW1iZXIgaW5wdXRzXG5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnZm9jdXNvdXQnKSB7XG4gICAgaGFuZGxlQ29udHJvbGxlZElucHV0Qmx1cih0YXJnZXROb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQyKCkge1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvbk1vdXNlRW50ZXInLCBbJ21vdXNlb3V0JywgJ21vdXNlb3ZlciddKTtcbiAgcmVnaXN0ZXJEaXJlY3RFdmVudCgnb25Nb3VzZUxlYXZlJywgWydtb3VzZW91dCcsICdtb3VzZW92ZXInXSk7XG4gIHJlZ2lzdGVyRGlyZWN0RXZlbnQoJ29uUG9pbnRlckVudGVyJywgWydwb2ludGVyb3V0JywgJ3BvaW50ZXJvdmVyJ10pO1xuICByZWdpc3RlckRpcmVjdEV2ZW50KCdvblBvaW50ZXJMZWF2ZScsIFsncG9pbnRlcm91dCcsICdwb2ludGVyb3ZlciddKTtcbn1cbi8qKlxuICogRm9yIGFsbW9zdCBldmVyeSBpbnRlcmFjdGlvbiB3ZSBjYXJlIGFib3V0LCB0aGVyZSB3aWxsIGJlIGJvdGggYSB0b3AtbGV2ZWxcbiAqIGBtb3VzZW92ZXJgIGFuZCBgbW91c2VvdXRgIGV2ZW50IHRoYXQgb2NjdXJzLiBPbmx5IHVzZSBgbW91c2VvdXRgIHNvIHRoYXRcbiAqIHdlIGRvIG5vdCBleHRyYWN0IGR1cGxpY2F0ZSBldmVudHMuIEhvd2V2ZXIsIG1vdmluZyB0aGUgbW91c2UgaW50byB0aGVcbiAqIGJyb3dzZXIgZnJvbSBvdXRzaWRlIHdpbGwgbm90IGZpcmUgYSBgbW91c2VvdXRgIGV2ZW50LiBJbiB0aGlzIGNhc2UsIHdlIHVzZVxuICogdGhlIGBtb3VzZW92ZXJgIHRvcC1sZXZlbCBldmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncywgdGFyZ2V0Q29udGFpbmVyKSB7XG4gIHZhciBpc092ZXJFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3ZlcicgfHwgZG9tRXZlbnROYW1lID09PSAncG9pbnRlcm92ZXInO1xuICB2YXIgaXNPdXRFdmVudCA9IGRvbUV2ZW50TmFtZSA9PT0gJ21vdXNlb3V0JyB8fCBkb21FdmVudE5hbWUgPT09ICdwb2ludGVyb3V0JztcblxuICBpZiAoaXNPdmVyRXZlbnQgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19SRVBMQVlFRCkgPT09IDApIHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIG92ZXIgZXZlbnQgd2l0aCBhIHRhcmdldCwgd2UgbWlnaHQgaGF2ZSBhbHJlYWR5IGRpc3BhdGNoZWRcbiAgICAvLyB0aGUgZXZlbnQgaW4gdGhlIG91dCBldmVudCBvZiB0aGUgb3RoZXIgdGFyZ2V0LiBJZiB0aGlzIGlzIHJlcGxheWVkLFxuICAgIC8vIHRoZW4gaXQncyBiZWNhdXNlIHdlIGNvdWxkbid0IGRpc3BhdGNoIGFnYWluc3QgdGhpcyB0YXJnZXQgcHJldmlvdXNseVxuICAgIC8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgbm93IGluc3RlYWQuXG4gICAgdmFyIHJlbGF0ZWQgPSBuYXRpdmVFdmVudC5yZWxhdGVkVGFyZ2V0IHx8IG5hdGl2ZUV2ZW50LmZyb21FbGVtZW50O1xuXG4gICAgaWYgKHJlbGF0ZWQpIHtcbiAgICAgIC8vIElmIHRoZSByZWxhdGVkIG5vZGUgaXMgbWFuYWdlZCBieSBSZWFjdCwgd2UgY2FuIGFzc3VtZSB0aGF0IHdlIGhhdmVcbiAgICAgIC8vIGFscmVhZHkgZGlzcGF0Y2hlZCB0aGUgY29ycmVzcG9uZGluZyBldmVudHMgZHVyaW5nIGl0cyBtb3VzZW91dC5cbiAgICAgIGlmIChnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZShyZWxhdGVkKSB8fCBpc0NvbnRhaW5lck1hcmtlZEFzUm9vdChyZWxhdGVkKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCFpc091dEV2ZW50ICYmICFpc092ZXJFdmVudCkge1xuICAgIC8vIE11c3Qgbm90IGJlIGEgbW91c2Ugb3IgcG9pbnRlciBpbiBvciBvdXQgLSBpZ25vcmluZy5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgd2luOyAvLyBUT0RPOiB3aHkgaXMgdGhpcyBudWxsYWJsZSBpbiB0aGUgdHlwZXMgYnV0IHdlIHJlYWQgZnJvbSBpdD9cblxuICBpZiAobmF0aXZlRXZlbnRUYXJnZXQud2luZG93ID09PSBuYXRpdmVFdmVudFRhcmdldCkge1xuICAgIC8vIGBuYXRpdmVFdmVudFRhcmdldGAgaXMgcHJvYmFibHkgYSB3aW5kb3cgb2JqZWN0LlxuICAgIHdpbiA9IG5hdGl2ZUV2ZW50VGFyZ2V0O1xuICB9IGVsc2Uge1xuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGBvd25lckRvY3VtZW50YCBpcyBzb21ldGltZXMgdW5kZWZpbmVkIGluIElFOC5cbiAgICB2YXIgZG9jID0gbmF0aXZlRXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcblxuICAgIGlmIChkb2MpIHtcbiAgICAgIHdpbiA9IGRvYy5kZWZhdWx0VmlldyB8fCBkb2MucGFyZW50V2luZG93O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aW4gPSB3aW5kb3c7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZyb207XG4gIHZhciB0bztcblxuICBpZiAoaXNPdXRFdmVudCkge1xuICAgIHZhciBfcmVsYXRlZCA9IG5hdGl2ZUV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgbmF0aXZlRXZlbnQudG9FbGVtZW50O1xuXG4gICAgZnJvbSA9IHRhcmdldEluc3Q7XG4gICAgdG8gPSBfcmVsYXRlZCA/IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKF9yZWxhdGVkKSA6IG51bGw7XG5cbiAgICBpZiAodG8gIT09IG51bGwpIHtcbiAgICAgIHZhciBuZWFyZXN0TW91bnRlZCA9IGdldE5lYXJlc3RNb3VudGVkRmliZXIodG8pO1xuXG4gICAgICBpZiAodG8gIT09IG5lYXJlc3RNb3VudGVkIHx8IHRvLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiB0by50YWcgIT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHRvID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gTW92aW5nIHRvIGEgbm9kZSBmcm9tIG91dHNpZGUgdGhlIHdpbmRvdy5cbiAgICBmcm9tID0gbnVsbDtcbiAgICB0byA9IHRhcmdldEluc3Q7XG4gIH1cblxuICBpZiAoZnJvbSA9PT0gdG8pIHtcbiAgICAvLyBOb3RoaW5nIHBlcnRhaW5zIHRvIG91ciBtYW5hZ2VkIGNvbXBvbmVudHMuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gIHZhciBsZWF2ZUV2ZW50VHlwZSA9ICdvbk1vdXNlTGVhdmUnO1xuICB2YXIgZW50ZXJFdmVudFR5cGUgPSAnb25Nb3VzZUVudGVyJztcbiAgdmFyIGV2ZW50VHlwZVByZWZpeCA9ICdtb3VzZSc7XG5cbiAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdXQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3BvaW50ZXJvdmVyJykge1xuICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1BvaW50ZXJFdmVudDtcbiAgICBsZWF2ZUV2ZW50VHlwZSA9ICdvblBvaW50ZXJMZWF2ZSc7XG4gICAgZW50ZXJFdmVudFR5cGUgPSAnb25Qb2ludGVyRW50ZXInO1xuICAgIGV2ZW50VHlwZVByZWZpeCA9ICdwb2ludGVyJztcbiAgfVxuXG4gIHZhciBmcm9tTm9kZSA9IGZyb20gPT0gbnVsbCA/IHdpbiA6IGdldE5vZGVGcm9tSW5zdGFuY2UoZnJvbSk7XG4gIHZhciB0b05vZGUgPSB0byA9PSBudWxsID8gd2luIDogZ2V0Tm9kZUZyb21JbnN0YW5jZSh0byk7XG4gIHZhciBsZWF2ZSA9IG5ldyBTeW50aGV0aWNFdmVudEN0b3IobGVhdmVFdmVudFR5cGUsIGV2ZW50VHlwZVByZWZpeCArICdsZWF2ZScsIGZyb20sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gIGxlYXZlLnRhcmdldCA9IGZyb21Ob2RlO1xuICBsZWF2ZS5yZWxhdGVkVGFyZ2V0ID0gdG9Ob2RlO1xuICB2YXIgZW50ZXIgPSBudWxsOyAvLyBXZSBzaG91bGQgb25seSBwcm9jZXNzIHRoaXMgbmF0aXZlRXZlbnQgaWYgd2UgYXJlIHByb2Nlc3NpbmdcbiAgLy8gdGhlIGZpcnN0IGFuY2VzdG9yLiBOZXh0IHRpbWUsIHdlIHdpbGwgaWdub3JlIHRoZSBldmVudC5cblxuICB2YXIgbmF0aXZlVGFyZ2V0SW5zdCA9IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlKG5hdGl2ZUV2ZW50VGFyZ2V0KTtcblxuICBpZiAobmF0aXZlVGFyZ2V0SW5zdCA9PT0gdGFyZ2V0SW5zdCkge1xuICAgIHZhciBlbnRlckV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50Q3RvcihlbnRlckV2ZW50VHlwZSwgZXZlbnRUeXBlUHJlZml4ICsgJ2VudGVyJywgdG8sIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgZW50ZXJFdmVudC50YXJnZXQgPSB0b05vZGU7XG4gICAgZW50ZXJFdmVudC5yZWxhdGVkVGFyZ2V0ID0gZnJvbU5vZGU7XG4gICAgZW50ZXIgPSBlbnRlckV2ZW50O1xuICB9XG5cbiAgYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZSwgZW50ZXIsIGZyb20sIHRvKTtcbn1cblxuLyoqXG4gKiBpbmxpbmVkIE9iamVjdC5pcyBwb2x5ZmlsbCB0byBhdm9pZCByZXF1aXJpbmcgY29uc3VtZXJzIHNoaXAgdGhlaXIgb3duXG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9PYmplY3QvaXNcbiAqL1xuZnVuY3Rpb24gaXMoeCwgeSkge1xuICByZXR1cm4geCA9PT0geSAmJiAoeCAhPT0gMCB8fCAxIC8geCA9PT0gMSAvIHkpIHx8IHggIT09IHggJiYgeSAhPT0geSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxuICA7XG59XG5cbnZhciBvYmplY3RJcyA9IHR5cGVvZiBPYmplY3QuaXMgPT09ICdmdW5jdGlvbicgPyBPYmplY3QuaXMgOiBpcztcblxudmFyIGhhc093blByb3BlcnR5JDIgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xuLyoqXG4gKiBQZXJmb3JtcyBlcXVhbGl0eSBieSBpdGVyYXRpbmcgdGhyb3VnaCBrZXlzIG9uIGFuIG9iamVjdCBhbmQgcmV0dXJuaW5nIGZhbHNlXG4gKiB3aGVuIGFueSBrZXkgaGFzIHZhbHVlcyB3aGljaCBhcmUgbm90IHN0cmljdGx5IGVxdWFsIGJldHdlZW4gdGhlIGFyZ3VtZW50cy5cbiAqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgYWxsIGtleXMgYXJlIHN0cmljdGx5IGVxdWFsLlxuICovXG5cbmZ1bmN0aW9uIHNoYWxsb3dFcXVhbChvYmpBLCBvYmpCKSB7XG4gIGlmIChvYmplY3RJcyhvYmpBLCBvYmpCKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmpBICE9PSAnb2JqZWN0JyB8fCBvYmpBID09PSBudWxsIHx8IHR5cGVvZiBvYmpCICE9PSAnb2JqZWN0JyB8fCBvYmpCID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIGtleXNBID0gT2JqZWN0LmtleXMob2JqQSk7XG4gIHZhciBrZXlzQiA9IE9iamVjdC5rZXlzKG9iakIpO1xuXG4gIGlmIChrZXlzQS5sZW5ndGggIT09IGtleXNCLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBUZXN0IGZvciBBJ3Mga2V5cyBkaWZmZXJlbnQgZnJvbSBCLlxuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzQS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghaGFzT3duUHJvcGVydHkkMi5jYWxsKG9iakIsIGtleXNBW2ldKSB8fCAhb2JqZWN0SXMob2JqQVtrZXlzQVtpXV0sIG9iakJba2V5c0FbaV1dKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdpdmVuIGFueSBub2RlIHJldHVybiB0aGUgZmlyc3QgbGVhZiBub2RlIHdpdGhvdXQgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHtET01FbGVtZW50fERPTVRleHROb2RlfVxuICovXG5cbmZ1bmN0aW9uIGdldExlYWZOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUgJiYgbm9kZS5maXJzdENoaWxkKSB7XG4gICAgbm9kZSA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufVxuLyoqXG4gKiBHZXQgdGhlIG5leHQgc2libGluZyB3aXRoaW4gYSBjb250YWluZXIuIFRoaXMgd2lsbCB3YWxrIHVwIHRoZVxuICogRE9NIGlmIGEgbm9kZSdzIHNpYmxpbmdzIGhhdmUgYmVlbiBleGhhdXN0ZWQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSBub2RlXG4gKiBAcmV0dXJuIHs/RE9NRWxlbWVudHxET01UZXh0Tm9kZX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFNpYmxpbmdOb2RlKG5vZGUpIHtcbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5uZXh0U2libGluZykge1xuICAgICAgcmV0dXJuIG5vZGUubmV4dFNpYmxpbmc7XG4gICAgfVxuXG4gICAgbm9kZSA9IG5vZGUucGFyZW50Tm9kZTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgb2JqZWN0IGRlc2NyaWJpbmcgdGhlIG5vZGVzIHdoaWNoIGNvbnRhaW4gY2hhcmFjdGVycyBhdCBvZmZzZXQuXG4gKlxuICogQHBhcmFtIHtET01FbGVtZW50fERPTVRleHROb2RlfSByb290XG4gKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChyb290LCBvZmZzZXQpIHtcbiAgdmFyIG5vZGUgPSBnZXRMZWFmTm9kZShyb290KTtcbiAgdmFyIG5vZGVTdGFydCA9IDA7XG4gIHZhciBub2RlRW5kID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgIG5vZGVFbmQgPSBub2RlU3RhcnQgKyBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcblxuICAgICAgaWYgKG5vZGVTdGFydCA8PSBvZmZzZXQgJiYgbm9kZUVuZCA+PSBvZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIG9mZnNldDogb2Zmc2V0IC0gbm9kZVN0YXJ0XG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIG5vZGVTdGFydCA9IG5vZGVFbmQ7XG4gICAgfVxuXG4gICAgbm9kZSA9IGdldExlYWZOb2RlKGdldFNpYmxpbmdOb2RlKG5vZGUpKTtcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7RE9NRWxlbWVudH0gb3V0ZXJOb2RlXG4gKiBAcmV0dXJuIHs/b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGdldE9mZnNldHMob3V0ZXJOb2RlKSB7XG4gIHZhciBvd25lckRvY3VtZW50ID0gb3V0ZXJOb2RlLm93bmVyRG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBvd25lckRvY3VtZW50ICYmIG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93O1xuICB2YXIgc2VsZWN0aW9uID0gd2luLmdldFNlbGVjdGlvbiAmJiB3aW4uZ2V0U2VsZWN0aW9uKCk7XG5cbiAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBhbmNob3JOb2RlID0gc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQgPSBzZWxlY3Rpb24uYW5jaG9yT2Zmc2V0LFxuICAgICAgZm9jdXNOb2RlID0gc2VsZWN0aW9uLmZvY3VzTm9kZSxcbiAgICAgIGZvY3VzT2Zmc2V0ID0gc2VsZWN0aW9uLmZvY3VzT2Zmc2V0OyAvLyBJbiBGaXJlZm94LCBhbmNob3JOb2RlIGFuZCBmb2N1c05vZGUgY2FuIGJlIFwiYW5vbnltb3VzIGRpdnNcIiwgZS5nLiB0aGVcbiAgLy8gdXAvZG93biBidXR0b25zIG9uIGFuIDxpbnB1dCB0eXBlPVwibnVtYmVyXCI+LiBBbm9ueW1vdXMgZGl2cyBkbyBub3Qgc2VlbSB0b1xuICAvLyBleHBvc2UgcHJvcGVydGllcywgdHJpZ2dlcmluZyBhIFwiUGVybWlzc2lvbiBkZW5pZWQgZXJyb3JcIiBpZiBhbnkgb2YgaXRzXG4gIC8vIHByb3BlcnRpZXMgYXJlIGFjY2Vzc2VkLiBUaGUgb25seSBzZWVtaW5nbHkgcG9zc2libGUgd2F5IHRvIGF2b2lkIGVycm9yaW5nXG4gIC8vIGlzIHRvIGFjY2VzcyBhIHByb3BlcnR5IHRoYXQgdHlwaWNhbGx5IHdvcmtzIGZvciBub24tYW5vbnltb3VzIGRpdnMgYW5kXG4gIC8vIGNhdGNoIGFueSBlcnJvciB0aGF0IG1heSBvdGhlcndpc2UgYXJpc2UuIFNlZVxuICAvLyBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg0MjdcblxuICB0cnkge1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC1leHByZXNzaW9ucyAqL1xuICAgIGFuY2hvck5vZGUubm9kZVR5cGU7XG4gICAgZm9jdXNOb2RlLm5vZGVUeXBlO1xuICAgIC8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLWV4cHJlc3Npb25zICovXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCk7XG59XG4vKipcbiAqIFJldHVybnMge3N0YXJ0LCBlbmR9IHdoZXJlIGBzdGFydGAgaXMgdGhlIGNoYXJhY3Rlci9jb2RlcG9pbnQgaW5kZXggb2ZcbiAqIChhbmNob3JOb2RlLCBhbmNob3JPZmZzZXQpIHdpdGhpbiB0aGUgdGV4dENvbnRlbnQgb2YgYG91dGVyTm9kZWAsIGFuZFxuICogYGVuZGAgaXMgdGhlIGluZGV4IG9mIChmb2N1c05vZGUsIGZvY3VzT2Zmc2V0KS5cbiAqXG4gKiBSZXR1cm5zIG51bGwgaWYgeW91IHBhc3MgaW4gZ2FyYmFnZSBpbnB1dCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGp1c3QgY3Jhc2guXG4gKlxuICogRXhwb3J0ZWQgb25seSBmb3IgdGVzdGluZy5cbiAqL1xuXG5mdW5jdGlvbiBnZXRNb2Rlcm5PZmZzZXRzRnJvbVBvaW50cyhvdXRlck5vZGUsIGFuY2hvck5vZGUsIGFuY2hvck9mZnNldCwgZm9jdXNOb2RlLCBmb2N1c09mZnNldCkge1xuICB2YXIgbGVuZ3RoID0gMDtcbiAgdmFyIHN0YXJ0ID0gLTE7XG4gIHZhciBlbmQgPSAtMTtcbiAgdmFyIGluZGV4V2l0aGluQW5jaG9yID0gMDtcbiAgdmFyIGluZGV4V2l0aGluRm9jdXMgPSAwO1xuICB2YXIgbm9kZSA9IG91dGVyTm9kZTtcbiAgdmFyIHBhcmVudE5vZGUgPSBudWxsO1xuXG4gIG91dGVyOiB3aGlsZSAodHJ1ZSkge1xuICAgIHZhciBuZXh0ID0gbnVsbDtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAobm9kZSA9PT0gYW5jaG9yTm9kZSAmJiAoYW5jaG9yT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGggKyBhbmNob3JPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmb2N1c05vZGUgJiYgKGZvY3VzT2Zmc2V0ID09PSAwIHx8IG5vZGUubm9kZVR5cGUgPT09IFRFWFRfTk9ERSkpIHtcbiAgICAgICAgZW5kID0gbGVuZ3RoICsgZm9jdXNPZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBURVhUX05PREUpIHtcbiAgICAgICAgbGVuZ3RoICs9IG5vZGUubm9kZVZhbHVlLmxlbmd0aDtcbiAgICAgIH1cblxuICAgICAgaWYgKChuZXh0ID0gbm9kZS5maXJzdENoaWxkKSA9PT0gbnVsbCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gTW92aW5nIGZyb20gYG5vZGVgIHRvIGl0cyBmaXJzdCBjaGlsZCBgbmV4dGAuXG5cblxuICAgICAgcGFyZW50Tm9kZSA9IG5vZGU7XG4gICAgICBub2RlID0gbmV4dDtcbiAgICB9XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUgPT09IG91dGVyTm9kZSkge1xuICAgICAgICAvLyBJZiBgb3V0ZXJOb2RlYCBoYXMgY2hpbGRyZW4sIHRoaXMgaXMgYWx3YXlzIHRoZSBzZWNvbmQgdGltZSB2aXNpdGluZ1xuICAgICAgICAvLyBpdC4gSWYgaXQgaGFzIG5vIGNoaWxkcmVuLCB0aGlzIGlzIHN0aWxsIHRoZSBmaXJzdCBsb29wLCBhbmQgdGhlIG9ubHlcbiAgICAgICAgLy8gdmFsaWQgc2VsZWN0aW9uIGlzIGFuY2hvck5vZGUgYW5kIGZvY3VzTm9kZSBib3RoIGVxdWFsIHRvIHRoaXMgbm9kZVxuICAgICAgICAvLyBhbmQgYm90aCBvZmZzZXRzIDAsIGluIHdoaWNoIGNhc2Ugd2Ugd2lsbCBoYXZlIGhhbmRsZWQgYWJvdmUuXG4gICAgICAgIGJyZWFrIG91dGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW50Tm9kZSA9PT0gYW5jaG9yTm9kZSAmJiArK2luZGV4V2l0aGluQW5jaG9yID09PSBhbmNob3JPZmZzZXQpIHtcbiAgICAgICAgc3RhcnQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnROb2RlID09PSBmb2N1c05vZGUgJiYgKytpbmRleFdpdGhpbkZvY3VzID09PSBmb2N1c09mZnNldCkge1xuICAgICAgICBlbmQgPSBsZW5ndGg7XG4gICAgICB9XG5cbiAgICAgIGlmICgobmV4dCA9IG5vZGUubmV4dFNpYmxpbmcpICE9PSBudWxsKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gcGFyZW50Tm9kZTtcbiAgICAgIHBhcmVudE5vZGUgPSBub2RlLnBhcmVudE5vZGU7XG4gICAgfSAvLyBNb3ZpbmcgZnJvbSBgbm9kZWAgdG8gaXRzIG5leHQgc2libGluZyBgbmV4dGAuXG5cblxuICAgIG5vZGUgPSBuZXh0O1xuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSAtMSB8fCBlbmQgPT09IC0xKSB7XG4gICAgLy8gVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAoV291bGQgaGFwcGVuIGlmIHRoZSBhbmNob3IvZm9jdXMgbm9kZXMgYXJlbid0XG4gICAgLy8gYWN0dWFsbHkgaW5zaWRlIHRoZSBwYXNzZWQtaW4gbm9kZS4pXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXJ0OiBzdGFydCxcbiAgICBlbmQ6IGVuZFxuICB9O1xufVxuLyoqXG4gKiBJbiBtb2Rlcm4gbm9uLUlFIGJyb3dzZXJzLCB3ZSBjYW4gc3VwcG9ydCBib3RoIGZvcndhcmQgYW5kIGJhY2t3YXJkXG4gKiBzZWxlY3Rpb25zLlxuICpcbiAqIE5vdGU6IElFMTArIHN1cHBvcnRzIHRoZSBTZWxlY3Rpb24gb2JqZWN0LCBidXQgaXQgZG9lcyBub3Qgc3VwcG9ydFxuICogdGhlIGBleHRlbmRgIG1ldGhvZCwgd2hpY2ggbWVhbnMgdGhhdCBldmVuIGluIG1vZGVybiBJRSwgaXQncyBub3QgcG9zc2libGVcbiAqIHRvIHByb2dyYW1tYXRpY2FsbHkgY3JlYXRlIGEgYmFja3dhcmQgc2VsZWN0aW9uLiBUaHVzLCBmb3IgYWxsIElFXG4gKiB2ZXJzaW9ucywgd2UgdXNlIHRoZSBvbGQgSUUgQVBJIHRvIGNyZWF0ZSBvdXIgc2VsZWN0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0RPTUVsZW1lbnR8RE9NVGV4dE5vZGV9IG5vZGVcbiAqIEBwYXJhbSB7b2JqZWN0fSBvZmZzZXRzXG4gKi9cblxuZnVuY3Rpb24gc2V0T2Zmc2V0cyhub2RlLCBvZmZzZXRzKSB7XG4gIHZhciBkb2MgPSBub2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQ7XG4gIHZhciB3aW4gPSBkb2MgJiYgZG9jLmRlZmF1bHRWaWV3IHx8IHdpbmRvdzsgLy8gRWRnZSBmYWlscyB3aXRoIFwiT2JqZWN0IGV4cGVjdGVkXCIgaW4gc29tZSBzY2VuYXJpb3MuXG4gIC8vIChGb3IgaW5zdGFuY2U6IFRpbnlNQ0UgZWRpdG9yIHVzZWQgaW4gYSBsaXN0IGNvbXBvbmVudCB0aGF0IHN1cHBvcnRzIHBhc3RpbmcgdG8gYWRkIG1vcmUsXG4gIC8vIGZhaWxzIHdoZW4gcGFzdGluZyAxMDArIGl0ZW1zKVxuXG4gIGlmICghd2luLmdldFNlbGVjdGlvbikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBzZWxlY3Rpb24gPSB3aW4uZ2V0U2VsZWN0aW9uKCk7XG4gIHZhciBsZW5ndGggPSBub2RlLnRleHRDb250ZW50Lmxlbmd0aDtcbiAgdmFyIHN0YXJ0ID0gTWF0aC5taW4ob2Zmc2V0cy5zdGFydCwgbGVuZ3RoKTtcbiAgdmFyIGVuZCA9IG9mZnNldHMuZW5kID09PSB1bmRlZmluZWQgPyBzdGFydCA6IE1hdGgubWluKG9mZnNldHMuZW5kLCBsZW5ndGgpOyAvLyBJRSAxMSB1c2VzIG1vZGVybiBzZWxlY3Rpb24sIGJ1dCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4dGVuZCBtZXRob2QuXG4gIC8vIEZsaXAgYmFja3dhcmQgc2VsZWN0aW9ucywgc28gd2UgY2FuIHNldCB3aXRoIGEgc2luZ2xlIHJhbmdlLlxuXG4gIGlmICghc2VsZWN0aW9uLmV4dGVuZCAmJiBzdGFydCA+IGVuZCkge1xuICAgIHZhciB0ZW1wID0gZW5kO1xuICAgIGVuZCA9IHN0YXJ0O1xuICAgIHN0YXJ0ID0gdGVtcDtcbiAgfVxuXG4gIHZhciBzdGFydE1hcmtlciA9IGdldE5vZGVGb3JDaGFyYWN0ZXJPZmZzZXQobm9kZSwgc3RhcnQpO1xuICB2YXIgZW5kTWFya2VyID0gZ2V0Tm9kZUZvckNoYXJhY3Rlck9mZnNldChub2RlLCBlbmQpO1xuXG4gIGlmIChzdGFydE1hcmtlciAmJiBlbmRNYXJrZXIpIHtcbiAgICBpZiAoc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDEgJiYgc2VsZWN0aW9uLmFuY2hvck5vZGUgPT09IHN0YXJ0TWFya2VyLm5vZGUgJiYgc2VsZWN0aW9uLmFuY2hvck9mZnNldCA9PT0gc3RhcnRNYXJrZXIub2Zmc2V0ICYmIHNlbGVjdGlvbi5mb2N1c05vZGUgPT09IGVuZE1hcmtlci5ub2RlICYmIHNlbGVjdGlvbi5mb2N1c09mZnNldCA9PT0gZW5kTWFya2VyLm9mZnNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciByYW5nZSA9IGRvYy5jcmVhdGVSYW5nZSgpO1xuICAgIHJhbmdlLnNldFN0YXJ0KHN0YXJ0TWFya2VyLm5vZGUsIHN0YXJ0TWFya2VyLm9mZnNldCk7XG4gICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpO1xuXG4gICAgaWYgKHN0YXJ0ID4gZW5kKSB7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgICAgc2VsZWN0aW9uLmV4dGVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLnNldEVuZChlbmRNYXJrZXIubm9kZSwgZW5kTWFya2VyLm9mZnNldCk7XG4gICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc1RleHROb2RlKG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5ub2RlVHlwZSA9PT0gVEVYVF9OT0RFO1xufVxuXG5mdW5jdGlvbiBjb250YWluc05vZGUob3V0ZXJOb2RlLCBpbm5lck5vZGUpIHtcbiAgaWYgKCFvdXRlck5vZGUgfHwgIWlubmVyTm9kZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChvdXRlck5vZGUgPT09IGlubmVyTm9kZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKGlzVGV4dE5vZGUob3V0ZXJOb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIGlmIChpc1RleHROb2RlKGlubmVyTm9kZSkpIHtcbiAgICByZXR1cm4gY29udGFpbnNOb2RlKG91dGVyTm9kZSwgaW5uZXJOb2RlLnBhcmVudE5vZGUpO1xuICB9IGVsc2UgaWYgKCdjb250YWlucycgaW4gb3V0ZXJOb2RlKSB7XG4gICAgcmV0dXJuIG91dGVyTm9kZS5jb250YWlucyhpbm5lck5vZGUpO1xuICB9IGVsc2UgaWYgKG91dGVyTm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbikge1xuICAgIHJldHVybiAhIShvdXRlck5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24oaW5uZXJOb2RlKSAmIDE2KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNJbkRvY3VtZW50KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUgJiYgbm9kZS5vd25lckRvY3VtZW50ICYmIGNvbnRhaW5zTm9kZShub2RlLm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNTYW1lT3JpZ2luRnJhbWUoaWZyYW1lKSB7XG4gIHRyeSB7XG4gICAgLy8gQWNjZXNzaW5nIHRoZSBjb250ZW50RG9jdW1lbnQgb2YgYSBIVE1MSWZyYW1lRWxlbWVudCBjYW4gY2F1c2UgdGhlIGJyb3dzZXJcbiAgICAvLyB0byB0aHJvdywgZS5nLiBpZiBpdCBoYXMgYSBjcm9zcy1vcmlnaW4gc3JjIGF0dHJpYnV0ZS5cbiAgICAvLyBTYWZhcmkgd2lsbCBzaG93IGFuIGVycm9yIGluIHRoZSBjb25zb2xlIHdoZW4gdGhlIGFjY2VzcyByZXN1bHRzIGluIFwiQmxvY2tlZCBhIGZyYW1lIHdpdGggb3JpZ2luXCIuIGUuZzpcbiAgICAvLyBpZnJhbWUuY29udGVudERvY3VtZW50LmRlZmF1bHRWaWV3O1xuICAgIC8vIEEgc2FmZXR5IHdheSBpcyB0byBhY2Nlc3Mgb25lIG9mIHRoZSBjcm9zcyBvcmlnaW4gcHJvcGVydGllczogV2luZG93IG9yIExvY2F0aW9uXG4gICAgLy8gV2hpY2ggbWlnaHQgcmVzdWx0IGluIFwiU2VjdXJpdHlFcnJvclwiIERPTSBFeGNlcHRpb24gYW5kIGl0IGlzIGNvbXBhdGlibGUgdG8gU2FmYXJpLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Jyb3dzZXJzLmh0bWwjaW50ZWdyYXRpb24td2l0aC1pZGxcbiAgICByZXR1cm4gdHlwZW9mIGlmcmFtZS5jb250ZW50V2luZG93LmxvY2F0aW9uLmhyZWYgPT09ICdzdHJpbmcnO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0QWN0aXZlRWxlbWVudERlZXAoKSB7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG4gIHZhciBlbGVtZW50ID0gZ2V0QWN0aXZlRWxlbWVudCgpO1xuXG4gIHdoaWxlIChlbGVtZW50IGluc3RhbmNlb2Ygd2luLkhUTUxJRnJhbWVFbGVtZW50KSB7XG4gICAgaWYgKGlzU2FtZU9yaWdpbkZyYW1lKGVsZW1lbnQpKSB7XG4gICAgICB3aW4gPSBlbGVtZW50LmNvbnRlbnRXaW5kb3c7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIGVsZW1lbnQgPSBnZXRBY3RpdmVFbGVtZW50KHdpbi5kb2N1bWVudCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudDtcbn1cbi8qKlxuICogQFJlYWN0SW5wdXRTZWxlY3Rpb246IFJlYWN0IGlucHV0IHNlbGVjdGlvbiBtb2R1bGUuIEJhc2VkIG9uIFNlbGVjdGlvbi5qcyxcbiAqIGJ1dCBtb2RpZmllZCB0byBiZSBzdWl0YWJsZSBmb3IgcmVhY3QgYW5kIGhhcyBhIGNvdXBsZSBvZiBidWcgZml4ZXMgKGRvZXNuJ3RcbiAqIGFzc3VtZSBidXR0b25zIGhhdmUgcmFuZ2Ugc2VsZWN0aW9ucyBhbGxvd2VkKS5cbiAqIElucHV0IHNlbGVjdGlvbiBtb2R1bGUgZm9yIFJlYWN0LlxuICovXG5cbi8qKlxuICogQGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllczogd2UgZ2V0IHRoZSBlbGVtZW50IHR5cGVzIHRoYXQgc3VwcG9ydCBzZWxlY3Rpb25cbiAqIGZyb20gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jZG8tbm90LWFwcGx5LCBsb29raW5nIGF0IGBzZWxlY3Rpb25TdGFydGBcbiAqIGFuZCBgc2VsZWN0aW9uRW5kYCByb3dzLlxuICovXG5cblxuZnVuY3Rpb24gaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGVsZW0pIHtcbiAgdmFyIG5vZGVOYW1lID0gZWxlbSAmJiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIG5vZGVOYW1lICYmIChub2RlTmFtZSA9PT0gJ2lucHV0JyAmJiAoZWxlbS50eXBlID09PSAndGV4dCcgfHwgZWxlbS50eXBlID09PSAnc2VhcmNoJyB8fCBlbGVtLnR5cGUgPT09ICd0ZWwnIHx8IGVsZW0udHlwZSA9PT0gJ3VybCcgfHwgZWxlbS50eXBlID09PSAncGFzc3dvcmQnKSB8fCBub2RlTmFtZSA9PT0gJ3RleHRhcmVhJyB8fCBlbGVtLmNvbnRlbnRFZGl0YWJsZSA9PT0gJ3RydWUnKTtcbn1cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbkluZm9ybWF0aW9uKCkge1xuICB2YXIgZm9jdXNlZEVsZW0gPSBnZXRBY3RpdmVFbGVtZW50RGVlcCgpO1xuICByZXR1cm4ge1xuICAgIGZvY3VzZWRFbGVtOiBmb2N1c2VkRWxlbSxcbiAgICBzZWxlY3Rpb25SYW5nZTogaGFzU2VsZWN0aW9uQ2FwYWJpbGl0aWVzKGZvY3VzZWRFbGVtKSA/IGdldFNlbGVjdGlvbihmb2N1c2VkRWxlbSkgOiBudWxsXG4gIH07XG59XG4vKipcbiAqIEByZXN0b3JlU2VsZWN0aW9uOiBJZiBhbnkgc2VsZWN0aW9uIGluZm9ybWF0aW9uIHdhcyBwb3RlbnRpYWxseSBsb3N0LFxuICogcmVzdG9yZSBpdC4gVGhpcyBpcyB1c2VmdWwgd2hlbiBwZXJmb3JtaW5nIG9wZXJhdGlvbnMgdGhhdCBjb3VsZCByZW1vdmUgZG9tXG4gKiBub2RlcyBhbmQgcGxhY2UgdGhlbSBiYWNrIGluLCByZXN1bHRpbmcgaW4gZm9jdXMgYmVpbmcgbG9zdC5cbiAqL1xuXG5mdW5jdGlvbiByZXN0b3JlU2VsZWN0aW9uKHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24pIHtcbiAgdmFyIGN1ckZvY3VzZWRFbGVtID0gZ2V0QWN0aXZlRWxlbWVudERlZXAoKTtcbiAgdmFyIHByaW9yRm9jdXNlZEVsZW0gPSBwcmlvclNlbGVjdGlvbkluZm9ybWF0aW9uLmZvY3VzZWRFbGVtO1xuICB2YXIgcHJpb3JTZWxlY3Rpb25SYW5nZSA9IHByaW9yU2VsZWN0aW9uSW5mb3JtYXRpb24uc2VsZWN0aW9uUmFuZ2U7XG5cbiAgaWYgKGN1ckZvY3VzZWRFbGVtICE9PSBwcmlvckZvY3VzZWRFbGVtICYmIGlzSW5Eb2N1bWVudChwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgIGlmIChwcmlvclNlbGVjdGlvblJhbmdlICE9PSBudWxsICYmIGhhc1NlbGVjdGlvbkNhcGFiaWxpdGllcyhwcmlvckZvY3VzZWRFbGVtKSkge1xuICAgICAgc2V0U2VsZWN0aW9uKHByaW9yRm9jdXNlZEVsZW0sIHByaW9yU2VsZWN0aW9uUmFuZ2UpO1xuICAgIH0gLy8gRm9jdXNpbmcgYSBub2RlIGNhbiBjaGFuZ2UgdGhlIHNjcm9sbCBwb3NpdGlvbiwgd2hpY2ggaXMgdW5kZXNpcmFibGVcblxuXG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHZhciBhbmNlc3RvciA9IHByaW9yRm9jdXNlZEVsZW07XG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlKSB7XG4gICAgICBpZiAoYW5jZXN0b3Iubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICBhbmNlc3RvcnMucHVzaCh7XG4gICAgICAgICAgZWxlbWVudDogYW5jZXN0b3IsXG4gICAgICAgICAgbGVmdDogYW5jZXN0b3Iuc2Nyb2xsTGVmdCxcbiAgICAgICAgICB0b3A6IGFuY2VzdG9yLnNjcm9sbFRvcFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByaW9yRm9jdXNlZEVsZW0uZm9jdXMoKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFuY2VzdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGluZm8gPSBhbmNlc3RvcnNbaV07XG4gICAgICBpbmZvLmVsZW1lbnQuc2Nyb2xsTGVmdCA9IGluZm8ubGVmdDtcbiAgICAgIGluZm8uZWxlbWVudC5zY3JvbGxUb3AgPSBpbmZvLnRvcDtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogQGdldFNlbGVjdGlvbjogR2V0cyB0aGUgc2VsZWN0aW9uIGJvdW5kcyBvZiBhIGZvY3VzZWQgdGV4dGFyZWEsIGlucHV0IG9yXG4gKiBjb250ZW50RWRpdGFibGUgbm9kZS5cbiAqIC1AaW5wdXQ6IExvb2sgdXAgc2VsZWN0aW9uIGJvdW5kcyBvZiB0aGlzIGlucHV0XG4gKiAtQHJldHVybiB7c3RhcnQ6IHNlbGVjdGlvblN0YXJ0LCBlbmQ6IHNlbGVjdGlvbkVuZH1cbiAqL1xuXG5mdW5jdGlvbiBnZXRTZWxlY3Rpb24oaW5wdXQpIHtcbiAgdmFyIHNlbGVjdGlvbjtcblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIC8vIE1vZGVybiBicm93c2VyIHdpdGggaW5wdXQgb3IgdGV4dGFyZWEuXG4gICAgc2VsZWN0aW9uID0ge1xuICAgICAgc3RhcnQ6IGlucHV0LnNlbGVjdGlvblN0YXJ0LFxuICAgICAgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmRcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIENvbnRlbnQgZWRpdGFibGUgb3Igb2xkIElFIHRleHRhcmVhLlxuICAgIHNlbGVjdGlvbiA9IGdldE9mZnNldHMoaW5wdXQpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGVjdGlvbiB8fCB7XG4gICAgc3RhcnQ6IDAsXG4gICAgZW5kOiAwXG4gIH07XG59XG4vKipcbiAqIEBzZXRTZWxlY3Rpb246IFNldHMgdGhlIHNlbGVjdGlvbiBib3VuZHMgb2YgYSB0ZXh0YXJlYSBvciBpbnB1dCBhbmQgZm9jdXNlc1xuICogdGhlIGlucHV0LlxuICogLUBpbnB1dCAgICAgU2V0IHNlbGVjdGlvbiBib3VuZHMgb2YgdGhpcyBpbnB1dCBvciB0ZXh0YXJlYVxuICogLUBvZmZzZXRzICAgT2JqZWN0IG9mIHNhbWUgZm9ybSB0aGF0IGlzIHJldHVybmVkIGZyb20gZ2V0KlxuICovXG5cbmZ1bmN0aW9uIHNldFNlbGVjdGlvbihpbnB1dCwgb2Zmc2V0cykge1xuICB2YXIgc3RhcnQgPSBvZmZzZXRzLnN0YXJ0O1xuICB2YXIgZW5kID0gb2Zmc2V0cy5lbmQ7XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gc3RhcnQ7XG4gIH1cblxuICBpZiAoJ3NlbGVjdGlvblN0YXJ0JyBpbiBpbnB1dCkge1xuICAgIGlucHV0LnNlbGVjdGlvblN0YXJ0ID0gc3RhcnQ7XG4gICAgaW5wdXQuc2VsZWN0aW9uRW5kID0gTWF0aC5taW4oZW5kLCBpbnB1dC52YWx1ZS5sZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHNldE9mZnNldHMoaW5wdXQsIG9mZnNldHMpO1xuICB9XG59XG5cbnZhciBza2lwU2VsZWN0aW9uQ2hhbmdlRXZlbnQgPSBjYW5Vc2VET00gJiYgJ2RvY3VtZW50TW9kZScgaW4gZG9jdW1lbnQgJiYgZG9jdW1lbnQuZG9jdW1lbnRNb2RlIDw9IDExO1xuXG5mdW5jdGlvbiByZWdpc3RlckV2ZW50cyQzKCkge1xuICByZWdpc3RlclR3b1BoYXNlRXZlbnQoJ29uU2VsZWN0JywgWydmb2N1c291dCcsICdjb250ZXh0bWVudScsICdkcmFnZW5kJywgJ2ZvY3VzaW4nLCAna2V5ZG93bicsICdrZXl1cCcsICdtb3VzZWRvd24nLCAnbW91c2V1cCcsICdzZWxlY3Rpb25jaGFuZ2UnXSk7XG59XG5cbnZhciBhY3RpdmVFbGVtZW50JDEgPSBudWxsO1xudmFyIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xudmFyIGxhc3RTZWxlY3Rpb24gPSBudWxsO1xudmFyIG1vdXNlRG93biA9IGZhbHNlO1xuLyoqXG4gKiBHZXQgYW4gb2JqZWN0IHdoaWNoIGlzIGEgdW5pcXVlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbi5cbiAqXG4gKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgbm90IGJlIGNvbnNpc3RlbnQgYWNyb3NzIG5vZGVzIG9yIGJyb3dzZXJzLCBidXRcbiAqIHR3byBpZGVudGljYWwgc2VsZWN0aW9ucyBvbiB0aGUgc2FtZSBub2RlIHdpbGwgcmV0dXJuIGlkZW50aWNhbCBvYmplY3RzLlxuICovXG5cbmZ1bmN0aW9uIGdldFNlbGVjdGlvbiQxKG5vZGUpIHtcbiAgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gbm9kZSAmJiBoYXNTZWxlY3Rpb25DYXBhYmlsaXRpZXMobm9kZSkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhcnQ6IG5vZGUuc2VsZWN0aW9uU3RhcnQsXG4gICAgICBlbmQ6IG5vZGUuc2VsZWN0aW9uRW5kXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgd2luID0gbm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3c7XG4gICAgdmFyIHNlbGVjdGlvbiA9IHdpbi5nZXRTZWxlY3Rpb24oKTtcbiAgICByZXR1cm4ge1xuICAgICAgYW5jaG9yTm9kZTogc2VsZWN0aW9uLmFuY2hvck5vZGUsXG4gICAgICBhbmNob3JPZmZzZXQ6IHNlbGVjdGlvbi5hbmNob3JPZmZzZXQsXG4gICAgICBmb2N1c05vZGU6IHNlbGVjdGlvbi5mb2N1c05vZGUsXG4gICAgICBmb2N1c09mZnNldDogc2VsZWN0aW9uLmZvY3VzT2Zmc2V0XG4gICAgfTtcbiAgfVxufVxuLyoqXG4gKiBHZXQgZG9jdW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBldmVudCB0YXJnZXQuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRFdmVudFRhcmdldERvY3VtZW50KGV2ZW50VGFyZ2V0KSB7XG4gIHJldHVybiBldmVudFRhcmdldC53aW5kb3cgPT09IGV2ZW50VGFyZ2V0ID8gZXZlbnRUYXJnZXQuZG9jdW1lbnQgOiBldmVudFRhcmdldC5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSA/IGV2ZW50VGFyZ2V0IDogZXZlbnRUYXJnZXQub3duZXJEb2N1bWVudDtcbn1cbi8qKlxuICogUG9sbCBzZWxlY3Rpb24gdG8gc2VlIHdoZXRoZXIgaXQncyBjaGFuZ2VkLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBuYXRpdmVFdmVudFxuICogQHBhcmFtIHtvYmplY3R9IG5hdGl2ZUV2ZW50VGFyZ2V0XG4gKiBAcmV0dXJuIHs/U3ludGhldGljRXZlbnR9XG4gKi9cblxuXG5mdW5jdGlvbiBjb25zdHJ1Y3RTZWxlY3RFdmVudChkaXNwYXRjaFF1ZXVlLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpIHtcbiAgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHJpZ2h0IGVsZW1lbnQsIGFuZCB0aGF0IHRoZSB1c2VyIGlzIG5vdCBkcmFnZ2luZyBhXG4gIC8vIHNlbGVjdGlvbiAodGhpcyBtYXRjaGVzIG5hdGl2ZSBgc2VsZWN0YCBldmVudCBiZWhhdmlvcikuIEluIEhUTUw1LCBzZWxlY3RcbiAgLy8gZmlyZXMgb25seSBvbiBpbnB1dCBhbmQgdGV4dGFyZWEgdGh1cyBpZiB0aGVyZSdzIG5vIGZvY3VzZWQgZWxlbWVudCB3ZVxuICAvLyB3b24ndCBkaXNwYXRjaC5cbiAgdmFyIGRvYyA9IGdldEV2ZW50VGFyZ2V0RG9jdW1lbnQobmF0aXZlRXZlbnRUYXJnZXQpO1xuXG4gIGlmIChtb3VzZURvd24gfHwgYWN0aXZlRWxlbWVudCQxID09IG51bGwgfHwgYWN0aXZlRWxlbWVudCQxICE9PSBnZXRBY3RpdmVFbGVtZW50KGRvYykpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gT25seSBmaXJlIHdoZW4gc2VsZWN0aW9uIGhhcyBhY3R1YWxseSBjaGFuZ2VkLlxuXG5cbiAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24kMShhY3RpdmVFbGVtZW50JDEpO1xuXG4gIGlmICghbGFzdFNlbGVjdGlvbiB8fCAhc2hhbGxvd0VxdWFsKGxhc3RTZWxlY3Rpb24sIGN1cnJlbnRTZWxlY3Rpb24pKSB7XG4gICAgbGFzdFNlbGVjdGlvbiA9IGN1cnJlbnRTZWxlY3Rpb247XG4gICAgdmFyIGxpc3RlbmVycyA9IGFjY3VtdWxhdGVUd29QaGFzZUxpc3RlbmVycyhhY3RpdmVFbGVtZW50SW5zdCQxLCAnb25TZWxlY3QnKTtcblxuICAgIGlmIChsaXN0ZW5lcnMubGVuZ3RoID4gMCkge1xuICAgICAgdmFyIGV2ZW50ID0gbmV3IFN5bnRoZXRpY0V2ZW50KCdvblNlbGVjdCcsICdzZWxlY3QnLCBudWxsLCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgICAgZGlzcGF0Y2hRdWV1ZS5wdXNoKHtcbiAgICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgICBldmVudC50YXJnZXQgPSBhY3RpdmVFbGVtZW50JDE7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRoaXMgcGx1Z2luIGNyZWF0ZXMgYW4gYG9uU2VsZWN0YCBldmVudCB0aGF0IG5vcm1hbGl6ZXMgc2VsZWN0IGV2ZW50c1xuICogYWNyb3NzIGZvcm0gZWxlbWVudHMuXG4gKlxuICogU3VwcG9ydGVkIGVsZW1lbnRzIGFyZTpcbiAqIC0gaW5wdXQgKHNlZSBgaXNUZXh0SW5wdXRFbGVtZW50YClcbiAqIC0gdGV4dGFyZWFcbiAqIC0gY29udGVudEVkaXRhYmxlXG4gKlxuICogVGhpcyBkaWZmZXJzIGZyb20gbmF0aXZlIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zIGluIHRoZSBmb2xsb3dpbmcgd2F5czpcbiAqIC0gRmlyZXMgb24gY29udGVudEVkaXRhYmxlIGZpZWxkcyBhcyB3ZWxsIGFzIGlucHV0cy5cbiAqIC0gRmlyZXMgZm9yIGNvbGxhcHNlZCBzZWxlY3Rpb24uXG4gKiAtIEZpcmVzIGFmdGVyIHVzZXIgaW5wdXQuXG4gKi9cblxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuXG4gIHZhciB0YXJnZXROb2RlID0gdGFyZ2V0SW5zdCA/IGdldE5vZGVGcm9tSW5zdGFuY2UodGFyZ2V0SW5zdCkgOiB3aW5kb3c7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICAvLyBUcmFjayB0aGUgaW5wdXQgbm9kZSB0aGF0IGhhcyBmb2N1cy5cbiAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGlmIChpc1RleHRJbnB1dEVsZW1lbnQodGFyZ2V0Tm9kZSkgfHwgdGFyZ2V0Tm9kZS5jb250ZW50RWRpdGFibGUgPT09ICd0cnVlJykge1xuICAgICAgICBhY3RpdmVFbGVtZW50JDEgPSB0YXJnZXROb2RlO1xuICAgICAgICBhY3RpdmVFbGVtZW50SW5zdCQxID0gdGFyZ2V0SW5zdDtcbiAgICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgYWN0aXZlRWxlbWVudCQxID0gbnVsbDtcbiAgICAgIGFjdGl2ZUVsZW1lbnRJbnN0JDEgPSBudWxsO1xuICAgICAgbGFzdFNlbGVjdGlvbiA9IG51bGw7XG4gICAgICBicmVhaztcbiAgICAvLyBEb24ndCBmaXJlIHRoZSBldmVudCB3aGlsZSB0aGUgdXNlciBpcyBkcmFnZ2luZy4gVGhpcyBtYXRjaGVzIHRoZVxuICAgIC8vIHNlbWFudGljcyBvZiB0aGUgbmF0aXZlIHNlbGVjdCBldmVudC5cblxuICAgIGNhc2UgJ21vdXNlZG93bic6XG4gICAgICBtb3VzZURvd24gPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjb250ZXh0bWVudSc6XG4gICAgY2FzZSAnbW91c2V1cCc6XG4gICAgY2FzZSAnZHJhZ2VuZCc6XG4gICAgICBtb3VzZURvd24gPSBmYWxzZTtcbiAgICAgIGNvbnN0cnVjdFNlbGVjdEV2ZW50KGRpc3BhdGNoUXVldWUsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG4gICAgICBicmVhaztcbiAgICAvLyBDaHJvbWUgYW5kIElFIGZpcmUgbm9uLXN0YW5kYXJkIGV2ZW50IHdoZW4gc2VsZWN0aW9uIGlzIGNoYW5nZWQgKGFuZFxuICAgIC8vIHNvbWV0aW1lcyB3aGVuIGl0IGhhc24ndCkuIElFJ3MgZXZlbnQgZmlyZXMgb3V0IG9mIG9yZGVyIHdpdGggcmVzcGVjdFxuICAgIC8vIHRvIGtleSBhbmQgaW5wdXQgZXZlbnRzIG9uIGRlbGV0aW9uLCBzbyB3ZSBkaXNjYXJkIGl0LlxuICAgIC8vXG4gICAgLy8gRmlyZWZveCBkb2Vzbid0IHN1cHBvcnQgc2VsZWN0aW9uY2hhbmdlLCBzbyBjaGVjayBzZWxlY3Rpb24gc3RhdHVzXG4gICAgLy8gYWZ0ZXIgZWFjaCBrZXkgZW50cnkuIFRoZSBzZWxlY3Rpb24gY2hhbmdlcyBhZnRlciBrZXlkb3duIGFuZCBiZWZvcmVcbiAgICAvLyBrZXl1cCwgYnV0IHdlIGNoZWNrIG9uIGtleWRvd24gYXMgd2VsbCBpbiB0aGUgY2FzZSBvZiBob2xkaW5nIGRvd24gYVxuICAgIC8vIGtleSwgd2hlbiBtdWx0aXBsZSBrZXlkb3duIGV2ZW50cyBhcmUgZmlyZWQgYnV0IG9ubHkgb25lIGtleXVwIGlzLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBvdXIgYXBwcm9hY2ggZm9yIElFIGhhbmRsaW5nLCBmb3IgdGhlIHJlYXNvbiBhYm92ZS5cblxuICAgIGNhc2UgJ3NlbGVjdGlvbmNoYW5nZSc6XG4gICAgICBpZiAoc2tpcFNlbGVjdGlvbkNoYW5nZUV2ZW50KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgY29uc3RydWN0U2VsZWN0RXZlbnQoZGlzcGF0Y2hRdWV1ZSwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0RXZlbnRzJDQoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgcmVhY3ROYW1lID0gdG9wTGV2ZWxFdmVudHNUb1JlYWN0TmFtZXMuZ2V0KGRvbUV2ZW50TmFtZSk7XG5cbiAgaWYgKHJlYWN0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0V2ZW50O1xuICB2YXIgcmVhY3RFdmVudFR5cGUgPSBkb21FdmVudE5hbWU7XG5cbiAgc3dpdGNoIChkb21FdmVudE5hbWUpIHtcbiAgICBjYXNlICdrZXlwcmVzcyc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBrZXlwcmVzcyBldmVudCBmb3IgZnVuY3Rpb24ga2V5cyB0b28uIFRoaXMgcmVtb3Zlc1xuICAgICAgLy8gdGhlIHVud2FudGVkIGtleXByZXNzIGV2ZW50cy4gRW50ZXIgaXMgaG93ZXZlciBib3RoIHByaW50YWJsZSBhbmRcbiAgICAgIC8vIG5vbi1wcmludGFibGUuIE9uZSB3b3VsZCBleHBlY3QgVGFiIHRvIGJlIGFzIHdlbGwgKGJ1dCBpdCBpc24ndCkuXG4gICAgICBpZiAoZ2V0RXZlbnRDaGFyQ29kZShuYXRpdmVFdmVudCkgPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAna2V5ZG93bic6XG4gICAgY2FzZSAna2V5dXAnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljS2V5Ym9hcmRFdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdmb2N1cyc7XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdmb2N1c291dCc6XG4gICAgICByZWFjdEV2ZW50VHlwZSA9ICdibHVyJztcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY0ZvY3VzRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2JlZm9yZWJsdXInOlxuICAgIGNhc2UgJ2FmdGVyYmx1cic6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNGb2N1c0V2ZW50O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdjbGljayc6XG4gICAgICAvLyBGaXJlZm94IGNyZWF0ZXMgYSBjbGljayBldmVudCBvbiByaWdodCBtb3VzZSBjbGlja3MuIFRoaXMgcmVtb3ZlcyB0aGVcbiAgICAgIC8vIHVud2FudGVkIGNsaWNrIGV2ZW50cy5cbiAgICAgIGlmIChuYXRpdmVFdmVudC5idXR0b24gPT09IDIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgY2FzZSAnYXV4Y2xpY2snOlxuICAgIGNhc2UgJ2RibGNsaWNrJzpcbiAgICBjYXNlICdtb3VzZWRvd24nOlxuICAgIGNhc2UgJ21vdXNlbW92ZSc6XG4gICAgY2FzZSAnbW91c2V1cCc6IC8vIFRPRE86IERpc2FibGVkIGVsZW1lbnRzIHNob3VsZCBub3QgcmVzcG9uZCB0byBtb3VzZSBldmVudHNcblxuICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICBjYXNlICdtb3VzZW92ZXInOlxuICAgIGNhc2UgJ2NvbnRleHRtZW51JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY01vdXNlRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RyYWcnOlxuICAgIGNhc2UgJ2RyYWdlbmQnOlxuICAgIGNhc2UgJ2RyYWdlbnRlcic6XG4gICAgY2FzZSAnZHJhZ2V4aXQnOlxuICAgIGNhc2UgJ2RyYWdsZWF2ZSc6XG4gICAgY2FzZSAnZHJhZ292ZXInOlxuICAgIGNhc2UgJ2RyYWdzdGFydCc6XG4gICAgY2FzZSAnZHJvcCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNEcmFnRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RvdWNoY2FuY2VsJzpcbiAgICBjYXNlICd0b3VjaGVuZCc6XG4gICAgY2FzZSAndG91Y2htb3ZlJzpcbiAgICBjYXNlICd0b3VjaHN0YXJ0JzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RvdWNoRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgQU5JTUFUSU9OX0VORDpcbiAgICBjYXNlIEFOSU1BVElPTl9JVEVSQVRJT046XG4gICAgY2FzZSBBTklNQVRJT05fU1RBUlQ6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNBbmltYXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBUUkFOU0lUSU9OX0VORDpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1RyYW5zaXRpb25FdmVudDtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2Nyb2xsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1VJRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3doZWVsJzpcbiAgICAgIFN5bnRoZXRpY0V2ZW50Q3RvciA9IFN5bnRoZXRpY1doZWVsRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2NvcHknOlxuICAgIGNhc2UgJ2N1dCc6XG4gICAgY2FzZSAncGFzdGUnOlxuICAgICAgU3ludGhldGljRXZlbnRDdG9yID0gU3ludGhldGljQ2xpcGJvYXJkRXZlbnQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2dvdHBvaW50ZXJjYXB0dXJlJzpcbiAgICBjYXNlICdsb3N0cG9pbnRlcmNhcHR1cmUnOlxuICAgIGNhc2UgJ3BvaW50ZXJjYW5jZWwnOlxuICAgIGNhc2UgJ3BvaW50ZXJkb3duJzpcbiAgICBjYXNlICdwb2ludGVybW92ZSc6XG4gICAgY2FzZSAncG9pbnRlcm91dCc6XG4gICAgY2FzZSAncG9pbnRlcm92ZXInOlxuICAgIGNhc2UgJ3BvaW50ZXJ1cCc6XG4gICAgICBTeW50aGV0aWNFdmVudEN0b3IgPSBTeW50aGV0aWNQb2ludGVyRXZlbnQ7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAge1xuICAgIC8vIFNvbWUgZXZlbnRzIGRvbid0IGJ1YmJsZSBpbiB0aGUgYnJvd3Nlci5cbiAgICAvLyBJbiB0aGUgcGFzdCwgUmVhY3QgaGFzIGFsd2F5cyBidWJibGVkIHRoZW0sIGJ1dCB0aGlzIGNhbiBiZSBzdXJwcmlzaW5nLlxuICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHRyeSBhbGlnbmluZyBjbG9zZXIgdG8gdGhlIGJyb3dzZXIgYmVoYXZpb3IgYnkgbm90IGJ1YmJsaW5nXG4gICAgLy8gdGhlbSBpbiBSZWFjdCBlaXRoZXIuIFdlJ2xsIHN0YXJ0IGJ5IG5vdCBidWJibGluZyBvblNjcm9sbCwgYW5kIHRoZW4gZXhwYW5kLlxuICAgIHZhciBhY2N1bXVsYXRlVGFyZ2V0T25seSA9ICFpbkNhcHR1cmVQaGFzZSAmJiAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYWRkIGFsbCBldmVudHMgZnJvbVxuICAgIC8vIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0IGluIERPTVBsdWdpbkV2ZW50U3lzdGVtLlxuICAgIC8vIFRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIHNwZWNpYWwgbGlzdC5cbiAgICAvLyBUaGlzIGlzIGEgYnJlYWtpbmcgY2hhbmdlIHRoYXQgY2FuIHdhaXQgdW50aWwgUmVhY3QgMTguXG4gICAgZG9tRXZlbnROYW1lID09PSAnc2Nyb2xsJztcblxuICAgIHZhciBfbGlzdGVuZXJzID0gYWNjdW11bGF0ZVNpbmdsZVBoYXNlTGlzdGVuZXJzKHRhcmdldEluc3QsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnQudHlwZSwgaW5DYXB0dXJlUGhhc2UsIGFjY3VtdWxhdGVUYXJnZXRPbmx5KTtcblxuICAgIGlmIChfbGlzdGVuZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgY3JlYXRlIGV2ZW50IGxhemlseS5cbiAgICAgIHZhciBfZXZlbnQgPSBuZXcgU3ludGhldGljRXZlbnRDdG9yKHJlYWN0TmFtZSwgcmVhY3RFdmVudFR5cGUsIG51bGwsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCk7XG5cbiAgICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICAgIGV2ZW50OiBfZXZlbnQsXG4gICAgICAgIGxpc3RlbmVyczogX2xpc3RlbmVyc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbi8vIFRPRE86IHJlbW92ZSB0b3AtbGV2ZWwgc2lkZSBlZmZlY3QuXG5yZWdpc3RlclNpbXBsZUV2ZW50cygpO1xucmVnaXN0ZXJFdmVudHMkMigpO1xucmVnaXN0ZXJFdmVudHMkMSgpO1xucmVnaXN0ZXJFdmVudHMkMygpO1xucmVnaXN0ZXJFdmVudHMoKTtcblxuZnVuY3Rpb24gZXh0cmFjdEV2ZW50cyQ1KGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0LCBldmVudFN5c3RlbUZsYWdzLCB0YXJnZXRDb250YWluZXIpIHtcbiAgLy8gVE9ETzogd2Ugc2hvdWxkIHJlbW92ZSB0aGUgY29uY2VwdCBvZiBhIFwiU2ltcGxlRXZlbnRQbHVnaW5cIi5cbiAgLy8gVGhpcyBpcyB0aGUgYmFzaWMgZnVuY3Rpb25hbGl0eSBvZiB0aGUgZXZlbnQgc3lzdGVtLiBBbGxcbiAgLy8gdGhlIG90aGVyIHBsdWdpbnMgYXJlIGVzc2VudGlhbGx5IHBvbHlmaWxscy4gU28gdGhlIHBsdWdpblxuICAvLyBzaG91bGQgcHJvYmFibHkgYmUgaW5saW5lZCBzb21ld2hlcmUgYW5kIGhhdmUgaXRzIGxvZ2ljXG4gIC8vIGJlIGNvcmUgdGhlIHRvIGV2ZW50IHN5c3RlbS4gVGhpcyB3b3VsZCBwb3RlbnRpYWxseSBhbGxvd1xuICAvLyB1cyB0byBzaGlwIGJ1aWxkcyBvZiBSZWFjdCB3aXRob3V0IHRoZSBwb2x5ZmlsbGVkIHBsdWdpbnMgYmVsb3cuXG4gIGV4dHJhY3RFdmVudHMkNChkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gIHZhciBzaG91bGRQcm9jZXNzUG9seWZpbGxQbHVnaW5zID0gKGV2ZW50U3lzdGVtRmxhZ3MgJiBTSE9VTERfTk9UX1BST0NFU1NfUE9MWUZJTExfRVZFTlRfUExVR0lOUykgPT09IDA7IC8vIFdlIGRvbid0IHByb2Nlc3MgdGhlc2UgZXZlbnRzIHVubGVzcyB3ZSBhcmUgaW4gdGhlXG4gIC8vIGV2ZW50J3MgbmF0aXZlIFwiYnViYmxlXCIgcGhhc2UsIHdoaWNoIG1lYW5zIHRoYXQgd2UncmVcbiAgLy8gbm90IGluIHRoZSBjYXB0dXJlIHBoYXNlLiBUaGF0J3MgYmVjYXVzZSB3ZSBlbXVsYXRlXG4gIC8vIHRoZSBjYXB0dXJlIHBoYXNlIGhlcmUgc3RpbGwuIFRoaXMgaXMgYSB0cmFkZS1vZmYsXG4gIC8vIGJlY2F1c2UgaW4gYW4gaWRlYWwgd29ybGQgd2Ugd291bGQgbm90IGVtdWxhdGUgYW5kIHVzZVxuICAvLyB0aGUgcGhhc2VzIHByb3Blcmx5LCBsaWtlIHdlIGRvIHdpdGggdGhlIFNpbXBsZUV2ZW50XG4gIC8vIHBsdWdpbi4gSG93ZXZlciwgdGhlIHBsdWdpbnMgYmVsb3cgZWl0aGVyIGV4cGVjdFxuICAvLyBlbXVsYXRpb24gKEVudGVyTGVhdmUpIG9yIHVzZSBzdGF0ZSBsb2NhbGl6ZWQgdG8gdGhhdFxuICAvLyBwbHVnaW4gKEJlZm9yZUlucHV0LCBDaGFuZ2UsIFNlbGVjdCkuIFRoZSBzdGF0ZSBpblxuICAvLyB0aGVzZSBtb2R1bGVzIGNvbXBsaWNhdGVzIHRoaW5ncywgYXMgeW91J2xsIGVzc2VudGlhbGx5XG4gIC8vIGdldCB0aGUgY2FzZSB3aGVyZSB0aGUgY2FwdHVyZSBwaGFzZSBldmVudCBtaWdodCBjaGFuZ2VcbiAgLy8gc3RhdGUsIG9ubHkgZm9yIHRoZSBmb2xsb3dpbmcgYnViYmxlIGV2ZW50IHRvIGNvbWUgaW5cbiAgLy8gbGF0ZXIgYW5kIG5vdCB0cmlnZ2VyIGFueXRoaW5nIGFzIHRoZSBzdGF0ZSBub3dcbiAgLy8gaW52YWxpZGF0ZXMgdGhlIGhldXJpc3RpY3Mgb2YgdGhlIGV2ZW50IHBsdWdpbi4gV2VcbiAgLy8gY291bGQgYWx0ZXIgYWxsIHRoZXNlIHBsdWdpbnMgdG8gd29yayBpbiBzdWNoIHdheXMsIGJ1dFxuICAvLyB0aGF0IG1pZ2h0IGNhdXNlIG90aGVyIHVua25vd24gc2lkZS1lZmZlY3RzIHRoYXQgd2VcbiAgLy8gY2FuJ3QgZm9yc2VlIHJpZ2h0IG5vdy5cblxuICBpZiAoc2hvdWxkUHJvY2Vzc1BvbHlmaWxsUGx1Z2lucykge1xuICAgIGV4dHJhY3RFdmVudHMkMihkaXNwYXRjaFF1ZXVlLCBkb21FdmVudE5hbWUsIHRhcmdldEluc3QsIG5hdGl2ZUV2ZW50LCBuYXRpdmVFdmVudFRhcmdldCwgZXZlbnRTeXN0ZW1GbGFncyk7XG4gICAgZXh0cmFjdEV2ZW50cyQxKGRpc3BhdGNoUXVldWUsIGRvbUV2ZW50TmFtZSwgdGFyZ2V0SW5zdCwgbmF0aXZlRXZlbnQsIG5hdGl2ZUV2ZW50VGFyZ2V0KTtcbiAgICBleHRyYWN0RXZlbnRzJDMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICAgIGV4dHJhY3RFdmVudHMoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQpO1xuICB9XG59IC8vIExpc3Qgb2YgZXZlbnRzIHRoYXQgbmVlZCB0byBiZSBpbmRpdmlkdWFsbHkgYXR0YWNoZWQgdG8gbWVkaWEgZWxlbWVudHMuXG5cblxudmFyIG1lZGlhRXZlbnRUeXBlcyA9IFsnYWJvcnQnLCAnY2FucGxheScsICdjYW5wbGF5dGhyb3VnaCcsICdkdXJhdGlvbmNoYW5nZScsICdlbXB0aWVkJywgJ2VuY3J5cHRlZCcsICdlbmRlZCcsICdlcnJvcicsICdsb2FkZWRkYXRhJywgJ2xvYWRlZG1ldGFkYXRhJywgJ2xvYWRzdGFydCcsICdwYXVzZScsICdwbGF5JywgJ3BsYXlpbmcnLCAncHJvZ3Jlc3MnLCAncmF0ZWNoYW5nZScsICdzZWVrZWQnLCAnc2Vla2luZycsICdzdGFsbGVkJywgJ3N1c3BlbmQnLCAndGltZXVwZGF0ZScsICd2b2x1bWVjaGFuZ2UnLCAnd2FpdGluZyddOyAvLyBXZSBzaG91bGQgbm90IGRlbGVnYXRlIHRoZXNlIGV2ZW50cyB0byB0aGUgY29udGFpbmVyLCBidXQgcmF0aGVyXG4vLyBzZXQgdGhlbSBvbiB0aGUgYWN0dWFsIHRhcmdldCBlbGVtZW50IGl0c2VsZi4gVGhpcyBpcyBwcmltYXJpbHlcbi8vIGJlY2F1c2UgdGhlc2UgZXZlbnRzIGRvIG5vdCBjb25zaXN0ZW50bHkgYnViYmxlIGluIHRoZSBET00uXG5cbnZhciBub25EZWxlZ2F0ZWRFdmVudHMgPSBuZXcgU2V0KFsnY2FuY2VsJywgJ2Nsb3NlJywgJ2ludmFsaWQnLCAnbG9hZCcsICdzY3JvbGwnLCAndG9nZ2xlJ10uY29uY2F0KG1lZGlhRXZlbnRUeXBlcykpO1xuXG5mdW5jdGlvbiBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSB7XG4gIHZhciB0eXBlID0gZXZlbnQudHlwZSB8fCAndW5rbm93bi1ldmVudCc7XG4gIGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBjdXJyZW50VGFyZ2V0O1xuICBpbnZva2VHdWFyZGVkQ2FsbGJhY2tBbmRDYXRjaEZpcnN0RXJyb3IodHlwZSwgbGlzdGVuZXIsIHVuZGVmaW5lZCwgZXZlbnQpO1xuICBldmVudC5jdXJyZW50VGFyZ2V0ID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0Rpc3BhdGNoUXVldWVJdGVtc0luT3JkZXIoZXZlbnQsIGRpc3BhdGNoTGlzdGVuZXJzLCBpbkNhcHR1cmVQaGFzZSkge1xuICB2YXIgcHJldmlvdXNJbnN0YW5jZTtcblxuICBpZiAoaW5DYXB0dXJlUGhhc2UpIHtcbiAgICBmb3IgKHZhciBpID0gZGlzcGF0Y2hMaXN0ZW5lcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHZhciBfZGlzcGF0Y2hMaXN0ZW5lcnMkaSA9IGRpc3BhdGNoTGlzdGVuZXJzW2ldLFxuICAgICAgICAgIGluc3RhbmNlID0gX2Rpc3BhdGNoTGlzdGVuZXJzJGkuaW5zdGFuY2UsXG4gICAgICAgICAgY3VycmVudFRhcmdldCA9IF9kaXNwYXRjaExpc3RlbmVycyRpLmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkaS5saXN0ZW5lcjtcblxuICAgICAgaWYgKGluc3RhbmNlICE9PSBwcmV2aW91c0luc3RhbmNlICYmIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBleGVjdXRlRGlzcGF0Y2goZXZlbnQsIGxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KTtcbiAgICAgIHByZXZpb3VzSW5zdGFuY2UgPSBpbnN0YW5jZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGRpc3BhdGNoTGlzdGVuZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9kaXNwYXRjaExpc3RlbmVycyRfaSA9IGRpc3BhdGNoTGlzdGVuZXJzW19pXSxcbiAgICAgICAgICBfaW5zdGFuY2UgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuaW5zdGFuY2UsXG4gICAgICAgICAgX2N1cnJlbnRUYXJnZXQgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kuY3VycmVudFRhcmdldCxcbiAgICAgICAgICBfbGlzdGVuZXIgPSBfZGlzcGF0Y2hMaXN0ZW5lcnMkX2kubGlzdGVuZXI7XG5cbiAgICAgIGlmIChfaW5zdGFuY2UgIT09IHByZXZpb3VzSW5zdGFuY2UgJiYgZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGV4ZWN1dGVEaXNwYXRjaChldmVudCwgX2xpc3RlbmVyLCBfY3VycmVudFRhcmdldCk7XG4gICAgICBwcmV2aW91c0luc3RhbmNlID0gX2luc3RhbmNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKSB7XG4gIHZhciBpbkNhcHR1cmVQaGFzZSA9IChldmVudFN5c3RlbUZsYWdzICYgSVNfQ0FQVFVSRV9QSEFTRSkgIT09IDA7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkaXNwYXRjaFF1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIF9kaXNwYXRjaFF1ZXVlJGkgPSBkaXNwYXRjaFF1ZXVlW2ldLFxuICAgICAgICBldmVudCA9IF9kaXNwYXRjaFF1ZXVlJGkuZXZlbnQsXG4gICAgICAgIGxpc3RlbmVycyA9IF9kaXNwYXRjaFF1ZXVlJGkubGlzdGVuZXJzO1xuICAgIHByb2Nlc3NEaXNwYXRjaFF1ZXVlSXRlbXNJbk9yZGVyKGV2ZW50LCBsaXN0ZW5lcnMsIGluQ2FwdHVyZVBoYXNlKTsgLy8gIGV2ZW50IHN5c3RlbSBkb2Vzbid0IHVzZSBwb29saW5nLlxuICB9IC8vIFRoaXMgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcmV0aHJvdyBpZiBhbnkgb2YgdGhlIGV2ZW50IGhhbmRsZXJzIHRocmV3LlxuXG5cbiAgcmV0aHJvd0NhdWdodEVycm9yKCk7XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnRzRm9yUGx1Z2lucyhkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIG5hdGl2ZUV2ZW50LCB0YXJnZXRJbnN0LCB0YXJnZXRDb250YWluZXIpIHtcbiAgdmFyIG5hdGl2ZUV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQobmF0aXZlRXZlbnQpO1xuICB2YXIgZGlzcGF0Y2hRdWV1ZSA9IFtdO1xuICBleHRyYWN0RXZlbnRzJDUoZGlzcGF0Y2hRdWV1ZSwgZG9tRXZlbnROYW1lLCB0YXJnZXRJbnN0LCBuYXRpdmVFdmVudCwgbmF0aXZlRXZlbnRUYXJnZXQsIGV2ZW50U3lzdGVtRmxhZ3MpO1xuICBwcm9jZXNzRGlzcGF0Y2hRdWV1ZShkaXNwYXRjaFF1ZXVlLCBldmVudFN5c3RlbUZsYWdzKTtcbn1cblxuZnVuY3Rpb24gbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChkb21FdmVudE5hbWUsIHRhcmdldEVsZW1lbnQpIHtcbiAgdmFyIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIgPSBmYWxzZTtcbiAgdmFyIGxpc3RlbmVyU2V0ID0gZ2V0RXZlbnRMaXN0ZW5lclNldCh0YXJnZXRFbGVtZW50KTtcbiAgdmFyIGxpc3RlbmVyU2V0S2V5ID0gZ2V0TGlzdGVuZXJTZXRLZXkoZG9tRXZlbnROYW1lLCBpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKTtcblxuICBpZiAoIWxpc3RlbmVyU2V0LmhhcyhsaXN0ZW5lclNldEtleSkpIHtcbiAgICBhZGRUcmFwcGVkRXZlbnRMaXN0ZW5lcih0YXJnZXRFbGVtZW50LCBkb21FdmVudE5hbWUsIElTX05PTl9ERUxFR0FURUQsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cbnZhciBsaXN0ZW5pbmdNYXJrZXIgPSAnX3JlYWN0TGlzdGVuaW5nJyArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIpO1xuZnVuY3Rpb24gbGlzdGVuVG9BbGxTdXBwb3J0ZWRFdmVudHMocm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdKSB7XG4gICAgICAvLyBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb246IGRvbid0IGl0ZXJhdGUgdGhyb3VnaCBldmVudHNcbiAgICAgIC8vIGZvciB0aGUgc2FtZSBwb3J0YWwgY29udGFpbmVyIG9yIHJvb3Qgbm9kZSBtb3JlIHRoYW4gb25jZS5cbiAgICAgIC8vIFRPRE86IG9uY2Ugd2UgcmVtb3ZlIHRoZSBmbGFnLCB3ZSBtYXkgYmUgYWJsZSB0byBhbHNvXG4gICAgICAvLyByZW1vdmUgc29tZSBvZiB0aGUgYm9va2tlZXBpbmcgbWFwcyB1c2VkIGZvciBsYXppbmVzcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByb290Q29udGFpbmVyRWxlbWVudFtsaXN0ZW5pbmdNYXJrZXJdID0gdHJ1ZTtcbiAgICBhbGxOYXRpdmVFdmVudHMuZm9yRWFjaChmdW5jdGlvbiAoZG9tRXZlbnROYW1lKSB7XG4gICAgICBpZiAoIW5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgICAgICBsaXN0ZW5Ub05hdGl2ZUV2ZW50KGRvbUV2ZW50TmFtZSwgZmFsc2UsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIHRydWUsIHJvb3RDb250YWluZXJFbGVtZW50LCBudWxsKTtcbiAgICB9KTtcbiAgfVxufVxuZnVuY3Rpb24gbGlzdGVuVG9OYXRpdmVFdmVudChkb21FdmVudE5hbWUsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIHJvb3RDb250YWluZXJFbGVtZW50LCB0YXJnZXRFbGVtZW50KSB7XG4gIHZhciBldmVudFN5c3RlbUZsYWdzID0gYXJndW1lbnRzLmxlbmd0aCA+IDQgJiYgYXJndW1lbnRzWzRdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbNF0gOiAwO1xuICB2YXIgdGFyZ2V0ID0gcm9vdENvbnRhaW5lckVsZW1lbnQ7IC8vIHNlbGVjdGlvbmNoYW5nZSBuZWVkcyB0byBiZSBhdHRhY2hlZCB0byB0aGUgZG9jdW1lbnRcbiAgLy8gb3RoZXJ3aXNlIGl0IHdvbid0IGNhcHR1cmUgaW5jb21pbmcgZXZlbnRzIHRoYXQgYXJlIG9ubHlcbiAgLy8gdHJpZ2dlcmVkIG9uIHRoZSBkb2N1bWVudCBkaXJlY3RseS5cblxuICBpZiAoZG9tRXZlbnROYW1lID09PSAnc2VsZWN0aW9uY2hhbmdlJyAmJiByb290Q29udGFpbmVyRWxlbWVudC5ub2RlVHlwZSAhPT0gRE9DVU1FTlRfTk9ERSkge1xuICAgIHRhcmdldCA9IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gIH0gLy8gSWYgdGhlIGV2ZW50IGNhbiBiZSBkZWxlZ2F0ZWQgKG9yIGlzIGNhcHR1cmUgcGhhc2UpLCB3ZSBjYW5cbiAgLy8gcmVnaXN0ZXIgaXQgdG8gdGhlIHJvb3QgY29udGFpbmVyLiBPdGhlcndpc2UsIHdlIHNob3VsZFxuICAvLyByZWdpc3RlciB0aGUgZXZlbnQgdG8gdGhlIHRhcmdldCBlbGVtZW50IGFuZCBtYXJrIGl0IGFzXG4gIC8vIGEgbm9uLWRlbGVnYXRlZCBldmVudC5cblxuXG4gIGlmICh0YXJnZXRFbGVtZW50ICE9PSBudWxsICYmICFpc0NhcHR1cmVQaGFzZUxpc3RlbmVyICYmIG5vbkRlbGVnYXRlZEV2ZW50cy5oYXMoZG9tRXZlbnROYW1lKSkge1xuICAgIC8vIEZvciBhbGwgbm9uLWRlbGVnYXRlZCBldmVudHMsIGFwYXJ0IGZyb20gc2Nyb2xsLCB3ZSBhdHRhY2hcbiAgICAvLyB0aGVpciBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIHJlc3BlY3RpdmUgZWxlbWVudHMgdGhhdCB0aGVpclxuICAgIC8vIGV2ZW50cyBmaXJlIG9uLiBUaGF0IG1lYW5zIHdlIGNhbiBza2lwIHRoaXMgc3RlcCwgYXMgZXZlbnRcbiAgICAvLyBsaXN0ZW5lciBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHByZXZpb3VzbHkuIEhvd2V2ZXIsIHdlXG4gICAgLy8gc3BlY2lhbCBjYXNlIHRoZSBzY3JvbGwgZXZlbnQgYmVjYXVzZSB0aGUgcmVhbGl0eSBpcyB0aGF0IGFueVxuICAgIC8vIGVsZW1lbnQgY2FuIHNjcm9sbC5cbiAgICAvLyBUT0RPOiBpZGVhbGx5LCB3ZSdkIGV2ZW50dWFsbHkgYXBwbHkgdGhlIHNhbWUgbG9naWMgdG8gYWxsXG4gICAgLy8gZXZlbnRzIGZyb20gdGhlIG5vbkRlbGVnYXRlZEV2ZW50cyBsaXN0LiBUaGVuIHdlIGNhbiByZW1vdmVcbiAgICAvLyB0aGlzIHNwZWNpYWwgY2FzZSBhbmQgdXNlIHRoZSBzYW1lIGxvZ2ljIGZvciBhbGwgZXZlbnRzLlxuICAgIGlmIChkb21FdmVudE5hbWUgIT09ICdzY3JvbGwnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXZlbnRTeXN0ZW1GbGFncyB8PSBJU19OT05fREVMRUdBVEVEO1xuICAgIHRhcmdldCA9IHRhcmdldEVsZW1lbnQ7XG4gIH1cblxuICB2YXIgbGlzdGVuZXJTZXQgPSBnZXRFdmVudExpc3RlbmVyU2V0KHRhcmdldCk7XG4gIHZhciBsaXN0ZW5lclNldEtleSA9IGdldExpc3RlbmVyU2V0S2V5KGRvbUV2ZW50TmFtZSwgaXNDYXB0dXJlUGhhc2VMaXN0ZW5lcik7IC8vIElmIHRoZSBsaXN0ZW5lciBlbnRyeSBpcyBlbXB0eSBvciB3ZSBzaG91bGQgdXBncmFkZSwgdGhlblxuICAvLyB3ZSBuZWVkIHRvIHRyYXAgYW4gZXZlbnQgbGlzdGVuZXIgb250byB0aGUgdGFyZ2V0LlxuXG4gIGlmICghbGlzdGVuZXJTZXQuaGFzKGxpc3RlbmVyU2V0S2V5KSkge1xuICAgIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgICBldmVudFN5c3RlbUZsYWdzIHw9IElTX0NBUFRVUkVfUEhBU0U7XG4gICAgfVxuXG4gICAgYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIpO1xuICAgIGxpc3RlbmVyU2V0LmFkZChsaXN0ZW5lclNldEtleSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkVHJhcHBlZEV2ZW50TGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGV2ZW50U3lzdGVtRmxhZ3MsIGlzQ2FwdHVyZVBoYXNlTGlzdGVuZXIsIGlzRGVmZXJyZWRMaXN0ZW5lckZvckxlZ2FjeUZCU3VwcG9ydCkge1xuICB2YXIgbGlzdGVuZXIgPSBjcmVhdGVFdmVudExpc3RlbmVyV3JhcHBlcldpdGhQcmlvcml0eSh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncyk7IC8vIElmIHBhc3NpdmUgb3B0aW9uIGlzIG5vdCBzdXBwb3J0ZWQsIHRoZW4gdGhlIGV2ZW50IHdpbGwgYmVcbiAgLy8gYWN0aXZlIGFuZCBub3QgcGFzc2l2ZS5cblxuICB2YXIgaXNQYXNzaXZlTGlzdGVuZXIgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKHBhc3NpdmVCcm93c2VyRXZlbnRzU3VwcG9ydGVkKSB7XG4gICAgLy8gQnJvd3NlcnMgaW50cm9kdWNlZCBhbiBpbnRlcnZlbnRpb24sIG1ha2luZyB0aGVzZSBldmVudHNcbiAgICAvLyBwYXNzaXZlIGJ5IGRlZmF1bHQgb24gZG9jdW1lbnQuIFJlYWN0IGRvZXNuJ3QgYmluZCB0aGVtXG4gICAgLy8gdG8gZG9jdW1lbnQgYW55bW9yZSwgYnV0IGNoYW5naW5nIHRoaXMgbm93IHdvdWxkIHVuZG9cbiAgICAvLyB0aGUgcGVyZm9ybWFuY2Ugd2lucyBmcm9tIHRoZSBjaGFuZ2UuIFNvIHdlIGVtdWxhdGVcbiAgICAvLyB0aGUgZXhpc3RpbmcgYmVoYXZpb3IgbWFudWFsbHkgb24gdGhlIHJvb3RzIG5vdy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5NjUxXG4gICAgaWYgKGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNoc3RhcnQnIHx8IGRvbUV2ZW50TmFtZSA9PT0gJ3RvdWNobW92ZScgfHwgZG9tRXZlbnROYW1lID09PSAnd2hlZWwnKSB7XG4gICAgICBpc1Bhc3NpdmVMaXN0ZW5lciA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgdGFyZ2V0Q29udGFpbmVyID0gIHRhcmdldENvbnRhaW5lcjtcbiAgdmFyIHVuc3Vic2NyaWJlTGlzdGVuZXI7IC8vIFdoZW4gbGVnYWN5RkJTdXBwb3J0IGlzIGVuYWJsZWQsIGl0J3MgZm9yIHdoZW4gd2VcblxuXG4gIGlmIChpc0NhcHR1cmVQaGFzZUxpc3RlbmVyKSB7XG4gICAgaWYgKGlzUGFzc2l2ZUxpc3RlbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHVuc3Vic2NyaWJlTGlzdGVuZXIgPSBhZGRFdmVudENhcHR1cmVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50Q2FwdHVyZUxpc3RlbmVyKHRhcmdldENvbnRhaW5lciwgZG9tRXZlbnROYW1lLCBsaXN0ZW5lcik7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChpc1Bhc3NpdmVMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB1bnN1YnNjcmliZUxpc3RlbmVyID0gYWRkRXZlbnRCdWJibGVMaXN0ZW5lcldpdGhQYXNzaXZlRmxhZyh0YXJnZXRDb250YWluZXIsIGRvbUV2ZW50TmFtZSwgbGlzdGVuZXIsIGlzUGFzc2l2ZUxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdW5zdWJzY3JpYmVMaXN0ZW5lciA9IGFkZEV2ZW50QnViYmxlTGlzdGVuZXIodGFyZ2V0Q29udGFpbmVyLCBkb21FdmVudE5hbWUsIGxpc3RlbmVyKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNNYXRjaGluZ1Jvb3RDb250YWluZXIoZ3JhbmRDb250YWluZXIsIHRhcmdldENvbnRhaW5lcikge1xuICByZXR1cm4gZ3JhbmRDb250YWluZXIgPT09IHRhcmdldENvbnRhaW5lciB8fCBncmFuZENvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFICYmIGdyYW5kQ29udGFpbmVyLnBhcmVudE5vZGUgPT09IHRhcmdldENvbnRhaW5lcjtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudEZvclBsdWdpbkV2ZW50U3lzdGVtKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIHRhcmdldEluc3QsIHRhcmdldENvbnRhaW5lcikge1xuICB2YXIgYW5jZXN0b3JJbnN0ID0gdGFyZ2V0SW5zdDtcblxuICBpZiAoKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19FVkVOVF9IQU5ETEVfTk9OX01BTkFHRURfTk9ERSkgPT09IDAgJiYgKGV2ZW50U3lzdGVtRmxhZ3MgJiBJU19OT05fREVMRUdBVEVEKSA9PT0gMCkge1xuICAgIHZhciB0YXJnZXRDb250YWluZXJOb2RlID0gdGFyZ2V0Q29udGFpbmVyOyAvLyBJZiB3ZSBhcmUgdXNpbmcgdGhlIGxlZ2FjeSBGQiBzdXBwb3J0IGZsYWcsIHdlXG5cbiAgICBpZiAodGFyZ2V0SW5zdCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhlIGJlbG93IGxvZ2ljIGF0dGVtcHRzIHRvIHdvcmsgb3V0IGlmIHdlIG5lZWQgdG8gY2hhbmdlXG4gICAgICAvLyB0aGUgdGFyZ2V0IGZpYmVyIHRvIGEgZGlmZmVyZW50IGFuY2VzdG9yLiBXZSBoYWQgc2ltaWxhciBsb2dpY1xuICAgICAgLy8gaW4gdGhlIGxlZ2FjeSBldmVudCBzeXN0ZW0sIGV4Y2VwdCB0aGUgYmlnIGRpZmZlcmVuY2UgYmV0d2VlblxuICAgICAgLy8gc3lzdGVtcyBpcyB0aGF0IHRoZSBtb2Rlcm4gZXZlbnQgc3lzdGVtIG5vdyBoYXMgYW4gZXZlbnQgbGlzdGVuZXJcbiAgICAgIC8vIGF0dGFjaGVkIHRvIGVhY2ggUmVhY3QgUm9vdCBhbmQgUmVhY3QgUG9ydGFsIFJvb3QuIFRvZ2V0aGVyLFxuICAgICAgLy8gdGhlIERPTSBub2RlcyByZXByZXNlbnRpbmcgdGhlc2Ugcm9vdHMgYXJlIHRoZSBcInJvb3RDb250YWluZXJcIi5cbiAgICAgIC8vIFRvIGZpZ3VyZSBvdXQgd2hpY2ggYW5jZXN0b3IgaW5zdGFuY2Ugd2Ugc2hvdWxkIHVzZSwgd2UgdHJhdmVyc2VcbiAgICAgIC8vIHVwIHRoZSBmaWJlciB0cmVlIGZyb20gdGhlIHRhcmdldCBpbnN0YW5jZSBhbmQgYXR0ZW1wdCB0byBmaW5kXG4gICAgICAvLyByb290IGJvdW5kYXJpZXMgdGhhdCBtYXRjaCB0aGF0IG9mIG91ciBjdXJyZW50IFwicm9vdENvbnRhaW5lclwiLlxuICAgICAgLy8gSWYgd2UgZmluZCB0aGF0IFwicm9vdENvbnRhaW5lclwiLCB3ZSBmaW5kIHRoZSBwYXJlbnQgZmliZXJcbiAgICAgIC8vIHN1Yi10cmVlIGZvciB0aGF0IHJvb3QgYW5kIG1ha2UgdGhhdCBvdXIgYW5jZXN0b3IgaW5zdGFuY2UuXG4gICAgICB2YXIgbm9kZSA9IHRhcmdldEluc3Q7XG5cbiAgICAgIG1haW5Mb29wOiB3aGlsZSAodHJ1ZSkge1xuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBub2RlVGFnID0gbm9kZS50YWc7XG5cbiAgICAgICAgaWYgKG5vZGVUYWcgPT09IEhvc3RSb290IHx8IG5vZGVUYWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZS5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztcblxuICAgICAgICAgIGlmIChpc01hdGNoaW5nUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhcmdldENvbnRhaW5lck5vZGUpKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobm9kZVRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBpcyBhIHBvcnRhbCwgYnV0IGl0J3Mgbm90IHRoZSByb290Q29udGFpbmVyIHdlJ3JlIGxvb2tpbmcgZm9yLlxuICAgICAgICAgICAgLy8gTm9ybWFsbHkgcG9ydGFscyBoYW5kbGUgdGhlaXIgb3duIGV2ZW50cyBhbGwgdGhlIHdheSBkb3duIHRvIHRoZSByb290LlxuICAgICAgICAgICAgLy8gU28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gc3RvcCBub3cuIEhvd2V2ZXIsIHdlIGRvbid0IGtub3cgaWYgdGhpcyBwb3J0YWxcbiAgICAgICAgICAgIC8vIHdhcyBwYXJ0IG9mICpvdXIqIHJvb3QuXG4gICAgICAgICAgICB2YXIgZ3JhbmROb2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgICAgICAgIHdoaWxlIChncmFuZE5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgdmFyIGdyYW5kVGFnID0gZ3JhbmROb2RlLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZ3JhbmRUYWcgPT09IEhvc3RSb290IHx8IGdyYW5kVGFnID09PSBIb3N0UG9ydGFsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGdyYW5kQ29udGFpbmVyID0gZ3JhbmROb2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlzTWF0Y2hpbmdSb290Q29udGFpbmVyKGdyYW5kQ29udGFpbmVyLCB0YXJnZXRDb250YWluZXJOb2RlKSkge1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgcm9vdENvbnRhaW5lciB3ZSdyZSBsb29raW5nIGZvciBhbmQgd2UgZm91bmQgaXQgYXNcbiAgICAgICAgICAgICAgICAgIC8vIGEgcGFyZW50IG9mIHRoZSBQb3J0YWwuIFRoYXQgbWVhbnMgd2UgY2FuIGlnbm9yZSBpdCBiZWNhdXNlIHRoZVxuICAgICAgICAgICAgICAgICAgLy8gUG9ydGFsIHdpbGwgYnViYmxlIHRocm91Z2ggdG8gdXMuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZ3JhbmROb2RlID0gZ3JhbmROb2RlLnJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIE5vdyB3ZSBuZWVkIHRvIGZpbmQgaXQncyBjb3JyZXNwb25kaW5nIGhvc3QgZmliZXIgaW4gdGhlIG90aGVyXG4gICAgICAgICAgLy8gdHJlZS4gVG8gZG8gdGhpcyB3ZSBjYW4gdXNlIGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLCBidXQgd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGZpYmVyIGlzIGEgaG9zdCBpbnN0YW5jZSwgb3RoZXJ3aXNlXG4gICAgICAgICAgLy8gd2UgbmVlZCB0byB0cmF2ZXJzZSB1cCB0aHJvdWdoIHRoZSBET00gdGlsbCB3ZSBmaW5kIHRoZSBjb3JyZWN0XG4gICAgICAgICAgLy8gbm9kZSB0aGF0IGlzIGZyb20gdGhlIG90aGVyIHRyZWUuXG5cblxuICAgICAgICAgIHdoaWxlIChjb250YWluZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwYXJlbnROb2RlID0gZ2V0Q2xvc2VzdEluc3RhbmNlRnJvbU5vZGUoY29udGFpbmVyKTtcblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgcGFyZW50VGFnID0gcGFyZW50Tm9kZS50YWc7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRUYWcgPT09IEhvc3RDb21wb25lbnQgfHwgcGFyZW50VGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICAgICAgICBub2RlID0gYW5jZXN0b3JJbnN0ID0gcGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgY29udGludWUgbWFpbkxvb3A7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBiYXRjaGVkRXZlbnRVcGRhdGVzKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudHNGb3JQbHVnaW5zKGRvbUV2ZW50TmFtZSwgZXZlbnRTeXN0ZW1GbGFncywgbmF0aXZlRXZlbnQsIGFuY2VzdG9ySW5zdCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgY3VycmVudFRhcmdldCkge1xuICByZXR1cm4ge1xuICAgIGluc3RhbmNlOiBpbnN0YW5jZSxcbiAgICBsaXN0ZW5lcjogbGlzdGVuZXIsXG4gICAgY3VycmVudFRhcmdldDogY3VycmVudFRhcmdldFxuICB9O1xufVxuXG5mdW5jdGlvbiBhY2N1bXVsYXRlU2luZ2xlUGhhc2VMaXN0ZW5lcnModGFyZ2V0RmliZXIsIHJlYWN0TmFtZSwgbmF0aXZlRXZlbnRUeXBlLCBpbkNhcHR1cmVQaGFzZSwgYWNjdW11bGF0ZVRhcmdldE9ubHkpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICE9PSBudWxsID8gcmVhY3ROYW1lICsgJ0NhcHR1cmUnIDogbnVsbDtcbiAgdmFyIHJlYWN0RXZlbnROYW1lID0gaW5DYXB0dXJlUGhhc2UgPyBjYXB0dXJlTmFtZSA6IHJlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXRGaWJlcjtcbiAgdmFyIGxhc3RIb3N0Q29tcG9uZW50ID0gbnVsbDsgLy8gQWNjdW11bGF0ZSBhbGwgaW5zdGFuY2VzIGFuZCBsaXN0ZW5lcnMgdmlhIHRoZSB0YXJnZXQgLT4gcm9vdCBwYXRoLlxuXG4gIHdoaWxlIChpbnN0YW5jZSAhPT0gbnVsbCkge1xuICAgIHZhciBfaW5zdGFuY2UyID0gaW5zdGFuY2UsXG4gICAgICAgIHN0YXRlTm9kZSA9IF9pbnN0YW5jZTIuc3RhdGVOb2RlLFxuICAgICAgICB0YWcgPSBfaW5zdGFuY2UyLnRhZzsgLy8gSGFuZGxlIGxpc3RlbmVycyB0aGF0IGFyZSBvbiBIb3N0Q29tcG9uZW50cyAoaS5lLiA8ZGl2PilcblxuICAgIGlmICh0YWcgPT09IEhvc3RDb21wb25lbnQgJiYgc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICBsYXN0SG9zdENvbXBvbmVudCA9IHN0YXRlTm9kZTsgLy8gY3JlYXRlRXZlbnRIYW5kbGUgbGlzdGVuZXJzXG5cblxuICAgICAgaWYgKHJlYWN0RXZlbnROYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBsaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCByZWFjdEV2ZW50TmFtZSk7XG5cbiAgICAgICAgaWYgKGxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBsaXN0ZW5lciwgbGFzdEhvc3RDb21wb25lbnQpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gSWYgd2UgYXJlIG9ubHkgYWNjdW11bGF0aW5nIGV2ZW50cyBmb3IgdGhlIHRhcmdldCwgdGhlbiB3ZSBkb24ndFxuICAgIC8vIGNvbnRpbnVlIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIHRoZSBSZWFjdCBmaWJlciB0cmVlIHRvIGZpbmQgb3RoZXJcbiAgICAvLyBsaXN0ZW5lcnMuXG5cblxuICAgIGlmIChhY2N1bXVsYXRlVGFyZ2V0T25seSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufSAvLyBXZSBzaG91bGQgb25seSB1c2UgdGhpcyBmdW5jdGlvbiBmb3I6XG4vLyAtIEJlZm9yZUlucHV0RXZlbnRQbHVnaW5cbi8vIC0gQ2hhbmdlRXZlbnRQbHVnaW5cbi8vIC0gU2VsZWN0RXZlbnRQbHVnaW5cbi8vIFRoaXMgaXMgYmVjYXVzZSB3ZSBvbmx5IHByb2Nlc3MgdGhlc2UgcGx1Z2luc1xuLy8gaW4gdGhlIGJ1YmJsZSBwaGFzZSwgc28gd2UgbmVlZCB0byBhY2N1bXVsYXRlIHR3b1xuLy8gcGhhc2UgZXZlbnQgbGlzdGVuZXJzICh2aWEgZW11bGF0aW9uKS5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZVR3b1BoYXNlTGlzdGVuZXJzKHRhcmdldEZpYmVyLCByZWFjdE5hbWUpIHtcbiAgdmFyIGNhcHR1cmVOYW1lID0gcmVhY3ROYW1lICsgJ0NhcHR1cmUnO1xuICB2YXIgbGlzdGVuZXJzID0gW107XG4gIHZhciBpbnN0YW5jZSA9IHRhcmdldEZpYmVyOyAvLyBBY2N1bXVsYXRlIGFsbCBpbnN0YW5jZXMgYW5kIGxpc3RlbmVycyB2aWEgdGhlIHRhcmdldCAtPiByb290IHBhdGguXG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgdmFyIF9pbnN0YW5jZTMgPSBpbnN0YW5jZSxcbiAgICAgICAgc3RhdGVOb2RlID0gX2luc3RhbmNlMy5zdGF0ZU5vZGUsXG4gICAgICAgIHRhZyA9IF9pbnN0YW5jZTMudGFnOyAvLyBIYW5kbGUgbGlzdGVuZXJzIHRoYXQgYXJlIG9uIEhvc3RDb21wb25lbnRzIChpLmUuIDxkaXY+KVxuXG4gICAgaWYgKHRhZyA9PT0gSG9zdENvbXBvbmVudCAmJiBzdGF0ZU5vZGUgIT09IG51bGwpIHtcbiAgICAgIHZhciBjdXJyZW50VGFyZ2V0ID0gc3RhdGVOb2RlO1xuICAgICAgdmFyIGNhcHR1cmVMaXN0ZW5lciA9IGdldExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTmFtZSk7XG5cbiAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICBsaXN0ZW5lcnMudW5zaGlmdChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBjYXB0dXJlTGlzdGVuZXIsIGN1cnJlbnRUYXJnZXQpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGJ1YmJsZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlYWN0TmFtZSk7XG5cbiAgICAgIGlmIChidWJibGVMaXN0ZW5lciAhPSBudWxsKSB7XG4gICAgICAgIGxpc3RlbmVycy5wdXNoKGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGJ1YmJsZUxpc3RlbmVyLCBjdXJyZW50VGFyZ2V0KSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICByZXR1cm4gbGlzdGVuZXJzO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnQoaW5zdCkge1xuICBpZiAoaW5zdCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZG8ge1xuICAgIGluc3QgPSBpbnN0LnJldHVybjsgLy8gVE9ETzogSWYgdGhpcyBpcyBhIEhvc3RSb290IHdlIG1pZ2h0IHdhbnQgdG8gYmFpbCBvdXQuXG4gICAgLy8gVGhhdCBpcyBkZXBlbmRpbmcgb24gaWYgd2Ugd2FudCBuZXN0ZWQgc3VidHJlZXMgKGxheWVycykgdG8gYnViYmxlXG4gICAgLy8gZXZlbnRzIHRvIHRoZWlyIHBhcmVudC4gV2UgY291bGQgYWxzbyBnbyB0aHJvdWdoIHBhcmVudE5vZGUgb24gdGhlXG4gICAgLy8gaG9zdCBub2RlIGJ1dCB0aGF0IHdvdWxkbid0IHdvcmsgZm9yIFJlYWN0IE5hdGl2ZSBhbmQgZG9lc24ndCBsZXQgdXNcbiAgICAvLyBkbyB0aGUgcG9ydGFsIGZlYXR1cmUuXG4gIH0gd2hpbGUgKGluc3QgJiYgaW5zdC50YWcgIT09IEhvc3RDb21wb25lbnQpO1xuXG4gIGlmIChpbnN0KSB7XG4gICAgcmV0dXJuIGluc3Q7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogUmV0dXJuIHRoZSBsb3dlc3QgY29tbW9uIGFuY2VzdG9yIG9mIEEgYW5kIEIsIG9yIG51bGwgaWYgdGhleSBhcmUgaW5cbiAqIGRpZmZlcmVudCB0cmVlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGluc3RBLCBpbnN0Qikge1xuICB2YXIgbm9kZUEgPSBpbnN0QTtcbiAgdmFyIG5vZGVCID0gaW5zdEI7XG4gIHZhciBkZXB0aEEgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBBID0gbm9kZUE7IHRlbXBBOyB0ZW1wQSA9IGdldFBhcmVudCh0ZW1wQSkpIHtcbiAgICBkZXB0aEErKztcbiAgfVxuXG4gIHZhciBkZXB0aEIgPSAwO1xuXG4gIGZvciAodmFyIHRlbXBCID0gbm9kZUI7IHRlbXBCOyB0ZW1wQiA9IGdldFBhcmVudCh0ZW1wQikpIHtcbiAgICBkZXB0aEIrKztcbiAgfSAvLyBJZiBBIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhBIC0gZGVwdGhCID4gMCkge1xuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBkZXB0aEEtLTtcbiAgfSAvLyBJZiBCIGlzIGRlZXBlciwgY3Jhd2wgdXAuXG5cblxuICB3aGlsZSAoZGVwdGhCIC0gZGVwdGhBID4gMCkge1xuICAgIG5vZGVCID0gZ2V0UGFyZW50KG5vZGVCKTtcbiAgICBkZXB0aEItLTtcbiAgfSAvLyBXYWxrIGluIGxvY2tzdGVwIHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cblxuXG4gIHZhciBkZXB0aCA9IGRlcHRoQTtcblxuICB3aGlsZSAoZGVwdGgtLSkge1xuICAgIGlmIChub2RlQSA9PT0gbm9kZUIgfHwgbm9kZUIgIT09IG51bGwgJiYgbm9kZUEgPT09IG5vZGVCLmFsdGVybmF0ZSkge1xuICAgICAgcmV0dXJuIG5vZGVBO1xuICAgIH1cblxuICAgIG5vZGVBID0gZ2V0UGFyZW50KG5vZGVBKTtcbiAgICBub2RlQiA9IGdldFBhcmVudChub2RlQik7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVMaXN0ZW5lcnNGb3JFdmVudChkaXNwYXRjaFF1ZXVlLCBldmVudCwgdGFyZ2V0LCBjb21tb24sIGluQ2FwdHVyZVBoYXNlKSB7XG4gIHZhciByZWdpc3RyYXRpb25OYW1lID0gZXZlbnQuX3JlYWN0TmFtZTtcbiAgdmFyIGxpc3RlbmVycyA9IFtdO1xuICB2YXIgaW5zdGFuY2UgPSB0YXJnZXQ7XG5cbiAgd2hpbGUgKGluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgaWYgKGluc3RhbmNlID09PSBjb21tb24pIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBfaW5zdGFuY2U0ID0gaW5zdGFuY2UsXG4gICAgICAgIGFsdGVybmF0ZSA9IF9pbnN0YW5jZTQuYWx0ZXJuYXRlLFxuICAgICAgICBzdGF0ZU5vZGUgPSBfaW5zdGFuY2U0LnN0YXRlTm9kZSxcbiAgICAgICAgdGFnID0gX2luc3RhbmNlNC50YWc7XG5cbiAgICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZSA9PT0gY29tbW9uKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSBIb3N0Q29tcG9uZW50ICYmIHN0YXRlTm9kZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGN1cnJlbnRUYXJnZXQgPSBzdGF0ZU5vZGU7XG5cbiAgICAgIGlmIChpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgY2FwdHVyZUxpc3RlbmVyID0gZ2V0TGlzdGVuZXIoaW5zdGFuY2UsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuXG4gICAgICAgIGlmIChjYXB0dXJlTGlzdGVuZXIgIT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVycy51bnNoaWZ0KGNyZWF0ZURpc3BhdGNoTGlzdGVuZXIoaW5zdGFuY2UsIGNhcHR1cmVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFpbkNhcHR1cmVQaGFzZSkge1xuICAgICAgICB2YXIgYnViYmxlTGlzdGVuZXIgPSBnZXRMaXN0ZW5lcihpbnN0YW5jZSwgcmVnaXN0cmF0aW9uTmFtZSk7XG5cbiAgICAgICAgaWYgKGJ1YmJsZUxpc3RlbmVyICE9IG51bGwpIHtcbiAgICAgICAgICBsaXN0ZW5lcnMucHVzaChjcmVhdGVEaXNwYXRjaExpc3RlbmVyKGluc3RhbmNlLCBidWJibGVMaXN0ZW5lciwgY3VycmVudFRhcmdldCkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaW5zdGFuY2UgPSBpbnN0YW5jZS5yZXR1cm47XG4gIH1cblxuICBpZiAobGlzdGVuZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIGRpc3BhdGNoUXVldWUucHVzaCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1xuICAgIH0pO1xuICB9XG59IC8vIFdlIHNob3VsZCBvbmx5IHVzZSB0aGlzIGZ1bmN0aW9uIGZvcjpcbi8vIC0gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luXG4vLyBUaGlzIGlzIGJlY2F1c2Ugd2Ugb25seSBwcm9jZXNzIHRoaXMgcGx1Z2luXG4vLyBpbiB0aGUgYnViYmxlIHBoYXNlLCBzbyB3ZSBuZWVkIHRvIGFjY3VtdWxhdGUgdHdvXG4vLyBwaGFzZSBldmVudCBsaXN0ZW5lcnMuXG5cblxuZnVuY3Rpb24gYWNjdW11bGF0ZUVudGVyTGVhdmVUd29QaGFzZUxpc3RlbmVycyhkaXNwYXRjaFF1ZXVlLCBsZWF2ZUV2ZW50LCBlbnRlckV2ZW50LCBmcm9tLCB0bykge1xuICB2YXIgY29tbW9uID0gZnJvbSAmJiB0byA/IGdldExvd2VzdENvbW1vbkFuY2VzdG9yKGZyb20sIHRvKSA6IG51bGw7XG5cbiAgaWYgKGZyb20gIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGxlYXZlRXZlbnQsIGZyb20sIGNvbW1vbiwgZmFsc2UpO1xuICB9XG5cbiAgaWYgKHRvICE9PSBudWxsICYmIGVudGVyRXZlbnQgIT09IG51bGwpIHtcbiAgICBhY2N1bXVsYXRlRW50ZXJMZWF2ZUxpc3RlbmVyc0ZvckV2ZW50KGRpc3BhdGNoUXVldWUsIGVudGVyRXZlbnQsIHRvLCBjb21tb24sIHRydWUpO1xuICB9XG59XG5mdW5jdGlvbiBnZXRMaXN0ZW5lclNldEtleShkb21FdmVudE5hbWUsIGNhcHR1cmUpIHtcbiAgcmV0dXJuIGRvbUV2ZW50TmFtZSArIFwiX19cIiArIChjYXB0dXJlID8gJ2NhcHR1cmUnIDogJ2J1YmJsZScpO1xufVxuXG52YXIgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSBmYWxzZTtcbnZhciBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCA9ICdkYW5nZXJvdXNseVNldElubmVySFRNTCc7XG52YXIgU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HID0gJ3N1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyc7XG52YXIgU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbnZhciBBVVRPRk9DVVMgPSAnYXV0b0ZvY3VzJztcbnZhciBDSElMRFJFTiA9ICdjaGlsZHJlbic7XG52YXIgU1RZTEUgPSAnc3R5bGUnO1xudmFyIEhUTUwkMSA9ICdfX2h0bWwnO1xudmFyIEhUTUxfTkFNRVNQQUNFJDEgPSBOYW1lc3BhY2VzLmh0bWw7XG52YXIgd2FybmVkVW5rbm93blRhZ3M7XG52YXIgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nO1xudmFyIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQ7XG52YXIgd2FybkZvclRleHREaWZmZXJlbmNlO1xudmFyIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZTtcbnZhciB3YXJuRm9yRXh0cmFBdHRyaWJ1dGVzO1xudmFyIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcjtcbnZhciBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nO1xudmFyIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZTtcbnZhciBub3JtYWxpemVIVE1MO1xuXG57XG4gIHdhcm5lZFVua25vd25UYWdzID0ge1xuICAgIC8vIFRoZXJlIGFyZSB3b3JraW5nIHBvbHlmaWxscyBmb3IgPGRpYWxvZz4uIExldCBwZW9wbGUgdXNlIGl0LlxuICAgIGRpYWxvZzogdHJ1ZSxcbiAgICAvLyBFbGVjdHJvbiBzaGlwcyBhIGN1c3RvbSA8d2Vidmlldz4gdGFnIHRvIGRpc3BsYXkgZXh0ZXJuYWwgd2ViIGNvbnRlbnQgaW5cbiAgICAvLyBhbiBpc29sYXRlZCBmcmFtZSBhbmQgcHJvY2Vzcy5cbiAgICAvLyBUaGlzIHRhZyBpcyBub3QgcHJlc2VudCBpbiBub24gRWxlY3Ryb24gZW52aXJvbm1lbnRzIHN1Y2ggYXMgSlNEb20gd2hpY2hcbiAgICAvLyBpcyBvZnRlbiB1c2VkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgIC8vIEBzZWUgaHR0cHM6Ly9lbGVjdHJvbmpzLm9yZy9kb2NzL2FwaS93ZWJ2aWV3LXRhZ1xuICAgIHdlYnZpZXc6IHRydWVcbiAgfTtcblxuICB2YWxpZGF0ZVByb3BlcnRpZXNJbkRldmVsb3BtZW50ID0gZnVuY3Rpb24gKHR5cGUsIHByb3BzKSB7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzKHR5cGUsIHByb3BzKTtcbiAgICB2YWxpZGF0ZVByb3BlcnRpZXMkMSh0eXBlLCBwcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzJDIodHlwZSwgcHJvcHMsIHtcbiAgICAgIHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXM6IHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMsXG4gICAgICBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzOiBwb3NzaWJsZVJlZ2lzdHJhdGlvbk5hbWVzXG4gICAgfSk7XG4gIH07IC8vIElFIDExIHBhcnNlcyAmIG5vcm1hbGl6ZXMgdGhlIHN0eWxlIGF0dHJpYnV0ZSBhcyBvcHBvc2VkIHRvIG90aGVyXG4gIC8vIGJyb3dzZXJzLiBJdCBhZGRzIHNwYWNlcyBhbmQgc29ydHMgdGhlIHByb3BlcnRpZXMgaW4gc29tZVxuICAvLyBub24tYWxwaGFiZXRpY2FsIG9yZGVyLiBIYW5kbGluZyB0aGF0IHdvdWxkIHJlcXVpcmUgc29ydGluZyBDU1NcbiAgLy8gcHJvcGVydGllcyBpbiB0aGUgY2xpZW50ICYgc2VydmVyIHZlcnNpb25zIG9yIGFwcGx5aW5nXG4gIC8vIGBleHBlY3RlZFN0eWxlYCB0byBhIHRlbXBvcmFyeSBET00gbm9kZSB0byByZWFkIGl0cyBgc3R5bGVgIGF0dHJpYnV0ZVxuICAvLyBub3JtYWxpemVkLiBTaW5jZSBpdCBvbmx5IGFmZmVjdHMgSUUsIHdlJ3JlIHNraXBwaW5nIHN0eWxlIHdhcm5pbmdzXG4gIC8vIGluIHRoYXQgYnJvd3NlciBjb21wbGV0ZWx5IGluIGZhdm9yIG9mIGRvaW5nIGFsbCB0aGF0IHdvcmsuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzExODA3XG5cblxuICBjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nID0gY2FuVXNlRE9NICYmICFkb2N1bWVudC5kb2N1bWVudE1vZGU7IC8vIEhUTUwgcGFyc2luZyBub3JtYWxpemVzIENSIGFuZCBDUkxGIHRvIExGLlxuICAvLyBJdCBhbHNvIGNhbiB0dXJuIFxcdTAwMDAgaW50byBcXHVGRkZEIGluc2lkZSBhdHRyaWJ1dGVzLlxuICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvaHRtbDUvc2luZ2xlLXBhZ2UuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW1cbiAgLy8gSWYgd2UgaGF2ZSBhIG1pc21hdGNoLCBpdCBtaWdodCBiZSBjYXVzZWQgYnkgdGhhdC5cbiAgLy8gV2Ugd2lsbCBzdGlsbCBwYXRjaCB1cCBpbiB0aGlzIGNhc2UgYnV0IG5vdCBmaXJlIHRoZSB3YXJuaW5nLlxuXG4gIHZhciBOT1JNQUxJWkVfTkVXTElORVNfUkVHRVggPSAvXFxyXFxuPy9nO1xuICB2YXIgTk9STUFMSVpFX05VTExfQU5EX1JFUExBQ0VNRU5UX1JFR0VYID0gL1xcdTAwMDB8XFx1RkZGRC9nO1xuXG4gIG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZSA9IGZ1bmN0aW9uIChtYXJrdXApIHtcbiAgICB2YXIgbWFya3VwU3RyaW5nID0gdHlwZW9mIG1hcmt1cCA9PT0gJ3N0cmluZycgPyBtYXJrdXAgOiAnJyArIG1hcmt1cDtcbiAgICByZXR1cm4gbWFya3VwU3RyaW5nLnJlcGxhY2UoTk9STUFMSVpFX05FV0xJTkVTX1JFR0VYLCAnXFxuJykucmVwbGFjZShOT1JNQUxJWkVfTlVMTF9BTkRfUkVQTEFDRU1FTlRfUkVHRVgsICcnKTtcbiAgfTtcblxuICB3YXJuRm9yVGV4dERpZmZlcmVuY2UgPSBmdW5jdGlvbiAoc2VydmVyVGV4dCwgY2xpZW50VGV4dCkge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBub3JtYWxpemVkQ2xpZW50VGV4dCA9IG5vcm1hbGl6ZU1hcmt1cEZvclRleHRPckF0dHJpYnV0ZShjbGllbnRUZXh0KTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclRleHQgPSBub3JtYWxpemVNYXJrdXBGb3JUZXh0T3JBdHRyaWJ1dGUoc2VydmVyVGV4dCk7XG5cbiAgICBpZiAobm9ybWFsaXplZFNlcnZlclRleHQgPT09IG5vcm1hbGl6ZWRDbGllbnRUZXh0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ1RleHQgY29udGVudCBkaWQgbm90IG1hdGNoLiBTZXJ2ZXI6IFwiJXNcIiBDbGllbnQ6IFwiJXNcIicsIG5vcm1hbGl6ZWRTZXJ2ZXJUZXh0LCBub3JtYWxpemVkQ2xpZW50VGV4dCk7XG4gIH07XG5cbiAgd2FybkZvclByb3BEaWZmZXJlbmNlID0gZnVuY3Rpb24gKHByb3BOYW1lLCBzZXJ2ZXJWYWx1ZSwgY2xpZW50VmFsdWUpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm9ybWFsaXplZENsaWVudFZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKGNsaWVudFZhbHVlKTtcbiAgICB2YXIgbm9ybWFsaXplZFNlcnZlclZhbHVlID0gbm9ybWFsaXplTWFya3VwRm9yVGV4dE9yQXR0cmlidXRlKHNlcnZlclZhbHVlKTtcblxuICAgIGlmIChub3JtYWxpemVkU2VydmVyVmFsdWUgPT09IG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdQcm9wIGAlc2AgZGlkIG5vdCBtYXRjaC4gU2VydmVyOiAlcyBDbGllbnQ6ICVzJywgcHJvcE5hbWUsIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRTZXJ2ZXJWYWx1ZSksIEpTT04uc3RyaW5naWZ5KG5vcm1hbGl6ZWRDbGllbnRWYWx1ZSkpO1xuICB9O1xuXG4gIHdhcm5Gb3JFeHRyYUF0dHJpYnV0ZXMgPSBmdW5jdGlvbiAoYXR0cmlidXRlTmFtZXMpIHtcbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG4gICAgdmFyIG5hbWVzID0gW107XG4gICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9KTtcblxuICAgIGVycm9yKCdFeHRyYSBhdHRyaWJ1dGVzIGZyb20gdGhlIHNlcnZlcjogJXMnLCBuYW1lcyk7XG4gIH07XG5cbiAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKHJlZ2lzdHJhdGlvbk5hbWUsIGxpc3RlbmVyKSB7XG4gICAgaWYgKGxpc3RlbmVyID09PSBmYWxzZSkge1xuICAgICAgZXJyb3IoJ0V4cGVjdGVkIGAlc2AgbGlzdGVuZXIgdG8gYmUgYSBmdW5jdGlvbiwgaW5zdGVhZCBnb3QgYGZhbHNlYC5cXG5cXG4nICsgJ0lmIHlvdSB1c2VkIHRvIGNvbmRpdGlvbmFsbHkgb21pdCBpdCB3aXRoICVzPXtjb25kaXRpb24gJiYgdmFsdWV9LCAnICsgJ3Bhc3MgJXM9e2NvbmRpdGlvbiA/IHZhbHVlIDogdW5kZWZpbmVkfSBpbnN0ZWFkLicsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUsIHJlZ2lzdHJhdGlvbk5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgYCVzYCBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLCBpbnN0ZWFkIGdvdCBhIHZhbHVlIG9mIGAlc2AgdHlwZS4nLCByZWdpc3RyYXRpb25OYW1lLCB0eXBlb2YgbGlzdGVuZXIpO1xuICAgIH1cbiAgfTsgLy8gUGFyc2UgdGhlIEhUTUwgYW5kIHJlYWQgaXQgYmFjayB0byBub3JtYWxpemUgdGhlIEhUTUwgc3RyaW5nIHNvIHRoYXQgaXRcbiAgLy8gY2FuIGJlIHVzZWQgZm9yIGNvbXBhcmlzb24uXG5cblxuICBub3JtYWxpemVIVE1MID0gZnVuY3Rpb24gKHBhcmVudCwgaHRtbCkge1xuICAgIC8vIFdlIGNvdWxkIGhhdmUgY3JlYXRlZCBhIHNlcGFyYXRlIGRvY3VtZW50IGhlcmUgdG8gYXZvaWRcbiAgICAvLyByZS1pbml0aWFsaXppbmcgY3VzdG9tIGVsZW1lbnRzIGlmIHRoZXkgZXhpc3QuIEJ1dCB0aGlzIGJyZWFrc1xuICAgIC8vIGhvdyA8bm9zY3JpcHQ+IGlzIGJlaW5nIGhhbmRsZWQuIFNvIHdlIHVzZSB0aGUgc2FtZSBkb2N1bWVudC5cbiAgICAvLyBTZWUgdGhlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTExNTcuXG4gICAgdmFyIHRlc3RFbGVtZW50ID0gcGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSA/IHBhcmVudC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocGFyZW50LnRhZ05hbWUpIDogcGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHBhcmVudC5uYW1lc3BhY2VVUkksIHBhcmVudC50YWdOYW1lKTtcbiAgICB0ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBodG1sO1xuICAgIHJldHVybiB0ZXN0RWxlbWVudC5pbm5lckhUTUw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldE93bmVyRG9jdW1lbnRGcm9tUm9vdENvbnRhaW5lcihyb290Q29udGFpbmVyRWxlbWVudCkge1xuICByZXR1cm4gcm9vdENvbnRhaW5lckVsZW1lbnQubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyByb290Q29udGFpbmVyRWxlbWVudCA6IHJvb3RDb250YWluZXJFbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG59XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5mdW5jdGlvbiB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChub2RlKSB7XG4gIC8vIE1vYmlsZSBTYWZhcmkgZG9lcyBub3QgZmlyZSBwcm9wZXJseSBidWJibGUgY2xpY2sgZXZlbnRzIG9uXG4gIC8vIG5vbi1pbnRlcmFjdGl2ZSBlbGVtZW50cywgd2hpY2ggbWVhbnMgZGVsZWdhdGVkIGNsaWNrIGxpc3RlbmVycyBkbyBub3RcbiAgLy8gZmlyZS4gVGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIGludm9sdmVzIGF0dGFjaGluZyBhbiBlbXB0eSBjbGlja1xuICAvLyBsaXN0ZW5lciBvbiB0aGUgdGFyZ2V0IG5vZGUuXG4gIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxMC8wOS9jbGlja19ldmVudF9kZWwuaHRtbFxuICAvLyBKdXN0IHNldCBpdCB1c2luZyB0aGUgb25jbGljayBwcm9wZXJ0eSBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbWFuYWdlIGFueVxuICAvLyBib29ra2VlcGluZyBmb3IgaXQuIE5vdCBzdXJlIGlmIHdlIG5lZWQgdG8gY2xlYXIgaXQgd2hlbiB0aGUgbGlzdGVuZXIgaXNcbiAgLy8gcmVtb3ZlZC5cbiAgLy8gVE9ETzogT25seSBkbyB0aGlzIGZvciB0aGUgcmVsZXZhbnQgU2FmYXJpcyBtYXliZT9cbiAgbm9kZS5vbmNsaWNrID0gbm9vcDtcbn1cblxuZnVuY3Rpb24gc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgbmV4dFByb3BzLCBpc0N1c3RvbUNvbXBvbmVudFRhZykge1xuICBmb3IgKHZhciBwcm9wS2V5IGluIG5leHRQcm9wcykge1xuICAgIGlmICghbmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSBuZXh0UHJvcHNbcHJvcEtleV07XG5cbiAgICBpZiAocHJvcEtleSA9PT0gU1RZTEUpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKG5leHRQcm9wKSB7XG4gICAgICAgICAgLy8gRnJlZXplIHRoZSBuZXh0IHN0eWxlIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBhc3N1bWUgaXQgd29uJ3QgYmVcbiAgICAgICAgICAvLyBtdXRhdGVkLiBXZSBoYXZlIGFscmVhZHkgd2FybmVkIGZvciB0aGlzIGluIHRoZSBwYXN0LlxuICAgICAgICAgIE9iamVjdC5mcmVlemUobmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuXG5cbiAgICAgIHNldFZhbHVlRm9yU3R5bGVzKGRvbUVsZW1lbnQsIG5leHRQcm9wKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICB2YXIgbmV4dEh0bWwgPSBuZXh0UHJvcCA/IG5leHRQcm9wW0hUTUwkMV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChuZXh0SHRtbCAhPSBudWxsKSB7XG4gICAgICAgIHNldElubmVySFRNTChkb21FbGVtZW50LCBuZXh0SHRtbCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gQXZvaWQgc2V0dGluZyBpbml0aWFsIHRleHRDb250ZW50IHdoZW4gdGhlIHRleHQgaXMgZW1wdHkuIEluIElFMTEgc2V0dGluZ1xuICAgICAgICAvLyB0ZXh0Q29udGVudCBvbiBhIDx0ZXh0YXJlYT4gd2lsbCBjYXVzZSB0aGUgcGxhY2Vob2xkZXIgdG8gbm90XG4gICAgICAgIC8vIHNob3cgd2l0aGluIHRoZSA8dGV4dGFyZWE+IHVudGlsIGl0IGhhcyBiZWVuIGZvY3VzZWQgYW5kIGJsdXJyZWQgYWdhaW4uXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjczMSNpc3N1ZWNvbW1lbnQtMjU0ODc0NTUzXG4gICAgICAgIHZhciBjYW5TZXRUZXh0Q29udGVudCA9IHRhZyAhPT0gJ3RleHRhcmVhJyB8fCBuZXh0UHJvcCAhPT0gJyc7XG5cbiAgICAgICAgaWYgKGNhblNldFRleHRDb250ZW50KSB7XG4gICAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCwgJycgKyBuZXh0UHJvcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG5leHRQcm9wICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgd2FybkZvckludmFsaWRFdmVudExpc3RlbmVyKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wS2V5ID09PSAnb25TY3JvbGwnKSB7XG4gICAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnc2Nyb2xsJywgZG9tRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5leHRQcm9wICE9IG51bGwpIHtcbiAgICAgIHNldFZhbHVlRm9yUHJvcGVydHkoZG9tRWxlbWVudCwgcHJvcEtleSwgbmV4dFByb3AsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gIC8vIFRPRE86IEhhbmRsZSB3YXNDdXN0b21Db21wb25lbnRUYWdcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCB1cGRhdGVQYXlsb2FkLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgdmFyIHByb3BLZXkgPSB1cGRhdGVQYXlsb2FkW2ldO1xuICAgIHZhciBwcm9wVmFsdWUgPSB1cGRhdGVQYXlsb2FkW2kgKyAxXTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgc2V0VmFsdWVGb3JTdHlsZXMoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICBzZXRJbm5lckhUTUwoZG9tRWxlbWVudCwgcHJvcFZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKHByb3BLZXkgPT09IENISUxEUkVOKSB7XG4gICAgICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCBwcm9wVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRWYWx1ZUZvclByb3BlcnR5KGRvbUVsZW1lbnQsIHByb3BLZXksIHByb3BWYWx1ZSwgaXNDdXN0b21Db21wb25lbnRUYWcpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVyRWxlbWVudCwgcGFyZW50TmFtZXNwYWNlKSB7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZzsgLy8gV2UgY3JlYXRlIHRhZ3MgaW4gdGhlIG5hbWVzcGFjZSBvZiB0aGVpciBwYXJlbnQgY29udGFpbmVyLCBleGNlcHQgSFRNTFxuICAvLyB0YWdzIGdldCBubyBuYW1lc3BhY2UuXG5cbiAgdmFyIG93bmVyRG9jdW1lbnQgPSBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpO1xuICB2YXIgZG9tRWxlbWVudDtcbiAgdmFyIG5hbWVzcGFjZVVSSSA9IHBhcmVudE5hbWVzcGFjZTtcblxuICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgbmFtZXNwYWNlVVJJID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHR5cGUpO1xuICB9XG5cbiAgaWYgKG5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgIHtcbiAgICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodHlwZSwgcHJvcHMpOyAvLyBTaG91bGQgdGhpcyBjaGVjayBiZSBnYXRlZCBieSBwYXJlbnQgbmFtZXNwYWNlPyBOb3Qgc3VyZSB3ZSB3YW50IHRvXG4gICAgICAvLyBhbGxvdyA8U1ZHPiBvciA8bUFUSD4uXG5cbiAgICAgIGlmICghaXNDdXN0b21Db21wb25lbnRUYWcgJiYgdHlwZSAhPT0gdHlwZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgIGVycm9yKCc8JXMgLz4gaXMgdXNpbmcgaW5jb3JyZWN0IGNhc2luZy4gJyArICdVc2UgUGFzY2FsQ2FzZSBmb3IgUmVhY3QgY29tcG9uZW50cywgJyArICdvciBsb3dlcmNhc2UgZm9yIEhUTUwgZWxlbWVudHMuJywgdHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT09ICdzY3JpcHQnKSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIHNjcmlwdCB2aWEgLmlubmVySFRNTCBzbyBpdHMgXCJwYXJzZXItaW5zZXJ0ZWRcIiBmbGFnIGlzXG4gICAgICAvLyBzZXQgdG8gdHJ1ZSBhbmQgaXQgZG9lcyBub3QgZXhlY3V0ZVxuICAgICAgdmFyIGRpdiA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG5cbiAgICAgIGRpdi5pbm5lckhUTUwgPSAnPHNjcmlwdD48JyArICcvc2NyaXB0Pic7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8vIFRoaXMgaXMgZ3VhcmFudGVlZCB0byB5aWVsZCBhIHNjcmlwdCBlbGVtZW50LlxuXG4gICAgICB2YXIgZmlyc3RDaGlsZCA9IGRpdi5maXJzdENoaWxkO1xuICAgICAgZG9tRWxlbWVudCA9IGRpdi5yZW1vdmVDaGlsZChmaXJzdENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wcy5pcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vICRGbG93SXNzdWUgYGNyZWF0ZUVsZW1lbnRgIHNob3VsZCBiZSB1cGRhdGVkIGZvciBXZWIgQ29tcG9uZW50c1xuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlLCB7XG4gICAgICAgIGlzOiBwcm9wcy5pc1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNlcGFyYXRlIGVsc2UgYnJhbmNoIGluc3RlYWQgb2YgdXNpbmcgYHByb3BzLmlzIHx8IHVuZGVmaW5lZGAgYWJvdmUgYmVjYXVzZSBvZiBhIEZpcmVmb3ggYnVnLlxuICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvNjg5NlxuICAgICAgLy8gYW5kIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3NjI0MFxuICAgICAgZG9tRWxlbWVudCA9IG93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0eXBlKTsgLy8gTm9ybWFsbHkgYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgaW4gYHNldEluaXRpYWxET01Qcm9wZXJ0aWVzYCwgaG93ZXZlciB0aGUgYG11bHRpcGxlYCBhbmQgYHNpemVgXG4gICAgICAvLyBhdHRyaWJ1dGVzIG9uIGBzZWxlY3RgcyBuZWVkcyB0byBiZSBhZGRlZCBiZWZvcmUgYG9wdGlvbmBzIGFyZSBpbnNlcnRlZC5cbiAgICAgIC8vIFRoaXMgcHJldmVudHM6XG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBkb2VzIG5vdCBzY3JvbGwgdG8gdGhlIGNvcnJlY3Qgb3B0aW9uIGJlY2F1c2Ugc2luZ3VsYXJcbiAgICAgIC8vICBgc2VsZWN0YCBlbGVtZW50cyBhdXRvbWF0aWNhbGx5IHBpY2sgdGhlIGZpcnN0IGl0ZW0gIzEzMjIyXG4gICAgICAvLyAtIGEgYnVnIHdoZXJlIHRoZSBgc2VsZWN0YCBzZXQgdGhlIGZpcnN0IGl0ZW0gYXMgc2VsZWN0ZWQgZGVzcGl0ZSB0aGUgYHNpemVgIGF0dHJpYnV0ZSAjMTQyMzlcbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEzMjIyXG4gICAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xNDIzOVxuXG4gICAgICBpZiAodHlwZSA9PT0gJ3NlbGVjdCcpIHtcbiAgICAgICAgdmFyIG5vZGUgPSBkb21FbGVtZW50O1xuXG4gICAgICAgIGlmIChwcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAgIG5vZGUubXVsdGlwbGUgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHByb3BzLnNpemUpIHtcbiAgICAgICAgICAvLyBTZXR0aW5nIGEgc2l6ZSBncmVhdGVyIHRoYW4gMSBjYXVzZXMgYSBzZWxlY3QgdG8gYmVoYXZlIGxpa2UgYG11bHRpcGxlPXRydWVgLCB3aGVyZVxuICAgICAgICAgIC8vIGl0IGlzIHBvc3NpYmxlIHRoYXQgbm8gb3B0aW9uIGlzIHNlbGVjdGVkLlxuICAgICAgICAgIC8vXG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IG5lY2Vzc2FyeSB3aGVuIGEgc2VsZWN0IGluIFwic2luZ2xlIHNlbGVjdGlvbiBtb2RlXCIuXG4gICAgICAgICAgbm9kZS5zaXplID0gcHJvcHMuc2l6ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkb21FbGVtZW50ID0gb3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50TlMobmFtZXNwYWNlVVJJLCB0eXBlKTtcbiAgfVxuXG4gIHtcbiAgICBpZiAobmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSQxKSB7XG4gICAgICBpZiAoIWlzQ3VzdG9tQ29tcG9uZW50VGFnICYmIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkb21FbGVtZW50KSA9PT0gJ1tvYmplY3QgSFRNTFVua25vd25FbGVtZW50XScgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh3YXJuZWRVbmtub3duVGFncywgdHlwZSkpIHtcbiAgICAgICAgd2FybmVkVW5rbm93blRhZ3NbdHlwZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgdGFnIDwlcz4gaXMgdW5yZWNvZ25pemVkIGluIHRoaXMgYnJvd3Nlci4gJyArICdJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgUmVhY3QgY29tcG9uZW50LCBzdGFydCBpdHMgbmFtZSB3aXRoICcgKyAnYW4gdXBwZXJjYXNlIGxldHRlci4nLCB0eXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZG9tRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVRleHROb2RlKHRleHQsIHJvb3RDb250YWluZXJFbGVtZW50KSB7XG4gIHJldHVybiBnZXRPd25lckRvY3VtZW50RnJvbVJvb3RDb250YWluZXIocm9vdENvbnRhaW5lckVsZW1lbnQpLmNyZWF0ZVRleHROb2RlKHRleHQpO1xufVxuZnVuY3Rpb24gc2V0SW5pdGlhbFByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCByYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG5cbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCByYXdQcm9wcyk7XG4gIH0gLy8gVE9ETzogTWFrZSBzdXJlIHRoYXQgd2UgY2hlY2sgaXNNb3VudGVkIGJlZm9yZSBmaXJpbmcgYW55IG9mIHRoZXNlIGV2ZW50cy5cblxuXG4gIHZhciBwcm9wcztcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2RpYWxvZyc6XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjYW5jZWwnLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Nsb3NlJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd2aWRlbyc6XG4gICAgY2FzZSAnYXVkaW8nOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoZXNlIGV2ZW50cyBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciBhbGwgdGhlIG1lZGlhIGV2ZW50cy5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWVkaWFFdmVudFR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQobWVkaWFFdmVudFR5cGVzW2ldLCBkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc291cmNlJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBlcnJvciBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2Vycm9yJywgZG9tRWxlbWVudCk7XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIHByb3BzID0gcmF3UHJvcHM7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2RldGFpbHMnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIHRvZ2dsZSBldmVudC5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3RvZ2dsZScsIGRvbUVsZW1lbnQpO1xuICAgICAgcHJvcHMgPSByYXdQcm9wcztcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBwcm9wcyA9IGdldEhvc3RQcm9wcyhkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIHZhbGlkYXRlUHJvcHMoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBpbml0V3JhcHBlclN0YXRlJDEoZG9tRWxlbWVudCwgcmF3UHJvcHMpO1xuICAgICAgcHJvcHMgPSBnZXRIb3N0UHJvcHMkMihkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIHByb3BzID0gZ2V0SG9zdFByb3BzJDMoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBwcm9wcyA9IHJhd1Byb3BzO1xuICB9XG5cbiAgYXNzZXJ0VmFsaWRQcm9wcyh0YWcsIHByb3BzKTtcbiAgc2V0SW5pdGlhbERPTVByb3BlcnRpZXModGFnLCBkb21FbGVtZW50LCByb290Q29udGFpbmVyRWxlbWVudCwgcHJvcHMsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTtcblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIGZhbHNlKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHdlIGNoZWNrIGlmIHRoaXMgaXMgc3RpbGwgdW5tb3VudGVkIG9yIGRvIGFueSBjbGVhblxuICAgICAgLy8gdXAgbmVjZXNzYXJ5IHNpbmNlIHdlIG5ldmVyIHN0b3AgdHJhY2tpbmcgYW55bW9yZS5cbiAgICAgIHRyYWNrKGRvbUVsZW1lbnQpO1xuICAgICAgcG9zdE1vdW50V3JhcHBlciQzKGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdvcHRpb24nOlxuICAgICAgcG9zdE1vdW50V3JhcHBlciQxKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIkMihkb21FbGVtZW50LCByYXdQcm9wcyk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAodHlwZW9mIHByb3BzLm9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBjYXN0IG1heSBub3QgYmUgc291bmQgZm9yIFNWRywgTWF0aE1MIG9yIGN1c3RvbSBlbGVtZW50cy5cbiAgICAgICAgdHJhcENsaWNrT25Ob25JbnRlcmFjdGl2ZUVsZW1lbnQoZG9tRWxlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICB9XG59IC8vIENhbGN1bGF0ZSB0aGUgZGlmZiBiZXR3ZWVuIHRoZSB0d28gb2JqZWN0cy5cblxuZnVuY3Rpb24gZGlmZlByb3BlcnRpZXMoZG9tRWxlbWVudCwgdGFnLCBsYXN0UmF3UHJvcHMsIG5leHRSYXdQcm9wcywgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAge1xuICAgIHZhbGlkYXRlUHJvcGVydGllc0luRGV2ZWxvcG1lbnQodGFnLCBuZXh0UmF3UHJvcHMpO1xuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuICB2YXIgbGFzdFByb3BzO1xuICB2YXIgbmV4dFByb3BzO1xuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQxKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMShkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgbGFzdFByb3BzID0gZ2V0SG9zdFByb3BzJDIoZG9tRWxlbWVudCwgbGFzdFJhd1Byb3BzKTtcbiAgICAgIG5leHRQcm9wcyA9IGdldEhvc3RQcm9wcyQyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIGxhc3RQcm9wcyA9IGdldEhvc3RQcm9wcyQzKGRvbUVsZW1lbnQsIGxhc3RSYXdQcm9wcyk7XG4gICAgICBuZXh0UHJvcHMgPSBnZXRIb3N0UHJvcHMkMyhkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgbGFzdFByb3BzID0gbGFzdFJhd1Byb3BzO1xuICAgICAgbmV4dFByb3BzID0gbmV4dFJhd1Byb3BzO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3RQcm9wcy5vbkNsaWNrICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBuZXh0UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgbmV4dFByb3BzKTtcbiAgdmFyIHByb3BLZXk7XG4gIHZhciBzdHlsZU5hbWU7XG4gIHZhciBzdHlsZVVwZGF0ZXMgPSBudWxsO1xuXG4gIGZvciAocHJvcEtleSBpbiBsYXN0UHJvcHMpIHtcbiAgICBpZiAobmV4dFByb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpIHx8ICFsYXN0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbGFzdFByb3BzW3Byb3BLZXldID09IG51bGwpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgdmFyIGxhc3RTdHlsZSA9IGxhc3RQcm9wc1twcm9wS2V5XTtcblxuICAgICAgZm9yIChzdHlsZU5hbWUgaW4gbGFzdFN0eWxlKSB7XG4gICAgICAgIGlmIChsYXN0U3R5bGUuaGFzT3duUHJvcGVydHkoc3R5bGVOYW1lKSkge1xuICAgICAgICAgIGlmICghc3R5bGVVcGRhdGVzKSB7XG4gICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzdHlsZVVwZGF0ZXNbc3R5bGVOYW1lXSA9ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCB8fCBwcm9wS2V5ID09PSBDSElMRFJFTikgOyBlbHNlIGlmIChwcm9wS2V5ID09PSBTVVBQUkVTU19DT05URU5UX0VESVRBQkxFX1dBUk5JTkcgfHwgcHJvcEtleSA9PT0gU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gQVVUT0ZPQ1VTKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UuIElmIGFueSBsaXN0ZW5lciB1cGRhdGVzIHdlIG5lZWQgdG8gZW5zdXJlXG4gICAgICAvLyB0aGF0IHRoZSBcImN1cnJlbnRcIiBmaWJlciBwb2ludGVyIGdldHMgdXBkYXRlZCBzbyB3ZSBuZWVkIGEgY29tbWl0XG4gICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgaWYgKCF1cGRhdGVQYXlsb2FkKSB7XG4gICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFsbCBvdGhlciBkZWxldGVkIHByb3BlcnRpZXMgd2UgYWRkIGl0IHRvIHRoZSBxdWV1ZS4gV2UgdXNlXG4gICAgICAvLyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGluIHRoZSBjb21taXQgcGhhc2UgaW5zdGVhZC5cbiAgICAgICh1cGRhdGVQYXlsb2FkID0gdXBkYXRlUGF5bG9hZCB8fCBbXSkucHVzaChwcm9wS2V5LCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHByb3BLZXkgaW4gbmV4dFByb3BzKSB7XG4gICAgdmFyIG5leHRQcm9wID0gbmV4dFByb3BzW3Byb3BLZXldO1xuICAgIHZhciBsYXN0UHJvcCA9IGxhc3RQcm9wcyAhPSBudWxsID8gbGFzdFByb3BzW3Byb3BLZXldIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKCFuZXh0UHJvcHMuaGFzT3duUHJvcGVydHkocHJvcEtleSkgfHwgbmV4dFByb3AgPT09IGxhc3RQcm9wIHx8IG5leHRQcm9wID09IG51bGwgJiYgbGFzdFByb3AgPT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKHByb3BLZXkgPT09IFNUWUxFKSB7XG4gICAgICB7XG4gICAgICAgIGlmIChuZXh0UHJvcCkge1xuICAgICAgICAgIC8vIEZyZWV6ZSB0aGUgbmV4dCBzdHlsZSBvYmplY3Qgc28gdGhhdCB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGJlXG4gICAgICAgICAgLy8gbXV0YXRlZC4gV2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBmb3IgdGhpcyBpbiB0aGUgcGFzdC5cbiAgICAgICAgICBPYmplY3QuZnJlZXplKG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobGFzdFByb3ApIHtcbiAgICAgICAgLy8gVW5zZXQgc3R5bGVzIG9uIGBsYXN0UHJvcGAgYnV0IG5vdCBvbiBgbmV4dFByb3BgLlxuICAgICAgICBmb3IgKHN0eWxlTmFtZSBpbiBsYXN0UHJvcCkge1xuICAgICAgICAgIGlmIChsYXN0UHJvcC5oYXNPd25Qcm9wZXJ0eShzdHlsZU5hbWUpICYmICghbmV4dFByb3AgfHwgIW5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkpKSB7XG4gICAgICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgICAgICBzdHlsZVVwZGF0ZXMgPSB7fTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3R5bGVVcGRhdGVzW3N0eWxlTmFtZV0gPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVXBkYXRlIHN0eWxlcyB0aGF0IGNoYW5nZWQgc2luY2UgYGxhc3RQcm9wYC5cblxuXG4gICAgICAgIGZvciAoc3R5bGVOYW1lIGluIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKG5leHRQcm9wLmhhc093blByb3BlcnR5KHN0eWxlTmFtZSkgJiYgbGFzdFByb3Bbc3R5bGVOYW1lXSAhPT0gbmV4dFByb3Bbc3R5bGVOYW1lXSkge1xuICAgICAgICAgICAgaWYgKCFzdHlsZVVwZGF0ZXMpIHtcbiAgICAgICAgICAgICAgc3R5bGVVcGRhdGVzID0ge307XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN0eWxlVXBkYXRlc1tzdHlsZU5hbWVdID0gbmV4dFByb3Bbc3R5bGVOYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbGllcyBvbiBgdXBkYXRlU3R5bGVzQnlJRGAgbm90IG11dGF0aW5nIGBzdHlsZVVwZGF0ZXNgLlxuICAgICAgICBpZiAoIXN0eWxlVXBkYXRlcykge1xuICAgICAgICAgIGlmICghdXBkYXRlUGF5bG9hZCkge1xuICAgICAgICAgICAgdXBkYXRlUGF5bG9hZCA9IFtdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQucHVzaChwcm9wS2V5LCBzdHlsZVVwZGF0ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3R5bGVVcGRhdGVzID0gbmV4dFByb3A7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBEQU5HRVJPVVNMWV9TRVRfSU5ORVJfSFRNTCkge1xuICAgICAgdmFyIG5leHRIdG1sID0gbmV4dFByb3AgPyBuZXh0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuICAgICAgdmFyIGxhc3RIdG1sID0gbGFzdFByb3AgPyBsYXN0UHJvcFtIVE1MJDFdIDogdW5kZWZpbmVkO1xuXG4gICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICBpZiAobGFzdEh0bWwgIT09IG5leHRIdG1sKSB7XG4gICAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRIdG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gQ0hJTERSRU4pIHtcbiAgICAgIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXh0UHJvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksICcnICsgbmV4dFByb3ApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HKSA7IGVsc2UgaWYgKHJlZ2lzdHJhdGlvbk5hbWVEZXBlbmRlbmNpZXMuaGFzT3duUHJvcGVydHkocHJvcEtleSkpIHtcbiAgICAgIGlmIChuZXh0UHJvcCAhPSBudWxsKSB7XG4gICAgICAgIC8vIFdlIGVhZ2VybHkgbGlzdGVuIHRvIHRoaXMgZXZlbiB0aG91Z2ggd2UgaGF2ZW4ndCBjb21taXR0ZWQgeWV0LlxuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdXBkYXRlUGF5bG9hZCAmJiBsYXN0UHJvcCAhPT0gbmV4dFByb3ApIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZS4gSWYgYW55IGxpc3RlbmVyIHVwZGF0ZXMgd2UgbmVlZCB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCB0aGUgXCJjdXJyZW50XCIgcHJvcHMgcG9pbnRlciBnZXRzIHVwZGF0ZWQgc28gd2UgbmVlZCBhIGNvbW1pdFxuICAgICAgICAvLyB0byB1cGRhdGUgdGhpcyBlbGVtZW50LlxuICAgICAgICB1cGRhdGVQYXlsb2FkID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdvYmplY3QnICYmIG5leHRQcm9wICE9PSBudWxsICYmIG5leHRQcm9wLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRSkge1xuICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIHVzZU9wYXF1ZVJlZmVyZW5jZSdzIG9wYXF1ZSBvYmplY3QsIHRoaXMgbWVhbnMgd2UgYXJlIGh5ZHJhdGluZy5cbiAgICAgIC8vIEluIHRoaXMgY2FzZSwgY2FsbCB0aGUgb3BhcXVlIG9iamVjdCdzIHRvU3RyaW5nIGZ1bmN0aW9uIHdoaWNoIGdlbmVyYXRlcyBhIG5ldyBjbGllbnRcbiAgICAgIC8vIElEIHNvIGNsaWVudCBhbmQgc2VydmVyIElEcyBtYXRjaCBhbmQgdGhyb3dzIHRvIHJlcmVuZGVyLlxuICAgICAgbmV4dFByb3AudG9TdHJpbmcoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIGFueSBvdGhlciBwcm9wZXJ0eSB3ZSBhbHdheXMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhbmQgdGhlbiB3ZVxuICAgICAgLy8gZmlsdGVyIGl0IG91dCB1c2luZyB0aGUgYWxsb3dlZCBwcm9wZXJ0eSBsaXN0IGR1cmluZyB0aGUgY29tbWl0LlxuICAgICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKHByb3BLZXksIG5leHRQcm9wKTtcbiAgICB9XG4gIH1cblxuICBpZiAoc3R5bGVVcGRhdGVzKSB7XG4gICAge1xuICAgICAgdmFsaWRhdGVTaG9ydGhhbmRQcm9wZXJ0eUNvbGxpc2lvbkluRGV2KHN0eWxlVXBkYXRlcywgbmV4dFByb3BzW1NUWUxFXSk7XG4gICAgfVxuXG4gICAgKHVwZGF0ZVBheWxvYWQgPSB1cGRhdGVQYXlsb2FkIHx8IFtdKS5wdXNoKFNUWUxFLCBzdHlsZVVwZGF0ZXMpO1xuICB9XG5cbiAgcmV0dXJuIHVwZGF0ZVBheWxvYWQ7XG59IC8vIEFwcGx5IHRoZSBkaWZmLlxuXG5mdW5jdGlvbiB1cGRhdGVQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHRhZywgbGFzdFJhd1Byb3BzLCBuZXh0UmF3UHJvcHMpIHtcbiAgLy8gVXBkYXRlIGNoZWNrZWQgKmJlZm9yZSogbmFtZS5cbiAgLy8gSW4gdGhlIG1pZGRsZSBvZiBhbiB1cGRhdGUsIGl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgbXVsdGlwbGUgY2hlY2tlZC5cbiAgLy8gV2hlbiBhIGNoZWNrZWQgcmFkaW8gdHJpZXMgdG8gY2hhbmdlIG5hbWUsIGJyb3dzZXIgbWFrZXMgYW5vdGhlciByYWRpbydzIGNoZWNrZWQgZmFsc2UuXG4gIGlmICh0YWcgPT09ICdpbnB1dCcgJiYgbmV4dFJhd1Byb3BzLnR5cGUgPT09ICdyYWRpbycgJiYgbmV4dFJhd1Byb3BzLm5hbWUgIT0gbnVsbCkge1xuICAgIHVwZGF0ZUNoZWNrZWQoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgfVxuXG4gIHZhciB3YXNDdXN0b21Db21wb25lbnRUYWcgPSBpc0N1c3RvbUNvbXBvbmVudCh0YWcsIGxhc3RSYXdQcm9wcyk7XG4gIHZhciBpc0N1c3RvbUNvbXBvbmVudFRhZyA9IGlzQ3VzdG9tQ29tcG9uZW50KHRhZywgbmV4dFJhd1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYuXG5cbiAgdXBkYXRlRE9NUHJvcGVydGllcyhkb21FbGVtZW50LCB1cGRhdGVQYXlsb2FkLCB3YXNDdXN0b21Db21wb25lbnRUYWcsIGlzQ3VzdG9tQ29tcG9uZW50VGFnKTsgLy8gVE9ETzogRW5zdXJlIHRoYXQgYW4gdXBkYXRlIGdldHMgc2NoZWR1bGVkIGlmIGFueSBvZiB0aGUgc3BlY2lhbCBwcm9wc1xuICAvLyBjaGFuZ2VkLlxuXG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgICAgLy8gVXBkYXRlIHRoZSB3cmFwcGVyIGFyb3VuZCBpbnB1dHMgKmFmdGVyKiB1cGRhdGluZyBwcm9wcy4gVGhpcyBoYXMgdG9cbiAgICAgIC8vIGhhcHBlbiBhZnRlciBgdXBkYXRlRE9NUHJvcGVydGllc2AuIE90aGVyd2lzZSBIVE1MNSBpbnB1dCB2YWxpZGF0aW9uc1xuICAgICAgLy8gcmFpc2Ugd2FybmluZ3MgYW5kIHByZXZlbnQgdGhlIG5ldyB2YWx1ZSBmcm9tIGJlaW5nIGFzc2lnbmVkLlxuICAgICAgdXBkYXRlV3JhcHBlcihkb21FbGVtZW50LCBuZXh0UmF3UHJvcHMpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICB1cGRhdGVXcmFwcGVyJDEoZG9tRWxlbWVudCwgbmV4dFJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIC8vIDxzZWxlY3Q+IHZhbHVlIHVwZGF0ZSBuZWVkcyB0byBvY2N1ciBhZnRlciA8b3B0aW9uPiBjaGlsZHJlblxuICAgICAgLy8gcmVjb25jaWxpYXRpb25cbiAgICAgIHBvc3RVcGRhdGVXcmFwcGVyKGRvbUVsZW1lbnQsIG5leHRSYXdQcm9wcyk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRQb3NzaWJsZVN0YW5kYXJkTmFtZShwcm9wTmFtZSkge1xuICB7XG4gICAgdmFyIGxvd2VyQ2FzZWROYW1lID0gcHJvcE5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgIGlmICghcG9zc2libGVTdGFuZGFyZE5hbWVzLmhhc093blByb3BlcnR5KGxvd2VyQ2FzZWROYW1lKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc3NpYmxlU3RhbmRhcmROYW1lc1tsb3dlckNhc2VkTmFtZV0gfHwgbnVsbDtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaWZmSHlkcmF0ZWRQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHRhZywgcmF3UHJvcHMsIHBhcmVudE5hbWVzcGFjZSwgcm9vdENvbnRhaW5lckVsZW1lbnQpIHtcbiAgdmFyIGlzQ3VzdG9tQ29tcG9uZW50VGFnO1xuICB2YXIgZXh0cmFBdHRyaWJ1dGVOYW1lcztcblxuICB7XG4gICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gcmF3UHJvcHNbU1VQUFJFU1NfSFlEUkFUSU9OX1dBUk5JTkddID09PSB0cnVlO1xuICAgIGlzQ3VzdG9tQ29tcG9uZW50VGFnID0gaXNDdXN0b21Db21wb25lbnQodGFnLCByYXdQcm9wcyk7XG4gICAgdmFsaWRhdGVQcm9wZXJ0aWVzSW5EZXZlbG9wbWVudCh0YWcsIHJhd1Byb3BzKTtcbiAgfSAvLyBUT0RPOiBNYWtlIHN1cmUgdGhhdCB3ZSBjaGVjayBpc01vdW50ZWQgYmVmb3JlIGZpcmluZyBhbnkgb2YgdGhlc2UgZXZlbnRzLlxuXG5cbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnY2FuY2VsJywgZG9tRWxlbWVudCk7XG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdjbG9zZScsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpZnJhbWUnOlxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgY2FzZSAnZW1iZWQnOlxuICAgICAgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGxvYWQgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdsb2FkJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3ZpZGVvJzpcbiAgICBjYXNlICdhdWRpbyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhlc2UgZXZlbnRzIGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIGFsbCB0aGUgbWVkaWEgZXZlbnRzLlxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUV2ZW50VHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudChtZWRpYUV2ZW50VHlwZXNbaV0sIGRvbUVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NvdXJjZSc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgZXJyb3IgZXZlbnQuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdlcnJvcicsIGRvbUVsZW1lbnQpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICdpbWcnOlxuICAgIGNhc2UgJ2ltYWdlJzpcbiAgICBjYXNlICdsaW5rJzpcbiAgICAgIC8vIFdlIGxpc3RlbiB0byB0aGVzZSBldmVudHMgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgZXJyb3IgYW5kIGxvYWQgZXZlbnRzLlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnZXJyb3InLCBkb21FbGVtZW50KTtcbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2xvYWQnLCBkb21FbGVtZW50KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgdG9nZ2xlIGV2ZW50LlxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgndG9nZ2xlJywgZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUoZG9tRWxlbWVudCwgcmF3UHJvcHMpOyAvLyBXZSBsaXN0ZW4gdG8gdGhpcyBldmVudCBpbiBjYXNlIHRvIGVuc3VyZSBlbXVsYXRlZCBidWJibGVcbiAgICAgIC8vIGxpc3RlbmVycyBzdGlsbCBmaXJlIGZvciB0aGUgaW52YWxpZCBldmVudC5cblxuICAgICAgbGlzdGVuVG9Ob25EZWxlZ2F0ZWRFdmVudCgnaW52YWxpZCcsIGRvbUVsZW1lbnQpO1xuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ29wdGlvbic6XG4gICAgICB2YWxpZGF0ZVByb3BzKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgIGluaXRXcmFwcGVyU3RhdGUkMShkb21FbGVtZW50LCByYXdQcm9wcyk7IC8vIFdlIGxpc3RlbiB0byB0aGlzIGV2ZW50IGluIGNhc2UgdG8gZW5zdXJlIGVtdWxhdGVkIGJ1YmJsZVxuICAgICAgLy8gbGlzdGVuZXJzIHN0aWxsIGZpcmUgZm9yIHRoZSBpbnZhbGlkIGV2ZW50LlxuXG4gICAgICBsaXN0ZW5Ub05vbkRlbGVnYXRlZEV2ZW50KCdpbnZhbGlkJywgZG9tRWxlbWVudCk7XG5cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgaW5pdFdyYXBwZXJTdGF0ZSQyKGRvbUVsZW1lbnQsIHJhd1Byb3BzKTsgLy8gV2UgbGlzdGVuIHRvIHRoaXMgZXZlbnQgaW4gY2FzZSB0byBlbnN1cmUgZW11bGF0ZWQgYnViYmxlXG4gICAgICAvLyBsaXN0ZW5lcnMgc3RpbGwgZmlyZSBmb3IgdGhlIGludmFsaWQgZXZlbnQuXG5cbiAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ2ludmFsaWQnLCBkb21FbGVtZW50KTtcblxuICAgICAgYnJlYWs7XG4gIH1cblxuICBhc3NlcnRWYWxpZFByb3BzKHRhZywgcmF3UHJvcHMpO1xuXG4gIHtcbiAgICBleHRyYUF0dHJpYnV0ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgIHZhciBhdHRyaWJ1dGVzID0gZG9tRWxlbWVudC5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGF0dHJpYnV0ZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgbmFtZSA9IGF0dHJpYnV0ZXNbX2ldLm5hbWUudG9Mb3dlckNhc2UoKTtcblxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIC8vIEJ1aWx0LWluIFNTUiBhdHRyaWJ1dGUgaXMgYWxsb3dlZFxuICAgICAgICBjYXNlICdkYXRhLXJlYWN0cm9vdCc6XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgICAvLyBUT0RPOiBPbmx5IGlnbm9yZSB0aGVtIG9uIGNvbnRyb2xsZWQgdGFncy5cblxuICAgICAgICBjYXNlICd2YWx1ZSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY2hlY2tlZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VsZWN0ZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gSW50ZW50aW9uYWxseSB1c2UgdGhlIG9yaWdpbmFsIG5hbWUuXG4gICAgICAgICAgLy8gU2VlIGRpc2N1c3Npb24gaW4gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTA2NzYuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5hZGQoYXR0cmlidXRlc1tfaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBudWxsO1xuXG4gIGZvciAodmFyIHByb3BLZXkgaW4gcmF3UHJvcHMpIHtcbiAgICBpZiAoIXJhd1Byb3BzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICB2YXIgbmV4dFByb3AgPSByYXdQcm9wc1twcm9wS2V5XTtcblxuICAgIGlmIChwcm9wS2V5ID09PSBDSElMRFJFTikge1xuICAgICAgLy8gRm9yIHRleHQgY29udGVudCBjaGlsZHJlbiB3ZSBjb21wYXJlIGFnYWluc3QgdGV4dENvbnRlbnQuIFRoaXNcbiAgICAgIC8vIG1pZ2h0IG1hdGNoIGFkZGl0aW9uYWwgSFRNTCB0aGF0IGlzIGhpZGRlbiB3aGVuIHdlIHJlYWQgaXQgdXNpbmdcbiAgICAgIC8vIHRleHRDb250ZW50LiBFLmcuIFwiZm9vXCIgd2lsbCBtYXRjaCBcImY8c3Bhbj5vbzwvc3Bhbj5cIiBidXQgdGhhdCBzdGlsbFxuICAgICAgLy8gc2F0aXNmaWVzIG91ciByZXF1aXJlbWVudC4gT3VyIHJlcXVpcmVtZW50IGlzIG5vdCB0byBwcm9kdWNlIHBlcmZlY3RcbiAgICAgIC8vIEhUTUwgYW5kIGF0dHJpYnV0ZXMuIElkZWFsbHkgd2Ugc2hvdWxkIHByZXNlcnZlIHN0cnVjdHVyZSBidXQgaXQnc1xuICAgICAgLy8gb2sgbm90IHRvIGlmIHRoZSB2aXNpYmxlIGNvbnRlbnQgaXMgc3RpbGwgZW5vdWdoIHRvIGluZGljYXRlIHdoYXRcbiAgICAgIC8vIGV2ZW4gbGlzdGVuZXJzIHRoZXNlIG5vZGVzIG1pZ2h0IGJlIHdpcmVkIHVwIHRvLlxuICAgICAgLy8gVE9ETzogV2FybiBpZiB0aGVyZSBpcyBtb3JlIHRoYW4gYSBzaW5nbGUgdGV4dE5vZGUgYXMgYSBjaGlsZC5cbiAgICAgIC8vIFRPRE86IFNob3VsZCB3ZSB1c2UgZG9tRWxlbWVudC5maXJzdENoaWxkLm5vZGVWYWx1ZSB0byBjb21wYXJlP1xuICAgICAgaWYgKHR5cGVvZiBuZXh0UHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnQudGV4dENvbnRlbnQgIT09IG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sIG5leHRQcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50LnRleHRDb250ZW50ICE9PSAnJyArIG5leHRQcm9wKSB7XG4gICAgICAgICAgaWYgKCAhc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgICB3YXJuRm9yVGV4dERpZmZlcmVuY2UoZG9tRWxlbWVudC50ZXh0Q29udGVudCwgbmV4dFByb3ApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZVBheWxvYWQgPSBbQ0hJTERSRU4sICcnICsgbmV4dFByb3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyZWdpc3RyYXRpb25OYW1lRGVwZW5kZW5jaWVzLmhhc093blByb3BlcnR5KHByb3BLZXkpKSB7XG4gICAgICBpZiAobmV4dFByb3AgIT0gbnVsbCkge1xuICAgICAgICBpZiAoIHR5cGVvZiBuZXh0UHJvcCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHdhcm5Gb3JJbnZhbGlkRXZlbnRMaXN0ZW5lcihwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcEtleSA9PT0gJ29uU2Nyb2xsJykge1xuICAgICAgICAgIGxpc3RlblRvTm9uRGVsZWdhdGVkRXZlbnQoJ3Njcm9sbCcsIGRvbUVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICggLy8gQ29udmluY2UgRmxvdyB3ZSd2ZSBjYWxjdWxhdGVkIGl0IChpdCdzIERFVi1vbmx5IGluIHRoaXMgbWV0aG9kLilcbiAgICB0eXBlb2YgaXNDdXN0b21Db21wb25lbnRUYWcgPT09ICdib29sZWFuJykge1xuICAgICAgLy8gVmFsaWRhdGUgdGhhdCB0aGUgcHJvcGVydGllcyBjb3JyZXNwb25kIHRvIHRoZWlyIGV4cGVjdGVkIHZhbHVlcy5cbiAgICAgIHZhciBzZXJ2ZXJWYWx1ZSA9IHZvaWQgMDtcbiAgICAgIHZhciBwcm9wZXJ0eUluZm8gPSBnZXRQcm9wZXJ0eUluZm8ocHJvcEtleSk7XG5cbiAgICAgIGlmIChzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcpIDsgZWxzZSBpZiAocHJvcEtleSA9PT0gU1VQUFJFU1NfQ09OVEVOVF9FRElUQUJMRV9XQVJOSU5HIHx8IHByb3BLZXkgPT09IFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HIHx8IC8vIENvbnRyb2xsZWQgYXR0cmlidXRlcyBhcmUgbm90IHZhbGlkYXRlZFxuICAgICAgLy8gVE9ETzogT25seSBpZ25vcmUgdGhlbSBvbiBjb250cm9sbGVkIHRhZ3MuXG4gICAgICBwcm9wS2V5ID09PSAndmFsdWUnIHx8IHByb3BLZXkgPT09ICdjaGVja2VkJyB8fCBwcm9wS2V5ID09PSAnc2VsZWN0ZWQnKSA7IGVsc2UgaWYgKHByb3BLZXkgPT09IERBTkdFUk9VU0xZX1NFVF9JTk5FUl9IVE1MKSB7XG4gICAgICAgIHZhciBzZXJ2ZXJIVE1MID0gZG9tRWxlbWVudC5pbm5lckhUTUw7XG4gICAgICAgIHZhciBuZXh0SHRtbCA9IG5leHRQcm9wID8gbmV4dFByb3BbSFRNTCQxXSA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAobmV4dEh0bWwgIT0gbnVsbCkge1xuICAgICAgICAgIHZhciBleHBlY3RlZEhUTUwgPSBub3JtYWxpemVIVE1MKGRvbUVsZW1lbnQsIG5leHRIdG1sKTtcblxuICAgICAgICAgIGlmIChleHBlY3RlZEhUTUwgIT09IHNlcnZlckhUTUwpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJIVE1MLCBleHBlY3RlZEhUTUwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwcm9wS2V5ID09PSBTVFlMRSkge1xuICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgIGV4dHJhQXR0cmlidXRlTmFtZXMuZGVsZXRlKHByb3BLZXkpO1xuXG4gICAgICAgIGlmIChjYW5EaWZmU3R5bGVGb3JIeWRyYXRpb25XYXJuaW5nKSB7XG4gICAgICAgICAgdmFyIGV4cGVjdGVkU3R5bGUgPSBjcmVhdGVEYW5nZXJvdXNTdHJpbmdGb3JTdHlsZXMobmV4dFByb3ApO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZG9tRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3N0eWxlJyk7XG5cbiAgICAgICAgICBpZiAoZXhwZWN0ZWRTdHlsZSAhPT0gc2VydmVyVmFsdWUpIHtcbiAgICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgZXhwZWN0ZWRTdHlsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzQ3VzdG9tQ29tcG9uZW50VGFnKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cbiAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG5cbiAgICAgICAgaWYgKG5leHRQcm9wICE9PSBzZXJ2ZXJWYWx1ZSkge1xuICAgICAgICAgIHdhcm5Gb3JQcm9wRGlmZmVyZW5jZShwcm9wS2V5LCBzZXJ2ZXJWYWx1ZSwgbmV4dFByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFzaG91bGRJZ25vcmVBdHRyaWJ1dGUocHJvcEtleSwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykgJiYgIXNob3VsZFJlbW92ZUF0dHJpYnV0ZShwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvLCBpc0N1c3RvbUNvbXBvbmVudFRhZykpIHtcbiAgICAgICAgdmFyIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChwcm9wZXJ0eUluZm8gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcGVydHlJbmZvLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgIHNlcnZlclZhbHVlID0gZ2V0VmFsdWVGb3JQcm9wZXJ0eShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCwgcHJvcGVydHlJbmZvKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gcGFyZW50TmFtZXNwYWNlO1xuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgb3duTmFtZXNwYWNlID0gZ2V0SW50cmluc2ljTmFtZXNwYWNlKHRhZyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG93bk5hbWVzcGFjZSA9PT0gSFRNTF9OQU1FU1BBQ0UkMSkge1xuICAgICAgICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIHN0YW5kYXJkTmFtZSA9IGdldFBvc3NpYmxlU3RhbmRhcmROYW1lKHByb3BLZXkpO1xuXG4gICAgICAgICAgICBpZiAoc3RhbmRhcmROYW1lICE9PSBudWxsICYmIHN0YW5kYXJkTmFtZSAhPT0gcHJvcEtleSkge1xuICAgICAgICAgICAgICAvLyBJZiBhbiBTVkcgcHJvcCBpcyBzdXBwbGllZCB3aXRoIGJhZCBjYXNpbmcsIGl0IHdpbGxcbiAgICAgICAgICAgICAgLy8gYmUgc3VjY2Vzc2Z1bGx5IHBhcnNlZCBmcm9tIEhUTUwsIGJ1dCB3aWxsIHByb2R1Y2UgYSBtaXNtYXRjaFxuICAgICAgICAgICAgICAvLyAoYW5kIHdvdWxkIGJlIGluY29ycmVjdGx5IHJlbmRlcmVkIG9uIHRoZSBjbGllbnQpLlxuICAgICAgICAgICAgICAvLyBIb3dldmVyLCB3ZSBhbHJlYWR5IHdhcm4gYWJvdXQgYmFkIGNhc2luZyBlbHNld2hlcmUuXG4gICAgICAgICAgICAgIC8vIFNvIHdlJ2xsIHNraXAgdGhlIG1pc2xlYWRpbmcgZXh0cmEgbWlzbWF0Y2ggd2FybmluZyBpbiB0aGlzIGNhc2UuXG4gICAgICAgICAgICAgIGlzTWlzbWF0Y2hEdWVUb0JhZENhc2luZyA9IHRydWU7IC8vICRGbG93Rml4TWUgLSBTaG91bGQgYmUgaW5mZXJyZWQgYXMgbm90IHVuZGVmaW5lZC5cblxuICAgICAgICAgICAgICBleHRyYUF0dHJpYnV0ZU5hbWVzLmRlbGV0ZShzdGFuZGFyZE5hbWUpO1xuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG5cblxuICAgICAgICAgICAgZXh0cmFBdHRyaWJ1dGVOYW1lcy5kZWxldGUocHJvcEtleSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2VydmVyVmFsdWUgPSBnZXRWYWx1ZUZvckF0dHJpYnV0ZShkb21FbGVtZW50LCBwcm9wS2V5LCBuZXh0UHJvcCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dFByb3AgIT09IHNlcnZlclZhbHVlICYmICFpc01pc21hdGNoRHVlVG9CYWRDYXNpbmcpIHtcbiAgICAgICAgICB3YXJuRm9yUHJvcERpZmZlcmVuY2UocHJvcEtleSwgc2VydmVyVmFsdWUsIG5leHRQcm9wKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIC0gU2hvdWxkIGJlIGluZmVycmVkIGFzIG5vdCB1bmRlZmluZWQuXG4gICAgaWYgKGV4dHJhQXR0cmlidXRlTmFtZXMuc2l6ZSA+IDAgJiYgIXN1cHByZXNzSHlkcmF0aW9uV2FybmluZykge1xuICAgICAgLy8gJEZsb3dGaXhNZSAtIFNob3VsZCBiZSBpbmZlcnJlZCBhcyBub3QgdW5kZWZpbmVkLlxuICAgICAgd2FybkZvckV4dHJhQXR0cmlidXRlcyhleHRyYUF0dHJpYnV0ZU5hbWVzKTtcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKHRhZykge1xuICAgIGNhc2UgJ2lucHV0JzpcbiAgICAgIC8vIFRPRE86IE1ha2Ugc3VyZSB3ZSBjaGVjayBpZiB0aGlzIGlzIHN0aWxsIHVubW91bnRlZCBvciBkbyBhbnkgY2xlYW5cbiAgICAgIC8vIHVwIG5lY2Vzc2FyeSBzaW5jZSB3ZSBuZXZlciBzdG9wIHRyYWNraW5nIGFueW1vcmUuXG4gICAgICB0cmFjayhkb21FbGVtZW50KTtcbiAgICAgIHBvc3RNb3VudFdyYXBwZXIoZG9tRWxlbWVudCwgcmF3UHJvcHMsIHRydWUpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlICd0ZXh0YXJlYSc6XG4gICAgICAvLyBUT0RPOiBNYWtlIHN1cmUgd2UgY2hlY2sgaWYgdGhpcyBpcyBzdGlsbCB1bm1vdW50ZWQgb3IgZG8gYW55IGNsZWFuXG4gICAgICAvLyB1cCBuZWNlc3Nhcnkgc2luY2Ugd2UgbmV2ZXIgc3RvcCB0cmFja2luZyBhbnltb3JlLlxuICAgICAgdHJhY2soZG9tRWxlbWVudCk7XG4gICAgICBwb3N0TW91bnRXcmFwcGVyJDMoZG9tRWxlbWVudCk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgIC8vIEZvciBpbnB1dCBhbmQgdGV4dGFyZWEgd2UgY3VycmVudCBhbHdheXMgc2V0IHRoZSB2YWx1ZSBwcm9wZXJ0eSBhdFxuICAgICAgLy8gcG9zdCBtb3VudCB0byBmb3JjZSBpdCB0byBkaXZlcmdlIGZyb20gYXR0cmlidXRlcy4gSG93ZXZlciwgZm9yXG4gICAgICAvLyBvcHRpb24gYW5kIHNlbGVjdCB3ZSBkb24ndCBxdWl0ZSBkbyB0aGUgc2FtZSB0aGluZyBhbmQgc2VsZWN0XG4gICAgICAvLyBpcyBub3QgcmVzaWxpZW50IHRvIHRoZSBET00gc3RhdGUgY2hhbmdpbmcgc28gd2UgZG9uJ3QgZG8gdGhhdCBoZXJlLlxuICAgICAgLy8gVE9ETzogQ29uc2lkZXIgbm90IGRvaW5nIHRoaXMgZm9yIGlucHV0IGFuZCB0ZXh0YXJlYS5cbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIGlmICh0eXBlb2YgcmF3UHJvcHMub25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgICAgICB0cmFwQ2xpY2tPbk5vbkludGVyYWN0aXZlRWxlbWVudChkb21FbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gdXBkYXRlUGF5bG9hZDtcbn1cbmZ1bmN0aW9uIGRpZmZIeWRyYXRlZFRleHQodGV4dE5vZGUsIHRleHQpIHtcbiAgdmFyIGlzRGlmZmVyZW50ID0gdGV4dE5vZGUubm9kZVZhbHVlICE9PSB0ZXh0O1xuICByZXR1cm4gaXNEaWZmZXJlbnQ7XG59XG5mdW5jdGlvbiB3YXJuRm9yVW5tYXRjaGVkVGV4dCh0ZXh0Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclRleHREaWZmZXJlbmNlKHRleHROb2RlLm5vZGVWYWx1ZSwgdGV4dCk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIGEgPCVzPiBpbiA8JXM+LicsIGNoaWxkLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHBhcmVudE5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Tm9kZSwgY2hpbGQpIHtcbiAge1xuICAgIGlmIChkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uID0gdHJ1ZTtcblxuICAgIGVycm9yKCdEaWQgbm90IGV4cGVjdCBzZXJ2ZXIgSFRNTCB0byBjb250YWluIHRoZSB0ZXh0IG5vZGUgXCIlc1wiIGluIDwlcz4uJywgY2hpbGQubm9kZVZhbHVlLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZEVsZW1lbnQocGFyZW50Tm9kZSwgdGFnLCBwcm9wcykge1xuICB7XG4gICAgaWYgKGRpZFdhcm5JbnZhbGlkSHlkcmF0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZGlkV2FybkludmFsaWRIeWRyYXRpb24gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0V4cGVjdGVkIHNlcnZlciBIVE1MIHRvIGNvbnRhaW4gYSBtYXRjaGluZyA8JXM+IGluIDwlcz4uJywgdGFnLCBwYXJlbnROb2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpO1xuICB9XG59XG5mdW5jdGlvbiB3YXJuRm9ySW5zZXJ0ZWRIeWRyYXRlZFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICB7XG4gICAgaWYgKHRleHQgPT09ICcnKSB7XG4gICAgICAvLyBXZSBleHBlY3QgdG8gaW5zZXJ0IGVtcHR5IHRleHQgbm9kZXMgc2luY2UgdGhleSdyZSBub3QgcmVwcmVzZW50ZWQgaW5cbiAgICAgIC8vIHRoZSBIVE1MLlxuICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgc3BlY2lhbCBjYXNlIGlmIHdlIGNhbiBqdXN0IGF2b2lkIGluc2VydGluZyBlbXB0eVxuICAgICAgLy8gdGV4dCBub2Rlcy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGlkV2FybkludmFsaWRIeWRyYXRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkaWRXYXJuSW52YWxpZEh5ZHJhdGlvbiA9IHRydWU7XG5cbiAgICBlcnJvcignRXhwZWN0ZWQgc2VydmVyIEhUTUwgdG8gY29udGFpbiBhIG1hdGNoaW5nIHRleHQgbm9kZSBmb3IgXCIlc1wiIGluIDwlcz4uJywgdGV4dCwgcGFyZW50Tm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKTtcbiAgfVxufVxuZnVuY3Rpb24gcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKGRvbUVsZW1lbnQsIHRhZywgcHJvcHMpIHtcbiAgc3dpdGNoICh0YWcpIHtcbiAgICBjYXNlICdpbnB1dCc6XG4gICAgICByZXN0b3JlQ29udHJvbGxlZFN0YXRlKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcblxuICAgIGNhc2UgJ3RleHRhcmVhJzpcbiAgICAgIHJlc3RvcmVDb250cm9sbGVkU3RhdGUkMihkb21FbGVtZW50LCBwcm9wcyk7XG4gICAgICByZXR1cm47XG5cbiAgICBjYXNlICdzZWxlY3QnOlxuICAgICAgcmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQxKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgICAgIHJldHVybjtcbiAgfVxufVxuXG52YXIgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKCkge307XG5cbnZhciB1cGRhdGVkQW5jZXN0b3JJbmZvID0gZnVuY3Rpb24gKCkge307XG5cbntcbiAgLy8gVGhpcyB2YWxpZGF0aW9uIGNvZGUgd2FzIHdyaXR0ZW4gYmFzZWQgb24gdGhlIEhUTUw1IHBhcnNpbmcgc3BlYzpcbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaGFzLWFuLWVsZW1lbnQtaW4tc2NvcGVcbiAgLy9cbiAgLy8gTm90ZTogdGhpcyBkb2VzIG5vdCBjYXRjaCBhbGwgaW52YWxpZCBuZXN0aW5nLCBub3IgZG9lcyBpdCB0cnkgdG8gKGFzIGl0J3NcbiAgLy8gbm90IGNsZWFyIHdoYXQgcHJhY3RpY2FsIGJlbmVmaXQgZG9pbmcgc28gcHJvdmlkZXMpOyBpbnN0ZWFkLCB3ZSB3YXJuIG9ubHlcbiAgLy8gZm9yIGNhc2VzIHdoZXJlIHRoZSBwYXJzZXIgd2lsbCBnaXZlIGEgcGFyc2UgdHJlZSBkaWZmZXJpbmcgZnJvbSB3aGF0IFJlYWN0XG4gIC8vIGludGVuZGVkLiBGb3IgZXhhbXBsZSwgPGI+PGRpdj48L2Rpdj48L2I+IGlzIGludmFsaWQgYnV0IHdlIGRvbid0IHdhcm5cbiAgLy8gYmVjYXVzZSBpdCBzdGlsbCBwYXJzZXMgY29ycmVjdGx5OyB3ZSBkbyB3YXJuIGZvciBvdGhlciBjYXNlcyBsaWtlIG5lc3RlZFxuICAvLyA8cD4gdGFncyB3aGVyZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgZWxlbWVudCBpbXBsaWNpdGx5IGNsb3NlcyB0aGVcbiAgLy8gZmlyc3QsIGNhdXNpbmcgYSBjb25mdXNpbmcgbWVzcy5cbiAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjc3BlY2lhbFxuICB2YXIgc3BlY2lhbFRhZ3MgPSBbJ2FkZHJlc3MnLCAnYXBwbGV0JywgJ2FyZWEnLCAnYXJ0aWNsZScsICdhc2lkZScsICdiYXNlJywgJ2Jhc2Vmb250JywgJ2Jnc291bmQnLCAnYmxvY2txdW90ZScsICdib2R5JywgJ2JyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjb2wnLCAnY29sZ3JvdXAnLCAnZGQnLCAnZGV0YWlscycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VtYmVkJywgJ2ZpZWxkc2V0JywgJ2ZpZ2NhcHRpb24nLCAnZmlndXJlJywgJ2Zvb3RlcicsICdmb3JtJywgJ2ZyYW1lJywgJ2ZyYW1lc2V0JywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2hlYWQnLCAnaGVhZGVyJywgJ2hncm91cCcsICdocicsICdodG1sJywgJ2lmcmFtZScsICdpbWcnLCAnaW5wdXQnLCAnaXNpbmRleCcsICdsaScsICdsaW5rJywgJ2xpc3RpbmcnLCAnbWFpbicsICdtYXJxdWVlJywgJ21lbnUnLCAnbWVudWl0ZW0nLCAnbWV0YScsICduYXYnLCAnbm9lbWJlZCcsICdub2ZyYW1lcycsICdub3NjcmlwdCcsICdvYmplY3QnLCAnb2wnLCAncCcsICdwYXJhbScsICdwbGFpbnRleHQnLCAncHJlJywgJ3NjcmlwdCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzb3VyY2UnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJsZScsICd0Ym9keScsICd0ZCcsICd0ZW1wbGF0ZScsICd0ZXh0YXJlYScsICd0Zm9vdCcsICd0aCcsICd0aGVhZCcsICd0aXRsZScsICd0cicsICd0cmFjaycsICd1bCcsICd3YnInLCAneG1wJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLXNjb3BlXG5cbiAgdmFyIGluU2NvcGVUYWdzID0gWydhcHBsZXQnLCAnY2FwdGlvbicsICdodG1sJywgJ3RhYmxlJywgJ3RkJywgJ3RoJywgJ21hcnF1ZWUnLCAnb2JqZWN0JywgJ3RlbXBsYXRlJywgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjaHRtbC1pbnRlZ3JhdGlvbi1wb2ludFxuICAvLyBUT0RPOiBEaXN0aW5ndWlzaCBieSBuYW1lc3BhY2UgaGVyZSAtLSBmb3IgPHRpdGxlPiwgaW5jbHVkaW5nIGl0IGhlcmVcbiAgLy8gZXJycyBvbiB0aGUgc2lkZSBvZiBmZXdlciB3YXJuaW5nc1xuICAnZm9yZWlnbk9iamVjdCcsICdkZXNjJywgJ3RpdGxlJ107IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2hhcy1hbi1lbGVtZW50LWluLWJ1dHRvbi1zY29wZVxuXG4gIHZhciBidXR0b25TY29wZVRhZ3MgPSBpblNjb3BlVGFncy5jb25jYXQoWydidXR0b24nXSk7IC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2dlbmVyYXRlLWltcGxpZWQtZW5kLXRhZ3NcblxuICB2YXIgaW1wbGllZEVuZFRhZ3MgPSBbJ2RkJywgJ2R0JywgJ2xpJywgJ29wdGlvbicsICdvcHRncm91cCcsICdwJywgJ3JwJywgJ3J0J107XG4gIHZhciBlbXB0eUFuY2VzdG9ySW5mbyA9IHtcbiAgICBjdXJyZW50OiBudWxsLFxuICAgIGZvcm1UYWc6IG51bGwsXG4gICAgYVRhZ0luU2NvcGU6IG51bGwsXG4gICAgYnV0dG9uVGFnSW5TY29wZTogbnVsbCxcbiAgICBub2JyVGFnSW5TY29wZTogbnVsbCxcbiAgICBwVGFnSW5CdXR0b25TY29wZTogbnVsbCxcbiAgICBsaXN0SXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsLFxuICAgIGRsSXRlbVRhZ0F1dG9jbG9zaW5nOiBudWxsXG4gIH07XG5cbiAgdXBkYXRlZEFuY2VzdG9ySW5mbyA9IGZ1bmN0aW9uIChvbGRJbmZvLCB0YWcpIHtcbiAgICB2YXIgYW5jZXN0b3JJbmZvID0gX2Fzc2lnbih7fSwgb2xkSW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbyk7XG5cbiAgICB2YXIgaW5mbyA9IHtcbiAgICAgIHRhZzogdGFnXG4gICAgfTtcblxuICAgIGlmIChpblNjb3BlVGFncy5pbmRleE9mKHRhZykgIT09IC0xKSB7XG4gICAgICBhbmNlc3RvckluZm8uYVRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGUgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLm5vYnJUYWdJblNjb3BlID0gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uU2NvcGVUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5wVGFnSW5CdXR0b25TY29wZSA9IG51bGw7XG4gICAgfSAvLyBTZWUgcnVsZXMgZm9yICdsaScsICdkZCcsICdkdCcgc3RhcnQgdGFncyBpblxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgaWYgKHNwZWNpYWxUYWdzLmluZGV4T2YodGFnKSAhPT0gLTEgJiYgdGFnICE9PSAnYWRkcmVzcycgJiYgdGFnICE9PSAnZGl2JyAmJiB0YWcgIT09ICdwJykge1xuICAgICAgYW5jZXN0b3JJbmZvLmxpc3RJdGVtVGFnQXV0b2Nsb3NpbmcgPSBudWxsO1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gbnVsbDtcbiAgICB9XG5cbiAgICBhbmNlc3RvckluZm8uY3VycmVudCA9IGluZm87XG5cbiAgICBpZiAodGFnID09PSAnZm9ybScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5mb3JtVGFnID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnYScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5hVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5idXR0b25UYWdJblNjb3BlID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnbm9icicpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZSA9IGluZm87XG4gICAgfVxuXG4gICAgaWYgKHRhZyA9PT0gJ3AnKSB7XG4gICAgICBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGUgPSBpbmZvO1xuICAgIH1cblxuICAgIGlmICh0YWcgPT09ICdsaScpIHtcbiAgICAgIGFuY2VzdG9ySW5mby5saXN0SXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICBpZiAodGFnID09PSAnZGQnIHx8IHRhZyA9PT0gJ2R0Jykge1xuICAgICAgYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nID0gaW5mbztcbiAgICB9XG5cbiAgICByZXR1cm4gYW5jZXN0b3JJbmZvO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyXG4gICAqL1xuXG5cbiAgdmFyIGlzVGFnVmFsaWRXaXRoUGFyZW50ID0gZnVuY3Rpb24gKHRhZywgcGFyZW50VGFnKSB7XG4gICAgLy8gRmlyc3QsIGxldCdzIGNoZWNrIGlmIHdlJ3JlIGluIGFuIHVudXN1YWwgcGFyc2luZyBtb2RlLi4uXG4gICAgc3dpdGNoIChwYXJlbnRUYWcpIHtcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnNlbGVjdFxuICAgICAgY2FzZSAnc2VsZWN0JzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ29wdGlvbicgfHwgdGFnID09PSAnb3B0Z3JvdXAnIHx8IHRhZyA9PT0gJyN0ZXh0JztcblxuICAgICAgY2FzZSAnb3B0Z3JvdXAnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnb3B0aW9uJyB8fCB0YWcgPT09ICcjdGV4dCc7XG4gICAgICAvLyBTdHJpY3RseSBzcGVha2luZywgc2VlaW5nIGFuIDxvcHRpb24+IGRvZXNuJ3QgbWVhbiB3ZSdyZSBpbiBhIDxzZWxlY3Q+XG4gICAgICAvLyBidXRcblxuICAgICAgY2FzZSAnb3B0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJyN0ZXh0JztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRkXG4gICAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLW1haW4taW5jYXB0aW9uXG4gICAgICAvLyBObyBzcGVjaWFsIGJlaGF2aW9yIHNpbmNlIHRoZXNlIHJ1bGVzIGZhbGwgYmFjayB0byBcImluIGJvZHlcIiBtb2RlIGZvclxuICAgICAgLy8gYWxsIGV4Y2VwdCBzcGVjaWFsIHRhYmxlIG5vZGVzIHdoaWNoIGNhdXNlIGJhZCBwYXJzaW5nIGJlaGF2aW9yIGFueXdheS5cbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbnRyXG5cbiAgICAgIGNhc2UgJ3RyJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ3RoJyB8fCB0YWcgPT09ICd0ZCcgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGJvZHlcblxuICAgICAgY2FzZSAndGJvZHknOlxuICAgICAgY2FzZSAndGhlYWQnOlxuICAgICAgY2FzZSAndGZvb3QnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAndHInIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmNvbGdyb3VwXG5cbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2NvbCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjcGFyc2luZy1tYWluLWludGFibGVcblxuICAgICAgY2FzZSAndGFibGUnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnY2FwdGlvbicgfHwgdGFnID09PSAnY29sZ3JvdXAnIHx8IHRhZyA9PT0gJ3Rib2R5JyB8fCB0YWcgPT09ICd0Zm9vdCcgfHwgdGFnID09PSAndGhlYWQnIHx8IHRhZyA9PT0gJ3N0eWxlJyB8fCB0YWcgPT09ICdzY3JpcHQnIHx8IHRhZyA9PT0gJ3RlbXBsYXRlJztcbiAgICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmhlYWRcblxuICAgICAgY2FzZSAnaGVhZCc6XG4gICAgICAgIHJldHVybiB0YWcgPT09ICdiYXNlJyB8fCB0YWcgPT09ICdiYXNlZm9udCcgfHwgdGFnID09PSAnYmdzb3VuZCcgfHwgdGFnID09PSAnbGluaycgfHwgdGFnID09PSAnbWV0YScgfHwgdGFnID09PSAndGl0bGUnIHx8IHRhZyA9PT0gJ25vc2NyaXB0JyB8fCB0YWcgPT09ICdub2ZyYW1lcycgfHwgdGFnID09PSAnc3R5bGUnIHx8IHRhZyA9PT0gJ3NjcmlwdCcgfHwgdGFnID09PSAndGVtcGxhdGUnO1xuICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjdGhlLWh0bWwtZWxlbWVudFxuXG4gICAgICBjYXNlICdodG1sJzpcbiAgICAgICAgcmV0dXJuIHRhZyA9PT0gJ2hlYWQnIHx8IHRhZyA9PT0gJ2JvZHknIHx8IHRhZyA9PT0gJ2ZyYW1lc2V0JztcblxuICAgICAgY2FzZSAnZnJhbWVzZXQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnZnJhbWUnO1xuXG4gICAgICBjYXNlICcjZG9jdW1lbnQnOlxuICAgICAgICByZXR1cm4gdGFnID09PSAnaHRtbCc7XG4gICAgfSAvLyBQcm9iYWJseSBpbiB0aGUgXCJpbiBib2R5XCIgcGFyc2luZyBtb2RlLCBzbyB3ZSBvdXRsYXcgb25seSB0YWcgY29tYm9zXG4gICAgLy8gd2hlcmUgdGhlIHBhcnNpbmcgcnVsZXMgY2F1c2UgaW1wbGljaXQgb3BlbnMgb3IgY2xvc2VzIHRvIGJlIGFkZGVkLlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI3BhcnNpbmctbWFpbi1pbmJvZHlcblxuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgJ2gxJzpcbiAgICAgIGNhc2UgJ2gyJzpcbiAgICAgIGNhc2UgJ2gzJzpcbiAgICAgIGNhc2UgJ2g0JzpcbiAgICAgIGNhc2UgJ2g1JzpcbiAgICAgIGNhc2UgJ2g2JzpcbiAgICAgICAgcmV0dXJuIHBhcmVudFRhZyAhPT0gJ2gxJyAmJiBwYXJlbnRUYWcgIT09ICdoMicgJiYgcGFyZW50VGFnICE9PSAnaDMnICYmIHBhcmVudFRhZyAhPT0gJ2g0JyAmJiBwYXJlbnRUYWcgIT09ICdoNScgJiYgcGFyZW50VGFnICE9PSAnaDYnO1xuXG4gICAgICBjYXNlICdycCc6XG4gICAgICBjYXNlICdydCc6XG4gICAgICAgIHJldHVybiBpbXBsaWVkRW5kVGFncy5pbmRleE9mKHBhcmVudFRhZykgPT09IC0xO1xuXG4gICAgICBjYXNlICdib2R5JzpcbiAgICAgIGNhc2UgJ2NhcHRpb24nOlxuICAgICAgY2FzZSAnY29sJzpcbiAgICAgIGNhc2UgJ2NvbGdyb3VwJzpcbiAgICAgIGNhc2UgJ2ZyYW1lc2V0JzpcbiAgICAgIGNhc2UgJ2ZyYW1lJzpcbiAgICAgIGNhc2UgJ2hlYWQnOlxuICAgICAgY2FzZSAnaHRtbCc6XG4gICAgICBjYXNlICd0Ym9keSc6XG4gICAgICBjYXNlICd0ZCc6XG4gICAgICBjYXNlICd0Zm9vdCc6XG4gICAgICBjYXNlICd0aCc6XG4gICAgICBjYXNlICd0aGVhZCc6XG4gICAgICBjYXNlICd0cic6XG4gICAgICAgIC8vIFRoZXNlIHRhZ3MgYXJlIG9ubHkgdmFsaWQgd2l0aCBhIGZldyBwYXJlbnRzIHRoYXQgaGF2ZSBzcGVjaWFsIGNoaWxkXG4gICAgICAgIC8vIHBhcnNpbmcgcnVsZXMgLS0gaWYgd2UncmUgZG93biBoZXJlLCB0aGVuIG5vbmUgb2YgdGhvc2UgbWF0Y2hlZCBhbmRcbiAgICAgICAgLy8gc28gd2UgYWxsb3cgaXQgb25seSBpZiB3ZSBkb24ndCBrbm93IHdoYXQgdGhlIHBhcmVudCBpcywgYXMgYWxsIG90aGVyXG4gICAgICAgIC8vIGNhc2VzIGFyZSBpbnZhbGlkLlxuICAgICAgICByZXR1cm4gcGFyZW50VGFnID09IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHdoZXRoZXJcbiAgICovXG5cblxuICB2YXIgZmluZEludmFsaWRBbmNlc3RvckZvclRhZyA9IGZ1bmN0aW9uICh0YWcsIGFuY2VzdG9ySW5mbykge1xuICAgIHN3aXRjaCAodGFnKSB7XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ2FydGljbGUnOlxuICAgICAgY2FzZSAnYXNpZGUnOlxuICAgICAgY2FzZSAnYmxvY2txdW90ZSc6XG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgY2FzZSAnZGV0YWlscyc6XG4gICAgICBjYXNlICdkaWFsb2cnOlxuICAgICAgY2FzZSAnZGlyJzpcbiAgICAgIGNhc2UgJ2Rpdic6XG4gICAgICBjYXNlICdkbCc6XG4gICAgICBjYXNlICdmaWVsZHNldCc6XG4gICAgICBjYXNlICdmaWdjYXB0aW9uJzpcbiAgICAgIGNhc2UgJ2ZpZ3VyZSc6XG4gICAgICBjYXNlICdmb290ZXInOlxuICAgICAgY2FzZSAnaGVhZGVyJzpcbiAgICAgIGNhc2UgJ2hncm91cCc6XG4gICAgICBjYXNlICdtYWluJzpcbiAgICAgIGNhc2UgJ21lbnUnOlxuICAgICAgY2FzZSAnbmF2JzpcbiAgICAgIGNhc2UgJ29sJzpcbiAgICAgIGNhc2UgJ3AnOlxuICAgICAgY2FzZSAnc2VjdGlvbic6XG4gICAgICBjYXNlICdzdW1tYXJ5JzpcbiAgICAgIGNhc2UgJ3VsJzpcbiAgICAgIGNhc2UgJ3ByZSc6XG4gICAgICBjYXNlICdsaXN0aW5nJzpcbiAgICAgIGNhc2UgJ3RhYmxlJzpcbiAgICAgIGNhc2UgJ2hyJzpcbiAgICAgIGNhc2UgJ3htcCc6XG4gICAgICBjYXNlICdoMSc6XG4gICAgICBjYXNlICdoMic6XG4gICAgICBjYXNlICdoMyc6XG4gICAgICBjYXNlICdoNCc6XG4gICAgICBjYXNlICdoNSc6XG4gICAgICBjYXNlICdoNic6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ucFRhZ0luQnV0dG9uU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2Zvcm0nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmZvcm1UYWcgfHwgYW5jZXN0b3JJbmZvLnBUYWdJbkJ1dHRvblNjb3BlO1xuXG4gICAgICBjYXNlICdsaSc6XG4gICAgICAgIHJldHVybiBhbmNlc3RvckluZm8ubGlzdEl0ZW1UYWdBdXRvY2xvc2luZztcblxuICAgICAgY2FzZSAnZGQnOlxuICAgICAgY2FzZSAnZHQnOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmRsSXRlbVRhZ0F1dG9jbG9zaW5nO1xuXG4gICAgICBjYXNlICdidXR0b24nOlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmJ1dHRvblRhZ0luU2NvcGU7XG5cbiAgICAgIGNhc2UgJ2EnOlxuICAgICAgICAvLyBTcGVjIHNheXMgc29tZXRoaW5nIGFib3V0IHN0b3JpbmcgYSBsaXN0IG9mIG1hcmtlcnMsIGJ1dCBpdCBzb3VuZHNcbiAgICAgICAgLy8gZXF1aXZhbGVudCB0byB0aGlzIGNoZWNrLlxuICAgICAgICByZXR1cm4gYW5jZXN0b3JJbmZvLmFUYWdJblNjb3BlO1xuXG4gICAgICBjYXNlICdub2JyJzpcbiAgICAgICAgcmV0dXJuIGFuY2VzdG9ySW5mby5ub2JyVGFnSW5TY29wZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfTtcblxuICB2YXIgZGlkV2FybiQxID0ge307XG5cbiAgdmFsaWRhdGVET01OZXN0aW5nID0gZnVuY3Rpb24gKGNoaWxkVGFnLCBjaGlsZFRleHQsIGFuY2VzdG9ySW5mbykge1xuICAgIGFuY2VzdG9ySW5mbyA9IGFuY2VzdG9ySW5mbyB8fCBlbXB0eUFuY2VzdG9ySW5mbztcbiAgICB2YXIgcGFyZW50SW5mbyA9IGFuY2VzdG9ySW5mby5jdXJyZW50O1xuICAgIHZhciBwYXJlbnRUYWcgPSBwYXJlbnRJbmZvICYmIHBhcmVudEluZm8udGFnO1xuXG4gICAgaWYgKGNoaWxkVGV4dCAhPSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRUYWcgIT0gbnVsbCkge1xuICAgICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nOiB3aGVuIGNoaWxkVGV4dCBpcyBwYXNzZWQsIGNoaWxkVGFnIHNob3VsZCBiZSBudWxsJyk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkVGFnID0gJyN0ZXh0JztcbiAgICB9XG5cbiAgICB2YXIgaW52YWxpZFBhcmVudCA9IGlzVGFnVmFsaWRXaXRoUGFyZW50KGNoaWxkVGFnLCBwYXJlbnRUYWcpID8gbnVsbCA6IHBhcmVudEluZm87XG4gICAgdmFyIGludmFsaWRBbmNlc3RvciA9IGludmFsaWRQYXJlbnQgPyBudWxsIDogZmluZEludmFsaWRBbmNlc3RvckZvclRhZyhjaGlsZFRhZywgYW5jZXN0b3JJbmZvKTtcbiAgICB2YXIgaW52YWxpZFBhcmVudE9yQW5jZXN0b3IgPSBpbnZhbGlkUGFyZW50IHx8IGludmFsaWRBbmNlc3RvcjtcblxuICAgIGlmICghaW52YWxpZFBhcmVudE9yQW5jZXN0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYW5jZXN0b3JUYWcgPSBpbnZhbGlkUGFyZW50T3JBbmNlc3Rvci50YWc7XG4gICAgdmFyIHdhcm5LZXkgPSAhIWludmFsaWRQYXJlbnQgKyAnfCcgKyBjaGlsZFRhZyArICd8JyArIGFuY2VzdG9yVGFnO1xuXG4gICAgaWYgKGRpZFdhcm4kMVt3YXJuS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRpZFdhcm4kMVt3YXJuS2V5XSA9IHRydWU7XG4gICAgdmFyIHRhZ0Rpc3BsYXlOYW1lID0gY2hpbGRUYWc7XG4gICAgdmFyIHdoaXRlc3BhY2VJbmZvID0gJyc7XG5cbiAgICBpZiAoY2hpbGRUYWcgPT09ICcjdGV4dCcpIHtcbiAgICAgIGlmICgvXFxTLy50ZXN0KGNoaWxkVGV4dCkpIHtcbiAgICAgICAgdGFnRGlzcGxheU5hbWUgPSAnVGV4dCBub2Rlcyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YWdEaXNwbGF5TmFtZSA9ICdXaGl0ZXNwYWNlIHRleHQgbm9kZXMnO1xuICAgICAgICB3aGl0ZXNwYWNlSW5mbyA9IFwiIE1ha2Ugc3VyZSB5b3UgZG9uJ3QgaGF2ZSBhbnkgZXh0cmEgd2hpdGVzcGFjZSBiZXR3ZWVuIHRhZ3Mgb24gXCIgKyAnZWFjaCBsaW5lIG9mIHlvdXIgc291cmNlIGNvZGUuJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnRGlzcGxheU5hbWUgPSAnPCcgKyBjaGlsZFRhZyArICc+JztcbiAgICB9XG5cbiAgICBpZiAoaW52YWxpZFBhcmVudCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcblxuICAgICAgaWYgKGFuY2VzdG9yVGFnID09PSAndGFibGUnICYmIGNoaWxkVGFnID09PSAndHInKSB7XG4gICAgICAgIGluZm8gKz0gJyBBZGQgYSA8dGJvZHk+LCA8dGhlYWQ+IG9yIDx0Zm9vdD4gdG8geW91ciBjb2RlIHRvIG1hdGNoIHRoZSBET00gdHJlZSBnZW5lcmF0ZWQgYnkgJyArICd0aGUgYnJvd3Nlci4nO1xuICAgICAgfVxuXG4gICAgICBlcnJvcigndmFsaWRhdGVET01OZXN0aW5nKC4uLik6ICVzIGNhbm5vdCBhcHBlYXIgYXMgYSBjaGlsZCBvZiA8JXM+LiVzJXMnLCB0YWdEaXNwbGF5TmFtZSwgYW5jZXN0b3JUYWcsIHdoaXRlc3BhY2VJbmZvLCBpbmZvKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXJyb3IoJ3ZhbGlkYXRlRE9NTmVzdGluZyguLi4pOiAlcyBjYW5ub3QgYXBwZWFyIGFzIGEgZGVzY2VuZGFudCBvZiAnICsgJzwlcz4uJywgdGFnRGlzcGxheU5hbWUsIGFuY2VzdG9yVGFnKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxO1xuXG57XG4gIFNVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDEgPSAnc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nJztcbn1cblxudmFyIFNVU1BFTlNFX1NUQVJUX0RBVEEgPSAnJCc7XG52YXIgU1VTUEVOU0VfRU5EX0RBVEEgPSAnLyQnO1xudmFyIFNVU1BFTlNFX1BFTkRJTkdfU1RBUlRfREFUQSA9ICckPyc7XG52YXIgU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSA9ICckISc7XG52YXIgU1RZTEUkMSA9ICdzdHlsZSc7XG52YXIgZXZlbnRzRW5hYmxlZCA9IG51bGw7XG52YXIgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xuXG5mdW5jdGlvbiBzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIHByb3BzKSB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ2J1dHRvbic6XG4gICAgY2FzZSAnaW5wdXQnOlxuICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgY2FzZSAndGV4dGFyZWEnOlxuICAgICAgcmV0dXJuICEhcHJvcHMuYXV0b0ZvY3VzO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250ZXh0KHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB2YXIgdHlwZTtcbiAgdmFyIG5hbWVzcGFjZTtcbiAgdmFyIG5vZGVUeXBlID0gcm9vdENvbnRhaW5lckluc3RhbmNlLm5vZGVUeXBlO1xuXG4gIHN3aXRjaCAobm9kZVR5cGUpIHtcbiAgICBjYXNlIERPQ1VNRU5UX05PREU6XG4gICAgY2FzZSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFOlxuICAgICAge1xuICAgICAgICB0eXBlID0gbm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUgPyAnI2RvY3VtZW50JyA6ICcjZnJhZ21lbnQnO1xuICAgICAgICB2YXIgcm9vdCA9IHJvb3RDb250YWluZXJJbnN0YW5jZS5kb2N1bWVudEVsZW1lbnQ7XG4gICAgICAgIG5hbWVzcGFjZSA9IHJvb3QgPyByb290Lm5hbWVzcGFjZVVSSSA6IGdldENoaWxkTmFtZXNwYWNlKG51bGwsICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gbm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSA/IHJvb3RDb250YWluZXJJbnN0YW5jZS5wYXJlbnROb2RlIDogcm9vdENvbnRhaW5lckluc3RhbmNlO1xuICAgICAgICB2YXIgb3duTmFtZXNwYWNlID0gY29udGFpbmVyLm5hbWVzcGFjZVVSSSB8fCBudWxsO1xuICAgICAgICB0eXBlID0gY29udGFpbmVyLnRhZ05hbWU7XG4gICAgICAgIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKG93bk5hbWVzcGFjZSwgdHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHZhciB2YWxpZGF0ZWRUYWcgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8obnVsbCwgdmFsaWRhdGVkVGFnKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldENoaWxkSG9zdENvbnRleHQocGFyZW50SG9zdENvbnRleHQsIHR5cGUsIHJvb3RDb250YWluZXJJbnN0YW5jZSkge1xuICB7XG4gICAgdmFyIHBhcmVudEhvc3RDb250ZXh0RGV2ID0gcGFyZW50SG9zdENvbnRleHQ7XG4gICAgdmFyIG5hbWVzcGFjZSA9IGdldENoaWxkTmFtZXNwYWNlKHBhcmVudEhvc3RDb250ZXh0RGV2Lm5hbWVzcGFjZSwgdHlwZSk7XG4gICAgdmFyIGFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8ocGFyZW50SG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgICBhbmNlc3RvckluZm86IGFuY2VzdG9ySW5mb1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGdldFB1YmxpY0luc3RhbmNlKGluc3RhbmNlKSB7XG4gIHJldHVybiBpbnN0YW5jZTtcbn1cbmZ1bmN0aW9uIHByZXBhcmVGb3JDb21taXQoY29udGFpbmVySW5mbykge1xuICBldmVudHNFbmFibGVkID0gaXNFbmFibGVkKCk7XG4gIHNlbGVjdGlvbkluZm9ybWF0aW9uID0gZ2V0U2VsZWN0aW9uSW5mb3JtYXRpb24oKTtcbiAgdmFyIGFjdGl2ZUluc3RhbmNlID0gbnVsbDtcblxuICBzZXRFbmFibGVkKGZhbHNlKTtcbiAgcmV0dXJuIGFjdGl2ZUluc3RhbmNlO1xufVxuZnVuY3Rpb24gcmVzZXRBZnRlckNvbW1pdChjb250YWluZXJJbmZvKSB7XG4gIHJlc3RvcmVTZWxlY3Rpb24oc2VsZWN0aW9uSW5mb3JtYXRpb24pO1xuICBzZXRFbmFibGVkKGV2ZW50c0VuYWJsZWQpO1xuICBldmVudHNFbmFibGVkID0gbnVsbDtcbiAgc2VsZWN0aW9uSW5mb3JtYXRpb24gPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2UodHlwZSwgcHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAgdmFyIHBhcmVudE5hbWVzcGFjZTtcblxuICB7XG4gICAgLy8gVE9ETzogdGFrZSBuYW1lc3BhY2UgaW50byBhY2NvdW50IHdoZW4gdmFsaWRhdGluZy5cbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICB2YWxpZGF0ZURPTU5lc3RpbmcodHlwZSwgbnVsbCwgaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvKTtcblxuICAgIGlmICh0eXBlb2YgcHJvcHMuY2hpbGRyZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIHByb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuXG4gICAgcGFyZW50TmFtZXNwYWNlID0gaG9zdENvbnRleHREZXYubmFtZXNwYWNlO1xuICB9XG5cbiAgdmFyIGRvbUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIHBhcmVudE5hbWVzcGFjZSk7XG4gIHByZWNhY2hlRmliZXJOb2RlKGludGVybmFsSW5zdGFuY2VIYW5kbGUsIGRvbUVsZW1lbnQpO1xuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIHByb3BzKTtcbiAgcmV0dXJuIGRvbUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50SW5zdGFuY2UsIGNoaWxkKSB7XG4gIHBhcmVudEluc3RhbmNlLmFwcGVuZENoaWxkKGNoaWxkKTtcbn1cbmZ1bmN0aW9uIGZpbmFsaXplSW5pdGlhbENoaWxkcmVuKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UsIGhvc3RDb250ZXh0KSB7XG4gIHNldEluaXRpYWxQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIHByb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpO1xuICByZXR1cm4gc2hvdWxkQXV0b0ZvY3VzSG9zdENvbXBvbmVudCh0eXBlLCBwcm9wcyk7XG59XG5mdW5jdGlvbiBwcmVwYXJlVXBkYXRlKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGhvc3RDb250ZXh0RGV2ID0gaG9zdENvbnRleHQ7XG5cbiAgICBpZiAodHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuICE9PSB0eXBlb2Ygb2xkUHJvcHMuY2hpbGRyZW4gJiYgKHR5cGVvZiBuZXdQcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld1Byb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJykpIHtcbiAgICAgIHZhciBzdHJpbmcgPSAnJyArIG5ld1Byb3BzLmNoaWxkcmVuO1xuICAgICAgdmFyIG93bkFuY2VzdG9ySW5mbyA9IHVwZGF0ZWRBbmNlc3RvckluZm8oaG9zdENvbnRleHREZXYuYW5jZXN0b3JJbmZvLCB0eXBlKTtcbiAgICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCBzdHJpbmcsIG93bkFuY2VzdG9ySW5mbyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpZmZQcm9wZXJ0aWVzKGRvbUVsZW1lbnQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG59XG5mdW5jdGlvbiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcm9wcykge1xuICByZXR1cm4gdHlwZSA9PT0gJ3RleHRhcmVhJyB8fCB0eXBlID09PSAnb3B0aW9uJyB8fCB0eXBlID09PSAnbm9zY3JpcHQnIHx8IHR5cGVvZiBwcm9wcy5jaGlsZHJlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHByb3BzLmNoaWxkcmVuID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcHJvcHMuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgPT09ICdvYmplY3QnICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MICE9PSBudWxsICYmIHByb3BzLmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbCAhPSBudWxsO1xufVxuZnVuY3Rpb24gY3JlYXRlVGV4dEluc3RhbmNlKHRleHQsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGludGVybmFsSW5zdGFuY2VIYW5kbGUpIHtcbiAge1xuICAgIHZhciBob3N0Q29udGV4dERldiA9IGhvc3RDb250ZXh0O1xuICAgIHZhbGlkYXRlRE9NTmVzdGluZyhudWxsLCB0ZXh0LCBob3N0Q29udGV4dERldi5hbmNlc3RvckluZm8pO1xuICB9XG5cbiAgdmFyIHRleHROb2RlID0gY3JlYXRlVGV4dE5vZGUodGV4dCwgcm9vdENvbnRhaW5lckluc3RhbmNlKTtcbiAgcHJlY2FjaGVGaWJlck5vZGUoaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSwgdGV4dE5vZGUpO1xuICByZXR1cm4gdGV4dE5vZGU7XG59XG4vLyBpZiBhIGNvbXBvbmVudCBqdXN0IGltcG9ydHMgUmVhY3RET00gKGUuZy4gZm9yIGZpbmRET01Ob2RlKS5cbi8vIFNvbWUgZW52aXJvbm1lbnRzIG1pZ2h0IG5vdCBoYXZlIHNldFRpbWVvdXQgb3IgY2xlYXJUaW1lb3V0LlxuXG52YXIgc2NoZWR1bGVUaW1lb3V0ID0gdHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicgPyBzZXRUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIGNhbmNlbFRpbWVvdXQgPSB0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nID8gY2xlYXJUaW1lb3V0IDogdW5kZWZpbmVkO1xudmFyIG5vVGltZW91dCA9IC0xOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjb21taXRNb3VudChkb21FbGVtZW50LCB0eXBlLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBEZXNwaXRlIHRoZSBuYW1pbmcgdGhhdCBtaWdodCBpbXBseSBvdGhlcndpc2UsIHRoaXMgbWV0aG9kIG9ubHlcbiAgLy8gZmlyZXMgaWYgdGhlcmUgaXMgYW4gYFVwZGF0ZWAgZWZmZWN0IHNjaGVkdWxlZCBkdXJpbmcgbW91bnRpbmcuXG4gIC8vIFRoaXMgaGFwcGVucyBpZiBgZmluYWxpemVJbml0aWFsQ2hpbGRyZW5gIHJldHVybnMgYHRydWVgICh3aGljaCBpdFxuICAvLyBkb2VzIHRvIGltcGxlbWVudCB0aGUgYGF1dG9Gb2N1c2AgYXR0cmlidXRlIG9uIHRoZSBjbGllbnQpLiBCdXRcbiAgLy8gdGhlcmUgYXJlIGFsc28gb3RoZXIgY2FzZXMgd2hlbiB0aGlzIG1pZ2h0IGhhcHBlbiAoc3VjaCBhcyBwYXRjaGluZ1xuICAvLyB1cCB0ZXh0IGNvbnRlbnQgZHVyaW5nIGh5ZHJhdGlvbiBtaXNtYXRjaCkuIFNvIHdlJ2xsIGNoZWNrIHRoaXMgYWdhaW4uXG4gIGlmIChzaG91bGRBdXRvRm9jdXNIb3N0Q29tcG9uZW50KHR5cGUsIG5ld1Byb3BzKSkge1xuICAgIGRvbUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlKGRvbUVsZW1lbnQsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICAvLyBVcGRhdGUgdGhlIHByb3BzIGhhbmRsZSBzbyB0aGF0IHdlIGtub3cgd2hpY2ggcHJvcHMgYXJlIHRoZSBvbmVzIHdpdGhcbiAgLy8gd2l0aCBjdXJyZW50IGV2ZW50IGhhbmRsZXJzLlxuICB1cGRhdGVGaWJlclByb3BzKGRvbUVsZW1lbnQsIG5ld1Byb3BzKTsgLy8gQXBwbHkgdGhlIGRpZmYgdG8gdGhlIERPTSBub2RlLlxuXG4gIHVwZGF0ZVByb3BlcnRpZXMoZG9tRWxlbWVudCwgdXBkYXRlUGF5bG9hZCwgdHlwZSwgb2xkUHJvcHMsIG5ld1Byb3BzKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VGV4dENvbnRlbnQoZG9tRWxlbWVudCkge1xuICBzZXRUZXh0Q29udGVudChkb21FbGVtZW50LCAnJyk7XG59XG5mdW5jdGlvbiBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gbmV3VGV4dDtcbn1cbmZ1bmN0aW9uIGFwcGVuZENoaWxkKHBhcmVudEluc3RhbmNlLCBjaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5hcHBlbmRDaGlsZChjaGlsZCk7XG59XG5mdW5jdGlvbiBhcHBlbmRDaGlsZFRvQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgdmFyIHBhcmVudE5vZGU7XG5cbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgcGFyZW50Tm9kZSA9IGNvbnRhaW5lci5wYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKGNoaWxkLCBjb250YWluZXIpO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudE5vZGUgPSBjb250YWluZXI7XG4gICAgcGFyZW50Tm9kZS5hcHBlbmRDaGlsZChjaGlsZCk7XG4gIH0gLy8gVGhpcyBjb250YWluZXIgbWlnaHQgYmUgdXNlZCBmb3IgYSBwb3J0YWwuXG4gIC8vIElmIHNvbWV0aGluZyBpbnNpZGUgYSBwb3J0YWwgaXMgY2xpY2tlZCwgdGhhdCBjbGljayBzaG91bGQgYnViYmxlXG4gIC8vIHRocm91Z2ggdGhlIFJlYWN0IHRyZWUuIEhvd2V2ZXIsIG9uIE1vYmlsZSBTYWZhcmkgdGhlIGNsaWNrIHdvdWxkXG4gIC8vIG5ldmVyIGJ1YmJsZSB0aHJvdWdoIHRoZSAqRE9NKiB0cmVlIHVubGVzcyBhbiBhbmNlc3RvciB3aXRoIG9uY2xpY2tcbiAgLy8gZXZlbnQgZXhpc3RzLiBTbyB3ZSB3b3VsZG4ndCBzZWUgaXQgYW5kIGRpc3BhdGNoIGl0LlxuICAvLyBUaGlzIGlzIHdoeSB3ZSBlbnN1cmUgdGhhdCBub24gUmVhY3Qgcm9vdCBjb250YWluZXJzIGhhdmUgaW5saW5lIG9uY2xpY2tcbiAgLy8gZGVmaW5lZC5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMTkxOFxuXG5cbiAgdmFyIHJlYWN0Um9vdENvbnRhaW5lciA9IGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuXG4gIGlmICgocmVhY3RSb290Q29udGFpbmVyID09PSBudWxsIHx8IHJlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSAmJiBwYXJlbnROb2RlLm9uY2xpY2sgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPOiBUaGlzIGNhc3QgbWF5IG5vdCBiZSBzb3VuZCBmb3IgU1ZHLCBNYXRoTUwgb3IgY3VzdG9tIGVsZW1lbnRzLlxuICAgIHRyYXBDbGlja09uTm9uSW50ZXJhY3RpdmVFbGVtZW50KHBhcmVudE5vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBpbnNlcnRCZWZvcmUocGFyZW50SW5zdGFuY2UsIGNoaWxkLCBiZWZvcmVDaGlsZCkge1xuICBwYXJlbnRJbnN0YW5jZS5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbn1cbmZ1bmN0aW9uIGluc2VydEluQ29udGFpbmVyQmVmb3JlKGNvbnRhaW5lciwgY2hpbGQsIGJlZm9yZUNoaWxkKSB7XG4gIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkge1xuICAgIGNvbnRhaW5lci5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjaGlsZCwgYmVmb3JlQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5pbnNlcnRCZWZvcmUoY2hpbGQsIGJlZm9yZUNoaWxkKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdmVDaGlsZChwYXJlbnRJbnN0YW5jZSwgY2hpbGQpIHtcbiAgcGFyZW50SW5zdGFuY2UucmVtb3ZlQ2hpbGQoY2hpbGQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlQ2hpbGRGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgY2hpbGQpIHtcbiAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChjaGlsZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVJbnN0YW5jZShpbnN0YW5jZSkge1xuICAvLyBUT0RPOiBEb2VzIHRoaXMgd29yayBmb3IgYWxsIGVsZW1lbnQgdHlwZXM/IFdoYXQgYWJvdXQgTWF0aE1MPyBTaG91bGQgd2VcbiAgLy8gcGFzcyBob3N0IGNvbnRleHQgdG8gdGhpcyBtZXRob2Q/XG4gIGluc3RhbmNlID0gaW5zdGFuY2U7XG4gIHZhciBzdHlsZSA9IGluc3RhbmNlLnN0eWxlO1xuXG4gIGlmICh0eXBlb2Ygc3R5bGUuc2V0UHJvcGVydHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzdHlsZS5zZXRQcm9wZXJ0eSgnZGlzcGxheScsICdub25lJywgJ2ltcG9ydGFudCcpO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gIH1cbn1cbmZ1bmN0aW9uIGhpZGVUZXh0SW5zdGFuY2UodGV4dEluc3RhbmNlKSB7XG4gIHRleHRJbnN0YW5jZS5ub2RlVmFsdWUgPSAnJztcbn1cbmZ1bmN0aW9uIHVuaGlkZUluc3RhbmNlKGluc3RhbmNlLCBwcm9wcykge1xuICBpbnN0YW5jZSA9IGluc3RhbmNlO1xuICB2YXIgc3R5bGVQcm9wID0gcHJvcHNbU1RZTEUkMV07XG4gIHZhciBkaXNwbGF5ID0gc3R5bGVQcm9wICE9PSB1bmRlZmluZWQgJiYgc3R5bGVQcm9wICE9PSBudWxsICYmIHN0eWxlUHJvcC5oYXNPd25Qcm9wZXJ0eSgnZGlzcGxheScpID8gc3R5bGVQcm9wLmRpc3BsYXkgOiBudWxsO1xuICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gZGFuZ2Vyb3VzU3R5bGVWYWx1ZSgnZGlzcGxheScsIGRpc3BsYXkpO1xufVxuZnVuY3Rpb24gdW5oaWRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB0ZXh0SW5zdGFuY2Uubm9kZVZhbHVlID0gdGV4dDtcbn1cbmZ1bmN0aW9uIGNsZWFyQ29udGFpbmVyKGNvbnRhaW5lcikge1xuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICBjb250YWluZXIudGV4dENvbnRlbnQgPSAnJztcbiAgfSBlbHNlIGlmIChjb250YWluZXIubm9kZVR5cGUgPT09IERPQ1VNRU5UX05PREUpIHtcbiAgICB2YXIgYm9keSA9IGNvbnRhaW5lci5ib2R5O1xuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgYm9keS50ZXh0Q29udGVudCA9ICcnO1xuICAgIH1cbiAgfVxufSAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjYW5IeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIHR5cGUsIHByb3BzKSB7XG4gIGlmIChpbnN0YW5jZS5ub2RlVHlwZSAhPT0gRUxFTUVOVF9OT0RFIHx8IHR5cGUudG9Mb3dlckNhc2UoKSAhPT0gaW5zdGFuY2Uubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIFRoaXMgaGFzIG5vdyBiZWVuIHJlZmluZWQgdG8gYW4gZWxlbWVudCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShpbnN0YW5jZSwgdGV4dCkge1xuICBpZiAodGV4dCA9PT0gJycgfHwgaW5zdGFuY2Uubm9kZVR5cGUgIT09IFRFWFRfTk9ERSkge1xuICAgIC8vIEVtcHR5IHN0cmluZ3MgYXJlIG5vdCBwYXJzZWQgYnkgSFRNTCBzbyB0aGVyZSB3b24ndCBiZSBhIGNvcnJlY3QgbWF0Y2ggaGVyZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBUaGlzIGhhcyBub3cgYmVlbiByZWZpbmVkIHRvIGEgdGV4dCBub2RlLlxuXG5cbiAgcmV0dXJuIGluc3RhbmNlO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gaW5zdGFuY2UuZGF0YSA9PT0gU1VTUEVOU0VfUEVORElOR19TVEFSVF9EQVRBO1xufVxuZnVuY3Rpb24gaXNTdXNwZW5zZUluc3RhbmNlRmFsbGJhY2soaW5zdGFuY2UpIHtcbiAgcmV0dXJuIGluc3RhbmNlLmRhdGEgPT09IFNVU1BFTlNFX0ZBTExCQUNLX1NUQVJUX0RBVEE7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlKG5vZGUpIHtcbiAgLy8gU2tpcCBub24taHlkcmF0YWJsZSBub2Rlcy5cbiAgZm9yICg7IG5vZGUgIT0gbnVsbDsgbm9kZSA9IG5vZGUubmV4dFNpYmxpbmcpIHtcbiAgICB2YXIgbm9kZVR5cGUgPSBub2RlLm5vZGVUeXBlO1xuXG4gICAgaWYgKG5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZVR5cGUgPT09IFRFWFRfTk9ERSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhpbnN0YW5jZSkge1xuICByZXR1cm4gZ2V0TmV4dEh5ZHJhdGFibGUoaW5zdGFuY2UubmV4dFNpYmxpbmcpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpIHtcbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlKHBhcmVudEluc3RhbmNlLmZpcnN0Q2hpbGQpO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUluc3RhbmNlKGluc3RhbmNlLCB0eXBlLCBwcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCBpbnN0YW5jZSk7IC8vIFRPRE86IFBvc3NpYmx5IGRlZmVyIHRoaXMgdW50aWwgdGhlIGNvbW1pdCBwaGFzZSB3aGVyZSBhbGwgdGhlIGV2ZW50c1xuICAvLyBnZXQgYXR0YWNoZWQuXG5cbiAgdXBkYXRlRmliZXJQcm9wcyhpbnN0YW5jZSwgcHJvcHMpO1xuICB2YXIgcGFyZW50TmFtZXNwYWNlO1xuXG4gIHtcbiAgICB2YXIgaG9zdENvbnRleHREZXYgPSBob3N0Q29udGV4dDtcbiAgICBwYXJlbnROYW1lc3BhY2UgPSBob3N0Q29udGV4dERldi5uYW1lc3BhY2U7XG4gIH1cblxuICByZXR1cm4gZGlmZkh5ZHJhdGVkUHJvcGVydGllcyhpbnN0YW5jZSwgdHlwZSwgcHJvcHMsIHBhcmVudE5hbWVzcGFjZSk7XG59XG5mdW5jdGlvbiBoeWRyYXRlVGV4dEluc3RhbmNlKHRleHRJbnN0YW5jZSwgdGV4dCwgaW50ZXJuYWxJbnN0YW5jZUhhbmRsZSkge1xuICBwcmVjYWNoZUZpYmVyTm9kZShpbnRlcm5hbEluc3RhbmNlSGFuZGxlLCB0ZXh0SW5zdGFuY2UpO1xuICByZXR1cm4gZGlmZkh5ZHJhdGVkVGV4dCh0ZXh0SW5zdGFuY2UsIHRleHQpO1xufVxuZnVuY3Rpb24gZ2V0TmV4dEh5ZHJhdGFibGVJbnN0YW5jZUFmdGVyU3VzcGVuc2VJbnN0YW5jZShzdXNwZW5zZUluc3RhbmNlKSB7XG4gIHZhciBub2RlID0gc3VzcGVuc2VJbnN0YW5jZS5uZXh0U2libGluZzsgLy8gU2tpcCBwYXN0IGFsbCBub2RlcyB3aXRoaW4gdGhpcyBzdXNwZW5zZSBib3VuZGFyeS5cbiAgLy8gVGhlcmUgbWlnaHQgYmUgbmVzdGVkIG5vZGVzIHNvIHdlIG5lZWQgdG8ga2VlcCB0cmFjayBvZiBob3dcbiAgLy8gZGVlcCB3ZSBhcmUgYW5kIG9ubHkgYnJlYWsgb3V0IHdoZW4gd2UncmUgYmFjayBvbiB0b3AuXG5cbiAgdmFyIGRlcHRoID0gMDtcblxuICB3aGlsZSAobm9kZSkge1xuICAgIGlmIChub2RlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHtcbiAgICAgIHZhciBkYXRhID0gbm9kZS5kYXRhO1xuXG4gICAgICBpZiAoZGF0YSA9PT0gU1VTUEVOU0VfRU5EX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlU2libGluZyhub2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXB0aC0tO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgZGVwdGgrKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5uZXh0U2libGluZztcbiAgfSAvLyBUT0RPOiBXYXJuLCB3ZSBkaWRuJ3QgZmluZCB0aGUgZW5kIGNvbW1lbnQgYm91bmRhcnkuXG5cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gUmV0dXJucyB0aGUgU3VzcGVuc2VJbnN0YW5jZSBpZiB0aGlzIG5vZGUgaXMgYSBkaXJlY3QgY2hpbGQgb2YgYVxuLy8gU3VzcGVuc2VJbnN0YW5jZS4gSS5lLiBpZiBpdHMgcHJldmlvdXMgc2libGluZyBpcyBhIENvbW1lbnQgd2l0aFxuLy8gU1VTUEVOU0VfeF9TVEFSVF9EQVRBLiBPdGhlcndpc2UsIG51bGwuXG5cbmZ1bmN0aW9uIGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2UodGFyZ2V0SW5zdGFuY2UpIHtcbiAgdmFyIG5vZGUgPSB0YXJnZXRJbnN0YW5jZS5wcmV2aW91c1NpYmxpbmc7IC8vIFNraXAgcGFzdCBhbGwgbm9kZXMgd2l0aGluIHRoaXMgc3VzcGVuc2UgYm91bmRhcnkuXG4gIC8vIFRoZXJlIG1pZ2h0IGJlIG5lc3RlZCBub2RlcyBzbyB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgb2YgaG93XG4gIC8vIGRlZXAgd2UgYXJlIGFuZCBvbmx5IGJyZWFrIG91dCB3aGVuIHdlJ3JlIGJhY2sgb24gdG9wLlxuXG4gIHZhciBkZXB0aCA9IDA7XG5cbiAgd2hpbGUgKG5vZGUpIHtcbiAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICB2YXIgZGF0YSA9IG5vZGUuZGF0YTtcblxuICAgICAgaWYgKGRhdGEgPT09IFNVU1BFTlNFX1NUQVJUX0RBVEEgfHwgZGF0YSA9PT0gU1VTUEVOU0VfRkFMTEJBQ0tfU1RBUlRfREFUQSB8fCBkYXRhID09PSBTVVNQRU5TRV9QRU5ESU5HX1NUQVJUX0RBVEEpIHtcbiAgICAgICAgaWYgKGRlcHRoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGVwdGgtLTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhID09PSBTVVNQRU5TRV9FTkRfREFUQSkge1xuICAgICAgICBkZXB0aCsrO1xuICAgICAgfVxuICAgIH1cblxuICAgIG5vZGUgPSBub2RlLnByZXZpb3VzU2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRDb250YWluZXIoY29udGFpbmVyKSB7XG4gIC8vIFJldHJ5IGlmIGFueSBldmVudCByZXBsYXlpbmcgd2FzIGJsb2NrZWQgb24gdGhpcy5cbiAgcmV0cnlJZkJsb2NrZWRPbihjb250YWluZXIpO1xufVxuZnVuY3Rpb24gY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpIHtcbiAgLy8gUmV0cnkgaWYgYW55IGV2ZW50IHJlcGxheWluZyB3YXMgYmxvY2tlZCBvbiB0aGlzLlxuICByZXRyeUlmQmxvY2tlZE9uKHN1c3BlbnNlSW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZENvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvclVubWF0Y2hlZFRleHQodGV4dEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpIHtcbiAge1xuICAgIGlmIChpbnN0YW5jZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVFbGVtZW50KHBhcmVudENvbnRhaW5lciwgaW5zdGFuY2UpO1xuICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSkgOyBlbHNlIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZVRleHQocGFyZW50Q29udGFpbmVyLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RIeWRyYXRlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgIHdhcm5Gb3JEZWxldGVkSHlkcmF0YWJsZUVsZW1lbnQocGFyZW50SW5zdGFuY2UsIGluc3RhbmNlKTtcbiAgICB9IGVsc2UgaWYgKGluc3RhbmNlLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIDsgZWxzZSB7XG4gICAgICB3YXJuRm9yRGVsZXRlZEh5ZHJhdGFibGVUZXh0KHBhcmVudEluc3RhbmNlLCBpbnN0YW5jZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lckluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdHlwZSwgcHJvcHMpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUNvbnRhaW5lclRleHRJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHRleHQpIHtcbiAge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkVGV4dChwYXJlbnRDb250YWluZXIsIHRleHQpO1xuICB9XG59XG5mdW5jdGlvbiBkaWROb3RGaW5kSHlkcmF0YWJsZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdHlwZSwgcHJvcHMpIHtcbiAgaWYgKCBwYXJlbnRQcm9wc1tTVVBQUkVTU19IWURSQVRJT05fV0FSTklORyQxXSAhPT0gdHJ1ZSkge1xuICAgIHdhcm5Gb3JJbnNlcnRlZEh5ZHJhdGVkRWxlbWVudChwYXJlbnRJbnN0YW5jZSwgdHlwZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgdGV4dCkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSB7XG4gICAgd2FybkZvckluc2VydGVkSHlkcmF0ZWRUZXh0KHBhcmVudEluc3RhbmNlLCB0ZXh0KTtcbiAgfVxufVxuZnVuY3Rpb24gZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSkge1xuICBpZiAoIHBhcmVudFByb3BzW1NVUFBSRVNTX0hZRFJBVElPTl9XQVJOSU5HJDFdICE9PSB0cnVlKSA7XG59XG52YXIgY2xpZW50SWQgPSAwO1xuZnVuY3Rpb24gbWFrZUNsaWVudElkSW5ERVYod2Fybk9uQWNjZXNzSW5ERVYpIHtcbiAgdmFyIGlkID0gJ3I6JyArIChjbGllbnRJZCsrKS50b1N0cmluZygzNik7XG4gIHJldHVybiB7XG4gICAgdG9TdHJpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHdhcm5PbkFjY2Vzc0luREVWKCk7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfSxcbiAgICB2YWx1ZU9mOiBmdW5jdGlvbiAoKSB7XG4gICAgICB3YXJuT25BY2Nlc3NJbkRFVigpO1xuICAgICAgcmV0dXJuIGlkO1xuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGlzT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLiQkdHlwZW9mID09PSBSRUFDVF9PUEFRVUVfSURfVFlQRTtcbn1cbmZ1bmN0aW9uIG1ha2VPcGFxdWVIeWRyYXRpbmdPYmplY3QoYXR0ZW1wdFRvUmVhZFZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX09QQVFVRV9JRF9UWVBFLFxuICAgIHRvU3RyaW5nOiBhdHRlbXB0VG9SZWFkVmFsdWUsXG4gICAgdmFsdWVPZjogYXR0ZW1wdFRvUmVhZFZhbHVlXG4gIH07XG59XG5mdW5jdGlvbiBwcmVwYXJlUG9ydGFsTW91bnQocG9ydGFsSW5zdGFuY2UpIHtcbiAge1xuICAgIGxpc3RlblRvQWxsU3VwcG9ydGVkRXZlbnRzKHBvcnRhbEluc3RhbmNlKTtcbiAgfVxufVxuXG52YXIgcmFuZG9tS2V5ID0gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMik7XG52YXIgaW50ZXJuYWxJbnN0YW5jZUtleSA9ICdfX3JlYWN0RmliZXIkJyArIHJhbmRvbUtleTtcbnZhciBpbnRlcm5hbFByb3BzS2V5ID0gJ19fcmVhY3RQcm9wcyQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXkgPSAnX19yZWFjdENvbnRhaW5lciQnICsgcmFuZG9tS2V5O1xudmFyIGludGVybmFsRXZlbnRIYW5kbGVyc0tleSA9ICdfX3JlYWN0RXZlbnRzJCcgKyByYW5kb21LZXk7XG5mdW5jdGlvbiBwcmVjYWNoZUZpYmVyTm9kZShob3N0SW5zdCwgbm9kZSkge1xuICBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldID0gaG9zdEluc3Q7XG59XG5mdW5jdGlvbiBtYXJrQ29udGFpbmVyQXNSb290KGhvc3RSb290LCBub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBob3N0Um9vdDtcbn1cbmZ1bmN0aW9uIHVubWFya0NvbnRhaW5lckFzUm9vdChub2RlKSB7XG4gIG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV0gPSBudWxsO1xufVxuZnVuY3Rpb24gaXNDb250YWluZXJNYXJrZWRBc1Jvb3Qobm9kZSkge1xuICByZXR1cm4gISFub2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldO1xufSAvLyBHaXZlbiBhIERPTSBub2RlLCByZXR1cm4gdGhlIGNsb3Nlc3QgSG9zdENvbXBvbmVudCBvciBIb3N0VGV4dCBmaWJlciBhbmNlc3Rvci5cbi8vIElmIHRoZSB0YXJnZXQgbm9kZSBpcyBwYXJ0IG9mIGEgaHlkcmF0ZWQgb3Igbm90IHlldCByZW5kZXJlZCBzdWJ0cmVlLCB0aGVuXG4vLyB0aGlzIG1heSBhbHNvIHJldHVybiBhIFN1c3BlbnNlQ29tcG9uZW50IG9yIEhvc3RSb290IHRvIGluZGljYXRlIHRoYXQuXG4vLyBDb25jZXB0dWFsbHkgdGhlIEhvc3RSb290IGZpYmVyIGlzIGEgY2hpbGQgb2YgdGhlIENvbnRhaW5lciBub2RlLiBTbyBpZiB5b3Vcbi8vIHBhc3MgdGhlIENvbnRhaW5lciBub2RlIGFzIHRoZSB0YXJnZXROb2RlLCB5b3Ugd2lsbCBub3QgYWN0dWFsbHkgZ2V0IHRoZVxuLy8gSG9zdFJvb3QgYmFjay4gVG8gZ2V0IHRvIHRoZSBIb3N0Um9vdCwgeW91IG5lZWQgdG8gcGFzcyBhIGNoaWxkIG9mIGl0LlxuLy8gVGhlIHNhbWUgdGhpbmcgYXBwbGllcyB0byBTdXNwZW5zZSBib3VuZGFyaWVzLlxuXG5mdW5jdGlvbiBnZXRDbG9zZXN0SW5zdGFuY2VGcm9tTm9kZSh0YXJnZXROb2RlKSB7XG4gIHZhciB0YXJnZXRJbnN0ID0gdGFyZ2V0Tm9kZVtpbnRlcm5hbEluc3RhbmNlS2V5XTtcblxuICBpZiAodGFyZ2V0SW5zdCkge1xuICAgIC8vIERvbid0IHJldHVybiBIb3N0Um9vdCBvciBTdXNwZW5zZUNvbXBvbmVudCBoZXJlLlxuICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICB9IC8vIElmIHRoZSBkaXJlY3QgZXZlbnQgdGFyZ2V0IGlzbid0IGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUsIHdlIG5lZWQgdG8gbG9va1xuICAvLyB0byBzZWUgaWYgb25lIG9mIGl0cyBwYXJlbnRzIGlzIGEgUmVhY3Qgb3duZWQgRE9NIG5vZGUuXG5cblxuICB2YXIgcGFyZW50Tm9kZSA9IHRhcmdldE5vZGUucGFyZW50Tm9kZTtcblxuICB3aGlsZSAocGFyZW50Tm9kZSkge1xuICAgIC8vIFdlJ2xsIGNoZWNrIGlmIHRoaXMgaXMgYSBjb250YWluZXIgcm9vdCB0aGF0IGNvdWxkIGluY2x1ZGVcbiAgICAvLyBSZWFjdCBub2RlcyBpbiB0aGUgZnV0dXJlLiBXZSBuZWVkIHRvIGNoZWNrIHRoaXMgZmlyc3QgYmVjYXVzZVxuICAgIC8vIGlmIHdlJ3JlIGEgY2hpbGQgb2YgYSBkZWh5ZHJhdGVkIGNvbnRhaW5lciwgd2UgbmVlZCB0byBmaXJzdFxuICAgIC8vIGZpbmQgdGhhdCBpbm5lciBjb250YWluZXIgYmVmb3JlIG1vdmluZyBvbiB0byBmaW5kaW5nIHRoZSBwYXJlbnRcbiAgICAvLyBpbnN0YW5jZS4gTm90ZSB0aGF0IHdlIGRvbid0IGNoZWNrIHRoaXMgZmllbGQgb24gIHRoZSB0YXJnZXROb2RlXG4gICAgLy8gaXRzZWxmIGJlY2F1c2UgdGhlIGZpYmVycyBhcmUgY29uY2VwdHVhbGx5IGJldHdlZW4gdGhlIGNvbnRhaW5lclxuICAgIC8vIG5vZGUgYW5kIHRoZSBmaXJzdCBjaGlsZC4gSXQgaXNuJ3Qgc3Vycm91bmRpbmcgdGhlIGNvbnRhaW5lciBub2RlLlxuICAgIC8vIElmIGl0J3Mgbm90IGEgY29udGFpbmVyLCB3ZSBjaGVjayBpZiBpdCdzIGFuIGluc3RhbmNlLlxuICAgIHRhcmdldEluc3QgPSBwYXJlbnROb2RlW2ludGVybmFsQ29udGFpbmVySW5zdGFuY2VLZXldIHx8IHBhcmVudE5vZGVbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICBpZiAodGFyZ2V0SW5zdCkge1xuICAgICAgLy8gU2luY2UgdGhpcyB3YXNuJ3QgdGhlIGRpcmVjdCB0YXJnZXQgb2YgdGhlIGV2ZW50LCB3ZSBtaWdodCBoYXZlXG4gICAgICAvLyBzdGVwcGVkIHBhc3QgZGVoeWRyYXRlZCBET00gbm9kZXMgdG8gZ2V0IGhlcmUuIEhvd2V2ZXIgdGhleSBjb3VsZFxuICAgICAgLy8gYWxzbyBoYXZlIGJlZW4gbm9uLVJlYWN0IG5vZGVzLiBXZSBuZWVkIHRvIGFuc3dlciB3aGljaCBvbmUuXG4gICAgICAvLyBJZiB3ZSB0aGUgaW5zdGFuY2UgZG9lc24ndCBoYXZlIGFueSBjaGlsZHJlbiwgdGhlbiB0aGVyZSBjYW4ndCBiZVxuICAgICAgLy8gYSBuZXN0ZWQgc3VzcGVuc2UgYm91bmRhcnkgd2l0aGluIGl0LiBTbyB3ZSBjYW4gdXNlIHRoaXMgYXMgYSBmYXN0XG4gICAgICAvLyBiYWlsb3V0LiBNb3N0IG9mIHRoZSB0aW1lLCB3aGVuIHBlb3BsZSBhZGQgbm9uLVJlYWN0IGNoaWxkcmVuIHRvXG4gICAgICAvLyB0aGUgdHJlZSwgaXQgaXMgdXNpbmcgYSByZWYgdG8gYSBjaGlsZC1sZXNzIERPTSBub2RlLlxuICAgICAgLy8gTm9ybWFsbHkgd2UnZCBvbmx5IG5lZWQgdG8gY2hlY2sgb25lIG9mIHRoZSBmaWJlcnMgYmVjYXVzZSBpZiBpdFxuICAgICAgLy8gaGFzIGV2ZXIgZ29uZSBmcm9tIGhhdmluZyBjaGlsZHJlbiB0byBkZWxldGluZyB0aGVtIG9yIHZpY2UgdmVyc2FcbiAgICAgIC8vIGl0IHdvdWxkIGhhdmUgZGVsZXRlZCB0aGUgZGVoeWRyYXRlZCBib3VuZGFyeSBuZXN0ZWQgaW5zaWRlIGFscmVhZHkuXG4gICAgICAvLyBIb3dldmVyLCBzaW5jZSB0aGUgSG9zdFJvb3Qgc3RhcnRzIG91dCB3aXRoIGFuIGFsdGVybmF0ZSBpdCBtaWdodFxuICAgICAgLy8gaGF2ZSBvbmUgb24gdGhlIGFsdGVybmF0ZSBzbyB3ZSBuZWVkIHRvIGNoZWNrIGluIGNhc2UgdGhpcyB3YXMgYVxuICAgICAgLy8gcm9vdC5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSB0YXJnZXRJbnN0LmFsdGVybmF0ZTtcblxuICAgICAgaWYgKHRhcmdldEluc3QuY2hpbGQgIT09IG51bGwgfHwgYWx0ZXJuYXRlICE9PSBudWxsICYmIGFsdGVybmF0ZS5jaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBOZXh0IHdlIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGUgbm9kZSB0aGF0IHNraXBwZWQgcGFzdCBpc1xuICAgICAgICAvLyBuZXN0ZWQgd2l0aGluIGEgZGVoeWRyYXRlZCBib3VuZGFyeSBhbmQgaWYgc28sIHdoaWNoIG9uZS5cbiAgICAgICAgdmFyIHN1c3BlbnNlSW5zdGFuY2UgPSBnZXRQYXJlbnRTdXNwZW5zZUluc3RhbmNlKHRhcmdldE5vZGUpO1xuXG4gICAgICAgIHdoaWxlIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UgZm91bmQgYSBzdXNwZW5zZSBpbnN0YW5jZS4gVGhhdCBtZWFucyB0aGF0IHdlIGhhdmVuJ3RcbiAgICAgICAgICAvLyBoeWRyYXRlZCBpdCB5ZXQuIEV2ZW4gdGhvdWdoIHdlIGxlYXZlIHRoZSBjb21tZW50cyBpbiB0aGVcbiAgICAgICAgICAvLyBET00gYWZ0ZXIgaHlkcmF0aW5nLCBhbmQgdGhlcmUgYXJlIGJvdW5kYXJpZXMgaW4gdGhlIERPTVxuICAgICAgICAgIC8vIHRoYXQgY291bGQgYWxyZWFkeSBiZSBoeWRyYXRlZCwgd2Ugd291bGRuJ3QgaGF2ZSBmb3VuZCB0aGVtXG4gICAgICAgICAgLy8gdGhyb3VnaCB0aGlzIHBhc3Mgc2luY2UgaWYgdGhlIHRhcmdldCBpcyBoeWRyYXRlZCBpdCB3b3VsZFxuICAgICAgICAgIC8vIGhhdmUgaGFkIGFuIGludGVybmFsSW5zdGFuY2VLZXkgb24gaXQuXG4gICAgICAgICAgLy8gTGV0J3MgZ2V0IHRoZSBmaWJlciBhc3NvY2lhdGVkIHdpdGggdGhlIFN1c3BlbnNlQ29tcG9uZW50XG4gICAgICAgICAgLy8gYXMgdGhlIGRlZXBlc3QgaW5zdGFuY2UuXG4gICAgICAgICAgdmFyIHRhcmdldFN1c3BlbnNlSW5zdCA9IHN1c3BlbnNlSW5zdGFuY2VbaW50ZXJuYWxJbnN0YW5jZUtleV07XG5cbiAgICAgICAgICBpZiAodGFyZ2V0U3VzcGVuc2VJbnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gdGFyZ2V0U3VzcGVuc2VJbnN0O1xuICAgICAgICAgIH0gLy8gSWYgd2UgZG9uJ3QgZmluZCBhIEZpYmVyIG9uIHRoZSBjb21tZW50LCBpdCBtaWdodCBiZSBiZWNhdXNlXG4gICAgICAgICAgLy8gd2UgaGF2ZW4ndCBnb3R0ZW4gdG8gaHlkcmF0ZSBpdCB5ZXQuIFRoZXJlIG1pZ2h0IHN0aWxsIGJlIGFcbiAgICAgICAgICAvLyBwYXJlbnQgYm91bmRhcnkgdGhhdCBoYXNuJ3QgYWJvdmUgdGhpcyBvbmUgc28gd2UgbmVlZCB0byBmaW5kXG4gICAgICAgICAgLy8gdGhlIG91dGVyIG1vc3QgdGhhdCBpcyBrbm93bi5cblxuXG4gICAgICAgICAgc3VzcGVuc2VJbnN0YW5jZSA9IGdldFBhcmVudFN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7IC8vIElmIHdlIGRvbid0IGZpbmQgb25lLCB0aGVuIHRoYXQgc2hvdWxkIG1lYW4gdGhhdCB0aGUgcGFyZW50XG4gICAgICAgICAgLy8gaG9zdCBjb21wb25lbnQgYWxzbyBoYXNuJ3QgaHlkcmF0ZWQgeWV0LiBXZSBjYW4gcmV0dXJuIGl0XG4gICAgICAgICAgLy8gYmVsb3cgc2luY2UgaXQgd2lsbCBiYWlsIG91dCBvbiB0aGUgaXNNb3VudGVkIGNoZWNrIGxhdGVyLlxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YXJnZXRJbnN0O1xuICAgIH1cblxuICAgIHRhcmdldE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIHBhcmVudE5vZGUgPSB0YXJnZXROb2RlLnBhcmVudE5vZGU7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBET00gbm9kZSwgcmV0dXJuIHRoZSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnRcbiAqIGluc3RhbmNlLCBvciBudWxsIGlmIHRoZSBub2RlIHdhcyBub3QgcmVuZGVyZWQgYnkgdGhpcyBSZWFjdC5cbiAqL1xuXG5mdW5jdGlvbiBnZXRJbnN0YW5jZUZyb21Ob2RlKG5vZGUpIHtcbiAgdmFyIGluc3QgPSBub2RlW2ludGVybmFsSW5zdGFuY2VLZXldIHx8IG5vZGVbaW50ZXJuYWxDb250YWluZXJJbnN0YW5jZUtleV07XG5cbiAgaWYgKGluc3QpIHtcbiAgICBpZiAoaW5zdC50YWcgPT09IEhvc3RDb21wb25lbnQgfHwgaW5zdC50YWcgPT09IEhvc3RUZXh0IHx8IGluc3QudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFJvb3QpIHtcbiAgICAgIHJldHVybiBpbnN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2l2ZW4gYSBSZWFjdERPTUNvbXBvbmVudCBvciBSZWFjdERPTVRleHRDb21wb25lbnQsIHJldHVybiB0aGUgY29ycmVzcG9uZGluZ1xuICogRE9NIG5vZGUuXG4gKi9cblxuZnVuY3Rpb24gZ2V0Tm9kZUZyb21JbnN0YW5jZShpbnN0KSB7XG4gIGlmIChpbnN0LnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBpbnN0LnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAvLyBJbiBGaWJlciB0aGlzLCBpcyBqdXN0IHRoZSBzdGF0ZSBub2RlIHJpZ2h0IG5vdy4gV2UgYXNzdW1lIGl0IHdpbGwgYmVcbiAgICAvLyBhIGhvc3QgY29tcG9uZW50IG9yIGhvc3QgdGV4dC5cbiAgICByZXR1cm4gaW5zdC5zdGF0ZU5vZGU7XG4gIH0gLy8gV2l0aG91dCB0aGlzIGZpcnN0IGludmFyaWFudCwgcGFzc2luZyBhIG5vbi1ET00tY29tcG9uZW50IHRyaWdnZXJzIHRoZSBuZXh0XG4gIC8vIGludmFyaWFudCBmb3IgYSBtaXNzaW5nIHBhcmVudCwgd2hpY2ggaXMgc3VwZXIgY29uZnVzaW5nLlxuXG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcImdldE5vZGVGcm9tSW5zdGFuY2U6IEludmFsaWQgYXJndW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZpYmVyQ3VycmVudFByb3BzRnJvbU5vZGUobm9kZSkge1xuICByZXR1cm4gbm9kZVtpbnRlcm5hbFByb3BzS2V5XSB8fCBudWxsO1xufVxuZnVuY3Rpb24gdXBkYXRlRmliZXJQcm9wcyhub2RlLCBwcm9wcykge1xuICBub2RlW2ludGVybmFsUHJvcHNLZXldID0gcHJvcHM7XG59XG5mdW5jdGlvbiBnZXRFdmVudExpc3RlbmVyU2V0KG5vZGUpIHtcbiAgdmFyIGVsZW1lbnRMaXN0ZW5lclNldCA9IG5vZGVbaW50ZXJuYWxFdmVudEhhbmRsZXJzS2V5XTtcblxuICBpZiAoZWxlbWVudExpc3RlbmVyU2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbGVtZW50TGlzdGVuZXJTZXQgPSBub2RlW2ludGVybmFsRXZlbnRIYW5kbGVyc0tleV0gPSBuZXcgU2V0KCk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudExpc3RlbmVyU2V0O1xufVxuXG52YXIgbG9nZ2VkVHlwZUZhaWx1cmVzID0ge307XG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCkge1xuICB7XG4gICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgIHZhciBvd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgZWxlbWVudC5fc291cmNlLCBvd25lciA/IG93bmVyLnR5cGUgOiBudWxsKTtcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMS5zZXRFeHRyYVN0YWNrRnJhbWUoc3RhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja1Byb3BUeXBlcyh0eXBlU3BlY3MsIHZhbHVlcywgbG9jYXRpb24sIGNvbXBvbmVudE5hbWUsIGVsZW1lbnQpIHtcbiAge1xuICAgIC8vICRGbG93Rml4TWUgVGhpcyBpcyBva2F5IGJ1dCBGbG93IGRvZXNuJ3Qga25vdyBpdC5cbiAgICB2YXIgaGFzID0gRnVuY3Rpb24uY2FsbC5iaW5kKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG4gICAgZm9yICh2YXIgdHlwZVNwZWNOYW1lIGluIHR5cGVTcGVjcykge1xuICAgICAgaWYgKGhhcyh0eXBlU3BlY3MsIHR5cGVTcGVjTmFtZSkpIHtcbiAgICAgICAgdmFyIGVycm9yJDEgPSB2b2lkIDA7IC8vIFByb3AgdHlwZSB2YWxpZGF0aW9uIG1heSB0aHJvdy4gSW4gY2FzZSB0aGV5IGRvLCB3ZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIGZhaWwgdGhlIHJlbmRlciBwaGFzZSB3aGVyZSBpdCBkaWRuJ3QgZmFpbCBiZWZvcmUuIFNvIHdlIGxvZyBpdC5cbiAgICAgICAgLy8gQWZ0ZXIgdGhlc2UgaGF2ZSBiZWVuIGNsZWFuZWQgdXAsIHdlJ2xsIGxldCB0aGVtIHRocm93LlxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBpbnRlbnRpb25hbGx5IGFuIGludmFyaWFudCB0aGF0IGdldHMgY2F1Z2h0LiBJdCdzIHRoZSBzYW1lXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYXMgd2l0aG91dCB0aGlzIHN0YXRlbWVudCBleGNlcHQgd2l0aCBhIGJldHRlciBtZXNzYWdlLlxuICAgICAgICAgIGlmICh0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBFcnJvcigoY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnKSArICc6ICcgKyBsb2NhdGlvbiArICcgdHlwZSBgJyArIHR5cGVTcGVjTmFtZSArICdgIGlzIGludmFsaWQ7ICcgKyAnaXQgbXVzdCBiZSBhIGZ1bmN0aW9uLCB1c3VhbGx5IGZyb20gdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLCBidXQgcmVjZWl2ZWQgYCcgKyB0eXBlb2YgdHlwZVNwZWNzW3R5cGVTcGVjTmFtZV0gKyAnYC4nICsgJ1RoaXMgb2Z0ZW4gaGFwcGVucyBiZWNhdXNlIG9mIHR5cG9zIHN1Y2ggYXMgYFByb3BUeXBlcy5mdW5jdGlvbmAgaW5zdGVhZCBvZiBgUHJvcFR5cGVzLmZ1bmNgLicpO1xuICAgICAgICAgICAgZXJyLm5hbWUgPSAnSW52YXJpYW50IFZpb2xhdGlvbic7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZXJyb3IkMSA9IHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdKHZhbHVlcywgdHlwZVNwZWNOYW1lLCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgbnVsbCwgJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJyk7XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgZXJyb3IkMSA9IGV4O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgJiYgIShlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IpKSB7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignJXM6IHR5cGUgc3BlY2lmaWNhdGlvbiBvZiAlcycgKyAnIGAlc2AgaXMgaW52YWxpZDsgdGhlIHR5cGUgY2hlY2tlciAnICsgJ2Z1bmN0aW9uIG11c3QgcmV0dXJuIGBudWxsYCBvciBhbiBgRXJyb3JgIGJ1dCByZXR1cm5lZCBhICVzLiAnICsgJ1lvdSBtYXkgaGF2ZSBmb3Jnb3R0ZW4gdG8gcGFzcyBhbiBhcmd1bWVudCB0byB0aGUgdHlwZSBjaGVja2VyICcgKyAnY3JlYXRvciAoYXJyYXlPZiwgaW5zdGFuY2VPZiwgb2JqZWN0T2YsIG9uZU9mLCBvbmVPZlR5cGUsIGFuZCAnICsgJ3NoYXBlIGFsbCByZXF1aXJlIGFuIGFyZ3VtZW50KS4nLCBjb21wb25lbnROYW1lIHx8ICdSZWFjdCBjbGFzcycsIGxvY2F0aW9uLCB0eXBlU3BlY05hbWUsIHR5cGVvZiBlcnJvciQxKTtcblxuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yJDEgaW5zdGFuY2VvZiBFcnJvciAmJiAhKGVycm9yJDEubWVzc2FnZSBpbiBsb2dnZWRUeXBlRmFpbHVyZXMpKSB7XG4gICAgICAgICAgLy8gT25seSBtb25pdG9yIHRoaXMgZmFpbHVyZSBvbmNlIGJlY2F1c2UgdGhlcmUgdGVuZHMgdG8gYmUgYSBsb3Qgb2YgdGhlXG4gICAgICAgICAgLy8gc2FtZSBlcnJvci5cbiAgICAgICAgICBsb2dnZWRUeXBlRmFpbHVyZXNbZXJyb3IkMS5tZXNzYWdlXSA9IHRydWU7XG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICBlcnJvcignRmFpbGVkICVzIHR5cGU6ICVzJywgbG9jYXRpb24sIGVycm9yJDEubWVzc2FnZSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgdmFsdWVTdGFjayA9IFtdO1xudmFyIGZpYmVyU3RhY2s7XG5cbntcbiAgZmliZXJTdGFjayA9IFtdO1xufVxuXG52YXIgaW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY3JlYXRlQ3Vyc29yKGRlZmF1bHRWYWx1ZSkge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICB9O1xufVxuXG5mdW5jdGlvbiBwb3AoY3Vyc29yLCBmaWJlcikge1xuICBpZiAoaW5kZXggPCAwKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1VuZXhwZWN0ZWQgcG9wLicpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHtcbiAgICBpZiAoZmliZXIgIT09IGZpYmVyU3RhY2tbaW5kZXhdKSB7XG4gICAgICBlcnJvcignVW5leHBlY3RlZCBGaWJlciBwb3BwZWQuJyk7XG4gICAgfVxuICB9XG5cbiAgY3Vyc29yLmN1cnJlbnQgPSB2YWx1ZVN0YWNrW2luZGV4XTtcbiAgdmFsdWVTdGFja1tpbmRleF0gPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlclN0YWNrW2luZGV4XSA9IG51bGw7XG4gIH1cblxuICBpbmRleC0tO1xufVxuXG5mdW5jdGlvbiBwdXNoKGN1cnNvciwgdmFsdWUsIGZpYmVyKSB7XG4gIGluZGV4Kys7XG4gIHZhbHVlU3RhY2tbaW5kZXhdID0gY3Vyc29yLmN1cnJlbnQ7XG5cbiAge1xuICAgIGZpYmVyU3RhY2tbaW5kZXhdID0gZmliZXI7XG4gIH1cblxuICBjdXJzb3IuY3VycmVudCA9IHZhbHVlO1xufVxuXG52YXIgd2FybmVkQWJvdXRNaXNzaW5nR2V0Q2hpbGRDb250ZXh0O1xuXG57XG4gIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dCA9IHt9O1xufVxuXG52YXIgZW1wdHlDb250ZXh0T2JqZWN0ID0ge307XG5cbntcbiAgT2JqZWN0LmZyZWV6ZShlbXB0eUNvbnRleHRPYmplY3QpO1xufSAvLyBBIGN1cnNvciB0byB0aGUgY3VycmVudCBtZXJnZWQgY29udGV4dCBvYmplY3Qgb24gdGhlIHN0YWNrLlxuXG5cbnZhciBjb250ZXh0U3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZW1wdHlDb250ZXh0T2JqZWN0KTsgLy8gQSBjdXJzb3IgdG8gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgY29udGV4dCBoYXMgY2hhbmdlZC5cblxudmFyIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IgPSBjcmVhdGVDdXJzb3IoZmFsc2UpOyAvLyBLZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyBjb250ZXh0IG9iamVjdCB0aGF0IHdhcyBvbiB0aGUgc3RhY2suXG4vLyBXZSB1c2UgdGhpcyB0byBnZXQgYWNjZXNzIHRvIHRoZSBwYXJlbnQgY29udGV4dCBhZnRlciB3ZSBoYXZlIGFscmVhZHlcbi8vIHB1c2hlZCB0aGUgbmV4dCBjb250ZXh0IHByb3ZpZGVyLCBhbmQgbm93IG5lZWQgdG8gbWVyZ2UgdGhlaXIgY29udGV4dHMuXG5cbnZhciBwcmV2aW91c0NvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbmZ1bmN0aW9uIGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIpIHtcbiAge1xuICAgIGlmIChkaWRQdXNoT3duQ29udGV4dElmUHJvdmlkZXIgJiYgaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgLy8gSWYgdGhlIGZpYmVyIGlzIGEgY29udGV4dCBwcm92aWRlciBpdHNlbGYsIHdoZW4gd2UgcmVhZCBpdHMgY29udGV4dFxuICAgICAgLy8gd2UgbWF5IGhhdmUgYWxyZWFkeSBwdXNoZWQgaXRzIG93biBjaGlsZCBjb250ZXh0IG9uIHRoZSBzdGFjay4gQSBjb250ZXh0XG4gICAgICAvLyBwcm92aWRlciBzaG91bGQgbm90IFwic2VlXCIgaXRzIG93biBjaGlsZCBjb250ZXh0LiBUaGVyZWZvcmUgd2UgcmVhZCB0aGVcbiAgICAgIC8vIHByZXZpb3VzIChwYXJlbnQpIGNvbnRleHQgaW5zdGVhZCBmb3IgYSBjb250ZXh0IHByb3ZpZGVyLlxuICAgICAgcmV0dXJuIHByZXZpb3VzQ29udGV4dDtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIG1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0ID0gdW5tYXNrZWRDb250ZXh0O1xuICAgIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0ID0gbWFza2VkQ29udGV4dDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICB2YXIgY29udGV4dFR5cGVzID0gdHlwZS5jb250ZXh0VHlwZXM7XG5cbiAgICBpZiAoIWNvbnRleHRUeXBlcykge1xuICAgICAgcmV0dXJuIGVtcHR5Q29udGV4dE9iamVjdDtcbiAgICB9IC8vIEF2b2lkIHJlY3JlYXRpbmcgbWFza2VkIGNvbnRleHQgdW5sZXNzIHVubWFza2VkIGNvbnRleHQgaGFzIGNoYW5nZWQuXG4gICAgLy8gRmFpbGluZyB0byBkbyB0aGlzIHdpbGwgcmVzdWx0IGluIHVubmVjZXNzYXJ5IGNhbGxzIHRvIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuXG4gICAgLy8gVGhpcyBtYXkgdHJpZ2dlciBpbmZpbml0ZSBsb29wcyBpZiBjb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGNhbGxzIHNldFN0YXRlLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dCA9PT0gdW5tYXNrZWRDb250ZXh0KSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHQgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjb250ZXh0VHlwZXMpIHtcbiAgICAgIGNvbnRleHRba2V5XSA9IHVubWFza2VkQ29udGV4dFtrZXldO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjb250ZXh0VHlwZXMsIGNvbnRleHQsICdjb250ZXh0JywgbmFtZSk7XG4gICAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gICAgLy8gQ29udGV4dCBpcyBjcmVhdGVkIGJlZm9yZSB0aGUgY2xhc3MgY29tcG9uZW50IGlzIGluc3RhbnRpYXRlZCBzbyBjaGVjayBmb3IgaW5zdGFuY2UuXG5cblxuICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgY2FjaGVDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZXh0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhc0NvbnRleHRDaGFuZ2VkKCkge1xuICB7XG4gICAgcmV0dXJuIGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcih0eXBlKSB7XG4gIHtcbiAgICB2YXIgY2hpbGRDb250ZXh0VHlwZXMgPSB0eXBlLmNoaWxkQ29udGV4dFR5cGVzO1xuICAgIHJldHVybiBjaGlsZENvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjaGlsZENvbnRleHRUeXBlcyAhPT0gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcENvbnRleHQoZmliZXIpIHtcbiAge1xuICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBmaWJlcik7XG4gICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgZmliZXIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlcikge1xuICB7XG4gICAgcG9wKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGZpYmVyKTtcbiAgICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVzaFRvcExldmVsQ29udGV4dE9iamVjdChmaWJlciwgY29udGV4dCwgZGlkQ2hhbmdlKSB7XG4gIHtcbiAgICBpZiAoIShjb250ZXh0U3RhY2tDdXJzb3IuY3VycmVudCA9PT0gZW1wdHlDb250ZXh0T2JqZWN0KSkge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJVbmV4cGVjdGVkIGNvbnRleHQgZm91bmQgb24gc3RhY2suIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciwgY29udGV4dCwgZmliZXIpO1xuICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCBmaWJlcik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgdHlwZSwgcGFyZW50Q29udGV4dCkge1xuICB7XG4gICAgdmFyIGluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICAgIHZhciBjaGlsZENvbnRleHRUeXBlcyA9IHR5cGUuY2hpbGRDb250ZXh0VHlwZXM7IC8vIFRPRE8gKGJ2YXVnaG4pIFJlcGxhY2UgdGhpcyBiZWhhdmlvciB3aXRoIGFuIGludmFyaWFudCgpIGluIHRoZSBmdXR1cmUuXG4gICAgLy8gSXQgaGFzIG9ubHkgYmVlbiBhZGRlZCBpbiBGaWJlciB0byBtYXRjaCB0aGUgKHVuaW50ZW50aW9uYWwpIGJlaGF2aW9yIGluIFN0YWNrLlxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJztcblxuICAgICAgICBpZiAoIXdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHdhcm5lZEFib3V0TWlzc2luZ0dldENoaWxkQ29udGV4dFtjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcignJXMuY2hpbGRDb250ZXh0VHlwZXMgaXMgc3BlY2lmaWVkIGJ1dCB0aGVyZSBpcyBubyBnZXRDaGlsZENvbnRleHQoKSBtZXRob2QgJyArICdvbiB0aGUgaW5zdGFuY2UuIFlvdSBjYW4gZWl0aGVyIGRlZmluZSBnZXRDaGlsZENvbnRleHQoKSBvbiAlcyBvciByZW1vdmUgJyArICdjaGlsZENvbnRleHRUeXBlcyBmcm9tIGl0LicsIGNvbXBvbmVudE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJlbnRDb250ZXh0O1xuICAgIH1cblxuICAgIHZhciBjaGlsZENvbnRleHQgPSBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQoKTtcblxuICAgIGZvciAodmFyIGNvbnRleHRLZXkgaW4gY2hpbGRDb250ZXh0KSB7XG4gICAgICBpZiAoIShjb250ZXh0S2V5IGluIGNoaWxkQ29udGV4dFR5cGVzKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHR5cGUpIHx8ICdVbmtub3duJykgKyBcIi5nZXRDaGlsZENvbnRleHQoKToga2V5IFxcXCJcIiArIGNvbnRleHRLZXkgKyBcIlxcXCIgaXMgbm90IGRlZmluZWQgaW4gY2hpbGRDb250ZXh0VHlwZXMuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB8fCAnVW5rbm93bic7XG4gICAgICBjaGVja1Byb3BUeXBlcyhjaGlsZENvbnRleHRUeXBlcywgY2hpbGRDb250ZXh0LCAnY2hpbGQgY29udGV4dCcsIG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBfYXNzaWduKHt9LCBwYXJlbnRDb250ZXh0LCBjaGlsZENvbnRleHQpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTsgLy8gV2UgcHVzaCB0aGUgY29udGV4dCBhcyBlYXJseSBhcyBwb3NzaWJsZSB0byBlbnN1cmUgc3RhY2sgaW50ZWdyaXR5LlxuICAgIC8vIElmIHRoZSBpbnN0YW5jZSBkb2VzIG5vdCBleGlzdCB5ZXQsIHdlIHdpbGwgcHVzaCBudWxsIGF0IGZpcnN0LFxuICAgIC8vIGFuZCByZXBsYWNlIGl0IG9uIHRoZSBzdGFjayBsYXRlciB3aGVuIGludmFsaWRhdGluZyB0aGUgY29udGV4dC5cblxuICAgIHZhciBtZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dCA9IGluc3RhbmNlICYmIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0IHx8IGVtcHR5Q29udGV4dE9iamVjdDsgLy8gUmVtZW1iZXIgdGhlIHBhcmVudCBjb250ZXh0IHNvIHdlIGNhbiBtZXJnZSB3aXRoIGl0IGxhdGVyLlxuICAgIC8vIEluaGVyaXQgdGhlIHBhcmVudCdzIGRpZC1wZXJmb3JtLXdvcmsgdmFsdWUgdG8gYXZvaWQgaW5hZHZlcnRlbnRseSBibG9ja2luZyB1cGRhdGVzLlxuXG4gICAgcHJldmlvdXNDb250ZXh0ID0gY29udGV4dFN0YWNrQ3Vyc29yLmN1cnJlbnQ7XG4gICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgcHVzaChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCBkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLmN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCB0eXBlLCBkaWRDaGFuZ2UpIHtcbiAge1xuICAgIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICAgIGlmICghaW5zdGFuY2UpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhbiBpbnN0YW5jZSBieSB0aGlzIHBvaW50LiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRpZENoYW5nZSkge1xuICAgICAgLy8gTWVyZ2UgcGFyZW50IGFuZCBvd24gY29udGV4dC5cbiAgICAgIC8vIFNraXAgdGhpcyBpZiB3ZSdyZSBub3QgdXBkYXRpbmcgZHVlIHRvIHNDVS5cbiAgICAgIC8vIFRoaXMgYXZvaWRzIHVubmVjZXNzYXJpbHkgcmVjb21wdXRpbmcgbWVtb2l6ZWQgdmFsdWVzLlxuICAgICAgdmFyIG1lcmdlZENvbnRleHQgPSBwcm9jZXNzQ2hpbGRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB0eXBlLCBwcmV2aW91c0NvbnRleHQpO1xuICAgICAgaW5zdGFuY2UuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQgPSBtZXJnZWRDb250ZXh0OyAvLyBSZXBsYWNlIHRoZSBvbGQgKG9yIGVtcHR5KSBjb250ZXh0IHdpdGggdGhlIG5ldyBvbmUuXG4gICAgICAvLyBJdCBpcyBpbXBvcnRhbnQgdG8gdW53aW5kIHRoZSBjb250ZXh0IGluIHRoZSByZXZlcnNlIG9yZGVyLlxuXG4gICAgICBwb3AoZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcG9wKGNvbnRleHRTdGFja0N1cnNvciwgd29ya0luUHJvZ3Jlc3MpOyAvLyBOb3cgcHVzaCB0aGUgbmV3IGNvbnRleHQgYW5kIG1hcmsgdGhhdCBpdCBoYXMgY2hhbmdlZC5cblxuICAgICAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IsIG1lcmdlZENvbnRleHQsIHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHB1c2goZGlkUGVyZm9ybVdvcmtTdGFja0N1cnNvciwgZGlkQ2hhbmdlLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBvcChkaWRQZXJmb3JtV29ya1N0YWNrQ3Vyc29yLCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICBwdXNoKGRpZFBlcmZvcm1Xb3JrU3RhY2tDdXJzb3IsIGRpZENoYW5nZSwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcikge1xuICB7XG4gICAgLy8gQ3VycmVudGx5IHRoaXMgaXMgb25seSB1c2VkIHdpdGggcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7IG5vdCBzdXJlIGlmIGl0XG4gICAgLy8gbWFrZXMgc2Vuc2UgZWxzZXdoZXJlXG4gICAgaWYgKCEoaXNGaWJlck1vdW50ZWQoZmliZXIpICYmIGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpKSB7XG4gICAgICB7XG4gICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHN1YnRyZWUgcGFyZW50IHRvIGJlIGEgbW91bnRlZCBjbGFzcyBjb21wb25lbnQuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgc3dpdGNoIChub2RlLnRhZykge1xuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIHJldHVybiBub2RlLnN0YXRlTm9kZS5jb250ZXh0O1xuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIENvbXBvbmVudCA9IG5vZGUudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9IHdoaWxlIChub2RlICE9PSBudWxsKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiRm91bmQgdW5leHBlY3RlZCBkZXRhY2hlZCBzdWJ0cmVlIHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgTGVnYWN5Um9vdCA9IDA7XG52YXIgQmxvY2tpbmdSb290ID0gMTtcbnZhciBDb25jdXJyZW50Um9vdCA9IDI7XG5cbnZhciByZW5kZXJlcklEID0gbnVsbDtcbnZhciBpbmplY3RlZEhvb2sgPSBudWxsO1xudmFyIGhhc0xvZ2dlZEVycm9yID0gZmFsc2U7XG52YXIgaXNEZXZUb29sc1ByZXNlbnQgPSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICE9PSAndW5kZWZpbmVkJztcbmZ1bmN0aW9uIGluamVjdEludGVybmFscyhpbnRlcm5hbHMpIHtcbiAgaWYgKHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gTm8gRGV2VG9vbHNcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgaG9vayA9IF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICBpZiAoaG9vay5pc0Rpc2FibGVkKSB7XG4gICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAvLyBvZiBEZXZUb29scyBpbnRlZ3JhdGlvbiBhbmQgYXNzb2NpYXRlZCB3YXJuaW5ncyBhbmQgbG9ncy5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzM4NzdcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICghaG9vay5zdXBwb3J0c0ZpYmVyKSB7XG4gICAge1xuICAgICAgZXJyb3IoJ1RoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiBSZWFjdCBEZXZUb29scyBpcyB0b28gb2xkIGFuZCB3aWxsIG5vdCB3b3JrICcgKyAnd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFJlYWN0LiBQbGVhc2UgdXBkYXRlIFJlYWN0IERldlRvb2xzLiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scycpO1xuICAgIH0gLy8gRGV2VG9vbHMgZXhpc3RzLCBldmVuIHRob3VnaCBpdCBkb2Vzbid0IHN1cHBvcnQgRmliZXIuXG5cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZW5kZXJlcklEID0gaG9vay5pbmplY3QoaW50ZXJuYWxzKTsgLy8gV2UgaGF2ZSBzdWNjZXNzZnVsbHkgaW5qZWN0ZWQsIHNvIG5vdyBpdCBpcyBzYWZlIHRvIHNldCB1cCBob29rcy5cblxuICAgIGluamVjdGVkSG9vayA9IGhvb2s7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIENhdGNoIGFsbCBlcnJvcnMgYmVjYXVzZSBpdCBpcyB1bnNhZmUgdG8gdGhyb3cgZHVyaW5nIGluaXRpYWxpemF0aW9uLlxuICAgIHtcbiAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzLicsIGVycik7XG4gICAgfVxuICB9IC8vIERldlRvb2xzIGV4aXN0c1xuXG5cbiAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiBvblNjaGVkdWxlUm9vdChyb290LCBjaGlsZHJlbikge1xuICB7XG4gICAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vblNjaGVkdWxlRmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIGNoaWxkcmVuKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoICFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRSb290KHJvb3QsIHByaW9yaXR5TGV2ZWwpIHtcbiAgaWYgKGluamVjdGVkSG9vayAmJiB0eXBlb2YgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBkaWRFcnJvciA9IChyb290LmN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSA9PT0gRGlkQ2FwdHVyZTtcblxuICAgICAgaWYgKGVuYWJsZVByb2ZpbGVyVGltZXIpIHtcbiAgICAgICAgaW5qZWN0ZWRIb29rLm9uQ29tbWl0RmliZXJSb290KHJlbmRlcmVySUQsIHJvb3QsIHByaW9yaXR5TGV2ZWwsIGRpZEVycm9yKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyUm9vdChyZW5kZXJlcklELCByb290LCB1bmRlZmluZWQsIGRpZEVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFoYXNMb2dnZWRFcnJvcikge1xuICAgICAgICAgIGhhc0xvZ2dlZEVycm9yID0gdHJ1ZTtcblxuICAgICAgICAgIGVycm9yKCdSZWFjdCBpbnN0cnVtZW50YXRpb24gZW5jb3VudGVyZWQgYW4gZXJyb3I6ICVzJywgZXJyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gb25Db21taXRVbm1vdW50KGZpYmVyKSB7XG4gIGlmIChpbmplY3RlZEhvb2sgJiYgdHlwZW9mIGluamVjdGVkSG9vay5vbkNvbW1pdEZpYmVyVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICBpbmplY3RlZEhvb2sub25Db21taXRGaWJlclVubW91bnQocmVuZGVyZXJJRCwgZmliZXIpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAge1xuICAgICAgICBpZiAoIWhhc0xvZ2dlZEVycm9yKSB7XG4gICAgICAgICAgaGFzTG9nZ2VkRXJyb3IgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlYWN0IGluc3RydW1lbnRhdGlvbiBlbmNvdW50ZXJlZCBhbiBlcnJvcjogJXMnLCBlcnIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTY2hlZHVsZXJfcnVuV2l0aFByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrLFxuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayA9IFNjaGVkdWxlci51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayxcbiAgICBTY2hlZHVsZXJfc2hvdWxkWWllbGQgPSBTY2hlZHVsZXIudW5zdGFibGVfc2hvdWxkWWllbGQsXG4gICAgU2NoZWR1bGVyX3JlcXVlc3RQYWludCA9IFNjaGVkdWxlci51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsXG4gICAgU2NoZWR1bGVyX25vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdyxcbiAgICBTY2hlZHVsZXJfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwgPSBTY2hlZHVsZXIudW5zdGFibGVfZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwsXG4gICAgU2NoZWR1bGVyX0ltbWVkaWF0ZVByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFNjaGVkdWxlci51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSxcbiAgICBTY2hlZHVsZXJfTm9ybWFsUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfTm9ybWFsUHJpb3JpdHksXG4gICAgU2NoZWR1bGVyX0xvd1ByaW9yaXR5ID0gU2NoZWR1bGVyLnVuc3RhYmxlX0xvd1ByaW9yaXR5LFxuICAgIFNjaGVkdWxlcl9JZGxlUHJpb3JpdHkgPSBTY2hlZHVsZXIudW5zdGFibGVfSWRsZVByaW9yaXR5O1xuXG57XG4gIC8vIFByb3ZpZGUgZXhwbGljaXQgZXJyb3IgbWVzc2FnZSB3aGVuIHByb2R1Y3Rpb24rcHJvZmlsaW5nIGJ1bmRsZSBvZiBlLmcuXG4gIC8vIHJlYWN0LWRvbSBpcyB1c2VkIHdpdGggcHJvZHVjdGlvbiAobm9uLXByb2ZpbGluZykgYnVuZGxlIG9mXG4gIC8vIHNjaGVkdWxlci90cmFjaW5nXG4gIGlmICghKHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYgIT0gbnVsbCAmJiB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgIT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIHJ1biB0aGUgcHJvZmlsaW5nIHZlcnNpb24gb2YgYSByZW5kZXJlciAoZm9yIGV4YW1wbGUsIGByZWFjdC1kb20vcHJvZmlsaW5nYCkgd2l0aG91dCBhbHNvIHJlcGxhY2luZyB0aGUgYHNjaGVkdWxlci90cmFjaW5nYCBtb2R1bGUgd2l0aCBgc2NoZWR1bGVyL3RyYWNpbmctcHJvZmlsaW5nYC4gWW91ciBidW5kbGVyIG1pZ2h0IGhhdmUgYSBzZXR0aW5nIGZvciBhbGlhc2luZyBib3RoIG1vZHVsZXMuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Byb2ZpbGluZ1wiICk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlQ2FsbGJhY2tOb2RlID0ge307IC8vIEV4Y2VwdCBmb3IgTm9Qcmlvcml0eSwgdGhlc2UgY29ycmVzcG9uZCB0byBTY2hlZHVsZXIgcHJpb3JpdGllcy4gV2UgdXNlXG4vLyBhc2NlbmRpbmcgbnVtYmVycyBzbyB3ZSBjYW4gY29tcGFyZSB0aGVtIGxpa2UgbnVtYmVycy4gVGhleSBzdGFydCBhdCA5MCB0b1xuLy8gYXZvaWQgY2xhc2hpbmcgd2l0aCBTY2hlZHVsZXIncyBwcmlvcml0aWVzLlxuXG52YXIgSW1tZWRpYXRlUHJpb3JpdHkkMSA9IDk5O1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgPSA5ODtcbnZhciBOb3JtYWxQcmlvcml0eSQxID0gOTc7XG52YXIgTG93UHJpb3JpdHkkMSA9IDk2O1xudmFyIElkbGVQcmlvcml0eSQxID0gOTU7IC8vIE5vUHJpb3JpdHkgaXMgdGhlIGFic2VuY2Ugb2YgcHJpb3JpdHkuIEFsc28gUmVhY3Qtb25seS5cblxudmFyIE5vUHJpb3JpdHkkMSA9IDkwO1xudmFyIHNob3VsZFlpZWxkID0gU2NoZWR1bGVyX3Nob3VsZFlpZWxkO1xudmFyIHJlcXVlc3RQYWludCA9IC8vIEZhbGwgYmFjayBncmFjZWZ1bGx5IGlmIHdlJ3JlIHJ1bm5pbmcgYW4gb2xkZXIgdmVyc2lvbiBvZiBTY2hlZHVsZXIuXG5TY2hlZHVsZXJfcmVxdWVzdFBhaW50ICE9PSB1bmRlZmluZWQgPyBTY2hlZHVsZXJfcmVxdWVzdFBhaW50IDogZnVuY3Rpb24gKCkge307XG52YXIgc3luY1F1ZXVlID0gbnVsbDtcbnZhciBpbW1lZGlhdGVRdWV1ZUNhbGxiYWNrTm9kZSA9IG51bGw7XG52YXIgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xudmFyIGluaXRpYWxUaW1lTXMkMSA9IFNjaGVkdWxlcl9ub3ckMSgpOyAvLyBJZiB0aGUgaW5pdGlhbCB0aW1lc3RhbXAgaXMgcmVhc29uYWJseSBzbWFsbCwgdXNlIFNjaGVkdWxlcidzIGBub3dgIGRpcmVjdGx5LlxuLy8gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIGZvciBtb2Rlcm4gYnJvd3NlcnMgdGhhdCBzdXBwb3J0IGBwZXJmb3JtYW5jZS5ub3dgLiBJblxuLy8gb2xkZXIgYnJvd3NlcnMsIFNjaGVkdWxlciBmYWxscyBiYWNrIHRvIGBEYXRlLm5vd2AsIHdoaWNoIHJldHVybnMgYSBVbml4XG4vLyB0aW1lc3RhbXAuIEluIHRoYXQgY2FzZSwgc3VidHJhY3QgdGhlIG1vZHVsZSBpbml0aWFsaXphdGlvbiB0aW1lIHRvIHNpbXVsYXRlXG4vLyB0aGUgYmVoYXZpb3Igb2YgcGVyZm9ybWFuY2Uubm93IGFuZCBrZWVwIG91ciB0aW1lcyBzbWFsbCBlbm91Z2ggdG8gZml0XG4vLyB3aXRoaW4gMzIgYml0cy5cbi8vIFRPRE86IENvbnNpZGVyIGxpZnRpbmcgdGhpcyBpbnRvIFNjaGVkdWxlci5cblxudmFyIG5vdyA9IGluaXRpYWxUaW1lTXMkMSA8IDEwMDAwID8gU2NoZWR1bGVyX25vdyQxIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gU2NoZWR1bGVyX25vdyQxKCkgLSBpbml0aWFsVGltZU1zJDE7XG59O1xuZnVuY3Rpb24gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKSB7XG4gIHN3aXRjaCAoU2NoZWR1bGVyX2dldEN1cnJlbnRQcmlvcml0eUxldmVsKCkpIHtcbiAgICBjYXNlIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTpcbiAgICAgIHJldHVybiBJbW1lZGlhdGVQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICByZXR1cm4gVXNlckJsb2NraW5nUHJpb3JpdHkkMjtcblxuICAgIGNhc2UgU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5OlxuICAgICAgcmV0dXJuIE5vcm1hbFByaW9yaXR5JDE7XG5cbiAgICBjYXNlIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTpcbiAgICAgIHJldHVybiBMb3dQcmlvcml0eSQxO1xuXG4gICAgY2FzZSBTY2hlZHVsZXJfSWRsZVByaW9yaXR5OlxuICAgICAgcmV0dXJuIElkbGVQcmlvcml0eSQxO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcHJpb3JpdHkgbGV2ZWwuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVhY3RQcmlvcml0eVRvU2NoZWR1bGVyUHJpb3JpdHkocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gIHN3aXRjaCAocmVhY3RQcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eTtcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHkkMjpcbiAgICAgIHJldHVybiBTY2hlZHVsZXJfVXNlckJsb2NraW5nUHJpb3JpdHk7XG5cbiAgICBjYXNlIE5vcm1hbFByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX05vcm1hbFByaW9yaXR5O1xuXG4gICAgY2FzZSBMb3dQcmlvcml0eSQxOlxuICAgICAgcmV0dXJuIFNjaGVkdWxlcl9Mb3dQcmlvcml0eTtcblxuICAgIGNhc2UgSWRsZVByaW9yaXR5JDE6XG4gICAgICByZXR1cm4gU2NoZWR1bGVyX0lkbGVQcmlvcml0eTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmtub3duIHByaW9yaXR5IGxldmVsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICB9XG59XG5cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQxKHJlYWN0UHJpb3JpdHlMZXZlbCwgZm4pIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBmbik7XG59XG5mdW5jdGlvbiBzY2hlZHVsZUNhbGxiYWNrKHJlYWN0UHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSByZWFjdFByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShyZWFjdFByaW9yaXR5TGV2ZWwpO1xuICByZXR1cm4gU2NoZWR1bGVyX3NjaGVkdWxlQ2FsbGJhY2socHJpb3JpdHlMZXZlbCwgY2FsbGJhY2ssIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gc2NoZWR1bGVTeW5jQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgLy8gUHVzaCB0aGlzIGNhbGxiYWNrIGludG8gYW4gaW50ZXJuYWwgcXVldWUuIFdlJ2xsIGZsdXNoIHRoZXNlIGVpdGhlciBpblxuICAvLyB0aGUgbmV4dCB0aWNrLCBvciBlYXJsaWVyIGlmIHNvbWV0aGluZyBjYWxscyBgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZWAuXG4gIGlmIChzeW5jUXVldWUgPT09IG51bGwpIHtcbiAgICBzeW5jUXVldWUgPSBbY2FsbGJhY2tdOyAvLyBGbHVzaCB0aGUgcXVldWUgaW4gdGhlIG5leHQgdGljaywgYXQgdGhlIGVhcmxpZXN0LlxuXG4gICAgaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgPSBTY2hlZHVsZXJfc2NoZWR1bGVDYWxsYmFjayhTY2hlZHVsZXJfSW1tZWRpYXRlUHJpb3JpdHksIGZsdXNoU3luY0NhbGxiYWNrUXVldWVJbXBsKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBQdXNoIG9udG8gZXhpc3RpbmcgcXVldWUuIERvbid0IG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFjayBiZWNhdXNlXG4gICAgLy8gd2UgYWxyZWFkeSBzY2hlZHVsZWQgb25lIHdoZW4gd2UgY3JlYXRlZCB0aGUgcXVldWUuXG4gICAgc3luY1F1ZXVlLnB1c2goY2FsbGJhY2spO1xuICB9XG5cbiAgcmV0dXJuIGZha2VDYWxsYmFja05vZGU7XG59XG5mdW5jdGlvbiBjYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpIHtcbiAgaWYgKGNhbGxiYWNrTm9kZSAhPT0gZmFrZUNhbGxiYWNrTm9kZSkge1xuICAgIFNjaGVkdWxlcl9jYW5jZWxDYWxsYmFjayhjYWxsYmFja05vZGUpO1xuICB9XG59XG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCkge1xuICBpZiAoaW1tZWRpYXRlUXVldWVDYWxsYmFja05vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgbm9kZSA9IGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlO1xuICAgIGltbWVkaWF0ZVF1ZXVlQ2FsbGJhY2tOb2RlID0gbnVsbDtcbiAgICBTY2hlZHVsZXJfY2FuY2VsQ2FsbGJhY2sobm9kZSk7XG4gIH1cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpO1xufVxuXG5mdW5jdGlvbiBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlSW1wbCgpIHtcbiAgaWYgKCFpc0ZsdXNoaW5nU3luY1F1ZXVlICYmIHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFByZXZlbnQgcmUtZW50cmFuY3kuXG4gICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IHRydWU7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIF9pc1N5bmMyID0gdHJ1ZTtcbiAgICAgICAgdmFyIF9xdWV1ZSA9IHN5bmNRdWV1ZTtcbiAgICAgICAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZvciAoOyBpIDwgX3F1ZXVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgY2FsbGJhY2sgPSBfcXVldWVbaV07XG5cbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayhfaXNTeW5jMik7XG4gICAgICAgICAgICB9IHdoaWxlIChjYWxsYmFjayAhPT0gbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgc3luY1F1ZXVlID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIHNvbWV0aGluZyB0aHJvd3MsIGxlYXZlIHRoZSByZW1haW5pbmcgY2FsbGJhY2tzIG9uIHRoZSBxdWV1ZS5cbiAgICAgICAgaWYgKHN5bmNRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHN5bmNRdWV1ZSA9IHN5bmNRdWV1ZS5zbGljZShpICsgMSk7XG4gICAgICAgIH0gLy8gUmVzdW1lIGZsdXNoaW5nIGluIHRoZSBuZXh0IHRpY2tcblxuXG4gICAgICAgIFNjaGVkdWxlcl9zY2hlZHVsZUNhbGxiYWNrKFNjaGVkdWxlcl9JbW1lZGlhdGVQcmlvcml0eSwgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSk7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaXNGbHVzaGluZ1N5bmNRdWV1ZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxudmFyIE5vTW9kZSA9IDA7XG52YXIgU3RyaWN0TW9kZSA9IDE7IC8vIFRPRE86IFJlbW92ZSBCbG9ja2luZ01vZGUgYW5kIENvbmN1cnJlbnRNb2RlIGJ5IHJlYWRpbmcgZnJvbSB0aGUgcm9vdFxuLy8gdGFnIGluc3RlYWRcblxudmFyIEJsb2NraW5nTW9kZSA9IDI7XG52YXIgQ29uY3VycmVudE1vZGUgPSA0O1xudmFyIFByb2ZpbGVNb2RlID0gODtcbnZhciBEZWJ1Z1RyYWNpbmdNb2RlID0gMTY7XG5cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnO1xudmFyIE5vVHJhbnNpdGlvbiA9IDA7XG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFRyYW5zaXRpb24oKSB7XG4gIHJldHVybiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZy50cmFuc2l0aW9uO1xufVxuXG52YXIgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MgPSB7XG4gIHJlY29yZFVuc2FmZUxpZmVjeWNsZVdhcm5pbmdzOiBmdW5jdGlvbiAoZmliZXIsIGluc3RhbmNlKSB7fSxcbiAgZmx1c2hQZW5kaW5nVW5zYWZlTGlmZWN5Y2xlV2FybmluZ3M6IGZ1bmN0aW9uICgpIHt9LFxuICByZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZzogZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge30sXG4gIGZsdXNoTGVnYWN5Q29udGV4dFdhcm5pbmc6IGZ1bmN0aW9uICgpIHt9LFxuICBkaXNjYXJkUGVuZGluZ1dhcm5pbmdzOiBmdW5jdGlvbiAoKSB7fVxufTtcblxue1xuICB2YXIgZmluZFN0cmljdFJvb3QgPSBmdW5jdGlvbiAoZmliZXIpIHtcbiAgICB2YXIgbWF5YmVTdHJpY3RSb290ID0gbnVsbDtcbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIG1heWJlU3RyaWN0Um9vdCA9IG5vZGU7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF5YmVTdHJpY3RSb290O1xuICB9O1xuXG4gIHZhciBzZXRUb1NvcnRlZFN0cmluZyA9IGZ1bmN0aW9uIChzZXQpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGFycmF5LnB1c2godmFsdWUpO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheS5zb3J0KCkuam9pbignLCAnKTtcbiAgfTtcblxuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gIHZhciBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncyA9IFtdO1xuICB2YXIgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTsgLy8gVHJhY2tzIGNvbXBvbmVudHMgd2UgaGF2ZSBhbHJlYWR5IHdhcm5lZCBhYm91dC5cblxuICB2YXIgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcyA9IG5ldyBTZXQoKTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uIChmaWJlciwgaW5zdGFuY2UpIHtcbiAgICAvLyBEZWR1cCBzdHJhdGVneTogV2FybiBvbmNlIHBlciBjb21wb25lbnQuXG4gICAgaWYgKGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicgJiYgLy8gRG9uJ3Qgd2FybiBhYm91dCByZWFjdC1saWZlY3ljbGVzLWNvbXBhdCBwb2x5ZmlsbGVkIGNvbXBvbmVudHMuXG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50Ll9fc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmcgIT09IHRydWUpIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MucHVzaChmaWJlcik7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUgJiYgdHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5wdXNoKGZpYmVyKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZS5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cblxuICAgIGlmIChmaWJlci5tb2RlICYgU3RyaWN0TW9kZSAmJiB0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLnB1c2goZmliZXIpO1xuICAgIH1cbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBXZSBkbyBhbiBpbml0aWFsIHBhc3MgdG8gZ2F0aGVyIGNvbXBvbmVudCBuYW1lc1xuICAgIHZhciBjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MubGVuZ3RoID4gMCkge1xuICAgICAgcGVuZGluZ0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIGNvbXBvbmVudFdpbGxNb3VudFVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIH1cblxuICAgIHZhciBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMgPSBuZXcgU2V0KCk7XG5cbiAgICBpZiAocGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsTW91bnRXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzLmZvckVhY2goZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgICAgIFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dFVuc2FmZUxpZmVjeWNsZXMuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxNb3VudFdhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgfVxuXG4gICAgdmFyIGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzLmxlbmd0aCA+IDApIHtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MuZm9yRWFjaChmdW5jdGlvbiAoZmliZXIpIHtcbiAgICAgICAgY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdDb21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcyA9IG5ldyBTZXQoKTtcblxuICAgIGlmIChwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5sZW5ndGggPiAwKSB7XG4gICAgICBwZW5kaW5nVU5TQUZFX0NvbXBvbmVudFdpbGxVcGRhdGVXYXJuaW5ncy5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICBVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLmFkZChnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICAgICAgZGlkV2FybkFib3V0VW5zYWZlTGlmZWN5Y2xlcy5hZGQoZmliZXIudHlwZSk7XG4gICAgICB9KTtcbiAgICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgfSAvLyBGaW5hbGx5LCB3ZSBmbHVzaCBhbGwgdGhlIHdhcm5pbmdzXG4gICAgLy8gVU5TQUZFXyBvbmVzIGJlZm9yZSB0aGUgZGVwcmVjYXRlZCBvbmVzLCBzaW5jZSB0aGV5J2xsIGJlICdsb3VkZXInXG5cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50VW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBzb3J0ZWROYW1lcyA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIGVycm9yKCdVc2luZyBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCBhbmQgbWF5IGluZGljYXRlIGJ1Z3MgaW4geW91ciBjb2RlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGNvZGUgd2l0aCBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkTW91bnQsIGFuZCBzZXQgaW5pdGlhbCBzdGF0ZSBpbiB0aGUgY29uc3RydWN0b3IuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBzb3J0ZWROYW1lcyk7XG4gICAgfVxuXG4gICAgaWYgKFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzVW5pcXVlTmFtZXMuc2l6ZSA+IDApIHtcbiAgICAgIHZhciBfc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyhVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzKTtcblxuICAgICAgZXJyb3IoJ1VzaW5nIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIGluIHN0cmljdCBtb2RlIGlzIG5vdCByZWNvbW1lbmRlZCAnICsgJ2FuZCBtYXkgaW5kaWNhdGUgYnVncyBpbiB5b3VyIGNvZGUuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgZGF0YSBmZXRjaGluZyBjb2RlIG9yIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRVcGRhdGUuXFxuJyArIFwiKiBJZiB5b3UncmUgdXBkYXRpbmcgc3RhdGUgd2hlbmV2ZXIgcHJvcHMgY2hhbmdlLCBcIiArICdyZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIG1lbW9pemF0aW9uIHRlY2huaXF1ZXMgb3IgbW92ZSBpdCB0byAnICsgJ3N0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuIExlYXJuIG1vcmUgYXQ6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9kZXJpdmVkLXN0YXRlXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMpO1xuICAgIH1cblxuICAgIGlmIChVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZVVuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzMiA9IHNldFRvU29ydGVkU3RyaW5nKFVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICBlcnJvcignVXNpbmcgVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgaW4gc3RyaWN0IG1vZGUgaXMgbm90IHJlY29tbWVuZGVkICcgKyAnYW5kIG1heSBpbmRpY2F0ZSBidWdzIGluIHlvdXIgY29kZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczIpO1xuICAgIH1cblxuICAgIGlmIChjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczMgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsTW91bnRVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxNb3VudCBoYXMgYmVlbiByZW5hbWVkLCBhbmQgaXMgbm90IHJlY29tbWVuZGVkIGZvciB1c2UuICcgKyAnU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay91bnNhZmUtY29tcG9uZW50LWxpZmVjeWNsZXMgZm9yIGRldGFpbHMuXFxuXFxuJyArICcqIE1vdmUgY29kZSB3aXRoIHNpZGUgZWZmZWN0cyB0byBjb21wb25lbnREaWRNb3VudCwgYW5kIHNldCBpbml0aWFsIHN0YXRlIGluIHRoZSBjb25zdHJ1Y3Rvci5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxNb3VudCB0byBVTlNBRkVfY29tcG9uZW50V2lsbE1vdW50IHRvIHN1cHByZXNzICcgKyAndGhpcyB3YXJuaW5nIGluIG5vbi1zdHJpY3QgbW9kZS4gSW4gUmVhY3QgMTgueCwgb25seSB0aGUgVU5TQUZFXyBuYW1lIHdpbGwgd29yay4gJyArICdUbyByZW5hbWUgYWxsIGRlcHJlY2F0ZWQgbGlmZWN5Y2xlcyB0byB0aGVpciBuZXcgbmFtZXMsIHlvdSBjYW4gcnVuICcgKyAnYG5weCByZWFjdC1jb2RlbW9kIHJlbmFtZS11bnNhZmUtbGlmZWN5Y2xlc2AgaW4geW91ciBwcm9qZWN0IHNvdXJjZSBmb2xkZXIuXFxuJyArICdcXG5QbGVhc2UgdXBkYXRlIHRoZSBmb2xsb3dpbmcgY29tcG9uZW50czogJXMnLCBfc29ydGVkTmFtZXMzKTtcbiAgICB9XG5cbiAgICBpZiAoY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1VuaXF1ZU5hbWVzLnNpemUgPiAwKSB7XG4gICAgICB2YXIgX3NvcnRlZE5hbWVzNCA9IHNldFRvU29ydGVkU3RyaW5nKGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHNVbmlxdWVOYW1lcyk7XG5cbiAgICAgIHdhcm4oJ2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgaGFzIGJlZW4gcmVuYW1lZCwgYW5kIGlzIG5vdCByZWNvbW1lbmRlZCBmb3IgdXNlLiAnICsgJ1NlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzIGZvciBkZXRhaWxzLlxcblxcbicgKyAnKiBNb3ZlIGRhdGEgZmV0Y2hpbmcgY29kZSBvciBzaWRlIGVmZmVjdHMgdG8gY29tcG9uZW50RGlkVXBkYXRlLlxcbicgKyBcIiogSWYgeW91J3JlIHVwZGF0aW5nIHN0YXRlIHdoZW5ldmVyIHByb3BzIGNoYW5nZSwgcmVmYWN0b3IgeW91ciBcIiArICdjb2RlIHRvIHVzZSBtZW1vaXphdGlvbiB0ZWNobmlxdWVzIG9yIG1vdmUgaXQgdG8gJyArICdzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLiBMZWFybiBtb3JlIGF0OiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvZGVyaXZlZC1zdGF0ZVxcbicgKyAnKiBSZW5hbWUgY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyB0byBzdXBwcmVzcyAnICsgJ3RoaXMgd2FybmluZyBpbiBub24tc3RyaWN0IG1vZGUuIEluIFJlYWN0IDE4LngsIG9ubHkgdGhlIFVOU0FGRV8gbmFtZSB3aWxsIHdvcmsuICcgKyAnVG8gcmVuYW1lIGFsbCBkZXByZWNhdGVkIGxpZmVjeWNsZXMgdG8gdGhlaXIgbmV3IG5hbWVzLCB5b3UgY2FuIHJ1biAnICsgJ2BucHggcmVhY3QtY29kZW1vZCByZW5hbWUtdW5zYWZlLWxpZmVjeWNsZXNgIGluIHlvdXIgcHJvamVjdCBzb3VyY2UgZm9sZGVyLlxcbicgKyAnXFxuUGxlYXNlIHVwZGF0ZSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6ICVzJywgX3NvcnRlZE5hbWVzNCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBvbmVudFdpbGxVcGRhdGVVbmlxdWVOYW1lcy5zaXplID4gMCkge1xuICAgICAgdmFyIF9zb3J0ZWROYW1lczUgPSBzZXRUb1NvcnRlZFN0cmluZyhjb21wb25lbnRXaWxsVXBkYXRlVW5pcXVlTmFtZXMpO1xuXG4gICAgICB3YXJuKCdjb21wb25lbnRXaWxsVXBkYXRlIGhhcyBiZWVuIHJlbmFtZWQsIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIHVzZS4gJyArICdTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3Vuc2FmZS1jb21wb25lbnQtbGlmZWN5Y2xlcyBmb3IgZGV0YWlscy5cXG5cXG4nICsgJyogTW92ZSBkYXRhIGZldGNoaW5nIGNvZGUgb3Igc2lkZSBlZmZlY3RzIHRvIGNvbXBvbmVudERpZFVwZGF0ZS5cXG4nICsgJyogUmVuYW1lIGNvbXBvbmVudFdpbGxVcGRhdGUgdG8gVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgdG8gc3VwcHJlc3MgJyArICd0aGlzIHdhcm5pbmcgaW4gbm9uLXN0cmljdCBtb2RlLiBJbiBSZWFjdCAxOC54LCBvbmx5IHRoZSBVTlNBRkVfIG5hbWUgd2lsbCB3b3JrLiAnICsgJ1RvIHJlbmFtZSBhbGwgZGVwcmVjYXRlZCBsaWZlY3ljbGVzIHRvIHRoZWlyIG5ldyBuYW1lcywgeW91IGNhbiBydW4gJyArICdgbnB4IHJlYWN0LWNvZGVtb2QgcmVuYW1lLXVuc2FmZS1saWZlY3ljbGVzYCBpbiB5b3VyIHByb2plY3Qgc291cmNlIGZvbGRlci5cXG4nICsgJ1xcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycsIF9zb3J0ZWROYW1lczUpO1xuICAgIH1cbiAgfTtcblxuICB2YXIgcGVuZGluZ0xlZ2FjeUNvbnRleHRXYXJuaW5nID0gbmV3IE1hcCgpOyAvLyBUcmFja3MgY29tcG9uZW50cyB3ZSBoYXZlIGFscmVhZHkgd2FybmVkIGFib3V0LlxuXG4gIHZhciBkaWRXYXJuQWJvdXRMZWdhY3lDb250ZXh0ID0gbmV3IFNldCgpO1xuXG4gIFJlYWN0U3RyaWN0TW9kZVdhcm5pbmdzLnJlY29yZExlZ2FjeUNvbnRleHRXYXJuaW5nID0gZnVuY3Rpb24gKGZpYmVyLCBpbnN0YW5jZSkge1xuICAgIHZhciBzdHJpY3RSb290ID0gZmluZFN0cmljdFJvb3QoZmliZXIpO1xuXG4gICAgaWYgKHN0cmljdFJvb3QgPT09IG51bGwpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB0byBmaW5kIGEgU3RyaWN0TW9kZSBjb21wb25lbnQgaW4gYSBzdHJpY3QgbW9kZSB0cmVlLiAnICsgJ1RoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIERlZHVwIHN0cmF0ZWd5OiBXYXJuIG9uY2UgcGVyIGNvbXBvbmVudC5cblxuXG4gICAgaWYgKGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuaGFzKGZpYmVyLnR5cGUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHdhcm5pbmdzRm9yUm9vdCA9IHBlbmRpbmdMZWdhY3lDb250ZXh0V2FybmluZy5nZXQoc3RyaWN0Um9vdCk7XG5cbiAgICBpZiAoZmliZXIudHlwZS5jb250ZXh0VHlwZXMgIT0gbnVsbCB8fCBmaWJlci50eXBlLmNoaWxkQ29udGV4dFR5cGVzICE9IG51bGwgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmdldENoaWxkQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHdhcm5pbmdzRm9yUm9vdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHdhcm5pbmdzRm9yUm9vdCA9IFtdO1xuICAgICAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuc2V0KHN0cmljdFJvb3QsIHdhcm5pbmdzRm9yUm9vdCk7XG4gICAgICB9XG5cbiAgICAgIHdhcm5pbmdzRm9yUm9vdC5wdXNoKGZpYmVyKTtcbiAgICB9XG4gIH07XG5cbiAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MuZmx1c2hMZWdhY3lDb250ZXh0V2FybmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcuZm9yRWFjaChmdW5jdGlvbiAoZmliZXJBcnJheSwgc3RyaWN0Um9vdCkge1xuICAgICAgaWYgKGZpYmVyQXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIGZpcnN0RmliZXIgPSBmaWJlckFycmF5WzBdO1xuICAgICAgdmFyIHVuaXF1ZU5hbWVzID0gbmV3IFNldCgpO1xuICAgICAgZmliZXJBcnJheS5mb3JFYWNoKGZ1bmN0aW9uIChmaWJlcikge1xuICAgICAgICB1bmlxdWVOYW1lcy5hZGQoZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICAgIGRpZFdhcm5BYm91dExlZ2FjeUNvbnRleHQuYWRkKGZpYmVyLnR5cGUpO1xuICAgICAgfSk7XG4gICAgICB2YXIgc29ydGVkTmFtZXMgPSBzZXRUb1NvcnRlZFN0cmluZyh1bmlxdWVOYW1lcyk7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaXJzdEZpYmVyKTtcblxuICAgICAgICBlcnJvcignTGVnYWN5IGNvbnRleHQgQVBJIGhhcyBiZWVuIGRldGVjdGVkIHdpdGhpbiBhIHN0cmljdC1tb2RlIHRyZWUuJyArICdcXG5cXG5UaGUgb2xkIEFQSSB3aWxsIGJlIHN1cHBvcnRlZCBpbiBhbGwgMTYueCByZWxlYXNlcywgYnV0IGFwcGxpY2F0aW9ucyAnICsgJ3VzaW5nIGl0IHNob3VsZCBtaWdyYXRlIHRvIHRoZSBuZXcgdmVyc2lvbi4nICsgJ1xcblxcblBsZWFzZSB1cGRhdGUgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOiAlcycgKyAnXFxuXFxuTGVhcm4gbW9yZSBhYm91dCB0aGlzIHdhcm5pbmcgaGVyZTogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2xlZ2FjeS1jb250ZXh0Jywgc29ydGVkTmFtZXMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzID0gZnVuY3Rpb24gKCkge1xuICAgIHBlbmRpbmdDb21wb25lbnRXaWxsTW91bnRXYXJuaW5ncyA9IFtdO1xuICAgIHBlbmRpbmdVTlNBRkVfQ29tcG9uZW50V2lsbE1vdW50V2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFJlY2VpdmVQcm9wc1dhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsUmVjZWl2ZVByb3BzV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nQ29tcG9uZW50V2lsbFVwZGF0ZVdhcm5pbmdzID0gW107XG4gICAgcGVuZGluZ1VOU0FGRV9Db21wb25lbnRXaWxsVXBkYXRlV2FybmluZ3MgPSBbXTtcbiAgICBwZW5kaW5nTGVnYWN5Q29udGV4dFdhcm5pbmcgPSBuZXcgTWFwKCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEZWZhdWx0UHJvcHMoQ29tcG9uZW50LCBiYXNlUHJvcHMpIHtcbiAgaWYgKENvbXBvbmVudCAmJiBDb21wb25lbnQuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzLiBUYWtlbiBmcm9tIFJlYWN0RWxlbWVudFxuICAgIHZhciBwcm9wcyA9IF9hc3NpZ24oe30sIGJhc2VQcm9wcyk7XG5cbiAgICB2YXIgZGVmYXVsdFByb3BzID0gQ29tcG9uZW50LmRlZmF1bHRQcm9wcztcblxuICAgIGZvciAodmFyIHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xuICAgICAgaWYgKHByb3BzW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGRlZmF1bHRQcm9wc1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG5cbiAgcmV0dXJuIGJhc2VQcm9wcztcbn1cblxuLy8gTWF4IDMxIGJpdCBpbnRlZ2VyLiBUaGUgbWF4IGludGVnZXIgc2l6ZSBpbiBWOCBmb3IgMzItYml0IHN5c3RlbXMuXG4vLyBNYXRoLnBvdygyLCAzMCkgLSAxXG4vLyAwYjExMTExMTExMTExMTExMTExMTExMTExMTExMTExMVxudmFyIE1BWF9TSUdORURfMzFfQklUX0lOVCA9IDEwNzM3NDE4MjM7XG5cbnZhciB2YWx1ZUN1cnNvciA9IGNyZWF0ZUN1cnNvcihudWxsKTtcbnZhciByZW5kZXJlclNpZ2lsO1xuXG57XG4gIC8vIFVzZSB0aGlzIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgY29udGV4dFxuICByZW5kZXJlclNpZ2lsID0ge307XG59XG5cbnZhciBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG52YXIgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbnVsbDtcbnZhciBsYXN0Q29udGV4dFdpdGhBbGxCaXRzT2JzZXJ2ZWQgPSBudWxsO1xudmFyIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbmZ1bmN0aW9uIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpIHtcbiAgLy8gVGhpcyBpcyBjYWxsZWQgcmlnaHQgYmVmb3JlIFJlYWN0IHlpZWxkcyBleGVjdXRpb24sIHRvIGVuc3VyZSBgcmVhZENvbnRleHRgXG4gIC8vIGNhbm5vdCBiZSBjYWxsZWQgb3V0c2lkZSB0aGUgcmVuZGVyIHBoYXNlLlxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciA9IG51bGw7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG5cbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpIHtcbiAge1xuICAgIGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYgPSB0cnVlO1xuICB9XG59XG5mdW5jdGlvbiBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKSB7XG4gIHtcbiAgICBpc0Rpc2FsbG93ZWRDb250ZXh0UmVhZEluREVWID0gZmFsc2U7XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hQcm92aWRlcihwcm92aWRlckZpYmVyLCBuZXh0VmFsdWUpIHtcbiAgdmFyIGNvbnRleHQgPSBwcm92aWRlckZpYmVyLnR5cGUuX2NvbnRleHQ7XG5cbiAge1xuICAgIHB1c2godmFsdWVDdXJzb3IsIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSwgcHJvdmlkZXJGaWJlcik7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gbmV4dFZhbHVlO1xuXG4gICAge1xuICAgICAgaWYgKGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciAhPT0gbnVsbCAmJiBjb250ZXh0Ll9jdXJyZW50UmVuZGVyZXIgIT09IHJlbmRlcmVyU2lnaWwpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgY29udGV4dCBwcm92aWRlci4gVGhpcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQuJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IHJlbmRlcmVyU2lnaWw7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBwb3BQcm92aWRlcihwcm92aWRlckZpYmVyKSB7XG4gIHZhciBjdXJyZW50VmFsdWUgPSB2YWx1ZUN1cnNvci5jdXJyZW50O1xuICBwb3AodmFsdWVDdXJzb3IsIHByb3ZpZGVyRmliZXIpO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyRmliZXIudHlwZS5fY29udGV4dDtcblxuICB7XG4gICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gY3VycmVudFZhbHVlO1xuICB9XG59XG5mdW5jdGlvbiBjYWxjdWxhdGVDaGFuZ2VkQml0cyhjb250ZXh0LCBuZXdWYWx1ZSwgb2xkVmFsdWUpIHtcbiAgaWYgKG9iamVjdElzKG9sZFZhbHVlLCBuZXdWYWx1ZSkpIHtcbiAgICAvLyBObyBjaGFuZ2VcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIHtcbiAgICB2YXIgY2hhbmdlZEJpdHMgPSB0eXBlb2YgY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHMgPT09ICdmdW5jdGlvbicgPyBjb250ZXh0Ll9jYWxjdWxhdGVDaGFuZ2VkQml0cyhvbGRWYWx1ZSwgbmV3VmFsdWUpIDogTUFYX1NJR05FRF8zMV9CSVRfSU5UO1xuXG4gICAge1xuICAgICAgaWYgKChjaGFuZ2VkQml0cyAmIE1BWF9TSUdORURfMzFfQklUX0lOVCkgIT09IGNoYW5nZWRCaXRzKSB7XG4gICAgICAgIGVycm9yKCdjYWxjdWxhdGVDaGFuZ2VkQml0czogRXhwZWN0ZWQgdGhlIHJldHVybiB2YWx1ZSB0byBiZSBhICcgKyAnMzEtYml0IGludGVnZXIuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VkQml0cyB8IDA7XG4gIH1cbn1cbmZ1bmN0aW9uIHNjaGVkdWxlV29ya09uUGFyZW50UGF0aChwYXJlbnQsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFVwZGF0ZSB0aGUgY2hpbGQgbGFuZXMgb2YgYWxsIHRoZSBhbmNlc3RvcnMsIGluY2x1ZGluZyB0aGUgYWx0ZXJuYXRlcy5cbiAgdmFyIG5vZGUgPSBwYXJlbnQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICB2YXIgYWx0ZXJuYXRlID0gbm9kZS5hbHRlcm5hdGU7XG5cbiAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgICAgbm9kZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhub2RlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuY2hpbGRMYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCAmJiAhaXNTdWJzZXRPZkxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgIGFsdGVybmF0ZS5jaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUuY2hpbGRMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGFsdGVybmF0ZSB3YXMgdXBkYXRlZCwgd2hpY2ggbWVhbnMgdGhlIHJlc3Qgb2YgdGhlXG4gICAgICAvLyBhbmNlc3RvciBwYXRoIGFscmVhZHkgaGFzIHN1ZmZpY2llbnQgcHJpb3JpdHkuXG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHByb3BhZ2F0ZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIGNvbnRleHQsIGNoYW5nZWRCaXRzLCByZW5kZXJMYW5lcykge1xuICB2YXIgZmliZXIgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICBpZiAoZmliZXIgIT09IG51bGwpIHtcbiAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICBmaWJlci5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgfVxuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIHZhciBuZXh0RmliZXIgPSB2b2lkIDA7IC8vIFZpc2l0IHRoaXMgZmliZXIuXG5cbiAgICB2YXIgbGlzdCA9IGZpYmVyLmRlcGVuZGVuY2llcztcblxuICAgIGlmIChsaXN0ICE9PSBudWxsKSB7XG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICAgIHZhciBkZXBlbmRlbmN5ID0gbGlzdC5maXJzdENvbnRleHQ7XG5cbiAgICAgIHdoaWxlIChkZXBlbmRlbmN5ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjb250ZXh0IG1hdGNoZXMuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5LmNvbnRleHQgPT09IGNvbnRleHQgJiYgKGRlcGVuZGVuY3kub2JzZXJ2ZWRCaXRzICYgY2hhbmdlZEJpdHMpICE9PSAwKSB7XG4gICAgICAgICAgLy8gTWF0Y2ghIFNjaGVkdWxlIGFuIHVwZGF0ZSBvbiB0aGlzIGZpYmVyLlxuICAgICAgICAgIGlmIChmaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIGZvcmNlIHVwZGF0ZSBvbiB0aGUgd29yay1pbi1wcm9ncmVzcy5cbiAgICAgICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoTm9UaW1lc3RhbXAsIHBpY2tBcmJpdHJhcnlMYW5lKHJlbmRlckxhbmVzKSk7XG4gICAgICAgICAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7IC8vIFRPRE86IEJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhIHdvcmstaW4tcHJvZ3Jlc3MsIHRoaXMgd2lsbCBhZGQgdGhlXG4gICAgICAgICAgICAvLyB1cGRhdGUgdG8gdGhlIGN1cnJlbnQgZmliZXIsIHRvbywgd2hpY2ggbWVhbnMgaXQgd2lsbCBwZXJzaXN0IGV2ZW4gaWZcbiAgICAgICAgICAgIC8vIHRoaXMgcmVuZGVyIGlzIHRocm93biBhd2F5LiBTaW5jZSBpdCdzIGEgcmFjZSBjb25kaXRpb24sIG5vdCBzdXJlIGl0J3NcbiAgICAgICAgICAgIC8vIHdvcnRoIGZpeGluZy5cblxuICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmaWJlci5sYW5lcyA9IG1lcmdlTGFuZXMoZmliZXIubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7IC8vIE1hcmsgdGhlIHVwZGF0ZWQgbGFuZXMgb24gdGhlIGxpc3QsIHRvby5cblxuICAgICAgICAgIGxpc3QubGFuZXMgPSBtZXJnZUxhbmVzKGxpc3QubGFuZXMsIHJlbmRlckxhbmVzKTsgLy8gU2luY2Ugd2UgYWxyZWFkeSBmb3VuZCBhIG1hdGNoLCB3ZSBjYW4gc3RvcCB0cmF2ZXJzaW5nIHRoZVxuICAgICAgICAgIC8vIGRlcGVuZGVuY3kgbGlzdC5cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgZGVwZW5kZW5jeSA9IGRlcGVuZGVuY3kubmV4dDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ29udGV4dFByb3ZpZGVyKSB7XG4gICAgICAvLyBEb24ndCBzY2FuIGRlZXBlciBpZiB0aGlzIGlzIGEgbWF0Y2hpbmcgcHJvdmlkZXJcbiAgICAgIG5leHRGaWJlciA9IGZpYmVyLnR5cGUgPT09IHdvcmtJblByb2dyZXNzLnR5cGUgPyBudWxsIDogZmliZXIuY2hpbGQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRyYXZlcnNlIGRvd24uXG4gICAgICBuZXh0RmliZXIgPSBmaWJlci5jaGlsZDtcbiAgICB9XG5cbiAgICBpZiAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBjaGlsZCB0byB0aGUgd29yay1pbi1wcm9ncmVzcyBmaWJlci5cbiAgICAgIG5leHRGaWJlci5yZXR1cm4gPSBmaWJlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gY2hpbGQuIFRyYXZlcnNlIHRvIG5leHQgc2libGluZy5cbiAgICAgIG5leHRGaWJlciA9IGZpYmVyO1xuXG4gICAgICB3aGlsZSAobmV4dEZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZXh0RmliZXIgPT09IHdvcmtJblByb2dyZXNzKSB7XG4gICAgICAgICAgLy8gV2UncmUgYmFjayB0byB0aGUgcm9vdCBvZiB0aGlzIHN1YnRyZWUuIEV4aXQuXG4gICAgICAgICAgbmV4dEZpYmVyID0gbnVsbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaWJsaW5nID0gbmV4dEZpYmVyLnNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHNpYmxpbmcgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIHJldHVybiBwb2ludGVyIG9mIHRoZSBzaWJsaW5nIHRvIHRoZSB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuICAgICAgICAgIHNpYmxpbmcucmV0dXJuID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgICAgICBuZXh0RmliZXIgPSBzaWJsaW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IC8vIE5vIG1vcmUgc2libGluZ3MuIFRyYXZlcnNlIHVwLlxuXG5cbiAgICAgICAgbmV4dEZpYmVyID0gbmV4dEZpYmVyLnJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWJlciA9IG5leHRGaWJlcjtcbiAgfVxufVxuZnVuY3Rpb24gcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyID0gd29ya0luUHJvZ3Jlc3M7XG4gIGxhc3RDb250ZXh0RGVwZW5kZW5jeSA9IG51bGw7XG4gIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IG51bGw7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXM7XG5cbiAgaWYgKGRlcGVuZGVuY2llcyAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdENvbnRleHQgPSBkZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0O1xuXG4gICAgaWYgKGZpcnN0Q29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUoZGVwZW5kZW5jaWVzLmxhbmVzLCByZW5kZXJMYW5lcykpIHtcbiAgICAgICAgLy8gQ29udGV4dCBsaXN0IGhhcyBhIHBlbmRpbmcgdXBkYXRlLiBNYXJrIHRoYXQgdGhpcyBmaWJlciBwZXJmb3JtZWQgd29yay5cbiAgICAgICAgbWFya1dvcmtJblByb2dyZXNzUmVjZWl2ZWRVcGRhdGUoKTtcbiAgICAgIH0gLy8gUmVzZXQgdGhlIHdvcmstaW4tcHJvZ3Jlc3MgbGlzdFxuXG5cbiAgICAgIGRlcGVuZGVuY2llcy5maXJzdENvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gIHtcbiAgICAvLyBUaGlzIHdhcm5pbmcgd291bGQgZmlyZSBpZiB5b3UgcmVhZCBjb250ZXh0IGluc2lkZSBhIEhvb2sgbGlrZSB1c2VNZW1vLlxuICAgIC8vIFVubGlrZSB0aGUgY2xhc3MgY2hlY2sgYmVsb3csIGl0J3Mgbm90IGVuZm9yY2VkIGluIHByb2R1Y3Rpb24gZm9yIHBlcmYuXG4gICAgaWYgKGlzRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYpIHtcbiAgICAgIGVycm9yKCdDb250ZXh0IGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgUmVhY3QgaXMgcmVuZGVyaW5nLiAnICsgJ0luIGNsYXNzZXMsIHlvdSBjYW4gcmVhZCBpdCBpbiB0aGUgcmVuZGVyIG1ldGhvZCBvciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMuICcgKyAnSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90ICcgKyAnaW5zaWRlIEhvb2tzIGxpa2UgdXNlUmVkdWNlcigpIG9yIHVzZU1lbW8oKS4nKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGFzdENvbnRleHRXaXRoQWxsQml0c09ic2VydmVkID09PSBjb250ZXh0KSA7IGVsc2UgaWYgKG9ic2VydmVkQml0cyA9PT0gZmFsc2UgfHwgb2JzZXJ2ZWRCaXRzID09PSAwKSA7IGVsc2Uge1xuICAgIHZhciByZXNvbHZlZE9ic2VydmVkQml0czsgLy8gQXZvaWQgZGVvcHRpbmcgb24gb2JzZXJ2YWJsZSBhcmd1bWVudHMgb3IgaGV0ZXJvZ2VuZW91cyB0eXBlcy5cblxuICAgIGlmICh0eXBlb2Ygb2JzZXJ2ZWRCaXRzICE9PSAnbnVtYmVyJyB8fCBvYnNlcnZlZEJpdHMgPT09IE1BWF9TSUdORURfMzFfQklUX0lOVCkge1xuICAgICAgLy8gT2JzZXJ2ZSBhbGwgdXBkYXRlcy5cbiAgICAgIGxhc3RDb250ZXh0V2l0aEFsbEJpdHNPYnNlcnZlZCA9IGNvbnRleHQ7XG4gICAgICByZXNvbHZlZE9ic2VydmVkQml0cyA9IE1BWF9TSUdORURfMzFfQklUX0lOVDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzb2x2ZWRPYnNlcnZlZEJpdHMgPSBvYnNlcnZlZEJpdHM7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRleHRJdGVtID0ge1xuICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgIG9ic2VydmVkQml0czogcmVzb2x2ZWRPYnNlcnZlZEJpdHMsXG4gICAgICBuZXh0OiBudWxsXG4gICAgfTtcblxuICAgIGlmIChsYXN0Q29udGV4dERlcGVuZGVuY3kgPT09IG51bGwpIHtcbiAgICAgIGlmICghKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ29udGV4dCBjYW4gb25seSBiZSByZWFkIHdoaWxlIFJlYWN0IGlzIHJlbmRlcmluZy4gSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gSW4gZnVuY3Rpb24gY29tcG9uZW50cywgeW91IGNhbiByZWFkIGl0IGRpcmVjdGx5IGluIHRoZSBmdW5jdGlvbiBib2R5LCBidXQgbm90IGluc2lkZSBIb29rcyBsaWtlIHVzZVJlZHVjZXIoKSBvciB1c2VNZW1vKCkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCBkZXBlbmRlbmN5IGZvciB0aGlzIGNvbXBvbmVudC4gQ3JlYXRlIGEgbmV3IGxpc3QuXG5cblxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gY29udGV4dEl0ZW07XG4gICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlci5kZXBlbmRlbmNpZXMgPSB7XG4gICAgICAgIGxhbmVzOiBOb0xhbmVzLFxuICAgICAgICBmaXJzdENvbnRleHQ6IGNvbnRleHRJdGVtLFxuICAgICAgICByZXNwb25kZXJzOiBudWxsXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBBcHBlbmQgYSBuZXcgY29udGV4dCBpdGVtLlxuICAgICAgbGFzdENvbnRleHREZXBlbmRlbmN5ID0gbGFzdENvbnRleHREZXBlbmRlbmN5Lm5leHQgPSBjb250ZXh0SXRlbTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gIGNvbnRleHQuX2N1cnJlbnRWYWx1ZSA7XG59XG5cbnZhciBVcGRhdGVTdGF0ZSA9IDA7XG52YXIgUmVwbGFjZVN0YXRlID0gMTtcbnZhciBGb3JjZVVwZGF0ZSA9IDI7XG52YXIgQ2FwdHVyZVVwZGF0ZSA9IDM7IC8vIEdsb2JhbCBzdGF0ZSB0aGF0IGlzIHJlc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYC5cbi8vIEl0IHNob3VsZCBvbmx5IGJlIHJlYWQgcmlnaHQgYWZ0ZXIgY2FsbGluZyBgcHJvY2Vzc1VwZGF0ZVF1ZXVlYCwgdmlhXG4vLyBgY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZ2AuXG5cbnZhciBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xudmFyIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGU7XG52YXIgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlO1xuXG57XG4gIGRpZFdhcm5VcGRhdGVJbnNpZGVVcGRhdGUgPSBmYWxzZTtcbiAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKGZpYmVyKSB7XG4gIHZhciBxdWV1ZSA9IHtcbiAgICBiYXNlU3RhdGU6IGZpYmVyLm1lbW9pemVkU3RhdGUsXG4gICAgZmlyc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIGxhc3RCYXNlVXBkYXRlOiBudWxsLFxuICAgIHNoYXJlZDoge1xuICAgICAgcGVuZGluZzogbnVsbFxuICAgIH0sXG4gICAgZWZmZWN0czogbnVsbFxuICB9O1xuICBmaWJlci51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xufVxuZnVuY3Rpb24gY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcykge1xuICAvLyBDbG9uZSB0aGUgdXBkYXRlIHF1ZXVlIGZyb20gY3VycmVudC4gVW5sZXNzIGl0J3MgYWxyZWFkeSBhIGNsb25lLlxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgaWYgKHF1ZXVlID09PSBjdXJyZW50UXVldWUpIHtcbiAgICB2YXIgY2xvbmUgPSB7XG4gICAgICBiYXNlU3RhdGU6IGN1cnJlbnRRdWV1ZS5iYXNlU3RhdGUsXG4gICAgICBmaXJzdEJhc2VVcGRhdGU6IGN1cnJlbnRRdWV1ZS5maXJzdEJhc2VVcGRhdGUsXG4gICAgICBsYXN0QmFzZVVwZGF0ZTogY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlLFxuICAgICAgc2hhcmVkOiBjdXJyZW50UXVldWUuc2hhcmVkLFxuICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICB9O1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gY2xvbmU7XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IHtcbiAgICBldmVudFRpbWU6IGV2ZW50VGltZSxcbiAgICBsYW5lOiBsYW5lLFxuICAgIHRhZzogVXBkYXRlU3RhdGUsXG4gICAgcGF5bG9hZDogbnVsbCxcbiAgICBjYWxsYmFjazogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG4gIHJldHVybiB1cGRhdGU7XG59XG5mdW5jdGlvbiBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpIHtcbiAgdmFyIHVwZGF0ZVF1ZXVlID0gZmliZXIudXBkYXRlUXVldWU7XG5cbiAgaWYgKHVwZGF0ZVF1ZXVlID09PSBudWxsKSB7XG4gICAgLy8gT25seSBvY2N1cnMgaWYgdGhlIGZpYmVyIGhhcyBiZWVuIHVubW91bnRlZC5cbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2hhcmVkUXVldWUgPSB1cGRhdGVRdWV1ZS5zaGFyZWQ7XG4gIHZhciBwZW5kaW5nID0gc2hhcmVkUXVldWUucGVuZGluZztcblxuICBpZiAocGVuZGluZyA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IHVwZGF0ZS4gQ3JlYXRlIGEgY2lyY3VsYXIgbGlzdC5cbiAgICB1cGRhdGUubmV4dCA9IHVwZGF0ZTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUubmV4dCA9IHBlbmRpbmcubmV4dDtcbiAgICBwZW5kaW5nLm5leHQgPSB1cGRhdGU7XG4gIH1cblxuICBzaGFyZWRRdWV1ZS5wZW5kaW5nID0gdXBkYXRlO1xuXG4gIHtcbiAgICBpZiAoY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID09PSBzaGFyZWRRdWV1ZSAmJiAhZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSkge1xuICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSAoc2V0U3RhdGUsIHJlcGxhY2VTdGF0ZSwgb3IgZm9yY2VVcGRhdGUpIHdhcyBzY2hlZHVsZWQgJyArICdmcm9tIGluc2lkZSBhbiB1cGRhdGUgZnVuY3Rpb24uIFVwZGF0ZSBmdW5jdGlvbnMgc2hvdWxkIGJlIHB1cmUsICcgKyAnd2l0aCB6ZXJvIHNpZGUtZWZmZWN0cy4gQ29uc2lkZXIgdXNpbmcgY29tcG9uZW50RGlkVXBkYXRlIG9yIGEgJyArICdjYWxsYmFjay4nKTtcblxuICAgICAgZGlkV2FyblVwZGF0ZUluc2lkZVVwZGF0ZSA9IHRydWU7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlQ2FwdHVyZWRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGNhcHR1cmVkVXBkYXRlKSB7XG4gIC8vIENhcHR1cmVkIHVwZGF0ZXMgYXJlIHVwZGF0ZXMgdGhhdCBhcmUgdGhyb3duIGJ5IGEgY2hpbGQgZHVyaW5nIHRoZSByZW5kZXJcbiAgLy8gcGhhc2UuIFRoZXkgc2hvdWxkIGJlIGRpc2NhcmRlZCBpZiB0aGUgcmVuZGVyIGlzIGFib3J0ZWQuIFRoZXJlZm9yZSxcbiAgLy8gd2Ugc2hvdWxkIG9ubHkgcHV0IHRoZW0gb24gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUsIG5vdCB0aGUgY3VycmVudCBvbmUuXG4gIHZhciBxdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlOyAvLyBDaGVjayBpZiB0aGUgd29yay1pbi1wcm9ncmVzcyBxdWV1ZSBpcyBhIGNsb25lLlxuXG4gIHZhciBjdXJyZW50ID0gd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICBpZiAocXVldWUgPT09IGN1cnJlbnRRdWV1ZSkge1xuICAgICAgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgaXMgdGhlIHNhbWUgYXMgY3VycmVudC4gVGhpcyBoYXBwZW5zIHdoZW5cbiAgICAgIC8vIHdlIGJhaWwgb3V0IG9uIGEgcGFyZW50IGZpYmVyIHRoYXQgdGhlbiBjYXB0dXJlcyBhbiBlcnJvciB0aHJvd24gYnlcbiAgICAgIC8vIGEgY2hpbGQuIFNpbmNlIHdlIHdhbnQgdG8gYXBwZW5kIHRoZSB1cGRhdGUgb25seSB0byB0aGUgd29yay1pblxuICAgICAgLy8gLXByb2dyZXNzIHF1ZXVlLCB3ZSBuZWVkIHRvIGNsb25lIHRoZSB1cGRhdGVzLiBXZSB1c3VhbGx5IGNsb25lIGR1cmluZ1xuICAgICAgLy8gcHJvY2Vzc1VwZGF0ZVF1ZXVlLCBidXQgdGhhdCBkaWRuJ3QgaGFwcGVuIGluIHRoaXMgY2FzZSBiZWNhdXNlIHdlXG4gICAgICAvLyBza2lwcGVkIG92ZXIgdGhlIHBhcmVudCB3aGVuIHdlIGJhaWxlZCBvdXQuXG4gICAgICB2YXIgbmV3Rmlyc3QgPSBudWxsO1xuICAgICAgdmFyIG5ld0xhc3QgPSBudWxsO1xuICAgICAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcblxuICAgICAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAvLyBMb29wIHRocm91Z2ggdGhlIHVwZGF0ZXMgYW5kIGNsb25lIHRoZW0uXG4gICAgICAgIHZhciB1cGRhdGUgPSBmaXJzdEJhc2VVcGRhdGU7XG5cbiAgICAgICAgZG8ge1xuICAgICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlLmV2ZW50VGltZSxcbiAgICAgICAgICAgIGxhbmU6IHVwZGF0ZS5sYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG5cbiAgICAgICAgICBpZiAobmV3TGFzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICAgICAgbmV3TGFzdCA9IGNsb25lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgICAgICB9IHdoaWxlICh1cGRhdGUgIT09IG51bGwpOyAvLyBBcHBlbmQgdGhlIGNhcHR1cmVkIHVwZGF0ZSB0aGUgZW5kIG9mIHRoZSBjbG9uZWQgbGlzdC5cblxuXG4gICAgICAgIGlmIChuZXdMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3Rmlyc3QgPSBuZXdMYXN0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdC5uZXh0ID0gY2FwdHVyZWRVcGRhdGU7XG4gICAgICAgICAgbmV3TGFzdCA9IGNhcHR1cmVkVXBkYXRlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGVyZSBhcmUgbm8gYmFzZSB1cGRhdGVzLlxuICAgICAgICBuZXdGaXJzdCA9IG5ld0xhc3QgPSBjYXB0dXJlZFVwZGF0ZTtcbiAgICAgIH1cblxuICAgICAgcXVldWUgPSB7XG4gICAgICAgIGJhc2VTdGF0ZTogY3VycmVudFF1ZXVlLmJhc2VTdGF0ZSxcbiAgICAgICAgZmlyc3RCYXNlVXBkYXRlOiBuZXdGaXJzdCxcbiAgICAgICAgbGFzdEJhc2VVcGRhdGU6IG5ld0xhc3QsXG4gICAgICAgIHNoYXJlZDogY3VycmVudFF1ZXVlLnNoYXJlZCxcbiAgICAgICAgZWZmZWN0czogY3VycmVudFF1ZXVlLmVmZmVjdHNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHF1ZXVlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSAvLyBBcHBlbmQgdGhlIHVwZGF0ZSB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuXG5cbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgaWYgKGxhc3RCYXNlVXBkYXRlID09PSBudWxsKSB7XG4gICAgcXVldWUuZmlyc3RCYXNlVXBkYXRlID0gY2FwdHVyZWRVcGRhdGU7XG4gIH0gZWxzZSB7XG4gICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGNhcHR1cmVkVXBkYXRlO1xuICB9XG5cbiAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBjYXB0dXJlZFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGVGcm9tVXBkYXRlKHdvcmtJblByb2dyZXNzLCBxdWV1ZSwgdXBkYXRlLCBwcmV2U3RhdGUsIG5leHRQcm9wcywgaW5zdGFuY2UpIHtcbiAgc3dpdGNoICh1cGRhdGUudGFnKSB7XG4gICAgY2FzZSBSZXBsYWNlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBwYXlsb2FkID0gdXBkYXRlLnBheWxvYWQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gVXBkYXRlciBmdW5jdGlvblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVudGVyRGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgbmV4dFN0YXRlID0gcGF5bG9hZC5jYWxsKGluc3RhbmNlLCBwcmV2U3RhdGUsIG5leHRQcm9wcyk7XG5cbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV4dFN0YXRlO1xuICAgICAgICB9IC8vIFN0YXRlIG9iamVjdFxuXG5cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICB9XG5cbiAgICBjYXNlIENhcHR1cmVVcGRhdGU6XG4gICAgICB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG4gICAgICB9XG4gICAgLy8gSW50ZW50aW9uYWwgZmFsbHRocm91Z2hcblxuICAgIGNhc2UgVXBkYXRlU3RhdGU6XG4gICAgICB7XG4gICAgICAgIHZhciBfcGF5bG9hZCA9IHVwZGF0ZS5wYXlsb2FkO1xuICAgICAgICB2YXIgcGFydGlhbFN0YXRlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgX3BheWxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAvLyBVcGRhdGVyIGZ1bmN0aW9uXG4gICAgICAgICAge1xuICAgICAgICAgICAgZW50ZXJEaXNhbGxvd2VkQ29udGV4dFJlYWRJbkRFVigpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHBhcnRpYWxTdGF0ZSA9IF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcblxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIF9wYXlsb2FkLmNhbGwoaW5zdGFuY2UsIHByZXZTdGF0ZSwgbmV4dFByb3BzKTtcbiAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBleGl0RGlzYWxsb3dlZENvbnRleHRSZWFkSW5ERVYoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gUGFydGlhbCBzdGF0ZSBvYmplY3RcbiAgICAgICAgICBwYXJ0aWFsU3RhdGUgPSBfcGF5bG9hZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0aWFsU3RhdGUgPT09IG51bGwgfHwgcGFydGlhbFN0YXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBOdWxsIGFuZCB1bmRlZmluZWQgYXJlIHRyZWF0ZWQgYXMgbm8tb3BzLlxuICAgICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICAgIH0gLy8gTWVyZ2UgdGhlIHBhcnRpYWwgc3RhdGUgYW5kIHRoZSBwcmV2aW91cyBzdGF0ZS5cblxuXG4gICAgICAgIHJldHVybiBfYXNzaWduKHt9LCBwcmV2U3RhdGUsIHBhcnRpYWxTdGF0ZSk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZvcmNlVXBkYXRlOlxuICAgICAge1xuICAgICAgICBoYXNGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGU7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gcHJldlN0YXRlO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIHByb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVGhpcyBpcyBhbHdheXMgbm9uLW51bGwgb24gYSBDbGFzc0NvbXBvbmVudCBvciBIb3N0Um9vdFxuICB2YXIgcXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcbiAgaGFzRm9yY2VVcGRhdGUgPSBmYWxzZTtcblxuICB7XG4gICAgY3VycmVudGx5UHJvY2Vzc2luZ1F1ZXVlID0gcXVldWUuc2hhcmVkO1xuICB9XG5cbiAgdmFyIGZpcnN0QmFzZVVwZGF0ZSA9IHF1ZXVlLmZpcnN0QmFzZVVwZGF0ZTtcbiAgdmFyIGxhc3RCYXNlVXBkYXRlID0gcXVldWUubGFzdEJhc2VVcGRhdGU7IC8vIENoZWNrIGlmIHRoZXJlIGFyZSBwZW5kaW5nIHVwZGF0ZXMuIElmIHNvLCB0cmFuc2ZlciB0aGVtIHRvIHRoZSBiYXNlIHF1ZXVlLlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5zaGFyZWQucGVuZGluZztcblxuICBpZiAocGVuZGluZ1F1ZXVlICE9PSBudWxsKSB7XG4gICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsOyAvLyBUaGUgcGVuZGluZyBxdWV1ZSBpcyBjaXJjdWxhci4gRGlzY29ubmVjdCB0aGUgcG9pbnRlciBiZXR3ZWVuIGZpcnN0XG4gICAgLy8gYW5kIGxhc3Qgc28gdGhhdCBpdCdzIG5vbi1jaXJjdWxhci5cblxuICAgIHZhciBsYXN0UGVuZGluZ1VwZGF0ZSA9IHBlbmRpbmdRdWV1ZTtcbiAgICB2YXIgZmlyc3RQZW5kaW5nVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGUubmV4dDtcbiAgICBsYXN0UGVuZGluZ1VwZGF0ZS5uZXh0ID0gbnVsbDsgLy8gQXBwZW5kIHBlbmRpbmcgdXBkYXRlcyB0byBiYXNlIHF1ZXVlXG5cbiAgICBpZiAobGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIGZpcnN0QmFzZVVwZGF0ZSA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEJhc2VVcGRhdGUubmV4dCA9IGZpcnN0UGVuZGluZ1VwZGF0ZTtcbiAgICB9XG5cbiAgICBsYXN0QmFzZVVwZGF0ZSA9IGxhc3RQZW5kaW5nVXBkYXRlOyAvLyBJZiB0aGVyZSdzIGEgY3VycmVudCBxdWV1ZSwgYW5kIGl0J3MgZGlmZmVyZW50IGZyb20gdGhlIGJhc2UgcXVldWUsIHRoZW5cbiAgICAvLyB3ZSBuZWVkIHRvIHRyYW5zZmVyIHRoZSB1cGRhdGVzIHRvIHRoYXQgcXVldWUsIHRvby4gQmVjYXVzZSB0aGUgYmFzZVxuICAgIC8vIHF1ZXVlIGlzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IHdpdGggbm8gY3ljbGVzLCB3ZSBjYW4gYXBwZW5kIHRvIGJvdGhcbiAgICAvLyBsaXN0cyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2Ygc3RydWN0dXJhbCBzaGFyaW5nLlxuICAgIC8vIFRPRE86IFBhc3MgYGN1cnJlbnRgIGFzIGFyZ3VtZW50XG5cbiAgICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGFsd2F5cyBub24tbnVsbCBvbiBhIENsYXNzQ29tcG9uZW50IG9yIEhvc3RSb290XG4gICAgICB2YXIgY3VycmVudFF1ZXVlID0gY3VycmVudC51cGRhdGVRdWV1ZTtcbiAgICAgIHZhciBjdXJyZW50TGFzdEJhc2VVcGRhdGUgPSBjdXJyZW50UXVldWUubGFzdEJhc2VVcGRhdGU7XG5cbiAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgIT09IGxhc3RCYXNlVXBkYXRlKSB7XG4gICAgICAgIGlmIChjdXJyZW50TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICBjdXJyZW50UXVldWUuZmlyc3RCYXNlVXBkYXRlID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGN1cnJlbnRMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gZmlyc3RQZW5kaW5nVXBkYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudFF1ZXVlLmxhc3RCYXNlVXBkYXRlID0gbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFRoZXNlIHZhbHVlcyBtYXkgY2hhbmdlIGFzIHdlIHByb2Nlc3MgdGhlIHF1ZXVlLlxuXG5cbiAgaWYgKGZpcnN0QmFzZVVwZGF0ZSAhPT0gbnVsbCkge1xuICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgbGlzdCBvZiB1cGRhdGVzIHRvIGNvbXB1dGUgdGhlIHJlc3VsdC5cbiAgICB2YXIgbmV3U3RhdGUgPSBxdWV1ZS5iYXNlU3RhdGU7IC8vIFRPRE86IERvbid0IG5lZWQgdG8gYWNjdW11bGF0ZSB0aGlzLiBJbnN0ZWFkLCB3ZSBjYW4gcmVtb3ZlIHJlbmRlckxhbmVzXG4gICAgLy8gZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cbiAgICB2YXIgbmV3TGFuZXMgPSBOb0xhbmVzO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdGaXJzdEJhc2VVcGRhdGUgPSBudWxsO1xuICAgIHZhciBuZXdMYXN0QmFzZVVwZGF0ZSA9IG51bGw7XG4gICAgdmFyIHVwZGF0ZSA9IGZpcnN0QmFzZVVwZGF0ZTtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG4gICAgICB2YXIgdXBkYXRlRXZlbnRUaW1lID0gdXBkYXRlLmV2ZW50VGltZTtcblxuICAgICAgaWYgKCFpc1N1YnNldE9mTGFuZXMocmVuZGVyTGFuZXMsIHVwZGF0ZUxhbmUpKSB7XG4gICAgICAgIC8vIFByaW9yaXR5IGlzIGluc3VmZmljaWVudC4gU2tpcCB0aGlzIHVwZGF0ZS4gSWYgdGhpcyBpcyB0aGUgZmlyc3RcbiAgICAgICAgLy8gc2tpcHBlZCB1cGRhdGUsIHRoZSBwcmV2aW91cyB1cGRhdGUvc3RhdGUgaXMgdGhlIG5ldyBiYXNlXG4gICAgICAgIC8vIHVwZGF0ZS9zdGF0ZS5cbiAgICAgICAgdmFyIGNsb25lID0ge1xuICAgICAgICAgIGV2ZW50VGltZTogdXBkYXRlRXZlbnRUaW1lLFxuICAgICAgICAgIGxhbmU6IHVwZGF0ZUxhbmUsXG4gICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgIHBheWxvYWQ6IHVwZGF0ZS5wYXlsb2FkLFxuICAgICAgICAgIGNhbGxiYWNrOiB1cGRhdGUuY2FsbGJhY2ssXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdMYXN0QmFzZVVwZGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIG5ld0ZpcnN0QmFzZVVwZGF0ZSA9IG5ld0xhc3RCYXNlVXBkYXRlID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gY2xvbmU7XG4gICAgICAgIH0gLy8gVXBkYXRlIHRoZSByZW1haW5pbmcgcHJpb3JpdHkgaW4gdGhlIHF1ZXVlLlxuXG5cbiAgICAgICAgbmV3TGFuZXMgPSBtZXJnZUxhbmVzKG5ld0xhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX2Nsb25lID0ge1xuICAgICAgICAgICAgZXZlbnRUaW1lOiB1cGRhdGVFdmVudFRpbWUsXG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgdGFnOiB1cGRhdGUudGFnLFxuICAgICAgICAgICAgcGF5bG9hZDogdXBkYXRlLnBheWxvYWQsXG4gICAgICAgICAgICBjYWxsYmFjazogdXBkYXRlLmNhbGxiYWNrLFxuICAgICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICAgIH07XG4gICAgICAgICAgbmV3TGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZS5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBuZXdTdGF0ZSA9IGdldFN0YXRlRnJvbVVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgcXVldWUsIHVwZGF0ZSwgbmV3U3RhdGUsIHByb3BzLCBpbnN0YW5jZSk7XG4gICAgICAgIHZhciBjYWxsYmFjayA9IHVwZGF0ZS5jYWxsYmFjaztcblxuICAgICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBDYWxsYmFjaztcbiAgICAgICAgICB2YXIgZWZmZWN0cyA9IHF1ZXVlLmVmZmVjdHM7XG5cbiAgICAgICAgICBpZiAoZWZmZWN0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcXVldWUuZWZmZWN0cyA9IFt1cGRhdGVdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBlZmZlY3RzLnB1c2godXBkYXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG5cbiAgICAgIGlmICh1cGRhdGUgPT09IG51bGwpIHtcbiAgICAgICAgcGVuZGluZ1F1ZXVlID0gcXVldWUuc2hhcmVkLnBlbmRpbmc7XG5cbiAgICAgICAgaWYgKHBlbmRpbmdRdWV1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEFuIHVwZGF0ZSB3YXMgc2NoZWR1bGVkIGZyb20gaW5zaWRlIGEgcmVkdWNlci4gQWRkIHRoZSBuZXdcbiAgICAgICAgICAvLyBwZW5kaW5nIHVwZGF0ZXMgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdCBhbmQga2VlcCBwcm9jZXNzaW5nLlxuICAgICAgICAgIHZhciBfbGFzdFBlbmRpbmdVcGRhdGUgPSBwZW5kaW5nUXVldWU7IC8vIEludGVudGlvbmFsbHkgdW5zb3VuZC4gUGVuZGluZyB1cGRhdGVzIGZvcm0gYSBjaXJjdWxhciBsaXN0LCBidXQgd2VcbiAgICAgICAgICAvLyB1bnJhdmVsIHRoZW0gd2hlbiB0cmFuc2ZlcnJpbmcgdGhlbSB0byB0aGUgYmFzZSBxdWV1ZS5cblxuICAgICAgICAgIHZhciBfZmlyc3RQZW5kaW5nVXBkYXRlID0gX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQ7XG4gICAgICAgICAgX2xhc3RQZW5kaW5nVXBkYXRlLm5leHQgPSBudWxsO1xuICAgICAgICAgIHVwZGF0ZSA9IF9maXJzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBfbGFzdFBlbmRpbmdVcGRhdGU7XG4gICAgICAgICAgcXVldWUuc2hhcmVkLnBlbmRpbmcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAodHJ1ZSk7XG5cbiAgICBpZiAobmV3TGFzdEJhc2VVcGRhdGUgPT09IG51bGwpIHtcbiAgICAgIG5ld0Jhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmJhc2VTdGF0ZSA9IG5ld0Jhc2VTdGF0ZTtcbiAgICBxdWV1ZS5maXJzdEJhc2VVcGRhdGUgPSBuZXdGaXJzdEJhc2VVcGRhdGU7XG4gICAgcXVldWUubGFzdEJhc2VVcGRhdGUgPSBuZXdMYXN0QmFzZVVwZGF0ZTsgLy8gU2V0IHRoZSByZW1haW5pbmcgZXhwaXJhdGlvbiB0aW1lIHRvIGJlIHdoYXRldmVyIGlzIHJlbWFpbmluZyBpbiB0aGUgcXVldWUuXG4gICAgLy8gVGhpcyBzaG91bGQgYmUgZmluZSBiZWNhdXNlIHRoZSBvbmx5IHR3byBvdGhlciB0aGluZ3MgdGhhdCBjb250cmlidXRlIHRvXG4gICAgLy8gZXhwaXJhdGlvbiB0aW1lIGFyZSBwcm9wcyBhbmQgY29udGV4dC4gV2UncmUgYWxyZWFkeSBpbiB0aGUgbWlkZGxlIG9mIHRoZVxuICAgIC8vIGJlZ2luIHBoYXNlIGJ5IHRoZSB0aW1lIHdlIHN0YXJ0IHByb2Nlc3NpbmcgdGhlIHF1ZXVlLCBzbyB3ZSd2ZSBhbHJlYWR5XG4gICAgLy8gZGVhbHQgd2l0aCB0aGUgcHJvcHMuIENvbnRleHQgaW4gY29tcG9uZW50cyB0aGF0IHNwZWNpZnlcbiAgICAvLyBzaG91bGRDb21wb25lbnRVcGRhdGUgaXMgdHJpY2t5OyBidXQgd2UnbGwgaGF2ZSB0byBhY2NvdW50IGZvclxuICAgIC8vIHRoYXQgcmVnYXJkbGVzcy5cblxuICAgIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMobmV3TGFuZXMpO1xuICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbmV3TGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9XG5cbiAge1xuICAgIGN1cnJlbnRseVByb2Nlc3NpbmdRdWV1ZSA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBjb250ZXh0KSB7XG4gIGlmICghKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGFyZ3VtZW50IHBhc3NlZCBhcyBjYWxsYmFjay4gRXhwZWN0ZWQgYSBmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogXCIgKyBjYWxsYmFjayApO1xuICAgIH1cbiAgfVxuXG4gIGNhbGxiYWNrLmNhbGwoY29udGV4dCk7XG59XG5cbmZ1bmN0aW9uIHJlc2V0SGFzRm9yY2VVcGRhdGVCZWZvcmVQcm9jZXNzaW5nKCkge1xuICBoYXNGb3JjZVVwZGF0ZSA9IGZhbHNlO1xufVxuZnVuY3Rpb24gY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpIHtcbiAgcmV0dXJuIGhhc0ZvcmNlVXBkYXRlO1xufVxuZnVuY3Rpb24gY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCBmaW5pc2hlZFF1ZXVlLCBpbnN0YW5jZSkge1xuICAvLyBDb21taXQgdGhlIGVmZmVjdHNcbiAgdmFyIGVmZmVjdHMgPSBmaW5pc2hlZFF1ZXVlLmVmZmVjdHM7XG4gIGZpbmlzaGVkUXVldWUuZWZmZWN0cyA9IG51bGw7XG5cbiAgaWYgKGVmZmVjdHMgIT09IG51bGwpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVmZmVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBlZmZlY3QgPSBlZmZlY3RzW2ldO1xuICAgICAgdmFyIGNhbGxiYWNrID0gZWZmZWN0LmNhbGxiYWNrO1xuXG4gICAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgICAgZWZmZWN0LmNhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbENhbGxiYWNrKGNhbGxiYWNrLCBpbnN0YW5jZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBmYWtlSW50ZXJuYWxJbnN0YW5jZSA9IHt9O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5OyAvLyBSZWFjdC5Db21wb25lbnQgdXNlcyBhIHNoYXJlZCBmcm96ZW4gb2JqZWN0IGJ5IGRlZmF1bHQuXG4vLyBXZSdsbCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBpbml0aWFsaXplIGxlZ2FjeSByZWZzLlxuXG52YXIgZW1wdHlSZWZzT2JqZWN0ID0gbmV3IFJlYWN0LkNvbXBvbmVudCgpLnJlZnM7XG52YXIgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGU7XG52YXIgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGU7XG52YXIgd2Fybk9uVW5kZWZpbmVkRGVyaXZlZFN0YXRlO1xudmFyIHdhcm5PbkludmFsaWRDYWxsYmFjaztcbnZhciBkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZTtcbnZhciBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcztcbnZhciBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGU7XG5cbntcbiAgZGlkV2FybkFib3V0U3RhdGVBc3NpZ25tZW50Rm9yQ29tcG9uZW50ID0gbmV3IFNldCgpO1xuICBkaWRXYXJuQWJvdXRVbmluaXRpYWxpemVkU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEdldFNuYXBzaG90QmVmb3JlVXBkYXRlV2l0aG91dERpZFVwZGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dFVuZGVmaW5lZERlcml2ZWRTdGF0ZSA9IG5ldyBTZXQoKTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMgPSBuZXcgU2V0KCk7XG4gIGRpZFdhcm5BYm91dEludmFsaWRhdGVDb250ZXh0VHlwZSA9IG5ldyBTZXQoKTtcbiAgdmFyIGRpZFdhcm5PbkludmFsaWRDYWxsYmFjayA9IG5ldyBTZXQoKTtcblxuICB3YXJuT25JbnZhbGlkQ2FsbGJhY2sgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IG51bGwgfHwgdHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IGNhbGxlck5hbWUgKyAnXycgKyBjYWxsYmFjaztcblxuICAgIGlmICghZGlkV2Fybk9uSW52YWxpZENhbGxiYWNrLmhhcyhrZXkpKSB7XG4gICAgICBkaWRXYXJuT25JbnZhbGlkQ2FsbGJhY2suYWRkKGtleSk7XG5cbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfTtcblxuICB3YXJuT25VbmRlZmluZWREZXJpdmVkU3RhdGUgPSBmdW5jdGlvbiAodHlwZSwgcGFydGlhbFN0YXRlKSB7XG4gICAgaWYgKHBhcnRpYWxTdGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSkgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgIGlmICghZGlkV2FybkFib3V0VW5kZWZpbmVkRGVyaXZlZFN0YXRlLmhhcyhjb21wb25lbnROYW1lKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRVbmRlZmluZWREZXJpdmVkU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclcy5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKTogQSB2YWxpZCBzdGF0ZSBvYmplY3QgKG9yIG51bGwpIG11c3QgYmUgcmV0dXJuZWQuICcgKyAnWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfTsgLy8gVGhpcyBpcyBzbyBncm9zcyBidXQgaXQncyBhdCBsZWFzdCBub24tY3JpdGljYWwgYW5kIGNhbiBiZSByZW1vdmVkIGlmXG4gIC8vIGl0IGNhdXNlcyBwcm9ibGVtcy4gVGhpcyBpcyBtZWFudCB0byBnaXZlIGEgbmljZXIgZXJyb3IgbWVzc2FnZSBmb3JcbiAgLy8gUmVhY3RET00xNS51bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihyZWFjdERPTTE2Q29tcG9uZW50LFxuICAvLyAuLi4pKSB3aGljaCBvdGhlcndpc2UgdGhyb3dzIGEgXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYSBmdW5jdGlvblwiXG4gIC8vIGV4Y2VwdGlvbi5cblxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmYWtlSW50ZXJuYWxJbnN0YW5jZSwgJ19wcm9jZXNzQ2hpbGRDb250ZXh0Jywge1xuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJfcHJvY2Vzc0NoaWxkQ29udGV4dCBpcyBub3QgYXZhaWxhYmxlIGluIFJlYWN0IDE2Ky4gVGhpcyBsaWtlbHkgbWVhbnMgeW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGFuZCBhcmUgYXR0ZW1wdGluZyB0byBuZXN0IGEgUmVhY3QgMTUgdHJlZSBpbnNpZGUgYSBSZWFjdCAxNiB0cmVlIHVzaW5nIHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQuIFRyeSB0byBtYWtlIHN1cmUgeW91IGhhdmUgb25seSBvbmUgY29weSBvZiBSZWFjdCAoYW5kIGlkZWFsbHksIHN3aXRjaCB0byBSZWFjdERPTS5jcmVhdGVQb3J0YWwpLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBPYmplY3QuZnJlZXplKGZha2VJbnRlcm5hbEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHBhcnRpYWxTdGF0ZSA9IGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG5cbiAge1xuICAgIHdhcm5PblVuZGVmaW5lZERlcml2ZWRTdGF0ZShjdG9yLCBwYXJ0aWFsU3RhdGUpO1xuICB9IC8vIE1lcmdlIHRoZSBwYXJ0aWFsIHN0YXRlIGFuZCB0aGUgcHJldmlvdXMgc3RhdGUuXG5cblxuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IHBhcnRpYWxTdGF0ZSA9PT0gbnVsbCB8fCBwYXJ0aWFsU3RhdGUgPT09IHVuZGVmaW5lZCA/IHByZXZTdGF0ZSA6IF9hc3NpZ24oe30sIHByZXZTdGF0ZSwgcGFydGlhbFN0YXRlKTtcbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG1lbW9pemVkU3RhdGU7IC8vIE9uY2UgdGhlIHVwZGF0ZSBxdWV1ZSBpcyBlbXB0eSwgcGVyc2lzdCB0aGUgZGVyaXZlZCBzdGF0ZSBvbnRvIHRoZVxuICAvLyBiYXNlIHN0YXRlLlxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFF1ZXVlIGlzIGFsd2F5cyBub24tbnVsbCBmb3IgY2xhc3Nlc1xuICAgIHZhciB1cGRhdGVRdWV1ZSA9IHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlO1xuICAgIHVwZGF0ZVF1ZXVlLmJhc2VTdGF0ZSA9IG1lbW9pemVkU3RhdGU7XG4gIH1cbn1cbnZhciBjbGFzc0NvbXBvbmVudFVwZGF0ZXIgPSB7XG4gIGlzTW91bnRlZDogaXNNb3VudGVkLFxuICBlbnF1ZXVlU2V0U3RhdGU6IGZ1bmN0aW9uIChpbnN0LCBwYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUucGF5bG9hZCA9IHBheWxvYWQ7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdzZXRTdGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfSxcbiAgZW5xdWV1ZVJlcGxhY2VTdGF0ZTogZnVuY3Rpb24gKGluc3QsIHBheWxvYWQsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGluc3QpO1xuICAgIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShldmVudFRpbWUsIGxhbmUpO1xuICAgIHVwZGF0ZS50YWcgPSBSZXBsYWNlU3RhdGU7XG4gICAgdXBkYXRlLnBheWxvYWQgPSBwYXlsb2FkO1xuXG4gICAgaWYgKGNhbGxiYWNrICE9PSB1bmRlZmluZWQgJiYgY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHtcbiAgICAgICAgd2Fybk9uSW52YWxpZENhbGxiYWNrKGNhbGxiYWNrLCAncmVwbGFjZVN0YXRlJyk7XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZS5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGVucXVldWVVcGRhdGUoZmliZXIsIHVwZGF0ZSk7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICB9LFxuICBlbnF1ZXVlRm9yY2VVcGRhdGU6IGZ1bmN0aW9uIChpbnN0LCBjYWxsYmFjaykge1xuICAgIHZhciBmaWJlciA9IGdldChpbnN0KTtcbiAgICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuICAgIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICAgIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTtcbiAgICB1cGRhdGUudGFnID0gRm9yY2VVcGRhdGU7XG5cbiAgICBpZiAoY2FsbGJhY2sgIT09IHVuZGVmaW5lZCAmJiBjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAge1xuICAgICAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2soY2FsbGJhY2ssICdmb3JjZVVwZGF0ZScpO1xuICAgICAgfVxuXG4gICAgICB1cGRhdGUuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBlbnF1ZXVlVXBkYXRlKGZpYmVyLCB1cGRhdGUpO1xuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCkge1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICAgIGRpc2FibGVMb2dzKCk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJbnZva2UgdGhlIGZ1bmN0aW9uIGFuIGV4dHJhIHRpbWUgdG8gaGVscCBkZXRlY3Qgc2lkZS1lZmZlY3RzLlxuICAgICAgICAgIGluc3RhbmNlLnNob3VsZENvbXBvbmVudFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBzaG91bGRVcGRhdGUgPSBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgICB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZXJyb3IoJyVzLnNob3VsZENvbXBvbmVudFVwZGF0ZSgpOiBSZXR1cm5lZCB1bmRlZmluZWQgaW5zdGVhZCBvZiBhICcgKyAnYm9vbGVhbiB2YWx1ZS4gTWFrZSBzdXJlIHRvIHJldHVybiB0cnVlIG9yIGZhbHNlLicsIGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaG91bGRVcGRhdGU7XG4gIH1cblxuICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgY3Rvci5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQpIHtcbiAgICByZXR1cm4gIXNoYWxsb3dFcXVhbChvbGRQcm9wcywgbmV3UHJvcHMpIHx8ICFzaGFsbG93RXF1YWwob2xkU3RhdGUsIG5ld1N0YXRlKTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBjaGVja0NsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG5ld1Byb3BzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcblxuICB7XG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuICAgIHZhciByZW5kZXJQcmVzZW50ID0gaW5zdGFuY2UucmVuZGVyO1xuXG4gICAgaWYgKCFyZW5kZXJQcmVzZW50KSB7XG4gICAgICBpZiAoY3Rvci5wcm90b3R5cGUgJiYgdHlwZW9mIGN0b3IucHJvdG90eXBlLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignJXMoLi4uKTogTm8gYHJlbmRlcmAgbWV0aG9kIGZvdW5kIG9uIHRoZSByZXR1cm5lZCBjb21wb25lbnQgJyArICdpbnN0YW5jZTogZGlkIHlvdSBhY2NpZGVudGFsbHkgcmV0dXJuIGFuIG9iamVjdCBmcm9tIHRoZSBjb25zdHJ1Y3Rvcj8nLCBuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yKCclcyguLi4pOiBObyBgcmVuZGVyYCBtZXRob2QgZm91bmQgb24gdGhlIHJldHVybmVkIGNvbXBvbmVudCAnICsgJ2luc3RhbmNlOiB5b3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIGRlZmluZSBgcmVuZGVyYC4nLCBuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZ2V0SW5pdGlhbFN0YXRlICYmICFpbnN0YW5jZS5nZXRJbml0aWFsU3RhdGUuaXNSZWFjdENsYXNzQXBwcm92ZWQgJiYgIWluc3RhbmNlLnN0YXRlKSB7XG4gICAgICBlcnJvcignZ2V0SW5pdGlhbFN0YXRlIHdhcyBkZWZpbmVkIG9uICVzLCBhIHBsYWluIEphdmFTY3JpcHQgY2xhc3MuICcgKyAnVGhpcyBpcyBvbmx5IHN1cHBvcnRlZCBmb3IgY2xhc3NlcyBjcmVhdGVkIHVzaW5nIFJlYWN0LmNyZWF0ZUNsYXNzLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBkZWZpbmUgYSBzdGF0ZSBwcm9wZXJ0eSBpbnN0ZWFkPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5nZXREZWZhdWx0UHJvcHMgJiYgIWluc3RhbmNlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyB3YXMgZGVmaW5lZCBvbiAlcywgYSBwbGFpbiBKYXZhU2NyaXB0IGNsYXNzLiAnICsgJ1RoaXMgaXMgb25seSBzdXBwb3J0ZWQgZm9yIGNsYXNzZXMgY3JlYXRlZCB1c2luZyBSZWFjdC5jcmVhdGVDbGFzcy4gJyArICdVc2UgYSBzdGF0aWMgcHJvcGVydHkgdG8gZGVmaW5lIGRlZmF1bHRQcm9wcyBpbnN0ZWFkLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmIChpbnN0YW5jZS5wcm9wVHlwZXMpIHtcbiAgICAgIGVycm9yKCdwcm9wVHlwZXMgd2FzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMuIFVzZSBhIHN0YXRpYyAnICsgJ3Byb3BlcnR5IHRvIGRlZmluZSBwcm9wVHlwZXMgaW5zdGVhZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuY29udGV4dFR5cGUpIHtcbiAgICAgIGVycm9yKCdjb250ZXh0VHlwZSB3YXMgZGVmaW5lZCBhcyBhbiBpbnN0YW5jZSBwcm9wZXJ0eSBvbiAlcy4gVXNlIGEgc3RhdGljICcgKyAncHJvcGVydHkgdG8gZGVmaW5lIGNvbnRleHRUeXBlIGluc3RlYWQuJywgbmFtZSk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKGluc3RhbmNlLmNvbnRleHRUeXBlcykge1xuICAgICAgICBlcnJvcignY29udGV4dFR5cGVzIHdhcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIHByb3BlcnR5IG9uICVzLiBVc2UgYSBzdGF0aWMgJyArICdwcm9wZXJ0eSB0byBkZWZpbmUgY29udGV4dFR5cGVzIGluc3RlYWQuJywgbmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjdG9yLmNvbnRleHRUeXBlICYmIGN0b3IuY29udGV4dFR5cGVzICYmICFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZUFuZENvbnRleHRUeXBlcy5oYXMoY3RvcikpIHtcbiAgICAgICAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVBbmRDb250ZXh0VHlwZXMuYWRkKGN0b3IpO1xuXG4gICAgICAgIGVycm9yKCclcyBkZWNsYXJlcyBib3RoIGNvbnRleHRUeXBlcyBhbmQgY29udGV4dFR5cGUgc3RhdGljIHByb3BlcnRpZXMuICcgKyAnVGhlIGxlZ2FjeSBjb250ZXh0VHlwZXMgcHJvcGVydHkgd2lsbCBiZSBpZ25vcmVkLicsIG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50U2hvdWxkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCAnICsgJ2NvbXBvbmVudFNob3VsZFVwZGF0ZSgpLiBEaWQgeW91IG1lYW4gc2hvdWxkQ29tcG9uZW50VXBkYXRlKCk/ICcgKyAnVGhlIG5hbWUgaXMgcGhyYXNlZCBhcyBhIHF1ZXN0aW9uIGJlY2F1c2UgdGhlIGZ1bmN0aW9uIGlzICcgKyAnZXhwZWN0ZWQgdG8gcmV0dXJuIGEgdmFsdWUuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGN0b3IucHJvdG90eXBlICYmIGN0b3IucHJvdG90eXBlLmlzUHVyZVJlYWN0Q29tcG9uZW50ICYmIHR5cGVvZiBpbnN0YW5jZS5zaG91bGRDb21wb25lbnRVcGRhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBlcnJvcignJXMgaGFzIGEgbWV0aG9kIGNhbGxlZCBzaG91bGRDb21wb25lbnRVcGRhdGUoKS4gJyArICdzaG91bGRDb21wb25lbnRVcGRhdGUgc2hvdWxkIG5vdCBiZSB1c2VkIHdoZW4gZXh0ZW5kaW5nIFJlYWN0LlB1cmVDb21wb25lbnQuICcgKyAnUGxlYXNlIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIGlzIHVzZWQuJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQSBwdXJlIGNvbXBvbmVudCcpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVW5tb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzIGhhcyBhIG1ldGhvZCBjYWxsZWQgJyArICdjb21wb25lbnREaWRVbm1vdW50KCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnRGlkIHlvdSBtZWFuIGNvbXBvbmVudFdpbGxVbm1vdW50KCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50RGlkUmVjZWl2ZVByb3BzKCkuIEJ1dCB0aGVyZSBpcyBubyBzdWNoIGxpZmVjeWNsZSBtZXRob2QuICcgKyAnSWYgeW91IG1lYW50IHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gcmVzcG9uc2UgdG8gY2hhbmdpbmcgcHJvcHMsICcgKyAndXNlIGNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKS4gSWYgeW91IG1lYW50IHRvIGZldGNoIGRhdGEgb3IgJyArICdydW4gc2lkZS1lZmZlY3RzIG9yIG11dGF0aW9ucyBhZnRlciBSZWFjdCBoYXMgdXBkYXRlZCB0aGUgVUksIHVzZSBjb21wb25lbnREaWRVcGRhdGUoKS4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnY29tcG9uZW50V2lsbFJlY2lldmVQcm9wcygpLiBEaWQgeW91IG1lYW4gY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcygpPycsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyBoYXMgYSBtZXRob2QgY2FsbGVkICcgKyAnVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNpZXZlUHJvcHMoKS4gRGlkIHlvdSBtZWFuIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKCk/JywgbmFtZSk7XG4gICAgfVxuXG4gICAgdmFyIGhhc011dGF0ZWRQcm9wcyA9IGluc3RhbmNlLnByb3BzICE9PSBuZXdQcm9wcztcblxuICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gdW5kZWZpbmVkICYmIGhhc011dGF0ZWRQcm9wcykge1xuICAgICAgZXJyb3IoJyVzKC4uLik6IFdoZW4gY2FsbGluZyBzdXBlcigpIGluIGAlc2AsIG1ha2Ugc3VyZSB0byBwYXNzICcgKyBcInVwIHRoZSBzYW1lIHByb3BzIHRoYXQgeW91ciBjb21wb25lbnQncyBjb25zdHJ1Y3RvciB3YXMgcGFzc2VkLlwiLCBuYW1lLCBuYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuZGVmYXVsdFByb3BzKSB7XG4gICAgICBlcnJvcignU2V0dGluZyBkZWZhdWx0UHJvcHMgYXMgYW4gaW5zdGFuY2UgcHJvcGVydHkgb24gJXMgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSBpZ25vcmVkLicgKyAnIEluc3RlYWQsIGRlZmluZSBkZWZhdWx0UHJvcHMgYXMgYSBzdGF0aWMgcHJvcGVydHkgb24gJXMuJywgbmFtZSwgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICFkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuaGFzKGN0b3IpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRHZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZVdpdGhvdXREaWRVcGRhdGUuYWRkKGN0b3IpO1xuXG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgc2hvdWxkIGJlIHVzZWQgd2l0aCBjb21wb25lbnREaWRVcGRhdGUoKS4gJyArICdUaGlzIGNvbXBvbmVudCBkZWZpbmVzIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgb25seS4nLCBnZXRDb21wb25lbnROYW1lKGN0b3IpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJyVzOiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoKSBpcyBkZWZpbmVkIGFzIGFuIGluc3RhbmNlIG1ldGhvZCAnICsgJ2FuZCB3aWxsIGJlIGlnbm9yZWQuIEluc3RlYWQsIGRlY2xhcmUgaXQgYXMgYSBzdGF0aWMgbWV0aG9kLicsIG5hbWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldERlcml2ZWRTdGF0ZUZyb21FcnJvcigpIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kICcgKyAnYW5kIHdpbGwgYmUgaWdub3JlZC4gSW5zdGVhZCwgZGVjbGFyZSBpdCBhcyBhIHN0YXRpYyBtZXRob2QuJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignJXM6IGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCkgaXMgZGVmaW5lZCBhcyBhIHN0YXRpYyBtZXRob2QgJyArICdhbmQgd2lsbCBiZSBpZ25vcmVkLiBJbnN0ZWFkLCBkZWNsYXJlIGl0IGFzIGFuIGluc3RhbmNlIG1ldGhvZC4nLCBuYW1lKTtcbiAgICB9XG5cbiAgICB2YXIgX3N0YXRlID0gaW5zdGFuY2Uuc3RhdGU7XG5cbiAgICBpZiAoX3N0YXRlICYmICh0eXBlb2YgX3N0YXRlICE9PSAnb2JqZWN0JyB8fCBpc0FycmF5KF9zdGF0ZSkpKSB7XG4gICAgICBlcnJvcignJXMuc3RhdGU6IG11c3QgYmUgc2V0IHRvIGFuIG9iamVjdCBvciBudWxsJywgbmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRDaGlsZENvbnRleHQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0b3IuY2hpbGRDb250ZXh0VHlwZXMgIT09ICdvYmplY3QnKSB7XG4gICAgICBlcnJvcignJXMuZ2V0Q2hpbGRDb250ZXh0KCk6IGNoaWxkQ29udGV4dFR5cGVzIG11c3QgYmUgZGVmaW5lZCBpbiBvcmRlciB0byAnICsgJ3VzZSBnZXRDaGlsZENvbnRleHQoKS4nLCBuYW1lKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRvcHRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS51cGRhdGVyID0gY2xhc3NDb21wb25lbnRVcGRhdGVyO1xuICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gVGhlIGluc3RhbmNlIG5lZWRzIGFjY2VzcyB0byB0aGUgZmliZXIgc28gdGhhdCBpdCBjYW4gc2NoZWR1bGUgdXBkYXRlc1xuXG4gIHNldChpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MpO1xuXG4gIHtcbiAgICBpbnN0YW5jZS5fcmVhY3RJbnRlcm5hbEluc3RhbmNlID0gZmFrZUludGVybmFsSW5zdGFuY2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3RydWN0Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgcHJvcHMpIHtcbiAgdmFyIGlzTGVnYWN5Q29udGV4dENvbnN1bWVyID0gZmFsc2U7XG4gIHZhciB1bm1hc2tlZENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIHZhciBjb250ZXh0ID0gZW1wdHlDb250ZXh0T2JqZWN0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuXG4gIHtcbiAgICBpZiAoJ2NvbnRleHRUeXBlJyBpbiBjdG9yKSB7XG4gICAgICB2YXIgaXNWYWxpZCA9IC8vIEFsbG93IG51bGwgZm9yIGNvbmRpdGlvbmFsIGRlY2xhcmF0aW9uXG4gICAgICBjb250ZXh0VHlwZSA9PT0gbnVsbCB8fCBjb250ZXh0VHlwZSAhPT0gdW5kZWZpbmVkICYmIGNvbnRleHRUeXBlLiQkdHlwZW9mID09PSBSRUFDVF9DT05URVhUX1RZUEUgJiYgY29udGV4dFR5cGUuX2NvbnRleHQgPT09IHVuZGVmaW5lZDsgLy8gTm90IGEgPENvbnRleHQuQ29uc3VtZXI+XG5cbiAgICAgIGlmICghaXNWYWxpZCAmJiAhZGlkV2FybkFib3V0SW52YWxpZGF0ZUNvbnRleHRUeXBlLmhhcyhjdG9yKSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRJbnZhbGlkYXRlQ29udGV4dFR5cGUuYWRkKGN0b3IpO1xuICAgICAgICB2YXIgYWRkZW5kdW0gPSAnJztcblxuICAgICAgICBpZiAoY29udGV4dFR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZGVuZHVtID0gJyBIb3dldmVyLCBpdCBpcyBzZXQgdG8gdW5kZWZpbmVkLiAnICsgJ1RoaXMgY2FuIGJlIGNhdXNlZCBieSBhIHR5cG8gb3IgYnkgbWl4aW5nIHVwIG5hbWVkIGFuZCBkZWZhdWx0IGltcG9ydHMuICcgKyAnVGhpcyBjYW4gYWxzbyBoYXBwZW4gZHVlIHRvIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSwgc28gJyArICd0cnkgbW92aW5nIHRoZSBjcmVhdGVDb250ZXh0KCkgY2FsbCB0byBhIHNlcGFyYXRlIGZpbGUuJztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY29udGV4dFR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgYWRkZW5kdW0gPSAnIEhvd2V2ZXIsIGl0IGlzIHNldCB0byBhICcgKyB0eXBlb2YgY29udGV4dFR5cGUgKyAnLic7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUpIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgcGFzcyB0aGUgQ29udGV4dC5Qcm92aWRlciBpbnN0ZWFkPyc7XG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIDxDb250ZXh0LkNvbnN1bWVyPlxuICAgICAgICAgIGFkZGVuZHVtID0gJyBEaWQgeW91IGFjY2lkZW50YWxseSBwYXNzIHRoZSBDb250ZXh0LkNvbnN1bWVyIGluc3RlYWQ/JztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhZGRlbmR1bSA9ICcgSG93ZXZlciwgaXQgaXMgc2V0IHRvIGFuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhjb250ZXh0VHlwZSkuam9pbignLCAnKSArICd9Lic7XG4gICAgICAgIH1cblxuICAgICAgICBlcnJvcignJXMgZGVmaW5lcyBhbiBpbnZhbGlkIGNvbnRleHRUeXBlLiAnICsgJ2NvbnRleHRUeXBlIHNob3VsZCBwb2ludCB0byB0aGUgQ29udGV4dCBvYmplY3QgcmV0dXJuZWQgYnkgUmVhY3QuY3JlYXRlQ29udGV4dCgpLiVzJywgZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JywgYWRkZW5kdW0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgY29udGV4dFR5cGUgPT09ICdvYmplY3QnICYmIGNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgY29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIHZhciBjb250ZXh0VHlwZXMgPSBjdG9yLmNvbnRleHRUeXBlcztcbiAgICBpc0xlZ2FjeUNvbnRleHRDb25zdW1lciA9IGNvbnRleHRUeXBlcyAhPT0gbnVsbCAmJiBjb250ZXh0VHlwZXMgIT09IHVuZGVmaW5lZDtcbiAgICBjb250ZXh0ID0gaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIgPyBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpIDogZW1wdHlDb250ZXh0T2JqZWN0O1xuICB9IC8vIEluc3RhbnRpYXRlIHR3aWNlIHRvIGhlbHAgZGV0ZWN0IHNpZGUtZWZmZWN0cy5cblxuXG4gIHtcbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSBuZXcgY3Rvcihwcm9wcywgY29udGV4dCk7XG4gIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSAhPT0gbnVsbCAmJiBpbnN0YW5jZS5zdGF0ZSAhPT0gdW5kZWZpbmVkID8gaW5zdGFuY2Uuc3RhdGUgOiBudWxsO1xuICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcblxuICB7XG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyAmJiBzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGN0b3IpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFVuaW5pdGlhbGl6ZWRTdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0VW5pbml0aWFsaXplZFN0YXRlLmFkZChjb21wb25lbnROYW1lKTtcblxuICAgICAgICBlcnJvcignYCVzYCB1c2VzIGBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNgIGJ1dCBpdHMgaW5pdGlhbCBzdGF0ZSBpcyAnICsgJyVzLiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZC4gSW5zdGVhZCwgZGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlIGJ5ICcgKyAnYXNzaWduaW5nIGFuIG9iamVjdCB0byBgdGhpcy5zdGF0ZWAgaW4gdGhlIGNvbnN0cnVjdG9yIG9mIGAlc2AuICcgKyAnVGhpcyBlbnN1cmVzIHRoYXQgYGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc2AgYXJndW1lbnRzIGhhdmUgYSBjb25zaXN0ZW50IHNoYXBlLicsIGNvbXBvbmVudE5hbWUsIGluc3RhbmNlLnN0YXRlID09PSBudWxsID8gJ251bGwnIDogJ3VuZGVmaW5lZCcsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH0gLy8gSWYgbmV3IGNvbXBvbmVudCBBUElzIGFyZSBkZWZpbmVkLCBcInVuc2FmZVwiIGxpZmVjeWNsZXMgd29uJ3QgYmUgY2FsbGVkLlxuICAgIC8vIFdhcm4gYWJvdXQgdGhlc2UgbGlmZWN5Y2xlcyBpZiB0aGV5IGFyZSBwcmVzZW50LlxuICAgIC8vIERvbid0IHdhcm4gYWJvdXQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBtZXRob2RzIHRob3VnaC5cblxuXG4gICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBmb3VuZFdpbGxNb3VudE5hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSBudWxsO1xuICAgICAgdmFyIGZvdW5kV2lsbFVwZGF0ZU5hbWUgPSBudWxsO1xuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxNb3VudE5hbWUgPSAnY29tcG9uZW50V2lsbE1vdW50JztcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsTW91bnROYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsTW91bnQnO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicgJiYgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcy5fX3N1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5nICE9PSB0cnVlKSB7XG4gICAgICAgIGZvdW5kV2lsbFJlY2VpdmVQcm9wc05hbWUgPSAnY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyc7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lID0gJ1VOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsVXBkYXRlID09PSAnZnVuY3Rpb24nICYmIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUuX19zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZyAhPT0gdHJ1ZSkge1xuICAgICAgICBmb3VuZFdpbGxVcGRhdGVOYW1lID0gJ2NvbXBvbmVudFdpbGxVcGRhdGUnO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZm91bmRXaWxsVXBkYXRlTmFtZSA9ICdVTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3VuZFdpbGxNb3VudE5hbWUgIT09IG51bGwgfHwgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSAhPT0gbnVsbCB8fCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBfY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoY3RvcikgfHwgJ0NvbXBvbmVudCc7XG5cbiAgICAgICAgdmFyIG5ld0FwaU5hbWUgPSB0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgPyAnZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKCknIDogJ2dldFNuYXBzaG90QmVmb3JlVXBkYXRlKCknO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5oYXMoX2NvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgICAgZGlkV2FybkFib3V0TGVnYWN5TGlmZWN5Y2xlc0FuZERlcml2ZWRTdGF0ZS5hZGQoX2NvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgICAgZXJyb3IoJ1Vuc2FmZSBsZWdhY3kgbGlmZWN5Y2xlcyB3aWxsIG5vdCBiZSBjYWxsZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgbmV3IGNvbXBvbmVudCBBUElzLlxcblxcbicgKyAnJXMgdXNlcyAlcyBidXQgYWxzbyBjb250YWlucyB0aGUgZm9sbG93aW5nIGxlZ2FjeSBsaWZlY3ljbGVzOiVzJXMlc1xcblxcbicgKyAnVGhlIGFib3ZlIGxpZmVjeWNsZXMgc2hvdWxkIGJlIHJlbW92ZWQuIExlYXJuIG1vcmUgYWJvdXQgdGhpcyB3YXJuaW5nIGhlcmU6XFxuJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvdW5zYWZlLWNvbXBvbmVudC1saWZlY3ljbGVzJywgX2NvbXBvbmVudE5hbWUsIG5ld0FwaU5hbWUsIGZvdW5kV2lsbE1vdW50TmFtZSAhPT0gbnVsbCA/IFwiXFxuICBcIiArIGZvdW5kV2lsbE1vdW50TmFtZSA6ICcnLCBmb3VuZFdpbGxSZWNlaXZlUHJvcHNOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsUmVjZWl2ZVByb3BzTmFtZSA6ICcnLCBmb3VuZFdpbGxVcGRhdGVOYW1lICE9PSBudWxsID8gXCJcXG4gIFwiICsgZm91bmRXaWxsVXBkYXRlTmFtZSA6ICcnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBDYWNoZSB1bm1hc2tlZCBjb250ZXh0IHNvIHdlIGNhbiBhdm9pZCByZWNyZWF0aW5nIG1hc2tlZCBjb250ZXh0IHVubGVzcyBuZWNlc3NhcnkuXG4gIC8vIFJlYWN0RmliZXJDb250ZXh0IHVzdWFsbHkgdXBkYXRlcyB0aGlzIGNhY2hlIGJ1dCBjYW4ndCBmb3IgbmV3bHktY3JlYXRlZCBpbnN0YW5jZXMuXG5cblxuICBpZiAoaXNMZWdhY3lDb250ZXh0Q29uc3VtZXIpIHtcbiAgICBjYWNoZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gIH1cblxuICBpZiAob2xkU3RhdGUgIT09IGluc3RhbmNlLnN0YXRlKSB7XG4gICAge1xuICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxNb3VudCgpOiBBc3NpZ25pbmcgZGlyZWN0bHkgdG8gdGhpcy5zdGF0ZSBpcyAnICsgXCJkZXByZWNhdGVkIChleGNlcHQgaW5zaWRlIGEgY29tcG9uZW50J3MgXCIgKyAnY29uc3RydWN0b3IpLiBVc2Ugc2V0U3RhdGUgaW5zdGVhZC4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdDb21wb25lbnQnKTtcbiAgICB9XG5cbiAgICBjbGFzc0NvbXBvbmVudFVwZGF0ZXIuZW5xdWV1ZVJlcGxhY2VTdGF0ZShpbnN0YW5jZSwgaW5zdGFuY2Uuc3RhdGUsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KSB7XG4gIHZhciBvbGRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlO1xuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXdQcm9wcywgbmV4dENvbnRleHQpO1xuICB9XG5cbiAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdGF0ZUFzc2lnbm1lbnRGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFN0YXRlQXNzaWdubWVudEZvckNvbXBvbmVudC5hZGQoY29tcG9uZW50TmFtZSk7XG5cbiAgICAgICAgZXJyb3IoJyVzLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMoKTogQXNzaWduaW5nIGRpcmVjdGx5IHRvICcgKyBcInRoaXMuc3RhdGUgaXMgZGVwcmVjYXRlZCAoZXhjZXB0IGluc2lkZSBhIGNvbXBvbmVudCdzIFwiICsgJ2NvbnN0cnVjdG9yKS4gVXNlIHNldFN0YXRlIGluc3RlYWQuJywgY29tcG9uZW50TmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3NDb21wb25lbnRVcGRhdGVyLmVucXVldWVSZXBsYWNlU3RhdGUoaW5zdGFuY2UsIGluc3RhbmNlLnN0YXRlLCBudWxsKTtcbiAgfVxufSAvLyBJbnZva2VzIHRoZSBtb3VudCBsaWZlLWN5Y2xlcyBvbiBhIHByZXZpb3VzbHkgbmV2ZXIgcmVuZGVyZWQgaW5zdGFuY2UuXG5cblxuZnVuY3Rpb24gbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGNoZWNrQ2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMpO1xuICB9XG5cbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gIGluc3RhbmNlLnJlZnMgPSBlbXB0eVJlZnNPYmplY3Q7XG4gIGluaXRpYWxpemVVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBpbnN0YW5jZS5jb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIGN0b3IsIHRydWUpO1xuICAgIGluc3RhbmNlLmNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAge1xuICAgIGlmIChpbnN0YW5jZS5zdGF0ZSA9PT0gbmV3UHJvcHMpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdG9yKSB8fCAnQ29tcG9uZW50JztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXREaXJlY3RseUFzc2lnbmluZ1Byb3BzVG9TdGF0ZS5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgZGlkV2FybkFib3V0RGlyZWN0bHlBc3NpZ25pbmdQcm9wc1RvU3RhdGUuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICAgIGVycm9yKCclczogSXQgaXMgbm90IHJlY29tbWVuZGVkIHRvIGFzc2lnbiBwcm9wcyBkaXJlY3RseSB0byBzdGF0ZSAnICsgXCJiZWNhdXNlIHVwZGF0ZXMgdG8gcHJvcHMgd29uJ3QgYmUgcmVmbGVjdGVkIGluIHN0YXRlLiBcIiArICdJbiBtb3N0IGNhc2VzLCBpdCBpcyBiZXR0ZXIgdG8gdXNlIHByb3BzIGRpcmVjdGx5LicsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgUmVhY3RTdHJpY3RNb2RlV2FybmluZ3MucmVjb3JkTGVnYWN5Q29udGV4dFdhcm5pbmcod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncyh3b3JrSW5Qcm9ncmVzcywgaW5zdGFuY2UpO1xuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NVcGRhdGVRdWV1ZSh3b3JrSW5Qcm9ncmVzcywgbmV3UHJvcHMsIGluc3RhbmNlLCByZW5kZXJMYW5lcyk7XG4gIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfSAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuXG4gIGlmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlICE9PSAnZnVuY3Rpb24nICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGNhbGxDb21wb25lbnRXaWxsTW91bnQod29ya0luUHJvZ3Jlc3MsIGluc3RhbmNlKTsgLy8gSWYgd2UgaGFkIGFkZGl0aW9uYWwgc3RhdGUgdXBkYXRlcyBkdXJpbmcgdGhpcyBsaWZlLWN5Y2xlLCBsZXQnc1xuICAgIC8vIHByb2Nlc3MgdGhlbSBub3cuXG5cbiAgICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICAgIGluc3RhbmNlLnN0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lTW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBjdG9yLCBuZXdQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGluc3RhbmNlID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICBpbnN0YW5jZS5wcm9wcyA9IG9sZFByb3BzO1xuICB2YXIgb2xkQ29udGV4dCA9IGluc3RhbmNlLmNvbnRleHQ7XG4gIHZhciBjb250ZXh0VHlwZSA9IGN0b3IuY29udGV4dFR5cGU7XG4gIHZhciBuZXh0Q29udGV4dCA9IGVtcHR5Q29udGV4dE9iamVjdDtcblxuICBpZiAodHlwZW9mIGNvbnRleHRUeXBlID09PSAnb2JqZWN0JyAmJiBjb250ZXh0VHlwZSAhPT0gbnVsbCkge1xuICAgIG5leHRDb250ZXh0ID0gcmVhZENvbnRleHQoY29udGV4dFR5cGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciBuZXh0TGVnYWN5VW5tYXNrZWRDb250ZXh0ID0gZ2V0VW5tYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBjdG9yLCB0cnVlKTtcbiAgICBuZXh0Q29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIG5leHRMZWdhY3lVbm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgdmFyIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGN0b3IuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzO1xuICB2YXIgaGFzTmV3TGlmZWN5Y2xlcyA9IHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlID09PSAnZnVuY3Rpb24nOyAvLyBOb3RlOiBEdXJpbmcgdGhlc2UgbGlmZS1jeWNsZXMsIGluc3RhbmNlLnByb3BzL2luc3RhbmNlLnN0YXRlIGFyZSB3aGF0XG4gIC8vIGV2ZXIgdGhlIHByZXZpb3VzbHkgYXR0ZW1wdGVkIHRvIHJlbmRlciAtIG5vdCB0aGUgXCJjdXJyZW50XCIuIEhvd2V2ZXIsXG4gIC8vIGR1cmluZyBjb21wb25lbnREaWRVcGRhdGUgd2UgcGFzcyB0aGUgXCJjdXJyZW50XCIgcHJvcHMuXG4gIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAvLyBVbnNhZmUgbGlmZWN5Y2xlcyBzaG91bGQgbm90IGJlIGludm9rZWQgZm9yIGNvbXBvbmVudHMgdXNpbmcgdGhlIG5ldyBBUElzLlxuXG4gIGlmICghaGFzTmV3TGlmZWN5Y2xlcyAmJiAodHlwZW9mIGluc3RhbmNlLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID09PSAnZnVuY3Rpb24nKSkge1xuICAgIGlmIChvbGRQcm9wcyAhPT0gbmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcyAmJiBvbGRTdGF0ZSA9PT0gbmV3U3RhdGUgJiYgIWhhc0NvbnRleHRDaGFuZ2VkKCkgJiYgIWNoZWNrSGFzRm9yY2VVcGRhdGVBZnRlclByb2Nlc3NpbmcoKSkge1xuICAgIC8vIElmIGFuIHVwZGF0ZSB3YXMgYWxyZWFkeSBpbiBwcm9ncmVzcywgd2Ugc2hvdWxkIHNjaGVkdWxlIGFuIFVwZGF0ZVxuICAgIC8vIGVmZmVjdCBldmVuIHRob3VnaCB3ZSdyZSBiYWlsaW5nIG91dCwgc28gdGhhdCBjV1UvY0RVIGFyZSBjYWxsZWQuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50ID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnRXaWxsTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5jb21wb25lbnREaWRNb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkTW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICB9IC8vIElmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5lZCBmYWxzZSwgd2Ugc2hvdWxkIHN0aWxsIHVwZGF0ZSB0aGVcbiAgICAvLyBtZW1vaXplZCBzdGF0ZSB0byBpbmRpY2F0ZSB0aGF0IHRoaXMgd29yayBjYW4gYmUgcmV1c2VkLlxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gbmV3UHJvcHM7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICB9IC8vIFVwZGF0ZSB0aGUgZXhpc3RpbmcgaW5zdGFuY2UncyBzdGF0ZSwgcHJvcHMsIGFuZCBjb250ZXh0IHBvaW50ZXJzIGV2ZW5cbiAgLy8gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2UuXG5cblxuICBpbnN0YW5jZS5wcm9wcyA9IG5ld1Byb3BzO1xuICBpbnN0YW5jZS5zdGF0ZSA9IG5ld1N0YXRlO1xuICBpbnN0YW5jZS5jb250ZXh0ID0gbmV4dENvbnRleHQ7XG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59IC8vIEludm9rZXMgdGhlIHVwZGF0ZSBsaWZlLWN5Y2xlcyBhbmQgcmV0dXJucyBmYWxzZSBpZiBpdCBzaG91bGRuJ3QgcmVyZW5kZXIuXG5cblxuZnVuY3Rpb24gdXBkYXRlQ2xhc3NJbnN0YW5jZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgY3RvciwgbmV3UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBpbnN0YW5jZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgY2xvbmVVcGRhdGVRdWV1ZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciB1bnJlc29sdmVkT2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy50eXBlID09PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA/IHVucmVzb2x2ZWRPbGRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgdW5yZXNvbHZlZE9sZFByb3BzKTtcbiAgaW5zdGFuY2UucHJvcHMgPSBvbGRQcm9wcztcbiAgdmFyIHVucmVzb2x2ZWROZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG9sZENvbnRleHQgPSBpbnN0YW5jZS5jb250ZXh0O1xuICB2YXIgY29udGV4dFR5cGUgPSBjdG9yLmNvbnRleHRUeXBlO1xuICB2YXIgbmV4dENvbnRleHQgPSBlbXB0eUNvbnRleHRPYmplY3Q7XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgY29udGV4dFR5cGUgIT09IG51bGwpIHtcbiAgICBuZXh0Q29udGV4dCA9IHJlYWRDb250ZXh0KGNvbnRleHRUeXBlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgbmV4dFVubWFza2VkQ29udGV4dCA9IGdldFVubWFza2VkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgY3RvciwgdHJ1ZSk7XG4gICAgbmV4dENvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCBuZXh0VW5tYXNrZWRDb250ZXh0KTtcbiAgfVxuXG4gIHZhciBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcbiAgdmFyIGhhc05ld0xpZmVjeWNsZXMgPSB0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJzsgLy8gTm90ZTogRHVyaW5nIHRoZXNlIGxpZmUtY3ljbGVzLCBpbnN0YW5jZS5wcm9wcy9pbnN0YW5jZS5zdGF0ZSBhcmUgd2hhdFxuICAvLyBldmVyIHRoZSBwcmV2aW91c2x5IGF0dGVtcHRlZCB0byByZW5kZXIgLSBub3QgdGhlIFwiY3VycmVudFwiLiBIb3dldmVyLFxuICAvLyBkdXJpbmcgY29tcG9uZW50RGlkVXBkYXRlIHdlIHBhc3MgdGhlIFwiY3VycmVudFwiIHByb3BzLlxuICAvLyBJbiBvcmRlciB0byBzdXBwb3J0IHJlYWN0LWxpZmVjeWNsZXMtY29tcGF0IHBvbHlmaWxsZWQgY29tcG9uZW50cyxcbiAgLy8gVW5zYWZlIGxpZmVjeWNsZXMgc2hvdWxkIG5vdCBiZSBpbnZva2VkIGZvciBjb21wb25lbnRzIHVzaW5nIHRoZSBuZXcgQVBJcy5cblxuICBpZiAoIWhhc05ld0xpZmVjeWNsZXMgJiYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSB1bnJlc29sdmVkTmV3UHJvcHMgfHwgb2xkQ29udGV4dCAhPT0gbmV4dENvbnRleHQpIHtcbiAgICAgIGNhbGxDb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKHdvcmtJblByb2dyZXNzLCBpbnN0YW5jZSwgbmV3UHJvcHMsIG5leHRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXNldEhhc0ZvcmNlVXBkYXRlQmVmb3JlUHJvY2Vzc2luZygpO1xuICB2YXIgb2xkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgbmV3U3RhdGUgPSBpbnN0YW5jZS5zdGF0ZSA9IG9sZFN0YXRlO1xuICBwcm9jZXNzVXBkYXRlUXVldWUod29ya0luUHJvZ3Jlc3MsIG5ld1Byb3BzLCBpbnN0YW5jZSwgcmVuZGVyTGFuZXMpO1xuICBuZXdTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyA9PT0gdW5yZXNvbHZlZE5ld1Byb3BzICYmIG9sZFN0YXRlID09PSBuZXdTdGF0ZSAmJiAhaGFzQ29udGV4dENoYW5nZWQoKSAmJiAhY2hlY2tIYXNGb3JjZVVwZGF0ZUFmdGVyUHJvY2Vzc2luZygpKSB7XG4gICAgLy8gSWYgYW4gdXBkYXRlIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCB3ZSBzaG91bGQgc2NoZWR1bGUgYW4gVXBkYXRlXG4gICAgLy8gZWZmZWN0IGV2ZW4gdGhvdWdoIHdlJ3JlIGJhaWxpbmcgb3V0LCBzbyB0aGF0IGNXVS9jRFUgYXJlIGNhbGxlZC5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGlmICh1bnJlc29sdmVkT2xkUHJvcHMgIT09IGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB8fCBvbGRTdGF0ZSAhPT0gY3VycmVudC5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXBwbHlEZXJpdmVkU3RhdGVGcm9tUHJvcHMod29ya0luUHJvZ3Jlc3MsIGN0b3IsIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcywgbmV3UHJvcHMpO1xuICAgIG5ld1N0YXRlID0gd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZTtcbiAgfVxuXG4gIHZhciBzaG91bGRVcGRhdGUgPSBjaGVja0hhc0ZvcmNlVXBkYXRlQWZ0ZXJQcm9jZXNzaW5nKCkgfHwgY2hlY2tTaG91bGRDb21wb25lbnRVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGN0b3IsIG9sZFByb3BzLCBuZXdQcm9wcywgb2xkU3RhdGUsIG5ld1N0YXRlLCBuZXh0Q29udGV4dCk7XG5cbiAgaWYgKHNob3VsZFVwZGF0ZSkge1xuICAgIC8vIEluIG9yZGVyIHRvIHN1cHBvcnQgcmVhY3QtbGlmZWN5Y2xlcy1jb21wYXQgcG9seWZpbGxlZCBjb21wb25lbnRzLFxuICAgIC8vIFVuc2FmZSBsaWZlY3ljbGVzIHNob3VsZCBub3QgYmUgaW52b2tlZCBmb3IgY29tcG9uZW50cyB1c2luZyB0aGUgbmV3IEFQSXMuXG4gICAgaWYgKCFoYXNOZXdMaWZlY3ljbGVzICYmICh0eXBlb2YgaW5zdGFuY2UuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpbnN0YW5jZS5VTlNBRkVfY29tcG9uZW50V2lsbFVwZGF0ZShuZXdQcm9wcywgbmV3U3RhdGUsIG5leHRDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZFVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFNuYXBzaG90O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiBhbiB1cGRhdGUgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIHdlIHNob3VsZCBzY2hlZHVsZSBhbiBVcGRhdGVcbiAgICAvLyBlZmZlY3QgZXZlbiB0aG91Z2ggd2UncmUgYmFpbGluZyBvdXQsIHNvIHRoYXQgY1dVL2NEVSBhcmUgY2FsbGVkLlxuICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkVXBkYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodW5yZXNvbHZlZE9sZFByb3BzICE9PSBjdXJyZW50Lm1lbW9pemVkUHJvcHMgfHwgb2xkU3RhdGUgIT09IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBpbnN0YW5jZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHVucmVzb2x2ZWRPbGRQcm9wcyAhPT0gY3VycmVudC5tZW1vaXplZFByb3BzIHx8IG9sZFN0YXRlICE9PSBjdXJyZW50Lm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU25hcHNob3Q7XG4gICAgICB9XG4gICAgfSAvLyBJZiBzaG91bGRDb21wb25lbnRVcGRhdGUgcmV0dXJuZWQgZmFsc2UsIHdlIHNob3VsZCBzdGlsbCB1cGRhdGUgdGhlXG4gICAgLy8gbWVtb2l6ZWQgcHJvcHMvc3RhdGUgdG8gaW5kaWNhdGUgdGhhdCB0aGlzIHdvcmsgY2FuIGJlIHJldXNlZC5cblxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG5ld1Byb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgfSAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIGluc3RhbmNlJ3Mgc3RhdGUsIHByb3BzLCBhbmQgY29udGV4dCBwb2ludGVycyBldmVuXG4gIC8vIGlmIHNob3VsZENvbXBvbmVudFVwZGF0ZSByZXR1cm5zIGZhbHNlLlxuXG5cbiAgaW5zdGFuY2UucHJvcHMgPSBuZXdQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBuZXdTdGF0ZTtcbiAgaW5zdGFuY2UuY29udGV4dCA9IG5leHRDb250ZXh0O1xuICByZXR1cm4gc2hvdWxkVXBkYXRlO1xufVxuXG52YXIgZGlkV2FybkFib3V0TWFwcztcbnZhciBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzO1xudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nO1xudmFyIG93bmVySGFzRnVuY3Rpb25UeXBlV2FybmluZztcblxudmFyIHdhcm5Gb3JNaXNzaW5nS2V5ID0gZnVuY3Rpb24gKGNoaWxkLCByZXR1cm5GaWJlcikge307XG5cbntcbiAgZGlkV2FybkFib3V0TWFwcyA9IGZhbHNlO1xuICBkaWRXYXJuQWJvdXRHZW5lcmF0b3JzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dFN0cmluZ1JlZnMgPSB7fTtcbiAgLyoqXG4gICAqIFdhcm4gaWYgdGhlcmUncyBubyBrZXkgZXhwbGljaXRseSBzZXQgb24gZHluYW1pYyBhcnJheXMgb2YgY2hpbGRyZW4gb3JcbiAgICogb2JqZWN0IGtleXMgYXJlIG5vdCB2YWxpZC4gVGhpcyBhbGxvd3MgdXMgdG8ga2VlcCB0cmFjayBvZiBjaGlsZHJlbiBiZXR3ZWVuXG4gICAqIHVwZGF0ZXMuXG4gICAqL1xuXG4gIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xuICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmcgPSB7fTtcblxuICB3YXJuRm9yTWlzc2luZ0tleSA9IGZ1bmN0aW9uIChjaGlsZCwgcmV0dXJuRmliZXIpIHtcbiAgICBpZiAoY2hpbGQgPT09IG51bGwgfHwgdHlwZW9mIGNoaWxkICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghY2hpbGQuX3N0b3JlIHx8IGNoaWxkLl9zdG9yZS52YWxpZGF0ZWQgfHwgY2hpbGQua2V5ICE9IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoISh0eXBlb2YgY2hpbGQuX3N0b3JlID09PSAnb2JqZWN0JykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QgQ29tcG9uZW50IGluIHdhcm5Gb3JNaXNzaW5nS2V5IHNob3VsZCBoYXZlIGEgX3N0b3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG93bmVySGFzS2V5VXNlV2FybmluZ1tjb21wb25lbnROYW1lXSA9IHRydWU7XG5cbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgJyArICdcImtleVwiIHByb3AuIFNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd2FybmluZy1rZXlzIGZvciAnICsgJ21vcmUgaW5mb3JtYXRpb24uJyk7XG4gIH07XG59XG5cbnZhciBpc0FycmF5JDEgPSBBcnJheS5pc0FycmF5O1xuXG5mdW5jdGlvbiBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIG1peGVkUmVmID0gZWxlbWVudC5yZWY7XG5cbiAgaWYgKG1peGVkUmVmICE9PSBudWxsICYmIHR5cGVvZiBtaXhlZFJlZiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgbWl4ZWRSZWYgIT09ICdvYmplY3QnKSB7XG4gICAge1xuICAgICAgLy8gVE9ETzogQ2xlYW4gdGhpcyB1cCBvbmNlIHdlIHR1cm4gb24gdGhlIHN0cmluZyByZWYgd2FybmluZyBmb3JcbiAgICAgIC8vIGV2ZXJ5b25lLCBiZWNhdXNlIHRoZSBzdHJpY3QgbW9kZSBjYXNlIHdpbGwgbm8gbG9uZ2VyIGJlIHJlbGV2YW50XG4gICAgICBpZiAoKHJldHVybkZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlIHx8IHdhcm5BYm91dFN0cmluZ1JlZnMpICYmIC8vIFdlIHdhcm4gaW4gUmVhY3RFbGVtZW50LmpzIGlmIG93bmVyIGFuZCBzZWxmIGFyZSBlcXVhbCBmb3Igc3RyaW5nIHJlZnNcbiAgICAgIC8vIGJlY2F1c2UgdGhlc2UgY2Fubm90IGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvIGFuIGFycm93IGZ1bmN0aW9uXG4gICAgICAvLyB1c2luZyBhIGNvZGVtb2QuIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0byB3YXJuIGFib3V0IHN0cmluZyByZWZzIGFnYWluLlxuICAgICAgIShlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9zZWxmICYmIGVsZW1lbnQuX293bmVyLnN0YXRlTm9kZSAhPT0gZWxlbWVudC5fc2VsZikpIHtcbiAgICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICAgIGlmICghZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGVycm9yKCdBIHN0cmluZyByZWYsIFwiJXNcIiwgaGFzIGJlZW4gZm91bmQgd2l0aGluIGEgc3RyaWN0IG1vZGUgdHJlZS4gJyArICdTdHJpbmcgcmVmcyBhcmUgYSBzb3VyY2Ugb2YgcG90ZW50aWFsIGJ1Z3MgYW5kIHNob3VsZCBiZSBhdm9pZGVkLiAnICsgJ1dlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBvciBjcmVhdGVSZWYoKSBpbnN0ZWFkLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtc3RyaW5nLXJlZicsIG1peGVkUmVmKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlbGVtZW50Ll9vd25lcikge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgaW5zdDtcblxuICAgICAgaWYgKG93bmVyKSB7XG4gICAgICAgIHZhciBvd25lckZpYmVyID0gb3duZXI7XG5cbiAgICAgICAgaWYgKCEob3duZXJGaWJlci50YWcgPT09IENsYXNzQ29tcG9uZW50KSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkZ1bmN0aW9uIGNvbXBvbmVudHMgY2Fubm90IGhhdmUgc3RyaW5nIHJlZnMuIFdlIHJlY29tbWVuZCB1c2luZyB1c2VSZWYoKSBpbnN0ZWFkLiBMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnN0ID0gb3duZXJGaWJlci5zdGF0ZU5vZGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5zdCkge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiTWlzc2luZyBvd25lciBmb3Igc3RyaW5nIHJlZiBcIiArIG1peGVkUmVmICsgXCIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgc3RyaW5nUmVmID0gJycgKyBtaXhlZFJlZjsgLy8gQ2hlY2sgaWYgcHJldmlvdXMgc3RyaW5nIHJlZiBtYXRjaGVzIG5ldyBzdHJpbmcgcmVmXG5cbiAgICAgIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGN1cnJlbnQucmVmICE9PSBudWxsICYmIHR5cGVvZiBjdXJyZW50LnJlZiA9PT0gJ2Z1bmN0aW9uJyAmJiBjdXJyZW50LnJlZi5fc3RyaW5nUmVmID09PSBzdHJpbmdSZWYpIHtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnQucmVmO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVmID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZWZzID0gaW5zdC5yZWZzO1xuXG4gICAgICAgIGlmIChyZWZzID09PSBlbXB0eVJlZnNPYmplY3QpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgbGF6eSBwb29sZWQgZnJvemVuIG9iamVjdCwgc28gd2UgbmVlZCB0byBpbml0aWFsaXplLlxuICAgICAgICAgIHJlZnMgPSBpbnN0LnJlZnMgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIGRlbGV0ZSByZWZzW3N0cmluZ1JlZl07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVmc1tzdHJpbmdSZWZdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHJlZi5fc3RyaW5nUmVmID0gc3RyaW5nUmVmO1xuICAgICAgcmV0dXJuIHJlZjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEodHlwZW9mIG1peGVkUmVmID09PSAnc3RyaW5nJykpIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHJlZiB0byBiZSBhIGZ1bmN0aW9uLCBhIHN0cmluZywgYW4gb2JqZWN0IHJldHVybmVkIGJ5IFJlYWN0LmNyZWF0ZVJlZigpLCBvciBudWxsLlwiICk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFlbGVtZW50Ll9vd25lcikge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCByZWYgd2FzIHNwZWNpZmllZCBhcyBhIHN0cmluZyAoXCIgKyBtaXhlZFJlZiArIFwiKSBidXQgbm8gb3duZXIgd2FzIHNldC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1heSBiZSBhZGRpbmcgYSByZWYgdG8gYSBmdW5jdGlvbiBjb21wb25lbnRcXG4yLiBZb3UgbWF5IGJlIGFkZGluZyBhIHJlZiB0byBhIGNvbXBvbmVudCB0aGF0IHdhcyBub3QgY3JlYXRlZCBpbnNpZGUgYSBjb21wb25lbnQncyByZW5kZXIgbWV0aG9kXFxuMy4gWW91IGhhdmUgbXVsdGlwbGUgY29waWVzIG9mIFJlYWN0IGxvYWRlZFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVmcy1tdXN0LWhhdmUtb3duZXIgZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaXhlZFJlZjtcbn1cblxuZnVuY3Rpb24gdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCkge1xuICBpZiAocmV0dXJuRmliZXIudHlwZSAhPT0gJ3RleHRhcmVhJykge1xuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobmV3Q2hpbGQpID09PSAnW29iamVjdCBPYmplY3RdJyA/ICdvYmplY3Qgd2l0aCBrZXlzIHsnICsgT2JqZWN0LmtleXMobmV3Q2hpbGQpLmpvaW4oJywgJykgKyAnfScgOiBuZXdDaGlsZCkgKyBcIikuIElmIHlvdSBtZWFudCB0byByZW5kZXIgYSBjb2xsZWN0aW9uIG9mIGNoaWxkcmVuLCB1c2UgYW4gYXJyYXkgaW5zdGVhZC5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShyZXR1cm5GaWJlci50eXBlKSB8fCAnQ29tcG9uZW50JztcblxuICAgIGlmIChvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvd25lckhhc0Z1bmN0aW9uVHlwZVdhcm5pbmdbY29tcG9uZW50TmFtZV0gPSB0cnVlO1xuXG4gICAgZXJyb3IoJ0Z1bmN0aW9ucyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQuIFRoaXMgbWF5IGhhcHBlbiBpZiAnICsgJ3lvdSByZXR1cm4gYSBDb21wb25lbnQgaW5zdGVhZCBvZiA8Q29tcG9uZW50IC8+IGZyb20gcmVuZGVyLiAnICsgJ09yIG1heWJlIHlvdSBtZWFudCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gcmF0aGVyIHRoYW4gcmV0dXJuIGl0LicpO1xuICB9XG59IC8vIFdlIGF2b2lkIGlubGluaW5nIHRoaXMgdG8gYXZvaWQgcG90ZW50aWFsIGRlb3B0cyBmcm9tIHVzaW5nIHRyeS9jYXRjaC5cbi8vIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgZWFjaCBwYXRoIGluZGl2aWR1YWxseSBieSBicmFuY2hpbmcgZWFybHkuIFRoaXMgbmVlZHNcbi8vIGEgY29tcGlsZXIgb3Igd2UgY2FuIGRvIGl0IG1hbnVhbGx5LiBIZWxwZXJzIHRoYXQgZG9uJ3QgbmVlZCB0aGlzIGJyYW5jaGluZ1xuLy8gbGl2ZSBvdXRzaWRlIG9mIHRoaXMgZnVuY3Rpb24uXG5cblxuZnVuY3Rpb24gQ2hpbGRSZWNvbmNpbGVyKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgZnVuY3Rpb24gZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIGNoaWxkVG9EZWxldGUpIHtcbiAgICBpZiAoIXNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIE5vb3AuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBEZWxldGlvbnMgYXJlIGFkZGVkIGluIHJldmVyc2VkIG9yZGVyIHNvIHdlIGFkZCBpdCB0byB0aGUgZnJvbnQuXG4gICAgLy8gQXQgdGhpcyBwb2ludCwgdGhlIHJldHVybiBmaWJlcidzIGVmZmVjdCBsaXN0IGlzIGVtcHR5IGV4Y2VwdCBmb3JcbiAgICAvLyBkZWxldGlvbnMsIHNvIHdlIGNhbiBqdXN0IGFwcGVuZCB0aGUgZGVsZXRpb24gdG8gdGhlIGxpc3QuIFRoZSByZW1haW5pbmdcbiAgICAvLyBlZmZlY3RzIGFyZW4ndCBhZGRlZCB1bnRpbCB0aGUgY29tcGxldGUgcGhhc2UuIE9uY2Ugd2UgaW1wbGVtZW50XG4gICAgLy8gcmVzdW1pbmcsIHRoaXMgbWF5IG5vdCBiZSB0cnVlLlxuXG5cbiAgICB2YXIgbGFzdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3Q7XG5cbiAgICBpZiAobGFzdCAhPT0gbnVsbCkge1xuICAgICAgbGFzdC5uZXh0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm5GaWJlci5maXJzdEVmZmVjdCA9IHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjaGlsZFRvRGVsZXRlO1xuICAgIH1cblxuICAgIGNoaWxkVG9EZWxldGUubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgY2hpbGRUb0RlbGV0ZS5mbGFncyA9IERlbGV0aW9uO1xuICB9XG5cbiAgZnVuY3Rpb24gZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkKSB7XG4gICAgaWYgKCFzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBOb29wLlxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBUT0RPOiBGb3IgdGhlIHNob3VsZENsb25lIGNhc2UsIHRoaXMgY291bGQgYmUgbWljcm8tb3B0aW1pemVkIGEgYml0IGJ5XG4gICAgLy8gYXNzdW1pbmcgdGhhdCBhZnRlciB0aGUgZmlyc3QgY2hpbGQgd2UndmUgYWxyZWFkeSBhZGRlZCBldmVyeXRoaW5nLlxuXG5cbiAgICB2YXIgY2hpbGRUb0RlbGV0ZSA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkVG9EZWxldGUgIT09IG51bGwpIHtcbiAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZFRvRGVsZXRlKTtcbiAgICAgIGNoaWxkVG9EZWxldGUgPSBjaGlsZFRvRGVsZXRlLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBmdW5jdGlvbiBtYXBSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpIHtcbiAgICAvLyBBZGQgdGhlIHJlbWFpbmluZyBjaGlsZHJlbiB0byBhIHRlbXBvcmFyeSBtYXAgc28gdGhhdCB3ZSBjYW4gZmluZCB0aGVtIGJ5XG4gICAgLy8ga2V5cyBxdWlja2x5LiBJbXBsaWNpdCAobnVsbCkga2V5cyBnZXQgYWRkZWQgdG8gdGhpcyBzZXQgd2l0aCB0aGVpciBpbmRleFxuICAgIC8vIGluc3RlYWQuXG4gICAgdmFyIGV4aXN0aW5nQ2hpbGRyZW4gPSBuZXcgTWFwKCk7XG4gICAgdmFyIGV4aXN0aW5nQ2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChleGlzdGluZ0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBpZiAoZXhpc3RpbmdDaGlsZC5rZXkgIT09IG51bGwpIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5rZXksIGV4aXN0aW5nQ2hpbGQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5zZXQoZXhpc3RpbmdDaGlsZC5pbmRleCwgZXhpc3RpbmdDaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGV4aXN0aW5nQ2hpbGQgPSBleGlzdGluZ0NoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0aW5nQ2hpbGRyZW47XG4gIH1cblxuICBmdW5jdGlvbiB1c2VGaWJlcihmaWJlciwgcGVuZGluZ1Byb3BzKSB7XG4gICAgLy8gV2UgY3VycmVudGx5IHNldCBzaWJsaW5nIHRvIG51bGwgYW5kIGluZGV4IHRvIDAgaGVyZSBiZWNhdXNlIGl0IGlzIGVhc3lcbiAgICAvLyB0byBmb3JnZXQgdG8gZG8gYmVmb3JlIHJldHVybmluZyBpdC4gRS5nLiBmb3IgdGhlIHNpbmdsZSBjaGlsZCBjYXNlLlxuICAgIHZhciBjbG9uZSA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKGZpYmVyLCBwZW5kaW5nUHJvcHMpO1xuICAgIGNsb25lLmluZGV4ID0gMDtcbiAgICBjbG9uZS5zaWJsaW5nID0gbnVsbDtcbiAgICByZXR1cm4gY2xvbmU7XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0luZGV4KSB7XG4gICAgbmV3RmliZXIuaW5kZXggPSBuZXdJbmRleDtcblxuICAgIGlmICghc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgLy8gTm9vcC5cbiAgICAgIHJldHVybiBsYXN0UGxhY2VkSW5kZXg7XG4gICAgfVxuXG4gICAgdmFyIGN1cnJlbnQgPSBuZXdGaWJlci5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG9sZEluZGV4ID0gY3VycmVudC5pbmRleDtcblxuICAgICAgaWYgKG9sZEluZGV4IDwgbGFzdFBsYWNlZEluZGV4KSB7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBtb3ZlLlxuICAgICAgICBuZXdGaWJlci5mbGFncyA9IFBsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgaXRlbSBjYW4gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgcmV0dXJuIG9sZEluZGV4O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGFuIGluc2VydGlvbi5cbiAgICAgIG5ld0ZpYmVyLmZsYWdzID0gUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGxhc3RQbGFjZWRJbmRleDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwbGFjZVNpbmdsZUNoaWxkKG5ld0ZpYmVyKSB7XG4gICAgLy8gVGhpcyBpcyBzaW1wbGVyIGZvciB0aGUgc2luZ2xlIGNoaWxkIGNhc2UuIFdlIG9ubHkgbmVlZCB0byBkbyBhXG4gICAgLy8gcGxhY2VtZW50IGZvciBpbnNlcnRpbmcgbmV3IGNoaWxkcmVuLlxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgbmV3RmliZXIuZmxhZ3MgPSBQbGFjZW1lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0ZpYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIGN1cnJlbnQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ID09PSBudWxsIHx8IGN1cnJlbnQudGFnICE9PSBIb3N0VGV4dCkge1xuICAgICAgLy8gSW5zZXJ0XG4gICAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVRleHQodGV4dENvbnRlbnQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gY3JlYXRlZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVXBkYXRlXG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCB0ZXh0Q29udGVudCk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50LCBsYW5lcykge1xuICAgIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoY3VycmVudC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGN1cnJlbnQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgLy8gTW92ZSBiYXNlZCBvbiBpbmRleFxuICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50LCBlbGVtZW50LnByb3BzKTtcbiAgICAgICAgZXhpc3RpbmcucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAge1xuICAgICAgICAgIGV4aXN0aW5nLl9kZWJ1Z1NvdXJjZSA9IGVsZW1lbnQuX3NvdXJjZTtcbiAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgfVxuICAgIH0gLy8gSW5zZXJ0XG5cblxuICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgIGNyZWF0ZWQucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgcmV0dXJuIGNyZWF0ZWQ7XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQb3J0YWwocmV0dXJuRmliZXIsIGN1cnJlbnQsIHBvcnRhbCwgbGFuZXMpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gSG9zdFBvcnRhbCB8fCBjdXJyZW50LnN0YXRlTm9kZS5jb250YWluZXJJbmZvICE9PSBwb3J0YWwuY29udGFpbmVySW5mbyB8fCBjdXJyZW50LnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbiAhPT0gcG9ydGFsLmltcGxlbWVudGF0aW9uKSB7XG4gICAgICAvLyBJbnNlcnRcbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tUG9ydGFsKHBvcnRhbCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVcGRhdGVcbiAgICAgIHZhciBleGlzdGluZyA9IHVzZUZpYmVyKGN1cnJlbnQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICBleGlzdGluZy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgY3VycmVudCwgZnJhZ21lbnQsIGxhbmVzLCBrZXkpIHtcbiAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LnRhZyAhPT0gRnJhZ21lbnQpIHtcbiAgICAgIC8vIEluc2VydFxuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmcmFnbWVudCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIGtleSk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVwZGF0ZVxuICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY3VycmVudCwgZnJhZ21lbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlQ2hpbGQocmV0dXJuRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIFRleHQgbm9kZXMgZG9uJ3QgaGF2ZSBrZXlzLiBJZiB0aGUgcHJldmlvdXMgbm9kZSBpcyBpbXBsaWNpdGx5IGtleWVkXG4gICAgICAvLyB3ZSBjYW4gY29udGludWUgdG8gcmVwbGFjZSBpdCB3aXRob3V0IGFib3J0aW5nIGV2ZW4gaWYgaXQgaXMgbm90IGEgdGV4dFxuICAgICAgLy8gbm9kZS5cbiAgICAgIHZhciBjcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tVGV4dCgnJyArIG5ld0NoaWxkLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgcmV0dXJuIGNyZWF0ZWQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGwpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9jcmVhdGVkID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMpO1xuXG4gICAgICAgICAgICBfY3JlYXRlZC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIG51bGwsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIF9jcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfY3JlYXRlZDIgPSBjcmVhdGVGaWJlckZyb21Qb3J0YWwobmV3Q2hpbGQsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcblxuICAgICAgICAgICAgX2NyZWF0ZWQyLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgICAgICAgICAgcmV0dXJuIF9jcmVhdGVkMjtcbiAgICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpc0FycmF5JDEobmV3Q2hpbGQpIHx8IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGQpKSB7XG4gICAgICAgIHZhciBfY3JlYXRlZDMgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChuZXdDaGlsZCwgcmV0dXJuRmliZXIubW9kZSwgbGFuZXMsIG51bGwpO1xuXG4gICAgICAgIF9jcmVhdGVkMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgICAgcmV0dXJuIF9jcmVhdGVkMztcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlU2xvdChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLCBsYW5lcykge1xuICAgIC8vIFVwZGF0ZSB0aGUgZmliZXIgaWYgdGhlIGtleXMgbWF0Y2gsIG90aGVyd2lzZSByZXR1cm4gbnVsbC5cbiAgICB2YXIga2V5ID0gb2xkRmliZXIgIT09IG51bGwgPyBvbGRGaWJlci5rZXkgOiBudWxsO1xuXG4gICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG5ld0NoaWxkID09PSAnbnVtYmVyJykge1xuICAgICAgLy8gVGV4dCBub2RlcyBkb24ndCBoYXZlIGtleXMuIElmIHRoZSBwcmV2aW91cyBub2RlIGlzIGltcGxpY2l0bHkga2V5ZWRcbiAgICAgIC8vIHdlIGNhbiBjb250aW51ZSB0byByZXBsYWNlIGl0IHdpdGhvdXQgYWJvcnRpbmcgZXZlbiBpZiBpdCBpcyBub3QgYSB0ZXh0XG4gICAgICAvLyBub2RlLlxuICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVRleHROb2RlKHJldHVybkZpYmVyLCBvbGRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgb2xkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywga2V5KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB1cGRhdGVFbGVtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5rZXkgPT09IGtleSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgaWYgKGtleSAhPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KHJldHVybkZpYmVyLCBvbGRGaWJlciwgbmV3Q2hpbGQsIGxhbmVzLCBudWxsKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dPbkludmFsaWRPYmplY3RUeXBlKHJldHVybkZpYmVyLCBuZXdDaGlsZCk7XG4gICAgfVxuXG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3YXJuT25GdW5jdGlvblR5cGUocmV0dXJuRmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZCwgbGFuZXMpIHtcbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUZXh0IG5vZGVzIGRvbid0IGhhdmUga2V5cywgc28gd2UgbmVpdGhlciBoYXZlIHRvIGNoZWNrIHRoZSBvbGQgbm9yXG4gICAgICAvLyBuZXcgbm9kZSBmb3IgdGhlIGtleS4gSWYgYm90aCBhcmUgdGV4dCBub2RlcywgdGhleSBtYXRjaC5cbiAgICAgIHZhciBtYXRjaGVkRmliZXIgPSBleGlzdGluZ0NoaWxkcmVuLmdldChuZXdJZHgpIHx8IG51bGw7XG4gICAgICByZXR1cm4gdXBkYXRlVGV4dE5vZGUocmV0dXJuRmliZXIsIG1hdGNoZWRGaWJlciwgJycgKyBuZXdDaGlsZCwgbGFuZXMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKG5ld0NoaWxkLiQkdHlwZW9mKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRUxFTUVOVF9UWVBFOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBfbWF0Y2hlZEZpYmVyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICBpZiAobmV3Q2hpbGQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICByZXR1cm4gdXBkYXRlRnJhZ21lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLnByb3BzLmNoaWxkcmVuLCBsYW5lcywgbmV3Q2hpbGQua2V5KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZUVsZW1lbnQocmV0dXJuRmliZXIsIF9tYXRjaGVkRmliZXIsIG5ld0NoaWxkLCBsYW5lcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIyID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3Q2hpbGQua2V5ID09PSBudWxsID8gbmV3SWR4IDogbmV3Q2hpbGQua2V5KSB8fCBudWxsO1xuXG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlUG9ydGFsKHJldHVybkZpYmVyLCBfbWF0Y2hlZEZpYmVyMiwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgIH1cblxuICAgICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkgfHwgZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgICAgdmFyIF9tYXRjaGVkRmliZXIzID0gZXhpc3RpbmdDaGlsZHJlbi5nZXQobmV3SWR4KSB8fCBudWxsO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVGcmFnbWVudChyZXR1cm5GaWJlciwgX21hdGNoZWRGaWJlcjMsIG5ld0NoaWxkLCBsYW5lcywgbnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogV2FybnMgaWYgdGhlcmUgaXMgYSBkdXBsaWNhdGUgb3IgbWlzc2luZyBrZXlcbiAgICovXG5cblxuICBmdW5jdGlvbiB3YXJuT25JbnZhbGlkS2V5KGNoaWxkLCBrbm93bktleXMsIHJldHVybkZpYmVyKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjaGlsZCAhPT0gJ29iamVjdCcgfHwgY2hpbGQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGtub3duS2V5cztcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChjaGlsZC4kJHR5cGVvZikge1xuICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcbiAgICAgICAgICB3YXJuRm9yTWlzc2luZ0tleShjaGlsZCwgcmV0dXJuRmliZXIpO1xuICAgICAgICAgIHZhciBrZXkgPSBjaGlsZC5rZXk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChrbm93bktleXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGtub3duS2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGtub3duS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgha25vd25LZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBrbm93bktleXMuYWRkKGtleSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBlcnJvcignRW5jb3VudGVyZWQgdHdvIGNoaWxkcmVuIHdpdGggdGhlIHNhbWUga2V5LCBgJXNgLiAnICsgJ0tleXMgc2hvdWxkIGJlIHVuaXF1ZSBzbyB0aGF0IGNvbXBvbmVudHMgbWFpbnRhaW4gdGhlaXIgaWRlbnRpdHkgJyArICdhY3Jvc3MgdXBkYXRlcy4gTm9uLXVuaXF1ZSBrZXlzIG1heSBjYXVzZSBjaGlsZHJlbiB0byBiZSAnICsgJ2R1cGxpY2F0ZWQgYW5kL29yIG9taXR0ZWQg4oCUIHRoZSBiZWhhdmlvciBpcyB1bnN1cHBvcnRlZCBhbmQgJyArICdjb3VsZCBjaGFuZ2UgaW4gYSBmdXR1cmUgdmVyc2lvbi4nLCBrZXkpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGtub3duS2V5cztcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuQXJyYXkocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbiwgbGFuZXMpIHtcbiAgICAvLyBUaGlzIGFsZ29yaXRobSBjYW4ndCBvcHRpbWl6ZSBieSBzZWFyY2hpbmcgZnJvbSBib3RoIGVuZHMgc2luY2Ugd2VcbiAgICAvLyBkb24ndCBoYXZlIGJhY2twb2ludGVycyBvbiBmaWJlcnMuIEknbSB0cnlpbmcgdG8gc2VlIGhvdyBmYXIgd2UgY2FuIGdldFxuICAgIC8vIHdpdGggdGhhdCBtb2RlbC4gSWYgaXQgZW5kcyB1cCBub3QgYmVpbmcgd29ydGggdGhlIHRyYWRlb2Zmcywgd2UgY2FuXG4gICAgLy8gYWRkIGl0IGxhdGVyLlxuICAgIC8vIEV2ZW4gd2l0aCBhIHR3byBlbmRlZCBvcHRpbWl6YXRpb24sIHdlJ2Qgd2FudCB0byBvcHRpbWl6ZSBmb3IgdGhlIGNhc2VcbiAgICAvLyB3aGVyZSB0aGVyZSBhcmUgZmV3IGNoYW5nZXMgYW5kIGJydXRlIGZvcmNlIHRoZSBjb21wYXJpc29uIGluc3RlYWQgb2ZcbiAgICAvLyBnb2luZyBmb3IgdGhlIE1hcC4gSXQnZCBsaWtlIHRvIGV4cGxvcmUgaGl0dGluZyB0aGF0IHBhdGggZmlyc3QgaW5cbiAgICAvLyBmb3J3YXJkLW9ubHkgbW9kZSBhbmQgb25seSBnbyBmb3IgdGhlIE1hcCBvbmNlIHdlIG5vdGljZSB0aGF0IHdlIG5lZWRcbiAgICAvLyBsb3RzIG9mIGxvb2sgYWhlYWQuIFRoaXMgZG9lc24ndCBoYW5kbGUgcmV2ZXJzYWwgYXMgd2VsbCBhcyB0d28gZW5kZWRcbiAgICAvLyBzZWFyY2ggYnV0IHRoYXQncyB1bnVzdWFsLiBCZXNpZGVzLCBmb3IgdGhlIHR3byBlbmRlZCBvcHRpbWl6YXRpb24gdG9cbiAgICAvLyB3b3JrIG9uIEl0ZXJhYmxlcywgd2UnZCBuZWVkIHRvIGNvcHkgdGhlIHdob2xlIHNldC5cbiAgICAvLyBJbiB0aGlzIGZpcnN0IGl0ZXJhdGlvbiwgd2UnbGwganVzdCBsaXZlIHdpdGggaGl0dGluZyB0aGUgYmFkIGNhc2VcbiAgICAvLyAoYWRkaW5nIGV2ZXJ5dGhpbmcgdG8gYSBNYXApIGluIGZvciBldmVyeSBpbnNlcnQvbW92ZS5cbiAgICAvLyBJZiB5b3UgY2hhbmdlIHRoaXMgY29kZSwgYWxzbyB1cGRhdGUgcmVjb25jaWxlQ2hpbGRyZW5JdGVyYXRvcigpIHdoaWNoXG4gICAgLy8gdXNlcyB0aGUgc2FtZSBhbGdvcml0aG0uXG4gICAge1xuICAgICAgLy8gRmlyc3QsIHZhbGlkYXRlIGtleXMuXG4gICAgICB2YXIga25vd25LZXlzID0gbnVsbDtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdDaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY2hpbGQgPSBuZXdDaGlsZHJlbltpXTtcbiAgICAgICAga25vd25LZXlzID0gd2Fybk9uSW52YWxpZEtleShjaGlsZCwga25vd25LZXlzLCByZXR1cm5GaWJlcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiBuZXdJZHggPCBuZXdDaGlsZHJlbi5sZW5ndGg7IG5ld0lkeCsrKSB7XG4gICAgICBpZiAob2xkRmliZXIuaW5kZXggPiBuZXdJZHgpIHtcbiAgICAgICAgbmV4dE9sZEZpYmVyID0gb2xkRmliZXI7XG4gICAgICAgIG9sZEZpYmVyID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyLnNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXdGaWJlciA9IHVwZGF0ZVNsb3QocmV0dXJuRmliZXIsIG9sZEZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChuZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAvLyBUT0RPOiBUaGlzIGJyZWFrcyBvbiBlbXB0eSBzbG90cyBsaWtlIG51bGwgY2hpbGRyZW4uIFRoYXQnc1xuICAgICAgICAvLyB1bmZvcnR1bmF0ZSBiZWNhdXNlIGl0IHRyaWdnZXJzIHRoZSBzbG93IHBhdGggYWxsIHRoZSB0aW1lLiBXZSBuZWVkXG4gICAgICAgIC8vIGEgYmV0dGVyIHdheSB0byBjb21tdW5pY2F0ZSB3aGV0aGVyIHRoaXMgd2FzIGEgbWlzcyBvciBudWxsLFxuICAgICAgICAvLyBib29sZWFuLCB1bmRlZmluZWQsIGV0Yy5cbiAgICAgICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgICAgaWYgKG9sZEZpYmVyICYmIG5ld0ZpYmVyLmFsdGVybmF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIG1hdGNoZWQgdGhlIHNsb3QsIGJ1dCB3ZSBkaWRuJ3QgcmV1c2UgdGhlIGV4aXN0aW5nIGZpYmVyLCBzbyB3ZVxuICAgICAgICAgIC8vIG5lZWQgdG8gZGVsZXRlIHRoZSBleGlzdGluZyBjaGlsZC5cbiAgICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQobmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSBvdXQgb2YgdGhlIGxvb3AuIFRoaXMgb25seSBoYXBwZW5zIGZvciB0aGUgZmlyc3QgcnVuLlxuICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gbmV3RmliZXI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUT0RPOiBEZWZlciBzaWJsaW5ncyBpZiB3ZSdyZSBub3QgYXQgdGhlIHJpZ2h0IGluZGV4IGZvciB0aGlzIHNsb3QuXG4gICAgICAgIC8vIEkuZS4gaWYgd2UgaGFkIG51bGwgdmFsdWVzIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIGRlZmVyIHRoaXNcbiAgICAgICAgLy8gZm9yIGVhY2ggbnVsbCB2YWx1ZS4gSG93ZXZlciwgd2UgYWxzbyBkb24ndCB3YW50IHRvIGNhbGwgdXBkYXRlU2xvdFxuICAgICAgICAvLyB3aXRoIHRoZSBwcmV2aW91cyBvbmUuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IG5ld0ZpYmVyO1xuICAgICAgfVxuXG4gICAgICBwcmV2aW91c05ld0ZpYmVyID0gbmV3RmliZXI7XG4gICAgICBvbGRGaWJlciA9IG5leHRPbGRGaWJlcjtcbiAgICB9XG5cbiAgICBpZiAobmV3SWR4ID09PSBuZXdDaGlsZHJlbi5sZW5ndGgpIHtcbiAgICAgIC8vIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgbmV3IGNoaWxkcmVuLiBXZSBjYW4gZGVsZXRlIHRoZSByZXN0LlxuICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH1cblxuICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhbnkgbW9yZSBleGlzdGluZyBjaGlsZHJlbiB3ZSBjYW4gY2hvb3NlIGEgZmFzdCBwYXRoXG4gICAgICAvLyBzaW5jZSB0aGUgcmVzdCB3aWxsIGFsbCBiZSBpbnNlcnRpb25zLlxuICAgICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlciA9IGNyZWF0ZUNoaWxkKHJldHVybkZpYmVyLCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgICAgaWYgKF9uZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZpb3VzTmV3RmliZXIuc2libGluZyA9IF9uZXdGaWJlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7IG5ld0lkeCA8IG5ld0NoaWxkcmVuLmxlbmd0aDsgbmV3SWR4KyspIHtcbiAgICAgIHZhciBfbmV3RmliZXIyID0gdXBkYXRlRnJvbU1hcChleGlzdGluZ0NoaWxkcmVuLCByZXR1cm5GaWJlciwgbmV3SWR4LCBuZXdDaGlsZHJlbltuZXdJZHhdLCBsYW5lcyk7XG5cbiAgICAgIGlmIChfbmV3RmliZXIyICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgICAgaWYgKF9uZXdGaWJlcjIuYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgbmV3IGZpYmVyIGlzIGEgd29yayBpbiBwcm9ncmVzcywgYnV0IGlmIHRoZXJlIGV4aXN0cyBhXG4gICAgICAgICAgICAvLyBjdXJyZW50LCB0aGF0IG1lYW5zIHRoYXQgd2UgcmV1c2VkIHRoZSBmaWJlci4gV2UgbmVlZCB0byBkZWxldGVcbiAgICAgICAgICAgIC8vIGl0IGZyb20gdGhlIGNoaWxkIGxpc3Qgc28gdGhhdCB3ZSBkb24ndCBhZGQgaXQgdG8gdGhlIGRlbGV0aW9uXG4gICAgICAgICAgICAvLyBsaXN0LlxuICAgICAgICAgICAgZXhpc3RpbmdDaGlsZHJlbi5kZWxldGUoX25ld0ZpYmVyMi5rZXkgPT09IG51bGwgPyBuZXdJZHggOiBfbmV3RmliZXIyLmtleSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGFzdFBsYWNlZEluZGV4ID0gcGxhY2VDaGlsZChfbmV3RmliZXIyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgICAgaWYgKHByZXZpb3VzTmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIyO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFRyYWNrU2lkZUVmZmVjdHMpIHtcbiAgICAgIC8vIEFueSBleGlzdGluZyBjaGlsZHJlbiB0aGF0IHdlcmVuJ3QgY29uc3VtZWQgYWJvdmUgd2VyZSBkZWxldGVkLiBXZSBuZWVkXG4gICAgICAvLyB0byBhZGQgdGhlbSB0byB0aGUgZGVsZXRpb24gbGlzdC5cbiAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0aW5nRmlyc3RDaGlsZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkcmVuSXRlcmF0b3IocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBuZXdDaGlsZHJlbkl0ZXJhYmxlLCBsYW5lcykge1xuICAgIC8vIFRoaXMgaXMgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24gYXMgcmVjb25jaWxlQ2hpbGRyZW5BcnJheSgpLFxuICAgIC8vIGJ1dCB1c2luZyB0aGUgaXRlcmF0b3IgaW5zdGVhZC5cbiAgICB2YXIgaXRlcmF0b3JGbiA9IGdldEl0ZXJhdG9yRm4obmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICBpZiAoISh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gb2JqZWN0IGlzIG5vdCBhbiBpdGVyYWJsZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHtcbiAgICAgIC8vIFdlIGRvbid0IHN1cHBvcnQgcmVuZGVyaW5nIEdlbmVyYXRvcnMgYmVjYXVzZSBpdCdzIGEgbXV0YXRpb24uXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy8xMjk5NVxuICAgICAgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgLy8gJEZsb3dGaXhNZSBGbG93IGRvZXNuJ3Qga25vdyBhYm91dCB0b1N0cmluZ1RhZ1xuICAgICAgbmV3Q2hpbGRyZW5JdGVyYWJsZVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnR2VuZXJhdG9yJykge1xuICAgICAgICBpZiAoIWRpZFdhcm5BYm91dEdlbmVyYXRvcnMpIHtcbiAgICAgICAgICBlcnJvcignVXNpbmcgR2VuZXJhdG9ycyBhcyBjaGlsZHJlbiBpcyB1bnN1cHBvcnRlZCBhbmQgd2lsbCBsaWtlbHkgeWllbGQgJyArICd1bmV4cGVjdGVkIHJlc3VsdHMgYmVjYXVzZSBlbnVtZXJhdGluZyBhIGdlbmVyYXRvciBtdXRhdGVzIGl0LiAnICsgJ1lvdSBtYXkgY29udmVydCBpdCB0byBhbiBhcnJheSB3aXRoIGBBcnJheS5mcm9tKClgIG9yIHRoZSAnICsgJ2BbLi4uc3ByZWFkXWAgb3BlcmF0b3IgYmVmb3JlIHJlbmRlcmluZy4gS2VlcCBpbiBtaW5kICcgKyAneW91IG1pZ2h0IG5lZWQgdG8gcG9seWZpbGwgdGhlc2UgZmVhdHVyZXMgZm9yIG9sZGVyIGJyb3dzZXJzLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2VuZXJhdG9ycyA9IHRydWU7XG4gICAgICB9IC8vIFdhcm4gYWJvdXQgdXNpbmcgTWFwcyBhcyBjaGlsZHJlblxuXG5cbiAgICAgIGlmIChuZXdDaGlsZHJlbkl0ZXJhYmxlLmVudHJpZXMgPT09IGl0ZXJhdG9yRm4pIHtcbiAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNYXBzKSB7XG4gICAgICAgICAgZXJyb3IoJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgZGlkV2FybkFib3V0TWFwcyA9IHRydWU7XG4gICAgICB9IC8vIEZpcnN0LCB2YWxpZGF0ZSBrZXlzLlxuICAgICAgLy8gV2UnbGwgZ2V0IGEgZGlmZmVyZW50IGl0ZXJhdG9yIGxhdGVyIGZvciB0aGUgbWFpbiBwYXNzLlxuXG5cbiAgICAgIHZhciBfbmV3Q2hpbGRyZW4gPSBpdGVyYXRvckZuLmNhbGwobmV3Q2hpbGRyZW5JdGVyYWJsZSk7XG5cbiAgICAgIGlmIChfbmV3Q2hpbGRyZW4pIHtcbiAgICAgICAgdmFyIGtub3duS2V5cyA9IG51bGw7XG5cbiAgICAgICAgdmFyIF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgICAgICBmb3IgKDsgIV9zdGVwLmRvbmU7IF9zdGVwID0gX25ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgICAgIHZhciBjaGlsZCA9IF9zdGVwLnZhbHVlO1xuICAgICAgICAgIGtub3duS2V5cyA9IHdhcm5PbkludmFsaWRLZXkoY2hpbGQsIGtub3duS2V5cywgcmV0dXJuRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIG5ld0NoaWxkcmVuID0gaXRlcmF0b3JGbi5jYWxsKG5ld0NoaWxkcmVuSXRlcmFibGUpO1xuXG4gICAgaWYgKCEobmV3Q2hpbGRyZW4gIT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQW4gaXRlcmFibGUgb2JqZWN0IHByb3ZpZGVkIG5vIGl0ZXJhdG9yLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdGluZ0ZpcnN0Q2hpbGQgPSBudWxsO1xuICAgIHZhciBwcmV2aW91c05ld0ZpYmVyID0gbnVsbDtcbiAgICB2YXIgb2xkRmliZXIgPSBjdXJyZW50Rmlyc3RDaGlsZDtcbiAgICB2YXIgbGFzdFBsYWNlZEluZGV4ID0gMDtcbiAgICB2YXIgbmV3SWR4ID0gMDtcbiAgICB2YXIgbmV4dE9sZEZpYmVyID0gbnVsbDtcbiAgICB2YXIgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKTtcblxuICAgIGZvciAoOyBvbGRGaWJlciAhPT0gbnVsbCAmJiAhc3RlcC5kb25lOyBuZXdJZHgrKywgc3RlcCA9IG5ld0NoaWxkcmVuLm5leHQoKSkge1xuICAgICAgaWYgKG9sZEZpYmVyLmluZGV4ID4gbmV3SWR4KSB7XG4gICAgICAgIG5leHRPbGRGaWJlciA9IG9sZEZpYmVyO1xuICAgICAgICBvbGRGaWJlciA9IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0T2xkRmliZXIgPSBvbGRGaWJlci5zaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICB2YXIgbmV3RmliZXIgPSB1cGRhdGVTbG90KHJldHVybkZpYmVyLCBvbGRGaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAobmV3RmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVE9ETzogVGhpcyBicmVha3Mgb24gZW1wdHkgc2xvdHMgbGlrZSBudWxsIGNoaWxkcmVuLiBUaGF0J3NcbiAgICAgICAgLy8gdW5mb3J0dW5hdGUgYmVjYXVzZSBpdCB0cmlnZ2VycyB0aGUgc2xvdyBwYXRoIGFsbCB0aGUgdGltZS4gV2UgbmVlZFxuICAgICAgICAvLyBhIGJldHRlciB3YXkgdG8gY29tbXVuaWNhdGUgd2hldGhlciB0aGlzIHdhcyBhIG1pc3Mgb3IgbnVsbCxcbiAgICAgICAgLy8gYm9vbGVhbiwgdW5kZWZpbmVkLCBldGMuXG4gICAgICAgIGlmIChvbGRGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIG9sZEZpYmVyID0gbmV4dE9sZEZpYmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAgIGlmIChvbGRGaWJlciAmJiBuZXdGaWJlci5hbHRlcm5hdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBzbG90LCBidXQgd2UgZGlkbid0IHJldXNlIHRoZSBleGlzdGluZyBmaWJlciwgc28gd2VcbiAgICAgICAgICAvLyBuZWVkIHRvIGRlbGV0ZSB0aGUgZXhpc3RpbmcgY2hpbGQuXG4gICAgICAgICAgZGVsZXRlQ2hpbGQocmV0dXJuRmliZXIsIG9sZEZpYmVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKG5ld0ZpYmVyLCBsYXN0UGxhY2VkSW5kZXgsIG5ld0lkeCk7XG5cbiAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IG5ld0ZpYmVyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVE9ETzogRGVmZXIgc2libGluZ3MgaWYgd2UncmUgbm90IGF0IHRoZSByaWdodCBpbmRleCBmb3IgdGhpcyBzbG90LlxuICAgICAgICAvLyBJLmUuIGlmIHdlIGhhZCBudWxsIHZhbHVlcyBiZWZvcmUsIHRoZW4gd2Ugd2FudCB0byBkZWZlciB0aGlzXG4gICAgICAgIC8vIGZvciBlYWNoIG51bGwgdmFsdWUuIEhvd2V2ZXIsIHdlIGFsc28gZG9uJ3Qgd2FudCB0byBjYWxsIHVwZGF0ZVNsb3RcbiAgICAgICAgLy8gd2l0aCB0aGUgcHJldmlvdXMgb25lLlxuICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBuZXdGaWJlcjtcbiAgICAgIH1cblxuICAgICAgcHJldmlvdXNOZXdGaWJlciA9IG5ld0ZpYmVyO1xuICAgICAgb2xkRmliZXIgPSBuZXh0T2xkRmliZXI7XG4gICAgfVxuXG4gICAgaWYgKHN0ZXAuZG9uZSkge1xuICAgICAgLy8gV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBuZXcgY2hpbGRyZW4uIFdlIGNhbiBkZWxldGUgdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgb2xkRmliZXIpO1xuICAgICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gICAgfVxuXG4gICAgaWYgKG9sZEZpYmVyID09PSBudWxsKSB7XG4gICAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBtb3JlIGV4aXN0aW5nIGNoaWxkcmVuIHdlIGNhbiBjaG9vc2UgYSBmYXN0IHBhdGhcbiAgICAgIC8vIHNpbmNlIHRoZSByZXN0IHdpbGwgYWxsIGJlIGluc2VydGlvbnMuXG4gICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgbmV3SWR4KyssIHN0ZXAgPSBuZXdDaGlsZHJlbi5uZXh0KCkpIHtcbiAgICAgICAgdmFyIF9uZXdGaWJlcjMgPSBjcmVhdGVDaGlsZChyZXR1cm5GaWJlciwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChfbmV3RmliZXIzID09PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBsYXN0UGxhY2VkSW5kZXggPSBwbGFjZUNoaWxkKF9uZXdGaWJlcjMsIGxhc3RQbGFjZWRJbmRleCwgbmV3SWR4KTtcblxuICAgICAgICBpZiAocHJldmlvdXNOZXdGaWJlciA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IE1vdmUgb3V0IG9mIHRoZSBsb29wLiBUaGlzIG9ubHkgaGFwcGVucyBmb3IgdGhlIGZpcnN0IHJ1bi5cbiAgICAgICAgICByZXN1bHRpbmdGaXJzdENoaWxkID0gX25ld0ZpYmVyMztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcmV2aW91c05ld0ZpYmVyLnNpYmxpbmcgPSBfbmV3RmliZXIzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJldmlvdXNOZXdGaWJlciA9IF9uZXdGaWJlcjM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHRpbmdGaXJzdENoaWxkO1xuICAgIH0gLy8gQWRkIGFsbCBjaGlsZHJlbiB0byBhIGtleSBtYXAgZm9yIHF1aWNrIGxvb2t1cHMuXG5cblxuICAgIHZhciBleGlzdGluZ0NoaWxkcmVuID0gbWFwUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIG9sZEZpYmVyKTsgLy8gS2VlcCBzY2FubmluZyBhbmQgdXNlIHRoZSBtYXAgdG8gcmVzdG9yZSBkZWxldGVkIGl0ZW1zIGFzIG1vdmVzLlxuXG4gICAgZm9yICg7ICFzdGVwLmRvbmU7IG5ld0lkeCsrLCBzdGVwID0gbmV3Q2hpbGRyZW4ubmV4dCgpKSB7XG4gICAgICB2YXIgX25ld0ZpYmVyNCA9IHVwZGF0ZUZyb21NYXAoZXhpc3RpbmdDaGlsZHJlbiwgcmV0dXJuRmliZXIsIG5ld0lkeCwgc3RlcC52YWx1ZSwgbGFuZXMpO1xuXG4gICAgICBpZiAoX25ld0ZpYmVyNCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoc2hvdWxkVHJhY2tTaWRlRWZmZWN0cykge1xuICAgICAgICAgIGlmIChfbmV3RmliZXI0LmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gVGhlIG5ldyBmaWJlciBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIGJ1dCBpZiB0aGVyZSBleGlzdHMgYVxuICAgICAgICAgICAgLy8gY3VycmVudCwgdGhhdCBtZWFucyB0aGF0IHdlIHJldXNlZCB0aGUgZmliZXIuIFdlIG5lZWQgdG8gZGVsZXRlXG4gICAgICAgICAgICAvLyBpdCBmcm9tIHRoZSBjaGlsZCBsaXN0IHNvIHRoYXQgd2UgZG9uJ3QgYWRkIGl0IHRvIHRoZSBkZWxldGlvblxuICAgICAgICAgICAgLy8gbGlzdC5cbiAgICAgICAgICAgIGV4aXN0aW5nQ2hpbGRyZW4uZGVsZXRlKF9uZXdGaWJlcjQua2V5ID09PSBudWxsID8gbmV3SWR4IDogX25ld0ZpYmVyNC5rZXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxhc3RQbGFjZWRJbmRleCA9IHBsYWNlQ2hpbGQoX25ld0ZpYmVyNCwgbGFzdFBsYWNlZEluZGV4LCBuZXdJZHgpO1xuXG4gICAgICAgIGlmIChwcmV2aW91c05ld0ZpYmVyID09PSBudWxsKSB7XG4gICAgICAgICAgcmVzdWx0aW5nRmlyc3RDaGlsZCA9IF9uZXdGaWJlcjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJldmlvdXNOZXdGaWJlci5zaWJsaW5nID0gX25ld0ZpYmVyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIHByZXZpb3VzTmV3RmliZXIgPSBfbmV3RmliZXI0O1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaG91bGRUcmFja1NpZGVFZmZlY3RzKSB7XG4gICAgICAvLyBBbnkgZXhpc3RpbmcgY2hpbGRyZW4gdGhhdCB3ZXJlbid0IGNvbnN1bWVkIGFib3ZlIHdlcmUgZGVsZXRlZC4gV2UgbmVlZFxuICAgICAgLy8gdG8gYWRkIHRoZW0gdG8gdGhlIGRlbGV0aW9uIGxpc3QuXG4gICAgICBleGlzdGluZ0NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJldHVybiBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdGluZ0ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBmdW5jdGlvbiByZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIHRleHRDb250ZW50LCBsYW5lcykge1xuICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBjaGVjayBmb3Iga2V5cyBvbiB0ZXh0IG5vZGVzIHNpbmNlIHdlIGRvbid0IGhhdmUgYVxuICAgIC8vIHdheSB0byBkZWZpbmUgdGhlbS5cbiAgICBpZiAoY3VycmVudEZpcnN0Q2hpbGQgIT09IG51bGwgJiYgY3VycmVudEZpcnN0Q2hpbGQudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgLy8gV2UgYWxyZWFkeSBoYXZlIGFuIGV4aXN0aW5nIG5vZGUgc28gbGV0J3MganVzdCB1cGRhdGUgaXQgYW5kIGRlbGV0ZVxuICAgICAgLy8gdGhlIHJlc3QuXG4gICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQuc2libGluZyk7XG4gICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjdXJyZW50Rmlyc3RDaGlsZCwgdGV4dENvbnRlbnQpO1xuICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfSAvLyBUaGUgZXhpc3RpbmcgZmlyc3QgY2hpbGQgaXMgbm90IGEgdGV4dCBub2RlIHNvIHdlIG5lZWQgdG8gY3JlYXRlIG9uZVxuICAgIC8vIGFuZCBkZWxldGUgdGhlIGV4aXN0aW5nIG9uZXMuXG5cblxuICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCk7XG4gICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21UZXh0KHRleHRDb250ZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG4gICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICByZXR1cm4gY3JlYXRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZVNpbmdsZUVsZW1lbnQocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50LCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBlbGVtZW50LmtleTtcbiAgICB2YXIgY2hpbGQgPSBjdXJyZW50Rmlyc3RDaGlsZDtcblxuICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgLy8gVE9ETzogSWYga2V5ID09PSBudWxsIGFuZCBjaGlsZC5rZXkgPT09IG51bGwsIHRoZW4gdGhpcyBvbmx5IGFwcGxpZXMgdG9cbiAgICAgIC8vIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBsaXN0LlxuICAgICAgaWYgKGNoaWxkLmtleSA9PT0ga2V5KSB7XG4gICAgICAgIHN3aXRjaCAoY2hpbGQudGFnKSB7XG4gICAgICAgICAgY2FzZSBGcmFnbWVudDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZC5zaWJsaW5nKTtcbiAgICAgICAgICAgICAgICB2YXIgZXhpc3RpbmcgPSB1c2VGaWJlcihjaGlsZCwgZWxlbWVudC5wcm9wcy5jaGlsZHJlbik7XG4gICAgICAgICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgICAgICAgICAgICAgICBleGlzdGluZy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBCbG9jazpcblxuICAgICAgICAgIC8vIFdlIGludGVudGlvbmFsbHkgZmFsbHRocm91Z2ggaGVyZSBpZiBlbmFibGVCbG9ja3NBUEkgaXMgbm90IG9uLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZWQgbm8tZmFsbHRocm91Z2hcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChjaGlsZC5lbGVtZW50VHlwZSA9PT0gZWxlbWVudC50eXBlIHx8ICggLy8gS2VlcCB0aGlzIGNoZWNrIGlubGluZSBzbyBpdCBvbmx5IHJ1bnMgb24gdGhlIGZhbHNlIHBhdGg6XG4gICAgICAgICAgICAgICBpc0NvbXBhdGlibGVGYW1pbHlGb3JIb3RSZWxvYWRpbmcoY2hpbGQsIGVsZW1lbnQpICkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG5cbiAgICAgICAgICAgICAgICB2YXIgX2V4aXN0aW5nMyA9IHVzZUZpYmVyKGNoaWxkLCBlbGVtZW50LnByb3BzKTtcblxuICAgICAgICAgICAgICAgIF9leGlzdGluZzMucmVmID0gY29lcmNlUmVmKHJldHVybkZpYmVyLCBjaGlsZCwgZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5yZXR1cm4gPSByZXR1cm5GaWJlcjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIF9leGlzdGluZzMuX2RlYnVnU291cmNlID0gZWxlbWVudC5fc291cmNlO1xuICAgICAgICAgICAgICAgICAgX2V4aXN0aW5nMy5fZGVidWdPd25lciA9IGVsZW1lbnQuX293bmVyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBfZXhpc3RpbmczO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gLy8gRGlkbid0IG1hdGNoLlxuXG5cbiAgICAgICAgZGVsZXRlUmVtYWluaW5nQ2hpbGRyZW4ocmV0dXJuRmliZXIsIGNoaWxkKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGVDaGlsZChyZXR1cm5GaWJlciwgY2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gICAgfVxuXG4gICAgaWYgKGVsZW1lbnQudHlwZSA9PT0gUkVBQ1RfRlJBR01FTlRfVFlQRSkge1xuICAgICAgdmFyIGNyZWF0ZWQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChlbGVtZW50LnByb3BzLmNoaWxkcmVuLCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcywgZWxlbWVudC5rZXkpO1xuICAgICAgY3JlYXRlZC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBjcmVhdGVkO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgX2NyZWF0ZWQ0ID0gY3JlYXRlRmliZXJGcm9tRWxlbWVudChlbGVtZW50LCByZXR1cm5GaWJlci5tb2RlLCBsYW5lcyk7XG5cbiAgICAgIF9jcmVhdGVkNC5yZWYgPSBjb2VyY2VSZWYocmV0dXJuRmliZXIsIGN1cnJlbnRGaXJzdENoaWxkLCBlbGVtZW50KTtcbiAgICAgIF9jcmVhdGVkNC5yZXR1cm4gPSByZXR1cm5GaWJlcjtcbiAgICAgIHJldHVybiBfY3JlYXRlZDQ7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgcG9ydGFsLCBsYW5lcykge1xuICAgIHZhciBrZXkgPSBwb3J0YWwua2V5O1xuICAgIHZhciBjaGlsZCA9IGN1cnJlbnRGaXJzdENoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAvLyBUT0RPOiBJZiBrZXkgPT09IG51bGwgYW5kIGNoaWxkLmtleSA9PT0gbnVsbCwgdGhlbiB0aGlzIG9ubHkgYXBwbGllcyB0b1xuICAgICAgLy8gdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIGxpc3QuXG4gICAgICBpZiAoY2hpbGQua2V5ID09PSBrZXkpIHtcbiAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gSG9zdFBvcnRhbCAmJiBjaGlsZC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyA9PT0gcG9ydGFsLmNvbnRhaW5lckluZm8gJiYgY2hpbGQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uID09PSBwb3J0YWwuaW1wbGVtZW50YXRpb24pIHtcbiAgICAgICAgICBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY2hpbGQuc2libGluZyk7XG4gICAgICAgICAgdmFyIGV4aXN0aW5nID0gdXNlRmliZXIoY2hpbGQsIHBvcnRhbC5jaGlsZHJlbiB8fCBbXSk7XG4gICAgICAgICAgZXhpc3RpbmcucmV0dXJuID0gcmV0dXJuRmliZXI7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlbGV0ZVJlbWFpbmluZ0NoaWxkcmVuKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZUNoaWxkKHJldHVybkZpYmVyLCBjaGlsZCk7XG4gICAgICB9XG5cbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgY3JlYXRlZCA9IGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIHJldHVybkZpYmVyLm1vZGUsIGxhbmVzKTtcbiAgICBjcmVhdGVkLnJldHVybiA9IHJldHVybkZpYmVyO1xuICAgIHJldHVybiBjcmVhdGVkO1xuICB9IC8vIFRoaXMgQVBJIHdpbGwgdGFnIHRoZSBjaGlsZHJlbiB3aXRoIHRoZSBzaWRlLWVmZmVjdCBvZiB0aGUgcmVjb25jaWxpYXRpb25cbiAgLy8gaXRzZWxmLiBUaGV5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNpZGUtZWZmZWN0IGxpc3QgYXMgd2UgcGFzcyB0aHJvdWdoIHRoZVxuICAvLyBjaGlsZHJlbiBhbmQgdGhlIHBhcmVudC5cblxuXG4gIGZ1bmN0aW9uIHJlY29uY2lsZUNoaWxkRmliZXJzKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSB7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBub3QgcmVjdXJzaXZlLlxuICAgIC8vIElmIHRoZSB0b3AgbGV2ZWwgaXRlbSBpcyBhbiBhcnJheSwgd2UgdHJlYXQgaXQgYXMgYSBzZXQgb2YgY2hpbGRyZW4sXG4gICAgLy8gbm90IGFzIGEgZnJhZ21lbnQuIE5lc3RlZCBhcnJheXMgb24gdGhlIG90aGVyIGhhbmQgd2lsbCBiZSB0cmVhdGVkIGFzXG4gICAgLy8gZnJhZ21lbnQgbm9kZXMuIFJlY3Vyc2lvbiBoYXBwZW5zIGF0IHRoZSBub3JtYWwgZmxvdy5cbiAgICAvLyBIYW5kbGUgdG9wIGxldmVsIHVua2V5ZWQgZnJhZ21lbnRzIGFzIGlmIHRoZXkgd2VyZSBhcnJheXMuXG4gICAgLy8gVGhpcyBsZWFkcyB0byBhbiBhbWJpZ3VpdHkgYmV0d2VlbiA8PntbLi4uXX08Lz4gYW5kIDw+Li4uPC8+LlxuICAgIC8vIFdlIHRyZWF0IHRoZSBhbWJpZ3VvdXMgY2FzZXMgYWJvdmUgdGhlIHNhbWUuXG4gICAgdmFyIGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQgPSB0eXBlb2YgbmV3Q2hpbGQgPT09ICdvYmplY3QnICYmIG5ld0NoaWxkICE9PSBudWxsICYmIG5ld0NoaWxkLnR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgJiYgbmV3Q2hpbGQua2V5ID09PSBudWxsO1xuXG4gICAgaWYgKGlzVW5rZXllZFRvcExldmVsRnJhZ21lbnQpIHtcbiAgICAgIG5ld0NoaWxkID0gbmV3Q2hpbGQucHJvcHMuY2hpbGRyZW47XG4gICAgfSAvLyBIYW5kbGUgb2JqZWN0IHR5cGVzXG5cblxuICAgIHZhciBpc09iamVjdCA9IHR5cGVvZiBuZXdDaGlsZCA9PT0gJ29iamVjdCcgJiYgbmV3Q2hpbGQgIT09IG51bGw7XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHN3aXRjaCAobmV3Q2hpbGQuJCR0eXBlb2YpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9FTEVNRU5UX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlRWxlbWVudChyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsIG5ld0NoaWxkLCBsYW5lcykpO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIHBsYWNlU2luZ2xlQ2hpbGQocmVjb25jaWxlU2luZ2xlUG9ydGFsKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKSk7XG5cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbmV3Q2hpbGQgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gcGxhY2VTaW5nbGVDaGlsZChyZWNvbmNpbGVTaW5nbGVUZXh0Tm9kZShyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQsICcnICsgbmV3Q2hpbGQsIGxhbmVzKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkkMShuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkFycmF5KHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0SXRlcmF0b3JGbihuZXdDaGlsZCkpIHtcbiAgICAgIHJldHVybiByZWNvbmNpbGVDaGlsZHJlbkl0ZXJhdG9yKHJldHVybkZpYmVyLCBjdXJyZW50Rmlyc3RDaGlsZCwgbmV3Q2hpbGQsIGxhbmVzKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3QpIHtcbiAgICAgIHRocm93T25JbnZhbGlkT2JqZWN0VHlwZShyZXR1cm5GaWJlciwgbmV3Q2hpbGQpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd2Fybk9uRnVuY3Rpb25UeXBlKHJldHVybkZpYmVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld0NoaWxkID09PSAndW5kZWZpbmVkJyAmJiAhaXNVbmtleWVkVG9wTGV2ZWxGcmFnbWVudCkge1xuICAgICAgLy8gSWYgdGhlIG5ldyBjaGlsZCBpcyB1bmRlZmluZWQsIGFuZCB0aGUgcmV0dXJuIGZpYmVyIGlzIGEgY29tcG9zaXRlXG4gICAgICAvLyBjb21wb25lbnQsIHRocm93IGFuIGVycm9yLiBJZiBGaWJlciByZXR1cm4gdHlwZXMgYXJlIGRpc2FibGVkLFxuICAgICAgLy8gd2UgYWxyZWFkeSB0aHJldyBhYm92ZS5cbiAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgaW5zdGFuY2UgPSByZXR1cm5GaWJlci5zdGF0ZU5vZGU7XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnJlbmRlci5faXNNb2NrRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBhbGxvdyBhdXRvLW1vY2tzIHRvIHByb2NlZWQgYXMgaWYgdGhleSdyZSByZXR1cm5pbmcgbnVsbC5cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgLy8gSW50ZW50aW9uYWxseSBmYWxsIHRocm91Z2ggdG8gdGhlIG5leHQgY2FzZSwgd2hpY2ggaGFuZGxlcyBib3RoXG4gICAgICAgIC8vIGZ1bmN0aW9ucyBhbmQgY2xhc3Nlc1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVkIG5vLWZhbGx0aHJvdWdoXG5cbiAgICAgICAgY2FzZSBCbG9jazpcbiAgICAgICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIChnZXRDb21wb25lbnROYW1lKHJldHVybkZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnKSArIFwiKC4uLik6IE5vdGhpbmcgd2FzIHJldHVybmVkIGZyb20gcmVuZGVyLiBUaGlzIHVzdWFsbHkgbWVhbnMgYSByZXR1cm4gc3RhdGVtZW50IGlzIG1pc3NpbmcuIE9yLCB0byByZW5kZXIgbm90aGluZywgcmV0dXJuIG51bGwuXCIgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbWFpbmluZyBjYXNlcyBhcmUgYWxsIHRyZWF0ZWQgYXMgZW1wdHkuXG5cblxuICAgIHJldHVybiBkZWxldGVSZW1haW5pbmdDaGlsZHJlbihyZXR1cm5GaWJlciwgY3VycmVudEZpcnN0Q2hpbGQpO1xuICB9XG5cbiAgcmV0dXJuIHJlY29uY2lsZUNoaWxkRmliZXJzO1xufVxuXG52YXIgcmVjb25jaWxlQ2hpbGRGaWJlcnMgPSBDaGlsZFJlY29uY2lsZXIodHJ1ZSk7XG52YXIgbW91bnRDaGlsZEZpYmVycyA9IENoaWxkUmVjb25jaWxlcihmYWxzZSk7XG5mdW5jdGlvbiBjbG9uZUNoaWxkRmliZXJzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKSB7XG4gIGlmICghKGN1cnJlbnQgPT09IG51bGwgfHwgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPT09IGN1cnJlbnQuY2hpbGQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVzdW1pbmcgd29yayBub3QgeWV0IGltcGxlbWVudGVkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzLmNoaWxkID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGN1cnJlbnRDaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgbmV3Q2hpbGQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICBuZXdDaGlsZC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcblxuICB3aGlsZSAoY3VycmVudENoaWxkLnNpYmxpbmcgIT09IG51bGwpIHtcbiAgICBjdXJyZW50Q2hpbGQgPSBjdXJyZW50Q2hpbGQuc2libGluZztcbiAgICBuZXdDaGlsZCA9IG5ld0NoaWxkLnNpYmxpbmcgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50Q2hpbGQsIGN1cnJlbnRDaGlsZC5wZW5kaW5nUHJvcHMpO1xuICAgIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB9XG5cbiAgbmV3Q2hpbGQuc2libGluZyA9IG51bGw7XG59IC8vIFJlc2V0IGEgd29ya0luUHJvZ3Jlc3MgY2hpbGQgc2V0IHRvIHByZXBhcmUgaXQgZm9yIGEgc2Vjb25kIHBhc3MuXG5cbmZ1bmN0aW9uIHJlc2V0Q2hpbGRGaWJlcnMod29ya0luUHJvZ3Jlc3MsIGxhbmVzKSB7XG4gIHZhciBjaGlsZCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgIHJlc2V0V29ya0luUHJvZ3Jlc3MoY2hpbGQsIGxhbmVzKTtcbiAgICBjaGlsZCA9IGNoaWxkLnNpYmxpbmc7XG4gIH1cbn1cblxudmFyIE5PX0NPTlRFWFQgPSB7fTtcbnZhciBjb250ZXh0U3RhY2tDdXJzb3IkMSA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciBjb250ZXh0RmliZXJTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcbnZhciByb290SW5zdGFuY2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihOT19DT05URVhUKTtcblxuZnVuY3Rpb24gcmVxdWlyZWRDb250ZXh0KGMpIHtcbiAgaWYgKCEoYyAhPT0gTk9fQ09OVEVYVCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJFeHBlY3RlZCBob3N0IGNvbnRleHQgdG8gZXhpc3QuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYztcbn1cblxuZnVuY3Rpb24gZ2V0Um9vdEhvc3RDb250YWluZXIoKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHJldHVybiByb290SW5zdGFuY2U7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Q29udGFpbmVyKGZpYmVyLCBuZXh0Um9vdEluc3RhbmNlKSB7XG4gIC8vIFB1c2ggY3VycmVudCByb290IGluc3RhbmNlIG9udG8gdGhlIHN0YWNrO1xuICAvLyBUaGlzIGFsbG93cyB1cyB0byByZXNldCByb290IHdoZW4gcG9ydGFscyBhcmUgcG9wcGVkLlxuICBwdXNoKHJvb3RJbnN0YW5jZVN0YWNrQ3Vyc29yLCBuZXh0Um9vdEluc3RhbmNlLCBmaWJlcik7IC8vIFRyYWNrIHRoZSBjb250ZXh0IGFuZCB0aGUgRmliZXIgdGhhdCBwcm92aWRlZCBpdC5cbiAgLy8gVGhpcyBlbmFibGVzIHVzIHRvIHBvcCBvbmx5IEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuXG4gIHB1c2goY29udGV4dEZpYmVyU3RhY2tDdXJzb3IsIGZpYmVyLCBmaWJlcik7IC8vIEZpbmFsbHksIHdlIG5lZWQgdG8gcHVzaCB0aGUgaG9zdCBjb250ZXh0IHRvIHRoZSBzdGFjay5cbiAgLy8gSG93ZXZlciwgd2UgY2FuJ3QganVzdCBjYWxsIGdldFJvb3RIb3N0Q29udGV4dCgpIGFuZCBwdXNoIGl0IGJlY2F1c2VcbiAgLy8gd2UnZCBoYXZlIGEgZGlmZmVyZW50IG51bWJlciBvZiBlbnRyaWVzIG9uIHRoZSBzdGFjayBkZXBlbmRpbmcgb25cbiAgLy8gd2hldGhlciBnZXRSb290SG9zdENvbnRleHQoKSB0aHJvd3Mgc29tZXdoZXJlIGluIHJlbmRlcmVyIGNvZGUgb3Igbm90LlxuICAvLyBTbyB3ZSBwdXNoIGFuIGVtcHR5IHZhbHVlIGZpcnN0LiBUaGlzIGxldHMgdXMgc2FmZWx5IHVud2luZCBvbiBlcnJvcnMuXG5cbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgTk9fQ09OVEVYVCwgZmliZXIpO1xuICB2YXIgbmV4dFJvb3RDb250ZXh0ID0gZ2V0Um9vdEhvc3RDb250ZXh0KG5leHRSb290SW5zdGFuY2UpOyAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB0aHJvdywgcmVwbGFjZSBpdC5cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcHVzaChjb250ZXh0U3RhY2tDdXJzb3IkMSwgbmV4dFJvb3RDb250ZXh0LCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHBvcEhvc3RDb250YWluZXIoZmliZXIpIHtcbiAgcG9wKGNvbnRleHRTdGFja0N1cnNvciQxLCBmaWJlcik7XG4gIHBvcChjb250ZXh0RmliZXJTdGFja0N1cnNvciwgZmliZXIpO1xuICBwb3Aocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IsIGZpYmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdENvbnRleHQoKSB7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICByZXR1cm4gY29udGV4dDtcbn1cblxuZnVuY3Rpb24gcHVzaEhvc3RDb250ZXh0KGZpYmVyKSB7XG4gIHZhciByb290SW5zdGFuY2UgPSByZXF1aXJlZENvbnRleHQocm9vdEluc3RhbmNlU3RhY2tDdXJzb3IuY3VycmVudCk7XG4gIHZhciBjb250ZXh0ID0gcmVxdWlyZWRDb250ZXh0KGNvbnRleHRTdGFja0N1cnNvciQxLmN1cnJlbnQpO1xuICB2YXIgbmV4dENvbnRleHQgPSBnZXRDaGlsZEhvc3RDb250ZXh0KGNvbnRleHQsIGZpYmVyLnR5cGUpOyAvLyBEb24ndCBwdXNoIHRoaXMgRmliZXIncyBjb250ZXh0IHVubGVzcyBpdCdzIHVuaXF1ZS5cblxuICBpZiAoY29udGV4dCA9PT0gbmV4dENvbnRleHQpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gVHJhY2sgdGhlIGNvbnRleHQgYW5kIHRoZSBGaWJlciB0aGF0IHByb3ZpZGVkIGl0LlxuICAvLyBUaGlzIGVuYWJsZXMgdXMgdG8gcG9wIG9ubHkgRmliZXJzIHRoYXQgcHJvdmlkZSB1bmlxdWUgY29udGV4dHMuXG5cblxuICBwdXNoKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlciwgZmliZXIpO1xuICBwdXNoKGNvbnRleHRTdGFja0N1cnNvciQxLCBuZXh0Q29udGV4dCwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwb3BIb3N0Q29udGV4dChmaWJlcikge1xuICAvLyBEbyBub3QgcG9wIHVubGVzcyB0aGlzIEZpYmVyIHByb3ZpZGVkIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gIC8vIHB1c2hIb3N0Q29udGV4dCgpIG9ubHkgcHVzaGVzIEZpYmVycyB0aGF0IHByb3ZpZGUgdW5pcXVlIGNvbnRleHRzLlxuICBpZiAoY29udGV4dEZpYmVyU3RhY2tDdXJzb3IuY3VycmVudCAhPT0gZmliZXIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBwb3AoY29udGV4dFN0YWNrQ3Vyc29yJDEsIGZpYmVyKTtcbiAgcG9wKGNvbnRleHRGaWJlclN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbnZhciBEZWZhdWx0U3VzcGVuc2VDb250ZXh0ID0gMDsgLy8gVGhlIFN1c3BlbnNlIENvbnRleHQgaXMgc3BsaXQgaW50byB0d28gcGFydHMuIFRoZSBsb3dlciBiaXRzIGlzXG4vLyBpbmhlcml0ZWQgZGVlcGx5IGRvd24gdGhlIHN1YnRyZWUuIFRoZSB1cHBlciBiaXRzIG9ubHkgYWZmZWN0XG4vLyB0aGlzIGltbWVkaWF0ZSBzdXNwZW5zZSBib3VuZGFyeSBhbmQgZ2V0cyByZXNldCBlYWNoIG5ld1xuLy8gYm91bmRhcnkgb3Igc3VzcGVuc2UgbGlzdC5cblxudmFyIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrID0gMTsgLy8gU3VidHJlZSBGbGFnczpcbi8vIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCBpbmRpY2F0ZXMgdGhhdCBvbmUgb2Ygb3VyIHBhcmVudCBTdXNwZW5zZVxuLy8gYm91bmRhcmllcyBpcyBub3QgY3VycmVudGx5IHNob3dpbmcgdmlzaWJsZSBtYWluIGNvbnRlbnQuXG4vLyBFaXRoZXIgYmVjYXVzZSBpdCBpcyBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjayBvciBpcyBub3QgbW91bnRlZCBhdCBhbGwuXG4vLyBXZSBjYW4gdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlc2lyYWJsZSB0byB0cmlnZ2VyIGEgZmFsbGJhY2sgYXRcbi8vIHRoZSBwYXJlbnQuIElmIG5vdCwgdGhlbiB3ZSBtaWdodCBuZWVkIHRvIHRyaWdnZXIgdW5kZXNpcmFibGUgYm91bmRhcmllc1xuLy8gYW5kL29yIHN1c3BlbmQgdGhlIGNvbW1pdCB0byBhdm9pZCBoaWRpbmcgdGhlIHBhcmVudCBjb250ZW50LlxuXG52YXIgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0ID0gMTsgLy8gU2hhbGxvdyBGbGFnczpcbi8vIEZvcmNlU3VzcGVuc2VGYWxsYmFjayBjYW4gYmUgdXNlZCBieSBTdXNwZW5zZUxpc3QgdG8gZm9yY2UgbmV3bHkgYWRkZWRcbi8vIGl0ZW1zIGludG8gdGhlaXIgZmFsbGJhY2sgc3RhdGUgZHVyaW5nIG9uZSBvZiB0aGUgcmVuZGVyIHBhc3Nlcy5cblxudmFyIEZvcmNlU3VzcGVuc2VGYWxsYmFjayA9IDI7XG52YXIgc3VzcGVuc2VTdGFja0N1cnNvciA9IGNyZWF0ZUN1cnNvcihEZWZhdWx0U3VzcGVuc2VDb250ZXh0KTtcbmZ1bmN0aW9uIGhhc1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBmbGFnKSB7XG4gIHJldHVybiAocGFyZW50Q29udGV4dCAmIGZsYWcpICE9PSAwO1xufVxuZnVuY3Rpb24gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQocGFyZW50Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrO1xufVxuZnVuY3Rpb24gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChwYXJlbnRDb250ZXh0LCBzaGFsbG93Q29udGV4dCkge1xuICByZXR1cm4gcGFyZW50Q29udGV4dCAmIFN1YnRyZWVTdXNwZW5zZUNvbnRleHRNYXNrIHwgc2hhbGxvd0NvbnRleHQ7XG59XG5mdW5jdGlvbiBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHBhcmVudENvbnRleHQsIHN1YnRyZWVDb250ZXh0KSB7XG4gIHJldHVybiBwYXJlbnRDb250ZXh0IHwgc3VidHJlZUNvbnRleHQ7XG59XG5mdW5jdGlvbiBwdXNoU3VzcGVuc2VDb250ZXh0KGZpYmVyLCBuZXdDb250ZXh0KSB7XG4gIHB1c2goc3VzcGVuc2VTdGFja0N1cnNvciwgbmV3Q29udGV4dCwgZmliZXIpO1xufVxuZnVuY3Rpb24gcG9wU3VzcGVuc2VDb250ZXh0KGZpYmVyKSB7XG4gIHBvcChzdXNwZW5zZVN0YWNrQ3Vyc29yLCBmaWJlcik7XG59XG5cbmZ1bmN0aW9uIHNob3VsZENhcHR1cmVTdXNwZW5zZSh3b3JrSW5Qcm9ncmVzcywgaGFzSW52aXNpYmxlUGFyZW50KSB7XG4gIC8vIElmIGl0IHdhcyB0aGUgcHJpbWFyeSBjaGlsZHJlbiB0aGF0IGp1c3Qgc3VzcGVuZGVkLCBjYXB0dXJlIGFuZCByZW5kZXIgdGhlXG4gIC8vIGZhbGxiYWNrLiBPdGhlcndpc2UsIGRvbid0IGNhcHR1cmUgYW5kIGJ1YmJsZSB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5leHRTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0U3RhdGUuZGVoeWRyYXRlZCAhPT0gbnVsbCkge1xuICAgICAgLy8gQSBkZWh5ZHJhdGVkIGJvdW5kYXJ5IGFsd2F5cyBjYXB0dXJlcy5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkUHJvcHM7IC8vIEluIG9yZGVyIHRvIGNhcHR1cmUsIHRoZSBTdXNwZW5zZSBjb21wb25lbnQgbXVzdCBoYXZlIGEgZmFsbGJhY2sgcHJvcC5cblxuICBpZiAocHJvcHMuZmFsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBSZWd1bGFyIGJvdW5kYXJpZXMgYWx3YXlzIGNhcHR1cmUuXG5cblxuICBpZiAocHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgIT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBJZiBpdCdzIGEgYm91bmRhcnkgd2Ugc2hvdWxkIGF2b2lkLCB0aGVuIHdlIHByZWZlciB0byBidWJibGUgdXAgdG8gdGhlXG4gIC8vIHBhcmVudCBib3VuZGFyeSBpZiBpdCBpcyBjdXJyZW50bHkgaW52aXNpYmxlLlxuXG5cbiAgaWYgKGhhc0ludmlzaWJsZVBhcmVudCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBJZiB0aGUgcGFyZW50IGlzIG5vdCBhYmxlIHRvIGhhbmRsZSBpdCwgd2UgbXVzdCBoYW5kbGUgaXQuXG5cblxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpIHtcbiAgdmFyIG5vZGUgPSByb3c7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgZGVoeWRyYXRlZCA9IHN0YXRlLmRlaHlkcmF0ZWQ7XG5cbiAgICAgICAgaWYgKGRlaHlkcmF0ZWQgPT09IG51bGwgfHwgaXNTdXNwZW5zZUluc3RhbmNlUGVuZGluZyhkZWh5ZHJhdGVkKSB8fCBpc1N1c3BlbnNlSW5zdGFuY2VGYWxsYmFjayhkZWh5ZHJhdGVkKSkge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gU3VzcGVuc2VMaXN0Q29tcG9uZW50ICYmIC8vIHJldmVhbE9yZGVyIHVuZGVmaW5lZCBjYW4ndCBiZSB0cnVzdGVkIGJlY2F1c2UgaXQgZG9uJ3RcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgaXQgc3VzcGVuZGVkIG9yIG5vdC5cbiAgICBub2RlLm1lbW9pemVkUHJvcHMucmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGRpZFN1c3BlbmQgPSAobm9kZS5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzO1xuXG4gICAgICBpZiAoZGlkU3VzcGVuZCkge1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5vZGUuY2hpbGQucmV0dXJuID0gbm9kZTtcbiAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IHJvdykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgd2hpbGUgKG5vZGUuc2libGluZyA9PT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSByb3cpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgTm9GbGFncyQxID1cbi8qICAqL1xuMDsgLy8gUmVwcmVzZW50cyB3aGV0aGVyIGVmZmVjdCBzaG91bGQgZmlyZS5cblxudmFyIEhhc0VmZmVjdCA9XG4vKiAqL1xuMTsgLy8gUmVwcmVzZW50cyB0aGUgcGhhc2UgaW4gd2hpY2ggdGhlIGVmZmVjdCAobm90IHRoZSBjbGVhbi11cCkgZmlyZXMuXG5cbnZhciBMYXlvdXQgPVxuLyogICAgKi9cbjI7XG52YXIgUGFzc2l2ZSQxID1cbi8qICAgKi9cbjQ7XG5cbi8vIFRoaXMgbWF5IGhhdmUgYmVlbiBhbiBpbnNlcnRpb24gb3IgYSBoeWRyYXRpb24uXG5cbnZhciBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG52YXIgbmV4dEh5ZHJhdGFibGVJbnN0YW5jZSA9IG51bGw7XG52YXIgaXNIeWRyYXRpbmcgPSBmYWxzZTtcblxuZnVuY3Rpb24gZW50ZXJIeWRyYXRpb25TdGF0ZShmaWJlcikge1xuXG4gIHZhciBwYXJlbnRJbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQocGFyZW50SW5zdGFuY2UpO1xuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBpc0h5ZHJhdGluZyA9IHRydWU7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UocmV0dXJuRmliZXIsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBzd2l0Y2ggKHJldHVybkZpYmVyLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgZGlkTm90SHlkcmF0ZUNvbnRhaW5lckluc3RhbmNlKHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvLCBpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGRpZE5vdEh5ZHJhdGVJbnN0YW5jZShyZXR1cm5GaWJlci50eXBlLCByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzLCByZXR1cm5GaWJlci5zdGF0ZU5vZGUsIGluc3RhbmNlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkVG9EZWxldGUgPSBjcmVhdGVGaWJlckZyb21Ib3N0SW5zdGFuY2VGb3JEZWxldGlvbigpO1xuICBjaGlsZFRvRGVsZXRlLnN0YXRlTm9kZSA9IGluc3RhbmNlO1xuICBjaGlsZFRvRGVsZXRlLnJldHVybiA9IHJldHVybkZpYmVyO1xuICBjaGlsZFRvRGVsZXRlLmZsYWdzID0gRGVsZXRpb247IC8vIFRoaXMgbWlnaHQgc2VlbSBsaWtlIGl0IGJlbG9uZ3Mgb24gcHJvZ3Jlc3NlZEZpcnN0RGVsZXRpb24uIEhvd2V2ZXIsXG4gIC8vIHRoZXNlIGNoaWxkcmVuIGFyZSBub3QgcGFydCBvZiB0aGUgcmVjb25jaWxpYXRpb24gbGlzdCBvZiBjaGlsZHJlbi5cbiAgLy8gRXZlbiBpZiB3ZSBhYm9ydCBhbmQgcmVyZWNvbmNpbGUgdGhlIGNoaWxkcmVuLCB0aGF0IHdpbGwgdHJ5IHRvIGh5ZHJhdGVcbiAgLy8gYWdhaW4gYW5kIHRoZSBub2RlcyBhcmUgc3RpbGwgaW4gdGhlIGhvc3QgdHJlZSBzbyB0aGVzZSB3aWxsIGJlXG4gIC8vIHJlY3JlYXRlZC5cblxuICBpZiAocmV0dXJuRmliZXIubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGNoaWxkVG9EZWxldGU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY2hpbGRUb0RlbGV0ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKHJldHVybkZpYmVyLCBmaWJlcikge1xuICBmaWJlci5mbGFncyA9IGZpYmVyLmZsYWdzICYgfkh5ZHJhdGluZyB8IFBsYWNlbWVudDtcblxuICB7XG4gICAgc3dpdGNoIChyZXR1cm5GaWJlci50YWcpIHtcbiAgICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgcGFyZW50Q29udGFpbmVyID0gcmV0dXJuRmliZXIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG5cbiAgICAgICAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICB2YXIgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVDb250YWluZXJJbnN0YW5jZShwYXJlbnRDb250YWluZXIsIHR5cGUpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgICAgICAgICAgdmFyIHRleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBwYXJlbnRUeXBlID0gcmV0dXJuRmliZXIudHlwZTtcbiAgICAgICAgICB2YXIgcGFyZW50UHJvcHMgPSByZXR1cm5GaWJlci5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgICAgICAgIHZhciBfdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBfcHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlSW5zdGFuY2UocGFyZW50VHlwZSwgcGFyZW50UHJvcHMsIHBhcmVudEluc3RhbmNlLCBfdHlwZSk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgICAgICAgICB2YXIgX3RleHQgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgICAgICAgICAgIGRpZE5vdEZpbmRIeWRyYXRhYmxlVGV4dEluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzLCBwYXJlbnRJbnN0YW5jZSwgX3RleHQpO1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgICAgICAgICAgZGlkTm90RmluZEh5ZHJhdGFibGVTdXNwZW5zZUluc3RhbmNlKHBhcmVudFR5cGUsIHBhcmVudFByb3BzKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlIeWRyYXRlKGZpYmVyLCBuZXh0SW5zdGFuY2UpIHtcbiAgc3dpdGNoIChmaWJlci50YWcpIHtcbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0eXBlID0gZmliZXIudHlwZTtcbiAgICAgICAgdmFyIHByb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBjYW5IeWRyYXRlSW5zdGFuY2UobmV4dEluc3RhbmNlLCB0eXBlKTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSBpbnN0YW5jZTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciB0ZXh0ID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgICAgICB2YXIgdGV4dEluc3RhbmNlID0gY2FuSHlkcmF0ZVRleHRJbnN0YW5jZShuZXh0SW5zdGFuY2UsIHRleHQpO1xuXG4gICAgICAgIGlmICh0ZXh0SW5zdGFuY2UgIT09IG51bGwpIHtcbiAgICAgICAgICBmaWJlci5zdGF0ZU5vZGUgPSB0ZXh0SW5zdGFuY2U7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIpIHtcbiAgaWYgKCFpc0h5ZHJhdGluZykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXh0SW5zdGFuY2UgPSBuZXh0SHlkcmF0YWJsZUluc3RhbmNlO1xuXG4gIGlmICghbmV4dEluc3RhbmNlKSB7XG4gICAgLy8gTm90aGluZyB0byBoeWRyYXRlLiBNYWtlIGl0IGFuIGluc2VydGlvbi5cbiAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBmaXJzdEF0dGVtcHRlZEluc3RhbmNlID0gbmV4dEluc3RhbmNlO1xuXG4gIGlmICghdHJ5SHlkcmF0ZShmaWJlciwgbmV4dEluc3RhbmNlKSkge1xuICAgIC8vIElmIHdlIGNhbid0IGh5ZHJhdGUgdGhpcyBpbnN0YW5jZSBsZXQncyB0cnkgdGhlIG5leHQgb25lLlxuICAgIC8vIFdlIHVzZSB0aGlzIGFzIGEgaGV1cmlzdGljLiBJdCdzIGJhc2VkIG9uIGludHVpdGlvbiBhbmQgbm90IGRhdGEgc28gaXRcbiAgICAvLyBtaWdodCBiZSBmbGF3ZWQgb3IgdW5uZWNlc3NhcnkuXG4gICAgbmV4dEluc3RhbmNlID0gZ2V0TmV4dEh5ZHJhdGFibGVTaWJsaW5nKGZpcnN0QXR0ZW1wdGVkSW5zdGFuY2UpO1xuXG4gICAgaWYgKCFuZXh0SW5zdGFuY2UgfHwgIXRyeUh5ZHJhdGUoZmliZXIsIG5leHRJbnN0YW5jZSkpIHtcbiAgICAgIC8vIE5vdGhpbmcgdG8gaHlkcmF0ZS4gTWFrZSBpdCBhbiBpbnNlcnRpb24uXG4gICAgICBpbnNlcnROb25IeWRyYXRlZEluc3RhbmNlKGh5ZHJhdGlvblBhcmVudEZpYmVyLCBmaWJlcik7XG4gICAgICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xuICAgICAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBmaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIG1hdGNoZWQgdGhlIG5leHQgb25lLCB3ZSdsbCBub3cgYXNzdW1lIHRoYXQgdGhlIGZpcnN0IG9uZSB3YXNcbiAgICAvLyBzdXBlcmZsdW91cyBhbmQgd2UnbGwgZGVsZXRlIGl0LiBTaW5jZSB3ZSBjYW4ndCBlYWdlcmx5IGRlbGV0ZSBpdFxuICAgIC8vIHdlJ2xsIGhhdmUgdG8gc2NoZWR1bGUgYSBkZWxldGlvbi4gVG8gZG8gdGhhdCwgdGhpcyBub2RlIG5lZWRzIGEgZHVtbXlcbiAgICAvLyBmaWJlciBhc3NvY2lhdGVkIHdpdGggaXQuXG5cblxuICAgIGRlbGV0ZUh5ZHJhdGFibGVJbnN0YW5jZShoeWRyYXRpb25QYXJlbnRGaWJlciwgZmlyc3RBdHRlbXB0ZWRJbnN0YW5jZSk7XG4gIH1cblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IGZpYmVyO1xuICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gZ2V0Rmlyc3RIeWRyYXRhYmxlQ2hpbGQobmV4dEluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RJbnN0YW5jZShmaWJlciwgcm9vdENvbnRhaW5lckluc3RhbmNlLCBob3N0Q29udGV4dCkge1xuXG4gIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcbiAgdmFyIHVwZGF0ZVBheWxvYWQgPSBoeWRyYXRlSW5zdGFuY2UoaW5zdGFuY2UsIGZpYmVyLnR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgaG9zdENvbnRleHQsIGZpYmVyKTsgLy8gVE9ETzogVHlwZSB0aGlzIHNwZWNpZmljIHRvIHRoaXMgdHlwZSBvZiBjb21wb25lbnQuXG5cbiAgZmliZXIudXBkYXRlUXVldWUgPSB1cGRhdGVQYXlsb2FkOyAvLyBJZiB0aGUgdXBkYXRlIHBheWxvYWQgaW5kaWNhdGVzIHRoYXQgdGhlcmUgaXMgYSBjaGFuZ2Ugb3IgaWYgdGhlcmVcbiAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuXG5cbiAgaWYgKHVwZGF0ZVBheWxvYWQgIT09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gcHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgdGV4dEluc3RhbmNlID0gZmliZXIuc3RhdGVOb2RlO1xuICB2YXIgdGV4dENvbnRlbnQgPSBmaWJlci5tZW1vaXplZFByb3BzO1xuICB2YXIgc2hvdWxkVXBkYXRlID0gaHlkcmF0ZVRleHRJbnN0YW5jZSh0ZXh0SW5zdGFuY2UsIHRleHRDb250ZW50LCBmaWJlcik7XG5cbiAge1xuICAgIGlmIChzaG91bGRVcGRhdGUpIHtcbiAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHByZXBhcmVUb0h5ZHJhdGVIb3N0VGV4dEluc3RhbmNlIGlzIGNhbGxlZCBpbiBhIGNvbnRleHQgd2hlcmUgdGhlXG4gICAgICAvLyBoeWRyYXRpb24gcGFyZW50IGlzIHRoZSBwYXJlbnQgaG9zdCBjb21wb25lbnQgb2YgdGhpcyBob3N0IHRleHQuXG4gICAgICB2YXIgcmV0dXJuRmliZXIgPSBoeWRyYXRpb25QYXJlbnRGaWJlcjtcblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIHN3aXRjaCAocmV0dXJuRmliZXIudGFnKSB7XG4gICAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIHBhcmVudENvbnRhaW5lciA9IHJldHVybkZpYmVyLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgICBkaWROb3RNYXRjaEh5ZHJhdGVkQ29udGFpbmVyVGV4dEluc3RhbmNlKHBhcmVudENvbnRhaW5lciwgdGV4dEluc3RhbmNlLCB0ZXh0Q29udGVudCk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB2YXIgcGFyZW50VHlwZSA9IHJldHVybkZpYmVyLnR5cGU7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRQcm9wcyA9IHJldHVybkZpYmVyLm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICAgIHZhciBwYXJlbnRJbnN0YW5jZSA9IHJldHVybkZpYmVyLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgZGlkTm90TWF0Y2hIeWRyYXRlZFRleHRJbnN0YW5jZShwYXJlbnRUeXBlLCBwYXJlbnRQcm9wcywgcGFyZW50SW5zdGFuY2UsIHRleHRJbnN0YW5jZSwgdGV4dENvbnRlbnQpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzaG91bGRVcGRhdGU7XG59XG5cbmZ1bmN0aW9uIHNraXBQYXN0RGVoeWRyYXRlZFN1c3BlbnNlSW5zdGFuY2UoZmliZXIpIHtcblxuICB2YXIgc3VzcGVuc2VTdGF0ZSA9IGZpYmVyLm1lbW9pemVkU3RhdGU7XG4gIHZhciBzdXNwZW5zZUluc3RhbmNlID0gc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCA/IHN1c3BlbnNlU3RhdGUuZGVoeWRyYXRlZCA6IG51bGw7XG5cbiAgaWYgKCFzdXNwZW5zZUluc3RhbmNlKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRXhwZWN0ZWQgdG8gaGF2ZSBhIGh5ZHJhdGVkIHN1c3BlbnNlIGluc3RhbmNlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGdldE5leHRIeWRyYXRhYmxlSW5zdGFuY2VBZnRlclN1c3BlbnNlSW5zdGFuY2Uoc3VzcGVuc2VJbnN0YW5jZSk7XG59XG5cbmZ1bmN0aW9uIHBvcFRvTmV4dEhvc3RQYXJlbnQoZmliZXIpIHtcbiAgdmFyIHBhcmVudCA9IGZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsICYmIHBhcmVudC50YWcgIT09IEhvc3RDb21wb25lbnQgJiYgcGFyZW50LnRhZyAhPT0gSG9zdFJvb3QgJiYgcGFyZW50LnRhZyAhPT0gU3VzcGVuc2VDb21wb25lbnQpIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaHlkcmF0aW9uUGFyZW50RmliZXIgPSBwYXJlbnQ7XG59XG5cbmZ1bmN0aW9uIHBvcEh5ZHJhdGlvblN0YXRlKGZpYmVyKSB7XG5cbiAgaWYgKGZpYmVyICE9PSBoeWRyYXRpb25QYXJlbnRGaWJlcikge1xuICAgIC8vIFdlJ3JlIGRlZXBlciB0aGFuIHRoZSBjdXJyZW50IGh5ZHJhdGlvbiBjb250ZXh0LCBpbnNpZGUgYW4gaW5zZXJ0ZWRcbiAgICAvLyB0cmVlLlxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaXNIeWRyYXRpbmcpIHtcbiAgICAvLyBJZiB3ZSdyZSBub3QgY3VycmVudGx5IGh5ZHJhdGluZyBidXQgd2UncmUgaW4gYSBoeWRyYXRpb24gY29udGV4dCwgdGhlblxuICAgIC8vIHdlIHdlcmUgYW4gaW5zZXJ0aW9uIGFuZCBub3cgbmVlZCB0byBwb3AgdXAgcmVlbnRlciBoeWRyYXRpb24gb2Ygb3VyXG4gICAgLy8gc2libGluZ3MuXG4gICAgcG9wVG9OZXh0SG9zdFBhcmVudChmaWJlcik7XG4gICAgaXNIeWRyYXRpbmcgPSB0cnVlO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciB0eXBlID0gZmliZXIudHlwZTsgLy8gSWYgd2UgaGF2ZSBhbnkgcmVtYWluaW5nIGh5ZHJhdGFibGUgbm9kZXMsIHdlIG5lZWQgdG8gZGVsZXRlIHRoZW0gbm93LlxuICAvLyBXZSBvbmx5IGRvIHRoaXMgZGVlcGVyIHRoYW4gaGVhZCBhbmQgYm9keSBzaW5jZSB0aGV5IHRlbmQgdG8gaGF2ZSByYW5kb21cbiAgLy8gb3RoZXIgbm9kZXMgaW4gdGhlbS4gV2UgYWxzbyBpZ25vcmUgY29tcG9uZW50cyB3aXRoIHB1cmUgdGV4dCBjb250ZW50IGluXG4gIC8vIHNpZGUgb2YgdGhlbS5cbiAgLy8gVE9ETzogQmV0dGVyIGhldXJpc3RpYy5cblxuICBpZiAoZmliZXIudGFnICE9PSBIb3N0Q29tcG9uZW50IHx8IHR5cGUgIT09ICdoZWFkJyAmJiB0eXBlICE9PSAnYm9keScgJiYgIXNob3VsZFNldFRleHRDb250ZW50KHR5cGUsIGZpYmVyLm1lbW9pemVkUHJvcHMpKSB7XG4gICAgdmFyIG5leHRJbnN0YW5jZSA9IG5leHRIeWRyYXRhYmxlSW5zdGFuY2U7XG5cbiAgICB3aGlsZSAobmV4dEluc3RhbmNlKSB7XG4gICAgICBkZWxldGVIeWRyYXRhYmxlSW5zdGFuY2UoZmliZXIsIG5leHRJbnN0YW5jZSk7XG4gICAgICBuZXh0SW5zdGFuY2UgPSBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcobmV4dEluc3RhbmNlKTtcbiAgICB9XG4gIH1cblxuICBwb3BUb05leHRIb3N0UGFyZW50KGZpYmVyKTtcblxuICBpZiAoZmliZXIudGFnID09PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBza2lwUGFzdERlaHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKGZpYmVyKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0SHlkcmF0YWJsZUluc3RhbmNlID0gaHlkcmF0aW9uUGFyZW50RmliZXIgPyBnZXROZXh0SHlkcmF0YWJsZVNpYmxpbmcoZmliZXIuc3RhdGVOb2RlKSA6IG51bGw7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVzZXRIeWRyYXRpb25TdGF0ZSgpIHtcblxuICBoeWRyYXRpb25QYXJlbnRGaWJlciA9IG51bGw7XG4gIG5leHRIeWRyYXRhYmxlSW5zdGFuY2UgPSBudWxsO1xuICBpc0h5ZHJhdGluZyA9IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRJc0h5ZHJhdGluZygpIHtcbiAgcmV0dXJuIGlzSHlkcmF0aW5nO1xufVxuXG4vLyBhbmQgc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBzdGFydGluZyBhIG5ldyByZW5kZXIuXG4vLyBUaGlzIHRyYWNrcyB3aGljaCBtdXRhYmxlIHNvdXJjZXMgbmVlZCB0byBiZSByZXNldCBhZnRlciBhIHJlbmRlci5cblxudmFyIHdvcmtJblByb2dyZXNzU291cmNlcyA9IFtdO1xudmFyIHJlbmRlcmVyU2lnaWwkMTtcblxue1xuICAvLyBVc2VkIHRvIGRldGVjdCBtdWx0aXBsZSByZW5kZXJlcnMgdXNpbmcgdGhlIHNhbWUgbXV0YWJsZSBzb3VyY2UuXG4gIHJlbmRlcmVyU2lnaWwkMSA9IHt9O1xufVxuXG5mdW5jdGlvbiBtYXJrU291cmNlQXNEaXJ0eShtdXRhYmxlU291cmNlKSB7XG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHdvcmtJblByb2dyZXNzU291cmNlcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBtdXRhYmxlU291cmNlID0gd29ya0luUHJvZ3Jlc3NTb3VyY2VzW2ldO1xuXG4gICAge1xuICAgICAgbXV0YWJsZVNvdXJjZS5fd29ya0luUHJvZ3Jlc3NWZXJzaW9uUHJpbWFyeSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3NTb3VyY2VzLmxlbmd0aCA9IDA7XG59XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24obXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAgcmV0dXJuIG11dGFibGVTb3VyY2UuX3dvcmtJblByb2dyZXNzVmVyc2lvblByaW1hcnk7XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFdvcmtJblByb2dyZXNzVmVyc2lvbihtdXRhYmxlU291cmNlLCB2ZXJzaW9uKSB7XG4gIHtcbiAgICBtdXRhYmxlU291cmNlLl93b3JrSW5Qcm9ncmVzc1ZlcnNpb25QcmltYXJ5ID0gdmVyc2lvbjtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzU291cmNlcy5wdXNoKG11dGFibGVTb3VyY2UpO1xufVxuZnVuY3Rpb24gd2FybkFib3V0TXVsdGlwbGVSZW5kZXJlcnNERVYobXV0YWJsZVNvdXJjZSkge1xuICB7XG4gICAge1xuICAgICAgaWYgKG11dGFibGVTb3VyY2UuX2N1cnJlbnRQcmltYXJ5UmVuZGVyZXIgPT0gbnVsbCkge1xuICAgICAgICBtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyID0gcmVuZGVyZXJTaWdpbCQxO1xuICAgICAgfSBlbHNlIGlmIChtdXRhYmxlU291cmNlLl9jdXJyZW50UHJpbWFyeVJlbmRlcmVyICE9PSByZW5kZXJlclNpZ2lsJDEpIHtcbiAgICAgICAgZXJyb3IoJ0RldGVjdGVkIG11bHRpcGxlIHJlbmRlcmVycyBjb25jdXJyZW50bHkgcmVuZGVyaW5nIHRoZSAnICsgJ3NhbWUgbXV0YWJsZSBzb3VyY2UuIFRoaXMgaXMgY3VycmVudGx5IHVuc3VwcG9ydGVkLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBFYWdlciByZWFkcyB0aGUgdmVyc2lvbiBvZiBhIG11dGFibGUgc291cmNlIGFuZCBzdG9yZXMgaXQgb24gdGhlIHJvb3QuXG5cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFxuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEgPSBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZztcbnZhciBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQ7XG52YXIgZGlkV2FybkFib3V0VXNlT3BhcXVlSWRlbnRpZmllcjtcblxue1xuICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyID0ge307XG4gIGRpZFdhcm5BYm91dE1pc21hdGNoZWRIb29rc0ZvckNvbXBvbmVudCA9IG5ldyBTZXQoKTtcbn1cblxuLy8gVGhlc2UgYXJlIHNldCByaWdodCBiZWZvcmUgY2FsbGluZyB0aGUgY29tcG9uZW50LlxudmFyIHJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmstaW4tcHJvZ3Jlc3MgZmliZXIuIEkndmUgbmFtZWQgaXQgZGlmZmVyZW50bHkgdG8gZGlzdGluZ3Vpc2ggaXQgZnJvbVxuLy8gdGhlIHdvcmstaW4tcHJvZ3Jlc3MgaG9vay5cblxudmFyIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEgPSBudWxsOyAvLyBIb29rcyBhcmUgc3RvcmVkIGFzIGEgbGlua2VkIGxpc3Qgb24gdGhlIGZpYmVyJ3MgbWVtb2l6ZWRTdGF0ZSBmaWVsZC4gVGhlXG4vLyBjdXJyZW50IGhvb2sgbGlzdCBpcyB0aGUgbGlzdCB0aGF0IGJlbG9uZ3MgdG8gdGhlIGN1cnJlbnQgZmliZXIuIFRoZVxuLy8gd29yay1pbi1wcm9ncmVzcyBob29rIGxpc3QgaXMgYSBuZXcgbGlzdCB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlXG4vLyB3b3JrLWluLXByb2dyZXNzIGZpYmVyLlxuXG52YXIgY3VycmVudEhvb2sgPSBudWxsO1xudmFyIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7IC8vIFdoZXRoZXIgYW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgYXQgYW55IHBvaW50IGR1cmluZyB0aGUgcmVuZGVyIHBoYXNlLiBUaGlzXG4vLyBkb2VzIG5vdCBnZXQgcmVzZXQgaWYgd2UgZG8gYW5vdGhlciByZW5kZXIgcGFzczsgb25seSB3aGVuIHdlJ3JlIGNvbXBsZXRlbHlcbi8vIGZpbmlzaGVkIGV2YWx1YXRpbmcgdGhpcyBjb21wb25lbnQuIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHdlIGtub3dcbi8vIHdoZXRoZXIgd2UgbmVlZCB0byBjbGVhciByZW5kZXIgcGhhc2UgdXBkYXRlcyBhZnRlciBhIHRocm93LlxuXG52YXIgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlOyAvLyBXaGVyZSBhbiB1cGRhdGUgd2FzIHNjaGVkdWxlZCBvbmx5IGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIgcGFzcy4gVGhpc1xuLy8gZ2V0cyByZXNldCBhZnRlciBlYWNoIGF0dGVtcHQuXG4vLyBUT0RPOiBNYXliZSB0aGVyZSdzIHNvbWUgd2F5IHRvIGNvbnNvbGlkYXRlIHRoaXMgd2l0aFxuLy8gYGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVgLiBPciB3aXRoIGBudW1iZXJPZlJlUmVuZGVyc2AuXG5cbnZhciBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbnZhciBSRV9SRU5ERVJfTElNSVQgPSAyNTsgLy8gSW4gREVWLCB0aGlzIGlzIHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50bHkgZXhlY3V0aW5nIHByaW1pdGl2ZSBob29rXG5cbnZhciBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7IC8vIEluIERFViwgdGhpcyBsaXN0IGVuc3VyZXMgdGhhdCBob29rcyBhcmUgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyIGJldHdlZW4gcmVuZGVycy5cbi8vIFRoZSBsaXN0IHN0b3JlcyB0aGUgb3JkZXIgb2YgaG9va3MgdXNlZCBkdXJpbmcgdGhlIGluaXRpYWwgcmVuZGVyIChtb3VudCkuXG4vLyBTdWJzZXF1ZW50IHJlbmRlcnMgKHVwZGF0ZXMpIHJlZmVyZW5jZSB0aGlzIGxpc3QuXG5cbnZhciBob29rVHlwZXNEZXYgPSBudWxsO1xudmFyIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIEluIERFViwgdGhpcyB0cmFja3Mgd2hldGhlciBjdXJyZW50bHkgcmVuZGVyaW5nIGNvbXBvbmVudCBuZWVkcyB0byBpZ25vcmVcbi8vIHRoZSBkZXBlbmRlbmNpZXMgZm9yIEhvb2tzIHRoYXQgbmVlZCB0aGVtIChlLmcuIHVzZUVmZmVjdCBvciB1c2VNZW1vKS5cbi8vIFdoZW4gdHJ1ZSwgc3VjaCBIb29rcyB3aWxsIGFsd2F5cyBiZSBcInJlbW91bnRlZFwiLiBPbmx5IHVzZWQgZHVyaW5nIGhvdCByZWxvYWQuXG5cbnZhciBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGZhbHNlO1xuXG5mdW5jdGlvbiBtb3VudEhvb2tUeXBlc0RldigpIHtcbiAge1xuICAgIHZhciBob29rTmFtZSA9IGN1cnJlbnRIb29rTmFtZUluRGV2O1xuXG4gICAgaWYgKGhvb2tUeXBlc0RldiA9PT0gbnVsbCkge1xuICAgICAgaG9va1R5cGVzRGV2ID0gW2hvb2tOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaG9va1R5cGVzRGV2LnB1c2goaG9va05hbWUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1cGRhdGVIb29rVHlwZXNEZXYoKSB7XG4gIHtcbiAgICB2YXIgaG9va05hbWUgPSBjdXJyZW50SG9va05hbWVJbkRldjtcblxuICAgIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2Kys7XG5cbiAgICAgIGlmIChob29rVHlwZXNEZXZbaG9va1R5cGVzVXBkYXRlSW5kZXhEZXZdICE9PSBob29rTmFtZSkge1xuICAgICAgICB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihob29rTmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpIHtcbiAge1xuICAgIGlmIChkZXBzICE9PSB1bmRlZmluZWQgJiYgZGVwcyAhPT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheShkZXBzKSkge1xuICAgICAgLy8gVmVyaWZ5IGRlcHMsIGJ1dCBvbmx5IG9uIG1vdW50IHRvIGF2b2lkIGV4dHJhIGNoZWNrcy5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhlaXIgdHlwZSB3b3VsZCBjaGFuZ2UgYXMgdXN1YWxseSB5b3UgZGVmaW5lIHRoZW0gaW5saW5lLlxuICAgICAgZXJyb3IoJyVzIHJlY2VpdmVkIGEgZmluYWwgYXJndW1lbnQgdGhhdCBpcyBub3QgYW4gYXJyYXkgKGluc3RlYWQsIHJlY2VpdmVkIGAlc2ApLiBXaGVuICcgKyAnc3BlY2lmaWVkLCB0aGUgZmluYWwgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nLCBjdXJyZW50SG9va05hbWVJbkRldiwgdHlwZW9mIGRlcHMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25Ib29rTWlzbWF0Y2hJbkRldihjdXJyZW50SG9va05hbWUpIHtcbiAge1xuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnR5cGUpO1xuXG4gICAgaWYgKCFkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuaGFzKGNvbXBvbmVudE5hbWUpKSB7XG4gICAgICBkaWRXYXJuQWJvdXRNaXNtYXRjaGVkSG9va3NGb3JDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuXG4gICAgICBpZiAoaG9va1R5cGVzRGV2ICE9PSBudWxsKSB7XG4gICAgICAgIHZhciB0YWJsZSA9ICcnO1xuICAgICAgICB2YXIgc2Vjb25kQ29sdW1uU3RhcnQgPSAzMDtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBob29rVHlwZXNVcGRhdGVJbmRleERldjsgaSsrKSB7XG4gICAgICAgICAgdmFyIG9sZEhvb2tOYW1lID0gaG9va1R5cGVzRGV2W2ldO1xuICAgICAgICAgIHZhciBuZXdIb29rTmFtZSA9IGkgPT09IGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID8gY3VycmVudEhvb2tOYW1lIDogb2xkSG9va05hbWU7XG4gICAgICAgICAgdmFyIHJvdyA9IGkgKyAxICsgXCIuIFwiICsgb2xkSG9va05hbWU7IC8vIEV4dHJhIHNwYWNlIHNvIHNlY29uZCBjb2x1bW4gbGluZXMgdXBcbiAgICAgICAgICAvLyBsb2wgQCBJRSBub3Qgc3VwcG9ydGluZyBTdHJpbmcjcmVwZWF0XG5cbiAgICAgICAgICB3aGlsZSAocm93Lmxlbmd0aCA8IHNlY29uZENvbHVtblN0YXJ0KSB7XG4gICAgICAgICAgICByb3cgKz0gJyAnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJvdyArPSBuZXdIb29rTmFtZSArICdcXG4nO1xuICAgICAgICAgIHRhYmxlICs9IHJvdztcbiAgICAgICAgfVxuXG4gICAgICAgIGVycm9yKCdSZWFjdCBoYXMgZGV0ZWN0ZWQgYSBjaGFuZ2UgaW4gdGhlIG9yZGVyIG9mIEhvb2tzIGNhbGxlZCBieSAlcy4gJyArICdUaGlzIHdpbGwgbGVhZCB0byBidWdzIGFuZCBlcnJvcnMgaWYgbm90IGZpeGVkLiAnICsgJ0ZvciBtb3JlIGluZm9ybWF0aW9uLCByZWFkIHRoZSBSdWxlcyBvZiBIb29rczogaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzXFxuXFxuJyArICcgICBQcmV2aW91cyByZW5kZXIgICAgICAgICAgICBOZXh0IHJlbmRlclxcbicgKyAnICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuJyArICclcycgKyAnICAgXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXFxuJywgY29tcG9uZW50TmFtZSwgdGFibGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0ludmFsaWRIb29rRXJyb3IoKSB7XG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJJbnZhbGlkIGhvb2sgY2FsbC4gSG9va3MgY2FuIG9ubHkgYmUgY2FsbGVkIGluc2lkZSBvZiB0aGUgYm9keSBvZiBhIGZ1bmN0aW9uIGNvbXBvbmVudC4gVGhpcyBjb3VsZCBoYXBwZW4gZm9yIG9uZSBvZiB0aGUgZm9sbG93aW5nIHJlYXNvbnM6XFxuMS4gWW91IG1pZ2h0IGhhdmUgbWlzbWF0Y2hpbmcgdmVyc2lvbnMgb2YgUmVhY3QgYW5kIHRoZSByZW5kZXJlciAoc3VjaCBhcyBSZWFjdCBET00pXFxuMi4gWW91IG1pZ2h0IGJlIGJyZWFraW5nIHRoZSBSdWxlcyBvZiBIb29rc1xcbjMuIFlvdSBtaWdodCBoYXZlIG1vcmUgdGhhbiBvbmUgY29weSBvZiBSZWFjdCBpbiB0aGUgc2FtZSBhcHBcXG5TZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2ludmFsaWQtaG9vay1jYWxsIGZvciB0aXBzIGFib3V0IGhvdyB0byBkZWJ1ZyBhbmQgZml4IHRoaXMgcHJvYmxlbS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSB7XG4gIHtcbiAgICBpZiAoaWdub3JlUHJldmlvdXNEZXBlbmRlbmNpZXMpIHtcbiAgICAgIC8vIE9ubHkgdHJ1ZSB3aGVuIHRoaXMgY29tcG9uZW50IGlzIGJlaW5nIGhvdCByZWxvYWRlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldkRlcHMgPT09IG51bGwpIHtcbiAgICB7XG4gICAgICBlcnJvcignJXMgcmVjZWl2ZWQgYSBmaW5hbCBhcmd1bWVudCBkdXJpbmcgdGhpcyByZW5kZXIsIGJ1dCBub3QgZHVyaW5nICcgKyAndGhlIHByZXZpb3VzIHJlbmRlci4gRXZlbiB0aG91Z2ggdGhlIGZpbmFsIGFyZ3VtZW50IGlzIG9wdGlvbmFsLCAnICsgJ2l0cyB0eXBlIGNhbm5vdCBjaGFuZ2UgYmV0d2VlbiByZW5kZXJzLicsIGN1cnJlbnRIb29rTmFtZUluRGV2KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgYm90aGVyIGNvbXBhcmluZyBsZW5ndGhzIGluIHByb2QgYmVjYXVzZSB0aGVzZSBhcnJheXMgc2hvdWxkIGJlXG4gICAgLy8gcGFzc2VkIGlubGluZS5cbiAgICBpZiAobmV4dERlcHMubGVuZ3RoICE9PSBwcmV2RGVwcy5sZW5ndGgpIHtcbiAgICAgIGVycm9yKCdUaGUgZmluYWwgYXJndW1lbnQgcGFzc2VkIHRvICVzIGNoYW5nZWQgc2l6ZSBiZXR3ZWVuIHJlbmRlcnMuIFRoZSAnICsgJ29yZGVyIGFuZCBzaXplIG9mIHRoaXMgYXJyYXkgbXVzdCByZW1haW4gY29uc3RhbnQuXFxuXFxuJyArICdQcmV2aW91czogJXNcXG4nICsgJ0luY29taW5nOiAlcycsIGN1cnJlbnRIb29rTmFtZUluRGV2LCBcIltcIiArIHByZXZEZXBzLmpvaW4oJywgJykgKyBcIl1cIiwgXCJbXCIgKyBuZXh0RGVwcy5qb2luKCcsICcpICsgXCJdXCIpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJldkRlcHMubGVuZ3RoICYmIGkgPCBuZXh0RGVwcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChvYmplY3RJcyhuZXh0RGVwc1tpXSwgcHJldkRlcHNbaV0pKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBzZWNvbmRBcmcsIG5leHRSZW5kZXJMYW5lcykge1xuICByZW5kZXJMYW5lcyA9IG5leHRSZW5kZXJMYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IHdvcmtJblByb2dyZXNzO1xuXG4gIHtcbiAgICBob29rVHlwZXNEZXYgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5fZGVidWdIb29rVHlwZXMgOiBudWxsO1xuICAgIGhvb2tUeXBlc1VwZGF0ZUluZGV4RGV2ID0gLTE7IC8vIFVzZWQgZm9yIGhvdCByZWxvYWRpbmc6XG5cbiAgICBpZ25vcmVQcmV2aW91c0RlcGVuZGVuY2llcyA9IGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB9XG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzOyAvLyBUaGUgZm9sbG93aW5nIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZXNldFxuICAvLyBjdXJyZW50SG9vayA9IG51bGw7XG4gIC8vIHdvcmtJblByb2dyZXNzSG9vayA9IG51bGw7XG4gIC8vIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgLy8gVE9ETyBXYXJuIGlmIG5vIGhvb2tzIGFyZSB1c2VkIGF0IGFsbCBkdXJpbmcgbW91bnQsIHRoZW4gc29tZSBhcmUgdXNlZCBkdXJpbmcgdXBkYXRlLlxuICAvLyBDdXJyZW50bHkgd2Ugd2lsbCBpZGVudGlmeSB0aGUgdXBkYXRlIHJlbmRlciBhcyBhIG1vdW50IGJlY2F1c2UgbWVtb2l6ZWRTdGF0ZSA9PT0gbnVsbC5cbiAgLy8gVGhpcyBpcyB0cmlja3kgYmVjYXVzZSBpdCdzIHZhbGlkIGZvciBjZXJ0YWluIHR5cGVzIG9mIGNvbXBvbmVudHMgKGUuZy4gUmVhY3QubGF6eSlcbiAgLy8gVXNpbmcgbWVtb2l6ZWRTdGF0ZSB0byBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbW91bnQvdXBkYXRlIG9ubHkgd29ya3MgaWYgYXQgbGVhc3Qgb25lIHN0YXRlZnVsIGhvb2sgaXMgdXNlZC5cbiAgLy8gTm9uLXN0YXRlZnVsIGhvb2tzIChlLmcuIGNvbnRleHQpIGRvbid0IGdldCBhZGRlZCB0byBtZW1vaXplZFN0YXRlLFxuICAvLyBzbyBtZW1vaXplZFN0YXRlIHdvdWxkIGJlIG51bGwgZHVyaW5nIHVwZGF0ZXMgYW5kIG1vdW50cy5cblxuICB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwgJiYgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgfSBlbHNlIGlmIChob29rVHlwZXNEZXYgIT09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgZGlzcGF0Y2hlciBoYW5kbGVzIGFuIGVkZ2UgY2FzZSB3aGVyZSBhIGNvbXBvbmVudCBpcyB1cGRhdGluZyxcbiAgICAgIC8vIGJ1dCBubyBzdGF0ZWZ1bCBob29rcyBoYXZlIGJlZW4gdXNlZC5cbiAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIHByb2R1Y3Rpb24gY29kZSBiZWhhdmlvciAod2hpY2ggd2lsbCB1c2UgSG9va3NEaXNwYXRjaGVyT25Nb3VudCksXG4gICAgICAvLyBidXQgd2l0aCB0aGUgZXh0cmEgREVWIHZhbGlkYXRpb24gdG8gZW5zdXJlIGhvb2tzIG9yZGVyaW5nIGhhc24ndCBjaGFuZ2VkLlxuICAgICAgLy8gVGhpcyBkaXNwYXRjaGVyIGRvZXMgdGhhdC5cbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSG9va3NEaXNwYXRjaGVyT25Nb3VudFdpdGhIb29rVHlwZXNJbkRFVjtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkcmVuID0gQ29tcG9uZW50KHByb3BzLCBzZWNvbmRBcmcpOyAvLyBDaGVjayBpZiB0aGVyZSB3YXMgYSByZW5kZXIgcGhhc2UgdXBkYXRlXG5cbiAgaWYgKGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGVEdXJpbmdUaGlzUGFzcykge1xuICAgIC8vIEtlZXAgcmVuZGVyaW5nIGluIGEgbG9vcCBmb3IgYXMgbG9uZyBhcyByZW5kZXIgcGhhc2UgdXBkYXRlcyBjb250aW51ZSB0b1xuICAgIC8vIGJlIHNjaGVkdWxlZC4gVXNlIGEgY291bnRlciB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzLlxuICAgIHZhciBudW1iZXJPZlJlUmVuZGVycyA9IDA7XG5cbiAgICBkbyB7XG4gICAgICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcblxuICAgICAgaWYgKCEobnVtYmVyT2ZSZVJlbmRlcnMgPCBSRV9SRU5ERVJfTElNSVQpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB0aHJvdyBFcnJvciggXCJUb28gbWFueSByZS1yZW5kZXJzLiBSZWFjdCBsaW1pdHMgdGhlIG51bWJlciBvZiByZW5kZXJzIHRvIHByZXZlbnQgYW4gaW5maW5pdGUgbG9vcC5cIiApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG51bWJlck9mUmVSZW5kZXJzICs9IDE7XG5cbiAgICAgIHtcbiAgICAgICAgLy8gRXZlbiB3aGVuIGhvdCByZWxvYWRpbmcsIGFsbG93IGRlcGVuZGVuY2llcyB0byBzdGFiaWxpemVcbiAgICAgICAgLy8gYWZ0ZXIgZmlyc3QgcmVuZGVyIHRvIHByZXZlbnQgaW5maW5pdGUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuXG4gICAgICAgIGlnbm9yZVByZXZpb3VzRGVwZW5kZW5jaWVzID0gZmFsc2U7XG4gICAgICB9IC8vIFN0YXJ0IG92ZXIgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaXN0XG5cblxuICAgICAgY3VycmVudEhvb2sgPSBudWxsO1xuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAge1xuICAgICAgICAvLyBBbHNvIHZhbGlkYXRlIGhvb2sgb3JkZXIgZm9yIGNhc2NhZGluZyB1cGRhdGVzLlxuICAgICAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgICAgfVxuXG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9ICBIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgO1xuICAgICAgY2hpbGRyZW4gPSBDb21wb25lbnQocHJvcHMsIHNlY29uZEFyZyk7XG4gICAgfSB3aGlsZSAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzKTtcbiAgfSAvLyBXZSBjYW4gYXNzdW1lIHRoZSBwcmV2aW91cyBkaXNwYXRjaGVyIGlzIGFsd2F5cyB0aGlzIG9uZSwgc2luY2Ugd2Ugc2V0IGl0XG4gIC8vIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJlbmRlciBwaGFzZSBhbmQgdGhlcmUncyBubyByZS1lbnRyYW5jeS5cblxuXG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gQ29udGV4dE9ubHlEaXNwYXRjaGVyO1xuXG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5fZGVidWdIb29rVHlwZXMgPSBob29rVHlwZXNEZXY7XG4gIH0gLy8gVGhpcyBjaGVjayB1c2VzIGN1cnJlbnRIb29rIHNvIHRoYXQgaXQgd29ya3MgdGhlIHNhbWUgaW4gREVWIGFuZCBwcm9kIGJ1bmRsZXMuXG4gIC8vIGhvb2tUeXBlc0RldiBjb3VsZCBjYXRjaCBtb3JlIGNhc2VzIChlLmcuIGNvbnRleHQpIGJ1dCBvbmx5IGluIERFViBidW5kbGVzLlxuXG5cbiAgdmFyIGRpZFJlbmRlclRvb0Zld0hvb2tzID0gY3VycmVudEhvb2sgIT09IG51bGwgJiYgY3VycmVudEhvb2submV4dCAhPT0gbnVsbDtcbiAgcmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxID0gbnVsbDtcbiAgY3VycmVudEhvb2sgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBudWxsO1xuXG4gIHtcbiAgICBjdXJyZW50SG9va05hbWVJbkRldiA9IG51bGw7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICB9XG5cbiAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IGZhbHNlO1xuXG4gIGlmICghIWRpZFJlbmRlclRvb0Zld0hvb2tzKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgZmV3ZXIgaG9va3MgdGhhbiBleHBlY3RlZC4gVGhpcyBtYXkgYmUgY2F1c2VkIGJ5IGFuIGFjY2lkZW50YWwgZWFybHkgcmV0dXJuIHN0YXRlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cbmZ1bmN0aW9uIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbGFuZXMpIHtcbiAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlO1xuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyAmPSB+KFBhc3NpdmUgfCBVcGRhdGUpO1xuICBjdXJyZW50LmxhbmVzID0gcmVtb3ZlTGFuZXMoY3VycmVudC5sYW5lcywgbGFuZXMpO1xufVxuZnVuY3Rpb24gcmVzZXRIb29rc0FmdGVyVGhyb3coKSB7XG4gIC8vIFdlIGNhbiBhc3N1bWUgdGhlIHByZXZpb3VzIGRpc3BhdGNoZXIgaXMgYWx3YXlzIHRoaXMgb25lLCBzaW5jZSB3ZSBzZXQgaXRcbiAgLy8gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVuZGVyIHBoYXNlIGFuZCB0aGVyZSdzIG5vIHJlLWVudHJhbmN5LlxuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAoZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSkge1xuICAgIC8vIFRoZXJlIHdlcmUgcmVuZGVyIHBoYXNlIHVwZGF0ZXMuIFRoZXNlIGFyZSBvbmx5IHZhbGlkIGZvciB0aGlzIHJlbmRlclxuICAgIC8vIHBoYXNlLCB3aGljaCB3ZSBhcmUgbm93IGFib3J0aW5nLiBSZW1vdmUgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWVzIHNvXG4gICAgLy8gdGhleSBkbyBub3QgcGVyc2lzdCB0byB0aGUgbmV4dCByZW5kZXIuIERvIG5vdCByZW1vdmUgdXBkYXRlcyBmcm9tIGhvb2tzXG4gICAgLy8gdGhhdCB3ZXJlbid0IHByb2Nlc3NlZC5cbiAgICAvL1xuICAgIC8vIE9ubHkgcmVzZXQgdGhlIHVwZGF0ZXMgZnJvbSB0aGUgcXVldWUgaWYgaXQgaGFzIGEgY2xvbmUuIElmIGl0IGRvZXNcbiAgICAvLyBub3QgaGF2ZSBhIGNsb25lLCB0aGF0IG1lYW5zIGl0IHdhc24ndCBwcm9jZXNzZWQsIGFuZCB0aGUgdXBkYXRlcyB3ZXJlXG4gICAgLy8gc2NoZWR1bGVkIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgdmFyIGhvb2sgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGU7XG5cbiAgICB3aGlsZSAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICAgICAgaWYgKHF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBob29rID0gaG9vay5uZXh0O1xuICAgIH1cblxuICAgIGRpZFNjaGVkdWxlUmVuZGVyUGhhc2VVcGRhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIHJlbmRlckxhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSA9IG51bGw7XG4gIGN1cnJlbnRIb29rID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NIb29rID0gbnVsbDtcblxuICB7XG4gICAgaG9va1R5cGVzRGV2ID0gbnVsbDtcbiAgICBob29rVHlwZXNVcGRhdGVJbmRleERldiA9IC0xO1xuICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gbnVsbDtcbiAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG4gIH1cblxuICBkaWRTY2hlZHVsZVJlbmRlclBoYXNlVXBkYXRlRHVyaW5nVGhpc1Bhc3MgPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKSB7XG4gIHZhciBob29rID0ge1xuICAgIG1lbW9pemVkU3RhdGU6IG51bGwsXG4gICAgYmFzZVN0YXRlOiBudWxsLFxuICAgIGJhc2VRdWV1ZTogbnVsbCxcbiAgICBxdWV1ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgdGhlIGZpcnN0IGhvb2sgaW4gdGhlIGxpc3RcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLm1lbW9pemVkU3RhdGUgPSB3b3JrSW5Qcm9ncmVzc0hvb2sgPSBob29rO1xuICB9IGVsc2Uge1xuICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBob29rO1xuICB9XG5cbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzSG9vaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlV29ya0luUHJvZ3Jlc3NIb29rKCkge1xuICAvLyBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYm90aCBmb3IgdXBkYXRlcyBhbmQgZm9yIHJlLXJlbmRlcnMgdHJpZ2dlcmVkIGJ5IGFcbiAgLy8gcmVuZGVyIHBoYXNlIHVwZGF0ZS4gSXQgYXNzdW1lcyB0aGVyZSBpcyBlaXRoZXIgYSBjdXJyZW50IGhvb2sgd2UgY2FuXG4gIC8vIGNsb25lLCBvciBhIHdvcmstaW4tcHJvZ3Jlc3MgaG9vayBmcm9tIGEgcHJldmlvdXMgcmVuZGVyIHBhc3MgdGhhdCB3ZSBjYW5cbiAgLy8gdXNlIGFzIGEgYmFzZS4gV2hlbiB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBiYXNlIGxpc3QsIHdlIG11c3Qgc3dpdGNoIHRvXG4gIC8vIHRoZSBkaXNwYXRjaGVyIHVzZWQgZm9yIG1vdW50cy5cbiAgdmFyIG5leHRDdXJyZW50SG9vaztcblxuICBpZiAoY3VycmVudEhvb2sgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIG5leHRDdXJyZW50SG9vayA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEN1cnJlbnRIb29rID0gbnVsbDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbmV4dEN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgfVxuXG4gIHZhciBuZXh0V29ya0luUHJvZ3Jlc3NIb29rO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc0hvb2sgPT09IG51bGwpIHtcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5tZW1vaXplZFN0YXRlO1xuICB9IGVsc2Uge1xuICAgIG5leHRXb3JrSW5Qcm9ncmVzc0hvb2sgPSB3b3JrSW5Qcm9ncmVzc0hvb2submV4dDtcbiAgfVxuXG4gIGlmIChuZXh0V29ya0luUHJvZ3Jlc3NIb29rICE9PSBudWxsKSB7XG4gICAgLy8gVGhlcmUncyBhbHJlYWR5IGEgd29yay1pbi1wcm9ncmVzcy4gUmV1c2UgaXQuXG4gICAgd29ya0luUHJvZ3Jlc3NIb29rID0gbmV4dFdvcmtJblByb2dyZXNzSG9vaztcbiAgICBuZXh0V29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQ7XG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gIH0gZWxzZSB7XG4gICAgLy8gQ2xvbmUgZnJvbSB0aGUgY3VycmVudCBob29rLlxuICAgIGlmICghKG5leHRDdXJyZW50SG9vayAhPT0gbnVsbCkpIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiUmVuZGVyZWQgbW9yZSBob29rcyB0aGFuIGR1cmluZyB0aGUgcHJldmlvdXMgcmVuZGVyLlwiICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY3VycmVudEhvb2sgPSBuZXh0Q3VycmVudEhvb2s7XG4gICAgdmFyIG5ld0hvb2sgPSB7XG4gICAgICBtZW1vaXplZFN0YXRlOiBjdXJyZW50SG9vay5tZW1vaXplZFN0YXRlLFxuICAgICAgYmFzZVN0YXRlOiBjdXJyZW50SG9vay5iYXNlU3RhdGUsXG4gICAgICBiYXNlUXVldWU6IGN1cnJlbnRIb29rLmJhc2VRdWV1ZSxcbiAgICAgIHF1ZXVlOiBjdXJyZW50SG9vay5xdWV1ZSxcbiAgICAgIG5leHQ6IG51bGxcbiAgICB9O1xuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzSG9vayA9PT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgaG9vayBpbiB0aGUgbGlzdC5cbiAgICAgIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubWVtb2l6ZWRTdGF0ZSA9IHdvcmtJblByb2dyZXNzSG9vayA9IG5ld0hvb2s7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0LlxuICAgICAgd29ya0luUHJvZ3Jlc3NIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rLm5leHQgPSBuZXdIb29rO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc0hvb2s7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKSB7XG4gIHJldHVybiB7XG4gICAgbGFzdEVmZmVjdDogbnVsbFxuICB9O1xufVxuXG5mdW5jdGlvbiBiYXNpY1N0YXRlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB7XG4gIC8vICRGbG93Rml4TWU6IEZsb3cgZG9lc24ndCBsaWtlIG1peGVkIHR5cGVzXG4gIHJldHVybiB0eXBlb2YgYWN0aW9uID09PSAnZnVuY3Rpb24nID8gYWN0aW9uKHN0YXRlKSA6IGFjdGlvbjtcbn1cblxuZnVuY3Rpb24gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgaW5pdGlhbFN0YXRlO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0KGluaXRpYWxBcmcpO1xuICB9IGVsc2Uge1xuICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxBcmc7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBob29rLmJhc2VTdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZSA9IHtcbiAgICBwZW5kaW5nOiBudWxsLFxuICAgIGRpc3BhdGNoOiBudWxsLFxuICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IHJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjtcbiAgdmFyIGN1cnJlbnQgPSBjdXJyZW50SG9vazsgLy8gVGhlIGxhc3QgcmViYXNlIHVwZGF0ZSB0aGF0IGlzIE5PVCBwYXJ0IG9mIHRoZSBiYXNlIHN0YXRlLlxuXG4gIHZhciBiYXNlUXVldWUgPSBjdXJyZW50LmJhc2VRdWV1ZTsgLy8gVGhlIGxhc3QgcGVuZGluZyB1cGRhdGUgdGhhdCBoYXNuJ3QgYmVlbiBwcm9jZXNzZWQgeWV0LlxuXG4gIHZhciBwZW5kaW5nUXVldWUgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nUXVldWUgIT09IG51bGwpIHtcbiAgICAvLyBXZSBoYXZlIG5ldyB1cGRhdGVzIHRoYXQgaGF2ZW4ndCBiZWVuIHByb2Nlc3NlZCB5ZXQuXG4gICAgLy8gV2UnbGwgYWRkIHRoZW0gdG8gdGhlIGJhc2UgcXVldWUuXG4gICAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgICAgLy8gTWVyZ2UgdGhlIHBlbmRpbmcgcXVldWUgYW5kIHRoZSBiYXNlIHF1ZXVlLlxuICAgICAgdmFyIGJhc2VGaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgICAgdmFyIHBlbmRpbmdGaXJzdCA9IHBlbmRpbmdRdWV1ZS5uZXh0O1xuICAgICAgYmFzZVF1ZXVlLm5leHQgPSBwZW5kaW5nRmlyc3Q7XG4gICAgICBwZW5kaW5nUXVldWUubmV4dCA9IGJhc2VGaXJzdDtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoY3VycmVudC5iYXNlUXVldWUgIT09IGJhc2VRdWV1ZSkge1xuICAgICAgICAvLyBJbnRlcm5hbCBpbnZhcmlhbnQgdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLCBidXQgZmVhc2libHkgY291bGQgaW5cbiAgICAgICAgLy8gdGhlIGZ1dHVyZSBpZiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcsIG9yIHNvbWUgZm9ybSBvZiB0aGF0LlxuICAgICAgICBlcnJvcignSW50ZXJuYWwgZXJyb3I6IEV4cGVjdGVkIHdvcmstaW4tcHJvZ3Jlc3MgcXVldWUgdG8gYmUgYSBjbG9uZS4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGN1cnJlbnQuYmFzZVF1ZXVlID0gYmFzZVF1ZXVlID0gcGVuZGluZ1F1ZXVlO1xuICAgIHF1ZXVlLnBlbmRpbmcgPSBudWxsO1xuICB9XG5cbiAgaWYgKGJhc2VRdWV1ZSAhPT0gbnVsbCkge1xuICAgIC8vIFdlIGhhdmUgYSBxdWV1ZSB0byBwcm9jZXNzLlxuICAgIHZhciBmaXJzdCA9IGJhc2VRdWV1ZS5uZXh0O1xuICAgIHZhciBuZXdTdGF0ZSA9IGN1cnJlbnQuYmFzZVN0YXRlO1xuICAgIHZhciBuZXdCYXNlU3RhdGUgPSBudWxsO1xuICAgIHZhciBuZXdCYXNlUXVldWVGaXJzdCA9IG51bGw7XG4gICAgdmFyIG5ld0Jhc2VRdWV1ZUxhc3QgPSBudWxsO1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciB1cGRhdGVMYW5lID0gdXBkYXRlLmxhbmU7XG5cbiAgICAgIGlmICghaXNTdWJzZXRPZkxhbmVzKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lKSkge1xuICAgICAgICAvLyBQcmlvcml0eSBpcyBpbnN1ZmZpY2llbnQuIFNraXAgdGhpcyB1cGRhdGUuIElmIHRoaXMgaXMgdGhlIGZpcnN0XG4gICAgICAgIC8vIHNraXBwZWQgdXBkYXRlLCB0aGUgcHJldmlvdXMgdXBkYXRlL3N0YXRlIGlzIHRoZSBuZXcgYmFzZVxuICAgICAgICAvLyB1cGRhdGUvc3RhdGUuXG4gICAgICAgIHZhciBjbG9uZSA9IHtcbiAgICAgICAgICBsYW5lOiB1cGRhdGVMYW5lLFxuICAgICAgICAgIGFjdGlvbjogdXBkYXRlLmFjdGlvbixcbiAgICAgICAgICBlYWdlclJlZHVjZXI6IHVwZGF0ZS5lYWdlclJlZHVjZXIsXG4gICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgbmV4dDogbnVsbFxuICAgICAgICB9O1xuXG4gICAgICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlRmlyc3QgPSBuZXdCYXNlUXVldWVMYXN0ID0gY2xvbmU7XG4gICAgICAgICAgbmV3QmFzZVN0YXRlID0gbmV3U3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QmFzZVF1ZXVlTGFzdCA9IG5ld0Jhc2VRdWV1ZUxhc3QubmV4dCA9IGNsb25lO1xuICAgICAgICB9IC8vIFVwZGF0ZSB0aGUgcmVtYWluaW5nIHByaW9yaXR5IGluIHRoZSBxdWV1ZS5cbiAgICAgICAgLy8gVE9ETzogRG9uJ3QgbmVlZCB0byBhY2N1bXVsYXRlIHRoaXMuIEluc3RlYWQsIHdlIGNhbiByZW1vdmVcbiAgICAgICAgLy8gcmVuZGVyTGFuZXMgZnJvbSB0aGUgb3JpZ2luYWwgbGFuZXMuXG5cblxuICAgICAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzID0gbWVyZ2VMYW5lcyhjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmxhbmVzLCB1cGRhdGVMYW5lKTtcbiAgICAgICAgbWFya1NraXBwZWRVcGRhdGVMYW5lcyh1cGRhdGVMYW5lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoaXMgdXBkYXRlIGRvZXMgaGF2ZSBzdWZmaWNpZW50IHByaW9yaXR5LlxuICAgICAgICBpZiAobmV3QmFzZVF1ZXVlTGFzdCAhPT0gbnVsbCkge1xuICAgICAgICAgIHZhciBfY2xvbmUgPSB7XG4gICAgICAgICAgICAvLyBUaGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXR0ZWQgc28gd2UgbmV2ZXIgd2FudCB1bmNvbW1pdFxuICAgICAgICAgICAgLy8gaXQuIFVzaW5nIE5vTGFuZSB3b3JrcyBiZWNhdXNlIDAgaXMgYSBzdWJzZXQgb2YgYWxsIGJpdG1hc2tzLCBzb1xuICAgICAgICAgICAgLy8gdGhpcyB3aWxsIG5ldmVyIGJlIHNraXBwZWQgYnkgdGhlIGNoZWNrIGFib3ZlLlxuICAgICAgICAgICAgbGFuZTogTm9MYW5lLFxuICAgICAgICAgICAgYWN0aW9uOiB1cGRhdGUuYWN0aW9uLFxuICAgICAgICAgICAgZWFnZXJSZWR1Y2VyOiB1cGRhdGUuZWFnZXJSZWR1Y2VyLFxuICAgICAgICAgICAgZWFnZXJTdGF0ZTogdXBkYXRlLmVhZ2VyU3RhdGUsXG4gICAgICAgICAgICBuZXh0OiBudWxsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBuZXdCYXNlUXVldWVMYXN0ID0gbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gX2Nsb25lO1xuICAgICAgICB9IC8vIFByb2Nlc3MgdGhpcyB1cGRhdGUuXG5cblxuICAgICAgICBpZiAodXBkYXRlLmVhZ2VyUmVkdWNlciA9PT0gcmVkdWNlcikge1xuICAgICAgICAgIC8vIElmIHRoaXMgdXBkYXRlIHdhcyBwcm9jZXNzZWQgZWFnZXJseSwgYW5kIGl0cyByZWR1Y2VyIG1hdGNoZXMgdGhlXG4gICAgICAgICAgLy8gY3VycmVudCByZWR1Y2VyLCB3ZSBjYW4gdXNlIHRoZSBlYWdlcmx5IGNvbXB1dGVkIHN0YXRlLlxuICAgICAgICAgIG5ld1N0YXRlID0gdXBkYXRlLmVhZ2VyU3RhdGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFjdGlvbiA9IHVwZGF0ZS5hY3Rpb247XG4gICAgICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHVwZGF0ZSA9IHVwZGF0ZS5uZXh0O1xuICAgIH0gd2hpbGUgKHVwZGF0ZSAhPT0gbnVsbCAmJiB1cGRhdGUgIT09IGZpcnN0KTtcblxuICAgIGlmIChuZXdCYXNlUXVldWVMYXN0ID09PSBudWxsKSB7XG4gICAgICBuZXdCYXNlU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3QmFzZVF1ZXVlTGFzdC5uZXh0ID0gbmV3QmFzZVF1ZXVlRmlyc3Q7XG4gICAgfSAvLyBNYXJrIHRoYXQgdGhlIGZpYmVyIHBlcmZvcm1lZCB3b3JrLCBidXQgb25seSBpZiB0aGUgbmV3IHN0YXRlIGlzXG4gICAgLy8gZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgc3RhdGUuXG5cblxuICAgIGlmICghb2JqZWN0SXMobmV3U3RhdGUsIGhvb2subWVtb2l6ZWRTdGF0ZSkpIHtcbiAgICAgIG1hcmtXb3JrSW5Qcm9ncmVzc1JlY2VpdmVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgaG9vay5iYXNlU3RhdGUgPSBuZXdCYXNlU3RhdGU7XG4gICAgaG9vay5iYXNlUXVldWUgPSBuZXdCYXNlUXVldWVMYXN0O1xuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaDtcbiAgcmV0dXJuIFtob29rLm1lbW9pemVkU3RhdGUsIGRpc3BhdGNoXTtcbn1cblxuZnVuY3Rpb24gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIHF1ZXVlID0gaG9vay5xdWV1ZTtcblxuICBpZiAoIShxdWV1ZSAhPT0gbnVsbCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJTaG91bGQgaGF2ZSBhIHF1ZXVlLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cblxuICBxdWV1ZS5sYXN0UmVuZGVyZWRSZWR1Y2VyID0gcmVkdWNlcjsgLy8gVGhpcyBpcyBhIHJlLXJlbmRlci4gQXBwbHkgdGhlIG5ldyByZW5kZXIgcGhhc2UgdXBkYXRlcyB0byB0aGUgcHJldmlvdXNcbiAgLy8gd29yay1pbi1wcm9ncmVzcyBob29rLlxuXG4gIHZhciBkaXNwYXRjaCA9IHF1ZXVlLmRpc3BhdGNoO1xuICB2YXIgbGFzdFJlbmRlclBoYXNlVXBkYXRlID0gcXVldWUucGVuZGluZztcbiAgdmFyIG5ld1N0YXRlID0gaG9vay5tZW1vaXplZFN0YXRlO1xuXG4gIGlmIChsYXN0UmVuZGVyUGhhc2VVcGRhdGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgcXVldWUgZG9lc24ndCBwZXJzaXN0IHBhc3QgdGhpcyByZW5kZXIgcGFzcy5cbiAgICBxdWV1ZS5wZW5kaW5nID0gbnVsbDtcbiAgICB2YXIgZmlyc3RSZW5kZXJQaGFzZVVwZGF0ZSA9IGxhc3RSZW5kZXJQaGFzZVVwZGF0ZS5uZXh0O1xuICAgIHZhciB1cGRhdGUgPSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlO1xuXG4gICAgZG8ge1xuICAgICAgLy8gUHJvY2VzcyB0aGlzIHJlbmRlciBwaGFzZSB1cGRhdGUuIFdlIGRvbid0IGhhdmUgdG8gY2hlY2sgdGhlXG4gICAgICAvLyBwcmlvcml0eSBiZWNhdXNlIGl0IHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50XG4gICAgICAvLyByZW5kZXIncy5cbiAgICAgIHZhciBhY3Rpb24gPSB1cGRhdGUuYWN0aW9uO1xuICAgICAgbmV3U3RhdGUgPSByZWR1Y2VyKG5ld1N0YXRlLCBhY3Rpb24pO1xuICAgICAgdXBkYXRlID0gdXBkYXRlLm5leHQ7XG4gICAgfSB3aGlsZSAodXBkYXRlICE9PSBmaXJzdFJlbmRlclBoYXNlVXBkYXRlKTsgLy8gTWFyayB0aGF0IHRoZSBmaWJlciBwZXJmb3JtZWQgd29yaywgYnV0IG9ubHkgaWYgdGhlIG5ldyBzdGF0ZSBpc1xuICAgIC8vIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IHN0YXRlLlxuXG5cbiAgICBpZiAoIW9iamVjdElzKG5ld1N0YXRlLCBob29rLm1lbW9pemVkU3RhdGUpKSB7XG4gICAgICBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpO1xuICAgIH1cblxuICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlOyAvLyBEb24ndCBwZXJzaXN0IHRoZSBzdGF0ZSBhY2N1bXVsYXRlZCBmcm9tIHRoZSByZW5kZXIgcGhhc2UgdXBkYXRlcyB0b1xuICAgIC8vIHRoZSBiYXNlIHN0YXRlIHVubGVzcyB0aGUgcXVldWUgaXMgZW1wdHkuXG4gICAgLy8gVE9ETzogTm90IHN1cmUgaWYgdGhpcyBpcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MsIGJ1dCBpdCdzIHdoYXQgd2VcbiAgICAvLyBkbyBmb3IgZ0RTRlAuIEkgY2FuJ3QgcmVtZW1iZXIgd2h5LlxuXG4gICAgaWYgKGhvb2suYmFzZVF1ZXVlID09PSBudWxsKSB7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlO1xuICAgIH1cblxuICAgIHF1ZXVlLmxhc3RSZW5kZXJlZFN0YXRlID0gbmV3U3RhdGU7XG4gIH1cblxuICByZXR1cm4gW25ld1N0YXRlLCBkaXNwYXRjaF07XG59XG5cbmZ1bmN0aW9uIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpIHtcbiAge1xuICAgIHdhcm5BYm91dE11bHRpcGxlUmVuZGVyZXJzREVWKHNvdXJjZSk7XG4gIH1cblxuICB2YXIgZ2V0VmVyc2lvbiA9IHNvdXJjZS5fZ2V0VmVyc2lvbjtcbiAgdmFyIHZlcnNpb24gPSBnZXRWZXJzaW9uKHNvdXJjZS5fc291cmNlKTsgLy8gSXMgaXQgc2FmZSBmb3IgdGhpcyBjb21wb25lbnQgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXI/XG5cbiAgdmFyIGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UgPSBmYWxzZTsgLy8gQ2hlY2sgdGhlIHZlcnNpb24gZmlyc3QuXG4gIC8vIElmIHRoaXMgcmVuZGVyIGhhcyBhbHJlYWR5IGJlZW4gc3RhcnRlZCB3aXRoIGEgc3BlY2lmaWMgdmVyc2lvbixcbiAgLy8gd2UgY2FuIHVzZSBpdCBhbG9uZSB0byBkZXRlcm1pbmUgaWYgd2UgY2FuIHNhZmVseSByZWFkIGZyb20gdGhlIHNvdXJjZS5cblxuICB2YXIgY3VycmVudFJlbmRlclZlcnNpb24gPSBnZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb24oc291cmNlKTtcblxuICBpZiAoY3VycmVudFJlbmRlclZlcnNpb24gIT09IG51bGwpIHtcbiAgICAvLyBJdCdzIHNhZmUgdG8gcmVhZCBpZiB0aGUgc3RvcmUgaGFzbid0IGJlZW4gbXV0YXRlZCBzaW5jZSB0aGUgbGFzdCB0aW1lXG4gICAgLy8gd2UgcmVhZCBzb21ldGhpbmcuXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGN1cnJlbnRSZW5kZXJWZXJzaW9uID09PSB2ZXJzaW9uO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHRoZXJlJ3Mgbm8gdmVyc2lvbiwgdGhlbiB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHdlJ3ZlIHJlYWQgZnJvbSB0aGVcbiAgICAvLyBzb3VyY2UgZHVyaW5nIHRoZSBjdXJyZW50IHJlbmRlciBwYXNzLCBzbyB3ZSBuZWVkIHRvIGRvIGEgYml0IG1vcmUgd29yay5cbiAgICAvLyBXaGF0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlzIGlmIHRoZXJlIGFyZSBhbnkgaG9va3MgdGhhdCBhbHJlYWR5XG4gICAgLy8gc3Vic2NyaWJlZCB0byB0aGUgc291cmNlLCBhbmQgaWYgc28sIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwZW5kaW5nXG4gICAgLy8gbXV0YXRpb25zIHRoYXQgaGF2ZW4ndCBiZWVuIHN5bmNocm9uaXplZCB5ZXQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gcGVuZGluZyBtdXRhdGlvbnMsIHRoZW4gYHJvb3QubXV0YWJsZVJlYWRMYW5lc2Agd2lsbCBiZVxuICAgIC8vIGVtcHR5LCBhbmQgd2Uga25vdyB3ZSBjYW4gc2FmZWx5IHJlYWQuXG4gICAgLy9cbiAgICAvLyBJZiB0aGVyZSAqYXJlKiBwZW5kaW5nIG11dGF0aW9ucywgd2UgbWF5IHN0aWxsIGJlIGFibGUgdG8gc2FmZWx5IHJlYWRcbiAgICAvLyBpZiB0aGUgY3VycmVudGx5IHJlbmRlcmluZyBsYW5lcyBhcmUgaW5jbHVzaXZlIG9mIHRoZSBwZW5kaW5nIG11dGF0aW9uXG4gICAgLy8gbGFuZXMsIHNpbmNlIHRoYXQgZ3VhcmFudGVlcyB0aGF0IHRoZSB2YWx1ZSB3ZSdyZSBhYm91dCB0byByZWFkIGZyb21cbiAgICAvLyB0aGUgc291cmNlIGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdmFsdWVzIHRoYXQgd2UgcmVhZCBkdXJpbmcgdGhlIG1vc3RcbiAgICAvLyByZWNlbnQgbXV0YXRpb24uXG4gICAgaXNTYWZlVG9SZWFkRnJvbVNvdXJjZSA9IGlzU3Vic2V0T2ZMYW5lcyhyZW5kZXJMYW5lcywgcm9vdC5tdXRhYmxlUmVhZExhbmVzKTtcblxuICAgIGlmIChpc1NhZmVUb1JlYWRGcm9tU291cmNlKSB7XG4gICAgICAvLyBJZiBpdCdzIHNhZmUgdG8gcmVhZCBmcm9tIHRoaXMgc291cmNlIGR1cmluZyB0aGUgY3VycmVudCByZW5kZXIsXG4gICAgICAvLyBzdG9yZSB0aGUgdmVyc2lvbiBpbiBjYXNlIG90aGVyIGNvbXBvbmVudHMgcmVhZCBmcm9tIGl0LlxuICAgICAgLy8gQSBjaGFuZ2VkIHZlcnNpb24gbnVtYmVyIHdpbGwgbGV0IHRob3NlIGNvbXBvbmVudHMga25vdyB0byB0aHJvdyBhbmQgcmVzdGFydCB0aGUgcmVuZGVyLlxuICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKHNvdXJjZSwgdmVyc2lvbik7XG4gICAgfVxuICB9XG5cbiAgaWYgKGlzU2FmZVRvUmVhZEZyb21Tb3VyY2UpIHtcbiAgICB2YXIgc25hcHNob3QgPSBnZXRTbmFwc2hvdChzb3VyY2UuX3NvdXJjZSk7XG5cbiAgICB7XG4gICAgICBpZiAodHlwZW9mIHNuYXBzaG90ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGVycm9yKCdNdXRhYmxlIHNvdXJjZSBzaG91bGQgbm90IHJldHVybiBhIGZ1bmN0aW9uIGFzIHRoZSBzbmFwc2hvdCB2YWx1ZS4gJyArICdGdW5jdGlvbnMgbWF5IGNsb3NlIG92ZXIgbXV0YWJsZSB2YWx1ZXMgYW5kIGNhdXNlIHRlYXJpbmcuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNuYXBzaG90O1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgaGFuZGxlcyB0aGUgc3BlY2lhbCBjYXNlIG9mIGEgbXV0YWJsZSBzb3VyY2UgYmVpbmcgc2hhcmVkIGJldHdlZW4gcmVuZGVyZXJzLlxuICAgIC8vIEluIHRoYXQgY2FzZSwgaWYgdGhlIHNvdXJjZSBpcyBtdXRhdGVkIGJldHdlZW4gdGhlIGZpcnN0IGFuZCBzZWNvbmQgcmVuZGVyZXIsXG4gICAgLy8gVGhlIHNlY29uZCByZW5kZXJlciBkb24ndCBrbm93IHRoYXQgaXQgbmVlZHMgdG8gcmVzZXQgdGhlIFdJUCB2ZXJzaW9uIGR1cmluZyB1bndpbmQsXG4gICAgLy8gKGJlY2F1c2UgdGhlIGhvb2sgb25seSBtYXJrcyBzb3VyY2VzIGFzIGRpcnR5IGlmIGl0J3Mgd3JpdHRlbiB0byB0aGVpciBXSVAgdmVyc2lvbikuXG4gICAgLy8gVGhhdCB3b3VsZCBjYXVzZSB0aGlzIHRlYXIgY2hlY2sgdG8gdGhyb3cgYWdhaW4gYW5kIGV2ZW50dWFsbHkgYmUgdmlzaWJsZSB0byB0aGUgdXNlci5cbiAgICAvLyBXZSBjYW4gYXZvaWQgdGhpcyBpbmZpbml0ZSBsb29wIGJ5IGV4cGxpY2l0bHkgbWFya2luZyB0aGUgc291cmNlIGFzIGRpcnR5LlxuICAgIC8vXG4gICAgLy8gVGhpcyBjYW4gbGVhZCB0byB0ZWFyaW5nIGluIHRoZSBmaXJzdCByZW5kZXJlciB3aGVuIGl0IHJlc3VtZXMsXG4gICAgLy8gYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgdGhhdCAoc2hvcnQgb2YgdGhyb3dpbmcgaGVyZSBhbmQgcmVmdXNpbmcgdG8gY29udGludWUgdGhlIHJlbmRlcikuXG4gICAgbWFya1NvdXJjZUFzRGlydHkoc291cmNlKTtcblxuICAgIHtcbiAgICAgIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoIFwiQ2Fubm90IHJlYWQgZnJvbSBtdXRhYmxlIHNvdXJjZSBkdXJpbmcgdGhlIGN1cnJlbnQgcmVuZGVyIHdpdGhvdXQgdGVhcmluZy4gVGhpcyBpcyBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXNlTXV0YWJsZVNvdXJjZShob29rLCBzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIHJvb3QgPSBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKTtcblxuICBpZiAoIShyb290ICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIGEgd29yay1pbi1wcm9ncmVzcyByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBnZXRWZXJzaW9uID0gc291cmNlLl9nZXRWZXJzaW9uO1xuICB2YXIgdmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG5cbiAgdmFyIF9kaXNwYXRjaGVyJHVzZVN0YXRlID0gZGlzcGF0Y2hlci51c2VTdGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlYWRGcm9tVW5zdWJjcmliZWRNdXRhYmxlU291cmNlKHJvb3QsIHNvdXJjZSwgZ2V0U25hcHNob3QpO1xuICB9KSxcbiAgICAgIGN1cnJlbnRTbmFwc2hvdCA9IF9kaXNwYXRjaGVyJHVzZVN0YXRlWzBdLFxuICAgICAgc2V0U25hcHNob3QgPSBfZGlzcGF0Y2hlciR1c2VTdGF0ZVsxXTtcblxuICB2YXIgc25hcHNob3QgPSBjdXJyZW50U25hcHNob3Q7IC8vIEdyYWIgYSBoYW5kbGUgdG8gdGhlIHN0YXRlIGhvb2sgYXMgd2VsbC5cbiAgLy8gV2UgdXNlIGl0IHRvIGNsZWFyIHRoZSBwZW5kaW5nIHVwZGF0ZSBxdWV1ZSBpZiB3ZSBoYXZlIGEgbmV3IHNvdXJjZS5cblxuICB2YXIgc3RhdGVIb29rID0gd29ya0luUHJvZ3Jlc3NIb29rO1xuICB2YXIgbWVtb2l6ZWRTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgdmFyIHJlZnMgPSBtZW1vaXplZFN0YXRlLnJlZnM7XG4gIHZhciBwcmV2R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICB2YXIgcHJldlNvdXJjZSA9IG1lbW9pemVkU3RhdGUuc291cmNlO1xuICB2YXIgcHJldlN1YnNjcmliZSA9IG1lbW9pemVkU3RhdGUuc3Vic2NyaWJlO1xuICB2YXIgZmliZXIgPSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSB7XG4gICAgcmVmczogcmVmcyxcbiAgICBzb3VyY2U6IHNvdXJjZSxcbiAgICBzdWJzY3JpYmU6IHN1YnNjcmliZVxuICB9OyAvLyBTeW5jIHRoZSB2YWx1ZXMgbmVlZGVkIGJ5IG91ciBzdWJzY3JpcHRpb24gaGFuZGxlciBhZnRlciBlYWNoIGNvbW1pdC5cblxuICBkaXNwYXRjaGVyLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgcmVmcy5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90OyAvLyBOb3JtYWxseSB0aGUgZGlzcGF0Y2ggZnVuY3Rpb24gZm9yIGEgc3RhdGUgaG9vayBuZXZlciBjaGFuZ2VzLFxuICAgIC8vIGJ1dCB0aGlzIGhvb2sgcmVjcmVhdGVzIHRoZSBxdWV1ZSBpbiBjZXJ0YWluIGNhc2VzICB0byBhdm9pZCB1cGRhdGVzIGZyb20gc3RhbGUgc291cmNlcy5cbiAgICAvLyBoYW5kbGVDaGFuZ2UoKSBiZWxvdyBuZWVkcyB0byByZWZlcmVuY2UgdGhlIGRpc3BhdGNoIGZ1bmN0aW9uIHdpdGhvdXQgcmUtc3Vic2NyaWJpbmcsXG4gICAgLy8gc28gd2UgdXNlIGEgcmVmIHRvIGVuc3VyZSB0aGF0IGl0IGFsd2F5cyBoYXMgdGhlIGxhdGVzdCB2ZXJzaW9uLlxuXG4gICAgcmVmcy5zZXRTbmFwc2hvdCA9IHNldFNuYXBzaG90OyAvLyBDaGVjayBmb3IgYSBwb3NzaWJsZSBjaGFuZ2UgYmV0d2VlbiB3aGVuIHdlIGxhc3QgcmVuZGVyZWQgbm93LlxuXG4gICAgdmFyIG1heWJlTmV3VmVyc2lvbiA9IGdldFZlcnNpb24oc291cmNlLl9zb3VyY2UpO1xuXG4gICAgaWYgKCFvYmplY3RJcyh2ZXJzaW9uLCBtYXliZU5ld1ZlcnNpb24pKSB7XG4gICAgICB2YXIgbWF5YmVOZXdTbmFwc2hvdCA9IGdldFNuYXBzaG90KHNvdXJjZS5fc291cmNlKTtcblxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIG1heWJlTmV3U25hcHNob3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBlcnJvcignTXV0YWJsZSBzb3VyY2Ugc2hvdWxkIG5vdCByZXR1cm4gYSBmdW5jdGlvbiBhcyB0aGUgc25hcHNob3QgdmFsdWUuICcgKyAnRnVuY3Rpb25zIG1heSBjbG9zZSBvdmVyIG11dGFibGUgdmFsdWVzIGFuZCBjYXVzZSB0ZWFyaW5nLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghb2JqZWN0SXMoc25hcHNob3QsIG1heWJlTmV3U25hcHNob3QpKSB7XG4gICAgICAgIHNldFNuYXBzaG90KG1heWJlTmV3U25hcHNob3QpO1xuICAgICAgICB2YXIgbGFuZSA9IHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKTtcbiAgICAgICAgbWFya1Jvb3RNdXRhYmxlUmVhZChyb290LCBsYW5lKTtcbiAgICAgIH0gLy8gSWYgdGhlIHNvdXJjZSBtdXRhdGVkIGJldHdlZW4gcmVuZGVyIGFuZCBub3csXG4gICAgICAvLyB0aGVyZSBtYXkgYmUgc3RhdGUgdXBkYXRlcyBhbHJlYWR5IHNjaGVkdWxlZCBmcm9tIHRoZSBvbGQgc291cmNlLlxuICAgICAgLy8gRW50YW5nbGUgdGhlIHVwZGF0ZXMgc28gdGhhdCB0aGV5IHJlbmRlciBpbiB0aGUgc2FtZSBiYXRjaC5cblxuXG4gICAgICBtYXJrUm9vdEVudGFuZ2xlZChyb290LCByb290Lm11dGFibGVSZWFkTGFuZXMpO1xuICAgIH1cbiAgfSwgW2dldFNuYXBzaG90LCBzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiB3ZSBnb3QgYSBuZXcgc291cmNlIG9yIHN1YnNjcmliZSBmdW5jdGlvbiwgcmUtc3Vic2NyaWJlIGluIGEgcGFzc2l2ZSBlZmZlY3QuXG5cbiAgZGlzcGF0Y2hlci51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYW5kbGVDaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSByZWZzLmdldFNuYXBzaG90O1xuICAgICAgdmFyIGxhdGVzdFNldFNuYXBzaG90ID0gcmVmcy5zZXRTbmFwc2hvdDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGF0ZXN0U2V0U25hcHNob3QobGF0ZXN0R2V0U25hcHNob3Qoc291cmNlLl9zb3VyY2UpKTsgLy8gUmVjb3JkIGEgcGVuZGluZyBtdXRhYmxlIHNvdXJjZSB1cGRhdGUgd2l0aCB0aGUgc2FtZSBleHBpcmF0aW9uIHRpbWUuXG5cbiAgICAgICAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gICAgICAgIG1hcmtSb290TXV0YWJsZVJlYWQocm9vdCwgbGFuZSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBBIHNlbGVjdG9yIG1pZ2h0IHRocm93IGFmdGVyIGEgc291cmNlIG11dGF0aW9uLlxuICAgICAgICAvLyBlLmcuIGl0IG1pZ2h0IHRyeSB0byByZWFkIGZyb20gYSBwYXJ0IG9mIHRoZSBzdG9yZSB0aGF0IG5vIGxvbmdlciBleGlzdHMuXG4gICAgICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc3RpbGwgc2NoZWR1bGUgYW4gdXBkYXRlIHdpdGggUmVhY3QuXG4gICAgICAgIC8vIFdvcnN0IGNhc2UgdGhlIHNlbGVjdG9yIHdpbGwgdGhyb3cgYWdhaW4gYW5kIHRoZW4gYW4gZXJyb3IgYm91bmRhcnkgd2lsbCBoYW5kbGUgaXQuXG4gICAgICAgIGxhdGVzdFNldFNuYXBzaG90KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHZhciB1bnN1YnNjcmliZSA9IHN1YnNjcmliZShzb3VyY2UuX3NvdXJjZSwgaGFuZGxlQ2hhbmdlKTtcblxuICAgIHtcbiAgICAgIGlmICh0eXBlb2YgdW5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXJyb3IoJ011dGFibGUgc291cmNlIHN1YnNjcmliZSBmdW5jdGlvbiBtdXN0IHJldHVybiBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbi4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5zdWJzY3JpYmU7XG4gIH0sIFtzb3VyY2UsIHN1YnNjcmliZV0pOyAvLyBJZiBhbnkgb2YgdGhlIGlucHV0cyB0byB1c2VNdXRhYmxlU291cmNlIGNoYW5nZSwgcmVhZGluZyBpcyBwb3RlbnRpYWxseSB1bnNhZmUuXG4gIC8vXG4gIC8vIElmIGVpdGhlciB0aGUgc291cmNlIG9yIHRoZSBzdWJzY3JpcHRpb24gaGF2ZSBjaGFuZ2VkIHdlIGNhbid0IGNhbid0IHRydXN0IHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIE1heWJlIHRoZSBzb3VyY2UgY2hhbmdlZCBpbiBhIHdheSB0aGF0IHRoZSBvbGQgc3Vic2NyaXB0aW9uIGlnbm9yZWQgYnV0IHRoZSBuZXcgb25lIGRlcGVuZHMgb24uXG4gIC8vXG4gIC8vIElmIHRoZSBnZXRTbmFwc2hvdCBmdW5jdGlvbiBjaGFuZ2VkLCB3ZSBhbHNvIHNob3VsZG4ndCByZWx5IG9uIHRoZSB1cGRhdGUgcXVldWUuXG4gIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgdW5kZXJseWluZyBzb3VyY2Ugd2FzIG11dGF0ZWQgYmV0d2VlbiB0aGUgd2hlbiB0aGUgbGFzdCBcImNoYW5nZVwiIGV2ZW50IGZpcmVkLFxuICAvLyBhbmQgd2hlbiB0aGUgY3VycmVudCByZW5kZXIgKHdpdGggdGhlIG5ldyBnZXRTbmFwc2hvdCBmdW5jdGlvbikgaXMgcHJvY2Vzc2VkLlxuICAvL1xuICAvLyBJbiBib3RoIGNhc2VzLCB3ZSBuZWVkIHRvIHRocm93IGF3YXkgcGVuZGluZyB1cGRhdGVzIChzaW5jZSB0aGV5IGFyZSBubyBsb25nZXIgcmVsZXZhbnQpXG4gIC8vIGFuZCB0cmVhdCByZWFkaW5nIGZyb20gdGhlIHNvdXJjZSBhcyB3ZSBkbyBpbiB0aGUgbW91bnQgY2FzZS5cblxuICBpZiAoIW9iamVjdElzKHByZXZHZXRTbmFwc2hvdCwgZ2V0U25hcHNob3QpIHx8ICFvYmplY3RJcyhwcmV2U291cmNlLCBzb3VyY2UpIHx8ICFvYmplY3RJcyhwcmV2U3Vic2NyaWJlLCBzdWJzY3JpYmUpKSB7XG4gICAgLy8gQ3JlYXRlIGEgbmV3IHF1ZXVlIGFuZCBzZXRTdGF0ZSBtZXRob2QsXG4gICAgLy8gU28gaWYgdGhlcmUgYXJlIGludGVybGVhdmVkIHVwZGF0ZXMsIHRoZXkgZ2V0IHB1c2hlZCB0byB0aGUgb2xkZXIgcXVldWUuXG4gICAgLy8gV2hlbiB0aGlzIGJlY29tZXMgY3VycmVudCwgdGhlIHByZXZpb3VzIHF1ZXVlIGFuZCBkaXNwYXRjaCBtZXRob2Qgd2lsbCBiZSBkaXNjYXJkZWQsXG4gICAgLy8gaW5jbHVkaW5nIGFueSBpbnRlcmxlYXZpbmcgdXBkYXRlcyB0aGF0IG9jY3VyLlxuICAgIHZhciBuZXdRdWV1ZSA9IHtcbiAgICAgIHBlbmRpbmc6IG51bGwsXG4gICAgICBkaXNwYXRjaDogbnVsbCxcbiAgICAgIGxhc3RSZW5kZXJlZFJlZHVjZXI6IGJhc2ljU3RhdGVSZWR1Y2VyLFxuICAgICAgbGFzdFJlbmRlcmVkU3RhdGU6IHNuYXBzaG90XG4gICAgfTtcbiAgICBuZXdRdWV1ZS5kaXNwYXRjaCA9IHNldFNuYXBzaG90ID0gZGlzcGF0Y2hBY3Rpb24uYmluZChudWxsLCBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLCBuZXdRdWV1ZSk7XG4gICAgc3RhdGVIb29rLnF1ZXVlID0gbmV3UXVldWU7XG4gICAgc3RhdGVIb29rLmJhc2VRdWV1ZSA9IG51bGw7XG4gICAgc25hcHNob3QgPSByZWFkRnJvbVVuc3ViY3JpYmVkTXV0YWJsZVNvdXJjZShyb290LCBzb3VyY2UsIGdldFNuYXBzaG90KTtcbiAgICBzdGF0ZUhvb2subWVtb2l6ZWRTdGF0ZSA9IHN0YXRlSG9vay5iYXNlU3RhdGUgPSBzbmFwc2hvdDtcbiAgfVxuXG4gIHJldHVybiBzbmFwc2hvdDtcbn1cblxuZnVuY3Rpb24gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICByZWZzOiB7XG4gICAgICBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QsXG4gICAgICBzZXRTbmFwc2hvdDogbnVsbFxuICAgIH0sXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3Vic2NyaWJlOiBzdWJzY3JpYmVcbiAgfTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIHVzZU11dGFibGVTb3VyY2UoaG9vaywgc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbn1cblxuZnVuY3Rpb24gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuXG4gIGlmICh0eXBlb2YgaW5pdGlhbFN0YXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gJEZsb3dGaXhNZTogRmxvdyBkb2Vzbid0IGxpa2UgbWl4ZWQgdHlwZXNcbiAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcbiAgfVxuXG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IGhvb2suYmFzZVN0YXRlID0gaW5pdGlhbFN0YXRlO1xuICB2YXIgcXVldWUgPSBob29rLnF1ZXVlID0ge1xuICAgIHBlbmRpbmc6IG51bGwsXG4gICAgZGlzcGF0Y2g6IG51bGwsXG4gICAgbGFzdFJlbmRlcmVkUmVkdWNlcjogYmFzaWNTdGF0ZVJlZHVjZXIsXG4gICAgbGFzdFJlbmRlcmVkU3RhdGU6IGluaXRpYWxTdGF0ZVxuICB9O1xuICB2YXIgZGlzcGF0Y2ggPSBxdWV1ZS5kaXNwYXRjaCA9IGRpc3BhdGNoQWN0aW9uLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSwgcXVldWUpO1xuICByZXR1cm4gW2hvb2subWVtb2l6ZWRTdGF0ZSwgZGlzcGF0Y2hdO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgcmV0dXJuIHVwZGF0ZVJlZHVjZXIoYmFzaWNTdGF0ZVJlZHVjZXIpO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclN0YXRlKGluaXRpYWxTdGF0ZSkge1xuICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKGJhc2ljU3RhdGVSZWR1Y2VyKTtcbn1cblxuZnVuY3Rpb24gcHVzaEVmZmVjdCh0YWcsIGNyZWF0ZSwgZGVzdHJveSwgZGVwcykge1xuICB2YXIgZWZmZWN0ID0ge1xuICAgIHRhZzogdGFnLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGRlc3Ryb3k6IGRlc3Ryb3ksXG4gICAgZGVwczogZGVwcyxcbiAgICAvLyBDaXJjdWxhclxuICAgIG5leHQ6IG51bGxcbiAgfTtcbiAgdmFyIGNvbXBvbmVudFVwZGF0ZVF1ZXVlID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS51cGRhdGVRdWV1ZTtcblxuICBpZiAoY29tcG9uZW50VXBkYXRlUXVldWUgPT09IG51bGwpIHtcbiAgICBjb21wb25lbnRVcGRhdGVRdWV1ZSA9IGNyZWF0ZUZ1bmN0aW9uQ29tcG9uZW50VXBkYXRlUXVldWUoKTtcbiAgICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLnVwZGF0ZVF1ZXVlID0gY29tcG9uZW50VXBkYXRlUXVldWU7XG4gICAgY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdCA9IGVmZmVjdC5uZXh0ID0gZWZmZWN0O1xuICB9IGVsc2Uge1xuICAgIHZhciBsYXN0RWZmZWN0ID0gY29tcG9uZW50VXBkYXRlUXVldWUubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0Lm5leHQgPSBlZmZlY3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgIGxhc3RFZmZlY3QubmV4dCA9IGVmZmVjdDtcbiAgICAgIGVmZmVjdC5uZXh0ID0gZmlyc3RFZmZlY3Q7XG4gICAgICBjb21wb25lbnRVcGRhdGVRdWV1ZS5sYXN0RWZmZWN0ID0gZWZmZWN0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlZmZlY3Q7XG59XG5cbmZ1bmN0aW9uIG1vdW50UmVmKGluaXRpYWxWYWx1ZSkge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciByZWYgPSB7XG4gICAgY3VycmVudDogaW5pdGlhbFZhbHVlXG4gIH07XG5cbiAge1xuICAgIE9iamVjdC5zZWFsKHJlZik7XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSByZWY7XG4gIHJldHVybiByZWY7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgcmV0dXJuIGhvb2subWVtb2l6ZWRTdGF0ZTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3RJbXBsKGZpYmVyRmxhZ3MsIGhvb2tGbGFncywgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBob29rID0gbW91bnRXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEuZmxhZ3MgfD0gZmliZXJGbGFncztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBob29rRmxhZ3MsIGNyZWF0ZSwgdW5kZWZpbmVkLCBuZXh0RGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUVmZmVjdEltcGwoZmliZXJGbGFncywgaG9va0ZsYWdzLCBjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBkZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gIGlmIChjdXJyZW50SG9vayAhPT0gbnVsbCkge1xuICAgIHZhciBwcmV2RWZmZWN0ID0gY3VycmVudEhvb2subWVtb2l6ZWRTdGF0ZTtcbiAgICBkZXN0cm95ID0gcHJldkVmZmVjdC5kZXN0cm95O1xuXG4gICAgaWYgKG5leHREZXBzICE9PSBudWxsKSB7XG4gICAgICB2YXIgcHJldkRlcHMgPSBwcmV2RWZmZWN0LmRlcHM7XG5cbiAgICAgIGlmIChhcmVIb29rSW5wdXRzRXF1YWwobmV4dERlcHMsIHByZXZEZXBzKSkge1xuICAgICAgICBwdXNoRWZmZWN0KGhvb2tGbGFncywgY3JlYXRlLCBkZXN0cm95LCBuZXh0RGVwcyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxLmZsYWdzIHw9IGZpYmVyRmxhZ3M7XG4gIGhvb2subWVtb2l6ZWRTdGF0ZSA9IHB1c2hFZmZlY3QoSGFzRWZmZWN0IHwgaG9va0ZsYWdzLCBjcmVhdGUsIGRlc3Ryb3ksIG5leHREZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlIHwgUGFzc2l2ZSwgUGFzc2l2ZSQxLCBjcmVhdGUsIGRlcHMpO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmTm90Q3VycmVudGx5QWN0aW5nRWZmZWN0c0luREVWKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSB8IFBhc3NpdmUsIFBhc3NpdmUkMSwgY3JlYXRlLCBkZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKSB7XG4gIHJldHVybiBtb3VudEVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgcmV0dXJuIHVwZGF0ZUVmZmVjdEltcGwoVXBkYXRlLCBMYXlvdXQsIGNyZWF0ZSwgZGVwcyk7XG59XG5cbmZ1bmN0aW9uIGltcGVyYXRpdmVIYW5kbGVFZmZlY3QoY3JlYXRlLCByZWYpIHtcbiAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgcmVmQ2FsbGJhY2sgPSByZWY7XG5cbiAgICB2YXIgX2luc3QgPSBjcmVhdGUoKTtcblxuICAgIHJlZkNhbGxiYWNrKF9pbnN0KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgcmVmQ2FsbGJhY2sobnVsbCk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChyZWYgIT09IG51bGwgJiYgcmVmICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgcmVmT2JqZWN0ID0gcmVmO1xuXG4gICAge1xuICAgICAgaWYgKCFyZWZPYmplY3QuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIGZpcnN0IGFyZ3VtZW50IHRvIGVpdGhlciBiZSBhICcgKyAncmVmIGNhbGxiYWNrIG9yIFJlYWN0LmNyZWF0ZVJlZigpIG9iamVjdC4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgJ2FuIG9iamVjdCB3aXRoIGtleXMgeycgKyBPYmplY3Qua2V5cyhyZWZPYmplY3QpLmpvaW4oJywgJykgKyAnfScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBfaW5zdDIgPSBjcmVhdGUoKTtcblxuICAgIHJlZk9iamVjdC5jdXJyZW50ID0gX2luc3QyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZWZPYmplY3QuY3VycmVudCA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBlcnJvcignRXhwZWN0ZWQgdXNlSW1wZXJhdGl2ZUhhbmRsZSgpIHNlY29uZCBhcmd1bWVudCB0byBiZSBhIGZ1bmN0aW9uICcgKyAndGhhdCBjcmVhdGVzIGEgaGFuZGxlLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjcmVhdGUgIT09IG51bGwgPyB0eXBlb2YgY3JlYXRlIDogJ251bGwnKTtcbiAgICB9XG4gIH0gLy8gVE9ETzogSWYgZGVwcyBhcmUgcHJvdmlkZWQsIHNob3VsZCB3ZSBza2lwIGNvbXBhcmluZyB0aGUgcmVmIGl0c2VsZj9cblxuXG4gIHZhciBlZmZlY3REZXBzID0gZGVwcyAhPT0gbnVsbCAmJiBkZXBzICE9PSB1bmRlZmluZWQgPyBkZXBzLmNvbmNhdChbcmVmXSkgOiBudWxsO1xuICByZXR1cm4gbW91bnRFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdFeHBlY3RlZCB1c2VJbXBlcmF0aXZlSGFuZGxlKCkgc2Vjb25kIGFyZ3VtZW50IHRvIGJlIGEgZnVuY3Rpb24gJyArICd0aGF0IGNyZWF0ZXMgYSBoYW5kbGUuIEluc3RlYWQgcmVjZWl2ZWQ6ICVzLicsIGNyZWF0ZSAhPT0gbnVsbCA/IHR5cGVvZiBjcmVhdGUgOiAnbnVsbCcpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiBJZiBkZXBzIGFyZSBwcm92aWRlZCwgc2hvdWxkIHdlIHNraXAgY29tcGFyaW5nIHRoZSByZWYgaXRzZWxmP1xuXG5cbiAgdmFyIGVmZmVjdERlcHMgPSBkZXBzICE9PSBudWxsICYmIGRlcHMgIT09IHVuZGVmaW5lZCA/IGRlcHMuY29uY2F0KFtyZWZdKSA6IG51bGw7XG4gIHJldHVybiB1cGRhdGVFZmZlY3RJbXBsKFVwZGF0ZSwgTGF5b3V0LCBpbXBlcmF0aXZlSGFuZGxlRWZmZWN0LmJpbmQobnVsbCwgY3JlYXRlLCByZWYpLCBlZmZlY3REZXBzKTtcbn1cblxuZnVuY3Rpb24gbW91bnREZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikgey8vIFRoaXMgaG9vayBpcyBub3JtYWxseSBhIG5vLW9wLlxuICAvLyBUaGUgcmVhY3QtZGVidWctaG9va3MgcGFja2FnZSBpbmplY3RzIGl0cyBvd24gaW1wbGVtZW50YXRpb25cbiAgLy8gc28gdGhhdCBlLmcuIERldlRvb2xzIGNhbiBkaXNwbGF5IGN1c3RvbSBob29rIHZhbHVlcy5cbn1cblxudmFyIHVwZGF0ZURlYnVnVmFsdWUgPSBtb3VudERlYnVnVmFsdWU7XG5cbmZ1bmN0aW9uIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSBtb3VudFdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW2NhbGxiYWNrLCBuZXh0RGVwc107XG4gIHJldHVybiBjYWxsYmFjaztcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpIHtcbiAgdmFyIGhvb2sgPSB1cGRhdGVXb3JrSW5Qcm9ncmVzc0hvb2soKTtcbiAgdmFyIG5leHREZXBzID0gZGVwcyA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlcHM7XG4gIHZhciBwcmV2U3RhdGUgPSBob29rLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgIGlmIChuZXh0RGVwcyAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZEZXBzID0gcHJldlN0YXRlWzFdO1xuXG4gICAgICBpZiAoYXJlSG9va0lucHV0c0VxdWFsKG5leHREZXBzLCBwcmV2RGVwcykpIHtcbiAgICAgICAgcmV0dXJuIHByZXZTdGF0ZVswXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBob29rLm1lbW9pemVkU3RhdGUgPSBbY2FsbGJhY2ssIG5leHREZXBzXTtcbiAgcmV0dXJuIGNhbGxiYWNrO1xufVxuXG5mdW5jdGlvbiBtb3VudE1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IG1vdW50V29ya0luUHJvZ3Jlc3NIb29rKCk7XG4gIHZhciBuZXh0RGVwcyA9IGRlcHMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBkZXBzO1xuICB2YXIgbmV4dFZhbHVlID0gbmV4dENyZWF0ZSgpO1xuICBob29rLm1lbW9pemVkU3RhdGUgPSBbbmV4dFZhbHVlLCBuZXh0RGVwc107XG4gIHJldHVybiBuZXh0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW8obmV4dENyZWF0ZSwgZGVwcykge1xuICB2YXIgaG9vayA9IHVwZGF0ZVdvcmtJblByb2dyZXNzSG9vaygpO1xuICB2YXIgbmV4dERlcHMgPSBkZXBzID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVwcztcbiAgdmFyIHByZXZTdGF0ZSA9IGhvb2subWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgLy8gQXNzdW1lIHRoZXNlIGFyZSBkZWZpbmVkLiBJZiB0aGV5J3JlIG5vdCwgYXJlSG9va0lucHV0c0VxdWFsIHdpbGwgd2Fybi5cbiAgICBpZiAobmV4dERlcHMgIT09IG51bGwpIHtcbiAgICAgIHZhciBwcmV2RGVwcyA9IHByZXZTdGF0ZVsxXTtcblxuICAgICAgaWYgKGFyZUhvb2tJbnB1dHNFcXVhbChuZXh0RGVwcywgcHJldkRlcHMpKSB7XG4gICAgICAgIHJldHVybiBwcmV2U3RhdGVbMF07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIG5leHRWYWx1ZSA9IG5leHRDcmVhdGUoKTtcbiAgaG9vay5tZW1vaXplZFN0YXRlID0gW25leHRWYWx1ZSwgbmV4dERlcHNdO1xuICByZXR1cm4gbmV4dFZhbHVlO1xufVxuXG5mdW5jdGlvbiBtb3VudERlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9tb3VudFN0YXRlID0gbW91bnRTdGF0ZSh2YWx1ZSksXG4gICAgICBwcmV2VmFsdWUgPSBfbW91bnRTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX21vdW50U3RhdGVbMV07XG5cbiAgbW91bnRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSAxO1xuXG4gICAgdHJ5IHtcbiAgICAgIHNldFZhbHVlKHZhbHVlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgfVxuICB9LCBbdmFsdWVdKTtcbiAgcmV0dXJuIHByZXZWYWx1ZTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSkge1xuICB2YXIgX3VwZGF0ZVN0YXRlID0gdXBkYXRlU3RhdGUoKSxcbiAgICAgIHByZXZWYWx1ZSA9IF91cGRhdGVTdGF0ZVswXSxcbiAgICAgIHNldFZhbHVlID0gX3VwZGF0ZVN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlckRlZmVycmVkVmFsdWUodmFsdWUpIHtcbiAgdmFyIF9yZXJlbmRlclN0YXRlID0gcmVyZW5kZXJTdGF0ZSgpLFxuICAgICAgcHJldlZhbHVlID0gX3JlcmVuZGVyU3RhdGVbMF0sXG4gICAgICBzZXRWYWx1ZSA9IF9yZXJlbmRlclN0YXRlWzFdO1xuXG4gIHVwZGF0ZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByZXZUcmFuc2l0aW9uID0gUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uO1xuICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICB0cnkge1xuICAgICAgc2V0VmFsdWUodmFsdWUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyQxLnRyYW5zaXRpb24gPSBwcmV2VHJhbnNpdGlvbjtcbiAgICB9XG4gIH0sIFt2YWx1ZV0pO1xuICByZXR1cm4gcHJldlZhbHVlO1xufVxuXG5mdW5jdGlvbiBzdGFydFRyYW5zaXRpb24oc2V0UGVuZGluZywgY2FsbGJhY2spIHtcbiAgdmFyIHByaW9yaXR5TGV2ZWwgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpO1xuXG4gIHtcbiAgICBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsIDwgVXNlckJsb2NraW5nUHJpb3JpdHkkMiA/IFVzZXJCbG9ja2luZ1ByaW9yaXR5JDIgOiBwcmlvcml0eUxldmVsLCBmdW5jdGlvbiAoKSB7XG4gICAgICBzZXRQZW5kaW5nKHRydWUpO1xuICAgIH0pO1xuICAgIHJ1bldpdGhQcmlvcml0eSQxKHByaW9yaXR5TGV2ZWwgPiBOb3JtYWxQcmlvcml0eSQxID8gTm9ybWFsUHJpb3JpdHkkMSA6IHByaW9yaXR5TGV2ZWwsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwcmV2VHJhbnNpdGlvbiA9IFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbjtcbiAgICAgIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnJDEudHJhbnNpdGlvbiA9IDE7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50QmF0Y2hDb25maWckMS50cmFuc2l0aW9uID0gcHJldlRyYW5zaXRpb247XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRUcmFuc2l0aW9uKCkge1xuICB2YXIgX21vdW50U3RhdGUyID0gbW91bnRTdGF0ZShmYWxzZSksXG4gICAgICBpc1BlbmRpbmcgPSBfbW91bnRTdGF0ZTJbMF0sXG4gICAgICBzZXRQZW5kaW5nID0gX21vdW50U3RhdGUyWzFdOyAvLyBUaGUgYHN0YXJ0YCBtZXRob2QgY2FuIGJlIHN0b3JlZCBvbiBhIHJlZiwgc2luY2UgYHNldFBlbmRpbmdgXG4gIC8vIG5ldmVyIGNoYW5nZXMuXG5cblxuICB2YXIgc3RhcnQgPSBzdGFydFRyYW5zaXRpb24uYmluZChudWxsLCBzZXRQZW5kaW5nKTtcbiAgbW91bnRSZWYoc3RhcnQpO1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVUcmFuc2l0aW9uKCkge1xuICB2YXIgX3VwZGF0ZVN0YXRlMiA9IHVwZGF0ZVN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfdXBkYXRlU3RhdGUyWzBdO1xuXG4gIHZhciBzdGFydFJlZiA9IHVwZGF0ZVJlZigpO1xuICB2YXIgc3RhcnQgPSBzdGFydFJlZi5jdXJyZW50O1xuICByZXR1cm4gW3N0YXJ0LCBpc1BlbmRpbmddO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlclRyYW5zaXRpb24oKSB7XG4gIHZhciBfcmVyZW5kZXJTdGF0ZTIgPSByZXJlbmRlclN0YXRlKCksXG4gICAgICBpc1BlbmRpbmcgPSBfcmVyZW5kZXJTdGF0ZTJbMF07XG5cbiAgdmFyIHN0YXJ0UmVmID0gdXBkYXRlUmVmKCk7XG4gIHZhciBzdGFydCA9IHN0YXJ0UmVmLmN1cnJlbnQ7XG4gIHJldHVybiBbc3RhcnQsIGlzUGVuZGluZ107XG59XG5cbnZhciBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRJc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlSW5ERVYoKSB7XG4gIHtcbiAgICByZXR1cm4gaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuT25PcGFxdWVJZGVudGlmaWVyQWNjZXNzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIC8vIFRPRE86IFNob3VsZCB3YXJuIGluIGVmZmVjdHMgYW5kIGNhbGxiYWNrcywgdG9vXG4gICAgdmFyIG5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJztcblxuICAgIGlmIChnZXRJc1JlbmRlcmluZygpICYmICFkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdKSB7XG4gICAgICBlcnJvcignVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgJyArICdwYXNzZWQgdGhyb3VnaCB0byBhdHRyaWJ1dGVzIG9ubHkuIERvIG5vdCByZWFkIHRoZSAnICsgJ3ZhbHVlIGRpcmVjdGx5LicpO1xuXG4gICAgICBkaWRXYXJuQWJvdXRVc2VPcGFxdWVJZGVudGlmaWVyW25hbWVdID0gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRPcGFxdWVJZGVudGlmaWVyKCkge1xuICB2YXIgbWFrZUlkID0gIG1ha2VDbGllbnRJZEluREVWLmJpbmQobnVsbCwgd2Fybk9uT3BhcXVlSWRlbnRpZmllckFjY2Vzc0luREVWLmJpbmQobnVsbCwgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMSkpIDtcblxuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIHZhciBkaWRVcGdyYWRlID0gZmFsc2U7XG4gICAgdmFyIGZpYmVyID0gY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMTtcblxuICAgIHZhciByZWFkVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoIWRpZFVwZ3JhZGUpIHtcbiAgICAgICAgLy8gT25seSB1cGdyYWRlIG9uY2UuIFRoaXMgd29ya3MgZXZlbiBpbnNpZGUgdGhlIHJlbmRlciBwaGFzZSBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSB1cGRhdGUgaXMgYWRkZWQgdG8gYSBzaGFyZWQgcXVldWUsIHdoaWNoIG91dGxhc3RzIHRoZVxuICAgICAgICAvLyBpbi1wcm9ncmVzcyByZW5kZXIuXG4gICAgICAgIGRpZFVwZ3JhZGUgPSB0cnVlO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpc1VwZGF0aW5nT3BhcXVlVmFsdWVJblJlbmRlclBoYXNlID0gdHJ1ZTtcbiAgICAgICAgICBzZXRJZChtYWtlSWQoKSk7XG4gICAgICAgICAgaXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZSA9IGZhbHNlO1xuICAgICAgICAgIHdhcm5Pbk9wYXF1ZUlkZW50aWZpZXJBY2Nlc3NJbkRFVihmaWJlcik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiVGhlIG9iamVjdCBwYXNzZWQgYmFjayBmcm9tIHVzZU9wYXF1ZUlkZW50aWZpZXIgaXMgbWVhbnQgdG8gYmUgcGFzc2VkIHRocm91Z2ggdG8gYXR0cmlidXRlcyBvbmx5LiBEbyBub3QgcmVhZCB0aGUgdmFsdWUgZGlyZWN0bHkuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICB2YXIgaWQgPSBtYWtlT3BhcXVlSHlkcmF0aW5nT2JqZWN0KHJlYWRWYWx1ZSk7XG4gICAgdmFyIHNldElkID0gbW91bnRTdGF0ZShpZClbMV07XG5cbiAgICBpZiAoKGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgY3VycmVudGx5UmVuZGVyaW5nRmliZXIkMS5mbGFncyB8PSBVcGRhdGUgfCBQYXNzaXZlO1xuICAgICAgcHVzaEVmZmVjdChIYXNFZmZlY3QgfCBQYXNzaXZlJDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2V0SWQobWFrZUlkKCkpO1xuICAgICAgfSwgdW5kZWZpbmVkLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaWQ7XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9pZCA9IG1ha2VJZCgpO1xuXG4gICAgbW91bnRTdGF0ZShfaWQpO1xuICAgIHJldHVybiBfaWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpIHtcbiAgdmFyIGlkID0gdXBkYXRlU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiByZXJlbmRlck9wYXF1ZUlkZW50aWZpZXIoKSB7XG4gIHZhciBpZCA9IHJlcmVuZGVyU3RhdGUoKVswXTtcbiAgcmV0dXJuIGlkO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaEFjdGlvbihmaWJlciwgcXVldWUsIGFjdGlvbikge1xuICB7XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbM10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKFwiU3RhdGUgdXBkYXRlcyBmcm9tIHRoZSB1c2VTdGF0ZSgpIGFuZCB1c2VSZWR1Y2VyKCkgSG9va3MgZG9uJ3Qgc3VwcG9ydCB0aGUgXCIgKyAnc2Vjb25kIGNhbGxiYWNrIGFyZ3VtZW50LiBUbyBleGVjdXRlIGEgc2lkZSBlZmZlY3QgYWZ0ZXIgJyArICdyZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gdGhlIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIGxhbmUgPSByZXF1ZXN0VXBkYXRlTGFuZShmaWJlcik7XG4gIHZhciB1cGRhdGUgPSB7XG4gICAgbGFuZTogbGFuZSxcbiAgICBhY3Rpb246IGFjdGlvbixcbiAgICBlYWdlclJlZHVjZXI6IG51bGwsXG4gICAgZWFnZXJTdGF0ZTogbnVsbCxcbiAgICBuZXh0OiBudWxsXG4gIH07IC8vIEFwcGVuZCB0aGUgdXBkYXRlIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuXG5cbiAgdmFyIHBlbmRpbmcgPSBxdWV1ZS5wZW5kaW5nO1xuXG4gIGlmIChwZW5kaW5nID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgdXBkYXRlLiBDcmVhdGUgYSBjaXJjdWxhciBsaXN0LlxuICAgIHVwZGF0ZS5uZXh0ID0gdXBkYXRlO1xuICB9IGVsc2Uge1xuICAgIHVwZGF0ZS5uZXh0ID0gcGVuZGluZy5uZXh0O1xuICAgIHBlbmRpbmcubmV4dCA9IHVwZGF0ZTtcbiAgfVxuXG4gIHF1ZXVlLnBlbmRpbmcgPSB1cGRhdGU7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGZpYmVyID09PSBjdXJyZW50bHlSZW5kZXJpbmdGaWJlciQxIHx8IGFsdGVybmF0ZSAhPT0gbnVsbCAmJiBhbHRlcm5hdGUgPT09IGN1cnJlbnRseVJlbmRlcmluZ0ZpYmVyJDEpIHtcbiAgICAvLyBUaGlzIGlzIGEgcmVuZGVyIHBoYXNlIHVwZGF0ZS4gU3Rhc2ggaXQgaW4gYSBsYXppbHktY3JlYXRlZCBtYXAgb2ZcbiAgICAvLyBxdWV1ZSAtPiBsaW5rZWQgbGlzdCBvZiB1cGRhdGVzLiBBZnRlciB0aGlzIHJlbmRlciBwYXNzLCB3ZSdsbCByZXN0YXJ0XG4gICAgLy8gYW5kIGFwcGx5IHRoZSBzdGFzaGVkIHVwZGF0ZXMgb24gdG9wIG9mIHRoZSB3b3JrLWluLXByb2dyZXNzIGhvb2suXG4gICAgZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZUR1cmluZ1RoaXNQYXNzID0gZGlkU2NoZWR1bGVSZW5kZXJQaGFzZVVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGZpYmVyLmxhbmVzID09PSBOb0xhbmVzICYmIChhbHRlcm5hdGUgPT09IG51bGwgfHwgYWx0ZXJuYXRlLmxhbmVzID09PSBOb0xhbmVzKSkge1xuICAgICAgLy8gVGhlIHF1ZXVlIGlzIGN1cnJlbnRseSBlbXB0eSwgd2hpY2ggbWVhbnMgd2UgY2FuIGVhZ2VybHkgY29tcHV0ZSB0aGVcbiAgICAgIC8vIG5leHQgc3RhdGUgYmVmb3JlIGVudGVyaW5nIHRoZSByZW5kZXIgcGhhc2UuIElmIHRoZSBuZXcgc3RhdGUgaXMgdGhlXG4gICAgICAvLyBzYW1lIGFzIHRoZSBjdXJyZW50IHN0YXRlLCB3ZSBtYXkgYmUgYWJsZSB0byBiYWlsIG91dCBlbnRpcmVseS5cbiAgICAgIHZhciBsYXN0UmVuZGVyZWRSZWR1Y2VyID0gcXVldWUubGFzdFJlbmRlcmVkUmVkdWNlcjtcblxuICAgICAgaWYgKGxhc3RSZW5kZXJlZFJlZHVjZXIgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIHByZXZEaXNwYXRjaGVyO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG4gICAgICAgIH1cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhciBjdXJyZW50U3RhdGUgPSBxdWV1ZS5sYXN0UmVuZGVyZWRTdGF0ZTtcbiAgICAgICAgICB2YXIgZWFnZXJTdGF0ZSA9IGxhc3RSZW5kZXJlZFJlZHVjZXIoY3VycmVudFN0YXRlLCBhY3Rpb24pOyAvLyBTdGFzaCB0aGUgZWFnZXJseSBjb21wdXRlZCBzdGF0ZSwgYW5kIHRoZSByZWR1Y2VyIHVzZWQgdG8gY29tcHV0ZVxuICAgICAgICAgIC8vIGl0LCBvbiB0aGUgdXBkYXRlIG9iamVjdC4gSWYgdGhlIHJlZHVjZXIgaGFzbid0IGNoYW5nZWQgYnkgdGhlXG4gICAgICAgICAgLy8gdGltZSB3ZSBlbnRlciB0aGUgcmVuZGVyIHBoYXNlLCB0aGVuIHRoZSBlYWdlciBzdGF0ZSBjYW4gYmUgdXNlZFxuICAgICAgICAgIC8vIHdpdGhvdXQgY2FsbGluZyB0aGUgcmVkdWNlciBhZ2Fpbi5cblxuICAgICAgICAgIHVwZGF0ZS5lYWdlclJlZHVjZXIgPSBsYXN0UmVuZGVyZWRSZWR1Y2VyO1xuICAgICAgICAgIHVwZGF0ZS5lYWdlclN0YXRlID0gZWFnZXJTdGF0ZTtcblxuICAgICAgICAgIGlmIChvYmplY3RJcyhlYWdlclN0YXRlLCBjdXJyZW50U3RhdGUpKSB7XG4gICAgICAgICAgICAvLyBGYXN0IHBhdGguIFdlIGNhbiBiYWlsIG91dCB3aXRob3V0IHNjaGVkdWxpbmcgUmVhY3QgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgLy8gSXQncyBzdGlsbCBwb3NzaWJsZSB0aGF0IHdlJ2xsIG5lZWQgdG8gcmViYXNlIHRoaXMgdXBkYXRlIGxhdGVyLFxuICAgICAgICAgICAgLy8gaWYgdGhlIGNvbXBvbmVudCByZS1yZW5kZXJzIGZvciBhIGRpZmZlcmVudCByZWFzb24gYW5kIGJ5IHRoYXRcbiAgICAgICAgICAgIC8vIHRpbWUgdGhlIHJlZHVjZXIgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikgey8vIFN1cHByZXNzIHRoZSBlcnJvci4gSXQgd2lsbCB0aHJvdyBhZ2FpbiBpbiB0aGUgcmVuZGVyIHBoYXNlLlxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgLy8gJEZsb3dFeHBlY3RlZEVycm9yIC0gamVzdCBpc24ndCBhIGdsb2JhbCwgYW5kIGlzbid0IHJlY29nbml6ZWQgb3V0c2lkZSBvZiB0ZXN0c1xuICAgICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgICB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpO1xuICAgICAgICB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5EZXYoZmliZXIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgfVxufVxuXG52YXIgQ29udGV4dE9ubHlEaXNwYXRjaGVyID0ge1xuICByZWFkQ29udGV4dDogcmVhZENvbnRleHQsXG4gIHVzZUNhbGxiYWNrOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUNvbnRleHQ6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTGF5b3V0RWZmZWN0OiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZU1lbW86IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlUmVkdWNlcjogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VSZWY6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlU3RhdGU6IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlRGVidWdWYWx1ZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VEZWZlcnJlZFZhbHVlOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVzZVRyYW5zaXRpb246IHRocm93SW52YWxpZEhvb2tFcnJvcixcbiAgdXNlTXV0YWJsZVNvdXJjZTogdGhyb3dJbnZhbGlkSG9va0Vycm9yLFxuICB1c2VPcGFxdWVJZGVudGlmaWVyOiB0aHJvd0ludmFsaWRIb29rRXJyb3IsXG4gIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxufTtcbnZhciBIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRXaXRoSG9va1R5cGVzSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IG51bGw7XG52YXIgSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVYgPSBudWxsO1xudmFyIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSBudWxsO1xuXG57XG4gIHZhciB3YXJuSW52YWxpZENvbnRleHRBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0NvbnRleHQgY2FuIG9ubHkgYmUgcmVhZCB3aGlsZSBSZWFjdCBpcyByZW5kZXJpbmcuICcgKyAnSW4gY2xhc3NlcywgeW91IGNhbiByZWFkIGl0IGluIHRoZSByZW5kZXIgbWV0aG9kIG9yIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcy4gJyArICdJbiBmdW5jdGlvbiBjb21wb25lbnRzLCB5b3UgY2FuIHJlYWQgaXQgZGlyZWN0bHkgaW4gdGhlIGZ1bmN0aW9uIGJvZHksIGJ1dCBub3QgJyArICdpbnNpZGUgSG9va3MgbGlrZSB1c2VSZWR1Y2VyKCkgb3IgdXNlTWVtbygpLicpO1xuICB9O1xuXG4gIHZhciB3YXJuSW52YWxpZEhvb2tBY2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXJyb3IoJ0RvIG5vdCBjYWxsIEhvb2tzIGluc2lkZSB1c2VFZmZlY3QoLi4uKSwgdXNlTWVtbyguLi4pLCBvciBvdGhlciBidWlsdC1pbiBIb29rcy4gJyArICdZb3UgY2FuIG9ubHkgY2FsbCBIb29rcyBhdCB0aGUgdG9wIGxldmVsIG9mIHlvdXIgUmVhY3QgZnVuY3Rpb24uICcgKyAnRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ydWxlcy1vZi1ob29rcycpO1xuICB9O1xuXG4gIEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgY2hlY2tEZXBzQXJlQXJyYXlEZXYoZGVwcyk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIGNoZWNrRGVwc0FyZUFycmF5RGV2KGRlcHMpO1xuICAgICAgcmV0dXJuIG1vdW50TGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICBjaGVja0RlcHNBcmVBcnJheURldihkZXBzKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudFRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE11dGFibGVTb3VyY2Uoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKTtcbiAgICB9LFxuICAgIHVzZU9wYXF1ZUlkZW50aWZpZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU9wYXF1ZUlkZW50aWZpZXInO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPbk1vdW50V2l0aEhvb2tUeXBlc0luREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50Q2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudEltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50TWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudFJlZHVjZXIocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVmOiBmdW5jdGlvbiAoaW5pdGlhbFZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWYnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25Nb3VudEluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbW91bnRTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRUcmFuc2l0aW9uKCk7XG4gICAgfSxcbiAgICB1c2VNdXRhYmxlU291cmNlOiBmdW5jdGlvbiAoc291cmNlLCBnZXRTbmFwc2hvdCwgc3Vic2NyaWJlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNdXRhYmxlU291cmNlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50TXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVEZWJ1Z1ZhbHVlKCk7XG4gICAgfSxcbiAgICB1c2VEZWZlcnJlZFZhbHVlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlZmVycmVkVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTXV0YWJsZVNvdXJjZShzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpO1xuICAgIH0sXG4gICAgdXNlT3BhcXVlSWRlbnRpZmllcjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlT3BhcXVlSWRlbnRpZmllcic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbiAgSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWID0ge1xuICAgIHJlYWRDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUVmZmVjdDogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRWZmZWN0JztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlTGF5b3V0RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VNZW1vOiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VNZW1vJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVNZW1vKGNyZWF0ZSwgZGVwcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlUmVkdWNlcjogZnVuY3Rpb24gKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZHVjZXInO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uUmVyZW5kZXJJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVSZWYoKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25SZXJlbmRlckluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJTdGF0ZShpbml0aWFsU3RhdGUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZURlYnVnVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSwgZm9ybWF0dGVyRm4pIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZURlYnVnVmFsdWUnO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyRGVmZXJyZWRWYWx1ZSh2YWx1ZSk7XG4gICAgfSxcbiAgICB1c2VUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VUcmFuc2l0aW9uJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyVHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlcmVuZGVyT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRDYWxsYmFjayhjYWxsYmFjaywgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VDb250ZXh0OiBmdW5jdGlvbiAoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDb250ZXh0JztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50RWZmZWN0KGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlOiBmdW5jdGlvbiAocmVmLCBjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUltcGVyYXRpdmVIYW5kbGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50SW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPbk1vdW50SW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtb3VudE1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50UmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWY6IGZ1bmN0aW9uIChpbml0aWFsVmFsdWUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVJlZic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRSZWYoaW5pdGlhbFZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVN0YXRlOiBmdW5jdGlvbiAoaW5pdGlhbFN0YXRlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VTdGF0ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uTW91bnRJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1vdW50U3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudERlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnREZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICBtb3VudEhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIG1vdW50VHJhbnNpdGlvbigpO1xuICAgIH0sXG4gICAgdXNlTXV0YWJsZVNvdXJjZTogZnVuY3Rpb24gKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTXV0YWJsZVNvdXJjZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIG1vdW50SG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gbW91bnRNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgbW91bnRIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiBtb3VudE9wYXF1ZUlkZW50aWZpZXIoKTtcbiAgICB9LFxuICAgIHVuc3RhYmxlX2lzTmV3UmVjb25jaWxlcjogZW5hYmxlTmV3UmVjb25jaWxlclxuICB9O1xuICBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFViA9IHtcbiAgICByZWFkQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgd2FybkludmFsaWRDb250ZXh0QWNjZXNzKCk7XG4gICAgICByZXR1cm4gcmVhZENvbnRleHQoY29udGV4dCwgb2JzZXJ2ZWRCaXRzKTtcbiAgICB9LFxuICAgIHVzZUNhbGxiYWNrOiBmdW5jdGlvbiAoY2FsbGJhY2ssIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNhbGxiYWNrJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlQ29udGV4dDogZnVuY3Rpb24gKGNvbnRleHQsIG9ic2VydmVkQml0cykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlQ29udGV4dCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZTogZnVuY3Rpb24gKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VJbXBlcmF0aXZlSGFuZGxlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG4gICAgfSxcbiAgICB1c2VMYXlvdXRFZmZlY3Q6IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUxheW91dEVmZmVjdCc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTWVtbzogZnVuY3Rpb24gKGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlTWVtbyc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdXBkYXRlTWVtbyhjcmVhdGUsIGRlcHMpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZHVjZXI6IGZ1bmN0aW9uIChyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VSZWR1Y2VyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICB2YXIgcHJldkRpc3BhdGNoZXIgPSBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudDtcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gSW52YWxpZE5lc3RlZEhvb2tzRGlzcGF0Y2hlck9uVXBkYXRlSW5ERVY7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB1cGRhdGVSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZEaXNwYXRjaGVyO1xuICAgICAgfVxuICAgIH0sXG4gICAgdXNlRGVidWdWYWx1ZTogZnVuY3Rpb24gKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVidWdWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlYnVnVmFsdWUoKTtcbiAgICB9LFxuICAgIHVzZURlZmVycmVkVmFsdWU6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlRGVmZXJyZWRWYWx1ZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZURlZmVycmVkVmFsdWUodmFsdWUpO1xuICAgIH0sXG4gICAgdXNlVHJhbnNpdGlvbjogZnVuY3Rpb24gKCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlVHJhbnNpdGlvbic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZVRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlT3BhcXVlSWRlbnRpZmllcigpO1xuICAgIH0sXG4gICAgdW5zdGFibGVfaXNOZXdSZWNvbmNpbGVyOiBlbmFibGVOZXdSZWNvbmNpbGVyXG4gIH07XG4gIEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblJlcmVuZGVySW5ERVYgPSB7XG4gICAgcmVhZENvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIHdhcm5JbnZhbGlkQ29udGV4dEFjY2VzcygpO1xuICAgICAgcmV0dXJuIHJlYWRDb250ZXh0KGNvbnRleHQsIG9ic2VydmVkQml0cyk7XG4gICAgfSxcbiAgICB1c2VDYWxsYmFjazogZnVuY3Rpb24gKGNhbGxiYWNrLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VDYWxsYmFjayc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUNvbnRleHQ6IGZ1bmN0aW9uIChjb250ZXh0LCBvYnNlcnZlZEJpdHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZUNvbnRleHQnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZWFkQ29udGV4dChjb250ZXh0LCBvYnNlcnZlZEJpdHMpO1xuICAgIH0sXG4gICAgdXNlRWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGU6IGZ1bmN0aW9uIChyZWYsIGNyZWF0ZSwgZGVwcykge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlSW1wZXJhdGl2ZUhhbmRsZSc7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgcmV0dXJuIHVwZGF0ZUltcGVyYXRpdmVIYW5kbGUocmVmLCBjcmVhdGUsIGRlcHMpO1xuICAgIH0sXG4gICAgdXNlTGF5b3V0RWZmZWN0OiBmdW5jdGlvbiAoY3JlYXRlLCBkZXBzKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VMYXlvdXRFZmZlY3QnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbiAgICB9LFxuICAgIHVzZU1lbW86IGZ1bmN0aW9uIChjcmVhdGUsIGRlcHMpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU1lbW8nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW8oY3JlYXRlLCBkZXBzKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VSZWR1Y2VyOiBmdW5jdGlvbiAocmVkdWNlciwgaW5pdGlhbEFyZywgaW5pdCkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVkdWNlcic7XG4gICAgICB3YXJuSW52YWxpZEhvb2tBY2Nlc3MoKTtcbiAgICAgIHVwZGF0ZUhvb2tUeXBlc0RldigpO1xuICAgICAgdmFyIHByZXZEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IEludmFsaWROZXN0ZWRIb29rc0Rpc3BhdGNoZXJPblVwZGF0ZUluREVWO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVyZW5kZXJSZWR1Y2VyKHJlZHVjZXIsIGluaXRpYWxBcmcsIGluaXQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbiAgICAgIH1cbiAgICB9LFxuICAgIHVzZVJlZjogZnVuY3Rpb24gKGluaXRpYWxWYWx1ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlUmVmJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlUmVmKCk7XG4gICAgfSxcbiAgICB1c2VTdGF0ZTogZnVuY3Rpb24gKGluaXRpYWxTdGF0ZSkge1xuICAgICAgY3VycmVudEhvb2tOYW1lSW5EZXYgPSAndXNlU3RhdGUnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50O1xuICAgICAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQgPSBJbnZhbGlkTmVzdGVkSG9va3NEaXNwYXRjaGVyT25VcGRhdGVJbkRFVjtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJlcmVuZGVyU3RhdGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gcHJldkRpc3BhdGNoZXI7XG4gICAgICB9XG4gICAgfSxcbiAgICB1c2VEZWJ1Z1ZhbHVlOiBmdW5jdGlvbiAodmFsdWUsIGZvcm1hdHRlckZuKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWJ1Z1ZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gdXBkYXRlRGVidWdWYWx1ZSgpO1xuICAgIH0sXG4gICAgdXNlRGVmZXJyZWRWYWx1ZTogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VEZWZlcnJlZFZhbHVlJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJEZWZlcnJlZFZhbHVlKHZhbHVlKTtcbiAgICB9LFxuICAgIHVzZVRyYW5zaXRpb246IGZ1bmN0aW9uICgpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZVRyYW5zaXRpb24nO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiByZXJlbmRlclRyYW5zaXRpb24oKTtcbiAgICB9LFxuICAgIHVzZU11dGFibGVTb3VyY2U6IGZ1bmN0aW9uIChzb3VyY2UsIGdldFNuYXBzaG90LCBzdWJzY3JpYmUpIHtcbiAgICAgIGN1cnJlbnRIb29rTmFtZUluRGV2ID0gJ3VzZU11dGFibGVTb3VyY2UnO1xuICAgICAgd2FybkludmFsaWRIb29rQWNjZXNzKCk7XG4gICAgICB1cGRhdGVIb29rVHlwZXNEZXYoKTtcbiAgICAgIHJldHVybiB1cGRhdGVNdXRhYmxlU291cmNlKHNvdXJjZSwgZ2V0U25hcHNob3QsIHN1YnNjcmliZSk7XG4gICAgfSxcbiAgICB1c2VPcGFxdWVJZGVudGlmaWVyOiBmdW5jdGlvbiAoKSB7XG4gICAgICBjdXJyZW50SG9va05hbWVJbkRldiA9ICd1c2VPcGFxdWVJZGVudGlmaWVyJztcbiAgICAgIHdhcm5JbnZhbGlkSG9va0FjY2VzcygpO1xuICAgICAgdXBkYXRlSG9va1R5cGVzRGV2KCk7XG4gICAgICByZXR1cm4gcmVyZW5kZXJPcGFxdWVJZGVudGlmaWVyKCk7XG4gICAgfSxcbiAgICB1bnN0YWJsZV9pc05ld1JlY29uY2lsZXI6IGVuYWJsZU5ld1JlY29uY2lsZXJcbiAgfTtcbn1cblxudmFyIG5vdyQxID0gU2NoZWR1bGVyLnVuc3RhYmxlX25vdztcbnZhciBjb21taXRUaW1lID0gMDtcbnZhciBwcm9maWxlclN0YXJ0VGltZSA9IC0xO1xuXG5mdW5jdGlvbiBnZXRDb21taXRUaW1lKCkge1xuICByZXR1cm4gY29tbWl0VGltZTtcbn1cblxuZnVuY3Rpb24gcmVjb3JkQ29tbWl0VGltZSgpIHtcblxuICBjb21taXRUaW1lID0gbm93JDEoKTtcbn1cblxuZnVuY3Rpb24gc3RhcnRQcm9maWxlclRpbWVyKGZpYmVyKSB7XG5cbiAgcHJvZmlsZXJTdGFydFRpbWUgPSBub3ckMSgpO1xuXG4gIGlmIChmaWJlci5hY3R1YWxTdGFydFRpbWUgPCAwKSB7XG4gICAgZmliZXIuYWN0dWFsU3RhcnRUaW1lID0gbm93JDEoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZyhmaWJlcikge1xuXG4gIHByb2ZpbGVyU3RhcnRUaW1lID0gLTE7XG59XG5cbmZ1bmN0aW9uIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoZmliZXIsIG92ZXJyaWRlQmFzZVRpbWUpIHtcblxuICBpZiAocHJvZmlsZXJTdGFydFRpbWUgPj0gMCkge1xuICAgIHZhciBlbGFwc2VkVGltZSA9IG5vdyQxKCkgLSBwcm9maWxlclN0YXJ0VGltZTtcbiAgICBmaWJlci5hY3R1YWxEdXJhdGlvbiArPSBlbGFwc2VkVGltZTtcblxuICAgIGlmIChvdmVycmlkZUJhc2VUaW1lKSB7XG4gICAgICBmaWJlci5zZWxmQmFzZUR1cmF0aW9uID0gZWxhcHNlZFRpbWU7XG4gICAgfVxuXG4gICAgcHJvZmlsZXJTdGFydFRpbWUgPSAtMTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cmFuc2ZlckFjdHVhbER1cmF0aW9uKGZpYmVyKSB7XG4gIC8vIFRyYW5zZmVyIHRpbWUgc3BlbnQgcmVuZGVyaW5nIHRoZXNlIGNoaWxkcmVuIHNvIHdlIGRvbid0IGxvc2UgaXRcbiAgLy8gYWZ0ZXIgd2UgcmVyZW5kZXIuIFRoaXMgaXMgdXNlZCBhcyBhIGhlbHBlciBpbiBzcGVjaWFsIGNhc2VzXG4gIC8vIHdoZXJlIHdlIHNob3VsZCBjb3VudCB0aGUgd29yayBvZiBtdWx0aXBsZSBwYXNzZXMuXG4gIHZhciBjaGlsZCA9IGZpYmVyLmNoaWxkO1xuXG4gIHdoaWxlIChjaGlsZCkge1xuICAgIGZpYmVyLmFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50T3duZXIkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xudmFyIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRCYWRDbGFzcztcbnZhciBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dENvbnRleHRUeXBlT25GdW5jdGlvbkNvbXBvbmVudDtcbnZhciBkaWRXYXJuQWJvdXRHZXREZXJpdmVkU3RhdGVPbkZ1bmN0aW9uQ29tcG9uZW50O1xudmFyIGRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmcztcbnZhciBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzO1xudmFyIGRpZFdhcm5BYm91dFJldmVhbE9yZGVyO1xudmFyIGRpZFdhcm5BYm91dFRhaWxPcHRpb25zO1xuXG57XG4gIGRpZFdhcm5BYm91dEJhZENsYXNzID0ge307XG4gIGRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0Q29udGV4dFR5cGVPbkZ1bmN0aW9uQ29tcG9uZW50ID0ge307XG4gIGRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnQgPSB7fTtcbiAgZGlkV2FybkFib3V0RnVuY3Rpb25SZWZzID0ge307XG4gIGRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMgPSBmYWxzZTtcbiAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXIgPSB7fTtcbiAgZGlkV2FybkFib3V0VGFpbE9wdGlvbnMgPSB7fTtcbn1cblxuZnVuY3Rpb24gcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJZiB0aGlzIGlzIGEgZnJlc2ggbmV3IGNvbXBvbmVudCB0aGF0IGhhc24ndCBiZWVuIHJlbmRlcmVkIHlldCwgd2VcbiAgICAvLyB3b24ndCB1cGRhdGUgaXRzIGNoaWxkIHNldCBieSBhcHBseWluZyBtaW5pbWFsIHNpZGUtZWZmZWN0cy4gSW5zdGVhZCxcbiAgICAvLyB3ZSB3aWxsIGFkZCB0aGVtIGFsbCB0byB0aGUgY2hpbGQgYmVmb3JlIGl0IGdldHMgcmVuZGVyZWQuIFRoYXQgbWVhbnNcbiAgICAvLyB3ZSBjYW4gb3B0aW1pemUgdGhpcyByZWNvbmNpbGlhdGlvbiBwYXNzIGJ5IG5vdCB0cmFja2luZyBzaWRlLWVmZmVjdHMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBtb3VudENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGUgY3VycmVudCBjaGlsZCBpcyB0aGUgc2FtZSBhcyB0aGUgd29yayBpbiBwcm9ncmVzcywgaXQgbWVhbnMgdGhhdFxuICAgIC8vIHdlIGhhdmVuJ3QgeWV0IHN0YXJ0ZWQgYW55IHdvcmsgb24gdGhlc2UgY2hpbGRyZW4uIFRoZXJlZm9yZSwgd2UgdXNlXG4gICAgLy8gdGhlIGNsb25lIGFsZ29yaXRobSB0byBjcmVhdGUgYSBjb3B5IG9mIGFsbCB0aGUgY3VycmVudCBjaGlsZHJlbi5cbiAgICAvLyBJZiB3ZSBoYWQgYW55IHByb2dyZXNzZWQgd29yayBhbHJlYWR5LCB0aGF0IGlzIGludmFsaWQgYXQgdGhpcyBwb2ludCBzb1xuICAgIC8vIGxldCdzIHRocm93IGl0IG91dC5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRoaXMgZnVuY3Rpb24gaXMgZm9yayBvZiByZWNvbmNpbGVDaGlsZHJlbi4gSXQncyB1c2VkIGluIGNhc2VzIHdoZXJlIHdlXG4gIC8vIHdhbnQgdG8gcmVjb25jaWxlIHdpdGhvdXQgbWF0Y2hpbmcgYWdhaW5zdCB0aGUgZXhpc3Rpbmcgc2V0LiBUaGlzIGhhcyB0aGVcbiAgLy8gZWZmZWN0IG9mIGFsbCBjdXJyZW50IGNoaWxkcmVuIGJlaW5nIHVubW91bnRlZDsgZXZlbiBpZiB0aGUgdHlwZSBhbmQga2V5XG4gIC8vIGFyZSB0aGUgc2FtZSwgdGhlIG9sZCBjaGlsZCBpcyB1bm1vdW50ZWQgYW5kIGEgbmV3IGNoaWxkIGlzIGNyZWF0ZWQuXG4gIC8vXG4gIC8vIFRvIGRvIHRoaXMsIHdlJ3JlIGdvaW5nIHRvIGdvIHRocm91Z2ggdGhlIHJlY29uY2lsZSBhbGdvcml0aG0gdHdpY2UuIEluXG4gIC8vIHRoZSBmaXJzdCBwYXNzLCB3ZSBzY2hlZHVsZSBhIGRlbGV0aW9uIGZvciBhbGwgdGhlIGN1cnJlbnQgY2hpbGRyZW4gYnlcbiAgLy8gcGFzc2luZyBudWxsLlxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBjdXJyZW50LmNoaWxkLCBudWxsLCByZW5kZXJMYW5lcyk7IC8vIEluIHRoZSBzZWNvbmQgcGFzcywgd2UgbW91bnQgdGhlIG5ldyBjaGlsZHJlbi4gVGhlIHRyaWNrIGhlcmUgaXMgdGhhdCB3ZVxuICAvLyBwYXNzIG51bGwgaW4gcGxhY2Ugb2Ygd2hlcmUgd2UgdXN1YWxseSBwYXNzIHRoZSBjdXJyZW50IGNoaWxkIHNldC4gVGhpcyBoYXNcbiAgLy8gdGhlIGVmZmVjdCBvZiByZW1vdW50aW5nIGFsbCBjaGlsZHJlbiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlaXJcbiAgLy8gaWRlbnRpdGllcyBtYXRjaC5cblxuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKSB7XG4gIC8vIFRPRE86IGN1cnJlbnQgY2FuIGJlIG5vbi1udWxsIGhlcmUgZXZlbiBpZiB0aGUgY29tcG9uZW50XG4gIC8vIGhhc24ndCB5ZXQgbW91bnRlZC4gVGhpcyBoYXBwZW5zIGFmdGVyIHRoZSBmaXJzdCByZW5kZXIgc3VzcGVuZHMuXG4gIC8vIFdlJ2xsIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIGlzIGZpbmUgb3IgY2FuIGNhdXNlIGlzc3Vlcy5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIHJlbmRlciA9IENvbXBvbmVudC5yZW5kZXI7XG4gIHZhciByZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7IC8vIFRoZSByZXN0IGlzIGEgZm9yayBvZiB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudFxuXG4gIHZhciBuZXh0Q2hpbGRyZW47XG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIFJlYWN0Q3VycmVudE93bmVyJDEuY3VycmVudCA9IHdvcmtJblByb2dyZXNzO1xuICAgIHNldElzUmVuZGVyaW5nKHRydWUpO1xuICAgIG5leHRDaGlsZHJlbiA9IHJlbmRlcldpdGhIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyLCBuZXh0UHJvcHMsIHJlZiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbmV4dENoaWxkcmVuID0gcmVuZGVyV2l0aEhvb2tzKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXIsIG5leHRQcm9wcywgcmVmLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB2YXIgdHlwZSA9IENvbXBvbmVudC50eXBlO1xuXG4gICAgaWYgKGlzU2ltcGxlRnVuY3Rpb25Db21wb25lbnQodHlwZSkgJiYgQ29tcG9uZW50LmNvbXBhcmUgPT09IG51bGwgJiYgLy8gU2ltcGxlTWVtb0NvbXBvbmVudCBjb2RlcGF0aCBkb2Vzbid0IHJlc29sdmUgb3V0ZXIgcHJvcHMgZWl0aGVyLlxuICAgIENvbXBvbmVudC5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlc29sdmVkVHlwZSA9IHR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpO1xuICAgICAgfSAvLyBJZiB0aGlzIGlzIGEgcGxhaW4gZnVuY3Rpb24gY29tcG9uZW50IHdpdGhvdXQgZGVmYXVsdCBwcm9wcyxcbiAgICAgIC8vIGFuZCB3aXRoIG9ubHkgdGhlIGRlZmF1bHQgc2hhbGxvdyBjb21wYXJpc29uLCB3ZSB1cGdyYWRlIGl0XG4gICAgICAvLyB0byBhIFNpbXBsZU1lbW9Db21wb25lbnQgdG8gYWxsb3cgZmFzdCBwYXRoIHVwZGF0ZXMuXG5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MudGFnID0gU2ltcGxlTWVtb0NvbXBvbmVudDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlZFR5cGU7XG5cbiAgICAgIHtcbiAgICAgICAgdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCB0eXBlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlc29sdmVkVHlwZSwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgIH1cblxuICAgIHtcbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuXG4gICAgICBpZiAoaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgICAgLy8gSW5uZXIgbWVtbyBjb21wb25lbnQgcHJvcHMgYXJlbid0IGN1cnJlbnRseSB2YWxpZGF0ZWQgaW4gY3JlYXRlRWxlbWVudC5cbiAgICAgICAgLy8gV2UgY291bGQgbW92ZSBpdCB0aGVyZSwgYnV0IHdlJ2Qgc3RpbGwgbmVlZCB0aGlzIGZvciBsYXp5IGNvZGUgcGF0aC5cbiAgICAgICAgY2hlY2tQcm9wVHlwZXMoaW5uZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgcHJvcHNcbiAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKHR5cGUpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgY2hpbGQgPSBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMoQ29tcG9uZW50LnR5cGUsIG51bGwsIG5leHRQcm9wcywgd29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLm1vZGUsIHJlbmRlckxhbmVzKTtcbiAgICBjaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gICAgY2hpbGQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICB7XG4gICAgdmFyIF90eXBlID0gQ29tcG9uZW50LnR5cGU7XG4gICAgdmFyIF9pbm5lclByb3BUeXBlcyA9IF90eXBlLnByb3BUeXBlcztcblxuICAgIGlmIChfaW5uZXJQcm9wVHlwZXMpIHtcbiAgICAgIC8vIElubmVyIG1lbW8gY29tcG9uZW50IHByb3BzIGFyZW4ndCBjdXJyZW50bHkgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnQuXG4gICAgICAvLyBXZSBjb3VsZCBtb3ZlIGl0IHRoZXJlLCBidXQgd2UnZCBzdGlsbCBuZWVkIHRoaXMgZm9yIGxhenkgY29kZSBwYXRoLlxuICAgICAgY2hlY2tQcm9wVHlwZXMoX2lubmVyUHJvcFR5cGVzLCBuZXh0UHJvcHMsIC8vIFJlc29sdmVkIHByb3BzXG4gICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudENoaWxkID0gY3VycmVudC5jaGlsZDsgLy8gVGhpcyBpcyBhbHdheXMgZXhhY3RseSBvbmUgY2hpbGRcblxuICBpZiAoIWluY2x1ZGVzU29tZUxhbmUodXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKSkge1xuICAgIC8vIFRoaXMgd2lsbCBiZSB0aGUgcHJvcHMgd2l0aCByZXNvbHZlZCBkZWZhdWx0UHJvcHMsXG4gICAgLy8gdW5saWtlIGN1cnJlbnQubWVtb2l6ZWRQcm9wcyB3aGljaCB3aWxsIGJlIHRoZSB1bnJlc29sdmVkIG9uZXMuXG4gICAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnRDaGlsZC5tZW1vaXplZFByb3BzOyAvLyBEZWZhdWx0IHRvIHNoYWxsb3cgY29tcGFyaXNvblxuXG4gICAgdmFyIGNvbXBhcmUgPSBDb21wb25lbnQuY29tcGFyZTtcbiAgICBjb21wYXJlID0gY29tcGFyZSAhPT0gbnVsbCA/IGNvbXBhcmUgOiBzaGFsbG93RXF1YWw7XG5cbiAgICBpZiAoY29tcGFyZShwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgdmFyIG5ld0NoaWxkID0gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudENoaWxkLCBuZXh0UHJvcHMpO1xuICBuZXdDaGlsZC5yZWYgPSB3b3JrSW5Qcm9ncmVzcy5yZWY7XG4gIG5ld0NoaWxkLnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG5ld0NoaWxkO1xuICByZXR1cm4gbmV3Q2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVNpbXBsZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogY3VycmVudCBjYW4gYmUgbm9uLW51bGwgaGVyZSBldmVuIGlmIHRoZSBjb21wb25lbnRcbiAgLy8gaGFzbid0IHlldCBtb3VudGVkLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgaW5uZXIgcmVuZGVyIHN1c3BlbmRzLlxuICAvLyBXZSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBpcyBmaW5lIG9yIGNhbiBjYXVzZSBpc3N1ZXMuXG4gIHtcbiAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgIC8vIExhenkgY29tcG9uZW50IHByb3BzIGNhbid0IGJlIHZhbGlkYXRlZCBpbiBjcmVhdGVFbGVtZW50XG4gICAgICAvLyBiZWNhdXNlIHRoZXkncmUgb25seSBndWFyYW50ZWVkIHRvIGJlIHJlc29sdmVkIGhlcmUuXG4gICAgICB2YXIgb3V0ZXJNZW1vVHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuXG4gICAgICBpZiAob3V0ZXJNZW1vVHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgIC8vIFdlIHdhcm4gd2hlbiB5b3UgZGVmaW5lIHByb3BUeXBlcyBvbiBsYXp5KClcbiAgICAgICAgLy8gc28gbGV0J3MganVzdCBza2lwIG92ZXIgaXQgdG8gZmluZCBtZW1vKCkgb3V0ZXIgd3JhcHBlci5cbiAgICAgICAgLy8gSW5uZXIgcHJvcHMgZm9yIG1lbW8gYXJlIHZhbGlkYXRlZCBsYXRlci5cbiAgICAgICAgdmFyIGxhenlDb21wb25lbnQgPSBvdXRlck1lbW9UeXBlO1xuICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIG91dGVyTWVtb1R5cGUgPSBpbml0KHBheWxvYWQpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgb3V0ZXJNZW1vVHlwZSA9IG51bGw7XG4gICAgICAgIH0gLy8gSW5uZXIgcHJvcFR5cGVzIHdpbGwgYmUgdmFsaWRhdGVkIGluIHRoZSBmdW5jdGlvbiBjb21wb25lbnQgcGF0aC5cblxuXG4gICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IG91dGVyTWVtb1R5cGUgJiYgb3V0ZXJNZW1vVHlwZS5wcm9wVHlwZXM7XG5cbiAgICAgICAgaWYgKG91dGVyUHJvcFR5cGVzKSB7XG4gICAgICAgICAgY2hlY2tQcm9wVHlwZXMob3V0ZXJQcm9wVHlwZXMsIG5leHRQcm9wcywgLy8gUmVzb2x2ZWQgKFNpbXBsZU1lbW9Db21wb25lbnQgaGFzIG5vIGRlZmF1bHRQcm9wcylcbiAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUob3V0ZXJNZW1vVHlwZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgcHJldlByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKHNoYWxsb3dFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykgJiYgY3VycmVudC5yZWYgPT09IHdvcmtJblByb2dyZXNzLnJlZiAmJiAoIC8vIFByZXZlbnQgYmFpbG91dCBpZiB0aGUgaW1wbGVtZW50YXRpb24gY2hhbmdlZCBkdWUgdG8gaG90IHJlbG9hZC5cbiAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9PT0gY3VycmVudC50eXBlICkpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcblxuICAgICAgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgICAgLy8gVGhlIHBlbmRpbmcgbGFuZXMgd2VyZSBjbGVhcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgYmVnaW5Xb3JrLiBXZSdyZVxuICAgICAgICAvLyBhYm91dCB0byBiYWlsIG91dCwgYnV0IHRoZXJlIG1pZ2h0IGJlIG90aGVyIGxhbmVzIHRoYXQgd2VyZW4ndFxuICAgICAgICAvLyBpbmNsdWRlZCBpbiB0aGUgY3VycmVudCByZW5kZXIuIFVzdWFsbHksIHRoZSBwcmlvcml0eSBsZXZlbCBvZiB0aGVcbiAgICAgICAgLy8gcmVtYWluaW5nIHVwZGF0ZXMgaXMgYWNjdW1sYXRlZCBkdXJpbmcgdGhlIGV2YWx1YXRpb24gb2YgdGhlXG4gICAgICAgIC8vIGNvbXBvbmVudCAoaS5lLiB3aGVuIHByb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZSkuIEJ1dCBzaW5jZSBzaW5jZVxuICAgICAgICAvLyB3ZSdyZSBiYWlsaW5nIG91dCBlYXJseSAqd2l0aG91dCogZXZhbHVhdGluZyB0aGUgY29tcG9uZW50LCB3ZSBuZWVkXG4gICAgICAgIC8vIHRvIGFjY291bnQgZm9yIGl0IGhlcmUsIHRvby4gUmVzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBjdXJyZW50IGZpYmVyLlxuICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgYXBwbGllcyB0byBTaW1wbGVNZW1vQ29tcG9uZW50LCBub3QgTWVtb0NvbXBvbmVudCxcbiAgICAgICAgLy8gYmVjYXVzZSBhIE1lbW9Db21wb25lbnQgZmliZXIgZG9lcyBub3QgaGF2ZSBob29rcyBvciBhbiB1cGRhdGUgcXVldWU7XG4gICAgICAgIC8vIHJhdGhlciwgaXQgd3JhcHMgYXJvdW5kIGFuIGlubmVyIGNvbXBvbmVudCwgd2hpY2ggbWF5IG9yIG1heSBub3RcbiAgICAgICAgLy8gY29udGFpbnMgaG9va3MuXG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIHJlc2V0IGF0IGluIGJlZ2luV29yayBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIHNvIHRoYXRcbiAgICAgICAgLy8gdGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5LlxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IGN1cnJlbnQubGFuZXM7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKChjdXJyZW50LmZsYWdzICYgRm9yY2VVcGRhdGVGb3JMZWdhY3lTdXNwZW5zZSkgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgLy8gVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0aGF0IG9ubHkgZXhpc3RzIGZvciBsZWdhY3kgbW9kZS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzE5MjE2LlxuICAgICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdXBkYXRlRnVuY3Rpb25Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkU3RhdGUgOiBudWxsO1xuXG4gIGlmIChuZXh0UHJvcHMubW9kZSA9PT0gJ2hpZGRlbicgfHwgbmV4dFByb3BzLm1vZGUgPT09ICd1bnN0YWJsZS1kZWZlci13aXRob3V0LWhpZGluZycpIHtcbiAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBDb25jdXJyZW50TW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gSW4gbGVnYWN5IHN5bmMgbW9kZSwgZG9uJ3QgZGVmZXIgdGhlIHN1YnRyZWUuIFJlbmRlciBpdCBub3cuXG4gICAgICAvLyBUT0RPOiBGaWd1cmUgb3V0IHdoYXQgd2Ugc2hvdWxkIGRvIGluIEJsb2NraW5nIG1vZGUuXG4gICAgICB2YXIgbmV4dFN0YXRlID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbmV4dFN0YXRlO1xuICAgICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkpIHtcbiAgICAgIHZhciBuZXh0QmFzZUxhbmVzO1xuXG4gICAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBwcmV2QmFzZUxhbmVzID0gcHJldlN0YXRlLmJhc2VMYW5lcztcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IG1lcmdlTGFuZXMocHJldkJhc2VMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dEJhc2VMYW5lcyA9IHJlbmRlckxhbmVzO1xuICAgICAgfSAvLyBTY2hlZHVsZSB0aGlzIGZpYmVyIHRvIHJlLXJlbmRlciBhdCBvZmZzY3JlZW4gcHJpb3JpdHkuIFRoZW4gYmFpbG91dC5cblxuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhPZmZzY3JlZW5MYW5lKTtcbiAgICAgIH1cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzID0gbGFuZVRvTGFuZXMoT2Zmc2NyZWVuTGFuZSk7XG4gICAgICB2YXIgX25leHRTdGF0ZSA9IHtcbiAgICAgICAgYmFzZUxhbmVzOiBuZXh0QmFzZUxhbmVzXG4gICAgICB9O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IF9uZXh0U3RhdGU7IC8vIFdlJ3JlIGFib3V0IHRvIGJhaWwgb3V0LCBidXQgd2UgbmVlZCB0byBwdXNoIHRoaXMgdG8gdGhlIHN0YWNrIGFueXdheVxuICAgICAgLy8gdG8gYXZvaWQgYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG5cbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgbmV4dEJhc2VMYW5lcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVuZGVyaW5nIGF0IG9mZnNjcmVlbiwgc28gd2UgY2FuIGNsZWFyIHRoZSBiYXNlIGxhbmVzLlxuICAgICAgdmFyIF9uZXh0U3RhdGUyID0ge1xuICAgICAgICBiYXNlTGFuZXM6IE5vTGFuZXNcbiAgICAgIH07XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gX25leHRTdGF0ZTI7IC8vIFB1c2ggdGhlIGxhbmVzIHRoYXQgd2VyZSBza2lwcGVkIHdoZW4gd2UgYmFpbGVkIG91dC5cblxuICAgICAgdmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IHByZXZTdGF0ZSAhPT0gbnVsbCA/IHByZXZTdGF0ZS5iYXNlTGFuZXMgOiByZW5kZXJMYW5lcztcbiAgICAgIHB1c2hSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIF9zdWJ0cmVlUmVuZGVyTGFuZXM7XG5cbiAgICBpZiAocHJldlN0YXRlICE9PSBudWxsKSB7XG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gbWVyZ2VMYW5lcyhwcmV2U3RhdGUuYmFzZUxhbmVzLCByZW5kZXJMYW5lcyk7IC8vIFNpbmNlIHdlJ3JlIG5vdCBoaWRkZW4gYW55bW9yZSwgcmVzZXQgdGhlIHN0YXRlXG5cbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBXZSB3ZXJlbid0IHByZXZpb3VzbHkgaGlkZGVuLCBhbmQgd2Ugc3RpbGwgYXJlbid0LCBzbyB0aGVyZSdzIG5vdGhpbmdcbiAgICAgIC8vIHNwZWNpYWwgdG8gZG8uIE5lZWQgdG8gcHVzaCB0byB0aGUgc3RhY2sgcmVnYXJkbGVzcywgdGhvdWdoLCB0byBhdm9pZFxuICAgICAgLy8gYSBwdXNoL3BvcCBtaXNhbGlnbm1lbnQuXG4gICAgICBfc3VidHJlZVJlbmRlckxhbmVzID0gcmVuZGVyTGFuZXM7XG4gICAgfVxuXG4gICAgcHVzaFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzLCBfc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufSAvLyBOb3RlOiBUaGVzZSBoYXBwZW4gdG8gaGF2ZSBpZGVudGljYWwgYmVnaW4gcGhhc2VzLCBmb3Igbm93LiBXZSBzaG91bGRuJ3QgaG9sZFxuLy8gb3Vyc2VsdmVzIHRvIHRoaXMgY29uc3RyYWludCwgdGhvdWdoLiBJZiB0aGUgYmVoYXZpb3IgZGl2ZXJnZXMsIHdlIHNob3VsZFxuLy8gZm9yayB0aGUgZnVuY3Rpb24uXG5cblxudmFyIHVwZGF0ZUxlZ2FjeUhpZGRlbkNvbXBvbmVudCA9IHVwZGF0ZU9mZnNjcmVlbkNvbXBvbmVudDtcblxuZnVuY3Rpb24gdXBkYXRlRnJhZ21lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0Q2hpbGRyZW4gPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHJlY29uY2lsZUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVNb2RlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUHJvZmlsZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHtcbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAvLyBUaGVzZSBhcmUgcmVzZXQgZHVyaW5nIHJlbmRlciB0byBhbGxvdyB0aGUgRGV2VG9vbHMgY29tbWl0IGhvb2sgYSBjaGFuY2UgdG8gcmVhZCB0aGVtLFxuXG4gICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICBzdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb24gPSAwO1xuICAgIHN0YXRlTm9kZS5wYXNzaXZlRWZmZWN0RHVyYXRpb24gPSAwO1xuICB9XG5cbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIG5leHRDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJlZiA9IHdvcmtJblByb2dyZXNzLnJlZjtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiByZWYgIT09IG51bGwgfHwgY3VycmVudCAhPT0gbnVsbCAmJiBjdXJyZW50LnJlZiAhPT0gcmVmKSB7XG4gICAgLy8gU2NoZWR1bGUgYSBSZWYgZWZmZWN0XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUmVmO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gICAgY29udGV4dCA9IGdldE1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHVubWFza2VkQ29udGV4dCk7XG4gIH1cblxuICB2YXIgbmV4dENoaWxkcmVuO1xuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gIHtcbiAgICBSZWFjdEN1cnJlbnRPd25lciQxLmN1cnJlbnQgPSB3b3JrSW5Qcm9ncmVzcztcbiAgICBzZXRJc1JlbmRlcmluZyh0cnVlKTtcbiAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICB0cnkge1xuICAgICAgICBuZXh0Q2hpbGRyZW4gPSByZW5kZXJXaXRoSG9va3MoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICByZWVuYWJsZUxvZ3MoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH1cblxuICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiAhZGlkUmVjZWl2ZVVwZGF0ZSkge1xuICAgIGJhaWxvdXRIb29rcyhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcbiAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy50eXBlICE9PSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSkge1xuICAgICAgLy8gTGF6eSBjb21wb25lbnQgcHJvcHMgY2FuJ3QgYmUgdmFsaWRhdGVkIGluIGNyZWF0ZUVsZW1lbnRcbiAgICAgIC8vIGJlY2F1c2UgdGhleSdyZSBvbmx5IGd1YXJhbnRlZWQgdG8gYmUgcmVzb2x2ZWQgaGVyZS5cbiAgICAgIHZhciBpbm5lclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgIGlmIChpbm5lclByb3BUeXBlcykge1xuICAgICAgICBjaGVja1Byb3BUeXBlcyhpbm5lclByb3BUeXBlcywgbmV4dFByb3BzLCAvLyBSZXNvbHZlZCBwcm9wc1xuICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoQ29tcG9uZW50KSk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIFB1c2ggY29udGV4dCBwcm92aWRlcnMgZWFybHkgdG8gcHJldmVudCBjb250ZXh0IHN0YWNrIG1pc21hdGNoZXMuXG4gIC8vIER1cmluZyBtb3VudGluZyB3ZSBkb24ndCBrbm93IHRoZSBjaGlsZCBjb250ZXh0IHlldCBhcyB0aGUgaW5zdGFuY2UgZG9lc24ndCBleGlzdC5cbiAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG5cbiAgdmFyIGhhc0NvbnRleHQ7XG5cbiAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICBwdXNoQ29udGV4dFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgfSBlbHNlIHtcbiAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlVG9SZWFkQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gIHZhciBzaG91bGRVcGRhdGU7XG5cbiAgaWYgKGluc3RhbmNlID09PSBudWxsKSB7XG4gICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgIC8vIEEgY2xhc3MgY29tcG9uZW50IHdpdGhvdXQgYW4gaW5zdGFuY2Ugb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkXG4gICAgICAvLyBpbnNpZGUgYSBub24tY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG9cbiAgICAgIC8vIHRyZWF0IGl0IGxpa2UgYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeVxuICAgICAgLy8gY29tbWl0dGVkLiBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgICBjdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgICB9IC8vIEluIHRoZSBpbml0aWFsIHBhc3Mgd2UgbWlnaHQgbmVlZCB0byBjb25zdHJ1Y3QgdGhlIGluc3RhbmNlLlxuXG5cbiAgICBjb25zdHJ1Y3RDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcyk7XG4gICAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgIHNob3VsZFVwZGF0ZSA9IHRydWU7XG4gIH0gZWxzZSBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIEluIGEgcmVzdW1lLCB3ZSdsbCBhbHJlYWR5IGhhdmUgYW4gaW5zdGFuY2Ugd2UgY2FuIHJldXNlLlxuICAgIHNob3VsZFVwZGF0ZSA9IHJlc3VtZU1vdW50Q2xhc3NJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBuZXh0UHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICBzaG91bGRVcGRhdGUgPSB1cGRhdGVDbGFzc0luc3RhbmNlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICB9XG5cbiAgdmFyIG5leHRVbml0T2ZXb3JrID0gZmluaXNoQ2xhc3NDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgc2hvdWxkVXBkYXRlLCBoYXNDb250ZXh0LCByZW5kZXJMYW5lcyk7XG5cbiAge1xuICAgIHZhciBpbnN0ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZSAmJiBpbnN0LnByb3BzICE9PSBuZXh0UHJvcHMpIHtcbiAgICAgIGlmICghZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICBlcnJvcignSXQgbG9va3MgbGlrZSAlcyBpcyByZWFzc2lnbmluZyBpdHMgb3duIGB0aGlzLnByb3BzYCB3aGlsZSByZW5kZXJpbmcuICcgKyAnVGhpcyBpcyBub3Qgc3VwcG9ydGVkIGFuZCBjYW4gbGVhZCB0byBjb25mdXNpbmcgYnVncy4nLCBnZXRDb21wb25lbnROYW1lKHdvcmtJblByb2dyZXNzLnR5cGUpIHx8ICdhIGNvbXBvbmVudCcpO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV4dFVuaXRPZldvcms7XG59XG5cbmZ1bmN0aW9uIGZpbmlzaENsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHNob3VsZFVwZGF0ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gUmVmcyBzaG91bGQgdXBkYXRlIGV2ZW4gaWYgc2hvdWxkQ29tcG9uZW50VXBkYXRlIHJldHVybnMgZmFsc2VcbiAgbWFya1JlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcyk7XG4gIHZhciBkaWRDYXB0dXJlRXJyb3IgPSAod29ya0luUHJvZ3Jlc3MuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICBpZiAoIXNob3VsZFVwZGF0ZSAmJiAhZGlkQ2FwdHVyZUVycm9yKSB7XG4gICAgLy8gQ29udGV4dCBwcm92aWRlcnMgc2hvdWxkIGRlZmVyIHRvIHNDVSBmb3IgcmVuZGVyaW5nXG4gICAgaWYgKGhhc0NvbnRleHQpIHtcbiAgICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7IC8vIFJlcmVuZGVyXG5cbiAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gIHZhciBuZXh0Q2hpbGRyZW47XG5cbiAgaWYgKGRpZENhcHR1cmVFcnJvciAmJiB0eXBlb2YgQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIHdlIGNhcHR1cmVkIGFuIGVycm9yLCBidXQgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yIGlzIG5vdCBkZWZpbmVkLFxuICAgIC8vIHVubW91bnQgYWxsIHRoZSBjaGlsZHJlbi4gY29tcG9uZW50RGlkQ2F0Y2ggd2lsbCBzY2hlZHVsZSBhbiB1cGRhdGUgdG9cbiAgICAvLyByZS1yZW5kZXIgYSBmYWxsYmFjay4gVGhpcyBpcyB0ZW1wb3JhcnkgdW50aWwgd2UgbWlncmF0ZSBldmVyeW9uZSB0b1xuICAgIC8vIHRoZSBuZXcgQVBJLlxuICAgIC8vIFRPRE86IFdhcm4gaW4gYSBmdXR1cmUgcmVsZWFzZS5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuXG4gICAge1xuICAgICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgICBuZXh0Q2hpbGRyZW4gPSBpbnN0YW5jZS5yZW5kZXIoKTtcblxuICAgICAgaWYgKCB3b3JrSW5Qcm9ncmVzcy5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgICBkaXNhYmxlTG9ncygpO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVuZGVyKCk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0SXNSZW5kZXJpbmcoZmFsc2UpO1xuICAgIH1cbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsICYmIGRpZENhcHR1cmVFcnJvcikge1xuICAgIC8vIElmIHdlJ3JlIHJlY292ZXJpbmcgZnJvbSBhbiBlcnJvciwgcmVjb25jaWxlIHdpdGhvdXQgcmV1c2luZyBhbnkgb2ZcbiAgICAvLyB0aGUgZXhpc3RpbmcgY2hpbGRyZW4uIENvbmNlcHR1YWxseSwgdGhlIG5vcm1hbCBjaGlsZHJlbiBhbmQgdGhlIGNoaWxkcmVuXG4gICAgLy8gdGhhdCBhcmUgc2hvd24gb24gZXJyb3IgYXJlIHR3byBkaWZmZXJlbnQgc2V0cywgc28gd2Ugc2hvdWxkbid0IHJldXNlXG4gICAgLy8gbm9ybWFsIGNoaWxkcmVuIGV2ZW4gaWYgdGhlaXIgaWRlbnRpdGllcyBtYXRjaC5cbiAgICBmb3JjZVVubW91bnRDdXJyZW50QW5kUmVjb25jaWxlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH0gLy8gTWVtb2l6ZSBzdGF0ZSB1c2luZyB0aGUgdmFsdWVzIHdlIGp1c3QgdXNlZCB0byByZW5kZXIuXG4gIC8vIFRPRE86IFJlc3RydWN0dXJlIHNvIHdlIG5ldmVyIHJlYWQgdmFsdWVzIGZyb20gdGhlIGluc3RhbmNlLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IGluc3RhbmNlLnN0YXRlOyAvLyBUaGUgY29udGV4dCBtaWdodCBoYXZlIGNoYW5nZWQgc28gd2UgbmVlZCB0byByZWNhbGN1bGF0ZSBpdC5cblxuICBpZiAoaGFzQ29udGV4dCkge1xuICAgIGludmFsaWRhdGVDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbmZ1bmN0aW9uIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpIHtcbiAgdmFyIHJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgaWYgKHJvb3QucGVuZGluZ0NvbnRleHQpIHtcbiAgICBwdXNoVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzLCByb290LnBlbmRpbmdDb250ZXh0LCByb290LnBlbmRpbmdDb250ZXh0ICE9PSByb290LmNvbnRleHQpO1xuICB9IGVsc2UgaWYgKHJvb3QuY29udGV4dCkge1xuICAgIC8vIFNob3VsZCBhbHdheXMgYmUgc2V0XG4gICAgcHVzaFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250ZXh0LCBmYWxzZSk7XG4gIH1cblxuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgcm9vdC5jb250YWluZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHB1c2hIb3N0Um9vdENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICB2YXIgdXBkYXRlUXVldWUgPSB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZTtcblxuICBpZiAoIShjdXJyZW50ICE9PSBudWxsICYmIHVwZGF0ZVF1ZXVlICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIklmIHRoZSByb290IGRvZXMgbm90IGhhdmUgYW4gdXBkYXRlUXVldWUsIHdlIHNob3VsZCBoYXZlIGFscmVhZHkgYmFpbGVkIG91dC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBwcmV2U3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuICB2YXIgcHJldkNoaWxkcmVuID0gcHJldlN0YXRlICE9PSBudWxsID8gcHJldlN0YXRlLmVsZW1lbnQgOiBudWxsO1xuICBjbG9uZVVwZGF0ZVF1ZXVlKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcbiAgcHJvY2Vzc1VwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzLCBuZXh0UHJvcHMsIG51bGwsIHJlbmRlckxhbmVzKTtcbiAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7IC8vIENhdXRpb246IFJlYWN0IERldlRvb2xzIGN1cnJlbnRseSBkZXBlbmRzIG9uIHRoaXMgcHJvcGVydHlcbiAgLy8gYmVpbmcgY2FsbGVkIFwiZWxlbWVudFwiLlxuXG4gIHZhciBuZXh0Q2hpbGRyZW4gPSBuZXh0U3RhdGUuZWxlbWVudDtcblxuICBpZiAobmV4dENoaWxkcmVuID09PSBwcmV2Q2hpbGRyZW4pIHtcbiAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgcmV0dXJuIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHZhciByb290ID0gd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlO1xuXG4gIGlmIChyb290Lmh5ZHJhdGUgJiYgZW50ZXJIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcykpIHtcbiAgICAvLyBJZiB3ZSBkb24ndCBoYXZlIGFueSBjdXJyZW50IGNoaWxkcmVuIHRoaXMgbWlnaHQgYmUgdGhlIGZpcnN0IHBhc3MuXG4gICAgLy8gV2UgYWx3YXlzIHRyeSB0byBoeWRyYXRlLiBJZiB0aGlzIGlzbid0IGEgaHlkcmF0aW9uIHBhc3MgdGhlcmUgd29uJ3RcbiAgICAvLyBiZSBhbnkgY2hpbGRyZW4gdG8gaHlkcmF0ZSB3aGljaCBpcyBlZmZlY3RpdmVseSB0aGUgc2FtZSB0aGluZyBhc1xuICAgIC8vIG5vdCBoeWRyYXRpbmcuXG4gICAge1xuICAgICAgdmFyIG11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGEgPSByb290Lm11dGFibGVTb3VyY2VFYWdlckh5ZHJhdGlvbkRhdGE7XG5cbiAgICAgIGlmIChtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhICE9IG51bGwpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgICAgdmFyIG11dGFibGVTb3VyY2UgPSBtdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhW2ldO1xuICAgICAgICAgIHZhciB2ZXJzaW9uID0gbXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YVtpICsgMV07XG4gICAgICAgICAgc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9uKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNoaWxkID0gbW91bnRDaGlsZEZpYmVycyh3b3JrSW5Qcm9ncmVzcywgbnVsbCwgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjaGlsZDtcbiAgICB2YXIgbm9kZSA9IGNoaWxkO1xuXG4gICAgd2hpbGUgKG5vZGUpIHtcbiAgICAgIC8vIE1hcmsgZWFjaCBjaGlsZCBhcyBoeWRyYXRpbmcuIFRoaXMgaXMgYSBmYXN0IHBhdGggdG8ga25vdyB3aGV0aGVyIHRoaXNcbiAgICAgIC8vIHRyZWUgaXMgcGFydCBvZiBhIGh5ZHJhdGluZyB0cmVlLiBUaGlzIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIGEgY2hpbGRcbiAgICAgIC8vIG5vZGUgaGFzIGZ1bGx5IG1vdW50ZWQgeWV0LCBhbmQgZm9yIHNjaGVkdWxpbmcgZXZlbnQgcmVwbGF5aW5nLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5IHRoaXMgaXMgc2ltaWxhciB0byBQbGFjZW1lbnQgaW4gdGhhdCBhIG5ldyBzdWJ0cmVlIGlzXG4gICAgICAvLyBpbnNlcnRlZCBpbnRvIHRoZSBSZWFjdCB0cmVlIGhlcmUuIEl0IGp1c3QgaGFwcGVucyB0byBub3QgbmVlZCBET01cbiAgICAgIC8vIG11dGF0aW9ucyBiZWNhdXNlIGl0IGFscmVhZHkgZXhpc3RzLlxuICAgICAgbm9kZS5mbGFncyA9IG5vZGUuZmxhZ3MgJiB+UGxhY2VtZW50IHwgSHlkcmF0aW5nO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlIHJlc2V0IGh5ZHJhdGlvbiBzdGF0ZSBpbiBjYXNlIHdlIGFib3J0ZWQgYW5kIHJlc3VtZWQgYW5vdGhlclxuICAgIC8vIHJvb3QuXG4gICAgcmVjb25jaWxlQ2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG5leHRDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIHJlc2V0SHlkcmF0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgcHVzaEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIHRyeVRvQ2xhaW1OZXh0SHlkcmF0YWJsZUluc3RhbmNlKHdvcmtJblByb2dyZXNzKTtcbiAgfVxuXG4gIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgdmFyIG5leHRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIHByZXZQcm9wcyA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBudWxsO1xuICB2YXIgbmV4dENoaWxkcmVuID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuICB2YXIgaXNEaXJlY3RUZXh0Q2hpbGQgPSBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBuZXh0UHJvcHMpO1xuXG4gIGlmIChpc0RpcmVjdFRleHRDaGlsZCkge1xuICAgIC8vIFdlIHNwZWNpYWwgY2FzZSBhIGRpcmVjdCB0ZXh0IGNoaWxkIG9mIGEgaG9zdCBub2RlLiBUaGlzIGlzIGEgY29tbW9uXG4gICAgLy8gY2FzZS4gV2Ugd29uJ3QgaGFuZGxlIGl0IGFzIGEgcmVpZmllZCBjaGlsZC4gV2Ugd2lsbCBpbnN0ZWFkIGhhbmRsZVxuICAgIC8vIHRoaXMgaW4gdGhlIGhvc3QgZW52aXJvbm1lbnQgdGhhdCBhbHNvIGhhcyBhY2Nlc3MgdG8gdGhpcyBwcm9wLiBUaGF0XG4gICAgLy8gYXZvaWRzIGFsbG9jYXRpbmcgYW5vdGhlciBIb3N0VGV4dCBmaWJlciBhbmQgdHJhdmVyc2luZyBpdC5cbiAgICBuZXh0Q2hpbGRyZW4gPSBudWxsO1xuICB9IGVsc2UgaWYgKHByZXZQcm9wcyAhPT0gbnVsbCAmJiBzaG91bGRTZXRUZXh0Q29udGVudCh0eXBlLCBwcmV2UHJvcHMpKSB7XG4gICAgLy8gSWYgd2UncmUgc3dpdGNoaW5nIGZyb20gYSBkaXJlY3QgdGV4dCBjaGlsZCB0byBhIG5vcm1hbCBjaGlsZCwgb3IgdG9cbiAgICAvLyBlbXB0eSwgd2UgbmVlZCB0byBzY2hlZHVsZSB0aGUgdGV4dCBjb250ZW50IHRvIGJlIHJlc2V0LlxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IENvbnRlbnRSZXNldDtcbiAgfVxuXG4gIG1hcmtSZWYoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlSG9zdFRleHQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpIHtcbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICB0cnlUb0NsYWltTmV4dEh5ZHJhdGFibGVJbnN0YW5jZSh3b3JrSW5Qcm9ncmVzcyk7XG4gIH0gLy8gTm90aGluZyB0byBkbyBoZXJlLiBUaGlzIGlzIHRlcm1pbmFsLiBXZSdsbCBkbyB0aGUgY29tcGxldGlvbiBzdGVwXG4gIC8vIGltbWVkaWF0ZWx5IGFmdGVyLlxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIG1vdW50TGF6eUNvbXBvbmVudChfY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIGVsZW1lbnRUeXBlLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQSBsYXp5IGNvbXBvbmVudCBvbmx5IG1vdW50cyBpZiBpdCBzdXNwZW5kZWQgaW5zaWRlIGEgbm9uLVxuICAgIC8vIGNvbmN1cnJlbnQgdHJlZSwgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBXZSB3YW50IHRvIHRyZWF0IGl0IGxpa2VcbiAgICAvLyBhIG5ldyBtb3VudCwgZXZlbiB0aG91Z2ggYW4gZW1wdHkgdmVyc2lvbiBvZiBpdCBhbHJlYWR5IGNvbW1pdHRlZC5cbiAgICAvLyBEaXNjb25uZWN0IHRoZSBhbHRlcm5hdGUgcG9pbnRlcnMuXG4gICAgX2N1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBTaW5jZSB0aGlzIGlzIGNvbmNlcHR1YWxseSBhIG5ldyBmaWJlciwgc2NoZWR1bGUgYSBQbGFjZW1lbnQgZWZmZWN0XG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQbGFjZW1lbnQ7XG4gIH1cblxuICB2YXIgcHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciBsYXp5Q29tcG9uZW50ID0gZWxlbWVudFR5cGU7XG4gIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcbiAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuICB2YXIgQ29tcG9uZW50ID0gaW5pdChwYXlsb2FkKTsgLy8gU3RvcmUgdGhlIHVud3JhcHBlZCBjb21wb25lbnQgaW4gdGhlIHR5cGUuXG5cbiAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudDtcbiAgdmFyIHJlc29sdmVkVGFnID0gd29ya0luUHJvZ3Jlc3MudGFnID0gcmVzb2x2ZUxhenlDb21wb25lbnRUYWcoQ29tcG9uZW50KTtcbiAgdmFyIHJlc29sdmVkUHJvcHMgPSByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudCwgcHJvcHMpO1xuICB2YXIgY2hpbGQ7XG5cbiAgc3dpdGNoIChyZXNvbHZlZFRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZGF0ZUZ1bmN0aW9uQ29tcG9uZW50SW5EZXYod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGdW5jdGlvbkZvckhvdFJlbG9hZGluZyhDb21wb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2hpbGQgPSB1cGRhdGVGdW5jdGlvbkNvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cblxuICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy50eXBlID0gQ29tcG9uZW50ID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUNsYXNzQ29tcG9uZW50KG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuXG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IENvbXBvbmVudCA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKENvbXBvbmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjaGlsZCA9IHVwZGF0ZUZvcndhcmRSZWYobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcmVzb2x2ZWRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG5cbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IENvbXBvbmVudC5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgcmVzb2x2ZWRQcm9wcywgLy8gUmVzb2x2ZWQgZm9yIG91dGVyIG9ubHlcbiAgICAgICAgICAgICAgJ3Byb3AnLCBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNoaWxkID0gdXBkYXRlTWVtb0NvbXBvbmVudChudWxsLCB3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCByZXNvbHZlRGVmYXVsdFByb3BzKENvbXBvbmVudC50eXBlLCByZXNvbHZlZFByb3BzKSwgLy8gVGhlIGlubmVyIHR5cGUgY2FuIGhhdmUgZGVmYXVsdHMgdG9vXG4gICAgICAgIHVwZGF0ZUxhbmVzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgfVxuXG4gIHZhciBoaW50ID0gJyc7XG5cbiAge1xuICAgIGlmIChDb21wb25lbnQgIT09IG51bGwgJiYgdHlwZW9mIENvbXBvbmVudCA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGhpbnQgPSAnIERpZCB5b3Ugd3JhcCBhIGNvbXBvbmVudCBpbiBSZWFjdC5sYXp5KCkgbW9yZSB0aGFuIG9uY2U/JztcbiAgICB9XG4gIH0gLy8gVGhpcyBtZXNzYWdlIGludGVudGlvbmFsbHkgZG9lc24ndCBtZW50aW9uIEZvcndhcmRSZWYgb3IgTWVtb0NvbXBvbmVudFxuICAvLyBiZWNhdXNlIHRoZSBmYWN0IHRoYXQgaXQncyBhIHNlcGFyYXRlIHR5cGUgb2Ygd29yayBpcyBhblxuICAvLyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwuXG5cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiRWxlbWVudCB0eXBlIGlzIGludmFsaWQuIFJlY2VpdmVkIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvOiBcIiArIENvbXBvbmVudCArIFwiLiBMYXp5IGVsZW1lbnQgdHlwZSBtdXN0IHJlc29sdmUgdG8gYSBjbGFzcyBvciBmdW5jdGlvbi5cIiArIGhpbnQgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpIHtcbiAgaWYgKF9jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gQW4gaW5jb21wbGV0ZSBjb21wb25lbnQgb25seSBtb3VudHMgaWYgaXQgc3VzcGVuZGVkIGluc2lkZSBhIG5vbi1cbiAgICAvLyBjb25jdXJyZW50IHRyZWUsIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS4gV2Ugd2FudCB0byB0cmVhdCBpdCBsaWtlXG4gICAgLy8gYSBuZXcgbW91bnQsIGV2ZW4gdGhvdWdoIGFuIGVtcHR5IHZlcnNpb24gb2YgaXQgYWxyZWFkeSBjb21taXR0ZWQuXG4gICAgLy8gRGlzY29ubmVjdCB0aGUgYWx0ZXJuYXRlIHBvaW50ZXJzLlxuICAgIF9jdXJyZW50LmFsdGVybmF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gbnVsbDsgLy8gU2luY2UgdGhpcyBpcyBjb25jZXB0dWFsbHkgYSBuZXcgZmliZXIsIHNjaGVkdWxlIGEgUGxhY2VtZW50IGVmZmVjdFxuXG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9IC8vIFByb21vdGUgdGhlIGZpYmVyIHRvIGEgY2xhc3MgYW5kIHRyeSByZW5kZXJpbmcgYWdhaW4uXG5cblxuICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiBpcyBhIGZvcmsgb2YgYHVwZGF0ZUNsYXNzQ29tcG9uZW50YFxuICAvLyBQdXNoIGNvbnRleHQgcHJvdmlkZXJzIGVhcmx5IHRvIHByZXZlbnQgY29udGV4dCBzdGFjayBtaXNtYXRjaGVzLlxuICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gIC8vIFdlIHdpbGwgaW52YWxpZGF0ZSB0aGUgY2hpbGQgY29udGV4dCBpbiBmaW5pc2hDbGFzc0NvbXBvbmVudCgpIHJpZ2h0IGFmdGVyIHJlbmRlcmluZy5cblxuICB2YXIgaGFzQ29udGV4dDtcblxuICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgIGhhc0NvbnRleHQgPSB0cnVlO1xuICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICB9IGVsc2Uge1xuICAgIGhhc0NvbnRleHQgPSBmYWxzZTtcbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIGNvbnN0cnVjdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgbmV4dFByb3BzKTtcbiAgbW91bnRDbGFzc0luc3RhbmNlKHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIG5leHRQcm9wcywgcmVuZGVyTGFuZXMpO1xuICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBtb3VudEluZGV0ZXJtaW5hdGVDb21wb25lbnQoX2N1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChfY3VycmVudCAhPT0gbnVsbCkge1xuICAgIC8vIEFuIGluZGV0ZXJtaW5hdGUgY29tcG9uZW50IG9ubHkgbW91bnRzIGlmIGl0IHN1c3BlbmRlZCBpbnNpZGUgYSBub24tXG4gICAgLy8gY29uY3VycmVudCB0cmVlLCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUuIFdlIHdhbnQgdG8gdHJlYXQgaXQgbGlrZVxuICAgIC8vIGEgbmV3IG1vdW50LCBldmVuIHRob3VnaCBhbiBlbXB0eSB2ZXJzaW9uIG9mIGl0IGFscmVhZHkgY29tbWl0dGVkLlxuICAgIC8vIERpc2Nvbm5lY3QgdGhlIGFsdGVybmF0ZSBwb2ludGVycy5cbiAgICBfY3VycmVudC5hbHRlcm5hdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZSA9IG51bGw7IC8vIFNpbmNlIHRoaXMgaXMgY29uY2VwdHVhbGx5IGEgbmV3IGZpYmVyLCBzY2hlZHVsZSBhIFBsYWNlbWVudCBlZmZlY3RcblxuICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFBsYWNlbWVudDtcbiAgfVxuXG4gIHZhciBwcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgdmFyIGNvbnRleHQ7XG5cbiAge1xuICAgIHZhciB1bm1hc2tlZENvbnRleHQgPSBnZXRVbm1hc2tlZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgZmFsc2UpO1xuICAgIGNvbnRleHQgPSBnZXRNYXNrZWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCB1bm1hc2tlZENvbnRleHQpO1xuICB9XG5cbiAgcHJlcGFyZVRvUmVhZENvbnRleHQod29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgdmFyIHZhbHVlO1xuXG4gIHtcbiAgICBpZiAoQ29tcG9uZW50LnByb3RvdHlwZSAmJiB0eXBlb2YgQ29tcG9uZW50LnByb3RvdHlwZS5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcihcIlRoZSA8JXMgLz4gY29tcG9uZW50IGFwcGVhcnMgdG8gaGF2ZSBhIHJlbmRlciBtZXRob2QsIGJ1dCBkb2Vzbid0IGV4dGVuZCBSZWFjdC5Db21wb25lbnQuIFwiICsgJ1RoaXMgaXMgbGlrZWx5IHRvIGNhdXNlIGVycm9ycy4gQ2hhbmdlICVzIHRvIGV4dGVuZCBSZWFjdC5Db21wb25lbnQgaW5zdGVhZC4nLCBjb21wb25lbnROYW1lLCBjb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRCYWRDbGFzc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLm1vZGUgJiBTdHJpY3RNb2RlKSB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5yZWNvcmRMZWdhY3lDb250ZXh0V2FybmluZyh3b3JrSW5Qcm9ncmVzcywgbnVsbCk7XG4gICAgfVxuXG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgdmFsdWUgPSByZW5kZXJXaXRoSG9va3MobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIGNvbnRleHQsIHJlbmRlckxhbmVzKTtcbiAgICBzZXRJc1JlbmRlcmluZyhmYWxzZSk7XG4gIH0gLy8gUmVhY3QgRGV2VG9vbHMgcmVhZHMgdGhpcyBmbGFnLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGVyZm9ybWVkV29yaztcblxuICB7XG4gICAgLy8gU3VwcG9ydCBmb3IgbW9kdWxlIGNvbXBvbmVudHMgaXMgZGVwcmVjYXRlZCBhbmQgaXMgcmVtb3ZlZCBiZWhpbmQgYSBmbGFnLlxuICAgIC8vIFdoZXRoZXIgb3Igbm90IGl0IHdvdWxkIGNyYXNoIGxhdGVyLCB3ZSB3YW50IHRvIHNob3cgYSBnb29kIG1lc3NhZ2UgaW4gREVWIGZpcnN0LlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIF9jb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZSwgX2NvbXBvbmVudE5hbWUsIF9jb21wb25lbnROYW1lKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCAvLyBSdW4gdGhlc2UgY2hlY2tzIGluIHByb2R1Y3Rpb24gb25seSBpZiB0aGUgZmxhZyBpcyBvZmYuXG4gIC8vIEV2ZW50dWFsbHkgd2UnbGwgZGVsZXRlIHRoaXMgYnJhbmNoIGFsdG9nZXRoZXIuXG4gICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZS5yZW5kZXIgPT09ICdmdW5jdGlvbicgJiYgdmFsdWUuJCR0eXBlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTIgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dE1vZHVsZVBhdHRlcm5Db21wb25lbnRbX2NvbXBvbmVudE5hbWUyXSkge1xuICAgICAgICBlcnJvcignVGhlIDwlcyAvPiBjb21wb25lbnQgYXBwZWFycyB0byBiZSBhIGZ1bmN0aW9uIGNvbXBvbmVudCB0aGF0IHJldHVybnMgYSBjbGFzcyBpbnN0YW5jZS4gJyArICdDaGFuZ2UgJXMgdG8gYSBjbGFzcyB0aGF0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IGluc3RlYWQuICcgKyBcIklmIHlvdSBjYW4ndCB1c2UgYSBjbGFzcyB0cnkgYXNzaWduaW5nIHRoZSBwcm90b3R5cGUgb24gdGhlIGZ1bmN0aW9uIGFzIGEgd29ya2Fyb3VuZC4gXCIgKyBcImAlcy5wcm90b3R5cGUgPSBSZWFjdC5Db21wb25lbnQucHJvdG90eXBlYC4gRG9uJ3QgdXNlIGFuIGFycm93IGZ1bmN0aW9uIHNpbmNlIGl0IFwiICsgJ2Nhbm5vdCBiZSBjYWxsZWQgd2l0aCBgbmV3YCBieSBSZWFjdC4nLCBfY29tcG9uZW50TmFtZTIsIF9jb21wb25lbnROYW1lMiwgX2NvbXBvbmVudE5hbWUyKTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRNb2R1bGVQYXR0ZXJuQ29tcG9uZW50W19jb21wb25lbnROYW1lMl0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gUHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgYSBjbGFzcyBpbnN0YW5jZVxuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy50YWcgPSBDbGFzc0NvbXBvbmVudDsgLy8gVGhyb3cgb3V0IGFueSBob29rcyB0aGF0IHdlcmUgdXNlZC5cblxuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gbnVsbDsgLy8gUHVzaCBjb250ZXh0IHByb3ZpZGVycyBlYXJseSB0byBwcmV2ZW50IGNvbnRleHQgc3RhY2sgbWlzbWF0Y2hlcy5cbiAgICAvLyBEdXJpbmcgbW91bnRpbmcgd2UgZG9uJ3Qga25vdyB0aGUgY2hpbGQgY29udGV4dCB5ZXQgYXMgdGhlIGluc3RhbmNlIGRvZXNuJ3QgZXhpc3QuXG4gICAgLy8gV2Ugd2lsbCBpbnZhbGlkYXRlIHRoZSBjaGlsZCBjb250ZXh0IGluIGZpbmlzaENsYXNzQ29tcG9uZW50KCkgcmlnaHQgYWZ0ZXIgcmVuZGVyaW5nLlxuXG4gICAgdmFyIGhhc0NvbnRleHQgPSBmYWxzZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICBoYXNDb250ZXh0ID0gdHJ1ZTtcbiAgICAgIHB1c2hDb250ZXh0UHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYXNDb250ZXh0ID0gZmFsc2U7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHZhbHVlLnN0YXRlICE9PSBudWxsICYmIHZhbHVlLnN0YXRlICE9PSB1bmRlZmluZWQgPyB2YWx1ZS5zdGF0ZSA6IG51bGw7XG4gICAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHdvcmtJblByb2dyZXNzKTtcbiAgICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gQ29tcG9uZW50LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcztcblxuICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcHBseURlcml2ZWRTdGF0ZUZyb21Qcm9wcyh3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50LCBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMsIHByb3BzKTtcbiAgICB9XG5cbiAgICBhZG9wdENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHZhbHVlKTtcbiAgICBtb3VudENsYXNzSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgcHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICByZXR1cm4gZmluaXNoQ2xhc3NDb21wb25lbnQobnVsbCwgd29ya0luUHJvZ3Jlc3MsIENvbXBvbmVudCwgdHJ1ZSwgaGFzQ29udGV4dCwgcmVuZGVyTGFuZXMpO1xuICB9IGVsc2Uge1xuICAgIC8vIFByb2NlZWQgdW5kZXIgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGEgZnVuY3Rpb24gY29tcG9uZW50XG4gICAgd29ya0luUHJvZ3Jlc3MudGFnID0gRnVuY3Rpb25Db21wb25lbnQ7XG5cbiAgICB7XG5cbiAgICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgZGlzYWJsZUxvZ3MoKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIHZhbHVlID0gcmVuZGVyV2l0aEhvb2tzKG51bGwsIHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQsIHByb3BzLCBjb250ZXh0LCByZW5kZXJMYW5lcyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgcmVlbmFibGVMb2dzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZWNvbmNpbGVDaGlsZHJlbihudWxsLCB3b3JrSW5Qcm9ncmVzcywgdmFsdWUsIHJlbmRlckxhbmVzKTtcblxuICAgIHtcbiAgICAgIHZhbGlkYXRlRnVuY3Rpb25Db21wb25lbnRJbkRldih3b3JrSW5Qcm9ncmVzcywgQ29tcG9uZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVGdW5jdGlvbkNvbXBvbmVudEluRGV2KHdvcmtJblByb2dyZXNzLCBDb21wb25lbnQpIHtcbiAge1xuICAgIGlmIChDb21wb25lbnQpIHtcbiAgICAgIGlmIChDb21wb25lbnQuY2hpbGRDb250ZXh0VHlwZXMpIHtcbiAgICAgICAgZXJyb3IoJyVzKC4uLik6IGNoaWxkQ29udGV4dFR5cGVzIGNhbm5vdCBiZSBkZWZpbmVkIG9uIGEgZnVuY3Rpb24gY29tcG9uZW50LicsIENvbXBvbmVudC5kaXNwbGF5TmFtZSB8fCBDb21wb25lbnQubmFtZSB8fCAnQ29tcG9uZW50Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzLnJlZiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGluZm8gPSAnJztcbiAgICAgIHZhciBvd25lck5hbWUgPSBnZXRDdXJyZW50RmliZXJPd25lck5hbWVJbkRldk9yTnVsbCgpO1xuXG4gICAgICBpZiAob3duZXJOYW1lKSB7XG4gICAgICAgIGluZm8gKz0gJ1xcblxcbkNoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mIGAnICsgb3duZXJOYW1lICsgJ2AuJztcbiAgICAgIH1cblxuICAgICAgdmFyIHdhcm5pbmdLZXkgPSBvd25lck5hbWUgfHwgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSUQgfHwgJyc7XG4gICAgICB2YXIgZGVidWdTb3VyY2UgPSB3b3JrSW5Qcm9ncmVzcy5fZGVidWdTb3VyY2U7XG5cbiAgICAgIGlmIChkZWJ1Z1NvdXJjZSkge1xuICAgICAgICB3YXJuaW5nS2V5ID0gZGVidWdTb3VyY2UuZmlsZU5hbWUgKyAnOicgKyBkZWJ1Z1NvdXJjZS5saW5lTnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZ1bmN0aW9uUmVmc1t3YXJuaW5nS2V5XSkge1xuICAgICAgICBkaWRXYXJuQWJvdXRGdW5jdGlvblJlZnNbd2FybmluZ0tleV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdGdW5jdGlvbiBjb21wb25lbnRzIGNhbm5vdCBiZSBnaXZlbiByZWZzLiAnICsgJ0F0dGVtcHRzIHRvIGFjY2VzcyB0aGlzIHJlZiB3aWxsIGZhaWwuICcgKyAnRGlkIHlvdSBtZWFuIHRvIHVzZSBSZWFjdC5mb3J3YXJkUmVmKCk/JXMnLCBpbmZvKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfY29tcG9uZW50TmFtZTMgPSBnZXRDb21wb25lbnROYW1lKENvbXBvbmVudCkgfHwgJ1Vua25vd24nO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEdldERlcml2ZWRTdGF0ZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWUzXSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLicsIF9jb21wb25lbnROYW1lMyk7XG5cbiAgICAgICAgZGlkV2FybkFib3V0R2V0RGVyaXZlZFN0YXRlT25GdW5jdGlvbkNvbXBvbmVudFtfY29tcG9uZW50TmFtZTNdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIENvbXBvbmVudC5jb250ZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgQ29tcG9uZW50LmNvbnRleHRUeXBlICE9PSBudWxsKSB7XG4gICAgICB2YXIgX2NvbXBvbmVudE5hbWU0ID0gZ2V0Q29tcG9uZW50TmFtZShDb21wb25lbnQpIHx8ICdVbmtub3duJztcblxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSkge1xuICAgICAgICBlcnJvcignJXM6IEZ1bmN0aW9uIGNvbXBvbmVudHMgZG8gbm90IHN1cHBvcnQgY29udGV4dFR5cGUuJywgX2NvbXBvbmVudE5hbWU0KTtcblxuICAgICAgICBkaWRXYXJuQWJvdXRDb250ZXh0VHlwZU9uRnVuY3Rpb25Db21wb25lbnRbX2NvbXBvbmVudE5hbWU0XSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnZhciBTVVNQRU5ERURfTUFSS0VSID0ge1xuICBkZWh5ZHJhdGVkOiBudWxsLFxuICByZXRyeUxhbmU6IE5vTGFuZVxufTtcblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKSB7XG4gIHJldHVybiB7XG4gICAgYmFzZUxhbmVzOiByZW5kZXJMYW5lc1xuICB9O1xufVxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHByZXZPZmZzY3JlZW5TdGF0ZSwgcmVuZGVyTGFuZXMpIHtcbiAgcmV0dXJuIHtcbiAgICBiYXNlTGFuZXM6IG1lcmdlTGFuZXMocHJldk9mZnNjcmVlblN0YXRlLmJhc2VMYW5lcywgcmVuZGVyTGFuZXMpXG4gIH07XG59IC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCBpbmxpbmUgdGhpcyBiYWNrXG5cblxuZnVuY3Rpb24gc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBJZiB3ZSdyZSBhbHJlYWR5IHNob3dpbmcgYSBmYWxsYmFjaywgdGhlcmUgYXJlIGNhc2VzIHdoZXJlIHdlIG5lZWQgdG9cbiAgLy8gcmVtYWluIG9uIHRoYXQgZmFsbGJhY2sgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjb250ZW50IGhhcyByZXNvbHZlZC5cbiAgLy8gRm9yIGV4YW1wbGUsIFN1c3BlbnNlTGlzdCBjb29yZGluYXRlcyB3aGVuIG5lc3RlZCBjb250ZW50IGFwcGVhcnMuXG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIHN1c3BlbnNlU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAgICBpZiAoc3VzcGVuc2VTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgLy8gQ3VycmVudGx5IHNob3dpbmcgY29udGVudC4gRG9uJ3QgaGlkZSBpdCwgZXZlbiBpZiBGb3JjZVN1c3BlbnNlRmFsbGFja1xuICAgICAgLy8gaXMgdHJ1ZS4gTW9yZSBwcmVjaXNlIG5hbWUgbWlnaHQgYmUgXCJGb3JjZVJlbWFpblN1c3BlbnNlRmFsbGJhY2tcIi5cbiAgICAgIC8vIE5vdGU6IFRoaXMgaXMgYSBmYWN0b3Jpbmcgc21lbGwuIENhbid0IHJlbWFpbiBvbiBhIGZhbGxiYWNrIGlmIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGZhbGxiYWNrIHRvIHJlbWFpbiBvbi5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gLy8gTm90IGN1cnJlbnRseSBzaG93aW5nIGNvbnRlbnQuIENvbnN1bHQgdGhlIFN1c3BlbnNlIGNvbnRleHQuXG5cblxuICByZXR1cm4gaGFzU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gVE9ETzogU2hvdWxkIG5vdCByZW1vdmUgcmVuZGVyIGxhbmVzIHRoYXQgd2VyZSBwaW5nZWQgZHVyaW5nIHRoaXMgcmVuZGVyXG4gIHJldHVybiByZW1vdmVMYW5lcyhjdXJyZW50LmNoaWxkTGFuZXMsIHJlbmRlckxhbmVzKTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7IC8vIFRoaXMgaXMgdXNlZCBieSBEZXZUb29scyB0byBmb3JjZSBhIGJvdW5kYXJ5IHRvIHN1c3BlbmQuXG5cbiAge1xuICAgIGlmIChzaG91bGRTdXNwZW5kKHdvcmtJblByb2dyZXNzKSkge1xuICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICB9XG4gIH1cblxuICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuICB2YXIgc2hvd0ZhbGxiYWNrID0gZmFsc2U7XG4gIHZhciBkaWRTdXNwZW5kID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgaWYgKGRpZFN1c3BlbmQgfHwgc2hvdWxkUmVtYWluT25GYWxsYmFjayhzdXNwZW5zZUNvbnRleHQsIGN1cnJlbnQpKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoaXMgYm91bmRhcnkncyBzdWJ0cmVlIGFscmVhZHkgc3VzcGVuZGVkLiBTd2l0Y2ggdG9cbiAgICAvLyByZW5kZXJpbmcgdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgIHNob3dGYWxsYmFjayA9IHRydWU7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gfkRpZENhcHR1cmU7XG4gIH0gZWxzZSB7XG4gICAgLy8gQXR0ZW1wdGluZyB0aGUgbWFpbiBjb250ZW50XG4gICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudC5tZW1vaXplZFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgbmV3IG1vdW50IG9yIHRoaXMgYm91bmRhcnkgaXMgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2sgc3RhdGUuXG4gICAgICAvLyBNYXJrIHRoaXMgc3VidHJlZSBjb250ZXh0IGFzIGhhdmluZyBhdCBsZWFzdCBvbmUgaW52aXNpYmxlIHBhcmVudCB0aGF0IGNvdWxkXG4gICAgICAvLyBoYW5kbGUgdGhlIGZhbGxiYWNrIHN0YXRlLlxuICAgICAgLy8gQm91bmRhcmllcyB3aXRob3V0IGZhbGxiYWNrcyBvciBzaG91bGQgYmUgYXZvaWRlZCBhcmUgbm90IGNvbnNpZGVyZWQgc2luY2VcbiAgICAgIC8vIHRoZXkgY2Fubm90IGhhbmRsZSBwcmVmZXJyZWQgZmFsbGJhY2sgc3RhdGVzLlxuICAgICAgaWYgKG5leHRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkICYmIG5leHRQcm9wcy51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFjayAhPT0gdHJ1ZSkge1xuICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBhZGRTdWJ0cmVlU3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgSW52aXNpYmxlUGFyZW50U3VzcGVuc2VDb250ZXh0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdXNwZW5zZUNvbnRleHQgPSBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQpO1xuICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBPSywgdGhlIG5leHQgcGFydCBpcyBjb25mdXNpbmcuIFdlJ3JlIGFib3V0IHRvIHJlY29uY2lsZSB0aGUgU3VzcGVuc2VcbiAgLy8gYm91bmRhcnkncyBjaGlsZHJlbi4gVGhpcyBpbnZvbHZlcyBzb21lIGN1c3RvbSByZWNvbmNpbGF0aW9uIGxvZ2ljLiBUd29cbiAgLy8gbWFpbiByZWFzb25zIHRoaXMgaXMgc28gY29tcGxpY2F0ZWQuXG4gIC8vXG4gIC8vIEZpcnN0LCBMZWdhY3kgTW9kZSBoYXMgZGlmZmVyZW50IHNlbWFudGljcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuIFRoZVxuICAvLyBwcmltYXJ5IHRyZWUgd2lsbCBjb21taXQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLCBzbyB3aGVuIHdlIGRvIHRoZVxuICAvLyBzZWNvbmQgcGFzcyB0byByZW5kZXIgdGhlIGZhbGxiYWNrLCB3ZSBkbyBzb21lIGV4Y2VlZGluZ2x5LCB1aCwgY2xldmVyXG4gIC8vIGhhY2tzIHRvIG1ha2UgdGhhdCBub3QgdG90YWxseSBicmVhay4gTGlrZSB0cmFuc2ZlcnJpbmcgZWZmZWN0cyBhbmRcbiAgLy8gZGVsZXRpb25zIGZyb20gaGlkZGVuIHRyZWUuIEluIENvbmN1cnJlbnQgTW9kZSwgaXQncyBtdWNoIHNpbXBsZXIsXG4gIC8vIGJlY2F1c2Ugd2UgYmFpbG91dCBvbiB0aGUgcHJpbWFyeSB0cmVlIGNvbXBsZXRlbHkgYW5kIGxlYXZlIGl0IGluIGl0cyBvbGRcbiAgLy8gc3RhdGUsIG5vIGVmZmVjdHMuIFNhbWUgYXMgd2hhdCB3ZSBkbyBmb3IgT2Zmc2NyZWVuIChleGNlcHQgdGhhdFxuICAvLyBPZmZzY3JlZW4gZG9lc24ndCBoYXZlIHRoZSBmaXJzdCByZW5kZXIgcGFzcykuXG4gIC8vXG4gIC8vIFNlY29uZCBpcyBoeWRyYXRpb24uIER1cmluZyBoeWRyYXRpb24sIHRoZSBTdXNwZW5zZSBmaWJlciBoYXMgYSBzbGlnaHRseVxuICAvLyBkaWZmZXJlbnQgbGF5b3V0LCB3aGVyZSB0aGUgY2hpbGQgcG9pbnRzIHRvIGEgZGVoeWRyYXRlZCBmcmFnbWVudCwgd2hpY2hcbiAgLy8gY29udGFpbnMgdGhlIERPTSByZW5kZXJlZCBieSB0aGUgc2VydmVyLlxuICAvL1xuICAvLyBUaGlyZCwgZXZlbiBpZiB5b3Ugc2V0IGFsbCB0aGF0IGFzaWRlLCBTdXNwZW5zZSBpcyBsaWtlIGVycm9yIGJvdW5kYXJpZXMgaW5cbiAgLy8gdGhhdCB3ZSBmaXJzdCB3ZSB0cnkgdG8gcmVuZGVyIG9uZSB0cmVlLCBhbmQgaWYgdGhhdCBmYWlscywgd2UgcmVuZGVyIGFnYWluXG4gIC8vIGFuZCBzd2l0Y2ggdG8gYSBkaWZmZXJlbnQgdHJlZS4gTGlrZSBhIHRyeS9jYXRjaCBibG9jay4gU28gd2UgaGF2ZSB0byB0cmFja1xuICAvLyB3aGljaCBicmFuY2ggd2UncmUgY3VycmVudGx5IHJlbmRlcmluZy4gSWRlYWxseSB3ZSB3b3VsZCBtb2RlbCB0aGlzIHVzaW5nXG4gIC8vIGEgc3RhY2suXG5cbiAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAvLyBJbml0aWFsIG1vdW50XG4gICAgLy8gSWYgd2UncmUgY3VycmVudGx5IGh5ZHJhdGluZywgdHJ5IHRvIGh5ZHJhdGUgdGhpcyBib3VuZGFyeS5cbiAgICAvLyBCdXQgb25seSBpZiB0aGlzIGhhcyBhIGZhbGxiYWNrLlxuICAgIGlmIChuZXh0UHJvcHMuZmFsbGJhY2sgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdHJ5VG9DbGFpbU5leHRIeWRyYXRhYmxlSW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpOyAvLyBUaGlzIGNvdWxkJ3ZlIGJlZW4gYSBkZWh5ZHJhdGVkIHN1c3BlbnNlIGNvbXBvbmVudC5cbiAgICB9XG5cbiAgICB2YXIgbmV4dFByaW1hcnlDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgbmV4dEZhbGxiYWNrQ2hpbGRyZW4gPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG5cbiAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICB2YXIgZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5tZW1vaXplZFN0YXRlID0gbW91bnRTdXNwZW5zZU9mZnNjcmVlblN0YXRlKHJlbmRlckxhbmVzKTtcbiAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBTVVNQRU5ERURfTUFSS0VSO1xuICAgICAgcmV0dXJuIGZhbGxiYWNrRnJhZ21lbnQ7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV4dFByb3BzLnVuc3RhYmxlX2V4cGVjdGVkTG9hZFRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgQ1BVLWJvdW5kIHRyZWUuIFNraXAgdGhpcyB0cmVlIGFuZCBzaG93IGEgcGxhY2Vob2xkZXIgdG9cbiAgICAgIC8vIHVuYmxvY2sgdGhlIHN1cnJvdW5kaW5nIGNvbnRlbnQuIFRoZW4gaW1tZWRpYXRlbHkgcmV0cnkgYWZ0ZXIgdGhlXG4gICAgICAvLyBpbml0aWFsIGNvbW1pdC5cbiAgICAgIHZhciBfZmFsbGJhY2tGcmFnbWVudCA9IG1vdW50U3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKHdvcmtJblByb2dyZXNzLCBuZXh0UHJpbWFyeUNoaWxkcmVuLCBuZXh0RmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQubWVtb2l6ZWRTdGF0ZSA9IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcyk7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXMgdG9cbiAgICAgIC8vIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtcyBvZlxuICAgICAgLy8gcHJpb3JpdHkgdGhpcyB3b3JrIGhhcyB0aGUgc2FtZSBwcmlvcml0eSBhcyB0aGlzIGN1cnJlbnQgcmVuZGVyLCBpdCdzXG4gICAgICAvLyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzIGNvbW1pdHRlZC4gSWZcbiAgICAgIC8vIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZSBwYWludGVkLlxuICAgICAgLy8gQ29uY2VwdHVhbGx5LCB0aGlzIGlzIHJlYWxseSB0aGUgc2FtZSBhcyBwaW5naW5nLiBXZSBjYW4gdXNlIGFueVxuICAgICAgLy8gUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmcgc2luY2Ugd2UncmUgbGVhdmluZ1xuICAgICAgLy8gaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBTb21lUmV0cnlMYW5lO1xuXG4gICAgICB7XG4gICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9mYWxsYmFja0ZyYWdtZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgbmV4dFByaW1hcnlDaGlsZHJlbiwgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBUaGlzIGlzIGFuIHVwZGF0ZS5cbiAgICAvLyBJZiB0aGUgY3VycmVudCBmaWJlciBoYXMgYSBTdXNwZW5zZVN0YXRlLCB0aGF0IG1lYW5zIGl0J3MgYWxyZWFkeSBzaG93aW5nXG4gICAgLy8gYSBmYWxsYmFjay5cbiAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfbmV4dEZhbGxiYWNrQ2hpbGRyZW4yID0gbmV4dFByb3BzLmZhbGxiYWNrO1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4yID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjIsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjIsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50MyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgcHJldk9mZnNjcmVlblN0YXRlID0gY3VycmVudC5jaGlsZC5tZW1vaXplZFN0YXRlO1xuICAgICAgICBfcHJpbWFyeUNoaWxkRnJhZ21lbnQzLm1lbW9pemVkU3RhdGUgPSBwcmV2T2Zmc2NyZWVuU3RhdGUgPT09IG51bGwgPyBtb3VudFN1c3BlbnNlT2Zmc2NyZWVuU3RhdGUocmVuZGVyTGFuZXMpIDogdXBkYXRlU3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShwcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50My5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gU1VTUEVOREVEX01BUktFUjtcbiAgICAgICAgcmV0dXJuIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW4zID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ0ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuMywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIGN1cnJlbnQgdHJlZSBpcyBub3QgYWxyZWFkeSBzaG93aW5nIGEgZmFsbGJhY2suXG4gICAgICBpZiAoc2hvd0ZhbGxiYWNrKSB7XG4gICAgICAgIC8vIFRpbWVkIG91dC5cbiAgICAgICAgdmFyIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMgPSBuZXh0UHJvcHMuZmFsbGJhY2s7XG4gICAgICAgIHZhciBfbmV4dFByaW1hcnlDaGlsZHJlbjQgPSBuZXh0UHJvcHMuY2hpbGRyZW47XG5cbiAgICAgICAgdmFyIF9mYWxsYmFja0NoaWxkRnJhZ21lbnQyID0gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfbmV4dFByaW1hcnlDaGlsZHJlbjQsIF9uZXh0RmFsbGJhY2tDaGlsZHJlbjMsIHJlbmRlckxhbmVzKTtcblxuICAgICAgICB2YXIgX3ByaW1hcnlDaGlsZEZyYWdtZW50NSA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICB2YXIgX3ByZXZPZmZzY3JlZW5TdGF0ZSA9IGN1cnJlbnQuY2hpbGQubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5tZW1vaXplZFN0YXRlID0gX3ByZXZPZmZzY3JlZW5TdGF0ZSA9PT0gbnVsbCA/IG1vdW50U3VzcGVuc2VPZmZzY3JlZW5TdGF0ZShyZW5kZXJMYW5lcykgOiB1cGRhdGVTdXNwZW5zZU9mZnNjcmVlblN0YXRlKF9wcmV2T2Zmc2NyZWVuU3RhdGUsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgX3ByaW1hcnlDaGlsZEZyYWdtZW50NS5jaGlsZExhbmVzID0gZ2V0UmVtYWluaW5nV29ya0luUHJpbWFyeVRyZWUoY3VycmVudCwgcmVuZGVyTGFuZXMpOyAvLyBTa2lwIHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBhbmQgY29udGludWUgd29ya2luZyBvbiB0aGVcbiAgICAgICAgLy8gZmFsbGJhY2sgY2hpbGRyZW4uXG5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IFNVU1BFTkRFRF9NQVJLRVI7XG4gICAgICAgIHJldHVybiBfZmFsbGJhY2tDaGlsZEZyYWdtZW50MjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFN0aWxsIGhhdmVuJ3QgdGltZWQgb3V0LiBDb250aW51ZSByZW5kZXJpbmcgdGhlIGNoaWxkcmVuLCBsaWtlIHdlXG4gICAgICAgIC8vIG5vcm1hbGx5IGRvLlxuICAgICAgICB2YXIgX25leHRQcmltYXJ5Q2hpbGRyZW41ID0gbmV4dFByb3BzLmNoaWxkcmVuO1xuXG4gICAgICAgIHZhciBfcHJpbWFyeUNoaWxkRnJhZ21lbnQ2ID0gdXBkYXRlU3VzcGVuc2VQcmltYXJ5Q2hpbGRyZW4oY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF9uZXh0UHJpbWFyeUNoaWxkcmVuNSwgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBudWxsO1xuICAgICAgICByZXR1cm4gX3ByaW1hcnlDaGlsZEZyYWdtZW50NjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZVByaW1hcnlDaGlsZHJlbih3b3JrSW5Qcm9ncmVzcywgcHJpbWFyeUNoaWxkcmVuLCByZW5kZXJMYW5lcykge1xuICB2YXIgbW9kZSA9IHdvcmtJblByb2dyZXNzLm1vZGU7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAndmlzaWJsZScsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21PZmZzY3JlZW4ocHJpbWFyeUNoaWxkUHJvcHMsIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gbW91bnRTdXNwZW5zZUZhbGxiYWNrQ2hpbGRyZW4od29ya0luUHJvZ3Jlc3MsIHByaW1hcnlDaGlsZHJlbiwgZmFsbGJhY2tDaGlsZHJlbiwgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIG1vZGUgPSB3b3JrSW5Qcm9ncmVzcy5tb2RlO1xuICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICB2YXIgcHJpbWFyeUNoaWxkUHJvcHMgPSB7XG4gICAgbW9kZTogJ2hpZGRlbicsXG4gICAgY2hpbGRyZW46IHByaW1hcnlDaGlsZHJlblxuICB9O1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKChtb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlICYmIHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBJbiBsZWdhY3kgbW9kZSwgd2UgY29tbWl0IHRoZSBwcmltYXJ5IHRyZWUgYXMgaWYgaXQgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IHByb2dyZXNzZWRQcmltYXJ5RnJhZ21lbnQ7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucGVuZGluZ1Byb3BzID0gcHJpbWFyeUNoaWxkUHJvcHM7XG5cbiAgICBpZiAoIHdvcmtJblByb2dyZXNzLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIGR1cmF0aW9ucyBmcm9tIHRoZSBmaXJzdCBwYXNzIHNvIHRoZXkgYXJlbid0IGluY2x1ZGVkIGluIHRoZVxuICAgICAgLy8gZmluYWwgYW1vdW50cy4gVGhpcyBzZWVtcyBjb3VudGVyaW50dWl0aXZlLCBzaW5jZSB3ZSdyZSBpbnRlbnRpb25hbGx5XG4gICAgICAvLyBub3QgbWVhc3VyaW5nIHBhcnQgb2YgdGhlIHJlbmRlciBwaGFzZSwgYnV0IHRoaXMgbWFrZXMgaXQgbWF0Y2ggd2hhdCB3ZVxuICAgICAgLy8gZG8gaW4gQ29uY3VycmVudCBNb2RlLlxuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsRHVyYXRpb24gPSAwO1xuICAgICAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuYWN0dWFsU3RhcnRUaW1lID0gLTE7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cblxuICAgIGZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGZhbGxiYWNrQ2hpbGRyZW4sIG1vZGUsIHJlbmRlckxhbmVzLCBudWxsKTtcbiAgfSBlbHNlIHtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwcmltYXJ5Q2hpbGRQcm9wcywgbW9kZSwgTm9MYW5lcywgbnVsbCk7XG4gICAgZmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQoZmFsbGJhY2tDaGlsZHJlbiwgbW9kZSwgcmVuZGVyTGFuZXMsIG51bGwpO1xuICB9XG5cbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQucmV0dXJuID0gd29ya0luUHJvZ3Jlc3M7XG4gIGZhbGxiYWNrQ2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcykge1xuICAvLyBUaGUgcHJvcHMgYXJndW1lbnQgdG8gYGNyZWF0ZVdvcmtJblByb2dyZXNzYCBpcyBgYW55YCB0eXBlZCwgc28gd2UgdXNlIHRoaXNcbiAgLy8gd3JhcHBlciBmdW5jdGlvbiB0byBjb25zdHJhaW4gaXQuXG4gIHJldHVybiBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50LCBvZmZzY3JlZW5Qcm9wcyk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZVN1c3BlbnNlUHJpbWFyeUNoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjdXJyZW50LmNoaWxkO1xuICB2YXIgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudCA9IGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudC5zaWJsaW5nO1xuICB2YXIgcHJpbWFyeUNoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzc09mZnNjcmVlbkZpYmVyKGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCwge1xuICAgIG1vZGU6ICd2aXNpYmxlJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH0pO1xuXG4gIGlmICgod29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LmxhbmVzID0gcmVuZGVyTGFuZXM7XG4gIH1cblxuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IG51bGw7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICAvLyBEZWxldGUgdGhlIGZhbGxiYWNrIGNoaWxkIGZyYWdtZW50XG4gICAgY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgd29ya0luUHJvZ3Jlc3MuZmlyc3RFZmZlY3QgPSB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0ID0gY3VycmVudEZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkID0gcHJpbWFyeUNoaWxkRnJhZ21lbnQ7XG4gIHJldHVybiBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlU3VzcGVuc2VGYWxsYmFja0NoaWxkcmVuKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBwcmltYXJ5Q2hpbGRyZW4sIGZhbGxiYWNrQ2hpbGRyZW4sIHJlbmRlckxhbmVzKSB7XG4gIHZhciBtb2RlID0gd29ya0luUHJvZ3Jlc3MubW9kZTtcbiAgdmFyIGN1cnJlbnRQcmltYXJ5Q2hpbGRGcmFnbWVudCA9IGN1cnJlbnQuY2hpbGQ7XG4gIHZhciBjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50ID0gY3VycmVudFByaW1hcnlDaGlsZEZyYWdtZW50LnNpYmxpbmc7XG4gIHZhciBwcmltYXJ5Q2hpbGRQcm9wcyA9IHtcbiAgICBtb2RlOiAnaGlkZGVuJyxcbiAgICBjaGlsZHJlbjogcHJpbWFyeUNoaWxkcmVuXG4gIH07XG4gIHZhciBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcblxuICBpZiAoIC8vIEluIGxlZ2FjeSBtb2RlLCB3ZSBjb21taXQgdGhlIHByaW1hcnkgdHJlZSBhcyBpZiBpdCBzdWNjZXNzZnVsbHlcbiAgLy8gY29tcGxldGVkLCBldmVuIHRob3VnaCBpdCdzIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZS5cbiAgKG1vZGUgJiBCbG9ja2luZ01vZGUpID09PSBOb01vZGUgJiYgLy8gTWFrZSBzdXJlIHdlJ3JlIG9uIHRoZSBzZWNvbmQgcGFzcywgaS5lLiB0aGUgcHJpbWFyeSBjaGlsZCBmcmFnbWVudCB3YXNcbiAgLy8gYWxyZWFkeSBjbG9uZWQuIEluIGxlZ2FjeSBtb2RlLCB0aGUgb25seSBjYXNlIHdoZXJlIHRoaXMgaXNuJ3QgdHJ1ZSBpc1xuICAvLyB3aGVuIERldlRvb2xzIGZvcmNlcyB1cyB0byBkaXNwbGF5IGEgZmFsbGJhY2s7IHdlIHNraXAgdGhlIGZpcnN0IHJlbmRlclxuICAvLyBwYXNzIGVudGlyZWx5IGFuZCBnbyBzdHJhaWdodCB0byByZW5kZXJpbmcgdGhlIGZhbGxiYWNrLiAoSW4gQ29uY3VycmVudFxuICAvLyBNb2RlLCBTdXNwZW5zZUxpc3QgY2FuIGFsc28gdHJpZ2dlciB0aGlzIHNjZW5hcmlvLCBidXQgdGhpcyBpcyBhIGxlZ2FjeS1cbiAgLy8gb25seSBjb2RlcGF0aC4pXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkICE9PSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQpIHtcbiAgICB2YXIgcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudCA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gcHJvZ3Jlc3NlZFByaW1hcnlGcmFnbWVudDtcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5wZW5kaW5nUHJvcHMgPSBwcmltYXJ5Q2hpbGRQcm9wcztcblxuICAgIGlmICggd29ya0luUHJvZ3Jlc3MubW9kZSAmIFByb2ZpbGVNb2RlKSB7XG4gICAgICAvLyBSZXNldCB0aGUgZHVyYXRpb25zIGZyb20gdGhlIGZpcnN0IHBhc3Mgc28gdGhleSBhcmVuJ3QgaW5jbHVkZWQgaW4gdGhlXG4gICAgICAvLyBmaW5hbCBhbW91bnRzLiBUaGlzIHNlZW1zIGNvdW50ZXJpbnR1aXRpdmUsIHNpbmNlIHdlJ3JlIGludGVudGlvbmFsbHlcbiAgICAgIC8vIG5vdCBtZWFzdXJpbmcgcGFydCBvZiB0aGUgcmVuZGVyIHBoYXNlLCBidXQgdGhpcyBtYWtlcyBpdCBtYXRjaCB3aGF0IHdlXG4gICAgICAvLyBkbyBpbiBDb25jdXJyZW50IE1vZGUuXG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxEdXJhdGlvbiA9IDA7XG4gICAgICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5hY3R1YWxTdGFydFRpbWUgPSAtMTtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnNlbGZCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICAgIHByaW1hcnlDaGlsZEZyYWdtZW50LnRyZWVCYXNlRHVyYXRpb24gPSBjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9IC8vIFRoZSBmYWxsYmFjayBmaWJlciB3YXMgYWRkZWQgYXMgYSBkZWxldGlvbiBlZmZlY3QgZHVyaW5nIHRoZSBmaXJzdCBwYXNzLlxuICAgIC8vIEhvd2V2ZXIsIHNpbmNlIHdlJ3JlIGdvaW5nIHRvIHJlbWFpbiBvbiB0aGUgZmFsbGJhY2ssIHdlIG5vIGxvbmdlciB3YW50XG4gICAgLy8gdG8gZGVsZXRlIGl0LiBTbyB3ZSBuZWVkIHRvIHJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0LiBEZWxldGlvbnMgYXJlIHN0b3JlZFxuICAgIC8vIG9uIHRoZSBzYW1lIGxpc3QgYXMgZWZmZWN0cy4gV2Ugd2FudCB0byBrZWVwIHRoZSBlZmZlY3RzIGZyb20gdGhlIHByaW1hcnlcbiAgICAvLyB0cmVlLiBTbyB3ZSBjb3B5IHRoZSBwcmltYXJ5IGNoaWxkIGZyYWdtZW50J3MgZWZmZWN0IGxpc3QsIHdoaWNoIGRvZXMgbm90XG4gICAgLy8gaW5jbHVkZSB0aGUgZmFsbGJhY2sgZGVsZXRpb24gZWZmZWN0LlxuXG5cbiAgICB2YXIgcHJvZ3Jlc3NlZExhc3RFZmZlY3QgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudC5sYXN0RWZmZWN0O1xuXG4gICAgaWYgKHByb2dyZXNzZWRMYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmZpcnN0RWZmZWN0O1xuICAgICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IHByb2dyZXNzZWRMYXN0RWZmZWN0O1xuICAgICAgcHJvZ3Jlc3NlZExhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRPRE86IFJlc2V0IHRoaXMgc29tZXdoZXJlIGVsc2U/IExvbCBsZWdhY3kgbW9kZSBpcyBzbyB3ZWlyZC5cbiAgICAgIHdvcmtJblByb2dyZXNzLmZpcnN0RWZmZWN0ID0gd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY3JlYXRlV29ya0luUHJvZ3Jlc3NPZmZzY3JlZW5GaWJlcihjdXJyZW50UHJpbWFyeUNoaWxkRnJhZ21lbnQsIHByaW1hcnlDaGlsZFByb3BzKTtcbiAgfVxuXG4gIHZhciBmYWxsYmFja0NoaWxkRnJhZ21lbnQ7XG5cbiAgaWYgKGN1cnJlbnRGYWxsYmFja0NoaWxkRnJhZ21lbnQgIT09IG51bGwpIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVXb3JrSW5Qcm9ncmVzcyhjdXJyZW50RmFsbGJhY2tDaGlsZEZyYWdtZW50LCBmYWxsYmFja0NoaWxkcmVuKTtcbiAgfSBlbHNlIHtcbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQgPSBjcmVhdGVGaWJlckZyb21GcmFnbWVudChmYWxsYmFja0NoaWxkcmVuLCBtb2RlLCByZW5kZXJMYW5lcywgbnVsbCk7IC8vIE5lZWRzIGEgcGxhY2VtZW50IGVmZmVjdCBiZWNhdXNlIHRoZSBwYXJlbnQgKHRoZSBTdXNwZW5zZSBib3VuZGFyeSkgYWxyZWFkeVxuICAgIC8vIG1vdW50ZWQgYnV0IHRoaXMgaXMgYSBuZXcgZmliZXIuXG5cbiAgICBmYWxsYmFja0NoaWxkRnJhZ21lbnQuZmxhZ3MgfD0gUGxhY2VtZW50O1xuICB9XG5cbiAgZmFsbGJhY2tDaGlsZEZyYWdtZW50LnJldHVybiA9IHdvcmtJblByb2dyZXNzO1xuICBwcmltYXJ5Q2hpbGRGcmFnbWVudC5yZXR1cm4gPSB3b3JrSW5Qcm9ncmVzcztcbiAgcHJpbWFyeUNoaWxkRnJhZ21lbnQuc2libGluZyA9IGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBwcmltYXJ5Q2hpbGRGcmFnbWVudDtcbiAgcmV0dXJuIGZhbGxiYWNrQ2hpbGRGcmFnbWVudDtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVXb3JrT25GaWJlcihmaWJlciwgcmVuZGVyTGFuZXMpIHtcbiAgZmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKGZpYmVyLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBhbHRlcm5hdGUgPSBmaWJlci5hbHRlcm5hdGU7XG5cbiAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgIGFsdGVybmF0ZS5sYW5lcyA9IG1lcmdlTGFuZXMoYWx0ZXJuYXRlLmxhbmVzLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICBzY2hlZHVsZVdvcmtPblBhcmVudFBhdGgoZmliZXIucmV0dXJuLCByZW5kZXJMYW5lcyk7XG59XG5cbmZ1bmN0aW9uIHByb3BhZ2F0ZVN1c3BlbnNlQ29udGV4dENoYW5nZSh3b3JrSW5Qcm9ncmVzcywgZmlyc3RDaGlsZCwgcmVuZGVyTGFuZXMpIHtcbiAgLy8gTWFyayBhbnkgU3VzcGVuc2UgYm91bmRhcmllcyB3aXRoIGZhbGxiYWNrcyBhcyBoYXZpbmcgd29yayB0byBkby5cbiAgLy8gSWYgdGhleSB3ZXJlIHByZXZpb3VzbHkgZm9yY2VkIGludG8gZmFsbGJhY2tzLCB0aGV5IG1heSBub3cgYmUgYWJsZVxuICAvLyB0byB1bmJsb2NrLlxuICB2YXIgbm9kZSA9IGZpcnN0Q2hpbGQ7XG5cbiAgd2hpbGUgKG5vZGUgIT09IG51bGwpIHtcbiAgICBpZiAobm9kZS50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50KSB7XG4gICAgICB2YXIgc3RhdGUgPSBub2RlLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBzY2hlZHVsZVdvcmtPbkZpYmVyKG5vZGUsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBTdXNwZW5zZUxpc3RDb21wb25lbnQpIHtcbiAgICAgIC8vIElmIHRoZSB0YWlsIGlzIGhpZGRlbiB0aGVyZSBtaWdodCBub3QgYmUgYW4gU3VzcGVuc2UgYm91bmRhcmllc1xuICAgICAgLy8gdG8gc2NoZWR1bGUgd29yayBvbi4gSW4gdGhpcyBjYXNlIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgb24gdGhlXG4gICAgICAvLyBsaXN0IGl0c2VsZi5cbiAgICAgIC8vIFdlIGRvbid0IGhhdmUgdG8gdHJhdmVyc2UgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBsaXN0IHNpbmNlXG4gICAgICAvLyB0aGUgbGlzdCB3aWxsIHByb3BhZ2F0ZSB0aGUgY2hhbmdlIHdoZW4gaXQgcmVyZW5kZXJzLlxuICAgICAgc2NoZWR1bGVXb3JrT25GaWJlcihub2RlLCByZW5kZXJMYW5lcyk7XG4gICAgfSBlbHNlIGlmIChub2RlLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gd29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG4gICAgfVxuXG4gICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgIG5vZGUgPSBub2RlLnNpYmxpbmc7XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZExhc3RDb250ZW50Um93KGZpcnN0Q2hpbGQpIHtcbiAgLy8gVGhpcyBpcyBnb2luZyB0byBmaW5kIHRoZSBsYXN0IHJvdyBhbW9uZyB0aGVzZSBjaGlsZHJlbiB0aGF0IGlzIGFscmVhZHlcbiAgLy8gc2hvd2luZyBjb250ZW50IG9uIHRoZSBzY3JlZW4sIGFzIG9wcG9zZWQgdG8gYmVpbmcgaW4gZmFsbGJhY2sgc3RhdGUgb3JcbiAgLy8gbmV3LiBJZiBhIHJvdyBoYXMgbXVsdGlwbGUgU3VzcGVuc2UgYm91bmRhcmllcywgYW55IG9mIHRoZW0gYmVpbmcgaW4gdGhlXG4gIC8vIGZhbGxiYWNrIHN0YXRlLCBjb3VudHMgYXMgdGhlIHdob2xlIHJvdyBiZWluZyBpbiBhIGZhbGxiYWNrIHN0YXRlLlxuICAvLyBOb3RlIHRoYXQgdGhlIFwicm93c1wiIHdpbGwgYmUgd29ya0luUHJvZ3Jlc3MsIGJ1dCBhbnkgbmVzdGVkIGNoaWxkcmVuXG4gIC8vIHdpbGwgc3RpbGwgYmUgY3VycmVudCBzaW5jZSB3ZSBoYXZlbid0IHJlbmRlcmVkIHRoZW0geWV0LiBUaGUgbW91bnRlZFxuICAvLyBvcmRlciBtYXkgbm90IGJlIHRoZSBzYW1lIGFzIHRoZSBuZXcgb3JkZXIuIFdlIHVzZSB0aGUgbmV3IG9yZGVyLlxuICB2YXIgcm93ID0gZmlyc3RDaGlsZDtcbiAgdmFyIGxhc3RDb250ZW50Um93ID0gbnVsbDtcblxuICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgdmFyIGN1cnJlbnRSb3cgPSByb3cuYWx0ZXJuYXRlOyAvLyBOZXcgcm93cyBjYW4ndCBiZSBjb250ZW50IHJvd3MuXG5cbiAgICBpZiAoY3VycmVudFJvdyAhPT0gbnVsbCAmJiBmaW5kRmlyc3RTdXNwZW5kZWQoY3VycmVudFJvdykgPT09IG51bGwpIHtcbiAgICAgIGxhc3RDb250ZW50Um93ID0gcm93O1xuICAgIH1cblxuICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICB9XG5cbiAgcmV0dXJuIGxhc3RDb250ZW50Um93O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVJldmVhbE9yZGVyKHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAocmV2ZWFsT3JkZXIgIT09IHVuZGVmaW5lZCAmJiByZXZlYWxPcmRlciAhPT0gJ2ZvcndhcmRzJyAmJiByZXZlYWxPcmRlciAhPT0gJ2JhY2t3YXJkcycgJiYgcmV2ZWFsT3JkZXIgIT09ICd0b2dldGhlcicgJiYgIWRpZFdhcm5BYm91dFJldmVhbE9yZGVyW3JldmVhbE9yZGVyXSkge1xuICAgICAgZGlkV2FybkFib3V0UmV2ZWFsT3JkZXJbcmV2ZWFsT3JkZXJdID0gdHJ1ZTtcblxuICAgICAgaWYgKHR5cGVvZiByZXZlYWxPcmRlciA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc3dpdGNoIChyZXZlYWxPcmRlci50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICAgIGNhc2UgJ2ZvcndhcmRzJzpcbiAgICAgICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1VzZSBsb3dlcmNhc2UgXCIlc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgY2FzZSAnZm9yd2FyZCc6XG4gICAgICAgICAgY2FzZSAnYmFja3dhcmQnOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBlcnJvcignXCIlc1wiIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZvciByZXZlYWxPcmRlciBvbiA8U3VzcGVuc2VMaXN0IC8+LiAnICsgJ1JlYWN0IHVzZXMgdGhlIC1zIHN1ZmZpeCBpbiB0aGUgc3BlbGxpbmcuIFVzZSBcIiVzc1wiIGluc3RlYWQuJywgcmV2ZWFsT3JkZXIsIHJldmVhbE9yZGVyLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHJldmVhbE9yZGVyIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwidG9nZXRoZXJcIiwgXCJmb3J3YXJkc1wiIG9yIFwiYmFja3dhcmRzXCI/JywgcmV2ZWFsT3JkZXIpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3IoJyVzIGlzIG5vdCBhIHN1cHBvcnRlZCB2YWx1ZSBmb3IgcmV2ZWFsT3JkZXIgb24gPFN1c3BlbnNlTGlzdCAvPi4gJyArICdEaWQgeW91IG1lYW4gXCJ0b2dldGhlclwiLCBcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIj8nLCByZXZlYWxPcmRlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKSB7XG4gIHtcbiAgICBpZiAodGFpbE1vZGUgIT09IHVuZGVmaW5lZCAmJiAhZGlkV2FybkFib3V0VGFpbE9wdGlvbnNbdGFpbE1vZGVdKSB7XG4gICAgICBpZiAodGFpbE1vZGUgIT09ICdjb2xsYXBzZWQnICYmIHRhaWxNb2RlICE9PSAnaGlkZGVuJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdcIiVzXCIgaXMgbm90IGEgc3VwcG9ydGVkIHZhbHVlIGZvciB0YWlsIG9uIDxTdXNwZW5zZUxpc3QgLz4uICcgKyAnRGlkIHlvdSBtZWFuIFwiY29sbGFwc2VkXCIgb3IgXCJoaWRkZW5cIj8nLCB0YWlsTW9kZSk7XG4gICAgICB9IGVsc2UgaWYgKHJldmVhbE9yZGVyICE9PSAnZm9yd2FyZHMnICYmIHJldmVhbE9yZGVyICE9PSAnYmFja3dhcmRzJykge1xuICAgICAgICBkaWRXYXJuQWJvdXRUYWlsT3B0aW9uc1t0YWlsTW9kZV0gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCc8U3VzcGVuc2VMaXN0IHRhaWw9XCIlc1wiIC8+IGlzIG9ubHkgdmFsaWQgaWYgcmV2ZWFsT3JkZXIgaXMgJyArICdcImZvcndhcmRzXCIgb3IgXCJiYWNrd2FyZHNcIi4gJyArICdEaWQgeW91IG1lYW4gdG8gc3BlY2lmeSByZXZlYWxPcmRlcj1cImZvcndhcmRzXCI/JywgdGFpbE1vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdE5lc3RlZENoaWxkKGNoaWxkU2xvdCwgaW5kZXgpIHtcbiAge1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShjaGlsZFNsb3QpO1xuICAgIHZhciBpc0l0ZXJhYmxlID0gIWlzQXJyYXkgJiYgdHlwZW9mIGdldEl0ZXJhdG9yRm4oY2hpbGRTbG90KSA9PT0gJ2Z1bmN0aW9uJztcblxuICAgIGlmIChpc0FycmF5IHx8IGlzSXRlcmFibGUpIHtcbiAgICAgIHZhciB0eXBlID0gaXNBcnJheSA/ICdhcnJheScgOiAnaXRlcmFibGUnO1xuXG4gICAgICBlcnJvcignQSBuZXN0ZWQgJXMgd2FzIHBhc3NlZCB0byByb3cgIyVzIGluIDxTdXNwZW5zZUxpc3QgLz4uIFdyYXAgaXQgaW4gJyArICdhbiBhZGRpdGlvbmFsIFN1c3BlbnNlTGlzdCB0byBjb25maWd1cmUgaXRzIHJldmVhbE9yZGVyOiAnICsgJzxTdXNwZW5zZUxpc3QgcmV2ZWFsT3JkZXI9Li4uPiAuLi4gJyArICc8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPS4uLj57JXN9PC9TdXNwZW5zZUxpc3Q+IC4uLiAnICsgJzwvU3VzcGVuc2VMaXN0PicsIHR5cGUsIGluZGV4LCB0eXBlKTtcblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN1c3BlbnNlTGlzdENoaWxkcmVuKGNoaWxkcmVuLCByZXZlYWxPcmRlcikge1xuICB7XG4gICAgaWYgKChyZXZlYWxPcmRlciA9PT0gJ2ZvcndhcmRzJyB8fCByZXZlYWxPcmRlciA9PT0gJ2JhY2t3YXJkcycpICYmIGNoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgY2hpbGRyZW4gIT09IG51bGwgJiYgY2hpbGRyZW4gIT09IGZhbHNlKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChjaGlsZHJlbltpXSwgaSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNoaWxkcmVuSXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwoY2hpbGRyZW4pO1xuXG4gICAgICAgICAgaWYgKGNoaWxkcmVuSXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHZhciBzdGVwID0gY2hpbGRyZW5JdGVyYXRvci5uZXh0KCk7XG4gICAgICAgICAgICB2YXIgX2kgPSAwO1xuXG4gICAgICAgICAgICBmb3IgKDsgIXN0ZXAuZG9uZTsgc3RlcCA9IGNoaWxkcmVuSXRlcmF0b3IubmV4dCgpKSB7XG4gICAgICAgICAgICAgIGlmICghdmFsaWRhdGVTdXNwZW5zZUxpc3ROZXN0ZWRDaGlsZChzdGVwLnZhbHVlLCBfaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBfaSsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBlcnJvcignQSBzaW5nbGUgcm93IHdhcyBwYXNzZWQgdG8gYSA8U3VzcGVuc2VMaXN0IHJldmVhbE9yZGVyPVwiJXNcIiAvPi4gJyArICdUaGlzIGlzIG5vdCB1c2VmdWwgc2luY2UgaXQgbmVlZHMgbXVsdGlwbGUgcm93cy4gJyArICdEaWQgeW91IG1lYW4gdG8gcGFzcyBtdWx0aXBsZSBjaGlsZHJlbiBvciBhbiBhcnJheT8nLCByZXZlYWxPcmRlcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBpc0JhY2t3YXJkcywgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCBsYXN0RWZmZWN0QmVmb3JlUmVuZGVyaW5nKSB7XG4gIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IHtcbiAgICAgIGlzQmFja3dhcmRzOiBpc0JhY2t3YXJkcyxcbiAgICAgIHJlbmRlcmluZzogbnVsbCxcbiAgICAgIHJlbmRlcmluZ1N0YXJ0VGltZTogMCxcbiAgICAgIGxhc3Q6IGxhc3RDb250ZW50Um93LFxuICAgICAgdGFpbDogdGFpbCxcbiAgICAgIHRhaWxNb2RlOiB0YWlsTW9kZSxcbiAgICAgIGxhc3RFZmZlY3Q6IGxhc3RFZmZlY3RCZWZvcmVSZW5kZXJpbmdcbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGNhbiByZXVzZSB0aGUgZXhpc3Rpbmcgb2JqZWN0IGZyb20gcHJldmlvdXMgcmVuZGVycy5cbiAgICByZW5kZXJTdGF0ZS5pc0JhY2t3YXJkcyA9IGlzQmFja3dhcmRzO1xuICAgIHJlbmRlclN0YXRlLnJlbmRlcmluZyA9IG51bGw7XG4gICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gMDtcbiAgICByZW5kZXJTdGF0ZS5sYXN0ID0gbGFzdENvbnRlbnRSb3c7XG4gICAgcmVuZGVyU3RhdGUudGFpbCA9IHRhaWw7XG4gICAgcmVuZGVyU3RhdGUudGFpbE1vZGUgPSB0YWlsTW9kZTtcbiAgICByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0ID0gbGFzdEVmZmVjdEJlZm9yZVJlbmRlcmluZztcbiAgfVxufSAvLyBUaGlzIGNhbiBlbmQgdXAgcmVuZGVyaW5nIHRoaXMgY29tcG9uZW50IG11bHRpcGxlIHBhc3Nlcy5cbi8vIFRoZSBmaXJzdCBwYXNzIHNwbGl0cyB0aGUgY2hpbGRyZW4gZmliZXJzIGludG8gdHdvIHNldHMuIEEgaGVhZCBhbmQgdGFpbC5cbi8vIFdlIGZpcnN0IHJlbmRlciB0aGUgaGVhZC4gSWYgYW55dGhpbmcgaXMgaW4gZmFsbGJhY2sgc3RhdGUsIHdlIGRvIGFub3RoZXJcbi8vIHBhc3MgdGhyb3VnaCBiZWdpbldvcmsgdG8gcmVyZW5kZXIgYWxsIGNoaWxkcmVuIChpbmNsdWRpbmcgdGhlIHRhaWwpIHdpdGhcbi8vIHRoZSBmb3JjZSBzdXNwZW5kIGNvbnRleHQuIElmIHRoZSBmaXJzdCByZW5kZXIgZGlkbid0IGhhdmUgYW55dGhpbmcgaW5cbi8vIGluIGZhbGxiYWNrIHN0YXRlLiBUaGVuIHdlIHJlbmRlciBlYWNoIHJvdyBpbiB0aGUgdGFpbCBvbmUtYnktb25lLlxuLy8gVGhhdCBoYXBwZW5zIGluIHRoZSBjb21wbGV0ZVdvcmsgcGhhc2Ugd2l0aG91dCBnb2luZyBiYWNrIHRvIGJlZ2luV29yay5cblxuXG5mdW5jdGlvbiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXh0UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZXZlYWxPcmRlciA9IG5leHRQcm9wcy5yZXZlYWxPcmRlcjtcbiAgdmFyIHRhaWxNb2RlID0gbmV4dFByb3BzLnRhaWw7XG4gIHZhciBuZXdDaGlsZHJlbiA9IG5leHRQcm9wcy5jaGlsZHJlbjtcbiAgdmFsaWRhdGVSZXZlYWxPcmRlcihyZXZlYWxPcmRlcik7XG4gIHZhbGlkYXRlVGFpbE9wdGlvbnModGFpbE1vZGUsIHJldmVhbE9yZGVyKTtcbiAgdmFsaWRhdGVTdXNwZW5zZUxpc3RDaGlsZHJlbihuZXdDaGlsZHJlbiwgcmV2ZWFsT3JkZXIpO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgdmFyIHN1c3BlbnNlQ29udGV4dCA9IHN1c3BlbnNlU3RhY2tDdXJzb3IuY3VycmVudDtcbiAgdmFyIHNob3VsZEZvcmNlRmFsbGJhY2sgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0LCBGb3JjZVN1c3BlbnNlRmFsbGJhY2spO1xuXG4gIGlmIChzaG91bGRGb3JjZUZhbGxiYWNrKSB7XG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZUNvbnRleHQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjayk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IGN1cnJlbnQgIT09IG51bGwgJiYgKGN1cnJlbnQuZmxhZ3MgJiBEaWRDYXB0dXJlKSAhPT0gTm9GbGFncztcblxuICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAvLyBJZiB3ZSBwcmV2aW91c2x5IGZvcmNlZCBhIGZhbGxiYWNrLCB3ZSBuZWVkIHRvIHNjaGVkdWxlIHdvcmtcbiAgICAgIC8vIG9uIGFueSBuZXN0ZWQgYm91bmRhcmllcyB0byBsZXQgdGhlbSBrbm93IHRvIHRyeSB0byByZW5kZXJcbiAgICAgIC8vIGFnYWluLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNvbnRleHQgdXBkYXRpbmcuXG4gICAgICBwcm9wYWdhdGVTdXNwZW5zZUNvbnRleHRDaGFuZ2Uod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLmNoaWxkLCByZW5kZXJMYW5lcyk7XG4gICAgfVxuXG4gICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgfVxuXG4gIHB1c2hTdXNwZW5zZUNvbnRleHQod29ya0luUHJvZ3Jlc3MsIHN1c3BlbnNlQ29udGV4dCk7XG5cbiAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgQmxvY2tpbmdNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgLy8gSW4gbGVnYWN5IG1vZGUsIFN1c3BlbnNlTGlzdCBkb2Vzbid0IHdvcmsgc28gd2UganVzdFxuICAgIC8vIHVzZSBtYWtlIGl0IGEgbm9vcCBieSB0cmVhdGluZyBpdCBhcyB0aGUgZGVmYXVsdCByZXZlYWxPcmRlci5cbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICBzd2l0Y2ggKHJldmVhbE9yZGVyKSB7XG4gICAgICBjYXNlICdmb3J3YXJkcyc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGFzdENvbnRlbnRSb3cgPSBmaW5kTGFzdENvbnRlbnRSb3cod29ya0luUHJvZ3Jlc3MuY2hpbGQpO1xuICAgICAgICAgIHZhciB0YWlsO1xuXG4gICAgICAgICAgaWYgKGxhc3RDb250ZW50Um93ID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBUaGUgd2hvbGUgbGlzdCBpcyBwYXJ0IG9mIHRoZSB0YWlsLlxuICAgICAgICAgICAgLy8gVE9ETzogV2UgY291bGQgZmFzdCBwYXRoIGJ5IGp1c3QgcmVuZGVyaW5nIHRoZSB0YWlsIG5vdy5cbiAgICAgICAgICAgIHRhaWwgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRGlzY29ubmVjdCB0aGUgdGFpbCByb3dzIGFmdGVyIHRoZSBjb250ZW50IHJvdy5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIHJlbmRlciB0aGVtIHNlcGFyYXRlbHkgbGF0ZXIuXG4gICAgICAgICAgICB0YWlsID0gbGFzdENvbnRlbnRSb3cuc2libGluZztcbiAgICAgICAgICAgIGxhc3RDb250ZW50Um93LnNpYmxpbmcgPSBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGluaXRTdXNwZW5zZUxpc3RSZW5kZXJTdGF0ZSh3b3JrSW5Qcm9ncmVzcywgZmFsc2UsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgdGFpbCwgbGFzdENvbnRlbnRSb3csIHRhaWxNb2RlLCB3b3JrSW5Qcm9ncmVzcy5sYXN0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdiYWNrd2FyZHMnOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gV2UncmUgZ29pbmcgdG8gZmluZCB0aGUgZmlyc3Qgcm93IHRoYXQgaGFzIGV4aXN0aW5nIGNvbnRlbnQuXG4gICAgICAgICAgLy8gQXQgdGhlIHNhbWUgdGltZSB3ZSdyZSBnb2luZyB0byByZXZlcnNlIHRoZSBsaXN0IG9mIGV2ZXJ5dGhpbmdcbiAgICAgICAgICAvLyB3ZSBwYXNzIGluIHRoZSBtZWFudGltZS4gVGhhdCdzIGdvaW5nIHRvIGJlIG91ciB0YWlsIGluIHJldmVyc2VcbiAgICAgICAgICAvLyBvcmRlci5cbiAgICAgICAgICB2YXIgX3RhaWwgPSBudWxsO1xuICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG5cbiAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgY3VycmVudFJvdyA9IHJvdy5hbHRlcm5hdGU7IC8vIE5ldyByb3dzIGNhbid0IGJlIGNvbnRlbnQgcm93cy5cblxuICAgICAgICAgICAgaWYgKGN1cnJlbnRSb3cgIT09IG51bGwgJiYgZmluZEZpcnN0U3VzcGVuZGVkKGN1cnJlbnRSb3cpID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgbWFpbiBjb250ZW50LlxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJvdztcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuZXh0Um93ID0gcm93LnNpYmxpbmc7XG4gICAgICAgICAgICByb3cuc2libGluZyA9IF90YWlsO1xuICAgICAgICAgICAgX3RhaWwgPSByb3c7XG4gICAgICAgICAgICByb3cgPSBuZXh0Um93O1xuICAgICAgICAgIH0gLy8gVE9ETzogSWYgd29ya0luUHJvZ3Jlc3MuY2hpbGQgaXMgbnVsbCwgd2UgY2FuIGNvbnRpbnVlIG9uIHRoZSB0YWlsIGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgICBpbml0U3VzcGVuc2VMaXN0UmVuZGVyU3RhdGUod29ya0luUHJvZ3Jlc3MsIHRydWUsIC8vIGlzQmFja3dhcmRzXG4gICAgICAgICAgX3RhaWwsIG51bGwsIC8vIGxhc3RcbiAgICAgICAgICB0YWlsTW9kZSwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAndG9nZXRoZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaW5pdFN1c3BlbnNlTGlzdFJlbmRlclN0YXRlKHdvcmtJblByb2dyZXNzLCBmYWxzZSwgLy8gaXNCYWNrd2FyZHNcbiAgICAgICAgICBudWxsLCAvLyB0YWlsXG4gICAgICAgICAgbnVsbCwgLy8gbGFzdFxuICAgICAgICAgIHVuZGVmaW5lZCwgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFRoZSBkZWZhdWx0IHJldmVhbCBvcmRlciBpcyB0aGUgc2FtZSBhcyBub3QgaGF2aW5nXG4gICAgICAgICAgLy8gYSBib3VuZGFyeS5cbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbn1cblxuZnVuY3Rpb24gdXBkYXRlUG9ydGFsQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICBwdXNoSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICB2YXIgbmV4dENoaWxkcmVuID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgLy8gUG9ydGFscyBhcmUgc3BlY2lhbCBiZWNhdXNlIHdlIGRvbid0IGFwcGVuZCB0aGUgY2hpbGRyZW4gZHVyaW5nIG1vdW50XG4gICAgLy8gYnV0IGF0IGNvbW1pdC4gVGhlcmVmb3JlIHdlIG5lZWQgdG8gdHJhY2sgaW5zZXJ0aW9ucyB3aGljaCB0aGUgbm9ybWFsXG4gICAgLy8gZmxvdyBkb2Vzbid0IGRvIGR1cmluZyBtb3VudC4gVGhpcyBkb2Vzbid0IGhhcHBlbiBhdCB0aGUgcm9vdCBiZWNhdXNlXG4gICAgLy8gdGhlIHJvb3QgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgXCJjdXJyZW50XCIgd2l0aCBhIG51bGwgY2hpbGQuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgdW5pZnlpbmcgdGhpcyB3aXRoIGhvdyB0aGUgcm9vdCB3b3Jrcy5cbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IHJlY29uY2lsZUNoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCBudWxsLCBuZXh0Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV4dENoaWxkcmVuLCByZW5kZXJMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG59XG5cbnZhciBoYXNXYXJuZWRBYm91dFVzaW5nTm9WYWx1ZVByb3BPbkNvbnRleHRQcm92aWRlciA9IGZhbHNlO1xuXG5mdW5jdGlvbiB1cGRhdGVDb250ZXh0UHJvdmlkZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBwcm92aWRlclR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICB2YXIgY29udGV4dCA9IHByb3ZpZGVyVHlwZS5fY29udGV4dDtcbiAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuICB2YXIgb2xkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzO1xuICB2YXIgbmV3VmFsdWUgPSBuZXdQcm9wcy52YWx1ZTtcblxuICB7XG4gICAgaWYgKCEoJ3ZhbHVlJyBpbiBuZXdQcm9wcykpIHtcbiAgICAgIGlmICghaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIpIHtcbiAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05vVmFsdWVQcm9wT25Db250ZXh0UHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCdUaGUgYHZhbHVlYCBwcm9wIGlzIHJlcXVpcmVkIGZvciB0aGUgYDxDb250ZXh0LlByb3ZpZGVyPmAuIERpZCB5b3UgbWlzc3BlbGwgaXQgb3IgZm9yZ2V0IHRvIHBhc3MgaXQ/Jyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByb3ZpZGVyUHJvcFR5cGVzID0gd29ya0luUHJvZ3Jlc3MudHlwZS5wcm9wVHlwZXM7XG5cbiAgICBpZiAocHJvdmlkZXJQcm9wVHlwZXMpIHtcbiAgICAgIGNoZWNrUHJvcFR5cGVzKHByb3ZpZGVyUHJvcFR5cGVzLCBuZXdQcm9wcywgJ3Byb3AnLCAnQ29udGV4dC5Qcm92aWRlcicpO1xuICAgIH1cbiAgfVxuXG4gIHB1c2hQcm92aWRlcih3b3JrSW5Qcm9ncmVzcywgbmV3VmFsdWUpO1xuXG4gIGlmIChvbGRQcm9wcyAhPT0gbnVsbCkge1xuICAgIHZhciBvbGRWYWx1ZSA9IG9sZFByb3BzLnZhbHVlO1xuICAgIHZhciBjaGFuZ2VkQml0cyA9IGNhbGN1bGF0ZUNoYW5nZWRCaXRzKGNvbnRleHQsIG5ld1ZhbHVlLCBvbGRWYWx1ZSk7XG5cbiAgICBpZiAoY2hhbmdlZEJpdHMgPT09IDApIHtcbiAgICAgIC8vIE5vIGNoYW5nZS4gQmFpbG91dCBlYXJseSBpZiBjaGlsZHJlbiBhcmUgdGhlIHNhbWUuXG4gICAgICBpZiAob2xkUHJvcHMuY2hpbGRyZW4gPT09IG5ld1Byb3BzLmNoaWxkcmVuICYmICFoYXNDb250ZXh0Q2hhbmdlZCgpKSB7XG4gICAgICAgIHJldHVybiBiYWlsb3V0T25BbHJlYWR5RmluaXNoZWRXb3JrKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoZSBjb250ZXh0IHZhbHVlIGNoYW5nZWQuIFNlYXJjaCBmb3IgbWF0Y2hpbmcgY29uc3VtZXJzIGFuZCBzY2hlZHVsZVxuICAgICAgLy8gdGhlbSB0byB1cGRhdGUuXG4gICAgICBwcm9wYWdhdGVDb250ZXh0Q2hhbmdlKHdvcmtJblByb2dyZXNzLCBjb250ZXh0LCBjaGFuZ2VkQml0cywgcmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBuZXdDaGlsZHJlbiA9IG5ld1Byb3BzLmNoaWxkcmVuO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG52YXIgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnRleHRBc0NvbnN1bWVyID0gZmFsc2U7XG5cbmZ1bmN0aW9uIHVwZGF0ZUNvbnRleHRDb25zdW1lcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIGNvbnRleHQgPSB3b3JrSW5Qcm9ncmVzcy50eXBlOyAvLyBUaGUgbG9naWMgYmVsb3cgZm9yIENvbnRleHQgZGlmZmVycyBkZXBlbmRpbmcgb24gUFJPRCBvciBERVYgbW9kZS4gSW5cbiAgLy8gREVWIG1vZGUsIHdlIGNyZWF0ZSBhIHNlcGFyYXRlIG9iamVjdCBmb3IgQ29udGV4dC5Db25zdW1lciB0aGF0IGFjdHNcbiAgLy8gbGlrZSBhIHByb3h5IHRvIENvbnRleHQuIFRoaXMgcHJveHkgb2JqZWN0IGFkZHMgdW5uZWNlc3NhcnkgY29kZSBpbiBQUk9EXG4gIC8vIHNvIHdlIHVzZSB0aGUgb2xkIGJlaGF2aW91ciAoQ29udGV4dC5Db25zdW1lciByZWZlcmVuY2VzIENvbnRleHQpIHRvXG4gIC8vIHJlZHVjZSBzaXplIGFuZCBvdmVyaGVhZC4gVGhlIHNlcGFyYXRlIG9iamVjdCByZWZlcmVuY2VzIGNvbnRleHQgdmlhXG4gIC8vIGEgcHJvcGVydHkgY2FsbGVkIFwiX2NvbnRleHRcIiwgd2hpY2ggYWxzbyBnaXZlcyB1cyB0aGUgYWJpbGl0eSB0byBjaGVja1xuICAvLyBpbiBERVYgbW9kZSBpZiB0aGlzIHByb3BlcnR5IGV4aXN0cyBvciBub3QgYW5kIHdhcm4gaWYgaXQgZG9lcyBub3QuXG5cbiAge1xuICAgIGlmIChjb250ZXh0Ll9jb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIFRoaXMgbWF5IGJlIGJlY2F1c2UgaXQncyBhIENvbnRleHQgKHJhdGhlciB0aGFuIGEgQ29uc3VtZXIpLlxuICAgICAgLy8gT3IgaXQgbWF5IGJlIGJlY2F1c2UgaXQncyBvbGRlciBSZWFjdCB3aGVyZSB0aGV5J3JlIHRoZSBzYW1lIHRoaW5nLlxuICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHdhcm4gaWYgd2UncmUgc3VyZSBpdCdzIGEgbmV3IFJlYWN0LlxuICAgICAgaWYgKGNvbnRleHQgIT09IGNvbnRleHQuQ29uc3VtZXIpIHtcbiAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIpIHtcbiAgICAgICAgICBoYXNXYXJuZWRBYm91dFVzaW5nQ29udGV4dEFzQ29uc3VtZXIgPSB0cnVlO1xuXG4gICAgICAgICAgZXJyb3IoJ1JlbmRlcmluZyA8Q29udGV4dD4gZGlyZWN0bHkgaXMgbm90IHN1cHBvcnRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluICcgKyAnYSBmdXR1cmUgbWFqb3IgcmVsZWFzZS4gRGlkIHlvdSBtZWFuIHRvIHJlbmRlciA8Q29udGV4dC5Db25zdW1lcj4gaW5zdGVhZD8nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0ID0gY29udGV4dC5fY29udGV4dDtcbiAgICB9XG4gIH1cblxuICB2YXIgbmV3UHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG4gIHZhciByZW5kZXIgPSBuZXdQcm9wcy5jaGlsZHJlbjtcblxuICB7XG4gICAgaWYgKHR5cGVvZiByZW5kZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCdBIGNvbnRleHQgY29uc3VtZXIgd2FzIHJlbmRlcmVkIHdpdGggbXVsdGlwbGUgY2hpbGRyZW4sIG9yIGEgY2hpbGQgJyArIFwidGhhdCBpc24ndCBhIGZ1bmN0aW9uLiBBIGNvbnRleHQgY29uc3VtZXIgZXhwZWN0cyBhIHNpbmdsZSBjaGlsZCBcIiArICd0aGF0IGlzIGEgZnVuY3Rpb24uIElmIHlvdSBkaWQgcGFzcyBhIGZ1bmN0aW9uLCBtYWtlIHN1cmUgdGhlcmUgJyArICdpcyBubyB0cmFpbGluZyBvciBsZWFkaW5nIHdoaXRlc3BhY2UgYXJvdW5kIGl0LicpO1xuICAgIH1cbiAgfVxuXG4gIHByZXBhcmVUb1JlYWRDb250ZXh0KHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gIHZhciBuZXdWYWx1ZSA9IHJlYWRDb250ZXh0KGNvbnRleHQsIG5ld1Byb3BzLnVuc3RhYmxlX29ic2VydmVkQml0cyk7XG4gIHZhciBuZXdDaGlsZHJlbjtcblxuICB7XG4gICAgUmVhY3RDdXJyZW50T3duZXIkMS5jdXJyZW50ID0gd29ya0luUHJvZ3Jlc3M7XG4gICAgc2V0SXNSZW5kZXJpbmcodHJ1ZSk7XG4gICAgbmV3Q2hpbGRyZW4gPSByZW5kZXIobmV3VmFsdWUpO1xuICAgIHNldElzUmVuZGVyaW5nKGZhbHNlKTtcbiAgfSAvLyBSZWFjdCBEZXZUb29scyByZWFkcyB0aGlzIGZsYWcuXG5cblxuICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBQZXJmb3JtZWRXb3JrO1xuICByZWNvbmNpbGVDaGlsZHJlbihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgbmV3Q2hpbGRyZW4sIHJlbmRlckxhbmVzKTtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xufVxuXG5mdW5jdGlvbiBtYXJrV29ya0luUHJvZ3Jlc3NSZWNlaXZlZFVwZGF0ZSgpIHtcbiAgZGlkUmVjZWl2ZVVwZGF0ZSA9IHRydWU7XG59XG5cbmZ1bmN0aW9uIGJhaWxvdXRPbkFscmVhZHlGaW5pc2hlZFdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgLy8gUmV1c2UgcHJldmlvdXMgZGVwZW5kZW5jaWVzXG4gICAgd29ya0luUHJvZ3Jlc3MuZGVwZW5kZW5jaWVzID0gY3VycmVudC5kZXBlbmRlbmNpZXM7XG4gIH1cblxuICB7XG4gICAgLy8gRG9uJ3QgdXBkYXRlIFwiYmFzZVwiIHJlbmRlciB0aW1lcyBmb3IgYmFpbG91dHMuXG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmcoKTtcbiAgfVxuXG4gIG1hcmtTa2lwcGVkVXBkYXRlTGFuZXMod29ya0luUHJvZ3Jlc3MubGFuZXMpOyAvLyBDaGVjayBpZiB0aGUgY2hpbGRyZW4gaGF2ZSBhbnkgcGVuZGluZyB3b3JrLlxuXG4gIGlmICghaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcykpIHtcbiAgICAvLyBUaGUgY2hpbGRyZW4gZG9uJ3QgaGF2ZSBhbnkgd29yayBlaXRoZXIuIFdlIGNhbiBza2lwIHRoZW0uXG4gICAgLy8gVE9ETzogT25jZSB3ZSBhZGQgYmFjayByZXN1bWluZywgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSBjaGlsZHJlbiBhcmVcbiAgICAvLyBhIHdvcmstaW4tcHJvZ3Jlc3Mgc2V0LiBJZiBzbywgd2UgbmVlZCB0byB0cmFuc2ZlciB0aGVpciBlZmZlY3RzLlxuICAgIHJldHVybiBudWxsO1xuICB9IGVsc2Uge1xuICAgIC8vIFRoaXMgZmliZXIgZG9lc24ndCBoYXZlIHdvcmssIGJ1dCBpdHMgc3VidHJlZSBkb2VzLiBDbG9uZSB0aGUgY2hpbGRcbiAgICAvLyBmaWJlcnMgYW5kIGNvbnRpbnVlLlxuICAgIGNsb25lQ2hpbGRGaWJlcnMoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW1vdW50RmliZXIoY3VycmVudCwgb2xkV29ya0luUHJvZ3Jlc3MsIG5ld1dvcmtJblByb2dyZXNzKSB7XG4gIHtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBvbGRXb3JrSW5Qcm9ncmVzcy5yZXR1cm47XG5cbiAgICBpZiAocmV0dXJuRmliZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHN3YXAgdGhlIHJvb3QgZmliZXIuJyk7XG4gICAgfSAvLyBEaXNjb25uZWN0IGZyb20gdGhlIG9sZCBjdXJyZW50LlxuICAgIC8vIEl0IHdpbGwgZ2V0IGRlbGV0ZWQuXG5cblxuICAgIGN1cnJlbnQuYWx0ZXJuYXRlID0gbnVsbDtcbiAgICBvbGRXb3JrSW5Qcm9ncmVzcy5hbHRlcm5hdGUgPSBudWxsOyAvLyBDb25uZWN0IHRvIHRoZSBuZXcgdHJlZS5cblxuICAgIG5ld1dvcmtJblByb2dyZXNzLmluZGV4ID0gb2xkV29ya0luUHJvZ3Jlc3MuaW5kZXg7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3Muc2libGluZyA9IG9sZFdvcmtJblByb2dyZXNzLnNpYmxpbmc7XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MucmV0dXJuID0gb2xkV29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIG5ld1dvcmtJblByb2dyZXNzLnJlZiA9IG9sZFdvcmtJblByb2dyZXNzLnJlZjsgLy8gUmVwbGFjZSB0aGUgY2hpbGQvc2libGluZyBwb2ludGVycyBhYm92ZSBpdC5cblxuICAgIGlmIChvbGRXb3JrSW5Qcm9ncmVzcyA9PT0gcmV0dXJuRmliZXIuY2hpbGQpIHtcbiAgICAgIHJldHVybkZpYmVyLmNoaWxkID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBwcmV2U2libGluZyA9IHJldHVybkZpYmVyLmNoaWxkO1xuXG4gICAgICBpZiAocHJldlNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBwYXJlbnQgdG8gaGF2ZSBhIGNoaWxkLicpO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAocHJldlNpYmxpbmcuc2libGluZyAhPT0gb2xkV29ya0luUHJvZ3Jlc3MpIHtcbiAgICAgICAgcHJldlNpYmxpbmcgPSBwcmV2U2libGluZy5zaWJsaW5nO1xuXG4gICAgICAgIGlmIChwcmV2U2libGluZyA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gZmluZCB0aGUgcHJldmlvdXMgc2libGluZy4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcmV2U2libGluZy5zaWJsaW5nID0gbmV3V29ya0luUHJvZ3Jlc3M7XG4gICAgfSAvLyBEZWxldGUgdGhlIG9sZCBmaWJlciBhbmQgcGxhY2UgdGhlIG5ldyBvbmUuXG4gICAgLy8gU2luY2UgdGhlIG9sZCBmaWJlciBpcyBkaXNjb25uZWN0ZWQsIHdlIGhhdmUgdG8gc2NoZWR1bGUgaXQgbWFudWFsbHkuXG5cblxuICAgIHZhciBsYXN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdDtcblxuICAgIGlmIChsYXN0ICE9PSBudWxsKSB7XG4gICAgICBsYXN0Lm5leHRFZmZlY3QgPSBjdXJyZW50O1xuICAgICAgcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgY3VycmVudC5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICBjdXJyZW50LmZsYWdzID0gRGVsZXRpb247XG4gICAgbmV3V29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gUGxhY2VtZW50OyAvLyBSZXN0YXJ0IHdvcmsgZnJvbSB0aGUgbmV3IGZpYmVyLlxuXG4gICAgcmV0dXJuIG5ld1dvcmtJblByb2dyZXNzO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJlZ2luV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgdmFyIHVwZGF0ZUxhbmVzID0gd29ya0luUHJvZ3Jlc3MubGFuZXM7XG5cbiAge1xuICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5fZGVidWdOZWVkc1JlbW91bnQgJiYgY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgLy8gVGhpcyB3aWxsIHJlc3RhcnQgdGhlIGJlZ2luIHBoYXNlIHdpdGggYSBuZXcgZmliZXIuXG4gICAgICByZXR1cm4gcmVtb3VudEZpYmVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBjcmVhdGVGaWJlckZyb21UeXBlQW5kUHJvcHMod29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3Mua2V5LCB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHMsIHdvcmtJblByb2dyZXNzLl9kZWJ1Z093bmVyIHx8IG51bGwsIHdvcmtJblByb2dyZXNzLm1vZGUsIHdvcmtJblByb2dyZXNzLmxhbmVzKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgdmFyIG5ld1Byb3BzID0gd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzICE9PSBuZXdQcm9wcyB8fCBoYXNDb250ZXh0Q2hhbmdlZCgpIHx8ICggLy8gRm9yY2UgYSByZS1yZW5kZXIgaWYgdGhlIGltcGxlbWVudGF0aW9uIGNoYW5nZWQgZHVlIHRvIGhvdCByZWxvYWQ6XG4gICAgIHdvcmtJblByb2dyZXNzLnR5cGUgIT09IGN1cnJlbnQudHlwZSApKSB7XG4gICAgICAvLyBJZiBwcm9wcyBvciBjb250ZXh0IGNoYW5nZWQsIG1hcmsgdGhlIGZpYmVyIGFzIGhhdmluZyBwZXJmb3JtZWQgd29yay5cbiAgICAgIC8vIFRoaXMgbWF5IGJlIHVuc2V0IGlmIHRoZSBwcm9wcyBhcmUgZGV0ZXJtaW5lZCB0byBiZSBlcXVhbCBsYXRlciAobWVtbykuXG4gICAgICBkaWRSZWNlaXZlVXBkYXRlID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCFpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB1cGRhdGVMYW5lcykpIHtcbiAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTsgLy8gVGhpcyBmaWJlciBkb2VzIG5vdCBoYXZlIGFueSBwZW5kaW5nIHdvcmsuIEJhaWxvdXQgd2l0aG91dCBlbnRlcmluZ1xuICAgICAgLy8gdGhlIGJlZ2luIHBoYXNlLiBUaGVyZSdzIHN0aWxsIHNvbWUgYm9va2tlZXBpbmcgd2UgdGhhdCBuZWVkcyB0byBiZSBkb25lXG4gICAgICAvLyBpbiB0aGlzIG9wdGltaXplZCBwYXRoLCBtb3N0bHkgcHVzaGluZyBzdHVmZiBvbnRvIHRoZSBzdGFjay5cblxuICAgICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAgICBwdXNoSG9zdFJvb3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICByZXNldEh5ZHJhdGlvblN0YXRlKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIHB1c2hIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICAgICAgaWYgKGlzQ29udGV4dFByb3ZpZGVyKENvbXBvbmVudCkpIHtcbiAgICAgICAgICAgICAgcHVzaENvbnRleHRQcm92aWRlcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgcHVzaEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MsIHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIENvbnRleHRQcm92aWRlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbmV3VmFsdWUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnZhbHVlO1xuICAgICAgICAgICAgcHVzaFByb3ZpZGVyKHdvcmtJblByb2dyZXNzLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSBQcm9maWxlcjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBQcm9maWxlciBzaG91bGQgb25seSBjYWxsIG9uUmVuZGVyIHdoZW4gb25lIG9mIGl0cyBkZXNjZW5kYW50cyBhY3R1YWxseSByZW5kZXJlZC5cbiAgICAgICAgICAgIHZhciBoYXNDaGlsZFdvcmsgPSBpbmNsdWRlc1NvbWVMYW5lKHJlbmRlckxhbmVzLCB3b3JrSW5Qcm9ncmVzcy5jaGlsZExhbmVzKTtcblxuICAgICAgICAgICAgaWYgKGhhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBVcGRhdGU7XG4gICAgICAgICAgICB9IC8vIFJlc2V0IGVmZmVjdCBkdXJhdGlvbnMgZm9yIHRoZSBuZXh0IGV2ZW50dWFsIGVmZmVjdCBwaGFzZS5cbiAgICAgICAgICAgIC8vIFRoZXNlIGFyZSByZXNldCBkdXJpbmcgcmVuZGVyIHRvIGFsbG93IHRoZSBEZXZUb29scyBjb21taXQgaG9vayBhIGNoYW5jZSB0byByZWFkIHRoZW0sXG5cblxuICAgICAgICAgICAgdmFyIHN0YXRlTm9kZSA9IHdvcmtJblByb2dyZXNzLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIHN0YXRlTm9kZS5lZmZlY3REdXJhdGlvbiA9IDA7XG4gICAgICAgICAgICBzdGF0ZU5vZGUucGFzc2l2ZUVmZmVjdER1cmF0aW9uID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFN1c3BlbnNlQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBzdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgICAgIGlmIChzdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyB3aGV0aGVyIHRvIHJldHJ5IHRoZSBwcmltYXJ5IGNoaWxkcmVuLCBvciB0byBza2lwIG92ZXIgaXQgYW5kXG4gICAgICAgICAgICAgIC8vIGdvIHN0cmFpZ2h0IHRvIHRoZSBmYWxsYmFjay4gQ2hlY2sgdGhlIHByaW9yaXR5IG9mIHRoZSBwcmltYXJ5XG4gICAgICAgICAgICAgIC8vIGNoaWxkIGZyYWdtZW50LlxuXG5cbiAgICAgICAgICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG4gICAgICAgICAgICAgIHZhciBwcmltYXJ5Q2hpbGRMYW5lcyA9IHByaW1hcnlDaGlsZEZyYWdtZW50LmNoaWxkTGFuZXM7XG5cbiAgICAgICAgICAgICAgaWYgKGluY2x1ZGVzU29tZUxhbmUocmVuZGVyTGFuZXMsIHByaW1hcnlDaGlsZExhbmVzKSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZSBwcmltYXJ5IGNoaWxkcmVuIGhhdmUgcGVuZGluZyB3b3JrLiBVc2UgdGhlIG5vcm1hbCBwYXRoXG4gICAgICAgICAgICAgICAgLy8gdG8gYXR0ZW1wdCB0byByZW5kZXIgdGhlIHByaW1hcnkgY2hpbGRyZW4gYWdhaW4uXG4gICAgICAgICAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gVGhlIHByaW1hcnkgY2hpbGQgZnJhZ21lbnQgZG9lcyBub3QgaGF2ZSBwZW5kaW5nIHdvcmsgbWFya2VkXG4gICAgICAgICAgICAgICAgLy8gb24gaXRcbiAgICAgICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzZXREZWZhdWx0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpKTsgLy8gVGhlIHByaW1hcnkgY2hpbGRyZW4gZG8gbm90IGhhdmUgcGVuZGluZyB3b3JrIHdpdGggc3VmZmljaWVudFxuICAgICAgICAgICAgICAgIC8vIHByaW9yaXR5LiBCYWlsb3V0LlxuXG4gICAgICAgICAgICAgICAgdmFyIGNoaWxkID0gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgZmFsbGJhY2sgY2hpbGRyZW4gaGF2ZSBwZW5kaW5nIHdvcmsuIFNraXAgb3ZlciB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIHByaW1hcnkgY2hpbGRyZW4gYW5kIHdvcmsgb24gdGhlIGZhbGxiYWNrLlxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkLnNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50KSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgZGlkU3VzcGVuZEJlZm9yZSA9IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG5cbiAgICAgICAgICAgIHZhciBfaGFzQ2hpbGRXb3JrID0gaW5jbHVkZXNTb21lTGFuZShyZW5kZXJMYW5lcywgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyk7XG5cbiAgICAgICAgICAgIGlmIChkaWRTdXNwZW5kQmVmb3JlKSB7XG4gICAgICAgICAgICAgIGlmIChfaGFzQ2hpbGRXb3JrKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgc29tZXRoaW5nIHdhcyBpbiBmYWxsYmFjayBzdGF0ZSBsYXN0IHRpbWUsIGFuZCB3ZSBoYXZlIGFsbCB0aGVcbiAgICAgICAgICAgICAgICAvLyBzYW1lIGNoaWxkcmVuIHRoZW4gd2UncmUgc3RpbGwgaW4gcHJvZ3Jlc3NpdmUgbG9hZGluZyBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBTb21ldGhpbmcgbWlnaHQgZ2V0IHVuYmxvY2tlZCBieSBzdGF0ZSB1cGRhdGVzIG9yIHJldHJpZXMgaW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gdHJlZSB3aGljaCB3aWxsIGFmZmVjdCB0aGUgdGFpbC4gU28gd2UgbmVlZCB0byB1c2UgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgIC8vIHBhdGggdG8gY29tcHV0ZSB0aGUgY29ycmVjdCB0YWlsLlxuICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVTdXNwZW5zZUxpc3RDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgICAgICAgICAgfSAvLyBJZiBub25lIG9mIHRoZSBjaGlsZHJlbiBoYWQgYW55IHdvcmssIHRoYXQgbWVhbnMgdGhhdCBub25lIG9mXG4gICAgICAgICAgICAgIC8vIHRoZW0gZ290IHJldHJpZWQgc28gdGhleSdsbCBzdGlsbCBiZSBibG9ja2VkIGluIHRoZSBzYW1lIHdheVxuICAgICAgICAgICAgICAvLyBhcyBiZWZvcmUuIFdlIGNhbiBmYXN0IGJhaWwgb3V0LlxuXG5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgIH0gLy8gSWYgbm90aGluZyBzdXNwZW5kZWQgYmVmb3JlIGFuZCB3ZSdyZSByZW5kZXJpbmcgdGhlIHNhbWUgY2hpbGRyZW4sXG4gICAgICAgICAgICAvLyB0aGVuIHRoZSB0YWlsIGRvZXNuJ3QgbWF0dGVyLiBBbnl0aGluZyBuZXcgdGhhdCBzdXNwZW5kcyB3aWxsIHdvcmtcbiAgICAgICAgICAgIC8vIGluIHRoZSBcInRvZ2V0aGVyXCIgbW9kZSwgc28gd2UgY2FuIGNvbnRpbnVlIGZyb20gdGhlIHN0YXRlIHdlIGhhZC5cblxuXG4gICAgICAgICAgICB2YXIgcmVuZGVyU3RhdGUgPSB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlO1xuXG4gICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gUmVzZXQgdG8gdGhlIFwidG9nZXRoZXJcIiBtb2RlIGluIGNhc2Ugd2UndmUgc3RhcnRlZCBhIGRpZmZlcmVudFxuICAgICAgICAgICAgICAvLyB1cGRhdGUgaW4gdGhlIHBhc3QgYnV0IGRpZG4ndCBjb21wbGV0ZSBpdC5cbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nID0gbnVsbDtcbiAgICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3RFZmZlY3QgPSBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQpO1xuXG4gICAgICAgICAgICBpZiAoX2hhc0NoaWxkV29yaykge1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElmIG5vbmUgb2YgdGhlIGNoaWxkcmVuIGhhZCBhbnkgd29yaywgdGhhdCBtZWFucyB0aGF0IG5vbmUgb2ZcbiAgICAgICAgICAgICAgLy8gdGhlbSBnb3QgcmV0cmllZCBzbyB0aGV5J2xsIHN0aWxsIGJlIGJsb2NrZWQgaW4gdGhlIHNhbWUgd2F5XG4gICAgICAgICAgICAgIC8vIGFzIGJlZm9yZS4gV2UgY2FuIGZhc3QgYmFpbCBvdXQuXG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICAgICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gTmVlZCB0byBjaGVjayBpZiB0aGUgdHJlZSBzdGlsbCBuZWVkcyB0byBiZSBkZWZlcnJlZC4gVGhpcyBpc1xuICAgICAgICAgICAgLy8gYWxtb3N0IGlkZW50aWNhbCB0byB0aGUgbG9naWMgdXNlZCBpbiB0aGUgbm9ybWFsIHVwZGF0ZSBwYXRoLFxuICAgICAgICAgICAgLy8gc28gd2UnbGwganVzdCBlbnRlciB0aGF0LiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHdlJ2xsIGJhaWwgb3V0XG4gICAgICAgICAgICAvLyBhdCB0aGUgbmV4dCBsZXZlbCBpbnN0ZWFkIG9mIHRoaXMgb25lLCBiZWNhdXNlIHRoZSBjaGlsZCBwcm9wc1xuICAgICAgICAgICAgLy8gaGF2ZSBub3QgY2hhbmdlZC4gV2hpY2ggaXMgZmluZS5cbiAgICAgICAgICAgIC8vIFRPRE86IFByb2JhYmx5IHNob3VsZCByZWZhY3RvciBgYmVnaW5Xb3JrYCB0byBzcGxpdCB0aGUgYmFpbG91dFxuICAgICAgICAgICAgLy8gcGF0aCBmcm9tIHRoZSBub3JtYWwgcGF0aC4gSSdtIHRlbXB0ZWQgdG8gZG8gYSBsYWJlbGVkIGJyZWFrIGhlcmVcbiAgICAgICAgICAgIC8vIGJ1dCBJIHdvbid0IDopXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IE5vTGFuZXM7XG4gICAgICAgICAgICByZXR1cm4gdXBkYXRlT2Zmc2NyZWVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYmFpbG91dE9uQWxyZWFkeUZpbmlzaGVkV29yayhjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoKGN1cnJlbnQuZmxhZ3MgJiBGb3JjZVVwZGF0ZUZvckxlZ2FjeVN1c3BlbnNlKSAhPT0gTm9GbGFncykge1xuICAgICAgICAvLyBUaGlzIGlzIGEgc3BlY2lhbCBjYXNlIHRoYXQgb25seSBleGlzdHMgZm9yIGxlZ2FjeSBtb2RlLlxuICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTkyMTYuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQW4gdXBkYXRlIHdhcyBzY2hlZHVsZWQgb24gdGhpcyBmaWJlciwgYnV0IHRoZXJlIGFyZSBubyBuZXcgcHJvcHNcbiAgICAgICAgLy8gbm9yIGxlZ2FjeSBjb250ZXh0LiBTZXQgdGhpcyB0byBmYWxzZS4gSWYgYW4gdXBkYXRlIHF1ZXVlIG9yIGNvbnRleHRcbiAgICAgICAgLy8gY29uc3VtZXIgcHJvZHVjZXMgYSBjaGFuZ2VkIHZhbHVlLCBpdCB3aWxsIHNldCB0aGlzIHRvIHRydWUuIE90aGVyd2lzZSxcbiAgICAgICAgLy8gdGhlIGNvbXBvbmVudCB3aWxsIGFzc3VtZSB0aGUgY2hpbGRyZW4gaGF2ZSBub3QgY2hhbmdlZCBhbmQgYmFpbCBvdXQuXG4gICAgICAgIGRpZFJlY2VpdmVVcGRhdGUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZGlkUmVjZWl2ZVVwZGF0ZSA9IGZhbHNlO1xuICB9IC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNsZWFyIHBlbmRpbmcgdXBkYXRlIHByaW9yaXR5LlxuICAvLyBUT0RPOiBUaGlzIGFzc3VtZXMgdGhhdCB3ZSdyZSBhYm91dCB0byBldmFsdWF0ZSB0aGUgY29tcG9uZW50IGFuZCBwcm9jZXNzXG4gIC8vIHRoZSB1cGRhdGUgcXVldWUuIEhvd2V2ZXIsIHRoZXJlJ3MgYW4gZXhjZXB0aW9uOiBTaW1wbGVNZW1vQ29tcG9uZW50XG4gIC8vIHNvbWV0aW1lcyBiYWlscyBvdXQgbGF0ZXIgaW4gdGhlIGJlZ2luIHBoYXNlLiBUaGlzIGluZGljYXRlcyB0aGF0IHdlIHNob3VsZFxuICAvLyBtb3ZlIHRoaXMgYXNzaWdubWVudCBvdXQgb2YgdGhlIGNvbW1vbiBwYXRoIGFuZCBpbnRvIGVhY2ggYnJhbmNoLlxuXG5cbiAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBOb0xhbmVzO1xuXG4gIHN3aXRjaCAod29ya0luUHJvZ3Jlc3MudGFnKSB7XG4gICAgY2FzZSBJbmRldGVybWluYXRlQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gbW91bnRJbmRldGVybWluYXRlQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCB3b3JrSW5Qcm9ncmVzcy50eXBlLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBlbGVtZW50VHlwZSA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlO1xuICAgICAgICByZXR1cm4gbW91bnRMYXp5Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBlbGVtZW50VHlwZSwgdXBkYXRlTGFuZXMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcbiAgICAgICAgdmFyIHVucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcbiAgICAgICAgdmFyIHJlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudCA/IHVucmVzb2x2ZWRQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoX0NvbXBvbmVudCwgdW5yZXNvbHZlZFByb3BzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZUZ1bmN0aW9uQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50LCByZXNvbHZlZFByb3BzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgX0NvbXBvbmVudDIgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHMgPSB3b3JrSW5Qcm9ncmVzcy5lbGVtZW50VHlwZSA9PT0gX0NvbXBvbmVudDIgPyBfdW5yZXNvbHZlZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhfQ29tcG9uZW50MiwgX3VucmVzb2x2ZWRQcm9wcyk7XG5cbiAgICAgICAgcmV0dXJuIHVwZGF0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MiwgX3Jlc29sdmVkUHJvcHMsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICByZXR1cm4gdXBkYXRlSG9zdFJvb3QoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHJldHVybiB1cGRhdGVIb3N0Q29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIEhvc3RUZXh0OlxuICAgICAgcmV0dXJuIHVwZGF0ZUhvc3RUZXh0KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzKTtcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICByZXR1cm4gdXBkYXRlU3VzcGVuc2VDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHJldHVybiB1cGRhdGVQb3J0YWxDb21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgIHtcbiAgICAgICAgdmFyIHR5cGUgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgX3VucmVzb2x2ZWRQcm9wczIgPSB3b3JrSW5Qcm9ncmVzcy5wZW5kaW5nUHJvcHM7XG5cbiAgICAgICAgdmFyIF9yZXNvbHZlZFByb3BzMiA9IHdvcmtJblByb2dyZXNzLmVsZW1lbnRUeXBlID09PSB0eXBlID8gX3VucmVzb2x2ZWRQcm9wczIgOiByZXNvbHZlRGVmYXVsdFByb3BzKHR5cGUsIF91bnJlc29sdmVkUHJvcHMyKTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlRm9yd2FyZFJlZihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgX3Jlc29sdmVkUHJvcHMyLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIEZyYWdtZW50OlxuICAgICAgcmV0dXJuIHVwZGF0ZUZyYWdtZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIE1vZGU6XG4gICAgICByZXR1cm4gdXBkYXRlTW9kZShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHJldHVybiB1cGRhdGVQcm9maWxlcihjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICByZXR1cm4gdXBkYXRlQ29udGV4dFByb3ZpZGVyKGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG5cbiAgICBjYXNlIENvbnRleHRDb25zdW1lcjpcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0Q29uc3VtZXIoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcblxuICAgIGNhc2UgTWVtb0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF90eXBlMiA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzMyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wczsgLy8gUmVzb2x2ZSBvdXRlciBwcm9wcyBmaXJzdCwgdGhlbiByZXNvbHZlIGlubmVyIHByb3BzLlxuXG4gICAgICAgIHZhciBfcmVzb2x2ZWRQcm9wczMgPSByZXNvbHZlRGVmYXVsdFByb3BzKF90eXBlMiwgX3VucmVzb2x2ZWRQcm9wczMpO1xuXG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MudHlwZSAhPT0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvdXRlclByb3BUeXBlcyA9IF90eXBlMi5wcm9wVHlwZXM7XG5cbiAgICAgICAgICAgIGlmIChvdXRlclByb3BUeXBlcykge1xuICAgICAgICAgICAgICBjaGVja1Byb3BUeXBlcyhvdXRlclByb3BUeXBlcywgX3Jlc29sdmVkUHJvcHMzLCAvLyBSZXNvbHZlZCBmb3Igb3V0ZXIgb25seVxuICAgICAgICAgICAgICAncHJvcCcsIGdldENvbXBvbmVudE5hbWUoX3R5cGUyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX3Jlc29sdmVkUHJvcHMzID0gcmVzb2x2ZURlZmF1bHRQcm9wcyhfdHlwZTIudHlwZSwgX3Jlc29sdmVkUHJvcHMzKTtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZU1lbW9Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIF90eXBlMiwgX3Jlc29sdmVkUHJvcHMzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlU2ltcGxlTWVtb0NvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgd29ya0luUHJvZ3Jlc3MudHlwZSwgd29ya0luUHJvZ3Jlc3MucGVuZGluZ1Byb3BzLCB1cGRhdGVMYW5lcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBfQ29tcG9uZW50MyA9IHdvcmtJblByb2dyZXNzLnR5cGU7XG4gICAgICAgIHZhciBfdW5yZXNvbHZlZFByb3BzNCA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICAgICAgICB2YXIgX3Jlc29sdmVkUHJvcHM0ID0gd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPT09IF9Db21wb25lbnQzID8gX3VucmVzb2x2ZWRQcm9wczQgOiByZXNvbHZlRGVmYXVsdFByb3BzKF9Db21wb25lbnQzLCBfdW5yZXNvbHZlZFByb3BzNCk7XG5cbiAgICAgICAgcmV0dXJuIG1vdW50SW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCBfQ29tcG9uZW50MywgX3Jlc29sdmVkUHJvcHM0LCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG5cbiAgICBjYXNlIFN1c3BlbnNlTGlzdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuIHVwZGF0ZVN1c3BlbnNlTGlzdENvbXBvbmVudChjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybiB1cGRhdGVPZmZzY3JlZW5Db21wb25lbnQoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKTtcbiAgICAgIH1cblxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICByZXR1cm4gdXBkYXRlTGVnYWN5SGlkZGVuQ29tcG9uZW50KGN1cnJlbnQsIHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7XG4gICAgICB9XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVW5rbm93biB1bml0IG9mIHdvcmsgdGFnIChcIiArIHdvcmtJblByb2dyZXNzLnRhZyArIFwiKS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKSB7XG4gIC8vIFRhZyB0aGUgZmliZXIgd2l0aCBhbiB1cGRhdGUgZWZmZWN0LiBUaGlzIHR1cm5zIGEgUGxhY2VtZW50IGludG9cbiAgLy8gYSBQbGFjZW1lbnRBbmRVcGRhdGUuXG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbn1cblxuZnVuY3Rpb24gbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKSB7XG4gIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFJlZjtcbn1cblxudmFyIGFwcGVuZEFsbENoaWxkcmVuO1xudmFyIHVwZGF0ZUhvc3RDb250YWluZXI7XG52YXIgdXBkYXRlSG9zdENvbXBvbmVudCQxO1xudmFyIHVwZGF0ZUhvc3RUZXh0JDE7XG5cbntcbiAgLy8gTXV0YXRpb24gbW9kZVxuICBhcHBlbmRBbGxDaGlsZHJlbiA9IGZ1bmN0aW9uIChwYXJlbnQsIHdvcmtJblByb2dyZXNzLCBuZWVkc1Zpc2liaWxpdHlUb2dnbGUsIGlzSGlkZGVuKSB7XG4gICAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgY3JlYXRlZCBidXQgd2UgbmVlZCByZWN1cnNlIGRvd24gaXRzXG4gICAgLy8gY2hpbGRyZW4gdG8gZmluZCBhbGwgdGhlIHRlcm1pbmFsIG5vZGVzLlxuICAgIHZhciBub2RlID0gd29ya0luUHJvZ3Jlc3MuY2hpbGQ7XG5cbiAgICB3aGlsZSAobm9kZSAhPT0gbnVsbCkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50IHx8IG5vZGUudGFnID09PSBIb3N0VGV4dCkge1xuICAgICAgICBhcHBlbmRJbml0aWFsQ2hpbGQocGFyZW50LCBub2RlLnN0YXRlTm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUudGFnID09PSBIb3N0UG9ydGFsKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsIHx8IG5vZGUucmV0dXJuID09PSB3b3JrSW5Qcm9ncmVzcykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICAgIH1cblxuICAgICAgbm9kZS5zaWJsaW5nLnJldHVybiA9IG5vZGUucmV0dXJuO1xuICAgICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlSG9zdENvbnRhaW5lciA9IGZ1bmN0aW9uICh3b3JrSW5Qcm9ncmVzcykgey8vIE5vb3BcbiAgfTtcblxuICB1cGRhdGVIb3N0Q29tcG9uZW50JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIGFuIGFsdGVybmF0ZSwgdGhhdCBtZWFucyB0aGlzIGlzIGFuIHVwZGF0ZSBhbmQgd2UgbmVlZCB0b1xuICAgIC8vIHNjaGVkdWxlIGEgc2lkZS1lZmZlY3QgdG8gZG8gdGhlIHVwZGF0ZXMuXG4gICAgdmFyIG9sZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuXG4gICAgaWYgKG9sZFByb3BzID09PSBuZXdQcm9wcykge1xuICAgICAgLy8gSW4gbXV0YXRpb24gbW9kZSwgdGhpcyBpcyBzdWZmaWNpZW50IGZvciBhIGJhaWxvdXQgYmVjYXVzZVxuICAgICAgLy8gd2Ugd29uJ3QgdG91Y2ggdGhpcyBub2RlIGV2ZW4gaWYgY2hpbGRyZW4gY2hhbmdlZC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGdldCB1cGRhdGVkIGJlY2F1c2Ugb25lIG9mIG91ciBjaGlsZHJlbiB1cGRhdGVkLCB3ZSBkb24ndFxuICAgIC8vIGhhdmUgbmV3UHJvcHMgc28gd2UnbGwgaGF2ZSB0byByZXVzZSB0aGVtLlxuICAgIC8vIFRPRE86IFNwbGl0IHRoZSB1cGRhdGUgQVBJIGFzIHNlcGFyYXRlIGZvciB0aGUgcHJvcHMgdnMuIGNoaWxkcmVuLlxuICAgIC8vIEV2ZW4gYmV0dGVyIHdvdWxkIGJlIGlmIGNoaWxkcmVuIHdlcmVuJ3Qgc3BlY2lhbCBjYXNlZCBhdCBhbGwgdGhvLlxuXG5cbiAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG4gICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IEV4cGVyaWVuY2luZyBhbiBlcnJvciB3aGVyZSBvbGRQcm9wcyBpcyBudWxsLiBTdWdnZXN0cyBhIGhvc3RcbiAgICAvLyBjb21wb25lbnQgaXMgaGl0dGluZyB0aGUgcmVzdW1lIHBhdGguIEZpZ3VyZSBvdXQgd2h5LiBQb3NzaWJseVxuICAgIC8vIHJlbGF0ZWQgdG8gYGhpZGRlbmAuXG5cbiAgICB2YXIgdXBkYXRlUGF5bG9hZCA9IHByZXBhcmVVcGRhdGUoaW5zdGFuY2UsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcywgcm9vdENvbnRhaW5lckluc3RhbmNlLCBjdXJyZW50SG9zdENvbnRleHQpOyAvLyBUT0RPOiBUeXBlIHRoaXMgc3BlY2lmaWMgdG8gdGhpcyB0eXBlIG9mIGNvbXBvbmVudC5cblxuICAgIHdvcmtJblByb2dyZXNzLnVwZGF0ZVF1ZXVlID0gdXBkYXRlUGF5bG9hZDsgLy8gSWYgdGhlIHVwZGF0ZSBwYXlsb2FkIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgY2hhbmdlIG9yIGlmIHRoZXJlXG4gICAgLy8gaXMgYSBuZXcgcmVmIHdlIG1hcmsgdGhpcyBhcyBhbiB1cGRhdGUuIEFsbCB0aGUgd29yayBpcyBkb25lIGluIGNvbW1pdFdvcmsuXG5cbiAgICBpZiAodXBkYXRlUGF5bG9hZCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xuXG4gIHVwZGF0ZUhvc3RUZXh0JDEgPSBmdW5jdGlvbiAoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIG9sZFRleHQsIG5ld1RleHQpIHtcbiAgICAvLyBJZiB0aGUgdGV4dCBkaWZmZXJzLCBtYXJrIGl0IGFzIGFuIHVwZGF0ZS4gQWxsIHRoZSB3b3JrIGluIGRvbmUgaW4gY29tbWl0V29yay5cbiAgICBpZiAob2xkVGV4dCAhPT0gbmV3VGV4dCkge1xuICAgICAgbWFya1VwZGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGhhc1JlbmRlcmVkQVRhaWxGYWxsYmFjaykge1xuICBpZiAoZ2V0SXNIeWRyYXRpbmcoKSkge1xuICAgIC8vIElmIHdlJ3JlIGh5ZHJhdGluZywgd2Ugc2hvdWxkIGNvbnN1bWUgYXMgbWFueSBpdGVtcyBhcyB3ZSBjYW5cbiAgICAvLyBzbyB3ZSBkb24ndCBsZWF2ZSBhbnkgYmVoaW5kLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN3aXRjaCAocmVuZGVyU3RhdGUudGFpbE1vZGUpIHtcbiAgICBjYXNlICdoaWRkZW4nOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIHRhaWxOb2RlID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgdmFyIGxhc3RUYWlsTm9kZSA9IG51bGw7XG5cbiAgICAgICAgd2hpbGUgKHRhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKHRhaWxOb2RlLmFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgbGFzdFRhaWxOb2RlID0gdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGFpbE5vZGUgPSB0YWlsTm9kZS5zaWJsaW5nO1xuICAgICAgICB9IC8vIE5leHQgd2UncmUgc2ltcGx5IGdvaW5nIHRvIGRlbGV0ZSBhbGwgaW5zZXJ0aW9ucyBhZnRlciB0aGVcbiAgICAgICAgLy8gbGFzdCByZW5kZXJlZCBpdGVtLlxuXG5cbiAgICAgICAgaWYgKGxhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRGV0YWNoIHRoZSBpbnNlcnRpb24gYWZ0ZXIgdGhlIGxhc3Qgbm9kZSB0aGF0IHdhcyBhbHJlYWR5XG4gICAgICAgICAgLy8gaW5zZXJ0ZWQuXG4gICAgICAgICAgbGFzdFRhaWxOb2RlLnNpYmxpbmcgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlICdjb2xsYXBzZWQnOlxuICAgICAge1xuICAgICAgICAvLyBBbnkgaW5zZXJ0aW9ucyBhdCB0aGUgZW5kIG9mIHRoZSB0YWlsIGxpc3QgYWZ0ZXIgdGhpcyBwb2ludFxuICAgICAgICAvLyBzaG91bGQgYmUgaW52aXNpYmxlLiBJZiB0aGVyZSBhcmUgYWxyZWFkeSBtb3VudGVkIGJvdW5kYXJpZXNcbiAgICAgICAgLy8gYW55dGhpbmcgYmVmb3JlIHRoZW0gYXJlIG5vdCBjb25zaWRlcmVkIGZvciBjb2xsYXBzaW5nLlxuICAgICAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBnbyB0aHJvdWdoIHRoZSB3aG9sZSB0YWlsIHRvIGZpbmQgaWZcbiAgICAgICAgLy8gdGhlcmUgYXJlIGFueS5cbiAgICAgICAgdmFyIF90YWlsTm9kZSA9IHJlbmRlclN0YXRlLnRhaWw7XG4gICAgICAgIHZhciBfbGFzdFRhaWxOb2RlID0gbnVsbDtcblxuICAgICAgICB3aGlsZSAoX3RhaWxOb2RlICE9PSBudWxsKSB7XG4gICAgICAgICAgaWYgKF90YWlsTm9kZS5hbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIF9sYXN0VGFpbE5vZGUgPSBfdGFpbE5vZGU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgX3RhaWxOb2RlID0gX3RhaWxOb2RlLnNpYmxpbmc7XG4gICAgICAgIH0gLy8gTmV4dCB3ZSdyZSBzaW1wbHkgZ29pbmcgdG8gZGVsZXRlIGFsbCBpbnNlcnRpb25zIGFmdGVyIHRoZVxuICAgICAgICAvLyBsYXN0IHJlbmRlcmVkIGl0ZW0uXG5cblxuICAgICAgICBpZiAoX2xhc3RUYWlsTm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIEFsbCByZW1haW5pbmcgaXRlbXMgaW4gdGhlIHRhaWwgYXJlIGluc2VydGlvbnMuXG4gICAgICAgICAgaWYgKCFoYXNSZW5kZXJlZEFUYWlsRmFsbGJhY2sgJiYgcmVuZGVyU3RhdGUudGFpbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gV2Ugc3VzcGVuZGVkIGR1cmluZyB0aGUgaGVhZC4gV2Ugd2FudCB0byBzaG93IGF0IGxlYXN0IG9uZVxuICAgICAgICAgICAgLy8gcm93IGF0IHRoZSB0YWlsLiBTbyB3ZSdsbCBrZWVwIG9uIGFuZCBjdXQgb2ZmIHRoZSByZXN0LlxuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbC5zaWJsaW5nID0gbnVsbDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUudGFpbCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIERldGFjaCB0aGUgaW5zZXJ0aW9uIGFmdGVyIHRoZSBsYXN0IG5vZGUgdGhhdCB3YXMgYWxyZWFkeVxuICAgICAgICAgIC8vIGluc2VydGVkLlxuICAgICAgICAgIF9sYXN0VGFpbE5vZGUuc2libGluZyA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVdvcmsoY3VycmVudCwgd29ya0luUHJvZ3Jlc3MsIHJlbmRlckxhbmVzKSB7XG4gIHZhciBuZXdQcm9wcyA9IHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcztcblxuICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICBjYXNlIExhenlDb21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgRnJhZ21lbnQ6XG4gICAgY2FzZSBNb2RlOlxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgY2FzZSBDb250ZXh0Q29uc3VtZXI6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RSb290OlxuICAgICAge1xuICAgICAgICBwb3BIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmVzZXRXb3JrSW5Qcm9ncmVzc1ZlcnNpb25zKCk7XG4gICAgICAgIHZhciBmaWJlclJvb3QgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCkge1xuICAgICAgICAgIGZpYmVyUm9vdC5jb250ZXh0ID0gZmliZXJSb290LnBlbmRpbmdDb250ZXh0O1xuICAgICAgICAgIGZpYmVyUm9vdC5wZW5kaW5nQ29udGV4dCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCB8fCBjdXJyZW50LmNoaWxkID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaHlkcmF0ZWQsIHBvcCBzbyB0aGF0IHdlIGNhbiBkZWxldGUgYW55IHJlbWFpbmluZyBjaGlsZHJlblxuICAgICAgICAgIC8vIHRoYXQgd2VyZW4ndCBoeWRyYXRlZC5cbiAgICAgICAgICB2YXIgd2FzSHlkcmF0ZWQgPSBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgICBpZiAod2FzSHlkcmF0ZWQpIHtcbiAgICAgICAgICAgIC8vIElmIHdlIGh5ZHJhdGVkLCB0aGVuIHdlJ2xsIG5lZWQgdG8gc2NoZWR1bGUgYW4gdXBkYXRlIGZvclxuICAgICAgICAgICAgLy8gdGhlIGNvbW1pdCBzaWRlLWVmZmVjdHMgb24gdGhlIHJvb3QuXG4gICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCFmaWJlclJvb3QuaHlkcmF0ZSkge1xuICAgICAgICAgICAgLy8gU2NoZWR1bGUgYW4gZWZmZWN0IHRvIGNsZWFyIHRoaXMgY29udGFpbmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgbmV4dCBjb21taXQuXG4gICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgdGhlIGNhc2Ugb2YgUmVhY3QgcmVuZGVyaW5nIGludG8gYSBjb250YWluZXIgd2l0aCBwcmV2aW91cyBjaGlsZHJlbi5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBzYWZlIHRvIGRvIGZvciB1cGRhdGVzIHRvbywgYmVjYXVzZSBjdXJyZW50LmNoaWxkIHdvdWxkIG9ubHkgYmUgbnVsbFxuICAgICAgICAgICAgLy8gaWYgdGhlIHByZXZpb3VzIHJlbmRlciB3YXMgbnVsbCAoc28gdGhlIHRoZSBjb250YWluZXIgd291bGQgYWxyZWFkeSBiZSBlbXB0eSkuXG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTbmFwc2hvdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVIb3N0Q29udGFpbmVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIHJvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG4gICAgICAgIHZhciB0eXBlID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgIHVwZGF0ZUhvc3RDb21wb25lbnQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgdHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudC5yZWYgIT09IHdvcmtJblByb2dyZXNzLnJlZikge1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFuZXdQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cblxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGN1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7IC8vIFRPRE86IE1vdmUgY3JlYXRlSW5zdGFuY2UgdG8gYmVnaW5Xb3JrIGFuZCBrZWVwIGl0IG9uIGEgY29udGV4dFxuICAgICAgICAgIC8vIFwic3RhY2tcIiBhcyB0aGUgcGFyZW50LiBUaGVuIGFwcGVuZCBjaGlsZHJlbiBhcyB3ZSBnbyBpbiBiZWdpbldvcmtcbiAgICAgICAgICAvLyBvciBjb21wbGV0ZVdvcmsgZGVwZW5kaW5nIG9uIHdoZXRoZXIgd2Ugd2FudCB0byBhZGQgdGhlbSB0b3AtPmRvd24gb3JcbiAgICAgICAgICAvLyBib3R0b20tPnVwLiBUb3AtPmRvd24gaXMgZmFzdGVyIGluIElFMTEuXG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkID0gcG9wSHlkcmF0aW9uU3RhdGUod29ya0luUHJvZ3Jlc3MpO1xuXG4gICAgICAgICAgaWYgKF93YXNIeWRyYXRlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIGFuZCBjcmVhdGVJbnN0YW5jZSBzdGVwIGludG8gdGhlIGJlZ2luUGhhc2VcbiAgICAgICAgICAgIC8vIHRvIGNvbnNvbGlkYXRlLlxuICAgICAgICAgICAgaWYgKHByZXBhcmVUb0h5ZHJhdGVIb3N0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0KSkge1xuICAgICAgICAgICAgICAvLyBJZiBjaGFuZ2VzIHRvIHRoZSBoeWRyYXRlZCBub2RlIG5lZWQgdG8gYmUgYXBwbGllZCBhdCB0aGVcbiAgICAgICAgICAgICAgLy8gY29tbWl0LXBoYXNlIHdlIG1hcmsgdGhpcyBhcyBzdWNoLlxuICAgICAgICAgICAgICBtYXJrVXBkYXRlKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gY3JlYXRlSW5zdGFuY2UodHlwZSwgbmV3UHJvcHMsIHJvb3RDb250YWluZXJJbnN0YW5jZSwgY3VycmVudEhvc3RDb250ZXh0LCB3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgICBhcHBlbmRBbGxDaGlsZHJlbihpbnN0YW5jZSwgd29ya0luUHJvZ3Jlc3MsIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBpbnN0YW5jZTsgLy8gQ2VydGFpbiByZW5kZXJlcnMgcmVxdWlyZSBjb21taXQtdGltZSBlZmZlY3RzIGZvciBpbml0aWFsIG1vdW50LlxuICAgICAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBzdXBwb3J0cyBhdXRvLWZvY3VzIGZvciBjZXJ0YWluIGVsZW1lbnRzKS5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBzdWNoIHJlbmRlcmVycyBnZXQgc2NoZWR1bGVkIGZvciBsYXRlciB3b3JrLlxuXG4gICAgICAgICAgICBpZiAoZmluYWxpemVJbml0aWFsQ2hpbGRyZW4oaW5zdGFuY2UsIHR5cGUsIG5ld1Byb3BzLCByb290Q29udGFpbmVySW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh3b3JrSW5Qcm9ncmVzcy5yZWYgIT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcmVmIG9uIGEgaG9zdCBub2RlIHdlIG5lZWQgdG8gc2NoZWR1bGUgYSBjYWxsYmFja1xuICAgICAgICAgICAgbWFya1JlZiQxKHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gbmV3UHJvcHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgJiYgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9IG51bGwpIHtcbiAgICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wczsgLy8gSWYgd2UgaGF2ZSBhbiBhbHRlcm5hdGUsIHRoYXQgbWVhbnMgdGhpcyBpcyBhbiB1cGRhdGUgYW5kIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBzY2hlZHVsZSBhIHNpZGUtZWZmZWN0IHRvIGRvIHRoZSB1cGRhdGVzLlxuXG4gICAgICAgICAgdXBkYXRlSG9zdFRleHQkMShjdXJyZW50LCB3b3JrSW5Qcm9ncmVzcywgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXdUZXh0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKCEod29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiV2UgbXVzdCBoYXZlIG5ldyBwcm9wcyBmb3IgbmV3IG1vdW50cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlIGFib3J0IHdvcmsuXG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3Jvb3RDb250YWluZXJJbnN0YW5jZSA9IGdldFJvb3RIb3N0Q29udGFpbmVyKCk7XG5cbiAgICAgICAgICB2YXIgX2N1cnJlbnRIb3N0Q29udGV4dCA9IGdldEhvc3RDb250ZXh0KCk7XG5cbiAgICAgICAgICB2YXIgX3dhc0h5ZHJhdGVkMiA9IHBvcEh5ZHJhdGlvblN0YXRlKHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICAgIGlmIChfd2FzSHlkcmF0ZWQyKSB7XG4gICAgICAgICAgICBpZiAocHJlcGFyZVRvSHlkcmF0ZUhvc3RUZXh0SW5zdGFuY2Uod29ya0luUHJvZ3Jlc3MpKSB7XG4gICAgICAgICAgICAgIG1hcmtVcGRhdGUod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUgPSBjcmVhdGVUZXh0SW5zdGFuY2UobmV3VGV4dCwgX3Jvb3RDb250YWluZXJJbnN0YW5jZSwgX2N1cnJlbnRIb3N0Q29udGV4dCwgd29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgdmFyIG5leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpICE9PSBOb0ZsYWdzKSB7XG4gICAgICAgICAgLy8gU29tZXRoaW5nIHN1c3BlbmRlZC4gUmUtcmVuZGVyIHdpdGggdGhlIGZhbGxiYWNrIGNoaWxkcmVuLlxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gcmVuZGVyTGFuZXM7IC8vIERvIG5vdCByZXNldCB0aGUgZWZmZWN0IGxpc3QuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBuZXh0RGlkVGltZW91dCA9IG5leHRTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgdmFyIHByZXZEaWRUaW1lb3V0ID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICBpZiAod29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwb3BIeWRyYXRpb25TdGF0ZSh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgcHJldkRpZFRpbWVvdXQgPSBwcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmV4dERpZFRpbWVvdXQgJiYgIXByZXZEaWRUaW1lb3V0KSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBzdWJ0cmVlZSBpcyBydW5uaW5nIGluIGJsb2NraW5nIG1vZGUgd2UgY2FuIHN1c3BlbmQsXG4gICAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdvbid0IHN1c3BlbmQuXG4gICAgICAgICAgLy8gVE9ETzogVGhpcyB3aWxsIHN0aWxsIHN1c3BlbmQgYSBzeW5jaHJvbm91cyB0cmVlIGlmIGFueXRoaW5nXG4gICAgICAgICAgLy8gaW4gdGhlIGNvbmN1cnJlbnQgdHJlZSBhbHJlYWR5IHN1c3BlbmRlZCBkdXJpbmcgdGhpcyByZW5kZXIuXG4gICAgICAgICAgLy8gVGhpcyBpcyBhIGtub3duIGJ1Zy5cbiAgICAgICAgICBpZiAoKHdvcmtJblByb2dyZXNzLm1vZGUgJiBCbG9ja2luZ01vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBiYWNrIHRvIHRocm93RXhjZXB0aW9uIGJlY2F1c2UgdGhpcyBpcyB0b28gbGF0ZVxuICAgICAgICAgICAgLy8gaWYgdGhpcyBpcyBhIGxhcmdlIHRyZWUgd2hpY2ggaXMgY29tbW9uIGZvciBpbml0aWFsIGxvYWRzLiBXZVxuICAgICAgICAgICAgLy8gZG9uJ3Qga25vdyBpZiB3ZSBzaG91bGQgcmVzdGFydCBhIHJlbmRlciBvciBub3QgdW50aWwgd2UgZ2V0XG4gICAgICAgICAgICAvLyB0aGlzIG1hcmtlciwgYW5kIHRoaXMgaXMgdG9vIGxhdGUuXG4gICAgICAgICAgICAvLyBJZiB0aGlzIHJlbmRlciBhbHJlYWR5IGhhZCBhIHBpbmcgb3IgbG93ZXIgcHJpIHVwZGF0ZXMsXG4gICAgICAgICAgICAvLyBhbmQgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB3ZSBrbm93IHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgd2VcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBhYmxlIHRvIGltbWVkaWF0ZWx5IHJlc3RhcnQgZnJvbSB3aXRoaW4gdGhyb3dFeGNlcHRpb24uXG4gICAgICAgICAgICB2YXIgaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0ID0gY3VycmVudCA9PT0gbnVsbCAmJiB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzLnVuc3RhYmxlX2F2b2lkVGhpc0ZhbGxiYWNrICE9PSB0cnVlO1xuXG4gICAgICAgICAgICBpZiAoaGFzSW52aXNpYmxlQ2hpbGRDb250ZXh0IHx8IGhhc1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEludmlzaWJsZVBhcmVudFN1c3BlbnNlQ29udGV4dCkpIHtcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyB3YXMgaW4gYW4gaW52aXNpYmxlIHRyZWUgb3IgYSBuZXcgcmVuZGVyLCB0aGVuIHNob3dpbmdcbiAgICAgICAgICAgICAgLy8gdGhpcyBib3VuZGFyeSBpcyBvay5cbiAgICAgICAgICAgICAgcmVuZGVyRGlkU3VzcGVuZCgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdyZSBnb2luZyB0byBoYXZlIHRvIGhpZGUgY29udGVudCBzbyB3ZSBzaG91bGRcbiAgICAgICAgICAgICAgLy8gc3VzcGVuZCBmb3IgbG9uZ2VyIGlmIHBvc3NpYmxlLlxuICAgICAgICAgICAgICByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFRPRE86IE9ubHkgc2NoZWR1bGUgdXBkYXRlcyBpZiB0aGVzZSB2YWx1ZXMgYXJlIG5vbiBlcXVhbCwgaS5lLiBpdCBjaGFuZ2VkLlxuICAgICAgICAgIGlmIChuZXh0RGlkVGltZW91dCB8fCBwcmV2RGlkVGltZW91dCkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBib3VuZGFyeSBqdXN0IHRpbWVkIG91dCwgc2NoZWR1bGUgYW4gZWZmZWN0IHRvIGF0dGFjaCBhXG4gICAgICAgICAgICAvLyByZXRyeSBsaXN0ZW5lciB0byB0aGUgcHJvbWlzZS4gVGhpcyBmbGFnIGlzIGFsc28gdXNlZCB0byBoaWRlIHRoZVxuICAgICAgICAgICAgLy8gcHJpbWFyeSBjaGlsZHJlbi4gSW4gbXV0YXRpb24gbW9kZSwgd2UgYWxzbyBuZWVkIHRoZSBmbGFnIHRvXG4gICAgICAgICAgICAvLyAqdW5oaWRlKiBjaGlsZHJlbiB0aGF0IHdlcmUgcHJldmlvdXNseSBoaWRkZW4sIHNvIGNoZWNrIGlmIHRoaXNcbiAgICAgICAgICAgIC8vIGlzIGN1cnJlbnRseSB0aW1lZCBvdXQsIHRvby5cbiAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHBvcEhvc3RDb250YWluZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgdXBkYXRlSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIHByZXBhcmVQb3J0YWxNb3VudCh3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICAvLyBQb3AgcHJvdmlkZXIgZmliZXJcbiAgICAgIHBvcFByb3ZpZGVyKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIC8vIFNhbWUgYXMgY2xhc3MgY29tcG9uZW50IGNhc2UuIEkgcHV0IGl0IGRvd24gaGVyZSBzbyB0aGF0IHRoZSB0YWdzIGFyZVxuICAgICAgICAvLyBzZXF1ZW50aWFsIHRvIGVuc3VyZSB0aGlzIHN3aXRjaCBpcyBjb21waWxlZCB0byBhIGp1bXAgdGFibGUuXG4gICAgICAgIHZhciBfQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoX0NvbXBvbmVudCkpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2UncmUgcnVubmluZyBpbiB0aGUgZGVmYXVsdCwgXCJpbmRlcGVuZGVudFwiIG1vZGUuXG4gICAgICAgICAgLy8gV2UgZG9uJ3QgZG8gYW55dGhpbmcgaW4gdGhpcyBtb2RlLlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRpZFN1c3BlbmRBbHJlYWR5ID0gKHdvcmtJblByb2dyZXNzLmZsYWdzICYgRGlkQ2FwdHVyZSkgIT09IE5vRmxhZ3M7XG4gICAgICAgIHZhciByZW5kZXJlZFRhaWwgPSByZW5kZXJTdGF0ZS5yZW5kZXJpbmc7XG5cbiAgICAgICAgaWYgKHJlbmRlcmVkVGFpbCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdlIGp1c3QgcmVuZGVyZWQgdGhlIGhlYWQuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgcGFzcy4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGFueXRoaW5nIGlzIHN0aWxsXG4gICAgICAgICAgICAvLyBzdXNwZW5kZWQgaW4gdGhlIHJlbmRlcmVkIHNldC5cbiAgICAgICAgICAgIC8vIElmIG5ldyBjb250ZW50IHVuc3VzcGVuZGVkLCBidXQgdGhlcmUncyBzdGlsbCBzb21lIGNvbnRlbnQgdGhhdFxuICAgICAgICAgICAgLy8gZGlkbid0LiBUaGVuIHdlIG5lZWQgdG8gZG8gYSBzZWNvbmQgcGFzcyB0aGF0IGZvcmNlcyBldmVyeXRoaW5nXG4gICAgICAgICAgICAvLyB0byBrZWVwIHNob3dpbmcgdGhlaXIgZmFsbGJhY2tzLlxuICAgICAgICAgICAgLy8gV2UgbWlnaHQgYmUgc3VzcGVuZGVkIGlmIHNvbWV0aGluZyBpbiB0aGlzIHJlbmRlciBwYXNzIHN1c3BlbmRlZCwgb3JcbiAgICAgICAgICAgIC8vIHNvbWV0aGluZyBpbiB0aGUgcHJldmlvdXMgY29tbWl0dGVkIHBhc3Mgc3VzcGVuZGVkLiBPdGhlcndpc2UsXG4gICAgICAgICAgICAvLyB0aGVyZSdzIG5vIGNoYW5jZSBzbyB3ZSBjYW4gc2tpcCB0aGUgZXhwZW5zaXZlIGNhbGwgdG9cbiAgICAgICAgICAgIC8vIGZpbmRGaXJzdFN1c3BlbmRlZC5cbiAgICAgICAgICAgIHZhciBjYW5ub3RCZVN1c3BlbmRlZCA9IHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpICYmIChjdXJyZW50ID09PSBudWxsIHx8IChjdXJyZW50LmZsYWdzICYgRGlkQ2FwdHVyZSkgPT09IE5vRmxhZ3MpO1xuXG4gICAgICAgICAgICBpZiAoIWNhbm5vdEJlU3VzcGVuZGVkKSB7XG4gICAgICAgICAgICAgIHZhciByb3cgPSB3b3JrSW5Qcm9ncmVzcy5jaGlsZDtcblxuICAgICAgICAgICAgICB3aGlsZSAocm93ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN1c3BlbmRlZCA9IGZpbmRGaXJzdFN1c3BlbmRlZChyb3cpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHN1c3BlbmRlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgZmFsc2UpOyAvLyBJZiB0aGlzIGlzIGEgbmV3bHkgc3VzcGVuZGVkIHRyZWUsIGl0IG1pZ2h0IG5vdCBnZXQgY29tbWl0dGVkIGFzXG4gICAgICAgICAgICAgICAgICAvLyBwYXJ0IG9mIHRoZSBzZWNvbmQgcGFzcy4gSW4gdGhhdCBjYXNlIG5vdGhpbmcgd2lsbCBzdWJzY3JpYmUgdG9cbiAgICAgICAgICAgICAgICAgIC8vIGl0cyB0aGVubmFibGVzLiBJbnN0ZWFkLCB3ZSdsbCB0cmFuc2ZlciBpdHMgdGhlbm5hYmxlcyB0byB0aGVcbiAgICAgICAgICAgICAgICAgIC8vIFN1c3BlbnNlTGlzdCBzbyB0aGF0IGl0IGNhbiByZXRyeSBpZiB0aGV5IHJlc29sdmUuXG4gICAgICAgICAgICAgICAgICAvLyBUaGVyZSBtaWdodCBiZSBtdWx0aXBsZSBvZiB0aGVzZSBpbiB0aGUgbGlzdCBidXQgc2luY2Ugd2UncmVcbiAgICAgICAgICAgICAgICAgIC8vIGdvaW5nIHRvIHdhaXQgZm9yIGFsbCBvZiB0aGVtIGFueXdheSwgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyXG4gICAgICAgICAgICAgICAgICAvLyB3aGljaCBvbmVzIGdldHMgdG8gcGluZy4gSW4gdGhlb3J5IHdlIGNvdWxkIGdldCBjbGV2ZXIgYW5kIGtlZXBcbiAgICAgICAgICAgICAgICAgIC8vIHRyYWNrIG9mIGhvdyBtYW55IGRlcGVuZGVuY2llcyByZW1haW4gYnV0IGl0IGdldHMgdHJpY2t5IGJlY2F1c2VcbiAgICAgICAgICAgICAgICAgIC8vIGluIHRoZSBtZWFudGltZSwgd2UgY2FuIGFkZC9yZW1vdmUvY2hhbmdlIGl0ZW1zIGFuZCBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAgICAgICAvLyBXZSBtaWdodCBiYWlsIG91dCBvZiB0aGUgbG9vcCBiZWZvcmUgZmluZGluZyBhbnkgYnV0IHRoYXRcbiAgICAgICAgICAgICAgICAgIC8vIGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoYXQgbWVhbnMgdGhhdCB0aGUgb3RoZXIgYm91bmRhcmllcyB0aGF0XG4gICAgICAgICAgICAgICAgICAvLyB3ZSBkaWQgZmluZCBhbHJlYWR5IGhhcyB0aGVpciBsaXN0ZW5lcnMgYXR0YWNoZWQuXG5cbiAgICAgICAgICAgICAgICAgIHZhciBuZXdUaGVubmFibGVzID0gc3VzcGVuZGVkLnVwZGF0ZVF1ZXVlO1xuXG4gICAgICAgICAgICAgICAgICBpZiAobmV3VGhlbm5hYmxlcyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IG5ld1RoZW5uYWJsZXM7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgICAgIH0gLy8gUmVyZW5kZXIgdGhlIHdob2xlIGxpc3QsIGJ1dCB0aGlzIHRpbWUsIHdlJ2xsIGZvcmNlIGZhbGxiYWNrc1xuICAgICAgICAgICAgICAgICAgLy8gdG8gc3RheSBpbiBwbGFjZS5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCBiZWZvcmUgZG9pbmcgdGhlIHNlY29uZCBwYXNzIHNpbmNlIHRoYXQncyBub3cgaW52YWxpZC5cblxuXG4gICAgICAgICAgICAgICAgICBpZiAocmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZXNldCB0aGUgY2hpbGQgZmliZXJzIHRvIHRoZWlyIG9yaWdpbmFsIHN0YXRlLlxuXG4gICAgICAgICAgICAgICAgICByZXNldENoaWxkRmliZXJzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcyk7IC8vIFNldCB1cCB0aGUgU3VzcGVuc2UgQ29udGV4dCB0byBmb3JjZSBzdXNwZW5zZSBhbmQgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgICAgICAgIC8vIHJlcmVuZGVyIHRoZSBjaGlsZHJlbi5cblxuICAgICAgICAgICAgICAgICAgcHVzaFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcywgc2V0U2hhbGxvd1N1c3BlbnNlQ29udGV4dChzdXNwZW5zZVN0YWNrQ3Vyc29yLmN1cnJlbnQsIEZvcmNlU3VzcGVuc2VGYWxsYmFjaykpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJvdyA9IHJvdy5zaWJsaW5nO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsICE9PSBudWxsICYmIG5vdygpID4gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIGhhdmUgYWxyZWFkeSBwYXNzZWQgb3VyIENQVSBkZWFkbGluZSBidXQgd2Ugc3RpbGwgaGF2ZSByb3dzXG4gICAgICAgICAgICAgIC8vIGxlZnQgaW4gdGhlIHRhaWwuIFdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyIGF0dGVtcHRzIHRvIHJlbmRlclxuICAgICAgICAgICAgICAvLyB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IERpZENhcHR1cmU7XG4gICAgICAgICAgICAgIGRpZFN1c3BlbmRBbHJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgY3V0T2ZmVGFpbElmTmVlZGVkKHJlbmRlclN0YXRlLCBmYWxzZSk7IC8vIFNpbmNlIG5vdGhpbmcgYWN0dWFsbHkgc3VzcGVuZGVkLCB0aGVyZSB3aWxsIG5vdGhpbmcgdG8gcGluZyB0aGlzXG4gICAgICAgICAgICAgIC8vIHRvIGdldCBpdCBzdGFydGVkIGJhY2sgdXAgdG8gYXR0ZW1wdCB0aGUgbmV4dCBpdGVtLiBXaGlsZSBpbiB0ZXJtc1xuICAgICAgICAgICAgICAvLyBvZiBwcmlvcml0eSB0aGlzIHdvcmsgaGFzIHRoZSBzYW1lIHByaW9yaXR5IGFzIHRoaXMgY3VycmVudCByZW5kZXIsXG4gICAgICAgICAgICAgIC8vIGl0J3Mgbm90IHBhcnQgb2YgdGhlIHNhbWUgdHJhbnNpdGlvbiBvbmNlIHRoZSB0cmFuc2l0aW9uIGhhc1xuICAgICAgICAgICAgICAvLyBjb21taXR0ZWQuIElmIGl0J3Mgc3luYywgd2Ugc3RpbGwgd2FudCB0byB5aWVsZCBzbyB0aGF0IGl0IGNhbiBiZVxuICAgICAgICAgICAgICAvLyBwYWludGVkLiBDb25jZXB0dWFsbHksIHRoaXMgaXMgcmVhbGx5IHRoZSBzYW1lIGFzIHBpbmdpbmcuXG4gICAgICAgICAgICAgIC8vIFdlIGNhbiB1c2UgYW55IFJldHJ5TGFuZSBldmVuIGlmIGl0J3MgdGhlIG9uZSBjdXJyZW50bHkgcmVuZGVyaW5nXG4gICAgICAgICAgICAgIC8vIHNpbmNlIHdlJ3JlIGxlYXZpbmcgaXQgYmVoaW5kIG9uIHRoaXMgbm9kZS5cblxuICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5sYW5lcyA9IFNvbWVSZXRyeUxhbmU7XG5cbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG1hcmtTcGF3bmVkV29yayhTb21lUmV0cnlMYW5lKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTtcbiAgICAgICAgICB9IC8vIE5leHQgd2UncmUgZ29pbmcgdG8gcmVuZGVyIHRoZSB0YWlsLlxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXBwZW5kIHRoZSByZW5kZXJlZCByb3cgdG8gdGhlIGNoaWxkIGxpc3QuXG4gICAgICAgICAgaWYgKCFkaWRTdXNwZW5kQWxyZWFkeSkge1xuICAgICAgICAgICAgdmFyIF9zdXNwZW5kZWQgPSBmaW5kRmlyc3RTdXNwZW5kZWQocmVuZGVyZWRUYWlsKTtcblxuICAgICAgICAgICAgaWYgKF9zdXNwZW5kZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlOyAvLyBFbnN1cmUgd2UgdHJhbnNmZXIgdGhlIHVwZGF0ZSBxdWV1ZSB0byB0aGUgcGFyZW50IHNvIHRoYXQgaXQgZG9lc24ndFxuICAgICAgICAgICAgICAvLyBnZXQgbG9zdCBpZiB0aGlzIHJvdyBlbmRzIHVwIGRyb3BwZWQgZHVyaW5nIGEgc2Vjb25kIHBhc3MuXG5cbiAgICAgICAgICAgICAgdmFyIF9uZXdUaGVubmFibGVzID0gX3N1c3BlbmRlZC51cGRhdGVRdWV1ZTtcblxuICAgICAgICAgICAgICBpZiAoX25ld1RoZW5uYWJsZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IF9uZXdUaGVubmFibGVzO1xuICAgICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzIHw9IFVwZGF0ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1dE9mZlRhaWxJZk5lZWRlZChyZW5kZXJTdGF0ZSwgdHJ1ZSk7IC8vIFRoaXMgbWlnaHQgaGF2ZSBiZWVuIG1vZGlmaWVkLlxuXG4gICAgICAgICAgICAgIGlmIChyZW5kZXJTdGF0ZS50YWlsID09PSBudWxsICYmIHJlbmRlclN0YXRlLnRhaWxNb2RlID09PSAnaGlkZGVuJyAmJiAhcmVuZGVyZWRUYWlsLmFsdGVybmF0ZSAmJiAhZ2V0SXNIeWRyYXRpbmcoKSAvLyBXZSBkb24ndCBjdXQgaXQgaWYgd2UncmUgaHlkcmF0aW5nLlxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZGVsZXRlIHRoZSByb3cgd2UganVzdCByZW5kZXJlZC5cbiAgICAgICAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBlZmZlY3QgbGlzdCB0byB3aGF0IGl0IHdhcyBiZWZvcmUgd2UgcmVuZGVyZWQgdGhpc1xuICAgICAgICAgICAgICAgICAgLy8gY2hpbGQuIFRoZSBuZXN0ZWQgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGFwcGVuZGVkIHRoZW1zZWx2ZXMuXG4gICAgICAgICAgICAgICAgICB2YXIgbGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSByZW5kZXJTdGF0ZS5sYXN0RWZmZWN0OyAvLyBSZW1vdmUgYW55IGVmZmVjdHMgdGhhdCB3ZXJlIGFwcGVuZGVkIGFmdGVyIHRoaXMgcG9pbnQuXG5cbiAgICAgICAgICAgICAgICAgIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICB9IC8vIFdlJ3JlIGRvbmUuXG5cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICggLy8gVGhlIHRpbWUgaXQgdG9vayB0byByZW5kZXIgbGFzdCByb3cgaXMgZ3JlYXRlciB0aGFuIHRoZSByZW1haW5pbmdcbiAgICAgICAgICAgIC8vIHRpbWUgd2UgaGF2ZSB0byByZW5kZXIuIFNvIHJlbmRlcmluZyBvbmUgbW9yZSByb3cgd291bGQgbGlrZWx5XG4gICAgICAgICAgICAvLyBleGNlZWQgaXQuXG4gICAgICAgICAgICBub3coKSAqIDIgLSByZW5kZXJTdGF0ZS5yZW5kZXJpbmdTdGFydFRpbWUgPiBnZXRSZW5kZXJUYXJnZXRUaW1lKCkgJiYgcmVuZGVyTGFuZXMgIT09IE9mZnNjcmVlbkxhbmUpIHtcbiAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBub3cgcGFzc2VkIG91ciBDUFUgZGVhZGxpbmUgYW5kIHdlJ2xsIGp1c3QgZ2l2ZSB1cCBmdXJ0aGVyXG4gICAgICAgICAgICAgIC8vIGF0dGVtcHRzIHRvIHJlbmRlciB0aGUgbWFpbiBjb250ZW50IGFuZCBvbmx5IHJlbmRlciBmYWxsYmFja3MuXG4gICAgICAgICAgICAgIC8vIFRoZSBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBpcyB1c3VhbGx5IGZhc3Rlci5cbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gRGlkQ2FwdHVyZTtcbiAgICAgICAgICAgICAgZGlkU3VzcGVuZEFscmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgICBjdXRPZmZUYWlsSWZOZWVkZWQocmVuZGVyU3RhdGUsIGZhbHNlKTsgLy8gU2luY2Ugbm90aGluZyBhY3R1YWxseSBzdXNwZW5kZWQsIHRoZXJlIHdpbGwgbm90aGluZyB0byBwaW5nIHRoaXNcbiAgICAgICAgICAgICAgLy8gdG8gZ2V0IGl0IHN0YXJ0ZWQgYmFjayB1cCB0byBhdHRlbXB0IHRoZSBuZXh0IGl0ZW0uIFdoaWxlIGluIHRlcm1zXG4gICAgICAgICAgICAgIC8vIG9mIHByaW9yaXR5IHRoaXMgd29yayBoYXMgdGhlIHNhbWUgcHJpb3JpdHkgYXMgdGhpcyBjdXJyZW50IHJlbmRlcixcbiAgICAgICAgICAgICAgLy8gaXQncyBub3QgcGFydCBvZiB0aGUgc2FtZSB0cmFuc2l0aW9uIG9uY2UgdGhlIHRyYW5zaXRpb24gaGFzXG4gICAgICAgICAgICAgIC8vIGNvbW1pdHRlZC4gSWYgaXQncyBzeW5jLCB3ZSBzdGlsbCB3YW50IHRvIHlpZWxkIHNvIHRoYXQgaXQgY2FuIGJlXG4gICAgICAgICAgICAgIC8vIHBhaW50ZWQuIENvbmNlcHR1YWxseSwgdGhpcyBpcyByZWFsbHkgdGhlIHNhbWUgYXMgcGluZ2luZy5cbiAgICAgICAgICAgICAgLy8gV2UgY2FuIHVzZSBhbnkgUmV0cnlMYW5lIGV2ZW4gaWYgaXQncyB0aGUgb25lIGN1cnJlbnRseSByZW5kZXJpbmdcbiAgICAgICAgICAgICAgLy8gc2luY2Ugd2UncmUgbGVhdmluZyBpdCBiZWhpbmQgb24gdGhpcyBub2RlLlxuXG4gICAgICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gU29tZVJldHJ5TGFuZTtcblxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbWFya1NwYXduZWRXb3JrKFNvbWVSZXRyeUxhbmUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlbmRlclN0YXRlLmlzQmFja3dhcmRzKSB7XG4gICAgICAgICAgICAvLyBUaGUgZWZmZWN0IGxpc3Qgb2YgdGhlIGJhY2t3YXJkcyB0YWlsIHdpbGwgaGF2ZSBiZWVuIGFkZGVkXG4gICAgICAgICAgICAvLyB0byB0aGUgZW5kLiBUaGlzIGJyZWFrcyB0aGUgZ3VhcmFudGVlIHRoYXQgbGlmZS1jeWNsZXMgZmlyZSBpblxuICAgICAgICAgICAgLy8gc2libGluZyBvcmRlciBidXQgdGhhdCBpc24ndCBhIHN0cm9uZyBndWFyYW50ZWUgcHJvbWlzZWQgYnkgUmVhY3QuXG4gICAgICAgICAgICAvLyBFc3BlY2lhbGx5IHNpbmNlIHRoZXNlIG1pZ2h0IGFsc28ganVzdCBwb3AgaW4gZHVyaW5nIGZ1dHVyZSBjb21taXRzLlxuICAgICAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuXG4gICAgICAgICAgICByZW5kZXJlZFRhaWwuc2libGluZyA9IHdvcmtJblByb2dyZXNzLmNoaWxkO1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2aW91c1NpYmxpbmcgPSByZW5kZXJTdGF0ZS5sYXN0O1xuXG4gICAgICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHByZXZpb3VzU2libGluZy5zaWJsaW5nID0gcmVuZGVyZWRUYWlsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbmRlclN0YXRlLmxhc3QgPSByZW5kZXJlZFRhaWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlclN0YXRlLnRhaWwgIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXZSBzdGlsbCBoYXZlIHRhaWwgcm93cyB0byByZW5kZXIuXG4gICAgICAgICAgLy8gUG9wIGEgcm93LlxuICAgICAgICAgIHZhciBuZXh0ID0gcmVuZGVyU3RhdGUudGFpbDtcbiAgICAgICAgICByZW5kZXJTdGF0ZS5yZW5kZXJpbmcgPSBuZXh0O1xuICAgICAgICAgIHJlbmRlclN0YXRlLnRhaWwgPSBuZXh0LnNpYmxpbmc7XG4gICAgICAgICAgcmVuZGVyU3RhdGUubGFzdEVmZmVjdCA9IHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3Q7XG4gICAgICAgICAgcmVuZGVyU3RhdGUucmVuZGVyaW5nU3RhcnRUaW1lID0gbm93KCk7XG4gICAgICAgICAgbmV4dC5zaWJsaW5nID0gbnVsbDsgLy8gUmVzdG9yZSB0aGUgY29udGV4dC5cbiAgICAgICAgICAvLyBUT0RPOiBXZSBjYW4gcHJvYmFibHkganVzdCBhdm9pZCBwb3BwaW5nIGl0IGluc3RlYWQgYW5kIG9ubHlcbiAgICAgICAgICAvLyBzZXR0aW5nIGl0IHRoZSBmaXJzdCB0aW1lIHdlIGdvIGZyb20gbm90IHN1c3BlbmRlZCB0byBzdXNwZW5kZWQuXG5cbiAgICAgICAgICB2YXIgc3VzcGVuc2VDb250ZXh0ID0gc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50O1xuXG4gICAgICAgICAgaWYgKGRpZFN1c3BlbmRBbHJlYWR5KSB7XG4gICAgICAgICAgICBzdXNwZW5zZUNvbnRleHQgPSBzZXRTaGFsbG93U3VzcGVuc2VDb250ZXh0KHN1c3BlbnNlQ29udGV4dCwgRm9yY2VTdXNwZW5zZUZhbGxiYWNrKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VzcGVuc2VDb250ZXh0ID0gc2V0RGVmYXVsdFNoYWxsb3dTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VDb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBwdXNoU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzLCBzdXNwZW5zZUNvbnRleHQpOyAvLyBEbyBhIHBhc3Mgb3ZlciB0aGUgbmV4dCByb3cuXG5cbiAgICAgICAgICByZXR1cm4gbmV4dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICAgIHtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEJsb2NrOlxuXG4gICAgICBicmVhaztcblxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBwb3BSZW5kZXJMYW5lcyh3b3JrSW5Qcm9ncmVzcyk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgX25leHRTdGF0ZSA9IHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIF9wcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgICAgICAgdmFyIHByZXZJc0hpZGRlbiA9IF9wcmV2U3RhdGUgIT09IG51bGw7XG4gICAgICAgICAgdmFyIG5leHRJc0hpZGRlbiA9IF9uZXh0U3RhdGUgIT09IG51bGw7XG5cbiAgICAgICAgICBpZiAocHJldklzSGlkZGVuICE9PSBuZXh0SXNIaWRkZW4gJiYgbmV3UHJvcHMubW9kZSAhPT0gJ3Vuc3RhYmxlLWRlZmVyLXdpdGhvdXQtaGlkaW5nJykge1xuICAgICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gVXBkYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gdW5pdCBvZiB3b3JrIHRhZyAoXCIgKyB3b3JrSW5Qcm9ncmVzcy50YWcgKyBcIikuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW53aW5kV29yayh3b3JrSW5Qcm9ncmVzcywgcmVuZGVyTGFuZXMpIHtcbiAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgQ29tcG9uZW50ID0gd29ya0luUHJvZ3Jlc3MudHlwZTtcblxuICAgICAgICBpZiAoaXNDb250ZXh0UHJvdmlkZXIoQ29tcG9uZW50KSkge1xuICAgICAgICAgIHBvcENvbnRleHQod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKGZsYWdzICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gZmxhZ3MgJiB+U2hvdWxkQ2FwdHVyZSB8IERpZENhcHR1cmU7XG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHBvcFRvcExldmVsQ29udGV4dE9iamVjdCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICB2YXIgX2ZsYWdzID0gd29ya0luUHJvZ3Jlc3MuZmxhZ3M7XG5cbiAgICAgICAgaWYgKCEoKF9mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlRoZSByb290IGZhaWxlZCB0byB1bm1vdW50IGFmdGVyIGFuIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IF9mbGFncyAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTtcbiAgICAgICAgcmV0dXJuIHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBwb3BIeWRyYXRpb25TdGF0ZVxuICAgICAgICBwb3BIb3N0Q29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUNvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wU3VzcGVuc2VDb250ZXh0KHdvcmtJblByb2dyZXNzKTtcblxuICAgICAgICB2YXIgX2ZsYWdzMiA9IHdvcmtJblByb2dyZXNzLmZsYWdzO1xuXG4gICAgICAgIGlmIChfZmxhZ3MyICYgU2hvdWxkQ2FwdHVyZSkge1xuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmZsYWdzID0gX2ZsYWdzMiAmIH5TaG91bGRDYXB0dXJlIHwgRGlkQ2FwdHVyZTsgLy8gQ2FwdHVyZWQgYSBzdXNwZW5zZSBlZmZlY3QuIFJlLXJlbmRlciB0aGUgYm91bmRhcnkuXG5cbiAgICAgICAgICBpZiAoICh3b3JrSW5Qcm9ncmVzcy5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAgICAgICAgIHRyYW5zZmVyQWN0dWFsRHVyYXRpb24od29ya0luUHJvZ3Jlc3MpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHBvcFN1c3BlbnNlQ29udGV4dCh3b3JrSW5Qcm9ncmVzcyk7IC8vIFN1c3BlbnNlTGlzdCBkb2Vzbid0IGFjdHVhbGx5IGNhdGNoIGFueXRoaW5nLiBJdCBzaG91bGQndmUgYmVlblxuICAgICAgICAvLyBjYXVnaHQgYnkgYSBuZXN0ZWQgYm91bmRhcnkuIElmIG5vdCwgaXQgc2hvdWxkIGJ1YmJsZSB0aHJvdWdoLlxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgcG9wSG9zdENvbnRhaW5lcih3b3JrSW5Qcm9ncmVzcyk7XG4gICAgICByZXR1cm4gbnVsbDtcblxuICAgIGNhc2UgQ29udGV4dFByb3ZpZGVyOlxuICAgICAgcG9wUHJvdmlkZXIod29ya0luUHJvZ3Jlc3MpO1xuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKHdvcmtJblByb2dyZXNzKTtcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspIHtcbiAgc3dpdGNoIChpbnRlcnJ1cHRlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGNoaWxkQ29udGV4dFR5cGVzID0gaW50ZXJydXB0ZWRXb3JrLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7XG5cbiAgICAgICAgaWYgKGNoaWxkQ29udGV4dFR5cGVzICE9PSBudWxsICYmIGNoaWxkQ29udGV4dFR5cGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBwb3BDb250ZXh0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHBvcEhvc3RDb250YWluZXIoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgcG9wVG9wTGV2ZWxDb250ZXh0T2JqZWN0KGludGVycnVwdGVkV29yayk7XG4gICAgICAgIHJlc2V0V29ya0luUHJvZ3Jlc3NWZXJzaW9ucygpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcG9wSG9zdENvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwb3BIb3N0Q29udGFpbmVyKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICBwb3BTdXNwZW5zZUNvbnRleHQoaW50ZXJydXB0ZWRXb3JrKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBDb250ZXh0UHJvdmlkZXI6XG4gICAgICBwb3BQcm92aWRlcihpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIE9mZnNjcmVlbkNvbXBvbmVudDpcbiAgICBjYXNlIExlZ2FjeUhpZGRlbkNvbXBvbmVudDpcbiAgICAgIHBvcFJlbmRlckxhbmVzKGludGVycnVwdGVkV29yayk7XG4gICAgICBicmVhaztcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2UpIHtcbiAgLy8gSWYgdGhlIHZhbHVlIGlzIGFuIGVycm9yLCBjYWxsIHRoaXMgZnVuY3Rpb24gaW1tZWRpYXRlbHkgYWZ0ZXIgaXQgaXMgdGhyb3duXG4gIC8vIHNvIHRoZSBzdGFjayBpcyBhY2N1cmF0ZS5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgc291cmNlOiBzb3VyY2UsXG4gICAgc3RhY2s6IGdldFN0YWNrQnlGaWJlckluRGV2QW5kUHJvZChzb3VyY2UpXG4gIH07XG59XG5cbi8vIFRoaXMgbW9kdWxlIGlzIGZvcmtlZCBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuLy8gQnkgZGVmYXVsdCwgcmV0dXJuIGB0cnVlYCB0byBsb2cgZXJyb3JzIHRvIHRoZSBjb25zb2xlLlxuLy8gRm9ya3MgY2FuIHJldHVybiBgZmFsc2VgIGlmIHRoaXMgaXNuJ3QgZGVzaXJhYmxlLlxuZnVuY3Rpb24gc2hvd0Vycm9yRGlhbG9nKGJvdW5kYXJ5LCBlcnJvckluZm8pIHtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGxvZ0NhcHR1cmVkRXJyb3IoYm91bmRhcnksIGVycm9ySW5mbykge1xuICB0cnkge1xuICAgIHZhciBsb2dFcnJvciA9IHNob3dFcnJvckRpYWxvZyhib3VuZGFyeSwgZXJyb3JJbmZvKTsgLy8gQWxsb3cgaW5qZWN0ZWQgc2hvd0Vycm9yRGlhbG9nKCkgdG8gcHJldmVudCBkZWZhdWx0IGNvbnNvbGUuZXJyb3IgbG9nZ2luZy5cbiAgICAvLyBUaGlzIGVuYWJsZXMgcmVuZGVyZXJzIGxpa2UgUmVhY3ROYXRpdmUgdG8gYmV0dGVyIG1hbmFnZSByZWRib3ggYmVoYXZpb3IuXG5cbiAgICBpZiAobG9nRXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIGVycm9yID0gZXJyb3JJbmZvLnZhbHVlO1xuXG4gICAgaWYgKHRydWUpIHtcbiAgICAgIHZhciBzb3VyY2UgPSBlcnJvckluZm8uc291cmNlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdmFyIGNvbXBvbmVudFN0YWNrID0gc3RhY2sgIT09IG51bGwgPyBzdGFjayA6ICcnOyAvLyBCcm93c2VycyBzdXBwb3J0IHNpbGVuY2luZyB1bmNhdWdodCBlcnJvcnMgYnkgY2FsbGluZ1xuICAgICAgLy8gYHByZXZlbnREZWZhdWx0KClgIGluIHdpbmRvdyBgZXJyb3JgIGhhbmRsZXIuXG4gICAgICAvLyBXZSByZWNvcmQgdGhpcyBpbmZvcm1hdGlvbiBhcyBhbiBleHBhbmRvIG9uIHRoZSBlcnJvci5cblxuICAgICAgaWYgKGVycm9yICE9IG51bGwgJiYgZXJyb3IuX3N1cHByZXNzTG9nZ2luZykge1xuICAgICAgICBpZiAoYm91bmRhcnkudGFnID09PSBDbGFzc0NvbXBvbmVudCkge1xuICAgICAgICAgIC8vIFRoZSBlcnJvciBpcyByZWNvdmVyYWJsZSBhbmQgd2FzIHNpbGVuY2VkLlxuICAgICAgICAgIC8vIElnbm9yZSBpdCBhbmQgZG9uJ3QgcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuICAgICAgICAgIC8vIFRoaXMgaXMgaGFuZHkgZm9yIHRlc3RpbmcgZXJyb3IgYm91bmRhcmllcyB3aXRob3V0IG5vaXNlLlxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBUaGUgZXJyb3IgaXMgZmF0YWwuIFNpbmNlIHRoZSBzaWxlbmNpbmcgbWlnaHQgaGF2ZVxuICAgICAgICAvLyBiZWVuIGFjY2lkZW50YWwsIHdlJ2xsIHN1cmZhY2UgaXQgYW55d2F5LlxuICAgICAgICAvLyBIb3dldmVyLCB0aGUgYnJvd3NlciB3b3VsZCBoYXZlIHNpbGVuY2VkIHRoZSBvcmlnaW5hbCBlcnJvclxuICAgICAgICAvLyBzbyB3ZSdsbCBwcmludCBpdCBmaXJzdCwgYW5kIHRoZW4gcHJpbnQgdGhlIHN0YWNrIGFkZGVuZHVtLlxuXG5cbiAgICAgICAgY29uc29sZVsnZXJyb3InXShlcnJvcik7IC8vIERvbid0IHRyYW5zZm9ybSB0byBvdXIgd3JhcHBlclxuICAgICAgICAvLyBGb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIHRoaXMgYmxvY2ssIHNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L3B1bGwvMTMzODRcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBzb3VyY2UgPyBnZXRDb21wb25lbnROYW1lKHNvdXJjZS50eXBlKSA6IG51bGw7XG4gICAgICB2YXIgY29tcG9uZW50TmFtZU1lc3NhZ2UgPSBjb21wb25lbnROYW1lID8gXCJUaGUgYWJvdmUgZXJyb3Igb2NjdXJyZWQgaW4gdGhlIDxcIiArIGNvbXBvbmVudE5hbWUgKyBcIj4gY29tcG9uZW50OlwiIDogJ1RoZSBhYm92ZSBlcnJvciBvY2N1cnJlZCBpbiBvbmUgb2YgeW91ciBSZWFjdCBjb21wb25lbnRzOic7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU1lc3NhZ2U7XG4gICAgICB2YXIgZXJyb3JCb3VuZGFyeU5hbWUgPSBnZXRDb21wb25lbnROYW1lKGJvdW5kYXJ5LnR5cGUpO1xuXG4gICAgICBpZiAoZXJyb3JCb3VuZGFyeU5hbWUpIHtcbiAgICAgICAgZXJyb3JCb3VuZGFyeU1lc3NhZ2UgPSBcIlJlYWN0IHdpbGwgdHJ5IHRvIHJlY3JlYXRlIHRoaXMgY29tcG9uZW50IHRyZWUgZnJvbSBzY3JhdGNoIFwiICsgKFwidXNpbmcgdGhlIGVycm9yIGJvdW5kYXJ5IHlvdSBwcm92aWRlZCwgXCIgKyBlcnJvckJvdW5kYXJ5TmFtZSArIFwiLlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yQm91bmRhcnlNZXNzYWdlID0gJ0NvbnNpZGVyIGFkZGluZyBhbiBlcnJvciBib3VuZGFyeSB0byB5b3VyIHRyZWUgdG8gY3VzdG9taXplIGVycm9yIGhhbmRsaW5nIGJlaGF2aW9yLlxcbicgKyAnVmlzaXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL2Vycm9yLWJvdW5kYXJpZXMgdG8gbGVhcm4gbW9yZSBhYm91dCBlcnJvciBib3VuZGFyaWVzLic7XG4gICAgICB9XG5cbiAgICAgIHZhciBjb21iaW5lZE1lc3NhZ2UgPSBjb21wb25lbnROYW1lTWVzc2FnZSArIFwiXFxuXCIgKyBjb21wb25lbnRTdGFjayArIFwiXFxuXFxuXCIgKyAoXCJcIiArIGVycm9yQm91bmRhcnlNZXNzYWdlKTsgLy8gSW4gZGV2ZWxvcG1lbnQsIHdlIHByb3ZpZGUgb3VyIG93biBtZXNzYWdlIHdpdGgganVzdCB0aGUgY29tcG9uZW50IHN0YWNrLlxuICAgICAgLy8gV2UgZG9uJ3QgaW5jbHVkZSB0aGUgb3JpZ2luYWwgZXJyb3IgbWVzc2FnZSBhbmQgSlMgc3RhY2sgYmVjYXVzZSB0aGUgYnJvd3NlclxuICAgICAgLy8gaGFzIGFscmVhZHkgcHJpbnRlZCBpdC4gRXZlbiBpZiB0aGUgYXBwbGljYXRpb24gc3dhbGxvd3MgdGhlIGVycm9yLCBpdCBpcyBzdGlsbFxuICAgICAgLy8gZGlzcGxheWVkIGJ5IHRoZSBicm93c2VyIHRoYW5rcyB0byB0aGUgREVWLW9ubHkgZmFrZSBldmVudCB0cmljayBpbiBSZWFjdEVycm9yVXRpbHMuXG5cbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oY29tYmluZWRNZXNzYWdlKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEluIHByb2R1Y3Rpb24sIHdlIHByaW50IHRoZSBlcnJvciBkaXJlY3RseS5cbiAgICAgIC8vIFRoaXMgd2lsbCBpbmNsdWRlIHRoZSBtZXNzYWdlLCB0aGUgSlMgc3RhY2ssIGFuZCBhbnl0aGluZyB0aGUgYnJvd3NlciB3YW50cyB0byBzaG93LlxuICAgICAgLy8gV2UgcGFzcyB0aGUgZXJyb3Igb2JqZWN0IGluc3RlYWQgb2YgY3VzdG9tIG1lc3NhZ2Ugc28gdGhhdCB0aGUgYnJvd3NlciBkaXNwbGF5cyB0aGUgZXJyb3IgbmF0aXZlbHkuXG4gICAgICBjb25zb2xlWydlcnJvciddKGVycm9yKTsgLy8gRG9uJ3QgdHJhbnNmb3JtIHRvIG91ciB3cmFwcGVyXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gVGhpcyBtZXRob2QgbXVzdCBub3QgdGhyb3csIG9yIFJlYWN0IGludGVybmFsIHN0YXRlIHdpbGwgZ2V0IG1lc3NlZCB1cC5cbiAgICAvLyBJZiBjb25zb2xlLmVycm9yIGlzIG92ZXJyaWRkZW4sIG9yIGxvZ0NhcHR1cmVkRXJyb3IoKSBzaG93cyBhIGRpYWxvZyB0aGF0IHRocm93cyxcbiAgICAvLyB3ZSB3YW50IHRvIHJlcG9ydCB0aGlzIGVycm9yIG91dHNpZGUgb2YgdGhlIG5vcm1hbCBzdGFjayBhcyBhIGxhc3QgcmVzb3J0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTMxODhcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSk7XG4gIH1cbn1cblxudmFyIFBvc3NpYmx5V2Vha01hcCQxID0gdHlwZW9mIFdlYWtNYXAgPT09ICdmdW5jdGlvbicgPyBXZWFrTWFwIDogTWFwO1xuXG5mdW5jdGlvbiBjcmVhdGVSb290RXJyb3JVcGRhdGUoZmliZXIsIGVycm9ySW5mbywgbGFuZSkge1xuICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBsYW5lKTsgLy8gVW5tb3VudCB0aGUgcm9vdCBieSByZW5kZXJpbmcgbnVsbC5cblxuICB1cGRhdGUudGFnID0gQ2FwdHVyZVVwZGF0ZTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogbnVsbFxuICB9O1xuICB2YXIgZXJyb3IgPSBlcnJvckluZm8udmFsdWU7XG5cbiAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gKCkge1xuICAgIG9uVW5jYXVnaHRFcnJvcihlcnJvcik7XG4gICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIGxhbmUpIHtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVVwZGF0ZShOb1RpbWVzdGFtcCwgbGFuZSk7XG4gIHVwZGF0ZS50YWcgPSBDYXB0dXJlVXBkYXRlO1xuICB2YXIgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yID0gZmliZXIudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7XG5cbiAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgZXJyb3IkMSA9IGVycm9ySW5mby52YWx1ZTtcblxuICAgIHVwZGF0ZS5wYXlsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgbG9nQ2FwdHVyZWRFcnJvcihmaWJlciwgZXJyb3JJbmZvKTtcbiAgICAgIHJldHVybiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZXJyb3IkMSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBpbnN0ID0gZmliZXIuc3RhdGVOb2RlO1xuXG4gIGlmIChpbnN0ICE9PSBudWxsICYmIHR5cGVvZiBpbnN0LmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdXBkYXRlLmNhbGxiYWNrID0gZnVuY3Rpb24gY2FsbGJhY2soKSB7XG4gICAgICB7XG4gICAgICAgIG1hcmtGYWlsZWRFcnJvckJvdW5kYXJ5Rm9ySG90UmVsb2FkaW5nKGZpYmVyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVG8gcHJlc2VydmUgdGhlIHByZWV4aXN0aW5nIHJldHJ5IGJlaGF2aW9yIG9mIGVycm9yIGJvdW5kYXJpZXMsXG4gICAgICAgIC8vIHdlIGtlZXAgdHJhY2sgb2Ygd2hpY2ggb25lcyBhbHJlYWR5IGZhaWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgICAgLy8gVGhpcyBnZXRzIHJlc2V0IGJlZm9yZSB3ZSB5aWVsZCBiYWNrIHRvIHRoZSBicm93c2VyLlxuICAgICAgICAvLyBUT0RPOiBXYXJuIGluIHN0cmljdCBtb2RlIGlmIGdldERlcml2ZWRTdGF0ZUZyb21FcnJvciBpc1xuICAgICAgICAvLyBub3QgZGVmaW5lZC5cbiAgICAgICAgbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZCh0aGlzKTsgLy8gT25seSBsb2cgaGVyZSBpZiBjb21wb25lbnREaWRDYXRjaCBpcyB0aGUgb25seSBlcnJvciBib3VuZGFyeSBtZXRob2QgZGVmaW5lZFxuXG4gICAgICAgIGxvZ0NhcHR1cmVkRXJyb3IoZmliZXIsIGVycm9ySW5mbyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlcnJvciQxID0gZXJyb3JJbmZvLnZhbHVlO1xuICAgICAgdmFyIHN0YWNrID0gZXJyb3JJbmZvLnN0YWNrO1xuICAgICAgdGhpcy5jb21wb25lbnREaWRDYXRjaChlcnJvciQxLCB7XG4gICAgICAgIGNvbXBvbmVudFN0YWNrOiBzdGFjayAhPT0gbnVsbCA/IHN0YWNrIDogJydcbiAgICAgIH0pO1xuXG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgLy8gSWYgY29tcG9uZW50RGlkQ2F0Y2ggaXMgdGhlIG9ubHkgZXJyb3IgYm91bmRhcnkgbWV0aG9kIGRlZmluZWQsXG4gICAgICAgICAgLy8gdGhlbiBpdCBuZWVkcyB0byBjYWxsIHNldFN0YXRlIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMuXG4gICAgICAgICAgLy8gSWYgbm8gc3RhdGUgdXBkYXRlIGlzIHNjaGVkdWxlZCB0aGVuIHRoZSBib3VuZGFyeSB3aWxsIHN3YWxsb3cgdGhlIGVycm9yLlxuICAgICAgICAgIGlmICghaW5jbHVkZXNTb21lTGFuZShmaWJlci5sYW5lcywgU3luY0xhbmUpKSB7XG4gICAgICAgICAgICBlcnJvcignJXM6IEVycm9yIGJvdW5kYXJpZXMgc2hvdWxkIGltcGxlbWVudCBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoKS4gJyArICdJbiB0aGF0IG1ldGhvZCwgcmV0dXJuIGEgc3RhdGUgdXBkYXRlIHRvIGRpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBvciBmYWxsYmFjayBVSS4nLCBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdVbmtub3duJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICB1cGRhdGUuY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBtYXJrRmFpbGVkRXJyb3JCb3VuZGFyeUZvckhvdFJlbG9hZGluZyhmaWJlcik7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB1cGRhdGU7XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFBpbmdMaXN0ZW5lcihyb290LCB3YWtlYWJsZSwgbGFuZXMpIHtcbiAgLy8gQXR0YWNoIGEgbGlzdGVuZXIgdG8gdGhlIHByb21pc2UgdG8gXCJwaW5nXCIgdGhlIHJvb3QgYW5kIHJldHJ5LiBCdXQgb25seSBpZlxuICAvLyBvbmUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCBmb3IgdGhlIGxhbmVzIHdlJ3JlIGN1cnJlbnRseSByZW5kZXJpbmcgKHdoaWNoXG4gIC8vIGFjdHMgbGlrZSBhIFwidGhyZWFkIElEXCIgaGVyZSkuXG4gIHZhciBwaW5nQ2FjaGUgPSByb290LnBpbmdDYWNoZTtcbiAgdmFyIHRocmVhZElEcztcblxuICBpZiAocGluZ0NhY2hlID09PSBudWxsKSB7XG4gICAgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwJDEoKTtcbiAgICB0aHJlYWRJRHMgPSBuZXcgU2V0KCk7XG4gICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJlYWRJRHMgPSBwaW5nQ2FjaGUuZ2V0KHdha2VhYmxlKTtcblxuICAgIGlmICh0aHJlYWRJRHMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyZWFkSURzID0gbmV3IFNldCgpO1xuICAgICAgcGluZ0NhY2hlLnNldCh3YWtlYWJsZSwgdGhyZWFkSURzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIXRocmVhZElEcy5oYXMobGFuZXMpKSB7XG4gICAgLy8gTWVtb2l6ZSB1c2luZyB0aGUgdGhyZWFkIElEIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICB0aHJlYWRJRHMuYWRkKGxhbmVzKTtcbiAgICB2YXIgcGluZyA9IHBpbmdTdXNwZW5kZWRSb290LmJpbmQobnVsbCwgcm9vdCwgd2FrZWFibGUsIGxhbmVzKTtcbiAgICB3YWtlYWJsZS50aGVuKHBpbmcsIHBpbmcpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93RXhjZXB0aW9uKHJvb3QsIHJldHVybkZpYmVyLCBzb3VyY2VGaWJlciwgdmFsdWUsIHJvb3RSZW5kZXJMYW5lcykge1xuICAvLyBUaGUgc291cmNlIGZpYmVyIGRpZCBub3QgY29tcGxldGUuXG4gIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7IC8vIEl0cyBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgc291cmNlRmliZXIuZmlyc3RFZmZlY3QgPSBzb3VyY2VGaWJlci5sYXN0RWZmZWN0ID0gbnVsbDtcblxuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgaXMgYSB3YWtlYWJsZS5cbiAgICB2YXIgd2FrZWFibGUgPSB2YWx1ZTtcblxuICAgIGlmICgoc291cmNlRmliZXIubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgLy8gUmVzZXQgdGhlIG1lbW9pemVkU3RhdGUgdG8gd2hhdCBpdCB3YXMgYmVmb3JlIHdlIGF0dGVtcHRlZFxuICAgICAgLy8gdG8gcmVuZGVyIGl0LlxuICAgICAgdmFyIGN1cnJlbnRTb3VyY2UgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgIGlmIChjdXJyZW50U291cmNlKSB7XG4gICAgICAgIHNvdXJjZUZpYmVyLnVwZGF0ZVF1ZXVlID0gY3VycmVudFNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgICAgICAgc291cmNlRmliZXIubWVtb2l6ZWRTdGF0ZSA9IGN1cnJlbnRTb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgICAgICAgc291cmNlRmliZXIubGFuZXMgPSBjdXJyZW50U291cmNlLmxhbmVzO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc291cmNlRmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuICAgICAgICBzb3VyY2VGaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaGFzSW52aXNpYmxlUGFyZW50Qm91bmRhcnkgPSBoYXNTdXNwZW5zZUNvbnRleHQoc3VzcGVuc2VTdGFja0N1cnNvci5jdXJyZW50LCBJbnZpc2libGVQYXJlbnRTdXNwZW5zZUNvbnRleHQpOyAvLyBTY2hlZHVsZSB0aGUgbmVhcmVzdCBTdXNwZW5zZSB0byByZS1yZW5kZXIgdGhlIHRpbWVkIG91dCB2aWV3LlxuXG4gICAgdmFyIF93b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gICAgZG8ge1xuICAgICAgaWYgKF93b3JrSW5Qcm9ncmVzcy50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIHNob3VsZENhcHR1cmVTdXNwZW5zZShfd29ya0luUHJvZ3Jlc3MsIGhhc0ludmlzaWJsZVBhcmVudEJvdW5kYXJ5KSkge1xuICAgICAgICAvLyBGb3VuZCB0aGUgbmVhcmVzdCBib3VuZGFyeS5cbiAgICAgICAgLy8gU3Rhc2ggdGhlIHByb21pc2Ugb24gdGhlIGJvdW5kYXJ5IGZpYmVyLiBJZiB0aGUgYm91bmRhcnkgdGltZXMgb3V0LCB3ZSdsbFxuICAgICAgICAvLyBhdHRhY2ggYW5vdGhlciBsaXN0ZW5lciB0byBmbGlwIHRoZSBib3VuZGFyeSBiYWNrIHRvIGl0cyBub3JtYWwgc3RhdGUuXG4gICAgICAgIHZhciB3YWtlYWJsZXMgPSBfd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHdha2VhYmxlcyA9PT0gbnVsbCkge1xuICAgICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICB1cGRhdGVRdWV1ZS5hZGQod2FrZWFibGUpO1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IHVwZGF0ZVF1ZXVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHdha2VhYmxlcy5hZGQod2FrZWFibGUpO1xuICAgICAgICB9IC8vIElmIHRoZSBib3VuZGFyeSBpcyBvdXRzaWRlIG9mIGJsb2NraW5nIG1vZGUsIHdlIHNob3VsZCAqbm90KlxuICAgICAgICAvLyBzdXNwZW5kIHRoZSBjb21taXQuIFByZXRlbmQgYXMgaWYgdGhlIHN1c3BlbmRlZCBjb21wb25lbnQgcmVuZGVyZWRcbiAgICAgICAgLy8gbnVsbCBhbmQga2VlcCByZW5kZXJpbmcuIEluIHRoZSBjb21taXQgcGhhc2UsIHdlJ2xsIHNjaGVkdWxlIGFcbiAgICAgICAgLy8gc3Vic2VxdWVudCBzeW5jaHJvbm91cyB1cGRhdGUgdG8gcmUtcmVuZGVyIHRoZSBTdXNwZW5zZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gTm90ZTogSXQgZG9lc24ndCBtYXR0ZXIgd2hldGhlciB0aGUgY29tcG9uZW50IHRoYXQgc3VzcGVuZGVkIHdhc1xuICAgICAgICAvLyBpbnNpZGUgYSBibG9ja2luZyBtb2RlIHRyZWUuIElmIHRoZSBTdXNwZW5zZSBpcyBvdXRzaWRlIG9mIGl0LCB3ZVxuICAgICAgICAvLyBzaG91bGQgKm5vdCogc3VzcGVuZCB0aGUgY29tbWl0LlxuXG5cbiAgICAgICAgaWYgKChfd29ya0luUHJvZ3Jlc3MubW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgICAgICAgIF93b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBEaWRDYXB0dXJlO1xuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzIHw9IEZvcmNlVXBkYXRlRm9yTGVnYWN5U3VzcGVuc2U7IC8vIFdlJ3JlIGdvaW5nIHRvIGNvbW1pdCB0aGlzIGZpYmVyIGV2ZW4gdGhvdWdoIGl0IGRpZG4ndCBjb21wbGV0ZS5cbiAgICAgICAgICAvLyBCdXQgd2Ugc2hvdWxkbid0IGNhbGwgYW55IGxpZmVjeWNsZSBtZXRob2RzIG9yIGNhbGxiYWNrcy4gUmVtb3ZlXG4gICAgICAgICAgLy8gYWxsIGxpZmVjeWNsZSBlZmZlY3QgdGFncy5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmZsYWdzICY9IH4oTGlmZWN5Y2xlRWZmZWN0TWFzayB8IEluY29tcGxldGUpO1xuXG4gICAgICAgICAgaWYgKHNvdXJjZUZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50U291cmNlRmliZXIgPSBzb3VyY2VGaWJlci5hbHRlcm5hdGU7XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U291cmNlRmliZXIgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBtb3VudC4gQ2hhbmdlIHRoZSB0YWcgc28gaXQncyBub3QgbWlzdGFrZW4gZm9yIGFcbiAgICAgICAgICAgICAgLy8gY29tcGxldGVkIGNsYXNzIGNvbXBvbmVudC4gRm9yIGV4YW1wbGUsIHdlIHNob3VsZCBub3QgY2FsbFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRXaWxsVW5tb3VudCBpZiBpdCBpcyBkZWxldGVkLlxuICAgICAgICAgICAgICBzb3VyY2VGaWJlci50YWcgPSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBXaGVuIHdlIHRyeSByZW5kZXJpbmcgYWdhaW4sIHdlIHNob3VsZCBub3QgcmV1c2UgdGhlIGN1cnJlbnQgZmliZXIsXG4gICAgICAgICAgICAgIC8vIHNpbmNlIGl0J3Mga25vd24gdG8gYmUgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLiBVc2UgYSBmb3JjZSB1cGRhdGUgdG9cbiAgICAgICAgICAgICAgLy8gcHJldmVudCBhIGJhaWwgb3V0LlxuICAgICAgICAgICAgICB2YXIgdXBkYXRlID0gY3JlYXRlVXBkYXRlKE5vVGltZXN0YW1wLCBTeW5jTGFuZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZS50YWcgPSBGb3JjZVVwZGF0ZTtcbiAgICAgICAgICAgICAgZW5xdWV1ZVVwZGF0ZShzb3VyY2VGaWJlciwgdXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFRoZSBzb3VyY2UgZmliZXIgZGlkIG5vdCBjb21wbGV0ZS4gTWFyayBpdCB3aXRoIFN5bmMgcHJpb3JpdHkgdG9cbiAgICAgICAgICAvLyBpbmRpY2F0ZSB0aGF0IGl0IHN0aWxsIGhhcyBwZW5kaW5nIHdvcmsuXG5cblxuICAgICAgICAgIHNvdXJjZUZpYmVyLmxhbmVzID0gbWVyZ2VMYW5lcyhzb3VyY2VGaWJlci5sYW5lcywgU3luY0xhbmUpOyAvLyBFeGl0IHdpdGhvdXQgc3VzcGVuZGluZy5cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBDb25maXJtZWQgdGhhdCB0aGUgYm91bmRhcnkgaXMgaW4gYSBjb25jdXJyZW50IG1vZGUgdHJlZS4gQ29udGludWVcbiAgICAgICAgLy8gd2l0aCB0aGUgbm9ybWFsIHN1c3BlbmQgcGF0aC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gQWZ0ZXIgdGhpcyB3ZSdsbCB1c2UgYSBzZXQgb2YgaGV1cmlzdGljcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzXG4gICAgICAgIC8vIHJlbmRlciBwYXNzIHdpbGwgcnVuIHRvIGNvbXBsZXRpb24gb3IgcmVzdGFydCBvciBcInN1c3BlbmRcIiB0aGUgY29tbWl0LlxuICAgICAgICAvLyBUaGUgYWN0dWFsIGxvZ2ljIGZvciB0aGlzIGlzIHNwcmVhZCBvdXQgaW4gZGlmZmVyZW50IHBsYWNlcy5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBmaXJzdCBwcmluY2lwbGUgaXMgdGhhdCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kIHdoZW4gd2UgY29tcGxldGVcbiAgICAgICAgLy8gYSByb290LCB0aGVuIHdlIHNob3VsZCBhbHNvIHJlc3RhcnQgaWYgd2UgZ2V0IGFuIHVwZGF0ZSBvciBwaW5nIHRoYXRcbiAgICAgICAgLy8gbWlnaHQgdW5zdXNwZW5kIGl0LCBhbmQgdmljZSB2ZXJzYS4gVGhlIG9ubHkgcmVhc29uIHRvIHN1c3BlbmQgaXNcbiAgICAgICAgLy8gYmVjYXVzZSB5b3UgdGhpbmsgeW91IG1pZ2h0IHdhbnQgdG8gcmVzdGFydCBiZWZvcmUgY29tbWl0dGluZy4gSG93ZXZlcixcbiAgICAgICAgLy8gaXQgZG9lc24ndCBtYWtlIHNlbnNlIHRvIHJlc3RhcnQgb25seSB3aGlsZSBpbiB0aGUgcGVyaW9kIHdlJ3JlIHN1c3BlbmRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gUmVzdGFydGluZyB0b28gYWdncmVzc2l2ZWx5IGlzIGFsc28gbm90IGdvb2QgYmVjYXVzZSBpdCBzdGFydmVzIG91dCBhbnlcbiAgICAgICAgLy8gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFNvIHdlIHVzZSBoZXVyaXN0aWNzIHRvIGRldGVybWluZSB3aGVuLlxuICAgICAgICAvLyBTdXNwZW5zZSBIZXVyaXN0aWNzXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIG5vdGhpbmcgdGhyZXcgYSBQcm9taXNlIG9yIGFsbCB0aGUgc2FtZSBmYWxsYmFja3MgYXJlIGFscmVhZHkgc2hvd2luZyxcbiAgICAgICAgLy8gdGhlbiBkb24ndCBzdXNwZW5kL3Jlc3RhcnQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHRoaXMgaXMgYW4gaW5pdGlhbCByZW5kZXIgb2YgYSBuZXcgdHJlZSBvZiBTdXNwZW5zZSBib3VuZGFyaWVzIGFuZFxuICAgICAgICAvLyB0aG9zZSB0cmlnZ2VyIGEgZmFsbGJhY2ssIHRoZW4gZG9uJ3Qgc3VzcGVuZC9yZXN0YXJ0LiBXZSB3YW50IHRvIGVuc3VyZVxuICAgICAgICAvLyB0aGF0IHdlIGNhbiBzaG93IHRoZSBpbml0aWFsIGxvYWRpbmcgc3RhdGUgYXMgcXVpY2tseSBhcyBwb3NzaWJsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gSWYgd2UgaGl0IGEgXCJEZWxheWVkXCIgY2FzZSwgc3VjaCBhcyB3aGVuIHdlJ2Qgc3dpdGNoIGZyb20gY29udGVudCBiYWNrIGludG9cbiAgICAgICAgLy8gYSBmYWxsYmFjaywgdGhlbiB3ZSBzaG91bGQgYWx3YXlzIHN1c3BlbmQvcmVzdGFydC4gVHJhbnNpdGlvbnMgYXBwbHlcbiAgICAgICAgLy8gdG8gdGhpcyBjYXNlLiBJZiBub25lIGlzIGRlZmluZWQsIEpORCBpcyB1c2VkIGluc3RlYWQuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIElmIHdlJ3JlIGFscmVhZHkgc2hvd2luZyBhIGZhbGxiYWNrIGFuZCBpdCBnZXRzIFwicmV0cmllZFwiLCBhbGxvd2luZyB1cyB0byBzaG93XG4gICAgICAgIC8vIGFub3RoZXIgbGV2ZWwsIGJ1dCB0aGVyZSdzIHN0aWxsIGFuIGlubmVyIGJvdW5kYXJ5IHRoYXQgd291bGQgc2hvdyBhIGZhbGxiYWNrLFxuICAgICAgICAvLyB0aGVuIHdlIHN1c3BlbmQvcmVzdGFydCBmb3IgNTAwbXMgc2luY2UgdGhlIGxhc3QgdGltZSB3ZSBzaG93ZWQgYSBmYWxsYmFja1xuICAgICAgICAvLyBhbnl3aGVyZSBpbiB0aGUgdHJlZS4gVGhpcyBlZmZlY3RpdmVseSB0aHJvdHRsZXMgcHJvZ3Jlc3NpdmUgbG9hZGluZyBpbnRvIGFcbiAgICAgICAgLy8gY29uc2lzdGVudCB0cmFpbiBvZiBjb21taXRzLiBUaGlzIGFsc28gZ2l2ZXMgdXMgYW4gb3Bwb3J0dW5pdHkgdG8gcmVzdGFydCB0b1xuICAgICAgICAvLyBnZXQgdG8gdGhlIGNvbXBsZXRlZCBzdGF0ZSBzbGlnaHRseSBlYXJsaWVyLlxuICAgICAgICAvL1xuICAgICAgICAvLyBJZiB0aGVyZSdzIGFtYmlndWl0eSBkdWUgdG8gYmF0Y2hpbmcgaXQncyByZXNvbHZlZCBpbiBwcmVmZXJlbmNlIG9mOlxuICAgICAgICAvLyAxKSBcImRlbGF5ZWRcIiwgMikgXCJpbml0aWFsIHJlbmRlclwiLCAzKSBcInJldHJ5XCIuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdlIHdhbnQgdG8gZW5zdXJlIHRoYXQgYSBcImJ1c3lcIiBzdGF0ZSBkb2Vzbid0IGdldCBmb3JjZSBjb21taXR0ZWQuIFdlIHdhbnQgdG9cbiAgICAgICAgLy8gZW5zdXJlIHRoYXQgbmV3IGluaXRpYWwgbG9hZGluZyBzdGF0ZXMgY2FuIGNvbW1pdCBhcyBzb29uIGFzIHBvc3NpYmxlLlxuXG5cbiAgICAgICAgYXR0YWNoUGluZ0xpc3RlbmVyKHJvb3QsIHdha2VhYmxlLCByb290UmVuZGVyTGFuZXMpO1xuICAgICAgICBfd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgX3dvcmtJblByb2dyZXNzLmxhbmVzID0gcm9vdFJlbmRlckxhbmVzO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IC8vIFRoaXMgYm91bmRhcnkgYWxyZWFkeSBjYXB0dXJlZCBkdXJpbmcgdGhpcyByZW5kZXIuIENvbnRpbnVlIHRvIHRoZSBuZXh0XG4gICAgICAvLyBib3VuZGFyeS5cblxuXG4gICAgICBfd29ya0luUHJvZ3Jlc3MgPSBfd29ya0luUHJvZ3Jlc3MucmV0dXJuO1xuICAgIH0gd2hpbGUgKF93b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCk7IC8vIE5vIGJvdW5kYXJ5IHdhcyBmb3VuZC4gRmFsbHRocm91Z2ggdG8gZXJyb3IgbW9kZS5cbiAgICAvLyBUT0RPOiBVc2UgaW52YXJpYW50IHNvIHRoZSBtZXNzYWdlIGlzIHN0cmlwcGVkIGluIHByb2Q/XG5cblxuICAgIHZhbHVlID0gbmV3IEVycm9yKChnZXRDb21wb25lbnROYW1lKHNvdXJjZUZpYmVyLnR5cGUpIHx8ICdBIFJlYWN0IGNvbXBvbmVudCcpICsgJyBzdXNwZW5kZWQgd2hpbGUgcmVuZGVyaW5nLCBidXQgbm8gZmFsbGJhY2sgVUkgd2FzIHNwZWNpZmllZC5cXG4nICsgJ1xcbicgKyAnQWRkIGEgPFN1c3BlbnNlIGZhbGxiYWNrPS4uLj4gY29tcG9uZW50IGhpZ2hlciBpbiB0aGUgdHJlZSB0byAnICsgJ3Byb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LicpO1xuICB9IC8vIFdlIGRpZG4ndCBmaW5kIGEgYm91bmRhcnkgdGhhdCBjb3VsZCBoYW5kbGUgdGhpcyB0eXBlIG9mIGV4Y2VwdGlvbi4gU3RhcnRcbiAgLy8gb3ZlciBhbmQgdHJhdmVyc2UgcGFyZW50IHBhdGggYWdhaW4sIHRoaXMgdGltZSB0cmVhdGluZyB0aGUgZXhjZXB0aW9uXG4gIC8vIGFzIGFuIGVycm9yLlxuXG5cbiAgcmVuZGVyRGlkRXJyb3IoKTtcbiAgdmFsdWUgPSBjcmVhdGVDYXB0dXJlZFZhbHVlKHZhbHVlLCBzb3VyY2VGaWJlcik7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IHJldHVybkZpYmVyO1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHdvcmtJblByb2dyZXNzLnRhZykge1xuICAgICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZXJyb3JJbmZvID0gdmFsdWU7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgfD0gU2hvdWxkQ2FwdHVyZTtcbiAgICAgICAgICB2YXIgbGFuZSA9IHBpY2tBcmJpdHJhcnlMYW5lKHJvb3RSZW5kZXJMYW5lcyk7XG4gICAgICAgICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBtZXJnZUxhbmVzKHdvcmtJblByb2dyZXNzLmxhbmVzLCBsYW5lKTtcblxuICAgICAgICAgIHZhciBfdXBkYXRlID0gY3JlYXRlUm9vdEVycm9yVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfZXJyb3JJbmZvLCBsYW5lKTtcblxuICAgICAgICAgIGVucXVldWVDYXB0dXJlZFVwZGF0ZSh3b3JrSW5Qcm9ncmVzcywgX3VwZGF0ZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIC8vIENhcHR1cmUgYW5kIHJldHJ5XG4gICAgICAgIHZhciBlcnJvckluZm8gPSB2YWx1ZTtcbiAgICAgICAgdmFyIGN0b3IgPSB3b3JrSW5Qcm9ncmVzcy50eXBlO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSB3b3JrSW5Qcm9ncmVzcy5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKCh3b3JrSW5Qcm9ncmVzcy5mbGFncyAmIERpZENhcHR1cmUpID09PSBOb0ZsYWdzICYmICh0eXBlb2YgY3Rvci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IgPT09ICdmdW5jdGlvbicgfHwgaW5zdGFuY2UgIT09IG51bGwgJiYgdHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkpIHtcbiAgICAgICAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyB8PSBTaG91bGRDYXB0dXJlO1xuXG4gICAgICAgICAgdmFyIF9sYW5lID0gcGlja0FyYml0cmFyeUxhbmUocm9vdFJlbmRlckxhbmVzKTtcblxuICAgICAgICAgIHdvcmtJblByb2dyZXNzLmxhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzcy5sYW5lcywgX2xhbmUpOyAvLyBTY2hlZHVsZSB0aGUgZXJyb3IgYm91bmRhcnkgdG8gcmUtcmVuZGVyIHVzaW5nIHVwZGF0ZWQgc3RhdGVcblxuICAgICAgICAgIHZhciBfdXBkYXRlMiA9IGNyZWF0ZUNsYXNzRXJyb3JVcGRhdGUod29ya0luUHJvZ3Jlc3MsIGVycm9ySW5mbywgX2xhbmUpO1xuXG4gICAgICAgICAgZW5xdWV1ZUNhcHR1cmVkVXBkYXRlKHdvcmtJblByb2dyZXNzLCBfdXBkYXRlMik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MgPSB3b3JrSW5Qcm9ncmVzcy5yZXR1cm47XG4gIH0gd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKTtcbn1cblxudmFyIGRpZFdhcm5BYm91dFVuZGVmaW5lZFNuYXBzaG90QmVmb3JlVXBkYXRlID0gbnVsbDtcblxue1xuICBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IG5ldyBTZXQoKTtcbn1cblxudmFyIFBvc3NpYmx5V2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nID8gV2Vha1NldCA6IFNldDtcblxudmFyIGNhbGxDb21wb25lbnRXaWxsVW5tb3VudFdpdGhUaW1lciA9IGZ1bmN0aW9uIChjdXJyZW50LCBpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5wcm9wcyA9IGN1cnJlbnQubWVtb2l6ZWRQcm9wcztcbiAgaW5zdGFuY2Uuc3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG5cbiAge1xuICAgIGluc3RhbmNlLmNvbXBvbmVudFdpbGxVbm1vdW50KCk7XG4gIH1cbn07IC8vIENhcHR1cmUgZXJyb3JzIHNvIHRoZXkgZG9uJ3QgaW50ZXJydXB0IHVubW91bnRpbmcuXG5cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbENvbXBvbmVudFdpbGxVbm1vdW50KGN1cnJlbnQsIGluc3RhbmNlKSB7XG4gIHtcbiAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY2FsbENvbXBvbmVudFdpbGxVbm1vdW50V2l0aFRpbWVyLCBudWxsLCBjdXJyZW50LCBpbnN0YW5jZSk7XG5cbiAgICBpZiAoaGFzQ2F1Z2h0RXJyb3IoKSkge1xuICAgICAgdmFyIHVubW91bnRFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIHVubW91bnRFcnJvcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNhZmVseURldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciByZWYgPSBjdXJyZW50LnJlZjtcblxuICBpZiAocmVmICE9PSBudWxsKSB7XG4gICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIHJlZiwgbnVsbCwgbnVsbCk7XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICB2YXIgcmVmRXJyb3IgPSBjbGVhckNhdWdodEVycm9yKCk7XG4gICAgICAgICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3IoY3VycmVudCwgcmVmRXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSkge1xuICB7XG4gICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuXG4gICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgIHZhciBlcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcbiAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGN1cnJlbnQsIGVycm9yKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0QmVmb3JlTXV0YXRpb25MaWZlQ3ljbGVzKGN1cnJlbnQsIGZpbmlzaGVkV29yaykge1xuICBzd2l0Y2ggKGZpbmlzaGVkV29yay50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBCbG9jazpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgaWYgKGZpbmlzaGVkV29yay5mbGFncyAmIFNuYXBzaG90KSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBjdXJyZW50Lm1lbW9pemVkUHJvcHM7XG4gICAgICAgICAgICB2YXIgcHJldlN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICAgICAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTsgLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgICAgLy8gYnV0IGluc3RlYWQgd2UgcmVseSBvbiB0aGVtIGJlaW5nIHNldCBkdXJpbmcgbGFzdCByZW5kZXIuXG4gICAgICAgICAgICAvLyBUT0RPOiByZXZpc2l0IHRoaXMgd2hlbiB3ZSBpbXBsZW1lbnQgcmVzdW1pbmcuXG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWYgKGZpbmlzaGVkV29yay50eXBlID09PSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgJiYgIWRpZFdhcm5BYm91dFJlYXNzaWduaW5nUHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgcHJvcHMgdG8gbWF0Y2ggbWVtb2l6ZWQgcHJvcHMgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnByb3BzYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2Uuc3RhdGUgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICBlcnJvcignRXhwZWN0ZWQgJXMgc3RhdGUgdG8gbWF0Y2ggbWVtb2l6ZWQgc3RhdGUgYmVmb3JlICcgKyAnZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gaW5zdGFuY2UuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUoZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlID09PSBmaW5pc2hlZFdvcmsudHlwZSA/IHByZXZQcm9wcyA6IHJlc29sdmVEZWZhdWx0UHJvcHMoZmluaXNoZWRXb3JrLnR5cGUsIHByZXZQcm9wcyksIHByZXZTdGF0ZSk7XG5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFyIGRpZFdhcm5TZXQgPSBkaWRXYXJuQWJvdXRVbmRlZmluZWRTbmFwc2hvdEJlZm9yZVVwZGF0ZTtcblxuICAgICAgICAgICAgICBpZiAoc25hcHNob3QgPT09IHVuZGVmaW5lZCAmJiAhZGlkV2FyblNldC5oYXMoZmluaXNoZWRXb3JrLnR5cGUpKSB7XG4gICAgICAgICAgICAgICAgZGlkV2FyblNldC5hZGQoZmluaXNoZWRXb3JrLnR5cGUpO1xuXG4gICAgICAgICAgICAgICAgZXJyb3IoJyVzLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlKCk6IEEgc25hcHNob3QgdmFsdWUgKG9yIG51bGwpICcgKyAnbXVzdCBiZSByZXR1cm5lZC4gWW91IGhhdmUgcmV0dXJuZWQgdW5kZWZpbmVkLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5fX3JlYWN0SW50ZXJuYWxTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IHNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgU25hcHNob3QpIHtcbiAgICAgICAgICAgIHZhciByb290ID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcbiAgICAgICAgICAgIGNsZWFyQ29udGFpbmVyKHJvb3QuY29udGFpbmVySW5mbyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgIGNhc2UgSW5jb21wbGV0ZUNsYXNzQ29tcG9uZW50OlxuICAgICAgLy8gTm90aGluZyB0byBkbyBmb3IgdGhlc2UgY29tcG9uZW50IHR5cGVzXG4gICAgICByZXR1cm47XG4gIH1cblxuICB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiVGhpcyB1bml0IG9mIHdvcmsgdGFnIHNob3VsZCBub3QgaGF2ZSBzaWRlLWVmZmVjdHMuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RVbm1vdW50KHRhZywgZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIGlmICgoZWZmZWN0LnRhZyAmIHRhZykgPT09IHRhZykge1xuICAgICAgICAvLyBVbm1vdW50XG4gICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGlmIChkZXN0cm95ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgfSB3aGlsZSAoZWZmZWN0ICE9PSBmaXJzdEVmZmVjdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0SG9va0VmZmVjdExpc3RNb3VudCh0YWcsIGZpbmlzaGVkV29yaykge1xuICB2YXIgdXBkYXRlUXVldWUgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gIHZhciBsYXN0RWZmZWN0ID0gdXBkYXRlUXVldWUgIT09IG51bGwgPyB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0IDogbnVsbDtcblxuICBpZiAobGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICB2YXIgZWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICBpZiAoKGVmZmVjdC50YWcgJiB0YWcpID09PSB0YWcpIHtcbiAgICAgICAgLy8gTW91bnRcbiAgICAgICAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gICAgICAgIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG5cbiAgICAgICAge1xuICAgICAgICAgIHZhciBkZXN0cm95ID0gZWZmZWN0LmRlc3Ryb3k7XG5cbiAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBkZXN0cm95ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgYWRkZW5kdW0gPSB2b2lkIDA7XG5cbiAgICAgICAgICAgIGlmIChkZXN0cm95ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQgbnVsbC4gSWYgeW91ciBlZmZlY3QgZG9lcyBub3QgcmVxdWlyZSBjbGVhbiAnICsgJ3VwLCByZXR1cm4gdW5kZWZpbmVkIChvciBub3RoaW5nKS4nO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZGVzdHJveS50aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJ1xcblxcbkl0IGxvb2tzIGxpa2UgeW91IHdyb3RlIHVzZUVmZmVjdChhc3luYyAoKSA9PiAuLi4pIG9yIHJldHVybmVkIGEgUHJvbWlzZS4gJyArICdJbnN0ZWFkLCB3cml0ZSB0aGUgYXN5bmMgZnVuY3Rpb24gaW5zaWRlIHlvdXIgZWZmZWN0ICcgKyAnYW5kIGNhbGwgaXQgaW1tZWRpYXRlbHk6XFxuXFxuJyArICd1c2VFZmZlY3QoKCkgPT4ge1xcbicgKyAnICBhc3luYyBmdW5jdGlvbiBmZXRjaERhdGEoKSB7XFxuJyArICcgICAgLy8gWW91IGNhbiBhd2FpdCBoZXJlXFxuJyArICcgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBNeUFQSS5nZXREYXRhKHNvbWVJZCk7XFxuJyArICcgICAgLy8gLi4uXFxuJyArICcgIH1cXG4nICsgJyAgZmV0Y2hEYXRhKCk7XFxuJyArIFwifSwgW3NvbWVJZF0pOyAvLyBPciBbXSBpZiBlZmZlY3QgZG9lc24ndCBuZWVkIHByb3BzIG9yIHN0YXRlXFxuXFxuXCIgKyAnTGVhcm4gbW9yZSBhYm91dCBkYXRhIGZldGNoaW5nIHdpdGggSG9va3M6IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9ob29rcy1kYXRhLWZldGNoaW5nJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGFkZGVuZHVtID0gJyBZb3UgcmV0dXJuZWQ6ICcgKyBkZXN0cm95O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlcnJvcignQW4gZWZmZWN0IGZ1bmN0aW9uIG11c3Qgbm90IHJldHVybiBhbnl0aGluZyBiZXNpZGVzIGEgZnVuY3Rpb24sICcgKyAnd2hpY2ggaXMgdXNlZCBmb3IgY2xlYW4tdXAuJXMnLCBhZGRlbmR1bSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGVmZmVjdCA9IGVmZmVjdC5uZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKSB7XG4gIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcbiAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZSAhPT0gbnVsbCA/IHVwZGF0ZVF1ZXVlLmxhc3RFZmZlY3QgOiBudWxsO1xuXG4gIGlmIChsYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgdmFyIGZpcnN0RWZmZWN0ID0gbGFzdEVmZmVjdC5uZXh0O1xuICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgIGRvIHtcbiAgICAgIHZhciBfZWZmZWN0ID0gZWZmZWN0LFxuICAgICAgICAgIG5leHQgPSBfZWZmZWN0Lm5leHQsXG4gICAgICAgICAgdGFnID0gX2VmZmVjdC50YWc7XG5cbiAgICAgIGlmICgodGFnICYgUGFzc2l2ZSQxKSAhPT0gTm9GbGFncyQxICYmICh0YWcgJiBIYXNFZmZlY3QpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdFVubW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgICBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0TW91bnQoZmluaXNoZWRXb3JrLCBlZmZlY3QpO1xuICAgICAgfVxuXG4gICAgICBlZmZlY3QgPSBuZXh0O1xuICAgIH0gd2hpbGUgKGVmZmVjdCAhPT0gZmlyc3RFZmZlY3QpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExpZmVDeWNsZXMoZmluaXNoZWRSb290LCBjdXJyZW50LCBmaW5pc2hlZFdvcmssIGNvbW1pdHRlZExhbmVzKSB7XG4gIHN3aXRjaCAoZmluaXNoZWRXb3JrLnRhZykge1xuICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgY2FzZSBGb3J3YXJkUmVmOlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBBdCB0aGlzIHBvaW50IGxheW91dCBlZmZlY3RzIGhhdmUgYWxyZWFkeSBiZWVuIGRlc3Ryb3llZCAoZHVyaW5nIG11dGF0aW9uIHBoYXNlKS5cbiAgICAgICAgLy8gVGhpcyBpcyBkb25lIHRvIHByZXZlbnQgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdE1vdW50KExheW91dCB8IEhhc0VmZmVjdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHNjaGVkdWxlUGFzc2l2ZUVmZmVjdHMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmZsYWdzICYgVXBkYXRlKSB7XG4gICAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5wcm9wcyAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBwcm9wcyB0byBtYXRjaCBtZW1vaXplZCBwcm9wcyBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRNb3VudC4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMuc3RhdGVgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGluc3RhbmNlLmNvbXBvbmVudERpZE1vdW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwcmV2UHJvcHMgPSBmaW5pc2hlZFdvcmsuZWxlbWVudFR5cGUgPT09IGZpbmlzaGVkV29yay50eXBlID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogcmVzb2x2ZURlZmF1bHRQcm9wcyhmaW5pc2hlZFdvcmsudHlwZSwgY3VycmVudC5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgICAgIHZhciBwcmV2U3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7IC8vIFdlIGNvdWxkIHVwZGF0ZSBpbnN0YW5jZSBwcm9wcyBhbmQgc3RhdGUgaGVyZSxcbiAgICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgICAgLy8gVE9ETzogcmV2aXNpdCB0aGlzIHdoZW4gd2UgaW1wbGVtZW50IHJlc3VtaW5nLlxuXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlmIChmaW5pc2hlZFdvcmsudHlwZSA9PT0gZmluaXNoZWRXb3JrLmVsZW1lbnRUeXBlICYmICFkaWRXYXJuQWJvdXRSZWFzc2lnbmluZ1Byb3BzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnByb3BzICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRQcm9wcykge1xuICAgICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChpbnN0YW5jZS5zdGF0ZSAhPT0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdjb21wb25lbnREaWRVcGRhdGUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5jb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzLCBwcmV2U3RhdGUsIGluc3RhbmNlLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cblxuXG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAodXBkYXRlUXVldWUgIT09IG51bGwpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLnR5cGUgPT09IGZpbmlzaGVkV29yay5lbGVtZW50VHlwZSAmJiAhZGlkV2FybkFib3V0UmVhc3NpZ25pbmdQcm9wcykge1xuICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UucHJvcHMgIT09IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IoJ0V4cGVjdGVkICVzIHByb3BzIHRvIG1hdGNoIG1lbW9pemVkIHByb3BzIGJlZm9yZSAnICsgJ3Byb2Nlc3NpbmcgdGhlIHVwZGF0ZSBxdWV1ZS4gJyArICdUaGlzIG1pZ2h0IGVpdGhlciBiZSBiZWNhdXNlIG9mIGEgYnVnIGluIFJlYWN0LCBvciBiZWNhdXNlICcgKyAnYSBjb21wb25lbnQgcmVhc3NpZ25zIGl0cyBvd24gYHRoaXMucHJvcHNgLiAnICsgJ1BsZWFzZSBmaWxlIGFuIGlzc3VlLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpIHx8ICdpbnN0YW5jZScpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGluc3RhbmNlLnN0YXRlICE9PSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yKCdFeHBlY3RlZCAlcyBzdGF0ZSB0byBtYXRjaCBtZW1vaXplZCBzdGF0ZSBiZWZvcmUgJyArICdwcm9jZXNzaW5nIHRoZSB1cGRhdGUgcXVldWUuICcgKyAnVGhpcyBtaWdodCBlaXRoZXIgYmUgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBSZWFjdCwgb3IgYmVjYXVzZSAnICsgJ2EgY29tcG9uZW50IHJlYXNzaWducyBpdHMgb3duIGB0aGlzLnN0YXRlYC4gJyArICdQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nLCBnZXRDb21wb25lbnROYW1lKGZpbmlzaGVkV29yay50eXBlKSB8fCAnaW5zdGFuY2UnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gV2UgY291bGQgdXBkYXRlIGluc3RhbmNlIHByb3BzIGFuZCBzdGF0ZSBoZXJlLFxuICAgICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHdlIHJlbHkgb24gdGhlbSBiZWluZyBzZXQgZHVyaW5nIGxhc3QgcmVuZGVyLlxuICAgICAgICAgIC8vIFRPRE86IHJldmlzaXQgdGhpcyB3aGVuIHdlIGltcGxlbWVudCByZXN1bWluZy5cblxuXG4gICAgICAgICAgY29tbWl0VXBkYXRlUXVldWUoZmluaXNoZWRXb3JrLCB1cGRhdGVRdWV1ZSwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogSSB0aGluayB0aGlzIGlzIG5vdyBhbHdheXMgbm9uLW51bGwgYnkgdGhlIHRpbWUgaXQgcmVhY2hlcyB0aGVcbiAgICAgICAgLy8gY29tbWl0IHBoYXNlLiBDb25zaWRlciByZW1vdmluZyB0aGUgdHlwZSBjaGVjay5cbiAgICAgICAgdmFyIF91cGRhdGVRdWV1ZSA9IGZpbmlzaGVkV29yay51cGRhdGVRdWV1ZTtcblxuICAgICAgICBpZiAoX3VwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIF9pbnN0YW5jZSA9IG51bGw7XG5cbiAgICAgICAgICBpZiAoZmluaXNoZWRXb3JrLmNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGZpbmlzaGVkV29yay5jaGlsZC50YWcpIHtcbiAgICAgICAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgICAgICAgIF9pbnN0YW5jZSA9IGdldFB1YmxpY0luc3RhbmNlKGZpbmlzaGVkV29yay5jaGlsZC5zdGF0ZU5vZGUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAgICAgICAgX2luc3RhbmNlID0gZmluaXNoZWRXb3JrLmNoaWxkLnN0YXRlTm9kZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb21taXRVcGRhdGVRdWV1ZShmaW5pc2hlZFdvcmssIF91cGRhdGVRdWV1ZSwgX2luc3RhbmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgdmFyIF9pbnN0YW5jZTIgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlOyAvLyBSZW5kZXJlcnMgbWF5IHNjaGVkdWxlIHdvcmsgdG8gYmUgZG9uZSBhZnRlciBob3N0IGNvbXBvbmVudHMgYXJlIG1vdW50ZWRcbiAgICAgICAgLy8gKGVnIERPTSByZW5kZXJlciBtYXkgc2NoZWR1bGUgYXV0by1mb2N1cyBmb3IgaW5wdXRzIGFuZCBmb3JtIGNvbnRyb2xzKS5cbiAgICAgICAgLy8gVGhlc2UgZWZmZWN0cyBzaG91bGQgb25seSBiZSBjb21taXR0ZWQgd2hlbiBjb21wb25lbnRzIGFyZSBmaXJzdCBtb3VudGVkLFxuICAgICAgICAvLyBha2Egd2hlbiB0aGVyZSBpcyBubyBjdXJyZW50L2FsdGVybmF0ZS5cblxuICAgICAgICBpZiAoY3VycmVudCA9PT0gbnVsbCAmJiBmaW5pc2hlZFdvcmsuZmxhZ3MgJiBVcGRhdGUpIHtcbiAgICAgICAgICB2YXIgdHlwZSA9IGZpbmlzaGVkV29yay50eXBlO1xuICAgICAgICAgIHZhciBwcm9wcyA9IGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzO1xuICAgICAgICAgIGNvbW1pdE1vdW50KF9pbnN0YW5jZTIsIHR5cGUsIHByb3BzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFRleHQ6XG4gICAgICB7XG4gICAgICAgIC8vIFdlIGhhdmUgbm8gbGlmZS1jeWNsZXMgYXNzb2NpYXRlZCB3aXRoIHRleHQuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2UgaGF2ZSBubyBsaWZlLWN5Y2xlcyBhc3NvY2lhdGVkIHdpdGggcG9ydGFscy5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBQcm9maWxlcjpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfZmluaXNoZWRXb3JrJG1lbW9pemUyID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHMsXG4gICAgICAgICAgICAgIG9uQ29tbWl0ID0gX2ZpbmlzaGVkV29yayRtZW1vaXplMi5vbkNvbW1pdCxcbiAgICAgICAgICAgICAgb25SZW5kZXIgPSBfZmluaXNoZWRXb3JrJG1lbW9pemUyLm9uUmVuZGVyO1xuICAgICAgICAgIHZhciBlZmZlY3REdXJhdGlvbiA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGUuZWZmZWN0RHVyYXRpb247XG4gICAgICAgICAgdmFyIGNvbW1pdFRpbWUgPSBnZXRDb21taXRUaW1lKCk7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIG9uUmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9uUmVuZGVyKGZpbmlzaGVkV29yay5tZW1vaXplZFByb3BzLmlkLCBjdXJyZW50ID09PSBudWxsID8gJ21vdW50JyA6ICd1cGRhdGUnLCBmaW5pc2hlZFdvcmsuYWN0dWFsRHVyYXRpb24sIGZpbmlzaGVkV29yay50cmVlQmFzZUR1cmF0aW9uLCBmaW5pc2hlZFdvcmsuYWN0dWFsU3RhcnRUaW1lLCBjb21taXRUaW1lLCBmaW5pc2hlZFJvb3QubWVtb2l6ZWRJbnRlcmFjdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlSHlkcmF0aW9uQ2FsbGJhY2tzKGZpbmlzaGVkUm9vdCwgZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgIGNhc2UgT2Zmc2NyZWVuQ29tcG9uZW50OlxuICAgIGNhc2UgTGVnYWN5SGlkZGVuQ29tcG9uZW50OlxuICAgICAgcmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRoaXMgdW5pdCBvZiB3b3JrIHRhZyBzaG91bGQgbm90IGhhdmUgc2lkZS1lZmZlY3RzLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGhpZGVPclVuaGlkZUFsbENoaWxkcmVuKGZpbmlzaGVkV29yaywgaXNIaWRkZW4pIHtcbiAge1xuICAgIC8vIFdlIG9ubHkgaGF2ZSB0aGUgdG9wIEZpYmVyIHRoYXQgd2FzIGluc2VydGVkIGJ1dCB3ZSBuZWVkIHRvIHJlY3Vyc2UgZG93biBpdHNcbiAgICAvLyBjaGlsZHJlbiB0byBmaW5kIGFsbCB0aGUgdGVybWluYWwgbm9kZXMuXG4gICAgdmFyIG5vZGUgPSBmaW5pc2hlZFdvcms7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKG5vZGUudGFnID09PSBIb3N0Q29tcG9uZW50KSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IG5vZGUuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpc0hpZGRlbikge1xuICAgICAgICAgIGhpZGVJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdW5oaWRlSW5zdGFuY2Uobm9kZS5zdGF0ZU5vZGUsIG5vZGUubWVtb2l6ZWRQcm9wcyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobm9kZS50YWcgPT09IEhvc3RUZXh0KSB7XG4gICAgICAgIHZhciBfaW5zdGFuY2UzID0gbm9kZS5zdGF0ZU5vZGU7XG5cbiAgICAgICAgaWYgKGlzSGlkZGVuKSB7XG4gICAgICAgICAgaGlkZVRleHRJbnN0YW5jZShfaW5zdGFuY2UzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1bmhpZGVUZXh0SW5zdGFuY2UoX2luc3RhbmNlMywgbm9kZS5tZW1vaXplZFByb3BzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgobm9kZS50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gTGVnYWN5SGlkZGVuQ29tcG9uZW50KSAmJiBub2RlLm1lbW9pemVkU3RhdGUgIT09IG51bGwgJiYgbm9kZSAhPT0gZmluaXNoZWRXb3JrKSA7IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaW5pc2hlZFdvcmspIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmluaXNoZWRXb3JrKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRBdHRhY2hSZWYoZmluaXNoZWRXb3JrKSB7XG4gIHZhciByZWYgPSBmaW5pc2hlZFdvcmsucmVmO1xuXG4gIGlmIChyZWYgIT09IG51bGwpIHtcbiAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuICAgIHZhciBpbnN0YW5jZVRvVXNlO1xuXG4gICAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgICBjYXNlIEhvc3RDb21wb25lbnQ6XG4gICAgICAgIGluc3RhbmNlVG9Vc2UgPSBnZXRQdWJsaWNJbnN0YW5jZShpbnN0YW5jZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpbnN0YW5jZVRvVXNlID0gaW5zdGFuY2U7XG4gICAgfSAvLyBNb3ZlZCBvdXRzaWRlIHRvIGVuc3VyZSBEQ0Ugd29ya3Mgd2l0aCB0aGlzIGZsYWdcblxuICAgIGlmICh0eXBlb2YgcmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZWYoaW5zdGFuY2VUb1VzZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgaWYgKCFyZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIGVycm9yKCdVbmV4cGVjdGVkIHJlZiBvYmplY3QgcHJvdmlkZWQgZm9yICVzLiAnICsgJ1VzZSBlaXRoZXIgYSByZWYtc2V0dGVyIGZ1bmN0aW9uIG9yIFJlYWN0LmNyZWF0ZVJlZigpLicsIGdldENvbXBvbmVudE5hbWUoZmluaXNoZWRXb3JrLnR5cGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZWYuY3VycmVudCA9IGluc3RhbmNlVG9Vc2U7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdERldGFjaFJlZihjdXJyZW50KSB7XG4gIHZhciBjdXJyZW50UmVmID0gY3VycmVudC5yZWY7XG5cbiAgaWYgKGN1cnJlbnRSZWYgIT09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIGN1cnJlbnRSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGN1cnJlbnRSZWYobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9XG59IC8vIFVzZXItb3JpZ2luYXRpbmcgZXJyb3JzIChsaWZlY3ljbGVzIGFuZCByZWZzKSBzaG91bGQgbm90IGludGVycnVwdFxuLy8gZGVsZXRpb24sIHNvIGRvbid0IGxldCB0aGVtIHRocm93LiBIb3N0LW9yaWdpbmF0aW5nIGVycm9ycyBzaG91bGRcbi8vIGludGVycnVwdCBkZWxldGlvbiwgc28gaXQncyBva2F5XG5cblxuZnVuY3Rpb24gY29tbWl0VW5tb3VudChmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgb25Db21taXRVbm1vdW50KGN1cnJlbnQpO1xuXG4gIHN3aXRjaCAoY3VycmVudC50YWcpIHtcbiAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgQmxvY2s6XG4gICAgICB7XG4gICAgICAgIHZhciB1cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7XG5cbiAgICAgICAgaWYgKHVwZGF0ZVF1ZXVlICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGxhc3RFZmZlY3QgPSB1cGRhdGVRdWV1ZS5sYXN0RWZmZWN0O1xuXG4gICAgICAgICAgaWYgKGxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmaXJzdEVmZmVjdCA9IGxhc3RFZmZlY3QubmV4dDtcbiAgICAgICAgICAgIHZhciBlZmZlY3QgPSBmaXJzdEVmZmVjdDtcblxuICAgICAgICAgICAgZG8ge1xuICAgICAgICAgICAgICB2YXIgX2VmZmVjdDIgPSBlZmZlY3QsXG4gICAgICAgICAgICAgICAgICBkZXN0cm95ID0gX2VmZmVjdDIuZGVzdHJveSxcbiAgICAgICAgICAgICAgICAgIHRhZyA9IF9lZmZlY3QyLnRhZztcblxuICAgICAgICAgICAgICBpZiAoZGVzdHJveSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgaWYgKCh0YWcgJiBQYXNzaXZlJDEpICE9PSBOb0ZsYWdzJDEpIHtcbiAgICAgICAgICAgICAgICAgIGVucXVldWVQZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RVbm1vdW50KGN1cnJlbnQsIGVmZmVjdCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2FmZWx5Q2FsbERlc3Ryb3koY3VycmVudCwgZGVzdHJveSk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZWZmZWN0ID0gZWZmZWN0Lm5leHQ7XG4gICAgICAgICAgICB9IHdoaWxlIChlZmZlY3QgIT09IGZpcnN0RWZmZWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGN1cnJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50V2lsbFVubW91bnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBzYWZlbHlDYWxsQ29tcG9uZW50V2lsbFVubW91bnQoY3VycmVudCwgaW5zdGFuY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICBzYWZlbHlEZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFBvcnRhbDpcbiAgICAgIHtcbiAgICAgICAgLy8gVE9ETzogdGhpcyBpcyByZWN1cnNpdmUuXG4gICAgICAgIC8vIFdlIGFyZSBhbHNvIG5vdCB1c2luZyB0aGlzIHBhcmVudCBiZWNhdXNlXG4gICAgICAgIC8vIHRoZSBwb3J0YWwgd2lsbCBnZXQgcHVzaGVkIGltbWVkaWF0ZWx5LlxuICAgICAgICB7XG4gICAgICAgICAgdW5tb3VudEhvc3RDb21wb25lbnRzKGZpbmlzaGVkUm9vdCwgY3VycmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICBjYXNlIEZ1bmRhbWVudGFsQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRGVoeWRyYXRlZEZyYWdtZW50OlxuICAgICAge1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU2NvcGVDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgcm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBXaGlsZSB3ZSdyZSBpbnNpZGUgYSByZW1vdmVkIGhvc3Qgbm9kZSB3ZSBkb24ndCB3YW50IHRvIGNhbGxcbiAgLy8gcmVtb3ZlQ2hpbGQgb24gdGhlIGlubmVyIG5vZGVzIGJlY2F1c2UgdGhleSdyZSByZW1vdmVkIGJ5IHRoZSB0b3BcbiAgLy8gY2FsbCBhbnl3YXkuIFdlIGFsc28gd2FudCB0byBjYWxsIGNvbXBvbmVudFdpbGxVbm1vdW50IG9uIGFsbFxuICAvLyBjb21wb3NpdGVzIGJlZm9yZSB0aGlzIGhvc3Qgbm9kZSBpcyByZW1vdmVkIGZyb20gdGhlIHRyZWUuIFRoZXJlZm9yZVxuICAvLyB3ZSBkbyBhbiBpbm5lciBsb29wIHdoaWxlIHdlJ3JlIHN0aWxsIGluc2lkZSB0aGUgaG9zdCBub2RlLlxuICB2YXIgbm9kZSA9IHJvb3Q7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBjb21taXRVbm1vdW50KGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIFZpc2l0IGNoaWxkcmVuIGJlY2F1c2UgdGhleSBtYXkgY29udGFpbiBtb3JlIGNvbXBvc2l0ZSBvciBob3N0IG5vZGVzLlxuICAgIC8vIFNraXAgcG9ydGFscyBiZWNhdXNlIGNvbW1pdFVubW91bnQoKSBjdXJyZW50bHkgdmlzaXRzIHRoZW0gcmVjdXJzaXZlbHkuXG5cbiAgICBpZiAobm9kZS5jaGlsZCAhPT0gbnVsbCAmJiAoIC8vIElmIHdlIHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyB1c2luZyBjb21taXRVbm1vdW50IGFib3ZlLlxuICAgIC8vIElmIHdlIGRvbid0IHVzZSBtdXRhdGlvbiB3ZSBkcmlsbCBkb3duIGludG8gcG9ydGFscyBoZXJlIGluc3RlYWQuXG4gICAgIG5vZGUudGFnICE9PSBIb3N0UG9ydGFsKSkge1xuICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgbm9kZSA9IG5vZGUuY2hpbGQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobm9kZSA9PT0gcm9vdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChub2RlLnNpYmxpbmcgPT09IG51bGwpIHtcbiAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gcm9vdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXRhY2hGaWJlck11dGF0aW9uKGZpYmVyKSB7XG4gIC8vIEN1dCBvZmYgdGhlIHJldHVybiBwb2ludGVycyB0byBkaXNjb25uZWN0IGl0IGZyb20gdGhlIHRyZWUuIElkZWFsbHksIHdlXG4gIC8vIHNob3VsZCBjbGVhciB0aGUgY2hpbGQgcG9pbnRlciBvZiB0aGUgcGFyZW50IGFsdGVybmF0ZSB0byBsZXQgdGhpc1xuICAvLyBnZXQgR0M6ZWQgYnV0IHdlIGRvbid0IGtub3cgd2hpY2ggZm9yIHN1cmUgd2hpY2ggcGFyZW50IGlzIHRoZSBjdXJyZW50XG4gIC8vIG9uZSBzbyB3ZSdsbCBzZXR0bGUgZm9yIEdDOmluZyB0aGUgc3VidHJlZSBvZiB0aGlzIGNoaWxkLiBUaGlzIGNoaWxkXG4gIC8vIGl0c2VsZiB3aWxsIGJlIEdDOmVkIHdoZW4gdGhlIHBhcmVudCB1cGRhdGVzIHRoZSBuZXh0IHRpbWUuXG4gIC8vIE5vdGU6IHdlIGNhbm5vdCBudWxsIG91dCBzaWJsaW5nIGhlcmUsIG90aGVyd2lzZSBpdCBjYW4gY2F1c2UgaXNzdWVzXG4gIC8vIHdpdGggZmluZERPTU5vZGUgYW5kIGhvdyBpdCByZXF1aXJlcyB0aGUgc2libGluZyBmaWVsZCB0byBjYXJyeSBvdXRcbiAgLy8gdHJhdmVyc2FsIGluIGEgbGF0ZXIgZWZmZWN0LiBTZWUgUFIgIzE2ODIwLiBXZSBub3cgY2xlYXIgdGhlIHNpYmxpbmdcbiAgLy8gZmllbGQgYWZ0ZXIgZWZmZWN0cywgc2VlOiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cy5cbiAgLy9cbiAgLy8gRG9uJ3QgZGlzY29ubmVjdCBzdGF0ZU5vZGUgbm93OyBpdCB3aWxsIGJlIGRldGFjaGVkIGluIGRldGFjaEZpYmVyQWZ0ZXJFZmZlY3RzLlxuICAvLyBJdCBtYXkgYmUgcmVxdWlyZWQgaWYgdGhlIGN1cnJlbnQgY29tcG9uZW50IGlzIGFuIGVycm9yIGJvdW5kYXJ5LFxuICAvLyBhbmQgb25lIG9mIGl0cyBkZXNjZW5kYW50cyB0aHJvd3Mgd2hpbGUgdW5tb3VudGluZyBhIHBhc3NpdmUgZWZmZWN0LlxuICBmaWJlci5hbHRlcm5hdGUgPSBudWxsO1xuICBmaWJlci5jaGlsZCA9IG51bGw7XG4gIGZpYmVyLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gIGZpYmVyLmZpcnN0RWZmZWN0ID0gbnVsbDtcbiAgZmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICBmaWJlci5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgZmliZXIucGVuZGluZ1Byb3BzID0gbnVsbDtcbiAgZmliZXIucmV0dXJuID0gbnVsbDtcbiAgZmliZXIudXBkYXRlUXVldWUgPSBudWxsO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdPd25lciA9IG51bGw7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFBhcmVudEZpYmVyKGZpYmVyKSB7XG4gIHZhciBwYXJlbnQgPSBmaWJlci5yZXR1cm47XG5cbiAgd2hpbGUgKHBhcmVudCAhPT0gbnVsbCkge1xuICAgIGlmIChpc0hvc3RQYXJlbnQocGFyZW50KSkge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpc0hvc3RQYXJlbnQoZmliZXIpIHtcbiAgcmV0dXJuIGZpYmVyLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBmaWJlci50YWcgPT09IEhvc3RSb290IHx8IGZpYmVyLnRhZyA9PT0gSG9zdFBvcnRhbDtcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdFNpYmxpbmcoZmliZXIpIHtcbiAgLy8gV2UncmUgZ29pbmcgdG8gc2VhcmNoIGZvcndhcmQgaW50byB0aGUgdHJlZSB1bnRpbCB3ZSBmaW5kIGEgc2libGluZyBob3N0XG4gIC8vIG5vZGUuIFVuZm9ydHVuYXRlbHksIGlmIG11bHRpcGxlIGluc2VydGlvbnMgYXJlIGRvbmUgaW4gYSByb3cgd2UgaGF2ZSB0b1xuICAvLyBzZWFyY2ggcGFzdCB0aGVtLiBUaGlzIGxlYWRzIHRvIGV4cG9uZW50aWFsIHNlYXJjaCBmb3IgdGhlIG5leHQgc2libGluZy5cbiAgLy8gVE9ETzogRmluZCBhIG1vcmUgZWZmaWNpZW50IHdheSB0byBkbyB0aGlzLlxuICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gIHNpYmxpbmdzOiB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLCBsZXQncyB0cnkgdGhlIG5leHQgc2libGluZy5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgaXNIb3N0UGFyZW50KG5vZGUucmV0dXJuKSkge1xuICAgICAgICAvLyBJZiB3ZSBwb3Agb3V0IG9mIHRoZSByb290IG9yIGhpdCB0aGUgcGFyZW50IHRoZSBmaWJlciB3ZSBhcmUgdGhlXG4gICAgICAgIC8vIGxhc3Qgc2libGluZy5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIG5vZGUgPSBub2RlLnJldHVybjtcbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcblxuICAgIHdoaWxlIChub2RlLnRhZyAhPT0gSG9zdENvbXBvbmVudCAmJiBub2RlLnRhZyAhPT0gSG9zdFRleHQgJiYgbm9kZS50YWcgIT09IERlaHlkcmF0ZWRGcmFnbWVudCkge1xuICAgICAgLy8gSWYgaXQgaXMgbm90IGhvc3Qgbm9kZSBhbmQsIHdlIG1pZ2h0IGhhdmUgYSBob3N0IG5vZGUgaW5zaWRlIGl0LlxuICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBkb3duIHVudGlsIHdlIGZpbmQgb25lLlxuICAgICAgaWYgKG5vZGUuZmxhZ3MgJiBQbGFjZW1lbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSBhIGNoaWxkLCB0cnkgdGhlIHNpYmxpbmdzIGluc3RlYWQuXG4gICAgICAgIGNvbnRpbnVlIHNpYmxpbmdzO1xuICAgICAgfSAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY2hpbGQsIHRyeSB0aGUgc2libGluZ3MgaW5zdGVhZC5cbiAgICAgIC8vIFdlIGFsc28gc2tpcCBwb3J0YWxzIGJlY2F1c2UgdGhleSBhcmUgbm90IHBhcnQgb2YgdGhpcyBob3N0IHRyZWUuXG5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgPT09IG51bGwgfHwgbm9kZS50YWcgPT09IEhvc3RQb3J0YWwpIHtcbiAgICAgICAgY29udGludWUgc2libGluZ3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLmNoaWxkLnJldHVybiA9IG5vZGU7XG4gICAgICAgIG5vZGUgPSBub2RlLmNoaWxkO1xuICAgICAgfVxuICAgIH0gLy8gQ2hlY2sgaWYgdGhpcyBob3N0IG5vZGUgaXMgc3RhYmxlIG9yIGFib3V0IHRvIGJlIHBsYWNlZC5cblxuXG4gICAgaWYgKCEobm9kZS5mbGFncyAmIFBsYWNlbWVudCkpIHtcbiAgICAgIC8vIEZvdW5kIGl0IVxuICAgICAgcmV0dXJuIG5vZGUuc3RhdGVOb2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRQbGFjZW1lbnQoZmluaXNoZWRXb3JrKSB7XG5cblxuICB2YXIgcGFyZW50RmliZXIgPSBnZXRIb3N0UGFyZW50RmliZXIoZmluaXNoZWRXb3JrKTsgLy8gTm90ZTogdGhlc2UgdHdvIHZhcmlhYmxlcyAqbXVzdCogYWx3YXlzIGJlIHVwZGF0ZWQgdG9nZXRoZXIuXG5cbiAgdmFyIHBhcmVudDtcbiAgdmFyIGlzQ29udGFpbmVyO1xuICB2YXIgcGFyZW50U3RhdGVOb2RlID0gcGFyZW50RmliZXIuc3RhdGVOb2RlO1xuXG4gIHN3aXRjaCAocGFyZW50RmliZXIudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcGFyZW50ID0gcGFyZW50U3RhdGVOb2RlO1xuICAgICAgaXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBIb3N0Um9vdDpcbiAgICAgIHBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgaXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICBwYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGUuY29udGFpbmVySW5mbztcbiAgICAgIGlzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBGdW5kYW1lbnRhbENvbXBvbmVudDpcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZS1uby1mYWxsdGhyb3VnaFxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9zdCBwYXJlbnQgZmliZXIuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gIH1cblxuICBpZiAocGFyZW50RmliZXIuZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAvLyBSZXNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgYmVmb3JlIGRvaW5nIGFueSBpbnNlcnRpb25zXG4gICAgcmVzZXRUZXh0Q29udGVudChwYXJlbnQpOyAvLyBDbGVhciBDb250ZW50UmVzZXQgZnJvbSB0aGUgZWZmZWN0IHRhZ1xuXG4gICAgcGFyZW50RmliZXIuZmxhZ3MgJj0gfkNvbnRlbnRSZXNldDtcbiAgfVxuXG4gIHZhciBiZWZvcmUgPSBnZXRIb3N0U2libGluZyhmaW5pc2hlZFdvcmspOyAvLyBXZSBvbmx5IGhhdmUgdGhlIHRvcCBGaWJlciB0aGF0IHdhcyBpbnNlcnRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cblxuICBpZiAoaXNDb250YWluZXIpIHtcbiAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGZpbmlzaGVkV29yaywgYmVmb3JlLCBwYXJlbnQpO1xuICB9IGVsc2Uge1xuICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShmaW5pc2hlZFdvcmssIGJlZm9yZSwgcGFyZW50KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKG5vZGUsIGJlZm9yZSwgcGFyZW50KSB7XG4gIHZhciB0YWcgPSBub2RlLnRhZztcbiAgdmFyIGlzSG9zdCA9IHRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCB0YWcgPT09IEhvc3RUZXh0O1xuXG4gIGlmIChpc0hvc3QgfHwgZW5hYmxlRnVuZGFtZW50YWxBUEkgKSB7XG4gICAgdmFyIHN0YXRlTm9kZSA9IGlzSG9zdCA/IG5vZGUuc3RhdGVOb2RlIDogbm9kZS5zdGF0ZU5vZGUuaW5zdGFuY2U7XG5cbiAgICBpZiAoYmVmb3JlKSB7XG4gICAgICBpbnNlcnRJbkNvbnRhaW5lckJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGRUb0NvbnRhaW5lcihwYXJlbnQsIHN0YXRlTm9kZSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKHRhZyA9PT0gSG9zdFBvcnRhbCkgOyBlbHNlIHtcbiAgICB2YXIgY2hpbGQgPSBub2RlLmNoaWxkO1xuXG4gICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGVJbnRvQ29udGFpbmVyKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZUludG9Db250YWluZXIoc2libGluZywgYmVmb3JlLCBwYXJlbnQpO1xuICAgICAgICBzaWJsaW5nID0gc2libGluZy5zaWJsaW5nO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnNlcnRPckFwcGVuZFBsYWNlbWVudE5vZGUobm9kZSwgYmVmb3JlLCBwYXJlbnQpIHtcbiAgdmFyIHRhZyA9IG5vZGUudGFnO1xuICB2YXIgaXNIb3N0ID0gdGFnID09PSBIb3N0Q29tcG9uZW50IHx8IHRhZyA9PT0gSG9zdFRleHQ7XG5cbiAgaWYgKGlzSG9zdCB8fCBlbmFibGVGdW5kYW1lbnRhbEFQSSApIHtcbiAgICB2YXIgc3RhdGVOb2RlID0gaXNIb3N0ID8gbm9kZS5zdGF0ZU5vZGUgOiBub2RlLnN0YXRlTm9kZS5pbnN0YW5jZTtcblxuICAgIGlmIChiZWZvcmUpIHtcbiAgICAgIGluc2VydEJlZm9yZShwYXJlbnQsIHN0YXRlTm9kZSwgYmVmb3JlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBwZW5kQ2hpbGQocGFyZW50LCBzdGF0ZU5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIGlmICh0YWcgPT09IEhvc3RQb3J0YWwpIDsgZWxzZSB7XG4gICAgdmFyIGNoaWxkID0gbm9kZS5jaGlsZDtcblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgaW5zZXJ0T3JBcHBlbmRQbGFjZW1lbnROb2RlKGNoaWxkLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICB2YXIgc2libGluZyA9IGNoaWxkLnNpYmxpbmc7XG5cbiAgICAgIHdoaWxlIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICAgIGluc2VydE9yQXBwZW5kUGxhY2VtZW50Tm9kZShzaWJsaW5nLCBiZWZvcmUsIHBhcmVudCk7XG4gICAgICAgIHNpYmxpbmcgPSBzaWJsaW5nLnNpYmxpbmc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVubW91bnRIb3N0Q29tcG9uZW50cyhmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAgLy8gV2Ugb25seSBoYXZlIHRoZSB0b3AgRmliZXIgdGhhdCB3YXMgZGVsZXRlZCBidXQgd2UgbmVlZCB0byByZWN1cnNlIGRvd24gaXRzXG4gIC8vIGNoaWxkcmVuIHRvIGZpbmQgYWxsIHRoZSB0ZXJtaW5hbCBub2Rlcy5cbiAgdmFyIG5vZGUgPSBjdXJyZW50OyAvLyBFYWNoIGl0ZXJhdGlvbiwgY3VycmVudFBhcmVudCBpcyBwb3B1bGF0ZWQgd2l0aCBub2RlJ3MgaG9zdCBwYXJlbnQgaWYgbm90XG4gIC8vIGN1cnJlbnRQYXJlbnRJc1ZhbGlkLlxuXG4gIHZhciBjdXJyZW50UGFyZW50SXNWYWxpZCA9IGZhbHNlOyAvLyBOb3RlOiB0aGVzZSB0d28gdmFyaWFibGVzICptdXN0KiBhbHdheXMgYmUgdXBkYXRlZCB0b2dldGhlci5cblxuICB2YXIgY3VycmVudFBhcmVudDtcbiAgdmFyIGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcjtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGlmICghY3VycmVudFBhcmVudElzVmFsaWQpIHtcbiAgICAgIHZhciBwYXJlbnQgPSBub2RlLnJldHVybjtcblxuICAgICAgZmluZFBhcmVudDogd2hpbGUgKHRydWUpIHtcbiAgICAgICAgaWYgKCEocGFyZW50ICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIkV4cGVjdGVkIHRvIGZpbmQgYSBob3N0IHBhcmVudC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBwYXJlbnRTdGF0ZU5vZGUgPSBwYXJlbnQuc3RhdGVOb2RlO1xuXG4gICAgICAgIHN3aXRjaCAocGFyZW50LnRhZykge1xuICAgICAgICAgIGNhc2UgSG9zdENvbXBvbmVudDpcbiAgICAgICAgICAgIGN1cnJlbnRQYXJlbnQgPSBwYXJlbnRTdGF0ZU5vZGU7XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgICAgY3VycmVudFBhcmVudCA9IHBhcmVudFN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICAgICAgY3VycmVudFBhcmVudElzQ29udGFpbmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrIGZpbmRQYXJlbnQ7XG5cbiAgICAgICAgICBjYXNlIEhvc3RQb3J0YWw6XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50ID0gcGFyZW50U3RhdGVOb2RlLmNvbnRhaW5lckluZm87XG4gICAgICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWsgZmluZFBhcmVudDtcblxuICAgICAgICB9XG5cbiAgICAgICAgcGFyZW50ID0gcGFyZW50LnJldHVybjtcbiAgICAgIH1cblxuICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCB8fCBub2RlLnRhZyA9PT0gSG9zdFRleHQpIHtcbiAgICAgIGNvbW1pdE5lc3RlZFVubW91bnRzKGZpbmlzaGVkUm9vdCwgbm9kZSk7IC8vIEFmdGVyIGFsbCB0aGUgY2hpbGRyZW4gaGF2ZSB1bm1vdW50ZWQsIGl0IGlzIG5vdyBzYWZlIHRvIHJlbW92ZSB0aGVcbiAgICAgIC8vIG5vZGUgZnJvbSB0aGUgdHJlZS5cblxuICAgICAgaWYgKGN1cnJlbnRQYXJlbnRJc0NvbnRhaW5lcikge1xuICAgICAgICByZW1vdmVDaGlsZEZyb21Db250YWluZXIoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVtb3ZlQ2hpbGQoY3VycmVudFBhcmVudCwgbm9kZS5zdGF0ZU5vZGUpO1xuICAgICAgfSAvLyBEb24ndCB2aXNpdCBjaGlsZHJlbiBiZWNhdXNlIHdlIGFscmVhZHkgdmlzaXRlZCB0aGVtLlxuXG4gICAgfSBlbHNlIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiB3ZSBnbyBpbnRvIGEgcG9ydGFsLCBpdCBiZWNvbWVzIHRoZSBwYXJlbnQgdG8gcmVtb3ZlIGZyb20uXG4gICAgICAgIC8vIFdlIHdpbGwgcmVhc3NpZ24gaXQgYmFjayB3aGVuIHdlIHBvcCB0aGUgcG9ydGFsIG9uIHRoZSB3YXkgdXAuXG4gICAgICAgIGN1cnJlbnRQYXJlbnQgPSBub2RlLnN0YXRlTm9kZS5jb250YWluZXJJbmZvO1xuICAgICAgICBjdXJyZW50UGFyZW50SXNDb250YWluZXIgPSB0cnVlOyAvLyBWaXNpdCBjaGlsZHJlbiBiZWNhdXNlIHBvcnRhbHMgbWlnaHQgY29udGFpbiBob3N0IGNvbXBvbmVudHMuXG5cbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbW1pdFVubW91bnQoZmluaXNoZWRSb290LCBub2RlKTsgLy8gVmlzaXQgY2hpbGRyZW4gYmVjYXVzZSB3ZSBtYXkgZmluZCBtb3JlIGhvc3QgY29tcG9uZW50cyBiZWxvdy5cblxuICAgICAgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5vZGUgPT09IGN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICBpZiAobm9kZS5yZXR1cm4gPT09IG51bGwgfHwgbm9kZS5yZXR1cm4gPT09IGN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlID0gbm9kZS5yZXR1cm47XG5cbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdFBvcnRhbCkge1xuICAgICAgICAvLyBXaGVuIHdlIGdvIG91dCBvZiB0aGUgcG9ydGFsLCB3ZSBuZWVkIHRvIHJlc3RvcmUgdGhlIHBhcmVudC5cbiAgICAgICAgLy8gU2luY2Ugd2UgZG9uJ3Qga2VlcCBhIHN0YWNrIG9mIHRoZW0sIHdlIHdpbGwgc2VhcmNoIGZvciBpdC5cbiAgICAgICAgY3VycmVudFBhcmVudElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgbm9kZSA9IG5vZGUuc2libGluZztcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXREZWxldGlvbihmaW5pc2hlZFJvb3QsIGN1cnJlbnQsIHJlbmRlclByaW9yaXR5TGV2ZWwpIHtcbiAge1xuICAgIC8vIFJlY3Vyc2l2ZWx5IGRlbGV0ZSBhbGwgaG9zdCBub2RlcyBmcm9tIHRoZSBwYXJlbnQuXG4gICAgLy8gRGV0YWNoIHJlZnMgYW5kIGNhbGwgY29tcG9uZW50V2lsbFVubW91bnQoKSBvbiB0aGUgd2hvbGUgc3VidHJlZS5cbiAgICB1bm1vdW50SG9zdENvbXBvbmVudHMoZmluaXNoZWRSb290LCBjdXJyZW50KTtcbiAgfVxuXG4gIHZhciBhbHRlcm5hdGUgPSBjdXJyZW50LmFsdGVybmF0ZTtcbiAgZGV0YWNoRmliZXJNdXRhdGlvbihjdXJyZW50KTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgZGV0YWNoRmliZXJNdXRhdGlvbihhbHRlcm5hdGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdFdvcmsoY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG5cbiAgc3dpdGNoIChmaW5pc2hlZFdvcmsudGFnKSB7XG4gICAgY2FzZSBGdW5jdGlvbkNvbXBvbmVudDpcbiAgICBjYXNlIEZvcndhcmRSZWY6XG4gICAgY2FzZSBNZW1vQ29tcG9uZW50OlxuICAgIGNhc2UgU2ltcGxlTWVtb0NvbXBvbmVudDpcbiAgICBjYXNlIEJsb2NrOlxuICAgICAge1xuICAgICAgICAvLyBMYXlvdXQgZWZmZWN0cyBhcmUgZGVzdHJveWVkIGR1cmluZyB0aGUgbXV0YXRpb24gcGhhc2Ugc28gdGhhdCBhbGxcbiAgICAgICAgLy8gZGVzdHJveSBmdW5jdGlvbnMgZm9yIGFsbCBmaWJlcnMgYXJlIGNhbGxlZCBiZWZvcmUgYW55IGNyZWF0ZSBmdW5jdGlvbnMuXG4gICAgICAgIC8vIFRoaXMgcHJldmVudHMgc2libGluZyBjb21wb25lbnQgZWZmZWN0cyBmcm9tIGludGVyZmVyaW5nIHdpdGggZWFjaCBvdGhlcixcbiAgICAgICAgLy8gZS5nLiBhIGRlc3Ryb3kgZnVuY3Rpb24gaW4gb25lIGNvbXBvbmVudCBzaG91bGQgbmV2ZXIgb3ZlcnJpZGUgYSByZWYgc2V0XG4gICAgICAgIC8vIGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50IGR1cmluZyB0aGUgc2FtZSBjb21taXQuXG4gICAgICAgIHtcbiAgICAgICAgICBjb21taXRIb29rRWZmZWN0TGlzdFVubW91bnQoTGF5b3V0IHwgSGFzRWZmZWN0LCBmaW5pc2hlZFdvcmspO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAge1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gQ29tbWl0IHRoZSB3b3JrIHByZXBhcmVkIGVhcmxpZXIuXG4gICAgICAgICAgdmFyIG5ld1Byb3BzID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgICAvLyBhcyB0aGUgbmV3UHJvcHMuIFRoZSB1cGRhdGVQYXlsb2FkIHdpbGwgY29udGFpbiB0aGUgcmVhbCBjaGFuZ2UgaW5cbiAgICAgICAgICAvLyB0aGlzIGNhc2UuXG5cbiAgICAgICAgICB2YXIgb2xkUHJvcHMgPSBjdXJyZW50ICE9PSBudWxsID8gY3VycmVudC5tZW1vaXplZFByb3BzIDogbmV3UHJvcHM7XG4gICAgICAgICAgdmFyIHR5cGUgPSBmaW5pc2hlZFdvcmsudHlwZTsgLy8gVE9ETzogVHlwZSB0aGUgdXBkYXRlUXVldWUgdG8gYmUgc3BlY2lmaWMgdG8gaG9zdCBjb21wb25lbnRzLlxuXG4gICAgICAgICAgdmFyIHVwZGF0ZVBheWxvYWQgPSBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWU7XG4gICAgICAgICAgZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlID0gbnVsbDtcblxuICAgICAgICAgIGlmICh1cGRhdGVQYXlsb2FkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb21taXRVcGRhdGUoaW5zdGFuY2UsIHVwZGF0ZVBheWxvYWQsIHR5cGUsIG9sZFByb3BzLCBuZXdQcm9wcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBIb3N0VGV4dDpcbiAgICAgIHtcbiAgICAgICAgaWYgKCEoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHNob3VsZCBoYXZlIGEgdGV4dCBub2RlIGluaXRpYWxpemVkLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHRleHRJbnN0YW5jZSA9IGZpbmlzaGVkV29yay5zdGF0ZU5vZGU7XG4gICAgICAgIHZhciBuZXdUZXh0ID0gZmluaXNoZWRXb3JrLm1lbW9pemVkUHJvcHM7IC8vIEZvciBoeWRyYXRpb24gd2UgcmV1c2UgdGhlIHVwZGF0ZSBwYXRoIGJ1dCB3ZSB0cmVhdCB0aGUgb2xkUHJvcHNcbiAgICAgICAgLy8gYXMgdGhlIG5ld1Byb3BzLiBUaGUgdXBkYXRlUGF5bG9hZCB3aWxsIGNvbnRhaW4gdGhlIHJlYWwgY2hhbmdlIGluXG4gICAgICAgIC8vIHRoaXMgY2FzZS5cblxuICAgICAgICB2YXIgb2xkVGV4dCA9IGN1cnJlbnQgIT09IG51bGwgPyBjdXJyZW50Lm1lbW9pemVkUHJvcHMgOiBuZXdUZXh0O1xuICAgICAgICBjb21taXRUZXh0VXBkYXRlKHRleHRJbnN0YW5jZSwgb2xkVGV4dCwgbmV3VGV4dCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgSG9zdFJvb3Q6XG4gICAgICB7XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgX3Jvb3QgPSBmaW5pc2hlZFdvcmsuc3RhdGVOb2RlO1xuXG4gICAgICAgICAgaWYgKF9yb290Lmh5ZHJhdGUpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIGp1c3QgaHlkcmF0ZWQuIE5vIG5lZWQgdG8gaHlkcmF0ZSBhZ2Fpbi5cbiAgICAgICAgICAgIF9yb290Lmh5ZHJhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbW1pdEh5ZHJhdGVkQ29udGFpbmVyKF9yb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgUHJvZmlsZXI6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgU3VzcGVuc2VDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGNvbW1pdFN1c3BlbnNlQ29tcG9uZW50KGZpbmlzaGVkV29yayk7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBTdXNwZW5zZUxpc3RDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgY2FzZSBJbmNvbXBsZXRlQ2xhc3NDb21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgIGNhc2UgRnVuZGFtZW50YWxDb21wb25lbnQ6XG4gICAgICB7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFNjb3BlQ29tcG9uZW50OlxuICAgICAge1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgY2FzZSBPZmZzY3JlZW5Db21wb25lbnQ6XG4gICAgY2FzZSBMZWdhY3lIaWRkZW5Db21wb25lbnQ6XG4gICAgICB7XG4gICAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgICB2YXIgaXNIaWRkZW4gPSBuZXdTdGF0ZSAhPT0gbnVsbDtcbiAgICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4oZmluaXNoZWRXb3JrLCBpc0hpZGRlbik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgfVxuXG4gIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUaGlzIHVuaXQgb2Ygd29yayB0YWcgc2hvdWxkIG5vdCBoYXZlIHNpZGUtZWZmZWN0cy4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRTdXNwZW5zZUNvbXBvbmVudChmaW5pc2hlZFdvcmspIHtcbiAgdmFyIG5ld1N0YXRlID0gZmluaXNoZWRXb3JrLm1lbW9pemVkU3RhdGU7XG5cbiAgaWYgKG5ld1N0YXRlICE9PSBudWxsKSB7XG4gICAgbWFya0NvbW1pdFRpbWVPZkZhbGxiYWNrKCk7XG5cbiAgICB7XG4gICAgICAvLyBIaWRlIHRoZSBPZmZzY3JlZW4gY29tcG9uZW50IHRoYXQgY29udGFpbnMgdGhlIHByaW1hcnkgY2hpbGRyZW4uIFRPRE86XG4gICAgICAvLyBJZGVhbGx5LCB0aGlzIGVmZmVjdCB3b3VsZCBoYXZlIGJlZW4gc2NoZWR1bGVkIG9uIHRoZSBPZmZzY3JlZW4gZmliZXJcbiAgICAgIC8vIGl0c2VsZi4gVGhhdCdzIGhvdyB1bmhpZGluZyB3b3JrczogdGhlIE9mZnNjcmVlbiBjb21wb25lbnQgc2NoZWR1bGVzIGFuXG4gICAgICAvLyBlZmZlY3Qgb24gaXRzZWxmLiBIb3dldmVyLCBpbiB0aGlzIGNhc2UsIHRoZSBjb21wb25lbnQgZGlkbid0IGNvbXBsZXRlLFxuICAgICAgLy8gc28gdGhlIGZpYmVyIHdhcyBuZXZlciBhZGRlZCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIG5vcm1hbCBwYXRoLiBXZVxuICAgICAgLy8gY291bGQgaGF2ZSBhcHBlbmRlZCBpdCB0byB0aGUgZWZmZWN0IGxpc3QgaW4gdGhlIFN1c3BlbnNlIGNvbXBvbmVudCdzXG4gICAgICAvLyBzZWNvbmQgcGFzcywgYnV0IGRvaW5nIGl0IHRoaXMgd2F5IGlzIGxlc3MgY29tcGxpY2F0ZWQuIFRoaXMgd291bGQgYmVcbiAgICAgIC8vIHNpbXBsZXIgaWYgd2UgZ290IHJpZCBvZiB0aGUgZWZmZWN0IGxpc3QgYW5kIHRyYXZlcnNlZCB0aGUgdHJlZSwgbGlrZVxuICAgICAgLy8gd2UncmUgcGxhbm5pbmcgdG8gZG8uXG4gICAgICB2YXIgcHJpbWFyeUNoaWxkUGFyZW50ID0gZmluaXNoZWRXb3JrLmNoaWxkO1xuICAgICAgaGlkZU9yVW5oaWRlQWxsQ2hpbGRyZW4ocHJpbWFyeUNoaWxkUGFyZW50LCB0cnVlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tbWl0U3VzcGVuc2VIeWRyYXRpb25DYWxsYmFja3MoZmluaXNoZWRSb290LCBmaW5pc2hlZFdvcmspIHtcblxuICB2YXIgbmV3U3RhdGUgPSBmaW5pc2hlZFdvcmsubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAobmV3U3RhdGUgPT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IGZpbmlzaGVkV29yay5hbHRlcm5hdGU7XG5cbiAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgdmFyIHByZXZTdGF0ZSA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZTtcblxuICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgc3VzcGVuc2VJbnN0YW5jZSA9IHByZXZTdGF0ZS5kZWh5ZHJhdGVkO1xuXG4gICAgICAgIGlmIChzdXNwZW5zZUluc3RhbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgY29tbWl0SHlkcmF0ZWRTdXNwZW5zZUluc3RhbmNlKHN1c3BlbnNlSW5zdGFuY2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGFjaFN1c3BlbnNlUmV0cnlMaXN0ZW5lcnMoZmluaXNoZWRXb3JrKSB7XG4gIC8vIElmIHRoaXMgYm91bmRhcnkganVzdCB0aW1lZCBvdXQsIHRoZW4gaXQgd2lsbCBoYXZlIGEgc2V0IG9mIHdha2VhYmxlcy5cbiAgLy8gRm9yIGVhY2ggd2FrZWFibGUsIGF0dGFjaCBhIGxpc3RlbmVyIHNvIHRoYXQgd2hlbiBpdCByZXNvbHZlcywgUmVhY3RcbiAgLy8gYXR0ZW1wdHMgdG8gcmUtcmVuZGVyIHRoZSBib3VuZGFyeSBpbiB0aGUgcHJpbWFyeSAocHJlLXRpbWVvdXQpIHN0YXRlLlxuICB2YXIgd2FrZWFibGVzID0gZmluaXNoZWRXb3JrLnVwZGF0ZVF1ZXVlO1xuXG4gIGlmICh3YWtlYWJsZXMgIT09IG51bGwpIHtcbiAgICBmaW5pc2hlZFdvcmsudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHZhciByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZTtcblxuICAgIGlmIChyZXRyeUNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXRyeUNhY2hlID0gZmluaXNoZWRXb3JrLnN0YXRlTm9kZSA9IG5ldyBQb3NzaWJseVdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICB3YWtlYWJsZXMuZm9yRWFjaChmdW5jdGlvbiAod2FrZWFibGUpIHtcbiAgICAgIC8vIE1lbW9pemUgdXNpbmcgdGhlIGJvdW5kYXJ5IGZpYmVyIHRvIHByZXZlbnQgcmVkdW5kYW50IGxpc3RlbmVycy5cbiAgICAgIHZhciByZXRyeSA9IHJlc29sdmVSZXRyeVdha2VhYmxlLmJpbmQobnVsbCwgZmluaXNoZWRXb3JrLCB3YWtlYWJsZSk7XG5cbiAgICAgIGlmICghcmV0cnlDYWNoZS5oYXMod2FrZWFibGUpKSB7XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAod2FrZWFibGUuX19yZWFjdERvTm90VHJhY2VJbnRlcmFjdGlvbnMgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHJ5ID0gdHJhY2luZy51bnN0YWJsZV93cmFwKHJldHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXRyeUNhY2hlLmFkZCh3YWtlYWJsZSk7XG4gICAgICAgIHdha2VhYmxlLnRoZW4ocmV0cnksIHJldHJ5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSAvLyBUaGlzIGZ1bmN0aW9uIGRldGVjdHMgd2hlbiBhIFN1c3BlbnNlIGJvdW5kYXJ5IGdvZXMgZnJvbSB2aXNpYmxlIHRvIGhpZGRlbi5cbi8vIEl0IHJldHVybnMgZmFsc2UgaWYgdGhlIGJvdW5kYXJ5IGlzIGFscmVhZHkgaGlkZGVuLlxuLy8gVE9ETzogVXNlIGFuIGVmZmVjdCB0YWcuXG5cblxuZnVuY3Rpb24gaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgZmluaXNoZWRXb3JrKSB7XG4gIGlmIChjdXJyZW50ICE9PSBudWxsKSB7XG4gICAgdmFyIG9sZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuXG4gICAgaWYgKG9sZFN0YXRlID09PSBudWxsIHx8IG9sZFN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGZpbmlzaGVkV29yay5tZW1vaXplZFN0YXRlO1xuICAgICAgcmV0dXJuIG5ld1N0YXRlICE9PSBudWxsICYmIG5ld1N0YXRlLmRlaHlkcmF0ZWQgPT09IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBjb21taXRSZXNldFRleHRDb250ZW50KGN1cnJlbnQpIHtcblxuICByZXNldFRleHRDb250ZW50KGN1cnJlbnQuc3RhdGVOb2RlKTtcbn1cblxudmFyIENPTVBPTkVOVF9UWVBFID0gMDtcbnZhciBIQVNfUFNFVURPX0NMQVNTX1RZUEUgPSAxO1xudmFyIFJPTEVfVFlQRSA9IDI7XG52YXIgVEVTVF9OQU1FX1RZUEUgPSAzO1xudmFyIFRFWFRfVFlQRSA9IDQ7XG5cbmlmICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3IpIHtcbiAgdmFyIHN5bWJvbEZvciQxID0gU3ltYm9sLmZvcjtcbiAgQ09NUE9ORU5UX1RZUEUgPSBzeW1ib2xGb3IkMSgnc2VsZWN0b3IuY29tcG9uZW50Jyk7XG4gIEhBU19QU0VVRE9fQ0xBU1NfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5oYXNfcHNldWRvX2NsYXNzJyk7XG4gIFJPTEVfVFlQRSA9IHN5bWJvbEZvciQxKCdzZWxlY3Rvci5yb2xlJyk7XG4gIFRFU1RfTkFNRV9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRlc3RfaWQnKTtcbiAgVEVYVF9UWVBFID0gc3ltYm9sRm9yJDEoJ3NlbGVjdG9yLnRleHQnKTtcbn1cbnZhciBjb21taXRIb29rcyA9IFtdO1xuZnVuY3Rpb24gb25Db21taXRSb290JDEoKSB7XG4gIHtcbiAgICBjb21taXRIb29rcy5mb3JFYWNoKGZ1bmN0aW9uIChjb21taXRIb29rKSB7XG4gICAgICByZXR1cm4gY29tbWl0SG9vaygpO1xuICAgIH0pO1xuICB9XG59XG5cbnZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMiA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyLFxuICAgIElzU29tZVJlbmRlcmVyQWN0aW5nID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuSXNTb21lUmVuZGVyZXJBY3Rpbmc7XG52YXIgTm9Db250ZXh0ID1cbi8qICAgICAgICAgICAgICovXG4wO1xudmFyIEJhdGNoZWRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgKi9cbjE7XG52YXIgRXZlbnRDb250ZXh0ID1cbi8qICAgICAgICAgICAgICAgICAqL1xuMjtcbnZhciBEaXNjcmV0ZUV2ZW50Q29udGV4dCA9XG4vKiAgICAgICAgICovXG40O1xudmFyIExlZ2FjeVVuYmF0Y2hlZENvbnRleHQgPVxuLyogICAgICAgKi9cbjg7XG52YXIgUmVuZGVyQ29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMTY7XG52YXIgQ29tbWl0Q29udGV4dCA9XG4vKiAgICAgICAgICAgICAgICAqL1xuMzI7XG52YXIgUmV0cnlBZnRlckVycm9yID1cbi8qICAgICAgICovXG42NDtcbnZhciBSb290SW5jb21wbGV0ZSA9IDA7XG52YXIgUm9vdEZhdGFsRXJyb3JlZCA9IDE7XG52YXIgUm9vdEVycm9yZWQgPSAyO1xudmFyIFJvb3RTdXNwZW5kZWQgPSAzO1xudmFyIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgPSA0O1xudmFyIFJvb3RDb21wbGV0ZWQgPSA1OyAvLyBEZXNjcmliZXMgd2hlcmUgd2UgYXJlIGluIHRoZSBSZWFjdCBleGVjdXRpb24gc3RhY2tcblxudmFyIGV4ZWN1dGlvbkNvbnRleHQgPSBOb0NvbnRleHQ7IC8vIFRoZSByb290IHdlJ3JlIHdvcmtpbmcgb25cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdCA9IG51bGw7IC8vIFRoZSBmaWJlciB3ZSdyZSB3b3JraW5nIG9uXG5cbnZhciB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7IC8vIFRoZSBsYW5lcyB3ZSdyZSByZW5kZXJpbmdcblxudmFyIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gU3RhY2sgdGhhdCBhbGxvd3MgY29tcG9uZW50cyB0byBjaGFuZ2UgdGhlIHJlbmRlciBsYW5lcyBmb3IgaXRzIHN1YnRyZWVcbi8vIFRoaXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCB3b3JraW5nIG9uIGF0IHRoZSByb290LiBUaGUgb25seVxuLy8gY2FzZSB3aGVyZSBpdCdzIGRpZmZlcmVudCBmcm9tIGB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lc2AgaXMgd2hlbiB3ZVxuLy8gZW50ZXIgYSBzdWJ0cmVlIHRoYXQgaXMgaGlkZGVuIGFuZCBuZWVkcyB0byBiZSB1bmhpZGRlbjogU3VzcGVuc2UgYW5kXG4vLyBPZmZzY3JlZW4gY29tcG9uZW50LlxuLy9cbi8vIE1vc3QgdGhpbmdzIGluIHRoZSB3b3JrIGxvb3Agc2hvdWxkIGRlYWwgd2l0aCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcy5cbi8vIE1vc3QgdGhpbmdzIGluIGJlZ2luL2NvbXBsZXRlIHBoYXNlcyBzaG91bGQgZGVhbCB3aXRoIHN1YnRyZWVSZW5kZXJMYW5lcy5cblxudmFyIHN1YnRyZWVSZW5kZXJMYW5lcyA9IE5vTGFuZXM7XG52YXIgc3VidHJlZVJlbmRlckxhbmVzQ3Vyc29yID0gY3JlYXRlQ3Vyc29yKE5vTGFuZXMpOyAvLyBXaGV0aGVyIHRvIHJvb3QgY29tcGxldGVkLCBlcnJvcmVkLCBzdXNwZW5kZWQsIGV0Yy5cblxudmFyIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290SW5jb21wbGV0ZTsgLy8gQSBmYXRhbCBlcnJvciwgaWYgb25lIGlzIHRocm93blxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvciA9IG51bGw7IC8vIFwiSW5jbHVkZWRcIiBsYW5lcyByZWZlciB0byBsYW5lcyB0aGF0IHdlcmUgd29ya2VkIG9uIGR1cmluZyB0aGlzIHJlbmRlci4gSXQnc1xuLy8gc2xpZ2h0bHkgZGlmZmVyZW50IHRoYW4gYHJlbmRlckxhbmVzYCBiZWNhdXNlIGByZW5kZXJMYW5lc2AgY2FuIGNoYW5nZSBhcyB5b3Vcbi8vIGVudGVyIGFuZCBleGl0IGFuIE9mZnNjcmVlbiB0cmVlLiBUaGlzIHZhbHVlIGlzIHRoZSBjb21iaW5hdGlvbiBvZiBhbGwgcmVuZGVyXG4vLyBsYW5lcyBmb3IgdGhlIGVudGlyZSByZW5kZXIgcGhhc2UuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gTm9MYW5lczsgLy8gVGhlIHdvcmsgbGVmdCBvdmVyIGJ5IGNvbXBvbmVudHMgdGhhdCB3ZXJlIHZpc2l0ZWQgZHVyaW5nIHRoaXMgcmVuZGVyLiBPbmx5XG4vLyBpbmNsdWRlcyB1bnByb2Nlc3NlZCB1cGRhdGVzLCBub3Qgd29yayBpbiBiYWlsZWQgb3V0IGNoaWxkcmVuLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzID0gTm9MYW5lczsgLy8gTGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgKGluIGFuIGludGVybGVhdmVkIGV2ZW50KSBkdXJpbmcgdGhpcyByZW5kZXIuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzOyAvLyBMYW5lcyB0aGF0IHdlcmUgcGluZ2VkIChpbiBhbiBpbnRlcmxlYXZlZCBldmVudCkgZHVyaW5nIHRoaXMgcmVuZGVyLlxuXG52YXIgd29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMgPSBOb0xhbmVzO1xudmFyIG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ID0gbnVsbDsgLy8gVGhlIG1vc3QgcmVjZW50IHRpbWUgd2UgY29tbWl0dGVkIGEgZmFsbGJhY2suIFRoaXMgbGV0cyB1cyBlbnN1cmUgYSB0cmFpblxuLy8gbW9kZWwgd2hlcmUgd2UgZG9uJ3QgY29tbWl0IG5ldyBsb2FkaW5nIHN0YXRlcyBpbiB0b28gcXVpY2sgc3VjY2Vzc2lvbi5cblxudmFyIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPSAwO1xudmFyIEZBTExCQUNLX1RIUk9UVExFX01TID0gNTAwOyAvLyBUaGUgYWJzb2x1dGUgdGltZSBmb3Igd2hlbiB3ZSBzaG91bGQgc3RhcnQgZ2l2aW5nIHVwIG9uIHJlbmRlcmluZ1xuLy8gbW9yZSBhbmQgcHJlZmVyIENQVSBzdXNwZW5zZSBoZXVyaXN0aWNzIGluc3RlYWQuXG5cbnZhciB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gSW5maW5pdHk7IC8vIEhvdyBsb25nIGEgcmVuZGVyIGlzIHN1cHBvc2VkIHRvIHRha2UgYmVmb3JlIHdlIHN0YXJ0IGZvbGxvd2luZyBDUFVcbi8vIHN1c3BlbnNlIGhldXJpc3RpY3MgYW5kIG9wdCBvdXQgb2YgcmVuZGVyaW5nIG1vcmUgY29udGVudC5cblxudmFyIFJFTkRFUl9USU1FT1VUX01TID0gNTAwO1xuXG5mdW5jdGlvbiByZXNldFJlbmRlclRpbWVyKCkge1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJUYXJnZXRUaW1lID0gbm93KCkgKyBSRU5ERVJfVElNRU9VVF9NUztcbn1cblxuZnVuY3Rpb24gZ2V0UmVuZGVyVGFyZ2V0VGltZSgpIHtcbiAgcmV0dXJuIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlclRhcmdldFRpbWU7XG59XG52YXIgbmV4dEVmZmVjdCA9IG51bGw7XG52YXIgaGFzVW5jYXVnaHRFcnJvciA9IGZhbHNlO1xudmFyIGZpcnN0VW5jYXVnaHRFcnJvciA9IG51bGw7XG52YXIgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xudmFyIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG52YXIgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID0gTm9Qcmlvcml0eSQxO1xudmFyIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gTm9MYW5lcztcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcbnZhciBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xudmFyIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPSBudWxsOyAvLyBVc2UgdGhlc2UgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIG5lc3RlZCB1cGRhdGVzXG5cbnZhciBORVNURURfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkVXBkYXRlQ291bnQgPSAwO1xudmFyIHJvb3RXaXRoTmVzdGVkVXBkYXRlcyA9IG51bGw7XG52YXIgTkVTVEVEX1BBU1NJVkVfVVBEQVRFX0xJTUlUID0gNTA7XG52YXIgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDsgLy8gTWFya3MgdGhlIG5lZWQgdG8gcmVzY2hlZHVsZSBwZW5kaW5nIGludGVyYWN0aW9ucyBhdCB0aGVzZSBsYW5lc1xuLy8gZHVyaW5nIHRoZSBjb21taXQgcGhhc2UuIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIHRyYWNlZCBhY3Jvc3MgY29tcG9uZW50c1xuLy8gdGhhdCBzcGF3biBuZXcgd29yayBkdXJpbmcgcmVuZGVyLiBFLmcuIGhpZGRlbiBib3VuZGFyaWVzLCBzdXNwZW5kZWQgU1NSXG4vLyBoeWRyYXRpb24gb3IgU3VzcGVuc2VMaXN0LlxuLy8gVE9ETzogQ2FuIHVzZSBhIGJpdG1hc2sgaW5zdGVhZCBvZiBhbiBhcnJheVxuXG52YXIgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsOyAvLyBJZiB0d28gdXBkYXRlcyBhcmUgc2NoZWR1bGVkIHdpdGhpbiB0aGUgc2FtZSBldmVudCwgd2Ugc2hvdWxkIHRyZWF0IHRoZWlyXG4vLyBldmVudCB0aW1lcyBhcyBzaW11bHRhbmVvdXMsIGV2ZW4gaWYgdGhlIGFjdHVhbCBjbG9jayB0aW1lIGhhcyBhZHZhbmNlZFxuLy8gYmV0d2VlbiB0aGUgZmlyc3QgYW5kIHNlY29uZCBjYWxsLlxuXG52YXIgY3VycmVudEV2ZW50VGltZSA9IE5vVGltZXN0YW1wO1xudmFyIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbnZhciBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgPSBOb0xhbmVzOyAvLyBEZXYgb25seSBmbGFnIHRoYXQgdHJhY2tzIGlmIHBhc3NpdmUgZWZmZWN0cyBhcmUgY3VycmVudGx5IGJlaW5nIGZsdXNoZWQuXG4vLyBXZSB3YXJuIGFib3V0IHN0YXRlIHVwZGF0ZXMgZm9yIHVubW91bnRlZCBjb21wb25lbnRzIGRpZmZlcmVudGx5IGluIHRoaXMgY2FzZS5cblxudmFyIGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cyA9IGZhbHNlO1xudmFyIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IG51bGw7XG52YXIgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gZmFsc2U7XG5mdW5jdGlvbiBnZXRXb3JrSW5Qcm9ncmVzc1Jvb3QoKSB7XG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3Q7XG59XG5mdW5jdGlvbiByZXF1ZXN0RXZlbnRUaW1lKCkge1xuICBpZiAoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAgLy8gV2UncmUgaW5zaWRlIFJlYWN0LCBzbyBpdCdzIGZpbmUgdG8gcmVhZCB0aGUgYWN0dWFsIHRpbWUuXG4gICAgcmV0dXJuIG5vdygpO1xuICB9IC8vIFdlJ3JlIG5vdCBpbnNpZGUgUmVhY3QsIHNvIHdlIG1heSBiZSBpbiB0aGUgbWlkZGxlIG9mIGEgYnJvd3NlciBldmVudC5cblxuXG4gIGlmIChjdXJyZW50RXZlbnRUaW1lICE9PSBOb1RpbWVzdGFtcCkge1xuICAgIC8vIFVzZSB0aGUgc2FtZSBzdGFydCB0aW1lIGZvciBhbGwgdXBkYXRlcyB1bnRpbCB3ZSBlbnRlciBSZWFjdCBhZ2Fpbi5cbiAgICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbiAgfSAvLyBUaGlzIGlzIHRoZSBmaXJzdCB1cGRhdGUgc2luY2UgUmVhY3QgeWllbGRlZC4gQ29tcHV0ZSBhIG5ldyBzdGFydCB0aW1lLlxuXG5cbiAgY3VycmVudEV2ZW50VGltZSA9IG5vdygpO1xuICByZXR1cm4gY3VycmVudEV2ZW50VGltZTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RVcGRhdGVMYW5lKGZpYmVyKSB7XG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBUaGUgYWxnb3JpdGhtIGZvciBhc3NpZ25pbmcgYW4gdXBkYXRlIHRvIGEgbGFuZSBzaG91bGQgYmUgc3RhYmxlIGZvciBhbGxcbiAgLy8gdXBkYXRlcyBhdCB0aGUgc2FtZSBwcmlvcml0eSB3aXRoaW4gdGhlIHNhbWUgZXZlbnQuIFRvIGRvIHRoaXMsIHRoZSBpbnB1dHNcbiAgLy8gdG8gdGhlIGFsZ29yaXRobSBtdXN0IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgd2UgdXNlIHRoZSBgcmVuZGVyTGFuZXNgXG4gIC8vIHRvIGF2b2lkIGNob29zaW5nIGEgbGFuZSB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIG1pZGRsZSBvZiByZW5kZXJpbmcuXG4gIC8vXG4gIC8vIEhvd2V2ZXIsIHRoZSBcImluY2x1ZGVkXCIgbGFuZXMgY291bGQgYmUgbXV0YXRlZCBpbiBiZXR3ZWVuIHVwZGF0ZXMgaW4gdGhlXG4gIC8vIHNhbWUgZXZlbnQsIGxpa2UgaWYgeW91IHBlcmZvcm0gYW4gdXBkYXRlIGluc2lkZSBgZmx1c2hTeW5jYC4gT3IgYW55IG90aGVyXG4gIC8vIGNvZGUgcGF0aCB0aGF0IG1pZ2h0IGNhbGwgYHByZXBhcmVGcmVzaFN0YWNrYC5cbiAgLy9cbiAgLy8gVGhlIHRyaWNrIHdlIHVzZSBpcyB0byBjYWNoZSB0aGUgZmlyc3Qgb2YgZWFjaCBvZiB0aGVzZSBpbnB1dHMgd2l0aGluIGFuXG4gIC8vIGV2ZW50LiBUaGVuIHJlc2V0IHRoZSBjYWNoZWQgdmFsdWVzIG9uY2Ugd2UgY2FuIGJlIHN1cmUgdGhlIGV2ZW50IGlzIG92ZXIuXG4gIC8vIE91ciBoZXVyaXN0aWMgZm9yIHRoYXQgaXMgd2hlbmV2ZXIgd2UgZW50ZXIgYSBjb25jdXJyZW50IHdvcmsgbG9vcC5cbiAgLy9cbiAgLy8gV2UnbGwgZG8gdGhlIHNhbWUgZm9yIGBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXNgIGJlbG93LlxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgdmFyIGlzVHJhbnNpdGlvbiA9IHJlcXVlc3RDdXJyZW50VHJhbnNpdGlvbigpICE9PSBOb1RyYW5zaXRpb247XG5cbiAgaWYgKGlzVHJhbnNpdGlvbikge1xuICAgIGlmIChjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMgIT09IE5vTGFuZXMpIHtcbiAgICAgIGN1cnJlbnRFdmVudFBlbmRpbmdMYW5lcyA9IG1vc3RSZWNlbnRseVVwZGF0ZWRSb290ICE9PSBudWxsID8gbW9zdFJlY2VudGx5VXBkYXRlZFJvb3QucGVuZGluZ0xhbmVzIDogTm9MYW5lcztcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZFRyYW5zaXRpb25MYW5lKGN1cnJlbnRFdmVudFdpcExhbmVzLCBjdXJyZW50RXZlbnRQZW5kaW5nTGFuZXMpO1xuICB9IC8vIFRPRE86IFJlbW92ZSB0aGlzIGRlcGVuZGVuY3kgb24gdGhlIFNjaGVkdWxlciBwcmlvcml0eS5cbiAgLy8gVG8gZG8gdGhhdCwgd2UncmUgcmVwbGFjaW5nIGl0IHdpdGggYW4gdXBkYXRlIGxhbmUgcHJpb3JpdHkuXG5cblxuICB2YXIgc2NoZWR1bGVyUHJpb3JpdHkgPSBnZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpOyAvLyBUaGUgb2xkIGJlaGF2aW9yIHdhcyB1c2luZyB0aGUgcHJpb3JpdHkgbGV2ZWwgb2YgdGhlIFNjaGVkdWxlci5cbiAgLy8gVGhpcyBjb3VwbGVzIFJlYWN0IHRvIHRoZSBTY2hlZHVsZXIgaW50ZXJuYWxzLCBzbyB3ZSdyZSByZXBsYWNpbmcgaXRcbiAgLy8gd2l0aCB0aGUgY3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eSBhYm92ZS4gQXMgYW4gZXhhbXBsZSBvZiBob3cgdGhpc1xuICAvLyBjb3VsZCBiZSBwcm9ibGVtYXRpYywgaWYgd2UncmUgbm90IGluc2lkZSBgU2NoZWR1bGVyLnJ1bldpdGhQcmlvcml0eWAsXG4gIC8vIHRoZW4gd2UnbGwgZ2V0IHRoZSBwcmlvcml0eSBvZiB0aGUgY3VycmVudCBydW5uaW5nIFNjaGVkdWxlciB0YXNrLFxuICAvLyB3aGljaCBpcyBwcm9iYWJseSBub3Qgd2hhdCB3ZSB3YW50LlxuXG4gIHZhciBsYW5lO1xuXG4gIGlmICggLy8gVE9ETzogVGVtcG9yYXJ5LiBXZSdyZSByZW1vdmluZyB0aGUgY29uY2VwdCBvZiBkaXNjcmV0ZSB1cGRhdGVzLlxuICAoZXhlY3V0aW9uQ29udGV4dCAmIERpc2NyZXRlRXZlbnRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIHNjaGVkdWxlclByaW9yaXR5ID09PSBVc2VyQmxvY2tpbmdQcmlvcml0eSQyKSB7XG4gICAgbGFuZSA9IGZpbmRVcGRhdGVMYW5lKElucHV0RGlzY3JldGVMYW5lUHJpb3JpdHksIGN1cnJlbnRFdmVudFdpcExhbmVzKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgc2NoZWR1bGVyTGFuZVByaW9yaXR5ID0gc2NoZWR1bGVyUHJpb3JpdHlUb0xhbmVQcmlvcml0eShzY2hlZHVsZXJQcmlvcml0eSk7XG5cbiAgICBsYW5lID0gZmluZFVwZGF0ZUxhbmUoc2NoZWR1bGVyTGFuZVByaW9yaXR5LCBjdXJyZW50RXZlbnRXaXBMYW5lcyk7XG4gIH1cblxuICByZXR1cm4gbGFuZTtcbn1cblxuZnVuY3Rpb24gcmVxdWVzdFJldHJ5TGFuZShmaWJlcikge1xuICAvLyBUaGlzIGlzIGEgZm9yayBvZiBgcmVxdWVzdFVwZGF0ZUxhbmVgIGRlc2lnbmVkIHNwZWNpZmljYWxseSBmb3IgU3VzcGVuc2VcbiAgLy8gXCJyZXRyaWVzXCIg4oCUIGEgc3BlY2lhbCB1cGRhdGUgdGhhdCBhdHRlbXB0cyB0byBmbGlwIGEgU3VzcGVuc2UgYm91bmRhcnlcbiAgLy8gZnJvbSBpdHMgcGxhY2Vob2xkZXIgc3RhdGUgdG8gaXRzIHByaW1hcnkvcmVzb2x2ZWQgc3RhdGUuXG4gIC8vIFNwZWNpYWwgY2FzZXNcbiAgdmFyIG1vZGUgPSBmaWJlci5tb2RlO1xuXG4gIGlmICgobW9kZSAmIEJsb2NraW5nTW9kZSkgPT09IE5vTW9kZSkge1xuICAgIHJldHVybiBTeW5jTGFuZTtcbiAgfSBlbHNlIGlmICgobW9kZSAmIENvbmN1cnJlbnRNb2RlKSA9PT0gTm9Nb2RlKSB7XG4gICAgcmV0dXJuIGdldEN1cnJlbnRQcmlvcml0eUxldmVsKCkgPT09IEltbWVkaWF0ZVByaW9yaXR5JDEgPyBTeW5jTGFuZSA6IFN5bmNCYXRjaGVkTGFuZTtcbiAgfSAvLyBTZWUgYHJlcXVlc3RVcGRhdGVMYW5lYCBmb3IgZXhwbGFuYXRpb24gb2YgYGN1cnJlbnRFdmVudFdpcExhbmVzYFxuXG5cbiAgaWYgKGN1cnJlbnRFdmVudFdpcExhbmVzID09PSBOb0xhbmVzKSB7XG4gICAgY3VycmVudEV2ZW50V2lwTGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzO1xuICB9XG5cbiAgcmV0dXJuIGZpbmRSZXRyeUxhbmUoY3VycmVudEV2ZW50V2lwTGFuZXMpO1xufVxuXG5mdW5jdGlvbiBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSkge1xuICBjaGVja0Zvck5lc3RlZFVwZGF0ZXMoKTtcbiAgd2FybkFib3V0UmVuZGVyUGhhc2VVcGRhdGVzSW5ERVYoZmliZXIpO1xuICB2YXIgcm9vdCA9IG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KGZpYmVyLCBsYW5lKTtcblxuICBpZiAocm9vdCA9PT0gbnVsbCkge1xuICAgIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gTWFyayB0aGF0IHRoZSByb290IGhhcyBhIHBlbmRpbmcgdXBkYXRlLlxuXG5cbiAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIGxhbmUsIGV2ZW50VGltZSk7XG5cbiAgaWYgKHJvb3QgPT09IHdvcmtJblByb2dyZXNzUm9vdCkge1xuICAgIC8vIFJlY2VpdmVkIGFuIHVwZGF0ZSB0byBhIHRyZWUgdGhhdCdzIGluIHRoZSBtaWRkbGUgb2YgcmVuZGVyaW5nLiBNYXJrXG4gICAgLy8gdGhhdCB0aGVyZSB3YXMgYW4gaW50ZXJsZWF2ZWQgdXBkYXRlIHdvcmsgb24gdGhpcyByb290LiBVbmxlc3MgdGhlXG4gICAgLy8gYGRlZmVyUmVuZGVyUGhhc2VVcGRhdGVUb05leHRCYXRjaGAgZmxhZyBpcyBvZmYgYW5kIHRoaXMgaXMgYSByZW5kZXJcbiAgICAvLyBwaGFzZSB1cGRhdGUuIEluIHRoYXQgY2FzZSwgd2UgZG9uJ3QgdHJlYXQgcmVuZGVyIHBoYXNlIHVwZGF0ZXMgYXMgaWZcbiAgICAvLyB0aGV5IHdlcmUgaW50ZXJsZWF2ZWQsIGZvciBiYWNrd2FyZHMgY29tcGF0IHJlYXNvbnMuXG4gICAge1xuICAgICAgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMsIGxhbmUpO1xuICAgIH1cblxuICAgIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290U3VzcGVuZGVkV2l0aERlbGF5KSB7XG4gICAgICAvLyBUaGUgcm9vdCBhbHJlYWR5IHN1c3BlbmRlZCB3aXRoIGEgZGVsYXksIHdoaWNoIG1lYW5zIHRoaXMgcmVuZGVyXG4gICAgICAvLyBkZWZpbml0ZWx5IHdvbid0IGZpbmlzaC4gU2luY2Ugd2UgaGF2ZSBhIG5ldyB1cGRhdGUsIGxldCdzIG1hcmsgaXQgYXNcbiAgICAgIC8vIHN1c3BlbmRlZCBub3csIHJpZ2h0IGJlZm9yZSBtYXJraW5nIHRoZSBpbmNvbWluZyB1cGRhdGUuIFRoaXMgaGFzIHRoZVxuICAgICAgLy8gZWZmZWN0IG9mIGludGVycnVwdGluZyB0aGUgY3VycmVudCByZW5kZXIgYW5kIHN3aXRjaGluZyB0byB0aGUgdXBkYXRlLlxuICAgICAgLy8gVE9ETzogTWFrZSBzdXJlIHRoaXMgZG9lc24ndCBvdmVycmlkZSBwaW5ncyB0aGF0IGhhcHBlbiB3aGlsZSB3ZSd2ZVxuICAgICAgLy8gYWxyZWFkeSBzdGFydGVkIHJlbmRlcmluZy5cbiAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiByZXF1ZXN0VXBkYXRlTGFuZVByaW9yaXR5IGFsc28gcmVhZHMgdGhlIHByaW9yaXR5LiBQYXNzIHRoZVxuICAvLyBwcmlvcml0eSBhcyBhbiBhcmd1bWVudCB0byB0aGF0IGZ1bmN0aW9uIGFuZCB0aGlzIG9uZS5cblxuXG4gIHZhciBwcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcblxuICBpZiAobGFuZSA9PT0gU3luY0xhbmUpIHtcbiAgICBpZiAoIC8vIENoZWNrIGlmIHdlJ3JlIGluc2lkZSB1bmJhdGNoZWRVcGRhdGVzXG4gICAgKGV4ZWN1dGlvbkNvbnRleHQgJiBMZWdhY3lVbmJhdGNoZWRDb250ZXh0KSAhPT0gTm9Db250ZXh0ICYmIC8vIENoZWNrIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IHJlbmRlcmluZ1xuICAgIChleGVjdXRpb25Db250ZXh0ICYgKFJlbmRlckNvbnRleHQgfCBDb21taXRDb250ZXh0KSkgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gUmVnaXN0ZXIgcGVuZGluZyBpbnRlcmFjdGlvbnMgb24gdGhlIHJvb3QgdG8gYXZvaWQgbG9zaW5nIHRyYWNlZCBpbnRlcmFjdGlvbiBkYXRhLlxuICAgICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmUpOyAvLyBUaGlzIGlzIGEgbGVnYWN5IGVkZ2UgY2FzZS4gVGhlIGluaXRpYWwgbW91bnQgb2YgYSBSZWFjdERPTS5yZW5kZXItZWRcbiAgICAgIC8vIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzIHNob3VsZCBiZSBzeW5jaHJvbm91cywgYnV0IGxheW91dCB1cGRhdGVzXG4gICAgICAvLyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYmF0Y2guXG5cbiAgICAgIHBlcmZvcm1TeW5jV29ya09uUm9vdChyb290KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG5cbiAgICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgICAgLy8gRmx1c2ggdGhlIHN5bmNocm9ub3VzIHdvcmsgbm93LCB1bmxlc3Mgd2UncmUgYWxyZWFkeSB3b3JraW5nIG9yIGluc2lkZVxuICAgICAgICAvLyBhIGJhdGNoLiBUaGlzIGlzIGludGVudGlvbmFsbHkgaW5zaWRlIHNjaGVkdWxlVXBkYXRlT25GaWJlciBpbnN0ZWFkIG9mXG4gICAgICAgIC8vIHNjaGVkdWxlQ2FsbGJhY2tGb3JGaWJlciB0byBwcmVzZXJ2ZSB0aGUgYWJpbGl0eSB0byBzY2hlZHVsZSBhIGNhbGxiYWNrXG4gICAgICAgIC8vIHdpdGhvdXQgaW1tZWRpYXRlbHkgZmx1c2hpbmcgaXQuIFdlIG9ubHkgZG8gdGhpcyBmb3IgdXNlci1pbml0aWF0ZWRcbiAgICAgICAgLy8gdXBkYXRlcywgdG8gcHJlc2VydmUgaGlzdG9yaWNhbCBiZWhhdmlvciBvZiBsZWdhY3kgbW9kZS5cbiAgICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFNjaGVkdWxlIGEgZGlzY3JldGUgdXBkYXRlIGJ1dCBvbmx5IGlmIGl0J3Mgbm90IFN5bmMuXG4gICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgRGlzY3JldGVFdmVudENvbnRleHQpICE9PSBOb0NvbnRleHQgJiYgKCAvLyBPbmx5IHVwZGF0ZXMgYXQgdXNlci1ibG9ja2luZyBwcmlvcml0eSBvciBncmVhdGVyIGFyZSBjb25zaWRlcmVkXG4gICAgLy8gZGlzY3JldGUsIGV2ZW4gaW5zaWRlIGEgZGlzY3JldGUgZXZlbnQuXG4gICAgcHJpb3JpdHlMZXZlbCA9PT0gVXNlckJsb2NraW5nUHJpb3JpdHkkMiB8fCBwcmlvcml0eUxldmVsID09PSBJbW1lZGlhdGVQcmlvcml0eSQxKSkge1xuICAgICAgLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIGEgZGlzY3JldGUgZXZlbnQuIFRyYWNrIHRoZSBsb3dlc3QgcHJpb3JpdHlcbiAgICAgIC8vIGRpc2NyZXRlIHVwZGF0ZSBwZXIgcm9vdCBzbyB3ZSBjYW4gZmx1c2ggdGhlbSBlYXJseSwgaWYgbmVlZGVkLlxuICAgICAgaWYgKHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG5ldyBTZXQoW3Jvb3RdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuYWRkKHJvb3QpO1xuICAgICAgfVxuICAgIH0gLy8gU2NoZWR1bGUgb3RoZXIgdXBkYXRlcyBhZnRlciBpbiBjYXNlIHRoZSBjYWxsYmFjayBpcyBzeW5jLlxuXG5cbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSk7XG4gIH0gLy8gV2UgdXNlIHRoaXMgd2hlbiBhc3NpZ25pbmcgYSBsYW5lIGZvciBhIHRyYW5zaXRpb24gaW5zaWRlXG4gIC8vIGByZXF1ZXN0VXBkYXRlTGFuZWAuIFdlIGFzc3VtZSBpdCdzIHRoZSBzYW1lIGFzIHRoZSByb290IGJlaW5nIHVwZGF0ZWQsXG4gIC8vIHNpbmNlIGluIHRoZSBjb21tb24gY2FzZSBvZiBhIHNpbmdsZSByb290IGFwcCBpdCBwcm9iYWJseSBpcy4gSWYgaXQncyBub3RcbiAgLy8gdGhlIHNhbWUgcm9vdCwgdGhlbiBpdCdzIG5vdCBhIGh1Z2UgZGVhbCwgd2UganVzdCBtaWdodCBiYXRjaCBtb3JlIHN0dWZmXG4gIC8vIHRvZ2V0aGVyIG1vcmUgdGhhbiBuZWNlc3NhcnkuXG5cblxuICBtb3N0UmVjZW50bHlVcGRhdGVkUm9vdCA9IHJvb3Q7XG59IC8vIFRoaXMgaXMgc3BsaXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHdlIGNhbiBtYXJrIGEgZmliZXIgd2l0aCBwZW5kaW5nXG4vLyB3b3JrIHdpdGhvdXQgdHJlYXRpbmcgaXQgYXMgYSB0eXBpY2FsIHVwZGF0ZSB0aGF0IG9yaWdpbmF0ZXMgZnJvbSBhbiBldmVudDtcbi8vIGUuZy4gcmV0cnlpbmcgYSBTdXNwZW5zZSBib3VuZGFyeSBpc24ndCBhbiB1cGRhdGUsIGJ1dCBpdCBkb2VzIHNjaGVkdWxlIHdvcmtcbi8vIG9uIGEgZmliZXIuXG5cbmZ1bmN0aW9uIG1hcmtVcGRhdGVMYW5lRnJvbUZpYmVyVG9Sb290KHNvdXJjZUZpYmVyLCBsYW5lKSB7XG4gIC8vIFVwZGF0ZSB0aGUgc291cmNlIGZpYmVyJ3MgbGFuZXNcbiAgc291cmNlRmliZXIubGFuZXMgPSBtZXJnZUxhbmVzKHNvdXJjZUZpYmVyLmxhbmVzLCBsYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IHNvdXJjZUZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlICE9PSBudWxsKSB7XG4gICAgYWx0ZXJuYXRlLmxhbmVzID0gbWVyZ2VMYW5lcyhhbHRlcm5hdGUubGFuZXMsIGxhbmUpO1xuICB9XG5cbiAge1xuICAgIGlmIChhbHRlcm5hdGUgPT09IG51bGwgJiYgKHNvdXJjZUZpYmVyLmZsYWdzICYgKFBsYWNlbWVudCB8IEh5ZHJhdGluZykpICE9PSBOb0ZsYWdzKSB7XG4gICAgICB3YXJuQWJvdXRVcGRhdGVPbk5vdFlldE1vdW50ZWRGaWJlckluREVWKHNvdXJjZUZpYmVyKTtcbiAgICB9XG4gIH0gLy8gV2FsayB0aGUgcGFyZW50IHBhdGggdG8gdGhlIHJvb3QgYW5kIHVwZGF0ZSB0aGUgY2hpbGQgZXhwaXJhdGlvbiB0aW1lLlxuXG5cbiAgdmFyIG5vZGUgPSBzb3VyY2VGaWJlcjtcbiAgdmFyIHBhcmVudCA9IHNvdXJjZUZpYmVyLnJldHVybjtcblxuICB3aGlsZSAocGFyZW50ICE9PSBudWxsKSB7XG4gICAgcGFyZW50LmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKHBhcmVudC5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICBhbHRlcm5hdGUgPSBwYXJlbnQuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmNoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKGFsdGVybmF0ZS5jaGlsZExhbmVzLCBsYW5lKTtcbiAgICB9IGVsc2Uge1xuICAgICAge1xuICAgICAgICBpZiAoKHBhcmVudC5mbGFncyAmIChQbGFjZW1lbnQgfCBIeWRyYXRpbmcpKSAhPT0gTm9GbGFncykge1xuICAgICAgICAgIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoc291cmNlRmliZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbm9kZSA9IHBhcmVudDtcbiAgICBwYXJlbnQgPSBwYXJlbnQucmV0dXJuO1xuICB9XG5cbiAgaWYgKG5vZGUudGFnID09PSBIb3N0Um9vdCkge1xuICAgIHZhciByb290ID0gbm9kZS5zdGF0ZU5vZGU7XG4gICAgcmV0dXJuIHJvb3Q7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gLy8gVXNlIHRoaXMgZnVuY3Rpb24gdG8gc2NoZWR1bGUgYSB0YXNrIGZvciBhIHJvb3QuIFRoZXJlJ3Mgb25seSBvbmUgdGFzayBwZXJcbi8vIHJvb3Q7IGlmIGEgdGFzayB3YXMgYWxyZWFkeSBzY2hlZHVsZWQsIHdlJ2xsIGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgcHJpb3JpdHlcbi8vIG9mIHRoZSBleGlzdGluZyB0YXNrIGlzIHRoZSBzYW1lIGFzIHRoZSBwcmlvcml0eSBvZiB0aGUgbmV4dCBsZXZlbCB0aGF0IHRoZVxuLy8gcm9vdCBoYXMgd29yayBvbi4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgb24gZXZlcnkgdXBkYXRlLCBhbmQgcmlnaHQgYmVmb3JlXG4vLyBleGl0aW5nIGEgdGFzay5cblxuXG5mdW5jdGlvbiBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgY3VycmVudFRpbWUpIHtcbiAgdmFyIGV4aXN0aW5nQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7IC8vIENoZWNrIGlmIGFueSBsYW5lcyBhcmUgYmVpbmcgc3RhcnZlZCBieSBvdGhlciB3b3JrLiBJZiBzbywgbWFyayB0aGVtIGFzXG4gIC8vIGV4cGlyZWQgc28gd2Uga25vdyB0byB3b3JrIG9uIHRob3NlIG5leHQuXG5cbiAgbWFya1N0YXJ2ZWRMYW5lc0FzRXhwaXJlZChyb290LCBjdXJyZW50VGltZSk7IC8vIERldGVybWluZSB0aGUgbmV4dCBsYW5lcyB0byB3b3JrIG9uLCBhbmQgdGhlaXIgcHJpb3JpdHkuXG5cbiAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpOyAvLyBUaGlzIHJldHVybnMgdGhlIHByaW9yaXR5IGxldmVsIGNvbXB1dGVkIGR1cmluZyB0aGUgYGdldE5leHRMYW5lc2AgY2FsbC5cblxuICB2YXIgbmV3Q2FsbGJhY2tQcmlvcml0eSA9IHJldHVybk5leHRMYW5lc1ByaW9yaXR5KCk7XG5cbiAgaWYgKG5leHRMYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogVGhlcmUncyBub3RoaW5nIHRvIHdvcmsgb24uXG4gICAgaWYgKGV4aXN0aW5nQ2FsbGJhY2tOb2RlICE9PSBudWxsKSB7XG4gICAgICBjYW5jZWxDYWxsYmFjayhleGlzdGluZ0NhbGxiYWNrTm9kZSk7XG4gICAgICByb290LmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gICAgICByb290LmNhbGxiYWNrUHJpb3JpdHkgPSBOb0xhbmVQcmlvcml0eTtcbiAgICB9XG5cbiAgICByZXR1cm47XG4gIH0gLy8gQ2hlY2sgaWYgdGhlcmUncyBhbiBleGlzdGluZyB0YXNrLiBXZSBtYXkgYmUgYWJsZSB0byByZXVzZSBpdC5cblxuXG4gIGlmIChleGlzdGluZ0NhbGxiYWNrTm9kZSAhPT0gbnVsbCkge1xuICAgIHZhciBleGlzdGluZ0NhbGxiYWNrUHJpb3JpdHkgPSByb290LmNhbGxiYWNrUHJpb3JpdHk7XG5cbiAgICBpZiAoZXhpc3RpbmdDYWxsYmFja1ByaW9yaXR5ID09PSBuZXdDYWxsYmFja1ByaW9yaXR5KSB7XG4gICAgICAvLyBUaGUgcHJpb3JpdHkgaGFzbid0IGNoYW5nZWQuIFdlIGNhbiByZXVzZSB0aGUgZXhpc3RpbmcgdGFzay4gRXhpdC5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFRoZSBwcmlvcml0eSBjaGFuZ2VkLiBDYW5jZWwgdGhlIGV4aXN0aW5nIGNhbGxiYWNrLiBXZSdsbCBzY2hlZHVsZSBhIG5ld1xuICAgIC8vIG9uZSBiZWxvdy5cblxuXG4gICAgY2FuY2VsQ2FsbGJhY2soZXhpc3RpbmdDYWxsYmFja05vZGUpO1xuICB9IC8vIFNjaGVkdWxlIGEgbmV3IGNhbGxiYWNrLlxuXG5cbiAgdmFyIG5ld0NhbGxiYWNrTm9kZTtcblxuICBpZiAobmV3Q2FsbGJhY2tQcmlvcml0eSA9PT0gU3luY0xhbmVQcmlvcml0eSkge1xuICAgIC8vIFNwZWNpYWwgY2FzZTogU3luYyBSZWFjdCBjYWxsYmFja3MgYXJlIHNjaGVkdWxlZCBvbiBhIHNwZWNpYWxcbiAgICAvLyBpbnRlcm5hbCBxdWV1ZVxuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlU3luY0NhbGxiYWNrKHBlcmZvcm1TeW5jV29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfSBlbHNlIGlmIChuZXdDYWxsYmFja1ByaW9yaXR5ID09PSBTeW5jQmF0Y2hlZExhbmVQcmlvcml0eSkge1xuICAgIG5ld0NhbGxiYWNrTm9kZSA9IHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgcGVyZm9ybVN5bmNXb3JrT25Sb290LmJpbmQobnVsbCwgcm9vdCkpO1xuICB9IGVsc2Uge1xuICAgIHZhciBzY2hlZHVsZXJQcmlvcml0eUxldmVsID0gbGFuZVByaW9yaXR5VG9TY2hlZHVsZXJQcmlvcml0eShuZXdDYWxsYmFja1ByaW9yaXR5KTtcbiAgICBuZXdDYWxsYmFja05vZGUgPSBzY2hlZHVsZUNhbGxiYWNrKHNjaGVkdWxlclByaW9yaXR5TGV2ZWwsIHBlcmZvcm1Db25jdXJyZW50V29ya09uUm9vdC5iaW5kKG51bGwsIHJvb3QpKTtcbiAgfVxuXG4gIHJvb3QuY2FsbGJhY2tQcmlvcml0eSA9IG5ld0NhbGxiYWNrUHJpb3JpdHk7XG4gIHJvb3QuY2FsbGJhY2tOb2RlID0gbmV3Q2FsbGJhY2tOb2RlO1xufSAvLyBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgZXZlcnkgY29uY3VycmVudCB0YXNrLCBpLmUuIGFueXRoaW5nIHRoYXRcbi8vIGdvZXMgdGhyb3VnaCBTY2hlZHVsZXIuXG5cblxuZnVuY3Rpb24gcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KHJvb3QpIHtcbiAgLy8gU2luY2Ugd2Uga25vdyB3ZSdyZSBpbiBhIFJlYWN0IGV2ZW50LCB3ZSBjYW4gY2xlYXIgdGhlIGN1cnJlbnRcbiAgLy8gZXZlbnQgdGltZS4gVGhlIG5leHQgdXBkYXRlIHdpbGwgY29tcHV0ZSBhIG5ldyBldmVudCB0aW1lLlxuICBjdXJyZW50RXZlbnRUaW1lID0gTm9UaW1lc3RhbXA7XG4gIGN1cnJlbnRFdmVudFdpcExhbmVzID0gTm9MYW5lcztcbiAgY3VycmVudEV2ZW50UGVuZGluZ0xhbmVzID0gTm9MYW5lcztcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH0gLy8gRmx1c2ggYW55IHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIGJlZm9yZSBkZWNpZGluZyB3aGljaCBsYW5lcyB0byB3b3JrIG9uLFxuICAvLyBpbiBjYXNlIHRoZXkgc2NoZWR1bGUgYWRkaXRpb25hbCB3b3JrLlxuXG5cbiAgdmFyIG9yaWdpbmFsQ2FsbGJhY2tOb2RlID0gcm9vdC5jYWxsYmFja05vZGU7XG4gIHZhciBkaWRGbHVzaFBhc3NpdmVFZmZlY3RzID0gZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuXG4gIGlmIChkaWRGbHVzaFBhc3NpdmVFZmZlY3RzKSB7XG4gICAgLy8gU29tZXRoaW5nIGluIHRoZSBwYXNzaXZlIGVmZmVjdCBwaGFzZSBtYXkgaGF2ZSBjYW5jZWxlZCB0aGUgY3VycmVudCB0YXNrLlxuICAgIC8vIENoZWNrIGlmIHRoZSB0YXNrIG5vZGUgZm9yIHRoaXMgcm9vdCB3YXMgY2hhbmdlZC5cbiAgICBpZiAocm9vdC5jYWxsYmFja05vZGUgIT09IG9yaWdpbmFsQ2FsbGJhY2tOb2RlKSB7XG4gICAgICAvLyBUaGUgY3VycmVudCB0YXNrIHdhcyBjYW5jZWxlZC4gRXhpdC4gV2UgZG9uJ3QgbmVlZCB0byBjYWxsXG4gICAgICAvLyBgZW5zdXJlUm9vdElzU2NoZWR1bGVkYCBiZWNhdXNlIHRoZSBjaGVjayBhYm92ZSBpbXBsaWVzIGVpdGhlciB0aGF0XG4gICAgICAvLyB0aGVyZSdzIGEgbmV3IHRhc2ssIG9yIHRoYXQgdGhlcmUncyBubyByZW1haW5pbmcgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH0gLy8gRGV0ZXJtaW5lIHRoZSBuZXh0IGV4cGlyYXRpb24gdGltZSB0byB3b3JrIG9uLCB1c2luZyB0aGUgZmllbGRzIHN0b3JlZFxuICAvLyBvbiB0aGUgcm9vdC5cblxuXG4gIHZhciBsYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCByb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgPyB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyA6IE5vTGFuZXMpO1xuXG4gIGlmIChsYW5lcyA9PT0gTm9MYW5lcykge1xuICAgIC8vIERlZmVuc2l2ZSBjb2RpbmcuIFRoaXMgaXMgbmV2ZXIgZXhwZWN0ZWQgdG8gaGFwcGVuLlxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIGV4aXRTdGF0dXMgPSByZW5kZXJSb290Q29uY3VycmVudChyb290LCBsYW5lcyk7XG5cbiAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgIC8vIFRoZSByZW5kZXIgaW5jbHVkZWQgbGFuZXMgdGhhdCB3ZXJlIHVwZGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgLy8gRm9yIGV4YW1wbGUsIHdoZW4gdW5oaWRpbmcgYSBoaWRkZW4gdHJlZSwgd2UgaW5jbHVkZSBhbGwgdGhlIGxhbmVzXG4gICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgLy8gbGFuZXMgaXMgYSBzdXBlcnNldCBvZiB0aGUgbGFuZXMgd2Ugc3RhcnRlZCByZW5kZXJpbmcgd2l0aC5cbiAgICAvL1xuICAgIC8vIFNvIHdlJ2xsIHRocm93IG91dCB0aGUgY3VycmVudCB3b3JrIGFuZCByZXN0YXJ0LlxuICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICB9IGVsc2UgaWYgKGV4aXRTdGF0dXMgIT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RFcnJvcmVkKSB7XG4gICAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAgIC8vIGRpc2NhcmQgc2VydmVyIHJlc3BvbnNlIGFuZCBmYWxsIGJhY2sgdG8gY2xpZW50IHNpZGUgcmVuZGVyLlxuXG4gICAgICBpZiAocm9vdC5oeWRyYXRlKSB7XG4gICAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgICBjbGVhckNvbnRhaW5lcihyb290LmNvbnRhaW5lckluZm8pO1xuICAgICAgfSAvLyBJZiBzb21ldGhpbmcgdGhyZXcgYW4gZXJyb3IsIHRyeSByZW5kZXJpbmcgb25lIG1vcmUgdGltZS4gV2UnbGwgcmVuZGVyXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgICAgLy8gYWxsIHBlbmRpbmcgdXBkYXRlcyBhcmUgaW5jbHVkZWQuIElmIGl0IHN0aWxsIGZhaWxzIGFmdGVyIHRoZSBzZWNvbmRcbiAgICAgIC8vIGF0dGVtcHQsIHdlJ2xsIGdpdmUgdXAgYW5kIGNvbW1pdCB0aGUgcmVzdWx0aW5nIHRyZWUuXG5cblxuICAgICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgICAgaWYgKGxhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4aXRTdGF0dXMgPT09IFJvb3RGYXRhbEVycm9yZWQpIHtcbiAgICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICAgIHByZXBhcmVGcmVzaFN0YWNrKHJvb3QsIE5vTGFuZXMpO1xuICAgICAgbWFya1Jvb3RTdXNwZW5kZWQkMShyb290LCBsYW5lcyk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgICAgdGhyb3cgZmF0YWxFcnJvcjtcbiAgICB9IC8vIFdlIG5vdyBoYXZlIGEgY29uc2lzdGVudCB0cmVlLiBUaGUgbmV4dCBzdGVwIGlzIGVpdGhlciB0byBjb21taXQgaXQsXG4gICAgLy8gb3IsIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQsIHdhaXQgdG8gY29tbWl0IGl0IGFmdGVyIGEgdGltZW91dC5cblxuXG4gICAgdmFyIGZpbmlzaGVkV29yayA9IHJvb3QuY3VycmVudC5hbHRlcm5hdGU7XG4gICAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gICAgcm9vdC5maW5pc2hlZExhbmVzID0gbGFuZXM7XG4gICAgZmluaXNoQ29uY3VycmVudFJlbmRlcihyb290LCBleGl0U3RhdHVzLCBsYW5lcyk7XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuXG4gIGlmIChyb290LmNhbGxiYWNrTm9kZSA9PT0gb3JpZ2luYWxDYWxsYmFja05vZGUpIHtcbiAgICAvLyBUaGUgdGFzayBub2RlIHNjaGVkdWxlZCBmb3IgdGhpcyByb290IGlzIHRoZSBzYW1lIG9uZSB0aGF0J3NcbiAgICAvLyBjdXJyZW50bHkgZXhlY3V0ZWQuIE5lZWQgdG8gcmV0dXJuIGEgY29udGludWF0aW9uLlxuICAgIHJldHVybiBwZXJmb3JtQ29uY3VycmVudFdvcmtPblJvb3QuYmluZChudWxsLCByb290KTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBmaW5pc2hDb25jdXJyZW50UmVuZGVyKHJvb3QsIGV4aXRTdGF0dXMsIGxhbmVzKSB7XG4gIHN3aXRjaCAoZXhpdFN0YXR1cykge1xuICAgIGNhc2UgUm9vdEluY29tcGxldGU6XG4gICAgY2FzZSBSb290RmF0YWxFcnJvcmVkOlxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiUm9vdCBkaWQgbm90IGNvbXBsZXRlLiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0LlwiICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgLy8gRmxvdyBrbm93cyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWlucyBpZiBJIGFkZCBhIGJyZWFrXG4gICAgLy8gc3RhdGVtZW50LCBidXQgZXNsaW50IGRvZXNuJ3Qga25vdyBhYm91dCBpbnZhcmlhbnQsIHNvIGl0IGNvbXBsYWluc1xuICAgIC8vIGlmIEkgZG8uIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgY2FzZSBSb290RXJyb3JlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSBhdHRlbXB0ZWQgdG8gcmV0cnkgdGhpcyB0cmVlLiBJZiB3ZSByZWFjaGVkXG4gICAgICAgIC8vIHRoaXMgcG9pbnQsIGl0IGVycm9yZWQgYWdhaW4uIENvbW1pdCBpdC5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWQ6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpOyAvLyBXZSBoYXZlIGFuIGFjY2VwdGFibGUgbG9hZGluZyBzdGF0ZS4gV2UgbmVlZCB0byBmaWd1cmUgb3V0IGlmIHdlXG4gICAgICAgIC8vIHNob3VsZCBpbW1lZGlhdGVseSBjb21taXQgaXQgb3Igd2FpdCBhIGJpdC5cblxuICAgICAgICBpZiAoaW5jbHVkZXNPbmx5UmV0cmllcyhsYW5lcykgJiYgLy8gZG8gbm90IGRlbGF5IGlmIHdlJ3JlIGluc2lkZSBhbiBhY3QoKSBzY29wZVxuICAgICAgICAhc2hvdWxkRm9yY2VGbHVzaEZhbGxiYWNrc0luREVWKCkpIHtcbiAgICAgICAgICAvLyBUaGlzIHJlbmRlciBvbmx5IGluY2x1ZGVkIHJldHJpZXMsIG5vIHVwZGF0ZXMuIFRocm90dGxlIGNvbW1pdHRpbmdcbiAgICAgICAgICAvLyByZXRyaWVzIHNvIHRoYXQgd2UgZG9uJ3Qgc2hvdyB0b28gbWFueSBsb2FkaW5nIHN0YXRlcyB0b28gcXVpY2tseS5cbiAgICAgICAgICB2YXIgbXNVbnRpbFRpbWVvdXQgPSBnbG9iYWxNb3N0UmVjZW50RmFsbGJhY2tUaW1lICsgRkFMTEJBQ0tfVEhST1RUTEVfTVMgLSBub3coKTsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cbiAgICAgICAgICBpZiAobXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgdmFyIG5leHRMYW5lcyA9IGdldE5leHRMYW5lcyhyb290LCBOb0xhbmVzKTtcblxuICAgICAgICAgICAgaWYgKG5leHRMYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgICAgICAgICAvLyBUaGVyZSdzIGFkZGl0aW9uYWwgd29yayBvbiB0aGlzIHJvb3QuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgc3VzcGVuZGVkTGFuZXMgPSByb290LnN1c3BlbmRlZExhbmVzO1xuXG4gICAgICAgICAgICBpZiAoIWlzU3Vic2V0T2ZMYW5lcyhzdXNwZW5kZWRMYW5lcywgbGFuZXMpKSB7XG4gICAgICAgICAgICAgIC8vIFdlIHNob3VsZCBwcmVmZXIgdG8gcmVuZGVyIHRoZSBmYWxsYmFjayBvZiBhdCB0aGUgbGFzdFxuICAgICAgICAgICAgICAvLyBzdXNwZW5kZWQgbGV2ZWwuIFBpbmcgdGhlIGxhc3Qgc3VzcGVuZGVkIGxldmVsIHRvIHRyeVxuICAgICAgICAgICAgICAvLyByZW5kZXJpbmcgaXQgYWdhaW4uXG4gICAgICAgICAgICAgIC8vIEZJWE1FOiBXaGF0IGlmIHRoZSBzdXNwZW5kZWQgbGFuZXMgYXJlIElkbGU/IFNob3VsZCBub3QgcmVzdGFydC5cbiAgICAgICAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgICAgICAgbWFya1Jvb3RQaW5nZWQocm9vdCwgc3VzcGVuZGVkTGFuZXMpO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gVGhlIHJlbmRlciBpcyBzdXNwZW5kZWQsIGl0IGhhc24ndCB0aW1lZCBvdXQsIGFuZCB0aGVyZSdzIG5vXG4gICAgICAgICAgICAvLyBsb3dlciBwcmlvcml0eSB3b3JrIHRvIGRvLiBJbnN0ZWFkIG9mIGNvbW1pdHRpbmcgdGhlIGZhbGxiYWNrXG4gICAgICAgICAgICAvLyBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS5cblxuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBtc1VudGlsVGltZW91dCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gVGhlIHdvcmsgZXhwaXJlZC4gQ29tbWl0IGltbWVkaWF0ZWx5LlxuXG5cbiAgICAgICAgY29tbWl0Um9vdChyb290KTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICBjYXNlIFJvb3RTdXNwZW5kZWRXaXRoRGVsYXk6XG4gICAgICB7XG4gICAgICAgIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChpbmNsdWRlc09ubHlUcmFuc2l0aW9ucyhsYW5lcykpIHtcbiAgICAgICAgICAvLyBUaGlzIGlzIGEgdHJhbnNpdGlvbiwgc28gd2Ugc2hvdWxkIGV4aXQgd2l0aG91dCBjb21taXR0aW5nIGFcbiAgICAgICAgICAvLyBwbGFjZWhvbGRlciBhbmQgd2l0aG91dCBzY2hlZHVsaW5nIGEgdGltZW91dC4gRGVsYXkgaW5kZWZpbml0ZWx5XG4gICAgICAgICAgLy8gdW50aWwgd2UgcmVjZWl2ZSBtb3JlIGRhdGEuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpKSB7XG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB0cmFuc2l0aW9uLCBidXQgd2UgZGlkIHRyaWdnZXIgYW4gYXZvaWRlZCBzdGF0ZS5cbiAgICAgICAgICAvLyBTY2hlZHVsZSBhIHBsYWNlaG9sZGVyIHRvIGRpc3BsYXkgYWZ0ZXIgYSBzaG9ydCBkZWxheSwgdXNpbmcgdGhlIEp1c3RcbiAgICAgICAgICAvLyBOb3RpY2VhYmxlIERpZmZlcmVuY2UuXG4gICAgICAgICAgLy8gVE9ETzogSXMgdGhlIEpORCBvcHRpbWl6YXRpb24gd29ydGggdGhlIGFkZGVkIGNvbXBsZXhpdHk/IElmIHRoaXMgaXNcbiAgICAgICAgICAvLyB0aGUgb25seSByZWFzb24gd2UgdHJhY2sgdGhlIGV2ZW50IHRpbWUsIHRoZW4gcHJvYmFibHkgbm90LlxuICAgICAgICAgIC8vIENvbnNpZGVyIHJlbW92aW5nLlxuICAgICAgICAgIHZhciBtb3N0UmVjZW50RXZlbnRUaW1lID0gZ2V0TW9zdFJlY2VudEV2ZW50VGltZShyb290LCBsYW5lcyk7XG4gICAgICAgICAgdmFyIGV2ZW50VGltZU1zID0gbW9zdFJlY2VudEV2ZW50VGltZTtcbiAgICAgICAgICB2YXIgdGltZUVsYXBzZWRNcyA9IG5vdygpIC0gZXZlbnRUaW1lTXM7XG5cbiAgICAgICAgICB2YXIgX21zVW50aWxUaW1lb3V0ID0gam5kKHRpbWVFbGFwc2VkTXMpIC0gdGltZUVsYXBzZWRNczsgLy8gRG9uJ3QgYm90aGVyIHdpdGggYSB2ZXJ5IHNob3J0IHN1c3BlbnNlIHRpbWUuXG5cblxuICAgICAgICAgIGlmIChfbXNVbnRpbFRpbWVvdXQgPiAxMCkge1xuICAgICAgICAgICAgLy8gSW5zdGVhZCBvZiBjb21taXR0aW5nIHRoZSBmYWxsYmFjayBpbW1lZGlhdGVseSwgd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgICAvLyB0byBhcnJpdmUuXG4gICAgICAgICAgICByb290LnRpbWVvdXRIYW5kbGUgPSBzY2hlZHVsZVRpbWVvdXQoY29tbWl0Um9vdC5iaW5kKG51bGwsIHJvb3QpLCBfbXNVbnRpbFRpbWVvdXQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIENvbW1pdCB0aGUgcGxhY2Vob2xkZXIuXG5cblxuICAgICAgICBjb21taXRSb290KHJvb3QpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgIGNhc2UgUm9vdENvbXBsZXRlZDpcbiAgICAgIHtcbiAgICAgICAgLy8gVGhlIHdvcmsgY29tcGxldGVkLiBSZWFkeSB0byBjb21taXQuXG4gICAgICAgIGNvbW1pdFJvb3Qocm9vdCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHtcbiAgICAgICAge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlVua25vd24gcm9vdCBleGl0IHN0YXR1cy5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtSb290U3VzcGVuZGVkJDEocm9vdCwgc3VzcGVuZGVkTGFuZXMpIHtcbiAgLy8gV2hlbiBzdXNwZW5kaW5nLCB3ZSBzaG91bGQgYWx3YXlzIGV4Y2x1ZGUgbGFuZXMgdGhhdCB3ZXJlIHBpbmdlZCBvciAobW9yZVxuICAvLyByYXJlbHksIHNpbmNlIHdlIHRyeSB0byBhdm9pZCBpdCkgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgLy8gVE9ETzogTG9sIG1heWJlIHRoZXJlJ3MgYSBiZXR0ZXIgd2F5IHRvIGZhY3RvciB0aGlzIGJlc2lkZXMgdGhpc1xuICAvLyBvYm5veGlvdXNseSBuYW1lZCBmdW5jdGlvbiA6KVxuICBzdXNwZW5kZWRMYW5lcyA9IHJlbW92ZUxhbmVzKHN1c3BlbmRlZExhbmVzLCB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyk7XG4gIHN1c3BlbmRlZExhbmVzID0gcmVtb3ZlTGFuZXMoc3VzcGVuZGVkTGFuZXMsIHdvcmtJblByb2dyZXNzUm9vdFVwZGF0ZWRMYW5lcyk7XG4gIG1hcmtSb290U3VzcGVuZGVkKHJvb3QsIHN1c3BlbmRlZExhbmVzKTtcbn0gLy8gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHN5bmNocm9ub3VzIHRhc2tzIHRoYXQgZG9uJ3QgZ29cbi8vIHRocm91Z2ggU2NoZWR1bGVyXG5cblxuZnVuY3Rpb24gcGVyZm9ybVN5bmNXb3JrT25Sb290KHJvb3QpIHtcbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBub3QgYWxyZWFkeSBiZSB3b3JraW5nLlwiICk7XG4gICAgfVxuICB9XG5cbiAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICB2YXIgbGFuZXM7XG4gIHZhciBleGl0U3RhdHVzO1xuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QgJiYgaW5jbHVkZXNTb21lTGFuZShyb290LmV4cGlyZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMpKSB7XG4gICAgLy8gVGhlcmUncyBhIHBhcnRpYWwgdHJlZSwgYW5kIGF0IGxlYXN0IG9uZSBvZiBpdHMgbGFuZXMgaGFzIGV4cGlyZWQuIEZpbmlzaFxuICAgIC8vIHJlbmRlcmluZyBpdCBiZWZvcmUgcmVuZGVyaW5nIHRoZSByZXN0IG9mIHRoZSBleHBpcmVkIHdvcmsuXG4gICAgbGFuZXMgPSB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcztcbiAgICBleGl0U3RhdHVzID0gcmVuZGVyUm9vdFN5bmMocm9vdCwgbGFuZXMpO1xuXG4gICAgaWYgKGluY2x1ZGVzU29tZUxhbmUod29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcywgd29ya0luUHJvZ3Jlc3NSb290VXBkYXRlZExhbmVzKSkge1xuICAgICAgLy8gVGhlIHJlbmRlciBpbmNsdWRlZCBsYW5lcyB0aGF0IHdlcmUgdXBkYXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZS5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aGVuIHVuaGlkaW5nIGEgaGlkZGVuIHRyZWUsIHdlIGluY2x1ZGUgYWxsIHRoZSBsYW5lc1xuICAgICAgLy8gdGhhdCB3ZXJlIHByZXZpb3VzbHkgc2tpcHBlZCB3aGVuIHRoZSB0cmVlIHdhcyBoaWRkZW4uIFRoYXQgc2V0IG9mXG4gICAgICAvLyBsYW5lcyBpcyBhIHN1cGVyc2V0IG9mIHRoZSBsYW5lcyB3ZSBzdGFydGVkIHJlbmRlcmluZyB3aXRoLlxuICAgICAgLy9cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIG9ubHkgaGFwcGVucyB3aGVuIHBhcnQgb2YgdGhlIHRyZWUgaXMgcmVuZGVyZWRcbiAgICAgIC8vIGNvbmN1cnJlbnRseS4gSWYgdGhlIHdob2xlIHRyZWUgaXMgcmVuZGVyZWQgc3luY2hyb25vdXNseSwgdGhlbiB0aGVyZVxuICAgICAgLy8gYXJlIG5vIGludGVybGVhdmVkIGV2ZW50cy5cbiAgICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIGxhbmVzKTtcbiAgICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxhbmVzID0gZ2V0TmV4dExhbmVzKHJvb3QsIE5vTGFuZXMpO1xuICAgIGV4aXRTdGF0dXMgPSByZW5kZXJSb290U3luYyhyb290LCBsYW5lcyk7XG4gIH1cblxuICBpZiAocm9vdC50YWcgIT09IExlZ2FjeVJvb3QgJiYgZXhpdFN0YXR1cyA9PT0gUm9vdEVycm9yZWQpIHtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IFJldHJ5QWZ0ZXJFcnJvcjsgLy8gSWYgYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGh5ZHJhdGlvbixcbiAgICAvLyBkaXNjYXJkIHNlcnZlciByZXNwb25zZSBhbmQgZmFsbCBiYWNrIHRvIGNsaWVudCBzaWRlIHJlbmRlci5cblxuICAgIGlmIChyb290Lmh5ZHJhdGUpIHtcbiAgICAgIHJvb3QuaHlkcmF0ZSA9IGZhbHNlO1xuICAgICAgY2xlYXJDb250YWluZXIocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICB9IC8vIElmIHNvbWV0aGluZyB0aHJldyBhbiBlcnJvciwgdHJ5IHJlbmRlcmluZyBvbmUgbW9yZSB0aW1lLiBXZSdsbCByZW5kZXJcbiAgICAvLyBzeW5jaHJvbm91c2x5IHRvIGJsb2NrIGNvbmN1cnJlbnQgZGF0YSBtdXRhdGlvbnMsIGFuZCB3ZSdsbCBpbmNsdWRlc1xuICAgIC8vIGFsbCBwZW5kaW5nIHVwZGF0ZXMgYXJlIGluY2x1ZGVkLiBJZiBpdCBzdGlsbCBmYWlscyBhZnRlciB0aGUgc2Vjb25kXG4gICAgLy8gYXR0ZW1wdCwgd2UnbGwgZ2l2ZSB1cCBhbmQgY29tbWl0IHRoZSByZXN1bHRpbmcgdHJlZS5cblxuXG4gICAgbGFuZXMgPSBnZXRMYW5lc1RvUmV0cnlTeW5jaHJvbm91c2x5T25FcnJvcihyb290KTtcblxuICAgIGlmIChsYW5lcyAhPT0gTm9MYW5lcykge1xuICAgICAgZXhpdFN0YXR1cyA9IHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXhpdFN0YXR1cyA9PT0gUm9vdEZhdGFsRXJyb3JlZCkge1xuICAgIHZhciBmYXRhbEVycm9yID0gd29ya0luUHJvZ3Jlc3NSb290RmF0YWxFcnJvcjtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBOb0xhbmVzKTtcbiAgICBtYXJrUm9vdFN1c3BlbmRlZCQxKHJvb3QsIGxhbmVzKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIHRocm93IGZhdGFsRXJyb3I7XG4gIH0gLy8gV2Ugbm93IGhhdmUgYSBjb25zaXN0ZW50IHRyZWUuIEJlY2F1c2UgdGhpcyBpcyBhIHN5bmMgcmVuZGVyLCB3ZVxuICAvLyB3aWxsIGNvbW1pdCBpdCBldmVuIGlmIHNvbWV0aGluZyBzdXNwZW5kZWQuXG5cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5jdXJyZW50LmFsdGVybmF0ZTtcbiAgcm9vdC5maW5pc2hlZFdvcmsgPSBmaW5pc2hlZFdvcms7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IGxhbmVzO1xuICBjb21taXRSb290KHJvb3QpOyAvLyBCZWZvcmUgZXhpdGluZywgbWFrZSBzdXJlIHRoZXJlJ3MgYSBjYWxsYmFjayBzY2hlZHVsZWQgZm9yIHRoZSBuZXh0XG4gIC8vIHBlbmRpbmcgbGV2ZWwuXG5cbiAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIG5vdygpKTtcbiAgcmV0dXJuIG51bGw7XG59XG5mdW5jdGlvbiBmbHVzaERpc2NyZXRlVXBkYXRlcygpIHtcbiAgLy8gVE9ETzogU2hvdWxkIGJlIGFibGUgdG8gZmx1c2ggaW5zaWRlIGJhdGNoZWRVcGRhdGVzLCBidXQgbm90IGluc2lkZSBgYWN0YC5cbiAgLy8gSG93ZXZlciwgYGFjdGAgdXNlcyBgYmF0Y2hlZFVwZGF0ZXNgLCBzbyB0aGVyZSdzIG5vIHdheSB0byBkaXN0aW5ndWlzaFxuICAvLyB0aG9zZSB0d28gY2FzZXMuIE5lZWQgdG8gZml4IHRoaXMgYmVmb3JlIGV4cG9zaW5nIGZsdXNoRGlzY3JldGVVcGRhdGVzXG4gIC8vIGFzIGEgcHVibGljIEFQSS5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgKEJhdGNoZWRDb250ZXh0IHwgUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgICAgICBlcnJvcigndW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgJyArICdhbHJlYWR5IHJlbmRlcmluZy4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFdlJ3JlIGFscmVhZHkgcmVuZGVyaW5nLCBzbyB3ZSBjYW4ndCBzeW5jaHJvbm91c2x5IGZsdXNoIHBlbmRpbmcgd29yay5cbiAgICAvLyBUaGlzIGlzIHByb2JhYmx5IGEgbmVzdGVkIGV2ZW50IGRpc3BhdGNoIHRyaWdnZXJlZCBieSBhIGxpZmVjeWNsZS9lZmZlY3QsXG4gICAgLy8gbGlrZSBgZWwuZm9jdXMoKWAuIEV4aXQuXG5cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGZsdXNoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcygpOyAvLyBJZiB0aGUgZGlzY3JldGUgdXBkYXRlcyBzY2hlZHVsZWQgcGFzc2l2ZSBlZmZlY3RzLCBmbHVzaCB0aGVtIG5vdyBzbyB0aGF0XG4gIC8vIHRoZXkgZmlyZSBiZWZvcmUgdGhlIG5leHQgc2VyaWFsIGV2ZW50LlxuXG4gIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbn1cblxuZnVuY3Rpb24gZmx1c2hQZW5kaW5nRGlzY3JldGVVcGRhdGVzKCkge1xuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIC8vIEZvciBlYWNoIHJvb3Qgd2l0aCBwZW5kaW5nIGRpc2NyZXRlIHVwZGF0ZXMsIHNjaGVkdWxlIGEgY2FsbGJhY2sgdG9cbiAgICAvLyBpbW1lZGlhdGVseSBmbHVzaCB0aGVtLlxuICAgIHZhciByb290cyA9IHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXM7XG4gICAgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyA9IG51bGw7XG4gICAgcm9vdHMuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgbWFya0Rpc2NyZXRlVXBkYXRlc0V4cGlyZWQocm9vdCk7XG4gICAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgbm93KCkpO1xuICAgIH0pO1xuICB9IC8vIE5vdyBmbHVzaCB0aGUgaW1tZWRpYXRlIHF1ZXVlLlxuXG5cbiAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xufVxuXG5mdW5jdGlvbiBiYXRjaGVkVXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQmF0Y2hlZENvbnRleHQ7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gZm4oYSk7XG4gIH0gZmluYWxseSB7XG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuXG4gICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaFxuICAgICAgcmVzZXRSZW5kZXJUaW1lcigpO1xuICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gYmF0Y2hlZEV2ZW50VXBkYXRlcyQxKGZuLCBhKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRXZlbnRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGRpc2NyZXRlVXBkYXRlcyQxKGZuLCBhLCBiLCBjLCBkKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gRGlzY3JldGVFdmVudENvbnRleHQ7XG5cbiAge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gcnVuV2l0aFByaW9yaXR5JDEoVXNlckJsb2NraW5nUHJpb3JpdHkkMiwgZm4uYmluZChudWxsLCBhLCBiLCBjLCBkKSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgICAgaWYgKGV4ZWN1dGlvbkNvbnRleHQgPT09IE5vQ29udGV4dCkge1xuICAgICAgICAvLyBGbHVzaCB0aGUgaW1tZWRpYXRlIGNhbGxiYWNrcyB0aGF0IHdlcmUgc2NoZWR1bGVkIGR1cmluZyB0aGlzIGJhdGNoXG4gICAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgICAgZmx1c2hTeW5jQ2FsbGJhY2tRdWV1ZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5iYXRjaGVkVXBkYXRlcyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuICBleGVjdXRpb25Db250ZXh0ICY9IH5CYXRjaGVkQ29udGV4dDtcbiAgZXhlY3V0aW9uQ29udGV4dCB8PSBMZWdhY3lVbmJhdGNoZWRDb250ZXh0O1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGZuKGEpO1xuICB9IGZpbmFsbHkge1xuICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuICAgIGlmIChleGVjdXRpb25Db250ZXh0ID09PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIEZsdXNoIHRoZSBpbW1lZGlhdGUgY2FsbGJhY2tzIHRoYXQgd2VyZSBzY2hlZHVsZWQgZHVyaW5nIHRoaXMgYmF0Y2hcbiAgICAgIHJlc2V0UmVuZGVyVGltZXIoKTtcbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGZsdXNoU3luYyhmbiwgYSkge1xuICB2YXIgcHJldkV4ZWN1dGlvbkNvbnRleHQgPSBleGVjdXRpb25Db250ZXh0O1xuXG4gIGlmICgocHJldkV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSAhPT0gTm9Db250ZXh0KSB7XG4gICAge1xuICAgICAgZXJyb3IoJ2ZsdXNoU3luYyB3YXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgbGlmZWN5Y2xlIG1ldGhvZC4gUmVhY3QgY2Fubm90ICcgKyAnZmx1c2ggd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy4gQ29uc2lkZXIgbW92aW5nIHRoaXMgY2FsbCB0byAnICsgJ2Egc2NoZWR1bGVyIHRhc2sgb3IgbWljcm8gdGFzay4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm4oYSk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0IHw9IEJhdGNoZWRDb250ZXh0O1xuXG4gIHtcbiAgICB0cnkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShJbW1lZGlhdGVQcmlvcml0eSQxLCBmbi5iaW5kKG51bGwsIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDsgLy8gRmx1c2ggdGhlIGltbWVkaWF0ZSBjYWxsYmFja3MgdGhhdCB3ZXJlIHNjaGVkdWxlZCBkdXJpbmcgdGhpcyBiYXRjaC5cbiAgICAgIC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgaGFwcGVuIGV2ZW4gaWYgYmF0Y2hlZFVwZGF0ZXMgaXMgaGlnaGVyIHVwXG4gICAgICAvLyB0aGUgc3RhY2suXG5cbiAgICAgIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHB1c2hSZW5kZXJMYW5lcyhmaWJlciwgbGFuZXMpIHtcbiAgcHVzaChzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IsIHN1YnRyZWVSZW5kZXJMYW5lcywgZmliZXIpO1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBtZXJnZUxhbmVzKHN1YnRyZWVSZW5kZXJMYW5lcywgbGFuZXMpO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzID0gbWVyZ2VMYW5lcyh3b3JrSW5Qcm9ncmVzc1Jvb3RJbmNsdWRlZExhbmVzLCBsYW5lcyk7XG59XG5mdW5jdGlvbiBwb3BSZW5kZXJMYW5lcyhmaWJlcikge1xuICBzdWJ0cmVlUmVuZGVyTGFuZXMgPSBzdWJ0cmVlUmVuZGVyTGFuZXNDdXJzb3IuY3VycmVudDtcbiAgcG9wKHN1YnRyZWVSZW5kZXJMYW5lc0N1cnNvciwgZmliZXIpO1xufVxuXG5mdW5jdGlvbiBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcykge1xuICByb290LmZpbmlzaGVkV29yayA9IG51bGw7XG4gIHJvb3QuZmluaXNoZWRMYW5lcyA9IE5vTGFuZXM7XG4gIHZhciB0aW1lb3V0SGFuZGxlID0gcm9vdC50aW1lb3V0SGFuZGxlO1xuXG4gIGlmICh0aW1lb3V0SGFuZGxlICE9PSBub1RpbWVvdXQpIHtcbiAgICAvLyBUaGUgcm9vdCBwcmV2aW91cyBzdXNwZW5kZWQgYW5kIHNjaGVkdWxlZCBhIHRpbWVvdXQgdG8gY29tbWl0IGEgZmFsbGJhY2tcbiAgICAvLyBzdGF0ZS4gTm93IHRoYXQgd2UgaGF2ZSBhZGRpdGlvbmFsIHdvcmssIGNhbmNlbCB0aGUgdGltZW91dC5cbiAgICByb290LnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7IC8vICRGbG93Rml4TWUgQ29tcGxhaW5zIG5vVGltZW91dCBpcyBub3QgYSBUaW1lb3V0SUQsIGRlc3BpdGUgdGhlIGNoZWNrIGFib3ZlXG5cbiAgICBjYW5jZWxUaW1lb3V0KHRpbWVvdXRIYW5kbGUpO1xuICB9XG5cbiAgaWYgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgdmFyIGludGVycnVwdGVkV29yayA9IHdvcmtJblByb2dyZXNzLnJldHVybjtcblxuICAgIHdoaWxlIChpbnRlcnJ1cHRlZFdvcmsgIT09IG51bGwpIHtcbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayhpbnRlcnJ1cHRlZFdvcmspO1xuICAgICAgaW50ZXJydXB0ZWRXb3JrID0gaW50ZXJydXB0ZWRXb3JrLnJldHVybjtcbiAgICB9XG4gIH1cblxuICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSByb290O1xuICB3b3JrSW5Qcm9ncmVzcyA9IGNyZWF0ZVdvcmtJblByb2dyZXNzKHJvb3QuY3VycmVudCwgbnVsbCk7XG4gIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gc3VidHJlZVJlbmRlckxhbmVzID0gd29ya0luUHJvZ3Jlc3NSb290SW5jbHVkZWRMYW5lcyA9IGxhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID0gUm9vdEluY29tcGxldGU7XG4gIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RTa2lwcGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMgPSBOb0xhbmVzO1xuICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IE5vTGFuZXM7XG5cbiAge1xuICAgIHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5kaXNjYXJkUGVuZGluZ1dhcm5pbmdzKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRXJyb3Iocm9vdCwgdGhyb3duVmFsdWUpIHtcbiAgZG8ge1xuICAgIHZhciBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFJlc2V0IG1vZHVsZS1sZXZlbCBzdGF0ZSB0aGF0IHdhcyBzZXQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UuXG4gICAgICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcbiAgICAgIHJlc2V0SG9va3NBZnRlclRocm93KCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpOyAvLyBUT0RPOiBJIGZvdW5kIGFuZCBhZGRlZCB0aGlzIG1pc3NpbmcgbGluZSB3aGlsZSBpbnZlc3RpZ2F0aW5nIGFcbiAgICAgIC8vIHNlcGFyYXRlIGlzc3VlLiBXcml0ZSBhIHJlZ3Jlc3Npb24gdGVzdCB1c2luZyBzdHJpbmcgcmVmcy5cblxuICAgICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDtcblxuICAgICAgaWYgKGVycm9yZWRXb3JrID09PSBudWxsIHx8IGVycm9yZWRXb3JrLnJldHVybiA9PT0gbnVsbCkge1xuICAgICAgICAvLyBFeHBlY3RlZCB0byBiZSB3b3JraW5nIG9uIGEgbm9uLXJvb3QgZmliZXIuIFRoaXMgaXMgYSBmYXRhbCBlcnJvclxuICAgICAgICAvLyBiZWNhdXNlIHRoZXJlJ3Mgbm8gYW5jZXN0b3IgdGhhdCBjYW4gaGFuZGxlIGl0OyB0aGUgcm9vdCBpc1xuICAgICAgICAvLyBzdXBwb3NlZCB0byBjYXB0dXJlIGFsbCBlcnJvcnMgdGhhdCB3ZXJlbid0IGNhdWdodCBieSBhbiBlcnJvclxuICAgICAgICAvLyBib3VuZGFyeS5cbiAgICAgICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RGYXRhbEVycm9yZWQ7XG4gICAgICAgIHdvcmtJblByb2dyZXNzUm9vdEZhdGFsRXJyb3IgPSB0aHJvd25WYWx1ZTsgLy8gU2V0IGB3b3JrSW5Qcm9ncmVzc2AgdG8gbnVsbC4gVGhpcyByZXByZXNlbnRzIGFkdmFuY2luZyB0byB0aGUgbmV4dFxuICAgICAgICAvLyBzaWJsaW5nLCBvciB0aGUgcGFyZW50IGlmIHRoZXJlIGFyZSBubyBzaWJsaW5ncy4gQnV0IHNpbmNlIHRoZSByb290XG4gICAgICAgIC8vIGhhcyBubyBzaWJsaW5ncyBub3IgYSBwYXJlbnQsIHdlIHNldCBpdCB0byBudWxsLiBVc3VhbGx5IHRoaXMgaXNcbiAgICAgICAgLy8gaGFuZGxlZCBieSBgY29tcGxldGVVbml0T2ZXb3JrYCBvciBgdW53aW5kV29ya2AsIGJ1dCBzaW5jZSB3ZSdyZVxuICAgICAgICAvLyBpbnRlbnRpb25hbGx5IG5vdCBjYWxsaW5nIHRob3NlLCB3ZSBuZWVkIHNldCBpdCBoZXJlLlxuICAgICAgICAvLyBUT0RPOiBDb25zaWRlciBjYWxsaW5nIGB1bndpbmRXb3JrYCB0byBwb3AgdGhlIGNvbnRleHRzLlxuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZW5hYmxlUHJvZmlsZXJUaW1lciAmJiBlcnJvcmVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpIHtcbiAgICAgICAgLy8gUmVjb3JkIHRoZSB0aW1lIHNwZW50IHJlbmRlcmluZyBiZWZvcmUgYW4gZXJyb3Igd2FzIHRocm93bi4gVGhpc1xuICAgICAgICAvLyBhdm9pZHMgaW5hY2N1cmF0ZSBQcm9maWxlciBkdXJhdGlvbnMgaW4gdGhlIGNhc2Ugb2YgYVxuICAgICAgICAvLyBzdXNwZW5kZWQgcmVuZGVyLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGVycm9yZWRXb3JrLCB0cnVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3dFeGNlcHRpb24ocm9vdCwgZXJyb3JlZFdvcmsucmV0dXJuLCBlcnJvcmVkV29yaywgdGhyb3duVmFsdWUsIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKTtcbiAgICAgIGNvbXBsZXRlVW5pdE9mV29yayhlcnJvcmVkV29yayk7XG4gICAgfSBjYXRjaCAoeWV0QW5vdGhlclRocm93blZhbHVlKSB7XG4gICAgICAvLyBTb21ldGhpbmcgaW4gdGhlIHJldHVybiBwYXRoIGFsc28gdGhyZXcuXG4gICAgICB0aHJvd25WYWx1ZSA9IHlldEFub3RoZXJUaHJvd25WYWx1ZTtcblxuICAgICAgaWYgKHdvcmtJblByb2dyZXNzID09PSBlcnJvcmVkV29yayAmJiBlcnJvcmVkV29yayAhPT0gbnVsbCkge1xuICAgICAgICAvLyBJZiB0aGlzIGJvdW5kYXJ5IGhhcyBhbHJlYWR5IGVycm9yZWQsIHRoZW4gd2UgaGFkIHRyb3VibGUgcHJvY2Vzc2luZ1xuICAgICAgICAvLyB0aGUgZXJyb3IuIEJ1YmJsZSBpdCB0byB0aGUgbmV4dCBib3VuZGFyeS5cbiAgICAgICAgZXJyb3JlZFdvcmsgPSBlcnJvcmVkV29yay5yZXR1cm47XG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gZXJyb3JlZFdvcms7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvcmVkV29yayA9IHdvcmtJblByb2dyZXNzO1xuICAgICAgfVxuXG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIFJldHVybiB0byB0aGUgbm9ybWFsIHdvcmsgbG9vcC5cblxuXG4gICAgcmV0dXJuO1xuICB9IHdoaWxlICh0cnVlKTtcbn1cblxuZnVuY3Rpb24gcHVzaERpc3BhdGNoZXIoKSB7XG4gIHZhciBwcmV2RGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMi5jdXJyZW50O1xuICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDIuY3VycmVudCA9IENvbnRleHRPbmx5RGlzcGF0Y2hlcjtcblxuICBpZiAocHJldkRpc3BhdGNoZXIgPT09IG51bGwpIHtcbiAgICAvLyBUaGUgUmVhY3QgaXNvbW9ycGhpYyBwYWNrYWdlIGRvZXMgbm90IGluY2x1ZGUgYSBkZWZhdWx0IGRpc3BhdGNoZXIuXG4gICAgLy8gSW5zdGVhZCB0aGUgZmlyc3QgcmVuZGVyZXIgd2lsbCBsYXppbHkgYXR0YWNoIG9uZSwgaW4gb3JkZXIgdG8gZ2l2ZVxuICAgIC8vIG5pY2VyIGVycm9yIG1lc3NhZ2VzLlxuICAgIHJldHVybiBDb250ZXh0T25seURpc3BhdGNoZXI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHByZXZEaXNwYXRjaGVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpIHtcbiAgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQyLmN1cnJlbnQgPSBwcmV2RGlzcGF0Y2hlcjtcbn1cblxuZnVuY3Rpb24gcHVzaEludGVyYWN0aW9ucyhyb290KSB7XG4gIHtcbiAgICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHRyYWNpbmcuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zO1xuICAgIHJldHVybiBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBvcEludGVyYWN0aW9ucyhwcmV2SW50ZXJhY3Rpb25zKSB7XG4gIHtcbiAgICB0cmFjaW5nLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hcmtDb21taXRUaW1lT2ZGYWxsYmFjaygpIHtcbiAgZ2xvYmFsTW9zdFJlY2VudEZhbGxiYWNrVGltZSA9IG5vdygpO1xufVxuZnVuY3Rpb24gbWFya1NraXBwZWRVcGRhdGVMYW5lcyhsYW5lKSB7XG4gIHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcyA9IG1lcmdlTGFuZXMobGFuZSwgd29ya0luUHJvZ3Jlc3NSb290U2tpcHBlZExhbmVzKTtcbn1cbmZ1bmN0aW9uIHJlbmRlckRpZFN1c3BlbmQoKSB7XG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzID09PSBSb290SW5jb21wbGV0ZSkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkO1xuICB9XG59XG5mdW5jdGlvbiByZW5kZXJEaWRTdXNwZW5kRGVsYXlJZlBvc3NpYmxlKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGUgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290U3VzcGVuZGVkV2l0aERlbGF5O1xuICB9IC8vIENoZWNrIGlmIHRoZXJlIGFyZSB1cGRhdGVzIHRoYXQgd2Ugc2tpcHBlZCB0cmVlIHRoYXQgbWlnaHQgaGF2ZSB1bmJsb2NrZWRcbiAgLy8gdGhpcyByZW5kZXIuXG5cblxuICBpZiAod29ya0luUHJvZ3Jlc3NSb290ICE9PSBudWxsICYmIChpbmNsdWRlc05vbklkbGVXb3JrKHdvcmtJblByb2dyZXNzUm9vdFNraXBwZWRMYW5lcykgfHwgaW5jbHVkZXNOb25JZGxlV29yayh3b3JrSW5Qcm9ncmVzc1Jvb3RVcGRhdGVkTGFuZXMpKSkge1xuICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgcmVuZGVyIGFzIHN1c3BlbmRlZCBzbyB0aGF0IHdlIHN3aXRjaCB0byB3b3JraW5nIG9uXG4gICAgLy8gdGhlIHVwZGF0ZXMgdGhhdCB3ZXJlIHNraXBwZWQuIFVzdWFsbHkgd2Ugb25seSBzdXNwZW5kIGF0IHRoZSBlbmQgb2ZcbiAgICAvLyB0aGUgcmVuZGVyIHBoYXNlLlxuICAgIC8vIFRPRE86IFdlIHNob3VsZCBwcm9iYWJseSBhbHdheXMgbWFyayB0aGUgcm9vdCBhcyBzdXNwZW5kZWQgaW1tZWRpYXRlbHlcbiAgICAvLyAoaW5zaWRlIHRoaXMgZnVuY3Rpb24pLCBzaW5jZSBieSBzdXNwZW5kaW5nIGF0IHRoZSBlbmQgb2YgdGhlIHJlbmRlclxuICAgIC8vIHBoYXNlIGludHJvZHVjZXMgYSBwb3RlbnRpYWwgbWlzdGFrZSB3aGVyZSB3ZSBzdXNwZW5kIGxhbmVzIHRoYXQgd2VyZVxuICAgIC8vIHBpbmdlZCBvciB1cGRhdGVkIHdoaWxlIHdlIHdlcmUgcmVuZGVyaW5nLlxuICAgIG1hcmtSb290U3VzcGVuZGVkJDEod29ya0luUHJvZ3Jlc3NSb290LCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlbmRlckRpZEVycm9yKCkge1xuICBpZiAod29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyAhPT0gUm9vdENvbXBsZXRlZCkge1xuICAgIHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPSBSb290RXJyb3JlZDtcbiAgfVxufSAvLyBDYWxsZWQgZHVyaW5nIHJlbmRlciB0byBkZXRlcm1pbmUgaWYgYW55dGhpbmcgaGFzIHN1c3BlbmRlZC5cbi8vIFJldHVybnMgZmFsc2UgaWYgd2UncmUgbm90IHN1cmUuXG5cbmZ1bmN0aW9uIHJlbmRlckhhc05vdFN1c3BlbmRlZFlldCgpIHtcbiAgLy8gSWYgc29tZXRoaW5nIGVycm9yZWQgb3IgY29tcGxldGVkLCB3ZSBjYW4ndCByZWFsbHkgYmUgc3VyZSxcbiAgLy8gc28gdGhvc2UgYXJlIGZhbHNlLlxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdEluY29tcGxldGU7XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RTeW5jKHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICBwcmVwYXJlRnJlc2hTdGFjayhyb290LCBsYW5lcyk7XG4gICAgc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKTtcbiAgfVxuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gcHVzaEludGVyYWN0aW9ucyhyb290KTtcblxuICBkbyB7XG4gICAgdHJ5IHtcbiAgICAgIHdvcmtMb29wU3luYygpO1xuICAgICAgYnJlYWs7XG4gICAgfSBjYXRjaCAodGhyb3duVmFsdWUpIHtcbiAgICAgIGhhbmRsZUVycm9yKHJvb3QsIHRocm93blZhbHVlKTtcbiAgICB9XG4gIH0gd2hpbGUgKHRydWUpO1xuXG4gIHJlc2V0Q29udGV4dERlcGVuZGVuY2llcygpO1xuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIHBvcERpc3BhdGNoZXIocHJldkRpc3BhdGNoZXIpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuICAgIC8vIFRoaXMgaXMgYSBzeW5jIHJlbmRlciwgc28gd2Ugc2hvdWxkIGhhdmUgZmluaXNoZWQgdGhlIHdob2xlIHRyZWUuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IGFuIGluY29tcGxldGUgcm9vdC4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIiApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICByZXR1cm4gd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cztcbn0gLy8gVGhlIHdvcmsgbG9vcCBpcyBhbiBleHRyZW1lbHkgaG90IHBhdGguIFRlbGwgQ2xvc3VyZSBub3QgdG8gaW5saW5lIGl0LlxuXG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BTeW5jKCkge1xuICAvLyBBbHJlYWR5IHRpbWVkIG91dCwgc28gcGVyZm9ybSB3b3JrIHdpdGhvdXQgY2hlY2tpbmcgaWYgd2UgbmVlZCB0byB5aWVsZC5cbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclJvb3RDb25jdXJyZW50KHJvb3QsIGxhbmVzKSB7XG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gUmVuZGVyQ29udGV4dDtcbiAgdmFyIHByZXZEaXNwYXRjaGVyID0gcHVzaERpc3BhdGNoZXIoKTsgLy8gSWYgdGhlIHJvb3Qgb3IgbGFuZXMgaGF2ZSBjaGFuZ2VkLCB0aHJvdyBvdXQgdGhlIGV4aXN0aW5nIHN0YWNrXG4gIC8vIGFuZCBwcmVwYXJlIGEgZnJlc2ggb25lLiBPdGhlcndpc2Ugd2UnbGwgY29udGludWUgd2hlcmUgd2UgbGVmdCBvZmYuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdCAhPT0gcm9vdCB8fCB3b3JrSW5Qcm9ncmVzc1Jvb3RSZW5kZXJMYW5lcyAhPT0gbGFuZXMpIHtcbiAgICByZXNldFJlbmRlclRpbWVyKCk7XG4gICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgbGFuZXMpO1xuICAgIHN0YXJ0V29ya09uUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB2YXIgcHJldkludGVyYWN0aW9ucyA9IHB1c2hJbnRlcmFjdGlvbnMocm9vdCk7XG5cbiAgZG8ge1xuICAgIHRyeSB7XG4gICAgICB3b3JrTG9vcENvbmN1cnJlbnQoKTtcbiAgICAgIGJyZWFrO1xuICAgIH0gY2F0Y2ggKHRocm93blZhbHVlKSB7XG4gICAgICBoYW5kbGVFcnJvcihyb290LCB0aHJvd25WYWx1ZSk7XG4gICAgfVxuICB9IHdoaWxlICh0cnVlKTtcblxuICByZXNldENvbnRleHREZXBlbmRlbmNpZXMoKTtcblxuICB7XG4gICAgcG9wSW50ZXJhY3Rpb25zKHByZXZJbnRlcmFjdGlvbnMpO1xuICB9XG5cbiAgcG9wRGlzcGF0Y2hlcihwcmV2RGlzcGF0Y2hlcik7XG4gIGV4ZWN1dGlvbkNvbnRleHQgPSBwcmV2RXhlY3V0aW9uQ29udGV4dDtcblxuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyAhPT0gbnVsbCkge1xuXG4gICAgcmV0dXJuIFJvb3RJbmNvbXBsZXRlO1xuICB9IGVsc2Uge1xuXG5cbiAgICB3b3JrSW5Qcm9ncmVzc1Jvb3QgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzID0gTm9MYW5lczsgLy8gUmV0dXJuIHRoZSBmaW5hbCBleGl0IHN0YXR1cy5cblxuICAgIHJldHVybiB3b3JrSW5Qcm9ncmVzc1Jvb3RFeGl0U3RhdHVzO1xuICB9XG59XG4vKiogQG5vaW5saW5lICovXG5cblxuZnVuY3Rpb24gd29ya0xvb3BDb25jdXJyZW50KCkge1xuICAvLyBQZXJmb3JtIHdvcmsgdW50aWwgU2NoZWR1bGVyIGFza3MgdXMgdG8geWllbGRcbiAgd2hpbGUgKHdvcmtJblByb2dyZXNzICE9PSBudWxsICYmICFzaG91bGRZaWVsZCgpKSB7XG4gICAgcGVyZm9ybVVuaXRPZldvcmsod29ya0luUHJvZ3Jlc3MpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBlcmZvcm1Vbml0T2ZXb3JrKHVuaXRPZldvcmspIHtcbiAgLy8gVGhlIGN1cnJlbnQsIGZsdXNoZWQsIHN0YXRlIG9mIHRoaXMgZmliZXIgaXMgdGhlIGFsdGVybmF0ZS4gSWRlYWxseVxuICAvLyBub3RoaW5nIHNob3VsZCByZWx5IG9uIHRoaXMsIGJ1dCByZWx5aW5nIG9uIGl0IGhlcmUgbWVhbnMgdGhhdCB3ZSBkb24ndFxuICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gIHZhciBjdXJyZW50ID0gdW5pdE9mV29yay5hbHRlcm5hdGU7XG4gIHNldEN1cnJlbnRGaWJlcih1bml0T2ZXb3JrKTtcbiAgdmFyIG5leHQ7XG5cbiAgaWYgKCAodW5pdE9mV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICBzdGFydFByb2ZpbGVyVGltZXIodW5pdE9mV29yayk7XG4gICAgbmV4dCA9IGJlZ2luV29yayQxKGN1cnJlbnQsIHVuaXRPZldvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7XG4gICAgc3RvcFByb2ZpbGVyVGltZXJJZlJ1bm5pbmdBbmRSZWNvcmREZWx0YSh1bml0T2ZXb3JrLCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBuZXh0ID0gYmVnaW5Xb3JrJDEoY3VycmVudCwgdW5pdE9mV29yaywgc3VidHJlZVJlbmRlckxhbmVzKTtcbiAgfVxuXG4gIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gIHVuaXRPZldvcmsubWVtb2l6ZWRQcm9wcyA9IHVuaXRPZldvcmsucGVuZGluZ1Byb3BzO1xuXG4gIGlmIChuZXh0ID09PSBudWxsKSB7XG4gICAgLy8gSWYgdGhpcyBkb2Vzbid0IHNwYXduIG5ldyB3b3JrLCBjb21wbGV0ZSB0aGUgY3VycmVudCB3b3JrLlxuICAgIGNvbXBsZXRlVW5pdE9mV29yayh1bml0T2ZXb3JrKTtcbiAgfSBlbHNlIHtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG5leHQ7XG4gIH1cblxuICBSZWFjdEN1cnJlbnRPd25lciQyLmN1cnJlbnQgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21wbGV0ZVVuaXRPZldvcmsodW5pdE9mV29yaykge1xuICAvLyBBdHRlbXB0IHRvIGNvbXBsZXRlIHRoZSBjdXJyZW50IHVuaXQgb2Ygd29yaywgdGhlbiBtb3ZlIHRvIHRoZSBuZXh0XG4gIC8vIHNpYmxpbmcuIElmIHRoZXJlIGFyZSBubyBtb3JlIHNpYmxpbmdzLCByZXR1cm4gdG8gdGhlIHBhcmVudCBmaWJlci5cbiAgdmFyIGNvbXBsZXRlZFdvcmsgPSB1bml0T2ZXb3JrO1xuXG4gIGRvIHtcbiAgICAvLyBUaGUgY3VycmVudCwgZmx1c2hlZCwgc3RhdGUgb2YgdGhpcyBmaWJlciBpcyB0aGUgYWx0ZXJuYXRlLiBJZGVhbGx5XG4gICAgLy8gbm90aGluZyBzaG91bGQgcmVseSBvbiB0aGlzLCBidXQgcmVseWluZyBvbiBpdCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3RcbiAgICAvLyBuZWVkIGFuIGFkZGl0aW9uYWwgZmllbGQgb24gdGhlIHdvcmsgaW4gcHJvZ3Jlc3MuXG4gICAgdmFyIGN1cnJlbnQgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZTtcbiAgICB2YXIgcmV0dXJuRmliZXIgPSBjb21wbGV0ZWRXb3JrLnJldHVybjsgLy8gQ2hlY2sgaWYgdGhlIHdvcmsgY29tcGxldGVkIG9yIGlmIHNvbWV0aGluZyB0aHJldy5cblxuICAgIGlmICgoY29tcGxldGVkV29yay5mbGFncyAmIEluY29tcGxldGUpID09PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIoY29tcGxldGVkV29yayk7XG4gICAgICB2YXIgbmV4dCA9IHZvaWQgMDtcblxuICAgICAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpID09PSBOb01vZGUpIHtcbiAgICAgICAgbmV4dCA9IGNvbXBsZXRlV29yayhjdXJyZW50LCBjb21wbGV0ZWRXb3JrLCBzdWJ0cmVlUmVuZGVyTGFuZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhcnRQcm9maWxlclRpbWVyKGNvbXBsZXRlZFdvcmspO1xuICAgICAgICBuZXh0ID0gY29tcGxldGVXb3JrKGN1cnJlbnQsIGNvbXBsZXRlZFdvcmssIHN1YnRyZWVSZW5kZXJMYW5lcyk7IC8vIFVwZGF0ZSByZW5kZXIgZHVyYXRpb24gYXNzdW1pbmcgd2UgZGlkbid0IGVycm9yLlxuXG4gICAgICAgIHN0b3BQcm9maWxlclRpbWVySWZSdW5uaW5nQW5kUmVjb3JkRGVsdGEoY29tcGxldGVkV29yaywgZmFsc2UpO1xuICAgICAgfVxuXG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuXG4gICAgICBpZiAobmV4dCAhPT0gbnVsbCkge1xuICAgICAgICAvLyBDb21wbGV0aW5nIHRoaXMgZmliZXIgc3Bhd25lZCBuZXcgd29yay4gV29yayBvbiB0aGF0IG5leHQuXG4gICAgICAgIHdvcmtJblByb2dyZXNzID0gbmV4dDtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNldENoaWxkTGFuZXMoY29tcGxldGVkV29yayk7XG5cbiAgICAgIGlmIChyZXR1cm5GaWJlciAhPT0gbnVsbCAmJiAvLyBEbyBub3QgYXBwZW5kIGVmZmVjdHMgdG8gcGFyZW50cyBpZiBhIHNpYmxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlXG4gICAgICAocmV0dXJuRmliZXIuZmxhZ3MgJiBJbmNvbXBsZXRlKSA9PT0gTm9GbGFncykge1xuICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBlZmZlY3RzIG9mIHRoZSBzdWJ0cmVlIGFuZCB0aGlzIGZpYmVyIG9udG8gdGhlIGVmZmVjdFxuICAgICAgICAvLyBsaXN0IG9mIHRoZSBwYXJlbnQuIFRoZSBjb21wbGV0aW9uIG9yZGVyIG9mIHRoZSBjaGlsZHJlbiBhZmZlY3RzIHRoZVxuICAgICAgICAvLyBzaWRlLWVmZmVjdCBvcmRlci5cbiAgICAgICAgaWYgKHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuRmliZXIuZmlyc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBsZXRlZFdvcmsubGFzdEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChyZXR1cm5GaWJlci5sYXN0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmZpcnN0RWZmZWN0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QgPSBjb21wbGV0ZWRXb3JrLmxhc3RFZmZlY3Q7XG4gICAgICAgIH0gLy8gSWYgdGhpcyBmaWJlciBoYWQgc2lkZS1lZmZlY3RzLCB3ZSBhcHBlbmQgaXQgQUZURVIgdGhlIGNoaWxkcmVuJ3NcbiAgICAgICAgLy8gc2lkZS1lZmZlY3RzLiBXZSBjYW4gcGVyZm9ybSBjZXJ0YWluIHNpZGUtZWZmZWN0cyBlYXJsaWVyIGlmIG5lZWRlZCxcbiAgICAgICAgLy8gYnkgZG9pbmcgbXVsdGlwbGUgcGFzc2VzIG92ZXIgdGhlIGVmZmVjdCBsaXN0LiBXZSBkb24ndCB3YW50IHRvXG4gICAgICAgIC8vIHNjaGVkdWxlIG91ciBvd24gc2lkZS1lZmZlY3Qgb24gb3VyIG93biBsaXN0IGJlY2F1c2UgaWYgZW5kIHVwXG4gICAgICAgIC8vIHJldXNpbmcgY2hpbGRyZW4gd2UnbGwgc2NoZWR1bGUgdGhpcyBlZmZlY3Qgb250byBpdHNlbGYgc2luY2Ugd2UncmVcbiAgICAgICAgLy8gYXQgdGhlIGVuZC5cblxuXG4gICAgICAgIHZhciBmbGFncyA9IGNvbXBsZXRlZFdvcmsuZmxhZ3M7IC8vIFNraXAgYm90aCBOb1dvcmsgYW5kIFBlcmZvcm1lZFdvcmsgdGFncyB3aGVuIGNyZWF0aW5nIHRoZSBlZmZlY3RcbiAgICAgICAgLy8gbGlzdC4gUGVyZm9ybWVkV29yayBlZmZlY3QgaXMgcmVhZCBieSBSZWFjdCBEZXZUb29scyBidXQgc2hvdWxkbid0IGJlXG4gICAgICAgIC8vIGNvbW1pdHRlZC5cblxuICAgICAgICBpZiAoZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgICAgICAgaWYgKHJldHVybkZpYmVyLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmxhc3RFZmZlY3QubmV4dEVmZmVjdCA9IGNvbXBsZXRlZFdvcms7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm5GaWJlci5sYXN0RWZmZWN0ID0gY29tcGxldGVkV29yaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUgYmVjYXVzZSBzb21ldGhpbmcgdGhyZXcuIFBvcCB2YWx1ZXMgb2ZmXG4gICAgICAvLyB0aGUgc3RhY2sgd2l0aG91dCBlbnRlcmluZyB0aGUgY29tcGxldGUgcGhhc2UuIElmIHRoaXMgaXMgYSBib3VuZGFyeSxcbiAgICAgIC8vIGNhcHR1cmUgdmFsdWVzIGlmIHBvc3NpYmxlLlxuICAgICAgdmFyIF9uZXh0ID0gdW53aW5kV29yayhjb21wbGV0ZWRXb3JrKTsgLy8gQmVjYXVzZSB0aGlzIGZpYmVyIGRpZCBub3QgY29tcGxldGUsIGRvbid0IHJlc2V0IGl0cyBleHBpcmF0aW9uIHRpbWUuXG5cblxuICAgICAgaWYgKF9uZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIElmIGNvbXBsZXRpbmcgdGhpcyB3b3JrIHNwYXduZWQgbmV3IHdvcmssIGRvIHRoYXQgbmV4dC4gV2UnbGwgY29tZVxuICAgICAgICAvLyBiYWNrIGhlcmUgYWdhaW4uXG4gICAgICAgIC8vIFNpbmNlIHdlJ3JlIHJlc3RhcnRpbmcsIHJlbW92ZSBhbnl0aGluZyB0aGF0IGlzIG5vdCBhIGhvc3QgZWZmZWN0XG4gICAgICAgIC8vIGZyb20gdGhlIGVmZmVjdCB0YWcuXG4gICAgICAgIF9uZXh0LmZsYWdzICY9IEhvc3RFZmZlY3RNYXNrO1xuICAgICAgICB3b3JrSW5Qcm9ncmVzcyA9IF9uZXh0O1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICggKGNvbXBsZXRlZFdvcmsubW9kZSAmIFByb2ZpbGVNb2RlKSAhPT0gTm9Nb2RlKSB7XG4gICAgICAgIC8vIFJlY29yZCB0aGUgcmVuZGVyIGR1cmF0aW9uIGZvciB0aGUgZmliZXIgdGhhdCBlcnJvcmVkLlxuICAgICAgICBzdG9wUHJvZmlsZXJUaW1lcklmUnVubmluZ0FuZFJlY29yZERlbHRhKGNvbXBsZXRlZFdvcmssIGZhbHNlKTsgLy8gSW5jbHVkZSB0aGUgdGltZSBzcGVudCB3b3JraW5nIG9uIGZhaWxlZCBjaGlsZHJlbiBiZWZvcmUgY29udGludWluZy5cblxuICAgICAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgICAgIHdoaWxlIChjaGlsZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGFjdHVhbER1cmF0aW9uICs9IGNoaWxkLmFjdHVhbER1cmF0aW9uO1xuICAgICAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbXBsZXRlZFdvcmsuYWN0dWFsRHVyYXRpb24gPSBhY3R1YWxEdXJhdGlvbjtcbiAgICAgIH1cblxuICAgICAgaWYgKHJldHVybkZpYmVyICE9PSBudWxsKSB7XG4gICAgICAgIC8vIE1hcmsgdGhlIHBhcmVudCBmaWJlciBhcyBpbmNvbXBsZXRlIGFuZCBjbGVhciBpdHMgZWZmZWN0IGxpc3QuXG4gICAgICAgIHJldHVybkZpYmVyLmZpcnN0RWZmZWN0ID0gcmV0dXJuRmliZXIubGFzdEVmZmVjdCA9IG51bGw7XG4gICAgICAgIHJldHVybkZpYmVyLmZsYWdzIHw9IEluY29tcGxldGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHNpYmxpbmdGaWJlciA9IGNvbXBsZXRlZFdvcmsuc2libGluZztcblxuICAgIGlmIChzaWJsaW5nRmliZXIgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbyBpbiB0aGlzIHJldHVybkZpYmVyLCBkbyB0aGF0IG5leHQuXG4gICAgICB3b3JrSW5Qcm9ncmVzcyA9IHNpYmxpbmdGaWJlcjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIE90aGVyd2lzZSwgcmV0dXJuIHRvIHRoZSBwYXJlbnRcblxuXG4gICAgY29tcGxldGVkV29yayA9IHJldHVybkZpYmVyOyAvLyBVcGRhdGUgdGhlIG5leHQgdGhpbmcgd2UncmUgd29ya2luZyBvbiBpbiBjYXNlIHNvbWV0aGluZyB0aHJvd3MuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcyA9IGNvbXBsZXRlZFdvcms7XG4gIH0gd2hpbGUgKGNvbXBsZXRlZFdvcmsgIT09IG51bGwpOyAvLyBXZSd2ZSByZWFjaGVkIHRoZSByb290LlxuXG5cbiAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RJbmNvbXBsZXRlKSB7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9IFJvb3RDb21wbGV0ZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRDaGlsZExhbmVzKGNvbXBsZXRlZFdvcmspIHtcbiAgaWYgKCAvLyBUT0RPOiBNb3ZlIHRoaXMgY2hlY2sgb3V0IG9mIHRoZSBob3QgcGF0aCBieSBtb3ZpbmcgYHJlc2V0Q2hpbGRMYW5lc2BcbiAgLy8gdG8gc3dpdGNoIHN0YXRlbWVudCBpbiBgY29tcGxldGVXb3JrYC5cbiAgKGNvbXBsZXRlZFdvcmsudGFnID09PSBMZWdhY3lIaWRkZW5Db21wb25lbnQgfHwgY29tcGxldGVkV29yay50YWcgPT09IE9mZnNjcmVlbkNvbXBvbmVudCkgJiYgY29tcGxldGVkV29yay5tZW1vaXplZFN0YXRlICE9PSBudWxsICYmICFpbmNsdWRlc1NvbWVMYW5lKHN1YnRyZWVSZW5kZXJMYW5lcywgT2Zmc2NyZWVuTGFuZSkgJiYgKGNvbXBsZXRlZFdvcmsubW9kZSAmIENvbmN1cnJlbnRNb2RlKSAhPT0gTm9MYW5lcykge1xuICAgIC8vIFRoZSBjaGlsZHJlbiBvZiB0aGlzIGNvbXBvbmVudCBhcmUgaGlkZGVuLiBEb24ndCBidWJibGUgdGhlaXJcbiAgICAvLyBleHBpcmF0aW9uIHRpbWVzLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBuZXdDaGlsZExhbmVzID0gTm9MYW5lczsgLy8gQnViYmxlIHVwIHRoZSBlYXJsaWVzdCBleHBpcmF0aW9uIHRpbWUuXG5cbiAgaWYgKCAoY29tcGxldGVkV29yay5tb2RlICYgUHJvZmlsZU1vZGUpICE9PSBOb01vZGUpIHtcbiAgICAvLyBJbiBwcm9maWxpbmcgbW9kZSwgcmVzZXRDaGlsZEV4cGlyYXRpb25UaW1lIGlzIGFsc28gdXNlZCB0byByZXNldFxuICAgIC8vIHByb2ZpbGVyIGR1cmF0aW9ucy5cbiAgICB2YXIgYWN0dWFsRHVyYXRpb24gPSBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uO1xuICAgIHZhciB0cmVlQmFzZUR1cmF0aW9uID0gY29tcGxldGVkV29yay5zZWxmQmFzZUR1cmF0aW9uOyAvLyBXaGVuIGEgZmliZXIgaXMgY2xvbmVkLCBpdHMgYWN0dWFsRHVyYXRpb24gaXMgcmVzZXQgdG8gMC4gVGhpcyB2YWx1ZSB3aWxsXG4gICAgLy8gb25seSBiZSB1cGRhdGVkIGlmIHdvcmsgaXMgZG9uZSBvbiB0aGUgZmliZXIgKGkuZS4gaXQgZG9lc24ndCBiYWlsb3V0KS5cbiAgICAvLyBXaGVuIHdvcmsgaXMgZG9uZSwgaXQgc2hvdWxkIGJ1YmJsZSB0byB0aGUgcGFyZW50J3MgYWN0dWFsRHVyYXRpb24uIElmXG4gICAgLy8gdGhlIGZpYmVyIGhhcyBub3QgYmVlbiBjbG9uZWQgdGhvdWdoLCAobWVhbmluZyBubyB3b3JrIHdhcyBkb25lKSwgdGhlblxuICAgIC8vIHRoaXMgdmFsdWUgd2lsbCByZWZsZWN0IHRoZSBhbW91bnQgb2YgdGltZSBzcGVudCB3b3JraW5nIG9uIGEgcHJldmlvdXNcbiAgICAvLyByZW5kZXIuIEluIHRoYXQgY2FzZSBpdCBzaG91bGQgbm90IGJ1YmJsZS4gV2UgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgd2FzXG4gICAgLy8gY2xvbmVkIGJ5IGNvbXBhcmluZyB0aGUgY2hpbGQgcG9pbnRlci5cblxuICAgIHZhciBzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMgPSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZSA9PT0gbnVsbCB8fCBjb21wbGV0ZWRXb3JrLmNoaWxkICE9PSBjb21wbGV0ZWRXb3JrLmFsdGVybmF0ZS5jaGlsZDtcbiAgICB2YXIgY2hpbGQgPSBjb21wbGV0ZWRXb3JrLmNoaWxkO1xuXG4gICAgd2hpbGUgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICBuZXdDaGlsZExhbmVzID0gbWVyZ2VMYW5lcyhuZXdDaGlsZExhbmVzLCBtZXJnZUxhbmVzKGNoaWxkLmxhbmVzLCBjaGlsZC5jaGlsZExhbmVzKSk7XG5cbiAgICAgIGlmIChzaG91bGRCdWJibGVBY3R1YWxEdXJhdGlvbnMpIHtcbiAgICAgICAgYWN0dWFsRHVyYXRpb24gKz0gY2hpbGQuYWN0dWFsRHVyYXRpb247XG4gICAgICB9XG5cbiAgICAgIHRyZWVCYXNlRHVyYXRpb24gKz0gY2hpbGQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIGNoaWxkID0gY2hpbGQuc2libGluZztcbiAgICB9XG5cbiAgICB2YXIgaXNUaW1lZE91dFN1c3BlbnNlID0gY29tcGxldGVkV29yay50YWcgPT09IFN1c3BlbnNlQ29tcG9uZW50ICYmIGNvbXBsZXRlZFdvcmsubWVtb2l6ZWRTdGF0ZSAhPT0gbnVsbDtcblxuICAgIGlmIChpc1RpbWVkT3V0U3VzcGVuc2UpIHtcbiAgICAgIC8vIERvbid0IGNvdW50IHRpbWUgc3BlbnQgaW4gYSB0aW1lZCBvdXQgU3VzcGVuc2Ugc3VidHJlZSBhcyBwYXJ0IG9mIHRoZSBiYXNlIGR1cmF0aW9uLlxuICAgICAgdmFyIHByaW1hcnlDaGlsZEZyYWdtZW50ID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgICAgaWYgKHByaW1hcnlDaGlsZEZyYWdtZW50ICE9PSBudWxsKSB7XG4gICAgICAgIHRyZWVCYXNlRHVyYXRpb24gLT0gcHJpbWFyeUNoaWxkRnJhZ21lbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wbGV0ZWRXb3JrLmFjdHVhbER1cmF0aW9uID0gYWN0dWFsRHVyYXRpb247XG4gICAgY29tcGxldGVkV29yay50cmVlQmFzZUR1cmF0aW9uID0gdHJlZUJhc2VEdXJhdGlvbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgX2NoaWxkID0gY29tcGxldGVkV29yay5jaGlsZDtcblxuICAgIHdoaWxlIChfY2hpbGQgIT09IG51bGwpIHtcbiAgICAgIG5ld0NoaWxkTGFuZXMgPSBtZXJnZUxhbmVzKG5ld0NoaWxkTGFuZXMsIG1lcmdlTGFuZXMoX2NoaWxkLmxhbmVzLCBfY2hpbGQuY2hpbGRMYW5lcykpO1xuICAgICAgX2NoaWxkID0gX2NoaWxkLnNpYmxpbmc7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVkV29yay5jaGlsZExhbmVzID0gbmV3Q2hpbGRMYW5lcztcbn1cblxuZnVuY3Rpb24gY29tbWl0Um9vdChyb290KSB7XG4gIHZhciByZW5kZXJQcmlvcml0eUxldmVsID0gZ2V0Q3VycmVudFByaW9yaXR5TGV2ZWwoKTtcbiAgcnVuV2l0aFByaW9yaXR5JDEoSW1tZWRpYXRlUHJpb3JpdHkkMSwgY29tbWl0Um9vdEltcGwuYmluZChudWxsLCByb290LCByZW5kZXJQcmlvcml0eUxldmVsKSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBjb21taXRSb290SW1wbChyb290LCByZW5kZXJQcmlvcml0eUxldmVsKSB7XG4gIGRvIHtcbiAgICAvLyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBjYWxsIGBmbHVzaFN5bmNVcGRhdGVRdWV1ZWAgYXQgdGhlIGVuZCwgd2hpY2hcbiAgICAvLyBtZWFucyBgZmx1c2hQYXNzaXZlRWZmZWN0c2Agd2lsbCBzb21ldGltZXMgcmVzdWx0IGluIGFkZGl0aW9uYWxcbiAgICAvLyBwYXNzaXZlIGVmZmVjdHMuIFNvIHdlIG5lZWQgdG8ga2VlcCBmbHVzaGluZyBpbiBhIGxvb3AgdW50aWwgdGhlcmUgYXJlXG4gICAgLy8gbm8gbW9yZSBwZW5kaW5nIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWlnaHQgYmUgYmV0dGVyIGlmIGBmbHVzaFBhc3NpdmVFZmZlY3RzYCBkaWQgbm90IGF1dG9tYXRpY2FsbHlcbiAgICAvLyBmbHVzaCBzeW5jaHJvbm91cyB3b3JrIGF0IHRoZSBlbmQsIHRvIGF2b2lkIGZhY3RvcmluZyBoYXphcmRzIGxpa2UgdGhpcy5cbiAgICBmbHVzaFBhc3NpdmVFZmZlY3RzKCk7XG4gIH0gd2hpbGUgKHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzICE9PSBudWxsKTtcblxuICBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKTtcblxuICBpZiAoISgoZXhlY3V0aW9uQ29udGV4dCAmIChSZW5kZXJDb250ZXh0IHwgQ29tbWl0Q29udGV4dCkpID09PSBOb0NvbnRleHQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIG5vdCBhbHJlYWR5IGJlIHdvcmtpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgZmluaXNoZWRXb3JrID0gcm9vdC5maW5pc2hlZFdvcms7XG4gIHZhciBsYW5lcyA9IHJvb3QuZmluaXNoZWRMYW5lcztcblxuICBpZiAoZmluaXNoZWRXb3JrID09PSBudWxsKSB7XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJvb3QuZmluaXNoZWRXb3JrID0gbnVsbDtcbiAgcm9vdC5maW5pc2hlZExhbmVzID0gTm9MYW5lcztcblxuICBpZiAoIShmaW5pc2hlZFdvcmsgIT09IHJvb3QuY3VycmVudCkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJDYW5ub3QgY29tbWl0IHRoZSBzYW1lIHRyZWUgYXMgYmVmb3JlLiBUaGlzIGVycm9yIGlzIGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLlwiICk7XG4gICAgfVxuICB9IC8vIGNvbW1pdFJvb3QgbmV2ZXIgcmV0dXJucyBhIGNvbnRpbnVhdGlvbjsgaXQgYWx3YXlzIGZpbmlzaGVzIHN5bmNocm9ub3VzbHkuXG4gIC8vIFNvIHdlIGNhbiBjbGVhciB0aGVzZSBub3cgdG8gYWxsb3cgYSBuZXcgY2FsbGJhY2sgdG8gYmUgc2NoZWR1bGVkLlxuXG5cbiAgcm9vdC5jYWxsYmFja05vZGUgPSBudWxsOyAvLyBVcGRhdGUgdGhlIGZpcnN0IGFuZCBsYXN0IHBlbmRpbmcgdGltZXMgb24gdGhpcyByb290LiBUaGUgbmV3IGZpcnN0XG4gIC8vIHBlbmRpbmcgdGltZSBpcyB3aGF0ZXZlciBpcyBsZWZ0IG9uIHRoZSByb290IGZpYmVyLlxuXG4gIHZhciByZW1haW5pbmdMYW5lcyA9IG1lcmdlTGFuZXMoZmluaXNoZWRXb3JrLmxhbmVzLCBmaW5pc2hlZFdvcmsuY2hpbGRMYW5lcyk7XG4gIG1hcmtSb290RmluaXNoZWQocm9vdCwgcmVtYWluaW5nTGFuZXMpOyAvLyBDbGVhciBhbHJlYWR5IGZpbmlzaGVkIGRpc2NyZXRlIHVwZGF0ZXMgaW4gY2FzZSB0aGF0IGEgbGF0ZXIgY2FsbCBvZlxuICAvLyBgZmx1c2hEaXNjcmV0ZVVwZGF0ZXNgIHN0YXJ0cyBhIHVzZWxlc3MgcmVuZGVyIHBhc3Mgd2hpY2ggbWF5IGNhbmNlbHNcbiAgLy8gYSBzY2hlZHVsZWQgdGltZW91dC5cblxuICBpZiAocm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcyAhPT0gbnVsbCkge1xuICAgIGlmICghaGFzRGlzY3JldGVMYW5lcyhyZW1haW5pbmdMYW5lcykgJiYgcm9vdHNXaXRoUGVuZGluZ0Rpc2NyZXRlVXBkYXRlcy5oYXMocm9vdCkpIHtcbiAgICAgIHJvb3RzV2l0aFBlbmRpbmdEaXNjcmV0ZVVwZGF0ZXMuZGVsZXRlKHJvb3QpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyb290ID09PSB3b3JrSW5Qcm9ncmVzc1Jvb3QpIHtcbiAgICAvLyBXZSBjYW4gcmVzZXQgdGhlc2Ugbm93IHRoYXQgdGhleSBhcmUgZmluaXNoZWQuXG4gICAgd29ya0luUHJvZ3Jlc3NSb290ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3NSb290UmVuZGVyTGFuZXMgPSBOb0xhbmVzO1xuICB9IC8vIEdldCB0aGUgbGlzdCBvZiBlZmZlY3RzLlxuXG5cbiAgdmFyIGZpcnN0RWZmZWN0O1xuXG4gIGlmIChmaW5pc2hlZFdvcmsuZmxhZ3MgPiBQZXJmb3JtZWRXb3JrKSB7XG4gICAgLy8gQSBmaWJlcidzIGVmZmVjdCBsaXN0IGNvbnNpc3RzIG9ubHkgb2YgaXRzIGNoaWxkcmVuLCBub3QgaXRzZWxmLiBTbyBpZlxuICAgIC8vIHRoZSByb290IGhhcyBhbiBlZmZlY3QsIHdlIG5lZWQgdG8gYWRkIGl0IHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QuIFRoZVxuICAgIC8vIHJlc3VsdGluZyBsaXN0IGlzIHRoZSBzZXQgdGhhdCB3b3VsZCBiZWxvbmcgdG8gdGhlIHJvb3QncyBwYXJlbnQsIGlmIGl0XG4gICAgLy8gaGFkIG9uZTsgdGhhdCBpcywgYWxsIHRoZSBlZmZlY3RzIGluIHRoZSB0cmVlIGluY2x1ZGluZyB0aGUgcm9vdC5cbiAgICBpZiAoZmluaXNoZWRXb3JrLmxhc3RFZmZlY3QgIT09IG51bGwpIHtcbiAgICAgIGZpbmlzaGVkV29yay5sYXN0RWZmZWN0Lm5leHRFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlyc3RFZmZlY3QgPSBmaW5pc2hlZFdvcms7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZXJlIGlzIG5vIGVmZmVjdCBvbiB0aGUgcm9vdC5cbiAgICBmaXJzdEVmZmVjdCA9IGZpbmlzaGVkV29yay5maXJzdEVmZmVjdDtcbiAgfVxuXG4gIGlmIChmaXJzdEVmZmVjdCAhPT0gbnVsbCkge1xuXG4gICAgdmFyIHByZXZFeGVjdXRpb25Db250ZXh0ID0gZXhlY3V0aW9uQ29udGV4dDtcbiAgICBleGVjdXRpb25Db250ZXh0IHw9IENvbW1pdENvbnRleHQ7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBSZXNldCB0aGlzIHRvIG51bGwgYmVmb3JlIGNhbGxpbmcgbGlmZWN5Y2xlc1xuXG4gICAgUmVhY3RDdXJyZW50T3duZXIkMi5jdXJyZW50ID0gbnVsbDsgLy8gVGhlIGNvbW1pdCBwaGFzZSBpcyBicm9rZW4gaW50byBzZXZlcmFsIHN1Yi1waGFzZXMuIFdlIGRvIGEgc2VwYXJhdGUgcGFzc1xuICAgIC8vIG9mIHRoZSBlZmZlY3QgbGlzdCBmb3IgZWFjaCBwaGFzZTogYWxsIG11dGF0aW9uIGVmZmVjdHMgY29tZSBiZWZvcmUgYWxsXG4gICAgLy8gbGF5b3V0IGVmZmVjdHMsIGFuZCBzbyBvbi5cbiAgICAvLyBUaGUgZmlyc3QgcGhhc2UgYSBcImJlZm9yZSBtdXRhdGlvblwiIHBoYXNlLiBXZSB1c2UgdGhpcyBwaGFzZSB0byByZWFkIHRoZVxuICAgIC8vIHN0YXRlIG9mIHRoZSBob3N0IHRyZWUgcmlnaHQgYmVmb3JlIHdlIG11dGF0ZSBpdC4gVGhpcyBpcyB3aGVyZVxuICAgIC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlIGlzIGNhbGxlZC5cblxuICAgIGZvY3VzZWRJbnN0YW5jZUhhbmRsZSA9IHByZXBhcmVGb3JDb21taXQocm9vdC5jb250YWluZXJJbmZvKTtcbiAgICBzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgPSBmYWxzZTtcbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRCZWZvcmVNdXRhdGlvbkVmZmVjdHMsIG51bGwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIGVycm9yKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7IC8vIFdlIG5vIGxvbmdlciBuZWVkIHRvIHRyYWNrIHRoZSBhY3RpdmUgaW5zdGFuY2UgZmliZXJcblxuXG4gICAgZm9jdXNlZEluc3RhbmNlSGFuZGxlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tbWl0IHRpbWUgdG8gYmUgc2hhcmVkIGJ5IGFsbCBQcm9maWxlcnMgaW4gdGhpc1xuICAgICAgLy8gYmF0Y2guIFRoaXMgZW5hYmxlcyB0aGVtIHRvIGJlIGdyb3VwZWQgbGF0ZXIuXG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfSAvLyBUaGUgbmV4dCBwaGFzZSBpcyB0aGUgbXV0YXRpb24gcGhhc2UsIHdoZXJlIHdlIG11dGF0ZSB0aGUgaG9zdCB0cmVlLlxuXG5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICBkbyB7XG4gICAgICB7XG4gICAgICAgIGludm9rZUd1YXJkZWRDYWxsYmFjayhudWxsLCBjb21taXRNdXRhdGlvbkVmZmVjdHMsIG51bGwsIHJvb3QsIHJlbmRlclByaW9yaXR5TGV2ZWwpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTtcblxuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKG5leHRFZmZlY3QsIF9lcnJvcik7XG4gICAgICAgICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpO1xuXG4gICAgcmVzZXRBZnRlckNvbW1pdChyb290LmNvbnRhaW5lckluZm8pOyAvLyBUaGUgd29yay1pbi1wcm9ncmVzcyB0cmVlIGlzIG5vdyB0aGUgY3VycmVudCB0cmVlLiBUaGlzIG11c3QgY29tZSBhZnRlclxuICAgIC8vIHRoZSBtdXRhdGlvbiBwaGFzZSwgc28gdGhhdCB0aGUgcHJldmlvdXMgdHJlZSBpcyBzdGlsbCBjdXJyZW50IGR1cmluZ1xuICAgIC8vIGNvbXBvbmVudFdpbGxVbm1vdW50LCBidXQgYmVmb3JlIHRoZSBsYXlvdXQgcGhhc2UsIHNvIHRoYXQgdGhlIGZpbmlzaGVkXG4gICAgLy8gd29yayBpcyBjdXJyZW50IGR1cmluZyBjb21wb25lbnREaWRNb3VudC9VcGRhdGUuXG5cbiAgICByb290LmN1cnJlbnQgPSBmaW5pc2hlZFdvcms7IC8vIFRoZSBuZXh0IHBoYXNlIGlzIHRoZSBsYXlvdXQgcGhhc2UsIHdoZXJlIHdlIGNhbGwgZWZmZWN0cyB0aGF0IHJlYWRcbiAgICAvLyB0aGUgaG9zdCB0cmVlIGFmdGVyIGl0J3MgYmVlbiBtdXRhdGVkLiBUaGUgaWRpb21hdGljIHVzZSBjYXNlIGZvciB0aGlzIGlzXG4gICAgLy8gbGF5b3V0LCBidXQgY2xhc3MgY29tcG9uZW50IGxpZmVjeWNsZXMgYWxzbyBmaXJlIGhlcmUgZm9yIGxlZ2FjeSByZWFzb25zLlxuXG4gICAgbmV4dEVmZmVjdCA9IGZpcnN0RWZmZWN0O1xuXG4gICAgZG8ge1xuICAgICAge1xuICAgICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgY29tbWl0TGF5b3V0RWZmZWN0cywgbnVsbCwgcm9vdCwgbGFuZXMpO1xuXG4gICAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgICAgaWYgKCEobmV4dEVmZmVjdCAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9lcnJvcjIgPSBjbGVhckNhdWdodEVycm9yKCk7XG5cbiAgICAgICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvcihuZXh0RWZmZWN0LCBfZXJyb3IyKTtcbiAgICAgICAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCk7XG5cbiAgICBuZXh0RWZmZWN0ID0gbnVsbDsgLy8gVGVsbCBTY2hlZHVsZXIgdG8geWllbGQgYXQgdGhlIGVuZCBvZiB0aGUgZnJhbWUsIHNvIHRoZSBicm93c2VyIGhhcyBhblxuICAgIC8vIG9wcG9ydHVuaXR5IHRvIHBhaW50LlxuXG4gICAgcmVxdWVzdFBhaW50KCk7XG5cbiAgICB7XG4gICAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgfVxuXG4gICAgZXhlY3V0aW9uQ29udGV4dCA9IHByZXZFeGVjdXRpb25Db250ZXh0O1xuICB9IGVsc2Uge1xuICAgIC8vIE5vIGVmZmVjdHMuXG4gICAgcm9vdC5jdXJyZW50ID0gZmluaXNoZWRXb3JrOyAvLyBNZWFzdXJlIHRoZXNlIGFueXdheSBzbyB0aGUgZmxhbWVncmFwaCBleHBsaWNpdGx5IHNob3dzIHRoYXQgdGhlcmUgd2VyZVxuICAgIC8vIG5vIGVmZmVjdHMuXG4gICAgLy8gVE9ETzogTWF5YmUgdGhlcmUncyBhIGJldHRlciB3YXkgdG8gcmVwb3J0IHRoaXMuXG5cbiAgICB7XG4gICAgICByZWNvcmRDb21taXRUaW1lKCk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHJvb3REaWRIYXZlUGFzc2l2ZUVmZmVjdHMgPSByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cztcblxuICBpZiAocm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMpIHtcbiAgICAvLyBUaGlzIGNvbW1pdCBoYXMgcGFzc2l2ZSBlZmZlY3RzLiBTdGFzaCBhIHJlZmVyZW5jZSB0byB0aGVtLiBCdXQgZG9uJ3RcbiAgICAvLyBzY2hlZHVsZSBhIGNhbGxiYWNrIHVudGlsIGFmdGVyIGZsdXNoaW5nIGxheW91dCB3b3JrLlxuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gICAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSByb290O1xuICAgIHBlbmRpbmdQYXNzaXZlRWZmZWN0c0xhbmVzID0gbGFuZXM7XG4gICAgcGVuZGluZ1Bhc3NpdmVFZmZlY3RzUmVuZGVyUHJpb3JpdHkgPSByZW5kZXJQcmlvcml0eUxldmVsO1xuICB9IGVsc2Uge1xuICAgIC8vIFdlIGFyZSBkb25lIHdpdGggdGhlIGVmZmVjdCBjaGFpbiBhdCB0aGlzIHBvaW50IHNvIGxldCdzIGNsZWFyIHRoZVxuICAgIC8vIG5leHRFZmZlY3QgcG9pbnRlcnMgdG8gYXNzaXN0IHdpdGggR0MuIElmIHdlIGhhdmUgcGFzc2l2ZSBlZmZlY3RzLCB3ZSdsbFxuICAgIC8vIGNsZWFyIHRoaXMgaW4gZmx1c2hQYXNzaXZlRWZmZWN0cy5cbiAgICBuZXh0RWZmZWN0ID0gZmlyc3RFZmZlY3Q7XG5cbiAgICB3aGlsZSAobmV4dEVmZmVjdCAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5leHROZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICAgICAgbmV4dEVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgICAgaWYgKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgICBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhuZXh0RWZmZWN0KTtcbiAgICAgIH1cblxuICAgICAgbmV4dEVmZmVjdCA9IG5leHROZXh0RWZmZWN0O1xuICAgIH1cbiAgfSAvLyBSZWFkIHRoaXMgYWdhaW4sIHNpbmNlIGFuIGVmZmVjdCBtaWdodCBoYXZlIHVwZGF0ZWQgaXRcblxuXG4gIHJlbWFpbmluZ0xhbmVzID0gcm9vdC5wZW5kaW5nTGFuZXM7IC8vIENoZWNrIGlmIHRoZXJlJ3MgcmVtYWluaW5nIHdvcmsgb24gdGhpcyByb290XG5cbiAgaWYgKHJlbWFpbmluZ0xhbmVzICE9PSBOb0xhbmVzKSB7XG4gICAge1xuICAgICAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyICE9PSBudWxsKSB7XG4gICAgICAgIHZhciBleHBpcmF0aW9uVGltZXMgPSBzcGF3bmVkV29ya0R1cmluZ1JlbmRlcjtcbiAgICAgICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBudWxsO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwaXJhdGlvblRpbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgZXhwaXJhdGlvblRpbWVzW2ldLCByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgcmVtYWluaW5nTGFuZXMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB0aGVyZSdzIG5vIHJlbWFpbmluZyB3b3JrLCB3ZSBjYW4gY2xlYXIgdGhlIHNldCBvZiBhbHJlYWR5IGZhaWxlZFxuICAgIC8vIGVycm9yIGJvdW5kYXJpZXMuXG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPSBudWxsO1xuICB9XG5cbiAge1xuICAgIGlmICghcm9vdERpZEhhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cywgdGhlbiB3ZSBjYW4gY29tcGxldGUgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb25zLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB3ZSdsbCB3YWl0IHVudGlsIGFmdGVyIHRoZSBwYXNzaXZlIGVmZmVjdHMgYXJlIGZsdXNoZWQuXG4gICAgICAvLyBXYWl0IHRvIGRvIHRoaXMgdW50aWwgYWZ0ZXIgcmVtYWluaW5nIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkLFxuICAgICAgLy8gc28gdGhhdCB3ZSBkb24ndCBwcmVtYXR1cmVseSBzaWduYWwgY29tcGxldGUgZm9yIGludGVyYWN0aW9ucyB3aGVuIHRoZXJlJ3MgZS5nLiBoaWRkZW4gd29yay5cbiAgICAgIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgbGFuZXMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChyZW1haW5pbmdMYW5lcyA9PT0gU3luY0xhbmUpIHtcbiAgICAvLyBDb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByb290IHN5bmNocm9ub3VzbHkgcmUtcmVuZGVycyB3aXRob3V0XG4gICAgLy8gZmluaXNoaW5nLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnksIGl0IGluZGljYXRlcyBhbiBpbmZpbml0ZSB1cGRhdGUgbG9vcC5cbiAgICBpZiAocm9vdCA9PT0gcm9vdFdpdGhOZXN0ZWRVcGRhdGVzKSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gICAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSByb290O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXN0ZWRVcGRhdGVDb3VudCA9IDA7XG4gIH1cblxuICBvbkNvbW1pdFJvb3QoZmluaXNoZWRXb3JrLnN0YXRlTm9kZSwgcmVuZGVyUHJpb3JpdHlMZXZlbCk7XG5cbiAge1xuICAgIG9uQ29tbWl0Um9vdCQxKCk7XG4gIH0gLy8gQWx3YXlzIGNhbGwgdGhpcyBiZWZvcmUgZXhpdGluZyBgY29tbWl0Um9vdGAsIHRvIGVuc3VyZSB0aGF0IGFueVxuICAvLyBhZGRpdGlvbmFsIHdvcmsgb24gdGhpcyByb290IGlzIHNjaGVkdWxlZC5cblxuXG4gIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBub3coKSk7XG5cbiAgaWYgKGhhc1VuY2F1Z2h0RXJyb3IpIHtcbiAgICBoYXNVbmNhdWdodEVycm9yID0gZmFsc2U7XG4gICAgdmFyIF9lcnJvcjMgPSBmaXJzdFVuY2F1Z2h0RXJyb3I7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gbnVsbDtcbiAgICB0aHJvdyBfZXJyb3IzO1xuICB9XG5cbiAgaWYgKChleGVjdXRpb25Db250ZXh0ICYgTGVnYWN5VW5iYXRjaGVkQ29udGV4dCkgIT09IE5vQ29udGV4dCkge1xuICAgIC8vIGEgUmVhY3RET00ucmVuZGVyLWVkIHJvb3QgaW5zaWRlIG9mIGJhdGNoZWRVcGRhdGVzLiBUaGUgY29tbWl0IGZpcmVkXG4gICAgLy8gc3luY2hyb25vdXNseSwgYnV0IGxheW91dCB1cGRhdGVzIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGJhdGNoLlxuXG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBJZiBsYXlvdXQgd29yayB3YXMgc2NoZWR1bGVkLCBmbHVzaCBpdCBub3cuXG5cblxuICBmbHVzaFN5bmNDYWxsYmFja1F1ZXVlKCk7XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGNvbW1pdEJlZm9yZU11dGF0aW9uRWZmZWN0cygpIHtcbiAgd2hpbGUgKG5leHRFZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKCFzaG91bGRGaXJlQWZ0ZXJBY3RpdmVJbnN0YW5jZUJsdXIgJiYgZm9jdXNlZEluc3RhbmNlSGFuZGxlICE9PSBudWxsKSB7XG4gICAgICBpZiAoKG5leHRFZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikgIT09IE5vRmxhZ3MpIHtcbiAgICAgICAgaWYgKGRvZXNGaWJlckNvbnRhaW4obmV4dEVmZmVjdCwgZm9jdXNlZEluc3RhbmNlSGFuZGxlKSkge1xuICAgICAgICAgIHNob3VsZEZpcmVBZnRlckFjdGl2ZUluc3RhbmNlQmx1ciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyBvdXQgb2YgdGhlIGhvdCBwYXRoIHVzaW5nIGEgZGVkaWNhdGVkIGVmZmVjdCB0YWcuXG4gICAgICAgIGlmIChuZXh0RWZmZWN0LnRhZyA9PT0gU3VzcGVuc2VDb21wb25lbnQgJiYgaXNTdXNwZW5zZUJvdW5kYXJ5QmVpbmdIaWRkZW4oY3VycmVudCwgbmV4dEVmZmVjdCkgJiYgZG9lc0ZpYmVyQ29udGFpbihuZXh0RWZmZWN0LCBmb2N1c2VkSW5zdGFuY2VIYW5kbGUpKSB7XG4gICAgICAgICAgc2hvdWxkRmlyZUFmdGVyQWN0aXZlSW5zdGFuY2VCbHVyID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoKGZsYWdzICYgU25hcHNob3QpICE9PSBOb0ZsYWdzKSB7XG4gICAgICBzZXRDdXJyZW50RmliZXIobmV4dEVmZmVjdCk7XG4gICAgICBjb21taXRCZWZvcmVNdXRhdGlvbkxpZmVDeWNsZXMoY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgIH1cblxuICAgIGlmICgoZmxhZ3MgJiBQYXNzaXZlKSAhPT0gTm9GbGFncykge1xuICAgICAgLy8gSWYgdGhlcmUgYXJlIHBhc3NpdmUgZWZmZWN0cywgc2NoZWR1bGUgYSBjYWxsYmFjayB0byBmbHVzaCBhdFxuICAgICAgLy8gdGhlIGVhcmxpZXN0IG9wcG9ydHVuaXR5LlxuICAgICAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgICAgICByb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cyA9IHRydWU7XG4gICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21taXRNdXRhdGlvbkVmZmVjdHMocm9vdCwgcmVuZGVyUHJpb3JpdHlMZXZlbCkge1xuICAvLyBUT0RPOiBTaG91bGQgcHJvYmFibHkgbW92ZSB0aGUgYnVsayBvZiB0aGlzIGZ1bmN0aW9uIHRvIGNvbW1pdFdvcmsuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiBDb250ZW50UmVzZXQpIHtcbiAgICAgIGNvbW1pdFJlc2V0VGV4dENvbnRlbnQobmV4dEVmZmVjdCk7XG4gICAgfVxuXG4gICAgaWYgKGZsYWdzICYgUmVmKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuXG4gICAgICBpZiAoY3VycmVudCAhPT0gbnVsbCkge1xuICAgICAgICBjb21taXREZXRhY2hSZWYoY3VycmVudCk7XG4gICAgICB9XG4gICAgfSAvLyBUaGUgZm9sbG93aW5nIHN3aXRjaCBzdGF0ZW1lbnQgaXMgb25seSBjb25jZXJuZWQgYWJvdXQgcGxhY2VtZW50LFxuICAgIC8vIHVwZGF0ZXMsIGFuZCBkZWxldGlvbnMuIFRvIGF2b2lkIG5lZWRpbmcgdG8gYWRkIGEgY2FzZSBmb3IgZXZlcnkgcG9zc2libGVcbiAgICAvLyBiaXRtYXAgdmFsdWUsIHdlIHJlbW92ZSB0aGUgc2Vjb25kYXJ5IGVmZmVjdHMgZnJvbSB0aGUgZWZmZWN0IHRhZyBhbmRcbiAgICAvLyBzd2l0Y2ggb24gdGhhdCB2YWx1ZS5cblxuXG4gICAgdmFyIHByaW1hcnlGbGFncyA9IGZsYWdzICYgKFBsYWNlbWVudCB8IFVwZGF0ZSB8IERlbGV0aW9uIHwgSHlkcmF0aW5nKTtcblxuICAgIHN3aXRjaCAocHJpbWFyeUZsYWdzKSB7XG4gICAgICBjYXNlIFBsYWNlbWVudDpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdFBsYWNlbWVudChuZXh0RWZmZWN0KTsgLy8gQ2xlYXIgdGhlIFwicGxhY2VtZW50XCIgZnJvbSBlZmZlY3QgdGFnIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoaXMgaXNcbiAgICAgICAgICAvLyBpbnNlcnRlZCwgYmVmb3JlIGFueSBsaWZlLWN5Y2xlcyBsaWtlIGNvbXBvbmVudERpZE1vdW50IGdldHMgY2FsbGVkLlxuICAgICAgICAgIC8vIFRPRE86IGZpbmRET01Ob2RlIGRvZXNuJ3QgcmVseSBvbiB0aGlzIGFueSBtb3JlIGJ1dCBpc01vdW50ZWQgZG9lc1xuICAgICAgICAgIC8vIGFuZCBpc01vdW50ZWQgaXMgZGVwcmVjYXRlZCBhbnl3YXkgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8ga2lsbCB0aGlzLlxuXG4gICAgICAgICAgbmV4dEVmZmVjdC5mbGFncyAmPSB+UGxhY2VtZW50O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgUGxhY2VtZW50QW5kVXBkYXRlOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gUGxhY2VtZW50XG4gICAgICAgICAgY29tbWl0UGxhY2VtZW50KG5leHRFZmZlY3QpOyAvLyBDbGVhciB0aGUgXCJwbGFjZW1lbnRcIiBmcm9tIGVmZmVjdCB0YWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyBpc1xuICAgICAgICAgIC8vIGluc2VydGVkLCBiZWZvcmUgYW55IGxpZmUtY3ljbGVzIGxpa2UgY29tcG9uZW50RGlkTW91bnQgZ2V0cyBjYWxsZWQuXG5cbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5QbGFjZW1lbnQ7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50ID0gbmV4dEVmZmVjdC5hbHRlcm5hdGU7XG4gICAgICAgICAgY29tbWl0V29yayhfY3VycmVudCwgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmc6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBIeWRyYXRpbmdBbmRVcGRhdGU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXh0RWZmZWN0LmZsYWdzICY9IH5IeWRyYXRpbmc7IC8vIFVwZGF0ZVxuXG4gICAgICAgICAgdmFyIF9jdXJyZW50MiA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgICAgIGNvbW1pdFdvcmsoX2N1cnJlbnQyLCBuZXh0RWZmZWN0KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFVwZGF0ZTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBfY3VycmVudDMgPSBuZXh0RWZmZWN0LmFsdGVybmF0ZTtcbiAgICAgICAgICBjb21taXRXb3JrKF9jdXJyZW50MywgbmV4dEVmZmVjdCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBEZWxldGlvbjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbW1pdERlbGV0aW9uKHJvb3QsIG5leHRFZmZlY3QpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICBuZXh0RWZmZWN0ID0gbmV4dEVmZmVjdC5uZXh0RWZmZWN0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGNvbW1pdExheW91dEVmZmVjdHMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuXG4gIHdoaWxlIChuZXh0RWZmZWN0ICE9PSBudWxsKSB7XG4gICAgc2V0Q3VycmVudEZpYmVyKG5leHRFZmZlY3QpO1xuICAgIHZhciBmbGFncyA9IG5leHRFZmZlY3QuZmxhZ3M7XG5cbiAgICBpZiAoZmxhZ3MgJiAoVXBkYXRlIHwgQ2FsbGJhY2spKSB7XG4gICAgICB2YXIgY3VycmVudCA9IG5leHRFZmZlY3QuYWx0ZXJuYXRlO1xuICAgICAgY29tbWl0TGlmZUN5Y2xlcyhyb290LCBjdXJyZW50LCBuZXh0RWZmZWN0KTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoZmxhZ3MgJiBSZWYpIHtcbiAgICAgICAgY29tbWl0QXR0YWNoUmVmKG5leHRFZmZlY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgbmV4dEVmZmVjdCA9IG5leHRFZmZlY3QubmV4dEVmZmVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFBhc3NpdmVFZmZlY3RzKCkge1xuICAvLyBSZXR1cm5zIHdoZXRoZXIgcGFzc2l2ZSBlZmZlY3RzIHdlcmUgZmx1c2hlZC5cbiAgaWYgKHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ICE9PSBOb1ByaW9yaXR5JDEpIHtcbiAgICB2YXIgcHJpb3JpdHlMZXZlbCA9IHBlbmRpbmdQYXNzaXZlRWZmZWN0c1JlbmRlclByaW9yaXR5ID4gTm9ybWFsUHJpb3JpdHkkMSA/IE5vcm1hbFByaW9yaXR5JDEgOiBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eTtcbiAgICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNSZW5kZXJQcmlvcml0eSA9IE5vUHJpb3JpdHkkMTtcblxuICAgIHtcbiAgICAgIHJldHVybiBydW5XaXRoUHJpb3JpdHkkMShwcmlvcml0eUxldmVsLCBmbHVzaFBhc3NpdmVFZmZlY3RzSW1wbCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gZW5xdWV1ZVBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdE1vdW50KGZpYmVyLCBlZmZlY3QpIHtcbiAgcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAgaWYgKCFyb290RG9lc0hhdmVQYXNzaXZlRWZmZWN0cykge1xuICAgIHJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgICBzY2hlZHVsZUNhbGxiYWNrKE5vcm1hbFByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0pO1xuICB9XG59XG5mdW5jdGlvbiBlbnF1ZXVlUGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0VW5tb3VudChmaWJlciwgZWZmZWN0KSB7XG4gIHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50LnB1c2goZWZmZWN0LCBmaWJlcik7XG5cbiAge1xuICAgIGZpYmVyLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB2YXIgYWx0ZXJuYXRlID0gZmliZXIuYWx0ZXJuYXRlO1xuXG4gICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgYWx0ZXJuYXRlLmZsYWdzIHw9IFBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICB9XG4gIH1cblxuICBpZiAoIXJvb3REb2VzSGF2ZVBhc3NpdmVFZmZlY3RzKSB7XG4gICAgcm9vdERvZXNIYXZlUGFzc2l2ZUVmZmVjdHMgPSB0cnVlO1xuICAgIHNjaGVkdWxlQ2FsbGJhY2soTm9ybWFsUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlUGFzc2l2ZUVmZmVjdENyZWF0ZShlZmZlY3QpIHtcbiAgdmFyIGNyZWF0ZSA9IGVmZmVjdC5jcmVhdGU7XG4gIGVmZmVjdC5kZXN0cm95ID0gY3JlYXRlKCk7XG59XG5cbmZ1bmN0aW9uIGZsdXNoUGFzc2l2ZUVmZmVjdHNJbXBsKCkge1xuICBpZiAocm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcm9vdCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzO1xuICB2YXIgbGFuZXMgPSBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcztcbiAgcm9vdFdpdGhQZW5kaW5nUGFzc2l2ZUVmZmVjdHMgPSBudWxsO1xuICBwZW5kaW5nUGFzc2l2ZUVmZmVjdHNMYW5lcyA9IE5vTGFuZXM7XG5cbiAgaWYgKCEoKGV4ZWN1dGlvbkNvbnRleHQgJiAoUmVuZGVyQ29udGV4dCB8IENvbW1pdENvbnRleHQpKSA9PT0gTm9Db250ZXh0KSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkNhbm5vdCBmbHVzaCBwYXNzaXZlIGVmZmVjdHMgd2hpbGUgYWxyZWFkeSByZW5kZXJpbmcuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gdHJ1ZTtcbiAgfVxuXG4gIHZhciBwcmV2RXhlY3V0aW9uQ29udGV4dCA9IGV4ZWN1dGlvbkNvbnRleHQ7XG4gIGV4ZWN1dGlvbkNvbnRleHQgfD0gQ29tbWl0Q29udGV4dDtcbiAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBwdXNoSW50ZXJhY3Rpb25zKHJvb3QpOyAvLyBJdCdzIGltcG9ydGFudCB0aGF0IEFMTCBwZW5kaW5nIHBhc3NpdmUgZWZmZWN0IGRlc3Ryb3kgZnVuY3Rpb25zIGFyZSBjYWxsZWRcbiAgLy8gYmVmb3JlIEFOWSBwYXNzaXZlIGVmZmVjdCBjcmVhdGUgZnVuY3Rpb25zIGFyZSBjYWxsZWQuXG4gIC8vIE90aGVyd2lzZSBlZmZlY3RzIGluIHNpYmxpbmcgY29tcG9uZW50cyBtaWdodCBpbnRlcmZlcmUgd2l0aCBlYWNoIG90aGVyLlxuICAvLyBlLmcuIGEgZGVzdHJveSBmdW5jdGlvbiBpbiBvbmUgY29tcG9uZW50IG1heSB1bmludGVudGlvbmFsbHkgb3ZlcnJpZGUgYSByZWZcbiAgLy8gdmFsdWUgc2V0IGJ5IGEgY3JlYXRlIGZ1bmN0aW9uIGluIGFub3RoZXIgY29tcG9uZW50LlxuICAvLyBMYXlvdXQgZWZmZWN0cyBoYXZlIHRoZSBzYW1lIGNvbnN0cmFpbnQuXG4gIC8vIEZpcnN0IHBhc3M6IERlc3Ryb3kgc3RhbGUgcGFzc2l2ZSBlZmZlY3RzLlxuXG4gIHZhciB1bm1vdW50RWZmZWN0cyA9IHBlbmRpbmdQYXNzaXZlSG9va0VmZmVjdHNVbm1vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzVW5tb3VudCA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgdW5tb3VudEVmZmVjdHMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICB2YXIgX2VmZmVjdCA9IHVubW91bnRFZmZlY3RzW2ldO1xuICAgIHZhciBmaWJlciA9IHVubW91bnRFZmZlY3RzW2kgKyAxXTtcbiAgICB2YXIgZGVzdHJveSA9IF9lZmZlY3QuZGVzdHJveTtcbiAgICBfZWZmZWN0LmRlc3Ryb3kgPSB1bmRlZmluZWQ7XG5cbiAgICB7XG4gICAgICBmaWJlci5mbGFncyAmPSB+UGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2O1xuICAgICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICAgICAgaWYgKGFsdGVybmF0ZSAhPT0gbnVsbCkge1xuICAgICAgICBhbHRlcm5hdGUuZmxhZ3MgJj0gflBhc3NpdmVVbm1vdW50UGVuZGluZ0RldjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICB7XG4gICAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGRlc3Ryb3ksIG51bGwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgICBpZiAoIShmaWJlciAhPT0gbnVsbCkpIHtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdGhyb3cgRXJyb3IoIFwiU2hvdWxkIGJlIHdvcmtpbmcgb24gYW4gZWZmZWN0LlwiICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGVycm9yID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuICAgICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKGZpYmVyLCBlcnJvcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBTZWNvbmQgcGFzczogQ3JlYXRlIG5ldyBwYXNzaXZlIGVmZmVjdHMuXG5cblxuICB2YXIgbW91bnRFZmZlY3RzID0gcGVuZGluZ1Bhc3NpdmVIb29rRWZmZWN0c01vdW50O1xuICBwZW5kaW5nUGFzc2l2ZUhvb2tFZmZlY3RzTW91bnQgPSBbXTtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW91bnRFZmZlY3RzLmxlbmd0aDsgX2kgKz0gMikge1xuICAgIHZhciBfZWZmZWN0MiA9IG1vdW50RWZmZWN0c1tfaV07XG4gICAgdmFyIF9maWJlciA9IG1vdW50RWZmZWN0c1tfaSArIDFdO1xuXG4gICAge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKF9maWJlcik7XG5cbiAgICAgIHtcbiAgICAgICAgaW52b2tlR3VhcmRlZENhbGxiYWNrKG51bGwsIGludm9rZVBhc3NpdmVFZmZlY3RDcmVhdGUsIG51bGwsIF9lZmZlY3QyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGhhc0NhdWdodEVycm9yKCkpIHtcbiAgICAgICAgaWYgKCEoX2ZpYmVyICE9PSBudWxsKSkge1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHRocm93IEVycm9yKCBcIlNob3VsZCBiZSB3b3JraW5nIG9uIGFuIGVmZmVjdC5cIiApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfZXJyb3I0ID0gY2xlYXJDYXVnaHRFcnJvcigpO1xuXG4gICAgICAgIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKF9maWJlciwgX2Vycm9yNCk7XG4gICAgICB9XG5cbiAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgfVxuICB9IC8vIE5vdGU6IFRoaXMgY3VycmVudGx5IGFzc3VtZXMgdGhlcmUgYXJlIG5vIHBhc3NpdmUgZWZmZWN0cyBvbiB0aGUgcm9vdCBmaWJlclxuICAvLyBiZWNhdXNlIHRoZSByb290IGlzIG5vdCBwYXJ0IG9mIGl0cyBvd24gZWZmZWN0IGxpc3QuXG4gIC8vIFRoaXMgY291bGQgY2hhbmdlIGluIHRoZSBmdXR1cmUuXG5cblxuICB2YXIgZWZmZWN0ID0gcm9vdC5jdXJyZW50LmZpcnN0RWZmZWN0O1xuXG4gIHdoaWxlIChlZmZlY3QgIT09IG51bGwpIHtcbiAgICB2YXIgbmV4dE5leHRFZmZlY3QgPSBlZmZlY3QubmV4dEVmZmVjdDsgLy8gUmVtb3ZlIG5leHRFZmZlY3QgcG9pbnRlciB0byBhc3Npc3QgR0NcblxuICAgIGVmZmVjdC5uZXh0RWZmZWN0ID0gbnVsbDtcblxuICAgIGlmIChlZmZlY3QuZmxhZ3MgJiBEZWxldGlvbikge1xuICAgICAgZGV0YWNoRmliZXJBZnRlckVmZmVjdHMoZWZmZWN0KTtcbiAgICB9XG5cbiAgICBlZmZlY3QgPSBuZXh0TmV4dEVmZmVjdDtcbiAgfVxuXG4gIHtcbiAgICBwb3BJbnRlcmFjdGlvbnMocHJldkludGVyYWN0aW9ucyk7XG4gICAgZmluaXNoUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lcyk7XG4gIH1cblxuICB7XG4gICAgaXNGbHVzaGluZ1Bhc3NpdmVFZmZlY3RzID0gZmFsc2U7XG4gIH1cblxuICBleGVjdXRpb25Db250ZXh0ID0gcHJldkV4ZWN1dGlvbkNvbnRleHQ7XG4gIGZsdXNoU3luY0NhbGxiYWNrUXVldWUoKTsgLy8gSWYgYWRkaXRpb25hbCBwYXNzaXZlIGVmZmVjdHMgd2VyZSBzY2hlZHVsZWQsIGluY3JlbWVudCBhIGNvdW50ZXIuIElmIHRoaXNcbiAgLy8gZXhjZWVkcyB0aGUgbGltaXQsIHdlJ2xsIGZpcmUgYSB3YXJuaW5nLlxuXG4gIG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA9IHJvb3RXaXRoUGVuZGluZ1Bhc3NpdmVFZmZlY3RzID09PSBudWxsID8gMCA6IG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCArIDE7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSB7XG4gIHJldHVybiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCAhPT0gbnVsbCAmJiBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZC5oYXMoaW5zdGFuY2UpO1xufVxuZnVuY3Rpb24gbWFya0xlZ2FjeUVycm9yQm91bmRhcnlBc0ZhaWxlZChpbnN0YW5jZSkge1xuICBpZiAobGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQgPT09IG51bGwpIHtcbiAgICBsZWdhY3lFcnJvckJvdW5kYXJpZXNUaGF0QWxyZWFkeUZhaWxlZCA9IG5ldyBTZXQoW2luc3RhbmNlXSk7XG4gIH0gZWxzZSB7XG4gICAgbGVnYWN5RXJyb3JCb3VuZGFyaWVzVGhhdEFscmVhZHlGYWlsZWQuYWRkKGluc3RhbmNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmVwYXJlVG9UaHJvd1VuY2F1Z2h0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFoYXNVbmNhdWdodEVycm9yKSB7XG4gICAgaGFzVW5jYXVnaHRFcnJvciA9IHRydWU7XG4gICAgZmlyc3RVbmNhdWdodEVycm9yID0gZXJyb3I7XG4gIH1cbn1cblxudmFyIG9uVW5jYXVnaHRFcnJvciA9IHByZXBhcmVUb1Rocm93VW5jYXVnaHRFcnJvcjtcblxuZnVuY3Rpb24gY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qocm9vdEZpYmVyLCBzb3VyY2VGaWJlciwgZXJyb3IpIHtcbiAgdmFyIGVycm9ySW5mbyA9IGNyZWF0ZUNhcHR1cmVkVmFsdWUoZXJyb3IsIHNvdXJjZUZpYmVyKTtcbiAgdmFyIHVwZGF0ZSA9IGNyZWF0ZVJvb3RFcnJvclVwZGF0ZShyb290RmliZXIsIGVycm9ySW5mbywgU3luY0xhbmUpO1xuICBlbnF1ZXVlVXBkYXRlKHJvb3RGaWJlciwgdXBkYXRlKTtcbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChyb290RmliZXIsIFN5bmNMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCBTeW5jTGFuZSwgZXZlbnRUaW1lKTtcbiAgICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgICBzY2hlZHVsZVBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgU3luY0xhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhcHR1cmVDb21taXRQaGFzZUVycm9yKHNvdXJjZUZpYmVyLCBlcnJvcikge1xuICBpZiAoc291cmNlRmliZXIudGFnID09PSBIb3N0Um9vdCkge1xuICAgIC8vIEVycm9yIHdhcyB0aHJvd24gYXQgdGhlIHJvb3QuIFRoZXJlIGlzIG5vIHBhcmVudCwgc28gdGhlIHJvb3RcbiAgICAvLyBpdHNlbGYgc2hvdWxkIGNhcHR1cmUgaXQuXG4gICAgY2FwdHVyZUNvbW1pdFBoYXNlRXJyb3JPblJvb3Qoc291cmNlRmliZXIsIHNvdXJjZUZpYmVyLCBlcnJvcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIGZpYmVyID0gc291cmNlRmliZXIucmV0dXJuO1xuXG4gIHdoaWxlIChmaWJlciAhPT0gbnVsbCkge1xuICAgIGlmIChmaWJlci50YWcgPT09IEhvc3RSb290KSB7XG4gICAgICBjYXB0dXJlQ29tbWl0UGhhc2VFcnJvck9uUm9vdChmaWJlciwgc291cmNlRmliZXIsIGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgIHZhciBjdG9yID0gZmliZXIudHlwZTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IGZpYmVyLnN0YXRlTm9kZTtcblxuICAgICAgaWYgKHR5cGVvZiBjdG9yLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvciA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2ggPT09ICdmdW5jdGlvbicgJiYgIWlzQWxyZWFkeUZhaWxlZExlZ2FjeUVycm9yQm91bmRhcnkoaW5zdGFuY2UpKSB7XG4gICAgICAgIHZhciBlcnJvckluZm8gPSBjcmVhdGVDYXB0dXJlZFZhbHVlKGVycm9yLCBzb3VyY2VGaWJlcik7XG4gICAgICAgIHZhciB1cGRhdGUgPSBjcmVhdGVDbGFzc0Vycm9yVXBkYXRlKGZpYmVyLCBlcnJvckluZm8sIFN5bmNMYW5lKTtcbiAgICAgICAgZW5xdWV1ZVVwZGF0ZShmaWJlciwgdXBkYXRlKTtcbiAgICAgICAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgICAgICAgdmFyIHJvb3QgPSBtYXJrVXBkYXRlTGFuZUZyb21GaWJlclRvUm9vdChmaWJlciwgU3luY0xhbmUpO1xuXG4gICAgICAgIGlmIChyb290ICE9PSBudWxsKSB7XG4gICAgICAgICAgbWFya1Jvb3RVcGRhdGVkKHJvb3QsIFN5bmNMYW5lLCBldmVudFRpbWUpO1xuICAgICAgICAgIGVuc3VyZVJvb3RJc1NjaGVkdWxlZChyb290LCBldmVudFRpbWUpO1xuICAgICAgICAgIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBTeW5jTGFuZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gVGhpcyBjb21wb25lbnQgaGFzIGFscmVhZHkgYmVlbiB1bm1vdW50ZWQuXG4gICAgICAgICAgLy8gV2UgY2FuJ3Qgc2NoZWR1bGUgYW55IGZvbGxvdyB1cCB3b3JrIGZvciB0aGUgcm9vdCBiZWNhdXNlIHRoZSBmaWJlciBpcyBhbHJlYWR5IHVubW91bnRlZCxcbiAgICAgICAgICAvLyBidXQgd2UgY2FuIHN0aWxsIGNhbGwgdGhlIGxvZy1vbmx5IGJvdW5kYXJ5IHNvIHRoZSBlcnJvciBpc24ndCBzd2FsbG93ZWQuXG4gICAgICAgICAgLy9cbiAgICAgICAgICAvLyBUT0RPIFRoaXMgaXMgb25seSBhIHRlbXBvcmFyeSBiYW5kYWlkIGZvciB0aGUgb2xkIHJlY29uY2lsZXIgZm9yay5cbiAgICAgICAgICAvLyBXZSBjYW4gZGVsZXRlIHRoaXMgc3BlY2lhbCBjYXNlIG9uY2UgdGhlIG5ldyBmb3JrIGlzIG1lcmdlZC5cbiAgICAgICAgICBpZiAodHlwZW9mIGluc3RhbmNlLmNvbXBvbmVudERpZENhdGNoID09PSAnZnVuY3Rpb24nICYmICFpc0FscmVhZHlGYWlsZWRMZWdhY3lFcnJvckJvdW5kYXJ5KGluc3RhbmNlKSkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UuY29tcG9uZW50RGlkQ2F0Y2goZXJyb3IsIGVycm9ySW5mbyk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvclRvSWdub3JlKSB7Ly8gVE9ETyBJZ25vcmUgdGhpcyBlcnJvcj8gUmV0aHJvdyBpdD9cbiAgICAgICAgICAgICAgLy8gVGhpcyBpcyBraW5kIG9mIGFuIGVkZ2UgY2FzZS5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgZmliZXIgPSBmaWJlci5yZXR1cm47XG4gIH1cbn1cbmZ1bmN0aW9uIHBpbmdTdXNwZW5kZWRSb290KHJvb3QsIHdha2VhYmxlLCBwaW5nZWRMYW5lcykge1xuICB2YXIgcGluZ0NhY2hlID0gcm9vdC5waW5nQ2FjaGU7XG5cbiAgaWYgKHBpbmdDYWNoZSAhPT0gbnVsbCkge1xuICAgIC8vIFRoZSB3YWtlYWJsZSByZXNvbHZlZCwgc28gd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gbWVtb2l6ZSwgYmVjYXVzZSBpdCB3aWxsXG4gICAgLy8gbmV2ZXIgYmUgdGhyb3duIGFnYWluLlxuICAgIHBpbmdDYWNoZS5kZWxldGUod2FrZWFibGUpO1xuICB9XG5cbiAgdmFyIGV2ZW50VGltZSA9IHJlcXVlc3RFdmVudFRpbWUoKTtcbiAgbWFya1Jvb3RQaW5nZWQocm9vdCwgcGluZ2VkTGFuZXMpO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzc1Jvb3QgPT09IHJvb3QgJiYgaXNTdWJzZXRPZkxhbmVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzLCBwaW5nZWRMYW5lcykpIHtcbiAgICAvLyBSZWNlaXZlZCBhIHBpbmcgYXQgdGhlIHNhbWUgcHJpb3JpdHkgbGV2ZWwgYXQgd2hpY2ggd2UncmUgY3VycmVudGx5XG4gICAgLy8gcmVuZGVyaW5nLiBXZSBtaWdodCB3YW50IHRvIHJlc3RhcnQgdGhpcyByZW5kZXIuIFRoaXMgc2hvdWxkIG1pcnJvclxuICAgIC8vIHRoZSBsb2dpYyBvZiB3aGV0aGVyIG9yIG5vdCBhIHJvb3Qgc3VzcGVuZHMgb25jZSBpdCBjb21wbGV0ZXMuXG4gICAgLy8gVE9ETzogSWYgd2UncmUgcmVuZGVyaW5nIHN5bmMgZWl0aGVyIGR1ZSB0byBTeW5jLCBCYXRjaGVkIG9yIGV4cGlyZWQsXG4gICAgLy8gd2Ugc2hvdWxkIHByb2JhYmx5IG5ldmVyIHJlc3RhcnQuXG4gICAgLy8gSWYgd2UncmUgc3VzcGVuZGVkIHdpdGggZGVsYXksIG9yIGlmIGl0J3MgYSByZXRyeSwgd2UnbGwgYWx3YXlzIHN1c3BlbmRcbiAgICAvLyBzbyB3ZSBjYW4gYWx3YXlzIHJlc3RhcnQuXG4gICAgaWYgKHdvcmtJblByb2dyZXNzUm9vdEV4aXRTdGF0dXMgPT09IFJvb3RTdXNwZW5kZWRXaXRoRGVsYXkgfHwgd29ya0luUHJvZ3Jlc3NSb290RXhpdFN0YXR1cyA9PT0gUm9vdFN1c3BlbmRlZCAmJiBpbmNsdWRlc09ubHlSZXRyaWVzKHdvcmtJblByb2dyZXNzUm9vdFJlbmRlckxhbmVzKSAmJiBub3coKSAtIGdsb2JhbE1vc3RSZWNlbnRGYWxsYmFja1RpbWUgPCBGQUxMQkFDS19USFJPVFRMRV9NUykge1xuICAgICAgLy8gUmVzdGFydCBmcm9tIHRoZSByb290LlxuICAgICAgcHJlcGFyZUZyZXNoU3RhY2socm9vdCwgTm9MYW5lcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGNhbid0IHJlc3RhcnQgcmlnaHQgbm93LCB3ZSBtaWdodCBnZXQgYW5cbiAgICAgIC8vIG9wcG9ydHVuaXR5IGxhdGVyLiBTbyB3ZSBtYXJrIHRoaXMgcmVuZGVyIGFzIGhhdmluZyBhIHBpbmcuXG4gICAgICB3b3JrSW5Qcm9ncmVzc1Jvb3RQaW5nZWRMYW5lcyA9IG1lcmdlTGFuZXMod29ya0luUHJvZ3Jlc3NSb290UGluZ2VkTGFuZXMsIHBpbmdlZExhbmVzKTtcbiAgICB9XG4gIH1cblxuICBlbnN1cmVSb290SXNTY2hlZHVsZWQocm9vdCwgZXZlbnRUaW1lKTtcbiAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHBpbmdlZExhbmVzKTtcbn1cblxuZnVuY3Rpb24gcmV0cnlUaW1lZE91dEJvdW5kYXJ5KGJvdW5kYXJ5RmliZXIsIHJldHJ5TGFuZSkge1xuICAvLyBUaGUgYm91bmRhcnkgZmliZXIgKGEgU3VzcGVuc2UgY29tcG9uZW50IG9yIFN1c3BlbnNlTGlzdCBjb21wb25lbnQpXG4gIC8vIHByZXZpb3VzbHkgd2FzIHJlbmRlcmVkIGluIGl0cyBmYWxsYmFjayBzdGF0ZS4gT25lIG9mIHRoZSBwcm9taXNlcyB0aGF0XG4gIC8vIHN1c3BlbmRlZCBpdCBoYXMgcmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGF0IGxlYXN0IHBhcnQgb2YgdGhlIHRyZWUgd2FzXG4gIC8vIGxpa2VseSB1bmJsb2NrZWQuIFRyeSByZW5kZXJpbmcgYWdhaW4sIGF0IGEgbmV3IGV4cGlyYXRpb24gdGltZS5cbiAgaWYgKHJldHJ5TGFuZSA9PT0gTm9MYW5lKSB7XG4gICAgcmV0cnlMYW5lID0gcmVxdWVzdFJldHJ5TGFuZShib3VuZGFyeUZpYmVyKTtcbiAgfSAvLyBUT0RPOiBTcGVjaWFsIGNhc2UgaWRsZSBwcmlvcml0eT9cblxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciByb290ID0gbWFya1VwZGF0ZUxhbmVGcm9tRmliZXJUb1Jvb3QoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcblxuICBpZiAocm9vdCAhPT0gbnVsbCkge1xuICAgIG1hcmtSb290VXBkYXRlZChyb290LCByZXRyeUxhbmUsIGV2ZW50VGltZSk7XG4gICAgZW5zdXJlUm9vdElzU2NoZWR1bGVkKHJvb3QsIGV2ZW50VGltZSk7XG4gICAgc2NoZWR1bGVQZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIHJldHJ5TGFuZSk7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlc29sdmVSZXRyeVdha2VhYmxlKGJvdW5kYXJ5RmliZXIsIHdha2VhYmxlKSB7XG4gIHZhciByZXRyeUxhbmUgPSBOb0xhbmU7IC8vIERlZmF1bHRcblxuICB2YXIgcmV0cnlDYWNoZTtcblxuICB7XG4gICAgcmV0cnlDYWNoZSA9IGJvdW5kYXJ5RmliZXIuc3RhdGVOb2RlO1xuICB9XG5cbiAgaWYgKHJldHJ5Q2FjaGUgIT09IG51bGwpIHtcbiAgICAvLyBUaGUgd2FrZWFibGUgcmVzb2x2ZWQsIHNvIHdlIG5vIGxvbmdlciBuZWVkIHRvIG1lbW9pemUsIGJlY2F1c2UgaXQgd2lsbFxuICAgIC8vIG5ldmVyIGJlIHRocm93biBhZ2Fpbi5cbiAgICByZXRyeUNhY2hlLmRlbGV0ZSh3YWtlYWJsZSk7XG4gIH1cblxuICByZXRyeVRpbWVkT3V0Qm91bmRhcnkoYm91bmRhcnlGaWJlciwgcmV0cnlMYW5lKTtcbn0gLy8gQ29tcHV0ZXMgdGhlIG5leHQgSnVzdCBOb3RpY2VhYmxlIERpZmZlcmVuY2UgKEpORCkgYm91bmRhcnkuXG4vLyBUaGUgdGhlb3J5IGlzIHRoYXQgYSBwZXJzb24gY2FuJ3QgdGVsbCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHNtYWxsIGRpZmZlcmVuY2VzIGluIHRpbWUuXG4vLyBUaGVyZWZvcmUsIGlmIHdlIHdhaXQgYSBiaXQgbG9uZ2VyIHRoYW4gbmVjZXNzYXJ5IHRoYXQgd29uJ3QgdHJhbnNsYXRlIHRvIGEgbm90aWNlYWJsZVxuLy8gZGlmZmVyZW5jZSBpbiB0aGUgZXhwZXJpZW5jZS4gSG93ZXZlciwgd2FpdGluZyBmb3IgbG9uZ2VyIG1pZ2h0IG1lYW4gdGhhdCB3ZSBjYW4gYXZvaWRcbi8vIHNob3dpbmcgYW4gaW50ZXJtZWRpYXRlIGxvYWRpbmcgc3RhdGUuIFRoZSBsb25nZXIgd2UgaGF2ZSBhbHJlYWR5IHdhaXRlZCwgdGhlIGhhcmRlciBpdFxuLy8gaXMgdG8gdGVsbCBzbWFsbCBkaWZmZXJlbmNlcyBpbiB0aW1lLiBUaGVyZWZvcmUsIHRoZSBsb25nZXIgd2UndmUgYWxyZWFkeSB3YWl0ZWQsXG4vLyB0aGUgbG9uZ2VyIHdlIGNhbiB3YWl0IGFkZGl0aW9uYWxseS4gQXQgc29tZSBwb2ludCB3ZSBoYXZlIHRvIGdpdmUgdXAgdGhvdWdoLlxuLy8gV2UgcGljayBhIHRyYWluIG1vZGVsIHdoZXJlIHRoZSBuZXh0IGJvdW5kYXJ5IGNvbW1pdHMgYXQgYSBjb25zaXN0ZW50IHNjaGVkdWxlLlxuLy8gVGhlc2UgcGFydGljdWxhciBudW1iZXJzIGFyZSB2YWd1ZSBlc3RpbWF0ZXMuIFdlIGV4cGVjdCB0byBhZGp1c3QgdGhlbSBiYXNlZCBvbiByZXNlYXJjaC5cblxuZnVuY3Rpb24gam5kKHRpbWVFbGFwc2VkKSB7XG4gIHJldHVybiB0aW1lRWxhcHNlZCA8IDEyMCA/IDEyMCA6IHRpbWVFbGFwc2VkIDwgNDgwID8gNDgwIDogdGltZUVsYXBzZWQgPCAxMDgwID8gMTA4MCA6IHRpbWVFbGFwc2VkIDwgMTkyMCA/IDE5MjAgOiB0aW1lRWxhcHNlZCA8IDMwMDAgPyAzMDAwIDogdGltZUVsYXBzZWQgPCA0MzIwID8gNDMyMCA6IGNlaWwodGltZUVsYXBzZWQgLyAxOTYwKSAqIDE5NjA7XG59XG5cbmZ1bmN0aW9uIGNoZWNrRm9yTmVzdGVkVXBkYXRlcygpIHtcbiAgaWYgKG5lc3RlZFVwZGF0ZUNvdW50ID4gTkVTVEVEX1VQREFURV9MSU1JVCkge1xuICAgIG5lc3RlZFVwZGF0ZUNvdW50ID0gMDtcbiAgICByb290V2l0aE5lc3RlZFVwZGF0ZXMgPSBudWxsO1xuXG4gICAge1xuICAgICAge1xuICAgICAgICB0aHJvdyBFcnJvciggXCJNYXhpbXVtIHVwZGF0ZSBkZXB0aCBleGNlZWRlZC4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gYSBjb21wb25lbnQgcmVwZWF0ZWRseSBjYWxscyBzZXRTdGF0ZSBpbnNpZGUgY29tcG9uZW50V2lsbFVwZGF0ZSBvciBjb21wb25lbnREaWRVcGRhdGUuIFJlYWN0IGxpbWl0cyB0aGUgbnVtYmVyIG9mIG5lc3RlZCB1cGRhdGVzIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuXCIgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB7XG4gICAgaWYgKG5lc3RlZFBhc3NpdmVVcGRhdGVDb3VudCA+IE5FU1RFRF9QQVNTSVZFX1VQREFURV9MSU1JVCkge1xuICAgICAgbmVzdGVkUGFzc2l2ZVVwZGF0ZUNvdW50ID0gMDtcblxuICAgICAgZXJyb3IoJ01heGltdW0gdXBkYXRlIGRlcHRoIGV4Y2VlZGVkLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIGNvbXBvbmVudCAnICsgXCJjYWxscyBzZXRTdGF0ZSBpbnNpZGUgdXNlRWZmZWN0LCBidXQgdXNlRWZmZWN0IGVpdGhlciBkb2Vzbid0IFwiICsgJ2hhdmUgYSBkZXBlbmRlbmN5IGFycmF5LCBvciBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VzIG9uICcgKyAnZXZlcnkgcmVuZGVyLicpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFJlbmRlclBoYXNlU3RyaWN0TW9kZVdhcm5pbmdzSW5ERVYoKSB7XG4gIHtcbiAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaExlZ2FjeUNvbnRleHRXYXJuaW5nKCk7XG5cbiAgICB7XG4gICAgICBSZWFjdFN0cmljdE1vZGVXYXJuaW5ncy5mbHVzaFBlbmRpbmdVbnNhZmVMaWZlY3ljbGVXYXJuaW5ncygpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uTm90WWV0TW91bnRlZEZpYmVySW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICgoZXhlY3V0aW9uQ29udGV4dCAmIFJlbmRlckNvbnRleHQpICE9PSBOb0NvbnRleHQpIHtcbiAgICAgIC8vIFdlIGxldCB0aGUgb3RoZXIgd2FybmluZyBhYm91dCByZW5kZXIgcGhhc2UgdXBkYXRlcyBkZWFsIHdpdGggdGhpcyBvbmUuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEoZmliZXIubW9kZSAmIChCbG9ja2luZ01vZGUgfCBDb25jdXJyZW50TW9kZSkpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEluZGV0ZXJtaW5hdGVDb21wb25lbnQgJiYgdGFnICE9PSBIb3N0Um9vdCAmJiB0YWcgIT09IENsYXNzQ29tcG9uZW50ICYmIHRhZyAhPT0gRnVuY3Rpb25Db21wb25lbnQgJiYgdGFnICE9PSBGb3J3YXJkUmVmICYmIHRhZyAhPT0gTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IFNpbXBsZU1lbW9Db21wb25lbnQgJiYgdGFnICE9PSBCbG9jaykge1xuICAgICAgLy8gT25seSB3YXJuIGZvciB1c2VyLWRlZmluZWQgY29tcG9uZW50cywgbm90IGludGVybmFsIG9uZXMgbGlrZSBTdXNwZW5zZS5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFdlIHNob3cgdGhlIHdob2xlIHN0YWNrIGJ1dCBkZWR1cGUgb24gdGhlIHRvcCBjb21wb25lbnQncyBuYW1lIGJlY2F1c2VcbiAgICAvLyB0aGUgcHJvYmxlbWF0aWMgY29kZSBhbG1vc3QgYWx3YXlzIGxpZXMgaW5zaWRlIHRoYXQgY29tcG9uZW50LlxuXG5cbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkgfHwgJ1JlYWN0Q29tcG9uZW50JztcblxuICAgIGlmIChkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50ICE9PSBudWxsKSB7XG4gICAgICBpZiAoZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JOb3RZZXRNb3VudGVkQ29tcG9uZW50LmFkZChjb21wb25lbnROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlkV2FyblN0YXRlVXBkYXRlRm9yTm90WWV0TW91bnRlZENvbXBvbmVudCA9IG5ldyBTZXQoW2NvbXBvbmVudE5hbWVdKTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICB0cnkge1xuICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgZXJyb3IoXCJDYW4ndCBwZXJmb3JtIGEgUmVhY3Qgc3RhdGUgdXBkYXRlIG9uIGEgY29tcG9uZW50IHRoYXQgaGFzbid0IG1vdW50ZWQgeWV0LiBcIiArICdUaGlzIGluZGljYXRlcyB0aGF0IHlvdSBoYXZlIGEgc2lkZS1lZmZlY3QgaW4geW91ciByZW5kZXIgZnVuY3Rpb24gdGhhdCAnICsgJ2FzeW5jaHJvbm91c2x5IGxhdGVyIGNhbGxzIHRyaWVzIHRvIHVwZGF0ZSB0aGUgY29tcG9uZW50LiBNb3ZlIHRoaXMgd29yayB0byAnICsgJ3VzZUVmZmVjdCBpbnN0ZWFkLicpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCA9IG51bGw7XG5cbmZ1bmN0aW9uIHdhcm5BYm91dFVwZGF0ZU9uVW5tb3VudGVkRmliZXJJbkRFVihmaWJlcikge1xuICB7XG4gICAgdmFyIHRhZyA9IGZpYmVyLnRhZztcblxuICAgIGlmICh0YWcgIT09IEhvc3RSb290ICYmIHRhZyAhPT0gQ2xhc3NDb21wb25lbnQgJiYgdGFnICE9PSBGdW5jdGlvbkNvbXBvbmVudCAmJiB0YWcgIT09IEZvcndhcmRSZWYgJiYgdGFnICE9PSBNZW1vQ29tcG9uZW50ICYmIHRhZyAhPT0gU2ltcGxlTWVtb0NvbXBvbmVudCAmJiB0YWcgIT09IEJsb2NrKSB7XG4gICAgICAvLyBPbmx5IHdhcm4gZm9yIHVzZXItZGVmaW5lZCBjb21wb25lbnRzLCBub3QgaW50ZXJuYWwgb25lcyBsaWtlIFN1c3BlbnNlLlxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSWYgdGhlcmUgYXJlIHBlbmRpbmcgcGFzc2l2ZSBlZmZlY3RzIHVubW91bnRzIGZvciB0aGlzIEZpYmVyLFxuICAgIC8vIHdlIGNhbiBhc3N1bWUgdGhhdCB0aGV5IHdvdWxkIGhhdmUgcHJldmVudGVkIHRoaXMgdXBkYXRlLlxuXG5cbiAgICBpZiAoKGZpYmVyLmZsYWdzICYgUGFzc2l2ZVVubW91bnRQZW5kaW5nRGV2KSAhPT0gTm9GbGFncykge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gV2Ugc2hvdyB0aGUgd2hvbGUgc3RhY2sgYnV0IGRlZHVwZSBvbiB0aGUgdG9wIGNvbXBvbmVudCdzIG5hbWUgYmVjYXVzZVxuICAgIC8vIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFsbW9zdCBhbHdheXMgbGllcyBpbnNpZGUgdGhhdCBjb21wb25lbnQuXG5cblxuICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnUmVhY3RDb21wb25lbnQnO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudCAhPT0gbnVsbCkge1xuICAgICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudC5oYXMoY29tcG9uZW50TmFtZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQuYWRkKGNvbXBvbmVudE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSBuZXcgU2V0KFtjb21wb25lbnROYW1lXSk7XG4gICAgfVxuXG4gICAgaWYgKGlzRmx1c2hpbmdQYXNzaXZlRWZmZWN0cykgOyBlbHNlIHtcbiAgICAgIHZhciBwcmV2aW91c0ZpYmVyID0gY3VycmVudDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcblxuICAgICAgICBlcnJvcihcIkNhbid0IHBlcmZvcm0gYSBSZWFjdCBzdGF0ZSB1cGRhdGUgb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC4gVGhpcyBcIiArICdpcyBhIG5vLW9wLCBidXQgaXQgaW5kaWNhdGVzIGEgbWVtb3J5IGxlYWsgaW4geW91ciBhcHBsaWNhdGlvbi4gVG8gJyArICdmaXgsIGNhbmNlbCBhbGwgc3Vic2NyaXB0aW9ucyBhbmQgYXN5bmNocm9ub3VzIHRhc2tzIGluICVzLicsIHRhZyA9PT0gQ2xhc3NDb21wb25lbnQgPyAndGhlIGNvbXBvbmVudFdpbGxVbm1vdW50IG1ldGhvZCcgOiAnYSB1c2VFZmZlY3QgY2xlYW51cCBmdW5jdGlvbicpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKHByZXZpb3VzRmliZXIpIHtcbiAgICAgICAgICBzZXRDdXJyZW50RmliZXIoZmliZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc2V0Q3VycmVudEZpYmVyKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxudmFyIGJlZ2luV29yayQxO1xuXG57XG4gIHZhciBkdW1teUZpYmVyID0gbnVsbDtcblxuICBiZWdpbldvcmskMSA9IGZ1bmN0aW9uIChjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcykge1xuICAgIC8vIElmIGEgY29tcG9uZW50IHRocm93cyBhbiBlcnJvciwgd2UgcmVwbGF5IGl0IGFnYWluIGluIGEgc3luY2hyb25vdXNseVxuICAgIC8vIGRpc3BhdGNoZWQgZXZlbnQsIHNvIHRoYXQgdGhlIGRlYnVnZ2VyIHdpbGwgdHJlYXQgaXQgYXMgYW4gdW5jYXVnaHRcbiAgICAvLyBlcnJvciBTZWUgUmVhY3RFcnJvclV0aWxzIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgIC8vIEJlZm9yZSBlbnRlcmluZyB0aGUgYmVnaW4gcGhhc2UsIGNvcHkgdGhlIHdvcmstaW4tcHJvZ3Jlc3Mgb250byBhIGR1bW15XG4gICAgLy8gZmliZXIuIElmIGJlZ2luV29yayB0aHJvd3MsIHdlJ2xsIHVzZSB0aGlzIHRvIHJlc2V0IHRoZSBzdGF0ZS5cbiAgICB2YXIgb3JpZ2luYWxXb3JrSW5Qcm9ncmVzc0NvcHkgPSBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVihkdW1teUZpYmVyLCB1bml0T2ZXb3JrKTtcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYmVnaW5Xb3JrKGN1cnJlbnQsIHVuaXRPZldvcmssIGxhbmVzKTtcbiAgICB9IGNhdGNoIChvcmlnaW5hbEVycm9yKSB7XG4gICAgICBpZiAob3JpZ2luYWxFcnJvciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3JpZ2luYWxFcnJvciA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9yaWdpbmFsRXJyb3IudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBEb24ndCByZXBsYXkgcHJvbWlzZXMuIFRyZWF0IGV2ZXJ5dGhpbmcgZWxzZSBsaWtlIGFuIGVycm9yLlxuICAgICAgICB0aHJvdyBvcmlnaW5hbEVycm9yO1xuICAgICAgfSAvLyBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIHdpdGggaGFuZGxlRXJyb3I7IGFueSBjaGFuZ2VzIGhlcmUgbXVzdCBoYXZlXG4gICAgICAvLyBjb3JyZXNwb25kaW5nIGNoYW5nZXMgdGhlcmUuXG5cblxuICAgICAgcmVzZXRDb250ZXh0RGVwZW5kZW5jaWVzKCk7XG4gICAgICByZXNldEhvb2tzQWZ0ZXJUaHJvdygpOyAvLyBEb24ndCByZXNldCBjdXJyZW50IGRlYnVnIGZpYmVyLCBzaW5jZSB3ZSdyZSBhYm91dCB0byB3b3JrIG9uIHRoZVxuICAgICAgLy8gc2FtZSBmaWJlciBhZ2Fpbi5cbiAgICAgIC8vIFVud2luZCB0aGUgZmFpbGVkIHN0YWNrIGZyYW1lXG5cbiAgICAgIHVud2luZEludGVycnVwdGVkV29yayh1bml0T2ZXb3JrKTsgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcHJvcGVydGllcyBvZiB0aGUgZmliZXIuXG5cbiAgICAgIGFzc2lnbkZpYmVyUHJvcGVydGllc0luREVWKHVuaXRPZldvcmssIG9yaWdpbmFsV29ya0luUHJvZ3Jlc3NDb3B5KTtcblxuICAgICAgaWYgKCB1bml0T2ZXb3JrLm1vZGUgJiBQcm9maWxlTW9kZSkge1xuICAgICAgICAvLyBSZXNldCB0aGUgcHJvZmlsZXIgdGltZXIuXG4gICAgICAgIHN0YXJ0UHJvZmlsZXJUaW1lcih1bml0T2ZXb3JrKTtcbiAgICAgIH0gLy8gUnVuIGJlZ2luV29yayBhZ2Fpbi5cblxuXG4gICAgICBpbnZva2VHdWFyZGVkQ2FsbGJhY2sobnVsbCwgYmVnaW5Xb3JrLCBudWxsLCBjdXJyZW50LCB1bml0T2ZXb3JrLCBsYW5lcyk7XG5cbiAgICAgIGlmIChoYXNDYXVnaHRFcnJvcigpKSB7XG4gICAgICAgIHZhciByZXBsYXlFcnJvciA9IGNsZWFyQ2F1Z2h0RXJyb3IoKTsgLy8gYGludm9rZUd1YXJkZWRDYWxsYmFja2Agc29tZXRpbWVzIHNldHMgYW4gZXhwYW5kbyBgX3N1cHByZXNzTG9nZ2luZ2AuXG4gICAgICAgIC8vIFJldGhyb3cgdGhpcyBlcnJvciBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBvbmUuXG5cbiAgICAgICAgdGhyb3cgcmVwbGF5RXJyb3I7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBUaGlzIGJyYW5jaCBpcyByZWFjaGFibGUgaWYgdGhlIHJlbmRlciBwaGFzZSBpcyBpbXB1cmUuXG4gICAgICAgIHRocm93IG9yaWdpbmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSBmYWxzZTtcbnZhciBkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQ7XG5cbntcbiAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50ID0gbmV3IFNldCgpO1xufVxuXG5mdW5jdGlvbiB3YXJuQWJvdXRSZW5kZXJQaGFzZVVwZGF0ZXNJbkRFVihmaWJlcikge1xuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIChleGVjdXRpb25Db250ZXh0ICYgUmVuZGVyQ29udGV4dCkgIT09IE5vQ29udGV4dCAmJiAhZ2V0SXNVcGRhdGluZ09wYXF1ZVZhbHVlSW5SZW5kZXJQaGFzZUluREVWKCkpIHtcbiAgICAgIHN3aXRjaCAoZmliZXIudGFnKSB7XG4gICAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FzZSBTaW1wbGVNZW1vQ29tcG9uZW50OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJpbmdDb21wb25lbnROYW1lID0gd29ya0luUHJvZ3Jlc3MgJiYgZ2V0Q29tcG9uZW50TmFtZSh3b3JrSW5Qcm9ncmVzcy50eXBlKSB8fCAnVW5rbm93bic7IC8vIERlZHVwZSBieSB0aGUgcmVuZGVyaW5nIGNvbXBvbmVudCBiZWNhdXNlIGl0J3MgdGhlIG9uZSB0aGF0IG5lZWRzIHRvIGJlIGZpeGVkLlxuXG4gICAgICAgICAgICB2YXIgZGVkdXBlS2V5ID0gcmVuZGVyaW5nQ29tcG9uZW50TmFtZTtcblxuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlckZvckFub3RoZXJDb21wb25lbnQuaGFzKGRlZHVwZUtleSkpIHtcbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXJGb3JBbm90aGVyQ29tcG9uZW50LmFkZChkZWR1cGVLZXkpO1xuICAgICAgICAgICAgICB2YXIgc2V0U3RhdGVDb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSB8fCAnVW5rbm93bic7XG5cbiAgICAgICAgICAgICAgZXJyb3IoJ0Nhbm5vdCB1cGRhdGUgYSBjb21wb25lbnQgKGAlc2ApIHdoaWxlIHJlbmRlcmluZyBhICcgKyAnZGlmZmVyZW50IGNvbXBvbmVudCAoYCVzYCkuIFRvIGxvY2F0ZSB0aGUgYmFkIHNldFN0YXRlKCkgY2FsbCBpbnNpZGUgYCVzYCwgJyArICdmb2xsb3cgdGhlIHN0YWNrIHRyYWNlIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL3JlYWN0anMub3JnL2xpbmsvc2V0c3RhdGUtaW4tcmVuZGVyJywgc2V0U3RhdGVDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lLCByZW5kZXJpbmdDb21wb25lbnROYW1lKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKCFkaWRXYXJuQWJvdXRVcGRhdGVJblJlbmRlcikge1xuICAgICAgICAgICAgICBlcnJvcignQ2Fubm90IHVwZGF0ZSBkdXJpbmcgYW4gZXhpc3Rpbmcgc3RhdGUgdHJhbnNpdGlvbiAoc3VjaCBhcyAnICsgJ3dpdGhpbiBgcmVuZGVyYCkuIFJlbmRlciBtZXRob2RzIHNob3VsZCBiZSBhIHB1cmUgJyArICdmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGUuJyk7XG5cbiAgICAgICAgICAgICAgZGlkV2FybkFib3V0VXBkYXRlSW5SZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIGEgJ3NoYXJlZCcgdmFyaWFibGUgdGhhdCBjaGFuZ2VzIHdoZW4gYWN0KCkgb3BlbnMvY2xvc2VzIGluIHRlc3RzLlxuXG5cbnZhciBJc1RoaXNSZW5kZXJlckFjdGluZyA9IHtcbiAgY3VycmVudDogZmFsc2Vcbn07XG5mdW5jdGlvbiB3YXJuSWZOb3RTY29wZWRXaXRoTWF0Y2hpbmdBY3QoZmliZXIpIHtcbiAge1xuICAgIGlmICggSXNTb21lUmVuZGVyZXJBY3RpbmcuY3VycmVudCA9PT0gdHJ1ZSAmJiBJc1RoaXNSZW5kZXJlckFjdGluZy5jdXJyZW50ICE9PSB0cnVlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoXCJJdCBsb29rcyBsaWtlIHlvdSdyZSB1c2luZyB0aGUgd3JvbmcgYWN0KCkgYXJvdW5kIHlvdXIgdGVzdCBpbnRlcmFjdGlvbnMuXFxuXCIgKyAnQmUgc3VyZSB0byB1c2UgdGhlIG1hdGNoaW5nIHZlcnNpb24gb2YgYWN0KCkgY29ycmVzcG9uZGluZyB0byB5b3VyIHJlbmRlcmVyOlxcblxcbicgKyAnLy8gZm9yIHJlYWN0LWRvbTpcXG4nICsgLy8gQnJlYWsgdXAgaW1wb3J0cyB0byBhdm9pZCBhY2NpZGVudGFsbHkgcGFyc2luZyB0aGVtIGFzIGRlcGVuZGVuY2llcy5cbiAgICAgICAgJ2ltcG9ydCB7YWN0fSBmcicgKyBcIm9tICdyZWFjdC1kb20vdGVzdC11dGlscyc7XFxuXCIgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTtcXG5cXG4nICsgJy8vIGZvciByZWFjdC10ZXN0LXJlbmRlcmVyOlxcbicgKyAvLyBCcmVhayB1cCBpbXBvcnRzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICAnaW1wb3J0IFRlc3RSZW5kZXJlciBmcicgKyBcIm9tIHJlYWN0LXRlc3QtcmVuZGVyZXInO1xcblwiICsgJ2NvbnN0IHthY3R9ID0gVGVzdFJlbmRlcmVyO1xcbicgKyAnLy8gLi4uXFxuJyArICdhY3QoKCkgPT4gLi4uKTsnKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChwcmV2aW91c0ZpYmVyKSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGZpYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdFZmZlY3RzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggKGZpYmVyLm1vZGUgJiBTdHJpY3RNb2RlKSAhPT0gTm9Nb2RlICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICBlcnJvcignQW4gdXBkYXRlIHRvICVzIHJhbiBhbiBlZmZlY3QsIGJ1dCB3YXMgbm90IHdyYXBwZWQgaW4gYWN0KC4uLikuXFxuXFxuJyArICdXaGVuIHRlc3RpbmcsIGNvZGUgdGhhdCBjYXVzZXMgUmVhY3Qgc3RhdGUgdXBkYXRlcyBzaG91bGQgYmUgJyArICd3cmFwcGVkIGludG8gYWN0KC4uLik6XFxuXFxuJyArICdhY3QoKCkgPT4ge1xcbicgKyAnICAvKiBmaXJlIGV2ZW50cyB0aGF0IHVwZGF0ZSBzdGF0ZSAqL1xcbicgKyAnfSk7XFxuJyArICcvKiBhc3NlcnQgb24gdGhlIG91dHB1dCAqL1xcblxcbicgKyBcIlRoaXMgZW5zdXJlcyB0aGF0IHlvdSdyZSB0ZXN0aW5nIHRoZSBiZWhhdmlvciB0aGUgdXNlciB3b3VsZCBzZWUgXCIgKyAnaW4gdGhlIGJyb3dzZXIuJyArICcgTGVhcm4gbW9yZSBhdCBodHRwczovL3JlYWN0anMub3JnL2xpbmsvd3JhcC10ZXN0cy13aXRoLWFjdCcsIGdldENvbXBvbmVudE5hbWUoZmliZXIudHlwZSkpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3YXJuSWZOb3RDdXJyZW50bHlBY3RpbmdVcGRhdGVzSW5ERVYoZmliZXIpIHtcbiAge1xuICAgIGlmICggZXhlY3V0aW9uQ29udGV4dCA9PT0gTm9Db250ZXh0ICYmIElzU29tZVJlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlICYmIElzVGhpc1JlbmRlcmVyQWN0aW5nLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICB2YXIgcHJldmlvdXNGaWJlciA9IGN1cnJlbnQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG5cbiAgICAgICAgZXJyb3IoJ0FuIHVwZGF0ZSB0byAlcyBpbnNpZGUgYSB0ZXN0IHdhcyBub3Qgd3JhcHBlZCBpbiBhY3QoLi4uKS5cXG5cXG4nICsgJ1doZW4gdGVzdGluZywgY29kZSB0aGF0IGNhdXNlcyBSZWFjdCBzdGF0ZSB1cGRhdGVzIHNob3VsZCBiZSAnICsgJ3dyYXBwZWQgaW50byBhY3QoLi4uKTpcXG5cXG4nICsgJ2FjdCgoKSA9PiB7XFxuJyArICcgIC8qIGZpcmUgZXZlbnRzIHRoYXQgdXBkYXRlIHN0YXRlICovXFxuJyArICd9KTtcXG4nICsgJy8qIGFzc2VydCBvbiB0aGUgb3V0cHV0ICovXFxuXFxuJyArIFwiVGhpcyBlbnN1cmVzIHRoYXQgeW91J3JlIHRlc3RpbmcgdGhlIGJlaGF2aW9yIHRoZSB1c2VyIHdvdWxkIHNlZSBcIiArICdpbiB0aGUgYnJvd3Nlci4nICsgJyBMZWFybiBtb3JlIGF0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93cmFwLXRlc3RzLXdpdGgtYWN0JywgZ2V0Q29tcG9uZW50TmFtZShmaWJlci50eXBlKSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgIHNldEN1cnJlbnRGaWJlcihmaWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzZXRDdXJyZW50RmliZXIoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG52YXIgd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luRGV2ID0gd2FybklmTm90Q3VycmVudGx5QWN0aW5nVXBkYXRlc0luREVWOyAvLyBJbiB0ZXN0cywgd2Ugd2FudCB0byBlbmZvcmNlIGEgbW9ja2VkIHNjaGVkdWxlci5cblxudmFyIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gZmFsc2U7IC8vIFRPRE8gQmVmb3JlIHdlIHJlbGVhc2UgY29uY3VycmVudCBtb2RlLCByZXZpc2l0IHRoaXMgYW5kIGRlY2lkZSB3aGV0aGVyIGEgbW9ja2VkXG4vLyBzY2hlZHVsZXIgaXMgdGhlIGFjdHVhbCByZWNvbW1lbmRhdGlvbi4gVGhlIGFsdGVybmF0aXZlIGNvdWxkIGJlIGEgdGVzdGluZyBidWlsZCxcbi8vIGEgbmV3IGxpYiwgb3Igd2hhdGV2ZXI7IHdlIGR1bm5vIGp1c3QgeWV0LiBUaGlzIG1lc3NhZ2UgaXMgZm9yIGVhcmx5IGFkb3B0ZXJzXG4vLyB0byBnZXQgdGhlaXIgdGVzdHMgcmlnaHQuXG5cbmZ1bmN0aW9uIHdhcm5JZlVubW9ja2VkU2NoZWR1bGVyKGZpYmVyKSB7XG4gIHtcbiAgICBpZiAoZGlkV2FybkFib3V0VW5tb2NrZWRTY2hlZHVsZXIgPT09IGZhbHNlICYmIFNjaGVkdWxlci51bnN0YWJsZV9mbHVzaEFsbFdpdGhvdXRBc3NlcnRpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGZpYmVyLm1vZGUgJiBCbG9ja2luZ01vZGUgfHwgZmliZXIubW9kZSAmIENvbmN1cnJlbnRNb2RlKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dFVubW9ja2VkU2NoZWR1bGVyID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignSW4gQ29uY3VycmVudCBvciBTeW5jIG1vZGVzLCB0aGUgXCJzY2hlZHVsZXJcIiBtb2R1bGUgbmVlZHMgdG8gYmUgbW9ja2VkICcgKyAndG8gZ3VhcmFudGVlIGNvbnNpc3RlbnQgYmVoYXZpb3VyIGFjcm9zcyB0ZXN0cyBhbmQgYnJvd3NlcnMuICcgKyAnRm9yIGV4YW1wbGUsIHdpdGggamVzdDogXFxuJyArIC8vIEJyZWFrIHVwIHJlcXVpcmVzIHRvIGF2b2lkIGFjY2lkZW50YWxseSBwYXJzaW5nIHRoZW0gYXMgZGVwZW5kZW5jaWVzLlxuICAgICAgICBcImplc3QubW9jaygnc2NoZWR1bGVyJywgKCkgPT4gcmVxdWlyZVwiICsgXCIoJ3NjaGVkdWxlci91bnN0YWJsZV9tb2NrJykpO1xcblxcblwiICsgJ0ZvciBtb3JlIGluZm8sIHZpc2l0IGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9tb2NrLXNjaGVkdWxlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wdXRlVGhyZWFkSUQocm9vdCwgbGFuZSkge1xuICAvLyBJbnRlcmFjdGlvbiB0aHJlYWRzIGFyZSB1bmlxdWUgcGVyIHJvb3QgYW5kIGV4cGlyYXRpb24gdGltZS5cbiAgLy8gTk9URTogSW50ZW50aW9uYWxseSB1bnNvdW5kIGNhc3QuIEFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCBpdCdzIGEgbnVtYmVyXG4gIC8vIGFuZCBpdCByZXByZXNlbnRzIGEgYmF0Y2ggb2Ygd29yay4gQ291bGQgbWFrZSBhIGhlbHBlciBmdW5jdGlvbiBpbnN0ZWFkLFxuICAvLyBidXQgbWVoIHRoaXMgaXMgZmluZSBmb3Igbm93LlxuICByZXR1cm4gbGFuZSAqIDEwMDAgKyByb290LmludGVyYWN0aW9uVGhyZWFkSUQ7XG59XG5cbmZ1bmN0aW9uIG1hcmtTcGF3bmVkV29yayhsYW5lKSB7XG5cbiAgaWYgKHNwYXduZWRXb3JrRHVyaW5nUmVuZGVyID09PSBudWxsKSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIgPSBbbGFuZV07XG4gIH0gZWxzZSB7XG4gICAgc3Bhd25lZFdvcmtEdXJpbmdSZW5kZXIucHVzaChsYW5lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2hlZHVsZUludGVyYWN0aW9ucyhyb290LCBsYW5lLCBpbnRlcmFjdGlvbnMpIHtcblxuICBpZiAoaW50ZXJhY3Rpb25zLnNpemUgPiAwKSB7XG4gICAgdmFyIHBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwO1xuICAgIHZhciBwZW5kaW5nSW50ZXJhY3Rpb25zID0gcGVuZGluZ0ludGVyYWN0aW9uTWFwLmdldChsYW5lKTtcblxuICAgIGlmIChwZW5kaW5nSW50ZXJhY3Rpb25zICE9IG51bGwpIHtcbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpZiAoIXBlbmRpbmdJbnRlcmFjdGlvbnMuaGFzKGludGVyYWN0aW9uKSkge1xuICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciBwcmV2aW91c2x5IHVuc2NoZWR1bGVkIGludGVyYWN0aW9uLlxuICAgICAgICAgIGludGVyYWN0aW9uLl9fY291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHBlbmRpbmdJbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nSW50ZXJhY3Rpb25NYXAuc2V0KGxhbmUsIG5ldyBTZXQoaW50ZXJhY3Rpb25zKSk7IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG5cbiAgICAgIGludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50Kys7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmUpO1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlUGVuZGluZ0ludGVyYWN0aW9ucyhyb290LCBsYW5lKSB7XG5cbiAgc2NoZWR1bGVJbnRlcmFjdGlvbnMocm9vdCwgbGFuZSwgdHJhY2luZy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50KTtcbn1cblxuZnVuY3Rpb24gc3RhcnRXb3JrT25QZW5kaW5nSW50ZXJhY3Rpb25zKHJvb3QsIGxhbmVzKSB7XG4gIC8vIHdlIGNhbiBhY2N1cmF0ZWx5IGF0dHJpYnV0ZSB0aW1lIHNwZW50IHdvcmtpbmcgb24gaXQsIEFuZCBzbyB0aGF0IGNhc2NhZGluZ1xuICAvLyB3b3JrIHRyaWdnZXJlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSB3aWxsIGJlIGFzc29jaWF0ZWQgd2l0aCBpdC5cblxuXG4gIHZhciBpbnRlcmFjdGlvbnMgPSBuZXcgU2V0KCk7XG4gIHJvb3QucGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgc2NoZWR1bGVkTGFuZSkge1xuICAgIGlmIChpbmNsdWRlc1NvbWVMYW5lKGxhbmVzLCBzY2hlZHVsZWRMYW5lKSkge1xuICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgIHJldHVybiBpbnRlcmFjdGlvbnMuYWRkKGludGVyYWN0aW9uKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7IC8vIFN0b3JlIHRoZSBjdXJyZW50IHNldCBvZiBpbnRlcmFjdGlvbnMgb24gdGhlIEZpYmVyUm9vdCBmb3IgYSBmZXcgcmVhc29uczpcbiAgLy8gV2UgY2FuIHJlLXVzZSBpdCBpbiBob3QgZnVuY3Rpb25zIGxpa2UgcGVyZm9ybUNvbmN1cnJlbnRXb3JrT25Sb290KClcbiAgLy8gd2l0aG91dCBoYXZpbmcgdG8gcmVjYWxjdWxhdGUgaXQuIFdlIHdpbGwgYWxzbyB1c2UgaXQgaW4gY29tbWl0V29yaygpIHRvXG4gIC8vIHBhc3MgdG8gYW55IFByb2ZpbGVyIG9uUmVuZGVyKCkgaG9va3MuIFRoaXMgYWxzbyBwcm92aWRlcyBEZXZUb29scyB3aXRoIGFcbiAgLy8gd2F5IHRvIGFjY2VzcyBpdCB3aGVuIHRoZSBvbkNvbW1pdFJvb3QoKSBob29rIGlzIGNhbGxlZC5cblxuICByb290Lm1lbW9pemVkSW50ZXJhY3Rpb25zID0gaW50ZXJhY3Rpb25zO1xuXG4gIGlmIChpbnRlcmFjdGlvbnMuc2l6ZSA+IDApIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHRyYWNpbmcuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQ7XG5cbiAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgdmFyIHRocmVhZElEID0gY29tcHV0ZVRocmVhZElEKHJvb3QsIGxhbmVzKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN1YnNjcmliZXIgdGhyb3dzLCByZXRocm93IGl0IGluIGEgc2VwYXJhdGUgdGFza1xuICAgICAgICBzY2hlZHVsZUNhbGxiYWNrKEltbWVkaWF0ZVByaW9yaXR5JDEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmlzaFBlbmRpbmdJbnRlcmFjdGlvbnMocm9vdCwgY29tbWl0dGVkTGFuZXMpIHtcblxuICB2YXIgcmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCA9IHJvb3QucGVuZGluZ0xhbmVzO1xuICB2YXIgc3Vic2NyaWJlcjtcblxuICB0cnkge1xuICAgIHN1YnNjcmliZXIgPSB0cmFjaW5nLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgcm9vdC5tZW1vaXplZEludGVyYWN0aW9ucy5zaXplID4gMCkge1xuICAgICAgLy8gRklYTUU6IE1vcmUgdGhhbiBvbmUgbGFuZSBjYW4gZmluaXNoIGluIGEgc2luZ2xlIGNvbW1pdC5cbiAgICAgIHZhciB0aHJlYWRJRCA9IGNvbXB1dGVUaHJlYWRJRChyb290LCBjb21taXR0ZWRMYW5lcyk7XG4gICAgICBzdWJzY3JpYmVyLm9uV29ya1N0b3BwZWQocm9vdC5tZW1vaXplZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgc2NoZWR1bGVDYWxsYmFjayhJbW1lZGlhdGVQcmlvcml0eSQxLCBmdW5jdGlvbiAoKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBDbGVhciBjb21wbGV0ZWQgaW50ZXJhY3Rpb25zIGZyb20gdGhlIHBlbmRpbmcgTWFwLlxuICAgIC8vIFVubGVzcyB0aGUgcmVuZGVyIHdhcyBzdXNwZW5kZWQgb3IgY2FzY2FkaW5nIHdvcmsgd2FzIHNjaGVkdWxlZCxcbiAgICAvLyBJbiB3aGljaCBjYXNl4oCTIGxlYXZlIHBlbmRpbmcgaW50ZXJhY3Rpb25zIHVudGlsIHRoZSBzdWJzZXF1ZW50IHJlbmRlci5cbiAgICB2YXIgcGVuZGluZ0ludGVyYWN0aW9uTWFwID0gcm9vdC5wZW5kaW5nSW50ZXJhY3Rpb25NYXA7XG4gICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmZvckVhY2goZnVuY3Rpb24gKHNjaGVkdWxlZEludGVyYWN0aW9ucywgbGFuZSkge1xuICAgICAgLy8gT25seSBkZWNyZW1lbnQgdGhlIHBlbmRpbmcgaW50ZXJhY3Rpb24gY291bnQgaWYgd2UncmUgZG9uZS5cbiAgICAgIC8vIElmIHRoZXJlJ3Mgc3RpbGwgd29yayBhdCB0aGUgY3VycmVudCBwcmlvcml0eSxcbiAgICAgIC8vIFRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgYXJlIHdhaXRpbmcgZm9yIHN1c3BlbnNlIGRhdGEuXG4gICAgICBpZiAoIWluY2x1ZGVzU29tZUxhbmUocmVtYWluaW5nTGFuZXNBZnRlckNvbW1pdCwgbGFuZSkpIHtcbiAgICAgICAgcGVuZGluZ0ludGVyYWN0aW9uTWFwLmRlbGV0ZShsYW5lKTtcbiAgICAgICAgc2NoZWR1bGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgc3Vic2NyaWJlciB0aHJvd3MsIHJldGhyb3cgaXQgaW4gYSBzZXBhcmF0ZSB0YXNrXG4gICAgICAgICAgICAgIHNjaGVkdWxlQ2FsbGJhY2soSW1tZWRpYXRlUHJpb3JpdHkkMSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59IC8vIGBhY3RgIHRlc3RpbmcgQVBJXG5cbmZ1bmN0aW9uIHNob3VsZEZvcmNlRmx1c2hGYWxsYmFja3NJbkRFVigpIHtcbiAgLy8gTmV2ZXIgZm9yY2UgZmx1c2ggaW4gcHJvZHVjdGlvbi4gVGhpcyBmdW5jdGlvbiBzaG91bGQgZ2V0IHN0cmlwcGVkIG91dC5cbiAgcmV0dXJuICBhY3RpbmdVcGRhdGVzU2NvcGVEZXB0aCA+IDA7XG59XG4vLyBzbyB3ZSBjYW4gdGVsbCBpZiBhbnkgYXN5bmMgYWN0KCkgY2FsbHMgdHJ5IHRvIHJ1biBpbiBwYXJhbGxlbC5cblxuXG52YXIgYWN0aW5nVXBkYXRlc1Njb3BlRGVwdGggPSAwO1xuXG5mdW5jdGlvbiBkZXRhY2hGaWJlckFmdGVyRWZmZWN0cyhmaWJlcikge1xuICBmaWJlci5zaWJsaW5nID0gbnVsbDtcbiAgZmliZXIuc3RhdGVOb2RlID0gbnVsbDtcbn1cblxudmFyIHJlc29sdmVGYW1pbHkgPSBudWxsOyAvLyAkRmxvd0ZpeE1lIEZsb3cgZ2V0cyBjb25mdXNlZCBieSBhIFdlYWtTZXQgZmVhdHVyZSBjaGVjayBiZWxvdy5cblxudmFyIGZhaWxlZEJvdW5kYXJpZXMgPSBudWxsO1xudmFyIHNldFJlZnJlc2hIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIpIHtcbiAge1xuICAgIHJlc29sdmVGYW1pbHkgPSBoYW5kbGVyO1xuICB9XG59O1xuZnVuY3Rpb24gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuIHR5cGU7XG4gICAgfVxuXG4gICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkodHlwZSk7XG5cbiAgICBpZiAoZmFtaWx5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHR5cGUpIHtcbiAgLy8gTm8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMuXG4gIHJldHVybiByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcodHlwZSk7XG59XG5mdW5jdGlvbiByZXNvbHZlRm9yd2FyZFJlZkZvckhvdFJlbG9hZGluZyh0eXBlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHZhciBmYW1pbHkgPSByZXNvbHZlRmFtaWx5KHR5cGUpO1xuXG4gICAgaWYgKGZhbWlseSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSByZWFsIGZvcndhcmRSZWYuIERvbid0IHdhbnQgdG8gY3Jhc2ggZWFybHkuXG4gICAgICBpZiAodHlwZSAhPT0gbnVsbCAmJiB0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHR5cGUucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZvcndhcmRSZWYgaXMgc3BlY2lhbCBiZWNhdXNlIGl0cyByZXNvbHZlZCAudHlwZSBpcyBhbiBvYmplY3QsXG4gICAgICAgIC8vIGJ1dCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ugb25seSBoYXZlIGl0cyBpbm5lciByZW5kZXIgZnVuY3Rpb24gaW4gdGhlIG1hcC5cbiAgICAgICAgLy8gSWYgdGhhdCBpbm5lciByZW5kZXIgZnVuY3Rpb24gaXMgZGlmZmVyZW50LCB3ZSdsbCBidWlsZCBhIG5ldyBmb3J3YXJkUmVmIHR5cGUuXG4gICAgICAgIHZhciBjdXJyZW50UmVuZGVyID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHR5cGUucmVuZGVyKTtcblxuICAgICAgICBpZiAodHlwZS5yZW5kZXIgIT09IGN1cnJlbnRSZW5kZXIpIHtcbiAgICAgICAgICB2YXIgc3ludGhldGljVHlwZSA9IHtcbiAgICAgICAgICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgICAgICAgICAgcmVuZGVyOiBjdXJyZW50UmVuZGVyXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmICh0eXBlLmRpc3BsYXlOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHN5bnRoZXRpY1R5cGUuZGlzcGxheU5hbWUgPSB0eXBlLmRpc3BsYXlOYW1lO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBzeW50aGV0aWNUeXBlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlO1xuICAgIH0gLy8gVXNlIHRoZSBsYXRlc3Qga25vd24gaW1wbGVtZW50YXRpb24uXG5cblxuICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gaXNDb21wYXRpYmxlRmFtaWx5Rm9ySG90UmVsb2FkaW5nKGZpYmVyLCBlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldlR5cGUgPSBmaWJlci5lbGVtZW50VHlwZTtcbiAgICB2YXIgbmV4dFR5cGUgPSBlbGVtZW50LnR5cGU7IC8vIElmIHdlIGdvdCBoZXJlLCB3ZSBrbm93IHR5cGVzIGFyZW4ndCA9PT0gZXF1YWwuXG5cbiAgICB2YXIgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSBmYWxzZTtcbiAgICB2YXIgJCR0eXBlb2ZOZXh0VHlwZSA9IHR5cGVvZiBuZXh0VHlwZSA9PT0gJ29iamVjdCcgJiYgbmV4dFR5cGUgIT09IG51bGwgPyBuZXh0VHlwZS4kJHR5cGVvZiA6IG51bGw7XG5cbiAgICBzd2l0Y2ggKGZpYmVyLnRhZykge1xuICAgICAgY2FzZSBDbGFzc0NvbXBvbmVudDpcbiAgICAgICAge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmV4dFR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIEZ1bmN0aW9uQ29tcG9uZW50OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBuZXh0VHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IHRoZSBpbm5lciB0eXBlIHlldC5cbiAgICAgICAgICAgIC8vIFdlJ3JlIGdvaW5nIHRvIGFzc3VtZSB0aGF0IHRoZSBsYXp5IGlubmVyIHR5cGUgaXMgc3RhYmxlLFxuICAgICAgICAgICAgLy8gYW5kIHNvIGl0IGlzIHN1ZmZpY2llbnQgdG8gYXZvaWQgcmVjb25jaWxpbmcgaXQgYXdheS5cbiAgICAgICAgICAgIC8vIFdlJ3JlIG5vdCBnb2luZyB0byB1bndyYXAgb3IgYWN0dWFsbHkgdXNlIHRoZSBuZXcgbGF6eSB0eXBlLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAge1xuICAgICAgICAgIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIGlmICgkJHR5cGVvZk5leHRUeXBlID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgICAgICAgIG5lZWRzQ29tcGFyZUZhbWlsaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIE1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBpZiBpdCB3YXMgYnV0IGNhbiBubyBsb25nZXIgYmUgc2ltcGxlLFxuICAgICAgICAgICAgLy8gd2Ugc2hvdWxkbid0IHNldCB0aGlzLlxuICAgICAgICAgICAgbmVlZHNDb21wYXJlRmFtaWxpZXMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJCR0eXBlb2ZOZXh0VHlwZSA9PT0gUkVBQ1RfTEFaWV9UWVBFKSB7XG4gICAgICAgICAgICBuZWVkc0NvbXBhcmVGYW1pbGllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gLy8gQ2hlY2sgaWYgYm90aCB0eXBlcyBoYXZlIGEgZmFtaWx5IGFuZCBpdCdzIHRoZSBzYW1lIG9uZS5cblxuXG4gICAgaWYgKG5lZWRzQ29tcGFyZUZhbWlsaWVzKSB7XG4gICAgICAvLyBOb3RlOiBtZW1vKCkgYW5kIGZvcndhcmRSZWYoKSB3ZSdsbCBjb21wYXJlIG91dGVyIHJhdGhlciB0aGFuIGlubmVyIHR5cGUuXG4gICAgICAvLyBUaGlzIG1lYW5zIGJvdGggb2YgdGhlbSBuZWVkIHRvIGJlIHJlZ2lzdGVyZWQgdG8gcHJlc2VydmUgc3RhdGUuXG4gICAgICAvLyBJZiB3ZSB1bndyYXBwZWQgYW5kIGNvbXBhcmVkIHRoZSBpbm5lciB0eXBlcyBmb3Igd3JhcHBlcnMgaW5zdGVhZCxcbiAgICAgIC8vIHRoZW4gd2Ugd291bGQgcmlzayBmYWxzZWx5IHNheWluZyB0d28gc2VwYXJhdGUgbWVtbyhGb28pXG4gICAgICAvLyBjYWxscyBhcmUgZXF1aXZhbGVudCBiZWNhdXNlIHRoZXkgd3JhcCB0aGUgc2FtZSBGb28gZnVuY3Rpb24uXG4gICAgICB2YXIgcHJldkZhbWlseSA9IHJlc29sdmVGYW1pbHkocHJldlR5cGUpO1xuXG4gICAgICBpZiAocHJldkZhbWlseSAhPT0gdW5kZWZpbmVkICYmIHByZXZGYW1pbHkgPT09IHJlc29sdmVGYW1pbHkobmV4dFR5cGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuZnVuY3Rpb24gbWFya0ZhaWxlZEVycm9yQm91bmRhcnlGb3JIb3RSZWxvYWRpbmcoZmliZXIpIHtcbiAge1xuICAgIGlmIChyZXNvbHZlRmFtaWx5ID09PSBudWxsKSB7XG4gICAgICAvLyBIb3QgcmVsb2FkaW5nIGlzIGRpc2FibGVkLlxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgV2Vha1NldCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChmYWlsZWRCb3VuZGFyaWVzID09PSBudWxsKSB7XG4gICAgICBmYWlsZWRCb3VuZGFyaWVzID0gbmV3IFdlYWtTZXQoKTtcbiAgICB9XG5cbiAgICBmYWlsZWRCb3VuZGFyaWVzLmFkZChmaWJlcik7XG4gIH1cbn1cbnZhciBzY2hlZHVsZVJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgdXBkYXRlKSB7XG4gIHtcbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgLy8gSG90IHJlbG9hZGluZyBpcyBkaXNhYmxlZC5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IHVwZGF0ZS5zdGFsZUZhbWlsaWVzLFxuICAgICAgICB1cGRhdGVkRmFtaWxpZXMgPSB1cGRhdGUudXBkYXRlZEZhbWlsaWVzO1xuICAgIGZsdXNoUGFzc2l2ZUVmZmVjdHMoKTtcbiAgICBmbHVzaFN5bmMoZnVuY3Rpb24gKCkge1xuICAgICAgc2NoZWR1bGVGaWJlcnNXaXRoRmFtaWxpZXNSZWN1cnNpdmVseShyb290LmN1cnJlbnQsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfSk7XG4gIH1cbn07XG52YXIgc2NoZWR1bGVSb290ID0gZnVuY3Rpb24gKHJvb3QsIGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChyb290LmNvbnRleHQgIT09IGVtcHR5Q29udGV4dE9iamVjdCkge1xuICAgICAgLy8gU3VwZXIgZWRnZSBjYXNlOiByb290IGhhcyBhIGxlZ2FjeSBfcmVuZGVyU3VidHJlZSBjb250ZXh0XG4gICAgICAvLyBidXQgd2UgZG9uJ3Qga25vdyB0aGUgcGFyZW50Q29tcG9uZW50IHNvIHdlIGNhbid0IHBhc3MgaXQuXG4gICAgICAvLyBKdXN0IGlnbm9yZS4gV2UnbGwgZGVsZXRlIHRoaXMgd2l0aCBfcmVuZGVyU3VidHJlZSBjb2RlIHBhdGggbGF0ZXIuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZmx1c2hQYXNzaXZlRWZmZWN0cygpO1xuICAgIGZsdXNoU3luYyhmdW5jdGlvbiAoKSB7XG4gICAgICB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgcm9vdCwgbnVsbCwgbnVsbCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRmliZXJzV2l0aEZhbWlsaWVzUmVjdXJzaXZlbHkoZmliZXIsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcykge1xuICB7XG4gICAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZSxcbiAgICAgICAgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZUZhbWlseSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCByZXNvbHZlRmFtaWx5IHRvIGJlIHNldCBkdXJpbmcgaG90IHJlbG9hZC4nKTtcbiAgICB9XG5cbiAgICB2YXIgbmVlZHNSZW5kZXIgPSBmYWxzZTtcbiAgICB2YXIgbmVlZHNSZW1vdW50ID0gZmFsc2U7XG5cbiAgICBpZiAoY2FuZGlkYXRlVHlwZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIGZhbWlseSA9IHJlc29sdmVGYW1pbHkoY2FuZGlkYXRlVHlwZSk7XG5cbiAgICAgIGlmIChmYW1pbHkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoc3RhbGVGYW1pbGllcy5oYXMoZmFtaWx5KSkge1xuICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZEZhbWlsaWVzLmhhcyhmYW1pbHkpKSB7XG4gICAgICAgICAgaWYgKHRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICAgICAgICAgIG5lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5lZWRzUmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZmFpbGVkQm91bmRhcmllcyAhPT0gbnVsbCkge1xuICAgICAgaWYgKGZhaWxlZEJvdW5kYXJpZXMuaGFzKGZpYmVyKSB8fCBhbHRlcm5hdGUgIT09IG51bGwgJiYgZmFpbGVkQm91bmRhcmllcy5oYXMoYWx0ZXJuYXRlKSkge1xuICAgICAgICBuZWVkc1JlbW91bnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChuZWVkc1JlbW91bnQpIHtcbiAgICAgIGZpYmVyLl9kZWJ1Z05lZWRzUmVtb3VudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG5lZWRzUmVtb3VudCB8fCBuZWVkc1JlbmRlcikge1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cblxuICAgIGlmIChjaGlsZCAhPT0gbnVsbCAmJiAhbmVlZHNSZW1vdW50KSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KGNoaWxkLCB1cGRhdGVkRmFtaWxpZXMsIHN0YWxlRmFtaWxpZXMpO1xuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBzY2hlZHVsZUZpYmVyc1dpdGhGYW1pbGllc1JlY3Vyc2l2ZWx5KHNpYmxpbmcsIHVwZGF0ZWRGYW1pbGllcywgc3RhbGVGYW1pbGllcyk7XG4gICAgfVxuICB9XG59XG5cbnZhciBmaW5kSG9zdEluc3RhbmNlc0ZvclJlZnJlc2ggPSBmdW5jdGlvbiAocm9vdCwgZmFtaWxpZXMpIHtcbiAge1xuICAgIHZhciBob3N0SW5zdGFuY2VzID0gbmV3IFNldCgpO1xuICAgIHZhciB0eXBlcyA9IG5ldyBTZXQoZmFtaWxpZXMubWFwKGZ1bmN0aW9uIChmYW1pbHkpIHtcbiAgICAgIHJldHVybiBmYW1pbHkuY3VycmVudDtcbiAgICB9KSk7XG4gICAgZmluZEhvc3RJbnN0YW5jZXNGb3JNYXRjaGluZ0ZpYmVyc1JlY3Vyc2l2ZWx5KHJvb3QuY3VycmVudCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIHJldHVybiBob3N0SW5zdGFuY2VzO1xuICB9XG59O1xuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoZmliZXIsIHR5cGVzLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgY2hpbGQgPSBmaWJlci5jaGlsZCxcbiAgICAgICAgc2libGluZyA9IGZpYmVyLnNpYmxpbmcsXG4gICAgICAgIHRhZyA9IGZpYmVyLnRhZyxcbiAgICAgICAgdHlwZSA9IGZpYmVyLnR5cGU7XG4gICAgdmFyIGNhbmRpZGF0ZVR5cGUgPSBudWxsO1xuXG4gICAgc3dpdGNoICh0YWcpIHtcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICBjYXNlIENsYXNzQ29tcG9uZW50OlxuICAgICAgICBjYW5kaWRhdGVUeXBlID0gdHlwZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgY2FuZGlkYXRlVHlwZSA9IHR5cGUucmVuZGVyO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB2YXIgZGlkTWF0Y2ggPSBmYWxzZTtcblxuICAgIGlmIChjYW5kaWRhdGVUeXBlICE9PSBudWxsKSB7XG4gICAgICBpZiAodHlwZXMuaGFzKGNhbmRpZGF0ZVR5cGUpKSB7XG4gICAgICAgIGRpZE1hdGNoID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZGlkTWF0Y2gpIHtcbiAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4gVGhpcyBvbmx5IGRyaWxscyBkb3duIHRvIHRoZSBjbG9zZXN0IGhvc3QgY29tcG9uZW50cy5cbiAgICAgIC8vIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZWFyY2ggZGVlcGVyIGJlY2F1c2UgZm9yIHRoZSBwdXJwb3NlIG9mIGdpdmluZ1xuICAgICAgLy8gdmlzdWFsIGZlZWRiYWNrLCBcImZsYXNoaW5nXCIgb3V0ZXJtb3N0IHBhcmVudCByZWN0YW5nbGVzIGlzIHN1ZmZpY2llbnQuXG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyBubyBtYXRjaCwgbWF5YmUgdGhlcmUgd2lsbCBiZSBvbmUgZnVydGhlciBkb3duIGluIHRoZSBjaGlsZCB0cmVlLlxuICAgICAgaWYgKGNoaWxkICE9PSBudWxsKSB7XG4gICAgICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yTWF0Y2hpbmdGaWJlcnNSZWN1cnNpdmVseShjaGlsZCwgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzaWJsaW5nICE9PSBudWxsKSB7XG4gICAgICBmaW5kSG9zdEluc3RhbmNlc0Zvck1hdGNoaW5nRmliZXJzUmVjdXJzaXZlbHkoc2libGluZywgdHlwZXMsIGhvc3RJbnN0YW5jZXMpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKSB7XG4gIHtcbiAgICB2YXIgZm91bmRIb3N0SW5zdGFuY2VzID0gZmluZENoaWxkSG9zdEluc3RhbmNlc0ZvckZpYmVyU2hhbGxvd2x5KGZpYmVyLCBob3N0SW5zdGFuY2VzKTtcblxuICAgIGlmIChmb3VuZEhvc3RJbnN0YW5jZXMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueSBob3N0IGNoaWxkcmVuLCBmYWxsYmFjayB0byBjbG9zZXN0IGhvc3QgcGFyZW50LlxuXG5cbiAgICB2YXIgbm9kZSA9IGZpYmVyO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIHN3aXRjaCAobm9kZS50YWcpIHtcbiAgICAgICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlKTtcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY2FzZSBIb3N0UG9ydGFsOlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcblxuICAgICAgICBjYXNlIEhvc3RSb290OlxuICAgICAgICAgIGhvc3RJbnN0YW5jZXMuYWRkKG5vZGUuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUucmV0dXJuID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdG8gcmVhY2ggcm9vdCBmaXJzdC4nKTtcbiAgICAgIH1cblxuICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQ2hpbGRIb3N0SW5zdGFuY2VzRm9yRmliZXJTaGFsbG93bHkoZmliZXIsIGhvc3RJbnN0YW5jZXMpIHtcbiAge1xuICAgIHZhciBub2RlID0gZmliZXI7XG4gICAgdmFyIGZvdW5kSG9zdEluc3RhbmNlcyA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChub2RlLnRhZyA9PT0gSG9zdENvbXBvbmVudCkge1xuICAgICAgICAvLyBXZSBnb3QgYSBtYXRjaC5cbiAgICAgICAgZm91bmRIb3N0SW5zdGFuY2VzID0gdHJ1ZTtcbiAgICAgICAgaG9zdEluc3RhbmNlcy5hZGQobm9kZS5zdGF0ZU5vZGUpOyAvLyBUaGVyZSBtYXkgc3RpbGwgYmUgbW9yZSwgc28ga2VlcCBzZWFyY2hpbmcuXG4gICAgICB9IGVsc2UgaWYgKG5vZGUuY2hpbGQgIT09IG51bGwpIHtcbiAgICAgICAgbm9kZS5jaGlsZC5yZXR1cm4gPSBub2RlO1xuICAgICAgICBub2RlID0gbm9kZS5jaGlsZDtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlID09PSBmaWJlcikge1xuICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgfVxuXG4gICAgICB3aGlsZSAobm9kZS5zaWJsaW5nID09PSBudWxsKSB7XG4gICAgICAgIGlmIChub2RlLnJldHVybiA9PT0gbnVsbCB8fCBub2RlLnJldHVybiA9PT0gZmliZXIpIHtcbiAgICAgICAgICByZXR1cm4gZm91bmRIb3N0SW5zdGFuY2VzO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZSA9IG5vZGUucmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBub2RlLnNpYmxpbmcucmV0dXJuID0gbm9kZS5yZXR1cm47XG4gICAgICBub2RlID0gbm9kZS5zaWJsaW5nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIGhhc0JhZE1hcFBvbHlmaWxsO1xuXG57XG4gIGhhc0JhZE1hcFBvbHlmaWxsID0gZmFsc2U7XG5cbiAgdHJ5IHtcbiAgICB2YXIgbm9uRXh0ZW5zaWJsZU9iamVjdCA9IE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSk7XG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3ICovXG5cbiAgICBuZXcgTWFwKFtbbm9uRXh0ZW5zaWJsZU9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtub25FeHRlbnNpYmxlT2JqZWN0XSk7XG4gICAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgKi9cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIFRPRE86IENvbnNpZGVyIHdhcm5pbmcgYWJvdXQgYmFkIHBvbHlmaWxsc1xuICAgIGhhc0JhZE1hcFBvbHlmaWxsID0gdHJ1ZTtcbiAgfVxufVxuXG52YXIgZGVidWdDb3VudGVyID0gMTtcblxuZnVuY3Rpb24gRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gSW5zdGFuY2VcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMua2V5ID0ga2V5O1xuICB0aGlzLmVsZW1lbnRUeXBlID0gbnVsbDtcbiAgdGhpcy50eXBlID0gbnVsbDtcbiAgdGhpcy5zdGF0ZU5vZGUgPSBudWxsOyAvLyBGaWJlclxuXG4gIHRoaXMucmV0dXJuID0gbnVsbDtcbiAgdGhpcy5jaGlsZCA9IG51bGw7XG4gIHRoaXMuc2libGluZyA9IG51bGw7XG4gIHRoaXMuaW5kZXggPSAwO1xuICB0aGlzLnJlZiA9IG51bGw7XG4gIHRoaXMucGVuZGluZ1Byb3BzID0gcGVuZGluZ1Byb3BzO1xuICB0aGlzLm1lbW9pemVkUHJvcHMgPSBudWxsO1xuICB0aGlzLnVwZGF0ZVF1ZXVlID0gbnVsbDtcbiAgdGhpcy5tZW1vaXplZFN0YXRlID0gbnVsbDtcbiAgdGhpcy5kZXBlbmRlbmNpZXMgPSBudWxsO1xuICB0aGlzLm1vZGUgPSBtb2RlOyAvLyBFZmZlY3RzXG5cbiAgdGhpcy5mbGFncyA9IE5vRmxhZ3M7XG4gIHRoaXMubmV4dEVmZmVjdCA9IG51bGw7XG4gIHRoaXMuZmlyc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB0aGlzLmxhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5jaGlsZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5hbHRlcm5hdGUgPSBudWxsO1xuXG4gIHtcbiAgICAvLyBOb3RlOiBUaGUgZm9sbG93aW5nIGlzIGRvbmUgdG8gYXZvaWQgYSB2OCBwZXJmb3JtYW5jZSBjbGlmZi5cbiAgICAvL1xuICAgIC8vIEluaXRpYWxpemluZyB0aGUgZmllbGRzIGJlbG93IHRvIHNtaXMgYW5kIGxhdGVyIHVwZGF0aW5nIHRoZW0gd2l0aFxuICAgIC8vIGRvdWJsZSB2YWx1ZXMgd2lsbCBjYXVzZSBGaWJlcnMgdG8gZW5kIHVwIGhhdmluZyBzZXBhcmF0ZSBzaGFwZXMuXG4gICAgLy8gVGhpcyBiZWhhdmlvci9idWcgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9uKCkuXG4gICAgLy8gRm9ydHVuYXRlbHkgdGhpcyBvbmx5IGltcGFjdHMgREVWIGJ1aWxkcy5cbiAgICAvLyBVbmZvcnR1bmF0ZWx5IGl0IG1ha2VzIFJlYWN0IHVudXNhYmx5IHNsb3cgZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgIC8vIFRvIHdvcmsgYXJvdW5kIHRoaXMsIGluaXRpYWxpemUgdGhlIGZpZWxkcyBiZWxvdyB3aXRoIGRvdWJsZXMuXG4gICAgLy9cbiAgICAvLyBMZWFybiBtb3JlIGFib3V0IHRoaXMgaGVyZTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE0MzY1XG4gICAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9ODUzOFxuICAgIHRoaXMuYWN0dWFsRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMuYWN0dWFsU3RhcnRUaW1lID0gTnVtYmVyLk5hTjtcbiAgICB0aGlzLnNlbGZCYXNlRHVyYXRpb24gPSBOdW1iZXIuTmFOO1xuICAgIHRoaXMudHJlZUJhc2VEdXJhdGlvbiA9IE51bWJlci5OYU47IC8vIEl0J3Mgb2theSB0byByZXBsYWNlIHRoZSBpbml0aWFsIGRvdWJsZXMgd2l0aCBzbWlzIGFmdGVyIGluaXRpYWxpemF0aW9uLlxuICAgIC8vIFRoaXMgd29uJ3QgdHJpZ2dlciB0aGUgcGVyZm9ybWFuY2UgY2xpZmYgbWVudGlvbmVkIGFib3ZlLFxuICAgIC8vIGFuZCBpdCBzaW1wbGlmaWVzIG90aGVyIHByb2ZpbGVyIGNvZGUgKGluY2x1ZGluZyBEZXZUb29scykuXG5cbiAgICB0aGlzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICB0aGlzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIHRoaXMuc2VsZkJhc2VEdXJhdGlvbiA9IDA7XG4gICAgdGhpcy50cmVlQmFzZUR1cmF0aW9uID0gMDtcbiAgfVxuXG4gIHtcbiAgICAvLyBUaGlzIGlzbid0IGRpcmVjdGx5IHVzZWQgYnV0IGlzIGhhbmR5IGZvciBkZWJ1Z2dpbmcgaW50ZXJuYWxzOlxuICAgIHRoaXMuX2RlYnVnSUQgPSBkZWJ1Z0NvdW50ZXIrKztcbiAgICB0aGlzLl9kZWJ1Z1NvdXJjZSA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdPd25lciA9IG51bGw7XG4gICAgdGhpcy5fZGVidWdOZWVkc1JlbW91bnQgPSBmYWxzZTtcbiAgICB0aGlzLl9kZWJ1Z0hvb2tUeXBlcyA9IG51bGw7XG5cbiAgICBpZiAoIWhhc0JhZE1hcFBvbHlmaWxsICYmIHR5cGVvZiBPYmplY3QucHJldmVudEV4dGVuc2lvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh0aGlzKTtcbiAgICB9XG4gIH1cbn0gLy8gVGhpcyBpcyBhIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLCByYXRoZXIgdGhhbiBhIFBPSk8gY29uc3RydWN0b3IsIHN0aWxsXG4vLyBwbGVhc2UgZW5zdXJlIHdlIGRvIHRoZSBmb2xsb3dpbmc6XG4vLyAxKSBOb2JvZHkgc2hvdWxkIGFkZCBhbnkgaW5zdGFuY2UgbWV0aG9kcyBvbiB0aGlzLiBJbnN0YW5jZSBtZXRob2RzIGNhbiBiZVxuLy8gICAgbW9yZSBkaWZmaWN1bHQgdG8gcHJlZGljdCB3aGVuIHRoZXkgZ2V0IG9wdGltaXplZCBhbmQgdGhleSBhcmUgYWxtb3N0XG4vLyAgICBuZXZlciBpbmxpbmVkIHByb3Blcmx5IGluIHN0YXRpYyBjb21waWxlcnMuXG4vLyAyKSBOb2JvZHkgc2hvdWxkIHJlbHkgb24gYGluc3RhbmNlb2YgRmliZXJgIGZvciB0eXBlIHRlc3RpbmcuIFdlIHNob3VsZFxuLy8gICAgYWx3YXlzIGtub3cgd2hlbiBpdCBpcyBhIGZpYmVyLlxuLy8gMykgV2UgbWlnaHQgd2FudCB0byBleHBlcmltZW50IHdpdGggdXNpbmcgbnVtZXJpYyBrZXlzIHNpbmNlIHRoZXkgYXJlIGVhc2llclxuLy8gICAgdG8gb3B0aW1pemUgaW4gYSBub24tSklUIGVudmlyb25tZW50LlxuLy8gNCkgV2UgY2FuIGVhc2lseSBnbyBmcm9tIGEgY29uc3RydWN0b3IgdG8gYSBjcmVhdGVGaWJlciBvYmplY3QgbGl0ZXJhbCBpZiB0aGF0XG4vLyAgICBpcyBmYXN0ZXIuXG4vLyA1KSBJdCBzaG91bGQgYmUgZWFzeSB0byBwb3J0IHRoaXMgdG8gYSBDIHN0cnVjdCBhbmQga2VlcCBhIEMgaW1wbGVtZW50YXRpb25cbi8vICAgIGNvbXBhdGlibGUuXG5cblxudmFyIGNyZWF0ZUZpYmVyID0gZnVuY3Rpb24gKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpIHtcbiAgLy8gJEZsb3dGaXhNZTogdGhlIHNoYXBlcyBhcmUgZXhhY3QgaGVyZSBidXQgRmxvdyBkb2Vzbid0IGxpa2UgY29uc3RydWN0b3JzXG4gIHJldHVybiBuZXcgRmliZXJOb2RlKHRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xufTtcblxuZnVuY3Rpb24gc2hvdWxkQ29uc3RydWN0JDEoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gaXNTaW1wbGVGdW5jdGlvbkNvbXBvbmVudCh0eXBlKSB7XG4gIHJldHVybiB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhc2hvdWxkQ29uc3RydWN0JDEodHlwZSkgJiYgdHlwZS5kZWZhdWx0UHJvcHMgPT09IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIHJlc29sdmVMYXp5Q29tcG9uZW50VGFnKENvbXBvbmVudCkge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzaG91bGRDb25zdHJ1Y3QkMShDb21wb25lbnQpID8gQ2xhc3NDb21wb25lbnQgOiBGdW5jdGlvbkNvbXBvbmVudDtcbiAgfSBlbHNlIGlmIChDb21wb25lbnQgIT09IHVuZGVmaW5lZCAmJiBDb21wb25lbnQgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBDb21wb25lbnQuJCR0eXBlb2Y7XG5cbiAgICBpZiAoJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUpIHtcbiAgICAgIHJldHVybiBGb3J3YXJkUmVmO1xuICAgIH1cblxuICAgIGlmICgkJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFKSB7XG4gICAgICByZXR1cm4gTWVtb0NvbXBvbmVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDtcbn0gLy8gVGhpcyBpcyB1c2VkIHRvIGNyZWF0ZSBhbiBhbHRlcm5hdGUgZmliZXIgdG8gZG8gd29yayBvbi5cblxuZnVuY3Rpb24gY3JlYXRlV29ya0luUHJvZ3Jlc3MoY3VycmVudCwgcGVuZGluZ1Byb3BzKSB7XG4gIHZhciB3b3JrSW5Qcm9ncmVzcyA9IGN1cnJlbnQuYWx0ZXJuYXRlO1xuXG4gIGlmICh3b3JrSW5Qcm9ncmVzcyA9PT0gbnVsbCkge1xuICAgIC8vIFdlIHVzZSBhIGRvdWJsZSBidWZmZXJpbmcgcG9vbGluZyB0ZWNobmlxdWUgYmVjYXVzZSB3ZSBrbm93IHRoYXQgd2UnbGxcbiAgICAvLyBvbmx5IGV2ZXIgbmVlZCBhdCBtb3N0IHR3byB2ZXJzaW9ucyBvZiBhIHRyZWUuIFdlIHBvb2wgdGhlIFwib3RoZXJcIiB1bnVzZWRcbiAgICAvLyBub2RlIHRoYXQgd2UncmUgZnJlZSB0byByZXVzZS4gVGhpcyBpcyBsYXppbHkgY3JlYXRlZCB0byBhdm9pZCBhbGxvY2F0aW5nXG4gICAgLy8gZXh0cmEgb2JqZWN0cyBmb3IgdGhpbmdzIHRoYXQgYXJlIG5ldmVyIHVwZGF0ZWQuIEl0IGFsc28gYWxsb3cgdXMgdG9cbiAgICAvLyByZWNsYWltIHRoZSBleHRyYSBtZW1vcnkgaWYgbmVlZGVkLlxuICAgIHdvcmtJblByb2dyZXNzID0gY3JlYXRlRmliZXIoY3VycmVudC50YWcsIHBlbmRpbmdQcm9wcywgY3VycmVudC5rZXksIGN1cnJlbnQubW9kZSk7XG4gICAgd29ya0luUHJvZ3Jlc3MuZWxlbWVudFR5cGUgPSBjdXJyZW50LmVsZW1lbnRUeXBlO1xuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gY3VycmVudC5zdGF0ZU5vZGU7XG5cbiAgICB7XG4gICAgICAvLyBERVYtb25seSBmaWVsZHNcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z0lEID0gY3VycmVudC5fZGVidWdJRDtcbiAgICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z1NvdXJjZSA9IGN1cnJlbnQuX2RlYnVnU291cmNlO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnT3duZXIgPSBjdXJyZW50Ll9kZWJ1Z093bmVyO1xuICAgICAgd29ya0luUHJvZ3Jlc3MuX2RlYnVnSG9va1R5cGVzID0gY3VycmVudC5fZGVidWdIb29rVHlwZXM7XG4gICAgfVxuXG4gICAgd29ya0luUHJvZ3Jlc3MuYWx0ZXJuYXRlID0gY3VycmVudDtcbiAgICBjdXJyZW50LmFsdGVybmF0ZSA9IHdvcmtJblByb2dyZXNzO1xuICB9IGVsc2Uge1xuICAgIHdvcmtJblByb2dyZXNzLnBlbmRpbmdQcm9wcyA9IHBlbmRpbmdQcm9wczsgLy8gTmVlZGVkIGJlY2F1c2UgQmxvY2tzIHN0b3JlIGRhdGEgb24gdHlwZS5cblxuICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSBjdXJyZW50LnR5cGU7IC8vIFdlIGFscmVhZHkgaGF2ZSBhbiBhbHRlcm5hdGUuXG4gICAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5mbGFncyA9IE5vRmxhZ3M7IC8vIFRoZSBlZmZlY3QgbGlzdCBpcyBubyBsb25nZXIgdmFsaWQuXG5cbiAgICB3b3JrSW5Qcm9ncmVzcy5uZXh0RWZmZWN0ID0gbnVsbDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFzdEVmZmVjdCA9IG51bGw7XG5cbiAgICB7XG4gICAgICAvLyBXZSBpbnRlbnRpb25hbGx5IHJlc2V0LCByYXRoZXIgdGhhbiBjb3B5LCBhY3R1YWxEdXJhdGlvbiAmIGFjdHVhbFN0YXJ0VGltZS5cbiAgICAgIC8vIFRoaXMgcHJldmVudHMgdGltZSBmcm9tIGVuZGxlc3NseSBhY2N1bXVsYXRpbmcgaW4gbmV3IGNvbW1pdHMuXG4gICAgICAvLyBUaGlzIGhhcyB0aGUgZG93bnNpZGUgb2YgcmVzZXR0aW5nIHZhbHVlcyBmb3IgZGlmZmVyZW50IHByaW9yaXR5IHJlbmRlcnMsXG4gICAgICAvLyBCdXQgd29ya3MgZm9yIHlpZWxkaW5nICh0aGUgY29tbW9uIGNhc2UpIGFuZCBzaG91bGQgc3VwcG9ydCByZXN1bWluZy5cbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbER1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLmFjdHVhbFN0YXJ0VGltZSA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gIHdvcmtJblByb2dyZXNzLmxhbmVzID0gY3VycmVudC5sYW5lcztcbiAgd29ya0luUHJvZ3Jlc3MuY2hpbGQgPSBjdXJyZW50LmNoaWxkO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFN0YXRlID0gY3VycmVudC5tZW1vaXplZFN0YXRlO1xuICB3b3JrSW5Qcm9ncmVzcy51cGRhdGVRdWV1ZSA9IGN1cnJlbnQudXBkYXRlUXVldWU7IC8vIENsb25lIHRoZSBkZXBlbmRlbmNpZXMgb2JqZWN0LiBUaGlzIGlzIG11dGF0ZWQgZHVyaW5nIHRoZSByZW5kZXIgcGhhc2UsIHNvXG4gIC8vIGl0IGNhbm5vdCBiZSBzaGFyZWQgd2l0aCB0aGUgY3VycmVudCBmaWJlci5cblxuICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICB3b3JrSW5Qcm9ncmVzcy5kZXBlbmRlbmNpZXMgPSBjdXJyZW50RGVwZW5kZW5jaWVzID09PSBudWxsID8gbnVsbCA6IHtcbiAgICBsYW5lczogY3VycmVudERlcGVuZGVuY2llcy5sYW5lcyxcbiAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gIH07IC8vIFRoZXNlIHdpbGwgYmUgb3ZlcnJpZGRlbiBkdXJpbmcgdGhlIHBhcmVudCdzIHJlY29uY2lsaWF0aW9uXG5cbiAgd29ya0luUHJvZ3Jlc3Muc2libGluZyA9IGN1cnJlbnQuc2libGluZztcbiAgd29ya0luUHJvZ3Jlc3MuaW5kZXggPSBjdXJyZW50LmluZGV4O1xuICB3b3JrSW5Qcm9ncmVzcy5yZWYgPSBjdXJyZW50LnJlZjtcblxuICB7XG4gICAgd29ya0luUHJvZ3Jlc3Muc2VsZkJhc2VEdXJhdGlvbiA9IGN1cnJlbnQuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB3b3JrSW5Qcm9ncmVzcy50cmVlQmFzZUR1cmF0aW9uID0gY3VycmVudC50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAge1xuICAgIHdvcmtJblByb2dyZXNzLl9kZWJ1Z05lZWRzUmVtb3VudCA9IGN1cnJlbnQuX2RlYnVnTmVlZHNSZW1vdW50O1xuXG4gICAgc3dpdGNoICh3b3JrSW5Qcm9ncmVzcy50YWcpIHtcbiAgICAgIGNhc2UgSW5kZXRlcm1pbmF0ZUNvbXBvbmVudDpcbiAgICAgIGNhc2UgRnVuY3Rpb25Db21wb25lbnQ6XG4gICAgICBjYXNlIFNpbXBsZU1lbW9Db21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlRnVuY3Rpb25Gb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgQ2xhc3NDb21wb25lbnQ6XG4gICAgICAgIHdvcmtJblByb2dyZXNzLnR5cGUgPSByZXNvbHZlQ2xhc3NGb3JIb3RSZWxvYWRpbmcoY3VycmVudC50eXBlKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRm9yd2FyZFJlZjpcbiAgICAgICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKGN1cnJlbnQudHlwZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3b3JrSW5Qcm9ncmVzcztcbn0gLy8gVXNlZCB0byByZXVzZSBhIEZpYmVyIGZvciBhIHNlY29uZCBwYXNzLlxuXG5mdW5jdGlvbiByZXNldFdvcmtJblByb2dyZXNzKHdvcmtJblByb2dyZXNzLCByZW5kZXJMYW5lcykge1xuICAvLyBUaGlzIHJlc2V0cyB0aGUgRmliZXIgdG8gd2hhdCBjcmVhdGVGaWJlciBvciBjcmVhdGVXb3JrSW5Qcm9ncmVzcyB3b3VsZFxuICAvLyBoYXZlIHNldCB0aGUgdmFsdWVzIHRvIGJlZm9yZSBkdXJpbmcgdGhlIGZpcnN0IHBhc3MuIElkZWFsbHkgdGhpcyB3b3VsZG4ndFxuICAvLyBiZSBuZWNlc3NhcnkgYnV0IHVuZm9ydHVuYXRlbHkgbWFueSBjb2RlIHBhdGhzIHJlYWRzIGZyb20gdGhlIHdvcmtJblByb2dyZXNzXG4gIC8vIHdoZW4gdGhleSBzaG91bGQgYmUgcmVhZGluZyBmcm9tIGN1cnJlbnQgYW5kIHdyaXRpbmcgdG8gd29ya0luUHJvZ3Jlc3MuXG4gIC8vIFdlIGFzc3VtZSBwZW5kaW5nUHJvcHMsIGluZGV4LCBrZXksIHJlZiwgcmV0dXJuIGFyZSBzdGlsbCB1bnRvdWNoZWQgdG9cbiAgLy8gYXZvaWQgZG9pbmcgYW5vdGhlciByZWNvbmNpbGlhdGlvbi5cbiAgLy8gUmVzZXQgdGhlIGVmZmVjdCB0YWcgYnV0IGtlZXAgYW55IFBsYWNlbWVudCB0YWdzLCBzaW5jZSB0aGF0J3Mgc29tZXRoaW5nXG4gIC8vIHRoYXQgY2hpbGQgZmliZXIgaXMgc2V0dGluZywgbm90IHRoZSByZWNvbmNpbGlhdGlvbi5cbiAgd29ya0luUHJvZ3Jlc3MuZmxhZ3MgJj0gUGxhY2VtZW50OyAvLyBUaGUgZWZmZWN0IGxpc3QgaXMgbm8gbG9uZ2VyIHZhbGlkLlxuXG4gIHdvcmtJblByb2dyZXNzLm5leHRFZmZlY3QgPSBudWxsO1xuICB3b3JrSW5Qcm9ncmVzcy5maXJzdEVmZmVjdCA9IG51bGw7XG4gIHdvcmtJblByb2dyZXNzLmxhc3RFZmZlY3QgPSBudWxsO1xuICB2YXIgY3VycmVudCA9IHdvcmtJblByb2dyZXNzLmFsdGVybmF0ZTtcblxuICBpZiAoY3VycmVudCA9PT0gbnVsbCkge1xuICAgIC8vIFJlc2V0IHRvIGNyZWF0ZUZpYmVyJ3MgaW5pdGlhbCB2YWx1ZXMuXG4gICAgd29ya0luUHJvZ3Jlc3MuY2hpbGRMYW5lcyA9IE5vTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSByZW5kZXJMYW5lcztcbiAgICB3b3JrSW5Qcm9ncmVzcy5jaGlsZCA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRQcm9wcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MubWVtb2l6ZWRTdGF0ZSA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBudWxsO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IG51bGw7XG4gICAgd29ya0luUHJvZ3Jlc3Muc3RhdGVOb2RlID0gbnVsbDtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gMDtcbiAgICAgIHdvcmtJblByb2dyZXNzLnRyZWVCYXNlRHVyYXRpb24gPSAwO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBSZXNldCB0byB0aGUgY2xvbmVkIHZhbHVlcyB0aGF0IGNyZWF0ZVdvcmtJblByb2dyZXNzIHdvdWxkJ3ZlLlxuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkTGFuZXMgPSBjdXJyZW50LmNoaWxkTGFuZXM7XG4gICAgd29ya0luUHJvZ3Jlc3MubGFuZXMgPSBjdXJyZW50LmxhbmVzO1xuICAgIHdvcmtJblByb2dyZXNzLmNoaWxkID0gY3VycmVudC5jaGlsZDtcbiAgICB3b3JrSW5Qcm9ncmVzcy5tZW1vaXplZFByb3BzID0gY3VycmVudC5tZW1vaXplZFByb3BzO1xuICAgIHdvcmtJblByb2dyZXNzLm1lbW9pemVkU3RhdGUgPSBjdXJyZW50Lm1lbW9pemVkU3RhdGU7XG4gICAgd29ya0luUHJvZ3Jlc3MudXBkYXRlUXVldWUgPSBjdXJyZW50LnVwZGF0ZVF1ZXVlOyAvLyBOZWVkZWQgYmVjYXVzZSBCbG9ja3Mgc3RvcmUgZGF0YSBvbiB0eXBlLlxuXG4gICAgd29ya0luUHJvZ3Jlc3MudHlwZSA9IGN1cnJlbnQudHlwZTsgLy8gQ2xvbmUgdGhlIGRlcGVuZGVuY2llcyBvYmplY3QuIFRoaXMgaXMgbXV0YXRlZCBkdXJpbmcgdGhlIHJlbmRlciBwaGFzZSwgc29cbiAgICAvLyBpdCBjYW5ub3QgYmUgc2hhcmVkIHdpdGggdGhlIGN1cnJlbnQgZmliZXIuXG5cbiAgICB2YXIgY3VycmVudERlcGVuZGVuY2llcyA9IGN1cnJlbnQuZGVwZW5kZW5jaWVzO1xuICAgIHdvcmtJblByb2dyZXNzLmRlcGVuZGVuY2llcyA9IGN1cnJlbnREZXBlbmRlbmNpZXMgPT09IG51bGwgPyBudWxsIDoge1xuICAgICAgbGFuZXM6IGN1cnJlbnREZXBlbmRlbmNpZXMubGFuZXMsXG4gICAgICBmaXJzdENvbnRleHQ6IGN1cnJlbnREZXBlbmRlbmNpZXMuZmlyc3RDb250ZXh0XG4gICAgfTtcblxuICAgIHtcbiAgICAgIC8vIE5vdGU6IFdlIGRvbid0IHJlc2V0IHRoZSBhY3R1YWxUaW1lIGNvdW50cy4gSXQncyB1c2VmdWwgdG8gYWNjdW11bGF0ZVxuICAgICAgLy8gYWN0dWFsIHRpbWUgYWNyb3NzIG11bHRpcGxlIHJlbmRlciBwYXNzZXMuXG4gICAgICB3b3JrSW5Qcm9ncmVzcy5zZWxmQmFzZUR1cmF0aW9uID0gY3VycmVudC5zZWxmQmFzZUR1cmF0aW9uO1xuICAgICAgd29ya0luUHJvZ3Jlc3MudHJlZUJhc2VEdXJhdGlvbiA9IGN1cnJlbnQudHJlZUJhc2VEdXJhdGlvbjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd29ya0luUHJvZ3Jlc3M7XG59XG5mdW5jdGlvbiBjcmVhdGVIb3N0Um9vdEZpYmVyKHRhZykge1xuICB2YXIgbW9kZTtcblxuICBpZiAodGFnID09PSBDb25jdXJyZW50Um9vdCkge1xuICAgIG1vZGUgPSBDb25jdXJyZW50TW9kZSB8IEJsb2NraW5nTW9kZSB8IFN0cmljdE1vZGU7XG4gIH0gZWxzZSBpZiAodGFnID09PSBCbG9ja2luZ1Jvb3QpIHtcbiAgICBtb2RlID0gQmxvY2tpbmdNb2RlIHwgU3RyaWN0TW9kZTtcbiAgfSBlbHNlIHtcbiAgICBtb2RlID0gTm9Nb2RlO1xuICB9XG5cbiAgaWYgKCBpc0RldlRvb2xzUHJlc2VudCkge1xuICAgIC8vIEFsd2F5cyBjb2xsZWN0IHByb2ZpbGUgdGltaW5ncyB3aGVuIERldlRvb2xzIGFyZSBwcmVzZW50LlxuICAgIC8vIFRoaXMgZW5hYmxlcyBEZXZUb29scyB0byBzdGFydCBjYXB0dXJpbmcgdGltaW5nIGF0IGFueSBwb2ludOKAk1xuICAgIC8vIFdpdGhvdXQgc29tZSBub2RlcyBpbiB0aGUgdHJlZSBoYXZpbmcgZW1wdHkgYmFzZSB0aW1lcy5cbiAgICBtb2RlIHw9IFByb2ZpbGVNb2RlO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZUZpYmVyKEhvc3RSb290LCBudWxsLCBudWxsLCBtb2RlKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVR5cGVBbmRQcm9wcyh0eXBlLCAvLyBSZWFjdCRFbGVtZW50VHlwZVxua2V5LCBwZW5kaW5nUHJvcHMsIG93bmVyLCBtb2RlLCBsYW5lcykge1xuICB2YXIgZmliZXJUYWcgPSBJbmRldGVybWluYXRlQ29tcG9uZW50OyAvLyBUaGUgcmVzb2x2ZWQgdHlwZSBpcyBzZXQgaWYgd2Uga25vdyB3aGF0IHRoZSBmaW5hbCB0eXBlIHdpbGwgYmUuIEkuZS4gaXQncyBub3QgbGF6eS5cblxuICB2YXIgcmVzb2x2ZWRUeXBlID0gdHlwZTtcblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoc2hvdWxkQ29uc3RydWN0JDEodHlwZSkpIHtcbiAgICAgIGZpYmVyVGFnID0gQ2xhc3NDb21wb25lbnQ7XG5cbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUNsYXNzRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHtcbiAgICAgICAgcmVzb2x2ZWRUeXBlID0gcmVzb2x2ZUZ1bmN0aW9uRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgIGZpYmVyVGFnID0gSG9zdENvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBnZXRUYWc6IHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tRnJhZ21lbnQocGVuZGluZ1Byb3BzLmNoaWxkcmVuLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9ERUJVR19UUkFDSU5HX01PREVfVFlQRTpcbiAgICAgICAgZmliZXJUYWcgPSBNb2RlO1xuICAgICAgICBtb2RlIHw9IERlYnVnVHJhY2luZ01vZGU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgIGZpYmVyVGFnID0gTW9kZTtcbiAgICAgICAgbW9kZSB8PSBTdHJpY3RNb2RlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9GSUxFUl9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tUHJvZmlsZXIocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9UWVBFOlxuICAgICAgICByZXR1cm4gY3JlYXRlRmliZXJGcm9tU3VzcGVuc2UocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgIHJldHVybiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZUxpc3QocGVuZGluZ1Byb3BzLCBtb2RlLCBsYW5lcywga2V5KTtcblxuICAgICAgY2FzZSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbU9mZnNjcmVlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTpcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZpYmVyRnJvbUxlZ2FjeUhpZGRlbihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpO1xuXG4gICAgICBjYXNlIFJFQUNUX1NDT1BFX1RZUEU6XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGUuJCR0eXBlb2YpIHtcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gQ29udGV4dFByb3ZpZGVyO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcblxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgY29uc3VtZXJcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IENvbnRleHRDb25zdW1lcjtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gRm9yd2FyZFJlZjtcblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IHJlc29sdmVGb3J3YXJkUmVmRm9ySG90UmVsb2FkaW5nKHJlc29sdmVkVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgICAgICAgIGZpYmVyVGFnID0gTWVtb0NvbXBvbmVudDtcbiAgICAgICAgICAgICAgICBicmVhayBnZXRUYWc7XG5cbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9MQVpZX1RZUEU6XG4gICAgICAgICAgICAgICAgZmliZXJUYWcgPSBMYXp5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIHJlc29sdmVkVHlwZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWsgZ2V0VGFnO1xuXG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgICAgICAgICBmaWJlclRhZyA9IEJsb2NrO1xuICAgICAgICAgICAgICAgIGJyZWFrIGdldFRhZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgaW5mbyA9ICcnO1xuXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyh0eXBlKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgXCIgKyAnbmFtZWQgaW1wb3J0cy4nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgb3duZXJOYW1lID0gb3duZXIgPyBnZXRDb21wb25lbnROYW1lKG93bmVyLnR5cGUpIDogbnVsbDtcblxuICAgICAgICAgICAgaWYgKG93bmVyTmFtZSkge1xuICAgICAgICAgICAgICBpbmZvICs9ICdcXG5cXG5DaGVjayB0aGUgcmVuZGVyIG1ldGhvZCBvZiBgJyArIG93bmVyTmFtZSArICdgLic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAge1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0aHJvdyBFcnJvciggXCJFbGVtZW50IHR5cGUgaXMgaW52YWxpZDogZXhwZWN0ZWQgYSBzdHJpbmcgKGZvciBidWlsdC1pbiBjb21wb25lbnRzKSBvciBhIGNsYXNzL2Z1bmN0aW9uIChmb3IgY29tcG9zaXRlIGNvbXBvbmVudHMpIGJ1dCBnb3Q6IFwiICsgKHR5cGUgPT0gbnVsbCA/IHR5cGUgOiB0eXBlb2YgdHlwZSkgKyBcIi5cIiArIGluZm8gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gIH1cblxuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihmaWJlclRhZywgcGVuZGluZ1Byb3BzLCBrZXksIG1vZGUpO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IHR5cGU7XG4gIGZpYmVyLnR5cGUgPSByZXNvbHZlZFR5cGU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG5cbiAge1xuICAgIGZpYmVyLl9kZWJ1Z093bmVyID0gb3duZXI7XG4gIH1cblxuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21FbGVtZW50KGVsZW1lbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBvd25lciA9IG51bGw7XG5cbiAge1xuICAgIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gIH1cblxuICB2YXIgdHlwZSA9IGVsZW1lbnQudHlwZTtcbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcGVuZGluZ1Byb3BzID0gZWxlbWVudC5wcm9wcztcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXJGcm9tVHlwZUFuZFByb3BzKHR5cGUsIGtleSwgcGVuZGluZ1Byb3BzLCBvd25lciwgbW9kZSwgbGFuZXMpO1xuXG4gIHtcbiAgICBmaWJlci5fZGVidWdTb3VyY2UgPSBlbGVtZW50Ll9zb3VyY2U7XG4gICAgZmliZXIuX2RlYnVnT3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgfVxuXG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbUZyYWdtZW50KGVsZW1lbnRzLCBtb2RlLCBsYW5lcywga2V5KSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEZyYWdtZW50LCBlbGVtZW50cywga2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21Qcm9maWxlcihwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAge1xuICAgIGlmICh0eXBlb2YgcGVuZGluZ1Byb3BzLmlkICE9PSAnc3RyaW5nJykge1xuICAgICAgZXJyb3IoJ1Byb2ZpbGVyIG11c3Qgc3BlY2lmeSBhbiBcImlkXCIgYXMgYSBwcm9wJyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoUHJvZmlsZXIsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlIHwgUHJvZmlsZU1vZGUpOyAvLyBUT0RPOiBUaGUgUHJvZmlsZXIgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xuICBmaWJlci50eXBlID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcblxuICB7XG4gICAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgICAgZWZmZWN0RHVyYXRpb246IDAsXG4gICAgICBwYXNzaXZlRWZmZWN0RHVyYXRpb246IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGZpYmVyO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21TdXNwZW5zZShwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VDb21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIFN1c3BlbnNlQ29tcG9uZW50IGZpYmVyIHNob3VsZG4ndCBoYXZlIGEgdHlwZS4gSXQgaGFzIGEgdGFnLlxuICAvLyBUaGlzIG5lZWRzIHRvIGJlIGZpeGVkIGluIGdldENvbXBvbmVudE5hbWUgc28gdGhhdCBpdCByZWxpZXMgb24gdGhlIHRhZ1xuICAvLyBpbnN0ZWFkLlxuXG4gIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9UWVBFO1xuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG4gIGZpYmVyLmxhbmVzID0gbGFuZXM7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVN1c3BlbnNlTGlzdChwZW5kaW5nUHJvcHMsIG1vZGUsIGxhbmVzLCBrZXkpIHtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoU3VzcGVuc2VMaXN0Q29tcG9uZW50LCBwZW5kaW5nUHJvcHMsIGtleSwgbW9kZSk7XG5cbiAge1xuICAgIC8vIFRPRE86IFRoZSBTdXNwZW5zZUxpc3RDb21wb25lbnQgZmliZXIgc2hvdWxkbid0IGhhdmUgYSB0eXBlLiBJdCBoYXMgYSB0YWcuXG4gICAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgICAvLyBpbnN0ZWFkLlxuICAgIGZpYmVyLnR5cGUgPSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU7XG4gIH1cblxuICBmaWJlci5lbGVtZW50VHlwZSA9IFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tT2Zmc2NyZWVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihPZmZzY3JlZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIE9mZnNjcmVlbkNvbXBvbmVudCBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX09GRlNDUkVFTl9UWVBFO1xuICB9XG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSBSRUFDVF9PRkZTQ1JFRU5fVFlQRTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tTGVnYWN5SGlkZGVuKHBlbmRpbmdQcm9wcywgbW9kZSwgbGFuZXMsIGtleSkge1xuICB2YXIgZmliZXIgPSBjcmVhdGVGaWJlcihMZWdhY3lIaWRkZW5Db21wb25lbnQsIHBlbmRpbmdQcm9wcywga2V5LCBtb2RlKTsgLy8gVE9ETzogVGhlIExlZ2FjeUhpZGRlbiBmaWJlciBzaG91bGRuJ3QgaGF2ZSBhIHR5cGUuIEl0IGhhcyBhIHRhZy5cbiAgLy8gVGhpcyBuZWVkcyB0byBiZSBmaXhlZCBpbiBnZXRDb21wb25lbnROYW1lIHNvIHRoYXQgaXQgcmVsaWVzIG9uIHRoZSB0YWdcbiAgLy8gaW5zdGVhZC5cblxuICB7XG4gICAgZmliZXIudHlwZSA9IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRTtcbiAgfVxuXG4gIGZpYmVyLmVsZW1lbnRUeXBlID0gUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFO1xuICBmaWJlci5sYW5lcyA9IGxhbmVzO1xuICByZXR1cm4gZmliZXI7XG59XG5mdW5jdGlvbiBjcmVhdGVGaWJlckZyb21UZXh0KGNvbnRlbnQsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RUZXh0LCBjb250ZW50LCBudWxsLCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgcmV0dXJuIGZpYmVyO1xufVxuZnVuY3Rpb24gY3JlYXRlRmliZXJGcm9tSG9zdEluc3RhbmNlRm9yRGVsZXRpb24oKSB7XG4gIHZhciBmaWJlciA9IGNyZWF0ZUZpYmVyKEhvc3RDb21wb25lbnQsIG51bGwsIG51bGwsIE5vTW9kZSk7IC8vIFRPRE86IFRoZXNlIHNob3VsZCBub3QgbmVlZCBhIHR5cGUuXG5cbiAgZmliZXIuZWxlbWVudFR5cGUgPSAnREVMRVRFRCc7XG4gIGZpYmVyLnR5cGUgPSAnREVMRVRFRCc7XG4gIHJldHVybiBmaWJlcjtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZpYmVyRnJvbVBvcnRhbChwb3J0YWwsIG1vZGUsIGxhbmVzKSB7XG4gIHZhciBwZW5kaW5nUHJvcHMgPSBwb3J0YWwuY2hpbGRyZW4gIT09IG51bGwgPyBwb3J0YWwuY2hpbGRyZW4gOiBbXTtcbiAgdmFyIGZpYmVyID0gY3JlYXRlRmliZXIoSG9zdFBvcnRhbCwgcGVuZGluZ1Byb3BzLCBwb3J0YWwua2V5LCBtb2RlKTtcbiAgZmliZXIubGFuZXMgPSBsYW5lcztcbiAgZmliZXIuc3RhdGVOb2RlID0ge1xuICAgIGNvbnRhaW5lckluZm86IHBvcnRhbC5jb250YWluZXJJbmZvLFxuICAgIHBlbmRpbmdDaGlsZHJlbjogbnVsbCxcbiAgICAvLyBVc2VkIGJ5IHBlcnNpc3RlbnQgdXBkYXRlc1xuICAgIGltcGxlbWVudGF0aW9uOiBwb3J0YWwuaW1wbGVtZW50YXRpb25cbiAgfTtcbiAgcmV0dXJuIGZpYmVyO1xufSAvLyBVc2VkIGZvciBzdGFzaGluZyBXSVAgcHJvcGVydGllcyB0byByZXBsYXkgZmFpbGVkIHdvcmsgaW4gREVWLlxuXG5mdW5jdGlvbiBhc3NpZ25GaWJlclByb3BlcnRpZXNJbkRFVih0YXJnZXQsIHNvdXJjZSkge1xuICBpZiAodGFyZ2V0ID09PSBudWxsKSB7XG4gICAgLy8gVGhpcyBGaWJlcidzIGluaXRpYWwgcHJvcGVydGllcyB3aWxsIGFsd2F5cyBiZSBvdmVyd3JpdHRlbi5cbiAgICAvLyBXZSBvbmx5IHVzZSBhIEZpYmVyIHRvIGVuc3VyZSB0aGUgc2FtZSBoaWRkZW4gY2xhc3Mgc28gREVWIGlzbid0IHNsb3cuXG4gICAgdGFyZ2V0ID0gY3JlYXRlRmliZXIoSW5kZXRlcm1pbmF0ZUNvbXBvbmVudCwgbnVsbCwgbnVsbCwgTm9Nb2RlKTtcbiAgfSAvLyBUaGlzIGlzIGludGVudGlvbmFsbHkgd3JpdHRlbiBhcyBhIGxpc3Qgb2YgYWxsIHByb3BlcnRpZXMuXG4gIC8vIFdlIHRyaWVkIHRvIHVzZSBPYmplY3QuYXNzaWduKCkgaW5zdGVhZCBidXQgdGhpcyBpcyBjYWxsZWQgaW5cbiAgLy8gdGhlIGhvdHRlc3QgcGF0aCwgYW5kIE9iamVjdC5hc3NpZ24oKSB3YXMgdG9vIHNsb3c6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTI1MDJcbiAgLy8gVGhpcyBjb2RlIGlzIERFVi1vbmx5IHNvIHNpemUgaXMgbm90IGEgY29uY2Vybi5cblxuXG4gIHRhcmdldC50YWcgPSBzb3VyY2UudGFnO1xuICB0YXJnZXQua2V5ID0gc291cmNlLmtleTtcbiAgdGFyZ2V0LmVsZW1lbnRUeXBlID0gc291cmNlLmVsZW1lbnRUeXBlO1xuICB0YXJnZXQudHlwZSA9IHNvdXJjZS50eXBlO1xuICB0YXJnZXQuc3RhdGVOb2RlID0gc291cmNlLnN0YXRlTm9kZTtcbiAgdGFyZ2V0LnJldHVybiA9IHNvdXJjZS5yZXR1cm47XG4gIHRhcmdldC5jaGlsZCA9IHNvdXJjZS5jaGlsZDtcbiAgdGFyZ2V0LnNpYmxpbmcgPSBzb3VyY2Uuc2libGluZztcbiAgdGFyZ2V0LmluZGV4ID0gc291cmNlLmluZGV4O1xuICB0YXJnZXQucmVmID0gc291cmNlLnJlZjtcbiAgdGFyZ2V0LnBlbmRpbmdQcm9wcyA9IHNvdXJjZS5wZW5kaW5nUHJvcHM7XG4gIHRhcmdldC5tZW1vaXplZFByb3BzID0gc291cmNlLm1lbW9pemVkUHJvcHM7XG4gIHRhcmdldC51cGRhdGVRdWV1ZSA9IHNvdXJjZS51cGRhdGVRdWV1ZTtcbiAgdGFyZ2V0Lm1lbW9pemVkU3RhdGUgPSBzb3VyY2UubWVtb2l6ZWRTdGF0ZTtcbiAgdGFyZ2V0LmRlcGVuZGVuY2llcyA9IHNvdXJjZS5kZXBlbmRlbmNpZXM7XG4gIHRhcmdldC5tb2RlID0gc291cmNlLm1vZGU7XG4gIHRhcmdldC5mbGFncyA9IHNvdXJjZS5mbGFncztcbiAgdGFyZ2V0Lm5leHRFZmZlY3QgPSBzb3VyY2UubmV4dEVmZmVjdDtcbiAgdGFyZ2V0LmZpcnN0RWZmZWN0ID0gc291cmNlLmZpcnN0RWZmZWN0O1xuICB0YXJnZXQubGFzdEVmZmVjdCA9IHNvdXJjZS5sYXN0RWZmZWN0O1xuICB0YXJnZXQubGFuZXMgPSBzb3VyY2UubGFuZXM7XG4gIHRhcmdldC5jaGlsZExhbmVzID0gc291cmNlLmNoaWxkTGFuZXM7XG4gIHRhcmdldC5hbHRlcm5hdGUgPSBzb3VyY2UuYWx0ZXJuYXRlO1xuXG4gIHtcbiAgICB0YXJnZXQuYWN0dWFsRHVyYXRpb24gPSBzb3VyY2UuYWN0dWFsRHVyYXRpb247XG4gICAgdGFyZ2V0LmFjdHVhbFN0YXJ0VGltZSA9IHNvdXJjZS5hY3R1YWxTdGFydFRpbWU7XG4gICAgdGFyZ2V0LnNlbGZCYXNlRHVyYXRpb24gPSBzb3VyY2Uuc2VsZkJhc2VEdXJhdGlvbjtcbiAgICB0YXJnZXQudHJlZUJhc2VEdXJhdGlvbiA9IHNvdXJjZS50cmVlQmFzZUR1cmF0aW9uO1xuICB9XG5cbiAgdGFyZ2V0Ll9kZWJ1Z0lEID0gc291cmNlLl9kZWJ1Z0lEO1xuICB0YXJnZXQuX2RlYnVnU291cmNlID0gc291cmNlLl9kZWJ1Z1NvdXJjZTtcbiAgdGFyZ2V0Ll9kZWJ1Z093bmVyID0gc291cmNlLl9kZWJ1Z093bmVyO1xuICB0YXJnZXQuX2RlYnVnTmVlZHNSZW1vdW50ID0gc291cmNlLl9kZWJ1Z05lZWRzUmVtb3VudDtcbiAgdGFyZ2V0Ll9kZWJ1Z0hvb2tUeXBlcyA9IHNvdXJjZS5fZGVidWdIb29rVHlwZXM7XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cbmZ1bmN0aW9uIEZpYmVyUm9vdE5vZGUoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlKSB7XG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLmNvbnRhaW5lckluZm8gPSBjb250YWluZXJJbmZvO1xuICB0aGlzLnBlbmRpbmdDaGlsZHJlbiA9IG51bGw7XG4gIHRoaXMuY3VycmVudCA9IG51bGw7XG4gIHRoaXMucGluZ0NhY2hlID0gbnVsbDtcbiAgdGhpcy5maW5pc2hlZFdvcmsgPSBudWxsO1xuICB0aGlzLnRpbWVvdXRIYW5kbGUgPSBub1RpbWVvdXQ7XG4gIHRoaXMuY29udGV4dCA9IG51bGw7XG4gIHRoaXMucGVuZGluZ0NvbnRleHQgPSBudWxsO1xuICB0aGlzLmh5ZHJhdGUgPSBoeWRyYXRlO1xuICB0aGlzLmNhbGxiYWNrTm9kZSA9IG51bGw7XG4gIHRoaXMuY2FsbGJhY2tQcmlvcml0eSA9IE5vTGFuZVByaW9yaXR5O1xuICB0aGlzLmV2ZW50VGltZXMgPSBjcmVhdGVMYW5lTWFwKE5vTGFuZXMpO1xuICB0aGlzLmV4cGlyYXRpb25UaW1lcyA9IGNyZWF0ZUxhbmVNYXAoTm9UaW1lc3RhbXApO1xuICB0aGlzLnBlbmRpbmdMYW5lcyA9IE5vTGFuZXM7XG4gIHRoaXMuc3VzcGVuZGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLnBpbmdlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5leHBpcmVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLm11dGFibGVSZWFkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmZpbmlzaGVkTGFuZXMgPSBOb0xhbmVzO1xuICB0aGlzLmVudGFuZ2xlZExhbmVzID0gTm9MYW5lcztcbiAgdGhpcy5lbnRhbmdsZW1lbnRzID0gY3JlYXRlTGFuZU1hcChOb0xhbmVzKTtcblxuICB7XG4gICAgdGhpcy5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICB0aGlzLmludGVyYWN0aW9uVGhyZWFkSUQgPSB0cmFjaW5nLnVuc3RhYmxlX2dldFRocmVhZElEKCk7XG4gICAgdGhpcy5tZW1vaXplZEludGVyYWN0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLnBlbmRpbmdJbnRlcmFjdGlvbk1hcCA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIHtcbiAgICBzd2l0Y2ggKHRhZykge1xuICAgICAgY2FzZSBCbG9ja2luZ1Jvb3Q6XG4gICAgICAgIHRoaXMuX2RlYnVnUm9vdFR5cGUgPSAnY3JlYXRlQmxvY2tpbmdSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBDb25jdXJyZW50Um9vdDpcbiAgICAgICAgdGhpcy5fZGVidWdSb290VHlwZSA9ICdjcmVhdGVSb290KCknO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBMZWdhY3lSb290OlxuICAgICAgICB0aGlzLl9kZWJ1Z1Jvb3RUeXBlID0gJ2NyZWF0ZUxlZ2FjeVJvb3QoKSc7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWJlclJvb3QoY29udGFpbmVySW5mbywgdGFnLCBoeWRyYXRlLCBoeWRyYXRpb25DYWxsYmFja3MpIHtcbiAgdmFyIHJvb3QgPSBuZXcgRmliZXJSb290Tm9kZShjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUpO1xuICAvLyBzdGF0ZU5vZGUgaXMgYW55LlxuXG5cbiAgdmFyIHVuaW5pdGlhbGl6ZWRGaWJlciA9IGNyZWF0ZUhvc3RSb290RmliZXIodGFnKTtcbiAgcm9vdC5jdXJyZW50ID0gdW5pbml0aWFsaXplZEZpYmVyO1xuICB1bmluaXRpYWxpemVkRmliZXIuc3RhdGVOb2RlID0gcm9vdDtcbiAgaW5pdGlhbGl6ZVVwZGF0ZVF1ZXVlKHVuaW5pdGlhbGl6ZWRGaWJlcik7XG4gIHJldHVybiByb290O1xufVxuXG4vLyBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgdmVyc2lvbiB1c2VkIGZvciBzZXJ2ZXIgcmVuZGVyaW5nIG1hdGNoZXMgdGhlIG9uZVxuLy8gdGhhdCBpcyBldmVudHVhbGx5IHJlYWQgZHVyaW5nIGh5ZHJhdGlvbi5cbi8vIElmIHRoZXkgZG9uJ3QgbWF0Y2ggdGhlcmUncyBhIHBvdGVudGlhbCB0ZWFyIGFuZCBhIGZ1bGwgZGVvcHQgcmVuZGVyIGlzIHJlcXVpcmVkLlxuXG5mdW5jdGlvbiByZWdpc3Rlck11dGFibGVTb3VyY2VGb3JIeWRyYXRpb24ocm9vdCwgbXV0YWJsZVNvdXJjZSkge1xuICB2YXIgZ2V0VmVyc2lvbiA9IG11dGFibGVTb3VyY2UuX2dldFZlcnNpb247XG4gIHZhciB2ZXJzaW9uID0gZ2V0VmVyc2lvbihtdXRhYmxlU291cmNlLl9zb3VyY2UpOyAvLyBUT0RPIENsZWFyIHRoaXMgZGF0YSBvbmNlIGFsbCBwZW5kaW5nIGh5ZHJhdGlvbiB3b3JrIGlzIGZpbmlzaGVkLlxuICAvLyBSZXRhaW5pbmcgaXQgZm9yZXZlciBtYXkgaW50ZXJmZXJlIHdpdGggR0MuXG5cbiAgaWYgKHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YSA9PSBudWxsKSB7XG4gICAgcm9vdC5tdXRhYmxlU291cmNlRWFnZXJIeWRyYXRpb25EYXRhID0gW211dGFibGVTb3VyY2UsIHZlcnNpb25dO1xuICB9IGVsc2Uge1xuICAgIHJvb3QubXV0YWJsZVNvdXJjZUVhZ2VySHlkcmF0aW9uRGF0YS5wdXNoKG11dGFibGVTb3VyY2UsIHZlcnNpb24pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVBvcnRhbChjaGlsZHJlbiwgY29udGFpbmVySW5mbywgLy8gVE9ETzogZmlndXJlIG91dCB0aGUgQVBJIGZvciBjcm9zcy1yZW5kZXJlciBpbXBsZW1lbnRhdGlvbi5cbmltcGxlbWVudGF0aW9uKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMyAmJiBhcmd1bWVudHNbM10gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgLy8gVGhpcyB0YWcgYWxsb3cgdXMgdG8gdW5pcXVlbHkgaWRlbnRpZnkgdGhpcyBhcyBhIFJlYWN0IFBvcnRhbFxuICAgICQkdHlwZW9mOiBSRUFDVF9QT1JUQUxfVFlQRSxcbiAgICBrZXk6IGtleSA9PSBudWxsID8gbnVsbCA6ICcnICsga2V5LFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICBjb250YWluZXJJbmZvOiBjb250YWluZXJJbmZvLFxuICAgIGltcGxlbWVudGF0aW9uOiBpbXBsZW1lbnRhdGlvblxuICB9O1xufVxuXG52YXIgZGlkV2FybkFib3V0TmVzdGVkVXBkYXRlcztcbnZhciBkaWRXYXJuQWJvdXRGaW5kTm9kZUluU3RyaWN0TW9kZTtcblxue1xuICBkaWRXYXJuQWJvdXROZXN0ZWRVcGRhdGVzID0gZmFsc2U7XG4gIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlID0ge307XG59XG5cbmZ1bmN0aW9uIGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCkge1xuICBpZiAoIXBhcmVudENvbXBvbmVudCkge1xuICAgIHJldHVybiBlbXB0eUNvbnRleHRPYmplY3Q7XG4gIH1cblxuICB2YXIgZmliZXIgPSBnZXQocGFyZW50Q29tcG9uZW50KTtcbiAgdmFyIHBhcmVudENvbnRleHQgPSBmaW5kQ3VycmVudFVubWFza2VkQ29udGV4dChmaWJlcik7XG5cbiAgaWYgKGZpYmVyLnRhZyA9PT0gQ2xhc3NDb21wb25lbnQpIHtcbiAgICB2YXIgQ29tcG9uZW50ID0gZmliZXIudHlwZTtcblxuICAgIGlmIChpc0NvbnRleHRQcm92aWRlcihDb21wb25lbnQpKSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0NoaWxkQ29udGV4dChmaWJlciwgQ29tcG9uZW50LCBwYXJlbnRDb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50Q29udGV4dDtcbn1cblxuZnVuY3Rpb24gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudCwgbWV0aG9kTmFtZSkge1xuICB7XG4gICAgdmFyIGZpYmVyID0gZ2V0KGNvbXBvbmVudCk7XG5cbiAgICBpZiAoZmliZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBjb21wb25lbnQucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJVbmFibGUgdG8gZmluZCBub2RlIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXCIgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0aHJvdyBFcnJvciggXCJBcmd1bWVudCBhcHBlYXJzIHRvIG5vdCBiZSBhIFJlYWN0Q29tcG9uZW50LiBLZXlzOiBcIiArIE9iamVjdC5rZXlzKGNvbXBvbmVudCkgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgaG9zdEZpYmVyID0gZmluZEN1cnJlbnRIb3N0RmliZXIoZmliZXIpO1xuXG4gICAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKGhvc3RGaWJlci5tb2RlICYgU3RyaWN0TW9kZSkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lKGZpYmVyLnR5cGUpIHx8ICdDb21wb25lbnQnO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdKSB7XG4gICAgICAgIGRpZFdhcm5BYm91dEZpbmROb2RlSW5TdHJpY3RNb2RlW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcbiAgICAgICAgdmFyIHByZXZpb3VzRmliZXIgPSBjdXJyZW50O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2V0Q3VycmVudEZpYmVyKGhvc3RGaWJlcik7XG5cbiAgICAgICAgICBpZiAoZmliZXIubW9kZSAmIFN0cmljdE1vZGUpIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCBpcyBpbnNpZGUgU3RyaWN0TW9kZS4gJyArICdJbnN0ZWFkLCBhZGQgYSByZWYgZGlyZWN0bHkgdG8gdGhlIGVsZW1lbnQgeW91IHdhbnQgdG8gcmVmZXJlbmNlLiAnICsgJ0xlYXJuIG1vcmUgYWJvdXQgdXNpbmcgcmVmcyBzYWZlbHkgaGVyZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3RyaWN0LW1vZGUtZmluZC1ub2RlJywgbWV0aG9kTmFtZSwgbWV0aG9kTmFtZSwgY29tcG9uZW50TmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yKCclcyBpcyBkZXByZWNhdGVkIGluIFN0cmljdE1vZGUuICcgKyAnJXMgd2FzIHBhc3NlZCBhbiBpbnN0YW5jZSBvZiAlcyB3aGljaCByZW5kZXJzIFN0cmljdE1vZGUgY2hpbGRyZW4uICcgKyAnSW5zdGVhZCwgYWRkIGEgcmVmIGRpcmVjdGx5IHRvIHRoZSBlbGVtZW50IHlvdSB3YW50IHRvIHJlZmVyZW5jZS4gJyArICdMZWFybiBtb3JlIGFib3V0IHVzaW5nIHJlZnMgc2FmZWx5IGhlcmU6ICcgKyAnaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3N0cmljdC1tb2RlLWZpbmQtbm9kZScsIG1ldGhvZE5hbWUsIG1ldGhvZE5hbWUsIGNvbXBvbmVudE5hbWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAvLyBJZGVhbGx5IHRoaXMgc2hvdWxkIHJlc2V0IHRvIHByZXZpb3VzIGJ1dCB0aGlzIHNob3VsZG4ndCBiZSBjYWxsZWQgaW5cbiAgICAgICAgICAvLyByZW5kZXIgYW5kIHRoZXJlJ3MgYW5vdGhlciB3YXJuaW5nIGZvciB0aGF0IGFueXdheS5cbiAgICAgICAgICBpZiAocHJldmlvdXNGaWJlcikge1xuICAgICAgICAgICAgc2V0Q3VycmVudEZpYmVyKHByZXZpb3VzRmliZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNldEN1cnJlbnRGaWJlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihjb250YWluZXJJbmZvLCB0YWcsIGh5ZHJhdGUsIGh5ZHJhdGlvbkNhbGxiYWNrcykge1xuICByZXR1cm4gY3JlYXRlRmliZXJSb290KGNvbnRhaW5lckluZm8sIHRhZywgaHlkcmF0ZSk7XG59XG5mdW5jdGlvbiB1cGRhdGVDb250YWluZXIoZWxlbWVudCwgY29udGFpbmVyLCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKSB7XG4gIHtcbiAgICBvblNjaGVkdWxlUm9vdChjb250YWluZXIsIGVsZW1lbnQpO1xuICB9XG5cbiAgdmFyIGN1cnJlbnQkMSA9IGNvbnRhaW5lci5jdXJyZW50O1xuICB2YXIgZXZlbnRUaW1lID0gcmVxdWVzdEV2ZW50VGltZSgpO1xuXG4gIHtcbiAgICAvLyAkRmxvd0V4cGVjdGVkRXJyb3IgLSBqZXN0IGlzbid0IGEgZ2xvYmFsLCBhbmQgaXNuJ3QgcmVjb2duaXplZCBvdXRzaWRlIG9mIHRlc3RzXG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YgamVzdCkge1xuICAgICAgd2FybklmVW5tb2NrZWRTY2hlZHVsZXIoY3VycmVudCQxKTtcbiAgICAgIHdhcm5JZk5vdFNjb3BlZFdpdGhNYXRjaGluZ0FjdChjdXJyZW50JDEpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoY3VycmVudCQxKTtcblxuICB2YXIgY29udGV4dCA9IGdldENvbnRleHRGb3JTdWJ0cmVlKHBhcmVudENvbXBvbmVudCk7XG5cbiAgaWYgKGNvbnRhaW5lci5jb250ZXh0ID09PSBudWxsKSB7XG4gICAgY29udGFpbmVyLmNvbnRleHQgPSBjb250ZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRhaW5lci5wZW5kaW5nQ29udGV4dCA9IGNvbnRleHQ7XG4gIH1cblxuICB7XG4gICAgaWYgKGlzUmVuZGVyaW5nICYmIGN1cnJlbnQgIT09IG51bGwgJiYgIWRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMpIHtcbiAgICAgIGRpZFdhcm5BYm91dE5lc3RlZFVwZGF0ZXMgPSB0cnVlO1xuXG4gICAgICBlcnJvcignUmVuZGVyIG1ldGhvZHMgc2hvdWxkIGJlIGEgcHVyZSBmdW5jdGlvbiBvZiBwcm9wcyBhbmQgc3RhdGU7ICcgKyAndHJpZ2dlcmluZyBuZXN0ZWQgY29tcG9uZW50IHVwZGF0ZXMgZnJvbSByZW5kZXIgaXMgbm90IGFsbG93ZWQuICcgKyAnSWYgbmVjZXNzYXJ5LCB0cmlnZ2VyIG5lc3RlZCB1cGRhdGVzIGluIGNvbXBvbmVudERpZFVwZGF0ZS5cXG5cXG4nICsgJ0NoZWNrIHRoZSByZW5kZXIgbWV0aG9kIG9mICVzLicsIGdldENvbXBvbmVudE5hbWUoY3VycmVudC50eXBlKSB8fCAnVW5rbm93bicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciB1cGRhdGUgPSBjcmVhdGVVcGRhdGUoZXZlbnRUaW1lLCBsYW5lKTsgLy8gQ2F1dGlvbjogUmVhY3QgRGV2VG9vbHMgY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcm9wZXJ0eVxuICAvLyBiZWluZyBjYWxsZWQgXCJlbGVtZW50XCIuXG5cbiAgdXBkYXRlLnBheWxvYWQgPSB7XG4gICAgZWxlbWVudDogZWxlbWVudFxuICB9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrID09PSB1bmRlZmluZWQgPyBudWxsIDogY2FsbGJhY2s7XG5cbiAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEV4cGVjdGVkIHRoZSBsYXN0IG9wdGlvbmFsIGBjYWxsYmFja2AgYXJndW1lbnQgdG8gYmUgYSAnICsgJ2Z1bmN0aW9uLiBJbnN0ZWFkIHJlY2VpdmVkOiAlcy4nLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdXBkYXRlLmNhbGxiYWNrID0gY2FsbGJhY2s7XG4gIH1cblxuICBlbnF1ZXVlVXBkYXRlKGN1cnJlbnQkMSwgdXBkYXRlKTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGN1cnJlbnQkMSwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgcmV0dXJuIGxhbmU7XG59XG5mdW5jdGlvbiBnZXRQdWJsaWNSb290SW5zdGFuY2UoY29udGFpbmVyKSB7XG4gIHZhciBjb250YWluZXJGaWJlciA9IGNvbnRhaW5lci5jdXJyZW50O1xuXG4gIGlmICghY29udGFpbmVyRmliZXIuY2hpbGQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoY29udGFpbmVyRmliZXIuY2hpbGQudGFnKSB7XG4gICAgY2FzZSBIb3N0Q29tcG9uZW50OlxuICAgICAgcmV0dXJuIGdldFB1YmxpY0luc3RhbmNlKGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbnRhaW5lckZpYmVyLmNoaWxkLnN0YXRlTm9kZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKSB7XG4gIHZhciBzdXNwZW5zZVN0YXRlID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICBpZiAoc3VzcGVuc2VTdGF0ZSAhPT0gbnVsbCAmJiBzdXNwZW5zZVN0YXRlLmRlaHlkcmF0ZWQgIT09IG51bGwpIHtcbiAgICBzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSA9IGhpZ2hlclByaW9yaXR5TGFuZShzdXNwZW5zZVN0YXRlLnJldHJ5TGFuZSwgcmV0cnlMYW5lKTtcbiAgfVxufSAvLyBJbmNyZWFzZXMgdGhlIHByaW9yaXR5IG9mIHRoZW5uYWJsZXMgd2hlbiB0aGV5IHJlc29sdmUgd2l0aGluIHRoaXMgYm91bmRhcnkuXG5cblxuZnVuY3Rpb24gbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIHJldHJ5TGFuZSkge1xuICBtYXJrUmV0cnlMYW5lSW1wbChmaWJlciwgcmV0cnlMYW5lKTtcbiAgdmFyIGFsdGVybmF0ZSA9IGZpYmVyLmFsdGVybmF0ZTtcblxuICBpZiAoYWx0ZXJuYXRlKSB7XG4gICAgbWFya1JldHJ5TGFuZUltcGwoYWx0ZXJuYXRlLCByZXRyeUxhbmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gSW5wdXREaXNjcmV0ZUh5ZHJhdGlvbkxhbmU7XG4gIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgbGFuZSwgZXZlbnRUaW1lKTtcbiAgbWFya1JldHJ5TGFuZUlmTm90SHlkcmF0ZWQoZmliZXIsIGxhbmUpO1xufVxuZnVuY3Rpb24gYXR0ZW1wdENvbnRpbnVvdXNIeWRyYXRpb24kMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgYW5kIHRoZXkgc2hvdWxkIG5vdCBzdXNwZW5kIG9uIEkvTyxcbiAgICAvLyBzaW5jZSB5b3UgaGF2ZSB0byB3cmFwIGFueXRoaW5nIHRoYXQgbWlnaHQgc3VzcGVuZCBpblxuICAgIC8vIFN1c3BlbnNlLlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gU2VsZWN0aXZlSHlkcmF0aW9uTGFuZTtcbiAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBsYW5lLCBldmVudFRpbWUpO1xuICBtYXJrUmV0cnlMYW5lSWZOb3RIeWRyYXRlZChmaWJlciwgbGFuZSk7XG59XG5mdW5jdGlvbiBhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMShmaWJlcikge1xuICBpZiAoZmliZXIudGFnICE9PSBTdXNwZW5zZUNvbXBvbmVudCkge1xuICAgIC8vIFdlIGlnbm9yZSBIb3N0Um9vdHMgaGVyZSBiZWNhdXNlIHdlIGNhbid0IGluY3JlYXNlXG4gICAgLy8gdGhlaXIgcHJpb3JpdHkgb3RoZXIgdGhhbiBzeW5jaHJvbm91c2x5IGZsdXNoIGl0LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBldmVudFRpbWUgPSByZXF1ZXN0RXZlbnRUaW1lKCk7XG4gIHZhciBsYW5lID0gcmVxdWVzdFVwZGF0ZUxhbmUoZmliZXIpO1xuICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIGxhbmUsIGV2ZW50VGltZSk7XG4gIG1hcmtSZXRyeUxhbmVJZk5vdEh5ZHJhdGVkKGZpYmVyLCBsYW5lKTtcbn1cbmZ1bmN0aW9uIHJ1bldpdGhQcmlvcml0eSQyKHByaW9yaXR5LCBmbikge1xuXG4gIHRyeSB7XG4gICAgc2V0Q3VycmVudFVwZGF0ZUxhbmVQcmlvcml0eShwcmlvcml0eSk7XG4gICAgcmV0dXJuIGZuKCk7XG4gIH0gZmluYWxseSB7XG4gIH1cbn1cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcldpdGhOb1BvcnRhbHMoZmliZXIpO1xuXG4gIGlmIChob3N0RmliZXIgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChob3N0RmliZXIudGFnID09PSBGdW5kYW1lbnRhbENvbXBvbmVudCkge1xuICAgIHJldHVybiBob3N0RmliZXIuc3RhdGVOb2RlLmluc3RhbmNlO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbnZhciBzaG91bGRTdXNwZW5kSW1wbCA9IGZ1bmN0aW9uIChmaWJlcikge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5mdW5jdGlvbiBzaG91bGRTdXNwZW5kKGZpYmVyKSB7XG4gIHJldHVybiBzaG91bGRTdXNwZW5kSW1wbChmaWJlcik7XG59XG52YXIgb3ZlcnJpZGVIb29rU3RhdGUgPSBudWxsO1xudmFyIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzID0gbnVsbDtcbnZhciBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IG51bGw7XG52YXIgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBudWxsO1xudmFyIHNjaGVkdWxlVXBkYXRlID0gbnVsbDtcbnZhciBzZXRTdXNwZW5zZUhhbmRsZXIgPSBudWxsO1xuXG57XG4gIHZhciBjb3B5V2l0aERlbGV0ZUltcGwgPSBmdW5jdGlvbiAob2JqLCBwYXRoLCBpbmRleCkge1xuICAgIHZhciBrZXkgPSBwYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IHBhdGgubGVuZ3RoKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShrZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVwZGF0ZWQ7XG4gICAgfSAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cblxuICAgIHVwZGF0ZWRba2V5XSA9IGNvcHlXaXRoRGVsZXRlSW1wbChvYmpba2V5XSwgcGF0aCwgaW5kZXggKyAxKTtcbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhEZWxldGUgPSBmdW5jdGlvbiAob2JqLCBwYXRoKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoRGVsZXRlSW1wbChvYmosIHBhdGgsIDApO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFJlbmFtZUltcGwgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCBpbmRleCkge1xuICAgIHZhciBvbGRLZXkgPSBvbGRQYXRoW2luZGV4XTtcbiAgICB2YXIgdXBkYXRlZCA9IEFycmF5LmlzQXJyYXkob2JqKSA/IG9iai5zbGljZSgpIDogX2Fzc2lnbih7fSwgb2JqKTtcblxuICAgIGlmIChpbmRleCArIDEgPT09IG9sZFBhdGgubGVuZ3RoKSB7XG4gICAgICB2YXIgbmV3S2V5ID0gbmV3UGF0aFtpbmRleF07IC8vICRGbG93Rml4TWUgbnVtYmVyIG9yIHN0cmluZyBpcyBmaW5lIGhlcmVcblxuICAgICAgdXBkYXRlZFtuZXdLZXldID0gdXBkYXRlZFtvbGRLZXldO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh1cGRhdGVkKSkge1xuICAgICAgICB1cGRhdGVkLnNwbGljZShvbGRLZXksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHVwZGF0ZWRbb2xkS2V5XTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gJEZsb3dGaXhNZSBudW1iZXIgb3Igc3RyaW5nIGlzIGZpbmUgaGVyZVxuICAgICAgdXBkYXRlZFtvbGRLZXldID0gY29weVdpdGhSZW5hbWVJbXBsKCAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG4gICAgICBvYmpbb2xkS2V5XSwgb2xkUGF0aCwgbmV3UGF0aCwgaW5kZXggKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdXBkYXRlZDtcbiAgfTtcblxuICB2YXIgY29weVdpdGhSZW5hbWUgPSBmdW5jdGlvbiAob2JqLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgaWYgKG9sZFBhdGgubGVuZ3RoICE9PSBuZXdQYXRoLmxlbmd0aCkge1xuICAgICAgd2FybignY29weVdpdGhSZW5hbWUoKSBleHBlY3RzIHBhdGhzIG9mIHRoZSBzYW1lIGxlbmd0aCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3UGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgaWYgKG9sZFBhdGhbaV0gIT09IG5ld1BhdGhbaV0pIHtcbiAgICAgICAgICB3YXJuKCdjb3B5V2l0aFJlbmFtZSgpIGV4cGVjdHMgcGF0aHMgdG8gYmUgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgZGVlcGVzdCBrZXknKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb3B5V2l0aFJlbmFtZUltcGwob2JqLCBvbGRQYXRoLCBuZXdQYXRoLCAwKTtcbiAgfTtcblxuICB2YXIgY29weVdpdGhTZXRJbXBsID0gZnVuY3Rpb24gKG9iaiwgcGF0aCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgaWYgKGluZGV4ID49IHBhdGgubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhdGhbaW5kZXhdO1xuICAgIHZhciB1cGRhdGVkID0gQXJyYXkuaXNBcnJheShvYmopID8gb2JqLnNsaWNlKCkgOiBfYXNzaWduKHt9LCBvYmopOyAvLyAkRmxvd0ZpeE1lIG51bWJlciBvciBzdHJpbmcgaXMgZmluZSBoZXJlXG5cbiAgICB1cGRhdGVkW2tleV0gPSBjb3B5V2l0aFNldEltcGwob2JqW2tleV0sIHBhdGgsIGluZGV4ICsgMSwgdmFsdWUpO1xuICAgIHJldHVybiB1cGRhdGVkO1xuICB9O1xuXG4gIHZhciBjb3B5V2l0aFNldCA9IGZ1bmN0aW9uIChvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIGNvcHlXaXRoU2V0SW1wbChvYmosIHBhdGgsIDAsIHZhbHVlKTtcbiAgfTtcblxuICB2YXIgZmluZEhvb2sgPSBmdW5jdGlvbiAoZmliZXIsIGlkKSB7XG4gICAgLy8gRm9yIG5vdywgdGhlIFwiaWRcIiBvZiBzdGF0ZWZ1bCBob29rcyBpcyBqdXN0IHRoZSBzdGF0ZWZ1bCBob29rIGluZGV4LlxuICAgIC8vIFRoaXMgbWF5IGNoYW5nZSBpbiB0aGUgZnV0dXJlIHdpdGggZS5nLiBuZXN0ZWQgaG9va3MuXG4gICAgdmFyIGN1cnJlbnRIb29rID0gZmliZXIubWVtb2l6ZWRTdGF0ZTtcblxuICAgIHdoaWxlIChjdXJyZW50SG9vayAhPT0gbnVsbCAmJiBpZCA+IDApIHtcbiAgICAgIGN1cnJlbnRIb29rID0gY3VycmVudEhvb2submV4dDtcbiAgICAgIGlkLS07XG4gICAgfVxuXG4gICAgcmV0dXJuIGN1cnJlbnRIb29rO1xuICB9OyAvLyBTdXBwb3J0IERldlRvb2xzIGVkaXRhYmxlIHZhbHVlcyBmb3IgdXNlU3RhdGUgYW5kIHVzZVJlZHVjZXIuXG5cblxuICBvdmVycmlkZUhvb2tTdGF0ZSA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgsIHZhbHVlKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoU2V0KGhvb2subWVtb2l6ZWRTdGF0ZSwgcGF0aCwgdmFsdWUpO1xuICAgICAgaG9vay5tZW1vaXplZFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICBob29rLmJhc2VTdGF0ZSA9IG5ld1N0YXRlOyAvLyBXZSBhcmVuJ3QgYWN0dWFsbHkgYWRkaW5nIGFuIHVwZGF0ZSB0byB0aGUgcXVldWUsXG4gICAgICAvLyBiZWNhdXNlIHRoZXJlIGlzIG5vIHVwZGF0ZSB3ZSBjYW4gYWRkIGZvciB1c2VSZWR1Y2VyIGhvb2tzIHRoYXQgd29uJ3QgdHJpZ2dlciBhbiBlcnJvci5cbiAgICAgIC8vIChUaGVyZSdzIG5vIGFwcHJvcHJpYXRlIGFjdGlvbiB0eXBlIGZvciBEZXZUb29scyBvdmVycmlkZXMuKVxuICAgICAgLy8gQXMgYSByZXN1bHQgdGhvdWdoLCBSZWFjdCB3aWxsIHNlZSB0aGUgc2NoZWR1bGVkIHVwZGF0ZSBhcyBhIG5vb3AgYW5kIGJhaWxvdXQuXG4gICAgICAvLyBTaGFsbG93IGNsb25pbmcgcHJvcHMgd29ya3MgYXMgYSB3b3JrYXJvdW5kIGZvciBub3cgdG8gYnlwYXNzIHRoZSBiYWlsb3V0IGNoZWNrLlxuXG4gICAgICBmaWJlci5tZW1vaXplZFByb3BzID0gX2Fzc2lnbih7fSwgZmliZXIubWVtb2l6ZWRQcm9wcyk7XG4gICAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gICAgfVxuICB9O1xuXG4gIG92ZXJyaWRlSG9va1N0YXRlRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgaWQsIHBhdGgpIHtcbiAgICB2YXIgaG9vayA9IGZpbmRIb29rKGZpYmVyLCBpZCk7XG5cbiAgICBpZiAoaG9vayAhPT0gbnVsbCkge1xuICAgICAgdmFyIG5ld1N0YXRlID0gY29weVdpdGhEZWxldGUoaG9vay5tZW1vaXplZFN0YXRlLCBwYXRoKTtcbiAgICAgIGhvb2subWVtb2l6ZWRTdGF0ZSA9IG5ld1N0YXRlO1xuICAgICAgaG9vay5iYXNlU3RhdGUgPSBuZXdTdGF0ZTsgLy8gV2UgYXJlbid0IGFjdHVhbGx5IGFkZGluZyBhbiB1cGRhdGUgdG8gdGhlIHF1ZXVlLFxuICAgICAgLy8gYmVjYXVzZSB0aGVyZSBpcyBubyB1cGRhdGUgd2UgY2FuIGFkZCBmb3IgdXNlUmVkdWNlciBob29rcyB0aGF0IHdvbid0IHRyaWdnZXIgYW4gZXJyb3IuXG4gICAgICAvLyAoVGhlcmUncyBubyBhcHByb3ByaWF0ZSBhY3Rpb24gdHlwZSBmb3IgRGV2VG9vbHMgb3ZlcnJpZGVzLilcbiAgICAgIC8vIEFzIGEgcmVzdWx0IHRob3VnaCwgUmVhY3Qgd2lsbCBzZWUgdGhlIHNjaGVkdWxlZCB1cGRhdGUgYXMgYSBub29wIGFuZCBiYWlsb3V0LlxuICAgICAgLy8gU2hhbGxvdyBjbG9uaW5nIHByb3BzIHdvcmtzIGFzIGEgd29ya2Fyb3VuZCBmb3Igbm93IHRvIGJ5cGFzcyB0aGUgYmFpbG91dCBjaGVjay5cblxuICAgICAgZmliZXIubWVtb2l6ZWRQcm9wcyA9IF9hc3NpZ24oe30sIGZpYmVyLm1lbW9pemVkUHJvcHMpO1xuICAgICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICAgIH1cbiAgfTtcblxuICBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIGlkLCBvbGRQYXRoLCBuZXdQYXRoKSB7XG4gICAgdmFyIGhvb2sgPSBmaW5kSG9vayhmaWJlciwgaWQpO1xuXG4gICAgaWYgKGhvb2sgIT09IG51bGwpIHtcbiAgICAgIHZhciBuZXdTdGF0ZSA9IGNvcHlXaXRoUmVuYW1lKGhvb2subWVtb2l6ZWRTdGF0ZSwgb2xkUGF0aCwgbmV3UGF0aCk7XG4gICAgICBob29rLm1lbW9pemVkU3RhdGUgPSBuZXdTdGF0ZTtcbiAgICAgIGhvb2suYmFzZVN0YXRlID0gbmV3U3RhdGU7IC8vIFdlIGFyZW4ndCBhY3R1YWxseSBhZGRpbmcgYW4gdXBkYXRlIHRvIHRoZSBxdWV1ZSxcbiAgICAgIC8vIGJlY2F1c2UgdGhlcmUgaXMgbm8gdXBkYXRlIHdlIGNhbiBhZGQgZm9yIHVzZVJlZHVjZXIgaG9va3MgdGhhdCB3b24ndCB0cmlnZ2VyIGFuIGVycm9yLlxuICAgICAgLy8gKFRoZXJlJ3Mgbm8gYXBwcm9wcmlhdGUgYWN0aW9uIHR5cGUgZm9yIERldlRvb2xzIG92ZXJyaWRlcy4pXG4gICAgICAvLyBBcyBhIHJlc3VsdCB0aG91Z2gsIFJlYWN0IHdpbGwgc2VlIHRoZSBzY2hlZHVsZWQgdXBkYXRlIGFzIGEgbm9vcCBhbmQgYmFpbG91dC5cbiAgICAgIC8vIFNoYWxsb3cgY2xvbmluZyBwcm9wcyB3b3JrcyBhcyBhIHdvcmthcm91bmQgZm9yIG5vdyB0byBieXBhc3MgdGhlIGJhaWxvdXQgY2hlY2suXG5cbiAgICAgIGZpYmVyLm1lbW9pemVkUHJvcHMgPSBfYXNzaWduKHt9LCBmaWJlci5tZW1vaXplZFByb3BzKTtcbiAgICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgICB9XG4gIH07IC8vIFN1cHBvcnQgRGV2VG9vbHMgcHJvcHMgZm9yIGZ1bmN0aW9uIGNvbXBvbmVudHMsIGZvcndhcmRSZWYsIG1lbW8sIGhvc3QgY29tcG9uZW50cywgZXRjLlxuXG5cbiAgb3ZlcnJpZGVQcm9wcyA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCwgdmFsdWUpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFNldChmaWJlci5tZW1vaXplZFByb3BzLCBwYXRoLCB2YWx1ZSk7XG5cbiAgICBpZiAoZmliZXIuYWx0ZXJuYXRlKSB7XG4gICAgICBmaWJlci5hbHRlcm5hdGUucGVuZGluZ1Byb3BzID0gZmliZXIucGVuZGluZ1Byb3BzO1xuICAgIH1cblxuICAgIHNjaGVkdWxlVXBkYXRlT25GaWJlcihmaWJlciwgU3luY0xhbmUsIE5vVGltZXN0YW1wKTtcbiAgfTtcblxuICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aCA9IGZ1bmN0aW9uIChmaWJlciwgcGF0aCkge1xuICAgIGZpYmVyLnBlbmRpbmdQcm9wcyA9IGNvcHlXaXRoRGVsZXRlKGZpYmVyLm1lbW9pemVkUHJvcHMsIHBhdGgpO1xuXG4gICAgaWYgKGZpYmVyLmFsdGVybmF0ZSkge1xuICAgICAgZmliZXIuYWx0ZXJuYXRlLnBlbmRpbmdQcm9wcyA9IGZpYmVyLnBlbmRpbmdQcm9wcztcbiAgICB9XG5cbiAgICBzY2hlZHVsZVVwZGF0ZU9uRmliZXIoZmliZXIsIFN5bmNMYW5lLCBOb1RpbWVzdGFtcCk7XG4gIH07XG5cbiAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGggPSBmdW5jdGlvbiAoZmliZXIsIG9sZFBhdGgsIG5ld1BhdGgpIHtcbiAgICBmaWJlci5wZW5kaW5nUHJvcHMgPSBjb3B5V2l0aFJlbmFtZShmaWJlci5tZW1vaXplZFByb3BzLCBvbGRQYXRoLCBuZXdQYXRoKTtcblxuICAgIGlmIChmaWJlci5hbHRlcm5hdGUpIHtcbiAgICAgIGZpYmVyLmFsdGVybmF0ZS5wZW5kaW5nUHJvcHMgPSBmaWJlci5wZW5kaW5nUHJvcHM7XG4gICAgfVxuXG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNjaGVkdWxlVXBkYXRlID0gZnVuY3Rpb24gKGZpYmVyKSB7XG4gICAgc2NoZWR1bGVVcGRhdGVPbkZpYmVyKGZpYmVyLCBTeW5jTGFuZSwgTm9UaW1lc3RhbXApO1xuICB9O1xuXG4gIHNldFN1c3BlbnNlSGFuZGxlciA9IGZ1bmN0aW9uIChuZXdTaG91bGRTdXNwZW5kSW1wbCkge1xuICAgIHNob3VsZFN1c3BlbmRJbXBsID0gbmV3U2hvdWxkU3VzcGVuZEltcGw7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyKGZpYmVyKSB7XG4gIHZhciBob3N0RmliZXIgPSBmaW5kQ3VycmVudEhvc3RGaWJlcihmaWJlcik7XG5cbiAgaWYgKGhvc3RGaWJlciA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGhvc3RGaWJlci5zdGF0ZU5vZGU7XG59XG5cbmZ1bmN0aW9uIGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UoaW5zdGFuY2UpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRGaWJlckZvckRldlRvb2xzKCkge1xuICByZXR1cm4gY3VycmVudDtcbn1cblxuZnVuY3Rpb24gaW5qZWN0SW50b0RldlRvb2xzKGRldlRvb2xzQ29uZmlnKSB7XG4gIHZhciBmaW5kRmliZXJCeUhvc3RJbnN0YW5jZSA9IGRldlRvb2xzQ29uZmlnLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlO1xuICB2YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudERpc3BhdGNoZXI7XG4gIHJldHVybiBpbmplY3RJbnRlcm5hbHMoe1xuICAgIGJ1bmRsZVR5cGU6IGRldlRvb2xzQ29uZmlnLmJ1bmRsZVR5cGUsXG4gICAgdmVyc2lvbjogZGV2VG9vbHNDb25maWcudmVyc2lvbixcbiAgICByZW5kZXJlclBhY2thZ2VOYW1lOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlclBhY2thZ2VOYW1lLFxuICAgIHJlbmRlcmVyQ29uZmlnOiBkZXZUb29sc0NvbmZpZy5yZW5kZXJlckNvbmZpZyxcbiAgICBvdmVycmlkZUhvb2tTdGF0ZTogb3ZlcnJpZGVIb29rU3RhdGUsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVEZWxldGVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZURlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVIb29rU3RhdGVSZW5hbWVQYXRoOiBvdmVycmlkZUhvb2tTdGF0ZVJlbmFtZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wczogb3ZlcnJpZGVQcm9wcyxcbiAgICBvdmVycmlkZVByb3BzRGVsZXRlUGF0aDogb3ZlcnJpZGVQcm9wc0RlbGV0ZVBhdGgsXG4gICAgb3ZlcnJpZGVQcm9wc1JlbmFtZVBhdGg6IG92ZXJyaWRlUHJvcHNSZW5hbWVQYXRoLFxuICAgIHNldFN1c3BlbnNlSGFuZGxlcjogc2V0U3VzcGVuc2VIYW5kbGVyLFxuICAgIHNjaGVkdWxlVXBkYXRlOiBzY2hlZHVsZVVwZGF0ZSxcbiAgICBjdXJyZW50RGlzcGF0Y2hlclJlZjogUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixcbiAgICBmaW5kSG9zdEluc3RhbmNlQnlGaWJlcjogZmluZEhvc3RJbnN0YW5jZUJ5RmliZXIsXG4gICAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlIHx8IGVtcHR5RmluZEZpYmVyQnlIb3N0SW5zdGFuY2UsXG4gICAgLy8gUmVhY3QgUmVmcmVzaFxuICAgIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDogIGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaCAsXG4gICAgc2NoZWR1bGVSZWZyZXNoOiAgc2NoZWR1bGVSZWZyZXNoICxcbiAgICBzY2hlZHVsZVJvb3Q6ICBzY2hlZHVsZVJvb3QgLFxuICAgIHNldFJlZnJlc2hIYW5kbGVyOiAgc2V0UmVmcmVzaEhhbmRsZXIgLFxuICAgIC8vIEVuYWJsZXMgRGV2VG9vbHMgdG8gYXBwZW5kIG93bmVyIHN0YWNrcyB0byBlcnJvciBtZXNzYWdlcyBpbiBERVYgbW9kZS5cbiAgICBnZXRDdXJyZW50RmliZXI6ICBnZXRDdXJyZW50RmliZXJGb3JEZXZUb29scyBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NUm9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgdGhpcy5faW50ZXJuYWxSb290ID0gY3JlYXRlUm9vdEltcGwoY29udGFpbmVyLCBDb25jdXJyZW50Um9vdCwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIFJlYWN0RE9NQmxvY2tpbmdSb290KGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIHRoaXMuX2ludGVybmFsUm9vdCA9IGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKTtcbn1cblxuUmVhY3RET01Sb290LnByb3RvdHlwZS5yZW5kZXIgPSBSZWFjdERPTUJsb2NraW5nUm9vdC5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKGNoaWxkcmVuKSB7XG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuXG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1sxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBkb2VzIG5vdCBzdXBwb3J0IHRoZSBzZWNvbmQgY2FsbGJhY2sgYXJndW1lbnQuICcgKyAnVG8gZXhlY3V0ZSBhIHNpZGUgZWZmZWN0IGFmdGVyIHJlbmRlcmluZywgZGVjbGFyZSBpdCBpbiBhIGNvbXBvbmVudCBib2R5IHdpdGggdXNlRWZmZWN0KCkuJyk7XG4gICAgfVxuXG4gICAgdmFyIGNvbnRhaW5lciA9IHJvb3QuY29udGFpbmVySW5mbztcblxuICAgIGlmIChjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKHJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhlICcgKyAncm9vdCBjb250YWluZXIgd2FzIHJlbW92ZWQgd2l0aG91dCB1c2luZyBSZWFjdC4gVGhpcyBpcyBub3QgJyArICdzdXBwb3J0ZWQgYW5kIHdpbGwgY2F1c2UgZXJyb3JzLiBJbnN0ZWFkLCBjYWxsICcgKyBcInJvb3QudW5tb3VudCgpIHRvIGVtcHR5IGEgcm9vdCdzIGNvbnRhaW5lci5cIik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVDb250YWluZXIoY2hpbGRyZW4sIHJvb3QsIG51bGwsIG51bGwpO1xufTtcblxuUmVhY3RET01Sb290LnByb3RvdHlwZS51bm1vdW50ID0gUmVhY3RET01CbG9ja2luZ1Jvb3QucHJvdG90eXBlLnVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gIHtcbiAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ3VubW91bnQoLi4uKTogZG9lcyBub3Qgc3VwcG9ydCBhIGNhbGxiYWNrIGFyZ3VtZW50LiAnICsgJ1RvIGV4ZWN1dGUgYSBzaWRlIGVmZmVjdCBhZnRlciByZW5kZXJpbmcsIGRlY2xhcmUgaXQgaW4gYSBjb21wb25lbnQgYm9keSB3aXRoIHVzZUVmZmVjdCgpLicpO1xuICAgIH1cbiAgfVxuXG4gIHZhciByb290ID0gdGhpcy5faW50ZXJuYWxSb290O1xuICB2YXIgY29udGFpbmVyID0gcm9vdC5jb250YWluZXJJbmZvO1xuICB1cGRhdGVDb250YWluZXIobnVsbCwgcm9vdCwgbnVsbCwgZnVuY3Rpb24gKCkge1xuICAgIHVubWFya0NvbnRhaW5lckFzUm9vdChjb250YWluZXIpO1xuICB9KTtcbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVJvb3RJbXBsKGNvbnRhaW5lciwgdGFnLCBvcHRpb25zKSB7XG4gIC8vIFRhZyBpcyBlaXRoZXIgTGVnYWN5Um9vdCBvciBDb25jdXJyZW50IFJvb3RcbiAgdmFyIGh5ZHJhdGUgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRlID09PSB0cnVlO1xuICB2YXIgaHlkcmF0aW9uQ2FsbGJhY2tzID0gb3B0aW9ucyAhPSBudWxsICYmIG9wdGlvbnMuaHlkcmF0aW9uT3B0aW9ucyB8fCBudWxsO1xuICB2YXIgbXV0YWJsZVNvdXJjZXMgPSBvcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zICE9IG51bGwgJiYgb3B0aW9ucy5oeWRyYXRpb25PcHRpb25zLm11dGFibGVTb3VyY2VzIHx8IG51bGw7XG4gIHZhciByb290ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgdGFnLCBoeWRyYXRlKTtcbiAgbWFya0NvbnRhaW5lckFzUm9vdChyb290LmN1cnJlbnQsIGNvbnRhaW5lcik7XG4gIHZhciBjb250YWluZXJOb2RlVHlwZSA9IGNvbnRhaW5lci5ub2RlVHlwZTtcblxuICB7XG4gICAgdmFyIHJvb3RDb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyLm5vZGVUeXBlID09PSBDT01NRU5UX05PREUgPyBjb250YWluZXIucGFyZW50Tm9kZSA6IGNvbnRhaW5lcjtcbiAgICBsaXN0ZW5Ub0FsbFN1cHBvcnRlZEV2ZW50cyhyb290Q29udGFpbmVyRWxlbWVudCk7XG4gIH1cblxuICBpZiAobXV0YWJsZVNvdXJjZXMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG11dGFibGVTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbXV0YWJsZVNvdXJjZSA9IG11dGFibGVTb3VyY2VzW2ldO1xuICAgICAgcmVnaXN0ZXJNdXRhYmxlU291cmNlRm9ySHlkcmF0aW9uKHJvb3QsIG11dGFibGVTb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb290O1xufVxuZnVuY3Rpb24gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBSZWFjdERPTUJsb2NraW5nUm9vdChjb250YWluZXIsIExlZ2FjeVJvb3QsIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gaXNWYWxpZENvbnRhaW5lcihub2RlKSB7XG4gIHJldHVybiAhIShub2RlICYmIChub2RlLm5vZGVUeXBlID09PSBFTEVNRU5UX05PREUgfHwgbm9kZS5ub2RlVHlwZSA9PT0gRE9DVU1FTlRfTk9ERSB8fCBub2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IENPTU1FTlRfTk9ERSAmJiBub2RlLm5vZGVWYWx1ZSA9PT0gJyByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAnKSk7XG59XG5cbnZhciBSZWFjdEN1cnJlbnRPd25lciQzID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50T3duZXI7XG52YXIgdG9wTGV2ZWxVcGRhdGVXYXJuaW5ncztcbnZhciB3YXJuZWRBYm91dEh5ZHJhdGVBUEkgPSBmYWxzZTtcblxue1xuICB0b3BMZXZlbFVwZGF0ZVdhcm5pbmdzID0gZnVuY3Rpb24gKGNvbnRhaW5lcikge1xuICAgIGlmIChjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciAmJiBjb250YWluZXIubm9kZVR5cGUgIT09IENPTU1FTlRfTk9ERSkge1xuICAgICAgdmFyIGhvc3RJbnN0YW5jZSA9IGZpbmRIb3N0SW5zdGFuY2VXaXRoTm9Qb3J0YWxzKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyLl9pbnRlcm5hbFJvb3QuY3VycmVudCk7XG5cbiAgICAgIGlmIChob3N0SW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKGhvc3RJbnN0YW5jZS5wYXJlbnROb2RlICE9PSBjb250YWluZXIpIHtcbiAgICAgICAgICBlcnJvcigncmVuZGVyKC4uLik6IEl0IGxvb2tzIGxpa2UgdGhlIFJlYWN0LXJlbmRlcmVkIGNvbnRlbnQgb2YgdGhpcyAnICsgJ2NvbnRhaW5lciB3YXMgcmVtb3ZlZCB3aXRob3V0IHVzaW5nIFJlYWN0LiBUaGlzIGlzIG5vdCAnICsgJ3N1cHBvcnRlZCBhbmQgd2lsbCBjYXVzZSBlcnJvcnMuIEluc3RlYWQsIGNhbGwgJyArICdSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlIHRvIGVtcHR5IGEgY29udGFpbmVyLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGlzUm9vdFJlbmRlcmVkQnlTb21lUmVhY3QgPSAhIWNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyO1xuICAgIHZhciByb290RWwgPSBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKTtcbiAgICB2YXIgaGFzTm9uUm9vdFJlYWN0Q2hpbGQgPSAhIShyb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpKTtcblxuICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCAmJiAhaXNSb290UmVuZGVyZWRCeVNvbWVSZWFjdCkge1xuICAgICAgZXJyb3IoJ3JlbmRlciguLi4pOiBSZXBsYWNpbmcgUmVhY3QtcmVuZGVyZWQgY2hpbGRyZW4gd2l0aCBhIG5ldyByb290ICcgKyAnY29tcG9uZW50LiBJZiB5b3UgaW50ZW5kZWQgdG8gdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGlzIG5vZGUsICcgKyAneW91IHNob3VsZCBpbnN0ZWFkIGhhdmUgdGhlIGV4aXN0aW5nIGNoaWxkcmVuIHVwZGF0ZSB0aGVpciBzdGF0ZSAnICsgJ2FuZCByZW5kZXIgdGhlIG5ldyBjb21wb25lbnRzIGluc3RlYWQgb2YgY2FsbGluZyBSZWFjdERPTS5yZW5kZXIuJyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIGNvbnRhaW5lci50YWdOYW1lICYmIGNvbnRhaW5lci50YWdOYW1lLnRvVXBwZXJDYXNlKCkgPT09ICdCT0RZJykge1xuICAgICAgZXJyb3IoJ3JlbmRlcigpOiBSZW5kZXJpbmcgY29tcG9uZW50cyBkaXJlY3RseSBpbnRvIGRvY3VtZW50LmJvZHkgaXMgJyArICdkaXNjb3VyYWdlZCwgc2luY2UgaXRzIGNoaWxkcmVuIGFyZSBvZnRlbiBtYW5pcHVsYXRlZCBieSB0aGlyZC1wYXJ0eSAnICsgJ3NjcmlwdHMgYW5kIGJyb3dzZXIgZXh0ZW5zaW9ucy4gVGhpcyBtYXkgbGVhZCB0byBzdWJ0bGUgJyArICdyZWNvbmNpbGlhdGlvbiBpc3N1ZXMuIFRyeSByZW5kZXJpbmcgaW50byBhIGNvbnRhaW5lciBlbGVtZW50IGNyZWF0ZWQgJyArICdmb3IgeW91ciBhcHAuJyk7XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBnZXRSZWFjdFJvb3RFbGVtZW50SW5Db250YWluZXIoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBET0NVTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5kb2N1bWVudEVsZW1lbnQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNvbnRhaW5lci5maXJzdENoaWxkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpIHtcbiAgdmFyIHJvb3RFbGVtZW50ID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG4gIHJldHVybiAhIShyb290RWxlbWVudCAmJiByb290RWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RFbGVtZW50Lmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSk7XG59XG5cbmZ1bmN0aW9uIGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKSB7XG4gIHZhciBzaG91bGRIeWRyYXRlID0gZm9yY2VIeWRyYXRlIHx8IHNob3VsZEh5ZHJhdGVEdWVUb0xlZ2FjeUhldXJpc3RpYyhjb250YWluZXIpOyAvLyBGaXJzdCBjbGVhciBhbnkgZXhpc3RpbmcgY29udGVudC5cblxuICBpZiAoIXNob3VsZEh5ZHJhdGUpIHtcbiAgICB2YXIgd2FybmVkID0gZmFsc2U7XG4gICAgdmFyIHJvb3RTaWJsaW5nO1xuXG4gICAgd2hpbGUgKHJvb3RTaWJsaW5nID0gY29udGFpbmVyLmxhc3RDaGlsZCkge1xuICAgICAge1xuICAgICAgICBpZiAoIXdhcm5lZCAmJiByb290U2libGluZy5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFICYmIHJvb3RTaWJsaW5nLmhhc0F0dHJpYnV0ZShST09UX0FUVFJJQlVURV9OQU1FKSkge1xuICAgICAgICAgIHdhcm5lZCA9IHRydWU7XG5cbiAgICAgICAgICBlcnJvcigncmVuZGVyKCk6IFRhcmdldCBub2RlIGhhcyBtYXJrdXAgcmVuZGVyZWQgYnkgUmVhY3QsIGJ1dCB0aGVyZSAnICsgJ2FyZSB1bnJlbGF0ZWQgbm9kZXMgYXMgd2VsbC4gVGhpcyBpcyBtb3N0IGNvbW1vbmx5IGNhdXNlZCBieSAnICsgJ3doaXRlLXNwYWNlIGluc2VydGVkIGFyb3VuZCBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwLicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRhaW5lci5yZW1vdmVDaGlsZChyb290U2libGluZyk7XG4gICAgfVxuICB9XG5cbiAge1xuICAgIGlmIChzaG91bGRIeWRyYXRlICYmICFmb3JjZUh5ZHJhdGUgJiYgIXdhcm5lZEFib3V0SHlkcmF0ZUFQSSkge1xuICAgICAgd2FybmVkQWJvdXRIeWRyYXRlQVBJID0gdHJ1ZTtcblxuICAgICAgd2FybigncmVuZGVyKCk6IENhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgdG8gaHlkcmF0ZSBzZXJ2ZXItcmVuZGVyZWQgbWFya3VwICcgKyAnd2lsbCBzdG9wIHdvcmtpbmcgaW4gUmVhY3QgdjE4LiBSZXBsYWNlIHRoZSBSZWFjdERPTS5yZW5kZXIoKSBjYWxsICcgKyAnd2l0aCBSZWFjdERPTS5oeWRyYXRlKCkgaWYgeW91IHdhbnQgUmVhY3QgdG8gYXR0YWNoIHRvIHRoZSBzZXJ2ZXIgSFRNTC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlTGVnYWN5Um9vdChjb250YWluZXIsIHNob3VsZEh5ZHJhdGUgPyB7XG4gICAgaHlkcmF0ZTogdHJ1ZVxuICB9IDogdW5kZWZpbmVkKTtcbn1cblxuZnVuY3Rpb24gd2Fybk9uSW52YWxpZENhbGxiYWNrJDEoY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGVycm9yKCclcyguLi4pOiBFeHBlY3RlZCB0aGUgbGFzdCBvcHRpb25hbCBgY2FsbGJhY2tgIGFyZ3VtZW50IHRvIGJlIGEgJyArICdmdW5jdGlvbi4gSW5zdGVhZCByZWNlaXZlZDogJXMuJywgY2FsbGVyTmFtZSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGNoaWxkcmVuLCBjb250YWluZXIsIGZvcmNlSHlkcmF0ZSwgY2FsbGJhY2spIHtcbiAge1xuICAgIHRvcExldmVsVXBkYXRlV2FybmluZ3MoY29udGFpbmVyKTtcbiAgICB3YXJuT25JbnZhbGlkQ2FsbGJhY2skMShjYWxsYmFjayA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGNhbGxiYWNrLCAncmVuZGVyJyk7XG4gIH0gLy8gVE9ETzogV2l0aG91dCBgYW55YCB0eXBlLCBGbG93IHNheXMgXCJQcm9wZXJ0eSBjYW5ub3QgYmUgYWNjZXNzZWQgb24gYW55XG4gIC8vIG1lbWJlciBvZiBpbnRlcnNlY3Rpb24gdHlwZS5cIiBXaHl5eXl5eS5cblxuXG4gIHZhciByb290ID0gY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXI7XG4gIHZhciBmaWJlclJvb3Q7XG5cbiAgaWYgKCFyb290KSB7XG4gICAgLy8gSW5pdGlhbCBtb3VudFxuICAgIHJvb3QgPSBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9IGxlZ2FjeUNyZWF0ZVJvb3RGcm9tRE9NQ29udGFpbmVyKGNvbnRhaW5lciwgZm9yY2VIeWRyYXRlKTtcbiAgICBmaWJlclJvb3QgPSByb290Ll9pbnRlcm5hbFJvb3Q7XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB2YXIgb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG4gICAgICAgIG9yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gSW5pdGlhbCBtb3VudCBzaG91bGQgbm90IGJlIGJhdGNoZWQuXG5cblxuICAgIHVuYmF0Y2hlZFVwZGF0ZXMoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlQ29udGFpbmVyKGNoaWxkcmVuLCBmaWJlclJvb3QsIHBhcmVudENvbXBvbmVudCwgY2FsbGJhY2spO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGZpYmVyUm9vdCA9IHJvb3QuX2ludGVybmFsUm9vdDtcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBfb3JpZ2luYWxDYWxsYmFjayA9IGNhbGxiYWNrO1xuXG4gICAgICBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gZ2V0UHVibGljUm9vdEluc3RhbmNlKGZpYmVyUm9vdCk7XG5cbiAgICAgICAgX29yaWdpbmFsQ2FsbGJhY2suY2FsbChpbnN0YW5jZSk7XG4gICAgICB9O1xuICAgIH0gLy8gVXBkYXRlXG5cblxuICAgIHVwZGF0ZUNvbnRhaW5lcihjaGlsZHJlbiwgZmliZXJSb290LCBwYXJlbnRDb21wb25lbnQsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJldHVybiBnZXRQdWJsaWNSb290SW5zdGFuY2UoZmliZXJSb290KTtcbn1cblxuZnVuY3Rpb24gZmluZERPTU5vZGUoY29tcG9uZW50T3JFbGVtZW50KSB7XG4gIHtcbiAgICB2YXIgb3duZXIgPSBSZWFjdEN1cnJlbnRPd25lciQzLmN1cnJlbnQ7XG5cbiAgICBpZiAob3duZXIgIT09IG51bGwgJiYgb3duZXIuc3RhdGVOb2RlICE9PSBudWxsKSB7XG4gICAgICB2YXIgd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSBvd25lci5zdGF0ZU5vZGUuX3dhcm5lZEFib3V0UmVmc0luUmVuZGVyO1xuXG4gICAgICBpZiAoIXdhcm5lZEFib3V0UmVmc0luUmVuZGVyKSB7XG4gICAgICAgIGVycm9yKCclcyBpcyBhY2Nlc3NpbmcgZmluZERPTU5vZGUgaW5zaWRlIGl0cyByZW5kZXIoKS4gJyArICdyZW5kZXIoKSBzaG91bGQgYmUgYSBwdXJlIGZ1bmN0aW9uIG9mIHByb3BzIGFuZCBzdGF0ZS4gSXQgc2hvdWxkICcgKyAnbmV2ZXIgYWNjZXNzIHNvbWV0aGluZyB0aGF0IHJlcXVpcmVzIHN0YWxlIGRhdGEgZnJvbSB0aGUgcHJldmlvdXMgJyArICdyZW5kZXIsIHN1Y2ggYXMgcmVmcy4gTW92ZSB0aGlzIGxvZ2ljIHRvIGNvbXBvbmVudERpZE1vdW50IGFuZCAnICsgJ2NvbXBvbmVudERpZFVwZGF0ZSBpbnN0ZWFkLicsIGdldENvbXBvbmVudE5hbWUob3duZXIudHlwZSkgfHwgJ0EgY29tcG9uZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIG93bmVyLnN0YXRlTm9kZS5fd2FybmVkQWJvdXRSZWZzSW5SZW5kZXIgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjb21wb25lbnRPckVsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNvbXBvbmVudE9yRWxlbWVudC5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgcmV0dXJuIGNvbXBvbmVudE9yRWxlbWVudDtcbiAgfVxuXG4gIHtcbiAgICByZXR1cm4gZmluZEhvc3RJbnN0YW5jZVdpdGhXYXJuaW5nKGNvbXBvbmVudE9yRWxlbWVudCwgJ2ZpbmRET01Ob2RlJyk7XG4gIH1cbn1cbmZ1bmN0aW9uIGh5ZHJhdGUoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00uaHlkcmF0ZSgpIG9uIGEgY29udGFpbmVyIHRoYXQgd2FzIHByZXZpb3VzbHkgJyArICdwYXNzZWQgdG8gUmVhY3RET00uY3JlYXRlUm9vdCgpLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnRGlkIHlvdSBtZWFuIHRvIGNhbGwgY3JlYXRlUm9vdChjb250YWluZXIsIHtoeWRyYXRlOiB0cnVlfSkucmVuZGVyKGVsZW1lbnQpPycpO1xuICAgIH1cbiAgfSAvLyBUT0RPOiB0aHJvdyBvciB3YXJuIGlmIHdlIGNvdWxkbid0IGh5ZHJhdGU/XG5cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCB0cnVlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiByZW5kZXIoZWxlbWVudCwgY29udGFpbmVyLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlRhcmdldCBjb250YWluZXIgaXMgbm90IGEgRE9NIGVsZW1lbnQuXCIgKTtcbiAgICB9XG4gIH1cblxuICB7XG4gICAgdmFyIGlzTW9kZXJuUm9vdCA9IGlzQ29udGFpbmVyTWFya2VkQXNSb290KGNvbnRhaW5lcikgJiYgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXIgPT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChpc01vZGVyblJvb3QpIHtcbiAgICAgIGVycm9yKCdZb3UgYXJlIGNhbGxpbmcgUmVhY3RET00ucmVuZGVyKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gJyArICdEaWQgeW91IG1lYW4gdG8gY2FsbCByb290LnJlbmRlcihlbGVtZW50KT8nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbGVnYWN5UmVuZGVyU3VidHJlZUludG9Db250YWluZXIobnVsbCwgZWxlbWVudCwgY29udGFpbmVyLCBmYWxzZSwgY2FsbGJhY2spO1xufVxuZnVuY3Rpb24gdW5zdGFibGVfcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyTm9kZSkpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCEocGFyZW50Q29tcG9uZW50ICE9IG51bGwgJiYgaGFzKHBhcmVudENvbXBvbmVudCkpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwicGFyZW50Q29tcG9uZW50IG11c3QgYmUgYSB2YWxpZCBSZWFjdCBDb21wb25lbnRcIiApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGZhbHNlLCBjYWxsYmFjayk7XG59XG5mdW5jdGlvbiB1bm1vdW50Q29tcG9uZW50QXROb2RlKGNvbnRhaW5lcikge1xuICBpZiAoIWlzVmFsaWRDb250YWluZXIoY29udGFpbmVyKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInVubW91bnRDb21wb25lbnRBdE5vZGUoLi4uKTogVGFyZ2V0IGNvbnRhaW5lciBpcyBub3QgYSBET00gZWxlbWVudC5cIiApO1xuICAgIH1cbiAgfVxuXG4gIHtcbiAgICB2YXIgaXNNb2Rlcm5Sb290ID0gaXNDb250YWluZXJNYXJrZWRBc1Jvb3QoY29udGFpbmVyKSAmJiBjb250YWluZXIuX3JlYWN0Um9vdENvbnRhaW5lciA9PT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGlzTW9kZXJuUm9vdCkge1xuICAgICAgZXJyb3IoJ1lvdSBhcmUgY2FsbGluZyBSZWFjdERPTS51bm1vdW50Q29tcG9uZW50QXROb2RlKCkgb24gYSBjb250YWluZXIgdGhhdCB3YXMgcHJldmlvdXNseSAnICsgJ3Bhc3NlZCB0byBSZWFjdERPTS5jcmVhdGVSb290KCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gRGlkIHlvdSBtZWFuIHRvIGNhbGwgcm9vdC51bm1vdW50KCk/Jyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyKSB7XG4gICAge1xuICAgICAgdmFyIHJvb3RFbCA9IGdldFJlYWN0Um9vdEVsZW1lbnRJbkNvbnRhaW5lcihjb250YWluZXIpO1xuICAgICAgdmFyIHJlbmRlcmVkQnlEaWZmZXJlbnRSZWFjdCA9IHJvb3RFbCAmJiAhZ2V0SW5zdGFuY2VGcm9tTm9kZShyb290RWwpO1xuXG4gICAgICBpZiAocmVuZGVyZWRCeURpZmZlcmVudFJlYWN0KSB7XG4gICAgICAgIGVycm9yKFwidW5tb3VudENvbXBvbmVudEF0Tm9kZSgpOiBUaGUgbm9kZSB5b3UncmUgYXR0ZW1wdGluZyB0byB1bm1vdW50IFwiICsgJ3dhcyByZW5kZXJlZCBieSBhbm90aGVyIGNvcHkgb2YgUmVhY3QuJyk7XG4gICAgICB9XG4gICAgfSAvLyBVbm1vdW50IHNob3VsZCBub3QgYmUgYmF0Y2hlZC5cblxuXG4gICAgdW5iYXRjaGVkVXBkYXRlcyhmdW5jdGlvbiAoKSB7XG4gICAgICBsZWdhY3lSZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihudWxsLCBudWxsLCBjb250YWluZXIsIGZhbHNlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vICRGbG93Rml4TWUgVGhpcyBzaG91bGQgcHJvYmFibHkgdXNlIGBkZWxldGUgY29udGFpbmVyLl9yZWFjdFJvb3RDb250YWluZXJgXG4gICAgICAgIGNvbnRhaW5lci5fcmVhY3RSb290Q29udGFpbmVyID0gbnVsbDtcbiAgICAgICAgdW5tYXJrQ29udGFpbmVyQXNSb290KGNvbnRhaW5lcik7XG4gICAgICB9KTtcbiAgICB9KTsgLy8gSWYgeW91IGNhbGwgdW5tb3VudENvbXBvbmVudEF0Tm9kZSB0d2ljZSBpbiBxdWljayBzdWNjZXNzaW9uLCB5b3UnbGxcbiAgICAvLyBnZXQgYHRydWVgIHR3aWNlLiBUaGF0J3MgcHJvYmFibHkgZmluZT9cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHtcbiAgICAgIHZhciBfcm9vdEVsID0gZ2V0UmVhY3RSb290RWxlbWVudEluQ29udGFpbmVyKGNvbnRhaW5lcik7XG5cbiAgICAgIHZhciBoYXNOb25Sb290UmVhY3RDaGlsZCA9ICEhKF9yb290RWwgJiYgZ2V0SW5zdGFuY2VGcm9tTm9kZShfcm9vdEVsKSk7IC8vIENoZWNrIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGEgUmVhY3Qgcm9vdCBub2RlLlxuXG4gICAgICB2YXIgaXNDb250YWluZXJSZWFjdFJvb3QgPSBjb250YWluZXIubm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSAmJiBpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lci5wYXJlbnROb2RlKSAmJiAhIWNvbnRhaW5lci5wYXJlbnROb2RlLl9yZWFjdFJvb3RDb250YWluZXI7XG5cbiAgICAgIGlmIChoYXNOb25Sb290UmVhY3RDaGlsZCkge1xuICAgICAgICBlcnJvcihcInVubW91bnRDb21wb25lbnRBdE5vZGUoKTogVGhlIG5vZGUgeW91J3JlIGF0dGVtcHRpbmcgdG8gdW5tb3VudCBcIiArICd3YXMgcmVuZGVyZWQgYnkgUmVhY3QgYW5kIGlzIG5vdCBhIHRvcC1sZXZlbCBjb250YWluZXIuICVzJywgaXNDb250YWluZXJSZWFjdFJvb3QgPyAnWW91IG1heSBoYXZlIGFjY2lkZW50YWxseSBwYXNzZWQgaW4gYSBSZWFjdCByb290IG5vZGUgaW5zdGVhZCAnICsgJ29mIGl0cyBjb250YWluZXIuJyA6ICdJbnN0ZWFkLCBoYXZlIHRoZSBwYXJlbnQgY29tcG9uZW50IHVwZGF0ZSBpdHMgc3RhdGUgYW5kICcgKyAncmVyZW5kZXIgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoaXMgY29tcG9uZW50LicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5zZXRBdHRlbXB0VXNlckJsb2NraW5nSHlkcmF0aW9uKGF0dGVtcHRVc2VyQmxvY2tpbmdIeWRyYXRpb24kMSk7XG5zZXRBdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbihhdHRlbXB0Q29udGludW91c0h5ZHJhdGlvbiQxKTtcbnNldEF0dGVtcHRIeWRyYXRpb25BdEN1cnJlbnRQcmlvcml0eShhdHRlbXB0SHlkcmF0aW9uQXRDdXJyZW50UHJpb3JpdHkkMSk7XG5zZXRBdHRlbXB0SHlkcmF0aW9uQXRQcmlvcml0eShydW5XaXRoUHJpb3JpdHkkMik7XG52YXIgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSBmYWxzZTtcblxue1xuICBpZiAodHlwZW9mIE1hcCAhPT0gJ2Z1bmN0aW9uJyB8fCAvLyAkRmxvd0lzc3VlIEZsb3cgaW5jb3JyZWN0bHkgdGhpbmtzIE1hcCBoYXMgbm8gcHJvdG90eXBlXG4gIE1hcC5wcm90b3R5cGUgPT0gbnVsbCB8fCB0eXBlb2YgTWFwLnByb3RvdHlwZS5mb3JFYWNoICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBTZXQgIT09ICdmdW5jdGlvbicgfHwgLy8gJEZsb3dJc3N1ZSBGbG93IGluY29ycmVjdGx5IHRoaW5rcyBTZXQgaGFzIG5vIHByb3RvdHlwZVxuICBTZXQucHJvdG90eXBlID09IG51bGwgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuY2xlYXIgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIFNldC5wcm90b3R5cGUuZm9yRWFjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIGVycm9yKCdSZWFjdCBkZXBlbmRzIG9uIE1hcCBhbmQgU2V0IGJ1aWx0LWluIHR5cGVzLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgfVxufVxuXG5zZXRSZXN0b3JlSW1wbGVtZW50YXRpb24ocmVzdG9yZUNvbnRyb2xsZWRTdGF0ZSQzKTtcbnNldEJhdGNoaW5nSW1wbGVtZW50YXRpb24oYmF0Y2hlZFVwZGF0ZXMkMSwgZGlzY3JldGVVcGRhdGVzJDEsIGZsdXNoRGlzY3JldGVVcGRhdGVzLCBiYXRjaGVkRXZlbnRVcGRhdGVzJDEpO1xuXG5mdW5jdGlvbiBjcmVhdGVQb3J0YWwkMShjaGlsZHJlbiwgY29udGFpbmVyKSB7XG4gIHZhciBrZXkgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IG51bGw7XG5cbiAgaWYgKCFpc1ZhbGlkQ29udGFpbmVyKGNvbnRhaW5lcikpIHtcbiAgICB7XG4gICAgICB0aHJvdyBFcnJvciggXCJUYXJnZXQgY29udGFpbmVyIGlzIG5vdCBhIERPTSBlbGVtZW50LlwiICk7XG4gICAgfVxuICB9IC8vIFRPRE86IHBhc3MgUmVhY3RET00gcG9ydGFsIGltcGxlbWVudGF0aW9uIGFzIHRoaXJkIGFyZ3VtZW50XG4gIC8vICRGbG93Rml4TWUgVGhlIEZsb3cgdHlwZSBpcyBvcGFxdWUgYnV0IHRoZXJlJ3Mgbm8gd2F5IHRvIGFjdHVhbGx5IGNyZWF0ZSBpdC5cblxuXG4gIHJldHVybiBjcmVhdGVQb3J0YWwoY2hpbGRyZW4sIGNvbnRhaW5lciwgbnVsbCwga2V5KTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyU3VidHJlZUludG9Db250YWluZXIocGFyZW50Q29tcG9uZW50LCBlbGVtZW50LCBjb250YWluZXJOb2RlLCBjYWxsYmFjaykge1xuXG4gIHJldHVybiB1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihwYXJlbnRDb21wb25lbnQsIGVsZW1lbnQsIGNvbnRhaW5lck5vZGUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBjb250YWluZXIpIHtcbiAgdmFyIGtleSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogbnVsbDtcblxuICB7XG4gICAgaWYgKCFkaWRXYXJuQWJvdXRVbnN0YWJsZUNyZWF0ZVBvcnRhbCkge1xuICAgICAgZGlkV2FybkFib3V0VW5zdGFibGVDcmVhdGVQb3J0YWwgPSB0cnVlO1xuXG4gICAgICB3YXJuKCdUaGUgUmVhY3RET00udW5zdGFibGVfY3JlYXRlUG9ydGFsKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE4Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdERPTS5jcmVhdGVQb3J0YWwoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLCAnICsgJ2J1dCB3aXRob3V0IHRoZSBcInVuc3RhYmxlX1wiIHByZWZpeC4nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlUG9ydGFsJDEoY2hpbGRyZW4sIGNvbnRhaW5lciwga2V5KTtcbn1cblxudmFyIEludGVybmFscyA9IHtcbiAgLy8gS2VlcCBpbiBzeW5jIHdpdGggUmVhY3RUZXN0VXRpbHMuanMsIGFuZCBSZWFjdFRlc3RVdGlsc0FjdC5qcy5cbiAgLy8gVGhpcyBpcyBhbiBhcnJheSBmb3IgYmV0dGVyIG1pbmlmaWNhdGlvbi5cbiAgRXZlbnRzOiBbZ2V0SW5zdGFuY2VGcm9tTm9kZSwgZ2V0Tm9kZUZyb21JbnN0YW5jZSwgZ2V0RmliZXJDdXJyZW50UHJvcHNGcm9tTm9kZSwgZW5xdWV1ZVN0YXRlUmVzdG9yZSwgcmVzdG9yZVN0YXRlSWZOZWVkZWQsIGZsdXNoUGFzc2l2ZUVmZmVjdHMsIC8vIFRPRE86IFRoaXMgaXMgcmVsYXRlZCB0byBgYWN0YCwgbm90IGV2ZW50cy4gTW92ZSB0byBzZXBhcmF0ZSBrZXk/XG4gIElzVGhpc1JlbmRlcmVyQWN0aW5nXVxufTtcbnZhciBmb3VuZERldlRvb2xzID0gaW5qZWN0SW50b0RldlRvb2xzKHtcbiAgZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6IGdldENsb3Nlc3RJbnN0YW5jZUZyb21Ob2RlLFxuICBidW5kbGVUeXBlOiAgMSAsXG4gIHZlcnNpb246IFJlYWN0VmVyc2lvbixcbiAgcmVuZGVyZXJQYWNrYWdlTmFtZTogJ3JlYWN0LWRvbSdcbn0pO1xuXG57XG4gIGlmICghZm91bmREZXZUb29scyAmJiBjYW5Vc2VET00gJiYgd2luZG93LnRvcCA9PT0gd2luZG93LnNlbGYpIHtcbiAgICAvLyBJZiB3ZSdyZSBpbiBDaHJvbWUgb3IgRmlyZWZveCwgcHJvdmlkZSBhIGRvd25sb2FkIGxpbmsgaWYgbm90IGluc3RhbGxlZC5cbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCdDaHJvbWUnKSA+IC0xICYmIG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignRWRnZScpID09PSAtMSB8fCBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ0ZpcmVmb3gnKSA+IC0xKSB7XG4gICAgICB2YXIgcHJvdG9jb2wgPSB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2w7IC8vIERvbid0IHdhcm4gaW4gZXhvdGljIGNhc2VzIGxpa2UgY2hyb21lLWV4dGVuc2lvbjovLy5cblxuICAgICAgaWYgKC9eKGh0dHBzP3xmaWxlKTokLy50ZXN0KHByb3RvY29sKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG4gICAgICAgIGNvbnNvbGUuaW5mbygnJWNEb3dubG9hZCB0aGUgUmVhY3QgRGV2VG9vbHMgJyArICdmb3IgYSBiZXR0ZXIgZGV2ZWxvcG1lbnQgZXhwZXJpZW5jZTogJyArICdodHRwczovL3JlYWN0anMub3JnL2xpbmsvcmVhY3QtZGV2dG9vbHMnICsgKHByb3RvY29sID09PSAnZmlsZTonID8gJ1xcbllvdSBtaWdodCBuZWVkIHRvIHVzZSBhIGxvY2FsIEhUVFAgc2VydmVyIChpbnN0ZWFkIG9mIGZpbGU6Ly8pOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1kZXZ0b29scy1mYXEnIDogJycpLCAnZm9udC13ZWlnaHQ6Ym9sZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLl9fU0VDUkVUX0lOVEVSTkFMU19ET19OT1RfVVNFX09SX1lPVV9XSUxMX0JFX0ZJUkVEID0gSW50ZXJuYWxzO1xuZXhwb3J0cy5jcmVhdGVQb3J0YWwgPSBjcmVhdGVQb3J0YWwkMTtcbmV4cG9ydHMuZmluZERPTU5vZGUgPSBmaW5kRE9NTm9kZTtcbmV4cG9ydHMuZmx1c2hTeW5jID0gZmx1c2hTeW5jO1xuZXhwb3J0cy5oeWRyYXRlID0gaHlkcmF0ZTtcbmV4cG9ydHMucmVuZGVyID0gcmVuZGVyO1xuZXhwb3J0cy51bm1vdW50Q29tcG9uZW50QXROb2RlID0gdW5tb3VudENvbXBvbmVudEF0Tm9kZTtcbmV4cG9ydHMudW5zdGFibGVfYmF0Y2hlZFVwZGF0ZXMgPSBiYXRjaGVkVXBkYXRlcyQxO1xuZXhwb3J0cy51bnN0YWJsZV9jcmVhdGVQb3J0YWwgPSB1bnN0YWJsZV9jcmVhdGVQb3J0YWw7XG5leHBvcnRzLnVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyID0gcmVuZGVyU3VidHJlZUludG9Db250YWluZXI7XG5leHBvcnRzLnZlcnNpb24gPSBSZWFjdFZlcnNpb247XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGNoZWNrRENFKCkge1xuICAvKiBnbG9iYWwgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICovXG4gIGlmIChcbiAgICB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fID09PSAndW5kZWZpbmVkJyB8fFxuICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UgIT09ICdmdW5jdGlvbidcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gVGhpcyBicmFuY2ggaXMgdW5yZWFjaGFibGUgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkXG4gICAgLy8gaW4gcHJvZHVjdGlvbiwgYnV0IHRoZSBjb25kaXRpb24gaXMgdHJ1ZSBvbmx5IGluIGRldmVsb3BtZW50LlxuICAgIC8vIFRoZXJlZm9yZSBpZiB0aGUgYnJhbmNoIGlzIHN0aWxsIGhlcmUsIGRlYWQgY29kZSBlbGltaW5hdGlvbiB3YXNuJ3RcbiAgICAvLyBwcm9wZXJseSBhcHBsaWVkLlxuICAgIC8vIERvbid0IGNoYW5nZSB0aGUgbWVzc2FnZS4gUmVhY3QgRGV2VG9vbHMgcmVsaWVzIG9uIGl0LiBBbHNvIG1ha2Ugc3VyZVxuICAgIC8vIHRoaXMgbWVzc2FnZSBkb2Vzbid0IG9jY3VyIGVsc2V3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLCBvciBpdCB3aWxsIGNhdXNlXG4gICAgLy8gYSBmYWxzZSBwb3NpdGl2ZS5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ15fXicpO1xuICB9XG4gIHRyeSB7XG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIGNvZGUgYWJvdmUgaGFzIGJlZW4gZGVhZCBjb2RlIGVsaW1pbmF0ZWQgKERDRSdkKS5cbiAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UoY2hlY2tEQ0UpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBEZXZUb29scyBzaG91bGRuJ3QgY3Jhc2ggUmVhY3QsIG5vIG1hdHRlciB3aGF0LlxuICAgIC8vIFdlIHNob3VsZCBzdGlsbCByZXBvcnQgaW4gY2FzZSB3ZSBicmVhayB0aGlzIGNvZGUuXG4gICAgY29uc29sZS5lcnJvcihlcnIpO1xuICB9XG59XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIC8vIERDRSBjaGVjayBzaG91bGQgaGFwcGVuIGJlZm9yZSBSZWFjdERPTSBidW5kbGUgZXhlY3V0ZXMgc28gdGhhdFxuICAvLyBEZXZUb29scyBjYW4gcmVwb3J0IGJhZCBtaW5pZmljYXRpb24gZHVyaW5nIGluamVjdGlvbi5cbiAgY2hlY2tEQ0UoKTtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtZG9tLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWN0aXZpdHkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiAxMiAxOCAxMiAxNSAyMSA5IDMgNiAxMiAyIDEyXCJcbiAgfSkpO1xufSk7XG5BY3Rpdml0eS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BY3Rpdml0eS5kaXNwbGF5TmFtZSA9ICdBY3Rpdml0eSc7XG5leHBvcnQgZGVmYXVsdCBBY3Rpdml0eTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWlycGxheSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE3SDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAyaC0xXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE1IDE3IDIxIDcgMjEgMTIgMTVcIlxuICB9KSk7XG59KTtcbkFpcnBsYXkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWlycGxheS5kaXNwbGF5TmFtZSA9ICdBaXJwbGF5JztcbmV4cG9ydCBkZWZhdWx0IEFpcnBsYXk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsZXJ0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkFsZXJ0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsZXJ0Q2lyY2xlLmRpc3BsYXlOYW1lID0gJ0FsZXJ0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGVydE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkFsZXJ0T2N0YWdvbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGVydE9jdGFnb24uZGlzcGxheU5hbWUgPSAnQWxlcnRPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0T2N0YWdvbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxlcnRUcmlhbmdsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC4yOSAzLjg2TDEuODIgMThhMiAyIDAgMCAwIDEuNzEgM2gxNi45NGEyIDIgMCAwIDAgMS43MS0zTDEzLjcxIDMuODZhMiAyIDAgMCAwLTMuNDIgMHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSk7XG59KTtcbkFsZXJ0VHJpYW5nbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxlcnRUcmlhbmdsZS5kaXNwbGF5TmFtZSA9ICdBbGVydFRyaWFuZ2xlJztcbmV4cG9ydCBkZWZhdWx0IEFsZXJ0VHJpYW5nbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduQ2VudGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkNlbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbGlnbkNlbnRlci5kaXNwbGF5TmFtZSA9ICdBbGlnbkNlbnRlcic7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkNlbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQWxpZ25KdXN0aWZ5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnbkp1c3RpZnkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQWxpZ25KdXN0aWZ5LmRpc3BsYXlOYW1lID0gJ0FsaWduSnVzdGlmeSc7XG5leHBvcnQgZGVmYXVsdCBBbGlnbkp1c3RpZnk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFsaWduTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuQWxpZ25MZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduTGVmdC5kaXNwbGF5TmFtZSA9ICdBbGlnbkxlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQWxpZ25MZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbGlnblJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5BbGlnblJpZ2h0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFsaWduUmlnaHQuZGlzcGxheU5hbWUgPSAnQWxpZ25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBBbGlnblJpZ2h0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBbmNob3IgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjVcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMkgyYTEwIDEwIDAgMCAwIDIwIDBoLTNcIlxuICB9KSk7XG59KTtcbkFuY2hvci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BbmNob3IuZGlzcGxheU5hbWUgPSAnQW5jaG9yJztcbmV4cG9ydCBkZWZhdWx0IEFuY2hvcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXBlcnR1cmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0LjMxXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIwLjA1XCIsXG4gICAgeTI6IFwiMTcuOTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5LjY5XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIxLjE3XCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjcuMzhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjEzLjEyXCIsXG4gICAgeTI6IFwiMi4wNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjkuNjlcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjMuOTVcIixcbiAgICB5MjogXCI2LjA2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuMzFcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjIuODNcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjYyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMC44OFwiLFxuICAgIHkyOiBcIjIxLjk0XCJcbiAgfSkpO1xufSk7XG5BcGVydHVyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcGVydHVyZS5kaXNwbGF5TmFtZSA9ICdBcGVydHVyZSc7XG5leHBvcnQgZGVmYXVsdCBBcGVydHVyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJjaGl2ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDggMjEgMjEgMyAyMSAzIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFyY2hpdmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJjaGl2ZS5kaXNwbGF5TmFtZSA9ICdBcmNoaXZlJztcbmV4cG9ydCBkZWZhdWx0IEFyY2hpdmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93bkNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI4IDEyIDEyIDE2IDE2IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuQXJyb3dEb3duQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93RG93bkNpcmNsZS5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25DaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dEb3duQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd0Rvd25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgMTcgNyAxNyA3IDdcIlxuICB9KSk7XG59KTtcbkFycm93RG93bkxlZnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dEb3duTGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25MZWZ0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93bkxlZnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93RG93blJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCI3XCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgNyAxNyAxNyA3IDE3XCJcbiAgfSkpO1xufSk7XG5BcnJvd0Rvd25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd25SaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd0Rvd25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd0Rvd25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dEb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDEyIDEyIDE5IDUgMTJcIlxuICB9KSk7XG59KTtcbkFycm93RG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0Rvd24uZGlzcGxheU5hbWUgPSAnQXJyb3dEb3duJztcbmV4cG9ydCBkZWZhdWx0IEFycm93RG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dMZWZ0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDggOCAxMiAxMiAxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbkFycm93TGVmdENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd0xlZnRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dMZWZ0Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IEFycm93TGVmdENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dMZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE5IDUgMTIgMTIgNVwiXG4gIH0pKTtcbn0pO1xuQXJyb3dMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93TGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd0xlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1JpZ2h0Q2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDE2IDE2IDEyIDEyIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5BcnJvd1JpZ2h0Q2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkFycm93UmlnaHRDaXJjbGUuZGlzcGxheU5hbWUgPSAnQXJyb3dSaWdodENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1JpZ2h0Q2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBBcnJvd1JpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDUgMTkgMTIgMTIgMTlcIlxuICB9KSk7XG59KTtcbkFycm93UmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dSaWdodC5kaXNwbGF5TmFtZSA9ICdBcnJvd1JpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93UmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEFycm93VXBDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMTIgMTIgOCA4IDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pKTtcbn0pO1xuQXJyb3dVcENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0Fycm93VXBDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQXJyb3dVcENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcExlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI3IDE3IDcgNyAxNyA3XCJcbiAgfSkpO1xufSk7XG5BcnJvd1VwTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwTGVmdC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBBcnJvd1VwTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcFJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNyA3IDE3IDcgMTcgMTdcIlxuICB9KSk7XG59KTtcbkFycm93VXBSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BcnJvd1VwUmlnaHQuZGlzcGxheU5hbWUgPSAnQXJyb3dVcFJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXBSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXJyb3dVcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE5XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI1IDEyIDEyIDUgMTkgMTJcIlxuICB9KSk7XG59KTtcbkFycm93VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXJyb3dVcC5kaXNwbGF5TmFtZSA9ICdBcnJvd1VwJztcbmV4cG9ydCBkZWZhdWx0IEFycm93VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEF0U2lnbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiA4djVhMyAzIDAgMCAwIDYgMHYtMWExMCAxMCAwIDEgMC0zLjkyIDcuOTRcIlxuICB9KSk7XG59KTtcbkF0U2lnbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5BdFNpZ24uZGlzcGxheU5hbWUgPSAnQXRTaWduJztcbmV4cG9ydCBkZWZhdWx0IEF0U2lnbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQXdhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjhcIixcbiAgICByOiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjguMjEgMTMuODkgNyAyMyAxMiAyMCAxNyAyMyAxNS43OSAxMy44OFwiXG4gIH0pKTtcbn0pO1xuQXdhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQXdhcmQuZGlzcGxheU5hbWUgPSAnQXdhcmQnO1xuZXhwb3J0IGRlZmF1bHQgQXdhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJhckNoYXJ0MiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkJhckNoYXJ0Mi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXJDaGFydDIuZGlzcGxheU5hbWUgPSAnQmFyQ2hhcnQyJztcbmV4cG9ydCBkZWZhdWx0IEJhckNoYXJ0MjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmFyQ2hhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSkpO1xufSk7XG5CYXJDaGFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXJDaGFydC5kaXNwbGF5TmFtZSA9ICdCYXJDaGFydCc7XG5leHBvcnQgZGVmYXVsdCBCYXJDaGFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmF0dGVyeUNoYXJnaW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMThIM2EyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgzLjE5TTE1IDZoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy4xOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMSA2IDcgMTIgMTMgMTIgOSAxOFwiXG4gIH0pKTtcbn0pO1xuQmF0dGVyeUNoYXJnaW5nLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJhdHRlcnlDaGFyZ2luZy5kaXNwbGF5TmFtZSA9ICdCYXR0ZXJ5Q2hhcmdpbmcnO1xuZXhwb3J0IGRlZmF1bHQgQmF0dGVyeUNoYXJnaW5nOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCYXR0ZXJ5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiNlwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjEyXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjEzXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuQmF0dGVyeS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CYXR0ZXJ5LmRpc3BsYXlOYW1lID0gJ0JhdHRlcnknO1xuZXhwb3J0IGRlZmF1bHQgQmF0dGVyeTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQmVsbE9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMy43MyAyMWEyIDIgMCAwIDEtMy40NiAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguNjMgMTNBMTcuODkgMTcuODkgMCAwIDEgMTggOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYuMjYgNi4yNkE1Ljg2IDUuODYgMCAwIDAgNiA4YzAgNy0zIDktMyA5aDE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOGE2IDYgMCAwIDAtOS4zMy01XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5CZWxsT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJlbGxPZmYuZGlzcGxheU5hbWUgPSAnQmVsbE9mZic7XG5leHBvcnQgZGVmYXVsdCBCZWxsT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCZWxsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDhBNiA2IDAgMCAwIDYgOGMwIDctMyA5LTMgOWgxOHMtMy0yLTMtOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzLjczIDIxYTIgMiAwIDAgMS0zLjQ2IDBcIlxuICB9KSk7XG59KTtcbkJlbGwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQmVsbC5kaXNwbGF5TmFtZSA9ICdCZWxsJztcbmV4cG9ydCBkZWZhdWx0IEJlbGw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJsdWV0b290aCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjYuNSA2LjUgMTcuNSAxNy41IDEyIDIzIDEyIDEgMTcuNSA2LjUgNi41IDE3LjVcIlxuICB9KSk7XG59KTtcbkJsdWV0b290aC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5CbHVldG9vdGguZGlzcGxheU5hbWUgPSAnQmx1ZXRvb3RoJztcbmV4cG9ydCBkZWZhdWx0IEJsdWV0b290aDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9sZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDRoOGE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMS00IDRINnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDEyaDlhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEtNCA0SDZ6XCJcbiAgfSkpO1xufSk7XG5Cb2xkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJvbGQuZGlzcGxheU5hbWUgPSAnQm9sZCc7XG5leHBvcnQgZGVmYXVsdCBCb2xkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCb29rT3BlbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3elwiXG4gIH0pKTtcbn0pO1xuQm9va09wZW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQm9va09wZW4uZGlzcGxheU5hbWUgPSAnQm9va09wZW4nO1xuZXhwb3J0IGRlZmF1bHQgQm9va09wZW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEJvb2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAxOS41QTIuNSAyLjUgMCAwIDEgNi41IDE3SDIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNi41IDJIMjB2MjBINi41QTIuNSAyLjUgMCAwIDEgNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyelwiXG4gIH0pKTtcbn0pO1xuQm9vay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rLmRpc3BsYXlOYW1lID0gJ0Jvb2snO1xuZXhwb3J0IGRlZmF1bHQgQm9vazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm9va21hcmsgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMjFsLTctNS03IDVWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSkpO1xufSk7XG5Cb29rbWFyay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Cb29rbWFyay5kaXNwbGF5TmFtZSA9ICdCb29rbWFyayc7XG5leHBvcnQgZGVmYXVsdCBCb29rbWFyazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQm94ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMy4yNyA2Ljk2IDEyIDEyLjAxIDIwLjczIDYuOTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyLjA4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQm94LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkJveC5kaXNwbGF5TmFtZSA9ICdCb3gnO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBCcmllZmNhc2UgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMTRcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxVjVhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjE2XCJcbiAgfSkpO1xufSk7XG5CcmllZmNhc2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQnJpZWZjYXNlLmRpc3BsYXlOYW1lID0gJ0JyaWVmY2FzZSc7XG5leHBvcnQgZGVmYXVsdCBCcmllZmNhc2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbGVuZGFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ2FsZW5kYXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2FsZW5kYXIuZGlzcGxheU5hbWUgPSAnQ2FsZW5kYXInO1xuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENhbWVyYU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAyMUgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDNtMy0zaDZsMiAzaDRhMiAyIDAgMCAxIDIgMnY5LjM0bS03LjcyLTIuMDZhNCA0IDAgMSAxLTUuNTYtNS41NlwiXG4gIH0pKTtcbn0pO1xuQ2FtZXJhT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhbWVyYU9mZi5kaXNwbGF5TmFtZSA9ICdDYW1lcmFPZmYnO1xuZXhwb3J0IGRlZmF1bHQgQ2FtZXJhT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDYW1lcmEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMTlhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDRsMi0zaDZsMiAzaDRhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTNcIixcbiAgICByOiBcIjRcIlxuICB9KSk7XG59KTtcbkNhbWVyYS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DYW1lcmEuZGlzcGxheU5hbWUgPSAnQ2FtZXJhJztcbmV4cG9ydCBkZWZhdWx0IENhbWVyYTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2FzdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yIDE2LjFBNSA1IDAgMCAxIDUuOSAyME0yIDEyLjA1QTkgOSAwIDAgMSA5Ljk1IDIwTTIgOFY2YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYxMmEyIDIgMCAwIDEtMiAyaC02XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5DYXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNhc3QuZGlzcGxheU5hbWUgPSAnQ2FzdCc7XG5leHBvcnQgZGVmYXVsdCBDYXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGVja0NpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxMS4wOFYxMmExMCAxMCAwIDEgMS01LjkzLTkuMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDQgMTIgMTQuMDEgOSAxMS4wMVwiXG4gIH0pKTtcbn0pO1xuQ2hlY2tDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hlY2tDaXJjbGUuZGlzcGxheU5hbWUgPSAnQ2hlY2tDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hlY2tDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZWNrU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxMSAxMiAxNCAyMiA0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTJ2N2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTFcIlxuICB9KSk7XG59KTtcbkNoZWNrU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZWNrU3F1YXJlLmRpc3BsYXlOYW1lID0gJ0NoZWNrU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IENoZWNrU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGVjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDYgOSAxNyA0IDEyXCJcbiAgfSkpO1xufSk7XG5DaGVjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGVjay5kaXNwbGF5TmFtZSA9ICdDaGVjayc7XG5leHBvcnQgZGVmYXVsdCBDaGVjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvbkRvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI2IDkgMTIgMTUgMTggOVwiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbkRvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbkRvd24uZGlzcGxheU5hbWUgPSAnQ2hldnJvbkRvd24nO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbkRvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTggOSAxMiAxNSA2XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uTGVmdC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvblJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxOCAxNSAxMiA5IDZcIlxuICB9KSk7XG59KTtcbkNoZXZyb25SaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DaGV2cm9uUmlnaHQuZGlzcGxheU5hbWUgPSAnQ2hldnJvblJpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25SaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2hldnJvblVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTggMTUgMTIgOSA2IDE1XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvblVwLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25VcCc7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTMgMTIgMTggMTcgMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgNiAxMiAxMSAxNyA2XCJcbiAgfSkpO1xufSk7XG5DaGV2cm9uc0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNEb3duLmRpc3BsYXlOYW1lID0gJ0NoZXZyb25zRG93bic7XG5leHBvcnQgZGVmYXVsdCBDaGV2cm9uc0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zTGVmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjExIDE3IDYgMTIgMTEgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTggMTcgMTMgMTIgMTggN1wiXG4gIH0pKTtcbn0pO1xuQ2hldnJvbnNMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNoZXZyb25zTGVmdC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc0xlZnQnO1xuZXhwb3J0IGRlZmF1bHQgQ2hldnJvbnNMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaGV2cm9uc1JpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTcgMTggMTIgMTMgN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNiAxNyAxMSAxMiA2IDdcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNSaWdodC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc1JpZ2h0JztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENoZXZyb25zVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAxMSAxMiA2IDcgMTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDE4IDEyIDEzIDcgMThcIlxuICB9KSk7XG59KTtcbkNoZXZyb25zVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2hldnJvbnNVcC5kaXNwbGF5TmFtZSA9ICdDaGV2cm9uc1VwJztcbmV4cG9ydCBkZWZhdWx0IENoZXZyb25zVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENocm9tZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjEuMTdcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMy45NVwiLFxuICAgIHkxOiBcIjYuMDZcIixcbiAgICB4MjogXCI4LjU0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMC44OFwiLFxuICAgIHkxOiBcIjIxLjk0XCIsXG4gICAgeDI6IFwiMTUuNDZcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuQ2hyb21lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNocm9tZS5kaXNwbGF5TmFtZSA9ICdDaHJvbWUnO1xuZXhwb3J0IGRlZmF1bHQgQ2hyb21lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNpcmNsZS5kaXNwbGF5TmFtZSA9ICdDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbGlwYm9hcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjhcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCI4XCIsXG4gICAgaGVpZ2h0OiBcIjRcIixcbiAgICByeDogXCIxXCIsXG4gICAgcnk6IFwiMVwiXG4gIH0pKTtcbn0pO1xuQ2xpcGJvYXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsaXBib2FyZC5kaXNwbGF5TmFtZSA9ICdDbGlwYm9hcmQnO1xuZXhwb3J0IGRlZmF1bHQgQ2xpcGJvYXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG9jayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMiA2IDEyIDEyIDE2IDE0XCJcbiAgfSkpO1xufSk7XG5DbG9jay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG9jay5kaXNwbGF5TmFtZSA9ICdDbG9jayc7XG5leHBvcnQgZGVmYXVsdCBDbG9jazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWREcml6emxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTlcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMTYuNThBNSA1IDAgMCAwIDE4IDdoLTEuMjZBOCA4IDAgMSAwIDQgMTUuMjVcIlxuICB9KSk7XG59KTtcbkNsb3VkRHJpenpsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZERyaXp6bGUuZGlzcGxheU5hbWUgPSAnQ2xvdWREcml6emxlJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkRHJpenpsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ2xvdWRMaWdodG5pbmcgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTkgMTYuOUE1IDUgMCAwIDAgMTggN2gtMS4yNmE4IDggMCAxIDAtMTEuNjIgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMTEgOSAxNyAxNSAxNyAxMSAyM1wiXG4gIH0pKTtcbn0pO1xuQ2xvdWRMaWdodG5pbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRMaWdodG5pbmcuZGlzcGxheU5hbWUgPSAnQ2xvdWRMaWdodG5pbmcnO1xuZXhwb3J0IGRlZmF1bHQgQ2xvdWRMaWdodG5pbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjYxIDE2Ljk1QTUgNSAwIDAgMCAxOCAxMGgtMS4yNmE4IDggMCAwIDAtNy4wNS02TTUgNWE4IDggMCAwIDAgNCAxNWg5YTUgNSAwIDAgMCAxLjctLjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcbkNsb3VkT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNsb3VkT2ZmLmRpc3BsYXlOYW1lID0gJ0Nsb3VkT2ZmJztcbmV4cG9ydCBkZWZhdWx0IENsb3VkT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDbG91ZFJhaW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTZcIixcbiAgICB5MTogXCIxM1wiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwIDE2LjU4QTUgNSAwIDAgMCAxOCA3aC0xLjI2QTggOCAwIDEgMCA0IDE1LjI1XCJcbiAgfSkpO1xufSk7XG5DbG91ZFJhaW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRSYWluLmRpc3BsYXlOYW1lID0gJ0Nsb3VkUmFpbic7XG5leHBvcnQgZGVmYXVsdCBDbG91ZFJhaW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkU25vdyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAxNy41OEE1IDUgMCAwIDAgMTggOGgtMS4yNkE4IDggMCAxIDAgNCAxNi4yNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjguMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjguMDFcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTYuMDFcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxNi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5DbG91ZFNub3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ2xvdWRTbm93LmRpc3BsYXlOYW1lID0gJ0Nsb3VkU25vdyc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZFNub3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE4IDEwaC0xLjI2QTggOCAwIDEgMCA5IDIwaDlhNSA1IDAgMCAwIDAtMTB6XCJcbiAgfSkpO1xufSk7XG5DbG91ZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DbG91ZC5kaXNwbGF5TmFtZSA9ICdDbG91ZCc7XG5leHBvcnQgZGVmYXVsdCBDbG91ZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29kZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE4IDIyIDEyIDE2IDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggNiAyIDEyIDggMThcIlxuICB9KSk7XG59KTtcbkNvZGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZS5kaXNwbGF5TmFtZSA9ICdDb2RlJztcbmV4cG9ydCBkZWZhdWx0IENvZGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZGVwZW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEyIDIgMjIgOC41IDIyIDE1LjUgMTIgMjIgMiAxNS41IDIgOC41IDEyIDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiA4LjUgMTIgMTUuNSAyIDguNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMiAxNS41IDEyIDguNSAyMiAxNS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4LjVcIlxuICB9KSk7XG59KTtcbkNvZGVwZW4ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZXBlbi5kaXNwbGF5TmFtZSA9ICdDb2RlcGVuJztcbmV4cG9ydCBkZWZhdWx0IENvZGVwZW47IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZGVzYW5kYm94ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNy41IDQuMjEgMTIgNi44MSAxNi41IDQuMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcuNSAxOS43OSA3LjUgMTQuNiAzIDEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMy4yNyA2Ljk2IDEyIDEyLjAxIDIwLjczIDYuOTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyLjA4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuQ29kZXNhbmRib3gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29kZXNhbmRib3guZGlzcGxheU5hbWUgPSAnQ29kZXNhbmRib3gnO1xuZXhwb3J0IGRlZmF1bHQgQ29kZXNhbmRib3g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvZmZlZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCA4aDFhNCA0IDAgMCAxIDAgOGgtMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgOGgxNnY5YTQgNCAwIDAgMS00IDRINmE0IDQgMCAwIDEtNC00Vjh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiNFwiXG4gIH0pKTtcbn0pO1xuQ29mZmVlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvZmZlZS5kaXNwbGF5TmFtZSA9ICdDb2ZmZWUnO1xuZXhwb3J0IGRlZmF1bHQgQ29mZmVlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb2x1bW5zID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDNoN2EyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTdtMC0xOEg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg3bTAtMTh2MThcIlxuICB9KSk7XG59KTtcbkNvbHVtbnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29sdW1ucy5kaXNwbGF5TmFtZSA9ICdDb2x1bW5zJztcbmV4cG9ydCBkZWZhdWx0IENvbHVtbnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvbW1hbmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggM2EzIDMgMCAwIDAtMyAzdjEyYTMgMyAwIDAgMCAzIDMgMyAzIDAgMCAwIDMtMyAzIDMgMCAwIDAtMy0zSDZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAgMyAzIDMgMyAwIDAgMCAzLTNWNmEzIDMgMCAwIDAtMy0zIDMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwIDMgM2gxMmEzIDMgMCAwIDAgMy0zIDMgMyAwIDAgMC0zLTN6XCJcbiAgfSkpO1xufSk7XG5Db21tYW5kLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvbW1hbmQuZGlzcGxheU5hbWUgPSAnQ29tbWFuZCc7XG5leHBvcnQgZGVmYXVsdCBDb21tYW5kOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb21wYXNzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTYuMjQgNy43NiAxNC4xMiAxNC4xMiA3Ljc2IDE2LjI0IDkuODggOS44OCAxNi4yNCA3Ljc2XCJcbiAgfSkpO1xufSk7XG5Db21wYXNzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvbXBhc3MuZGlzcGxheU5hbWUgPSAnQ29tcGFzcyc7XG5leHBvcnQgZGVmYXVsdCBDb21wYXNzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3B5ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiOVwiLFxuICAgIHk6IFwiOVwiLFxuICAgIHdpZHRoOiBcIjEzXCIsXG4gICAgaGVpZ2h0OiBcIjEzXCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE1SDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOWEyIDIgMCAwIDEgMiAydjFcIlxuICB9KSk7XG59KTtcbkNvcHkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29weS5kaXNwbGF5TmFtZSA9ICdDb3B5JztcbmV4cG9ydCBkZWZhdWx0IENvcHk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lckRvd25MZWZ0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOSAxMCA0IDE1IDkgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCA0djdhNCA0IDAgMCAxLTQgNEg0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJEb3duTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJEb3duTGVmdC5kaXNwbGF5TmFtZSA9ICdDb3JuZXJEb3duTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJEb3duTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyRG93blJpZ2h0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMTAgMjAgMTUgMTUgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDR2N2E0IDQgMCAwIDAgNCA0aDEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJEb3duUmlnaHQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyRG93blJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lckRvd25SaWdodCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJEb3duUmlnaHQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lckxlZnREb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgMTUgOSAyMCA0IDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgNGgtN2E0IDQgMCAwIDAtNCA0djEyXCJcbiAgfSkpO1xufSk7XG5Db3JuZXJMZWZ0RG93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJMZWZ0RG93bi5kaXNwbGF5TmFtZSA9ICdDb3JuZXJMZWZ0RG93bic7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJMZWZ0RG93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyTGVmdFVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTQgOSA5IDQgNCA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAgMjBoLTdhNCA0IDAgMCAxLTQtNFY0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJMZWZ0VXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ29ybmVyTGVmdFVwLmRpc3BsYXlOYW1lID0gJ0Nvcm5lckxlZnRVcCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJMZWZ0VXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIENvcm5lclJpZ2h0RG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDE1IDE1IDIwIDIwIDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCA0aDdhNCA0IDAgMCAxIDQgNHYxMlwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyUmlnaHREb3duLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclJpZ2h0RG93bi5kaXNwbGF5TmFtZSA9ICdDb3JuZXJSaWdodERvd24nO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyUmlnaHREb3duOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJSaWdodFVwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTAgOSAxNSA0IDIwIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDIwaDdhNCA0IDAgMCAwIDQtNFY0XCJcbiAgfSkpO1xufSk7XG5Db3JuZXJSaWdodFVwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkNvcm5lclJpZ2h0VXAuZGlzcGxheU5hbWUgPSAnQ29ybmVyUmlnaHRVcCc7XG5leHBvcnQgZGVmYXVsdCBDb3JuZXJSaWdodFVwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBDb3JuZXJVcExlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDE0IDQgOSA5IDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMHYtN2E0IDQgMCAwIDAtNC00SDRcIlxuICB9KSk7XG59KTtcbkNvcm5lclVwTGVmdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJVcExlZnQuZGlzcGxheU5hbWUgPSAnQ29ybmVyVXBMZWZ0JztcbmV4cG9ydCBkZWZhdWx0IENvcm5lclVwTGVmdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ29ybmVyVXBSaWdodCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE1IDE0IDIwIDkgMTUgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMjB2LTdhNCA0IDAgMCAxIDQtNGgxMlwiXG4gIH0pKTtcbn0pO1xuQ29ybmVyVXBSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Db3JuZXJVcFJpZ2h0LmRpc3BsYXlOYW1lID0gJ0Nvcm5lclVwUmlnaHQnO1xuZXhwb3J0IGRlZmF1bHQgQ29ybmVyVXBSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3B1ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiNFwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjE2XCIsXG4gICAgaGVpZ2h0OiBcIjE2XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjlcIixcbiAgICB5OiBcIjlcIixcbiAgICB3aWR0aDogXCI2XCIsXG4gICAgaGVpZ2h0OiBcIjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIyMFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiNFwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkNwdS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DcHUuZGlzcGxheU5hbWUgPSAnQ3B1JztcbmV4cG9ydCBkZWZhdWx0IENwdTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3JlZGl0Q2FyZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjRcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNlwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pKTtcbn0pO1xuQ3JlZGl0Q2FyZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5DcmVkaXRDYXJkLmRpc3BsYXlOYW1lID0gJ0NyZWRpdENhcmQnO1xuZXhwb3J0IGRlZmF1bHQgQ3JlZGl0Q2FyZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3JvcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02LjEzIDFMNiAxNmEyIDIgMCAwIDAgMiAyaDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSA2LjEzTDE2IDZhMiAyIDAgMCAxIDIgMnYxNVwiXG4gIH0pKTtcbn0pO1xuQ3JvcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Dcm9wLmRpc3BsYXlOYW1lID0gJ0Nyb3AnO1xuZXhwb3J0IGRlZmF1bHQgQ3JvcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgQ3Jvc3NoYWlyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5Dcm9zc2hhaXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuQ3Jvc3NoYWlyLmRpc3BsYXlOYW1lID0gJ0Nyb3NzaGFpcic7XG5leHBvcnQgZGVmYXVsdCBDcm9zc2hhaXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERhdGFiYXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImVsbGlwc2VcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNVwiLFxuICAgIHJ4OiBcIjlcIixcbiAgICByeTogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1XCJcbiAgfSkpO1xufSk7XG5EYXRhYmFzZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EYXRhYmFzZS5kaXNwbGF5TmFtZSA9ICdEYXRhYmFzZSc7XG5leHBvcnQgZGVmYXVsdCBEYXRhYmFzZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRGVsZXRlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDRIOGwtNyA4IDcgOGgxM2EyIDIgMCAwIDAgMi0yVjZhMiAyIDAgMCAwLTItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRGVsZXRlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRlbGV0ZS5kaXNwbGF5TmFtZSA9ICdEZWxldGUnO1xuZXhwb3J0IGRlZmF1bHQgRGVsZXRlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEaXNjID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSk7XG59KTtcbkRpc2MucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGlzYy5kaXNwbGF5TmFtZSA9ICdEaXNjJztcbmV4cG9ydCBkZWZhdWx0IERpc2M7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSkpO1xufSk7XG5EaXZpZGVDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGl2aWRlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0RpdmlkZUNpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBEaXZpZGVDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZVNxdWFyZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI4XCJcbiAgfSkpO1xufSk7XG5EaXZpZGVTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRGl2aWRlU3F1YXJlLmRpc3BsYXlOYW1lID0gJ0RpdmlkZVNxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBEaXZpZGVTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERpdmlkZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjJcIlxuICB9KSk7XG59KTtcbkRpdmlkZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5EaXZpZGUuZGlzcGxheU5hbWUgPSAnRGl2aWRlJztcbmV4cG9ydCBkZWZhdWx0IERpdmlkZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRG9sbGFyU2lnbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgNUg5LjVhMy41IDMuNSAwIDAgMCAwIDdoNWEzLjUgMy41IDAgMCAxIDAgN0g2XCJcbiAgfSkpO1xufSk7XG5Eb2xsYXJTaWduLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRvbGxhclNpZ24uZGlzcGxheU5hbWUgPSAnRG9sbGFyU2lnbic7XG5leHBvcnQgZGVmYXVsdCBEb2xsYXJTaWduOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEb3dubG9hZENsb3VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiOCAxNyAxMiAyMSAxNiAxN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODggMTguMDlBNSA1IDAgMCAwIDE4IDloLTEuMjZBOCA4IDAgMSAwIDMgMTYuMjlcIlxuICB9KSk7XG59KTtcbkRvd25sb2FkQ2xvdWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRG93bmxvYWRDbG91ZC5kaXNwbGF5TmFtZSA9ICdEb3dubG9hZENsb3VkJztcbmV4cG9ydCBkZWZhdWx0IERvd25sb2FkQ2xvdWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIERvd25sb2FkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMTAgMTIgMTUgMTcgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSkpO1xufSk7XG5Eb3dubG9hZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Eb3dubG9hZC5kaXNwbGF5TmFtZSA9ICdEb3dubG9hZCc7XG5leHBvcnQgZGVmYXVsdCBEb3dubG9hZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRHJpYmJibGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTYgMi43NWM0LjM3IDYuMDMgNi4wMiA5LjQyIDguMDMgMTcuNzJtMi41NC0xNS4zOGMtMy43MiA0LjM1LTguOTQgNS42Ni0xNi44OCA1Ljg1bTE5LjUgMS45Yy0zLjUtLjkzLTYuNjMtLjgyLTguOTQgMC0yLjU4LjkyLTUuMDEgMi44Ni03LjQ0IDYuMzJcIlxuICB9KSk7XG59KTtcbkRyaWJiYmxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkRyaWJiYmxlLmRpc3BsYXlOYW1lID0gJ0RyaWJiYmxlJztcbmV4cG9ydCBkZWZhdWx0IERyaWJiYmxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBEcm9wbGV0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDIuNjlsNS42NiA1LjY2YTggOCAwIDEgMS0xMS4zMSAwelwiXG4gIH0pKTtcbn0pO1xuRHJvcGxldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ecm9wbGV0LmRpc3BsYXlOYW1lID0gJ0Ryb3BsZXQnO1xuZXhwb3J0IGRlZmF1bHQgRHJvcGxldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdDIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTcgM2EyLjgyOCAyLjgyOCAwIDEgMSA0IDRMNy41IDIwLjUgMiAyMmwxLjUtNS41TDE3IDN6XCJcbiAgfSkpO1xufSk7XG5FZGl0Mi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5FZGl0Mi5kaXNwbGF5TmFtZSA9ICdFZGl0Mic7XG5leHBvcnQgZGVmYXVsdCBFZGl0MjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRWRpdDMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjBoOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjUgMy41YTIuMTIxIDIuMTIxIDAgMCAxIDMgM0w3IDE5bC00IDEgMS00TDE2LjUgMy41elwiXG4gIH0pKTtcbn0pO1xuRWRpdDMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRWRpdDMuZGlzcGxheU5hbWUgPSAnRWRpdDMnO1xuZXhwb3J0IGRlZmF1bHQgRWRpdDM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEVkaXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTEgNEg0YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi03XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguNSAyLjVhMi4xMjEgMi4xMjEgMCAwIDEgMyAzTDEyIDE1bC00IDEgMS00IDkuNS05LjV6XCJcbiAgfSkpO1xufSk7XG5FZGl0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkVkaXQuZGlzcGxheU5hbWUgPSAnRWRpdCc7XG5leHBvcnQgZGVmYXVsdCBFZGl0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFeHRlcm5hbExpbmsgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIzXCJcbiAgfSkpO1xufSk7XG5FeHRlcm5hbExpbmsucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRXh0ZXJuYWxMaW5rLmRpc3BsYXlOYW1lID0gJ0V4dGVybmFsTGluayc7XG5leHBvcnQgZGVmYXVsdCBFeHRlcm5hbExpbms7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEV5ZU9mZiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNy45NCAxNy45NEExMC4wNyAxMC4wNyAwIDAgMSAxMiAyMGMtNyAwLTExLTgtMTEtOGExOC40NSAxOC40NSAwIDAgMSA1LjA2LTUuOTRNOS45IDQuMjRBOS4xMiA5LjEyIDAgMCAxIDEyIDRjNyAwIDExIDggMTEgOGExOC41IDE4LjUgMCAwIDEtMi4xNiAzLjE5bS02LjcyLTEuMDdhMyAzIDAgMSAxLTQuMjQtNC4yNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuRXllT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkV5ZU9mZi5kaXNwbGF5TmFtZSA9ICdFeWVPZmYnO1xuZXhwb3J0IGRlZmF1bHQgRXllT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBFeWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMSAxMnM0LTggMTEtOCAxMSA4IDExIDgtNCA4LTExIDgtMTEtOC0xMS04elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuRXllLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkV5ZS5kaXNwbGF5TmFtZSA9ICdFeWUnO1xuZXhwb3J0IGRlZmF1bHQgRXllOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGYWNlYm9vayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAyaC0zYTUgNSAwIDAgMC01IDV2M0g3djRoM3Y4aDR2LThoM2wxLTRoLTRWN2ExIDEgMCAwIDEgMS0xaDN6XCJcbiAgfSkpO1xufSk7XG5GYWNlYm9vay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GYWNlYm9vay5kaXNwbGF5TmFtZSA9ICdGYWNlYm9vayc7XG5leHBvcnQgZGVmYXVsdCBGYWNlYm9vazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmFzdEZvcndhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEzIDE5IDIyIDEyIDEzIDUgMTMgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMiAxOSAxMSAxMiAyIDUgMiAxOVwiXG4gIH0pKTtcbn0pO1xuRmFzdEZvcndhcmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmFzdEZvcndhcmQuZGlzcGxheU5hbWUgPSAnRmFzdEZvcndhcmQnO1xuZXhwb3J0IGRlZmF1bHQgRmFzdEZvcndhcmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZlYXRoZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuMjQgMTIuMjRhNiA2IDAgMCAwLTguNDktOC40OUw1IDEwLjVWMTloOC41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3LjVcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRmVhdGhlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GZWF0aGVyLmRpc3BsYXlOYW1lID0gJ0ZlYXRoZXInO1xuZXhwb3J0IGRlZmF1bHQgRmVhdGhlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlnbWEgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSA1LjVBMy41IDMuNSAwIDAgMSA4LjUgMkgxMnY3SDguNUEzLjUgMy41IDAgMCAxIDUgNS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMTIuNWEzLjUgMy41IDAgMSAxIDcgMCAzLjUgMy41IDAgMSAxLTcgMHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDE5LjVBMy41IDMuNSAwIDAgMSA4LjUgMTZIMTJ2My41YTMuNSAzLjUgMCAxIDEtNyAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41elwiXG4gIH0pKTtcbn0pO1xuRmlnbWEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlnbWEuZGlzcGxheU5hbWUgPSAnRmlnbWEnO1xuZXhwb3J0IGRlZmF1bHQgRmlnbWE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbGVNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjE1XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuRmlsZU1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVNaW51cy5kaXNwbGF5TmFtZSA9ICdGaWxlTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgRmlsZU1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlUGx1cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE0IDIgMTQgOCAyMCA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GaWxlUGx1cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5GaWxlUGx1cy5kaXNwbGF5TmFtZSA9ICdGaWxlUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBGaWxlUGx1czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRmlsZVRleHQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNCAyIDE0IDggMjAgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiMTNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiOFwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMCA5IDkgOSA4IDlcIlxuICB9KSk7XG59KTtcbkZpbGVUZXh0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbGVUZXh0LmRpc3BsYXlOYW1lID0gJ0ZpbGVUZXh0JztcbmV4cG9ydCBkZWZhdWx0IEZpbGVUZXh0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGaWxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEzIDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY5elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMiAxMyA5IDIwIDlcIlxuICB9KSk7XG59KTtcbkZpbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsZS5kaXNwbGF5TmFtZSA9ICdGaWxlJztcbmV4cG9ydCBkZWZhdWx0IEZpbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbG0gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCIyLjE4XCIsXG4gICAgcnk6IFwiMi4xOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjdcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjJcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiN1wiLFxuICAgIHgyOiBcIjdcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCIxN1wiLFxuICAgIHgyOiBcIjIyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjdcIlxuICB9KSk7XG59KTtcbkZpbG0ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRmlsbS5kaXNwbGF5TmFtZSA9ICdGaWxtJztcbmV4cG9ydCBkZWZhdWx0IEZpbG07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZpbHRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMyAyIDMgMTAgMTIuNDYgMTAgMTkgMTQgMjEgMTQgMTIuNDYgMjIgM1wiXG4gIH0pKTtcbn0pO1xuRmlsdGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZpbHRlci5kaXNwbGF5TmFtZSA9ICdGaWx0ZXInO1xuZXhwb3J0IGRlZmF1bHQgRmlsdGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGbGFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTVzMS0xIDQtMSA1IDIgOCAyIDQtMSA0LTFWM3MtMSAxLTQgMS01LTItOC0yLTQgMS00IDF6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNFwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiNFwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5GbGFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZsYWcuZGlzcGxheU5hbWUgPSAnRmxhZyc7XG5leHBvcnQgZGVmYXVsdCBGbGFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXJNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCIxNFwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbkZvbGRlck1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlck1pbnVzLmRpc3BsYXlOYW1lID0gJ0ZvbGRlck1pbnVzJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlck1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXJQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMTRcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSkpO1xufSk7XG5Gb2xkZXJQbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkZvbGRlclBsdXMuZGlzcGxheU5hbWUgPSAnRm9sZGVyUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBGb2xkZXJQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBGb2xkZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnpcIlxuICB9KSk7XG59KTtcbkZvbGRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Gb2xkZXIuZGlzcGxheU5hbWUgPSAnRm9sZGVyJztcbmV4cG9ydCBkZWZhdWx0IEZvbGRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgRnJhbWVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTUgMTZWOWgxNFYySDVsMTQgMTRoLTdtLTcgMGw3IDd2LTdtLTcgMGg3XCJcbiAgfSkpO1xufSk7XG5GcmFtZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuRnJhbWVyLmRpc3BsYXlOYW1lID0gJ0ZyYW1lcic7XG5leHBvcnQgZGVmYXVsdCBGcmFtZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEZyb3duID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5Gcm93bi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Gcm93bi5kaXNwbGF5TmFtZSA9ICdGcm93bic7XG5leHBvcnQgZGVmYXVsdCBGcm93bjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2lmdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDEyIDIwIDIyIDQgMjIgNCAxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgN0g3LjVhMi41IDIuNSAwIDAgMSAwLTVDMTEgMiAxMiA3IDEyIDd6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgN2g0LjVhMi41IDIuNSAwIDAgMCAwLTVDMTMgMiAxMiA3IDEyIDd6XCJcbiAgfSkpO1xufSk7XG5HaWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpZnQuZGlzcGxheU5hbWUgPSAnR2lmdCc7XG5leHBvcnQgZGVmYXVsdCBHaWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRCcmFuY2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTggOWE5IDkgMCAwIDEtOSA5XCJcbiAgfSkpO1xufSk7XG5HaXRCcmFuY2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0QnJhbmNoLmRpc3BsYXlOYW1lID0gJ0dpdEJyYW5jaCc7XG5leHBvcnQgZGVmYXVsdCBHaXRCcmFuY2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdENvbW1pdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxLjA1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI3XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNy4wMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjIuOTZcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuR2l0Q29tbWl0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdENvbW1pdC5kaXNwbGF5TmFtZSA9ICdHaXRDb21taXQnO1xuZXhwb3J0IGRlZmF1bHQgR2l0Q29tbWl0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRNZXJnZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNiAyMVY5YTkgOSAwIDAgMCA5IDlcIlxuICB9KSk7XG59KTtcbkdpdE1lcmdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdpdE1lcmdlLmRpc3BsYXlOYW1lID0gJ0dpdE1lcmdlJztcbmV4cG9ydCBkZWZhdWx0IEdpdE1lcmdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHaXRQdWxsUmVxdWVzdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMThcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCI2XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2N1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5HaXRQdWxsUmVxdWVzdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5HaXRQdWxsUmVxdWVzdC5kaXNwbGF5TmFtZSA9ICdHaXRQdWxsUmVxdWVzdCc7XG5leHBvcnQgZGVmYXVsdCBHaXRQdWxsUmVxdWVzdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgR2l0SHViID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMTljLTUgMS41LTUtMi41LTctM20xNCA2di0zLjg3YTMuMzcgMy4zNyAwIDAgMC0uOTQtMi42MWMzLjE0LS4zNSA2LjQ0LTEuNTQgNi40NC03QTUuNDQgNS40NCAwIDAgMCAyMCA0Ljc3IDUuMDcgNS4wNyAwIDAgMCAxOS45MSAxUzE4LjczLjY1IDE2IDIuNDhhMTMuMzggMTMuMzggMCAwIDAtNyAwQzYuMjcuNjUgNS4wOSAxIDUuMDkgMUE1LjA3IDUuMDcgMCAwIDAgNSA0Ljc3YTUuNDQgNS40NCAwIDAgMC0xLjUgMy43OGMwIDUuNDIgMy4zIDYuNjEgNi40NCA3QTMuMzcgMy4zNyAwIDAgMCA5IDE4LjEzVjIyXCJcbiAgfSkpO1xufSk7XG5HaXRIdWIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0SHViLmRpc3BsYXlOYW1lID0gJ0dpdEh1Yic7XG5leHBvcnQgZGVmYXVsdCBHaXRIdWI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdpdGxhYiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMi42NSAxNC4zOUwxMiAyMi4xMyAxLjM1IDE0LjM5YS44NC44NCAwIDAgMS0uMy0uOTRsMS4yMi0zLjc4IDIuNDQtNy41MUEuNDIuNDIgMCAwIDEgNC44MiAyYS40My40MyAwIDAgMSAuNTggMCAuNDIuNDIgMCAwIDEgLjExLjE4bDIuNDQgNy40OWg4LjFsMi40NC03LjUxQS40Mi40MiAwIDAgMSAxOC42IDJhLjQzLjQzIDAgMCAxIC41OCAwIC40Mi40MiAwIDAgMSAuMTEuMThsMi40NCA3LjUxTDIzIDEzLjQ1YS44NC44NCAwIDAgMS0uMzUuOTR6XCJcbiAgfSkpO1xufSk7XG5HaXRsYWIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR2l0bGFiLmRpc3BsYXlOYW1lID0gJ0dpdGxhYic7XG5leHBvcnQgZGVmYXVsdCBHaXRsYWI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEdsb2JlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMmExNS4zIDE1LjMgMCAwIDEgNCAxMCAxNS4zIDE1LjMgMCAwIDEtNCAxMCAxNS4zIDE1LjMgMCAwIDEtNC0xMCAxNS4zIDE1LjMgMCAwIDEgNC0xMHpcIlxuICB9KSk7XG59KTtcbkdsb2JlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkdsb2JlLmRpc3BsYXlOYW1lID0gJ0dsb2JlJztcbmV4cG9ydCBkZWZhdWx0IEdsb2JlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBHcmlkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMTRcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCI3XCIsXG4gICAgaGVpZ2h0OiBcIjdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjE0XCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjdcIixcbiAgICBoZWlnaHQ6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTRcIixcbiAgICB3aWR0aDogXCI3XCIsXG4gICAgaGVpZ2h0OiBcIjdcIlxuICB9KSk7XG59KTtcbkdyaWQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuR3JpZC5kaXNwbGF5TmFtZSA9ICdHcmlkJztcbmV4cG9ydCBkZWZhdWx0IEdyaWQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhhcmREcml2ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNS40NSA1LjExTDIgMTJ2NmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTZsLTMuNDUtNi44OUEyIDIgMCAwIDAgMTYuNzYgNEg3LjI0YTIgMiAwIDAgMC0xLjc5IDEuMTF6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiNi4wMVwiLFxuICAgIHkyOiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxNlwiLFxuICAgIHgyOiBcIjEwLjAxXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcbkhhcmREcml2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IYXJkRHJpdmUuZGlzcGxheU5hbWUgPSAnSGFyZERyaXZlJztcbmV4cG9ydCBkZWZhdWx0IEhhcmREcml2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMFwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCI4XCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjNcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5IYXNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkhhc2guZGlzcGxheU5hbWUgPSAnSGFzaCc7XG5leHBvcnQgZGVmYXVsdCBIYXNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBIZWFkcGhvbmVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTMgMTh2LTZhOSA5IDAgMCAxIDE4IDB2NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDE5YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDN6TTMgMTlhMiAyIDAgMCAwIDIgMmgxYTIgMiAwIDAgMCAyLTJ2LTNhMiAyIDAgMCAwLTItMkgzelwiXG4gIH0pKTtcbn0pO1xuSGVhZHBob25lcy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWFkcGhvbmVzLmRpc3BsYXlOYW1lID0gJ0hlYWRwaG9uZXMnO1xuZXhwb3J0IGRlZmF1bHQgSGVhZHBob25lczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGVhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuODQgNC42MWE1LjUgNS41IDAgMCAwLTcuNzggMEwxMiA1LjY3bC0xLjA2LTEuMDZhNS41IDUuNSAwIDAgMC03Ljc4IDcuNzhsMS4wNiAxLjA2TDEyIDIxLjIzbDcuNzgtNy43OCAxLjA2LTEuMDZhNS41IDUuNSAwIDAgMCAwLTcuNzh6XCJcbiAgfSkpO1xufSk7XG5IZWFydC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWFydC5kaXNwbGF5TmFtZSA9ICdIZWFydCc7XG5leHBvcnQgZGVmYXVsdCBIZWFydDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGVscENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE3XCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIxN1wiXG4gIH0pKTtcbn0pO1xuSGVscENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5IZWxwQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ0hlbHBDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgSGVscENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSGV4YWdvbiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnpcIlxuICB9KSk7XG59KTtcbkhleGFnb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSGV4YWdvbi5kaXNwbGF5TmFtZSA9ICdIZXhhZ29uJztcbmV4cG9ydCBkZWZhdWx0IEhleGFnb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEhvbWUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyA5bDktNyA5IDd2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCI5IDIyIDkgMTIgMTUgMTIgMTUgMjJcIlxuICB9KSk7XG59KTtcbkhvbWUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSG9tZS5kaXNwbGF5TmFtZSA9ICdIb21lJztcbmV4cG9ydCBkZWZhdWx0IEhvbWU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEltYWdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjguNVwiLFxuICAgIHI6IFwiMS41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMSAxNSAxNiAxMCA1IDIxXCJcbiAgfSkpO1xufSk7XG5JbWFnZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbWFnZS5kaXNwbGF5TmFtZSA9ICdJbWFnZSc7XG5leHBvcnQgZGVmYXVsdCBJbWFnZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW5ib3ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiAxMiAxNiAxMiAxNCAxNSAxMCAxNSA4IDEyIDIgMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01LjQ1IDUuMTFMMiAxMnY2YTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtNmwtMy40NS02Ljg5QTIgMiAwIDAgMCAxNi43NiA0SDcuMjRhMiAyIDAgMCAwLTEuNzkgMS4xMXpcIlxuICB9KSk7XG59KTtcbkluYm94LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkluYm94LmRpc3BsYXlOYW1lID0gJ0luYm94JztcbmV4cG9ydCBkZWZhdWx0IEluYm94OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBJbmZvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiOFwiXG4gIH0pKTtcbn0pO1xuSW5mby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5JbmZvLmRpc3BsYXlOYW1lID0gJ0luZm8nO1xuZXhwb3J0IGRlZmF1bHQgSW5mbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgSW5zdGFncmFtID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMlwiLFxuICAgIHk6IFwiMlwiLFxuICAgIHdpZHRoOiBcIjIwXCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgcng6IFwiNVwiLFxuICAgIHJ5OiBcIjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAxMS4zN0E0IDQgMCAxIDEgMTIuNjMgOCA0IDQgMCAwIDEgMTYgMTEuMzd6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTcuNVwiLFxuICAgIHkxOiBcIjYuNVwiLFxuICAgIHgyOiBcIjE3LjUxXCIsXG4gICAgeTI6IFwiNi41XCJcbiAgfSkpO1xufSk7XG5JbnN0YWdyYW0ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSW5zdGFncmFtLmRpc3BsYXlOYW1lID0gJ0luc3RhZ3JhbSc7XG5leHBvcnQgZGVmYXVsdCBJbnN0YWdyYW07IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEl0YWxpYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOVwiLFxuICAgIHkxOiBcIjRcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiNVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5JdGFsaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuSXRhbGljLmRpc3BsYXlOYW1lID0gJ0l0YWxpYyc7XG5leHBvcnQgZGVmYXVsdCBJdGFsaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIEtleSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAybC0yIDJtLTcuNjEgNy42MWE1LjUgNS41IDAgMSAxLTcuNzc4IDcuNzc4IDUuNSA1LjUgMCAwIDEgNy43NzctNy43Nzd6bTAgMEwxNS41IDcuNW0wIDBsMyAzTDIyIDdsLTMtM20tMy41IDMuNUwxOSA0XCJcbiAgfSkpO1xufSk7XG5LZXkucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuS2V5LmRpc3BsYXlOYW1lID0gJ0tleSc7XG5leHBvcnQgZGVmYXVsdCBLZXk7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExheWVycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAyIDcgMTIgMTIgMjIgNyAxMiAyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDE3IDEyIDIyIDIyIDE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyIDEyIDEyIDE3IDIyIDEyXCJcbiAgfSkpO1xufSk7XG5MYXllcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGF5ZXJzLmRpc3BsYXlOYW1lID0gJ0xheWVycyc7XG5leHBvcnQgZGVmYXVsdCBMYXllcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExheW91dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuTGF5b3V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxheW91dC5kaXNwbGF5TmFtZSA9ICdMYXlvdXQnO1xuZXhwb3J0IGRlZmF1bHQgTGF5b3V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaWZlQnVveSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjQuOTNcIixcbiAgICB4MjogXCI5LjE3XCIsXG4gICAgeTI6IFwiOS4xN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0LjgzXCIsXG4gICAgeTE6IFwiMTQuODNcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjE5LjA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCI5LjE3XCIsXG4gICAgeDI6IFwiMTkuMDdcIixcbiAgICB5MjogXCI0LjkzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuODNcIixcbiAgICB5MTogXCI5LjE3XCIsXG4gICAgeDI6IFwiMTguMzZcIixcbiAgICB5MjogXCI1LjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjE5LjA3XCIsXG4gICAgeDI6IFwiOS4xN1wiLFxuICAgIHkyOiBcIjE0LjgzXCJcbiAgfSkpO1xufSk7XG5MaWZlQnVveS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaWZlQnVveS5kaXNwbGF5TmFtZSA9ICdMaWZlQnVveSc7XG5leHBvcnQgZGVmYXVsdCBMaWZlQnVveTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGluazIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUgN2gzYTUgNSAwIDAgMSA1IDUgNSA1IDAgMCAxLTUgNWgtM20tNiAwSDZhNSA1IDAgMCAxLTUtNSA1IDUgMCAwIDEgNS01aDNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5MaW5rMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5MaW5rMi5kaXNwbGF5TmFtZSA9ICdMaW5rMic7XG5leHBvcnQgZGVmYXVsdCBMaW5rMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTGluayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxM2E1IDUgMCAwIDAgNy41NC41NGwzLTNhNSA1IDAgMCAwLTcuMDctNy4wN2wtMS43MiAxLjcxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzFcIlxuICB9KSk7XG59KTtcbkxpbmsucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTGluay5kaXNwbGF5TmFtZSA9ICdMaW5rJztcbmV4cG9ydCBkZWZhdWx0IExpbms7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExpbmtlZGluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIyXCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiNFwiLFxuICAgIGhlaWdodDogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNFwiLFxuICAgIGN5OiBcIjRcIixcbiAgICByOiBcIjJcIlxuICB9KSk7XG59KTtcbkxpbmtlZGluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpbmtlZGluLmRpc3BsYXlOYW1lID0gJ0xpbmtlZGluJztcbmV4cG9ydCBkZWZhdWx0IExpbmtlZGluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMaXN0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjMuMDFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMy4wMVwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5MaXN0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxpc3QuZGlzcGxheU5hbWUgPSAnTGlzdCc7XG5leHBvcnQgZGVmYXVsdCBMaXN0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2FkZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjkzXCIsXG4gICAgeTE6IFwiNC45M1wiLFxuICAgIHgyOiBcIjcuNzZcIixcbiAgICB5MjogXCI3Ljc2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTYuMjRcIixcbiAgICB5MTogXCIxNi4yNFwiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiMTkuMDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjJcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuOTNcIixcbiAgICB5MTogXCIxOS4wN1wiLFxuICAgIHgyOiBcIjcuNzZcIixcbiAgICB5MjogXCIxNi4yNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjI0XCIsXG4gICAgeTE6IFwiNy43NlwiLFxuICAgIHgyOiBcIjE5LjA3XCIsXG4gICAgeTI6IFwiNC45M1wiXG4gIH0pKTtcbn0pO1xuTG9hZGVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvYWRlci5kaXNwbGF5TmFtZSA9ICdMb2FkZXInO1xuZXhwb3J0IGRlZmF1bHQgTG9hZGVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBMb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTFcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxMVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMVY3YTUgNSAwIDAgMSAxMCAwdjRcIlxuICB9KSk7XG59KTtcbkxvY2sucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTG9jay5kaXNwbGF5TmFtZSA9ICdMb2NrJztcbmV4cG9ydCBkZWZhdWx0IExvY2s7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIExvZ0luID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjEwIDE3IDE1IDEyIDEwIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5Mb2dJbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Mb2dJbi5kaXNwbGF5TmFtZSA9ICdMb2dJbic7XG5leHBvcnQgZGVmYXVsdCBMb2dJbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTG9nT3V0ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiAxNyAyMSAxMiAxNiA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pKTtcbn0pO1xuTG9nT3V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbkxvZ091dC5kaXNwbGF5TmFtZSA9ICdMb2dPdXQnO1xuZXhwb3J0IGRlZmF1bHQgTG9nT3V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYWlsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgNGgxNmMxLjEgMCAyIC45IDIgMnYxMmMwIDEuMS0uOSAyLTIgMkg0Yy0xLjEgMC0yLS45LTItMlY2YzAtMS4xLjktMiAyLTJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMiw2IDEyLDEzIDIsNlwiXG4gIH0pKTtcbn0pO1xuTWFpbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYWlsLmRpc3BsYXlOYW1lID0gJ01haWwnO1xuZXhwb3J0IGRlZmF1bHQgTWFpbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWFwUGluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDEwYzAgNy05IDEzLTkgMTNzLTktNi05LTEzYTkgOSAwIDAgMSAxOCAwelwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuTWFwUGluLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1hcFBpbi5kaXNwbGF5TmFtZSA9ICdNYXBQaW4nO1xuZXhwb3J0IGRlZmF1bHQgTWFwUGluOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNYXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjEgNiAxIDIyIDggMTggMTYgMjIgMjMgMTggMjMgMiAxNiA2IDggMiAxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjhcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2XCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSk7XG59KTtcbk1hcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYXAuZGlzcGxheU5hbWUgPSAnTWFwJztcbmV4cG9ydCBkZWZhdWx0IE1hcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWF4aW1pemUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTUgMyAyMSAzIDIxIDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgMjEgMyAyMSAzIDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIzXCIsXG4gICAgeDI6IFwiMTRcIixcbiAgICB5MjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSk7XG59KTtcbk1heGltaXplMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NYXhpbWl6ZTIuZGlzcGxheU5hbWUgPSAnTWF4aW1pemUyJztcbmV4cG9ydCBkZWZhdWx0IE1heGltaXplMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWF4aW1pemUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzbTE4IDBWNWEyIDIgMCAwIDAtMi0yaC0zbTAgMThoM2EyIDIgMCAwIDAgMi0ydi0zTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDNcIlxuICB9KSk7XG59KTtcbk1heGltaXplLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1heGltaXplLmRpc3BsYXlOYW1lID0gJ01heGltaXplJztcbmV4cG9ydCBkZWZhdWx0IE1heGltaXplOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNZWggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjkuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTUuMDFcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5NZWgucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVoLmRpc3BsYXlOYW1lID0gJ01laCc7XG5leHBvcnQgZGVmYXVsdCBNZWg7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1lbnUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjNcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCI2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuTWVudS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NZW51LmRpc3BsYXlOYW1lID0gJ01lbnUnO1xuZXhwb3J0IGRlZmF1bHQgTWVudTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWVzc2FnZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMSAxMS41YTguMzggOC4zOCAwIDAgMS0uOSAzLjggOC41IDguNSAwIDAgMS03LjYgNC43IDguMzggOC4zOCAwIDAgMS0zLjgtLjlMMyAyMWwxLjktNS43YTguMzggOC4zOCAwIDAgMS0uOS0zLjggOC41IDguNSAwIDAgMSA0LjctNy42IDguMzggOC4zOCAwIDAgMSAzLjgtLjloLjVhOC40OCA4LjQ4IDAgMCAxIDggOHYuNXpcIlxuICB9KSk7XG59KTtcbk1lc3NhZ2VDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWVzc2FnZUNpcmNsZS5kaXNwbGF5TmFtZSA9ICdNZXNzYWdlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1lc3NhZ2VTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTVhMiAyIDAgMCAxLTIgMkg3bC00IDRWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ6XCJcbiAgfSkpO1xufSk7XG5NZXNzYWdlU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1lc3NhZ2VTcXVhcmUuZGlzcGxheU5hbWUgPSAnTWVzc2FnZVNxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaWNPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSA5djNhMyAzIDAgMCAwIDUuMTIgMi4xMk0xNSA5LjM0VjRhMyAzIDAgMCAwLTUuOTQtLjZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMm0xNCAwdjJhNyA3IDAgMCAxLS4xMSAxLjIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjNcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5NaWNPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWljT2ZmLmRpc3BsYXlOYW1lID0gJ01pY09mZic7XG5leHBvcnQgZGVmYXVsdCBNaWNPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pYyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMiAxYTMgMyAwIDAgMC0zIDN2OGEzIDMgMCAwIDAgNiAwVjRhMyAzIDAgMCAwLTMtM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSAxMHYyYTcgNyAwIDAgMS0xNCAwdi0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMjNcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5NaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWljLmRpc3BsYXlOYW1lID0gJ01pYyc7XG5leHBvcnQgZGVmYXVsdCBNaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbmltaXplMiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgMTQgMTAgMTQgMTAgMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIwIDEwIDE0IDEwIDE0IDRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNFwiLFxuICAgIHkxOiBcIjEwXCIsXG4gICAgeDI6IFwiMjFcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiM1wiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pKTtcbn0pO1xuTWluaW1pemUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbmltaXplMi5kaXNwbGF5TmFtZSA9ICdNaW5pbWl6ZTInO1xuZXhwb3J0IGRlZmF1bHQgTWluaW1pemUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW5pbWl6ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDN2M2EyIDIgMCAwIDEtMiAySDNtMTggMGgtM2EyIDIgMCAwIDEtMi0yVjNtMCAxOHYtM2EyIDIgMCAwIDEgMi0yaDNNMyAxNmgzYTIgMiAwIDAgMSAyIDJ2M1wiXG4gIH0pKTtcbn0pO1xuTWluaW1pemUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTWluaW1pemUuZGlzcGxheU5hbWUgPSAnTWluaW1pemUnO1xuZXhwb3J0IGRlZmF1bHQgTWluaW1pemU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1pbnVzQ2lyY2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5NaW51c0NpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW51c0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdNaW51c0NpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBNaW51c0NpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTWludXNTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcbk1pbnVzU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1pbnVzU3F1YXJlLmRpc3BsYXlOYW1lID0gJ01pbnVzU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IE1pbnVzU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNaW51cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5NaW51cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5NaW51cy5kaXNwbGF5TmFtZSA9ICdNaW51cyc7XG5leHBvcnQgZGVmYXVsdCBNaW51czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9uaXRvciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOFwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMTdcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjIxXCJcbiAgfSkpO1xufSk7XG5Nb25pdG9yLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk1vbml0b3IuZGlzcGxheU5hbWUgPSAnTW9uaXRvcic7XG5leHBvcnQgZGVmYXVsdCBNb25pdG9yOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBNb29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDEyLjc5QTkgOSAwIDEgMSAxMS4yMSAzIDcgNyAwIDAgMCAyMSAxMi43OXpcIlxuICB9KSk7XG59KTtcbk1vb24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9vbi5kaXNwbGF5TmFtZSA9ICdNb29uJztcbmV4cG9ydCBkZWZhdWx0IE1vb247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vcmVIb3Jpem9udGFsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTlcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNVwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Nb3JlSG9yaXpvbnRhbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3JlSG9yaXpvbnRhbC5kaXNwbGF5TmFtZSA9ICdNb3JlSG9yaXpvbnRhbCc7XG5leHBvcnQgZGVmYXVsdCBNb3JlSG9yaXpvbnRhbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW9yZVZlcnRpY2FsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcjogXCIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjE5XCIsXG4gICAgcjogXCIxXCJcbiAgfSkpO1xufSk7XG5Nb3JlVmVydGljYWwucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTW9yZVZlcnRpY2FsLmRpc3BsYXlOYW1lID0gJ01vcmVWZXJ0aWNhbCc7XG5leHBvcnQgZGVmYXVsdCBNb3JlVmVydGljYWw7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE1vdXNlUG9pbnRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zIDNsNy4wNyAxNi45NyAyLjUxLTcuMzkgNy4zOS0yLjUxTDMgM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMyAxM2w2IDZcIlxuICB9KSk7XG59KTtcbk1vdXNlUG9pbnRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3VzZVBvaW50ZXIuZGlzcGxheU5hbWUgPSAnTW91c2VQb2ludGVyJztcbmV4cG9ydCBkZWZhdWx0IE1vdXNlUG9pbnRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTW92ZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjUgOSAyIDEyIDUgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjkgNSAxMiAyIDE1IDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE1IDE5IDEyIDIyIDkgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDkgMjIgMTIgMTkgMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIyMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMlwiXG4gIH0pKTtcbn0pO1xuTW92ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Nb3ZlLmRpc3BsYXlOYW1lID0gJ01vdmUnO1xuZXhwb3J0IGRlZmF1bHQgTW92ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgTXVzaWMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNOSAxOFY1bDEyLTJ2MTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjZcIixcbiAgICBjeTogXCIxOFwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCIxNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pKTtcbn0pO1xuTXVzaWMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTXVzaWMuZGlzcGxheU5hbWUgPSAnTXVzaWMnO1xuZXhwb3J0IGRlZmF1bHQgTXVzaWM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE5hdmlnYXRpb24yID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMiAyIDE5IDIxIDEyIDE3IDUgMjEgMTIgMlwiXG4gIH0pKTtcbn0pO1xuTmF2aWdhdGlvbjIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuTmF2aWdhdGlvbjIuZGlzcGxheU5hbWUgPSAnTmF2aWdhdGlvbjInO1xuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbjI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIE5hdmlnYXRpb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjMgMTEgMjIgMiAxMyAyMSAxMSAxMyAzIDExXCJcbiAgfSkpO1xufSk7XG5OYXZpZ2F0aW9uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk5hdmlnYXRpb24uZGlzcGxheU5hbWUgPSAnTmF2aWdhdGlvbic7XG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBPY3RhZ29uID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCI3Ljg2IDIgMTYuMTQgMiAyMiA3Ljg2IDIyIDE2LjE0IDE2LjE0IDIyIDcuODYgMjIgMiAxNi4xNCAyIDcuODYgNy44NiAyXCJcbiAgfSkpO1xufSk7XG5PY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbk9jdGFnb24uZGlzcGxheU5hbWUgPSAnT2N0YWdvbic7XG5leHBvcnQgZGVmYXVsdCBPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYWNrYWdlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE2LjVcIixcbiAgICB5MTogXCI5LjRcIixcbiAgICB4MjogXCI3LjVcIixcbiAgICB5MjogXCI0LjIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzLjI3IDYuOTYgMTIgMTIuMDEgMjAuNzMgNi45NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjIuMDhcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QYWNrYWdlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhY2thZ2UuZGlzcGxheU5hbWUgPSAnUGFja2FnZSc7XG5leHBvcnQgZGVmYXVsdCBQYWNrYWdlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXBlcmNsaXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEuNDQgMTEuMDVsLTkuMTkgOS4xOWE2IDYgMCAwIDEtOC40OS04LjQ5bDkuMTktOS4xOWE0IDQgMCAwIDEgNS42NiA1LjY2bC05LjIgOS4xOWEyIDIgMCAwIDEtMi44My0yLjgzbDguNDktOC40OFwiXG4gIH0pKTtcbn0pO1xuUGFwZXJjbGlwLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhcGVyY2xpcC5kaXNwbGF5TmFtZSA9ICdQYXBlcmNsaXAnO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXJjbGlwOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXVzZUNpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTBcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjEwXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE0XCIsXG4gICAgeTE6IFwiMTVcIixcbiAgICB4MjogXCIxNFwiLFxuICAgIHkyOiBcIjlcIlxuICB9KSk7XG59KTtcblBhdXNlQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhdXNlQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1BhdXNlQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBhdXNlQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQYXVzZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjZcIixcbiAgICB5OiBcIjRcIixcbiAgICB3aWR0aDogXCI0XCIsXG4gICAgaGVpZ2h0OiBcIjE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiNFwiLFxuICAgIHdpZHRoOiBcIjRcIixcbiAgICBoZWlnaHQ6IFwiMTZcIlxuICB9KSk7XG59KTtcblBhdXNlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBhdXNlLmRpc3BsYXlOYW1lID0gJ1BhdXNlJztcbmV4cG9ydCBkZWZhdWx0IFBhdXNlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQZW5Ub29sID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEyIDE5bDctNyAzIDMtNyA3LTMtM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOCAxM2wtMS41LTcuNUwyIDJsMy41IDE0LjVMMTMgMThsNS01elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIgMmw3LjU4NiA3LjU4NlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuUGVuVG9vbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QZW5Ub29sLmRpc3BsYXlOYW1lID0gJ1BlblRvb2wnO1xuZXhwb3J0IGRlZmF1bHQgUGVuVG9vbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGVyY2VudCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOVwiLFxuICAgIHkxOiBcIjVcIixcbiAgICB4MjogXCI1XCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjYuNVwiLFxuICAgIGN5OiBcIjYuNVwiLFxuICAgIHI6IFwiMi41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxNy41XCIsXG4gICAgY3k6IFwiMTcuNVwiLFxuICAgIHI6IFwiMi41XCJcbiAgfSkpO1xufSk7XG5QZXJjZW50LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBlcmNlbnQuZGlzcGxheU5hbWUgPSAnUGVyY2VudCc7XG5leHBvcnQgZGVmYXVsdCBQZXJjZW50OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZUNhbGwgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuMDUgNUE1IDUgMCAwIDEgMTkgOC45NU0xNS4wNSAxQTkgOSAwIDAgMSAyMyA4Ljk0bS0xIDcuOTh2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lQ2FsbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUNhbGwuZGlzcGxheU5hbWUgPSAnUGhvbmVDYWxsJztcbmV4cG9ydCBkZWZhdWx0IFBob25lQ2FsbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVGb3J3YXJkZWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxOSAxIDIzIDUgMTkgOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZUZvcndhcmRlZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZUZvcndhcmRlZC5kaXNwbGF5TmFtZSA9ICdQaG9uZUZvcndhcmRlZCc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZUZvcndhcmRlZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVJbmNvbWluZyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDIgMTYgOCAyMiA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjNcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTZcIixcbiAgICB5MjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lSW5jb21pbmcucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGhvbmVJbmNvbWluZy5kaXNwbGF5TmFtZSA9ICdQaG9uZUluY29taW5nJztcbmV4cG9ydCBkZWZhdWx0IFBob25lSW5jb21pbmc7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBob25lTWlzc2VkID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjE3XCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE3XCIsXG4gICAgeTE6IFwiMVwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyIDE2LjkydjNhMiAyIDAgMCAxLTIuMTggMiAxOS43OSAxOS43OSAwIDAgMS04LjYzLTMuMDcgMTkuNSAxOS41IDAgMCAxLTYtNiAxOS43OSAxOS43OSAwIDAgMS0zLjA3LTguNjdBMiAyIDAgMCAxIDQuMTEgMmgzYTIgMiAwIDAgMSAyIDEuNzIgMTIuODQgMTIuODQgMCAwIDAgLjcgMi44MSAyIDIgMCAwIDEtLjQ1IDIuMTFMOC4wOSA5LjkxYTE2IDE2IDAgMCAwIDYgNmwxLjI3LTEuMjdhMiAyIDAgMCAxIDIuMTEtLjQ1IDEyLjg0IDEyLjg0IDAgMCAwIDIuODEuN0EyIDIgMCAwIDEgMjIgMTYuOTJ6XCJcbiAgfSkpO1xufSk7XG5QaG9uZU1pc3NlZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZU1pc3NlZC5kaXNwbGF5TmFtZSA9ICdQaG9uZU1pc3NlZCc7XG5leHBvcnQgZGVmYXVsdCBQaG9uZU1pc3NlZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmVPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTAuNjggMTMuMzFhMTYgMTYgMCAwIDAgMy40MSAyLjZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjcgMiAyIDAgMCAxIDEuNzIgMnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjQyIDE5LjQyIDAgMCAxLTMuMzMtMi42N20tMi42Ny0zLjM0YTE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42M0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSk7XG59KTtcblBob25lT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lT2ZmLmRpc3BsYXlOYW1lID0gJ1Bob25lT2ZmJztcbmV4cG9ydCBkZWZhdWx0IFBob25lT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaG9uZU91dGdvaW5nID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjMgNyAyMyAxIDE3IDFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNlwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxNi45MnYzYTIgMiAwIDAgMS0yLjE4IDIgMTkuNzkgMTkuNzkgMCAwIDEtOC42My0zLjA3IDE5LjUgMTkuNSAwIDAgMS02LTYgMTkuNzkgMTkuNzkgMCAwIDEtMy4wNy04LjY3QTIgMiAwIDAgMSA0LjExIDJoM2EyIDIgMCAwIDEgMiAxLjcyIDEyLjg0IDEyLjg0IDAgMCAwIC43IDIuODEgMiAyIDAgMCAxLS40NSAyLjExTDguMDkgOS45MWExNiAxNiAwIDAgMCA2IDZsMS4yNy0xLjI3YTIgMiAwIDAgMSAyLjExLS40NSAxMi44NCAxMi44NCAwIDAgMCAyLjgxLjdBMiAyIDAgMCAxIDIyIDE2LjkyelwiXG4gIH0pKTtcbn0pO1xuUGhvbmVPdXRnb2luZy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QaG9uZU91dGdvaW5nLmRpc3BsYXlOYW1lID0gJ1Bob25lT3V0Z29pbmcnO1xuZXhwb3J0IGRlZmF1bHQgUGhvbmVPdXRnb2luZzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGhvbmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjIgMTYuOTJ2M2EyIDIgMCAwIDEtMi4xOCAyIDE5Ljc5IDE5Ljc5IDAgMCAxLTguNjMtMy4wNyAxOS41IDE5LjUgMCAwIDEtNi02IDE5Ljc5IDE5Ljc5IDAgMCAxLTMuMDctOC42N0EyIDIgMCAwIDEgNC4xMSAyaDNhMiAyIDAgMCAxIDIgMS43MiAxMi44NCAxMi44NCAwIDAgMCAuNyAyLjgxIDIgMiAwIDAgMS0uNDUgMi4xMUw4LjA5IDkuOTFhMTYgMTYgMCAwIDAgNiA2bDEuMjctMS4yN2EyIDIgMCAwIDEgMi4xMS0uNDUgMTIuODQgMTIuODQgMCAwIDAgMi44MS43QTIgMiAwIDAgMSAyMiAxNi45MnpcIlxuICB9KSk7XG59KTtcblBob25lLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBob25lLmRpc3BsYXlOYW1lID0gJ1Bob25lJztcbmV4cG9ydCBkZWZhdWx0IFBob25lOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQaWVDaGFydCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMiAxMkExMCAxMCAwIDAgMCAxMiAydjEwelwiXG4gIH0pKTtcbn0pO1xuUGllQ2hhcnQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGllQ2hhcnQuZGlzcGxheU5hbWUgPSAnUGllQ2hhcnQnO1xuZXhwb3J0IGRlZmF1bHQgUGllQ2hhcnQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsYXlDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMCA4IDE2IDEyIDEwIDE2IDEwIDhcIlxuICB9KSk7XG59KTtcblBsYXlDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGxheUNpcmNsZS5kaXNwbGF5TmFtZSA9ICdQbGF5Q2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBsYXlDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsYXkgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjUgMyAxOSAxMiA1IDIxIDUgM1wiXG4gIH0pKTtcbn0pO1xuUGxheS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5QbGF5LmRpc3BsYXlOYW1lID0gJ1BsYXknO1xuZXhwb3J0IGRlZmF1bHQgUGxheTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUGx1c0NpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMlwiLFxuICAgIHgyOiBcIjE2XCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBsdXNDaXJjbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUGx1c0NpcmNsZS5kaXNwbGF5TmFtZSA9ICdQbHVzQ2lyY2xlJztcbmV4cG9ydCBkZWZhdWx0IFBsdXNDaXJjbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFBsdXNTcXVhcmUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIzXCIsXG4gICAgeTogXCIzXCIsXG4gICAgd2lkdGg6IFwiMThcIixcbiAgICBoZWlnaHQ6IFwiMThcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxNlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QbHVzU3F1YXJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsdXNTcXVhcmUuZGlzcGxheU5hbWUgPSAnUGx1c1NxdWFyZSc7XG5leHBvcnQgZGVmYXVsdCBQbHVzU3F1YXJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQbHVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI1XCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIxOVwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSkpO1xufSk7XG5QbHVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBsdXMuZGlzcGxheU5hbWUgPSAnUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBQbHVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQb2NrZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNCAzaDE2YTIgMiAwIDAgMSAyIDJ2NmExMCAxMCAwIDAgMS0xMCAxMEExMCAxMCAwIDAgMSAyIDExVjVhMiAyIDAgMCAxIDItMnpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggMTAgMTIgMTQgMTYgMTBcIlxuICB9KSk7XG59KTtcblBvY2tldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Qb2NrZXQuZGlzcGxheU5hbWUgPSAnUG9ja2V0JztcbmV4cG9ydCBkZWZhdWx0IFBvY2tldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUG93ZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTguMzYgNi42NGE5IDkgMCAxIDEtMTIuNzMgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblBvd2VyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblBvd2VyLmRpc3BsYXlOYW1lID0gJ1Bvd2VyJztcbmV4cG9ydCBkZWZhdWx0IFBvd2VyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBQcmludGVyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiNiA5IDYgMiAxOCAyIDE4IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI2XCIsXG4gICAgeTogXCIxNFwiLFxuICAgIHdpZHRoOiBcIjEyXCIsXG4gICAgaGVpZ2h0OiBcIjhcIlxuICB9KSk7XG59KTtcblByaW50ZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUHJpbnRlci5kaXNwbGF5TmFtZSA9ICdQcmludGVyJztcbmV4cG9ydCBkZWZhdWx0IFByaW50ZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJhZGlvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjI0IDcuNzZhNiA2IDAgMCAxIDAgOC40OW0tOC40OC0uMDFhNiA2IDAgMCAxIDAtOC40OW0xMS4zMS0yLjgyYTEwIDEwIDAgMCAxIDAgMTQuMTRtLTE0LjE0IDBhMTAgMTAgMCAwIDEgMC0xNC4xNFwiXG4gIH0pKTtcbn0pO1xuUmFkaW8ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmFkaW8uZGlzcGxheU5hbWUgPSAnUmFkaW8nO1xuZXhwb3J0IGRlZmF1bHQgUmFkaW87IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJlZnJlc2hDY3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDQgMSAxMCA3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyAyMCAyMyAxNCAxNyAxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjQ5IDlBOSA5IDAgMCAwIDUuNjQgNS42NEwxIDEwbTIyIDRsLTQuNjQgNC4zNkE5IDkgMCAwIDEgMy41MSAxNVwiXG4gIH0pKTtcbn0pO1xuUmVmcmVzaENjdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZWZyZXNoQ2N3LmRpc3BsYXlOYW1lID0gJ1JlZnJlc2hDY3cnO1xuZXhwb3J0IGRlZmF1bHQgUmVmcmVzaENjdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmVmcmVzaEN3ID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMjMgNCAyMyAxMCAxNyAxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMSAyMCAxIDE0IDcgMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUxIDlhOSA5IDAgMCAxIDE0Ljg1LTMuMzZMMjMgMTBNMSAxNGw0LjY0IDQuMzZBOSA5IDAgMCAwIDIwLjQ5IDE1XCJcbiAgfSkpO1xufSk7XG5SZWZyZXNoQ3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUmVmcmVzaEN3LmRpc3BsYXlOYW1lID0gJ1JlZnJlc2hDdyc7XG5leHBvcnQgZGVmYXVsdCBSZWZyZXNoQ3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJlcGVhdCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDEgMjEgNSAxNyA5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMyAxMVY5YTQgNCAwIDAgMSA0LTRoMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMjMgMyAxOSA3IDE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTN2MmE0IDQgMCAwIDEtNCA0SDNcIlxuICB9KSk7XG59KTtcblJlcGVhdC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5SZXBlYXQuZGlzcGxheU5hbWUgPSAnUmVwZWF0JztcbmV4cG9ydCBkZWZhdWx0IFJlcGVhdDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUmV3aW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSAxOSAyIDEyIDExIDUgMTEgMTlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMjIgMTkgMTMgMTIgMjIgNSAyMiAxOVwiXG4gIH0pKTtcbn0pO1xuUmV3aW5kLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJld2luZC5kaXNwbGF5TmFtZSA9ICdSZXdpbmQnO1xuZXhwb3J0IGRlZmF1bHQgUmV3aW5kOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBSb3RhdGVDY3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxIDQgMSAxMCA3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMy41MSAxNWE5IDkgMCAxIDAgMi4xMy05LjM2TDEgMTBcIlxuICB9KSk7XG59KTtcblJvdGF0ZUNjdy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Sb3RhdGVDY3cuZGlzcGxheU5hbWUgPSAnUm90YXRlQ2N3JztcbmV4cG9ydCBkZWZhdWx0IFJvdGF0ZUNjdzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgUm90YXRlQ3cgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA0IDIzIDEwIDE3IDEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNDkgMTVhOSA5IDAgMSAxLTIuMTItOS4zNkwyMyAxMFwiXG4gIH0pKTtcbn0pO1xuUm90YXRlQ3cucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuUm90YXRlQ3cuZGlzcGxheU5hbWUgPSAnUm90YXRlQ3cnO1xuZXhwb3J0IGRlZmF1bHQgUm90YXRlQ3c7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFJzcyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDExYTkgOSAwIDAgMSA5IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk00IDRhMTYgMTYgMCAwIDEgMTYgMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjVcIixcbiAgICBjeTogXCIxOVwiLFxuICAgIHI6IFwiMVwiXG4gIH0pKTtcbn0pO1xuUnNzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblJzcy5kaXNwbGF5TmFtZSA9ICdSc3MnO1xuZXhwb3J0IGRlZmF1bHQgUnNzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTYXZlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTFsNSA1djExYTIgMiAwIDAgMS0yIDJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAyMSAxNyAxMyA3IDEzIDcgMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjcgMyA3IDggMTUgOFwiXG4gIH0pKTtcbn0pO1xuU2F2ZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TYXZlLmRpc3BsYXlOYW1lID0gJ1NhdmUnO1xuZXhwb3J0IGRlZmF1bHQgU2F2ZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2Npc3NvcnMgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiNlwiLFxuICAgIHI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNlwiLFxuICAgIGN5OiBcIjE4XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCI0XCIsXG4gICAgeDI6IFwiOC4xMlwiLFxuICAgIHkyOiBcIjE1Ljg4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTQuNDdcIixcbiAgICB5MTogXCIxNC40OFwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4LjEyXCIsXG4gICAgeTE6IFwiOC4xMlwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSk7XG59KTtcblNjaXNzb3JzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNjaXNzb3JzLmRpc3BsYXlOYW1lID0gJ1NjaXNzb3JzJztcbmV4cG9ydCBkZWZhdWx0IFNjaXNzb3JzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZWFyY2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMVwiLFxuICAgIGN5OiBcIjExXCIsXG4gICAgcjogXCI4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjE2LjY1XCIsXG4gICAgeTI6IFwiMTYuNjVcIlxuICB9KSk7XG59KTtcblNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZWFyY2guZGlzcGxheU5hbWUgPSAnU2VhcmNoJztcbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2VuZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMVwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjIyIDIgMTUgMjIgMTEgMTMgMiA5IDIyIDJcIlxuICB9KSk7XG59KTtcblNlbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2VuZC5kaXNwbGF5TmFtZSA9ICdTZW5kJztcbmV4cG9ydCBkZWZhdWx0IFNlbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNlcnZlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCI4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjE0XCIsXG4gICAgd2lkdGg6IFwiMjBcIixcbiAgICBoZWlnaHQ6IFwiOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCI2LjAxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjYuMDFcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pKTtcbn0pO1xuU2VydmVyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNlcnZlci5kaXNwbGF5TmFtZSA9ICdTZXJ2ZXInO1xuZXhwb3J0IGRlZmF1bHQgU2VydmVyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTZXR0aW5ncyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS40IDE1YTEuNjUgMS42NSAwIDAgMCAuMzMgMS44MmwuMDYuMDZhMiAyIDAgMCAxIDAgMi44MyAyIDIgMCAwIDEtMi44MyAwbC0uMDYtLjA2YTEuNjUgMS42NSAwIDAgMC0xLjgyLS4zMyAxLjY1IDEuNjUgMCAwIDAtMSAxLjUxVjIxYTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxLTItMnYtLjA5QTEuNjUgMS42NSAwIDAgMCA5IDE5LjRhMS42NSAxLjY1IDAgMCAwLTEuODIuMzNsLS4wNi4wNmEyIDIgMCAwIDEtMi44MyAwIDIgMiAwIDAgMSAwLTIuODNsLjA2LS4wNmExLjY1IDEuNjUgMCAwIDAgLjMzLTEuODIgMS42NSAxLjY1IDAgMCAwLTEuNTEtMUgzYTIgMiAwIDAgMS0yLTIgMiAyIDAgMCAxIDItMmguMDlBMS42NSAxLjY1IDAgMCAwIDQuNiA5YTEuNjUgMS42NSAwIDAgMC0uMzMtMS44MmwtLjA2LS4wNmEyIDIgMCAwIDEgMC0yLjgzIDIgMiAwIDAgMSAyLjgzIDBsLjA2LjA2YTEuNjUgMS42NSAwIDAgMCAxLjgyLjMzSDlhMS42NSAxLjY1IDAgMCAwIDEtMS41MVYzYTIgMiAwIDAgMSAyLTIgMiAyIDAgMCAxIDIgMnYuMDlhMS42NSAxLjY1IDAgMCAwIDEgMS41MSAxLjY1IDEuNjUgMCAwIDAgMS44Mi0uMzNsLjA2LS4wNmEyIDIgMCAwIDEgMi44MyAwIDIgMiAwIDAgMSAwIDIuODNsLS4wNi4wNmExLjY1IDEuNjUgMCAwIDAtLjMzIDEuODJWOWExLjY1IDEuNjUgMCAwIDAgMS41MSAxSDIxYTIgMiAwIDAgMSAyIDIgMiAyIDAgMCAxLTIgMmgtLjA5YTEuNjUgMS42NSAwIDAgMC0xLjUxIDF6XCJcbiAgfSkpO1xufSk7XG5TZXR0aW5ncy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TZXR0aW5ncy5kaXNwbGF5TmFtZSA9ICdTZXR0aW5ncyc7XG5leHBvcnQgZGVmYXVsdCBTZXR0aW5nczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hhcmUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMThcIixcbiAgICBjeTogXCI1XCIsXG4gICAgcjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI2XCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4XCIsXG4gICAgY3k6IFwiMTlcIixcbiAgICByOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI4LjU5XCIsXG4gICAgeTE6IFwiMTMuNTFcIixcbiAgICB4MjogXCIxNS40MlwiLFxuICAgIHkyOiBcIjE3LjQ5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTUuNDFcIixcbiAgICB5MTogXCI2LjUxXCIsXG4gICAgeDI6IFwiOC41OVwiLFxuICAgIHkyOiBcIjEwLjQ5XCJcbiAgfSkpO1xufSk7XG5TaGFyZTIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hhcmUyLmRpc3BsYXlOYW1lID0gJ1NoYXJlMic7XG5leHBvcnQgZGVmYXVsdCBTaGFyZTI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNoYXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQgMTJ2OGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDYgMTIgMiA4IDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjJcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSkpO1xufSk7XG5TaGFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaGFyZS5kaXNwbGF5TmFtZSA9ICdTaGFyZSc7XG5leHBvcnQgZGVmYXVsdCBTaGFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2hpZWxkT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE5LjY5IDE0YTYuOSA2LjkgMCAwIDAgLjMxLTJWNWwtOC0zLTMuMTYgMS4xOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTQuNzMgNC43M0w0IDV2N2MwIDYgOCAxMCA4IDEwYTIwLjI5IDIwLjI5IDAgMCAwIDUuNjItNC4zOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuU2hpZWxkT2ZmLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNoaWVsZE9mZi5kaXNwbGF5TmFtZSA9ICdTaGllbGRPZmYnO1xuZXhwb3J0IGRlZmF1bHQgU2hpZWxkT2ZmOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaGllbGQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTIgMjJzOC00IDgtMTBWNWwtOC0zLTggM3Y3YzAgNiA4IDEwIDggMTB6XCJcbiAgfSkpO1xufSk7XG5TaGllbGQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU2hpZWxkLmRpc3BsYXlOYW1lID0gJ1NoaWVsZCc7XG5leHBvcnQgZGVmYXVsdCBTaGllbGQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNob3BwaW5nQmFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTYgMkwzIDZ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjZsLTMtNHpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIzXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDEwYTQgNCAwIDAgMS04IDBcIlxuICB9KSk7XG59KTtcblNob3BwaW5nQmFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNob3BwaW5nQmFnLmRpc3BsYXlOYW1lID0gJ1Nob3BwaW5nQmFnJztcbmV4cG9ydCBkZWZhdWx0IFNob3BwaW5nQmFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaG9wcGluZ0NhcnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI5XCIsXG4gICAgY3k6IFwiMjFcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjIwXCIsXG4gICAgY3k6IFwiMjFcIixcbiAgICByOiBcIjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xIDFoNGwyLjY4IDEzLjM5YTIgMiAwIDAgMCAyIDEuNjFoOS43MmEyIDIgMCAwIDAgMi0xLjYxTDIzIDZINlwiXG4gIH0pKTtcbn0pO1xuU2hvcHBpbmdDYXJ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNob3BwaW5nQ2FydC5kaXNwbGF5TmFtZSA9ICdTaG9wcGluZ0NhcnQnO1xuZXhwb3J0IGRlZmF1bHQgU2hvcHBpbmdDYXJ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaHVmZmxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTYgMyAyMSAzIDIxIDhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIyMVwiLFxuICAgIHkyOiBcIjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjIxIDE2IDIxIDIxIDE2IDIxXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTVcIixcbiAgICB5MTogXCIxNVwiLFxuICAgIHgyOiBcIjIxXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCI5XCJcbiAgfSkpO1xufSk7XG5TaHVmZmxlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNodWZmbGUuZGlzcGxheU5hbWUgPSAnU2h1ZmZsZSc7XG5leHBvcnQgZGVmYXVsdCBTaHVmZmxlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTaWRlYmFyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pKTtcbn0pO1xuU2lkZWJhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TaWRlYmFyLmRpc3BsYXlOYW1lID0gJ1NpZGViYXInO1xuZXhwb3J0IGRlZmF1bHQgU2lkZWJhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2tpcEJhY2sgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjE5IDIwIDkgMTIgMTkgNCAxOSAyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjVcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjVcIixcbiAgICB5MjogXCI1XCJcbiAgfSkpO1xufSk7XG5Ta2lwQmFjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ta2lwQmFjay5kaXNwbGF5TmFtZSA9ICdTa2lwQmFjayc7XG5leHBvcnQgZGVmYXVsdCBTa2lwQmFjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2tpcEZvcndhcmQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjUgNCAxNSAxMiA1IDIwIDUgNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE5XCIsXG4gICAgeTE6IFwiNVwiLFxuICAgIHgyOiBcIjE5XCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSk7XG59KTtcblNraXBGb3J3YXJkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNraXBGb3J3YXJkLmRpc3BsYXlOYW1lID0gJ1NraXBGb3J3YXJkJztcbmV4cG9ydCBkZWZhdWx0IFNraXBGb3J3YXJkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGFjayA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC41IDEwYy0uODMgMC0xLjUtLjY3LTEuNS0xLjV2LTVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjV2NWMwIC44My0uNjcgMS41LTEuNSAxLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjAuNSAxMEgxOVY4LjVjMC0uODMuNjctMS41IDEuNS0xLjVzMS41LjY3IDEuNSAxLjUtLjY3IDEuNS0xLjUgMS41elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNSAxNGMuODMgMCAxLjUuNjcgMS41IDEuNXY1YzAgLjgzLS42NyAxLjUtMS41IDEuNVM4IDIxLjMzIDggMjAuNXYtNWMwLS44My42Ny0xLjUgMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0zLjUgMTRINXYxLjVjMCAuODMtLjY3IDEuNS0xLjUgMS41UzIgMTYuMzMgMiAxNS41IDIuNjcgMTQgMy41IDE0elwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDE0LjVjMC0uODMuNjctMS41IDEuNS0xLjVoNWMuODMgMCAxLjUuNjcgMS41IDEuNXMtLjY3IDEuNS0xLjUgMS41aC01Yy0uODMgMC0xLjUtLjY3LTEuNS0xLjV6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNSAxOUgxNHYxLjVjMCAuODMuNjcgMS41IDEuNSAxLjVzMS41LS42NyAxLjUtMS41LS42Ny0xLjUtMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCA5LjVDMTAgOC42NyA5LjMzIDggOC41IDhoLTVDMi42NyA4IDIgOC42NyAyIDkuNVMyLjY3IDExIDMuNSAxMWg1Yy44MyAwIDEuNS0uNjcgMS41LTEuNXpcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUgNUgxMFYzLjVDMTAgMi42NyA5LjMzIDIgOC41IDJTNyAyLjY3IDcgMy41IDcuNjcgNSA4LjUgNXpcIlxuICB9KSk7XG59KTtcblNsYWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblNsYWNrLmRpc3BsYXlOYW1lID0gJ1NsYWNrJztcbmV4cG9ydCBkZWZhdWx0IFNsYWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTbGFzaCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC45M1wiLFxuICAgIHkxOiBcIjQuOTNcIixcbiAgICB4MjogXCIxOS4wN1wiLFxuICAgIHkyOiBcIjE5LjA3XCJcbiAgfSkpO1xufSk7XG5TbGFzaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbGFzaC5kaXNwbGF5TmFtZSA9ICdTbGFzaCc7XG5leHBvcnQgZGVmYXVsdCBTbGFzaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU2xpZGVycyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiMTRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0XCIsXG4gICAgeTE6IFwiMTBcIixcbiAgICB4MjogXCI0XCIsXG4gICAgeTI6IFwiM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxMlwiLFxuICAgIHkyOiBcIjEyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMFwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE0XCIsXG4gICAgeDI6IFwiN1wiLFxuICAgIHkyOiBcIjE0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxNVwiLFxuICAgIHkyOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxN1wiLFxuICAgIHkxOiBcIjE2XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNlwiXG4gIH0pKTtcbn0pO1xuU2xpZGVycy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TbGlkZXJzLmRpc3BsYXlOYW1lID0gJ1NsaWRlcnMnO1xuZXhwb3J0IGRlZmF1bHQgU2xpZGVyczsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU21hcnRwaG9uZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjVcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNFwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblNtYXJ0cGhvbmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU21hcnRwaG9uZS5kaXNwbGF5TmFtZSA9ICdTbWFydHBob25lJztcbmV4cG9ydCBkZWZhdWx0IFNtYXJ0cGhvbmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNtaWxlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5LjAxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1LjAxXCIsXG4gICAgeTI6IFwiOVwiXG4gIH0pKTtcbn0pO1xuU21pbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU21pbGUuZGlzcGxheU5hbWUgPSAnU21pbGUnO1xuZXhwb3J0IGRlZmF1bHQgU21pbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFNwZWFrZXIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI0XCIsXG4gICAgeTogXCIyXCIsXG4gICAgd2lkdGg6IFwiMTZcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICByeDogXCIyXCIsXG4gICAgcnk6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxNFwiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNlwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiNlwiXG4gIH0pKTtcbn0pO1xuU3BlYWtlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TcGVha2VyLmRpc3BsYXlOYW1lID0gJ1NwZWFrZXInO1xuZXhwb3J0IGRlZmF1bHQgU3BlYWtlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSk7XG59KTtcblNxdWFyZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TcXVhcmUuZGlzcGxheU5hbWUgPSAnU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFNxdWFyZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3RhciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTIgMiAxNS4wOSA4LjI2IDIyIDkuMjcgMTcgMTQuMTQgMTguMTggMjEuMDIgMTIgMTcuNzcgNS44MiAyMS4wMiA3IDE0LjE0IDIgOS4yNyA4LjkxIDguMjYgMTIgMlwiXG4gIH0pKTtcbn0pO1xuU3Rhci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5TdGFyLmRpc3BsYXlOYW1lID0gJ1N0YXInO1xuZXhwb3J0IGRlZmF1bHQgU3RhcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgU3RvcENpcmNsZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjEyXCIsXG4gICAgY3k6IFwiMTJcIixcbiAgICByOiBcIjEwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI5XCIsXG4gICAgeTogXCI5XCIsXG4gICAgd2lkdGg6IFwiNlwiLFxuICAgIGhlaWdodDogXCI2XCJcbiAgfSkpO1xufSk7XG5TdG9wQ2lyY2xlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN0b3BDaXJjbGUuZGlzcGxheU5hbWUgPSAnU3RvcENpcmNsZSc7XG5leHBvcnQgZGVmYXVsdCBTdG9wQ2lyY2xlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdW4gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI0LjIyXCIsXG4gICAgeTE6IFwiNC4yMlwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCI1LjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCIxOC4zNlwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiMTkuNzhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxXCIsXG4gICAgeTE6IFwiMTJcIixcbiAgICB4MjogXCIzXCIsXG4gICAgeTI6IFwiMTJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCIxOS43OFwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCIxOC4zNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4LjM2XCIsXG4gICAgeTE6IFwiNS42NFwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiNC4yMlwiXG4gIH0pKTtcbn0pO1xuU3VuLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblN1bi5kaXNwbGF5TmFtZSA9ICdTdW4nO1xuZXhwb3J0IGRlZmF1bHQgU3VuOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBTdW5yaXNlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDE4YTUgNSAwIDAgMC0xMCAwXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNC4yMlwiLFxuICAgIHkxOiBcIjEwLjIyXCIsXG4gICAgeDI6IFwiNS42NFwiLFxuICAgIHkyOiBcIjExLjY0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjE4XCIsXG4gICAgeDI6IFwiM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOC4zNlwiLFxuICAgIHkxOiBcIjExLjY0XCIsXG4gICAgeDI6IFwiMTkuNzhcIixcbiAgICB5MjogXCIxMC4yMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMjJcIixcbiAgICB4MjogXCIxXCIsXG4gICAgeTI6IFwiMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggNiAxMiAyIDE2IDZcIlxuICB9KSk7XG59KTtcblN1bnJpc2UucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3VucmlzZS5kaXNwbGF5TmFtZSA9ICdTdW5yaXNlJztcbmV4cG9ydCBkZWZhdWx0IFN1bnJpc2U7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFN1bnNldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNyAxOGE1IDUgMCAwIDAtMTAgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjQuMjJcIixcbiAgICB5MTogXCIxMC4yMlwiLFxuICAgIHgyOiBcIjUuNjRcIixcbiAgICB5MjogXCIxMS42NFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjNcIixcbiAgICB5MjogXCIxOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMThcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTguMzZcIixcbiAgICB5MTogXCIxMS42NFwiLFxuICAgIHgyOiBcIjE5Ljc4XCIsXG4gICAgeTI6IFwiMTAuMjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjIyXCIsXG4gICAgeDI6IFwiMVwiLFxuICAgIHkyOiBcIjIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNiA1IDEyIDkgOCA1XCJcbiAgfSkpO1xufSk7XG5TdW5zZXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuU3Vuc2V0LmRpc3BsYXlOYW1lID0gJ1N1bnNldCc7XG5leHBvcnQgZGVmYXVsdCBTdW5zZXQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRhYmxldCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjRcIixcbiAgICB5OiBcIjJcIixcbiAgICB3aWR0aDogXCIxNlwiLFxuICAgIGhlaWdodDogXCIyMFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOFwiLFxuICAgIHgyOiBcIjEyLjAxXCIsXG4gICAgeTI6IFwiMThcIlxuICB9KSk7XG59KTtcblRhYmxldC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UYWJsZXQuZGlzcGxheU5hbWUgPSAnVGFibGV0JztcbmV4cG9ydCBkZWZhdWx0IFRhYmxldDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGFnID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjU5IDEzLjQxbC03LjE3IDcuMTdhMiAyIDAgMCAxLTIuODMgMEwyIDEyVjJoMTBsOC41OSA4LjU5YTIgMiAwIDAgMSAwIDIuODJ6XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiN1wiLFxuICAgIHkxOiBcIjdcIixcbiAgICB4MjogXCI3LjAxXCIsXG4gICAgeTI6IFwiN1wiXG4gIH0pKTtcbn0pO1xuVGFnLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhZy5kaXNwbGF5TmFtZSA9ICdUYWcnO1xuZXhwb3J0IGRlZmF1bHQgVGFnOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUYXJnZXQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiNlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTJcIixcbiAgICBjeTogXCIxMlwiLFxuICAgIHI6IFwiMlwiXG4gIH0pKTtcbn0pO1xuVGFyZ2V0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRhcmdldC5kaXNwbGF5TmFtZSA9ICdUYXJnZXQnO1xuZXhwb3J0IGRlZmF1bHQgVGFyZ2V0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUZXJtaW5hbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgMTcgMTAgMTEgNCA1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTJcIixcbiAgICB5MTogXCIxOVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMTlcIlxuICB9KSk7XG59KTtcblRlcm1pbmFsLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRlcm1pbmFsLmRpc3BsYXlOYW1lID0gJ1Rlcm1pbmFsJztcbmV4cG9ydCBkZWZhdWx0IFRlcm1pbmFsOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUaGVybW9tZXRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNCAxNC43NlYzLjVhMi41IDIuNSAwIDAgMC01IDB2MTEuMjZhNC41IDQuNSAwIDEgMCA1IDB6XCJcbiAgfSkpO1xufSk7XG5UaGVybW9tZXRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UaGVybW9tZXRlci5kaXNwbGF5TmFtZSA9ICdUaGVybW9tZXRlcic7XG5leHBvcnQgZGVmYXVsdCBUaGVybW9tZXRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVGh1bWJzRG93biA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMCAxNXY0YTMgMyAwIDAgMCAzIDNsNC05VjJINS43MmEyIDIgMCAwIDAtMiAxLjdsLTEuMzggOWEyIDIgMCAwIDAgMiAyLjN6bTctMTNoMi42N0EyLjMxIDIuMzEgMCAwIDEgMjIgNHY3YTIuMzEgMi4zMSAwIDAgMS0yLjMzIDJIMTdcIlxuICB9KSk7XG59KTtcblRodW1ic0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGh1bWJzRG93bi5kaXNwbGF5TmFtZSA9ICdUaHVtYnNEb3duJztcbmV4cG9ydCBkZWZhdWx0IFRodW1ic0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRodW1ic1VwID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE0IDlWNWEzIDMgMCAwIDAtMy0zbC00IDl2MTFoMTEuMjhhMiAyIDAgMCAwIDItMS43bDEuMzgtOWEyIDIgMCAwIDAtMi0yLjN6TTcgMjJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAyLTJoM1wiXG4gIH0pKTtcbn0pO1xuVGh1bWJzVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVGh1bWJzVXAuZGlzcGxheU5hbWUgPSAnVGh1bWJzVXAnO1xuZXhwb3J0IGRlZmF1bHQgVGh1bWJzVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRvZ2dsZUxlZnQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxXCIsXG4gICAgeTogXCI1XCIsXG4gICAgd2lkdGg6IFwiMjJcIixcbiAgICBoZWlnaHQ6IFwiMTRcIixcbiAgICByeDogXCI3XCIsXG4gICAgcnk6IFwiN1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOFwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5Ub2dnbGVMZWZ0LnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvZ2dsZUxlZnQuZGlzcGxheU5hbWUgPSAnVG9nZ2xlTGVmdCc7XG5leHBvcnQgZGVmYXVsdCBUb2dnbGVMZWZ0OyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUb2dnbGVSaWdodCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIyMlwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjdcIixcbiAgICByeTogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxNlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIzXCJcbiAgfSkpO1xufSk7XG5Ub2dnbGVSaWdodC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ub2dnbGVSaWdodC5kaXNwbGF5TmFtZSA9ICdUb2dnbGVSaWdodCc7XG5leHBvcnQgZGVmYXVsdCBUb2dnbGVSaWdodDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVG9vbCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNC43IDYuM2ExIDEgMCAwIDAgMCAxLjRsMS42IDEuNmExIDEgMCAwIDAgMS40IDBsMy43Ny0zLjc3YTYgNiAwIDAgMS03Ljk0IDcuOTRsLTYuOTEgNi45MWEyLjEyIDIuMTIgMCAwIDEtMy0zbDYuOTEtNi45MWE2IDYgMCAwIDEgNy45NC03Ljk0bC0zLjc2IDMuNzZ6XCJcbiAgfSkpO1xufSk7XG5Ub29sLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRvb2wuZGlzcGxheU5hbWUgPSAnVG9vbCc7XG5leHBvcnQgZGVmYXVsdCBUb29sOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmFzaDIgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzIDYgNSA2IDIxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZtMyAwVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEwXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxMFwiLFxuICAgIHkyOiBcIjE3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTRcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTdcIlxuICB9KSk7XG59KTtcblRyYXNoMi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5UcmFzaDIuZGlzcGxheU5hbWUgPSAnVHJhc2gyJztcbmV4cG9ydCBkZWZhdWx0IFRyYXNoMjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHJhc2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIzIDYgNSA2IDIxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjZtMyAwVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MlwiXG4gIH0pKTtcbn0pO1xuVHJhc2gucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJhc2guZGlzcGxheU5hbWUgPSAnVHJhc2gnO1xuZXhwb3J0IGRlZmF1bHQgVHJhc2g7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZWxsbyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjNcIixcbiAgICB5OiBcIjNcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxOFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCI3XCIsXG4gICAgeTogXCI3XCIsXG4gICAgd2lkdGg6IFwiM1wiLFxuICAgIGhlaWdodDogXCI5XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicmVjdFwiLCB7XG4gICAgeDogXCIxNFwiLFxuICAgIHk6IFwiN1wiLFxuICAgIHdpZHRoOiBcIjNcIixcbiAgICBoZWlnaHQ6IFwiNVwiXG4gIH0pKTtcbn0pO1xuVHJlbGxvLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRyZWxsby5kaXNwbGF5TmFtZSA9ICdUcmVsbG8nO1xuZXhwb3J0IGRlZmF1bHQgVHJlbGxvOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUcmVuZGluZ0Rvd24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyAxOCAxMy41IDguNSA4LjUgMTMuNSAxIDZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDE4IDIzIDE4IDIzIDEyXCJcbiAgfSkpO1xufSk7XG5UcmVuZGluZ0Rvd24ucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbmRpbmdEb3duLmRpc3BsYXlOYW1lID0gJ1RyZW5kaW5nRG93bic7XG5leHBvcnQgZGVmYXVsdCBUcmVuZGluZ0Rvd247IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyZW5kaW5nVXAgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIyMyA2IDEzLjUgMTUuNSA4LjUgMTAuNSAxIDE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyA2IDIzIDYgMjMgMTJcIlxuICB9KSk7XG59KTtcblRyZW5kaW5nVXAucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJlbmRpbmdVcC5kaXNwbGF5TmFtZSA9ICdUcmVuZGluZ1VwJztcbmV4cG9ydCBkZWZhdWx0IFRyZW5kaW5nVXA7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRyaWFuZ2xlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTEwLjI5IDMuODZMMS44MiAxOGEyIDIgMCAwIDAgMS43MSAzaDE2Ljk0YTIgMiAwIDAgMCAxLjcxLTNMMTMuNzEgMy44NmEyIDIgMCAwIDAtMy40MiAwelwiXG4gIH0pKTtcbn0pO1xuVHJpYW5nbGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHJpYW5nbGUuZGlzcGxheU5hbWUgPSAnVHJpYW5nbGUnO1xuZXhwb3J0IGRlZmF1bHQgVHJpYW5nbGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFRydWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiMVwiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE1XCIsXG4gICAgaGVpZ2h0OiBcIjEzXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDggMjAgOCAyMyAxMSAyMyAxNiAxNiAxNiAxNiA4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI1LjVcIixcbiAgICBjeTogXCIxOC41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjE4LjVcIixcbiAgICBjeTogXCIxOC41XCIsXG4gICAgcjogXCIyLjVcIlxuICB9KSk7XG59KTtcblRydWNrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblRydWNrLmRpc3BsYXlOYW1lID0gJ1RydWNrJztcbmV4cG9ydCBkZWZhdWx0IFRydWNrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBUdiA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjJcIixcbiAgICB5OiBcIjdcIixcbiAgICB3aWR0aDogXCIyMFwiLFxuICAgIGhlaWdodDogXCIxNVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxNyAyIDEyIDcgNyAyXCJcbiAgfSkpO1xufSk7XG5Udi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Udi5kaXNwbGF5TmFtZSA9ICdUdic7XG5leHBvcnQgZGVmYXVsdCBUdjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHdpdGNoID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIxIDJIM3YxNmg1djRsNC00aDVsNC00VjJ6bS0xMCA5VjdtNSA0VjdcIlxuICB9KSk7XG59KTtcblR3aXRjaC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ud2l0Y2guZGlzcGxheU5hbWUgPSAnVHdpdGNoJztcbmV4cG9ydCBkZWZhdWx0IFR3aXRjaDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHdpdHRlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMyAzYTEwLjkgMTAuOSAwIDAgMS0zLjE0IDEuNTMgNC40OCA0LjQ4IDAgMCAwLTcuODYgM3YxQTEwLjY2IDEwLjY2IDAgMCAxIDMgNHMtNCA5IDUgMTNhMTEuNjQgMTEuNjQgMCAwIDEtNyAyYzkgNSAyMCAwIDIwLTExLjVhNC41IDQuNSAwIDAgMC0uMDgtLjgzQTcuNzIgNy43MiAwIDAgMCAyMyAzelwiXG4gIH0pKTtcbn0pO1xuVHdpdHRlci5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Ud2l0dGVyLmRpc3BsYXlOYW1lID0gJ1R3aXR0ZXInO1xuZXhwb3J0IGRlZmF1bHQgVHdpdHRlcjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVHlwZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjQgNyA0IDQgMjAgNCAyMCA3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiOVwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiNFwiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMjBcIlxuICB9KSk7XG59KTtcblR5cGUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVHlwZS5kaXNwbGF5TmFtZSA9ICdUeXBlJztcbmV4cG9ydCBkZWZhdWx0IFR5cGU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVtYnJlbGxhID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIzIDEyYTExLjA1IDExLjA1IDAgMCAwLTIyIDB6bS01IDdhMyAzIDAgMCAxLTYgMHYtN1wiXG4gIH0pKTtcbn0pO1xuVW1icmVsbGEucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVW1icmVsbGEuZGlzcGxheU5hbWUgPSAnVW1icmVsbGEnO1xuZXhwb3J0IGRlZmF1bHQgVW1icmVsbGE7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVuZGVybGluZSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk02IDN2N2E2IDYgMCAwIDAgNiA2IDYgNiAwIDAgMCA2LTZWM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjRcIixcbiAgICB5MTogXCIyMVwiLFxuICAgIHgyOiBcIjIwXCIsXG4gICAgeTI6IFwiMjFcIlxuICB9KSk7XG59KTtcblVuZGVybGluZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VbmRlcmxpbmUuZGlzcGxheU5hbWUgPSAnVW5kZXJsaW5lJztcbmV4cG9ydCBkZWZhdWx0IFVuZGVybGluZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVW5sb2NrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiMTFcIixcbiAgICB3aWR0aDogXCIxOFwiLFxuICAgIGhlaWdodDogXCIxMVwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMVwiXG4gIH0pKTtcbn0pO1xuVW5sb2NrLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVubG9jay5kaXNwbGF5TmFtZSA9ICdVbmxvY2snO1xuZXhwb3J0IGRlZmF1bHQgVW5sb2NrOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVcGxvYWRDbG91ZCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE2IDEyIDEyIDggMTZcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjEyXCIsXG4gICAgeDI6IFwiMTJcIixcbiAgICB5MjogXCIyMVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIwLjM5IDE4LjM5QTUgNSAwIDAgMCAxOCA5aC0xLjI2QTggOCAwIDEgMCAzIDE2LjNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE2IDE2IDEyIDEyIDggMTZcIlxuICB9KSk7XG59KTtcblVwbG9hZENsb3VkLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVwbG9hZENsb3VkLmRpc3BsYXlOYW1lID0gJ1VwbG9hZENsb3VkJztcbmV4cG9ydCBkZWZhdWx0IFVwbG9hZENsb3VkOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVcGxvYWQgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTcgOCAxMiAzIDcgOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiM1wiLFxuICAgIHgyOiBcIjEyXCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblVwbG9hZC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5VcGxvYWQuZGlzcGxheU5hbWUgPSAnVXBsb2FkJztcbmV4cG9ydCBkZWZhdWx0IFVwbG9hZDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlckNoZWNrID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjE3IDExIDE5IDEzIDIzIDlcIlxuICB9KSk7XG59KTtcblVzZXJDaGVjay5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyQ2hlY2suZGlzcGxheU5hbWUgPSAnVXNlckNoZWNrJztcbmV4cG9ydCBkZWZhdWx0IFVzZXJDaGVjazsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlck1pbnVzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjguNVwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjExXCIsXG4gICAgeDI6IFwiMTdcIixcbiAgICB5MjogXCIxMVwiXG4gIH0pKTtcbn0pO1xuVXNlck1pbnVzLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblVzZXJNaW51cy5kaXNwbGF5TmFtZSA9ICdVc2VyTWludXMnO1xuZXhwb3J0IGRlZmF1bHQgVXNlck1pbnVzOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBVc2VyUGx1cyA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDVhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCI4LjVcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMjBcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMjBcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIzXCIsXG4gICAgeTE6IFwiMTFcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjExXCJcbiAgfSkpO1xufSk7XG5Vc2VyUGx1cy5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyUGx1cy5kaXNwbGF5TmFtZSA9ICdVc2VyUGx1cyc7XG5leHBvcnQgZGVmYXVsdCBVc2VyUGx1czsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlclggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg1YTQgNCAwIDAgMC00IDR2MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiOC41XCIsXG4gICAgY3k6IFwiN1wiLFxuICAgIHI6IFwiNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE4XCIsXG4gICAgeTE6IFwiOFwiLFxuICAgIHgyOiBcIjIzXCIsXG4gICAgeTI6IFwiMTNcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjhcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjEzXCJcbiAgfSkpO1xufSk7XG5Vc2VyWC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Vc2VyWC5kaXNwbGF5TmFtZSA9ICdVc2VyWCc7XG5leHBvcnQgZGVmYXVsdCBVc2VyWDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVXNlciA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0yMCAyMXYtMmE0IDQgMCAwIDAtNC00SDhhNCA0IDAgMCAwLTQgNHYyXCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjdcIixcbiAgICByOiBcIjRcIlxuICB9KSk7XG59KTtcblVzZXIucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlci5kaXNwbGF5TmFtZSA9ICdVc2VyJztcbmV4cG9ydCBkZWZhdWx0IFVzZXI7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFVzZXJzID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE3IDIxdi0yYTQgNCAwIDAgMC00LTRINWE0IDQgMCAwIDAtNCA0djJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjlcIixcbiAgICBjeTogXCI3XCIsXG4gICAgcjogXCI0XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMjMgMjF2LTJhNCA0IDAgMCAwLTMtMy44N1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDMuMTNhNCA0IDAgMCAxIDAgNy43NVwiXG4gIH0pKTtcbn0pO1xuVXNlcnMucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVXNlcnMuZGlzcGxheU5hbWUgPSAnVXNlcnMnO1xuZXhwb3J0IGRlZmF1bHQgVXNlcnM7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZpZGVvT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2IDE2djFhMiAyIDAgMCAxLTIgMkgzYTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDJtNS42NiAwSDE0YTIgMiAwIDAgMSAyIDJ2My4zNGwxIDFMMjMgN3YxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pKTtcbn0pO1xuVmlkZW9PZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuVmlkZW9PZmYuZGlzcGxheU5hbWUgPSAnVmlkZW9PZmYnO1xuZXhwb3J0IGRlZmF1bHQgVmlkZW9PZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFZpZGVvID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIyMyA3IDE2IDEyIDIzIDE3IDIzIDdcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJyZWN0XCIsIHtcbiAgICB4OiBcIjFcIixcbiAgICB5OiBcIjVcIixcbiAgICB3aWR0aDogXCIxNVwiLFxuICAgIGhlaWdodDogXCIxNFwiLFxuICAgIHJ4OiBcIjJcIixcbiAgICByeTogXCIyXCJcbiAgfSkpO1xufSk7XG5WaWRlby5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5WaWRlby5kaXNwbGF5TmFtZSA9ICdWaWRlbyc7XG5leHBvcnQgZGVmYXVsdCBWaWRlbzsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9pY2VtYWlsID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiNS41XCIsXG4gICAgY3k6IFwiMTEuNVwiLFxuICAgIHI6IFwiNC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxOC41XCIsXG4gICAgY3k6IFwiMTEuNVwiLFxuICAgIHI6IFwiNC41XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNS41XCIsXG4gICAgeTE6IFwiMTZcIixcbiAgICB4MjogXCIxOC41XCIsXG4gICAgeTI6IFwiMTZcIlxuICB9KSk7XG59KTtcblZvaWNlbWFpbC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2ljZW1haWwuZGlzcGxheU5hbWUgPSAnVm9pY2VtYWlsJztcbmV4cG9ydCBkZWZhdWx0IFZvaWNlbWFpbDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9sdW1lMSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTEgNSA2IDkgMiA5IDIgMTUgNiAxNSAxMSAxOSAxMSA1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNMTUuNTQgOC40NmE1IDUgMCAwIDEgMCA3LjA3XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWUxLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZTEuZGlzcGxheU5hbWUgPSAnVm9sdW1lMSc7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWUxOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWUyID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xOS4wNyA0LjkzYTEwIDEwIDAgMCAxIDAgMTQuMTRNMTUuNTQgOC40NmE1IDUgMCAwIDEgMCA3LjA3XCJcbiAgfSkpO1xufSk7XG5Wb2x1bWUyLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblZvbHVtZTIuZGlzcGxheU5hbWUgPSAnVm9sdW1lMic7XG5leHBvcnQgZGVmYXVsdCBWb2x1bWUyOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBWb2x1bWVYID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyM1wiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCIxN1wiLFxuICAgIHkyOiBcIjE1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTdcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuVm9sdW1lWC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2x1bWVYLmRpc3BsYXlOYW1lID0gJ1ZvbHVtZVgnO1xuZXhwb3J0IGRlZmF1bHQgVm9sdW1lWDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgVm9sdW1lID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlnb25cIiwge1xuICAgIHBvaW50czogXCIxMSA1IDYgOSAyIDkgMiAxNSA2IDE1IDExIDE5IDExIDVcIlxuICB9KSk7XG59KTtcblZvbHVtZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5Wb2x1bWUuZGlzcGxheU5hbWUgPSAnVm9sdW1lJztcbmV4cG9ydCBkZWZhdWx0IFZvbHVtZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgV2F0Y2ggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCI3XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMiA5IDEyIDEyIDEzLjUgMTMuNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjUxIDE3LjM1bC0uMzUgMy44M2EyIDIgMCAwIDEtMiAxLjgySDkuODNhMiAyIDAgMCAxLTItMS44MmwtLjM1LTMuODNtLjAxLTEwLjdsLjM1LTMuODNBMiAyIDAgMCAxIDkuODMgMWg0LjM1YTIgMiAwIDAgMSAyIDEuODJsLjM1IDMuODNcIlxuICB9KSk7XG59KTtcbldhdGNoLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldhdGNoLmRpc3BsYXlOYW1lID0gJ1dhdGNoJztcbmV4cG9ydCBkZWZhdWx0IFdhdGNoOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaWZpT2ZmID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjFcIixcbiAgICB5MTogXCIxXCIsXG4gICAgeDI6IFwiMjNcIixcbiAgICB5MjogXCIyM1wiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTE2LjcyIDExLjA2QTEwLjk0IDEwLjk0IDAgMCAxIDE5IDEyLjU1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZDogXCJNNSAxMi41NWExMC45NCAxMC45NCAwIDAgMSA1LjE3LTIuMzlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xMC43MSA1LjA1QTE2IDE2IDAgMCAxIDIyLjU4IDlcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjQyIDlhMTUuOTEgMTUuOTEgMCAwIDEgNC43LTIuODhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk04LjUzIDE2LjExYTYgNiAwIDAgMSA2Ljk1IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxMlwiLFxuICAgIHkxOiBcIjIwXCIsXG4gICAgeDI6IFwiMTIuMDFcIixcbiAgICB5MjogXCIyMFwiXG4gIH0pKTtcbn0pO1xuV2lmaU9mZi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5XaWZpT2ZmLmRpc3BsYXlOYW1lID0gJ1dpZmlPZmYnO1xuZXhwb3J0IGRlZmF1bHQgV2lmaU9mZjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgV2lmaSA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk01IDEyLjU1YTExIDExIDAgMCAxIDE0LjA4IDBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBkOiBcIk0xLjQyIDlhMTYgMTYgMCAwIDEgMjEuMTYgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTguNTMgMTYuMTFhNiA2IDAgMCAxIDYuOTUgMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjEyXCIsXG4gICAgeTE6IFwiMjBcIixcbiAgICB4MjogXCIxMi4wMVwiLFxuICAgIHkyOiBcIjIwXCJcbiAgfSkpO1xufSk7XG5XaWZpLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbldpZmkuZGlzcGxheU5hbWUgPSAnV2lmaSc7XG5leHBvcnQgZGVmYXVsdCBXaWZpOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBXaW5kID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTkuNTkgNC41OUEyIDIgMCAxIDEgMTEgOEgybTEwLjU5IDExLjQxQTIgMiAwIDEgMCAxNCAxNkgybTE1LjczLTguMjdBMi41IDIuNSAwIDEgMSAxOS41IDEySDJcIlxuICB9KSk7XG59KTtcbldpbmQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuV2luZC5kaXNwbGF5TmFtZSA9ICdXaW5kJztcbmV4cG9ydCBkZWZhdWx0IFdpbmQ7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFhDaXJjbGUgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHtcbiAgICBjeDogXCIxMlwiLFxuICAgIGN5OiBcIjEyXCIsXG4gICAgcjogXCIxMFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjE1XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjlcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjlcIixcbiAgICB5MTogXCI5XCIsXG4gICAgeDI6IFwiMTVcIixcbiAgICB5MjogXCIxNVwiXG4gIH0pKTtcbn0pO1xuWENpcmNsZS5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5YQ2lyY2xlLmRpc3BsYXlOYW1lID0gJ1hDaXJjbGUnO1xuZXhwb3J0IGRlZmF1bHQgWENpcmNsZTsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWE9jdGFnb24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWdvblwiLCB7XG4gICAgcG9pbnRzOiBcIjcuODYgMiAxNi4xNCAyIDIyIDcuODYgMjIgMTYuMTQgMTYuMTQgMjIgNy44NiAyMiAyIDE2LjE0IDIgNy44NiA3Ljg2IDJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblhPY3RhZ29uLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblhPY3RhZ29uLmRpc3BsYXlOYW1lID0gJ1hPY3RhZ29uJztcbmV4cG9ydCBkZWZhdWx0IFhPY3RhZ29uOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBYU3F1YXJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInJlY3RcIiwge1xuICAgIHg6IFwiM1wiLFxuICAgIHk6IFwiM1wiLFxuICAgIHdpZHRoOiBcIjE4XCIsXG4gICAgaGVpZ2h0OiBcIjE4XCIsXG4gICAgcng6IFwiMlwiLFxuICAgIHJ5OiBcIjJcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCI5XCIsXG4gICAgeTE6IFwiOVwiLFxuICAgIHgyOiBcIjE1XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxNVwiLFxuICAgIHkxOiBcIjlcIixcbiAgICB4MjogXCI5XCIsXG4gICAgeTI6IFwiMTVcIlxuICB9KSk7XG59KTtcblhTcXVhcmUucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWFNxdWFyZS5kaXNwbGF5TmFtZSA9ICdYU3F1YXJlJztcbmV4cG9ydCBkZWZhdWx0IFhTcXVhcmU7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFggPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMThcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiNlwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiNlwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCIxOFwiLFxuICAgIHkyOiBcIjE4XCJcbiAgfSkpO1xufSk7XG5YLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcblguZGlzcGxheU5hbWUgPSAnWCc7XG5leHBvcnQgZGVmYXVsdCBYOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBZb3V0dWJlID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIGQ6IFwiTTIyLjU0IDYuNDJhMi43OCAyLjc4IDAgMCAwLTEuOTQtMkMxOC44OCA0IDEyIDQgMTIgNHMtNi44OCAwLTguNi40NmEyLjc4IDIuNzggMCAwIDAtMS45NCAyQTI5IDI5IDAgMCAwIDEgMTEuNzVhMjkgMjkgMCAwIDAgLjQ2IDUuMzNBMi43OCAyLjc4IDAgMCAwIDMuNCAxOWMxLjcyLjQ2IDguNi40NiA4LjYuNDZzNi44OCAwIDguNi0uNDZhMi43OCAyLjc4IDAgMCAwIDEuOTQtMiAyOSAyOSAwIDAgMCAuNDYtNS4yNSAyOSAyOSAwIDAgMC0uNDYtNS4zM3pcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiOS43NSAxNS4wMiAxNS41IDExLjc1IDkuNzUgOC40OCA5Ljc1IDE1LjAyXCJcbiAgfSkpO1xufSk7XG5Zb3V0dWJlLnByb3BUeXBlcyA9IHtcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKVxufTtcbllvdXR1YmUuZGlzcGxheU5hbWUgPSAnWW91dHViZSc7XG5leHBvcnQgZGVmYXVsdCBZb3V0dWJlOyIsImZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyBmb3J3YXJkUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBaYXBPZmYgPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIChfcmVmLCByZWYpIHtcbiAgdmFyIF9yZWYkY29sb3IgPSBfcmVmLmNvbG9yLFxuICAgICAgY29sb3IgPSBfcmVmJGNvbG9yID09PSB2b2lkIDAgPyAnY3VycmVudENvbG9yJyA6IF9yZWYkY29sb3IsXG4gICAgICBfcmVmJHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzaXplID0gX3JlZiRzaXplID09PSB2b2lkIDAgPyAyNCA6IF9yZWYkc2l6ZSxcbiAgICAgIHJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgW1wiY29sb3JcIiwgXCJzaXplXCJdKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHJlZjogcmVmLFxuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IHNpemUsXG4gICAgaGVpZ2h0OiBzaXplLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBjb2xvcixcbiAgICBzdHJva2VXaWR0aDogXCIyXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgIHN0cm9rZUxpbmVqb2luOiBcInJvdW5kXCJcbiAgfSwgcmVzdCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwicG9seWxpbmVcIiwge1xuICAgIHBvaW50czogXCIxMi40MSA2Ljc1IDEzIDIgMTAuNTcgNC45MlwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBvbHlsaW5lXCIsIHtcbiAgICBwb2ludHM6IFwiMTguNTcgMTIuOTEgMjEgMTAgMTUuNjYgMTBcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5bGluZVwiLCB7XG4gICAgcG9pbnRzOiBcIjggOCAzIDE0IDEyIDE0IDExIDIyIDE2IDE2XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMVwiLFxuICAgIHkxOiBcIjFcIixcbiAgICB4MjogXCIyM1wiLFxuICAgIHkyOiBcIjIzXCJcbiAgfSkpO1xufSk7XG5aYXBPZmYucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWmFwT2ZmLmRpc3BsYXlOYW1lID0gJ1phcE9mZic7XG5leHBvcnQgZGVmYXVsdCBaYXBPZmY7IiwiZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0LCB7IGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xudmFyIFphcCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwb2x5Z29uXCIsIHtcbiAgICBwb2ludHM6IFwiMTMgMiAzIDE0IDEyIDE0IDExIDIyIDIxIDEwIDEyIDEwIDEzIDJcIlxuICB9KSk7XG59KTtcblphcC5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5aYXAuZGlzcGxheU5hbWUgPSAnWmFwJztcbmV4cG9ydCBkZWZhdWx0IFphcDsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWm9vbUluID0gZm9yd2FyZFJlZihmdW5jdGlvbiAoX3JlZiwgcmVmKSB7XG4gIHZhciBfcmVmJGNvbG9yID0gX3JlZi5jb2xvcixcbiAgICAgIGNvbG9yID0gX3JlZiRjb2xvciA9PT0gdm9pZCAwID8gJ2N1cnJlbnRDb2xvcicgOiBfcmVmJGNvbG9yLFxuICAgICAgX3JlZiRzaXplID0gX3JlZi5zaXplLFxuICAgICAgc2l6ZSA9IF9yZWYkc2l6ZSA9PT0gdm9pZCAwID8gMjQgOiBfcmVmJHNpemUsXG4gICAgICByZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF9yZWYsIFtcImNvbG9yXCIsIFwic2l6ZVwiXSk7XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICByZWY6IHJlZixcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiBzaXplLFxuICAgIGhlaWdodDogc2l6ZSxcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwibm9uZVwiLFxuICAgIHN0cm9rZTogY29sb3IsXG4gICAgc3Ryb2tlV2lkdGg6IFwiMlwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG4gIH0sIHJlc3QpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImNpcmNsZVwiLCB7XG4gICAgY3g6IFwiMTFcIixcbiAgICBjeTogXCIxMVwiLFxuICAgIHI6IFwiOFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjIxXCIsXG4gICAgeTE6IFwiMjFcIixcbiAgICB4MjogXCIxNi42NVwiLFxuICAgIHkyOiBcIjE2LjY1XCJcbiAgfSksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwibGluZVwiLCB7XG4gICAgeDE6IFwiMTFcIixcbiAgICB5MTogXCI4XCIsXG4gICAgeDI6IFwiMTFcIixcbiAgICB5MjogXCIxNFwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblpvb21Jbi5wcm9wVHlwZXMgPSB7XG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSlcbn07XG5ab29tSW4uZGlzcGxheU5hbWUgPSAnWm9vbUluJztcbmV4cG9ydCBkZWZhdWx0IFpvb21JbjsiLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG52YXIgWm9vbU91dCA9IGZvcndhcmRSZWYoZnVuY3Rpb24gKF9yZWYsIHJlZikge1xuICB2YXIgX3JlZiRjb2xvciA9IF9yZWYuY29sb3IsXG4gICAgICBjb2xvciA9IF9yZWYkY29sb3IgPT09IHZvaWQgMCA/ICdjdXJyZW50Q29sb3InIDogX3JlZiRjb2xvcixcbiAgICAgIF9yZWYkc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHNpemUgPSBfcmVmJHNpemUgPT09IHZvaWQgMCA/IDI0IDogX3JlZiRzaXplLFxuICAgICAgcmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBbXCJjb2xvclwiLCBcInNpemVcIl0pO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCBfZXh0ZW5kcyh7XG4gICAgcmVmOiByZWYsXG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogc2l6ZSxcbiAgICBoZWlnaHQ6IHNpemUsXG4gICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcbiAgICBmaWxsOiBcIm5vbmVcIixcbiAgICBzdHJva2U6IGNvbG9yLFxuICAgIHN0cm9rZVdpZHRoOiBcIjJcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInJvdW5kXCIsXG4gICAgc3Ryb2tlTGluZWpvaW46IFwicm91bmRcIlxuICB9LCByZXN0KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJjaXJjbGVcIiwge1xuICAgIGN4OiBcIjExXCIsXG4gICAgY3k6IFwiMTFcIixcbiAgICByOiBcIjhcIlxuICB9KSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIyMVwiLFxuICAgIHkxOiBcIjIxXCIsXG4gICAgeDI6IFwiMTYuNjVcIixcbiAgICB5MjogXCIxNi42NVwiXG4gIH0pLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjhcIixcbiAgICB5MTogXCIxMVwiLFxuICAgIHgyOiBcIjE0XCIsXG4gICAgeTI6IFwiMTFcIlxuICB9KSk7XG59KTtcblpvb21PdXQucHJvcFR5cGVzID0ge1xuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgc2l6ZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLm51bWJlcl0pXG59O1xuWm9vbU91dC5kaXNwbGF5TmFtZSA9ICdab29tT3V0JztcbmV4cG9ydCBkZWZhdWx0IFpvb21PdXQ7IiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBBY3Rpdml0eSB9IGZyb20gJy4vaWNvbnMvYWN0aXZpdHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBaXJwbGF5IH0gZnJvbSAnLi9pY29ucy9haXJwbGF5JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxlcnRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2FsZXJ0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsZXJ0T2N0YWdvbiB9IGZyb20gJy4vaWNvbnMvYWxlcnQtb2N0YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsZXJ0VHJpYW5nbGUgfSBmcm9tICcuL2ljb25zL2FsZXJ0LXRyaWFuZ2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQWxpZ25DZW50ZXIgfSBmcm9tICcuL2ljb25zL2FsaWduLWNlbnRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduSnVzdGlmeSB9IGZyb20gJy4vaWNvbnMvYWxpZ24tanVzdGlmeSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduTGVmdCB9IGZyb20gJy4vaWNvbnMvYWxpZ24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFsaWduUmlnaHQgfSBmcm9tICcuL2ljb25zL2FsaWduLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQW5jaG9yIH0gZnJvbSAnLi9pY29ucy9hbmNob3InO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcGVydHVyZSB9IGZyb20gJy4vaWNvbnMvYXBlcnR1cmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcmNoaXZlIH0gZnJvbSAnLi9pY29ucy9hcmNoaXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93RG93bkxlZnQgfSBmcm9tICcuL2ljb25zL2Fycm93LWRvd24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93RG93blJpZ2h0IH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dEb3duIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dMZWZ0Q2lyY2xlIH0gZnJvbSAnLi9pY29ucy9hcnJvdy1sZWZ0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93TGVmdCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93UmlnaHRDaXJjbGUgfSBmcm9tICcuL2ljb25zL2Fycm93LXJpZ2h0LWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEFycm93UmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcENpcmNsZSB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcExlZnQgfSBmcm9tICcuL2ljb25zL2Fycm93LXVwLWxlZnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBcnJvd1VwUmlnaHQgfSBmcm9tICcuL2ljb25zL2Fycm93LXVwLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQXJyb3dVcCB9IGZyb20gJy4vaWNvbnMvYXJyb3ctdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBdFNpZ24gfSBmcm9tICcuL2ljb25zL2F0LXNpZ24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBBd2FyZCB9IGZyb20gJy4vaWNvbnMvYXdhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCYXJDaGFydDIgfSBmcm9tICcuL2ljb25zL2Jhci1jaGFydC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQmFyQ2hhcnQgfSBmcm9tICcuL2ljb25zL2Jhci1jaGFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhdHRlcnlDaGFyZ2luZyB9IGZyb20gJy4vaWNvbnMvYmF0dGVyeS1jaGFyZ2luZyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJhdHRlcnkgfSBmcm9tICcuL2ljb25zL2JhdHRlcnknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCZWxsT2ZmIH0gZnJvbSAnLi9pY29ucy9iZWxsLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJlbGwgfSBmcm9tICcuL2ljb25zL2JlbGwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCbHVldG9vdGggfSBmcm9tICcuL2ljb25zL2JsdWV0b290aCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvbGQgfSBmcm9tICcuL2ljb25zL2JvbGQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBCb29rT3BlbiB9IGZyb20gJy4vaWNvbnMvYm9vay1vcGVuJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQm9vayB9IGZyb20gJy4vaWNvbnMvYm9vayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJvb2ttYXJrIH0gZnJvbSAnLi9pY29ucy9ib29rbWFyayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEJveCB9IGZyb20gJy4vaWNvbnMvYm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQnJpZWZjYXNlIH0gZnJvbSAnLi9pY29ucy9icmllZmNhc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYWxlbmRhciB9IGZyb20gJy4vaWNvbnMvY2FsZW5kYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYW1lcmFPZmYgfSBmcm9tICcuL2ljb25zL2NhbWVyYS1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDYW1lcmEgfSBmcm9tICcuL2ljb25zL2NhbWVyYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENhc3QgfSBmcm9tICcuL2ljb25zL2Nhc3QnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja0NpcmNsZSB9IGZyb20gJy4vaWNvbnMvY2hlY2stY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hlY2tTcXVhcmUgfSBmcm9tICcuL2ljb25zL2NoZWNrLXNxdWFyZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrIH0gZnJvbSAnLi9pY29ucy9jaGVjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENoZXZyb25Eb3duIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uTGVmdCB9IGZyb20gJy4vaWNvbnMvY2hldnJvbi1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvblJpZ2h0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLXJpZ2h0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvblVwIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9uLXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNEb3duIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNMZWZ0IH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy1sZWZ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2hldnJvbnNSaWdodCB9IGZyb20gJy4vaWNvbnMvY2hldnJvbnMtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGV2cm9uc1VwIH0gZnJvbSAnLi9pY29ucy9jaGV2cm9ucy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENocm9tZSB9IGZyb20gJy4vaWNvbnMvY2hyb21lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbGlwYm9hcmQgfSBmcm9tICcuL2ljb25zL2NsaXBib2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb2NrIH0gZnJvbSAnLi9pY29ucy9jbG9jayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkRHJpenpsZSB9IGZyb20gJy4vaWNvbnMvY2xvdWQtZHJpenpsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENsb3VkTGlnaHRuaW5nIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1saWdodG5pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDbG91ZE9mZiB9IGZyb20gJy4vaWNvbnMvY2xvdWQtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRSYWluIH0gZnJvbSAnLi9pY29ucy9jbG91ZC1yYWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWRTbm93IH0gZnJvbSAnLi9pY29ucy9jbG91ZC1zbm93JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ2xvdWQgfSBmcm9tICcuL2ljb25zL2Nsb3VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29kZSB9IGZyb20gJy4vaWNvbnMvY29kZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvZGVwZW4gfSBmcm9tICcuL2ljb25zL2NvZGVwZW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2Rlc2FuZGJveCB9IGZyb20gJy4vaWNvbnMvY29kZXNhbmRib3gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2ZmZWUgfSBmcm9tICcuL2ljb25zL2NvZmZlZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvbHVtbnMgfSBmcm9tICcuL2ljb25zL2NvbHVtbnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb21tYW5kIH0gZnJvbSAnLi9pY29ucy9jb21tYW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29tcGFzcyB9IGZyb20gJy4vaWNvbnMvY29tcGFzcyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcHkgfSBmcm9tICcuL2ljb25zL2NvcHknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJEb3duTGVmdCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWRvd24tbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckRvd25SaWdodCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWRvd24tcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJMZWZ0RG93biB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWxlZnQtZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lckxlZnRVcCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLWxlZnQtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDb3JuZXJSaWdodERvd24gfSBmcm9tICcuL2ljb25zL2Nvcm5lci1yaWdodC1kb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyUmlnaHRVcCB9IGZyb20gJy4vaWNvbnMvY29ybmVyLXJpZ2h0LXVwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ29ybmVyVXBMZWZ0IH0gZnJvbSAnLi9pY29ucy9jb3JuZXItdXAtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENvcm5lclVwUmlnaHQgfSBmcm9tICcuL2ljb25zL2Nvcm5lci11cC1yaWdodCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIENwdSB9IGZyb20gJy4vaWNvbnMvY3B1JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3JlZGl0Q2FyZCB9IGZyb20gJy4vaWNvbnMvY3JlZGl0LWNhcmQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBDcm9wIH0gZnJvbSAnLi9pY29ucy9jcm9wJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgQ3Jvc3NoYWlyIH0gZnJvbSAnLi9pY29ucy9jcm9zc2hhaXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEYXRhYmFzZSB9IGZyb20gJy4vaWNvbnMvZGF0YWJhc2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEZWxldGUgfSBmcm9tICcuL2ljb25zL2RlbGV0ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERpc2MgfSBmcm9tICcuL2ljb25zL2Rpc2MnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGVDaXJjbGUgfSBmcm9tICcuL2ljb25zL2RpdmlkZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGVTcXVhcmUgfSBmcm9tICcuL2ljb25zL2RpdmlkZS1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEaXZpZGUgfSBmcm9tICcuL2ljb25zL2RpdmlkZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIERvbGxhclNpZ24gfSBmcm9tICcuL2ljb25zL2RvbGxhci1zaWduJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRG93bmxvYWRDbG91ZCB9IGZyb20gJy4vaWNvbnMvZG93bmxvYWQtY2xvdWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEb3dubG9hZCB9IGZyb20gJy4vaWNvbnMvZG93bmxvYWQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmliYmJsZSB9IGZyb20gJy4vaWNvbnMvZHJpYmJibGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBEcm9wbGV0IH0gZnJvbSAnLi9pY29ucy9kcm9wbGV0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRWRpdDIgfSBmcm9tICcuL2ljb25zL2VkaXQtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEVkaXQzIH0gZnJvbSAnLi9pY29ucy9lZGl0LTMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBFZGl0IH0gZnJvbSAnLi9pY29ucy9lZGl0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXh0ZXJuYWxMaW5rIH0gZnJvbSAnLi9pY29ucy9leHRlcm5hbC1saW5rJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXllT2ZmIH0gZnJvbSAnLi9pY29ucy9leWUtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRXllIH0gZnJvbSAnLi9pY29ucy9leWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGYWNlYm9vayB9IGZyb20gJy4vaWNvbnMvZmFjZWJvb2snO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGYXN0Rm9yd2FyZCB9IGZyb20gJy4vaWNvbnMvZmFzdC1mb3J3YXJkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmVhdGhlciB9IGZyb20gJy4vaWNvbnMvZmVhdGhlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpZ21hIH0gZnJvbSAnLi9pY29ucy9maWdtYSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVNaW51cyB9IGZyb20gJy4vaWNvbnMvZmlsZS1taW51cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVQbHVzIH0gZnJvbSAnLi9pY29ucy9maWxlLXBsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlVGV4dCB9IGZyb20gJy4vaWNvbnMvZmlsZS10ZXh0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZSB9IGZyb20gJy4vaWNvbnMvZmlsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZpbG0gfSBmcm9tICcuL2ljb25zL2ZpbG0nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWx0ZXIgfSBmcm9tICcuL2ljb25zL2ZpbHRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZsYWcgfSBmcm9tICcuL2ljb25zL2ZsYWcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXJNaW51cyB9IGZyb20gJy4vaWNvbnMvZm9sZGVyLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRm9sZGVyUGx1cyB9IGZyb20gJy4vaWNvbnMvZm9sZGVyLXBsdXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGb2xkZXIgfSBmcm9tICcuL2ljb25zL2ZvbGRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEZyYW1lciB9IGZyb20gJy4vaWNvbnMvZnJhbWVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRnJvd24gfSBmcm9tICcuL2ljb25zL2Zyb3duJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2lmdCB9IGZyb20gJy4vaWNvbnMvZ2lmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdEJyYW5jaCB9IGZyb20gJy4vaWNvbnMvZ2l0LWJyYW5jaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdENvbW1pdCB9IGZyb20gJy4vaWNvbnMvZ2l0LWNvbW1pdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdE1lcmdlIH0gZnJvbSAnLi9pY29ucy9naXQtbWVyZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHaXRQdWxsUmVxdWVzdCB9IGZyb20gJy4vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEdpdEh1YiB9IGZyb20gJy4vaWNvbnMvZ2l0aHViJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2l0bGFiIH0gZnJvbSAnLi9pY29ucy9naXRsYWInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHbG9iZSB9IGZyb20gJy4vaWNvbnMvZ2xvYmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBHcmlkIH0gZnJvbSAnLi9pY29ucy9ncmlkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGFyZERyaXZlIH0gZnJvbSAnLi9pY29ucy9oYXJkLWRyaXZlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSGFzaCB9IGZyb20gJy4vaWNvbnMvaGFzaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhlYWRwaG9uZXMgfSBmcm9tICcuL2ljb25zL2hlYWRwaG9uZXMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIZWFydCB9IGZyb20gJy4vaWNvbnMvaGVhcnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIZWxwQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9oZWxwLWNpcmNsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEhleGFnb24gfSBmcm9tICcuL2ljb25zL2hleGFnb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBIb21lIH0gZnJvbSAnLi9pY29ucy9ob21lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UgfSBmcm9tICcuL2ljb25zL2ltYWdlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5ib3ggfSBmcm9tICcuL2ljb25zL2luYm94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSW5mbyB9IGZyb20gJy4vaWNvbnMvaW5mbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIEluc3RhZ3JhbSB9IGZyb20gJy4vaWNvbnMvaW5zdGFncmFtJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgSXRhbGljIH0gZnJvbSAnLi9pY29ucy9pdGFsaWMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBLZXkgfSBmcm9tICcuL2ljb25zL2tleSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExheWVycyB9IGZyb20gJy4vaWNvbnMvbGF5ZXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGF5b3V0IH0gZnJvbSAnLi9pY29ucy9sYXlvdXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaWZlQnVveSB9IGZyb20gJy4vaWNvbnMvbGlmZS1idW95JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGluazIgfSBmcm9tICcuL2ljb25zL2xpbmstMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpbmsgfSBmcm9tICcuL2ljb25zL2xpbmsnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaW5rZWRpbiB9IGZyb20gJy4vaWNvbnMvbGlua2VkaW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0IH0gZnJvbSAnLi9pY29ucy9saXN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9hZGVyIH0gZnJvbSAnLi9pY29ucy9sb2FkZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMb2NrIH0gZnJvbSAnLi9pY29ucy9sb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTG9nSW4gfSBmcm9tICcuL2ljb25zL2xvZy1pbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExvZ091dCB9IGZyb20gJy4vaWNvbnMvbG9nLW91dCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1haWwgfSBmcm9tICcuL2ljb25zL21haWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXBQaW4gfSBmcm9tICcuL2ljb25zL21hcC1waW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNYXAgfSBmcm9tICcuL2ljb25zL21hcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1heGltaXplMiB9IGZyb20gJy4vaWNvbnMvbWF4aW1pemUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1heGltaXplIH0gZnJvbSAnLi9pY29ucy9tYXhpbWl6ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1laCB9IGZyb20gJy4vaWNvbnMvbWVoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gJy4vaWNvbnMvbWVudSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lc3NhZ2VDaXJjbGUgfSBmcm9tICcuL2ljb25zL21lc3NhZ2UtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVzc2FnZVNxdWFyZSB9IGZyb20gJy4vaWNvbnMvbWVzc2FnZS1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWNPZmYgfSBmcm9tICcuL2ljb25zL21pYy1vZmYnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaWMgfSBmcm9tICcuL2ljb25zL21pYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbmltaXplMiB9IGZyb20gJy4vaWNvbnMvbWluaW1pemUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbmltaXplIH0gZnJvbSAnLi9pY29ucy9taW5pbWl6ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1pbnVzQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9taW51cy1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNaW51c1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvbWludXMtc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWludXMgfSBmcm9tICcuL2ljb25zL21pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9uaXRvciB9IGZyb20gJy4vaWNvbnMvbW9uaXRvcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1vb24gfSBmcm9tICcuL2ljb25zL21vb24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNb3JlSG9yaXpvbnRhbCB9IGZyb20gJy4vaWNvbnMvbW9yZS1ob3Jpem9udGFsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW9yZVZlcnRpY2FsIH0gZnJvbSAnLi9pY29ucy9tb3JlLXZlcnRpY2FsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW91c2VQb2ludGVyIH0gZnJvbSAnLi9pY29ucy9tb3VzZS1wb2ludGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTW92ZSB9IGZyb20gJy4vaWNvbnMvbW92ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE11c2ljIH0gZnJvbSAnLi9pY29ucy9tdXNpYyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE5hdmlnYXRpb24yIH0gZnJvbSAnLi9pY29ucy9uYXZpZ2F0aW9uLTInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBOYXZpZ2F0aW9uIH0gZnJvbSAnLi9pY29ucy9uYXZpZ2F0aW9uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgT2N0YWdvbiB9IGZyb20gJy4vaWNvbnMvb2N0YWdvbic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhY2thZ2UgfSBmcm9tICcuL2ljb25zL3BhY2thZ2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXBlcmNsaXAgfSBmcm9tICcuL2ljb25zL3BhcGVyY2xpcCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBhdXNlQ2lyY2xlIH0gZnJvbSAnLi9pY29ucy9wYXVzZS1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQYXVzZSB9IGZyb20gJy4vaWNvbnMvcGF1c2UnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQZW5Ub29sIH0gZnJvbSAnLi9pY29ucy9wZW4tdG9vbCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBlcmNlbnQgfSBmcm9tICcuL2ljb25zL3BlcmNlbnQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUNhbGwgfSBmcm9tICcuL2ljb25zL3Bob25lLWNhbGwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZUZvcndhcmRlZCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtZm9yd2FyZGVkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVJbmNvbWluZyB9IGZyb20gJy4vaWNvbnMvcGhvbmUtaW5jb21pbmcnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQaG9uZU1pc3NlZCB9IGZyb20gJy4vaWNvbnMvcGhvbmUtbWlzc2VkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmVPZmYgfSBmcm9tICcuL2ljb25zL3Bob25lLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBob25lT3V0Z29pbmcgfSBmcm9tICcuL2ljb25zL3Bob25lLW91dGdvaW5nJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGhvbmUgfSBmcm9tICcuL2ljb25zL3Bob25lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGllQ2hhcnQgfSBmcm9tICcuL2ljb25zL3BpZS1jaGFydCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsYXlDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BsYXktY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGxheSB9IGZyb20gJy4vaWNvbnMvcGxheSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFBsdXNDaXJjbGUgfSBmcm9tICcuL2ljb25zL3BsdXMtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUGx1c1NxdWFyZSB9IGZyb20gJy4vaWNvbnMvcGx1cy1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQbHVzIH0gZnJvbSAnLi9pY29ucy9wbHVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUG9ja2V0IH0gZnJvbSAnLi9pY29ucy9wb2NrZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQb3dlciB9IGZyb20gJy4vaWNvbnMvcG93ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBQcmludGVyIH0gZnJvbSAnLi9pY29ucy9wcmludGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmFkaW8gfSBmcm9tICcuL2ljb25zL3JhZGlvJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUmVmcmVzaENjdyB9IGZyb20gJy4vaWNvbnMvcmVmcmVzaC1jY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZWZyZXNoQ3cgfSBmcm9tICcuL2ljb25zL3JlZnJlc2gtY3cnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSZXBlYXQgfSBmcm9tICcuL2ljb25zL3JlcGVhdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJld2luZCB9IGZyb20gJy4vaWNvbnMvcmV3aW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm90YXRlQ2N3IH0gZnJvbSAnLi9pY29ucy9yb3RhdGUtY2N3JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm90YXRlQ3cgfSBmcm9tICcuL2ljb25zL3JvdGF0ZS1jdyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFJzcyB9IGZyb20gJy4vaWNvbnMvcnNzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2F2ZSB9IGZyb20gJy4vaWNvbnMvc2F2ZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNjaXNzb3JzIH0gZnJvbSAnLi9pY29ucy9zY2lzc29ycyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gJy4vaWNvbnMvc2VhcmNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2VuZCB9IGZyb20gJy4vaWNvbnMvc2VuZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNlcnZlciB9IGZyb20gJy4vaWNvbnMvc2VydmVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2V0dGluZ3MgfSBmcm9tICcuL2ljb25zL3NldHRpbmdzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hhcmUyIH0gZnJvbSAnLi9pY29ucy9zaGFyZS0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hhcmUgfSBmcm9tICcuL2ljb25zL3NoYXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hpZWxkT2ZmIH0gZnJvbSAnLi9pY29ucy9zaGllbGQtb2ZmJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hpZWxkIH0gZnJvbSAnLi9pY29ucy9zaGllbGQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTaG9wcGluZ0JhZyB9IGZyb20gJy4vaWNvbnMvc2hvcHBpbmctYmFnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2hvcHBpbmdDYXJ0IH0gZnJvbSAnLi9pY29ucy9zaG9wcGluZy1jYXJ0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2h1ZmZsZSB9IGZyb20gJy4vaWNvbnMvc2h1ZmZsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNpZGViYXIgfSBmcm9tICcuL2ljb25zL3NpZGViYXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTa2lwQmFjayB9IGZyb20gJy4vaWNvbnMvc2tpcC1iYWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU2tpcEZvcndhcmQgfSBmcm9tICcuL2ljb25zL3NraXAtZm9yd2FyZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsYWNrIH0gZnJvbSAnLi9pY29ucy9zbGFjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsYXNoIH0gZnJvbSAnLi9pY29ucy9zbGFzaCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNsaWRlcnMgfSBmcm9tICcuL2ljb25zL3NsaWRlcnMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTbWFydHBob25lIH0gZnJvbSAnLi9pY29ucy9zbWFydHBob25lJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU21pbGUgfSBmcm9tICcuL2ljb25zL3NtaWxlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3BlYWtlciB9IGZyb20gJy4vaWNvbnMvc3BlYWtlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFNxdWFyZSB9IGZyb20gJy4vaWNvbnMvc3F1YXJlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3RhciB9IGZyb20gJy4vaWNvbnMvc3Rhcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFN0b3BDaXJjbGUgfSBmcm9tICcuL2ljb25zL3N0b3AtY2lyY2xlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3VuIH0gZnJvbSAnLi9pY29ucy9zdW4nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBTdW5yaXNlIH0gZnJvbSAnLi9pY29ucy9zdW5yaXNlJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3Vuc2V0IH0gZnJvbSAnLi9pY29ucy9zdW5zZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZXQgfSBmcm9tICcuL2ljb25zL3RhYmxldCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gJy4vaWNvbnMvdGFnJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVGFyZ2V0IH0gZnJvbSAnLi9pY29ucy90YXJnZXQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXJtaW5hbCB9IGZyb20gJy4vaWNvbnMvdGVybWluYWwnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaGVybW9tZXRlciB9IGZyb20gJy4vaWNvbnMvdGhlcm1vbWV0ZXInO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUaHVtYnNEb3duIH0gZnJvbSAnLi9pY29ucy90aHVtYnMtZG93bic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRodW1ic1VwIH0gZnJvbSAnLi9pY29ucy90aHVtYnMtdXAnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2dnbGVMZWZ0IH0gZnJvbSAnLi9pY29ucy90b2dnbGUtbGVmdCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvZ2dsZVJpZ2h0IH0gZnJvbSAnLi9pY29ucy90b2dnbGUtcmlnaHQnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb29sIH0gZnJvbSAnLi9pY29ucy90b29sJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJhc2gyIH0gZnJvbSAnLi9pY29ucy90cmFzaC0yJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJhc2ggfSBmcm9tICcuL2ljb25zL3RyYXNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHJlbGxvIH0gZnJvbSAnLi9pY29ucy90cmVsbG8nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVuZGluZ0Rvd24gfSBmcm9tICcuL2ljb25zL3RyZW5kaW5nLWRvd24nO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUcmVuZGluZ1VwIH0gZnJvbSAnLi9pY29ucy90cmVuZGluZy11cCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRyaWFuZ2xlIH0gZnJvbSAnLi9pY29ucy90cmlhbmdsZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRydWNrIH0gZnJvbSAnLi9pY29ucy90cnVjayc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR2IH0gZnJvbSAnLi9pY29ucy90dic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR3aXRjaCB9IGZyb20gJy4vaWNvbnMvdHdpdGNoJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVHdpdHRlciB9IGZyb20gJy4vaWNvbnMvdHdpdHRlcic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFR5cGUgfSBmcm9tICcuL2ljb25zL3R5cGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVbWJyZWxsYSB9IGZyb20gJy4vaWNvbnMvdW1icmVsbGEnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVbmRlcmxpbmUgfSBmcm9tICcuL2ljb25zL3VuZGVybGluZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVubG9jayB9IGZyb20gJy4vaWNvbnMvdW5sb2NrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXBsb2FkQ2xvdWQgfSBmcm9tICcuL2ljb25zL3VwbG9hZC1jbG91ZCc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVwbG9hZCB9IGZyb20gJy4vaWNvbnMvdXBsb2FkJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlckNoZWNrIH0gZnJvbSAnLi9pY29ucy91c2VyLWNoZWNrJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlck1pbnVzIH0gZnJvbSAnLi9pY29ucy91c2VyLW1pbnVzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlclBsdXMgfSBmcm9tICcuL2ljb25zL3VzZXItcGx1cyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFVzZXJYIH0gZnJvbSAnLi9pY29ucy91c2VyLXgnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBVc2VyIH0gZnJvbSAnLi9pY29ucy91c2VyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVXNlcnMgfSBmcm9tICcuL2ljb25zL3VzZXJzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW9PZmYgfSBmcm9tICcuL2ljb25zL3ZpZGVvLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZpZGVvIH0gZnJvbSAnLi9pY29ucy92aWRlbyc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvaWNlbWFpbCB9IGZyb20gJy4vaWNvbnMvdm9pY2VtYWlsJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lMSB9IGZyb20gJy4vaWNvbnMvdm9sdW1lLTEnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBWb2x1bWUyIH0gZnJvbSAnLi9pY29ucy92b2x1bWUtMic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFZvbHVtZVggfSBmcm9tICcuL2ljb25zL3ZvbHVtZS14JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVm9sdW1lIH0gZnJvbSAnLi9pY29ucy92b2x1bWUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXYXRjaCB9IGZyb20gJy4vaWNvbnMvd2F0Y2gnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaWZpT2ZmIH0gZnJvbSAnLi9pY29ucy93aWZpLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFdpZmkgfSBmcm9tICcuL2ljb25zL3dpZmknO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBXaW5kIH0gZnJvbSAnLi9pY29ucy93aW5kJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWENpcmNsZSB9IGZyb20gJy4vaWNvbnMveC1jaXJjbGUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYT2N0YWdvbiB9IGZyb20gJy4vaWNvbnMveC1vY3RhZ29uJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWFNxdWFyZSB9IGZyb20gJy4vaWNvbnMveC1zcXVhcmUnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBYIH0gZnJvbSAnLi9pY29ucy94JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWW91dHViZSB9IGZyb20gJy4vaWNvbnMveW91dHViZSc7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFphcE9mZiB9IGZyb20gJy4vaWNvbnMvemFwLW9mZic7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFphcCB9IGZyb20gJy4vaWNvbnMvemFwJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWm9vbUluIH0gZnJvbSAnLi9pY29ucy96b29tLWluJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgWm9vbU91dCB9IGZyb20gJy4vaWNvbnMvem9vbS1vdXQnOyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBCdXR0b24gPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBpc1NlY29uZGFyeSA9IF9hLmlzU2Vjb25kYXJ5LCBpc1RlcnRpYXJ5ID0gX2EuaXNUZXJ0aWFyeSwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrLCBpc0Rlc3RydWN0aXZlID0gX2EuaXNEZXN0cnVjdGl2ZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgbGV2ZWwgPSBpc1RlcnRpYXJ5ID8gXCJ0ZXJ0aWFyeVwiIDogaXNTZWNvbmRhcnkgPyBcInNlY29uZGFyeVwiIDogXCJwcmltYXJ5XCI7XG4gICAgdmFyIG1vZGlmaWNhdG9yID0gaXNEZXN0cnVjdGl2ZSA/IFwiLWRlc3RydWN0aXZlXCIgOiBcIlwiO1xuICAgIGlmIChpc1NlY29uZGFyeSAmJiBpc1RlcnRpYXJ5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIlVzZSBvbmx5IG9uZSBsZXZlbCBtb2RpZmljYXRvciBcXFwiaXNTZWNvbmRhcnlcXFwiIG9yIFxcXCJpc1RlcnRpYXJ5XFxcIlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IG9uQ2xpY2s6IG9uQ2xpY2ssIGNsYXNzTmFtZTogXCJidXR0b24gYnV0dG9uLS1cIiArIGxldmVsICsgbW9kaWZpY2F0b3IgKyBcIiBcIiArIGNsYXNzTmFtZSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSwgY2hpbGRyZW4pKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBCdXR0b247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1CdXR0b24uanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBDaGVja2JveCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBpZCA9IF9hLmlkLCBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIHR5cGUgPSBfYS50eXBlLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgbGFiZWwgPSBfYS5sYWJlbCwgbmFtZSA9IF9hLm5hbWUsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB0eXBlID0gdHlwZSB8fCBcImNoZWNrYm94XCI7XG4gICAgdmFyIGlucHV0Q29uZmlnID0ge1xuICAgICAgICBpZDogaWQgfHwgdHlwZSArIFwiLS1cIiArIChNYXRoLnJhbmRvbSgpICogMTAwMDAwMDAwKS50b0ZpeGVkKDApLFxuICAgIH07XG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgXCJzd2l0Y2hcIjpcbiAgICAgICAgICAgIGlucHV0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGlucHV0Q29uZmlnKSwgeyBjbGFzc05hbWU6IFwic3dpdGNoX190b2dnbGVcIiwgdHlwZTogXCJjaGVja2JveFwiIH0pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJyYWRpb19fYnV0dG9uXCIsIHR5cGU6IFwicmFkaW9cIiwgbmFtZTogbmFtZSB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgaW5wdXRDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcpLCB7IGNsYXNzTmFtZTogXCJjaGVja2JveF9fYm94XCIsIHR5cGU6IFwiY2hlY2tib3hcIiB9KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgbGFiZWxDbGFzcyA9IHR5cGUgKyBcIl9fbGFiZWxcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiB0eXBlICsgXCIgXCIgKyBjbGFzc05hbWUgfSxcbiAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBfX2Fzc2lnbih7fSwgaW5wdXRDb25maWcsIHsgZGVmYXVsdENoZWNrZWQ6IGRlZmF1bHRWYWx1ZSwgb25DaGFuZ2U6IGZ1bmN0aW9uIChldmVudCkgeyByZXR1cm4gb25DaGFuZ2UgJiYgb25DaGFuZ2UoZXZlbnQudGFyZ2V0LmNoZWNrZWQsIGV2ZW50KTsgfSwgZGlzYWJsZWQ6IGlzRGlzYWJsZWQgfSkpLFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgY2xhc3NOYW1lOiBsYWJlbENsYXNzLCBodG1sRm9yOiBpbnB1dENvbmZpZy5pZCB9LCBsYWJlbCkpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBDaGVja2JveDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUNoZWNrYm94LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0U3RhcihyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIERpc2Nsb3N1cmUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgaXNEZWZhdWx0RXhwYW5kZWQgPSBfYS5pc0RlZmF1bHRFeHBhbmRlZCwgY2xhc3NOYW1lID0gX2EuY2xhc3NOYW1lLCBsYWJlbCA9IF9hLmxhYmVsLCBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBpc1NlY3Rpb24gPSBfYS5pc1NlY3Rpb24sIG9uRXhwYW5kID0gX2Eub25FeHBhbmQ7XG4gICAgdmFyIF9iID0gcmVhY3RfMS51c2VTdGF0ZShCb29sZWFuKGlzRGVmYXVsdEV4cGFuZGVkKSksIGlzRXhwYW5kZWQgPSBfYlswXSwgb25FeHBhbmRlZFN0YXRlQ2hhbmdlID0gX2JbMV07XG4gICAgdmFyIHRvZ2dsZUV4YXBuZFN0YXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkV4cGFuZCAmJiBvbkV4cGFuZCghaXNFeHBhbmRlZCk7XG4gICAgICAgIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZSghaXNFeHBhbmRlZCk7XG4gICAgfTtcbiAgICB2YXIgbGFiZWxDbGFzcyA9IGlzU2VjdGlvbiA/IFwiZGlzY2xvc3VyZS0tc2VjdGlvblwiIDogXCJcIjtcbiAgICB2YXIgZXhwYW5kQ2xhc3MgPSBpc0V4cGFuZGVkID8gXCJkaXNjbG9zdXJlLS1leHBhbmRlZFwiIDogXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmUgXCIgKyAoY2xhc3NOYW1lIHx8IFwiXCIpIH0sXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpc2Nsb3N1cmVfX2l0ZW0gXCIgKyBleHBhbmRDbGFzcyB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiZGlzY2xvc3VyZV9fbGFiZWwgXCIgKyBsYWJlbENsYXNzLCBvbkNsaWNrOiB0b2dnbGVFeGFwbmRTdGF0ZSB9LCBsYWJlbCksXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJkaXNjbG9zdXJlX19jb250ZW50XCIgfSwgY2hpbGRyZW4pKSkpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IERpc2Nsb3N1cmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1EaXNjbG9zdXJlLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBJY29uID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgbmFtZSA9IF9hLm5hbWUsIGNvbG9yID0gX2EuY29sb3IsIHRleHQgPSBfYS50ZXh0LCBpc1NlbGVjdGVkID0gX2EuaXNTZWxlY3RlZCwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2xpY2sgPSBfYS5vbkNsaWNrO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIHZhciBpY29uQ2xhc3MgPSB0ZXh0ID8gXCJcIiA6IFwiaWNvbi0tXCIgKyBuYW1lO1xuICAgIHZhciBjb2xvckNsYXNzID0gIWlzRGlzYWJsZWQgJiYgY29sb3IgPyBcImljb24tLVwiICsgY29sb3IgOiBcImljb24tLWJsYWNrLTNcIjtcbiAgICB2YXIgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyBcImljb24tYnV0dG9uLS1zZWxlY3RlZFwiIDogXCJcIjtcbiAgICBpZiAob25DbGljaykge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiAwLFxuICAgICAgICAgICAgICAgIGN1cnNvcjogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgICB9LCBkaXNhYmxlZDogaXNEaXNhYmxlZCwgb25DbGljazogb25DbGljaywgY2xhc3NOYW1lOiBcImljb24tYnV0dG9uIFwiICsgc2VsZWN0ZWRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpY29uIFwiICsgaWNvbkNsYXNzIH0sIHRleHQpKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImljb24gXCIgKyBpY29uQ2xhc3MgKyBcIiBcIiArIGNvbG9yQ2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSB9LCB0ZXh0KSk7XG4gICAgfVxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IEljb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1JY29uLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBfMSA9IHJlcXVpcmUoXCIuL1wiKTtcbnZhciBJbnB1dENvbXBvbmVudCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNsYXNzTmFtZSwgY2xhc3NOYW1lID0gX2IgPT09IHZvaWQgMCA/IFwiXCIgOiBfYiwgdHlwZSA9IF9hLnR5cGUsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIG9uQ2hhbmdlID0gX2Eub25DaGFuZ2U7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogdHlwZSwgY2xhc3NOYW1lOiBjbGFzc05hbWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUsIGV2ZW50KTsgfSB9KSk7XG59O1xudmFyIElucHV0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgdHlwZSA9IF9hLnR5cGUsIGljb24gPSBfYS5pY29uLCBfYiA9IF9hLmljb25Db2xvciwgaWNvbkNvbG9yID0gX2IgPT09IHZvaWQgMCA/IFwiYmxhY2szXCIgOiBfYiwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB0eXBlID0gdHlwZSB8fCBcInRleHRcIjtcbiAgICB2YXIgaW5wdXRDbGFzcyA9IFwiaW5wdXRfX2ZpZWxkXCI7XG4gICAgaWYgKGljb24pIHtcbiAgICAgICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dCBpbnB1dC0td2l0aC1pY29uXCIgfSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KF8xLkljb24sIHsgbmFtZTogaWNvbiwgY29sb3I6IGljb25Db2xvciwgaXNEaXNhYmxlZDogaXNEaXNhYmxlZCB9KSxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KElucHV0Q29tcG9uZW50LCB7IGNsYXNzTmFtZTogaW5wdXRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lLCB0eXBlOiB0eXBlLCBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSwgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogb25DaGFuZ2UgfSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXRcIiB9LFxuICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoSW5wdXRDb21wb25lbnQsIHsgY2xhc3NOYW1lOiBpbnB1dENsYXNzICsgXCIgXCIgKyBjbGFzc05hbWUsIHR5cGU6IHR5cGUsIGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsIGlzRGlzYWJsZWQ6IGlzRGlzYWJsZWQsIG9uQ2hhbmdlOiBvbkNoYW5nZSB9KSkpO1xuICAgIH1cbn07XG5leHBvcnRzLmRlZmF1bHQgPSBJbnB1dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUlucHV0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBMYWJlbCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIHNpemUgPSBfYS5zaXplLCB3ZWlnaHQgPSBfYS53ZWlnaHQ7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgdmFyIHNpemVDbGFzcyA9IHNpemUgJiYgXCJ0eXBlLS1cIiArIHNpemU7XG4gICAgdmFyIHdlaWdodENsYXNzID0gd2VpZ2h0ICYmIFwidHlwZS0tXCIgKyB3ZWlnaHQ7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJsYWJlbCBcIiArIHNpemVDbGFzcyArIFwiIFwiICsgd2VpZ2h0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZSB9LCBjaGlsZHJlbikpO1xufTtcbmV4cG9ydHMuZGVmYXVsdCA9IExhYmVsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9TGFiZWwuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgcmVhY3Rfb3V0c2lkZV9jbGlja19oYW5kbGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0LW91dHNpZGUtY2xpY2staGFuZGxlclwiKSk7XG52YXIgU2VsZWN0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EuY2xhc3NOYW1lLCBjbGFzc05hbWUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCBvcHRpb25zID0gX2Eub3B0aW9ucywgcGxhY2Vob2xkZXIgPSBfYS5wbGFjZWhvbGRlciwgaXNEaXNhYmxlZCA9IF9hLmlzRGlzYWJsZWQsIGRlZmF1bHRWYWx1ZSA9IF9hLmRlZmF1bHRWYWx1ZSwgb25FeHBhbmQgPSBfYS5vbkV4cGFuZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICB2YXIgX2MgPSByZWFjdF8xLnVzZVN0YXRlKGZhbHNlKSwgaXNFeHBhbmRlZCA9IF9jWzBdLCBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UgPSBfY1sxXTtcbiAgICB2YXIgX2QgPSByZWFjdF8xLnVzZVN0YXRlKG9wdGlvbnMuZmluZChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gX2EudmFsdWU7XG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPT09IHZhbHVlO1xuICAgIH0pKSwgc2VsZWN0ZWRPcHRpb24gPSBfZFswXSwgb25TZWxlY3RPcHRpb24gPSBfZFsxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9uRXhwYW5kICYmIG9uRXhwYW5kKGlzRXhwYW5kZWQpO1xuICAgIH0sIFtpc0V4cGFuZGVkXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBvbkNoYW5nZSAmJiBzZWxlY3RlZE9wdGlvbiAmJiBvbkNoYW5nZShzZWxlY3RlZE9wdGlvbik7XG4gICAgfSwgW3NlbGVjdGVkT3B0aW9uXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV3U2VsZWN0ZWRPcHRpb24gPSBvcHRpb25zLmZpbmQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWUgPT09IHZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgb25TZWxlY3RPcHRpb24obmV3U2VsZWN0ZWRPcHRpb24pO1xuICAgIH0sIFtkZWZhdWx0VmFsdWVdKTtcbiAgICB2YXIgaGFuZGxlRXhwYW5kQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UoIWlzRXhwYW5kZWQpOyB9O1xuICAgIHZhciBoYW5kbGVPdXRzaWRlQ2xpY2sgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvbkV4cGFuZGVkU3RhdGVDaGFuZ2UoZmFsc2UpOyB9O1xuICAgIHZhciBoYW5kbGVTZWxlY3RDbGljayA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgbmV3T3B0aW9uID0gb3B0aW9ucy5maW5kKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIHYgPSBfYS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiB2ID09PSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9uRXhwYW5kZWRTdGF0ZUNoYW5nZShmYWxzZSk7XG4gICAgICAgIG9uU2VsZWN0T3B0aW9uKG5ld09wdGlvbik7XG4gICAgfTtcbiAgICB2YXIgZXhwYW5kQnV0dG9uQ2xhc3MgPSBpc0V4cGFuZGVkID8gXCJzZWxlY3QtbWVudV9fYnV0dG9uLS1hY3RpdmVcIiA6IFwiXCI7XG4gICAgdmFyIGV4cGFuTGlzdENsYXNzID0gaXNFeHBhbmRlZCA/IFwic2VsZWN0LW1lbnVfX21lbnUtLWFjdGl2ZVwiIDogXCJcIjtcbiAgICB2YXIgZGlzYWJsZWRDb2xvckNsYXNzID0gaXNEaXNhYmxlZCA/IFwiaWNvbi0tYmxhY2stM1wiIDogXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0X291dHNpZGVfY2xpY2tfaGFuZGxlcl8xLmRlZmF1bHQsIHsgb25PdXRzaWRlQ2xpY2s6IGhhbmRsZU91dHNpZGVDbGljaywgZGlzYWJsZWQ6ICFpc0V4cGFuZGVkIH0sXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51IFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fYnV0dG9uIFwiICsgZXhwYW5kQnV0dG9uQ2xhc3MgKyBcIiBcIiArIGRpc2FibGVkQ29sb3JDbGFzcywgb25DbGljazogaGFuZGxlRXhwYW5kQ2xpY2ssIGRpc2FibGVkOiBpc0Rpc2FibGVkLCB0aXRsZTogc2VsZWN0ZWRPcHRpb24gPT09IG51bGwgfHwgc2VsZWN0ZWRPcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlbGVjdGVkT3B0aW9uLnRpdGxlLCB0eXBlOiBcImJ1dHRvblwiIH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19sYWJlbFwiIH0sIChzZWxlY3RlZE9wdGlvbiAmJiBzZWxlY3RlZE9wdGlvbi5sYWJlbCkgfHwgcGxhY2Vob2xkZXIpLFxuICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9fY2FyZXRcIiB9KSksXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19tZW51IFwiICsgZXhwYW5MaXN0Q2xhc3MgKyBcIiBcIiArIGRpc2FibGVkQ29sb3JDbGFzcywgc3R5bGU6IHsgdG9wOiBcIi0yNHB4XCIgfSB9LCBvcHRpb25zICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoZnVuY3Rpb24gKF9hLCBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IF9hLnZhbHVlLCBsYWJlbCA9IF9hLmxhYmVsLCBkaXZpZGVyID0gX2EuZGl2aWRlciwgdGl0bGUgPSBfYS50aXRsZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRpdmlkZXIgPyAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQocmVhY3RfMS5kZWZhdWx0LkZyYWdtZW50LCB7IGtleTogXCJzZWxlY3Qtb3B0aW9uLWRpdmlkZXItLVwiICsgaSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgZGl2aWRlciAhPT0gdHJ1ZSAmJiAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInNlbGVjdC1tZW51X19kaXZpZGVyLWxhYmVsXCIgfSwgZGl2aWRlcikpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2RpdmlkZXJcIiwga2V5OiBcInNlbGVjdC1vcHRpb24tLVwiICsgaSB9KSkpIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2l0ZW0gXCIgKyAoc2VsZWN0ZWRPcHRpb24gJiYgc2VsZWN0ZWRPcHRpb24udmFsdWUgPT09IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcInNlbGVjdC1tZW51X19pdGVtLS1zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBcIlwiKSwgb25DbGljazogZnVuY3Rpb24gKCkgeyByZXR1cm4gaGFuZGxlU2VsZWN0Q2xpY2sodmFsdWUpOyB9LCBrZXk6IFwic2VsZWN0LW9wdGlvbi0tXCIgKyBpLCB0aXRsZTogdGl0bGUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtbWVudV9faXRlbS1pY29uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LW1lbnVfX2l0ZW0tbGFiZWxcIiB9LCBsYWJlbCkpKTtcbiAgICAgICAgICAgICAgICB9KSkpKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gU2VsZWN0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VsZWN0LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUZXh0ID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgc2l6ZSA9IF9hLnNpemUsIHdlaWdodCA9IF9hLndlaWdodDtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICB2YXIgc2l6ZUNsYXNzID0gc2l6ZSAmJiBcInR5cGUtLVwiICsgc2l6ZTtcbiAgICB2YXIgd2VpZ2h0Q2xhc3MgPSB3ZWlnaHQgJiYgXCJ0eXBlLS1cIiArIHdlaWdodDtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJ0eXBlIFwiICsgc2l6ZUNsYXNzICsgXCIgXCIgKyB3ZWlnaHRDbGFzcyArIFwiIFwiICsgY2xhc3NOYW1lIH0sIGNoaWxkcmVuKSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGV4dDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRleHQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG52YXIgcmVhY3RfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwicmVhY3RcIikpO1xudmFyIFRleHRhcmVhID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IF9hLmNsYXNzTmFtZSwgX2IgPSBfYS5yb3dzLCByb3dzID0gX2IgPT09IHZvaWQgMCA/IDIgOiBfYiwgZGVmYXVsdFZhbHVlID0gX2EuZGVmYXVsdFZhbHVlLCBwbGFjZWhvbGRlciA9IF9hLnBsYWNlaG9sZGVyLCBpc0Rpc2FibGVkID0gX2EuaXNEaXNhYmxlZCwgb25DaGFuZ2UgPSBfYS5vbkNoYW5nZTtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIiwgeyByb3dzOiByb3dzLCBjbGFzc05hbWU6IFwidGV4dGFyZWEgXCIgKyBjbGFzc05hbWUsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsIGRpc2FibGVkOiBpc0Rpc2FibGVkLCBvbkNoYW5nZTogZnVuY3Rpb24gKGV2ZW50KSB7IHJldHVybiBvbkNoYW5nZSAmJiBvbkNoYW5nZShldmVudC50YXJnZXQudmFsdWUsIGV2ZW50KTsgfSB9KSk7XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGV4dGFyZWE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UZXh0YXJlYS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbnZhciByZWFjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgXzEgPSByZXF1aXJlKFwiLi9cIik7XG52YXIgVGV4dCA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGljb25OYW1lID0gX2EuaWNvbk5hbWUsIGljb25UZXh0ID0gX2EuaWNvblRleHQsIGljb25Db2xvciA9IF9hLmljb25Db2xvcjtcbiAgICBjbGFzc05hbWUgPSBjbGFzc05hbWUgfHwgXCJcIjtcbiAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcIm9uYm9hcmRpbmctdGlwIFwiICsgY2xhc3NOYW1lIH0sXG4gICAgICAgIGljb25OYW1lICYmIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJvbmJvYXJkaW5nLXRpcF9faWNvblwiIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfMS5JY29uLCB7IG5hbWU6IGljb25OYW1lLCBjb2xvcjogaWNvbkNvbG9yLCB0ZXh0OiBpY29uVGV4dCB9KSkpLFxuICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0eXBlIG9uYm9hcmRpbmctdGlwX19tc2dcIiB9LCBjaGlsZHJlbikpKTtcbn07XG5leHBvcnRzLmRlZmF1bHQgPSBUZXh0O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VGlwLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xudmFyIHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbnZhciBUaXRsZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjbGFzc05hbWUgPSBfYS5jbGFzc05hbWUsIGNoaWxkcmVuID0gX2EuY2hpbGRyZW4sIGxldmVsID0gX2EubGV2ZWwsIHNpemUgPSBfYS5zaXplLCB3ZWlnaHQgPSBfYS53ZWlnaHQ7XG4gICAgY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8IFwiXCI7XG4gICAgbGV2ZWwgPSBsZXZlbCB8fCBcImgxXCI7XG4gICAgdmFyIHNpemVDbGFzcyA9IHNpemUgJiYgXCJ0eXBlLS1cIiArIHNpemU7XG4gICAgdmFyIHdlaWdodENsYXNzID0gd2VpZ2h0ICYmIFwidHlwZS0tXCIgKyB3ZWlnaHQ7XG4gICAgdmFyIGhlYWRlckNsYXNzTmFtZSA9IFwic2VjdGlvbi10aXRsZSBcIiArIHNpemVDbGFzcyArIFwiIFwiICsgd2VpZ2h0Q2xhc3MgKyBcIiBcIiArIGNsYXNzTmFtZTtcbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICAgIGNhc2UgXCJoMVwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDFcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoMlwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDJcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoM1wiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDNcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNFwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNVwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDVcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGNhc2UgXCJoNlwiOlxuICAgICAgICAgICAgcmV0dXJuIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiaDZcIiwgeyBjbGFzc05hbWU6IGhlYWRlckNsYXNzTmFtZSB9LCBjaGlsZHJlbik7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJoMVwiLCB7IGNsYXNzTmFtZTogaGVhZGVyQ2xhc3NOYW1lIH0sIGNoaWxkcmVuKTtcbiAgICB9XG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gVGl0bGU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1UaXRsZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuU2VsZWN0ID0gZXhwb3J0cy5UZXh0YXJlYSA9IGV4cG9ydHMuVGlwID0gZXhwb3J0cy5UZXh0ID0gZXhwb3J0cy5MYWJlbCA9IGV4cG9ydHMuVGl0bGUgPSBleHBvcnRzLkljb24gPSBleHBvcnRzLklucHV0ID0gZXhwb3J0cy5EaXNjbG9zdXJlID0gZXhwb3J0cy5DaGVja2JveCA9IGV4cG9ydHMuQnV0dG9uID0gdm9pZCAwO1xudmFyIEJ1dHRvbl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL0J1dHRvblwiKSk7XG5leHBvcnRzLkJ1dHRvbiA9IEJ1dHRvbl8xLmRlZmF1bHQ7XG52YXIgQ2hlY2tib3hfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9DaGVja2JveFwiKSk7XG5leHBvcnRzLkNoZWNrYm94ID0gQ2hlY2tib3hfMS5kZWZhdWx0O1xudmFyIERpc2Nsb3N1cmVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9EaXNjbG9zdXJlXCIpKTtcbmV4cG9ydHMuRGlzY2xvc3VyZSA9IERpc2Nsb3N1cmVfMS5kZWZhdWx0O1xudmFyIElucHV0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSW5wdXRcIikpO1xuZXhwb3J0cy5JbnB1dCA9IElucHV0XzEuZGVmYXVsdDtcbnZhciBJY29uXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vSWNvblwiKSk7XG5leHBvcnRzLkljb24gPSBJY29uXzEuZGVmYXVsdDtcbnZhciBUaXRsZV8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RpdGxlXCIpKTtcbmV4cG9ydHMuVGl0bGUgPSBUaXRsZV8xLmRlZmF1bHQ7XG52YXIgTGFiZWxfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9MYWJlbFwiKSk7XG5leHBvcnRzLkxhYmVsID0gTGFiZWxfMS5kZWZhdWx0O1xudmFyIFRleHRfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9UZXh0XCIpKTtcbmV4cG9ydHMuVGV4dCA9IFRleHRfMS5kZWZhdWx0O1xudmFyIFRpcF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1RpcFwiKSk7XG5leHBvcnRzLlRpcCA9IFRpcF8xLmRlZmF1bHQ7XG52YXIgVGV4dGFyZWFfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi9UZXh0YXJlYVwiKSk7XG5leHBvcnRzLlRleHRhcmVhID0gVGV4dGFyZWFfMS5kZWZhdWx0O1xudmFyIFNlbGVjdF8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL1NlbGVjdFwiKSk7XG5leHBvcnRzLlNlbGVjdCA9IFNlbGVjdF8xLmRlZmF1bHQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgYXBpIGZyb20gXCIhLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgICAgICAgIGltcG9ydCBjb250ZW50IGZyb20gXCIhIS4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9maWdtYS1wbHVnaW4tZHMuY3NzXCI7XG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuaW5zZXJ0ID0gXCJoZWFkXCI7XG5vcHRpb25zLnNpbmdsZXRvbiA9IGZhbHNlO1xuXG52YXIgdXBkYXRlID0gYXBpKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0IGRlZmF1bHQgY29udGVudC5sb2NhbHMgfHwge307IiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYxNi4xMy4xXG4gKiByZWFjdC1pcy5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIGhhc1N5bWJvbCA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcjtcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50JykgOiAweGVhYzc7XG52YXIgUkVBQ1RfUE9SVEFMX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5wb3J0YWwnKSA6IDB4ZWFjYTtcbnZhciBSRUFDVF9GUkFHTUVOVF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnJhZ21lbnQnKSA6IDB4ZWFjYjtcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKSA6IDB4ZWFjYztcbnZhciBSRUFDVF9QUk9GSUxFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvZmlsZXInKSA6IDB4ZWFkMjtcbnZhciBSRUFDVF9QUk9WSURFUl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QucHJvdmlkZXInKSA6IDB4ZWFjZDtcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0JykgOiAweGVhY2U7IC8vIFRPRE86IFdlIGRvbid0IHVzZSBBc3luY01vZGUgb3IgQ29uY3VycmVudE1vZGUgYW55bW9yZS4gVGhleSB3ZXJlIHRlbXBvcmFyeVxuLy8gKHVuc3RhYmxlKSBBUElzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuIENhbiB3ZSByZW1vdmUgdGhlIHN5bWJvbHM/XG5cbnZhciBSRUFDVF9BU1lOQ19NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5hc3luY19tb2RlJykgOiAweGVhY2Y7XG52YXIgUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5jb25jdXJyZW50X21vZGUnKSA6IDB4ZWFjZjtcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKSA6IDB4ZWFkMDtcbnZhciBSRUFDVF9TVVNQRU5TRV9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2UnKSA6IDB4ZWFkMTtcbnZhciBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0JykgOiAweGVhZDg7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QubWVtbycpIDogMHhlYWQzO1xudmFyIFJFQUNUX0xBWllfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LmxhenknKSA6IDB4ZWFkNDtcbnZhciBSRUFDVF9CTE9DS19UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuYmxvY2snKSA6IDB4ZWFkOTtcbnZhciBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gaGFzU3ltYm9sID8gU3ltYm9sLmZvcigncmVhY3QuZnVuZGFtZW50YWwnKSA6IDB4ZWFkNTtcbnZhciBSRUFDVF9SRVNQT05ERVJfVFlQRSA9IGhhc1N5bWJvbCA/IFN5bWJvbC5mb3IoJ3JlYWN0LnJlc3BvbmRlcicpIDogMHhlYWQ2O1xudmFyIFJFQUNUX1NDT1BFX1RZUEUgPSBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdyZWFjdC5zY29wZScpIDogMHhlYWQ3O1xuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICByZXR1cm4gdHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nIHx8IC8vIE5vdGU6IGl0cyB0eXBlb2YgbWlnaHQgYmUgb3RoZXIgdGhhbiAnc3ltYm9sJyBvciAnbnVtYmVyJyBpZiBpdCdzIGEgcG9seWZpbGwuXG4gIHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfUFJPRklMRVJfVFlQRSB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9SRVNQT05ERVJfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9TQ09QRV9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0JMT0NLX1RZUEUpO1xufVxuXG5mdW5jdGlvbiB0eXBlT2Yob2JqZWN0KSB7XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICB2YXIgJCR0eXBlb2YgPSBvYmplY3QuJCR0eXBlb2Y7XG5cbiAgICBzd2l0Y2ggKCQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgdmFyIHR5cGUgPSBvYmplY3QudHlwZTtcblxuICAgICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0FTWU5DX01PREVfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTkNVUlJFTlRfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BST0ZJTEVSX1RZUEU6XG4gICAgICAgICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxuICAgICAgICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHZhciAkJHR5cGVvZlR5cGUgPSB0eXBlICYmIHR5cGUuJCR0eXBlb2Y7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoJCR0eXBlb2ZUeXBlKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICAgICAgICAgIHJldHVybiAkJHR5cGVvZlR5cGU7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICByZXR1cm4gJCR0eXBlb2Y7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn0gLy8gQXN5bmNNb2RlIGlzIGRlcHJlY2F0ZWQgYWxvbmcgd2l0aCBpc0FzeW5jTW9kZVxuXG52YXIgQXN5bmNNb2RlID0gUkVBQ1RfQVNZTkNfTU9ERV9UWVBFO1xudmFyIENvbmN1cnJlbnRNb2RlID0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG52YXIgQ29udGV4dENvbnN1bWVyID0gUkVBQ1RfQ09OVEVYVF9UWVBFO1xudmFyIENvbnRleHRQcm92aWRlciA9IFJFQUNUX1BST1ZJREVSX1RZUEU7XG52YXIgRWxlbWVudCA9IFJFQUNUX0VMRU1FTlRfVFlQRTtcbnZhciBGb3J3YXJkUmVmID0gUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTtcbnZhciBGcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG52YXIgTGF6eSA9IFJFQUNUX0xBWllfVFlQRTtcbnZhciBNZW1vID0gUkVBQ1RfTUVNT19UWVBFO1xudmFyIFBvcnRhbCA9IFJFQUNUX1BPUlRBTF9UWVBFO1xudmFyIFByb2ZpbGVyID0gUkVBQ1RfUFJPRklMRVJfVFlQRTtcbnZhciBTdHJpY3RNb2RlID0gUkVBQ1RfU1RSSUNUX01PREVfVFlQRTtcbnZhciBTdXNwZW5zZSA9IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG52YXIgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSBmYWxzZTsgLy8gQXN5bmNNb2RlIHNob3VsZCBiZSBkZXByZWNhdGVkXG5cbmZ1bmN0aW9uIGlzQXN5bmNNb2RlKG9iamVjdCkge1xuICB7XG4gICAgaWYgKCFoYXNXYXJuZWRBYm91dERlcHJlY2F0ZWRJc0FzeW5jTW9kZSkge1xuICAgICAgaGFzV2FybmVkQWJvdXREZXByZWNhdGVkSXNBc3luY01vZGUgPSB0cnVlOyAvLyBVc2luZyBjb25zb2xlWyd3YXJuJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuXG4gICAgICBjb25zb2xlWyd3YXJuJ10oJ1RoZSBSZWFjdElzLmlzQXN5bmNNb2RlKCkgYWxpYXMgaGFzIGJlZW4gZGVwcmVjYXRlZCwgJyArICdhbmQgd2lsbCBiZSByZW1vdmVkIGluIFJlYWN0IDE3Ky4gVXBkYXRlIHlvdXIgY29kZSB0byB1c2UgJyArICdSZWFjdElzLmlzQ29uY3VycmVudE1vZGUoKSBpbnN0ZWFkLiBJdCBoYXMgdGhlIGV4YWN0IHNhbWUgQVBJLicpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpc0NvbmN1cnJlbnRNb2RlKG9iamVjdCkgfHwgdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0FTWU5DX01PREVfVFlQRTtcbn1cbmZ1bmN0aW9uIGlzQ29uY3VycmVudE1vZGUob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfQ09OQ1VSUkVOVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRDb25zdW1lcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9DT05URVhUX1RZUEU7XG59XG5mdW5jdGlvbiBpc0NvbnRleHRQcm92aWRlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9WSURFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNFbGVtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsICYmIG9iamVjdC4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFO1xufVxuZnVuY3Rpb24gaXNGb3J3YXJkUmVmKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU7XG59XG5mdW5jdGlvbiBpc0ZyYWdtZW50KG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XG59XG5mdW5jdGlvbiBpc0xhenkob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlT2Yob2JqZWN0KSA9PT0gUkVBQ1RfTEFaWV9UWVBFO1xufVxuZnVuY3Rpb24gaXNNZW1vKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX01FTU9fVFlQRTtcbn1cbmZ1bmN0aW9uIGlzUG9ydGFsKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1BPUlRBTF9UWVBFO1xufVxuZnVuY3Rpb24gaXNQcm9maWxlcihvYmplY3QpIHtcbiAgcmV0dXJuIHR5cGVPZihvYmplY3QpID09PSBSRUFDVF9QUk9GSUxFUl9UWVBFO1xufVxuZnVuY3Rpb24gaXNTdHJpY3RNb2RlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NUUklDVF9NT0RFX1RZUEU7XG59XG5mdW5jdGlvbiBpc1N1c3BlbnNlKG9iamVjdCkge1xuICByZXR1cm4gdHlwZU9mKG9iamVjdCkgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEU7XG59XG5cbmV4cG9ydHMuQXN5bmNNb2RlID0gQXN5bmNNb2RlO1xuZXhwb3J0cy5Db25jdXJyZW50TW9kZSA9IENvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5Db250ZXh0Q29uc3VtZXIgPSBDb250ZXh0Q29uc3VtZXI7XG5leHBvcnRzLkNvbnRleHRQcm92aWRlciA9IENvbnRleHRQcm92aWRlcjtcbmV4cG9ydHMuRWxlbWVudCA9IEVsZW1lbnQ7XG5leHBvcnRzLkZvcndhcmRSZWYgPSBGb3J3YXJkUmVmO1xuZXhwb3J0cy5GcmFnbWVudCA9IEZyYWdtZW50O1xuZXhwb3J0cy5MYXp5ID0gTGF6eTtcbmV4cG9ydHMuTWVtbyA9IE1lbW87XG5leHBvcnRzLlBvcnRhbCA9IFBvcnRhbDtcbmV4cG9ydHMuUHJvZmlsZXIgPSBQcm9maWxlcjtcbmV4cG9ydHMuU3RyaWN0TW9kZSA9IFN0cmljdE1vZGU7XG5leHBvcnRzLlN1c3BlbnNlID0gU3VzcGVuc2U7XG5leHBvcnRzLmlzQXN5bmNNb2RlID0gaXNBc3luY01vZGU7XG5leHBvcnRzLmlzQ29uY3VycmVudE1vZGUgPSBpc0NvbmN1cnJlbnRNb2RlO1xuZXhwb3J0cy5pc0NvbnRleHRDb25zdW1lciA9IGlzQ29udGV4dENvbnN1bWVyO1xuZXhwb3J0cy5pc0NvbnRleHRQcm92aWRlciA9IGlzQ29udGV4dFByb3ZpZGVyO1xuZXhwb3J0cy5pc0VsZW1lbnQgPSBpc0VsZW1lbnQ7XG5leHBvcnRzLmlzRm9yd2FyZFJlZiA9IGlzRm9yd2FyZFJlZjtcbmV4cG9ydHMuaXNGcmFnbWVudCA9IGlzRnJhZ21lbnQ7XG5leHBvcnRzLmlzTGF6eSA9IGlzTGF6eTtcbmV4cG9ydHMuaXNNZW1vID0gaXNNZW1vO1xuZXhwb3J0cy5pc1BvcnRhbCA9IGlzUG9ydGFsO1xuZXhwb3J0cy5pc1Byb2ZpbGVyID0gaXNQcm9maWxlcjtcbmV4cG9ydHMuaXNTdHJpY3RNb2RlID0gaXNTdHJpY3RNb2RlO1xuZXhwb3J0cy5pc1N1c3BlbnNlID0gaXNTdXNwZW5zZTtcbmV4cG9ydHMuaXNWYWxpZEVsZW1lbnRUeXBlID0gaXNWYWxpZEVsZW1lbnRUeXBlO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtaXMuZGV2ZWxvcG1lbnQuanMnKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9jcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHsgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7IGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHsgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTsgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZGVzY3JpcHRvci5lbnVtZXJhYmxlIHx8IGZhbHNlOyBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7IGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGRlc2NyaXB0b3Iua2V5LCBkZXNjcmlwdG9yKTsgfSB9IHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBkZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7IGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpOyByZXR1cm4gQ29uc3RydWN0b3I7IH07IH0oKTtcblxudmFyIF9yZWFjdCA9IHJlcXVpcmUoJ3JlYWN0Jyk7XG5cbnZhciBfcmVhY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcmVhY3QpO1xuXG52YXIgX3Byb3BUeXBlcyA9IHJlcXVpcmUoJ3Byb3AtdHlwZXMnKTtcblxudmFyIF9wcm9wVHlwZXMyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfcHJvcFR5cGVzKTtcblxudmFyIF9haXJibmJQcm9wVHlwZXMgPSByZXF1aXJlKCdhaXJibmItcHJvcC10eXBlcycpO1xuXG52YXIgX2NvbnNvbGlkYXRlZEV2ZW50cyA9IHJlcXVpcmUoJ2NvbnNvbGlkYXRlZC1ldmVudHMnKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKCdvYmplY3QudmFsdWVzJyk7XG5cbnZhciBfb2JqZWN0MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX29iamVjdCk7XG5cbnZhciBfZG9jdW1lbnQgPSByZXF1aXJlKCdkb2N1bWVudC5jb250YWlucycpO1xuXG52YXIgX2RvY3VtZW50MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2RvY3VtZW50KTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfY2xhc3NDYWxsQ2hlY2soaW5zdGFuY2UsIENvbnN0cnVjdG9yKSB7IGlmICghKGluc3RhbmNlIGluc3RhbmNlb2YgQ29uc3RydWN0b3IpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7IH0gfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmICghc2VsZikgeyB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7IH0gcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7IH1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7IGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHsgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUgfSB9KTsgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzOyB9XG5cbnZhciBESVNQTEFZID0ge1xuICBCTE9DSzogJ2Jsb2NrJyxcbiAgRkxFWDogJ2ZsZXgnLFxuICBJTkxJTkU6ICdpbmxpbmUnLFxuICBJTkxJTkVfQkxPQ0s6ICdpbmxpbmUtYmxvY2snLFxuICBDT05URU5UUzogJ2NvbnRlbnRzJ1xufTtcblxudmFyIHByb3BUeXBlcyA9ICgwLCBfYWlyYm5iUHJvcFR5cGVzLmZvcmJpZEV4dHJhUHJvcHMpKHtcbiAgY2hpbGRyZW46IF9wcm9wVHlwZXMyWydkZWZhdWx0J10ubm9kZS5pc1JlcXVpcmVkLFxuICBvbk91dHNpZGVDbGljazogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5mdW5jLmlzUmVxdWlyZWQsXG4gIGRpc2FibGVkOiBfcHJvcFR5cGVzMlsnZGVmYXVsdCddLmJvb2wsXG4gIHVzZUNhcHR1cmU6IF9wcm9wVHlwZXMyWydkZWZhdWx0J10uYm9vbCxcbiAgZGlzcGxheTogX3Byb3BUeXBlczJbJ2RlZmF1bHQnXS5vbmVPZigoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoRElTUExBWSkpXG59KTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgZGlzYWJsZWQ6IGZhbHNlLFxuXG4gIC8vIGB1c2VDYXB0dXJlYCBpcyBzZXQgdG8gdHJ1ZSBieSBkZWZhdWx0IHNvIHRoYXQgYSBgc3RvcFByb3BhZ2F0aW9uYCBpbiB0aGVcbiAgLy8gY2hpbGRyZW4gd2lsbCBub3QgcHJldmVudCBhbGwgb3V0c2lkZSBjbGljayBoYW5kbGVycyBmcm9tIGZpcmluZyAtIG1hamFcbiAgdXNlQ2FwdHVyZTogdHJ1ZSxcbiAgZGlzcGxheTogRElTUExBWS5CTE9DS1xufTtcblxudmFyIE91dHNpZGVDbGlja0hhbmRsZXIgPSBmdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHMoT3V0c2lkZUNsaWNrSGFuZGxlciwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gT3V0c2lkZUNsaWNrSGFuZGxlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIF9jbGFzc0NhbGxDaGVjayh0aGlzLCBPdXRzaWRlQ2xpY2tIYW5kbGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyA9IF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHRoaXMsIChfcmVmID0gT3V0c2lkZUNsaWNrSGFuZGxlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKE91dHNpZGVDbGlja0hhbmRsZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKTtcblxuICAgIF90aGlzLm9uTW91c2VEb3duID0gX3RoaXMub25Nb3VzZURvd24uYmluZChfdGhpcyk7XG4gICAgX3RoaXMub25Nb3VzZVVwID0gX3RoaXMub25Nb3VzZVVwLmJpbmQoX3RoaXMpO1xuICAgIF90aGlzLnNldENoaWxkTm9kZVJlZiA9IF90aGlzLnNldENoaWxkTm9kZVJlZi5iaW5kKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoT3V0c2lkZUNsaWNrSGFuZGxlciwgW3tcbiAgICBrZXk6ICdjb21wb25lbnREaWRNb3VudCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpc2FibGVkID0gX3Byb3BzLmRpc2FibGVkLFxuICAgICAgICAgICAgdXNlQ2FwdHVyZSA9IF9wcm9wcy51c2VDYXB0dXJlO1xuXG5cbiAgICAgICAgaWYgKCFkaXNhYmxlZCkgdGhpcy5hZGRNb3VzZURvd25FdmVudExpc3RlbmVyKHVzZUNhcHR1cmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcG9uZW50RGlkTW91bnQ7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdjb21wb25lbnREaWRVcGRhdGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoX3JlZjIpIHtcbiAgICAgICAgdmFyIHByZXZEaXNhYmxlZCA9IF9yZWYyLmRpc2FibGVkO1xuICAgICAgICB2YXIgX3Byb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXNhYmxlZCA9IF9wcm9wczIuZGlzYWJsZWQsXG4gICAgICAgICAgICB1c2VDYXB0dXJlID0gX3Byb3BzMi51c2VDYXB0dXJlO1xuXG4gICAgICAgIGlmIChwcmV2RGlzYWJsZWQgIT09IGRpc2FibGVkKSB7XG4gICAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXJzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkTW91c2VEb3duRXZlbnRMaXN0ZW5lcih1c2VDYXB0dXJlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudERpZFVwZGF0ZTtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudFdpbGxVbm1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBvbmVudFdpbGxVbm1vdW50O1xuICAgIH0oKVxuXG4gICAgLy8gVXNlIG1vdXNlZG93bi9tb3VzZXVwIHRvIGVuZm9yY2UgdGhhdCBjbGlja3MgcmVtYWluIG91dHNpZGUgdGhlIHJvb3Qnc1xuICAgIC8vIGRlc2NlbmRhbnQgdHJlZSwgZXZlbiB3aGVuIGRyYWdnZWQuIFRoaXMgc2hvdWxkIGFsc28gZ2V0IHRyaWdnZXJlZCBvblxuICAgIC8vIHRvdWNoIGRldmljZXMuXG5cbiAgfSwge1xuICAgIGtleTogJ29uTW91c2VEb3duJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gb25Nb3VzZURvd24oZSkge1xuICAgICAgICB2YXIgdXNlQ2FwdHVyZSA9IHRoaXMucHJvcHMudXNlQ2FwdHVyZTtcblxuXG4gICAgICAgIHZhciBpc0Rlc2NlbmRhbnRPZlJvb3QgPSB0aGlzLmNoaWxkTm9kZSAmJiAoMCwgX2RvY3VtZW50MlsnZGVmYXVsdCddKSh0aGlzLmNoaWxkTm9kZSwgZS50YXJnZXQpO1xuICAgICAgICBpZiAoIWlzRGVzY2VuZGFudE9mUm9vdCkge1xuICAgICAgICAgIGlmICh0aGlzLnJlbW92ZU1vdXNlVXApIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTW91c2VVcCgpO1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gKDAsIF9jb25zb2xpZGF0ZWRFdmVudHMuYWRkRXZlbnRMaXN0ZW5lcikoZG9jdW1lbnQsICdtb3VzZXVwJywgdGhpcy5vbk1vdXNlVXAsIHsgY2FwdHVyZTogdXNlQ2FwdHVyZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gb25Nb3VzZURvd247XG4gICAgfSgpXG5cbiAgICAvLyBVc2UgbW91c2Vkb3duL21vdXNldXAgdG8gZW5mb3JjZSB0aGF0IGNsaWNrcyByZW1haW4gb3V0c2lkZSB0aGUgcm9vdCdzXG4gICAgLy8gZGVzY2VuZGFudCB0cmVlLCBldmVuIHdoZW4gZHJhZ2dlZC4gVGhpcyBzaG91bGQgYWxzbyBnZXQgdHJpZ2dlcmVkIG9uXG4gICAgLy8gdG91Y2ggZGV2aWNlcy5cblxuICB9LCB7XG4gICAga2V5OiAnb25Nb3VzZVVwJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gb25Nb3VzZVVwKGUpIHtcbiAgICAgICAgdmFyIG9uT3V0c2lkZUNsaWNrID0gdGhpcy5wcm9wcy5vbk91dHNpZGVDbGljaztcblxuXG4gICAgICAgIHZhciBpc0Rlc2NlbmRhbnRPZlJvb3QgPSB0aGlzLmNoaWxkTm9kZSAmJiAoMCwgX2RvY3VtZW50MlsnZGVmYXVsdCddKSh0aGlzLmNoaWxkTm9kZSwgZS50YXJnZXQpO1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZVVwKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwKCk7XG4gICAgICAgICAgdGhpcy5yZW1vdmVNb3VzZVVwID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNEZXNjZW5kYW50T2ZSb290KSB7XG4gICAgICAgICAgb25PdXRzaWRlQ2xpY2soZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9uTW91c2VVcDtcbiAgICB9KClcbiAgfSwge1xuICAgIGtleTogJ3NldENoaWxkTm9kZVJlZicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZ1bmN0aW9uIHNldENoaWxkTm9kZVJlZihyZWYpIHtcbiAgICAgICAgdGhpcy5jaGlsZE5vZGUgPSByZWY7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZXRDaGlsZE5vZGVSZWY7XG4gICAgfSgpXG4gIH0sIHtcbiAgICBrZXk6ICdhZGRNb3VzZURvd25FdmVudExpc3RlbmVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gYWRkTW91c2VEb3duRXZlbnRMaXN0ZW5lcih1c2VDYXB0dXJlKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTW91c2VEb3duID0gKDAsIF9jb25zb2xpZGF0ZWRFdmVudHMuYWRkRXZlbnRMaXN0ZW5lcikoZG9jdW1lbnQsICdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duLCB7IGNhcHR1cmU6IHVzZUNhcHR1cmUgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhZGRNb3VzZURvd25FdmVudExpc3RlbmVyO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAncmVtb3ZlRXZlbnRMaXN0ZW5lcnMnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiAoKSB7XG4gICAgICBmdW5jdGlvbiByZW1vdmVFdmVudExpc3RlbmVycygpIHtcbiAgICAgICAgaWYgKHRoaXMucmVtb3ZlTW91c2VEb3duKSB0aGlzLnJlbW92ZU1vdXNlRG93bigpO1xuICAgICAgICBpZiAodGhpcy5yZW1vdmVNb3VzZVVwKSB0aGlzLnJlbW92ZU1vdXNlVXAoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbW92ZUV2ZW50TGlzdGVuZXJzO1xuICAgIH0oKVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgICB2YXIgX3Byb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICBjaGlsZHJlbiA9IF9wcm9wczMuY2hpbGRyZW4sXG4gICAgICAgICAgICBkaXNwbGF5ID0gX3Byb3BzMy5kaXNwbGF5O1xuXG5cbiAgICAgICAgcmV0dXJuIF9yZWFjdDJbJ2RlZmF1bHQnXS5jcmVhdGVFbGVtZW50KFxuICAgICAgICAgICdkaXYnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJlZjogdGhpcy5zZXRDaGlsZE5vZGVSZWYsXG4gICAgICAgICAgICBzdHlsZTogZGlzcGxheSAhPT0gRElTUExBWS5CTE9DSyAmJiAoMCwgX29iamVjdDJbJ2RlZmF1bHQnXSkoRElTUExBWSkuaW5jbHVkZXMoZGlzcGxheSkgPyB7IGRpc3BsYXk6IGRpc3BsYXkgfSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlbmRlcjtcbiAgICB9KClcbiAgfV0pO1xuXG4gIHJldHVybiBPdXRzaWRlQ2xpY2tIYW5kbGVyO1xufShfcmVhY3QyWydkZWZhdWx0J10uQ29tcG9uZW50KTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gT3V0c2lkZUNsaWNrSGFuZGxlcjtcblxuXG5PdXRzaWRlQ2xpY2tIYW5kbGVyLnByb3BUeXBlcyA9IHByb3BUeXBlcztcbk91dHNpZGVDbGlja0hhbmRsZXIuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzOyIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW5yZXNvbHZlZFxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2J1aWxkL091dHNpZGVDbGlja0hhbmRsZXInKTtcbiIsIi8qKiBAbGljZW5zZSBSZWFjdCB2MTcuMC4yXG4gKiByZWFjdC5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfYXNzaWduID0gcmVxdWlyZSgnb2JqZWN0LWFzc2lnbicpO1xuXG4vLyBUT0RPOiB0aGlzIGlzIHNwZWNpYWwgYmVjYXVzZSBpdCBnZXRzIGltcG9ydGVkIGR1cmluZyBidWlsZC5cbnZhciBSZWFjdFZlcnNpb24gPSAnMTcuMC4yJztcblxuLy8gQVRURU5USU9OXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXG4vLyBQbGVhc2UgY29uc2lkZXIgYWxzbyBhZGRpbmcgdG8gJ3JlYWN0LWRldnRvb2xzLXNoYXJlZC9zcmMvYmFja2VuZC9SZWFjdFN5bWJvbHMnXG4vLyBUaGUgU3ltYm9sIHVzZWQgdG8gdGFnIHRoZSBSZWFjdEVsZW1lbnQtbGlrZSB0eXBlcy4gSWYgdGhlcmUgaXMgbm8gbmF0aXZlIFN5bWJvbFxuLy8gbm9yIHBvbHlmaWxsLCB0aGVuIGEgcGxhaW4gbnVtYmVyIGlzIHVzZWQgZm9yIHBlcmZvcm1hbmNlLlxudmFyIFJFQUNUX0VMRU1FTlRfVFlQRSA9IDB4ZWFjNztcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IDB4ZWFjYTtcbmV4cG9ydHMuRnJhZ21lbnQgPSAweGVhY2I7XG5leHBvcnRzLlN0cmljdE1vZGUgPSAweGVhY2M7XG5leHBvcnRzLlByb2ZpbGVyID0gMHhlYWQyO1xudmFyIFJFQUNUX1BST1ZJREVSX1RZUEUgPSAweGVhY2Q7XG52YXIgUkVBQ1RfQ09OVEVYVF9UWVBFID0gMHhlYWNlO1xudmFyIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgPSAweGVhZDA7XG5leHBvcnRzLlN1c3BlbnNlID0gMHhlYWQxO1xudmFyIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRSA9IDB4ZWFkODtcbnZhciBSRUFDVF9NRU1PX1RZUEUgPSAweGVhZDM7XG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gMHhlYWQ0O1xudmFyIFJFQUNUX0JMT0NLX1RZUEUgPSAweGVhZDk7XG52YXIgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSAweGVhZGE7XG52YXIgUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSA9IDB4ZWFkNTtcbnZhciBSRUFDVF9TQ09QRV9UWVBFID0gMHhlYWQ3O1xudmFyIFJFQUNUX09QQVFVRV9JRF9UWVBFID0gMHhlYWUwO1xudmFyIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gMHhlYWUxO1xudmFyIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gMHhlYWUyO1xudmFyIFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSA9IDB4ZWFlMztcblxuaWYgKHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgU3ltYm9sLmZvcikge1xuICB2YXIgc3ltYm9sRm9yID0gU3ltYm9sLmZvcjtcbiAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5lbGVtZW50Jyk7XG4gIFJFQUNUX1BPUlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wb3J0YWwnKTtcbiAgZXhwb3J0cy5GcmFnbWVudCA9IHN5bWJvbEZvcigncmVhY3QuZnJhZ21lbnQnKTtcbiAgZXhwb3J0cy5TdHJpY3RNb2RlID0gc3ltYm9sRm9yKCdyZWFjdC5zdHJpY3RfbW9kZScpO1xuICBleHBvcnRzLlByb2ZpbGVyID0gc3ltYm9sRm9yKCdyZWFjdC5wcm9maWxlcicpO1xuICBSRUFDVF9QUk9WSURFUl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5wcm92aWRlcicpO1xuICBSRUFDVF9DT05URVhUX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmNvbnRleHQnKTtcbiAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcbiAgZXhwb3J0cy5TdXNwZW5zZSA9IHN5bWJvbEZvcigncmVhY3Quc3VzcGVuc2UnKTtcbiAgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zdXNwZW5zZV9saXN0Jyk7XG4gIFJFQUNUX01FTU9fVFlQRSA9IHN5bWJvbEZvcigncmVhY3QubWVtbycpO1xuICBSRUFDVF9MQVpZX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LmxhenknKTtcbiAgUkVBQ1RfQkxPQ0tfVFlQRSA9IHN5bWJvbEZvcigncmVhY3QuYmxvY2snKTtcbiAgUkVBQ1RfU0VSVkVSX0JMT0NLX1RZUEUgPSBzeW1ib2xGb3IoJ3JlYWN0LnNlcnZlci5ibG9jaycpO1xuICBSRUFDVF9GVU5EQU1FTlRBTF9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5mdW5kYW1lbnRhbCcpO1xuICBSRUFDVF9TQ09QRV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5zY29wZScpO1xuICBSRUFDVF9PUEFRVUVfSURfVFlQRSA9IHN5bWJvbEZvcigncmVhY3Qub3BhcXVlLmlkJyk7XG4gIFJFQUNUX0RFQlVHX1RSQUNJTkdfTU9ERV9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5kZWJ1Z190cmFjZV9tb2RlJyk7XG4gIFJFQUNUX09GRlNDUkVFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcbiAgUkVBQ1RfTEVHQUNZX0hJRERFTl9UWVBFID0gc3ltYm9sRm9yKCdyZWFjdC5sZWdhY3lfaGlkZGVuJyk7XG59XG5cbnZhciBNQVlCRV9JVEVSQVRPUl9TWU1CT0wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5pdGVyYXRvcjtcbnZhciBGQVVYX0lURVJBVE9SX1NZTUJPTCA9ICdAQGl0ZXJhdG9yJztcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xuICBpZiAobWF5YmVJdGVyYWJsZSA9PT0gbnVsbCB8fCB0eXBlb2YgbWF5YmVJdGVyYWJsZSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBtYXliZUl0ZXJhdG9yID0gTUFZQkVfSVRFUkFUT1JfU1lNQk9MICYmIG1heWJlSXRlcmFibGVbTUFZQkVfSVRFUkFUT1JfU1lNQk9MXSB8fCBtYXliZUl0ZXJhYmxlW0ZBVVhfSVRFUkFUT1JfU1lNQk9MXTtcblxuICBpZiAodHlwZW9mIG1heWJlSXRlcmF0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF5YmVJdGVyYXRvcjtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEtlZXBzIHRyYWNrIG9mIHRoZSBjdXJyZW50IGRpc3BhdGNoZXIuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0ge1xuICAvKipcbiAgICogQGludGVybmFsXG4gICAqIEB0eXBlIHtSZWFjdENvbXBvbmVudH1cbiAgICovXG4gIGN1cnJlbnQ6IG51bGxcbn07XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgYmF0Y2gncyBjb25maWd1cmF0aW9uIHN1Y2ggYXMgaG93IGxvbmcgYW4gdXBkYXRlXG4gKiBzaG91bGQgc3VzcGVuZCBmb3IgaWYgaXQgbmVlZHMgdG8uXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyA9IHtcbiAgdHJhbnNpdGlvbjogMFxufTtcblxuLyoqXG4gKiBLZWVwcyB0cmFjayBvZiB0aGUgY3VycmVudCBvd25lci5cbiAqXG4gKiBUaGUgY3VycmVudCBvd25lciBpcyB0aGUgY29tcG9uZW50IHdobyBzaG91bGQgb3duIGFueSBjb21wb25lbnRzIHRoYXQgYXJlXG4gKiBjdXJyZW50bHkgYmVpbmcgY29uc3RydWN0ZWQuXG4gKi9cbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IHtcbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKiBAdHlwZSB7UmVhY3RDb21wb25lbnR9XG4gICAqL1xuICBjdXJyZW50OiBudWxsXG59O1xuXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IHt9O1xudmFyIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBudWxsO1xuZnVuY3Rpb24gc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKSB7XG4gIHtcbiAgICBjdXJyZW50RXh0cmFTdGFja0ZyYW1lID0gc3RhY2s7XG4gIH1cbn1cblxue1xuICBSZWFjdERlYnVnQ3VycmVudEZyYW1lLnNldEV4dHJhU3RhY2tGcmFtZSA9IGZ1bmN0aW9uIChzdGFjaykge1xuICAgIHtcbiAgICAgIGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUgPSBzdGFjaztcbiAgICB9XG4gIH07IC8vIFN0YWNrIGltcGxlbWVudGF0aW9uIGluamVjdGVkIGJ5IHRoZSBjdXJyZW50IHJlbmRlcmVyLlxuXG5cbiAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRDdXJyZW50U3RhY2sgPSBudWxsO1xuXG4gIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RhY2sgPSAnJzsgLy8gQWRkIGFuIGV4dHJhIHRvcCBmcmFtZSB3aGlsZSBhbiBlbGVtZW50IGlzIGJlaW5nIHZhbGlkYXRlZFxuXG4gICAgaWYgKGN1cnJlbnRFeHRyYVN0YWNrRnJhbWUpIHtcbiAgICAgIHN0YWNrICs9IGN1cnJlbnRFeHRyYVN0YWNrRnJhbWU7XG4gICAgfSAvLyBEZWxlZ2F0ZSB0byB0aGUgaW5qZWN0ZWQgcmVuZGVyZXItc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cblxuXG4gICAgdmFyIGltcGwgPSBSZWFjdERlYnVnQ3VycmVudEZyYW1lLmdldEN1cnJlbnRTdGFjaztcblxuICAgIGlmIChpbXBsKSB7XG4gICAgICBzdGFjayArPSBpbXBsKCkgfHwgJyc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YWNrO1xuICB9O1xufVxuXG4vKipcbiAqIFVzZWQgYnkgYWN0KCkgdG8gdHJhY2sgd2hldGhlciB5b3UncmUgaW5zaWRlIGFuIGFjdCgpIHNjb3BlLlxuICovXG52YXIgSXNTb21lUmVuZGVyZXJBY3RpbmcgPSB7XG4gIGN1cnJlbnQ6IGZhbHNlXG59O1xuXG52YXIgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPSB7XG4gIFJlYWN0Q3VycmVudERpc3BhdGNoZXI6IFJlYWN0Q3VycmVudERpc3BhdGNoZXIsXG4gIFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOiBSZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxcbiAgUmVhY3RDdXJyZW50T3duZXI6IFJlYWN0Q3VycmVudE93bmVyLFxuICBJc1NvbWVSZW5kZXJlckFjdGluZzogSXNTb21lUmVuZGVyZXJBY3RpbmcsXG4gIC8vIFVzZWQgYnkgcmVuZGVyZXJzIHRvIGF2b2lkIGJ1bmRsaW5nIG9iamVjdC1hc3NpZ24gdHdpY2UgaW4gVU1EIGJ1bmRsZXM6XG4gIGFzc2lnbjogX2Fzc2lnblxufTtcblxue1xuICBSZWFjdFNoYXJlZEludGVybmFscy5SZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcbn1cblxuLy8gYnkgY2FsbHMgdG8gdGhlc2UgbWV0aG9kcyBieSBhIEJhYmVsIHBsdWdpbi5cbi8vXG4vLyBJbiBQUk9EIChvciBpbiBwYWNrYWdlcyB3aXRob3V0IGFjY2VzcyB0byBSZWFjdCBpbnRlcm5hbHMpLFxuLy8gdGhleSBhcmUgbGVmdCBhcyB0aGV5IGFyZSBpbnN0ZWFkLlxuXG5mdW5jdGlvbiB3YXJuKGZvcm1hdCkge1xuICB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcHJpbnRXYXJuaW5nKCd3YXJuJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuZnVuY3Rpb24gZXJyb3IoZm9ybWF0KSB7XG4gIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIgPiAxID8gX2xlbjIgLSAxIDogMCksIF9rZXkyID0gMTsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICBwcmludFdhcm5pbmcoJ2Vycm9yJywgZm9ybWF0LCBhcmdzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xuICAvLyBXaGVuIGNoYW5naW5nIHRoaXMgbG9naWMsIHlvdSBtaWdodCB3YW50IHRvIGFsc29cbiAgLy8gdXBkYXRlIGNvbnNvbGVXaXRoU3RhY2tEZXYud3d3LmpzIGFzIHdlbGwuXG4gIHtcbiAgICB2YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG4gICAgdmFyIHN0YWNrID0gUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZS5nZXRTdGFja0FkZGVuZHVtKCk7XG5cbiAgICBpZiAoc3RhY2sgIT09ICcnKSB7XG4gICAgICBmb3JtYXQgKz0gJyVzJztcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcbiAgICB9XG5cbiAgICB2YXIgYXJnc1dpdGhGb3JtYXQgPSBhcmdzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuICcnICsgaXRlbTtcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcblxuICAgIGFyZ3NXaXRoRm9ybWF0LnVuc2hpZnQoJ1dhcm5pbmc6ICcgKyBmb3JtYXQpOyAvLyBXZSBpbnRlbnRpb25hbGx5IGRvbid0IHVzZSBzcHJlYWQgKG9yIC5hcHBseSkgZGlyZWN0bHkgYmVjYXVzZSBpdFxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nXG5cbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xuICB9XG59XG5cbnZhciBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnQgPSB7fTtcblxuZnVuY3Rpb24gd2Fybk5vb3AocHVibGljSW5zdGFuY2UsIGNhbGxlck5hbWUpIHtcbiAge1xuICAgIHZhciBfY29uc3RydWN0b3IgPSBwdWJsaWNJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICB2YXIgY29tcG9uZW50TmFtZSA9IF9jb25zdHJ1Y3RvciAmJiAoX2NvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IF9jb25zdHJ1Y3Rvci5uYW1lKSB8fCAnUmVhY3RDbGFzcyc7XG4gICAgdmFyIHdhcm5pbmdLZXkgPSBjb21wb25lbnROYW1lICsgXCIuXCIgKyBjYWxsZXJOYW1lO1xuXG4gICAgaWYgKGRpZFdhcm5TdGF0ZVVwZGF0ZUZvclVubW91bnRlZENvbXBvbmVudFt3YXJuaW5nS2V5XSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVycm9yKFwiQ2FuJ3QgY2FsbCAlcyBvbiBhIGNvbXBvbmVudCB0aGF0IGlzIG5vdCB5ZXQgbW91bnRlZC4gXCIgKyAnVGhpcyBpcyBhIG5vLW9wLCBidXQgaXQgbWlnaHQgaW5kaWNhdGUgYSBidWcgaW4geW91ciBhcHBsaWNhdGlvbi4gJyArICdJbnN0ZWFkLCBhc3NpZ24gdG8gYHRoaXMuc3RhdGVgIGRpcmVjdGx5IG9yIGRlZmluZSBhIGBzdGF0ZSA9IHt9O2AgJyArICdjbGFzcyBwcm9wZXJ0eSB3aXRoIHRoZSBkZXNpcmVkIHN0YXRlIGluIHRoZSAlcyBjb21wb25lbnQuJywgY2FsbGVyTmFtZSwgY29tcG9uZW50TmFtZSk7XG5cbiAgICBkaWRXYXJuU3RhdGVVcGRhdGVGb3JVbm1vdW50ZWRDb21wb25lbnRbd2FybmluZ0tleV0gPSB0cnVlO1xuICB9XG59XG4vKipcbiAqIFRoaXMgaXMgdGhlIGFic3RyYWN0IEFQSSBmb3IgYW4gdXBkYXRlIHF1ZXVlLlxuICovXG5cblxudmFyIFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlID0ge1xuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHRoaXMgY29tcG9zaXRlIGNvbXBvbmVudCBpcyBtb3VudGVkLlxuICAgKiBAcGFyYW0ge1JlYWN0Q2xhc3N9IHB1YmxpY0luc3RhbmNlIFRoZSBpbnN0YW5jZSB3ZSB3YW50IHRvIHRlc3QuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgbW91bnRlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKiBAcHJvdGVjdGVkXG4gICAqIEBmaW5hbFxuICAgKi9cbiAgaXNNb3VudGVkOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAgICogY2VydGFpbnR5IHRoYXQgd2UgYXJlICoqbm90KiogaW4gYSBET00gdHJhbnNhY3Rpb24uXG4gICAqXG4gICAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAgICogY29tcG9uZW50J3Mgc3RhdGUgaGFzIGNoYW5nZWQgYnV0IGBzZXRTdGF0ZWAgd2FzIG5vdCBjYWxsZWQuXG4gICAqXG4gICAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAgICogYGNvbXBvbmVudFdpbGxVcGRhdGVgIGFuZCBgY29tcG9uZW50RGlkVXBkYXRlYC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgY29tcG9uZW50IGlzIHVwZGF0ZWQuXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gY2FsbGVyTmFtZSBuYW1lIG9mIHRoZSBjYWxsaW5nIGZ1bmN0aW9uIGluIHRoZSBwdWJsaWMgQVBJLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIGVucXVldWVGb3JjZVVwZGF0ZTogZnVuY3Rpb24gKHB1YmxpY0luc3RhbmNlLCBjYWxsYmFjaywgY2FsbGVyTmFtZSkge1xuICAgIHdhcm5Ob29wKHB1YmxpY0luc3RhbmNlLCAnZm9yY2VVcGRhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogUmVwbGFjZXMgYWxsIG9mIHRoZSBzdGF0ZS4gQWx3YXlzIHVzZSB0aGlzIG9yIGBzZXRTdGF0ZWAgdG8gbXV0YXRlIHN0YXRlLlxuICAgKiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gICAqXG4gICAqIFRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGB0aGlzLnN0YXRlYCB3aWxsIGJlIGltbWVkaWF0ZWx5IHVwZGF0ZWQsIHNvXG4gICAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3RDbGFzc30gcHVibGljSW5zdGFuY2UgVGhlIGluc3RhbmNlIHRoYXQgc2hvdWxkIHJlcmVuZGVyLlxuICAgKiBAcGFyYW0ge29iamVjdH0gY29tcGxldGVTdGF0ZSBOZXh0IHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IGNhbGxlck5hbWUgbmFtZSBvZiB0aGUgY2FsbGluZyBmdW5jdGlvbiBpbiB0aGUgcHVibGljIEFQSS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBlbnF1ZXVlUmVwbGFjZVN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIGNvbXBsZXRlU3RhdGUsIGNhbGxiYWNrLCBjYWxsZXJOYW1lKSB7XG4gICAgd2Fybk5vb3AocHVibGljSW5zdGFuY2UsICdyZXBsYWNlU3RhdGUnKTtcbiAgfSxcblxuICAvKipcbiAgICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIFRoaXMgb25seSBleGlzdHMgYmVjYXVzZSBfcGVuZGluZ1N0YXRlIGlzXG4gICAqIGludGVybmFsLiBUaGlzIHByb3ZpZGVzIGEgbWVyZ2luZyBzdHJhdGVneSB0aGF0IGlzIG5vdCBhdmFpbGFibGUgdG8gZGVlcFxuICAgKiBwcm9wZXJ0aWVzIHdoaWNoIGlzIGNvbmZ1c2luZy4gVE9ETzogRXhwb3NlIHBlbmRpbmdTdGF0ZSBvciBkb24ndCB1c2UgaXRcbiAgICogZHVyaW5nIHRoZSBtZXJnZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdENsYXNzfSBwdWJsaWNJbnN0YW5jZSBUaGUgaW5zdGFuY2UgdGhhdCBzaG91bGQgcmVyZW5kZXIuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIHRvIGJlIG1lcmdlZCB3aXRoIHN0YXRlLlxuICAgKiBAcGFyYW0gez9mdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGVkIGFmdGVyIGNvbXBvbmVudCBpcyB1cGRhdGVkLlxuICAgKiBAcGFyYW0gez9zdHJpbmd9IE5hbWUgb2YgdGhlIGNhbGxpbmcgZnVuY3Rpb24gaW4gdGhlIHB1YmxpYyBBUEkuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgZW5xdWV1ZVNldFN0YXRlOiBmdW5jdGlvbiAocHVibGljSW5zdGFuY2UsIHBhcnRpYWxTdGF0ZSwgY2FsbGJhY2ssIGNhbGxlck5hbWUpIHtcbiAgICB3YXJuTm9vcChwdWJsaWNJbnN0YW5jZSwgJ3NldFN0YXRlJyk7XG4gIH1cbn07XG5cbnZhciBlbXB0eU9iamVjdCA9IHt9O1xuXG57XG4gIE9iamVjdC5mcmVlemUoZW1wdHlPYmplY3QpO1xufVxuLyoqXG4gKiBCYXNlIGNsYXNzIGhlbHBlcnMgZm9yIHRoZSB1cGRhdGluZyBzdGF0ZSBvZiBhIGNvbXBvbmVudC5cbiAqL1xuXG5cbmZ1bmN0aW9uIENvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0OyAvLyBXZSBpbml0aWFsaXplIHRoZSBkZWZhdWx0IHVwZGF0ZXIgYnV0IHRoZSByZWFsIG9uZSBnZXRzIGluamVjdGVkIGJ5IHRoZVxuICAvLyByZW5kZXJlci5cblxuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG5Db21wb25lbnQucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQgPSB7fTtcbi8qKlxuICogU2V0cyBhIHN1YnNldCBvZiB0aGUgc3RhdGUuIEFsd2F5cyB1c2UgdGhpcyB0byBtdXRhdGVcbiAqIHN0YXRlLiBZb3Ugc2hvdWxkIHRyZWF0IGB0aGlzLnN0YXRlYCBhcyBpbW11dGFibGUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgYHRoaXMuc3RhdGVgIHdpbGwgYmUgaW1tZWRpYXRlbHkgdXBkYXRlZCwgc29cbiAqIGFjY2Vzc2luZyBgdGhpcy5zdGF0ZWAgYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIHRoZSBvbGQgdmFsdWUuXG4gKlxuICogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgY2FsbHMgdG8gYHNldFN0YXRlYCB3aWxsIHJ1biBzeW5jaHJvbm91c2x5LFxuICogYXMgdGhleSBtYXkgZXZlbnR1YWxseSBiZSBiYXRjaGVkIHRvZ2V0aGVyLiAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsXG4gKiBjYWxsYmFjayB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgY2FsbCB0byBzZXRTdGF0ZSBpcyBhY3R1YWxseVxuICogY29tcGxldGVkLlxuICpcbiAqIFdoZW4gYSBmdW5jdGlvbiBpcyBwcm92aWRlZCB0byBzZXRTdGF0ZSwgaXQgd2lsbCBiZSBjYWxsZWQgYXQgc29tZSBwb2ludCBpblxuICogdGhlIGZ1dHVyZSAobm90IHN5bmNocm9ub3VzbHkpLiBJdCB3aWxsIGJlIGNhbGxlZCB3aXRoIHRoZSB1cCB0byBkYXRlXG4gKiBjb21wb25lbnQgYXJndW1lbnRzIChzdGF0ZSwgcHJvcHMsIGNvbnRleHQpLiBUaGVzZSB2YWx1ZXMgY2FuIGJlIGRpZmZlcmVudFxuICogZnJvbSB0aGlzLiogYmVjYXVzZSB5b3VyIGZ1bmN0aW9uIG1heSBiZSBjYWxsZWQgYWZ0ZXIgcmVjZWl2ZVByb3BzIGJ1dCBiZWZvcmVcbiAqIHNob3VsZENvbXBvbmVudFVwZGF0ZSwgYW5kIHRoaXMgbmV3IHN0YXRlLCBwcm9wcywgYW5kIGNvbnRleHQgd2lsbCBub3QgeWV0IGJlXG4gKiBhc3NpZ25lZCB0byB0aGlzLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fGZ1bmN0aW9ufSBwYXJ0aWFsU3RhdGUgTmV4dCBwYXJ0aWFsIHN0YXRlIG9yIGZ1bmN0aW9uIHRvXG4gKiAgICAgICAgcHJvZHVjZSBuZXh0IHBhcnRpYWwgc3RhdGUgdG8gYmUgbWVyZ2VkIHdpdGggY3VycmVudCBzdGF0ZS5cbiAqIEBwYXJhbSB7P2Z1bmN0aW9ufSBjYWxsYmFjayBDYWxsZWQgYWZ0ZXIgc3RhdGUgaXMgdXBkYXRlZC5cbiAqIEBmaW5hbFxuICogQHByb3RlY3RlZFxuICovXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuc2V0U3RhdGUgPSBmdW5jdGlvbiAocGFydGlhbFN0YXRlLCBjYWxsYmFjaykge1xuICBpZiAoISh0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgcGFydGlhbFN0YXRlID09PSAnZnVuY3Rpb24nIHx8IHBhcnRpYWxTdGF0ZSA9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcInNldFN0YXRlKC4uLik6IHRha2VzIGFuIG9iamVjdCBvZiBzdGF0ZSB2YXJpYWJsZXMgdG8gdXBkYXRlIG9yIGEgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhbiBvYmplY3Qgb2Ygc3RhdGUgdmFyaWFibGVzLlwiICk7XG4gICAgfVxuICB9XG5cbiAgdGhpcy51cGRhdGVyLmVucXVldWVTZXRTdGF0ZSh0aGlzLCBwYXJ0aWFsU3RhdGUsIGNhbGxiYWNrLCAnc2V0U3RhdGUnKTtcbn07XG4vKipcbiAqIEZvcmNlcyBhbiB1cGRhdGUuIFRoaXMgc2hvdWxkIG9ubHkgYmUgaW52b2tlZCB3aGVuIGl0IGlzIGtub3duIHdpdGhcbiAqIGNlcnRhaW50eSB0aGF0IHdlIGFyZSAqKm5vdCoqIGluIGEgRE9NIHRyYW5zYWN0aW9uLlxuICpcbiAqIFlvdSBtYXkgd2FudCB0byBjYWxsIHRoaXMgd2hlbiB5b3Uga25vdyB0aGF0IHNvbWUgZGVlcGVyIGFzcGVjdCBvZiB0aGVcbiAqIGNvbXBvbmVudCdzIHN0YXRlIGhhcyBjaGFuZ2VkIGJ1dCBgc2V0U3RhdGVgIHdhcyBub3QgY2FsbGVkLlxuICpcbiAqIFRoaXMgd2lsbCBub3QgaW52b2tlIGBzaG91bGRDb21wb25lbnRVcGRhdGVgLCBidXQgaXQgd2lsbCBpbnZva2VcbiAqIGBjb21wb25lbnRXaWxsVXBkYXRlYCBhbmQgYGNvbXBvbmVudERpZFVwZGF0ZWAuXG4gKlxuICogQHBhcmFtIHs/ZnVuY3Rpb259IGNhbGxiYWNrIENhbGxlZCBhZnRlciB1cGRhdGUgaXMgY29tcGxldGUuXG4gKiBAZmluYWxcbiAqIEBwcm90ZWN0ZWRcbiAqL1xuXG5cbkNvbXBvbmVudC5wcm90b3R5cGUuZm9yY2VVcGRhdGUgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgdGhpcy51cGRhdGVyLmVucXVldWVGb3JjZVVwZGF0ZSh0aGlzLCBjYWxsYmFjaywgJ2ZvcmNlVXBkYXRlJyk7XG59O1xuLyoqXG4gKiBEZXByZWNhdGVkIEFQSXMuIFRoZXNlIEFQSXMgdXNlZCB0byBleGlzdCBvbiBjbGFzc2ljIFJlYWN0IGNsYXNzZXMgYnV0IHNpbmNlXG4gKiB3ZSB3b3VsZCBsaWtlIHRvIGRlcHJlY2F0ZSB0aGVtLCB3ZSdyZSBub3QgZ29pbmcgdG8gbW92ZSB0aGVtIG92ZXIgdG8gdGhpc1xuICogbW9kZXJuIGJhc2UgY2xhc3MuIEluc3RlYWQsIHdlIGRlZmluZSBhIGdldHRlciB0aGF0IHdhcm5zIGlmIGl0J3MgYWNjZXNzZWQuXG4gKi9cblxuXG57XG4gIHZhciBkZXByZWNhdGVkQVBJcyA9IHtcbiAgICBpc01vdW50ZWQ6IFsnaXNNb3VudGVkJywgJ0luc3RlYWQsIG1ha2Ugc3VyZSB0byBjbGVhbiB1cCBzdWJzY3JpcHRpb25zIGFuZCBwZW5kaW5nIHJlcXVlc3RzIGluICcgKyAnY29tcG9uZW50V2lsbFVubW91bnQgdG8gcHJldmVudCBtZW1vcnkgbGVha3MuJ10sXG4gICAgcmVwbGFjZVN0YXRlOiBbJ3JlcGxhY2VTdGF0ZScsICdSZWZhY3RvciB5b3VyIGNvZGUgdG8gdXNlIHNldFN0YXRlIGluc3RlYWQgKHNlZSAnICsgJ2h0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMzIzNikuJ11cbiAgfTtcblxuICB2YXIgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nID0gZnVuY3Rpb24gKG1ldGhvZE5hbWUsIGluZm8pIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQ29tcG9uZW50LnByb3RvdHlwZSwgbWV0aG9kTmFtZSwge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJyVzKC4uLikgaXMgZGVwcmVjYXRlZCBpbiBwbGFpbiBKYXZhU2NyaXB0IFJlYWN0IGNsYXNzZXMuICVzJywgaW5mb1swXSwgaW5mb1sxXSk7XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBmb3IgKHZhciBmbk5hbWUgaW4gZGVwcmVjYXRlZEFQSXMpIHtcbiAgICBpZiAoZGVwcmVjYXRlZEFQSXMuaGFzT3duUHJvcGVydHkoZm5OYW1lKSkge1xuICAgICAgZGVmaW5lRGVwcmVjYXRpb25XYXJuaW5nKGZuTmFtZSwgZGVwcmVjYXRlZEFQSXNbZm5OYW1lXSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIENvbXBvbmVudER1bW15KCkge31cblxuQ29tcG9uZW50RHVtbXkucHJvdG90eXBlID0gQ29tcG9uZW50LnByb3RvdHlwZTtcbi8qKlxuICogQ29udmVuaWVuY2UgY29tcG9uZW50IHdpdGggZGVmYXVsdCBzaGFsbG93IGVxdWFsaXR5IGNoZWNrIGZvciBzQ1UuXG4gKi9cblxuZnVuY3Rpb24gUHVyZUNvbXBvbmVudChwcm9wcywgY29udGV4dCwgdXBkYXRlcikge1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7IC8vIElmIGEgY29tcG9uZW50IGhhcyBzdHJpbmcgcmVmcywgd2Ugd2lsbCBhc3NpZ24gYSBkaWZmZXJlbnQgb2JqZWN0IGxhdGVyLlxuXG4gIHRoaXMucmVmcyA9IGVtcHR5T2JqZWN0O1xuICB0aGlzLnVwZGF0ZXIgPSB1cGRhdGVyIHx8IFJlYWN0Tm9vcFVwZGF0ZVF1ZXVlO1xufVxuXG52YXIgcHVyZUNvbXBvbmVudFByb3RvdHlwZSA9IFB1cmVDb21wb25lbnQucHJvdG90eXBlID0gbmV3IENvbXBvbmVudER1bW15KCk7XG5wdXJlQ29tcG9uZW50UHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHVyZUNvbXBvbmVudDsgLy8gQXZvaWQgYW4gZXh0cmEgcHJvdG90eXBlIGp1bXAgZm9yIHRoZXNlIG1ldGhvZHMuXG5cbl9hc3NpZ24ocHVyZUNvbXBvbmVudFByb3RvdHlwZSwgQ29tcG9uZW50LnByb3RvdHlwZSk7XG5cbnB1cmVDb21wb25lbnRQcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnQgPSB0cnVlO1xuXG4vLyBhbiBpbW11dGFibGUgb2JqZWN0IHdpdGggYSBzaW5nbGUgbXV0YWJsZSB2YWx1ZVxuZnVuY3Rpb24gY3JlYXRlUmVmKCkge1xuICB2YXIgcmVmT2JqZWN0ID0ge1xuICAgIGN1cnJlbnQ6IG51bGxcbiAgfTtcblxuICB7XG4gICAgT2JqZWN0LnNlYWwocmVmT2JqZWN0KTtcbiAgfVxuXG4gIHJldHVybiByZWZPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xuICByZXR1cm4gb3V0ZXJUeXBlLmRpc3BsYXlOYW1lIHx8IChmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRDb250ZXh0TmFtZSh0eXBlKSB7XG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0Jztcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZSh0eXBlKSB7XG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHtcbiAgICBpZiAodHlwZW9mIHR5cGUudGFnID09PSAnbnVtYmVyJykge1xuICAgICAgZXJyb3IoJ1JlY2VpdmVkIGFuIHVuZXhwZWN0ZWQgb2JqZWN0IGluIGdldENvbXBvbmVudE5hbWUoKS4gJyArICdUaGlzIGlzIGxpa2VseSBhIGJ1ZyBpbiBSZWFjdC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuJyk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8IG51bGw7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHR5cGU7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuRnJhZ21lbnQ6XG4gICAgICByZXR1cm4gJ0ZyYWdtZW50JztcblxuICAgIGNhc2UgUkVBQ1RfUE9SVEFMX1RZUEU6XG4gICAgICByZXR1cm4gJ1BvcnRhbCc7XG5cbiAgICBjYXNlIGV4cG9ydHMuUHJvZmlsZXI6XG4gICAgICByZXR1cm4gJ1Byb2ZpbGVyJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdHJpY3RNb2RlOlxuICAgICAgcmV0dXJuICdTdHJpY3RNb2RlJztcblxuICAgIGNhc2UgZXhwb3J0cy5TdXNwZW5zZTpcbiAgICAgIHJldHVybiAnU3VzcGVuc2UnO1xuXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICByZXR1cm4gJ1N1c3BlbnNlTGlzdCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0NPTlRFWFRfVFlQRTpcbiAgICAgICAgdmFyIGNvbnRleHQgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUoY29udGV4dCkgKyAnLkNvbnN1bWVyJztcblxuICAgICAgY2FzZSBSRUFDVF9QUk9WSURFUl9UWVBFOlxuICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xuICAgICAgICByZXR1cm4gZ2V0Q29udGV4dE5hbWUocHJvdmlkZXIuX2NvbnRleHQpICsgJy5Qcm92aWRlcic7XG5cbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldFdyYXBwZWROYW1lKHR5cGUsIHR5cGUucmVuZGVyLCAnRm9yd2FyZFJlZicpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWUodHlwZS50eXBlKTtcblxuICAgICAgY2FzZSBSRUFDVF9CTE9DS19UWVBFOlxuICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBnZXRDb21wb25lbnROYW1lKGluaXQocGF5bG9hZCkpO1xuICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIFJFU0VSVkVEX1BST1BTID0ge1xuICBrZXk6IHRydWUsXG4gIHJlZjogdHJ1ZSxcbiAgX19zZWxmOiB0cnVlLFxuICBfX3NvdXJjZTogdHJ1ZVxufTtcbnZhciBzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biwgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24sIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XG5cbntcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ3JlZicpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLnJlZiAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBoYXNWYWxpZEtleShjb25maWcpIHtcbiAge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2tleScpKSB7XG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdrZXknKS5nZXQ7XG5cbiAgICAgIGlmIChnZXR0ZXIgJiYgZ2V0dGVyLmlzUmVhY3RXYXJuaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29uZmlnLmtleSAhPT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBkZWZpbmVLZXlQcm9wV2FybmluZ0dldHRlcihwcm9wcywgZGlzcGxheU5hbWUpIHtcbiAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcbiAgICB7XG4gICAgICBpZiAoIXNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcblxuICAgICAgICBlcnJvcignJXM6IGBrZXlgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgJ2tleScsIHtcbiAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSkge1xuICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xuICAgIHtcbiAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcbiAgICAgICAgc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24gPSB0cnVlO1xuXG4gICAgICAgIGVycm9yKCclczogYHJlZmAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCAnICsgJ2luIGB1bmRlZmluZWRgIGJlaW5nIHJldHVybmVkLiBJZiB5b3UgbmVlZCB0byBhY2Nlc3MgdGhlIHNhbWUgJyArICd2YWx1ZSB3aXRoaW4gdGhlIGNoaWxkIGNvbXBvbmVudCwgeW91IHNob3VsZCBwYXNzIGl0IGFzIGEgZGlmZmVyZW50ICcgKyAncHJvcC4gKGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zcGVjaWFsLXByb3BzKScsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xuICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9KTtcbn1cblxuZnVuY3Rpb24gd2FybklmU3RyaW5nUmVmQ2Fubm90QmVBdXRvQ29udmVydGVkKGNvbmZpZykge1xuICB7XG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmID09PSAnc3RyaW5nJyAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50ICYmIGNvbmZpZy5fX3NlbGYgJiYgUmVhY3RDdXJyZW50T3duZXIuY3VycmVudC5zdGF0ZU5vZGUgIT09IGNvbmZpZy5fX3NlbGYpIHtcbiAgICAgIHZhciBjb21wb25lbnROYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dFN0cmluZ1JlZnNbY29tcG9uZW50TmFtZV0pIHtcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgY29tcG9uZW50TmFtZSwgY29uZmlnLnJlZik7XG5cbiAgICAgICAgZGlkV2FybkFib3V0U3RyaW5nUmVmc1tjb21wb25lbnROYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXG4gKiB0aGUgY2xhc3MgcGF0dGVybiwgc28gZG8gbm90IHVzZSBuZXcgdG8gY2FsbCBpdC4gQWxzbywgaW5zdGFuY2VvZiBjaGVja1xuICogd2lsbCBub3Qgd29yay4gSW5zdGVhZCB0ZXN0ICQkdHlwZW9mIGZpZWxkIGFnYWluc3QgU3ltYm9sLmZvcigncmVhY3QuZWxlbWVudCcpIHRvIGNoZWNrXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxuICpcbiAqIEBwYXJhbSB7Kn0gdHlwZVxuICogQHBhcmFtIHsqfSBwcm9wc1xuICogQHBhcmFtIHsqfSBrZXlcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gcmVmXG4gKiBAcGFyYW0geyp9IG93bmVyXG4gKiBAcGFyYW0geyp9IHNlbGYgQSAqdGVtcG9yYXJ5KiBoZWxwZXIgdG8gZGV0ZWN0IHBsYWNlcyB3aGVyZSBgdGhpc2AgaXNcbiAqIGRpZmZlcmVudCBmcm9tIHRoZSBgb3duZXJgIHdoZW4gUmVhY3QuY3JlYXRlRWxlbWVudCBpcyBjYWxsZWQsIHNvIHRoYXQgd2VcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XG4gKiBmdW5jdGlvbnMsIGFuZCBhcyBsb25nIGFzIGB0aGlzYCBhbmQgb3duZXIgYXJlIHRoZSBzYW1lLCB0aGVyZSB3aWxsIGJlIG5vXG4gKiBjaGFuZ2UgaW4gYmVoYXZpb3IuXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcbiAqIGluZGljYXRpbmcgZmlsZW5hbWUsIGxpbmUgbnVtYmVyLCBhbmQvb3Igb3RoZXIgaW5mb3JtYXRpb24uXG4gKiBAaW50ZXJuYWxcbiAqL1xuXG5cbnZhciBSZWFjdEVsZW1lbnQgPSBmdW5jdGlvbiAodHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XG4gIHZhciBlbGVtZW50ID0ge1xuICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxuICAgICQkdHlwZW9mOiBSRUFDVF9FTEVNRU5UX1RZUEUsXG4gICAgLy8gQnVpbHQtaW4gcHJvcGVydGllcyB0aGF0IGJlbG9uZyBvbiB0aGUgZWxlbWVudFxuICAgIHR5cGU6IHR5cGUsXG4gICAga2V5OiBrZXksXG4gICAgcmVmOiByZWYsXG4gICAgcHJvcHM6IHByb3BzLFxuICAgIC8vIFJlY29yZCB0aGUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyB0aGlzIGVsZW1lbnQuXG4gICAgX293bmVyOiBvd25lclxuICB9O1xuXG4gIHtcbiAgICAvLyBUaGUgdmFsaWRhdGlvbiBmbGFnIGlzIGN1cnJlbnRseSBtdXRhdGl2ZS4gV2UgcHV0IGl0IG9uXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cbiAgICAvLyBUaGlzIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgV2Vha01hcCBvbmNlIHRoZXkgYXJlIGltcGxlbWVudGVkIGluXG4gICAgLy8gY29tbW9ubHkgdXNlZCBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMuXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcbiAgICAvLyB0aGUgdmFsaWRhdGlvbiBmbGFnIG5vbi1lbnVtZXJhYmxlICh3aGVyZSBwb3NzaWJsZSwgd2hpY2ggc2hvdWxkXG4gICAgLy8gaW5jbHVkZSBldmVyeSBlbnZpcm9ubWVudCB3ZSBydW4gdGVzdHMgaW4pLCBzbyB0aGUgdGVzdCBmcmFtZXdvcmtcbiAgICAvLyBpZ25vcmVzIGl0LlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQuX3N0b3JlLCAndmFsaWRhdGVkJywge1xuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogZmFsc2VcbiAgICB9KTsgLy8gc2VsZiBhbmQgc291cmNlIGFyZSBERVYgb25seSBwcm9wZXJ0aWVzLlxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVsZW1lbnQsICdfc2VsZicsIHtcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICAgIHZhbHVlOiBzZWxmXG4gICAgfSk7IC8vIFR3byBlbGVtZW50cyBjcmVhdGVkIGluIHR3byBkaWZmZXJlbnQgcGxhY2VzIHNob3VsZCBiZSBjb25zaWRlcmVkXG4gICAgLy8gZXF1YWwgZm9yIHRlc3RpbmcgcHVycG9zZXMgYW5kIHRoZXJlZm9yZSB3ZSBoaWRlIGl0IGZyb20gZW51bWVyYXRpb24uXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19zb3VyY2UnLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICB2YWx1ZTogc291cmNlXG4gICAgfSk7XG5cbiAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZShlbGVtZW50LnByb3BzKTtcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQ7XG59O1xuLyoqXG4gKiBDcmVhdGUgYW5kIHJldHVybiBhIG5ldyBSZWFjdEVsZW1lbnQgb2YgdGhlIGdpdmVuIHR5cGUuXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI2NyZWF0ZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHR5cGUsIGNvbmZpZywgY2hpbGRyZW4pIHtcbiAgdmFyIHByb3BOYW1lOyAvLyBSZXNlcnZlZCBuYW1lcyBhcmUgZXh0cmFjdGVkXG5cbiAgdmFyIHByb3BzID0ge307XG4gIHZhciBrZXkgPSBudWxsO1xuICB2YXIgcmVmID0gbnVsbDtcbiAgdmFyIHNlbGYgPSBudWxsO1xuICB2YXIgc291cmNlID0gbnVsbDtcblxuICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICBpZiAoaGFzVmFsaWRSZWYoY29uZmlnKSkge1xuICAgICAgcmVmID0gY29uZmlnLnJlZjtcblxuICAgICAge1xuICAgICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH1cblxuICAgIHNlbGYgPSBjb25maWcuX19zZWxmID09PSB1bmRlZmluZWQgPyBudWxsIDogY29uZmlnLl9fc2VsZjtcbiAgICBzb3VyY2UgPSBjb25maWcuX19zb3VyY2UgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBjb25maWcuX19zb3VyY2U7IC8vIFJlbWFpbmluZyBwcm9wZXJ0aWVzIGFyZSBhZGRlZCB0byBhIG5ldyBwcm9wcyBvYmplY3RcblxuICAgIGZvciAocHJvcE5hbWUgaW4gY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAhUkVTRVJWRURfUFJPUFMuaGFzT3duUHJvcGVydHkocHJvcE5hbWUpKSB7XG4gICAgICAgIHByb3BzW3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICB7XG4gICAgICBpZiAoT2JqZWN0LmZyZWV6ZSkge1xuICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkQXJyYXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHByb3BzLmNoaWxkcmVuID0gY2hpbGRBcnJheTtcbiAgfSAvLyBSZXNvbHZlIGRlZmF1bHQgcHJvcHNcblxuXG4gIGlmICh0eXBlICYmIHR5cGUuZGVmYXVsdFByb3BzKSB7XG4gICAgdmFyIGRlZmF1bHRQcm9wcyA9IHR5cGUuZGVmYXVsdFByb3BzO1xuXG4gICAgZm9yIChwcm9wTmFtZSBpbiBkZWZhdWx0UHJvcHMpIHtcbiAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBkZWZhdWx0UHJvcHNbcHJvcE5hbWVdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHtcbiAgICBpZiAoa2V5IHx8IHJlZikge1xuICAgICAgdmFyIGRpc3BsYXlOYW1lID0gdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCAnVW5rbm93bicgOiB0eXBlO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGRlZmluZUtleVByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KHR5cGUsIGtleSwgcmVmLCBzZWxmLCBzb3VyY2UsIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQsIHByb3BzKTtcbn1cbmZ1bmN0aW9uIGNsb25lQW5kUmVwbGFjZUtleShvbGRFbGVtZW50LCBuZXdLZXkpIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBSZWFjdEVsZW1lbnQob2xkRWxlbWVudC50eXBlLCBuZXdLZXksIG9sZEVsZW1lbnQucmVmLCBvbGRFbGVtZW50Ll9zZWxmLCBvbGRFbGVtZW50Ll9zb3VyY2UsIG9sZEVsZW1lbnQuX293bmVyLCBvbGRFbGVtZW50LnByb3BzKTtcbiAgcmV0dXJuIG5ld0VsZW1lbnQ7XG59XG4vKipcbiAqIENsb25lIGFuZCByZXR1cm4gYSBuZXcgUmVhY3RFbGVtZW50IHVzaW5nIGVsZW1lbnQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNjbG9uZWVsZW1lbnRcbiAqL1xuXG5mdW5jdGlvbiBjbG9uZUVsZW1lbnQoZWxlbWVudCwgY29uZmlnLCBjaGlsZHJlbikge1xuICBpZiAoISEoZWxlbWVudCA9PT0gbnVsbCB8fCBlbGVtZW50ID09PSB1bmRlZmluZWQpKSB7XG4gICAge1xuICAgICAgdGhyb3cgRXJyb3IoIFwiUmVhY3QuY2xvbmVFbGVtZW50KC4uLik6IFRoZSBhcmd1bWVudCBtdXN0IGJlIGEgUmVhY3QgZWxlbWVudCwgYnV0IHlvdSBwYXNzZWQgXCIgKyBlbGVtZW50ICsgXCIuXCIgKTtcbiAgICB9XG4gIH1cblxuICB2YXIgcHJvcE5hbWU7IC8vIE9yaWdpbmFsIHByb3BzIGFyZSBjb3BpZWRcblxuICB2YXIgcHJvcHMgPSBfYXNzaWduKHt9LCBlbGVtZW50LnByb3BzKTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxuXG5cbiAgdmFyIGtleSA9IGVsZW1lbnQua2V5O1xuICB2YXIgcmVmID0gZWxlbWVudC5yZWY7IC8vIFNlbGYgaXMgcHJlc2VydmVkIHNpbmNlIHRoZSBvd25lciBpcyBwcmVzZXJ2ZWQuXG5cbiAgdmFyIHNlbGYgPSBlbGVtZW50Ll9zZWxmOyAvLyBTb3VyY2UgaXMgcHJlc2VydmVkIHNpbmNlIGNsb25lRWxlbWVudCBpcyB1bmxpa2VseSB0byBiZSB0YXJnZXRlZCBieSBhXG4gIC8vIHRyYW5zcGlsZXIsIGFuZCB0aGUgb3JpZ2luYWwgc291cmNlIGlzIHByb2JhYmx5IGEgYmV0dGVyIGluZGljYXRvciBvZiB0aGVcbiAgLy8gdHJ1ZSBvd25lci5cblxuICB2YXIgc291cmNlID0gZWxlbWVudC5fc291cmNlOyAvLyBPd25lciB3aWxsIGJlIHByZXNlcnZlZCwgdW5sZXNzIHJlZiBpcyBvdmVycmlkZGVuXG5cbiAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG5cbiAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgaWYgKGhhc1ZhbGlkUmVmKGNvbmZpZykpIHtcbiAgICAgIC8vIFNpbGVudGx5IHN0ZWFsIHRoZSByZWYgZnJvbSB0aGUgcGFyZW50LlxuICAgICAgcmVmID0gY29uZmlnLnJlZjtcbiAgICAgIG93bmVyID0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudDtcbiAgICB9XG5cbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgb3ZlcnJpZGUgZXhpc3RpbmcgcHJvcHNcblxuXG4gICAgdmFyIGRlZmF1bHRQcm9wcztcblxuICAgIGlmIChlbGVtZW50LnR5cGUgJiYgZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcykge1xuICAgICAgZGVmYXVsdFByb3BzID0gZWxlbWVudC50eXBlLmRlZmF1bHRQcm9wcztcbiAgICB9XG5cbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBwcm9wTmFtZSkgJiYgIVJFU0VSVkVEX1BST1BTLmhhc093blByb3BlcnR5KHByb3BOYW1lKSkge1xuICAgICAgICBpZiAoY29uZmlnW3Byb3BOYW1lXSA9PT0gdW5kZWZpbmVkICYmIGRlZmF1bHRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gUmVzb2x2ZSBkZWZhdWx0IHByb3BzXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIENoaWxkcmVuIGNhbiBiZSBtb3JlIHRoYW4gb25lIGFyZ3VtZW50LCBhbmQgdGhvc2UgYXJlIHRyYW5zZmVycmVkIG9udG9cbiAgLy8gdGhlIG5ld2x5IGFsbG9jYXRlZCBwcm9wcyBvYmplY3QuXG5cblxuICB2YXIgY2hpbGRyZW5MZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoIC0gMjtcblxuICBpZiAoY2hpbGRyZW5MZW5ndGggPT09IDEpIHtcbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICB9IGVsc2UgaWYgKGNoaWxkcmVuTGVuZ3RoID4gMSkge1xuICAgIHZhciBjaGlsZEFycmF5ID0gQXJyYXkoY2hpbGRyZW5MZW5ndGgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZEFycmF5W2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICB9XG5cbiAgICBwcm9wcy5jaGlsZHJlbiA9IGNoaWxkQXJyYXk7XG4gIH1cblxuICByZXR1cm4gUmVhY3RFbGVtZW50KGVsZW1lbnQudHlwZSwga2V5LCByZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKTtcbn1cbi8qKlxuICogVmVyaWZpZXMgdGhlIG9iamVjdCBpcyBhIFJlYWN0RWxlbWVudC5cbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcbiAqIEBwYXJhbSB7P29iamVjdH0gb2JqZWN0XG4gKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGBvYmplY3RgIGlzIGEgUmVhY3RFbGVtZW50LlxuICogQGZpbmFsXG4gKi9cblxuZnVuY3Rpb24gaXNWYWxpZEVsZW1lbnQob2JqZWN0KSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XG59XG5cbnZhciBTRVBBUkFUT1IgPSAnLic7XG52YXIgU1VCU0VQQVJBVE9SID0gJzonO1xuLyoqXG4gKiBFc2NhcGUgYW5kIHdyYXAga2V5IHNvIGl0IGlzIHNhZmUgdG8gdXNlIGFzIGEgcmVhY3RpZFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgdG8gYmUgZXNjYXBlZC5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQga2V5LlxuICovXG5cbmZ1bmN0aW9uIGVzY2FwZShrZXkpIHtcbiAgdmFyIGVzY2FwZVJlZ2V4ID0gL1s9Ol0vZztcbiAgdmFyIGVzY2FwZXJMb29rdXAgPSB7XG4gICAgJz0nOiAnPTAnLFxuICAgICc6JzogJz0yJ1xuICB9O1xuICB2YXIgZXNjYXBlZFN0cmluZyA9IGtleS5yZXBsYWNlKGVzY2FwZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICByZXR1cm4gZXNjYXBlckxvb2t1cFttYXRjaF07XG4gIH0pO1xuICByZXR1cm4gJyQnICsgZXNjYXBlZFN0cmluZztcbn1cbi8qKlxuICogVE9ETzogVGVzdCB0aGF0IGEgc2luZ2xlIGNoaWxkIGFuZCBhbiBhcnJheSB3aXRoIG9uZSBpdGVtIGhhdmUgdGhlIHNhbWUga2V5XG4gKiBwYXR0ZXJuLlxuICovXG5cblxudmFyIGRpZFdhcm5BYm91dE1hcHMgPSBmYWxzZTtcbnZhciB1c2VyUHJvdmlkZWRLZXlFc2NhcGVSZWdleCA9IC9cXC8rL2c7XG5cbmZ1bmN0aW9uIGVzY2FwZVVzZXJQcm92aWRlZEtleSh0ZXh0KSB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2UodXNlclByb3ZpZGVkS2V5RXNjYXBlUmVnZXgsICckJi8nKTtcbn1cbi8qKlxuICogR2VuZXJhdGUgYSBrZXkgc3RyaW5nIHRoYXQgaWRlbnRpZmllcyBhIGVsZW1lbnQgd2l0aGluIGEgc2V0LlxuICpcbiAqIEBwYXJhbSB7Kn0gZWxlbWVudCBBIGVsZW1lbnQgdGhhdCBjb3VsZCBjb250YWluIGEgbWFudWFsIGtleS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBJbmRleCB0aGF0IGlzIHVzZWQgaWYgYSBtYW51YWwga2V5IGlzIG5vdCBwcm92aWRlZC5cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRLZXkoZWxlbWVudCwgaW5kZXgpIHtcbiAgLy8gRG8gc29tZSB0eXBlY2hlY2tpbmcgaGVyZSBzaW5jZSB3ZSBjYWxsIHRoaXMgYmxpbmRseS4gV2Ugd2FudCB0byBlbnN1cmVcbiAgLy8gdGhhdCB3ZSBkb24ndCBibG9jayBwb3RlbnRpYWwgZnV0dXJlIEVTIEFQSXMuXG4gIGlmICh0eXBlb2YgZWxlbWVudCA9PT0gJ29iamVjdCcgJiYgZWxlbWVudCAhPT0gbnVsbCAmJiBlbGVtZW50LmtleSAhPSBudWxsKSB7XG4gICAgLy8gRXhwbGljaXQga2V5XG4gICAgcmV0dXJuIGVzY2FwZSgnJyArIGVsZW1lbnQua2V5KTtcbiAgfSAvLyBJbXBsaWNpdCBrZXkgZGV0ZXJtaW5lZCBieSB0aGUgaW5kZXggaW4gdGhlIHNldFxuXG5cbiAgcmV0dXJuIGluZGV4LnRvU3RyaW5nKDM2KTtcbn1cblxuZnVuY3Rpb24gbWFwSW50b0FycmF5KGNoaWxkcmVuLCBhcnJheSwgZXNjYXBlZFByZWZpeCwgbmFtZVNvRmFyLCBjYWxsYmFjaykge1xuICB2YXIgdHlwZSA9IHR5cGVvZiBjaGlsZHJlbjtcblxuICBpZiAodHlwZSA9PT0gJ3VuZGVmaW5lZCcgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgLy8gQWxsIG9mIHRoZSBhYm92ZSBhcmUgcGVyY2VpdmVkIGFzIG51bGwuXG4gICAgY2hpbGRyZW4gPSBudWxsO1xuICB9XG5cbiAgdmFyIGludm9rZUNhbGxiYWNrID0gZmFsc2U7XG5cbiAgaWYgKGNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgIGludm9rZUNhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHN3aXRjaCAoY2hpbGRyZW4uJCR0eXBlb2YpIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX0VMRU1FTlRfVFlQRTpcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgaW52b2tlQ2FsbGJhY2sgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICB9XG4gIH1cblxuICBpZiAoaW52b2tlQ2FsbGJhY2spIHtcbiAgICB2YXIgX2NoaWxkID0gY2hpbGRyZW47XG4gICAgdmFyIG1hcHBlZENoaWxkID0gY2FsbGJhY2soX2NoaWxkKTsgLy8gSWYgaXQncyB0aGUgb25seSBjaGlsZCwgdHJlYXQgdGhlIG5hbWUgYXMgaWYgaXQgd2FzIHdyYXBwZWQgaW4gYW4gYXJyYXlcbiAgICAvLyBzbyB0aGF0IGl0J3MgY29uc2lzdGVudCBpZiB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuIGdyb3dzOlxuXG4gICAgdmFyIGNoaWxkS2V5ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiArIGdldEVsZW1lbnRLZXkoX2NoaWxkLCAwKSA6IG5hbWVTb0ZhcjtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KG1hcHBlZENoaWxkKSkge1xuICAgICAgdmFyIGVzY2FwZWRDaGlsZEtleSA9ICcnO1xuXG4gICAgICBpZiAoY2hpbGRLZXkgIT0gbnVsbCkge1xuICAgICAgICBlc2NhcGVkQ2hpbGRLZXkgPSBlc2NhcGVVc2VyUHJvdmlkZWRLZXkoY2hpbGRLZXkpICsgJy8nO1xuICAgICAgfVxuXG4gICAgICBtYXBJbnRvQXJyYXkobWFwcGVkQ2hpbGQsIGFycmF5LCBlc2NhcGVkQ2hpbGRLZXksICcnLCBmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAobWFwcGVkQ2hpbGQgIT0gbnVsbCkge1xuICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KG1hcHBlZENoaWxkKSkge1xuICAgICAgICBtYXBwZWRDaGlsZCA9IGNsb25lQW5kUmVwbGFjZUtleShtYXBwZWRDaGlsZCwgLy8gS2VlcCBib3RoIHRoZSAobWFwcGVkKSBhbmQgb2xkIGtleXMgaWYgdGhleSBkaWZmZXIsIGp1c3QgYXNcbiAgICAgICAgLy8gdHJhdmVyc2VBbGxDaGlsZHJlbiB1c2VkIHRvIGRvIGZvciBvYmplY3RzIGFzIGNoaWxkcmVuXG4gICAgICAgIGVzY2FwZWRQcmVmaXggKyAoIC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgUmVhY3QuUG9ydGFsIGRvZXNuJ3QgaGF2ZSBhIGtleVxuICAgICAgICBtYXBwZWRDaGlsZC5rZXkgJiYgKCFfY2hpbGQgfHwgX2NoaWxkLmtleSAhPT0gbWFwcGVkQ2hpbGQua2V5KSA/IC8vICRGbG93Rml4TWUgRmxvdyBpbmNvcnJlY3RseSB0aGlua3MgZXhpc3RpbmcgZWxlbWVudCdzIGtleSBjYW4gYmUgYSBudW1iZXJcbiAgICAgICAgZXNjYXBlVXNlclByb3ZpZGVkS2V5KCcnICsgbWFwcGVkQ2hpbGQua2V5KSArICcvJyA6ICcnKSArIGNoaWxkS2V5KTtcbiAgICAgIH1cblxuICAgICAgYXJyYXkucHVzaChtYXBwZWRDaGlsZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICB2YXIgY2hpbGQ7XG4gIHZhciBuZXh0TmFtZTtcbiAgdmFyIHN1YnRyZWVDb3VudCA9IDA7IC8vIENvdW50IG9mIGNoaWxkcmVuIGZvdW5kIGluIHRoZSBjdXJyZW50IHN1YnRyZWUuXG5cbiAgdmFyIG5leHROYW1lUHJlZml4ID0gbmFtZVNvRmFyID09PSAnJyA/IFNFUEFSQVRPUiA6IG5hbWVTb0ZhciArIFNVQlNFUEFSQVRPUjtcblxuICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgICAgbmV4dE5hbWUgPSBuZXh0TmFtZVByZWZpeCArIGdldEVsZW1lbnRLZXkoY2hpbGQsIGkpO1xuICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihjaGlsZHJlbik7XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yRm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciBpdGVyYWJsZUNoaWxkcmVuID0gY2hpbGRyZW47XG5cbiAgICAgIHtcbiAgICAgICAgLy8gV2FybiBhYm91dCB1c2luZyBNYXBzIGFzIGNoaWxkcmVuXG4gICAgICAgIGlmIChpdGVyYXRvckZuID09PSBpdGVyYWJsZUNoaWxkcmVuLmVudHJpZXMpIHtcbiAgICAgICAgICBpZiAoIWRpZFdhcm5BYm91dE1hcHMpIHtcbiAgICAgICAgICAgIHdhcm4oJ1VzaW5nIE1hcHMgYXMgY2hpbGRyZW4gaXMgbm90IHN1cHBvcnRlZC4gJyArICdVc2UgYW4gYXJyYXkgb2Yga2V5ZWQgUmVhY3RFbGVtZW50cyBpbnN0ZWFkLicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRpZFdhcm5BYm91dE1hcHMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBpdGVyYXRvciA9IGl0ZXJhdG9yRm4uY2FsbChpdGVyYWJsZUNoaWxkcmVuKTtcbiAgICAgIHZhciBzdGVwO1xuICAgICAgdmFyIGlpID0gMDtcblxuICAgICAgd2hpbGUgKCEoc3RlcCA9IGl0ZXJhdG9yLm5leHQoKSkuZG9uZSkge1xuICAgICAgICBjaGlsZCA9IHN0ZXAudmFsdWU7XG4gICAgICAgIG5leHROYW1lID0gbmV4dE5hbWVQcmVmaXggKyBnZXRFbGVtZW50S2V5KGNoaWxkLCBpaSsrKTtcbiAgICAgICAgc3VidHJlZUNvdW50ICs9IG1hcEludG9BcnJheShjaGlsZCwgYXJyYXksIGVzY2FwZWRQcmVmaXgsIG5leHROYW1lLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFyIGNoaWxkcmVuU3RyaW5nID0gJycgKyBjaGlsZHJlbjtcblxuICAgICAge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgRXJyb3IoIFwiT2JqZWN0cyBhcmUgbm90IHZhbGlkIGFzIGEgUmVhY3QgY2hpbGQgKGZvdW5kOiBcIiArIChjaGlsZHJlblN0cmluZyA9PT0gJ1tvYmplY3QgT2JqZWN0XScgPyAnb2JqZWN0IHdpdGgga2V5cyB7JyArIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5qb2luKCcsICcpICsgJ30nIDogY2hpbGRyZW5TdHJpbmcpICsgXCIpLiBJZiB5b3UgbWVhbnQgdG8gcmVuZGVyIGEgY29sbGVjdGlvbiBvZiBjaGlsZHJlbiwgdXNlIGFuIGFycmF5IGluc3RlYWQuXCIgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdWJ0cmVlQ291bnQ7XG59XG5cbi8qKlxuICogTWFwcyBjaGlsZHJlbiB0aGF0IGFyZSB0eXBpY2FsbHkgc3BlY2lmaWVkIGFzIGBwcm9wcy5jaGlsZHJlbmAuXG4gKlxuICogU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdGNoaWxkcmVubWFwXG4gKlxuICogVGhlIHByb3ZpZGVkIG1hcEZ1bmN0aW9uKGNoaWxkLCBpbmRleCkgd2lsbCBiZSBjYWxsZWQgZm9yIGVhY2hcbiAqIGxlYWYgY2hpbGQuXG4gKlxuICogQHBhcmFtIHs/Kn0gY2hpbGRyZW4gQ2hpbGRyZW4gdHJlZSBjb250YWluZXIuXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKCosIGludCl9IGZ1bmMgVGhlIG1hcCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7Kn0gY29udGV4dCBDb250ZXh0IGZvciBtYXBGdW5jdGlvbi5cbiAqIEByZXR1cm4ge29iamVjdH0gT2JqZWN0IGNvbnRhaW5pbmcgdGhlIG9yZGVyZWQgbWFwIG9mIHJlc3VsdHMuXG4gKi9cbmZ1bmN0aW9uIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jLCBjb250ZXh0KSB7XG4gIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBtYXBJbnRvQXJyYXkoY2hpbGRyZW4sIHJlc3VsdCwgJycsICcnLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gZnVuYy5jYWxsKGNvbnRleHQsIGNoaWxkLCBjb3VudCsrKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvdW50IHRoZSBudW1iZXIgb2YgY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhc1xuICogYHByb3BzLmNoaWxkcmVuYC5cbiAqXG4gKiBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0Y2hpbGRyZW5jb3VudFxuICpcbiAqIEBwYXJhbSB7Pyp9IGNoaWxkcmVuIENoaWxkcmVuIHRyZWUgY29udGFpbmVyLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGNoaWxkcmVuLlxuICovXG5cblxuZnVuY3Rpb24gY291bnRDaGlsZHJlbihjaGlsZHJlbikge1xuICB2YXIgbiA9IDA7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgbisrOyAvLyBEb24ndCByZXR1cm4gYW55dGhpbmdcbiAgfSk7XG4gIHJldHVybiBuO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIHRocm91Z2ggY2hpbGRyZW4gdGhhdCBhcmUgdHlwaWNhbGx5IHNwZWNpZmllZCBhcyBgcHJvcHMuY2hpbGRyZW5gLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbmZvcmVhY2hcbiAqXG4gKiBUaGUgcHJvdmlkZWQgZm9yRWFjaEZ1bmMoY2hpbGQsIGluZGV4KSB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaFxuICogbGVhZiBjaGlsZC5cbiAqXG4gKiBAcGFyYW0gez8qfSBjaGlsZHJlbiBDaGlsZHJlbiB0cmVlIGNvbnRhaW5lci5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oKiwgaW50KX0gZm9yRWFjaEZ1bmNcbiAqIEBwYXJhbSB7Kn0gZm9yRWFjaENvbnRleHQgQ29udGV4dCBmb3IgZm9yRWFjaENvbnRleHQuXG4gKi9cbmZ1bmN0aW9uIGZvckVhY2hDaGlsZHJlbihjaGlsZHJlbiwgZm9yRWFjaEZ1bmMsIGZvckVhY2hDb250ZXh0KSB7XG4gIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoKSB7XG4gICAgZm9yRWFjaEZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgLy8gRG9uJ3QgcmV0dXJuIGFueXRoaW5nLlxuICB9LCBmb3JFYWNoQ29udGV4dCk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBjaGlsZHJlbiBvYmplY3QgKHR5cGljYWxseSBzcGVjaWZpZWQgYXMgYHByb3BzLmNoaWxkcmVuYCkgYW5kXG4gKiByZXR1cm4gYW4gYXJyYXkgd2l0aCBhcHByb3ByaWF0ZWx5IHJlLWtleWVkIGNoaWxkcmVuLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbnRvYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvQXJyYXkoY2hpbGRyZW4pIHtcbiAgcmV0dXJuIG1hcENoaWxkcmVuKGNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pIHx8IFtdO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBmaXJzdCBjaGlsZCBpbiBhIGNvbGxlY3Rpb24gb2YgY2hpbGRyZW4gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmVcbiAqIGlzIG9ubHkgb25lIGNoaWxkIGluIHRoZSBjb2xsZWN0aW9uLlxuICpcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RjaGlsZHJlbm9ubHlcbiAqXG4gKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBhIHNpbmdsZSBjaGlsZCBnZXRzXG4gKiBwYXNzZWQgd2l0aG91dCBhIHdyYXBwZXIsIGJ1dCB0aGUgcHVycG9zZSBvZiB0aGlzIGhlbHBlciBmdW5jdGlvbiBpcyB0b1xuICogYWJzdHJhY3QgYXdheSB0aGUgcGFydGljdWxhciBzdHJ1Y3R1cmUgb2YgY2hpbGRyZW4uXG4gKlxuICogQHBhcmFtIHs/b2JqZWN0fSBjaGlsZHJlbiBDaGlsZCBjb2xsZWN0aW9uIHN0cnVjdHVyZS5cbiAqIEByZXR1cm4ge1JlYWN0RWxlbWVudH0gVGhlIGZpcnN0IGFuZCBvbmx5IGBSZWFjdEVsZW1lbnRgIGNvbnRhaW5lZCBpbiB0aGVcbiAqIHN0cnVjdHVyZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIG9ubHlDaGlsZChjaGlsZHJlbikge1xuICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIlJlYWN0LkNoaWxkcmVuLm9ubHkgZXhwZWN0ZWQgdG8gcmVjZWl2ZSBhIHNpbmdsZSBSZWFjdCBlbGVtZW50IGNoaWxkLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVDb250ZXh0KGRlZmF1bHRWYWx1ZSwgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpIHtcbiAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWxjdWxhdGVDaGFuZ2VkQml0cyA9IG51bGw7XG4gIH0gZWxzZSB7XG4gICAge1xuICAgICAgaWYgKGNhbGN1bGF0ZUNoYW5nZWRCaXRzICE9PSBudWxsICYmIHR5cGVvZiBjYWxjdWxhdGVDaGFuZ2VkQml0cyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBlcnJvcignY3JlYXRlQ29udGV4dDogRXhwZWN0ZWQgdGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCB0byBiZSBhICcgKyAnZnVuY3Rpb24uIEluc3RlYWQgcmVjZWl2ZWQ6ICVzJywgY2FsY3VsYXRlQ2hhbmdlZEJpdHMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBjb250ZXh0ID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOiBjYWxjdWxhdGVDaGFuZ2VkQml0cyxcbiAgICAvLyBBcyBhIHdvcmthcm91bmQgdG8gc3VwcG9ydCBtdWx0aXBsZSBjb25jdXJyZW50IHJlbmRlcmVycywgd2UgY2F0ZWdvcml6ZVxuICAgIC8vIHNvbWUgcmVuZGVyZXJzIGFzIHByaW1hcnkgYW5kIG90aGVycyBhcyBzZWNvbmRhcnkuIFdlIG9ubHkgZXhwZWN0XG4gICAgLy8gdGhlcmUgdG8gYmUgdHdvIGNvbmN1cnJlbnQgcmVuZGVyZXJzIGF0IG1vc3Q6IFJlYWN0IE5hdGl2ZSAocHJpbWFyeSkgYW5kXG4gICAgLy8gRmFicmljIChzZWNvbmRhcnkpOyBSZWFjdCBET00gKHByaW1hcnkpIGFuZCBSZWFjdCBBUlQgKHNlY29uZGFyeSkuXG4gICAgLy8gU2Vjb25kYXJ5IHJlbmRlcmVycyBzdG9yZSB0aGVpciBjb250ZXh0IHZhbHVlcyBvbiBzZXBhcmF0ZSBmaWVsZHMuXG4gICAgX2N1cnJlbnRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuICAgIF9jdXJyZW50VmFsdWUyOiBkZWZhdWx0VmFsdWUsXG4gICAgLy8gVXNlZCB0byB0cmFjayBob3cgbWFueSBjb25jdXJyZW50IHJlbmRlcmVycyB0aGlzIGNvbnRleHQgY3VycmVudGx5XG4gICAgLy8gc3VwcG9ydHMgd2l0aGluIGluIGEgc2luZ2xlIHJlbmRlcmVyLiBTdWNoIGFzIHBhcmFsbGVsIHNlcnZlciByZW5kZXJpbmcuXG4gICAgX3RocmVhZENvdW50OiAwLFxuICAgIC8vIFRoZXNlIGFyZSBjaXJjdWxhclxuICAgIFByb3ZpZGVyOiBudWxsLFxuICAgIENvbnN1bWVyOiBudWxsXG4gIH07XG4gIGNvbnRleHQuUHJvdmlkZXIgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX1BST1ZJREVSX1RZUEUsXG4gICAgX2NvbnRleHQ6IGNvbnRleHRcbiAgfTtcbiAgdmFyIGhhc1dhcm5lZEFib3V0VXNpbmdOZXN0ZWRDb250ZXh0Q29uc3VtZXJzID0gZmFsc2U7XG4gIHZhciBoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlciA9IGZhbHNlO1xuICB2YXIgaGFzV2FybmVkQWJvdXREaXNwbGF5TmFtZU9uQ29uc3VtZXIgPSBmYWxzZTtcblxuICB7XG4gICAgLy8gQSBzZXBhcmF0ZSBvYmplY3QsIGJ1dCBwcm94aWVzIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQgb2JqZWN0IGZvclxuICAgIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LiBJdCBoYXMgYSBkaWZmZXJlbnQgJCR0eXBlb2YsIHNvIHdlIGNhbiBwcm9wZXJseVxuICAgIC8vIHdhcm4gZm9yIHRoZSBpbmNvcnJlY3QgdXNhZ2Ugb2YgQ29udGV4dCBhcyBhIENvbnN1bWVyLlxuICAgIHZhciBDb25zdW1lciA9IHtcbiAgICAgICQkdHlwZW9mOiBSRUFDVF9DT05URVhUX1RZUEUsXG4gICAgICBfY29udGV4dDogY29udGV4dCxcbiAgICAgIF9jYWxjdWxhdGVDaGFuZ2VkQml0czogY29udGV4dC5fY2FsY3VsYXRlQ2hhbmdlZEJpdHNcbiAgICB9OyAvLyAkRmxvd0ZpeE1lOiBGbG93IGNvbXBsYWlucyBhYm91dCBub3Qgc2V0dGluZyBhIHZhbHVlLCB3aGljaCBpcyBpbnRlbnRpb25hbCBoZXJlXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDb25zdW1lciwge1xuICAgICAgUHJvdmlkZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nQ29uc3VtZXJQcm92aWRlcikge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ0NvbnN1bWVyUHJvdmlkZXIgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLlByb3ZpZGVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LlByb3ZpZGVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LlByb3ZpZGVyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfUHJvdmlkZXIpIHtcbiAgICAgICAgICBjb250ZXh0LlByb3ZpZGVyID0gX1Byb3ZpZGVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgX2N1cnJlbnRWYWx1ZToge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fY3VycmVudFZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgY29udGV4dC5fY3VycmVudFZhbHVlID0gX2N1cnJlbnRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF9jdXJyZW50VmFsdWUyOiB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBjb250ZXh0Ll9jdXJyZW50VmFsdWUyO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChfY3VycmVudFZhbHVlMikge1xuICAgICAgICAgIGNvbnRleHQuX2N1cnJlbnRWYWx1ZTIgPSBfY3VycmVudFZhbHVlMjtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIF90aHJlYWRDb3VudDoge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gY29udGV4dC5fdGhyZWFkQ291bnQ7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKF90aHJlYWRDb3VudCkge1xuICAgICAgICAgIGNvbnRleHQuX3RocmVhZENvdW50ID0gX3RocmVhZENvdW50O1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgQ29uc3VtZXI6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dFVzaW5nTmVzdGVkQ29udGV4dENvbnN1bWVycykge1xuICAgICAgICAgICAgaGFzV2FybmVkQWJvdXRVc2luZ05lc3RlZENvbnRleHRDb25zdW1lcnMgPSB0cnVlO1xuXG4gICAgICAgICAgICBlcnJvcignUmVuZGVyaW5nIDxDb250ZXh0LkNvbnN1bWVyLkNvbnN1bWVyPiBpcyBub3Qgc3VwcG9ydGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBEaWQgeW91IG1lYW4gdG8gcmVuZGVyIDxDb250ZXh0LkNvbnN1bWVyPiBpbnN0ZWFkPycpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250ZXh0LkNvbnN1bWVyO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGlzcGxheU5hbWU6IHtcbiAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRleHQuZGlzcGxheU5hbWU7XG4gICAgICAgIH0sXG4gICAgICAgIHNldDogZnVuY3Rpb24gKGRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgaWYgKCFoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lcikge1xuICAgICAgICAgICAgd2FybignU2V0dGluZyBgZGlzcGxheU5hbWVgIG9uIENvbnRleHQuQ29uc3VtZXIgaGFzIG5vIGVmZmVjdC4gJyArIFwiWW91IHNob3VsZCBzZXQgaXQgZGlyZWN0bHkgb24gdGhlIGNvbnRleHQgd2l0aCBDb250ZXh0LmRpc3BsYXlOYW1lID0gJyVzJy5cIiwgZGlzcGxheU5hbWUpO1xuXG4gICAgICAgICAgICBoYXNXYXJuZWRBYm91dERpc3BsYXlOYW1lT25Db25zdW1lciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vICRGbG93Rml4TWU6IEZsb3cgY29tcGxhaW5zIGFib3V0IG1pc3NpbmcgcHJvcGVydGllcyBiZWNhdXNlIGl0IGRvZXNuJ3QgdW5kZXJzdGFuZCBkZWZpbmVQcm9wZXJ0eVxuXG4gICAgY29udGV4dC5Db25zdW1lciA9IENvbnN1bWVyO1xuICB9XG5cbiAge1xuICAgIGNvbnRleHQuX2N1cnJlbnRSZW5kZXJlciA9IG51bGw7XG4gICAgY29udGV4dC5fY3VycmVudFJlbmRlcmVyMiA9IG51bGw7XG4gIH1cblxuICByZXR1cm4gY29udGV4dDtcbn1cblxudmFyIFVuaW5pdGlhbGl6ZWQgPSAtMTtcbnZhciBQZW5kaW5nID0gMDtcbnZhciBSZXNvbHZlZCA9IDE7XG52YXIgUmVqZWN0ZWQgPSAyO1xuXG5mdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXIocGF5bG9hZCkge1xuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBVbmluaXRpYWxpemVkKSB7XG4gICAgdmFyIGN0b3IgPSBwYXlsb2FkLl9yZXN1bHQ7XG4gICAgdmFyIHRoZW5hYmxlID0gY3RvcigpOyAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG4gICAgdmFyIHBlbmRpbmcgPSBwYXlsb2FkO1xuICAgIHBlbmRpbmcuX3N0YXR1cyA9IFBlbmRpbmc7XG4gICAgcGVuZGluZy5fcmVzdWx0ID0gdGhlbmFibGU7XG4gICAgdGhlbmFibGUudGhlbihmdW5jdGlvbiAobW9kdWxlT2JqZWN0KSB7XG4gICAgICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBQZW5kaW5nKSB7XG4gICAgICAgIHZhciBkZWZhdWx0RXhwb3J0ID0gbW9kdWxlT2JqZWN0LmRlZmF1bHQ7XG5cbiAgICAgICAge1xuICAgICAgICAgIGlmIChkZWZhdWx0RXhwb3J0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVycm9yKCdsYXp5OiBFeHBlY3RlZCB0aGUgcmVzdWx0IG9mIGEgZHluYW1pYyBpbXBvcnQoKSBjYWxsLiAnICsgJ0luc3RlYWQgcmVjZWl2ZWQ6ICVzXFxuXFxuWW91ciBjb2RlIHNob3VsZCBsb29rIGxpa2U6IFxcbiAgJyArIC8vIEJyZWFrIHVwIGltcG9ydHMgdG8gYXZvaWQgYWNjaWRlbnRhbGx5IHBhcnNpbmcgdGhlbSBhcyBkZXBlbmRlbmNpZXMuXG4gICAgICAgICAgICAnY29uc3QgTXlDb21wb25lbnQgPSBsYXp5KCgpID0+IGltcCcgKyBcIm9ydCgnLi9NeUNvbXBvbmVudCcpKVwiLCBtb2R1bGVPYmplY3QpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBUcmFuc2l0aW9uIHRvIHRoZSBuZXh0IHN0YXRlLlxuXG5cbiAgICAgICAgdmFyIHJlc29sdmVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVzb2x2ZWQuX3N0YXR1cyA9IFJlc29sdmVkO1xuICAgICAgICByZXNvbHZlZC5fcmVzdWx0ID0gZGVmYXVsdEV4cG9ydDtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgIGlmIChwYXlsb2FkLl9zdGF0dXMgPT09IFBlbmRpbmcpIHtcbiAgICAgICAgLy8gVHJhbnNpdGlvbiB0byB0aGUgbmV4dCBzdGF0ZS5cbiAgICAgICAgdmFyIHJlamVjdGVkID0gcGF5bG9hZDtcbiAgICAgICAgcmVqZWN0ZWQuX3N0YXR1cyA9IFJlamVjdGVkO1xuICAgICAgICByZWplY3RlZC5fcmVzdWx0ID0gZXJyb3I7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAocGF5bG9hZC5fc3RhdHVzID09PSBSZXNvbHZlZCkge1xuICAgIHJldHVybiBwYXlsb2FkLl9yZXN1bHQ7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgcGF5bG9hZC5fcmVzdWx0O1xuICB9XG59XG5cbmZ1bmN0aW9uIGxhenkoY3Rvcikge1xuICB2YXIgcGF5bG9hZCA9IHtcbiAgICAvLyBXZSB1c2UgdGhlc2UgZmllbGRzIHRvIHN0b3JlIHRoZSByZXN1bHQuXG4gICAgX3N0YXR1czogLTEsXG4gICAgX3Jlc3VsdDogY3RvclxuICB9O1xuICB2YXIgbGF6eVR5cGUgPSB7XG4gICAgJCR0eXBlb2Y6IFJFQUNUX0xBWllfVFlQRSxcbiAgICBfcGF5bG9hZDogcGF5bG9hZCxcbiAgICBfaW5pdDogbGF6eUluaXRpYWxpemVyXG4gIH07XG5cbiAge1xuICAgIC8vIEluIHByb2R1Y3Rpb24sIHRoaXMgd291bGQganVzdCBzZXQgaXQgb24gdGhlIG9iamVjdC5cbiAgICB2YXIgZGVmYXVsdFByb3BzO1xuICAgIHZhciBwcm9wVHlwZXM7IC8vICRGbG93Rml4TWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGxhenlUeXBlLCB7XG4gICAgICBkZWZhdWx0UHJvcHM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZGVmYXVsdFByb3BzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdEZWZhdWx0UHJvcHMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgZGVmYXVsdFByb3BzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgZGVmYXVsdFByb3BzID0gbmV3RGVmYXVsdFByb3BzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdkZWZhdWx0UHJvcHMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBwcm9wVHlwZXM6IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gcHJvcFR5cGVzO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcm9wVHlwZXMpIHtcbiAgICAgICAgICBlcnJvcignUmVhY3QubGF6eSguLi4pOiBJdCBpcyBub3Qgc3VwcG9ydGVkIHRvIGFzc2lnbiBgcHJvcFR5cGVzYCB0byAnICsgJ2EgbGF6eSBjb21wb25lbnQgaW1wb3J0LiBFaXRoZXIgc3BlY2lmeSB0aGVtIHdoZXJlIHRoZSBjb21wb25lbnQgJyArICdpcyBkZWZpbmVkLCBvciBjcmVhdGUgYSB3cmFwcGluZyBjb21wb25lbnQgYXJvdW5kIGl0LicpO1xuXG4gICAgICAgICAgcHJvcFR5cGVzID0gbmV3UHJvcFR5cGVzOyAvLyBNYXRjaCBwcm9kdWN0aW9uIGJlaGF2aW9yIG1vcmUgY2xvc2VseTpcbiAgICAgICAgICAvLyAkRmxvd0ZpeE1lXG5cbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobGF6eVR5cGUsICdwcm9wVHlwZXMnLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBsYXp5VHlwZTtcbn1cblxuZnVuY3Rpb24gZm9yd2FyZFJlZihyZW5kZXIpIHtcbiAge1xuICAgIGlmIChyZW5kZXIgIT0gbnVsbCAmJiByZW5kZXIuJCR0eXBlb2YgPT09IFJFQUNUX01FTU9fVFlQRSkge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHJlY2VpdmVkIGEgYG1lbW9gICcgKyAnY29tcG9uZW50LiBJbnN0ZWFkIG9mIGZvcndhcmRSZWYobWVtbyguLi4pKSwgdXNlICcgKyAnbWVtbyhmb3J3YXJkUmVmKC4uLikpLicpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlbmRlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVxdWlyZXMgYSByZW5kZXIgZnVuY3Rpb24gYnV0IHdhcyBnaXZlbiAlcy4nLCByZW5kZXIgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgcmVuZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHJlbmRlci5sZW5ndGggIT09IDAgJiYgcmVuZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICBlcnJvcignZm9yd2FyZFJlZiByZW5kZXIgZnVuY3Rpb25zIGFjY2VwdCBleGFjdGx5IHR3byBwYXJhbWV0ZXJzOiBwcm9wcyBhbmQgcmVmLiAlcycsIHJlbmRlci5sZW5ndGggPT09IDEgPyAnRGlkIHlvdSBmb3JnZXQgdG8gdXNlIHRoZSByZWYgcGFyYW1ldGVyPycgOiAnQW55IGFkZGl0aW9uYWwgcGFyYW1ldGVyIHdpbGwgYmUgdW5kZWZpbmVkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZW5kZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHJlbmRlci5kZWZhdWx0UHJvcHMgIT0gbnVsbCB8fCByZW5kZXIucHJvcFR5cGVzICE9IG51bGwpIHtcbiAgICAgICAgZXJyb3IoJ2ZvcndhcmRSZWYgcmVuZGVyIGZ1bmN0aW9ucyBkbyBub3Qgc3VwcG9ydCBwcm9wVHlwZXMgb3IgZGVmYXVsdFByb3BzLiAnICsgJ0RpZCB5b3UgYWNjaWRlbnRhbGx5IHBhc3MgYSBSZWFjdCBjb21wb25lbnQ/Jyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFLFxuICAgIHJlbmRlcjogcmVuZGVyXG4gIH07XG5cbiAge1xuICAgIHZhciBvd25OYW1lO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50VHlwZSwgJ2Rpc3BsYXlOYW1lJywge1xuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG93bk5hbWU7XG4gICAgICB9LFxuICAgICAgc2V0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICBvd25OYW1lID0gbmFtZTtcblxuICAgICAgICBpZiAocmVuZGVyLmRpc3BsYXlOYW1lID09IG51bGwpIHtcbiAgICAgICAgICByZW5kZXIuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbi8vIEZpbHRlciBjZXJ0YWluIERPTSBhdHRyaWJ1dGVzIChlLmcuIHNyYywgaHJlZikgaWYgdGhlaXIgdmFsdWVzIGFyZSBlbXB0eSBzdHJpbmdzLlxuXG52YXIgZW5hYmxlU2NvcGVBUEkgPSBmYWxzZTsgLy8gRXhwZXJpbWVudGFsIENyZWF0ZSBFdmVudCBIYW5kbGUgQVBJLlxuXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xuICBpZiAodHlwZW9mIHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cblxuXG4gIGlmICh0eXBlID09PSBleHBvcnRzLkZyYWdtZW50IHx8IHR5cGUgPT09IGV4cG9ydHMuUHJvZmlsZXIgfHwgdHlwZSA9PT0gUkVBQ1RfREVCVUdfVFJBQ0lOR19NT0RFX1RZUEUgfHwgdHlwZSA9PT0gZXhwb3J0cy5TdHJpY3RNb2RlIHx8IHR5cGUgPT09IGV4cG9ydHMuU3VzcGVuc2UgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX0xFR0FDWV9ISURERU5fVFlQRSB8fCBlbmFibGVTY29wZUFQSSApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xuICAgIGlmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTUVNT19UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRlVOREFNRU5UQUxfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9CTE9DS19UWVBFIHx8IHR5cGVbMF0gPT09IFJFQUNUX1NFUlZFUl9CTE9DS19UWVBFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG1lbW8odHlwZSwgY29tcGFyZSkge1xuICB7XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkpIHtcbiAgICAgIGVycm9yKCdtZW1vOiBUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIGNvbXBvbmVudC4gSW5zdGVhZCAnICsgJ3JlY2VpdmVkOiAlcycsIHR5cGUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgdHlwZSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnRUeXBlID0ge1xuICAgICQkdHlwZW9mOiBSRUFDVF9NRU1PX1RZUEUsXG4gICAgdHlwZTogdHlwZSxcbiAgICBjb21wYXJlOiBjb21wYXJlID09PSB1bmRlZmluZWQgPyBudWxsIDogY29tcGFyZVxuICB9O1xuXG4gIHtcbiAgICB2YXIgb3duTmFtZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudFR5cGUsICdkaXNwbGF5TmFtZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBvd25OYW1lO1xuICAgICAgfSxcbiAgICAgIHNldDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgb3duTmFtZSA9IG5hbWU7XG5cbiAgICAgICAgaWYgKHR5cGUuZGlzcGxheU5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgIHR5cGUuZGlzcGxheU5hbWUgPSBuYW1lO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudFR5cGU7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVEaXNwYXRjaGVyKCkge1xuICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudDtcblxuICBpZiAoIShkaXNwYXRjaGVyICE9PSBudWxsKSkge1xuICAgIHtcbiAgICAgIHRocm93IEVycm9yKCBcIkludmFsaWQgaG9vayBjYWxsLiBIb29rcyBjYW4gb25seSBiZSBjYWxsZWQgaW5zaWRlIG9mIHRoZSBib2R5IG9mIGEgZnVuY3Rpb24gY29tcG9uZW50LiBUaGlzIGNvdWxkIGhhcHBlbiBmb3Igb25lIG9mIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcXG4xLiBZb3UgbWlnaHQgaGF2ZSBtaXNtYXRjaGluZyB2ZXJzaW9ucyBvZiBSZWFjdCBhbmQgdGhlIHJlbmRlcmVyIChzdWNoIGFzIFJlYWN0IERPTSlcXG4yLiBZb3UgbWlnaHQgYmUgYnJlYWtpbmcgdGhlIFJ1bGVzIG9mIEhvb2tzXFxuMy4gWW91IG1pZ2h0IGhhdmUgbW9yZSB0aGFuIG9uZSBjb3B5IG9mIFJlYWN0IGluIHRoZSBzYW1lIGFwcFxcblNlZSBodHRwczovL3JlYWN0anMub3JnL2xpbmsvaW52YWxpZC1ob29rLWNhbGwgZm9yIHRpcHMgYWJvdXQgaG93IHRvIGRlYnVnIGFuZCBmaXggdGhpcyBwcm9ibGVtLlwiICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpc3BhdGNoZXI7XG59XG5cbmZ1bmN0aW9uIHVzZUNvbnRleHQoQ29udGV4dCwgdW5zdGFibGVfb2JzZXJ2ZWRCaXRzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcblxuICB7XG4gICAgaWYgKHVuc3RhYmxlX29ic2VydmVkQml0cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlcnJvcigndXNlQ29udGV4dCgpIHNlY29uZCBhcmd1bWVudCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlICcgKyAndXNlIGluIFJlYWN0LiBQYXNzaW5nIGl0IGlzIG5vdCBzdXBwb3J0ZWQuICcgKyAnWW91IHBhc3NlZDogJXMuJXMnLCB1bnN0YWJsZV9vYnNlcnZlZEJpdHMsIHR5cGVvZiB1bnN0YWJsZV9vYnNlcnZlZEJpdHMgPT09ICdudW1iZXInICYmIEFycmF5LmlzQXJyYXkoYXJndW1lbnRzWzJdKSA/ICdcXG5cXG5EaWQgeW91IGNhbGwgYXJyYXkubWFwKHVzZUNvbnRleHQpPyAnICsgJ0NhbGxpbmcgSG9va3MgaW5zaWRlIGEgbG9vcCBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0xlYXJuIG1vcmUgYXQgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3J1bGVzLW9mLWhvb2tzJyA6ICcnKTtcbiAgICB9IC8vIFRPRE86IGFkZCBhIG1vcmUgZ2VuZXJpYyB3YXJuaW5nIGZvciBpbnZhbGlkIHZhbHVlcy5cblxuXG4gICAgaWYgKENvbnRleHQuX2NvbnRleHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIHJlYWxDb250ZXh0ID0gQ29udGV4dC5fY29udGV4dDsgLy8gRG9uJ3QgZGVkdXBsaWNhdGUgYmVjYXVzZSB0aGlzIGxlZ2l0aW1hdGVseSBjYXVzZXMgYnVnc1xuICAgICAgLy8gYW5kIG5vYm9keSBzaG91bGQgYmUgdXNpbmcgdGhpcyBpbiBleGlzdGluZyBjb2RlLlxuXG4gICAgICBpZiAocmVhbENvbnRleHQuQ29uc3VtZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LkNvbnN1bWVyKSBpcyBub3Qgc3VwcG9ydGVkLCBtYXkgY2F1c2UgYnVncywgYW5kIHdpbGwgYmUgJyArICdyZW1vdmVkIGluIGEgZnV0dXJlIG1ham9yIHJlbGVhc2UuIERpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH0gZWxzZSBpZiAocmVhbENvbnRleHQuUHJvdmlkZXIgPT09IENvbnRleHQpIHtcbiAgICAgICAgZXJyb3IoJ0NhbGxpbmcgdXNlQ29udGV4dChDb250ZXh0LlByb3ZpZGVyKSBpcyBub3Qgc3VwcG9ydGVkLiAnICsgJ0RpZCB5b3UgbWVhbiB0byBjYWxsIHVzZUNvbnRleHQoQ29udGV4dCkgaW5zdGVhZD8nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGlzcGF0Y2hlci51c2VDb250ZXh0KENvbnRleHQsIHVuc3RhYmxlX29ic2VydmVkQml0cyk7XG59XG5mdW5jdGlvbiB1c2VTdGF0ZShpbml0aWFsU3RhdGUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VTdGF0ZShpbml0aWFsU3RhdGUpO1xufVxuZnVuY3Rpb24gdXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlUmVkdWNlcihyZWR1Y2VyLCBpbml0aWFsQXJnLCBpbml0KTtcbn1cbmZ1bmN0aW9uIHVzZVJlZihpbml0aWFsVmFsdWUpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VSZWYoaW5pdGlhbFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHVzZUVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dEVmZmVjdChjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VMYXlvdXRFZmZlY3QoY3JlYXRlLCBkZXBzKTtcbn1cbmZ1bmN0aW9uIHVzZUNhbGxiYWNrKGNhbGxiYWNrLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlQ2FsbGJhY2soY2FsbGJhY2ssIGRlcHMpO1xufVxuZnVuY3Rpb24gdXNlTWVtbyhjcmVhdGUsIGRlcHMpIHtcbiAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICByZXR1cm4gZGlzcGF0Y2hlci51c2VNZW1vKGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgY3JlYXRlLCBkZXBzKSB7XG4gIHZhciBkaXNwYXRjaGVyID0gcmVzb2x2ZURpc3BhdGNoZXIoKTtcbiAgcmV0dXJuIGRpc3BhdGNoZXIudXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsIGNyZWF0ZSwgZGVwcyk7XG59XG5mdW5jdGlvbiB1c2VEZWJ1Z1ZhbHVlKHZhbHVlLCBmb3JtYXR0ZXJGbikge1xuICB7XG4gICAgdmFyIGRpc3BhdGNoZXIgPSByZXNvbHZlRGlzcGF0Y2hlcigpO1xuICAgIHJldHVybiBkaXNwYXRjaGVyLnVzZURlYnVnVmFsdWUodmFsdWUsIGZvcm1hdHRlckZuKTtcbiAgfVxufVxuXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXG4vLyByZXBsYXlpbmcgb24gcmVuZGVyIGZ1bmN0aW9uLiBUaGlzIGN1cnJlbnRseSBvbmx5IHBhdGNoZXMgdGhlIG9iamVjdFxuLy8gbGF6aWx5IHdoaWNoIHdvbid0IGNvdmVyIGlmIHRoZSBsb2cgZnVuY3Rpb24gd2FzIGV4dHJhY3RlZCBlYWdlcmx5LlxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXG52YXIgZGlzYWJsZWREZXB0aCA9IDA7XG52YXIgcHJldkxvZztcbnZhciBwcmV2SW5mbztcbnZhciBwcmV2V2FybjtcbnZhciBwcmV2RXJyb3I7XG52YXIgcHJldkdyb3VwO1xudmFyIHByZXZHcm91cENvbGxhcHNlZDtcbnZhciBwcmV2R3JvdXBFbmQ7XG5cbmZ1bmN0aW9uIGRpc2FibGVkTG9nKCkge31cblxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcbmZ1bmN0aW9uIGRpc2FibGVMb2dzKCkge1xuICB7XG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgICAgcHJldkxvZyA9IGNvbnNvbGUubG9nO1xuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XG4gICAgICBwcmV2V2FybiA9IGNvbnNvbGUud2FybjtcbiAgICAgIHByZXZFcnJvciA9IGNvbnNvbGUuZXJyb3I7XG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xuICAgICAgcHJldkdyb3VwQ29sbGFwc2VkID0gY29uc29sZS5ncm91cENvbGxhcHNlZDtcbiAgICAgIHByZXZHcm91cEVuZCA9IGNvbnNvbGUuZ3JvdXBFbmQ7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTkwOTlcblxuICAgICAgdmFyIHByb3BzID0ge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBkaXNhYmxlZExvZyxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH07IC8vICRGbG93Rml4TWUgRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcbiAgICAgICAgaW5mbzogcHJvcHMsXG4gICAgICAgIGxvZzogcHJvcHMsXG4gICAgICAgIHdhcm46IHByb3BzLFxuICAgICAgICBlcnJvcjogcHJvcHMsXG4gICAgICAgIGdyb3VwOiBwcm9wcyxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxuICAgICAgICBncm91cEVuZDogcHJvcHNcbiAgICAgIH0pO1xuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICB9XG5cbiAgICBkaXNhYmxlZERlcHRoKys7XG4gIH1cbn1cbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcbiAge1xuICAgIGRpc2FibGVkRGVwdGgtLTtcblxuICAgIGlmIChkaXNhYmxlZERlcHRoID09PSAwKSB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cbiAgICAgIHZhciBwcm9wcyA9IHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfTsgLy8gJEZsb3dGaXhNZSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cblxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoY29uc29sZSwge1xuICAgICAgICBsb2c6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZMb2dcbiAgICAgICAgfSksXG4gICAgICAgIGluZm86IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZJbmZvXG4gICAgICAgIH0pLFxuICAgICAgICB3YXJuOiBfYXNzaWduKHt9LCBwcm9wcywge1xuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxuICAgICAgICB9KSxcbiAgICAgICAgZXJyb3I6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZFcnJvclxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXA6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxuICAgICAgICB9KSxcbiAgICAgICAgZ3JvdXBFbmQ6IF9hc3NpZ24oe30sIHByb3BzLCB7XG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cEVuZFxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHJlYWN0LWludGVybmFsL25vLXByb2R1Y3Rpb24tbG9nZ2luZyAqL1xuICAgIH1cblxuICAgIGlmIChkaXNhYmxlZERlcHRoIDwgMCkge1xuICAgICAgZXJyb3IoJ2Rpc2FibGVkRGVwdGggZmVsbCBiZWxvdyB6ZXJvLiAnICsgJ1RoaXMgaXMgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcbnZhciBwcmVmaXg7XG5mdW5jdGlvbiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZShuYW1lLCBzb3VyY2UsIG93bmVyRm4pIHtcbiAge1xuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gRXh0cmFjdCB0aGUgVk0gc3BlY2lmaWMgcHJlZml4IHVzZWQgYnkgZWFjaCBsaW5lLlxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgdmFyIG1hdGNoID0geC5zdGFjay50cmltKCkubWF0Y2goL1xcbiggKihhdCApPykvKTtcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG4gICAgICB9XG4gICAgfSAvLyBXZSB1c2UgdGhlIHByZWZpeCB0byBlbnN1cmUgb3VyIHN0YWNrcyBsaW5lIHVwIHdpdGggbmF0aXZlIHN0YWNrIGZyYW1lcy5cblxuXG4gICAgcmV0dXJuICdcXG4nICsgcHJlZml4ICsgbmFtZTtcbiAgfVxufVxudmFyIHJlZW50cnkgPSBmYWxzZTtcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xuXG57XG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XG4gIGNvbXBvbmVudEZyYW1lQ2FjaGUgPSBuZXcgUG9zc2libHlXZWFrTWFwKCk7XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xuICAvLyBJZiBzb21ldGhpbmcgYXNrZWQgZm9yIGEgc3RhY2sgaW5zaWRlIGEgZmFrZSByZW5kZXIsIGl0IHNob3VsZCBnZXQgaWdub3JlZC5cbiAgaWYgKCFmbiB8fCByZWVudHJ5KSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAge1xuICAgIHZhciBmcmFtZSA9IGNvbXBvbmVudEZyYW1lQ2FjaGUuZ2V0KGZuKTtcblxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZnJhbWU7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbnRyb2w7XG4gIHJlZW50cnkgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZSA9IEVycm9yLnByZXBhcmVTdGFja1RyYWNlOyAvLyAkRmxvd0ZpeE1lIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cblxuICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHVuZGVmaW5lZDtcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcblxuICB7XG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlciQxLmN1cnJlbnQ7IC8vIFNldCB0aGUgZGlzcGF0Y2hlciBpbiBERVYgYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGNhbGwgaW4gdGhlIHJlbmRlciBmdW5jdGlvblxuICAgIC8vIGZvciB3YXJuaW5ncy5cblxuICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIkMS5jdXJyZW50ID0gbnVsbDtcbiAgICBkaXNhYmxlTG9ncygpO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBUaGlzIHNob3VsZCB0aHJvdy5cbiAgICBpZiAoY29uc3RydWN0KSB7XG4gICAgICAvLyBTb21ldGhpbmcgc2hvdWxkIGJlIHNldHRpbmcgdGhlIHByb3BzIGluIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICAgIHZhciBGYWtlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBFcnJvcigpO1xuICAgICAgfTsgLy8gJEZsb3dGaXhNZVxuXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGYWtlLnByb3RvdHlwZSwgJ3Byb3BzJywge1xuICAgICAgICBzZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBXZSB1c2UgYSB0aHJvd2luZyBzZXR0ZXIgaW5zdGVhZCBvZiBmcm96ZW4gb3Igbm9uLXdyaXRhYmxlIHByb3BzXG4gICAgICAgICAgLy8gYmVjYXVzZSB0aGF0IHdvbid0IHRocm93IGluIGEgbm9uLXN0cmljdCBtb2RlIGZ1bmN0aW9uLlxuICAgICAgICAgIHRocm93IEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XG4gICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcbiAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XG4gICAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgICBjb250cm9sID0geDtcbiAgICAgICAgfVxuXG4gICAgICAgIFJlZmxlY3QuY29uc3RydWN0KGZuLCBbXSwgRmFrZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEZha2UuY2FsbCgpO1xuICAgICAgICB9IGNhdGNoICh4KSB7XG4gICAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICAgIH1cblxuICAgICAgICBmbi5jYWxsKEZha2UucHJvdG90eXBlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgY29udHJvbCA9IHg7XG4gICAgICB9XG5cbiAgICAgIGZuKCk7XG4gICAgfVxuICB9IGNhdGNoIChzYW1wbGUpIHtcbiAgICAvLyBUaGlzIGlzIGlubGluZWQgbWFudWFsbHkgYmVjYXVzZSBjbG9zdXJlIGRvZXNuJ3QgZG8gaXQgZm9yIHVzLlxuICAgIGlmIChzYW1wbGUgJiYgY29udHJvbCAmJiB0eXBlb2Ygc2FtcGxlLnN0YWNrID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cbiAgICAgIC8vIFNraXBwaW5nIG9uZSBmcmFtZSB0aGF0IHdlIGFzc3VtZSBpcyB0aGUgZnJhbWUgdGhhdCBjYWxscyB0aGUgdHdvLlxuICAgICAgdmFyIHNhbXBsZUxpbmVzID0gc2FtcGxlLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBjb250cm9sTGluZXMgPSBjb250cm9sLnN0YWNrLnNwbGl0KCdcXG4nKTtcbiAgICAgIHZhciBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgLy8gV2UgZXhwZWN0IGF0IGxlYXN0IG9uZSBzdGFjayBmcmFtZSB0byBiZSBzaGFyZWQuXG4gICAgICAgIC8vIFR5cGljYWxseSB0aGlzIHdpbGwgYmUgdGhlIHJvb3QgbW9zdCBvbmUuIEhvd2V2ZXIsIHN0YWNrIGZyYW1lcyBtYXkgYmVcbiAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcbiAgICAgICAgLy8gZWFybGllciB0aGFuIHRoZSBvdGhlci4gV2UgYXNzdW1lIHRoYXQgdGhlIHNhbXBsZSBpcyBsb25nZXIgb3IgdGhlIHNhbWVcbiAgICAgICAgLy8gYW5kIHRoZXJlIGZvciBjdXQgb2ZmIGVhcmxpZXIuIFNvIHdlIHNob3VsZCBmaW5kIHRoZSByb290IG1vc3QgZnJhbWUgaW5cbiAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXG4gICAgICAgIGMtLTtcbiAgICAgIH1cblxuICAgICAgZm9yICg7IHMgPj0gMSAmJiBjID49IDA7IHMtLSwgYy0tKSB7XG4gICAgICAgIC8vIE5leHQgd2UgZmluZCB0aGUgZmlyc3Qgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgd2hpY2ggc2hvdWxkIGJlIHRoZVxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cbiAgICAgICAgaWYgKHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAvLyBJbiBWOCwgdGhlIGZpcnN0IGxpbmUgaXMgZGVzY3JpYmluZyB0aGUgbWVzc2FnZSBidXQgb3RoZXIgVk1zIGRvbid0LlxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcbiAgICAgICAgICAvLyBsaW5lLCB0aGF0J3MgYSBwcmV0dHkgZ29vZCBpbmRpY2F0b3IgdGhhdCBvdXIgc2FtcGxlIHRocmV3IGF0IHNhbWUgbGluZSBhc1xuICAgICAgICAgIC8vIHRoZSBjb250cm9sLiBJLmUuIGJlZm9yZSB3ZSBlbnRlcmVkIHRoZSBzYW1wbGUgZnJhbWUuIFNvIHdlIGlnbm9yZSB0aGlzIHJlc3VsdC5cbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxuICAgICAgICAgIGlmIChzICE9PSAxIHx8IGMgIT09IDEpIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgcy0tO1xuICAgICAgICAgICAgICBjLS07IC8vIFdlIG1heSBzdGlsbCBoYXZlIHNpbWlsYXIgaW50ZXJtZWRpYXRlIGZyYW1lcyBmcm9tIHRoZSBjb25zdHJ1Y3QgY2FsbC5cbiAgICAgICAgICAgICAgLy8gVGhlIG5leHQgb25lIHRoYXQgaXNuJ3QgdGhlIHNhbWUgc2hvdWxkIGJlIG91ciBtYXRjaCB0aG91Z2guXG5cbiAgICAgICAgICAgICAgaWYgKGMgPCAwIHx8IHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcbiAgICAgICAgICAgICAgICAvLyBWOCBhZGRzIGEgXCJuZXdcIiBwcmVmaXggZm9yIG5hdGl2ZSBjbGFzc2VzLiBMZXQncyByZW1vdmUgaXQgdG8gbWFrZSBpdCBwcmV0dGllci5cbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7XG5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyYW1lQ2FjaGUuc2V0KGZuLCBfZnJhbWUpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxuXG5cbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlIChzID49IDEgJiYgYyA+PSAwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICByZWVudHJ5ID0gZmFsc2U7XG5cbiAgICB7XG4gICAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyJDEuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcbiAgICAgIHJlZW5hYmxlTG9ncygpO1xuICAgIH1cblxuICAgIEVycm9yLnByZXBhcmVTdGFja1RyYWNlID0gcHJldmlvdXNQcmVwYXJlU3RhY2tUcmFjZTtcbiAgfSAvLyBGYWxsYmFjayB0byBqdXN0IHVzaW5nIHRoZSBuYW1lIGlmIHdlIGNvdWxkbid0IG1ha2UgaXQgdGhyb3cuXG5cblxuICB2YXIgbmFtZSA9IGZuID8gZm4uZGlzcGxheU5hbWUgfHwgZm4ubmFtZSA6ICcnO1xuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcblxuICB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIHN5bnRoZXRpY0ZyYW1lKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3ludGhldGljRnJhbWU7XG59XG5mdW5jdGlvbiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUoZm4sIHNvdXJjZSwgb3duZXJGbikge1xuICB7XG4gICAgcmV0dXJuIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGZhbHNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XG4gIHZhciBwcm90b3R5cGUgPSBDb21wb25lbnQucHJvdG90eXBlO1xuICByZXR1cm4gISEocHJvdG90eXBlICYmIHByb3RvdHlwZS5pc1JlYWN0Q29tcG9uZW50KTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKHR5cGUsIHNvdXJjZSwgb3duZXJGbikge1xuXG4gIGlmICh0eXBlID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICB7XG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUodHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlIGV4cG9ydHMuU3VzcGVuc2U6XG4gICAgICByZXR1cm4gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUoJ1N1c3BlbnNlJyk7XG5cbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2VMaXN0Jyk7XG4gIH1cblxuICBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnKSB7XG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgIHJldHVybiBkZXNjcmliZUZ1bmN0aW9uQ29tcG9uZW50RnJhbWUodHlwZS5yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcbiAgICAgICAgLy8gTWVtbyBtYXkgY29udGFpbiBhbnkgY29tcG9uZW50IHR5cGUgc28gd2UgcmVjdXJzaXZlbHkgcmVzb2x2ZSBpdC5cbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLnR5cGUsIHNvdXJjZSwgb3duZXJGbik7XG5cbiAgICAgIGNhc2UgUkVBQ1RfQkxPQ0tfVFlQRTpcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLl9yZW5kZXIpO1xuXG4gICAgICBjYXNlIFJFQUNUX0xBWllfVFlQRTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcbiAgICAgICAgICB2YXIgcGF5bG9hZCA9IGxhenlDb21wb25lbnQuX3BheWxvYWQ7XG4gICAgICAgICAgdmFyIGluaXQgPSBsYXp5Q29tcG9uZW50Ll9pbml0O1xuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIExhenkgbWF5IGNvbnRhaW4gYW55IGNvbXBvbmVudCB0eXBlIHNvIHdlIHJlY3Vyc2l2ZWx5IHJlc29sdmUgaXQuXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIHNvdXJjZSwgb3duZXJGbik7XG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxudmFyIGxvZ2dlZFR5cGVGYWlsdXJlcyA9IHt9O1xudmFyIFJlYWN0RGVidWdDdXJyZW50RnJhbWUkMSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XG5cbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcbiAge1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcbiAgICAgIHZhciBzdGFjayA9IGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVihlbGVtZW50LnR5cGUsIGVsZW1lbnQuX3NvdXJjZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XG4gICAgICBSZWFjdERlYnVnQ3VycmVudEZyYW1lJDEuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSQxLnNldEV4dHJhU3RhY2tGcmFtZShudWxsKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tQcm9wVHlwZXModHlwZVNwZWNzLCB2YWx1ZXMsIGxvY2F0aW9uLCBjb21wb25lbnROYW1lLCBlbGVtZW50KSB7XG4gIHtcbiAgICAvLyAkRmxvd0ZpeE1lIFRoaXMgaXMgb2theSBidXQgRmxvdyBkb2Vzbid0IGtub3cgaXQuXG4gICAgdmFyIGhhcyA9IEZ1bmN0aW9uLmNhbGwuYmluZChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5KTtcblxuICAgIGZvciAodmFyIHR5cGVTcGVjTmFtZSBpbiB0eXBlU3BlY3MpIHtcbiAgICAgIGlmIChoYXModHlwZVNwZWNzLCB0eXBlU3BlY05hbWUpKSB7XG4gICAgICAgIHZhciBlcnJvciQxID0gdm9pZCAwOyAvLyBQcm9wIHR5cGUgdmFsaWRhdGlvbiBtYXkgdGhyb3cuIEluIGNhc2UgdGhleSBkbywgd2UgZG9uJ3Qgd2FudCB0b1xuICAgICAgICAvLyBmYWlsIHRoZSByZW5kZXIgcGhhc2Ugd2hlcmUgaXQgZGlkbid0IGZhaWwgYmVmb3JlLiBTbyB3ZSBsb2cgaXQuXG4gICAgICAgIC8vIEFmdGVyIHRoZXNlIGhhdmUgYmVlbiBjbGVhbmVkIHVwLCB3ZSdsbCBsZXQgdGhlbSB0aHJvdy5cblxuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIFRoaXMgaXMgaW50ZW50aW9uYWxseSBhbiBpbnZhcmlhbnQgdGhhdCBnZXRzIGNhdWdodC4gSXQncyB0aGUgc2FtZVxuICAgICAgICAgIC8vIGJlaGF2aW9yIGFzIHdpdGhvdXQgdGhpcyBzdGF0ZW1lbnQgZXhjZXB0IHdpdGggYSBiZXR0ZXIgbWVzc2FnZS5cbiAgICAgICAgICBpZiAodHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB2YXIgZXJyID0gRXJyb3IoKGNvbXBvbmVudE5hbWUgfHwgJ1JlYWN0IGNsYXNzJykgKyAnOiAnICsgbG9jYXRpb24gKyAnIHR5cGUgYCcgKyB0eXBlU3BlY05hbWUgKyAnYCBpcyBpbnZhbGlkOyAnICsgJ2l0IG11c3QgYmUgYSBmdW5jdGlvbiwgdXN1YWxseSBmcm9tIHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZSwgYnV0IHJlY2VpdmVkIGAnICsgdHlwZW9mIHR5cGVTcGVjc1t0eXBlU3BlY05hbWVdICsgJ2AuJyArICdUaGlzIG9mdGVuIGhhcHBlbnMgYmVjYXVzZSBvZiB0eXBvcyBzdWNoIGFzIGBQcm9wVHlwZXMuZnVuY3Rpb25gIGluc3RlYWQgb2YgYFByb3BUeXBlcy5mdW5jYC4nKTtcbiAgICAgICAgICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVycm9yJDEgPSB0eXBlU3BlY3NbdHlwZVNwZWNOYW1lXSh2YWx1ZXMsIHR5cGVTcGVjTmFtZSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIG51bGwsICdTRUNSRVRfRE9fTk9UX1BBU1NfVEhJU19PUl9ZT1VfV0lMTF9CRV9GSVJFRCcpO1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIGVycm9yJDEgPSBleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxICYmICEoZXJyb3IkMSBpbnN0YW5jZW9mIEVycm9yKSkge1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJyVzOiB0eXBlIHNwZWNpZmljYXRpb24gb2YgJXMnICsgJyBgJXNgIGlzIGludmFsaWQ7IHRoZSB0eXBlIGNoZWNrZXIgJyArICdmdW5jdGlvbiBtdXN0IHJldHVybiBgbnVsbGAgb3IgYW4gYEVycm9yYCBidXQgcmV0dXJuZWQgYSAlcy4gJyArICdZb3UgbWF5IGhhdmUgZm9yZ290dGVuIHRvIHBhc3MgYW4gYXJndW1lbnQgdG8gdGhlIHR5cGUgY2hlY2tlciAnICsgJ2NyZWF0b3IgKGFycmF5T2YsIGluc3RhbmNlT2YsIG9iamVjdE9mLCBvbmVPZiwgb25lT2ZUeXBlLCBhbmQgJyArICdzaGFwZSBhbGwgcmVxdWlyZSBhbiBhcmd1bWVudCkuJywgY29tcG9uZW50TmFtZSB8fCAnUmVhY3QgY2xhc3MnLCBsb2NhdGlvbiwgdHlwZVNwZWNOYW1lLCB0eXBlb2YgZXJyb3IkMSk7XG5cbiAgICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvciQxIGluc3RhbmNlb2YgRXJyb3IgJiYgIShlcnJvciQxLm1lc3NhZ2UgaW4gbG9nZ2VkVHlwZUZhaWx1cmVzKSkge1xuICAgICAgICAgIC8vIE9ubHkgbW9uaXRvciB0aGlzIGZhaWx1cmUgb25jZSBiZWNhdXNlIHRoZXJlIHRlbmRzIHRvIGJlIGEgbG90IG9mIHRoZVxuICAgICAgICAgIC8vIHNhbWUgZXJyb3IuXG4gICAgICAgICAgbG9nZ2VkVHlwZUZhaWx1cmVzW2Vycm9yJDEubWVzc2FnZV0gPSB0cnVlO1xuICAgICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpO1xuXG4gICAgICAgICAgZXJyb3IoJ0ZhaWxlZCAlcyB0eXBlOiAlcycsIGxvY2F0aW9uLCBlcnJvciQxLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShlbGVtZW50KSB7XG4gIHtcbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgdmFyIG93bmVyID0gZWxlbWVudC5fb3duZXI7XG4gICAgICB2YXIgc3RhY2sgPSBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYoZWxlbWVudC50eXBlLCBlbGVtZW50Ll9zb3VyY2UsIG93bmVyID8gb3duZXIudHlwZSA6IG51bGwpO1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xuICAgIH1cbiAgfVxufVxuXG52YXIgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd247XG5cbntcbiAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xuICBpZiAoUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xuXG4gICAgaWYgKG5hbWUpIHtcbiAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gJyc7XG59XG5cbmZ1bmN0aW9uIGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtKHNvdXJjZSkge1xuICBpZiAoc291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgZmlsZU5hbWUgPSBzb3VyY2UuZmlsZU5hbWUucmVwbGFjZSgvXi4qW1xcXFxcXC9dLywgJycpO1xuICAgIHZhciBsaW5lTnVtYmVyID0gc291cmNlLmxpbmVOdW1iZXI7XG4gICAgcmV0dXJuICdcXG5cXG5DaGVjayB5b3VyIGNvZGUgYXQgJyArIGZpbGVOYW1lICsgJzonICsgbGluZU51bWJlciArICcuJztcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuZnVuY3Rpb24gZ2V0U291cmNlSW5mb0Vycm9yQWRkZW5kdW1Gb3JQcm9wcyhlbGVtZW50UHJvcHMpIHtcbiAgaWYgKGVsZW1lbnRQcm9wcyAhPT0gbnVsbCAmJiBlbGVtZW50UHJvcHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBnZXRTb3VyY2VJbmZvRXJyb3JBZGRlbmR1bShlbGVtZW50UHJvcHMuX19zb3VyY2UpO1xuICB9XG5cbiAgcmV0dXJuICcnO1xufVxuLyoqXG4gKiBXYXJuIGlmIHRoZXJlJ3Mgbm8ga2V5IGV4cGxpY2l0bHkgc2V0IG9uIGR5bmFtaWMgYXJyYXlzIG9mIGNoaWxkcmVuIG9yXG4gKiBvYmplY3Qga2V5cyBhcmUgbm90IHZhbGlkLiBUaGlzIGFsbG93cyB1cyB0byBrZWVwIHRyYWNrIG9mIGNoaWxkcmVuIGJldHdlZW5cbiAqIHVwZGF0ZXMuXG4gKi9cblxuXG52YXIgb3duZXJIYXNLZXlVc2VXYXJuaW5nID0ge307XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSkge1xuICB2YXIgaW5mbyA9IGdldERlY2xhcmF0aW9uRXJyb3JBZGRlbmR1bSgpO1xuXG4gIGlmICghaW5mbykge1xuICAgIHZhciBwYXJlbnROYW1lID0gdHlwZW9mIHBhcmVudFR5cGUgPT09ICdzdHJpbmcnID8gcGFyZW50VHlwZSA6IHBhcmVudFR5cGUuZGlzcGxheU5hbWUgfHwgcGFyZW50VHlwZS5uYW1lO1xuXG4gICAgaWYgKHBhcmVudE5hbWUpIHtcbiAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaW5mbztcbn1cbi8qKlxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxuICogVGhpcyBlbGVtZW50IGlzIGluIGFuIGFycmF5LiBUaGUgYXJyYXkgY291bGQgZ3JvdyBhbmQgc2hyaW5rIG9yIGJlXG4gKiByZW9yZGVyZWQuIEFsbCBjaGlsZHJlbiB0aGF0IGhhdmVuJ3QgYWxyZWFkeSBiZWVuIHZhbGlkYXRlZCBhcmUgcmVxdWlyZWQgdG9cbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xuICogd2lsbCBvbmx5IGJlIHNob3duIG9uY2UuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRoYXQgcmVxdWlyZXMgYSBrZXkuXG4gKiBAcGFyYW0geyp9IHBhcmVudFR5cGUgZWxlbWVudCdzIHBhcmVudCdzIHR5cGUuXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cGxpY2l0S2V5KGVsZW1lbnQsIHBhcmVudFR5cGUpIHtcbiAgaWYgKCFlbGVtZW50Ll9zdG9yZSB8fCBlbGVtZW50Ll9zdG9yZS52YWxpZGF0ZWQgfHwgZWxlbWVudC5rZXkgIT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XG4gIHZhciBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvID0gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKTtcblxuICBpZiAob3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcbiAgLy8gcHJvcGVydHksIGl0IG1heSBiZSB0aGUgY3JlYXRvciBvZiB0aGUgY2hpbGQgdGhhdCdzIHJlc3BvbnNpYmxlIGZvclxuICAvLyBhc3NpZ25pbmcgaXQgYSBrZXkuXG5cbiAgdmFyIGNoaWxkT3duZXIgPSAnJztcblxuICBpZiAoZWxlbWVudCAmJiBlbGVtZW50Ll9vd25lciAmJiBlbGVtZW50Ll9vd25lciAhPT0gUmVhY3RDdXJyZW50T3duZXIuY3VycmVudCkge1xuICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxuICAgIGNoaWxkT3duZXIgPSBcIiBJdCB3YXMgcGFzc2VkIGEgY2hpbGQgZnJvbSBcIiArIGdldENvbXBvbmVudE5hbWUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcbiAgfVxuXG4gIHtcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKGVsZW1lbnQpO1xuXG4gICAgZXJyb3IoJ0VhY2ggY2hpbGQgaW4gYSBsaXN0IHNob3VsZCBoYXZlIGEgdW5pcXVlIFwia2V5XCIgcHJvcC4nICsgJyVzJXMgU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay93YXJuaW5nLWtleXMgZm9yIG1vcmUgaW5mb3JtYXRpb24uJywgY3VycmVudENvbXBvbmVudEVycm9ySW5mbywgY2hpbGRPd25lcik7XG5cbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudCQxKG51bGwpO1xuICB9XG59XG4vKipcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cbiAqIGFycmF5IHdpdGggYW4gZXhwbGljaXQga2V5cyBwcm9wZXJ0eSBkZWZpbmVkLCBvciBpbiBhbiBvYmplY3QgbGl0ZXJhbFxuICogd2l0aCB2YWxpZCBrZXkgcHJvcGVydHkuXG4gKlxuICogQGludGVybmFsXG4gKiBAcGFyYW0ge1JlYWN0Tm9kZX0gbm9kZSBTdGF0aWNhbGx5IHBhc3NlZCBjaGlsZCBvZiBhbnkgdHlwZS5cbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hpbGRLZXlzKG5vZGUsIHBhcmVudFR5cGUpIHtcbiAgaWYgKHR5cGVvZiBub2RlICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5vZGUpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBub2RlW2ldO1xuXG4gICAgICBpZiAoaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoY2hpbGQsIHBhcmVudFR5cGUpO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZhbGlkRWxlbWVudChub2RlKSkge1xuICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXG4gICAgaWYgKG5vZGUuX3N0b3JlKSB7XG4gICAgICBub2RlLl9zdG9yZS52YWxpZGF0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfSBlbHNlIGlmIChub2RlKSB7XG4gICAgdmFyIGl0ZXJhdG9yRm4gPSBnZXRJdGVyYXRvckZuKG5vZGUpO1xuXG4gICAgaWYgKHR5cGVvZiBpdGVyYXRvckZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBFbnRyeSBpdGVyYXRvcnMgdXNlZCB0byBwcm92aWRlIGltcGxpY2l0IGtleXMsXG4gICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cbiAgICAgIGlmIChpdGVyYXRvckZuICE9PSBub2RlLmVudHJpZXMpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9yID0gaXRlcmF0b3JGbi5jYWxsKG5vZGUpO1xuICAgICAgICB2YXIgc3RlcDtcblxuICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XG4gICAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KHN0ZXAudmFsdWUpKSB7XG4gICAgICAgICAgICB2YWxpZGF0ZUV4cGxpY2l0S2V5KHN0ZXAudmFsdWUsIHBhcmVudFR5cGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBHaXZlbiBhbiBlbGVtZW50LCB2YWxpZGF0ZSB0aGF0IGl0cyBwcm9wcyBmb2xsb3cgdGhlIHByb3BUeXBlcyBkZWZpbml0aW9uLFxuICogcHJvdmlkZWQgYnkgdGhlIHR5cGUuXG4gKlxuICogQHBhcmFtIHtSZWFjdEVsZW1lbnR9IGVsZW1lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlUHJvcFR5cGVzKGVsZW1lbnQpIHtcbiAge1xuICAgIHZhciB0eXBlID0gZWxlbWVudC50eXBlO1xuXG4gICAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBwcm9wVHlwZXM7XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHByb3BUeXBlcyA9IHR5cGUucHJvcFR5cGVzO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHR5cGUgPT09ICdvYmplY3QnICYmICh0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFIHx8IC8vIE5vdGU6IE1lbW8gb25seSBjaGVja3Mgb3V0ZXIgcHJvcHMgaGVyZS5cbiAgICAvLyBJbm5lciBwcm9wcyBhcmUgY2hlY2tlZCBpbiB0aGUgcmVjb25jaWxlci5cbiAgICB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUpKSB7XG4gICAgICBwcm9wVHlwZXMgPSB0eXBlLnByb3BUeXBlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChwcm9wVHlwZXMpIHtcbiAgICAgIC8vIEludGVudGlvbmFsbHkgaW5zaWRlIHRvIGF2b2lkIHRyaWdnZXJpbmcgbGF6eSBpbml0aWFsaXplcnM6XG4gICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWUodHlwZSk7XG4gICAgICBjaGVja1Byb3BUeXBlcyhwcm9wVHlwZXMsIGVsZW1lbnQucHJvcHMsICdwcm9wJywgbmFtZSwgZWxlbWVudCk7XG4gICAgfSBlbHNlIGlmICh0eXBlLlByb3BUeXBlcyAhPT0gdW5kZWZpbmVkICYmICFwcm9wVHlwZXNNaXNzcGVsbFdhcm5pbmdTaG93bikge1xuICAgICAgcHJvcFR5cGVzTWlzc3BlbGxXYXJuaW5nU2hvd24gPSB0cnVlOyAvLyBJbnRlbnRpb25hbGx5IGluc2lkZSB0byBhdm9pZCB0cmlnZ2VyaW5nIGxhenkgaW5pdGlhbGl6ZXJzOlxuXG4gICAgICB2YXIgX25hbWUgPSBnZXRDb21wb25lbnROYW1lKHR5cGUpO1xuXG4gICAgICBlcnJvcignQ29tcG9uZW50ICVzIGRlY2xhcmVkIGBQcm9wVHlwZXNgIGluc3RlYWQgb2YgYHByb3BUeXBlc2AuIERpZCB5b3UgbWlzc3BlbGwgdGhlIHByb3BlcnR5IGFzc2lnbm1lbnQ/JywgX25hbWUgfHwgJ1Vua25vd24nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUuZ2V0RGVmYXVsdFByb3BzID09PSAnZnVuY3Rpb24nICYmICF0eXBlLmdldERlZmF1bHRQcm9wcy5pc1JlYWN0Q2xhc3NBcHByb3ZlZCkge1xuICAgICAgZXJyb3IoJ2dldERlZmF1bHRQcm9wcyBpcyBvbmx5IHVzZWQgb24gY2xhc3NpYyBSZWFjdC5jcmVhdGVDbGFzcyAnICsgJ2RlZmluaXRpb25zLiBVc2UgYSBzdGF0aWMgcHJvcGVydHkgbmFtZWQgYGRlZmF1bHRQcm9wc2AgaW5zdGVhZC4nKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXG4gKiBAcGFyYW0ge1JlYWN0RWxlbWVudH0gZnJhZ21lbnRcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhmcmFnbWVudCkge1xuICB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhmcmFnbWVudC5wcm9wcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShmcmFnbWVudCk7XG5cbiAgICAgICAgZXJyb3IoJ0ludmFsaWQgcHJvcCBgJXNgIHN1cHBsaWVkIHRvIGBSZWFjdC5GcmFnbWVudGAuICcgKyAnUmVhY3QuRnJhZ21lbnQgY2FuIG9ubHkgaGF2ZSBga2V5YCBhbmQgYGNoaWxkcmVuYCBwcm9wcy4nLCBrZXkpO1xuXG4gICAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEobnVsbCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFnbWVudC5yZWYgIT09IG51bGwpIHtcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50JDEoZnJhZ21lbnQpO1xuXG4gICAgICBlcnJvcignSW52YWxpZCBhdHRyaWJ1dGUgYHJlZmAgc3VwcGxpZWQgdG8gYFJlYWN0LkZyYWdtZW50YC4nKTtcblxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQkMShudWxsKTtcbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbih0eXBlLCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIHZhbGlkVHlwZSA9IGlzVmFsaWRFbGVtZW50VHlwZSh0eXBlKTsgLy8gV2Ugd2FybiBpbiB0aGlzIGNhc2UgYnV0IGRvbid0IHRocm93LiBXZSBleHBlY3QgdGhlIGVsZW1lbnQgY3JlYXRpb24gdG9cbiAgLy8gc3VjY2VlZCBhbmQgdGhlcmUgd2lsbCBsaWtlbHkgYmUgZXJyb3JzIGluIHJlbmRlci5cblxuICBpZiAoIXZhbGlkVHlwZSkge1xuICAgIHZhciBpbmZvID0gJyc7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgaW5mbyArPSAnIFlvdSBsaWtlbHkgZm9yZ290IHRvIGV4cG9ydCB5b3VyIGNvbXBvbmVudCBmcm9tIHRoZSBmaWxlICcgKyBcIml0J3MgZGVmaW5lZCBpbiwgb3IgeW91IG1pZ2h0IGhhdmUgbWl4ZWQgdXAgZGVmYXVsdCBhbmQgbmFtZWQgaW1wb3J0cy5cIjtcbiAgICB9XG5cbiAgICB2YXIgc291cmNlSW5mbyA9IGdldFNvdXJjZUluZm9FcnJvckFkZGVuZHVtRm9yUHJvcHMocHJvcHMpO1xuXG4gICAgaWYgKHNvdXJjZUluZm8pIHtcbiAgICAgIGluZm8gKz0gc291cmNlSW5mbztcbiAgICB9IGVsc2Uge1xuICAgICAgaW5mbyArPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcbiAgICB9XG5cbiAgICB2YXIgdHlwZVN0cmluZztcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0eXBlKSkge1xuICAgICAgdHlwZVN0cmluZyA9ICdhcnJheSc7XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XG4gICAgICB0eXBlU3RyaW5nID0gXCI8XCIgKyAoZ2V0Q29tcG9uZW50TmFtZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xuICAgICAgaW5mbyA9ICcgRGlkIHlvdSBhY2NpZGVudGFsbHkgZXhwb3J0IGEgSlNYIGxpdGVyYWwgaW5zdGVhZCBvZiBhIGNvbXBvbmVudD8nO1xuICAgIH0gZWxzZSB7XG4gICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XG4gICAgfVxuXG4gICAge1xuICAgICAgZXJyb3IoJ1JlYWN0LmNyZWF0ZUVsZW1lbnQ6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGVsZW1lbnQgPSBjcmVhdGVFbGVtZW50LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IC8vIFRoZSByZXN1bHQgY2FuIGJlIG51bGxpc2ggaWYgYSBtb2NrIG9yIGEgY3VzdG9tIGZ1bmN0aW9uIGlzIHVzZWQuXG4gIC8vIFRPRE86IERyb3AgdGhpcyB3aGVuIHRoZXNlIGFyZSBubyBsb25nZXIgYWxsb3dlZCBhcyB0aGUgdHlwZSBhcmd1bWVudC5cblxuICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH0gLy8gU2tpcCBrZXkgd2FybmluZyBpZiB0aGUgdHlwZSBpc24ndCB2YWxpZCBzaW5jZSBvdXIga2V5IHZhbGlkYXRpb24gbG9naWNcbiAgLy8gZG9lc24ndCBleHBlY3QgYSBub24tc3RyaW5nL2Z1bmN0aW9uIHR5cGUgYW5kIGNhbiB0aHJvdyBjb25mdXNpbmcgZXJyb3JzLlxuICAvLyBXZSBkb24ndCB3YW50IGV4Y2VwdGlvbiBiZWhhdmlvciB0byBkaWZmZXIgYmV0d2VlbiBkZXYgYW5kIHByb2QuXG4gIC8vIChSZW5kZXJpbmcgd2lsbCB0aHJvdyB3aXRoIGEgaGVscGZ1bCBtZXNzYWdlIGFuZCBhcyBzb29uIGFzIHRoZSB0eXBlIGlzXG4gIC8vIGZpeGVkLCB0aGUga2V5IHdhcm5pbmdzIHdpbGwgYXBwZWFyLilcblxuXG4gIGlmICh2YWxpZFR5cGUpIHtcbiAgICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsaWRhdGVDaGlsZEtleXMoYXJndW1lbnRzW2ldLCB0eXBlKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZSA9PT0gZXhwb3J0cy5GcmFnbWVudCkge1xuICAgIHZhbGlkYXRlRnJhZ21lbnRQcm9wcyhlbGVtZW50KTtcbiAgfSBlbHNlIHtcbiAgICB2YWxpZGF0ZVByb3BUeXBlcyhlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50O1xufVxudmFyIGRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5ID0gZmFsc2U7XG5mdW5jdGlvbiBjcmVhdGVGYWN0b3J5V2l0aFZhbGlkYXRpb24odHlwZSkge1xuICB2YXIgdmFsaWRhdGVkRmFjdG9yeSA9IGNyZWF0ZUVsZW1lbnRXaXRoVmFsaWRhdGlvbi5iaW5kKG51bGwsIHR5cGUpO1xuICB2YWxpZGF0ZWRGYWN0b3J5LnR5cGUgPSB0eXBlO1xuXG4gIHtcbiAgICBpZiAoIWRpZFdhcm5BYm91dERlcHJlY2F0ZWRDcmVhdGVGYWN0b3J5KSB7XG4gICAgICBkaWRXYXJuQWJvdXREZXByZWNhdGVkQ3JlYXRlRmFjdG9yeSA9IHRydWU7XG5cbiAgICAgIHdhcm4oJ1JlYWN0LmNyZWF0ZUZhY3RvcnkoKSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gJyArICdhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiBDb25zaWRlciB1c2luZyBKU1ggJyArICdvciB1c2UgUmVhY3QuY3JlYXRlRWxlbWVudCgpIGRpcmVjdGx5IGluc3RlYWQuJyk7XG4gICAgfSAvLyBMZWdhY3kgaG9vazogcmVtb3ZlIGl0XG5cblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWxpZGF0ZWRGYWN0b3J5LCAndHlwZScsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHdhcm4oJ0ZhY3RvcnkudHlwZSBpcyBkZXByZWNhdGVkLiBBY2Nlc3MgdGhlIGNsYXNzIGRpcmVjdGx5ICcgKyAnYmVmb3JlIHBhc3NpbmcgaXQgdG8gY3JlYXRlRmFjdG9yeS4nKTtcblxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ3R5cGUnLCB7XG4gICAgICAgICAgdmFsdWU6IHR5cGVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlZEZhY3Rvcnk7XG59XG5mdW5jdGlvbiBjbG9uZUVsZW1lbnRXaXRoVmFsaWRhdGlvbihlbGVtZW50LCBwcm9wcywgY2hpbGRyZW4pIHtcbiAgdmFyIG5ld0VsZW1lbnQgPSBjbG9uZUVsZW1lbnQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGFyZ3VtZW50c1tpXSwgbmV3RWxlbWVudC50eXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlUHJvcFR5cGVzKG5ld0VsZW1lbnQpO1xuICByZXR1cm4gbmV3RWxlbWVudDtcbn1cblxue1xuXG4gIHRyeSB7XG4gICAgdmFyIGZyb3plbk9iamVjdCA9IE9iamVjdC5mcmVlemUoe30pO1xuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAqL1xuXG4gICAgbmV3IE1hcChbW2Zyb3plbk9iamVjdCwgbnVsbF1dKTtcbiAgICBuZXcgU2V0KFtmcm96ZW5PYmplY3RdKTtcbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLW5ldyAqL1xuICB9IGNhdGNoIChlKSB7XG4gIH1cbn1cblxudmFyIGNyZWF0ZUVsZW1lbnQkMSA9ICBjcmVhdGVFbGVtZW50V2l0aFZhbGlkYXRpb24gO1xudmFyIGNsb25lRWxlbWVudCQxID0gIGNsb25lRWxlbWVudFdpdGhWYWxpZGF0aW9uIDtcbnZhciBjcmVhdGVGYWN0b3J5ID0gIGNyZWF0ZUZhY3RvcnlXaXRoVmFsaWRhdGlvbiA7XG52YXIgQ2hpbGRyZW4gPSB7XG4gIG1hcDogbWFwQ2hpbGRyZW4sXG4gIGZvckVhY2g6IGZvckVhY2hDaGlsZHJlbixcbiAgY291bnQ6IGNvdW50Q2hpbGRyZW4sXG4gIHRvQXJyYXk6IHRvQXJyYXksXG4gIG9ubHk6IG9ubHlDaGlsZFxufTtcblxuZXhwb3J0cy5DaGlsZHJlbiA9IENoaWxkcmVuO1xuZXhwb3J0cy5Db21wb25lbnQgPSBDb21wb25lbnQ7XG5leHBvcnRzLlB1cmVDb21wb25lbnQgPSBQdXJlQ29tcG9uZW50O1xuZXhwb3J0cy5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRCA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzO1xuZXhwb3J0cy5jbG9uZUVsZW1lbnQgPSBjbG9uZUVsZW1lbnQkMTtcbmV4cG9ydHMuY3JlYXRlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQ7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnQgPSBjcmVhdGVFbGVtZW50JDE7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcnkgPSBjcmVhdGVGYWN0b3J5O1xuZXhwb3J0cy5jcmVhdGVSZWYgPSBjcmVhdGVSZWY7XG5leHBvcnRzLmZvcndhcmRSZWYgPSBmb3J3YXJkUmVmO1xuZXhwb3J0cy5pc1ZhbGlkRWxlbWVudCA9IGlzVmFsaWRFbGVtZW50O1xuZXhwb3J0cy5sYXp5ID0gbGF6eTtcbmV4cG9ydHMubWVtbyA9IG1lbW87XG5leHBvcnRzLnVzZUNhbGxiYWNrID0gdXNlQ2FsbGJhY2s7XG5leHBvcnRzLnVzZUNvbnRleHQgPSB1c2VDb250ZXh0O1xuZXhwb3J0cy51c2VEZWJ1Z1ZhbHVlID0gdXNlRGVidWdWYWx1ZTtcbmV4cG9ydHMudXNlRWZmZWN0ID0gdXNlRWZmZWN0O1xuZXhwb3J0cy51c2VJbXBlcmF0aXZlSGFuZGxlID0gdXNlSW1wZXJhdGl2ZUhhbmRsZTtcbmV4cG9ydHMudXNlTGF5b3V0RWZmZWN0ID0gdXNlTGF5b3V0RWZmZWN0O1xuZXhwb3J0cy51c2VNZW1vID0gdXNlTWVtbztcbmV4cG9ydHMudXNlUmVkdWNlciA9IHVzZVJlZHVjZXI7XG5leHBvcnRzLnVzZVJlZiA9IHVzZVJlZjtcbmV4cG9ydHMudXNlU3RhdGUgPSB1c2VTdGF0ZTtcbmV4cG9ydHMudmVyc2lvbiA9IFJlYWN0VmVyc2lvbjtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQsIEZhY2Vib29rLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEJTRC1zdHlsZSBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogaHR0cHM6Ly9yYXcuZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9tYXN0ZXIvTElDRU5TRSBmaWxlLiBBblxuICogYWRkaXRpb25hbCBncmFudCBvZiBwYXRlbnQgcmlnaHRzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUEFURU5UUyBmaWxlIGluXG4gKiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4gKi9cblxuIShmdW5jdGlvbihnbG9iYWwpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICB2YXIgaW5Nb2R1bGUgPSB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiO1xuICB2YXIgcnVudGltZSA9IGdsb2JhbC5yZWdlbmVyYXRvclJ1bnRpbWU7XG4gIGlmIChydW50aW1lKSB7XG4gICAgaWYgKGluTW9kdWxlKSB7XG4gICAgICAvLyBJZiByZWdlbmVyYXRvclJ1bnRpbWUgaXMgZGVmaW5lZCBnbG9iYWxseSBhbmQgd2UncmUgaW4gYSBtb2R1bGUsXG4gICAgICAvLyBtYWtlIHRoZSBleHBvcnRzIG9iamVjdCBpZGVudGljYWwgdG8gcmVnZW5lcmF0b3JSdW50aW1lLlxuICAgICAgbW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuICAgIH1cbiAgICAvLyBEb24ndCBib3RoZXIgZXZhbHVhdGluZyB0aGUgcmVzdCBvZiB0aGlzIGZpbGUgaWYgdGhlIHJ1bnRpbWUgd2FzXG4gICAgLy8gYWxyZWFkeSBkZWZpbmVkIGdsb2JhbGx5LlxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmluZSB0aGUgcnVudGltZSBnbG9iYWxseSAoYXMgZXhwZWN0ZWQgYnkgZ2VuZXJhdGVkIGNvZGUpIGFzIGVpdGhlclxuICAvLyBtb2R1bGUuZXhwb3J0cyAoaWYgd2UncmUgaW4gYSBtb2R1bGUpIG9yIGEgbmV3LCBlbXB0eSBvYmplY3QuXG4gIHJ1bnRpbWUgPSBnbG9iYWwucmVnZW5lcmF0b3JSdW50aW1lID0gaW5Nb2R1bGUgPyBtb2R1bGUuZXhwb3J0cyA6IHt9O1xuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIHJ1bnRpbWUud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIEl0ZXJhdG9yUHJvdG90eXBlW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICB2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG4gIHZhciBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSA9IGdldFByb3RvICYmIGdldFByb3RvKGdldFByb3RvKHZhbHVlcyhbXSkpKTtcbiAgaWYgKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlICYmXG4gICAgICBOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAhPT0gT3AgJiZcbiAgICAgIGhhc093bi5jYWxsKE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlLCBpdGVyYXRvclN5bWJvbCkpIHtcbiAgICAvLyBUaGlzIGVudmlyb25tZW50IGhhcyBhIG5hdGl2ZSAlSXRlcmF0b3JQcm90b3R5cGUlOyB1c2UgaXQgaW5zdGVhZFxuICAgIC8vIG9mIHRoZSBwb2x5ZmlsbC5cbiAgICBJdGVyYXRvclByb3RvdHlwZSA9IE5hdGl2ZUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG5cbiAgdmFyIEdwID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID1cbiAgICBHZW5lcmF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSk7XG4gIEdlbmVyYXRvckZ1bmN0aW9uLnByb3RvdHlwZSA9IEdwLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2VuZXJhdG9yRnVuY3Rpb247XG4gIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlW3RvU3RyaW5nVGFnU3ltYm9sXSA9XG4gICAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgcHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcnVudGltZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgdmFyIGN0b3IgPSB0eXBlb2YgZ2VuRnVuID09PSBcImZ1bmN0aW9uXCIgJiYgZ2VuRnVuLmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiBjdG9yXG4gICAgICA/IGN0b3IgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8XG4gICAgICAgIC8vIEZvciB0aGUgbmF0aXZlIEdlbmVyYXRvckZ1bmN0aW9uIGNvbnN0cnVjdG9yLCB0aGUgYmVzdCB3ZSBjYW5cbiAgICAgICAgLy8gZG8gaXMgdG8gY2hlY2sgaXRzIC5uYW1lIHByb3BlcnR5LlxuICAgICAgICAoY3Rvci5kaXNwbGF5TmFtZSB8fCBjdG9yLm5hbWUpID09PSBcIkdlbmVyYXRvckZ1bmN0aW9uXCJcbiAgICAgIDogZmFsc2U7XG4gIH07XG5cbiAgcnVudGltZS5tYXJrID0gZnVuY3Rpb24oZ2VuRnVuKSB7XG4gICAgaWYgKE9iamVjdC5zZXRQcm90b3R5cGVPZikge1xuICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKGdlbkZ1biwgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBnZW5GdW4uX19wcm90b19fID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGU7XG4gICAgICBpZiAoISh0b1N0cmluZ1RhZ1N5bWJvbCBpbiBnZW5GdW4pKSB7XG4gICAgICAgIGdlbkZ1blt0b1N0cmluZ1RhZ1N5bWJvbF0gPSBcIkdlbmVyYXRvckZ1bmN0aW9uXCI7XG4gICAgICB9XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIHJ1bnRpbWUuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGludm9rZShtZXRob2QsIGFyZywgcmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2goZ2VuZXJhdG9yW21ldGhvZF0sIGdlbmVyYXRvciwgYXJnKTtcbiAgICAgIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHJlamVjdChyZWNvcmQuYXJnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciByZXN1bHQgPSByZWNvcmQuYXJnO1xuICAgICAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBoYXNPd24uY2FsbCh2YWx1ZSwgXCJfX2F3YWl0XCIpKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZS5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJuZXh0XCIsIHZhbHVlLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgICAgaW52b2tlKFwidGhyb3dcIiwgZXJyLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLiBJZiB0aGUgUHJvbWlzZSBpcyByZWplY3RlZCwgaG93ZXZlciwgdGhlXG4gICAgICAgICAgLy8gcmVzdWx0IGZvciB0aGlzIGl0ZXJhdGlvbiB3aWxsIGJlIHJlamVjdGVkIHdpdGggdGhlIHNhbWVcbiAgICAgICAgICAvLyByZWFzb24uIE5vdGUgdGhhdCByZWplY3Rpb25zIG9mIHlpZWxkZWQgUHJvbWlzZXMgYXJlIG5vdFxuICAgICAgICAgIC8vIHRocm93biBiYWNrIGludG8gdGhlIGdlbmVyYXRvciBmdW5jdGlvbiwgYXMgaXMgdGhlIGNhc2VcbiAgICAgICAgICAvLyB3aGVuIGFuIGF3YWl0ZWQgUHJvbWlzZSBpcyByZWplY3RlZC4gVGhpcyBkaWZmZXJlbmNlIGluXG4gICAgICAgICAgLy8gYmVoYXZpb3IgYmV0d2VlbiB5aWVsZCBhbmQgYXdhaXQgaXMgaW1wb3J0YW50LCBiZWNhdXNlIGl0XG4gICAgICAgICAgLy8gYWxsb3dzIHRoZSBjb25zdW1lciB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRoIHRoZSB5aWVsZGVkXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIChzd2FsbG93IGl0IGFuZCBjb250aW51ZSwgbWFudWFsbHkgLnRocm93IGl0IGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBnZW5lcmF0b3IsIGFiYW5kb24gaXRlcmF0aW9uLCB3aGF0ZXZlcikuIFdpdGhcbiAgICAgICAgICAvLyBhd2FpdCwgYnkgY29udHJhc3QsIHRoZXJlIGlzIG5vIG9wcG9ydHVuaXR5IHRvIGV4YW1pbmUgdGhlXG4gICAgICAgICAgLy8gcmVqZWN0aW9uIHJlYXNvbiBvdXRzaWRlIHRoZSBnZW5lcmF0b3IgZnVuY3Rpb24sIHNvIHRoZVxuICAgICAgICAgIC8vIG9ubHkgb3B0aW9uIGlzIHRvIHRocm93IGl0IGZyb20gdGhlIGF3YWl0IGV4cHJlc3Npb24sIGFuZFxuICAgICAgICAgIC8vIGxldCB0aGUgZ2VuZXJhdG9yIGZ1bmN0aW9uIGhhbmRsZSB0aGUgZXhjZXB0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIHJlamVjdCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBnbG9iYWwucHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBnbG9iYWwucHJvY2Vzcy5kb21haW4pIHtcbiAgICAgIGludm9rZSA9IGdsb2JhbC5wcm9jZXNzLmRvbWFpbi5iaW5kKGludm9rZSk7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzUHJvbWlzZTtcblxuICAgIGZ1bmN0aW9uIGVucXVldWUobWV0aG9kLCBhcmcpIHtcbiAgICAgIGZ1bmN0aW9uIGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBBc3luY0l0ZXJhdG9yLnByb3RvdHlwZVthc3luY0l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgcnVudGltZS5Bc3luY0l0ZXJhdG9yID0gQXN5bmNJdGVyYXRvcjtcblxuICAvLyBOb3RlIHRoYXQgc2ltcGxlIGFzeW5jIGZ1bmN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgb24gdG9wIG9mXG4gIC8vIEFzeW5jSXRlcmF0b3Igb2JqZWN0czsgdGhleSBqdXN0IHJldHVybiBhIFByb21pc2UgZm9yIHRoZSB2YWx1ZSBvZlxuICAvLyB0aGUgZmluYWwgcmVzdWx0IHByb2R1Y2VkIGJ5IHRoZSBpdGVyYXRvci5cbiAgcnVudGltZS5hc3luYyA9IGZ1bmN0aW9uKGlubmVyRm4sIG91dGVyRm4sIHNlbGYsIHRyeUxvY3NMaXN0KSB7XG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpXG4gICAgKTtcblxuICAgIHJldHVybiBydW50aW1lLmlzR2VuZXJhdG9yRnVuY3Rpb24ob3V0ZXJGbilcbiAgICAgID8gaXRlciAvLyBJZiBvdXRlckZuIGlzIGEgZ2VuZXJhdG9yLCByZXR1cm4gdGhlIGZ1bGwgaXRlcmF0b3IuXG4gICAgICA6IGl0ZXIubmV4dCgpLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdC5kb25lID8gcmVzdWx0LnZhbHVlIDogaXRlci5uZXh0KCk7XG4gICAgICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCkge1xuICAgIHZhciBzdGF0ZSA9IEdlblN0YXRlU3VzcGVuZGVkU3RhcnQ7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gaW52b2tlKG1ldGhvZCwgYXJnKSB7XG4gICAgICBpZiAoc3RhdGUgPT09IEdlblN0YXRlRXhlY3V0aW5nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVDb21wbGV0ZWQpIHtcbiAgICAgICAgaWYgKG1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgdGhyb3cgYXJnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQmUgZm9yZ2l2aW5nLCBwZXIgMjUuMy4zLjMuMyBvZiB0aGUgc3BlYzpcbiAgICAgICAgLy8gaHR0cHM6Ly9wZW9wbGUubW96aWxsYS5vcmcvfmpvcmVuZG9yZmYvZXM2LWRyYWZ0Lmh0bWwjc2VjLWdlbmVyYXRvcnJlc3VtZVxuICAgICAgICByZXR1cm4gZG9uZVJlc3VsdCgpO1xuICAgICAgfVxuXG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IG1ldGhvZDtcbiAgICAgIGNvbnRleHQuYXJnID0gYXJnO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgZGVsZWdhdGUgPSBjb250ZXh0LmRlbGVnYXRlO1xuICAgICAgICBpZiAoZGVsZWdhdGUpIHtcbiAgICAgICAgICB2YXIgZGVsZWdhdGVSZXN1bHQgPSBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KTtcbiAgICAgICAgICBpZiAoZGVsZWdhdGVSZXN1bHQpIHtcbiAgICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCA9PT0gQ29udGludWVTZW50aW5lbCkgY29udGludWU7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGVSZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcIm5leHRcIikge1xuICAgICAgICAgIC8vIFNldHRpbmcgY29udGV4dC5fc2VudCBmb3IgbGVnYWN5IHN1cHBvcnQgb2YgQmFiZWwnc1xuICAgICAgICAgIC8vIGZ1bmN0aW9uLnNlbnQgaW1wbGVtZW50YXRpb24uXG4gICAgICAgICAgY29udGV4dC5zZW50ID0gY29udGV4dC5fc2VudCA9IGNvbnRleHQuYXJnO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydCkge1xuICAgICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAgIHRocm93IGNvbnRleHQuYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQuZGlzcGF0Y2hFeGNlcHRpb24oY29udGV4dC5hcmcpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoY29udGV4dC5tZXRob2QgPT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgICBjb250ZXh0LmFicnVwdChcInJldHVyblwiLCBjb250ZXh0LmFyZyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZSA9IEdlblN0YXRlRXhlY3V0aW5nO1xuXG4gICAgICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChpbm5lckZuLCBzZWxmLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcIm5vcm1hbFwiKSB7XG4gICAgICAgICAgLy8gSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBmcm9tIGlubmVyRm4sIHdlIGxlYXZlIHN0YXRlID09PVxuICAgICAgICAgIC8vIEdlblN0YXRlRXhlY3V0aW5nIGFuZCBsb29wIGJhY2sgZm9yIGFub3RoZXIgaW52b2NhdGlvbi5cbiAgICAgICAgICBzdGF0ZSA9IGNvbnRleHQuZG9uZVxuICAgICAgICAgICAgPyBHZW5TdGF0ZUNvbXBsZXRlZFxuICAgICAgICAgICAgOiBHZW5TdGF0ZVN1c3BlbmRlZFlpZWxkO1xuXG4gICAgICAgICAgaWYgKHJlY29yZC5hcmcgPT09IENvbnRpbnVlU2VudGluZWwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogcmVjb3JkLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IGNvbnRleHQuZG9uZVxuICAgICAgICAgIH07XG5cbiAgICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgc3RhdGUgPSBHZW5TdGF0ZUNvbXBsZXRlZDtcbiAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXhjZXB0aW9uIGJ5IGxvb3BpbmcgYmFjayBhcm91bmQgdG8gdGhlXG4gICAgICAgICAgLy8gY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZykgY2FsbCBhYm92ZS5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gQ2FsbCBkZWxlZ2F0ZS5pdGVyYXRvcltjb250ZXh0Lm1ldGhvZF0oY29udGV4dC5hcmcpIGFuZCBoYW5kbGUgdGhlXG4gIC8vIHJlc3VsdCwgZWl0aGVyIGJ5IHJldHVybmluZyBhIHsgdmFsdWUsIGRvbmUgfSByZXN1bHQgZnJvbSB0aGVcbiAgLy8gZGVsZWdhdGUgaXRlcmF0b3IsIG9yIGJ5IG1vZGlmeWluZyBjb250ZXh0Lm1ldGhvZCBhbmQgY29udGV4dC5hcmcsXG4gIC8vIHNldHRpbmcgY29udGV4dC5kZWxlZ2F0ZSB0byBudWxsLCBhbmQgcmV0dXJuaW5nIHRoZSBDb250aW51ZVNlbnRpbmVsLlxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGRlbGVnYXRlLCBjb250ZXh0KSB7XG4gICAgdmFyIG1ldGhvZCA9IGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXTtcbiAgICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEEgLnRocm93IG9yIC5yZXR1cm4gd2hlbiB0aGUgZGVsZWdhdGUgaXRlcmF0b3IgaGFzIG5vIC50aHJvd1xuICAgICAgLy8gbWV0aG9kIGFsd2F5cyB0ZXJtaW5hdGVzIHRoZSB5aWVsZCogbG9vcC5cbiAgICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICBpZiAoZGVsZWdhdGUuaXRlcmF0b3IucmV0dXJuKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGhhcyBhIHJldHVybiBtZXRob2QsIGdpdmUgaXQgYVxuICAgICAgICAgIC8vIGNoYW5jZSB0byBjbGVhbiB1cC5cbiAgICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwicmV0dXJuXCI7XG4gICAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbWF5YmVJbnZva2VEZWxlZ2F0ZShkZWxlZ2F0ZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgLy8gSWYgbWF5YmVJbnZva2VEZWxlZ2F0ZShjb250ZXh0KSBjaGFuZ2VkIGNvbnRleHQubWV0aG9kIGZyb21cbiAgICAgICAgICAgIC8vIFwicmV0dXJuXCIgdG8gXCJ0aHJvd1wiLCBsZXQgdGhhdCBvdmVycmlkZSB0aGUgVHlwZUVycm9yIGJlbG93LlxuICAgICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcIlRoZSBpdGVyYXRvciBkb2VzIG5vdCBwcm92aWRlIGEgJ3Rocm93JyBtZXRob2RcIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciByZWNvcmQgPSB0cnlDYXRjaChtZXRob2QsIGRlbGVnYXRlLml0ZXJhdG9yLCBjb250ZXh0LmFyZyk7XG5cbiAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgY29udGV4dC5tZXRob2QgPSBcInRocm93XCI7XG4gICAgICBjb250ZXh0LmFyZyA9IHJlY29yZC5hcmc7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIHZhciBpbmZvID0gcmVjb3JkLmFyZztcblxuICAgIGlmICghIGluZm8pIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIik7XG4gICAgICBjb250ZXh0LmRlbGVnYXRlID0gbnVsbDtcbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cblxuICAgIGlmIChpbmZvLmRvbmUpIHtcbiAgICAgIC8vIEFzc2lnbiB0aGUgcmVzdWx0IG9mIHRoZSBmaW5pc2hlZCBkZWxlZ2F0ZSB0byB0aGUgdGVtcG9yYXJ5XG4gICAgICAvLyB2YXJpYWJsZSBzcGVjaWZpZWQgYnkgZGVsZWdhdGUucmVzdWx0TmFtZSAoc2VlIGRlbGVnYXRlWWllbGQpLlxuICAgICAgY29udGV4dFtkZWxlZ2F0ZS5yZXN1bHROYW1lXSA9IGluZm8udmFsdWU7XG5cbiAgICAgIC8vIFJlc3VtZSBleGVjdXRpb24gYXQgdGhlIGRlc2lyZWQgbG9jYXRpb24gKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHQubmV4dCA9IGRlbGVnYXRlLm5leHRMb2M7XG5cbiAgICAgIC8vIElmIGNvbnRleHQubWV0aG9kIHdhcyBcInRocm93XCIgYnV0IHRoZSBkZWxlZ2F0ZSBoYW5kbGVkIHRoZVxuICAgICAgLy8gZXhjZXB0aW9uLCBsZXQgdGhlIG91dGVyIGdlbmVyYXRvciBwcm9jZWVkIG5vcm1hbGx5LiBJZlxuICAgICAgLy8gY29udGV4dC5tZXRob2Qgd2FzIFwibmV4dFwiLCBmb3JnZXQgY29udGV4dC5hcmcgc2luY2UgaXQgaGFzIGJlZW5cbiAgICAgIC8vIFwiY29uc3VtZWRcIiBieSB0aGUgZGVsZWdhdGUgaXRlcmF0b3IuIElmIGNvbnRleHQubWV0aG9kIHdhc1xuICAgICAgLy8gXCJyZXR1cm5cIiwgYWxsb3cgdGhlIG9yaWdpbmFsIC5yZXR1cm4gY2FsbCB0byBjb250aW51ZSBpbiB0aGVcbiAgICAgIC8vIG91dGVyIGdlbmVyYXRvci5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCAhPT0gXCJyZXR1cm5cIikge1xuICAgICAgICBjb250ZXh0Lm1ldGhvZCA9IFwibmV4dFwiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZS15aWVsZCB0aGUgcmVzdWx0IHJldHVybmVkIGJ5IHRoZSBkZWxlZ2F0ZSBtZXRob2QuXG4gICAgICByZXR1cm4gaW5mbztcbiAgICB9XG5cbiAgICAvLyBUaGUgZGVsZWdhdGUgaXRlcmF0b3IgaXMgZmluaXNoZWQsIHNvIGZvcmdldCBpdCBhbmQgY29udGludWUgd2l0aFxuICAgIC8vIHRoZSBvdXRlciBnZW5lcmF0b3IuXG4gICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gIH1cblxuICAvLyBEZWZpbmUgR2VuZXJhdG9yLnByb3RvdHlwZS57bmV4dCx0aHJvdyxyZXR1cm59IGluIHRlcm1zIG9mIHRoZVxuICAvLyB1bmlmaWVkIC5faW52b2tlIGhlbHBlciBtZXRob2QuXG4gIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyhHcCk7XG5cbiAgR3BbdG9TdHJpbmdUYWdTeW1ib2xdID0gXCJHZW5lcmF0b3JcIjtcblxuICAvLyBBIEdlbmVyYXRvciBzaG91bGQgYWx3YXlzIHJldHVybiBpdHNlbGYgYXMgdGhlIGl0ZXJhdG9yIG9iamVjdCB3aGVuIHRoZVxuICAvLyBAQGl0ZXJhdG9yIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbiBpdC4gU29tZSBicm93c2VycycgaW1wbGVtZW50YXRpb25zIG9mIHRoZVxuICAvLyBpdGVyYXRvciBwcm90b3R5cGUgY2hhaW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50IHRoaXMsIGNhdXNpbmcgdGhlIEdlbmVyYXRvclxuICAvLyBvYmplY3QgdG8gbm90IGJlIHJldHVybmVkIGZyb20gdGhpcyBjYWxsLiBUaGlzIGVuc3VyZXMgdGhhdCBkb2Vzbid0IGhhcHBlbi5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWdlbmVyYXRvci9pc3N1ZXMvMjc0IGZvciBtb3JlIGRldGFpbHMuXG4gIEdwW2l0ZXJhdG9yU3ltYm9sXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIEdwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH07XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBydW50aW1lLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgcnVudGltZS52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcbn0pKFxuICAvLyBBbW9uZyB0aGUgdmFyaW91cyB0cmlja3MgZm9yIG9idGFpbmluZyBhIHJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsXG4gIC8vIG9iamVjdCwgdGhpcyBzZWVtcyB0byBiZSB0aGUgbW9zdCByZWxpYWJsZSB0ZWNobmlxdWUgdGhhdCBkb2VzIG5vdFxuICAvLyB1c2UgaW5kaXJlY3QgZXZhbCAod2hpY2ggdmlvbGF0ZXMgQ29udGVudCBTZWN1cml0eSBQb2xpY3kpLlxuICB0eXBlb2YgZ2xvYmFsID09PSBcIm9iamVjdFwiID8gZ2xvYmFsIDpcbiAgdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiA/IHdpbmRvdyA6XG4gIHR5cGVvZiBzZWxmID09PSBcIm9iamVjdFwiID8gc2VsZiA6IHRoaXNcbik7XG4iLCIvKiogQGxpY2Vuc2UgUmVhY3QgdjAuMjAuMlxuICogc2NoZWR1bGVyLXRyYWNpbmcuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG52YXIgREVGQVVMVF9USFJFQURfSUQgPSAwOyAvLyBDb3VudGVycyB1c2VkIHRvIGdlbmVyYXRlIHVuaXF1ZSBJRHMuXG5cbnZhciBpbnRlcmFjdGlvbklEQ291bnRlciA9IDA7XG52YXIgdGhyZWFkSURDb3VudGVyID0gMDsgLy8gU2V0IG9mIGN1cnJlbnRseSB0cmFjZWQgaW50ZXJhY3Rpb25zLlxuLy8gSW50ZXJhY3Rpb25zIFwic3RhY2tcIuKAk1xuLy8gTWVhbmluZyB0aGF0IG5ld2x5IHRyYWNlZCBpbnRlcmFjdGlvbnMgYXJlIGFwcGVuZGVkIHRvIHRoZSBwcmV2aW91c2x5IGFjdGl2ZSBzZXQuXG4vLyBXaGVuIGFuIGludGVyYWN0aW9uIGdvZXMgb3V0IG9mIHNjb3BlLCB0aGUgcHJldmlvdXMgc2V0IChpZiBhbnkpIGlzIHJlc3RvcmVkLlxuXG5leHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0gbnVsbDsgLy8gTGlzdGVuZXIocykgdG8gbm90aWZ5IHdoZW4gaW50ZXJhY3Rpb25zIGJlZ2luIGFuZCBlbmQuXG5cbmV4cG9ydHMuX19zdWJzY3JpYmVyUmVmID0gbnVsbDtcblxue1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmID0ge1xuICAgIGN1cnJlbnQ6IG5ldyBTZXQoKVxuICB9O1xuICBleHBvcnRzLl9fc3Vic2NyaWJlclJlZiA9IHtcbiAgICBjdXJyZW50OiBudWxsXG4gIH07XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9jbGVhcihjYWxsYmFjaykge1xuXG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50O1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBuZXcgU2V0KCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuICB9XG59XG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50KCkge1xuICB7XG4gICAgcmV0dXJuIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfZ2V0VGhyZWFkSUQoKSB7XG4gIHJldHVybiArK3RocmVhZElEQ291bnRlcjtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3RyYWNlKG5hbWUsIHRpbWVzdGFtcCwgY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgYXJndW1lbnRzWzNdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbM10gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgaW50ZXJhY3Rpb24gPSB7XG4gICAgX19jb3VudDogMSxcbiAgICBpZDogaW50ZXJhY3Rpb25JRENvdW50ZXIrKyxcbiAgICBuYW1lOiBuYW1lLFxuICAgIHRpbWVzdGFtcDogdGltZXN0YW1wXG4gIH07XG4gIHZhciBwcmV2SW50ZXJhY3Rpb25zID0gZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50OyAvLyBUcmFjZWQgaW50ZXJhY3Rpb25zIHNob3VsZCBzdGFjay9hY2N1bXVsYXRlLlxuICAvLyBUbyBkbyB0aGF0LCBjbG9uZSB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFRoZSBwcmV2aW91cyBzZXQgd2lsbCBiZSByZXN0b3JlZCB1cG9uIGNvbXBsZXRpb24uXG5cbiAgdmFyIGludGVyYWN0aW9ucyA9IG5ldyBTZXQocHJldkludGVyYWN0aW9ucyk7XG4gIGludGVyYWN0aW9ucy5hZGQoaW50ZXJhY3Rpb24pO1xuICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBpbnRlcmFjdGlvbnM7XG4gIHZhciBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcbiAgdmFyIHJldHVyblZhbHVlO1xuXG4gIHRyeSB7XG4gICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblRyYWNlZChpbnRlcmFjdGlvbik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya1N0YXJ0ZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2soKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudCA9IHByZXZJbnRlcmFjdGlvbnM7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdG9wcGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07IC8vIElmIG5vIGFzeW5jIHdvcmsgd2FzIHNjaGVkdWxlZCBmb3IgdGhpcyBpbnRlcmFjdGlvbixcbiAgICAgICAgICAvLyBOb3RpZnkgc3Vic2NyaWJlcnMgdGhhdCBpdCdzIGNvbXBsZXRlZC5cblxuICAgICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsICYmIGludGVyYWN0aW9uLl9fY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXR1cm5WYWx1ZTtcbn1cbmZ1bmN0aW9uIHVuc3RhYmxlX3dyYXAoY2FsbGJhY2spIHtcbiAgdmFyIHRocmVhZElEID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBERUZBVUxUX1RIUkVBRF9JRDtcblxuICB2YXIgd3JhcHBlZEludGVyYWN0aW9ucyA9IGV4cG9ydHMuX19pbnRlcmFjdGlvbnNSZWYuY3VycmVudDtcbiAgdmFyIHN1YnNjcmliZXIgPSBleHBvcnRzLl9fc3Vic2NyaWJlclJlZi5jdXJyZW50O1xuXG4gIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQod3JhcHBlZEludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICB9IC8vIFVwZGF0ZSB0aGUgcGVuZGluZyBhc3luYyB3b3JrIGNvdW50IGZvciB0aGUgY3VycmVudCBpbnRlcmFjdGlvbnMuXG4gIC8vIFVwZGF0ZSBhZnRlciBjYWxsaW5nIHN1YnNjcmliZXJzIGluIGNhc2Ugb2YgZXJyb3IuXG5cblxuICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgaW50ZXJhY3Rpb24uX19jb3VudCsrO1xuICB9KTtcbiAgdmFyIGhhc1J1biA9IGZhbHNlO1xuXG4gIGZ1bmN0aW9uIHdyYXBwZWQoKSB7XG4gICAgdmFyIHByZXZJbnRlcmFjdGlvbnMgPSBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQ7XG4gICAgZXhwb3J0cy5fX2ludGVyYWN0aW9uc1JlZi5jdXJyZW50ID0gd3JhcHBlZEludGVyYWN0aW9ucztcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICB2YXIgcmV0dXJuVmFsdWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChzdWJzY3JpYmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgICAgfVxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm5WYWx1ZSA9IGNhbGxiYWNrLmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBleHBvcnRzLl9faW50ZXJhY3Rpb25zUmVmLmN1cnJlbnQgPSBwcmV2SW50ZXJhY3Rpb25zO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZCh3cmFwcGVkSW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKCFoYXNSdW4pIHtcbiAgICAgICAgLy8gV2Ugb25seSBleHBlY3QgYSB3cmFwcGVkIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIG9uY2UsXG4gICAgICAgIC8vIEJ1dCBpbiB0aGUgZXZlbnQgdGhhdCBpdCdzIGV4ZWN1dGVkIG1vcmUgdGhhbiBvbmNl4oCTXG4gICAgICAgIC8vIE9ubHkgZGVjcmVtZW50IHRoZSBvdXRzdGFuZGluZyBpbnRlcmFjdGlvbiBjb3VudHMgb25jZS5cbiAgICAgICAgaGFzUnVuID0gdHJ1ZTsgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAgIC8vIElmIHRoaXMgd2FzIHRoZSBsYXN0IHNjaGVkdWxlZCBhc3luYyB3b3JrIGZvciBhbnkgb2YgdGhlbSxcbiAgICAgICAgLy8gTWFyayB0aGVtIGFzIGNvbXBsZXRlZC5cblxuICAgICAgICB3cmFwcGVkSW50ZXJhY3Rpb25zLmZvckVhY2goZnVuY3Rpb24gKGludGVyYWN0aW9uKSB7XG4gICAgICAgICAgaW50ZXJhY3Rpb24uX19jb3VudC0tO1xuXG4gICAgICAgICAgaWYgKHN1YnNjcmliZXIgIT09IG51bGwgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB3cmFwcGVkLmNhbmNlbCA9IGZ1bmN0aW9uIGNhbmNlbCgpIHtcbiAgICBzdWJzY3JpYmVyID0gZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc3Vic2NyaWJlciAhPT0gbnVsbCkge1xuICAgICAgICBzdWJzY3JpYmVyLm9uV29ya0NhbmNlbGVkKHdyYXBwZWRJbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgLy8gVXBkYXRlIHBlbmRpbmcgYXN5bmMgY291bnRzIGZvciBhbGwgd3JhcHBlZCBpbnRlcmFjdGlvbnMuXG4gICAgICAvLyBJZiB0aGlzIHdhcyB0aGUgbGFzdCBzY2hlZHVsZWQgYXN5bmMgd29yayBmb3IgYW55IG9mIHRoZW0sXG4gICAgICAvLyBNYXJrIHRoZW0gYXMgY29tcGxldGVkLlxuICAgICAgd3JhcHBlZEludGVyYWN0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uIChpbnRlcmFjdGlvbikge1xuICAgICAgICBpbnRlcmFjdGlvbi5fX2NvdW50LS07XG5cbiAgICAgICAgaWYgKHN1YnNjcmliZXIgJiYgaW50ZXJhY3Rpb24uX19jb3VudCA9PT0gMCkge1xuICAgICAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHdyYXBwZWQ7XG59XG5cbnZhciBzdWJzY3JpYmVycyA9IG51bGw7XG5cbntcbiAgc3Vic2NyaWJlcnMgPSBuZXcgU2V0KCk7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3N1YnNjcmliZShzdWJzY3JpYmVyKSB7XG4gIHtcbiAgICBzdWJzY3JpYmVycy5hZGQoc3Vic2NyaWJlcik7XG5cbiAgICBpZiAoc3Vic2NyaWJlcnMuc2l6ZSA9PT0gMSkge1xuICAgICAgZXhwb3J0cy5fX3N1YnNjcmliZXJSZWYuY3VycmVudCA9IHtcbiAgICAgICAgb25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQ6IG9uSW50ZXJhY3Rpb25TY2hlZHVsZWRXb3JrQ29tcGxldGVkLFxuICAgICAgICBvbkludGVyYWN0aW9uVHJhY2VkOiBvbkludGVyYWN0aW9uVHJhY2VkLFxuICAgICAgICBvbldvcmtDYW5jZWxlZDogb25Xb3JrQ2FuY2VsZWQsXG4gICAgICAgIG9uV29ya1NjaGVkdWxlZDogb25Xb3JrU2NoZWR1bGVkLFxuICAgICAgICBvbldvcmtTdGFydGVkOiBvbldvcmtTdGFydGVkLFxuICAgICAgICBvbldvcmtTdG9wcGVkOiBvbldvcmtTdG9wcGVkXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuZnVuY3Rpb24gdW5zdGFibGVfdW5zdWJzY3JpYmUoc3Vic2NyaWJlcikge1xuICB7XG4gICAgc3Vic2NyaWJlcnMuZGVsZXRlKHN1YnNjcmliZXIpO1xuXG4gICAgaWYgKHN1YnNjcmliZXJzLnNpemUgPT09IDApIHtcbiAgICAgIGV4cG9ydHMuX19zdWJzY3JpYmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbkludGVyYWN0aW9uVHJhY2VkKGludGVyYWN0aW9uKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkludGVyYWN0aW9uU2NoZWR1bGVkV29ya0NvbXBsZXRlZChpbnRlcmFjdGlvbikge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25JbnRlcmFjdGlvblNjaGVkdWxlZFdvcmtDb21wbGV0ZWQoaW50ZXJhY3Rpb24pO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1NjaGVkdWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTY2hlZHVsZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmICghZGlkQ2F0Y2hFcnJvcikge1xuICAgICAgICBkaWRDYXRjaEVycm9yID0gdHJ1ZTtcbiAgICAgICAgY2F1Z2h0RXJyb3IgPSBlcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGlmIChkaWRDYXRjaEVycm9yKSB7XG4gICAgdGhyb3cgY2F1Z2h0RXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gb25Xb3JrU3RhcnRlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtTdGFydGVkKGludGVyYWN0aW9ucywgdGhyZWFkSUQpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoIWRpZENhdGNoRXJyb3IpIHtcbiAgICAgICAgZGlkQ2F0Y2hFcnJvciA9IHRydWU7XG4gICAgICAgIGNhdWdodEVycm9yID0gZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBpZiAoZGlkQ2F0Y2hFcnJvcikge1xuICAgIHRocm93IGNhdWdodEVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIG9uV29ya1N0b3BwZWQoaW50ZXJhY3Rpb25zLCB0aHJlYWRJRCkge1xuICB2YXIgZGlkQ2F0Y2hFcnJvciA9IGZhbHNlO1xuICB2YXIgY2F1Z2h0RXJyb3IgPSBudWxsO1xuICBzdWJzY3JpYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHN1YnNjcmliZXIub25Xb3JrU3RvcHBlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBvbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKSB7XG4gIHZhciBkaWRDYXRjaEVycm9yID0gZmFsc2U7XG4gIHZhciBjYXVnaHRFcnJvciA9IG51bGw7XG4gIHN1YnNjcmliZXJzLmZvckVhY2goZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICB0cnkge1xuICAgICAgc3Vic2NyaWJlci5vbldvcmtDYW5jZWxlZChpbnRlcmFjdGlvbnMsIHRocmVhZElEKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKCFkaWRDYXRjaEVycm9yKSB7XG4gICAgICAgIGRpZENhdGNoRXJyb3IgPSB0cnVlO1xuICAgICAgICBjYXVnaHRFcnJvciA9IGVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgaWYgKGRpZENhdGNoRXJyb3IpIHtcbiAgICB0aHJvdyBjYXVnaHRFcnJvcjtcbiAgfVxufVxuXG5leHBvcnRzLnVuc3RhYmxlX2NsZWFyID0gdW5zdGFibGVfY2xlYXI7XG5leHBvcnRzLnVuc3RhYmxlX2dldEN1cnJlbnQgPSB1bnN0YWJsZV9nZXRDdXJyZW50O1xuZXhwb3J0cy51bnN0YWJsZV9nZXRUaHJlYWRJRCA9IHVuc3RhYmxlX2dldFRocmVhZElEO1xuZXhwb3J0cy51bnN0YWJsZV9zdWJzY3JpYmUgPSB1bnN0YWJsZV9zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3RyYWNlID0gdW5zdGFibGVfdHJhY2U7XG5leHBvcnRzLnVuc3RhYmxlX3Vuc3Vic2NyaWJlID0gdW5zdGFibGVfdW5zdWJzY3JpYmU7XG5leHBvcnRzLnVuc3RhYmxlX3dyYXAgPSB1bnN0YWJsZV93cmFwO1xuICB9KSgpO1xufVxuIiwiLyoqIEBsaWNlbnNlIFJlYWN0IHYwLjIwLjJcbiAqIHNjaGVkdWxlci5kZXZlbG9wbWVudC5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBlbmFibGVTY2hlZHVsZXJEZWJ1Z2dpbmcgPSBmYWxzZTtcbnZhciBlbmFibGVQcm9maWxpbmcgPSBmYWxzZTtcblxudmFyIHJlcXVlc3RIb3N0Q2FsbGJhY2s7XG52YXIgcmVxdWVzdEhvc3RUaW1lb3V0O1xudmFyIGNhbmNlbEhvc3RUaW1lb3V0O1xudmFyIHJlcXVlc3RQYWludDtcbnZhciBoYXNQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcblxuaWYgKGhhc1BlcmZvcm1hbmNlTm93KSB7XG4gIHZhciBsb2NhbFBlcmZvcm1hbmNlID0gcGVyZm9ybWFuY2U7XG5cbiAgZXhwb3J0cy51bnN0YWJsZV9ub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGxvY2FsUGVyZm9ybWFuY2Uubm93KCk7XG4gIH07XG59IGVsc2Uge1xuICB2YXIgbG9jYWxEYXRlID0gRGF0ZTtcbiAgdmFyIGluaXRpYWxUaW1lID0gbG9jYWxEYXRlLm5vdygpO1xuXG4gIGV4cG9ydHMudW5zdGFibGVfbm93ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBsb2NhbERhdGUubm93KCkgLSBpbml0aWFsVGltZTtcbiAgfTtcbn1cblxuaWYgKCAvLyBJZiBTY2hlZHVsZXIgcnVucyBpbiBhIG5vbi1ET00gZW52aXJvbm1lbnQsIGl0IGZhbGxzIGJhY2sgdG8gYSBuYWl2ZVxuLy8gaW1wbGVtZW50YXRpb24gdXNpbmcgc2V0VGltZW91dC5cbnR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8IC8vIENoZWNrIGlmIE1lc3NhZ2VDaGFubmVsIGlzIHN1cHBvcnRlZCwgdG9vLlxudHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAnZnVuY3Rpb24nKSB7XG4gIC8vIElmIHRoaXMgYWNjaWRlbnRhbGx5IGdldHMgaW1wb3J0ZWQgaW4gYSBub24tYnJvd3NlciBlbnZpcm9ubWVudCwgZS5nLiBKYXZhU2NyaXB0Q29yZSxcbiAgLy8gZmFsbGJhY2sgdG8gYSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgdmFyIF9jYWxsYmFjayA9IG51bGw7XG4gIHZhciBfdGltZW91dElEID0gbnVsbDtcblxuICB2YXIgX2ZsdXNoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKF9jYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgdmFyIGhhc1JlbWFpbmluZ1RpbWUgPSB0cnVlO1xuXG4gICAgICAgIF9jYWxsYmFjayhoYXNSZW1haW5pbmdUaW1lLCBjdXJyZW50VGltZSk7XG5cbiAgICAgICAgX2NhbGxiYWNrID0gbnVsbDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgc2V0VGltZW91dChfZmx1c2hDYWxsYmFjaywgMCk7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJlcXVlc3RIb3N0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoY2IpIHtcbiAgICBpZiAoX2NhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICAvLyBQcm90ZWN0IGFnYWluc3QgcmUtZW50cmFuY3kuXG4gICAgICBzZXRUaW1lb3V0KHJlcXVlc3RIb3N0Q2FsbGJhY2ssIDAsIGNiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX2NhbGxiYWNrID0gY2I7XG4gICAgICBzZXRUaW1lb3V0KF9mbHVzaENhbGxiYWNrLCAwKTtcbiAgICB9XG4gIH07XG5cbiAgcmVxdWVzdEhvc3RUaW1lb3V0ID0gZnVuY3Rpb24gKGNiLCBtcykge1xuICAgIF90aW1lb3V0SUQgPSBzZXRUaW1lb3V0KGNiLCBtcyk7XG4gIH07XG5cbiAgY2FuY2VsSG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgY2xlYXJUaW1lb3V0KF90aW1lb3V0SUQpO1xuICB9O1xuXG4gIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIHJlcXVlc3RQYWludCA9IGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoKSB7fTtcbn0gZWxzZSB7XG4gIC8vIENhcHR1cmUgbG9jYWwgcmVmZXJlbmNlcyB0byBuYXRpdmUgQVBJcywgaW4gY2FzZSBhIHBvbHlmaWxsIG92ZXJyaWRlcyB0aGVtLlxuICB2YXIgX3NldFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dDtcbiAgdmFyIF9jbGVhclRpbWVvdXQgPSB3aW5kb3cuY2xlYXJUaW1lb3V0O1xuXG4gIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBUT0RPOiBTY2hlZHVsZXIgbm8gbG9uZ2VyIHJlcXVpcmVzIHRoZXNlIG1ldGhvZHMgdG8gYmUgcG9seWZpbGxlZC4gQnV0XG4gICAgLy8gbWF5YmUgd2Ugd2FudCB0byBjb250aW51ZSB3YXJuaW5nIGlmIHRoZXkgZG9uJ3QgZXhpc3QsIHRvIHByZXNlcnZlIHRoZVxuICAgIC8vIG9wdGlvbiB0byByZWx5IG9uIGl0IGluIHRoZSBmdXR1cmU/XG4gICAgdmFyIHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7XG4gICAgdmFyIGNhbmNlbEFuaW1hdGlvbkZyYW1lID0gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuXG4gICAgaWYgKHR5cGVvZiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFVzaW5nIGNvbnNvbGVbJ2Vycm9yJ10gdG8gZXZhZGUgQmFiZWwgYW5kIEVTTGludFxuICAgICAgY29uc29sZVsnZXJyb3InXShcIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbmNlbEFuaW1hdGlvbkZyYW1lICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oXCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBcIiArICdNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhICcgKyAncG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9yZWFjdC1wb2x5ZmlsbHMnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgdmFyIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gIHZhciB0YXNrVGltZW91dElEID0gLTE7IC8vIFNjaGVkdWxlciBwZXJpb2RpY2FsbHkgeWllbGRzIGluIGNhc2UgdGhlcmUgaXMgb3RoZXIgd29yayBvbiB0aGUgbWFpblxuICAvLyB0aHJlYWQsIGxpa2UgdXNlciBldmVudHMuIEJ5IGRlZmF1bHQsIGl0IHlpZWxkcyBtdWx0aXBsZSB0aW1lcyBwZXIgZnJhbWUuXG4gIC8vIEl0IGRvZXMgbm90IGF0dGVtcHQgdG8gYWxpZ24gd2l0aCBmcmFtZSBib3VuZGFyaWVzLCBzaW5jZSBtb3N0IHRhc2tzIGRvbid0XG4gIC8vIG5lZWQgdG8gYmUgZnJhbWUgYWxpZ25lZDsgZm9yIHRob3NlIHRoYXQgZG8sIHVzZSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuXG5cbiAgdmFyIHlpZWxkSW50ZXJ2YWwgPSA1O1xuICB2YXIgZGVhZGxpbmUgPSAwOyAvLyBUT0RPOiBNYWtlIHRoaXMgY29uZmlndXJhYmxlXG5cbiAge1xuICAgIC8vIGBpc0lucHV0UGVuZGluZ2AgaXMgbm90IGF2YWlsYWJsZS4gU2luY2Ugd2UgaGF2ZSBubyB3YXkgb2Yga25vd2luZyBpZlxuICAgIC8vIHRoZXJlJ3MgcGVuZGluZyBpbnB1dCwgYWx3YXlzIHlpZWxkIGF0IHRoZSBlbmQgb2YgdGhlIGZyYW1lLlxuICAgIGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZXhwb3J0cy51bnN0YWJsZV9ub3coKSA+PSBkZWFkbGluZTtcbiAgICB9OyAvLyBTaW5jZSB3ZSB5aWVsZCBldmVyeSBmcmFtZSByZWdhcmRsZXNzLCBgcmVxdWVzdFBhaW50YCBoYXMgbm8gZWZmZWN0LlxuXG5cbiAgICByZXF1ZXN0UGFpbnQgPSBmdW5jdGlvbiAoKSB7fTtcbiAgfVxuXG4gIGV4cG9ydHMudW5zdGFibGVfZm9yY2VGcmFtZVJhdGUgPSBmdW5jdGlvbiAoZnBzKSB7XG4gICAgaWYgKGZwcyA8IDAgfHwgZnBzID4gMTI1KSB7XG4gICAgICAvLyBVc2luZyBjb25zb2xlWydlcnJvciddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ2Vycm9yJ10oJ2ZvcmNlRnJhbWVSYXRlIHRha2VzIGEgcG9zaXRpdmUgaW50IGJldHdlZW4gMCBhbmQgMTI1LCAnICsgJ2ZvcmNpbmcgZnJhbWUgcmF0ZXMgaGlnaGVyIHRoYW4gMTI1IGZwcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGZwcyA+IDApIHtcbiAgICAgIHlpZWxkSW50ZXJ2YWwgPSBNYXRoLmZsb29yKDEwMDAgLyBmcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZXNldCB0aGUgZnJhbWVyYXRlXG4gICAgICB5aWVsZEludGVydmFsID0gNTtcbiAgICB9XG4gIH07XG5cbiAgdmFyIHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2NoZWR1bGVkSG9zdENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpOyAvLyBZaWVsZCBhZnRlciBgeWllbGRJbnRlcnZhbGAgbXMsIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgd2UgYXJlIGluIHRoZSB2c3luY1xuICAgICAgLy8gY3ljbGUuIFRoaXMgbWVhbnMgdGhlcmUncyBhbHdheXMgdGltZSByZW1haW5pbmcgYXQgdGhlIGJlZ2lubmluZyBvZlxuICAgICAgLy8gdGhlIG1lc3NhZ2UgZXZlbnQuXG5cbiAgICAgIGRlYWRsaW5lID0gY3VycmVudFRpbWUgKyB5aWVsZEludGVydmFsO1xuICAgICAgdmFyIGhhc1RpbWVSZW1haW5pbmcgPSB0cnVlO1xuXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgaGFzTW9yZVdvcmsgPSBzY2hlZHVsZWRIb3N0Q2FsbGJhY2soaGFzVGltZVJlbWFpbmluZywgY3VycmVudFRpbWUpO1xuXG4gICAgICAgIGlmICghaGFzTW9yZVdvcmspIHtcbiAgICAgICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IGZhbHNlO1xuICAgICAgICAgIHNjaGVkdWxlZEhvc3RDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUncyBtb3JlIHdvcmssIHNjaGVkdWxlIHRoZSBuZXh0IG1lc3NhZ2UgZXZlbnQgYXQgdGhlIGVuZFxuICAgICAgICAgIC8vIG9mIHRoZSBwcmVjZWRpbmcgb25lLlxuICAgICAgICAgIHBvcnQucG9zdE1lc3NhZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIElmIGEgc2NoZWR1bGVyIHRhc2sgdGhyb3dzLCBleGl0IHRoZSBjdXJyZW50IGJyb3dzZXIgdGFzayBzbyB0aGVcbiAgICAgICAgLy8gZXJyb3IgY2FuIGJlIG9ic2VydmVkLlxuICAgICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaXNNZXNzYWdlTG9vcFJ1bm5pbmcgPSBmYWxzZTtcbiAgICB9IC8vIFlpZWxkaW5nIHRvIHRoZSBicm93c2VyIHdpbGwgZ2l2ZSBpdCBhIGNoYW5jZSB0byBwYWludCwgc28gd2UgY2FuXG4gIH07XG5cbiAgdmFyIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgdmFyIHBvcnQgPSBjaGFubmVsLnBvcnQyO1xuICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IHBlcmZvcm1Xb3JrVW50aWxEZWFkbGluZTtcblxuICByZXF1ZXN0SG9zdENhbGxiYWNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgc2NoZWR1bGVkSG9zdENhbGxiYWNrID0gY2FsbGJhY2s7XG5cbiAgICBpZiAoIWlzTWVzc2FnZUxvb3BSdW5uaW5nKSB7XG4gICAgICBpc01lc3NhZ2VMb29wUnVubmluZyA9IHRydWU7XG4gICAgICBwb3J0LnBvc3RNZXNzYWdlKG51bGwpO1xuICAgIH1cbiAgfTtcblxuICByZXF1ZXN0SG9zdFRpbWVvdXQgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIG1zKSB7XG4gICAgdGFza1RpbWVvdXRJRCA9IF9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbGxiYWNrKGV4cG9ydHMudW5zdGFibGVfbm93KCkpO1xuICAgIH0sIG1zKTtcbiAgfTtcblxuICBjYW5jZWxIb3N0VGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICBfY2xlYXJUaW1lb3V0KHRhc2tUaW1lb3V0SUQpO1xuXG4gICAgdGFza1RpbWVvdXRJRCA9IC0xO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwdXNoKGhlYXAsIG5vZGUpIHtcbiAgdmFyIGluZGV4ID0gaGVhcC5sZW5ndGg7XG4gIGhlYXAucHVzaChub2RlKTtcbiAgc2lmdFVwKGhlYXAsIG5vZGUsIGluZGV4KTtcbn1cbmZ1bmN0aW9uIHBlZWsoaGVhcCkge1xuICB2YXIgZmlyc3QgPSBoZWFwWzBdO1xuICByZXR1cm4gZmlyc3QgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBmaXJzdDtcbn1cbmZ1bmN0aW9uIHBvcChoZWFwKSB7XG4gIHZhciBmaXJzdCA9IGhlYXBbMF07XG5cbiAgaWYgKGZpcnN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgbGFzdCA9IGhlYXAucG9wKCk7XG5cbiAgICBpZiAobGFzdCAhPT0gZmlyc3QpIHtcbiAgICAgIGhlYXBbMF0gPSBsYXN0O1xuICAgICAgc2lmdERvd24oaGVhcCwgbGFzdCwgMCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZnRVcChoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICB2YXIgcGFyZW50SW5kZXggPSBpbmRleCAtIDEgPj4+IDE7XG4gICAgdmFyIHBhcmVudCA9IGhlYXBbcGFyZW50SW5kZXhdO1xuXG4gICAgaWYgKHBhcmVudCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocGFyZW50LCBub2RlKSA+IDApIHtcbiAgICAgIC8vIFRoZSBwYXJlbnQgaXMgbGFyZ2VyLiBTd2FwIHBvc2l0aW9ucy5cbiAgICAgIGhlYXBbcGFyZW50SW5kZXhdID0gbm9kZTtcbiAgICAgIGhlYXBbaW5kZXhdID0gcGFyZW50O1xuICAgICAgaW5kZXggPSBwYXJlbnRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhlIHBhcmVudCBpcyBzbWFsbGVyLiBFeGl0LlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzaWZ0RG93bihoZWFwLCBub2RlLCBpKSB7XG4gIHZhciBpbmRleCA9IGk7XG4gIHZhciBsZW5ndGggPSBoZWFwLmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgbGVmdEluZGV4ID0gKGluZGV4ICsgMSkgKiAyIC0gMTtcbiAgICB2YXIgbGVmdCA9IGhlYXBbbGVmdEluZGV4XTtcbiAgICB2YXIgcmlnaHRJbmRleCA9IGxlZnRJbmRleCArIDE7XG4gICAgdmFyIHJpZ2h0ID0gaGVhcFtyaWdodEluZGV4XTsgLy8gSWYgdGhlIGxlZnQgb3IgcmlnaHQgbm9kZSBpcyBzbWFsbGVyLCBzd2FwIHdpdGggdGhlIHNtYWxsZXIgb2YgdGhvc2UuXG5cbiAgICBpZiAobGVmdCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUobGVmdCwgbm9kZSkgPCAwKSB7XG4gICAgICBpZiAocmlnaHQgIT09IHVuZGVmaW5lZCAmJiBjb21wYXJlKHJpZ2h0LCBsZWZ0KSA8IDApIHtcbiAgICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgICAgaGVhcFtyaWdodEluZGV4XSA9IG5vZGU7XG4gICAgICAgIGluZGV4ID0gcmlnaHRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlYXBbaW5kZXhdID0gbGVmdDtcbiAgICAgICAgaGVhcFtsZWZ0SW5kZXhdID0gbm9kZTtcbiAgICAgICAgaW5kZXggPSBsZWZ0SW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyaWdodCAhPT0gdW5kZWZpbmVkICYmIGNvbXBhcmUocmlnaHQsIG5vZGUpIDwgMCkge1xuICAgICAgaGVhcFtpbmRleF0gPSByaWdodDtcbiAgICAgIGhlYXBbcmlnaHRJbmRleF0gPSBub2RlO1xuICAgICAgaW5kZXggPSByaWdodEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBOZWl0aGVyIGNoaWxkIGlzIHNtYWxsZXIuIEV4aXQuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmUoYSwgYikge1xuICAvLyBDb21wYXJlIHNvcnQgaW5kZXggZmlyc3QsIHRoZW4gdGFzayBpZC5cbiAgdmFyIGRpZmYgPSBhLnNvcnRJbmRleCAtIGIuc29ydEluZGV4O1xuICByZXR1cm4gZGlmZiAhPT0gMCA/IGRpZmYgOiBhLmlkIC0gYi5pZDtcbn1cblxuLy8gVE9ETzogVXNlIHN5bWJvbHM/XG52YXIgSW1tZWRpYXRlUHJpb3JpdHkgPSAxO1xudmFyIFVzZXJCbG9ja2luZ1ByaW9yaXR5ID0gMjtcbnZhciBOb3JtYWxQcmlvcml0eSA9IDM7XG52YXIgTG93UHJpb3JpdHkgPSA0O1xudmFyIElkbGVQcmlvcml0eSA9IDU7XG5cbmZ1bmN0aW9uIG1hcmtUYXNrRXJyb3JlZCh0YXNrLCBtcykge1xufVxuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby12YXIgKi9cbi8vIE1hdGgucG93KDIsIDMwKSAtIDFcbi8vIDBiMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExXG5cbnZhciBtYXhTaWduZWQzMUJpdEludCA9IDEwNzM3NDE4MjM7IC8vIFRpbWVzIG91dCBpbW1lZGlhdGVseVxuXG52YXIgSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQgPSAtMTsgLy8gRXZlbnR1YWxseSB0aW1lcyBvdXRcblxudmFyIFVTRVJfQkxPQ0tJTkdfUFJJT1JJVFlfVElNRU9VVCA9IDI1MDtcbnZhciBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVCA9IDUwMDA7XG52YXIgTE9XX1BSSU9SSVRZX1RJTUVPVVQgPSAxMDAwMDsgLy8gTmV2ZXIgdGltZXMgb3V0XG5cbnZhciBJRExFX1BSSU9SSVRZX1RJTUVPVVQgPSBtYXhTaWduZWQzMUJpdEludDsgLy8gVGFza3MgYXJlIHN0b3JlZCBvbiBhIG1pbiBoZWFwXG5cbnZhciB0YXNrUXVldWUgPSBbXTtcbnZhciB0aW1lclF1ZXVlID0gW107IC8vIEluY3JlbWVudGluZyBpZCBjb3VudGVyLiBVc2VkIHRvIG1haW50YWluIGluc2VydGlvbiBvcmRlci5cblxudmFyIHRhc2tJZENvdW50ZXIgPSAxOyAvLyBQYXVzaW5nIHRoZSBzY2hlZHVsZXIgaXMgdXNlZnVsIGZvciBkZWJ1Z2dpbmcuXG52YXIgY3VycmVudFRhc2sgPSBudWxsO1xudmFyIGN1cnJlbnRQcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7IC8vIFRoaXMgaXMgc2V0IHdoaWxlIHBlcmZvcm1pbmcgd29yaywgdG8gcHJldmVudCByZS1lbnRyYW5jeS5cblxudmFyIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbnZhciBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IGZhbHNlO1xudmFyIGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQgPSBmYWxzZTtcblxuZnVuY3Rpb24gYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSkge1xuICAvLyBDaGVjayBmb3IgdGFza3MgdGhhdCBhcmUgbm8gbG9uZ2VyIGRlbGF5ZWQgYW5kIGFkZCB0aGVtIHRvIHRoZSBxdWV1ZS5cbiAgdmFyIHRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICB3aGlsZSAodGltZXIgIT09IG51bGwpIHtcbiAgICBpZiAodGltZXIuY2FsbGJhY2sgPT09IG51bGwpIHtcbiAgICAgIC8vIFRpbWVyIHdhcyBjYW5jZWxsZWQuXG4gICAgICBwb3AodGltZXJRdWV1ZSk7XG4gICAgfSBlbHNlIGlmICh0aW1lci5zdGFydFRpbWUgPD0gY3VycmVudFRpbWUpIHtcbiAgICAgIC8vIFRpbWVyIGZpcmVkLiBUcmFuc2ZlciB0byB0aGUgdGFzayBxdWV1ZS5cbiAgICAgIHBvcCh0aW1lclF1ZXVlKTtcbiAgICAgIHRpbWVyLnNvcnRJbmRleCA9IHRpbWVyLmV4cGlyYXRpb25UaW1lO1xuICAgICAgcHVzaCh0YXNrUXVldWUsIHRpbWVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmVtYWluaW5nIHRpbWVycyBhcmUgcGVuZGluZy5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aW1lciA9IHBlZWsodGltZXJRdWV1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGltZW91dChjdXJyZW50VGltZSkge1xuICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gIGFkdmFuY2VUaW1lcnMoY3VycmVudFRpbWUpO1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQpIHtcbiAgICBpZiAocGVlayh0YXNrUXVldWUpICE9PSBudWxsKSB7XG4gICAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgICByZXF1ZXN0SG9zdENhbGxiYWNrKGZsdXNoV29yayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgICAgaWYgKGZpcnN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgcmVxdWVzdEhvc3RUaW1lb3V0KGhhbmRsZVRpbWVvdXQsIGZpcnN0VGltZXIuc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmbHVzaFdvcmsoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpIHtcblxuXG4gIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gZmFsc2U7XG5cbiAgaWYgKGlzSG9zdFRpbWVvdXRTY2hlZHVsZWQpIHtcbiAgICAvLyBXZSBzY2hlZHVsZWQgYSB0aW1lb3V0IGJ1dCBpdCdzIG5vIGxvbmdlciBuZWVkZWQuIENhbmNlbCBpdC5cbiAgICBpc0hvc3RUaW1lb3V0U2NoZWR1bGVkID0gZmFsc2U7XG4gICAgY2FuY2VsSG9zdFRpbWVvdXQoKTtcbiAgfVxuXG4gIGlzUGVyZm9ybWluZ1dvcmsgPSB0cnVlO1xuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgdHJ5IHtcbiAgICBpZiAoZW5hYmxlUHJvZmlsaW5nKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gd29ya0xvb3AoaGFzVGltZVJlbWFpbmluZywgaW5pdGlhbFRpbWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrICE9PSBudWxsKSB7XG4gICAgICAgICAgdmFyIGN1cnJlbnRUaW1lID0gZXhwb3J0cy51bnN0YWJsZV9ub3coKTtcbiAgICAgICAgICBtYXJrVGFza0Vycm9yZWQoY3VycmVudFRhc2ssIGN1cnJlbnRUaW1lKTtcbiAgICAgICAgICBjdXJyZW50VGFzay5pc1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGNhdGNoIGluIHByb2QgY29kZSBwYXRoLlxuICAgICAgcmV0dXJuIHdvcmtMb29wKGhhc1RpbWVSZW1haW5pbmcsIGluaXRpYWxUaW1lKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgY3VycmVudFRhc2sgPSBudWxsO1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIGlzUGVyZm9ybWluZ1dvcmsgPSBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiB3b3JrTG9vcChoYXNUaW1lUmVtYWluaW5nLCBpbml0aWFsVGltZSkge1xuICB2YXIgY3VycmVudFRpbWUgPSBpbml0aWFsVGltZTtcbiAgYWR2YW5jZVRpbWVycyhjdXJyZW50VGltZSk7XG4gIGN1cnJlbnRUYXNrID0gcGVlayh0YXNrUXVldWUpO1xuXG4gIHdoaWxlIChjdXJyZW50VGFzayAhPT0gbnVsbCAmJiAhKGVuYWJsZVNjaGVkdWxlckRlYnVnZ2luZyApKSB7XG4gICAgaWYgKGN1cnJlbnRUYXNrLmV4cGlyYXRpb25UaW1lID4gY3VycmVudFRpbWUgJiYgKCFoYXNUaW1lUmVtYWluaW5nIHx8IGV4cG9ydHMudW5zdGFibGVfc2hvdWxkWWllbGQoKSkpIHtcbiAgICAgIC8vIFRoaXMgY3VycmVudFRhc2sgaGFzbid0IGV4cGlyZWQsIGFuZCB3ZSd2ZSByZWFjaGVkIHRoZSBkZWFkbGluZS5cbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHZhciBjYWxsYmFjayA9IGN1cnJlbnRUYXNrLmNhbGxiYWNrO1xuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBudWxsO1xuICAgICAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50VGFzay5wcmlvcml0eUxldmVsO1xuICAgICAgdmFyIGRpZFVzZXJDYWxsYmFja1RpbWVvdXQgPSBjdXJyZW50VGFzay5leHBpcmF0aW9uVGltZSA8PSBjdXJyZW50VGltZTtcblxuICAgICAgdmFyIGNvbnRpbnVhdGlvbkNhbGxiYWNrID0gY2FsbGJhY2soZGlkVXNlckNhbGxiYWNrVGltZW91dCk7XG4gICAgICBjdXJyZW50VGltZSA9IGV4cG9ydHMudW5zdGFibGVfbm93KCk7XG5cbiAgICAgIGlmICh0eXBlb2YgY29udGludWF0aW9uQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3VycmVudFRhc2suY2FsbGJhY2sgPSBjb250aW51YXRpb25DYWxsYmFjaztcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRUYXNrID09PSBwZWVrKHRhc2tRdWV1ZSkpIHtcbiAgICAgICAgICBwb3AodGFza1F1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBhZHZhbmNlVGltZXJzKGN1cnJlbnRUaW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcG9wKHRhc2tRdWV1ZSk7XG4gICAgfVxuXG4gICAgY3VycmVudFRhc2sgPSBwZWVrKHRhc2tRdWV1ZSk7XG4gIH0gLy8gUmV0dXJuIHdoZXRoZXIgdGhlcmUncyBhZGRpdGlvbmFsIHdvcmtcblxuXG4gIGlmIChjdXJyZW50VGFzayAhPT0gbnVsbCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHZhciBmaXJzdFRpbWVyID0gcGVlayh0aW1lclF1ZXVlKTtcblxuICAgIGlmIChmaXJzdFRpbWVyICE9PSBudWxsKSB7XG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgZmlyc3RUaW1lci5zdGFydFRpbWUgLSBjdXJyZW50VGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShwcmlvcml0eUxldmVsLCBldmVudEhhbmRsZXIpIHtcbiAgc3dpdGNoIChwcmlvcml0eUxldmVsKSB7XG4gICAgY2FzZSBJbW1lZGlhdGVQcmlvcml0eTpcbiAgICBjYXNlIFVzZXJCbG9ja2luZ1ByaW9yaXR5OlxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgY2FzZSBMb3dQcmlvcml0eTpcbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIGJyZWFrO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHByaW9yaXR5TGV2ZWwgPSBOb3JtYWxQcmlvcml0eTtcbiAgfVxuXG4gIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgY3VycmVudFByaW9yaXR5TGV2ZWwgPSBwcmlvcml0eUxldmVsO1xuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGV2ZW50SGFuZGxlcigpO1xuICB9IGZpbmFsbHkge1xuICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX25leHQoZXZlbnRIYW5kbGVyKSB7XG4gIHZhciBwcmlvcml0eUxldmVsO1xuXG4gIHN3aXRjaCAoY3VycmVudFByaW9yaXR5TGV2ZWwpIHtcbiAgICBjYXNlIEltbWVkaWF0ZVByaW9yaXR5OlxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgY2FzZSBOb3JtYWxQcmlvcml0eTpcbiAgICAgIC8vIFNoaWZ0IGRvd24gdG8gbm9ybWFsIHByaW9yaXR5XG4gICAgICBwcmlvcml0eUxldmVsID0gTm9ybWFsUHJpb3JpdHk7XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBBbnl0aGluZyBsb3dlciB0aGFuIG5vcm1hbCBwcmlvcml0eSBzaG91bGQgcmVtYWluIGF0IHRoZSBjdXJyZW50IGxldmVsLlxuICAgICAgcHJpb3JpdHlMZXZlbCA9IGN1cnJlbnRQcmlvcml0eUxldmVsO1xuICAgICAgYnJlYWs7XG4gIH1cblxuICB2YXIgcHJldmlvdXNQcmlvcml0eUxldmVsID0gY3VycmVudFByaW9yaXR5TGV2ZWw7XG4gIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJpb3JpdHlMZXZlbDtcblxuICB0cnkge1xuICAgIHJldHVybiBldmVudEhhbmRsZXIoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHByZXZpb3VzUHJpb3JpdHlMZXZlbDtcbiAgfVxufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV93cmFwQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgdmFyIHBhcmVudFByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGlzIGEgZm9yayBvZiBydW5XaXRoUHJpb3JpdHksIGlubGluZWQgZm9yIHBlcmZvcm1hbmNlLlxuICAgIHZhciBwcmV2aW91c1ByaW9yaXR5TGV2ZWwgPSBjdXJyZW50UHJpb3JpdHlMZXZlbDtcbiAgICBjdXJyZW50UHJpb3JpdHlMZXZlbCA9IHBhcmVudFByaW9yaXR5TGV2ZWw7XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRQcmlvcml0eUxldmVsID0gcHJldmlvdXNQcmlvcml0eUxldmVsO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayhwcmlvcml0eUxldmVsLCBjYWxsYmFjaywgb3B0aW9ucykge1xuICB2YXIgY3VycmVudFRpbWUgPSBleHBvcnRzLnVuc3RhYmxlX25vdygpO1xuICB2YXIgc3RhcnRUaW1lO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ29iamVjdCcgJiYgb3B0aW9ucyAhPT0gbnVsbCkge1xuICAgIHZhciBkZWxheSA9IG9wdGlvbnMuZGVsYXk7XG5cbiAgICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lICsgZGVsYXk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBzdGFydFRpbWUgPSBjdXJyZW50VGltZTtcbiAgfVxuXG4gIHZhciB0aW1lb3V0O1xuXG4gIHN3aXRjaCAocHJpb3JpdHlMZXZlbCkge1xuICAgIGNhc2UgSW1tZWRpYXRlUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gSU1NRURJQVRFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgVXNlckJsb2NraW5nUHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gVVNFUl9CTE9DS0lOR19QUklPUklUWV9USU1FT1VUO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIElkbGVQcmlvcml0eTpcbiAgICAgIHRpbWVvdXQgPSBJRExFX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTG93UHJpb3JpdHk6XG4gICAgICB0aW1lb3V0ID0gTE9XX1BSSU9SSVRZX1RJTUVPVVQ7XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTm9ybWFsUHJpb3JpdHk6XG4gICAgZGVmYXVsdDpcbiAgICAgIHRpbWVvdXQgPSBOT1JNQUxfUFJJT1JJVFlfVElNRU9VVDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgdmFyIGV4cGlyYXRpb25UaW1lID0gc3RhcnRUaW1lICsgdGltZW91dDtcbiAgdmFyIG5ld1Rhc2sgPSB7XG4gICAgaWQ6IHRhc2tJZENvdW50ZXIrKyxcbiAgICBjYWxsYmFjazogY2FsbGJhY2ssXG4gICAgcHJpb3JpdHlMZXZlbDogcHJpb3JpdHlMZXZlbCxcbiAgICBzdGFydFRpbWU6IHN0YXJ0VGltZSxcbiAgICBleHBpcmF0aW9uVGltZTogZXhwaXJhdGlvblRpbWUsXG4gICAgc29ydEluZGV4OiAtMVxuICB9O1xuXG4gIGlmIChzdGFydFRpbWUgPiBjdXJyZW50VGltZSkge1xuICAgIC8vIFRoaXMgaXMgYSBkZWxheWVkIHRhc2suXG4gICAgbmV3VGFzay5zb3J0SW5kZXggPSBzdGFydFRpbWU7XG4gICAgcHVzaCh0aW1lclF1ZXVlLCBuZXdUYXNrKTtcblxuICAgIGlmIChwZWVrKHRhc2tRdWV1ZSkgPT09IG51bGwgJiYgbmV3VGFzayA9PT0gcGVlayh0aW1lclF1ZXVlKSkge1xuICAgICAgLy8gQWxsIHRhc2tzIGFyZSBkZWxheWVkLCBhbmQgdGhpcyBpcyB0aGUgdGFzayB3aXRoIHRoZSBlYXJsaWVzdCBkZWxheS5cbiAgICAgIGlmIChpc0hvc3RUaW1lb3V0U2NoZWR1bGVkKSB7XG4gICAgICAgIC8vIENhbmNlbCBhbiBleGlzdGluZyB0aW1lb3V0LlxuICAgICAgICBjYW5jZWxIb3N0VGltZW91dCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNIb3N0VGltZW91dFNjaGVkdWxlZCA9IHRydWU7XG4gICAgICB9IC8vIFNjaGVkdWxlIGEgdGltZW91dC5cblxuXG4gICAgICByZXF1ZXN0SG9zdFRpbWVvdXQoaGFuZGxlVGltZW91dCwgc3RhcnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBuZXdUYXNrLnNvcnRJbmRleCA9IGV4cGlyYXRpb25UaW1lO1xuICAgIHB1c2godGFza1F1ZXVlLCBuZXdUYXNrKTtcbiAgICAvLyB3YWl0IHVudGlsIHRoZSBuZXh0IHRpbWUgd2UgeWllbGQuXG5cblxuICAgIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICAgIGlzSG9zdENhbGxiYWNrU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICAgIHJlcXVlc3RIb3N0Q2FsbGJhY2soZmx1c2hXb3JrKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3VGFzaztcbn1cblxuZnVuY3Rpb24gdW5zdGFibGVfcGF1c2VFeGVjdXRpb24oKSB7XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uKCkge1xuXG4gIGlmICghaXNIb3N0Q2FsbGJhY2tTY2hlZHVsZWQgJiYgIWlzUGVyZm9ybWluZ1dvcmspIHtcbiAgICBpc0hvc3RDYWxsYmFja1NjaGVkdWxlZCA9IHRydWU7XG4gICAgcmVxdWVzdEhvc3RDYWxsYmFjayhmbHVzaFdvcmspO1xuICB9XG59XG5cbmZ1bmN0aW9uIHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlKCkge1xuICByZXR1cm4gcGVlayh0YXNrUXVldWUpO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9jYW5jZWxDYWxsYmFjayh0YXNrKSB7XG4gIC8vIHJlbW92ZSBmcm9tIHRoZSBxdWV1ZSBiZWNhdXNlIHlvdSBjYW4ndCByZW1vdmUgYXJiaXRyYXJ5IG5vZGVzIGZyb20gYW5cbiAgLy8gYXJyYXkgYmFzZWQgaGVhcCwgb25seSB0aGUgZmlyc3Qgb25lLilcblxuXG4gIHRhc2suY2FsbGJhY2sgPSBudWxsO1xufVxuXG5mdW5jdGlvbiB1bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCgpIHtcbiAgcmV0dXJuIGN1cnJlbnRQcmlvcml0eUxldmVsO1xufVxuXG52YXIgdW5zdGFibGVfcmVxdWVzdFBhaW50ID0gcmVxdWVzdFBhaW50O1xudmFyIHVuc3RhYmxlX1Byb2ZpbGluZyA9ICBudWxsO1xuXG5leHBvcnRzLnVuc3RhYmxlX0lkbGVQcmlvcml0eSA9IElkbGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHkgPSBJbW1lZGlhdGVQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTG93UHJpb3JpdHkgPSBMb3dQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkgPSBOb3JtYWxQcmlvcml0eTtcbmV4cG9ydHMudW5zdGFibGVfUHJvZmlsaW5nID0gdW5zdGFibGVfUHJvZmlsaW5nO1xuZXhwb3J0cy51bnN0YWJsZV9Vc2VyQmxvY2tpbmdQcmlvcml0eSA9IFVzZXJCbG9ja2luZ1ByaW9yaXR5O1xuZXhwb3J0cy51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayA9IHVuc3RhYmxlX2NhbmNlbENhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbiA9IHVuc3RhYmxlX2NvbnRpbnVlRXhlY3V0aW9uO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCA9IHVuc3RhYmxlX2dldEN1cnJlbnRQcmlvcml0eUxldmVsO1xuZXhwb3J0cy51bnN0YWJsZV9nZXRGaXJzdENhbGxiYWNrTm9kZSA9IHVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlO1xuZXhwb3J0cy51bnN0YWJsZV9uZXh0ID0gdW5zdGFibGVfbmV4dDtcbmV4cG9ydHMudW5zdGFibGVfcGF1c2VFeGVjdXRpb24gPSB1bnN0YWJsZV9wYXVzZUV4ZWN1dGlvbjtcbmV4cG9ydHMudW5zdGFibGVfcmVxdWVzdFBhaW50ID0gdW5zdGFibGVfcmVxdWVzdFBhaW50O1xuZXhwb3J0cy51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHkgPSB1bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk7XG5leHBvcnRzLnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2sgPSB1bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrO1xuZXhwb3J0cy51bnN0YWJsZV93cmFwQ2FsbGJhY2sgPSB1bnN0YWJsZV93cmFwQ2FsbGJhY2s7XG4gIH0pKCk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvc2NoZWR1bGVyLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3NjaGVkdWxlci10cmFjaW5nLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIGlzT2xkSUUgPSBmdW5jdGlvbiBpc09sZElFKCkge1xuICB2YXIgbWVtbztcbiAgcmV0dXJuIGZ1bmN0aW9uIG1lbW9yaXplKCkge1xuICAgIGlmICh0eXBlb2YgbWVtbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFRlc3QgZm9yIElFIDw9IDkgYXMgcHJvcG9zZWQgYnkgQnJvd3NlcmhhY2tzXG4gICAgICAvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG4gICAgICAvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG4gICAgICAvLyB0byBvcGVyYXRlIGNvcnJlY3RseSBpbnRvIG5vbi1zdGFuZGFyZCBlbnZpcm9ubWVudHNcbiAgICAgIC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuICAgICAgbWVtbyA9IEJvb2xlYW4od2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2IpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vO1xuICB9O1xufSgpO1xuXG52YXIgZ2V0VGFyZ2V0ID0gZnVuY3Rpb24gZ2V0VGFyZ2V0KCkge1xuICB2YXIgbWVtbyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb3JpemUodGFyZ2V0KSB7XG4gICAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7IC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG5cbiAgICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuICAgICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuICAgIH1cblxuICAgIHJldHVybiBtZW1vW3RhcmdldF07XG4gIH07XG59KCk7XG5cbnZhciBzdHlsZXNJbkRvbSA9IFtdO1xuXG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlc0luRG9tLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0eWxlc0luRG9tW2ldLmlkZW50aWZpZXIgPT09IGlkZW50aWZpZXIpIHtcbiAgICAgIHJlc3VsdCA9IGk7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGxpc3RbaV07XG4gICAgdmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG4gICAgdmFyIGNvdW50ID0gaWRDb3VudE1hcFtpZF0gfHwgMDtcbiAgICB2YXIgaWRlbnRpZmllciA9IFwiXCIuY29uY2F0KGlkLCBcIiBcIikuY29uY2F0KGNvdW50KTtcbiAgICBpZENvdW50TWFwW2lkXSA9IGNvdW50ICsgMTtcbiAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICB2YXIgb2JqID0ge1xuICAgICAgY3NzOiBpdGVtWzFdLFxuICAgICAgbWVkaWE6IGl0ZW1bMl0sXG4gICAgICBzb3VyY2VNYXA6IGl0ZW1bM11cbiAgICB9O1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5Eb21baW5kZXhdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRG9tW2luZGV4XS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlc0luRG9tLnB1c2goe1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiBhZGRTdHlsZShvYmosIG9wdGlvbnMpLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICB2YXIgYXR0cmlidXRlcyA9IG9wdGlvbnMuYXR0cmlidXRlcyB8fCB7fTtcblxuICBpZiAodHlwZW9mIGF0dHJpYnV0ZXMubm9uY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIG5vbmNlID0gdHlwZW9mIF9fd2VicGFja19ub25jZV9fICE9PSAndW5kZWZpbmVkJyA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICAgIGlmIChub25jZSkge1xuICAgICAgYXR0cmlidXRlcy5ub25jZSA9IG5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHN0eWxlLnNldEF0dHJpYnV0ZShrZXksIGF0dHJpYnV0ZXNba2V5XSk7XG4gIH0pO1xuXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5pbnNlcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zLmluc2VydChzdHlsZSk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHRhcmdldCA9IGdldFRhcmdldChvcHRpb25zLmluc2VydCB8fCAnaGVhZCcpO1xuXG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gICAgfVxuXG4gICAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKSB7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBpZlxuICBpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xufVxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5cblxudmFyIHJlcGxhY2VUZXh0ID0gZnVuY3Rpb24gcmVwbGFjZVRleHQoKSB7XG4gIHZhciB0ZXh0U3RvcmUgPSBbXTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2UoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG4gICAgdGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuICAgIHJldHVybiB0ZXh0U3RvcmUuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJ1xcbicpO1xuICB9O1xufSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcbiAgdmFyIGNzcyA9IHJlbW92ZSA/ICcnIDogb2JqLm1lZGlhID8gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKS5jb25jYXQob2JqLmNzcywgXCJ9XCIpIDogb2JqLmNzczsgLy8gRm9yIG9sZCBJRVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcbiAgICB2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cbiAgICBpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHtcbiAgICAgIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIHN0eWxlLmluc2VydEJlZm9yZShjc3NOb2RlLCBjaGlsZE5vZGVzW2luZGV4XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0eWxlLmFwcGVuZENoaWxkKGNzc05vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhcHBseVRvVGFnKHN0eWxlLCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IG9iai5jc3M7XG4gIHZhciBtZWRpYSA9IG9iai5tZWRpYTtcbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cbiAgaWYgKG1lZGlhKSB7XG4gICAgc3R5bGUuc2V0QXR0cmlidXRlKCdtZWRpYScsIG1lZGlhKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5yZW1vdmVBdHRyaWJ1dGUoJ21lZGlhJyk7XG4gIH1cblxuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSAndW5kZWZpbmVkJykge1xuICAgIGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIuY29uY2F0KGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KHNvdXJjZU1hcCkpKSksIFwiICovXCIpO1xuICB9IC8vIEZvciBvbGQgSUVcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgICovXG5cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGUuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGUucmVtb3ZlQ2hpbGQoc3R5bGUuZmlyc3RDaGlsZCk7XG4gICAgfVxuXG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXIgc2luZ2xldG9uQ291bnRlciA9IDA7XG5cbmZ1bmN0aW9uIGFkZFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgc3R5bGU7XG4gIHZhciB1cGRhdGU7XG4gIHZhciByZW1vdmU7XG5cbiAgaWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG4gICAgdmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG4gICAgc3R5bGUgPSBzaW5nbGV0b24gfHwgKHNpbmdsZXRvbiA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSk7XG4gICAgdXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG4gICAgcmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcbiAgfSBlbHNlIHtcbiAgICBzdHlsZSA9IGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgICB1cGRhdGUgPSBhcHBseVRvVGFnLmJpbmQobnVsbCwgc3R5bGUsIG9wdGlvbnMpO1xuXG4gICAgcmVtb3ZlID0gZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcbiAgICB9O1xuICB9XG5cbiAgdXBkYXRlKG9iaik7XG4gIHJldHVybiBmdW5jdGlvbiB1cGRhdGVTdHlsZShuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdXBkYXRlKG9iaiA9IG5ld09iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAobGlzdCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsgLy8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG4gIC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2VcblxuICBpZiAoIW9wdGlvbnMuc2luZ2xldG9uICYmIHR5cGVvZiBvcHRpb25zLnNpbmdsZXRvbiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG4gIH1cblxuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG5ld0xpc3QpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRvbVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cblxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbGFzdElkZW50aWZpZXJzLmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIF9pZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW19pXTtcblxuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcblxuICAgICAgaWYgKHN0eWxlc0luRG9tW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRvbVtfaW5kZXhdLnVwZGF0ZXIoKTtcblxuICAgICAgICBzdHlsZXNJbkRvbS5zcGxpY2UoX2luZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRFMklpQm9aV2xuYUhROUlqZ3dJaUIyYVdWM1FtOTRQU0l3SURBZ01URTJJRGd3SWlCbWFXeHNQU0p1YjI1bElpQjRiV3h1Y3owaWFIUjBjRG92TDNkM2R5NTNNeTV2Y21jdk1qQXdNQzl6ZG1jaVBnbzhaeUJqYkdsd0xYQmhkR2c5SW5WeWJDZ2pZMnhwY0RCZk9EQTFYek13T0RFNEtTSStDanh3WVhSb0lHUTlJazB3SURORE1DQXhMak0wTXpFMUlERXVNelF6TVRVZ01DQXpJREJJTVRFelF6RXhOQzQyTlRjZ01DQXhNVFlnTVM0ek5ETXhOU0F4TVRZZ00xWTRNRWd3VmpOYUlpQm1hV3hzUFNJak1FUXhNakV5SWk4K0NqeHlaV04wSUhkcFpIUm9QU0l4TVRnaUlHaGxhV2RvZEQwaU1qUWlJR1pwYkd3OUlpTXhPREl4TWpVaUx6NEtQSEJoZEdnZ1pEMGlUVEV5TGpVZ05ERkRNVEl1TlNBek9TNHdOamNnTVRRdU1EWTNJRE0zTGpVZ01UWWdNemN1TlVneE1UY3VOVlk0TUM0MVNERXlMalZXTkRGYUlpQm1hV3hzUFNJak1UZ3lNVEkxSWlCemRISnZhMlU5SWlNeVFUTTJNME1pTHo0S1BISmxZM1FnZUQwaU5EVWlJSGs5SWpZaUlIZHBaSFJvUFNJeU55SWdhR1ZwWjJoMFBTSXhNeUlnY25nOUlqTWlJR1pwYkd3OUlpTXpRVFEwTkVJaUx6NEtQSEpsWTNRZ2VEMGlOellpSUhrOUlqWWlJSGRwWkhSb1BTSXlOeUlnYUdWcFoyaDBQU0l4TXlJZ2NuZzlJak1pSUdacGJHdzlJaU16UVRRME5FSWlMejRLUEhKbFkzUWdlRDBpTVRBM0lpQjVQU0kySWlCM2FXUjBhRDBpTWpjaUlHaGxhV2RvZEQwaU1UTWlJSEo0UFNJeklpQm1hV3hzUFNJak0wRTBORFJDSWk4K0NqeHdZWFJvSUdROUlrMHlNeTQ1TVRJZ01URXVOamMzTlVNeU15NHpORGsySURrdU1ERTFNRFlnTWpBdU1qUTJJRGN1TkRRNE5qVWdNVFl1T1RneE1pQTRMakUzT1RVNVF6RXpMamN4TmpRZ09DNDVNRGszTnlBeE1TNDFNalUySURFeExqWTJNRGdnTVRJdU1EZzRJREUwTGpNeU1qVkRNVEl1TmpVd05TQXhOaTQ1T0RRNUlERTFMamMxTkNBeE9DNDFOVEV6SURFNUxqQXhPRGdnTVRjdU9ESXdORU15TWk0eU9ETTJJREUzTGpBNU1ESWdNalF1TkRjME5DQXhOQzR6TXprNUlESXpMamt4TWlBeE1TNDJOemMxV2sweE9DQXhOUzQwTlRReFF6RTJMalk0TWpNZ01UVXVORFUwTVNBeE5TNDJNVFE1SURFMExqTTFOVEVnTVRVdU5qRTBPU0F4TTBNeE5TNDJNVFE1SURFeExqWTBORGtnTVRZdU5qZ3pJREV3TGpVME5Ua2dNVGdnTVRBdU5UUTFPVU14T1M0ek1UY2dNVEF1TlRRMU9TQXlNQzR6T0RVeElERXhMalkwTkRJZ01qQXVNemcxTVNBeE0wTXlNQzR6T0RVeElERTBMak0xTlRnZ01Ua3VNekUzSURFMUxqUTFOREVnTVRnZ01UVXVORFUwTVZvaUlHWnBiR3c5SWlNd01EaERPVGtpTHo0S1BIQmhkR2dnWkQwaVRURTRMalV5TnpjZ09TNDFOalF4T0VNeE5pNDJNelkxSURrdU5UWTBNVGdnTVRVdU1UQXpNU0F4TVM0eE5ERTVJREUxTGpFd016RWdNVE11TURnM09FTXhOUzR4TURNeElERTFMakF6TXpjZ01UWXVOak0yTlNBeE5pNDJNVEUxSURFNExqVXlOemNnTVRZdU5qRXhOVU15TUM0ME1UazJJREUyTGpZeE1UVWdNakV1T1RVeklERTFMakF6TXpjZ01qRXVPVFV6SURFekxqQTROemhETWpFdU9UVXlNaUF4TVM0eE5ERTVJREl3TGpReE9Ea2dPUzQxTmpReE9DQXhPQzQxTWpjM0lEa3VOVFkwTVRoYVRURTNMams1T1RrZ01UVXVNVFF6TmtNeE5pNDRORGt6SURFMUxqRTBNellnTVRVdU9URTJOaUF4TkM0eE9ETTVJREUxTGpreE5qWWdNVE5ETVRVdU9URTJOaUF4TVM0NE1UWXhJREUyTGpnME9UTWdNVEF1T0RVMk5DQXhOeTQ1T1RrNUlERXdMamcxTmpSRE1Ua3VNVFV3TkNBeE1DNDROVFkwSURJd0xqQTRNekVnTVRFdU9ERTJNU0F5TUM0d09ETXhJREV6UXpJd0xqQTRNekVnTVRRdU1UZ3pPU0F4T1M0eE5UQTBJREUxTGpFME16WWdNVGN1T1RrNU9TQXhOUzR4TkRNMldpSWdabWxzYkQwaUl6Y3dRME5FTXlJdlBnbzhjbVZqZENCNFBTSXlOQ0lnZVQwaU5Ea2lJSGRwWkhSb1BTSTNOQ0lnYUdWcFoyaDBQU0kySWlCeWVEMGlNU0lnWm1sc2JEMGlJek5CTkRRMFFpSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlOVGtpSUhkcFpIUm9QU0kxT1NJZ2FHVnBaMmgwUFNJNElpQnllRDBpTVNJZ1ptbHNiRDBpSXpOQk5EUTBRaUl2UGdvOEwyYytDanhrWldaelBnbzhZMnhwY0ZCaGRHZ2dhV1E5SW1Oc2FYQXdYemd3TlY4ek1EZ3hPQ0krQ2p4d1lYUm9JR1E5SWswd0lETkRNQ0F4TGpNME16RTFJREV1TXpRek1UVWdNQ0F6SURCSU1URXpRekV4TkM0Mk5UY2dNQ0F4TVRZZ01TNHpORE14TlNBeE1UWWdNMVk0TUVnd1ZqTmFJaUJtYVd4c1BTSjNhR2wwWlNJdlBnbzhMMk5zYVhCUVlYUm9QZ284TDJSbFpuTStDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpT0NJZ2FHVnBaMmgwUFNJeE15SWdkbWxsZDBKdmVEMGlNQ0F3SURnZ01UTWlJR1pwYkd3OUltNXZibVVpSUhodGJHNXpQU0pvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBd0wzTjJaeUkrQ2p4d1lYUm9JR1pwYkd3dGNuVnNaVDBpWlhabGJtOWtaQ0lnWTJ4cGNDMXlkV3hsUFNKbGRtVnViMlJrSWlCa1BTSk5OaTQySURFeUxqUk1NQzQ0TURBd01ETWdOaTQxTURBd01VdzJMallnTUM0Mk1EQXdNRFpNTnk0MElERXVOREF3TURGTU1pNHlJRFl1TlRBd01ERk1OeTQwSURFeExqWk1OaTQySURFeUxqUmFJaUJtYVd4c1BTSWpNamd6TmpNMklpOCtDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlNeFJqTXlORGNpTHo0S1BHTnBjbU5zWlNCamVEMGlNVFl1TlNJZ1kzazlJakUyTGpVaUlISTlJamt1TlNJZ2MzUnliMnRsUFNJak0wUTVSRVpHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TXkxcGJuTnBaR1V0TVY4NE1ETmZNalEwT1RJaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHhOQzQyT0RJZ01qQXVORE15UXpFMExqZzNOeklnTWpBdU5qSTNNaUF4TlM0eE9UTTRJREl3TGpZeU56SWdNVFV1TXpnNU1TQXlNQzQwTXpKTU1UWXVNRGsyTWlBeE9TNDNNalE1VERJeExqWTFOVE1nTVRRdU1UWTFOME15TVM0NE5UQTJJREV6TGprM01EVWdNakV1T0RVd05pQXhNeTQyTlRNNUlESXhMalkxTlRNZ01UTXVORFU0Tmt3eU1DNDVORGd5SURFeUxqYzFNVFZETWpBdU56VXpJREV5TGpVMU5qTWdNakF1TkRNMk5DQXhNaTQxTlRZeklESXdMakkwTVRFZ01USXVOelV4TlV3eE5TNHdNelUxSURFM0xqazFOekZNTVRNdU1qWTNPQ0F4Tmk0eE9Ea3pRekV6TGpBM01qVWdNVFV1T1RrME1TQXhNaTQzTlRVNUlERTFMams1TkRFZ01USXVOVFl3TnlBeE5pNHhPRGt6VERFeExqZzFNellnTVRZdU9EazJORU14TVM0Mk5UZ3pJREUzTGpBNU1UY2dNVEV1TmpVNE15QXhOeTQwTURneklERXhMamcxTXpZZ01UY3VOakF6Tmt3eE15NDVOelE1SURFNUxqY3lORGxNTVRRdU5qZ3lJREl3TGpRek1sb2lMejRLUEM5dFlYTnJQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTBMalk0TWlBeU1DNDBNekpETVRRdU9EYzNNaUF5TUM0Mk1qY3lJREUxTGpFNU16Z2dNakF1TmpJM01pQXhOUzR6T0RreElESXdMalF6TWt3eE5pNHdPVFl5SURFNUxqY3lORGxNTWpFdU5qVTFNeUF4TkM0eE5qVTNRekl4TGpnMU1EWWdNVE11T1Rjd05TQXlNUzQ0TlRBMklERXpMalkxTXprZ01qRXVOalUxTXlBeE15NDBOVGcyVERJd0xqazBPRElnTVRJdU56VXhOVU15TUM0M05UTWdNVEl1TlRVMk15QXlNQzQwTXpZMElERXlMalUxTmpNZ01qQXVNalF4TVNBeE1pNDNOVEUxVERFMUxqQXpOVFVnTVRjdU9UVTNNVXd4TXk0eU5qYzRJREUyTGpFNE9UTkRNVE11TURjeU5TQXhOUzQ1T1RReElERXlMamMxTlRrZ01UVXVPVGswTVNBeE1pNDFOakEzSURFMkxqRTRPVE5NTVRFdU9EVXpOaUF4Tmk0NE9UWTBRekV4TGpZMU9ETWdNVGN1TURreE55QXhNUzQyTlRneklERTNMalF3T0RNZ01URXVPRFV6TmlBeE55NDJNRE0yVERFekxqazNORGtnTVRrdU56STBPVXd4TkM0Mk9ESWdNakF1TkRNeVdpSWdabWxzYkQwaUl6TkVPVVJHUmlJdlBnbzhjR0YwYUNCa1BTSk5NVFV1TURNMU5TQXhOeTQ1TlRjeFRERTBMak15T0RRZ01UZ3VOalkwTWt3eE5TNHdNelUxSURFNUxqTTNNVE5NTVRVdU56UXlOaUF4T0M0Mk5qUXlUREUxTGpBek5UVWdNVGN1T1RVM01WcE5NVFF1TmpneUlERTVMamN5TkRsRE1UUXVPRGMzTWlBeE9TNDFNamsySURFMUxqRTVNemdnTVRrdU5USTVOaUF4TlM0ek9Ea3hJREU1TGpjeU5EbE1NVE11T1RjME9TQXlNUzR4TXpreFF6RTBMalUyTURjZ01qRXVOekkwT1NBeE5TNDFNVEEwSURJeExqY3lORGtnTVRZdU1EazJNaUF5TVM0eE16a3hUREUwTGpZNE1pQXhPUzQzTWpRNVdrMHhOUzR6T0RreElERTVMakF4TnpoTU1UUXVOamd5SURFNUxqY3lORGxNTVRZdU1EazJNaUF5TVM0eE16a3hUREUyTGpnd016TWdNakF1TkRNeVRERTFMak00T1RFZ01Ua3VNREUzT0ZwTk1qQXVPVFE0TWlBeE15NDBOVGcyVERFMUxqTTRPVEVnTVRrdU1ERTNPRXd4Tmk0NE1ETXpJREl3TGpRek1rd3lNaTR6TmpJMElERTBMamczTWpoTU1qQXVPVFE0TWlBeE15NDBOVGcyV2sweU1DNDVORGd5SURFMExqRTJOVGRETWpBdU56VXpJREV6TGprM01EVWdNakF1TnpVeklERXpMalkxTXprZ01qQXVPVFE0TWlBeE15NDBOVGcyVERJeUxqTTJNalFnTVRRdU9EY3lPRU15TWk0NU5EZ3lJREUwTGpJNE56RWdNakl1T1RRNE1pQXhNeTR6TXpjeklESXlMak0yTWpRZ01USXVOelV4TlV3eU1DNDVORGd5SURFMExqRTJOVGRhVFRJd0xqSTBNVEVnTVRNdU5EVTROa3d5TUM0NU5EZ3lJREUwTGpFMk5UZE1Nakl1TXpZeU5DQXhNaTQzTlRFMVRESXhMalkxTlRNZ01USXVNRFEwTkV3eU1DNHlOREV4SURFekxqUTFPRFphVFRJd0xqazBPRElnTVRNdU5EVTROa015TUM0M05UTWdNVE11TmpVek9TQXlNQzQwTXpZMElERXpMalkxTXprZ01qQXVNalF4TVNBeE15NDBOVGcyVERJeExqWTFOVE1nTVRJdU1EUTBORU15TVM0d05qazFJREV4TGpRMU9EWWdNakF1TVRFNU9DQXhNUzQwTlRnMklERTVMalV6TkNBeE1pNHdORFEwVERJd0xqazBPRElnTVRNdU5EVTRObHBOTVRVdU56UXlOaUF4T0M0Mk5qUXlUREl3TGprME9ESWdNVE11TkRVNE5rd3hPUzQxTXpRZ01USXVNRFEwTkV3eE5DNHpNamcwSURFM0xqSTFUREUxTGpjME1qWWdNVGd1TmpZME1scE5NVEl1TlRZd055QXhOaTQ0T1RZMFRERTBMak15T0RRZ01UZ3VOalkwTWt3eE5TNDNOREkySURFM0xqSTFUREV6TGprM05Ea2dNVFV1TkRneU1rd3hNaTQxTmpBM0lERTJMamc1TmpSYVRURXpMakkyTnpnZ01UWXVPRGsyTkVNeE15NHdOekkxSURFM0xqQTVNVGNnTVRJdU56VTFPU0F4Tnk0d09URTNJREV5TGpVMk1EY2dNVFl1T0RrMk5Fd3hNeTQ1TnpRNUlERTFMalE0TWpKRE1UTXVNemc1TVNBeE5DNDRPVFkwSURFeUxqUXpPVE1nTVRRdU9EazJOQ0F4TVM0NE5UTTJJREUxTGpRNE1qSk1NVE11TWpZM09DQXhOaTQ0T1RZMFdrMHhNaTQxTmpBM0lERTNMall3TXpaTU1UTXVNalkzT0NBeE5pNDRPVFkwVERFeExqZzFNellnTVRVdU5EZ3lNa3d4TVM0eE5EWTBJREUyTGpFNE9UTk1NVEl1TlRZd055QXhOeTQyTURNMldrMHhNaTQxTmpBM0lERTJMamc1TmpSRE1USXVOelUxT1NBeE55NHdPVEUzSURFeUxqYzFOVGtnTVRjdU5EQTRNeUF4TWk0MU5qQTNJREUzTGpZd016Wk1NVEV1TVRRMk5DQXhOaTR4T0RrelF6RXdMalUyTURjZ01UWXVOemMxTVNBeE1DNDFOakEzSURFM0xqY3lORGtnTVRFdU1UUTJOQ0F4T0M0ek1UQTNUREV5TGpVMk1EY2dNVFl1T0RrMk5GcE5NVFF1TmpneUlERTVMakF4TnpoTU1USXVOVFl3TnlBeE5pNDRPVFkwVERFeExqRTBOalFnTVRndU16RXdOMHd4TXk0eU5qYzRJREl3TGpRek1rd3hOQzQyT0RJZ01Ua3VNREUzT0ZwTk1UVXVNemc1TVNBeE9TNDNNalE1VERFMExqWTRNaUF4T1M0d01UYzRUREV6TGpJMk56Z2dNakF1TkRNeVRERXpMamszTkRrZ01qRXVNVE01TVV3eE5TNHpPRGt4SURFNUxqY3lORGxhSWlCbWFXeHNQU0lqTTBRNVJFWkdJaUJ0WVhOclBTSjFjbXdvSTNCaGRHZ3RNeTFwYm5OcFpHVXRNVjg0TUROZk1qUTBPVElwSWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEcxaGMyc2dhV1E5SW5CaGRHZ3RNaTFwYm5OcFpHVXRNVjgxTURGZk5qQTJOaUlnWm1sc2JEMGlkMmhwZEdVaVBnbzhjR0YwYUNCbWFXeHNMWEoxYkdVOUltVjJaVzV2WkdRaUlHTnNhWEF0Y25Wc1pUMGlaWFpsYm05a1pDSWdaRDBpVFRFNElERXdTREl6UXpJekxqVTFNak1nTVRBZ01qUWdNVEF1TkRRM055QXlOQ0F4TVZZeE5rZ3hPRll4TUZwTk1UWWdPRWd4T0VneU0wTXlOQzQyTlRZNUlEZ2dNallnT1M0ek5ETXhOU0F5TmlBeE1WWXlNME15TmlBeU5DNDJOVFk1SURJMExqWTFOamtnTWpZZ01qTWdNalpJTVRoSU1UWklNVEZET1M0ek5ETXhOU0F5TmlBNElESTBMalkxTmprZ09DQXlNMVl4TVVNNElEa3VNelF6TVRVZ09TNHpORE14TlNBNElERXhJRGhJTVRaYVRURTRJREkwU0RJelF6SXpMalUxTWpNZ01qUWdNalFnTWpNdU5UVXlNeUF5TkNBeU0xWXhPRWd4T0ZZeU5GcE5NVFlnTWpSSU1URkRNVEF1TkRRM055QXlOQ0F4TUNBeU15NDFOVEl6SURFd0lESXpWakU0U0RFMlZqSTBXazB4TUNBeE5sWXhNVU14TUNBeE1DNDBORGMzSURFd0xqUTBOemNnTVRBZ01URWdNVEJJTVRaV01UWklNVEJhSWk4K0Nqd3ZiV0Z6YXo0S1BIQmhkR2dnWkQwaVRURTRJREV3VmpsSU1UZFdNVEJJTVRoYVRUSTBJREUyVmpFM1NESTFWakUyU0RJMFdrMHhPQ0F4TmtneE4xWXhOMGd4T0ZZeE5scE5NVGdnTWpSSU1UZFdNalZJTVRoV01qUmFUVEkwSURFNFNESTFWakUzU0RJMFZqRTRXazB4T0NBeE9GWXhOMGd4TjFZeE9FZ3hPRnBOTVRZZ01qUldNalZJTVRkV01qUklNVFphVFRFd0lERTRWakUzU0RsV01UaElNVEJhVFRFMklERTRTREUzVmpFM1NERTJWakU0V2sweE1DQXhOa2c1VmpFM1NERXdWakUyV2sweE5pQXhNRWd4TjFZNVNERTJWakV3V2sweE5pQXhObFl4TjBneE4xWXhOa2d4TmxwTk1qTWdPVWd4T0ZZeE1VZ3lNMVk1V2sweU5TQXhNVU15TlNBNUxqZzVOVFF6SURJMExqRXdORFlnT1NBeU15QTVWakV4U0RJMVdrMHlOU0F4TmxZeE1VZ3lNMVl4TmtneU5WcE5NalFnTVRWSU1UaFdNVGRJTWpSV01UVmFUVEU1SURFMlZqRXdTREUzVmpFMlNERTVXazB4T0NBM1NERTJWamxJTVRoV04xcE5Nak1nTjBneE9GWTVTREl6VmpkYVRUSTNJREV4UXpJM0lEZ3VOemt3T0RZZ01qVXVNakE1TVNBM0lESXpJRGRXT1VNeU5DNHhNRFEySURrZ01qVWdPUzQ0T1RVME15QXlOU0F4TVVneU4xcE5NamNnTWpOV01URklNalZXTWpOSU1qZGFUVEl6SURJM1F6STFMakl3T1RFZ01qY2dNamNnTWpVdU1qQTVNU0F5TnlBeU0wZ3lOVU15TlNBeU5DNHhNRFEySURJMExqRXdORFlnTWpVZ01qTWdNalZXTWpkYVRURTRJREkzU0RJelZqSTFTREU0VmpJM1drMHhOaUF5TjBneE9GWXlOVWd4TmxZeU4xcE5NVEVnTWpkSU1UWldNalZJTVRGV01qZGFUVGNnTWpORE55QXlOUzR5TURreElEZ3VOemt3T0RZZ01qY2dNVEVnTWpkV01qVkRPUzQ0T1RVME15QXlOU0E1SURJMExqRXdORFlnT1NBeU0wZzNXazAzSURFeFZqSXpTRGxXTVRGSU4xcE5NVEVnTjBNNExqYzVNRGcySURjZ055QTRMamM1TURnMklEY2dNVEZJT1VNNUlEa3VPRGsxTkRNZ09TNDRPVFUwTXlBNUlERXhJRGxXTjFwTk1UWWdOMGd4TVZZNVNERTJWamRhVFRFNElESTFTREl6VmpJelNERTRWakkxV2sweU15QXlOVU15TkM0eE1EUTJJREkxSURJMUlESTBMakV3TkRZZ01qVWdNak5JTWpOV01qVmFUVEkxSURJelZqRTRTREl6VmpJelNESTFXazB4T0NBeE9VZ3lORll4TjBneE9GWXhPVnBOTVRrZ01qUldNVGhJTVRkV01qUklNVGxhVFRFeElESTFTREUyVmpJelNERXhWakkxV2swNUlESXpRemtnTWpRdU1UQTBOaUE1TGpnNU5UUXpJREkxSURFeElESTFWakl6U0RFeFNEbGFUVGtnTVRoV01qTklNVEZXTVRoSU9WcE5NVEFnTVRsSU1UWldNVGRJTVRCV01UbGFUVEUxSURFNFZqSTBTREUzVmpFNFNERTFXazA1SURFeFZqRTJTREV4VmpFeFNEbGFUVEV4SURsRE9TNDRPVFUwTXlBNUlEa2dPUzQ0T1RVME15QTVJREV4U0RFeFZqRXhWamxhVFRFMklEbElNVEZXTVRGSU1UWldPVnBOTVRVZ01UQldNVFpJTVRkV01UQklNVFZhVFRFMklERTFTREV3VmpFM1NERTJWakUxV2lJZ1ptbHNiRDBpSXpORU9VUkdSaUlnYldGemF6MGlkWEpzS0NOd1lYUm9MVEl0YVc1emFXUmxMVEZmTlRBeFh6WXdOallwSWk4K0NqeHlaV04wSUhnOUlqSXdJaUI1UFNJMUlpQjNhV1IwYUQwaU9TSWdhR1ZwWjJoMFBTSTVJaUJtYVd4c1BTSWpNakV5UlRORUlpOCtDanh0WVhOcklHbGtQU0p3WVhSb0xUVXRhVzV6YVdSbExUSmZOVEF4WHpZd05qWWlJR1pwYkd3OUluZG9hWFJsSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB5TkNBeE1TNDFRekkwSURFeExqYzNOakVnTWpRdU1qSXpPU0F4TWlBeU5DNDFJREV5U0RJMUxqVkRNalV1TnpjMk1TQXhNaUF5TmlBeE1TNDNOell4SURJMklERXhMalZXTVRCSU1qY3VOVU15Tnk0M056WXhJREV3SURJNElEa3VOemMyTVRRZ01qZ2dPUzQxVmpndU5VTXlPQ0E0TGpJeU16ZzJJREkzTGpjM05qRWdPQ0F5Tnk0MUlEaElNalpXTmk0MVF6STJJRFl1TWpJek9EWWdNalV1TnpjMk1TQTJJREkxTGpVZ05rZ3lOQzQxUXpJMExqSXlNemtnTmlBeU5DQTJMakl5TXpnMklESTBJRFl1TlZZNFNESXlMalZETWpJdU1qSXpPU0E0SURJeUlEZ3VNakl6T0RZZ01qSWdPQzQxVmprdU5VTXlNaUE1TGpjM05qRTBJREl5TGpJeU16a2dNVEFnTWpJdU5TQXhNRWd5TkZZeE1TNDFXaUl2UGdvOEwyMWhjMnMrQ2p4d1lYUm9JR1pwYkd3dGNuVnNaVDBpWlhabGJtOWtaQ0lnWTJ4cGNDMXlkV3hsUFNKbGRtVnViMlJrSWlCa1BTSk5NalFnTVRFdU5VTXlOQ0F4TVM0M056WXhJREkwTGpJeU16a2dNVElnTWpRdU5TQXhNa2d5TlM0MVF6STFMamMzTmpFZ01USWdNallnTVRFdU56YzJNU0F5TmlBeE1TNDFWakV3U0RJM0xqVkRNamN1TnpjMk1TQXhNQ0F5T0NBNUxqYzNOakUwSURJNElEa3VOVlk0TGpWRE1qZ2dPQzR5TWpNNE5pQXlOeTQzTnpZeElEZ2dNamN1TlNBNFNESTJWall1TlVNeU5pQTJMakl5TXpnMklESTFMamMzTmpFZ05pQXlOUzQxSURaSU1qUXVOVU15TkM0eU1qTTVJRFlnTWpRZ05pNHlNak00TmlBeU5DQTJMalZXT0VneU1pNDFRekl5TGpJeU16a2dPQ0F5TWlBNExqSXlNemcySURJeUlEZ3VOVlk1TGpWRE1qSWdPUzQzTnpZeE5DQXlNaTR5TWpNNUlERXdJREl5TGpVZ01UQklNalJXTVRFdU5Wb2lJR1pwYkd3OUlpTXpSRGxFUmtZaUx6NEtQSEJoZEdnZ1pEMGlUVEkySURFd1ZqbElNalZXTVRCSU1qWmFUVEkySURoSU1qVldPVWd5TmxZNFdrMHlOQ0E0VmpsSU1qVldPRWd5TkZwTk1qUWdNVEJJTWpWV09VZ3lORll4TUZwTk1qUXVOU0F4TVVNeU5DNDNOell4SURFeElESTFJREV4TGpJeU16a2dNalVnTVRFdU5VZ3lNME15TXlBeE1pNHpNamcwSURJekxqWTNNVFlnTVRNZ01qUXVOU0F4TTFZeE1WcE5NalV1TlNBeE1VZ3lOQzQxVmpFelNESTFMalZXTVRGYVRUSTFJREV4TGpWRE1qVWdNVEV1TWpJek9TQXlOUzR5TWpNNUlERXhJREkxTGpVZ01URldNVE5ETWpZdU16STROQ0F4TXlBeU55QXhNaTR6TWpnMElESTNJREV4TGpWSU1qVmFUVEkxSURFd1ZqRXhMalZJTWpkV01UQklNalZhVFRJM0xqVWdPVWd5TmxZeE1VZ3lOeTQxVmpsYVRUSTNJRGt1TlVNeU55QTVMakl5TXpnMklESTNMakl5TXprZ09TQXlOeTQxSURsV01URkRNamd1TXpJNE5DQXhNU0F5T1NBeE1DNHpNamcwSURJNUlEa3VOVWd5TjFwTk1qY2dPQzQxVmprdU5VZ3lPVlk0TGpWSU1qZGFUVEkzTGpVZ09VTXlOeTR5TWpNNUlEa2dNamNnT0M0M056WXhOQ0F5TnlBNExqVklNamxETWprZ055NDJOekUxTnlBeU9DNHpNamcwSURjZ01qY3VOU0EzVmpsYVRUSTJJRGxJTWpjdU5WWTNTREkyVmpsYVRUSTFJRFl1TlZZNFNESTNWall1TlVneU5WcE5NalV1TlNBM1F6STFMakl5TXprZ055QXlOU0EyTGpjM05qRTBJREkxSURZdU5VZ3lOME15TnlBMUxqWTNNVFUzSURJMkxqTXlPRFFnTlNBeU5TNDFJRFZXTjFwTk1qUXVOU0EzU0RJMUxqVldOVWd5TkM0MVZqZGFUVEkxSURZdU5VTXlOU0EyTGpjM05qRTBJREkwTGpjM05qRWdOeUF5TkM0MUlEZFdOVU15TXk0Mk56RTJJRFVnTWpNZ05TNDJOekUxTnlBeU15QTJMalZJTWpWYVRUSTFJRGhXTmk0MVNESXpWamhJTWpWYVRUSXlMalVnT1VneU5GWTNTREl5TGpWV09WcE5Nak1nT0M0MVF6SXpJRGd1TnpjMk1UUWdNakl1TnpjMk1TQTVJREl5TGpVZ09WWTNRekl4TGpZM01UWWdOeUF5TVNBM0xqWTNNVFUzSURJeElEZ3VOVWd5TTFwTk1qTWdPUzQxVmpndU5VZ3lNVlk1TGpWSU1qTmFUVEl5TGpVZ09VTXlNaTQzTnpZeElEa2dNak1nT1M0eU1qTTROaUF5TXlBNUxqVklNakZETWpFZ01UQXVNekk0TkNBeU1TNDJOekUySURFeElESXlMalVnTVRGV09WcE5NalFnT1VneU1pNDFWakV4U0RJMFZqbGFUVEkxSURFeExqVldNVEJJTWpOV01URXVOVWd5TlZvaUlHWnBiR3c5SWlNelJEbEVSa1lpSUcxaGMyczlJblZ5YkNnamNHRjBhQzAxTFdsdWMybGtaUzB5WHpVd01WODJNRFkyS1NJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNelFpSUdobGFXZG9kRDBpTXpRaUlIWnBaWGRDYjNnOUlqQWdNQ0F6TkNBek5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEhKbFkzUWdkMmxrZEdnOUlqTTBJaUJvWldsbmFIUTlJak0wSWlCeWVEMGlNVEFpSUdacGJHdzlJaU14UmpNeU5EY2lMejRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHhNaUF4TjBNeE1pQXhOQzR5TXpnMklERTBMakl6T0RZZ01USWdNVGNnTVRKV01UZFdNakpETVRRdU1qTTROaUF5TWlBeE1pQXhPUzQzTmpFMElERXlJREUzV2sweE55QXhNRU14TXk0eE16UWdNVEFnTVRBZ01UTXVNVE0wSURFd0lERTNRekV3SURJd0xqZzJOaUF4TXk0eE16UWdNalFnTVRjZ01qUkRNakF1T0RZMklESTBJREkwSURJd0xqZzJOaUF5TkNBeE4wTXlOQ0F4TXk0eE16UWdNakF1T0RZMklERXdJREUzSURFd1dpSWdabWxzYkQwaUl6TkVPVVJHUmlJdlBnbzhjR0YwYUNCa1BTSk5NVGNnTlM0d09ETXpORlkzTGpJMUlpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazB4TnlBeU5pNDNOVll5T0M0NU1UWTNJaUJ6ZEhKdmEyVTlJaU16UkRsRVJrWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWswNExqVTNNVFkzSURndU5UY3hOamRNTVRBdU1URWdNVEF1TVRFaUlITjBjbTlyWlQwaUl6TkVPVVJHUmlJZ2MzUnliMnRsTFhkcFpIUm9QU0l5SWlCemRISnZhMlV0YkdsdVpXTmhjRDBpY205MWJtUWlJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUx6NEtQSEJoZEdnZ1pEMGlUVEl6TGpnNUlESXpMamc1VERJMUxqUXlPRE1nTWpVdU5ESTRNeUlnYzNSeWIydGxQU0lqTTBRNVJFWkdJaUJ6ZEhKdmEyVXRkMmxrZEdnOUlqSWlJSE4wY205clpTMXNhVzVsWTJGd1BTSnliM1Z1WkNJZ2MzUnliMnRsTFd4cGJtVnFiMmx1UFNKeWIzVnVaQ0l2UGdvOGNHRjBhQ0JrUFNKTk5TNHdPRE16TkNBeE4wZzNMakkxSWlCemRISnZhMlU5SWlNelJEbEVSa1lpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHlOaTQzTlNBeE4wZ3lPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXpSRGxFUmtZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJREkxTGpReU9ETk1NVEF1TVRFZ01qTXVPRGtpSUhOMGNtOXJaVDBpSXpORU9VUkdSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURFd0xqRXhUREkxTGpReU9ETWdPQzQxTnpFMk55SWdjM1J5YjJ0bFBTSWpNMFE1UkVaR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BHTnBjbU5zWlNCamVEMGlNVFl1TlNJZ1kzazlJakUyTGpVaUlISTlJamt1TlNJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TXkxcGJuTnBaR1V0TVY4MU1ETmZOVFl4TlNJZ1ptbHNiRDBpZDJocGRHVWlQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTBMalk0TWlBeU1DNDBNekpETVRRdU9EYzNNaUF5TUM0Mk1qY3lJREUxTGpFNU16Z2dNakF1TmpJM01pQXhOUzR6T0RreElESXdMalF6TWt3eE5pNHdPVFl5SURFNUxqY3lORGxNTWpFdU5qVTFNeUF4TkM0eE5qVTNRekl4TGpnMU1EWWdNVE11T1Rjd05TQXlNUzQ0TlRBMklERXpMalkxTXprZ01qRXVOalUxTXlBeE15NDBOVGcyVERJd0xqazBPRElnTVRJdU56VXhOVU15TUM0M05UTWdNVEl1TlRVMk15QXlNQzQwTXpZMElERXlMalUxTmpNZ01qQXVNalF4TVNBeE1pNDNOVEUxVERFMUxqQXpOVFVnTVRjdU9UVTNNVXd4TXk0eU5qYzRJREUyTGpFNE9UTkRNVE11TURjeU5TQXhOUzQ1T1RReElERXlMamMxTlRrZ01UVXVPVGswTVNBeE1pNDFOakEzSURFMkxqRTRPVE5NTVRFdU9EVXpOaUF4Tmk0NE9UWTBRekV4TGpZMU9ETWdNVGN1TURreE55QXhNUzQyTlRneklERTNMalF3T0RNZ01URXVPRFV6TmlBeE55NDJNRE0yVERFekxqazNORGtnTVRrdU56STBPVXd4TkM0Mk9ESWdNakF1TkRNeVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1UUXVOamd5SURJd0xqUXpNa014TkM0NE56Y3lJREl3TGpZeU56SWdNVFV1TVRrek9DQXlNQzQyTWpjeUlERTFMak00T1RFZ01qQXVORE15VERFMkxqQTVOaklnTVRrdU56STBPVXd5TVM0Mk5UVXpJREUwTGpFMk5UZERNakV1T0RVd05pQXhNeTQ1TnpBMUlESXhMamcxTURZZ01UTXVOalV6T1NBeU1TNDJOVFV6SURFekxqUTFPRFpNTWpBdU9UUTRNaUF4TWk0M05URTFRekl3TGpjMU15QXhNaTQxTlRZeklESXdMalF6TmpRZ01USXVOVFUyTXlBeU1DNHlOREV4SURFeUxqYzFNVFZNTVRVdU1ETTFOU0F4Tnk0NU5UY3hUREV6TGpJMk56Z2dNVFl1TVRnNU0wTXhNeTR3TnpJMUlERTFMams1TkRFZ01USXVOelUxT1NBeE5TNDVPVFF4SURFeUxqVTJNRGNnTVRZdU1UZzVNMHd4TVM0NE5UTTJJREUyTGpnNU5qUkRNVEV1TmpVNE15QXhOeTR3T1RFM0lERXhMalkxT0RNZ01UY3VOREE0TXlBeE1TNDROVE0ySURFM0xqWXdNelpNTVRNdU9UYzBPU0F4T1M0M01qUTVUREUwTGpZNE1pQXlNQzQwTXpKYUlpQm1hV3hzUFNJak1FTTNORVJHSWk4K0NqeHdZWFJvSUdROUlrMHhOUzR3TXpVMUlERTNMamsxTnpGTU1UUXVNekk0TkNBeE9DNDJOalF5VERFMUxqQXpOVFVnTVRrdU16Y3hNMHd4TlM0M05ESTJJREU0TGpZMk5ESk1NVFV1TURNMU5TQXhOeTQ1TlRjeFdrMHhOQzQyT0RJZ01Ua3VOekkwT1VNeE5DNDROemN5SURFNUxqVXlPVFlnTVRVdU1Ua3pPQ0F4T1M0MU1qazJJREUxTGpNNE9URWdNVGt1TnpJME9Vd3hNeTQ1TnpRNUlESXhMakV6T1RGRE1UUXVOVFl3TnlBeU1TNDNNalE1SURFMUxqVXhNRFFnTWpFdU56STBPU0F4Tmk0d09UWXlJREl4TGpFek9URk1NVFF1TmpneUlERTVMamN5TkRsYVRURTFMak00T1RFZ01Ua3VNREUzT0V3eE5DNDJPRElnTVRrdU56STBPVXd4Tmk0d09UWXlJREl4TGpFek9URk1NVFl1T0RBek15QXlNQzQwTXpKTU1UVXVNemc1TVNBeE9TNHdNVGM0V2sweU1DNDVORGd5SURFekxqUTFPRFpNTVRVdU16ZzVNU0F4T1M0d01UYzRUREUyTGpnd016TWdNakF1TkRNeVRESXlMak0yTWpRZ01UUXVPRGN5T0V3eU1DNDVORGd5SURFekxqUTFPRFphVFRJd0xqazBPRElnTVRRdU1UWTFOME15TUM0M05UTWdNVE11T1Rjd05TQXlNQzQzTlRNZ01UTXVOalV6T1NBeU1DNDVORGd5SURFekxqUTFPRFpNTWpJdU16WXlOQ0F4TkM0NE56STRRekl5TGprME9ESWdNVFF1TWpnM01TQXlNaTQ1TkRneUlERXpMak16TnpNZ01qSXVNell5TkNBeE1pNDNOVEUxVERJd0xqazBPRElnTVRRdU1UWTFOMXBOTWpBdU1qUXhNU0F4TXk0ME5UZzJUREl3TGprME9ESWdNVFF1TVRZMU4wd3lNaTR6TmpJMElERXlMamMxTVRWTU1qRXVOalUxTXlBeE1pNHdORFEwVERJd0xqSTBNVEVnTVRNdU5EVTRObHBOTWpBdU9UUTRNaUF4TXk0ME5UZzJRekl3TGpjMU15QXhNeTQyTlRNNUlESXdMalF6TmpRZ01UTXVOalV6T1NBeU1DNHlOREV4SURFekxqUTFPRFpNTWpFdU5qVTFNeUF4TWk0d05EUTBRekl4TGpBMk9UVWdNVEV1TkRVNE5pQXlNQzR4TVRrNElERXhMalExT0RZZ01Ua3VOVE0wSURFeUxqQTBORFJNTWpBdU9UUTRNaUF4TXk0ME5UZzJXazB4TlM0M05ESTJJREU0TGpZMk5ESk1NakF1T1RRNE1pQXhNeTQwTlRnMlRERTVMalV6TkNBeE1pNHdORFEwVERFMExqTXlPRFFnTVRjdU1qVk1NVFV1TnpReU5pQXhPQzQyTmpReVdrMHhNaTQxTmpBM0lERTJMamc1TmpSTU1UUXVNekk0TkNBeE9DNDJOalF5VERFMUxqYzBNallnTVRjdU1qVk1NVE11T1RjME9TQXhOUzQwT0RJeVRERXlMalUyTURjZ01UWXVPRGsyTkZwTk1UTXVNalkzT0NBeE5pNDRPVFkwUXpFekxqQTNNalVnTVRjdU1Ea3hOeUF4TWk0M05UVTVJREUzTGpBNU1UY2dNVEl1TlRZd055QXhOaTQ0T1RZMFRERXpMamszTkRrZ01UVXVORGd5TWtNeE15NHpPRGt4SURFMExqZzVOalFnTVRJdU5ETTVNeUF4TkM0NE9UWTBJREV4TGpnMU16WWdNVFV1TkRneU1rd3hNeTR5TmpjNElERTJMamc1TmpSYVRURXlMalUyTURjZ01UY3VOakF6Tmt3eE15NHlOamM0SURFMkxqZzVOalJNTVRFdU9EVXpOaUF4TlM0ME9ESXlUREV4TGpFME5qUWdNVFl1TVRnNU0wd3hNaTQxTmpBM0lERTNMall3TXpaYVRURXlMalUyTURjZ01UWXVPRGsyTkVNeE1pNDNOVFU1SURFM0xqQTVNVGNnTVRJdU56VTFPU0F4Tnk0ME1EZ3pJREV5TGpVMk1EY2dNVGN1TmpBek5rd3hNUzR4TkRZMElERTJMakU0T1RORE1UQXVOVFl3TnlBeE5pNDNOelV4SURFd0xqVTJNRGNnTVRjdU56STBPU0F4TVM0eE5EWTBJREU0TGpNeE1EZE1NVEl1TlRZd055QXhOaTQ0T1RZMFdrMHhOQzQyT0RJZ01Ua3VNREUzT0V3eE1pNDFOakEzSURFMkxqZzVOalJNTVRFdU1UUTJOQ0F4T0M0ek1UQTNUREV6TGpJMk56Z2dNakF1TkRNeVRERTBMalk0TWlBeE9TNHdNVGM0V2sweE5TNHpPRGt4SURFNUxqY3lORGxNTVRRdU5qZ3lJREU1TGpBeE56aE1NVE11TWpZM09DQXlNQzQwTXpKTU1UTXVPVGMwT1NBeU1TNHhNemt4VERFMUxqTTRPVEVnTVRrdU56STBPVm9pSUdacGJHdzlJaU13UXpjMFJFWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMHpMV2x1YzJsa1pTMHhYelV3TTE4MU5qRTFLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UVWlJR2hsYVdkb2REMGlNVFVpSUhacFpYZENiM2c5SWpBZ01DQXhOU0F4TlNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWswd0lEY3VOVU13SURNdU5DQXpMalFnTUNBM0xqVWdNRU14TVM0MklEQWdNVFVnTXk0MElERTFJRGN1TlVNeE5TQXhNUzQySURFeExqWWdNVFVnTnk0MUlERTFRek11TkNBeE5TQXdJREV4TGpZZ01DQTNMalZhVFRFZ055NDFRekVnTVRFdU1TQXpMamtnTVRRZ055NDFJREUwUXpFeExqRWdNVFFnTVRRZ01URXVNU0F4TkNBM0xqVkRNVFFnTXk0NUlERXhMakVnTVNBM0xqVWdNVU16TGprZ01TQXhJRE11T1NBeElEY3VOVnBOT0NBeE1WWXhNa2czVmpFeFNEaGFUVFVnTlM0MVF6VWdOQzR4SURZdU1TQXpJRGN1TlNBelF6Z3VPU0F6SURFd0lEUXVNU0F4TUNBMUxqVkRNVEFnTmk0M01qZ3dNaUE1TGpNNE5EUTRJRGN1TVRnMk5qTWdPQzQ0T1RVNE1TQTNMalUxTURjelF6Z3VPREkzTXpjZ055NDJNREUzTWlBNExqYzJNVFF5SURjdU5qVXdPRFlnT0M0M0lEY3VOME00TGpZM05qWXpJRGN1TnpFME1ESWdPQzQyTlRNNU1TQTNMamN5TnpZeElEZ3VOak14T0RRZ055NDNOREE0TVVNNExqRTRNVGMwSURndU1ERWdPQ0E0TGpFeE9EY2dPQ0E0TGpWV09WWXhNRWczVmpsV09DNDFRemNnTnk0MU9UVTBOQ0EzTGpVM01qYzFJRGN1TVRneE9ESWdOeTQ1TnpneE5DQTJMamc0T1RBM1F6Z3VNREl3T1RFZ05pNDROVGd4T0NBNExqQTJNVGd5SURZdU9ESTROak1nT0M0eElEWXVPRU00TGpFeU1qazNJRFl1TnpnMk1qSWdPQzR4TkRVM01pQTJMamMzTWpZMUlEZ3VNVFk0TWpRZ05pNDNOVGt5TWtNNExqWXpOVGtnTmk0ME9EQXpOaUE1SURZdU1qWXpNalVnT1NBMUxqVkRPU0EwTGpjZ09DNHpJRFFnTnk0MUlEUkROaTQzSURRZ05pQTBMamNnTmlBMUxqVldOa2cxVmpVdU5Wb2lJR1pwYkd3OUlpTTJSVGMxTnpVaUx6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRZaUlHaGxhV2RvZEQwaU1UWWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5pQXhOaUlnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWm1sc2JDMXlkV3hsUFNKbGRtVnViMlJrSWlCamJHbHdMWEoxYkdVOUltVjJaVzV2WkdRaUlHUTlJazB3SURjdU5VTXdJRE11TkNBekxqUWdNQ0EzTGpVZ01FTXhNUzQySURBZ01UVWdNeTQwSURFMUlEY3VOVU14TlNBeE1TNDJJREV4TGpZZ01UVWdOeTQxSURFMVF6TXVOQ0F4TlNBd0lERXhMallnTUNBM0xqVmFUVEVnTnk0MVF6RWdNVEV1TVNBekxqa2dNVFFnTnk0MUlERTBRekV4TGpFZ01UUWdNVFFnTVRFdU1TQXhOQ0EzTGpWRE1UUWdNeTQ1SURFeExqRWdNU0EzTGpVZ01VTXpMamtnTVNBeElETXVPU0F4SURjdU5WcE5PQ0EwVmpWSU4xWTBTRGhhVFRnZ01URldOa2czVmpFeFNEaGFJaUJtYVd4c1BTSWpPREU0TVRneElpOCtDand2YzNablBnbz1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZUQwaU1DNDFJaUI1UFNJd0xqVWlJSGRwWkhSb1BTSTVJaUJvWldsbmFIUTlJamtpSUhOMGNtOXJaVDBpWW14aFkyc2lMejRLUEhKbFkzUWdlRDBpTkM0MUlpQjVQU0kwTGpVaUlIZHBaSFJvUFNJNUlpQm9aV2xuYUhROUlqa2lJSE4wY205clpUMGlZbXhoWTJzaUx6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BHTnBjbU5zWlNCamVEMGlOeUlnWTNrOUlqY2lJSEk5SWpZdU5TSWdjM1J5YjJ0bFBTSmliR0ZqYXlJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEd4cGJtVWdlVEU5SWpZdU5TSWdlREk5SWpFMElpQjVNajBpTmk0MUlpQnpkSEp2YTJVOUltSnNZV05ySWk4K0Nqd3ZjM1puUGdvPVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVFFpSUdobGFXZG9kRDBpTVRRaUlIWnBaWGRDYjNnOUlqQWdNQ0F4TkNBeE5DSWdabWxzYkQwaWJtOXVaU0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLUEdjZ1kyeHBjQzF3WVhSb1BTSjFjbXdvSTJOc2FYQXdYekl3TUY4ME5qQTRLU0krQ2p4d1lYUm9JR1E5SWswd0xqa3pOemd5TWlBeE1pNDFURGNnTWt3eE15NHdOakl5SURFeUxqVklNQzQ1TXpjNE1qSmFJaUJ6ZEhKdmEyVTlJbUpzWVdOcklpOCtDand2Wno0S1BHUmxabk0rQ2p4amJHbHdVR0YwYUNCcFpEMGlZMnhwY0RCZk1qQXdYelEyTURnaVBnbzhjbVZqZENCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJR1pwYkd3OUluZG9hWFJsSWk4K0Nqd3ZZMnhwY0ZCaGRHZytDand2WkdWbWN6NEtQQzl6ZG1jK0NnPT1cIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTVRRaUlHaGxhV2RvZEQwaU1UUWlJSFpwWlhkQ2IzZzlJakFnTUNBeE5DQXhOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BIQmhkR2dnWkQwaVRURXlJREpJTWxZeE1rZ3hNbFl5V2lJZ2MzUnliMnRsUFNKaWJHRmpheUl2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU1UUWlJR2hsYVdkb2REMGlNVFFpSUhacFpYZENiM2c5SWpBZ01DQXhOQ0F4TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpFMElpQm9aV2xuYUhROUlqRTBJaUJtYVd4c1BTSjNhR2wwWlNJdlBnbzhjR0YwYUNCa1BTSk5NaUF5U0RFeVZqVklNVEZXTTBnM0xqVldNVEZJT1ZZeE1rZzFWakV4U0RZdU5WWXpTRE5XTlVneVZqSmFJaUJtYVd4c1BTSmliR0ZqYXlJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVE1pSUdobGFXZG9kRDBpTXlJZ2RtbGxkMEp2ZUQwaU1DQXdJREV6SURNaUlHWnBiR3c5SW01dmJtVWlJSGh0Ykc1elBTSm9kSFJ3T2k4dmQzZDNMbmN6TG05eVp5OHlNREF3TDNOMlp5SStDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk15QXhMakkxUXpNZ01TNDVOREF6TmlBeUxqUTBNRE0ySURJdU5TQXhMamMxSURJdU5VTXhMakExT1RZMElESXVOU0F3TGpVZ01TNDVOREF6TmlBd0xqVWdNUzR5TlVNd0xqVWdNQzQxTlRrMk5EUWdNUzR3TlRrMk5DQXdJREV1TnpVZ01FTXlMalEwTURNMklEQWdNeUF3TGpVMU9UWTBOQ0F6SURFdU1qVmFUVGdnTVM0eU5VTTRJREV1T1RRd016WWdOeTQwTkRBek5pQXlMalVnTmk0M05TQXlMalZETmk0d05UazJOQ0F5TGpVZ05TNDFJREV1T1RRd016WWdOUzQxSURFdU1qVkROUzQxSURBdU5UVTVOalEwSURZdU1EVTVOalFnTUNBMkxqYzFJREJETnk0ME5EQXpOaUF3SURnZ01DNDFOVGsyTkRRZ09DQXhMakkxV2sweE1TNDNOU0F5TGpWRE1USXVORFF3TkNBeUxqVWdNVE1nTVM0NU5EQXpOaUF4TXlBeExqSTFRekV6SURBdU5UVTVOalEwSURFeUxqUTBNRFFnTUNBeE1TNDNOU0F3UXpFeExqQTFPVFlnTUNBeE1DNDFJREF1TlRVNU5qUTBJREV3TGpVZ01TNHlOVU14TUM0MUlERXVPVFF3TXpZZ01URXVNRFU1TmlBeUxqVWdNVEV1TnpVZ01pNDFXaUlnWm1sc2JEMGlJelUxTmpBMk1DSXZQZ284TDNOMlp6NEtcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTXpRaUlHaGxhV2RvZEQwaU16UWlJSFpwWlhkQ2IzZzlJakFnTUNBek5DQXpOQ0lnWm1sc2JEMGlibTl1WlNJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S1BISmxZM1FnZDJsa2RHZzlJak0wSWlCb1pXbG5hSFE5SWpNMElpQnllRDBpTVRBaUlHWnBiR3c5SWlORlJrWTRSa1lpTHo0S1BHMWhjMnNnYVdROUluQmhkR2d0TWkxcGJuTnBaR1V0TVY4MU1ERmZOakEyTmlJZ1ptbHNiRDBpZDJocGRHVWlQZ284Y0dGMGFDQm1hV3hzTFhKMWJHVTlJbVYyWlc1dlpHUWlJR05zYVhBdGNuVnNaVDBpWlhabGJtOWtaQ0lnWkQwaVRURTRJREV3U0RJelF6SXpMalUxTWpNZ01UQWdNalFnTVRBdU5EUTNOeUF5TkNBeE1WWXhOa2d4T0ZZeE1GcE5NVFlnT0VneE9FZ3lNME15TkM0Mk5UWTVJRGdnTWpZZ09TNHpORE14TlNBeU5pQXhNVll5TTBNeU5pQXlOQzQyTlRZNUlESTBMalkxTmprZ01qWWdNak1nTWpaSU1UaElNVFpJTVRGRE9TNHpORE14TlNBeU5pQTRJREkwTGpZMU5qa2dPQ0F5TTFZeE1VTTRJRGt1TXpRek1UVWdPUzR6TkRNeE5TQTRJREV4SURoSU1UWmFUVEU0SURJMFNESXpRekl6TGpVMU1qTWdNalFnTWpRZ01qTXVOVFV5TXlBeU5DQXlNMVl4T0VneE9GWXlORnBOTVRZZ01qUklNVEZETVRBdU5EUTNOeUF5TkNBeE1DQXlNeTQxTlRJeklERXdJREl6VmpFNFNERTJWakkwV2sweE1DQXhObFl4TVVNeE1DQXhNQzQwTkRjM0lERXdMalEwTnpjZ01UQWdNVEVnTVRCSU1UWldNVFpJTVRCYUlpOCtDand2YldGemF6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE9DQXhNRWd5TTBNeU15NDFOVEl6SURFd0lESTBJREV3TGpRME56Y2dNalFnTVRGV01UWklNVGhXTVRCYVRURTJJRGhJTVRoSU1qTkRNalF1TmpVMk9TQTRJREkySURrdU16UXpNVFVnTWpZZ01URldNak5ETWpZZ01qUXVOalUyT1NBeU5DNDJOVFk1SURJMklESXpJREkyU0RFNFNERTJTREV4UXprdU16UXpNVFVnTWpZZ09DQXlOQzQyTlRZNUlEZ2dNak5XTVRGRE9DQTVMak0wTXpFMUlEa3VNelF6TVRVZ09DQXhNU0E0U0RFMldrMHhPQ0F5TkVneU0wTXlNeTQxTlRJeklESTBJREkwSURJekxqVTFNak1nTWpRZ01qTldNVGhJTVRoV01qUmFUVEUySURJMFNERXhRekV3TGpRME56Y2dNalFnTVRBZ01qTXVOVFV5TXlBeE1DQXlNMVl4T0VneE5sWXlORnBOTVRBZ01UWldNVEZETVRBZ01UQXVORFEzTnlBeE1DNDBORGMzSURFd0lERXhJREV3U0RFMlZqRTJTREV3V2lJZ1ptbHNiRDBpZDJocGRHVWlMejRLUEhCaGRHZ2daRDBpVFRFNElERXdWamxJTVRkV01UQklNVGhhVFRJMElERTJWakUzU0RJMVZqRTJTREkwV2sweE9DQXhOa2d4TjFZeE4wZ3hPRll4TmxwTk1UZ2dNalJJTVRkV01qVklNVGhXTWpSYVRUSTBJREU0U0RJMVZqRTNTREkwVmpFNFdrMHhPQ0F4T0ZZeE4wZ3hOMVl4T0VneE9GcE5NVFlnTWpSV01qVklNVGRXTWpSSU1UWmFUVEV3SURFNFZqRTNTRGxXTVRoSU1UQmFUVEUySURFNFNERTNWakUzU0RFMlZqRTRXazB4TUNBeE5rZzVWakUzU0RFd1ZqRTJXazB4TmlBeE1FZ3hOMVk1U0RFMlZqRXdXazB4TmlBeE5sWXhOMGd4TjFZeE5rZ3hObHBOTWpNZ09VZ3hPRll4TVVneU0xWTVXazB5TlNBeE1VTXlOU0E1TGpnNU5UUXpJREkwTGpFd05EWWdPU0F5TXlBNVZqRXhTREkxV2sweU5TQXhObFl4TVVneU0xWXhOa2d5TlZwTk1qUWdNVFZJTVRoV01UZElNalJXTVRWYVRURTVJREUyVmpFd1NERTNWakUyU0RFNVdrMHhPQ0EzU0RFMlZqbElNVGhXTjFwTk1qTWdOMGd4T0ZZNVNESXpWamRhVFRJM0lERXhRekkzSURndU56a3dPRFlnTWpVdU1qQTVNU0EzSURJeklEZFdPVU15TkM0eE1EUTJJRGtnTWpVZ09TNDRPVFUwTXlBeU5TQXhNVWd5TjFwTk1qY2dNak5XTVRGSU1qVldNak5JTWpkYVRUSXpJREkzUXpJMUxqSXdPVEVnTWpjZ01qY2dNalV1TWpBNU1TQXlOeUF5TTBneU5VTXlOU0F5TkM0eE1EUTJJREkwTGpFd05EWWdNalVnTWpNZ01qVldNamRhVFRFNElESTNTREl6VmpJMVNERTRWakkzV2sweE5pQXlOMGd4T0ZZeU5VZ3hObFl5TjFwTk1URWdNamRJTVRaV01qVklNVEZXTWpkYVRUY2dNak5ETnlBeU5TNHlNRGt4SURndU56a3dPRFlnTWpjZ01URWdNamRXTWpWRE9TNDRPVFUwTXlBeU5TQTVJREkwTGpFd05EWWdPU0F5TTBnM1drMDNJREV4VmpJelNEbFdNVEZJTjFwTk1URWdOME00TGpjNU1EZzJJRGNnTnlBNExqYzVNRGcySURjZ01URklPVU01SURrdU9EazFORE1nT1M0NE9UVTBNeUE1SURFeElEbFdOMXBOTVRZZ04wZ3hNVlk1U0RFMlZqZGFUVEU0SURJMVNESXpWakl6U0RFNFZqSTFXazB5TXlBeU5VTXlOQzR4TURRMklESTFJREkxSURJMExqRXdORFlnTWpVZ01qTklNak5XTWpWYVRUSTFJREl6VmpFNFNESXpWakl6U0RJMVdrMHhPQ0F4T1VneU5GWXhOMGd4T0ZZeE9WcE5NVGtnTWpSV01UaElNVGRXTWpSSU1UbGFUVEV4SURJMVNERTJWakl6U0RFeFZqSTFXazA1SURJelF6a2dNalF1TVRBME5pQTVMamc1TlRReklESTFJREV4SURJMVZqSXpTREV4U0RsYVRUa2dNVGhXTWpOSU1URldNVGhJT1ZwTk1UQWdNVGxJTVRaV01UZElNVEJXTVRsYVRURTFJREU0VmpJMFNERTNWakU0U0RFMVdrMDVJREV4VmpFMlNERXhWakV4U0RsYVRURXhJRGxET1M0NE9UVTBNeUE1SURrZ09TNDRPVFUwTXlBNUlERXhTREV4VmpFeFZqbGFUVEUySURsSU1URldNVEZJTVRaV09WcE5NVFVnTVRCV01UWklNVGRXTVRCSU1UVmFUVEUySURFMVNERXdWakUzU0RFMlZqRTFXaUlnWm1sc2JEMGlJekJETnpSRVJpSWdiV0Z6YXowaWRYSnNLQ053WVhSb0xUSXRhVzV6YVdSbExURmZOVEF4WHpZd05qWXBJaTgrQ2p4eVpXTjBJSGc5SWpJd0lpQjVQU0kxSWlCM2FXUjBhRDBpT1NJZ2FHVnBaMmgwUFNJNUlpQm1hV3hzUFNJalJVWkdPRVpHSWk4K0NqeHRZWE5ySUdsa1BTSndZWFJvTFRVdGFXNXphV1JsTFRKZk5UQXhYell3TmpZaUlHWnBiR3c5SW5kb2FYUmxJajRLUEhCaGRHZ2dabWxzYkMxeWRXeGxQU0psZG1WdWIyUmtJaUJqYkdsd0xYSjFiR1U5SW1WMlpXNXZaR1FpSUdROUlrMHlOQ0F4TVM0MVF6STBJREV4TGpjM05qRWdNalF1TWpJek9TQXhNaUF5TkM0MUlERXlTREkxTGpWRE1qVXVOemMyTVNBeE1pQXlOaUF4TVM0M056WXhJREkySURFeExqVldNVEJJTWpjdU5VTXlOeTQzTnpZeElERXdJREk0SURrdU56YzJNVFFnTWpnZ09TNDFWamd1TlVNeU9DQTRMakl5TXpnMklESTNMamMzTmpFZ09DQXlOeTQxSURoSU1qWldOaTQxUXpJMklEWXVNakl6T0RZZ01qVXVOemMyTVNBMklESTFMalVnTmtneU5DNDFRekkwTGpJeU16a2dOaUF5TkNBMkxqSXlNemcySURJMElEWXVOVlk0U0RJeUxqVkRNakl1TWpJek9TQTRJREl5SURndU1qSXpPRFlnTWpJZ09DNDFWamt1TlVNeU1pQTVMamMzTmpFMElESXlMakl5TXprZ01UQWdNakl1TlNBeE1FZ3lORll4TVM0MVdpSXZQZ284TDIxaGMycytDanh3WVhSb0lHWnBiR3d0Y25Wc1pUMGlaWFpsYm05a1pDSWdZMnhwY0MxeWRXeGxQU0psZG1WdWIyUmtJaUJrUFNKTk1qUWdNVEV1TlVNeU5DQXhNUzQzTnpZeElESTBMakl5TXprZ01USWdNalF1TlNBeE1rZ3lOUzQxUXpJMUxqYzNOakVnTVRJZ01qWWdNVEV1TnpjMk1TQXlOaUF4TVM0MVZqRXdTREkzTGpWRE1qY3VOemMyTVNBeE1DQXlPQ0E1TGpjM05qRTBJREk0SURrdU5WWTRMalZETWpnZ09DNHlNak00TmlBeU55NDNOell4SURnZ01qY3VOU0E0U0RJMlZqWXVOVU15TmlBMkxqSXlNemcySURJMUxqYzNOakVnTmlBeU5TNDFJRFpJTWpRdU5VTXlOQzR5TWpNNUlEWWdNalFnTmk0eU1qTTROaUF5TkNBMkxqVldPRWd5TWk0MVF6SXlMakl5TXprZ09DQXlNaUE0TGpJeU16ZzJJREl5SURndU5WWTVMalZETWpJZ09TNDNOell4TkNBeU1pNHlNak01SURFd0lESXlMalVnTVRCSU1qUldNVEV1TlZvaUlHWnBiR3c5SWlNd1F6YzBSRVlpTHo0S1BIQmhkR2dnWkQwaVRUSTJJREV3VmpsSU1qVldNVEJJTWpaYVRUSTJJRGhJTWpWV09VZ3lObFk0V2sweU5DQTRWamxJTWpWV09FZ3lORnBOTWpRZ01UQklNalZXT1VneU5GWXhNRnBOTWpRdU5TQXhNVU15TkM0M056WXhJREV4SURJMUlERXhMakl5TXprZ01qVWdNVEV1TlVneU0wTXlNeUF4TWk0ek1qZzBJREl6TGpZM01UWWdNVE1nTWpRdU5TQXhNMVl4TVZwTk1qVXVOU0F4TVVneU5DNDFWakV6U0RJMUxqVldNVEZhVFRJMUlERXhMalZETWpVZ01URXVNakl6T1NBeU5TNHlNak01SURFeElESTFMalVnTVRGV01UTkRNall1TXpJNE5DQXhNeUF5TnlBeE1pNHpNamcwSURJM0lERXhMalZJTWpWYVRUSTFJREV3VmpFeExqVklNamRXTVRCSU1qVmFUVEkzTGpVZ09VZ3lObFl4TVVneU55NDFWamxhVFRJM0lEa3VOVU15TnlBNUxqSXlNemcySURJM0xqSXlNemtnT1NBeU55NDFJRGxXTVRGRE1qZ3VNekk0TkNBeE1TQXlPU0F4TUM0ek1qZzBJREk1SURrdU5VZ3lOMXBOTWpjZ09DNDFWamt1TlVneU9WWTRMalZJTWpkYVRUSTNMalVnT1VNeU55NHlNak01SURrZ01qY2dPQzQzTnpZeE5DQXlOeUE0TGpWSU1qbERNamtnTnk0Mk56RTFOeUF5T0M0ek1qZzBJRGNnTWpjdU5TQTNWamxhVFRJMklEbElNamN1TlZZM1NESTJWamxhVFRJMUlEWXVOVlk0U0RJM1ZqWXVOVWd5TlZwTk1qVXVOU0EzUXpJMUxqSXlNemtnTnlBeU5TQTJMamMzTmpFMElESTFJRFl1TlVneU4wTXlOeUExTGpZM01UVTNJREkyTGpNeU9EUWdOU0F5TlM0MUlEVldOMXBOTWpRdU5TQTNTREkxTGpWV05VZ3lOQzQxVmpkYVRUSTFJRFl1TlVNeU5TQTJMamMzTmpFMElESTBMamMzTmpFZ055QXlOQzQxSURkV05VTXlNeTQyTnpFMklEVWdNak1nTlM0Mk56RTFOeUF5TXlBMkxqVklNalZhVFRJMUlEaFdOaTQxU0RJelZqaElNalZhVFRJeUxqVWdPVWd5TkZZM1NESXlMalZXT1ZwTk1qTWdPQzQxUXpJeklEZ3VOemMyTVRRZ01qSXVOemMyTVNBNUlESXlMalVnT1ZZM1F6SXhMalkzTVRZZ055QXlNU0EzTGpZM01UVTNJREl4SURndU5VZ3lNMXBOTWpNZ09TNDFWamd1TlVneU1WWTVMalZJTWpOYVRUSXlMalVnT1VNeU1pNDNOell4SURrZ01qTWdPUzR5TWpNNE5pQXlNeUE1TGpWSU1qRkRNakVnTVRBdU16STROQ0F5TVM0Mk56RTJJREV4SURJeUxqVWdNVEZXT1ZwTk1qUWdPVWd5TWk0MVZqRXhTREkwVmpsYVRUSTFJREV4TGpWV01UQklNak5XTVRFdU5VZ3lOVm9pSUdacGJHdzlJaU13UXpjMFJFWWlJRzFoYzJzOUluVnliQ2dqY0dGMGFDMDFMV2x1YzJsa1pTMHlYelV3TVY4Mk1EWTJLU0l2UGdvOEwzTjJaejRLXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QjNhV1IwYUQwaU16UWlJR2hsYVdkb2REMGlNelFpSUhacFpYZENiM2c5SWpBZ01DQXpOQ0F6TkNJZ1ptbHNiRDBpYm05dVpTSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtQSEpsWTNRZ2QybGtkR2c5SWpNMElpQm9aV2xuYUhROUlqTTBJaUJ5ZUQwaU1UQWlJR1pwYkd3OUlpTkZSa1k0UmtZaUx6NEtQSEJoZEdnZ1ptbHNiQzF5ZFd4bFBTSmxkbVZ1YjJSa0lpQmpiR2x3TFhKMWJHVTlJbVYyWlc1dlpHUWlJR1E5SWsweE1pQXhOME14TWlBeE5DNHlNemcySURFMExqSXpPRFlnTVRJZ01UY2dNVEpXTVRkV01qSkRNVFF1TWpNNE5pQXlNaUF4TWlBeE9TNDNOakUwSURFeUlERTNXazB4TnlBeE1FTXhNeTR4TXpRZ01UQWdNVEFnTVRNdU1UTTBJREV3SURFM1F6RXdJREl3TGpnMk5pQXhNeTR4TXpRZ01qUWdNVGNnTWpSRE1qQXVPRFkySURJMElESTBJREl3TGpnMk5pQXlOQ0F4TjBNeU5DQXhNeTR4TXpRZ01qQXVPRFkySURFd0lERTNJREV3V2lJZ1ptbHNiRDBpSXpCRE56UkVSaUl2UGdvOGNHRjBhQ0JrUFNKTk1UY2dOUzR3T0RNek5GWTNMakkxSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMHhOeUF5Tmk0M05WWXlPQzQ1TVRZM0lpQnpkSEp2YTJVOUlpTXdRemMwUkVZaUlITjBjbTlyWlMxM2FXUjBhRDBpTWlJZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJaUJ6ZEhKdmEyVXRiR2x1WldwdmFXNDlJbkp2ZFc1a0lpOCtDanh3WVhSb0lHUTlJazA0TGpVM01UWTNJRGd1TlRjeE5qZE1NVEF1TVRFZ01UQXVNVEVpSUhOMGNtOXJaVDBpSXpCRE56UkVSaUlnYzNSeWIydGxMWGRwWkhSb1BTSXlJaUJ6ZEhKdmEyVXRiR2x1WldOaGNEMGljbTkxYm1RaUlITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamc1SURJekxqZzVUREkxTGpReU9ETWdNalV1TkRJNE15SWdjM1J5YjJ0bFBTSWpNRU0zTkVSR0lpQnpkSEp2YTJVdGQybGtkR2c5SWpJaUlITjBjbTlyWlMxc2FXNWxZMkZ3UFNKeWIzVnVaQ0lnYzNSeWIydGxMV3hwYm1WcWIybHVQU0p5YjNWdVpDSXZQZ284Y0dGMGFDQmtQU0pOTlM0d09ETXpOQ0F4TjBnM0xqSTFJaUJ6ZEhKdmEyVTlJaU13UXpjMFJFWWlJSE4wY205clpTMTNhV1IwYUQwaU1pSWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWlCemRISnZhMlV0YkdsdVpXcHZhVzQ5SW5KdmRXNWtJaTgrQ2p4d1lYUm9JR1E5SWsweU5pNDNOU0F4TjBneU9DNDVNVFkzSWlCemRISnZhMlU5SWlNd1F6YzBSRVlpSUhOMGNtOXJaUzEzYVdSMGFEMGlNaUlnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lpQnpkSEp2YTJVdGJHbHVaV3B2YVc0OUluSnZkVzVrSWk4K0NqeHdZWFJvSUdROUlrMDRMalUzTVRZM0lESTFMalF5T0ROTU1UQXVNVEVnTWpNdU9Ea2lJSE4wY205clpUMGlJekJETnpSRVJpSWdjM1J5YjJ0bExYZHBaSFJvUFNJeUlpQnpkSEp2YTJVdGJHbHVaV05oY0QwaWNtOTFibVFpSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlMejRLUEhCaGRHZ2daRDBpVFRJekxqZzVJREV3TGpFeFRESTFMalF5T0RNZ09DNDFOekUyTnlJZ2MzUnliMnRsUFNJak1FTTNORVJHSWlCemRISnZhMlV0ZDJsa2RHZzlJaklpSUhOMGNtOXJaUzFzYVc1bFkyRndQU0p5YjNWdVpDSWdjM1J5YjJ0bExXeHBibVZxYjJsdVBTSnliM1Z1WkNJdlBnbzhMM04yWno0S1wiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNVEUySWlCb1pXbG5hSFE5SWpnd0lpQjJhV1YzUW05NFBTSXdJREFnTVRFMklEZ3dJaUJtYVd4c1BTSnViMjVsSWlCNGJXeHVjejBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TWpBd01DOXpkbWNpUGdvOFp5QmpiR2x3TFhCaGRHZzlJblZ5YkNnalkyeHBjREJmT0RBMVh6TXdPRE14S1NJK0NqeHdZWFJvSUdROUlrMHdJRE5ETUNBeExqTTBNekUxSURFdU16UXpNVFVnTUNBeklEQklNVEV6UXpFeE5DNDJOVGNnTUNBeE1UWWdNUzR6TkRNeE5TQXhNVFlnTTFZNE1FZ3dWak5hSWlCbWFXeHNQU0lqUmpOR05FWTBJaTgrQ2p4eVpXTjBJSGRwWkhSb1BTSXhNVGdpSUdobGFXZG9kRDBpTWpRaUlHWnBiR3c5SW5kb2FYUmxJaTgrQ2p4d1lYUm9JR1E5SWsweE1pNDFJRFF4UXpFeUxqVWdNemt1TURZM0lERTBMakEyTnlBek55NDFJREUySURNM0xqVklNVEUzTGpWV09EQXVOVWd4TWk0MVZqUXhXaUlnWm1sc2JEMGlkMmhwZEdVaUlITjBjbTlyWlQwaUkwVTNSVGxGT1NJdlBnbzhjbVZqZENCNFBTSTBOU0lnZVQwaU5pSWdkMmxrZEdnOUlqSTNJaUJvWldsbmFIUTlJakV6SWlCeWVEMGlNeUlnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l5TkNJZ2VUMGlORGtpSUhkcFpIUm9QU0kzTkNJZ2FHVnBaMmgwUFNJMklpQnllRDBpTVNJZ1ptbHNiRDBpSTBVM1JUbEZRU0l2UGdvOGNtVmpkQ0I0UFNJeU5DSWdlVDBpTlRraUlIZHBaSFJvUFNJMU9TSWdhR1ZwWjJoMFBTSTRJaUJ5ZUQwaU1TSWdabWxzYkQwaUkwVTNSVGxGUVNJdlBnbzhjbVZqZENCNFBTSTNOaUlnZVQwaU5pSWdkMmxrZEdnOUlqSTNJaUJvWldsbmFIUTlJakV6SWlCeWVEMGlNeUlnWm1sc2JEMGlJMFUzUlRsRlFTSXZQZ284Y21WamRDQjRQU0l4TURjaUlIazlJallpSUhkcFpIUm9QU0l5TnlJZ2FHVnBaMmgwUFNJeE15SWdjbmc5SWpNaUlHWnBiR3c5SWlORk4wVTVSVUVpTHo0S1BIQmhkR2dnWkQwaVRUSXpMamt4TWlBeE1TNDJOemMxUXpJekxqTTBPVFlnT1M0d01UVXdOaUF5TUM0eU5EWWdOeTQwTkRnMk5TQXhOaTQ1T0RFeUlEZ3VNVGM1TlRsRE1UTXVOekUyTkNBNExqa3dPVGMzSURFeExqVXlOVFlnTVRFdU5qWXdPQ0F4TWk0d09EZ2dNVFF1TXpJeU5VTXhNaTQyTlRBMUlERTJMams0TkRrZ01UVXVOelUwSURFNExqVTFNVE1nTVRrdU1ERTRPQ0F4Tnk0NE1qQTBRekl5TGpJNE16WWdNVGN1TURrd01pQXlOQzQwTnpRMElERTBMak16T1RrZ01qTXVPVEV5SURFeExqWTNOelZhVFRFNElERTFMalExTkRGRE1UWXVOamd5TXlBeE5TNDBOVFF4SURFMUxqWXhORGtnTVRRdU16VTFNU0F4TlM0Mk1UUTVJREV6UXpFMUxqWXhORGtnTVRFdU5qUTBPU0F4Tmk0Mk9ETWdNVEF1TlRRMU9TQXhPQ0F4TUM0MU5EVTVRekU1TGpNeE55QXhNQzQxTkRVNUlESXdMak00TlRFZ01URXVOalEwTWlBeU1DNHpPRFV4SURFelF6SXdMak00TlRFZ01UUXVNelUxT0NBeE9TNHpNVGNnTVRVdU5EVTBNU0F4T0NBeE5TNDBOVFF4V2lJZ1ptbHNiRDBpSXpBd09FTTVPU0l2UGdvOGNHRjBhQ0JrUFNKTk1UZ3VOVEkzTnlBNUxqVTJOREU0UXpFMkxqWXpOalVnT1M0MU5qUXhPQ0F4TlM0eE1ETXhJREV4TGpFME1Ua2dNVFV1TVRBek1TQXhNeTR3T0RjNFF6RTFMakV3TXpFZ01UVXVNRE16TnlBeE5pNDJNelkxSURFMkxqWXhNVFVnTVRndU5USTNOeUF4Tmk0Mk1URTFRekl3TGpReE9UWWdNVFl1TmpFeE5TQXlNUzQ1TlRNZ01UVXVNRE16TnlBeU1TNDVOVE1nTVRNdU1EZzNPRU15TVM0NU5USXlJREV4TGpFME1Ua2dNakF1TkRFNE9TQTVMalUyTkRFNElERTRMalV5TnpjZ09TNDFOalF4T0ZwTk1UY3VPVGs1T1NBeE5TNHhORE0yUXpFMkxqZzBPVE1nTVRVdU1UUXpOaUF4TlM0NU1UWTJJREUwTGpFNE16a2dNVFV1T1RFMk5pQXhNME14TlM0NU1UWTJJREV4TGpneE5qRWdNVFl1T0RRNU15QXhNQzQ0TlRZMElERTNMams1T1RrZ01UQXVPRFUyTkVNeE9TNHhOVEEwSURFd0xqZzFOalFnTWpBdU1EZ3pNU0F4TVM0NE1UWXhJREl3TGpBNE16RWdNVE5ETWpBdU1EZ3pNU0F4TkM0eE9ETTVJREU1TGpFMU1EUWdNVFV1TVRRek5pQXhOeTQ1T1RrNUlERTFMakUwTXpaYUlpQm1hV3hzUFNJak56QkRRMFF6SWk4K0Nqd3ZaejRLUEdSbFpuTStDanhqYkdsd1VHRjBhQ0JwWkQwaVkyeHBjREJmT0RBMVh6TXdPRE14SWo0S1BIQmhkR2dnWkQwaVRUQWdNME13SURFdU16UXpNVFVnTVM0ek5ETXhOU0F3SURNZ01FZ3hNVE5ETVRFMExqWTFOeUF3SURFeE5pQXhMak0wTXpFMUlERXhOaUF6Vmpnd1NEQldNMW9pSUdacGJHdzlJbmRvYVhSbElpOCtDand2WTJ4cGNGQmhkR2crQ2p3dlpHVm1jejRLUEM5emRtYytDZz09XCIiLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFRhYmxlQ3JlYXRvciBmcm9tIFwiLi9UYWJsZUNyZWF0b3IvVGFibGVDcmVhdG9yXCI7XG5pbXBvcnQgRGVzaWduTGludGVyIGZyb20gXCIuL0Rlc2lnbkxpbnRlci9EZXNpZ25MaW50ZXJcIjtcbmltcG9ydCBSZXNpemVyIGZyb20gXCIuL1Jlc2l6ZXJcIjtcbmltcG9ydCBUaGVtZVN3aXRjaGVyIGZyb20gXCIuL1RoZW1lU3dpdGNoZXJcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgSG9tZSBmcm9tIFwiLi9Ib21lXCI7XG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcIi4uL3V0aWxpdHktZnVuY3Rpb25zXCI7XG5pbXBvcnQgXCIuLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBBcHAgPSAoe30pID0+IHtcbiAgICBjb25zdCBbYWN0aXZlUGx1Z2luLCBzZXRBY3RpdmVQbHVnaW5dID0gdXNlU3RhdGUoXCJob21lXCIpO1xuICAgIGNvbnN0IFtsYXRlc3RGaWdtYUNvbW1hbmQsIHNldExhdGVzdEZpZ21hQ29tbWFuZF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBbc2VsZWN0ZWRUZXh0TGF5ZXJzLCBzZXRTZWxlY3RlZFRleHRMYXllcnNdID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtzYW1wbGVUZXh0SW5kZXgsIHNldFNhbXBsZVRleHRJbmRleF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbbG9jYWxDdXN0b21EaWN0aW9uYXJ5LCBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnldID0gdXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IFtsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCwgc2V0TG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQsXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbY29sb3JzV2l0aElzc3Vlcywgc2V0Q29sb3JzV2l0aElzc3Vlc10gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgW2xvYWRpbmdDb2xvckRhdGEsIHNldExvYWRpbmdDb2xvckRhdGFdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzZWxlY3Rpb25NYWRlLCBzZXRTZWxlY3Rpb25NYWRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbY3VycmVudFNlbGVjdGlvbiwgc2V0Q3VycmVudFNlbGVjdGlvbl0gPSB1c2VTdGF0ZSgpO1xuICAgIGNvbnN0IFtpbmNvbWluZ1NlbGVjdGlvbiwgc2V0SW5jb21pbmdTZWxlY3Rpb25dID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlLCBzZXRDdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2VdID0gdXNlU3RhdGUoKTtcbiAgICBjb25zdCBbY29sb3JUb2tlbnMsIHNldENvbG9yVG9rZW5zXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2FjdGl2ZUNvbG9yVGlsZSwgc2V0QWN0aXZlQ29sb3JUaWxlXSA9IHVzZVN0YXRlKCk7XG4gICAgY29uc3QgW2NvbG9ySXNzdWVzRml4ZWQsIHNldENvbG9ySXNzdWVzRml4ZWRdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2xvYWRpbmdEYXJrU3dpdGNoLCBzZXRMb2FkaW5nRGFya1N3aXRjaF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW2xvYWRpbmdMaWdodFN3aXRjaCwgc2V0TG9hZGluZ0xpZ2h0U3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudCA9IChldmVudE5hbWUsIGN1c3RvbURhdGEpID0+IHtcbiAgICAgICAgbmV3cmVsaWMuYWRkUGFnZUFjdGlvbihldmVudE5hbWUsIGN1c3RvbURhdGEpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoY3VzdG9tRGF0YSk7XG4gICAgICAgICAgICB9LCA1NTApO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJpbml0aWFsaXplLXNlbGVjdGlvblwiIH0gfSwgXCIqXCIpO1xuICAgICAgICB3aW5kb3cub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB7IHR5cGUsIG1lc3NhZ2UgfSA9IGV2ZW50LmRhdGEucGx1Z2luTWVzc2FnZTtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgXCJmaWdtYS1jb21tYW5kXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogcGx1Z2luLW9wZW5lZGAsIG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBzZXRMYXRlc3RGaWdtYUNvbW1hbmQobWVzc2FnZS5vcGVuZWRUbyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJpbml0aWFsLXNlbGVjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50U2VsZWN0aW9uKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwic2VsZWN0aW9uLWNoYW5nZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0SW5jb21pbmdTZWxlY3Rpb24obWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0YWJsZS1jcmVhdGVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KFwiT25lQ29yZVRvb2xib3g6IHRhYmxlLWNyZWF0ZWRcIiwgbWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJjbG9zZS1wbHVnaW5cIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm5ldy10ZXh0LXNlbGVjdGlvblwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRTYW1wbGVUZXh0SW5kZXgoMCk7XG4gICAgICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkVGV4dExheWVycyhtZXNzYWdlLnRleHRMYXllcnMpO1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UobWVzc2FnZS5zZWxlY3RlZExheWVycyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJ0ZXh0LWxpbnRlZFwiOlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChcIk9uZUNvcmVUb29sYm94OiBsYW5ndWFnZS1saW50ZWRcIiwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlLmN1c3RvbUV2ZW50RGF0YSksIHsgc3VnZ2VzdGlvbnM6IG1lc3NhZ2UubWluaW1hbFJlcG9ydCB9KSk7XG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UuZnVsbFJlcG9ydC5mb3JFYWNoKChzdWdnZXN0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChcIk9uZUNvcmVUb29sYm94OiBsYW5ndWFnZS1saW50ZXItc3VnZ2VzdGlvbi1tYWRlXCIsIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbWVzc2FnZS5jdXN0b21FdmVudERhdGEpLCBzdWdnZXN0aW9uKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwibG9jYWwtY3VzdG9tLWRpY3Rpb25hcnktcmV0cmlldmVkXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnkobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJjb2xvci1zdGF0c1wiOlxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nQ29sb3JEYXRhKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcygoX2EgPSBtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2UuY29sb3JTdGF0cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNvbG9yc05vdFVzaW5nT25lQ29yZUNvbG9yU3R5bGUpO1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3Rpb25NYWRlKG1lc3NhZ2UgPT09IG51bGwgfHwgbWVzc2FnZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogbWVzc2FnZS5zZWxlY3Rpb25NYWRlKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29sb3JUb2tlbnMobWVzc2FnZS5jb2xvclRva2Vucyk7XG4gICAgICAgICAgICAgICAgICAgIHNldENvbG9ySXNzdWVzRml4ZWQoMCk7XG4gICAgICAgICAgICAgICAgICAgIChtZXNzYWdlID09PSBudWxsIHx8IG1lc3NhZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1lc3NhZ2Uuc2VsZWN0aW9uTWFkZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogY29sb3JzLWxpbnRlZGAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogbWVzc2FnZS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlS2V5OiBtZXNzYWdlLmZpbGVLZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJVc2VyIE5hbWVcIjogbWVzc2FnZVtcIlVzZXIgTmFtZVwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgQXZhdGFyXCI6IG1lc3NhZ2VbXCJVc2VyIEF2YXRhclwiXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlVzZXIgSURcIjogbWVzc2FnZVtcIlVzZXIgSURcIl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTZXNzaW9uIElEXCI6IG1lc3NhZ2VbXCJTZXNzaW9uIElEXCJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkTGF5ZXJzV2l0aENvbG9yOiBtZXNzYWdlLmNvbG9yU3RhdHMuc2VsZWN0ZWRMYXllcnNXaXRoQ29sb3IubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbEluc3RhbmNlc09mQ29sb3I6IG1lc3NhZ2UuY29sb3JTdGF0cy5hbGxJbnN0YW5jZXNPZkNvbG9yLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNXaXRoQ29sb3JTdHlsZTogbWVzc2FnZS5jb2xvclN0YXRzLmNvbG9yc1dpdGhDb2xvclN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNVc2luZ09uZUNvcmVTdHlsZTogbWVzc2FnZS5jb2xvclN0YXRzLmNvbG9yc1VzaW5nT25lQ29yZVN0eWxlLmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcnNOb3RVc2luZ09uZUNvcmVDb2xvclN0eWxlOiBtZXNzYWdlLmNvbG9yU3RhdHMuY29sb3JzTm90VXNpbmdPbmVDb3JlQ29sb3JTdHlsZS5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lQ29yZUNvbG9yU3R5bGVDb3ZlcmFnZTogbWVzc2FnZS5jb2xvclN0YXRzLm9uZUNvcmVDb2xvclN0eWxlQ292ZXJhZ2UubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkc09mQWxsSW5zdGFuY2VzT2ZDb2xvcjogbWVzc2FnZS5jb2xvclN0YXRzLmlkc09mQWxsSW5zdGFuY2VzT2ZDb2xvci5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcImNvbG9yLXJlcGxhY2VkXCI6XG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50KGBPbmVDb3JlVG9vbGJveDogY29sb3ItcmVwbGFjZWRgLCBPYmplY3QuYXNzaWduKHt9LCBtZXNzYWdlKSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2FkaW5nLWxpZ2h0LXRoZW1lLXN3aXRjaFwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRMb2FkaW5nTGlnaHRTd2l0Y2godHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJsb2FkaW5nLWRhcmstdGhlbWUtc3dpdGNoXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdEYXJrU3dpdGNoKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIFwidGhlbWUtc3dpdGNoZWRcIjpcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2Uuc3dpdGNoZWRUbyA9PT0gXCJkYXJrXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldExvYWRpbmdEYXJrU3dpdGNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChtZXNzYWdlLnN3aXRjaGVkVG8gPT09IFwibGlnaHRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0TG9hZGluZ0xpZ2h0U3dpdGNoKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZW5kVGhlbWVTd2l0Y2hlckV2ZW50ID0gKCkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB0cmlnZ2VyTmV3UmVsaWNDdXN0b21FdmVudChgT25lQ29yZVRvb2xib3g6IHRoZW1lLXN3aXRjaGVkYCwgT2JqZWN0LmFzc2lnbih7fSwgbWVzc2FnZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lc3NhZ2UuY2xvc2VBZnRlclJ1bikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJjbG9zZS1wbHVnaW5cIiB9IH0sIFwiKlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRUaGVtZVN3aXRjaGVyRXZlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChsYXRlc3RGaWdtYUNvbW1hbmQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc3dpdGNoIChsYXRlc3RGaWdtYUNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICBjYXNlIFwib3Blbi1ob21lXCI6XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdGl2ZVBsdWdpbihcImhvbWVcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLXRhYmxlLWNyZWF0b3JcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBcIm9wZW4tdGhlbWUtc3dpdGNoZXJcIjpcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0aXZlUGx1Z2luKFwidGhlbWUtc3dpdGNoZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWxhbmd1YWdlLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJsYW5ndWFnZS1saW50ZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJvcGVuLWNvbG9yLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVQbHVnaW4oXCJjb2xvci1saW50ZXJcIik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2xhdGVzdEZpZ21hQ29tbWFuZF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjdXJyZW50U2VsZWN0aW9uICYmIGluY29taW5nU2VsZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFNlbGVjdGlvbiwgaW5jb21pbmdTZWxlY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VycmVudFNlbGVjdGlvbihpbmNvbWluZ1NlbGVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbaW5jb21pbmdTZWxlY3Rpb25dKTtcbiAgICBjb25zdCBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uID0gKGRlc3RpbmF0aW9uKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVBsdWdpbihkZXN0aW5hdGlvbik7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJuYXZpZ2F0ZS10by10YWJcIixcbiAgICAgICAgICAgICAgICB0YWJDbGlja2VkOiBkZXN0aW5hdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclBsdWdpbkJvZHkgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aXZlUGx1Z2luKSB7XG4gICAgICAgICAgICBjYXNlIFwiaG9tZVwiOlxuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEhvbWUsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcInRhYmxlLWNyZWF0b3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUYWJsZUNyZWF0b3IsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uIH0pO1xuICAgICAgICAgICAgY2FzZSBcImxhbmd1YWdlLWxpbnRlclwiOlxuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChEZXNpZ25MaW50ZXIsIHsgc2V0QWN0aXZlUGx1Z2luOiBoYW5kbGVQbHVnaW5OYXZpZ2F0aW9uLCBvcGVuVG86IFwibGFuZ3VhZ2VcIiB9KSk7XG4gICAgICAgICAgICBjYXNlIFwidGhlbWUtc3dpdGNoZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZVN3aXRjaGVyLCB7IHNldEFjdGl2ZVBsdWdpbjogaGFuZGxlUGx1Z2luTmF2aWdhdGlvbiB9KTtcbiAgICAgICAgICAgIGNhc2UgXCJjb2xvci1saW50ZXJcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoRGVzaWduTGludGVyLCB7IHNldEFjdGl2ZVBsdWdpbjogaGFuZGxlUGx1Z2luTmF2aWdhdGlvbiwgb3BlblRvOiBcImNvbG9yXCIgfSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBmdW5jdGlvbnMgPSB7XG4gICAgICAgIGhhbmRsZVBsdWdpbk5hdmlnYXRpb24sXG4gICAgICAgIHRyaWdnZXJOZXdSZWxpY0N1c3RvbUV2ZW50LFxuICAgIH07XG4gICAgY29uc3Qgc3RhdGUgPSB7XG4gICAgICAgIHNlbGVjdGVkVGV4dExheWVycyxcbiAgICAgICAgc2V0U2VsZWN0ZWRUZXh0TGF5ZXJzLFxuICAgICAgICBzYW1wbGVUZXh0SW5kZXgsXG4gICAgICAgIHNldFNhbXBsZVRleHRJbmRleCxcbiAgICAgICAgbG9jYWxDdXN0b21EaWN0aW9uYXJ5LFxuICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnksXG4gICAgICAgIGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLFxuICAgICAgICBzZXRMb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCxcbiAgICAgICAgY29sb3JzV2l0aElzc3VlcyxcbiAgICAgICAgc2V0Q29sb3JzV2l0aElzc3VlcyxcbiAgICAgICAgbG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSxcbiAgICAgICAgc2VsZWN0aW9uTWFkZSxcbiAgICAgICAgc2V0U2VsZWN0aW9uTWFkZSxcbiAgICAgICAgY3VycmVudFNlbGVjdGlvbixcbiAgICAgICAgaW5jb21pbmdTZWxlY3Rpb24sXG4gICAgICAgIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZSxcbiAgICAgICAgY29sb3JUb2tlbnMsXG4gICAgICAgIGFjdGl2ZUNvbG9yVGlsZSxcbiAgICAgICAgc2V0QWN0aXZlQ29sb3JUaWxlLFxuICAgICAgICBjb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICBzZXRDb2xvcklzc3Vlc0ZpeGVkLFxuICAgICAgICBsb2FkaW5nRGFya1N3aXRjaCxcbiAgICAgICAgbG9hZGluZ0xpZ2h0U3dpdGNoLFxuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHsgZnVuY3Rpb25zLCBzdGF0ZSB9IH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVzaXplciwgbnVsbCksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiYXBwXCIgfSwgcmVuZGVyUGx1Z2luQm9keSgpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IEFwcDtcbiIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgUGx1Z2luQ29udGV4dCB9IGZyb20gXCIuLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgQ29sb3JUaWxlIGZyb20gXCIuL0NvbG9yVGlsZVwiO1xuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbG9yTGludGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBjb2xvcnNXaXRoSXNzdWVzLCBzZXRDb2xvcnNXaXRoSXNzdWVzLCBsb2FkaW5nQ29sb3JEYXRhLCBzZXRMb2FkaW5nQ29sb3JEYXRhLCBzZWxlY3Rpb25NYWRlLCBjb2xvcklzc3Vlc0ZpeGVkLCB9ID0gc3RhdGU7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSh0cnVlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1jb2xvci1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9LCBbXSk7XG4gICAgY29uc3QgaWdub3JlQ29sb3JJc3N1ZSA9IChjb2xvcklkKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbG9yVG9CZVJlbW92ZWQgPSBjb2xvcnNXaXRoSXNzdWVzLmZpbmQoKGNvbG9yKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gY29sb3IuY29sb3JJZCA9PT0gY29sb3JJZDtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZDb2xvclRvQmVSZW1vdmVkID0gY29sb3JzV2l0aElzc3Vlcy5pbmRleE9mKGNvbG9yVG9CZVJlbW92ZWQpO1xuICAgICAgICBjb25zdCBuZXdDb2xvcnNXaXRoSXNzdWVzID0gWy4uLmNvbG9yc1dpdGhJc3N1ZXNdO1xuICAgICAgICBuZXdDb2xvcnNXaXRoSXNzdWVzLnNwbGljZShpbmRleE9mQ29sb3JUb0JlUmVtb3ZlZCwgMSk7XG4gICAgICAgIHNldENvbG9yc1dpdGhJc3N1ZXMobmV3Q29sb3JzV2l0aElzc3Vlcyk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb2xvcklzc3VlcyA9ICgpID0+IHtcbiAgICAgICAgaWYgKChjb2xvcnNXaXRoSXNzdWVzID09PSBudWxsIHx8IGNvbG9yc1dpdGhJc3N1ZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoKSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvcnNXaXRoSXNzdWVzLm1hcCgoY29sb3IsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KENvbG9yVGlsZSwgeyBjb2xvckRhdGE6IGNvbG9yLCBrZXk6IGluZGV4LCBpZ25vcmVDb2xvcklzc3VlOiBpZ25vcmVDb2xvcklzc3VlIH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVSZXNjYW5MYXllcnNDbGljayA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9hZGluZ0NvbG9yRGF0YSh0cnVlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1jb2xvci1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckVtcHR5U3RhdGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlYWRpbmdUZXh0ID0gIWxvYWRpbmdDb2xvckRhdGFcbiAgICAgICAgICAgID8gXCJTZWxlY3QgYSBsYXllcihzKSB0byBnZXQgc3RhcnRlZFwiXG4gICAgICAgICAgICA6IFwiTG9hZGluZyBjb2xvciBkYXRhLi4uXCI7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uVGV4dCA9ICFsb2FkaW5nQ29sb3JEYXRhXG4gICAgICAgICAgICA/IFwiVG8gY2hlY2sgeW91ciBjb2xvcnMgc2VsZWN0IGFueSBsYXllciwgZnJhbWUsIG9yIGdyb3VwIG9mIGxheWVycyBhbmQgdGhlbiBsaW50IGNvbG9ycy5cIlxuICAgICAgICAgICAgOiBcIlRoaXMgbWF5IHRha2UgYSBtb21lbnRcIjtcbiAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VjdGlvblwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1lbXB0eS1zdGF0ZS1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgbG9hZGluZ0NvbG9yRGF0YSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxvYWRlclwiIH0pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg0XCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWVtcHR5LXN0YXRlLWhlYWRpbmdcIiB9LCBoZWFkaW5nVGV4dCksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1lbXB0eS1zdGF0ZS1kZXNjcmlwdGlvblwiIH0sIGRlc2NyaXB0aW9uVGV4dCksXG4gICAgICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gaGFuZGxlUmVzY2FuTGF5ZXJzQ2xpY2soKSB9LCBcIkNoZWNrIGNvbG9yc1wiKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbG9yTGludGluZ1N1bW1hcnkgPSAoKSA9PiB7XG4gICAgICAgIGlmICghbG9hZGluZ0NvbG9yRGF0YSAmJiBzZWxlY3Rpb25NYWRlKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItbGludGluZy1zdW1hcnlcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLXN1bW1hcnktaGVhZGluZ1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoIC0gY29sb3JJc3N1ZXNGaXhlZCxcbiAgICAgICAgICAgICAgICAgICAgXCIgY29sb3IgaXNzdWVzIGZvdW5kXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctc3VtbWFyeS1kZXNjcmlwdGlvblwiIH0sIGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoIC0gY29sb3JJc3N1ZXNGaXhlZCA+IDAgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgXCJUbyBmaXggdGhlc2UgaXNzdWVzLCByZXBsYWNlIGVhY2ggb2YgdGhlIGNvbG9ycyBsaXN0ZWQgYmVsb3cgd2l0aCBhIE9uZSBDb3JlIGNvbG9yIHN0eWxlLlwiLFxuICAgICAgICAgICAgICAgICAgICBgIGAsXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHsgaHJlZjogXCJodHRwczovL29uZS1jb3JlLmRhdGFuZXJkLnVzL2ZvdW5kYXRpb24vZGVzaWduL2NvbG9yLyNzZW1hbnRpYy10b2tlbnNcIiwgdGFyZ2V0OiBcIl9ibGFua1wiIH0sIFwiU2VlIGNvbG9yIGRvY3NcIiksXG4gICAgICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgICAgICBcImZvciBtb3JlIGluZm8uXCIpKSA6IChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBcIlRoZXJlIGFyZSBubyBjb2xvciBpc3N1ZXMgd2l0aCB0aGUgc2VsZWN0ZWQgbGF5ZXJzIDopLiBUbyBjaGVjayBmb3IgaXNzdWVzIGluIG90aGVyIGxheWVycyBzZWxlY3QgYW5vdGhlciBsYXllcihzKSBhbmQgY2xpY2sgXFxcIlJlLXNjYW4gY29sb3JzXFxcIi5cIikpKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlckVtcHR5U3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgbm9Db2xvcklzc3VlcyA9IChjb2xvcnNXaXRoSXNzdWVzID09PSBudWxsIHx8IGNvbG9yc1dpdGhJc3N1ZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yc1dpdGhJc3N1ZXMubGVuZ3RoKSA9PT0gMDtcbiAgICBjb25zdCBjb2xvckxpbnRlckNvbnRhaW5lckNsYXNzZXMgPSBjbGFzc05hbWVzKFwiY29sb3ItbGludGVyLWNvbnRhaW5lclwiLCB7XG4gICAgICAgIFwic3VtbWFyeS1pcy1sb2FkaW5nXCI6IGxvYWRpbmdDb2xvckRhdGEsXG4gICAgICAgIFwic3VtbWFyeS1pcy1lbXB0eVwiOiBub0NvbG9ySXNzdWVzLFxuICAgICAgICBcIm5vLXNlbGVjdGlvbi1tYWRlXCI6ICFzZWxlY3Rpb25NYWRlLFxuICAgIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIiwgeyBjbGFzc05hbWU6IGNvbG9yTGludGVyQ29udGFpbmVyQ2xhc3NlcyB9LFxuICAgICAgICAgICAgcmVuZGVyQ29sb3JMaW50aW5nU3VtbWFyeSgpLFxuICAgICAgICAgICAgIWxvYWRpbmdDb2xvckRhdGEgJiYgIW5vQ29sb3JJc3N1ZXMgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlcy1jb250YWluZXJcIiB9LCByZW5kZXJDb2xvcklzc3VlcygpKSkpLFxuICAgICAgICAhbG9hZGluZ0NvbG9yRGF0YSAmJiBzZWxlY3Rpb25NYWRlICYmIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZm9vdGVyXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLWxpbnRpbmctZm9vdGVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZVJlc2NhbkxheWVyc0NsaWNrKCkgfSwgXCJDaGVjayBjdXJyZW50IHNlbGVjdGlvblwiKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQ29sb3JMaW50ZXI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi4vUGx1Z2luQ29udGV4dFwiO1xuaW1wb3J0IGNocm9tYSBmcm9tIFwiY2hyb21hLWpzXCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IGljb25MYXllclRleHQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXRleHQuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyRWxsaXBzZSBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItZWxsaXBzZS5zdmdcIjtcbmltcG9ydCBpY29uTGF5ZXJMaW5lIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1saW5lLnN2Z1wiO1xuaW1wb3J0IGljb25MYXllclBvbHlnb24gZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWxheWVyLXBvbHlnb24uc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyUmVjdGFuZ2xlIGZyb20gXCIuLi8uLi9hc3NldHMvaWNvbi1sYXllci1yZWN0YW5nbGUuc3ZnXCI7XG5pbXBvcnQgaWNvbkxheWVyQm9vbGVhbk9wZXJhdGlvbiBmcm9tIFwiLi4vLi4vYXNzZXRzL2ljb24tbGF5ZXItYm9vbGVhbi1vcGVyYXRpb24uc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcInJlYWN0LWZpZ21hLXBsdWdpbi1kc1wiO1xuaW1wb3J0IHsgQ2hlY2sgfSBmcm9tIFwicmVhY3QtZmVhdGhlclwiO1xuaW1wb3J0IFwicmVhY3QtZmlnbWEtcGx1Z2luLWRzL2ZpZ21hLXBsdWdpbi1kcy5jc3NcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IENvbG9yVGlsZSA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBjb2xvclRva2VucywgYWN0aXZlQ29sb3JUaWxlLCBzZXRBY3RpdmVDb2xvclRpbGUsIGNvbG9ySXNzdWVzRml4ZWQsIHNldENvbG9ySXNzdWVzRml4ZWQsIH0gPSBzdGF0ZTtcbiAgICBjb25zdCB7IGNvbG9ySWQsIGxheWVySWQsIGxheWVyTmFtZSwgbGF5ZXJUeXBlLCBjb2xvclR5cGUsIGNvbG9ySW5IZXgsIH0gPSBwcm9wcy5jb2xvckRhdGE7XG4gICAgY29uc3QgeyBpZ25vcmVDb2xvcklzc3VlIH0gPSBwcm9wcztcbiAgICBjb25zdCBbaXNFeHBhbmRlZCwgc2V0SXNFeHBhbmRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW21lbnVBY3RpdmUsIHNldE1lbnVBY3RpdmVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51QnV0dG9uSG92ZXJlZCwgc2V0TWVudUJ1dHRvbkhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51SG92ZXJlZCwgc2V0TWVudUhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFttZW51VGltZXIsIHNldE1lbnVUaW1lcl0gPSB1c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbaXNzdWVGaXhlZCwgc2V0SXNzdWVGaXhlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGFjdGl2ZUNvbG9yVGlsZSA9PT0gY29sb3JJZCkge1xuICAgICAgICAgICAgc2V0SXNFeHBhbmRlZCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldElzRXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSwgW2FjdGl2ZUNvbG9yVGlsZV0pO1xuICAgIGNvbnN0IGhhbmRsZUNvbG9yVGlsZUNsaWNrID0gKGxheWVySWQpID0+IHtcbiAgICAgICAgaWYgKCFpc0V4cGFuZGVkKSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUoY29sb3JJZCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRBY3RpdmVDb2xvclRpbGUoXCJcIik7XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInNlbGVjdC1sYXllclwiLFxuICAgICAgICAgICAgICAgIGxheWVySWQ6IGxheWVySWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgdHJ1bmNhdGVMYXllck5hbWUgPSAobGF5ZXJOYW1lLCBsZW5ndGggPSAyNSkgPT4ge1xuICAgICAgICBpZiAobGF5ZXJOYW1lLmxlbmd0aCA+IGxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGxheWVyTmFtZS5zdWJzdHJpbmcoMCwgbGVuZ3RoKSArIFwiLi4uXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxheWVyTmFtZTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRva2VuU3VnZ2VzdGlvbnMgPSAoKSA9PiB7XG4gICAgICAgIGlmICgoY29sb3JUb2tlbnMgPT09IG51bGwgfHwgY29sb3JUb2tlbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbG9yVG9rZW5zLmxlbmd0aCkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZENvbG9yVG9rZW5zID0gY29sb3JUb2tlbnMuZmlsdGVyKHRva2VuID0+ICF0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ3ByaXZhdGUnKSk7XG4gICAgICAgICAgICBsZXQgcmVsZXZhbnRDb2xvclN0eWxlcyA9IFtdO1xuICAgICAgICAgICAgbGV0IG1vc3RSZWxldmFudENvbG9yU3R5bGVzID0gW107XG4gICAgICAgICAgICBpZiAobGF5ZXJUeXBlID09PSBcIlRFWFRcIikge1xuICAgICAgICAgICAgICAgIHJlbGV2YW50Q29sb3JTdHlsZXMgPSBmaWx0ZXJlZENvbG9yVG9rZW5zXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoXCJ0ZXh0XCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbG9yVHlwZSA9PT0gXCJmaWxsXCIpIHtcbiAgICAgICAgICAgICAgICByZWxldmFudENvbG9yU3R5bGVzID0gZmlsdGVyZWRDb2xvclRva2Vuc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYmFja2dyb3VuZFwiKSlcbiAgICAgICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGEubmFtZS50b0xvd2VyQ2FzZSgpID4gYi5uYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2xvclR5cGUgPT09IFwic3Ryb2tlXCIpIHtcbiAgICAgICAgICAgICAgICByZWxldmFudENvbG9yU3R5bGVzID0gZmlsdGVyZWRDb2xvclRva2Vuc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4ubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwiYm9yZGVyXCIpKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5uYW1lLnRvTG93ZXJDYXNlKCkgPiBiLm5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG1vc3RSZWxldmFudENvbG9yU3R5bGVzID0gcmVsZXZhbnRDb2xvclN0eWxlc1xuICAgICAgICAgICAgICAgIC5tYXAoKHJlbGV2YW50Q29sb3JTdHlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChyZWxldmFudENvbG9yU3R5bGUuaGV4ID09PSBcIk5vbmVcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZWxldmFudENvbG9yU3R5bGUpLCB7IHNpbWlsYXJpdHk6IDAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IG9uZUNvcmVDb2xvciA9IHJlbGV2YW50Q29sb3JTdHlsZS5oZXg7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2ltaWxhcml0eSA9IDEwMCAtIGNocm9tYS5kaXN0YW5jZShvbmVDb3JlQ29sb3IsIGNvbG9ySW5IZXgpO1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlbGV2YW50Q29sb3JTdHlsZSksIHsgc2ltaWxhcml0eSB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYi5zaW1pbGFyaXR5IC0gYS5zaW1pbGFyaXR5O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKHRva2VuID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlVG9rZW4gPSB0b2tlbi50aGVtZSA9PT0gJ2RhcmsnO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRHVwbGljYXRlID0gcmVsZXZhbnRDb2xvclN0eWxlcy5zb21lKHJlbGV2YW50U3R5bGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVsZXZhbnRTdHlsZS5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRva2VuLm5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gIShpc0R1cGxpY2F0ZSAmJiBpc0RhcmtNb2RlVG9rZW4pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoMCwgNCk7XG4gICAgICAgICAgICByZXR1cm4gbW9zdFJlbGV2YW50Q29sb3JTdHlsZXMubWFwKChjb2xvclN0eWxlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1saXN0LWl0ZW1cIiwga2V5OiBpbmRleCwgb25DbGljazogKGUpID0+IGhhbmRsZVN1Z2dlc3Rpb25GaXhDbGljayhlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlS2V5OiBjb2xvclN0eWxlLmtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3R5bGVOYW1lOiBjb2xvclN0eWxlLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvclN0eWxlQ29sb3I6IGNvbG9yU3R5bGUuaGV4LFxuICAgICAgICAgICAgICAgICAgICB9KSB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtc2FtcGxlXCIsIHN0eWxlOiB7IGJhY2tncm91bmRDb2xvcjogY29sb3JTdHlsZS5oZXggfSB9KSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtcHJpbWFyeS1jb250ZW50XCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNVwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtaGVhZGluZ1wiIH0sIGNvbG9yU3R5bGUubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtZGVzY3JpcHRpb25cIiB9LCBjb2xvclN0eWxlLmRlc2NyaXB0aW9uKSksXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuLXN1Z2dlc3RlZC1jb2xvci1zdHlsZS1jdGFcIiB9LCBcIkFwcGx5IGZpeFwiKSkpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1lbnVDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoIW1lbnVBY3RpdmUpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlQnRuTWVudU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVCdXR0b25Ib3ZlcmVkKHRydWUpO1xuICAgICAgICBjbGVhclRpbWVvdXQobWVudVRpbWVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUJ0bk1lbnVNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgICAgICBzZXRNZW51QnV0dG9uSG92ZXJlZChmYWxzZSk7XG4gICAgICAgIHNldE1lbnVUaW1lcihzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgICAgICB9LCA0MDApKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlTWVudU1vdXNlRW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHNldE1lbnVIb3ZlcmVkKHRydWUpO1xuICAgICAgICBjbGVhclRpbWVvdXQobWVudVRpbWVyKTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZU1lbnVNb3VzZUxlYXZlID0gKCkgPT4ge1xuICAgICAgICBzZXRNZW51SG92ZXJlZChmYWxzZSk7XG4gICAgICAgIHNldE1lbnVUaW1lcihzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgICAgICB9LCAyMDApKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGNsZWFyVGltZW91dChtZW51VGltZXIpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlSWdub3JlSXNzdWVDbGljayA9IChlKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlnbm9yZUNvbG9ySXNzdWUoY29sb3JJZCk7XG4gICAgICAgIHNldE1lbnVBY3RpdmUoZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgaGFuZGxlU3VnZ2VzdGlvbkZpeENsaWNrID0gKGUsIGNvbG9yU3R5bGVEYXRhKSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcHBseS1jb2xvci1zdHlsZVwiLFxuICAgICAgICAgICAgICAgIGNvbG9yVHlwZSxcbiAgICAgICAgICAgICAgICBsYXllcklkOiBsYXllcklkLFxuICAgICAgICAgICAgICAgIG9yaWdpbmFsQ29sb3I6IGNvbG9ySW5IZXgsXG4gICAgICAgICAgICAgICAgY29sb3JTdHlsZUtleTogY29sb3JTdHlsZURhdGEuY29sb3JTdHlsZUtleSxcbiAgICAgICAgICAgICAgICBjb2xvclN0eWxlTmFtZTogY29sb3JTdHlsZURhdGEuY29sb3JTdHlsZU5hbWUsXG4gICAgICAgICAgICAgICAgY29sb3JTdHlsZUNvbG9yOiBjb2xvclN0eWxlRGF0YS5jb2xvclN0eWxlQ29sb3IsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpO1xuICAgICAgICBzZXRJc3N1ZUZpeGVkKHRydWUpO1xuICAgICAgICAhaXNzdWVGaXhlZCAmJiBzZXRDb2xvcklzc3Vlc0ZpeGVkKGNvbG9ySXNzdWVzRml4ZWQgKyAxKTtcbiAgICB9O1xuICAgIGNvbnN0IGxheWVyVHlwZUljb25zID0ge1xuICAgICAgICBURVhUOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJUZXh0LCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgRUxMSVBTRTogUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7IHNyYzogaWNvbkxheWVyRWxsaXBzZSwgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIgfSksXG4gICAgICAgIEZSQU1FOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJmcmFtZVwiIH0pLFxuICAgICAgICBHUk9VUDogUmVhY3QuY3JlYXRlRWxlbWVudChJY29uLCB7IGNsYXNzTmFtZTogXCJsYXllci1pY29uXCIsIG5hbWU6IFwiZ3JvdXBcIiB9KSxcbiAgICAgICAgQ09NUE9ORU5UOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImxheWVyLWljb25cIiwgbmFtZTogXCJjb21wb25lbnRcIiB9KSxcbiAgICAgICAgSU5TVEFOQ0U6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoSWNvbiwgeyBjbGFzc05hbWU6IFwibGF5ZXItaWNvblwiLCBuYW1lOiBcImluc3RhbmNlXCIgfSksXG4gICAgICAgIExJTkU6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllckxpbmUsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBQT0xZR09OOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJQb2x5Z29uLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSxcbiAgICAgICAgUkVDVEFOR0xFOiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJSZWN0YW5nbGUsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBTSEFQRV9XSVRIX1RFWFQ6IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IGljb25MYXllclRleHQsIGNsYXNzTmFtZTogXCJjdXN0b20tbGF5ZXItaWNvblwiIH0pLFxuICAgICAgICBTVEFSOiBSZWFjdC5jcmVhdGVFbGVtZW50KEljb24sIHsgY2xhc3NOYW1lOiBcImN1c3RvbS1sYXllci1pY29uXCIsIG5hbWU6IFwic3Rhci1vZmZcIiB9KSxcbiAgICAgICAgQk9PTEVBTl9PUEVSQVRJT046IChSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBpY29uTGF5ZXJCb29sZWFuT3BlcmF0aW9uLCBjbGFzc05hbWU6IFwiY3VzdG9tLWxheWVyLWljb25cIiB9KSksXG4gICAgfTtcbiAgICBjb25zdCBjb2xvclRpbGVIZWFkaW5nVGV4dCA9ICgpID0+IHtcbiAgICAgICAgaWYgKGlzc3VlRml4ZWQpIHtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgICAgICBcIkZpeGVkIFwiLFxuICAgICAgICAgICAgICAgIGAgYCxcbiAgICAgICAgICAgICAgICBcIiBcIixcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENoZWNrLCB7IGNvbG9yOiBcIiMxMjY0NDBcIiwgc2l6ZTogMTcgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAoY29sb3JUeXBlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGUuc2xpY2UoMSkgK1xuICAgICAgICAgICAgICAgIFwiIG5lZWRzIE9uZSBDb3JlIGNvbG9yIHN0eWxlXCIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBjb2xvclRpbGVDb250YWluZXJDbGFzc2VzID0gY2xhc3NOYW1lcyhcImNvbG9yLXRpbGUtY29udGFpbmVyXCIsIHtcbiAgICAgICAgXCJtZW51LWFjdGl2ZVwiOiBtZW51QWN0aXZlLFxuICAgICAgICBcImNvbG9yLXRpbGUtaG92ZXItc3RhdGUtZGlzYWJsZWRcIjogbWVudUJ1dHRvbkhvdmVyZWQgfHwgbWVudUhvdmVyZWQsXG4gICAgICAgIGV4cGFuZGVkOiBpc0V4cGFuZGVkLFxuICAgICAgICBcImlzc3VlLWZpeGVkXCI6IGlzc3VlRml4ZWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IGNvbG9yVGlsZUNvbnRhaW5lckNsYXNzZXMsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1oZWFkZXJcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLXRpdGxlLXNlY3Rpb25cIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoNFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWhlYWRpbmdcIiB9LCBjb2xvclRpbGVIZWFkaW5nVGV4dCgpKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcImJ0bi1jb2xvci10aWxlLW1lbnVcIiwgb25DbGljazogKGUpID0+IGhhbmRsZU1lbnVDbGljayhlKSwgb25Nb3VzZUVudGVyOiAoKSA9PiBoYW5kbGVCdG5NZW51TW91c2VFbnRlcigpLCBvbk1vdXNlTGVhdmU6ICgpID0+IGhhbmRsZUJ0bk1lbnVNb3VzZUxlYXZlKCkgfSwgXCJPcHRpb25zXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51XCIsIG9uTW91c2VFbnRlcjogKCkgPT4gaGFuZGxlTWVudU1vdXNlRW50ZXIoKSwgb25Nb3VzZUxlYXZlOiAoKSA9PiBoYW5kbGVNZW51TW91c2VMZWF2ZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUNvbG9yVGlsZUNsaWNrKGxheWVySWQpIH0sIFwiU2VsZWN0IGxheWVyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWVudS1pdGVtXCIsIG9uQ2xpY2s6IChlKSA9PiBoYW5kbGVJZ25vcmVJc3N1ZUNsaWNrKGUpIH0sIFwiSWdub3JlIGlzc3VlXCIpKSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImhyXCIsIG51bGwpLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZW51LWl0ZW1zXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1lbnUtaXRlbVwiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwgeyBocmVmOiBcImh0dHBzOi8vb25lLWNvcmUuZGF0YW5lcmQudXMvZm91bmRhdGlvbi9kZXNpZ24vY29sb3IvI3NlbWFudGljLXRva2Vuc1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCIgfSwgXCJTZWUgY29sb3IgZG9jc1wiKSkpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3RcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci10aWxlLW1ldGEtbGlzdC1pdGVtIGNvbG9yLXRpbGUtbWV0YS1jb2xvclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgc3R5bGU6IHsgYmFja2dyb3VuZENvbG9yOiBjb2xvckluSGV4IH0sIGNsYXNzTmFtZTogXCJjb2xvci10aWxlLWNvbG9yLXNhbXBsZVwiIH0pLFxuICAgICAgICAgICAgICAgICAgICBjb2xvckluSGV4KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxpc3QtaXRlbSBjb2xvci10aWxlLW1ldGEtbGF5ZXItbmFtZS1pdGVtXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgbGF5ZXJUeXBlSWNvbnNbbGF5ZXJUeXBlXSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgeyBjbGFzc05hbWU6IFwiY29sb3ItdGlsZS1tZXRhLWxheWVyLW5hbWVcIiB9LCB0cnVuY2F0ZUxheWVyTmFtZShsYXllck5hbWUpKSksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiBcImNvbG9yLXRpbGUtbWV0YS1saXN0LWl0ZW1cIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIlR5cGU6IFwiLFxuICAgICAgICAgICAgICAgICAgICBjb2xvclR5cGUpKSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhcnRpY2xlXCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZXMtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic3VnZ2VzdGVkLWNvbG9yLXN0eWxlLWhlYWRlclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg1XCIsIHsgY2xhc3NOYW1lOiBcInN1Z2dlc3RlZC1jb2xvci1zdHlsZS1oZWFkaW5nXCIgfSwgXCJTdWdnZXN0ZWQgY29sb3Igc3R5bGVzXCIpKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7IGNsYXNzTmFtZTogXCJzdWdnZXN0ZWQtY29sb3Itc3R5bGUtbGlzdFwiIH0sIHJlbmRlclRva2VuU3VnZ2VzdGlvbnMoKSkpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgQ29sb3JUaWxlO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFwiLi4vLi4vc3R5bGVzL3VpLmNzc1wiO1xuaW1wb3J0IENvbG9yTGludGVyIGZyb20gXCIuL0NvbG9yTGludGVyXCI7XG5pbXBvcnQgTGFuZ3VhZ2VMaW50ZXJQbHVnaW4gZnJvbSBcIi4vTGFuZ3VhZ2VMaW50ZXJQbHVnaW5cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IERlc2lnbkxpbnRlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luLCBvcGVuVG8gfSA9IHByb3BzO1xuICAgIGNvbnN0IFthY3RpdmVUYWIsIHNldEFjdGl2ZVRhYl0gPSB1c2VTdGF0ZShvcGVuVG8pO1xuICAgIGNvbnN0IGhhbmRsZVRhYkNsaWNrID0gKG5hbWVPZlRhYikgPT4ge1xuICAgICAgICBjb25zdCB0YWJBc1NpbmdsZVdvcmQgPSBuYW1lT2ZUYWIuc3BsaXQoXCItXCIpWzBdO1xuICAgICAgICBzZXRBY3RpdmVUYWIodGFiQXNTaW5nbGVXb3JkKTtcbiAgICAgICAgc2V0QWN0aXZlUGx1Z2luKG5hbWVPZlRhYik7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJOYXZpZ2F0aW9uVGFicyA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdGFicyA9IFtcImNvbG9yLWxpbnRlclwiLCBcImxhbmd1YWdlLWxpbnRlclwiXTtcbiAgICAgICAgcmV0dXJuIHRhYnMubWFwKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3NlcyA9IFtcInRhYi1uYXZpZ2F0aW9uLXRhYlwiXTtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIGxldCB0YWJMYWJlbCA9IHRhYi5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHRhYi5zcGxpdChcIi1cIilbMF0uc3Vic3RyaW5nKDEpO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhYiArIFwiLWxpbnRlclwiID09PSB0YWIpIHtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzLnB1c2goXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGFiTGFiZWwgPT09ICdMYW5ndWFnZScpIHtcbiAgICAgICAgICAgICAgICB0YWJMYWJlbCA9ICdMYW5ndWFnZSAoYmV0YSknO1xuICAgICAgICAgICAgICAgIHRhYkNsYXNzZXNPdXRwdXQgPSBgJHt0YWJDbGFzc2VzT3V0cHV0fSBsYW5ndWFnZS1iZXRhLXRhYmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogdGFiQ2xhc3Nlc091dHB1dCwgb25DbGljazogKCkgPT4gaGFuZGxlVGFiQ2xpY2sodGFiKSwga2V5OiBpbmRleCB9LFxuICAgICAgICAgICAgICAgIHRhYkxhYmVsLFxuICAgICAgICAgICAgICAgIFwiIFwiLFxuICAgICAgICAgICAgICAgIHRhYkxhYmVsID09PSAnTGFuZ3VhZ2UnICYmIFwiKGJldGEpXCIpKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJEZXNpZ25MaW50ZXIgPSAoKSA9PiB7XG4gICAgICAgIHN3aXRjaCAoYWN0aXZlVGFiKSB7XG4gICAgICAgICAgICBjYXNlIFwibGFuZ3VhZ2VcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChMYW5ndWFnZUxpbnRlclBsdWdpbiwgbnVsbCk7XG4gICAgICAgICAgICBjYXNlIFwiY29sb3JcIjpcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb2xvckxpbnRlciwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJ0YWItbmF2aWdhdGlvbi10YWIgYmFjay10YWJcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IEljb25DaGV2cm9uTGVmdCwgYWx0OiBcImJhY2sgYnV0dG9uXCIgfSkpLFxuICAgICAgICAgICAgcmVuZGVyTmF2aWdhdGlvblRhYnMoKSksXG4gICAgICAgIHJlbmRlckRlc2lnbkxpbnRlcigpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgRGVzaWduTGludGVyO1xuIiwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0eS1mdW5jdGlvbnNcIjtcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCI7XG5pbXBvcnQgTGFuZ3VhZ2VMaW50ZXIsIHsgbGludE15VGV4dCB9IGZyb20gXCJuZXctcmVsaWMtbGFuZ3VhZ2UtbGludGVyXCI7XG5pbXBvcnQgeyBQbHVnaW5Db250ZXh0IH0gZnJvbSBcIi4uL1BsdWdpbkNvbnRleHRcIjtcbnJlcXVpcmUoXCJiYWJlbC1wb2x5ZmlsbFwiKTtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmNvbnN0IExhbmd1YWdlTGludGVyUGx1Z2luID0gKCkgPT4ge1xuICAgIGNvbnN0IFt0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zLCBzZXRUZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zXSA9IHVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbc2FtcGxlVGV4dCwgc2V0U2FtcGxlVGV4dF0gPSB1c2VTdGF0ZShcIlwiKTtcbiAgICBjb25zdCBbbWF4VGV4dEluZGV4LCBzZXRNYXhUZXh0SW5kZXhdID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW3NlbGVjdGlvbkhhc0NoYW5nZWQsIHNldFNlbGVjdGlvbkhhc0NoYW5nZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBzZWxlY3RlZFRleHRMYXllcnMsIHNhbXBsZVRleHRJbmRleCwgc2V0U2FtcGxlVGV4dEluZGV4LCBsb2NhbEN1c3RvbURpY3Rpb25hcnksIGxvY2FsQ3VzdG9tRGljdGlvbmFyeUluaXRpYWxpemVkLCBjdXJyZW50U2VsZWN0aW9uLCBjdXJyZW50TGF5ZXJzTGludGVkRm9yTGFuZ3VhZ2UsIH0gPSBzdGF0ZTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwicmVxdWVzdC1sb2NhbC1jdXN0b20tZGljdGlvbmFyeVwiIH0gfSwgXCIqXCIpO1xuICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKGZhbHNlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJ1bi1sYW5ndWFnZS1saW50ZXJcIiB9IH0sIFwiKlwiKTtcbiAgICB9LCBbXSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zWzBdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0TWF4VGV4dEluZGV4KHRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHQoXCJcIik7XG4gICAgICAgICAgICBzZXRNYXhUZXh0SW5kZXgoMCk7XG4gICAgICAgIH1cbiAgICB9LCBbdGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChzYW1wbGVUZXh0ICE9PSBcIlwiKSB7XG4gICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzYW1wbGUtdGV4dC1jaGFuZ2VkXCIsXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZU5vZGVJZDogdGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc1tzYW1wbGVUZXh0SW5kZXhdLmlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBcIipcIik7XG4gICAgICAgIH1cbiAgICB9LCBbc2FtcGxlVGV4dF0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidXNlRWZmZWN0IGZpcmVkXCIpO1xuICAgICAgICBpZiAobG9jYWxDdXN0b21EaWN0aW9uYXJ5SW5pdGlhbGl6ZWQgJiYgc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsb2NhbEN1c3RvbURpY3Rpb25hcnlJbml0aWFsaXplZCAmJlxuICAgICAgICAgICAgc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dChcIlwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJyZXF1ZXN0LWxvY2FsLWN1c3RvbS1kaWN0aW9uYXJ5XCIgfSB9LCBcIipcIik7XG4gICAgICAgIH1cbiAgICB9LCBbc2VsZWN0ZWRUZXh0TGF5ZXJzLCBsb2NhbEN1c3RvbURpY3Rpb25hcnldKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWlzRXF1YWwoY3VycmVudFNlbGVjdGlvbiwgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlKSAmJlxuICAgICAgICAgICAgY3VycmVudExheWVyc0xpbnRlZEZvckxhbmd1YWdlKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3Rpb25IYXNDaGFuZ2VkKHRydWUpO1xuICAgICAgICB9XG4gICAgfSwgW2N1cnJlbnRTZWxlY3Rpb24sIGN1cnJlbnRMYXllcnNMaW50ZWRGb3JMYW5ndWFnZV0pO1xuICAgIGNvbnN0IGxpbnRTZWxlY3RlZExheWVycyA9ICgpID0+IHtcbiAgICAgICAgc2V0U2VsZWN0aW9uSGFzQ2hhbmdlZChmYWxzZSk7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7IHBsdWdpbk1lc3NhZ2U6IHsgdHlwZTogXCJydW4tbGFuZ3VhZ2UtbGludGVyXCIgfSB9LCBcIipcIik7XG4gICAgfTtcbiAgICBjb25zdCB1cGRhdGVTb3VyY2VUZXh0ID0gKHVwZGF0ZWRUZXh0KSA9PiB7XG4gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICBwbHVnaW5NZXNzYWdlOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJ1cGRhdGUtc291cmNlLXRleHRcIixcbiAgICAgICAgICAgICAgICBsYXllcklkOiB0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleF0uaWQsXG4gICAgICAgICAgICAgICAgdXBkYXRlZFRleHQ6IHVwZGF0ZWRUZXh0LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICBzZXRTYW1wbGVUZXh0KHVwZGF0ZWRUZXh0KTtcbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVRleHRMYXllck5hdmlnYXRpb24gPSAoZGlyZWN0aW9uKSA9PiB7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwicHJldmlvdXNcIikge1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dCh0ZXh0TGF5ZXJzV2l0aFN1Z2dlc3Rpb25zW3NhbXBsZVRleHRJbmRleCAtIDFdLmNoYXJhY3RlcnMpO1xuICAgICAgICAgICAgc2V0U2FtcGxlVGV4dEluZGV4KHNhbXBsZVRleHRJbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJuZXh0XCIpIHtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHQodGV4dExheWVyc1dpdGhTdWdnZXN0aW9uc1tzYW1wbGVUZXh0SW5kZXggKyAxXS5jaGFyYWN0ZXJzKTtcbiAgICAgICAgICAgIHNldFNhbXBsZVRleHRJbmRleChzYW1wbGVUZXh0SW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgYXN5bmNGaWx0ZXIgPSAoYXJyLCBjYWxsYmFjaykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IGZhaWwgPSBTeW1ib2woKTtcbiAgICAgICAgcmV0dXJuICh5aWVsZCBQcm9taXNlLmFsbChhcnIubWFwKChpdGVtKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHsgcmV0dXJuICgoeWllbGQgY2FsbGJhY2soaXRlbSkpID8gaXRlbSA6IGZhaWwpOyB9KSkpKS5maWx0ZXIoKGkpID0+IGkgIT09IGZhaWwpO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMgPSAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgbGF5ZXJzV2l0aFN1Z2dlc3Rpb25zID0geWllbGQgYXN5bmNGaWx0ZXIoc2VsZWN0ZWRUZXh0TGF5ZXJzLCAoaXRlbSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBsZXQgcmVwb3J0ID0gXCJcIjtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UucmVzb2x2ZShsaW50TXlUZXh0KGl0ZW0uY2hhcmFjdGVycywgbG9jYWxDdXN0b21EaWN0aW9uYXJ5KSkudGhlbigocmVzdWx0KSA9PiAocmVwb3J0ID0gcmVzdWx0KSk7XG4gICAgICAgICAgICBpZiAocmVwb3J0Lm1lc3NhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXBvcnRXaXRoRW51bWVyYWJsZVByb3BzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShyZXBvcnQubWVzc2FnZXMpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5pbWFsUmVwb3J0ID0gcmVwb3J0V2l0aEVudW1lcmFibGVQcm9wcy5tYXAoKG1lc3NhZ2UpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogbWVzc2FnZS5hY3R1YWwsXG4gICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBtZXNzYWdlLmV4cGVjdGVkLnNsaWNlKDAsIDMpLFxuICAgICAgICAgICAgICAgICAgICBydWxlOiBtZXNzYWdlLnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgcGx1Z2luTWVzc2FnZToge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0ZXh0LWxpbnRlZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbFJlcG9ydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxSZXBvcnQ6IHJlcG9ydFdpdGhFbnVtZXJhYmxlUHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSwgXCIqXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICEhKChfYSA9IHJlcG9ydC5tZXNzYWdlc1swXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1lc3NhZ2UpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHNldFRleHRMYXllcnNXaXRoU3VnZ2VzdGlvbnMobGF5ZXJzV2l0aFN1Z2dlc3Rpb25zKTtcbiAgICB9KTtcbiAgICBjb25zdCBhZGRUb0RpY3Rpb25hcnkgPSAod29yZFRvQWRkLCBzdWdnZXN0aW9uSWQpID0+IHtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFkZC10by1kaWN0aW9uYXJ5XCIsXG4gICAgICAgICAgICAgICAgd29yZFRvQWRkOiB3b3JkVG9BZGQsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LCBcIipcIik7XG4gICAgfTtcbiAgICBjb25zdCBwcm92aWRlU2FtcGxlVGV4dCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbGF5ZXJJc1NlbGVjdGVkID0gc2VsZWN0ZWRUZXh0TGF5ZXJzLmxlbmd0aCA+IDA7XG4gICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zQXZhaWxhYmxlID0gdGV4dExheWVyc1dpdGhTdWdnZXN0aW9ucy5sZW5ndGggPiAwO1xuICAgICAgICBpZiAoIWxheWVySXNTZWxlY3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobGF5ZXJJc1NlbGVjdGVkICYmICFzdWdnZXN0aW9uc0F2YWlsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiSGVsbG8sIFdvcmxkXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc2FtcGxlVGV4dDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzID0gY2xhc3NOYW1lcyhcImxhbmd1YWdlLWxpbnRlci1jb250YWluZXJcIiwge1xuICAgICAgICBcInNlbGVjdGlvbi1oYXMtY2hhbmdlZFwiOiBzZWxlY3Rpb25IYXNDaGFuZ2VkLFxuICAgIH0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogY29sb3JMaW50ZXJDb250YWluZXJDbGFzc2VzIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibmF2XCIsIHsgY2xhc3NOYW1lOiBcInRleHQtbGF5ZXItbmF2XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyBsZWZ0LW5hdi1hcnJvd1wiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUZXh0TGF5ZXJOYXZpZ2F0aW9uKFwicHJldmlvdXNcIiksIGRpc2FibGVkOiBzYW1wbGVUZXh0SW5kZXggLSAxIDwgMCB9KSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyByaWdodC1uYXYtYXJyb3dcIiwgb25DbGljazogKCkgPT4gaGFuZGxlVGV4dExheWVyTmF2aWdhdGlvbihcIm5leHRcIiksIGRpc2FibGVkOiBzYW1wbGVUZXh0SW5kZXggKyAxID49IG1heFRleHRJbmRleCB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KExhbmd1YWdlTGludGVyLCB7IHNhbXBsZVRleHQ6IHByb3ZpZGVTYW1wbGVUZXh0KCksIHNldFNhbXBsZVRleHQ6IHVwZGF0ZVNvdXJjZVRleHQsIHVwZGF0ZVRpbWVyOiAxMDAsIGN1c3RvbURpY3Rpb25hcnk6IGxvY2FsQ3VzdG9tRGljdGlvbmFyeSwgYWRkVG9EaWN0aW9uYXJ5OiBhZGRUb0RpY3Rpb25hcnksIG9wZW5MaW5rc0luTmV3VGFiOiB0cnVlIH0pLFxuICAgICAgICAgICAgc2VsZWN0aW9uSGFzQ2hhbmdlZCAmJiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImZvb3RlclwiLCB7IGNsYXNzTmFtZTogXCJjb2xvci1saW50aW5nLWZvb3RlclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7IGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnlcIiwgb25DbGljazogKCkgPT4gbGludFNlbGVjdGVkTGF5ZXJzKCkgfSwgXCJDaGVjayBjdXJyZW50IHNlbGVjdGlvblwiKSkpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IExhbmd1YWdlTGludGVyUGx1Z2luO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBIb21lID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBzZXRBY3RpdmVQbHVnaW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IFBsdWdpblRpbGUgPSAocHJvcHMpID0+IHtcbiAgICAgICAgY29uc3QgeyBoZWFkaW5nLCBkZXNjcmlwdGlvbiwgb25DbGljaywgcGx1Z2luTmFtZSB9ID0gcHJvcHM7XG4gICAgICAgIGNvbnN0IHRpbGVDbGFzc2VzID0ge1xuICAgICAgICAgICAgdGFibGVDcmVhdG9yOiBcInRhYmxlLWNyZWF0b3JcIixcbiAgICAgICAgICAgIHRoZW1lU3dpdGNoZXI6IFwidGhlbWUtc3dpdGNoZXJcIixcbiAgICAgICAgICAgIGRlc2lnbkxpbnRlcjogXCJkZXNpZ24tbGludGVyXCIsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogYHBsdWdpbi10aWxlLWNvbnRhaW5lciAke3RpbGVDbGFzc2VzW3BsdWdpbk5hbWVdfWAsIG9uQ2xpY2s6ICgpID0+IG9uQ2xpY2soKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1pY29uXCIsIFwiYXJpYS1oaWRkZW5cIjogXCJ0cnVlXCIgfSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInBsdWdpbi10aWxlLWNvcHlcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJoM1wiLCB7IGNsYXNzTmFtZTogXCJwbHVnaW4tdGlsZS1oZWFkaW5nXCIgfSwgaGVhZGluZyksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBjbGFzc05hbWU6IFwicGx1Z2luLXRpbGUtZGVzY3JpcHRpb25cIiB9LCBkZXNjcmlwdGlvbikpKSk7XG4gICAgfTtcbiAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaG9tZS1jb250YWluZXJcIiB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpblRpbGUsIHsgcGx1Z2luTmFtZTogXCJ0YWJsZUNyZWF0b3JcIiwgaGVhZGluZzogXCJUYWJsZSBjcmVhdG9yXCIsIGRlc2NyaXB0aW9uOiBcIkNyZWF0ZSBPbmUgQ29yZSB0YWJsZXMgd2l0aCB5b3VyIGNlbGwgYW5kIGNvbHVtbiBzZXR0aW5ncy5cIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwidGFibGUtY3JlYXRvclwiKSB9KSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQbHVnaW5UaWxlLCB7IHBsdWdpbk5hbWU6IFwidGhlbWVTd2l0Y2hlclwiLCBoZWFkaW5nOiBcIlRoZW1lIHN3aXRjaGVyXCIsIGRlc2NyaXB0aW9uOiBcIkEgZGFyayBtb2RlIG9yIGxpZ2h0IG1vZGUgc2V0dGluZyBmb3IgeW91ciBsYXllcnNcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwidGhlbWUtc3dpdGNoZXJcIikgfSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luVGlsZSwgeyBwbHVnaW5OYW1lOiBcImRlc2lnbkxpbnRlclwiLCBoZWFkaW5nOiBcIkRlc2lnbiBsaW50ZXJcIiwgZGVzY3JpcHRpb246IFwiQ2hlY2tzIHlvdXIgbGF5ZXJzIGZvciBjb2xvciBzdHlsZXMsIGFuZCBzb29uIHdpbGwgY2hlY2sgZm9yIGxhbmd1YWdlIHRvby5cIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiY29sb3ItbGludGVyXCIpIH0pLFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJob21lLXN1cHBvcnRcIiB9LFxuICAgICAgICAgICAgXCJSZXBvcnQgYSBidWcsIHNoYXJlIGEgZmVhdHVyZSBpZGVhLCBvciBnZXQgc3VwcG9ydCBhdFwiLFxuICAgICAgICAgICAgXCIgXCIsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3Ryb25nXCIsIG51bGwsIFwiI2hlbHAtb25lLWNvcmVcIiksXG4gICAgICAgICAgICBcIi5cIikpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBIb21lO1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGNvbnN0IFBsdWdpbkNvbnRleHQgPSBjcmVhdGVDb250ZXh0KG51bGwpO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5jb25zdCBSZXNpemVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlc2l6ZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW3ByZXNzZWQsIHNldFByZXNzZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gKGUpID0+IHtcbiAgICAgICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5zZXRQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgICAgICBzZXRQcmVzc2VkKHRydWUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBoYW5kbGVQb2ludGVyVXAgPSAoZSkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbGVhc2VQb2ludGVyQ2FwdHVyZShlLnBvaW50ZXJJZCk7XG4gICAgICAgICAgICBzZXRQcmVzc2VkKGZhbHNlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChwcmVzc2VkKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInJlc2l6ZVwiLCBzaXplOiB7IHg6IGUuY2xpZW50WCwgeTogZS5jbGllbnRZIH0gfSB9LCBcIipcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJlc2l6ZXJSZWYuY3VycmVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgaGFuZGxlUG9pbnRlckRvd24pO1xuICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBoYW5kbGVQb2ludGVyVXApO1xuICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLCBoYW5kbGVNb3VzZU1vdmUpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBoYW5kbGVQb2ludGVyRG93bik7XG4gICAgICAgICAgICByZXNpemVyUmVmLmN1cnJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBoYW5kbGVQb2ludGVyVXApO1xuICAgICAgICAgICAgcmVzaXplclJlZi5jdXJyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIiwgaGFuZGxlTW91c2VNb3ZlKTtcbiAgICAgICAgfTtcbiAgICB9LCBbcHJlc3NlZF0pO1xuICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgcmVmOiByZXNpemVyUmVmLCBjbGFzc05hbWU6IFwicmVzaXplclwiIH0pO1xufTtcbmV4cG9ydCBkZWZhdWx0IFJlc2l6ZXI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBDb2x1bW5Db25maWd1cmF0aW9uID0gKHsgY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uLCBhY3RpdmVDb2wsIGlzTXVsdGlWYWx1ZSwgY29sdW1uQ29uZmlndXJhdGlvbiwgc2V0Q29sdW1uQ29uZmlndXJhdGlvbiwgfSkgPT4ge1xuICAgIGNvbnN0IFthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuLCBzZXRBY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXSA9IHVzZVN0YXRlKDApO1xuICAgIGNvbnN0IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUgPSAoYXR0cikgPT4ge1xuICAgICAgICBsZXQgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5ID0gWy4uLmNvbHVtbkNvbmZpZ3VyYXRpb25dO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXlbYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bYXR0cl0gPVxuICAgICAgICAgICAgYXR0ciAhPT0gXCJtdWx0aVZhbHVlXCIgPyBlbGVtZW50LnZhbHVlIDogZWxlbWVudC5jaGVja2VkO1xuICAgICAgICBpZiAoY29sdW1uQ29uZmlndXJhdGlvbkFycmF5W2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW2F0dHJdID09PSBcIm1ldHJpY1wiKSB7XG4gICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXlbYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbl1bXCJhbGlnbm1lbnRcIl0gPVxuICAgICAgICAgICAgICAgIFwicmlnaHRcIjtcbiAgICAgICAgfVxuICAgICAgICBzZXRDb2x1bW5Db25maWd1cmF0aW9uKGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheSk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVOYXZCdXR0b25DbGljayA9IChkaXJlY3Rpb24pID0+IHtcbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gXCJwcmV2aW91c1wiICYmIGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gIT09IDApIHtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4oYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiAtIDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gXCJuZXh0XCIgJiZcbiAgICAgICAgICAgIGFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4gIT09IGNvbHVtbkNvbmZpZ3VyYXRpb24ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgc2V0QWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbihhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuICsgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNvbHVtbk5hdmlnYXRpb24gPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhbmRsZUNvbHVtbk9wdGlvblNlbGVjdGlvbiA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IGUudGFyZ2V0Lm9wdGlvbnNbZS50YXJnZXQub3B0aW9ucy5zZWxlY3RlZEluZGV4XTtcbiAgICAgICAgICAgIHNldEFjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW4ocGFyc2VJbnQoc2VsZWN0ZWRPcHRpb24udmFsdWUpIC0gMSk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcIm5hdlwiLCB7IGNsYXNzTmFtZTogXCJjb2x1bW4tbmF2XCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwibmF2LWFycm93IGxlZnQtbmF2LWFycm93XCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZU5hdkJ1dHRvbkNsaWNrKFwicHJldmlvdXNcIiksIGRpc2FibGVkOiBhY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuID09PSAwIH0pLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIHsgbmFtZTogXCJjb2x1bW4tc2VsZWN0aW9uXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tc2VsZWN0aW9uLWRyb3Bkb3duXCIsIG9uQ2hhbmdlOiAoZSkgPT4gaGFuZGxlQ29sdW1uT3B0aW9uU2VsZWN0aW9uKGUpLCB2YWx1ZTogYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiArIDEgfSwgWy4uLkFycmF5KGFjdGl2ZUNvbCkua2V5cygpXS5tYXAoKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IGtleTogaW5kZXgsIHZhbHVlOiBpbmRleCArIDEsIGNsYXNzTmFtZTogXCJjb2x1bW4tc2VsZWN0aW9uLWRyb3Bkb3duLW9wdGlvblwiIH0sIGBDb2x1bW4gJHtpbmRleCArIDF9YCkpO1xuICAgICAgICAgICAgICAgIH0pKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgY2xhc3NOYW1lOiBcIm5hdi1hcnJvdyByaWdodC1uYXYtYXJyb3dcIiwgb25DbGljazogKCkgPT4gaGFuZGxlTmF2QnV0dG9uQ2xpY2soXCJuZXh0XCIpLCBkaXNhYmxlZDogYWN0aXZlQ29sQ29uZmlndXJhdGlvblNjcmVlbiA9PT0gY29sdW1uQ29uZmlndXJhdGlvbi5sZW5ndGggLSAxIH0pKSk7XG4gICAgfTtcbiAgICBjb25zdCByZW5kZXJDb25maWd1cmF0aW9uQm9keSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgbXVsdGlWYWx1ZURpc2FibGVkID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENlbGxUeXBlID0gY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImNlbGxUeXBlXCJdO1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRDZWxsVHlwZSA9PT0gXCJUZXh0XCIgfHxcbiAgICAgICAgICAgICAgICBjdXJyZW50Q2VsbFR5cGUgPT09IFwidGV4dFwiIHx8XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxUeXBlID09PSBcIm1ldHJpY1wiIHx8XG4gICAgICAgICAgICAgICAgY3VycmVudENlbGxUeXBlID09PSBcImVudGl0eVwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcInNlY3Rpb25cIiwgeyBjbGFzc05hbWU6IFwiY29uZmlndXJhdGlvbi1ib2R5XCIgfSxcbiAgICAgICAgICAgIHJlbmRlckNvbHVtbk5hdmlnYXRpb24oKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiY29uZmlndXJhdGlvbi1ib2R5LWhlYWRpbmdzXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgbnVsbCwgXCJDZWxsIGZvcm1hdHRpbmdcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImg2XCIsIG51bGwsIFwiQ2hvb3NlIHRoZSBwcm9wZXJ0aWVzIGZvciB0aGUgY2VsbHMgaW4gdGhpcyBjb2x1bW5cIikpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiY29sdW1uLW5hbWVcIiB9LCBcIkNvbHVtbiBuYW1lXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwidGV4dFwiLCBuYW1lOiBcImNvbHVtbi1uYW1lXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1uYW1lLWlucHV0XCIsIHBsYWNlaG9sZGVyOiBcImUuZy4gZGF0ZSwgYWNjb3VudCwgdGhyb3VnaHB1dCwgZXRjLiBcIiwgaWQ6IFwiY29sdW1uLW5hbWVcIiwgb25DaGFuZ2U6ICgpID0+IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUoXCJuYW1lXCIpLCB2YWx1ZTogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcIm5hbWVcIl0gfSkpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwiY29sdW1uLWNlbGwtdHlwZVwiIH0sIFwiQ2VsbCB0eXBlXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwic2VsZWN0LWlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWxlY3RcIiwgeyBuYW1lOiBcImFsaWdubWVudC1zZWxlY3Rpb25cIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWlucHV0IGNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dFwiLCBpZDogXCJjb2x1bW4tY2VsbC10eXBlXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kbGVDb2x1bW5Db25maWd1cmF0aW9uVXBkYXRlKFwiY2VsbFR5cGVcIiksIHZhbHVlOiBjb2x1bW5Db25maWd1cmF0aW9uW2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW1wiY2VsbFR5cGVcIl0gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJ0ZXh0XCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJUZXh0XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImxpbmtcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dC1vcHRpb25cIiB9LCBcIkxpbmtcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwibWV0cmljXCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJNZXRyaWNcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwiZW50aXR5XCIsIGNsYXNzTmFtZTogXCJjb2x1bW4tY29uZmlndXJhdGlvbi1jZWxsLXR5cGUtaW5wdXQtb3B0aW9uXCIgfSwgXCJFbnRpdHlcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwiZmF2b3JpdGVcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dC1vcHRpb25cIiB9LCBcIkZhdm9yaXRlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcInVzZXJcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dC1vcHRpb25cIiB9LCBcIlVzZXJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwiY2hlY2tib3hcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dC1vcHRpb25cIiB9LCBcIkNoZWNrYm94XCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm9wdGlvblwiLCB7IHZhbHVlOiBcImFjdGlvbnNcIiwgY2xhc3NOYW1lOiBcImNvbHVtbi1jb25maWd1cmF0aW9uLWNlbGwtdHlwZS1pbnB1dC1vcHRpb25cIiB9LCBcIkFjdGlvbnNcIikpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJjb2x1bW4tYWxpZ25tZW50XCIgfSwgXCJBbGlnbm1lbnRcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJzZWxlY3QtaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNlbGVjdFwiLCB7IG5hbWU6IFwiYWxpZ25tZW50LXNlbGVjdGlvblwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24taW5wdXQgY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0XCIsIGlkOiBcImNvbHVtbi1hbGlnbm1lbnRcIiwgb25DaGFuZ2U6ICgpID0+IGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb25VcGRhdGUoXCJhbGlnbm1lbnRcIiksIHZhbHVlOiBjb2x1bW5Db25maWd1cmF0aW9uW2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW1wiYWxpZ25tZW50XCJdLCBkaXNhYmxlZDogY29sdW1uQ29uZmlndXJhdGlvblthY3RpdmVDb2xDb25maWd1cmF0aW9uU2NyZWVuXVtcImNlbGxUeXBlXCJdID09PSBcIm1ldHJpY1wiIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwib3B0aW9uXCIsIHsgdmFsdWU6IFwibGVmdFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiTGVmdFwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgeyB2YWx1ZTogXCJyaWdodFwiLCBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYWxpZ25tZW50LWlucHV0LW9wdGlvblwiIH0sIFwiUmlnaHRcIikpKSksXG4gICAgICAgICAgICBpc011bHRpVmFsdWUgJiYgKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwiaW5wdXQtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImNvbHVtbi1tdWx0aS12YWx1ZVwiIH0sIFwiU2hvdyBtdWx0aS12YWx1ZVwiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcImNoZWNrYm94XCIsIGlkOiBcImNvbHVtbi1tdWx0aS12YWx1ZVwiLCBvbkNoYW5nZTogKCkgPT4gaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvblVwZGF0ZShcIm11bHRpVmFsdWVcIiksIGNoZWNrZWQ6ICFtdWx0aVZhbHVlRGlzYWJsZWQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW5Db25maWd1cmF0aW9uW2FjdGl2ZUNvbENvbmZpZ3VyYXRpb25TY3JlZW5dW1wibXVsdGlWYWx1ZVwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmYWxzZSwgZGlzYWJsZWQ6IG11bHRpVmFsdWVEaXNhYmxlZCgpIH0pKSkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlckNhbGxzVG9BY3Rpb24gPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuXCIsIG9uQ2xpY2s6IGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uIH0sIFwiQmFja1wiKSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwgeyBjbGFzc05hbWU6IFwiYnRuIGJ0bi1wcmltYXJ5IGJ0bi1jcmVhdGUtdGFibGVcIiwgb25DbGljazogY3JlYXRlVGFibGUgfSwgXCJDcmVhdGUgdGFibGVcIikpKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcIm1haW5cIiwgeyBjbGFzc05hbWU6IFwiY29sdW1uLWNvbmZpZ3VyYXRpb24tYm9keVwiIH0sXG4gICAgICAgICAgICByZW5kZXJDb25maWd1cmF0aW9uQm9keSgpLFxuICAgICAgICAgICAgcmVuZGVyQ2FsbHNUb0FjdGlvbigpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IENvbHVtbkNvbmZpZ3VyYXRpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuLi8uLi9zdHlsZXMvdWkuY3NzXCI7XG5jb25zdCBEaW1lbnNpb25zU2VsZWN0aW9uID0gKHsgaGFuZGxlR3JpZFNxdWFyZUNsaWNrLCBhY3RpdmVDb2wsIGFjdGl2ZVJvdywgaXNNdWx0aVZhbHVlLCBzZXRJc011bHRpVmFsdWUsIGhhbmRlR3JpZFNlbGVjdGlvbklucHV0cywgZ29Ub0NvbHVtbkNvbmZpZ3VyYXRpb24sIH0pID0+IHtcbiAgICBjb25zdCBbaG92ZXJlZENvbCwgc2V0SG92ZXJlZENvbF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbaG92ZXJlZFJvdywgc2V0SG92ZXJlZFJvd10gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbdGFibGVIb3ZlcmVkLCBzZXRUYWJsZUhvdmVyZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IGhhbmRsZUdyaWRTcXVhcmVNb3VzZUVudGVyID0gKGNvbEluZGV4LCByb3dJbmRleCkgPT4ge1xuICAgICAgICBzZXRIb3ZlcmVkQ29sKGNvbEluZGV4KTtcbiAgICAgICAgc2V0SG92ZXJlZFJvdyhyb3dJbmRleCk7XG4gICAgfTtcbiAgICBjb25zdCBoYW5kbGVNdWx0aVZhbHVlSW5wdXQgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSBlLnRhcmdldC5jaGVja2VkO1xuICAgICAgICBzZXRJc011bHRpVmFsdWUoaXNDaGVja2VkKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbmRlclRhYmxlID0gKCkgPT4ge1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0YWJsZVwiLCB7IGNsYXNzTmFtZTogYGdyaWQtc2VsZWN0b3IgJHt0YWJsZUhvdmVyZWQgPyBcImhvdmVyZWRcIiA6IFwiXCJ9YCwgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRUYWJsZUhvdmVyZWQodHJ1ZSksIG9uTW91c2VMZWF2ZTogKCkgPT4gc2V0VGFibGVIb3ZlcmVkKGZhbHNlKSB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInRib2R5XCIsIG51bGwsIFsuLi5BcnJheSg4KS5rZXlzKCldLm1hcCgocm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0clwiLCB7IGtleTogcm93SW5kZXggfSwgWy4uLkFycmF5KDgpLmtleXMoKV0ubWFwKChjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ0ZFwiLCB7IGNsYXNzTmFtZTogYGlucHV0X19yYWRpb2AsIGtleTogY29sSW5kZXggfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwicmFkaW9cIiwgaWQ6IGB0JHtyb3dJbmRleCArIDF9eCR7Y29sSW5kZXggKyAxfWAsIG5hbWU6IFwic2VsZWN0aW9uXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBgdCR7cm93SW5kZXggKyAxfXgke2NvbEluZGV4ICsgMX1gLCBvbk1vdXNlRW50ZXI6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVNb3VzZUVudGVyKGNvbEluZGV4LCByb3dJbmRleCksIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUdyaWRTcXVhcmVDbGljayhjb2xJbmRleCwgcm93SW5kZXgpLCBjbGFzc05hbWU6IGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2xJbmRleCA8PSBob3ZlcmVkQ29sICYmIHJvd0luZGV4IDw9IGhvdmVyZWRSb3dcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImhvdmVyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IFwiXCJ9IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbEluZGV4IDwgYWN0aXZlQ29sICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0luZGV4IDwgYWN0aXZlUm93ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICEoYWN0aXZlUm93ID09PSAwICYmIGFjdGl2ZUNvbCA9PT0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBcImFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogXCJcIn1gIH0pKSk7XG4gICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0pKSkpO1xuICAgIH07XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImRpbWVuc2lvbnMtc2VsZWN0aW9uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGFibGUtZGltZW5zaW9ucy1jb25maWdcIiB9LFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJpbnB1dC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwibnVtYmVyLW9mLWNvbHNcIiB9LCBcIkNvbHVtbnNcIiksXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJudW1iZXJcIiwgbWluOiBcIjBcIiwgbWF4OiBcIjI0XCIsIG5hbWU6IFwibnVtYmVyLW9mLWNvbHNcIiwgaWQ6IFwibnVtYmVyLW9mLWNvbHNcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1jb2xzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJjb2xcIiksIHZhbHVlOiBhY3RpdmVDb2wgPT09IDAgJiYgYWN0aXZlUm93ID09PSAwID8gXCJcIiA6IGFjdGl2ZUNvbCwgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkQ29sICsgMSkudG9TdHJpbmcoKSA6IFwiKDI0IG1heClcIiB9KSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJudW1iZXItb2Ytcm93c1wiIH0sIFwiUm93c1wiKSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcIm51bWJlclwiLCBtaW46IFwiMFwiLCBtYXg6IFwiMTAwXCIsIG5hbWU6IFwibnVtYmVyLW9mLXJvd3NcIiwgaWQ6IFwibnVtYmVyLW9mLXJvd3NcIiwgY2xhc3NOYW1lOiBcIm51bWJlci1vZi1yb3dzXCIsIG9uQ2hhbmdlOiAoKSA9PiBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMoXCJyb3dcIiksIHZhbHVlOiBhY3RpdmVSb3cgPT09IDAgJiYgYWN0aXZlQ29sID09PSAwID8gXCJcIiA6IGFjdGl2ZVJvdywgcGxhY2Vob2xkZXI6IHRhYmxlSG92ZXJlZCA/IChob3ZlcmVkUm93ICsgMSkudG9TdHJpbmcoKSA6IFwiKDEwMCBtYXgpXCIgfSkpKSxcbiAgICAgICAgcmVuZGVyVGFibGUoKSxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJjdGEtY29udGFpbmVyIGRpbWVuc2lvbnMtY3RhLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcImlucHV0LWNvbnRhaW5lciBsZWZ0LXRvLXJpZ2h0XCIgfSxcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwgeyB0eXBlOiBcImNoZWNrYm94XCIsIG5hbWU6IFwibXVsdGktdmFsdWVcIiwgaWQ6IFwibXVsdGktdmFsdWVcIiwgXCJhcmlhLWRlc2NyaWJlZGJ5XCI6IFwiI211bHRpLXZhbHVlLXRvb2x0aXBcIiwgY2xhc3NOYW1lOiBcIm11bHRpLXZhbHVlLWNoZWNrYm94XCIsIHZhbHVlOiBpc011bHRpVmFsdWUsIG9uQ2hhbmdlOiAoZSkgPT4gaGFuZGxlTXVsdGlWYWx1ZUlucHV0KGUpIH0pLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7IGh0bWxGb3I6IFwibXVsdGktdmFsdWVcIiB9LCBcIk11bHRpLXZhbHVlIGNlbGxzXCIpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidG9vbHRpcC1jb250YWluZXJcIiB9LFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJ0b29sdGlwLXRyaWdnZXJcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBcIiwgeyBjbGFzc05hbWU6IFwidG9vbHRpcFwiLCBpZDogXCJtdWx0aS12YWx1ZS10b29sdGlwXCIsIHJvbGU6IFwidG9vbHRpcFwiIH0sIFwiRW5hYmxlcyBhIHNlY29uZCBsaW5lIG9mIGNvbnRlbnQgZm9yIGNlbGxzXCIpKSksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHsgZGlzYWJsZWQ6IGFjdGl2ZUNvbCA8IDEsIGNsYXNzTmFtZTogXCJidG4gYnRuLXByaW1hcnkgYnRuLWNyZWF0ZS10YWJsZVwiLCBvbkNsaWNrOiBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiB9LCBcIkNvbnRpbnVlXCIpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IERpbWVuc2lvbnNTZWxlY3Rpb247XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4uLy4uL3N0eWxlcy91aS5jc3NcIjtcbmltcG9ydCBDb2x1bW5Db25maWd1cmF0aW9uIGZyb20gXCIuL0NvbHVtbkNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBEaW1lbnNpb25zU2VsZWN0aW9uIGZyb20gXCIuL0RpbWVuc2lvbnNTZWxlY3Rpb25cIjtcbmltcG9ydCBJY29uQ2hldnJvbkxlZnQgZnJvbSBcIi4uLy4uL2Fzc2V0cy9pY29uLWNoZXZyb24tbGVmdC5zdmdcIjtcbmNvbnN0IFRhYmxlQ3JlYXRvciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc2V0QWN0aXZlUGx1Z2luIH0gPSBwcm9wcztcbiAgICBjb25zdCBbYWN0aXZlVGFiXSA9IHVzZVN0YXRlKFwidGFibGUtY3JlYXRvclwiKTtcbiAgICBjb25zdCBbYWN0aXZlU2NyZWVuLCBzZXRBY3RpdmVTY3JlZW5dID0gdXNlU3RhdGUoXCJEaW1lbnNpb25zU2VsZWN0aW9uXCIpO1xuICAgIGNvbnN0IFthY3RpdmVDb2wsIHNldEFjdGl2ZUNvbF0gPSB1c2VTdGF0ZSgwKTtcbiAgICBjb25zdCBbYWN0aXZlUm93LCBzZXRBY3RpdmVSb3ddID0gdXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2lzTXVsdGlWYWx1ZSwgc2V0SXNNdWx0aVZhbHVlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbY29sdW1uQ29uZmlndXJhdGlvbiwgc2V0Q29sdW1uQ29uZmlndXJhdGlvbl0gPSB1c2VTdGF0ZShbXSk7XG4gICAgY29uc3QgaGFuZGxlQ29sdW1uQ29uZmlndXJhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgbGV0IGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheSA9IFtdO1xuICAgICAgICBpZiAoY29sdW1uQ29uZmlndXJhdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIFsuLi5BcnJheShhY3RpdmVDb2wpLmtleXMoKV0ubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogXCJMZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgIGNlbGxUeXBlOiBcIlRleHRcIixcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlWYWx1ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjb2x1bW5Db25maWd1cmF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheSA9IGNvbHVtbkNvbmZpZ3VyYXRpb247XG4gICAgICAgICAgICBpZiAoY29sdW1uQ29uZmlndXJhdGlvbkFycmF5Lmxlbmd0aCA+IGFjdGl2ZUNvbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHVtbnNUb1JlbW92ZSA9IGNvbHVtbkNvbmZpZ3VyYXRpb25BcnJheS5sZW5ndGggLSBhY3RpdmVDb2w7XG4gICAgICAgICAgICAgICAgWy4uLkFycmF5KGNvbHVtbnNUb1JlbW92ZSkua2V5cygpXS5tYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkucG9wKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2x1bW5zVG9BZGQgPSBhY3RpdmVDb2wgLSBjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIFsuLi5BcnJheShjb2x1bW5zVG9BZGQpLmtleXMoKV0ubWFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbkFycmF5LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudDogXCJMZWZ0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjZWxsVHlwZTogXCJUZXh0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aVZhbHVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0Q29sdW1uQ29uZmlndXJhdGlvbihjb2x1bW5Db25maWd1cmF0aW9uQXJyYXkpO1xuICAgIH07XG4gICAgdXNlRWZmZWN0KGhhbmRsZUNvbHVtbkNvbmZpZ3VyYXRpb24sIFthY3RpdmVDb2xdKTtcbiAgICBjb25zdCBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHMgPSAodHlwZSkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBsZXQgeyB2YWx1ZSwgbWluLCBtYXggfSA9IGVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IE1hdGgubWF4KE51bWJlcihtaW4pLCBNYXRoLm1pbihOdW1iZXIobWF4KSwgTnVtYmVyKHZhbHVlKSkpO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJjb2xcIikge1xuICAgICAgICAgICAgc2V0QWN0aXZlQ29sKGNhbGN1bGF0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gXCJyb3dcIikge1xuICAgICAgICAgICAgc2V0QWN0aXZlUm93KGNhbGN1bGF0ZWRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZUdyaWRTcXVhcmVDbGljayA9IChjb2xJbmRleCwgcm93SW5kZXgpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlQ29sKGNvbEluZGV4ICsgMSk7XG4gICAgICAgIHNldEFjdGl2ZVJvdyhyb3dJbmRleCArIDEpO1xuICAgIH07XG4gICAgY29uc3QgY3JlYXRlVGFibGUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhhc05vTXVsdGlWYWx1ZUNvbHMgPSBjb2x1bW5Db25maWd1cmF0aW9uLnNvbWUoKGNvbCkgPT4gIWNvbC5jb2xNdWx0aVZhbHVlKTtcbiAgICAgICAgaWYgKGlzTXVsdGlWYWx1ZSAmJiBoYXNOb011bHRpVmFsdWVDb2xzKSB7XG4gICAgICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJkaXNwbGF5LWVycm9yXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGBZb3UgbXVzdCBjaGVjayBlbmFibGUgXCJTaG93IG11bHRpLXZhbHVlXCIgb24gYXQgbGVhc3Qgb25lIGNvbHVtbi5gLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LCBcIipcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHBsdWdpbk1lc3NhZ2U6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNyZWF0ZS10YWJsZVwiLFxuICAgICAgICAgICAgICAgIGNvbHM6IGFjdGl2ZUNvbCxcbiAgICAgICAgICAgICAgICByb3dzOiBhY3RpdmVSb3csXG4gICAgICAgICAgICAgICAgaXNNdWx0aVZhbHVlOiBpc011bHRpVmFsdWUsXG4gICAgICAgICAgICAgICAgY29sdW1uQ29uZmlndXJhdGlvbjogY29sdW1uQ29uZmlndXJhdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sIFwiKlwiKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcImNyZWF0aW9uLWZlZWRiYWNrXCIgfSB9LCBcIipcIik7XG4gICAgfTtcbiAgICBjb25zdCBnb1RvQ29sdW1uQ29uZmlndXJhdGlvbiA9ICgpID0+IHtcbiAgICAgICAgc2V0QWN0aXZlU2NyZWVuKFwiQ29sdW1uQ29uZmlndXJhdGlvblwiKTtcbiAgICB9O1xuICAgIGNvbnN0IGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgICAgICBzZXRBY3RpdmVTY3JlZW4oXCJEaW1lbnNpb25zU2VsZWN0aW9uXCIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyVGFibGVDcmVhdG9yID0gKCkgPT4ge1xuICAgICAgICBpZiAoYWN0aXZlU2NyZWVuID09PSBcIkRpbWVuc2lvbnNTZWxlY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KERpbWVuc2lvbnNTZWxlY3Rpb24sIHsgaGFuZGxlR3JpZFNxdWFyZUNsaWNrOiBoYW5kbGVHcmlkU3F1YXJlQ2xpY2ssIGFjdGl2ZUNvbDogYWN0aXZlQ29sLCBhY3RpdmVSb3c6IGFjdGl2ZVJvdywgaXNNdWx0aVZhbHVlOiBpc011bHRpVmFsdWUsIHNldElzTXVsdGlWYWx1ZTogc2V0SXNNdWx0aVZhbHVlLCBoYW5kZUdyaWRTZWxlY3Rpb25JbnB1dHM6IGhhbmRlR3JpZFNlbGVjdGlvbklucHV0cywgZ29Ub0NvbHVtbkNvbmZpZ3VyYXRpb246IGdvVG9Db2x1bW5Db25maWd1cmF0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhY3RpdmVTY3JlZW4gPT09IFwiQ29sdW1uQ29uZmlndXJhdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29sdW1uQ29uZmlndXJhdGlvbiwgeyBjcmVhdGVUYWJsZTogY3JlYXRlVGFibGUsIGdvVG9EaW1lbnNpb25zU2VsZWN0aW9uOiBnb1RvRGltZW5zaW9uc1NlbGVjdGlvbiwgYWN0aXZlQ29sOiBhY3RpdmVDb2wsIGlzTXVsdGlWYWx1ZTogaXNNdWx0aVZhbHVlLCBjb2x1bW5Db25maWd1cmF0aW9uOiBjb2x1bW5Db25maWd1cmF0aW9uLCBzZXRDb2x1bW5Db25maWd1cmF0aW9uOiBzZXRDb2x1bW5Db25maWd1cmF0aW9uIH0pKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVuZGVyTmF2aWdhdGlvblRhYnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBbXCJ0YWJsZS1jcmVhdG9yXCJdO1xuICAgICAgICByZXR1cm4gdGFicy5tYXAoKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzID0gW1widGFiLW5hdmlnYXRpb24tdGFiXCJdO1xuICAgICAgICAgICAgbGV0IHRhYkNsYXNzZXNPdXRwdXQgPSB0YWJDbGFzc2VzLmpvaW4oXCIgXCIpO1xuICAgICAgICAgICAgbGV0IHRhYkxhYmVsID0gdGFiLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdGFiLnNwbGl0KFwiLVwiKS5qb2luKFwiIFwiKS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICBpZiAoYWN0aXZlVGFiID09PSB0YWIpIHtcbiAgICAgICAgICAgICAgICB0YWJDbGFzc2VzLnB1c2goXCJhY3RpdmVcIik7XG4gICAgICAgICAgICAgICAgdGFiQ2xhc3Nlc091dHB1dCA9IHRhYkNsYXNzZXMuam9pbihcIiBcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogdGFiQ2xhc3Nlc091dHB1dCwga2V5OiBpbmRleCB9LCB0YWJMYWJlbCkpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJ0YWItbmF2aWdhdGlvbi10YWIgYmFjay10YWJcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IEljb25DaGV2cm9uTGVmdCwgYWx0OiBcImJhY2sgYnV0dG9uXCIgfSkpLFxuICAgICAgICAgICAgcmVuZGVyTmF2aWdhdGlvblRhYnMoKSksXG4gICAgICAgIHJlbmRlclRhYmxlQ3JlYXRvcigpKSk7XG59O1xuZXhwb3J0IGRlZmF1bHQgVGFibGVDcmVhdG9yO1xuIiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFBsdWdpbkNvbnRleHQgfSBmcm9tIFwiLi9QbHVnaW5Db250ZXh0XCI7XG5pbXBvcnQgXCIuLi9zdHlsZXMvdWkuY3NzXCI7XG5pbXBvcnQgSWNvbkNoZXZyb25MZWZ0IGZyb20gXCIuLi9hc3NldHMvaWNvbi1jaGV2cm9uLWxlZnQuc3ZnXCI7XG5pbXBvcnQgTGlnaHRNb2RlVGh1bWJuYWlsIGZyb20gXCIuLi9hc3NldHMvbGlnaHQtbW9kZS10aHVtYm5haWwuc3ZnXCI7XG5pbXBvcnQgRGFya01vZGVUaHVtYm5haWwgZnJvbSBcIi4uL2Fzc2V0cy9kYXJrLW1vZGUtdGh1bWJuYWlsLnN2Z1wiO1xuY29uc3QgVGhlbWVTd2l0Y2hlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHVzZUNvbnRleHQoUGx1Z2luQ29udGV4dCk7XG4gICAgY29uc3QgeyBjdXJyZW50U2VsZWN0aW9uLCBsb2FkaW5nTGlnaHRTd2l0Y2gsIGxvYWRpbmdEYXJrU3dpdGNoIH0gPSBzdGF0ZTtcbiAgICBjb25zdCBbbG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2gsIHNldExvY2FsTG9hZGluZ0xpZ2h0U3dpdGNoXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbbG9jYWxMb2FkaW5nRGFya1N3aXRjaCwgc2V0TG9jYWxMb2FkaW5nRGFya1N3aXRjaF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgeyBzZXRBY3RpdmVQbHVnaW4gfSA9IHByb3BzO1xuICAgIGNvbnN0IGxpZ2h0TW9kZVJhZGlvT3B0aW9uID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGRhcmtNb2RlUmFkaW9PcHRpb24gPSB1c2VSZWYobnVsbCk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKChjdXJyZW50U2VsZWN0aW9uID09PSBudWxsIHx8IGN1cnJlbnRTZWxlY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRTZWxlY3Rpb24ubGVuZ3RoKSA+IFtdKSB7XG4gICAgICAgICAgICBsaWdodE1vZGVSYWRpb09wdGlvbi5jdXJyZW50LmNoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGRhcmtNb2RlUmFkaW9PcHRpb24uY3VycmVudC5jaGVja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9LCBbY3VycmVudFNlbGVjdGlvbl0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGxvYWRpbmdMaWdodFN3aXRjaCA9PT0gZmFsc2UgJiYgc2V0TG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2goZmFsc2UpO1xuICAgIH0sIFtsb2FkaW5nTGlnaHRTd2l0Y2hdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBsb2FkaW5nRGFya1N3aXRjaCA9PT0gZmFsc2UgJiYgc2V0TG9jYWxMb2FkaW5nRGFya1N3aXRjaChmYWxzZSk7XG4gICAgfSwgW2xvYWRpbmdEYXJrU3dpdGNoXSk7XG4gICAgY29uc3QgaGFuZGxlVGFiQ2xpY2sgPSAobmFtZU9mVGFiKSA9PiB7XG4gICAgICAgIHNldEFjdGl2ZVBsdWdpbihuYW1lT2ZUYWIpO1xuICAgIH07XG4gICAgY29uc3QgcmVuZGVyTmF2aWdhdGlvblRhYnMgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBbXCJ0aGVtZS1zd2l0Y2hlclwiXTtcbiAgICAgICAgcmV0dXJuIHRhYnMubWFwKCh0YWIsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgdGFiQ2xhc3NlcyA9IFtcInRhYi1uYXZpZ2F0aW9uLXRhYlwiLCBcImFjdGl2ZVwiXTtcbiAgICAgICAgICAgIGxldCB0YWJDbGFzc2VzT3V0cHV0ID0gdGFiQ2xhc3Nlcy5qb2luKFwiIFwiKTtcbiAgICAgICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHsgY2xhc3NOYW1lOiB0YWJDbGFzc2VzT3V0cHV0LCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVUYWJDbGljayh0YWIpLCBrZXk6IGluZGV4IH0sIFwiVGhlbWUgc3dpdGNoZXJcIikpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHNldERhcmtUaGVtZSA9ICgpID0+IHtcbiAgICAgICAgc2V0TG9jYWxMb2FkaW5nRGFya1N3aXRjaCh0cnVlKTtcbiAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKHsgcGx1Z2luTWVzc2FnZTogeyB0eXBlOiBcInRoZW1lLXN3aXRjaGVyLXRvLWRhcmtcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIGNvbnN0IHNldExpZ2h0VGhlbWUgPSAoKSA9PiB7XG4gICAgICAgIHNldExvY2FsTG9hZGluZ0xpZ2h0U3dpdGNoKHRydWUpO1xuICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoeyBwbHVnaW5NZXNzYWdlOiB7IHR5cGU6IFwidGhlbWUtc3dpdGNoZXItdG8tbGlnaHRcIiB9IH0sIFwiKlwiKTtcbiAgICB9O1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHsgY2xhc3NOYW1lOiBcInRhYi1uYXZpZ2F0aW9uXCIgfSxcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7IGNsYXNzTmFtZTogXCJ0YWItbmF2aWdhdGlvbi10YWIgYmFjay10YWJcIiwgb25DbGljazogKCkgPT4gc2V0QWN0aXZlUGx1Z2luKFwiaG9tZVwiKSB9LFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwgeyBzcmM6IEljb25DaGV2cm9uTGVmdCwgYWx0OiBcImJhY2sgYnV0dG9uXCIgfSkpLFxuICAgICAgICAgICAgcmVuZGVyTmF2aWdhdGlvblRhYnMoKSksXG4gICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJtYWluXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaDRcIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc3dpdGNoZXItaGVhZGluZ1wiIH0sIFwiQ2hvb3NlIGEgdGhlbWVcIiksXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwicFwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zd2l0Y2hlci1kZXNjcmlwdGlvblwiIH0sIFwiU2VsZWN0IHNvbWUgbGF5ZXJzLCB0aGVuIGNob3NlIGEgdGhlbWUgYmVsb3cuXCIpLFxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImZvcm1cIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWNvbnRhaW5lclwiIH0sXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tb3B0aW9uXCIgfSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgdHlwZTogXCJyYWRpb1wiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWlucHV0XCIsIGlkOiBcImxpZ2h0LW1vZGUtY2hlY2tib3hcIiwgbmFtZTogXCJ0aGVtZS1jaG9pY2VcIiwgcmVmOiBsaWdodE1vZGVSYWRpb09wdGlvbiB9KSxcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHsgaHRtbEZvcjogXCJsaWdodC1tb2RlLWNoZWNrYm94XCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24taW5wdXQtbGFiZWxcIiwgb25DbGljazogKCkgPT4gc2V0TGlnaHRUaGVtZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBMaWdodE1vZGVUaHVtYm5haWwsIGFsdDogXCJUaHVtYm5haWwgb2YgbGlnaHQgc2NyZWVuIGV4YW1wbGVcIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi10aHVtYm5haWwtaW1hZ2VcIiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1sYWJlbC10ZXh0XCIgfSwgXCJMaWdodCBtb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxMb2FkaW5nTGlnaHRTd2l0Y2ggJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zd2l0Y2hlci1sb2FkZXJcIiB9KSkpLFxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgeyBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLW9wdGlvblwiIH0sXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7IHR5cGU6IFwicmFkaW9cIiwgY2xhc3NOYW1lOiBcInRoZW1lLXNlbGVjdGlvbi1pbnB1dFwiLCBpZDogXCJkYXJrLW1vZGUtY2hlY2tib3hcIiwgbmFtZTogXCJ0aGVtZS1jaG9pY2VcIiwgcmVmOiBkYXJrTW9kZVJhZGlvT3B0aW9uIH0pLFxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGFiZWxcIiwgeyBodG1sRm9yOiBcImRhcmstbW9kZS1jaGVja2JveFwiLCBjbGFzc05hbWU6IFwidGhlbWUtc2VsZWN0aW9uLWlucHV0LWxhYmVsXCIsIG9uQ2xpY2s6ICgpID0+IHNldERhcmtUaGVtZSgpIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHsgc3JjOiBEYXJrTW9kZVRodW1ibmFpbCwgYWx0OiBcIlRodW1ibmFpbCBvZiBkYXJrIHNjcmVlbiBleGFtcGxlXCIsIGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tdGh1bWJuYWlsLWltYWdlXCIgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJ0aGVtZS1zZWxlY3Rpb24tbGFiZWwtdGV4dFwiIH0sIFwiRGFyayBtb2RlXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxMb2FkaW5nRGFya1N3aXRjaCAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBcInRoZW1lLXN3aXRjaGVyLWxvYWRlclwiIH0pKSkpKSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFRoZW1lU3dpdGNoZXI7XG4iLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IEFwcCBmcm9tICcuL2NvbXBvbmVudHMvQXBwJztcblJlYWN0RE9NLnJlbmRlcihSZWFjdC5jcmVhdGVFbGVtZW50KEFwcCwgbnVsbCksIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZWFjdC1wYWdlJykpO1xuIiwiaW1wb3J0IGFwaSBmcm9tIFwiIS4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgICAgICAgaW1wb3J0IGNvbnRlbnQgZnJvbSBcIiEhLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi91aS5jc3NcIjtcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5pbnNlcnQgPSBcImhlYWRcIjtcbm9wdGlvbnMuc2luZ2xldG9uID0gZmFsc2U7XG5cbnZhciB1cGRhdGUgPSBhcGkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgZGVmYXVsdCBjb250ZW50LmxvY2FscyB8fCB7fTsiLCIvKiFcbiAqIENoZWNrIGlmIHR3byBvYmplY3RzIG9yIGFycmF5cyBhcmUgZXF1YWxcbiAqIChjKSAyMDIxIENocmlzIEZlcmRpbmFuZGksIE1JVCBMaWNlbnNlLCBodHRwczovL2dvbWFrZXRoaW5ncy5jb21cbiAqIEBwYXJhbSAgeyp9ICAgICAgIG9iajEgVGhlIGZpcnN0IGl0ZW1cbiAqIEBwYXJhbSAgeyp9ICAgICAgIG9iajIgVGhlIHNlY29uZCBpdGVtXG4gKiBAcmV0dXJuIHtCb29sZWFufSAgICAgICBSZXR1cm5zIHRydWUgaWYgdGhleSdyZSBlcXVhbCBpbiB2YWx1ZVxuICovXG5jb25zdCBpc0VxdWFsID0gKG9iajEsIG9iajIpID0+IHtcbiAgLyoqXG4gICAqIE1vcmUgYWNjdXJhdGVseSBjaGVjayB0aGUgdHlwZSBvZiBhIEphdmFTY3JpcHQgb2JqZWN0XG4gICAqIEBwYXJhbSAge09iamVjdH0gb2JqIFRoZSBvYmplY3RcbiAgICogQHJldHVybiB7U3RyaW5nfSAgICAgVGhlIG9iamVjdCB0eXBlXG4gICAqL1xuICBmdW5jdGlvbiBnZXRUeXBlKG9iaikge1xuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZUFycmF5c0VxdWFsKCkge1xuICAgIC8vIENoZWNrIGxlbmd0aFxuICAgIGlmIChvYmoxLmxlbmd0aCAhPT0gb2JqMi5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGVhY2ggaXRlbSBpbiB0aGUgYXJyYXlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iajEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghaXNFcXVhbChvYmoxW2ldLCBvYmoyW2ldKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIElmIG5vIGVycm9ycywgcmV0dXJuIHRydWVcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGFyZU9iamVjdHNFcXVhbCgpIHtcbiAgICBpZiAoT2JqZWN0LmtleXMob2JqMSkubGVuZ3RoICE9PSBPYmplY3Qua2V5cyhvYmoyKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIENoZWNrIGVhY2ggaXRlbSBpbiB0aGUgb2JqZWN0XG4gICAgZm9yIChsZXQga2V5IGluIG9iajEpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqMSwga2V5KSkge1xuICAgICAgICBpZiAoIWlzRXF1YWwob2JqMVtrZXldLCBvYmoyW2tleV0pKSByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gSWYgbm8gZXJyb3JzLCByZXR1cm4gdHJ1ZVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlRnVuY3Rpb25zRXF1YWwoKSB7XG4gICAgcmV0dXJuIG9iajEudG9TdHJpbmcoKSA9PT0gb2JqMi50b1N0cmluZygpO1xuICB9XG5cbiAgZnVuY3Rpb24gYXJlUHJpbWF0aXZlc0VxdWFsKCkge1xuICAgIHJldHVybiBvYmoxID09PSBvYmoyO1xuICB9XG5cbiAgLy8gR2V0IHRoZSBvYmplY3QgdHlwZVxuICBsZXQgdHlwZSA9IGdldFR5cGUob2JqMSk7XG5cbiAgLy8gSWYgdGhlIHR3byBpdGVtcyBhcmUgbm90IHRoZSBzYW1lIHR5cGUsIHJldHVybiBmYWxzZVxuICBpZiAodHlwZSAhPT0gZ2V0VHlwZShvYmoyKSkgcmV0dXJuIGZhbHNlO1xuXG4gIC8vIENvbXBhcmUgYmFzZWQgb24gdHlwZVxuICBpZiAodHlwZSA9PT0gXCJhcnJheVwiKSByZXR1cm4gYXJlQXJyYXlzRXF1YWwoKTtcbiAgaWYgKHR5cGUgPT09IFwib2JqZWN0XCIpIHJldHVybiBhcmVPYmplY3RzRXF1YWwoKTtcbiAgaWYgKHR5cGUgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIGFyZUZ1bmN0aW9uc0VxdWFsKCk7XG4gIHJldHVybiBhcmVQcmltYXRpdmVzRXF1YWwoKTtcbn07XG5cbmV4cG9ydCB7IGlzRXF1YWwgfTtcbiJdLCJzb3VyY2VSb290IjoiIn0= >>>>>>> b1a4eed (chore(TableCreator): Force multi-value on at least one column when checked)